Compare commits

..

79 Commits

Author SHA1 Message Date
Andrew Scott b2b903957a release: cut the v21.2.2 release 2026-03-09 11:11:43 -07:00
Matthieu Riegler bd72571583 refactor(devtools): prevent spamming the message bus
This commit adds some state on the bus to prevent sending unecessary messages to the main window.

(cherry picked from commit 263b819a75)
2026-03-09 10:46:08 -07:00
Kam 628f3f99db docs: add Turkish community translation of Angular documentation
add a link to the community-driven Turkish translation of Angular
documentation to make it easier for Turkish-speaking developers to
discover localized docs.

The translation project is maintained by the community and hosted at:
https://github.com/erkamyaman/angular-tr

Providing documentation in developers' native languages helps lower
the barrier to entry and supports wider Angular adoption in the
Turkish-speaking developer community.

(cherry picked from commit 03465360bd)
2026-03-09 10:29:25 -07:00
hawkgs 79ac570c26 refactor(devtools): fix browser-specific styles infra
Fix browser-specific styles infrastructure. PR #62786 cleans up part of the code, but there are still services that attempt to load these stylesheets on `main`.

(cherry picked from commit ed3dc10fea)
2026-03-09 10:22:02 -07:00
Angular Robot 276c12a349 build: update dependency node to v22.22.1
See associated pull request for more information.
2026-03-06 15:32:15 -08:00
Angular Robot 104ac117ea docs: update cross-repo adev docs
Updated Angular adev cross repo docs files.
2026-03-06 15:04:42 -08:00
Angular Robot c2a74548d9 build: update all github actions
See associated pull request for more information.
2026-03-06 14:36:16 -08:00
Kristiyan Kostadinov e7d1d8def3 refactor(core): add tracing for component creation
Adds tracing support for component creations.

(cherry picked from commit c19066c741)
2026-03-06 17:48:27 +00:00
Kristiyan Kostadinov 4a390b6c73 refactor(core): track the tracing service in the LView environment
Adds the `TracingService` to the `LView[ENVIRONMENT]` so we don't have to inject it everywhere.

(cherry picked from commit e433ba9a80)
2026-03-06 17:48:27 +00:00
Anushka Geeta Singh 5a486a65cf docs(router): Add example of relative navigation and multiple array values
Adds an example to docs with relative navigation and multiple values in
the commands array.

(cherry picked from commit 418cb61f2f)
2026-03-06 17:47:44 +00:00
Kristiyan Kostadinov c822bf8e76 fix(compiler-cli): always parenthesize object literals in TCB
This is a follow-up to #67381 which introduced a subtle bug where depending on the type checking configuration, we may put an object literal directly in the TCB body which the TS compiler ends up interpreting as a block. These changes resolve the issue by always wrapping the literal in parentheses.
2026-03-05 14:12:25 -08:00
Kristiyan Kostadinov 31e2c99007 refactor(compiler-cli): resolve presubmit issues
Resolves issues caught during the presubmit.
2026-03-05 14:12:25 -08:00
Kristiyan Kostadinov f8b6bd0cbe refactor(compiler-cli): escape quotes used in string expressions
TypeScript has functionality that automatically escapes quotes in string literals. These changes update the places where we may need to do the same ourselves.
2026-03-05 14:12:25 -08:00
Kristiyan Kostadinov 5349b027b8 refactor(compiler-cli): delete unused utilities
Deletes utilities that we no longer use.
2026-03-05 14:12:25 -08:00
Kristiyan Kostadinov 8f8d67dc57 refactor(compiler-cli): initial decoupling from TypeScript factory APIs
Initial pass to move usages of TS `factory` APIs to the new `TcbExpr`.
2026-03-05 14:12:25 -08:00
Kristiyan Kostadinov 23153a06dd refactor(compiler-cli): introduce new primitive for generating TCB code
Introduces the `TcbExpr` class that will be used to generate TCB code without going through TypeScript's factory APIs.
2026-03-05 14:12:25 -08:00
Alan Agius fd3b4413f3 docs: add a new section on nonces and caching considerations to the security guide.
(cherry picked from commit e5f99edda5)
2026-03-05 18:03:35 +00:00
Leon Senft 670d1660c4 feat(forms): add 'blur' option to debounce rule
Expands the `debounce` rule configuration to accept `'blur'`. When this option
is provided, the rule will delay model synchronization until the field loses
focus (is touched). This introduces a debouncer that defers resolution
until the framework automatically aborts pending debounces upon touch events.

(cherry picked from commit c767d678cf)
2026-03-05 17:55:18 +00:00
Angular Robot 8ca0237d99 build: update cross-repo angular dependencies
See associated pull request for more information.
2026-03-04 16:27:39 -08:00
Joey Perrott 3576019c0f build: no longer require release mode for releases
This commit updates the github.mjs configuration to set requireReleaseModeForRelease to false, removing the requirement to use release mode for releases in the angular/angular repository.

(cherry picked from commit a6941adce8)
2026-03-04 22:48:59 +00:00
Doug Parker 05d022d5e6 fix(compiler-cli): ignore generated ngDevMode signal branch for code coverage
The Angular compiler unconditionally adds a debug name transform for signals
which generates a conditional on `ngDevMode` (e.g., `ngDevMode ? { debugName: "xyz" } : []`).
During testing, `ngDevMode` is true, so the true branch executes but the
false branch is never executed. Consequently, coverage tools report the
false branch as an untested line/branch, preventing 100% test coverage.

This commit adds a synthetic `/* istanbul ignore next */` comment to the
generated false branch so that Istanbul ignores it. We only include the
istanbul comment (instead of additionally including c8) to focus on the
established standard for Angular CLI/Karma coverage while maintaining
compatibility with modern Vitest setups, since @vitest/coverage-v8 now
natively respects the fallback istanbul comment.

Fixes #64583

(cherry picked from commit dc4cf649b6)
2026-03-04 22:42:57 +00:00
Andrew Scott 1df1697c6e fix(compiler): prevent mutation of children array in RecursiveVisitor
RecursiveVisitor.visitIfBlockBranch was permanently mutating the children array by pushing the expressionAlias into it. This change clones the array before pushing to avoid this side effect.

(cherry picked from commit 72a17afaf3)
2026-03-04 22:41:36 +00:00
Andrew Scott 05476ea21b release: bump VSCode extension version to 21.2.2 (#67449) 2026-03-04 12:40:40 -08:00
Jessica Janiuk f38169d0a7 release: cut the v21.2.1 release 2026-03-04 11:34:05 -08:00
Jessica Janiuk 6d7446bc6c refactor(core): account for shadow roots in animations
This adds a util function to get the proper target, properly accounting for shadow roots.

(cherry picked from commit fda08b7a89)
2026-03-04 18:16:43 +00:00
SkyZeroZx c25c84d7dc docs: add customization options for browser URL in routing guide
(cherry picked from commit 9208421290)
2026-03-04 18:10:29 +00:00
Angular Robot f4160c2073 build: update cross-repo angular dependencies
See associated pull request for more information.
2026-03-04 10:01:57 -08:00
Jessica Janiuk 93c6dc6395 Revert "refactor(http): Improves base64 encoding/decoding with feature detection (#67002)"
This reverts commit aafeb1d2bd.

(cherry picked from commit 5338b5912c)
2026-03-04 17:19:14 +00:00
Jessica Janiuk 76431ed3e3 Revert "fix(http): correctly cache blob responses in transfer cache (#67002)"
This reverts commit 1f057afaac.

(cherry picked from commit 7eb33713b9)
2026-03-04 17:19:14 +00:00
Jessica Janiuk b4ec3cc4e4 fix(core): prevent child animation elements from being orphaned
When routing between two different routes, child animations were not finishing, causing elements to be left behind in the dom. The fix ensures the proper fallback is handled to avoid automatically cancelled custom events. This ensures the animation-fallback cancelling the animation actually completes, and ensures the element is removed.

fixes: #67400
(cherry picked from commit 9e64147b73)
2026-03-04 16:21:41 +00:00
Angular Robot 84e79f5add build: update pnpm to v10.30.3
See associated pull request for more information.
2026-03-04 08:03:41 -08:00
SkyZeroZx 2eecf0d9a2 docs: add documentation for dynamic validation schemas
(cherry picked from commit 9fa36d1a71)
2026-03-04 16:01:36 +00:00
Kristiyan Kostadinov da57d1af73 build: use TypeScript 5.9 for patch builds
Partially rolls back to using TypeScript 5.9 for the builds on the patch branch, because we bundle our TypeScript version with the language service which can introduce unexpected breakages for users.

Note that we still allow users to install TypeScript 6.
2026-03-04 07:59:23 -08:00
Georgi Serev 58ea4d2ee8 docs(docs-infra): add Azerbaijani community translation
Add https://angular.az (Azerbaijani) to the community translations section.

(cherry picked from commit e8676b5412)
2026-03-04 15:58:23 +00:00
SkyZeroZx 277ade97ac fix(http): correctly cache blob responses in transfer cache (#67002)
Previously, Blob values were passed to `Uint8Array` this resulted in silently producing an empty array (length = 0) without throwing an error, leading to empty cached data

PR Close #67002
2026-03-04 15:56:59 +00:00
SkyZeroZx aeb9b819d2 refactor(http): Improves base64 encoding/decoding with feature detection (#67002)
Use feature detection for `Uint8Array.prototype.toBase64` and
`Uint8Array.fromBase64`, falling back to the existing implementation
when native support is not available

PR Close #67002
2026-03-04 15:56:59 +00:00
Angular Robot 657d532ad1 build: update dependency preact-render-to-string to v6.6.6
See associated pull request for more information.
2026-03-03 14:48:18 -08:00
Angular Robot 8dafd2413a build: update dependency aspect_rules_jasmine to v2.0.4
See associated pull request for more information.
2026-03-03 14:46:02 -08:00
Angular Robot 796b9a714a build: update cross-repo angular dependencies
See associated pull request for more information.
2026-03-03 14:22:51 -08:00
Krueger01 dd551b1ff3 refactor(compiler-cli): update old angular.io references to angular.dev
Update comment references from the old site angular.io to the new site
angular.dev.

(cherry picked from commit 0e9d58ef09)
2026-03-03 22:22:23 +00:00
Andrew Scott 84adb2fb3b refactor(router): Permit deferring commit of traversal navigations
This updates the state manager to allow intercepting and deferring commits of traversal navigations.
The issues that were encountered in the past appear to be resolved in Chrome.
The behavior of redirect is still undefined in this case, so there is an added TODO.

(cherry picked from commit 778b748694)
2026-03-03 22:09:15 +00:00
Angular Robot 98343ea35e build: update cross-repo angular dependencies to b1b4bd0
See associated pull request for more information.
2026-03-03 10:36:54 -08:00
Angular Robot c4226a10d0 build: update cross-repo angular dependencies
See associated pull request for more information.
2026-03-03 09:54:56 -08:00
Sai Kumar Kola 5e545069ac docs: fix side navigation bar foreground colors in both dark and light modes #67379
(cherry picked from commit 46c996a977)
2026-03-03 17:13:11 +00:00
SkyZeroZx ecf0bb4668 test(http): refactors HTTP client tests to use TestBed and providers
Updates HTTP client, JSONP, and XSRF tests to utilize `TestBed` for setup.

(cherry picked from commit ead6bb1f52)
2026-03-03 17:12:39 +00:00
Ben Hong 0d54c5f0e2 docs: modernize testing service guide
(cherry picked from commit 5955738bc4)
2026-03-03 17:12:03 +00:00
Angular Robot 8f6ca1d9f9 build: lock file maintenance
See associated pull request for more information.
2026-03-03 09:08:50 -08:00
Angular Robot 1f51c61372 build: update cross-repo angular dependencies to 2648276
See associated pull request for more information.
2026-03-02 12:22:46 -08:00
Jessica Janiuk f5e9a862c2 refactor(core): ignore infinite animations in animate api
This ensures that when calculating longest animations, we completely ignore infinite animations. This will prevent mistakes with using the API and hopefully catch any unexpected bugs.

fixes: #67350
(cherry picked from commit 9758ea9ee9)
2026-03-02 19:40:19 +00:00
Angular Robot 0c8a2858b9 build: update cross-repo angular dependencies to v21.2.0
See associated pull request for more information.
2026-03-02 11:32:52 -08:00
Matthieu Riegler a79e8afbad docs: update doc for provideZoneChangeDetection
fixes #67209

(cherry picked from commit a2d5048ff3)
2026-03-02 19:02:34 +00:00
SkyZeroZx 7b7faef739 docs: fixed note on event replay
(cherry picked from commit d793ee0bb7)
2026-03-02 18:59:21 +00:00
Joey Perrott 95afc09206 ci: update the path to the labeling github actions
Update the paths to the labeling github actions after the refactor in dev-infra

(cherry picked from commit 787db90e08)
2026-03-02 18:55:57 +00:00
kirjs 23cb9a4291 refactor(forms): address feedback
Refactor the normalizeFormArgs utility to include the internal FieldAdapter

(cherry picked from commit d2e33e86b9)
2026-03-02 16:46:47 +00:00
kirjs 0a863ba03f refactor(forms): hide adapter in public options
Moves adapter to internal options to prevent exposure but keep compatibility.

(cherry picked from commit 985d828f12)
2026-03-02 16:46:47 +00:00
Jessica Janiuk e923d88398 fix(core): Prevent removal of elements during drag and drop
This addresses a reported issue where elements were being fully removed from the DOM during drag and drop operations.

fixes: #67257
(cherry picked from commit 0b59cba85d)
2026-03-02 16:46:13 +00:00
Angular Robot 150f0b3c30 build: update cross-repo angular dependencies to 90e509f
See associated pull request for more information.
2026-03-02 08:42:55 -08:00
Angular Robot fc5f9d03cf build: update pnpm to v10.30.3
See associated pull request for more information.
2026-03-02 08:37:49 -08:00
Angular Robot 498d9cdda4 build: update cross-repo angular dependencies to 9cc4778
See associated pull request for more information.
2026-02-27 09:11:11 -08:00
Angular Robot fd8d29a157 build: update dependency bazel to v8.6.0
See associated pull request for more information.
2026-02-27 09:10:15 -08:00
Jessica Janiuk e2e9a9a531 fix(core): adds transfer cache to httpResource to fix hydration
This should prevent the microtask problem with hydration and httpResource.

fixes: #62897
(cherry picked from commit 88685cb3b6)
2026-02-27 17:09:26 +00:00
Matthieu Riegler 35fd8b567a build: use different default port for dev-app
Same as ADEV, currently the CLI prompts for another port if 4200 is busy but the toolchain doesn't support prompts.

By defaulting to 4201 we avoid regular CLI apps from preventing to run the dev-app

(cherry picked from commit 9bb4f02bef)
2026-02-27 17:04:19 +00:00
Angular Robot 4e9648d184 build: update cross-repo angular dependencies
See associated pull request for more information.
2026-02-26 14:32:59 -08:00
Angular Robot 54a0541013 build: update cross-repo angular dependencies
See associated pull request for more information.
2026-02-26 13:42:33 -08:00
Joey Perrott 9c0587f755 build: update to latest sha of dev-infra repo
Update to the latest sha of the dev-infra repo

(cherry picked from commit d1ebbbe9bc)
2026-02-26 20:42:17 +00:00
Joey Perrott ac06941bcf build: update to latest sha of dev-infra repo
Update to the latest sha of the dev-infra repo

(cherry picked from commit 385b9485c4)
2026-02-26 20:22:25 +00:00
Joey Perrott 907415c801 ci: set up automated issue labeling
Sets up automated issue labeling action

(cherry picked from commit 37b4d16357)
2026-02-26 20:22:25 +00:00
Angular Robot 225a56677e build: update cross-repo angular dependencies
See associated pull request for more information.
2026-02-26 10:40:54 -08:00
Joey Perrott 944181869d ci: set up linting for upcoming agent skills
Add validation/linting on CI for agent skills files

(cherry picked from commit 078da3cbda)
2026-02-26 18:04:30 +00:00
Joey Perrott 3d3e6cbf20 build: update repository locations for bazel rules
The repositories for `rules_sass`, `rules_angular`, and `rules_browsers`
were recently transferred from devversion to the angular organization.
This commit updates the internal bazel module rules to rely on
the new repository locations.

(cherry picked from commit b4f68acaa1)
2026-02-26 17:57:15 +00:00
Angular Robot 2158bf8bb8 build: update cross-repo angular dependencies
See associated pull request for more information.
2026-02-26 09:44:02 -08:00
Matthieu Riegler 1b46b6db18 docs: add info around route level services
fixes #67313

(cherry picked from commit 95f12c87aa)
2026-02-26 16:20:02 +00:00
Matthieu Riegler f23f3e7f5f docs: add mention of identity tracking for field iterations
related to #66711

(cherry picked from commit 7d92d4454b)
2026-02-26 15:52:58 +00:00
Angular Robot 9414da5b7e build: update all github actions
See associated pull request for more information.
2026-02-26 07:50:54 -08:00
Angular Robot 8078abe893 build: update bazel dependencies
See associated pull request for more information.
2026-02-26 07:50:17 -08:00
Joey Perrott 661e800302 release: bump VSCode extension version to 21.2.1 2026-02-25 15:34:03 -08:00
Angular Robot c960a6e492 build: update cross-repo angular dependencies to v21.2.0
See associated pull request for more information.
2026-02-25 15:11:49 -08:00
Angular Robot 2eeb4b5666 build: update cross-repo angular dependencies to v21.2.0
See associated pull request for more information.
2026-02-25 12:47:33 -08:00
Hien 8f19cf8d84 docs(forms): fix casing of 'FormField' to 'formField' in templates
(cherry picked from commit de0cc817cd)
2026-02-25 20:46:06 +00:00
224 changed files with 19534 additions and 8509 deletions
+1 -1
View File
@@ -1 +1 @@
8.5.1
8.6.0
+179 -63
View File
@@ -10271,7 +10271,7 @@ function isKeyOperator(operator) {
function getValues(context3, operator, key, modifier) {
var value = context3[key], result = [];
if (isDefined(value) && value !== "") {
if (typeof value === "string" || typeof value === "number" || typeof value === "boolean") {
if (typeof value === "string" || typeof value === "number" || typeof value === "bigint" || typeof value === "boolean") {
value = value.toString();
if (modifier && modifier !== "*") {
value = value.substring(0, parseInt(modifier, 10));
@@ -10452,6 +10452,108 @@ var endpoint = withDefaults(null, DEFAULTS);
//
var import_fast_content_type_parse = __toESM(require_fast_content_type_parse());
//
var intRegex = /^-?\d+$/;
var noiseValue = /^-?\d+n+$/;
var originalStringify = JSON.stringify;
var originalParse = JSON.parse;
var customFormat = /^-?\d+n$/;
var bigIntsStringify = /([\[:])?"(-?\d+)n"($|([\\n]|\s)*(\s|[\\n])*[,\}\]])/g;
var noiseStringify = /([\[:])?("-?\d+n+)n("$|"([\\n]|\s)*(\s|[\\n])*[,\}\]])/g;
var JSONStringify = (value, replacer, space) => {
if ("rawJSON" in JSON) {
return originalStringify(
value,
(key, value2) => {
if (typeof value2 === "bigint")
return JSON.rawJSON(value2.toString());
if (typeof replacer === "function")
return replacer(key, value2);
if (Array.isArray(replacer) && replacer.includes(key))
return value2;
return value2;
},
space
);
}
if (!value)
return originalStringify(value, replacer, space);
const convertedToCustomJSON = originalStringify(
value,
(key, value2) => {
const isNoise = typeof value2 === "string" && Boolean(value2.match(noiseValue));
if (isNoise)
return value2.toString() + "n";
if (typeof value2 === "bigint")
return value2.toString() + "n";
if (typeof replacer === "function")
return replacer(key, value2);
if (Array.isArray(replacer) && replacer.includes(key))
return value2;
return value2;
},
space
);
const processedJSON = convertedToCustomJSON.replace(
bigIntsStringify,
"$1$2$3"
);
const denoisedJSON = processedJSON.replace(noiseStringify, "$1$2$3");
return denoisedJSON;
};
var isContextSourceSupported = () => JSON.parse("1", (_, __, context3) => !!context3 && context3.source === "1");
var convertMarkedBigIntsReviver = (key, value, context3, userReviver) => {
const isCustomFormatBigInt = typeof value === "string" && value.match(customFormat);
if (isCustomFormatBigInt)
return BigInt(value.slice(0, -1));
const isNoiseValue = typeof value === "string" && value.match(noiseValue);
if (isNoiseValue)
return value.slice(0, -1);
if (typeof userReviver !== "function")
return value;
return userReviver(key, value, context3);
};
var JSONParseV2 = (text, reviver) => {
return JSON.parse(text, (key, value, context3) => {
const isBigNumber = typeof value === "number" && (value > Number.MAX_SAFE_INTEGER || value < Number.MIN_SAFE_INTEGER);
const isInt = context3 && intRegex.test(context3.source);
const isBigInt = isBigNumber && isInt;
if (isBigInt)
return BigInt(context3.source);
if (typeof reviver !== "function")
return value;
return reviver(key, value, context3);
});
};
var MAX_INT = Number.MAX_SAFE_INTEGER.toString();
var MAX_DIGITS = MAX_INT.length;
var stringsOrLargeNumbers = /"(?:\\.|[^"])*"|-?(0|[1-9][0-9]*)(\.[0-9]+)?([eE][+-]?[0-9]+)?/g;
var noiseValueWithQuotes = /^"-?\d+n+"$/;
var JSONParse = (text, reviver) => {
if (!text)
return originalParse(text, reviver);
if (isContextSourceSupported())
return JSONParseV2(text, reviver);
const serializedData = text.replace(
stringsOrLargeNumbers,
(text2, digits, fractional, exponential) => {
const isString = text2[0] === '"';
const isNoise = isString && Boolean(text2.match(noiseValueWithQuotes));
if (isNoise)
return text2.substring(0, text2.length - 1) + 'n"';
const isFractionalOrExponential = fractional || exponential;
const isLessThanMaxSafeInt = digits && (digits.length < MAX_DIGITS || digits.length === MAX_DIGITS && digits <= MAX_INT);
if (isString || isFractionalOrExponential || isLessThanMaxSafeInt)
return text2;
return '"' + text2 + 'n"';
}
);
return originalParse(
serializedData,
(key, value, context3) => convertMarkedBigIntsReviver(key, value, context3, reviver)
);
};
//
var RequestError = class extends Error {
name;
@@ -10492,7 +10594,7 @@ var RequestError = class extends Error {
};
//
var VERSION2 = "10.0.7";
var VERSION2 = "10.0.8";
var defaults_default = {
headers: {
"user-agent": `octokit-request.js/${VERSION2} ${getUserAgent()}`
@@ -10519,7 +10621,7 @@ async function fetchWrapper(requestOptions) {
}
const log = requestOptions.request?.log || console;
const parseSuccessResponseBody = requestOptions.request?.parseSuccessResponseBody !== false;
const body = isPlainObject2(requestOptions.body) || Array.isArray(requestOptions.body) ? JSON.stringify(requestOptions.body) : requestOptions.body;
const body = isPlainObject2(requestOptions.body) || Array.isArray(requestOptions.body) ? JSONStringify(requestOptions.body) : requestOptions.body;
const requestHeaders = Object.fromEntries(
Object.entries(requestOptions.headers).map(([name, value]) => [
name,
@@ -10618,7 +10720,7 @@ async function getResponseData(response) {
let text = "";
try {
text = await response.text();
return JSON.parse(text);
return JSONParse(text);
} catch (err) {
return text;
}
@@ -14135,6 +14237,9 @@ function stripAnsi(string) {
if (typeof string !== "string") {
throw new TypeError(`Expected a \`string\`, got \`${typeof string}\``);
}
if (!string.includes("\x1B") && !string.includes("\x9B")) {
return string;
}
return string.replace(regex, "");
}
var ambiguousRanges = [161, 161, 164, 164, 167, 168, 170, 170, 173, 174, 176, 180, 182, 186, 188, 191, 198, 198, 208, 208, 215, 216, 222, 225, 230, 230, 232, 234, 236, 237, 240, 240, 242, 243, 247, 250, 252, 252, 254, 254, 257, 257, 273, 273, 275, 275, 283, 283, 294, 295, 299, 299, 305, 307, 312, 312, 319, 322, 324, 324, 328, 331, 333, 333, 338, 339, 358, 359, 363, 363, 462, 462, 464, 464, 466, 466, 468, 468, 470, 470, 472, 472, 474, 474, 476, 476, 593, 593, 609, 609, 708, 708, 711, 711, 713, 715, 717, 717, 720, 720, 728, 731, 733, 733, 735, 735, 768, 879, 913, 929, 931, 937, 945, 961, 963, 969, 1025, 1025, 1040, 1103, 1105, 1105, 8208, 8208, 8211, 8214, 8216, 8217, 8220, 8221, 8224, 8226, 8228, 8231, 8240, 8240, 8242, 8243, 8245, 8245, 8251, 8251, 8254, 8254, 8308, 8308, 8319, 8319, 8321, 8324, 8364, 8364, 8451, 8451, 8453, 8453, 8457, 8457, 8467, 8467, 8470, 8470, 8481, 8482, 8486, 8486, 8491, 8491, 8531, 8532, 8539, 8542, 8544, 8555, 8560, 8569, 8585, 8585, 8592, 8601, 8632, 8633, 8658, 8658, 8660, 8660, 8679, 8679, 8704, 8704, 8706, 8707, 8711, 8712, 8715, 8715, 8719, 8719, 8721, 8721, 8725, 8725, 8730, 8730, 8733, 8736, 8739, 8739, 8741, 8741, 8743, 8748, 8750, 8750, 8756, 8759, 8764, 8765, 8776, 8776, 8780, 8780, 8786, 8786, 8800, 8801, 8804, 8807, 8810, 8811, 8814, 8815, 8834, 8835, 8838, 8839, 8853, 8853, 8857, 8857, 8869, 8869, 8895, 8895, 8978, 8978, 9312, 9449, 9451, 9547, 9552, 9587, 9600, 9615, 9618, 9621, 9632, 9633, 9635, 9641, 9650, 9651, 9654, 9655, 9660, 9661, 9664, 9665, 9670, 9672, 9675, 9675, 9678, 9681, 9698, 9701, 9711, 9711, 9733, 9734, 9737, 9737, 9742, 9743, 9756, 9756, 9758, 9758, 9792, 9792, 9794, 9794, 9824, 9825, 9827, 9829, 9831, 9834, 9836, 9837, 9839, 9839, 9886, 9887, 9919, 9919, 9926, 9933, 9935, 9939, 9941, 9953, 9955, 9955, 9960, 9961, 9963, 9969, 9972, 9972, 9974, 9977, 9979, 9980, 9982, 9983, 10045, 10045, 10102, 10111, 11094, 11097, 12872, 12879, 57344, 63743, 65024, 65039, 65533, 65533, 127232, 127242, 127248, 127277, 127280, 127337, 127344, 127373, 127375, 127376, 127387, 127404, 917760, 917999, 983040, 1048573, 1048576, 1114109];
@@ -29043,12 +29148,16 @@ function withDefaults4(oldDefaults, newDefaults) {
}
var endpoint2 = withDefaults4(null, DEFAULTS2);
var import_fast_content_type_parse2 = __toESM2(require_fast_content_type_parse2());
var noiseValue = /^-?\d+n+$/;
var originalStringify = JSON.stringify;
var originalParse = JSON.parse;
var JSONStringify = (value, replacer, space) => {
var intRegex2 = /^-?\d+$/;
var noiseValue2 = /^-?\d+n+$/;
var originalStringify2 = JSON.stringify;
var originalParse2 = JSON.parse;
var customFormat2 = /^-?\d+n$/;
var bigIntsStringify2 = /([\[:])?"(-?\d+)n"($|([\\n]|\s)*(\s|[\\n])*[,\}\]])/g;
var noiseStringify2 = /([\[:])?("-?\d+n+)n("$|"([\\n]|\s)*(\s|[\\n])*[,\}\]])/g;
var JSONStringify2 = (value, replacer, space) => {
if ("rawJSON" in JSON) {
return originalStringify(
return originalStringify2(
value,
(key, value2) => {
if (typeof value2 === "bigint")
@@ -29063,13 +29172,11 @@ var JSONStringify = (value, replacer, space) => {
);
}
if (!value)
return originalStringify(value, replacer, space);
const bigInts = /([\[:])?"(-?\d+)n"($|([\\n]|\s)*(\s|[\\n])*[,\}\]])/g;
const noise = /([\[:])?("-?\d+n+)n("$|"([\\n]|\s)*(\s|[\\n])*[,\}\]])/g;
const convertedToCustomJSON = originalStringify(
return originalStringify2(value, replacer, space);
const convertedToCustomJSON = originalStringify2(
value,
(key, value2) => {
const isNoise = typeof value2 === "string" && Boolean(value2.match(noiseValue));
const isNoise = typeof value2 === "string" && Boolean(value2.match(noiseValue2));
if (isNoise)
return value2.toString() + "n";
if (typeof value2 === "bigint")
@@ -29082,16 +29189,29 @@ var JSONStringify = (value, replacer, space) => {
},
space
);
const processedJSON = convertedToCustomJSON.replace(bigInts, "$1$2$3");
const denoisedJSON = processedJSON.replace(noise, "$1$2$3");
const processedJSON = convertedToCustomJSON.replace(
bigIntsStringify2,
"$1$2$3"
);
const denoisedJSON = processedJSON.replace(noiseStringify2, "$1$2$3");
return denoisedJSON;
};
var isContextSourceSupported = () => JSON.parse("1", (_, __, context3) => !!context3 && context3.source === "1");
var JSONParseV2 = (text, reviver) => {
const intRegex = /^-?\d+$/;
var isContextSourceSupported2 = () => JSON.parse("1", (_, __, context3) => !!context3 && context3.source === "1");
var convertMarkedBigIntsReviver2 = (key, value, context3, userReviver) => {
const isCustomFormatBigInt = typeof value === "string" && value.match(customFormat2);
if (isCustomFormatBigInt)
return BigInt(value.slice(0, -1));
const isNoiseValue = typeof value === "string" && value.match(noiseValue2);
if (isNoiseValue)
return value.slice(0, -1);
if (typeof userReviver !== "function")
return value;
return userReviver(key, value, context3);
};
var JSONParseV22 = (text, reviver) => {
return JSON.parse(text, (key, value, context3) => {
const isBigNumber = typeof value === "number" && (value > Number.MAX_SAFE_INTEGER || value < Number.MIN_SAFE_INTEGER);
const isInt = intRegex.test(context3.source);
const isInt = context3 && intRegex2.test(context3.source);
const isBigInt = isBigNumber && isInt;
if (isBigInt)
return BigInt(context3.source);
@@ -29100,41 +29220,33 @@ var JSONParseV2 = (text, reviver) => {
return reviver(key, value, context3);
});
};
var JSONParse = (text, reviver) => {
var MAX_INT2 = Number.MAX_SAFE_INTEGER.toString();
var MAX_DIGITS2 = MAX_INT2.length;
var stringsOrLargeNumbers2 = /"(?:\\.|[^"])*"|-?(0|[1-9][0-9]*)(\.[0-9]+)?([eE][+-]?[0-9]+)?/g;
var noiseValueWithQuotes2 = /^"-?\d+n+"$/;
var JSONParse2 = (text, reviver) => {
if (!text)
return originalParse(text, reviver);
if (isContextSourceSupported())
return JSONParseV2(text, reviver);
const MAX_INT = Number.MAX_SAFE_INTEGER.toString();
const MAX_DIGITS = MAX_INT.length;
const stringsOrLargeNumbers = /"(?:\\.|[^"])*"|-?(0|[1-9][0-9]*)(\.[0-9]+)?([eE][+-]?[0-9]+)?/g;
const noiseValueWithQuotes = /^"-?\d+n+"$/;
const customFormat = /^-?\d+n$/;
return originalParse2(text, reviver);
if (isContextSourceSupported2())
return JSONParseV22(text, reviver);
const serializedData = text.replace(
stringsOrLargeNumbers,
stringsOrLargeNumbers2,
(text2, digits, fractional, exponential) => {
const isString = text2[0] === '"';
const isNoise = isString && Boolean(text2.match(noiseValueWithQuotes));
const isNoise = isString && Boolean(text2.match(noiseValueWithQuotes2));
if (isNoise)
return text2.substring(0, text2.length - 1) + 'n"';
const isFractionalOrExponential = fractional || exponential;
const isLessThanMaxSafeInt = digits && (digits.length < MAX_DIGITS || digits.length === MAX_DIGITS && digits <= MAX_INT);
const isLessThanMaxSafeInt = digits && (digits.length < MAX_DIGITS2 || digits.length === MAX_DIGITS2 && digits <= MAX_INT2);
if (isString || isFractionalOrExponential || isLessThanMaxSafeInt)
return text2;
return '"' + text2 + 'n"';
}
);
return originalParse(serializedData, (key, value, context3) => {
const isCustomFormatBigInt = typeof value === "string" && Boolean(value.match(customFormat));
if (isCustomFormatBigInt)
return BigInt(value.substring(0, value.length - 1));
const isNoiseValue = typeof value === "string" && Boolean(value.match(noiseValue));
if (isNoiseValue)
return value.substring(0, value.length - 1);
if (typeof reviver !== "function")
return value;
return reviver(key, value, context3);
});
return originalParse2(
serializedData,
(key, value, context3) => convertMarkedBigIntsReviver2(key, value, context3, reviver)
);
};
var RequestError2 = class extends Error {
name;
@@ -29200,7 +29312,7 @@ async function fetchWrapper2(requestOptions) {
}
const log = requestOptions.request?.log || console;
const parseSuccessResponseBody = requestOptions.request?.parseSuccessResponseBody !== false;
const body = isPlainObject22(requestOptions.body) || Array.isArray(requestOptions.body) ? JSONStringify(requestOptions.body) : requestOptions.body;
const body = isPlainObject22(requestOptions.body) || Array.isArray(requestOptions.body) ? JSONStringify2(requestOptions.body) : requestOptions.body;
const requestHeaders = Object.fromEntries(
Object.entries(requestOptions.headers).map(([name, value]) => [
name,
@@ -29299,7 +29411,7 @@ async function getResponseData2(response) {
let text = "";
try {
text = await response.text();
return JSONParse(text);
return JSONParse2(text);
} catch (err) {
return text;
}
@@ -33174,24 +33286,28 @@ var requiresLabels = createTypedObject(RequiresLabel)({
description: "This PR requires a passing TGP before merging is allowed"
}
});
var FeatureLabel = class extends Label {
var MiscLabel = class extends Label {
};
var featureLabels = createTypedObject(FeatureLabel)({
FEATURE_IN_BACKLOG: {
name: "feature: in backlog",
description: "Feature request for which voting has completed and is now in the backlog"
var miscLabels = createTypedObject(MiscLabel)({
FEATURE: {
name: "feature",
description: "Label used to distinguish feature request from other issues"
},
FEATURE_VOTES_REQUIRED: {
name: "feature: votes required",
description: "Feature request which is currently still in the voting phase"
GOOD_FIRST_ISSUE: {
name: "good first issue",
description: "Label noting a good first issue to be worked on by a community member"
},
FEATURE_UNDER_CONSIDERATION: {
name: "feature: under consideration",
description: "Feature request for which voting has completed and the request is now under consideration"
HELP_WANTED: {
name: "help wanted",
description: "Label noting an issue which the team is looking for contribution from the community to fix"
},
FEATURE_INSUFFICIENT_VOTES: {
name: "feature: insufficient votes",
description: "Label to add when the not a sufficient number of votes or comments from unique authors"
RENOVATE_MANAGED: {
name: "renovate managed",
description: "Label noting that a pull request will automatically be managed and rebased by renovate"
},
GEMINI_TRIAGED: {
name: "gemini-triaged",
description: "Label noting that an issue has been triaged by gemini"
}
});
var allLabels = {
@@ -33200,8 +33316,8 @@ var allLabels = {
...mergeLabels,
...targetLabels,
...priorityLabels,
...featureLabels,
...requiresLabels
...requiresLabels,
...miscLabels
};
var import_which = __toESM2(require_lib2());
var import_yaml = __toESM2(require_dist());
@@ -33379,7 +33495,7 @@ tmp/lib/tmp.js:
(* v8 ignore next -- @preserve *)
(* v8 ignore else -- @preserve *)
@angular/ng-dev/bundles/chunk-WPUQDYAV.mjs:
@angular/ng-dev/bundles/chunk-YN3IWAKJ.mjs:
(*! Bundled license information:
yargs-parser/build/lib/string-utils.js:
@@ -33420,7 +33536,7 @@ tmp/lib/tmp.js:
*)
*)
@angular/ng-dev/bundles/chunk-HWMRKQMP.mjs:
@angular/ng-dev/bundles/chunk-34WCNHIG.mjs:
(*! Bundled license information:
@octokit/request-error/dist-src/index.js:
+2 -2
View File
@@ -5,9 +5,9 @@ runs:
using: 'composite'
steps:
- name: Setup Bazel
uses: angular/dev-infra/github-actions/bazel/setup@16c5f6e199e3e1b67ae5a62385d36366bb9a429d
uses: angular/dev-infra/github-actions/bazel/setup@e4dcda13e469f50a6bd92667e2ded8b98173bf2c
- name: Setup Saucelabs Variables
uses: angular/dev-infra/github-actions/saucelabs@16c5f6e199e3e1b67ae5a62385d36366bb9a429d
uses: angular/dev-infra/github-actions/saucelabs@e4dcda13e469f50a6bd92667e2ded8b98173bf2c
- name: Starting Saucelabs tunnel service
shell: bash
run: ./tools/saucelabs/sauce-service.sh run &
+4 -4
View File
@@ -21,17 +21,17 @@ jobs:
(github.event.action == 'synchronize' && contains(github.event.pull_request.labels.*.name, 'adev: preview'))
steps:
- name: Initialize environment
uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@16c5f6e199e3e1b67ae5a62385d36366bb9a429d
uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@e4dcda13e469f50a6bd92667e2ded8b98173bf2c
- name: Setup Bazel
uses: angular/dev-infra/github-actions/bazel/setup@16c5f6e199e3e1b67ae5a62385d36366bb9a429d
uses: angular/dev-infra/github-actions/bazel/setup@e4dcda13e469f50a6bd92667e2ded8b98173bf2c
- name: Setup Bazel RBE
uses: angular/dev-infra/github-actions/bazel/configure-remote@16c5f6e199e3e1b67ae5a62385d36366bb9a429d
uses: angular/dev-infra/github-actions/bazel/configure-remote@e4dcda13e469f50a6bd92667e2ded8b98173bf2c
- name: Install node modules
run: pnpm install --frozen-lockfile
- name: Build adev
# `snapshot-build` config is used to stamp the exact version with sha in the footer.
run: pnpm bazel build //adev:build.production --config=snapshot-build
- uses: angular/dev-infra/github-actions/previews/pack-and-upload-artifact@16c5f6e199e3e1b67ae5a62385d36366bb9a429d
- uses: angular/dev-infra/github-actions/previews/pack-and-upload-artifact@e4dcda13e469f50a6bd92667e2ded8b98173bf2c
with:
workflow-artifact-name: 'adev-preview'
pull-number: '${{github.event.pull_request.number}}'
+1 -1
View File
@@ -40,7 +40,7 @@ jobs:
npx -y firebase-tools@latest target:clear --config adev/firebase.json --project ${{env.PREVIEW_PROJECT}} hosting angular-docs
npx -y firebase-tools@latest target:apply --config adev/firebase.json --project ${{env.PREVIEW_PROJECT}} hosting angular-docs ${{env.PREVIEW_SITE}}
- uses: angular/dev-infra/github-actions/previews/upload-artifacts-to-firebase@16c5f6e199e3e1b67ae5a62385d36366bb9a429d
- uses: angular/dev-infra/github-actions/previews/upload-artifacts-to-firebase@e4dcda13e469f50a6bd92667e2ded8b98173bf2c
with:
github-token: '${{secrets.GITHUB_TOKEN}}'
workflow-artifact-name: 'adev-preview'
@@ -17,6 +17,6 @@ jobs:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with:
persist-credentials: false
- uses: angular/dev-infra/github-actions/branch-manager@16c5f6e199e3e1b67ae5a62385d36366bb9a429d
- uses: angular/dev-infra/github-actions/branch-manager@e4dcda13e469f50a6bd92667e2ded8b98173bf2c
with:
angular-robot-key: ${{ secrets.ANGULAR_ROBOT_PRIVATE_KEY }}
+1 -1
View File
@@ -38,7 +38,7 @@ jobs:
- run: pnpm install --frozen-lockfile
- uses: angular/dev-infra/github-actions/bazel/configure-remote@16c5f6e199e3e1b67ae5a62385d36366bb9a429d
- uses: angular/dev-infra/github-actions/bazel/configure-remote@e4dcda13e469f50a6bd92667e2ded8b98173bf2c
with:
bazelrc: ./.bazelrc.user
+28 -26
View File
@@ -21,7 +21,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Initialize environment
uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@16c5f6e199e3e1b67ae5a62385d36366bb9a429d
uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@e4dcda13e469f50a6bd92667e2ded8b98173bf2c
- name: Install node modules
run: pnpm install --frozen-lockfile
- name: Check code lint
@@ -32,6 +32,8 @@ jobs:
run: pnpm ng-dev pullapprove verify
- name: Validate angular robot configuration
run: pnpm ng-dev ngbot verify
- name: Validate agent skills
run: pnpm ng-dev ai skills validate
- name: Confirm code builds with typescript as expected
run: pnpm check-tooling-setup
@@ -39,13 +41,13 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Initialize environment
uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@16c5f6e199e3e1b67ae5a62385d36366bb9a429d
uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@e4dcda13e469f50a6bd92667e2ded8b98173bf2c
with:
disable-package-manager-cache: true
- name: Setup Bazel
uses: angular/dev-infra/github-actions/bazel/setup@16c5f6e199e3e1b67ae5a62385d36366bb9a429d
uses: angular/dev-infra/github-actions/bazel/setup@e4dcda13e469f50a6bd92667e2ded8b98173bf2c
- name: Setup Bazel RBE
uses: angular/dev-infra/github-actions/bazel/configure-remote@16c5f6e199e3e1b67ae5a62385d36366bb9a429d
uses: angular/dev-infra/github-actions/bazel/configure-remote@e4dcda13e469f50a6bd92667e2ded8b98173bf2c
with:
google_credential: ${{ secrets.RBE_TRUSTED_BUILDS_USER }}
- name: Install node modules
@@ -55,7 +57,7 @@ jobs:
- name: Test build
run: pnpm devtools:build:chrome
- name: Cypress run
uses: cypress-io/github-action@e44ee0fa67251ab7e2d854d85b3a466577f47d14 # v7.1.3
uses: cypress-io/github-action@bc22e01685c56e89e7813fd8e26f33dc47f87e15 # v7.1.5
with:
command: pnpm devtools:test:e2e
start: pnpm bazel run //devtools/src:devserver
@@ -67,11 +69,11 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Initialize environment
uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@16c5f6e199e3e1b67ae5a62385d36366bb9a429d
uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@e4dcda13e469f50a6bd92667e2ded8b98173bf2c
- name: Setup Bazel
uses: angular/dev-infra/github-actions/bazel/setup@16c5f6e199e3e1b67ae5a62385d36366bb9a429d
uses: angular/dev-infra/github-actions/bazel/setup@e4dcda13e469f50a6bd92667e2ded8b98173bf2c
- name: Setup Bazel Remote Caching
uses: angular/dev-infra/github-actions/bazel/configure-remote@16c5f6e199e3e1b67ae5a62385d36366bb9a429d
uses: angular/dev-infra/github-actions/bazel/configure-remote@e4dcda13e469f50a6bd92667e2ded8b98173bf2c
with:
google_credential: ${{ secrets.RBE_TRUSTED_BUILDS_USER }}
- name: Install node modules
@@ -83,11 +85,11 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Initialize environment
uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@16c5f6e199e3e1b67ae5a62385d36366bb9a429d
uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@e4dcda13e469f50a6bd92667e2ded8b98173bf2c
- name: Setup Bazel
uses: angular/dev-infra/github-actions/bazel/setup@16c5f6e199e3e1b67ae5a62385d36366bb9a429d
uses: angular/dev-infra/github-actions/bazel/setup@e4dcda13e469f50a6bd92667e2ded8b98173bf2c
- name: Setup Bazel Remote Caching
uses: angular/dev-infra/github-actions/bazel/configure-remote@16c5f6e199e3e1b67ae5a62385d36366bb9a429d
uses: angular/dev-infra/github-actions/bazel/configure-remote@e4dcda13e469f50a6bd92667e2ded8b98173bf2c
with:
google_credential: ${{ secrets.RBE_TRUSTED_BUILDS_USER }}
- name: Install node modules
@@ -100,11 +102,11 @@ jobs:
labels: ubuntu-latest
steps:
- name: Initialize environment
uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@16c5f6e199e3e1b67ae5a62385d36366bb9a429d
uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@e4dcda13e469f50a6bd92667e2ded8b98173bf2c
- name: Setup Bazel
uses: angular/dev-infra/github-actions/bazel/setup@16c5f6e199e3e1b67ae5a62385d36366bb9a429d
uses: angular/dev-infra/github-actions/bazel/setup@e4dcda13e469f50a6bd92667e2ded8b98173bf2c
- name: Setup Bazel RBE
uses: angular/dev-infra/github-actions/bazel/configure-remote@16c5f6e199e3e1b67ae5a62385d36366bb9a429d
uses: angular/dev-infra/github-actions/bazel/configure-remote@e4dcda13e469f50a6bd92667e2ded8b98173bf2c
with:
google_credential: ${{ secrets.RBE_TRUSTED_BUILDS_USER }}
- name: Install node modules
@@ -119,11 +121,11 @@ jobs:
labels: ubuntu-latest
steps:
- name: Initialize environment
uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@16c5f6e199e3e1b67ae5a62385d36366bb9a429d
uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@e4dcda13e469f50a6bd92667e2ded8b98173bf2c
- name: Setup Bazel
uses: angular/dev-infra/github-actions/bazel/setup@16c5f6e199e3e1b67ae5a62385d36366bb9a429d
uses: angular/dev-infra/github-actions/bazel/setup@e4dcda13e469f50a6bd92667e2ded8b98173bf2c
- name: Setup Bazel RBE
uses: angular/dev-infra/github-actions/bazel/configure-remote@16c5f6e199e3e1b67ae5a62385d36366bb9a429d
uses: angular/dev-infra/github-actions/bazel/configure-remote@e4dcda13e469f50a6bd92667e2ded8b98173bf2c
with:
google_credential: ${{ secrets.RBE_TRUSTED_BUILDS_USER }}
- name: Install node modules
@@ -136,11 +138,11 @@ jobs:
labels: ubuntu-latest
steps:
- name: Initialize environment
uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@16c5f6e199e3e1b67ae5a62385d36366bb9a429d
uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@e4dcda13e469f50a6bd92667e2ded8b98173bf2c
- name: Setup Bazel
uses: angular/dev-infra/github-actions/bazel/setup@16c5f6e199e3e1b67ae5a62385d36366bb9a429d
uses: angular/dev-infra/github-actions/bazel/setup@e4dcda13e469f50a6bd92667e2ded8b98173bf2c
- name: Setup Bazel RBE
uses: angular/dev-infra/github-actions/bazel/configure-remote@16c5f6e199e3e1b67ae5a62385d36366bb9a429d
uses: angular/dev-infra/github-actions/bazel/configure-remote@e4dcda13e469f50a6bd92667e2ded8b98173bf2c
- name: Install node modules
run: pnpm install --frozen-lockfile
- run: echo "https://${{secrets.SNAPSHOT_BUILDS_GITHUB_TOKEN}}:@github.com" > ${HOME}/.git_credentials
@@ -152,11 +154,11 @@ jobs:
labels: ubuntu-latest
steps:
- name: Initialize environment
uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@16c5f6e199e3e1b67ae5a62385d36366bb9a429d
uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@e4dcda13e469f50a6bd92667e2ded8b98173bf2c
- name: Setup Bazel
uses: angular/dev-infra/github-actions/bazel/setup@16c5f6e199e3e1b67ae5a62385d36366bb9a429d
uses: angular/dev-infra/github-actions/bazel/setup@e4dcda13e469f50a6bd92667e2ded8b98173bf2c
- name: Setup Bazel RBE
uses: angular/dev-infra/github-actions/bazel/configure-remote@16c5f6e199e3e1b67ae5a62385d36366bb9a429d
uses: angular/dev-infra/github-actions/bazel/configure-remote@e4dcda13e469f50a6bd92667e2ded8b98173bf2c
with:
google_credential: ${{ secrets.RBE_TRUSTED_BUILDS_USER }}
- name: Install node modules
@@ -206,11 +208,11 @@ jobs:
runs-on: ubuntu-latest-8core
steps:
- name: Initialize environment
uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@16c5f6e199e3e1b67ae5a62385d36366bb9a429d
uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@e4dcda13e469f50a6bd92667e2ded8b98173bf2c
- name: Setup Bazel
uses: angular/dev-infra/github-actions/bazel/setup@16c5f6e199e3e1b67ae5a62385d36366bb9a429d
uses: angular/dev-infra/github-actions/bazel/setup@e4dcda13e469f50a6bd92667e2ded8b98173bf2c
- name: Setup Bazel RBE
uses: angular/dev-infra/github-actions/bazel/configure-remote@16c5f6e199e3e1b67ae5a62385d36366bb9a429d
uses: angular/dev-infra/github-actions/bazel/configure-remote@e4dcda13e469f50a6bd92667e2ded8b98173bf2c
- name: Install node modules
run: pnpm install --frozen-lockfile
- name: Build adev
+15 -3
View File
@@ -3,24 +3,36 @@ name: DevInfra
on:
pull_request_target:
types: [opened, synchronize, reopened]
issues:
types: [opened, reopened]
# Declare default permissions as read only.
permissions:
contents: read
jobs:
labels:
pull_request_labels:
if: github.event_name == 'pull_request_target'
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- uses: angular/dev-infra/github-actions/pull-request-labeling@16c5f6e199e3e1b67ae5a62385d36366bb9a429d
- uses: angular/dev-infra/github-actions/labeling/pull-request@e4dcda13e469f50a6bd92667e2ded8b98173bf2c
with:
angular-robot-key: ${{ secrets.ANGULAR_ROBOT_PRIVATE_KEY }}
labels: '{"requires: TGP": ["packages/core/primitives/**/{*,.*}"]}'
post_approval_changes:
if: github.event_name == 'pull_request_target'
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- uses: angular/dev-infra/github-actions/post-approval-changes@16c5f6e199e3e1b67ae5a62385d36366bb9a429d
- uses: angular/dev-infra/github-actions/post-approval-changes@e4dcda13e469f50a6bd92667e2ded8b98173bf2c
with:
angular-robot-key: ${{ secrets.ANGULAR_ROBOT_PRIVATE_KEY }}
issue_labels:
if: github.event_name == 'issues'
runs-on: ubuntu-latest
steps:
- uses: angular/dev-infra/github-actions/labeling/issue@e4dcda13e469f50a6bd92667e2ded8b98173bf2c
with:
angular-robot-key: ${{ secrets.ANGULAR_ROBOT_PRIVATE_KEY }}
google-generative-ai-key: ${{ secrets.GOOGLE_GENERATIVE_AI_KEY }}
+1 -1
View File
@@ -14,7 +14,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- uses: angular/dev-infra/github-actions/google-internal-tests@16c5f6e199e3e1b67ae5a62385d36366bb9a429d
- uses: angular/dev-infra/github-actions/google-internal-tests@e4dcda13e469f50a6bd92667e2ded8b98173bf2c
with:
run-tests-guide-url: http://go/angular-g3sync-start
github-token: ${{ secrets.GITHUB_TOKEN }}
+4 -4
View File
@@ -13,15 +13,15 @@ jobs:
JOBS: 2
steps:
- name: Initialize environment
uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@16c5f6e199e3e1b67ae5a62385d36366bb9a429d
uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@e4dcda13e469f50a6bd92667e2ded8b98173bf2c
- name: Install node modules
run: pnpm install --frozen-lockfile
- name: Setup Bazel
uses: angular/dev-infra/github-actions/bazel/setup@16c5f6e199e3e1b67ae5a62385d36366bb9a429d
uses: angular/dev-infra/github-actions/bazel/setup@e4dcda13e469f50a6bd92667e2ded8b98173bf2c
- name: Setup Bazel Remote Caching
uses: angular/dev-infra/github-actions/bazel/configure-remote@16c5f6e199e3e1b67ae5a62385d36366bb9a429d
uses: angular/dev-infra/github-actions/bazel/configure-remote@e4dcda13e469f50a6bd92667e2ded8b98173bf2c
- name: Setup Saucelabs Variables
uses: angular/dev-infra/github-actions/saucelabs@16c5f6e199e3e1b67ae5a62385d36366bb9a429d
uses: angular/dev-infra/github-actions/saucelabs@e4dcda13e469f50a6bd92667e2ded8b98173bf2c
- name: Set up Sauce Tunnel Daemon
run: pnpm bazel run //tools/saucelabs-daemon/background-service -- $JOBS &
env:
+1 -1
View File
@@ -9,6 +9,6 @@ jobs:
status:
runs-on: ubuntu-latest
steps:
- uses: angular/dev-infra/github-actions/unified-status-check@16c5f6e199e3e1b67ae5a62385d36366bb9a429d
- uses: angular/dev-infra/github-actions/unified-status-check@e4dcda13e469f50a6bd92667e2ded8b98173bf2c
with:
angular-robot-key: ${{ secrets.ANGULAR_ROBOT_PRIVATE_KEY }}
+3 -3
View File
@@ -21,7 +21,7 @@ jobs:
workflows: ${{ steps.workflows.outputs.workflows }}
steps:
- name: Initialize environment
uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@16c5f6e199e3e1b67ae5a62385d36366bb9a429d
uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@e4dcda13e469f50a6bd92667e2ded8b98173bf2c
- name: Install node modules
run: pnpm install --frozen-lockfile
- id: workflows
@@ -36,9 +36,9 @@ jobs:
workflow: ${{ fromJSON(needs.list.outputs.workflows) }}
steps:
- name: Initialize environment
uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@16c5f6e199e3e1b67ae5a62385d36366bb9a429d
uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@e4dcda13e469f50a6bd92667e2ded8b98173bf2c
- name: Setup Bazel
uses: angular/dev-infra/github-actions/bazel/setup@16c5f6e199e3e1b67ae5a62385d36366bb9a429d
uses: angular/dev-infra/github-actions/bazel/setup@e4dcda13e469f50a6bd92667e2ded8b98173bf2c
- name: Install node modules
run: pnpm install --frozen-lockfile
# We utilize the google-github-actions/auth action to allow us to get an active credential using workflow
+23 -21
View File
@@ -19,7 +19,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Initialize environment
uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@16c5f6e199e3e1b67ae5a62385d36366bb9a429d
uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@e4dcda13e469f50a6bd92667e2ded8b98173bf2c
- name: Install node modules
run: pnpm install --frozen-lockfile
- name: Check code lint
@@ -32,12 +32,14 @@ jobs:
run: pnpm ng-dev ngbot verify
- name: Confirm code builds with typescript as expected
run: pnpm check-tooling-setup
- name: Validate agent skills
run: pnpm ng-dev ai skills validate
- name: Check commit message
run: pnpm ng-dev commit-message validate-range ${{ github.event.pull_request.base.sha }} ${{ github.event.pull_request.head.sha }}
- name: Check code format
run: pnpm ng-dev format changed --check ${{ github.event.pull_request.base.sha }}
- name: Check Package Licenses
uses: angular/dev-infra/github-actions/linting/licenses@16c5f6e199e3e1b67ae5a62385d36366bb9a429d
uses: angular/dev-infra/github-actions/linting/licenses@e4dcda13e469f50a6bd92667e2ded8b98173bf2c
with:
allow-dependencies-licenses: 'pkg:npm/google-protobuf@'
@@ -45,13 +47,13 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Initialize environment
uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@16c5f6e199e3e1b67ae5a62385d36366bb9a429d
uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@e4dcda13e469f50a6bd92667e2ded8b98173bf2c
with:
disable-package-manager-cache: true
- name: Setup Bazel
uses: angular/dev-infra/github-actions/bazel/setup@16c5f6e199e3e1b67ae5a62385d36366bb9a429d
uses: angular/dev-infra/github-actions/bazel/setup@e4dcda13e469f50a6bd92667e2ded8b98173bf2c
- name: Setup Bazel RBE
uses: angular/dev-infra/github-actions/bazel/configure-remote@16c5f6e199e3e1b67ae5a62385d36366bb9a429d
uses: angular/dev-infra/github-actions/bazel/configure-remote@e4dcda13e469f50a6bd92667e2ded8b98173bf2c
- name: Install node modules
run: pnpm install --frozen-lockfile
- name: Run unit tests
@@ -59,7 +61,7 @@ jobs:
- name: Test build
run: pnpm devtools:build:chrome
- name: Cypress run
uses: cypress-io/github-action@e44ee0fa67251ab7e2d854d85b3a466577f47d14 # v7.1.3
uses: cypress-io/github-action@bc22e01685c56e89e7813fd8e26f33dc47f87e15 # v7.1.5
with:
command: pnpm devtools:test:e2e
start: pnpm bazel run //devtools/src:devserver
@@ -71,11 +73,11 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Initialize environment
uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@16c5f6e199e3e1b67ae5a62385d36366bb9a429d
uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@e4dcda13e469f50a6bd92667e2ded8b98173bf2c
- name: Setup Bazel
uses: angular/dev-infra/github-actions/bazel/setup@16c5f6e199e3e1b67ae5a62385d36366bb9a429d
uses: angular/dev-infra/github-actions/bazel/setup@e4dcda13e469f50a6bd92667e2ded8b98173bf2c
- name: Setup Bazel Remote Caching
uses: angular/dev-infra/github-actions/bazel/configure-remote@16c5f6e199e3e1b67ae5a62385d36366bb9a429d
uses: angular/dev-infra/github-actions/bazel/configure-remote@e4dcda13e469f50a6bd92667e2ded8b98173bf2c
- name: Install node modules
run: pnpm install --frozen-lockfile
- name: Run CI tests for framework
@@ -95,11 +97,11 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Initialize environment
uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@16c5f6e199e3e1b67ae5a62385d36366bb9a429d
uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@e4dcda13e469f50a6bd92667e2ded8b98173bf2c
- name: Setup Bazel
uses: angular/dev-infra/github-actions/bazel/setup@16c5f6e199e3e1b67ae5a62385d36366bb9a429d
uses: angular/dev-infra/github-actions/bazel/setup@e4dcda13e469f50a6bd92667e2ded8b98173bf2c
- name: Setup Bazel Remote Caching
uses: angular/dev-infra/github-actions/bazel/configure-remote@16c5f6e199e3e1b67ae5a62385d36366bb9a429d
uses: angular/dev-infra/github-actions/bazel/configure-remote@e4dcda13e469f50a6bd92667e2ded8b98173bf2c
- name: Install node modules
run: pnpm install --frozen-lockfile
- name: Run integration CI tests for framework
@@ -110,11 +112,11 @@ jobs:
labels: ubuntu-latest
steps:
- name: Initialize environment
uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@16c5f6e199e3e1b67ae5a62385d36366bb9a429d
uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@e4dcda13e469f50a6bd92667e2ded8b98173bf2c
- name: Setup Bazel
uses: angular/dev-infra/github-actions/bazel/setup@16c5f6e199e3e1b67ae5a62385d36366bb9a429d
uses: angular/dev-infra/github-actions/bazel/setup@e4dcda13e469f50a6bd92667e2ded8b98173bf2c
- name: Setup Bazel RBE
uses: angular/dev-infra/github-actions/bazel/configure-remote@16c5f6e199e3e1b67ae5a62385d36366bb9a429d
uses: angular/dev-infra/github-actions/bazel/configure-remote@e4dcda13e469f50a6bd92667e2ded8b98173bf2c
- name: Install node modules
run: pnpm install --frozen-lockfile
- name: Run tests
@@ -127,11 +129,11 @@ jobs:
labels: ubuntu-latest
steps:
- name: Initialize environment
uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@16c5f6e199e3e1b67ae5a62385d36366bb9a429d
uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@e4dcda13e469f50a6bd92667e2ded8b98173bf2c
- name: Setup Bazel
uses: angular/dev-infra/github-actions/bazel/setup@16c5f6e199e3e1b67ae5a62385d36366bb9a429d
uses: angular/dev-infra/github-actions/bazel/setup@e4dcda13e469f50a6bd92667e2ded8b98173bf2c
- name: Setup Bazel RBE
uses: angular/dev-infra/github-actions/bazel/configure-remote@16c5f6e199e3e1b67ae5a62385d36366bb9a429d
uses: angular/dev-infra/github-actions/bazel/configure-remote@e4dcda13e469f50a6bd92667e2ded8b98173bf2c
- name: Install node modules
run: pnpm install --frozen-lockfile
- name: Run tests
@@ -142,11 +144,11 @@ jobs:
labels: ubuntu-latest
steps:
- name: Initialize environment
uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@16c5f6e199e3e1b67ae5a62385d36366bb9a429d
uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@e4dcda13e469f50a6bd92667e2ded8b98173bf2c
- name: Setup Bazel
uses: angular/dev-infra/github-actions/bazel/setup@16c5f6e199e3e1b67ae5a62385d36366bb9a429d
uses: angular/dev-infra/github-actions/bazel/setup@e4dcda13e469f50a6bd92667e2ded8b98173bf2c
- name: Setup Bazel RBE
uses: angular/dev-infra/github-actions/bazel/configure-remote@16c5f6e199e3e1b67ae5a62385d36366bb9a429d
uses: angular/dev-infra/github-actions/bazel/configure-remote@e4dcda13e469f50a6bd92667e2ded8b98173bf2c
- name: Install node modules
run: pnpm install --frozen-lockfile
- run: |
+1 -1
View File
@@ -47,6 +47,6 @@ jobs:
# Upload the results to GitHub's code scanning dashboard.
- name: 'Upload to code-scanning'
uses: github/codeql-action/upload-sarif@9e907b5e64f6b83e7804b09294d44122997950d6 # v4.32.3
uses: github/codeql-action/upload-sarif@0d579ffd059c29b07949a3cce3983f0780820c98 # v4.32.6
with:
sarif_file: results.sarif
+1 -1
View File
@@ -9,5 +9,5 @@ export const github = {
name: 'angular',
mainBranchName: 'main',
mergeMode: 'caretaker-only',
requireReleaseModeForRelease: true,
requireReleaseModeForRelease: false,
};
+1 -1
View File
@@ -1 +1 @@
22.22.0
22.22.1
+33
View File
@@ -1,3 +1,36 @@
<a name="21.2.2"></a>
# 21.2.2 (2026-03-09)
### compiler
| Commit | Type | Description |
| -- | -- | -- |
| [1df1697c6e](https://github.com/angular/angular/commit/1df1697c6e3a6b1d302f7692b495146943faa12f) | fix | prevent mutation of children array in RecursiveVisitor |
### compiler-cli
| Commit | Type | Description |
| -- | -- | -- |
| [c822bf8e76](https://github.com/angular/angular/commit/c822bf8e76611afde332b6625f5e7bae2fe9c3f3) | fix | always parenthesize object literals in TCB |
| [05d022d5e6](https://github.com/angular/angular/commit/05d022d5e61cca7ac90d5b2b2ba3fc738b364ad9) | fix | ignore generated ngDevMode signal branch for code coverage |
### forms
| Commit | Type | Description |
| -- | -- | -- |
| [670d1660c4](https://github.com/angular/angular/commit/670d1660c40504e3f55e094c3ebbcccad14163f3) | feat | add 'blur' option to debounce rule |
<!-- CHANGELOG SPLIT MARKER -->
<a name="21.2.1"></a>
# 21.2.1 (2026-03-04)
### core
| Commit | Type | Description |
| -- | -- | -- |
| [e2e9a9a531](https://github.com/angular/angular/commit/e2e9a9a531c9e9a69701e549f28354cc5d5edd77) | fix | adds transfer cache to httpResource to fix hydration |
| [b4ec3cc4e4](https://github.com/angular/angular/commit/b4ec3cc4e41f2948ad0830eb14aa05d14fa3a9ed) | fix | prevent child animation elements from being orphaned |
| [e923d88398](https://github.com/angular/angular/commit/e923d8839868c79989502ab3503e13d93c78516a) | fix | Prevent removal of elements during drag and drop |
### http
| Commit | Type | Description |
| -- | -- | -- |
| [277ade97ac](https://github.com/angular/angular/commit/277ade97ac2a3a7f2a5b513acaa93e7663cdc55f) | fix | correctly cache blob responses in transfer cache ([#67002](https://github.com/angular/angular/pull/67002)) |
<!-- CHANGELOG SPLIT MARKER -->
<a name="21.2.0"></a>
# 21.2.0 (2026-02-25)
### common
+20 -20
View File
@@ -9,23 +9,23 @@ bazel_dep(name = "rules_nodejs", version = "6.7.3")
bazel_dep(name = "aspect_rules_ts", version = "3.8.5")
bazel_dep(name = "aspect_rules_js", version = "2.9.2")
bazel_dep(name = "aspect_rules_esbuild", version = "0.25.0")
bazel_dep(name = "aspect_rules_jasmine", version = "2.0.3")
bazel_dep(name = "aspect_rules_jasmine", version = "2.0.4")
bazel_dep(name = "aspect_rules_rollup", version = "2.0.1")
bazel_dep(name = "bazel_skylib", version = "1.9.0")
bazel_dep(name = "aspect_bazel_lib", version = "2.22.5")
bazel_dep(name = "tar.bzl", version = "0.8.1")
bazel_dep(name = "tar.bzl", version = "0.9.0")
bazel_dep(name = "yq.bzl", version = "0.3.5")
bazel_dep(name = "rules_angular")
git_override(
module_name = "rules_angular",
commit = "d746c4f75e42cffe389d1ab077f4639be2bc78d1",
remote = "https://github.com/devversion/rules_angular.git",
remote = "https://github.com/angular/rules_angular.git",
)
bazel_dep(name = "devinfra")
git_override(
module_name = "devinfra",
commit = "16c5f6e199e3e1b67ae5a62385d36366bb9a429d",
commit = "e4dcda13e469f50a6bd92667e2ded8b98173bf2c",
remote = "https://github.com/angular/dev-infra.git",
)
@@ -33,14 +33,14 @@ bazel_dep(name = "rules_sass")
git_override(
module_name = "rules_sass",
commit = "1184a80751a21af8348f308abc5b38a41f26850e",
remote = "https://github.com/devversion/rules_sass.git",
remote = "https://github.com/angular/rules_sass.git",
)
bazel_dep(name = "rules_browsers")
git_override(
module_name = "rules_browsers",
commit = "ceb52751831f3e6249aba83f688a612e57a8d14a",
remote = "https://github.com/devversion/rules_browsers.git",
commit = "8231142fc5516323b040883bf774ba8362645387",
remote = "https://github.com/angular/rules_browsers.git",
)
yq = use_extension("@yq.bzl//yq:extensions.bzl", "yq")
@@ -49,15 +49,15 @@ use_repo(yq, "yq_toolchains")
node = use_extension("@rules_nodejs//nodejs:extensions.bzl", "node")
node.toolchain(
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.1-darwin_arm64": ("node-v22.22.1-darwin-arm64.tar.gz", "node-v22.22.1-darwin-arm64", "679ad4966339e4ef4900f57996714864e4211b898825bb840c3086c419fbcef2"),
"22.22.1-darwin_amd64": ("node-v22.22.1-darwin-x64.tar.gz", "node-v22.22.1-darwin-x64", "07b13722d558790fca20bb1ecf61bde24b7a4863111f7be77fc57251a407359a"),
"22.22.1-linux_arm64": ("node-v22.22.1-linux-arm64.tar.xz", "node-v22.22.1-linux-arm64", "0f3550d58d45e5d3cf7103d9e3f69937f09fe82fb5dd474c66a5d816fa58c9ee"),
"22.22.1-linux_ppc64le": ("node-v22.22.1-linux-ppc64le.tar.xz", "node-v22.22.1-linux-ppc64le", "a65a44cf0224505f052b90357b763dbc1ea9148f4f5f2284f0596cf2000f819b"),
"22.22.1-linux_s390x": ("node-v22.22.1-linux-s390x.tar.xz", "node-v22.22.1-linux-s390x", "e08b3a73d0bd840e008f589e4be4a2ef3d4a0c59015f4f20a04ed7fc968042a2"),
"22.22.1-linux_amd64": ("node-v22.22.1-linux-x64.tar.xz", "node-v22.22.1-linux-x64", "9a6bc82f9b491279147219f6a18add1e18424dce90d41d2a5fcd69d4924ba3aa"),
"22.22.1-windows_amd64": ("node-v22.22.1-win-x64.zip", "node-v22.22.1-win-x64", "877cb93829e14fffbbc7903e7d8037336c9a79f3ea43c5d0b8c2379b79da56de"),
},
node_version = "22.22.0",
node_version = "22.22.1",
)
use_repo(node, "nodejs_toolchains")
use_repo(node, "nodejs_darwin_amd64")
@@ -71,8 +71,8 @@ use_repo(node, "nodejs_windows_amd64")
pnpm = use_extension("@aspect_rules_js//npm:extensions.bzl", "pnpm")
pnpm.pnpm(
name = "pnpm",
pnpm_version = "10.30.2",
pnpm_version_integrity = "sha512-Ns3HB+e3lAqYjJwez4jQhPhRS1w/CF9TouJEwpIdOyVFvCDdTr4fwkX+7EY7spiuzqemPtH3aAuHfcY3nY0MtA==",
pnpm_version = "10.30.3",
pnpm_version_integrity = "sha512-yWHR4KLY41TsqlFmuCJRZmi39Ey1vZUSLVkN2Bki9gb1RzttI+xKW+Bef80Y6EiNR9l4u+mBhy8RRdBumnQAFw==",
)
use_repo(pnpm, "pnpm")
@@ -117,9 +117,9 @@ use_repo(npm, "npm")
rules_ts_ext = use_extension("@aspect_rules_ts//ts:extensions.bzl", "ext")
rules_ts_ext.deps(
name = "angular_npm_typescript",
# Obtained by: curl --silent https://registry.npmjs.org/typescript/6.0.0-beta | jq -r '.dist.integrity'
ts_integrity = "sha512-CldZdztDpQRLM1HC6WDQjQkQN5Ub5zRau737a1diGh3lPmb9oRsaWHk1y5iqK0o7+1bNJ0oXfEGRkAogFZBL+Q==",
ts_version = "6.0.0-beta",
# Obtained by: curl --silent https://registry.npmjs.org/typescript/5.9.3 | jq -r '.dist.integrity'
ts_integrity = "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==",
ts_version = "5.9.3",
)
use_repo(rules_ts_ext, **{"npm_typescript": "angular_npm_typescript"})
+251 -252
View File
@@ -22,8 +22,8 @@
"https://bcr.bazel.build/modules/aspect_bazel_lib/2.9.3/MODULE.bazel": "66baf724dbae7aff4787bf2245cc188d50cb08e07789769730151c0943587c14",
"https://bcr.bazel.build/modules/aspect_rules_esbuild/0.25.0/MODULE.bazel": "5fef5ec709c837312823f9bcf0f276661e2cb48ad52f17c4e01176bbf1e9bf58",
"https://bcr.bazel.build/modules/aspect_rules_esbuild/0.25.0/source.json": "5e42968c6d23ab8bd95c02634b16864d866334347827cb6a8425b86c11cc4363",
"https://bcr.bazel.build/modules/aspect_rules_jasmine/2.0.3/MODULE.bazel": "1c2e7a2908dbf6640dce9b242369cf48b7018af666485cbae1470b49a9672591",
"https://bcr.bazel.build/modules/aspect_rules_jasmine/2.0.3/source.json": "5619d28f3e99eca53a0ae077cff6c66966d2da2ee8621bc0542af3fb85df128f",
"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/2.4.2/MODULE.bazel": "0d01db38b96d25df7ed952a5e96eac4b3802723d146961974bf020f6dd07591d",
"https://bcr.bazel.build/modules/aspect_rules_js/2.6.2/MODULE.bazel": "ed2a871f4ab8fbde0cab67c425745069d84ea64b64313fa1a2954017326511f5",
@@ -200,7 +200,6 @@
"https://bcr.bazel.build/modules/stardoc/0.7.2/source.json": "58b029e5e901d6802967754adf0a9056747e8176f017cfe3607c0851f4d42216",
"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.8.1/MODULE.bazel": "6ffe8907ed4c555bc94bd35a5a01411cc4470c6dace84f9cf487815409e077d1",
"https://bcr.bazel.build/modules/tar.bzl/0.9.0/MODULE.bazel": "452a22d7f02b1c9d7a22ab25edf20f46f3e1101f0f67dc4bfbf9a474ddf02445",
"https://bcr.bazel.build/modules/tar.bzl/0.9.0/source.json": "c732760a374831a2cf5b08839e4be75017196b4d796a5aa55235272ee17cd839",
"https://bcr.bazel.build/modules/upb/0.0.0-20220923-a547704/MODULE.bazel": "7298990c00040a0e2f121f6c32544bab27d4452f80d9ce51349b1a28f3005c43",
@@ -218,7 +217,7 @@
"moduleExtensions": {
"@@aspect_rules_esbuild+//esbuild:extensions.bzl%esbuild": {
"general": {
"bzlTransitiveDigest": "c4i5gawrp4Au9UMb55EzQCePYwkrFqD9tFBN7GdHG5g=",
"bzlTransitiveDigest": "fzdwsWU1Px4bYL57Cw1rvU/mgOqB7f0AF51JxT5kAs8=",
"usagesDigest": "ToTaCONCN/E05krnHXLM1kpV1zrHNxHrGpUip973II4=",
"recordedFileInputs": {},
"recordedDirentsInputs": {},
@@ -419,8 +418,8 @@
},
"@@aspect_rules_js+//npm:extensions.bzl%pnpm": {
"general": {
"bzlTransitiveDigest": "HC+l+mTivq1p/KbcVQ+iV5QwYR+oKESJh827FY68SH8=",
"usagesDigest": "ky8l7fS37yDgo35S6hNi24Kw+zsJxBL0pNof77FH304=",
"bzlTransitiveDigest": "9Zmqluz9ltvCoc6pskOslTkQpkH6CIINjWVkgam9aa4=",
"usagesDigest": "k3HnPWCDfdjPprODR4rLNwRc8pEk4QMKpK9YbIwIkkk=",
"recordedFileInputs": {},
"recordedDirentsInputs": {},
"envVariables": {},
@@ -429,11 +428,11 @@
"repoRuleId": "@@aspect_rules_js+//npm/private:npm_import.bzl%npm_import_rule",
"attributes": {
"package": "pnpm",
"version": "10.30.2",
"version": "10.30.3",
"root_package": "",
"link_workspace": "",
"link_packages": {},
"integrity": "sha512-Ns3HB+e3lAqYjJwez4jQhPhRS1w/CF9TouJEwpIdOyVFvCDdTr4fwkX+7EY7spiuzqemPtH3aAuHfcY3nY0MtA==",
"integrity": "sha512-yWHR4KLY41TsqlFmuCJRZmi39Ey1vZUSLVkN2Bki9gb1RzttI+xKW+Bef80Y6EiNR9l4u+mBhy8RRdBumnQAFw==",
"url": "",
"commit": "",
"patch_args": [
@@ -456,7 +455,7 @@
"repoRuleId": "@@aspect_rules_js+//npm/private:npm_import.bzl%npm_import_links",
"attributes": {
"package": "pnpm",
"version": "10.30.2",
"version": "10.30.3",
"dev": false,
"root_package": "",
"link_packages": {},
@@ -573,8 +572,8 @@
},
"@@aspect_rules_ts+//ts:extensions.bzl%ext": {
"general": {
"bzlTransitiveDigest": "jrh/WHprsSSVvWjNLpDRdUl48LnV4xm2+ZssEvasHxQ=",
"usagesDigest": "5Mj1S/yyTIvnEsdYZuALQNxC6YMobxr4Fp6KXO8UzDo=",
"bzlTransitiveDigest": "6NyLUdrb79stFKm8oWIBK2q65cT5Upbr8IR2Qwsywu8=",
"usagesDigest": "ZXlhH7TrNEERA0ibuRRxAjYv2fVuXoFGNd3v+0UK1/g=",
"recordedFileInputs": {
"@@rules_browsers+//package.json": "772d873d450a539e2133635aeb5e63744cf1cec86e6b37aeecd9267a147fb0d7"
},
@@ -584,8 +583,8 @@
"angular_npm_typescript": {
"repoRuleId": "@@aspect_rules_ts+//ts/private:npm_repositories.bzl%http_archive_version",
"attributes": {
"version": "6.0.0-beta",
"integrity": "sha512-CldZdztDpQRLM1HC6WDQjQkQN5Ub5zRau737a1diGh3lPmb9oRsaWHk1y5iqK0o7+1bNJ0oXfEGRkAogFZBL+Q==",
"version": "5.9.3",
"integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==",
"urls": [
"https://registry.npmjs.org/typescript/-/typescript-{}.tgz"
]
@@ -640,7 +639,7 @@
"@@aspect_tools_telemetry+//:extension.bzl%telemetry": {
"general": {
"bzlTransitiveDigest": "cl5A2O84vDL6Tt+Qga8FCj1DUDGqn+e7ly5rZ+4xvcc=",
"usagesDigest": "iTRB8NybCoL/vRnkXtaHqavLwH75S1+FK8oR8PdUBIY=",
"usagesDigest": "fkarigrHiiNAt/BwClRuO51QOEo6226baK6LoK/IWdU=",
"recordedFileInputs": {},
"recordedDirentsInputs": {},
"envVariables": {},
@@ -652,7 +651,7 @@
"aspect_rules_ts": "3.8.5",
"aspect_rules_js": "2.9.2",
"aspect_rules_esbuild": "0.25.0",
"aspect_rules_jasmine": "2.0.3",
"aspect_rules_jasmine": "2.0.4",
"aspect_tools_telemetry": "0.3.3"
}
}
@@ -674,7 +673,7 @@
},
"@@pybind11_bazel+//:python_configure.bzl%extension": {
"general": {
"bzlTransitiveDigest": "c9ZWWeXeu6bctL4/SsY2otFWyeFN0JJ20+ymGyJZtWk=",
"bzlTransitiveDigest": "D2/qWHU6yQFwRG7Bb+caqrYMha5avsASao2vERrxK24=",
"usagesDigest": "fycyB39YnXIJkfWCIXLUKJMZzANcuLy9ZE73hRucjFk=",
"recordedFileInputs": {
"@@pybind11_bazel+//MODULE.bazel": "88af1c246226d87e65be78ed49ecd1e6f5e98648558c14ce99176da041dc378e"
@@ -946,7 +945,7 @@
},
"@@rules_fuzzing+//fuzzing/private:extensions.bzl%non_module_dependencies": {
"general": {
"bzlTransitiveDigest": "WHRlQQnxW7e7XMRBhq7SARkDarLDOAbg6iLaJpk5QYM=",
"bzlTransitiveDigest": "4LouzhF/yT117s7peGnNs9ROomiJXC6Zl5R0oI21jho=",
"usagesDigest": "wy6ISK6UOcBEjj/mvJ/S3WeXoO67X+1llb9yPyFtPgc=",
"recordedFileInputs": {},
"recordedDirentsInputs": {},
@@ -1029,7 +1028,7 @@
},
"@@rules_kotlin+//src/main/starlark/core/repositories:bzlmod_setup.bzl%rules_kotlin_extensions": {
"general": {
"bzlTransitiveDigest": "rL/34P1aFDq2GqVC2zCFgQ8nTuOC6ziogocpvG50Qz8=",
"bzlTransitiveDigest": "nvW/NrBXlAmiQw99EMGKkLaD2KbNp2mQDlxdfpr+0Ls=",
"usagesDigest": "QI2z8ZUR+mqtbwsf2fLqYdJAkPOHdOV+tF2yVAUgRzw=",
"recordedFileInputs": {},
"recordedDirentsInputs": {},
@@ -1094,7 +1093,7 @@
"@@rules_nodejs+//nodejs:extensions.bzl%node": {
"general": {
"bzlTransitiveDigest": "4pUxCNc22K4I+6+4Nxu52Hur12tFRfa1JMsN5mdDv60=",
"usagesDigest": "SFGq+zUCbdSXGEjZH5ptl7y0cVwcw+BXOKjCi8YN22E=",
"usagesDigest": "pjXeuItYQffkhMcQv+aU/G0SB0QAmyOC9W7iq63eW08=",
"recordedFileInputs": {},
"recordedDirentsInputs": {},
"envVariables": {},
@@ -1104,46 +1103,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.1-darwin_arm64": [
"node-v22.22.1-darwin-arm64.tar.gz",
"node-v22.22.1-darwin-arm64",
"679ad4966339e4ef4900f57996714864e4211b898825bb840c3086c419fbcef2"
],
"22.22.0-darwin_amd64": [
"node-v22.22.0-darwin-x64.tar.gz",
"node-v22.22.0-darwin-x64",
"5ea50c9d6dea3dfa3abb66b2656f7a4e1c8cef23432b558d45fb538c7b5dedce"
"22.22.1-darwin_amd64": [
"node-v22.22.1-darwin-x64.tar.gz",
"node-v22.22.1-darwin-x64",
"07b13722d558790fca20bb1ecf61bde24b7a4863111f7be77fc57251a407359a"
],
"22.22.0-linux_arm64": [
"node-v22.22.0-linux-arm64.tar.xz",
"node-v22.22.0-linux-arm64",
"1bf1eb9ee63ffc4e5d324c0b9b62cf4a289f44332dfef9607cea1a0d9596ba6f"
"22.22.1-linux_arm64": [
"node-v22.22.1-linux-arm64.tar.xz",
"node-v22.22.1-linux-arm64",
"0f3550d58d45e5d3cf7103d9e3f69937f09fe82fb5dd474c66a5d816fa58c9ee"
],
"22.22.0-linux_ppc64le": [
"node-v22.22.0-linux-ppc64le.tar.xz",
"node-v22.22.0-linux-ppc64le",
"d83b9957431cc18e1fc143a4b99f89cde7b8a18f53ef392231b4336afd058865"
"22.22.1-linux_ppc64le": [
"node-v22.22.1-linux-ppc64le.tar.xz",
"node-v22.22.1-linux-ppc64le",
"a65a44cf0224505f052b90357b763dbc1ea9148f4f5f2284f0596cf2000f819b"
],
"22.22.0-linux_s390x": [
"node-v22.22.0-linux-s390x.tar.xz",
"node-v22.22.0-linux-s390x",
"5aa0e520689448c4233e8d73f284e8e0634fdcd32b479735698494be5641f3e4"
"22.22.1-linux_s390x": [
"node-v22.22.1-linux-s390x.tar.xz",
"node-v22.22.1-linux-s390x",
"e08b3a73d0bd840e008f589e4be4a2ef3d4a0c59015f4f20a04ed7fc968042a2"
],
"22.22.0-linux_amd64": [
"node-v22.22.0-linux-x64.tar.xz",
"node-v22.22.0-linux-x64",
"9aa8e9d2298ab68c600bd6fb86a6c13bce11a4eca1ba9b39d79fa021755d7c37"
"22.22.1-linux_amd64": [
"node-v22.22.1-linux-x64.tar.xz",
"node-v22.22.1-linux-x64",
"9a6bc82f9b491279147219f6a18add1e18424dce90d41d2a5fcd69d4924ba3aa"
],
"22.22.0-windows_amd64": [
"node-v22.22.0-win-x64.zip",
"node-v22.22.0-win-x64",
"c97fa376d2becdc8863fcd3ca2dd9a83a9f3468ee7ccf7a6d076ec66a645c77a"
"22.22.1-windows_amd64": [
"node-v22.22.1-win-x64.zip",
"node-v22.22.1-win-x64",
"877cb93829e14fffbbc7903e7d8037336c9a79f3ea43c5d0b8c2379b79da56de"
]
},
"node_urls": [
"https://nodejs.org/dist/v{version}/{filename}"
],
"node_version": "22.22.0",
"node_version": "22.22.1",
"include_headers": false,
"platform": "linux_amd64"
}
@@ -1153,46 +1152,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.1-darwin_arm64": [
"node-v22.22.1-darwin-arm64.tar.gz",
"node-v22.22.1-darwin-arm64",
"679ad4966339e4ef4900f57996714864e4211b898825bb840c3086c419fbcef2"
],
"22.22.0-darwin_amd64": [
"node-v22.22.0-darwin-x64.tar.gz",
"node-v22.22.0-darwin-x64",
"5ea50c9d6dea3dfa3abb66b2656f7a4e1c8cef23432b558d45fb538c7b5dedce"
"22.22.1-darwin_amd64": [
"node-v22.22.1-darwin-x64.tar.gz",
"node-v22.22.1-darwin-x64",
"07b13722d558790fca20bb1ecf61bde24b7a4863111f7be77fc57251a407359a"
],
"22.22.0-linux_arm64": [
"node-v22.22.0-linux-arm64.tar.xz",
"node-v22.22.0-linux-arm64",
"1bf1eb9ee63ffc4e5d324c0b9b62cf4a289f44332dfef9607cea1a0d9596ba6f"
"22.22.1-linux_arm64": [
"node-v22.22.1-linux-arm64.tar.xz",
"node-v22.22.1-linux-arm64",
"0f3550d58d45e5d3cf7103d9e3f69937f09fe82fb5dd474c66a5d816fa58c9ee"
],
"22.22.0-linux_ppc64le": [
"node-v22.22.0-linux-ppc64le.tar.xz",
"node-v22.22.0-linux-ppc64le",
"d83b9957431cc18e1fc143a4b99f89cde7b8a18f53ef392231b4336afd058865"
"22.22.1-linux_ppc64le": [
"node-v22.22.1-linux-ppc64le.tar.xz",
"node-v22.22.1-linux-ppc64le",
"a65a44cf0224505f052b90357b763dbc1ea9148f4f5f2284f0596cf2000f819b"
],
"22.22.0-linux_s390x": [
"node-v22.22.0-linux-s390x.tar.xz",
"node-v22.22.0-linux-s390x",
"5aa0e520689448c4233e8d73f284e8e0634fdcd32b479735698494be5641f3e4"
"22.22.1-linux_s390x": [
"node-v22.22.1-linux-s390x.tar.xz",
"node-v22.22.1-linux-s390x",
"e08b3a73d0bd840e008f589e4be4a2ef3d4a0c59015f4f20a04ed7fc968042a2"
],
"22.22.0-linux_amd64": [
"node-v22.22.0-linux-x64.tar.xz",
"node-v22.22.0-linux-x64",
"9aa8e9d2298ab68c600bd6fb86a6c13bce11a4eca1ba9b39d79fa021755d7c37"
"22.22.1-linux_amd64": [
"node-v22.22.1-linux-x64.tar.xz",
"node-v22.22.1-linux-x64",
"9a6bc82f9b491279147219f6a18add1e18424dce90d41d2a5fcd69d4924ba3aa"
],
"22.22.0-windows_amd64": [
"node-v22.22.0-win-x64.zip",
"node-v22.22.0-win-x64",
"c97fa376d2becdc8863fcd3ca2dd9a83a9f3468ee7ccf7a6d076ec66a645c77a"
"22.22.1-windows_amd64": [
"node-v22.22.1-win-x64.zip",
"node-v22.22.1-win-x64",
"877cb93829e14fffbbc7903e7d8037336c9a79f3ea43c5d0b8c2379b79da56de"
]
},
"node_urls": [
"https://nodejs.org/dist/v{version}/{filename}"
],
"node_version": "22.22.0",
"node_version": "22.22.1",
"include_headers": false,
"platform": "linux_arm64"
}
@@ -1202,46 +1201,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.1-darwin_arm64": [
"node-v22.22.1-darwin-arm64.tar.gz",
"node-v22.22.1-darwin-arm64",
"679ad4966339e4ef4900f57996714864e4211b898825bb840c3086c419fbcef2"
],
"22.22.0-darwin_amd64": [
"node-v22.22.0-darwin-x64.tar.gz",
"node-v22.22.0-darwin-x64",
"5ea50c9d6dea3dfa3abb66b2656f7a4e1c8cef23432b558d45fb538c7b5dedce"
"22.22.1-darwin_amd64": [
"node-v22.22.1-darwin-x64.tar.gz",
"node-v22.22.1-darwin-x64",
"07b13722d558790fca20bb1ecf61bde24b7a4863111f7be77fc57251a407359a"
],
"22.22.0-linux_arm64": [
"node-v22.22.0-linux-arm64.tar.xz",
"node-v22.22.0-linux-arm64",
"1bf1eb9ee63ffc4e5d324c0b9b62cf4a289f44332dfef9607cea1a0d9596ba6f"
"22.22.1-linux_arm64": [
"node-v22.22.1-linux-arm64.tar.xz",
"node-v22.22.1-linux-arm64",
"0f3550d58d45e5d3cf7103d9e3f69937f09fe82fb5dd474c66a5d816fa58c9ee"
],
"22.22.0-linux_ppc64le": [
"node-v22.22.0-linux-ppc64le.tar.xz",
"node-v22.22.0-linux-ppc64le",
"d83b9957431cc18e1fc143a4b99f89cde7b8a18f53ef392231b4336afd058865"
"22.22.1-linux_ppc64le": [
"node-v22.22.1-linux-ppc64le.tar.xz",
"node-v22.22.1-linux-ppc64le",
"a65a44cf0224505f052b90357b763dbc1ea9148f4f5f2284f0596cf2000f819b"
],
"22.22.0-linux_s390x": [
"node-v22.22.0-linux-s390x.tar.xz",
"node-v22.22.0-linux-s390x",
"5aa0e520689448c4233e8d73f284e8e0634fdcd32b479735698494be5641f3e4"
"22.22.1-linux_s390x": [
"node-v22.22.1-linux-s390x.tar.xz",
"node-v22.22.1-linux-s390x",
"e08b3a73d0bd840e008f589e4be4a2ef3d4a0c59015f4f20a04ed7fc968042a2"
],
"22.22.0-linux_amd64": [
"node-v22.22.0-linux-x64.tar.xz",
"node-v22.22.0-linux-x64",
"9aa8e9d2298ab68c600bd6fb86a6c13bce11a4eca1ba9b39d79fa021755d7c37"
"22.22.1-linux_amd64": [
"node-v22.22.1-linux-x64.tar.xz",
"node-v22.22.1-linux-x64",
"9a6bc82f9b491279147219f6a18add1e18424dce90d41d2a5fcd69d4924ba3aa"
],
"22.22.0-windows_amd64": [
"node-v22.22.0-win-x64.zip",
"node-v22.22.0-win-x64",
"c97fa376d2becdc8863fcd3ca2dd9a83a9f3468ee7ccf7a6d076ec66a645c77a"
"22.22.1-windows_amd64": [
"node-v22.22.1-win-x64.zip",
"node-v22.22.1-win-x64",
"877cb93829e14fffbbc7903e7d8037336c9a79f3ea43c5d0b8c2379b79da56de"
]
},
"node_urls": [
"https://nodejs.org/dist/v{version}/{filename}"
],
"node_version": "22.22.0",
"node_version": "22.22.1",
"include_headers": false,
"platform": "linux_s390x"
}
@@ -1251,46 +1250,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.1-darwin_arm64": [
"node-v22.22.1-darwin-arm64.tar.gz",
"node-v22.22.1-darwin-arm64",
"679ad4966339e4ef4900f57996714864e4211b898825bb840c3086c419fbcef2"
],
"22.22.0-darwin_amd64": [
"node-v22.22.0-darwin-x64.tar.gz",
"node-v22.22.0-darwin-x64",
"5ea50c9d6dea3dfa3abb66b2656f7a4e1c8cef23432b558d45fb538c7b5dedce"
"22.22.1-darwin_amd64": [
"node-v22.22.1-darwin-x64.tar.gz",
"node-v22.22.1-darwin-x64",
"07b13722d558790fca20bb1ecf61bde24b7a4863111f7be77fc57251a407359a"
],
"22.22.0-linux_arm64": [
"node-v22.22.0-linux-arm64.tar.xz",
"node-v22.22.0-linux-arm64",
"1bf1eb9ee63ffc4e5d324c0b9b62cf4a289f44332dfef9607cea1a0d9596ba6f"
"22.22.1-linux_arm64": [
"node-v22.22.1-linux-arm64.tar.xz",
"node-v22.22.1-linux-arm64",
"0f3550d58d45e5d3cf7103d9e3f69937f09fe82fb5dd474c66a5d816fa58c9ee"
],
"22.22.0-linux_ppc64le": [
"node-v22.22.0-linux-ppc64le.tar.xz",
"node-v22.22.0-linux-ppc64le",
"d83b9957431cc18e1fc143a4b99f89cde7b8a18f53ef392231b4336afd058865"
"22.22.1-linux_ppc64le": [
"node-v22.22.1-linux-ppc64le.tar.xz",
"node-v22.22.1-linux-ppc64le",
"a65a44cf0224505f052b90357b763dbc1ea9148f4f5f2284f0596cf2000f819b"
],
"22.22.0-linux_s390x": [
"node-v22.22.0-linux-s390x.tar.xz",
"node-v22.22.0-linux-s390x",
"5aa0e520689448c4233e8d73f284e8e0634fdcd32b479735698494be5641f3e4"
"22.22.1-linux_s390x": [
"node-v22.22.1-linux-s390x.tar.xz",
"node-v22.22.1-linux-s390x",
"e08b3a73d0bd840e008f589e4be4a2ef3d4a0c59015f4f20a04ed7fc968042a2"
],
"22.22.0-linux_amd64": [
"node-v22.22.0-linux-x64.tar.xz",
"node-v22.22.0-linux-x64",
"9aa8e9d2298ab68c600bd6fb86a6c13bce11a4eca1ba9b39d79fa021755d7c37"
"22.22.1-linux_amd64": [
"node-v22.22.1-linux-x64.tar.xz",
"node-v22.22.1-linux-x64",
"9a6bc82f9b491279147219f6a18add1e18424dce90d41d2a5fcd69d4924ba3aa"
],
"22.22.0-windows_amd64": [
"node-v22.22.0-win-x64.zip",
"node-v22.22.0-win-x64",
"c97fa376d2becdc8863fcd3ca2dd9a83a9f3468ee7ccf7a6d076ec66a645c77a"
"22.22.1-windows_amd64": [
"node-v22.22.1-win-x64.zip",
"node-v22.22.1-win-x64",
"877cb93829e14fffbbc7903e7d8037336c9a79f3ea43c5d0b8c2379b79da56de"
]
},
"node_urls": [
"https://nodejs.org/dist/v{version}/{filename}"
],
"node_version": "22.22.0",
"node_version": "22.22.1",
"include_headers": false,
"platform": "linux_ppc64le"
}
@@ -1300,46 +1299,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.1-darwin_arm64": [
"node-v22.22.1-darwin-arm64.tar.gz",
"node-v22.22.1-darwin-arm64",
"679ad4966339e4ef4900f57996714864e4211b898825bb840c3086c419fbcef2"
],
"22.22.0-darwin_amd64": [
"node-v22.22.0-darwin-x64.tar.gz",
"node-v22.22.0-darwin-x64",
"5ea50c9d6dea3dfa3abb66b2656f7a4e1c8cef23432b558d45fb538c7b5dedce"
"22.22.1-darwin_amd64": [
"node-v22.22.1-darwin-x64.tar.gz",
"node-v22.22.1-darwin-x64",
"07b13722d558790fca20bb1ecf61bde24b7a4863111f7be77fc57251a407359a"
],
"22.22.0-linux_arm64": [
"node-v22.22.0-linux-arm64.tar.xz",
"node-v22.22.0-linux-arm64",
"1bf1eb9ee63ffc4e5d324c0b9b62cf4a289f44332dfef9607cea1a0d9596ba6f"
"22.22.1-linux_arm64": [
"node-v22.22.1-linux-arm64.tar.xz",
"node-v22.22.1-linux-arm64",
"0f3550d58d45e5d3cf7103d9e3f69937f09fe82fb5dd474c66a5d816fa58c9ee"
],
"22.22.0-linux_ppc64le": [
"node-v22.22.0-linux-ppc64le.tar.xz",
"node-v22.22.0-linux-ppc64le",
"d83b9957431cc18e1fc143a4b99f89cde7b8a18f53ef392231b4336afd058865"
"22.22.1-linux_ppc64le": [
"node-v22.22.1-linux-ppc64le.tar.xz",
"node-v22.22.1-linux-ppc64le",
"a65a44cf0224505f052b90357b763dbc1ea9148f4f5f2284f0596cf2000f819b"
],
"22.22.0-linux_s390x": [
"node-v22.22.0-linux-s390x.tar.xz",
"node-v22.22.0-linux-s390x",
"5aa0e520689448c4233e8d73f284e8e0634fdcd32b479735698494be5641f3e4"
"22.22.1-linux_s390x": [
"node-v22.22.1-linux-s390x.tar.xz",
"node-v22.22.1-linux-s390x",
"e08b3a73d0bd840e008f589e4be4a2ef3d4a0c59015f4f20a04ed7fc968042a2"
],
"22.22.0-linux_amd64": [
"node-v22.22.0-linux-x64.tar.xz",
"node-v22.22.0-linux-x64",
"9aa8e9d2298ab68c600bd6fb86a6c13bce11a4eca1ba9b39d79fa021755d7c37"
"22.22.1-linux_amd64": [
"node-v22.22.1-linux-x64.tar.xz",
"node-v22.22.1-linux-x64",
"9a6bc82f9b491279147219f6a18add1e18424dce90d41d2a5fcd69d4924ba3aa"
],
"22.22.0-windows_amd64": [
"node-v22.22.0-win-x64.zip",
"node-v22.22.0-win-x64",
"c97fa376d2becdc8863fcd3ca2dd9a83a9f3468ee7ccf7a6d076ec66a645c77a"
"22.22.1-windows_amd64": [
"node-v22.22.1-win-x64.zip",
"node-v22.22.1-win-x64",
"877cb93829e14fffbbc7903e7d8037336c9a79f3ea43c5d0b8c2379b79da56de"
]
},
"node_urls": [
"https://nodejs.org/dist/v{version}/{filename}"
],
"node_version": "22.22.0",
"node_version": "22.22.1",
"include_headers": false,
"platform": "darwin_amd64"
}
@@ -1349,46 +1348,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.1-darwin_arm64": [
"node-v22.22.1-darwin-arm64.tar.gz",
"node-v22.22.1-darwin-arm64",
"679ad4966339e4ef4900f57996714864e4211b898825bb840c3086c419fbcef2"
],
"22.22.0-darwin_amd64": [
"node-v22.22.0-darwin-x64.tar.gz",
"node-v22.22.0-darwin-x64",
"5ea50c9d6dea3dfa3abb66b2656f7a4e1c8cef23432b558d45fb538c7b5dedce"
"22.22.1-darwin_amd64": [
"node-v22.22.1-darwin-x64.tar.gz",
"node-v22.22.1-darwin-x64",
"07b13722d558790fca20bb1ecf61bde24b7a4863111f7be77fc57251a407359a"
],
"22.22.0-linux_arm64": [
"node-v22.22.0-linux-arm64.tar.xz",
"node-v22.22.0-linux-arm64",
"1bf1eb9ee63ffc4e5d324c0b9b62cf4a289f44332dfef9607cea1a0d9596ba6f"
"22.22.1-linux_arm64": [
"node-v22.22.1-linux-arm64.tar.xz",
"node-v22.22.1-linux-arm64",
"0f3550d58d45e5d3cf7103d9e3f69937f09fe82fb5dd474c66a5d816fa58c9ee"
],
"22.22.0-linux_ppc64le": [
"node-v22.22.0-linux-ppc64le.tar.xz",
"node-v22.22.0-linux-ppc64le",
"d83b9957431cc18e1fc143a4b99f89cde7b8a18f53ef392231b4336afd058865"
"22.22.1-linux_ppc64le": [
"node-v22.22.1-linux-ppc64le.tar.xz",
"node-v22.22.1-linux-ppc64le",
"a65a44cf0224505f052b90357b763dbc1ea9148f4f5f2284f0596cf2000f819b"
],
"22.22.0-linux_s390x": [
"node-v22.22.0-linux-s390x.tar.xz",
"node-v22.22.0-linux-s390x",
"5aa0e520689448c4233e8d73f284e8e0634fdcd32b479735698494be5641f3e4"
"22.22.1-linux_s390x": [
"node-v22.22.1-linux-s390x.tar.xz",
"node-v22.22.1-linux-s390x",
"e08b3a73d0bd840e008f589e4be4a2ef3d4a0c59015f4f20a04ed7fc968042a2"
],
"22.22.0-linux_amd64": [
"node-v22.22.0-linux-x64.tar.xz",
"node-v22.22.0-linux-x64",
"9aa8e9d2298ab68c600bd6fb86a6c13bce11a4eca1ba9b39d79fa021755d7c37"
"22.22.1-linux_amd64": [
"node-v22.22.1-linux-x64.tar.xz",
"node-v22.22.1-linux-x64",
"9a6bc82f9b491279147219f6a18add1e18424dce90d41d2a5fcd69d4924ba3aa"
],
"22.22.0-windows_amd64": [
"node-v22.22.0-win-x64.zip",
"node-v22.22.0-win-x64",
"c97fa376d2becdc8863fcd3ca2dd9a83a9f3468ee7ccf7a6d076ec66a645c77a"
"22.22.1-windows_amd64": [
"node-v22.22.1-win-x64.zip",
"node-v22.22.1-win-x64",
"877cb93829e14fffbbc7903e7d8037336c9a79f3ea43c5d0b8c2379b79da56de"
]
},
"node_urls": [
"https://nodejs.org/dist/v{version}/{filename}"
],
"node_version": "22.22.0",
"node_version": "22.22.1",
"include_headers": false,
"platform": "darwin_arm64"
}
@@ -1398,46 +1397,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.1-darwin_arm64": [
"node-v22.22.1-darwin-arm64.tar.gz",
"node-v22.22.1-darwin-arm64",
"679ad4966339e4ef4900f57996714864e4211b898825bb840c3086c419fbcef2"
],
"22.22.0-darwin_amd64": [
"node-v22.22.0-darwin-x64.tar.gz",
"node-v22.22.0-darwin-x64",
"5ea50c9d6dea3dfa3abb66b2656f7a4e1c8cef23432b558d45fb538c7b5dedce"
"22.22.1-darwin_amd64": [
"node-v22.22.1-darwin-x64.tar.gz",
"node-v22.22.1-darwin-x64",
"07b13722d558790fca20bb1ecf61bde24b7a4863111f7be77fc57251a407359a"
],
"22.22.0-linux_arm64": [
"node-v22.22.0-linux-arm64.tar.xz",
"node-v22.22.0-linux-arm64",
"1bf1eb9ee63ffc4e5d324c0b9b62cf4a289f44332dfef9607cea1a0d9596ba6f"
"22.22.1-linux_arm64": [
"node-v22.22.1-linux-arm64.tar.xz",
"node-v22.22.1-linux-arm64",
"0f3550d58d45e5d3cf7103d9e3f69937f09fe82fb5dd474c66a5d816fa58c9ee"
],
"22.22.0-linux_ppc64le": [
"node-v22.22.0-linux-ppc64le.tar.xz",
"node-v22.22.0-linux-ppc64le",
"d83b9957431cc18e1fc143a4b99f89cde7b8a18f53ef392231b4336afd058865"
"22.22.1-linux_ppc64le": [
"node-v22.22.1-linux-ppc64le.tar.xz",
"node-v22.22.1-linux-ppc64le",
"a65a44cf0224505f052b90357b763dbc1ea9148f4f5f2284f0596cf2000f819b"
],
"22.22.0-linux_s390x": [
"node-v22.22.0-linux-s390x.tar.xz",
"node-v22.22.0-linux-s390x",
"5aa0e520689448c4233e8d73f284e8e0634fdcd32b479735698494be5641f3e4"
"22.22.1-linux_s390x": [
"node-v22.22.1-linux-s390x.tar.xz",
"node-v22.22.1-linux-s390x",
"e08b3a73d0bd840e008f589e4be4a2ef3d4a0c59015f4f20a04ed7fc968042a2"
],
"22.22.0-linux_amd64": [
"node-v22.22.0-linux-x64.tar.xz",
"node-v22.22.0-linux-x64",
"9aa8e9d2298ab68c600bd6fb86a6c13bce11a4eca1ba9b39d79fa021755d7c37"
"22.22.1-linux_amd64": [
"node-v22.22.1-linux-x64.tar.xz",
"node-v22.22.1-linux-x64",
"9a6bc82f9b491279147219f6a18add1e18424dce90d41d2a5fcd69d4924ba3aa"
],
"22.22.0-windows_amd64": [
"node-v22.22.0-win-x64.zip",
"node-v22.22.0-win-x64",
"c97fa376d2becdc8863fcd3ca2dd9a83a9f3468ee7ccf7a6d076ec66a645c77a"
"22.22.1-windows_amd64": [
"node-v22.22.1-win-x64.zip",
"node-v22.22.1-win-x64",
"877cb93829e14fffbbc7903e7d8037336c9a79f3ea43c5d0b8c2379b79da56de"
]
},
"node_urls": [
"https://nodejs.org/dist/v{version}/{filename}"
],
"node_version": "22.22.0",
"node_version": "22.22.1",
"include_headers": false,
"platform": "windows_amd64"
}
@@ -1447,46 +1446,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.1-darwin_arm64": [
"node-v22.22.1-darwin-arm64.tar.gz",
"node-v22.22.1-darwin-arm64",
"679ad4966339e4ef4900f57996714864e4211b898825bb840c3086c419fbcef2"
],
"22.22.0-darwin_amd64": [
"node-v22.22.0-darwin-x64.tar.gz",
"node-v22.22.0-darwin-x64",
"5ea50c9d6dea3dfa3abb66b2656f7a4e1c8cef23432b558d45fb538c7b5dedce"
"22.22.1-darwin_amd64": [
"node-v22.22.1-darwin-x64.tar.gz",
"node-v22.22.1-darwin-x64",
"07b13722d558790fca20bb1ecf61bde24b7a4863111f7be77fc57251a407359a"
],
"22.22.0-linux_arm64": [
"node-v22.22.0-linux-arm64.tar.xz",
"node-v22.22.0-linux-arm64",
"1bf1eb9ee63ffc4e5d324c0b9b62cf4a289f44332dfef9607cea1a0d9596ba6f"
"22.22.1-linux_arm64": [
"node-v22.22.1-linux-arm64.tar.xz",
"node-v22.22.1-linux-arm64",
"0f3550d58d45e5d3cf7103d9e3f69937f09fe82fb5dd474c66a5d816fa58c9ee"
],
"22.22.0-linux_ppc64le": [
"node-v22.22.0-linux-ppc64le.tar.xz",
"node-v22.22.0-linux-ppc64le",
"d83b9957431cc18e1fc143a4b99f89cde7b8a18f53ef392231b4336afd058865"
"22.22.1-linux_ppc64le": [
"node-v22.22.1-linux-ppc64le.tar.xz",
"node-v22.22.1-linux-ppc64le",
"a65a44cf0224505f052b90357b763dbc1ea9148f4f5f2284f0596cf2000f819b"
],
"22.22.0-linux_s390x": [
"node-v22.22.0-linux-s390x.tar.xz",
"node-v22.22.0-linux-s390x",
"5aa0e520689448c4233e8d73f284e8e0634fdcd32b479735698494be5641f3e4"
"22.22.1-linux_s390x": [
"node-v22.22.1-linux-s390x.tar.xz",
"node-v22.22.1-linux-s390x",
"e08b3a73d0bd840e008f589e4be4a2ef3d4a0c59015f4f20a04ed7fc968042a2"
],
"22.22.0-linux_amd64": [
"node-v22.22.0-linux-x64.tar.xz",
"node-v22.22.0-linux-x64",
"9aa8e9d2298ab68c600bd6fb86a6c13bce11a4eca1ba9b39d79fa021755d7c37"
"22.22.1-linux_amd64": [
"node-v22.22.1-linux-x64.tar.xz",
"node-v22.22.1-linux-x64",
"9a6bc82f9b491279147219f6a18add1e18424dce90d41d2a5fcd69d4924ba3aa"
],
"22.22.0-windows_amd64": [
"node-v22.22.0-win-x64.zip",
"node-v22.22.0-win-x64",
"c97fa376d2becdc8863fcd3ca2dd9a83a9f3468ee7ccf7a6d076ec66a645c77a"
"22.22.1-windows_amd64": [
"node-v22.22.1-win-x64.zip",
"node-v22.22.1-win-x64",
"877cb93829e14fffbbc7903e7d8037336c9a79f3ea43c5d0b8c2379b79da56de"
]
},
"node_urls": [
"https://nodejs.org/dist/v{version}/{filename}"
],
"node_version": "22.22.0",
"node_version": "22.22.1",
"include_headers": false,
"platform": "windows_arm64"
}
@@ -1515,7 +1514,7 @@
},
"@@rules_python+//python/extensions:pip.bzl%pip": {
"general": {
"bzlTransitiveDigest": "d3ENjFH8qMwmOrkcb3c9JYqQ5hJ6owjfbSr24KY0Ugg=",
"bzlTransitiveDigest": "LFkevJ0u48WgTVCyU07LkRD8iYwsRUs2M7uSFHkQAW0=",
"usagesDigest": "/9NP3RV6/DWuNdYAsIU/8UCgCX0TdPUJr0X6O+0lrtk=",
"recordedFileInputs": {
"@@protobuf+//python/requirements.txt": "983be60d3cec4b319dcab6d48aeb3f5b2f7c3350f26b3a9e97486c37967c73c5",
+8 -8
View File
@@ -5,21 +5,21 @@
"@algolia/requester-browser-xhr": "5.48.0",
"@algolia/requester-node-http": "5.48.0",
"@angular/animations": "workspace:*",
"@angular/aria": "21.2.0-rc.0",
"@angular/build": "21.2.0-rc.2",
"@angular/cdk": "21.2.0-rc.0",
"@angular/cli": "21.2.0-rc.2",
"@angular/aria": "21.2.0",
"@angular/build": "21.2.0",
"@angular/cdk": "21.2.0",
"@angular/cli": "21.2.0",
"@angular/common": "workspace:*",
"@angular/compiler": "workspace:*",
"@angular/compiler-cli": "workspace:*",
"@angular/core": "workspace:*",
"@angular/docs": "workspace:*",
"@angular/forms": "workspace:*",
"@angular/material": "21.2.0-rc.0",
"@angular/material": "21.2.0",
"@angular/platform-browser": "workspace:*",
"@angular/platform-server": "workspace:*",
"@angular/router": "workspace:*",
"@angular/ssr": "21.2.0-rc.2",
"@angular/ssr": "21.2.0",
"@codemirror/autocomplete": "6.20.0",
"@codemirror/commands": "6.10.1",
"@codemirror/lang-angular": "0.1.4",
@@ -81,7 +81,7 @@
"open-in-idx": "0.1.1",
"playwright-core": "1.58.1",
"preact": "10.28.3",
"preact-render-to-string": "6.6.5",
"preact-render-to-string": "6.6.6",
"prettier": "3.8.1",
"property-information": "^7.1.0",
"rxjs": "7.8.2",
@@ -91,7 +91,7 @@
"style-mod": "4.1.3",
"tinyglobby": "0.2.15",
"tslib": "2.8.1",
"typescript": "6.0.0-beta",
"typescript": "5.9.3",
"w3c-keyname": "2.2.8",
"zwitch": "^2.0.4"
},
@@ -95,20 +95,27 @@
<div>
<h2>Community translations</h2>
<ul>
<!-- Sorted using Unicode Collation Algorithm (UCA) -->
<li>
<a href="https://angular.cn/" title="简体中文版">简体中文版</a>
<a href="https://angular.az/" title="Azərbaycanca">Azərbaycanca</a>
</li>
<li>
<a href="https://dev.angular.tw/" title="正體中文版">正體中文版</a>
<a href="https://angular-docs.tr/" title="Türkçe">Türkçe</a>
</li>
<li>
<a href="https://angular.jp/" title="日本語版">日本語版</a>
<a href="https://angular-docs.ru/" title="Русский">Русский</a>
</li>
<li>
<a href="https://angular.kr/" title="한국어">한국어</a>
</li>
<li>
<a href="https://angular-docs.ru/" title="Русский">Русский</a>
<a href="https://angular.jp/" title="日本語版">日本語版</a>
</li>
<li>
<a href="https://angular.cn/" title="简体中文版">简体中文版</a>
</li>
<li>
<a href="https://dev.angular.tw/" title="正體中文版">正體中文版</a>
</li>
</ul>
</div>
@@ -76,7 +76,6 @@
background-color 0.3s ease,
border-color 0.3s ease;
height: 100dvh;
padding-block-start: 1rem;
padding-block-end: 2rem;
box-sizing: border-box;
// Add a subtle border for the home page
@@ -101,6 +100,7 @@
&.adev-nav-primary--next,
&.adev-nav-primary--rc {
// change nav background to indicate this is the rc docs
position: relative;
background: linear-gradient(
140deg,
color-mix(in srgb, var(--orange-red), transparent 60%) 0%,
@@ -108,6 +108,18 @@
color-mix(in srgb, var(--electric-violet), transparent 70%) 25%,
color-mix(in srgb, var(--bright-blue), transparent 60%) 90%
);
&::before {
content: '';
position: absolute;
opacity: 0.8;
width: 100%;
height: 100%;
background-color: var(--octonary-contrast);
}
.adev-version-button {
border: 1px solid var(--quinary-contrast);
}
}
&.adev-nav-primary--deprecated {
@@ -153,6 +165,7 @@
list-style: none;
display: flex;
flex-direction: column;
padding-block-start: 1rem;
@include mq.for-tablet {
flex-direction: row;
+1 -1
View File
@@ -1,4 +1,4 @@
{
"branchName": "refs/heads/21.2.x",
"sha": "a68740532edcf94dafd4a6862a8985f506718016"
"sha": "a076ff7f05b678c4cdc6b85dbfe474a09f56022a"
}
+2 -2
View File
@@ -275,7 +275,7 @@
"source": {
"filePath": "src/aria/grid/grid-cell-widget.ts",
"startLine": 42,
"endLine": 134
"endLine": 135
}
},
{
@@ -446,7 +446,7 @@
"source": {
"filePath": "/src/aria/grid/grid.ts",
"startLine": 48,
"endLine": 177
"endLine": 178
}
},
{
@@ -731,6 +731,10 @@ export const routes: Routes = [
];
```
Services provided at the route level are available to all components and directives within that route, as well as to its guards and resolvers.
Since these services are instantiated independently of the route’s components, they do not have direct access to route-specific information.
## Library author patterns
When creating Angular libraries, you often need to provide flexible configuration options for consumers while maintaining clean APIs. Angular's own libraries demonstrate powerful patterns for achieving this.
@@ -523,6 +523,29 @@ export class Order {
Hidden fields don't participate in validation, allowing the form to be submitted even if the hidden field would otherwise be invalid.
### Tracking values for array fields
In signal forms, a `@for` block over a set of fields should be tracked by field identity.
```angular-ts
@Component({
imports: [FormField],
template: `
@for (field of form.emails; track field) {
<input [formField]="field" />
}
`,
})
export class App {
formModel = signal({emails: ['john.doe@mail.com', 'max.musterman@mail.com']});
form = form(this.formModel);
}
```
The forms system is already tracking the model values within the array and maintaining a stable identity of the fields it creates automatically.
When an item changes, it may represent a new logical entity even if some of its properties look the same. Tracking by identity ensures the framework treats it as a distinct item rather than reusing existing UI elements. This prevents stateful elements, like form inputs, from being incorrectly shared and keeps bindings aligned with the correct part of the model.
## Using field state in component logic
Field state signals work with Angular's reactive primitives like `computed()` and `effect()` for advanced form logic.
@@ -195,14 +195,14 @@ import {form, FormField, hidden} from '@angular/forms/signals';
imports: [FormField],
template: `
<label>
<input type="checkbox" [FormField]="profileForm.isPublic" />
<input type="checkbox" [formField]="profileForm.isPublic" />
Make profile public
</label>
@if (!profileForm.publicUrl().hidden()) {
<label>
Public URL
<input [FormField]="profileForm.publicUrl" />
<input [formField]="profileForm.publicUrl" />
</label>
}
`,
@@ -239,12 +239,12 @@ import {form, FormField, readonly} from '@angular/forms/signals';
template: `
<label>
Username (cannot be changed)
<input [FormField]="accountForm.username" />
<input [formField]="accountForm.username" />
</label>
<label>
Email
<input [FormField]="accountForm.email" />
<input [formField]="accountForm.email" />
</label>
`,
})
@@ -275,13 +275,13 @@ import {form, FormField, readonly} from '@angular/forms/signals';
imports: [FormField],
template: `
<label>
<input type="checkbox" [FormField]="documentForm.isLocked" />
<input type="checkbox" [formField]="documentForm.isLocked" />
Lock document
</label>
<label>
Document Title
<input [FormField]="documentForm.title" />
<input [formField]="documentForm.title" />
</label>
`,
})
@@ -359,7 +359,7 @@ import {form, FormField, debounce} from '@angular/forms/signals';
template: `
<label>
Search
<input [FormField]="searchForm.query" />
<input [formField]="searchForm.query" />
</label>
<p>Searching for: {{ searchForm.query().value() }}</p>
@@ -406,7 +406,7 @@ import {form, FormField, debounce} from '@angular/forms/signals';
template: `
<label>
Search
<input [FormField]="searchForm.query" />
<input [formField]="searchForm.query" />
</label>
`,
})
@@ -483,7 +483,7 @@ import {form, FormField, required, min, max} from '@angular/forms/signals';
template: `
<label>
Age (between {{ ageForm.age().min() }} and {{ ageForm.age().max() }})
<input type="number" [FormField]="ageForm.age" />
<input type="number" [formField]="ageForm.age" />
</label>
@if (ageForm.age().required()) {
@@ -716,6 +716,35 @@ const userForm = form(signal({email: '', password: ''}), (schemaPath) => {
});
```
### Dynamic schemas
You can pass a signal instead of a static schema so the validation schema updates automatically when its dependencies change.
```angular-ts
import {Component, computed, signal} from '@angular/core';
import {form, FormField, validateStandardSchema} from '@angular/forms/signals';
import z from 'zod';
@Component({
/* ... */
})
export class DynamicSchema {
model = signal({document: '', type: 'dni'});
// Schema reacts automatically to type changes
schema = computed(() =>
z.object({
document:
this.model().type === 'dni'
? z.string().length(8, 'DNI must be 8 digits')
: z.string().min(12, 'Passport must be at least 12 characters'),
}),
);
f = form(this.model, (p) => validateStandardSchema(p, () => this.schema()));
}
```
## Next steps
This guide covered creating and applying validation rules. Related guides explore other aspects of Signal Forms:
+3 -1
View File
@@ -92,7 +92,9 @@ Event replay supports _native browser events_, for example `click`, `mouseover`,
---
This feature ensures a consistent user experience, preventing user actions performed before Hydration from being ignored. NOTE: if you have [incremental hydration](guide/incremental-hydration) enabled, event replay is automatically enabled under the hood.
This feature ensures a consistent user experience, preventing user actions performed before Hydration from being ignored.
NOTE: If you have [incremental hydration](guide/incremental-hydration) enabled, event replay is automatically enabled under the hood.
## Constraints
@@ -6,6 +6,8 @@ Data resolvers allow you to fetch data before navigating to a route, ensuring th
A data resolver is a service that implements the `ResolveFn` function. It runs before a route activates and can fetch data from APIs, databases, or other sources. The resolved data becomes available to the component through the `ActivatedRoute`.
Data resolvers have access to [services provided at the route level](guide/di/defining-dependency-providers#route-providers) as well as route-specific information via the `route` argument.
## Why use data resolvers?
Data resolvers solve common routing challenges:
@@ -137,6 +137,13 @@ export class UserDetail {
// To: /users
this.router.navigate(['..'], {relativeTo: this.route});
}
navigateToList() {
// Angular resolves the commands array as a single navigation path relative to the current route.
// From: /users/123
// Result: /users/list
this.router.navigate(['..', 'list'], {relativeTo: this.route});
}
}
```
@@ -170,6 +177,53 @@ router.navigateByUrl('/checkout', {
});
```
### Display a different URL in the address bar
You can pass a browserUrl option to navigateByUrl to display a different URL in the browser's address bar than the one used for route matching.
This is useful when you want to redirect a user to a different route—such as an error page—without changing the URL that the user originally tried to visit.
```ts
router.navigateByUrl('/not-found', {browserUrl: '/products/missing-item'});
```
Angular navigates to and renders the `/not-found` route, but the browser address bar shows `/products/missing-item`.
NOTE: `browserUrl` only affects what appears in the browser's address bar.
## Customizing the browser URL with RouterLink
The `RouterLink` directive also supports a `browserUrl` input, which lets you control the URL displayed in the browser's address bar when a link is clicked, independently of the route Angular navigates to.
```angular-html
<!-- Navigates to /dashboard, but the address bar shows /home -->
<a [routerLink]="['/dashboard']" [browserUrl]="'/home'">Go to Dashboard</a>
```
You can also bind a `UrlTree` for more dynamic use cases:
```angular-ts
import {Component, inject} from '@angular/core';
import {Router, RouterLink, UrlTree} from '@angular/router';
@Component({
template: `
<a [routerLink]="['/products', product.id]" [browserUrl]="displayUrl">
{{ product.name }}
</a>
`,
imports: [RouterLink],
})
export class ProductList {
private router = inject(Router);
product = {id: 42, name: 'Widget'};
// Create a UrlTree to display in the address bar
displayUrl: UrlTree = this.router.createUrlTree(['/products', 'widget']);
}
```
## Next steps
Learn how to [read route state](/guide/routing/read-route-state) to create responsive and context-aware components.
+12 -10
View File
@@ -39,14 +39,16 @@ Angular provides four types of route guards, each serving different purposes:
<docs-pill href="#canmatch" title="CanMatch"/>
</docs-pill-row>
All the guards have access to [services provided at the route level](guide/di/defining-dependency-providers#route-providers) as well as route-specific information via the `route` argument.
### CanActivate
The `CanActivate` guard determines whether a user can access a route. It is most commonly used for authentication and authorization.
It has access to the following default arguments:
- `route: ActivatedRouteSnapshot` - Contains information about the route being activated
- `state: RouterStateSnapshot` - Contains the router's current state
- `route`: `ActivatedRouteSnapshot` - Contains information about the route being activated
- `state`: `RouterStateSnapshot` - Contains the router's current state
It can return the [standard return guard types](#route-guard-return-types).
@@ -70,8 +72,8 @@ The `CanActivateChild` guard determines whether a user can access child routes o
It has access to the following default arguments:
- `childRoute: ActivatedRouteSnapshot` - Contains information about the "future" snapshot (i.e., state the router is attempting to navigate to) of the child route being activated
- `state: RouterStateSnapshot` - Contains the router's current state
- `childRoute`: `ActivatedRouteSnapshot` - Contains information about the "future" snapshot (i.e., state the router is attempting to navigate to) of the child route being activated
- `state`: `RouterStateSnapshot` - Contains the router's current state
It can return the [standard return guard types](#route-guard-return-types).
@@ -93,10 +95,10 @@ The `CanDeactivate` guard determines whether a user can leave a route. A common
It has access to the following default arguments:
- `component: T` - The component instance being deactivated
- `currentRoute: ActivatedRouteSnapshot` - Contains information about the current route
- `currentState: RouterStateSnapshot` - Contains the current router state
- `nextState: RouterStateSnapshot` - Contains the next router state being navigated to
- `component`: `T` - The component instance being deactivated
- `currentRoute`: `ActivatedRouteSnapshot` - Contains information about the current route
- `currentState`: `RouterStateSnapshot` - Contains the current router state
- `nextState`: `RouterStateSnapshot` - Contains the next router state being navigated to
It can return the [standard return guard types](#route-guard-return-types).
@@ -121,8 +123,8 @@ The `CanMatch` guard determines whether a route can be matched during path match
It has access to the following default arguments:
- `route: Route` - The route configuration being evaluated
- `segments: UrlSegment[]` - The URL segments that have not been consumed by previous parent route evaluations
- `route`: `Route` - The route configuration being evaluated
- `segments`: `UrlSegment[]` - The URL segments that have not been consumed by previous parent route evaluations
It can return the [standard return guard types](#route-guard-return-types), but when it returns `false`, Angular tries other matching routes instead of completely blocking navigation.
+4
View File
@@ -173,6 +173,10 @@ bootstrapApplication(AppComponent, {
Always ensure that the nonces you provide are <strong>unique per request</strong> and that they are not predictable or guessable.
If an attacker can predict future nonces, they can circumvent the protections offered by CSP.
Generating a nonce at the origin server is generally discouraged when using a CDN, as responses are frequently cached. If the server generates a nonce and the CDN caches that HTML response, every subsequent visitor receives the same "unique" value, allowing an attacker to discover the static value and bypass CSP protections.
To maintain the "one-time-use" integrity of a nonce, it should ideally be generated at the Edge layer (e.g., CDN) just before the content is delivered to the user.
</docs-callout>
NOTE: If you want to [inline the critical CSS](/tools/cli/build#critical-css-inlining) of your application, you can not use the `CSP_NONCE` token, and should prefer the `autoCsp` option or set the `ngCspNonce` attribute on the root application element.
+140 -85
View File
@@ -1,117 +1,172 @@
# Testing services
To check that your services are working as you intend, you can write tests specifically for them.
Services typically contain your application's business logic that components rely on. Testing services verifies that the logic works correctly in isolation, independent of any component or template.
Services are often the smoothest files to unit test.
Here are some synchronous and asynchronous unit tests of the `ValueService` written without assistance from Angular testing utilities.
This guide uses [Vitest](https://vitest.dev/), which Angular CLI projects include by default. For more on testing setup, see the [testing overview guide](guide/testing#set-up-for-testing).
```ts
describe('ValueService', () => {
let service: ValueService;
## Testing a service
Consider a `Calculator` service that performs basic arithmetic:
```ts { header: 'calculator.ts' }
import {Injectable} from '@angular/core';
@Injectable({providedIn: 'root'})
export class Calculator {
add(a: number, b: number): number {
return a + b;
}
subtract(a: number, b: number): number {
return a - b;
}
}
```
To test this service, configure a `TestBed`, which is Angular's testing utility for creating an isolated testing environment for each test. It sets up dependency injection and lets you retrieve service instances — simulating how Angular wires things together in a real application.
```ts { header: 'calculator.spec.ts' }
import {TestBed} from '@angular/core/testing';
import {beforeEach, describe, expect, it} from 'vitest';
import {Calculator} from './calculator';
describe('Calculator', () => {
let service: Calculator;
beforeEach(() => {
// Only works if the service doesn't rely on Angular inject()
service = new ValueService();
// Injects the Calculator service which is available to Angular
// because the service uses `providedIn: 'root'`
service = TestBed.inject(Calculator);
});
it('getValue should return real value', () => {
expect(service.getValue()).toBe('real value');
it('adds two numbers', () => {
expect(service.add(1, 2)).toBe(3);
});
it('getObservableValue should return value from observable', async () => {
const value = await new Promise<string>((resolve) => {
service.getObservableValue().subscribe(resolve);
it('subtracts two numbers', () => {
expect(service.subtract(5, 3)).toBe(2);
});
});
```
In the example above, the `beforeEach` block injects a fresh instance of the service before every test. This ensures each test runs in isolation with no leaked state from previous tests.
## Testing services with dependencies
Most services depend on other services to run properly. By default, `TestBed` provides the real implementations of these dependencies, which means your tests exercise the actual code paths your application uses. Sometimes, however, a dependency may be complex, slow, or unpredictable. In those cases, you can substitute it with a controlled replacement.
Consider an `OrderTotal` service that relies on a `TaxCalculator` to compute the final price of an order:
```ts { header: 'tax-calculator.ts' }
import {Injectable} from '@angular/core';
@Injectable({providedIn: 'root'})
export class TaxCalculator {
calculate(subtotal: number): number {
return subtotal * 0.05;
}
}
```
```ts { header: 'order-total.ts' }
import {inject, Injectable} from '@angular/core';
import {TaxCalculator} from './tax-calculator';
@Injectable({providedIn: 'root'})
export class OrderTotal {
private taxCalculator = inject(TaxCalculator);
total(subtotal: number): number {
return subtotal + this.taxCalculator.calculate(subtotal);
}
}
```
In this example, `OrderTotal` uses `inject()` to request `TaxCalculator` from Angular's dependency injection system. By default, `TestBed` provides the real `TaxCalculator` which is perfect for simple calculations like this. However, if `TaxCalculator` involved complex logic, network requests, or unpredictable results, you might want to substitute it with a controlled replacement.
### Replacing a dependency with a stub
A stub is a way to replace a dependency or method with one that returns predictable values, which can make test results easier to verify.
To test `OrderTotal` without relying on the real `TaxCalculator`, you can provide a stub in the `TestBed` configuration.
```ts { header: 'order-total.spec.ts' }
import {TestBed} from '@angular/core/testing';
import {beforeEach, describe, expect, it, vi, type Mocked} from 'vitest';
import {OrderTotal} from './order-total';
import {TaxCalculator} from './tax-calculator';
// Vitest's `Mocked` utility type ensures the stub is type-safe,
// while `vi.fn()` creates a mock function for each method
const taxCalculatorStub: Mocked<TaxCalculator> = {
calculate: vi.fn(),
};
describe('OrderTotal', () => {
let service: OrderTotal;
beforeEach(() => {
// `mockReturnValue` sets a controlled return value for the stub
taxCalculatorStub.calculate.mockReturnValue(5);
TestBed.configureTestingModule({
// The `providers` array accepts a provider object where `provide`
// specifies the dependency to replace and `useValue` defines the stub
providers: [{provide: TaxCalculator, useValue: taxCalculatorStub}],
});
expect(value).toBe('observable value');
service = TestBed.inject(OrderTotal);
});
it('getPromiseValue should return value from a promise', async () => {
const value = await service.getPromiseValue();
expect(value).toBe('promise value');
it('adds tax to the subtotal', () => {
expect(service.total(100)).toBe(105);
});
});
```
## Testing services with the `TestBed`
With this stub, whenever `OrderTotal` requests `TaxCalculator`, the `TestBed` knows to use the `taxCalculatorStub` instead. Because the stub always returns 5, the test verifies that `OrderTotal` correctly adds the tax value to the subtotal regardless of whether the tax rate changes in `TaxCalculator`.
Your application relies on Angular [dependency injection (DI)](guide/di) to create services.
When a service has a dependent service, DI finds or creates that dependent service.
And if that dependent service has its own dependencies, DI finds-or-creates them as well.
### Verifying interactions with spies
As a service _consumer_, you don't worry about any of this.
You don't worry about the order of constructor arguments or how they're created.
A stub controls what a dependency returns, but sometimes you also need to verify that a service called its dependency with the correct arguments. This can be accomplished with spies, which track how a function is called. With Vitest, this functionality is built into `vi.fn()` and lets you assert on interactions between services.
As a service _tester_, you must at least think about the first level of service dependencies but you _can_ let Angular DI do the service creation and deal with constructor argument order when you use the `TestBed` testing utility to provide and create services.
```ts { header: 'order-total.spec.ts' }
import {TestBed} from '@angular/core/testing';
import {beforeEach, describe, expect, it, vi, type Mocked} from 'vitest';
import {OrderTotal} from './order-total';
import {TaxCalculator} from './tax-calculator';
## Angular `TestBed`
const taxCalculatorStub: Mocked<TaxCalculator> = {
calculate: vi.fn(),
};
The `TestBed` is the most important of the Angular testing utilities.
The `TestBed` creates a dynamically-constructed Angular _test_ module that emulates an Angular [@NgModule](guide/ngmodules/overview).
describe('OrderTotal', () => {
let service: OrderTotal;
The `TestBed.configureTestingModule()` method takes a metadata object that can have most of the properties of an [@NgModule](guide/ngmodules/overview).
beforeEach(() => {
taxCalculatorStub.calculate.mockReturnValue(5);
To test a service, you set the `providers` metadata property with an array of the services that you'll test or mock.
```ts
let service: ValueService;
beforeEach(() => {
TestBed.configureTestingModule({providers: [ValueService]});
});
```
Then inject it inside a test by calling `TestBed.inject()` with the service class as the argument.
```ts
it('should use ValueService', () => {
service = TestBed.inject(ValueService);
expect(service.getValue()).toBe('real value');
});
```
Or inside the `beforeEach()` if you prefer to inject the service as part of your setup.
```ts
beforeEach(() => {
TestBed.configureTestingModule({providers: [ValueService]});
service = TestBed.inject(ValueService);
});
```
When testing a service with a dependency, provide the mock in the `providers` array.
In the following example, the mock is a spy object.
```ts
let masterService: MainService;
let valueServiceSpy: Mocked<ValueService>;
beforeEach(() => {
const spy: Mocked<ValueService> = {getValue: vi.fn()};
TestBed.configureTestingModule({
providers: [MainService, {provide: ValueService, useValue: spy}],
TestBed.configureTestingModule({
providers: [{provide: TaxCalculator, useValue: taxCalculatorStub}],
});
service = TestBed.inject(OrderTotal);
});
masterService = TestBed.inject(MainService);
valueServiceSpy = TestBed.inject(ValueService) as Mocked<ValueService>;
it('adds tax to the subtotal', () => {
expect(service.total(100)).toBe(105);
});
// Verify the interaction with a spy
it('calls the tax calculator', () => {
service.total(100);
expect(taxCalculatorStub.calculate).toHaveBeenCalledExactlyOnce();
});
});
```
The test consumes that spy in the same way it did earlier.
```ts
it('getValue should return stubbed value from a spy', () => {
const stubValue = 'stub value';
valueServiceSpy.getValue.mockReturnValue(stubValue);
expect(masterService.getValue(), 'service returned stub value').toBe(stubValue);
expect(valueServiceSpy.getValue, 'spy method was called once').toHaveBeenCalledTimes(1);
expect(valueServiceSpy.getValue.mock.results.at(-1)?.value).toBe(stubValue);
});
```
The new test verifies that `OrderTotal` called `TaxCalculator.calculate` when computing the total. This is useful when verifying that the interaction between services happened correctly.
## Testing HTTP services
For testing services that rely on the `HttpClient`, refer to the [dedicated guide](/guide/http/testing).
Many services use Angular's `HttpClient` to fetch data from a server. Angular provides dedicated testing utilities for `HttpClient` that let you control HTTP responses without making real network requests.
For details on testing services that use `HttpClient`, see the [HTTP testing guide](guide/http/testing).
@@ -249,13 +249,13 @@
}
},
"node_modules/@angular-devkit/architect": {
"version": "0.2102.0-rc.2",
"resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.2102.0-rc.2.tgz",
"integrity": "sha512-IP2wGHDxBLgtWoxXFCFmKF5HsKMAXgGi2hj2SmcoR9q8HDKVPmyBUBT10sdCdSyiM8J3+3yHYDW4rOO22ya5Pw==",
"version": "0.2102.0",
"resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.2102.0.tgz",
"integrity": "sha512-kYFwTNzToG2SJMxj2f41w3QRtdqlrFuF+bpZrtIaHOP078Ktld8EPIp9KqB0Y46Vvs69ifby5Q1/wPD9wA3iaw==",
"dev": true,
"license": "MIT",
"dependencies": {
"@angular-devkit/core": "21.2.0-rc.2",
"@angular-devkit/core": "21.2.0",
"rxjs": "7.8.2"
},
"bin": {
@@ -268,9 +268,9 @@
}
},
"node_modules/@angular-devkit/core": {
"version": "21.2.0-rc.2",
"resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-21.2.0-rc.2.tgz",
"integrity": "sha512-4Y8qoXFY9gdF/WahgfPRWORJqmgdAPKkDGjmyMBqwNdL96vqyKq0/5TD8K5PsUXV+HWg6GClWTWhRyWVxJtoLQ==",
"version": "21.2.0",
"resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-21.2.0.tgz",
"integrity": "sha512-HZdTn46Ca6qbb9Zef8R/+TWsk6mNKRm4rJyL3PxHP6HnVCwSPNZ0LNN9BjVREBs+UlRdXqBGFBZh5D1nBgu5GQ==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -296,13 +296,13 @@
}
},
"node_modules/@angular-devkit/schematics": {
"version": "21.2.0-rc.2",
"resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-21.2.0-rc.2.tgz",
"integrity": "sha512-+vkSdeSRIAIMW5pQW8YCD0rrPCM6EpFFuHGSoJZtjXRGnNuJKYApNqLreO1daZvVTG6YokB5KkE+mnvp9rBEeg==",
"version": "21.2.0",
"resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-21.2.0.tgz",
"integrity": "sha512-3kn3FI5v7BQ7Zct6raek+WgvyDwOJ8wElbyC903GxMQCDBRGGcevhHvTAIHhknihEsrgplzPhTlWeMbk1JfdFg==",
"dev": true,
"license": "MIT",
"dependencies": {
"@angular-devkit/core": "21.2.0-rc.2",
"@angular-devkit/core": "21.2.0",
"jsonc-parser": "3.3.1",
"magic-string": "0.30.21",
"ora": "9.3.0",
@@ -315,14 +315,14 @@
}
},
"node_modules/@angular/build": {
"version": "21.2.0-rc.2",
"resolved": "https://registry.npmjs.org/@angular/build/-/build-21.2.0-rc.2.tgz",
"integrity": "sha512-1Hhr0w0uUBuMPEFjv9yXEHKahNHbw/NWt9uo1cf43ipFrrBKYHJj2DwwgyKKoEmtK/ap/l9yEZpL2oCfqCwEFQ==",
"version": "21.2.0",
"resolved": "https://registry.npmjs.org/@angular/build/-/build-21.2.0.tgz",
"integrity": "sha512-K0EqiHz2y7TSyD4adWD0+C/P9khKlrsSWavXWxGRvoSJC/H3I3SK5Z6BWwftBibXR1Fis7njwvl5IGAlQrDchA==",
"dev": true,
"license": "MIT",
"dependencies": {
"@ampproject/remapping": "2.3.0",
"@angular-devkit/architect": "0.2102.0-rc.2",
"@angular-devkit/architect": "0.2102.0",
"@babel/core": "7.29.0",
"@babel/helper-annotate-as-pure": "7.27.3",
"@babel/helper-split-export-declaration": "7.24.7",
@@ -358,17 +358,17 @@
"lmdb": "3.5.1"
},
"peerDependencies": {
"@angular/compiler": "^21.0.0 || ^21.2.0-next.0",
"@angular/compiler-cli": "^21.0.0 || ^21.2.0-next.0",
"@angular/core": "^21.0.0 || ^21.2.0-next.0",
"@angular/localize": "^21.0.0 || ^21.2.0-next.0",
"@angular/platform-browser": "^21.0.0 || ^21.2.0-next.0",
"@angular/platform-server": "^21.0.0 || ^21.2.0-next.0",
"@angular/service-worker": "^21.0.0 || ^21.2.0-next.0",
"@angular/ssr": "^21.2.0-rc.2",
"@angular/compiler": "^21.0.0",
"@angular/compiler-cli": "^21.0.0",
"@angular/core": "^21.0.0",
"@angular/localize": "^21.0.0",
"@angular/platform-browser": "^21.0.0",
"@angular/platform-server": "^21.0.0",
"@angular/service-worker": "^21.0.0",
"@angular/ssr": "^21.2.0",
"karma": "^6.4.0",
"less": "^4.2.0",
"ng-packagr": "^21.0.0 || ^21.2.0-next.0",
"ng-packagr": "^21.0.0",
"postcss": "^8.4.0",
"tailwindcss": "^2.0.0 || ^3.0.0 || ^4.0.0",
"tslib": "^2.3.0",
@@ -415,19 +415,19 @@
}
},
"node_modules/@angular/cli": {
"version": "21.2.0-rc.2",
"resolved": "https://registry.npmjs.org/@angular/cli/-/cli-21.2.0-rc.2.tgz",
"integrity": "sha512-rFuYlatMsYRqEi8FlvWqmTMU7x1iPFJpZUtAIYKo35C9kl0/Z5jhqqAv2Ws3LCX0lmVCzQ3TWRiFQp7T+2DWkw==",
"version": "21.2.0",
"resolved": "https://registry.npmjs.org/@angular/cli/-/cli-21.2.0.tgz",
"integrity": "sha512-yaGEpckqgOemcHkoWeH92i9eNrcbr9iE/dnxL+Du6s9spTAXJ2jjtYfszhmowuQZkCK5rjecMb8ctNtHlaGCjg==",
"dev": true,
"license": "MIT",
"dependencies": {
"@angular-devkit/architect": "0.2102.0-rc.2",
"@angular-devkit/core": "21.2.0-rc.2",
"@angular-devkit/schematics": "21.2.0-rc.2",
"@angular-devkit/architect": "0.2102.0",
"@angular-devkit/core": "21.2.0",
"@angular-devkit/schematics": "21.2.0",
"@inquirer/prompts": "7.10.1",
"@listr2/prompt-adapter-inquirer": "3.0.5",
"@modelcontextprotocol/sdk": "1.26.0",
"@schematics/angular": "21.2.0-rc.2",
"@schematics/angular": "21.2.0",
"@yarnpkg/lockfile": "1.1.0",
"algoliasearch": "5.48.1",
"ini": "6.0.0",
@@ -450,9 +450,9 @@
}
},
"node_modules/@angular/common": {
"version": "21.2.0-rc.0",
"resolved": "https://registry.npmjs.org/@angular/common/-/common-21.2.0-rc.0.tgz",
"integrity": "sha512-2O3cbBIM8ls97XwkYVdgJwEg3UOy/bVZ0uBoY14cLskhETj6wbrFENiy8KpikZ+xsTxE9gWohairxCRiEoFuKg==",
"version": "21.2.0",
"resolved": "https://registry.npmjs.org/@angular/common/-/common-21.2.0.tgz",
"integrity": "sha512-6zJMPi0i/XDniEgv3/t2BjuDHiOG44lgIR5PYyxqGpgJ0kqB5hku/0TuentNEi1VnBYgthnfhjek7c+lakXmhw==",
"license": "MIT",
"dependencies": {
"tslib": "^2.3.0"
@@ -461,14 +461,14 @@
"node": "^20.19.0 || ^22.12.0 || >=24.0.0"
},
"peerDependencies": {
"@angular/core": "21.2.0-rc.0",
"@angular/core": "21.2.0",
"rxjs": "^6.5.3 || ^7.4.0"
}
},
"node_modules/@angular/compiler": {
"version": "21.2.0-rc.0",
"resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-21.2.0-rc.0.tgz",
"integrity": "sha512-gl2dQgMFKkH/iM/YxqWO0oIbYRpBZpOZuxj9W5TjG50EpMDioD1CNu2DfXpODVo3/rOfZJvOa+Jw0Cxpj5ClMQ==",
"version": "21.2.0",
"resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-21.2.0.tgz",
"integrity": "sha512-0RPkma8UVNpse/VJcXT9w6SKzTMz4J/uMGj0l9enM1frg9xrx1fwi/lLmaVV9Nr9LfqPjQdxNFFlvaBB7g/2zg==",
"license": "MIT",
"dependencies": {
"tslib": "^2.3.0"
@@ -478,9 +478,9 @@
}
},
"node_modules/@angular/compiler-cli": {
"version": "21.2.0-rc.0",
"resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-21.2.0-rc.0.tgz",
"integrity": "sha512-lHPA5BzQq9ttHXCAnAC/zW5vW0lFiawBIvRpNRbsI8Vw1noMs614OqZ2R6UBReVPE4kpyGwh7HCQIZyX5Cth6g==",
"version": "21.2.0",
"resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-21.2.0.tgz",
"integrity": "sha512-gZd58p0/JjgdxMX3v+LjCB6e3dBIfNVr/YzXoh55TfffdBCUQY94hl1+DFQkJ72K5EX+1zbaz03dIm30kw1bGw==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -501,7 +501,7 @@
"node": "^20.19.0 || ^22.12.0 || >=24.0.0"
},
"peerDependencies": {
"@angular/compiler": "21.2.0-rc.0",
"@angular/compiler": "21.2.0",
"typescript": ">=5.9 <6.1"
},
"peerDependenciesMeta": {
@@ -511,9 +511,9 @@
}
},
"node_modules/@angular/core": {
"version": "21.2.0-rc.0",
"resolved": "https://registry.npmjs.org/@angular/core/-/core-21.2.0-rc.0.tgz",
"integrity": "sha512-Txdi6ocSNC8GbCYMGh2AUm1lx+J11LNRjNrfGcgxQhQAiEPVO8jGojfObM+rdjv1h8t0pCms5vzEmFiJ9z06hg==",
"version": "21.2.0",
"resolved": "https://registry.npmjs.org/@angular/core/-/core-21.2.0.tgz",
"integrity": "sha512-VnTbmZq3g3Q+s3nCZ8VUDMLjMezOg/bqUxAJ/DrRWCrEcTP5JO3mrNPs3FHj+qlB0T+BQP7uQv6QTzPVKybwoA==",
"license": "MIT",
"dependencies": {
"tslib": "^2.3.0"
@@ -522,7 +522,7 @@
"node": "^20.19.0 || ^22.12.0 || >=24.0.0"
},
"peerDependencies": {
"@angular/compiler": "21.2.0-rc.0",
"@angular/compiler": "21.2.0",
"rxjs": "^6.5.3 || ^7.4.0",
"zone.js": "~0.15.0 || ~0.16.0"
},
@@ -536,9 +536,9 @@
}
},
"node_modules/@angular/forms": {
"version": "21.2.0-rc.0",
"resolved": "https://registry.npmjs.org/@angular/forms/-/forms-21.2.0-rc.0.tgz",
"integrity": "sha512-GsX4c+GYUxcKla8yO/hpEzpliCsMslP+yIIk9l6831PkSf3uCyKHUHriJtOEca4uN5fNo23ix5NXo5VPkmldLQ==",
"version": "21.2.0",
"resolved": "https://registry.npmjs.org/@angular/forms/-/forms-21.2.0.tgz",
"integrity": "sha512-NduUtPWLauH/FLayEDkLyaKAGqKzXbcfO7468LOWCXN3crhNVQyIWRQPOUcdpoJwDAGLpN85m3DhJhXNnA9c5w==",
"license": "MIT",
"dependencies": {
"@standard-schema/spec": "^1.0.0",
@@ -548,16 +548,16 @@
"node": "^20.19.0 || ^22.12.0 || >=24.0.0"
},
"peerDependencies": {
"@angular/common": "21.2.0-rc.0",
"@angular/core": "21.2.0-rc.0",
"@angular/platform-browser": "21.2.0-rc.0",
"@angular/common": "21.2.0",
"@angular/core": "21.2.0",
"@angular/platform-browser": "21.2.0",
"rxjs": "^6.5.3 || ^7.4.0"
}
},
"node_modules/@angular/platform-browser": {
"version": "21.2.0-rc.0",
"resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-21.2.0-rc.0.tgz",
"integrity": "sha512-FCNRhzkf35l6B18gzaT6GDdTJ3v4AiLOSXc5RdiQ2PMn2dLOkm70SH0caXQGzvtXAzHrHlR+Evj/ZqaFYvjcYg==",
"version": "21.2.0",
"resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-21.2.0.tgz",
"integrity": "sha512-IUGukpvvT2B5Dl76qzk6rY7UIHUT9u4BhT2AwVz+5JqcX9KwQtYD17Gt7wj6bvIgCXKWG+CfN8Zd9DECOCYWjg==",
"license": "MIT",
"dependencies": {
"tslib": "^2.3.0"
@@ -566,9 +566,9 @@
"node": "^20.19.0 || ^22.12.0 || >=24.0.0"
},
"peerDependencies": {
"@angular/animations": "21.2.0-rc.0",
"@angular/common": "21.2.0-rc.0",
"@angular/core": "21.2.0-rc.0"
"@angular/animations": "21.2.0",
"@angular/common": "21.2.0",
"@angular/core": "21.2.0"
},
"peerDependenciesMeta": {
"@angular/animations": {
@@ -577,9 +577,9 @@
}
},
"node_modules/@angular/router": {
"version": "21.2.0-rc.0",
"resolved": "https://registry.npmjs.org/@angular/router/-/router-21.2.0-rc.0.tgz",
"integrity": "sha512-KZmZCdm4H+w3UC1vorQ/Nj4FEHY4sgRkwp+zf4E4WFV+sflyFzqFxzVIKGJ1xTzjaDebCRmipJnc3DZ09fv1fg==",
"version": "21.2.0",
"resolved": "https://registry.npmjs.org/@angular/router/-/router-21.2.0.tgz",
"integrity": "sha512-siliJ+jJRUCRZ0cdkqc7zww9Didz56Z0Z2YPIuR2n5TZLiuJY+jAf6xotXKp/v6v8XoGJwLiRNipGgNDRIAlWA==",
"license": "MIT",
"dependencies": {
"tslib": "^2.3.0"
@@ -588,9 +588,9 @@
"node": "^20.19.0 || ^22.12.0 || >=24.0.0"
},
"peerDependencies": {
"@angular/common": "21.2.0-rc.0",
"@angular/core": "21.2.0-rc.0",
"@angular/platform-browser": "21.2.0-rc.0",
"@angular/common": "21.2.0",
"@angular/core": "21.2.0",
"@angular/platform-browser": "21.2.0",
"rxjs": "^6.5.3 || ^7.4.0"
}
},
@@ -2592,9 +2592,9 @@
}
},
"node_modules/@npmcli/run-script": {
"version": "10.0.3",
"resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-10.0.3.tgz",
"integrity": "sha512-ER2N6itRkzWbbtVmZ9WKaWxVlKlOeBFF1/7xx+KA5J1xKa4JjUwBdb6tDpk0v1qA+d+VDwHI9qmLcXSWcmi+Rw==",
"version": "10.0.4",
"resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-10.0.4.tgz",
"integrity": "sha512-mGUWr1uMnf0le2TwfOZY4SFxZGXGfm4Jtay/nwAa2FLNAKXUoUwaGwBMNH36UHPtinWfTSJ3nqFQr0091CxVGg==",
"dev": true,
"license": "ISC",
"dependencies": {
@@ -2602,34 +2602,7 @@
"@npmcli/package-json": "^7.0.0",
"@npmcli/promise-spawn": "^9.0.0",
"node-gyp": "^12.1.0",
"proc-log": "^6.0.0",
"which": "^6.0.0"
},
"engines": {
"node": "^20.17.0 || >=22.9.0"
}
},
"node_modules/@npmcli/run-script/node_modules/isexe": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/isexe/-/isexe-4.0.0.tgz",
"integrity": "sha512-FFUtZMpoZ8RqHS3XeXEmHWLA4thH+ZxCv2lOiPIn1Xc7CxrqhWzNSDzD+/chS/zbYezmiwWLdQC09JdQKmthOw==",
"dev": true,
"license": "BlueOak-1.0.0",
"engines": {
"node": ">=20"
}
},
"node_modules/@npmcli/run-script/node_modules/which": {
"version": "6.0.1",
"resolved": "https://registry.npmjs.org/which/-/which-6.0.1.tgz",
"integrity": "sha512-oGLe46MIrCRqX7ytPUf66EAYvdeMIZYn3WaocqqKZAxrBpkqHfL/qvTyJ/bTk5+AqHCjXmrv3CEWgy368zhRUg==",
"dev": true,
"license": "ISC",
"dependencies": {
"isexe": "^4.0.0"
},
"bin": {
"node-which": "bin/which.js"
"proc-log": "^6.0.0"
},
"engines": {
"node": "^20.17.0 || >=22.9.0"
@@ -3542,14 +3515,14 @@
]
},
"node_modules/@schematics/angular": {
"version": "21.2.0-rc.2",
"resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-21.2.0-rc.2.tgz",
"integrity": "sha512-QzyPSwdkpcEN5iQ28sfb7tak8MukvGC6nzl1kgziWNYPyNaf+DIXEfspOnCME0ZwjI3pBpJnBvj+uMn8fx3YSw==",
"version": "21.2.0",
"resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-21.2.0.tgz",
"integrity": "sha512-GQUIeGzZwCT9/W5MAkKnkwETROPbA1eRmy3JF56jLmvr95tJnypGOG8jGYy0d+tcEVujIouh48r4J3bJQg5mrw==",
"dev": true,
"license": "MIT",
"dependencies": {
"@angular-devkit/core": "21.2.0-rc.2",
"@angular-devkit/schematics": "21.2.0-rc.2",
"@angular-devkit/core": "21.2.0",
"@angular-devkit/schematics": "21.2.0",
"jsonc-parser": "3.3.1"
},
"engines": {
@@ -3920,9 +3893,9 @@
"license": "ISC"
},
"node_modules/brace-expansion": {
"version": "5.0.3",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.3.tgz",
"integrity": "sha512-fy6KJm2RawA5RcHkLa1z/ScpBeA762UF9KmZQxwIbDtRJrgLzM10depAiEQ+CXYcoiqW1/m96OAAoke2nE9EeA==",
"version": "5.0.4",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.4.tgz",
"integrity": "sha512-h+DEnpVvxmfVefa4jFbCf5HdH5YMDXRsmKflpf1pILZWRFlTbJpxeU55nJl4Smt5HQaGzg1o6RHFPJaOqnmBDg==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -4048,9 +4021,9 @@
}
},
"node_modules/caniuse-lite": {
"version": "1.0.30001774",
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001774.tgz",
"integrity": "sha512-DDdwPGz99nmIEv216hKSgLD+D4ikHQHjBC/seF98N9CPqRX4M5mSxT9eTV6oyisnJcuzxtZy4n17yKKQYmYQOA==",
"version": "1.0.30001775",
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001775.tgz",
"integrity": "sha512-s3Qv7Lht9zbVKE9XoTyRG6wVDCKdtOFIjBGg3+Yhn6JaytuNKPIjBMTMIY1AnOH3seL5mvF+x33oGAyK3hVt3A==",
"dev": true,
"funding": [
{
@@ -4144,14 +4117,14 @@
}
},
"node_modules/cli-truncate": {
"version": "5.1.1",
"resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-5.1.1.tgz",
"integrity": "sha512-SroPvNHxUnk+vIW/dOSfNqdy1sPEFkrTk6TUtqLCnBlo3N7TNYYkzzN7uSD6+jVjrdO4+p8nH7JzH6cIvUem6A==",
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-5.2.0.tgz",
"integrity": "sha512-xRwvIOMGrfOAnM1JYtqQImuaNtDEv9v6oIYAs4LIHwTiKee8uwvIi363igssOC0O5U04i4AlENs79LQLu9tEMw==",
"dev": true,
"license": "MIT",
"dependencies": {
"slice-ansi": "^7.1.0",
"string-width": "^8.0.0"
"slice-ansi": "^8.0.0",
"string-width": "^8.2.0"
},
"engines": {
"node": ">=20"
@@ -5017,9 +4990,9 @@
}
},
"node_modules/hono": {
"version": "4.12.2",
"resolved": "https://registry.npmjs.org/hono/-/hono-4.12.2.tgz",
"integrity": "sha512-gJnaDHXKDayjt8ue0n8Gs0A007yKXj4Xzb8+cNjZeYsSzzwKc0Lr+OZgYwVfB0pHfUs17EPoLvrOsEaJ9mj+Tg==",
"version": "4.12.3",
"resolved": "https://registry.npmjs.org/hono/-/hono-4.12.3.tgz",
"integrity": "sha512-SFsVSjp8sj5UumXOOFlkZOG6XS9SJDKw0TbwFeV+AJ8xlST8kxK5Z/5EYa111UY8732lK2S/xB653ceuaoGwpg==",
"dev": true,
"license": "MIT",
"engines": {
@@ -5534,6 +5507,23 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/log-update/node_modules/slice-ansi": {
"version": "7.1.2",
"resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-7.1.2.tgz",
"integrity": "sha512-iOBWFgUX7caIZiuutICxVgX1SdxwAVFFKwt1EvMYYec/NWO5meOJ6K5uQxhrYBdQJne4KxiqZc+KptFOWFSI9w==",
"dev": true,
"license": "MIT",
"dependencies": {
"ansi-styles": "^6.2.1",
"is-fullwidth-code-point": "^5.0.0"
},
"engines": {
"node": ">=18"
},
"funding": {
"url": "https://github.com/chalk/slice-ansi?sponsor=1"
}
},
"node_modules/log-update/node_modules/string-width": {
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz",
@@ -5687,9 +5677,9 @@
}
},
"node_modules/minimatch": {
"version": "10.2.3",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.3.tgz",
"integrity": "sha512-Rwi3pnapEqirPSbWbrZaa6N3nmqq4Xer/2XooiOKyV3q12ML06f7MOuc5DVH8ONZIFhwIYQ3yzPH4nt7iWHaTg==",
"version": "10.2.4",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.4.tgz",
"integrity": "sha512-oRjTw/97aTBN0RHbYCdtF1MQfvusSIBQM0IZEgzl6426+8jSC0nF1a/GmnVLpfB9yyr6g6FTqWqiZVbxrtaCIg==",
"dev": true,
"license": "BlueOak-1.0.0",
"dependencies": {
@@ -6445,9 +6435,9 @@
}
},
"node_modules/postcss": {
"version": "8.5.6",
"resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz",
"integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==",
"version": "8.5.8",
"resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.8.tgz",
"integrity": "sha512-OW/rX8O/jXnm82Ey1k44pObPtdblfiuWnrd8X7GJ7emImCOstunGbXUpp7HdBrFQX6rJzn3sPT397Wp5aCwCHg==",
"dev": true,
"funding": [
{
@@ -7021,17 +7011,17 @@
}
},
"node_modules/slice-ansi": {
"version": "7.1.2",
"resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-7.1.2.tgz",
"integrity": "sha512-iOBWFgUX7caIZiuutICxVgX1SdxwAVFFKwt1EvMYYec/NWO5meOJ6K5uQxhrYBdQJne4KxiqZc+KptFOWFSI9w==",
"version": "8.0.0",
"resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-8.0.0.tgz",
"integrity": "sha512-stxByr12oeeOyY2BlviTNQlYV5xOj47GirPr4yA1hE9JCtxfQN0+tVbkxwCtYDQWhEKWFHsEK48ORg5jrouCAg==",
"dev": true,
"license": "MIT",
"dependencies": {
"ansi-styles": "^6.2.1",
"is-fullwidth-code-point": "^5.0.0"
"ansi-styles": "^6.2.3",
"is-fullwidth-code-point": "^5.1.0"
},
"engines": {
"node": ">=18"
"node": ">=20"
},
"funding": {
"url": "https://github.com/chalk/slice-ansi?sponsor=1"
@@ -7198,13 +7188,13 @@
}
},
"node_modules/strip-ansi": {
"version": "7.1.2",
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz",
"integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==",
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.2.0.tgz",
"integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==",
"dev": true,
"license": "MIT",
"dependencies": {
"ansi-regex": "^6.0.1"
"ansi-regex": "^6.2.2"
},
"engines": {
"node": ">=12"
+126 -136
View File
@@ -250,13 +250,13 @@
}
},
"node_modules/@angular-devkit/architect": {
"version": "0.2102.0-rc.2",
"resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.2102.0-rc.2.tgz",
"integrity": "sha512-IP2wGHDxBLgtWoxXFCFmKF5HsKMAXgGi2hj2SmcoR9q8HDKVPmyBUBT10sdCdSyiM8J3+3yHYDW4rOO22ya5Pw==",
"version": "0.2102.0",
"resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.2102.0.tgz",
"integrity": "sha512-kYFwTNzToG2SJMxj2f41w3QRtdqlrFuF+bpZrtIaHOP078Ktld8EPIp9KqB0Y46Vvs69ifby5Q1/wPD9wA3iaw==",
"dev": true,
"license": "MIT",
"dependencies": {
"@angular-devkit/core": "21.2.0-rc.2",
"@angular-devkit/core": "21.2.0",
"rxjs": "7.8.2"
},
"bin": {
@@ -269,9 +269,9 @@
}
},
"node_modules/@angular-devkit/core": {
"version": "21.2.0-rc.2",
"resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-21.2.0-rc.2.tgz",
"integrity": "sha512-4Y8qoXFY9gdF/WahgfPRWORJqmgdAPKkDGjmyMBqwNdL96vqyKq0/5TD8K5PsUXV+HWg6GClWTWhRyWVxJtoLQ==",
"version": "21.2.0",
"resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-21.2.0.tgz",
"integrity": "sha512-HZdTn46Ca6qbb9Zef8R/+TWsk6mNKRm4rJyL3PxHP6HnVCwSPNZ0LNN9BjVREBs+UlRdXqBGFBZh5D1nBgu5GQ==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -297,13 +297,13 @@
}
},
"node_modules/@angular-devkit/schematics": {
"version": "21.2.0-rc.2",
"resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-21.2.0-rc.2.tgz",
"integrity": "sha512-+vkSdeSRIAIMW5pQW8YCD0rrPCM6EpFFuHGSoJZtjXRGnNuJKYApNqLreO1daZvVTG6YokB5KkE+mnvp9rBEeg==",
"version": "21.2.0",
"resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-21.2.0.tgz",
"integrity": "sha512-3kn3FI5v7BQ7Zct6raek+WgvyDwOJ8wElbyC903GxMQCDBRGGcevhHvTAIHhknihEsrgplzPhTlWeMbk1JfdFg==",
"dev": true,
"license": "MIT",
"dependencies": {
"@angular-devkit/core": "21.2.0-rc.2",
"@angular-devkit/core": "21.2.0",
"jsonc-parser": "3.3.1",
"magic-string": "0.30.21",
"ora": "9.3.0",
@@ -316,14 +316,14 @@
}
},
"node_modules/@angular/build": {
"version": "21.2.0-rc.2",
"resolved": "https://registry.npmjs.org/@angular/build/-/build-21.2.0-rc.2.tgz",
"integrity": "sha512-1Hhr0w0uUBuMPEFjv9yXEHKahNHbw/NWt9uo1cf43ipFrrBKYHJj2DwwgyKKoEmtK/ap/l9yEZpL2oCfqCwEFQ==",
"version": "21.2.0",
"resolved": "https://registry.npmjs.org/@angular/build/-/build-21.2.0.tgz",
"integrity": "sha512-K0EqiHz2y7TSyD4adWD0+C/P9khKlrsSWavXWxGRvoSJC/H3I3SK5Z6BWwftBibXR1Fis7njwvl5IGAlQrDchA==",
"dev": true,
"license": "MIT",
"dependencies": {
"@ampproject/remapping": "2.3.0",
"@angular-devkit/architect": "0.2102.0-rc.2",
"@angular-devkit/architect": "0.2102.0",
"@babel/core": "7.29.0",
"@babel/helper-annotate-as-pure": "7.27.3",
"@babel/helper-split-export-declaration": "7.24.7",
@@ -359,17 +359,17 @@
"lmdb": "3.5.1"
},
"peerDependencies": {
"@angular/compiler": "^21.0.0 || ^21.2.0-next.0",
"@angular/compiler-cli": "^21.0.0 || ^21.2.0-next.0",
"@angular/core": "^21.0.0 || ^21.2.0-next.0",
"@angular/localize": "^21.0.0 || ^21.2.0-next.0",
"@angular/platform-browser": "^21.0.0 || ^21.2.0-next.0",
"@angular/platform-server": "^21.0.0 || ^21.2.0-next.0",
"@angular/service-worker": "^21.0.0 || ^21.2.0-next.0",
"@angular/ssr": "^21.2.0-rc.2",
"@angular/compiler": "^21.0.0",
"@angular/compiler-cli": "^21.0.0",
"@angular/core": "^21.0.0",
"@angular/localize": "^21.0.0",
"@angular/platform-browser": "^21.0.0",
"@angular/platform-server": "^21.0.0",
"@angular/service-worker": "^21.0.0",
"@angular/ssr": "^21.2.0",
"karma": "^6.4.0",
"less": "^4.2.0",
"ng-packagr": "^21.0.0 || ^21.2.0-next.0",
"ng-packagr": "^21.0.0",
"postcss": "^8.4.0",
"tailwindcss": "^2.0.0 || ^3.0.0 || ^4.0.0",
"tslib": "^2.3.0",
@@ -484,9 +484,9 @@
}
},
"node_modules/@angular/build/node_modules/@types/node": {
"version": "25.3.0",
"resolved": "https://registry.npmjs.org/@types/node/-/node-25.3.0.tgz",
"integrity": "sha512-4K3bqJpXpqfg2XKGK9bpDTc6xO/xoUP/RBWS7AtRMug6zZFaRekiLzjVtAoZMquxoAbzBvy5nxQ7veS5eYzf8A==",
"version": "25.3.3",
"resolved": "https://registry.npmjs.org/@types/node/-/node-25.3.3.tgz",
"integrity": "sha512-DpzbrH7wIcBaJibpKo9nnSQL0MTRdnWttGyE5haGwK86xgMOkFLp7vEyfQPGLOJh5wNYiJ3V9PmUMDhV9u8kkQ==",
"extraneous": true,
"license": "MIT",
"dependencies": {
@@ -661,19 +661,19 @@
}
},
"node_modules/@angular/cli": {
"version": "21.2.0-rc.2",
"resolved": "https://registry.npmjs.org/@angular/cli/-/cli-21.2.0-rc.2.tgz",
"integrity": "sha512-rFuYlatMsYRqEi8FlvWqmTMU7x1iPFJpZUtAIYKo35C9kl0/Z5jhqqAv2Ws3LCX0lmVCzQ3TWRiFQp7T+2DWkw==",
"version": "21.2.0",
"resolved": "https://registry.npmjs.org/@angular/cli/-/cli-21.2.0.tgz",
"integrity": "sha512-yaGEpckqgOemcHkoWeH92i9eNrcbr9iE/dnxL+Du6s9spTAXJ2jjtYfszhmowuQZkCK5rjecMb8ctNtHlaGCjg==",
"dev": true,
"license": "MIT",
"dependencies": {
"@angular-devkit/architect": "0.2102.0-rc.2",
"@angular-devkit/core": "21.2.0-rc.2",
"@angular-devkit/schematics": "21.2.0-rc.2",
"@angular-devkit/architect": "0.2102.0",
"@angular-devkit/core": "21.2.0",
"@angular-devkit/schematics": "21.2.0",
"@inquirer/prompts": "7.10.1",
"@listr2/prompt-adapter-inquirer": "3.0.5",
"@modelcontextprotocol/sdk": "1.26.0",
"@schematics/angular": "21.2.0-rc.2",
"@schematics/angular": "21.2.0",
"@yarnpkg/lockfile": "1.1.0",
"algoliasearch": "5.48.1",
"ini": "6.0.0",
@@ -1043,9 +1043,9 @@
}
},
"node_modules/@angular/cli/node_modules/@types/node": {
"version": "25.3.0",
"resolved": "https://registry.npmjs.org/@types/node/-/node-25.3.0.tgz",
"integrity": "sha512-4K3bqJpXpqfg2XKGK9bpDTc6xO/xoUP/RBWS7AtRMug6zZFaRekiLzjVtAoZMquxoAbzBvy5nxQ7veS5eYzf8A==",
"version": "25.3.3",
"resolved": "https://registry.npmjs.org/@types/node/-/node-25.3.3.tgz",
"integrity": "sha512-DpzbrH7wIcBaJibpKo9nnSQL0MTRdnWttGyE5haGwK86xgMOkFLp7vEyfQPGLOJh5wNYiJ3V9PmUMDhV9u8kkQ==",
"extraneous": true,
"license": "MIT",
"dependencies": {
@@ -1132,9 +1132,9 @@
}
},
"node_modules/@angular/common": {
"version": "21.2.0-rc.0",
"resolved": "https://registry.npmjs.org/@angular/common/-/common-21.2.0-rc.0.tgz",
"integrity": "sha512-2O3cbBIM8ls97XwkYVdgJwEg3UOy/bVZ0uBoY14cLskhETj6wbrFENiy8KpikZ+xsTxE9gWohairxCRiEoFuKg==",
"version": "21.2.0",
"resolved": "https://registry.npmjs.org/@angular/common/-/common-21.2.0.tgz",
"integrity": "sha512-6zJMPi0i/XDniEgv3/t2BjuDHiOG44lgIR5PYyxqGpgJ0kqB5hku/0TuentNEi1VnBYgthnfhjek7c+lakXmhw==",
"license": "MIT",
"dependencies": {
"tslib": "^2.3.0"
@@ -1143,14 +1143,14 @@
"node": "^20.19.0 || ^22.12.0 || >=24.0.0"
},
"peerDependencies": {
"@angular/core": "21.2.0-rc.0",
"@angular/core": "21.2.0",
"rxjs": "^6.5.3 || ^7.4.0"
}
},
"node_modules/@angular/compiler": {
"version": "21.2.0-rc.0",
"resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-21.2.0-rc.0.tgz",
"integrity": "sha512-gl2dQgMFKkH/iM/YxqWO0oIbYRpBZpOZuxj9W5TjG50EpMDioD1CNu2DfXpODVo3/rOfZJvOa+Jw0Cxpj5ClMQ==",
"version": "21.2.0",
"resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-21.2.0.tgz",
"integrity": "sha512-0RPkma8UVNpse/VJcXT9w6SKzTMz4J/uMGj0l9enM1frg9xrx1fwi/lLmaVV9Nr9LfqPjQdxNFFlvaBB7g/2zg==",
"license": "MIT",
"dependencies": {
"tslib": "^2.3.0"
@@ -1160,9 +1160,9 @@
}
},
"node_modules/@angular/compiler-cli": {
"version": "21.2.0-rc.0",
"resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-21.2.0-rc.0.tgz",
"integrity": "sha512-lHPA5BzQq9ttHXCAnAC/zW5vW0lFiawBIvRpNRbsI8Vw1noMs614OqZ2R6UBReVPE4kpyGwh7HCQIZyX5Cth6g==",
"version": "21.2.0",
"resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-21.2.0.tgz",
"integrity": "sha512-gZd58p0/JjgdxMX3v+LjCB6e3dBIfNVr/YzXoh55TfffdBCUQY94hl1+DFQkJ72K5EX+1zbaz03dIm30kw1bGw==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -1183,7 +1183,7 @@
"node": "^20.19.0 || ^22.12.0 || >=24.0.0"
},
"peerDependencies": {
"@angular/compiler": "21.2.0-rc.0",
"@angular/compiler": "21.2.0",
"typescript": ">=5.9 <6.1"
},
"peerDependenciesMeta": {
@@ -1193,9 +1193,9 @@
}
},
"node_modules/@angular/core": {
"version": "21.2.0-rc.0",
"resolved": "https://registry.npmjs.org/@angular/core/-/core-21.2.0-rc.0.tgz",
"integrity": "sha512-Txdi6ocSNC8GbCYMGh2AUm1lx+J11LNRjNrfGcgxQhQAiEPVO8jGojfObM+rdjv1h8t0pCms5vzEmFiJ9z06hg==",
"version": "21.2.0",
"resolved": "https://registry.npmjs.org/@angular/core/-/core-21.2.0.tgz",
"integrity": "sha512-VnTbmZq3g3Q+s3nCZ8VUDMLjMezOg/bqUxAJ/DrRWCrEcTP5JO3mrNPs3FHj+qlB0T+BQP7uQv6QTzPVKybwoA==",
"license": "MIT",
"dependencies": {
"tslib": "^2.3.0"
@@ -1204,7 +1204,7 @@
"node": "^20.19.0 || ^22.12.0 || >=24.0.0"
},
"peerDependencies": {
"@angular/compiler": "21.2.0-rc.0",
"@angular/compiler": "21.2.0",
"rxjs": "^6.5.3 || ^7.4.0",
"zone.js": "~0.15.0 || ~0.16.0"
},
@@ -1218,9 +1218,9 @@
}
},
"node_modules/@angular/forms": {
"version": "21.2.0-rc.0",
"resolved": "https://registry.npmjs.org/@angular/forms/-/forms-21.2.0-rc.0.tgz",
"integrity": "sha512-GsX4c+GYUxcKla8yO/hpEzpliCsMslP+yIIk9l6831PkSf3uCyKHUHriJtOEca4uN5fNo23ix5NXo5VPkmldLQ==",
"version": "21.2.0",
"resolved": "https://registry.npmjs.org/@angular/forms/-/forms-21.2.0.tgz",
"integrity": "sha512-NduUtPWLauH/FLayEDkLyaKAGqKzXbcfO7468LOWCXN3crhNVQyIWRQPOUcdpoJwDAGLpN85m3DhJhXNnA9c5w==",
"license": "MIT",
"dependencies": {
"@standard-schema/spec": "^1.0.0",
@@ -1230,16 +1230,16 @@
"node": "^20.19.0 || ^22.12.0 || >=24.0.0"
},
"peerDependencies": {
"@angular/common": "21.2.0-rc.0",
"@angular/core": "21.2.0-rc.0",
"@angular/platform-browser": "21.2.0-rc.0",
"@angular/common": "21.2.0",
"@angular/core": "21.2.0",
"@angular/platform-browser": "21.2.0",
"rxjs": "^6.5.3 || ^7.4.0"
}
},
"node_modules/@angular/platform-browser": {
"version": "21.2.0-rc.0",
"resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-21.2.0-rc.0.tgz",
"integrity": "sha512-FCNRhzkf35l6B18gzaT6GDdTJ3v4AiLOSXc5RdiQ2PMn2dLOkm70SH0caXQGzvtXAzHrHlR+Evj/ZqaFYvjcYg==",
"version": "21.2.0",
"resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-21.2.0.tgz",
"integrity": "sha512-IUGukpvvT2B5Dl76qzk6rY7UIHUT9u4BhT2AwVz+5JqcX9KwQtYD17Gt7wj6bvIgCXKWG+CfN8Zd9DECOCYWjg==",
"license": "MIT",
"dependencies": {
"tslib": "^2.3.0"
@@ -1248,9 +1248,9 @@
"node": "^20.19.0 || ^22.12.0 || >=24.0.0"
},
"peerDependencies": {
"@angular/animations": "21.2.0-rc.0",
"@angular/common": "21.2.0-rc.0",
"@angular/core": "21.2.0-rc.0"
"@angular/animations": "21.2.0",
"@angular/common": "21.2.0",
"@angular/core": "21.2.0"
},
"peerDependenciesMeta": {
"@angular/animations": {
@@ -1259,9 +1259,9 @@
}
},
"node_modules/@angular/router": {
"version": "21.2.0-rc.0",
"resolved": "https://registry.npmjs.org/@angular/router/-/router-21.2.0-rc.0.tgz",
"integrity": "sha512-KZmZCdm4H+w3UC1vorQ/Nj4FEHY4sgRkwp+zf4E4WFV+sflyFzqFxzVIKGJ1xTzjaDebCRmipJnc3DZ09fv1fg==",
"version": "21.2.0",
"resolved": "https://registry.npmjs.org/@angular/router/-/router-21.2.0.tgz",
"integrity": "sha512-siliJ+jJRUCRZ0cdkqc7zww9Didz56Z0Z2YPIuR2n5TZLiuJY+jAf6xotXKp/v6v8XoGJwLiRNipGgNDRIAlWA==",
"license": "MIT",
"dependencies": {
"tslib": "^2.3.0"
@@ -1270,9 +1270,9 @@
"node": "^20.19.0 || ^22.12.0 || >=24.0.0"
},
"peerDependencies": {
"@angular/common": "21.2.0-rc.0",
"@angular/core": "21.2.0-rc.0",
"@angular/platform-browser": "21.2.0-rc.0",
"@angular/common": "21.2.0",
"@angular/core": "21.2.0",
"@angular/platform-browser": "21.2.0",
"rxjs": "^6.5.3 || ^7.4.0"
}
},
@@ -2927,9 +2927,9 @@
}
},
"node_modules/@npmcli/run-script": {
"version": "10.0.3",
"resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-10.0.3.tgz",
"integrity": "sha512-ER2N6itRkzWbbtVmZ9WKaWxVlKlOeBFF1/7xx+KA5J1xKa4JjUwBdb6tDpk0v1qA+d+VDwHI9qmLcXSWcmi+Rw==",
"version": "10.0.4",
"resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-10.0.4.tgz",
"integrity": "sha512-mGUWr1uMnf0le2TwfOZY4SFxZGXGfm4Jtay/nwAa2FLNAKXUoUwaGwBMNH36UHPtinWfTSJ3nqFQr0091CxVGg==",
"dev": true,
"license": "ISC",
"dependencies": {
@@ -2937,34 +2937,7 @@
"@npmcli/package-json": "^7.0.0",
"@npmcli/promise-spawn": "^9.0.0",
"node-gyp": "^12.1.0",
"proc-log": "^6.0.0",
"which": "^6.0.0"
},
"engines": {
"node": "^20.17.0 || >=22.9.0"
}
},
"node_modules/@npmcli/run-script/node_modules/isexe": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/isexe/-/isexe-4.0.0.tgz",
"integrity": "sha512-FFUtZMpoZ8RqHS3XeXEmHWLA4thH+ZxCv2lOiPIn1Xc7CxrqhWzNSDzD+/chS/zbYezmiwWLdQC09JdQKmthOw==",
"dev": true,
"license": "BlueOak-1.0.0",
"engines": {
"node": ">=20"
}
},
"node_modules/@npmcli/run-script/node_modules/which": {
"version": "6.0.1",
"resolved": "https://registry.npmjs.org/which/-/which-6.0.1.tgz",
"integrity": "sha512-oGLe46MIrCRqX7ytPUf66EAYvdeMIZYn3WaocqqKZAxrBpkqHfL/qvTyJ/bTk5+AqHCjXmrv3CEWgy368zhRUg==",
"dev": true,
"license": "ISC",
"dependencies": {
"isexe": "^4.0.0"
},
"bin": {
"node-which": "bin/which.js"
"proc-log": "^6.0.0"
},
"engines": {
"node": "^20.17.0 || >=22.9.0"
@@ -3877,14 +3850,14 @@
]
},
"node_modules/@schematics/angular": {
"version": "21.2.0-rc.2",
"resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-21.2.0-rc.2.tgz",
"integrity": "sha512-QzyPSwdkpcEN5iQ28sfb7tak8MukvGC6nzl1kgziWNYPyNaf+DIXEfspOnCME0ZwjI3pBpJnBvj+uMn8fx3YSw==",
"version": "21.2.0",
"resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-21.2.0.tgz",
"integrity": "sha512-GQUIeGzZwCT9/W5MAkKnkwETROPbA1eRmy3JF56jLmvr95tJnypGOG8jGYy0d+tcEVujIouh48r4J3bJQg5mrw==",
"dev": true,
"license": "MIT",
"dependencies": {
"@angular-devkit/core": "21.2.0-rc.2",
"@angular-devkit/schematics": "21.2.0-rc.2",
"@angular-devkit/core": "21.2.0",
"@angular-devkit/schematics": "21.2.0",
"jsonc-parser": "3.3.1"
},
"engines": {
@@ -4249,9 +4222,9 @@
"license": "ISC"
},
"node_modules/brace-expansion": {
"version": "5.0.3",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.3.tgz",
"integrity": "sha512-fy6KJm2RawA5RcHkLa1z/ScpBeA762UF9KmZQxwIbDtRJrgLzM10depAiEQ+CXYcoiqW1/m96OAAoke2nE9EeA==",
"version": "5.0.4",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.4.tgz",
"integrity": "sha512-h+DEnpVvxmfVefa4jFbCf5HdH5YMDXRsmKflpf1pILZWRFlTbJpxeU55nJl4Smt5HQaGzg1o6RHFPJaOqnmBDg==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -4377,9 +4350,9 @@
}
},
"node_modules/caniuse-lite": {
"version": "1.0.30001774",
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001774.tgz",
"integrity": "sha512-DDdwPGz99nmIEv216hKSgLD+D4ikHQHjBC/seF98N9CPqRX4M5mSxT9eTV6oyisnJcuzxtZy4n17yKKQYmYQOA==",
"version": "1.0.30001775",
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001775.tgz",
"integrity": "sha512-s3Qv7Lht9zbVKE9XoTyRG6wVDCKdtOFIjBGg3+Yhn6JaytuNKPIjBMTMIY1AnOH3seL5mvF+x33oGAyK3hVt3A==",
"dev": true,
"funding": [
{
@@ -4473,14 +4446,14 @@
}
},
"node_modules/cli-truncate": {
"version": "5.1.1",
"resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-5.1.1.tgz",
"integrity": "sha512-SroPvNHxUnk+vIW/dOSfNqdy1sPEFkrTk6TUtqLCnBlo3N7TNYYkzzN7uSD6+jVjrdO4+p8nH7JzH6cIvUem6A==",
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-5.2.0.tgz",
"integrity": "sha512-xRwvIOMGrfOAnM1JYtqQImuaNtDEv9v6oIYAs4LIHwTiKee8uwvIi363igssOC0O5U04i4AlENs79LQLu9tEMw==",
"dev": true,
"license": "MIT",
"dependencies": {
"slice-ansi": "^7.1.0",
"string-width": "^8.0.0"
"slice-ansi": "^8.0.0",
"string-width": "^8.2.0"
},
"engines": {
"node": ">=20"
@@ -5335,9 +5308,9 @@
}
},
"node_modules/hono": {
"version": "4.12.2",
"resolved": "https://registry.npmjs.org/hono/-/hono-4.12.2.tgz",
"integrity": "sha512-gJnaDHXKDayjt8ue0n8Gs0A007yKXj4Xzb8+cNjZeYsSzzwKc0Lr+OZgYwVfB0pHfUs17EPoLvrOsEaJ9mj+Tg==",
"version": "4.12.3",
"resolved": "https://registry.npmjs.org/hono/-/hono-4.12.3.tgz",
"integrity": "sha512-SFsVSjp8sj5UumXOOFlkZOG6XS9SJDKw0TbwFeV+AJ8xlST8kxK5Z/5EYa111UY8732lK2S/xB653ceuaoGwpg==",
"dev": true,
"license": "MIT",
"engines": {
@@ -5816,6 +5789,23 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/log-update/node_modules/slice-ansi": {
"version": "7.1.2",
"resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-7.1.2.tgz",
"integrity": "sha512-iOBWFgUX7caIZiuutICxVgX1SdxwAVFFKwt1EvMYYec/NWO5meOJ6K5uQxhrYBdQJne4KxiqZc+KptFOWFSI9w==",
"dev": true,
"license": "MIT",
"dependencies": {
"ansi-styles": "^6.2.1",
"is-fullwidth-code-point": "^5.0.0"
},
"engines": {
"node": ">=18"
},
"funding": {
"url": "https://github.com/chalk/slice-ansi?sponsor=1"
}
},
"node_modules/lru-cache": {
"version": "5.1.1",
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz",
@@ -5933,9 +5923,9 @@
}
},
"node_modules/minimatch": {
"version": "10.2.3",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.3.tgz",
"integrity": "sha512-Rwi3pnapEqirPSbWbrZaa6N3nmqq4Xer/2XooiOKyV3q12ML06f7MOuc5DVH8ONZIFhwIYQ3yzPH4nt7iWHaTg==",
"version": "10.2.4",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.4.tgz",
"integrity": "sha512-oRjTw/97aTBN0RHbYCdtF1MQfvusSIBQM0IZEgzl6426+8jSC0nF1a/GmnVLpfB9yyr6g6FTqWqiZVbxrtaCIg==",
"dev": true,
"license": "BlueOak-1.0.0",
"dependencies": {
@@ -6691,9 +6681,9 @@
}
},
"node_modules/postcss": {
"version": "8.5.6",
"resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz",
"integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==",
"version": "8.5.8",
"resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.8.tgz",
"integrity": "sha512-OW/rX8O/jXnm82Ey1k44pObPtdblfiuWnrd8X7GJ7emImCOstunGbXUpp7HdBrFQX6rJzn3sPT397Wp5aCwCHg==",
"dev": true,
"funding": [
{
@@ -7267,17 +7257,17 @@
}
},
"node_modules/slice-ansi": {
"version": "7.1.2",
"resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-7.1.2.tgz",
"integrity": "sha512-iOBWFgUX7caIZiuutICxVgX1SdxwAVFFKwt1EvMYYec/NWO5meOJ6K5uQxhrYBdQJne4KxiqZc+KptFOWFSI9w==",
"version": "8.0.0",
"resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-8.0.0.tgz",
"integrity": "sha512-stxByr12oeeOyY2BlviTNQlYV5xOj47GirPr4yA1hE9JCtxfQN0+tVbkxwCtYDQWhEKWFHsEK48ORg5jrouCAg==",
"dev": true,
"license": "MIT",
"dependencies": {
"ansi-styles": "^6.2.1",
"is-fullwidth-code-point": "^5.0.0"
"ansi-styles": "^6.2.3",
"is-fullwidth-code-point": "^5.1.0"
},
"engines": {
"node": ">=18"
"node": ">=20"
},
"funding": {
"url": "https://github.com/chalk/slice-ansi?sponsor=1"
@@ -7444,13 +7434,13 @@
}
},
"node_modules/strip-ansi": {
"version": "7.1.2",
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz",
"integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==",
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.2.0.tgz",
"integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==",
"dev": true,
"license": "MIT",
"dependencies": {
"ansi-regex": "^6.0.1"
"ansi-regex": "^6.2.2"
},
"engines": {
"node": ">=12"
+114 -124
View File
@@ -248,13 +248,13 @@
}
},
"node_modules/@angular-devkit/architect": {
"version": "0.2102.0-rc.2",
"resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.2102.0-rc.2.tgz",
"integrity": "sha512-IP2wGHDxBLgtWoxXFCFmKF5HsKMAXgGi2hj2SmcoR9q8HDKVPmyBUBT10sdCdSyiM8J3+3yHYDW4rOO22ya5Pw==",
"version": "0.2102.0",
"resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.2102.0.tgz",
"integrity": "sha512-kYFwTNzToG2SJMxj2f41w3QRtdqlrFuF+bpZrtIaHOP078Ktld8EPIp9KqB0Y46Vvs69ifby5Q1/wPD9wA3iaw==",
"dev": true,
"license": "MIT",
"dependencies": {
"@angular-devkit/core": "21.2.0-rc.2",
"@angular-devkit/core": "21.2.0",
"rxjs": "7.8.2"
},
"bin": {
@@ -267,9 +267,9 @@
}
},
"node_modules/@angular-devkit/core": {
"version": "21.2.0-rc.2",
"resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-21.2.0-rc.2.tgz",
"integrity": "sha512-4Y8qoXFY9gdF/WahgfPRWORJqmgdAPKkDGjmyMBqwNdL96vqyKq0/5TD8K5PsUXV+HWg6GClWTWhRyWVxJtoLQ==",
"version": "21.2.0",
"resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-21.2.0.tgz",
"integrity": "sha512-HZdTn46Ca6qbb9Zef8R/+TWsk6mNKRm4rJyL3PxHP6HnVCwSPNZ0LNN9BjVREBs+UlRdXqBGFBZh5D1nBgu5GQ==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -295,13 +295,13 @@
}
},
"node_modules/@angular-devkit/schematics": {
"version": "21.2.0-rc.2",
"resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-21.2.0-rc.2.tgz",
"integrity": "sha512-+vkSdeSRIAIMW5pQW8YCD0rrPCM6EpFFuHGSoJZtjXRGnNuJKYApNqLreO1daZvVTG6YokB5KkE+mnvp9rBEeg==",
"version": "21.2.0",
"resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-21.2.0.tgz",
"integrity": "sha512-3kn3FI5v7BQ7Zct6raek+WgvyDwOJ8wElbyC903GxMQCDBRGGcevhHvTAIHhknihEsrgplzPhTlWeMbk1JfdFg==",
"dev": true,
"license": "MIT",
"dependencies": {
"@angular-devkit/core": "21.2.0-rc.2",
"@angular-devkit/core": "21.2.0",
"jsonc-parser": "3.3.1",
"magic-string": "0.30.21",
"ora": "9.3.0",
@@ -314,14 +314,14 @@
}
},
"node_modules/@angular/build": {
"version": "21.2.0-rc.2",
"resolved": "https://registry.npmjs.org/@angular/build/-/build-21.2.0-rc.2.tgz",
"integrity": "sha512-1Hhr0w0uUBuMPEFjv9yXEHKahNHbw/NWt9uo1cf43ipFrrBKYHJj2DwwgyKKoEmtK/ap/l9yEZpL2oCfqCwEFQ==",
"version": "21.2.0",
"resolved": "https://registry.npmjs.org/@angular/build/-/build-21.2.0.tgz",
"integrity": "sha512-K0EqiHz2y7TSyD4adWD0+C/P9khKlrsSWavXWxGRvoSJC/H3I3SK5Z6BWwftBibXR1Fis7njwvl5IGAlQrDchA==",
"dev": true,
"license": "MIT",
"dependencies": {
"@ampproject/remapping": "2.3.0",
"@angular-devkit/architect": "0.2102.0-rc.2",
"@angular-devkit/architect": "0.2102.0",
"@babel/core": "7.29.0",
"@babel/helper-annotate-as-pure": "7.27.3",
"@babel/helper-split-export-declaration": "7.24.7",
@@ -357,17 +357,17 @@
"lmdb": "3.5.1"
},
"peerDependencies": {
"@angular/compiler": "^21.0.0 || ^21.2.0-next.0",
"@angular/compiler-cli": "^21.0.0 || ^21.2.0-next.0",
"@angular/core": "^21.0.0 || ^21.2.0-next.0",
"@angular/localize": "^21.0.0 || ^21.2.0-next.0",
"@angular/platform-browser": "^21.0.0 || ^21.2.0-next.0",
"@angular/platform-server": "^21.0.0 || ^21.2.0-next.0",
"@angular/service-worker": "^21.0.0 || ^21.2.0-next.0",
"@angular/ssr": "^21.2.0-rc.2",
"@angular/compiler": "^21.0.0",
"@angular/compiler-cli": "^21.0.0",
"@angular/core": "^21.0.0",
"@angular/localize": "^21.0.0",
"@angular/platform-browser": "^21.0.0",
"@angular/platform-server": "^21.0.0",
"@angular/service-worker": "^21.0.0",
"@angular/ssr": "^21.2.0",
"karma": "^6.4.0",
"less": "^4.2.0",
"ng-packagr": "^21.0.0 || ^21.2.0-next.0",
"ng-packagr": "^21.0.0",
"postcss": "^8.4.0",
"tailwindcss": "^2.0.0 || ^3.0.0 || ^4.0.0",
"tslib": "^2.3.0",
@@ -414,19 +414,19 @@
}
},
"node_modules/@angular/cli": {
"version": "21.2.0-rc.2",
"resolved": "https://registry.npmjs.org/@angular/cli/-/cli-21.2.0-rc.2.tgz",
"integrity": "sha512-rFuYlatMsYRqEi8FlvWqmTMU7x1iPFJpZUtAIYKo35C9kl0/Z5jhqqAv2Ws3LCX0lmVCzQ3TWRiFQp7T+2DWkw==",
"version": "21.2.0",
"resolved": "https://registry.npmjs.org/@angular/cli/-/cli-21.2.0.tgz",
"integrity": "sha512-yaGEpckqgOemcHkoWeH92i9eNrcbr9iE/dnxL+Du6s9spTAXJ2jjtYfszhmowuQZkCK5rjecMb8ctNtHlaGCjg==",
"dev": true,
"license": "MIT",
"dependencies": {
"@angular-devkit/architect": "0.2102.0-rc.2",
"@angular-devkit/core": "21.2.0-rc.2",
"@angular-devkit/schematics": "21.2.0-rc.2",
"@angular-devkit/architect": "0.2102.0",
"@angular-devkit/core": "21.2.0",
"@angular-devkit/schematics": "21.2.0",
"@inquirer/prompts": "7.10.1",
"@listr2/prompt-adapter-inquirer": "3.0.5",
"@modelcontextprotocol/sdk": "1.26.0",
"@schematics/angular": "21.2.0-rc.2",
"@schematics/angular": "21.2.0",
"@yarnpkg/lockfile": "1.1.0",
"algoliasearch": "5.48.1",
"ini": "6.0.0",
@@ -449,9 +449,9 @@
}
},
"node_modules/@angular/common": {
"version": "21.2.0-rc.0",
"resolved": "https://registry.npmjs.org/@angular/common/-/common-21.2.0-rc.0.tgz",
"integrity": "sha512-2O3cbBIM8ls97XwkYVdgJwEg3UOy/bVZ0uBoY14cLskhETj6wbrFENiy8KpikZ+xsTxE9gWohairxCRiEoFuKg==",
"version": "21.2.0",
"resolved": "https://registry.npmjs.org/@angular/common/-/common-21.2.0.tgz",
"integrity": "sha512-6zJMPi0i/XDniEgv3/t2BjuDHiOG44lgIR5PYyxqGpgJ0kqB5hku/0TuentNEi1VnBYgthnfhjek7c+lakXmhw==",
"license": "MIT",
"dependencies": {
"tslib": "^2.3.0"
@@ -460,14 +460,14 @@
"node": "^20.19.0 || ^22.12.0 || >=24.0.0"
},
"peerDependencies": {
"@angular/core": "21.2.0-rc.0",
"@angular/core": "21.2.0",
"rxjs": "^6.5.3 || ^7.4.0"
}
},
"node_modules/@angular/compiler": {
"version": "21.2.0-rc.0",
"resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-21.2.0-rc.0.tgz",
"integrity": "sha512-gl2dQgMFKkH/iM/YxqWO0oIbYRpBZpOZuxj9W5TjG50EpMDioD1CNu2DfXpODVo3/rOfZJvOa+Jw0Cxpj5ClMQ==",
"version": "21.2.0",
"resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-21.2.0.tgz",
"integrity": "sha512-0RPkma8UVNpse/VJcXT9w6SKzTMz4J/uMGj0l9enM1frg9xrx1fwi/lLmaVV9Nr9LfqPjQdxNFFlvaBB7g/2zg==",
"license": "MIT",
"dependencies": {
"tslib": "^2.3.0"
@@ -477,9 +477,9 @@
}
},
"node_modules/@angular/compiler-cli": {
"version": "21.2.0-rc.0",
"resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-21.2.0-rc.0.tgz",
"integrity": "sha512-lHPA5BzQq9ttHXCAnAC/zW5vW0lFiawBIvRpNRbsI8Vw1noMs614OqZ2R6UBReVPE4kpyGwh7HCQIZyX5Cth6g==",
"version": "21.2.0",
"resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-21.2.0.tgz",
"integrity": "sha512-gZd58p0/JjgdxMX3v+LjCB6e3dBIfNVr/YzXoh55TfffdBCUQY94hl1+DFQkJ72K5EX+1zbaz03dIm30kw1bGw==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -500,7 +500,7 @@
"node": "^20.19.0 || ^22.12.0 || >=24.0.0"
},
"peerDependencies": {
"@angular/compiler": "21.2.0-rc.0",
"@angular/compiler": "21.2.0",
"typescript": ">=5.9 <6.1"
},
"peerDependenciesMeta": {
@@ -510,9 +510,9 @@
}
},
"node_modules/@angular/core": {
"version": "21.2.0-rc.0",
"resolved": "https://registry.npmjs.org/@angular/core/-/core-21.2.0-rc.0.tgz",
"integrity": "sha512-Txdi6ocSNC8GbCYMGh2AUm1lx+J11LNRjNrfGcgxQhQAiEPVO8jGojfObM+rdjv1h8t0pCms5vzEmFiJ9z06hg==",
"version": "21.2.0",
"resolved": "https://registry.npmjs.org/@angular/core/-/core-21.2.0.tgz",
"integrity": "sha512-VnTbmZq3g3Q+s3nCZ8VUDMLjMezOg/bqUxAJ/DrRWCrEcTP5JO3mrNPs3FHj+qlB0T+BQP7uQv6QTzPVKybwoA==",
"license": "MIT",
"dependencies": {
"tslib": "^2.3.0"
@@ -521,7 +521,7 @@
"node": "^20.19.0 || ^22.12.0 || >=24.0.0"
},
"peerDependencies": {
"@angular/compiler": "21.2.0-rc.0",
"@angular/compiler": "21.2.0",
"rxjs": "^6.5.3 || ^7.4.0",
"zone.js": "~0.15.0 || ~0.16.0"
},
@@ -535,9 +535,9 @@
}
},
"node_modules/@angular/forms": {
"version": "21.2.0-rc.0",
"resolved": "https://registry.npmjs.org/@angular/forms/-/forms-21.2.0-rc.0.tgz",
"integrity": "sha512-GsX4c+GYUxcKla8yO/hpEzpliCsMslP+yIIk9l6831PkSf3uCyKHUHriJtOEca4uN5fNo23ix5NXo5VPkmldLQ==",
"version": "21.2.0",
"resolved": "https://registry.npmjs.org/@angular/forms/-/forms-21.2.0.tgz",
"integrity": "sha512-NduUtPWLauH/FLayEDkLyaKAGqKzXbcfO7468LOWCXN3crhNVQyIWRQPOUcdpoJwDAGLpN85m3DhJhXNnA9c5w==",
"license": "MIT",
"dependencies": {
"@standard-schema/spec": "^1.0.0",
@@ -547,16 +547,16 @@
"node": "^20.19.0 || ^22.12.0 || >=24.0.0"
},
"peerDependencies": {
"@angular/common": "21.2.0-rc.0",
"@angular/core": "21.2.0-rc.0",
"@angular/platform-browser": "21.2.0-rc.0",
"@angular/common": "21.2.0",
"@angular/core": "21.2.0",
"@angular/platform-browser": "21.2.0",
"rxjs": "^6.5.3 || ^7.4.0"
}
},
"node_modules/@angular/platform-browser": {
"version": "21.2.0-rc.0",
"resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-21.2.0-rc.0.tgz",
"integrity": "sha512-FCNRhzkf35l6B18gzaT6GDdTJ3v4AiLOSXc5RdiQ2PMn2dLOkm70SH0caXQGzvtXAzHrHlR+Evj/ZqaFYvjcYg==",
"version": "21.2.0",
"resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-21.2.0.tgz",
"integrity": "sha512-IUGukpvvT2B5Dl76qzk6rY7UIHUT9u4BhT2AwVz+5JqcX9KwQtYD17Gt7wj6bvIgCXKWG+CfN8Zd9DECOCYWjg==",
"license": "MIT",
"dependencies": {
"tslib": "^2.3.0"
@@ -565,9 +565,9 @@
"node": "^20.19.0 || ^22.12.0 || >=24.0.0"
},
"peerDependencies": {
"@angular/animations": "21.2.0-rc.0",
"@angular/common": "21.2.0-rc.0",
"@angular/core": "21.2.0-rc.0"
"@angular/animations": "21.2.0",
"@angular/common": "21.2.0",
"@angular/core": "21.2.0"
},
"peerDependenciesMeta": {
"@angular/animations": {
@@ -2573,9 +2573,9 @@
}
},
"node_modules/@npmcli/run-script": {
"version": "10.0.3",
"resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-10.0.3.tgz",
"integrity": "sha512-ER2N6itRkzWbbtVmZ9WKaWxVlKlOeBFF1/7xx+KA5J1xKa4JjUwBdb6tDpk0v1qA+d+VDwHI9qmLcXSWcmi+Rw==",
"version": "10.0.4",
"resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-10.0.4.tgz",
"integrity": "sha512-mGUWr1uMnf0le2TwfOZY4SFxZGXGfm4Jtay/nwAa2FLNAKXUoUwaGwBMNH36UHPtinWfTSJ3nqFQr0091CxVGg==",
"dev": true,
"license": "ISC",
"dependencies": {
@@ -2583,34 +2583,7 @@
"@npmcli/package-json": "^7.0.0",
"@npmcli/promise-spawn": "^9.0.0",
"node-gyp": "^12.1.0",
"proc-log": "^6.0.0",
"which": "^6.0.0"
},
"engines": {
"node": "^20.17.0 || >=22.9.0"
}
},
"node_modules/@npmcli/run-script/node_modules/isexe": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/isexe/-/isexe-4.0.0.tgz",
"integrity": "sha512-FFUtZMpoZ8RqHS3XeXEmHWLA4thH+ZxCv2lOiPIn1Xc7CxrqhWzNSDzD+/chS/zbYezmiwWLdQC09JdQKmthOw==",
"dev": true,
"license": "BlueOak-1.0.0",
"engines": {
"node": ">=20"
}
},
"node_modules/@npmcli/run-script/node_modules/which": {
"version": "6.0.1",
"resolved": "https://registry.npmjs.org/which/-/which-6.0.1.tgz",
"integrity": "sha512-oGLe46MIrCRqX7ytPUf66EAYvdeMIZYn3WaocqqKZAxrBpkqHfL/qvTyJ/bTk5+AqHCjXmrv3CEWgy368zhRUg==",
"dev": true,
"license": "ISC",
"dependencies": {
"isexe": "^4.0.0"
},
"bin": {
"node-which": "bin/which.js"
"proc-log": "^6.0.0"
},
"engines": {
"node": "^20.17.0 || >=22.9.0"
@@ -3523,14 +3496,14 @@
]
},
"node_modules/@schematics/angular": {
"version": "21.2.0-rc.2",
"resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-21.2.0-rc.2.tgz",
"integrity": "sha512-QzyPSwdkpcEN5iQ28sfb7tak8MukvGC6nzl1kgziWNYPyNaf+DIXEfspOnCME0ZwjI3pBpJnBvj+uMn8fx3YSw==",
"version": "21.2.0",
"resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-21.2.0.tgz",
"integrity": "sha512-GQUIeGzZwCT9/W5MAkKnkwETROPbA1eRmy3JF56jLmvr95tJnypGOG8jGYy0d+tcEVujIouh48r4J3bJQg5mrw==",
"dev": true,
"license": "MIT",
"dependencies": {
"@angular-devkit/core": "21.2.0-rc.2",
"@angular-devkit/schematics": "21.2.0-rc.2",
"@angular-devkit/core": "21.2.0",
"@angular-devkit/schematics": "21.2.0",
"jsonc-parser": "3.3.1"
},
"engines": {
@@ -3901,9 +3874,9 @@
"license": "ISC"
},
"node_modules/brace-expansion": {
"version": "5.0.3",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.3.tgz",
"integrity": "sha512-fy6KJm2RawA5RcHkLa1z/ScpBeA762UF9KmZQxwIbDtRJrgLzM10depAiEQ+CXYcoiqW1/m96OAAoke2nE9EeA==",
"version": "5.0.4",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.4.tgz",
"integrity": "sha512-h+DEnpVvxmfVefa4jFbCf5HdH5YMDXRsmKflpf1pILZWRFlTbJpxeU55nJl4Smt5HQaGzg1o6RHFPJaOqnmBDg==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -4029,9 +4002,9 @@
}
},
"node_modules/caniuse-lite": {
"version": "1.0.30001774",
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001774.tgz",
"integrity": "sha512-DDdwPGz99nmIEv216hKSgLD+D4ikHQHjBC/seF98N9CPqRX4M5mSxT9eTV6oyisnJcuzxtZy4n17yKKQYmYQOA==",
"version": "1.0.30001775",
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001775.tgz",
"integrity": "sha512-s3Qv7Lht9zbVKE9XoTyRG6wVDCKdtOFIjBGg3+Yhn6JaytuNKPIjBMTMIY1AnOH3seL5mvF+x33oGAyK3hVt3A==",
"dev": true,
"funding": [
{
@@ -4125,14 +4098,14 @@
}
},
"node_modules/cli-truncate": {
"version": "5.1.1",
"resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-5.1.1.tgz",
"integrity": "sha512-SroPvNHxUnk+vIW/dOSfNqdy1sPEFkrTk6TUtqLCnBlo3N7TNYYkzzN7uSD6+jVjrdO4+p8nH7JzH6cIvUem6A==",
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-5.2.0.tgz",
"integrity": "sha512-xRwvIOMGrfOAnM1JYtqQImuaNtDEv9v6oIYAs4LIHwTiKee8uwvIi363igssOC0O5U04i4AlENs79LQLu9tEMw==",
"dev": true,
"license": "MIT",
"dependencies": {
"slice-ansi": "^7.1.0",
"string-width": "^8.0.0"
"slice-ansi": "^8.0.0",
"string-width": "^8.2.0"
},
"engines": {
"node": ">=20"
@@ -4998,9 +4971,9 @@
}
},
"node_modules/hono": {
"version": "4.12.2",
"resolved": "https://registry.npmjs.org/hono/-/hono-4.12.2.tgz",
"integrity": "sha512-gJnaDHXKDayjt8ue0n8Gs0A007yKXj4Xzb8+cNjZeYsSzzwKc0Lr+OZgYwVfB0pHfUs17EPoLvrOsEaJ9mj+Tg==",
"version": "4.12.3",
"resolved": "https://registry.npmjs.org/hono/-/hono-4.12.3.tgz",
"integrity": "sha512-SFsVSjp8sj5UumXOOFlkZOG6XS9SJDKw0TbwFeV+AJ8xlST8kxK5Z/5EYa111UY8732lK2S/xB653ceuaoGwpg==",
"dev": true,
"license": "MIT",
"engines": {
@@ -5515,6 +5488,23 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/log-update/node_modules/slice-ansi": {
"version": "7.1.2",
"resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-7.1.2.tgz",
"integrity": "sha512-iOBWFgUX7caIZiuutICxVgX1SdxwAVFFKwt1EvMYYec/NWO5meOJ6K5uQxhrYBdQJne4KxiqZc+KptFOWFSI9w==",
"dev": true,
"license": "MIT",
"dependencies": {
"ansi-styles": "^6.2.1",
"is-fullwidth-code-point": "^5.0.0"
},
"engines": {
"node": ">=18"
},
"funding": {
"url": "https://github.com/chalk/slice-ansi?sponsor=1"
}
},
"node_modules/log-update/node_modules/string-width": {
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz",
@@ -5668,9 +5658,9 @@
}
},
"node_modules/minimatch": {
"version": "10.2.3",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.3.tgz",
"integrity": "sha512-Rwi3pnapEqirPSbWbrZaa6N3nmqq4Xer/2XooiOKyV3q12ML06f7MOuc5DVH8ONZIFhwIYQ3yzPH4nt7iWHaTg==",
"version": "10.2.4",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.4.tgz",
"integrity": "sha512-oRjTw/97aTBN0RHbYCdtF1MQfvusSIBQM0IZEgzl6426+8jSC0nF1a/GmnVLpfB9yyr6g6FTqWqiZVbxrtaCIg==",
"dev": true,
"license": "BlueOak-1.0.0",
"dependencies": {
@@ -6426,9 +6416,9 @@
}
},
"node_modules/postcss": {
"version": "8.5.6",
"resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz",
"integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==",
"version": "8.5.8",
"resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.8.tgz",
"integrity": "sha512-OW/rX8O/jXnm82Ey1k44pObPtdblfiuWnrd8X7GJ7emImCOstunGbXUpp7HdBrFQX6rJzn3sPT397Wp5aCwCHg==",
"dev": true,
"funding": [
{
@@ -7002,17 +6992,17 @@
}
},
"node_modules/slice-ansi": {
"version": "7.1.2",
"resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-7.1.2.tgz",
"integrity": "sha512-iOBWFgUX7caIZiuutICxVgX1SdxwAVFFKwt1EvMYYec/NWO5meOJ6K5uQxhrYBdQJne4KxiqZc+KptFOWFSI9w==",
"version": "8.0.0",
"resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-8.0.0.tgz",
"integrity": "sha512-stxByr12oeeOyY2BlviTNQlYV5xOj47GirPr4yA1hE9JCtxfQN0+tVbkxwCtYDQWhEKWFHsEK48ORg5jrouCAg==",
"dev": true,
"license": "MIT",
"dependencies": {
"ansi-styles": "^6.2.1",
"is-fullwidth-code-point": "^5.0.0"
"ansi-styles": "^6.2.3",
"is-fullwidth-code-point": "^5.1.0"
},
"engines": {
"node": ">=18"
"node": ">=20"
},
"funding": {
"url": "https://github.com/chalk/slice-ansi?sponsor=1"
@@ -7179,13 +7169,13 @@
}
},
"node_modules/strip-ansi": {
"version": "7.1.2",
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz",
"integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==",
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.2.0.tgz",
"integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==",
"dev": true,
"license": "MIT",
"dependencies": {
"ansi-regex": "^6.0.1"
"ansi-regex": "^6.2.2"
},
"engines": {
"node": ">=12"
+120 -130
View File
@@ -249,13 +249,13 @@
}
},
"node_modules/@angular-devkit/architect": {
"version": "0.2102.0-rc.2",
"resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.2102.0-rc.2.tgz",
"integrity": "sha512-IP2wGHDxBLgtWoxXFCFmKF5HsKMAXgGi2hj2SmcoR9q8HDKVPmyBUBT10sdCdSyiM8J3+3yHYDW4rOO22ya5Pw==",
"version": "0.2102.0",
"resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.2102.0.tgz",
"integrity": "sha512-kYFwTNzToG2SJMxj2f41w3QRtdqlrFuF+bpZrtIaHOP078Ktld8EPIp9KqB0Y46Vvs69ifby5Q1/wPD9wA3iaw==",
"dev": true,
"license": "MIT",
"dependencies": {
"@angular-devkit/core": "21.2.0-rc.2",
"@angular-devkit/core": "21.2.0",
"rxjs": "7.8.2"
},
"bin": {
@@ -268,9 +268,9 @@
}
},
"node_modules/@angular-devkit/core": {
"version": "21.2.0-rc.2",
"resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-21.2.0-rc.2.tgz",
"integrity": "sha512-4Y8qoXFY9gdF/WahgfPRWORJqmgdAPKkDGjmyMBqwNdL96vqyKq0/5TD8K5PsUXV+HWg6GClWTWhRyWVxJtoLQ==",
"version": "21.2.0",
"resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-21.2.0.tgz",
"integrity": "sha512-HZdTn46Ca6qbb9Zef8R/+TWsk6mNKRm4rJyL3PxHP6HnVCwSPNZ0LNN9BjVREBs+UlRdXqBGFBZh5D1nBgu5GQ==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -296,13 +296,13 @@
}
},
"node_modules/@angular-devkit/schematics": {
"version": "21.2.0-rc.2",
"resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-21.2.0-rc.2.tgz",
"integrity": "sha512-+vkSdeSRIAIMW5pQW8YCD0rrPCM6EpFFuHGSoJZtjXRGnNuJKYApNqLreO1daZvVTG6YokB5KkE+mnvp9rBEeg==",
"version": "21.2.0",
"resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-21.2.0.tgz",
"integrity": "sha512-3kn3FI5v7BQ7Zct6raek+WgvyDwOJ8wElbyC903GxMQCDBRGGcevhHvTAIHhknihEsrgplzPhTlWeMbk1JfdFg==",
"dev": true,
"license": "MIT",
"dependencies": {
"@angular-devkit/core": "21.2.0-rc.2",
"@angular-devkit/core": "21.2.0",
"jsonc-parser": "3.3.1",
"magic-string": "0.30.21",
"ora": "9.3.0",
@@ -315,14 +315,14 @@
}
},
"node_modules/@angular/build": {
"version": "21.2.0-rc.2",
"resolved": "https://registry.npmjs.org/@angular/build/-/build-21.2.0-rc.2.tgz",
"integrity": "sha512-1Hhr0w0uUBuMPEFjv9yXEHKahNHbw/NWt9uo1cf43ipFrrBKYHJj2DwwgyKKoEmtK/ap/l9yEZpL2oCfqCwEFQ==",
"version": "21.2.0",
"resolved": "https://registry.npmjs.org/@angular/build/-/build-21.2.0.tgz",
"integrity": "sha512-K0EqiHz2y7TSyD4adWD0+C/P9khKlrsSWavXWxGRvoSJC/H3I3SK5Z6BWwftBibXR1Fis7njwvl5IGAlQrDchA==",
"dev": true,
"license": "MIT",
"dependencies": {
"@ampproject/remapping": "2.3.0",
"@angular-devkit/architect": "0.2102.0-rc.2",
"@angular-devkit/architect": "0.2102.0",
"@babel/core": "7.29.0",
"@babel/helper-annotate-as-pure": "7.27.3",
"@babel/helper-split-export-declaration": "7.24.7",
@@ -358,17 +358,17 @@
"lmdb": "3.5.1"
},
"peerDependencies": {
"@angular/compiler": "^21.0.0 || ^21.2.0-next.0",
"@angular/compiler-cli": "^21.0.0 || ^21.2.0-next.0",
"@angular/core": "^21.0.0 || ^21.2.0-next.0",
"@angular/localize": "^21.0.0 || ^21.2.0-next.0",
"@angular/platform-browser": "^21.0.0 || ^21.2.0-next.0",
"@angular/platform-server": "^21.0.0 || ^21.2.0-next.0",
"@angular/service-worker": "^21.0.0 || ^21.2.0-next.0",
"@angular/ssr": "^21.2.0-rc.2",
"@angular/compiler": "^21.0.0",
"@angular/compiler-cli": "^21.0.0",
"@angular/core": "^21.0.0",
"@angular/localize": "^21.0.0",
"@angular/platform-browser": "^21.0.0",
"@angular/platform-server": "^21.0.0",
"@angular/service-worker": "^21.0.0",
"@angular/ssr": "^21.2.0",
"karma": "^6.4.0",
"less": "^4.2.0",
"ng-packagr": "^21.0.0 || ^21.2.0-next.0",
"ng-packagr": "^21.0.0",
"postcss": "^8.4.0",
"tailwindcss": "^2.0.0 || ^3.0.0 || ^4.0.0",
"tslib": "^2.3.0",
@@ -415,19 +415,19 @@
}
},
"node_modules/@angular/cli": {
"version": "21.2.0-rc.2",
"resolved": "https://registry.npmjs.org/@angular/cli/-/cli-21.2.0-rc.2.tgz",
"integrity": "sha512-rFuYlatMsYRqEi8FlvWqmTMU7x1iPFJpZUtAIYKo35C9kl0/Z5jhqqAv2Ws3LCX0lmVCzQ3TWRiFQp7T+2DWkw==",
"version": "21.2.0",
"resolved": "https://registry.npmjs.org/@angular/cli/-/cli-21.2.0.tgz",
"integrity": "sha512-yaGEpckqgOemcHkoWeH92i9eNrcbr9iE/dnxL+Du6s9spTAXJ2jjtYfszhmowuQZkCK5rjecMb8ctNtHlaGCjg==",
"dev": true,
"license": "MIT",
"dependencies": {
"@angular-devkit/architect": "0.2102.0-rc.2",
"@angular-devkit/core": "21.2.0-rc.2",
"@angular-devkit/schematics": "21.2.0-rc.2",
"@angular-devkit/architect": "0.2102.0",
"@angular-devkit/core": "21.2.0",
"@angular-devkit/schematics": "21.2.0",
"@inquirer/prompts": "7.10.1",
"@listr2/prompt-adapter-inquirer": "3.0.5",
"@modelcontextprotocol/sdk": "1.26.0",
"@schematics/angular": "21.2.0-rc.2",
"@schematics/angular": "21.2.0",
"@yarnpkg/lockfile": "1.1.0",
"algoliasearch": "5.48.1",
"ini": "6.0.0",
@@ -450,9 +450,9 @@
}
},
"node_modules/@angular/common": {
"version": "21.2.0-rc.0",
"resolved": "https://registry.npmjs.org/@angular/common/-/common-21.2.0-rc.0.tgz",
"integrity": "sha512-2O3cbBIM8ls97XwkYVdgJwEg3UOy/bVZ0uBoY14cLskhETj6wbrFENiy8KpikZ+xsTxE9gWohairxCRiEoFuKg==",
"version": "21.2.0",
"resolved": "https://registry.npmjs.org/@angular/common/-/common-21.2.0.tgz",
"integrity": "sha512-6zJMPi0i/XDniEgv3/t2BjuDHiOG44lgIR5PYyxqGpgJ0kqB5hku/0TuentNEi1VnBYgthnfhjek7c+lakXmhw==",
"license": "MIT",
"dependencies": {
"tslib": "^2.3.0"
@@ -461,14 +461,14 @@
"node": "^20.19.0 || ^22.12.0 || >=24.0.0"
},
"peerDependencies": {
"@angular/core": "21.2.0-rc.0",
"@angular/core": "21.2.0",
"rxjs": "^6.5.3 || ^7.4.0"
}
},
"node_modules/@angular/compiler": {
"version": "21.2.0-rc.0",
"resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-21.2.0-rc.0.tgz",
"integrity": "sha512-gl2dQgMFKkH/iM/YxqWO0oIbYRpBZpOZuxj9W5TjG50EpMDioD1CNu2DfXpODVo3/rOfZJvOa+Jw0Cxpj5ClMQ==",
"version": "21.2.0",
"resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-21.2.0.tgz",
"integrity": "sha512-0RPkma8UVNpse/VJcXT9w6SKzTMz4J/uMGj0l9enM1frg9xrx1fwi/lLmaVV9Nr9LfqPjQdxNFFlvaBB7g/2zg==",
"license": "MIT",
"dependencies": {
"tslib": "^2.3.0"
@@ -478,9 +478,9 @@
}
},
"node_modules/@angular/compiler-cli": {
"version": "21.2.0-rc.0",
"resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-21.2.0-rc.0.tgz",
"integrity": "sha512-lHPA5BzQq9ttHXCAnAC/zW5vW0lFiawBIvRpNRbsI8Vw1noMs614OqZ2R6UBReVPE4kpyGwh7HCQIZyX5Cth6g==",
"version": "21.2.0",
"resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-21.2.0.tgz",
"integrity": "sha512-gZd58p0/JjgdxMX3v+LjCB6e3dBIfNVr/YzXoh55TfffdBCUQY94hl1+DFQkJ72K5EX+1zbaz03dIm30kw1bGw==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -501,7 +501,7 @@
"node": "^20.19.0 || ^22.12.0 || >=24.0.0"
},
"peerDependencies": {
"@angular/compiler": "21.2.0-rc.0",
"@angular/compiler": "21.2.0",
"typescript": ">=5.9 <6.1"
},
"peerDependenciesMeta": {
@@ -511,9 +511,9 @@
}
},
"node_modules/@angular/core": {
"version": "21.2.0-rc.0",
"resolved": "https://registry.npmjs.org/@angular/core/-/core-21.2.0-rc.0.tgz",
"integrity": "sha512-Txdi6ocSNC8GbCYMGh2AUm1lx+J11LNRjNrfGcgxQhQAiEPVO8jGojfObM+rdjv1h8t0pCms5vzEmFiJ9z06hg==",
"version": "21.2.0",
"resolved": "https://registry.npmjs.org/@angular/core/-/core-21.2.0.tgz",
"integrity": "sha512-VnTbmZq3g3Q+s3nCZ8VUDMLjMezOg/bqUxAJ/DrRWCrEcTP5JO3mrNPs3FHj+qlB0T+BQP7uQv6QTzPVKybwoA==",
"license": "MIT",
"dependencies": {
"tslib": "^2.3.0"
@@ -522,7 +522,7 @@
"node": "^20.19.0 || ^22.12.0 || >=24.0.0"
},
"peerDependencies": {
"@angular/compiler": "21.2.0-rc.0",
"@angular/compiler": "21.2.0",
"rxjs": "^6.5.3 || ^7.4.0",
"zone.js": "~0.15.0 || ~0.16.0"
},
@@ -536,9 +536,9 @@
}
},
"node_modules/@angular/forms": {
"version": "21.2.0-rc.0",
"resolved": "https://registry.npmjs.org/@angular/forms/-/forms-21.2.0-rc.0.tgz",
"integrity": "sha512-GsX4c+GYUxcKla8yO/hpEzpliCsMslP+yIIk9l6831PkSf3uCyKHUHriJtOEca4uN5fNo23ix5NXo5VPkmldLQ==",
"version": "21.2.0",
"resolved": "https://registry.npmjs.org/@angular/forms/-/forms-21.2.0.tgz",
"integrity": "sha512-NduUtPWLauH/FLayEDkLyaKAGqKzXbcfO7468LOWCXN3crhNVQyIWRQPOUcdpoJwDAGLpN85m3DhJhXNnA9c5w==",
"license": "MIT",
"dependencies": {
"@standard-schema/spec": "^1.0.0",
@@ -548,16 +548,16 @@
"node": "^20.19.0 || ^22.12.0 || >=24.0.0"
},
"peerDependencies": {
"@angular/common": "21.2.0-rc.0",
"@angular/core": "21.2.0-rc.0",
"@angular/platform-browser": "21.2.0-rc.0",
"@angular/common": "21.2.0",
"@angular/core": "21.2.0",
"@angular/platform-browser": "21.2.0",
"rxjs": "^6.5.3 || ^7.4.0"
}
},
"node_modules/@angular/platform-browser": {
"version": "21.2.0-rc.0",
"resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-21.2.0-rc.0.tgz",
"integrity": "sha512-FCNRhzkf35l6B18gzaT6GDdTJ3v4AiLOSXc5RdiQ2PMn2dLOkm70SH0caXQGzvtXAzHrHlR+Evj/ZqaFYvjcYg==",
"version": "21.2.0",
"resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-21.2.0.tgz",
"integrity": "sha512-IUGukpvvT2B5Dl76qzk6rY7UIHUT9u4BhT2AwVz+5JqcX9KwQtYD17Gt7wj6bvIgCXKWG+CfN8Zd9DECOCYWjg==",
"license": "MIT",
"dependencies": {
"tslib": "^2.3.0"
@@ -566,9 +566,9 @@
"node": "^20.19.0 || ^22.12.0 || >=24.0.0"
},
"peerDependencies": {
"@angular/animations": "21.2.0-rc.0",
"@angular/common": "21.2.0-rc.0",
"@angular/core": "21.2.0-rc.0"
"@angular/animations": "21.2.0",
"@angular/common": "21.2.0",
"@angular/core": "21.2.0"
},
"peerDependenciesMeta": {
"@angular/animations": {
@@ -577,9 +577,9 @@
}
},
"node_modules/@angular/router": {
"version": "21.2.0-rc.0",
"resolved": "https://registry.npmjs.org/@angular/router/-/router-21.2.0-rc.0.tgz",
"integrity": "sha512-KZmZCdm4H+w3UC1vorQ/Nj4FEHY4sgRkwp+zf4E4WFV+sflyFzqFxzVIKGJ1xTzjaDebCRmipJnc3DZ09fv1fg==",
"version": "21.2.0",
"resolved": "https://registry.npmjs.org/@angular/router/-/router-21.2.0.tgz",
"integrity": "sha512-siliJ+jJRUCRZ0cdkqc7zww9Didz56Z0Z2YPIuR2n5TZLiuJY+jAf6xotXKp/v6v8XoGJwLiRNipGgNDRIAlWA==",
"license": "MIT",
"dependencies": {
"tslib": "^2.3.0"
@@ -588,9 +588,9 @@
"node": "^20.19.0 || ^22.12.0 || >=24.0.0"
},
"peerDependencies": {
"@angular/common": "21.2.0-rc.0",
"@angular/core": "21.2.0-rc.0",
"@angular/platform-browser": "21.2.0-rc.0",
"@angular/common": "21.2.0",
"@angular/core": "21.2.0",
"@angular/platform-browser": "21.2.0",
"rxjs": "^6.5.3 || ^7.4.0"
}
},
@@ -2592,9 +2592,9 @@
}
},
"node_modules/@npmcli/run-script": {
"version": "10.0.3",
"resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-10.0.3.tgz",
"integrity": "sha512-ER2N6itRkzWbbtVmZ9WKaWxVlKlOeBFF1/7xx+KA5J1xKa4JjUwBdb6tDpk0v1qA+d+VDwHI9qmLcXSWcmi+Rw==",
"version": "10.0.4",
"resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-10.0.4.tgz",
"integrity": "sha512-mGUWr1uMnf0le2TwfOZY4SFxZGXGfm4Jtay/nwAa2FLNAKXUoUwaGwBMNH36UHPtinWfTSJ3nqFQr0091CxVGg==",
"dev": true,
"license": "ISC",
"dependencies": {
@@ -2602,34 +2602,7 @@
"@npmcli/package-json": "^7.0.0",
"@npmcli/promise-spawn": "^9.0.0",
"node-gyp": "^12.1.0",
"proc-log": "^6.0.0",
"which": "^6.0.0"
},
"engines": {
"node": "^20.17.0 || >=22.9.0"
}
},
"node_modules/@npmcli/run-script/node_modules/isexe": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/isexe/-/isexe-4.0.0.tgz",
"integrity": "sha512-FFUtZMpoZ8RqHS3XeXEmHWLA4thH+ZxCv2lOiPIn1Xc7CxrqhWzNSDzD+/chS/zbYezmiwWLdQC09JdQKmthOw==",
"dev": true,
"license": "BlueOak-1.0.0",
"engines": {
"node": ">=20"
}
},
"node_modules/@npmcli/run-script/node_modules/which": {
"version": "6.0.1",
"resolved": "https://registry.npmjs.org/which/-/which-6.0.1.tgz",
"integrity": "sha512-oGLe46MIrCRqX7ytPUf66EAYvdeMIZYn3WaocqqKZAxrBpkqHfL/qvTyJ/bTk5+AqHCjXmrv3CEWgy368zhRUg==",
"dev": true,
"license": "ISC",
"dependencies": {
"isexe": "^4.0.0"
},
"bin": {
"node-which": "bin/which.js"
"proc-log": "^6.0.0"
},
"engines": {
"node": "^20.17.0 || >=22.9.0"
@@ -3542,14 +3515,14 @@
]
},
"node_modules/@schematics/angular": {
"version": "21.2.0-rc.2",
"resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-21.2.0-rc.2.tgz",
"integrity": "sha512-QzyPSwdkpcEN5iQ28sfb7tak8MukvGC6nzl1kgziWNYPyNaf+DIXEfspOnCME0ZwjI3pBpJnBvj+uMn8fx3YSw==",
"version": "21.2.0",
"resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-21.2.0.tgz",
"integrity": "sha512-GQUIeGzZwCT9/W5MAkKnkwETROPbA1eRmy3JF56jLmvr95tJnypGOG8jGYy0d+tcEVujIouh48r4J3bJQg5mrw==",
"dev": true,
"license": "MIT",
"dependencies": {
"@angular-devkit/core": "21.2.0-rc.2",
"@angular-devkit/schematics": "21.2.0-rc.2",
"@angular-devkit/core": "21.2.0",
"@angular-devkit/schematics": "21.2.0",
"jsonc-parser": "3.3.1"
},
"engines": {
@@ -3920,9 +3893,9 @@
"license": "ISC"
},
"node_modules/brace-expansion": {
"version": "5.0.3",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.3.tgz",
"integrity": "sha512-fy6KJm2RawA5RcHkLa1z/ScpBeA762UF9KmZQxwIbDtRJrgLzM10depAiEQ+CXYcoiqW1/m96OAAoke2nE9EeA==",
"version": "5.0.4",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.4.tgz",
"integrity": "sha512-h+DEnpVvxmfVefa4jFbCf5HdH5YMDXRsmKflpf1pILZWRFlTbJpxeU55nJl4Smt5HQaGzg1o6RHFPJaOqnmBDg==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -4048,9 +4021,9 @@
}
},
"node_modules/caniuse-lite": {
"version": "1.0.30001774",
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001774.tgz",
"integrity": "sha512-DDdwPGz99nmIEv216hKSgLD+D4ikHQHjBC/seF98N9CPqRX4M5mSxT9eTV6oyisnJcuzxtZy4n17yKKQYmYQOA==",
"version": "1.0.30001775",
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001775.tgz",
"integrity": "sha512-s3Qv7Lht9zbVKE9XoTyRG6wVDCKdtOFIjBGg3+Yhn6JaytuNKPIjBMTMIY1AnOH3seL5mvF+x33oGAyK3hVt3A==",
"dev": true,
"funding": [
{
@@ -4144,14 +4117,14 @@
}
},
"node_modules/cli-truncate": {
"version": "5.1.1",
"resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-5.1.1.tgz",
"integrity": "sha512-SroPvNHxUnk+vIW/dOSfNqdy1sPEFkrTk6TUtqLCnBlo3N7TNYYkzzN7uSD6+jVjrdO4+p8nH7JzH6cIvUem6A==",
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-5.2.0.tgz",
"integrity": "sha512-xRwvIOMGrfOAnM1JYtqQImuaNtDEv9v6oIYAs4LIHwTiKee8uwvIi363igssOC0O5U04i4AlENs79LQLu9tEMw==",
"dev": true,
"license": "MIT",
"dependencies": {
"slice-ansi": "^7.1.0",
"string-width": "^8.0.0"
"slice-ansi": "^8.0.0",
"string-width": "^8.2.0"
},
"engines": {
"node": ">=20"
@@ -5017,9 +4990,9 @@
}
},
"node_modules/hono": {
"version": "4.12.2",
"resolved": "https://registry.npmjs.org/hono/-/hono-4.12.2.tgz",
"integrity": "sha512-gJnaDHXKDayjt8ue0n8Gs0A007yKXj4Xzb8+cNjZeYsSzzwKc0Lr+OZgYwVfB0pHfUs17EPoLvrOsEaJ9mj+Tg==",
"version": "4.12.3",
"resolved": "https://registry.npmjs.org/hono/-/hono-4.12.3.tgz",
"integrity": "sha512-SFsVSjp8sj5UumXOOFlkZOG6XS9SJDKw0TbwFeV+AJ8xlST8kxK5Z/5EYa111UY8732lK2S/xB653ceuaoGwpg==",
"dev": true,
"license": "MIT",
"engines": {
@@ -5534,6 +5507,23 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/log-update/node_modules/slice-ansi": {
"version": "7.1.2",
"resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-7.1.2.tgz",
"integrity": "sha512-iOBWFgUX7caIZiuutICxVgX1SdxwAVFFKwt1EvMYYec/NWO5meOJ6K5uQxhrYBdQJne4KxiqZc+KptFOWFSI9w==",
"dev": true,
"license": "MIT",
"dependencies": {
"ansi-styles": "^6.2.1",
"is-fullwidth-code-point": "^5.0.0"
},
"engines": {
"node": ">=18"
},
"funding": {
"url": "https://github.com/chalk/slice-ansi?sponsor=1"
}
},
"node_modules/log-update/node_modules/string-width": {
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz",
@@ -5687,9 +5677,9 @@
}
},
"node_modules/minimatch": {
"version": "10.2.3",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.3.tgz",
"integrity": "sha512-Rwi3pnapEqirPSbWbrZaa6N3nmqq4Xer/2XooiOKyV3q12ML06f7MOuc5DVH8ONZIFhwIYQ3yzPH4nt7iWHaTg==",
"version": "10.2.4",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.4.tgz",
"integrity": "sha512-oRjTw/97aTBN0RHbYCdtF1MQfvusSIBQM0IZEgzl6426+8jSC0nF1a/GmnVLpfB9yyr6g6FTqWqiZVbxrtaCIg==",
"dev": true,
"license": "BlueOak-1.0.0",
"dependencies": {
@@ -6445,9 +6435,9 @@
}
},
"node_modules/postcss": {
"version": "8.5.6",
"resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz",
"integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==",
"version": "8.5.8",
"resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.8.tgz",
"integrity": "sha512-OW/rX8O/jXnm82Ey1k44pObPtdblfiuWnrd8X7GJ7emImCOstunGbXUpp7HdBrFQX6rJzn3sPT397Wp5aCwCHg==",
"dev": true,
"funding": [
{
@@ -7021,17 +7011,17 @@
}
},
"node_modules/slice-ansi": {
"version": "7.1.2",
"resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-7.1.2.tgz",
"integrity": "sha512-iOBWFgUX7caIZiuutICxVgX1SdxwAVFFKwt1EvMYYec/NWO5meOJ6K5uQxhrYBdQJne4KxiqZc+KptFOWFSI9w==",
"version": "8.0.0",
"resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-8.0.0.tgz",
"integrity": "sha512-stxByr12oeeOyY2BlviTNQlYV5xOj47GirPr4yA1hE9JCtxfQN0+tVbkxwCtYDQWhEKWFHsEK48ORg5jrouCAg==",
"dev": true,
"license": "MIT",
"dependencies": {
"ansi-styles": "^6.2.1",
"is-fullwidth-code-point": "^5.0.0"
"ansi-styles": "^6.2.3",
"is-fullwidth-code-point": "^5.1.0"
},
"engines": {
"node": ">=18"
"node": ">=20"
},
"funding": {
"url": "https://github.com/chalk/slice-ansi?sponsor=1"
@@ -7198,13 +7188,13 @@
}
},
"node_modules/strip-ansi": {
"version": "7.1.2",
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz",
"integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==",
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.2.0.tgz",
"integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==",
"dev": true,
"license": "MIT",
"dependencies": {
"ansi-regex": "^6.0.1"
"ansi-regex": "^6.2.2"
},
"engines": {
"node": ">=12"
+132 -142
View File
@@ -251,13 +251,13 @@
}
},
"node_modules/@angular-devkit/architect": {
"version": "0.2102.0-rc.2",
"resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.2102.0-rc.2.tgz",
"integrity": "sha512-IP2wGHDxBLgtWoxXFCFmKF5HsKMAXgGi2hj2SmcoR9q8HDKVPmyBUBT10sdCdSyiM8J3+3yHYDW4rOO22ya5Pw==",
"version": "0.2102.0",
"resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.2102.0.tgz",
"integrity": "sha512-kYFwTNzToG2SJMxj2f41w3QRtdqlrFuF+bpZrtIaHOP078Ktld8EPIp9KqB0Y46Vvs69ifby5Q1/wPD9wA3iaw==",
"dev": true,
"license": "MIT",
"dependencies": {
"@angular-devkit/core": "21.2.0-rc.2",
"@angular-devkit/core": "21.2.0",
"rxjs": "7.8.2"
},
"bin": {
@@ -270,9 +270,9 @@
}
},
"node_modules/@angular-devkit/core": {
"version": "21.2.0-rc.2",
"resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-21.2.0-rc.2.tgz",
"integrity": "sha512-4Y8qoXFY9gdF/WahgfPRWORJqmgdAPKkDGjmyMBqwNdL96vqyKq0/5TD8K5PsUXV+HWg6GClWTWhRyWVxJtoLQ==",
"version": "21.2.0",
"resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-21.2.0.tgz",
"integrity": "sha512-HZdTn46Ca6qbb9Zef8R/+TWsk6mNKRm4rJyL3PxHP6HnVCwSPNZ0LNN9BjVREBs+UlRdXqBGFBZh5D1nBgu5GQ==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -298,13 +298,13 @@
}
},
"node_modules/@angular-devkit/schematics": {
"version": "21.2.0-rc.2",
"resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-21.2.0-rc.2.tgz",
"integrity": "sha512-+vkSdeSRIAIMW5pQW8YCD0rrPCM6EpFFuHGSoJZtjXRGnNuJKYApNqLreO1daZvVTG6YokB5KkE+mnvp9rBEeg==",
"version": "21.2.0",
"resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-21.2.0.tgz",
"integrity": "sha512-3kn3FI5v7BQ7Zct6raek+WgvyDwOJ8wElbyC903GxMQCDBRGGcevhHvTAIHhknihEsrgplzPhTlWeMbk1JfdFg==",
"dev": true,
"license": "MIT",
"dependencies": {
"@angular-devkit/core": "21.2.0-rc.2",
"@angular-devkit/core": "21.2.0",
"jsonc-parser": "3.3.1",
"magic-string": "0.30.21",
"ora": "9.3.0",
@@ -317,9 +317,9 @@
}
},
"node_modules/@angular/animations": {
"version": "21.2.0-rc.0",
"resolved": "https://registry.npmjs.org/@angular/animations/-/animations-21.2.0-rc.0.tgz",
"integrity": "sha512-9oMEVaSqkb3/3R5FLEV8cSjyC9dYCru3NdcXbe/8D4RerBJjlAjGSXjmfNAS6fzXD+/CsINK0ELh8Mcxvqe/GQ==",
"version": "21.2.0",
"resolved": "https://registry.npmjs.org/@angular/animations/-/animations-21.2.0.tgz",
"integrity": "sha512-SzlLoMT/r5wKqPicx5okCAiN5UD5+VE7x/F1G6gSJCcnBfbK5PqHPUmDnMW4jw9Ode06KZDT7ntstn6fG+Ld8w==",
"license": "MIT",
"dependencies": {
"tslib": "^2.3.0"
@@ -328,18 +328,18 @@
"node": "^20.19.0 || ^22.12.0 || >=24.0.0"
},
"peerDependencies": {
"@angular/core": "21.2.0-rc.0"
"@angular/core": "21.2.0"
}
},
"node_modules/@angular/build": {
"version": "21.2.0-rc.2",
"resolved": "https://registry.npmjs.org/@angular/build/-/build-21.2.0-rc.2.tgz",
"integrity": "sha512-1Hhr0w0uUBuMPEFjv9yXEHKahNHbw/NWt9uo1cf43ipFrrBKYHJj2DwwgyKKoEmtK/ap/l9yEZpL2oCfqCwEFQ==",
"version": "21.2.0",
"resolved": "https://registry.npmjs.org/@angular/build/-/build-21.2.0.tgz",
"integrity": "sha512-K0EqiHz2y7TSyD4adWD0+C/P9khKlrsSWavXWxGRvoSJC/H3I3SK5Z6BWwftBibXR1Fis7njwvl5IGAlQrDchA==",
"dev": true,
"license": "MIT",
"dependencies": {
"@ampproject/remapping": "2.3.0",
"@angular-devkit/architect": "0.2102.0-rc.2",
"@angular-devkit/architect": "0.2102.0",
"@babel/core": "7.29.0",
"@babel/helper-annotate-as-pure": "7.27.3",
"@babel/helper-split-export-declaration": "7.24.7",
@@ -375,17 +375,17 @@
"lmdb": "3.5.1"
},
"peerDependencies": {
"@angular/compiler": "^21.0.0 || ^21.2.0-next.0",
"@angular/compiler-cli": "^21.0.0 || ^21.2.0-next.0",
"@angular/core": "^21.0.0 || ^21.2.0-next.0",
"@angular/localize": "^21.0.0 || ^21.2.0-next.0",
"@angular/platform-browser": "^21.0.0 || ^21.2.0-next.0",
"@angular/platform-server": "^21.0.0 || ^21.2.0-next.0",
"@angular/service-worker": "^21.0.0 || ^21.2.0-next.0",
"@angular/ssr": "^21.2.0-rc.2",
"@angular/compiler": "^21.0.0",
"@angular/compiler-cli": "^21.0.0",
"@angular/core": "^21.0.0",
"@angular/localize": "^21.0.0",
"@angular/platform-browser": "^21.0.0",
"@angular/platform-server": "^21.0.0",
"@angular/service-worker": "^21.0.0",
"@angular/ssr": "^21.2.0",
"karma": "^6.4.0",
"less": "^4.2.0",
"ng-packagr": "^21.0.0 || ^21.2.0-next.0",
"ng-packagr": "^21.0.0",
"postcss": "^8.4.0",
"tailwindcss": "^2.0.0 || ^3.0.0 || ^4.0.0",
"tslib": "^2.3.0",
@@ -432,35 +432,35 @@
}
},
"node_modules/@angular/cdk": {
"version": "21.2.0-rc.0",
"resolved": "https://registry.npmjs.org/@angular/cdk/-/cdk-21.2.0-rc.0.tgz",
"integrity": "sha512-dfVC6OjwgfonuE+os2mYNh0tY6bRlT7u+zz2rWXbEYH5J9nRvRTr1jo3+GORT/0FY0Kt9nI0FVydyrFvjfqh3g==",
"version": "21.2.0",
"resolved": "https://registry.npmjs.org/@angular/cdk/-/cdk-21.2.0.tgz",
"integrity": "sha512-1P0TNL1F51NC7JAaXabaAHY7Y1zBloLSZXfml1POa4a116V+y/QZfPGsxM0LwD1qSSXhSb2LNl7duTtJAP39bA==",
"license": "MIT",
"dependencies": {
"parse5": "^8.0.0",
"tslib": "^2.3.0"
},
"peerDependencies": {
"@angular/common": "^21.0.0-0 || ^21.1.0-0 || ^21.2.0-0 || ^21.3.0-0 || ^22.0.0-0",
"@angular/core": "^21.0.0-0 || ^21.1.0-0 || ^21.2.0-0 || ^21.3.0-0 || ^22.0.0-0",
"@angular/platform-browser": "^21.0.0-0 || ^21.1.0-0 || ^21.2.0-0 || ^21.3.0-0 || ^22.0.0-0",
"@angular/common": "^21.0.0 || ^22.0.0",
"@angular/core": "^21.0.0 || ^22.0.0",
"@angular/platform-browser": "^21.0.0 || ^22.0.0",
"rxjs": "^6.5.3 || ^7.4.0"
}
},
"node_modules/@angular/cli": {
"version": "21.2.0-rc.2",
"resolved": "https://registry.npmjs.org/@angular/cli/-/cli-21.2.0-rc.2.tgz",
"integrity": "sha512-rFuYlatMsYRqEi8FlvWqmTMU7x1iPFJpZUtAIYKo35C9kl0/Z5jhqqAv2Ws3LCX0lmVCzQ3TWRiFQp7T+2DWkw==",
"version": "21.2.0",
"resolved": "https://registry.npmjs.org/@angular/cli/-/cli-21.2.0.tgz",
"integrity": "sha512-yaGEpckqgOemcHkoWeH92i9eNrcbr9iE/dnxL+Du6s9spTAXJ2jjtYfszhmowuQZkCK5rjecMb8ctNtHlaGCjg==",
"dev": true,
"license": "MIT",
"dependencies": {
"@angular-devkit/architect": "0.2102.0-rc.2",
"@angular-devkit/core": "21.2.0-rc.2",
"@angular-devkit/schematics": "21.2.0-rc.2",
"@angular-devkit/architect": "0.2102.0",
"@angular-devkit/core": "21.2.0",
"@angular-devkit/schematics": "21.2.0",
"@inquirer/prompts": "7.10.1",
"@listr2/prompt-adapter-inquirer": "3.0.5",
"@modelcontextprotocol/sdk": "1.26.0",
"@schematics/angular": "21.2.0-rc.2",
"@schematics/angular": "21.2.0",
"@yarnpkg/lockfile": "1.1.0",
"algoliasearch": "5.48.1",
"ini": "6.0.0",
@@ -483,9 +483,9 @@
}
},
"node_modules/@angular/common": {
"version": "21.2.0-rc.0",
"resolved": "https://registry.npmjs.org/@angular/common/-/common-21.2.0-rc.0.tgz",
"integrity": "sha512-2O3cbBIM8ls97XwkYVdgJwEg3UOy/bVZ0uBoY14cLskhETj6wbrFENiy8KpikZ+xsTxE9gWohairxCRiEoFuKg==",
"version": "21.2.0",
"resolved": "https://registry.npmjs.org/@angular/common/-/common-21.2.0.tgz",
"integrity": "sha512-6zJMPi0i/XDniEgv3/t2BjuDHiOG44lgIR5PYyxqGpgJ0kqB5hku/0TuentNEi1VnBYgthnfhjek7c+lakXmhw==",
"license": "MIT",
"dependencies": {
"tslib": "^2.3.0"
@@ -494,14 +494,14 @@
"node": "^20.19.0 || ^22.12.0 || >=24.0.0"
},
"peerDependencies": {
"@angular/core": "21.2.0-rc.0",
"@angular/core": "21.2.0",
"rxjs": "^6.5.3 || ^7.4.0"
}
},
"node_modules/@angular/compiler": {
"version": "21.2.0-rc.0",
"resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-21.2.0-rc.0.tgz",
"integrity": "sha512-gl2dQgMFKkH/iM/YxqWO0oIbYRpBZpOZuxj9W5TjG50EpMDioD1CNu2DfXpODVo3/rOfZJvOa+Jw0Cxpj5ClMQ==",
"version": "21.2.0",
"resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-21.2.0.tgz",
"integrity": "sha512-0RPkma8UVNpse/VJcXT9w6SKzTMz4J/uMGj0l9enM1frg9xrx1fwi/lLmaVV9Nr9LfqPjQdxNFFlvaBB7g/2zg==",
"license": "MIT",
"dependencies": {
"tslib": "^2.3.0"
@@ -511,9 +511,9 @@
}
},
"node_modules/@angular/compiler-cli": {
"version": "21.2.0-rc.0",
"resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-21.2.0-rc.0.tgz",
"integrity": "sha512-lHPA5BzQq9ttHXCAnAC/zW5vW0lFiawBIvRpNRbsI8Vw1noMs614OqZ2R6UBReVPE4kpyGwh7HCQIZyX5Cth6g==",
"version": "21.2.0",
"resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-21.2.0.tgz",
"integrity": "sha512-gZd58p0/JjgdxMX3v+LjCB6e3dBIfNVr/YzXoh55TfffdBCUQY94hl1+DFQkJ72K5EX+1zbaz03dIm30kw1bGw==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -534,7 +534,7 @@
"node": "^20.19.0 || ^22.12.0 || >=24.0.0"
},
"peerDependencies": {
"@angular/compiler": "21.2.0-rc.0",
"@angular/compiler": "21.2.0",
"typescript": ">=5.9 <6.1"
},
"peerDependenciesMeta": {
@@ -544,9 +544,9 @@
}
},
"node_modules/@angular/core": {
"version": "21.2.0-rc.0",
"resolved": "https://registry.npmjs.org/@angular/core/-/core-21.2.0-rc.0.tgz",
"integrity": "sha512-Txdi6ocSNC8GbCYMGh2AUm1lx+J11LNRjNrfGcgxQhQAiEPVO8jGojfObM+rdjv1h8t0pCms5vzEmFiJ9z06hg==",
"version": "21.2.0",
"resolved": "https://registry.npmjs.org/@angular/core/-/core-21.2.0.tgz",
"integrity": "sha512-VnTbmZq3g3Q+s3nCZ8VUDMLjMezOg/bqUxAJ/DrRWCrEcTP5JO3mrNPs3FHj+qlB0T+BQP7uQv6QTzPVKybwoA==",
"license": "MIT",
"dependencies": {
"tslib": "^2.3.0"
@@ -555,7 +555,7 @@
"node": "^20.19.0 || ^22.12.0 || >=24.0.0"
},
"peerDependencies": {
"@angular/compiler": "21.2.0-rc.0",
"@angular/compiler": "21.2.0",
"rxjs": "^6.5.3 || ^7.4.0",
"zone.js": "~0.15.0 || ~0.16.0"
},
@@ -569,9 +569,9 @@
}
},
"node_modules/@angular/forms": {
"version": "21.2.0-rc.0",
"resolved": "https://registry.npmjs.org/@angular/forms/-/forms-21.2.0-rc.0.tgz",
"integrity": "sha512-GsX4c+GYUxcKla8yO/hpEzpliCsMslP+yIIk9l6831PkSf3uCyKHUHriJtOEca4uN5fNo23ix5NXo5VPkmldLQ==",
"version": "21.2.0",
"resolved": "https://registry.npmjs.org/@angular/forms/-/forms-21.2.0.tgz",
"integrity": "sha512-NduUtPWLauH/FLayEDkLyaKAGqKzXbcfO7468LOWCXN3crhNVQyIWRQPOUcdpoJwDAGLpN85m3DhJhXNnA9c5w==",
"license": "MIT",
"dependencies": {
"@standard-schema/spec": "^1.0.0",
@@ -581,33 +581,33 @@
"node": "^20.19.0 || ^22.12.0 || >=24.0.0"
},
"peerDependencies": {
"@angular/common": "21.2.0-rc.0",
"@angular/core": "21.2.0-rc.0",
"@angular/platform-browser": "21.2.0-rc.0",
"@angular/common": "21.2.0",
"@angular/core": "21.2.0",
"@angular/platform-browser": "21.2.0",
"rxjs": "^6.5.3 || ^7.4.0"
}
},
"node_modules/@angular/material": {
"version": "21.2.0-rc.0",
"resolved": "https://registry.npmjs.org/@angular/material/-/material-21.2.0-rc.0.tgz",
"integrity": "sha512-A+u984wpMKmJsJ17q1aTHC5VScyz/Lkp3yFI2Wt05vMrXU+Dn0JZHT/34AjmPbO3sqvIqMRG0Y88kWfJflcJaw==",
"version": "21.2.0",
"resolved": "https://registry.npmjs.org/@angular/material/-/material-21.2.0.tgz",
"integrity": "sha512-GVJMgXa/jpy06b/txKMohuMDMu72Or576BSHKehnceYvI9sf25cnGGK1woNhALNDW449KReicAILujcFJ+mO6g==",
"license": "MIT",
"dependencies": {
"tslib": "^2.3.0"
},
"peerDependencies": {
"@angular/cdk": "21.2.0-rc.0",
"@angular/common": "^21.0.0-0 || ^21.1.0-0 || ^21.2.0-0 || ^21.3.0-0 || ^22.0.0-0",
"@angular/core": "^21.0.0-0 || ^21.1.0-0 || ^21.2.0-0 || ^21.3.0-0 || ^22.0.0-0",
"@angular/forms": "^21.0.0-0 || ^21.1.0-0 || ^21.2.0-0 || ^21.3.0-0 || ^22.0.0-0",
"@angular/platform-browser": "^21.0.0-0 || ^21.1.0-0 || ^21.2.0-0 || ^21.3.0-0 || ^22.0.0-0",
"@angular/cdk": "21.2.0",
"@angular/common": "^21.0.0 || ^22.0.0",
"@angular/core": "^21.0.0 || ^22.0.0",
"@angular/forms": "^21.0.0 || ^22.0.0",
"@angular/platform-browser": "^21.0.0 || ^22.0.0",
"rxjs": "^6.5.3 || ^7.4.0"
}
},
"node_modules/@angular/platform-browser": {
"version": "21.2.0-rc.0",
"resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-21.2.0-rc.0.tgz",
"integrity": "sha512-FCNRhzkf35l6B18gzaT6GDdTJ3v4AiLOSXc5RdiQ2PMn2dLOkm70SH0caXQGzvtXAzHrHlR+Evj/ZqaFYvjcYg==",
"version": "21.2.0",
"resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-21.2.0.tgz",
"integrity": "sha512-IUGukpvvT2B5Dl76qzk6rY7UIHUT9u4BhT2AwVz+5JqcX9KwQtYD17Gt7wj6bvIgCXKWG+CfN8Zd9DECOCYWjg==",
"license": "MIT",
"dependencies": {
"tslib": "^2.3.0"
@@ -616,9 +616,9 @@
"node": "^20.19.0 || ^22.12.0 || >=24.0.0"
},
"peerDependencies": {
"@angular/animations": "21.2.0-rc.0",
"@angular/common": "21.2.0-rc.0",
"@angular/core": "21.2.0-rc.0"
"@angular/animations": "21.2.0",
"@angular/common": "21.2.0",
"@angular/core": "21.2.0"
},
"peerDependenciesMeta": {
"@angular/animations": {
@@ -2624,9 +2624,9 @@
}
},
"node_modules/@npmcli/run-script": {
"version": "10.0.3",
"resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-10.0.3.tgz",
"integrity": "sha512-ER2N6itRkzWbbtVmZ9WKaWxVlKlOeBFF1/7xx+KA5J1xKa4JjUwBdb6tDpk0v1qA+d+VDwHI9qmLcXSWcmi+Rw==",
"version": "10.0.4",
"resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-10.0.4.tgz",
"integrity": "sha512-mGUWr1uMnf0le2TwfOZY4SFxZGXGfm4Jtay/nwAa2FLNAKXUoUwaGwBMNH36UHPtinWfTSJ3nqFQr0091CxVGg==",
"dev": true,
"license": "ISC",
"dependencies": {
@@ -2634,34 +2634,7 @@
"@npmcli/package-json": "^7.0.0",
"@npmcli/promise-spawn": "^9.0.0",
"node-gyp": "^12.1.0",
"proc-log": "^6.0.0",
"which": "^6.0.0"
},
"engines": {
"node": "^20.17.0 || >=22.9.0"
}
},
"node_modules/@npmcli/run-script/node_modules/isexe": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/isexe/-/isexe-4.0.0.tgz",
"integrity": "sha512-FFUtZMpoZ8RqHS3XeXEmHWLA4thH+ZxCv2lOiPIn1Xc7CxrqhWzNSDzD+/chS/zbYezmiwWLdQC09JdQKmthOw==",
"dev": true,
"license": "BlueOak-1.0.0",
"engines": {
"node": ">=20"
}
},
"node_modules/@npmcli/run-script/node_modules/which": {
"version": "6.0.1",
"resolved": "https://registry.npmjs.org/which/-/which-6.0.1.tgz",
"integrity": "sha512-oGLe46MIrCRqX7ytPUf66EAYvdeMIZYn3WaocqqKZAxrBpkqHfL/qvTyJ/bTk5+AqHCjXmrv3CEWgy368zhRUg==",
"dev": true,
"license": "ISC",
"dependencies": {
"isexe": "^4.0.0"
},
"bin": {
"node-which": "bin/which.js"
"proc-log": "^6.0.0"
},
"engines": {
"node": "^20.17.0 || >=22.9.0"
@@ -3574,14 +3547,14 @@
]
},
"node_modules/@schematics/angular": {
"version": "21.2.0-rc.2",
"resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-21.2.0-rc.2.tgz",
"integrity": "sha512-QzyPSwdkpcEN5iQ28sfb7tak8MukvGC6nzl1kgziWNYPyNaf+DIXEfspOnCME0ZwjI3pBpJnBvj+uMn8fx3YSw==",
"version": "21.2.0",
"resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-21.2.0.tgz",
"integrity": "sha512-GQUIeGzZwCT9/W5MAkKnkwETROPbA1eRmy3JF56jLmvr95tJnypGOG8jGYy0d+tcEVujIouh48r4J3bJQg5mrw==",
"dev": true,
"license": "MIT",
"dependencies": {
"@angular-devkit/core": "21.2.0-rc.2",
"@angular-devkit/schematics": "21.2.0-rc.2",
"@angular-devkit/core": "21.2.0",
"@angular-devkit/schematics": "21.2.0",
"jsonc-parser": "3.3.1"
},
"engines": {
@@ -3952,9 +3925,9 @@
"license": "ISC"
},
"node_modules/brace-expansion": {
"version": "5.0.3",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.3.tgz",
"integrity": "sha512-fy6KJm2RawA5RcHkLa1z/ScpBeA762UF9KmZQxwIbDtRJrgLzM10depAiEQ+CXYcoiqW1/m96OAAoke2nE9EeA==",
"version": "5.0.4",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.4.tgz",
"integrity": "sha512-h+DEnpVvxmfVefa4jFbCf5HdH5YMDXRsmKflpf1pILZWRFlTbJpxeU55nJl4Smt5HQaGzg1o6RHFPJaOqnmBDg==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -4080,9 +4053,9 @@
}
},
"node_modules/caniuse-lite": {
"version": "1.0.30001774",
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001774.tgz",
"integrity": "sha512-DDdwPGz99nmIEv216hKSgLD+D4ikHQHjBC/seF98N9CPqRX4M5mSxT9eTV6oyisnJcuzxtZy4n17yKKQYmYQOA==",
"version": "1.0.30001775",
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001775.tgz",
"integrity": "sha512-s3Qv7Lht9zbVKE9XoTyRG6wVDCKdtOFIjBGg3+Yhn6JaytuNKPIjBMTMIY1AnOH3seL5mvF+x33oGAyK3hVt3A==",
"dev": true,
"funding": [
{
@@ -4176,14 +4149,14 @@
}
},
"node_modules/cli-truncate": {
"version": "5.1.1",
"resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-5.1.1.tgz",
"integrity": "sha512-SroPvNHxUnk+vIW/dOSfNqdy1sPEFkrTk6TUtqLCnBlo3N7TNYYkzzN7uSD6+jVjrdO4+p8nH7JzH6cIvUem6A==",
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-5.2.0.tgz",
"integrity": "sha512-xRwvIOMGrfOAnM1JYtqQImuaNtDEv9v6oIYAs4LIHwTiKee8uwvIi363igssOC0O5U04i4AlENs79LQLu9tEMw==",
"dev": true,
"license": "MIT",
"dependencies": {
"slice-ansi": "^7.1.0",
"string-width": "^8.0.0"
"slice-ansi": "^8.0.0",
"string-width": "^8.2.0"
},
"engines": {
"node": ">=20"
@@ -5049,9 +5022,9 @@
}
},
"node_modules/hono": {
"version": "4.12.2",
"resolved": "https://registry.npmjs.org/hono/-/hono-4.12.2.tgz",
"integrity": "sha512-gJnaDHXKDayjt8ue0n8Gs0A007yKXj4Xzb8+cNjZeYsSzzwKc0Lr+OZgYwVfB0pHfUs17EPoLvrOsEaJ9mj+Tg==",
"version": "4.12.3",
"resolved": "https://registry.npmjs.org/hono/-/hono-4.12.3.tgz",
"integrity": "sha512-SFsVSjp8sj5UumXOOFlkZOG6XS9SJDKw0TbwFeV+AJ8xlST8kxK5Z/5EYa111UY8732lK2S/xB653ceuaoGwpg==",
"dev": true,
"license": "MIT",
"engines": {
@@ -5566,6 +5539,23 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/log-update/node_modules/slice-ansi": {
"version": "7.1.2",
"resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-7.1.2.tgz",
"integrity": "sha512-iOBWFgUX7caIZiuutICxVgX1SdxwAVFFKwt1EvMYYec/NWO5meOJ6K5uQxhrYBdQJne4KxiqZc+KptFOWFSI9w==",
"dev": true,
"license": "MIT",
"dependencies": {
"ansi-styles": "^6.2.1",
"is-fullwidth-code-point": "^5.0.0"
},
"engines": {
"node": ">=18"
},
"funding": {
"url": "https://github.com/chalk/slice-ansi?sponsor=1"
}
},
"node_modules/log-update/node_modules/string-width": {
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz",
@@ -5719,9 +5709,9 @@
}
},
"node_modules/minimatch": {
"version": "10.2.3",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.3.tgz",
"integrity": "sha512-Rwi3pnapEqirPSbWbrZaa6N3nmqq4Xer/2XooiOKyV3q12ML06f7MOuc5DVH8ONZIFhwIYQ3yzPH4nt7iWHaTg==",
"version": "10.2.4",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.4.tgz",
"integrity": "sha512-oRjTw/97aTBN0RHbYCdtF1MQfvusSIBQM0IZEgzl6426+8jSC0nF1a/GmnVLpfB9yyr6g6FTqWqiZVbxrtaCIg==",
"dev": true,
"license": "BlueOak-1.0.0",
"dependencies": {
@@ -6475,9 +6465,9 @@
}
},
"node_modules/postcss": {
"version": "8.5.6",
"resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz",
"integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==",
"version": "8.5.8",
"resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.8.tgz",
"integrity": "sha512-OW/rX8O/jXnm82Ey1k44pObPtdblfiuWnrd8X7GJ7emImCOstunGbXUpp7HdBrFQX6rJzn3sPT397Wp5aCwCHg==",
"dev": true,
"funding": [
{
@@ -7051,17 +7041,17 @@
}
},
"node_modules/slice-ansi": {
"version": "7.1.2",
"resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-7.1.2.tgz",
"integrity": "sha512-iOBWFgUX7caIZiuutICxVgX1SdxwAVFFKwt1EvMYYec/NWO5meOJ6K5uQxhrYBdQJne4KxiqZc+KptFOWFSI9w==",
"version": "8.0.0",
"resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-8.0.0.tgz",
"integrity": "sha512-stxByr12oeeOyY2BlviTNQlYV5xOj47GirPr4yA1hE9JCtxfQN0+tVbkxwCtYDQWhEKWFHsEK48ORg5jrouCAg==",
"dev": true,
"license": "MIT",
"dependencies": {
"ansi-styles": "^6.2.1",
"is-fullwidth-code-point": "^5.0.0"
"ansi-styles": "^6.2.3",
"is-fullwidth-code-point": "^5.1.0"
},
"engines": {
"node": ">=18"
"node": ">=20"
},
"funding": {
"url": "https://github.com/chalk/slice-ansi?sponsor=1"
@@ -7228,13 +7218,13 @@
}
},
"node_modules/strip-ansi": {
"version": "7.1.2",
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz",
"integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==",
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.2.0.tgz",
"integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==",
"dev": true,
"license": "MIT",
"dependencies": {
"ansi-regex": "^6.0.1"
"ansi-regex": "^6.2.2"
},
"engines": {
"node": ">=12"
+120 -130
View File
@@ -249,13 +249,13 @@
}
},
"node_modules/@angular-devkit/architect": {
"version": "0.2102.0-rc.2",
"resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.2102.0-rc.2.tgz",
"integrity": "sha512-IP2wGHDxBLgtWoxXFCFmKF5HsKMAXgGi2hj2SmcoR9q8HDKVPmyBUBT10sdCdSyiM8J3+3yHYDW4rOO22ya5Pw==",
"version": "0.2102.0",
"resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.2102.0.tgz",
"integrity": "sha512-kYFwTNzToG2SJMxj2f41w3QRtdqlrFuF+bpZrtIaHOP078Ktld8EPIp9KqB0Y46Vvs69ifby5Q1/wPD9wA3iaw==",
"dev": true,
"license": "MIT",
"dependencies": {
"@angular-devkit/core": "21.2.0-rc.2",
"@angular-devkit/core": "21.2.0",
"rxjs": "7.8.2"
},
"bin": {
@@ -268,9 +268,9 @@
}
},
"node_modules/@angular-devkit/core": {
"version": "21.2.0-rc.2",
"resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-21.2.0-rc.2.tgz",
"integrity": "sha512-4Y8qoXFY9gdF/WahgfPRWORJqmgdAPKkDGjmyMBqwNdL96vqyKq0/5TD8K5PsUXV+HWg6GClWTWhRyWVxJtoLQ==",
"version": "21.2.0",
"resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-21.2.0.tgz",
"integrity": "sha512-HZdTn46Ca6qbb9Zef8R/+TWsk6mNKRm4rJyL3PxHP6HnVCwSPNZ0LNN9BjVREBs+UlRdXqBGFBZh5D1nBgu5GQ==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -296,13 +296,13 @@
}
},
"node_modules/@angular-devkit/schematics": {
"version": "21.2.0-rc.2",
"resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-21.2.0-rc.2.tgz",
"integrity": "sha512-+vkSdeSRIAIMW5pQW8YCD0rrPCM6EpFFuHGSoJZtjXRGnNuJKYApNqLreO1daZvVTG6YokB5KkE+mnvp9rBEeg==",
"version": "21.2.0",
"resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-21.2.0.tgz",
"integrity": "sha512-3kn3FI5v7BQ7Zct6raek+WgvyDwOJ8wElbyC903GxMQCDBRGGcevhHvTAIHhknihEsrgplzPhTlWeMbk1JfdFg==",
"dev": true,
"license": "MIT",
"dependencies": {
"@angular-devkit/core": "21.2.0-rc.2",
"@angular-devkit/core": "21.2.0",
"jsonc-parser": "3.3.1",
"magic-string": "0.30.21",
"ora": "9.3.0",
@@ -315,14 +315,14 @@
}
},
"node_modules/@angular/build": {
"version": "21.2.0-rc.2",
"resolved": "https://registry.npmjs.org/@angular/build/-/build-21.2.0-rc.2.tgz",
"integrity": "sha512-1Hhr0w0uUBuMPEFjv9yXEHKahNHbw/NWt9uo1cf43ipFrrBKYHJj2DwwgyKKoEmtK/ap/l9yEZpL2oCfqCwEFQ==",
"version": "21.2.0",
"resolved": "https://registry.npmjs.org/@angular/build/-/build-21.2.0.tgz",
"integrity": "sha512-K0EqiHz2y7TSyD4adWD0+C/P9khKlrsSWavXWxGRvoSJC/H3I3SK5Z6BWwftBibXR1Fis7njwvl5IGAlQrDchA==",
"dev": true,
"license": "MIT",
"dependencies": {
"@ampproject/remapping": "2.3.0",
"@angular-devkit/architect": "0.2102.0-rc.2",
"@angular-devkit/architect": "0.2102.0",
"@babel/core": "7.29.0",
"@babel/helper-annotate-as-pure": "7.27.3",
"@babel/helper-split-export-declaration": "7.24.7",
@@ -358,17 +358,17 @@
"lmdb": "3.5.1"
},
"peerDependencies": {
"@angular/compiler": "^21.0.0 || ^21.2.0-next.0",
"@angular/compiler-cli": "^21.0.0 || ^21.2.0-next.0",
"@angular/core": "^21.0.0 || ^21.2.0-next.0",
"@angular/localize": "^21.0.0 || ^21.2.0-next.0",
"@angular/platform-browser": "^21.0.0 || ^21.2.0-next.0",
"@angular/platform-server": "^21.0.0 || ^21.2.0-next.0",
"@angular/service-worker": "^21.0.0 || ^21.2.0-next.0",
"@angular/ssr": "^21.2.0-rc.2",
"@angular/compiler": "^21.0.0",
"@angular/compiler-cli": "^21.0.0",
"@angular/core": "^21.0.0",
"@angular/localize": "^21.0.0",
"@angular/platform-browser": "^21.0.0",
"@angular/platform-server": "^21.0.0",
"@angular/service-worker": "^21.0.0",
"@angular/ssr": "^21.2.0",
"karma": "^6.4.0",
"less": "^4.2.0",
"ng-packagr": "^21.0.0 || ^21.2.0-next.0",
"ng-packagr": "^21.0.0",
"postcss": "^8.4.0",
"tailwindcss": "^2.0.0 || ^3.0.0 || ^4.0.0",
"tslib": "^2.3.0",
@@ -415,19 +415,19 @@
}
},
"node_modules/@angular/cli": {
"version": "21.2.0-rc.2",
"resolved": "https://registry.npmjs.org/@angular/cli/-/cli-21.2.0-rc.2.tgz",
"integrity": "sha512-rFuYlatMsYRqEi8FlvWqmTMU7x1iPFJpZUtAIYKo35C9kl0/Z5jhqqAv2Ws3LCX0lmVCzQ3TWRiFQp7T+2DWkw==",
"version": "21.2.0",
"resolved": "https://registry.npmjs.org/@angular/cli/-/cli-21.2.0.tgz",
"integrity": "sha512-yaGEpckqgOemcHkoWeH92i9eNrcbr9iE/dnxL+Du6s9spTAXJ2jjtYfszhmowuQZkCK5rjecMb8ctNtHlaGCjg==",
"dev": true,
"license": "MIT",
"dependencies": {
"@angular-devkit/architect": "0.2102.0-rc.2",
"@angular-devkit/core": "21.2.0-rc.2",
"@angular-devkit/schematics": "21.2.0-rc.2",
"@angular-devkit/architect": "0.2102.0",
"@angular-devkit/core": "21.2.0",
"@angular-devkit/schematics": "21.2.0",
"@inquirer/prompts": "7.10.1",
"@listr2/prompt-adapter-inquirer": "3.0.5",
"@modelcontextprotocol/sdk": "1.26.0",
"@schematics/angular": "21.2.0-rc.2",
"@schematics/angular": "21.2.0",
"@yarnpkg/lockfile": "1.1.0",
"algoliasearch": "5.48.1",
"ini": "6.0.0",
@@ -450,9 +450,9 @@
}
},
"node_modules/@angular/common": {
"version": "21.2.0-rc.0",
"resolved": "https://registry.npmjs.org/@angular/common/-/common-21.2.0-rc.0.tgz",
"integrity": "sha512-2O3cbBIM8ls97XwkYVdgJwEg3UOy/bVZ0uBoY14cLskhETj6wbrFENiy8KpikZ+xsTxE9gWohairxCRiEoFuKg==",
"version": "21.2.0",
"resolved": "https://registry.npmjs.org/@angular/common/-/common-21.2.0.tgz",
"integrity": "sha512-6zJMPi0i/XDniEgv3/t2BjuDHiOG44lgIR5PYyxqGpgJ0kqB5hku/0TuentNEi1VnBYgthnfhjek7c+lakXmhw==",
"license": "MIT",
"dependencies": {
"tslib": "^2.3.0"
@@ -461,14 +461,14 @@
"node": "^20.19.0 || ^22.12.0 || >=24.0.0"
},
"peerDependencies": {
"@angular/core": "21.2.0-rc.0",
"@angular/core": "21.2.0",
"rxjs": "^6.5.3 || ^7.4.0"
}
},
"node_modules/@angular/compiler": {
"version": "21.2.0-rc.0",
"resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-21.2.0-rc.0.tgz",
"integrity": "sha512-gl2dQgMFKkH/iM/YxqWO0oIbYRpBZpOZuxj9W5TjG50EpMDioD1CNu2DfXpODVo3/rOfZJvOa+Jw0Cxpj5ClMQ==",
"version": "21.2.0",
"resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-21.2.0.tgz",
"integrity": "sha512-0RPkma8UVNpse/VJcXT9w6SKzTMz4J/uMGj0l9enM1frg9xrx1fwi/lLmaVV9Nr9LfqPjQdxNFFlvaBB7g/2zg==",
"license": "MIT",
"dependencies": {
"tslib": "^2.3.0"
@@ -478,9 +478,9 @@
}
},
"node_modules/@angular/compiler-cli": {
"version": "21.2.0-rc.0",
"resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-21.2.0-rc.0.tgz",
"integrity": "sha512-lHPA5BzQq9ttHXCAnAC/zW5vW0lFiawBIvRpNRbsI8Vw1noMs614OqZ2R6UBReVPE4kpyGwh7HCQIZyX5Cth6g==",
"version": "21.2.0",
"resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-21.2.0.tgz",
"integrity": "sha512-gZd58p0/JjgdxMX3v+LjCB6e3dBIfNVr/YzXoh55TfffdBCUQY94hl1+DFQkJ72K5EX+1zbaz03dIm30kw1bGw==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -501,7 +501,7 @@
"node": "^20.19.0 || ^22.12.0 || >=24.0.0"
},
"peerDependencies": {
"@angular/compiler": "21.2.0-rc.0",
"@angular/compiler": "21.2.0",
"typescript": ">=5.9 <6.1"
},
"peerDependenciesMeta": {
@@ -511,9 +511,9 @@
}
},
"node_modules/@angular/core": {
"version": "21.2.0-rc.0",
"resolved": "https://registry.npmjs.org/@angular/core/-/core-21.2.0-rc.0.tgz",
"integrity": "sha512-Txdi6ocSNC8GbCYMGh2AUm1lx+J11LNRjNrfGcgxQhQAiEPVO8jGojfObM+rdjv1h8t0pCms5vzEmFiJ9z06hg==",
"version": "21.2.0",
"resolved": "https://registry.npmjs.org/@angular/core/-/core-21.2.0.tgz",
"integrity": "sha512-VnTbmZq3g3Q+s3nCZ8VUDMLjMezOg/bqUxAJ/DrRWCrEcTP5JO3mrNPs3FHj+qlB0T+BQP7uQv6QTzPVKybwoA==",
"license": "MIT",
"dependencies": {
"tslib": "^2.3.0"
@@ -522,7 +522,7 @@
"node": "^20.19.0 || ^22.12.0 || >=24.0.0"
},
"peerDependencies": {
"@angular/compiler": "21.2.0-rc.0",
"@angular/compiler": "21.2.0",
"rxjs": "^6.5.3 || ^7.4.0",
"zone.js": "~0.15.0 || ~0.16.0"
},
@@ -536,9 +536,9 @@
}
},
"node_modules/@angular/forms": {
"version": "21.2.0-rc.0",
"resolved": "https://registry.npmjs.org/@angular/forms/-/forms-21.2.0-rc.0.tgz",
"integrity": "sha512-GsX4c+GYUxcKla8yO/hpEzpliCsMslP+yIIk9l6831PkSf3uCyKHUHriJtOEca4uN5fNo23ix5NXo5VPkmldLQ==",
"version": "21.2.0",
"resolved": "https://registry.npmjs.org/@angular/forms/-/forms-21.2.0.tgz",
"integrity": "sha512-NduUtPWLauH/FLayEDkLyaKAGqKzXbcfO7468LOWCXN3crhNVQyIWRQPOUcdpoJwDAGLpN85m3DhJhXNnA9c5w==",
"license": "MIT",
"dependencies": {
"@standard-schema/spec": "^1.0.0",
@@ -548,16 +548,16 @@
"node": "^20.19.0 || ^22.12.0 || >=24.0.0"
},
"peerDependencies": {
"@angular/common": "21.2.0-rc.0",
"@angular/core": "21.2.0-rc.0",
"@angular/platform-browser": "21.2.0-rc.0",
"@angular/common": "21.2.0",
"@angular/core": "21.2.0",
"@angular/platform-browser": "21.2.0",
"rxjs": "^6.5.3 || ^7.4.0"
}
},
"node_modules/@angular/platform-browser": {
"version": "21.2.0-rc.0",
"resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-21.2.0-rc.0.tgz",
"integrity": "sha512-FCNRhzkf35l6B18gzaT6GDdTJ3v4AiLOSXc5RdiQ2PMn2dLOkm70SH0caXQGzvtXAzHrHlR+Evj/ZqaFYvjcYg==",
"version": "21.2.0",
"resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-21.2.0.tgz",
"integrity": "sha512-IUGukpvvT2B5Dl76qzk6rY7UIHUT9u4BhT2AwVz+5JqcX9KwQtYD17Gt7wj6bvIgCXKWG+CfN8Zd9DECOCYWjg==",
"license": "MIT",
"dependencies": {
"tslib": "^2.3.0"
@@ -566,9 +566,9 @@
"node": "^20.19.0 || ^22.12.0 || >=24.0.0"
},
"peerDependencies": {
"@angular/animations": "21.2.0-rc.0",
"@angular/common": "21.2.0-rc.0",
"@angular/core": "21.2.0-rc.0"
"@angular/animations": "21.2.0",
"@angular/common": "21.2.0",
"@angular/core": "21.2.0"
},
"peerDependenciesMeta": {
"@angular/animations": {
@@ -577,9 +577,9 @@
}
},
"node_modules/@angular/router": {
"version": "21.2.0-rc.0",
"resolved": "https://registry.npmjs.org/@angular/router/-/router-21.2.0-rc.0.tgz",
"integrity": "sha512-KZmZCdm4H+w3UC1vorQ/Nj4FEHY4sgRkwp+zf4E4WFV+sflyFzqFxzVIKGJ1xTzjaDebCRmipJnc3DZ09fv1fg==",
"version": "21.2.0",
"resolved": "https://registry.npmjs.org/@angular/router/-/router-21.2.0.tgz",
"integrity": "sha512-siliJ+jJRUCRZ0cdkqc7zww9Didz56Z0Z2YPIuR2n5TZLiuJY+jAf6xotXKp/v6v8XoGJwLiRNipGgNDRIAlWA==",
"license": "MIT",
"dependencies": {
"tslib": "^2.3.0"
@@ -588,9 +588,9 @@
"node": "^20.19.0 || ^22.12.0 || >=24.0.0"
},
"peerDependencies": {
"@angular/common": "21.2.0-rc.0",
"@angular/core": "21.2.0-rc.0",
"@angular/platform-browser": "21.2.0-rc.0",
"@angular/common": "21.2.0",
"@angular/core": "21.2.0",
"@angular/platform-browser": "21.2.0",
"rxjs": "^6.5.3 || ^7.4.0"
}
},
@@ -2592,9 +2592,9 @@
}
},
"node_modules/@npmcli/run-script": {
"version": "10.0.3",
"resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-10.0.3.tgz",
"integrity": "sha512-ER2N6itRkzWbbtVmZ9WKaWxVlKlOeBFF1/7xx+KA5J1xKa4JjUwBdb6tDpk0v1qA+d+VDwHI9qmLcXSWcmi+Rw==",
"version": "10.0.4",
"resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-10.0.4.tgz",
"integrity": "sha512-mGUWr1uMnf0le2TwfOZY4SFxZGXGfm4Jtay/nwAa2FLNAKXUoUwaGwBMNH36UHPtinWfTSJ3nqFQr0091CxVGg==",
"dev": true,
"license": "ISC",
"dependencies": {
@@ -2602,34 +2602,7 @@
"@npmcli/package-json": "^7.0.0",
"@npmcli/promise-spawn": "^9.0.0",
"node-gyp": "^12.1.0",
"proc-log": "^6.0.0",
"which": "^6.0.0"
},
"engines": {
"node": "^20.17.0 || >=22.9.0"
}
},
"node_modules/@npmcli/run-script/node_modules/isexe": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/isexe/-/isexe-4.0.0.tgz",
"integrity": "sha512-FFUtZMpoZ8RqHS3XeXEmHWLA4thH+ZxCv2lOiPIn1Xc7CxrqhWzNSDzD+/chS/zbYezmiwWLdQC09JdQKmthOw==",
"dev": true,
"license": "BlueOak-1.0.0",
"engines": {
"node": ">=20"
}
},
"node_modules/@npmcli/run-script/node_modules/which": {
"version": "6.0.1",
"resolved": "https://registry.npmjs.org/which/-/which-6.0.1.tgz",
"integrity": "sha512-oGLe46MIrCRqX7ytPUf66EAYvdeMIZYn3WaocqqKZAxrBpkqHfL/qvTyJ/bTk5+AqHCjXmrv3CEWgy368zhRUg==",
"dev": true,
"license": "ISC",
"dependencies": {
"isexe": "^4.0.0"
},
"bin": {
"node-which": "bin/which.js"
"proc-log": "^6.0.0"
},
"engines": {
"node": "^20.17.0 || >=22.9.0"
@@ -3542,14 +3515,14 @@
]
},
"node_modules/@schematics/angular": {
"version": "21.2.0-rc.2",
"resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-21.2.0-rc.2.tgz",
"integrity": "sha512-QzyPSwdkpcEN5iQ28sfb7tak8MukvGC6nzl1kgziWNYPyNaf+DIXEfspOnCME0ZwjI3pBpJnBvj+uMn8fx3YSw==",
"version": "21.2.0",
"resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-21.2.0.tgz",
"integrity": "sha512-GQUIeGzZwCT9/W5MAkKnkwETROPbA1eRmy3JF56jLmvr95tJnypGOG8jGYy0d+tcEVujIouh48r4J3bJQg5mrw==",
"dev": true,
"license": "MIT",
"dependencies": {
"@angular-devkit/core": "21.2.0-rc.2",
"@angular-devkit/schematics": "21.2.0-rc.2",
"@angular-devkit/core": "21.2.0",
"@angular-devkit/schematics": "21.2.0",
"jsonc-parser": "3.3.1"
},
"engines": {
@@ -3920,9 +3893,9 @@
"license": "ISC"
},
"node_modules/brace-expansion": {
"version": "5.0.3",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.3.tgz",
"integrity": "sha512-fy6KJm2RawA5RcHkLa1z/ScpBeA762UF9KmZQxwIbDtRJrgLzM10depAiEQ+CXYcoiqW1/m96OAAoke2nE9EeA==",
"version": "5.0.4",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.4.tgz",
"integrity": "sha512-h+DEnpVvxmfVefa4jFbCf5HdH5YMDXRsmKflpf1pILZWRFlTbJpxeU55nJl4Smt5HQaGzg1o6RHFPJaOqnmBDg==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -4048,9 +4021,9 @@
}
},
"node_modules/caniuse-lite": {
"version": "1.0.30001774",
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001774.tgz",
"integrity": "sha512-DDdwPGz99nmIEv216hKSgLD+D4ikHQHjBC/seF98N9CPqRX4M5mSxT9eTV6oyisnJcuzxtZy4n17yKKQYmYQOA==",
"version": "1.0.30001775",
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001775.tgz",
"integrity": "sha512-s3Qv7Lht9zbVKE9XoTyRG6wVDCKdtOFIjBGg3+Yhn6JaytuNKPIjBMTMIY1AnOH3seL5mvF+x33oGAyK3hVt3A==",
"dev": true,
"funding": [
{
@@ -4144,14 +4117,14 @@
}
},
"node_modules/cli-truncate": {
"version": "5.1.1",
"resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-5.1.1.tgz",
"integrity": "sha512-SroPvNHxUnk+vIW/dOSfNqdy1sPEFkrTk6TUtqLCnBlo3N7TNYYkzzN7uSD6+jVjrdO4+p8nH7JzH6cIvUem6A==",
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-5.2.0.tgz",
"integrity": "sha512-xRwvIOMGrfOAnM1JYtqQImuaNtDEv9v6oIYAs4LIHwTiKee8uwvIi363igssOC0O5U04i4AlENs79LQLu9tEMw==",
"dev": true,
"license": "MIT",
"dependencies": {
"slice-ansi": "^7.1.0",
"string-width": "^8.0.0"
"slice-ansi": "^8.0.0",
"string-width": "^8.2.0"
},
"engines": {
"node": ">=20"
@@ -5017,9 +4990,9 @@
}
},
"node_modules/hono": {
"version": "4.12.2",
"resolved": "https://registry.npmjs.org/hono/-/hono-4.12.2.tgz",
"integrity": "sha512-gJnaDHXKDayjt8ue0n8Gs0A007yKXj4Xzb8+cNjZeYsSzzwKc0Lr+OZgYwVfB0pHfUs17EPoLvrOsEaJ9mj+Tg==",
"version": "4.12.3",
"resolved": "https://registry.npmjs.org/hono/-/hono-4.12.3.tgz",
"integrity": "sha512-SFsVSjp8sj5UumXOOFlkZOG6XS9SJDKw0TbwFeV+AJ8xlST8kxK5Z/5EYa111UY8732lK2S/xB653ceuaoGwpg==",
"dev": true,
"license": "MIT",
"engines": {
@@ -5534,6 +5507,23 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/log-update/node_modules/slice-ansi": {
"version": "7.1.2",
"resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-7.1.2.tgz",
"integrity": "sha512-iOBWFgUX7caIZiuutICxVgX1SdxwAVFFKwt1EvMYYec/NWO5meOJ6K5uQxhrYBdQJne4KxiqZc+KptFOWFSI9w==",
"dev": true,
"license": "MIT",
"dependencies": {
"ansi-styles": "^6.2.1",
"is-fullwidth-code-point": "^5.0.0"
},
"engines": {
"node": ">=18"
},
"funding": {
"url": "https://github.com/chalk/slice-ansi?sponsor=1"
}
},
"node_modules/log-update/node_modules/string-width": {
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz",
@@ -5687,9 +5677,9 @@
}
},
"node_modules/minimatch": {
"version": "10.2.3",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.3.tgz",
"integrity": "sha512-Rwi3pnapEqirPSbWbrZaa6N3nmqq4Xer/2XooiOKyV3q12ML06f7MOuc5DVH8ONZIFhwIYQ3yzPH4nt7iWHaTg==",
"version": "10.2.4",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.4.tgz",
"integrity": "sha512-oRjTw/97aTBN0RHbYCdtF1MQfvusSIBQM0IZEgzl6426+8jSC0nF1a/GmnVLpfB9yyr6g6FTqWqiZVbxrtaCIg==",
"dev": true,
"license": "BlueOak-1.0.0",
"dependencies": {
@@ -6445,9 +6435,9 @@
}
},
"node_modules/postcss": {
"version": "8.5.6",
"resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz",
"integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==",
"version": "8.5.8",
"resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.8.tgz",
"integrity": "sha512-OW/rX8O/jXnm82Ey1k44pObPtdblfiuWnrd8X7GJ7emImCOstunGbXUpp7HdBrFQX6rJzn3sPT397Wp5aCwCHg==",
"dev": true,
"funding": [
{
@@ -7021,17 +7011,17 @@
}
},
"node_modules/slice-ansi": {
"version": "7.1.2",
"resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-7.1.2.tgz",
"integrity": "sha512-iOBWFgUX7caIZiuutICxVgX1SdxwAVFFKwt1EvMYYec/NWO5meOJ6K5uQxhrYBdQJne4KxiqZc+KptFOWFSI9w==",
"version": "8.0.0",
"resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-8.0.0.tgz",
"integrity": "sha512-stxByr12oeeOyY2BlviTNQlYV5xOj47GirPr4yA1hE9JCtxfQN0+tVbkxwCtYDQWhEKWFHsEK48ORg5jrouCAg==",
"dev": true,
"license": "MIT",
"dependencies": {
"ansi-styles": "^6.2.1",
"is-fullwidth-code-point": "^5.0.0"
"ansi-styles": "^6.2.3",
"is-fullwidth-code-point": "^5.1.0"
},
"engines": {
"node": ">=18"
"node": ">=20"
},
"funding": {
"url": "https://github.com/chalk/slice-ansi?sponsor=1"
@@ -7198,13 +7188,13 @@
}
},
"node_modules/strip-ansi": {
"version": "7.1.2",
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz",
"integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==",
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.2.0.tgz",
"integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==",
"dev": true,
"license": "MIT",
"dependencies": {
"ansi-regex": "^6.0.1"
"ansi-regex": "^6.2.2"
},
"engines": {
"node": ">=12"
+120 -130
View File
@@ -249,13 +249,13 @@
}
},
"node_modules/@angular-devkit/architect": {
"version": "0.2102.0-rc.2",
"resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.2102.0-rc.2.tgz",
"integrity": "sha512-IP2wGHDxBLgtWoxXFCFmKF5HsKMAXgGi2hj2SmcoR9q8HDKVPmyBUBT10sdCdSyiM8J3+3yHYDW4rOO22ya5Pw==",
"version": "0.2102.0",
"resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.2102.0.tgz",
"integrity": "sha512-kYFwTNzToG2SJMxj2f41w3QRtdqlrFuF+bpZrtIaHOP078Ktld8EPIp9KqB0Y46Vvs69ifby5Q1/wPD9wA3iaw==",
"dev": true,
"license": "MIT",
"dependencies": {
"@angular-devkit/core": "21.2.0-rc.2",
"@angular-devkit/core": "21.2.0",
"rxjs": "7.8.2"
},
"bin": {
@@ -268,9 +268,9 @@
}
},
"node_modules/@angular-devkit/core": {
"version": "21.2.0-rc.2",
"resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-21.2.0-rc.2.tgz",
"integrity": "sha512-4Y8qoXFY9gdF/WahgfPRWORJqmgdAPKkDGjmyMBqwNdL96vqyKq0/5TD8K5PsUXV+HWg6GClWTWhRyWVxJtoLQ==",
"version": "21.2.0",
"resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-21.2.0.tgz",
"integrity": "sha512-HZdTn46Ca6qbb9Zef8R/+TWsk6mNKRm4rJyL3PxHP6HnVCwSPNZ0LNN9BjVREBs+UlRdXqBGFBZh5D1nBgu5GQ==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -296,13 +296,13 @@
}
},
"node_modules/@angular-devkit/schematics": {
"version": "21.2.0-rc.2",
"resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-21.2.0-rc.2.tgz",
"integrity": "sha512-+vkSdeSRIAIMW5pQW8YCD0rrPCM6EpFFuHGSoJZtjXRGnNuJKYApNqLreO1daZvVTG6YokB5KkE+mnvp9rBEeg==",
"version": "21.2.0",
"resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-21.2.0.tgz",
"integrity": "sha512-3kn3FI5v7BQ7Zct6raek+WgvyDwOJ8wElbyC903GxMQCDBRGGcevhHvTAIHhknihEsrgplzPhTlWeMbk1JfdFg==",
"dev": true,
"license": "MIT",
"dependencies": {
"@angular-devkit/core": "21.2.0-rc.2",
"@angular-devkit/core": "21.2.0",
"jsonc-parser": "3.3.1",
"magic-string": "0.30.21",
"ora": "9.3.0",
@@ -315,14 +315,14 @@
}
},
"node_modules/@angular/build": {
"version": "21.2.0-rc.2",
"resolved": "https://registry.npmjs.org/@angular/build/-/build-21.2.0-rc.2.tgz",
"integrity": "sha512-1Hhr0w0uUBuMPEFjv9yXEHKahNHbw/NWt9uo1cf43ipFrrBKYHJj2DwwgyKKoEmtK/ap/l9yEZpL2oCfqCwEFQ==",
"version": "21.2.0",
"resolved": "https://registry.npmjs.org/@angular/build/-/build-21.2.0.tgz",
"integrity": "sha512-K0EqiHz2y7TSyD4adWD0+C/P9khKlrsSWavXWxGRvoSJC/H3I3SK5Z6BWwftBibXR1Fis7njwvl5IGAlQrDchA==",
"dev": true,
"license": "MIT",
"dependencies": {
"@ampproject/remapping": "2.3.0",
"@angular-devkit/architect": "0.2102.0-rc.2",
"@angular-devkit/architect": "0.2102.0",
"@babel/core": "7.29.0",
"@babel/helper-annotate-as-pure": "7.27.3",
"@babel/helper-split-export-declaration": "7.24.7",
@@ -358,17 +358,17 @@
"lmdb": "3.5.1"
},
"peerDependencies": {
"@angular/compiler": "^21.0.0 || ^21.2.0-next.0",
"@angular/compiler-cli": "^21.0.0 || ^21.2.0-next.0",
"@angular/core": "^21.0.0 || ^21.2.0-next.0",
"@angular/localize": "^21.0.0 || ^21.2.0-next.0",
"@angular/platform-browser": "^21.0.0 || ^21.2.0-next.0",
"@angular/platform-server": "^21.0.0 || ^21.2.0-next.0",
"@angular/service-worker": "^21.0.0 || ^21.2.0-next.0",
"@angular/ssr": "^21.2.0-rc.2",
"@angular/compiler": "^21.0.0",
"@angular/compiler-cli": "^21.0.0",
"@angular/core": "^21.0.0",
"@angular/localize": "^21.0.0",
"@angular/platform-browser": "^21.0.0",
"@angular/platform-server": "^21.0.0",
"@angular/service-worker": "^21.0.0",
"@angular/ssr": "^21.2.0",
"karma": "^6.4.0",
"less": "^4.2.0",
"ng-packagr": "^21.0.0 || ^21.2.0-next.0",
"ng-packagr": "^21.0.0",
"postcss": "^8.4.0",
"tailwindcss": "^2.0.0 || ^3.0.0 || ^4.0.0",
"tslib": "^2.3.0",
@@ -415,19 +415,19 @@
}
},
"node_modules/@angular/cli": {
"version": "21.2.0-rc.2",
"resolved": "https://registry.npmjs.org/@angular/cli/-/cli-21.2.0-rc.2.tgz",
"integrity": "sha512-rFuYlatMsYRqEi8FlvWqmTMU7x1iPFJpZUtAIYKo35C9kl0/Z5jhqqAv2Ws3LCX0lmVCzQ3TWRiFQp7T+2DWkw==",
"version": "21.2.0",
"resolved": "https://registry.npmjs.org/@angular/cli/-/cli-21.2.0.tgz",
"integrity": "sha512-yaGEpckqgOemcHkoWeH92i9eNrcbr9iE/dnxL+Du6s9spTAXJ2jjtYfszhmowuQZkCK5rjecMb8ctNtHlaGCjg==",
"dev": true,
"license": "MIT",
"dependencies": {
"@angular-devkit/architect": "0.2102.0-rc.2",
"@angular-devkit/core": "21.2.0-rc.2",
"@angular-devkit/schematics": "21.2.0-rc.2",
"@angular-devkit/architect": "0.2102.0",
"@angular-devkit/core": "21.2.0",
"@angular-devkit/schematics": "21.2.0",
"@inquirer/prompts": "7.10.1",
"@listr2/prompt-adapter-inquirer": "3.0.5",
"@modelcontextprotocol/sdk": "1.26.0",
"@schematics/angular": "21.2.0-rc.2",
"@schematics/angular": "21.2.0",
"@yarnpkg/lockfile": "1.1.0",
"algoliasearch": "5.48.1",
"ini": "6.0.0",
@@ -450,9 +450,9 @@
}
},
"node_modules/@angular/common": {
"version": "21.2.0-rc.0",
"resolved": "https://registry.npmjs.org/@angular/common/-/common-21.2.0-rc.0.tgz",
"integrity": "sha512-2O3cbBIM8ls97XwkYVdgJwEg3UOy/bVZ0uBoY14cLskhETj6wbrFENiy8KpikZ+xsTxE9gWohairxCRiEoFuKg==",
"version": "21.2.0",
"resolved": "https://registry.npmjs.org/@angular/common/-/common-21.2.0.tgz",
"integrity": "sha512-6zJMPi0i/XDniEgv3/t2BjuDHiOG44lgIR5PYyxqGpgJ0kqB5hku/0TuentNEi1VnBYgthnfhjek7c+lakXmhw==",
"license": "MIT",
"dependencies": {
"tslib": "^2.3.0"
@@ -461,14 +461,14 @@
"node": "^20.19.0 || ^22.12.0 || >=24.0.0"
},
"peerDependencies": {
"@angular/core": "21.2.0-rc.0",
"@angular/core": "21.2.0",
"rxjs": "^6.5.3 || ^7.4.0"
}
},
"node_modules/@angular/compiler": {
"version": "21.2.0-rc.0",
"resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-21.2.0-rc.0.tgz",
"integrity": "sha512-gl2dQgMFKkH/iM/YxqWO0oIbYRpBZpOZuxj9W5TjG50EpMDioD1CNu2DfXpODVo3/rOfZJvOa+Jw0Cxpj5ClMQ==",
"version": "21.2.0",
"resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-21.2.0.tgz",
"integrity": "sha512-0RPkma8UVNpse/VJcXT9w6SKzTMz4J/uMGj0l9enM1frg9xrx1fwi/lLmaVV9Nr9LfqPjQdxNFFlvaBB7g/2zg==",
"license": "MIT",
"dependencies": {
"tslib": "^2.3.0"
@@ -478,9 +478,9 @@
}
},
"node_modules/@angular/compiler-cli": {
"version": "21.2.0-rc.0",
"resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-21.2.0-rc.0.tgz",
"integrity": "sha512-lHPA5BzQq9ttHXCAnAC/zW5vW0lFiawBIvRpNRbsI8Vw1noMs614OqZ2R6UBReVPE4kpyGwh7HCQIZyX5Cth6g==",
"version": "21.2.0",
"resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-21.2.0.tgz",
"integrity": "sha512-gZd58p0/JjgdxMX3v+LjCB6e3dBIfNVr/YzXoh55TfffdBCUQY94hl1+DFQkJ72K5EX+1zbaz03dIm30kw1bGw==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -501,7 +501,7 @@
"node": "^20.19.0 || ^22.12.0 || >=24.0.0"
},
"peerDependencies": {
"@angular/compiler": "21.2.0-rc.0",
"@angular/compiler": "21.2.0",
"typescript": ">=5.9 <6.1"
},
"peerDependenciesMeta": {
@@ -511,9 +511,9 @@
}
},
"node_modules/@angular/core": {
"version": "21.2.0-rc.0",
"resolved": "https://registry.npmjs.org/@angular/core/-/core-21.2.0-rc.0.tgz",
"integrity": "sha512-Txdi6ocSNC8GbCYMGh2AUm1lx+J11LNRjNrfGcgxQhQAiEPVO8jGojfObM+rdjv1h8t0pCms5vzEmFiJ9z06hg==",
"version": "21.2.0",
"resolved": "https://registry.npmjs.org/@angular/core/-/core-21.2.0.tgz",
"integrity": "sha512-VnTbmZq3g3Q+s3nCZ8VUDMLjMezOg/bqUxAJ/DrRWCrEcTP5JO3mrNPs3FHj+qlB0T+BQP7uQv6QTzPVKybwoA==",
"license": "MIT",
"dependencies": {
"tslib": "^2.3.0"
@@ -522,7 +522,7 @@
"node": "^20.19.0 || ^22.12.0 || >=24.0.0"
},
"peerDependencies": {
"@angular/compiler": "21.2.0-rc.0",
"@angular/compiler": "21.2.0",
"rxjs": "^6.5.3 || ^7.4.0",
"zone.js": "~0.15.0 || ~0.16.0"
},
@@ -536,9 +536,9 @@
}
},
"node_modules/@angular/forms": {
"version": "21.2.0-rc.0",
"resolved": "https://registry.npmjs.org/@angular/forms/-/forms-21.2.0-rc.0.tgz",
"integrity": "sha512-GsX4c+GYUxcKla8yO/hpEzpliCsMslP+yIIk9l6831PkSf3uCyKHUHriJtOEca4uN5fNo23ix5NXo5VPkmldLQ==",
"version": "21.2.0",
"resolved": "https://registry.npmjs.org/@angular/forms/-/forms-21.2.0.tgz",
"integrity": "sha512-NduUtPWLauH/FLayEDkLyaKAGqKzXbcfO7468LOWCXN3crhNVQyIWRQPOUcdpoJwDAGLpN85m3DhJhXNnA9c5w==",
"license": "MIT",
"dependencies": {
"@standard-schema/spec": "^1.0.0",
@@ -548,16 +548,16 @@
"node": "^20.19.0 || ^22.12.0 || >=24.0.0"
},
"peerDependencies": {
"@angular/common": "21.2.0-rc.0",
"@angular/core": "21.2.0-rc.0",
"@angular/platform-browser": "21.2.0-rc.0",
"@angular/common": "21.2.0",
"@angular/core": "21.2.0",
"@angular/platform-browser": "21.2.0",
"rxjs": "^6.5.3 || ^7.4.0"
}
},
"node_modules/@angular/platform-browser": {
"version": "21.2.0-rc.0",
"resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-21.2.0-rc.0.tgz",
"integrity": "sha512-FCNRhzkf35l6B18gzaT6GDdTJ3v4AiLOSXc5RdiQ2PMn2dLOkm70SH0caXQGzvtXAzHrHlR+Evj/ZqaFYvjcYg==",
"version": "21.2.0",
"resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-21.2.0.tgz",
"integrity": "sha512-IUGukpvvT2B5Dl76qzk6rY7UIHUT9u4BhT2AwVz+5JqcX9KwQtYD17Gt7wj6bvIgCXKWG+CfN8Zd9DECOCYWjg==",
"license": "MIT",
"dependencies": {
"tslib": "^2.3.0"
@@ -566,9 +566,9 @@
"node": "^20.19.0 || ^22.12.0 || >=24.0.0"
},
"peerDependencies": {
"@angular/animations": "21.2.0-rc.0",
"@angular/common": "21.2.0-rc.0",
"@angular/core": "21.2.0-rc.0"
"@angular/animations": "21.2.0",
"@angular/common": "21.2.0",
"@angular/core": "21.2.0"
},
"peerDependenciesMeta": {
"@angular/animations": {
@@ -577,9 +577,9 @@
}
},
"node_modules/@angular/router": {
"version": "21.2.0-rc.0",
"resolved": "https://registry.npmjs.org/@angular/router/-/router-21.2.0-rc.0.tgz",
"integrity": "sha512-KZmZCdm4H+w3UC1vorQ/Nj4FEHY4sgRkwp+zf4E4WFV+sflyFzqFxzVIKGJ1xTzjaDebCRmipJnc3DZ09fv1fg==",
"version": "21.2.0",
"resolved": "https://registry.npmjs.org/@angular/router/-/router-21.2.0.tgz",
"integrity": "sha512-siliJ+jJRUCRZ0cdkqc7zww9Didz56Z0Z2YPIuR2n5TZLiuJY+jAf6xotXKp/v6v8XoGJwLiRNipGgNDRIAlWA==",
"license": "MIT",
"dependencies": {
"tslib": "^2.3.0"
@@ -588,9 +588,9 @@
"node": "^20.19.0 || ^22.12.0 || >=24.0.0"
},
"peerDependencies": {
"@angular/common": "21.2.0-rc.0",
"@angular/core": "21.2.0-rc.0",
"@angular/platform-browser": "21.2.0-rc.0",
"@angular/common": "21.2.0",
"@angular/core": "21.2.0",
"@angular/platform-browser": "21.2.0",
"rxjs": "^6.5.3 || ^7.4.0"
}
},
@@ -2592,9 +2592,9 @@
}
},
"node_modules/@npmcli/run-script": {
"version": "10.0.3",
"resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-10.0.3.tgz",
"integrity": "sha512-ER2N6itRkzWbbtVmZ9WKaWxVlKlOeBFF1/7xx+KA5J1xKa4JjUwBdb6tDpk0v1qA+d+VDwHI9qmLcXSWcmi+Rw==",
"version": "10.0.4",
"resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-10.0.4.tgz",
"integrity": "sha512-mGUWr1uMnf0le2TwfOZY4SFxZGXGfm4Jtay/nwAa2FLNAKXUoUwaGwBMNH36UHPtinWfTSJ3nqFQr0091CxVGg==",
"dev": true,
"license": "ISC",
"dependencies": {
@@ -2602,34 +2602,7 @@
"@npmcli/package-json": "^7.0.0",
"@npmcli/promise-spawn": "^9.0.0",
"node-gyp": "^12.1.0",
"proc-log": "^6.0.0",
"which": "^6.0.0"
},
"engines": {
"node": "^20.17.0 || >=22.9.0"
}
},
"node_modules/@npmcli/run-script/node_modules/isexe": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/isexe/-/isexe-4.0.0.tgz",
"integrity": "sha512-FFUtZMpoZ8RqHS3XeXEmHWLA4thH+ZxCv2lOiPIn1Xc7CxrqhWzNSDzD+/chS/zbYezmiwWLdQC09JdQKmthOw==",
"dev": true,
"license": "BlueOak-1.0.0",
"engines": {
"node": ">=20"
}
},
"node_modules/@npmcli/run-script/node_modules/which": {
"version": "6.0.1",
"resolved": "https://registry.npmjs.org/which/-/which-6.0.1.tgz",
"integrity": "sha512-oGLe46MIrCRqX7ytPUf66EAYvdeMIZYn3WaocqqKZAxrBpkqHfL/qvTyJ/bTk5+AqHCjXmrv3CEWgy368zhRUg==",
"dev": true,
"license": "ISC",
"dependencies": {
"isexe": "^4.0.0"
},
"bin": {
"node-which": "bin/which.js"
"proc-log": "^6.0.0"
},
"engines": {
"node": "^20.17.0 || >=22.9.0"
@@ -3542,14 +3515,14 @@
]
},
"node_modules/@schematics/angular": {
"version": "21.2.0-rc.2",
"resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-21.2.0-rc.2.tgz",
"integrity": "sha512-QzyPSwdkpcEN5iQ28sfb7tak8MukvGC6nzl1kgziWNYPyNaf+DIXEfspOnCME0ZwjI3pBpJnBvj+uMn8fx3YSw==",
"version": "21.2.0",
"resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-21.2.0.tgz",
"integrity": "sha512-GQUIeGzZwCT9/W5MAkKnkwETROPbA1eRmy3JF56jLmvr95tJnypGOG8jGYy0d+tcEVujIouh48r4J3bJQg5mrw==",
"dev": true,
"license": "MIT",
"dependencies": {
"@angular-devkit/core": "21.2.0-rc.2",
"@angular-devkit/schematics": "21.2.0-rc.2",
"@angular-devkit/core": "21.2.0",
"@angular-devkit/schematics": "21.2.0",
"jsonc-parser": "3.3.1"
},
"engines": {
@@ -3920,9 +3893,9 @@
"license": "ISC"
},
"node_modules/brace-expansion": {
"version": "5.0.3",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.3.tgz",
"integrity": "sha512-fy6KJm2RawA5RcHkLa1z/ScpBeA762UF9KmZQxwIbDtRJrgLzM10depAiEQ+CXYcoiqW1/m96OAAoke2nE9EeA==",
"version": "5.0.4",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.4.tgz",
"integrity": "sha512-h+DEnpVvxmfVefa4jFbCf5HdH5YMDXRsmKflpf1pILZWRFlTbJpxeU55nJl4Smt5HQaGzg1o6RHFPJaOqnmBDg==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -4048,9 +4021,9 @@
}
},
"node_modules/caniuse-lite": {
"version": "1.0.30001774",
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001774.tgz",
"integrity": "sha512-DDdwPGz99nmIEv216hKSgLD+D4ikHQHjBC/seF98N9CPqRX4M5mSxT9eTV6oyisnJcuzxtZy4n17yKKQYmYQOA==",
"version": "1.0.30001775",
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001775.tgz",
"integrity": "sha512-s3Qv7Lht9zbVKE9XoTyRG6wVDCKdtOFIjBGg3+Yhn6JaytuNKPIjBMTMIY1AnOH3seL5mvF+x33oGAyK3hVt3A==",
"dev": true,
"funding": [
{
@@ -4144,14 +4117,14 @@
}
},
"node_modules/cli-truncate": {
"version": "5.1.1",
"resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-5.1.1.tgz",
"integrity": "sha512-SroPvNHxUnk+vIW/dOSfNqdy1sPEFkrTk6TUtqLCnBlo3N7TNYYkzzN7uSD6+jVjrdO4+p8nH7JzH6cIvUem6A==",
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-5.2.0.tgz",
"integrity": "sha512-xRwvIOMGrfOAnM1JYtqQImuaNtDEv9v6oIYAs4LIHwTiKee8uwvIi363igssOC0O5U04i4AlENs79LQLu9tEMw==",
"dev": true,
"license": "MIT",
"dependencies": {
"slice-ansi": "^7.1.0",
"string-width": "^8.0.0"
"slice-ansi": "^8.0.0",
"string-width": "^8.2.0"
},
"engines": {
"node": ">=20"
@@ -5017,9 +4990,9 @@
}
},
"node_modules/hono": {
"version": "4.12.2",
"resolved": "https://registry.npmjs.org/hono/-/hono-4.12.2.tgz",
"integrity": "sha512-gJnaDHXKDayjt8ue0n8Gs0A007yKXj4Xzb8+cNjZeYsSzzwKc0Lr+OZgYwVfB0pHfUs17EPoLvrOsEaJ9mj+Tg==",
"version": "4.12.3",
"resolved": "https://registry.npmjs.org/hono/-/hono-4.12.3.tgz",
"integrity": "sha512-SFsVSjp8sj5UumXOOFlkZOG6XS9SJDKw0TbwFeV+AJ8xlST8kxK5Z/5EYa111UY8732lK2S/xB653ceuaoGwpg==",
"dev": true,
"license": "MIT",
"engines": {
@@ -5534,6 +5507,23 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/log-update/node_modules/slice-ansi": {
"version": "7.1.2",
"resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-7.1.2.tgz",
"integrity": "sha512-iOBWFgUX7caIZiuutICxVgX1SdxwAVFFKwt1EvMYYec/NWO5meOJ6K5uQxhrYBdQJne4KxiqZc+KptFOWFSI9w==",
"dev": true,
"license": "MIT",
"dependencies": {
"ansi-styles": "^6.2.1",
"is-fullwidth-code-point": "^5.0.0"
},
"engines": {
"node": ">=18"
},
"funding": {
"url": "https://github.com/chalk/slice-ansi?sponsor=1"
}
},
"node_modules/log-update/node_modules/string-width": {
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz",
@@ -5687,9 +5677,9 @@
}
},
"node_modules/minimatch": {
"version": "10.2.3",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.3.tgz",
"integrity": "sha512-Rwi3pnapEqirPSbWbrZaa6N3nmqq4Xer/2XooiOKyV3q12ML06f7MOuc5DVH8ONZIFhwIYQ3yzPH4nt7iWHaTg==",
"version": "10.2.4",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.4.tgz",
"integrity": "sha512-oRjTw/97aTBN0RHbYCdtF1MQfvusSIBQM0IZEgzl6426+8jSC0nF1a/GmnVLpfB9yyr6g6FTqWqiZVbxrtaCIg==",
"dev": true,
"license": "BlueOak-1.0.0",
"dependencies": {
@@ -6445,9 +6435,9 @@
}
},
"node_modules/postcss": {
"version": "8.5.6",
"resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz",
"integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==",
"version": "8.5.8",
"resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.8.tgz",
"integrity": "sha512-OW/rX8O/jXnm82Ey1k44pObPtdblfiuWnrd8X7GJ7emImCOstunGbXUpp7HdBrFQX6rJzn3sPT397Wp5aCwCHg==",
"dev": true,
"funding": [
{
@@ -7021,17 +7011,17 @@
}
},
"node_modules/slice-ansi": {
"version": "7.1.2",
"resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-7.1.2.tgz",
"integrity": "sha512-iOBWFgUX7caIZiuutICxVgX1SdxwAVFFKwt1EvMYYec/NWO5meOJ6K5uQxhrYBdQJne4KxiqZc+KptFOWFSI9w==",
"version": "8.0.0",
"resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-8.0.0.tgz",
"integrity": "sha512-stxByr12oeeOyY2BlviTNQlYV5xOj47GirPr4yA1hE9JCtxfQN0+tVbkxwCtYDQWhEKWFHsEK48ORg5jrouCAg==",
"dev": true,
"license": "MIT",
"dependencies": {
"ansi-styles": "^6.2.1",
"is-fullwidth-code-point": "^5.0.0"
"ansi-styles": "^6.2.3",
"is-fullwidth-code-point": "^5.1.0"
},
"engines": {
"node": ">=18"
"node": ">=20"
},
"funding": {
"url": "https://github.com/chalk/slice-ansi?sponsor=1"
@@ -7198,13 +7188,13 @@
}
},
"node_modules/strip-ansi": {
"version": "7.1.2",
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz",
"integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==",
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.2.0.tgz",
"integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==",
"dev": true,
"license": "MIT",
"dependencies": {
"ansi-regex": "^6.0.1"
"ansi-regex": "^6.2.2"
},
"engines": {
"node": ">=12"
+4
View File
@@ -43,6 +43,10 @@ ng_application(
ng_config = ":ng_config",
node_modules = ":node_modules",
project_name = "dev-app",
serve_args = [
"--port",
"4201",
],
tags = [
# Tagged as manual as both build and build.production use the same output directory.
"manual",
+3 -3
View File
@@ -14,13 +14,13 @@
"@angular/platform-browser": "workspace:*",
"@angular/platform-server": "workspace:*",
"@angular/router": "workspace:*",
"@angular/ssr": "21.2.0-rc.2",
"@angular/ssr": "21.2.0",
"rxjs": "~7.8.0",
"tslib": "^2.3.0"
},
"devDependencies": {
"@angular/build": "21.2.0-rc.2",
"@angular/cli": "21.2.0-rc.2",
"@angular/build": "21.2.0",
"@angular/cli": "21.2.0",
"@angular/compiler-cli": "workspace:*",
"jsdom": "^28.0.0",
"typescript": "~5.9.2",
@@ -1,4 +1,4 @@
load("//devtools/tools:defaults.bzl", "npm_sass_library", "sass_library")
load("//devtools/tools:defaults.bzl", "npm_sass_library", "sass_binary", "sass_library")
package(default_visibility = ["//visibility:public"])
@@ -76,3 +76,13 @@ sass_library(
":typography",
],
)
sass_binary(
name = "firefox",
src = "firefox.scss",
)
sass_binary(
name = "chrome",
src = "chrome.scss",
)
@@ -0,0 +1 @@
/* Chrome-specific global styles */
@@ -0,0 +1 @@
/* Firefox-specific global styles */
@@ -1,4 +1,4 @@
load("//devtools/tools:defaults.bzl", "esbuild", "extension_package", "ng_project", "sass_binary", "string_flag", "ts_project")
load("//devtools/tools:defaults.bzl", "copy_to_directory", "esbuild", "extension_package", "ng_project", "sass_binary", "string_flag", "ts_project")
package(default_visibility = ["//visibility:public"])
@@ -10,6 +10,18 @@ sass_binary(
deps = ["//devtools/projects/ng-devtools/src/styles:global"],
)
copy_to_directory(
name = "browser_specific_styles",
srcs = [
"//devtools/projects/ng-devtools/src/styles:chrome",
"//devtools/projects/ng-devtools/src/styles:firefox",
],
out = "styles",
replace_prefixes = {
"devtools/projects/ng-devtools/src/styles": "",
},
)
ts_project(
name = "devtools",
srcs = [
@@ -74,6 +86,7 @@ exports_files(["index.html"])
filegroup(
name = "prod_app_static_files",
srcs = [
":browser_specific_styles",
":index.html",
":shell_common_styles",
],
@@ -14,7 +14,11 @@ import {initializeExtendedWindowOperations} from './chrome-window-extensions';
import {getBackendUri, getContentScriptUri} from './comm-utils';
import {SamePageMessageBus} from './same-page-message-bus';
const messageBus = new SamePageMessageBus(getBackendUri(), getContentScriptUri());
const messageBus = new SamePageMessageBus(
'[Backend=>ContentScript]',
getBackendUri(),
getContentScriptUri(),
);
let initialized = false;
messageBus.on('handshake', () => {
@@ -56,6 +56,7 @@ function attemptBackendHandshake() {
port.onDisconnect.addListener(handleDisconnect);
const detectAngularMessageBus = new SamePageMessageBus(
'[ContentScript=>DetectAngular]',
getContentScriptUri(),
getDetectAngularScriptUri(),
);
@@ -87,7 +88,11 @@ detectAngularMessageBus.on('detectAngular', (detectionResult) => {
attemptBackendHandshake();
});
const localMessageBus = new SamePageMessageBus(getContentScriptUri(), getBackendUri());
const localMessageBus = new SamePageMessageBus(
'[ConstentScript=>BackEnd]',
getContentScriptUri(),
getBackendUri(),
);
const chromeMessageBus = new ChromeMessageBus(port);
const handshakeWithBackend = (): void => {
@@ -18,6 +18,7 @@ import {getDetectAngularScriptUri} from './comm-utils';
import {SamePageMessageBus} from './same-page-message-bus';
const detectAngularMessageBus = new SamePageMessageBus(
'[DetectAngular=>CS]',
getDetectAngularScriptUri(),
getDetectAngularScriptUri(),
);
@@ -12,10 +12,22 @@ type AnyEventCallback<Ev> = <E extends keyof Ev>(topic: E, args: Parameters<Ev[E
type ListenerFn = (e: MessageEvent) => void;
// We use a bus status to know if we should send the message between the context
// eg: We don't want to send events until the devtools tab has been focused to present spaming the message bus
// init: initial state, until the backend is ready
// waiting: blocking message, until we see the 'enableFrameConnection' event
// ready: we send every message through the bus
export type BusStatus = 'init' | 'waiting' | 'ready';
/**
* Note: This Bus implementation implements a filter based of topic. It might not be suitable for others messages than the ones currently used.
*/
export class SamePageMessageBus extends MessageBus<Events> {
private status: BusStatus = 'init';
private _listeners: ListenerFn[] = [];
constructor(
private debugName: string,
private _source: string,
private _destination: string,
) {
@@ -24,6 +36,8 @@ export class SamePageMessageBus extends MessageBus<Events> {
onAny(cb: AnyEventCallback<Events>): () => void {
const listener: ListenerFn = (e) => {
this.updateStatus(e.data?.topic);
if (e.source !== window || !e.data || !e.data.topic || e.data.source !== this._destination) {
return;
}
@@ -39,6 +53,8 @@ export class SamePageMessageBus extends MessageBus<Events> {
override on<E extends keyof Events>(topic: E, cb: Events[E]): () => void {
const listener: ListenerFn = (e) => {
this.updateStatus(e.data?.topic);
if (e.source !== window || !e.data || e.data.source !== this._destination || !e.data.topic) {
return;
}
@@ -68,6 +84,10 @@ export class SamePageMessageBus extends MessageBus<Events> {
}
override emit<E extends keyof Events>(topic: E, args?: Parameters<Events[E]>): boolean {
if (this.shouldSkipMessage(topic)) {
return false;
}
window.postMessage(
{
source: this._source,
@@ -85,4 +105,16 @@ export class SamePageMessageBus extends MessageBus<Events> {
this._listeners.forEach((l) => window.removeEventListener('message', l));
this._listeners = [];
}
private shouldSkipMessage(topic: string): boolean {
return this.status === 'waiting' && topic !== 'enableFrameConnection';
}
private updateStatus(topic: string): void {
if (topic === 'enableFrameConnection') {
this.status = 'ready';
} else if (topic === 'backendReady') {
this.status = 'waiting';
}
}
}
+14 -1
View File
@@ -1,4 +1,4 @@
load("//devtools/tools:defaults.bzl", "esbuild", "http_server", "ng_project", "sass_binary")
load("//devtools/tools:defaults.bzl", "copy_to_directory", "esbuild", "http_server", "ng_project", "sass_binary")
package(default_visibility = ["//visibility:public"])
@@ -9,6 +9,18 @@ sass_binary(
deps = ["//devtools/projects/ng-devtools/src/styles:global"],
)
copy_to_directory(
name = "browser_specific_styles",
srcs = [
"//devtools/projects/ng-devtools/src/styles:chrome",
"//devtools/projects/ng-devtools/src/styles:firefox",
],
out = "styles",
replace_prefixes = {
"devtools/projects/ng-devtools/src/styles": "",
},
)
ng_project(
name = "demo",
srcs = ["main.ts"],
@@ -43,6 +55,7 @@ exports_files(["index.html"])
filegroup(
name = "dev_app_static_files",
srcs = [
":browser_specific_styles",
":demo_styles",
":index.html",
"//devtools/src/assets",
@@ -91,7 +91,7 @@ export function createMetadataKey<TWrite>(): MetadataKey<Signal<TWrite | undefin
export function createMetadataKey<TWrite, TAcc>(reducer: MetadataReducer<TAcc, TWrite>): MetadataKey<Signal<TAcc>, TWrite, TAcc>;
// @public
export function debounce<TValue, TPathKind extends PathKind = PathKind.Root>(path: SchemaPath<TValue, SchemaPathRules.Supported, TPathKind>, durationOrDebouncer: number | Debouncer<TValue, TPathKind>): void;
export function debounce<TValue, TPathKind extends PathKind = PathKind.Root>(path: SchemaPath<TValue, SchemaPathRules.Supported, TPathKind>, config: number | 'blur' | Debouncer<TValue, TPathKind>): void;
// @public
export type Debouncer<TValue, TPathKind extends PathKind = PathKind.Root> = (context: FieldContext<TValue, TPathKind>, abortSignal: AbortSignal) => Promise<void> | void;
+13
View File
@@ -0,0 +1,13 @@
# Editor configuration, see https://editorconfig.org
root = true
[*]
charset = utf-8
indent_style = space
indent_size = 2
insert_final_newline = true
trim_trailing_whitespace = true
[*.md]
max_line_length = off
trim_trailing_whitespace = false
+46
View File
@@ -0,0 +1,46 @@
# See https://help.github.com/ignore-files/ for more about ignoring files.
# compiled output
/dist
/tmp
/out-tsc
# Only exists if Bazel was run
/bazel-out
# dependencies
/node_modules
# profiling files
chrome-profiler-events*.json
speed-measure-plugin*.json
# IDEs and editors
/.idea
.project
.classpath
.c9/
*.launch
.settings/
*.sublime-workspace
# IDE - VSCode
.vscode/*
!.vscode/settings.json
!.vscode/tasks.json
!.vscode/launch.json
!.vscode/extensions.json
.history/*
# misc
/.sass-cache
/connect.lock
/coverage
/libpeerconnection.log
npm-debug.log
yarn-error.log
testem.log
/typings
# System Files
.DS_Store
Thumbs.db
+6
View File
@@ -0,0 +1,6 @@
load("//integration:index.bzl", "ng_integration_test")
ng_integration_test(
name = "test",
setup_chromium = True,
)
+27
View File
@@ -0,0 +1,27 @@
# CoreAnimationsE2E
This project was generated with [Angular CLI](https://github.com/angular/angular-cli) version 9.0.0-next.9.
## Development server
Run `ng serve` for a dev server. Navigate to `http://localhost:4200/`. The app will automatically reload if you change any of the source files.
## Code scaffolding
Run `ng generate component component-name` to generate a new component. You can also use `ng generate directive|pipe|service|class|guard|interface|enum|module`.
## Build
Run `ng build` to build the project. The build artifacts will be stored in the `dist/` directory. Use the `--prod` flag for a production build.
## Running unit tests
Run `ng test` to execute the unit tests via [Karma](https://karma-runner.github.io).
## Running end-to-end tests
Run `ng e2e` to execute the end-to-end tests via [Protractor](https://www.protractortest.org/).
## Further help
To get more help on the Angular CLI use `ng help` or go check out the [Angular CLI README](https://github.com/angular/angular-cli/blob/main/README.md).
+107
View File
@@ -0,0 +1,107 @@
{
"$schema": "./node_modules/@angular/cli/lib/config/schema.json",
"version": 1,
"newProjectRoot": "projects",
"projects": {
"core-animations-e2e": {
"projectType": "application",
"schematics": {},
"root": "",
"sourceRoot": "src",
"prefix": "app",
"architect": {
"build": {
"builder": "@angular/build:application",
"options": {
"outputHashing": "none",
"outputPath": {
"base": "dist",
"browser": ""
},
"index": "src/index.html",
"polyfills": ["zone.js"],
"tsConfig": "tsconfig.app.json",
"aot": true,
"assets": ["src/favicon.ico", "src/assets"],
"styles": ["src/styles.css"],
"scripts": [],
"optimization": false,
"progress": false,
"browser": "src/main.ts"
},
"configurations": {
"production": {
"optimization": true,
"outputHashing": "none",
"sourceMap": false,
"namedChunks": false,
"extractLicenses": true,
"budgets": [
{
"type": "initial",
"maximumWarning": "2mb",
"maximumError": "5mb"
},
{
"type": "anyComponentStyle",
"maximumWarning": "6kb",
"maximumError": "10kb"
}
]
}
}
},
"serve": {
"builder": "@angular/build:dev-server",
"options": {
"buildTarget": "core-animations-e2e:build"
},
"configurations": {
"dev": {
"buildTarget": "core-animations-e2e:build:dev"
},
"production": {
"buildTarget": "core-animations-e2e:build:production"
},
"ci": {},
"ci-production": {
"buildTarget": "core-animations-e2e:build:production"
}
}
},
"extract-i18n": {
"builder": "@angular/build:extract-i18n",
"options": {
"buildTarget": "core-animations-e2e:build"
}
},
"test": {
"builder": "@angular-devkit/build-angular:karma",
"options": {
"polyfills": ["zone.js", "zone.js/testing"],
"tsConfig": "tsconfig.spec.json",
"karmaConfig": "karma.conf.js",
"assets": ["src/favicon.ico", "src/assets"],
"styles": ["src/styles.css"],
"scripts": [],
"progress": false,
"watch": false
}
},
"lint": {
"builder": "@angular/build:tslint",
"options": {
"tsConfig": ["tsconfig.app.json", "tsconfig.spec.json", "e2e/tsconfig.json"],
"exclude": ["**/node_modules/**"]
}
}
}
}
},
"cli": {
"cache": {
"enabled": false
},
"analytics": false
}
}
+7
View File
@@ -0,0 +1,7 @@
{
"spec_dir": "e2e",
"spec_files": ["src/**/*spec.ts"],
"helpers": ["setup.js"],
"stopSpecOnExpectationFailure": false,
"random": false
}
+8
View File
@@ -0,0 +1,8 @@
const path = require('path');
const tsNode = require('ts-node');
tsNode.register({
project: path.join(__dirname, 'tsconfig.json'),
});
jasmine.DEFAULT_TIMEOUT_INTERVAL = 30000;
@@ -0,0 +1,94 @@
import puppeteer, {Browser, Page} from 'puppeteer';
describe('Animations Integration', () => {
let browser: Browser;
let page: Page;
beforeAll(async () => {
browser = await puppeteer.launch({
headless: false, // watch it run in the browser
executablePath: process.env.CHROME_BIN,
args: ['--no-sandbox', '--disable-gpu'],
});
});
afterAll(async () => {
if (browser) {
await browser.close();
}
});
beforeEach(async () => {
page = await browser.newPage();
// Use a retry loop to wait for ng serve to be fully ready
for (let i = 0; i < 10; i++) {
try {
await page.goto('http://localhost:4208/');
break;
} catch (e) {
if (i === 9) throw e;
await new Promise((res) => setTimeout(res, 2000));
}
}
});
afterEach(async () => {
if (page) {
await page.close();
}
});
it('should not disappear items when rearranged', async () => {
// Wait for the elements to be rendered
await page.waitForSelector('.example-box');
const boxes = await page.$$('.example-box');
expect(boxes.length).toBe(3);
// Get the bounding boxes of the first and last elements
const firstBox = await boxes[0]!.boundingBox();
const lastBox = await boxes[2]!.boundingBox();
if (!firstBox || !lastBox) {
throw new Error('Could not find bounding boxes for elements.');
}
// Perform drag and drop
await page.mouse.move(firstBox.x + firstBox.width / 2, firstBox.y + firstBox.height / 2);
await page.mouse.down();
// Smoothly drag it down to the last position
await page.mouse.move(lastBox.x + lastBox.width / 2, lastBox.y + lastBox.height / 2 + 20, {
steps: 50,
});
// Drop
await page.mouse.up();
// Wait for animations to finish (2000ms + some buffer)
await new Promise((res) => setTimeout(res, 3000));
// Check that we still have 3 items
const finalBoxes = await page.$$('.example-box');
expect(finalBoxes.length).toBe(3);
});
it('should remove element when animationend is dropped (fallback timeout)', async () => {
// Wait for the fallback element to be rendered
await page.waitForSelector('.fallback-el');
let fallbackEls = await page.$$('.fallback-el');
expect(fallbackEls.length).toBe(1);
// Click the hide and intercept button
await page.click('#hide-and-intercept');
// Wait for fallback to kick in (animation is 50ms, fallback is duration + 50ms)
// We give it a small buffer to ensure the timeout fires
await new Promise((res) => setTimeout(res, 300));
// Check that we have 0 items
fallbackEls = await page.$$('.fallback-el');
expect(fallbackEls.length).toBe(0);
});
});
+11
View File
@@ -0,0 +1,11 @@
/* To learn more about this file see: https://angular.io/guide/typescript-configuration. */
{
"extends": "../tsconfig.json",
"compilerOptions": {
"outDir": "../out-tsc/e2e",
"module": "commonjs",
"moduleResolution": "node",
"target": "ES2022",
"types": ["jasmine", "node"]
}
}
+40
View File
@@ -0,0 +1,40 @@
// Karma configuration file, see link for more information
// https://karma-runner.github.io/1.0/config/configuration-file.html
module.exports = function (config) {
config.set({
basePath: '',
frameworks: ['jasmine', '@angular-devkit/build-angular'],
plugins: [
require('karma-jasmine'),
require('karma-chrome-launcher'),
require('karma-jasmine-html-reporter'),
require('@angular-devkit/build-angular/plugins/karma'),
],
client: {
clearContext: false, // leave Jasmine Spec Runner output visible in browser
},
reporters: ['progress', 'kjhtml'],
port: 9876,
colors: true,
logLevel: config.LOG_INFO,
autoWatch: true,
customLaunchers: {
ChromeHeadlessNoSandbox: {
base: 'ChromeHeadless',
// See /integration/README.md#browser-tests for more info on these args
flags: [
'--no-sandbox',
'--headless',
'--disable-gpu',
'--disable-dev-shm-usage',
'--hide-scrollbars',
'--mute-audio',
],
},
},
browsers: ['ChromeHeadlessNoSandbox'],
singleRun: false,
restartOnFileChange: true,
});
};
+42
View File
@@ -0,0 +1,42 @@
{
"name": "core-animations-e2e",
"version": "0.0.0",
"scripts": {
"ng": "ng",
"start": "ng serve",
"build": "ng build --configuration production",
"pretest": "ng version",
"test": "concurrently \"ng serve --port 4208\" \"jasmine --config=e2e/jasmine.json\" --kill-others --success first",
"lint": "ng lint"
},
"private": true,
"dependencies": {
"@angular/cdk": "21.2.0",
"@angular/common": "link:./in-existing-linked-by-bazel",
"@angular/compiler": "link:./in-existing-linked-by-bazel",
"@angular/core": "link:./in-existing-linked-by-bazel",
"@angular/forms": "link:./in-existing-linked-by-bazel",
"@angular/platform-browser": "link:./in-existing-linked-by-bazel",
"@angular/platform-browser-dynamic": "link:./in-existing-linked-by-bazel",
"@angular/router": "link:./in-existing-linked-by-bazel",
"@angular/ssr": "21.2.0",
"rxjs": "^7.0.0",
"tslib": "^2.3.0",
"zone.js": "0.16.1"
},
"devDependencies": {
"@angular-devkit/build-angular": "21.2.0",
"@angular/build": "21.2.0",
"@angular/cli": "21.2.0",
"@angular/compiler-cli": "link:./in-existing-linked-by-bazel",
"@types/jasmine": "^6.0.0",
"@types/node": "^20.14.8",
"concurrently": "9.2.1",
"jasmine": "5.0.0",
"jasmine-core": "6.1.0",
"puppeteer": "24.37.5",
"ts-node": "^10.9.1",
"typescript": "5.9.3"
},
"packageManager": "pnpm@10.30.3"
}
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,11 @@
# The minimum age of a release to be considered for dependency installation.
# The value is in minutes (1440 minutes = 1 day).
minimumReleaseAge: 1440
# List of packages to exclude from the minimum release age check.
minimumReleaseAgeExclude:
- '@angular-devkit/*'
- '@angular/*'
- '@ngtools/webpack'
- '@schematics/*'
- 'ng-packagr'
- 'zone.js'
@@ -0,0 +1,95 @@
.example-list {
width: 500px;
max-width: 100%;
border: solid 1px #ccc;
min-height: 60px;
display: block;
background: white;
border-radius: 4px;
overflow: hidden;
}
.example-box {
padding: 20px 10px;
border-bottom: solid 1px #ccc;
color: rgba(0, 0, 0, 0.87);
display: flex;
flex-direction: row;
align-items: center;
justify-content: space-between;
box-sizing: border-box;
cursor: move;
background: white;
font-size: 14px;
}
.cdk-drag-preview {
box-sizing: border-box;
border-radius: 4px;
box-shadow:
0 5px 5px -3px rgba(0, 0, 0, 0.2),
0 8px 10px 1px rgba(0, 0, 0, 0.14),
0 3px 14px 2px rgba(0, 0, 0, 0.12);
}
.cdk-drag-placeholder {
opacity: 0;
}
.cdk-drag-animating {
transition: transform 250ms cubic-bezier(0, 0, 0.2, 1);
}
.example-box:last-child {
border: none;
}
.example-list.cdk-drop-list-dragging .example-box:not(.cdk-drag-placeholder) {
transition: transform 250ms cubic-bezier(0, 0, 0.2, 1);
}
.example-custom-placeholder {
background: #ccc;
border: dotted 3px #999;
min-height: 60px;
transition: transform 250ms cubic-bezier(0, 0, 0.2, 1);
}
.ease-in-animation {
animation: ease-in-animation 1500ms;
}
.ease-out-animation {
animation: ease-out-animation 1500ms;
}
@keyframes ease-in-animation {
from {
height: 0;
}
to {
height: 75px;
}
}
@keyframes ease-out-animation {
from {
height: 75px;
}
to {
height: 0;
}
}
.short-animation {
animation: short-animation 50ms;
}
@keyframes short-animation {
from {
opacity: 1;
}
to {
opacity: 0;
}
}
@@ -0,0 +1,19 @@
<div cdkDropList class="example-list" (cdkDropListDropped)="drop($event)">
@for (movie of movies; track movie) {
<div
class="example-box"
cdkDrag
animate.enter="ease-in-animation"
animate.leave="ease-out-animation"
>
<div class="example-custom-placeholder" *cdkDragPlaceholder></div>
{{ movie }}
</div>
}
</div>
@if (showFallback) {
<div class="fallback-el" animate.leave="short-animation">Fallback Element</div>
}
<button id="hide-and-intercept" (click)="hideAndIntercept()">Hide and Intercept</button>
@@ -0,0 +1,45 @@
import {Component} from '@angular/core';
import {
CdkDragDrop,
CdkDropList,
CdkDrag,
CdkDragPlaceholder,
moveItemInArray,
} from '@angular/cdk/drag-drop';
// We want to verify that dragging an item does not result in any items disappearing
// when they have an enter/leave animation.
@Component({
selector: 'app-root',
imports: [CdkDropList, CdkDrag, CdkDragPlaceholder],
templateUrl: './app.component.html',
styleUrl: './app.component.css',
})
export class AppComponent {
movies = [
'Episode I - The Phantom Menace',
'Episode II - Attack of the Clones',
'Episode III - Revenge of the Sith',
];
showFallback = true;
drop(event: CdkDragDrop<string[]>) {
moveItemInArray(this.movies, event.previousIndex, event.currentIndex);
}
hideAndIntercept() {
const el = document.querySelector('.fallback-el');
if (el) {
el.addEventListener(
'animationend',
(e) => {
e.stopImmediatePropagation();
},
true,
);
}
this.showFallback = false;
}
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 948 B

+14
View File
@@ -0,0 +1,14 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8" />
<title>CoreAnimationsE2E</title>
<base href="/" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<link rel="icon" type="image/x-icon" href="favicon.ico" />
</head>
<body>
<app-root></app-root>
</body>
</html>
+4
View File
@@ -0,0 +1,4 @@
import {bootstrapApplication} from '@angular/platform-browser';
import {AppComponent} from './app/app.component';
bootstrapApplication(AppComponent).catch((err) => console.error(err));
+1
View File
@@ -0,0 +1 @@
/* You can add global styles to this file, and also import other style files */
+9
View File
@@ -0,0 +1,9 @@
{
"extends": "./tsconfig.json",
"compilerOptions": {
"outDir": "./out-tsc/app",
"types": []
},
"files": ["src/main.ts"],
"include": ["src/**/*.d.ts"]
}
+19
View File
@@ -0,0 +1,19 @@
{
"compileOnSave": false,
"compilerOptions": {
"outDir": "./dist/out-tsc",
"sourceMap": true,
"esModuleInterop": true,
"declaration": false,
"experimentalDecorators": true,
"module": "es2022",
"moduleResolution": "bundler",
"importHelpers": true,
"target": "es2022",
"typeRoots": ["node_modules/@types"],
"lib": ["es2018", "dom"]
},
"angularCompilerOptions": {
"strictTemplates": true
}
}
@@ -0,0 +1,8 @@
{
"extends": "./tsconfig.json",
"compilerOptions": {
"outDir": "./out-tsc/spec",
"types": ["jasmine", "node"]
},
"include": ["src/**/*.spec.ts", "src/**/*.d.ts"]
}
@@ -29,9 +29,9 @@
"zone.js": "0.16.0"
},
"devDependencies": {
"@angular-devkit/build-angular": "21.2.0-rc.2",
"@angular/build": "21.2.0-rc.2",
"@angular/cli": "21.2.0-rc.2",
"@angular-devkit/build-angular": "21.2.0",
"@angular/build": "21.2.0",
"@angular/cli": "21.2.0",
"@angular/compiler-cli": "link:./in-existing-linked-by-bazel",
"@types/jasmine": "^6.0.0",
"@types/jasminewd2": "^2.0.8",
@@ -45,5 +45,5 @@
"ts-node": "^10.9.1",
"typescript": "5.9.3"
},
"packageManager": "pnpm@10.30.2"
"packageManager": "pnpm@10.30.3"
}
File diff suppressed because it is too large Load Diff
@@ -13,19 +13,19 @@
"@angular/core": "link:./in-existing-linked-by-bazel",
"@angular/platform-browser": "link:./in-existing-linked-by-bazel",
"@angular/router": "link:./in-existing-linked-by-bazel",
"@angular/ssr": "21.2.0-rc.2",
"@angular/ssr": "21.2.0",
"rxjs": "^7.0.0",
"tslib": "^2.3.0",
"zone.js": "0.16.0"
},
"devDependencies": {
"@angular-devkit/build-angular": "21.2.0-rc.2",
"@angular/build": "21.2.0-rc.2",
"@angular/cli": "21.2.0-rc.2",
"@angular-devkit/build-angular": "21.2.0",
"@angular/build": "21.2.0",
"@angular/cli": "21.2.0",
"@angular/compiler-cli": "link:./in-existing-linked-by-bazel",
"@types/node": "^20.14.8",
"ts-node": "^10.9.1",
"typescript": "5.9.3"
},
"packageManager": "pnpm@10.30.2"
"packageManager": "pnpm@10.30.3"
}
File diff suppressed because it is too large Load Diff
+5 -5
View File
@@ -18,19 +18,19 @@
"@angular/forms": "link:./in-existing-linked-by-bazel",
"@angular/platform-browser": "link:./in-existing-linked-by-bazel",
"@angular/router": "link:./in-existing-linked-by-bazel",
"@angular/ssr": "21.2.0-rc.2",
"@angular/ssr": "21.2.0",
"rxjs": "^7.0.0",
"tslib": "^2.3.0",
"zone.js": "0.16.0"
},
"devDependencies": {
"@angular-devkit/build-angular": "21.2.0-rc.2",
"@angular/build": "21.2.0-rc.2",
"@angular/cli": "21.2.0-rc.2",
"@angular-devkit/build-angular": "21.2.0",
"@angular/build": "21.2.0",
"@angular/cli": "21.2.0",
"@angular/compiler-cli": "link:./in-existing-linked-by-bazel",
"@types/node": "^20.14.8",
"ts-node": "^10.9.1",
"typescript": "5.9.3"
},
"packageManager": "pnpm@10.30.2"
"packageManager": "pnpm@10.30.3"
}
File diff suppressed because it is too large Load Diff
+3 -3
View File
@@ -10,7 +10,7 @@
"lint": "ng lint",
"e2e": "ng build --configuration production && concurrently \"serve dist/browser -l 4210 --no-clipboard --single\" \"protractor e2e/protractor.conf.js --baseUrl=http://localhost:4210\" --kill-others --success first"
},
"packageManager": "pnpm@10.30.2",
"packageManager": "pnpm@10.30.3",
"private": true,
"dependencies": {
"@angular/animations": "link:./in-existing-linked-by-bazel",
@@ -25,8 +25,8 @@
"zone.js": "0.16.0"
},
"devDependencies": {
"@angular-devkit/build-angular": "21.2.0-rc.2",
"@angular/cli": "21.2.0-rc.2",
"@angular-devkit/build-angular": "21.2.0",
"@angular/cli": "21.2.0",
"@angular/compiler-cli": "link:./in-existing-linked-by-bazel",
"@types/jasmine": "^6.0.0",
"@types/jasminewd2": "^2.0.8",
File diff suppressed because it is too large Load Diff
+4 -4
View File
@@ -23,12 +23,12 @@
"zone.js": "0.16.0"
},
"devDependencies": {
"@angular-devkit/build-angular": "21.2.0-rc.2",
"@angular/build": "21.2.0-rc.2",
"@angular/cli": "21.2.0-rc.2",
"@angular-devkit/build-angular": "21.2.0",
"@angular/build": "21.2.0",
"@angular/cli": "21.2.0",
"@angular/compiler-cli": "link:./in-existing-linked-by-bazel",
"ts-node": "10.9.2",
"typescript": "5.9.3"
},
"packageManager": "pnpm@10.30.2"
"packageManager": "pnpm@10.30.3"
}
+242 -226
View File
File diff suppressed because it is too large Load Diff
@@ -23,12 +23,12 @@
"zone.js": "0.16.0"
},
"devDependencies": {
"@angular-devkit/build-angular": "21.2.0-rc.2",
"@angular/cli": "21.2.0-rc.2",
"@angular-devkit/build-angular": "21.2.0",
"@angular/cli": "21.2.0",
"@angular/compiler-cli": "link:./in-existing-linked-by-bazel",
"@types/node": "^20.14.8",
"ts-node": "^10.9.1",
"typescript": "5.9.3"
},
"packageManager": "pnpm@10.30.2"
"packageManager": "pnpm@10.30.3"
}
File diff suppressed because it is too large Load Diff
+3 -3
View File
@@ -23,8 +23,8 @@
"zone.js": "0.16.0"
},
"devDependencies": {
"@angular-devkit/build-angular": "21.2.0-rc.2",
"@angular/cli": "21.2.0-rc.2",
"@angular-devkit/build-angular": "21.2.0",
"@angular/cli": "21.2.0",
"@angular/compiler-cli": "link:./in-existing-linked-by-bazel",
"@types/jasmine": "^6.0.0",
"@types/jasminewd2": "^2.0.8",
@@ -39,5 +39,5 @@
"ts-node": "^10.9.1",
"typescript": "5.9.3"
},
"packageManager": "pnpm@10.30.2"
"packageManager": "pnpm@10.30.3"
}
File diff suppressed because it is too large Load Diff
+3 -3
View File
@@ -21,11 +21,11 @@
"zone.js": "0.16.0"
},
"devDependencies": {
"@angular-devkit/build-angular": "21.2.0-rc.2",
"@angular/cli": "21.2.0-rc.2",
"@angular-devkit/build-angular": "21.2.0",
"@angular/cli": "21.2.0",
"@angular/compiler-cli": "link:./in-existing-linked-by-bazel",
"@types/node": "^20.14.8",
"typescript": "5.9.3"
},
"packageManager": "pnpm@10.30.2"
"packageManager": "pnpm@10.30.3"
}
File diff suppressed because it is too large Load Diff
+1 -1
View File
@@ -33,5 +33,5 @@
"protractor": "protractor e2e/protractor.config.js"
},
"private": true,
"packageManager": "pnpm@10.30.2"
"packageManager": "pnpm@10.30.3"
}
+18 -18
View File
@@ -336,8 +336,8 @@ packages:
'@types/jasminewd2@2.0.13':
resolution: {integrity: sha512-aJ3wj8tXMpBrzQ5ghIaqMisD8C3FIrcO6sDKHqFbuqAsI7yOxj0fA7MrRCPLZHIVUjERIwsMmGn/vB0UQ9u0Hg==}
'@types/node@25.3.0':
resolution: {integrity: sha512-4K3bqJpXpqfg2XKGK9bpDTc6xO/xoUP/RBWS7AtRMug6zZFaRekiLzjVtAoZMquxoAbzBvy5nxQ7veS5eYzf8A==}
'@types/node@25.3.3':
resolution: {integrity: sha512-DpzbrH7wIcBaJibpKo9nnSQL0MTRdnWttGyE5haGwK86xgMOkFLp7vEyfQPGLOJh5wNYiJ3V9PmUMDhV9u8kkQ==}
'@types/q@0.0.32':
resolution: {integrity: sha512-qYi3YV9inU/REEfxwVcGZzbS3KG/Xs90lv0Pr+lDtuVjBPGd1A+eciXzVSaRvLify132BfcvhvEjeVahrUl0Ug==}
@@ -486,8 +486,8 @@ packages:
resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==}
engines: {node: '>=6'}
caniuse-lite@1.0.30001774:
resolution: {integrity: sha512-DDdwPGz99nmIEv216hKSgLD+D4ikHQHjBC/seF98N9CPqRX4M5mSxT9eTV6oyisnJcuzxtZy4n17yKKQYmYQOA==}
caniuse-lite@1.0.30001775:
resolution: {integrity: sha512-s3Qv7Lht9zbVKE9XoTyRG6wVDCKdtOFIjBGg3+Yhn6JaytuNKPIjBMTMIY1AnOH3seL5mvF+x33oGAyK3hVt3A==}
caseless@0.12.0:
resolution: {integrity: sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==}
@@ -995,8 +995,8 @@ packages:
resolution: {integrity: sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==}
hasBin: true
minimatch@3.1.3:
resolution: {integrity: sha512-M2GCs7Vk83NxkUyQV1bkABc4yxgz9kILhHImZiBPAZ9ybuvCb0/H7lEl5XvIg3g+9d4eNotkZA5IWwYl0tibaA==}
minimatch@3.1.5:
resolution: {integrity: sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==}
minimist@1.2.8:
resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==}
@@ -1210,8 +1210,8 @@ packages:
saucelabs@1.5.0:
resolution: {integrity: sha512-jlX3FGdWvYf4Q3LFfFWS1QvPg3IGCGWxIc8QBFdPTbpTJnt/v17FHXYVAn7C8sHf1yUXo2c7yIM0isDryfYtHQ==}
sax@1.4.4:
resolution: {integrity: sha512-1n3r/tGXO6b6VXMdFT54SHzT9ytu9yr7TaELowdYpMqY/Ao7EnlQGmAQ1+RatX7Tkkdm6hONI2owqNx2aZj5Sw==}
sax@1.5.0:
resolution: {integrity: sha512-21IYA3Q5cQf089Z6tgaUTr7lDAyzoTPx5HRtbhsME8Udispad8dC/+sziTNugOEx54ilvatQ9YCzl4KQLPcRHA==}
engines: {node: '>=11.0.0'}
selenium-webdriver@3.6.0:
@@ -1722,7 +1722,7 @@ snapshots:
'@types/cors@2.8.19':
dependencies:
'@types/node': 25.3.0
'@types/node': 25.3.3
'@types/estree@1.0.8': {}
@@ -1732,7 +1732,7 @@ snapshots:
dependencies:
'@types/jasmine': 6.0.0
'@types/node@25.3.0':
'@types/node@25.3.3':
dependencies:
undici-types: 7.18.2
@@ -1894,7 +1894,7 @@ snapshots:
browserslist@4.28.1:
dependencies:
baseline-browser-mapping: 2.10.0
caniuse-lite: 1.0.30001774
caniuse-lite: 1.0.30001775
electron-to-chromium: 1.5.302
node-releases: 2.0.27
update-browserslist-db: 1.2.3(browserslist@4.28.1)
@@ -1911,7 +1911,7 @@ snapshots:
camelcase@5.3.1: {}
caniuse-lite@1.0.30001774: {}
caniuse-lite@1.0.30001775: {}
caseless@0.12.0: {}
@@ -2091,7 +2091,7 @@ snapshots:
engine.io@6.6.5:
dependencies:
'@types/cors': 2.8.19
'@types/node': 25.3.0
'@types/node': 25.3.3
accepts: 1.3.8
base64id: 2.0.0
cookie: 0.7.2
@@ -2197,7 +2197,7 @@ snapshots:
fs.realpath: 1.0.0
inflight: 1.0.6
inherits: 2.0.4
minimatch: 3.1.3
minimatch: 3.1.5
once: 1.4.0
path-is-absolute: 1.0.1
@@ -2421,7 +2421,7 @@ snapshots:
mime@1.4.1: {}
minimatch@3.1.3:
minimatch@3.1.5:
dependencies:
brace-expansion: 1.1.12
@@ -2599,7 +2599,7 @@ snapshots:
resp-modifier@6.0.2:
dependencies:
debug: 2.6.9
minimatch: 3.1.3
minimatch: 3.1.5
transitivePeerDependencies:
- supports-color
@@ -2656,7 +2656,7 @@ snapshots:
transitivePeerDependencies:
- supports-color
sax@1.4.4: {}
sax@1.5.0: {}
selenium-webdriver@3.6.0:
dependencies:
@@ -2918,7 +2918,7 @@ snapshots:
xml2js@0.4.23:
dependencies:
sax: 1.4.4
sax: 1.5.0
xmlbuilder: 11.0.1
xmlbuilder@11.0.1: {}
+1 -1
View File
@@ -21,5 +21,5 @@
"typescript": "5.9.3",
"zone.js": "0.16.0"
},
"packageManager": "pnpm@10.30.2"
"packageManager": "pnpm@10.30.3"
}
+1 -1
View File
@@ -13,5 +13,5 @@
"scripts": {
"test": "node ./test.mjs"
},
"packageManager": "pnpm@10.30.2"
"packageManager": "pnpm@10.30.3"
}
+1 -1
View File
@@ -27,5 +27,5 @@
"scripts": {
"test": "tsc"
},
"packageManager": "pnpm@10.30.2"
"packageManager": "pnpm@10.30.3"
}
@@ -20,15 +20,15 @@
"@angular/platform-browser": "link:./in-existing-linked-by-bazel",
"@angular/platform-server": "link:./in-existing-linked-by-bazel",
"@angular/router": "link:./in-existing-linked-by-bazel",
"@angular/ssr": "21.2.0-rc.2",
"@angular/ssr": "21.2.0",
"rxjs": "^7.0.0",
"tslib": "^2.3.0",
"zone.js": "0.16.0"
},
"devDependencies": {
"@angular-devkit/build-angular": "21.2.0-rc.2",
"@angular/build": "21.2.0-rc.2",
"@angular/cli": "21.2.0-rc.2",
"@angular-devkit/build-angular": "21.2.0",
"@angular/build": "21.2.0",
"@angular/cli": "21.2.0",
"@angular/compiler-cli": "link:./in-existing-linked-by-bazel",
"@types/jasmine": "^6.0.0",
"@types/node": "^20.14.8",
@@ -41,5 +41,5 @@
"ts-node": "^10.9.1",
"typescript": "5.9.3"
},
"packageManager": "pnpm@10.30.2"
"packageManager": "pnpm@10.30.3"
}

Some files were not shown because too many files have changed in this diff Show More