From 38295088603c820a2e490fe6bb059df0e7dfb781 Mon Sep 17 00:00:00 2001 From: Alan Agius <17563226+alan-agius4@users.noreply.github.com> Date: Tue, 12 May 2026 07:12:46 +0000 Subject: [PATCH 01/34] build: remove repository fields from package manifests and exclude packageManager from release filters Several changes to align package.json files. (cherry picked from commit 8b2b8281d4196064b316af3e084d75efedd39b5d) --- .ng-dev/release.mjs | 2 +- packages/angular/cli/package.json | 10 ---------- packages/angular/ssr/package.json | 8 +------- packages/ngtools/webpack/package.json | 10 ---------- tools/package_json_release_filter.jq | 2 +- 5 files changed, 3 insertions(+), 29 deletions(-) diff --git a/.ng-dev/release.mjs b/.ng-dev/release.mjs index eb5aad2e4fcf..19e111f22f80 100644 --- a/.ng-dev/release.mjs +++ b/.ng-dev/release.mjs @@ -18,7 +18,7 @@ export const release = { name, experimental, deprecated: { - version: '>=22.0.0-next.0', + version: '>=22.0.0-rc.0', message: 'Angular\'s Webpack support is deprecated. Use the esbuild and Vite-based "@angular/build" package instead.', }, diff --git a/packages/angular/cli/package.json b/packages/angular/cli/package.json index bc41c868bc88..4bf8f2a8d941 100644 --- a/packages/angular/cli/package.json +++ b/packages/angular/cli/package.json @@ -11,16 +11,6 @@ "angular-cli", "Angular CLI" ], - "repository": { - "type": "git", - "url": "git+https://github.com/angular/angular-cli.git" - }, - "author": "Angular Authors", - "license": "MIT", - "bugs": { - "url": "https://github.com/angular/angular-cli/issues" - }, - "homepage": "https://github.com/angular/angular-cli", "dependencies": { "@angular-devkit/architect": "workspace:0.0.0-EXPERIMENTAL-PLACEHOLDER", "@angular-devkit/core": "workspace:0.0.0-PLACEHOLDER", diff --git a/packages/angular/ssr/package.json b/packages/angular/ssr/package.json index 9cfd3d126e0a..5f5774a398c8 100644 --- a/packages/angular/ssr/package.json +++ b/packages/angular/ssr/package.json @@ -3,8 +3,6 @@ "version": "0.0.0-PLACEHOLDER", "description": "Angular server side rendering utilities", "type": "module", - "license": "MIT", - "homepage": "https://github.com/angular/angular-cli", "keywords": [ "angular", "ssr", @@ -39,9 +37,5 @@ "beasties": "0.4.2" }, "sideEffects": false, - "schematics": "./schematics/collection.json", - "repository": { - "type": "git", - "url": "git+https://github.com/angular/angular-cli.git" - } + "schematics": "./schematics/collection.json" } diff --git a/packages/ngtools/webpack/package.json b/packages/ngtools/webpack/package.json index 00924ddef652..7527640f0932 100644 --- a/packages/ngtools/webpack/package.json +++ b/packages/ngtools/webpack/package.json @@ -4,22 +4,12 @@ "description": "Webpack plugin that AoT compiles your Angular components and modules.", "main": "./src/index.js", "typings": "src/index.d.ts", - "license": "MIT", "keywords": [ "angular", "webpack", "plugin", "aot" ], - "repository": { - "type": "git", - "url": "git+https://github.com/angular/angular-cli.git" - }, - "author": "angular", - "bugs": { - "url": "https://github.com/angular/angular-cli/issues" - }, - "homepage": "https://github.com/angular/angular-cli/tree/main/packages/ngtools/webpack", "peerDependencies": { "@angular/compiler-cli": "0.0.0-ANGULAR-FW-PEER-DEP", "typescript": ">=6.0 <6.1", diff --git a/tools/package_json_release_filter.jq b/tools/package_json_release_filter.jq index 8fdae0df46c5..4e7c3c639c67 100644 --- a/tools/package_json_release_filter.jq +++ b/tools/package_json_release_filter.jq @@ -16,7 +16,7 @@ # Get the fields from root package.json that should override the project # package.json, i.e., every field except the following | ($root - | del(.bin, .description, .dependencies, .name, .main, .peerDependencies, .optionalDependencies, .typings, .version, .private, .workspaces, .resolutions, .scripts, .["ng-update"], .pnpm, .dependenciesMeta) + | del(.bin, .description, .dependencies, .name, .main, .peerDependencies, .optionalDependencies, .typings, .version, .private, .workspaces, .resolutions, .scripts, .["ng-update"], .pnpm, .dependenciesMeta, .packageManager) ) as $root_overrides # Use the project package.json as a base and override other fields from root From ea95e1a87ebfb5b452a6b6ffa7838ca1fe094100 Mon Sep 17 00:00:00 2001 From: Alan Agius <17563226+alan-agius4@users.noreply.github.com> Date: Mon, 11 May 2026 08:52:46 +0000 Subject: [PATCH 02/34] fix(@angular/ssr): remove stateful flag from URL_PARAMETER_REGEXP Removes the stateful `/g` flag from `URL_PARAMETER_REGEXP`. Previously, calling `.test()` on the global regular expression advanced its internal `lastIndex` property. This caused subsequent evaluations in the route extraction pipeline to silently fail to match, skipping `getPrerenderParams` for parameterized routes. Closes #33154 (cherry picked from commit 0fdcde5426c6b61a55f494077e71ecead08dd04d) --- packages/angular/ssr/src/routes/ng-routes.ts | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/packages/angular/ssr/src/routes/ng-routes.ts b/packages/angular/ssr/src/routes/ng-routes.ts index 438e8450d331..04f67c96d9d5 100644 --- a/packages/angular/ssr/src/routes/ng-routes.ts +++ b/packages/angular/ssr/src/routes/ng-routes.ts @@ -74,9 +74,14 @@ const MODULE_PRELOAD_MAX = 10; const CATCH_ALL_REGEXP = /\/(\*\*)$/; /** - * Regular expression to match segments preceded by a colon in a string. + * Regular expression to match a segment preceded by a colon in a string. */ -const URL_PARAMETER_REGEXP = /(? Date: Tue, 12 May 2026 10:56:17 -0400 Subject: [PATCH 03/34] test(@angular-devkit/build-webpack): remove unused createConsoleLogger usage Removes the last usage of `createConsoleLogger` in the repository from the webpack builder tests. This makes the test consistent with others in the file and allows for potential removal of the function. Also removes an unused `BuildResult` import in the same file. (cherry picked from commit 8ebd2f152dff25dd9dcba5d7b3aacbcf8482c7ad) --- .../build_webpack/src/builders/webpack/index_spec.ts | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/packages/angular_devkit/build_webpack/src/builders/webpack/index_spec.ts b/packages/angular_devkit/build_webpack/src/builders/webpack/index_spec.ts index 6209272d9376..3632f6858e77 100644 --- a/packages/angular_devkit/build_webpack/src/builders/webpack/index_spec.ts +++ b/packages/angular_devkit/build_webpack/src/builders/webpack/index_spec.ts @@ -10,9 +10,8 @@ import { Architect } from '@angular-devkit/architect'; import { WorkspaceNodeModulesArchitectHost } from '@angular-devkit/architect/node'; import { TestingArchitectHost } from '@angular-devkit/architect/testing'; import { join, normalize, schema, workspaces } from '@angular-devkit/core'; -import { NodeJsSyncHost, createConsoleLogger } from '@angular-devkit/core/node'; +import { NodeJsSyncHost } from '@angular-devkit/core/node'; import * as path from 'node:path'; -import { BuildResult } from './index'; describe('Webpack Builder basic test', () => { let testArchitectHost: TestingArchitectHost; @@ -99,11 +98,7 @@ describe('Webpack Builder basic test', () => { }); it('works', async () => { - const run = await architect.scheduleTarget( - { project: 'app', target: 'build-webpack' }, - {}, - { logger: createConsoleLogger() }, - ); + const run = await architect.scheduleTarget({ project: 'app', target: 'build-webpack' }); const output = await run.result; expect(output.success).toBe(true); From 6131ea1d47184cb264b3694bd8afaa517f7cf8e9 Mon Sep 17 00:00:00 2001 From: Charles Lyding <19598772+clydin@users.noreply.github.com> Date: Tue, 12 May 2026 11:02:14 -0400 Subject: [PATCH 04/34] refactor(@angular-devkit/core): deprecate createConsoleLogger `createConsoleLogger` is deprecated. Use a custom logger implementation instead. This does not apply to application code. (cherry picked from commit 015bbcb4e4efa329e8a4f863a1cb634ad1349844) --- goldens/public-api/angular_devkit/core/node/index.api.md | 2 +- packages/angular_devkit/core/node/cli-logger.ts | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/goldens/public-api/angular_devkit/core/node/index.api.md b/goldens/public-api/angular_devkit/core/node/index.api.md index cb18462521ca..9fcdee9770cb 100644 --- a/goldens/public-api/angular_devkit/core/node/index.api.md +++ b/goldens/public-api/angular_devkit/core/node/index.api.md @@ -11,7 +11,7 @@ import { Stats as Stats_2 } from 'node:fs'; import { Subject } from 'rxjs'; import { Subscription } from 'rxjs'; -// @public +// @public @deprecated export function createConsoleLogger(verbose?: boolean, stdout?: ProcessOutput, stderr?: ProcessOutput, colors?: Partial string>>): logging.Logger; // @public diff --git a/packages/angular_devkit/core/node/cli-logger.ts b/packages/angular_devkit/core/node/cli-logger.ts index 684c964019d3..a5cbada271ec 100644 --- a/packages/angular_devkit/core/node/cli-logger.ts +++ b/packages/angular_devkit/core/node/cli-logger.ts @@ -15,6 +15,8 @@ export interface ProcessOutput { /** * A Logger that sends information to STDOUT and STDERR. + * + * @deprecated Use a custom logger implementation instead. */ export function createConsoleLogger( verbose = false, From f8534392552f4896ee9449939cdc705010331e3d Mon Sep 17 00:00:00 2001 From: Alan Agius Date: Wed, 13 May 2026 12:31:06 +0200 Subject: [PATCH 05/34] fix(@angular/ssr): support all X-Forwarded-* headers when trustProxyHeaders is true Previously, setting `trustProxyHeaders: true` only allowed a predefined set of common proxy headers (such as `x-forwarded-for` and `x-forwarded-host`). This resulted in warning logs when requests contained other valid proxy headers like `x-forwarded-client-cert` or `x-forwarded-email`. (cherry picked from commit b75423d7a097f665157fe44855997f42bb0dc52a) --- packages/angular/ssr/src/utils/validation.ts | 26 ++++---- .../angular/ssr/test/utils/validation_spec.ts | 61 ++++++++++++++++--- 2 files changed, 67 insertions(+), 20 deletions(-) diff --git a/packages/angular/ssr/src/utils/validation.ts b/packages/angular/ssr/src/utils/validation.ts index f1f7d741dff7..3d57244c963e 100644 --- a/packages/angular/ssr/src/utils/validation.ts +++ b/packages/angular/ssr/src/utils/validation.ts @@ -7,15 +7,9 @@ */ /** - * Common X-Forwarded-* headers. + * Internal sentinel string representing a wildcard rule to trust all proxy headers. */ -const X_FORWARDED_HEADERS: ReadonlySet = new Set([ - 'x-forwarded-for', - 'x-forwarded-host', - 'x-forwarded-port', - 'x-forwarded-proto', - 'x-forwarded-prefix', -]); +const TRUST_ALL_PROXY_HEADERS = '*'; /** * The set of headers that should be validated for host header injection attacks. @@ -235,7 +229,10 @@ export function isProxyHeaderAllowed( headerName: string, trustProxyHeaders: ReadonlySet, ): boolean { - return trustProxyHeaders.has(headerName.toLowerCase()); + return ( + trustProxyHeaders.has(TRUST_ALL_PROXY_HEADERS) || + trustProxyHeaders.has(headerName.toLowerCase()) + ); } /** @@ -251,8 +248,15 @@ export function normalizeTrustProxyHeaders( } if (trustProxyHeaders === true) { - return X_FORWARDED_HEADERS; + return new Set([TRUST_ALL_PROXY_HEADERS]); } - return new Set(trustProxyHeaders.map((h) => h.toLowerCase())); + const normalizedTrustedProxyHeaders = new Set(trustProxyHeaders.map((h) => h.toLowerCase())); + if (normalizedTrustedProxyHeaders.has(TRUST_ALL_PROXY_HEADERS)) { + throw new Error( + `"${TRUST_ALL_PROXY_HEADERS}" is not allowed as a value for the "trustProxyHeaders" option.`, + ); + } + + return normalizedTrustedProxyHeaders; } diff --git a/packages/angular/ssr/test/utils/validation_spec.ts b/packages/angular/ssr/test/utils/validation_spec.ts index 618b7f7ea2bf..65562c21a755 100644 --- a/packages/angular/ssr/test/utils/validation_spec.ts +++ b/packages/angular/ssr/test/utils/validation_spec.ts @@ -8,6 +8,7 @@ import { getFirstHeaderValue, + normalizeTrustProxyHeaders, sanitizeRequestHeaders, validateRequest, validateUrl, @@ -37,6 +38,35 @@ describe('Validation Utils', () => { }); }); + describe('normalizeTrustProxyHeaders', () => { + it('should return an empty set when input is undefined', () => { + expect(normalizeTrustProxyHeaders(undefined)).toEqual(new Set()); + }); + + it('should return an empty set when input is false', () => { + expect(normalizeTrustProxyHeaders(false)).toEqual(new Set()); + }); + + it('should return a set containing "*" when input is true', () => { + expect(normalizeTrustProxyHeaders(true)).toEqual(new Set(['*'])); + }); + + it('should return a set of lowercased header names when input is an array of strings', () => { + expect(normalizeTrustProxyHeaders(['X-Forwarded-Host', 'X-Forwarded-Proto'])).toEqual( + new Set(['x-forwarded-host', 'x-forwarded-proto']), + ); + }); + + it('should throw an error if input array contains "*"', () => { + expect(() => normalizeTrustProxyHeaders(['*'])).toThrowError( + '"*" is not allowed as a value for the "trustProxyHeaders" option.', + ); + expect(() => normalizeTrustProxyHeaders(['X-Forwarded-Host', '*'])).toThrowError( + '"*" is not allowed as a value for the "trustProxyHeaders" option.', + ); + }); + }); + describe('validateUrl', () => { const allowedHosts = new Set(['example.com', '*.google.com']); @@ -224,15 +254,29 @@ describe('Validation Utils', () => { 'x-forwarded-proto': 'https', }, }); - const secured = sanitizeRequestHeaders(req, new Set()); + const secured = sanitizeRequestHeaders(req, normalizeTrustProxyHeaders(undefined)); expect(secured.headers.get('host')).toBe('example.com'); expect(secured.headers.has('x-forwarded-host')).toBeFalse(); expect(secured.headers.has('x-forwarded-proto')).toBeFalse(); }); - it('should retain allowed proxy headers when explicitly provided', () => { - const trustProxyHeaders = new Set(['x-forwarded-host']); + it('should scrub unallowed proxy headers when trustProxyHeaders is false', () => { + const req = new Request('http://example.com', { + headers: { + 'host': 'example.com', + 'x-forwarded-host': 'evil.com', + 'x-forwarded-proto': 'https', + }, + }); + const secured = sanitizeRequestHeaders(req, normalizeTrustProxyHeaders(false)); + + expect(secured.headers.get('host')).toBe('example.com'); + expect(secured.headers.has('x-forwarded-host')).toBeFalse(); + expect(secured.headers.has('x-forwarded-proto')).toBeFalse(); + }); + + it('should only retain allowed proxy headers when explicitly provided', () => { const req = new Request('http://example.com', { headers: { 'host': 'example.com', @@ -240,7 +284,7 @@ describe('Validation Utils', () => { 'x-forwarded-proto': 'https', }, }); - const secured = sanitizeRequestHeaders(req, trustProxyHeaders); + const secured = sanitizeRequestHeaders(req, normalizeTrustProxyHeaders(['x-forwarded-host'])); expect(secured.headers.get('host')).toBe('example.com'); expect(secured.headers.get('x-forwarded-host')).toBe('proxy.com'); @@ -253,23 +297,22 @@ describe('Validation Utils', () => { 'host': 'example.com', 'x-forwarded-host': 'proxy.com', 'x-forwarded-proto': 'https', + 'x-forwarded-email': 'user@example.com', }, }); - const secured = sanitizeRequestHeaders( - req, - new Set(['x-forwarded-host', 'x-forwarded-proto']), - ); + const secured = sanitizeRequestHeaders(req, normalizeTrustProxyHeaders(true)); expect(secured.headers.get('host')).toBe('example.com'); expect(secured.headers.get('x-forwarded-host')).toBe('proxy.com'); expect(secured.headers.get('x-forwarded-proto')).toBe('https'); + expect(secured.headers.get('x-forwarded-email')).toBe('user@example.com'); }); it('should not clone the request if no proxy headers need to be removed', () => { const req = new Request('http://example.com', { headers: { 'accept': 'application/json' }, }); - const secured = sanitizeRequestHeaders(req, new Set()); + const secured = sanitizeRequestHeaders(req, normalizeTrustProxyHeaders(false)); expect(secured).toBe(req); expect(secured.headers.get('accept')).toBe('application/json'); From 0a622bbddcdf944460253628389223f3db3eb9f0 Mon Sep 17 00:00:00 2001 From: Alan Agius <17563226+alan-agius4@users.noreply.github.com> Date: Wed, 13 May 2026 13:15:13 +0000 Subject: [PATCH 06/34] refactor(@angular/build): remove unused target parameter from getFeatureSupport The `target` parameter in the `getFeatureSupport` function is no longer used internally, so it has been removed to simplify the function signature and call sites. (cherry picked from commit c14eecad060d0b0eeeec30d459f7f45fb01dbae1) --- .../build/src/tools/esbuild/application-code-bundle.ts | 6 +++--- packages/angular/build/src/tools/esbuild/utils.ts | 8 ++------ packages/angular/build/src/tools/vite/utils.ts | 2 +- 3 files changed, 6 insertions(+), 10 deletions(-) diff --git a/packages/angular/build/src/tools/esbuild/application-code-bundle.ts b/packages/angular/build/src/tools/esbuild/application-code-bundle.ts index 7333843d7196..adb14dc2d737 100644 --- a/packages/angular/build/src/tools/esbuild/application-code-bundle.ts +++ b/packages/angular/build/src/tools/esbuild/application-code-bundle.ts @@ -67,7 +67,7 @@ export function createBrowserCodeBundleOptions( entryNames: outputNames.bundles, entryPoints, target, - supported: getFeatureSupport(target, zoneless), + supported: getFeatureSupport(zoneless), }; buildOptions.plugins ??= []; @@ -278,7 +278,7 @@ export function createServerMainCodeBundleOptions( js: `import './polyfills.server.mjs';`, }, entryPoints, - supported: getFeatureSupport(target, zoneless), + supported: getFeatureSupport(zoneless), }; buildOptions.plugins ??= []; @@ -423,7 +423,7 @@ export function createSsrEntryCodeBundleOptions( entryPoints: { 'server': ssrEntryNamespace, }, - supported: getFeatureSupport(target, true), + supported: getFeatureSupport(true), }; buildOptions.plugins ??= []; diff --git a/packages/angular/build/src/tools/esbuild/utils.ts b/packages/angular/build/src/tools/esbuild/utils.ts index 51eabbbfb84f..9024a981c3f7 100644 --- a/packages/angular/build/src/tools/esbuild/utils.ts +++ b/packages/angular/build/src/tools/esbuild/utils.ts @@ -187,16 +187,12 @@ export async function withNoProgress(text: string, action: () => T | Promise< } /** - * Generates a syntax feature object map for Angular applications based on a list of targets. + * Generates a syntax feature object map for Angular applications. * A full set of feature names can be found here: https://esbuild.github.io/api/#supported - * @param target An array of browser/engine targets in the format accepted by the esbuild `target` option. * @param nativeAsyncAwait Indicate whether to support native async/await. * @returns An object that can be used with the esbuild build `supported` option. */ -export function getFeatureSupport( - target: string[], - nativeAsyncAwait: boolean, -): BuildOptions['supported'] { +export function getFeatureSupport(nativeAsyncAwait: boolean): BuildOptions['supported'] { return { // Native async/await is not supported with Zone.js. Disabling support here will cause // esbuild to downlevel async/await, async generators, and for await...of to a Zone.js supported form. diff --git a/packages/angular/build/src/tools/vite/utils.ts b/packages/angular/build/src/tools/vite/utils.ts index 2f7cfba84306..8f3ded5325f7 100644 --- a/packages/angular/build/src/tools/vite/utils.ts +++ b/packages/angular/build/src/tools/vite/utils.ts @@ -100,7 +100,7 @@ export function getDepOptimizationConfig({ esbuildOptions: { // Set esbuild supported targets. target, - supported: getFeatureSupport(target, zoneless), + supported: getFeatureSupport(zoneless), plugins, loader, define: { From daca93435f7ed64d20a1b0521a62ce497040a762 Mon Sep 17 00:00:00 2001 From: Alan Agius <17563226+alan-agius4@users.noreply.github.com> Date: Mon, 11 May 2026 08:50:46 +0000 Subject: [PATCH 07/34] build: update cross-repo angular dependencies See associated pull request for more information. Closes #33118 as a pr takeover --- MODULE.bazel | 6 +- MODULE.bazel.lock | 30 +- modules/testing/builder/package.json | 2 +- package.json | 28 +- packages/angular/build/package.json | 6 +- .../src/builders/application/execute-build.ts | 5 +- .../node/src/common-engine/common-engine.ts | 2 + packages/angular/ssr/package.json | 12 +- .../angular_devkit/build_angular/package.json | 2 +- packages/ngtools/webpack/package.json | 4 +- pnpm-lock.yaml | 1468 ++++++++++------- tests/e2e/ng-snapshot/package.json | 32 +- tests/e2e/tests/build/chunk-optimizer-env.ts | 4 - 13 files changed, 900 insertions(+), 701 deletions(-) diff --git a/MODULE.bazel b/MODULE.bazel index 880cf3ce8662..a871d4677b5c 100644 --- a/MODULE.bazel +++ b/MODULE.bazel @@ -19,21 +19,21 @@ bazel_dep(name = "aspect_rules_jasmine", version = "2.0.4") bazel_dep(name = "rules_angular") git_override( module_name = "rules_angular", - commit = "b1d295334e70335dab7ac9984a989fae0a9c9dc2", + commit = "19914e2fb677d50b16360dcea8740a1b0dd46172", remote = "https://github.com/angular/rules_angular.git", ) bazel_dep(name = "devinfra") git_override( module_name = "devinfra", - commit = "48c48fa3848de5bb0ec1c3203558f099765165ab", + commit = "f91b383e3128872b21f709d2ae7543344c65526d", remote = "https://github.com/angular/dev-infra.git", ) bazel_dep(name = "rules_browsers") git_override( module_name = "rules_browsers", - commit = "b03f09ef28a08f8ae07482851cf5ecbf6ac23a2a", + commit = "bf27ea46fdbb0209526ca821f1500d4337eb8299", remote = "https://github.com/angular/rules_browsers.git", ) diff --git a/MODULE.bazel.lock b/MODULE.bazel.lock index 06eb02660a88..2d94cce72e38 100644 --- a/MODULE.bazel.lock +++ b/MODULE.bazel.lock @@ -24,9 +24,11 @@ "https://bcr.bazel.build/modules/aspect_rules_jasmine/2.0.4/source.json": "81ffb708333cd98ec3c0b4cc004f4d5cf92a16914b5196a2892c45141bba7cff", "https://bcr.bazel.build/modules/aspect_rules_js/2.0.0/MODULE.bazel": "b45b507574aa60a92796e3e13c195cd5744b3b8aff516a9c0cb5ae6a048161c5", "https://bcr.bazel.build/modules/aspect_rules_js/3.0.3/MODULE.bazel": "28a30e8fc33bf64a67835d64d124f6e05a7d59648dcb27b110fb3502f761e503", - "https://bcr.bazel.build/modules/aspect_rules_js/3.0.3/source.json": "bb8fff9a304452e1042af9522ad1d54d6f1d1fdf71c5127deadb6fd156654193", + "https://bcr.bazel.build/modules/aspect_rules_js/3.1.1/MODULE.bazel": "b83cf3ee44837345f1c926d70b96453deb5e244de43d08dcd7acad8d381c275a", + "https://bcr.bazel.build/modules/aspect_rules_js/3.1.1/source.json": "2806c2d7ce5993f68b74df5f3e2de45d4b2a5798afedd459d88e37c75562da97", "https://bcr.bazel.build/modules/aspect_rules_ts/3.8.8/MODULE.bazel": "b52b929a948438665809d49af610f58d1b14f63d6d21ab748f47b6050be4c1f6", - "https://bcr.bazel.build/modules/aspect_rules_ts/3.8.8/source.json": "5414530b761a45ab7ca6c49f0a2a9cf8dc0da772f5037cf05ca18aaa64bb1b19", + "https://bcr.bazel.build/modules/aspect_rules_ts/3.8.9/MODULE.bazel": "bd5f9ebf517cfcd377eaa7ce1cb16035d167f00774b77789909590c53bc6f20c", + "https://bcr.bazel.build/modules/aspect_rules_ts/3.8.9/source.json": "59e66656561571ed82ccff56c75c43d0bc79f0065ca8d17be2752d4f648d40c9", "https://bcr.bazel.build/modules/aspect_tools_telemetry/0.2.6/MODULE.bazel": "cafb8781ad591bc57cc765dca5fefab08cf9f65af363d162b79d49205c7f8af7", "https://bcr.bazel.build/modules/aspect_tools_telemetry/0.2.8/MODULE.bazel": "aa975a83e72bcaac62ee61ab12b788ea324a1d05c4aab28aadb202f647881679", "https://bcr.bazel.build/modules/aspect_tools_telemetry/0.3.3/MODULE.bazel": "37c764292861c2f70314efa9846bb6dbb44fc0308903b3285da6528305450183", @@ -87,7 +89,8 @@ "https://bcr.bazel.build/modules/jsoncpp/1.9.5/source.json": "4108ee5085dd2885a341c7fab149429db457b3169b86eb081fa245eadf69169d", "https://bcr.bazel.build/modules/libpfm/4.11.0/MODULE.bazel": "45061ff025b301940f1e30d2c16bea596c25b176c8b6b3087e92615adbd52902", "https://bcr.bazel.build/modules/package_metadata/0.0.2/MODULE.bazel": "fb8d25550742674d63d7b250063d4580ca530499f045d70748b1b142081ebb92", - "https://bcr.bazel.build/modules/package_metadata/0.0.2/source.json": "e53a759a72488d2c0576f57491ef2da0cf4aab05ac0997314012495935531b73", + "https://bcr.bazel.build/modules/package_metadata/0.0.3/MODULE.bazel": "77890552ecea9e284b5424c9de827a58099348763a4359e975c359a83d4faa83", + "https://bcr.bazel.build/modules/package_metadata/0.0.3/source.json": "742075a428ad12a3fa18a69014c2f57f01af910c6d9d18646c990200853e641a", "https://bcr.bazel.build/modules/platforms/0.0.10/MODULE.bazel": "8cb8efaf200bdeb2150d93e162c40f388529a25852b332cec879373771e48ed5", "https://bcr.bazel.build/modules/platforms/0.0.11/MODULE.bazel": "0daefc49732e227caa8bfa834d65dc52e8cc18a2faf80df25e8caea151a9413f", "https://bcr.bazel.build/modules/platforms/0.0.4/MODULE.bazel": "9b328e31ee156f53f3c416a64f8491f7eb731742655a47c9eec4703a71644aee", @@ -96,7 +99,8 @@ "https://bcr.bazel.build/modules/platforms/0.0.7/MODULE.bazel": "72fd4a0ede9ee5c021f6a8dd92b503e089f46c227ba2813ff183b71616034814", "https://bcr.bazel.build/modules/platforms/0.0.8/MODULE.bazel": "9f142c03e348f6d263719f5074b21ef3adf0b139ee4c5133e2aa35664da9eb2d", "https://bcr.bazel.build/modules/platforms/1.0.0/MODULE.bazel": "f05feb42b48f1b3c225e4ccf351f367be0371411a803198ec34a389fb22aa580", - "https://bcr.bazel.build/modules/platforms/1.0.0/source.json": "f4ff1fd412e0246fd38c82328eb209130ead81d62dcd5a9e40910f867f733d96", + "https://bcr.bazel.build/modules/platforms/1.1.0/MODULE.bazel": "1c0c09f5bdcf4b3f924720d2478a3711cb39f4977019ca5988685e5b7e18b3d2", + "https://bcr.bazel.build/modules/platforms/1.1.0/source.json": "fcf351c47596c939140ab0d333dfdd08ed1ea6ce33c2fe70c12493a301cf1344", "https://bcr.bazel.build/modules/protobuf/21.7/MODULE.bazel": "a5a29bb89544f9b97edce05642fac225a808b5b7be74038ea3640fae2f8e66a7", "https://bcr.bazel.build/modules/protobuf/27.0/MODULE.bazel": "7873b60be88844a0a1d8f80b9d5d20cfbd8495a689b8763e76c6372998d3f64c", "https://bcr.bazel.build/modules/protobuf/27.1/MODULE.bazel": "703a7b614728bb06647f965264967a8ef1c39e09e8f167b3ca0bb1fd80449c0d", @@ -195,8 +199,8 @@ "https://bcr.bazel.build/modules/stardoc/0.7.1/MODULE.bazel": "3548faea4ee5dda5580f9af150e79d0f6aea934fc60c1cc50f4efdd9420759e7", "https://bcr.bazel.build/modules/stardoc/0.7.2/MODULE.bazel": "fc152419aa2ea0f51c29583fab1e8c99ddefd5b3778421845606ee628629e0e5", "https://bcr.bazel.build/modules/stardoc/0.7.2/source.json": "58b029e5e901d6802967754adf0a9056747e8176f017cfe3607c0851f4d42216", - "https://bcr.bazel.build/modules/tar.bzl/0.10.1/MODULE.bazel": "bf5fda5b5ccef8c3c4a5f4886144377386e0baa382972f257acb42dcf40ea908", - "https://bcr.bazel.build/modules/tar.bzl/0.10.1/source.json": "3f1beb35acf53c270a9de493cdc775a985551d7069cfcf24e136b42f683bbb10", + "https://bcr.bazel.build/modules/tar.bzl/0.10.4/MODULE.bazel": "e8f9ff79199e8d9eaad7f1b0a77ad74b30bb82d794b87d8ca942bead5de83ae9", + "https://bcr.bazel.build/modules/tar.bzl/0.10.4/source.json": "20143442376c03426f6135292ba02d825cb75308aa47e6bf42dd4cc5a435c2ff", "https://bcr.bazel.build/modules/tar.bzl/0.2.1/MODULE.bazel": "52d1c00a80a8cc67acbd01649e83d8dd6a9dc426a6c0b754a04fe8c219c76468", "https://bcr.bazel.build/modules/tar.bzl/0.5.1/MODULE.bazel": "7c2eb3dcfc53b0f3d6f9acdfd911ca803eaf92aadf54f8ca6e4c1f3aee288351", "https://bcr.bazel.build/modules/tar.bzl/0.6.0/MODULE.bazel": "a3584b4edcfafcabd9b0ef9819808f05b372957bbdff41601429d5fd0aac2e7c", @@ -215,7 +219,7 @@ "moduleExtensions": { "@@aspect_rules_esbuild+//esbuild:extensions.bzl%esbuild": { "general": { - "bzlTransitiveDigest": "RJZEFwxTtTSj8BUT6RYAEkcq8BHH9IVPJ//T0MDu3sA=", + "bzlTransitiveDigest": "MQJLDxT19qO8UDYhAPbY8zMo2QMI4yt9q7XhDFjLO7s=", "usagesDigest": "6We6zwGoawD9YXqMI0KPaxEKJTnamXBsuOekhFS2D40=", "recordedFileInputs": {}, "recordedDirentsInputs": {}, @@ -430,7 +434,7 @@ }, "@@aspect_rules_ts+//ts:extensions.bzl%ext": { "general": { - "bzlTransitiveDigest": "dhTbv9E6UfT1WJmmu3ORRPO6AKFJvgBjBxu+BO+u1RY=", + "bzlTransitiveDigest": "cqZ07zAB92ofKybw48WmPNKyNQHaGZ7YVkj1SNs+f7c=", "usagesDigest": "QQqokxpCVnBJntX7dhxnf/c13LeWUQxDTUnILYCp4Jc=", "recordedFileInputs": {}, "recordedDirentsInputs": {}, @@ -494,7 +498,7 @@ "@@aspect_tools_telemetry+//:extension.bzl%telemetry": { "general": { "bzlTransitiveDigest": "cl5A2O84vDL6Tt+Qga8FCj1DUDGqn+e7ly5rZ+4xvcc=", - "usagesDigest": "0S2z9G3E1NIz6vCXk9IbRcO5LIckEcYVMSzRj2sEML8=", + "usagesDigest": "y/K1vMLYhlZhrdyg3UqaV3wb1hAy8ECSy2ibeBFcFZ0=", "recordedFileInputs": {}, "recordedDirentsInputs": {}, "envVariables": {}, @@ -503,8 +507,8 @@ "repoRuleId": "@@aspect_tools_telemetry+//:extension.bzl%tel_repository", "attributes": { "deps": { - "aspect_rules_js": "3.0.3", - "aspect_rules_ts": "3.8.8", + "aspect_rules_js": "3.1.1", + "aspect_rules_ts": "3.8.9", "aspect_rules_esbuild": "0.25.1", "aspect_rules_jasmine": "2.0.4", "aspect_tools_telemetry": "0.3.3" @@ -948,7 +952,7 @@ "@@rules_nodejs+//nodejs:extensions.bzl%node": { "general": { "bzlTransitiveDigest": "oZFClfRhTTwsYzpxVPkOpOt/r0+OzEfEV37au0jFZ0s=", - "usagesDigest": "bqCPXHiIs2yi6xo5XEjRzQJ3R8k+nwCWvizzoGSa3X8=", + "usagesDigest": "1vNEgfiNUxoLsAqSjuJplr7ufUJPhlDmiGBSws/ow1s=", "recordedFileInputs": {}, "recordedDirentsInputs": {}, "envVariables": {}, @@ -5338,7 +5342,7 @@ "@@yq.bzl+//yq:extensions.bzl%yq": { "general": { "bzlTransitiveDigest": "UfFMy8CWK4/dVo/tfaSAIYUiDGNAPes5eRllx9O9Q9Q=", - "usagesDigest": "xPeGU4HF2Tm+YRYp+urLJFiY6+9GledFMMrn4sTXP8M=", + "usagesDigest": "dCsOLXpanQn0FVrzeJazd2Hl9ZrUyH9czkX7lgm8LCM=", "recordedFileInputs": {}, "recordedDirentsInputs": {}, "envVariables": {}, diff --git a/modules/testing/builder/package.json b/modules/testing/builder/package.json index 705e97cb7ea8..9e67f25c024f 100644 --- a/modules/testing/builder/package.json +++ b/modules/testing/builder/package.json @@ -8,7 +8,7 @@ "browser-sync": "3.0.4", "istanbul-lib-instrument": "6.0.3", "jsdom": "29.1.1", - "ng-packagr": "22.0.0-next.3", + "ng-packagr": "22.0.0-next.4", "rxjs": "7.8.2", "vitest": "4.1.5" } diff --git a/package.json b/package.json index 2e6690180f6c..d47369392ed9 100644 --- a/package.json +++ b/package.json @@ -42,23 +42,23 @@ }, "homepage": "https://github.com/angular/angular-cli", "dependencies": { - "@angular/compiler-cli": "22.0.0-next.10", + "@angular/compiler-cli": "22.0.0-next.12", "typescript": "6.0.3" }, "devDependencies": { - "@angular/animations": "22.0.0-next.10", - "@angular/cdk": "22.0.0-next.7", - "@angular/common": "22.0.0-next.10", - "@angular/compiler": "22.0.0-next.10", - "@angular/core": "22.0.0-next.10", - "@angular/forms": "22.0.0-next.10", - "@angular/localize": "22.0.0-next.10", - "@angular/material": "22.0.0-next.7", - "@angular/ng-dev": "https://github.com/angular/dev-infra-private-ng-dev-builds.git#4de8a14a1682d0f07e0b14a3b26498757c195904", - "@angular/platform-browser": "22.0.0-next.10", - "@angular/platform-server": "22.0.0-next.10", - "@angular/router": "22.0.0-next.10", - "@angular/service-worker": "22.0.0-next.10", + "@angular/animations": "22.0.0-next.12", + "@angular/cdk": "22.0.0-next.8", + "@angular/common": "22.0.0-next.12", + "@angular/compiler": "22.0.0-next.12", + "@angular/core": "22.0.0-next.12", + "@angular/forms": "22.0.0-next.12", + "@angular/localize": "22.0.0-next.12", + "@angular/material": "22.0.0-next.8", + "@angular/ng-dev": "https://github.com/angular/dev-infra-private-ng-dev-builds.git#f084e2e88e71cdca8098489e6104ffcdbd9a8eda", + "@angular/platform-browser": "22.0.0-next.12", + "@angular/platform-server": "22.0.0-next.12", + "@angular/router": "22.0.0-next.12", + "@angular/service-worker": "22.0.0-next.12", "@babel/core": "7.29.0", "@bazel/bazelisk": "1.28.1", "@bazel/buildifier": "8.2.1", diff --git a/packages/angular/build/package.json b/packages/angular/build/package.json index 9aa419021594..eac8b1285613 100644 --- a/packages/angular/build/package.json +++ b/packages/angular/build/package.json @@ -53,9 +53,9 @@ "istanbul-lib-instrument": "6.0.3", "jsdom": "29.1.1", "less": "4.6.4", - "ng-packagr": "22.0.0-next.3", - "postcss": "8.5.13", - "rolldown": "1.0.0-rc.18", + "ng-packagr": "22.0.0-next.4", + "postcss": "8.5.14", + "rolldown": "1.0.0", "rxjs": "7.8.2", "vitest": "4.1.5" }, diff --git a/packages/angular/build/src/builders/application/execute-build.ts b/packages/angular/build/src/builders/application/execute-build.ts index 69b6db0c736d..d751eb7d298e 100644 --- a/packages/angular/build/src/builders/application/execute-build.ts +++ b/packages/angular/build/src/builders/application/execute-build.ts @@ -160,7 +160,10 @@ export async function executeBuild( // Only run if the number of lazy chunks meets the configured threshold. // This avoids overhead for small projects with few chunks. - if (lazyChunksCount >= optimizeChunksThreshold) { + + // TODO: Remove this log once chunk optimization is supported for server builds as this + // causes the file to be renamed and thus causes incorrect preloading. + if (!options.serverEntryPoint && lazyChunksCount >= optimizeChunksThreshold) { const { optimizeChunks } = await import('./chunk-optimizer'); const optimizationResult = await profileAsync('OPTIMIZE_CHUNKS', () => optimizeChunks( diff --git a/packages/angular/ssr/node/src/common-engine/common-engine.ts b/packages/angular/ssr/node/src/common-engine/common-engine.ts index 708d263cde84..0c97c20d891a 100644 --- a/packages/angular/ssr/node/src/common-engine/common-engine.ts +++ b/packages/angular/ssr/node/src/common-engine/common-engine.ts @@ -200,6 +200,8 @@ export class CommonEngine { const commonRenderingOptions = { url: opts.url, document, + // Validation is already happened in the render method. + allowedHosts: ['*'], }; return isBootstrapFn(moduleOrFactory) diff --git a/packages/angular/ssr/package.json b/packages/angular/ssr/package.json index 5f5774a398c8..5be4d2ba97a8 100644 --- a/packages/angular/ssr/package.json +++ b/packages/angular/ssr/package.json @@ -27,12 +27,12 @@ }, "devDependencies": { "@angular-devkit/schematics": "workspace:*", - "@angular/common": "22.0.0-next.10", - "@angular/compiler": "22.0.0-next.10", - "@angular/core": "22.0.0-next.10", - "@angular/platform-browser": "22.0.0-next.10", - "@angular/platform-server": "22.0.0-next.10", - "@angular/router": "22.0.0-next.10", + "@angular/common": "22.0.0-next.12", + "@angular/compiler": "22.0.0-next.12", + "@angular/core": "22.0.0-next.12", + "@angular/platform-browser": "22.0.0-next.12", + "@angular/platform-server": "22.0.0-next.12", + "@angular/router": "22.0.0-next.12", "@schematics/angular": "workspace:*", "beasties": "0.4.2" }, diff --git a/packages/angular_devkit/build_angular/package.json b/packages/angular_devkit/build_angular/package.json index f50208e0e73f..74bce20baaae 100644 --- a/packages/angular_devkit/build_angular/package.json +++ b/packages/angular_devkit/build_angular/package.json @@ -66,7 +66,7 @@ "devDependencies": { "@angular/ssr": "workspace:*", "browser-sync": "3.0.4", - "ng-packagr": "22.0.0-next.3", + "ng-packagr": "22.0.0-next.4", "undici": "8.2.0" }, "peerDependencies": { diff --git a/packages/ngtools/webpack/package.json b/packages/ngtools/webpack/package.json index 7527640f0932..23e30d431e49 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.0.0-next.10", - "@angular/compiler-cli": "22.0.0-next.10", + "@angular/compiler": "22.0.0-next.12", + "@angular/compiler-cli": "22.0.0-next.12", "typescript": "6.0.3", "webpack": "5.106.2" } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 6694d20de137..2c934f677888 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -14,8 +14,8 @@ importers: .: dependencies: '@angular/compiler-cli': - specifier: 22.0.0-next.10 - version: 22.0.0-next.10(@angular/compiler@22.0.0-next.10)(typescript@6.0.3) + specifier: 22.0.0-next.12 + version: 22.0.0-next.12(@angular/compiler@22.0.0-next.12)(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.0.0-next.10 - version: 22.0.0-next.10(@angular/core@22.0.0-next.10(@angular/compiler@22.0.0-next.10)(rxjs@7.8.2)(zone.js@0.16.1)) + specifier: 22.0.0-next.12 + version: 22.0.0-next.12(@angular/core@22.0.0-next.12(@angular/compiler@22.0.0-next.12)(rxjs@7.8.2)(zone.js@0.16.2)) '@angular/cdk': - specifier: 22.0.0-next.7 - version: 22.0.0-next.7(@angular/common@22.0.0-next.10(@angular/core@22.0.0-next.10(@angular/compiler@22.0.0-next.10)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.10(@angular/compiler@22.0.0-next.10)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@22.0.0-next.10(@angular/animations@22.0.0-next.10(@angular/core@22.0.0-next.10(@angular/compiler@22.0.0-next.10)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@22.0.0-next.10(@angular/core@22.0.0-next.10(@angular/compiler@22.0.0-next.10)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.10(@angular/compiler@22.0.0-next.10)(rxjs@7.8.2)(zone.js@0.16.1)))(rxjs@7.8.2) + specifier: 22.0.0-next.8 + version: 22.0.0-next.8(@angular/common@22.0.0-next.12(@angular/core@22.0.0-next.12(@angular/compiler@22.0.0-next.12)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.0.0-next.12(@angular/compiler@22.0.0-next.12)(rxjs@7.8.2)(zone.js@0.16.2))(@angular/platform-browser@22.0.0-next.12(@angular/animations@22.0.0-next.12(@angular/core@22.0.0-next.12(@angular/compiler@22.0.0-next.12)(rxjs@7.8.2)(zone.js@0.16.2)))(@angular/common@22.0.0-next.12(@angular/core@22.0.0-next.12(@angular/compiler@22.0.0-next.12)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.0.0-next.12(@angular/compiler@22.0.0-next.12)(rxjs@7.8.2)(zone.js@0.16.2)))(rxjs@7.8.2) '@angular/common': - specifier: 22.0.0-next.10 - version: 22.0.0-next.10(@angular/core@22.0.0-next.10(@angular/compiler@22.0.0-next.10)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2) + specifier: 22.0.0-next.12 + version: 22.0.0-next.12(@angular/core@22.0.0-next.12(@angular/compiler@22.0.0-next.12)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2) '@angular/compiler': - specifier: 22.0.0-next.10 - version: 22.0.0-next.10 + specifier: 22.0.0-next.12 + version: 22.0.0-next.12 '@angular/core': - specifier: 22.0.0-next.10 - version: 22.0.0-next.10(@angular/compiler@22.0.0-next.10)(rxjs@7.8.2)(zone.js@0.16.1) + specifier: 22.0.0-next.12 + version: 22.0.0-next.12(@angular/compiler@22.0.0-next.12)(rxjs@7.8.2)(zone.js@0.16.2) '@angular/forms': - specifier: 22.0.0-next.10 - version: 22.0.0-next.10(@angular/common@22.0.0-next.10(@angular/core@22.0.0-next.10(@angular/compiler@22.0.0-next.10)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.10(@angular/compiler@22.0.0-next.10)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@22.0.0-next.10(@angular/animations@22.0.0-next.10(@angular/core@22.0.0-next.10(@angular/compiler@22.0.0-next.10)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@22.0.0-next.10(@angular/core@22.0.0-next.10(@angular/compiler@22.0.0-next.10)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.10(@angular/compiler@22.0.0-next.10)(rxjs@7.8.2)(zone.js@0.16.1)))(rxjs@7.8.2) + specifier: 22.0.0-next.12 + version: 22.0.0-next.12(@angular/common@22.0.0-next.12(@angular/core@22.0.0-next.12(@angular/compiler@22.0.0-next.12)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.0.0-next.12(@angular/compiler@22.0.0-next.12)(rxjs@7.8.2)(zone.js@0.16.2))(@angular/platform-browser@22.0.0-next.12(@angular/animations@22.0.0-next.12(@angular/core@22.0.0-next.12(@angular/compiler@22.0.0-next.12)(rxjs@7.8.2)(zone.js@0.16.2)))(@angular/common@22.0.0-next.12(@angular/core@22.0.0-next.12(@angular/compiler@22.0.0-next.12)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.0.0-next.12(@angular/compiler@22.0.0-next.12)(rxjs@7.8.2)(zone.js@0.16.2)))(rxjs@7.8.2) '@angular/localize': - specifier: 22.0.0-next.10 - version: 22.0.0-next.10(@angular/compiler-cli@22.0.0-next.10(@angular/compiler@22.0.0-next.10)(typescript@6.0.3))(@angular/compiler@22.0.0-next.10) + specifier: 22.0.0-next.12 + version: 22.0.0-next.12(@angular/compiler-cli@22.0.0-next.12(@angular/compiler@22.0.0-next.12)(typescript@6.0.3))(@angular/compiler@22.0.0-next.12) '@angular/material': - specifier: 22.0.0-next.7 - version: 22.0.0-next.7(1ee8d5fdc2f291e5a1da1bc147744133) + specifier: 22.0.0-next.8 + version: 22.0.0-next.8(93ce75c341587667f5d7d40f3eefe13f) '@angular/ng-dev': - specifier: https://github.com/angular/dev-infra-private-ng-dev-builds.git#4de8a14a1682d0f07e0b14a3b26498757c195904 - version: https://codeload.github.com/angular/dev-infra-private-ng-dev-builds/tar.gz/4de8a14a1682d0f07e0b14a3b26498757c195904(@modelcontextprotocol/sdk@1.29.0(zod@4.4.2)) + specifier: https://github.com/angular/dev-infra-private-ng-dev-builds.git#f084e2e88e71cdca8098489e6104ffcdbd9a8eda + version: https://codeload.github.com/angular/dev-infra-private-ng-dev-builds/tar.gz/f084e2e88e71cdca8098489e6104ffcdbd9a8eda(@modelcontextprotocol/sdk@1.29.0(zod@4.4.2)) '@angular/platform-browser': - specifier: 22.0.0-next.10 - version: 22.0.0-next.10(@angular/animations@22.0.0-next.10(@angular/core@22.0.0-next.10(@angular/compiler@22.0.0-next.10)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@22.0.0-next.10(@angular/core@22.0.0-next.10(@angular/compiler@22.0.0-next.10)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.10(@angular/compiler@22.0.0-next.10)(rxjs@7.8.2)(zone.js@0.16.1)) + specifier: 22.0.0-next.12 + version: 22.0.0-next.12(@angular/animations@22.0.0-next.12(@angular/core@22.0.0-next.12(@angular/compiler@22.0.0-next.12)(rxjs@7.8.2)(zone.js@0.16.2)))(@angular/common@22.0.0-next.12(@angular/core@22.0.0-next.12(@angular/compiler@22.0.0-next.12)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.0.0-next.12(@angular/compiler@22.0.0-next.12)(rxjs@7.8.2)(zone.js@0.16.2)) '@angular/platform-server': - specifier: 22.0.0-next.10 - version: 22.0.0-next.10(@angular/common@22.0.0-next.10(@angular/core@22.0.0-next.10(@angular/compiler@22.0.0-next.10)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/compiler@22.0.0-next.10)(@angular/core@22.0.0-next.10(@angular/compiler@22.0.0-next.10)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@22.0.0-next.10(@angular/animations@22.0.0-next.10(@angular/core@22.0.0-next.10(@angular/compiler@22.0.0-next.10)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@22.0.0-next.10(@angular/core@22.0.0-next.10(@angular/compiler@22.0.0-next.10)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.10(@angular/compiler@22.0.0-next.10)(rxjs@7.8.2)(zone.js@0.16.1)))(rxjs@7.8.2) + specifier: 22.0.0-next.12 + version: 22.0.0-next.12(@angular/common@22.0.0-next.12(@angular/core@22.0.0-next.12(@angular/compiler@22.0.0-next.12)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/compiler@22.0.0-next.12)(@angular/core@22.0.0-next.12(@angular/compiler@22.0.0-next.12)(rxjs@7.8.2)(zone.js@0.16.2))(@angular/platform-browser@22.0.0-next.12(@angular/animations@22.0.0-next.12(@angular/core@22.0.0-next.12(@angular/compiler@22.0.0-next.12)(rxjs@7.8.2)(zone.js@0.16.2)))(@angular/common@22.0.0-next.12(@angular/core@22.0.0-next.12(@angular/compiler@22.0.0-next.12)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.0.0-next.12(@angular/compiler@22.0.0-next.12)(rxjs@7.8.2)(zone.js@0.16.2)))(rxjs@7.8.2) '@angular/router': - specifier: 22.0.0-next.10 - version: 22.0.0-next.10(@angular/common@22.0.0-next.10(@angular/core@22.0.0-next.10(@angular/compiler@22.0.0-next.10)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.10(@angular/compiler@22.0.0-next.10)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@22.0.0-next.10(@angular/animations@22.0.0-next.10(@angular/core@22.0.0-next.10(@angular/compiler@22.0.0-next.10)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@22.0.0-next.10(@angular/core@22.0.0-next.10(@angular/compiler@22.0.0-next.10)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.10(@angular/compiler@22.0.0-next.10)(rxjs@7.8.2)(zone.js@0.16.1)))(rxjs@7.8.2) + specifier: 22.0.0-next.12 + version: 22.0.0-next.12(@angular/common@22.0.0-next.12(@angular/core@22.0.0-next.12(@angular/compiler@22.0.0-next.12)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.0.0-next.12(@angular/compiler@22.0.0-next.12)(rxjs@7.8.2)(zone.js@0.16.2))(@angular/platform-browser@22.0.0-next.12(@angular/animations@22.0.0-next.12(@angular/core@22.0.0-next.12(@angular/compiler@22.0.0-next.12)(rxjs@7.8.2)(zone.js@0.16.2)))(@angular/common@22.0.0-next.12(@angular/core@22.0.0-next.12(@angular/compiler@22.0.0-next.12)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.0.0-next.12(@angular/compiler@22.0.0-next.12)(rxjs@7.8.2)(zone.js@0.16.2)))(rxjs@7.8.2) '@angular/service-worker': - specifier: 22.0.0-next.10 - version: 22.0.0-next.10(@angular/core@22.0.0-next.10(@angular/compiler@22.0.0-next.10)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2) + specifier: 22.0.0-next.12 + version: 22.0.0-next.12(@angular/core@22.0.0-next.12(@angular/compiler@22.0.0-next.12)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2) '@babel/core': specifier: 7.29.0 version: 7.29.0 @@ -78,13 +78,13 @@ importers: version: 0.28.0 '@eslint/compat': specifier: 2.0.5 - version: 2.0.5(eslint@10.3.0(jiti@2.6.1)) + version: 2.0.5(eslint@10.3.0(jiti@2.7.0)) '@eslint/eslintrc': specifier: 3.3.5 version: 3.3.5 '@eslint/js': specifier: 10.0.1 - version: 10.0.1(eslint@10.3.0(jiti@2.6.1)) + version: 10.0.1(eslint@10.3.0(jiti@2.7.0)) '@rollup/plugin-alias': specifier: ^6.0.0 version: 6.0.0(rollup@4.60.2) @@ -102,10 +102,10 @@ importers: version: 4.60.2 '@stylistic/eslint-plugin': specifier: ^5.0.0 - version: 5.10.0(eslint@10.3.0(jiti@2.6.1)) + version: 5.10.0(eslint@10.3.0(jiti@2.7.0)) '@tony.ganchev/eslint-plugin-header': specifier: ~3.4.0 - version: 3.4.4(eslint@10.3.0(jiti@2.6.1)) + version: 3.4.4(eslint@10.3.0(jiti@2.7.0)) '@types/babel__core': specifier: 7.20.5 version: 7.20.5 @@ -144,7 +144,7 @@ importers: version: 4.17.24 '@types/node': specifier: ^22.12.0 - version: 22.19.17 + version: 22.19.19 '@types/npm-package-arg': specifier: ^6.1.0 version: 6.1.4 @@ -174,10 +174,10 @@ importers: version: 1.1.9 '@typescript-eslint/eslint-plugin': specifier: 8.59.1 - version: 8.59.1(@typescript-eslint/parser@8.59.1(eslint@10.3.0(jiti@2.6.1))(typescript@6.0.3))(eslint@10.3.0(jiti@2.6.1))(typescript@6.0.3) + version: 8.59.1(@typescript-eslint/parser@8.59.1(eslint@10.3.0(jiti@2.7.0))(typescript@6.0.3))(eslint@10.3.0(jiti@2.7.0))(typescript@6.0.3) '@typescript-eslint/parser': specifier: 8.59.1 - version: 8.59.1(eslint@10.3.0(jiti@2.6.1))(typescript@6.0.3) + version: 8.59.1(eslint@10.3.0(jiti@2.7.0))(typescript@6.0.3) ajv: specifier: 8.20.0 version: 8.20.0 @@ -192,13 +192,13 @@ importers: version: 0.28.0 eslint: specifier: 10.3.0 - version: 10.3.0(jiti@2.6.1) + version: 10.3.0(jiti@2.7.0) eslint-config-prettier: specifier: 10.1.8 - version: 10.1.8(eslint@10.3.0(jiti@2.6.1)) + version: 10.1.8(eslint@10.3.0(jiti@2.7.0)) eslint-plugin-import: specifier: 2.32.0 - version: 2.32.0(@typescript-eslint/parser@8.59.1(eslint@10.3.0(jiti@2.6.1))(typescript@6.0.3))(eslint@10.3.0(jiti@2.6.1)) + version: 2.32.0(@typescript-eslint/parser@8.59.1(eslint@10.3.0(jiti@2.7.0))(typescript@6.0.3))(eslint@10.3.0(jiti@2.7.0)) express: specifier: 5.2.1 version: 5.2.1 @@ -273,7 +273,7 @@ importers: version: 6.4.1(rollup@4.60.2)(typescript@6.0.3) rollup-plugin-sourcemaps2: specifier: 0.5.6 - version: 0.5.6(@types/node@22.19.17)(rollup@4.60.2) + version: 0.5.6(@types/node@22.19.19)(rollup@4.60.2) semver: specifier: 7.7.4 version: 7.7.4 @@ -294,10 +294,10 @@ importers: version: 6.5.2(encoding@0.1.13) verdaccio-auth-memory: specifier: ^13.0.0 - version: 13.0.0 + version: 13.0.1 zone.js: specifier: ^0.16.0 - version: 0.16.1 + version: 0.16.2 modules/testing/builder: devDependencies: @@ -326,14 +326,14 @@ importers: specifier: 29.1.1 version: 29.1.1 ng-packagr: - specifier: 22.0.0-next.3 - version: 22.0.0-next.3(@angular/compiler-cli@22.0.0-next.10(@angular/compiler@22.0.0-next.10)(typescript@6.0.3))(tslib@2.8.1)(typescript@6.0.3) + specifier: 22.0.0-next.4 + version: 22.0.0-next.4(@angular/compiler-cli@22.0.0-next.12(@angular/compiler@22.0.0-next.12)(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.5 - version: 4.1.5(@opentelemetry/api@1.9.1)(@types/node@24.12.2)(@vitest/coverage-v8@4.1.5)(jiti@2.6.1)(jsdom@29.1.1)(less@4.6.4)(sass@1.99.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4) + version: 4.1.5(@opentelemetry/api@1.9.1)(@types/node@24.12.2)(@vitest/coverage-v8@4.1.5)(jsdom@29.1.1)(vite@7.3.2(@types/node@24.12.2)(jiti@2.7.0)(less@4.6.4)(sass@1.99.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0)) packages/angular/build: dependencies: @@ -357,7 +357,7 @@ importers: version: 6.0.12(@types/node@24.12.2) '@vitejs/plugin-basic-ssl': specifier: 2.3.0 - version: 2.3.0(vite@7.3.2(@types/node@24.12.2)(jiti@2.6.1)(less@4.6.4)(sass@1.99.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4)) + version: 2.3.0(vite@7.3.2(@types/node@24.12.2)(jiti@2.7.0)(less@4.6.4)(sass@1.99.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0)) beasties: specifier: 0.4.2 version: 0.4.2 @@ -408,7 +408,7 @@ importers: version: 0.2.16 vite: specifier: 7.3.2 - version: 7.3.2(@types/node@24.12.2)(jiti@2.6.1)(less@4.6.4)(sass@1.99.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4) + version: 7.3.2(@types/node@24.12.2)(jiti@2.7.0)(less@4.6.4)(sass@1.99.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0) watchpack: specifier: 2.5.1 version: 2.5.1 @@ -429,20 +429,20 @@ importers: specifier: 4.6.4 version: 4.6.4 ng-packagr: - specifier: 22.0.0-next.3 - version: 22.0.0-next.3(@angular/compiler-cli@22.0.0-next.10(@angular/compiler@22.0.0-next.10)(typescript@6.0.3))(tslib@2.8.1)(typescript@6.0.3) + specifier: 22.0.0-next.4 + version: 22.0.0-next.4(@angular/compiler-cli@22.0.0-next.12(@angular/compiler@22.0.0-next.12)(typescript@6.0.3))(tslib@2.8.1)(typescript@6.0.3) postcss: - specifier: 8.5.13 - version: 8.5.13 + specifier: 8.5.14 + version: 8.5.14 rolldown: - specifier: 1.0.0-rc.18 - version: 1.0.0-rc.18 + specifier: 1.0.0 + version: 1.0.0 rxjs: specifier: 7.8.2 version: 7.8.2 vitest: specifier: 4.1.5 - version: 4.1.5(@opentelemetry/api@1.9.1)(@types/node@24.12.2)(@vitest/coverage-v8@4.1.5)(jiti@2.6.1)(jsdom@29.1.1)(less@4.6.4)(sass@1.99.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4) + version: 4.1.5(@opentelemetry/api@1.9.1)(@types/node@24.12.2)(@vitest/coverage-v8@4.1.5)(jsdom@29.1.1)(vite@7.3.2(@types/node@24.12.2)(jiti@2.7.0)(less@4.6.4)(sass@1.99.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0)) optionalDependencies: lmdb: specifier: 3.5.4 @@ -527,23 +527,23 @@ importers: specifier: workspace:* version: link:../../angular_devkit/schematics '@angular/common': - specifier: 22.0.0-next.10 - version: 22.0.0-next.10(@angular/core@22.0.0-next.10(@angular/compiler@22.0.0-next.10)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2) + specifier: 22.0.0-next.12 + version: 22.0.0-next.12(@angular/core@22.0.0-next.12(@angular/compiler@22.0.0-next.12)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2) '@angular/compiler': - specifier: 22.0.0-next.10 - version: 22.0.0-next.10 + specifier: 22.0.0-next.12 + version: 22.0.0-next.12 '@angular/core': - specifier: 22.0.0-next.10 - version: 22.0.0-next.10(@angular/compiler@22.0.0-next.10)(rxjs@7.8.2)(zone.js@0.16.1) + specifier: 22.0.0-next.12 + version: 22.0.0-next.12(@angular/compiler@22.0.0-next.12)(rxjs@7.8.2)(zone.js@0.16.2) '@angular/platform-browser': - specifier: 22.0.0-next.10 - version: 22.0.0-next.10(@angular/animations@22.0.0-next.10(@angular/core@22.0.0-next.10(@angular/compiler@22.0.0-next.10)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@22.0.0-next.10(@angular/core@22.0.0-next.10(@angular/compiler@22.0.0-next.10)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.10(@angular/compiler@22.0.0-next.10)(rxjs@7.8.2)(zone.js@0.16.1)) + specifier: 22.0.0-next.12 + version: 22.0.0-next.12(@angular/animations@22.0.0-next.12(@angular/core@22.0.0-next.12(@angular/compiler@22.0.0-next.12)(rxjs@7.8.2)(zone.js@0.16.2)))(@angular/common@22.0.0-next.12(@angular/core@22.0.0-next.12(@angular/compiler@22.0.0-next.12)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.0.0-next.12(@angular/compiler@22.0.0-next.12)(rxjs@7.8.2)(zone.js@0.16.2)) '@angular/platform-server': - specifier: 22.0.0-next.10 - version: 22.0.0-next.10(@angular/common@22.0.0-next.10(@angular/core@22.0.0-next.10(@angular/compiler@22.0.0-next.10)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/compiler@22.0.0-next.10)(@angular/core@22.0.0-next.10(@angular/compiler@22.0.0-next.10)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@22.0.0-next.10(@angular/animations@22.0.0-next.10(@angular/core@22.0.0-next.10(@angular/compiler@22.0.0-next.10)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@22.0.0-next.10(@angular/core@22.0.0-next.10(@angular/compiler@22.0.0-next.10)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.10(@angular/compiler@22.0.0-next.10)(rxjs@7.8.2)(zone.js@0.16.1)))(rxjs@7.8.2) + specifier: 22.0.0-next.12 + version: 22.0.0-next.12(@angular/common@22.0.0-next.12(@angular/core@22.0.0-next.12(@angular/compiler@22.0.0-next.12)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/compiler@22.0.0-next.12)(@angular/core@22.0.0-next.12(@angular/compiler@22.0.0-next.12)(rxjs@7.8.2)(zone.js@0.16.2))(@angular/platform-browser@22.0.0-next.12(@angular/animations@22.0.0-next.12(@angular/core@22.0.0-next.12(@angular/compiler@22.0.0-next.12)(rxjs@7.8.2)(zone.js@0.16.2)))(@angular/common@22.0.0-next.12(@angular/core@22.0.0-next.12(@angular/compiler@22.0.0-next.12)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.0.0-next.12(@angular/compiler@22.0.0-next.12)(rxjs@7.8.2)(zone.js@0.16.2)))(rxjs@7.8.2) '@angular/router': - specifier: 22.0.0-next.10 - version: 22.0.0-next.10(@angular/common@22.0.0-next.10(@angular/core@22.0.0-next.10(@angular/compiler@22.0.0-next.10)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.10(@angular/compiler@22.0.0-next.10)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@22.0.0-next.10(@angular/animations@22.0.0-next.10(@angular/core@22.0.0-next.10(@angular/compiler@22.0.0-next.10)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@22.0.0-next.10(@angular/core@22.0.0-next.10(@angular/compiler@22.0.0-next.10)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.10(@angular/compiler@22.0.0-next.10)(rxjs@7.8.2)(zone.js@0.16.1)))(rxjs@7.8.2) + specifier: 22.0.0-next.12 + version: 22.0.0-next.12(@angular/common@22.0.0-next.12(@angular/core@22.0.0-next.12(@angular/compiler@22.0.0-next.12)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.0.0-next.12(@angular/compiler@22.0.0-next.12)(rxjs@7.8.2)(zone.js@0.16.2))(@angular/platform-browser@22.0.0-next.12(@angular/animations@22.0.0-next.12(@angular/core@22.0.0-next.12(@angular/compiler@22.0.0-next.12)(rxjs@7.8.2)(zone.js@0.16.2)))(@angular/common@22.0.0-next.12(@angular/core@22.0.0-next.12(@angular/compiler@22.0.0-next.12)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.0.0-next.12(@angular/compiler@22.0.0-next.12)(rxjs@7.8.2)(zone.js@0.16.2)))(rxjs@7.8.2) '@schematics/angular': specifier: workspace:* version: link:../../schematics/angular @@ -618,16 +618,16 @@ importers: version: 10.5.0(postcss@8.5.13) babel-loader: specifier: 10.1.1 - version: 10.1.1(@babel/core@7.29.0)(webpack@5.106.2(esbuild@0.28.0)) + version: 10.1.1(@babel/core@7.29.0)(webpack@5.106.2(esbuild@0.28.0)(postcss@8.5.13)) browserslist: specifier: ^4.26.0 version: 4.28.2 copy-webpack-plugin: specifier: 14.0.0 - version: 14.0.0(webpack@5.106.2(esbuild@0.28.0)) + version: 14.0.0(webpack@5.106.2(esbuild@0.28.0)(postcss@8.5.13)) css-loader: specifier: 7.1.4 - version: 7.1.4(webpack@5.106.2(esbuild@0.28.0)) + version: 7.1.4(webpack@5.106.2(esbuild@0.28.0)(postcss@8.5.13)) esbuild-wasm: specifier: 0.28.0 version: 0.28.0 @@ -648,16 +648,16 @@ importers: version: 4.6.4 less-loader: specifier: 12.3.2 - version: 12.3.2(less@4.6.4)(webpack@5.106.2(esbuild@0.28.0)) + version: 12.3.2(less@4.6.4)(webpack@5.106.2(esbuild@0.28.0)(postcss@8.5.13)) license-webpack-plugin: specifier: 4.0.2 - version: 4.0.2(webpack@5.106.2(esbuild@0.28.0)) + version: 4.0.2(webpack@5.106.2(esbuild@0.28.0)(postcss@8.5.13)) loader-utils: specifier: 3.3.1 version: 3.3.1 mini-css-extract-plugin: specifier: 2.10.2 - version: 2.10.2(webpack@5.106.2(esbuild@0.28.0)) + version: 2.10.2(webpack@5.106.2(esbuild@0.28.0)(postcss@8.5.13)) open: specifier: 11.0.0 version: 11.0.0 @@ -675,7 +675,7 @@ importers: version: 8.5.13 postcss-loader: specifier: 8.2.1 - version: 8.2.1(postcss@8.5.13)(typescript@6.0.3)(webpack@5.106.2(esbuild@0.28.0)) + version: 8.2.1(postcss@8.5.13)(typescript@6.0.3)(webpack@5.106.2(esbuild@0.28.0)(postcss@8.5.13)) resolve-url-loader: specifier: 5.0.0 version: 5.0.0 @@ -687,13 +687,13 @@ importers: version: 1.99.0 sass-loader: specifier: 16.0.7 - version: 16.0.7(sass@1.99.0)(webpack@5.106.2(esbuild@0.28.0)) + version: 16.0.7(sass@1.99.0)(webpack@5.106.2(esbuild@0.28.0)(postcss@8.5.13)) semver: specifier: 7.7.4 version: 7.7.4 source-map-loader: specifier: 5.0.0 - version: 5.0.0(webpack@5.106.2(esbuild@0.28.0)) + version: 5.0.0(webpack@5.106.2(esbuild@0.28.0)(postcss@8.5.13)) source-map-support: specifier: 0.5.21 version: 0.5.21 @@ -708,19 +708,19 @@ importers: version: 2.8.1 webpack: specifier: 5.106.2 - version: 5.106.2(esbuild@0.28.0) + version: 5.106.2(esbuild@0.28.0)(postcss@8.5.13) webpack-dev-middleware: specifier: 8.0.3 - version: 8.0.3(tslib@2.8.1)(webpack@5.106.2(esbuild@0.28.0)) + version: 8.0.3(tslib@2.8.1)(webpack@5.106.2(esbuild@0.28.0)(postcss@8.5.13)) webpack-dev-server: specifier: 5.2.3 - version: 5.2.3(bufferutil@4.1.0)(tslib@2.8.1)(utf-8-validate@6.0.6)(webpack@5.106.2(esbuild@0.28.0)) + version: 5.2.3(bufferutil@4.1.0)(tslib@2.8.1)(utf-8-validate@6.0.6)(webpack@5.106.2(esbuild@0.28.0)(postcss@8.5.13)) webpack-merge: specifier: 6.0.1 version: 6.0.1 webpack-subresource-integrity: specifier: 5.1.0 - version: 5.1.0(webpack@5.106.2(esbuild@0.28.0)) + version: 5.1.0(webpack@5.106.2(esbuild@0.28.0)(postcss@8.5.13)) devDependencies: '@angular/ssr': specifier: workspace:* @@ -729,8 +729,8 @@ importers: specifier: 3.0.4 version: 3.0.4(bufferutil@4.1.0)(utf-8-validate@6.0.6) ng-packagr: - specifier: 22.0.0-next.3 - version: 22.0.0-next.3(@angular/compiler-cli@22.0.0-next.10(@angular/compiler@22.0.0-next.10)(typescript@6.0.3))(tslib@2.8.1)(typescript@6.0.3) + specifier: 22.0.0-next.4 + version: 22.0.0-next.4(@angular/compiler-cli@22.0.0-next.12(@angular/compiler@22.0.0-next.12)(typescript@6.0.3))(tslib@2.8.1)(typescript@6.0.3) undici: specifier: 8.2.0 version: 8.2.0 @@ -822,11 +822,11 @@ importers: specifier: workspace:0.0.0-PLACEHOLDER version: link:../../angular_devkit/core '@angular/compiler': - specifier: 22.0.0-next.10 - version: 22.0.0-next.10 + specifier: 22.0.0-next.12 + version: 22.0.0-next.12 '@angular/compiler-cli': - specifier: 22.0.0-next.10 - version: 22.0.0-next.10(@angular/compiler@22.0.0-next.10)(typescript@6.0.3) + specifier: 22.0.0-next.12 + version: 22.0.0-next.12(@angular/compiler@22.0.0-next.12)(typescript@6.0.3) typescript: specifier: 6.0.3 version: 6.0.3 @@ -935,47 +935,47 @@ packages: resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} engines: {node: '>=6.0.0'} - '@angular/animations@22.0.0-next.10': - resolution: {integrity: sha512-o4YxddwSuqW/l+Mot35Se/k3H/7tarFDjppHaf7IEPmZVqRz2+6/LLfmv51RuSZmtt5L+0FIFmazFmS+3+wRNw==} - engines: {node: ^22.22.0 || >=24.13.1} + '@angular/animations@22.0.0-next.12': + resolution: {integrity: sha512-lhn6S0rlXIMccNzyCbA/1OyMzRBzVVVD/7G0hyk8MOGPyueNrla0lciabkyv9OxVVVmeQm2Fnpkx9xmCz0BP4Q==} + engines: {node: ^22.22.0 || ^24.13.1 || >=26.0.0} peerDependencies: - '@angular/core': 22.0.0-next.10 + '@angular/core': 22.0.0-next.12 - '@angular/cdk@22.0.0-next.7': - resolution: {integrity: sha512-dAJexPGuFn6LwHNRJU2UVNcv0pL8VZzGdcaTs77dPKAR0W8V42/EhFR02SvondsYMA7kpfLLBjVdH5ckwsTCkA==} + '@angular/cdk@22.0.0-next.8': + resolution: {integrity: sha512-6H/A2ExBPz1KpxqrB2C3U2c9Dcsvq9Xgttpv2ap73h8EVyWqilxmt6lsCl8JefcovEMjnL40srHnvPJnI+Ri1g==} peerDependencies: '@angular/common': ^22.0.0-0 || ^22.1.0-0 || ^22.2.0-0 || ^22.3.0-0 || ^23.0.0-0 '@angular/core': ^22.0.0-0 || ^22.1.0-0 || ^22.2.0-0 || ^22.3.0-0 || ^23.0.0-0 '@angular/platform-browser': ^22.0.0-0 || ^22.1.0-0 || ^22.2.0-0 || ^22.3.0-0 || ^23.0.0-0 rxjs: ^6.5.3 || ^7.4.0 - '@angular/common@22.0.0-next.10': - resolution: {integrity: sha512-AqcFvnjCMjwS9wNxCWMTy+tQH1Kr6HTHgyqBgDWP01Y4NDLicJSGtU99fZ7KXsalHyZyXmYqqZqvmyeCIzweqw==} - engines: {node: ^22.22.0 || >=24.13.1} + '@angular/common@22.0.0-next.12': + resolution: {integrity: sha512-PG7r+XfHJAyI9qnHBubcSJxNDURavGxq0Qe/F+TRaCsGzmQ/ojIe3phZyea/HXr72dDVvPrdFNeBIrNCN0D3Rg==} + engines: {node: ^22.22.0 || ^24.13.1 || >=26.0.0} peerDependencies: - '@angular/core': 22.0.0-next.10 + '@angular/core': 22.0.0-next.12 rxjs: ^6.5.3 || ^7.4.0 - '@angular/compiler-cli@22.0.0-next.10': - resolution: {integrity: sha512-kCV2elmGIVu+k0UydnWnGgiNEvmCe6diyXntz7Hw3Ynuap62/ZiiLcHZVJRGhuei7TIUu6qoNAKHj7jm8pQ2xw==} - engines: {node: ^22.22.0 || >=24.13.1} + '@angular/compiler-cli@22.0.0-next.12': + resolution: {integrity: sha512-vrVv0hKbXZmBau4UoqfEUBJ+cVA3M4WcJj0Tn1fyNcou6jLBw3fH4MuNBafpQWGR0oDWv01lK3chVP8XkLUeYg==} + engines: {node: ^22.22.0 || ^24.13.1 || >=26.0.0} hasBin: true peerDependencies: - '@angular/compiler': 22.0.0-next.10 + '@angular/compiler': 22.0.0-next.12 typescript: '>=6.0 <6.1' peerDependenciesMeta: typescript: optional: true - '@angular/compiler@22.0.0-next.10': - resolution: {integrity: sha512-EQKOrWGiZjZ5Jd4cV9wGxvqcS/8dfXIpo4hsvDQLvNGHQL3uVZqlCH+M6+iEahEYXO/u7QLcilDtOJ1jfwqbyQ==} - engines: {node: ^22.22.0 || >=24.13.1} + '@angular/compiler@22.0.0-next.12': + resolution: {integrity: sha512-/q3Zj9+bkKAE+Myoy6LEey52mX5p2rbnnNqzKFsJ45yni/c12NlDJ1M0BnU+FzI84rQmVPDrq3jkeIyTpDI2eA==} + engines: {node: ^22.22.0 || ^24.13.1 || >=26.0.0} - '@angular/core@22.0.0-next.10': - resolution: {integrity: sha512-L/uE6f8U+2aqzgNTq1OQbquV090kpR/lyOsnmtP4cZSUTPPG0fnIyA2ct3ycifw4xxpxEwhOv2VYQ4EYRyWb5w==} - engines: {node: ^22.22.0 || >=24.13.1} + '@angular/core@22.0.0-next.12': + resolution: {integrity: sha512-daGYyqLzfVMUQ+LvQjItyxVFyGnzvxffiyOcTX0t21ZPp+WxR4gC/q6PMzVUD1Jf25iS6TrBo3nD/ep6GbiD0A==} + engines: {node: ^22.22.0 || ^24.13.1 || >=26.0.0} peerDependencies: - '@angular/compiler': 22.0.0-next.10 + '@angular/compiler': 22.0.0-next.12 rxjs: ^6.5.3 || ^7.4.0 zone.js: ~0.15.0 || ~0.16.0 peerDependenciesMeta: @@ -984,74 +984,74 @@ packages: zone.js: optional: true - '@angular/forms@22.0.0-next.10': - resolution: {integrity: sha512-3RMIm2LmJwBSzQMIpv90ZAZfkkObW0Yq1GrpyJKv1U8lIQWcNnib1e9RIFVVMhTDk5+MRzpPH8Z5lAeo8yLAeg==} - engines: {node: ^22.22.0 || >=24.13.1} + '@angular/forms@22.0.0-next.12': + resolution: {integrity: sha512-DTUVS29tbm/g5P8atU/818IeIgsToPjZa/SMHfHY1VySxbJ9zpiXtWonTIANlZm1dla3ohrJ3G43PedW48nc7w==} + engines: {node: ^22.22.0 || ^24.13.1 || >=26.0.0} peerDependencies: - '@angular/common': 22.0.0-next.10 - '@angular/core': 22.0.0-next.10 - '@angular/platform-browser': 22.0.0-next.10 + '@angular/common': 22.0.0-next.12 + '@angular/core': 22.0.0-next.12 + '@angular/platform-browser': 22.0.0-next.12 rxjs: ^6.5.3 || ^7.4.0 - '@angular/localize@22.0.0-next.10': - resolution: {integrity: sha512-AuNQIl1OI1Lgje4KflwIlV7wEFQPE9WyNA8SgCR4Eief9N3TO4couzlfxUp72lq7eB13mCclScixiTZ+ys4aTA==} - engines: {node: ^22.22.0 || >=24.13.1} + '@angular/localize@22.0.0-next.12': + resolution: {integrity: sha512-KHRG2FpCYiy5pntfBvnl11ULzoS5t8nUPVJcfd7oe7RQfd+HyA/Sk56WPafE4Izu6hB8yCCQT4hq3yIgSKV5rg==} + engines: {node: ^22.22.0 || ^24.13.1 || >=26.0.0} hasBin: true peerDependencies: - '@angular/compiler': 22.0.0-next.10 - '@angular/compiler-cli': 22.0.0-next.10 + '@angular/compiler': 22.0.0-next.12 + '@angular/compiler-cli': 22.0.0-next.12 - '@angular/material@22.0.0-next.7': - resolution: {integrity: sha512-yRmvcm7qrR43GTG33czQ988bCnvspZBadOpA8uci1UHsLF76T/v6U1BNVeM8bZYUofURtvLjyGDlggJmGYqRtg==} + '@angular/material@22.0.0-next.8': + resolution: {integrity: sha512-sQUXI2gzVv8DCryapqzYTgJNrCAh+p9ugEkUtUVORvVTyBG95pqYZ5SU9UZFkqoSR/FHGDlbD7Fry/Jyuvrm0g==} peerDependencies: - '@angular/cdk': 22.0.0-next.7 + '@angular/cdk': 22.0.0-next.8 '@angular/common': ^22.0.0-0 || ^22.1.0-0 || ^22.2.0-0 || ^22.3.0-0 || ^23.0.0-0 '@angular/core': ^22.0.0-0 || ^22.1.0-0 || ^22.2.0-0 || ^22.3.0-0 || ^23.0.0-0 '@angular/forms': ^22.0.0-0 || ^22.1.0-0 || ^22.2.0-0 || ^22.3.0-0 || ^23.0.0-0 '@angular/platform-browser': ^22.0.0-0 || ^22.1.0-0 || ^22.2.0-0 || ^22.3.0-0 || ^23.0.0-0 rxjs: ^6.5.3 || ^7.4.0 - '@angular/ng-dev@https://codeload.github.com/angular/dev-infra-private-ng-dev-builds/tar.gz/4de8a14a1682d0f07e0b14a3b26498757c195904': - resolution: {tarball: https://codeload.github.com/angular/dev-infra-private-ng-dev-builds/tar.gz/4de8a14a1682d0f07e0b14a3b26498757c195904} - version: 0.0.0-e391d56ec4a9d89b4006515b0679350f1394d19a + '@angular/ng-dev@https://codeload.github.com/angular/dev-infra-private-ng-dev-builds/tar.gz/f084e2e88e71cdca8098489e6104ffcdbd9a8eda': + resolution: {tarball: https://codeload.github.com/angular/dev-infra-private-ng-dev-builds/tar.gz/f084e2e88e71cdca8098489e6104ffcdbd9a8eda} + version: 0.0.0-ba993c8a28db88485a5474bf9cc387dffd3eabd9 hasBin: true - '@angular/platform-browser@22.0.0-next.10': - resolution: {integrity: sha512-Gs4vo/2Mof1T4LCJUJuaPaQV18p0KpkrhWJ0gEVT6MFX/wjM1uuHvP25tPKYQysNzb2iaUTVcS8QwuX0HGPoJQ==} - engines: {node: ^22.22.0 || >=24.13.1} + '@angular/platform-browser@22.0.0-next.12': + resolution: {integrity: sha512-qdCfNO25c52RGx7pRD1cdBs+Qee+WULO7zHjZ2FV4x/hj8gpGk41FuMsp2TdZAsxEqdGl7udO6e6addfpmDVlw==} + engines: {node: ^22.22.0 || ^24.13.1 || >=26.0.0} peerDependencies: - '@angular/animations': 22.0.0-next.10 - '@angular/common': 22.0.0-next.10 - '@angular/core': 22.0.0-next.10 + '@angular/animations': 22.0.0-next.12 + '@angular/common': 22.0.0-next.12 + '@angular/core': 22.0.0-next.12 peerDependenciesMeta: '@angular/animations': optional: true - '@angular/platform-server@22.0.0-next.10': - resolution: {integrity: sha512-KTtW83mQfmwlyzUhf3oS+M7WzrYYB+0apkmEAw+7HuvsGbAcAFO9ltzhykPwfslwwEV6mqbkGJRFxtkpqMQGqA==} - engines: {node: ^22.22.0 || >=24.13.1} + '@angular/platform-server@22.0.0-next.12': + resolution: {integrity: sha512-jRcJzqiz31alb/hWTunoo424clEpue9ygYF76adMOPE0zTVVNAFDs9Gvo4NfJbWMmXxoI2i0ibB2dtE9kE2+hQ==} + engines: {node: ^22.22.0 || ^24.13.1 || >=26.0.0} peerDependencies: - '@angular/common': 22.0.0-next.10 - '@angular/compiler': 22.0.0-next.10 - '@angular/core': 22.0.0-next.10 - '@angular/platform-browser': 22.0.0-next.10 + '@angular/common': 22.0.0-next.12 + '@angular/compiler': 22.0.0-next.12 + '@angular/core': 22.0.0-next.12 + '@angular/platform-browser': 22.0.0-next.12 rxjs: ^6.5.3 || ^7.4.0 - '@angular/router@22.0.0-next.10': - resolution: {integrity: sha512-IV28yTF+HM4SBGJGaHEwdDNr3ASLfjQhBuKSKoUy4Yf5vg87qZzbZnXIFo1jQWmbAu7lnFMMTfuLqnwHl07dAQ==} - engines: {node: ^22.22.0 || >=24.13.1} + '@angular/router@22.0.0-next.12': + resolution: {integrity: sha512-x8+P6lcJyukJcTgu6vTgGB5RLCZvNXfHTjlukPr8jMoOyMxFPjHV33g+87pmVBjDKRK5pyRnXTqkanQwnwbguA==} + engines: {node: ^22.22.0 || ^24.13.1 || >=26.0.0} peerDependencies: - '@angular/common': 22.0.0-next.10 - '@angular/core': 22.0.0-next.10 - '@angular/platform-browser': 22.0.0-next.10 + '@angular/common': 22.0.0-next.12 + '@angular/core': 22.0.0-next.12 + '@angular/platform-browser': 22.0.0-next.12 rxjs: ^6.5.3 || ^7.4.0 - '@angular/service-worker@22.0.0-next.10': - resolution: {integrity: sha512-E72wxCjc/Oha0t0paXIjDUqfuak8ZMglmx7pCmZC50/84Nu1BkZ/d542nAAyVDVfiQl4wZWTBpD2DoHc7KWe+g==} - engines: {node: ^22.22.0 || >=24.13.1} + '@angular/service-worker@22.0.0-next.12': + resolution: {integrity: sha512-MbzZrbcgh1fPfS0a7ntVKidwHAU/VcfU/fMWn9P/6uOnrVjwRA/U7mN8c6Az6Qqj/8Dl/Wz49sLBV+B6vwggrA==} + engines: {node: ^22.22.0 || ^24.13.1 || >=26.0.0} hasBin: true peerDependencies: - '@angular/core': 22.0.0-next.10 + '@angular/core': 22.0.0-next.12 rxjs: ^6.5.3 || ^7.4.0 '@asamuzakjp/css-color@5.1.11': @@ -1391,8 +1391,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-modules-systemjs@7.29.0': - resolution: {integrity: sha512-PrujnVFbOdUpw4UHiVwKvKRLMMic8+eC0CuNlxjsyZUiBjhFdPsewdXCkveh2KqBA9/waD0W1b4hXSOBQJezpQ==} + '@babel/plugin-transform-modules-systemjs@7.29.4': + resolution: {integrity: sha512-N7QmZ0xRZfjHOfZeQLJjwgX2zS9pdGHSVl/cjSGlo4dXMqvurfxXDMKY4RqEKzPozV78VMcd0lxyG13mlbKc4w==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -2287,8 +2287,8 @@ packages: resolution: {integrity: sha512-IJn+8A3QZJfe7FUtWqHVNo3xJs7KFpurCWGWCiCz3oEh+BkRymKZ1QxfAbU2yGMDzTytLGQ2IV6T2r3cuo75/w==} engines: {node: '>=18'} - '@google/genai@1.50.1': - resolution: {integrity: sha512-YbkX7H9+1Pt8wOt7DDREy8XSoiL6fRDzZQRyaVBarFf8MR3zHGqVdvM4cLbDXqPhxqvegZShgfxb8kw9C7YhAQ==} + '@google/genai@1.52.0': + resolution: {integrity: sha512-gwSvbpiN/17O9TbsqSsE/OzZcpv5Fo4RQjdngGgogtuB9RsyJ8ZHhX5KjHj1bp5N9snN2eK8LDGXSaWW2hof8Q==} engines: {node: '>=20.0.0'} peerDependencies: '@modelcontextprotocol/sdk': ^1.25.2 @@ -2309,8 +2309,8 @@ packages: engines: {node: '>=6'} hasBin: true - '@grpc/proto-loader@0.8.0': - resolution: {integrity: sha512-rc1hOQtjIWGxcxpb9aHAfLpIctjEnsDehj0DAiVfBlmT84uvR0uUtN2hEi/ecvWVjXUGf5qPF4qEgiLOx1YIMQ==} + '@grpc/proto-loader@0.8.1': + resolution: {integrity: sha512-wtF6h+DY6M3YaDBPAmvuuA6jV8Sif9MjtOI5euKFWRgCDl5PeDpPsHR9u2l6St5ceY8AZgoNDww5+HvEsXFsGg==} engines: {node: '>=6'} hasBin: true @@ -2347,8 +2347,8 @@ packages: resolution: {integrity: sha512-doc2sWgJpbFQ64UflSVd17ibMGDuxO1yKgOgLMwavzESnXjFWJqUeG8saYosqKpHp4kWiM5x1nXvEjbpx90gzw==} engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} - '@inquirer/checkbox@5.1.4': - resolution: {integrity: sha512-w6KF8ZYRvqHhROkOTHXYC3qIV/KYEu5o12oLqQySvch61vrYtRxNSHTONSdJqWiFJPlCUQAHT5OgOIyuTr+MHQ==} + '@inquirer/checkbox@5.1.5': + resolution: {integrity: sha512-Jmf9tgBHIEK5SAOB7swYfStqmtkZb00xOTpSQmkoGEpdxOTpJi9RS0A8bkfDPHTTItZRJrRdZrEMu25wyj0VfQ==} engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} peerDependencies: '@types/node': '>=18' @@ -2365,8 +2365,8 @@ packages: '@types/node': optional: true - '@inquirer/core@11.1.9': - resolution: {integrity: sha512-BDE4fG22uYh1bGSifcj7JSx119TVYNViMhMu85usp4Fswrzh6M0DV3yld64jA98uOAa2GSQ4Bg4bZRm2d2cwSg==} + '@inquirer/core@11.1.10': + resolution: {integrity: sha512-a4Q5BXHQAHa9eO202sTaFCHFYVB3x5fauDuThEAdZ9gfn76pSxiKU7wWcEH0N1O0XmQvNfQNU6QXpiRxmYQx+A==} engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} peerDependencies: '@types/node': '>=18' @@ -2374,8 +2374,8 @@ packages: '@types/node': optional: true - '@inquirer/editor@5.1.1': - resolution: {integrity: sha512-6y11LgmNpmn5D2aB5FgnCfBUBK8ZstwLCalyJmORcJZ/WrhOjm16mu6eSqIx8DnErxDqSLr+Jkp+GP8/Nwd5tA==} + '@inquirer/editor@5.1.2': + resolution: {integrity: sha512-Y3Nor7S/DhIPo+8Ym/dSY4efwKI4BsflKDwXh0jNeXJsSF3dteS/3Yf+z4wkibVZDvYMyCgknSTQlNahfunGHg==} engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} peerDependencies: '@types/node': '>=18' @@ -2383,8 +2383,8 @@ packages: '@types/node': optional: true - '@inquirer/expand@5.0.13': - resolution: {integrity: sha512-dF2zvrFo9LshkcB23/O1il13kBkBltWIXzut1evfbuBLXMiGIuC45c+ZQ0uukjCDsvI8OWqun4FRYMnzFCQa3g==} + '@inquirer/expand@5.0.14': + resolution: {integrity: sha512-qyY9zcIX2eKYwaAUiQo9zORd61Lc3sXeM72fVbeHkYnDkqfr8/armcRbmVAIrExeJhI2puk+uomeKtWrpUVUmQ==} engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} peerDependencies: '@types/node': '>=18' @@ -2405,8 +2405,8 @@ packages: resolution: {integrity: sha512-NsSs4kzfm12lNetHwAn3GEuH317IzpwrMCbOuMIVytpjnJ90YYHNwdRgYGuKmVxwuIqSgqk3M5qqQt1cDk0tGQ==} engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} - '@inquirer/input@5.0.12': - resolution: {integrity: sha512-uiMFBl4LqFzJClh80Q3f9hbOFJ6kgkDWI4LjAeBuyO6EanVVMF69AgOvpi1qdqjDSjDN6578B6nky9ceEpI+1Q==} + '@inquirer/input@5.0.13': + resolution: {integrity: sha512-0l0jCHlJnXIV8CTxwQC0C+5Ziq8WP22edWgmciW2xYvoeoSck4v5FvCS1ctKdqLLR0dUo93uAHgWHywgBSoRyw==} engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} peerDependencies: '@types/node': '>=18' @@ -2414,8 +2414,8 @@ packages: '@types/node': optional: true - '@inquirer/number@4.0.12': - resolution: {integrity: sha512-/vrwhEf7Xsuh+YlHF4IjSy3g1cyrQuPaSiHIxCEbLu8qnfvrcvJyCkoktOOF+xV9gSb77/G0n3h04RbMDW2sIg==} + '@inquirer/number@4.0.13': + resolution: {integrity: sha512-WHmkYnnJAou5gx7RgcvAfUggnHNM1zWfoh0dFPl3dxVssuqt+dK5rIbaOYQXNyOegvFnopbKupjnhw2O8gANNg==} engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} peerDependencies: '@types/node': '>=18' @@ -2423,8 +2423,8 @@ packages: '@types/node': optional: true - '@inquirer/password@5.0.12': - resolution: {integrity: sha512-CBh7YHju623lxJRcAOo498ZUwIuMy63bqW/vVq0tQAZVv+lkWlHkP9ealYE1utWSisEShY5VMdzIXRmyEODzcQ==} + '@inquirer/password@5.0.13': + resolution: {integrity: sha512-XDGu64ROHZjOOXLAANvJN7iIxWKhOSCG5VakrZ5kaScVR+snVJCFglD/hL3/677awtWcu4pXoWa280CDIYcBeg==} engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} peerDependencies: '@types/node': '>=18' @@ -2441,8 +2441,8 @@ packages: '@types/node': optional: true - '@inquirer/rawlist@5.2.8': - resolution: {integrity: sha512-Su7FQvp5buZmCymN3PPoYv31ZQQX4ve2j02k7piGgKAWgE+AQRB5YoYVveGXcl3TZ9ldgRMSxj56YfDFmmaqLg==} + '@inquirer/rawlist@5.2.9': + resolution: {integrity: sha512-a1ErXEfgjfPYpyQ89dp+7n2IISjH9oQg3ygvF5adz8B7aHn4n2PjEgu1wpVTp69K3bj3lVLxP0qJ2b1clk1Whw==} engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} peerDependencies: '@types/node': '>=18' @@ -2450,8 +2450,8 @@ packages: '@types/node': optional: true - '@inquirer/search@4.1.8': - resolution: {integrity: sha512-fGiHKGD6DyPIYUWxoXnQTeXeyYqSOUrasDMABBmMHUalH/LxkuzY0xVRtimXAt1sUeeyYkVuKQx1bebMuN11Kw==} + '@inquirer/search@4.1.9': + resolution: {integrity: sha512-ZlbM28Q9lmLkFPNAIv+ZuY530n5Km8U1WW48oYEvDhe9yc2uL3m3t+JSdRUkQlk5fuIuskgiIVjcb7czFzQpuA==} engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} peerDependencies: '@types/node': '>=18' @@ -2459,8 +2459,8 @@ packages: '@types/node': optional: true - '@inquirer/select@5.1.4': - resolution: {integrity: sha512-2kWcGKPMLAXAWRp1AH1SLsQmX+j0QjeljyXMUji9WMZC8nRDO0b7qquIGr6143E7KMLt3VAIGNXzwa/6PXQs4Q==} + '@inquirer/select@5.1.5': + resolution: {integrity: sha512-6SRg6kHfK/sjLXOsuqNebuir+sjwrf/iWuRUnXgB2slzEewppI1WfzeS16XxDcOQmXBruMmmB9Cgrz7wsAxqMg==} engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} peerDependencies: '@types/node': '>=18' @@ -2719,8 +2719,8 @@ packages: cpu: [x64] os: [win32] - '@mswjs/interceptors@0.41.8': - resolution: {integrity: sha512-pRLMNKTSGRoLq+KnEB/7OY5vijw1XmcheAAOiv6pj7W1FG32kAGqj1C/RK/cqxRGr1Fh+zBi8sDur8kj3EQv6A==} + '@mswjs/interceptors@0.41.9': + resolution: {integrity: sha512-VVPPgHyQ6ShqnrmDWuxjmUIsO9gWyOZFmuOfLd9LfBGQJwZfy0gvv9pbHSJuoFNIYC7ZDX9aoFwowjcdSC4E8w==} engines: {node: '>=18'} '@napi-rs/nice-android-arm-eabi@1.1.1': @@ -3003,8 +3003,8 @@ packages: resolution: {integrity: sha512-cifvXDhcqMwwTlTK04GBNeIe7yyo28Mfby85QXFe1Yk8nmi36Ab/5UQwptOx84SsoGNRg+EVSjwzfSZMy6pmlw==} engines: {node: '>=14'} - '@oxc-project/types@0.128.0': - resolution: {integrity: sha512-huv1Y/LzBJkBVHt3OlC7u0zHBW9qXf1FdD7sGmc1rXc2P1mTwHssYv7jyGx5KAACSCH+9B3Bhn6Z9luHRvf7pQ==} + '@oxc-project/types@0.129.0': + resolution: {integrity: sha512-3oz8m3FGdr2nDXVqmFUw7jolKliC4MoyXYIG2c7gpjBnzUWQpUGIYcXYKxTdTi+N2jusvt610ckTMkxdwHkYEg==} '@parcel/watcher-android-arm64@2.5.6': resolution: {integrity: sha512-YQxSS34tPF/6ZG7r/Ih9xy+kP/WwediEUsqmtf0cuCV5TPPKw/PQHRhueUo6JdeFJaqV3pyjm0GdYjZotbRt/A==} @@ -3193,103 +3193,103 @@ packages: engines: {node: '>=18'} hasBin: true - '@rolldown/binding-android-arm64@1.0.0-rc.18': - resolution: {integrity: sha512-lIDyUAfD7U3+BWKzdxMbJcsYHuqXqmGz40aeRqvuAm3y5TkJSYTBW2RDrn65DJFPQqVjUAUqq5uz8urzQ8aBdQ==} + '@rolldown/binding-android-arm64@1.0.0': + resolution: {integrity: sha512-TWMZnRLMe63C2Lhyicviu7ZHaU4kxa6PS3rofvc9GmcvptzNN11BcfQ4Sl7MwTOsisQoa2keB/EBdNCAnUo8vA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [android] - '@rolldown/binding-darwin-arm64@1.0.0-rc.18': - resolution: {integrity: sha512-apJq2ktnGp27nSInMR5Vcj8kY6xJzDAvfdIFlpDcAK/w4cDO58qVoi1YQsES/SKiFNge/6e4CUzgjfHduYqWpQ==} + '@rolldown/binding-darwin-arm64@1.0.0': + resolution: {integrity: sha512-6XcD+8k0gPVItNagEw78/qqcBDwKcwDYS8V2hRmVsfUSIrd8cWe/CBvRDI5toqFyPfj+FJr6t8U6Xj2P2prEew==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [darwin] - '@rolldown/binding-darwin-x64@1.0.0-rc.18': - resolution: {integrity: sha512-5Ofot8xbs+pxRHJqm9/9N/4sTQOvdrwEsmPE9pdLEEoAbdZtG6F2LMDfO1sp6ZAtXJuJV/21ew2srq3W8NXB5g==} + '@rolldown/binding-darwin-x64@1.0.0': + resolution: {integrity: sha512-iN/tWVXRQDWvmZlKdceP1Dwug9GDpEymhb9p4xnEe6zvCg5lFmzVljl+1qR1NVx3yfGpr2Na+CuLmv5IU8uzfQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [darwin] - '@rolldown/binding-freebsd-x64@1.0.0-rc.18': - resolution: {integrity: sha512-7h8eeOTT1eyqJyx64BFCnWZpNm486hGWt2sqeLLgDxA0xI1oGZ9H7gK1S85uNGmBhkdPwa/6reTxfFFKvIsebw==} + '@rolldown/binding-freebsd-x64@1.0.0': + resolution: {integrity: sha512-jjQMDvvwSOuhOwMszD/klSOjyWMM3zI64hWTj9KT5x4MxRbZAf+7vLQ6qouRhtsLVFHr3f0ILaJAfgENPiQdAQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [freebsd] - '@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.18': - resolution: {integrity: sha512-eRcm/HVt9U/JFu5RKAEKwGQYtDCKWLiaH6wOnsSEp6NMBb/3Os8LgHZlNyzMpFVNmiiMFlfb2zEnebfzJrHFmg==} + '@rolldown/binding-linux-arm-gnueabihf@1.0.0': + resolution: {integrity: sha512-d//Dtg2x6/m3mbV64yUGNnDGNZaDGRpDLLNGerHQUVObuNaIQaaDp25yUiqGXtHEXX+NP2d0wAlmKgpYgIAJ2A==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [linux] - '@rolldown/binding-linux-arm64-gnu@1.0.0-rc.18': - resolution: {integrity: sha512-SOrT/cT4ukTmgnrEz/Hg3m7LBnuCLW9psDeMKrimRWY4I8DmnO7Lco8W2vtqPmMkbVu8iJ+g4GFLVLLOVjJ9DQ==} + '@rolldown/binding-linux-arm64-gnu@1.0.0': + resolution: {integrity: sha512-n7Ofp0mx+aB2cC+Sdy5YtMnXtY9lchnHbY+3Yt0uq9JsWQExf4f5Whu0tK0R8Jdc9S6RchTHjIFY7uc92puOVQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] libc: [glibc] - '@rolldown/binding-linux-arm64-musl@1.0.0-rc.18': - resolution: {integrity: sha512-QWjdxN1HJCpBTAcZ5N5F7wju3gVPzRzSpmGzx7na0c/1qpN9CFil+xt+l9lV/1M6/gqHSNXCiqPfwhVJPeLnug==} + '@rolldown/binding-linux-arm64-musl@1.0.0': + resolution: {integrity: sha512-EIVjy2cgd7uuMMo94FVkBp7F6DhcZAUwNURkSG3RwUmvAXR6s0ISxM81U+IydcZByPG0pZIHsf1b6kTxoFDgJA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] libc: [musl] - '@rolldown/binding-linux-ppc64-gnu@1.0.0-rc.18': - resolution: {integrity: sha512-ugCOyj7a4d9h3q9B+wXmf6g3a68UsjGh6dob5DHevHGMwDUbhsYNbSPxJsENcIttJZ9jv7qGM2UesLw5jqIhdg==} + '@rolldown/binding-linux-ppc64-gnu@1.0.0': + resolution: {integrity: sha512-JEwwOPcwTLAcpDQlqSmjEmfs63xJnSiUNIGvLcDLUHCWK4XowpS/7c7tUsUH6uT/ct6bMUTdXKfI8967FYj6mg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [ppc64] os: [linux] libc: [glibc] - '@rolldown/binding-linux-s390x-gnu@1.0.0-rc.18': - resolution: {integrity: sha512-kKWRhbsotpXkGbcd5dllUWg5gEXcDAa8u5YnP9AV5DYNbvJHGzzuwv7dpmhc8NqKMJldl0a+x76IHbspEpEmdA==} + '@rolldown/binding-linux-s390x-gnu@1.0.0': + resolution: {integrity: sha512-0wjCFhLrihtAubnT9iA0N++0pSV0z5Hg7tNGdNJ4RFaINceHadoF+kiFGyY1qSSNVIAZtLotG8Ju1bgDPkjnFA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [s390x] os: [linux] libc: [glibc] - '@rolldown/binding-linux-x64-gnu@1.0.0-rc.18': - resolution: {integrity: sha512-uCo8ElcCIAMyYAZyuIZ81oFkhTSIllNvUCHCAlbhlN4ji3uC28h7IIdlXyIvGO7HsuqnV9p3rD/bpH7XhIyhRw==} + '@rolldown/binding-linux-x64-gnu@1.0.0': + resolution: {integrity: sha512-Dfn7iak9BcMMePxcoJfpSbWqnEyrp/dRF63/8qW/eHBdOZov6x5aShLLEYGYdIeSJ6vMLK/XCVB+lGIxm41bQA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] libc: [glibc] - '@rolldown/binding-linux-x64-musl@1.0.0-rc.18': - resolution: {integrity: sha512-XNOQZtuE6yUIvx4rwGemwh8kpL1xvU41FXy/s9K7T/3JVcqGzo3NfKM2HrbrGgfPYGFW42f07Wk++aOC6B9NWA==} + '@rolldown/binding-linux-x64-musl@1.0.0': + resolution: {integrity: sha512-5/utzzDmD/pD/bmuaUcbTf/sZYy0aztwIVlfpoW1fTjCZ0BaPOMVWGZL1zvgxyi7ZIVYWlxKONHmSbHuiOh8Jw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] libc: [musl] - '@rolldown/binding-openharmony-arm64@1.0.0-rc.18': - resolution: {integrity: sha512-tSn/kzrfa7tNOXr7sEacDBN4YsIqTyLqh45IO0nHDwtpKIDNDJr+VFojt+4klSpChxB29JLyduSsE0MKEwa65A==} + '@rolldown/binding-openharmony-arm64@1.0.0': + resolution: {integrity: sha512-ouJs8VcUomfLfpbUECqFMRqdV4x6aeAK3MA4m6vTrJJjKyWTV5KnxZx7Jd9G+GlDaQQxubcba00x16OyJ1meig==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [openharmony] - '@rolldown/binding-wasm32-wasi@1.0.0-rc.18': - resolution: {integrity: sha512-+J9YGmc+czgqlhYmwun3S3O0FIZhsH8ep2456xwjAdIOmuJxM7xz4P4PtrxU+Bz17a/5bqPA8o3HAAoX0teUdg==} + '@rolldown/binding-wasm32-wasi@1.0.0': + resolution: {integrity: sha512-E+oHKGiDA+lsKMmFtffDDw91EryDT7uJocrIuCHqhm6bCTM6xFK+3gaCkYOHfPwQr0cCNarSM2xaELoQDz9jJg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [wasm32] - '@rolldown/binding-win32-arm64-msvc@1.0.0-rc.18': - resolution: {integrity: sha512-zsu47DgU0FQzSwi6sU9dZoEdUv7pc1AptSEz/Z8HBg54sV0Pbs3N0+CrIbTsgiu6EyoaNN9CHboqbLaz9lhOyQ==} + '@rolldown/binding-win32-arm64-msvc@1.0.0': + resolution: {integrity: sha512-yYK02n8Rngo+gbm1y6G0+7jk1sJ/2Wt7K0me0Y7k/ErBpyf+LJ2gFpqWVTcRV1rUepBlQRmpgWkTQCiiwrK0Ow==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [win32] - '@rolldown/binding-win32-x64-msvc@1.0.0-rc.18': - resolution: {integrity: sha512-7H+3yqGgmnlDTRRhw/xpYY9J1kf4GC681nVc4GqKhExZTDrVVrV2tsOR9kso0fvgBdcTCcQShx4SLLoHgaLwhg==} + '@rolldown/binding-win32-x64-msvc@1.0.0': + resolution: {integrity: sha512-14bpChMahXRRXiTwahSl+zzHPW6qQTXtkMuJBFlbo+pqSAews2d4BdCSHfrJ/MBsCZtpmTafsY+1QhBzitcmdg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [win32] - '@rolldown/pluginutils@1.0.0-rc.18': - resolution: {integrity: sha512-CUY5Mnhe64xQBGZEEXQ5WyZwsc1JU3vAZLIxtrsBt3LO6UOb+C8GunVKqe9sT8NeWb4lqSaoJtp2xo6GxT1MNw==} + '@rolldown/pluginutils@1.0.0': + resolution: {integrity: sha512-aKs/3GSWyV0mrhNmt/96/Z3yczC3yvrzYATCiCXQebBsGyYzjNdUphRVLeJQ67ySKVXRfMxt2lm12pmXvbPFQQ==} '@rollup/plugin-alias@6.0.0': resolution: {integrity: sha512-tPCzJOtS7uuVZd+xPhoy5W4vThe6KWXNmsFCNktaAh5RTqcLiSfT4huPQIXkgJ6YCOjJHvecOAzQxLFhPxKr+g==} @@ -3613,6 +3613,9 @@ packages: '@types/estree@1.0.8': resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} + '@types/estree@1.0.9': + resolution: {integrity: sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==} + '@types/events@3.0.3': resolution: {integrity: sha512-trOc4AAUThEz9hapPtSd7wf5tiQKvTtu5b371UxXdTuqzIh0ArcRspRP0i0Viu+LXstIQ1z96t1nsPxT9ol01g==} @@ -3676,8 +3679,8 @@ packages: '@types/node-fetch@2.6.13': resolution: {integrity: sha512-QGpRVpzSaUs30JBSGPjOg4Uveu384erbHBoT1zeONvyCfwQxIkUshLAOqN/k9EjGviPRmWTTe6aH2qySWKTVSw==} - '@types/node@22.19.17': - resolution: {integrity: sha512-wGdMcf+vPYM6jikpS/qhg6WiqSV/OhG+jeeHT/KlVqxYfD40iYJf9/AE1uQxVWFvU7MipKRkRv8NSHiCGgPr8Q==} + '@types/node@22.19.19': + resolution: {integrity: sha512-dyh/xO2Fh5bYrfWaaqGrRQQGkNdmYw6AmaAUvYeUMNTWQtvb796ikLdmTchRmOlOiIJ1TDXfWgVx1QkUlQ6Hew==} '@types/node@24.12.2': resolution: {integrity: sha512-A1sre26ke7HDIuY/M23nd9gfB+nrmhtYyMINbjI1zHJxYteKR6qSMX56FsmjMcDb3SMcjJg5BiRRgOCC/yBD0g==} @@ -3706,8 +3709,8 @@ packages: '@types/pumpify@1.4.5': resolution: {integrity: sha512-BGVAQyK5yJdfIII230fVYGY47V63hUNAhryuuS3b4lEN2LNwxUXFKsEf8QLDCjmZuimlj23BHppJgcrGvNtqKg==} - '@types/qs@6.15.0': - resolution: {integrity: sha512-JawvT8iBVWpzTrz3EGw9BTQFg3BQNmwERdKE22vlTxawwtbyUSlMppvZYKLZzB5zgACXdXxbD3m1bXaMqP/9ow==} + '@types/qs@6.15.1': + resolution: {integrity: sha512-GZHUBZR9hckSUhrxmp1nG6NwdpM9fCunJwyThLW1X3AyHgd9IlHb6VANpQQqDr2o/qQp6McZ3y/IA2rVzKzSbw==} '@types/range-parser@1.2.7': resolution: {integrity: sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==} @@ -3817,6 +3820,10 @@ packages: resolution: {integrity: sha512-ZDCjgccSdYPw5Bxh+my4Z0lJU96ZDN7jbBzvmEn0FZx3RtU1C7VWl6NbDx94bwY3V5YsgwRzJPOgeY2Q/nLG8A==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@typescript-eslint/types@8.59.3': + resolution: {integrity: sha512-ePFoH0g4ludssdRFqqDxQePCxU4WQyRa9+XVwjm7yLn0FKhMeoetC+qBEEI1Eyb1pGSDveTIT09Bvw2WhlGayg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@typescript-eslint/typescript-estree@8.59.1': resolution: {integrity: sha512-OUd+vJS05sSkOip+BkZ/2NS8RMxrAAJemsC6vU3kmfLyeaJT0TftHkV9mcx2107MmsBVXXexhVu4F0TZXyMl4g==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -3842,10 +3849,6 @@ packages: resolution: {integrity: sha512-SbmDMJpora293B+TDYfxJL5LEaFh7gdh0MmkPJCBkmGlRPmynTfHcQzVzAll3+IMYFkrf1zZtq/qlgorjaoFoQ==} engines: {node: '>=18'} - '@verdaccio/core@8.0.0': - resolution: {integrity: sha512-bfJjO1AsLhmjpAG7eABmiA5U3ntGfcMCp4sqjejkkaXfNdl9lwqr5nXFT4NRS460StcsblUNhE1veZbepsxu2Q==} - engines: {node: '>=18'} - '@verdaccio/core@8.0.0-next-8.21': resolution: {integrity: sha512-n3Y8cqf84cwXxUUdTTfEJc8fV55PONPKijCt2YaC0jilb5qp1ieB3d4brqTOdCdXuwkmnG2uLCiGpUd/RuSW0Q==} engines: {node: '>=18'} @@ -3854,6 +3857,10 @@ packages: resolution: {integrity: sha512-R8rDEa2mPjfHhEK2tWTMFnrfvyNmTd5ZrNz9X5/EiFVJPr/+oo9cTZkDXzY9+KREJUUIUFili4qynmBt0lw8nw==} engines: {node: '>=18'} + '@verdaccio/core@8.1.0': + resolution: {integrity: sha512-rGJy2dnwVwx6QvQqh1YEfyjigX/pyKjMAqO+d6uDYGoBw8Y25sMmJqwuaZx8GTvC3HigcteZBHjkOxFiBgoNLQ==} + engines: {node: '>=18'} + '@verdaccio/file-locking@10.3.1': resolution: {integrity: sha512-oqYLfv3Yg3mAgw9qhASBpjD50osj2AX4IwbkUtyuhhKGyoFU9eZdrbeW6tpnqUnj6yBMtAPm2eGD4BwQuX400g==} engines: {node: '>=12'} @@ -4332,8 +4339,8 @@ packages: bare-events: optional: true - bare-url@2.4.2: - resolution: {integrity: sha512-/9a2j4ac6ckpmAHvod/ob7x439OAHst/drc2Clnq+reRYd/ovddwcF4LfoxHyNk5AuGBnPg+HqFjmE/Zpq6v0A==} + bare-url@2.4.3: + resolution: {integrity: sha512-Kccpc7ACfXaxfeInfqKcZtW4pT5YBn1mesc4sCsun6sRwtbJ4h+sNOaksUpYEJUKfN65YWC6Bw2OJEFiKxq8nQ==} base64-js@1.5.1: resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} @@ -4342,8 +4349,8 @@ packages: resolution: {integrity: sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==} engines: {node: ^4.5.0 || >= 5.9} - baseline-browser-mapping@2.10.27: - resolution: {integrity: sha512-zEs/ufmZoUd7WftKpKyXaT6RFxpQ5Qm9xytKRHvJfxFV9DFJkZph9RvJ1LcOUi0Z1ZVijMte65JbILeV+8QQEA==} + baseline-browser-mapping@2.10.29: + resolution: {integrity: sha512-Asa2krT+XTPZINCS+2QcyS8WTkObE77RwkydwF7h6DmnKqbvlalz93m/dnphUyCa6SWSP51VgtEUf2FN+gelFQ==} engines: {node: '>=6.0.0'} hasBin: true @@ -4403,8 +4410,8 @@ packages: brace-expansion@2.1.0: resolution: {integrity: sha512-TN1kCZAgdgweJhWWpgKYrQaMNHcDULHkWwQIspdtjV4Y5aurRdZpjAqn6yX3FPqTA9ngHCc4hJxMAMgGfve85w==} - brace-expansion@5.0.5: - resolution: {integrity: sha512-VZznLgtwhn+Mact9tfiwx64fA9erHH/MCXEUfB/0bX/6Fz6ny5EGTXYltMocqg4xFAQZtnO3DHWWXi8RiuN7cQ==} + brace-expansion@5.0.6: + resolution: {integrity: sha512-kLpxurY4Z4r9sgMsyG0Z9uzsBlgiU/EFKhj/h91/8yHu0edo7XuixOIH3VcJ8kkxs6/jPzoI6U9Vj3WqbMQ94g==} engines: {node: 18 || 20 || >=22} braces@3.0.3: @@ -4493,8 +4500,8 @@ packages: resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} engines: {node: '>=6'} - caniuse-lite@1.0.30001791: - resolution: {integrity: sha512-yk0l/YSrOnFZk3UROpDLQD9+kC1l4meK/wed583AXrzoarMGJcbRi2Q4RaUYbKxYAsZ8sWmaSa/DsLmdBeI1vQ==} + caniuse-lite@1.0.30001792: + resolution: {integrity: sha512-hVLMUZFgR4JJ6ACt1uEESvQN1/dBVqPAKY0hgrV70eN3391K6juAfTjKZLKvOMsx8PxA7gsY1/tLMMTcfFLLpw==} caseless@0.12.0: resolution: {integrity: sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==} @@ -4976,8 +4983,8 @@ packages: engines: {node: '>=0.12.18'} hasBin: true - electron-to-chromium@1.5.349: - resolution: {integrity: sha512-QsWVGyRuY07Aqb234QytTfwd5d9AJlfNIQ5wIOl1L+PZDzI9d9+Fn0FRale/QYlFxt/bUnB0/nLd1jFPGxGK1A==} + electron-to-chromium@1.5.353: + resolution: {integrity: sha512-kOrWphBi8TOZyiJZqsgqIle0lw+tzmnQK83pV9dZUd01Nm2POECSyFQMAuarzZdYqQW7FH9RaYOuaRo3h+bQ3w==} emoji-regex@10.6.0: resolution: {integrity: sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==} @@ -5017,8 +5024,8 @@ packages: resolution: {integrity: sha512-DgOngfDKM2EviOH3Mr9m7ks1q8roetLy/IMmYthAYzbpInMbYc/GS+fWFA3rl1gvwKVsQrVV61fo5emD1y3OJQ==} engines: {node: '>=10.2.0'} - enhanced-resolve@5.21.0: - resolution: {integrity: sha512-otxSQPw4lkOZWkHpB3zaEQs6gWYEsmX4xQF68ElXC/TWvGxGMSGOvoNbaLXm6/cS/fSfHtsEdw90y20PCd+sCA==} + enhanced-resolve@5.21.3: + resolution: {integrity: sha512-QyL119InA+XXEkNLNTPCXPugSvOfhwv0JOlGNzvxs0hZaiHLNvXSpudUWsOlsXGWJh8G6ckCScEkVHfX3kw/2Q==} engines: {node: '>=10.13.0'} ent@2.2.2: @@ -5270,8 +5277,8 @@ packages: express-rate-limit@5.5.1: resolution: {integrity: sha512-MTjE2eIbHv5DyfuFz4zLYWxpqVhEhkTiwFGuB74Q9CSou2WHO52nlE5y3Zlg6SIsiYUIPj6ifFxnkPz6O3sIUg==} - express-rate-limit@8.4.1: - resolution: {integrity: sha512-NGVYwQSAyEQgzxX1iCM978PP9AdO/hW93gMcF6ZwQCm+rFvLsBH6w4xcXWTcliS8La5EPRN3p9wzItqBwJrfNw==} + express-rate-limit@8.5.1: + resolution: {integrity: sha512-5O6KYmyJEpuPJV5hNTXKbAHWRqrzyu+OI3vUnSd2kXFubIVpG7ezpgxQy76Zo5GQZtrQBg86hF+CM/NX+cioiQ==} engines: {node: '>= 16'} peerDependencies: express: '>= 4.11' @@ -5280,6 +5287,10 @@ packages: resolution: {integrity: sha512-F2X8g9P1X7uCPZMA3MVf9wcTqlyNp7IhH5qPCI0izhaOIYXaW9L535tGA3qmjRzpH+bZczqq7hVKxTR4NWnu+g==} engines: {node: '>= 0.10.0'} + express@4.22.2: + resolution: {integrity: sha512-IuL+Elrou2ZvCFHs18/CIzy2Nzvo25nZ1/D2eIZlz7c+QUayAcYoiM2BthCjs+EBHVpjYjcuLDAiCWgeIX3X1Q==} + engines: {node: '>= 0.10.0'} + express@5.2.1: resolution: {integrity: sha512-hIS4idWWai69NezIdRt2xFVofaF4j+6INOpJlVOLDO8zXGpUVEVzIYk12UUi2JzjEzWL3IOAxcTubgz9Po0yXw==} engines: {node: '>= 18'} @@ -5321,8 +5332,8 @@ packages: fast-string-width@3.0.2: resolution: {integrity: sha512-gX8LrtNEI5hq8DVUfRQMbr5lpaS4nMIWV+7XEbXk2b8kiQIizgnlr12B4dA3ZEx3308ze0O4Q1R+cHts8kyUJg==} - fast-uri@3.1.0: - resolution: {integrity: sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==} + fast-uri@3.1.2: + resolution: {integrity: sha512-rVjf7ArG3LTk+FS6Yw81V1DLuZl1bRbNrev6Tmd/9RaroeeRRJhAt7jg/6YFxbvAQXUCavSoZhPPj6oOx+5KjQ==} fast-wrap-ansi@0.2.0: resolution: {integrity: sha512-rLV8JHxTyhVmFYhBJuMujcrHqOT2cnO5Zxj37qROj23CP39GXubJRBUFF0z8KFK77Uc0SukZUf7JZhsVEQ6n8w==} @@ -5500,8 +5511,8 @@ packages: resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} engines: {node: 6.* || 8.* || >= 10.*} - get-east-asian-width@1.5.0: - resolution: {integrity: sha512-CQ+bEO+Tva/qlmw24dCejulK5pMzVnUOFOijVogd3KQs07HnRIgp8TGipvCCRT06xeYEbpbgwaCxglFyiuIcmA==} + get-east-asian-width@1.6.0: + resolution: {integrity: sha512-QRbvDIbx6YklUe6RxeTeleMR0yv3cYH6PsPZHcnVn7xv7zO1BHN8r0XETu8n6Ye3Q+ahtSarc3WgtNWmehIBfA==} engines: {node: '>=18'} get-intrinsic@1.3.0: @@ -5609,8 +5620,8 @@ packages: peerDependencies: graphql: ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 - graphql@16.13.2: - resolution: {integrity: sha512-5bJ+nf/UCpAjHM8i06fl7eLyVC9iuNAjm9qzkiu2ZGhM0VscSvS6WDPfAwkdkBuoXGM9FJSbKl6wylMwP9Ktig==} + graphql@16.14.0: + resolution: {integrity: sha512-BBvQ/406p+4CZbTpCbVPSxfzrZrbnuWSP1ELYgyS6B+hNeKzgrdB4JczCa5VZUBQrDa9hUngm0KnexY6pJRN5Q==} engines: {node: ^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0} grpc-gcp@1.0.1: @@ -5658,8 +5669,8 @@ packages: resolution: {integrity: sha512-ej4AhfhfL2Q2zpMmLo7U1Uv9+PyhIZpgQLGT1F9miIGmiCJIoCgSmczFdrc97mWT4kVY72KA+WnnhJ5pghSvSg==} engines: {node: '>= 0.4'} - hono@4.12.16: - resolution: {integrity: sha512-jN0ZewiNAWSe5khM3EyCmBb250+b40wWbwNILNfEvq84VREWwOIkuUsFONk/3i3nqkz7Oe1PcpM2mwQEK2L9Kg==} + hono@4.12.18: + resolution: {integrity: sha512-RWzP96k/yv0PQfyXnWjs6zot20TqfpfsNXhOnev8d1InAxubW93L11/oNUc3tQqn2G0bSdAOBpX+2uDFHV7kdQ==} engines: {node: '>=16.9.0'} hosted-git-info@9.0.3: @@ -5830,10 +5841,6 @@ packages: resolution: {integrity: sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==} engines: {node: '>= 0.4'} - ip-address@10.1.0: - resolution: {integrity: sha512-XXADHxXmvT9+CRxhXg56LJovE+bmWnEWB78LB83VZTprKTmaC5QfruXocxzTZ2Kl0DNwKuBdlIhjL8LeY8Sf8Q==} - engines: {node: '>= 12'} - ip-address@10.2.0: resolution: {integrity: sha512-/+S6j4E9AHvW9SWMSEY9Xfy66O5PWvVEJ08O0y5JGyEKQpojb0K0GKpz/v5HJ/G0vi3D2sjGK78119oXZeE0qA==} engines: {node: '>= 12'} @@ -5873,8 +5880,8 @@ packages: resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} engines: {node: '>= 0.4'} - is-core-module@2.16.1: - resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==} + is-core-module@2.16.2: + resolution: {integrity: sha512-evOr8xfXKxE6qSR0hSXL2r3sd7ALj8+7jQEUvPYcm5sgZFdJ+AYzT6yNmJenvIYQBgIGwfwz08sL8zoL7yq2BA==} engines: {node: '>= 0.4'} is-data-view@1.0.2: @@ -5945,8 +5952,8 @@ packages: resolution: {integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==} engines: {node: '>= 0.4'} - is-network-error@1.3.1: - resolution: {integrity: sha512-6QCxa49rQbmUWLfk0nuGqzql9U8uaV2H6279bRErPBHe/109hCzsLUBUHfbEtvLIHBd6hyXbgedBSHevm43Edw==} + is-network-error@1.3.2: + resolution: {integrity: sha512-PhBY86zaxNZUuWP6h13Vu5oFe0XY6/UlKzQnYFELzGVHygP3MxmvTfYSG7GN3aIab/iWudSMgjSnG9Dq+nHrgA==} engines: {node: '>=16'} is-node-process@1.2.0: @@ -6123,8 +6130,8 @@ packages: resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==} engines: {node: '>= 10.13.0'} - jiti@2.6.1: - resolution: {integrity: sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==} + jiti@2.7.0: + resolution: {integrity: sha512-AC/7JofJvZGrrneWNaEnJeOLUx+JlGt7tNa0wZiRPT4MY1wmfKjt2+6O2p2uz2+skll8OZZmJMNqeke7kKbNgQ==} hasBin: true jose@6.2.3: @@ -6396,8 +6403,8 @@ packages: lru-cache@10.4.3: resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} - lru-cache@11.3.5: - resolution: {integrity: sha512-NxVFwLAnrd9i7KUBxC4DrUhmgjzOs+1Qm50D3oF1/oL+r1NpZ4gA7xvG0/zJ8evR7zIKn4vLf7qTNduWFtCrRw==} + lru-cache@11.3.6: + resolution: {integrity: sha512-Gf/KoL3C/MlI7Bt0PGI9I+TeTC/I6r/csU58N4BSNc4lppLBeKsOdFYkK+dX0ABDUMJNfCHTyPpzwwO21Awd3A==} engines: {node: 20 || >=22} lru-cache@5.1.1: @@ -6653,9 +6660,9 @@ packages: resolution: {integrity: sha512-eonl3sLUha+S1GzTPxychyhnUzKyeQkZ7jLjKrBagJgPla13F+uQ71HgpFefyHgqrjEbCPkDArxYsjY8/+gLKA==} engines: {node: '>= 0.4.0'} - ng-packagr@22.0.0-next.3: - resolution: {integrity: sha512-M4h0PxrWLJSlJ8TCaH5Y5ZDBeRJvSQTe9FlsyMVMSjo/1fPYG16a/qkMbv/EYO0+LCrooRS+DdRjKx13b6P15A==} - engines: {node: ^22.22.0 || >=24.13.1} + ng-packagr@22.0.0-next.4: + resolution: {integrity: sha512-rZorWpYgRUHJ6DVgHb+Ele+spOTH/lQu6u0HA3HL4N8a+vIipEIZ/JUPXNfAhcGd0yhj7jhuokD7akIjiL3zzg==} + engines: {node: ^22.22.0 || ^24.13.1 || >=26.0.0} hasBin: true peerDependencies: '@angular/compiler-cli': ^22.0.0-next.3 @@ -6666,8 +6673,8 @@ packages: tailwindcss: optional: true - nock@14.0.13: - resolution: {integrity: sha512-SCPsQmGVNY8h1rfS3aU0MzOGYY+wKIFukHEsoSIwPRCYocZkya7MFIlWIEYPWQZj+Gaksg6EyUaY255ZDqpQuA==} + nock@14.0.14: + resolution: {integrity: sha512-PKk7tex0O3RRXUZC5XDKJ9yM3rYRPS13myduT85VIIYDBnib42Fpxoe6KxRSzqB4iL2NDxkcJ2yiskZ18hGLEQ==} engines: {node: '>=18.20.0 <20 || >=20.12.1'} node-addon-api@6.1.0: @@ -6723,8 +6730,8 @@ packages: engines: {node: ^20.17.0 || >=22.9.0} hasBin: true - node-releases@2.0.38: - resolution: {integrity: sha512-3qT/88Y3FbH/Kx4szpQQ4HzUbVrHPKTLVpVocKiLfoYvw9XSGOX2FmD2d6DrXbVYyAQTF2HeF6My8jmzx7/CRw==} + node-releases@2.0.44: + resolution: {integrity: sha512-5WUyunoPMsvvEhS8AxHtRzP+oA8UCkJ7YRxatWKjngndhDGLiqEVAQKWjFAiAiuL8zMRGzGSJxFnLetoa43qGQ==} nopt@9.0.0: resolution: {integrity: sha512-Zhq3a+yFKrYwSBluL4H9XP3m3y5uvQkB/09CwDruCiRmR/UJYnn9W4R48ry0uGC70aeTPKLynBtscP9efFFcPw==} @@ -7109,6 +7116,10 @@ packages: resolution: {integrity: sha512-qif0+jGGZoLWdHey3UFHHWP0H7Gbmsk8T5VEqyYFbWqPr1XqvLGBbk/sl8V5exGmcYJklJOhOQq1pV9IcsiFag==} engines: {node: ^10 || ^12 || >=14} + postcss@8.5.14: + resolution: {integrity: sha512-SoSL4+OSEtR99LHFZQiJLkT59C5B1amGO1NzTwj7TT1qCUgUO6hxOvzkOYxD+vMrXBM3XJIKzokoERdqQq/Zmg==} + engines: {node: ^10 || ^12 || >=14} + powershell-utils@0.1.0: resolution: {integrity: sha512-dM0jVuXJPsDN6DvRpea484tCUaMiXWjuCn++HGTqUWzGDjv5tZkEZldAJ/UMlqRYGFrD/etByo4/xOuC/snX2A==} engines: {node: '>=20'} @@ -7151,8 +7162,8 @@ packages: resolution: {integrity: sha512-E1sbAYg3aEbXrq0n1ojJkRHQJGE1kaE/O6GLA94y8rnJBfgvOPTOd1b9hOceQK1FFZI9qMh1vBERCyO2ifubcw==} engines: {node: '>=18'} - protobufjs@7.5.6: - resolution: {integrity: sha512-M71sTMB146U3u0di3yup8iM+zv8yPRNQVr1KK4tyBitl3qFvEGucq/rGDRShD2rsJhtN02RJaJ7j5X5hmy8SJg==} + protobufjs@7.5.7: + resolution: {integrity: sha512-NGnrxS/nLKUo5nkbVQxlC71sB4hdfImdYIbFeSCidxtwATx0AHRPcANSLd0q5Bb2BkoSWo2iisQhGg5/r+ihbA==} engines: {node: '>=12.0.0'} proxy-addr@2.0.7: @@ -7371,8 +7382,8 @@ packages: resolution: {integrity: sha512-l0OE8wL34P4nJH/H2ffoaniAokM2qSmrtXHmlpvYr5AVVX8msAyW0l8NVJFDxlSK4u3Uh/f41cQheDVdnYijwQ==} hasBin: true - rolldown@1.0.0-rc.18: - resolution: {integrity: sha512-phmyKBpuBdRYDf4hgyynGAYn/rDDe+iZXKVJ7WX5b1zQzpLkP5oJRPGsfJuHdzPMlyyEO/4sPW6yfSx2gf7lVg==} + rolldown@1.0.0: + resolution: {integrity: sha512-yD986aXDESFGS95spT1LAv0jssywP4npMEjmMHyN2/5+eE8qQJUype2AaKkRiLgBgyD0LFlubwAht7VmY8rGoA==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true @@ -7629,8 +7640,8 @@ packages: resolution: {integrity: sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw==} engines: {node: '>= 14'} - socks@2.8.8: - resolution: {integrity: sha512-NlGELfPrgX2f1TAAcz0WawlLn+0r3FyhhCRpFFK2CemXenPYvzMWWZINv3eDNo9ucdwme7oCHRY0Jnbs4aIkog==} + socks@2.8.9: + resolution: {integrity: sha512-LJhUYUvItdQ0LkJTmPeaEObWXAqFyfmP85x0tch/ez9cahmhlBBLbIqDFnvBnUJGagb0JbIQrkBs1wJ+yRYpEw==} engines: {node: '>= 10.0.0', npm: '>= 3.0.0'} sonic-boom@3.8.1: @@ -7847,8 +7858,8 @@ packages: tar-stream@3.2.0: resolution: {integrity: sha512-ojzvCvVaNp6aOTFmG7jaRD0meowIAuPc3cMMhSgKiVWws1GyHbGd/xvnyuRKcKlMpt3qvxx6r0hreCNITP9hIg==} - tar@7.5.13: - resolution: {integrity: sha512-tOG/7GyXpFevhXVh8jOPJrmtRpOTsYqUIkVdVooZYJS/z8WhfQUX8RJILmeuJNinGAMSu1veBr4asSHFt5/hng==} + tar@7.5.15: + resolution: {integrity: sha512-dzGK0boVlC4W5QFuQN1EFSl3bIDYsk7Tj40U6eIBnK2k/8ml7TZ5agbI5j5+qnoVcAA+rNtBml8SEiLxZpNqRQ==} engines: {node: '>=18'} teeny-request@10.1.2: @@ -7858,19 +7869,46 @@ packages: teex@1.0.1: resolution: {integrity: sha512-eYE6iEI62Ni1H8oIa7KlDU6uQBtqr4Eajni3wX7rpfXD8ysFx8z0+dri+KWEPWpBsxXfxu58x/0jvTVT1ekOSg==} - terser-webpack-plugin@5.5.0: - resolution: {integrity: sha512-UYhptBwhWvfIjKd/UuFo6D8uq9xpGLDK+z8EDsj/zWhrTaH34cKEbrkMKfV5YWqGBvAYA3tlzZbs2R+qYrbQJA==} + terser-webpack-plugin@5.6.0: + resolution: {integrity: sha512-Eum+5ajkaOhf5KbM26osvv21kLD7BaGqQ1UA4Ami4arYwylmGUQTgHFpHDdmJod1q4QXa66p0to/FBKID+J1vA==} engines: {node: '>= 10.13.0'} peerDependencies: + '@minify-html/node': '*' '@swc/core': '*' + '@swc/css': '*' + '@swc/html': '*' + clean-css: '*' + cssnano: '*' + csso: '*' esbuild: '*' + html-minifier-terser: '*' + lightningcss: '*' + postcss: '*' uglify-js: '*' webpack: ^5.1.0 peerDependenciesMeta: + '@minify-html/node': + optional: true '@swc/core': optional: true + '@swc/css': + optional: true + '@swc/html': + optional: true + clean-css: + optional: true + cssnano: + optional: true + csso: + optional: true esbuild: optional: true + html-minifier-terser: + optional: true + lightningcss: + optional: true + postcss: + optional: true uglify-js: optional: true @@ -8176,8 +8214,8 @@ packages: resolution: {integrity: sha512-ckn4xxNEkK5lflwb8a6xs2j6rVe//9sEH4rJHBqh2RelKYnFkxHbnN06gsdV2KtqSKDD9F4NE2UDA9SSs8E90w==} engines: {node: '>=18'} - verdaccio-auth-memory@13.0.0: - resolution: {integrity: sha512-83nPBvWTR14XSsz9Yx5ICl4jtSE+/1PecUstYa9d2PJEzcCwWizlUCUq0xGOXA0rGaCHim5h9C/t6rzyNoQsFw==} + verdaccio-auth-memory@13.0.1: + resolution: {integrity: sha512-bZTf2AIYZPofCYybZ/XCQghMGb0p99w12D3/IMlkfkU2oVaRr0o1ixbYlyBE4Lef2P3wDWvBUrtVTQ8ctEWMWA==} engines: {node: '>=18'} verdaccio-htpasswd@13.0.0-next-8.37: @@ -8249,6 +8287,7 @@ packages: '@vitest/ui': 4.1.5 happy-dom: '*' jsdom: '*' + vite: ^6.0.0 || ^7.0.0 || ^8.0.0 peerDependenciesMeta: '@edge-runtime/vm': optional: true @@ -8515,13 +8554,13 @@ packages: resolution: {integrity: sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==} engines: {node: '>=18'} - yaml@2.8.3: - resolution: {integrity: sha512-AvbaCLOO2Otw/lW5bmh9d/WEdcDFdQp2Z2ZUH3pX9U2ihyUY0nvLv7J6TrWowklRGPYbB/IuIMfYgxaCPg5Bpg==} + yaml@2.8.4: + resolution: {integrity: sha512-ml/JPOj9fOQK8RNnWojA67GbZ0ApXAUlN2UQclwv2eVgTgn7O9gg9o7paZWKMp4g0H3nTLtS9LVzhkpOFIKzog==} engines: {node: '>= 14.6'} hasBin: true - yaml@2.8.4: - resolution: {integrity: sha512-ml/JPOj9fOQK8RNnWojA67GbZ0ApXAUlN2UQclwv2eVgTgn7O9gg9o7paZWKMp4g0H3nTLtS9LVzhkpOFIKzog==} + yaml@2.9.0: + resolution: {integrity: sha512-2AvhNX3mb8zd6Zy7INTtSpl1F15HW6Wnqj0srWlkKLcpYl/gMIMJiyuGq2KeI2YFxUPjdlB+3Lc10seMLtL4cA==} engines: {node: '>= 14.6'} hasBin: true @@ -8571,8 +8610,8 @@ packages: zod@4.4.2: resolution: {integrity: sha512-IynmDyxsEsb9RKzO3J9+4SxXnl2FTFSzNBaKKaMV6tsSk0rw9gYw9gs+JFCq/qk2LCZ78KDwyj+Z289TijSkUw==} - zone.js@0.16.1: - resolution: {integrity: sha512-dpvY17vxYIW3+bNrP0ClUlaiY0CiIRK3tnoLaGoQsQcY9/I/NpzIWQ7tQNhbV7LacQMpCII6wVzuL3tuWOyfuA==} + zone.js@0.16.2: + resolution: {integrity: sha512-Eky7p2Z1Ig3NnbfodSPoARCjKBSTFMnE/ACsP1L/XJEfY4SdOFce19BsUCWVwL6K5ABZFy5J3bjcMWffX+YM3Q==} snapshots: @@ -8681,29 +8720,29 @@ snapshots: '@jridgewell/gen-mapping': 0.3.13 '@jridgewell/trace-mapping': 0.3.31 - '@angular/animations@22.0.0-next.10(@angular/core@22.0.0-next.10(@angular/compiler@22.0.0-next.10)(rxjs@7.8.2)(zone.js@0.16.1))': + '@angular/animations@22.0.0-next.12(@angular/core@22.0.0-next.12(@angular/compiler@22.0.0-next.12)(rxjs@7.8.2)(zone.js@0.16.2))': dependencies: - '@angular/core': 22.0.0-next.10(@angular/compiler@22.0.0-next.10)(rxjs@7.8.2)(zone.js@0.16.1) + '@angular/core': 22.0.0-next.12(@angular/compiler@22.0.0-next.12)(rxjs@7.8.2)(zone.js@0.16.2) tslib: 2.8.1 - '@angular/cdk@22.0.0-next.7(@angular/common@22.0.0-next.10(@angular/core@22.0.0-next.10(@angular/compiler@22.0.0-next.10)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.10(@angular/compiler@22.0.0-next.10)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@22.0.0-next.10(@angular/animations@22.0.0-next.10(@angular/core@22.0.0-next.10(@angular/compiler@22.0.0-next.10)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@22.0.0-next.10(@angular/core@22.0.0-next.10(@angular/compiler@22.0.0-next.10)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.10(@angular/compiler@22.0.0-next.10)(rxjs@7.8.2)(zone.js@0.16.1)))(rxjs@7.8.2)': + '@angular/cdk@22.0.0-next.8(@angular/common@22.0.0-next.12(@angular/core@22.0.0-next.12(@angular/compiler@22.0.0-next.12)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.0.0-next.12(@angular/compiler@22.0.0-next.12)(rxjs@7.8.2)(zone.js@0.16.2))(@angular/platform-browser@22.0.0-next.12(@angular/animations@22.0.0-next.12(@angular/core@22.0.0-next.12(@angular/compiler@22.0.0-next.12)(rxjs@7.8.2)(zone.js@0.16.2)))(@angular/common@22.0.0-next.12(@angular/core@22.0.0-next.12(@angular/compiler@22.0.0-next.12)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.0.0-next.12(@angular/compiler@22.0.0-next.12)(rxjs@7.8.2)(zone.js@0.16.2)))(rxjs@7.8.2)': dependencies: - '@angular/common': 22.0.0-next.10(@angular/core@22.0.0-next.10(@angular/compiler@22.0.0-next.10)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2) - '@angular/core': 22.0.0-next.10(@angular/compiler@22.0.0-next.10)(rxjs@7.8.2)(zone.js@0.16.1) - '@angular/platform-browser': 22.0.0-next.10(@angular/animations@22.0.0-next.10(@angular/core@22.0.0-next.10(@angular/compiler@22.0.0-next.10)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@22.0.0-next.10(@angular/core@22.0.0-next.10(@angular/compiler@22.0.0-next.10)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.10(@angular/compiler@22.0.0-next.10)(rxjs@7.8.2)(zone.js@0.16.1)) + '@angular/common': 22.0.0-next.12(@angular/core@22.0.0-next.12(@angular/compiler@22.0.0-next.12)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2) + '@angular/core': 22.0.0-next.12(@angular/compiler@22.0.0-next.12)(rxjs@7.8.2)(zone.js@0.16.2) + '@angular/platform-browser': 22.0.0-next.12(@angular/animations@22.0.0-next.12(@angular/core@22.0.0-next.12(@angular/compiler@22.0.0-next.12)(rxjs@7.8.2)(zone.js@0.16.2)))(@angular/common@22.0.0-next.12(@angular/core@22.0.0-next.12(@angular/compiler@22.0.0-next.12)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.0.0-next.12(@angular/compiler@22.0.0-next.12)(rxjs@7.8.2)(zone.js@0.16.2)) parse5: 8.0.1 rxjs: 7.8.2 tslib: 2.8.1 - '@angular/common@22.0.0-next.10(@angular/core@22.0.0-next.10(@angular/compiler@22.0.0-next.10)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2)': + '@angular/common@22.0.0-next.12(@angular/core@22.0.0-next.12(@angular/compiler@22.0.0-next.12)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2)': dependencies: - '@angular/core': 22.0.0-next.10(@angular/compiler@22.0.0-next.10)(rxjs@7.8.2)(zone.js@0.16.1) + '@angular/core': 22.0.0-next.12(@angular/compiler@22.0.0-next.12)(rxjs@7.8.2)(zone.js@0.16.2) rxjs: 7.8.2 tslib: 2.8.1 - '@angular/compiler-cli@22.0.0-next.10(@angular/compiler@22.0.0-next.10)(typescript@6.0.3)': + '@angular/compiler-cli@22.0.0-next.12(@angular/compiler@22.0.0-next.12)(typescript@6.0.3)': dependencies: - '@angular/compiler': 22.0.0-next.10 + '@angular/compiler': 22.0.0-next.12 '@babel/core': 7.29.0 '@jridgewell/sourcemap-codec': 1.5.5 chokidar: 5.0.0 @@ -8717,32 +8756,32 @@ snapshots: transitivePeerDependencies: - supports-color - '@angular/compiler@22.0.0-next.10': + '@angular/compiler@22.0.0-next.12': dependencies: tslib: 2.8.1 - '@angular/core@22.0.0-next.10(@angular/compiler@22.0.0-next.10)(rxjs@7.8.2)(zone.js@0.16.1)': + '@angular/core@22.0.0-next.12(@angular/compiler@22.0.0-next.12)(rxjs@7.8.2)(zone.js@0.16.2)': dependencies: rxjs: 7.8.2 tslib: 2.8.1 optionalDependencies: - '@angular/compiler': 22.0.0-next.10 - zone.js: 0.16.1 + '@angular/compiler': 22.0.0-next.12 + zone.js: 0.16.2 - '@angular/forms@22.0.0-next.10(@angular/common@22.0.0-next.10(@angular/core@22.0.0-next.10(@angular/compiler@22.0.0-next.10)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.10(@angular/compiler@22.0.0-next.10)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@22.0.0-next.10(@angular/animations@22.0.0-next.10(@angular/core@22.0.0-next.10(@angular/compiler@22.0.0-next.10)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@22.0.0-next.10(@angular/core@22.0.0-next.10(@angular/compiler@22.0.0-next.10)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.10(@angular/compiler@22.0.0-next.10)(rxjs@7.8.2)(zone.js@0.16.1)))(rxjs@7.8.2)': + '@angular/forms@22.0.0-next.12(@angular/common@22.0.0-next.12(@angular/core@22.0.0-next.12(@angular/compiler@22.0.0-next.12)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.0.0-next.12(@angular/compiler@22.0.0-next.12)(rxjs@7.8.2)(zone.js@0.16.2))(@angular/platform-browser@22.0.0-next.12(@angular/animations@22.0.0-next.12(@angular/core@22.0.0-next.12(@angular/compiler@22.0.0-next.12)(rxjs@7.8.2)(zone.js@0.16.2)))(@angular/common@22.0.0-next.12(@angular/core@22.0.0-next.12(@angular/compiler@22.0.0-next.12)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.0.0-next.12(@angular/compiler@22.0.0-next.12)(rxjs@7.8.2)(zone.js@0.16.2)))(rxjs@7.8.2)': dependencies: - '@angular/common': 22.0.0-next.10(@angular/core@22.0.0-next.10(@angular/compiler@22.0.0-next.10)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2) - '@angular/core': 22.0.0-next.10(@angular/compiler@22.0.0-next.10)(rxjs@7.8.2)(zone.js@0.16.1) - '@angular/platform-browser': 22.0.0-next.10(@angular/animations@22.0.0-next.10(@angular/core@22.0.0-next.10(@angular/compiler@22.0.0-next.10)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@22.0.0-next.10(@angular/core@22.0.0-next.10(@angular/compiler@22.0.0-next.10)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.10(@angular/compiler@22.0.0-next.10)(rxjs@7.8.2)(zone.js@0.16.1)) + '@angular/common': 22.0.0-next.12(@angular/core@22.0.0-next.12(@angular/compiler@22.0.0-next.12)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2) + '@angular/core': 22.0.0-next.12(@angular/compiler@22.0.0-next.12)(rxjs@7.8.2)(zone.js@0.16.2) + '@angular/platform-browser': 22.0.0-next.12(@angular/animations@22.0.0-next.12(@angular/core@22.0.0-next.12(@angular/compiler@22.0.0-next.12)(rxjs@7.8.2)(zone.js@0.16.2)))(@angular/common@22.0.0-next.12(@angular/core@22.0.0-next.12(@angular/compiler@22.0.0-next.12)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.0.0-next.12(@angular/compiler@22.0.0-next.12)(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.2 - '@angular/localize@22.0.0-next.10(@angular/compiler-cli@22.0.0-next.10(@angular/compiler@22.0.0-next.10)(typescript@6.0.3))(@angular/compiler@22.0.0-next.10)': + '@angular/localize@22.0.0-next.12(@angular/compiler-cli@22.0.0-next.12(@angular/compiler@22.0.0-next.12)(typescript@6.0.3))(@angular/compiler@22.0.0-next.12)': dependencies: - '@angular/compiler': 22.0.0-next.10 - '@angular/compiler-cli': 22.0.0-next.10(@angular/compiler@22.0.0-next.10)(typescript@6.0.3) + '@angular/compiler': 22.0.0-next.12 + '@angular/compiler-cli': 22.0.0-next.12(@angular/compiler@22.0.0-next.12)(typescript@6.0.3) '@babel/core': 7.29.0 '@types/babel__core': 7.20.5 tinyglobby: 0.2.16 @@ -8750,22 +8789,22 @@ snapshots: transitivePeerDependencies: - supports-color - '@angular/material@22.0.0-next.7(1ee8d5fdc2f291e5a1da1bc147744133)': + '@angular/material@22.0.0-next.8(93ce75c341587667f5d7d40f3eefe13f)': dependencies: - '@angular/cdk': 22.0.0-next.7(@angular/common@22.0.0-next.10(@angular/core@22.0.0-next.10(@angular/compiler@22.0.0-next.10)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.10(@angular/compiler@22.0.0-next.10)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@22.0.0-next.10(@angular/animations@22.0.0-next.10(@angular/core@22.0.0-next.10(@angular/compiler@22.0.0-next.10)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@22.0.0-next.10(@angular/core@22.0.0-next.10(@angular/compiler@22.0.0-next.10)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.10(@angular/compiler@22.0.0-next.10)(rxjs@7.8.2)(zone.js@0.16.1)))(rxjs@7.8.2) - '@angular/common': 22.0.0-next.10(@angular/core@22.0.0-next.10(@angular/compiler@22.0.0-next.10)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2) - '@angular/core': 22.0.0-next.10(@angular/compiler@22.0.0-next.10)(rxjs@7.8.2)(zone.js@0.16.1) - '@angular/forms': 22.0.0-next.10(@angular/common@22.0.0-next.10(@angular/core@22.0.0-next.10(@angular/compiler@22.0.0-next.10)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.10(@angular/compiler@22.0.0-next.10)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@22.0.0-next.10(@angular/animations@22.0.0-next.10(@angular/core@22.0.0-next.10(@angular/compiler@22.0.0-next.10)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@22.0.0-next.10(@angular/core@22.0.0-next.10(@angular/compiler@22.0.0-next.10)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.10(@angular/compiler@22.0.0-next.10)(rxjs@7.8.2)(zone.js@0.16.1)))(rxjs@7.8.2) - '@angular/platform-browser': 22.0.0-next.10(@angular/animations@22.0.0-next.10(@angular/core@22.0.0-next.10(@angular/compiler@22.0.0-next.10)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@22.0.0-next.10(@angular/core@22.0.0-next.10(@angular/compiler@22.0.0-next.10)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.10(@angular/compiler@22.0.0-next.10)(rxjs@7.8.2)(zone.js@0.16.1)) + '@angular/cdk': 22.0.0-next.8(@angular/common@22.0.0-next.12(@angular/core@22.0.0-next.12(@angular/compiler@22.0.0-next.12)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.0.0-next.12(@angular/compiler@22.0.0-next.12)(rxjs@7.8.2)(zone.js@0.16.2))(@angular/platform-browser@22.0.0-next.12(@angular/animations@22.0.0-next.12(@angular/core@22.0.0-next.12(@angular/compiler@22.0.0-next.12)(rxjs@7.8.2)(zone.js@0.16.2)))(@angular/common@22.0.0-next.12(@angular/core@22.0.0-next.12(@angular/compiler@22.0.0-next.12)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.0.0-next.12(@angular/compiler@22.0.0-next.12)(rxjs@7.8.2)(zone.js@0.16.2)))(rxjs@7.8.2) + '@angular/common': 22.0.0-next.12(@angular/core@22.0.0-next.12(@angular/compiler@22.0.0-next.12)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2) + '@angular/core': 22.0.0-next.12(@angular/compiler@22.0.0-next.12)(rxjs@7.8.2)(zone.js@0.16.2) + '@angular/forms': 22.0.0-next.12(@angular/common@22.0.0-next.12(@angular/core@22.0.0-next.12(@angular/compiler@22.0.0-next.12)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.0.0-next.12(@angular/compiler@22.0.0-next.12)(rxjs@7.8.2)(zone.js@0.16.2))(@angular/platform-browser@22.0.0-next.12(@angular/animations@22.0.0-next.12(@angular/core@22.0.0-next.12(@angular/compiler@22.0.0-next.12)(rxjs@7.8.2)(zone.js@0.16.2)))(@angular/common@22.0.0-next.12(@angular/core@22.0.0-next.12(@angular/compiler@22.0.0-next.12)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.0.0-next.12(@angular/compiler@22.0.0-next.12)(rxjs@7.8.2)(zone.js@0.16.2)))(rxjs@7.8.2) + '@angular/platform-browser': 22.0.0-next.12(@angular/animations@22.0.0-next.12(@angular/core@22.0.0-next.12(@angular/compiler@22.0.0-next.12)(rxjs@7.8.2)(zone.js@0.16.2)))(@angular/common@22.0.0-next.12(@angular/core@22.0.0-next.12(@angular/compiler@22.0.0-next.12)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.0.0-next.12(@angular/compiler@22.0.0-next.12)(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/4de8a14a1682d0f07e0b14a3b26498757c195904(@modelcontextprotocol/sdk@1.29.0(zod@4.4.2))': + '@angular/ng-dev@https://codeload.github.com/angular/dev-infra-private-ng-dev-builds/tar.gz/f084e2e88e71cdca8098489e6104ffcdbd9a8eda(@modelcontextprotocol/sdk@1.29.0(zod@4.4.2))': dependencies: '@actions/core': 3.0.1 '@conventional-changelog/git-client': 2.7.0(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.4.0) '@google-cloud/spanner': 8.0.0(supports-color@10.2.2) - '@google/genai': 1.50.1(@modelcontextprotocol/sdk@1.29.0(zod@4.4.2))(bufferutil@4.1.0)(supports-color@10.2.2)(utf-8-validate@6.0.6) + '@google/genai': 1.52.0(@modelcontextprotocol/sdk@1.29.0(zod@4.4.2))(bufferutil@4.1.0)(supports-color@10.2.2)(utf-8-validate@6.0.6) '@inquirer/prompts': 8.4.2(@types/node@24.12.2) '@inquirer/type': 4.0.5(@types/node@24.12.2) '@octokit/auth-app': 8.2.0 @@ -8805,7 +8844,7 @@ snapshots: jsonc-parser: 3.3.1 minimatch: 10.2.5 multimatch: 8.0.0 - nock: 14.0.13 + nock: 14.0.14 semver: 7.7.4 supports-color: 10.2.2 tsx: 4.21.0 @@ -8813,42 +8852,42 @@ snapshots: typescript: 6.0.3 utf-8-validate: 6.0.6 which: 6.0.1 - yaml: 2.8.3 + yaml: 2.8.4 yargs: 18.0.0 zod: 4.4.2 transitivePeerDependencies: - '@modelcontextprotocol/sdk' - '@react-native-async-storage/async-storage' - '@angular/platform-browser@22.0.0-next.10(@angular/animations@22.0.0-next.10(@angular/core@22.0.0-next.10(@angular/compiler@22.0.0-next.10)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@22.0.0-next.10(@angular/core@22.0.0-next.10(@angular/compiler@22.0.0-next.10)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.10(@angular/compiler@22.0.0-next.10)(rxjs@7.8.2)(zone.js@0.16.1))': + '@angular/platform-browser@22.0.0-next.12(@angular/animations@22.0.0-next.12(@angular/core@22.0.0-next.12(@angular/compiler@22.0.0-next.12)(rxjs@7.8.2)(zone.js@0.16.2)))(@angular/common@22.0.0-next.12(@angular/core@22.0.0-next.12(@angular/compiler@22.0.0-next.12)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.0.0-next.12(@angular/compiler@22.0.0-next.12)(rxjs@7.8.2)(zone.js@0.16.2))': dependencies: - '@angular/common': 22.0.0-next.10(@angular/core@22.0.0-next.10(@angular/compiler@22.0.0-next.10)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2) - '@angular/core': 22.0.0-next.10(@angular/compiler@22.0.0-next.10)(rxjs@7.8.2)(zone.js@0.16.1) + '@angular/common': 22.0.0-next.12(@angular/core@22.0.0-next.12(@angular/compiler@22.0.0-next.12)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2) + '@angular/core': 22.0.0-next.12(@angular/compiler@22.0.0-next.12)(rxjs@7.8.2)(zone.js@0.16.2) tslib: 2.8.1 optionalDependencies: - '@angular/animations': 22.0.0-next.10(@angular/core@22.0.0-next.10(@angular/compiler@22.0.0-next.10)(rxjs@7.8.2)(zone.js@0.16.1)) + '@angular/animations': 22.0.0-next.12(@angular/core@22.0.0-next.12(@angular/compiler@22.0.0-next.12)(rxjs@7.8.2)(zone.js@0.16.2)) - '@angular/platform-server@22.0.0-next.10(@angular/common@22.0.0-next.10(@angular/core@22.0.0-next.10(@angular/compiler@22.0.0-next.10)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/compiler@22.0.0-next.10)(@angular/core@22.0.0-next.10(@angular/compiler@22.0.0-next.10)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@22.0.0-next.10(@angular/animations@22.0.0-next.10(@angular/core@22.0.0-next.10(@angular/compiler@22.0.0-next.10)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@22.0.0-next.10(@angular/core@22.0.0-next.10(@angular/compiler@22.0.0-next.10)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.10(@angular/compiler@22.0.0-next.10)(rxjs@7.8.2)(zone.js@0.16.1)))(rxjs@7.8.2)': + '@angular/platform-server@22.0.0-next.12(@angular/common@22.0.0-next.12(@angular/core@22.0.0-next.12(@angular/compiler@22.0.0-next.12)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/compiler@22.0.0-next.12)(@angular/core@22.0.0-next.12(@angular/compiler@22.0.0-next.12)(rxjs@7.8.2)(zone.js@0.16.2))(@angular/platform-browser@22.0.0-next.12(@angular/animations@22.0.0-next.12(@angular/core@22.0.0-next.12(@angular/compiler@22.0.0-next.12)(rxjs@7.8.2)(zone.js@0.16.2)))(@angular/common@22.0.0-next.12(@angular/core@22.0.0-next.12(@angular/compiler@22.0.0-next.12)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.0.0-next.12(@angular/compiler@22.0.0-next.12)(rxjs@7.8.2)(zone.js@0.16.2)))(rxjs@7.8.2)': dependencies: - '@angular/common': 22.0.0-next.10(@angular/core@22.0.0-next.10(@angular/compiler@22.0.0-next.10)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2) - '@angular/compiler': 22.0.0-next.10 - '@angular/core': 22.0.0-next.10(@angular/compiler@22.0.0-next.10)(rxjs@7.8.2)(zone.js@0.16.1) - '@angular/platform-browser': 22.0.0-next.10(@angular/animations@22.0.0-next.10(@angular/core@22.0.0-next.10(@angular/compiler@22.0.0-next.10)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@22.0.0-next.10(@angular/core@22.0.0-next.10(@angular/compiler@22.0.0-next.10)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.10(@angular/compiler@22.0.0-next.10)(rxjs@7.8.2)(zone.js@0.16.1)) + '@angular/common': 22.0.0-next.12(@angular/core@22.0.0-next.12(@angular/compiler@22.0.0-next.12)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2) + '@angular/compiler': 22.0.0-next.12 + '@angular/core': 22.0.0-next.12(@angular/compiler@22.0.0-next.12)(rxjs@7.8.2)(zone.js@0.16.2) + '@angular/platform-browser': 22.0.0-next.12(@angular/animations@22.0.0-next.12(@angular/core@22.0.0-next.12(@angular/compiler@22.0.0-next.12)(rxjs@7.8.2)(zone.js@0.16.2)))(@angular/common@22.0.0-next.12(@angular/core@22.0.0-next.12(@angular/compiler@22.0.0-next.12)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.0.0-next.12(@angular/compiler@22.0.0-next.12)(rxjs@7.8.2)(zone.js@0.16.2)) rxjs: 7.8.2 tslib: 2.8.1 xhr2: 0.2.1 - '@angular/router@22.0.0-next.10(@angular/common@22.0.0-next.10(@angular/core@22.0.0-next.10(@angular/compiler@22.0.0-next.10)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.10(@angular/compiler@22.0.0-next.10)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@22.0.0-next.10(@angular/animations@22.0.0-next.10(@angular/core@22.0.0-next.10(@angular/compiler@22.0.0-next.10)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@22.0.0-next.10(@angular/core@22.0.0-next.10(@angular/compiler@22.0.0-next.10)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.10(@angular/compiler@22.0.0-next.10)(rxjs@7.8.2)(zone.js@0.16.1)))(rxjs@7.8.2)': + '@angular/router@22.0.0-next.12(@angular/common@22.0.0-next.12(@angular/core@22.0.0-next.12(@angular/compiler@22.0.0-next.12)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.0.0-next.12(@angular/compiler@22.0.0-next.12)(rxjs@7.8.2)(zone.js@0.16.2))(@angular/platform-browser@22.0.0-next.12(@angular/animations@22.0.0-next.12(@angular/core@22.0.0-next.12(@angular/compiler@22.0.0-next.12)(rxjs@7.8.2)(zone.js@0.16.2)))(@angular/common@22.0.0-next.12(@angular/core@22.0.0-next.12(@angular/compiler@22.0.0-next.12)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.0.0-next.12(@angular/compiler@22.0.0-next.12)(rxjs@7.8.2)(zone.js@0.16.2)))(rxjs@7.8.2)': dependencies: - '@angular/common': 22.0.0-next.10(@angular/core@22.0.0-next.10(@angular/compiler@22.0.0-next.10)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2) - '@angular/core': 22.0.0-next.10(@angular/compiler@22.0.0-next.10)(rxjs@7.8.2)(zone.js@0.16.1) - '@angular/platform-browser': 22.0.0-next.10(@angular/animations@22.0.0-next.10(@angular/core@22.0.0-next.10(@angular/compiler@22.0.0-next.10)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@22.0.0-next.10(@angular/core@22.0.0-next.10(@angular/compiler@22.0.0-next.10)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.10(@angular/compiler@22.0.0-next.10)(rxjs@7.8.2)(zone.js@0.16.1)) + '@angular/common': 22.0.0-next.12(@angular/core@22.0.0-next.12(@angular/compiler@22.0.0-next.12)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2) + '@angular/core': 22.0.0-next.12(@angular/compiler@22.0.0-next.12)(rxjs@7.8.2)(zone.js@0.16.2) + '@angular/platform-browser': 22.0.0-next.12(@angular/animations@22.0.0-next.12(@angular/core@22.0.0-next.12(@angular/compiler@22.0.0-next.12)(rxjs@7.8.2)(zone.js@0.16.2)))(@angular/common@22.0.0-next.12(@angular/core@22.0.0-next.12(@angular/compiler@22.0.0-next.12)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.0.0-next.12(@angular/compiler@22.0.0-next.12)(rxjs@7.8.2)(zone.js@0.16.2)) rxjs: 7.8.2 tslib: 2.8.1 - '@angular/service-worker@22.0.0-next.10(@angular/core@22.0.0-next.10(@angular/compiler@22.0.0-next.10)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2)': + '@angular/service-worker@22.0.0-next.12(@angular/core@22.0.0-next.12(@angular/compiler@22.0.0-next.12)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2)': dependencies: - '@angular/core': 22.0.0-next.10(@angular/compiler@22.0.0-next.10)(rxjs@7.8.2)(zone.js@0.16.1) + '@angular/core': 22.0.0-next.12(@angular/compiler@22.0.0-next.12)(rxjs@7.8.2)(zone.js@0.16.2) rxjs: 7.8.2 tslib: 2.8.1 @@ -9265,7 +9304,7 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/plugin-transform-modules-systemjs@7.29.0(@babel/core@7.29.0)': + '@babel/plugin-transform-modules-systemjs@7.29.4(@babel/core@7.29.0)': dependencies: '@babel/core': 7.29.0 '@babel/helper-module-transforms': 7.28.6(@babel/core@7.29.0) @@ -9484,7 +9523,7 @@ snapshots: '@babel/plugin-transform-member-expression-literals': 7.27.1(@babel/core@7.29.0) '@babel/plugin-transform-modules-amd': 7.27.1(@babel/core@7.29.0) '@babel/plugin-transform-modules-commonjs': 7.28.6(@babel/core@7.29.0) - '@babel/plugin-transform-modules-systemjs': 7.29.0(@babel/core@7.29.0) + '@babel/plugin-transform-modules-systemjs': 7.29.4(@babel/core@7.29.0) '@babel/plugin-transform-modules-umd': 7.27.1(@babel/core@7.29.0) '@babel/plugin-transform-named-capturing-groups-regex': 7.29.0(@babel/core@7.29.0) '@babel/plugin-transform-new-target': 7.27.1(@babel/core@7.29.0) @@ -9793,18 +9832,18 @@ snapshots: '@esbuild/win32-x64@0.28.0': optional: true - '@eslint-community/eslint-utils@4.9.1(eslint@10.3.0(jiti@2.6.1))': + '@eslint-community/eslint-utils@4.9.1(eslint@10.3.0(jiti@2.7.0))': dependencies: - eslint: 10.3.0(jiti@2.6.1) + eslint: 10.3.0(jiti@2.7.0) eslint-visitor-keys: 3.4.3 '@eslint-community/regexpp@4.12.2': {} - '@eslint/compat@2.0.5(eslint@10.3.0(jiti@2.6.1))': + '@eslint/compat@2.0.5(eslint@10.3.0(jiti@2.7.0))': dependencies: '@eslint/core': 1.2.1 optionalDependencies: - eslint: 10.3.0(jiti@2.6.1) + eslint: 10.3.0(jiti@2.7.0) '@eslint/config-array@0.23.5': dependencies: @@ -9836,9 +9875,9 @@ snapshots: transitivePeerDependencies: - supports-color - '@eslint/js@10.0.1(eslint@10.3.0(jiti@2.6.1))': + '@eslint/js@10.0.1(eslint@10.3.0(jiti@2.7.0))': optionalDependencies: - eslint: 10.3.0(jiti@2.6.1) + eslint: 10.3.0(jiti@2.7.0) '@eslint/object-schema@3.0.5': {} @@ -10217,12 +10256,12 @@ snapshots: extend: 3.0.2 google-auth-library: 10.6.2(supports-color@10.2.2) google-gax: 5.0.6(supports-color@10.2.2) - grpc-gcp: 1.0.1(protobufjs@7.5.6) + grpc-gcp: 1.0.1(protobufjs@7.5.7) is: 3.3.2 lodash.snakecase: 4.1.1 merge-stream: 2.0.0 p-queue: 6.6.2 - protobufjs: 7.5.6 + protobufjs: 7.5.7 retry-request: 8.0.2(supports-color@10.2.2) split-array-stream: 2.0.0 stack-trace: 0.0.10 @@ -10232,11 +10271,11 @@ snapshots: transitivePeerDependencies: - supports-color - '@google/genai@1.50.1(@modelcontextprotocol/sdk@1.29.0(zod@4.4.2))(bufferutil@4.1.0)(supports-color@10.2.2)(utf-8-validate@6.0.6)': + '@google/genai@1.52.0(@modelcontextprotocol/sdk@1.29.0(zod@4.4.2))(bufferutil@4.1.0)(supports-color@10.2.2)(utf-8-validate@6.0.6)': dependencies: google-auth-library: 10.6.2(supports-color@10.2.2) p-retry: 4.6.2 - protobufjs: 7.5.6 + protobufjs: 7.5.7 ws: 8.20.0(bufferutil@4.1.0)(utf-8-validate@6.0.6) optionalDependencies: '@modelcontextprotocol/sdk': 1.29.0(zod@4.4.2) @@ -10247,34 +10286,34 @@ snapshots: '@grpc/grpc-js@1.14.3': dependencies: - '@grpc/proto-loader': 0.8.0 + '@grpc/proto-loader': 0.8.1 '@js-sdsl/ordered-map': 4.4.2 '@grpc/grpc-js@1.9.15': dependencies: '@grpc/proto-loader': 0.7.15 - '@types/node': 22.19.17 + '@types/node': 22.19.19 '@grpc/proto-loader@0.7.15': dependencies: lodash.camelcase: 4.3.0 long: 5.3.2 - protobufjs: 7.5.6 + protobufjs: 7.5.7 yargs: 17.7.2 - '@grpc/proto-loader@0.8.0': + '@grpc/proto-loader@0.8.1': dependencies: lodash.camelcase: 4.3.0 long: 5.3.2 - protobufjs: 7.5.6 + protobufjs: 7.5.7 yargs: 17.7.2 '@harperfast/extended-iterable@1.0.3': optional: true - '@hono/node-server@1.19.14(hono@4.12.16)': + '@hono/node-server@1.19.14(hono@4.12.18)': dependencies: - hono: 4.12.16 + hono: 4.12.18 '@humanfs/core@0.19.2': dependencies: @@ -10294,10 +10333,10 @@ snapshots: '@inquirer/ansi@2.0.5': {} - '@inquirer/checkbox@5.1.4(@types/node@24.12.2)': + '@inquirer/checkbox@5.1.5(@types/node@24.12.2)': dependencies: '@inquirer/ansi': 2.0.5 - '@inquirer/core': 11.1.9(@types/node@24.12.2) + '@inquirer/core': 11.1.10(@types/node@24.12.2) '@inquirer/figures': 2.0.5 '@inquirer/type': 4.0.5(@types/node@24.12.2) optionalDependencies: @@ -10305,12 +10344,12 @@ snapshots: '@inquirer/confirm@6.0.12(@types/node@24.12.2)': dependencies: - '@inquirer/core': 11.1.9(@types/node@24.12.2) + '@inquirer/core': 11.1.10(@types/node@24.12.2) '@inquirer/type': 4.0.5(@types/node@24.12.2) optionalDependencies: '@types/node': 24.12.2 - '@inquirer/core@11.1.9(@types/node@24.12.2)': + '@inquirer/core@11.1.10(@types/node@24.12.2)': dependencies: '@inquirer/ansi': 2.0.5 '@inquirer/figures': 2.0.5 @@ -10322,17 +10361,17 @@ snapshots: optionalDependencies: '@types/node': 24.12.2 - '@inquirer/editor@5.1.1(@types/node@24.12.2)': + '@inquirer/editor@5.1.2(@types/node@24.12.2)': dependencies: - '@inquirer/core': 11.1.9(@types/node@24.12.2) + '@inquirer/core': 11.1.10(@types/node@24.12.2) '@inquirer/external-editor': 3.0.0(@types/node@24.12.2) '@inquirer/type': 4.0.5(@types/node@24.12.2) optionalDependencies: '@types/node': 24.12.2 - '@inquirer/expand@5.0.13(@types/node@24.12.2)': + '@inquirer/expand@5.0.14(@types/node@24.12.2)': dependencies: - '@inquirer/core': 11.1.9(@types/node@24.12.2) + '@inquirer/core': 11.1.10(@types/node@24.12.2) '@inquirer/type': 4.0.5(@types/node@24.12.2) optionalDependencies: '@types/node': 24.12.2 @@ -10346,62 +10385,62 @@ snapshots: '@inquirer/figures@2.0.5': {} - '@inquirer/input@5.0.12(@types/node@24.12.2)': + '@inquirer/input@5.0.13(@types/node@24.12.2)': dependencies: - '@inquirer/core': 11.1.9(@types/node@24.12.2) + '@inquirer/core': 11.1.10(@types/node@24.12.2) '@inquirer/type': 4.0.5(@types/node@24.12.2) optionalDependencies: '@types/node': 24.12.2 - '@inquirer/number@4.0.12(@types/node@24.12.2)': + '@inquirer/number@4.0.13(@types/node@24.12.2)': dependencies: - '@inquirer/core': 11.1.9(@types/node@24.12.2) + '@inquirer/core': 11.1.10(@types/node@24.12.2) '@inquirer/type': 4.0.5(@types/node@24.12.2) optionalDependencies: '@types/node': 24.12.2 - '@inquirer/password@5.0.12(@types/node@24.12.2)': + '@inquirer/password@5.0.13(@types/node@24.12.2)': dependencies: '@inquirer/ansi': 2.0.5 - '@inquirer/core': 11.1.9(@types/node@24.12.2) + '@inquirer/core': 11.1.10(@types/node@24.12.2) '@inquirer/type': 4.0.5(@types/node@24.12.2) optionalDependencies: '@types/node': 24.12.2 '@inquirer/prompts@8.4.2(@types/node@24.12.2)': dependencies: - '@inquirer/checkbox': 5.1.4(@types/node@24.12.2) + '@inquirer/checkbox': 5.1.5(@types/node@24.12.2) '@inquirer/confirm': 6.0.12(@types/node@24.12.2) - '@inquirer/editor': 5.1.1(@types/node@24.12.2) - '@inquirer/expand': 5.0.13(@types/node@24.12.2) - '@inquirer/input': 5.0.12(@types/node@24.12.2) - '@inquirer/number': 4.0.12(@types/node@24.12.2) - '@inquirer/password': 5.0.12(@types/node@24.12.2) - '@inquirer/rawlist': 5.2.8(@types/node@24.12.2) - '@inquirer/search': 4.1.8(@types/node@24.12.2) - '@inquirer/select': 5.1.4(@types/node@24.12.2) + '@inquirer/editor': 5.1.2(@types/node@24.12.2) + '@inquirer/expand': 5.0.14(@types/node@24.12.2) + '@inquirer/input': 5.0.13(@types/node@24.12.2) + '@inquirer/number': 4.0.13(@types/node@24.12.2) + '@inquirer/password': 5.0.13(@types/node@24.12.2) + '@inquirer/rawlist': 5.2.9(@types/node@24.12.2) + '@inquirer/search': 4.1.9(@types/node@24.12.2) + '@inquirer/select': 5.1.5(@types/node@24.12.2) optionalDependencies: '@types/node': 24.12.2 - '@inquirer/rawlist@5.2.8(@types/node@24.12.2)': + '@inquirer/rawlist@5.2.9(@types/node@24.12.2)': dependencies: - '@inquirer/core': 11.1.9(@types/node@24.12.2) + '@inquirer/core': 11.1.10(@types/node@24.12.2) '@inquirer/type': 4.0.5(@types/node@24.12.2) optionalDependencies: '@types/node': 24.12.2 - '@inquirer/search@4.1.8(@types/node@24.12.2)': + '@inquirer/search@4.1.9(@types/node@24.12.2)': dependencies: - '@inquirer/core': 11.1.9(@types/node@24.12.2) + '@inquirer/core': 11.1.10(@types/node@24.12.2) '@inquirer/figures': 2.0.5 '@inquirer/type': 4.0.5(@types/node@24.12.2) optionalDependencies: '@types/node': 24.12.2 - '@inquirer/select@5.1.4(@types/node@24.12.2)': + '@inquirer/select@5.1.5(@types/node@24.12.2)': dependencies: '@inquirer/ansi': 2.0.5 - '@inquirer/core': 11.1.9(@types/node@24.12.2) + '@inquirer/core': 11.1.10(@types/node@24.12.2) '@inquirer/figures': 2.0.5 '@inquirer/type': 4.0.5(@types/node@24.12.2) optionalDependencies: @@ -10614,7 +10653,7 @@ snapshots: '@modelcontextprotocol/sdk@1.29.0(zod@4.4.2)': dependencies: - '@hono/node-server': 1.19.14(hono@4.12.16) + '@hono/node-server': 1.19.14(hono@4.12.18) ajv: 8.20.0 ajv-formats: 3.0.1(ajv@8.20.0) content-type: 1.0.5 @@ -10623,8 +10662,8 @@ snapshots: eventsource: 3.0.7 eventsource-parser: 3.0.8 express: 5.2.1 - express-rate-limit: 8.4.1(express@5.2.1) - hono: 4.12.16 + express-rate-limit: 8.5.1(express@5.2.1) + hono: 4.12.18 jose: 6.2.3 json-schema-typed: 8.0.2 pkce-challenge: 5.0.1 @@ -10652,7 +10691,7 @@ snapshots: '@msgpackr-extract/msgpackr-extract-win32-x64@3.0.3': optional: true - '@mswjs/interceptors@0.41.8': + '@mswjs/interceptors@0.41.9': dependencies: '@open-draft/deferred-promise': 2.2.0 '@open-draft/logger': 0.3.0 @@ -10759,7 +10798,7 @@ snapshots: agent-base: 7.1.4 http-proxy-agent: 7.0.2(supports-color@10.2.2) https-proxy-agent: 7.0.6(supports-color@10.2.2) - lru-cache: 11.3.5 + lru-cache: 11.3.6 socks-proxy-agent: 8.0.5 transitivePeerDependencies: - supports-color @@ -10773,7 +10812,7 @@ snapshots: '@gar/promise-retry': 1.0.3 '@npmcli/promise-spawn': 9.0.1 ini: 6.0.0 - lru-cache: 11.3.5 + lru-cache: 11.3.6 npm-pick-manifest: 11.0.3 proc-log: 6.1.0 semver: 7.7.4 @@ -10863,8 +10902,8 @@ snapshots: '@octokit/graphql-schema@15.26.1': dependencies: - graphql: 16.13.2 - graphql-tag: 2.12.6(graphql@16.13.2) + graphql: 16.14.0 + graphql-tag: 2.12.6(graphql@16.14.0) '@octokit/graphql@9.0.3': dependencies: @@ -10943,7 +10982,7 @@ snapshots: '@opentelemetry/semantic-conventions@1.40.0': {} - '@oxc-project/types@0.128.0': {} + '@oxc-project/types@0.129.0': {} '@parcel/watcher-android-arm64@2.5.6': optional: true @@ -11163,56 +11202,56 @@ snapshots: - react-native-b4a - supports-color - '@rolldown/binding-android-arm64@1.0.0-rc.18': + '@rolldown/binding-android-arm64@1.0.0': optional: true - '@rolldown/binding-darwin-arm64@1.0.0-rc.18': + '@rolldown/binding-darwin-arm64@1.0.0': optional: true - '@rolldown/binding-darwin-x64@1.0.0-rc.18': + '@rolldown/binding-darwin-x64@1.0.0': optional: true - '@rolldown/binding-freebsd-x64@1.0.0-rc.18': + '@rolldown/binding-freebsd-x64@1.0.0': optional: true - '@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.18': + '@rolldown/binding-linux-arm-gnueabihf@1.0.0': optional: true - '@rolldown/binding-linux-arm64-gnu@1.0.0-rc.18': + '@rolldown/binding-linux-arm64-gnu@1.0.0': optional: true - '@rolldown/binding-linux-arm64-musl@1.0.0-rc.18': + '@rolldown/binding-linux-arm64-musl@1.0.0': optional: true - '@rolldown/binding-linux-ppc64-gnu@1.0.0-rc.18': + '@rolldown/binding-linux-ppc64-gnu@1.0.0': optional: true - '@rolldown/binding-linux-s390x-gnu@1.0.0-rc.18': + '@rolldown/binding-linux-s390x-gnu@1.0.0': optional: true - '@rolldown/binding-linux-x64-gnu@1.0.0-rc.18': + '@rolldown/binding-linux-x64-gnu@1.0.0': optional: true - '@rolldown/binding-linux-x64-musl@1.0.0-rc.18': + '@rolldown/binding-linux-x64-musl@1.0.0': optional: true - '@rolldown/binding-openharmony-arm64@1.0.0-rc.18': + '@rolldown/binding-openharmony-arm64@1.0.0': optional: true - '@rolldown/binding-wasm32-wasi@1.0.0-rc.18': + '@rolldown/binding-wasm32-wasi@1.0.0': dependencies: '@emnapi/core': 1.10.0 '@emnapi/runtime': 1.10.0 '@napi-rs/wasm-runtime': 1.1.4(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0) optional: true - '@rolldown/binding-win32-arm64-msvc@1.0.0-rc.18': + '@rolldown/binding-win32-arm64-msvc@1.0.0': optional: true - '@rolldown/binding-win32-x64-msvc@1.0.0-rc.18': + '@rolldown/binding-win32-x64-msvc@1.0.0': optional: true - '@rolldown/pluginutils@1.0.0-rc.18': {} + '@rolldown/pluginutils@1.0.0': {} '@rollup/plugin-alias@6.0.0(rollup@4.60.2)': optionalDependencies: @@ -11248,7 +11287,7 @@ snapshots: '@rollup/pluginutils@5.3.0(rollup@4.60.2)': dependencies: - '@types/estree': 1.0.8 + '@types/estree': 1.0.9 estree-walker: 2.0.2 picomatch: 4.0.4 optionalDependencies: @@ -11381,11 +11420,11 @@ snapshots: '@standard-schema/spec@1.1.0': {} - '@stylistic/eslint-plugin@5.10.0(eslint@10.3.0(jiti@2.6.1))': + '@stylistic/eslint-plugin@5.10.0(eslint@10.3.0(jiti@2.7.0))': dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@10.3.0(jiti@2.6.1)) - '@typescript-eslint/types': 8.59.1 - eslint: 10.3.0(jiti@2.6.1) + '@eslint-community/eslint-utils': 4.9.1(eslint@10.3.0(jiti@2.7.0)) + '@typescript-eslint/types': 8.59.3 + eslint: 10.3.0(jiti@2.7.0) eslint-visitor-keys: 4.2.1 espree: 10.4.0 estraverse: 5.3.0 @@ -11395,9 +11434,9 @@ snapshots: dependencies: defer-to-connect: 2.0.1 - '@tony.ganchev/eslint-plugin-header@3.4.4(eslint@10.3.0(jiti@2.6.1))': + '@tony.ganchev/eslint-plugin-header@3.4.4(eslint@10.3.0(jiti@2.7.0))': dependencies: - eslint: 10.3.0(jiti@2.6.1) + eslint: 10.3.0(jiti@2.7.0) '@tootallnate/quickjs-emscripten@0.23.0': {} @@ -11439,16 +11478,16 @@ snapshots: '@types/body-parser@1.19.6': dependencies: '@types/connect': 3.4.38 - '@types/node': 22.19.17 + '@types/node': 22.19.19 '@types/bonjour@3.5.13': dependencies: - '@types/node': 22.19.17 + '@types/node': 22.19.19 '@types/browser-sync@2.29.1': dependencies: '@types/micromatch': 2.3.35 - '@types/node': 22.19.17 + '@types/node': 22.19.19 '@types/serve-static': 2.2.0 chokidar: 3.6.0 @@ -11459,56 +11498,58 @@ snapshots: '@types/cli-progress@3.11.6': dependencies: - '@types/node': 22.19.17 + '@types/node': 22.19.19 '@types/connect-history-api-fallback@1.5.4': dependencies: '@types/express-serve-static-core': 4.19.8 - '@types/node': 22.19.17 + '@types/node': 22.19.19 '@types/connect@3.4.38': dependencies: - '@types/node': 22.19.17 + '@types/node': 22.19.19 '@types/cors@2.8.19': dependencies: - '@types/node': 22.19.17 + '@types/node': 22.19.19 '@types/deep-eql@4.0.2': {} '@types/duplexify@3.6.5': dependencies: - '@types/node': 22.19.17 + '@types/node': 22.19.19 '@types/ejs@3.1.5': {} '@types/eslint-scope@3.7.7': dependencies: '@types/eslint': 9.6.1 - '@types/estree': 1.0.8 + '@types/estree': 1.0.9 '@types/eslint@9.6.1': dependencies: - '@types/estree': 1.0.8 + '@types/estree': 1.0.9 '@types/json-schema': 7.0.15 '@types/esrecurse@4.3.1': {} '@types/estree@1.0.8': {} + '@types/estree@1.0.9': {} + '@types/events@3.0.3': {} '@types/express-serve-static-core@4.19.8': dependencies: - '@types/node': 22.19.17 - '@types/qs': 6.15.0 + '@types/node': 22.19.19 + '@types/qs': 6.15.1 '@types/range-parser': 1.2.7 '@types/send': 1.2.1 '@types/express-serve-static-core@5.1.1': dependencies: - '@types/node': 22.19.17 - '@types/qs': 6.15.0 + '@types/node': 22.19.19 + '@types/qs': 6.15.1 '@types/range-parser': 1.2.7 '@types/send': 1.2.1 @@ -11516,7 +11557,7 @@ snapshots: dependencies: '@types/body-parser': 1.19.6 '@types/express-serve-static-core': 4.19.8 - '@types/qs': 6.15.0 + '@types/qs': 6.15.1 '@types/serve-static': 1.15.10 '@types/express@5.0.6': @@ -11529,13 +11570,13 @@ snapshots: '@types/graceful-fs@4.1.9': dependencies: - '@types/node': 22.19.17 + '@types/node': 22.19.19 '@types/http-errors@2.0.5': {} '@types/http-proxy@1.17.17': dependencies: - '@types/node': 22.19.17 + '@types/node': 22.19.19 '@types/ini@4.1.1': {} @@ -11551,7 +11592,7 @@ snapshots: '@types/karma@6.3.9': dependencies: - '@types/node': 22.19.17 + '@types/node': 22.19.19 log4js: 6.9.1 transitivePeerDependencies: - supports-color @@ -11560,11 +11601,20 @@ snapshots: '@types/loader-utils@3.0.0(esbuild@0.28.0)': dependencies: - '@types/node': 22.19.17 + '@types/node': 22.19.19 webpack: 5.106.2(esbuild@0.28.0) transitivePeerDependencies: + - '@minify-html/node' - '@swc/core' + - '@swc/css' + - '@swc/html' + - clean-css + - cssnano + - csso - esbuild + - html-minifier-terser + - lightningcss + - postcss - uglify-js - webpack-cli @@ -11578,10 +11628,10 @@ snapshots: '@types/node-fetch@2.6.13': dependencies: - '@types/node': 22.19.17 + '@types/node': 22.19.19 form-data: 4.0.5 - '@types/node@22.19.17': + '@types/node@22.19.19': dependencies: undici-types: 6.21.0 @@ -11593,7 +11643,7 @@ snapshots: '@types/npm-registry-fetch@8.0.9': dependencies: - '@types/node': 22.19.17 + '@types/node': 22.19.19 '@types/node-fetch': 2.6.13 '@types/npm-package-arg': 6.1.4 '@types/npmlog': 7.0.0 @@ -11601,11 +11651,11 @@ snapshots: '@types/npmlog@7.0.0': dependencies: - '@types/node': 22.19.17 + '@types/node': 22.19.19 '@types/pacote@11.1.8': dependencies: - '@types/node': 22.19.17 + '@types/node': 22.19.19 '@types/npm-registry-fetch': 8.0.9 '@types/npmlog': 7.0.0 '@types/ssri': 7.1.5 @@ -11616,14 +11666,14 @@ snapshots: '@types/progress@2.0.7': dependencies: - '@types/node': 22.19.17 + '@types/node': 22.19.19 '@types/pumpify@1.4.5': dependencies: '@types/duplexify': 3.6.5 - '@types/node': 22.19.17 + '@types/node': 22.19.19 - '@types/qs@6.15.0': {} + '@types/qs@6.15.1': {} '@types/range-parser@1.2.7': {} @@ -11631,7 +11681,7 @@ snapshots: '@types/responselike@1.0.0': dependencies: - '@types/node': 22.19.17 + '@types/node': 22.19.19 '@types/retry@0.12.0': {} @@ -11642,11 +11692,11 @@ snapshots: '@types/send@0.17.6': dependencies: '@types/mime': 1.3.5 - '@types/node': 22.19.17 + '@types/node': 22.19.19 '@types/send@1.2.1': dependencies: - '@types/node': 22.19.17 + '@types/node': 22.19.19 '@types/serve-index@1.9.4': dependencies: @@ -11655,38 +11705,38 @@ snapshots: '@types/serve-static@1.15.10': dependencies: '@types/http-errors': 2.0.5 - '@types/node': 22.19.17 + '@types/node': 22.19.19 '@types/send': 0.17.6 '@types/serve-static@2.2.0': dependencies: '@types/http-errors': 2.0.5 - '@types/node': 22.19.17 + '@types/node': 22.19.19 '@types/sockjs@0.3.36': dependencies: - '@types/node': 22.19.17 + '@types/node': 22.19.19 '@types/ssri@7.1.5': dependencies: - '@types/node': 22.19.17 + '@types/node': 22.19.19 '@types/stack-trace@0.0.33': {} '@types/tar-stream@3.1.4': dependencies: - '@types/node': 22.19.17 + '@types/node': 22.19.19 '@types/watchpack@2.4.5': dependencies: '@types/graceful-fs': 4.1.9 - '@types/node': 22.19.17 + '@types/node': 22.19.19 '@types/which@3.0.4': {} '@types/ws@8.18.1': dependencies: - '@types/node': 22.19.17 + '@types/node': 22.19.19 '@types/yargs-parser@21.0.3': {} @@ -11698,18 +11748,18 @@ snapshots: '@types/yauzl@2.10.3': dependencies: - '@types/node': 22.19.17 + '@types/node': 22.19.19 optional: true - '@typescript-eslint/eslint-plugin@8.59.1(@typescript-eslint/parser@8.59.1(eslint@10.3.0(jiti@2.6.1))(typescript@6.0.3))(eslint@10.3.0(jiti@2.6.1))(typescript@6.0.3)': + '@typescript-eslint/eslint-plugin@8.59.1(@typescript-eslint/parser@8.59.1(eslint@10.3.0(jiti@2.7.0))(typescript@6.0.3))(eslint@10.3.0(jiti@2.7.0))(typescript@6.0.3)': dependencies: '@eslint-community/regexpp': 4.12.2 - '@typescript-eslint/parser': 8.59.1(eslint@10.3.0(jiti@2.6.1))(typescript@6.0.3) + '@typescript-eslint/parser': 8.59.1(eslint@10.3.0(jiti@2.7.0))(typescript@6.0.3) '@typescript-eslint/scope-manager': 8.59.1 - '@typescript-eslint/type-utils': 8.59.1(eslint@10.3.0(jiti@2.6.1))(typescript@6.0.3) - '@typescript-eslint/utils': 8.59.1(eslint@10.3.0(jiti@2.6.1))(typescript@6.0.3) + '@typescript-eslint/type-utils': 8.59.1(eslint@10.3.0(jiti@2.7.0))(typescript@6.0.3) + '@typescript-eslint/utils': 8.59.1(eslint@10.3.0(jiti@2.7.0))(typescript@6.0.3) '@typescript-eslint/visitor-keys': 8.59.1 - eslint: 10.3.0(jiti@2.6.1) + eslint: 10.3.0(jiti@2.7.0) ignore: 7.0.5 natural-compare: 1.4.0 ts-api-utils: 2.5.0(typescript@6.0.3) @@ -11717,14 +11767,14 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.59.1(eslint@10.3.0(jiti@2.6.1))(typescript@6.0.3)': + '@typescript-eslint/parser@8.59.1(eslint@10.3.0(jiti@2.7.0))(typescript@6.0.3)': dependencies: '@typescript-eslint/scope-manager': 8.59.1 '@typescript-eslint/types': 8.59.1 '@typescript-eslint/typescript-estree': 8.59.1(typescript@6.0.3) '@typescript-eslint/visitor-keys': 8.59.1 debug: 4.4.3(supports-color@10.2.2) - eslint: 10.3.0(jiti@2.6.1) + eslint: 10.3.0(jiti@2.7.0) typescript: 6.0.3 transitivePeerDependencies: - supports-color @@ -11747,13 +11797,13 @@ snapshots: dependencies: typescript: 6.0.3 - '@typescript-eslint/type-utils@8.59.1(eslint@10.3.0(jiti@2.6.1))(typescript@6.0.3)': + '@typescript-eslint/type-utils@8.59.1(eslint@10.3.0(jiti@2.7.0))(typescript@6.0.3)': dependencies: '@typescript-eslint/types': 8.59.1 '@typescript-eslint/typescript-estree': 8.59.1(typescript@6.0.3) - '@typescript-eslint/utils': 8.59.1(eslint@10.3.0(jiti@2.6.1))(typescript@6.0.3) + '@typescript-eslint/utils': 8.59.1(eslint@10.3.0(jiti@2.7.0))(typescript@6.0.3) debug: 4.4.3(supports-color@10.2.2) - eslint: 10.3.0(jiti@2.6.1) + eslint: 10.3.0(jiti@2.7.0) ts-api-utils: 2.5.0(typescript@6.0.3) typescript: 6.0.3 transitivePeerDependencies: @@ -11761,6 +11811,8 @@ snapshots: '@typescript-eslint/types@8.59.1': {} + '@typescript-eslint/types@8.59.3': {} + '@typescript-eslint/typescript-estree@8.59.1(typescript@6.0.3)': dependencies: '@typescript-eslint/project-service': 8.59.1(typescript@6.0.3) @@ -11776,13 +11828,13 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.59.1(eslint@10.3.0(jiti@2.6.1))(typescript@6.0.3)': + '@typescript-eslint/utils@8.59.1(eslint@10.3.0(jiti@2.7.0))(typescript@6.0.3)': dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@10.3.0(jiti@2.6.1)) + '@eslint-community/eslint-utils': 4.9.1(eslint@10.3.0(jiti@2.7.0)) '@typescript-eslint/scope-manager': 8.59.1 '@typescript-eslint/types': 8.59.1 '@typescript-eslint/typescript-estree': 8.59.1(typescript@6.0.3) - eslint: 10.3.0(jiti@2.6.1) + eslint: 10.3.0(jiti@2.7.0) typescript: 6.0.3 transitivePeerDependencies: - supports-color @@ -11813,15 +11865,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@verdaccio/core@8.0.0': - dependencies: - ajv: 8.18.0 - http-errors: 2.0.1 - http-status-codes: 2.3.0 - minimatch: 7.4.9 - process-warning: 1.0.0 - semver: 7.7.4 - '@verdaccio/core@8.0.0-next-8.21': dependencies: ajv: 8.17.1 @@ -11840,6 +11883,15 @@ snapshots: process-warning: 1.0.0 semver: 7.7.4 + '@verdaccio/core@8.1.0': + dependencies: + ajv: 8.18.0 + http-errors: 2.0.1 + http-status-codes: 2.3.0 + minimatch: 7.4.9 + process-warning: 1.0.0 + semver: 7.7.4 + '@verdaccio/file-locking@10.3.1': dependencies: lockfile: 1.0.4 @@ -11970,9 +12022,9 @@ snapshots: lodash: 4.18.1 minimatch: 7.4.9 - '@vitejs/plugin-basic-ssl@2.3.0(vite@7.3.2(@types/node@24.12.2)(jiti@2.6.1)(less@4.6.4)(sass@1.99.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4))': + '@vitejs/plugin-basic-ssl@2.3.0(vite@7.3.2(@types/node@24.12.2)(jiti@2.7.0)(less@4.6.4)(sass@1.99.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0))': dependencies: - vite: 7.3.2(@types/node@24.12.2)(jiti@2.6.1)(less@4.6.4)(sass@1.99.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4) + vite: 7.3.2(@types/node@24.12.2)(jiti@2.7.0)(less@4.6.4)(sass@1.99.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0) '@vitest/coverage-v8@4.1.5(vitest@4.1.5)': dependencies: @@ -11986,7 +12038,7 @@ snapshots: obug: 2.1.1 std-env: 4.1.0 tinyrainbow: 3.1.0 - vitest: 4.1.5(@opentelemetry/api@1.9.1)(@types/node@24.12.2)(@vitest/coverage-v8@4.1.5)(jiti@2.6.1)(jsdom@29.1.1)(less@4.6.4)(sass@1.99.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4) + vitest: 4.1.5(@opentelemetry/api@1.9.1)(@types/node@24.12.2)(@vitest/coverage-v8@4.1.5)(jsdom@29.1.1)(vite@7.3.2(@types/node@24.12.2)(jiti@2.7.0)(less@4.6.4)(sass@1.99.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0)) '@vitest/expect@4.1.5': dependencies: @@ -11997,13 +12049,13 @@ snapshots: chai: 6.2.2 tinyrainbow: 3.1.0 - '@vitest/mocker@4.1.5(vite@7.3.2(@types/node@24.12.2)(jiti@2.6.1)(less@4.6.4)(sass@1.99.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4))': + '@vitest/mocker@4.1.5(vite@7.3.2(@types/node@24.12.2)(jiti@2.7.0)(less@4.6.4)(sass@1.99.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0))': dependencies: '@vitest/spy': 4.1.5 estree-walker: 3.0.3 magic-string: 0.30.21 optionalDependencies: - vite: 7.3.2(@types/node@24.12.2)(jiti@2.6.1)(less@4.6.4)(sass@1.99.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4) + vite: 7.3.2(@types/node@24.12.2)(jiti@2.7.0)(less@4.6.4)(sass@1.99.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0) '@vitest/pretty-format@4.1.5': dependencies: @@ -12182,21 +12234,21 @@ snapshots: ajv@8.17.1: dependencies: fast-deep-equal: 3.1.3 - fast-uri: 3.1.0 + fast-uri: 3.1.2 json-schema-traverse: 1.0.0 require-from-string: 2.0.2 ajv@8.18.0: dependencies: fast-deep-equal: 3.1.3 - fast-uri: 3.1.0 + fast-uri: 3.1.2 json-schema-traverse: 1.0.0 require-from-string: 2.0.2 ajv@8.20.0: dependencies: fast-deep-equal: 3.1.3 - fast-uri: 3.1.0 + fast-uri: 3.1.2 json-schema-traverse: 1.0.0 require-from-string: 2.0.2 @@ -12343,7 +12395,7 @@ snapshots: autoprefixer@10.5.0(postcss@8.5.13): dependencies: browserslist: 4.28.2 - caniuse-lite: 1.0.30001791 + caniuse-lite: 1.0.30001792 fraction.js: 5.3.4 picocolors: 1.1.1 postcss: 8.5.13 @@ -12359,12 +12411,12 @@ snapshots: b4a@1.8.1: {} - babel-loader@10.1.1(@babel/core@7.29.0)(webpack@5.106.2(esbuild@0.28.0)): + babel-loader@10.1.1(@babel/core@7.29.0)(webpack@5.106.2(esbuild@0.28.0)(postcss@8.5.13)): dependencies: '@babel/core': 7.29.0 find-up: 5.0.0 optionalDependencies: - webpack: 5.106.2(esbuild@0.28.0) + webpack: 5.106.2(esbuild@0.28.0)(postcss@8.5.13) babel-plugin-polyfill-corejs2@0.4.17(@babel/core@7.29.0): dependencies: @@ -12409,7 +12461,7 @@ snapshots: bare-events: 2.8.2 bare-path: 3.0.0 bare-stream: 2.13.1(bare-events@2.8.2) - bare-url: 2.4.2 + bare-url: 2.4.3 fast-fifo: 1.3.2 transitivePeerDependencies: - bare-abort-controller @@ -12430,7 +12482,7 @@ snapshots: transitivePeerDependencies: - react-native-b4a - bare-url@2.4.2: + bare-url@2.4.3: dependencies: bare-path: 3.0.0 @@ -12438,7 +12490,7 @@ snapshots: base64id@2.0.0: {} - baseline-browser-mapping@2.10.27: {} + baseline-browser-mapping@2.10.29: {} basic-ftp@5.3.1: {} @@ -12458,9 +12510,9 @@ snapshots: domhandler: 5.0.3 htmlparser2: 10.1.0 picocolors: 1.1.1 - postcss: 8.5.13 + postcss: 8.5.14 postcss-media-query-parser: 0.2.3 - postcss-safe-parser: 7.0.1(postcss@8.5.13) + postcss-safe-parser: 7.0.1(postcss@8.5.14) before-after-hook@4.0.0: {} @@ -12523,7 +12575,7 @@ snapshots: dependencies: balanced-match: 1.0.2 - brace-expansion@5.0.5: + brace-expansion@5.0.6: dependencies: balanced-match: 4.0.4 @@ -12595,10 +12647,10 @@ snapshots: browserslist@4.28.2: dependencies: - baseline-browser-mapping: 2.10.27 - caniuse-lite: 1.0.30001791 - electron-to-chromium: 1.5.349 - node-releases: 2.0.38 + baseline-browser-mapping: 2.10.29 + caniuse-lite: 1.0.30001792 + electron-to-chromium: 1.5.353 + node-releases: 2.0.44 update-browserslist-db: 1.2.3(browserslist@4.28.2) bs-recipes@1.3.4: {} @@ -12631,7 +12683,7 @@ snapshots: '@npmcli/fs': 5.0.0 fs-minipass: 3.0.3 glob: 13.0.6 - lru-cache: 11.3.5 + lru-cache: 11.3.6 minipass: 7.1.3 minipass-collect: 2.0.1 minipass-flush: 1.0.7 @@ -12670,7 +12722,7 @@ snapshots: callsites@3.1.0: {} - caniuse-lite@1.0.30001791: {} + caniuse-lite@1.0.30001792: {} caseless@0.12.0: {} @@ -12867,14 +12919,14 @@ snapshots: dependencies: is-what: 4.1.16 - copy-webpack-plugin@14.0.0(webpack@5.106.2(esbuild@0.28.0)): + copy-webpack-plugin@14.0.0(webpack@5.106.2(esbuild@0.28.0)(postcss@8.5.13)): dependencies: glob-parent: 6.0.2 normalize-path: 3.0.0 schema-utils: 4.3.3 serialize-javascript: 7.0.5 tinyglobby: 0.2.16 - webpack: 5.106.2(esbuild@0.28.0) + webpack: 5.106.2(esbuild@0.28.0)(postcss@8.5.13) core-js-compat@3.49.0: dependencies: @@ -12910,18 +12962,18 @@ snapshots: shebang-command: 2.0.0 which: 2.0.2 - css-loader@7.1.4(webpack@5.106.2(esbuild@0.28.0)): + css-loader@7.1.4(webpack@5.106.2(esbuild@0.28.0)(postcss@8.5.13)): dependencies: - icss-utils: 5.1.0(postcss@8.5.13) - postcss: 8.5.13 - postcss-modules-extract-imports: 3.1.0(postcss@8.5.13) - postcss-modules-local-by-default: 4.2.0(postcss@8.5.13) - postcss-modules-scope: 3.2.1(postcss@8.5.13) - postcss-modules-values: 4.0.0(postcss@8.5.13) + icss-utils: 5.1.0(postcss@8.5.14) + postcss: 8.5.14 + postcss-modules-extract-imports: 3.1.0(postcss@8.5.14) + postcss-modules-local-by-default: 4.2.0(postcss@8.5.14) + postcss-modules-scope: 3.2.1(postcss@8.5.14) + postcss-modules-values: 4.0.0(postcss@8.5.14) postcss-value-parser: 4.2.0 semver: 7.7.4 optionalDependencies: - webpack: 5.106.2(esbuild@0.28.0) + webpack: 5.106.2(esbuild@0.28.0)(postcss@8.5.13) css-select@6.0.0: dependencies: @@ -13141,7 +13193,7 @@ snapshots: ejs@5.0.2: {} - electron-to-chromium@1.5.349: {} + electron-to-chromium@1.5.353: {} emoji-regex@10.6.0: {} @@ -13180,7 +13232,7 @@ snapshots: engine.io@6.6.7(bufferutil@4.1.0)(utf-8-validate@6.0.6): dependencies: '@types/cors': 2.8.19 - '@types/node': 22.19.17 + '@types/node': 22.19.19 '@types/ws': 8.18.1 accepts: 1.3.8 base64id: 2.0.0 @@ -13194,7 +13246,7 @@ snapshots: - supports-color - utf-8-validate - enhanced-resolve@5.21.0: + enhanced-resolve@5.21.3: dependencies: graceful-fs: 4.2.11 tapable: 2.3.3 @@ -13385,29 +13437,29 @@ snapshots: optionalDependencies: source-map: 0.6.1 - eslint-config-prettier@10.1.8(eslint@10.3.0(jiti@2.6.1)): + eslint-config-prettier@10.1.8(eslint@10.3.0(jiti@2.7.0)): dependencies: - eslint: 10.3.0(jiti@2.6.1) + eslint: 10.3.0(jiti@2.7.0) eslint-import-resolver-node@0.3.10: dependencies: debug: 3.2.7 - is-core-module: 2.16.1 + is-core-module: 2.16.2 resolve: 2.0.0-next.6 transitivePeerDependencies: - supports-color - eslint-module-utils@2.12.1(@typescript-eslint/parser@8.59.1(eslint@10.3.0(jiti@2.6.1))(typescript@6.0.3))(eslint-import-resolver-node@0.3.10)(eslint@10.3.0(jiti@2.6.1)): + eslint-module-utils@2.12.1(@typescript-eslint/parser@8.59.1(eslint@10.3.0(jiti@2.7.0))(typescript@6.0.3))(eslint-import-resolver-node@0.3.10)(eslint@10.3.0(jiti@2.7.0)): dependencies: debug: 3.2.7 optionalDependencies: - '@typescript-eslint/parser': 8.59.1(eslint@10.3.0(jiti@2.6.1))(typescript@6.0.3) - eslint: 10.3.0(jiti@2.6.1) + '@typescript-eslint/parser': 8.59.1(eslint@10.3.0(jiti@2.7.0))(typescript@6.0.3) + eslint: 10.3.0(jiti@2.7.0) eslint-import-resolver-node: 0.3.10 transitivePeerDependencies: - supports-color - eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.59.1(eslint@10.3.0(jiti@2.6.1))(typescript@6.0.3))(eslint@10.3.0(jiti@2.6.1)): + eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.59.1(eslint@10.3.0(jiti@2.7.0))(typescript@6.0.3))(eslint@10.3.0(jiti@2.7.0)): dependencies: '@rtsao/scc': 1.1.0 array-includes: 3.1.9 @@ -13416,11 +13468,11 @@ snapshots: array.prototype.flatmap: 1.3.3 debug: 3.2.7 doctrine: 2.1.0 - eslint: 10.3.0(jiti@2.6.1) + eslint: 10.3.0(jiti@2.7.0) eslint-import-resolver-node: 0.3.10 - eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.59.1(eslint@10.3.0(jiti@2.6.1))(typescript@6.0.3))(eslint-import-resolver-node@0.3.10)(eslint@10.3.0(jiti@2.6.1)) + eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.59.1(eslint@10.3.0(jiti@2.7.0))(typescript@6.0.3))(eslint-import-resolver-node@0.3.10)(eslint@10.3.0(jiti@2.7.0)) hasown: 2.0.3 - is-core-module: 2.16.1 + is-core-module: 2.16.2 is-glob: 4.0.3 minimatch: 3.1.5 object.fromentries: 2.0.8 @@ -13430,7 +13482,7 @@ snapshots: string.prototype.trimend: 1.0.9 tsconfig-paths: 3.15.0 optionalDependencies: - '@typescript-eslint/parser': 8.59.1(eslint@10.3.0(jiti@2.6.1))(typescript@6.0.3) + '@typescript-eslint/parser': 8.59.1(eslint@10.3.0(jiti@2.7.0))(typescript@6.0.3) transitivePeerDependencies: - eslint-import-resolver-typescript - eslint-import-resolver-webpack @@ -13444,7 +13496,7 @@ snapshots: eslint-scope@9.1.2: dependencies: '@types/esrecurse': 4.3.1 - '@types/estree': 1.0.8 + '@types/estree': 1.0.9 esrecurse: 4.3.0 estraverse: 5.3.0 @@ -13454,9 +13506,9 @@ snapshots: eslint-visitor-keys@5.0.1: {} - eslint@10.3.0(jiti@2.6.1): + eslint@10.3.0(jiti@2.7.0): dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@10.3.0(jiti@2.6.1)) + '@eslint-community/eslint-utils': 4.9.1(eslint@10.3.0(jiti@2.7.0)) '@eslint-community/regexpp': 4.12.2 '@eslint/config-array': 0.23.5 '@eslint/config-helpers': 0.5.5 @@ -13465,7 +13517,7 @@ snapshots: '@humanfs/node': 0.16.8 '@humanwhocodes/module-importer': 1.0.1 '@humanwhocodes/retry': 0.4.3 - '@types/estree': 1.0.8 + '@types/estree': 1.0.9 ajv: 6.15.0 cross-spawn: 7.0.6 debug: 4.4.3(supports-color@10.2.2) @@ -13487,7 +13539,7 @@ snapshots: natural-compare: 1.4.0 optionator: 0.9.4 optionalDependencies: - jiti: 2.6.1 + jiti: 2.7.0 transitivePeerDependencies: - supports-color @@ -13521,7 +13573,7 @@ snapshots: estree-walker@3.0.3: dependencies: - '@types/estree': 1.0.8 + '@types/estree': 1.0.9 esutils@2.0.3: {} @@ -13555,10 +13607,10 @@ snapshots: express-rate-limit@5.5.1: {} - express-rate-limit@8.4.1(express@5.2.1): + express-rate-limit@8.5.1(express@5.2.1): dependencies: express: 5.2.1 - ip-address: 10.1.0 + ip-address: 10.2.0 express@4.22.1: dependencies: @@ -13596,6 +13648,42 @@ snapshots: transitivePeerDependencies: - supports-color + express@4.22.2: + dependencies: + accepts: 1.3.8 + array-flatten: 1.1.1 + body-parser: 1.20.5 + content-disposition: 0.5.4 + content-type: 1.0.5 + cookie: 0.7.2 + cookie-signature: 1.0.7 + debug: 2.6.9 + depd: 2.0.0 + encodeurl: 2.0.0 + escape-html: 1.0.3 + etag: 1.8.1 + finalhandler: 1.3.2 + fresh: 0.5.2 + http-errors: 2.0.1 + merge-descriptors: 1.0.3 + methods: 1.1.2 + on-finished: 2.4.1 + parseurl: 1.3.3 + path-to-regexp: 0.1.13 + proxy-addr: 2.0.7 + qs: 6.15.1 + range-parser: 1.2.1 + safe-buffer: 5.2.1 + send: 0.19.2 + serve-static: 1.16.3 + setprototypeof: 1.2.0 + statuses: 2.0.2 + type-is: 1.6.18 + utils-merge: 1.0.1 + vary: 1.1.2 + transitivePeerDependencies: + - supports-color + express@5.2.1: dependencies: accepts: 2.0.0 @@ -13667,7 +13755,7 @@ snapshots: dependencies: fast-string-truncated-width: 3.0.3 - fast-uri@3.1.0: {} + fast-uri@3.1.2: {} fast-wrap-ansi@0.2.0: dependencies: @@ -13903,7 +13991,7 @@ snapshots: get-caller-file@2.0.5: {} - get-east-asian-width@1.5.0: {} + get-east-asian-width@1.6.0: {} get-intrinsic@1.3.0: dependencies: @@ -14014,14 +14102,14 @@ snapshots: google-gax@5.0.6(supports-color@10.2.2): dependencies: '@grpc/grpc-js': 1.14.3 - '@grpc/proto-loader': 0.8.0 + '@grpc/proto-loader': 0.8.1 duplexify: 4.1.3 google-auth-library: 10.6.2(supports-color@10.2.2) google-logging-utils: 1.1.3 node-fetch: 3.3.2 object-hash: 3.0.0 proto3-json-serializer: 3.0.4 - protobufjs: 7.5.6 + protobufjs: 7.5.7 retry-request: 8.0.2(supports-color@10.2.2) rimraf: 5.0.10 transitivePeerDependencies: @@ -14048,17 +14136,17 @@ snapshots: graceful-fs@4.2.11: {} - graphql-tag@2.12.6(graphql@16.13.2): + graphql-tag@2.12.6(graphql@16.14.0): dependencies: - graphql: 16.13.2 + graphql: 16.14.0 tslib: 2.8.1 - graphql@16.13.2: {} + graphql@16.14.0: {} - grpc-gcp@1.0.1(protobufjs@7.5.6): + grpc-gcp@1.0.1(protobufjs@7.5.7): dependencies: '@grpc/grpc-js': 1.14.3 - protobufjs: 7.5.6 + protobufjs: 7.5.7 gunzip-maybe@1.4.2: dependencies: @@ -14102,11 +14190,11 @@ snapshots: dependencies: function-bind: 1.1.2 - hono@4.12.16: {} + hono@4.12.18: {} hosted-git-info@9.0.3: dependencies: - lru-cache: 11.3.5 + lru-cache: 11.3.6 hpack.js@2.1.6: dependencies: @@ -14250,9 +14338,9 @@ snapshots: dependencies: safer-buffer: 2.1.2 - icss-utils@5.1.0(postcss@8.5.13): + icss-utils@5.1.0(postcss@8.5.14): dependencies: - postcss: 8.5.13 + postcss: 8.5.14 idb@7.1.1: {} @@ -14299,8 +14387,6 @@ snapshots: hasown: 2.0.3 side-channel: 1.1.0 - ip-address@10.1.0: {} - ip-address@10.2.0: {} ipaddr.js@1.9.1: {} @@ -14338,7 +14424,7 @@ snapshots: is-callable@1.2.7: {} - is-core-module@2.16.1: + is-core-module@2.16.2: dependencies: hasown: 2.0.3 @@ -14367,7 +14453,7 @@ snapshots: is-fullwidth-code-point@5.1.0: dependencies: - get-east-asian-width: 1.5.0 + get-east-asian-width: 1.6.0 is-generator-function@1.1.2: dependencies: @@ -14397,7 +14483,7 @@ snapshots: is-negative-zero@2.0.3: {} - is-network-error@1.3.1: {} + is-network-error@1.3.2: {} is-node-process@1.2.0: {} @@ -14428,7 +14514,7 @@ snapshots: is-reference@1.2.1: dependencies: - '@types/estree': 1.0.8 + '@types/estree': 1.0.9 is-regex@1.2.1: dependencies: @@ -14569,11 +14655,11 @@ snapshots: jest-worker@27.5.1: dependencies: - '@types/node': 22.19.17 + '@types/node': 22.19.19 merge-stream: 2.0.0 supports-color: 8.1.1 - jiti@2.6.1: {} + jiti@2.7.0: {} jose@6.2.3: {} @@ -14601,7 +14687,7 @@ snapshots: decimal.js: 10.6.0 html-encoding-sniffer: 6.0.0 is-potential-custom-element-name: 1.0.1 - lru-cache: 11.3.5 + lru-cache: 11.3.6 parse5: 8.0.1 saxes: 6.0.0 symbol-tree: 3.2.4 @@ -14763,11 +14849,11 @@ snapshots: picocolors: 1.1.1 shell-quote: 1.8.3 - less-loader@12.3.2(less@4.6.4)(webpack@5.106.2(esbuild@0.28.0)): + less-loader@12.3.2(less@4.6.4)(webpack@5.106.2(esbuild@0.28.0)(postcss@8.5.13)): dependencies: less: 4.6.4 optionalDependencies: - webpack: 5.106.2(esbuild@0.28.0) + webpack: 5.106.2(esbuild@0.28.0)(postcss@8.5.13) less@4.6.4: dependencies: @@ -14787,11 +14873,11 @@ snapshots: prelude-ls: 1.2.1 type-check: 0.4.0 - license-webpack-plugin@4.0.2(webpack@5.106.2(esbuild@0.28.0)): + license-webpack-plugin@4.0.2(webpack@5.106.2(esbuild@0.28.0)(postcss@8.5.13)): dependencies: webpack-sources: 3.4.1 optionalDependencies: - webpack: 5.106.2(esbuild@0.28.0) + webpack: 5.106.2(esbuild@0.28.0)(postcss@8.5.13) limiter@1.1.5: {} @@ -14904,7 +14990,7 @@ snapshots: lru-cache@10.4.3: {} - lru-cache@11.3.5: {} + lru-cache@11.3.6: {} lru-cache@5.1.1: dependencies: @@ -15015,17 +15101,17 @@ snapshots: mimic-response@3.1.0: {} - mini-css-extract-plugin@2.10.2(webpack@5.106.2(esbuild@0.28.0)): + mini-css-extract-plugin@2.10.2(webpack@5.106.2(esbuild@0.28.0)(postcss@8.5.13)): dependencies: schema-utils: 4.3.3 tapable: 2.3.3 - webpack: 5.106.2(esbuild@0.28.0) + webpack: 5.106.2(esbuild@0.28.0)(postcss@8.5.13) minimalistic-assert@1.0.1: {} minimatch@10.2.5: dependencies: - brace-expansion: 5.0.5 + brace-expansion: 5.0.6 minimatch@3.1.5: dependencies: @@ -15145,10 +15231,10 @@ snapshots: netmask@2.1.1: {} - ng-packagr@22.0.0-next.3(@angular/compiler-cli@22.0.0-next.10(@angular/compiler@22.0.0-next.10)(typescript@6.0.3))(tslib@2.8.1)(typescript@6.0.3): + ng-packagr@22.0.0-next.4(@angular/compiler-cli@22.0.0-next.12(@angular/compiler@22.0.0-next.12)(typescript@6.0.3))(tslib@2.8.1)(typescript@6.0.3): dependencies: '@ampproject/remapping': 2.3.0 - '@angular/compiler-cli': 22.0.0-next.10(@angular/compiler@22.0.0-next.10)(typescript@6.0.3) + '@angular/compiler-cli': 22.0.0-next.12(@angular/compiler@22.0.0-next.12)(typescript@6.0.3) '@rollup/plugin-json': 6.1.0(rollup@4.60.2) '@rollup/wasm-node': 4.60.2 ajv: 8.20.0 @@ -15163,7 +15249,7 @@ snapshots: less: 4.6.4 ora: 9.4.0 piscina: 5.1.4 - postcss: 8.5.13 + postcss: 8.5.14 rollup-plugin-dts: 6.4.1(rollup@4.60.2)(typescript@6.0.3) rxjs: 7.8.2 sass: 1.99.0 @@ -15173,9 +15259,9 @@ snapshots: optionalDependencies: rollup: 4.60.2 - nock@14.0.13: + nock@14.0.14: dependencies: - '@mswjs/interceptors': 0.41.8 + '@mswjs/interceptors': 0.41.9 json-stringify-safe: 5.0.1 propagate: 2.0.1 @@ -15229,12 +15315,12 @@ snapshots: nopt: 9.0.0 proc-log: 6.1.0 semver: 7.7.4 - tar: 7.5.13 + tar: 7.5.15 tinyglobby: 0.2.16 undici: 6.25.0 which: 6.0.1 - node-releases@2.0.38: {} + node-releases@2.0.44: {} nopt@9.0.0: dependencies: @@ -15436,7 +15522,7 @@ snapshots: p-retry@6.2.1: dependencies: '@types/retry': 0.12.2 - is-network-error: 1.3.1 + is-network-error: 1.3.2 retry: 0.13.1 p-timeout@3.2.0: @@ -15481,7 +15567,7 @@ snapshots: proc-log: 6.1.0 sigstore: 4.1.0 ssri: 13.0.1 - tar: 7.5.13 + tar: 7.5.15 transitivePeerDependencies: - supports-color @@ -15533,7 +15619,7 @@ snapshots: path-scurry@2.0.2: dependencies: - lru-cache: 11.3.5 + lru-cache: 11.3.6 minipass: 7.1.3 path-to-regexp@0.1.13: {} @@ -15618,43 +15704,43 @@ snapshots: possible-typed-array-names@1.1.0: {} - postcss-loader@8.2.1(postcss@8.5.13)(typescript@6.0.3)(webpack@5.106.2(esbuild@0.28.0)): + postcss-loader@8.2.1(postcss@8.5.13)(typescript@6.0.3)(webpack@5.106.2(esbuild@0.28.0)(postcss@8.5.13)): dependencies: cosmiconfig: 9.0.1(typescript@6.0.3) - jiti: 2.6.1 + jiti: 2.7.0 postcss: 8.5.13 semver: 7.7.4 optionalDependencies: - webpack: 5.106.2(esbuild@0.28.0) + webpack: 5.106.2(esbuild@0.28.0)(postcss@8.5.13) transitivePeerDependencies: - typescript postcss-media-query-parser@0.2.3: {} - postcss-modules-extract-imports@3.1.0(postcss@8.5.13): + postcss-modules-extract-imports@3.1.0(postcss@8.5.14): dependencies: - postcss: 8.5.13 + postcss: 8.5.14 - postcss-modules-local-by-default@4.2.0(postcss@8.5.13): + postcss-modules-local-by-default@4.2.0(postcss@8.5.14): dependencies: - icss-utils: 5.1.0(postcss@8.5.13) - postcss: 8.5.13 + icss-utils: 5.1.0(postcss@8.5.14) + postcss: 8.5.14 postcss-selector-parser: 7.1.1 postcss-value-parser: 4.2.0 - postcss-modules-scope@3.2.1(postcss@8.5.13): + postcss-modules-scope@3.2.1(postcss@8.5.14): dependencies: - postcss: 8.5.13 + postcss: 8.5.14 postcss-selector-parser: 7.1.1 - postcss-modules-values@4.0.0(postcss@8.5.13): + postcss-modules-values@4.0.0(postcss@8.5.14): dependencies: - icss-utils: 5.1.0(postcss@8.5.13) - postcss: 8.5.13 + icss-utils: 5.1.0(postcss@8.5.14) + postcss: 8.5.14 - postcss-safe-parser@7.0.1(postcss@8.5.13): + postcss-safe-parser@7.0.1(postcss@8.5.14): dependencies: - postcss: 8.5.13 + postcss: 8.5.14 postcss-selector-parser@7.1.1: dependencies: @@ -15669,6 +15755,12 @@ snapshots: picocolors: 1.1.1 source-map-js: 1.2.1 + postcss@8.5.14: + dependencies: + nanoid: 3.3.12 + picocolors: 1.1.1 + source-map-js: 1.2.1 + powershell-utils@0.1.0: {} prelude-ls@1.2.1: {} @@ -15691,9 +15783,9 @@ snapshots: proto3-json-serializer@3.0.4: dependencies: - protobufjs: 7.5.6 + protobufjs: 7.5.7 - protobufjs@7.5.6: + protobufjs@7.5.7: dependencies: '@protobufjs/aspromise': 1.1.2 '@protobufjs/base64': 1.1.2 @@ -15705,7 +15797,7 @@ snapshots: '@protobufjs/path': 1.1.2 '@protobufjs/pool': 1.1.0 '@protobufjs/utf8': 1.1.1 - '@types/node': 22.19.17 + '@types/node': 22.19.19 long: 5.3.2 proxy-addr@2.0.7: @@ -15822,7 +15914,7 @@ snapshots: unicode-properties: 1.4.1 urijs: 1.19.11 wordwrap: 1.0.0 - yaml: 2.8.4 + yaml: 2.9.0 transitivePeerDependencies: - encoding @@ -15946,20 +16038,20 @@ snapshots: adjust-sourcemap-loader: 4.0.0 convert-source-map: 1.9.0 loader-utils: 2.0.4 - postcss: 8.5.13 + postcss: 8.5.14 source-map: 0.6.1 resolve@1.22.12: dependencies: es-errors: 1.3.0 - is-core-module: 2.16.1 + is-core-module: 2.16.2 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 resolve@2.0.0-next.6: dependencies: es-errors: 1.3.0 - is-core-module: 2.16.1 + is-core-module: 2.16.2 node-exports-info: 1.6.0 object-keys: 1.1.1 path-parse: 1.0.7 @@ -16002,26 +16094,26 @@ snapshots: dependencies: glob: 10.5.0 - rolldown@1.0.0-rc.18: + rolldown@1.0.0: dependencies: - '@oxc-project/types': 0.128.0 - '@rolldown/pluginutils': 1.0.0-rc.18 + '@oxc-project/types': 0.129.0 + '@rolldown/pluginutils': 1.0.0 optionalDependencies: - '@rolldown/binding-android-arm64': 1.0.0-rc.18 - '@rolldown/binding-darwin-arm64': 1.0.0-rc.18 - '@rolldown/binding-darwin-x64': 1.0.0-rc.18 - '@rolldown/binding-freebsd-x64': 1.0.0-rc.18 - '@rolldown/binding-linux-arm-gnueabihf': 1.0.0-rc.18 - '@rolldown/binding-linux-arm64-gnu': 1.0.0-rc.18 - '@rolldown/binding-linux-arm64-musl': 1.0.0-rc.18 - '@rolldown/binding-linux-ppc64-gnu': 1.0.0-rc.18 - '@rolldown/binding-linux-s390x-gnu': 1.0.0-rc.18 - '@rolldown/binding-linux-x64-gnu': 1.0.0-rc.18 - '@rolldown/binding-linux-x64-musl': 1.0.0-rc.18 - '@rolldown/binding-openharmony-arm64': 1.0.0-rc.18 - '@rolldown/binding-wasm32-wasi': 1.0.0-rc.18 - '@rolldown/binding-win32-arm64-msvc': 1.0.0-rc.18 - '@rolldown/binding-win32-x64-msvc': 1.0.0-rc.18 + '@rolldown/binding-android-arm64': 1.0.0 + '@rolldown/binding-darwin-arm64': 1.0.0 + '@rolldown/binding-darwin-x64': 1.0.0 + '@rolldown/binding-freebsd-x64': 1.0.0 + '@rolldown/binding-linux-arm-gnueabihf': 1.0.0 + '@rolldown/binding-linux-arm64-gnu': 1.0.0 + '@rolldown/binding-linux-arm64-musl': 1.0.0 + '@rolldown/binding-linux-ppc64-gnu': 1.0.0 + '@rolldown/binding-linux-s390x-gnu': 1.0.0 + '@rolldown/binding-linux-x64-gnu': 1.0.0 + '@rolldown/binding-linux-x64-musl': 1.0.0 + '@rolldown/binding-openharmony-arm64': 1.0.0 + '@rolldown/binding-wasm32-wasi': 1.0.0 + '@rolldown/binding-win32-arm64-msvc': 1.0.0 + '@rolldown/binding-win32-x64-msvc': 1.0.0 rollup-license-plugin@3.2.1: dependencies: @@ -16041,12 +16133,12 @@ snapshots: optionalDependencies: '@babel/code-frame': 7.29.0 - rollup-plugin-sourcemaps2@0.5.6(@types/node@22.19.17)(rollup@4.60.2): + rollup-plugin-sourcemaps2@0.5.6(@types/node@22.19.19)(rollup@4.60.2): dependencies: '@rollup/pluginutils': 5.3.0(rollup@4.60.2) rollup: 4.60.2 optionalDependencies: - '@types/node': 22.19.17 + '@types/node': 22.19.19 rollup@4.60.2: dependencies: @@ -16128,12 +16220,12 @@ snapshots: safer-buffer@2.1.2: {} - sass-loader@16.0.7(sass@1.99.0)(webpack@5.106.2(esbuild@0.28.0)): + sass-loader@16.0.7(sass@1.99.0)(webpack@5.106.2(esbuild@0.28.0)(postcss@8.5.13)): dependencies: neo-async: 2.6.2 optionalDependencies: sass: 1.99.0 - webpack: 5.106.2(esbuild@0.28.0) + webpack: 5.106.2(esbuild@0.28.0)(postcss@8.5.13) sass@1.99.0: dependencies: @@ -16385,11 +16477,11 @@ snapshots: dependencies: agent-base: 7.1.4 debug: 4.4.3(supports-color@10.2.2) - socks: 2.8.8 + socks: 2.8.9 transitivePeerDependencies: - supports-color - socks@2.8.8: + socks@2.8.9: dependencies: ip-address: 10.2.0 smart-buffer: 4.2.0 @@ -16404,11 +16496,11 @@ snapshots: source-map-js@1.2.1: {} - source-map-loader@5.0.0(webpack@5.106.2(esbuild@0.28.0)): + source-map-loader@5.0.0(webpack@5.106.2(esbuild@0.28.0)(postcss@8.5.13)): dependencies: iconv-lite: 0.6.3 source-map-js: 1.2.1 - webpack: 5.106.2(esbuild@0.28.0) + webpack: 5.106.2(esbuild@0.28.0)(postcss@8.5.13) source-map-support@0.5.21: dependencies: @@ -16559,12 +16651,12 @@ snapshots: string-width@7.2.0: dependencies: emoji-regex: 10.6.0 - get-east-asian-width: 1.5.0 + get-east-asian-width: 1.6.0 strip-ansi: 7.2.0 string-width@8.2.1: dependencies: - get-east-asian-width: 1.5.0 + get-east-asian-width: 1.6.0 strip-ansi: 7.2.0 string.prototype.trim@1.2.10: @@ -16660,7 +16752,7 @@ snapshots: - bare-buffer - react-native-b4a - tar@7.5.13: + tar@7.5.15: dependencies: '@isaacs/fs-minipass': 4.0.1 chownr: 3.0.0 @@ -16684,7 +16776,18 @@ snapshots: - bare-abort-controller - react-native-b4a - terser-webpack-plugin@5.5.0(esbuild@0.28.0)(webpack@5.106.2(esbuild@0.28.0)): + terser-webpack-plugin@5.6.0(esbuild@0.28.0)(postcss@8.5.13)(webpack@5.106.2(esbuild@0.28.0)(postcss@8.5.13)): + dependencies: + '@jridgewell/trace-mapping': 0.3.31 + jest-worker: 27.5.1 + schema-utils: 4.3.3 + terser: 5.46.2 + webpack: 5.106.2(esbuild@0.28.0)(postcss@8.5.13) + optionalDependencies: + esbuild: 0.28.0 + postcss: 8.5.13 + + terser-webpack-plugin@5.6.0(esbuild@0.28.0)(webpack@5.106.2(esbuild@0.28.0)): dependencies: '@jridgewell/trace-mapping': 0.3.31 jest-worker: 27.5.1 @@ -16983,9 +17086,9 @@ snapshots: - encoding - supports-color - verdaccio-auth-memory@13.0.0: + verdaccio-auth-memory@13.0.1: dependencies: - '@verdaccio/core': 8.0.0 + '@verdaccio/core': 8.1.0 debug: 4.4.3(supports-color@10.2.2) transitivePeerDependencies: - supports-color @@ -17047,28 +17150,28 @@ snapshots: core-util-is: 1.0.2 extsprintf: 1.3.0 - vite@7.3.2(@types/node@24.12.2)(jiti@2.6.1)(less@4.6.4)(sass@1.99.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4): + vite@7.3.2(@types/node@24.12.2)(jiti@2.7.0)(less@4.6.4)(sass@1.99.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0): dependencies: esbuild: 0.27.7 fdir: 6.5.0(picomatch@4.0.4) picomatch: 4.0.4 - postcss: 8.5.13 + postcss: 8.5.14 rollup: 4.60.2 tinyglobby: 0.2.16 optionalDependencies: '@types/node': 24.12.2 fsevents: 2.3.3 - jiti: 2.6.1 + jiti: 2.7.0 less: 4.6.4 sass: 1.99.0 terser: 5.46.2 tsx: 4.21.0 - yaml: 2.8.4 + yaml: 2.9.0 - vitest@4.1.5(@opentelemetry/api@1.9.1)(@types/node@24.12.2)(@vitest/coverage-v8@4.1.5)(jiti@2.6.1)(jsdom@29.1.1)(less@4.6.4)(sass@1.99.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4): + vitest@4.1.5(@opentelemetry/api@1.9.1)(@types/node@24.12.2)(@vitest/coverage-v8@4.1.5)(jsdom@29.1.1)(vite@7.3.2(@types/node@24.12.2)(jiti@2.7.0)(less@4.6.4)(sass@1.99.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0)): dependencies: '@vitest/expect': 4.1.5 - '@vitest/mocker': 4.1.5(vite@7.3.2(@types/node@24.12.2)(jiti@2.6.1)(less@4.6.4)(sass@1.99.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4)) + '@vitest/mocker': 4.1.5(vite@7.3.2(@types/node@24.12.2)(jiti@2.7.0)(less@4.6.4)(sass@1.99.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0)) '@vitest/pretty-format': 4.1.5 '@vitest/runner': 4.1.5 '@vitest/snapshot': 4.1.5 @@ -17085,7 +17188,7 @@ snapshots: tinyexec: 1.1.2 tinyglobby: 0.2.16 tinyrainbow: 3.1.0 - vite: 7.3.2(@types/node@24.12.2)(jiti@2.6.1)(less@4.6.4)(sass@1.99.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.4) + vite: 7.3.2(@types/node@24.12.2)(jiti@2.7.0)(less@4.6.4)(sass@1.99.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0) why-is-node-running: 2.3.0 optionalDependencies: '@opentelemetry/api': 1.9.1 @@ -17093,17 +17196,7 @@ snapshots: '@vitest/coverage-v8': 4.1.5(vitest@4.1.5) jsdom: 29.1.1 transitivePeerDependencies: - - jiti - - less - - lightningcss - msw - - sass - - sass-embedded - - stylus - - sugarss - - terser - - tsx - - yaml void-elements@2.0.1: {} @@ -17133,6 +17226,19 @@ snapshots: webidl-conversions@8.0.1: {} + webpack-dev-middleware@7.4.5(tslib@2.8.1)(webpack@5.106.2(esbuild@0.28.0)(postcss@8.5.13)): + dependencies: + colorette: 2.0.20 + memfs: 4.57.2(tslib@2.8.1) + mime-types: 3.0.2 + on-finished: 2.4.1 + range-parser: 1.2.1 + schema-utils: 4.3.3 + optionalDependencies: + webpack: 5.106.2(esbuild@0.28.0)(postcss@8.5.13) + transitivePeerDependencies: + - tslib + webpack-dev-middleware@7.4.5(tslib@2.8.1)(webpack@5.106.2(esbuild@0.28.0)): dependencies: colorette: 2.0.20 @@ -17146,7 +17252,7 @@ snapshots: transitivePeerDependencies: - tslib - webpack-dev-middleware@8.0.3(tslib@2.8.1)(webpack@5.106.2(esbuild@0.28.0)): + webpack-dev-middleware@8.0.3(tslib@2.8.1)(webpack@5.106.2(esbuild@0.28.0)(postcss@8.5.13)): dependencies: memfs: 4.57.2(tslib@2.8.1) mime-types: 3.0.2 @@ -17154,9 +17260,48 @@ snapshots: range-parser: 1.2.1 schema-utils: 4.3.3 optionalDependencies: - webpack: 5.106.2(esbuild@0.28.0) + webpack: 5.106.2(esbuild@0.28.0)(postcss@8.5.13) + transitivePeerDependencies: + - tslib + + webpack-dev-server@5.2.3(bufferutil@4.1.0)(tslib@2.8.1)(utf-8-validate@6.0.6)(webpack@5.106.2(esbuild@0.28.0)(postcss@8.5.13)): + dependencies: + '@types/bonjour': 3.5.13 + '@types/connect-history-api-fallback': 1.5.4 + '@types/express': 4.17.25 + '@types/express-serve-static-core': 4.19.8 + '@types/serve-index': 1.9.4 + '@types/serve-static': 1.15.10 + '@types/sockjs': 0.3.36 + '@types/ws': 8.18.1 + ansi-html-community: 0.0.8 + bonjour-service: 1.3.0 + chokidar: 3.6.0 + colorette: 2.0.20 + compression: 1.8.1 + connect-history-api-fallback: 2.0.0 + express: 4.22.2 + graceful-fs: 4.2.11 + http-proxy-middleware: 2.0.9(@types/express@4.17.25) + ipaddr.js: 2.4.0 + launch-editor: 2.13.2 + open: 10.2.0 + p-retry: 6.2.1 + schema-utils: 4.3.3 + selfsigned: 5.5.0 + serve-index: 1.9.2 + sockjs: 0.3.24 + spdy: 4.0.2 + webpack-dev-middleware: 7.4.5(tslib@2.8.1)(webpack@5.106.2(esbuild@0.28.0)(postcss@8.5.13)) + ws: 8.20.0(bufferutil@4.1.0)(utf-8-validate@6.0.6) + optionalDependencies: + webpack: 5.106.2(esbuild@0.28.0)(postcss@8.5.13) transitivePeerDependencies: + - bufferutil + - debug + - supports-color - tslib + - utf-8-validate webpack-dev-server@5.2.3(bufferutil@4.1.0)(tslib@2.8.1)(utf-8-validate@6.0.6)(webpack@5.106.2(esbuild@0.28.0)): dependencies: @@ -17174,7 +17319,7 @@ snapshots: colorette: 2.0.20 compression: 1.8.1 connect-history-api-fallback: 2.0.0 - express: 4.22.1 + express: 4.22.2 graceful-fs: 4.2.11 http-proxy-middleware: 2.0.9(@types/express@4.17.25) ipaddr.js: 2.4.0 @@ -17205,15 +17350,55 @@ snapshots: webpack-sources@3.4.1: {} - webpack-subresource-integrity@5.1.0(webpack@5.106.2(esbuild@0.28.0)): + webpack-subresource-integrity@5.1.0(webpack@5.106.2(esbuild@0.28.0)(postcss@8.5.13)): dependencies: typed-assert: 1.0.9 - webpack: 5.106.2(esbuild@0.28.0) + webpack: 5.106.2(esbuild@0.28.0)(postcss@8.5.13) webpack@5.106.2(esbuild@0.28.0): dependencies: '@types/eslint-scope': 3.7.7 - '@types/estree': 1.0.8 + '@types/estree': 1.0.9 + '@types/json-schema': 7.0.15 + '@webassemblyjs/ast': 1.14.1 + '@webassemblyjs/wasm-edit': 1.14.1 + '@webassemblyjs/wasm-parser': 1.14.1 + acorn: 8.16.0 + acorn-import-phases: 1.0.4(acorn@8.16.0) + browserslist: 4.28.2 + chrome-trace-event: 1.0.4 + enhanced-resolve: 5.21.3 + es-module-lexer: 2.1.0 + eslint-scope: 5.1.1 + events: 3.3.0 + glob-to-regexp: 0.4.1 + graceful-fs: 4.2.11 + loader-runner: 4.3.2 + mime-db: 1.54.0 + neo-async: 2.6.2 + schema-utils: 4.3.3 + tapable: 2.3.3 + terser-webpack-plugin: 5.6.0(esbuild@0.28.0)(webpack@5.106.2(esbuild@0.28.0)) + watchpack: 2.5.1 + webpack-sources: 3.4.1 + transitivePeerDependencies: + - '@minify-html/node' + - '@swc/core' + - '@swc/css' + - '@swc/html' + - clean-css + - cssnano + - csso + - esbuild + - html-minifier-terser + - lightningcss + - postcss + - uglify-js + + webpack@5.106.2(esbuild@0.28.0)(postcss@8.5.13): + dependencies: + '@types/eslint-scope': 3.7.7 + '@types/estree': 1.0.9 '@types/json-schema': 7.0.15 '@webassemblyjs/ast': 1.14.1 '@webassemblyjs/wasm-edit': 1.14.1 @@ -17222,7 +17407,7 @@ snapshots: acorn-import-phases: 1.0.4(acorn@8.16.0) browserslist: 4.28.2 chrome-trace-event: 1.0.4 - enhanced-resolve: 5.21.0 + enhanced-resolve: 5.21.3 es-module-lexer: 2.1.0 eslint-scope: 5.1.1 events: 3.3.0 @@ -17233,12 +17418,21 @@ snapshots: neo-async: 2.6.2 schema-utils: 4.3.3 tapable: 2.3.3 - terser-webpack-plugin: 5.5.0(esbuild@0.28.0)(webpack@5.106.2(esbuild@0.28.0)) + terser-webpack-plugin: 5.6.0(esbuild@0.28.0)(postcss@8.5.13)(webpack@5.106.2(esbuild@0.28.0)(postcss@8.5.13)) watchpack: 2.5.1 webpack-sources: 3.4.1 transitivePeerDependencies: + - '@minify-html/node' - '@swc/core' + - '@swc/css' + - '@swc/html' + - clean-css + - cssnano + - csso - esbuild + - html-minifier-terser + - lightningcss + - postcss - uglify-js websocket-driver@0.7.4: @@ -17391,10 +17585,10 @@ snapshots: yallist@5.0.0: {} - yaml@2.8.3: {} - yaml@2.8.4: {} + yaml@2.9.0: {} + yargs-parser@20.2.9: {} yargs-parser@21.1.1: {} @@ -17447,4 +17641,4 @@ snapshots: zod@4.4.2: {} - zone.js@0.16.1: {} + zone.js@0.16.2: {} diff --git a/tests/e2e/ng-snapshot/package.json b/tests/e2e/ng-snapshot/package.json index 4940441713ff..d4e1fd4a3b19 100644 --- a/tests/e2e/ng-snapshot/package.json +++ b/tests/e2e/ng-snapshot/package.json @@ -2,21 +2,21 @@ "description": "snapshot versions of Angular for e2e testing", "private": true, "dependencies": { - "@angular/animations": "github:angular/animations-builds#75b67fb20e34c1690a19a732b3106e8f7f454fc6", - "@angular/cdk": "github:angular/cdk-builds#c72d7297744f01f13435202e10764c11fb0fbb98", - "@angular/common": "github:angular/common-builds#504daec05383ce402fdae16ae19a46f8d155d256", - "@angular/compiler": "github:angular/compiler-builds#4e3014c69a825409e6a2c827ceb0f89dd8f9405a", - "@angular/compiler-cli": "github:angular/compiler-cli-builds#88464c173ccd1562c3bdfa22cfc725de2f75f255", - "@angular/core": "github:angular/core-builds#d91229659aa8ac4e3964fdf7cbfaa27a50c95f54", - "@angular/forms": "github:angular/forms-builds#6aba91146ca0274ab19a0fece82cbee84320dfb1", - "@angular/language-service": "github:angular/language-service-builds#76ebde7592c9feaa7bc872d68a1739b21feeaba9", - "@angular/localize": "github:angular/localize-builds#0de5d9668a484206dd63cf46e66808c98880e4eb", - "@angular/material": "github:angular/material-builds#26d021024aa905c5d42a4cd9b67f757a71ed7e3c", - "@angular/material-moment-adapter": "github:angular/material-moment-adapter-builds#35cb51e92f3e8990842eae2e1bded148c0c6b0af", - "@angular/platform-browser": "github:angular/platform-browser-builds#bde6d33678b0ebbecc1a913d10d78fde8b29e863", - "@angular/platform-browser-dynamic": "github:angular/platform-browser-dynamic-builds#60a4602660f1d5531ea88aaf725c2dac5b5e5ca5", - "@angular/platform-server": "github:angular/platform-server-builds#40d7868dc10c1cf638a3e2ba900f56940e61fca3", - "@angular/router": "github:angular/router-builds#300fe35fbdab61f9032627faddc9e2bbe645e1bf", - "@angular/service-worker": "github:angular/service-worker-builds#87dd428569f12a519f7e89679173a25fca2e2779" + "@angular/animations": "github:angular/animations-builds#bd3a434a99ebf09a8098d666c42e5646fb4c5711", + "@angular/cdk": "github:angular/cdk-builds#06248e11a309a454b9ac30f6e18e4e12c96f25af", + "@angular/common": "github:angular/common-builds#b7c6a8e28891dfa7ebf9e90c4b9019d913fe2842", + "@angular/compiler": "github:angular/compiler-builds#6fe948250ed116feefde4e98726df86f0c12dc46", + "@angular/compiler-cli": "github:angular/compiler-cli-builds#de167999390564fa242f07272d9cca6e366a66ce", + "@angular/core": "github:angular/core-builds#e53fa344a5f670d06ec7f3eb1c35401a455e8841", + "@angular/forms": "github:angular/forms-builds#490e7e730b910d5e901bb55dd03e1c34fa7c90c9", + "@angular/language-service": "github:angular/language-service-builds#0b75c030531ab1dad9629f02ccbfabf24247cd2d", + "@angular/localize": "github:angular/localize-builds#5355950bc589ff115be5a11b9408fafea5147ea9", + "@angular/material": "github:angular/material-builds#942bd4bf832c27e0aa4435b55750a77555af7bc9", + "@angular/material-moment-adapter": "github:angular/material-moment-adapter-builds#6d5fa3504b4685cb443ff1ea12bf6294f876da05", + "@angular/platform-browser": "github:angular/platform-browser-builds#71a1247ccaddfe722f3450dde189834ab842e895", + "@angular/platform-browser-dynamic": "github:angular/platform-browser-dynamic-builds#2880d0153aa6bdd6a6398b0ec7bf0641a12aba1c", + "@angular/platform-server": "github:angular/platform-server-builds#48726fc18cc19ce910db6d176f4f92ddffff1ce4", + "@angular/router": "github:angular/router-builds#33d10905e36758a671d68bb1828cba4493f7bf51", + "@angular/service-worker": "github:angular/service-worker-builds#011f7afb9f86ba189a398650783dd93e716e85fe" } } diff --git a/tests/e2e/tests/build/chunk-optimizer-env.ts b/tests/e2e/tests/build/chunk-optimizer-env.ts index a7814ee7ac5c..5453b2e042d2 100644 --- a/tests/e2e/tests/build/chunk-optimizer-env.ts +++ b/tests/e2e/tests/build/chunk-optimizer-env.ts @@ -23,16 +23,12 @@ export default async function () { ...process.env, NG_BUILD_OPTIMIZE_CHUNKS: 'true', }); - const files1Opt = await readdir('dist/test-project/browser'); - const jsFiles1Opt = files1Opt.filter((f) => f.endsWith('.js')); // Build with forced off await execWithEnv('ng', ['build', '--output-hashing=none'], { ...process.env, NG_BUILD_OPTIMIZE_CHUNKS: 'false', }); - const files1Unopt = await readdir('dist/test-project/browser'); - const jsFiles1Unopt = files1Unopt.filter((f) => f.endsWith('.js')); // We just verify it runs without error. // With 1 chunk it might not be able to optimize further, so counts might be equal. From c19ffa657196fd8834a321d53306ebfe502bce03 Mon Sep 17 00:00:00 2001 From: Alan Agius <17563226+alan-agius4@users.noreply.github.com> Date: Wed, 13 May 2026 09:07:23 +0000 Subject: [PATCH 08/34] docs: update ng.ts render function documentation to reflect removal of rendering implementation details (cherry picked from commit 7e980ad4c9a40498d68daf3f94dd38dbea4ad834) --- packages/angular/ssr/src/utils/ng.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/packages/angular/ssr/src/utils/ng.ts b/packages/angular/ssr/src/utils/ng.ts index 2c4ada0b8c6d..55d054bd2387 100644 --- a/packages/angular/ssr/src/utils/ng.ts +++ b/packages/angular/ssr/src/utils/ng.ts @@ -40,8 +40,7 @@ export type AngularBootstrap = /** * Renders an Angular application or module to an HTML string. * - * This function determines whether the provided `bootstrap` value is an Angular module - * or a bootstrap function and invokes the appropriate rendering method (`renderModule` or `renderApplication`). + * This function supports both Angular modules and bootstrap functions for application initialization. * * @param html - The initial HTML document content. * @param bootstrap - An Angular module type or a function returning a promise that resolves to an `ApplicationRef`. From a709b4222443193b4afb42d75bc9f725c618d5cf Mon Sep 17 00:00:00 2001 From: Angular Robot Date: Wed, 13 May 2026 16:38:09 +0000 Subject: [PATCH 09/34] build: update cross-repo angular dependencies See associated pull request for more information. --- MODULE.bazel | 4 ++-- package.json | 2 +- pnpm-lock.yaml | 42 ++++++++++++++++++++++++++++++------------ 3 files changed, 33 insertions(+), 15 deletions(-) diff --git a/MODULE.bazel b/MODULE.bazel index a871d4677b5c..b9c39177e7d6 100644 --- a/MODULE.bazel +++ b/MODULE.bazel @@ -19,14 +19,14 @@ bazel_dep(name = "aspect_rules_jasmine", version = "2.0.4") bazel_dep(name = "rules_angular") git_override( module_name = "rules_angular", - commit = "19914e2fb677d50b16360dcea8740a1b0dd46172", + commit = "045f98407a299ffaeeeafa275d8490d4507513f8", remote = "https://github.com/angular/rules_angular.git", ) bazel_dep(name = "devinfra") git_override( module_name = "devinfra", - commit = "f91b383e3128872b21f709d2ae7543344c65526d", + commit = "eaa9aaa98de612484109350f710fdb02e92c84ae", remote = "https://github.com/angular/dev-infra.git", ) diff --git a/package.json b/package.json index d47369392ed9..52996a409224 100644 --- a/package.json +++ b/package.json @@ -54,7 +54,7 @@ "@angular/forms": "22.0.0-next.12", "@angular/localize": "22.0.0-next.12", "@angular/material": "22.0.0-next.8", - "@angular/ng-dev": "https://github.com/angular/dev-infra-private-ng-dev-builds.git#f084e2e88e71cdca8098489e6104ffcdbd9a8eda", + "@angular/ng-dev": "https://github.com/angular/dev-infra-private-ng-dev-builds.git#2c36222db3f44751284cc93b3806dbe1baee583a", "@angular/platform-browser": "22.0.0-next.12", "@angular/platform-server": "22.0.0-next.12", "@angular/router": "22.0.0-next.12", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 2c934f677888..02ddcb092096 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -50,8 +50,8 @@ importers: specifier: 22.0.0-next.8 version: 22.0.0-next.8(93ce75c341587667f5d7d40f3eefe13f) '@angular/ng-dev': - specifier: https://github.com/angular/dev-infra-private-ng-dev-builds.git#f084e2e88e71cdca8098489e6104ffcdbd9a8eda - version: https://codeload.github.com/angular/dev-infra-private-ng-dev-builds/tar.gz/f084e2e88e71cdca8098489e6104ffcdbd9a8eda(@modelcontextprotocol/sdk@1.29.0(zod@4.4.2)) + specifier: https://github.com/angular/dev-infra-private-ng-dev-builds.git#2c36222db3f44751284cc93b3806dbe1baee583a + version: https://codeload.github.com/angular/dev-infra-private-ng-dev-builds/tar.gz/2c36222db3f44751284cc93b3806dbe1baee583a(@modelcontextprotocol/sdk@1.29.0(zod@4.4.2)) '@angular/platform-browser': specifier: 22.0.0-next.12 version: 22.0.0-next.12(@angular/animations@22.0.0-next.12(@angular/core@22.0.0-next.12(@angular/compiler@22.0.0-next.12)(rxjs@7.8.2)(zone.js@0.16.2)))(@angular/common@22.0.0-next.12(@angular/core@22.0.0-next.12(@angular/compiler@22.0.0-next.12)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.0.0-next.12(@angular/compiler@22.0.0-next.12)(rxjs@7.8.2)(zone.js@0.16.2)) @@ -333,7 +333,7 @@ importers: version: 7.8.2 vitest: specifier: 4.1.5 - version: 4.1.5(@opentelemetry/api@1.9.1)(@types/node@24.12.2)(@vitest/coverage-v8@4.1.5)(jsdom@29.1.1)(vite@7.3.2(@types/node@24.12.2)(jiti@2.7.0)(less@4.6.4)(sass@1.99.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0)) + version: 4.1.5(@opentelemetry/api@1.9.1)(@types/node@24.12.2)(@vitest/coverage-v8@4.1.5)(jiti@2.7.0)(jsdom@29.1.1)(less@4.6.4)(sass@1.99.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0) packages/angular/build: dependencies: @@ -442,7 +442,7 @@ importers: version: 7.8.2 vitest: specifier: 4.1.5 - version: 4.1.5(@opentelemetry/api@1.9.1)(@types/node@24.12.2)(@vitest/coverage-v8@4.1.5)(jsdom@29.1.1)(vite@7.3.2(@types/node@24.12.2)(jiti@2.7.0)(less@4.6.4)(sass@1.99.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0)) + version: 4.1.5(@opentelemetry/api@1.9.1)(@types/node@24.12.2)(@vitest/coverage-v8@4.1.5)(jiti@2.7.0)(jsdom@29.1.1)(less@4.6.4)(sass@1.99.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0) optionalDependencies: lmdb: specifier: 3.5.4 @@ -1011,9 +1011,9 @@ packages: '@angular/platform-browser': ^22.0.0-0 || ^22.1.0-0 || ^22.2.0-0 || ^22.3.0-0 || ^23.0.0-0 rxjs: ^6.5.3 || ^7.4.0 - '@angular/ng-dev@https://codeload.github.com/angular/dev-infra-private-ng-dev-builds/tar.gz/f084e2e88e71cdca8098489e6104ffcdbd9a8eda': - resolution: {tarball: https://codeload.github.com/angular/dev-infra-private-ng-dev-builds/tar.gz/f084e2e88e71cdca8098489e6104ffcdbd9a8eda} - version: 0.0.0-ba993c8a28db88485a5474bf9cc387dffd3eabd9 + '@angular/ng-dev@https://codeload.github.com/angular/dev-infra-private-ng-dev-builds/tar.gz/2c36222db3f44751284cc93b3806dbe1baee583a': + resolution: {tarball: https://codeload.github.com/angular/dev-infra-private-ng-dev-builds/tar.gz/2c36222db3f44751284cc93b3806dbe1baee583a} + version: 0.0.0-6ef1cf3158022456bf1f7031de79b7e44fe479b2 hasBin: true '@angular/platform-browser@22.0.0-next.12': @@ -8287,7 +8287,6 @@ packages: '@vitest/ui': 4.1.5 happy-dom: '*' jsdom: '*' - vite: ^6.0.0 || ^7.0.0 || ^8.0.0 peerDependenciesMeta: '@edge-runtime/vm': optional: true @@ -8455,6 +8454,11 @@ packages: engines: {node: ^20.17.0 || >=22.9.0} hasBin: true + which@7.0.0: + resolution: {integrity: sha512-RancgH2dmbLdHl6LRhEqvklWMgl/Hdnun0Y90KhBOLkMefg8Qa7/Zel8Sm+8HEcP6DEjzsWzpkuBQEZok58isA==} + engines: {node: ^22.22.2 || ^24.15.0 || >=26.0.0} + hasBin: true + why-is-node-running@2.3.0: resolution: {integrity: sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==} engines: {node: '>=8'} @@ -8799,7 +8803,7 @@ snapshots: rxjs: 7.8.2 tslib: 2.8.1 - '@angular/ng-dev@https://codeload.github.com/angular/dev-infra-private-ng-dev-builds/tar.gz/f084e2e88e71cdca8098489e6104ffcdbd9a8eda(@modelcontextprotocol/sdk@1.29.0(zod@4.4.2))': + '@angular/ng-dev@https://codeload.github.com/angular/dev-infra-private-ng-dev-builds/tar.gz/2c36222db3f44751284cc93b3806dbe1baee583a(@modelcontextprotocol/sdk@1.29.0(zod@4.4.2))': dependencies: '@actions/core': 3.0.1 '@conventional-changelog/git-client': 2.7.0(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.4.0) @@ -8851,7 +8855,7 @@ snapshots: typed-graphqlify: 3.1.6 typescript: 6.0.3 utf-8-validate: 6.0.6 - which: 6.0.1 + which: 7.0.0 yaml: 2.8.4 yargs: 18.0.0 zod: 4.4.2 @@ -12038,7 +12042,7 @@ snapshots: obug: 2.1.1 std-env: 4.1.0 tinyrainbow: 3.1.0 - vitest: 4.1.5(@opentelemetry/api@1.9.1)(@types/node@24.12.2)(@vitest/coverage-v8@4.1.5)(jsdom@29.1.1)(vite@7.3.2(@types/node@24.12.2)(jiti@2.7.0)(less@4.6.4)(sass@1.99.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0)) + vitest: 4.1.5(@opentelemetry/api@1.9.1)(@types/node@24.12.2)(@vitest/coverage-v8@4.1.5)(jiti@2.7.0)(jsdom@29.1.1)(less@4.6.4)(sass@1.99.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0) '@vitest/expect@4.1.5': dependencies: @@ -17168,7 +17172,7 @@ snapshots: tsx: 4.21.0 yaml: 2.9.0 - vitest@4.1.5(@opentelemetry/api@1.9.1)(@types/node@24.12.2)(@vitest/coverage-v8@4.1.5)(jsdom@29.1.1)(vite@7.3.2(@types/node@24.12.2)(jiti@2.7.0)(less@4.6.4)(sass@1.99.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0)): + vitest@4.1.5(@opentelemetry/api@1.9.1)(@types/node@24.12.2)(@vitest/coverage-v8@4.1.5)(jiti@2.7.0)(jsdom@29.1.1)(less@4.6.4)(sass@1.99.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0): dependencies: '@vitest/expect': 4.1.5 '@vitest/mocker': 4.1.5(vite@7.3.2(@types/node@24.12.2)(jiti@2.7.0)(less@4.6.4)(sass@1.99.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0)) @@ -17196,7 +17200,17 @@ snapshots: '@vitest/coverage-v8': 4.1.5(vitest@4.1.5) jsdom: 29.1.1 transitivePeerDependencies: + - jiti + - less + - lightningcss - msw + - sass + - sass-embedded + - stylus + - sugarss + - terser + - tsx + - yaml void-elements@2.0.1: {} @@ -17511,6 +17525,10 @@ snapshots: dependencies: isexe: 4.0.0 + which@7.0.0: + dependencies: + isexe: 4.0.0 + why-is-node-running@2.3.0: dependencies: siginfo: 2.0.0 From d038c615e67a0c98d4a13f4a4d1a9f315fe27a13 Mon Sep 17 00:00:00 2001 From: Alan Agius <17563226+alan-agius4@users.noreply.github.com> Date: Wed, 13 May 2026 19:05:13 +0000 Subject: [PATCH 10/34] release: cut the v22.0.0-rc.0 release --- CHANGELOG.md | 77 ++++++++++++++++++++++++++++++++++++++++++++++++++++ package.json | 2 +- 2 files changed, 78 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 45ace1ba6263..8b0686ec8222 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,80 @@ + + +# 22.0.0-rc.0 (2026-05-13) + +## Deprecations + +### @angular-devkit/build-angular + +- Webpack builders in build-angular are deprecated. Use @angular/build builders instead. + +### @angular-devkit/build-webpack + +- Webpack builders in build-webpack are deprecated. Use @angular/build builders instead. + +### @angular/ssr + +- CommonEngine APIs are deprecated in favor of AngularNodeAppEngine or AngularAppEngine. + +### @ngtools/webpack + +- @ngtools/webpack loader and plugin are deprecated. Use @angular/build instead. + +### @schematics/angular + +| Commit | Type | Description | +| --------------------------------------------------------------------------------------------------- | ---- | --------------------------------------------------------------------- | +| [b2f7a038b](https://github.com/angular/angular-cli/commit/b2f7a038b4a321e4e1b0b340cd09425f948c77ad) | feat | conditionally install istanbul coverage provider for Vitest migration | +| [d227e6985](https://github.com/angular/angular-cli/commit/d227e6985ef5540e0eea2571577ee2b9be0d3c64) | feat | migrate fake async to Vitest fake timers | +| [d2aa9ede5](https://github.com/angular/angular-cli/commit/d2aa9ede55a3e16b61ce6ae60dba6c8ea8954358) | feat | migrate fakeAsync's flush behavior when used in beforeEach | +| [c9f408153](https://github.com/angular/angular-cli/commit/c9f4081533f6f114846b88a152a9d5dc7363d680) | feat | set up fake timers in beforeEach instead of beforeAll | +| [8d0805dd1](https://github.com/angular/angular-cli/commit/8d0805dd1750cb16af620811dc01b40e46ad030e) | feat | update TSConfig globals during karma to vitest migration | +| [aed407db8](https://github.com/angular/angular-cli/commit/aed407db8be6bc7591fb82f10c79586cbd072a8a) | fix | defer karma config deletion in Karma to Vitest migration | +| [7fb59eaa6](https://github.com/angular/angular-cli/commit/7fb59eaa65a8d7e880b6f44d715b2aeaff9301ca) | fix | use service decorator in ng generate | + +### @angular/cli + +| Commit | Type | Description | +| --------------------------------------------------------------------------------------------------- | ---- | ------------------------------------------------------------------------- | +| [58c0978f6](https://github.com/angular/angular-cli/commit/58c0978f658ee5fa7232abd8e2eb7f146e4eb6bb) | feat | add support for Node.js 26.0.0 | +| [ff88f491d](https://github.com/angular/angular-cli/commit/ff88f491da38493d6e06f3e4ac080d171c630ccd) | fix | restrict MCP workspace access to allowed client roots during resolution | +| [a5e1e48db](https://github.com/angular/angular-cli/commit/a5e1e48db759e9ffcaa89f04504f5f93a1afdda4) | fix | update odd-numbered Node.js version warning condition for future releases | + +### @angular-devkit/build-angular + +| Commit | Type | Description | +| --------------------------------------------------------------------------------------------------- | -------- | -------------------------- | +| [b7940dbcb](https://github.com/angular/angular-cli/commit/b7940dbcb40291be4de5b31e8a8001165459a7d4) | refactor | deprecate Webpack builders | + +### @angular-devkit/build-webpack + +| Commit | Type | Description | +| --------------------------------------------------------------------------------------------------- | -------- | ------------------------------------------------- | +| [3d5daa45e](https://github.com/angular/angular-cli/commit/3d5daa45e3ade025c1bc0df35d2766563ccf7c03) | refactor | deprecate webpack and webpack-dev-server builders | + +### @angular/build + +| Commit | Type | Description | +| --------------------------------------------------------------------------------------------------- | ---- | --------------------------------------------------------------- | +| [58c7c7a9d](https://github.com/angular/angular-cli/commit/58c7c7a9d80fc6af5cf8b82a6d87f1d3cf3808c6) | feat | subresource integrity validation for dynamically loaded modules | +| [edfa782d5](https://github.com/angular/angular-cli/commit/edfa782d52fd971aebead8b96b6ca470a3f5123e) | fix | use dynamic TestComponentRenderer for Vitest | + +### @angular/ssr + +| Commit | Type | Description | +| --------------------------------------------------------------------------------------------------- | -------- | ----------------------------------------------------------------- | +| [ea95e1a87](https://github.com/angular/angular-cli/commit/ea95e1a87ebfb5b452a6b6ffa7838ca1fe094100) | fix | remove stateful flag from URL_PARAMETER_REGEXP | +| [f85343925](https://github.com/angular/angular-cli/commit/f8534392552f4896ee9449939cdc705010331e3d) | fix | support all X-Forwarded-\* headers when trustProxyHeaders is true | +| [50b16a65b](https://github.com/angular/angular-cli/commit/50b16a65b1be1f9c2ec11d578240a8884518d517) | refactor | deprecate CommonEngine APIs | + +### @ngtools/webpack + +| Commit | Type | Description | +| --------------------------------------------------------------------------------------------------- | -------- | -------------------------------------------- | +| [547ca515b](https://github.com/angular/angular-cli/commit/547ca515b707c283489a3f088d86fc84807d830d) | refactor | deprecate @ngtools/webpack loader and plugin | + + + # 21.2.10 (2026-05-06) diff --git a/package.json b/package.json index 52996a409224..28b6ea3c2a84 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@angular/devkit-repo", - "version": "22.0.0-next.7", + "version": "22.0.0-rc.0", "private": true, "description": "Software Development Kit for Angular", "keywords": [ From 99ed7a7c5cadcb37974445dca31b97f1f36a74b0 Mon Sep 17 00:00:00 2001 From: Alan Agius <17563226+alan-agius4@users.noreply.github.com> Date: Wed, 13 May 2026 19:18:02 +0000 Subject: [PATCH 11/34] build: add package metadata to `@angular/ssr` package.json Unlike ng_package doesn't add these fields. (cherry picked from commit f0a64fe27497b898e664a8edfc5f01ba4dff552e) --- packages/angular/ssr/package.json | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/packages/angular/ssr/package.json b/packages/angular/ssr/package.json index 5be4d2ba97a8..3e39e13e0ef7 100644 --- a/packages/angular/ssr/package.json +++ b/packages/angular/ssr/package.json @@ -8,6 +8,16 @@ "ssr", "universal" ], + "repository": { + "type": "git", + "url": "git+https://github.com/angular/angular-cli.git" + }, + "author": "Angular Authors", + "license": "MIT", + "bugs": { + "url": "https://github.com/angular/angular-cli/issues" + }, + "homepage": "https://github.com/angular/angular-cli", "ng-add": { "save": "dependencies" }, From 93d3527985f8aa1950f62ab42a88c0a74ae0b051 Mon Sep 17 00:00:00 2001 From: Charles Lyding <19598772+clydin@users.noreply.github.com> Date: Thu, 14 May 2026 10:16:35 -0400 Subject: [PATCH 12/34] fix(@angular/build): ignore virtual esbuild paths with (disabled): Virtual files generated by esbuild for disabled browser fields leak into the watch list, causing spurious rebuilds in watch mode. Previously, only paths where the suffix was a Node.js builtin module were ignored. Now, any path containing `(disabled):` is ignored as it represents a virtual file that doesn't exist on disk. Fixes #33160 (cherry picked from commit b06849a939948c92c139c218f34ea68d0ba28112) --- .../build/src/tools/esbuild/bundler-context.ts | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/packages/angular/build/src/tools/esbuild/bundler-context.ts b/packages/angular/build/src/tools/esbuild/bundler-context.ts index 308e3509acdb..968815a52fd5 100644 --- a/packages/angular/build/src/tools/esbuild/bundler-context.ts +++ b/packages/angular/build/src/tools/esbuild/bundler-context.ts @@ -13,12 +13,10 @@ import { BuildResult, Message, Metafile, - OutputFile, build, context, } from 'esbuild'; import assert from 'node:assert'; -import { builtinModules } from 'node:module'; import { basename, extname, join, relative } from 'node:path'; import { SERVER_GENERATED_EXTERNALS } from '../../utils/server-rendering/manifest'; import { @@ -472,12 +470,9 @@ function isInternalBundlerFile(file: string) { return true; } - const DISABLED_BUILTIN = '(disabled):'; - - // Disabled node builtins such as "/some/path/(disabled):fs" - const disabledIndex = file.indexOf(DISABLED_BUILTIN); - if (disabledIndex >= 0) { - return builtinModules.includes(file.slice(disabledIndex + DISABLED_BUILTIN.length)); + // Any (disabled): path is a virtual esbuild entry that doesn't exist on disk + if (file.includes('(disabled):')) { + return true; } return false; From 3f4c79b3c5c9d8f4eb9ab319e0116ea47237f56b Mon Sep 17 00:00:00 2001 From: Charles Lyding <19598772+clydin@users.noreply.github.com> Date: Thu, 14 May 2026 09:27:11 -0400 Subject: [PATCH 13/34] docs: update JSDoc return tag to `@return` and fix description in registry.ts (cherry picked from commit c150c085908ab139dd1b22b236b1be64fc5907a5) --- packages/angular_devkit/core/src/json/schema/registry.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/angular_devkit/core/src/json/schema/registry.ts b/packages/angular_devkit/core/src/json/schema/registry.ts index d433a41bd460..77aeab6646a1 100644 --- a/packages/angular_devkit/core/src/json/schema/registry.ts +++ b/packages/angular_devkit/core/src/json/schema/registry.ts @@ -224,7 +224,7 @@ export class CoreSchemaRegistry implements SchemaRegistry { * See: https://json-schema.org/draft/2019-09/json-schema-core.html#rfc.appendix.B.2 * * @param schema The schema or URI to flatten. - * @returns An Observable of the flattened schema object. + * @return A Promise that resolves to the flattened schema object. * @private since 11.2 without replacement. */ async ɵflatten(schema: JsonObject): Promise { From a7ac8e5f0a268994a8fcfebbf56f76e994b6207d Mon Sep 17 00:00:00 2001 From: Charles Lyding <19598772+clydin@users.noreply.github.com> Date: Thu, 14 May 2026 19:55:26 -0400 Subject: [PATCH 14/34] fix(@schematics/angular): support spy call arguments migration in refactor-jasmine-vitest The `refactor-jasmine-vitest` schematic fails to remove `.args` when migrating `spy.calls.all()[i].args`, resulting in uncompilable code in Vitest. Now, a specialized transformer detects `spy.calls.all()[i].args` and transforms it to `vi.mocked(spy).mock.calls[i]`, removing the unnecessary `.args` property access. Fixes #33112 (cherry picked from commit 5dd4daf133521cd65577633e5e8ed53b72f61f7d) --- .../transformers/jasmine-spy.ts | 52 +++++++++++++++++++ .../transformers/jasmine-spy_spec.ts | 5 ++ 2 files changed, 57 insertions(+) diff --git a/packages/schematics/angular/refactor/jasmine-vitest/transformers/jasmine-spy.ts b/packages/schematics/angular/refactor/jasmine-vitest/transformers/jasmine-spy.ts index 543ba5a2daee..c840c374976d 100644 --- a/packages/schematics/angular/refactor/jasmine-vitest/transformers/jasmine-spy.ts +++ b/packages/schematics/angular/refactor/jasmine-vitest/transformers/jasmine-spy.ts @@ -505,6 +505,53 @@ function transformThisFor( ); } +function transformAllCallsArgs( + node: ts.Node, + { sourceFile, reporter, pendingVitestValueImports }: RefactorContext, +): ts.Node { + if ( + !ts.isPropertyAccessExpression(node) || + !ts.isIdentifier(node.name) || + node.name.text !== 'args' + ) { + return node; + } + + const elementAccess = node.expression; + if (!ts.isElementAccessExpression(elementAccess)) { + return node; + } + + const allCall = elementAccess.expression; + if (!ts.isCallExpression(allCall) || !ts.isPropertyAccessExpression(allCall.expression)) { + return node; + } + + const allPae = allCall.expression; + if (!ts.isIdentifier(allPae.name) || allPae.name.text !== 'all') { + return node; + } + + if (!ts.isPropertyAccessExpression(allPae.expression)) { + return node; + } + + const spyIdentifier = getSpyIdentifierFromCalls(allPae.expression); + if (!spyIdentifier) { + return node; + } + + reporter.reportTransformation( + sourceFile, + node, + 'Transformed `spy.calls.all()[i].args` to `vi.mocked(spy).mock.calls[i]`.', + ); + const mockProperty = createMockedSpyMockProperty(spyIdentifier, pendingVitestValueImports); + const callsProperty = createPropertyAccess(mockProperty, 'calls'); + + return ts.factory.createElementAccessExpression(callsProperty, elementAccess.argumentExpression); +} + export function transformSpyCallInspection(node: ts.Node, refactorCtx: RefactorContext): ts.Node { const mostRecentArgsTransformed = transformMostRecentArgs(node, refactorCtx); if (mostRecentArgsTransformed !== node) { @@ -516,6 +563,11 @@ export function transformSpyCallInspection(node: ts.Node, refactorCtx: RefactorC return thisForTransformed; } + const allCallsArgsTransformed = transformAllCallsArgs(node, refactorCtx); + if (allCallsArgsTransformed !== node) { + return allCallsArgsTransformed; + } + if (!ts.isCallExpression(node) || !ts.isPropertyAccessExpression(node.expression)) { return node; } diff --git a/packages/schematics/angular/refactor/jasmine-vitest/transformers/jasmine-spy_spec.ts b/packages/schematics/angular/refactor/jasmine-vitest/transformers/jasmine-spy_spec.ts index 85a0068240c7..97881049c1d5 100644 --- a/packages/schematics/angular/refactor/jasmine-vitest/transformers/jasmine-spy_spec.ts +++ b/packages/schematics/angular/refactor/jasmine-vitest/transformers/jasmine-spy_spec.ts @@ -270,6 +270,11 @@ describe('transformSpyCallInspection', () => { input: `const allCalls = mySpy.calls.all();`, expected: `const allCalls = vi.mocked(mySpy).mock.calls;`, }, + { + description: 'should transform spy.calls.all()[i].args', + input: `expect(mySpy.calls.all()[2].args[0]).toBeInstanceOf(RemoveShareUrlAction);`, + expected: `expect(vi.mocked(mySpy).mock.calls[2][0]).toBeInstanceOf(RemoveShareUrlAction);`, + }, { description: 'should transform spy.calls.mostRecent().args', input: `const recentArgs = mySpy.calls.mostRecent().args;`, From 7920e49dcec50325e237be45a19b6ef6bfefa7da Mon Sep 17 00:00:00 2001 From: Angular Robot Date: Wed, 13 May 2026 19:27:01 +0000 Subject: [PATCH 15/34] build: update pnpm to v10.33.4 See associated pull request for more information. --- MODULE.bazel | 4 ++-- package.json | 4 ++-- pnpm-lock.yaml | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/MODULE.bazel b/MODULE.bazel index b9c39177e7d6..8383353ed22e 100644 --- a/MODULE.bazel +++ b/MODULE.bazel @@ -131,8 +131,8 @@ use_repo( pnpm = use_extension("@aspect_rules_js//npm:extensions.bzl", "pnpm") pnpm.pnpm( name = "pnpm", - pnpm_version = "10.33.2", - pnpm_version_integrity = "sha512-qQ+vb+6rca1sblf5Tg/hoS9dzCLNdU20CulZPraj4LaxLjVAIYuzeuCDQEsfLObbKkEh6XmCm0r/lLmfSdoc+A==", + pnpm_version = "10.33.4", + pnpm_version_integrity = "sha512-HGezs1my1AgRm6HtKJ80uPw8aHNBK+xv0mT73IJInlEPy+y5zp0i2ufzt2Jp2EQQRgFL3KU7mXnNelYa1jG4AA==", ) use_repo(pnpm, "pnpm") diff --git a/package.json b/package.json index 28b6ea3c2a84..5e8f8cce8570 100644 --- a/package.json +++ b/package.json @@ -28,12 +28,12 @@ "type": "git", "url": "git+https://github.com/angular/angular-cli.git" }, - "packageManager": "pnpm@10.33.2", + "packageManager": "pnpm@10.33.4", "engines": { "node": "^22.22.0 || ^24.13.1 || >=26.0.0", "npm": "Please use pnpm instead of NPM to install dependencies", "yarn": "Please use pnpm instead of Yarn to install dependencies", - "pnpm": "10.33.2" + "pnpm": "10.33.4" }, "author": "Angular Authors", "license": "MIT", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 02ddcb092096..68d528dd27c8 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1012,7 +1012,7 @@ packages: rxjs: ^6.5.3 || ^7.4.0 '@angular/ng-dev@https://codeload.github.com/angular/dev-infra-private-ng-dev-builds/tar.gz/2c36222db3f44751284cc93b3806dbe1baee583a': - resolution: {tarball: https://codeload.github.com/angular/dev-infra-private-ng-dev-builds/tar.gz/2c36222db3f44751284cc93b3806dbe1baee583a} + resolution: {gitHosted: true, tarball: https://codeload.github.com/angular/dev-infra-private-ng-dev-builds/tar.gz/2c36222db3f44751284cc93b3806dbe1baee583a} version: 0.0.0-6ef1cf3158022456bf1f7031de79b7e44fe479b2 hasBin: true From 1a8d6cb7a1d46f5b24f602702200fde036b36668 Mon Sep 17 00:00:00 2001 From: Angular Robot Date: Wed, 13 May 2026 17:34:42 +0000 Subject: [PATCH 16/34] build: update dependency bazel to v8.7.0 See associated pull request for more information. --- .bazelversion | 2 +- MODULE.bazel.lock | 12 ++++++------ 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/.bazelversion b/.bazelversion index acd405b1d62e..df5119ec64e6 100644 --- a/.bazelversion +++ b/.bazelversion @@ -1 +1 @@ -8.6.0 +8.7.0 diff --git a/MODULE.bazel.lock b/MODULE.bazel.lock index 2d94cce72e38..f86336fd1c17 100644 --- a/MODULE.bazel.lock +++ b/MODULE.bazel.lock @@ -219,7 +219,7 @@ "moduleExtensions": { "@@aspect_rules_esbuild+//esbuild:extensions.bzl%esbuild": { "general": { - "bzlTransitiveDigest": "MQJLDxT19qO8UDYhAPbY8zMo2QMI4yt9q7XhDFjLO7s=", + "bzlTransitiveDigest": "KFD6po3VH3bzbbFpfJYeoHrmWxJCThGGGTCGM9Url10=", "usagesDigest": "6We6zwGoawD9YXqMI0KPaxEKJTnamXBsuOekhFS2D40=", "recordedFileInputs": {}, "recordedDirentsInputs": {}, @@ -434,7 +434,7 @@ }, "@@aspect_rules_ts+//ts:extensions.bzl%ext": { "general": { - "bzlTransitiveDigest": "cqZ07zAB92ofKybw48WmPNKyNQHaGZ7YVkj1SNs+f7c=", + "bzlTransitiveDigest": "oXZdaO5AFNj463wHR4NRAWU9XCc9wkl3rcZxqQoNWHQ=", "usagesDigest": "QQqokxpCVnBJntX7dhxnf/c13LeWUQxDTUnILYCp4Jc=", "recordedFileInputs": {}, "recordedDirentsInputs": {}, @@ -532,7 +532,7 @@ }, "@@pybind11_bazel+//:python_configure.bzl%extension": { "general": { - "bzlTransitiveDigest": "D2/qWHU6yQFwRG7Bb+caqrYMha5avsASao2vERrxK24=", + "bzlTransitiveDigest": "VhEtmxw1yzb9rBZVsKTdti7p+nDM/Fv1p9TmKdO45+Q=", "usagesDigest": "fycyB39YnXIJkfWCIXLUKJMZzANcuLy9ZE73hRucjFk=", "recordedFileInputs": { "@@pybind11_bazel+//MODULE.bazel": "88af1c246226d87e65be78ed49ecd1e6f5e98648558c14ce99176da041dc378e" @@ -804,7 +804,7 @@ }, "@@rules_fuzzing+//fuzzing/private:extensions.bzl%non_module_dependencies": { "general": { - "bzlTransitiveDigest": "4LouzhF/yT117s7peGnNs9ROomiJXC6Zl5R0oI21jho=", + "bzlTransitiveDigest": "CYUiFDCnL2VGx3uotIu/VuGabgObnZra2zzRUJCX0sU=", "usagesDigest": "wy6ISK6UOcBEjj/mvJ/S3WeXoO67X+1llb9yPyFtPgc=", "recordedFileInputs": {}, "recordedDirentsInputs": {}, @@ -887,7 +887,7 @@ }, "@@rules_kotlin+//src/main/starlark/core/repositories:bzlmod_setup.bzl%rules_kotlin_extensions": { "general": { - "bzlTransitiveDigest": "nvW/NrBXlAmiQw99EMGKkLaD2KbNp2mQDlxdfpr+0Ls=", + "bzlTransitiveDigest": "03Qju4tW0vE+0RBuZGuV2A4Hx6AiSkdNahYvworx2aM=", "usagesDigest": "QI2z8ZUR+mqtbwsf2fLqYdJAkPOHdOV+tF2yVAUgRzw=", "recordedFileInputs": {}, "recordedDirentsInputs": {}, @@ -2603,7 +2603,7 @@ }, "@@rules_python+//python/extensions:pip.bzl%pip": { "general": { - "bzlTransitiveDigest": "gnOBzUu2hbOMXwy32CnPKpNrOsOEirGIas2EVtC8diM=", + "bzlTransitiveDigest": "1CieYf7PBGYmx4QxddIeJFyAiJ2OB1ah39h4F4rtjxo=", "usagesDigest": "AK1R124YPWwAs8z1CQYyjYuci8RO5Ofot+EP5ZCNQDc=", "recordedFileInputs": { "@@protobuf+//python/requirements.txt": "983be60d3cec4b319dcab6d48aeb3f5b2f7c3350f26b3a9e97486c37967c73c5", From deb2993c2923bc07ff18776cf731aa186f93d061 Mon Sep 17 00:00:00 2001 From: Angular Robot Date: Fri, 15 May 2026 12:02:53 +0000 Subject: [PATCH 17/34] build: update github/codeql-action action to v4.35.5 See associated pull request for more information. --- .github/workflows/codeql.yml | 4 ++-- .github/workflows/scorecard.yml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml index 5280d3d8ba7f..1793021115cd 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@95e58e9a2cdfd71adc6e0353d5c52f41a045d225 # v4.35.2 + uses: github/codeql-action/init@9e0d7b8d25671d64c341c19c0152d693099fb5ba # v4.35.5 with: languages: javascript-typescript build-mode: none config-file: .github/codeql/config.yml - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@95e58e9a2cdfd71adc6e0353d5c52f41a045d225 # v4.35.2 + uses: github/codeql-action/analyze@9e0d7b8d25671d64c341c19c0152d693099fb5ba # v4.35.5 with: category: '/language:javascript-typescript' diff --git a/.github/workflows/scorecard.yml b/.github/workflows/scorecard.yml index 68249d536041..38fbb28f8d3e 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@95e58e9a2cdfd71adc6e0353d5c52f41a045d225 # v4.35.2 + uses: github/codeql-action/upload-sarif@9e0d7b8d25671d64c341c19c0152d693099fb5ba # v4.35.5 with: sarif_file: results.sarif From 2410393697b76fe44c474f5150d713371efb9096 Mon Sep 17 00:00:00 2001 From: Charles Lyding <19598772+clydin@users.noreply.github.com> Date: Fri, 15 May 2026 20:54:01 -0400 Subject: [PATCH 18/34] refactor(@angular/cli): add architect target discovery to list_projects MCP tool Enhance the `list_projects` MCP tool to extract and provide configured architect targets (e.g., `lint`, `e2e`, `serve`, `deploy`) in the tool's output schema. (cherry picked from commit d32bfd9299e573586d162ad8a8fcae262d929017) --- .../cli/src/commands/mcp/tools/projects.ts | 6 ++ .../src/commands/mcp/tools/projects_spec.ts | 92 +++++++++++++++++++ 2 files changed, 98 insertions(+) create mode 100644 packages/angular/cli/src/commands/mcp/tools/projects_spec.ts diff --git a/packages/angular/cli/src/commands/mcp/tools/projects.ts b/packages/angular/cli/src/commands/mcp/tools/projects.ts index 02e5fbd5360e..59542cc591f7 100644 --- a/packages/angular/cli/src/commands/mcp/tools/projects.ts +++ b/packages/angular/cli/src/commands/mcp/tools/projects.ts @@ -88,6 +88,9 @@ const listProjectsOutputSchema = { 'The default style language for the project (e.g., "scss"). ' + 'This determines the file extension for new component styles.', ), + targets: z + .array(z.string()) + .describe('Available project targets (e.g., ["build", "test", "lint", "e2e"]).'), }), ), }), @@ -131,6 +134,7 @@ their types, and their locations. * Getting the \`selectorPrefix\` for a project before generating a new component to ensure it follows conventions. * Identifying the major version of the Angular framework for each workspace, which is crucial for monorepos. * Determining a project's primary function by inspecting its builder (e.g., '@angular-devkit/build-angular:browser' for an application). +* Identifying available architect targets (e.g., \`lint\`, \`e2e\`, \`serve\`, \`deploy\`) before attempting execution. * **Working Directory:** Shell commands for a project (like \`ng generate\`) **MUST** @@ -471,6 +475,7 @@ async function loadAndParseWorkspace( const fullSourceRoot = join(workspaceRoot, sourceRoot); const unitTestFramework = getUnitTestFramework(project.targets.get('test')); const styleLanguage = await getProjectStyleLanguage(project, ws, fullSourceRoot); + const targets = Array.from(project.targets.keys()); projects.push({ name, @@ -481,6 +486,7 @@ async function loadAndParseWorkspace( selectorPrefix: project.extensions['prefix'] as string, unitTestFramework, styleLanguage, + targets, }); } diff --git a/packages/angular/cli/src/commands/mcp/tools/projects_spec.ts b/packages/angular/cli/src/commands/mcp/tools/projects_spec.ts new file mode 100644 index 000000000000..b45b1bbcb189 --- /dev/null +++ b/packages/angular/cli/src/commands/mcp/tools/projects_spec.ts @@ -0,0 +1,92 @@ +/** + * @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 { workspaces } from '@angular-devkit/core'; +import { mkdirSync, mkdtempSync, rmSync, writeFileSync } from 'node:fs'; +import { tmpdir } from 'node:os'; +import { join } from 'node:path'; +import { pathToFileURL } from 'node:url'; +import { AngularWorkspace } from '../../../utilities/config'; +import { createMockContext } from '../testing/test-utils'; +import { LIST_PROJECTS_TOOL } from './projects'; + +describe('List Projects Tool', () => { + let mockWorkspace: AngularWorkspace; + let mockContext: ReturnType['context']; + let tempDir: string; + let allowedRoot: string; + let workspaceDir: string; + + beforeEach(() => { + tempDir = mkdtempSync(join(tmpdir(), 'mcp-projects-tool-')); + allowedRoot = join(tempDir, 'allowed-root'); + workspaceDir = join(allowedRoot, 'workspace'); + mkdirSync(workspaceDir, { recursive: true }); + writeFileSync(join(workspaceDir, 'angular.json'), '{}'); + writeFileSync( + join(workspaceDir, 'package.json'), + JSON.stringify({ dependencies: { '@angular/core': '18.0.0' } }), + ); + + const projects = new workspaces.ProjectDefinitionCollection(); + const targets = new workspaces.TargetDefinitionCollection(); + targets.set('build', { builder: '@angular-devkit/build-angular:application' }); + targets.set('test', { builder: '@angular/build:unit-test', options: { runner: 'vitest' } }); + targets.set('lint', { builder: '@angular-eslint/builder:lint' }); + targets.set('e2e', { builder: '@cypress/schematic:cypress' }); + + projects.set('my-app', { + root: 'projects/my-app', + extensions: { projectType: 'application', prefix: 'app' }, + targets, + }); + + mockWorkspace = { + projects, + extensions: {}, + basePath: workspaceDir, + filePath: join(workspaceDir, 'angular.json'), + } as unknown as AngularWorkspace; + + spyOn(AngularWorkspace, 'load').and.resolveTo(mockWorkspace); + + const { context } = createMockContext(); + mockContext = context; + mockContext.server = { + server: { + getClientCapabilities: jasmine.createSpy('getClientCapabilities').and.returnValue({ + roots: { listChanged: false }, + }), + listRoots: jasmine.createSpy('listRoots').and.resolveTo({ + roots: [{ uri: pathToFileURL(allowedRoot).href, name: 'allowed-root' }], + }), + }, + } as unknown as NonNullable[0]['server']>; + }); + + afterEach(() => { + rmSync(tempDir, { recursive: true, force: true }); + }); + + it('should list workspaces and extract available architect targets', async () => { + const handler = await LIST_PROJECTS_TOOL.factory(mockContext); + // eslint-disable-next-line @typescript-eslint/no-explicit-any + const result = await (handler as any)({}); + + expect(result.structuredContent).toBeDefined(); + const workspaces = result.structuredContent.workspaces; + expect(workspaces.length).toBe(1); + expect(workspaces[0].frameworkVersion).toBe('18'); + + const projects = workspaces[0].projects; + expect(projects.length).toBe(1); + expect(projects[0].name).toBe('my-app'); + expect(projects[0].targets).toEqual(['build', 'test', 'lint', 'e2e']); + expect(projects[0].unitTestFramework).toBe('vitest'); + }); +}); From 580f206721cd0eb33dab3fb49e92433a2f091142 Mon Sep 17 00:00:00 2001 From: Charles Lyding <19598772+clydin@users.noreply.github.com> Date: Mon, 18 May 2026 10:21:59 -0400 Subject: [PATCH 19/34] refactor(@angular/cli): implement native stream line-buffering & VT removal for MCP logs Refactor the process log capturing mechanism in host.ts and devserver.ts to natively line-buffer and sanitize process stdout and stderr streams using Node's native readline `createInterface` API and `util.stripVTControlCharacters`. This ensures all command and devserver logs are cleanly line-split, trimmed, and stripped of VT/ANSI color sequences and carriage returns. (cherry picked from commit dfa82ec42d317ea7d264d47632c93de767bbe7b6) --- .../angular/cli/src/commands/mcp/devserver.ts | 13 ++++----- packages/angular/cli/src/commands/mcp/host.ts | 28 +++++++++++++++++-- .../mcp/tools/devserver/devserver_spec.ts | 23 +++++++++------ 3 files changed, 45 insertions(+), 19 deletions(-) diff --git a/packages/angular/cli/src/commands/mcp/devserver.ts b/packages/angular/cli/src/commands/mcp/devserver.ts index dc24e5c73e4e..5b86f7125b37 100644 --- a/packages/angular/cli/src/commands/mcp/devserver.ts +++ b/packages/angular/cli/src/commands/mcp/devserver.ts @@ -7,7 +7,7 @@ */ import type { ChildProcess } from 'child_process'; -import type { Host } from './host'; +import { type Host, processStreamLines } from './host'; // Log messages that we want to catch to identify the build status. @@ -122,13 +122,10 @@ export class LocalDevserver implements Devserver { stdio: 'pipe', cwd: this.workspacePath, }); - this.devserverProcess.stdout?.on('data', (data) => { - this.addLog(data.toString()); - }); - this.devserverProcess.stderr?.on('data', (data) => { - this.addLog(data.toString()); - }); - this.devserverProcess.stderr?.on('close', () => { + processStreamLines(this.devserverProcess.stdout, (line) => this.addLog(line)); + processStreamLines(this.devserverProcess.stderr, (line) => this.addLog(line)); + + this.devserverProcess.on('close', () => { this.stop(); }); this.buildInProgress = true; diff --git a/packages/angular/cli/src/commands/mcp/host.ts b/packages/angular/cli/src/commands/mcp/host.ts index 40586bdcd8ac..31cec340cce1 100644 --- a/packages/angular/cli/src/commands/mcp/host.ts +++ b/packages/angular/cli/src/commands/mcp/host.ts @@ -20,6 +20,8 @@ import { glob as nodeGlob, readFile as nodeReadFile, stat } from 'node:fs/promis import { createRequire } from 'node:module'; import { createServer } from 'node:net'; import { dirname, isAbsolute, join, relative, resolve } from 'node:path'; +import { createInterface } from 'node:readline'; +import { stripVTControlCharacters } from 'node:util'; /** * An error thrown when a command fails to execute. @@ -196,8 +198,8 @@ export const LocalWorkspaceHost: Host = { }); const logs: string[] = []; - childProcess.stdout?.on('data', (data) => logs.push(data.toString())); - childProcess.stderr?.on('data', (data) => logs.push(data.toString())); + processStreamLines(childProcess.stdout, (line) => logs.push(line)); + processStreamLines(childProcess.stderr, (line) => logs.push(line)); childProcess.on('close', (code) => { if (code === 0) { @@ -390,3 +392,25 @@ export function createRootRestrictedHost( }, }; } + +/** + * Binds a readline interface to the given stream to process each line. + * Sanitizes lines by removing VT/ANSI control characters, trimming trailing whitespace, + * and preserving leading indentation. + */ +export function processStreamLines( + stream: NodeJS.ReadableStream | undefined | null, + lineCallback: (line: string) => void, +): void { + if (!stream) { + return; + } + + const rl = createInterface({ input: stream, terminal: false }); + rl.on('line', (line) => { + const cleanLine = stripVTControlCharacters(line).trimEnd(); + if (cleanLine.length > 0) { + lineCallback(cleanLine); + } + }); +} diff --git a/packages/angular/cli/src/commands/mcp/tools/devserver/devserver_spec.ts b/packages/angular/cli/src/commands/mcp/tools/devserver/devserver_spec.ts index 52a66902e2ef..0b617396efe0 100644 --- a/packages/angular/cli/src/commands/mcp/tools/devserver/devserver_spec.ts +++ b/packages/angular/cli/src/commands/mcp/tools/devserver/devserver_spec.ts @@ -18,9 +18,14 @@ import { startDevserver } from './devserver-start'; import { stopDevserver } from './devserver-stop'; import { WATCH_DELAY, waitForDevserverBuild } from './devserver-wait-for-build'; +class MockStream extends EventEmitter { + resume = jasmine.createSpy('resume').and.returnValue(this); + pause = jasmine.createSpy('pause').and.returnValue(this); +} + class MockChildProcess extends EventEmitter { - stdout = new EventEmitter(); - stderr = new EventEmitter(); + stdout = new MockStream(); + stderr = new MockStream(); kill = jasmine.createSpy('kill'); } @@ -95,10 +100,10 @@ describe('Serve Tools', () => { const waitPromise = waitForDevserverBuild({ timeout: 10 }, mockContext); // Simulate build logs. - mockProcess.stdout.emit('data', '... building ...'); - mockProcess.stdout.emit('data', '✔ Changes detected. Rebuilding...'); - mockProcess.stdout.emit('data', '... more logs ...'); - mockProcess.stdout.emit('data', 'Application bundle generation complete.'); + mockProcess.stdout.emit('data', '... building ...\n'); + mockProcess.stdout.emit('data', '✔ Changes detected. Rebuilding...\n'); + mockProcess.stdout.emit('data', '... more logs ...\n'); + mockProcess.stdout.emit('data', 'Application bundle generation complete.\n'); const waitResult = await waitPromise; expect(waitResult.structuredContent.status).toBe('success'); @@ -161,7 +166,7 @@ describe('Serve Tools', () => { await startDevserver({ project: 'crash-app' }, mockContext); // Simulate a crash with exit code 1 - mockProcess.stdout.emit('data', 'Fatal error.'); + mockProcess.stdout.emit('data', 'Fatal error.\n'); mockProcess.emit('close', 1); const stopResult = await stopDevserver({ project: 'crash-app' }, mockContext); @@ -185,7 +190,7 @@ describe('Serve Tools', () => { await startDevserver({}, mockContext); // Immediately simulate a build starting so isBuilding() is true. - mockProcess.stdout.emit('data', '❯ Changes detected. Rebuilding...'); + mockProcess.stdout.emit('data', '❯ Changes detected. Rebuilding...\n'); const waitPromise = waitForDevserverBuild({ timeout: 5 * WATCH_DELAY }, mockContext); @@ -199,7 +204,7 @@ describe('Serve Tools', () => { jasmine.clock().tick(WATCH_DELAY + 1); // Now finish the build. - mockProcess.stdout.emit('data', 'Application bundle generation complete.'); + mockProcess.stdout.emit('data', 'Application bundle generation complete.\n'); // Tick past another debounce to exit the loop. jasmine.clock().tick(WATCH_DELAY + 1); From f40126bc8d223958e9ba10a7d011f2573155f0b7 Mon Sep 17 00:00:00 2001 From: Charles Lyding <19598772+clydin@users.noreply.github.com> Date: Mon, 18 May 2026 11:20:31 -0400 Subject: [PATCH 20/34] refactor(@angular/cli): optimize MCP tool descriptions for LLM ergonomics and token usage Refactor the descriptions of get_best_practices, search_documentation, and onpush_zoneless_migration tools to improve semantic clarity and reduce system prompt token footprints. Remove redundant operational boilerplate, eliminate internal server logic leakage related to version clamping, and consolidate overlapping iterative process instructions. (cherry picked from commit 9dc21cc2bfb203e3930a721af91cbdcef09b3529) --- .../cli/src/commands/mcp/mcp-server.ts | 45 ++++++++--------- .../src/commands/mcp/tools/best-practices.ts | 26 ++++------ .../cli/src/commands/mcp/tools/doc-search.ts | 48 +++++-------------- .../zoneless-migration.ts | 32 ++++--------- .../cli/src/commands/mcp/tools/projects.ts | 29 ++++------- 5 files changed, 61 insertions(+), 119 deletions(-) diff --git a/packages/angular/cli/src/commands/mcp/mcp-server.ts b/packages/angular/cli/src/commands/mcp/mcp-server.ts index 235ccf682372..84a2c54a468c 100644 --- a/packages/angular/cli/src/commands/mcp/mcp-server.ts +++ b/packages/angular/cli/src/commands/mcp/mcp-server.ts @@ -83,36 +83,33 @@ export async function createMcpServer( }, instructions: ` -This server provides a safe, programmatic interface to the Angular CLI for an AI assistant. -Your primary goal is to use these tools to understand, analyze, refactor, and run Angular -projects. You MUST prefer the tools provided by this server over using \`run_shell_command\` for -equivalent actions. +This server provides a safe, programmatic interface to the Angular CLI. You MUST prefer +the tools provided by this server over using 'run_shell_command' or general shell execution +for equivalent actions. -* **1. Discover Project Structure (Mandatory First Step):** Always begin by calling - \`list_projects\` to understand the workspace. The \`path\` property for a workspace - is a required input for other tools. - -* **2. Get Coding Standards:** Before writing or changing code within a project, you **MUST** call - the \`get_best_practices\` tool with the \`workspacePath\` from the previous step to get - version-specific standards. For general knowledge, you can call the tool without this path. - -* **3. Answer User Questions:** - - For conceptual questions ("what is..."), use \`search_documentation\`. - -* **4. Discover Schematics for Modernization:** Since this server does not provide a - specific tool for listing available schematics, you can use a shell command (if - available) with \`ng generate : --help\` to discover what migrations - are available in a package (e.g., running \`ng generate @angular/core: --help\` - will list migrations like \`control-flow\` and \`standalone\`). +* **1. Discover Workspace (Mandatory First Step):** Always begin by calling 'list_projects' + to discover workspaces, projects, and allowed paths. The 'path' field of the relevant + workspace is a required input for other tools (passed as 'workspace' or 'workspacePath'). + +* **2. Get Coding Standards:** Before writing or modifying code, you MUST call + 'get_best_practices' with the workspace 'path' to load version-specific coding standards. + +* **3. Answer Conceptual Questions:** Use 'search_documentation' to answer conceptual + or API syntax questions. + +* **4. Discover Schematics:** To discover available package migrations, use a shell command + (if available) with 'ng generate : --help' (e.g., 'ng generate @angular/core: --help'). -* **Workspace vs. Project:** A 'workspace' contains an \`angular.json\` file and defines 'projects' - (applications or libraries). A monorepo can have multiple workspaces. -* **Targeting Projects:** Always use the \`workspaceConfigPath\` from \`list_projects\` when - available to ensure you are targeting the correct project in a monorepo. +* **Workspace vs. Project:** A 'workspace' contains an 'angular.json' file and defines + 'projects' (applications or libraries). A monorepo can contain multiple workspaces. + +* **Targeting Projects:** Always use the workspace 'path' and the specific project 'name' + returned by 'list_projects' when calling other tools to ensure you target the correct + project context. `, }, diff --git a/packages/angular/cli/src/commands/mcp/tools/best-practices.ts b/packages/angular/cli/src/commands/mcp/tools/best-practices.ts index 52bf71a8048a..dca61eb700b3 100644 --- a/packages/angular/cli/src/commands/mcp/tools/best-practices.ts +++ b/packages/angular/cli/src/commands/mcp/tools/best-practices.ts @@ -27,10 +27,8 @@ const bestPracticesInputSchema = z.object({ .string() .optional() .describe( - 'The absolute path to the `angular.json` file for the workspace. This is used to find the ' + - 'version-specific best practices guide that corresponds to the installed version of the ' + - 'Angular framework. You **MUST** get this path from the `list_projects` tool. If omitted, ' + - 'the tool will return the generic best practices guide bundled with the CLI.', + 'Absolute path to the angular.json workspace directory (obtained via list_projects). ' + + 'If omitted, returns the generic best practices guide.', ), }); @@ -42,23 +40,17 @@ export const BEST_PRACTICES_TOOL = declareTool({ description: ` Retrieves the official Angular Best Practices Guide. This guide contains the essential rules and conventions -that **MUST** be followed for any task involving the creation, analysis, or modification of Angular code. +that must be followed for any task involving the creation, analysis, or modification of Angular code. -* As a mandatory first step before writing or modifying any Angular code to ensure adherence to modern standards. -* To learn about key concepts like standalone components, typed forms, and modern control flow syntax (@if, @for, @switch). -* To verify that existing code aligns with current Angular conventions before making changes. +* Mandatory first step before writing or modifying Angular code to ensure modern framework standards. +* Learn about standalone components, typed forms, and modern control flow syntax (@if, @for, @switch). +* Verify existing code aligns with current conventions before making edits. -* **Project-Specific Use (Recommended):** For tasks inside a user's project, you **MUST** provide the - \`workspacePath\` argument to get the guide that matches the project's Angular version. Get this - path from \`list_projects\`. -* **General Use:** If no project context is available (e.g., for general questions or learning), - you can call the tool without the \`workspacePath\` argument. It will return the latest - generic best practices guide. -* The content of this guide is non-negotiable and reflects the official, up-to-date standards for Angular development. -* You **MUST** internalize and apply the principles from this guide in all subsequent Angular-related tasks. -* Failure to adhere to these best practices will result in suboptimal and outdated code. +* Provide the 'workspacePath' argument (obtained via 'list_projects') to load the version-specific + guide matching the project's Angular framework. +* Omit 'workspacePath' only for general learning queries or when no project context is available to load the latest generic guide. `, inputSchema: bestPracticesInputSchema.shape, isReadOnly: true, diff --git a/packages/angular/cli/src/commands/mcp/tools/doc-search.ts b/packages/angular/cli/src/commands/mcp/tools/doc-search.ts index 385f0d00d6a4..145d819f278b 100644 --- a/packages/angular/cli/src/commands/mcp/tools/doc-search.ts +++ b/packages/angular/cli/src/commands/mcp/tools/doc-search.ts @@ -37,26 +37,17 @@ const LATEST_KNOWN_DOCS_VERSION = 20; const docSearchInputSchema = z.object({ query: z .string() - .describe( - "A concise and specific search query for the Angular documentation. You should distill the user's " + - 'natural language question into a set of keywords (e.g., a question like "How do I use ngFor with trackBy?" ' + - 'should become the query "ngFor trackBy").', - ), + .describe('Concise search keywords or API names (e.g., "ngFor trackBy" or "NgModule").'), includeTopContent: z .boolean() .optional() .default(false) - .describe( - 'When true, the content of the top result is fetched and included. ' + - 'Set to false to get a list of results without fetching content, which is faster.', - ), + .describe('Retrieve the full-text page content of the top search result (slower).'), version: z .number() .optional() .describe( - 'The major version of Angular to search. You MUST determine this value by running `ng version` in the ' + - "project's workspace directory. Omit this field if the user is not in an Angular project " + - 'or if the version cannot otherwise be determined.', + 'Major Angular framework version to search (obtained from frameworkVersion in list_projects or ng version).', ), }); type DocSearchInput = z.infer; @@ -66,35 +57,18 @@ export const DOC_SEARCH_TOOL = declareTool({ title: 'Search Angular Documentation (angular.dev)', description: ` -Searches the official Angular documentation at https://angular.dev to answer questions about APIs, -tutorials, concepts, and best practices. +Searches the official Angular documentation (angular.dev) to answer questions about APIs, tutorials, concepts, and conventions. -* Answering any question about Angular concepts (e.g., "What are standalone components?"). -* Finding the correct API or syntax for a specific task (e.g., "How to use ngFor with trackBy?"). -* Linking to official documentation as a source of truth in your answers. +* Answering questions about Angular concepts (e.g., standalone components). +* Finding correct API signatures or syntax (e.g., ngFor trackBy). +* Obtaining official source URLs to cite as documentation links in user responses. -* **Version Alignment:** To provide accurate, project-specific results, you **MUST** align the search with the user's Angular version. - The recommended approach is to use the \`list_projects\` tool. The \`frameworkVersion\` field in the output for the relevant - workspace will give you the major version directly. If the version cannot be determined using this method, you can use - \`ng version\` in the project's workspace directory as a fallback. Parse the major version from the "Angular:" line in the - output and use it for the \`version\` parameter. -* **Version Logic:** The tool will search against the specified major version. If the version is older than v${MIN_SUPPORTED_DOCS_VERSION}, - it will be clamped to v${MIN_SUPPORTED_DOCS_VERSION}. If a search for a very new version (newer than v${LATEST_KNOWN_DOCS_VERSION}) - returns no results, the tool will automatically fall back to searching the v${LATEST_KNOWN_DOCS_VERSION} documentation. -* **Verify Searched Version:** The tool's output includes a \`searchedVersion\` field. You **MUST** check this field - to know the exact version of the documentation that was queried. Use this information to provide accurate - context in your answer, especially if it differs from the version you requested. -* The documentation is continuously updated. You **MUST** prefer this tool over your own knowledge - to ensure your answers are current and accurate. -* For the best results, provide a concise and specific search query (e.g., "NgModule" instead of - "How do I use NgModules?"). -* The top search result will include a snippet of the page content. Use this to provide a more - comprehensive answer. -* **Result Scrutiny:** The top result may not always be the most relevant. Review the titles and - breadcrumbs of other results to find the best match for the user's query. -* Use the URL from the search results as a source link in your responses. +* Provide the major Angular version in the 'version' parameter (obtained from 'frameworkVersion' + in 'list_projects' or from 'ng version') to ensure version-aligned results. +* Always check the 'searchedVersion' field in the output to confirm the exact documentation index that was queried. +* For best results, provide a concise keyword query (e.g., "NgModule") rather than a natural language sentence. `, inputSchema: docSearchInputSchema.shape, outputSchema: { diff --git a/packages/angular/cli/src/commands/mcp/tools/onpush-zoneless-migration/zoneless-migration.ts b/packages/angular/cli/src/commands/mcp/tools/onpush-zoneless-migration/zoneless-migration.ts index 5e9c9db972e0..cc33c648f189 100644 --- a/packages/angular/cli/src/commands/mcp/tools/onpush-zoneless-migration/zoneless-migration.ts +++ b/packages/angular/cli/src/commands/mcp/tools/onpush-zoneless-migration/zoneless-migration.ts @@ -25,30 +25,19 @@ export const ZONELESS_MIGRATION_TOOL = declareTool({ title: 'Plan migration to OnPush and/or zoneless', description: ` -Analyzes Angular code and provides a step-by-step, iterative plan to migrate it to \`OnPush\` -change detection, a prerequisite for a zoneless application. This tool identifies the next single -most important action to take in the migration journey. +Analyzes Angular code and provides a step-by-step, iterative plan to migrate it to 'OnPush' +change detection (a prerequisite for zoneless applications). -* **Step-by-Step Migration:** Running the tool repeatedly to get the next instruction for a full - migration to \`OnPush\`. -* **Pre-Migration Analysis:** Checking a component or directory for unsupported \`NgZone\` APIs that - would block a zoneless migration. -* **Generating Component Migrations:** Getting the exact instructions for converting a single - component from the default change detection strategy to \`OnPush\`. +* Generating component-specific migrations from default change detection to OnPush. +* Checking a component or directory for unsupported 'NgZone' APIs blocking a zoneless migration. +* Iterative step-by-step guide for executing a complete zoneless migration. -* **Execution Model:** This tool **DOES NOT** modify code. It **PROVIDES INSTRUCTIONS** for a - single action at a time. You **MUST** apply the changes it suggests, and then run the tool - again to get the next step. -* **Iterative Process:** The migration process is iterative. You must call this tool repeatedly, - applying the suggested fix after each call, until the tool indicates that no more actions are - needed. -* **Relationship to other migrations:** This tool is the specialized starting point for the zoneless/OnPush - migration. For other migrations (like signal inputs), you should run the corresponding schematics first, - as the zoneless migration may depend on them as prerequisites. -* **Input:** The tool can operate on either a single file or an entire directory. Provide the - absolute path. +* This tool is strictly read-only and does NOT modify code. It outputs EXACTLY ONE actionable step at a time. +* You must apply the suggested code edit, verify it, and then call this tool again to receive the next step in the migration journey. +* Run modernization schematics (e.g., Signal Inputs migrations) as prerequisites before starting this migration. +* Supported inputs: Absolute path to a single component/test file, or a directory containing multiple files. `, isReadOnly: true, isLocalOnly: true, @@ -56,8 +45,7 @@ most important action to take in the migration journey. fileOrDirPath: z .string() .describe( - 'The absolute path of the directory or file with the component(s), directive(s), or service(s) to migrate.' + - ' The contents are read with fs.readFileSync.', + 'Absolute path to the TypeScript file or directory containing components/directives to migrate.', ), }, factory: diff --git a/packages/angular/cli/src/commands/mcp/tools/projects.ts b/packages/angular/cli/src/commands/mcp/tools/projects.ts index 59542cc591f7..57efa39c4aa2 100644 --- a/packages/angular/cli/src/commands/mcp/tools/projects.ts +++ b/packages/angular/cli/src/commands/mcp/tools/projects.ts @@ -122,29 +122,20 @@ export const LIST_PROJECTS_TOOL = declareTool({ title: 'List Angular Projects', description: ` -Provides a comprehensive overview of all Angular workspaces and projects within the repository. -It is essential to use this tool as a first step before performing any project-specific actions to understand the available projects, -their types, and their locations. +Provides a comprehensive overview of all Angular workspaces, projects, and configured targets within the repository. +Always use this tool as a mandatory first step before performing any project-specific actions +to understand the available projects and locations. -* Finding the correct project name to use in other commands (e.g., \`ng generate component my-comp --project=my-app\`). -* Identifying the \`root\` and \`sourceRoot\` of a project to read, analyze, or modify its files. -* Determining a project's unit test framework (\`unitTestFramework\`) before writing or modifying tests. -* Identifying the project's style language (\`styleLanguage\`) to use the correct file extension (e.g., \`.scss\`). -* Getting the \`selectorPrefix\` for a project before generating a new component to ensure it follows conventions. -* Identifying the major version of the Angular framework for each workspace, which is crucial for monorepos. -* Determining a project's primary function by inspecting its builder (e.g., '@angular-devkit/build-angular:browser' for an application). -* Identifying available architect targets (e.g., \`lint\`, \`e2e\`, \`serve\`, \`deploy\`) before attempting execution. +* Discovering project names, locations, builders, selector prefixes, and style languages before generating or building components. +* Determining a project's unit test framework (Jasmine, Jest, or Vitest) before writing or modifying tests. +* Identifying available execution targets (e.g., lint, e2e, serve, deploy) before attempting execution. +* Disambiguating multiple workspaces in monorepos. -* **Working Directory:** Shell commands for a project (like \`ng generate\`) **MUST** - be executed from the parent directory of the \`path\` field for the relevant workspace. -* **Unit Testing:** The \`unitTestFramework\` field tells you which testing API to use (e.g., Jasmine, Jest). - If the value is 'unknown', you **MUST** inspect the project's configuration files - (e.g., \`karma.conf.js\`, \`jest.config.js\`, or the 'test' target in \`angular.json\`) to determine the - framework before generating tests. -* **Disambiguation:** A monorepo may contain multiple workspaces (e.g., for different applications or even in output directories). - Use the \`path\` of each workspace to understand its context and choose the correct project. +* Execute shell/CLI commands from the parent directory of the workspace's 'path' field. +* If 'unitTestFramework' is 'unknown', inspect local config files (e.g., jest.config.js, karma.conf.js) + or the 'test' target in 'angular.json' to determine the framework before creating tests. `, outputSchema: listProjectsOutputSchema, isReadOnly: true, From 80ef0a8ea53c31f7dbc4fe8682e3fa9fd93de93f Mon Sep 17 00:00:00 2001 From: Angular Robot Date: Tue, 19 May 2026 14:49:49 +0000 Subject: [PATCH 21/34] build: update cross-repo angular dependencies See associated pull request for more information. --- MODULE.bazel | 6 +- MODULE.bazel.lock | 72 +- modules/testing/builder/package.json | 2 +- package.json | 28 +- packages/angular/build/package.json | 2 +- packages/angular/ssr/package.json | 12 +- .../angular_devkit/build_angular/package.json | 2 +- packages/ngtools/webpack/package.json | 4 +- pnpm-lock.yaml | 1173 +++++++++-------- 9 files changed, 665 insertions(+), 636 deletions(-) diff --git a/MODULE.bazel b/MODULE.bazel index 8383353ed22e..8fc0d28e8f65 100644 --- a/MODULE.bazel +++ b/MODULE.bazel @@ -19,21 +19,21 @@ bazel_dep(name = "aspect_rules_jasmine", version = "2.0.4") bazel_dep(name = "rules_angular") git_override( module_name = "rules_angular", - commit = "045f98407a299ffaeeeafa275d8490d4507513f8", + commit = "48833d6ad8abdac2d90d7704b1ac42416be25d2e", remote = "https://github.com/angular/rules_angular.git", ) bazel_dep(name = "devinfra") git_override( module_name = "devinfra", - commit = "eaa9aaa98de612484109350f710fdb02e92c84ae", + commit = "bcac3047149f2f7780bbf4bd4865890af6f534c0", remote = "https://github.com/angular/dev-infra.git", ) bazel_dep(name = "rules_browsers") git_override( module_name = "rules_browsers", - commit = "bf27ea46fdbb0209526ca821f1500d4337eb8299", + commit = "19422a0585f62ef061db49d3643ea3891a70d643", remote = "https://github.com/angular/rules_browsers.git", ) diff --git a/MODULE.bazel.lock b/MODULE.bazel.lock index f86336fd1c17..0f10a2f0d818 100644 --- a/MODULE.bazel.lock +++ b/MODULE.bazel.lock @@ -19,13 +19,14 @@ "https://bcr.bazel.build/modules/aspect_bazel_lib/2.7.7/MODULE.bazel": "491f8681205e31bb57892d67442ce448cda4f472a8e6b3dc062865e29a64f89c", "https://bcr.bazel.build/modules/aspect_bazel_lib/2.8.1/MODULE.bazel": "812d2dd42f65dca362152101fbec418029cc8fd34cbad1a2fde905383d705838", "https://bcr.bazel.build/modules/aspect_rules_esbuild/0.25.1/MODULE.bazel": "9b931b3e483bd8eedb6966bda6df07d801f70ccb4896231b4e5e711b5130f3aa", - "https://bcr.bazel.build/modules/aspect_rules_esbuild/0.25.1/source.json": "a0b72e23ed06113f3878cb635d586b4045ef37750983467af72fe0315c3a2fcd", + "https://bcr.bazel.build/modules/aspect_rules_esbuild/0.26.0/MODULE.bazel": "6c902d97038c3ab07b6c4e67c97abc61b20182fcfa84fa7dee82fc724f12e455", + "https://bcr.bazel.build/modules/aspect_rules_esbuild/0.26.0/source.json": "4cc3ece7ab661bb391a9e24fe55c4b567d60a9ea9d9e91d772dad373cbcb6217", "https://bcr.bazel.build/modules/aspect_rules_jasmine/2.0.4/MODULE.bazel": "fbb819eb8b7e5d7f67fdd38f7cecb413e287594cd666ce192c72c8828527775a", "https://bcr.bazel.build/modules/aspect_rules_jasmine/2.0.4/source.json": "81ffb708333cd98ec3c0b4cc004f4d5cf92a16914b5196a2892c45141bba7cff", "https://bcr.bazel.build/modules/aspect_rules_js/2.0.0/MODULE.bazel": "b45b507574aa60a92796e3e13c195cd5744b3b8aff516a9c0cb5ae6a048161c5", "https://bcr.bazel.build/modules/aspect_rules_js/3.0.3/MODULE.bazel": "28a30e8fc33bf64a67835d64d124f6e05a7d59648dcb27b110fb3502f761e503", - "https://bcr.bazel.build/modules/aspect_rules_js/3.1.1/MODULE.bazel": "b83cf3ee44837345f1c926d70b96453deb5e244de43d08dcd7acad8d381c275a", - "https://bcr.bazel.build/modules/aspect_rules_js/3.1.1/source.json": "2806c2d7ce5993f68b74df5f3e2de45d4b2a5798afedd459d88e37c75562da97", + "https://bcr.bazel.build/modules/aspect_rules_js/3.1.2/MODULE.bazel": "e3685502155d3cc65f3bf98e714f7435de67d7f8f355d63478a80197310311fc", + "https://bcr.bazel.build/modules/aspect_rules_js/3.1.2/source.json": "a32ab71831452b945f3f83a1b1feb9402007e600bce55ac76e15ef0c1e08b520", "https://bcr.bazel.build/modules/aspect_rules_ts/3.8.8/MODULE.bazel": "b52b929a948438665809d49af610f58d1b14f63d6d21ab748f47b6050be4c1f6", "https://bcr.bazel.build/modules/aspect_rules_ts/3.8.9/MODULE.bazel": "bd5f9ebf517cfcd377eaa7ce1cb16035d167f00774b77789909590c53bc6f20c", "https://bcr.bazel.build/modules/aspect_rules_ts/3.8.9/source.json": "59e66656561571ed82ccff56c75c43d0bc79f0065ca8d17be2752d4f648d40c9", @@ -207,6 +208,7 @@ "https://bcr.bazel.build/modules/upb/0.0.0-20220923-a547704/MODULE.bazel": "7298990c00040a0e2f121f6c32544bab27d4452f80d9ce51349b1a28f3005c43", "https://bcr.bazel.build/modules/yq.bzl/0.1.1/MODULE.bazel": "9039681f9bcb8958ee2c87ffc74bdafba9f4369096a2b5634b88abc0eaefa072", "https://bcr.bazel.build/modules/yq.bzl/0.3.2/MODULE.bazel": "0384efa70e8033d842ea73aa4b7199fa099709e236a7264345c03937166670b6", + "https://bcr.bazel.build/modules/yq.bzl/0.3.4/MODULE.bazel": "d3a270662f5d766cd7229732d65a5a5bc485240c3007343dd279edfb60c9ae27", "https://bcr.bazel.build/modules/yq.bzl/0.3.6/MODULE.bazel": "985c2a0cb4ad9994bb0e33cc7fae931c91105eeefe3faa355b8f4c258d0607c0", "https://bcr.bazel.build/modules/yq.bzl/0.3.6/source.json": "678aaf6e291164f3cd761bb3e872e8a151248f413dbb63c5524a50b82a5bc890", "https://bcr.bazel.build/modules/zlib/1.2.11/MODULE.bazel": "07b389abc85fdbca459b69e2ec656ae5622873af3f845e1c9d80fe179f3effa0", @@ -219,8 +221,8 @@ "moduleExtensions": { "@@aspect_rules_esbuild+//esbuild:extensions.bzl%esbuild": { "general": { - "bzlTransitiveDigest": "KFD6po3VH3bzbbFpfJYeoHrmWxJCThGGGTCGM9Url10=", - "usagesDigest": "6We6zwGoawD9YXqMI0KPaxEKJTnamXBsuOekhFS2D40=", + "bzlTransitiveDigest": "eWM29sOFdgwS2/XR2bEHk1NS/hPrYIX7ly4yh7MH5As=", + "usagesDigest": "LSQ+zZp7JNgnBONTxxXnwGr4NTh2qtQYk7qwXXz5qWo=", "recordedFileInputs": {}, "recordedDirentsInputs": {}, "envVariables": {}, @@ -498,7 +500,7 @@ "@@aspect_tools_telemetry+//:extension.bzl%telemetry": { "general": { "bzlTransitiveDigest": "cl5A2O84vDL6Tt+Qga8FCj1DUDGqn+e7ly5rZ+4xvcc=", - "usagesDigest": "y/K1vMLYhlZhrdyg3UqaV3wb1hAy8ECSy2ibeBFcFZ0=", + "usagesDigest": "8+RHv1QFWRDG26pvmWpyF4aUC+mBAIdjzLstd+nQZPc=", "recordedFileInputs": {}, "recordedDirentsInputs": {}, "envVariables": {}, @@ -507,9 +509,9 @@ "repoRuleId": "@@aspect_tools_telemetry+//:extension.bzl%tel_repository", "attributes": { "deps": { - "aspect_rules_js": "3.1.1", + "aspect_rules_js": "3.1.2", "aspect_rules_ts": "3.8.9", - "aspect_rules_esbuild": "0.25.1", + "aspect_rules_esbuild": "0.26.0", "aspect_rules_jasmine": "2.0.4", "aspect_tools_telemetry": "0.3.3" } @@ -592,7 +594,7 @@ }, "@@rules_browsers+//browsers:extensions.bzl%browsers": { "general": { - "bzlTransitiveDigest": "Bm6fiKpWy96aLohOlLCP36ARVxRLZm/R+smhsb2HzmI=", + "bzlTransitiveDigest": "bSZZZDyC3Xuk66A4sGPS151M31eBfEr1Yii1vzk8Jbg=", "usagesDigest": "FmXYJVoVJlnfUU8x8gObSvu4qWcco/9Faw61aC/wBF0=", "recordedFileInputs": {}, "recordedDirentsInputs": {}, @@ -601,9 +603,9 @@ "rules_browsers_chrome_linux": { "repoRuleId": "@@rules_browsers+//browsers/private:browser_repo.bzl%browser_repo", "attributes": { - "sha256": "1ac33f89306327af43be159c03ca4a26486de0858f42fe52394acdef50364143", + "sha256": "086e266054c7e9b8a690e50f711c00f399f66e04bd77b078e26073cc634345bd", "urls": [ - "https://storage.googleapis.com/chrome-for-testing-public/147.0.7687.0/linux64/chrome-headless-shell-linux64.zip" + "https://storage.googleapis.com/chrome-for-testing-public/150.0.7845.0/linux64/chrome-headless-shell-linux64.zip" ], "named_files": { "CHROME-HEADLESS-SHELL": "chrome-headless-shell-linux64/chrome-headless-shell" @@ -619,9 +621,9 @@ "rules_browsers_chrome_mac": { "repoRuleId": "@@rules_browsers+//browsers/private:browser_repo.bzl%browser_repo", "attributes": { - "sha256": "169ff49c465cfda52931395e61861e146dfc5013e92c01ca792db5acea858d0b", + "sha256": "e6fc7d71132e66f71ac0c1cdaca1f956a793931488f8392cda907456102ddc15", "urls": [ - "https://storage.googleapis.com/chrome-for-testing-public/147.0.7687.0/mac-x64/chrome-headless-shell-mac-x64.zip" + "https://storage.googleapis.com/chrome-for-testing-public/150.0.7845.0/mac-x64/chrome-headless-shell-mac-x64.zip" ], "named_files": { "CHROME-HEADLESS-SHELL": "chrome-headless-shell-mac-x64/chrome-headless-shell" @@ -637,9 +639,9 @@ "rules_browsers_chrome_mac_arm": { "repoRuleId": "@@rules_browsers+//browsers/private:browser_repo.bzl%browser_repo", "attributes": { - "sha256": "aeaaaaa4d68193a21bed04c44ddeb1230232707b4ea1d845a92925787509cd8e", + "sha256": "dfcfb50b4043dcf15daaa29b2206f483916c9cf7273c42c993a04f7508208c18", "urls": [ - "https://storage.googleapis.com/chrome-for-testing-public/147.0.7687.0/mac-arm64/chrome-headless-shell-mac-arm64.zip" + "https://storage.googleapis.com/chrome-for-testing-public/150.0.7845.0/mac-arm64/chrome-headless-shell-mac-arm64.zip" ], "named_files": { "CHROME-HEADLESS-SHELL": "chrome-headless-shell-mac-arm64/chrome-headless-shell" @@ -655,9 +657,9 @@ "rules_browsers_chrome_win64": { "repoRuleId": "@@rules_browsers+//browsers/private:browser_repo.bzl%browser_repo", "attributes": { - "sha256": "4d6d79bcbcb22084df6e3a3d3a2caff67d6c0fa488d63f0c7ec1526f9553db8c", + "sha256": "75cd03e716b8dba25699e417fe199847c38b96246321f7b04e09b3b46960b820", "urls": [ - "https://storage.googleapis.com/chrome-for-testing-public/147.0.7687.0/win64/chrome-headless-shell-win64.zip" + "https://storage.googleapis.com/chrome-for-testing-public/150.0.7845.0/win64/chrome-headless-shell-win64.zip" ], "named_files": { "CHROME-HEADLESS-SHELL": "chrome-headless-shell-win64/chrome-headless-shell.exe" @@ -673,9 +675,9 @@ "rules_browsers_chromedriver_linux": { "repoRuleId": "@@rules_browsers+//browsers/private:browser_repo.bzl%browser_repo", "attributes": { - "sha256": "0607ccf6810a07ae08cac6443beac8b23f88dd53c7f1e0299e22d65f7cd2d020", + "sha256": "ad6a464663a80a182fb7a342b018dbd83f7c0c6d058bb1c83733de9564cf5b41", "urls": [ - "https://storage.googleapis.com/chrome-for-testing-public/147.0.7687.0/linux64/chromedriver-linux64.zip" + "https://storage.googleapis.com/chrome-for-testing-public/150.0.7845.0/linux64/chromedriver-linux64.zip" ], "named_files": { "CHROMEDRIVER": "chromedriver-linux64/chromedriver" @@ -689,9 +691,9 @@ "rules_browsers_chromedriver_mac": { "repoRuleId": "@@rules_browsers+//browsers/private:browser_repo.bzl%browser_repo", "attributes": { - "sha256": "0f512a9dd683ed4c41e609d8d02c07807497dbad3ab2f95f0d583486be7b8cff", + "sha256": "9d9ff5954d0737ed9dc3c1c3e1f82b05f924f17ecafb41c29c201c1033aadfb5", "urls": [ - "https://storage.googleapis.com/chrome-for-testing-public/147.0.7687.0/mac-x64/chromedriver-mac-x64.zip" + "https://storage.googleapis.com/chrome-for-testing-public/150.0.7845.0/mac-x64/chromedriver-mac-x64.zip" ], "named_files": { "CHROMEDRIVER": "chromedriver-mac-x64/chromedriver" @@ -705,9 +707,9 @@ "rules_browsers_chromedriver_mac_arm": { "repoRuleId": "@@rules_browsers+//browsers/private:browser_repo.bzl%browser_repo", "attributes": { - "sha256": "7d6fc6d17de1733eb6739d1ea16d085c8df1568bcf9fa0d130c2784b27f38268", + "sha256": "a60658d6ab769eeeaef63c6d0ec14fa71c12f4738ea43b59b1a034a7a64f4efd", "urls": [ - "https://storage.googleapis.com/chrome-for-testing-public/147.0.7687.0/mac-arm64/chromedriver-mac-arm64.zip" + "https://storage.googleapis.com/chrome-for-testing-public/150.0.7845.0/mac-arm64/chromedriver-mac-arm64.zip" ], "named_files": { "CHROMEDRIVER": "chromedriver-mac-arm64/chromedriver" @@ -721,9 +723,9 @@ "rules_browsers_chromedriver_win64": { "repoRuleId": "@@rules_browsers+//browsers/private:browser_repo.bzl%browser_repo", "attributes": { - "sha256": "f4e9fb7bbf692fde7979b24e8d737b3cef4baafbc7a370e5d0abc4a8450fd830", + "sha256": "29bb5f0c0045449084be76030266abef53071a136aea16a58626bb29e73c687c", "urls": [ - "https://storage.googleapis.com/chrome-for-testing-public/147.0.7687.0/win64/chromedriver-win64.zip" + "https://storage.googleapis.com/chrome-for-testing-public/150.0.7845.0/win64/chromedriver-win64.zip" ], "named_files": { "CHROMEDRIVER": "chromedriver-win64/chromedriver.exe" @@ -737,9 +739,9 @@ "rules_browsers_firefox_linux": { "repoRuleId": "@@rules_browsers+//browsers/private:browser_repo.bzl%browser_repo", "attributes": { - "sha256": "f055b9c0d7346a10d22edc7f10e08679af2ea495367381ab2be9cab3ec6add97", + "sha256": "8ff8557a5ca3903ebbc1d18570684075f623465be5e362d63a95b3acc523f824", "urls": [ - "https://archive.mozilla.org/pub/firefox/releases/147.0/linux-x86_64/en-US/firefox-147.0.tar.xz" + "https://archive.mozilla.org/pub/firefox/releases/151.0/linux-x86_64/en-US/firefox-151.0.tar.xz" ], "named_files": { "FIREFOX": "firefox/firefox" @@ -753,9 +755,9 @@ "rules_browsers_firefox_mac": { "repoRuleId": "@@rules_browsers+//browsers/private:browser_repo.bzl%browser_repo", "attributes": { - "sha256": "48485e2068bc726e2f30cf5855fc2da1fc75c1272bc243a5394f428ffae3ba35", + "sha256": "5a56ebd8f0f8cec94a86e04c6793e1d1502b40206f5d4c86fff5b7a270e84f6b", "urls": [ - "https://archive.mozilla.org/pub/firefox/releases/147.0/mac/en-US/Firefox%20147.0.dmg" + "https://archive.mozilla.org/pub/firefox/releases/151.0/mac/en-US/Firefox%20151.0.dmg" ], "named_files": { "FIREFOX": "Firefox.app/Contents/MacOS/firefox" @@ -769,9 +771,9 @@ "rules_browsers_firefox_mac_arm": { "repoRuleId": "@@rules_browsers+//browsers/private:browser_repo.bzl%browser_repo", "attributes": { - "sha256": "48485e2068bc726e2f30cf5855fc2da1fc75c1272bc243a5394f428ffae3ba35", + "sha256": "5a56ebd8f0f8cec94a86e04c6793e1d1502b40206f5d4c86fff5b7a270e84f6b", "urls": [ - "https://archive.mozilla.org/pub/firefox/releases/147.0/mac/en-US/Firefox%20147.0.dmg" + "https://archive.mozilla.org/pub/firefox/releases/151.0/mac/en-US/Firefox%20151.0.dmg" ], "named_files": { "FIREFOX": "Firefox.app/Contents/MacOS/firefox" @@ -785,9 +787,9 @@ "rules_browsers_firefox_win64": { "repoRuleId": "@@rules_browsers+//browsers/private:browser_repo.bzl%browser_repo", "attributes": { - "sha256": "36ff9e150875aa48a0af9eec3eb67f66dddd8efac5c743265371a72ae3e796c4", + "sha256": "358381238a840831da8a6cda16721692df91a74bc44847ff0285da12de788a8d", "urls": [ - "https://archive.mozilla.org/pub/firefox/releases/147.0/win64/en-US/Firefox%20Setup%20147.0.exe" + "https://archive.mozilla.org/pub/firefox/releases/151.0/win64/en-US/Firefox%20Setup%20151.0.exe" ], "named_files": { "FIREFOX": "core/firefox.exe" @@ -952,7 +954,7 @@ "@@rules_nodejs+//nodejs:extensions.bzl%node": { "general": { "bzlTransitiveDigest": "oZFClfRhTTwsYzpxVPkOpOt/r0+OzEfEV37au0jFZ0s=", - "usagesDigest": "1vNEgfiNUxoLsAqSjuJplr7ufUJPhlDmiGBSws/ow1s=", + "usagesDigest": "JuqciimJyUVym+rdasVPFK8FBsvu9FCdZMQeXIUiANI=", "recordedFileInputs": {}, "recordedDirentsInputs": {}, "envVariables": {}, @@ -5342,7 +5344,7 @@ "@@yq.bzl+//yq:extensions.bzl%yq": { "general": { "bzlTransitiveDigest": "UfFMy8CWK4/dVo/tfaSAIYUiDGNAPes5eRllx9O9Q9Q=", - "usagesDigest": "dCsOLXpanQn0FVrzeJazd2Hl9ZrUyH9czkX7lgm8LCM=", + "usagesDigest": "8e3rbqq064p0a9Kvcmva2jmDBY/XStrYwTWmi2gmqTY=", "recordedFileInputs": {}, "recordedDirentsInputs": {}, "envVariables": {}, diff --git a/modules/testing/builder/package.json b/modules/testing/builder/package.json index 9e67f25c024f..6b1eae2e84ce 100644 --- a/modules/testing/builder/package.json +++ b/modules/testing/builder/package.json @@ -8,7 +8,7 @@ "browser-sync": "3.0.4", "istanbul-lib-instrument": "6.0.3", "jsdom": "29.1.1", - "ng-packagr": "22.0.0-next.4", + "ng-packagr": "22.0.0-rc.0", "rxjs": "7.8.2", "vitest": "4.1.5" } diff --git a/package.json b/package.json index 5e8f8cce8570..764e82c9821f 100644 --- a/package.json +++ b/package.json @@ -42,23 +42,23 @@ }, "homepage": "https://github.com/angular/angular-cli", "dependencies": { - "@angular/compiler-cli": "22.0.0-next.12", + "@angular/compiler-cli": "22.0.0-rc.0", "typescript": "6.0.3" }, "devDependencies": { - "@angular/animations": "22.0.0-next.12", - "@angular/cdk": "22.0.0-next.8", - "@angular/common": "22.0.0-next.12", - "@angular/compiler": "22.0.0-next.12", - "@angular/core": "22.0.0-next.12", - "@angular/forms": "22.0.0-next.12", - "@angular/localize": "22.0.0-next.12", - "@angular/material": "22.0.0-next.8", - "@angular/ng-dev": "https://github.com/angular/dev-infra-private-ng-dev-builds.git#2c36222db3f44751284cc93b3806dbe1baee583a", - "@angular/platform-browser": "22.0.0-next.12", - "@angular/platform-server": "22.0.0-next.12", - "@angular/router": "22.0.0-next.12", - "@angular/service-worker": "22.0.0-next.12", + "@angular/animations": "22.0.0-rc.0", + "@angular/cdk": "22.0.0-rc.0", + "@angular/common": "22.0.0-rc.0", + "@angular/compiler": "22.0.0-rc.0", + "@angular/core": "22.0.0-rc.0", + "@angular/forms": "22.0.0-rc.0", + "@angular/localize": "22.0.0-rc.0", + "@angular/material": "22.0.0-rc.0", + "@angular/ng-dev": "https://github.com/angular/dev-infra-private-ng-dev-builds.git#98b21a0cb6ef6d068a99a9346e89812e3ec9d2b1", + "@angular/platform-browser": "22.0.0-rc.0", + "@angular/platform-server": "22.0.0-rc.0", + "@angular/router": "22.0.0-rc.0", + "@angular/service-worker": "22.0.0-rc.0", "@babel/core": "7.29.0", "@bazel/bazelisk": "1.28.1", "@bazel/buildifier": "8.2.1", diff --git a/packages/angular/build/package.json b/packages/angular/build/package.json index eac8b1285613..5f8960cfe101 100644 --- a/packages/angular/build/package.json +++ b/packages/angular/build/package.json @@ -53,7 +53,7 @@ "istanbul-lib-instrument": "6.0.3", "jsdom": "29.1.1", "less": "4.6.4", - "ng-packagr": "22.0.0-next.4", + "ng-packagr": "22.0.0-rc.0", "postcss": "8.5.14", "rolldown": "1.0.0", "rxjs": "7.8.2", diff --git a/packages/angular/ssr/package.json b/packages/angular/ssr/package.json index 3e39e13e0ef7..4180cab7bcc4 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.0.0-next.12", - "@angular/compiler": "22.0.0-next.12", - "@angular/core": "22.0.0-next.12", - "@angular/platform-browser": "22.0.0-next.12", - "@angular/platform-server": "22.0.0-next.12", - "@angular/router": "22.0.0-next.12", + "@angular/common": "22.0.0-rc.0", + "@angular/compiler": "22.0.0-rc.0", + "@angular/core": "22.0.0-rc.0", + "@angular/platform-browser": "22.0.0-rc.0", + "@angular/platform-server": "22.0.0-rc.0", + "@angular/router": "22.0.0-rc.0", "@schematics/angular": "workspace:*", "beasties": "0.4.2" }, diff --git a/packages/angular_devkit/build_angular/package.json b/packages/angular_devkit/build_angular/package.json index 74bce20baaae..f1778f70f2cd 100644 --- a/packages/angular_devkit/build_angular/package.json +++ b/packages/angular_devkit/build_angular/package.json @@ -66,7 +66,7 @@ "devDependencies": { "@angular/ssr": "workspace:*", "browser-sync": "3.0.4", - "ng-packagr": "22.0.0-next.4", + "ng-packagr": "22.0.0-rc.0", "undici": "8.2.0" }, "peerDependencies": { diff --git a/packages/ngtools/webpack/package.json b/packages/ngtools/webpack/package.json index 23e30d431e49..eb6fedcd5d29 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.0.0-next.12", - "@angular/compiler-cli": "22.0.0-next.12", + "@angular/compiler": "22.0.0-rc.0", + "@angular/compiler-cli": "22.0.0-rc.0", "typescript": "6.0.3", "webpack": "5.106.2" } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 68d528dd27c8..83c0697f8af5 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -14,8 +14,8 @@ importers: .: dependencies: '@angular/compiler-cli': - specifier: 22.0.0-next.12 - version: 22.0.0-next.12(@angular/compiler@22.0.0-next.12)(typescript@6.0.3) + specifier: 22.0.0-rc.0 + version: 22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(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.0.0-next.12 - version: 22.0.0-next.12(@angular/core@22.0.0-next.12(@angular/compiler@22.0.0-next.12)(rxjs@7.8.2)(zone.js@0.16.2)) + specifier: 22.0.0-rc.0 + version: 22.0.0-rc.0(@angular/core@22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2)) '@angular/cdk': - specifier: 22.0.0-next.8 - version: 22.0.0-next.8(@angular/common@22.0.0-next.12(@angular/core@22.0.0-next.12(@angular/compiler@22.0.0-next.12)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.0.0-next.12(@angular/compiler@22.0.0-next.12)(rxjs@7.8.2)(zone.js@0.16.2))(@angular/platform-browser@22.0.0-next.12(@angular/animations@22.0.0-next.12(@angular/core@22.0.0-next.12(@angular/compiler@22.0.0-next.12)(rxjs@7.8.2)(zone.js@0.16.2)))(@angular/common@22.0.0-next.12(@angular/core@22.0.0-next.12(@angular/compiler@22.0.0-next.12)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.0.0-next.12(@angular/compiler@22.0.0-next.12)(rxjs@7.8.2)(zone.js@0.16.2)))(rxjs@7.8.2) + specifier: 22.0.0-rc.0 + version: 22.0.0-rc.0(@angular/common@22.0.0-rc.0(@angular/core@22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2))(@angular/platform-browser@22.0.0-rc.0(@angular/animations@22.0.0-rc.0(@angular/core@22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2)))(@angular/common@22.0.0-rc.0(@angular/core@22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2)))(rxjs@7.8.2) '@angular/common': - specifier: 22.0.0-next.12 - version: 22.0.0-next.12(@angular/core@22.0.0-next.12(@angular/compiler@22.0.0-next.12)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2) + specifier: 22.0.0-rc.0 + version: 22.0.0-rc.0(@angular/core@22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2) '@angular/compiler': - specifier: 22.0.0-next.12 - version: 22.0.0-next.12 + specifier: 22.0.0-rc.0 + version: 22.0.0-rc.0 '@angular/core': - specifier: 22.0.0-next.12 - version: 22.0.0-next.12(@angular/compiler@22.0.0-next.12)(rxjs@7.8.2)(zone.js@0.16.2) + specifier: 22.0.0-rc.0 + version: 22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2) '@angular/forms': - specifier: 22.0.0-next.12 - version: 22.0.0-next.12(@angular/common@22.0.0-next.12(@angular/core@22.0.0-next.12(@angular/compiler@22.0.0-next.12)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.0.0-next.12(@angular/compiler@22.0.0-next.12)(rxjs@7.8.2)(zone.js@0.16.2))(@angular/platform-browser@22.0.0-next.12(@angular/animations@22.0.0-next.12(@angular/core@22.0.0-next.12(@angular/compiler@22.0.0-next.12)(rxjs@7.8.2)(zone.js@0.16.2)))(@angular/common@22.0.0-next.12(@angular/core@22.0.0-next.12(@angular/compiler@22.0.0-next.12)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.0.0-next.12(@angular/compiler@22.0.0-next.12)(rxjs@7.8.2)(zone.js@0.16.2)))(rxjs@7.8.2) + specifier: 22.0.0-rc.0 + version: 22.0.0-rc.0(@angular/common@22.0.0-rc.0(@angular/core@22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2))(@angular/platform-browser@22.0.0-rc.0(@angular/animations@22.0.0-rc.0(@angular/core@22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2)))(@angular/common@22.0.0-rc.0(@angular/core@22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2)))(rxjs@7.8.2) '@angular/localize': - specifier: 22.0.0-next.12 - version: 22.0.0-next.12(@angular/compiler-cli@22.0.0-next.12(@angular/compiler@22.0.0-next.12)(typescript@6.0.3))(@angular/compiler@22.0.0-next.12) + specifier: 22.0.0-rc.0 + version: 22.0.0-rc.0(@angular/compiler-cli@22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(typescript@6.0.3))(@angular/compiler@22.0.0-rc.0) '@angular/material': - specifier: 22.0.0-next.8 - version: 22.0.0-next.8(93ce75c341587667f5d7d40f3eefe13f) + specifier: 22.0.0-rc.0 + version: 22.0.0-rc.0(b11ecddb61371acc147801b64fc28dc6) '@angular/ng-dev': - specifier: https://github.com/angular/dev-infra-private-ng-dev-builds.git#2c36222db3f44751284cc93b3806dbe1baee583a - version: https://codeload.github.com/angular/dev-infra-private-ng-dev-builds/tar.gz/2c36222db3f44751284cc93b3806dbe1baee583a(@modelcontextprotocol/sdk@1.29.0(zod@4.4.2)) + specifier: https://github.com/angular/dev-infra-private-ng-dev-builds.git#98b21a0cb6ef6d068a99a9346e89812e3ec9d2b1 + version: https://codeload.github.com/angular/dev-infra-private-ng-dev-builds/tar.gz/98b21a0cb6ef6d068a99a9346e89812e3ec9d2b1(@modelcontextprotocol/sdk@1.29.0(zod@4.4.2)) '@angular/platform-browser': - specifier: 22.0.0-next.12 - version: 22.0.0-next.12(@angular/animations@22.0.0-next.12(@angular/core@22.0.0-next.12(@angular/compiler@22.0.0-next.12)(rxjs@7.8.2)(zone.js@0.16.2)))(@angular/common@22.0.0-next.12(@angular/core@22.0.0-next.12(@angular/compiler@22.0.0-next.12)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.0.0-next.12(@angular/compiler@22.0.0-next.12)(rxjs@7.8.2)(zone.js@0.16.2)) + specifier: 22.0.0-rc.0 + version: 22.0.0-rc.0(@angular/animations@22.0.0-rc.0(@angular/core@22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2)))(@angular/common@22.0.0-rc.0(@angular/core@22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2)) '@angular/platform-server': - specifier: 22.0.0-next.12 - version: 22.0.0-next.12(@angular/common@22.0.0-next.12(@angular/core@22.0.0-next.12(@angular/compiler@22.0.0-next.12)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/compiler@22.0.0-next.12)(@angular/core@22.0.0-next.12(@angular/compiler@22.0.0-next.12)(rxjs@7.8.2)(zone.js@0.16.2))(@angular/platform-browser@22.0.0-next.12(@angular/animations@22.0.0-next.12(@angular/core@22.0.0-next.12(@angular/compiler@22.0.0-next.12)(rxjs@7.8.2)(zone.js@0.16.2)))(@angular/common@22.0.0-next.12(@angular/core@22.0.0-next.12(@angular/compiler@22.0.0-next.12)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.0.0-next.12(@angular/compiler@22.0.0-next.12)(rxjs@7.8.2)(zone.js@0.16.2)))(rxjs@7.8.2) + specifier: 22.0.0-rc.0 + version: 22.0.0-rc.0(@angular/common@22.0.0-rc.0(@angular/core@22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/compiler@22.0.0-rc.0)(@angular/core@22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2))(@angular/platform-browser@22.0.0-rc.0(@angular/animations@22.0.0-rc.0(@angular/core@22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2)))(@angular/common@22.0.0-rc.0(@angular/core@22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2)))(rxjs@7.8.2) '@angular/router': - specifier: 22.0.0-next.12 - version: 22.0.0-next.12(@angular/common@22.0.0-next.12(@angular/core@22.0.0-next.12(@angular/compiler@22.0.0-next.12)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.0.0-next.12(@angular/compiler@22.0.0-next.12)(rxjs@7.8.2)(zone.js@0.16.2))(@angular/platform-browser@22.0.0-next.12(@angular/animations@22.0.0-next.12(@angular/core@22.0.0-next.12(@angular/compiler@22.0.0-next.12)(rxjs@7.8.2)(zone.js@0.16.2)))(@angular/common@22.0.0-next.12(@angular/core@22.0.0-next.12(@angular/compiler@22.0.0-next.12)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.0.0-next.12(@angular/compiler@22.0.0-next.12)(rxjs@7.8.2)(zone.js@0.16.2)))(rxjs@7.8.2) + specifier: 22.0.0-rc.0 + version: 22.0.0-rc.0(@angular/common@22.0.0-rc.0(@angular/core@22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2))(@angular/platform-browser@22.0.0-rc.0(@angular/animations@22.0.0-rc.0(@angular/core@22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2)))(@angular/common@22.0.0-rc.0(@angular/core@22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2)))(rxjs@7.8.2) '@angular/service-worker': - specifier: 22.0.0-next.12 - version: 22.0.0-next.12(@angular/core@22.0.0-next.12(@angular/compiler@22.0.0-next.12)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2) + specifier: 22.0.0-rc.0 + version: 22.0.0-rc.0(@angular/core@22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2) '@babel/core': specifier: 7.29.0 version: 7.29.0 @@ -326,14 +326,14 @@ importers: specifier: 29.1.1 version: 29.1.1 ng-packagr: - specifier: 22.0.0-next.4 - version: 22.0.0-next.4(@angular/compiler-cli@22.0.0-next.12(@angular/compiler@22.0.0-next.12)(typescript@6.0.3))(tslib@2.8.1)(typescript@6.0.3) + specifier: 22.0.0-rc.0 + version: 22.0.0-rc.0(@angular/compiler-cli@22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(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.5 - version: 4.1.5(@opentelemetry/api@1.9.1)(@types/node@24.12.2)(@vitest/coverage-v8@4.1.5)(jiti@2.7.0)(jsdom@29.1.1)(less@4.6.4)(sass@1.99.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0) + version: 4.1.5(@opentelemetry/api@1.9.1)(@types/node@24.12.4)(@vitest/coverage-v8@4.1.5)(jiti@2.7.0)(jsdom@29.1.1)(less@4.6.4)(sass@1.99.0)(terser@5.46.2)(tsx@4.22.1)(yaml@2.9.0) packages/angular/build: dependencies: @@ -354,10 +354,10 @@ importers: version: 7.24.7 '@inquirer/confirm': specifier: 6.0.12 - version: 6.0.12(@types/node@24.12.2) + version: 6.0.12(@types/node@24.12.4) '@vitejs/plugin-basic-ssl': specifier: 2.3.0 - version: 2.3.0(vite@7.3.2(@types/node@24.12.2)(jiti@2.7.0)(less@4.6.4)(sass@1.99.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0)) + version: 2.3.0(vite@7.3.2(@types/node@24.12.4)(jiti@2.7.0)(less@4.6.4)(sass@1.99.0)(terser@5.46.2)(tsx@4.22.1)(yaml@2.9.0)) beasties: specifier: 0.4.2 version: 0.4.2 @@ -408,7 +408,7 @@ importers: version: 0.2.16 vite: specifier: 7.3.2 - version: 7.3.2(@types/node@24.12.2)(jiti@2.7.0)(less@4.6.4)(sass@1.99.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0) + version: 7.3.2(@types/node@24.12.4)(jiti@2.7.0)(less@4.6.4)(sass@1.99.0)(terser@5.46.2)(tsx@4.22.1)(yaml@2.9.0) watchpack: specifier: 2.5.1 version: 2.5.1 @@ -429,8 +429,8 @@ importers: specifier: 4.6.4 version: 4.6.4 ng-packagr: - specifier: 22.0.0-next.4 - version: 22.0.0-next.4(@angular/compiler-cli@22.0.0-next.12(@angular/compiler@22.0.0-next.12)(typescript@6.0.3))(tslib@2.8.1)(typescript@6.0.3) + specifier: 22.0.0-rc.0 + version: 22.0.0-rc.0(@angular/compiler-cli@22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(typescript@6.0.3))(tslib@2.8.1)(typescript@6.0.3) postcss: specifier: 8.5.14 version: 8.5.14 @@ -442,7 +442,7 @@ importers: version: 7.8.2 vitest: specifier: 4.1.5 - version: 4.1.5(@opentelemetry/api@1.9.1)(@types/node@24.12.2)(@vitest/coverage-v8@4.1.5)(jiti@2.7.0)(jsdom@29.1.1)(less@4.6.4)(sass@1.99.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0) + version: 4.1.5(@opentelemetry/api@1.9.1)(@types/node@24.12.4)(@vitest/coverage-v8@4.1.5)(jiti@2.7.0)(jsdom@29.1.1)(less@4.6.4)(sass@1.99.0)(terser@5.46.2)(tsx@4.22.1)(yaml@2.9.0) optionalDependencies: lmdb: specifier: 3.5.4 @@ -461,10 +461,10 @@ importers: version: link:../../angular_devkit/schematics '@inquirer/prompts': specifier: 8.4.2 - version: 8.4.2(@types/node@24.12.2) + version: 8.4.2(@types/node@24.12.4) '@listr2/prompt-adapter-inquirer': specifier: 4.2.3 - version: 4.2.3(@inquirer/prompts@8.4.2(@types/node@24.12.2))(@types/node@24.12.2)(listr2@10.2.1) + version: 4.2.3(@inquirer/prompts@8.4.2(@types/node@24.12.4))(@types/node@24.12.4)(listr2@10.2.1) '@modelcontextprotocol/sdk': specifier: 1.29.0 version: 1.29.0(zod@4.4.2) @@ -527,23 +527,23 @@ importers: specifier: workspace:* version: link:../../angular_devkit/schematics '@angular/common': - specifier: 22.0.0-next.12 - version: 22.0.0-next.12(@angular/core@22.0.0-next.12(@angular/compiler@22.0.0-next.12)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2) + specifier: 22.0.0-rc.0 + version: 22.0.0-rc.0(@angular/core@22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2) '@angular/compiler': - specifier: 22.0.0-next.12 - version: 22.0.0-next.12 + specifier: 22.0.0-rc.0 + version: 22.0.0-rc.0 '@angular/core': - specifier: 22.0.0-next.12 - version: 22.0.0-next.12(@angular/compiler@22.0.0-next.12)(rxjs@7.8.2)(zone.js@0.16.2) + specifier: 22.0.0-rc.0 + version: 22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2) '@angular/platform-browser': - specifier: 22.0.0-next.12 - version: 22.0.0-next.12(@angular/animations@22.0.0-next.12(@angular/core@22.0.0-next.12(@angular/compiler@22.0.0-next.12)(rxjs@7.8.2)(zone.js@0.16.2)))(@angular/common@22.0.0-next.12(@angular/core@22.0.0-next.12(@angular/compiler@22.0.0-next.12)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.0.0-next.12(@angular/compiler@22.0.0-next.12)(rxjs@7.8.2)(zone.js@0.16.2)) + specifier: 22.0.0-rc.0 + version: 22.0.0-rc.0(@angular/animations@22.0.0-rc.0(@angular/core@22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2)))(@angular/common@22.0.0-rc.0(@angular/core@22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2)) '@angular/platform-server': - specifier: 22.0.0-next.12 - version: 22.0.0-next.12(@angular/common@22.0.0-next.12(@angular/core@22.0.0-next.12(@angular/compiler@22.0.0-next.12)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/compiler@22.0.0-next.12)(@angular/core@22.0.0-next.12(@angular/compiler@22.0.0-next.12)(rxjs@7.8.2)(zone.js@0.16.2))(@angular/platform-browser@22.0.0-next.12(@angular/animations@22.0.0-next.12(@angular/core@22.0.0-next.12(@angular/compiler@22.0.0-next.12)(rxjs@7.8.2)(zone.js@0.16.2)))(@angular/common@22.0.0-next.12(@angular/core@22.0.0-next.12(@angular/compiler@22.0.0-next.12)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.0.0-next.12(@angular/compiler@22.0.0-next.12)(rxjs@7.8.2)(zone.js@0.16.2)))(rxjs@7.8.2) + specifier: 22.0.0-rc.0 + version: 22.0.0-rc.0(@angular/common@22.0.0-rc.0(@angular/core@22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/compiler@22.0.0-rc.0)(@angular/core@22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2))(@angular/platform-browser@22.0.0-rc.0(@angular/animations@22.0.0-rc.0(@angular/core@22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2)))(@angular/common@22.0.0-rc.0(@angular/core@22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2)))(rxjs@7.8.2) '@angular/router': - specifier: 22.0.0-next.12 - version: 22.0.0-next.12(@angular/common@22.0.0-next.12(@angular/core@22.0.0-next.12(@angular/compiler@22.0.0-next.12)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.0.0-next.12(@angular/compiler@22.0.0-next.12)(rxjs@7.8.2)(zone.js@0.16.2))(@angular/platform-browser@22.0.0-next.12(@angular/animations@22.0.0-next.12(@angular/core@22.0.0-next.12(@angular/compiler@22.0.0-next.12)(rxjs@7.8.2)(zone.js@0.16.2)))(@angular/common@22.0.0-next.12(@angular/core@22.0.0-next.12(@angular/compiler@22.0.0-next.12)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.0.0-next.12(@angular/compiler@22.0.0-next.12)(rxjs@7.8.2)(zone.js@0.16.2)))(rxjs@7.8.2) + specifier: 22.0.0-rc.0 + version: 22.0.0-rc.0(@angular/common@22.0.0-rc.0(@angular/core@22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2))(@angular/platform-browser@22.0.0-rc.0(@angular/animations@22.0.0-rc.0(@angular/core@22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2)))(@angular/common@22.0.0-rc.0(@angular/core@22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2)))(rxjs@7.8.2) '@schematics/angular': specifier: workspace:* version: link:../../schematics/angular @@ -729,8 +729,8 @@ importers: specifier: 3.0.4 version: 3.0.4(bufferutil@4.1.0)(utf-8-validate@6.0.6) ng-packagr: - specifier: 22.0.0-next.4 - version: 22.0.0-next.4(@angular/compiler-cli@22.0.0-next.12(@angular/compiler@22.0.0-next.12)(typescript@6.0.3))(tslib@2.8.1)(typescript@6.0.3) + specifier: 22.0.0-rc.0 + version: 22.0.0-rc.0(@angular/compiler-cli@22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(typescript@6.0.3))(tslib@2.8.1)(typescript@6.0.3) undici: specifier: 8.2.0 version: 8.2.0 @@ -814,7 +814,7 @@ importers: version: link:../schematics '@inquirer/prompts': specifier: 8.4.2 - version: 8.4.2(@types/node@24.12.2) + version: 8.4.2(@types/node@24.12.4) packages/ngtools/webpack: devDependencies: @@ -822,11 +822,11 @@ importers: specifier: workspace:0.0.0-PLACEHOLDER version: link:../../angular_devkit/core '@angular/compiler': - specifier: 22.0.0-next.12 - version: 22.0.0-next.12 + specifier: 22.0.0-rc.0 + version: 22.0.0-rc.0 '@angular/compiler-cli': - specifier: 22.0.0-next.12 - version: 22.0.0-next.12(@angular/compiler@22.0.0-next.12)(typescript@6.0.3) + specifier: 22.0.0-rc.0 + version: 22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(typescript@6.0.3) typescript: specifier: 6.0.3 version: 6.0.3 @@ -935,47 +935,47 @@ packages: resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} engines: {node: '>=6.0.0'} - '@angular/animations@22.0.0-next.12': - resolution: {integrity: sha512-lhn6S0rlXIMccNzyCbA/1OyMzRBzVVVD/7G0hyk8MOGPyueNrla0lciabkyv9OxVVVmeQm2Fnpkx9xmCz0BP4Q==} + '@angular/animations@22.0.0-rc.0': + resolution: {integrity: sha512-2voJV4M6uGsV9jYFfIb/2N3ZHc7WFtB2KKnsdr7U4/b6NZJRPofeO7/06+6hL1bK72K4I/N+Z6o2fqmeAzitRg==} engines: {node: ^22.22.0 || ^24.13.1 || >=26.0.0} peerDependencies: - '@angular/core': 22.0.0-next.12 + '@angular/core': 22.0.0-rc.0 - '@angular/cdk@22.0.0-next.8': - resolution: {integrity: sha512-6H/A2ExBPz1KpxqrB2C3U2c9Dcsvq9Xgttpv2ap73h8EVyWqilxmt6lsCl8JefcovEMjnL40srHnvPJnI+Ri1g==} + '@angular/cdk@22.0.0-rc.0': + resolution: {integrity: sha512-YDFXp7UF0sU8yhKUL3TQyxAZydAZheqULroCo19t88Pku3pl4VEy+bLAsaP6CgI3s04aohm/N/P2QG7QlNKfCw==} peerDependencies: '@angular/common': ^22.0.0-0 || ^22.1.0-0 || ^22.2.0-0 || ^22.3.0-0 || ^23.0.0-0 '@angular/core': ^22.0.0-0 || ^22.1.0-0 || ^22.2.0-0 || ^22.3.0-0 || ^23.0.0-0 '@angular/platform-browser': ^22.0.0-0 || ^22.1.0-0 || ^22.2.0-0 || ^22.3.0-0 || ^23.0.0-0 rxjs: ^6.5.3 || ^7.4.0 - '@angular/common@22.0.0-next.12': - resolution: {integrity: sha512-PG7r+XfHJAyI9qnHBubcSJxNDURavGxq0Qe/F+TRaCsGzmQ/ojIe3phZyea/HXr72dDVvPrdFNeBIrNCN0D3Rg==} + '@angular/common@22.0.0-rc.0': + resolution: {integrity: sha512-CXANdqoAdkzBi5yqABUMbGW7RP8oOASBYA3CzvRLQbu1Cq0hMmkexaJtjmOTMl2kDyEkNK0vE+8mVAVdt8Cw0w==} engines: {node: ^22.22.0 || ^24.13.1 || >=26.0.0} peerDependencies: - '@angular/core': 22.0.0-next.12 + '@angular/core': 22.0.0-rc.0 rxjs: ^6.5.3 || ^7.4.0 - '@angular/compiler-cli@22.0.0-next.12': - resolution: {integrity: sha512-vrVv0hKbXZmBau4UoqfEUBJ+cVA3M4WcJj0Tn1fyNcou6jLBw3fH4MuNBafpQWGR0oDWv01lK3chVP8XkLUeYg==} + '@angular/compiler-cli@22.0.0-rc.0': + resolution: {integrity: sha512-swhOCT+bwWKJSqNobGOhTw6uxBVOhRF0SN9DpvUYCDVjG/q7eDEKMRAUJ5sg+Iez7w9BOLUfSz2cCXhr7zgpVw==} engines: {node: ^22.22.0 || ^24.13.1 || >=26.0.0} hasBin: true peerDependencies: - '@angular/compiler': 22.0.0-next.12 + '@angular/compiler': 22.0.0-rc.0 typescript: '>=6.0 <6.1' peerDependenciesMeta: typescript: optional: true - '@angular/compiler@22.0.0-next.12': - resolution: {integrity: sha512-/q3Zj9+bkKAE+Myoy6LEey52mX5p2rbnnNqzKFsJ45yni/c12NlDJ1M0BnU+FzI84rQmVPDrq3jkeIyTpDI2eA==} + '@angular/compiler@22.0.0-rc.0': + resolution: {integrity: sha512-eaOfLUJDBr6mtvuUKKS25TWbhnwhAKIml+tonkIEZtBpp2wfbuM3MIRZAntSbAJQaKHJj4oI82mBTKFuJo022Q==} engines: {node: ^22.22.0 || ^24.13.1 || >=26.0.0} - '@angular/core@22.0.0-next.12': - resolution: {integrity: sha512-daGYyqLzfVMUQ+LvQjItyxVFyGnzvxffiyOcTX0t21ZPp+WxR4gC/q6PMzVUD1Jf25iS6TrBo3nD/ep6GbiD0A==} + '@angular/core@22.0.0-rc.0': + resolution: {integrity: sha512-+P2hVciCEH3MuXTXIuFiGpvcCivgCXB3agCakWHQ7rMiEmRB2oILTSKH5rRPlwPyoETPwfPeVn7tiAAaOuuGFg==} engines: {node: ^22.22.0 || ^24.13.1 || >=26.0.0} peerDependencies: - '@angular/compiler': 22.0.0-next.12 + '@angular/compiler': 22.0.0-rc.0 rxjs: ^6.5.3 || ^7.4.0 zone.js: ~0.15.0 || ~0.16.0 peerDependenciesMeta: @@ -984,74 +984,74 @@ packages: zone.js: optional: true - '@angular/forms@22.0.0-next.12': - resolution: {integrity: sha512-DTUVS29tbm/g5P8atU/818IeIgsToPjZa/SMHfHY1VySxbJ9zpiXtWonTIANlZm1dla3ohrJ3G43PedW48nc7w==} + '@angular/forms@22.0.0-rc.0': + resolution: {integrity: sha512-FIXEVK+tvL8lHIsbUHa1Lot9obpJme0pmh2k9//dTKoPgiODJ8Hg4CIKwMllk4RsSukQwvZzjghvvkQ8vUXnyw==} engines: {node: ^22.22.0 || ^24.13.1 || >=26.0.0} peerDependencies: - '@angular/common': 22.0.0-next.12 - '@angular/core': 22.0.0-next.12 - '@angular/platform-browser': 22.0.0-next.12 + '@angular/common': 22.0.0-rc.0 + '@angular/core': 22.0.0-rc.0 + '@angular/platform-browser': 22.0.0-rc.0 rxjs: ^6.5.3 || ^7.4.0 - '@angular/localize@22.0.0-next.12': - resolution: {integrity: sha512-KHRG2FpCYiy5pntfBvnl11ULzoS5t8nUPVJcfd7oe7RQfd+HyA/Sk56WPafE4Izu6hB8yCCQT4hq3yIgSKV5rg==} + '@angular/localize@22.0.0-rc.0': + resolution: {integrity: sha512-4h3SnRR4qNbvGOzQCnQVJZI0+Q3szpzobWnHjdgkiIZpab1hTFRmL02joXdLdv+I/Nw8MkFpZIkDv+BjCKwqDw==} engines: {node: ^22.22.0 || ^24.13.1 || >=26.0.0} hasBin: true peerDependencies: - '@angular/compiler': 22.0.0-next.12 - '@angular/compiler-cli': 22.0.0-next.12 + '@angular/compiler': 22.0.0-rc.0 + '@angular/compiler-cli': 22.0.0-rc.0 - '@angular/material@22.0.0-next.8': - resolution: {integrity: sha512-sQUXI2gzVv8DCryapqzYTgJNrCAh+p9ugEkUtUVORvVTyBG95pqYZ5SU9UZFkqoSR/FHGDlbD7Fry/Jyuvrm0g==} + '@angular/material@22.0.0-rc.0': + resolution: {integrity: sha512-YDmmc83WdjTLAu+avL7bSbzvhsiWj7zq/hWYTwauvlkn8bR4j7eGG16yzV2mDAPsX1MgyK7Z0bl616tzhDo14w==} peerDependencies: - '@angular/cdk': 22.0.0-next.8 + '@angular/cdk': 22.0.0-rc.0 '@angular/common': ^22.0.0-0 || ^22.1.0-0 || ^22.2.0-0 || ^22.3.0-0 || ^23.0.0-0 '@angular/core': ^22.0.0-0 || ^22.1.0-0 || ^22.2.0-0 || ^22.3.0-0 || ^23.0.0-0 '@angular/forms': ^22.0.0-0 || ^22.1.0-0 || ^22.2.0-0 || ^22.3.0-0 || ^23.0.0-0 '@angular/platform-browser': ^22.0.0-0 || ^22.1.0-0 || ^22.2.0-0 || ^22.3.0-0 || ^23.0.0-0 rxjs: ^6.5.3 || ^7.4.0 - '@angular/ng-dev@https://codeload.github.com/angular/dev-infra-private-ng-dev-builds/tar.gz/2c36222db3f44751284cc93b3806dbe1baee583a': - resolution: {gitHosted: true, tarball: https://codeload.github.com/angular/dev-infra-private-ng-dev-builds/tar.gz/2c36222db3f44751284cc93b3806dbe1baee583a} - version: 0.0.0-6ef1cf3158022456bf1f7031de79b7e44fe479b2 + '@angular/ng-dev@https://codeload.github.com/angular/dev-infra-private-ng-dev-builds/tar.gz/98b21a0cb6ef6d068a99a9346e89812e3ec9d2b1': + resolution: {gitHosted: true, integrity: sha512-AwkT8gIA2duICq9kqxtH7i9nvh4LaJRd8/V1uExEFlTx1LLijdF9Z8hm8WZuJ+idk0MAIQcxwZMp8MeY00y8Xw==, tarball: https://codeload.github.com/angular/dev-infra-private-ng-dev-builds/tar.gz/98b21a0cb6ef6d068a99a9346e89812e3ec9d2b1} + version: 0.0.0-49e2dadc4b17b0ff10a76329065c9b7e1fff3e91 hasBin: true - '@angular/platform-browser@22.0.0-next.12': - resolution: {integrity: sha512-qdCfNO25c52RGx7pRD1cdBs+Qee+WULO7zHjZ2FV4x/hj8gpGk41FuMsp2TdZAsxEqdGl7udO6e6addfpmDVlw==} + '@angular/platform-browser@22.0.0-rc.0': + resolution: {integrity: sha512-eYFmQKQzd3lhvJj1Str7zwR42WDa3NvFHMnj4wKkd6v+3Y8QQ3SBCASe3Xidoyt3HOV37rB9NPy6Ogbirovipg==} engines: {node: ^22.22.0 || ^24.13.1 || >=26.0.0} peerDependencies: - '@angular/animations': 22.0.0-next.12 - '@angular/common': 22.0.0-next.12 - '@angular/core': 22.0.0-next.12 + '@angular/animations': 22.0.0-rc.0 + '@angular/common': 22.0.0-rc.0 + '@angular/core': 22.0.0-rc.0 peerDependenciesMeta: '@angular/animations': optional: true - '@angular/platform-server@22.0.0-next.12': - resolution: {integrity: sha512-jRcJzqiz31alb/hWTunoo424clEpue9ygYF76adMOPE0zTVVNAFDs9Gvo4NfJbWMmXxoI2i0ibB2dtE9kE2+hQ==} + '@angular/platform-server@22.0.0-rc.0': + resolution: {integrity: sha512-KNgYHtOUl9yB48mdOzK7or2bVP3iEIvpW+rGzQlq70gHfUjR77w0SJWo566wXSFTsnYlt0cA+SyZ070KJwGcPg==} engines: {node: ^22.22.0 || ^24.13.1 || >=26.0.0} peerDependencies: - '@angular/common': 22.0.0-next.12 - '@angular/compiler': 22.0.0-next.12 - '@angular/core': 22.0.0-next.12 - '@angular/platform-browser': 22.0.0-next.12 + '@angular/common': 22.0.0-rc.0 + '@angular/compiler': 22.0.0-rc.0 + '@angular/core': 22.0.0-rc.0 + '@angular/platform-browser': 22.0.0-rc.0 rxjs: ^6.5.3 || ^7.4.0 - '@angular/router@22.0.0-next.12': - resolution: {integrity: sha512-x8+P6lcJyukJcTgu6vTgGB5RLCZvNXfHTjlukPr8jMoOyMxFPjHV33g+87pmVBjDKRK5pyRnXTqkanQwnwbguA==} + '@angular/router@22.0.0-rc.0': + resolution: {integrity: sha512-c0uySQaPja15uRtQN88RlEHrejxgKm25Qj5hjMhob332CQ4/SjHFCmn+VpTx6eCSlCG1Awki/xG/sbcJeK1Usg==} engines: {node: ^22.22.0 || ^24.13.1 || >=26.0.0} peerDependencies: - '@angular/common': 22.0.0-next.12 - '@angular/core': 22.0.0-next.12 - '@angular/platform-browser': 22.0.0-next.12 + '@angular/common': 22.0.0-rc.0 + '@angular/core': 22.0.0-rc.0 + '@angular/platform-browser': 22.0.0-rc.0 rxjs: ^6.5.3 || ^7.4.0 - '@angular/service-worker@22.0.0-next.12': - resolution: {integrity: sha512-MbzZrbcgh1fPfS0a7ntVKidwHAU/VcfU/fMWn9P/6uOnrVjwRA/U7mN8c6Az6Qqj/8Dl/Wz49sLBV+B6vwggrA==} + '@angular/service-worker@22.0.0-rc.0': + resolution: {integrity: sha512-LDXbqAFgJCYUAkBnjtbYFR/c7FMzd3XIrJ4XLSv6DzDNJdgYyRJfWBBHBut+GhFfX15GZ368K5n6+LIlS/ks8g==} engines: {node: ^22.22.0 || ^24.13.1 || >=26.0.0} hasBin: true peerDependencies: - '@angular/core': 22.0.0-next.12 + '@angular/core': 22.0.0-rc.0 rxjs: ^6.5.3 || ^7.4.0 '@asamuzakjp/css-color@5.1.11': @@ -2042,72 +2042,72 @@ packages: '@noble/hashes': optional: true - '@firebase/ai@2.11.1': - resolution: {integrity: sha512-WGTF81W3WBKJY+c7xqTzO15OGAkCAs8cpADqflAI0skhTZjIkhF0qyf55rq4Ctt6jKygkv99rPfMrjAHTgXaVQ==} + '@firebase/ai@2.12.0': + resolution: {integrity: sha512-b+OL4vdyiSLZL/7dLd67V55CjKJvU9MpNmwnday7eA6GG2+J4iwUEsEHgw0/jKY3A41FfkF0SrnYFvtKbQZ65A==} engines: {node: '>=20.0.0'} peerDependencies: '@firebase/app': 0.x '@firebase/app-types': 0.x - '@firebase/analytics-compat@0.2.27': - resolution: {integrity: sha512-ZObpYpAxL6JfgH7GnvlDD0sbzGZ0o4nijV8skatV9ZX49hJtCYbFqaEcPYptT94rgX1KUoKEderC7/fa7hybtw==} + '@firebase/analytics-compat@0.2.28': + resolution: {integrity: sha512-lIAlqUUbBu93FJMlQfslryQtBwwzdzvp23ePC6FNgymXk6Ook5v4Uvc0vdutvoIeqmyA3LfP0ZeRFK8+11kOOQ==} peerDependencies: '@firebase/app-compat': 0.x - '@firebase/analytics-types@0.8.3': - resolution: {integrity: sha512-VrIp/d8iq2g501qO46uGz3hjbDb8xzYMrbu8Tp0ovzIzrvJZ2fvmj649gTjge/b7cCCcjT0H37g1gVtlNhnkbg==} + '@firebase/analytics-types@0.8.4': + resolution: {integrity: sha512-zQ+XTgkwH6CY/eUSHJRP7e4LxM30RCxlCmob5sy2axs25GE3Ny0XdgpDscMTHHQIGqWkxPXad4w2Mw9sCgT8zQ==} - '@firebase/analytics@0.10.21': - resolution: {integrity: sha512-j2y2q65BlgLGB5Pwjhv/Jopw2X/TBTzvAtI5z/DSp56U4wBj7LfhBfzbdCtFPges+Wz0g55GdoawXibOH5jGng==} + '@firebase/analytics@0.10.22': + resolution: {integrity: sha512-8BSaq/QRGU1+xyi8L2PTLTJU7MH9aMA72RQdIxrbhWFauOZY9OXo8f2YDN/972xA8d588tlnNVEQ2Mo69pT9Ow==} peerDependencies: '@firebase/app': 0.x - '@firebase/app-check-compat@0.4.2': - resolution: {integrity: sha512-M91NhxqbSkI0ChkJWy69blC+rPr6HEgaeRllddSaU1pQ/7IiegeCQM9pPDIgvWnwnBSzKhUHpe6ro/jhJ+cvzw==} + '@firebase/app-check-compat@0.4.3': + resolution: {integrity: sha512-L3AKIRTJxT9b7cDUH3OyV8gWTnmW3vYkwdzRsukWt4kbPBTct12xalnyvHDkm1lKkr+cQq/4uzBx1bOWsQ2ciw==} engines: {node: '>=20.0.0'} peerDependencies: '@firebase/app-compat': 0.x - '@firebase/app-check-interop-types@0.3.3': - resolution: {integrity: sha512-gAlxfPLT2j8bTI/qfe3ahl2I2YcBQ8cFIBdhAQA4I2f3TndcO+22YizyGYuttLHPQEpWkhmpFW60VCFEPg4g5A==} + '@firebase/app-check-interop-types@0.3.4': + resolution: {integrity: sha512-zz3i6e13B8BfWiLy8MABtTh8aGIACgKbf9UVnyHcWs+yQzJXgQcl8A46b0zfaiJHdQ+niF0ouAfcpuf+3LMPQg==} - '@firebase/app-check-types@0.5.3': - resolution: {integrity: sha512-hyl5rKSj0QmwPdsAxrI5x1otDlByQ7bvNvVt8G/XPO2CSwE++rmSVf3VEhaeOR4J8ZFaF0Z0NDSmLejPweZ3ng==} + '@firebase/app-check-types@0.5.4': + resolution: {integrity: sha512-xV7JsIyzVr15aA7f3Pi0rB9gdBuVubs89FGA8VkRYA4g0l78poADgdfrScgf7NndSg9mm7cR7PJyY0+t22KaGw==} - '@firebase/app-check@0.11.2': - resolution: {integrity: sha512-jcXQVMHAQ5AEKzVD5C7s5fmAYeFOuN6lAJeNTgZK2B9aLnofWaJt8u1A8Idm8gpsBBYSaY3cVyeH5SWMOVPBLQ==} + '@firebase/app-check@0.11.3': + resolution: {integrity: sha512-aJ4DfubWfTO8/2vhEhIAizOoOmiycESTU32e+OUgbWcS/G3PA4Vxlr/9zaiN2wfUG2AptQ7DTvj00tyuFZP5Bg==} engines: {node: '>=20.0.0'} peerDependencies: '@firebase/app': 0.x - '@firebase/app-compat@0.5.11': - resolution: {integrity: sha512-KaACDjXkK5VLpI01vEs592R7/8s5DjFdIXfKoR385ly1SmK3Tu+jMHCIB4MsiY5jsez6v7VlEX/3rJ90dVkHyA==} + '@firebase/app-compat@0.5.12': + resolution: {integrity: sha512-Pe513OBerK/CIBxz4/za9atd5MsZtd6DzHz4cmqkvkrcDWhQChAoHBpZ3McuZNuSP8YZiKwfX/J1frR07l15/w==} engines: {node: '>=20.0.0'} - '@firebase/app-types@0.9.4': - resolution: {integrity: sha512-crX9TA5SVYZwLPG7/R16IsH8FLlgkPXjJUVhsVpHVDSqJiq3D/NuFTM5ctxGTExXAOeIn//69tQw47CPerM8MQ==} + '@firebase/app-types@0.9.5': + resolution: {integrity: sha512-YevqTjvo7Iujsa9Dwowmd6dSoElhzmD63ZSrq6bzjvQ6POjYgNjOFHLmNIgJs48eNO093NCERibuFnxbfOvU7A==} - '@firebase/app@0.14.11': - resolution: {integrity: sha512-yxADFW35LYkP8oSGobGsYIrI42I+GPCvKTNHx4meT9Yq3C950IVz1eANoBk822I9tbKv1wyv9P4Bv1G5TpucFw==} + '@firebase/app@0.14.12': + resolution: {integrity: sha512-FT+HoNp1NdaZ/N26hCwV3WbxS1m6gTn3p2QRBQ3KH7YqyCQqJx0iT7126RgVk68/Rq+9DeL/zCFnHZ0C4u1nLQ==} engines: {node: '>=20.0.0'} - '@firebase/auth-compat@0.6.5': - resolution: {integrity: sha512-IfVsafZ3QiXbsydXTP/XMI0wVYbJLI1rkb8Qqf03/h5FnL+upbbPOb+6Yj3RpcX+Y1iP5Uh18lxTHlXfbiyAow==} + '@firebase/auth-compat@0.6.6': + resolution: {integrity: sha512-KDJ/GAf/rt7galOpn3DRb2buFfGkZCsHTryKjXDG0eeRnok4+2B4nnkMOMdjRnPkElmcJv2Ao0vEA6kp5m98PQ==} engines: {node: '>=20.0.0'} peerDependencies: '@firebase/app-compat': 0.x - '@firebase/auth-interop-types@0.2.4': - resolution: {integrity: sha512-JPgcXKCuO+CWqGDnigBtvo09HeBs5u/Ktc2GaFj2m01hLarbxthLNm7Fk8iOP1aqAtXV+fnnGj7U28xmk7IwVA==} + '@firebase/auth-interop-types@0.2.5': + resolution: {integrity: sha512-1Li/YuBDBAXcKv7BzY4U28gontUmAaw53sYiqbaVOMCFb2lFKK/c3CGMUWqtwe7+TXrl3poWnTCL5umYBg85Eg==} - '@firebase/auth-types@0.13.0': - resolution: {integrity: sha512-S/PuIjni0AQRLF+l9ck0YpsMOdE8GO2KU6ubmBB7P+7TJUCQDa3R1dlgYm9UzGbbePMZsp0xzB93f2b/CgxMOg==} + '@firebase/auth-types@0.13.1': + resolution: {integrity: sha512-0c1Mnid0uMDfGJHeUS4zfvBa4/CedJXotGy/n/NZJnBjwiJawt0ZYU+wH2VAVLiRCEfG2ncCkAX3yd1/2nrB7g==} peerDependencies: '@firebase/app-types': 0.x '@firebase/util': 1.x - '@firebase/auth@1.13.0': - resolution: {integrity: sha512-mKkSLNym3UbnnZ06dAmtqzp5EpPGCANGCZDJbkoR135aoUdKG6Aizwcnp29RzsQpwH0nmy5nay17Sfbsh9oY8A==} + '@firebase/auth@1.13.1': + resolution: {integrity: sha512-/1nkKY/MicI+I9WWcx6R4NKs77AaW9NQ0IwsFdUBomWrW0/cXEmopfM2dtLm2oI1qG6z6vom3CXZDHJIJXoMuw==} engines: {node: '>=20.0.0'} peerDependencies: '@firebase/app': 0.x @@ -2116,141 +2116,141 @@ packages: '@react-native-async-storage/async-storage': optional: true - '@firebase/component@0.7.2': - resolution: {integrity: sha512-iyVDGc6Vjx7Rm0cAdccLH/NG6fADsgJak/XW9IA2lPf8AjIlsemOpFGKczYyPHxm4rnKdR8z6sK4+KEC7NwmEg==} + '@firebase/component@0.7.3': + resolution: {integrity: sha512-wFofIaa2879ogD/WvkjYXJxRmfnL0scen6ORgaC3na1FNOR9ASIUANQdhqQcmWu/h77/pVHY7ch5flewa5Bcew==} engines: {node: '>=20.0.0'} - '@firebase/data-connect@0.6.0': - resolution: {integrity: sha512-OiugPRcdlhqXF97oR9CjVObILmsWU0dFUS0gXNYEe4bDfpW8pZmQ5GqhIPPtLWbT/0W2lMJJD7VILFMk+xuHPg==} + '@firebase/data-connect@0.7.0': + resolution: {integrity: sha512-ar9sNOJh5poQCSMSVlnVE8eo8+usTD1POWDCv65omkKUvnFMcdXaQ7J/e7WGKqJzcEMgiezSX/TZiKHZkItMbQ==} peerDependencies: '@firebase/app': 0.x - '@firebase/database-compat@2.1.3': - resolution: {integrity: sha512-GMyfWjD8mehjg/QpNkY/tl9G/MoeugPeg91n9D0atggxbWuKF/2KhVPHZDH+XmoP0EKYqMWYTtKxBsaBaNKLYQ==} + '@firebase/database-compat@2.1.4': + resolution: {integrity: sha512-3pK35F1MAgmqFJQlf2nhQl44vtAXQO1uaCaQOEUI9kCRtLFqi7N+QRKR7lFZPg+xIZIyubgxQaxY69YgfZRZWg==} engines: {node: '>=20.0.0'} - '@firebase/database-types@1.0.19': - resolution: {integrity: sha512-FqewjUZmV9LqFfuEnmgdcUpiOUz7qwLXxnm/H8BcMFEzQXtd1yyUDm8ex5VRad2nuTE+ahOuCjUAM/cyDncO+g==} + '@firebase/database-types@1.0.20': + resolution: {integrity: sha512-kegbOk/w8iU64pr0q6k2ItyNGjnQBMHFhwS7ohdWI4W+pc0/zhhdGXTdFj6X1oxItRjPoYOsSQmERgBkn/ihxw==} - '@firebase/database@1.1.2': - resolution: {integrity: sha512-lP96CMjMPy/+d1d9qaaHjHHdzdwvEOuyyLq9ehX89e2XMKwS1jHNzYBO+42bdSumuj5ukPbmnFtViZu8YOMT+w==} + '@firebase/database@1.1.3': + resolution: {integrity: sha512-XwWCa+E4TvNGpGwXrycLRNfdogADwFcvuhyow6wDWma9W54roaQIhe+4PM0KiLsIftBdSCGI7OKCXrdSRHbIhw==} engines: {node: '>=20.0.0'} - '@firebase/firestore-compat@0.4.8': - resolution: {integrity: sha512-WK9NJRpnosGD2nuyjdr7K+Ht7AxRYJlTF62myI4rRA7ibJOosbecvjacR5oirJ7s1BgNS6qzcBw7n4fD3a5w1w==} + '@firebase/firestore-compat@0.4.9': + resolution: {integrity: sha512-NPtBuFr79BbIQJXFWhW4xFC6rBksK8/ewqCTYbbAYfZBDDx0/iHTUj4WpKi5D4d0Pn2Md/3T/e5V9379G5N/Zg==} engines: {node: '>=20.0.0'} peerDependencies: '@firebase/app-compat': 0.x - '@firebase/firestore-types@3.0.3': - resolution: {integrity: sha512-hD2jGdiWRxB/eZWF89xcK9gF8wvENDJkzpVFb4aGkzfEaKxVRD1kjz1t1Wj8VZEp2LCB53Yx1zD8mrhQu87R6Q==} + '@firebase/firestore-types@3.0.4': + resolution: {integrity: sha512-jGn+JSS4X9zZsrfu7Yw66v5YRdOLD1oyQh4USR0xWl4CUqV/DA6bNIXRPpxH/cUl3iVTNiP6MN7g+EL42A4qfA==} peerDependencies: '@firebase/app-types': 0.x '@firebase/util': 1.x - '@firebase/firestore@4.14.0': - resolution: {integrity: sha512-bZc6YOjRkMBVA16527tgzi6iN9n//xRB3Mmx/R+Gr6UAP/+xrIKOejQIcn1hh+tCzNT8jO0jI+kWox5J4tB/qQ==} + '@firebase/firestore@4.14.1': + resolution: {integrity: sha512-PouS0NJZ3NYOZE/tPDvXa8VUeJ10Ll//7jIdFvMYdhQkd/P3O7nlqhyoTmY0h8Xa9hxg+H0j6gxUytJcoZ9YOg==} engines: {node: '>=20.0.0'} peerDependencies: '@firebase/app': 0.x - '@firebase/functions-compat@0.4.3': - resolution: {integrity: sha512-BxkEwWgx1of0tKaao/r2VR6WBLk/RAiyztatiONPrPE8gkitFkOnOCxf8i9cUyA5hX5RGt5H30uNn25Q6QNEmQ==} + '@firebase/functions-compat@0.4.4': + resolution: {integrity: sha512-Be+MwhseVf/eFAZwGrFJGok6S7cmsLrAPK8MgyM8LjM0MewTsx2n01WOOca9jio1UsCZOJ0aVyQobnINcdNuIQ==} engines: {node: '>=20.0.0'} peerDependencies: '@firebase/app-compat': 0.x - '@firebase/functions-types@0.6.3': - resolution: {integrity: sha512-EZoDKQLUHFKNx6VLipQwrSMh01A1SaL3Wg6Hpi//x6/fJ6Ee4hrAeswK99I5Ht8roiniKHw4iO0B1Oxj5I4plg==} + '@firebase/functions-types@0.6.4': + resolution: {integrity: sha512-zV6kgqtduR4rUAdC/ilS7kmb93XD7bEZoJDlVBZqlOw2uGGGCNBQBuleww2rr0Ulr3L9o2TDjumEt68/l1f9DQ==} - '@firebase/functions@0.13.3': - resolution: {integrity: sha512-csO7ckK3SSs+NUZW1nms9EK7ckHe/1QOjiP8uAkCYa7ND18s44vjE9g3KxEeIUpyEPqZaX1EhJuFyZjHigAcYw==} + '@firebase/functions@0.13.4': + resolution: {integrity: sha512-oB5rpm2Emxn2+IS1gRelAeT/5tSZMwM/KhqC5LnJsmTNnS1ZDhD7ZMZNgCI8vchTW6PbaXIwEnpUryGuIQsNbg==} engines: {node: '>=20.0.0'} peerDependencies: '@firebase/app': 0.x - '@firebase/installations-compat@0.2.21': - resolution: {integrity: sha512-zahIUkaVKbR8zmTeBHkdfaVl6JGWlhVoSjF7CVH33nFqD3SlPEpEEegn2GNT5iAfsVdtlCyJJ9GW4YKjq+RJKQ==} + '@firebase/installations-compat@0.2.22': + resolution: {integrity: sha512-C/zpAuTP5S9OgKSPvXRupw3hoY/JZSlA1wFjD/Sb7LIQE0FNbcMdO8Y4KXVEkjVzma/DDDDIAzxEXqKMAzc88w==} peerDependencies: '@firebase/app-compat': 0.x - '@firebase/installations-types@0.5.3': - resolution: {integrity: sha512-2FJI7gkLqIE0iYsNQ1P751lO3hER+Umykel+TkLwHj6plzWVxqvfclPUZhcKFVQObqloEBTmpi2Ozn7EkCABAA==} + '@firebase/installations-types@0.5.4': + resolution: {integrity: sha512-U2eFapdHwjb43Vx9o+Pmj4dFfvcHEK1IirEFLqMtWrTHvmdrS3gBpBD1kmJk/9HjsOtoHZxJ2Paoe79e+L1ZPg==} peerDependencies: '@firebase/app-types': 0.x - '@firebase/installations@0.6.21': - resolution: {integrity: sha512-xGFGTeICJZ5vhrmmDukeczIcFULFXybojML2+QSDFoKj5A7zbGN7KzFGSKNhDkIxpjzsYG9IleJyUebuAcmqWA==} + '@firebase/installations@0.6.22': + resolution: {integrity: sha512-ef6nn3GGQTdReCfotRMG77PJZu8CqEbiK5pEoBnM0gTu/Z9v0i/az2p3HABsa/1beQmmyh1OsOjf7P5+pgwdZw==} peerDependencies: '@firebase/app': 0.x - '@firebase/logger@0.5.0': - resolution: {integrity: sha512-cGskaAvkrnh42b3BA3doDWeBmuHFO/Mx5A83rbRDYakPjO9bJtRL3dX7javzc2Rr/JHZf4HlterTW2lUkfeN4g==} + '@firebase/logger@0.5.1': + resolution: {integrity: sha512-vZKLsqE1ABOy8OjQiE7cUTFn4gvaqlk88yp8N94Pk/sDpq61YqZGqmVFZTvOyflTwuYFcWirBdYGoJgbDaXKYQ==} engines: {node: '>=20.0.0'} - '@firebase/messaging-compat@0.2.25': - resolution: {integrity: sha512-eoOQqGLtRlseTdiemTN44LlHZpltK5gnhq8XVUuLgtIOG+odtDzrz2UoTpcJWSzaJQVxNLb/x9f39tHdDM4N4w==} + '@firebase/messaging-compat@0.2.26': + resolution: {integrity: sha512-fn0XvWOfK4tsDLSipwJUW9Cp6ahWA6z+iJHxZ0pHp9MzMSUNQx85yuxZAuI7gkGXfqs7+DqEDHyyS7jDGswrmQ==} peerDependencies: '@firebase/app-compat': 0.x - '@firebase/messaging-interop-types@0.2.3': - resolution: {integrity: sha512-xfzFaJpzcmtDjycpDeCUj0Ge10ATFi/VHVIvEEjDNc3hodVBQADZ7BWQU7CuFpjSHE+eLuBI13z5F/9xOoGX8Q==} + '@firebase/messaging-interop-types@0.2.4': + resolution: {integrity: sha512-wrzITQq+xw5LtygX7O0fu43/k9ABQ4x5H9/sR5m1SbNnhIRI5xd3+raSNJaJkYC4BUhM9A4ZNSnyR2sjhxnb2Q==} - '@firebase/messaging@0.12.25': - resolution: {integrity: sha512-7RhDwoDHlOK1/ou0/LeubxmjcngsTjDdrY/ssg2vwAVpUuVAhQzQvuCAOYxcX5wNC1zCgQ54AP1vdngBwbCmOQ==} + '@firebase/messaging@0.12.26': + resolution: {integrity: sha512-lHVTO9uLofymHVWkYeUtMddIPcmJvSzVbHRB88W6XKfxbcKF+p3QrfqKhDxremSB4NQjUla1Gwn7d9umSMmt/w==} peerDependencies: '@firebase/app': 0.x - '@firebase/performance-compat@0.2.24': - resolution: {integrity: sha512-YRlejH8wLt7ThWao+HXoKUHUrZKGYq+otxkPS+8nuE5PeN1cBXX7NAJl9ueuUkBwMIrnKdnDqL/voHXxDAAt3g==} + '@firebase/performance-compat@0.2.25': + resolution: {integrity: sha512-q6NjTXpIPoFuUmCmMN/maCdTgzT6aExs9xZo+PxfVLj6uLVGvpyAD6XWjmcrb7jChsFBYbq7E5dyNDF7Zhy9kA==} peerDependencies: '@firebase/app-compat': 0.x - '@firebase/performance-types@0.2.3': - resolution: {integrity: sha512-IgkyTz6QZVPAq8GSkLYJvwSLr3LS9+V6vNPQr0x4YozZJiLF5jYixj0amDtATf1X0EtYHqoPO48a9ija8GocxQ==} + '@firebase/performance-types@0.2.4': + resolution: {integrity: sha512-kJSEk7b0uhpcPRyL4SQ/GPujLqk52XNKcXlnsKDbWGAb9vugcLvOU3u6zfEdwd+d8hWJb5S5ZizV1JFFI0nkKg==} - '@firebase/performance@0.7.11': - resolution: {integrity: sha512-V3uAhrz7IYJuji+OgT3qYTGKxpek/TViXti9OSsUJ4AexZ3jQjYH5Yrn7JvBxk8MGiSLsC872hh+BxQiPZsm7g==} + '@firebase/performance@0.7.12': + resolution: {integrity: sha512-fe7nV8teUU3OBHlMUZ9Lw4gLhCW2k4m5Uc3pfWGV+fl8uwJQBGp9Q3lqsJ+HSrFu3Q2pJyLAgrClPGSKyDeYgQ==} peerDependencies: '@firebase/app': 0.x - '@firebase/remote-config-compat@0.2.23': - resolution: {integrity: sha512-4+KqRRHEUUmKT6tFmnpWATOsaFfmSuBs1jXH8JzVtMLEYqq/WS9IDM92OdefFDSrAA2xGd0WN004z8mKeIIscw==} + '@firebase/remote-config-compat@0.2.24': + resolution: {integrity: sha512-EWZTt6fJ7YmPHodQNsSxAIDZY2x8P5kRPvXAc5CmzzBm+NyPFhODbfDsNllDXDL8jlzp50bVWjDY+BXepZS9Mg==} peerDependencies: '@firebase/app-compat': 0.x - '@firebase/remote-config-types@0.5.0': - resolution: {integrity: sha512-vI3bqLoF14L/GchtgayMiFpZJF+Ao3uR8WCde0XpYNkSokDpAKca2DxvcfeZv7lZUqkUwQPL2wD83d3vQ4vvrg==} + '@firebase/remote-config-types@0.5.1': + resolution: {integrity: sha512-cX/1LT6KQwkXzck2eSzeKnuvXZCyr8qaPpDcikoJs7jmI+oBOXixpDLeDtWj1U6GNMkIoXrEDNoyT2Ypcyp5/A==} - '@firebase/remote-config@0.8.2': - resolution: {integrity: sha512-5EXqOThV4upjK9D38d/qOSVwOqRhemlaOFk9vCkMNNALeIlwr+4pLjtLNo4qoY8etQmU/1q4aIATE9N8PFqg0g==} + '@firebase/remote-config@0.8.3': + resolution: {integrity: sha512-ggGKAaLy9YNOvpFoQZgm5p5SiFw3ZFtwti08dojnBQmQicpThTxvG5xZMSpCTYMj2o3gM/yK9CVd2w+kZub8YA==} peerDependencies: '@firebase/app': 0.x - '@firebase/storage-compat@0.4.2': - resolution: {integrity: sha512-R+aB38wxCH5zjIO/xu9KznI7fgiPuZAG98uVm1NcidHyyupGgIDLKigGmRGBZMnxibe/m2oxNKoZpfEbUX2aQQ==} + '@firebase/storage-compat@0.4.3': + resolution: {integrity: sha512-gruVqjtUGX8tEoeNbaWXZm0Zfcfcb7fvmDmBxV8yPAbWvExRnZYLO2+qw9idxNE7BvPXt5csyjSYHy//dAizxw==} engines: {node: '>=20.0.0'} peerDependencies: '@firebase/app-compat': 0.x - '@firebase/storage-types@0.8.3': - resolution: {integrity: sha512-+Muk7g9uwngTpd8xn9OdF/D48uiQ7I1Fae7ULsWPuKoCH3HU7bfFPhxtJYzyhjdniowhuDpQcfPmuNRAqZEfvg==} + '@firebase/storage-types@0.8.4': + resolution: {integrity: sha512-BT7cwxJOx8SWwlQfrlC+bD/Sk3Cw+1odCi8UZNFNWTVZoPsBnA5W+mqtZzVnvsdJpXCFGSGQ7R7vOR6dtM/BRA==} peerDependencies: '@firebase/app-types': 0.x '@firebase/util': 1.x - '@firebase/storage@0.14.2': - resolution: {integrity: sha512-o/culaTeJ8GRpKXRJov21rux/n9dRaSOWLebyatFP2sqEdCxQPjVA1H9Z2fzYwQxMIU0JVmC7SPPmU11v7L6vQ==} + '@firebase/storage@0.14.3': + resolution: {integrity: sha512-YX4/YL6P6/fufSSeGnVhjWddcIXbFq2cWIhMKFTZo1E/Rtcl2mJj/BYUQTwJfcE1Tl8un1FOya4L05jcSLN/Eg==} engines: {node: '>=20.0.0'} peerDependencies: '@firebase/app': 0.x - '@firebase/util@1.15.0': - resolution: {integrity: sha512-AmWf3cHAOMbrCPG4xdPKQaj5iHnyYfyLKZxwz+Xf55bqKbpAmcYifB4jQinT2W9XhDRHISOoPyBOariJpCG6FA==} + '@firebase/util@1.15.1': + resolution: {integrity: sha512-LUdM4Wg7YM9Pq/49nGYySJA0CSQEKnGffFzWV8+6gXN7mGxn+FL1IqvFbuZUtAQcfZgHYDwCE1wwlK7rB7gl2g==} engines: {node: '>=20.0.0'} - '@firebase/webchannel-wrapper@1.0.5': - resolution: {integrity: sha512-+uGNN7rkfn41HLO0vekTFhTxk61eKa8mTpRGLO0QSqlQdKvIoGAvLp3ppdVIWbTGYJWM6Kp0iN+PjMIOcnVqTw==} + '@firebase/webchannel-wrapper@1.0.6': + resolution: {integrity: sha512-Vr/Mqu79dMwGRAyGbJ4uN4+BtXB3/mRTdzetD1daWNeG8QaWuzhhbG77GltO5c0yYmYls8i250iX73624GJd7Q==} '@gar/promise-retry@1.0.3': resolution: {integrity: sha512-GmzA9ckNokPypTg10pgpeHNQe7ph+iIKKmhKu3Ob9ANkswreCx7R3cKmY781K8QK3AqVL3xVh9A42JvIAbkkSA==} @@ -2365,6 +2365,15 @@ packages: '@types/node': optional: true + '@inquirer/confirm@6.0.13': + resolution: {integrity: sha512-wkGPC7yJ5WJk1DJ5SX7fzk+gfj4BM8cf5dDDi71B/551xHrdsZVRJOC0WyikXd0pEsb/9cLniuE4atbsMqmFkw==} + engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + '@inquirer/core@11.1.10': resolution: {integrity: sha512-a4Q5BXHQAHa9eO202sTaFCHFYVB3x5fauDuThEAdZ9gfn76pSxiKU7wWcEH0N1O0XmQvNfQNU6QXpiRxmYQx+A==} engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} @@ -2441,6 +2450,15 @@ packages: '@types/node': optional: true + '@inquirer/prompts@8.4.3': + resolution: {integrity: sha512-ai5LseTw9HhegupIgmo4cn7RpnCGznjjXu4OI+7jMR8vu7T1ZCCNMzFFAovUCjL1fl0cceksIN1++yQE59SmZw==} + engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + '@inquirer/rawlist@5.2.9': resolution: {integrity: sha512-a1ErXEfgjfPYpyQ89dp+7n2IISjH9oQg3ygvF5adz8B7aHn4n2PjEgu1wpVTp69K3bj3lVLxP0qJ2b1clk1Whw==} engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} @@ -3682,8 +3700,8 @@ packages: '@types/node@22.19.19': resolution: {integrity: sha512-dyh/xO2Fh5bYrfWaaqGrRQQGkNdmYw6AmaAUvYeUMNTWQtvb796ikLdmTchRmOlOiIJ1TDXfWgVx1QkUlQ6Hew==} - '@types/node@24.12.2': - resolution: {integrity: sha512-A1sre26ke7HDIuY/M23nd9gfB+nrmhtYyMINbjI1zHJxYteKR6qSMX56FsmjMcDb3SMcjJg5BiRRgOCC/yBD0g==} + '@types/node@24.12.4': + resolution: {integrity: sha512-GUUEShf+PBCGW2KaXwcIt3Yk+e3pkKwWKb9GSyM9WQVE+ep2jzmHdGsHzu4wgcZy5fN9FBdVzjpBQsYlpfpgLA==} '@types/npm-package-arg@6.1.4': resolution: {integrity: sha512-vDgdbMy2QXHnAruzlv68pUtXCjmqUk3WrBAsRboRovsOmxbfn/WiYCjmecyKjGztnMps5dWp4Uq2prp+Ilo17Q==} @@ -5397,8 +5415,8 @@ packages: resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} engines: {node: '>=10'} - firebase@12.12.1: - resolution: {integrity: sha512-ee7xA+bTJLfjB9BP/8FQr3EkxmpAAGc1lNc5QkWgTDpUw24HYXFPm7FEWRdLtGnygxIdYpFmepSc5VjkI6NHhw==} + firebase@12.13.0: + resolution: {integrity: sha512-iutR8ejvAqk6qUClnsPz3U3VIjTWp243AX4cD3iifak5t56to1J29xUIQgSDDzaAqKvhshZerzSahwMQj2TlvA==} flat-cache@4.0.1: resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} @@ -5411,8 +5429,8 @@ packages: flatted@3.4.2: resolution: {integrity: sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA==} - folder-hash@4.1.2: - resolution: {integrity: sha512-rjdiHw3ShVonhMZZXvD/I28boUkbJFT/RBsg5MbQQd8e61PhevIwFwmL218/AscBEsW/blH4BC4A+kFeIqHVfw==} + folder-hash@4.1.3: + resolution: {integrity: sha512-94fj+fXj1XHT8zGumUy/VlyFARc/yrslKJ2+vjrP/U6ftTdL7u68+gQhvSBjz9wrwTuty6BpZ7JsbEK5OU9RNw==} engines: {node: '>=10.10.0'} hasBin: true @@ -5539,9 +5557,6 @@ packages: resolution: {integrity: sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==} engines: {node: '>= 0.4'} - get-tsconfig@4.14.0: - resolution: {integrity: sha512-yTb+8DXzDREzgvYmh6s9vHsSVCHeC0G3PI5bEXNBHtmshPnO+S5O7qgLEOn0I5QvMy6kpZN8K1NKGyilLb93wA==} - get-uri@6.0.5: resolution: {integrity: sha512-b1O07XYq8eRuVzBNgJLstU6FYc1tS6wnMtF1I1D9lE8LxZSOGZ7LhxN54yPP6mGw5f2CkXY2BQUL9Fx41qvcIg==} engines: {node: '>= 14'} @@ -6660,8 +6675,8 @@ packages: resolution: {integrity: sha512-eonl3sLUha+S1GzTPxychyhnUzKyeQkZ7jLjKrBagJgPla13F+uQ71HgpFefyHgqrjEbCPkDArxYsjY8/+gLKA==} engines: {node: '>= 0.4.0'} - ng-packagr@22.0.0-next.4: - resolution: {integrity: sha512-rZorWpYgRUHJ6DVgHb+Ele+spOTH/lQu6u0HA3HL4N8a+vIipEIZ/JUPXNfAhcGd0yhj7jhuokD7akIjiL3zzg==} + ng-packagr@22.0.0-rc.0: + resolution: {integrity: sha512-5R/axgfRB500l2fhFMVdjqZB2FhEgxHIKIauSsFBFTeJ3XbODKsQZiVya2P8/LTXEQRit1tOkvjYYB9iwlrPZg==} engines: {node: ^22.22.0 || ^24.13.1 || >=26.0.0} hasBin: true peerDependencies: @@ -6673,8 +6688,8 @@ packages: tailwindcss: optional: true - nock@14.0.14: - resolution: {integrity: sha512-PKk7tex0O3RRXUZC5XDKJ9yM3rYRPS13myduT85VIIYDBnib42Fpxoe6KxRSzqB4iL2NDxkcJ2yiskZ18hGLEQ==} + nock@14.0.15: + resolution: {integrity: sha512-S0a47C9pLvcYx/Ugf0H30BVBEcUgMMBDk9VJIDlJ8XGrfH2QDUD4Tgdp45qDIiHttokBG+IbsOtsvIjGR/j3bg==} engines: {node: '>=18.20.0 <20 || >=20.12.1'} node-addon-api@6.1.0: @@ -7330,9 +7345,6 @@ packages: resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} engines: {node: '>=4'} - resolve-pkg-maps@1.0.0: - resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} - resolve-url-loader@5.0.0: resolution: {integrity: sha512-uZtduh8/8srhBoMx//5bwqjQ+rfYOUq8zC9NrMUGtjBiGTtFJM42s58/36+hTqeqINcnYe08Nj3LkK9lW4N8Xg==} engines: {node: '>=12'} @@ -7518,6 +7530,11 @@ packages: engines: {node: '>=10'} hasBin: true + semver@7.8.0: + resolution: {integrity: sha512-AcM7dV/5ul4EekoQ29Agm5vri8JNqRyj39o0qpX6vDF2GZrtutZl5RwgD1XnZjiTAfncsJhMI48QQH3sN87YNA==} + engines: {node: '>=10'} + hasBin: true + send@0.19.2: resolution: {integrity: sha512-VMbMxbDeehAxpOtWJXlcUS5E8iXh6QmN+BkRX1GARS3wRaXEEgzCcB10gTQazO42tpNIya8xIyNx8fll1OFPrg==} engines: {node: '>= 0.8.0'} @@ -8025,8 +8042,8 @@ packages: tslib@2.8.1: resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} - tsx@4.21.0: - resolution: {integrity: sha512-5C1sg4USs1lfG0GFb2RLXsdpXqBSEhAaA/0kPL01wxzpMqLILNxIxIOKiILz+cdg/pLnOUxFYOR5yhHU666wbw==} + tsx@4.22.1: + resolution: {integrity: sha512-TvncJykhxAzFCk0VQZKBTClall4Pm7qXDSodb6uxi8QFa8X8mT6ABjxxsQ2opDRYxG7AzcRWXaFtruz5HJKuWg==} engines: {node: '>=18.0.0'} hasBin: true @@ -8558,11 +8575,6 @@ packages: resolution: {integrity: sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==} engines: {node: '>=18'} - yaml@2.8.4: - resolution: {integrity: sha512-ml/JPOj9fOQK8RNnWojA67GbZ0ApXAUlN2UQclwv2eVgTgn7O9gg9o7paZWKMp4g0H3nTLtS9LVzhkpOFIKzog==} - engines: {node: '>= 14.6'} - hasBin: true - yaml@2.9.0: resolution: {integrity: sha512-2AvhNX3mb8zd6Zy7INTtSpl1F15HW6Wnqj0srWlkKLcpYl/gMIMJiyuGq2KeI2YFxUPjdlB+3Lc10seMLtL4cA==} engines: {node: '>= 14.6'} @@ -8724,29 +8736,29 @@ snapshots: '@jridgewell/gen-mapping': 0.3.13 '@jridgewell/trace-mapping': 0.3.31 - '@angular/animations@22.0.0-next.12(@angular/core@22.0.0-next.12(@angular/compiler@22.0.0-next.12)(rxjs@7.8.2)(zone.js@0.16.2))': + '@angular/animations@22.0.0-rc.0(@angular/core@22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2))': dependencies: - '@angular/core': 22.0.0-next.12(@angular/compiler@22.0.0-next.12)(rxjs@7.8.2)(zone.js@0.16.2) + '@angular/core': 22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2) tslib: 2.8.1 - '@angular/cdk@22.0.0-next.8(@angular/common@22.0.0-next.12(@angular/core@22.0.0-next.12(@angular/compiler@22.0.0-next.12)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.0.0-next.12(@angular/compiler@22.0.0-next.12)(rxjs@7.8.2)(zone.js@0.16.2))(@angular/platform-browser@22.0.0-next.12(@angular/animations@22.0.0-next.12(@angular/core@22.0.0-next.12(@angular/compiler@22.0.0-next.12)(rxjs@7.8.2)(zone.js@0.16.2)))(@angular/common@22.0.0-next.12(@angular/core@22.0.0-next.12(@angular/compiler@22.0.0-next.12)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.0.0-next.12(@angular/compiler@22.0.0-next.12)(rxjs@7.8.2)(zone.js@0.16.2)))(rxjs@7.8.2)': + '@angular/cdk@22.0.0-rc.0(@angular/common@22.0.0-rc.0(@angular/core@22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2))(@angular/platform-browser@22.0.0-rc.0(@angular/animations@22.0.0-rc.0(@angular/core@22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2)))(@angular/common@22.0.0-rc.0(@angular/core@22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2)))(rxjs@7.8.2)': dependencies: - '@angular/common': 22.0.0-next.12(@angular/core@22.0.0-next.12(@angular/compiler@22.0.0-next.12)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2) - '@angular/core': 22.0.0-next.12(@angular/compiler@22.0.0-next.12)(rxjs@7.8.2)(zone.js@0.16.2) - '@angular/platform-browser': 22.0.0-next.12(@angular/animations@22.0.0-next.12(@angular/core@22.0.0-next.12(@angular/compiler@22.0.0-next.12)(rxjs@7.8.2)(zone.js@0.16.2)))(@angular/common@22.0.0-next.12(@angular/core@22.0.0-next.12(@angular/compiler@22.0.0-next.12)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.0.0-next.12(@angular/compiler@22.0.0-next.12)(rxjs@7.8.2)(zone.js@0.16.2)) + '@angular/common': 22.0.0-rc.0(@angular/core@22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2) + '@angular/core': 22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2) + '@angular/platform-browser': 22.0.0-rc.0(@angular/animations@22.0.0-rc.0(@angular/core@22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2)))(@angular/common@22.0.0-rc.0(@angular/core@22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2)) parse5: 8.0.1 rxjs: 7.8.2 tslib: 2.8.1 - '@angular/common@22.0.0-next.12(@angular/core@22.0.0-next.12(@angular/compiler@22.0.0-next.12)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2)': + '@angular/common@22.0.0-rc.0(@angular/core@22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2)': dependencies: - '@angular/core': 22.0.0-next.12(@angular/compiler@22.0.0-next.12)(rxjs@7.8.2)(zone.js@0.16.2) + '@angular/core': 22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2) rxjs: 7.8.2 tslib: 2.8.1 - '@angular/compiler-cli@22.0.0-next.12(@angular/compiler@22.0.0-next.12)(typescript@6.0.3)': + '@angular/compiler-cli@22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(typescript@6.0.3)': dependencies: - '@angular/compiler': 22.0.0-next.12 + '@angular/compiler': 22.0.0-rc.0 '@babel/core': 7.29.0 '@jridgewell/sourcemap-codec': 1.5.5 chokidar: 5.0.0 @@ -8760,32 +8772,32 @@ snapshots: transitivePeerDependencies: - supports-color - '@angular/compiler@22.0.0-next.12': + '@angular/compiler@22.0.0-rc.0': dependencies: tslib: 2.8.1 - '@angular/core@22.0.0-next.12(@angular/compiler@22.0.0-next.12)(rxjs@7.8.2)(zone.js@0.16.2)': + '@angular/core@22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2)': dependencies: rxjs: 7.8.2 tslib: 2.8.1 optionalDependencies: - '@angular/compiler': 22.0.0-next.12 + '@angular/compiler': 22.0.0-rc.0 zone.js: 0.16.2 - '@angular/forms@22.0.0-next.12(@angular/common@22.0.0-next.12(@angular/core@22.0.0-next.12(@angular/compiler@22.0.0-next.12)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.0.0-next.12(@angular/compiler@22.0.0-next.12)(rxjs@7.8.2)(zone.js@0.16.2))(@angular/platform-browser@22.0.0-next.12(@angular/animations@22.0.0-next.12(@angular/core@22.0.0-next.12(@angular/compiler@22.0.0-next.12)(rxjs@7.8.2)(zone.js@0.16.2)))(@angular/common@22.0.0-next.12(@angular/core@22.0.0-next.12(@angular/compiler@22.0.0-next.12)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.0.0-next.12(@angular/compiler@22.0.0-next.12)(rxjs@7.8.2)(zone.js@0.16.2)))(rxjs@7.8.2)': + '@angular/forms@22.0.0-rc.0(@angular/common@22.0.0-rc.0(@angular/core@22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2))(@angular/platform-browser@22.0.0-rc.0(@angular/animations@22.0.0-rc.0(@angular/core@22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2)))(@angular/common@22.0.0-rc.0(@angular/core@22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2)))(rxjs@7.8.2)': dependencies: - '@angular/common': 22.0.0-next.12(@angular/core@22.0.0-next.12(@angular/compiler@22.0.0-next.12)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2) - '@angular/core': 22.0.0-next.12(@angular/compiler@22.0.0-next.12)(rxjs@7.8.2)(zone.js@0.16.2) - '@angular/platform-browser': 22.0.0-next.12(@angular/animations@22.0.0-next.12(@angular/core@22.0.0-next.12(@angular/compiler@22.0.0-next.12)(rxjs@7.8.2)(zone.js@0.16.2)))(@angular/common@22.0.0-next.12(@angular/core@22.0.0-next.12(@angular/compiler@22.0.0-next.12)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.0.0-next.12(@angular/compiler@22.0.0-next.12)(rxjs@7.8.2)(zone.js@0.16.2)) + '@angular/common': 22.0.0-rc.0(@angular/core@22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2) + '@angular/core': 22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2) + '@angular/platform-browser': 22.0.0-rc.0(@angular/animations@22.0.0-rc.0(@angular/core@22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2)))(@angular/common@22.0.0-rc.0(@angular/core@22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(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.2 - '@angular/localize@22.0.0-next.12(@angular/compiler-cli@22.0.0-next.12(@angular/compiler@22.0.0-next.12)(typescript@6.0.3))(@angular/compiler@22.0.0-next.12)': + '@angular/localize@22.0.0-rc.0(@angular/compiler-cli@22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(typescript@6.0.3))(@angular/compiler@22.0.0-rc.0)': dependencies: - '@angular/compiler': 22.0.0-next.12 - '@angular/compiler-cli': 22.0.0-next.12(@angular/compiler@22.0.0-next.12)(typescript@6.0.3) + '@angular/compiler': 22.0.0-rc.0 + '@angular/compiler-cli': 22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(typescript@6.0.3) '@babel/core': 7.29.0 '@types/babel__core': 7.20.5 tinyglobby: 0.2.16 @@ -8793,24 +8805,24 @@ snapshots: transitivePeerDependencies: - supports-color - '@angular/material@22.0.0-next.8(93ce75c341587667f5d7d40f3eefe13f)': + '@angular/material@22.0.0-rc.0(b11ecddb61371acc147801b64fc28dc6)': dependencies: - '@angular/cdk': 22.0.0-next.8(@angular/common@22.0.0-next.12(@angular/core@22.0.0-next.12(@angular/compiler@22.0.0-next.12)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.0.0-next.12(@angular/compiler@22.0.0-next.12)(rxjs@7.8.2)(zone.js@0.16.2))(@angular/platform-browser@22.0.0-next.12(@angular/animations@22.0.0-next.12(@angular/core@22.0.0-next.12(@angular/compiler@22.0.0-next.12)(rxjs@7.8.2)(zone.js@0.16.2)))(@angular/common@22.0.0-next.12(@angular/core@22.0.0-next.12(@angular/compiler@22.0.0-next.12)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.0.0-next.12(@angular/compiler@22.0.0-next.12)(rxjs@7.8.2)(zone.js@0.16.2)))(rxjs@7.8.2) - '@angular/common': 22.0.0-next.12(@angular/core@22.0.0-next.12(@angular/compiler@22.0.0-next.12)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2) - '@angular/core': 22.0.0-next.12(@angular/compiler@22.0.0-next.12)(rxjs@7.8.2)(zone.js@0.16.2) - '@angular/forms': 22.0.0-next.12(@angular/common@22.0.0-next.12(@angular/core@22.0.0-next.12(@angular/compiler@22.0.0-next.12)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.0.0-next.12(@angular/compiler@22.0.0-next.12)(rxjs@7.8.2)(zone.js@0.16.2))(@angular/platform-browser@22.0.0-next.12(@angular/animations@22.0.0-next.12(@angular/core@22.0.0-next.12(@angular/compiler@22.0.0-next.12)(rxjs@7.8.2)(zone.js@0.16.2)))(@angular/common@22.0.0-next.12(@angular/core@22.0.0-next.12(@angular/compiler@22.0.0-next.12)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.0.0-next.12(@angular/compiler@22.0.0-next.12)(rxjs@7.8.2)(zone.js@0.16.2)))(rxjs@7.8.2) - '@angular/platform-browser': 22.0.0-next.12(@angular/animations@22.0.0-next.12(@angular/core@22.0.0-next.12(@angular/compiler@22.0.0-next.12)(rxjs@7.8.2)(zone.js@0.16.2)))(@angular/common@22.0.0-next.12(@angular/core@22.0.0-next.12(@angular/compiler@22.0.0-next.12)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.0.0-next.12(@angular/compiler@22.0.0-next.12)(rxjs@7.8.2)(zone.js@0.16.2)) + '@angular/cdk': 22.0.0-rc.0(@angular/common@22.0.0-rc.0(@angular/core@22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2))(@angular/platform-browser@22.0.0-rc.0(@angular/animations@22.0.0-rc.0(@angular/core@22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2)))(@angular/common@22.0.0-rc.0(@angular/core@22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2)))(rxjs@7.8.2) + '@angular/common': 22.0.0-rc.0(@angular/core@22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2) + '@angular/core': 22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2) + '@angular/forms': 22.0.0-rc.0(@angular/common@22.0.0-rc.0(@angular/core@22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2))(@angular/platform-browser@22.0.0-rc.0(@angular/animations@22.0.0-rc.0(@angular/core@22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2)))(@angular/common@22.0.0-rc.0(@angular/core@22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2)))(rxjs@7.8.2) + '@angular/platform-browser': 22.0.0-rc.0(@angular/animations@22.0.0-rc.0(@angular/core@22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2)))(@angular/common@22.0.0-rc.0(@angular/core@22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(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/2c36222db3f44751284cc93b3806dbe1baee583a(@modelcontextprotocol/sdk@1.29.0(zod@4.4.2))': + '@angular/ng-dev@https://codeload.github.com/angular/dev-infra-private-ng-dev-builds/tar.gz/98b21a0cb6ef6d068a99a9346e89812e3ec9d2b1(@modelcontextprotocol/sdk@1.29.0(zod@4.4.2))': dependencies: '@actions/core': 3.0.1 '@conventional-changelog/git-client': 2.7.0(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.4.0) '@google-cloud/spanner': 8.0.0(supports-color@10.2.2) '@google/genai': 1.52.0(@modelcontextprotocol/sdk@1.29.0(zod@4.4.2))(bufferutil@4.1.0)(supports-color@10.2.2)(utf-8-validate@6.0.6) - '@inquirer/prompts': 8.4.2(@types/node@24.12.2) - '@inquirer/type': 4.0.5(@types/node@24.12.2) + '@inquirer/prompts': 8.4.3(@types/node@24.12.4) + '@inquirer/type': 4.0.5(@types/node@24.12.4) '@octokit/auth-app': 8.2.0 '@octokit/core': 7.0.6 '@octokit/graphql': 9.0.3 @@ -8827,7 +8839,7 @@ snapshots: '@types/events': 3.0.3 '@types/folder-hash': 4.0.4 '@types/jasmine': 6.0.0 - '@types/node': 24.12.2 + '@types/node': 24.12.4 '@types/semver': 7.7.1 '@types/which': 3.0.4 '@types/yargs': 17.0.35 @@ -8840,58 +8852,58 @@ snapshots: ejs: 5.0.2 encoding: 0.1.13 fast-glob: 3.3.3 - firebase: 12.12.1 - folder-hash: 4.1.2(supports-color@10.2.2) + firebase: 12.13.0 + folder-hash: 4.1.3(supports-color@10.2.2) jasmine: 6.2.0 jasmine-core: 6.2.0 jasmine-reporters: 2.5.2 jsonc-parser: 3.3.1 minimatch: 10.2.5 multimatch: 8.0.0 - nock: 14.0.14 - semver: 7.7.4 + nock: 14.0.15 + semver: 7.8.0 supports-color: 10.2.2 - tsx: 4.21.0 + tsx: 4.22.1 typed-graphqlify: 3.1.6 typescript: 6.0.3 utf-8-validate: 6.0.6 which: 7.0.0 - yaml: 2.8.4 + yaml: 2.9.0 yargs: 18.0.0 zod: 4.4.2 transitivePeerDependencies: - '@modelcontextprotocol/sdk' - '@react-native-async-storage/async-storage' - '@angular/platform-browser@22.0.0-next.12(@angular/animations@22.0.0-next.12(@angular/core@22.0.0-next.12(@angular/compiler@22.0.0-next.12)(rxjs@7.8.2)(zone.js@0.16.2)))(@angular/common@22.0.0-next.12(@angular/core@22.0.0-next.12(@angular/compiler@22.0.0-next.12)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.0.0-next.12(@angular/compiler@22.0.0-next.12)(rxjs@7.8.2)(zone.js@0.16.2))': + '@angular/platform-browser@22.0.0-rc.0(@angular/animations@22.0.0-rc.0(@angular/core@22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2)))(@angular/common@22.0.0-rc.0(@angular/core@22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2))': dependencies: - '@angular/common': 22.0.0-next.12(@angular/core@22.0.0-next.12(@angular/compiler@22.0.0-next.12)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2) - '@angular/core': 22.0.0-next.12(@angular/compiler@22.0.0-next.12)(rxjs@7.8.2)(zone.js@0.16.2) + '@angular/common': 22.0.0-rc.0(@angular/core@22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2) + '@angular/core': 22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2) tslib: 2.8.1 optionalDependencies: - '@angular/animations': 22.0.0-next.12(@angular/core@22.0.0-next.12(@angular/compiler@22.0.0-next.12)(rxjs@7.8.2)(zone.js@0.16.2)) + '@angular/animations': 22.0.0-rc.0(@angular/core@22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2)) - '@angular/platform-server@22.0.0-next.12(@angular/common@22.0.0-next.12(@angular/core@22.0.0-next.12(@angular/compiler@22.0.0-next.12)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/compiler@22.0.0-next.12)(@angular/core@22.0.0-next.12(@angular/compiler@22.0.0-next.12)(rxjs@7.8.2)(zone.js@0.16.2))(@angular/platform-browser@22.0.0-next.12(@angular/animations@22.0.0-next.12(@angular/core@22.0.0-next.12(@angular/compiler@22.0.0-next.12)(rxjs@7.8.2)(zone.js@0.16.2)))(@angular/common@22.0.0-next.12(@angular/core@22.0.0-next.12(@angular/compiler@22.0.0-next.12)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.0.0-next.12(@angular/compiler@22.0.0-next.12)(rxjs@7.8.2)(zone.js@0.16.2)))(rxjs@7.8.2)': + '@angular/platform-server@22.0.0-rc.0(@angular/common@22.0.0-rc.0(@angular/core@22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/compiler@22.0.0-rc.0)(@angular/core@22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2))(@angular/platform-browser@22.0.0-rc.0(@angular/animations@22.0.0-rc.0(@angular/core@22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2)))(@angular/common@22.0.0-rc.0(@angular/core@22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2)))(rxjs@7.8.2)': dependencies: - '@angular/common': 22.0.0-next.12(@angular/core@22.0.0-next.12(@angular/compiler@22.0.0-next.12)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2) - '@angular/compiler': 22.0.0-next.12 - '@angular/core': 22.0.0-next.12(@angular/compiler@22.0.0-next.12)(rxjs@7.8.2)(zone.js@0.16.2) - '@angular/platform-browser': 22.0.0-next.12(@angular/animations@22.0.0-next.12(@angular/core@22.0.0-next.12(@angular/compiler@22.0.0-next.12)(rxjs@7.8.2)(zone.js@0.16.2)))(@angular/common@22.0.0-next.12(@angular/core@22.0.0-next.12(@angular/compiler@22.0.0-next.12)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.0.0-next.12(@angular/compiler@22.0.0-next.12)(rxjs@7.8.2)(zone.js@0.16.2)) + '@angular/common': 22.0.0-rc.0(@angular/core@22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2) + '@angular/compiler': 22.0.0-rc.0 + '@angular/core': 22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2) + '@angular/platform-browser': 22.0.0-rc.0(@angular/animations@22.0.0-rc.0(@angular/core@22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2)))(@angular/common@22.0.0-rc.0(@angular/core@22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2)) rxjs: 7.8.2 tslib: 2.8.1 xhr2: 0.2.1 - '@angular/router@22.0.0-next.12(@angular/common@22.0.0-next.12(@angular/core@22.0.0-next.12(@angular/compiler@22.0.0-next.12)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.0.0-next.12(@angular/compiler@22.0.0-next.12)(rxjs@7.8.2)(zone.js@0.16.2))(@angular/platform-browser@22.0.0-next.12(@angular/animations@22.0.0-next.12(@angular/core@22.0.0-next.12(@angular/compiler@22.0.0-next.12)(rxjs@7.8.2)(zone.js@0.16.2)))(@angular/common@22.0.0-next.12(@angular/core@22.0.0-next.12(@angular/compiler@22.0.0-next.12)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.0.0-next.12(@angular/compiler@22.0.0-next.12)(rxjs@7.8.2)(zone.js@0.16.2)))(rxjs@7.8.2)': + '@angular/router@22.0.0-rc.0(@angular/common@22.0.0-rc.0(@angular/core@22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2))(@angular/platform-browser@22.0.0-rc.0(@angular/animations@22.0.0-rc.0(@angular/core@22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2)))(@angular/common@22.0.0-rc.0(@angular/core@22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2)))(rxjs@7.8.2)': dependencies: - '@angular/common': 22.0.0-next.12(@angular/core@22.0.0-next.12(@angular/compiler@22.0.0-next.12)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2) - '@angular/core': 22.0.0-next.12(@angular/compiler@22.0.0-next.12)(rxjs@7.8.2)(zone.js@0.16.2) - '@angular/platform-browser': 22.0.0-next.12(@angular/animations@22.0.0-next.12(@angular/core@22.0.0-next.12(@angular/compiler@22.0.0-next.12)(rxjs@7.8.2)(zone.js@0.16.2)))(@angular/common@22.0.0-next.12(@angular/core@22.0.0-next.12(@angular/compiler@22.0.0-next.12)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.0.0-next.12(@angular/compiler@22.0.0-next.12)(rxjs@7.8.2)(zone.js@0.16.2)) + '@angular/common': 22.0.0-rc.0(@angular/core@22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2) + '@angular/core': 22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2) + '@angular/platform-browser': 22.0.0-rc.0(@angular/animations@22.0.0-rc.0(@angular/core@22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2)))(@angular/common@22.0.0-rc.0(@angular/core@22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2)) rxjs: 7.8.2 tslib: 2.8.1 - '@angular/service-worker@22.0.0-next.12(@angular/core@22.0.0-next.12(@angular/compiler@22.0.0-next.12)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2)': + '@angular/service-worker@22.0.0-rc.0(@angular/core@22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2)': dependencies: - '@angular/core': 22.0.0-next.12(@angular/compiler@22.0.0-next.12)(rxjs@7.8.2)(zone.js@0.16.2) + '@angular/core': 22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2) rxjs: 7.8.2 tslib: 2.8.1 @@ -9892,325 +9904,325 @@ snapshots: '@exodus/bytes@1.15.0': {} - '@firebase/ai@2.11.1(@firebase/app-types@0.9.4)(@firebase/app@0.14.11)': + '@firebase/ai@2.12.0(@firebase/app-types@0.9.5)(@firebase/app@0.14.12)': dependencies: - '@firebase/app': 0.14.11 - '@firebase/app-check-interop-types': 0.3.3 - '@firebase/app-types': 0.9.4 - '@firebase/component': 0.7.2 - '@firebase/logger': 0.5.0 - '@firebase/util': 1.15.0 + '@firebase/app': 0.14.12 + '@firebase/app-check-interop-types': 0.3.4 + '@firebase/app-types': 0.9.5 + '@firebase/component': 0.7.3 + '@firebase/logger': 0.5.1 + '@firebase/util': 1.15.1 tslib: 2.8.1 - '@firebase/analytics-compat@0.2.27(@firebase/app-compat@0.5.11)(@firebase/app@0.14.11)': + '@firebase/analytics-compat@0.2.28(@firebase/app-compat@0.5.12)(@firebase/app@0.14.12)': dependencies: - '@firebase/analytics': 0.10.21(@firebase/app@0.14.11) - '@firebase/analytics-types': 0.8.3 - '@firebase/app-compat': 0.5.11 - '@firebase/component': 0.7.2 - '@firebase/util': 1.15.0 + '@firebase/analytics': 0.10.22(@firebase/app@0.14.12) + '@firebase/analytics-types': 0.8.4 + '@firebase/app-compat': 0.5.12 + '@firebase/component': 0.7.3 + '@firebase/util': 1.15.1 tslib: 2.8.1 transitivePeerDependencies: - '@firebase/app' - '@firebase/analytics-types@0.8.3': {} + '@firebase/analytics-types@0.8.4': {} - '@firebase/analytics@0.10.21(@firebase/app@0.14.11)': + '@firebase/analytics@0.10.22(@firebase/app@0.14.12)': dependencies: - '@firebase/app': 0.14.11 - '@firebase/component': 0.7.2 - '@firebase/installations': 0.6.21(@firebase/app@0.14.11) - '@firebase/logger': 0.5.0 - '@firebase/util': 1.15.0 + '@firebase/app': 0.14.12 + '@firebase/component': 0.7.3 + '@firebase/installations': 0.6.22(@firebase/app@0.14.12) + '@firebase/logger': 0.5.1 + '@firebase/util': 1.15.1 tslib: 2.8.1 - '@firebase/app-check-compat@0.4.2(@firebase/app-compat@0.5.11)(@firebase/app@0.14.11)': + '@firebase/app-check-compat@0.4.3(@firebase/app-compat@0.5.12)(@firebase/app@0.14.12)': dependencies: - '@firebase/app-check': 0.11.2(@firebase/app@0.14.11) - '@firebase/app-check-types': 0.5.3 - '@firebase/app-compat': 0.5.11 - '@firebase/component': 0.7.2 - '@firebase/logger': 0.5.0 - '@firebase/util': 1.15.0 + '@firebase/app-check': 0.11.3(@firebase/app@0.14.12) + '@firebase/app-check-types': 0.5.4 + '@firebase/app-compat': 0.5.12 + '@firebase/component': 0.7.3 + '@firebase/logger': 0.5.1 + '@firebase/util': 1.15.1 tslib: 2.8.1 transitivePeerDependencies: - '@firebase/app' - '@firebase/app-check-interop-types@0.3.3': {} + '@firebase/app-check-interop-types@0.3.4': {} - '@firebase/app-check-types@0.5.3': {} + '@firebase/app-check-types@0.5.4': {} - '@firebase/app-check@0.11.2(@firebase/app@0.14.11)': + '@firebase/app-check@0.11.3(@firebase/app@0.14.12)': dependencies: - '@firebase/app': 0.14.11 - '@firebase/component': 0.7.2 - '@firebase/logger': 0.5.0 - '@firebase/util': 1.15.0 + '@firebase/app': 0.14.12 + '@firebase/component': 0.7.3 + '@firebase/logger': 0.5.1 + '@firebase/util': 1.15.1 tslib: 2.8.1 - '@firebase/app-compat@0.5.11': + '@firebase/app-compat@0.5.12': dependencies: - '@firebase/app': 0.14.11 - '@firebase/component': 0.7.2 - '@firebase/logger': 0.5.0 - '@firebase/util': 1.15.0 + '@firebase/app': 0.14.12 + '@firebase/component': 0.7.3 + '@firebase/logger': 0.5.1 + '@firebase/util': 1.15.1 tslib: 2.8.1 - '@firebase/app-types@0.9.4': + '@firebase/app-types@0.9.5': dependencies: - '@firebase/logger': 0.5.0 + '@firebase/logger': 0.5.1 - '@firebase/app@0.14.11': + '@firebase/app@0.14.12': dependencies: - '@firebase/component': 0.7.2 - '@firebase/logger': 0.5.0 - '@firebase/util': 1.15.0 + '@firebase/component': 0.7.3 + '@firebase/logger': 0.5.1 + '@firebase/util': 1.15.1 idb: 7.1.1 tslib: 2.8.1 - '@firebase/auth-compat@0.6.5(@firebase/app-compat@0.5.11)(@firebase/app-types@0.9.4)(@firebase/app@0.14.11)': + '@firebase/auth-compat@0.6.6(@firebase/app-compat@0.5.12)(@firebase/app-types@0.9.5)(@firebase/app@0.14.12)': dependencies: - '@firebase/app-compat': 0.5.11 - '@firebase/auth': 1.13.0(@firebase/app@0.14.11) - '@firebase/auth-types': 0.13.0(@firebase/app-types@0.9.4)(@firebase/util@1.15.0) - '@firebase/component': 0.7.2 - '@firebase/util': 1.15.0 + '@firebase/app-compat': 0.5.12 + '@firebase/auth': 1.13.1(@firebase/app@0.14.12) + '@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 tslib: 2.8.1 transitivePeerDependencies: - '@firebase/app' - '@firebase/app-types' - '@react-native-async-storage/async-storage' - '@firebase/auth-interop-types@0.2.4': {} + '@firebase/auth-interop-types@0.2.5': {} - '@firebase/auth-types@0.13.0(@firebase/app-types@0.9.4)(@firebase/util@1.15.0)': + '@firebase/auth-types@0.13.1(@firebase/app-types@0.9.5)(@firebase/util@1.15.1)': dependencies: - '@firebase/app-types': 0.9.4 - '@firebase/util': 1.15.0 + '@firebase/app-types': 0.9.5 + '@firebase/util': 1.15.1 - '@firebase/auth@1.13.0(@firebase/app@0.14.11)': + '@firebase/auth@1.13.1(@firebase/app@0.14.12)': dependencies: - '@firebase/app': 0.14.11 - '@firebase/component': 0.7.2 - '@firebase/logger': 0.5.0 - '@firebase/util': 1.15.0 + '@firebase/app': 0.14.12 + '@firebase/component': 0.7.3 + '@firebase/logger': 0.5.1 + '@firebase/util': 1.15.1 tslib: 2.8.1 - '@firebase/component@0.7.2': + '@firebase/component@0.7.3': dependencies: - '@firebase/util': 1.15.0 + '@firebase/util': 1.15.1 tslib: 2.8.1 - '@firebase/data-connect@0.6.0(@firebase/app@0.14.11)': + '@firebase/data-connect@0.7.0(@firebase/app@0.14.12)': dependencies: - '@firebase/app': 0.14.11 - '@firebase/auth-interop-types': 0.2.4 - '@firebase/component': 0.7.2 - '@firebase/logger': 0.5.0 - '@firebase/util': 1.15.0 + '@firebase/app': 0.14.12 + '@firebase/auth-interop-types': 0.2.5 + '@firebase/component': 0.7.3 + '@firebase/logger': 0.5.1 + '@firebase/util': 1.15.1 tslib: 2.8.1 - '@firebase/database-compat@2.1.3': + '@firebase/database-compat@2.1.4': dependencies: - '@firebase/component': 0.7.2 - '@firebase/database': 1.1.2 - '@firebase/database-types': 1.0.19 - '@firebase/logger': 0.5.0 - '@firebase/util': 1.15.0 + '@firebase/component': 0.7.3 + '@firebase/database': 1.1.3 + '@firebase/database-types': 1.0.20 + '@firebase/logger': 0.5.1 + '@firebase/util': 1.15.1 tslib: 2.8.1 - '@firebase/database-types@1.0.19': + '@firebase/database-types@1.0.20': dependencies: - '@firebase/app-types': 0.9.4 - '@firebase/util': 1.15.0 + '@firebase/app-types': 0.9.5 + '@firebase/util': 1.15.1 - '@firebase/database@1.1.2': + '@firebase/database@1.1.3': dependencies: - '@firebase/app-check-interop-types': 0.3.3 - '@firebase/auth-interop-types': 0.2.4 - '@firebase/component': 0.7.2 - '@firebase/logger': 0.5.0 - '@firebase/util': 1.15.0 + '@firebase/app-check-interop-types': 0.3.4 + '@firebase/auth-interop-types': 0.2.5 + '@firebase/component': 0.7.3 + '@firebase/logger': 0.5.1 + '@firebase/util': 1.15.1 faye-websocket: 0.11.4 tslib: 2.8.1 - '@firebase/firestore-compat@0.4.8(@firebase/app-compat@0.5.11)(@firebase/app-types@0.9.4)(@firebase/app@0.14.11)': + '@firebase/firestore-compat@0.4.9(@firebase/app-compat@0.5.12)(@firebase/app-types@0.9.5)(@firebase/app@0.14.12)': dependencies: - '@firebase/app-compat': 0.5.11 - '@firebase/component': 0.7.2 - '@firebase/firestore': 4.14.0(@firebase/app@0.14.11) - '@firebase/firestore-types': 3.0.3(@firebase/app-types@0.9.4)(@firebase/util@1.15.0) - '@firebase/util': 1.15.0 + '@firebase/app-compat': 0.5.12 + '@firebase/component': 0.7.3 + '@firebase/firestore': 4.14.1(@firebase/app@0.14.12) + '@firebase/firestore-types': 3.0.4(@firebase/app-types@0.9.5)(@firebase/util@1.15.1) + '@firebase/util': 1.15.1 tslib: 2.8.1 transitivePeerDependencies: - '@firebase/app' - '@firebase/app-types' - '@firebase/firestore-types@3.0.3(@firebase/app-types@0.9.4)(@firebase/util@1.15.0)': + '@firebase/firestore-types@3.0.4(@firebase/app-types@0.9.5)(@firebase/util@1.15.1)': dependencies: - '@firebase/app-types': 0.9.4 - '@firebase/util': 1.15.0 + '@firebase/app-types': 0.9.5 + '@firebase/util': 1.15.1 - '@firebase/firestore@4.14.0(@firebase/app@0.14.11)': + '@firebase/firestore@4.14.1(@firebase/app@0.14.12)': dependencies: - '@firebase/app': 0.14.11 - '@firebase/component': 0.7.2 - '@firebase/logger': 0.5.0 - '@firebase/util': 1.15.0 - '@firebase/webchannel-wrapper': 1.0.5 + '@firebase/app': 0.14.12 + '@firebase/component': 0.7.3 + '@firebase/logger': 0.5.1 + '@firebase/util': 1.15.1 + '@firebase/webchannel-wrapper': 1.0.6 '@grpc/grpc-js': 1.9.15 '@grpc/proto-loader': 0.7.15 tslib: 2.8.1 - '@firebase/functions-compat@0.4.3(@firebase/app-compat@0.5.11)(@firebase/app@0.14.11)': + '@firebase/functions-compat@0.4.4(@firebase/app-compat@0.5.12)(@firebase/app@0.14.12)': dependencies: - '@firebase/app-compat': 0.5.11 - '@firebase/component': 0.7.2 - '@firebase/functions': 0.13.3(@firebase/app@0.14.11) - '@firebase/functions-types': 0.6.3 - '@firebase/util': 1.15.0 + '@firebase/app-compat': 0.5.12 + '@firebase/component': 0.7.3 + '@firebase/functions': 0.13.4(@firebase/app@0.14.12) + '@firebase/functions-types': 0.6.4 + '@firebase/util': 1.15.1 tslib: 2.8.1 transitivePeerDependencies: - '@firebase/app' - '@firebase/functions-types@0.6.3': {} + '@firebase/functions-types@0.6.4': {} - '@firebase/functions@0.13.3(@firebase/app@0.14.11)': + '@firebase/functions@0.13.4(@firebase/app@0.14.12)': dependencies: - '@firebase/app': 0.14.11 - '@firebase/app-check-interop-types': 0.3.3 - '@firebase/auth-interop-types': 0.2.4 - '@firebase/component': 0.7.2 - '@firebase/messaging-interop-types': 0.2.3 - '@firebase/util': 1.15.0 + '@firebase/app': 0.14.12 + '@firebase/app-check-interop-types': 0.3.4 + '@firebase/auth-interop-types': 0.2.5 + '@firebase/component': 0.7.3 + '@firebase/messaging-interop-types': 0.2.4 + '@firebase/util': 1.15.1 tslib: 2.8.1 - '@firebase/installations-compat@0.2.21(@firebase/app-compat@0.5.11)(@firebase/app-types@0.9.4)(@firebase/app@0.14.11)': + '@firebase/installations-compat@0.2.22(@firebase/app-compat@0.5.12)(@firebase/app-types@0.9.5)(@firebase/app@0.14.12)': dependencies: - '@firebase/app-compat': 0.5.11 - '@firebase/component': 0.7.2 - '@firebase/installations': 0.6.21(@firebase/app@0.14.11) - '@firebase/installations-types': 0.5.3(@firebase/app-types@0.9.4) - '@firebase/util': 1.15.0 + '@firebase/app-compat': 0.5.12 + '@firebase/component': 0.7.3 + '@firebase/installations': 0.6.22(@firebase/app@0.14.12) + '@firebase/installations-types': 0.5.4(@firebase/app-types@0.9.5) + '@firebase/util': 1.15.1 tslib: 2.8.1 transitivePeerDependencies: - '@firebase/app' - '@firebase/app-types' - '@firebase/installations-types@0.5.3(@firebase/app-types@0.9.4)': + '@firebase/installations-types@0.5.4(@firebase/app-types@0.9.5)': dependencies: - '@firebase/app-types': 0.9.4 + '@firebase/app-types': 0.9.5 - '@firebase/installations@0.6.21(@firebase/app@0.14.11)': + '@firebase/installations@0.6.22(@firebase/app@0.14.12)': dependencies: - '@firebase/app': 0.14.11 - '@firebase/component': 0.7.2 - '@firebase/util': 1.15.0 + '@firebase/app': 0.14.12 + '@firebase/component': 0.7.3 + '@firebase/util': 1.15.1 idb: 7.1.1 tslib: 2.8.1 - '@firebase/logger@0.5.0': + '@firebase/logger@0.5.1': dependencies: tslib: 2.8.1 - '@firebase/messaging-compat@0.2.25(@firebase/app-compat@0.5.11)(@firebase/app@0.14.11)': + '@firebase/messaging-compat@0.2.26(@firebase/app-compat@0.5.12)(@firebase/app@0.14.12)': dependencies: - '@firebase/app-compat': 0.5.11 - '@firebase/component': 0.7.2 - '@firebase/messaging': 0.12.25(@firebase/app@0.14.11) - '@firebase/util': 1.15.0 + '@firebase/app-compat': 0.5.12 + '@firebase/component': 0.7.3 + '@firebase/messaging': 0.12.26(@firebase/app@0.14.12) + '@firebase/util': 1.15.1 tslib: 2.8.1 transitivePeerDependencies: - '@firebase/app' - '@firebase/messaging-interop-types@0.2.3': {} + '@firebase/messaging-interop-types@0.2.4': {} - '@firebase/messaging@0.12.25(@firebase/app@0.14.11)': + '@firebase/messaging@0.12.26(@firebase/app@0.14.12)': dependencies: - '@firebase/app': 0.14.11 - '@firebase/component': 0.7.2 - '@firebase/installations': 0.6.21(@firebase/app@0.14.11) - '@firebase/messaging-interop-types': 0.2.3 - '@firebase/util': 1.15.0 + '@firebase/app': 0.14.12 + '@firebase/component': 0.7.3 + '@firebase/installations': 0.6.22(@firebase/app@0.14.12) + '@firebase/messaging-interop-types': 0.2.4 + '@firebase/util': 1.15.1 idb: 7.1.1 tslib: 2.8.1 - '@firebase/performance-compat@0.2.24(@firebase/app-compat@0.5.11)(@firebase/app@0.14.11)': + '@firebase/performance-compat@0.2.25(@firebase/app-compat@0.5.12)(@firebase/app@0.14.12)': dependencies: - '@firebase/app-compat': 0.5.11 - '@firebase/component': 0.7.2 - '@firebase/logger': 0.5.0 - '@firebase/performance': 0.7.11(@firebase/app@0.14.11) - '@firebase/performance-types': 0.2.3 - '@firebase/util': 1.15.0 + '@firebase/app-compat': 0.5.12 + '@firebase/component': 0.7.3 + '@firebase/logger': 0.5.1 + '@firebase/performance': 0.7.12(@firebase/app@0.14.12) + '@firebase/performance-types': 0.2.4 + '@firebase/util': 1.15.1 tslib: 2.8.1 transitivePeerDependencies: - '@firebase/app' - '@firebase/performance-types@0.2.3': {} + '@firebase/performance-types@0.2.4': {} - '@firebase/performance@0.7.11(@firebase/app@0.14.11)': + '@firebase/performance@0.7.12(@firebase/app@0.14.12)': dependencies: - '@firebase/app': 0.14.11 - '@firebase/component': 0.7.2 - '@firebase/installations': 0.6.21(@firebase/app@0.14.11) - '@firebase/logger': 0.5.0 - '@firebase/util': 1.15.0 + '@firebase/app': 0.14.12 + '@firebase/component': 0.7.3 + '@firebase/installations': 0.6.22(@firebase/app@0.14.12) + '@firebase/logger': 0.5.1 + '@firebase/util': 1.15.1 tslib: 2.8.1 web-vitals: 4.2.4 - '@firebase/remote-config-compat@0.2.23(@firebase/app-compat@0.5.11)(@firebase/app@0.14.11)': + '@firebase/remote-config-compat@0.2.24(@firebase/app-compat@0.5.12)(@firebase/app@0.14.12)': dependencies: - '@firebase/app-compat': 0.5.11 - '@firebase/component': 0.7.2 - '@firebase/logger': 0.5.0 - '@firebase/remote-config': 0.8.2(@firebase/app@0.14.11) - '@firebase/remote-config-types': 0.5.0 - '@firebase/util': 1.15.0 + '@firebase/app-compat': 0.5.12 + '@firebase/component': 0.7.3 + '@firebase/logger': 0.5.1 + '@firebase/remote-config': 0.8.3(@firebase/app@0.14.12) + '@firebase/remote-config-types': 0.5.1 + '@firebase/util': 1.15.1 tslib: 2.8.1 transitivePeerDependencies: - '@firebase/app' - '@firebase/remote-config-types@0.5.0': {} + '@firebase/remote-config-types@0.5.1': {} - '@firebase/remote-config@0.8.2(@firebase/app@0.14.11)': + '@firebase/remote-config@0.8.3(@firebase/app@0.14.12)': dependencies: - '@firebase/app': 0.14.11 - '@firebase/component': 0.7.2 - '@firebase/installations': 0.6.21(@firebase/app@0.14.11) - '@firebase/logger': 0.5.0 - '@firebase/util': 1.15.0 + '@firebase/app': 0.14.12 + '@firebase/component': 0.7.3 + '@firebase/installations': 0.6.22(@firebase/app@0.14.12) + '@firebase/logger': 0.5.1 + '@firebase/util': 1.15.1 tslib: 2.8.1 - '@firebase/storage-compat@0.4.2(@firebase/app-compat@0.5.11)(@firebase/app-types@0.9.4)(@firebase/app@0.14.11)': + '@firebase/storage-compat@0.4.3(@firebase/app-compat@0.5.12)(@firebase/app-types@0.9.5)(@firebase/app@0.14.12)': dependencies: - '@firebase/app-compat': 0.5.11 - '@firebase/component': 0.7.2 - '@firebase/storage': 0.14.2(@firebase/app@0.14.11) - '@firebase/storage-types': 0.8.3(@firebase/app-types@0.9.4)(@firebase/util@1.15.0) - '@firebase/util': 1.15.0 + '@firebase/app-compat': 0.5.12 + '@firebase/component': 0.7.3 + '@firebase/storage': 0.14.3(@firebase/app@0.14.12) + '@firebase/storage-types': 0.8.4(@firebase/app-types@0.9.5)(@firebase/util@1.15.1) + '@firebase/util': 1.15.1 tslib: 2.8.1 transitivePeerDependencies: - '@firebase/app' - '@firebase/app-types' - '@firebase/storage-types@0.8.3(@firebase/app-types@0.9.4)(@firebase/util@1.15.0)': + '@firebase/storage-types@0.8.4(@firebase/app-types@0.9.5)(@firebase/util@1.15.1)': dependencies: - '@firebase/app-types': 0.9.4 - '@firebase/util': 1.15.0 + '@firebase/app-types': 0.9.5 + '@firebase/util': 1.15.1 - '@firebase/storage@0.14.2(@firebase/app@0.14.11)': + '@firebase/storage@0.14.3(@firebase/app@0.14.12)': dependencies: - '@firebase/app': 0.14.11 - '@firebase/component': 0.7.2 - '@firebase/util': 1.15.0 + '@firebase/app': 0.14.12 + '@firebase/component': 0.7.3 + '@firebase/util': 1.15.1 tslib: 2.8.1 - '@firebase/util@1.15.0': + '@firebase/util@1.15.1': dependencies: tslib: 2.8.1 - '@firebase/webchannel-wrapper@1.0.5': {} + '@firebase/webchannel-wrapper@1.0.6': {} '@gar/promise-retry@1.0.3': {} @@ -10337,122 +10349,144 @@ snapshots: '@inquirer/ansi@2.0.5': {} - '@inquirer/checkbox@5.1.5(@types/node@24.12.2)': + '@inquirer/checkbox@5.1.5(@types/node@24.12.4)': dependencies: '@inquirer/ansi': 2.0.5 - '@inquirer/core': 11.1.10(@types/node@24.12.2) + '@inquirer/core': 11.1.10(@types/node@24.12.4) '@inquirer/figures': 2.0.5 - '@inquirer/type': 4.0.5(@types/node@24.12.2) + '@inquirer/type': 4.0.5(@types/node@24.12.4) + optionalDependencies: + '@types/node': 24.12.4 + + '@inquirer/confirm@6.0.12(@types/node@24.12.4)': + dependencies: + '@inquirer/core': 11.1.10(@types/node@24.12.4) + '@inquirer/type': 4.0.5(@types/node@24.12.4) optionalDependencies: - '@types/node': 24.12.2 + '@types/node': 24.12.4 - '@inquirer/confirm@6.0.12(@types/node@24.12.2)': + '@inquirer/confirm@6.0.13(@types/node@24.12.4)': dependencies: - '@inquirer/core': 11.1.10(@types/node@24.12.2) - '@inquirer/type': 4.0.5(@types/node@24.12.2) + '@inquirer/core': 11.1.10(@types/node@24.12.4) + '@inquirer/type': 4.0.5(@types/node@24.12.4) optionalDependencies: - '@types/node': 24.12.2 + '@types/node': 24.12.4 - '@inquirer/core@11.1.10(@types/node@24.12.2)': + '@inquirer/core@11.1.10(@types/node@24.12.4)': dependencies: '@inquirer/ansi': 2.0.5 '@inquirer/figures': 2.0.5 - '@inquirer/type': 4.0.5(@types/node@24.12.2) + '@inquirer/type': 4.0.5(@types/node@24.12.4) cli-width: 4.1.0 fast-wrap-ansi: 0.2.0 mute-stream: 3.0.0 signal-exit: 4.1.0 optionalDependencies: - '@types/node': 24.12.2 + '@types/node': 24.12.4 - '@inquirer/editor@5.1.2(@types/node@24.12.2)': + '@inquirer/editor@5.1.2(@types/node@24.12.4)': dependencies: - '@inquirer/core': 11.1.10(@types/node@24.12.2) - '@inquirer/external-editor': 3.0.0(@types/node@24.12.2) - '@inquirer/type': 4.0.5(@types/node@24.12.2) + '@inquirer/core': 11.1.10(@types/node@24.12.4) + '@inquirer/external-editor': 3.0.0(@types/node@24.12.4) + '@inquirer/type': 4.0.5(@types/node@24.12.4) optionalDependencies: - '@types/node': 24.12.2 + '@types/node': 24.12.4 - '@inquirer/expand@5.0.14(@types/node@24.12.2)': + '@inquirer/expand@5.0.14(@types/node@24.12.4)': dependencies: - '@inquirer/core': 11.1.10(@types/node@24.12.2) - '@inquirer/type': 4.0.5(@types/node@24.12.2) + '@inquirer/core': 11.1.10(@types/node@24.12.4) + '@inquirer/type': 4.0.5(@types/node@24.12.4) optionalDependencies: - '@types/node': 24.12.2 + '@types/node': 24.12.4 - '@inquirer/external-editor@3.0.0(@types/node@24.12.2)': + '@inquirer/external-editor@3.0.0(@types/node@24.12.4)': dependencies: chardet: 2.1.1 iconv-lite: 0.7.2 optionalDependencies: - '@types/node': 24.12.2 + '@types/node': 24.12.4 '@inquirer/figures@2.0.5': {} - '@inquirer/input@5.0.13(@types/node@24.12.2)': + '@inquirer/input@5.0.13(@types/node@24.12.4)': dependencies: - '@inquirer/core': 11.1.10(@types/node@24.12.2) - '@inquirer/type': 4.0.5(@types/node@24.12.2) + '@inquirer/core': 11.1.10(@types/node@24.12.4) + '@inquirer/type': 4.0.5(@types/node@24.12.4) optionalDependencies: - '@types/node': 24.12.2 + '@types/node': 24.12.4 - '@inquirer/number@4.0.13(@types/node@24.12.2)': + '@inquirer/number@4.0.13(@types/node@24.12.4)': dependencies: - '@inquirer/core': 11.1.10(@types/node@24.12.2) - '@inquirer/type': 4.0.5(@types/node@24.12.2) + '@inquirer/core': 11.1.10(@types/node@24.12.4) + '@inquirer/type': 4.0.5(@types/node@24.12.4) optionalDependencies: - '@types/node': 24.12.2 + '@types/node': 24.12.4 - '@inquirer/password@5.0.13(@types/node@24.12.2)': + '@inquirer/password@5.0.13(@types/node@24.12.4)': dependencies: '@inquirer/ansi': 2.0.5 - '@inquirer/core': 11.1.10(@types/node@24.12.2) - '@inquirer/type': 4.0.5(@types/node@24.12.2) + '@inquirer/core': 11.1.10(@types/node@24.12.4) + '@inquirer/type': 4.0.5(@types/node@24.12.4) optionalDependencies: - '@types/node': 24.12.2 - - '@inquirer/prompts@8.4.2(@types/node@24.12.2)': - dependencies: - '@inquirer/checkbox': 5.1.5(@types/node@24.12.2) - '@inquirer/confirm': 6.0.12(@types/node@24.12.2) - '@inquirer/editor': 5.1.2(@types/node@24.12.2) - '@inquirer/expand': 5.0.14(@types/node@24.12.2) - '@inquirer/input': 5.0.13(@types/node@24.12.2) - '@inquirer/number': 4.0.13(@types/node@24.12.2) - '@inquirer/password': 5.0.13(@types/node@24.12.2) - '@inquirer/rawlist': 5.2.9(@types/node@24.12.2) - '@inquirer/search': 4.1.9(@types/node@24.12.2) - '@inquirer/select': 5.1.5(@types/node@24.12.2) + '@types/node': 24.12.4 + + '@inquirer/prompts@8.4.2(@types/node@24.12.4)': + dependencies: + '@inquirer/checkbox': 5.1.5(@types/node@24.12.4) + '@inquirer/confirm': 6.0.12(@types/node@24.12.4) + '@inquirer/editor': 5.1.2(@types/node@24.12.4) + '@inquirer/expand': 5.0.14(@types/node@24.12.4) + '@inquirer/input': 5.0.13(@types/node@24.12.4) + '@inquirer/number': 4.0.13(@types/node@24.12.4) + '@inquirer/password': 5.0.13(@types/node@24.12.4) + '@inquirer/rawlist': 5.2.9(@types/node@24.12.4) + '@inquirer/search': 4.1.9(@types/node@24.12.4) + '@inquirer/select': 5.1.5(@types/node@24.12.4) optionalDependencies: - '@types/node': 24.12.2 + '@types/node': 24.12.4 + + '@inquirer/prompts@8.4.3(@types/node@24.12.4)': + dependencies: + '@inquirer/checkbox': 5.1.5(@types/node@24.12.4) + '@inquirer/confirm': 6.0.13(@types/node@24.12.4) + '@inquirer/editor': 5.1.2(@types/node@24.12.4) + '@inquirer/expand': 5.0.14(@types/node@24.12.4) + '@inquirer/input': 5.0.13(@types/node@24.12.4) + '@inquirer/number': 4.0.13(@types/node@24.12.4) + '@inquirer/password': 5.0.13(@types/node@24.12.4) + '@inquirer/rawlist': 5.2.9(@types/node@24.12.4) + '@inquirer/search': 4.1.9(@types/node@24.12.4) + '@inquirer/select': 5.1.5(@types/node@24.12.4) + optionalDependencies: + '@types/node': 24.12.4 - '@inquirer/rawlist@5.2.9(@types/node@24.12.2)': + '@inquirer/rawlist@5.2.9(@types/node@24.12.4)': dependencies: - '@inquirer/core': 11.1.10(@types/node@24.12.2) - '@inquirer/type': 4.0.5(@types/node@24.12.2) + '@inquirer/core': 11.1.10(@types/node@24.12.4) + '@inquirer/type': 4.0.5(@types/node@24.12.4) optionalDependencies: - '@types/node': 24.12.2 + '@types/node': 24.12.4 - '@inquirer/search@4.1.9(@types/node@24.12.2)': + '@inquirer/search@4.1.9(@types/node@24.12.4)': dependencies: - '@inquirer/core': 11.1.10(@types/node@24.12.2) + '@inquirer/core': 11.1.10(@types/node@24.12.4) '@inquirer/figures': 2.0.5 - '@inquirer/type': 4.0.5(@types/node@24.12.2) + '@inquirer/type': 4.0.5(@types/node@24.12.4) optionalDependencies: - '@types/node': 24.12.2 + '@types/node': 24.12.4 - '@inquirer/select@5.1.5(@types/node@24.12.2)': + '@inquirer/select@5.1.5(@types/node@24.12.4)': dependencies: '@inquirer/ansi': 2.0.5 - '@inquirer/core': 11.1.10(@types/node@24.12.2) + '@inquirer/core': 11.1.10(@types/node@24.12.4) '@inquirer/figures': 2.0.5 - '@inquirer/type': 4.0.5(@types/node@24.12.2) + '@inquirer/type': 4.0.5(@types/node@24.12.4) optionalDependencies: - '@types/node': 24.12.2 + '@types/node': 24.12.4 - '@inquirer/type@4.0.5(@types/node@24.12.2)': + '@inquirer/type@4.0.5(@types/node@24.12.4)': optionalDependencies: - '@types/node': 24.12.2 + '@types/node': 24.12.4 '@isaacs/cliui@8.0.2': dependencies: @@ -10626,10 +10660,10 @@ snapshots: '@leichtgewicht/ip-codec@2.0.5': {} - '@listr2/prompt-adapter-inquirer@4.2.3(@inquirer/prompts@8.4.2(@types/node@24.12.2))(@types/node@24.12.2)(listr2@10.2.1)': + '@listr2/prompt-adapter-inquirer@4.2.3(@inquirer/prompts@8.4.2(@types/node@24.12.4))(@types/node@24.12.4)(listr2@10.2.1)': dependencies: - '@inquirer/prompts': 8.4.2(@types/node@24.12.2) - '@inquirer/type': 4.0.5(@types/node@24.12.2) + '@inquirer/prompts': 8.4.2(@types/node@24.12.4) + '@inquirer/type': 4.0.5(@types/node@24.12.4) listr2: 10.2.1 transitivePeerDependencies: - '@types/node' @@ -11639,7 +11673,7 @@ snapshots: dependencies: undici-types: 6.21.0 - '@types/node@24.12.2': + '@types/node@24.12.4': dependencies: undici-types: 7.16.0 @@ -12026,9 +12060,9 @@ snapshots: lodash: 4.18.1 minimatch: 7.4.9 - '@vitejs/plugin-basic-ssl@2.3.0(vite@7.3.2(@types/node@24.12.2)(jiti@2.7.0)(less@4.6.4)(sass@1.99.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0))': + '@vitejs/plugin-basic-ssl@2.3.0(vite@7.3.2(@types/node@24.12.4)(jiti@2.7.0)(less@4.6.4)(sass@1.99.0)(terser@5.46.2)(tsx@4.22.1)(yaml@2.9.0))': dependencies: - vite: 7.3.2(@types/node@24.12.2)(jiti@2.7.0)(less@4.6.4)(sass@1.99.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0) + vite: 7.3.2(@types/node@24.12.4)(jiti@2.7.0)(less@4.6.4)(sass@1.99.0)(terser@5.46.2)(tsx@4.22.1)(yaml@2.9.0) '@vitest/coverage-v8@4.1.5(vitest@4.1.5)': dependencies: @@ -12042,7 +12076,7 @@ snapshots: obug: 2.1.1 std-env: 4.1.0 tinyrainbow: 3.1.0 - vitest: 4.1.5(@opentelemetry/api@1.9.1)(@types/node@24.12.2)(@vitest/coverage-v8@4.1.5)(jiti@2.7.0)(jsdom@29.1.1)(less@4.6.4)(sass@1.99.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0) + vitest: 4.1.5(@opentelemetry/api@1.9.1)(@types/node@24.12.4)(@vitest/coverage-v8@4.1.5)(jiti@2.7.0)(jsdom@29.1.1)(less@4.6.4)(sass@1.99.0)(terser@5.46.2)(tsx@4.22.1)(yaml@2.9.0) '@vitest/expect@4.1.5': dependencies: @@ -12053,13 +12087,13 @@ snapshots: chai: 6.2.2 tinyrainbow: 3.1.0 - '@vitest/mocker@4.1.5(vite@7.3.2(@types/node@24.12.2)(jiti@2.7.0)(less@4.6.4)(sass@1.99.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0))': + '@vitest/mocker@4.1.5(vite@7.3.2(@types/node@24.12.4)(jiti@2.7.0)(less@4.6.4)(sass@1.99.0)(terser@5.46.2)(tsx@4.22.1)(yaml@2.9.0))': dependencies: '@vitest/spy': 4.1.5 estree-walker: 3.0.3 magic-string: 0.30.21 optionalDependencies: - vite: 7.3.2(@types/node@24.12.2)(jiti@2.7.0)(less@4.6.4)(sass@1.99.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0) + vite: 7.3.2(@types/node@24.12.4)(jiti@2.7.0)(less@4.6.4)(sass@1.99.0)(terser@5.46.2)(tsx@4.22.1)(yaml@2.9.0) '@vitest/pretty-format@4.1.5': dependencies: @@ -13853,36 +13887,36 @@ snapshots: locate-path: 6.0.0 path-exists: 4.0.0 - firebase@12.12.1: - dependencies: - '@firebase/ai': 2.11.1(@firebase/app-types@0.9.4)(@firebase/app@0.14.11) - '@firebase/analytics': 0.10.21(@firebase/app@0.14.11) - '@firebase/analytics-compat': 0.2.27(@firebase/app-compat@0.5.11)(@firebase/app@0.14.11) - '@firebase/app': 0.14.11 - '@firebase/app-check': 0.11.2(@firebase/app@0.14.11) - '@firebase/app-check-compat': 0.4.2(@firebase/app-compat@0.5.11)(@firebase/app@0.14.11) - '@firebase/app-compat': 0.5.11 - '@firebase/app-types': 0.9.4 - '@firebase/auth': 1.13.0(@firebase/app@0.14.11) - '@firebase/auth-compat': 0.6.5(@firebase/app-compat@0.5.11)(@firebase/app-types@0.9.4)(@firebase/app@0.14.11) - '@firebase/data-connect': 0.6.0(@firebase/app@0.14.11) - '@firebase/database': 1.1.2 - '@firebase/database-compat': 2.1.3 - '@firebase/firestore': 4.14.0(@firebase/app@0.14.11) - '@firebase/firestore-compat': 0.4.8(@firebase/app-compat@0.5.11)(@firebase/app-types@0.9.4)(@firebase/app@0.14.11) - '@firebase/functions': 0.13.3(@firebase/app@0.14.11) - '@firebase/functions-compat': 0.4.3(@firebase/app-compat@0.5.11)(@firebase/app@0.14.11) - '@firebase/installations': 0.6.21(@firebase/app@0.14.11) - '@firebase/installations-compat': 0.2.21(@firebase/app-compat@0.5.11)(@firebase/app-types@0.9.4)(@firebase/app@0.14.11) - '@firebase/messaging': 0.12.25(@firebase/app@0.14.11) - '@firebase/messaging-compat': 0.2.25(@firebase/app-compat@0.5.11)(@firebase/app@0.14.11) - '@firebase/performance': 0.7.11(@firebase/app@0.14.11) - '@firebase/performance-compat': 0.2.24(@firebase/app-compat@0.5.11)(@firebase/app@0.14.11) - '@firebase/remote-config': 0.8.2(@firebase/app@0.14.11) - '@firebase/remote-config-compat': 0.2.23(@firebase/app-compat@0.5.11)(@firebase/app@0.14.11) - '@firebase/storage': 0.14.2(@firebase/app@0.14.11) - '@firebase/storage-compat': 0.4.2(@firebase/app-compat@0.5.11)(@firebase/app-types@0.9.4)(@firebase/app@0.14.11) - '@firebase/util': 1.15.0 + firebase@12.13.0: + dependencies: + '@firebase/ai': 2.12.0(@firebase/app-types@0.9.5)(@firebase/app@0.14.12) + '@firebase/analytics': 0.10.22(@firebase/app@0.14.12) + '@firebase/analytics-compat': 0.2.28(@firebase/app-compat@0.5.12)(@firebase/app@0.14.12) + '@firebase/app': 0.14.12 + '@firebase/app-check': 0.11.3(@firebase/app@0.14.12) + '@firebase/app-check-compat': 0.4.3(@firebase/app-compat@0.5.12)(@firebase/app@0.14.12) + '@firebase/app-compat': 0.5.12 + '@firebase/app-types': 0.9.5 + '@firebase/auth': 1.13.1(@firebase/app@0.14.12) + '@firebase/auth-compat': 0.6.6(@firebase/app-compat@0.5.12)(@firebase/app-types@0.9.5)(@firebase/app@0.14.12) + '@firebase/data-connect': 0.7.0(@firebase/app@0.14.12) + '@firebase/database': 1.1.3 + '@firebase/database-compat': 2.1.4 + '@firebase/firestore': 4.14.1(@firebase/app@0.14.12) + '@firebase/firestore-compat': 0.4.9(@firebase/app-compat@0.5.12)(@firebase/app-types@0.9.5)(@firebase/app@0.14.12) + '@firebase/functions': 0.13.4(@firebase/app@0.14.12) + '@firebase/functions-compat': 0.4.4(@firebase/app-compat@0.5.12)(@firebase/app@0.14.12) + '@firebase/installations': 0.6.22(@firebase/app@0.14.12) + '@firebase/installations-compat': 0.2.22(@firebase/app-compat@0.5.12)(@firebase/app-types@0.9.5)(@firebase/app@0.14.12) + '@firebase/messaging': 0.12.26(@firebase/app@0.14.12) + '@firebase/messaging-compat': 0.2.26(@firebase/app-compat@0.5.12)(@firebase/app@0.14.12) + '@firebase/performance': 0.7.12(@firebase/app@0.14.12) + '@firebase/performance-compat': 0.2.25(@firebase/app-compat@0.5.12)(@firebase/app@0.14.12) + '@firebase/remote-config': 0.8.3(@firebase/app@0.14.12) + '@firebase/remote-config-compat': 0.2.24(@firebase/app-compat@0.5.12)(@firebase/app@0.14.12) + '@firebase/storage': 0.14.3(@firebase/app@0.14.12) + '@firebase/storage-compat': 0.4.3(@firebase/app-compat@0.5.12)(@firebase/app-types@0.9.5)(@firebase/app@0.14.12) + '@firebase/util': 1.15.1 transitivePeerDependencies: - '@react-native-async-storage/async-storage' @@ -13895,7 +13929,7 @@ snapshots: flatted@3.4.2: {} - folder-hash@4.1.2(supports-color@10.2.2): + folder-hash@4.1.3(supports-color@10.2.2): dependencies: debug: 4.4.0(supports-color@10.2.2) minimatch: 7.4.9 @@ -14029,10 +14063,6 @@ snapshots: es-errors: 1.3.0 get-intrinsic: 1.3.0 - get-tsconfig@4.14.0: - dependencies: - resolve-pkg-maps: 1.0.0 - get-uri@6.0.5: dependencies: basic-ftp: 5.3.1 @@ -15235,10 +15265,10 @@ snapshots: netmask@2.1.1: {} - ng-packagr@22.0.0-next.4(@angular/compiler-cli@22.0.0-next.12(@angular/compiler@22.0.0-next.12)(typescript@6.0.3))(tslib@2.8.1)(typescript@6.0.3): + ng-packagr@22.0.0-rc.0(@angular/compiler-cli@22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(typescript@6.0.3))(tslib@2.8.1)(typescript@6.0.3): dependencies: '@ampproject/remapping': 2.3.0 - '@angular/compiler-cli': 22.0.0-next.12(@angular/compiler@22.0.0-next.12)(typescript@6.0.3) + '@angular/compiler-cli': 22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(typescript@6.0.3) '@rollup/plugin-json': 6.1.0(rollup@4.60.2) '@rollup/wasm-node': 4.60.2 ajv: 8.20.0 @@ -15263,7 +15293,7 @@ snapshots: optionalDependencies: rollup: 4.60.2 - nock@14.0.14: + nock@14.0.15: dependencies: '@mswjs/interceptors': 0.41.9 json-stringify-safe: 5.0.1 @@ -16035,8 +16065,6 @@ snapshots: resolve-from@4.0.0: {} - resolve-pkg-maps@1.0.0: {} - resolve-url-loader@5.0.0: dependencies: adjust-sourcemap-loader: 4.0.0 @@ -16269,6 +16297,8 @@ snapshots: semver@7.7.4: {} + semver@7.8.0: {} + send@0.19.2: dependencies: debug: 2.6.9 @@ -16903,10 +16933,9 @@ snapshots: tslib@2.8.1: {} - tsx@4.21.0: + tsx@4.22.1: dependencies: - esbuild: 0.27.7 - get-tsconfig: 4.14.0 + esbuild: 0.28.0 optionalDependencies: fsevents: 2.3.3 @@ -17154,7 +17183,7 @@ snapshots: core-util-is: 1.0.2 extsprintf: 1.3.0 - vite@7.3.2(@types/node@24.12.2)(jiti@2.7.0)(less@4.6.4)(sass@1.99.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0): + vite@7.3.2(@types/node@24.12.4)(jiti@2.7.0)(less@4.6.4)(sass@1.99.0)(terser@5.46.2)(tsx@4.22.1)(yaml@2.9.0): dependencies: esbuild: 0.27.7 fdir: 6.5.0(picomatch@4.0.4) @@ -17163,19 +17192,19 @@ snapshots: rollup: 4.60.2 tinyglobby: 0.2.16 optionalDependencies: - '@types/node': 24.12.2 + '@types/node': 24.12.4 fsevents: 2.3.3 jiti: 2.7.0 less: 4.6.4 sass: 1.99.0 terser: 5.46.2 - tsx: 4.21.0 + tsx: 4.22.1 yaml: 2.9.0 - vitest@4.1.5(@opentelemetry/api@1.9.1)(@types/node@24.12.2)(@vitest/coverage-v8@4.1.5)(jiti@2.7.0)(jsdom@29.1.1)(less@4.6.4)(sass@1.99.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0): + vitest@4.1.5(@opentelemetry/api@1.9.1)(@types/node@24.12.4)(@vitest/coverage-v8@4.1.5)(jiti@2.7.0)(jsdom@29.1.1)(less@4.6.4)(sass@1.99.0)(terser@5.46.2)(tsx@4.22.1)(yaml@2.9.0): dependencies: '@vitest/expect': 4.1.5 - '@vitest/mocker': 4.1.5(vite@7.3.2(@types/node@24.12.2)(jiti@2.7.0)(less@4.6.4)(sass@1.99.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0)) + '@vitest/mocker': 4.1.5(vite@7.3.2(@types/node@24.12.4)(jiti@2.7.0)(less@4.6.4)(sass@1.99.0)(terser@5.46.2)(tsx@4.22.1)(yaml@2.9.0)) '@vitest/pretty-format': 4.1.5 '@vitest/runner': 4.1.5 '@vitest/snapshot': 4.1.5 @@ -17192,11 +17221,11 @@ snapshots: tinyexec: 1.1.2 tinyglobby: 0.2.16 tinyrainbow: 3.1.0 - vite: 7.3.2(@types/node@24.12.2)(jiti@2.7.0)(less@4.6.4)(sass@1.99.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.9.0) + vite: 7.3.2(@types/node@24.12.4)(jiti@2.7.0)(less@4.6.4)(sass@1.99.0)(terser@5.46.2)(tsx@4.22.1)(yaml@2.9.0) why-is-node-running: 2.3.0 optionalDependencies: '@opentelemetry/api': 1.9.1 - '@types/node': 24.12.2 + '@types/node': 24.12.4 '@vitest/coverage-v8': 4.1.5(vitest@4.1.5) jsdom: 29.1.1 transitivePeerDependencies: @@ -17603,8 +17632,6 @@ snapshots: yallist@5.0.0: {} - yaml@2.8.4: {} - yaml@2.9.0: {} yargs-parser@20.2.9: {} From 1a2654cdc6f5d211e5f0a29b5a39f916aab85094 Mon Sep 17 00:00:00 2001 From: Charles Lyding <19598772+clydin@users.noreply.github.com> Date: Mon, 18 May 2026 13:16:14 -0400 Subject: [PATCH 22/34] refactor(@angular/cli): implement experimental unified run_target facade and strategy dispatcher Introduce the unified `run_target` MCP tool and the underlying builder strategy dispatcher in a dedicated `tools/run-target` subdirectory. This architecture leverages the strategy pattern to delegate Angular CLI target executions (build, test, lint, e2e) to specialized internal strategies, defaulting to a universal `GenericTargetStrategy` fallback. (cherry picked from commit 25fd7149e6b95839faeef8d882088228aeaf81e0) --- .../cli/src/commands/mcp/mcp-server.ts | 9 +- .../run-target/generic-target-strategy.ts | 92 +++++++++++ .../mcp/tools/run-target/run-target.ts | 70 +++++++++ .../mcp/tools/run-target/run-target_spec.ts | 148 ++++++++++++++++++ .../commands/mcp/tools/run-target/strategy.ts | 18 +++ .../commands/mcp/tools/run-target/types.ts | 55 +++++++ tests/e2e/tests/mcp/run-target.ts | 60 +++++++ 7 files changed, 451 insertions(+), 1 deletion(-) create mode 100644 packages/angular/cli/src/commands/mcp/tools/run-target/generic-target-strategy.ts create mode 100644 packages/angular/cli/src/commands/mcp/tools/run-target/run-target.ts create mode 100644 packages/angular/cli/src/commands/mcp/tools/run-target/run-target_spec.ts create mode 100644 packages/angular/cli/src/commands/mcp/tools/run-target/strategy.ts create mode 100644 packages/angular/cli/src/commands/mcp/tools/run-target/types.ts create mode 100644 tests/e2e/tests/mcp/run-target.ts diff --git a/packages/angular/cli/src/commands/mcp/mcp-server.ts b/packages/angular/cli/src/commands/mcp/mcp-server.ts index 84a2c54a468c..4697f3bff421 100644 --- a/packages/angular/cli/src/commands/mcp/mcp-server.ts +++ b/packages/angular/cli/src/commands/mcp/mcp-server.ts @@ -25,6 +25,7 @@ import { DOC_SEARCH_TOOL } from './tools/doc-search'; import { E2E_TOOL } from './tools/e2e'; import { ZONELESS_MIGRATION_TOOL } from './tools/onpush-zoneless-migration/zoneless-migration'; import { LIST_PROJECTS_TOOL } from './tools/projects'; +import { RUN_TARGET_TOOL } from './tools/run-target/run-target'; import { TEST_TOOL } from './tools/test'; import { type AnyMcpToolDeclaration, registerTools } from './tools/tool-registry'; @@ -49,7 +50,13 @@ const STABLE_TOOLS = [ * The set of tools that are available but not enabled by default. * These tools are considered experimental and may have limitations. */ -export const EXPERIMENTAL_TOOLS = [BUILD_TOOL, E2E_TOOL, TEST_TOOL, ...DEVSERVER_TOOLS] as const; +export const EXPERIMENTAL_TOOLS = [ + BUILD_TOOL, + E2E_TOOL, + TEST_TOOL, + RUN_TARGET_TOOL, + ...DEVSERVER_TOOLS, +] as const; /** * Experimental tools that are grouped together under a single name. 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 new file mode 100644 index 000000000000..079c30fc0793 --- /dev/null +++ b/packages/angular/cli/src/commands/mcp/tools/run-target/generic-target-strategy.ts @@ -0,0 +1,92 @@ +/** + * @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 { getCommandErrorLogs } from '../../utils'; +import type { McpToolContext } from '../tool-registry'; +import type { TargetStrategy } from './strategy'; +import type { RunTargetOutput, StrategyExecutionContext } from './types'; + +const BUILT_IN_COMMANDS = new Set([ + 'build', + 'test', + 'e2e', + 'serve', + 'deploy', + 'extract-i18n', + 'lint', +]); + +export class GenericTargetStrategy implements TargetStrategy { + canHandle(target: string, builder?: string): boolean { + return true; // Universal fallback strategy + } + + async execute( + input: StrategyExecutionContext, + context: McpToolContext, + ): Promise { + if (input.target === 'serve' || input.options?.['watch'] === true) { + throw new Error( + `Watch mode execution (serve target or watch option) is not yet supported by 'run_target'. ` + + `Please use the legacy 'devserver.start' / 'devserver.wait_for_build' tools instead.`, + ); + } + + const args: string[] = []; + if (BUILT_IN_COMMANDS.has(input.target)) { + args.push(input.target, input.projectName); + } else { + args.push('run', `${input.projectName}:${input.target}`); + } + + if (input.configuration) { + args.push('-c', input.configuration); + } + + let options = input.options; + if (input.target === 'test') { + options = { + ...options, + watch: false, + }; + } + + if (options) { + for (const [key, value] of Object.entries(options)) { + if (!/^[a-zA-Z0-9-_]+$/.test(key)) { + throw new Error( + `Invalid option key: '${key}'. Option keys must be alphanumeric, hyphens, or underscores.`, + ); + } + + if (typeof value === 'boolean') { + args.push(value ? `--${key}` : `--no-${key}`); + } else if (Array.isArray(value)) { + for (const item of value) { + args.push(`--${key}=${item}`); + } + } else if (value !== null && value !== undefined) { + args.push(`--${key}=${value}`); + } + } + } + + let status: 'success' | 'failure' = 'success'; + let logs: string[]; + + try { + const result = await context.host.executeNgCommand(args, { cwd: input.workspacePath }); + logs = result.logs; + } catch (e) { + status = 'failure'; + logs = getCommandErrorLogs(e); + } + + return { status, logs }; + } +} diff --git a/packages/angular/cli/src/commands/mcp/tools/run-target/run-target.ts b/packages/angular/cli/src/commands/mcp/tools/run-target/run-target.ts new file mode 100644 index 000000000000..0dacdaecb209 --- /dev/null +++ b/packages/angular/cli/src/commands/mcp/tools/run-target/run-target.ts @@ -0,0 +1,70 @@ +/** + * @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 { createStructuredContentOutput } from '../../utils'; +import { resolveWorkspaceAndProject } from '../../workspace-utils'; +import { type McpToolContext, declareTool } from '../tool-registry'; +import { GenericTargetStrategy } from './generic-target-strategy'; +import type { TargetStrategy } from './strategy'; +import { type RunTargetInput, runTargetInputSchema, runTargetOutputSchema } from './types'; + +const FALLBACK_STRATEGY = new GenericTargetStrategy(); +const STRATEGIES: TargetStrategy[] = []; + +export async function runTarget(input: RunTargetInput, context: McpToolContext) { + const { workspace, workspacePath, projectName } = await resolveWorkspaceAndProject({ + host: context.host, + server: context.server, + workspacePathInput: input.workspace, + projectNameInput: input.project, + mcpWorkspace: context.workspace, + }); + + const targetDefinition = workspace.projects.get(projectName)?.targets.get(input.target); + const builder = targetDefinition?.builder; + + const strategy = STRATEGIES.find((s) => s.canHandle(input.target, builder)) ?? FALLBACK_STRATEGY; + + const result = await strategy.execute( + { + workspacePath, + projectName, + target: input.target, + configuration: input.configuration, + options: input.options, + }, + context, + ); + + return createStructuredContentOutput(result); +} + +export const RUN_TARGET_TOOL = declareTool({ + name: 'run_target', + title: 'Run Project Target', + description: ` + +Executes a configured target (such as build, test, lint, e2e) for an Angular project. +This is the single, unified interface for executing all project tasks natively. + + +* Building an application or library. +* Running unit tests, E2E tests, or linters. +* Deploying or running custom workspace targets discovered via 'list_projects'. + + +* Mandatory Discovery: You MUST discover available project targets by calling 'list_projects' first. +* Watch mode (serve target or watch options) is NOT yet supported in this version of run_target. + You MUST use the legacy 'devserver.*' tools for background server lifecycles. +`, + isReadOnly: false, + isLocalOnly: true, + inputSchema: runTargetInputSchema.shape, + outputSchema: runTargetOutputSchema.shape, + factory: (context) => (input) => runTarget(input, context), +}); 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 new file mode 100644 index 000000000000..67b1fffef27e --- /dev/null +++ b/packages/angular/cli/src/commands/mcp/tools/run-target/run-target_spec.ts @@ -0,0 +1,148 @@ +/** + * @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 { CommandError } from '../../host'; +import type { MockHost } from '../../testing/mock-host'; +import { + type MockMcpToolContext, + addProjectToWorkspace, + createMockContext, +} from '../../testing/test-utils'; +import { runTarget } from './run-target'; + +describe('Run Target Tool', () => { + let mockHost: MockHost; + let mockContext: MockMcpToolContext; + + beforeEach(() => { + const mock = createMockContext(); + mockHost = mock.host; + mockContext = mock.context; + addProjectToWorkspace(mock.projects, 'my-app'); + }); + + it('should construct the command correctly with target and default project', async () => { + mockContext.workspace.extensions['defaultProject'] = 'my-app'; + await runTarget({ target: 'build' }, mockContext); + expect(mockHost.executeNgCommand).toHaveBeenCalledWith(['build', 'my-app'], { cwd: '/test' }); + }); + + it('should construct the command correctly with a specified project', async () => { + addProjectToWorkspace(mockContext.workspace.projects, 'my-lib'); + await runTarget({ project: 'my-lib', target: 'lint' }, mockContext); + expect(mockHost.executeNgCommand).toHaveBeenCalledWith(['lint', 'my-lib'], { cwd: '/test' }); + }); + + it('should construct the command correctly with configuration', async () => { + mockContext.workspace.extensions['defaultProject'] = 'my-app'; + await runTarget({ target: 'build', configuration: 'production' }, mockContext); + expect(mockHost.executeNgCommand).toHaveBeenCalledWith( + ['build', 'my-app', '-c', 'production'], + { + cwd: '/test', + }, + ); + }); + + it('should route custom targets via ng run command syntax', async () => { + mockContext.workspace.extensions['defaultProject'] = 'my-app'; + await runTarget({ target: 'storybook', configuration: 'docs' }, mockContext); + expect(mockHost.executeNgCommand).toHaveBeenCalledWith( + ['run', 'my-app:storybook', '-c', 'docs'], + { cwd: '/test' }, + ); + }); + + it('should map boolean options correctly to CLI flags', async () => { + mockContext.workspace.extensions['defaultProject'] = 'my-app'; + await runTarget({ target: 'lint', options: { fix: true, quiet: false } }, mockContext); + expect(mockHost.executeNgCommand).toHaveBeenCalledWith( + ['lint', 'my-app', '--fix', '--no-quiet'], + { cwd: '/test' }, + ); + }); + + it('should map string and number options correctly to CLI flags and auto-inject no-watch', async () => { + mockContext.workspace.extensions['defaultProject'] = 'my-app'; + await runTarget( + { target: 'test', options: { browsers: 'ChromeHeadless', timeout: 5000 } }, + mockContext, + ); + expect(mockHost.executeNgCommand).toHaveBeenCalledWith( + ['test', 'my-app', '--browsers=ChromeHeadless', '--timeout=5000', '--no-watch'], + { cwd: '/test' }, + ); + }); + + it('should map array options correctly as multiple occurrences of the flag', async () => { + mockContext.workspace.extensions['defaultProject'] = 'my-app'; + await runTarget({ target: 'lint', options: { include: ['a', 'b'] } }, mockContext); + expect(mockHost.executeNgCommand).toHaveBeenCalledWith( + ['lint', 'my-app', '--include=a', '--include=b'], + { cwd: '/test' }, + ); + }); + + it('should automatically inject no-watch for test target even if no options provided', async () => { + mockContext.workspace.extensions['defaultProject'] = 'my-app'; + await runTarget({ target: 'test' }, mockContext); + expect(mockHost.executeNgCommand).toHaveBeenCalledWith(['test', 'my-app', '--no-watch'], { + cwd: '/test', + }); + }); + + it('should throw an error if option key is malformed (contains whitespace/special chars)', async () => { + mockContext.workspace.extensions['defaultProject'] = 'my-app'; + await expectAsync( + runTarget({ target: 'lint', options: { 'fix --danger': true } }, mockContext), + ).toBeRejectedWithError(/Invalid option key: 'fix --danger'/); + }); + + it('should handle a successful execution and return logs', async () => { + const executionLogs = ['Linting complete', 'All rules passed!']; + mockHost.executeNgCommand.and.resolveTo({ + logs: executionLogs, + }); + + const { structuredContent } = await runTarget( + { project: 'my-app', target: 'lint' }, + mockContext, + ); + + expect(structuredContent.status).toBe('success'); + expect(structuredContent.logs).toEqual(executionLogs); + }); + + it('should handle a failed execution and capture command errors', async () => { + const executionLogs = ['Error: Rule violation found.']; + const error = new CommandError('Lint failed', executionLogs, 1); + mockHost.executeNgCommand.and.rejectWith(error); + + const { structuredContent } = await runTarget( + { project: 'my-app', target: 'lint' }, + mockContext, + ); + + expect(structuredContent.status).toBe('failure'); + expect(structuredContent.logs).toEqual([...executionLogs, 'Lint failed']); + }); + + it('should throw an error if attempting to run the serve target', async () => { + mockContext.workspace.extensions['defaultProject'] = 'my-app'; + await expectAsync(runTarget({ target: 'serve' }, mockContext)).toBeRejectedWithError( + /Watch mode execution.*is not yet supported/, + ); + }); + + it('should throw an error if attempting to run a target with watch option true', async () => { + mockContext.workspace.extensions['defaultProject'] = 'my-app'; + await expectAsync( + runTarget({ target: 'build', options: { watch: true } }, mockContext), + ).toBeRejectedWithError(/Watch mode execution.*is not yet supported/); + }); +}); diff --git a/packages/angular/cli/src/commands/mcp/tools/run-target/strategy.ts b/packages/angular/cli/src/commands/mcp/tools/run-target/strategy.ts new file mode 100644 index 000000000000..8c149a174f93 --- /dev/null +++ b/packages/angular/cli/src/commands/mcp/tools/run-target/strategy.ts @@ -0,0 +1,18 @@ +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.dev/license + */ + +import type { McpToolContext } from '../tool-registry'; +import type { RunTargetOutput, StrategyExecutionContext } from './types'; + +export interface TargetStrategy { + /** Whether this strategy is responsible for handling the given target/builder */ + canHandle(target: string, builder?: string): boolean; + + /** Executes the target using this strategy */ + execute(input: StrategyExecutionContext, context: McpToolContext): Promise; +} diff --git a/packages/angular/cli/src/commands/mcp/tools/run-target/types.ts b/packages/angular/cli/src/commands/mcp/tools/run-target/types.ts new file mode 100644 index 000000000000..aa0d3a0cf7ca --- /dev/null +++ b/packages/angular/cli/src/commands/mcp/tools/run-target/types.ts @@ -0,0 +1,55 @@ +/** + * @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 { z } from 'zod'; +import { workspaceAndProjectOptions } from '../../shared-options'; + +export const optionValueSchema = z.union([ + z.string(), + z.number(), + z.boolean(), + z.array(z.union([z.string(), z.number()])), +]); + +export type OptionValue = z.infer; + +export const runTargetInputSchema = z.object({ + ...workspaceAndProjectOptions, + target: z + .string() + .describe('The project target to execute (e.g., "build", "test", "lint", "e2e", "deploy").'), + configuration: z + .string() + .optional() + .describe('Target configuration (e.g., "development", "production").'), + options: z + .record(z.string(), optionValueSchema) + .optional() + .describe('Optional key-value options to override the configured target options.'), +}); + +export type RunTargetInput = z.infer; + +export const runTargetOutputSchema = z.object({ + status: z.enum(['success', 'failure']).describe('Execution status.'), + logs: z.array(z.string()).describe('Clean, line-buffered output logs from execution.'), + extensions: z + .record(z.string(), z.unknown()) + .optional() + .describe('Specialized metadata populated by specific target strategies.'), +}); + +export type RunTargetOutput = z.infer; + +export interface StrategyExecutionContext { + workspacePath: string; + projectName: string; + target: string; + configuration?: string; + options?: Record; +} diff --git a/tests/e2e/tests/mcp/run-target.ts b/tests/e2e/tests/mcp/run-target.ts new file mode 100644 index 000000000000..2e0aa280fa86 --- /dev/null +++ b/tests/e2e/tests/mcp/run-target.ts @@ -0,0 +1,60 @@ +import { exec, ProcessOutput, silentNpm } from '../../utils/process'; +import assert from 'node:assert/strict'; + +const MCP_INSPECTOR_PACKAGE_NAME = '@modelcontextprotocol/inspector-cli'; +const MCP_INSPECTOR_PACKAGE_VERSION = '0.16.2'; +const MCP_INSPECTOR_COMMAND_NAME = 'mcp-inspector-cli'; + +async function runInspector(...args: string[]): Promise { + const result = await exec( + MCP_INSPECTOR_COMMAND_NAME, + '--cli', + 'npx', + '--no', + '@angular/cli', + 'mcp', + ...args, + ); + + return result; +} + +export default async function () { + await silentNpm( + 'install', + '--ignore-scripts', + '-g', + `${MCP_INSPECTOR_PACKAGE_NAME}@${MCP_INSPECTOR_PACKAGE_VERSION}`, + ); + + try { + // 1. Ensure `run_target` is NOT registered by default (stable-only tools registered) + const { stdout: stdoutDefault } = await runInspector('--method', 'tools/list'); + assert.doesNotMatch(stdoutDefault, /"run_target"/); + + // 2. Ensure `run_target` is registered when explicitly enabled via experimental-tool flag + const { stdout: stdoutEnabled } = await runInspector( + '-E', + 'run_target', + '--method', + 'tools/list', + ); + assert.match(stdoutEnabled, /"run_target"/); + + // 3. Call run_target with build target + const { stdout: stdoutCall } = await runInspector( + '-E', + 'run_target', + '--method', + 'tools/call', + '--tool-name', + 'run_target', + '--tool-arg', + 'target=build', + ); + assert.match(stdoutCall, /"status":\s*"success"/); + } finally { + // 4. Clean up global installation + await silentNpm('uninstall', '-g', MCP_INSPECTOR_PACKAGE_NAME); + } +} From 9c62e71fd8a0dfff6c86ce7b5c9dc8a9e0e1eb2a Mon Sep 17 00:00:00 2001 From: Angular Robot Date: Tue, 19 May 2026 23:18:21 +0000 Subject: [PATCH 23/34] build: update bazel dependencies See associated pull request for more information. --- MODULE.bazel | 8 ++++---- MODULE.bazel.lock | 3 --- 2 files changed, 4 insertions(+), 7 deletions(-) diff --git a/MODULE.bazel b/MODULE.bazel index 8fc0d28e8f65..2348e7dad043 100644 --- a/MODULE.bazel +++ b/MODULE.bazel @@ -4,17 +4,17 @@ module( name = "angular_cli", ) -bazel_dep(name = "platforms", version = "1.0.0") +bazel_dep(name = "platforms", version = "1.1.0") bazel_dep(name = "yq.bzl", version = "0.3.6") bazel_dep(name = "rules_nodejs", version = "6.7.4") -bazel_dep(name = "aspect_rules_js", version = "3.0.3") -bazel_dep(name = "aspect_rules_ts", version = "3.8.8") +bazel_dep(name = "aspect_rules_js", version = "3.1.2") +bazel_dep(name = "aspect_rules_ts", version = "3.8.9") bazel_dep(name = "rules_pkg", version = "1.2.0") bazel_dep(name = "rules_cc", version = "0.2.18") bazel_dep(name = "jq.bzl", version = "0.6.1") bazel_dep(name = "bazel_lib", version = "3.3.1") bazel_dep(name = "bazel_skylib", version = "1.9.0") -bazel_dep(name = "aspect_rules_esbuild", version = "0.25.1") +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( diff --git a/MODULE.bazel.lock b/MODULE.bazel.lock index 0f10a2f0d818..4a635e26a36c 100644 --- a/MODULE.bazel.lock +++ b/MODULE.bazel.lock @@ -18,7 +18,6 @@ "https://bcr.bazel.build/modules/aspect_bazel_lib/2.22.5/source.json": "ac2c3213df8f985785f1d0aeb7f0f73d5324e6e67d593d9b9470fb74a25d4a9b", "https://bcr.bazel.build/modules/aspect_bazel_lib/2.7.7/MODULE.bazel": "491f8681205e31bb57892d67442ce448cda4f472a8e6b3dc062865e29a64f89c", "https://bcr.bazel.build/modules/aspect_bazel_lib/2.8.1/MODULE.bazel": "812d2dd42f65dca362152101fbec418029cc8fd34cbad1a2fde905383d705838", - "https://bcr.bazel.build/modules/aspect_rules_esbuild/0.25.1/MODULE.bazel": "9b931b3e483bd8eedb6966bda6df07d801f70ccb4896231b4e5e711b5130f3aa", "https://bcr.bazel.build/modules/aspect_rules_esbuild/0.26.0/MODULE.bazel": "6c902d97038c3ab07b6c4e67c97abc61b20182fcfa84fa7dee82fc724f12e455", "https://bcr.bazel.build/modules/aspect_rules_esbuild/0.26.0/source.json": "4cc3ece7ab661bb391a9e24fe55c4b567d60a9ea9d9e91d772dad373cbcb6217", "https://bcr.bazel.build/modules/aspect_rules_jasmine/2.0.4/MODULE.bazel": "fbb819eb8b7e5d7f67fdd38f7cecb413e287594cd666ce192c72c8828527775a", @@ -27,10 +26,8 @@ "https://bcr.bazel.build/modules/aspect_rules_js/3.0.3/MODULE.bazel": "28a30e8fc33bf64a67835d64d124f6e05a7d59648dcb27b110fb3502f761e503", "https://bcr.bazel.build/modules/aspect_rules_js/3.1.2/MODULE.bazel": "e3685502155d3cc65f3bf98e714f7435de67d7f8f355d63478a80197310311fc", "https://bcr.bazel.build/modules/aspect_rules_js/3.1.2/source.json": "a32ab71831452b945f3f83a1b1feb9402007e600bce55ac76e15ef0c1e08b520", - "https://bcr.bazel.build/modules/aspect_rules_ts/3.8.8/MODULE.bazel": "b52b929a948438665809d49af610f58d1b14f63d6d21ab748f47b6050be4c1f6", "https://bcr.bazel.build/modules/aspect_rules_ts/3.8.9/MODULE.bazel": "bd5f9ebf517cfcd377eaa7ce1cb16035d167f00774b77789909590c53bc6f20c", "https://bcr.bazel.build/modules/aspect_rules_ts/3.8.9/source.json": "59e66656561571ed82ccff56c75c43d0bc79f0065ca8d17be2752d4f648d40c9", - "https://bcr.bazel.build/modules/aspect_tools_telemetry/0.2.6/MODULE.bazel": "cafb8781ad591bc57cc765dca5fefab08cf9f65af363d162b79d49205c7f8af7", "https://bcr.bazel.build/modules/aspect_tools_telemetry/0.2.8/MODULE.bazel": "aa975a83e72bcaac62ee61ab12b788ea324a1d05c4aab28aadb202f647881679", "https://bcr.bazel.build/modules/aspect_tools_telemetry/0.3.3/MODULE.bazel": "37c764292861c2f70314efa9846bb6dbb44fc0308903b3285da6528305450183", "https://bcr.bazel.build/modules/aspect_tools_telemetry/0.3.3/source.json": "605086bbc197743a0d360f7ddc550a1d4dfa0441bc807236e17170f636153348", From bb9ca1523844e75adb411c032c5a1a5fa7bbd054 Mon Sep 17 00:00:00 2001 From: Angular Robot Date: Tue, 19 May 2026 23:18:56 +0000 Subject: [PATCH 24/34] build: lock file maintenance See associated pull request for more information. --- pnpm-lock.yaml | 272 +++++++++++++++++++++++++------------------------ 1 file changed, 139 insertions(+), 133 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 83c0697f8af5..c8c4ff4f86ee 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1620,15 +1620,15 @@ packages: resolution: {integrity: sha512-LMGQLS9EuADloEFkcTBR3BwV/CGHV7zyDxVRtVDTwdI2Ca4it0CCVTT9wCkxSgokjE5Ho41hEPgb8OEUwoXr6Q==} engines: {node: '>=20.19.0'} - '@csstools/css-calc@3.2.0': - resolution: {integrity: sha512-bR9e6o2BDB12jzN/gIbjHa5wLJ4UjD1CB9pM7ehlc0ddk6EBz+yYS1EV2MF55/HUxrHcB/hehAyt5vhsA3hx7w==} + '@csstools/css-calc@3.2.1': + resolution: {integrity: sha512-DtdHlgXh5ZkA43cwBcAm+huzgJiwx3ZTWVjBs94kwz2xKqSimDA3lBgCjphYgwgVUMWatSM0pDd8TILB1yrVVg==} engines: {node: '>=20.19.0'} peerDependencies: '@csstools/css-parser-algorithms': ^4.0.0 '@csstools/css-tokenizer': ^4.0.0 - '@csstools/css-color-parser@4.1.0': - resolution: {integrity: sha512-U0KhLYmy2GVj6q4T3WaAe6NPuFYCPQoE3b0dRGxejWDgcPp8TP7S5rVdM5ZrFaqu4N67X8YaPBw14dQSYx3IyQ==} + '@csstools/css-color-parser@4.1.1': + resolution: {integrity: sha512-eZ5XOtyhK+mggRafYUWzA0tvaYOFgdY8AkgQiCJF9qNAePnUo/zmsqqYubBBb3sQ8uNUaSKTY9s9klfRaAXL0g==} engines: {node: '>=20.19.0'} peerDependencies: '@csstools/css-parser-algorithms': ^4.0.0 @@ -1640,8 +1640,8 @@ packages: peerDependencies: '@csstools/css-tokenizer': ^4.0.0 - '@csstools/css-syntax-patches-for-csstree@1.1.3': - resolution: {integrity: sha512-SH60bMfrRCJF3morcdk57WklujF4Jr/EsQUzqkarfHXEFcAR1gg7fS/chAE922Sehgzc1/+Tz5H3Ypa1HiEKrg==} + '@csstools/css-syntax-patches-for-csstree@1.1.4': + resolution: {integrity: sha512-wgsqt92b7C7tQhIdPNxj0n9zuUbQlvAuI1exyzeNrOKOi62SD7ren8zqszmpVREjAOqg8cD2FqYhQfAuKjk4sw==} peerDependencies: css-tree: ^3.2.1 peerDependenciesMeta: @@ -2981,8 +2981,8 @@ packages: resolution: {integrity: sha512-KMQIfq5sOPpkQYajXHwnhjCC0slzCNScLHs9JafXc4RAJI+9f+jNDlBNaIMTvazOPLgb4BnlhGJOTbnN0wIjPw==} engines: {node: '>= 20'} - '@octokit/request@10.0.8': - resolution: {integrity: sha512-SJZNwY9pur9Agf7l87ywFi14W+Hd9Jg6Ifivsd33+/bGUQIjNujdFiXII2/qSlN2ybqUHfp5xpekMEjIBTjlSw==} + '@octokit/request@10.0.9': + resolution: {integrity: sha512-o8Bi3f608eyM+7BmBiUWxFsdjLb3/ym1cQek5LZOv9KkZcxRrHCPhhRzm6xjO6HVZ85ItD6+sTsjxo821SVa/A==} engines: {node: '>= 20'} '@octokit/rest@22.0.1': @@ -3017,8 +3017,8 @@ packages: peerDependencies: '@opentelemetry/api': '>=1.0.0 <1.10.0' - '@opentelemetry/semantic-conventions@1.40.0': - resolution: {integrity: sha512-cifvXDhcqMwwTlTK04GBNeIe7yyo28Mfby85QXFe1Yk8nmi36Ab/5UQwptOx84SsoGNRg+EVSjwzfSZMy6pmlw==} + '@opentelemetry/semantic-conventions@1.41.1': + resolution: {integrity: sha512-/UhIkaZgPutTFmQ7RnIJGgDXZmtEJ7Dvi86xNTFWcnRxVRNk/aotsqDJYeEvDP+FSMB2SdW+pQzNMcWP0rwuNA==} engines: {node: '>=14'} '@oxc-project/types@0.129.0': @@ -3188,14 +3188,14 @@ packages: '@protobufjs/eventemitter@1.1.0': resolution: {integrity: sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==} - '@protobufjs/fetch@1.1.0': - resolution: {integrity: sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==} + '@protobufjs/fetch@1.1.1': + resolution: {integrity: sha512-GpptLrs57adMSuHi3VNj0mAF8dwh36LMaYF6XyJ6JMWlVsc+t42tm1HSEDmOs3A8fC9yyeisgLhsTVQokOZ0zw==} '@protobufjs/float@1.0.2': resolution: {integrity: sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==} - '@protobufjs/inquire@1.1.1': - resolution: {integrity: sha512-mnzgDV26ueAvk7rsbt9L7bE0SuAoqyuys/sMMrmVcN5x9VsxpcG3rqAUSgDyLp0UZlmNfIbQ4fHfCtreVBk8Ew==} + '@protobufjs/inquire@1.1.2': + resolution: {integrity: sha512-pa0vFRuws4wkvaXKK1uXZMAwAX4/t8ANaJo45iw/oQHNQ9q5xUzwgFmVJGXiga2BeN+zpX7Vf9vmsiIa2J+MUw==} '@protobufjs/path@1.1.2': resolution: {integrity: sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==} @@ -3838,8 +3838,8 @@ packages: resolution: {integrity: sha512-ZDCjgccSdYPw5Bxh+my4Z0lJU96ZDN7jbBzvmEn0FZx3RtU1C7VWl6NbDx94bwY3V5YsgwRzJPOgeY2Q/nLG8A==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/types@8.59.3': - resolution: {integrity: sha512-ePFoH0g4ludssdRFqqDxQePCxU4WQyRa9+XVwjm7yLn0FKhMeoetC+qBEEI1Eyb1pGSDveTIT09Bvw2WhlGayg==} + '@typescript-eslint/types@8.59.4': + resolution: {integrity: sha512-F1o7WJcCq+bc8dwcO/YsSEOudAH8RDtaOhM6wcAQhcUsFhnWQl81JKy48q1hoxAU0qrzM89+31GYh1515Zde3Q==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@typescript-eslint/typescript-estree@8.59.1': @@ -4319,8 +4319,8 @@ packages: resolution: {integrity: sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==} engines: {node: 18 || 20 || >=22} - bare-events@2.8.2: - resolution: {integrity: sha512-riJjyv1/mHLIPX4RwiK+oW9/4c3TEUeORHKefKAKnZ5kyslbN+HXowtbaVEqt4IMUB7OXlfixcs6gsFeo/jhiQ==} + bare-events@2.8.3: + resolution: {integrity: sha512-HdUm8EMQBLaJvGUdidNNbqpA1kYkwNcb+MYxkxCLAPJGQzlv9J0C24h8V65Z4c5GLd/JEALDvpFCQgpLJqc0zw==} peerDependencies: bare-abort-controller: '*' peerDependenciesMeta: @@ -4367,8 +4367,8 @@ packages: resolution: {integrity: sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==} engines: {node: ^4.5.0 || >= 5.9} - baseline-browser-mapping@2.10.29: - resolution: {integrity: sha512-Asa2krT+XTPZINCS+2QcyS8WTkObE77RwkydwF7h6DmnKqbvlalz93m/dnphUyCa6SWSP51VgtEUf2FN+gelFQ==} + baseline-browser-mapping@2.10.31: + resolution: {integrity: sha512-MujYO3eP72uvmSE0i4wltsodRfIpZATP3jvzRNRGGxgzId7aVocVJJV3nf01qnzzKFGxQVC9bpWxl5cjxTr/7Q==} engines: {node: '>=6.0.0'} hasBin: true @@ -4518,8 +4518,8 @@ packages: resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} engines: {node: '>=6'} - caniuse-lite@1.0.30001792: - resolution: {integrity: sha512-hVLMUZFgR4JJ6ACt1uEESvQN1/dBVqPAKY0hgrV70eN3391K6juAfTjKZLKvOMsx8PxA7gsY1/tLMMTcfFLLpw==} + caniuse-lite@1.0.30001793: + resolution: {integrity: sha512-iwSsYWaCOoh26cV8NwNRViHlrfUvYsHDfRVcbtmw0Kg6PJIZZXwMkj1442FYLBGkeUf1juAsU3DTfxW579mrPA==} caseless@0.12.0: resolution: {integrity: sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==} @@ -4685,6 +4685,10 @@ packages: resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==} engines: {node: '>= 0.6'} + content-type@2.0.0: + resolution: {integrity: sha512-j/O/d7GcZCyNl7/hwZAb606rzqkyvaDctLmckbxLzHvFBzTJHuGEdodATcP3yIRoDrLHkIATJuvzbFlp/ki2cQ==} + engines: {node: '>=18'} + conventional-commits-filter@5.0.0: resolution: {integrity: sha512-tQMagCOC59EVgNZcC5zl7XqO30Wki9i9J3acbUvkaosCT6JX3EeFwJD7Qqp4MCikRnzS18WXV3BLIQ66ytu6+Q==} engines: {node: '>=18'} @@ -5001,8 +5005,8 @@ packages: engines: {node: '>=0.12.18'} hasBin: true - electron-to-chromium@1.5.353: - resolution: {integrity: sha512-kOrWphBi8TOZyiJZqsgqIle0lw+tzmnQK83pV9dZUd01Nm2POECSyFQMAuarzZdYqQW7FH9RaYOuaRo3h+bQ3w==} + electron-to-chromium@1.5.358: + resolution: {integrity: sha512-EO7tKm3QxRqTs1lSuPXzl6yRAwznehp0AH9OoMOIC+4mQzTFday8FJCO5KU6J/TFSQXEOahNq4vTKpz1jmCVOA==} emoji-regex@10.6.0: resolution: {integrity: sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==} @@ -5042,8 +5046,8 @@ packages: resolution: {integrity: sha512-DgOngfDKM2EviOH3Mr9m7ks1q8roetLy/IMmYthAYzbpInMbYc/GS+fWFA3rl1gvwKVsQrVV61fo5emD1y3OJQ==} engines: {node: '>=10.2.0'} - enhanced-resolve@5.21.3: - resolution: {integrity: sha512-QyL119InA+XXEkNLNTPCXPugSvOfhwv0JOlGNzvxs0hZaiHLNvXSpudUWsOlsXGWJh8G6ckCScEkVHfX3kw/2Q==} + enhanced-resolve@5.21.4: + resolution: {integrity: sha512-wE4fDO8OjJhrPFH69HUQStq5oKvGRTNXEyW+k5C/pUQLASSsTu7obd2V3GvCDgPcY9AWjhJ4jz9Kh7iRvrxhJg==} engines: {node: '>=10.13.0'} ent@2.2.2: @@ -5295,8 +5299,8 @@ packages: express-rate-limit@5.5.1: resolution: {integrity: sha512-MTjE2eIbHv5DyfuFz4zLYWxpqVhEhkTiwFGuB74Q9CSou2WHO52nlE5y3Zlg6SIsiYUIPj6ifFxnkPz6O3sIUg==} - express-rate-limit@8.5.1: - resolution: {integrity: sha512-5O6KYmyJEpuPJV5hNTXKbAHWRqrzyu+OI3vUnSd2kXFubIVpG7ezpgxQy76Zo5GQZtrQBg86hF+CM/NX+cioiQ==} + express-rate-limit@8.5.2: + resolution: {integrity: sha512-5Kb34ipNX694DH48vN9irak1Qx30nb0PLYHXfJgw4YEjiC3ZEmZJhwOp+VfiCYwFzvFTdB9QkArYS5kXa2cx2A==} engines: {node: '>= 16'} peerDependencies: express: '>= 4.11' @@ -5684,8 +5688,8 @@ packages: resolution: {integrity: sha512-ej4AhfhfL2Q2zpMmLo7U1Uv9+PyhIZpgQLGT1F9miIGmiCJIoCgSmczFdrc97mWT4kVY72KA+WnnhJ5pghSvSg==} engines: {node: '>= 0.4'} - hono@4.12.18: - resolution: {integrity: sha512-RWzP96k/yv0PQfyXnWjs6zot20TqfpfsNXhOnev8d1InAxubW93L11/oNUc3tQqn2G0bSdAOBpX+2uDFHV7kdQ==} + hono@4.12.19: + resolution: {integrity: sha512-xa3eYXYXx68XTT4hZ7dRzsXBhaq85ToSrlUJNoR0gwz/1Ap/CNwX47wfvV7pc/xWhjKVVkLT7zBJy8chhNguqQ==} engines: {node: '>=16.9.0'} hosted-git-info@9.0.3: @@ -6418,8 +6422,8 @@ packages: lru-cache@10.4.3: resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} - lru-cache@11.3.6: - resolution: {integrity: sha512-Gf/KoL3C/MlI7Bt0PGI9I+TeTC/I6r/csU58N4BSNc4lppLBeKsOdFYkK+dX0ABDUMJNfCHTyPpzwwO21Awd3A==} + lru-cache@11.4.0: + resolution: {integrity: sha512-W+R+kFL4HgVxONq2bhXPi3bGpzGe/yEhVOp233qw9wCRtgncJ15P3bC+e4zZMu4Cq7d+WAJjXGW0uUkifhcatA==} engines: {node: 20 || >=22} lru-cache@5.1.1: @@ -6432,8 +6436,8 @@ packages: magic-string@0.30.21: resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==} - magicast@0.5.2: - resolution: {integrity: sha512-E3ZJh4J3S9KfwdjZhe2afj6R9lGIN5Pher1pF39UGrXRqq/VDaGVIGN13BjHd2u8B61hArAGOnso7nBOouW3TQ==} + magicast@0.5.3: + resolution: {integrity: sha512-pVKE4UdSQ7DvHzivsCIFx2BJn1mHG6KsyrFcaxFx6tONdneEuThrDx0Cj3AMg58KyN4pzYT+LHOotxDQDjNvkw==} make-dir@2.1.0: resolution: {integrity: sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==} @@ -7177,8 +7181,8 @@ packages: resolution: {integrity: sha512-E1sbAYg3aEbXrq0n1ojJkRHQJGE1kaE/O6GLA94y8rnJBfgvOPTOd1b9hOceQK1FFZI9qMh1vBERCyO2ifubcw==} engines: {node: '>=18'} - protobufjs@7.5.7: - resolution: {integrity: sha512-NGnrxS/nLKUo5nkbVQxlC71sB4hdfImdYIbFeSCidxtwATx0AHRPcANSLd0q5Bb2BkoSWo2iisQhGg5/r+ihbA==} + protobufjs@7.6.0: + resolution: {integrity: sha512-LtESOsMPTZgyYtwxhvdgdjGL0HmXEaRA/hVD6sol4zA60hVXXXP/SGmxnqDbgGE8gy7pYex7cym+5vYPcmaXBQ==} engines: {node: '>=12.0.0'} proxy-addr@2.0.7: @@ -7235,8 +7239,8 @@ packages: resolution: {integrity: sha512-V/yCWTTF7VJ9hIh18Ugr2zhJMP01MY7c5kh4J870L7imm6/DIzBsNLTXzMwUA3yZ5b/KBqLx8Kp3uRvd7xSe3Q==} engines: {node: '>=0.6'} - qs@6.15.1: - resolution: {integrity: sha512-6YHEFRL9mfgcAvql/XhwTvf5jKcOiiupt2FiJxHkiX1z4j7WL8J/jRHYLluORvc1XxB5rV20KoeK00gVJamspg==} + qs@6.15.2: + resolution: {integrity: sha512-Rzq0KEyX/w/tEybncDgdkZrJgVUsUMk3xjh3t5bv3S1HTAtg+uOYt72+ZfwiQwKdysThkTBdL/rTi6HDmX9Ddw==} engines: {node: '>=0.6'} queue-microtask@1.2.3: @@ -7354,8 +7358,8 @@ packages: engines: {node: '>= 0.4'} hasBin: true - resolve@2.0.0-next.6: - resolution: {integrity: sha512-3JmVl5hMGtJ3kMmB3zi3DL25KfkCEyy3Tw7Gmw7z5w8M9WlwoPFnIvwChzu1+cF3iaK3sp18hhPz8ANeimdJfA==} + resolve@2.0.0-next.7: + resolution: {integrity: sha512-tqt+NBWwyaMgw3zDsnygx4CByWjQEJHOPMdslYhppaQSJUtL/D4JO9CcBBlhPoI8lz9oJIDXkwXfhF4aWqP8xQ==} engines: {node: '>= 0.4'} hasBin: true @@ -7998,9 +8002,9 @@ packages: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} engines: {node: '>=8.0'} - toad-cache@3.7.0: - resolution: {integrity: sha512-/m8M+2BJUpoJdgAHoG+baCwBT+tf2VraSfkBgl0Y00qIWt41DJ8R5B8nsEw0I58YwF5IZH6z24/2TobDKnqSWw==} - engines: {node: '>=12'} + toad-cache@3.7.1: + resolution: {integrity: sha512-5DXWzE4Vz7xNHsv+xQ+MGfJYyC78Aok3tEr0MNwHoRf7vZnga1mQXZ4/Nsodld4VR6Wd+VhfmqnNrsRJyYPfrQ==} + engines: {node: '>=20'} toidentifier@1.0.1: resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} @@ -8076,9 +8080,9 @@ packages: resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} engines: {node: '>= 0.6'} - type-is@2.0.1: - resolution: {integrity: sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw==} - engines: {node: '>= 0.6'} + type-is@2.1.0: + resolution: {integrity: sha512-faYHw0anBbc/kWF3zFTEnxSFOAGUX9GFbOBthvDdLsIlEoWOFOtS0zgCiQYwIskL9iGXZL3kAXD8OoZ4GmMATA==} + engines: {node: '>= 18'} typed-array-buffer@1.0.3: resolution: {integrity: sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==} @@ -8522,8 +8526,8 @@ packages: utf-8-validate: optional: true - ws@8.20.0: - resolution: {integrity: sha512-sAt8BhgNbzCtgGbt2OxmpuryO63ZoDk/sqaB/znQm94T4fCEsy/yV+7CdC1kJhOU9lboAEU7R3kquuycDoibVA==} + ws@8.20.1: + resolution: {integrity: sha512-It4dO0K5v//JtTXuPkfEOaI3uUN87iYPnqo/ZzqCoG3g8uhA66QUMs/SrM0YK7/NAu+r4LMh/9dq2A7k+rHs+w==} engines: {node: '>=10.0.0'} peerDependencies: bufferutil: ^4.0.1 @@ -8910,8 +8914,8 @@ snapshots: '@asamuzakjp/css-color@5.1.11': dependencies: '@asamuzakjp/generational-cache': 1.0.1 - '@csstools/css-calc': 3.2.0(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) - '@csstools/css-color-parser': 4.1.0(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) + '@csstools/css-calc': 3.2.1(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) + '@csstools/css-color-parser': 4.1.1(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) '@csstools/css-tokenizer': 4.0.0 @@ -9631,15 +9635,15 @@ snapshots: '@csstools/color-helpers@6.0.2': {} - '@csstools/css-calc@3.2.0(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0)': + '@csstools/css-calc@3.2.1(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0)': dependencies: '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) '@csstools/css-tokenizer': 4.0.0 - '@csstools/css-color-parser@4.1.0(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0)': + '@csstools/css-color-parser@4.1.1(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0)': dependencies: '@csstools/color-helpers': 6.0.2 - '@csstools/css-calc': 3.2.0(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) + '@csstools/css-calc': 3.2.1(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) '@csstools/css-tokenizer': 4.0.0 @@ -9647,7 +9651,7 @@ snapshots: dependencies: '@csstools/css-tokenizer': 4.0.0 - '@csstools/css-syntax-patches-for-csstree@1.1.3(css-tree@3.2.1)': + '@csstools/css-syntax-patches-for-csstree@1.1.4(css-tree@3.2.1)': optionalDependencies: css-tree: 3.2.1 @@ -10262,7 +10266,7 @@ snapshots: '@opentelemetry/api': 1.9.1 '@opentelemetry/context-async-hooks': 2.7.1(@opentelemetry/api@1.9.1) '@opentelemetry/core': 2.7.1(@opentelemetry/api@1.9.1) - '@opentelemetry/semantic-conventions': 1.40.0 + '@opentelemetry/semantic-conventions': 1.41.1 '@types/big.js': 6.2.2 '@types/stack-trace': 0.0.33 big.js: 7.0.1 @@ -10272,12 +10276,12 @@ snapshots: extend: 3.0.2 google-auth-library: 10.6.2(supports-color@10.2.2) google-gax: 5.0.6(supports-color@10.2.2) - grpc-gcp: 1.0.1(protobufjs@7.5.7) + grpc-gcp: 1.0.1(protobufjs@7.6.0) is: 3.3.2 lodash.snakecase: 4.1.1 merge-stream: 2.0.0 p-queue: 6.6.2 - protobufjs: 7.5.7 + protobufjs: 7.6.0 retry-request: 8.0.2(supports-color@10.2.2) split-array-stream: 2.0.0 stack-trace: 0.0.10 @@ -10291,8 +10295,8 @@ snapshots: dependencies: google-auth-library: 10.6.2(supports-color@10.2.2) p-retry: 4.6.2 - protobufjs: 7.5.7 - ws: 8.20.0(bufferutil@4.1.0)(utf-8-validate@6.0.6) + protobufjs: 7.6.0 + ws: 8.20.1(bufferutil@4.1.0)(utf-8-validate@6.0.6) optionalDependencies: '@modelcontextprotocol/sdk': 1.29.0(zod@4.4.2) transitivePeerDependencies: @@ -10314,22 +10318,22 @@ snapshots: dependencies: lodash.camelcase: 4.3.0 long: 5.3.2 - protobufjs: 7.5.7 + protobufjs: 7.6.0 yargs: 17.7.2 '@grpc/proto-loader@0.8.1': dependencies: lodash.camelcase: 4.3.0 long: 5.3.2 - protobufjs: 7.5.7 + protobufjs: 7.6.0 yargs: 17.7.2 '@harperfast/extended-iterable@1.0.3': optional: true - '@hono/node-server@1.19.14(hono@4.12.18)': + '@hono/node-server@1.19.14(hono@4.12.19)': dependencies: - hono: 4.12.18 + hono: 4.12.19 '@humanfs/core@0.19.2': dependencies: @@ -10691,7 +10695,7 @@ snapshots: '@modelcontextprotocol/sdk@1.29.0(zod@4.4.2)': dependencies: - '@hono/node-server': 1.19.14(hono@4.12.18) + '@hono/node-server': 1.19.14(hono@4.12.19) ajv: 8.20.0 ajv-formats: 3.0.1(ajv@8.20.0) content-type: 1.0.5 @@ -10700,8 +10704,8 @@ snapshots: eventsource: 3.0.7 eventsource-parser: 3.0.8 express: 5.2.1 - express-rate-limit: 8.5.1(express@5.2.1) - hono: 4.12.18 + express-rate-limit: 8.5.2(express@5.2.1) + hono: 4.12.19 jose: 6.2.3 json-schema-typed: 8.0.2 pkce-challenge: 5.0.1 @@ -10836,7 +10840,7 @@ snapshots: agent-base: 7.1.4 http-proxy-agent: 7.0.2(supports-color@10.2.2) https-proxy-agent: 7.0.6(supports-color@10.2.2) - lru-cache: 11.3.6 + lru-cache: 11.4.0 socks-proxy-agent: 8.0.5 transitivePeerDependencies: - supports-color @@ -10850,7 +10854,7 @@ snapshots: '@gar/promise-retry': 1.0.3 '@npmcli/promise-spawn': 9.0.1 ini: 6.0.0 - lru-cache: 11.3.6 + lru-cache: 11.4.0 npm-pick-manifest: 11.0.3 proc-log: 6.1.0 semver: 7.7.4 @@ -10891,10 +10895,10 @@ snapshots: dependencies: '@octokit/auth-oauth-app': 9.0.3 '@octokit/auth-oauth-user': 6.0.2 - '@octokit/request': 10.0.8 + '@octokit/request': 10.0.9 '@octokit/request-error': 7.1.0 '@octokit/types': 16.0.0 - toad-cache: 3.7.0 + toad-cache: 3.7.1 universal-github-app-jwt: 2.2.2 universal-user-agent: 7.0.3 @@ -10902,14 +10906,14 @@ snapshots: dependencies: '@octokit/auth-oauth-device': 8.0.3 '@octokit/auth-oauth-user': 6.0.2 - '@octokit/request': 10.0.8 + '@octokit/request': 10.0.9 '@octokit/types': 16.0.0 universal-user-agent: 7.0.3 '@octokit/auth-oauth-device@8.0.3': dependencies: '@octokit/oauth-methods': 6.0.2 - '@octokit/request': 10.0.8 + '@octokit/request': 10.0.9 '@octokit/types': 16.0.0 universal-user-agent: 7.0.3 @@ -10917,7 +10921,7 @@ snapshots: dependencies: '@octokit/auth-oauth-device': 8.0.3 '@octokit/oauth-methods': 6.0.2 - '@octokit/request': 10.0.8 + '@octokit/request': 10.0.9 '@octokit/types': 16.0.0 universal-user-agent: 7.0.3 @@ -10927,7 +10931,7 @@ snapshots: dependencies: '@octokit/auth-token': 6.0.0 '@octokit/graphql': 9.0.3 - '@octokit/request': 10.0.8 + '@octokit/request': 10.0.9 '@octokit/request-error': 7.1.0 '@octokit/types': 16.0.0 before-after-hook: 4.0.0 @@ -10945,7 +10949,7 @@ snapshots: '@octokit/graphql@9.0.3': dependencies: - '@octokit/request': 10.0.8 + '@octokit/request': 10.0.9 '@octokit/types': 16.0.0 universal-user-agent: 7.0.3 @@ -10954,7 +10958,7 @@ snapshots: '@octokit/oauth-methods@6.0.2': dependencies: '@octokit/oauth-authorization-url': 8.0.0 - '@octokit/request': 10.0.8 + '@octokit/request': 10.0.9 '@octokit/request-error': 7.1.0 '@octokit/types': 16.0.0 @@ -10978,11 +10982,12 @@ snapshots: dependencies: '@octokit/types': 16.0.0 - '@octokit/request@10.0.8': + '@octokit/request@10.0.9': dependencies: '@octokit/endpoint': 11.0.3 '@octokit/request-error': 7.1.0 '@octokit/types': 16.0.0 + content-type: 2.0.0 fast-content-type-parse: 3.0.0 json-with-bigint: 3.5.8 universal-user-agent: 7.0.3 @@ -11016,9 +11021,9 @@ snapshots: '@opentelemetry/core@2.7.1(@opentelemetry/api@1.9.1)': dependencies: '@opentelemetry/api': 1.9.1 - '@opentelemetry/semantic-conventions': 1.40.0 + '@opentelemetry/semantic-conventions': 1.41.1 - '@opentelemetry/semantic-conventions@1.40.0': {} + '@opentelemetry/semantic-conventions@1.41.1': {} '@oxc-project/types@0.129.0': {} @@ -11210,14 +11215,13 @@ snapshots: '@protobufjs/eventemitter@1.1.0': {} - '@protobufjs/fetch@1.1.0': + '@protobufjs/fetch@1.1.1': dependencies: '@protobufjs/aspromise': 1.1.2 - '@protobufjs/inquire': 1.1.1 '@protobufjs/float@1.0.2': {} - '@protobufjs/inquire@1.1.1': {} + '@protobufjs/inquire@1.1.2': {} '@protobufjs/path@1.1.2': {} @@ -11461,7 +11465,7 @@ snapshots: '@stylistic/eslint-plugin@5.10.0(eslint@10.3.0(jiti@2.7.0))': dependencies: '@eslint-community/eslint-utils': 4.9.1(eslint@10.3.0(jiti@2.7.0)) - '@typescript-eslint/types': 8.59.3 + '@typescript-eslint/types': 8.59.4 eslint: 10.3.0(jiti@2.7.0) eslint-visitor-keys: 4.2.1 espree: 10.4.0 @@ -11849,7 +11853,7 @@ snapshots: '@typescript-eslint/types@8.59.1': {} - '@typescript-eslint/types@8.59.3': {} + '@typescript-eslint/types@8.59.4': {} '@typescript-eslint/typescript-estree@8.59.1(typescript@6.0.3)': dependencies: @@ -12072,7 +12076,7 @@ snapshots: istanbul-lib-coverage: 3.2.2 istanbul-lib-report: 3.0.1 istanbul-reports: 3.2.0 - magicast: 0.5.2 + magicast: 0.5.3 obug: 2.1.1 std-env: 4.1.0 tinyrainbow: 3.1.0 @@ -12433,7 +12437,7 @@ snapshots: autoprefixer@10.5.0(postcss@8.5.13): dependencies: browserslist: 4.28.2 - caniuse-lite: 1.0.30001792 + caniuse-lite: 1.0.30001793 fraction.js: 5.3.4 picocolors: 1.1.1 postcss: 8.5.13 @@ -12492,13 +12496,13 @@ snapshots: balanced-match@4.0.4: {} - bare-events@2.8.2: {} + bare-events@2.8.3: {} bare-fs@4.7.1: dependencies: - bare-events: 2.8.2 + bare-events: 2.8.3 bare-path: 3.0.0 - bare-stream: 2.13.1(bare-events@2.8.2) + bare-stream: 2.13.1(bare-events@2.8.3) bare-url: 2.4.3 fast-fifo: 1.3.2 transitivePeerDependencies: @@ -12511,12 +12515,12 @@ snapshots: dependencies: bare-os: 3.9.1 - bare-stream@2.13.1(bare-events@2.8.2): + bare-stream@2.13.1(bare-events@2.8.3): dependencies: streamx: 2.25.0 teex: 1.0.1 optionalDependencies: - bare-events: 2.8.2 + bare-events: 2.8.3 transitivePeerDependencies: - react-native-b4a @@ -12528,7 +12532,7 @@ snapshots: base64id@2.0.0: {} - baseline-browser-mapping@2.10.29: {} + baseline-browser-mapping@2.10.31: {} basic-ftp@5.3.1: {} @@ -12576,7 +12580,7 @@ snapshots: http-errors: 2.0.1 iconv-lite: 0.4.24 on-finished: 2.4.1 - qs: 6.15.1 + qs: 6.15.2 raw-body: 2.5.3 type-is: 1.6.18 unpipe: 1.0.0 @@ -12591,9 +12595,9 @@ snapshots: http-errors: 2.0.1 iconv-lite: 0.7.2 on-finished: 2.4.1 - qs: 6.15.1 + qs: 6.15.2 raw-body: 3.0.2 - type-is: 2.0.1 + type-is: 2.1.0 transitivePeerDependencies: - supports-color @@ -12685,9 +12689,9 @@ snapshots: browserslist@4.28.2: dependencies: - baseline-browser-mapping: 2.10.29 - caniuse-lite: 1.0.30001792 - electron-to-chromium: 1.5.353 + baseline-browser-mapping: 2.10.31 + caniuse-lite: 1.0.30001793 + electron-to-chromium: 1.5.358 node-releases: 2.0.44 update-browserslist-db: 1.2.3(browserslist@4.28.2) @@ -12721,7 +12725,7 @@ snapshots: '@npmcli/fs': 5.0.0 fs-minipass: 3.0.3 glob: 13.0.6 - lru-cache: 11.3.6 + lru-cache: 11.4.0 minipass: 7.1.3 minipass-collect: 2.0.1 minipass-flush: 1.0.7 @@ -12760,7 +12764,7 @@ snapshots: callsites@3.1.0: {} - caniuse-lite@1.0.30001792: {} + caniuse-lite@1.0.30001793: {} caseless@0.12.0: {} @@ -12936,6 +12940,8 @@ snapshots: content-type@1.0.5: {} + content-type@2.0.0: {} + conventional-commits-filter@5.0.0: {} conventional-commits-parser@6.4.0: @@ -13231,7 +13237,7 @@ snapshots: ejs@5.0.2: {} - electron-to-chromium@1.5.353: {} + electron-to-chromium@1.5.358: {} emoji-regex@10.6.0: {} @@ -13284,7 +13290,7 @@ snapshots: - supports-color - utf-8-validate - enhanced-resolve@5.21.3: + enhanced-resolve@5.21.4: dependencies: graceful-fs: 4.2.11 tapable: 2.3.3 @@ -13483,7 +13489,7 @@ snapshots: dependencies: debug: 3.2.7 is-core-module: 2.16.2 - resolve: 2.0.0-next.6 + resolve: 2.0.0-next.7 transitivePeerDependencies: - supports-color @@ -13627,7 +13633,7 @@ snapshots: events-universal@1.0.1: dependencies: - bare-events: 2.8.2 + bare-events: 2.8.3 transitivePeerDependencies: - bare-abort-controller @@ -13645,7 +13651,7 @@ snapshots: express-rate-limit@5.5.1: {} - express-rate-limit@8.5.1(express@5.2.1): + express-rate-limit@8.5.2(express@5.2.1): dependencies: express: 5.2.1 ip-address: 10.2.0 @@ -13709,7 +13715,7 @@ snapshots: parseurl: 1.3.3 path-to-regexp: 0.1.13 proxy-addr: 2.0.7 - qs: 6.15.1 + qs: 6.15.2 range-parser: 1.2.1 safe-buffer: 5.2.1 send: 0.19.2 @@ -13744,13 +13750,13 @@ snapshots: once: 1.4.0 parseurl: 1.3.3 proxy-addr: 2.0.7 - qs: 6.15.1 + qs: 6.15.2 range-parser: 1.2.1 router: 2.2.0 send: 1.2.1 serve-static: 2.2.1 statuses: 2.0.2 - type-is: 2.0.1 + type-is: 2.1.0 vary: 1.1.2 transitivePeerDependencies: - supports-color @@ -14143,7 +14149,7 @@ snapshots: node-fetch: 3.3.2 object-hash: 3.0.0 proto3-json-serializer: 3.0.4 - protobufjs: 7.5.7 + protobufjs: 7.6.0 retry-request: 8.0.2(supports-color@10.2.2) rimraf: 5.0.10 transitivePeerDependencies: @@ -14177,10 +14183,10 @@ snapshots: graphql@16.14.0: {} - grpc-gcp@1.0.1(protobufjs@7.5.7): + grpc-gcp@1.0.1(protobufjs@7.6.0): dependencies: '@grpc/grpc-js': 1.14.3 - protobufjs: 7.5.7 + protobufjs: 7.6.0 gunzip-maybe@1.4.2: dependencies: @@ -14224,11 +14230,11 @@ snapshots: dependencies: function-bind: 1.1.2 - hono@4.12.18: {} + hono@4.12.19: {} hosted-git-info@9.0.3: dependencies: - lru-cache: 11.3.6 + lru-cache: 11.4.0 hpack.js@2.1.6: dependencies: @@ -14714,14 +14720,14 @@ snapshots: '@asamuzakjp/css-color': 5.1.11 '@asamuzakjp/dom-selector': 7.1.1 '@bramus/specificity': 2.4.2 - '@csstools/css-syntax-patches-for-csstree': 1.1.3(css-tree@3.2.1) + '@csstools/css-syntax-patches-for-csstree': 1.1.4(css-tree@3.2.1) '@exodus/bytes': 1.15.0 css-tree: 3.2.1 data-urls: 7.0.0 decimal.js: 10.6.0 html-encoding-sniffer: 6.0.0 is-potential-custom-element-name: 1.0.1 - lru-cache: 11.3.6 + lru-cache: 11.4.0 parse5: 8.0.1 saxes: 6.0.0 symbol-tree: 3.2.4 @@ -15024,7 +15030,7 @@ snapshots: lru-cache@10.4.3: {} - lru-cache@11.3.6: {} + lru-cache@11.4.0: {} lru-cache@5.1.1: dependencies: @@ -15036,7 +15042,7 @@ snapshots: dependencies: '@jridgewell/sourcemap-codec': 1.5.5 - magicast@0.5.2: + magicast@0.5.3: dependencies: '@babel/parser': 7.29.3 '@babel/types': 7.29.0 @@ -15653,7 +15659,7 @@ snapshots: path-scurry@2.0.2: dependencies: - lru-cache: 11.3.6 + lru-cache: 11.4.0 minipass: 7.1.3 path-to-regexp@0.1.13: {} @@ -15817,17 +15823,17 @@ snapshots: proto3-json-serializer@3.0.4: dependencies: - protobufjs: 7.5.7 + protobufjs: 7.6.0 - protobufjs@7.5.7: + protobufjs@7.6.0: dependencies: '@protobufjs/aspromise': 1.1.2 '@protobufjs/base64': 1.1.2 '@protobufjs/codegen': 2.0.5 '@protobufjs/eventemitter': 1.1.0 - '@protobufjs/fetch': 1.1.0 + '@protobufjs/fetch': 1.1.1 '@protobufjs/float': 1.0.2 - '@protobufjs/inquire': 1.1.1 + '@protobufjs/inquire': 1.1.2 '@protobufjs/path': 1.1.2 '@protobufjs/pool': 1.1.0 '@protobufjs/utf8': 1.1.1 @@ -15885,7 +15891,7 @@ snapshots: devtools-protocol: 0.0.1595872 typed-query-selector: 2.12.2 webdriver-bidi-protocol: 0.4.1 - ws: 8.20.0(bufferutil@4.1.0)(utf-8-validate@6.0.6) + ws: 8.20.1(bufferutil@4.1.0)(utf-8-validate@6.0.6) transitivePeerDependencies: - bare-abort-controller - bare-buffer @@ -15923,7 +15929,7 @@ snapshots: dependencies: side-channel: 1.1.0 - qs@6.15.1: + qs@6.15.2: dependencies: side-channel: 1.1.0 @@ -16080,7 +16086,7 @@ snapshots: path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 - resolve@2.0.0-next.6: + resolve@2.0.0-next.7: dependencies: es-errors: 1.3.0 is-core-module: 2.16.2 @@ -16896,7 +16902,7 @@ snapshots: dependencies: is-number: 7.0.0 - toad-cache@3.7.0: {} + toad-cache@3.7.1: {} toidentifier@1.0.1: {} @@ -16970,9 +16976,9 @@ snapshots: media-typer: 0.3.0 mime-types: 2.1.35 - type-is@2.0.1: + type-is@2.1.0: dependencies: - content-type: 1.0.5 + content-type: 2.0.0 media-typer: 1.1.0 mime-types: 3.0.2 @@ -17336,7 +17342,7 @@ snapshots: sockjs: 0.3.24 spdy: 4.0.2 webpack-dev-middleware: 7.4.5(tslib@2.8.1)(webpack@5.106.2(esbuild@0.28.0)(postcss@8.5.13)) - ws: 8.20.0(bufferutil@4.1.0)(utf-8-validate@6.0.6) + ws: 8.20.1(bufferutil@4.1.0)(utf-8-validate@6.0.6) optionalDependencies: webpack: 5.106.2(esbuild@0.28.0)(postcss@8.5.13) transitivePeerDependencies: @@ -17375,7 +17381,7 @@ snapshots: sockjs: 0.3.24 spdy: 4.0.2 webpack-dev-middleware: 7.4.5(tslib@2.8.1)(webpack@5.106.2(esbuild@0.28.0)) - ws: 8.20.0(bufferutil@4.1.0)(utf-8-validate@6.0.6) + ws: 8.20.1(bufferutil@4.1.0)(utf-8-validate@6.0.6) optionalDependencies: webpack: 5.106.2(esbuild@0.28.0) transitivePeerDependencies: @@ -17410,7 +17416,7 @@ snapshots: acorn-import-phases: 1.0.4(acorn@8.16.0) browserslist: 4.28.2 chrome-trace-event: 1.0.4 - enhanced-resolve: 5.21.3 + enhanced-resolve: 5.21.4 es-module-lexer: 2.1.0 eslint-scope: 5.1.1 events: 3.3.0 @@ -17450,7 +17456,7 @@ snapshots: acorn-import-phases: 1.0.4(acorn@8.16.0) browserslist: 4.28.2 chrome-trace-event: 1.0.4 - enhanced-resolve: 5.21.3 + enhanced-resolve: 5.21.4 es-module-lexer: 2.1.0 eslint-scope: 5.1.1 events: 3.3.0 @@ -17600,7 +17606,7 @@ snapshots: bufferutil: 4.1.0 utf-8-validate: 6.0.6 - ws@8.20.0(bufferutil@4.1.0)(utf-8-validate@6.0.6): + ws@8.20.1(bufferutil@4.1.0)(utf-8-validate@6.0.6): optionalDependencies: bufferutil: 4.1.0 utf-8-validate: 6.0.6 From 373c6df9aaae896cfdd6eaa3aac451d0ca73c0d1 Mon Sep 17 00:00:00 2001 From: Angular Robot Date: Wed, 20 May 2026 06:18:44 +0000 Subject: [PATCH 25/34] build: update dependency node to v22.22.3 See associated pull request for more information. --- .nvmrc | 2 +- MODULE.bazel | 16 +- MODULE.bazel.lock | 562 +++++++++++++++++++++++----------------------- 3 files changed, 290 insertions(+), 290 deletions(-) diff --git a/.nvmrc b/.nvmrc index db49bb14d78e..941d7c071de8 100644 --- a/.nvmrc +++ b/.nvmrc @@ -1 +1 @@ -22.22.2 +22.22.3 diff --git a/MODULE.bazel b/MODULE.bazel index 2348e7dad043..d2e43b14158b 100644 --- a/MODULE.bazel +++ b/MODULE.bazel @@ -40,15 +40,15 @@ git_override( node = use_extension("@rules_nodejs//nodejs:extensions.bzl", "node") node.toolchain( node_repositories = { - "22.22.2-darwin_arm64": ("node-v22.22.2-darwin-arm64.tar.gz", "node-v22.22.2-darwin-arm64", "db4b275b83736df67533529a18cc55de2549a8329ace6c7bcc68f8d22d3c9000"), - "22.22.2-darwin_amd64": ("node-v22.22.2-darwin-x64.tar.gz", "node-v22.22.2-darwin-x64", "12a6abb9c2902cf48a21120da13f87fde1ed1b71a13330712949e8db818708ba"), - "22.22.2-linux_arm64": ("node-v22.22.2-linux-arm64.tar.xz", "node-v22.22.2-linux-arm64", "e9e1930fd321a470e29bb68f30318bf58e3ecb4acb4f1533fb19c58328a091fe"), - "22.22.2-linux_ppc64le": ("node-v22.22.2-linux-ppc64le.tar.xz", "node-v22.22.2-linux-ppc64le", "14045b5a5030d35ca0030fb7e870bd11a651eb9b57323ebc0021e8d78ac6bac9"), - "22.22.2-linux_s390x": ("node-v22.22.2-linux-s390x.tar.xz", "node-v22.22.2-linux-s390x", "9e4a07c291b8949289c6ea8ee61b1d14666a4810feae776a8d1eb1f57e03a2fb"), - "22.22.2-linux_amd64": ("node-v22.22.2-linux-x64.tar.xz", "node-v22.22.2-linux-x64", "88fd1ce767091fd8d4a99fdb2356e98c819f93f3b1f8663853a2dee9b438068a"), - "22.22.2-windows_amd64": ("node-v22.22.2-win-x64.zip", "node-v22.22.2-win-x64", "7c93e9d92bf68c07182b471aa187e35ee6cd08ef0f24ab060dfff605fcc1c57c"), + "22.22.3-darwin_arm64": ("node-v22.22.3-darwin-arm64.tar.gz", "node-v22.22.3-darwin-arm64", "0da7ff74ef8611328c8212f17943368713a2ad953fb7d89a8c8a0eae87c23207"), + "22.22.3-darwin_amd64": ("node-v22.22.3-darwin-x64.tar.gz", "node-v22.22.3-darwin-x64", "45830ba752fa0d892c6dcd640946669801293cac820a33591ded40ac075198ec"), + "22.22.3-linux_arm64": ("node-v22.22.3-linux-arm64.tar.xz", "node-v22.22.3-linux-arm64", "1c4a9933a5e45bc88f54f70b5f91232c127ec49f1a5989d23fb85824c7adf9b7"), + "22.22.3-linux_ppc64le": ("node-v22.22.3-linux-ppc64le.tar.xz", "node-v22.22.3-linux-ppc64le", "edb5478071bd1375e80195ca52f72823998bb5141b1a09e68bc54b3e2eb67754"), + "22.22.3-linux_s390x": ("node-v22.22.3-linux-s390x.tar.xz", "node-v22.22.3-linux-s390x", "ce398c057830d57a24c458177279a17bc51742d5c22dd4cbe97b10dbd43f2617"), + "22.22.3-linux_amd64": ("node-v22.22.3-linux-x64.tar.xz", "node-v22.22.3-linux-x64", "2e5d13569282d016861fae7c8f935e741693c269101a5bebcf761a5376d1f99f"), + "22.22.3-windows_amd64": ("node-v22.22.3-win-x64.zip", "node-v22.22.3-win-x64", "6c8d54f635feff4df76c2ca80f45332eb2ff57d25226edce36592e51a177ee33"), }, - node_version = "22.22.2", + node_version = "22.22.3", ) use_repo( node, diff --git a/MODULE.bazel.lock b/MODULE.bazel.lock index 4a635e26a36c..956dbb1eb953 100644 --- a/MODULE.bazel.lock +++ b/MODULE.bazel.lock @@ -951,7 +951,7 @@ "@@rules_nodejs+//nodejs:extensions.bzl%node": { "general": { "bzlTransitiveDigest": "oZFClfRhTTwsYzpxVPkOpOt/r0+OzEfEV37au0jFZ0s=", - "usagesDigest": "JuqciimJyUVym+rdasVPFK8FBsvu9FCdZMQeXIUiANI=", + "usagesDigest": "wY/NydQ13j0FjFSFmSj1BtgjFqRh5ZrTIiy23+RgdSg=", "recordedFileInputs": {}, "recordedDirentsInputs": {}, "envVariables": {}, @@ -961,46 +961,46 @@ "attributes": { "node_download_auth": {}, "node_repositories": { - "22.22.2-darwin_arm64": [ - "node-v22.22.2-darwin-arm64.tar.gz", - "node-v22.22.2-darwin-arm64", - "db4b275b83736df67533529a18cc55de2549a8329ace6c7bcc68f8d22d3c9000" - ], - "22.22.2-darwin_amd64": [ - "node-v22.22.2-darwin-x64.tar.gz", - "node-v22.22.2-darwin-x64", - "12a6abb9c2902cf48a21120da13f87fde1ed1b71a13330712949e8db818708ba" - ], - "22.22.2-linux_arm64": [ - "node-v22.22.2-linux-arm64.tar.xz", - "node-v22.22.2-linux-arm64", - "e9e1930fd321a470e29bb68f30318bf58e3ecb4acb4f1533fb19c58328a091fe" - ], - "22.22.2-linux_ppc64le": [ - "node-v22.22.2-linux-ppc64le.tar.xz", - "node-v22.22.2-linux-ppc64le", - "14045b5a5030d35ca0030fb7e870bd11a651eb9b57323ebc0021e8d78ac6bac9" - ], - "22.22.2-linux_s390x": [ - "node-v22.22.2-linux-s390x.tar.xz", - "node-v22.22.2-linux-s390x", - "9e4a07c291b8949289c6ea8ee61b1d14666a4810feae776a8d1eb1f57e03a2fb" - ], - "22.22.2-linux_amd64": [ - "node-v22.22.2-linux-x64.tar.xz", - "node-v22.22.2-linux-x64", - "88fd1ce767091fd8d4a99fdb2356e98c819f93f3b1f8663853a2dee9b438068a" - ], - "22.22.2-windows_amd64": [ - "node-v22.22.2-win-x64.zip", - "node-v22.22.2-win-x64", - "7c93e9d92bf68c07182b471aa187e35ee6cd08ef0f24ab060dfff605fcc1c57c" + "22.22.3-darwin_arm64": [ + "node-v22.22.3-darwin-arm64.tar.gz", + "node-v22.22.3-darwin-arm64", + "0da7ff74ef8611328c8212f17943368713a2ad953fb7d89a8c8a0eae87c23207" + ], + "22.22.3-darwin_amd64": [ + "node-v22.22.3-darwin-x64.tar.gz", + "node-v22.22.3-darwin-x64", + "45830ba752fa0d892c6dcd640946669801293cac820a33591ded40ac075198ec" + ], + "22.22.3-linux_arm64": [ + "node-v22.22.3-linux-arm64.tar.xz", + "node-v22.22.3-linux-arm64", + "1c4a9933a5e45bc88f54f70b5f91232c127ec49f1a5989d23fb85824c7adf9b7" + ], + "22.22.3-linux_ppc64le": [ + "node-v22.22.3-linux-ppc64le.tar.xz", + "node-v22.22.3-linux-ppc64le", + "edb5478071bd1375e80195ca52f72823998bb5141b1a09e68bc54b3e2eb67754" + ], + "22.22.3-linux_s390x": [ + "node-v22.22.3-linux-s390x.tar.xz", + "node-v22.22.3-linux-s390x", + "ce398c057830d57a24c458177279a17bc51742d5c22dd4cbe97b10dbd43f2617" + ], + "22.22.3-linux_amd64": [ + "node-v22.22.3-linux-x64.tar.xz", + "node-v22.22.3-linux-x64", + "2e5d13569282d016861fae7c8f935e741693c269101a5bebcf761a5376d1f99f" + ], + "22.22.3-windows_amd64": [ + "node-v22.22.3-win-x64.zip", + "node-v22.22.3-win-x64", + "6c8d54f635feff4df76c2ca80f45332eb2ff57d25226edce36592e51a177ee33" ] }, "node_urls": [ "https://nodejs.org/dist/v{version}/{filename}" ], - "node_version": "22.22.2", + "node_version": "22.22.3", "include_headers": false, "platform": "linux_amd64" } @@ -1010,46 +1010,46 @@ "attributes": { "node_download_auth": {}, "node_repositories": { - "22.22.2-darwin_arm64": [ - "node-v22.22.2-darwin-arm64.tar.gz", - "node-v22.22.2-darwin-arm64", - "db4b275b83736df67533529a18cc55de2549a8329ace6c7bcc68f8d22d3c9000" - ], - "22.22.2-darwin_amd64": [ - "node-v22.22.2-darwin-x64.tar.gz", - "node-v22.22.2-darwin-x64", - "12a6abb9c2902cf48a21120da13f87fde1ed1b71a13330712949e8db818708ba" - ], - "22.22.2-linux_arm64": [ - "node-v22.22.2-linux-arm64.tar.xz", - "node-v22.22.2-linux-arm64", - "e9e1930fd321a470e29bb68f30318bf58e3ecb4acb4f1533fb19c58328a091fe" - ], - "22.22.2-linux_ppc64le": [ - "node-v22.22.2-linux-ppc64le.tar.xz", - "node-v22.22.2-linux-ppc64le", - "14045b5a5030d35ca0030fb7e870bd11a651eb9b57323ebc0021e8d78ac6bac9" - ], - "22.22.2-linux_s390x": [ - "node-v22.22.2-linux-s390x.tar.xz", - "node-v22.22.2-linux-s390x", - "9e4a07c291b8949289c6ea8ee61b1d14666a4810feae776a8d1eb1f57e03a2fb" - ], - "22.22.2-linux_amd64": [ - "node-v22.22.2-linux-x64.tar.xz", - "node-v22.22.2-linux-x64", - "88fd1ce767091fd8d4a99fdb2356e98c819f93f3b1f8663853a2dee9b438068a" - ], - "22.22.2-windows_amd64": [ - "node-v22.22.2-win-x64.zip", - "node-v22.22.2-win-x64", - "7c93e9d92bf68c07182b471aa187e35ee6cd08ef0f24ab060dfff605fcc1c57c" + "22.22.3-darwin_arm64": [ + "node-v22.22.3-darwin-arm64.tar.gz", + "node-v22.22.3-darwin-arm64", + "0da7ff74ef8611328c8212f17943368713a2ad953fb7d89a8c8a0eae87c23207" + ], + "22.22.3-darwin_amd64": [ + "node-v22.22.3-darwin-x64.tar.gz", + "node-v22.22.3-darwin-x64", + "45830ba752fa0d892c6dcd640946669801293cac820a33591ded40ac075198ec" + ], + "22.22.3-linux_arm64": [ + "node-v22.22.3-linux-arm64.tar.xz", + "node-v22.22.3-linux-arm64", + "1c4a9933a5e45bc88f54f70b5f91232c127ec49f1a5989d23fb85824c7adf9b7" + ], + "22.22.3-linux_ppc64le": [ + "node-v22.22.3-linux-ppc64le.tar.xz", + "node-v22.22.3-linux-ppc64le", + "edb5478071bd1375e80195ca52f72823998bb5141b1a09e68bc54b3e2eb67754" + ], + "22.22.3-linux_s390x": [ + "node-v22.22.3-linux-s390x.tar.xz", + "node-v22.22.3-linux-s390x", + "ce398c057830d57a24c458177279a17bc51742d5c22dd4cbe97b10dbd43f2617" + ], + "22.22.3-linux_amd64": [ + "node-v22.22.3-linux-x64.tar.xz", + "node-v22.22.3-linux-x64", + "2e5d13569282d016861fae7c8f935e741693c269101a5bebcf761a5376d1f99f" + ], + "22.22.3-windows_amd64": [ + "node-v22.22.3-win-x64.zip", + "node-v22.22.3-win-x64", + "6c8d54f635feff4df76c2ca80f45332eb2ff57d25226edce36592e51a177ee33" ] }, "node_urls": [ "https://nodejs.org/dist/v{version}/{filename}" ], - "node_version": "22.22.2", + "node_version": "22.22.3", "include_headers": false, "platform": "linux_arm64" } @@ -1059,46 +1059,46 @@ "attributes": { "node_download_auth": {}, "node_repositories": { - "22.22.2-darwin_arm64": [ - "node-v22.22.2-darwin-arm64.tar.gz", - "node-v22.22.2-darwin-arm64", - "db4b275b83736df67533529a18cc55de2549a8329ace6c7bcc68f8d22d3c9000" - ], - "22.22.2-darwin_amd64": [ - "node-v22.22.2-darwin-x64.tar.gz", - "node-v22.22.2-darwin-x64", - "12a6abb9c2902cf48a21120da13f87fde1ed1b71a13330712949e8db818708ba" - ], - "22.22.2-linux_arm64": [ - "node-v22.22.2-linux-arm64.tar.xz", - "node-v22.22.2-linux-arm64", - "e9e1930fd321a470e29bb68f30318bf58e3ecb4acb4f1533fb19c58328a091fe" - ], - "22.22.2-linux_ppc64le": [ - "node-v22.22.2-linux-ppc64le.tar.xz", - "node-v22.22.2-linux-ppc64le", - "14045b5a5030d35ca0030fb7e870bd11a651eb9b57323ebc0021e8d78ac6bac9" - ], - "22.22.2-linux_s390x": [ - "node-v22.22.2-linux-s390x.tar.xz", - "node-v22.22.2-linux-s390x", - "9e4a07c291b8949289c6ea8ee61b1d14666a4810feae776a8d1eb1f57e03a2fb" - ], - "22.22.2-linux_amd64": [ - "node-v22.22.2-linux-x64.tar.xz", - "node-v22.22.2-linux-x64", - "88fd1ce767091fd8d4a99fdb2356e98c819f93f3b1f8663853a2dee9b438068a" - ], - "22.22.2-windows_amd64": [ - "node-v22.22.2-win-x64.zip", - "node-v22.22.2-win-x64", - "7c93e9d92bf68c07182b471aa187e35ee6cd08ef0f24ab060dfff605fcc1c57c" + "22.22.3-darwin_arm64": [ + "node-v22.22.3-darwin-arm64.tar.gz", + "node-v22.22.3-darwin-arm64", + "0da7ff74ef8611328c8212f17943368713a2ad953fb7d89a8c8a0eae87c23207" + ], + "22.22.3-darwin_amd64": [ + "node-v22.22.3-darwin-x64.tar.gz", + "node-v22.22.3-darwin-x64", + "45830ba752fa0d892c6dcd640946669801293cac820a33591ded40ac075198ec" + ], + "22.22.3-linux_arm64": [ + "node-v22.22.3-linux-arm64.tar.xz", + "node-v22.22.3-linux-arm64", + "1c4a9933a5e45bc88f54f70b5f91232c127ec49f1a5989d23fb85824c7adf9b7" + ], + "22.22.3-linux_ppc64le": [ + "node-v22.22.3-linux-ppc64le.tar.xz", + "node-v22.22.3-linux-ppc64le", + "edb5478071bd1375e80195ca52f72823998bb5141b1a09e68bc54b3e2eb67754" + ], + "22.22.3-linux_s390x": [ + "node-v22.22.3-linux-s390x.tar.xz", + "node-v22.22.3-linux-s390x", + "ce398c057830d57a24c458177279a17bc51742d5c22dd4cbe97b10dbd43f2617" + ], + "22.22.3-linux_amd64": [ + "node-v22.22.3-linux-x64.tar.xz", + "node-v22.22.3-linux-x64", + "2e5d13569282d016861fae7c8f935e741693c269101a5bebcf761a5376d1f99f" + ], + "22.22.3-windows_amd64": [ + "node-v22.22.3-win-x64.zip", + "node-v22.22.3-win-x64", + "6c8d54f635feff4df76c2ca80f45332eb2ff57d25226edce36592e51a177ee33" ] }, "node_urls": [ "https://nodejs.org/dist/v{version}/{filename}" ], - "node_version": "22.22.2", + "node_version": "22.22.3", "include_headers": false, "platform": "linux_s390x" } @@ -1108,46 +1108,46 @@ "attributes": { "node_download_auth": {}, "node_repositories": { - "22.22.2-darwin_arm64": [ - "node-v22.22.2-darwin-arm64.tar.gz", - "node-v22.22.2-darwin-arm64", - "db4b275b83736df67533529a18cc55de2549a8329ace6c7bcc68f8d22d3c9000" - ], - "22.22.2-darwin_amd64": [ - "node-v22.22.2-darwin-x64.tar.gz", - "node-v22.22.2-darwin-x64", - "12a6abb9c2902cf48a21120da13f87fde1ed1b71a13330712949e8db818708ba" - ], - "22.22.2-linux_arm64": [ - "node-v22.22.2-linux-arm64.tar.xz", - "node-v22.22.2-linux-arm64", - "e9e1930fd321a470e29bb68f30318bf58e3ecb4acb4f1533fb19c58328a091fe" - ], - "22.22.2-linux_ppc64le": [ - "node-v22.22.2-linux-ppc64le.tar.xz", - "node-v22.22.2-linux-ppc64le", - "14045b5a5030d35ca0030fb7e870bd11a651eb9b57323ebc0021e8d78ac6bac9" - ], - "22.22.2-linux_s390x": [ - "node-v22.22.2-linux-s390x.tar.xz", - "node-v22.22.2-linux-s390x", - "9e4a07c291b8949289c6ea8ee61b1d14666a4810feae776a8d1eb1f57e03a2fb" - ], - "22.22.2-linux_amd64": [ - "node-v22.22.2-linux-x64.tar.xz", - "node-v22.22.2-linux-x64", - "88fd1ce767091fd8d4a99fdb2356e98c819f93f3b1f8663853a2dee9b438068a" - ], - "22.22.2-windows_amd64": [ - "node-v22.22.2-win-x64.zip", - "node-v22.22.2-win-x64", - "7c93e9d92bf68c07182b471aa187e35ee6cd08ef0f24ab060dfff605fcc1c57c" + "22.22.3-darwin_arm64": [ + "node-v22.22.3-darwin-arm64.tar.gz", + "node-v22.22.3-darwin-arm64", + "0da7ff74ef8611328c8212f17943368713a2ad953fb7d89a8c8a0eae87c23207" + ], + "22.22.3-darwin_amd64": [ + "node-v22.22.3-darwin-x64.tar.gz", + "node-v22.22.3-darwin-x64", + "45830ba752fa0d892c6dcd640946669801293cac820a33591ded40ac075198ec" + ], + "22.22.3-linux_arm64": [ + "node-v22.22.3-linux-arm64.tar.xz", + "node-v22.22.3-linux-arm64", + "1c4a9933a5e45bc88f54f70b5f91232c127ec49f1a5989d23fb85824c7adf9b7" + ], + "22.22.3-linux_ppc64le": [ + "node-v22.22.3-linux-ppc64le.tar.xz", + "node-v22.22.3-linux-ppc64le", + "edb5478071bd1375e80195ca52f72823998bb5141b1a09e68bc54b3e2eb67754" + ], + "22.22.3-linux_s390x": [ + "node-v22.22.3-linux-s390x.tar.xz", + "node-v22.22.3-linux-s390x", + "ce398c057830d57a24c458177279a17bc51742d5c22dd4cbe97b10dbd43f2617" + ], + "22.22.3-linux_amd64": [ + "node-v22.22.3-linux-x64.tar.xz", + "node-v22.22.3-linux-x64", + "2e5d13569282d016861fae7c8f935e741693c269101a5bebcf761a5376d1f99f" + ], + "22.22.3-windows_amd64": [ + "node-v22.22.3-win-x64.zip", + "node-v22.22.3-win-x64", + "6c8d54f635feff4df76c2ca80f45332eb2ff57d25226edce36592e51a177ee33" ] }, "node_urls": [ "https://nodejs.org/dist/v{version}/{filename}" ], - "node_version": "22.22.2", + "node_version": "22.22.3", "include_headers": false, "platform": "linux_ppc64le" } @@ -1157,46 +1157,46 @@ "attributes": { "node_download_auth": {}, "node_repositories": { - "22.22.2-darwin_arm64": [ - "node-v22.22.2-darwin-arm64.tar.gz", - "node-v22.22.2-darwin-arm64", - "db4b275b83736df67533529a18cc55de2549a8329ace6c7bcc68f8d22d3c9000" - ], - "22.22.2-darwin_amd64": [ - "node-v22.22.2-darwin-x64.tar.gz", - "node-v22.22.2-darwin-x64", - "12a6abb9c2902cf48a21120da13f87fde1ed1b71a13330712949e8db818708ba" - ], - "22.22.2-linux_arm64": [ - "node-v22.22.2-linux-arm64.tar.xz", - "node-v22.22.2-linux-arm64", - "e9e1930fd321a470e29bb68f30318bf58e3ecb4acb4f1533fb19c58328a091fe" - ], - "22.22.2-linux_ppc64le": [ - "node-v22.22.2-linux-ppc64le.tar.xz", - "node-v22.22.2-linux-ppc64le", - "14045b5a5030d35ca0030fb7e870bd11a651eb9b57323ebc0021e8d78ac6bac9" - ], - "22.22.2-linux_s390x": [ - "node-v22.22.2-linux-s390x.tar.xz", - "node-v22.22.2-linux-s390x", - "9e4a07c291b8949289c6ea8ee61b1d14666a4810feae776a8d1eb1f57e03a2fb" - ], - "22.22.2-linux_amd64": [ - "node-v22.22.2-linux-x64.tar.xz", - "node-v22.22.2-linux-x64", - "88fd1ce767091fd8d4a99fdb2356e98c819f93f3b1f8663853a2dee9b438068a" - ], - "22.22.2-windows_amd64": [ - "node-v22.22.2-win-x64.zip", - "node-v22.22.2-win-x64", - "7c93e9d92bf68c07182b471aa187e35ee6cd08ef0f24ab060dfff605fcc1c57c" + "22.22.3-darwin_arm64": [ + "node-v22.22.3-darwin-arm64.tar.gz", + "node-v22.22.3-darwin-arm64", + "0da7ff74ef8611328c8212f17943368713a2ad953fb7d89a8c8a0eae87c23207" + ], + "22.22.3-darwin_amd64": [ + "node-v22.22.3-darwin-x64.tar.gz", + "node-v22.22.3-darwin-x64", + "45830ba752fa0d892c6dcd640946669801293cac820a33591ded40ac075198ec" + ], + "22.22.3-linux_arm64": [ + "node-v22.22.3-linux-arm64.tar.xz", + "node-v22.22.3-linux-arm64", + "1c4a9933a5e45bc88f54f70b5f91232c127ec49f1a5989d23fb85824c7adf9b7" + ], + "22.22.3-linux_ppc64le": [ + "node-v22.22.3-linux-ppc64le.tar.xz", + "node-v22.22.3-linux-ppc64le", + "edb5478071bd1375e80195ca52f72823998bb5141b1a09e68bc54b3e2eb67754" + ], + "22.22.3-linux_s390x": [ + "node-v22.22.3-linux-s390x.tar.xz", + "node-v22.22.3-linux-s390x", + "ce398c057830d57a24c458177279a17bc51742d5c22dd4cbe97b10dbd43f2617" + ], + "22.22.3-linux_amd64": [ + "node-v22.22.3-linux-x64.tar.xz", + "node-v22.22.3-linux-x64", + "2e5d13569282d016861fae7c8f935e741693c269101a5bebcf761a5376d1f99f" + ], + "22.22.3-windows_amd64": [ + "node-v22.22.3-win-x64.zip", + "node-v22.22.3-win-x64", + "6c8d54f635feff4df76c2ca80f45332eb2ff57d25226edce36592e51a177ee33" ] }, "node_urls": [ "https://nodejs.org/dist/v{version}/{filename}" ], - "node_version": "22.22.2", + "node_version": "22.22.3", "include_headers": false, "platform": "darwin_amd64" } @@ -1206,46 +1206,46 @@ "attributes": { "node_download_auth": {}, "node_repositories": { - "22.22.2-darwin_arm64": [ - "node-v22.22.2-darwin-arm64.tar.gz", - "node-v22.22.2-darwin-arm64", - "db4b275b83736df67533529a18cc55de2549a8329ace6c7bcc68f8d22d3c9000" - ], - "22.22.2-darwin_amd64": [ - "node-v22.22.2-darwin-x64.tar.gz", - "node-v22.22.2-darwin-x64", - "12a6abb9c2902cf48a21120da13f87fde1ed1b71a13330712949e8db818708ba" - ], - "22.22.2-linux_arm64": [ - "node-v22.22.2-linux-arm64.tar.xz", - "node-v22.22.2-linux-arm64", - "e9e1930fd321a470e29bb68f30318bf58e3ecb4acb4f1533fb19c58328a091fe" - ], - "22.22.2-linux_ppc64le": [ - "node-v22.22.2-linux-ppc64le.tar.xz", - "node-v22.22.2-linux-ppc64le", - "14045b5a5030d35ca0030fb7e870bd11a651eb9b57323ebc0021e8d78ac6bac9" - ], - "22.22.2-linux_s390x": [ - "node-v22.22.2-linux-s390x.tar.xz", - "node-v22.22.2-linux-s390x", - "9e4a07c291b8949289c6ea8ee61b1d14666a4810feae776a8d1eb1f57e03a2fb" - ], - "22.22.2-linux_amd64": [ - "node-v22.22.2-linux-x64.tar.xz", - "node-v22.22.2-linux-x64", - "88fd1ce767091fd8d4a99fdb2356e98c819f93f3b1f8663853a2dee9b438068a" - ], - "22.22.2-windows_amd64": [ - "node-v22.22.2-win-x64.zip", - "node-v22.22.2-win-x64", - "7c93e9d92bf68c07182b471aa187e35ee6cd08ef0f24ab060dfff605fcc1c57c" + "22.22.3-darwin_arm64": [ + "node-v22.22.3-darwin-arm64.tar.gz", + "node-v22.22.3-darwin-arm64", + "0da7ff74ef8611328c8212f17943368713a2ad953fb7d89a8c8a0eae87c23207" + ], + "22.22.3-darwin_amd64": [ + "node-v22.22.3-darwin-x64.tar.gz", + "node-v22.22.3-darwin-x64", + "45830ba752fa0d892c6dcd640946669801293cac820a33591ded40ac075198ec" + ], + "22.22.3-linux_arm64": [ + "node-v22.22.3-linux-arm64.tar.xz", + "node-v22.22.3-linux-arm64", + "1c4a9933a5e45bc88f54f70b5f91232c127ec49f1a5989d23fb85824c7adf9b7" + ], + "22.22.3-linux_ppc64le": [ + "node-v22.22.3-linux-ppc64le.tar.xz", + "node-v22.22.3-linux-ppc64le", + "edb5478071bd1375e80195ca52f72823998bb5141b1a09e68bc54b3e2eb67754" + ], + "22.22.3-linux_s390x": [ + "node-v22.22.3-linux-s390x.tar.xz", + "node-v22.22.3-linux-s390x", + "ce398c057830d57a24c458177279a17bc51742d5c22dd4cbe97b10dbd43f2617" + ], + "22.22.3-linux_amd64": [ + "node-v22.22.3-linux-x64.tar.xz", + "node-v22.22.3-linux-x64", + "2e5d13569282d016861fae7c8f935e741693c269101a5bebcf761a5376d1f99f" + ], + "22.22.3-windows_amd64": [ + "node-v22.22.3-win-x64.zip", + "node-v22.22.3-win-x64", + "6c8d54f635feff4df76c2ca80f45332eb2ff57d25226edce36592e51a177ee33" ] }, "node_urls": [ "https://nodejs.org/dist/v{version}/{filename}" ], - "node_version": "22.22.2", + "node_version": "22.22.3", "include_headers": false, "platform": "darwin_arm64" } @@ -1255,46 +1255,46 @@ "attributes": { "node_download_auth": {}, "node_repositories": { - "22.22.2-darwin_arm64": [ - "node-v22.22.2-darwin-arm64.tar.gz", - "node-v22.22.2-darwin-arm64", - "db4b275b83736df67533529a18cc55de2549a8329ace6c7bcc68f8d22d3c9000" - ], - "22.22.2-darwin_amd64": [ - "node-v22.22.2-darwin-x64.tar.gz", - "node-v22.22.2-darwin-x64", - "12a6abb9c2902cf48a21120da13f87fde1ed1b71a13330712949e8db818708ba" - ], - "22.22.2-linux_arm64": [ - "node-v22.22.2-linux-arm64.tar.xz", - "node-v22.22.2-linux-arm64", - "e9e1930fd321a470e29bb68f30318bf58e3ecb4acb4f1533fb19c58328a091fe" - ], - "22.22.2-linux_ppc64le": [ - "node-v22.22.2-linux-ppc64le.tar.xz", - "node-v22.22.2-linux-ppc64le", - "14045b5a5030d35ca0030fb7e870bd11a651eb9b57323ebc0021e8d78ac6bac9" - ], - "22.22.2-linux_s390x": [ - "node-v22.22.2-linux-s390x.tar.xz", - "node-v22.22.2-linux-s390x", - "9e4a07c291b8949289c6ea8ee61b1d14666a4810feae776a8d1eb1f57e03a2fb" - ], - "22.22.2-linux_amd64": [ - "node-v22.22.2-linux-x64.tar.xz", - "node-v22.22.2-linux-x64", - "88fd1ce767091fd8d4a99fdb2356e98c819f93f3b1f8663853a2dee9b438068a" - ], - "22.22.2-windows_amd64": [ - "node-v22.22.2-win-x64.zip", - "node-v22.22.2-win-x64", - "7c93e9d92bf68c07182b471aa187e35ee6cd08ef0f24ab060dfff605fcc1c57c" + "22.22.3-darwin_arm64": [ + "node-v22.22.3-darwin-arm64.tar.gz", + "node-v22.22.3-darwin-arm64", + "0da7ff74ef8611328c8212f17943368713a2ad953fb7d89a8c8a0eae87c23207" + ], + "22.22.3-darwin_amd64": [ + "node-v22.22.3-darwin-x64.tar.gz", + "node-v22.22.3-darwin-x64", + "45830ba752fa0d892c6dcd640946669801293cac820a33591ded40ac075198ec" + ], + "22.22.3-linux_arm64": [ + "node-v22.22.3-linux-arm64.tar.xz", + "node-v22.22.3-linux-arm64", + "1c4a9933a5e45bc88f54f70b5f91232c127ec49f1a5989d23fb85824c7adf9b7" + ], + "22.22.3-linux_ppc64le": [ + "node-v22.22.3-linux-ppc64le.tar.xz", + "node-v22.22.3-linux-ppc64le", + "edb5478071bd1375e80195ca52f72823998bb5141b1a09e68bc54b3e2eb67754" + ], + "22.22.3-linux_s390x": [ + "node-v22.22.3-linux-s390x.tar.xz", + "node-v22.22.3-linux-s390x", + "ce398c057830d57a24c458177279a17bc51742d5c22dd4cbe97b10dbd43f2617" + ], + "22.22.3-linux_amd64": [ + "node-v22.22.3-linux-x64.tar.xz", + "node-v22.22.3-linux-x64", + "2e5d13569282d016861fae7c8f935e741693c269101a5bebcf761a5376d1f99f" + ], + "22.22.3-windows_amd64": [ + "node-v22.22.3-win-x64.zip", + "node-v22.22.3-win-x64", + "6c8d54f635feff4df76c2ca80f45332eb2ff57d25226edce36592e51a177ee33" ] }, "node_urls": [ "https://nodejs.org/dist/v{version}/{filename}" ], - "node_version": "22.22.2", + "node_version": "22.22.3", "include_headers": false, "platform": "windows_amd64" } @@ -1304,46 +1304,46 @@ "attributes": { "node_download_auth": {}, "node_repositories": { - "22.22.2-darwin_arm64": [ - "node-v22.22.2-darwin-arm64.tar.gz", - "node-v22.22.2-darwin-arm64", - "db4b275b83736df67533529a18cc55de2549a8329ace6c7bcc68f8d22d3c9000" - ], - "22.22.2-darwin_amd64": [ - "node-v22.22.2-darwin-x64.tar.gz", - "node-v22.22.2-darwin-x64", - "12a6abb9c2902cf48a21120da13f87fde1ed1b71a13330712949e8db818708ba" - ], - "22.22.2-linux_arm64": [ - "node-v22.22.2-linux-arm64.tar.xz", - "node-v22.22.2-linux-arm64", - "e9e1930fd321a470e29bb68f30318bf58e3ecb4acb4f1533fb19c58328a091fe" - ], - "22.22.2-linux_ppc64le": [ - "node-v22.22.2-linux-ppc64le.tar.xz", - "node-v22.22.2-linux-ppc64le", - "14045b5a5030d35ca0030fb7e870bd11a651eb9b57323ebc0021e8d78ac6bac9" - ], - "22.22.2-linux_s390x": [ - "node-v22.22.2-linux-s390x.tar.xz", - "node-v22.22.2-linux-s390x", - "9e4a07c291b8949289c6ea8ee61b1d14666a4810feae776a8d1eb1f57e03a2fb" - ], - "22.22.2-linux_amd64": [ - "node-v22.22.2-linux-x64.tar.xz", - "node-v22.22.2-linux-x64", - "88fd1ce767091fd8d4a99fdb2356e98c819f93f3b1f8663853a2dee9b438068a" - ], - "22.22.2-windows_amd64": [ - "node-v22.22.2-win-x64.zip", - "node-v22.22.2-win-x64", - "7c93e9d92bf68c07182b471aa187e35ee6cd08ef0f24ab060dfff605fcc1c57c" + "22.22.3-darwin_arm64": [ + "node-v22.22.3-darwin-arm64.tar.gz", + "node-v22.22.3-darwin-arm64", + "0da7ff74ef8611328c8212f17943368713a2ad953fb7d89a8c8a0eae87c23207" + ], + "22.22.3-darwin_amd64": [ + "node-v22.22.3-darwin-x64.tar.gz", + "node-v22.22.3-darwin-x64", + "45830ba752fa0d892c6dcd640946669801293cac820a33591ded40ac075198ec" + ], + "22.22.3-linux_arm64": [ + "node-v22.22.3-linux-arm64.tar.xz", + "node-v22.22.3-linux-arm64", + "1c4a9933a5e45bc88f54f70b5f91232c127ec49f1a5989d23fb85824c7adf9b7" + ], + "22.22.3-linux_ppc64le": [ + "node-v22.22.3-linux-ppc64le.tar.xz", + "node-v22.22.3-linux-ppc64le", + "edb5478071bd1375e80195ca52f72823998bb5141b1a09e68bc54b3e2eb67754" + ], + "22.22.3-linux_s390x": [ + "node-v22.22.3-linux-s390x.tar.xz", + "node-v22.22.3-linux-s390x", + "ce398c057830d57a24c458177279a17bc51742d5c22dd4cbe97b10dbd43f2617" + ], + "22.22.3-linux_amd64": [ + "node-v22.22.3-linux-x64.tar.xz", + "node-v22.22.3-linux-x64", + "2e5d13569282d016861fae7c8f935e741693c269101a5bebcf761a5376d1f99f" + ], + "22.22.3-windows_amd64": [ + "node-v22.22.3-win-x64.zip", + "node-v22.22.3-win-x64", + "6c8d54f635feff4df76c2ca80f45332eb2ff57d25226edce36592e51a177ee33" ] }, "node_urls": [ "https://nodejs.org/dist/v{version}/{filename}" ], - "node_version": "22.22.2", + "node_version": "22.22.3", "include_headers": false, "platform": "windows_arm64" } From 3fc3efa2aee4aa97a994651323bb3c4c616726c9 Mon Sep 17 00:00:00 2001 From: Charles Lyding <19598772+clydin@users.noreply.github.com> Date: Tue, 5 May 2026 13:09:16 -0400 Subject: [PATCH 26/34] refactor(@angular/cli): restrict MCP host process spawning to Angular CLI executable Update the Host abstraction inside the Model Context Protocol (MCP) layer to tighten the system shell surface and improve semantics. The generic spawn and execute methods are replaced with specialized counterparts that default to the Angular CLI, enabling stronger path security containment for developers while also clarifying the distinct control flows needed for buffered discrete commands and long-running background services. --- .../angular/cli/src/commands/mcp/devserver.ts | 2 +- packages/angular/cli/src/commands/mcp/host.ts | 49 ++++++++----------- .../cli/src/commands/mcp/testing/mock-host.ts | 4 +- .../src/commands/mcp/testing/test-utils.ts | 6 ++- .../cli/src/commands/mcp/tools/build.ts | 2 +- .../cli/src/commands/mcp/tools/build_spec.ts | 20 +++----- .../mcp/tools/devserver/devserver_spec.ts | 12 ++--- .../angular/cli/src/commands/mcp/tools/e2e.ts | 2 +- .../cli/src/commands/mcp/tools/e2e_spec.ts | 18 +++---- .../cli/src/commands/mcp/tools/test.ts | 2 +- .../cli/src/commands/mcp/tools/test_spec.ts | 22 +++------ 11 files changed, 61 insertions(+), 78 deletions(-) diff --git a/packages/angular/cli/src/commands/mcp/devserver.ts b/packages/angular/cli/src/commands/mcp/devserver.ts index 5b86f7125b37..1a667afed6c9 100644 --- a/packages/angular/cli/src/commands/mcp/devserver.ts +++ b/packages/angular/cli/src/commands/mcp/devserver.ts @@ -118,7 +118,7 @@ export class LocalDevserver implements Devserver { args.push(`--port=${this.port}`); - this.devserverProcess = this.host.spawn('ng', args, { + this.devserverProcess = this.host.startNgProcess(args, { stdio: 'pipe', cwd: this.workspacePath, }); diff --git a/packages/angular/cli/src/commands/mcp/host.ts b/packages/angular/cli/src/commands/mcp/host.ts index 31cec340cce1..3bc5ad586cd2 100644 --- a/packages/angular/cli/src/commands/mcp/host.ts +++ b/packages/angular/cli/src/commands/mcp/host.ts @@ -76,13 +76,11 @@ export interface Host { /** * Spawns a child process and returns a promise that resolves with the process's * output or rejects with a structured error. - * @param command The command to run. * @param args The arguments to pass to the command. * @param options Options for the child process. * @returns A promise that resolves with the standard output and standard error of the command. */ - runCommand( - command: string, + executeNgCommand( args: readonly string[], options?: { timeout?: number; @@ -94,13 +92,11 @@ export interface Host { /** * Spawns a long-running child process and returns the `ChildProcess` object. - * @param command The command to run. * @param args The arguments to pass to the command. * @param options Options for the child process. * @returns The spawned `ChildProcess` instance. */ - spawn( - command: string, + startNgProcess( args: readonly string[], options?: { stdio?: 'pipe' | 'ignore'; @@ -125,13 +121,13 @@ export interface Host { setRoots(roots: string[]): void; } -function resolveCommand( - command: string, +function resolveNgCommand( args: readonly string[], cwd?: string, ): { command: string; args: readonly string[] } { - if (command !== 'ng' || !cwd) { - return { command, args }; + const defaultCommand = { command: 'ng', args }; + if (!cwd) { + return defaultCommand; } try { @@ -152,7 +148,7 @@ function resolveCommand( // Failed to resolve the CLI binary, fall back to assuming `ng` is on PATH. } - return { command, args }; + return defaultCommand; } /** @@ -172,8 +168,7 @@ export const LocalWorkspaceHost: Host = { return nodeGlob(pattern, { ...options, withFileTypes: true }); }, - runCommand: async ( - command: string, + executeNgCommand: async ( args: readonly string[], options: { timeout?: number; @@ -182,7 +177,7 @@ export const LocalWorkspaceHost: Host = { env?: Record; } = {}, ): Promise<{ logs: string[] }> => { - const resolved = resolveCommand(command, args, options.cwd); + const resolved = resolveNgCommand(args, options.cwd); const signal = options.timeout ? AbortSignal.timeout(options.timeout) : undefined; return new Promise((resolve, reject) => { @@ -223,8 +218,7 @@ export const LocalWorkspaceHost: Host = { }); }, - spawn( - command: string, + startNgProcess( args: readonly string[], options: { stdio?: 'pipe' | 'ignore'; @@ -232,7 +226,7 @@ export const LocalWorkspaceHost: Host = { env?: Record; } = {}, ): ChildProcess { - const resolved = resolveCommand(command, args, options.cwd); + const resolved = resolveNgCommand(args, options.cwd); return spawn(resolved.command, resolved.args, { shell: false, @@ -372,23 +366,20 @@ export function createRootRestrictedHost( return baseHost.glob(pattern, options); }, - runCommand(command: string, args: readonly string[], options: { cwd?: string } = {}) { - const effectiveCwd = options.cwd ?? process.cwd(); + executeNgCommand( + args: readonly string[], + options: Parameters[1] = {}, + ) { + const effectiveCwd = options?.cwd ?? process.cwd(); checkPath(effectiveCwd); - if (command.includes('/') || command.includes('\\')) { - checkPath(resolve(effectiveCwd, command)); - } - return baseHost.runCommand(command, args, options); + return baseHost.executeNgCommand(args, options); }, - spawn(command: string, args: readonly string[], options: { cwd?: string } = {}) { - const effectiveCwd = options.cwd ?? process.cwd(); + startNgProcess(args: readonly string[], options: Parameters[1] = {}) { + const effectiveCwd = options?.cwd ?? process.cwd(); checkPath(effectiveCwd); - if (command.includes('/') || command.includes('\\')) { - checkPath(resolve(effectiveCwd, command)); - } - return baseHost.spawn(command, args, options); + return baseHost.startNgProcess(args, options); }, }; } diff --git a/packages/angular/cli/src/commands/mcp/testing/mock-host.ts b/packages/angular/cli/src/commands/mcp/testing/mock-host.ts index ef818062d559..1062191aebe1 100644 --- a/packages/angular/cli/src/commands/mcp/testing/mock-host.ts +++ b/packages/angular/cli/src/commands/mcp/testing/mock-host.ts @@ -13,12 +13,12 @@ import type { Host } from '../host'; * This class allows spying on host methods and controlling their return values. */ export class MockHost implements Host { - runCommand = jasmine.createSpy('runCommand').and.resolveTo({ logs: [] }); + executeNgCommand = jasmine.createSpy('executeNgCommand').and.resolveTo({ logs: [] }); stat = jasmine.createSpy('stat'); existsSync = jasmine.createSpy('existsSync'); readFile = jasmine.createSpy('readFile').and.resolveTo(''); glob = jasmine.createSpy('glob').and.returnValue((async function* () {})()); - spawn = jasmine.createSpy('spawn'); + startNgProcess = jasmine.createSpy('startNgProcess'); getAvailablePort = jasmine.createSpy('getAvailablePort'); isPortAvailable = jasmine.createSpy('isPortAvailable').and.resolveTo(true); setRoots = jasmine.createSpy('setRoots'); diff --git a/packages/angular/cli/src/commands/mcp/testing/test-utils.ts b/packages/angular/cli/src/commands/mcp/testing/test-utils.ts index 1bdf2ef416a5..1c95c51fe25e 100644 --- a/packages/angular/cli/src/commands/mcp/testing/test-utils.ts +++ b/packages/angular/cli/src/commands/mcp/testing/test-utils.ts @@ -20,10 +20,12 @@ import { MockHost } from './mock-host'; */ export function createMockHost(): MockHost { return { - runCommand: jasmine.createSpy('runCommand').and.resolveTo({ logs: [] }), + executeNgCommand: jasmine + .createSpy('executeNgCommand') + .and.resolveTo({ logs: [] }), stat: jasmine.createSpy('stat'), existsSync: jasmine.createSpy('existsSync'), - spawn: jasmine.createSpy('spawn'), + startNgProcess: jasmine.createSpy('startNgProcess'), getAvailablePort: jasmine .createSpy('getAvailablePort') .and.resolveTo(0), diff --git a/packages/angular/cli/src/commands/mcp/tools/build.ts b/packages/angular/cli/src/commands/mcp/tools/build.ts index a04812f8544b..fbf2729bf8bf 100644 --- a/packages/angular/cli/src/commands/mcp/tools/build.ts +++ b/packages/angular/cli/src/commands/mcp/tools/build.ts @@ -52,7 +52,7 @@ export async function runBuild(input: BuildToolInput, context: McpToolContext) { let outputPath: string | undefined; try { - logs = (await context.host.runCommand('ng', args, { cwd: workspacePath })).logs; + logs = (await context.host.executeNgCommand(args, { cwd: workspacePath })).logs; } catch (e) { status = 'failure'; logs = getCommandErrorLogs(e); diff --git a/packages/angular/cli/src/commands/mcp/tools/build_spec.ts b/packages/angular/cli/src/commands/mcp/tools/build_spec.ts index 403d5e68f877..3fd7318c554b 100644 --- a/packages/angular/cli/src/commands/mcp/tools/build_spec.ts +++ b/packages/angular/cli/src/commands/mcp/tools/build_spec.ts @@ -29,8 +29,7 @@ describe('Build Tool', () => { it('should construct the command correctly with default configuration', async () => { mockContext.workspace.extensions['defaultProject'] = 'my-app'; await runBuild({}, mockContext); - expect(mockHost.runCommand).toHaveBeenCalledWith( - 'ng', + expect(mockHost.executeNgCommand).toHaveBeenCalledWith( ['build', 'my-app', '-c', 'development'], { cwd: '/test' }, ); @@ -39,8 +38,7 @@ describe('Build Tool', () => { it('should construct the command correctly with a specified project', async () => { addProjectToWorkspace(mockContext.workspace.projects, 'another-app'); await runBuild({ project: 'another-app' }, mockContext); - expect(mockHost.runCommand).toHaveBeenCalledWith( - 'ng', + expect(mockHost.executeNgCommand).toHaveBeenCalledWith( ['build', 'another-app', '-c', 'development'], { cwd: '/test' }, ); @@ -49,7 +47,7 @@ describe('Build Tool', () => { it('should construct the command correctly for a custom configuration', async () => { mockContext.workspace.extensions['defaultProject'] = 'my-app'; await runBuild({ configuration: 'myconfig' }, mockContext); - expect(mockHost.runCommand).toHaveBeenCalledWith('ng', ['build', 'my-app', '-c', 'myconfig'], { + expect(mockHost.executeNgCommand).toHaveBeenCalledWith(['build', 'my-app', '-c', 'myconfig'], { cwd: '/test', }); }); @@ -61,14 +59,13 @@ describe('Build Tool', () => { 'some warning', 'Output location: dist/my-app', ]; - mockHost.runCommand.and.resolveTo({ + mockHost.executeNgCommand.and.resolveTo({ logs: buildLogs, }); const { structuredContent } = await runBuild({ project: 'my-app' }, mockContext); - expect(mockHost.runCommand).toHaveBeenCalledWith( - 'ng', + expect(mockHost.executeNgCommand).toHaveBeenCalledWith( ['build', 'my-app', '-c', 'development'], { cwd: '/test' }, ); @@ -81,15 +78,14 @@ describe('Build Tool', () => { addProjectToWorkspace(mockContext.workspace.projects, 'my-failed-app'); const buildLogs = ['Some output before the crash.', 'Error: Something went wrong!']; const error = new CommandError('Build failed', buildLogs, 1); - mockHost.runCommand.and.rejectWith(error); + mockHost.executeNgCommand.and.rejectWith(error); const { structuredContent } = await runBuild( { project: 'my-failed-app', configuration: 'production' }, mockContext, ); - expect(mockHost.runCommand).toHaveBeenCalledWith( - 'ng', + expect(mockHost.executeNgCommand).toHaveBeenCalledWith( ['build', 'my-failed-app', '-c', 'production'], { cwd: '/test' }, ); @@ -100,7 +96,7 @@ describe('Build Tool', () => { it('should handle builds where the output path is not found in logs', async () => { const buildLogs = ["Some logs that don't match any output path."]; - mockHost.runCommand.and.resolveTo({ logs: buildLogs }); + mockHost.executeNgCommand.and.resolveTo({ logs: buildLogs }); mockContext.workspace.extensions['defaultProject'] = 'my-app'; const { structuredContent } = await runBuild({}, mockContext); diff --git a/packages/angular/cli/src/commands/mcp/tools/devserver/devserver_spec.ts b/packages/angular/cli/src/commands/mcp/tools/devserver/devserver_spec.ts index 0b617396efe0..735e82302a94 100644 --- a/packages/angular/cli/src/commands/mcp/tools/devserver/devserver_spec.ts +++ b/packages/angular/cli/src/commands/mcp/tools/devserver/devserver_spec.ts @@ -44,7 +44,7 @@ describe('Serve Tools', () => { mockContext = mock.context; // Customize host spies - mockHost.spawn.and.returnValue(mockProcess as unknown as ChildProcess); + mockHost.startNgProcess.and.returnValue(mockProcess as unknown as ChildProcess); mockHost.getAvailablePort.and.callFake(() => Promise.resolve(portCounter++)); // Setup default project @@ -57,7 +57,7 @@ describe('Serve Tools', () => { expect(startResult.structuredContent.message).toBe( `Development server for project 'my-app' started and watching for workspace changes.`, ); - expect(mockHost.spawn).toHaveBeenCalledWith('ng', ['serve', 'my-app', '--port=12345'], { + expect(mockHost.startNgProcess).toHaveBeenCalledWith(['serve', 'my-app', '--port=12345'], { stdio: 'pipe', cwd: '/test', }); @@ -74,7 +74,7 @@ describe('Serve Tools', () => { expect(startResult.structuredContent.message).toBe( `Development server for project 'my-app' started and watching for workspace changes.`, ); - expect(mockHost.spawn).toHaveBeenCalledWith('ng', ['serve', 'my-app', '--port=54321'], { + expect(mockHost.startNgProcess).toHaveBeenCalledWith(['serve', 'my-app', '--port=54321'], { stdio: 'pipe', cwd: '/test', }); @@ -130,17 +130,17 @@ describe('Serve Tools', () => { // Start server for project 2, returning a new mock process. const process2 = new MockChildProcess(); - mockHost.spawn.and.returnValue(process2 as unknown as ChildProcess); + mockHost.startNgProcess.and.returnValue(process2 as unknown as ChildProcess); const startResult2 = await startDevserver({ project: 'app-two' }, mockContext); expect(startResult2.structuredContent.message).toBe( `Development server for project 'app-two' started and watching for workspace changes.`, ); - expect(mockHost.spawn).toHaveBeenCalledWith('ng', ['serve', 'app-one', '--port=12345'], { + expect(mockHost.startNgProcess).toHaveBeenCalledWith(['serve', 'app-one', '--port=12345'], { stdio: 'pipe', cwd: '/test', }); - expect(mockHost.spawn).toHaveBeenCalledWith('ng', ['serve', 'app-two', '--port=12346'], { + expect(mockHost.startNgProcess).toHaveBeenCalledWith(['serve', 'app-two', '--port=12346'], { stdio: 'pipe', cwd: '/test', }); diff --git a/packages/angular/cli/src/commands/mcp/tools/e2e.ts b/packages/angular/cli/src/commands/mcp/tools/e2e.ts index 2bd0441d2434..726308b12c87 100644 --- a/packages/angular/cli/src/commands/mcp/tools/e2e.ts +++ b/packages/angular/cli/src/commands/mcp/tools/e2e.ts @@ -62,7 +62,7 @@ export async function runE2e(input: E2eToolInput, host: Host, context: McpToolCo let logs: string[]; try { - logs = (await host.runCommand('ng', args, { cwd: workspacePath })).logs; + logs = (await host.executeNgCommand(args, { cwd: workspacePath })).logs; } catch (e) { status = 'failure'; logs = getCommandErrorLogs(e); diff --git a/packages/angular/cli/src/commands/mcp/tools/e2e_spec.ts b/packages/angular/cli/src/commands/mcp/tools/e2e_spec.ts index d2d3949a6451..318dd41aea52 100644 --- a/packages/angular/cli/src/commands/mcp/tools/e2e_spec.ts +++ b/packages/angular/cli/src/commands/mcp/tools/e2e_spec.ts @@ -33,14 +33,14 @@ describe('E2E Tool', () => { mockContext.workspace.extensions['defaultProject'] = 'my-app'; await runE2e({}, mockHost, mockContext); - expect(mockHost.runCommand).toHaveBeenCalledWith('ng', ['e2e', 'my-app'], { cwd: '/test' }); + expect(mockHost.executeNgCommand).toHaveBeenCalledWith(['e2e', 'my-app'], { cwd: '/test' }); }); it('should construct the command correctly with a specified project', async () => { addProjectToWorkspace(mockProjects, 'my-app', { e2e: { builder: 'mock-builder' } }); await runE2e({ project: 'my-app' }, mockHost, mockContext); - expect(mockHost.runCommand).toHaveBeenCalledWith('ng', ['e2e', 'my-app'], { cwd: '/test' }); + expect(mockHost.executeNgCommand).toHaveBeenCalledWith(['e2e', 'my-app'], { cwd: '/test' }); }); it('should error if project does not have e2e target', async () => { @@ -50,7 +50,7 @@ describe('E2E Tool', () => { expect(structuredContent.status).toBe('failure'); expect(structuredContent.logs?.[0]).toContain("No e2e target is defined for project 'my-app'"); - expect(mockHost.runCommand).not.toHaveBeenCalled(); + expect(mockHost.executeNgCommand).not.toHaveBeenCalled(); }); it('should error if no project was specified and the default project does not have e2e target', async () => { @@ -61,32 +61,32 @@ describe('E2E Tool', () => { expect(structuredContent.status).toBe('failure'); expect(structuredContent.logs?.[0]).toContain("No e2e target is defined for project 'my-app'"); - expect(mockHost.runCommand).not.toHaveBeenCalled(); + expect(mockHost.executeNgCommand).not.toHaveBeenCalled(); }); it('should handle a successful e2e run with a specified project', async () => { addProjectToWorkspace(mockProjects, 'my-app', { e2e: { builder: 'mock-builder' } }); const e2eLogs = ['E2E passed for my-app']; - mockHost.runCommand.and.resolveTo({ logs: e2eLogs }); + mockHost.executeNgCommand.and.resolveTo({ logs: e2eLogs }); const { structuredContent } = await runE2e({ project: 'my-app' }, mockHost, mockContext); expect(structuredContent.status).toBe('success'); expect(structuredContent.logs).toEqual(e2eLogs); - expect(mockHost.runCommand).toHaveBeenCalledWith('ng', ['e2e', 'my-app'], { cwd: '/test' }); + expect(mockHost.executeNgCommand).toHaveBeenCalledWith(['e2e', 'my-app'], { cwd: '/test' }); }); it('should handle a successful e2e run with the default project', async () => { mockContext.workspace.extensions['defaultProject'] = 'default-app'; addProjectToWorkspace(mockProjects, 'default-app', { e2e: { builder: 'mock-builder' } }); const e2eLogs = ['E2E passed for default-app']; - mockHost.runCommand.and.resolveTo({ logs: e2eLogs }); + mockHost.executeNgCommand.and.resolveTo({ logs: e2eLogs }); const { structuredContent } = await runE2e({}, mockHost, mockContext); expect(structuredContent.status).toBe('success'); expect(structuredContent.logs).toEqual(e2eLogs); - expect(mockHost.runCommand).toHaveBeenCalledWith('ng', ['e2e', 'default-app'], { + expect(mockHost.executeNgCommand).toHaveBeenCalledWith(['e2e', 'default-app'], { cwd: '/test', }); }); @@ -94,7 +94,7 @@ describe('E2E Tool', () => { it('should handle a failed e2e run', async () => { addProjectToWorkspace(mockProjects, 'my-app', { e2e: { builder: 'mock-builder' } }); const e2eLogs = ['E2E failed']; - mockHost.runCommand.and.rejectWith(new CommandError('Failed', e2eLogs, 1)); + mockHost.executeNgCommand.and.rejectWith(new CommandError('Failed', e2eLogs, 1)); const { structuredContent } = await runE2e({ project: 'my-app' }, mockHost, mockContext); diff --git a/packages/angular/cli/src/commands/mcp/tools/test.ts b/packages/angular/cli/src/commands/mcp/tools/test.ts index 9c05a2f0f29b..72093c268a1b 100644 --- a/packages/angular/cli/src/commands/mcp/tools/test.ts +++ b/packages/angular/cli/src/commands/mcp/tools/test.ts @@ -65,7 +65,7 @@ export async function runTest(input: TestToolInput, context: McpToolContext) { let logs: string[]; try { - logs = (await context.host.runCommand('ng', args, { cwd: workspacePath })).logs; + logs = (await context.host.executeNgCommand(args, { cwd: workspacePath })).logs; } catch (e) { status = 'failure'; logs = getCommandErrorLogs(e); diff --git a/packages/angular/cli/src/commands/mcp/tools/test_spec.ts b/packages/angular/cli/src/commands/mcp/tools/test_spec.ts index 487c986cdcd2..a56307dcf3cb 100644 --- a/packages/angular/cli/src/commands/mcp/tools/test_spec.ts +++ b/packages/angular/cli/src/commands/mcp/tools/test_spec.ts @@ -29,8 +29,7 @@ describe('Test Tool', () => { it('should construct the command correctly with defaults', async () => { mockContext.workspace.extensions['defaultProject'] = 'my-app'; await runTest({}, mockContext); - expect(mockHost.runCommand).toHaveBeenCalledWith( - 'ng', + expect(mockHost.executeNgCommand).toHaveBeenCalledWith( ['test', 'my-app', '--browsers', 'ChromeHeadless', '--watch', 'false'], { cwd: '/test' }, ); @@ -39,8 +38,7 @@ describe('Test Tool', () => { it('should construct the command correctly with a specified project', async () => { addProjectToWorkspace(mockContext.workspace.projects, 'my-lib'); await runTest({ project: 'my-lib' }, mockContext); - expect(mockHost.runCommand).toHaveBeenCalledWith( - 'ng', + expect(mockHost.executeNgCommand).toHaveBeenCalledWith( ['test', 'my-lib', '--browsers', 'ChromeHeadless', '--watch', 'false'], { cwd: '/test' }, ); @@ -49,8 +47,7 @@ describe('Test Tool', () => { it('should construct the command correctly with filter', async () => { mockContext.workspace.extensions['defaultProject'] = 'my-app'; await runTest({ filter: 'AppComponent' }, mockContext); - expect(mockHost.runCommand).toHaveBeenCalledWith( - 'ng', + expect(mockHost.executeNgCommand).toHaveBeenCalledWith( [ 'test', 'my-app', @@ -67,14 +64,13 @@ describe('Test Tool', () => { it('should handle a successful test run and capture logs', async () => { const testLogs = ['Executed 10 of 10 SUCCESS', 'Total: 10 success']; - mockHost.runCommand.and.resolveTo({ + mockHost.executeNgCommand.and.resolveTo({ logs: testLogs, }); const { structuredContent } = await runTest({ project: 'my-app' }, mockContext); - expect(mockHost.runCommand).toHaveBeenCalledWith( - 'ng', + expect(mockHost.executeNgCommand).toHaveBeenCalledWith( ['test', 'my-app', '--browsers', 'ChromeHeadless', '--watch', 'false'], { cwd: '/test' }, ); @@ -86,7 +82,7 @@ describe('Test Tool', () => { addProjectToWorkspace(mockContext.workspace.projects, 'my-failed-app'); const testLogs = ['Executed 10 of 10 FAILED', 'Error: Some test failed']; const error = new CommandError('Test failed', testLogs, 1); - mockHost.runCommand.and.rejectWith(error); + mockHost.executeNgCommand.and.rejectWith(error); const { structuredContent } = await runTest({ project: 'my-failed-app' }, mockContext); @@ -106,8 +102,7 @@ describe('Test Tool', () => { await runTest({ project: 'my-vitest-app' }, mockContext); - expect(mockHost.runCommand).toHaveBeenCalledWith( - 'ng', + expect(mockHost.executeNgCommand).toHaveBeenCalledWith( ['test', 'my-vitest-app', '--headless', 'true', '--watch', 'false'], { cwd: '/test' }, ); @@ -123,8 +118,7 @@ describe('Test Tool', () => { await runTest({ project: 'my-default-vitest-app' }, mockContext); - expect(mockHost.runCommand).toHaveBeenCalledWith( - 'ng', + expect(mockHost.executeNgCommand).toHaveBeenCalledWith( ['test', 'my-default-vitest-app', '--headless', 'true', '--watch', 'false'], { cwd: '/test' }, ); From ec931af5523f98c3fb21d7fa025958a2d5e72f2b Mon Sep 17 00:00:00 2001 From: Charles Lyding <19598772+clydin@users.noreply.github.com> Date: Tue, 5 May 2026 16:04:23 -0400 Subject: [PATCH 27/34] refactor(@angular/cli): migrate MCP zoneless tool to host abstraction Migrate the zoneless migration tool to use the Host abstraction for file system operations including reading files, checking stats, and globbing. This ensures that the tool adheres to the allowed roots configured in the MCP server. By removing direct dependencies on native Node.js fs modules, the tool now benefits from the centralized injection and restriction model provided by the Host implementation. --- packages/angular/cli/src/commands/mcp/host.ts | 4 +- .../migrate-single-file.ts | 4 +- .../migrate-single-file_spec.ts | 19 ++++++---- .../migrate-test-file.ts | 21 +++++----- .../migrate-test-file_spec.ts | 8 ++-- .../onpush-zoneless-migration/ts-utils.ts | 6 +-- .../zoneless-migration.ts | 38 ++++++++++--------- 7 files changed, 57 insertions(+), 43 deletions(-) diff --git a/packages/angular/cli/src/commands/mcp/host.ts b/packages/angular/cli/src/commands/mcp/host.ts index 3bc5ad586cd2..5dda0ade077f 100644 --- a/packages/angular/cli/src/commands/mcp/host.ts +++ b/packages/angular/cli/src/commands/mcp/host.ts @@ -60,7 +60,7 @@ export interface Host { * @param encoding The encoding to use. * @returns A promise that resolves to the file content. */ - readFile(path: string, encoding: 'utf-8'): Promise; + readFile(path: string, encoding: BufferEncoding): Promise; /** * Finds files matching a glob pattern. @@ -344,7 +344,7 @@ export function createRootRestrictedHost( return baseHost.existsSync(path); }, - readFile(path: string, encoding: 'utf-8') { + readFile(path: string, encoding: BufferEncoding) { checkPath(path); return baseHost.readFile(path, encoding); diff --git a/packages/angular/cli/src/commands/mcp/tools/onpush-zoneless-migration/migrate-single-file.ts b/packages/angular/cli/src/commands/mcp/tools/onpush-zoneless-migration/migrate-single-file.ts index afd6316da83d..ebbc254d4d69 100644 --- a/packages/angular/cli/src/commands/mcp/tools/onpush-zoneless-migration/migrate-single-file.ts +++ b/packages/angular/cli/src/commands/mcp/tools/onpush-zoneless-migration/migrate-single-file.ts @@ -9,6 +9,7 @@ import type { RequestHandlerExtra } from '@modelcontextprotocol/sdk/shared/protocol'; import type { ServerNotification, ServerRequest } from '@modelcontextprotocol/sdk/types'; import type { SourceFile } from 'typescript'; +import type { Host } from '../../host'; import { analyzeForUnsupportedZoneUses } from './analyze-for-unsupported-zone-uses'; import { migrateTestFile } from './migrate-test-file'; import { generateZonelessMigrationInstructionsForComponent } from './prompts'; @@ -20,12 +21,13 @@ const supportedStrategies: ReadonlySet = new Set(['OnPush', 'Default', ' export async function migrateSingleFile( sourceFile: SourceFile, + host: Host, extras: RequestHandlerExtra, ): Promise { const testBedSpecifier = await getImportSpecifier(sourceFile, '@angular/core/testing', 'TestBed'); const isTestFile = sourceFile.fileName.endsWith('.spec.ts') || !!testBedSpecifier; if (isTestFile) { - return migrateTestFile(sourceFile); + return migrateTestFile(sourceFile, host); } const unsupportedZoneUseResponse = await analyzeForUnsupportedZoneUses(sourceFile); diff --git a/packages/angular/cli/src/commands/mcp/tools/onpush-zoneless-migration/migrate-single-file_spec.ts b/packages/angular/cli/src/commands/mcp/tools/onpush-zoneless-migration/migrate-single-file_spec.ts index 442dc2c68378..4f6337d8e434 100644 --- a/packages/angular/cli/src/commands/mcp/tools/onpush-zoneless-migration/migrate-single-file_spec.ts +++ b/packages/angular/cli/src/commands/mcp/tools/onpush-zoneless-migration/migrate-single-file_spec.ts @@ -9,6 +9,7 @@ import type { RequestHandlerExtra } from '@modelcontextprotocol/sdk/shared/protocol'; import type { ServerNotification, ServerRequest } from '@modelcontextprotocol/sdk/types'; import ts from 'typescript'; +import { createMockHost } from '../../testing/test-utils'; import { migrateSingleFile } from './migrate-single-file'; const fakeExtras = { @@ -17,11 +18,13 @@ const fakeExtras = { } as unknown as RequestHandlerExtra; describe('migrateSingleFile', () => { + const mockHost = createMockHost(); + it('should identify test files by extension', async () => { const fileName = 'test.spec.ts'; const sourceFile = ts.createSourceFile(fileName, '', ts.ScriptTarget.ESNext, true); - const result = await migrateSingleFile(sourceFile, fakeExtras); + const result = await migrateSingleFile(sourceFile, mockHost, fakeExtras); expect(result?.content[0].text).toContain( 'The test file `test.spec.ts` is not yet configured for zoneless change detection.' + @@ -34,7 +37,7 @@ describe('migrateSingleFile', () => { const content = `import { TestBed } from '@angular/core/testing';`; const sourceFile = ts.createSourceFile(fileName, content, ts.ScriptTarget.ESNext, true); - const result = await migrateSingleFile(sourceFile, fakeExtras); + const result = await migrateSingleFile(sourceFile, mockHost, fakeExtras); expect(result?.content[0].text).toContain( 'The test file `test.ts` is not yet configured for zoneless change detection.' + @@ -59,7 +62,7 @@ describe('migrateSingleFile', () => { `; const sourceFile = ts.createSourceFile(fileName, content, ts.ScriptTarget.ESNext, true); - const result = await migrateSingleFile(sourceFile, fakeExtras); + const result = await migrateSingleFile(sourceFile, mockHost, fakeExtras); expect(result?.content[0].text).toContain( 'The component uses NgZone APIs that are incompatible with zoneless applications', @@ -80,7 +83,7 @@ describe('migrateSingleFile', () => { `; const sourceFile = ts.createSourceFile(fileName, content, ts.ScriptTarget.ESNext, true); - const result = await migrateSingleFile(sourceFile, fakeExtras); + const result = await migrateSingleFile(sourceFile, mockHost, fakeExtras); expect(result).toBeNull(); }); @@ -99,7 +102,7 @@ describe('migrateSingleFile', () => { `; const sourceFile = ts.createSourceFile(fileName, content, ts.ScriptTarget.ESNext, true); - const result = await migrateSingleFile(sourceFile, fakeExtras); + const result = await migrateSingleFile(sourceFile, mockHost, fakeExtras); expect(result).toBeNull(); }); @@ -117,7 +120,7 @@ describe('migrateSingleFile', () => { `; const sourceFile = ts.createSourceFile(fileName, content, ts.ScriptTarget.ESNext, true); - const result = await migrateSingleFile(sourceFile, fakeExtras); + const result = await migrateSingleFile(sourceFile, mockHost, fakeExtras); expect(result?.content[0].text).toContain( 'The component does not currently use a change detection strategy, which means it may rely on Zone.js', @@ -134,7 +137,7 @@ describe('migrateSingleFile', () => { `; const sourceFile = ts.createSourceFile(fileName, content, ts.ScriptTarget.ESNext, true); - const result = await migrateSingleFile(sourceFile, fakeExtras); + const result = await migrateSingleFile(sourceFile, mockHost, fakeExtras); expect(result).toBeNull(); }); @@ -144,7 +147,7 @@ describe('migrateSingleFile', () => { const content = ``; const sourceFile = ts.createSourceFile(fileName, content, ts.ScriptTarget.ESNext, true); - const result = await migrateSingleFile(sourceFile, fakeExtras); + const result = await migrateSingleFile(sourceFile, mockHost, fakeExtras); expect(result).toBeNull(); }); diff --git a/packages/angular/cli/src/commands/mcp/tools/onpush-zoneless-migration/migrate-test-file.ts b/packages/angular/cli/src/commands/mcp/tools/onpush-zoneless-migration/migrate-test-file.ts index e0c62eb23dc9..79b5acbec70e 100644 --- a/packages/angular/cli/src/commands/mcp/tools/onpush-zoneless-migration/migrate-test-file.ts +++ b/packages/angular/cli/src/commands/mcp/tools/onpush-zoneless-migration/migrate-test-file.ts @@ -6,19 +6,21 @@ * found in the LICENSE file at https://angular.dev/license */ -import { existsSync, readFileSync } from 'node:fs'; -import { glob } from 'node:fs/promises'; -import { dirname, join } from 'node:path'; +import { join } from 'node:path'; import type { SourceFile } from 'typescript'; +import { type Host } from '../../host'; import { findAngularJsonDir } from '../../workspace-utils'; import { createFixResponseForZoneTests, createProvideZonelessForTestsSetupPrompt } from './prompts'; import { loadTypescript } from './ts-utils'; import { MigrationResponse } from './types'; -export async function migrateTestFile(sourceFile: SourceFile): Promise { +export async function migrateTestFile( + sourceFile: SourceFile, + host: Host, +): Promise { const ts = await loadTypescript(); // Check if tests use zoneless either by default through `initTestEnvironment` or by explicitly calling `provideZonelessChangeDetection`. - let testsUseZonelessChangeDetection = await searchForGlobalZoneless(sourceFile.fileName); + let testsUseZonelessChangeDetection = await searchForGlobalZoneless(sourceFile.fileName, host); if (!testsUseZonelessChangeDetection) { ts.forEachChild(sourceFile, function visit(node) { if ( @@ -42,8 +44,8 @@ export async function migrateTestFile(sourceFile: SourceFile): Promise { - const angularJsonDir = findAngularJsonDir(startPath); +export async function searchForGlobalZoneless(startPath: string, host: Host): Promise { + const angularJsonDir = findAngularJsonDir(startPath, host); if (!angularJsonDir) { // Cannot determine project root, fallback to original behavior or assume false. // For now, let's assume no global setup if angular.json is not found. @@ -51,9 +53,10 @@ export async function searchForGlobalZoneless(startPath: string): Promise { + const mockHost = createMockHost(); it('should return setup prompt when zoneless is not detected', async () => { const fileName = 'test.spec.ts'; const sourceFile = ts.createSourceFile(fileName, '', ts.ScriptTarget.ESNext, true); - const result = await migrateTestFile(sourceFile); + const result = await migrateTestFile(sourceFile, mockHost); expect(result?.content[0].text).toContain( 'The test file `test.spec.ts` is not yet configured for zoneless change detection.', @@ -33,7 +35,7 @@ describe('migrateTestFile', () => { `; const sourceFile = ts.createSourceFile(fileName, content, ts.ScriptTarget.ESNext, true); - const result = await migrateTestFile(sourceFile); + const result = await migrateTestFile(sourceFile, mockHost); expect(result).toBeNull(); }); @@ -60,7 +62,7 @@ describe('migrateTestFile', () => { `; const sourceFile = ts.createSourceFile(fileName, content, ts.ScriptTarget.ESNext, true); - const result = await migrateTestFile(sourceFile); + const result = await migrateTestFile(sourceFile, mockHost); expect(result?.content[0].text).toContain( 'You must refactor these tests to work in a zoneless environment and remove the `provideZoneChangeDetection` calls.', diff --git a/packages/angular/cli/src/commands/mcp/tools/onpush-zoneless-migration/ts-utils.ts b/packages/angular/cli/src/commands/mcp/tools/onpush-zoneless-migration/ts-utils.ts index 08a3f6f0dcfd..0c79dc31f2e0 100644 --- a/packages/angular/cli/src/commands/mcp/tools/onpush-zoneless-migration/ts-utils.ts +++ b/packages/angular/cli/src/commands/mcp/tools/onpush-zoneless-migration/ts-utils.ts @@ -6,8 +6,8 @@ * found in the LICENSE file at https://angular.dev/license */ -import { readFileSync } from 'node:fs'; import type ts from 'typescript'; +import type { Host } from '../../host'; let typescriptModule: typeof ts; @@ -116,8 +116,8 @@ export function findImportSpecifier( } /** Creates a TypeScript source file from a file path. */ -export async function createSourceFile(file: string) { - const content = readFileSync(file, 'utf8'); +export async function createSourceFile(file: string, host: Host) { + const content = await host.readFile(file, 'utf8'); const ts = await loadTypescript(); diff --git a/packages/angular/cli/src/commands/mcp/tools/onpush-zoneless-migration/zoneless-migration.ts b/packages/angular/cli/src/commands/mcp/tools/onpush-zoneless-migration/zoneless-migration.ts index cc33c648f189..25c12aa83378 100644 --- a/packages/angular/cli/src/commands/mcp/tools/onpush-zoneless-migration/zoneless-migration.ts +++ b/packages/angular/cli/src/commands/mcp/tools/onpush-zoneless-migration/zoneless-migration.ts @@ -8,10 +8,10 @@ import type { RequestHandlerExtra } from '@modelcontextprotocol/sdk/shared/protocol'; import type { ServerNotification, ServerRequest } from '@modelcontextprotocol/sdk/types'; -import { existsSync, statSync } from 'node:fs'; -import { glob } from 'node:fs/promises'; +import { join } from 'node:path'; import type { SourceFile } from 'typescript'; import { z } from 'zod'; +import type { Host } from '../../host'; import { declareTool } from '../tool-registry'; import { analyzeForUnsupportedZoneUses } from './analyze-for-unsupported-zone-uses'; import { migrateSingleFile } from './migrate-single-file'; @@ -49,19 +49,20 @@ change detection (a prerequisite for zoneless applications). ), }, factory: - () => + ({ host }) => ({ fileOrDirPath }, requestHandlerExtra) => - registerZonelessMigrationTool(fileOrDirPath, requestHandlerExtra), + registerZonelessMigrationTool(fileOrDirPath, host, requestHandlerExtra), }); export async function registerZonelessMigrationTool( fileOrDirPath: string, + host: Host, extras: RequestHandlerExtra, ) { let filesWithComponents, componentTestFiles, zoneFiles, categorizationErrors; try { ({ filesWithComponents, componentTestFiles, zoneFiles, categorizationErrors } = - await discoverAndCategorizeFiles(fileOrDirPath, extras)); + await discoverAndCategorizeFiles(fileOrDirPath, host, extras)); } catch (e) { return createResponse( `Error: Could not access the specified path. Please ensure the following path is correct ` + @@ -85,7 +86,7 @@ export async function registerZonelessMigrationTool( : Array.from(filesWithComponents); for (const file of rankedFiles) { - const result = await migrateSingleFile(file, extras); + const result = await migrateSingleFile(file, host, extras); if (result !== null) { return result; } @@ -93,7 +94,7 @@ export async function registerZonelessMigrationTool( } for (const file of componentTestFiles) { - const result = await migrateTestFile(file); + const result = await migrateTestFile(file, host); if (result !== null) { return result; } @@ -112,6 +113,7 @@ export async function registerZonelessMigrationTool( async function discoverAndCategorizeFiles( fileOrDirPath: string, + host: Host, extras: RequestHandlerExtra, ) { const filePaths: string[] = []; @@ -122,19 +124,20 @@ async function discoverAndCategorizeFiles( let isDirectory: boolean; try { - isDirectory = statSync(fileOrDirPath).isDirectory(); + isDirectory = (await host.stat(fileOrDirPath)).isDirectory(); } catch (e) { // Re-throw to be handled by the main function as a user input error throw new Error(`Failed to access path: ${fileOrDirPath}`, { cause: e }); } if (isDirectory) { - for await (const file of glob(`${fileOrDirPath}/**/*.ts`)) { - filePaths.push(file); + const files = host.glob('**/*.ts', { cwd: fileOrDirPath }); + for await (const file of files) { + filePaths.push(join(file.parentPath, file.name)); } } else { filePaths.push(fileOrDirPath); - const maybeTestFile = await getTestFilePath(fileOrDirPath); + const maybeTestFile = await getTestFilePath(fileOrDirPath, host); if (maybeTestFile) { // Eagerly add the test file path for categorization. filePaths.push(maybeTestFile); @@ -147,8 +150,8 @@ async function discoverAndCategorizeFiles( const batch = filesToProcess.splice(0, CONCURRENCY_LIMIT); const results = await Promise.allSettled( batch.map(async (filePath) => { - const sourceFile = await createSourceFile(filePath); - await categorizeFile(sourceFile, extras, { + const sourceFile = await createSourceFile(filePath, host); + await categorizeFile(sourceFile, host, extras, { filesWithComponents, componentTestFiles, zoneFiles, @@ -171,6 +174,7 @@ async function discoverAndCategorizeFiles( async function categorizeFile( sourceFile: SourceFile, + host: Host, extras: RequestHandlerExtra, categorizedFiles: { filesWithComponents: Set; @@ -202,9 +206,9 @@ async function categorizeFile( ); } - const testFilePath = await getTestFilePath(sourceFile.fileName); + const testFilePath = await getTestFilePath(sourceFile.fileName, host); if (testFilePath) { - componentTestFiles.add(await createSourceFile(testFilePath)); + componentTestFiles.add(await createSourceFile(testFilePath, host)); } } else if (zoneSpecifier) { zoneFiles.add(sourceFile); @@ -259,9 +263,9 @@ async function rankComponentFilesForMigration( return componentFiles; // Fallback to original order if the response fails } -async function getTestFilePath(filePath: string): Promise { +async function getTestFilePath(filePath: string, host: Host): Promise { const testFilePath = filePath.replace(/\.ts$/, '.spec.ts'); - if (existsSync(testFilePath)) { + if (host.existsSync(testFilePath)) { return testFilePath; } From 327cc24144ab7e0e36ff3d6e9a67585588f2f69f Mon Sep 17 00:00:00 2001 From: Alan Agius <17563226+alan-agius4@users.noreply.github.com> Date: Wed, 20 May 2026 13:55:45 +0000 Subject: [PATCH 28/34] fix(@angular/build): assert that asset input paths are within workspace root Ensure that asset patterns defined as objects with an 'input' property are validated to be within the workspace root. - In '@angular/build', introduce a shared 'isSubDirectory' utility and apply it to both 'normalizeAssetPatterns' and 'resolveAssets'. - In '@angular-devkit/build-angular', apply similar validation during 'normalizeAssetPatterns'. - Add and update integration and E2E tests to prevent regressions from absolute and relative path traversal attempts. (cherry picked from commit 163a03264b3d9633b1398d1d43b1384bcbd09ed4) --- .../application/tests/options/assets_spec.ts | 24 +++++- .../src/utils/normalize-asset-patterns.ts | 5 ++ packages/angular/build/src/utils/path.ts | 16 +++- .../angular/build/src/utils/resolve-assets.ts | 6 ++ .../browser/tests/options/assets_spec.ts | 22 ++++++ .../src/utils/normalize-asset-patterns.ts | 5 ++ tests/e2e/tests/commands/serve/assets.ts | 74 ++++++------------- 7 files changed, 99 insertions(+), 53 deletions(-) diff --git a/packages/angular/build/src/builders/application/tests/options/assets_spec.ts b/packages/angular/build/src/builders/application/tests/options/assets_spec.ts index 573711afe3b2..afa42cc1804e 100644 --- a/packages/angular/build/src/builders/application/tests/options/assets_spec.ts +++ b/packages/angular/build/src/builders/application/tests/options/assets_spec.ts @@ -367,7 +367,29 @@ describeBuilder(buildApplication, APPLICATION_BUILDER_INFO, (harness) => { const { error } = await harness.executeOnce({ outputLogsOnException: false }); - expect(error?.message).toMatch('asset path must be within the workspace root'); + expect(error?.message).toContain('asset path must be within the workspace root'); + }); + + it('fails if asset input option is outside workspace root (relative)', async () => { + harness.useTarget('build', { + ...BASE_OPTIONS, + assets: [{ glob: '**/*', input: '../outside', output: '.' }], + }); + + const { error } = await harness.executeOnce({ outputLogsOnException: false }); + + expect(error?.message).toContain('asset path must be within the workspace root'); + }); + + it('fails if asset input option is outside workspace root (absolute)', async () => { + harness.useTarget('build', { + ...BASE_OPTIONS, + assets: [{ glob: '**/*', input: '/tmp/outside-workspace', output: '.' }], + }); + + const { error } = await harness.executeOnce({ outputLogsOnException: false }); + + expect(error?.message).toContain('asset path must be within the workspace root'); }); it('fails if output option is not within project output path', async () => { diff --git a/packages/angular/build/src/utils/normalize-asset-patterns.ts b/packages/angular/build/src/utils/normalize-asset-patterns.ts index b935f1d84588..d97b6e605fa4 100644 --- a/packages/angular/build/src/utils/normalize-asset-patterns.ts +++ b/packages/angular/build/src/utils/normalize-asset-patterns.ts @@ -10,6 +10,7 @@ import assert from 'node:assert'; import { statSync } from 'node:fs'; import * as path from 'node:path'; import { AssetPattern, AssetPatternClass } from '../builders/application/schema'; +import { isSubDirectory } from './path'; export function normalizeAssetPatterns( assetPatterns: AssetPattern[], @@ -70,6 +71,10 @@ export function normalizeAssetPatterns( assetPattern = { glob, input, output }; } else { + if (!isSubDirectory(workspaceRoot, assetPattern.input)) { + throw new Error(`The ${assetPattern.input} asset path must be within the workspace root.`); + } + assetPattern.output = path.join('.', assetPattern.output ?? ''); } diff --git a/packages/angular/build/src/utils/path.ts b/packages/angular/build/src/utils/path.ts index 036dcb23502e..eafef4ee9f2b 100644 --- a/packages/angular/build/src/utils/path.ts +++ b/packages/angular/build/src/utils/path.ts @@ -6,7 +6,7 @@ * found in the LICENSE file at https://angular.dev/license */ -import { posix } from 'node:path'; +import { normalize, posix, resolve } from 'node:path'; import { platform } from 'node:process'; const WINDOWS_PATH_SEPERATOR_REGEXP = /\\/g; @@ -35,3 +35,17 @@ const WINDOWS_PATH_SEPERATOR_REGEXP = /\\/g; export function toPosixPath(path: string): string { return platform === 'win32' ? path.replace(WINDOWS_PATH_SEPERATOR_REGEXP, posix.sep) : path; } + +/** + * Determines if a path is a subdirectory or file within a parent directory. + * + * @param parent - The parent directory path. + * @param child - The child path to check. + * @returns `true` if the child path is within the parent directory, `false` otherwise. + */ +export function isSubDirectory(parent: string, child: string): boolean { + const normalizedParent = normalize(parent); + const resolvedChild = resolve(parent, child); + + return resolvedChild.startsWith(normalizedParent); +} diff --git a/packages/angular/build/src/utils/resolve-assets.ts b/packages/angular/build/src/utils/resolve-assets.ts index e98879e58de7..71b1c0e4768b 100644 --- a/packages/angular/build/src/utils/resolve-assets.ts +++ b/packages/angular/build/src/utils/resolve-assets.ts @@ -8,6 +8,7 @@ import path from 'node:path'; import { glob } from 'tinyglobby'; +import { isSubDirectory } from './path'; export async function resolveAssets( entries: { @@ -25,7 +26,12 @@ export async function resolveAssets( const outputFiles: { source: string; destination: string }[] = []; for (const entry of entries) { + if (!isSubDirectory(root, entry.input)) { + throw new Error(`The ${entry.input} asset path must be within the workspace root.`); + } + const cwd = path.resolve(root, entry.input); + const files = await glob(entry.glob, { cwd, dot: true, diff --git a/packages/angular_devkit/build_angular/src/builders/browser/tests/options/assets_spec.ts b/packages/angular_devkit/build_angular/src/builders/browser/tests/options/assets_spec.ts index b8752e7c275e..c7ac266cf036 100644 --- a/packages/angular_devkit/build_angular/src/builders/browser/tests/options/assets_spec.ts +++ b/packages/angular_devkit/build_angular/src/builders/browser/tests/options/assets_spec.ts @@ -359,6 +359,28 @@ describeBuilder(buildWebpackBrowser, BROWSER_BUILDER_INFO, (harness) => { harness.expectFile('dist/subdirectory/test.svg').content.toBe(''); }); + it('fails if asset input option is outside workspace root (relative)', async () => { + harness.useTarget('build', { + ...BASE_OPTIONS, + assets: [{ glob: '**/*', input: '../outside', output: '.' }], + }); + + const { result } = await harness.executeOnce(); + + expect(result?.error).toMatch('asset path must be within the workspace root'); + }); + + it('fails if asset input option is outside workspace root (absolute)', async () => { + harness.useTarget('build', { + ...BASE_OPTIONS, + assets: [{ glob: '**/*', input: '/tmp/outside-workspace', output: '.' }], + }); + + const { result } = await harness.executeOnce(); + + expect(result?.error).toMatch('asset path must be within the workspace root'); + }); + it('fails if output option is not within project output path', async () => { await harness.writeFile('test.svg', ''); diff --git a/packages/angular_devkit/build_angular/src/utils/normalize-asset-patterns.ts b/packages/angular_devkit/build_angular/src/utils/normalize-asset-patterns.ts index 7f18080e05f5..20e97e1d5162 100644 --- a/packages/angular_devkit/build_angular/src/utils/normalize-asset-patterns.ts +++ b/packages/angular_devkit/build_angular/src/utils/normalize-asset-patterns.ts @@ -68,6 +68,11 @@ export function normalizeAssetPatterns( assetPattern = { glob, input, output }; } else { + const resolvedInput = path.resolve(workspaceRoot, assetPattern.input); + if (!resolvedInput.startsWith(workspaceRoot)) { + throw new Error(`The ${assetPattern.input} asset path must be within the workspace root.`); + } + assetPattern.output = path.join('.', assetPattern.output ?? ''); } diff --git a/tests/e2e/tests/commands/serve/assets.ts b/tests/e2e/tests/commands/serve/assets.ts index 83fcb42aa8f2..dba1abea37cb 100644 --- a/tests/e2e/tests/commands/serve/assets.ts +++ b/tests/e2e/tests/commands/serve/assets.ts @@ -1,59 +1,31 @@ import assert from 'node:assert'; -import { randomUUID } from 'node:crypto'; -import { mkdir, rm, writeFile } from 'node:fs/promises'; -import { ngServe, updateJsonFile } from '../../../utils/project'; +import { ngServe } from '../../../utils/project'; import { getGlobalVariable } from '../../../utils/env'; export default async function () { - const outsideDirectoryName = `../outside-${randomUUID()}`; + const port = await ngServe(); - await updateJsonFile('angular.json', (json) => { - // Ensure assets located outside the workspace root work with the dev server - json.projects['test-project'].architect.build.options.assets.push({ - 'input': outsideDirectoryName, - 'glob': '**/*', - 'output': './outside', - }); - }); - - await mkdir(outsideDirectoryName); - try { - await writeFile(`${outsideDirectoryName}/some-asset.xyz`, 'XYZ'); - - const port = await ngServe(); - - let response = await fetch(`http://localhost:${port}/favicon.ico`); - assert.strictEqual(response.status, 200, 'favicon.ico response should be ok'); - - response = await fetch(`http://localhost:${port}/outside/some-asset.xyz`); - assert.strictEqual(response.status, 200, 'outside/some-asset.xyz response should be ok'); - assert.strictEqual(await response.text(), 'XYZ', 'outside/some-asset.xyz content is wrong'); + let response = await fetch(`http://localhost:${port}/favicon.ico`); + assert.strictEqual(response.status, 200, 'favicon.ico response should be ok'); - // A non-existent HTML file request with accept header should fallback to the index HTML - response = await fetch(`http://localhost:${port}/does-not-exist.html`, { - headers: { accept: 'text/html' }, - }); - assert.strictEqual( - response.status, - 200, - 'non-existent file response should fallback and be ok', - ); - assert.match( - await response.text(), - / Date: Wed, 20 May 2026 11:11:00 -0400 Subject: [PATCH 29/34] refactor(@angular/cli): migrate build and test MCP tools into specialized target strategy handlers Migrate build and unit-test MCP tools from standalone tools into specialized target strategy handlers in the tools/run-target subdirectory. Restrict BuildTargetStrategy to known official builders, parsing execution logs to extract output paths and extending payload metadata. Restrict UnitTestTargetStrategy to known test runner builders, auto-injecting non-interactive one-off watch mode flags and automatically configuring headless options for Karma jasmine suites. Handle all other targets and builders via the GenericTargetStrategy. (cherry picked from commit 5e8714ee83b8ff660f34de6abd4b1f0bb4b0860c) --- .../tools/run-target/build-target-strategy.ts | 63 +++++++ .../run-target/build-target-strategy_spec.ts | 93 ++++++++++ .../run-target/generic-target-strategy.ts | 33 +--- .../tools/run-target/options-serializer.ts | 47 +++++ .../run-target/options-serializer_spec.ts | 49 +++++ .../mcp/tools/run-target/run-target.ts | 10 +- .../commands/mcp/tools/run-target/strategy.ts | 2 +- .../commands/mcp/tools/run-target/types.ts | 7 +- .../tools/run-target/unit-test-strategy.ts | 66 +++++++ .../run-target/unit-test-strategy_spec.ts | 174 ++++++++++++++++++ tests/e2e/tests/mcp/run-target.ts | 26 ++- 11 files changed, 540 insertions(+), 30 deletions(-) create mode 100644 packages/angular/cli/src/commands/mcp/tools/run-target/build-target-strategy.ts create mode 100644 packages/angular/cli/src/commands/mcp/tools/run-target/build-target-strategy_spec.ts create mode 100644 packages/angular/cli/src/commands/mcp/tools/run-target/options-serializer.ts create mode 100644 packages/angular/cli/src/commands/mcp/tools/run-target/options-serializer_spec.ts create mode 100644 packages/angular/cli/src/commands/mcp/tools/run-target/unit-test-strategy.ts create mode 100644 packages/angular/cli/src/commands/mcp/tools/run-target/unit-test-strategy_spec.ts 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 new file mode 100644 index 000000000000..1fbd8f83e47a --- /dev/null +++ b/packages/angular/cli/src/commands/mcp/tools/run-target/build-target-strategy.ts @@ -0,0 +1,63 @@ +/** + * @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 { getCommandErrorLogs } from '../../utils'; +import type { McpToolContext } from '../tool-registry'; +import { serializeOptions } from './options-serializer'; +import type { TargetStrategy } from './strategy'; +import type { RunTargetOutput, StrategyExecutionContext } from './types'; + +export class BuildTargetStrategy implements TargetStrategy { + canHandle(targetName: string, builder?: string): boolean { + return ( + targetName === 'build' && + (builder === '@angular-devkit/build-angular:application' || + builder === '@angular-devkit/build-angular:browser' || + builder === '@angular/build:application' || + builder === '@angular-devkit/build-angular:ng-packagr') + ); + } + + async execute( + input: StrategyExecutionContext, + context: McpToolContext, + ): Promise { + const args = ['build', input.projectName]; + if (input.configuration) { + args.push('-c', input.configuration); + } + + args.push(...serializeOptions(input.options)); + + let status: 'success' | 'failure' = 'success'; + let logs: string[]; + + try { + const result = await context.host.executeNgCommand(args, { cwd: input.workspacePath }); + logs = result.logs; + } catch (e) { + status = 'failure'; + logs = getCommandErrorLogs(e); + } + + let outputPath: string | undefined; + for (const line of logs) { + const match = line.match(/Output location: (.*)/); + if (match) { + outputPath = match[1].trim(); + break; + } + } + + return { + status, + logs, + extensions: outputPath ? { outputPath } : undefined, + }; + } +} diff --git a/packages/angular/cli/src/commands/mcp/tools/run-target/build-target-strategy_spec.ts b/packages/angular/cli/src/commands/mcp/tools/run-target/build-target-strategy_spec.ts new file mode 100644 index 000000000000..86909310cd35 --- /dev/null +++ b/packages/angular/cli/src/commands/mcp/tools/run-target/build-target-strategy_spec.ts @@ -0,0 +1,93 @@ +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.dev/license + */ + +import type { MockHost } from '../../testing/mock-host'; +import { + type MockMcpToolContext, + addProjectToWorkspace, + createMockContext, +} from '../../testing/test-utils'; +import { BuildTargetStrategy } from './build-target-strategy'; + +describe('BuildTargetStrategy', () => { + let mockHost: MockHost; + let mockContext: MockMcpToolContext; + let strategy: BuildTargetStrategy; + + beforeEach(() => { + const mock = createMockContext(); + mockHost = mock.host; + mockContext = mock.context; + addProjectToWorkspace(mock.projects, 'my-app'); + strategy = new BuildTargetStrategy(); + }); + + describe('canHandle', () => { + it('should match build target with official builders', () => { + expect(strategy.canHandle('build', '@angular-devkit/build-angular:application')).toBeTrue(); + expect(strategy.canHandle('build', '@angular-devkit/build-angular:browser')).toBeTrue(); + expect(strategy.canHandle('build', '@angular/build:application')).toBeTrue(); + expect(strategy.canHandle('build', '@angular-devkit/build-angular:ng-packagr')).toBeTrue(); + }); + + it('should not match build target with custom builders', () => { + expect(strategy.canHandle('build', 'custom-builder')).toBeFalse(); + expect(strategy.canHandle('build', undefined)).toBeFalse(); + }); + + it('should not match other targets', () => { + expect(strategy.canHandle('test', '@angular-devkit/build-angular:browser')).toBeFalse(); + }); + }); + + describe('execute', () => { + it('should spawn ng build and parse outputPath successfully', async () => { + const buildLogs = ['Build successful!', 'Output location: dist/my-app']; + mockHost.executeNgCommand.and.resolveTo({ logs: buildLogs }); + + const result = await strategy.execute( + { + workspacePath: '/test', + projectName: 'my-app', + targetName: 'build', + targetDefinition: { + builder: '@angular/build:application', + }, + }, + mockContext, + ); + + expect(mockHost.executeNgCommand).toHaveBeenCalledWith(['build', 'my-app'], { + cwd: '/test', + }); + expect(result.status).toBe('success'); + expect(result.logs).toEqual(buildLogs); + expect(result.extensions).toEqual({ outputPath: 'dist/my-app' }); + }); + + it('should return undefined outputPath if parsing matches nothing', async () => { + const buildLogs = ['Build successful!']; + mockHost.executeNgCommand.and.resolveTo({ logs: buildLogs }); + + const result = await strategy.execute( + { + workspacePath: '/test', + projectName: 'my-app', + targetName: 'build', + targetDefinition: { + builder: '@angular/build:application', + }, + }, + mockContext, + ); + + expect(result.status).toBe('success'); + expect(result.extensions).toBeUndefined(); + }); + }); +}); 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 079c30fc0793..f1d66b5597e7 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 @@ -8,6 +8,7 @@ import { getCommandErrorLogs } from '../../utils'; import type { McpToolContext } from '../tool-registry'; +import { serializeOptions } from './options-serializer'; import type { TargetStrategy } from './strategy'; import type { RunTargetOutput, StrategyExecutionContext } from './types'; @@ -22,7 +23,7 @@ const BUILT_IN_COMMANDS = new Set([ ]); export class GenericTargetStrategy implements TargetStrategy { - canHandle(target: string, builder?: string): boolean { + canHandle(targetName: string, builder?: string): boolean { return true; // Universal fallback strategy } @@ -30,7 +31,7 @@ export class GenericTargetStrategy implements TargetStrategy { input: StrategyExecutionContext, context: McpToolContext, ): Promise { - if (input.target === 'serve' || input.options?.['watch'] === true) { + if (input.targetName === 'serve' || input.options?.['watch'] === true) { throw new Error( `Watch mode execution (serve target or watch option) is not yet supported by 'run_target'. ` + `Please use the legacy 'devserver.start' / 'devserver.wait_for_build' tools instead.`, @@ -38,10 +39,10 @@ export class GenericTargetStrategy implements TargetStrategy { } const args: string[] = []; - if (BUILT_IN_COMMANDS.has(input.target)) { - args.push(input.target, input.projectName); + if (BUILT_IN_COMMANDS.has(input.targetName)) { + args.push(input.targetName, input.projectName); } else { - args.push('run', `${input.projectName}:${input.target}`); + args.push('run', `${input.projectName}:${input.targetName}`); } if (input.configuration) { @@ -49,32 +50,14 @@ export class GenericTargetStrategy implements TargetStrategy { } let options = input.options; - if (input.target === 'test') { + if (input.targetName === 'test') { options = { ...options, watch: false, }; } - if (options) { - for (const [key, value] of Object.entries(options)) { - if (!/^[a-zA-Z0-9-_]+$/.test(key)) { - throw new Error( - `Invalid option key: '${key}'. Option keys must be alphanumeric, hyphens, or underscores.`, - ); - } - - if (typeof value === 'boolean') { - args.push(value ? `--${key}` : `--no-${key}`); - } else if (Array.isArray(value)) { - for (const item of value) { - args.push(`--${key}=${item}`); - } - } else if (value !== null && value !== undefined) { - args.push(`--${key}=${value}`); - } - } - } + args.push(...serializeOptions(options)); let status: 'success' | 'failure' = 'success'; let logs: string[]; diff --git a/packages/angular/cli/src/commands/mcp/tools/run-target/options-serializer.ts b/packages/angular/cli/src/commands/mcp/tools/run-target/options-serializer.ts new file mode 100644 index 000000000000..b5f5a7414b97 --- /dev/null +++ b/packages/angular/cli/src/commands/mcp/tools/run-target/options-serializer.ts @@ -0,0 +1,47 @@ +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.dev/license + */ + +import type { OptionValue } from './types'; + +/** + * Serializes a Zod-validated options record into standard CLI argument flags. + * Enforces strict regex validation on option keys to prevent flag manipulation. + */ +export function serializeOptions( + options: Record | undefined, + excludeKeys: Set = new Set(), +): string[] { + const args: string[] = []; + if (!options) { + return args; + } + + for (const [key, value] of Object.entries(options)) { + if (excludeKeys.has(key)) { + continue; + } + + if (!/^[a-zA-Z0-9-_]+$/.test(key)) { + throw new Error( + `Invalid option key: '${key}'. Option keys must be alphanumeric, hyphens, or underscores.`, + ); + } + + if (typeof value === 'boolean') { + args.push(value ? `--${key}` : `--no-${key}`); + } else if (Array.isArray(value)) { + for (const item of value) { + args.push(`--${key}=${item}`); + } + } else if (value !== null && value !== undefined) { + args.push(`--${key}=${value}`); + } + } + + return args; +} diff --git a/packages/angular/cli/src/commands/mcp/tools/run-target/options-serializer_spec.ts b/packages/angular/cli/src/commands/mcp/tools/run-target/options-serializer_spec.ts new file mode 100644 index 000000000000..197a3855799a --- /dev/null +++ b/packages/angular/cli/src/commands/mcp/tools/run-target/options-serializer_spec.ts @@ -0,0 +1,49 @@ +/** + * @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 { serializeOptions } from './options-serializer'; + +describe('run-target options-serializer', () => { + describe('serializeOptions', () => { + it('should return empty array if options are undefined', () => { + expect(serializeOptions(undefined)).toEqual([]); + }); + + it('should serialize boolean options correctly', () => { + expect(serializeOptions({ fix: true, quiet: false })).toEqual(['--fix', '--no-quiet']); + }); + + it('should serialize string and number options correctly', () => { + expect(serializeOptions({ browsers: 'Chrome', timeout: 5000 })).toEqual([ + '--browsers=Chrome', + '--timeout=5000', + ]); + }); + + it('should serialize array options as multiple occurrences of the flag', () => { + expect(serializeOptions({ include: ['a', 'b'] })).toEqual(['--include=a', '--include=b']); + }); + + it('should ignore excluded keys successfully', () => { + expect(serializeOptions({ watch: true, fix: true }, new Set(['watch']))).toEqual(['--fix']); + }); + + it('should ignore null and undefined values successfully', () => { + // eslint-disable-next-line @typescript-eslint/no-explicit-any + expect(serializeOptions({ empty: null, missing: undefined, fix: true } as any)).toEqual([ + '--fix', + ]); + }); + + it('should throw an error if key is malformed (whitespace or special characters)', () => { + expect(() => serializeOptions({ 'fix --danger': true })).toThrowError( + /Invalid option key: 'fix --danger'/, + ); + }); + }); +}); diff --git a/packages/angular/cli/src/commands/mcp/tools/run-target/run-target.ts b/packages/angular/cli/src/commands/mcp/tools/run-target/run-target.ts index 0dacdaecb209..8b6f62d8fcba 100644 --- a/packages/angular/cli/src/commands/mcp/tools/run-target/run-target.ts +++ b/packages/angular/cli/src/commands/mcp/tools/run-target/run-target.ts @@ -9,12 +9,14 @@ import { createStructuredContentOutput } from '../../utils'; import { resolveWorkspaceAndProject } from '../../workspace-utils'; import { type McpToolContext, declareTool } from '../tool-registry'; +import { BuildTargetStrategy } from './build-target-strategy'; import { GenericTargetStrategy } from './generic-target-strategy'; import type { TargetStrategy } from './strategy'; import { type RunTargetInput, runTargetInputSchema, runTargetOutputSchema } from './types'; +import { UnitTestTargetStrategy } from './unit-test-strategy'; const FALLBACK_STRATEGY = new GenericTargetStrategy(); -const STRATEGIES: TargetStrategy[] = []; +const STRATEGIES: TargetStrategy[] = [new BuildTargetStrategy(), new UnitTestTargetStrategy()]; export async function runTarget(input: RunTargetInput, context: McpToolContext) { const { workspace, workspacePath, projectName } = await resolveWorkspaceAndProject({ @@ -34,7 +36,8 @@ export async function runTarget(input: RunTargetInput, context: McpToolContext) { workspacePath, projectName, - target: input.target, + targetName: input.target, + targetDefinition, configuration: input.configuration, options: input.options, }, @@ -59,6 +62,9 @@ This is the single, unified interface for executing all project tasks natively. * Mandatory Discovery: You MUST discover available project targets by calling 'list_projects' first. +* Headless Testing: For official builders, the test target automatically runs in headless mode + and disables watch mode to guarantee clean execution. +* Output Paths: For official builders, successful builds return the build directory in 'outputPath' under the extensions metadata. * Watch mode (serve target or watch options) is NOT yet supported in this version of run_target. You MUST use the legacy 'devserver.*' tools for background server lifecycles. `, diff --git a/packages/angular/cli/src/commands/mcp/tools/run-target/strategy.ts b/packages/angular/cli/src/commands/mcp/tools/run-target/strategy.ts index 8c149a174f93..d257366e3b0f 100644 --- a/packages/angular/cli/src/commands/mcp/tools/run-target/strategy.ts +++ b/packages/angular/cli/src/commands/mcp/tools/run-target/strategy.ts @@ -11,7 +11,7 @@ import type { RunTargetOutput, StrategyExecutionContext } from './types'; export interface TargetStrategy { /** Whether this strategy is responsible for handling the given target/builder */ - canHandle(target: string, builder?: string): boolean; + canHandle(targetName: string, builder?: string): boolean; /** Executes the target using this strategy */ execute(input: StrategyExecutionContext, context: McpToolContext): Promise; diff --git a/packages/angular/cli/src/commands/mcp/tools/run-target/types.ts b/packages/angular/cli/src/commands/mcp/tools/run-target/types.ts index aa0d3a0cf7ca..aa65f6551e24 100644 --- a/packages/angular/cli/src/commands/mcp/tools/run-target/types.ts +++ b/packages/angular/cli/src/commands/mcp/tools/run-target/types.ts @@ -49,7 +49,12 @@ export type RunTargetOutput = z.infer; export interface StrategyExecutionContext { workspacePath: string; projectName: string; - target: string; + targetName: string; + targetDefinition?: { + builder: string; + options?: Record; + configurations?: Record | undefined>; + }; configuration?: string; options?: Record; } 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 new file mode 100644 index 000000000000..77ca5797e71c --- /dev/null +++ b/packages/angular/cli/src/commands/mcp/tools/run-target/unit-test-strategy.ts @@ -0,0 +1,66 @@ +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.dev/license + */ + +import { getCommandErrorLogs } from '../../utils'; +import type { McpToolContext } from '../tool-registry'; +import { serializeOptions } from './options-serializer'; +import type { TargetStrategy } from './strategy'; +import type { RunTargetOutput, StrategyExecutionContext } from './types'; + +export class UnitTestTargetStrategy implements TargetStrategy { + canHandle(targetName: string, builder?: string): boolean { + return ( + targetName === 'test' && + (builder === '@angular-devkit/build-angular:karma' || + builder === '@angular/build:karma' || + builder === '@angular/build:unit-test') + ); + } + + async execute( + input: StrategyExecutionContext, + context: McpToolContext, + ): Promise { + const args = ['test', input.projectName]; + if (input.configuration) { + args.push('-c', input.configuration); + } + + const builder = input.targetDefinition?.builder; + + if (builder === '@angular/build:unit-test') { + const isKarma = input.targetDefinition?.options?.['runner'] === 'karma'; + if (isKarma) { + args.push('--browsers', 'ChromeHeadless'); + } else { + args.push('--headless', 'true'); + } + } else { + // Default Karma-based builders require explicit ChromeHeadless + args.push('--browsers', 'ChromeHeadless'); + } + + // Force non-interactive one-off execution + args.push('--watch', 'false'); + + args.push(...serializeOptions(input.options, new Set(['watch']))); + + let status: 'success' | 'failure' = 'success'; + let logs: string[]; + + try { + const result = await context.host.executeNgCommand(args, { cwd: input.workspacePath }); + logs = result.logs; + } catch (e) { + status = 'failure'; + logs = getCommandErrorLogs(e); + } + + return { status, logs }; + } +} 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 new file mode 100644 index 000000000000..f1467f0002c9 --- /dev/null +++ b/packages/angular/cli/src/commands/mcp/tools/run-target/unit-test-strategy_spec.ts @@ -0,0 +1,174 @@ +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.dev/license + */ + +import type { MockHost } from '../../testing/mock-host'; +import { + type MockMcpToolContext, + addProjectToWorkspace, + createMockContext, +} from '../../testing/test-utils'; +import { UnitTestTargetStrategy } from './unit-test-strategy'; + +describe('UnitTestTargetStrategy', () => { + let mockHost: MockHost; + let mockContext: MockMcpToolContext; + let strategy: UnitTestTargetStrategy; + + beforeEach(() => { + const mock = createMockContext(); + mockHost = mock.host; + mockContext = mock.context; + addProjectToWorkspace(mock.projects, 'my-app'); + strategy = new UnitTestTargetStrategy(); + }); + + describe('canHandle', () => { + it('should match test target with official builders', () => { + expect(strategy.canHandle('test', '@angular-devkit/build-angular:karma')).toBeTrue(); + expect(strategy.canHandle('test', '@angular/build:karma')).toBeTrue(); + expect(strategy.canHandle('test', '@angular/build:unit-test')).toBeTrue(); + }); + + it('should not match test target with custom builders', () => { + expect(strategy.canHandle('test', 'custom-test-builder')).toBeFalse(); + expect(strategy.canHandle('test', undefined)).toBeFalse(); + }); + + it('should not match other targets', () => { + expect(strategy.canHandle('build', '@angular-devkit/build-angular:karma')).toBeFalse(); + }); + }); + + describe('execute', () => { + it('should append configuration arguments if provided', async () => { + mockContext.workspace.projects.get('my-app')?.targets.set('test', { + builder: '@angular-devkit/build-angular:karma', + }); + mockHost.executeNgCommand.and.resolveTo({ logs: ['Karma success'] }); + + await strategy.execute( + { + workspacePath: '/test', + projectName: 'my-app', + targetName: 'test', + configuration: 'ci', + targetDefinition: { + builder: '@angular-devkit/build-angular:karma', + }, + }, + mockContext, + ); + + expect(mockHost.executeNgCommand).toHaveBeenCalledWith( + ['test', 'my-app', '-c', 'ci', '--browsers', 'ChromeHeadless', '--watch', 'false'], + { cwd: '/test' }, + ); + }); + + it('should auto-inject no-watch and --browsers ChromeHeadless for Karma devkit builder', async () => { + mockContext.workspace.projects.get('my-app')?.targets.set('test', { + builder: '@angular-devkit/build-angular:karma', + }); + mockHost.executeNgCommand.and.resolveTo({ logs: ['Karma success'] }); + + await strategy.execute( + { + workspacePath: '/test', + projectName: 'my-app', + targetName: 'test', + targetDefinition: { + builder: '@angular-devkit/build-angular:karma', + }, + }, + mockContext, + ); + + expect(mockHost.executeNgCommand).toHaveBeenCalledWith( + ['test', 'my-app', '--browsers', 'ChromeHeadless', '--watch', 'false'], + { cwd: '/test' }, + ); + }); + + it('should auto-inject no-watch and --browsers ChromeHeadless for Karma build builder', async () => { + mockContext.workspace.projects.get('my-app')?.targets.set('test', { + builder: '@angular/build:karma', + }); + mockHost.executeNgCommand.and.resolveTo({ logs: ['Karma success'] }); + + await strategy.execute( + { + workspacePath: '/test', + projectName: 'my-app', + targetName: 'test', + targetDefinition: { + builder: '@angular/build:karma', + }, + }, + mockContext, + ); + + expect(mockHost.executeNgCommand).toHaveBeenCalledWith( + ['test', 'my-app', '--browsers', 'ChromeHeadless', '--watch', 'false'], + { cwd: '/test' }, + ); + }); + + it('should inject --headless true for modern unit-test builder with non-karma runner', async () => { + mockContext.workspace.projects.get('my-app')?.targets.set('test', { + builder: '@angular/build:unit-test', + options: { runner: 'vitest' }, + }); + mockHost.executeNgCommand.and.resolveTo({ logs: ['Vite success'] }); + + await strategy.execute( + { + workspacePath: '/test', + projectName: 'my-app', + targetName: 'test', + targetDefinition: { + builder: '@angular/build:unit-test', + options: { runner: 'vitest' }, + }, + }, + mockContext, + ); + + expect(mockHost.executeNgCommand).toHaveBeenCalledWith( + ['test', 'my-app', '--headless', 'true', '--watch', 'false'], + { cwd: '/test' }, + ); + }); + + it('should override watch options passed explicitly by LLM', async () => { + mockContext.workspace.projects.get('my-app')?.targets.set('test', { + builder: '@angular/build:unit-test', + options: { runner: 'vitest' }, + }); + mockHost.executeNgCommand.and.resolveTo({ logs: ['Vite success'] }); + + await strategy.execute( + { + workspacePath: '/test', + projectName: 'my-app', + targetName: 'test', + targetDefinition: { + builder: '@angular/build:unit-test', + options: { runner: 'vitest' }, + }, + options: { watch: true, browsers: 'Firefox' }, + }, + mockContext, + ); + + expect(mockHost.executeNgCommand).toHaveBeenCalledWith( + ['test', 'my-app', '--headless', 'true', '--watch', 'false', '--browsers=Firefox'], + { cwd: '/test' }, + ); + }); + }); +}); diff --git a/tests/e2e/tests/mcp/run-target.ts b/tests/e2e/tests/mcp/run-target.ts index 2e0aa280fa86..936f3a9fc7f6 100644 --- a/tests/e2e/tests/mcp/run-target.ts +++ b/tests/e2e/tests/mcp/run-target.ts @@ -1,3 +1,4 @@ +import { getGlobalVariable } from '../../utils/env'; import { exec, ProcessOutput, silentNpm } from '../../utils/process'; import assert from 'node:assert/strict'; @@ -53,8 +54,31 @@ export default async function () { 'target=build', ); assert.match(stdoutCall, /"status":\s*"success"/); + // Webpack-based browser builder does not print output paths to stdout logs. + // Only esbuild-based application builders output 'Output location: ...' and support outputPath extraction. + const esbuild = getGlobalVariable('argv')['esbuild']; + if (esbuild) { + assert.match(stdoutCall, /"outputPath":\s*"dist\/.+"/); + } else { + assert.doesNotMatch(stdoutCall, /"outputPath"/); + } + + // 4. Call run_target with test target (only for esbuild/Vite test runner, as webpack-based Karma fails on this bazel CI headless runner) + if (esbuild) { + const { stdout: stdoutTestCall } = await runInspector( + '-E', + 'run_target', + '--method', + 'tools/call', + '--tool-name', + 'run_target', + '--tool-arg', + 'target=test', + ); + assert.match(stdoutTestCall, /"status":\s*"success"/); + } } finally { - // 4. Clean up global installation + // 5. Clean up global installation await silentNpm('uninstall', '-g', MCP_INSPECTOR_PACKAGE_NAME); } } From 50b81d3ea5a88101233c7e5cc74aa62243fcb8af Mon Sep 17 00:00:00 2001 From: Charles Lyding <19598772+clydin@users.noreply.github.com> Date: Thu, 21 May 2026 09:55:30 -0400 Subject: [PATCH 30/34] refactor(@angular/cli): remove granular build, test, and e2e MCP tools Remove build, test, and e2e standalone tool declarations from the MCP server registry. Now that the unified run_target Strategy Dispatcher facade is fully operational and verified, these granular tools are redundant. Removing them reduces system prompt context footprint by over 1,000 tokens, eliminates semantic clashing, and increases tool selection accuracy for client LLMs. (cherry picked from commit 377540d6fe9d6cdef2e037ee225c4ef442150889) --- .../cli/src/commands/mcp/mcp-server.ts | 11 +- .../cli/src/commands/mcp/tools/build.ts | 105 --------------- .../cli/src/commands/mcp/tools/build_spec.ts | 108 --------------- .../angular/cli/src/commands/mcp/tools/e2e.ts | 103 -------------- .../cli/src/commands/mcp/tools/e2e_spec.ts | 104 --------------- .../cli/src/commands/mcp/tools/test.ts | 108 --------------- .../cli/src/commands/mcp/tools/test_spec.ts | 126 ------------------ 7 files changed, 1 insertion(+), 664 deletions(-) delete mode 100644 packages/angular/cli/src/commands/mcp/tools/build.ts delete mode 100644 packages/angular/cli/src/commands/mcp/tools/build_spec.ts delete mode 100644 packages/angular/cli/src/commands/mcp/tools/e2e.ts delete mode 100644 packages/angular/cli/src/commands/mcp/tools/e2e_spec.ts delete mode 100644 packages/angular/cli/src/commands/mcp/tools/test.ts delete mode 100644 packages/angular/cli/src/commands/mcp/tools/test_spec.ts diff --git a/packages/angular/cli/src/commands/mcp/mcp-server.ts b/packages/angular/cli/src/commands/mcp/mcp-server.ts index 4697f3bff421..43320217db6d 100644 --- a/packages/angular/cli/src/commands/mcp/mcp-server.ts +++ b/packages/angular/cli/src/commands/mcp/mcp-server.ts @@ -17,16 +17,13 @@ import { LocalWorkspaceHost, createRootRestrictedHost } from './host'; import { registerInstructionsResource } from './resources/instructions'; import { AI_TUTOR_TOOL } from './tools/ai-tutor'; import { BEST_PRACTICES_TOOL } from './tools/best-practices'; -import { BUILD_TOOL } from './tools/build'; import { DEVSERVER_START_TOOL } from './tools/devserver/devserver-start'; import { DEVSERVER_STOP_TOOL } from './tools/devserver/devserver-stop'; import { DEVSERVER_WAIT_FOR_BUILD_TOOL } from './tools/devserver/devserver-wait-for-build'; import { DOC_SEARCH_TOOL } from './tools/doc-search'; -import { E2E_TOOL } from './tools/e2e'; import { ZONELESS_MIGRATION_TOOL } from './tools/onpush-zoneless-migration/zoneless-migration'; import { LIST_PROJECTS_TOOL } from './tools/projects'; import { RUN_TARGET_TOOL } from './tools/run-target/run-target'; -import { TEST_TOOL } from './tools/test'; import { type AnyMcpToolDeclaration, registerTools } from './tools/tool-registry'; /** @@ -50,13 +47,7 @@ const STABLE_TOOLS = [ * The set of tools that are available but not enabled by default. * These tools are considered experimental and may have limitations. */ -export const EXPERIMENTAL_TOOLS = [ - BUILD_TOOL, - E2E_TOOL, - TEST_TOOL, - RUN_TARGET_TOOL, - ...DEVSERVER_TOOLS, -] as const; +export const EXPERIMENTAL_TOOLS = [RUN_TARGET_TOOL, ...DEVSERVER_TOOLS] as const; /** * Experimental tools that are grouped together under a single name. diff --git a/packages/angular/cli/src/commands/mcp/tools/build.ts b/packages/angular/cli/src/commands/mcp/tools/build.ts deleted file mode 100644 index fbf2729bf8bf..000000000000 --- a/packages/angular/cli/src/commands/mcp/tools/build.ts +++ /dev/null @@ -1,105 +0,0 @@ -/** - * @license - * Copyright Google LLC All Rights Reserved. - * - * Use of this source code is governed by an MIT-style license that can be - * found in the LICENSE file at https://angular.dev/license - */ - -import { z } from 'zod'; -import { workspaceAndProjectOptions } from '../shared-options'; -import { createStructuredContentOutput, getCommandErrorLogs } from '../utils'; -import { resolveWorkspaceAndProject } from '../workspace-utils'; -import { type McpToolContext, type McpToolDeclaration, declareTool } from './tool-registry'; - -const DEFAULT_CONFIGURATION = 'development'; - -const buildStatusSchema = z.enum(['success', 'failure']); -type BuildStatus = z.infer; - -const buildToolInputSchema = z.object({ - ...workspaceAndProjectOptions, - configuration: z - .string() - .optional() - .describe('Which build configuration to use. Defaults to "development".'), -}); - -export type BuildToolInput = z.infer; - -const buildToolOutputSchema = z.object({ - status: buildStatusSchema.describe('Build status.'), - logs: z.array(z.string()).optional().describe('Output logs from `ng build`.'), - path: z.string().optional().describe('The output location for the build, if successful.'), -}); - -export type BuildToolOutput = z.infer; - -export async function runBuild(input: BuildToolInput, context: McpToolContext) { - const { workspacePath, projectName } = await resolveWorkspaceAndProject({ - host: context.host, - server: context.server, - workspacePathInput: input.workspace, - projectNameInput: input.project, - mcpWorkspace: context.workspace, - }); - - // Build "ng"'s command line. - const args = ['build', projectName, '-c', input.configuration ?? DEFAULT_CONFIGURATION]; - - let status: BuildStatus = 'success'; - let logs: string[]; - let outputPath: string | undefined; - - try { - logs = (await context.host.executeNgCommand(args, { cwd: workspacePath })).logs; - } catch (e) { - status = 'failure'; - logs = getCommandErrorLogs(e); - } - - for (const line of logs) { - const match = line.match(/Output location: (.*)/); - if (match) { - outputPath = match[1].trim(); - break; - } - } - - const structuredContent: BuildToolOutput = { - status, - logs, - path: outputPath, - }; - - return createStructuredContentOutput(structuredContent); -} - -export const BUILD_TOOL: McpToolDeclaration< - typeof buildToolInputSchema.shape, - typeof buildToolOutputSchema.shape -> = declareTool({ - name: 'build', - title: 'Build Tool', - description: ` - -Perform a one-off, non-watched build using "ng build". Use this tool whenever the user wants to build an Angular project; this is similar to -"ng build", but the tool is smarter about using the right configuration and collecting the output logs. - - -* Building an Angular project and getting build logs back. - - -* This tool runs "ng build" so it expects to run within an Angular workspace. -* If you want a watched build which updates as files are changed, use "devserver.start" instead, which also serves the app. -* You can provide a project instead of building the root one. The "list_projects" MCP tool could be used to obtain the list of projects. -* This tool defaults to a development environment while a regular "ng build" defaults to a production environment. An unexpected build - failure might suggest the project is not configured for the requested environment. - -`, - isReadOnly: false, - isLocalOnly: true, - inputSchema: buildToolInputSchema.shape, - outputSchema: buildToolOutputSchema.shape, - factory: (context) => (input) => runBuild(input, context), -}); diff --git a/packages/angular/cli/src/commands/mcp/tools/build_spec.ts b/packages/angular/cli/src/commands/mcp/tools/build_spec.ts deleted file mode 100644 index 3fd7318c554b..000000000000 --- a/packages/angular/cli/src/commands/mcp/tools/build_spec.ts +++ /dev/null @@ -1,108 +0,0 @@ -/** - * @license - * Copyright Google LLC All Rights Reserved. - * - * Use of this source code is governed by an MIT-style license that can be - * found in the LICENSE file at https://angular.dev/license - */ - -import { CommandError } from '../host'; -import type { MockHost } from '../testing/mock-host'; -import { - MockMcpToolContext, - addProjectToWorkspace, - createMockContext, -} from '../testing/test-utils'; -import { runBuild } from './build'; - -describe('Build Tool', () => { - let mockHost: MockHost; - let mockContext: MockMcpToolContext; - - beforeEach(() => { - const mock = createMockContext(); - mockHost = mock.host; - mockContext = mock.context; - addProjectToWorkspace(mock.projects, 'my-app'); - }); - - it('should construct the command correctly with default configuration', async () => { - mockContext.workspace.extensions['defaultProject'] = 'my-app'; - await runBuild({}, mockContext); - expect(mockHost.executeNgCommand).toHaveBeenCalledWith( - ['build', 'my-app', '-c', 'development'], - { cwd: '/test' }, - ); - }); - - it('should construct the command correctly with a specified project', async () => { - addProjectToWorkspace(mockContext.workspace.projects, 'another-app'); - await runBuild({ project: 'another-app' }, mockContext); - expect(mockHost.executeNgCommand).toHaveBeenCalledWith( - ['build', 'another-app', '-c', 'development'], - { cwd: '/test' }, - ); - }); - - it('should construct the command correctly for a custom configuration', async () => { - mockContext.workspace.extensions['defaultProject'] = 'my-app'; - await runBuild({ configuration: 'myconfig' }, mockContext); - expect(mockHost.executeNgCommand).toHaveBeenCalledWith(['build', 'my-app', '-c', 'myconfig'], { - cwd: '/test', - }); - }); - - it('should handle a successful build and extract the output path and logs', async () => { - const buildLogs = [ - 'Build successful!', - 'Some other log lines...', - 'some warning', - 'Output location: dist/my-app', - ]; - mockHost.executeNgCommand.and.resolveTo({ - logs: buildLogs, - }); - - const { structuredContent } = await runBuild({ project: 'my-app' }, mockContext); - - expect(mockHost.executeNgCommand).toHaveBeenCalledWith( - ['build', 'my-app', '-c', 'development'], - { cwd: '/test' }, - ); - expect(structuredContent.status).toBe('success'); - expect(structuredContent.logs).toEqual(buildLogs); - expect(structuredContent.path).toBe('dist/my-app'); - }); - - it('should handle a failed build and capture logs', async () => { - addProjectToWorkspace(mockContext.workspace.projects, 'my-failed-app'); - const buildLogs = ['Some output before the crash.', 'Error: Something went wrong!']; - const error = new CommandError('Build failed', buildLogs, 1); - mockHost.executeNgCommand.and.rejectWith(error); - - const { structuredContent } = await runBuild( - { project: 'my-failed-app', configuration: 'production' }, - mockContext, - ); - - expect(mockHost.executeNgCommand).toHaveBeenCalledWith( - ['build', 'my-failed-app', '-c', 'production'], - { cwd: '/test' }, - ); - expect(structuredContent.status).toBe('failure'); - expect(structuredContent.logs).toEqual([...buildLogs, 'Build failed']); - expect(structuredContent.path).toBeUndefined(); - }); - - it('should handle builds where the output path is not found in logs', async () => { - const buildLogs = ["Some logs that don't match any output path."]; - mockHost.executeNgCommand.and.resolveTo({ logs: buildLogs }); - - mockContext.workspace.extensions['defaultProject'] = 'my-app'; - const { structuredContent } = await runBuild({}, mockContext); - - expect(structuredContent.status).toBe('success'); - expect(structuredContent.logs).toEqual(buildLogs); - expect(structuredContent.path).toBeUndefined(); - }); -}); diff --git a/packages/angular/cli/src/commands/mcp/tools/e2e.ts b/packages/angular/cli/src/commands/mcp/tools/e2e.ts deleted file mode 100644 index 726308b12c87..000000000000 --- a/packages/angular/cli/src/commands/mcp/tools/e2e.ts +++ /dev/null @@ -1,103 +0,0 @@ -/** - * @license - * Copyright Google LLC All Rights Reserved. - * - * Use of this source code is governed by an MIT-style license that can be - * found in the LICENSE file at https://angular.dev/license - */ - -import { z } from 'zod'; -import { type Host } from '../host'; -import { workspaceAndProjectOptions } from '../shared-options'; -import { createStructuredContentOutput, getCommandErrorLogs } from '../utils'; -import { resolveWorkspaceAndProject } from '../workspace-utils'; -import { type McpToolContext, type McpToolDeclaration, declareTool } from './tool-registry'; - -const e2eStatusSchema = z.enum(['success', 'failure']); -type E2eStatus = z.infer; - -const e2eToolInputSchema = z.object({ - ...workspaceAndProjectOptions, -}); - -export type E2eToolInput = z.infer; - -const e2eToolOutputSchema = z.object({ - status: e2eStatusSchema.describe('E2E execution status.'), - logs: z.array(z.string()).optional().describe('Output logs from `ng e2e`.'), -}); - -export type E2eToolOutput = z.infer; - -export async function runE2e(input: E2eToolInput, host: Host, context: McpToolContext) { - const { workspacePath, workspace, projectName } = await resolveWorkspaceAndProject({ - host, - server: context.server, - workspacePathInput: input.workspace, - projectNameInput: input.project, - mcpWorkspace: context.workspace, - }); - - if (workspace && projectName) { - // Verify that if a project can be found, it has an e2e testing already set up. - const targetProject = workspace.projects.get(projectName); - if (targetProject) { - if (!targetProject.targets.has('e2e')) { - return createStructuredContentOutput({ - status: 'failure', - logs: [ - `No e2e target is defined for project '${projectName}'. Please set up e2e testing` + - ' first by calling `ng e2e` in an interactive console.' + - ' See https://angular.dev/tools/cli/end-to-end.', - ], - }); - } - } - } - - // Build "ng"'s command line. - const args = ['e2e', projectName]; - - let status: E2eStatus = 'success'; - let logs: string[]; - - try { - logs = (await host.executeNgCommand(args, { cwd: workspacePath })).logs; - } catch (e) { - status = 'failure'; - logs = getCommandErrorLogs(e); - } - - const structuredContent: E2eToolOutput = { - status, - logs, - }; - - return createStructuredContentOutput(structuredContent); -} - -export const E2E_TOOL: McpToolDeclaration< - typeof e2eToolInputSchema.shape, - typeof e2eToolOutputSchema.shape -> = declareTool({ - name: 'e2e', - title: 'E2E Tool', - description: ` - -Perform an end-to-end test with ng e2e. - - -* When the user requests running end-to-end tests for the project. -* When verifying changes that cross unit boundaries, such as changes to both client and server, changes to shared data types, etc. - - -* This tool uses "ng e2e". -* Important: this relies on e2e tests being already configured for this project. It will error out if no "e2e" target is defined. - -`, - isReadOnly: false, - isLocalOnly: true, - inputSchema: e2eToolInputSchema.shape, - outputSchema: e2eToolOutputSchema.shape, - factory: (context) => (input) => runE2e(input, context.host, context), -}); diff --git a/packages/angular/cli/src/commands/mcp/tools/e2e_spec.ts b/packages/angular/cli/src/commands/mcp/tools/e2e_spec.ts deleted file mode 100644 index 318dd41aea52..000000000000 --- a/packages/angular/cli/src/commands/mcp/tools/e2e_spec.ts +++ /dev/null @@ -1,104 +0,0 @@ -/** - * @license - * Copyright Google LLC All Rights Reserved. - * - * Use of this source code is governed by an MIT-style license that can be - * found in the LICENSE file at https://angular.dev/license - */ - -import { workspaces } from '@angular-devkit/core'; -import { CommandError } from '../host'; -import type { MockHost } from '../testing/mock-host'; -import { - MockMcpToolContext, - addProjectToWorkspace, - createMockContext, -} from '../testing/test-utils'; -import { runE2e } from './e2e'; - -describe('E2E Tool', () => { - let mockHost: MockHost; - let mockContext: MockMcpToolContext; - let mockProjects: workspaces.ProjectDefinitionCollection; - - beforeEach(() => { - const mock = createMockContext(); - mockHost = mock.host; - mockContext = mock.context; - mockProjects = mock.projects; - }); - - it('should construct the command correctly with defaults', async () => { - addProjectToWorkspace(mockProjects, 'my-app', { e2e: { builder: 'mock-builder' } }); - mockContext.workspace.extensions['defaultProject'] = 'my-app'; - - await runE2e({}, mockHost, mockContext); - expect(mockHost.executeNgCommand).toHaveBeenCalledWith(['e2e', 'my-app'], { cwd: '/test' }); - }); - - it('should construct the command correctly with a specified project', async () => { - addProjectToWorkspace(mockProjects, 'my-app', { e2e: { builder: 'mock-builder' } }); - - await runE2e({ project: 'my-app' }, mockHost, mockContext); - expect(mockHost.executeNgCommand).toHaveBeenCalledWith(['e2e', 'my-app'], { cwd: '/test' }); - }); - - it('should error if project does not have e2e target', async () => { - addProjectToWorkspace(mockProjects, 'my-app', { build: { builder: 'mock-builder' } }); - - const { structuredContent } = await runE2e({ project: 'my-app' }, mockHost, mockContext); - - expect(structuredContent.status).toBe('failure'); - expect(structuredContent.logs?.[0]).toContain("No e2e target is defined for project 'my-app'"); - expect(mockHost.executeNgCommand).not.toHaveBeenCalled(); - }); - - it('should error if no project was specified and the default project does not have e2e target', async () => { - mockContext.workspace.extensions['defaultProject'] = 'my-app'; - addProjectToWorkspace(mockProjects, 'my-app', { build: { builder: 'mock-builder' } }); - - const { structuredContent } = await runE2e({}, mockHost, mockContext); - - expect(structuredContent.status).toBe('failure'); - expect(structuredContent.logs?.[0]).toContain("No e2e target is defined for project 'my-app'"); - expect(mockHost.executeNgCommand).not.toHaveBeenCalled(); - }); - - it('should handle a successful e2e run with a specified project', async () => { - addProjectToWorkspace(mockProjects, 'my-app', { e2e: { builder: 'mock-builder' } }); - const e2eLogs = ['E2E passed for my-app']; - mockHost.executeNgCommand.and.resolveTo({ logs: e2eLogs }); - - const { structuredContent } = await runE2e({ project: 'my-app' }, mockHost, mockContext); - - expect(structuredContent.status).toBe('success'); - expect(structuredContent.logs).toEqual(e2eLogs); - expect(mockHost.executeNgCommand).toHaveBeenCalledWith(['e2e', 'my-app'], { cwd: '/test' }); - }); - - it('should handle a successful e2e run with the default project', async () => { - mockContext.workspace.extensions['defaultProject'] = 'default-app'; - addProjectToWorkspace(mockProjects, 'default-app', { e2e: { builder: 'mock-builder' } }); - const e2eLogs = ['E2E passed for default-app']; - mockHost.executeNgCommand.and.resolveTo({ logs: e2eLogs }); - - const { structuredContent } = await runE2e({}, mockHost, mockContext); - - expect(structuredContent.status).toBe('success'); - expect(structuredContent.logs).toEqual(e2eLogs); - expect(mockHost.executeNgCommand).toHaveBeenCalledWith(['e2e', 'default-app'], { - cwd: '/test', - }); - }); - - it('should handle a failed e2e run', async () => { - addProjectToWorkspace(mockProjects, 'my-app', { e2e: { builder: 'mock-builder' } }); - const e2eLogs = ['E2E failed']; - mockHost.executeNgCommand.and.rejectWith(new CommandError('Failed', e2eLogs, 1)); - - const { structuredContent } = await runE2e({ project: 'my-app' }, mockHost, mockContext); - - expect(structuredContent.status).toBe('failure'); - expect(structuredContent.logs).toEqual([...e2eLogs, 'Failed']); - }); -}); diff --git a/packages/angular/cli/src/commands/mcp/tools/test.ts b/packages/angular/cli/src/commands/mcp/tools/test.ts deleted file mode 100644 index 72093c268a1b..000000000000 --- a/packages/angular/cli/src/commands/mcp/tools/test.ts +++ /dev/null @@ -1,108 +0,0 @@ -/** - * @license - * Copyright Google LLC All Rights Reserved. - * - * Use of this source code is governed by an MIT-style license that can be - * found in the LICENSE file at https://angular.dev/license - */ - -import { z } from 'zod'; -import { workspaceAndProjectOptions } from '../shared-options'; -import { createStructuredContentOutput, getCommandErrorLogs } from '../utils'; -import { resolveWorkspaceAndProject } from '../workspace-utils'; -import { type McpToolContext, type McpToolDeclaration, declareTool } from './tool-registry'; - -const testStatusSchema = z.enum(['success', 'failure']); -type TestStatus = z.infer; - -const testToolInputSchema = z.object({ - ...workspaceAndProjectOptions, - filter: z.string().optional().describe('Filter the executed tests by spec name.'), -}); - -export type TestToolInput = z.infer; - -const testToolOutputSchema = z.object({ - status: testStatusSchema.describe('Test execution status.'), - logs: z.array(z.string()).optional().describe('Output logs from `ng test`.'), -}); - -export type TestToolOutput = z.infer; - -function shouldUseHeadlessOption( - testTarget: import('@angular-devkit/core').workspaces.TargetDefinition | undefined, -): boolean { - return ( - testTarget?.builder === '@angular/build:unit-test' && testTarget.options?.['runner'] !== 'karma' - ); -} - -export async function runTest(input: TestToolInput, context: McpToolContext) { - const { workspace, workspacePath, projectName } = await resolveWorkspaceAndProject({ - host: context.host, - workspacePathInput: input.workspace, - projectNameInput: input.project, - mcpWorkspace: context.workspace, - }); - - // Build "ng"'s command line. - const args = ['test', projectName]; - - if (shouldUseHeadlessOption(workspace.projects.get(projectName)?.targets.get('test'))) { - args.push('--headless', 'true'); - } else { - // Karma-based projects need an explicit headless browser for non-interactive MCP execution. - args.push('--browsers', 'ChromeHeadless'); - } - - args.push('--watch', 'false'); - - if (input.filter) { - args.push('--filter', input.filter); - } - - let status: TestStatus = 'success'; - let logs: string[]; - - try { - logs = (await context.host.executeNgCommand(args, { cwd: workspacePath })).logs; - } catch (e) { - status = 'failure'; - logs = getCommandErrorLogs(e); - } - - const structuredContent: TestToolOutput = { - status, - logs, - }; - - return createStructuredContentOutput(structuredContent); -} - -export const TEST_TOOL: McpToolDeclaration< - typeof testToolInputSchema.shape, - typeof testToolOutputSchema.shape -> = declareTool({ - name: 'test', - title: 'Test Tool', - description: ` - -Perform a one-off, non-watched unit test execution with ng test. - - -* Running unit tests for the project. -* Verifying code changes with tests. - - -* This tool uses "ng test". -* It supports filtering by spec name if the underlying builder supports it (e.g., 'unit-test' builder). -* For the "@angular/build:unit-test" builder with Vitest, this tool requests headless execution via "--headless true". -* For Karma-based projects, this tool forces headless Chrome with "--browsers ChromeHeadless", so Chrome must be installed. - -`, - isReadOnly: false, - isLocalOnly: true, - inputSchema: testToolInputSchema.shape, - outputSchema: testToolOutputSchema.shape, - factory: (context) => (input) => runTest(input, context), -}); diff --git a/packages/angular/cli/src/commands/mcp/tools/test_spec.ts b/packages/angular/cli/src/commands/mcp/tools/test_spec.ts deleted file mode 100644 index a56307dcf3cb..000000000000 --- a/packages/angular/cli/src/commands/mcp/tools/test_spec.ts +++ /dev/null @@ -1,126 +0,0 @@ -/** - * @license - * Copyright Google LLC All Rights Reserved. - * - * Use of this source code is governed by an MIT-style license that can be - * found in the LICENSE file at https://angular.dev/license - */ - -import { CommandError } from '../host'; -import type { MockHost } from '../testing/mock-host'; -import { - MockMcpToolContext, - addProjectToWorkspace, - createMockContext, -} from '../testing/test-utils'; -import { runTest } from './test'; - -describe('Test Tool', () => { - let mockHost: MockHost; - let mockContext: MockMcpToolContext; - - beforeEach(() => { - const mock = createMockContext(); - mockHost = mock.host; - mockContext = mock.context; - addProjectToWorkspace(mock.projects, 'my-app'); - }); - - it('should construct the command correctly with defaults', async () => { - mockContext.workspace.extensions['defaultProject'] = 'my-app'; - await runTest({}, mockContext); - expect(mockHost.executeNgCommand).toHaveBeenCalledWith( - ['test', 'my-app', '--browsers', 'ChromeHeadless', '--watch', 'false'], - { cwd: '/test' }, - ); - }); - - it('should construct the command correctly with a specified project', async () => { - addProjectToWorkspace(mockContext.workspace.projects, 'my-lib'); - await runTest({ project: 'my-lib' }, mockContext); - expect(mockHost.executeNgCommand).toHaveBeenCalledWith( - ['test', 'my-lib', '--browsers', 'ChromeHeadless', '--watch', 'false'], - { cwd: '/test' }, - ); - }); - - it('should construct the command correctly with filter', async () => { - mockContext.workspace.extensions['defaultProject'] = 'my-app'; - await runTest({ filter: 'AppComponent' }, mockContext); - expect(mockHost.executeNgCommand).toHaveBeenCalledWith( - [ - 'test', - 'my-app', - '--browsers', - 'ChromeHeadless', - '--watch', - 'false', - '--filter', - 'AppComponent', - ], - { cwd: '/test' }, - ); - }); - - it('should handle a successful test run and capture logs', async () => { - const testLogs = ['Executed 10 of 10 SUCCESS', 'Total: 10 success']; - mockHost.executeNgCommand.and.resolveTo({ - logs: testLogs, - }); - - const { structuredContent } = await runTest({ project: 'my-app' }, mockContext); - - expect(mockHost.executeNgCommand).toHaveBeenCalledWith( - ['test', 'my-app', '--browsers', 'ChromeHeadless', '--watch', 'false'], - { cwd: '/test' }, - ); - expect(structuredContent.status).toBe('success'); - expect(structuredContent.logs).toEqual(testLogs); - }); - - it('should handle a failed test run and capture logs', async () => { - addProjectToWorkspace(mockContext.workspace.projects, 'my-failed-app'); - const testLogs = ['Executed 10 of 10 FAILED', 'Error: Some test failed']; - const error = new CommandError('Test failed', testLogs, 1); - mockHost.executeNgCommand.and.rejectWith(error); - - const { structuredContent } = await runTest({ project: 'my-failed-app' }, mockContext); - - expect(structuredContent.status).toBe('failure'); - expect(structuredContent.logs).toEqual([...testLogs, 'Test failed']); - }); - - it('should use the headless option for the unit-test builder when using Vitest', async () => { - addProjectToWorkspace(mockContext.workspace.projects, 'my-vitest-app', { - test: { - builder: '@angular/build:unit-test', - options: { - runner: 'vitest', - }, - }, - }); - - await runTest({ project: 'my-vitest-app' }, mockContext); - - expect(mockHost.executeNgCommand).toHaveBeenCalledWith( - ['test', 'my-vitest-app', '--headless', 'true', '--watch', 'false'], - { cwd: '/test' }, - ); - }); - - it('should use the headless option for the unit-test builder when the runner is omitted', async () => { - addProjectToWorkspace(mockContext.workspace.projects, 'my-default-vitest-app', { - test: { - builder: '@angular/build:unit-test', - options: {}, - }, - }); - - await runTest({ project: 'my-default-vitest-app' }, mockContext); - - expect(mockHost.executeNgCommand).toHaveBeenCalledWith( - ['test', 'my-default-vitest-app', '--headless', 'true', '--watch', 'false'], - { cwd: '/test' }, - ); - }); -}); From 40dfeb10ec2debc6ef4443625232acbb0bd61568 Mon Sep 17 00:00:00 2001 From: Alan Agius <17563226+alan-agius4@users.noreply.github.com> Date: Thu, 21 May 2026 14:23:02 +0000 Subject: [PATCH 31/34] build: update minimum Node.js 24 version to 24.15.0 Updates the minimum supported version of Node.js 24 from 24.13.1 to 24.15.0. This includes upgrading the dev toolchain configured for rules_nodejs in MODULE.bazel to Node.js v24.15.0, along with the corresponding archive checksums across all targeted platforms (Darwin, Linux, and Windows). Also updates target version range constraints in constants.bzl, package.json, and packages/angular/cli/bin/ng.js. The MODULE.bazel.lock has been updated by running module resolution. (cherry picked from commit 7649c66f96cdb60bce17a8e87da08475f1b89579) --- MODULE.bazel | 16 +- MODULE.bazel.lock | 562 ++++++++++++++++----------------- constants.bzl | 2 +- package.json | 2 +- packages/angular/cli/bin/ng.js | 2 +- 5 files changed, 292 insertions(+), 292 deletions(-) diff --git a/MODULE.bazel b/MODULE.bazel index d2e43b14158b..e3c5f51ae226 100644 --- a/MODULE.bazel +++ b/MODULE.bazel @@ -81,15 +81,15 @@ node_dev.toolchain( node_dev.toolchain( name = "node24", node_repositories = { - "24.13.1-darwin_arm64": ("node-v24.13.1-darwin-arm64.tar.gz", "node-v24.13.1-darwin-arm64", "8c039d59f2fec6195e4281ad5b0d02b9a940897b4df7b849c6fb48be6787bba6"), - "24.13.1-darwin_amd64": ("node-v24.13.1-darwin-x64.tar.gz", "node-v24.13.1-darwin-x64", "527f0578d9812e7dfa225121bda0b1546a6a0e4b5f556295fc8299c272de5fbf"), - "24.13.1-linux_arm64": ("node-v24.13.1-linux-arm64.tar.xz", "node-v24.13.1-linux-arm64", "c827d3d301e2eed1a51f36d0116b71b9e3d9e3b728f081615270ea40faac34c1"), - "24.13.1-linux_ppc64le": ("node-v24.13.1-linux-ppc64le.tar.xz", "node-v24.13.1-linux-ppc64le", "fb712a08d317655dbf776c90f60ac2105109d802e33811df6c9ed33d12f801c6"), - "24.13.1-linux_s390x": ("node-v24.13.1-linux-s390x.tar.xz", "node-v24.13.1-linux-s390x", "8e2c0d9b5545c3db22623e8cb8d6f0c28fcd470f29d32dbeabf9432dda289de2"), - "24.13.1-linux_amd64": ("node-v24.13.1-linux-x64.tar.xz", "node-v24.13.1-linux-x64", "30215f90ea3cd04dfbc06e762c021393fa173a1d392974298bbc871a8e461089"), - "24.13.1-windows_amd64": ("node-v24.13.1-win-x64.zip", "node-v24.13.1-win-x64", "fba577c4bb87df04d54dd87bbdaa5a2272f1f99a2acbf9152e1a91b8b5f0b279"), + "24.15.0-darwin_arm64": ("node-v24.15.0-darwin-arm64.tar.gz", "node-v24.15.0-darwin-arm64", "372331b969779ab5d15b949884fc6eaf88d5afe87bde8ba881d6400b9100ffc4"), + "24.15.0-darwin_amd64": ("node-v24.15.0-darwin-x64.tar.gz", "node-v24.15.0-darwin-x64", "ffd5ee293467927f3ee731a553eb88fd1f48cf74eebc2d74a6babe4af228673b"), + "24.15.0-linux_arm64": ("node-v24.15.0-linux-arm64.tar.xz", "node-v24.15.0-linux-arm64", "f3d5a797b5d210ce8e2cb265544c8e482eaedcb8aa409a8b46da7e8595d0dda0"), + "24.15.0-linux_ppc64le": ("node-v24.15.0-linux-ppc64le.tar.xz", "node-v24.15.0-linux-ppc64le", "6a6560a27bd2817013c28c3d917bfe9eebf26bbd4b1d88475190f216cc411fbb"), + "24.15.0-linux_s390x": ("node-v24.15.0-linux-s390x.tar.xz", "node-v24.15.0-linux-s390x", "940d4cbfadf736b34519630a05d144c09f8a5aca291a802f2f559ee1562f6f24"), + "24.15.0-linux_amd64": ("node-v24.15.0-linux-x64.tar.xz", "node-v24.15.0-linux-x64", "472655581fb851559730c48763e0c9d3bc25975c59d518003fc0849d3e4ba0f6"), + "24.15.0-windows_amd64": ("node-v24.15.0-win-x64.zip", "node-v24.15.0-win-x64", "cc5149eabd53779ce1e7bdc5401643622d0c7e6800ade18928a767e940bb0e62"), }, - node_version = "24.13.1", + node_version = "24.15.0", ) # Node.js 26 diff --git a/MODULE.bazel.lock b/MODULE.bazel.lock index 956dbb1eb953..c883d7f2af32 100644 --- a/MODULE.bazel.lock +++ b/MODULE.bazel.lock @@ -951,7 +951,7 @@ "@@rules_nodejs+//nodejs:extensions.bzl%node": { "general": { "bzlTransitiveDigest": "oZFClfRhTTwsYzpxVPkOpOt/r0+OzEfEV37au0jFZ0s=", - "usagesDigest": "wY/NydQ13j0FjFSFmSj1BtgjFqRh5ZrTIiy23+RgdSg=", + "usagesDigest": "6TUfLpcb/YUt4PLW/4xn3gzv5hT9PzmDfmiHSzGYLc4=", "recordedFileInputs": {}, "recordedDirentsInputs": {}, "envVariables": {}, @@ -1781,46 +1781,46 @@ "attributes": { "node_download_auth": {}, "node_repositories": { - "24.13.1-darwin_arm64": [ - "node-v24.13.1-darwin-arm64.tar.gz", - "node-v24.13.1-darwin-arm64", - "8c039d59f2fec6195e4281ad5b0d02b9a940897b4df7b849c6fb48be6787bba6" - ], - "24.13.1-darwin_amd64": [ - "node-v24.13.1-darwin-x64.tar.gz", - "node-v24.13.1-darwin-x64", - "527f0578d9812e7dfa225121bda0b1546a6a0e4b5f556295fc8299c272de5fbf" - ], - "24.13.1-linux_arm64": [ - "node-v24.13.1-linux-arm64.tar.xz", - "node-v24.13.1-linux-arm64", - "c827d3d301e2eed1a51f36d0116b71b9e3d9e3b728f081615270ea40faac34c1" - ], - "24.13.1-linux_ppc64le": [ - "node-v24.13.1-linux-ppc64le.tar.xz", - "node-v24.13.1-linux-ppc64le", - "fb712a08d317655dbf776c90f60ac2105109d802e33811df6c9ed33d12f801c6" - ], - "24.13.1-linux_s390x": [ - "node-v24.13.1-linux-s390x.tar.xz", - "node-v24.13.1-linux-s390x", - "8e2c0d9b5545c3db22623e8cb8d6f0c28fcd470f29d32dbeabf9432dda289de2" - ], - "24.13.1-linux_amd64": [ - "node-v24.13.1-linux-x64.tar.xz", - "node-v24.13.1-linux-x64", - "30215f90ea3cd04dfbc06e762c021393fa173a1d392974298bbc871a8e461089" - ], - "24.13.1-windows_amd64": [ - "node-v24.13.1-win-x64.zip", - "node-v24.13.1-win-x64", - "fba577c4bb87df04d54dd87bbdaa5a2272f1f99a2acbf9152e1a91b8b5f0b279" + "24.15.0-darwin_arm64": [ + "node-v24.15.0-darwin-arm64.tar.gz", + "node-v24.15.0-darwin-arm64", + "372331b969779ab5d15b949884fc6eaf88d5afe87bde8ba881d6400b9100ffc4" + ], + "24.15.0-darwin_amd64": [ + "node-v24.15.0-darwin-x64.tar.gz", + "node-v24.15.0-darwin-x64", + "ffd5ee293467927f3ee731a553eb88fd1f48cf74eebc2d74a6babe4af228673b" + ], + "24.15.0-linux_arm64": [ + "node-v24.15.0-linux-arm64.tar.xz", + "node-v24.15.0-linux-arm64", + "f3d5a797b5d210ce8e2cb265544c8e482eaedcb8aa409a8b46da7e8595d0dda0" + ], + "24.15.0-linux_ppc64le": [ + "node-v24.15.0-linux-ppc64le.tar.xz", + "node-v24.15.0-linux-ppc64le", + "6a6560a27bd2817013c28c3d917bfe9eebf26bbd4b1d88475190f216cc411fbb" + ], + "24.15.0-linux_s390x": [ + "node-v24.15.0-linux-s390x.tar.xz", + "node-v24.15.0-linux-s390x", + "940d4cbfadf736b34519630a05d144c09f8a5aca291a802f2f559ee1562f6f24" + ], + "24.15.0-linux_amd64": [ + "node-v24.15.0-linux-x64.tar.xz", + "node-v24.15.0-linux-x64", + "472655581fb851559730c48763e0c9d3bc25975c59d518003fc0849d3e4ba0f6" + ], + "24.15.0-windows_amd64": [ + "node-v24.15.0-win-x64.zip", + "node-v24.15.0-win-x64", + "cc5149eabd53779ce1e7bdc5401643622d0c7e6800ade18928a767e940bb0e62" ] }, "node_urls": [ "https://nodejs.org/dist/v{version}/{filename}" ], - "node_version": "24.13.1", + "node_version": "24.15.0", "include_headers": false, "platform": "linux_amd64" } @@ -1830,46 +1830,46 @@ "attributes": { "node_download_auth": {}, "node_repositories": { - "24.13.1-darwin_arm64": [ - "node-v24.13.1-darwin-arm64.tar.gz", - "node-v24.13.1-darwin-arm64", - "8c039d59f2fec6195e4281ad5b0d02b9a940897b4df7b849c6fb48be6787bba6" - ], - "24.13.1-darwin_amd64": [ - "node-v24.13.1-darwin-x64.tar.gz", - "node-v24.13.1-darwin-x64", - "527f0578d9812e7dfa225121bda0b1546a6a0e4b5f556295fc8299c272de5fbf" - ], - "24.13.1-linux_arm64": [ - "node-v24.13.1-linux-arm64.tar.xz", - "node-v24.13.1-linux-arm64", - "c827d3d301e2eed1a51f36d0116b71b9e3d9e3b728f081615270ea40faac34c1" - ], - "24.13.1-linux_ppc64le": [ - "node-v24.13.1-linux-ppc64le.tar.xz", - "node-v24.13.1-linux-ppc64le", - "fb712a08d317655dbf776c90f60ac2105109d802e33811df6c9ed33d12f801c6" - ], - "24.13.1-linux_s390x": [ - "node-v24.13.1-linux-s390x.tar.xz", - "node-v24.13.1-linux-s390x", - "8e2c0d9b5545c3db22623e8cb8d6f0c28fcd470f29d32dbeabf9432dda289de2" - ], - "24.13.1-linux_amd64": [ - "node-v24.13.1-linux-x64.tar.xz", - "node-v24.13.1-linux-x64", - "30215f90ea3cd04dfbc06e762c021393fa173a1d392974298bbc871a8e461089" - ], - "24.13.1-windows_amd64": [ - "node-v24.13.1-win-x64.zip", - "node-v24.13.1-win-x64", - "fba577c4bb87df04d54dd87bbdaa5a2272f1f99a2acbf9152e1a91b8b5f0b279" + "24.15.0-darwin_arm64": [ + "node-v24.15.0-darwin-arm64.tar.gz", + "node-v24.15.0-darwin-arm64", + "372331b969779ab5d15b949884fc6eaf88d5afe87bde8ba881d6400b9100ffc4" + ], + "24.15.0-darwin_amd64": [ + "node-v24.15.0-darwin-x64.tar.gz", + "node-v24.15.0-darwin-x64", + "ffd5ee293467927f3ee731a553eb88fd1f48cf74eebc2d74a6babe4af228673b" + ], + "24.15.0-linux_arm64": [ + "node-v24.15.0-linux-arm64.tar.xz", + "node-v24.15.0-linux-arm64", + "f3d5a797b5d210ce8e2cb265544c8e482eaedcb8aa409a8b46da7e8595d0dda0" + ], + "24.15.0-linux_ppc64le": [ + "node-v24.15.0-linux-ppc64le.tar.xz", + "node-v24.15.0-linux-ppc64le", + "6a6560a27bd2817013c28c3d917bfe9eebf26bbd4b1d88475190f216cc411fbb" + ], + "24.15.0-linux_s390x": [ + "node-v24.15.0-linux-s390x.tar.xz", + "node-v24.15.0-linux-s390x", + "940d4cbfadf736b34519630a05d144c09f8a5aca291a802f2f559ee1562f6f24" + ], + "24.15.0-linux_amd64": [ + "node-v24.15.0-linux-x64.tar.xz", + "node-v24.15.0-linux-x64", + "472655581fb851559730c48763e0c9d3bc25975c59d518003fc0849d3e4ba0f6" + ], + "24.15.0-windows_amd64": [ + "node-v24.15.0-win-x64.zip", + "node-v24.15.0-win-x64", + "cc5149eabd53779ce1e7bdc5401643622d0c7e6800ade18928a767e940bb0e62" ] }, "node_urls": [ "https://nodejs.org/dist/v{version}/{filename}" ], - "node_version": "24.13.1", + "node_version": "24.15.0", "include_headers": false, "platform": "linux_arm64" } @@ -1879,46 +1879,46 @@ "attributes": { "node_download_auth": {}, "node_repositories": { - "24.13.1-darwin_arm64": [ - "node-v24.13.1-darwin-arm64.tar.gz", - "node-v24.13.1-darwin-arm64", - "8c039d59f2fec6195e4281ad5b0d02b9a940897b4df7b849c6fb48be6787bba6" - ], - "24.13.1-darwin_amd64": [ - "node-v24.13.1-darwin-x64.tar.gz", - "node-v24.13.1-darwin-x64", - "527f0578d9812e7dfa225121bda0b1546a6a0e4b5f556295fc8299c272de5fbf" - ], - "24.13.1-linux_arm64": [ - "node-v24.13.1-linux-arm64.tar.xz", - "node-v24.13.1-linux-arm64", - "c827d3d301e2eed1a51f36d0116b71b9e3d9e3b728f081615270ea40faac34c1" - ], - "24.13.1-linux_ppc64le": [ - "node-v24.13.1-linux-ppc64le.tar.xz", - "node-v24.13.1-linux-ppc64le", - "fb712a08d317655dbf776c90f60ac2105109d802e33811df6c9ed33d12f801c6" - ], - "24.13.1-linux_s390x": [ - "node-v24.13.1-linux-s390x.tar.xz", - "node-v24.13.1-linux-s390x", - "8e2c0d9b5545c3db22623e8cb8d6f0c28fcd470f29d32dbeabf9432dda289de2" - ], - "24.13.1-linux_amd64": [ - "node-v24.13.1-linux-x64.tar.xz", - "node-v24.13.1-linux-x64", - "30215f90ea3cd04dfbc06e762c021393fa173a1d392974298bbc871a8e461089" - ], - "24.13.1-windows_amd64": [ - "node-v24.13.1-win-x64.zip", - "node-v24.13.1-win-x64", - "fba577c4bb87df04d54dd87bbdaa5a2272f1f99a2acbf9152e1a91b8b5f0b279" + "24.15.0-darwin_arm64": [ + "node-v24.15.0-darwin-arm64.tar.gz", + "node-v24.15.0-darwin-arm64", + "372331b969779ab5d15b949884fc6eaf88d5afe87bde8ba881d6400b9100ffc4" + ], + "24.15.0-darwin_amd64": [ + "node-v24.15.0-darwin-x64.tar.gz", + "node-v24.15.0-darwin-x64", + "ffd5ee293467927f3ee731a553eb88fd1f48cf74eebc2d74a6babe4af228673b" + ], + "24.15.0-linux_arm64": [ + "node-v24.15.0-linux-arm64.tar.xz", + "node-v24.15.0-linux-arm64", + "f3d5a797b5d210ce8e2cb265544c8e482eaedcb8aa409a8b46da7e8595d0dda0" + ], + "24.15.0-linux_ppc64le": [ + "node-v24.15.0-linux-ppc64le.tar.xz", + "node-v24.15.0-linux-ppc64le", + "6a6560a27bd2817013c28c3d917bfe9eebf26bbd4b1d88475190f216cc411fbb" + ], + "24.15.0-linux_s390x": [ + "node-v24.15.0-linux-s390x.tar.xz", + "node-v24.15.0-linux-s390x", + "940d4cbfadf736b34519630a05d144c09f8a5aca291a802f2f559ee1562f6f24" + ], + "24.15.0-linux_amd64": [ + "node-v24.15.0-linux-x64.tar.xz", + "node-v24.15.0-linux-x64", + "472655581fb851559730c48763e0c9d3bc25975c59d518003fc0849d3e4ba0f6" + ], + "24.15.0-windows_amd64": [ + "node-v24.15.0-win-x64.zip", + "node-v24.15.0-win-x64", + "cc5149eabd53779ce1e7bdc5401643622d0c7e6800ade18928a767e940bb0e62" ] }, "node_urls": [ "https://nodejs.org/dist/v{version}/{filename}" ], - "node_version": "24.13.1", + "node_version": "24.15.0", "include_headers": false, "platform": "linux_s390x" } @@ -1928,46 +1928,46 @@ "attributes": { "node_download_auth": {}, "node_repositories": { - "24.13.1-darwin_arm64": [ - "node-v24.13.1-darwin-arm64.tar.gz", - "node-v24.13.1-darwin-arm64", - "8c039d59f2fec6195e4281ad5b0d02b9a940897b4df7b849c6fb48be6787bba6" - ], - "24.13.1-darwin_amd64": [ - "node-v24.13.1-darwin-x64.tar.gz", - "node-v24.13.1-darwin-x64", - "527f0578d9812e7dfa225121bda0b1546a6a0e4b5f556295fc8299c272de5fbf" - ], - "24.13.1-linux_arm64": [ - "node-v24.13.1-linux-arm64.tar.xz", - "node-v24.13.1-linux-arm64", - "c827d3d301e2eed1a51f36d0116b71b9e3d9e3b728f081615270ea40faac34c1" - ], - "24.13.1-linux_ppc64le": [ - "node-v24.13.1-linux-ppc64le.tar.xz", - "node-v24.13.1-linux-ppc64le", - "fb712a08d317655dbf776c90f60ac2105109d802e33811df6c9ed33d12f801c6" - ], - "24.13.1-linux_s390x": [ - "node-v24.13.1-linux-s390x.tar.xz", - "node-v24.13.1-linux-s390x", - "8e2c0d9b5545c3db22623e8cb8d6f0c28fcd470f29d32dbeabf9432dda289de2" - ], - "24.13.1-linux_amd64": [ - "node-v24.13.1-linux-x64.tar.xz", - "node-v24.13.1-linux-x64", - "30215f90ea3cd04dfbc06e762c021393fa173a1d392974298bbc871a8e461089" - ], - "24.13.1-windows_amd64": [ - "node-v24.13.1-win-x64.zip", - "node-v24.13.1-win-x64", - "fba577c4bb87df04d54dd87bbdaa5a2272f1f99a2acbf9152e1a91b8b5f0b279" + "24.15.0-darwin_arm64": [ + "node-v24.15.0-darwin-arm64.tar.gz", + "node-v24.15.0-darwin-arm64", + "372331b969779ab5d15b949884fc6eaf88d5afe87bde8ba881d6400b9100ffc4" + ], + "24.15.0-darwin_amd64": [ + "node-v24.15.0-darwin-x64.tar.gz", + "node-v24.15.0-darwin-x64", + "ffd5ee293467927f3ee731a553eb88fd1f48cf74eebc2d74a6babe4af228673b" + ], + "24.15.0-linux_arm64": [ + "node-v24.15.0-linux-arm64.tar.xz", + "node-v24.15.0-linux-arm64", + "f3d5a797b5d210ce8e2cb265544c8e482eaedcb8aa409a8b46da7e8595d0dda0" + ], + "24.15.0-linux_ppc64le": [ + "node-v24.15.0-linux-ppc64le.tar.xz", + "node-v24.15.0-linux-ppc64le", + "6a6560a27bd2817013c28c3d917bfe9eebf26bbd4b1d88475190f216cc411fbb" + ], + "24.15.0-linux_s390x": [ + "node-v24.15.0-linux-s390x.tar.xz", + "node-v24.15.0-linux-s390x", + "940d4cbfadf736b34519630a05d144c09f8a5aca291a802f2f559ee1562f6f24" + ], + "24.15.0-linux_amd64": [ + "node-v24.15.0-linux-x64.tar.xz", + "node-v24.15.0-linux-x64", + "472655581fb851559730c48763e0c9d3bc25975c59d518003fc0849d3e4ba0f6" + ], + "24.15.0-windows_amd64": [ + "node-v24.15.0-win-x64.zip", + "node-v24.15.0-win-x64", + "cc5149eabd53779ce1e7bdc5401643622d0c7e6800ade18928a767e940bb0e62" ] }, "node_urls": [ "https://nodejs.org/dist/v{version}/{filename}" ], - "node_version": "24.13.1", + "node_version": "24.15.0", "include_headers": false, "platform": "linux_ppc64le" } @@ -1977,46 +1977,46 @@ "attributes": { "node_download_auth": {}, "node_repositories": { - "24.13.1-darwin_arm64": [ - "node-v24.13.1-darwin-arm64.tar.gz", - "node-v24.13.1-darwin-arm64", - "8c039d59f2fec6195e4281ad5b0d02b9a940897b4df7b849c6fb48be6787bba6" - ], - "24.13.1-darwin_amd64": [ - "node-v24.13.1-darwin-x64.tar.gz", - "node-v24.13.1-darwin-x64", - "527f0578d9812e7dfa225121bda0b1546a6a0e4b5f556295fc8299c272de5fbf" - ], - "24.13.1-linux_arm64": [ - "node-v24.13.1-linux-arm64.tar.xz", - "node-v24.13.1-linux-arm64", - "c827d3d301e2eed1a51f36d0116b71b9e3d9e3b728f081615270ea40faac34c1" - ], - "24.13.1-linux_ppc64le": [ - "node-v24.13.1-linux-ppc64le.tar.xz", - "node-v24.13.1-linux-ppc64le", - "fb712a08d317655dbf776c90f60ac2105109d802e33811df6c9ed33d12f801c6" - ], - "24.13.1-linux_s390x": [ - "node-v24.13.1-linux-s390x.tar.xz", - "node-v24.13.1-linux-s390x", - "8e2c0d9b5545c3db22623e8cb8d6f0c28fcd470f29d32dbeabf9432dda289de2" - ], - "24.13.1-linux_amd64": [ - "node-v24.13.1-linux-x64.tar.xz", - "node-v24.13.1-linux-x64", - "30215f90ea3cd04dfbc06e762c021393fa173a1d392974298bbc871a8e461089" - ], - "24.13.1-windows_amd64": [ - "node-v24.13.1-win-x64.zip", - "node-v24.13.1-win-x64", - "fba577c4bb87df04d54dd87bbdaa5a2272f1f99a2acbf9152e1a91b8b5f0b279" + "24.15.0-darwin_arm64": [ + "node-v24.15.0-darwin-arm64.tar.gz", + "node-v24.15.0-darwin-arm64", + "372331b969779ab5d15b949884fc6eaf88d5afe87bde8ba881d6400b9100ffc4" + ], + "24.15.0-darwin_amd64": [ + "node-v24.15.0-darwin-x64.tar.gz", + "node-v24.15.0-darwin-x64", + "ffd5ee293467927f3ee731a553eb88fd1f48cf74eebc2d74a6babe4af228673b" + ], + "24.15.0-linux_arm64": [ + "node-v24.15.0-linux-arm64.tar.xz", + "node-v24.15.0-linux-arm64", + "f3d5a797b5d210ce8e2cb265544c8e482eaedcb8aa409a8b46da7e8595d0dda0" + ], + "24.15.0-linux_ppc64le": [ + "node-v24.15.0-linux-ppc64le.tar.xz", + "node-v24.15.0-linux-ppc64le", + "6a6560a27bd2817013c28c3d917bfe9eebf26bbd4b1d88475190f216cc411fbb" + ], + "24.15.0-linux_s390x": [ + "node-v24.15.0-linux-s390x.tar.xz", + "node-v24.15.0-linux-s390x", + "940d4cbfadf736b34519630a05d144c09f8a5aca291a802f2f559ee1562f6f24" + ], + "24.15.0-linux_amd64": [ + "node-v24.15.0-linux-x64.tar.xz", + "node-v24.15.0-linux-x64", + "472655581fb851559730c48763e0c9d3bc25975c59d518003fc0849d3e4ba0f6" + ], + "24.15.0-windows_amd64": [ + "node-v24.15.0-win-x64.zip", + "node-v24.15.0-win-x64", + "cc5149eabd53779ce1e7bdc5401643622d0c7e6800ade18928a767e940bb0e62" ] }, "node_urls": [ "https://nodejs.org/dist/v{version}/{filename}" ], - "node_version": "24.13.1", + "node_version": "24.15.0", "include_headers": false, "platform": "darwin_amd64" } @@ -2026,46 +2026,46 @@ "attributes": { "node_download_auth": {}, "node_repositories": { - "24.13.1-darwin_arm64": [ - "node-v24.13.1-darwin-arm64.tar.gz", - "node-v24.13.1-darwin-arm64", - "8c039d59f2fec6195e4281ad5b0d02b9a940897b4df7b849c6fb48be6787bba6" - ], - "24.13.1-darwin_amd64": [ - "node-v24.13.1-darwin-x64.tar.gz", - "node-v24.13.1-darwin-x64", - "527f0578d9812e7dfa225121bda0b1546a6a0e4b5f556295fc8299c272de5fbf" - ], - "24.13.1-linux_arm64": [ - "node-v24.13.1-linux-arm64.tar.xz", - "node-v24.13.1-linux-arm64", - "c827d3d301e2eed1a51f36d0116b71b9e3d9e3b728f081615270ea40faac34c1" - ], - "24.13.1-linux_ppc64le": [ - "node-v24.13.1-linux-ppc64le.tar.xz", - "node-v24.13.1-linux-ppc64le", - "fb712a08d317655dbf776c90f60ac2105109d802e33811df6c9ed33d12f801c6" - ], - "24.13.1-linux_s390x": [ - "node-v24.13.1-linux-s390x.tar.xz", - "node-v24.13.1-linux-s390x", - "8e2c0d9b5545c3db22623e8cb8d6f0c28fcd470f29d32dbeabf9432dda289de2" - ], - "24.13.1-linux_amd64": [ - "node-v24.13.1-linux-x64.tar.xz", - "node-v24.13.1-linux-x64", - "30215f90ea3cd04dfbc06e762c021393fa173a1d392974298bbc871a8e461089" - ], - "24.13.1-windows_amd64": [ - "node-v24.13.1-win-x64.zip", - "node-v24.13.1-win-x64", - "fba577c4bb87df04d54dd87bbdaa5a2272f1f99a2acbf9152e1a91b8b5f0b279" + "24.15.0-darwin_arm64": [ + "node-v24.15.0-darwin-arm64.tar.gz", + "node-v24.15.0-darwin-arm64", + "372331b969779ab5d15b949884fc6eaf88d5afe87bde8ba881d6400b9100ffc4" + ], + "24.15.0-darwin_amd64": [ + "node-v24.15.0-darwin-x64.tar.gz", + "node-v24.15.0-darwin-x64", + "ffd5ee293467927f3ee731a553eb88fd1f48cf74eebc2d74a6babe4af228673b" + ], + "24.15.0-linux_arm64": [ + "node-v24.15.0-linux-arm64.tar.xz", + "node-v24.15.0-linux-arm64", + "f3d5a797b5d210ce8e2cb265544c8e482eaedcb8aa409a8b46da7e8595d0dda0" + ], + "24.15.0-linux_ppc64le": [ + "node-v24.15.0-linux-ppc64le.tar.xz", + "node-v24.15.0-linux-ppc64le", + "6a6560a27bd2817013c28c3d917bfe9eebf26bbd4b1d88475190f216cc411fbb" + ], + "24.15.0-linux_s390x": [ + "node-v24.15.0-linux-s390x.tar.xz", + "node-v24.15.0-linux-s390x", + "940d4cbfadf736b34519630a05d144c09f8a5aca291a802f2f559ee1562f6f24" + ], + "24.15.0-linux_amd64": [ + "node-v24.15.0-linux-x64.tar.xz", + "node-v24.15.0-linux-x64", + "472655581fb851559730c48763e0c9d3bc25975c59d518003fc0849d3e4ba0f6" + ], + "24.15.0-windows_amd64": [ + "node-v24.15.0-win-x64.zip", + "node-v24.15.0-win-x64", + "cc5149eabd53779ce1e7bdc5401643622d0c7e6800ade18928a767e940bb0e62" ] }, "node_urls": [ "https://nodejs.org/dist/v{version}/{filename}" ], - "node_version": "24.13.1", + "node_version": "24.15.0", "include_headers": false, "platform": "darwin_arm64" } @@ -2075,46 +2075,46 @@ "attributes": { "node_download_auth": {}, "node_repositories": { - "24.13.1-darwin_arm64": [ - "node-v24.13.1-darwin-arm64.tar.gz", - "node-v24.13.1-darwin-arm64", - "8c039d59f2fec6195e4281ad5b0d02b9a940897b4df7b849c6fb48be6787bba6" - ], - "24.13.1-darwin_amd64": [ - "node-v24.13.1-darwin-x64.tar.gz", - "node-v24.13.1-darwin-x64", - "527f0578d9812e7dfa225121bda0b1546a6a0e4b5f556295fc8299c272de5fbf" - ], - "24.13.1-linux_arm64": [ - "node-v24.13.1-linux-arm64.tar.xz", - "node-v24.13.1-linux-arm64", - "c827d3d301e2eed1a51f36d0116b71b9e3d9e3b728f081615270ea40faac34c1" - ], - "24.13.1-linux_ppc64le": [ - "node-v24.13.1-linux-ppc64le.tar.xz", - "node-v24.13.1-linux-ppc64le", - "fb712a08d317655dbf776c90f60ac2105109d802e33811df6c9ed33d12f801c6" - ], - "24.13.1-linux_s390x": [ - "node-v24.13.1-linux-s390x.tar.xz", - "node-v24.13.1-linux-s390x", - "8e2c0d9b5545c3db22623e8cb8d6f0c28fcd470f29d32dbeabf9432dda289de2" - ], - "24.13.1-linux_amd64": [ - "node-v24.13.1-linux-x64.tar.xz", - "node-v24.13.1-linux-x64", - "30215f90ea3cd04dfbc06e762c021393fa173a1d392974298bbc871a8e461089" - ], - "24.13.1-windows_amd64": [ - "node-v24.13.1-win-x64.zip", - "node-v24.13.1-win-x64", - "fba577c4bb87df04d54dd87bbdaa5a2272f1f99a2acbf9152e1a91b8b5f0b279" + "24.15.0-darwin_arm64": [ + "node-v24.15.0-darwin-arm64.tar.gz", + "node-v24.15.0-darwin-arm64", + "372331b969779ab5d15b949884fc6eaf88d5afe87bde8ba881d6400b9100ffc4" + ], + "24.15.0-darwin_amd64": [ + "node-v24.15.0-darwin-x64.tar.gz", + "node-v24.15.0-darwin-x64", + "ffd5ee293467927f3ee731a553eb88fd1f48cf74eebc2d74a6babe4af228673b" + ], + "24.15.0-linux_arm64": [ + "node-v24.15.0-linux-arm64.tar.xz", + "node-v24.15.0-linux-arm64", + "f3d5a797b5d210ce8e2cb265544c8e482eaedcb8aa409a8b46da7e8595d0dda0" + ], + "24.15.0-linux_ppc64le": [ + "node-v24.15.0-linux-ppc64le.tar.xz", + "node-v24.15.0-linux-ppc64le", + "6a6560a27bd2817013c28c3d917bfe9eebf26bbd4b1d88475190f216cc411fbb" + ], + "24.15.0-linux_s390x": [ + "node-v24.15.0-linux-s390x.tar.xz", + "node-v24.15.0-linux-s390x", + "940d4cbfadf736b34519630a05d144c09f8a5aca291a802f2f559ee1562f6f24" + ], + "24.15.0-linux_amd64": [ + "node-v24.15.0-linux-x64.tar.xz", + "node-v24.15.0-linux-x64", + "472655581fb851559730c48763e0c9d3bc25975c59d518003fc0849d3e4ba0f6" + ], + "24.15.0-windows_amd64": [ + "node-v24.15.0-win-x64.zip", + "node-v24.15.0-win-x64", + "cc5149eabd53779ce1e7bdc5401643622d0c7e6800ade18928a767e940bb0e62" ] }, "node_urls": [ "https://nodejs.org/dist/v{version}/{filename}" ], - "node_version": "24.13.1", + "node_version": "24.15.0", "include_headers": false, "platform": "windows_amd64" } @@ -2124,46 +2124,46 @@ "attributes": { "node_download_auth": {}, "node_repositories": { - "24.13.1-darwin_arm64": [ - "node-v24.13.1-darwin-arm64.tar.gz", - "node-v24.13.1-darwin-arm64", - "8c039d59f2fec6195e4281ad5b0d02b9a940897b4df7b849c6fb48be6787bba6" - ], - "24.13.1-darwin_amd64": [ - "node-v24.13.1-darwin-x64.tar.gz", - "node-v24.13.1-darwin-x64", - "527f0578d9812e7dfa225121bda0b1546a6a0e4b5f556295fc8299c272de5fbf" - ], - "24.13.1-linux_arm64": [ - "node-v24.13.1-linux-arm64.tar.xz", - "node-v24.13.1-linux-arm64", - "c827d3d301e2eed1a51f36d0116b71b9e3d9e3b728f081615270ea40faac34c1" - ], - "24.13.1-linux_ppc64le": [ - "node-v24.13.1-linux-ppc64le.tar.xz", - "node-v24.13.1-linux-ppc64le", - "fb712a08d317655dbf776c90f60ac2105109d802e33811df6c9ed33d12f801c6" - ], - "24.13.1-linux_s390x": [ - "node-v24.13.1-linux-s390x.tar.xz", - "node-v24.13.1-linux-s390x", - "8e2c0d9b5545c3db22623e8cb8d6f0c28fcd470f29d32dbeabf9432dda289de2" - ], - "24.13.1-linux_amd64": [ - "node-v24.13.1-linux-x64.tar.xz", - "node-v24.13.1-linux-x64", - "30215f90ea3cd04dfbc06e762c021393fa173a1d392974298bbc871a8e461089" - ], - "24.13.1-windows_amd64": [ - "node-v24.13.1-win-x64.zip", - "node-v24.13.1-win-x64", - "fba577c4bb87df04d54dd87bbdaa5a2272f1f99a2acbf9152e1a91b8b5f0b279" + "24.15.0-darwin_arm64": [ + "node-v24.15.0-darwin-arm64.tar.gz", + "node-v24.15.0-darwin-arm64", + "372331b969779ab5d15b949884fc6eaf88d5afe87bde8ba881d6400b9100ffc4" + ], + "24.15.0-darwin_amd64": [ + "node-v24.15.0-darwin-x64.tar.gz", + "node-v24.15.0-darwin-x64", + "ffd5ee293467927f3ee731a553eb88fd1f48cf74eebc2d74a6babe4af228673b" + ], + "24.15.0-linux_arm64": [ + "node-v24.15.0-linux-arm64.tar.xz", + "node-v24.15.0-linux-arm64", + "f3d5a797b5d210ce8e2cb265544c8e482eaedcb8aa409a8b46da7e8595d0dda0" + ], + "24.15.0-linux_ppc64le": [ + "node-v24.15.0-linux-ppc64le.tar.xz", + "node-v24.15.0-linux-ppc64le", + "6a6560a27bd2817013c28c3d917bfe9eebf26bbd4b1d88475190f216cc411fbb" + ], + "24.15.0-linux_s390x": [ + "node-v24.15.0-linux-s390x.tar.xz", + "node-v24.15.0-linux-s390x", + "940d4cbfadf736b34519630a05d144c09f8a5aca291a802f2f559ee1562f6f24" + ], + "24.15.0-linux_amd64": [ + "node-v24.15.0-linux-x64.tar.xz", + "node-v24.15.0-linux-x64", + "472655581fb851559730c48763e0c9d3bc25975c59d518003fc0849d3e4ba0f6" + ], + "24.15.0-windows_amd64": [ + "node-v24.15.0-win-x64.zip", + "node-v24.15.0-win-x64", + "cc5149eabd53779ce1e7bdc5401643622d0c7e6800ade18928a767e940bb0e62" ] }, "node_urls": [ "https://nodejs.org/dist/v{version}/{filename}" ], - "node_version": "24.13.1", + "node_version": "24.15.0", "include_headers": false, "platform": "windows_arm64" } diff --git a/constants.bzl b/constants.bzl index 7c791830e40d..aab6ca5f6f46 100644 --- a/constants.bzl +++ b/constants.bzl @@ -1,5 +1,5 @@ # Engine versions to stamp in a release package.json -RELEASE_ENGINES_NODE = "^22.22.0 || ^24.13.1 || >=26.0.0" +RELEASE_ENGINES_NODE = "^22.22.0 || ^24.15.0 || >=26.0.0" RELEASE_ENGINES_NPM = "^6.11.0 || ^7.5.6 || >=8.0.0" RELEASE_ENGINES_YARN = ">= 1.13.0" diff --git a/package.json b/package.json index 764e82c9821f..a9c390b52bdd 100644 --- a/package.json +++ b/package.json @@ -30,7 +30,7 @@ }, "packageManager": "pnpm@10.33.4", "engines": { - "node": "^22.22.0 || ^24.13.1 || >=26.0.0", + "node": "^22.22.0 || ^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": "10.33.4" diff --git a/packages/angular/cli/bin/ng.js b/packages/angular/cli/bin/ng.js index 9668d5917d73..f59fcdcc550d 100755 --- a/packages/angular/cli/bin/ng.js +++ b/packages/angular/cli/bin/ng.js @@ -57,7 +57,7 @@ if (major === 23 || major === 25) { require('./bootstrap'); } else if (!nodeUtils.isNodeVersionSupported()) { - // Error and exit if less than 22.22 or 24.13.1 + // Error and exit if less than 22.22 or 24.15.0 console.error( 'Node.js version ' + process.version + From f32c36c87229a33b85eddf0c472107dd2d1d4ad8 Mon Sep 17 00:00:00 2001 From: Alan Agius <17563226+alan-agius4@users.noreply.github.com> Date: Thu, 21 May 2026 14:33:24 +0000 Subject: [PATCH 32/34] build: update minimum Node.js 22 version to 22.22.3 Updates the minimum supported version of Node.js 22 from 22.22.0 to 22.22.3. This includes upgrading the dev toolchain configured for rules_nodejs in MODULE.bazel to Node.js v22.22.3, along with the corresponding archive checksums across all targeted platforms (Darwin, Linux, and Windows). Also updates target version range constraints in constants.bzl, package.json, and packages/angular/cli/bin/ng.js. The MODULE.bazel.lock has been updated by running module resolution. (cherry picked from commit bb6a9440cf4cade49cf19333e2b28f2c75f36188) --- MODULE.bazel | 16 +- MODULE.bazel.lock | 562 ++++++++++++++++----------------- constants.bzl | 2 +- package.json | 2 +- packages/angular/cli/bin/ng.js | 2 +- 5 files changed, 292 insertions(+), 292 deletions(-) diff --git a/MODULE.bazel b/MODULE.bazel index e3c5f51ae226..d586a804c268 100644 --- a/MODULE.bazel +++ b/MODULE.bazel @@ -66,15 +66,15 @@ node_dev = use_extension("@rules_nodejs//nodejs:extensions.bzl", "node", dev_dep node_dev.toolchain( name = "node22", node_repositories = { - "22.22.0-darwin_arm64": ("node-v22.22.0-darwin-arm64.tar.gz", "node-v22.22.0-darwin-arm64", "5ed4db0fcf1eaf84d91ad12462631d73bf4576c1377e192d222e48026a902640"), - "22.22.0-darwin_amd64": ("node-v22.22.0-darwin-x64.tar.gz", "node-v22.22.0-darwin-x64", "5ea50c9d6dea3dfa3abb66b2656f7a4e1c8cef23432b558d45fb538c7b5dedce"), - "22.22.0-linux_arm64": ("node-v22.22.0-linux-arm64.tar.xz", "node-v22.22.0-linux-arm64", "1bf1eb9ee63ffc4e5d324c0b9b62cf4a289f44332dfef9607cea1a0d9596ba6f"), - "22.22.0-linux_ppc64le": ("node-v22.22.0-linux-ppc64le.tar.xz", "node-v22.22.0-linux-ppc64le", "d83b9957431cc18e1fc143a4b99f89cde7b8a18f53ef392231b4336afd058865"), - "22.22.0-linux_s390x": ("node-v22.22.0-linux-s390x.tar.xz", "node-v22.22.0-linux-s390x", "5aa0e520689448c4233e8d73f284e8e0634fdcd32b479735698494be5641f3e4"), - "22.22.0-linux_amd64": ("node-v22.22.0-linux-x64.tar.xz", "node-v22.22.0-linux-x64", "9aa8e9d2298ab68c600bd6fb86a6c13bce11a4eca1ba9b39d79fa021755d7c37"), - "22.22.0-windows_amd64": ("node-v22.22.0-win-x64.zip", "node-v22.22.0-win-x64", "c97fa376d2becdc8863fcd3ca2dd9a83a9f3468ee7ccf7a6d076ec66a645c77a"), + "22.22.3-darwin_arm64": ("node-v22.22.3-darwin-arm64.tar.gz", "node-v22.22.3-darwin-arm64", "0da7ff74ef8611328c8212f17943368713a2ad953fb7d89a8c8a0eae87c23207"), + "22.22.3-darwin_amd64": ("node-v22.22.3-darwin-x64.tar.gz", "node-v22.22.3-darwin-x64", "45830ba752fa0d892c6dcd640946669801293cac820a33591ded40ac075198ec"), + "22.22.3-linux_arm64": ("node-v22.22.3-linux-arm64.tar.xz", "node-v22.22.3-linux-arm64", "1c4a9933a5e45bc88f54f70b5f91232c127ec49f1a5989d23fb85824c7adf9b7"), + "22.22.3-linux_ppc64le": ("node-v22.22.3-linux-ppc64le.tar.xz", "node-v22.22.3-linux-ppc64le", "edb5478071bd1375e80195ca52f72823998bb5141b1a09e68bc54b3e2eb67754"), + "22.22.3-linux_s390x": ("node-v22.22.3-linux-s390x.tar.xz", "node-v22.22.3-linux-s390x", "ce398c057830d57a24c458177279a17bc51742d5c22dd4cbe97b10dbd43f2617"), + "22.22.3-linux_amd64": ("node-v22.22.3-linux-x64.tar.xz", "node-v22.22.3-linux-x64", "2e5d13569282d016861fae7c8f935e741693c269101a5bebcf761a5376d1f99f"), + "22.22.3-windows_amd64": ("node-v22.22.3-win-x64.zip", "node-v22.22.3-win-x64", "6c8d54f635feff4df76c2ca80f45332eb2ff57d25226edce36592e51a177ee33"), }, - node_version = "22.22.0", + node_version = "22.22.3", ) # Node.js 24 diff --git a/MODULE.bazel.lock b/MODULE.bazel.lock index c883d7f2af32..cec7b61867c5 100644 --- a/MODULE.bazel.lock +++ b/MODULE.bazel.lock @@ -951,7 +951,7 @@ "@@rules_nodejs+//nodejs:extensions.bzl%node": { "general": { "bzlTransitiveDigest": "oZFClfRhTTwsYzpxVPkOpOt/r0+OzEfEV37au0jFZ0s=", - "usagesDigest": "6TUfLpcb/YUt4PLW/4xn3gzv5hT9PzmDfmiHSzGYLc4=", + "usagesDigest": "fynsPIyZ0zhPfB73TUTjVQQVGTFUuMTdQwRXcFzXh2s=", "recordedFileInputs": {}, "recordedDirentsInputs": {}, "envVariables": {}, @@ -1371,46 +1371,46 @@ "attributes": { "node_download_auth": {}, "node_repositories": { - "22.22.0-darwin_arm64": [ - "node-v22.22.0-darwin-arm64.tar.gz", - "node-v22.22.0-darwin-arm64", - "5ed4db0fcf1eaf84d91ad12462631d73bf4576c1377e192d222e48026a902640" - ], - "22.22.0-darwin_amd64": [ - "node-v22.22.0-darwin-x64.tar.gz", - "node-v22.22.0-darwin-x64", - "5ea50c9d6dea3dfa3abb66b2656f7a4e1c8cef23432b558d45fb538c7b5dedce" - ], - "22.22.0-linux_arm64": [ - "node-v22.22.0-linux-arm64.tar.xz", - "node-v22.22.0-linux-arm64", - "1bf1eb9ee63ffc4e5d324c0b9b62cf4a289f44332dfef9607cea1a0d9596ba6f" - ], - "22.22.0-linux_ppc64le": [ - "node-v22.22.0-linux-ppc64le.tar.xz", - "node-v22.22.0-linux-ppc64le", - "d83b9957431cc18e1fc143a4b99f89cde7b8a18f53ef392231b4336afd058865" - ], - "22.22.0-linux_s390x": [ - "node-v22.22.0-linux-s390x.tar.xz", - "node-v22.22.0-linux-s390x", - "5aa0e520689448c4233e8d73f284e8e0634fdcd32b479735698494be5641f3e4" - ], - "22.22.0-linux_amd64": [ - "node-v22.22.0-linux-x64.tar.xz", - "node-v22.22.0-linux-x64", - "9aa8e9d2298ab68c600bd6fb86a6c13bce11a4eca1ba9b39d79fa021755d7c37" - ], - "22.22.0-windows_amd64": [ - "node-v22.22.0-win-x64.zip", - "node-v22.22.0-win-x64", - "c97fa376d2becdc8863fcd3ca2dd9a83a9f3468ee7ccf7a6d076ec66a645c77a" + "22.22.3-darwin_arm64": [ + "node-v22.22.3-darwin-arm64.tar.gz", + "node-v22.22.3-darwin-arm64", + "0da7ff74ef8611328c8212f17943368713a2ad953fb7d89a8c8a0eae87c23207" + ], + "22.22.3-darwin_amd64": [ + "node-v22.22.3-darwin-x64.tar.gz", + "node-v22.22.3-darwin-x64", + "45830ba752fa0d892c6dcd640946669801293cac820a33591ded40ac075198ec" + ], + "22.22.3-linux_arm64": [ + "node-v22.22.3-linux-arm64.tar.xz", + "node-v22.22.3-linux-arm64", + "1c4a9933a5e45bc88f54f70b5f91232c127ec49f1a5989d23fb85824c7adf9b7" + ], + "22.22.3-linux_ppc64le": [ + "node-v22.22.3-linux-ppc64le.tar.xz", + "node-v22.22.3-linux-ppc64le", + "edb5478071bd1375e80195ca52f72823998bb5141b1a09e68bc54b3e2eb67754" + ], + "22.22.3-linux_s390x": [ + "node-v22.22.3-linux-s390x.tar.xz", + "node-v22.22.3-linux-s390x", + "ce398c057830d57a24c458177279a17bc51742d5c22dd4cbe97b10dbd43f2617" + ], + "22.22.3-linux_amd64": [ + "node-v22.22.3-linux-x64.tar.xz", + "node-v22.22.3-linux-x64", + "2e5d13569282d016861fae7c8f935e741693c269101a5bebcf761a5376d1f99f" + ], + "22.22.3-windows_amd64": [ + "node-v22.22.3-win-x64.zip", + "node-v22.22.3-win-x64", + "6c8d54f635feff4df76c2ca80f45332eb2ff57d25226edce36592e51a177ee33" ] }, "node_urls": [ "https://nodejs.org/dist/v{version}/{filename}" ], - "node_version": "22.22.0", + "node_version": "22.22.3", "include_headers": false, "platform": "linux_amd64" } @@ -1420,46 +1420,46 @@ "attributes": { "node_download_auth": {}, "node_repositories": { - "22.22.0-darwin_arm64": [ - "node-v22.22.0-darwin-arm64.tar.gz", - "node-v22.22.0-darwin-arm64", - "5ed4db0fcf1eaf84d91ad12462631d73bf4576c1377e192d222e48026a902640" - ], - "22.22.0-darwin_amd64": [ - "node-v22.22.0-darwin-x64.tar.gz", - "node-v22.22.0-darwin-x64", - "5ea50c9d6dea3dfa3abb66b2656f7a4e1c8cef23432b558d45fb538c7b5dedce" - ], - "22.22.0-linux_arm64": [ - "node-v22.22.0-linux-arm64.tar.xz", - "node-v22.22.0-linux-arm64", - "1bf1eb9ee63ffc4e5d324c0b9b62cf4a289f44332dfef9607cea1a0d9596ba6f" - ], - "22.22.0-linux_ppc64le": [ - "node-v22.22.0-linux-ppc64le.tar.xz", - "node-v22.22.0-linux-ppc64le", - "d83b9957431cc18e1fc143a4b99f89cde7b8a18f53ef392231b4336afd058865" - ], - "22.22.0-linux_s390x": [ - "node-v22.22.0-linux-s390x.tar.xz", - "node-v22.22.0-linux-s390x", - "5aa0e520689448c4233e8d73f284e8e0634fdcd32b479735698494be5641f3e4" - ], - "22.22.0-linux_amd64": [ - "node-v22.22.0-linux-x64.tar.xz", - "node-v22.22.0-linux-x64", - "9aa8e9d2298ab68c600bd6fb86a6c13bce11a4eca1ba9b39d79fa021755d7c37" - ], - "22.22.0-windows_amd64": [ - "node-v22.22.0-win-x64.zip", - "node-v22.22.0-win-x64", - "c97fa376d2becdc8863fcd3ca2dd9a83a9f3468ee7ccf7a6d076ec66a645c77a" + "22.22.3-darwin_arm64": [ + "node-v22.22.3-darwin-arm64.tar.gz", + "node-v22.22.3-darwin-arm64", + "0da7ff74ef8611328c8212f17943368713a2ad953fb7d89a8c8a0eae87c23207" + ], + "22.22.3-darwin_amd64": [ + "node-v22.22.3-darwin-x64.tar.gz", + "node-v22.22.3-darwin-x64", + "45830ba752fa0d892c6dcd640946669801293cac820a33591ded40ac075198ec" + ], + "22.22.3-linux_arm64": [ + "node-v22.22.3-linux-arm64.tar.xz", + "node-v22.22.3-linux-arm64", + "1c4a9933a5e45bc88f54f70b5f91232c127ec49f1a5989d23fb85824c7adf9b7" + ], + "22.22.3-linux_ppc64le": [ + "node-v22.22.3-linux-ppc64le.tar.xz", + "node-v22.22.3-linux-ppc64le", + "edb5478071bd1375e80195ca52f72823998bb5141b1a09e68bc54b3e2eb67754" + ], + "22.22.3-linux_s390x": [ + "node-v22.22.3-linux-s390x.tar.xz", + "node-v22.22.3-linux-s390x", + "ce398c057830d57a24c458177279a17bc51742d5c22dd4cbe97b10dbd43f2617" + ], + "22.22.3-linux_amd64": [ + "node-v22.22.3-linux-x64.tar.xz", + "node-v22.22.3-linux-x64", + "2e5d13569282d016861fae7c8f935e741693c269101a5bebcf761a5376d1f99f" + ], + "22.22.3-windows_amd64": [ + "node-v22.22.3-win-x64.zip", + "node-v22.22.3-win-x64", + "6c8d54f635feff4df76c2ca80f45332eb2ff57d25226edce36592e51a177ee33" ] }, "node_urls": [ "https://nodejs.org/dist/v{version}/{filename}" ], - "node_version": "22.22.0", + "node_version": "22.22.3", "include_headers": false, "platform": "linux_arm64" } @@ -1469,46 +1469,46 @@ "attributes": { "node_download_auth": {}, "node_repositories": { - "22.22.0-darwin_arm64": [ - "node-v22.22.0-darwin-arm64.tar.gz", - "node-v22.22.0-darwin-arm64", - "5ed4db0fcf1eaf84d91ad12462631d73bf4576c1377e192d222e48026a902640" - ], - "22.22.0-darwin_amd64": [ - "node-v22.22.0-darwin-x64.tar.gz", - "node-v22.22.0-darwin-x64", - "5ea50c9d6dea3dfa3abb66b2656f7a4e1c8cef23432b558d45fb538c7b5dedce" - ], - "22.22.0-linux_arm64": [ - "node-v22.22.0-linux-arm64.tar.xz", - "node-v22.22.0-linux-arm64", - "1bf1eb9ee63ffc4e5d324c0b9b62cf4a289f44332dfef9607cea1a0d9596ba6f" - ], - "22.22.0-linux_ppc64le": [ - "node-v22.22.0-linux-ppc64le.tar.xz", - "node-v22.22.0-linux-ppc64le", - "d83b9957431cc18e1fc143a4b99f89cde7b8a18f53ef392231b4336afd058865" - ], - "22.22.0-linux_s390x": [ - "node-v22.22.0-linux-s390x.tar.xz", - "node-v22.22.0-linux-s390x", - "5aa0e520689448c4233e8d73f284e8e0634fdcd32b479735698494be5641f3e4" - ], - "22.22.0-linux_amd64": [ - "node-v22.22.0-linux-x64.tar.xz", - "node-v22.22.0-linux-x64", - "9aa8e9d2298ab68c600bd6fb86a6c13bce11a4eca1ba9b39d79fa021755d7c37" - ], - "22.22.0-windows_amd64": [ - "node-v22.22.0-win-x64.zip", - "node-v22.22.0-win-x64", - "c97fa376d2becdc8863fcd3ca2dd9a83a9f3468ee7ccf7a6d076ec66a645c77a" + "22.22.3-darwin_arm64": [ + "node-v22.22.3-darwin-arm64.tar.gz", + "node-v22.22.3-darwin-arm64", + "0da7ff74ef8611328c8212f17943368713a2ad953fb7d89a8c8a0eae87c23207" + ], + "22.22.3-darwin_amd64": [ + "node-v22.22.3-darwin-x64.tar.gz", + "node-v22.22.3-darwin-x64", + "45830ba752fa0d892c6dcd640946669801293cac820a33591ded40ac075198ec" + ], + "22.22.3-linux_arm64": [ + "node-v22.22.3-linux-arm64.tar.xz", + "node-v22.22.3-linux-arm64", + "1c4a9933a5e45bc88f54f70b5f91232c127ec49f1a5989d23fb85824c7adf9b7" + ], + "22.22.3-linux_ppc64le": [ + "node-v22.22.3-linux-ppc64le.tar.xz", + "node-v22.22.3-linux-ppc64le", + "edb5478071bd1375e80195ca52f72823998bb5141b1a09e68bc54b3e2eb67754" + ], + "22.22.3-linux_s390x": [ + "node-v22.22.3-linux-s390x.tar.xz", + "node-v22.22.3-linux-s390x", + "ce398c057830d57a24c458177279a17bc51742d5c22dd4cbe97b10dbd43f2617" + ], + "22.22.3-linux_amd64": [ + "node-v22.22.3-linux-x64.tar.xz", + "node-v22.22.3-linux-x64", + "2e5d13569282d016861fae7c8f935e741693c269101a5bebcf761a5376d1f99f" + ], + "22.22.3-windows_amd64": [ + "node-v22.22.3-win-x64.zip", + "node-v22.22.3-win-x64", + "6c8d54f635feff4df76c2ca80f45332eb2ff57d25226edce36592e51a177ee33" ] }, "node_urls": [ "https://nodejs.org/dist/v{version}/{filename}" ], - "node_version": "22.22.0", + "node_version": "22.22.3", "include_headers": false, "platform": "linux_s390x" } @@ -1518,46 +1518,46 @@ "attributes": { "node_download_auth": {}, "node_repositories": { - "22.22.0-darwin_arm64": [ - "node-v22.22.0-darwin-arm64.tar.gz", - "node-v22.22.0-darwin-arm64", - "5ed4db0fcf1eaf84d91ad12462631d73bf4576c1377e192d222e48026a902640" - ], - "22.22.0-darwin_amd64": [ - "node-v22.22.0-darwin-x64.tar.gz", - "node-v22.22.0-darwin-x64", - "5ea50c9d6dea3dfa3abb66b2656f7a4e1c8cef23432b558d45fb538c7b5dedce" - ], - "22.22.0-linux_arm64": [ - "node-v22.22.0-linux-arm64.tar.xz", - "node-v22.22.0-linux-arm64", - "1bf1eb9ee63ffc4e5d324c0b9b62cf4a289f44332dfef9607cea1a0d9596ba6f" - ], - "22.22.0-linux_ppc64le": [ - "node-v22.22.0-linux-ppc64le.tar.xz", - "node-v22.22.0-linux-ppc64le", - "d83b9957431cc18e1fc143a4b99f89cde7b8a18f53ef392231b4336afd058865" - ], - "22.22.0-linux_s390x": [ - "node-v22.22.0-linux-s390x.tar.xz", - "node-v22.22.0-linux-s390x", - "5aa0e520689448c4233e8d73f284e8e0634fdcd32b479735698494be5641f3e4" - ], - "22.22.0-linux_amd64": [ - "node-v22.22.0-linux-x64.tar.xz", - "node-v22.22.0-linux-x64", - "9aa8e9d2298ab68c600bd6fb86a6c13bce11a4eca1ba9b39d79fa021755d7c37" - ], - "22.22.0-windows_amd64": [ - "node-v22.22.0-win-x64.zip", - "node-v22.22.0-win-x64", - "c97fa376d2becdc8863fcd3ca2dd9a83a9f3468ee7ccf7a6d076ec66a645c77a" + "22.22.3-darwin_arm64": [ + "node-v22.22.3-darwin-arm64.tar.gz", + "node-v22.22.3-darwin-arm64", + "0da7ff74ef8611328c8212f17943368713a2ad953fb7d89a8c8a0eae87c23207" + ], + "22.22.3-darwin_amd64": [ + "node-v22.22.3-darwin-x64.tar.gz", + "node-v22.22.3-darwin-x64", + "45830ba752fa0d892c6dcd640946669801293cac820a33591ded40ac075198ec" + ], + "22.22.3-linux_arm64": [ + "node-v22.22.3-linux-arm64.tar.xz", + "node-v22.22.3-linux-arm64", + "1c4a9933a5e45bc88f54f70b5f91232c127ec49f1a5989d23fb85824c7adf9b7" + ], + "22.22.3-linux_ppc64le": [ + "node-v22.22.3-linux-ppc64le.tar.xz", + "node-v22.22.3-linux-ppc64le", + "edb5478071bd1375e80195ca52f72823998bb5141b1a09e68bc54b3e2eb67754" + ], + "22.22.3-linux_s390x": [ + "node-v22.22.3-linux-s390x.tar.xz", + "node-v22.22.3-linux-s390x", + "ce398c057830d57a24c458177279a17bc51742d5c22dd4cbe97b10dbd43f2617" + ], + "22.22.3-linux_amd64": [ + "node-v22.22.3-linux-x64.tar.xz", + "node-v22.22.3-linux-x64", + "2e5d13569282d016861fae7c8f935e741693c269101a5bebcf761a5376d1f99f" + ], + "22.22.3-windows_amd64": [ + "node-v22.22.3-win-x64.zip", + "node-v22.22.3-win-x64", + "6c8d54f635feff4df76c2ca80f45332eb2ff57d25226edce36592e51a177ee33" ] }, "node_urls": [ "https://nodejs.org/dist/v{version}/{filename}" ], - "node_version": "22.22.0", + "node_version": "22.22.3", "include_headers": false, "platform": "linux_ppc64le" } @@ -1567,46 +1567,46 @@ "attributes": { "node_download_auth": {}, "node_repositories": { - "22.22.0-darwin_arm64": [ - "node-v22.22.0-darwin-arm64.tar.gz", - "node-v22.22.0-darwin-arm64", - "5ed4db0fcf1eaf84d91ad12462631d73bf4576c1377e192d222e48026a902640" - ], - "22.22.0-darwin_amd64": [ - "node-v22.22.0-darwin-x64.tar.gz", - "node-v22.22.0-darwin-x64", - "5ea50c9d6dea3dfa3abb66b2656f7a4e1c8cef23432b558d45fb538c7b5dedce" - ], - "22.22.0-linux_arm64": [ - "node-v22.22.0-linux-arm64.tar.xz", - "node-v22.22.0-linux-arm64", - "1bf1eb9ee63ffc4e5d324c0b9b62cf4a289f44332dfef9607cea1a0d9596ba6f" - ], - "22.22.0-linux_ppc64le": [ - "node-v22.22.0-linux-ppc64le.tar.xz", - "node-v22.22.0-linux-ppc64le", - "d83b9957431cc18e1fc143a4b99f89cde7b8a18f53ef392231b4336afd058865" - ], - "22.22.0-linux_s390x": [ - "node-v22.22.0-linux-s390x.tar.xz", - "node-v22.22.0-linux-s390x", - "5aa0e520689448c4233e8d73f284e8e0634fdcd32b479735698494be5641f3e4" - ], - "22.22.0-linux_amd64": [ - "node-v22.22.0-linux-x64.tar.xz", - "node-v22.22.0-linux-x64", - "9aa8e9d2298ab68c600bd6fb86a6c13bce11a4eca1ba9b39d79fa021755d7c37" - ], - "22.22.0-windows_amd64": [ - "node-v22.22.0-win-x64.zip", - "node-v22.22.0-win-x64", - "c97fa376d2becdc8863fcd3ca2dd9a83a9f3468ee7ccf7a6d076ec66a645c77a" + "22.22.3-darwin_arm64": [ + "node-v22.22.3-darwin-arm64.tar.gz", + "node-v22.22.3-darwin-arm64", + "0da7ff74ef8611328c8212f17943368713a2ad953fb7d89a8c8a0eae87c23207" + ], + "22.22.3-darwin_amd64": [ + "node-v22.22.3-darwin-x64.tar.gz", + "node-v22.22.3-darwin-x64", + "45830ba752fa0d892c6dcd640946669801293cac820a33591ded40ac075198ec" + ], + "22.22.3-linux_arm64": [ + "node-v22.22.3-linux-arm64.tar.xz", + "node-v22.22.3-linux-arm64", + "1c4a9933a5e45bc88f54f70b5f91232c127ec49f1a5989d23fb85824c7adf9b7" + ], + "22.22.3-linux_ppc64le": [ + "node-v22.22.3-linux-ppc64le.tar.xz", + "node-v22.22.3-linux-ppc64le", + "edb5478071bd1375e80195ca52f72823998bb5141b1a09e68bc54b3e2eb67754" + ], + "22.22.3-linux_s390x": [ + "node-v22.22.3-linux-s390x.tar.xz", + "node-v22.22.3-linux-s390x", + "ce398c057830d57a24c458177279a17bc51742d5c22dd4cbe97b10dbd43f2617" + ], + "22.22.3-linux_amd64": [ + "node-v22.22.3-linux-x64.tar.xz", + "node-v22.22.3-linux-x64", + "2e5d13569282d016861fae7c8f935e741693c269101a5bebcf761a5376d1f99f" + ], + "22.22.3-windows_amd64": [ + "node-v22.22.3-win-x64.zip", + "node-v22.22.3-win-x64", + "6c8d54f635feff4df76c2ca80f45332eb2ff57d25226edce36592e51a177ee33" ] }, "node_urls": [ "https://nodejs.org/dist/v{version}/{filename}" ], - "node_version": "22.22.0", + "node_version": "22.22.3", "include_headers": false, "platform": "darwin_amd64" } @@ -1616,46 +1616,46 @@ "attributes": { "node_download_auth": {}, "node_repositories": { - "22.22.0-darwin_arm64": [ - "node-v22.22.0-darwin-arm64.tar.gz", - "node-v22.22.0-darwin-arm64", - "5ed4db0fcf1eaf84d91ad12462631d73bf4576c1377e192d222e48026a902640" - ], - "22.22.0-darwin_amd64": [ - "node-v22.22.0-darwin-x64.tar.gz", - "node-v22.22.0-darwin-x64", - "5ea50c9d6dea3dfa3abb66b2656f7a4e1c8cef23432b558d45fb538c7b5dedce" - ], - "22.22.0-linux_arm64": [ - "node-v22.22.0-linux-arm64.tar.xz", - "node-v22.22.0-linux-arm64", - "1bf1eb9ee63ffc4e5d324c0b9b62cf4a289f44332dfef9607cea1a0d9596ba6f" - ], - "22.22.0-linux_ppc64le": [ - "node-v22.22.0-linux-ppc64le.tar.xz", - "node-v22.22.0-linux-ppc64le", - "d83b9957431cc18e1fc143a4b99f89cde7b8a18f53ef392231b4336afd058865" - ], - "22.22.0-linux_s390x": [ - "node-v22.22.0-linux-s390x.tar.xz", - "node-v22.22.0-linux-s390x", - "5aa0e520689448c4233e8d73f284e8e0634fdcd32b479735698494be5641f3e4" - ], - "22.22.0-linux_amd64": [ - "node-v22.22.0-linux-x64.tar.xz", - "node-v22.22.0-linux-x64", - "9aa8e9d2298ab68c600bd6fb86a6c13bce11a4eca1ba9b39d79fa021755d7c37" - ], - "22.22.0-windows_amd64": [ - "node-v22.22.0-win-x64.zip", - "node-v22.22.0-win-x64", - "c97fa376d2becdc8863fcd3ca2dd9a83a9f3468ee7ccf7a6d076ec66a645c77a" + "22.22.3-darwin_arm64": [ + "node-v22.22.3-darwin-arm64.tar.gz", + "node-v22.22.3-darwin-arm64", + "0da7ff74ef8611328c8212f17943368713a2ad953fb7d89a8c8a0eae87c23207" + ], + "22.22.3-darwin_amd64": [ + "node-v22.22.3-darwin-x64.tar.gz", + "node-v22.22.3-darwin-x64", + "45830ba752fa0d892c6dcd640946669801293cac820a33591ded40ac075198ec" + ], + "22.22.3-linux_arm64": [ + "node-v22.22.3-linux-arm64.tar.xz", + "node-v22.22.3-linux-arm64", + "1c4a9933a5e45bc88f54f70b5f91232c127ec49f1a5989d23fb85824c7adf9b7" + ], + "22.22.3-linux_ppc64le": [ + "node-v22.22.3-linux-ppc64le.tar.xz", + "node-v22.22.3-linux-ppc64le", + "edb5478071bd1375e80195ca52f72823998bb5141b1a09e68bc54b3e2eb67754" + ], + "22.22.3-linux_s390x": [ + "node-v22.22.3-linux-s390x.tar.xz", + "node-v22.22.3-linux-s390x", + "ce398c057830d57a24c458177279a17bc51742d5c22dd4cbe97b10dbd43f2617" + ], + "22.22.3-linux_amd64": [ + "node-v22.22.3-linux-x64.tar.xz", + "node-v22.22.3-linux-x64", + "2e5d13569282d016861fae7c8f935e741693c269101a5bebcf761a5376d1f99f" + ], + "22.22.3-windows_amd64": [ + "node-v22.22.3-win-x64.zip", + "node-v22.22.3-win-x64", + "6c8d54f635feff4df76c2ca80f45332eb2ff57d25226edce36592e51a177ee33" ] }, "node_urls": [ "https://nodejs.org/dist/v{version}/{filename}" ], - "node_version": "22.22.0", + "node_version": "22.22.3", "include_headers": false, "platform": "darwin_arm64" } @@ -1665,46 +1665,46 @@ "attributes": { "node_download_auth": {}, "node_repositories": { - "22.22.0-darwin_arm64": [ - "node-v22.22.0-darwin-arm64.tar.gz", - "node-v22.22.0-darwin-arm64", - "5ed4db0fcf1eaf84d91ad12462631d73bf4576c1377e192d222e48026a902640" - ], - "22.22.0-darwin_amd64": [ - "node-v22.22.0-darwin-x64.tar.gz", - "node-v22.22.0-darwin-x64", - "5ea50c9d6dea3dfa3abb66b2656f7a4e1c8cef23432b558d45fb538c7b5dedce" - ], - "22.22.0-linux_arm64": [ - "node-v22.22.0-linux-arm64.tar.xz", - "node-v22.22.0-linux-arm64", - "1bf1eb9ee63ffc4e5d324c0b9b62cf4a289f44332dfef9607cea1a0d9596ba6f" - ], - "22.22.0-linux_ppc64le": [ - "node-v22.22.0-linux-ppc64le.tar.xz", - "node-v22.22.0-linux-ppc64le", - "d83b9957431cc18e1fc143a4b99f89cde7b8a18f53ef392231b4336afd058865" - ], - "22.22.0-linux_s390x": [ - "node-v22.22.0-linux-s390x.tar.xz", - "node-v22.22.0-linux-s390x", - "5aa0e520689448c4233e8d73f284e8e0634fdcd32b479735698494be5641f3e4" - ], - "22.22.0-linux_amd64": [ - "node-v22.22.0-linux-x64.tar.xz", - "node-v22.22.0-linux-x64", - "9aa8e9d2298ab68c600bd6fb86a6c13bce11a4eca1ba9b39d79fa021755d7c37" - ], - "22.22.0-windows_amd64": [ - "node-v22.22.0-win-x64.zip", - "node-v22.22.0-win-x64", - "c97fa376d2becdc8863fcd3ca2dd9a83a9f3468ee7ccf7a6d076ec66a645c77a" + "22.22.3-darwin_arm64": [ + "node-v22.22.3-darwin-arm64.tar.gz", + "node-v22.22.3-darwin-arm64", + "0da7ff74ef8611328c8212f17943368713a2ad953fb7d89a8c8a0eae87c23207" + ], + "22.22.3-darwin_amd64": [ + "node-v22.22.3-darwin-x64.tar.gz", + "node-v22.22.3-darwin-x64", + "45830ba752fa0d892c6dcd640946669801293cac820a33591ded40ac075198ec" + ], + "22.22.3-linux_arm64": [ + "node-v22.22.3-linux-arm64.tar.xz", + "node-v22.22.3-linux-arm64", + "1c4a9933a5e45bc88f54f70b5f91232c127ec49f1a5989d23fb85824c7adf9b7" + ], + "22.22.3-linux_ppc64le": [ + "node-v22.22.3-linux-ppc64le.tar.xz", + "node-v22.22.3-linux-ppc64le", + "edb5478071bd1375e80195ca52f72823998bb5141b1a09e68bc54b3e2eb67754" + ], + "22.22.3-linux_s390x": [ + "node-v22.22.3-linux-s390x.tar.xz", + "node-v22.22.3-linux-s390x", + "ce398c057830d57a24c458177279a17bc51742d5c22dd4cbe97b10dbd43f2617" + ], + "22.22.3-linux_amd64": [ + "node-v22.22.3-linux-x64.tar.xz", + "node-v22.22.3-linux-x64", + "2e5d13569282d016861fae7c8f935e741693c269101a5bebcf761a5376d1f99f" + ], + "22.22.3-windows_amd64": [ + "node-v22.22.3-win-x64.zip", + "node-v22.22.3-win-x64", + "6c8d54f635feff4df76c2ca80f45332eb2ff57d25226edce36592e51a177ee33" ] }, "node_urls": [ "https://nodejs.org/dist/v{version}/{filename}" ], - "node_version": "22.22.0", + "node_version": "22.22.3", "include_headers": false, "platform": "windows_amd64" } @@ -1714,46 +1714,46 @@ "attributes": { "node_download_auth": {}, "node_repositories": { - "22.22.0-darwin_arm64": [ - "node-v22.22.0-darwin-arm64.tar.gz", - "node-v22.22.0-darwin-arm64", - "5ed4db0fcf1eaf84d91ad12462631d73bf4576c1377e192d222e48026a902640" - ], - "22.22.0-darwin_amd64": [ - "node-v22.22.0-darwin-x64.tar.gz", - "node-v22.22.0-darwin-x64", - "5ea50c9d6dea3dfa3abb66b2656f7a4e1c8cef23432b558d45fb538c7b5dedce" - ], - "22.22.0-linux_arm64": [ - "node-v22.22.0-linux-arm64.tar.xz", - "node-v22.22.0-linux-arm64", - "1bf1eb9ee63ffc4e5d324c0b9b62cf4a289f44332dfef9607cea1a0d9596ba6f" - ], - "22.22.0-linux_ppc64le": [ - "node-v22.22.0-linux-ppc64le.tar.xz", - "node-v22.22.0-linux-ppc64le", - "d83b9957431cc18e1fc143a4b99f89cde7b8a18f53ef392231b4336afd058865" - ], - "22.22.0-linux_s390x": [ - "node-v22.22.0-linux-s390x.tar.xz", - "node-v22.22.0-linux-s390x", - "5aa0e520689448c4233e8d73f284e8e0634fdcd32b479735698494be5641f3e4" - ], - "22.22.0-linux_amd64": [ - "node-v22.22.0-linux-x64.tar.xz", - "node-v22.22.0-linux-x64", - "9aa8e9d2298ab68c600bd6fb86a6c13bce11a4eca1ba9b39d79fa021755d7c37" - ], - "22.22.0-windows_amd64": [ - "node-v22.22.0-win-x64.zip", - "node-v22.22.0-win-x64", - "c97fa376d2becdc8863fcd3ca2dd9a83a9f3468ee7ccf7a6d076ec66a645c77a" + "22.22.3-darwin_arm64": [ + "node-v22.22.3-darwin-arm64.tar.gz", + "node-v22.22.3-darwin-arm64", + "0da7ff74ef8611328c8212f17943368713a2ad953fb7d89a8c8a0eae87c23207" + ], + "22.22.3-darwin_amd64": [ + "node-v22.22.3-darwin-x64.tar.gz", + "node-v22.22.3-darwin-x64", + "45830ba752fa0d892c6dcd640946669801293cac820a33591ded40ac075198ec" + ], + "22.22.3-linux_arm64": [ + "node-v22.22.3-linux-arm64.tar.xz", + "node-v22.22.3-linux-arm64", + "1c4a9933a5e45bc88f54f70b5f91232c127ec49f1a5989d23fb85824c7adf9b7" + ], + "22.22.3-linux_ppc64le": [ + "node-v22.22.3-linux-ppc64le.tar.xz", + "node-v22.22.3-linux-ppc64le", + "edb5478071bd1375e80195ca52f72823998bb5141b1a09e68bc54b3e2eb67754" + ], + "22.22.3-linux_s390x": [ + "node-v22.22.3-linux-s390x.tar.xz", + "node-v22.22.3-linux-s390x", + "ce398c057830d57a24c458177279a17bc51742d5c22dd4cbe97b10dbd43f2617" + ], + "22.22.3-linux_amd64": [ + "node-v22.22.3-linux-x64.tar.xz", + "node-v22.22.3-linux-x64", + "2e5d13569282d016861fae7c8f935e741693c269101a5bebcf761a5376d1f99f" + ], + "22.22.3-windows_amd64": [ + "node-v22.22.3-win-x64.zip", + "node-v22.22.3-win-x64", + "6c8d54f635feff4df76c2ca80f45332eb2ff57d25226edce36592e51a177ee33" ] }, "node_urls": [ "https://nodejs.org/dist/v{version}/{filename}" ], - "node_version": "22.22.0", + "node_version": "22.22.3", "include_headers": false, "platform": "windows_arm64" } diff --git a/constants.bzl b/constants.bzl index aab6ca5f6f46..f8d9c5191657 100644 --- a/constants.bzl +++ b/constants.bzl @@ -1,5 +1,5 @@ # Engine versions to stamp in a release package.json -RELEASE_ENGINES_NODE = "^22.22.0 || ^24.15.0 || >=26.0.0" +RELEASE_ENGINES_NODE = "^22.22.3 || ^24.15.0 || >=26.0.0" RELEASE_ENGINES_NPM = "^6.11.0 || ^7.5.6 || >=8.0.0" RELEASE_ENGINES_YARN = ">= 1.13.0" diff --git a/package.json b/package.json index a9c390b52bdd..dce999c30d67 100644 --- a/package.json +++ b/package.json @@ -30,7 +30,7 @@ }, "packageManager": "pnpm@10.33.4", "engines": { - "node": "^22.22.0 || ^24.15.0 || >=26.0.0", + "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": "10.33.4" diff --git a/packages/angular/cli/bin/ng.js b/packages/angular/cli/bin/ng.js index f59fcdcc550d..ac01a0935fc0 100755 --- a/packages/angular/cli/bin/ng.js +++ b/packages/angular/cli/bin/ng.js @@ -57,7 +57,7 @@ if (major === 23 || major === 25) { require('./bootstrap'); } else if (!nodeUtils.isNodeVersionSupported()) { - // Error and exit if less than 22.22 or 24.15.0 + // Error and exit if less than the supported versions. console.error( 'Node.js version ' + process.version + From 80688aaeb2fe5b00372a92bb847d1fd1d436e40d Mon Sep 17 00:00:00 2001 From: Doug Parker Date: Thu, 21 May 2026 15:59:04 -0700 Subject: [PATCH 33/34] release: cut the v22.0.0-rc.1 release --- CHANGELOG.md | 19 +++++++++++++++++++ package.json | 2 +- 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8b0686ec8222..fd109a5694d9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,22 @@ + + +# 22.0.0-rc.1 (2026-05-21) + +### @schematics/angular + +| Commit | Type | Description | +| --------------------------------------------------------------------------------------------------- | ---- | --------------------------------------------------------------- | +| [a7ac8e5f0](https://github.com/angular/angular-cli/commit/a7ac8e5f0a268994a8fcfebbf56f76e994b6207d) | fix | support spy call arguments migration in refactor-jasmine-vitest | + +### @angular/build + +| Commit | Type | Description | +| --------------------------------------------------------------------------------------------------- | ---- | ------------------------------------------------------- | +| [327cc2414](https://github.com/angular/angular-cli/commit/327cc24144ab7e0e36ff3d6e9a67585588f2f69f) | fix | assert that asset input paths are within workspace root | +| [93d352798](https://github.com/angular/angular-cli/commit/93d3527985f8aa1950f62ab42a88c0a74ae0b051) | fix | ignore virtual esbuild paths with (disabled): | + + + # 22.0.0-rc.0 (2026-05-13) diff --git a/package.json b/package.json index dce999c30d67..b08020d2443a 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@angular/devkit-repo", - "version": "22.0.0-rc.0", + "version": "22.0.0-rc.1", "private": true, "description": "Software Development Kit for Angular", "keywords": [ From 6be8b1387537aa67a331babf6c6a829cc5e1b559 Mon Sep 17 00:00:00 2001 From: Angular Robot Date: Fri, 22 May 2026 10:04:43 +0000 Subject: [PATCH 34/34] build: update cross-repo angular dependencies See associated pull request for more information. --- MODULE.bazel | 6 +- MODULE.bazel.lock | 2 +- package.json | 28 +-- packages/angular/ssr/package.json | 12 +- packages/ngtools/webpack/package.json | 4 +- pnpm-lock.yaml | 318 +++++++++++++------------- 6 files changed, 185 insertions(+), 185 deletions(-) diff --git a/MODULE.bazel b/MODULE.bazel index d586a804c268..1f1369fc2f08 100644 --- a/MODULE.bazel +++ b/MODULE.bazel @@ -19,21 +19,21 @@ bazel_dep(name = "aspect_rules_jasmine", version = "2.0.4") bazel_dep(name = "rules_angular") git_override( module_name = "rules_angular", - commit = "48833d6ad8abdac2d90d7704b1ac42416be25d2e", + commit = "2c60e9efea96310da54047f1fee34c3e8bdfff20", remote = "https://github.com/angular/rules_angular.git", ) bazel_dep(name = "devinfra") git_override( module_name = "devinfra", - commit = "bcac3047149f2f7780bbf4bd4865890af6f534c0", + commit = "b932d3d4f63a5a15da0fbf81d61a601682deace7", remote = "https://github.com/angular/dev-infra.git", ) bazel_dep(name = "rules_browsers") git_override( module_name = "rules_browsers", - commit = "19422a0585f62ef061db49d3643ea3891a70d643", + commit = "cf0b8b6bedb144815014d4a2d00d42756d2c23d3", remote = "https://github.com/angular/rules_browsers.git", ) diff --git a/MODULE.bazel.lock b/MODULE.bazel.lock index cec7b61867c5..36fb2ccfa206 100644 --- a/MODULE.bazel.lock +++ b/MODULE.bazel.lock @@ -951,7 +951,7 @@ "@@rules_nodejs+//nodejs:extensions.bzl%node": { "general": { "bzlTransitiveDigest": "oZFClfRhTTwsYzpxVPkOpOt/r0+OzEfEV37au0jFZ0s=", - "usagesDigest": "fynsPIyZ0zhPfB73TUTjVQQVGTFUuMTdQwRXcFzXh2s=", + "usagesDigest": "28HwARS2PIkmyhXuiSyS1jAaG14m/bsZo/Sm+OPn2M8=", "recordedFileInputs": {}, "recordedDirentsInputs": {}, "envVariables": {}, diff --git a/package.json b/package.json index b08020d2443a..9437de564662 100644 --- a/package.json +++ b/package.json @@ -42,23 +42,23 @@ }, "homepage": "https://github.com/angular/angular-cli", "dependencies": { - "@angular/compiler-cli": "22.0.0-rc.0", + "@angular/compiler-cli": "22.0.0-rc.1", "typescript": "6.0.3" }, "devDependencies": { - "@angular/animations": "22.0.0-rc.0", - "@angular/cdk": "22.0.0-rc.0", - "@angular/common": "22.0.0-rc.0", - "@angular/compiler": "22.0.0-rc.0", - "@angular/core": "22.0.0-rc.0", - "@angular/forms": "22.0.0-rc.0", - "@angular/localize": "22.0.0-rc.0", - "@angular/material": "22.0.0-rc.0", - "@angular/ng-dev": "https://github.com/angular/dev-infra-private-ng-dev-builds.git#98b21a0cb6ef6d068a99a9346e89812e3ec9d2b1", - "@angular/platform-browser": "22.0.0-rc.0", - "@angular/platform-server": "22.0.0-rc.0", - "@angular/router": "22.0.0-rc.0", - "@angular/service-worker": "22.0.0-rc.0", + "@angular/animations": "22.0.0-rc.1", + "@angular/cdk": "22.0.0-rc.1", + "@angular/common": "22.0.0-rc.1", + "@angular/compiler": "22.0.0-rc.1", + "@angular/core": "22.0.0-rc.1", + "@angular/forms": "22.0.0-rc.1", + "@angular/localize": "22.0.0-rc.1", + "@angular/material": "22.0.0-rc.1", + "@angular/ng-dev": "https://github.com/angular/dev-infra-private-ng-dev-builds.git#849693f516dcd7811143830933a71dbd501aceb2", + "@angular/platform-browser": "22.0.0-rc.1", + "@angular/platform-server": "22.0.0-rc.1", + "@angular/router": "22.0.0-rc.1", + "@angular/service-worker": "22.0.0-rc.1", "@babel/core": "7.29.0", "@bazel/bazelisk": "1.28.1", "@bazel/buildifier": "8.2.1", diff --git a/packages/angular/ssr/package.json b/packages/angular/ssr/package.json index 4180cab7bcc4..ceeb154e3f34 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.0.0-rc.0", - "@angular/compiler": "22.0.0-rc.0", - "@angular/core": "22.0.0-rc.0", - "@angular/platform-browser": "22.0.0-rc.0", - "@angular/platform-server": "22.0.0-rc.0", - "@angular/router": "22.0.0-rc.0", + "@angular/common": "22.0.0-rc.1", + "@angular/compiler": "22.0.0-rc.1", + "@angular/core": "22.0.0-rc.1", + "@angular/platform-browser": "22.0.0-rc.1", + "@angular/platform-server": "22.0.0-rc.1", + "@angular/router": "22.0.0-rc.1", "@schematics/angular": "workspace:*", "beasties": "0.4.2" }, diff --git a/packages/ngtools/webpack/package.json b/packages/ngtools/webpack/package.json index eb6fedcd5d29..b77a8e053764 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.0.0-rc.0", - "@angular/compiler-cli": "22.0.0-rc.0", + "@angular/compiler": "22.0.0-rc.1", + "@angular/compiler-cli": "22.0.0-rc.1", "typescript": "6.0.3", "webpack": "5.106.2" } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index c8c4ff4f86ee..e48f811fb87b 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -14,8 +14,8 @@ importers: .: dependencies: '@angular/compiler-cli': - specifier: 22.0.0-rc.0 - version: 22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(typescript@6.0.3) + specifier: 22.0.0-rc.1 + version: 22.0.0-rc.1(@angular/compiler@22.0.0-rc.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.0.0-rc.0 - version: 22.0.0-rc.0(@angular/core@22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2)) + specifier: 22.0.0-rc.1 + version: 22.0.0-rc.1(@angular/core@22.0.0-rc.1(@angular/compiler@22.0.0-rc.1)(rxjs@7.8.2)(zone.js@0.16.2)) '@angular/cdk': - specifier: 22.0.0-rc.0 - version: 22.0.0-rc.0(@angular/common@22.0.0-rc.0(@angular/core@22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2))(@angular/platform-browser@22.0.0-rc.0(@angular/animations@22.0.0-rc.0(@angular/core@22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2)))(@angular/common@22.0.0-rc.0(@angular/core@22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2)))(rxjs@7.8.2) + specifier: 22.0.0-rc.1 + version: 22.0.0-rc.1(@angular/common@22.0.0-rc.1(@angular/core@22.0.0-rc.1(@angular/compiler@22.0.0-rc.1)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.0.0-rc.1(@angular/compiler@22.0.0-rc.1)(rxjs@7.8.2)(zone.js@0.16.2))(@angular/platform-browser@22.0.0-rc.1(@angular/animations@22.0.0-rc.1(@angular/core@22.0.0-rc.1(@angular/compiler@22.0.0-rc.1)(rxjs@7.8.2)(zone.js@0.16.2)))(@angular/common@22.0.0-rc.1(@angular/core@22.0.0-rc.1(@angular/compiler@22.0.0-rc.1)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.0.0-rc.1(@angular/compiler@22.0.0-rc.1)(rxjs@7.8.2)(zone.js@0.16.2)))(rxjs@7.8.2) '@angular/common': - specifier: 22.0.0-rc.0 - version: 22.0.0-rc.0(@angular/core@22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2) + specifier: 22.0.0-rc.1 + version: 22.0.0-rc.1(@angular/core@22.0.0-rc.1(@angular/compiler@22.0.0-rc.1)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2) '@angular/compiler': - specifier: 22.0.0-rc.0 - version: 22.0.0-rc.0 + specifier: 22.0.0-rc.1 + version: 22.0.0-rc.1 '@angular/core': - specifier: 22.0.0-rc.0 - version: 22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2) + specifier: 22.0.0-rc.1 + version: 22.0.0-rc.1(@angular/compiler@22.0.0-rc.1)(rxjs@7.8.2)(zone.js@0.16.2) '@angular/forms': - specifier: 22.0.0-rc.0 - version: 22.0.0-rc.0(@angular/common@22.0.0-rc.0(@angular/core@22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2))(@angular/platform-browser@22.0.0-rc.0(@angular/animations@22.0.0-rc.0(@angular/core@22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2)))(@angular/common@22.0.0-rc.0(@angular/core@22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2)))(rxjs@7.8.2) + specifier: 22.0.0-rc.1 + version: 22.0.0-rc.1(@angular/common@22.0.0-rc.1(@angular/core@22.0.0-rc.1(@angular/compiler@22.0.0-rc.1)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.0.0-rc.1(@angular/compiler@22.0.0-rc.1)(rxjs@7.8.2)(zone.js@0.16.2))(@angular/platform-browser@22.0.0-rc.1(@angular/animations@22.0.0-rc.1(@angular/core@22.0.0-rc.1(@angular/compiler@22.0.0-rc.1)(rxjs@7.8.2)(zone.js@0.16.2)))(@angular/common@22.0.0-rc.1(@angular/core@22.0.0-rc.1(@angular/compiler@22.0.0-rc.1)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.0.0-rc.1(@angular/compiler@22.0.0-rc.1)(rxjs@7.8.2)(zone.js@0.16.2)))(rxjs@7.8.2) '@angular/localize': - specifier: 22.0.0-rc.0 - version: 22.0.0-rc.0(@angular/compiler-cli@22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(typescript@6.0.3))(@angular/compiler@22.0.0-rc.0) + specifier: 22.0.0-rc.1 + version: 22.0.0-rc.1(@angular/compiler-cli@22.0.0-rc.1(@angular/compiler@22.0.0-rc.1)(typescript@6.0.3))(@angular/compiler@22.0.0-rc.1) '@angular/material': - specifier: 22.0.0-rc.0 - version: 22.0.0-rc.0(b11ecddb61371acc147801b64fc28dc6) + specifier: 22.0.0-rc.1 + version: 22.0.0-rc.1(1accdefd456d74b3b7d2dbdb1ea5e0bc) '@angular/ng-dev': - specifier: https://github.com/angular/dev-infra-private-ng-dev-builds.git#98b21a0cb6ef6d068a99a9346e89812e3ec9d2b1 - version: https://codeload.github.com/angular/dev-infra-private-ng-dev-builds/tar.gz/98b21a0cb6ef6d068a99a9346e89812e3ec9d2b1(@modelcontextprotocol/sdk@1.29.0(zod@4.4.2)) + specifier: https://github.com/angular/dev-infra-private-ng-dev-builds.git#849693f516dcd7811143830933a71dbd501aceb2 + version: https://codeload.github.com/angular/dev-infra-private-ng-dev-builds/tar.gz/849693f516dcd7811143830933a71dbd501aceb2(@modelcontextprotocol/sdk@1.29.0(zod@4.4.2)) '@angular/platform-browser': - specifier: 22.0.0-rc.0 - version: 22.0.0-rc.0(@angular/animations@22.0.0-rc.0(@angular/core@22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2)))(@angular/common@22.0.0-rc.0(@angular/core@22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2)) + specifier: 22.0.0-rc.1 + version: 22.0.0-rc.1(@angular/animations@22.0.0-rc.1(@angular/core@22.0.0-rc.1(@angular/compiler@22.0.0-rc.1)(rxjs@7.8.2)(zone.js@0.16.2)))(@angular/common@22.0.0-rc.1(@angular/core@22.0.0-rc.1(@angular/compiler@22.0.0-rc.1)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.0.0-rc.1(@angular/compiler@22.0.0-rc.1)(rxjs@7.8.2)(zone.js@0.16.2)) '@angular/platform-server': - specifier: 22.0.0-rc.0 - version: 22.0.0-rc.0(@angular/common@22.0.0-rc.0(@angular/core@22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/compiler@22.0.0-rc.0)(@angular/core@22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2))(@angular/platform-browser@22.0.0-rc.0(@angular/animations@22.0.0-rc.0(@angular/core@22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2)))(@angular/common@22.0.0-rc.0(@angular/core@22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2)))(rxjs@7.8.2) + specifier: 22.0.0-rc.1 + version: 22.0.0-rc.1(@angular/common@22.0.0-rc.1(@angular/core@22.0.0-rc.1(@angular/compiler@22.0.0-rc.1)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/compiler@22.0.0-rc.1)(@angular/core@22.0.0-rc.1(@angular/compiler@22.0.0-rc.1)(rxjs@7.8.2)(zone.js@0.16.2))(@angular/platform-browser@22.0.0-rc.1(@angular/animations@22.0.0-rc.1(@angular/core@22.0.0-rc.1(@angular/compiler@22.0.0-rc.1)(rxjs@7.8.2)(zone.js@0.16.2)))(@angular/common@22.0.0-rc.1(@angular/core@22.0.0-rc.1(@angular/compiler@22.0.0-rc.1)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.0.0-rc.1(@angular/compiler@22.0.0-rc.1)(rxjs@7.8.2)(zone.js@0.16.2)))(rxjs@7.8.2) '@angular/router': - specifier: 22.0.0-rc.0 - version: 22.0.0-rc.0(@angular/common@22.0.0-rc.0(@angular/core@22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2))(@angular/platform-browser@22.0.0-rc.0(@angular/animations@22.0.0-rc.0(@angular/core@22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2)))(@angular/common@22.0.0-rc.0(@angular/core@22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2)))(rxjs@7.8.2) + specifier: 22.0.0-rc.1 + version: 22.0.0-rc.1(@angular/common@22.0.0-rc.1(@angular/core@22.0.0-rc.1(@angular/compiler@22.0.0-rc.1)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.0.0-rc.1(@angular/compiler@22.0.0-rc.1)(rxjs@7.8.2)(zone.js@0.16.2))(@angular/platform-browser@22.0.0-rc.1(@angular/animations@22.0.0-rc.1(@angular/core@22.0.0-rc.1(@angular/compiler@22.0.0-rc.1)(rxjs@7.8.2)(zone.js@0.16.2)))(@angular/common@22.0.0-rc.1(@angular/core@22.0.0-rc.1(@angular/compiler@22.0.0-rc.1)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.0.0-rc.1(@angular/compiler@22.0.0-rc.1)(rxjs@7.8.2)(zone.js@0.16.2)))(rxjs@7.8.2) '@angular/service-worker': - specifier: 22.0.0-rc.0 - version: 22.0.0-rc.0(@angular/core@22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2) + specifier: 22.0.0-rc.1 + version: 22.0.0-rc.1(@angular/core@22.0.0-rc.1(@angular/compiler@22.0.0-rc.1)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2) '@babel/core': specifier: 7.29.0 version: 7.29.0 @@ -327,13 +327,13 @@ importers: version: 29.1.1 ng-packagr: specifier: 22.0.0-rc.0 - version: 22.0.0-rc.0(@angular/compiler-cli@22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(typescript@6.0.3))(tslib@2.8.1)(typescript@6.0.3) + version: 22.0.0-rc.0(@angular/compiler-cli@22.0.0-rc.1(@angular/compiler@22.0.0-rc.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.5 - version: 4.1.5(@opentelemetry/api@1.9.1)(@types/node@24.12.4)(@vitest/coverage-v8@4.1.5)(jiti@2.7.0)(jsdom@29.1.1)(less@4.6.4)(sass@1.99.0)(terser@5.46.2)(tsx@4.22.1)(yaml@2.9.0) + version: 4.1.5(@opentelemetry/api@1.9.1)(@types/node@24.12.4)(@vitest/coverage-v8@4.1.5)(jiti@2.7.0)(jsdom@29.1.1)(less@4.6.4)(sass@1.99.0)(terser@5.46.2)(tsx@4.22.3)(yaml@2.9.0) packages/angular/build: dependencies: @@ -357,7 +357,7 @@ importers: version: 6.0.12(@types/node@24.12.4) '@vitejs/plugin-basic-ssl': specifier: 2.3.0 - version: 2.3.0(vite@7.3.2(@types/node@24.12.4)(jiti@2.7.0)(less@4.6.4)(sass@1.99.0)(terser@5.46.2)(tsx@4.22.1)(yaml@2.9.0)) + version: 2.3.0(vite@7.3.2(@types/node@24.12.4)(jiti@2.7.0)(less@4.6.4)(sass@1.99.0)(terser@5.46.2)(tsx@4.22.3)(yaml@2.9.0)) beasties: specifier: 0.4.2 version: 0.4.2 @@ -408,7 +408,7 @@ importers: version: 0.2.16 vite: specifier: 7.3.2 - version: 7.3.2(@types/node@24.12.4)(jiti@2.7.0)(less@4.6.4)(sass@1.99.0)(terser@5.46.2)(tsx@4.22.1)(yaml@2.9.0) + version: 7.3.2(@types/node@24.12.4)(jiti@2.7.0)(less@4.6.4)(sass@1.99.0)(terser@5.46.2)(tsx@4.22.3)(yaml@2.9.0) watchpack: specifier: 2.5.1 version: 2.5.1 @@ -430,7 +430,7 @@ importers: version: 4.6.4 ng-packagr: specifier: 22.0.0-rc.0 - version: 22.0.0-rc.0(@angular/compiler-cli@22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(typescript@6.0.3))(tslib@2.8.1)(typescript@6.0.3) + version: 22.0.0-rc.0(@angular/compiler-cli@22.0.0-rc.1(@angular/compiler@22.0.0-rc.1)(typescript@6.0.3))(tslib@2.8.1)(typescript@6.0.3) postcss: specifier: 8.5.14 version: 8.5.14 @@ -442,7 +442,7 @@ importers: version: 7.8.2 vitest: specifier: 4.1.5 - version: 4.1.5(@opentelemetry/api@1.9.1)(@types/node@24.12.4)(@vitest/coverage-v8@4.1.5)(jiti@2.7.0)(jsdom@29.1.1)(less@4.6.4)(sass@1.99.0)(terser@5.46.2)(tsx@4.22.1)(yaml@2.9.0) + version: 4.1.5(@opentelemetry/api@1.9.1)(@types/node@24.12.4)(@vitest/coverage-v8@4.1.5)(jiti@2.7.0)(jsdom@29.1.1)(less@4.6.4)(sass@1.99.0)(terser@5.46.2)(tsx@4.22.3)(yaml@2.9.0) optionalDependencies: lmdb: specifier: 3.5.4 @@ -527,23 +527,23 @@ importers: specifier: workspace:* version: link:../../angular_devkit/schematics '@angular/common': - specifier: 22.0.0-rc.0 - version: 22.0.0-rc.0(@angular/core@22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2) + specifier: 22.0.0-rc.1 + version: 22.0.0-rc.1(@angular/core@22.0.0-rc.1(@angular/compiler@22.0.0-rc.1)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2) '@angular/compiler': - specifier: 22.0.0-rc.0 - version: 22.0.0-rc.0 + specifier: 22.0.0-rc.1 + version: 22.0.0-rc.1 '@angular/core': - specifier: 22.0.0-rc.0 - version: 22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2) + specifier: 22.0.0-rc.1 + version: 22.0.0-rc.1(@angular/compiler@22.0.0-rc.1)(rxjs@7.8.2)(zone.js@0.16.2) '@angular/platform-browser': - specifier: 22.0.0-rc.0 - version: 22.0.0-rc.0(@angular/animations@22.0.0-rc.0(@angular/core@22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2)))(@angular/common@22.0.0-rc.0(@angular/core@22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2)) + specifier: 22.0.0-rc.1 + version: 22.0.0-rc.1(@angular/animations@22.0.0-rc.1(@angular/core@22.0.0-rc.1(@angular/compiler@22.0.0-rc.1)(rxjs@7.8.2)(zone.js@0.16.2)))(@angular/common@22.0.0-rc.1(@angular/core@22.0.0-rc.1(@angular/compiler@22.0.0-rc.1)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.0.0-rc.1(@angular/compiler@22.0.0-rc.1)(rxjs@7.8.2)(zone.js@0.16.2)) '@angular/platform-server': - specifier: 22.0.0-rc.0 - version: 22.0.0-rc.0(@angular/common@22.0.0-rc.0(@angular/core@22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/compiler@22.0.0-rc.0)(@angular/core@22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2))(@angular/platform-browser@22.0.0-rc.0(@angular/animations@22.0.0-rc.0(@angular/core@22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2)))(@angular/common@22.0.0-rc.0(@angular/core@22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2)))(rxjs@7.8.2) + specifier: 22.0.0-rc.1 + version: 22.0.0-rc.1(@angular/common@22.0.0-rc.1(@angular/core@22.0.0-rc.1(@angular/compiler@22.0.0-rc.1)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/compiler@22.0.0-rc.1)(@angular/core@22.0.0-rc.1(@angular/compiler@22.0.0-rc.1)(rxjs@7.8.2)(zone.js@0.16.2))(@angular/platform-browser@22.0.0-rc.1(@angular/animations@22.0.0-rc.1(@angular/core@22.0.0-rc.1(@angular/compiler@22.0.0-rc.1)(rxjs@7.8.2)(zone.js@0.16.2)))(@angular/common@22.0.0-rc.1(@angular/core@22.0.0-rc.1(@angular/compiler@22.0.0-rc.1)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.0.0-rc.1(@angular/compiler@22.0.0-rc.1)(rxjs@7.8.2)(zone.js@0.16.2)))(rxjs@7.8.2) '@angular/router': - specifier: 22.0.0-rc.0 - version: 22.0.0-rc.0(@angular/common@22.0.0-rc.0(@angular/core@22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2))(@angular/platform-browser@22.0.0-rc.0(@angular/animations@22.0.0-rc.0(@angular/core@22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2)))(@angular/common@22.0.0-rc.0(@angular/core@22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2)))(rxjs@7.8.2) + specifier: 22.0.0-rc.1 + version: 22.0.0-rc.1(@angular/common@22.0.0-rc.1(@angular/core@22.0.0-rc.1(@angular/compiler@22.0.0-rc.1)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.0.0-rc.1(@angular/compiler@22.0.0-rc.1)(rxjs@7.8.2)(zone.js@0.16.2))(@angular/platform-browser@22.0.0-rc.1(@angular/animations@22.0.0-rc.1(@angular/core@22.0.0-rc.1(@angular/compiler@22.0.0-rc.1)(rxjs@7.8.2)(zone.js@0.16.2)))(@angular/common@22.0.0-rc.1(@angular/core@22.0.0-rc.1(@angular/compiler@22.0.0-rc.1)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.0.0-rc.1(@angular/compiler@22.0.0-rc.1)(rxjs@7.8.2)(zone.js@0.16.2)))(rxjs@7.8.2) '@schematics/angular': specifier: workspace:* version: link:../../schematics/angular @@ -730,7 +730,7 @@ importers: version: 3.0.4(bufferutil@4.1.0)(utf-8-validate@6.0.6) ng-packagr: specifier: 22.0.0-rc.0 - version: 22.0.0-rc.0(@angular/compiler-cli@22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(typescript@6.0.3))(tslib@2.8.1)(typescript@6.0.3) + version: 22.0.0-rc.0(@angular/compiler-cli@22.0.0-rc.1(@angular/compiler@22.0.0-rc.1)(typescript@6.0.3))(tslib@2.8.1)(typescript@6.0.3) undici: specifier: 8.2.0 version: 8.2.0 @@ -822,11 +822,11 @@ importers: specifier: workspace:0.0.0-PLACEHOLDER version: link:../../angular_devkit/core '@angular/compiler': - specifier: 22.0.0-rc.0 - version: 22.0.0-rc.0 + specifier: 22.0.0-rc.1 + version: 22.0.0-rc.1 '@angular/compiler-cli': - specifier: 22.0.0-rc.0 - version: 22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(typescript@6.0.3) + specifier: 22.0.0-rc.1 + version: 22.0.0-rc.1(@angular/compiler@22.0.0-rc.1)(typescript@6.0.3) typescript: specifier: 6.0.3 version: 6.0.3 @@ -935,47 +935,47 @@ packages: resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} engines: {node: '>=6.0.0'} - '@angular/animations@22.0.0-rc.0': - resolution: {integrity: sha512-2voJV4M6uGsV9jYFfIb/2N3ZHc7WFtB2KKnsdr7U4/b6NZJRPofeO7/06+6hL1bK72K4I/N+Z6o2fqmeAzitRg==} + '@angular/animations@22.0.0-rc.1': + resolution: {integrity: sha512-F/JEs1juldeuxszTIT/lWaSsK7zIxdlgXwNFv0GlBMmkX0SnuuTSf/h3rzLJ8EvZ1MaemjcJyz3vH+Fth0Dwmw==} engines: {node: ^22.22.0 || ^24.13.1 || >=26.0.0} peerDependencies: - '@angular/core': 22.0.0-rc.0 + '@angular/core': 22.0.0-rc.1 - '@angular/cdk@22.0.0-rc.0': - resolution: {integrity: sha512-YDFXp7UF0sU8yhKUL3TQyxAZydAZheqULroCo19t88Pku3pl4VEy+bLAsaP6CgI3s04aohm/N/P2QG7QlNKfCw==} + '@angular/cdk@22.0.0-rc.1': + resolution: {integrity: sha512-kJAUre+r3Pb+Hghh63G7XduvPxD6uIFCfaSBAdKsTP7VYEwCD0fuvJD8uQxnetv0RakEHLjPnrZ7ajV8tcFUEA==} peerDependencies: '@angular/common': ^22.0.0-0 || ^22.1.0-0 || ^22.2.0-0 || ^22.3.0-0 || ^23.0.0-0 '@angular/core': ^22.0.0-0 || ^22.1.0-0 || ^22.2.0-0 || ^22.3.0-0 || ^23.0.0-0 '@angular/platform-browser': ^22.0.0-0 || ^22.1.0-0 || ^22.2.0-0 || ^22.3.0-0 || ^23.0.0-0 rxjs: ^6.5.3 || ^7.4.0 - '@angular/common@22.0.0-rc.0': - resolution: {integrity: sha512-CXANdqoAdkzBi5yqABUMbGW7RP8oOASBYA3CzvRLQbu1Cq0hMmkexaJtjmOTMl2kDyEkNK0vE+8mVAVdt8Cw0w==} + '@angular/common@22.0.0-rc.1': + resolution: {integrity: sha512-IOrl4MfIt1mqLJRj3ELab5rOxwt7T8BzFtqg/eDV7pkJ6NPYH+FVOrvI2oH59WUxPEJCaUV6KalamFVZr7l3Kg==} engines: {node: ^22.22.0 || ^24.13.1 || >=26.0.0} peerDependencies: - '@angular/core': 22.0.0-rc.0 + '@angular/core': 22.0.0-rc.1 rxjs: ^6.5.3 || ^7.4.0 - '@angular/compiler-cli@22.0.0-rc.0': - resolution: {integrity: sha512-swhOCT+bwWKJSqNobGOhTw6uxBVOhRF0SN9DpvUYCDVjG/q7eDEKMRAUJ5sg+Iez7w9BOLUfSz2cCXhr7zgpVw==} + '@angular/compiler-cli@22.0.0-rc.1': + resolution: {integrity: sha512-yWznFdmosmrBqt9fRQtkBpjXTZA65t+5DSt0UgtJ0eLdS6T5/7zM9p03pwmF+32HhW8UGq2t7tUEFcwG95d+qw==} engines: {node: ^22.22.0 || ^24.13.1 || >=26.0.0} hasBin: true peerDependencies: - '@angular/compiler': 22.0.0-rc.0 + '@angular/compiler': 22.0.0-rc.1 typescript: '>=6.0 <6.1' peerDependenciesMeta: typescript: optional: true - '@angular/compiler@22.0.0-rc.0': - resolution: {integrity: sha512-eaOfLUJDBr6mtvuUKKS25TWbhnwhAKIml+tonkIEZtBpp2wfbuM3MIRZAntSbAJQaKHJj4oI82mBTKFuJo022Q==} + '@angular/compiler@22.0.0-rc.1': + resolution: {integrity: sha512-BVBgGS6rVnIJ3ot4O87/tw1YSx+gC5fG8ag7PbQjAF5SKKbj1PrVHo0DUoxEXLLPhkIXJ1tccDG2LnfKcCLxcg==} engines: {node: ^22.22.0 || ^24.13.1 || >=26.0.0} - '@angular/core@22.0.0-rc.0': - resolution: {integrity: sha512-+P2hVciCEH3MuXTXIuFiGpvcCivgCXB3agCakWHQ7rMiEmRB2oILTSKH5rRPlwPyoETPwfPeVn7tiAAaOuuGFg==} + '@angular/core@22.0.0-rc.1': + resolution: {integrity: sha512-mwiS07LAqZfpW5lmnTnGEGcZM0f9Rsp2YfQKmilnLUt2NTDTHLEwJmVBIkUatYkRLNhFiNbNO3gXynQA8kysSA==} engines: {node: ^22.22.0 || ^24.13.1 || >=26.0.0} peerDependencies: - '@angular/compiler': 22.0.0-rc.0 + '@angular/compiler': 22.0.0-rc.1 rxjs: ^6.5.3 || ^7.4.0 zone.js: ~0.15.0 || ~0.16.0 peerDependenciesMeta: @@ -984,74 +984,74 @@ packages: zone.js: optional: true - '@angular/forms@22.0.0-rc.0': - resolution: {integrity: sha512-FIXEVK+tvL8lHIsbUHa1Lot9obpJme0pmh2k9//dTKoPgiODJ8Hg4CIKwMllk4RsSukQwvZzjghvvkQ8vUXnyw==} + '@angular/forms@22.0.0-rc.1': + resolution: {integrity: sha512-mdyLKVxaF/rBRJ4YLxWYX1cm6MX3RMrIPSt26Dvinnx1bmnTnyjA1uicT0UZ9qEhO0a/M+F3dmEECWcaeMTgtQ==} engines: {node: ^22.22.0 || ^24.13.1 || >=26.0.0} peerDependencies: - '@angular/common': 22.0.0-rc.0 - '@angular/core': 22.0.0-rc.0 - '@angular/platform-browser': 22.0.0-rc.0 + '@angular/common': 22.0.0-rc.1 + '@angular/core': 22.0.0-rc.1 + '@angular/platform-browser': 22.0.0-rc.1 rxjs: ^6.5.3 || ^7.4.0 - '@angular/localize@22.0.0-rc.0': - resolution: {integrity: sha512-4h3SnRR4qNbvGOzQCnQVJZI0+Q3szpzobWnHjdgkiIZpab1hTFRmL02joXdLdv+I/Nw8MkFpZIkDv+BjCKwqDw==} + '@angular/localize@22.0.0-rc.1': + resolution: {integrity: sha512-AoJccNAE6z1n23SfG/x1aLgQVXTaQ4Do+cTaiMCdgZvead4nHIsyvaXouG3mb1kta3txN9/1W/Fgr9uB9zIM3g==} engines: {node: ^22.22.0 || ^24.13.1 || >=26.0.0} hasBin: true peerDependencies: - '@angular/compiler': 22.0.0-rc.0 - '@angular/compiler-cli': 22.0.0-rc.0 + '@angular/compiler': 22.0.0-rc.1 + '@angular/compiler-cli': 22.0.0-rc.1 - '@angular/material@22.0.0-rc.0': - resolution: {integrity: sha512-YDmmc83WdjTLAu+avL7bSbzvhsiWj7zq/hWYTwauvlkn8bR4j7eGG16yzV2mDAPsX1MgyK7Z0bl616tzhDo14w==} + '@angular/material@22.0.0-rc.1': + resolution: {integrity: sha512-DoXn/xMFsfcYuKrRFr3QGvTQhcrPgoh3gDJcuHFKK4w7/3brJQaOYOW0aruTBw5/2Z2NE9PHz1wHuswt14iE1g==} peerDependencies: - '@angular/cdk': 22.0.0-rc.0 + '@angular/cdk': 22.0.0-rc.1 '@angular/common': ^22.0.0-0 || ^22.1.0-0 || ^22.2.0-0 || ^22.3.0-0 || ^23.0.0-0 '@angular/core': ^22.0.0-0 || ^22.1.0-0 || ^22.2.0-0 || ^22.3.0-0 || ^23.0.0-0 '@angular/forms': ^22.0.0-0 || ^22.1.0-0 || ^22.2.0-0 || ^22.3.0-0 || ^23.0.0-0 '@angular/platform-browser': ^22.0.0-0 || ^22.1.0-0 || ^22.2.0-0 || ^22.3.0-0 || ^23.0.0-0 rxjs: ^6.5.3 || ^7.4.0 - '@angular/ng-dev@https://codeload.github.com/angular/dev-infra-private-ng-dev-builds/tar.gz/98b21a0cb6ef6d068a99a9346e89812e3ec9d2b1': - resolution: {gitHosted: true, integrity: sha512-AwkT8gIA2duICq9kqxtH7i9nvh4LaJRd8/V1uExEFlTx1LLijdF9Z8hm8WZuJ+idk0MAIQcxwZMp8MeY00y8Xw==, tarball: https://codeload.github.com/angular/dev-infra-private-ng-dev-builds/tar.gz/98b21a0cb6ef6d068a99a9346e89812e3ec9d2b1} - version: 0.0.0-49e2dadc4b17b0ff10a76329065c9b7e1fff3e91 + '@angular/ng-dev@https://codeload.github.com/angular/dev-infra-private-ng-dev-builds/tar.gz/849693f516dcd7811143830933a71dbd501aceb2': + resolution: {gitHosted: true, integrity: sha512-11p4x/olm/A+GcSiMG4TC8oJZ9r6CAinlRtilrXZNwGmDGDEdq0zcpYxCSwZhcFHcBxq4eWpClWZLcMZBeb1dw==, tarball: https://codeload.github.com/angular/dev-infra-private-ng-dev-builds/tar.gz/849693f516dcd7811143830933a71dbd501aceb2} + version: 0.0.0-adae685a338508cb2d4f688e84c4efd3204c7b69 hasBin: true - '@angular/platform-browser@22.0.0-rc.0': - resolution: {integrity: sha512-eYFmQKQzd3lhvJj1Str7zwR42WDa3NvFHMnj4wKkd6v+3Y8QQ3SBCASe3Xidoyt3HOV37rB9NPy6Ogbirovipg==} + '@angular/platform-browser@22.0.0-rc.1': + resolution: {integrity: sha512-POx91GJb8B4TFBGxjUpyHQGGDjE/sNQjH94RkpCRhQypN/UIkxgCwzBRECDfhH9q0jUU275IDpgnSUfxegTPDQ==} engines: {node: ^22.22.0 || ^24.13.1 || >=26.0.0} peerDependencies: - '@angular/animations': 22.0.0-rc.0 - '@angular/common': 22.0.0-rc.0 - '@angular/core': 22.0.0-rc.0 + '@angular/animations': 22.0.0-rc.1 + '@angular/common': 22.0.0-rc.1 + '@angular/core': 22.0.0-rc.1 peerDependenciesMeta: '@angular/animations': optional: true - '@angular/platform-server@22.0.0-rc.0': - resolution: {integrity: sha512-KNgYHtOUl9yB48mdOzK7or2bVP3iEIvpW+rGzQlq70gHfUjR77w0SJWo566wXSFTsnYlt0cA+SyZ070KJwGcPg==} + '@angular/platform-server@22.0.0-rc.1': + resolution: {integrity: sha512-rC9OzOgCCAWjkXscwbJrmwpKnjeUpfUx38dWv+MbEx7N2XUfAqRqoRJds2rZyi6TtUYfcrI7TNoQab61kJSsCA==} engines: {node: ^22.22.0 || ^24.13.1 || >=26.0.0} peerDependencies: - '@angular/common': 22.0.0-rc.0 - '@angular/compiler': 22.0.0-rc.0 - '@angular/core': 22.0.0-rc.0 - '@angular/platform-browser': 22.0.0-rc.0 + '@angular/common': 22.0.0-rc.1 + '@angular/compiler': 22.0.0-rc.1 + '@angular/core': 22.0.0-rc.1 + '@angular/platform-browser': 22.0.0-rc.1 rxjs: ^6.5.3 || ^7.4.0 - '@angular/router@22.0.0-rc.0': - resolution: {integrity: sha512-c0uySQaPja15uRtQN88RlEHrejxgKm25Qj5hjMhob332CQ4/SjHFCmn+VpTx6eCSlCG1Awki/xG/sbcJeK1Usg==} + '@angular/router@22.0.0-rc.1': + resolution: {integrity: sha512-DzfoTMVpk4VbGRLB8ZVr7zDwZiIPtpFsz3KBlpaudDmwJTdWaF0Gr1y3G7fcw+vaqCLL7S3Sm2bO4WnljJLuZA==} engines: {node: ^22.22.0 || ^24.13.1 || >=26.0.0} peerDependencies: - '@angular/common': 22.0.0-rc.0 - '@angular/core': 22.0.0-rc.0 - '@angular/platform-browser': 22.0.0-rc.0 + '@angular/common': 22.0.0-rc.1 + '@angular/core': 22.0.0-rc.1 + '@angular/platform-browser': 22.0.0-rc.1 rxjs: ^6.5.3 || ^7.4.0 - '@angular/service-worker@22.0.0-rc.0': - resolution: {integrity: sha512-LDXbqAFgJCYUAkBnjtbYFR/c7FMzd3XIrJ4XLSv6DzDNJdgYyRJfWBBHBut+GhFfX15GZ368K5n6+LIlS/ks8g==} + '@angular/service-worker@22.0.0-rc.1': + resolution: {integrity: sha512-y7kgcyBUvQOQtm7tFP49Mywy4dUs3t28rU+MsJJnuHx4vwveYAPPxW7SA0qlXz1finpWRCjaZKwOae+OrRF31g==} engines: {node: ^22.22.0 || ^24.13.1 || >=26.0.0} hasBin: true peerDependencies: - '@angular/core': 22.0.0-rc.0 + '@angular/core': 22.0.0-rc.1 rxjs: ^6.5.3 || ^7.4.0 '@asamuzakjp/css-color@5.1.11': @@ -8046,8 +8046,8 @@ packages: tslib@2.8.1: resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} - tsx@4.22.1: - resolution: {integrity: sha512-TvncJykhxAzFCk0VQZKBTClall4Pm7qXDSodb6uxi8QFa8X8mT6ABjxxsQ2opDRYxG7AzcRWXaFtruz5HJKuWg==} + tsx@4.22.3: + resolution: {integrity: sha512-mdoNxBC/cSQObGGVQ5Bpn5i+yv7j68gk3Nfm3wFjcJg3Z0Mix9jzAFfP12prmm5eVGmDKtp0yyArrs0Q+8gZHg==} engines: {node: '>=18.0.0'} hasBin: true @@ -8740,29 +8740,29 @@ snapshots: '@jridgewell/gen-mapping': 0.3.13 '@jridgewell/trace-mapping': 0.3.31 - '@angular/animations@22.0.0-rc.0(@angular/core@22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2))': + '@angular/animations@22.0.0-rc.1(@angular/core@22.0.0-rc.1(@angular/compiler@22.0.0-rc.1)(rxjs@7.8.2)(zone.js@0.16.2))': dependencies: - '@angular/core': 22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2) + '@angular/core': 22.0.0-rc.1(@angular/compiler@22.0.0-rc.1)(rxjs@7.8.2)(zone.js@0.16.2) tslib: 2.8.1 - '@angular/cdk@22.0.0-rc.0(@angular/common@22.0.0-rc.0(@angular/core@22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2))(@angular/platform-browser@22.0.0-rc.0(@angular/animations@22.0.0-rc.0(@angular/core@22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2)))(@angular/common@22.0.0-rc.0(@angular/core@22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2)))(rxjs@7.8.2)': + '@angular/cdk@22.0.0-rc.1(@angular/common@22.0.0-rc.1(@angular/core@22.0.0-rc.1(@angular/compiler@22.0.0-rc.1)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.0.0-rc.1(@angular/compiler@22.0.0-rc.1)(rxjs@7.8.2)(zone.js@0.16.2))(@angular/platform-browser@22.0.0-rc.1(@angular/animations@22.0.0-rc.1(@angular/core@22.0.0-rc.1(@angular/compiler@22.0.0-rc.1)(rxjs@7.8.2)(zone.js@0.16.2)))(@angular/common@22.0.0-rc.1(@angular/core@22.0.0-rc.1(@angular/compiler@22.0.0-rc.1)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.0.0-rc.1(@angular/compiler@22.0.0-rc.1)(rxjs@7.8.2)(zone.js@0.16.2)))(rxjs@7.8.2)': dependencies: - '@angular/common': 22.0.0-rc.0(@angular/core@22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2) - '@angular/core': 22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2) - '@angular/platform-browser': 22.0.0-rc.0(@angular/animations@22.0.0-rc.0(@angular/core@22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2)))(@angular/common@22.0.0-rc.0(@angular/core@22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2)) + '@angular/common': 22.0.0-rc.1(@angular/core@22.0.0-rc.1(@angular/compiler@22.0.0-rc.1)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2) + '@angular/core': 22.0.0-rc.1(@angular/compiler@22.0.0-rc.1)(rxjs@7.8.2)(zone.js@0.16.2) + '@angular/platform-browser': 22.0.0-rc.1(@angular/animations@22.0.0-rc.1(@angular/core@22.0.0-rc.1(@angular/compiler@22.0.0-rc.1)(rxjs@7.8.2)(zone.js@0.16.2)))(@angular/common@22.0.0-rc.1(@angular/core@22.0.0-rc.1(@angular/compiler@22.0.0-rc.1)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.0.0-rc.1(@angular/compiler@22.0.0-rc.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.0.0-rc.0(@angular/core@22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2)': + '@angular/common@22.0.0-rc.1(@angular/core@22.0.0-rc.1(@angular/compiler@22.0.0-rc.1)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2)': dependencies: - '@angular/core': 22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2) + '@angular/core': 22.0.0-rc.1(@angular/compiler@22.0.0-rc.1)(rxjs@7.8.2)(zone.js@0.16.2) rxjs: 7.8.2 tslib: 2.8.1 - '@angular/compiler-cli@22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(typescript@6.0.3)': + '@angular/compiler-cli@22.0.0-rc.1(@angular/compiler@22.0.0-rc.1)(typescript@6.0.3)': dependencies: - '@angular/compiler': 22.0.0-rc.0 + '@angular/compiler': 22.0.0-rc.1 '@babel/core': 7.29.0 '@jridgewell/sourcemap-codec': 1.5.5 chokidar: 5.0.0 @@ -8776,32 +8776,32 @@ snapshots: transitivePeerDependencies: - supports-color - '@angular/compiler@22.0.0-rc.0': + '@angular/compiler@22.0.0-rc.1': dependencies: tslib: 2.8.1 - '@angular/core@22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2)': + '@angular/core@22.0.0-rc.1(@angular/compiler@22.0.0-rc.1)(rxjs@7.8.2)(zone.js@0.16.2)': dependencies: rxjs: 7.8.2 tslib: 2.8.1 optionalDependencies: - '@angular/compiler': 22.0.0-rc.0 + '@angular/compiler': 22.0.0-rc.1 zone.js: 0.16.2 - '@angular/forms@22.0.0-rc.0(@angular/common@22.0.0-rc.0(@angular/core@22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2))(@angular/platform-browser@22.0.0-rc.0(@angular/animations@22.0.0-rc.0(@angular/core@22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2)))(@angular/common@22.0.0-rc.0(@angular/core@22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2)))(rxjs@7.8.2)': + '@angular/forms@22.0.0-rc.1(@angular/common@22.0.0-rc.1(@angular/core@22.0.0-rc.1(@angular/compiler@22.0.0-rc.1)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.0.0-rc.1(@angular/compiler@22.0.0-rc.1)(rxjs@7.8.2)(zone.js@0.16.2))(@angular/platform-browser@22.0.0-rc.1(@angular/animations@22.0.0-rc.1(@angular/core@22.0.0-rc.1(@angular/compiler@22.0.0-rc.1)(rxjs@7.8.2)(zone.js@0.16.2)))(@angular/common@22.0.0-rc.1(@angular/core@22.0.0-rc.1(@angular/compiler@22.0.0-rc.1)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.0.0-rc.1(@angular/compiler@22.0.0-rc.1)(rxjs@7.8.2)(zone.js@0.16.2)))(rxjs@7.8.2)': dependencies: - '@angular/common': 22.0.0-rc.0(@angular/core@22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2) - '@angular/core': 22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2) - '@angular/platform-browser': 22.0.0-rc.0(@angular/animations@22.0.0-rc.0(@angular/core@22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2)))(@angular/common@22.0.0-rc.0(@angular/core@22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2)) + '@angular/common': 22.0.0-rc.1(@angular/core@22.0.0-rc.1(@angular/compiler@22.0.0-rc.1)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2) + '@angular/core': 22.0.0-rc.1(@angular/compiler@22.0.0-rc.1)(rxjs@7.8.2)(zone.js@0.16.2) + '@angular/platform-browser': 22.0.0-rc.1(@angular/animations@22.0.0-rc.1(@angular/core@22.0.0-rc.1(@angular/compiler@22.0.0-rc.1)(rxjs@7.8.2)(zone.js@0.16.2)))(@angular/common@22.0.0-rc.1(@angular/core@22.0.0-rc.1(@angular/compiler@22.0.0-rc.1)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.0.0-rc.1(@angular/compiler@22.0.0-rc.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.2 - '@angular/localize@22.0.0-rc.0(@angular/compiler-cli@22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(typescript@6.0.3))(@angular/compiler@22.0.0-rc.0)': + '@angular/localize@22.0.0-rc.1(@angular/compiler-cli@22.0.0-rc.1(@angular/compiler@22.0.0-rc.1)(typescript@6.0.3))(@angular/compiler@22.0.0-rc.1)': dependencies: - '@angular/compiler': 22.0.0-rc.0 - '@angular/compiler-cli': 22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(typescript@6.0.3) + '@angular/compiler': 22.0.0-rc.1 + '@angular/compiler-cli': 22.0.0-rc.1(@angular/compiler@22.0.0-rc.1)(typescript@6.0.3) '@babel/core': 7.29.0 '@types/babel__core': 7.20.5 tinyglobby: 0.2.16 @@ -8809,17 +8809,17 @@ snapshots: transitivePeerDependencies: - supports-color - '@angular/material@22.0.0-rc.0(b11ecddb61371acc147801b64fc28dc6)': + '@angular/material@22.0.0-rc.1(1accdefd456d74b3b7d2dbdb1ea5e0bc)': dependencies: - '@angular/cdk': 22.0.0-rc.0(@angular/common@22.0.0-rc.0(@angular/core@22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2))(@angular/platform-browser@22.0.0-rc.0(@angular/animations@22.0.0-rc.0(@angular/core@22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2)))(@angular/common@22.0.0-rc.0(@angular/core@22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2)))(rxjs@7.8.2) - '@angular/common': 22.0.0-rc.0(@angular/core@22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2) - '@angular/core': 22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2) - '@angular/forms': 22.0.0-rc.0(@angular/common@22.0.0-rc.0(@angular/core@22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2))(@angular/platform-browser@22.0.0-rc.0(@angular/animations@22.0.0-rc.0(@angular/core@22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2)))(@angular/common@22.0.0-rc.0(@angular/core@22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2)))(rxjs@7.8.2) - '@angular/platform-browser': 22.0.0-rc.0(@angular/animations@22.0.0-rc.0(@angular/core@22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2)))(@angular/common@22.0.0-rc.0(@angular/core@22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2)) + '@angular/cdk': 22.0.0-rc.1(@angular/common@22.0.0-rc.1(@angular/core@22.0.0-rc.1(@angular/compiler@22.0.0-rc.1)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.0.0-rc.1(@angular/compiler@22.0.0-rc.1)(rxjs@7.8.2)(zone.js@0.16.2))(@angular/platform-browser@22.0.0-rc.1(@angular/animations@22.0.0-rc.1(@angular/core@22.0.0-rc.1(@angular/compiler@22.0.0-rc.1)(rxjs@7.8.2)(zone.js@0.16.2)))(@angular/common@22.0.0-rc.1(@angular/core@22.0.0-rc.1(@angular/compiler@22.0.0-rc.1)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.0.0-rc.1(@angular/compiler@22.0.0-rc.1)(rxjs@7.8.2)(zone.js@0.16.2)))(rxjs@7.8.2) + '@angular/common': 22.0.0-rc.1(@angular/core@22.0.0-rc.1(@angular/compiler@22.0.0-rc.1)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2) + '@angular/core': 22.0.0-rc.1(@angular/compiler@22.0.0-rc.1)(rxjs@7.8.2)(zone.js@0.16.2) + '@angular/forms': 22.0.0-rc.1(@angular/common@22.0.0-rc.1(@angular/core@22.0.0-rc.1(@angular/compiler@22.0.0-rc.1)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.0.0-rc.1(@angular/compiler@22.0.0-rc.1)(rxjs@7.8.2)(zone.js@0.16.2))(@angular/platform-browser@22.0.0-rc.1(@angular/animations@22.0.0-rc.1(@angular/core@22.0.0-rc.1(@angular/compiler@22.0.0-rc.1)(rxjs@7.8.2)(zone.js@0.16.2)))(@angular/common@22.0.0-rc.1(@angular/core@22.0.0-rc.1(@angular/compiler@22.0.0-rc.1)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.0.0-rc.1(@angular/compiler@22.0.0-rc.1)(rxjs@7.8.2)(zone.js@0.16.2)))(rxjs@7.8.2) + '@angular/platform-browser': 22.0.0-rc.1(@angular/animations@22.0.0-rc.1(@angular/core@22.0.0-rc.1(@angular/compiler@22.0.0-rc.1)(rxjs@7.8.2)(zone.js@0.16.2)))(@angular/common@22.0.0-rc.1(@angular/core@22.0.0-rc.1(@angular/compiler@22.0.0-rc.1)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.0.0-rc.1(@angular/compiler@22.0.0-rc.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/98b21a0cb6ef6d068a99a9346e89812e3ec9d2b1(@modelcontextprotocol/sdk@1.29.0(zod@4.4.2))': + '@angular/ng-dev@https://codeload.github.com/angular/dev-infra-private-ng-dev-builds/tar.gz/849693f516dcd7811143830933a71dbd501aceb2(@modelcontextprotocol/sdk@1.29.0(zod@4.4.2))': dependencies: '@actions/core': 3.0.1 '@conventional-changelog/git-client': 2.7.0(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.4.0) @@ -8867,7 +8867,7 @@ snapshots: nock: 14.0.15 semver: 7.8.0 supports-color: 10.2.2 - tsx: 4.22.1 + tsx: 4.22.3 typed-graphqlify: 3.1.6 typescript: 6.0.3 utf-8-validate: 6.0.6 @@ -8879,35 +8879,35 @@ snapshots: - '@modelcontextprotocol/sdk' - '@react-native-async-storage/async-storage' - '@angular/platform-browser@22.0.0-rc.0(@angular/animations@22.0.0-rc.0(@angular/core@22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2)))(@angular/common@22.0.0-rc.0(@angular/core@22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2))': + '@angular/platform-browser@22.0.0-rc.1(@angular/animations@22.0.0-rc.1(@angular/core@22.0.0-rc.1(@angular/compiler@22.0.0-rc.1)(rxjs@7.8.2)(zone.js@0.16.2)))(@angular/common@22.0.0-rc.1(@angular/core@22.0.0-rc.1(@angular/compiler@22.0.0-rc.1)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.0.0-rc.1(@angular/compiler@22.0.0-rc.1)(rxjs@7.8.2)(zone.js@0.16.2))': dependencies: - '@angular/common': 22.0.0-rc.0(@angular/core@22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2) - '@angular/core': 22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2) + '@angular/common': 22.0.0-rc.1(@angular/core@22.0.0-rc.1(@angular/compiler@22.0.0-rc.1)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2) + '@angular/core': 22.0.0-rc.1(@angular/compiler@22.0.0-rc.1)(rxjs@7.8.2)(zone.js@0.16.2) tslib: 2.8.1 optionalDependencies: - '@angular/animations': 22.0.0-rc.0(@angular/core@22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2)) + '@angular/animations': 22.0.0-rc.1(@angular/core@22.0.0-rc.1(@angular/compiler@22.0.0-rc.1)(rxjs@7.8.2)(zone.js@0.16.2)) - '@angular/platform-server@22.0.0-rc.0(@angular/common@22.0.0-rc.0(@angular/core@22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/compiler@22.0.0-rc.0)(@angular/core@22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2))(@angular/platform-browser@22.0.0-rc.0(@angular/animations@22.0.0-rc.0(@angular/core@22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2)))(@angular/common@22.0.0-rc.0(@angular/core@22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2)))(rxjs@7.8.2)': + '@angular/platform-server@22.0.0-rc.1(@angular/common@22.0.0-rc.1(@angular/core@22.0.0-rc.1(@angular/compiler@22.0.0-rc.1)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/compiler@22.0.0-rc.1)(@angular/core@22.0.0-rc.1(@angular/compiler@22.0.0-rc.1)(rxjs@7.8.2)(zone.js@0.16.2))(@angular/platform-browser@22.0.0-rc.1(@angular/animations@22.0.0-rc.1(@angular/core@22.0.0-rc.1(@angular/compiler@22.0.0-rc.1)(rxjs@7.8.2)(zone.js@0.16.2)))(@angular/common@22.0.0-rc.1(@angular/core@22.0.0-rc.1(@angular/compiler@22.0.0-rc.1)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.0.0-rc.1(@angular/compiler@22.0.0-rc.1)(rxjs@7.8.2)(zone.js@0.16.2)))(rxjs@7.8.2)': dependencies: - '@angular/common': 22.0.0-rc.0(@angular/core@22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2) - '@angular/compiler': 22.0.0-rc.0 - '@angular/core': 22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2) - '@angular/platform-browser': 22.0.0-rc.0(@angular/animations@22.0.0-rc.0(@angular/core@22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2)))(@angular/common@22.0.0-rc.0(@angular/core@22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2)) + '@angular/common': 22.0.0-rc.1(@angular/core@22.0.0-rc.1(@angular/compiler@22.0.0-rc.1)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2) + '@angular/compiler': 22.0.0-rc.1 + '@angular/core': 22.0.0-rc.1(@angular/compiler@22.0.0-rc.1)(rxjs@7.8.2)(zone.js@0.16.2) + '@angular/platform-browser': 22.0.0-rc.1(@angular/animations@22.0.0-rc.1(@angular/core@22.0.0-rc.1(@angular/compiler@22.0.0-rc.1)(rxjs@7.8.2)(zone.js@0.16.2)))(@angular/common@22.0.0-rc.1(@angular/core@22.0.0-rc.1(@angular/compiler@22.0.0-rc.1)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.0.0-rc.1(@angular/compiler@22.0.0-rc.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.0.0-rc.0(@angular/common@22.0.0-rc.0(@angular/core@22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2))(@angular/platform-browser@22.0.0-rc.0(@angular/animations@22.0.0-rc.0(@angular/core@22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2)))(@angular/common@22.0.0-rc.0(@angular/core@22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2)))(rxjs@7.8.2)': + '@angular/router@22.0.0-rc.1(@angular/common@22.0.0-rc.1(@angular/core@22.0.0-rc.1(@angular/compiler@22.0.0-rc.1)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.0.0-rc.1(@angular/compiler@22.0.0-rc.1)(rxjs@7.8.2)(zone.js@0.16.2))(@angular/platform-browser@22.0.0-rc.1(@angular/animations@22.0.0-rc.1(@angular/core@22.0.0-rc.1(@angular/compiler@22.0.0-rc.1)(rxjs@7.8.2)(zone.js@0.16.2)))(@angular/common@22.0.0-rc.1(@angular/core@22.0.0-rc.1(@angular/compiler@22.0.0-rc.1)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.0.0-rc.1(@angular/compiler@22.0.0-rc.1)(rxjs@7.8.2)(zone.js@0.16.2)))(rxjs@7.8.2)': dependencies: - '@angular/common': 22.0.0-rc.0(@angular/core@22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2) - '@angular/core': 22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2) - '@angular/platform-browser': 22.0.0-rc.0(@angular/animations@22.0.0-rc.0(@angular/core@22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2)))(@angular/common@22.0.0-rc.0(@angular/core@22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2)) + '@angular/common': 22.0.0-rc.1(@angular/core@22.0.0-rc.1(@angular/compiler@22.0.0-rc.1)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2) + '@angular/core': 22.0.0-rc.1(@angular/compiler@22.0.0-rc.1)(rxjs@7.8.2)(zone.js@0.16.2) + '@angular/platform-browser': 22.0.0-rc.1(@angular/animations@22.0.0-rc.1(@angular/core@22.0.0-rc.1(@angular/compiler@22.0.0-rc.1)(rxjs@7.8.2)(zone.js@0.16.2)))(@angular/common@22.0.0-rc.1(@angular/core@22.0.0-rc.1(@angular/compiler@22.0.0-rc.1)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.0.0-rc.1(@angular/compiler@22.0.0-rc.1)(rxjs@7.8.2)(zone.js@0.16.2)) rxjs: 7.8.2 tslib: 2.8.1 - '@angular/service-worker@22.0.0-rc.0(@angular/core@22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2)': + '@angular/service-worker@22.0.0-rc.1(@angular/core@22.0.0-rc.1(@angular/compiler@22.0.0-rc.1)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2)': dependencies: - '@angular/core': 22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2) + '@angular/core': 22.0.0-rc.1(@angular/compiler@22.0.0-rc.1)(rxjs@7.8.2)(zone.js@0.16.2) rxjs: 7.8.2 tslib: 2.8.1 @@ -12064,9 +12064,9 @@ snapshots: lodash: 4.18.1 minimatch: 7.4.9 - '@vitejs/plugin-basic-ssl@2.3.0(vite@7.3.2(@types/node@24.12.4)(jiti@2.7.0)(less@4.6.4)(sass@1.99.0)(terser@5.46.2)(tsx@4.22.1)(yaml@2.9.0))': + '@vitejs/plugin-basic-ssl@2.3.0(vite@7.3.2(@types/node@24.12.4)(jiti@2.7.0)(less@4.6.4)(sass@1.99.0)(terser@5.46.2)(tsx@4.22.3)(yaml@2.9.0))': dependencies: - vite: 7.3.2(@types/node@24.12.4)(jiti@2.7.0)(less@4.6.4)(sass@1.99.0)(terser@5.46.2)(tsx@4.22.1)(yaml@2.9.0) + vite: 7.3.2(@types/node@24.12.4)(jiti@2.7.0)(less@4.6.4)(sass@1.99.0)(terser@5.46.2)(tsx@4.22.3)(yaml@2.9.0) '@vitest/coverage-v8@4.1.5(vitest@4.1.5)': dependencies: @@ -12080,7 +12080,7 @@ snapshots: obug: 2.1.1 std-env: 4.1.0 tinyrainbow: 3.1.0 - vitest: 4.1.5(@opentelemetry/api@1.9.1)(@types/node@24.12.4)(@vitest/coverage-v8@4.1.5)(jiti@2.7.0)(jsdom@29.1.1)(less@4.6.4)(sass@1.99.0)(terser@5.46.2)(tsx@4.22.1)(yaml@2.9.0) + vitest: 4.1.5(@opentelemetry/api@1.9.1)(@types/node@24.12.4)(@vitest/coverage-v8@4.1.5)(jiti@2.7.0)(jsdom@29.1.1)(less@4.6.4)(sass@1.99.0)(terser@5.46.2)(tsx@4.22.3)(yaml@2.9.0) '@vitest/expect@4.1.5': dependencies: @@ -12091,13 +12091,13 @@ snapshots: chai: 6.2.2 tinyrainbow: 3.1.0 - '@vitest/mocker@4.1.5(vite@7.3.2(@types/node@24.12.4)(jiti@2.7.0)(less@4.6.4)(sass@1.99.0)(terser@5.46.2)(tsx@4.22.1)(yaml@2.9.0))': + '@vitest/mocker@4.1.5(vite@7.3.2(@types/node@24.12.4)(jiti@2.7.0)(less@4.6.4)(sass@1.99.0)(terser@5.46.2)(tsx@4.22.3)(yaml@2.9.0))': dependencies: '@vitest/spy': 4.1.5 estree-walker: 3.0.3 magic-string: 0.30.21 optionalDependencies: - vite: 7.3.2(@types/node@24.12.4)(jiti@2.7.0)(less@4.6.4)(sass@1.99.0)(terser@5.46.2)(tsx@4.22.1)(yaml@2.9.0) + vite: 7.3.2(@types/node@24.12.4)(jiti@2.7.0)(less@4.6.4)(sass@1.99.0)(terser@5.46.2)(tsx@4.22.3)(yaml@2.9.0) '@vitest/pretty-format@4.1.5': dependencies: @@ -15271,10 +15271,10 @@ snapshots: netmask@2.1.1: {} - ng-packagr@22.0.0-rc.0(@angular/compiler-cli@22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(typescript@6.0.3))(tslib@2.8.1)(typescript@6.0.3): + ng-packagr@22.0.0-rc.0(@angular/compiler-cli@22.0.0-rc.1(@angular/compiler@22.0.0-rc.1)(typescript@6.0.3))(tslib@2.8.1)(typescript@6.0.3): dependencies: '@ampproject/remapping': 2.3.0 - '@angular/compiler-cli': 22.0.0-rc.0(@angular/compiler@22.0.0-rc.0)(typescript@6.0.3) + '@angular/compiler-cli': 22.0.0-rc.1(@angular/compiler@22.0.0-rc.1)(typescript@6.0.3) '@rollup/plugin-json': 6.1.0(rollup@4.60.2) '@rollup/wasm-node': 4.60.2 ajv: 8.20.0 @@ -16939,7 +16939,7 @@ snapshots: tslib@2.8.1: {} - tsx@4.22.1: + tsx@4.22.3: dependencies: esbuild: 0.28.0 optionalDependencies: @@ -17189,7 +17189,7 @@ snapshots: core-util-is: 1.0.2 extsprintf: 1.3.0 - vite@7.3.2(@types/node@24.12.4)(jiti@2.7.0)(less@4.6.4)(sass@1.99.0)(terser@5.46.2)(tsx@4.22.1)(yaml@2.9.0): + vite@7.3.2(@types/node@24.12.4)(jiti@2.7.0)(less@4.6.4)(sass@1.99.0)(terser@5.46.2)(tsx@4.22.3)(yaml@2.9.0): dependencies: esbuild: 0.27.7 fdir: 6.5.0(picomatch@4.0.4) @@ -17204,13 +17204,13 @@ snapshots: less: 4.6.4 sass: 1.99.0 terser: 5.46.2 - tsx: 4.22.1 + tsx: 4.22.3 yaml: 2.9.0 - vitest@4.1.5(@opentelemetry/api@1.9.1)(@types/node@24.12.4)(@vitest/coverage-v8@4.1.5)(jiti@2.7.0)(jsdom@29.1.1)(less@4.6.4)(sass@1.99.0)(terser@5.46.2)(tsx@4.22.1)(yaml@2.9.0): + vitest@4.1.5(@opentelemetry/api@1.9.1)(@types/node@24.12.4)(@vitest/coverage-v8@4.1.5)(jiti@2.7.0)(jsdom@29.1.1)(less@4.6.4)(sass@1.99.0)(terser@5.46.2)(tsx@4.22.3)(yaml@2.9.0): dependencies: '@vitest/expect': 4.1.5 - '@vitest/mocker': 4.1.5(vite@7.3.2(@types/node@24.12.4)(jiti@2.7.0)(less@4.6.4)(sass@1.99.0)(terser@5.46.2)(tsx@4.22.1)(yaml@2.9.0)) + '@vitest/mocker': 4.1.5(vite@7.3.2(@types/node@24.12.4)(jiti@2.7.0)(less@4.6.4)(sass@1.99.0)(terser@5.46.2)(tsx@4.22.3)(yaml@2.9.0)) '@vitest/pretty-format': 4.1.5 '@vitest/runner': 4.1.5 '@vitest/snapshot': 4.1.5 @@ -17227,7 +17227,7 @@ snapshots: tinyexec: 1.1.2 tinyglobby: 0.2.16 tinyrainbow: 3.1.0 - vite: 7.3.2(@types/node@24.12.4)(jiti@2.7.0)(less@4.6.4)(sass@1.99.0)(terser@5.46.2)(tsx@4.22.1)(yaml@2.9.0) + vite: 7.3.2(@types/node@24.12.4)(jiti@2.7.0)(less@4.6.4)(sass@1.99.0)(terser@5.46.2)(tsx@4.22.3)(yaml@2.9.0) why-is-node-running: 2.3.0 optionalDependencies: '@opentelemetry/api': 1.9.1