From 5443a96a26fa0d576f3ed8ab7094a331783d0ea1 Mon Sep 17 00:00:00 2001 From: Doug Parker Date: Wed, 18 Feb 2026 13:57:45 -0800 Subject: [PATCH 001/226] release: bump the next branch to v21.3.0-next.0 --- package.json | 2 +- renovate.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 39fba551b317..161b5fcd3296 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@angular/devkit-repo", - "version": "21.2.0-next.2", + "version": "21.3.0-next.0", "private": true, "description": "Software Development Kit for Angular", "keywords": [ diff --git a/renovate.json b/renovate.json index 293a1aa46277..8c193909dc0a 100644 --- a/renovate.json +++ b/renovate.json @@ -1,6 +1,6 @@ { "$schema": "https://docs.renovatebot.com/renovate-schema.json", - "baseBranchPatterns": ["main", "21.1.x"], + "baseBranchPatterns": ["main", "21.2.x"], "extends": ["github>angular/dev-infra//renovate-presets/default.json5"], "ignoreDeps": ["less"], "ignorePaths": ["tests/e2e/assets/**", "tests/schematics/update/packages/**"], From b0f49bb2ad7bfd388c5c7142cdd2d774166f8b6c Mon Sep 17 00:00:00 2001 From: Doug Parker Date: Wed, 18 Feb 2026 13:57:46 -0800 Subject: [PATCH 002/226] docs: release notes for the v21.2.0-rc.0 release --- CHANGELOG.md | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b11c764b3618..2570306842cf 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,9 @@ + + +# 21.2.0-rc.0 (2026-02-18) + + + # 19.2.20 (2026-02-13) @@ -2401,7 +2407,6 @@ - Protractor is no longer supported. Protractor was marked end-of-life in August 2023 (see https://protractortest.org/). Projects still relying on Protractor should consider migrating to another E2E testing framework, several support solid migration paths from Protractor. - - https://angular.dev/tools/cli/end-to-end - https://blog.angular.dev/the-state-of-end-to-end-testing-with-angular-d175f751cb9c @@ -6036,7 +6041,6 @@ Alan Agius, Charles Lyding and Doug Parker ### @angular/cli - Several changes to the `ng analytics` command syntax. - - `ng analytics project ` has been replaced with `ng analytics ` - `ng analytics ` has been replaced with `ng analytics --global` @@ -6066,7 +6070,6 @@ Alan Agius, Charles Lyding and Doug Parker - `browser` and `karma` builders `script` and `styles` options input files extensions are now validated. Valid extensions for `scripts` are: - - `.js` - `.cjs` - `.mjs` @@ -6075,7 +6078,6 @@ Alan Agius, Charles Lyding and Doug Parker - `.mjsx` Valid extensions for `styles` are: - - `.css` - `.less` - `.sass` From c6abc18292c02fc30335a7d65cfcf711f1d801dc Mon Sep 17 00:00:00 2001 From: Angular Robot Date: Fri, 20 Feb 2026 06:21:10 +0000 Subject: [PATCH 003/226] build: update pnpm to v10.30.0 See associated pull request for more information. --- MODULE.bazel | 4 ++-- MODULE.bazel.lock | 8 ++++---- package.json | 4 ++-- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/MODULE.bazel b/MODULE.bazel index e218349c3d69..6319eab04ecc 100644 --- a/MODULE.bazel +++ b/MODULE.bazel @@ -110,8 +110,8 @@ use_repo( pnpm = use_extension("@aspect_rules_js//npm:extensions.bzl", "pnpm") pnpm.pnpm( name = "pnpm", - pnpm_version = "10.29.3", - pnpm_version_integrity = "sha512-SY4ftMylqgbB3PJhHm+vxQly/+cYmZjECekN50VmREKY/+Q+bNKs3Hdboap8xeCSqLcFTIEbqMV3D4RpPTPS3A==", + pnpm_version = "10.30.0", + pnpm_version_integrity = "sha512-K1dT3gFdSA7riPW1th4AUfBbQwGAioLsi4QMnSrfd0jrNSyD9cFZPKcD/xAXKVvD/dMRmruWhu/Ja5/LGCAJNw==", ) use_repo(pnpm, "pnpm") diff --git a/MODULE.bazel.lock b/MODULE.bazel.lock index 8af79006afc6..f5e172b989cd 100644 --- a/MODULE.bazel.lock +++ b/MODULE.bazel.lock @@ -415,7 +415,7 @@ "@@aspect_rules_js+//npm:extensions.bzl%pnpm": { "general": { "bzlTransitiveDigest": "HC+l+mTivq1p/KbcVQ+iV5QwYR+oKESJh827FY68SH8=", - "usagesDigest": "PvqSdyUvIknVzZ66q+9FjDqiPWbKoaSj5J3EB+Z3ZAs=", + "usagesDigest": "v4J9uFN+BH96h0qgItqGSkw7/G3vSwX1dWtx/RSCtwU=", "recordedFileInputs": {}, "recordedDirentsInputs": {}, "envVariables": {}, @@ -424,11 +424,11 @@ "repoRuleId": "@@aspect_rules_js+//npm/private:npm_import.bzl%npm_import_rule", "attributes": { "package": "pnpm", - "version": "10.29.3", + "version": "10.30.0", "root_package": "", "link_workspace": "", "link_packages": {}, - "integrity": "sha512-SY4ftMylqgbB3PJhHm+vxQly/+cYmZjECekN50VmREKY/+Q+bNKs3Hdboap8xeCSqLcFTIEbqMV3D4RpPTPS3A==", + "integrity": "sha512-K1dT3gFdSA7riPW1th4AUfBbQwGAioLsi4QMnSrfd0jrNSyD9cFZPKcD/xAXKVvD/dMRmruWhu/Ja5/LGCAJNw==", "url": "", "commit": "", "patch_args": [ @@ -451,7 +451,7 @@ "repoRuleId": "@@aspect_rules_js+//npm/private:npm_import.bzl%npm_import_links", "attributes": { "package": "pnpm", - "version": "10.29.3", + "version": "10.30.0", "dev": false, "root_package": "", "link_packages": {}, diff --git a/package.json b/package.json index 161b5fcd3296..20233d17b5e0 100644 --- a/package.json +++ b/package.json @@ -28,12 +28,12 @@ "type": "git", "url": "https://github.com/angular/angular-cli.git" }, - "packageManager": "pnpm@10.29.3", + "packageManager": "pnpm@10.30.0", "engines": { "node": "^20.19.0 || ^22.12.0 || >=24.0.0", "npm": "Please use pnpm instead of NPM to install dependencies", "yarn": "Please use pnpm instead of Yarn to install dependencies", - "pnpm": "10.29.3" + "pnpm": "10.30.0" }, "author": "Angular Authors", "license": "MIT", From 8733802b8eeb68a3ed11ced8a508b33d7fc767e3 Mon Sep 17 00:00:00 2001 From: Angular Robot Date: Thu, 19 Feb 2026 06:24:46 +0000 Subject: [PATCH 004/226] build: update github/codeql-action action to v4.32.3 See associated pull request for more information. --- .github/workflows/codeql.yml | 4 ++-- .github/workflows/scorecard.yml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml index 0b070c5aae16..aa419051f888 100644 --- a/.github/workflows/codeql.yml +++ b/.github/workflows/codeql.yml @@ -23,12 +23,12 @@ jobs: with: persist-credentials: false - name: Initialize CodeQL - uses: github/codeql-action/init@45cbd0c69e560cd9e7cd7f8c32362050c9b7ded2 # v4.32.2 + uses: github/codeql-action/init@9e907b5e64f6b83e7804b09294d44122997950d6 # v4.32.3 with: languages: javascript-typescript build-mode: none config-file: .github/codeql/config.yml - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@45cbd0c69e560cd9e7cd7f8c32362050c9b7ded2 # v4.32.2 + uses: github/codeql-action/analyze@9e907b5e64f6b83e7804b09294d44122997950d6 # v4.32.3 with: category: '/language:javascript-typescript' diff --git a/.github/workflows/scorecard.yml b/.github/workflows/scorecard.yml index 4c9465d0cf9b..ae0a6bc1b93c 100644 --- a/.github/workflows/scorecard.yml +++ b/.github/workflows/scorecard.yml @@ -46,6 +46,6 @@ jobs: # Upload the results to GitHub's code scanning dashboard. - name: 'Upload to code-scanning' - uses: github/codeql-action/upload-sarif@45cbd0c69e560cd9e7cd7f8c32362050c9b7ded2 # v4.32.2 + uses: github/codeql-action/upload-sarif@9e907b5e64f6b83e7804b09294d44122997950d6 # v4.32.3 with: sarif_file: results.sarif From 1992481949c34c4bdf02f564b707b7878a4272a0 Mon Sep 17 00:00:00 2001 From: Angular Robot Date: Thu, 19 Feb 2026 22:10:36 +0000 Subject: [PATCH 005/226] build: update all non-major dependencies See associated pull request for more information. --- package.json | 4 +- packages/angular/build/package.json | 2 +- packages/angular/cli/package.json | 2 +- .../angular_devkit/build_angular/package.json | 4 +- pnpm-lock.yaml | 512 +++++++++--------- 5 files changed, 268 insertions(+), 256 deletions(-) diff --git a/package.json b/package.json index 20233d17b5e0..086e4c5d423e 100644 --- a/package.json +++ b/package.json @@ -89,8 +89,8 @@ "@types/yargs": "^17.0.20", "@types/yargs-parser": "^21.0.0", "@types/yarnpkg__lockfile": "^1.1.5", - "@typescript-eslint/eslint-plugin": "8.55.0", - "@typescript-eslint/parser": "8.55.0", + "@typescript-eslint/eslint-plugin": "8.56.0", + "@typescript-eslint/parser": "8.56.0", "ajv": "8.18.0", "buffer": "6.0.3", "esbuild": "0.27.3", diff --git a/packages/angular/build/package.json b/packages/angular/build/package.json index c4d847ae5a8e..f0e5ebdf7fce 100644 --- a/packages/angular/build/package.json +++ b/packages/angular/build/package.json @@ -37,7 +37,7 @@ "parse5-html-rewriting-stream": "8.0.0", "picomatch": "4.0.3", "piscina": "5.1.4", - "rolldown": "1.0.0-rc.4", + "rolldown": "1.0.0-rc.5", "sass": "1.97.3", "semver": "7.7.4", "source-map-support": "0.5.21", diff --git a/packages/angular/cli/package.json b/packages/angular/cli/package.json index 2dc97162e59f..a84f7f82f961 100644 --- a/packages/angular/cli/package.json +++ b/packages/angular/cli/package.json @@ -30,7 +30,7 @@ "@modelcontextprotocol/sdk": "1.26.0", "@schematics/angular": "workspace:0.0.0-PLACEHOLDER", "@yarnpkg/lockfile": "1.1.0", - "algoliasearch": "5.48.1", + "algoliasearch": "5.49.0", "ini": "6.0.0", "jsonc-parser": "3.3.1", "listr2": "9.0.5", diff --git a/packages/angular_devkit/build_angular/package.json b/packages/angular_devkit/build_angular/package.json index f557d8362da9..04423dceffd8 100644 --- a/packages/angular_devkit/build_angular/package.json +++ b/packages/angular_devkit/build_angular/package.json @@ -27,7 +27,7 @@ "babel-loader": "10.0.0", "browserslist": "^4.26.0", "copy-webpack-plugin": "13.0.1", - "css-loader": "7.1.3", + "css-loader": "7.1.4", "esbuild-wasm": "0.27.3", "http-proxy-middleware": "3.0.5", "istanbul-lib-instrument": "6.0.3", @@ -43,7 +43,7 @@ "picomatch": "4.0.3", "piscina": "5.1.4", "postcss": "8.5.6", - "postcss-loader": "8.2.0", + "postcss-loader": "8.2.1", "resolve-url-loader": "5.0.0", "rxjs": "7.8.2", "sass": "1.97.3", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 65a1b3421df4..36413fbb745d 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -161,11 +161,11 @@ importers: specifier: ^1.1.5 version: 1.1.9 '@typescript-eslint/eslint-plugin': - specifier: 8.55.0 - version: 8.55.0(@typescript-eslint/parser@8.55.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) + specifier: 8.56.0 + version: 8.56.0(@typescript-eslint/parser@8.56.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) '@typescript-eslint/parser': - specifier: 8.55.0 - version: 8.55.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) + specifier: 8.56.0 + version: 8.56.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) ajv: specifier: 8.18.0 version: 8.18.0 @@ -189,7 +189,7 @@ importers: version: 3.1.1(eslint@9.39.2(jiti@2.6.1)) eslint-plugin-import: specifier: 2.32.0 - version: 2.32.0(@typescript-eslint/parser@8.55.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1)) + version: 2.32.0(@typescript-eslint/parser@8.56.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1)) express: specifier: 5.2.1 version: 5.2.1 @@ -389,8 +389,8 @@ importers: specifier: 5.1.4 version: 5.1.4 rolldown: - specifier: 1.0.0-rc.4 - version: 1.0.0-rc.4 + specifier: 1.0.0-rc.5 + version: 1.0.0-rc.5 sass: specifier: 1.97.3 version: 1.97.3 @@ -469,8 +469,8 @@ importers: specifier: 1.1.0 version: 1.1.0 algoliasearch: - specifier: 5.48.1 - version: 5.48.1 + specifier: 5.49.0 + version: 5.49.0 ini: specifier: 6.0.0 version: 6.0.0 @@ -626,8 +626,8 @@ importers: specifier: 13.0.1 version: 13.0.1(webpack@5.105.2(esbuild@0.27.3)) css-loader: - specifier: 7.1.3 - version: 7.1.3(webpack@5.105.2(esbuild@0.27.3)) + specifier: 7.1.4 + version: 7.1.4(webpack@5.105.2(esbuild@0.27.3)) esbuild-wasm: specifier: 0.27.3 version: 0.27.3 @@ -674,8 +674,8 @@ importers: specifier: 8.5.6 version: 8.5.6 postcss-loader: - specifier: 8.2.0 - version: 8.2.0(postcss@8.5.6)(typescript@5.9.3)(webpack@5.105.2(esbuild@0.27.3)) + specifier: 8.2.1 + version: 8.2.1(postcss@8.5.6)(typescript@5.9.3)(webpack@5.105.2(esbuild@0.27.3)) resolve-url-loader: specifier: 5.0.0 version: 5.0.0 @@ -884,60 +884,60 @@ packages: '@actions/io@3.0.2': resolution: {integrity: sha512-nRBchcMM+QK1pdjO7/idu86rbJI5YHUKCvKs0KxnSYbVe3F51UfGxuZX4Qy/fWlp6l7gWFwIkrOzN+oUK03kfw==} - '@algolia/abtesting@1.14.1': - resolution: {integrity: sha512-Dkj0BgPiLAaim9sbQ97UKDFHJE/880wgStAM18U++NaJ/2Cws34J5731ovJifr6E3Pv4T2CqvMXf8qLCC417Ew==} + '@algolia/abtesting@1.15.0': + resolution: {integrity: sha512-D1QZ8dQx5zC9yrxNao9ER9bojmmzUdL1i2P9waIRiwnZ5fI26YswcCd6VHR/Q4W3PASfVf2My4YQ2FhGGDewTQ==} engines: {node: '>= 14.0.0'} - '@algolia/client-abtesting@5.48.1': - resolution: {integrity: sha512-LV5qCJdj+/m9I+Aj91o+glYszrzd7CX6NgKaYdTOj4+tUYfbS62pwYgUfZprYNayhkQpVFcrW8x8ZlIHpS23Vw==} + '@algolia/client-abtesting@5.49.0': + resolution: {integrity: sha512-Q1MSRhh4Du9WeLIl1S9O+BDUMaL01uuQtmzCyEzOBtu1xBDr3wvqrTJtfEceEkA5/Nw1BdGSHa6sDT3xTAF90A==} engines: {node: '>= 14.0.0'} - '@algolia/client-analytics@5.48.1': - resolution: {integrity: sha512-/AVoMqHhPm14CcHq7mwB+bUJbfCv+jrxlNvRjXAuO+TQa+V37N8k1b0ijaRBPdmSjULMd8KtJbQyUyabXOu6Kg==} + '@algolia/client-analytics@5.49.0': + resolution: {integrity: sha512-v50elhC80oyQw+8o8BwM+VvPuOo36+3W8VCfR4hsHoafQtGbMtP63U5eNcUydbVsM0py3JLoBaL1yKBK4L01sg==} engines: {node: '>= 14.0.0'} - '@algolia/client-common@5.48.1': - resolution: {integrity: sha512-VXO+qu2Ep6ota28ktvBm3sG53wUHS2n7bgLWmce5jTskdlCD0/JrV4tnBm1l7qpla1CeoQb8D7ShFhad+UoSOw==} + '@algolia/client-common@5.49.0': + resolution: {integrity: sha512-BDmVDtpDvymfLE5YQ2cPnfWJUVTDJqwpJa03Fsb7yJFJmbeKsUOGsnRkYsTbdzf0FfcvyvBB5zdcbrAIL249bg==} engines: {node: '>= 14.0.0'} - '@algolia/client-insights@5.48.1': - resolution: {integrity: sha512-zl+Qyb0nLg+Y5YvKp1Ij+u9OaPaKg2/EPzTwKNiVyOHnQJlFxmXyUZL1EInczAZsEY8hVpPCLtNfhMhfxluXKQ==} + '@algolia/client-insights@5.49.0': + resolution: {integrity: sha512-lDCXsnZDx7zQ5GzSi1EL3l07EbksjrdpMgixFRCdi2QqeBe42HIQJfPPqdWtwrAXjORRopsPx2z+gGYJP/79Uw==} engines: {node: '>= 14.0.0'} - '@algolia/client-personalization@5.48.1': - resolution: {integrity: sha512-r89Qf9Oo9mKWQXumRu/1LtvVJAmEDpn8mHZMc485pRfQUMAwSSrsnaw1tQ3sszqzEgAr1c7rw6fjBI+zrAXTOw==} + '@algolia/client-personalization@5.49.0': + resolution: {integrity: sha512-5k/KB+DsnesNKvMUEwTKSzExOf5zYbiPg7DVO7g1Y/+bhMb3wmxp9RFwfqwPfmoRTjptqvwhR6a0593tWVkmAw==} engines: {node: '>= 14.0.0'} - '@algolia/client-query-suggestions@5.48.1': - resolution: {integrity: sha512-TPKNPKfghKG/bMSc7mQYD9HxHRUkBZA4q1PEmHgICaSeHQscGqL4wBrKkhfPlDV1uYBKW02pbFMUhsOt7p4ZpA==} + '@algolia/client-query-suggestions@5.49.0': + resolution: {integrity: sha512-pjHNcrdjn7p3RQ5Ql1Baiwfdn9bkS+z4gqONJJP8kuZFqYP8Olthy4G7fl5bCB29UjdUj5EWlaElQKCtPluCtQ==} engines: {node: '>= 14.0.0'} - '@algolia/client-search@5.48.1': - resolution: {integrity: sha512-4Fu7dnzQyQmMFknYwTiN/HxPbH4DyxvQ1m+IxpPp5oslOgz8m6PG5qhiGbqJzH4HiT1I58ecDiCAC716UyVA8Q==} + '@algolia/client-search@5.49.0': + resolution: {integrity: sha512-uGv2P3lcviuaZy8ZOAyN60cZdhOVyjXwaDC27a1qdp3Pb5Azn+lLSJwkHU4TNRpphHmIei9HZuUxwQroujdPjw==} engines: {node: '>= 14.0.0'} - '@algolia/ingestion@1.48.1': - resolution: {integrity: sha512-/RFq3TqtXDUUawwic/A9xylA2P3LDMO8dNhphHAUOU51b1ZLHrmZ6YYJm3df1APz7xLY1aht6okCQf+/vmrV9w==} + '@algolia/ingestion@1.49.0': + resolution: {integrity: sha512-sH10mftYlmvfGbvAgTtHYbCIstmNUdiAkX//0NAyBcJRB6NnZmNsdLxdFGbE8ZqlGXzoe0zcUIau+DxKpXtqCw==} engines: {node: '>= 14.0.0'} - '@algolia/monitoring@1.48.1': - resolution: {integrity: sha512-Of0jTeAZRyRhC7XzDSjJef0aBkgRcvRAaw0ooYRlOw57APii7lZdq+layuNdeL72BRq1snaJhoMMwkmLIpJScw==} + '@algolia/monitoring@1.49.0': + resolution: {integrity: sha512-RqhGcVVxLpK+lA0GZKywlQIXsI704flc12nv/hOdrwiuk/Uyhxs46KLM4ngip7wutU+7t0PYZWiVayrqBPN/ZQ==} engines: {node: '>= 14.0.0'} - '@algolia/recommend@5.48.1': - resolution: {integrity: sha512-bE7JcpFXzxF5zHwj/vkl2eiCBvyR1zQ7aoUdO+GDXxGp0DGw7nI0p8Xj6u8VmRQ+RDuPcICFQcCwRIJT5tDJFw==} + '@algolia/recommend@5.49.0': + resolution: {integrity: sha512-kg8omGRvmIPhhqtUqSIpS3regFKWuoWh3WqyUhGk27N4T7q8I++8TsDYsV8vK7oBEzw706m2vUBtN5fw2fDjmw==} engines: {node: '>= 14.0.0'} - '@algolia/requester-browser-xhr@5.48.1': - resolution: {integrity: sha512-MK3wZ2koLDnvH/AmqIF1EKbJlhRS5j74OZGkLpxI4rYvNi9Jn/C7vb5DytBnQ4KUWts7QsmbdwHkxY5txQHXVw==} + '@algolia/requester-browser-xhr@5.49.0': + resolution: {integrity: sha512-BaZ6NTI9VdSbDcsMucdKhTuFFxv6B+3dAZZBozX12fKopYsELh7dBLfZwm8evDCIicmNjIjobi4VNnNshrCSuw==} engines: {node: '>= 14.0.0'} - '@algolia/requester-fetch@5.48.1': - resolution: {integrity: sha512-2oDT43Y5HWRSIQMPQI4tA/W+TN/N2tjggZCUsqQV440kxzzoPGsvv9QP1GhQ4CoDa+yn6ygUsGp6Dr+a9sPPSg==} + '@algolia/requester-fetch@5.49.0': + resolution: {integrity: sha512-2nxISxS5xO5DLAj6QzMImgJv6CqpZhJVkhcTFULESR/k4IpbkJTEHmViVTxw9MlrU8B5GfwHevFd7vKL3a7MXQ==} engines: {node: '>= 14.0.0'} - '@algolia/requester-node-http@5.48.1': - resolution: {integrity: sha512-xcaCqbhupVWhuBP1nwbk1XNvwrGljozutEiLx06mvqDf3o8cHyEgQSHS4fKJM+UAggaWVnnFW+Nne5aQ8SUJXg==} + '@algolia/requester-node-http@5.49.0': + resolution: {integrity: sha512-S/B94C6piEUXGpN3y5ysmNKMEqdfNVAXYY+FxivEAV5IGJjbEuLZfT8zPPZUWGw9vh6lgP80Hye2G5aVBNIa8Q==} engines: {node: '>= 14.0.0'} '@ampproject/remapping@2.3.0': @@ -2979,8 +2979,8 @@ packages: resolution: {integrity: sha512-R5R9tb2AXs2IRLNKLBJDynhkfmx7mX0vi8NkhZb3gUkPWHn6HXk5J8iQ/dql0U3ApfWym4kXXmBDRGO+oeOfjg==} engines: {node: '>=14'} - '@oxc-project/types@0.113.0': - resolution: {integrity: sha512-Tp3XmgxwNQ9pEN9vxgJBAqdRamHibi76iowQ38O2I4PMpcvNRQNVsU2n1x1nv9yh0XoTrGFzf7cZSGxmixxrhA==} + '@oxc-project/types@0.114.0': + resolution: {integrity: sha512-//nBfbzHQHvJs8oFIjv6coZ6uxQ4alLfiPe6D5vit6c4pmxATHHlVwgB1k+Hv4yoAMyncdxgRBF5K4BYWUCzvA==} '@parcel/watcher-android-arm64@2.5.6': resolution: {integrity: sha512-YQxSS34tPF/6ZG7r/Ih9xy+kP/WwediEUsqmtf0cuCV5TPPKw/PQHRhueUo6JdeFJaqV3pyjm0GdYjZotbRt/A==} @@ -3166,89 +3166,89 @@ packages: engines: {node: '>=18'} hasBin: true - '@rolldown/binding-android-arm64@1.0.0-rc.4': - resolution: {integrity: sha512-vRq9f4NzvbdZavhQbjkJBx7rRebDKYR9zHfO/Wg486+I7bSecdUapzCm5cyXoK+LHokTxgSq7A5baAXUZkIz0w==} + '@rolldown/binding-android-arm64@1.0.0-rc.5': + resolution: {integrity: sha512-zCEmUrt1bggwgBgeKLxNj217J1OrChrp3jJt24VK9jAharSTeVaHODNL+LpcQVhRz+FktYWfT9cjo5oZ99ZLpg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [android] - '@rolldown/binding-darwin-arm64@1.0.0-rc.4': - resolution: {integrity: sha512-kFgEvkWLqt3YCgKB5re9RlIrx9bRsvyVUnaTakEpOPuLGzLpLapYxE9BufJNvPg8GjT6mB1alN4yN1NjzoeM8Q==} + '@rolldown/binding-darwin-arm64@1.0.0-rc.5': + resolution: {integrity: sha512-ZP9xb9lPAex36pvkNWCjSEJW/Gfdm9I3ssiqOFLmpZ/vosPXgpoGxCmh+dX1Qs+/bWQE6toNFXWWL8vYoKoK9Q==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [darwin] - '@rolldown/binding-darwin-x64@1.0.0-rc.4': - resolution: {integrity: sha512-JXmaOJGsL/+rsmMfutcDjxWM2fTaVgCHGoXS7nE8Z3c9NAYjGqHvXrAhMUZvMpHS/k7Mg+X7n/MVKb7NYWKKww==} + '@rolldown/binding-darwin-x64@1.0.0-rc.5': + resolution: {integrity: sha512-7IdrPunf6dp9mywMgTOKMMGDnMHQ6+h5gRl6LW8rhD8WK2kXX0IwzcM5Zc0B5J7xQs8QWOlKjv8BJsU/1CD3pg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [darwin] - '@rolldown/binding-freebsd-x64@1.0.0-rc.4': - resolution: {integrity: sha512-ep3Catd6sPnHTM0P4hNEvIv5arnDvk01PfyJIJ+J3wVCG1eEaPo09tvFqdtcaTrkwQy0VWR24uz+cb4IsK53Qw==} + '@rolldown/binding-freebsd-x64@1.0.0-rc.5': + resolution: {integrity: sha512-o/JCk+dL0IN68EBhZ4DqfsfvxPfMeoM6cJtxORC1YYoxGHZyth2Kb2maXDb4oddw2wu8iIbnYXYPEzBtAF5CAg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [freebsd] - '@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.4': - resolution: {integrity: sha512-LwA5ayKIpnsgXJEwWc3h8wPiS33NMIHd9BhsV92T8VetVAbGe2qXlJwNVDGHN5cOQ22R9uYvbrQir2AB+ntT2w==} + '@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.5': + resolution: {integrity: sha512-IIBwTtA6VwxQLcEgq2mfrUgam7VvPZjhd/jxmeS1npM+edWsrrpRLHUdze+sk4rhb8/xpP3flemgcZXXUW6ukw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [linux] - '@rolldown/binding-linux-arm64-gnu@1.0.0-rc.4': - resolution: {integrity: sha512-AC1WsGdlV1MtGay/OQ4J9T7GRadVnpYRzTcygV1hKnypbYN20Yh4t6O1Sa2qRBMqv1etulUknqXjc3CTIsBu6A==} + '@rolldown/binding-linux-arm64-gnu@1.0.0-rc.5': + resolution: {integrity: sha512-KSol1De1spMZL+Xg7K5IBWXIvRWv7+pveaxFWXpezezAG7CS6ojzRjtCGCiLxQricutTAi/LkNWKMsd2wNhMKQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] libc: [glibc] - '@rolldown/binding-linux-arm64-musl@1.0.0-rc.4': - resolution: {integrity: sha512-lU+6rgXXViO61B4EudxtVMXSOfiZONR29Sys5VGSetUY7X8mg9FCKIIjcPPj8xNDeYzKl+H8F/qSKOBVFJChCQ==} + '@rolldown/binding-linux-arm64-musl@1.0.0-rc.5': + resolution: {integrity: sha512-WFljyDkxtXRlWxMjxeegf7xMYXxUr8u7JdXlOEWKYgDqEgxUnSEsVDxBiNWQ1D5kQKwf8Wo4sVKEYPRhCdsjwA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] libc: [musl] - '@rolldown/binding-linux-x64-gnu@1.0.0-rc.4': - resolution: {integrity: sha512-DZaN1f0PGp/bSvKhtw50pPsnln4T13ycDq1FrDWRiHmWt1JeW+UtYg9touPFf8yt993p8tS2QjybpzKNTxYEwg==} + '@rolldown/binding-linux-x64-gnu@1.0.0-rc.5': + resolution: {integrity: sha512-CUlplTujmbDWp2gamvrqVKi2Or8lmngXT1WxsizJfts7JrvfGhZObciaY/+CbdbS9qNnskvwMZNEhTPrn7b+WA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] libc: [glibc] - '@rolldown/binding-linux-x64-musl@1.0.0-rc.4': - resolution: {integrity: sha512-RnGxwZLN7fhMMAItnD6dZ7lvy+TI7ba+2V54UF4dhaWa/p8I/ys1E73KO6HmPmgz92ZkfD8TXS1IMV8+uhbR9g==} + '@rolldown/binding-linux-x64-musl@1.0.0-rc.5': + resolution: {integrity: sha512-wdf7g9NbVZCeAo2iGhsjJb7I8ZFfs6X8bumfrWg82VK+8P6AlLXwk48a1ASiJQDTS7Svq2xVzZg3sGO2aXpHRA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] libc: [musl] - '@rolldown/binding-openharmony-arm64@1.0.0-rc.4': - resolution: {integrity: sha512-6lcI79+X8klGiGd8yHuTgQRjuuJYNggmEml+RsyN596P23l/zf9FVmJ7K0KVKkFAeYEdg0iMUKyIxiV5vebDNQ==} + '@rolldown/binding-openharmony-arm64@1.0.0-rc.5': + resolution: {integrity: sha512-0CWY7ubu12nhzz+tkpHjoG3IRSTlWYe0wrfJRf4qqjqQSGtAYgoL9kwzdvlhaFdZ5ffVeyYw9qLsChcjUMEloQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [openharmony] - '@rolldown/binding-wasm32-wasi@1.0.0-rc.4': - resolution: {integrity: sha512-wz7ohsKCAIWy91blZ/1FlpPdqrsm1xpcEOQVveWoL6+aSPKL4VUcoYmmzuLTssyZxRpEwzuIxL/GDsvpjaBtOw==} + '@rolldown/binding-wasm32-wasi@1.0.0-rc.5': + resolution: {integrity: sha512-LztXnGzv6t2u830mnZrFLRVqT/DPJ9DL4ZTz/y93rqUVkeHjMMYIYaFj+BUthiYxbVH9dH0SZYufETspKY/NhA==} engines: {node: '>=14.0.0'} cpu: [wasm32] - '@rolldown/binding-win32-arm64-msvc@1.0.0-rc.4': - resolution: {integrity: sha512-cfiMrfuWCIgsFmcVG0IPuO6qTRHvF7NuG3wngX1RZzc6dU8FuBFb+J3MIR5WrdTNozlumfgL4cvz+R4ozBCvsQ==} + '@rolldown/binding-win32-arm64-msvc@1.0.0-rc.5': + resolution: {integrity: sha512-jUct1XVeGtyjqJXEAfvdFa8xoigYZ2rge7nYEm70ppQxpfH9ze2fbIrpHmP2tNM2vL/F6Dd0CpXhpjPbC6bSxQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [win32] - '@rolldown/binding-win32-x64-msvc@1.0.0-rc.4': - resolution: {integrity: sha512-p6UeR9y7ht82AH57qwGuFYn69S6CZ7LLKdCKy/8T3zS9VTrJei2/CGsTUV45Da4Z9Rbhc7G4gyWQ/Ioamqn09g==} + '@rolldown/binding-win32-x64-msvc@1.0.0-rc.5': + resolution: {integrity: sha512-VQ8F9ld5gw29epjnVGdrx8ugiLTe8BMqmhDYy7nGbdeDo4HAt4bgdZvLbViEhg7DZyHLpiEUlO5/jPSUrIuxRQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [win32] - '@rolldown/pluginutils@1.0.0-rc.4': - resolution: {integrity: sha512-1BrrmTu0TWfOP1riA8uakjFc9bpIUGzVKETsOtzY39pPga8zELGDl8eu1Dx7/gjM5CAz14UknsUMpBO8L+YntQ==} + '@rolldown/pluginutils@1.0.0-rc.5': + resolution: {integrity: sha512-RxlLX/DPoarZ9PtxVrQgZhPoor987YtKQqCo5zkjX+0S0yLJ7Vv515Wk6+xtTL67VONKJKxETWZwuZjss2idYw==} '@rollup/plugin-alias@6.0.0': resolution: {integrity: sha512-tPCzJOtS7uuVZd+xPhoy5W4vThe6KWXNmsFCNktaAh5RTqcLiSfT4huPQIXkgJ6YCOjJHvecOAzQxLFhPxKr+g==} @@ -3812,63 +3812,67 @@ packages: '@types/yauzl@2.10.3': resolution: {integrity: sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==} - '@typescript-eslint/eslint-plugin@8.55.0': - resolution: {integrity: sha512-1y/MVSz0NglV1ijHC8OT49mPJ4qhPYjiK08YUQVbIOyu+5k862LKUHFkpKHWu//zmr7hDR2rhwUm6gnCGNmGBQ==} + '@typescript-eslint/eslint-plugin@8.56.0': + resolution: {integrity: sha512-lRyPDLzNCuae71A3t9NEINBiTn7swyOhvUj3MyUOxb8x6g6vPEFoOU+ZRmGMusNC3X3YMhqMIX7i8ShqhT74Pw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - '@typescript-eslint/parser': ^8.55.0 - eslint: ^8.57.0 || ^9.0.0 + '@typescript-eslint/parser': ^8.56.0 + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/parser@8.55.0': - resolution: {integrity: sha512-4z2nCSBfVIMnbuu8uinj+f0o4qOeggYJLbjpPHka3KH1om7e+H9yLKTYgksTaHcGco+NClhhY2vyO3HsMH1RGw==} + '@typescript-eslint/parser@8.56.0': + resolution: {integrity: sha512-IgSWvLobTDOjnaxAfDTIHaECbkNlAlKv2j5SjpB2v7QHKv1FIfjwMy8FsDbVfDX/KjmCmYICcw7uGaXLhtsLNg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - eslint: ^8.57.0 || ^9.0.0 + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/project-service@8.55.0': - resolution: {integrity: sha512-zRcVVPFUYWa3kNnjaZGXSu3xkKV1zXy8M4nO/pElzQhFweb7PPtluDLQtKArEOGmjXoRjnUZ29NjOiF0eCDkcQ==} + '@typescript-eslint/project-service@8.56.0': + resolution: {integrity: sha512-M3rnyL1vIQOMeWxTWIW096/TtVP+8W3p/XnaFflhmcFp+U4zlxUxWj4XwNs6HbDeTtN4yun0GNTTDBw/SvufKg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/scope-manager@8.55.0': - resolution: {integrity: sha512-fVu5Omrd3jeqeQLiB9f1YsuK/iHFOwb04bCtY4BSCLgjNbOD33ZdV6KyEqplHr+IlpgT0QTZ/iJ+wT7hvTx49Q==} + '@typescript-eslint/scope-manager@8.56.0': + resolution: {integrity: sha512-7UiO/XwMHquH+ZzfVCfUNkIXlp/yQjjnlYUyYz7pfvlK3/EyyN6BK+emDmGNyQLBtLGaYrTAI6KOw8tFucWL2w==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/tsconfig-utils@8.55.0': - resolution: {integrity: sha512-1R9cXqY7RQd7WuqSN47PK9EDpgFUK3VqdmbYrvWJZYDd0cavROGn+74ktWBlmJ13NXUQKlZ/iAEQHI/V0kKe0Q==} + '@typescript-eslint/tsconfig-utils@8.56.0': + resolution: {integrity: sha512-bSJoIIt4o3lKXD3xmDh9chZcjCz5Lk8xS7Rxn+6l5/pKrDpkCwtQNQQwZ2qRPk7TkUYhrq3WPIHXOXlbXP0itg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/type-utils@8.55.0': - resolution: {integrity: sha512-x1iH2unH4qAt6I37I2CGlsNs+B9WGxurP2uyZLRz6UJoZWDBx9cJL1xVN/FiOmHEONEg6RIufdvyT0TEYIgC5g==} + '@typescript-eslint/type-utils@8.56.0': + resolution: {integrity: sha512-qX2L3HWOU2nuDs6GzglBeuFXviDODreS58tLY/BALPC7iu3Fa+J7EOTwnX9PdNBxUI7Uh0ntP0YWGnxCkXzmfA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - eslint: ^8.57.0 || ^9.0.0 + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 typescript: '>=4.8.4 <6.0.0' '@typescript-eslint/types@8.55.0': resolution: {integrity: sha512-ujT0Je8GI5BJWi+/mMoR0wxwVEQaxM+pi30xuMiJETlX80OPovb2p9E8ss87gnSVtYXtJoU9U1Cowcr6w2FE0w==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/typescript-estree@8.55.0': - resolution: {integrity: sha512-EwrH67bSWdx/3aRQhCoxDaHM+CrZjotc2UCCpEDVqfCE+7OjKAGWNY2HsCSTEVvWH2clYQK8pdeLp42EVs+xQw==} + '@typescript-eslint/types@8.56.0': + resolution: {integrity: sha512-DBsLPs3GsWhX5HylbP9HNG15U0bnwut55Lx12bHB9MpXxQ+R5GC8MwQe+N1UFXxAeQDvEsEDY6ZYwX03K7Z6HQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@typescript-eslint/typescript-estree@8.56.0': + resolution: {integrity: sha512-ex1nTUMWrseMltXUHmR2GAQ4d+WjkZCT4f+4bVsps8QEdh0vlBsaCokKTPlnqBFqqGaxilDNJG7b8dolW2m43Q==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/utils@8.55.0': - resolution: {integrity: sha512-BqZEsnPGdYpgyEIkDC1BadNY8oMwckftxBT+C8W0g1iKPdeqKZBtTfnvcq0nf60u7MkjFO8RBvpRGZBPw4L2ow==} + '@typescript-eslint/utils@8.56.0': + resolution: {integrity: sha512-RZ3Qsmi2nFGsS+n+kjLAYDPVlrzf7UhTffrDIKr+h2yzAlYP/y5ZulU0yeDEPItos2Ph46JAL5P/On3pe7kDIQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - eslint: ^8.57.0 || ^9.0.0 + eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/visitor-keys@8.55.0': - resolution: {integrity: sha512-AxNRwEie8Nn4eFS1FzDMJWIISMGoXMb037sgCBJ3UR6o0fQTzr2tqN9WT+DkWJPhIdQCfV7T6D387566VtnCJA==} + '@typescript-eslint/visitor-keys@8.56.0': + resolution: {integrity: sha512-q+SL+b+05Ud6LbEE35qe4A99P+htKTKVbyiNEe45eCbJFyh/HVK9QXwlrbz+Q4L8SOW4roxSVwXYj4DMBT7Ieg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@verdaccio/auth@8.0.0-next-8.29': @@ -4187,8 +4191,8 @@ packages: ajv@8.18.0: resolution: {integrity: sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==} - algoliasearch@5.48.1: - resolution: {integrity: sha512-Rf7xmeuIo7nb6S4mp4abW2faW8DauZyE2faBIKFaUfP3wnpOvNSbiI5AwVhqBNj0jPgBWEvhyCu0sLjN2q77Rg==} + algoliasearch@5.49.0: + resolution: {integrity: sha512-Tse7vx7WOvbU+kpq/L3BrBhSWTPbtMa59zIEhMn+Z2NoxZlpcCRUDCRxQ7kDFs1T3CHxDgvb+mDuILiBBpBaAA==} engines: {node: '>= 14.0.0'} ansi-colors@4.1.3: @@ -4924,11 +4928,11 @@ packages: resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} engines: {node: '>= 8'} - css-loader@7.1.3: - resolution: {integrity: sha512-frbERmjT0UC5lMheWpJmMilnt9GEhbZJN/heUb7/zaJYeIzj5St9HvDcfshzzOqbsS+rYpMk++2SD3vGETDSyA==} + css-loader@7.1.4: + resolution: {integrity: sha512-vv3J9tlOl04WjiMvHQI/9tmIrCxVrj6PFbHemBB1iihpeRbi/I4h033eoFIhwxBBqLhI0KYFS7yvynBFhIZfTw==} engines: {node: '>= 18.12.0'} peerDependencies: - '@rspack/core': 0.x || 1.x + '@rspack/core': 0.x || ^1.0.0 || ^2.0.0-0 webpack: ^5.27.0 peerDependenciesMeta: '@rspack/core': @@ -5450,6 +5454,10 @@ packages: resolution: {integrity: sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + eslint-visitor-keys@5.0.0: + resolution: {integrity: sha512-A0XeIi7CXU7nPlfHS9loMYEKxUaONu/hTEzHTGba9Huu94Cq1hPivf+DE5erJozZOky0LfvXAyrV/tcswpLI0Q==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} + eslint@9.39.2: resolution: {integrity: sha512-LEyamqS7W5HB3ujJyvi0HQK/dtVINZvd5mAAp9eT5S/ujByGjiZLCzPcHVzuXbpJDJF/cxwHlfceVUDZ2lnSTw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -7609,11 +7617,11 @@ packages: resolution: {integrity: sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==} engines: {node: '>= 0.4'} - postcss-loader@8.2.0: - resolution: {integrity: sha512-tHX+RkpsXVcc7st4dSdDGliI+r4aAQDuv+v3vFYHixb6YgjreG5AG4SEB0kDK8u2s6htqEEpKlkhSBUTvWKYnA==} + postcss-loader@8.2.1: + resolution: {integrity: sha512-k98jtRzthjj3f76MYTs9JTpRqV1RaaMhEU0Lpw9OTmQZQdppg4B30VZ74BojuBHt3F4KyubHJoXCMUeM8Bqeow==} engines: {node: '>= 18.12.0'} peerDependencies: - '@rspack/core': 0.x || 1.x + '@rspack/core': 0.x || ^1.0.0 || ^2.0.0-0 postcss: ^7.0.0 || ^8.0.1 webpack: ^5.0.0 peerDependenciesMeta: @@ -7984,8 +7992,8 @@ packages: resolution: {integrity: sha512-l0OE8wL34P4nJH/H2ffoaniAokM2qSmrtXHmlpvYr5AVVX8msAyW0l8NVJFDxlSK4u3Uh/f41cQheDVdnYijwQ==} hasBin: true - rolldown@1.0.0-rc.4: - resolution: {integrity: sha512-V2tPDUrY3WSevrvU2E41ijZlpF+5PbZu4giH+VpNraaadsJGHa4fR6IFwsocVwEXDoAdIv5qgPPxgrvKAOIPtA==} + rolldown@1.0.0-rc.5: + resolution: {integrity: sha512-0AdalTs6hNTioaCYIkAa7+xsmHBfU5hCNclZnM/lp7lGGDuUOb6N4BVNtwiomybbencDjq/waKjTImqiGCs5sw==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true @@ -9383,89 +9391,89 @@ snapshots: '@actions/io@3.0.2': {} - '@algolia/abtesting@1.14.1': + '@algolia/abtesting@1.15.0': dependencies: - '@algolia/client-common': 5.48.1 - '@algolia/requester-browser-xhr': 5.48.1 - '@algolia/requester-fetch': 5.48.1 - '@algolia/requester-node-http': 5.48.1 + '@algolia/client-common': 5.49.0 + '@algolia/requester-browser-xhr': 5.49.0 + '@algolia/requester-fetch': 5.49.0 + '@algolia/requester-node-http': 5.49.0 - '@algolia/client-abtesting@5.48.1': + '@algolia/client-abtesting@5.49.0': dependencies: - '@algolia/client-common': 5.48.1 - '@algolia/requester-browser-xhr': 5.48.1 - '@algolia/requester-fetch': 5.48.1 - '@algolia/requester-node-http': 5.48.1 + '@algolia/client-common': 5.49.0 + '@algolia/requester-browser-xhr': 5.49.0 + '@algolia/requester-fetch': 5.49.0 + '@algolia/requester-node-http': 5.49.0 - '@algolia/client-analytics@5.48.1': + '@algolia/client-analytics@5.49.0': dependencies: - '@algolia/client-common': 5.48.1 - '@algolia/requester-browser-xhr': 5.48.1 - '@algolia/requester-fetch': 5.48.1 - '@algolia/requester-node-http': 5.48.1 + '@algolia/client-common': 5.49.0 + '@algolia/requester-browser-xhr': 5.49.0 + '@algolia/requester-fetch': 5.49.0 + '@algolia/requester-node-http': 5.49.0 - '@algolia/client-common@5.48.1': {} + '@algolia/client-common@5.49.0': {} - '@algolia/client-insights@5.48.1': + '@algolia/client-insights@5.49.0': dependencies: - '@algolia/client-common': 5.48.1 - '@algolia/requester-browser-xhr': 5.48.1 - '@algolia/requester-fetch': 5.48.1 - '@algolia/requester-node-http': 5.48.1 + '@algolia/client-common': 5.49.0 + '@algolia/requester-browser-xhr': 5.49.0 + '@algolia/requester-fetch': 5.49.0 + '@algolia/requester-node-http': 5.49.0 - '@algolia/client-personalization@5.48.1': + '@algolia/client-personalization@5.49.0': dependencies: - '@algolia/client-common': 5.48.1 - '@algolia/requester-browser-xhr': 5.48.1 - '@algolia/requester-fetch': 5.48.1 - '@algolia/requester-node-http': 5.48.1 + '@algolia/client-common': 5.49.0 + '@algolia/requester-browser-xhr': 5.49.0 + '@algolia/requester-fetch': 5.49.0 + '@algolia/requester-node-http': 5.49.0 - '@algolia/client-query-suggestions@5.48.1': + '@algolia/client-query-suggestions@5.49.0': dependencies: - '@algolia/client-common': 5.48.1 - '@algolia/requester-browser-xhr': 5.48.1 - '@algolia/requester-fetch': 5.48.1 - '@algolia/requester-node-http': 5.48.1 + '@algolia/client-common': 5.49.0 + '@algolia/requester-browser-xhr': 5.49.0 + '@algolia/requester-fetch': 5.49.0 + '@algolia/requester-node-http': 5.49.0 - '@algolia/client-search@5.48.1': + '@algolia/client-search@5.49.0': dependencies: - '@algolia/client-common': 5.48.1 - '@algolia/requester-browser-xhr': 5.48.1 - '@algolia/requester-fetch': 5.48.1 - '@algolia/requester-node-http': 5.48.1 + '@algolia/client-common': 5.49.0 + '@algolia/requester-browser-xhr': 5.49.0 + '@algolia/requester-fetch': 5.49.0 + '@algolia/requester-node-http': 5.49.0 - '@algolia/ingestion@1.48.1': + '@algolia/ingestion@1.49.0': dependencies: - '@algolia/client-common': 5.48.1 - '@algolia/requester-browser-xhr': 5.48.1 - '@algolia/requester-fetch': 5.48.1 - '@algolia/requester-node-http': 5.48.1 + '@algolia/client-common': 5.49.0 + '@algolia/requester-browser-xhr': 5.49.0 + '@algolia/requester-fetch': 5.49.0 + '@algolia/requester-node-http': 5.49.0 - '@algolia/monitoring@1.48.1': + '@algolia/monitoring@1.49.0': dependencies: - '@algolia/client-common': 5.48.1 - '@algolia/requester-browser-xhr': 5.48.1 - '@algolia/requester-fetch': 5.48.1 - '@algolia/requester-node-http': 5.48.1 + '@algolia/client-common': 5.49.0 + '@algolia/requester-browser-xhr': 5.49.0 + '@algolia/requester-fetch': 5.49.0 + '@algolia/requester-node-http': 5.49.0 - '@algolia/recommend@5.48.1': + '@algolia/recommend@5.49.0': dependencies: - '@algolia/client-common': 5.48.1 - '@algolia/requester-browser-xhr': 5.48.1 - '@algolia/requester-fetch': 5.48.1 - '@algolia/requester-node-http': 5.48.1 + '@algolia/client-common': 5.49.0 + '@algolia/requester-browser-xhr': 5.49.0 + '@algolia/requester-fetch': 5.49.0 + '@algolia/requester-node-http': 5.49.0 - '@algolia/requester-browser-xhr@5.48.1': + '@algolia/requester-browser-xhr@5.49.0': dependencies: - '@algolia/client-common': 5.48.1 + '@algolia/client-common': 5.49.0 - '@algolia/requester-fetch@5.48.1': + '@algolia/requester-fetch@5.49.0': dependencies: - '@algolia/client-common': 5.48.1 + '@algolia/client-common': 5.49.0 - '@algolia/requester-node-http@5.48.1': + '@algolia/requester-node-http@5.49.0': dependencies: - '@algolia/client-common': 5.48.1 + '@algolia/client-common': 5.49.0 '@ampproject/remapping@2.3.0': dependencies: @@ -11778,7 +11786,7 @@ snapshots: '@opentelemetry/semantic-conventions@1.39.0': {} - '@oxc-project/types@0.113.0': {} + '@oxc-project/types@0.114.0': {} '@parcel/watcher-android-arm64@2.5.6': optional: true @@ -11994,48 +12002,48 @@ snapshots: - react-native-b4a - supports-color - '@rolldown/binding-android-arm64@1.0.0-rc.4': + '@rolldown/binding-android-arm64@1.0.0-rc.5': optional: true - '@rolldown/binding-darwin-arm64@1.0.0-rc.4': + '@rolldown/binding-darwin-arm64@1.0.0-rc.5': optional: true - '@rolldown/binding-darwin-x64@1.0.0-rc.4': + '@rolldown/binding-darwin-x64@1.0.0-rc.5': optional: true - '@rolldown/binding-freebsd-x64@1.0.0-rc.4': + '@rolldown/binding-freebsd-x64@1.0.0-rc.5': optional: true - '@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.4': + '@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.5': optional: true - '@rolldown/binding-linux-arm64-gnu@1.0.0-rc.4': + '@rolldown/binding-linux-arm64-gnu@1.0.0-rc.5': optional: true - '@rolldown/binding-linux-arm64-musl@1.0.0-rc.4': + '@rolldown/binding-linux-arm64-musl@1.0.0-rc.5': optional: true - '@rolldown/binding-linux-x64-gnu@1.0.0-rc.4': + '@rolldown/binding-linux-x64-gnu@1.0.0-rc.5': optional: true - '@rolldown/binding-linux-x64-musl@1.0.0-rc.4': + '@rolldown/binding-linux-x64-musl@1.0.0-rc.5': optional: true - '@rolldown/binding-openharmony-arm64@1.0.0-rc.4': + '@rolldown/binding-openharmony-arm64@1.0.0-rc.5': optional: true - '@rolldown/binding-wasm32-wasi@1.0.0-rc.4': + '@rolldown/binding-wasm32-wasi@1.0.0-rc.5': dependencies: '@napi-rs/wasm-runtime': 1.1.1 optional: true - '@rolldown/binding-win32-arm64-msvc@1.0.0-rc.4': + '@rolldown/binding-win32-arm64-msvc@1.0.0-rc.5': optional: true - '@rolldown/binding-win32-x64-msvc@1.0.0-rc.4': + '@rolldown/binding-win32-x64-msvc@1.0.0-rc.5': optional: true - '@rolldown/pluginutils@1.0.0-rc.4': {} + '@rolldown/pluginutils@1.0.0-rc.5': {} '@rollup/plugin-alias@6.0.0(rollup@4.57.1)': optionalDependencies: @@ -12609,14 +12617,14 @@ snapshots: '@types/node': 22.19.11 optional: true - '@typescript-eslint/eslint-plugin@8.55.0(@typescript-eslint/parser@8.55.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)': + '@typescript-eslint/eslint-plugin@8.56.0(@typescript-eslint/parser@8.56.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)': dependencies: '@eslint-community/regexpp': 4.12.2 - '@typescript-eslint/parser': 8.55.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/scope-manager': 8.55.0 - '@typescript-eslint/type-utils': 8.55.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/utils': 8.55.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/visitor-keys': 8.55.0 + '@typescript-eslint/parser': 8.56.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/scope-manager': 8.56.0 + '@typescript-eslint/type-utils': 8.56.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/utils': 8.56.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/visitor-keys': 8.56.0 eslint: 9.39.2(jiti@2.6.1) ignore: 7.0.5 natural-compare: 1.4.0 @@ -12625,41 +12633,41 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.55.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)': + '@typescript-eslint/parser@8.56.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)': dependencies: - '@typescript-eslint/scope-manager': 8.55.0 - '@typescript-eslint/types': 8.55.0 - '@typescript-eslint/typescript-estree': 8.55.0(typescript@5.9.3) - '@typescript-eslint/visitor-keys': 8.55.0 + '@typescript-eslint/scope-manager': 8.56.0 + '@typescript-eslint/types': 8.56.0 + '@typescript-eslint/typescript-estree': 8.56.0(typescript@5.9.3) + '@typescript-eslint/visitor-keys': 8.56.0 debug: 4.4.3(supports-color@10.2.2) eslint: 9.39.2(jiti@2.6.1) typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/project-service@8.55.0(typescript@5.9.3)': + '@typescript-eslint/project-service@8.56.0(typescript@5.9.3)': dependencies: - '@typescript-eslint/tsconfig-utils': 8.55.0(typescript@5.9.3) - '@typescript-eslint/types': 8.55.0 + '@typescript-eslint/tsconfig-utils': 8.56.0(typescript@5.9.3) + '@typescript-eslint/types': 8.56.0 debug: 4.4.3(supports-color@10.2.2) typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/scope-manager@8.55.0': + '@typescript-eslint/scope-manager@8.56.0': dependencies: - '@typescript-eslint/types': 8.55.0 - '@typescript-eslint/visitor-keys': 8.55.0 + '@typescript-eslint/types': 8.56.0 + '@typescript-eslint/visitor-keys': 8.56.0 - '@typescript-eslint/tsconfig-utils@8.55.0(typescript@5.9.3)': + '@typescript-eslint/tsconfig-utils@8.56.0(typescript@5.9.3)': dependencies: typescript: 5.9.3 - '@typescript-eslint/type-utils@8.55.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)': + '@typescript-eslint/type-utils@8.56.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)': dependencies: - '@typescript-eslint/types': 8.55.0 - '@typescript-eslint/typescript-estree': 8.55.0(typescript@5.9.3) - '@typescript-eslint/utils': 8.55.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/types': 8.56.0 + '@typescript-eslint/typescript-estree': 8.56.0(typescript@5.9.3) + '@typescript-eslint/utils': 8.56.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) debug: 4.4.3(supports-color@10.2.2) eslint: 9.39.2(jiti@2.6.1) ts-api-utils: 2.4.0(typescript@5.9.3) @@ -12669,12 +12677,14 @@ snapshots: '@typescript-eslint/types@8.55.0': {} - '@typescript-eslint/typescript-estree@8.55.0(typescript@5.9.3)': + '@typescript-eslint/types@8.56.0': {} + + '@typescript-eslint/typescript-estree@8.56.0(typescript@5.9.3)': dependencies: - '@typescript-eslint/project-service': 8.55.0(typescript@5.9.3) - '@typescript-eslint/tsconfig-utils': 8.55.0(typescript@5.9.3) - '@typescript-eslint/types': 8.55.0 - '@typescript-eslint/visitor-keys': 8.55.0 + '@typescript-eslint/project-service': 8.56.0(typescript@5.9.3) + '@typescript-eslint/tsconfig-utils': 8.56.0(typescript@5.9.3) + '@typescript-eslint/types': 8.56.0 + '@typescript-eslint/visitor-keys': 8.56.0 debug: 4.4.3(supports-color@10.2.2) minimatch: 9.0.5 semver: 7.7.4 @@ -12684,21 +12694,21 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.55.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)': + '@typescript-eslint/utils@8.56.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)': dependencies: '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.2(jiti@2.6.1)) - '@typescript-eslint/scope-manager': 8.55.0 - '@typescript-eslint/types': 8.55.0 - '@typescript-eslint/typescript-estree': 8.55.0(typescript@5.9.3) + '@typescript-eslint/scope-manager': 8.56.0 + '@typescript-eslint/types': 8.56.0 + '@typescript-eslint/typescript-estree': 8.56.0(typescript@5.9.3) eslint: 9.39.2(jiti@2.6.1) typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/visitor-keys@8.55.0': + '@typescript-eslint/visitor-keys@8.56.0': dependencies: - '@typescript-eslint/types': 8.55.0 - eslint-visitor-keys: 4.2.1 + '@typescript-eslint/types': 8.56.0 + eslint-visitor-keys: 5.0.0 '@verdaccio/auth@8.0.0-next-8.29': dependencies: @@ -13258,22 +13268,22 @@ snapshots: json-schema-traverse: 1.0.0 require-from-string: 2.0.2 - algoliasearch@5.48.1: - dependencies: - '@algolia/abtesting': 1.14.1 - '@algolia/client-abtesting': 5.48.1 - '@algolia/client-analytics': 5.48.1 - '@algolia/client-common': 5.48.1 - '@algolia/client-insights': 5.48.1 - '@algolia/client-personalization': 5.48.1 - '@algolia/client-query-suggestions': 5.48.1 - '@algolia/client-search': 5.48.1 - '@algolia/ingestion': 1.48.1 - '@algolia/monitoring': 1.48.1 - '@algolia/recommend': 5.48.1 - '@algolia/requester-browser-xhr': 5.48.1 - '@algolia/requester-fetch': 5.48.1 - '@algolia/requester-node-http': 5.48.1 + algoliasearch@5.49.0: + dependencies: + '@algolia/abtesting': 1.15.0 + '@algolia/client-abtesting': 5.49.0 + '@algolia/client-analytics': 5.49.0 + '@algolia/client-common': 5.49.0 + '@algolia/client-insights': 5.49.0 + '@algolia/client-personalization': 5.49.0 + '@algolia/client-query-suggestions': 5.49.0 + '@algolia/client-search': 5.49.0 + '@algolia/ingestion': 1.49.0 + '@algolia/monitoring': 1.49.0 + '@algolia/recommend': 5.49.0 + '@algolia/requester-browser-xhr': 5.49.0 + '@algolia/requester-fetch': 5.49.0 + '@algolia/requester-node-http': 5.49.0 ansi-colors@4.1.3: {} @@ -14107,7 +14117,7 @@ snapshots: shebang-command: 2.0.0 which: 2.0.2 - css-loader@7.1.3(webpack@5.105.2(esbuild@0.27.3)): + css-loader@7.1.4(webpack@5.105.2(esbuild@0.27.3)): dependencies: icss-utils: 5.1.0(postcss@8.5.6) postcss: 8.5.6 @@ -14627,11 +14637,11 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-module-utils@2.12.1(@typescript-eslint/parser@8.55.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint@9.39.2(jiti@2.6.1)): + eslint-module-utils@2.12.1(@typescript-eslint/parser@8.56.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint@9.39.2(jiti@2.6.1)): dependencies: debug: 3.2.7 optionalDependencies: - '@typescript-eslint/parser': 8.55.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/parser': 8.56.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) eslint: 9.39.2(jiti@2.6.1) eslint-import-resolver-node: 0.3.9 transitivePeerDependencies: @@ -14641,7 +14651,7 @@ snapshots: dependencies: eslint: 9.39.2(jiti@2.6.1) - eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.55.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1)): + eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.56.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1)): dependencies: '@rtsao/scc': 1.1.0 array-includes: 3.1.9 @@ -14652,7 +14662,7 @@ snapshots: doctrine: 2.1.0 eslint: 9.39.2(jiti@2.6.1) eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.55.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint@9.39.2(jiti@2.6.1)) + eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.56.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint@9.39.2(jiti@2.6.1)) hasown: 2.0.2 is-core-module: 2.16.1 is-glob: 4.0.3 @@ -14664,7 +14674,7 @@ snapshots: string.prototype.trimend: 1.0.9 tsconfig-paths: 3.15.0 optionalDependencies: - '@typescript-eslint/parser': 8.55.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/parser': 8.56.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) transitivePeerDependencies: - eslint-import-resolver-typescript - eslint-import-resolver-webpack @@ -14684,6 +14694,8 @@ snapshots: eslint-visitor-keys@4.2.1: {} + eslint-visitor-keys@5.0.0: {} + eslint@9.39.2(jiti@2.6.1): dependencies: '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.2(jiti@2.6.1)) @@ -14875,7 +14887,7 @@ snapshots: extract-zip@2.0.1: dependencies: - debug: 4.3.4 + debug: 4.4.3(supports-color@10.2.2) get-stream: 5.2.0 yauzl: 2.10.0 optionalDependencies: @@ -17180,7 +17192,7 @@ snapshots: possible-typed-array-names@1.1.0: {} - postcss-loader@8.2.0(postcss@8.5.6)(typescript@5.9.3)(webpack@5.105.2(esbuild@0.27.3)): + postcss-loader@8.2.1(postcss@8.5.6)(typescript@5.9.3)(webpack@5.105.2(esbuild@0.27.3)): dependencies: cosmiconfig: 9.0.0(typescript@5.9.3) jiti: 2.6.1 @@ -17649,24 +17661,24 @@ snapshots: dependencies: glob: 10.5.0 - rolldown@1.0.0-rc.4: + rolldown@1.0.0-rc.5: dependencies: - '@oxc-project/types': 0.113.0 - '@rolldown/pluginutils': 1.0.0-rc.4 + '@oxc-project/types': 0.114.0 + '@rolldown/pluginutils': 1.0.0-rc.5 optionalDependencies: - '@rolldown/binding-android-arm64': 1.0.0-rc.4 - '@rolldown/binding-darwin-arm64': 1.0.0-rc.4 - '@rolldown/binding-darwin-x64': 1.0.0-rc.4 - '@rolldown/binding-freebsd-x64': 1.0.0-rc.4 - '@rolldown/binding-linux-arm-gnueabihf': 1.0.0-rc.4 - '@rolldown/binding-linux-arm64-gnu': 1.0.0-rc.4 - '@rolldown/binding-linux-arm64-musl': 1.0.0-rc.4 - '@rolldown/binding-linux-x64-gnu': 1.0.0-rc.4 - '@rolldown/binding-linux-x64-musl': 1.0.0-rc.4 - '@rolldown/binding-openharmony-arm64': 1.0.0-rc.4 - '@rolldown/binding-wasm32-wasi': 1.0.0-rc.4 - '@rolldown/binding-win32-arm64-msvc': 1.0.0-rc.4 - '@rolldown/binding-win32-x64-msvc': 1.0.0-rc.4 + '@rolldown/binding-android-arm64': 1.0.0-rc.5 + '@rolldown/binding-darwin-arm64': 1.0.0-rc.5 + '@rolldown/binding-darwin-x64': 1.0.0-rc.5 + '@rolldown/binding-freebsd-x64': 1.0.0-rc.5 + '@rolldown/binding-linux-arm-gnueabihf': 1.0.0-rc.5 + '@rolldown/binding-linux-arm64-gnu': 1.0.0-rc.5 + '@rolldown/binding-linux-arm64-musl': 1.0.0-rc.5 + '@rolldown/binding-linux-x64-gnu': 1.0.0-rc.5 + '@rolldown/binding-linux-x64-musl': 1.0.0-rc.5 + '@rolldown/binding-openharmony-arm64': 1.0.0-rc.5 + '@rolldown/binding-wasm32-wasi': 1.0.0-rc.5 + '@rolldown/binding-win32-arm64-msvc': 1.0.0-rc.5 + '@rolldown/binding-win32-x64-msvc': 1.0.0-rc.5 rollup-license-plugin@3.1.0: dependencies: From 03a9f6171a385efd9c655af9b268ced34ca177e9 Mon Sep 17 00:00:00 2001 From: Angular Robot Date: Thu, 19 Feb 2026 06:24:19 +0000 Subject: [PATCH 006/226] build: update bazel dependencies See associated pull request for more information. --- MODULE.bazel | 4 ++-- MODULE.bazel.lock | 61 ++++++++++++++++++++++++----------------------- 2 files changed, 33 insertions(+), 32 deletions(-) diff --git a/MODULE.bazel b/MODULE.bazel index 6319eab04ecc..1a5f10000030 100644 --- a/MODULE.bazel +++ b/MODULE.bazel @@ -10,7 +10,7 @@ bazel_dep(name = "rules_nodejs", version = "6.7.3") bazel_dep(name = "aspect_rules_js", version = "2.9.2") bazel_dep(name = "aspect_rules_ts", version = "3.8.4") bazel_dep(name = "rules_pkg", version = "1.2.0") -bazel_dep(name = "rules_cc", version = "0.2.16") +bazel_dep(name = "rules_cc", version = "0.2.17") bazel_dep(name = "aspect_bazel_lib", version = "2.22.5") bazel_dep(name = "bazel_skylib", version = "1.9.0") bazel_dep(name = "aspect_rules_esbuild", version = "0.25.0") @@ -39,7 +39,7 @@ git_override( bazel_dep(name = "rules_browsers") git_override( module_name = "rules_browsers", - commit = "e08ae33c679d07b3b2fcc136658b787a81995bc5", + commit = "ceb52751831f3e6249aba83f688a612e57a8d14a", remote = "https://github.com/devversion/rules_browsers.git", ) diff --git a/MODULE.bazel.lock b/MODULE.bazel.lock index f5e172b989cd..622f17361f69 100644 --- a/MODULE.bazel.lock +++ b/MODULE.bazel.lock @@ -123,7 +123,8 @@ "https://bcr.bazel.build/modules/rules_cc/0.0.9/MODULE.bazel": "836e76439f354b89afe6a911a7adf59a6b2518fafb174483ad78a2a2fde7b1c5", "https://bcr.bazel.build/modules/rules_cc/0.1.1/MODULE.bazel": "2f0222a6f229f0bf44cd711dc13c858dad98c62d52bd51d8fc3a764a83125513", "https://bcr.bazel.build/modules/rules_cc/0.2.16/MODULE.bazel": "9242fa89f950c6ef7702801ab53922e99c69b02310c39fb6e62b2bd30df2a1d4", - "https://bcr.bazel.build/modules/rules_cc/0.2.16/source.json": "d03d5cde49376d87e14ec14b666c56075e5e3926930327fd5d0484a1ff2ac1cc", + "https://bcr.bazel.build/modules/rules_cc/0.2.17/MODULE.bazel": "1849602c86cb60da8613d2de887f9566a6d354a6df6d7009f9d04a14402f9a84", + "https://bcr.bazel.build/modules/rules_cc/0.2.17/source.json": "3832f45d145354049137c0090df04629d9c2b5493dc5c2bf46f1834040133a07", "https://bcr.bazel.build/modules/rules_foreign_cc/0.9.0/MODULE.bazel": "c9e8c682bf75b0e7c704166d79b599f93b72cfca5ad7477df596947891feeef6", "https://bcr.bazel.build/modules/rules_fuzzing/0.5.2/MODULE.bazel": "40c97d1144356f52905566c55811f13b299453a14ac7769dfba2ac38192337a8", "https://bcr.bazel.build/modules/rules_fuzzing/0.5.2/source.json": "c8b1e2c717646f1702290959a3302a178fb639d987ab61d548105019f11e527e", @@ -569,9 +570,9 @@ "@@aspect_rules_ts+//ts:extensions.bzl%ext": { "general": { "bzlTransitiveDigest": "QDTi1Wl/eEY4IgbXjRhegUQfHj+bB8ZEVyiSGLZc6qo=", - "usagesDigest": "aaqqxEFKCRGFkeAf0pKmXvZZTLGYIk3pQsDFG28ZbNg=", + "usagesDigest": "ohKYRsVTeRZRfv+0QiN+5H2ycAbbirey745XNBkWqkk=", "recordedFileInputs": { - "@@rules_browsers+//package.json": "84dc1ba9b1c667a25894e97218bd8f247d54f24bb694efb397a881be3c06a4c5" + "@@rules_browsers+//package.json": "772d873d450a539e2133635aeb5e63744cf1cec86e6b37aeecd9267a147fb0d7" }, "recordedDirentsInputs": {}, "envVariables": {}, @@ -736,8 +737,8 @@ }, "@@rules_browsers+//browsers:extensions.bzl%browsers": { "general": { - "bzlTransitiveDigest": "agkaLQ8wE1r/5IX6pkERzFxI/z0M42Em+ICNO6TXsVo=", - "usagesDigest": "FS7q5WaIwg3KirS3njhuPFkTIBYvDaTInVGrlzu0XL8=", + "bzlTransitiveDigest": "Bm6fiKpWy96aLohOlLCP36ARVxRLZm/R+smhsb2HzmI=", + "usagesDigest": "FmXYJVoVJlnfUU8x8gObSvu4qWcco/9Faw61aC/wBF0=", "recordedFileInputs": {}, "recordedDirentsInputs": {}, "envVariables": {}, @@ -745,9 +746,9 @@ "rules_browsers_chrome_linux": { "repoRuleId": "@@rules_browsers+//browsers/private:browser_repo.bzl%browser_repo", "attributes": { - "sha256": "0a2ff0fc9eb5958b7b420f20e3968f424be7423fef89739e71565a48aa073a57", + "sha256": "1ac33f89306327af43be159c03ca4a26486de0858f42fe52394acdef50364143", "urls": [ - "https://storage.googleapis.com/chrome-for-testing-public/145.0.7586.0/linux64/chrome-headless-shell-linux64.zip" + "https://storage.googleapis.com/chrome-for-testing-public/147.0.7687.0/linux64/chrome-headless-shell-linux64.zip" ], "named_files": { "CHROME-HEADLESS-SHELL": "chrome-headless-shell-linux64/chrome-headless-shell" @@ -763,9 +764,9 @@ "rules_browsers_chrome_mac": { "repoRuleId": "@@rules_browsers+//browsers/private:browser_repo.bzl%browser_repo", "attributes": { - "sha256": "e6076b1201d86f74c5eab982a239d5af83e66b1aa4d780bcb792698790e01d87", + "sha256": "169ff49c465cfda52931395e61861e146dfc5013e92c01ca792db5acea858d0b", "urls": [ - "https://storage.googleapis.com/chrome-for-testing-public/145.0.7586.0/mac-x64/chrome-headless-shell-mac-x64.zip" + "https://storage.googleapis.com/chrome-for-testing-public/147.0.7687.0/mac-x64/chrome-headless-shell-mac-x64.zip" ], "named_files": { "CHROME-HEADLESS-SHELL": "chrome-headless-shell-mac-x64/chrome-headless-shell" @@ -781,9 +782,9 @@ "rules_browsers_chrome_mac_arm": { "repoRuleId": "@@rules_browsers+//browsers/private:browser_repo.bzl%browser_repo", "attributes": { - "sha256": "b74dbcf5543d916b02d0a133e2e7c6a4de251f06733f72c2c15ea8c42213f63b", + "sha256": "aeaaaaa4d68193a21bed04c44ddeb1230232707b4ea1d845a92925787509cd8e", "urls": [ - "https://storage.googleapis.com/chrome-for-testing-public/145.0.7586.0/mac-arm64/chrome-headless-shell-mac-arm64.zip" + "https://storage.googleapis.com/chrome-for-testing-public/147.0.7687.0/mac-arm64/chrome-headless-shell-mac-arm64.zip" ], "named_files": { "CHROME-HEADLESS-SHELL": "chrome-headless-shell-mac-arm64/chrome-headless-shell" @@ -799,9 +800,9 @@ "rules_browsers_chrome_win64": { "repoRuleId": "@@rules_browsers+//browsers/private:browser_repo.bzl%browser_repo", "attributes": { - "sha256": "df1e612dc3b1615e182a1f11821052995913c39df37caa52699de21a68d030d2", + "sha256": "4d6d79bcbcb22084df6e3a3d3a2caff67d6c0fa488d63f0c7ec1526f9553db8c", "urls": [ - "https://storage.googleapis.com/chrome-for-testing-public/145.0.7586.0/win64/chrome-headless-shell-win64.zip" + "https://storage.googleapis.com/chrome-for-testing-public/147.0.7687.0/win64/chrome-headless-shell-win64.zip" ], "named_files": { "CHROME-HEADLESS-SHELL": "chrome-headless-shell-win64/chrome-headless-shell.exe" @@ -817,9 +818,9 @@ "rules_browsers_chromedriver_linux": { "repoRuleId": "@@rules_browsers+//browsers/private:browser_repo.bzl%browser_repo", "attributes": { - "sha256": "69c504306399d979a2766fea603c3fb9d3d87d46c75bddc9f2a049b4f636d57c", + "sha256": "0607ccf6810a07ae08cac6443beac8b23f88dd53c7f1e0299e22d65f7cd2d020", "urls": [ - "https://storage.googleapis.com/chrome-for-testing-public/145.0.7586.0/linux64/chromedriver-linux64.zip" + "https://storage.googleapis.com/chrome-for-testing-public/147.0.7687.0/linux64/chromedriver-linux64.zip" ], "named_files": { "CHROMEDRIVER": "chromedriver-linux64/chromedriver" @@ -833,9 +834,9 @@ "rules_browsers_chromedriver_mac": { "repoRuleId": "@@rules_browsers+//browsers/private:browser_repo.bzl%browser_repo", "attributes": { - "sha256": "5fc9d6f594fc5f2568a15145f25116dd8e9c9a60baa8da4bb21a17650fb00e7e", + "sha256": "0f512a9dd683ed4c41e609d8d02c07807497dbad3ab2f95f0d583486be7b8cff", "urls": [ - "https://storage.googleapis.com/chrome-for-testing-public/145.0.7586.0/mac-x64/chromedriver-mac-x64.zip" + "https://storage.googleapis.com/chrome-for-testing-public/147.0.7687.0/mac-x64/chromedriver-mac-x64.zip" ], "named_files": { "CHROMEDRIVER": "chromedriver-mac-x64/chromedriver" @@ -849,9 +850,9 @@ "rules_browsers_chromedriver_mac_arm": { "repoRuleId": "@@rules_browsers+//browsers/private:browser_repo.bzl%browser_repo", "attributes": { - "sha256": "14e92294c2c3639ca4e7d27e850588b619d698e2f8905cee368f07db2e1bf1e9", + "sha256": "7d6fc6d17de1733eb6739d1ea16d085c8df1568bcf9fa0d130c2784b27f38268", "urls": [ - "https://storage.googleapis.com/chrome-for-testing-public/145.0.7586.0/mac-arm64/chromedriver-mac-arm64.zip" + "https://storage.googleapis.com/chrome-for-testing-public/147.0.7687.0/mac-arm64/chromedriver-mac-arm64.zip" ], "named_files": { "CHROMEDRIVER": "chromedriver-mac-arm64/chromedriver" @@ -865,9 +866,9 @@ "rules_browsers_chromedriver_win64": { "repoRuleId": "@@rules_browsers+//browsers/private:browser_repo.bzl%browser_repo", "attributes": { - "sha256": "cf641d2e176db95bcc158cd90eafd347ad4928fa0458a5f3bfd56c6d983e70db", + "sha256": "f4e9fb7bbf692fde7979b24e8d737b3cef4baafbc7a370e5d0abc4a8450fd830", "urls": [ - "https://storage.googleapis.com/chrome-for-testing-public/145.0.7586.0/win64/chromedriver-win64.zip" + "https://storage.googleapis.com/chrome-for-testing-public/147.0.7687.0/win64/chromedriver-win64.zip" ], "named_files": { "CHROMEDRIVER": "chromedriver-win64/chromedriver.exe" @@ -881,9 +882,9 @@ "rules_browsers_firefox_linux": { "repoRuleId": "@@rules_browsers+//browsers/private:browser_repo.bzl%browser_repo", "attributes": { - "sha256": "8d56f479cc398a537a60a3fa20dca92d8a41925113d3a67f534881a4e4d7e344", + "sha256": "f055b9c0d7346a10d22edc7f10e08679af2ea495367381ab2be9cab3ec6add97", "urls": [ - "https://archive.mozilla.org/pub/firefox/releases/146.0/linux-x86_64/en-US/firefox-146.0.tar.xz" + "https://archive.mozilla.org/pub/firefox/releases/147.0/linux-x86_64/en-US/firefox-147.0.tar.xz" ], "named_files": { "FIREFOX": "firefox/firefox" @@ -897,9 +898,9 @@ "rules_browsers_firefox_mac": { "repoRuleId": "@@rules_browsers+//browsers/private:browser_repo.bzl%browser_repo", "attributes": { - "sha256": "4b1645313887972d466cd82166ea571485c2c40a167f84624e3f3ca739993cc9", + "sha256": "48485e2068bc726e2f30cf5855fc2da1fc75c1272bc243a5394f428ffae3ba35", "urls": [ - "https://archive.mozilla.org/pub/firefox/releases/146.0/mac/en-US/Firefox%20146.0.dmg" + "https://archive.mozilla.org/pub/firefox/releases/147.0/mac/en-US/Firefox%20147.0.dmg" ], "named_files": { "FIREFOX": "Firefox.app/Contents/MacOS/firefox" @@ -913,9 +914,9 @@ "rules_browsers_firefox_mac_arm": { "repoRuleId": "@@rules_browsers+//browsers/private:browser_repo.bzl%browser_repo", "attributes": { - "sha256": "4b1645313887972d466cd82166ea571485c2c40a167f84624e3f3ca739993cc9", + "sha256": "48485e2068bc726e2f30cf5855fc2da1fc75c1272bc243a5394f428ffae3ba35", "urls": [ - "https://archive.mozilla.org/pub/firefox/releases/146.0/mac/en-US/Firefox%20146.0.dmg" + "https://archive.mozilla.org/pub/firefox/releases/147.0/mac/en-US/Firefox%20147.0.dmg" ], "named_files": { "FIREFOX": "Firefox.app/Contents/MacOS/firefox" @@ -929,9 +930,9 @@ "rules_browsers_firefox_win64": { "repoRuleId": "@@rules_browsers+//browsers/private:browser_repo.bzl%browser_repo", "attributes": { - "sha256": "216870c89648f32450cfefb5cec417fcd66d480d5dc83f894bf99f5fd7f38dbb", + "sha256": "36ff9e150875aa48a0af9eec3eb67f66dddd8efac5c743265371a72ae3e796c4", "urls": [ - "https://archive.mozilla.org/pub/firefox/releases/146.0/win64/en-US/Firefox%20Setup%20146.0.exe" + "https://archive.mozilla.org/pub/firefox/releases/147.0/win64/en-US/Firefox%20Setup%20147.0.exe" ], "named_files": { "FIREFOX": "core/firefox.exe" @@ -1096,7 +1097,7 @@ "@@rules_nodejs+//nodejs:extensions.bzl%node": { "general": { "bzlTransitiveDigest": "4pUxCNc22K4I+6+4Nxu52Hur12tFRfa1JMsN5mdDv60=", - "usagesDigest": "6UAmdIABVpqhlkQ3A3NGscf00ds9dFEt+lei3DibyqM=", + "usagesDigest": "BxQILRYtZBkSbwwkUXnkloHvZv0UiwvjlwQz3yuF97Q=", "recordedFileInputs": {}, "recordedDirentsInputs": {}, "envVariables": {}, From 5508eb4d937ba05dc8742466507dbec781a8ea09 Mon Sep 17 00:00:00 2001 From: Angular Robot Date: Fri, 20 Feb 2026 14:18:39 +0000 Subject: [PATCH 007/226] build: update cross-repo angular dependencies See associated pull request for more information. --- .../assistant-to-the-branch-manager.yml | 2 +- .github/workflows/ci.yml | 52 ++-- .github/workflows/dev-infra.yml | 4 +- .github/workflows/feature-requests.yml | 2 +- .github/workflows/perf.yml | 6 +- .github/workflows/pr.yml | 44 +-- MODULE.bazel | 2 +- MODULE.bazel.lock | 5 +- package.json | 28 +- packages/angular/ssr/package.json | 12 +- packages/ngtools/webpack/package.json | 4 +- pnpm-lock.yaml | 282 +++++++++--------- tests/e2e/ng-snapshot/package.json | 32 +- 13 files changed, 237 insertions(+), 238 deletions(-) diff --git a/.github/workflows/assistant-to-the-branch-manager.yml b/.github/workflows/assistant-to-the-branch-manager.yml index 6e0a4cb8c7d7..360352c2454d 100644 --- a/.github/workflows/assistant-to-the-branch-manager.yml +++ b/.github/workflows/assistant-to-the-branch-manager.yml @@ -17,6 +17,6 @@ jobs: - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 with: persist-credentials: false - - uses: angular/dev-infra/github-actions/branch-manager@469708f109a90884ca403d150d33079a3a5a8769 + - uses: angular/dev-infra/github-actions/branch-manager@e006a332028a4c3cb24e9d92437fac7ae99e2ed5 with: angular-robot-key: ${{ secrets.ANGULAR_ROBOT_PRIVATE_KEY }} diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 5f62362d4410..95341f797924 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -21,9 +21,9 @@ jobs: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@469708f109a90884ca403d150d33079a3a5a8769 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@e006a332028a4c3cb24e9d92437fac7ae99e2ed5 - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@469708f109a90884ca403d150d33079a3a5a8769 + uses: angular/dev-infra/github-actions/bazel/setup@e006a332028a4c3cb24e9d92437fac7ae99e2ed5 - name: Install node modules run: pnpm install --frozen-lockfile - name: Generate JSON schema types @@ -44,11 +44,11 @@ jobs: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@469708f109a90884ca403d150d33079a3a5a8769 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@e006a332028a4c3cb24e9d92437fac7ae99e2ed5 - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@469708f109a90884ca403d150d33079a3a5a8769 + uses: angular/dev-infra/github-actions/bazel/setup@e006a332028a4c3cb24e9d92437fac7ae99e2ed5 - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@469708f109a90884ca403d150d33079a3a5a8769 + uses: angular/dev-infra/github-actions/bazel/configure-remote@e006a332028a4c3cb24e9d92437fac7ae99e2ed5 with: google_credential: ${{ secrets.RBE_TRUSTED_BUILDS_USER }} - name: Install node modules @@ -61,11 +61,11 @@ jobs: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@469708f109a90884ca403d150d33079a3a5a8769 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@e006a332028a4c3cb24e9d92437fac7ae99e2ed5 - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@469708f109a90884ca403d150d33079a3a5a8769 + uses: angular/dev-infra/github-actions/bazel/setup@e006a332028a4c3cb24e9d92437fac7ae99e2ed5 - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@469708f109a90884ca403d150d33079a3a5a8769 + uses: angular/dev-infra/github-actions/bazel/configure-remote@e006a332028a4c3cb24e9d92437fac7ae99e2ed5 with: google_credential: ${{ secrets.RBE_TRUSTED_BUILDS_USER }} - name: Install node modules @@ -84,13 +84,13 @@ jobs: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@469708f109a90884ca403d150d33079a3a5a8769 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@e006a332028a4c3cb24e9d92437fac7ae99e2ed5 - name: Install node modules run: pnpm install --frozen-lockfile - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@469708f109a90884ca403d150d33079a3a5a8769 + uses: angular/dev-infra/github-actions/bazel/setup@e006a332028a4c3cb24e9d92437fac7ae99e2ed5 - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@469708f109a90884ca403d150d33079a3a5a8769 + uses: angular/dev-infra/github-actions/bazel/configure-remote@e006a332028a4c3cb24e9d92437fac7ae99e2ed5 with: google_credential: ${{ secrets.RBE_TRUSTED_BUILDS_USER }} - name: Run CLI E2E tests @@ -100,11 +100,11 @@ jobs: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@469708f109a90884ca403d150d33079a3a5a8769 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@e006a332028a4c3cb24e9d92437fac7ae99e2ed5 - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@469708f109a90884ca403d150d33079a3a5a8769 + uses: angular/dev-infra/github-actions/bazel/setup@e006a332028a4c3cb24e9d92437fac7ae99e2ed5 - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@469708f109a90884ca403d150d33079a3a5a8769 + uses: angular/dev-infra/github-actions/bazel/configure-remote@e006a332028a4c3cb24e9d92437fac7ae99e2ed5 with: google_credential: ${{ secrets.RBE_TRUSTED_BUILDS_USER }} - name: Install node modules @@ -137,7 +137,7 @@ jobs: runs-on: windows-2025 steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@469708f109a90884ca403d150d33079a3a5a8769 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@e006a332028a4c3cb24e9d92437fac7ae99e2ed5 - name: Install node modules run: pnpm install --frozen-lockfile - name: Download built Windows E2E tests @@ -164,13 +164,13 @@ jobs: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@469708f109a90884ca403d150d33079a3a5a8769 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@e006a332028a4c3cb24e9d92437fac7ae99e2ed5 - name: Install node modules run: pnpm install --frozen-lockfile - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@469708f109a90884ca403d150d33079a3a5a8769 + uses: angular/dev-infra/github-actions/bazel/setup@e006a332028a4c3cb24e9d92437fac7ae99e2ed5 - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@469708f109a90884ca403d150d33079a3a5a8769 + uses: angular/dev-infra/github-actions/bazel/configure-remote@e006a332028a4c3cb24e9d92437fac7ae99e2ed5 with: google_credential: ${{ secrets.RBE_TRUSTED_BUILDS_USER }} - name: Run CLI E2E tests @@ -188,13 +188,13 @@ jobs: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@469708f109a90884ca403d150d33079a3a5a8769 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@e006a332028a4c3cb24e9d92437fac7ae99e2ed5 - name: Install node modules run: pnpm install --frozen-lockfile - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@469708f109a90884ca403d150d33079a3a5a8769 + uses: angular/dev-infra/github-actions/bazel/setup@e006a332028a4c3cb24e9d92437fac7ae99e2ed5 - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@469708f109a90884ca403d150d33079a3a5a8769 + uses: angular/dev-infra/github-actions/bazel/configure-remote@e006a332028a4c3cb24e9d92437fac7ae99e2ed5 with: google_credential: ${{ secrets.RBE_TRUSTED_BUILDS_USER }} - name: Run CLI E2E tests @@ -208,13 +208,13 @@ jobs: SAUCE_TUNNEL_IDENTIFIER: angular-cli-${{ github.workflow }}-${{ github.run_number }} steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@469708f109a90884ca403d150d33079a3a5a8769 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@e006a332028a4c3cb24e9d92437fac7ae99e2ed5 - name: Install node modules run: pnpm install --frozen-lockfile - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@469708f109a90884ca403d150d33079a3a5a8769 + uses: angular/dev-infra/github-actions/bazel/setup@e006a332028a4c3cb24e9d92437fac7ae99e2ed5 - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@469708f109a90884ca403d150d33079a3a5a8769 + uses: angular/dev-infra/github-actions/bazel/configure-remote@e006a332028a4c3cb24e9d92437fac7ae99e2ed5 with: google_credential: ${{ secrets.RBE_TRUSTED_BUILDS_USER }} - name: Run E2E Browser tests @@ -244,11 +244,11 @@ jobs: CIRCLE_BRANCH: ${{ github.ref_name }} steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@469708f109a90884ca403d150d33079a3a5a8769 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@e006a332028a4c3cb24e9d92437fac7ae99e2ed5 - name: Install node modules run: pnpm install --frozen-lockfile - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@469708f109a90884ca403d150d33079a3a5a8769 + uses: angular/dev-infra/github-actions/bazel/setup@e006a332028a4c3cb24e9d92437fac7ae99e2ed5 - run: pnpm admin snapshots --verbose env: SNAPSHOT_BUILDS_GITHUB_TOKEN: ${{ secrets.SNAPSHOT_BUILDS_GITHUB_TOKEN }} diff --git a/.github/workflows/dev-infra.yml b/.github/workflows/dev-infra.yml index d8d2f0b7bb6c..48e6cba7bef2 100644 --- a/.github/workflows/dev-infra.yml +++ b/.github/workflows/dev-infra.yml @@ -13,13 +13,13 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - - uses: angular/dev-infra/github-actions/pull-request-labeling@469708f109a90884ca403d150d33079a3a5a8769 + - uses: angular/dev-infra/github-actions/pull-request-labeling@e006a332028a4c3cb24e9d92437fac7ae99e2ed5 with: angular-robot-key: ${{ secrets.ANGULAR_ROBOT_PRIVATE_KEY }} post_approval_changes: runs-on: ubuntu-latest steps: - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - - uses: angular/dev-infra/github-actions/post-approval-changes@469708f109a90884ca403d150d33079a3a5a8769 + - uses: angular/dev-infra/github-actions/post-approval-changes@e006a332028a4c3cb24e9d92437fac7ae99e2ed5 with: angular-robot-key: ${{ secrets.ANGULAR_ROBOT_PRIVATE_KEY }} diff --git a/.github/workflows/feature-requests.yml b/.github/workflows/feature-requests.yml index 4e22f1a5eda8..b0a3ed668d9f 100644 --- a/.github/workflows/feature-requests.yml +++ b/.github/workflows/feature-requests.yml @@ -16,6 +16,6 @@ jobs: if: github.repository == 'angular/angular-cli' runs-on: ubuntu-latest steps: - - uses: angular/dev-infra/github-actions/feature-request@469708f109a90884ca403d150d33079a3a5a8769 + - uses: angular/dev-infra/github-actions/feature-request@e006a332028a4c3cb24e9d92437fac7ae99e2ed5 with: angular-robot-key: ${{ secrets.ANGULAR_ROBOT_PRIVATE_KEY }} diff --git a/.github/workflows/perf.yml b/.github/workflows/perf.yml index 9dbf67608b8c..318ac9b9a2f6 100644 --- a/.github/workflows/perf.yml +++ b/.github/workflows/perf.yml @@ -23,7 +23,7 @@ jobs: workflows: ${{ steps.workflows.outputs.workflows }} steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@469708f109a90884ca403d150d33079a3a5a8769 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@e006a332028a4c3cb24e9d92437fac7ae99e2ed5 - name: Install node modules run: pnpm install --frozen-lockfile - id: workflows @@ -38,9 +38,9 @@ jobs: workflow: ${{ fromJSON(needs.list.outputs.workflows) }} steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@469708f109a90884ca403d150d33079a3a5a8769 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@e006a332028a4c3cb24e9d92437fac7ae99e2ed5 - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@469708f109a90884ca403d150d33079a3a5a8769 + uses: angular/dev-infra/github-actions/bazel/setup@e006a332028a4c3cb24e9d92437fac7ae99e2ed5 - name: Install node modules run: pnpm install --frozen-lockfile # We utilize the google-github-actions/auth action to allow us to get an active credential using workflow diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml index 12195b663fda..4da5d09424cc 100644 --- a/.github/workflows/pr.yml +++ b/.github/workflows/pr.yml @@ -34,9 +34,9 @@ jobs: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@469708f109a90884ca403d150d33079a3a5a8769 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@e006a332028a4c3cb24e9d92437fac7ae99e2ed5 - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@469708f109a90884ca403d150d33079a3a5a8769 + uses: angular/dev-infra/github-actions/bazel/setup@e006a332028a4c3cb24e9d92437fac7ae99e2ed5 - name: Setup ESLint Caching uses: actions/cache@cdf6c1fa76f9f475f3d7449005a359c84ca0f306 # v5.0.3 with: @@ -66,17 +66,17 @@ jobs: # it has been merged. run: pnpm ng-dev format changed --check ${{ github.event.pull_request.base.sha }} - name: Check Package Licenses - uses: angular/dev-infra/github-actions/linting/licenses@469708f109a90884ca403d150d33079a3a5a8769 + uses: angular/dev-infra/github-actions/linting/licenses@e006a332028a4c3cb24e9d92437fac7ae99e2ed5 build: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@469708f109a90884ca403d150d33079a3a5a8769 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@e006a332028a4c3cb24e9d92437fac7ae99e2ed5 - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@469708f109a90884ca403d150d33079a3a5a8769 + uses: angular/dev-infra/github-actions/bazel/setup@e006a332028a4c3cb24e9d92437fac7ae99e2ed5 - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@469708f109a90884ca403d150d33079a3a5a8769 + uses: angular/dev-infra/github-actions/bazel/configure-remote@e006a332028a4c3cb24e9d92437fac7ae99e2ed5 - name: Install node modules run: pnpm install --frozen-lockfile - name: Build release targets @@ -93,11 +93,11 @@ jobs: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@469708f109a90884ca403d150d33079a3a5a8769 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@e006a332028a4c3cb24e9d92437fac7ae99e2ed5 - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@469708f109a90884ca403d150d33079a3a5a8769 + uses: angular/dev-infra/github-actions/bazel/setup@e006a332028a4c3cb24e9d92437fac7ae99e2ed5 - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@469708f109a90884ca403d150d33079a3a5a8769 + uses: angular/dev-infra/github-actions/bazel/configure-remote@e006a332028a4c3cb24e9d92437fac7ae99e2ed5 - name: Install node modules run: pnpm install --frozen-lockfile - name: Run module and package tests @@ -114,13 +114,13 @@ jobs: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@469708f109a90884ca403d150d33079a3a5a8769 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@e006a332028a4c3cb24e9d92437fac7ae99e2ed5 - name: Install node modules run: pnpm install --frozen-lockfile - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@469708f109a90884ca403d150d33079a3a5a8769 + uses: angular/dev-infra/github-actions/bazel/setup@e006a332028a4c3cb24e9d92437fac7ae99e2ed5 - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@469708f109a90884ca403d150d33079a3a5a8769 + uses: angular/dev-infra/github-actions/bazel/configure-remote@e006a332028a4c3cb24e9d92437fac7ae99e2ed5 - name: Run CLI E2E tests run: pnpm bazel test --test_env=E2E_SHARD_TOTAL=6 --test_env=E2E_SHARD_INDEX=${{ matrix.shard }} --config=e2e //tests:e2e.${{ matrix.subset }}_node${{ matrix.node }} @@ -128,11 +128,11 @@ jobs: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@469708f109a90884ca403d150d33079a3a5a8769 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@e006a332028a4c3cb24e9d92437fac7ae99e2ed5 - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@469708f109a90884ca403d150d33079a3a5a8769 + uses: angular/dev-infra/github-actions/bazel/setup@e006a332028a4c3cb24e9d92437fac7ae99e2ed5 - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@469708f109a90884ca403d150d33079a3a5a8769 + uses: angular/dev-infra/github-actions/bazel/configure-remote@e006a332028a4c3cb24e9d92437fac7ae99e2ed5 - name: Install node modules run: pnpm install --frozen-lockfile - name: Build E2E tests for Windows on Linux @@ -156,7 +156,7 @@ jobs: runs-on: windows-2025 steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@469708f109a90884ca403d150d33079a3a5a8769 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@e006a332028a4c3cb24e9d92437fac7ae99e2ed5 - name: Install node modules run: pnpm install --frozen-lockfile - name: Download built Windows E2E tests @@ -183,13 +183,13 @@ jobs: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@469708f109a90884ca403d150d33079a3a5a8769 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@e006a332028a4c3cb24e9d92437fac7ae99e2ed5 - name: Install node modules run: pnpm install --frozen-lockfile - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@469708f109a90884ca403d150d33079a3a5a8769 + uses: angular/dev-infra/github-actions/bazel/setup@e006a332028a4c3cb24e9d92437fac7ae99e2ed5 - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@469708f109a90884ca403d150d33079a3a5a8769 + uses: angular/dev-infra/github-actions/bazel/configure-remote@e006a332028a4c3cb24e9d92437fac7ae99e2ed5 - name: Run CLI E2E tests run: pnpm bazel test --test_env=E2E_SHARD_TOTAL=3 --test_env=E2E_SHARD_INDEX=${{ matrix.shard }} --config=e2e //tests:e2e.${{ matrix.subset }}_node${{ matrix.node }} @@ -205,12 +205,12 @@ jobs: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@469708f109a90884ca403d150d33079a3a5a8769 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@e006a332028a4c3cb24e9d92437fac7ae99e2ed5 - name: Install node modules run: pnpm install --frozen-lockfile - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@469708f109a90884ca403d150d33079a3a5a8769 + uses: angular/dev-infra/github-actions/bazel/setup@e006a332028a4c3cb24e9d92437fac7ae99e2ed5 - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@469708f109a90884ca403d150d33079a3a5a8769 + uses: angular/dev-infra/github-actions/bazel/configure-remote@e006a332028a4c3cb24e9d92437fac7ae99e2ed5 - name: Run CLI E2E tests run: pnpm bazel test --test_env=E2E_SHARD_TOTAL=6 --test_env=E2E_SHARD_INDEX=${{ matrix.shard }} --config=e2e //tests:e2e.snapshots.${{ matrix.subset }}_node${{ matrix.node }} diff --git a/MODULE.bazel b/MODULE.bazel index 1a5f10000030..eb799bcbcbee 100644 --- a/MODULE.bazel +++ b/MODULE.bazel @@ -25,7 +25,7 @@ git_override( bazel_dep(name = "devinfra") git_override( module_name = "devinfra", - commit = "469708f109a90884ca403d150d33079a3a5a8769", + commit = "e006a332028a4c3cb24e9d92437fac7ae99e2ed5", remote = "https://github.com/angular/dev-infra.git", ) diff --git a/MODULE.bazel.lock b/MODULE.bazel.lock index 622f17361f69..68caea315d7d 100644 --- a/MODULE.bazel.lock +++ b/MODULE.bazel.lock @@ -30,7 +30,6 @@ "https://bcr.bazel.build/modules/aspect_rules_js/2.9.2/source.json": "4bff7c03ab387b60deb15649ba575688e62f2a71a7544cbc7a660b19ec473808", "https://bcr.bazel.build/modules/aspect_rules_ts/3.6.3/MODULE.bazel": "d09db394970f076176ce7bab5b5fa7f0d560fd4f30b8432ea5e2c2570505b130", "https://bcr.bazel.build/modules/aspect_rules_ts/3.7.0/MODULE.bazel": "5aace216caf88638950ef061245d23c36f57c8359e56e97f02a36f70bb09c50f", - "https://bcr.bazel.build/modules/aspect_rules_ts/3.8.3/MODULE.bazel": "a26c28ebcd0c0d50ab0708ac21fa48bd2dced3a4dad4c31a2fa48588b42ad762", "https://bcr.bazel.build/modules/aspect_rules_ts/3.8.4/MODULE.bazel": "a50254ac3add6232d0f9f93103836f9afaf614315589a13abf74183982c4101d", "https://bcr.bazel.build/modules/aspect_rules_ts/3.8.4/source.json": "f786e0763f3ea5de7ea6d4c4e38fccb48bf4d9c5eafaf95091c0e1590502510e", "https://bcr.bazel.build/modules/aspect_tools_telemetry/0.2.3/MODULE.bazel": "20f53b145f40957a51077ae90b37b7ce83582a1daf9350349f0f86179e19dd0d", @@ -416,7 +415,7 @@ "@@aspect_rules_js+//npm:extensions.bzl%pnpm": { "general": { "bzlTransitiveDigest": "HC+l+mTivq1p/KbcVQ+iV5QwYR+oKESJh827FY68SH8=", - "usagesDigest": "v4J9uFN+BH96h0qgItqGSkw7/G3vSwX1dWtx/RSCtwU=", + "usagesDigest": "r0j7dncqReNevN/jHyRMaNgKB+CTMhwal6OgvgkIlU4=", "recordedFileInputs": {}, "recordedDirentsInputs": {}, "envVariables": {}, @@ -1097,7 +1096,7 @@ "@@rules_nodejs+//nodejs:extensions.bzl%node": { "general": { "bzlTransitiveDigest": "4pUxCNc22K4I+6+4Nxu52Hur12tFRfa1JMsN5mdDv60=", - "usagesDigest": "BxQILRYtZBkSbwwkUXnkloHvZv0UiwvjlwQz3yuF97Q=", + "usagesDigest": "RUNc/H/4+qM5zb0RR5p3jjryvj3HZf8vDnJDU6M9uZc=", "recordedFileInputs": {}, "recordedDirentsInputs": {}, "envVariables": {}, diff --git a/package.json b/package.json index 086e4c5d423e..6852bca7cec5 100644 --- a/package.json +++ b/package.json @@ -42,20 +42,20 @@ }, "homepage": "https://github.com/angular/angular-cli", "devDependencies": { - "@angular/animations": "21.2.0-next.3", - "@angular/cdk": "21.2.0-next.4", - "@angular/common": "21.2.0-next.3", - "@angular/compiler": "21.2.0-next.3", - "@angular/compiler-cli": "21.2.0-next.3", - "@angular/core": "21.2.0-next.3", - "@angular/forms": "21.2.0-next.3", - "@angular/localize": "21.2.0-next.3", - "@angular/material": "21.2.0-next.4", - "@angular/ng-dev": "https://github.com/angular/dev-infra-private-ng-dev-builds.git#2a5e8e5b5398ae13a8d9a963ac980707313a6c9e", - "@angular/platform-browser": "21.2.0-next.3", - "@angular/platform-server": "21.2.0-next.3", - "@angular/router": "21.2.0-next.3", - "@angular/service-worker": "21.2.0-next.3", + "@angular/animations": "21.2.0-rc.0", + "@angular/cdk": "21.2.0-rc.0", + "@angular/common": "21.2.0-rc.0", + "@angular/compiler": "21.2.0-rc.0", + "@angular/compiler-cli": "21.2.0-rc.0", + "@angular/core": "21.2.0-rc.0", + "@angular/forms": "21.2.0-rc.0", + "@angular/localize": "21.2.0-rc.0", + "@angular/material": "21.2.0-rc.0", + "@angular/ng-dev": "https://github.com/angular/dev-infra-private-ng-dev-builds.git#b0ab31189ecbeaaafce2bd9259385879b9beabcc", + "@angular/platform-browser": "21.2.0-rc.0", + "@angular/platform-server": "21.2.0-rc.0", + "@angular/router": "21.2.0-rc.0", + "@angular/service-worker": "21.2.0-rc.0", "@babel/core": "7.29.0", "@bazel/bazelisk": "1.28.1", "@bazel/buildifier": "8.2.1", diff --git a/packages/angular/ssr/package.json b/packages/angular/ssr/package.json index af829b8adc1e..1d3a4763fd28 100644 --- a/packages/angular/ssr/package.json +++ b/packages/angular/ssr/package.json @@ -29,12 +29,12 @@ }, "devDependencies": { "@angular-devkit/schematics": "workspace:*", - "@angular/common": "21.2.0-next.3", - "@angular/compiler": "21.2.0-next.3", - "@angular/core": "21.2.0-next.3", - "@angular/platform-browser": "21.2.0-next.3", - "@angular/platform-server": "21.2.0-next.3", - "@angular/router": "21.2.0-next.3", + "@angular/common": "21.2.0-rc.0", + "@angular/compiler": "21.2.0-rc.0", + "@angular/core": "21.2.0-rc.0", + "@angular/platform-browser": "21.2.0-rc.0", + "@angular/platform-server": "21.2.0-rc.0", + "@angular/router": "21.2.0-rc.0", "@schematics/angular": "workspace:*", "beasties": "0.4.1" }, diff --git a/packages/ngtools/webpack/package.json b/packages/ngtools/webpack/package.json index ef531d078cea..b4dc7692be83 100644 --- a/packages/ngtools/webpack/package.json +++ b/packages/ngtools/webpack/package.json @@ -27,8 +27,8 @@ }, "devDependencies": { "@angular-devkit/core": "workspace:0.0.0-PLACEHOLDER", - "@angular/compiler": "21.2.0-next.3", - "@angular/compiler-cli": "21.2.0-next.3", + "@angular/compiler": "21.2.0-rc.0", + "@angular/compiler-cli": "21.2.0-rc.0", "typescript": "5.9.3", "webpack": "5.105.2" } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 36413fbb745d..57b0f06b5de7 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -20,47 +20,47 @@ importers: built: true devDependencies: '@angular/animations': - specifier: 21.2.0-next.3 - version: 21.2.0-next.3(@angular/core@21.2.0-next.3(@angular/compiler@21.2.0-next.3)(rxjs@7.8.2)(zone.js@0.16.0)) + specifier: 21.2.0-rc.0 + version: 21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0)) '@angular/cdk': - specifier: 21.2.0-next.4 - version: 21.2.0-next.4(@angular/common@21.2.0-next.3(@angular/core@21.2.0-next.3(@angular/compiler@21.2.0-next.3)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2))(@angular/core@21.2.0-next.3(@angular/compiler@21.2.0-next.3)(rxjs@7.8.2)(zone.js@0.16.0))(@angular/platform-browser@21.2.0-next.3(@angular/animations@21.2.0-next.3(@angular/core@21.2.0-next.3(@angular/compiler@21.2.0-next.3)(rxjs@7.8.2)(zone.js@0.16.0)))(@angular/common@21.2.0-next.3(@angular/core@21.2.0-next.3(@angular/compiler@21.2.0-next.3)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2))(@angular/core@21.2.0-next.3(@angular/compiler@21.2.0-next.3)(rxjs@7.8.2)(zone.js@0.16.0)))(rxjs@7.8.2) + specifier: 21.2.0-rc.0 + version: 21.2.0-rc.0(@angular/common@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2))(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0))(@angular/platform-browser@21.2.0-rc.0(@angular/animations@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0)))(@angular/common@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2))(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0)))(rxjs@7.8.2) '@angular/common': - specifier: 21.2.0-next.3 - version: 21.2.0-next.3(@angular/core@21.2.0-next.3(@angular/compiler@21.2.0-next.3)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2) + specifier: 21.2.0-rc.0 + version: 21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2) '@angular/compiler': - specifier: 21.2.0-next.3 - version: 21.2.0-next.3 + specifier: 21.2.0-rc.0 + version: 21.2.0-rc.0 '@angular/compiler-cli': - specifier: 21.2.0-next.3 - version: 21.2.0-next.3(@angular/compiler@21.2.0-next.3)(typescript@5.9.3) + specifier: 21.2.0-rc.0 + version: 21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(typescript@5.9.3) '@angular/core': - specifier: 21.2.0-next.3 - version: 21.2.0-next.3(@angular/compiler@21.2.0-next.3)(rxjs@7.8.2)(zone.js@0.16.0) + specifier: 21.2.0-rc.0 + version: 21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0) '@angular/forms': - specifier: 21.2.0-next.3 - version: 21.2.0-next.3(@angular/common@21.2.0-next.3(@angular/core@21.2.0-next.3(@angular/compiler@21.2.0-next.3)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2))(@angular/core@21.2.0-next.3(@angular/compiler@21.2.0-next.3)(rxjs@7.8.2)(zone.js@0.16.0))(@angular/platform-browser@21.2.0-next.3(@angular/animations@21.2.0-next.3(@angular/core@21.2.0-next.3(@angular/compiler@21.2.0-next.3)(rxjs@7.8.2)(zone.js@0.16.0)))(@angular/common@21.2.0-next.3(@angular/core@21.2.0-next.3(@angular/compiler@21.2.0-next.3)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2))(@angular/core@21.2.0-next.3(@angular/compiler@21.2.0-next.3)(rxjs@7.8.2)(zone.js@0.16.0)))(rxjs@7.8.2) + specifier: 21.2.0-rc.0 + version: 21.2.0-rc.0(@angular/common@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2))(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0))(@angular/platform-browser@21.2.0-rc.0(@angular/animations@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0)))(@angular/common@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2))(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0)))(rxjs@7.8.2) '@angular/localize': - specifier: 21.2.0-next.3 - version: 21.2.0-next.3(@angular/compiler-cli@21.2.0-next.3(@angular/compiler@21.2.0-next.3)(typescript@5.9.3))(@angular/compiler@21.2.0-next.3) + specifier: 21.2.0-rc.0 + version: 21.2.0-rc.0(@angular/compiler-cli@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(typescript@5.9.3))(@angular/compiler@21.2.0-rc.0) '@angular/material': - specifier: 21.2.0-next.4 - version: 21.2.0-next.4(75d10325bbcfc22e53b1e47f427450d8) + specifier: 21.2.0-rc.0 + version: 21.2.0-rc.0(4ac7caab525408b0a8d5509a5a82c8db) '@angular/ng-dev': - specifier: https://github.com/angular/dev-infra-private-ng-dev-builds.git#2a5e8e5b5398ae13a8d9a963ac980707313a6c9e - version: https://codeload.github.com/angular/dev-infra-private-ng-dev-builds/tar.gz/2a5e8e5b5398ae13a8d9a963ac980707313a6c9e(@modelcontextprotocol/sdk@1.26.0(zod@4.3.6)) + specifier: https://github.com/angular/dev-infra-private-ng-dev-builds.git#b0ab31189ecbeaaafce2bd9259385879b9beabcc + version: https://codeload.github.com/angular/dev-infra-private-ng-dev-builds/tar.gz/b0ab31189ecbeaaafce2bd9259385879b9beabcc(@modelcontextprotocol/sdk@1.26.0(zod@4.3.6)) '@angular/platform-browser': - specifier: 21.2.0-next.3 - version: 21.2.0-next.3(@angular/animations@21.2.0-next.3(@angular/core@21.2.0-next.3(@angular/compiler@21.2.0-next.3)(rxjs@7.8.2)(zone.js@0.16.0)))(@angular/common@21.2.0-next.3(@angular/core@21.2.0-next.3(@angular/compiler@21.2.0-next.3)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2))(@angular/core@21.2.0-next.3(@angular/compiler@21.2.0-next.3)(rxjs@7.8.2)(zone.js@0.16.0)) + specifier: 21.2.0-rc.0 + version: 21.2.0-rc.0(@angular/animations@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0)))(@angular/common@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2))(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0)) '@angular/platform-server': - specifier: 21.2.0-next.3 - version: 21.2.0-next.3(@angular/common@21.2.0-next.3(@angular/core@21.2.0-next.3(@angular/compiler@21.2.0-next.3)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2))(@angular/compiler@21.2.0-next.3)(@angular/core@21.2.0-next.3(@angular/compiler@21.2.0-next.3)(rxjs@7.8.2)(zone.js@0.16.0))(@angular/platform-browser@21.2.0-next.3(@angular/animations@21.2.0-next.3(@angular/core@21.2.0-next.3(@angular/compiler@21.2.0-next.3)(rxjs@7.8.2)(zone.js@0.16.0)))(@angular/common@21.2.0-next.3(@angular/core@21.2.0-next.3(@angular/compiler@21.2.0-next.3)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2))(@angular/core@21.2.0-next.3(@angular/compiler@21.2.0-next.3)(rxjs@7.8.2)(zone.js@0.16.0)))(rxjs@7.8.2) + specifier: 21.2.0-rc.0 + version: 21.2.0-rc.0(@angular/common@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2))(@angular/compiler@21.2.0-rc.0)(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0))(@angular/platform-browser@21.2.0-rc.0(@angular/animations@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0)))(@angular/common@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2))(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0)))(rxjs@7.8.2) '@angular/router': - specifier: 21.2.0-next.3 - version: 21.2.0-next.3(@angular/common@21.2.0-next.3(@angular/core@21.2.0-next.3(@angular/compiler@21.2.0-next.3)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2))(@angular/core@21.2.0-next.3(@angular/compiler@21.2.0-next.3)(rxjs@7.8.2)(zone.js@0.16.0))(@angular/platform-browser@21.2.0-next.3(@angular/animations@21.2.0-next.3(@angular/core@21.2.0-next.3(@angular/compiler@21.2.0-next.3)(rxjs@7.8.2)(zone.js@0.16.0)))(@angular/common@21.2.0-next.3(@angular/core@21.2.0-next.3(@angular/compiler@21.2.0-next.3)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2))(@angular/core@21.2.0-next.3(@angular/compiler@21.2.0-next.3)(rxjs@7.8.2)(zone.js@0.16.0)))(rxjs@7.8.2) + specifier: 21.2.0-rc.0 + version: 21.2.0-rc.0(@angular/common@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2))(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0))(@angular/platform-browser@21.2.0-rc.0(@angular/animations@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0)))(@angular/common@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2))(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0)))(rxjs@7.8.2) '@angular/service-worker': - specifier: 21.2.0-next.3 - version: 21.2.0-next.3(@angular/core@21.2.0-next.3(@angular/compiler@21.2.0-next.3)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2) + specifier: 21.2.0-rc.0 + version: 21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2) '@babel/core': specifier: 7.29.0 version: 7.29.0 @@ -427,7 +427,7 @@ importers: version: 4.4.2 ng-packagr: specifier: 21.2.0-next.0 - version: 21.2.0-next.0(@angular/compiler-cli@21.2.0-next.3(@angular/compiler@21.2.0-next.3)(typescript@5.9.3))(tslib@2.8.1)(typescript@5.9.3) + version: 21.2.0-next.0(@angular/compiler-cli@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(typescript@5.9.3))(tslib@2.8.1)(typescript@5.9.3) postcss: specifier: 8.5.6 version: 8.5.6 @@ -521,23 +521,23 @@ importers: specifier: workspace:* version: link:../../angular_devkit/schematics '@angular/common': - specifier: 21.2.0-next.3 - version: 21.2.0-next.3(@angular/core@21.2.0-next.3(@angular/compiler@21.2.0-next.3)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2) + specifier: 21.2.0-rc.0 + version: 21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2) '@angular/compiler': - specifier: 21.2.0-next.3 - version: 21.2.0-next.3 + specifier: 21.2.0-rc.0 + version: 21.2.0-rc.0 '@angular/core': - specifier: 21.2.0-next.3 - version: 21.2.0-next.3(@angular/compiler@21.2.0-next.3)(rxjs@7.8.2)(zone.js@0.16.0) + specifier: 21.2.0-rc.0 + version: 21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0) '@angular/platform-browser': - specifier: 21.2.0-next.3 - version: 21.2.0-next.3(@angular/animations@21.2.0-next.3(@angular/core@21.2.0-next.3(@angular/compiler@21.2.0-next.3)(rxjs@7.8.2)(zone.js@0.16.0)))(@angular/common@21.2.0-next.3(@angular/core@21.2.0-next.3(@angular/compiler@21.2.0-next.3)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2))(@angular/core@21.2.0-next.3(@angular/compiler@21.2.0-next.3)(rxjs@7.8.2)(zone.js@0.16.0)) + specifier: 21.2.0-rc.0 + version: 21.2.0-rc.0(@angular/animations@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0)))(@angular/common@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2))(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0)) '@angular/platform-server': - specifier: 21.2.0-next.3 - version: 21.2.0-next.3(@angular/common@21.2.0-next.3(@angular/core@21.2.0-next.3(@angular/compiler@21.2.0-next.3)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2))(@angular/compiler@21.2.0-next.3)(@angular/core@21.2.0-next.3(@angular/compiler@21.2.0-next.3)(rxjs@7.8.2)(zone.js@0.16.0))(@angular/platform-browser@21.2.0-next.3(@angular/animations@21.2.0-next.3(@angular/core@21.2.0-next.3(@angular/compiler@21.2.0-next.3)(rxjs@7.8.2)(zone.js@0.16.0)))(@angular/common@21.2.0-next.3(@angular/core@21.2.0-next.3(@angular/compiler@21.2.0-next.3)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2))(@angular/core@21.2.0-next.3(@angular/compiler@21.2.0-next.3)(rxjs@7.8.2)(zone.js@0.16.0)))(rxjs@7.8.2) + specifier: 21.2.0-rc.0 + version: 21.2.0-rc.0(@angular/common@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2))(@angular/compiler@21.2.0-rc.0)(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0))(@angular/platform-browser@21.2.0-rc.0(@angular/animations@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0)))(@angular/common@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2))(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0)))(rxjs@7.8.2) '@angular/router': - specifier: 21.2.0-next.3 - version: 21.2.0-next.3(@angular/common@21.2.0-next.3(@angular/core@21.2.0-next.3(@angular/compiler@21.2.0-next.3)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2))(@angular/core@21.2.0-next.3(@angular/compiler@21.2.0-next.3)(rxjs@7.8.2)(zone.js@0.16.0))(@angular/platform-browser@21.2.0-next.3(@angular/animations@21.2.0-next.3(@angular/core@21.2.0-next.3(@angular/compiler@21.2.0-next.3)(rxjs@7.8.2)(zone.js@0.16.0)))(@angular/common@21.2.0-next.3(@angular/core@21.2.0-next.3(@angular/compiler@21.2.0-next.3)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2))(@angular/core@21.2.0-next.3(@angular/compiler@21.2.0-next.3)(rxjs@7.8.2)(zone.js@0.16.0)))(rxjs@7.8.2) + specifier: 21.2.0-rc.0 + version: 21.2.0-rc.0(@angular/common@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2))(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0))(@angular/platform-browser@21.2.0-rc.0(@angular/animations@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0)))(@angular/common@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2))(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0)))(rxjs@7.8.2) '@schematics/angular': specifier: workspace:* version: link:../../schematics/angular @@ -736,7 +736,7 @@ importers: version: 3.0.4(bufferutil@4.1.0)(utf-8-validate@6.0.6) ng-packagr: specifier: 21.2.0-next.0 - version: 21.2.0-next.0(@angular/compiler-cli@21.2.0-next.3(@angular/compiler@21.2.0-next.3)(typescript@5.9.3))(tslib@2.8.1)(typescript@5.9.3) + version: 21.2.0-next.0(@angular/compiler-cli@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(typescript@5.9.3))(tslib@2.8.1)(typescript@5.9.3) undici: specifier: 7.22.0 version: 7.22.0 @@ -828,11 +828,11 @@ importers: specifier: workspace:0.0.0-PLACEHOLDER version: link:../../angular_devkit/core '@angular/compiler': - specifier: 21.2.0-next.3 - version: 21.2.0-next.3 + specifier: 21.2.0-rc.0 + version: 21.2.0-rc.0 '@angular/compiler-cli': - specifier: 21.2.0-next.3 - version: 21.2.0-next.3(@angular/compiler@21.2.0-next.3)(typescript@5.9.3) + specifier: 21.2.0-rc.0 + version: 21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(typescript@5.9.3) typescript: specifier: 5.9.3 version: 5.9.3 @@ -944,47 +944,47 @@ packages: resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} engines: {node: '>=6.0.0'} - '@angular/animations@21.2.0-next.3': - resolution: {integrity: sha512-DTiRWm2aBlX+uVS1K3PnEbJZ4SQbWBPTl898lUYJ79WArPaHoTtrBurZ5zcGA6R5OyBfAvv3MvU0qZtihFIMoA==} + '@angular/animations@21.2.0-rc.0': + resolution: {integrity: sha512-9oMEVaSqkb3/3R5FLEV8cSjyC9dYCru3NdcXbe/8D4RerBJjlAjGSXjmfNAS6fzXD+/CsINK0ELh8Mcxvqe/GQ==} engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0} peerDependencies: - '@angular/core': 21.2.0-next.3 + '@angular/core': 21.2.0-rc.0 - '@angular/cdk@21.2.0-next.4': - resolution: {integrity: sha512-GbcDW+qeSV4QlPQojGh5jCPATGfClCYnZhEGLXfabfEy/uhKGehILW37FK4VRhLdZKW9nMTs7w436jaovh84/A==} + '@angular/cdk@21.2.0-rc.0': + resolution: {integrity: sha512-dfVC6OjwgfonuE+os2mYNh0tY6bRlT7u+zz2rWXbEYH5J9nRvRTr1jo3+GORT/0FY0Kt9nI0FVydyrFvjfqh3g==} 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 rxjs: ^6.5.3 || ^7.4.0 - '@angular/common@21.2.0-next.3': - resolution: {integrity: sha512-7Mfsk/ahcKqvPFW1e9IMnfyvsyGKARIORdVxI8r/05N+Bt1aeW6iZbteEqM2cCEFZ4UqWjkaqdlBZndevqfqsA==} + '@angular/common@21.2.0-rc.0': + resolution: {integrity: sha512-2O3cbBIM8ls97XwkYVdgJwEg3UOy/bVZ0uBoY14cLskhETj6wbrFENiy8KpikZ+xsTxE9gWohairxCRiEoFuKg==} engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0} peerDependencies: - '@angular/core': 21.2.0-next.3 + '@angular/core': 21.2.0-rc.0 rxjs: ^6.5.3 || ^7.4.0 - '@angular/compiler-cli@21.2.0-next.3': - resolution: {integrity: sha512-q3OUWuK/mspdxRfPQq2RPnGosq7yYzWzK+FikEYHv9I2pPTqt1cXWArWzknLouxs2zVaRhpaqXreCGtBeicYwg==} + '@angular/compiler-cli@21.2.0-rc.0': + resolution: {integrity: sha512-lHPA5BzQq9ttHXCAnAC/zW5vW0lFiawBIvRpNRbsI8Vw1noMs614OqZ2R6UBReVPE4kpyGwh7HCQIZyX5Cth6g==} engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0} hasBin: true peerDependencies: - '@angular/compiler': 21.2.0-next.3 - typescript: '>=5.9 <6.0' + '@angular/compiler': 21.2.0-rc.0 + typescript: '>=5.9 <6.1' peerDependenciesMeta: typescript: optional: true - '@angular/compiler@21.2.0-next.3': - resolution: {integrity: sha512-vMNEt+qFt4+k7lGoalHqmxgB6XiEWUTG7UaT9BkcU5Ezs64RLfkLVSGd0MNAuE2RL1gOa0/wvIl11yv0pD2T7g==} + '@angular/compiler@21.2.0-rc.0': + resolution: {integrity: sha512-gl2dQgMFKkH/iM/YxqWO0oIbYRpBZpOZuxj9W5TjG50EpMDioD1CNu2DfXpODVo3/rOfZJvOa+Jw0Cxpj5ClMQ==} engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0} - '@angular/core@21.2.0-next.3': - resolution: {integrity: sha512-9cieyRQ3DIWANEQ1DfjOuZS8EdzcPzaikO1Vi81hNmsr7an8yok0oRXfonkkudFUtAE0Xl6B1wYyD4FZ3ig47g==} + '@angular/core@21.2.0-rc.0': + resolution: {integrity: sha512-Txdi6ocSNC8GbCYMGh2AUm1lx+J11LNRjNrfGcgxQhQAiEPVO8jGojfObM+rdjv1h8t0pCms5vzEmFiJ9z06hg==} engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0} peerDependencies: - '@angular/compiler': 21.2.0-next.3 + '@angular/compiler': 21.2.0-rc.0 rxjs: ^6.5.3 || ^7.4.0 zone.js: ~0.15.0 || ~0.16.0 peerDependenciesMeta: @@ -993,74 +993,74 @@ packages: zone.js: optional: true - '@angular/forms@21.2.0-next.3': - resolution: {integrity: sha512-YHrLsKO1fozXw0jptI3kwCc5w13DRQzf/Q8ajmtu+o2oy1NjYuoPlRyTBuIufThYKgBqC2ZfWOCWkOa8gyyKQA==} + '@angular/forms@21.2.0-rc.0': + resolution: {integrity: sha512-GsX4c+GYUxcKla8yO/hpEzpliCsMslP+yIIk9l6831PkSf3uCyKHUHriJtOEca4uN5fNo23ix5NXo5VPkmldLQ==} engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0} peerDependencies: - '@angular/common': 21.2.0-next.3 - '@angular/core': 21.2.0-next.3 - '@angular/platform-browser': 21.2.0-next.3 + '@angular/common': 21.2.0-rc.0 + '@angular/core': 21.2.0-rc.0 + '@angular/platform-browser': 21.2.0-rc.0 rxjs: ^6.5.3 || ^7.4.0 - '@angular/localize@21.2.0-next.3': - resolution: {integrity: sha512-348iYNZ5PrnjxiSVuPE9XomIWrZNYOPPDq/3VVVTl/f9G+iwmHGfCJ1GsGxwg31DRu3X6ZFKw4IBqUyfLJaJiQ==} + '@angular/localize@21.2.0-rc.0': + resolution: {integrity: sha512-5OfXbWU0L9Py1mBIflZsdz9i39HF7wL38UxXzGe/y3my9I1Jk5fKD3J514htfgVXgdUqWogY6f2fpcxm2EP0Ug==} engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0} hasBin: true peerDependencies: - '@angular/compiler': 21.2.0-next.3 - '@angular/compiler-cli': 21.2.0-next.3 + '@angular/compiler': 21.2.0-rc.0 + '@angular/compiler-cli': 21.2.0-rc.0 - '@angular/material@21.2.0-next.4': - resolution: {integrity: sha512-mUNP2z/FehBfmdDtQNznXO/jjOm7FPCc0DBqdXsTgIyeHqf9UitwC6huBzSmzN8Kq/v/ftDp04Ph+Jjbp/6VaA==} + '@angular/material@21.2.0-rc.0': + resolution: {integrity: sha512-A+u984wpMKmJsJ17q1aTHC5VScyz/Lkp3yFI2Wt05vMrXU+Dn0JZHT/34AjmPbO3sqvIqMRG0Y88kWfJflcJaw==} peerDependencies: - '@angular/cdk': 21.2.0-next.4 + '@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 rxjs: ^6.5.3 || ^7.4.0 - '@angular/ng-dev@https://codeload.github.com/angular/dev-infra-private-ng-dev-builds/tar.gz/2a5e8e5b5398ae13a8d9a963ac980707313a6c9e': - resolution: {tarball: https://codeload.github.com/angular/dev-infra-private-ng-dev-builds/tar.gz/2a5e8e5b5398ae13a8d9a963ac980707313a6c9e} - version: 0.0.0-469708f109a90884ca403d150d33079a3a5a8769 + '@angular/ng-dev@https://codeload.github.com/angular/dev-infra-private-ng-dev-builds/tar.gz/b0ab31189ecbeaaafce2bd9259385879b9beabcc': + resolution: {tarball: https://codeload.github.com/angular/dev-infra-private-ng-dev-builds/tar.gz/b0ab31189ecbeaaafce2bd9259385879b9beabcc} + version: 0.0.0-e006a332028a4c3cb24e9d92437fac7ae99e2ed5 hasBin: true - '@angular/platform-browser@21.2.0-next.3': - resolution: {integrity: sha512-YsKkQaZ4jPs/xicQ9baJ0hlSLfKfsBsXrwNBw7XjvnyinU8tlB707KZ0eThyx9FSoLeBO2FgrWM75NTiEd2Rvg==} + '@angular/platform-browser@21.2.0-rc.0': + resolution: {integrity: sha512-FCNRhzkf35l6B18gzaT6GDdTJ3v4AiLOSXc5RdiQ2PMn2dLOkm70SH0caXQGzvtXAzHrHlR+Evj/ZqaFYvjcYg==} engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0} peerDependencies: - '@angular/animations': 21.2.0-next.3 - '@angular/common': 21.2.0-next.3 - '@angular/core': 21.2.0-next.3 + '@angular/animations': 21.2.0-rc.0 + '@angular/common': 21.2.0-rc.0 + '@angular/core': 21.2.0-rc.0 peerDependenciesMeta: '@angular/animations': optional: true - '@angular/platform-server@21.2.0-next.3': - resolution: {integrity: sha512-ETjC41XcL0m19hONZebrGNKqOTFqtuz2qP6I5g4JKS6jDJ5aLx9ERtcq+ALnuEmPICcR7rbGzMigM2WTDTdZ0A==} + '@angular/platform-server@21.2.0-rc.0': + resolution: {integrity: sha512-Sx4PQVgIooDK8644MMtbN6YPjOb35bfXUImNK9m3saMoADqa8kZxPlM1Vg9ZKLoz4p75FJyPXxlh9sh6WNNTXw==} engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0} peerDependencies: - '@angular/common': 21.2.0-next.3 - '@angular/compiler': 21.2.0-next.3 - '@angular/core': 21.2.0-next.3 - '@angular/platform-browser': 21.2.0-next.3 + '@angular/common': 21.2.0-rc.0 + '@angular/compiler': 21.2.0-rc.0 + '@angular/core': 21.2.0-rc.0 + '@angular/platform-browser': 21.2.0-rc.0 rxjs: ^6.5.3 || ^7.4.0 - '@angular/router@21.2.0-next.3': - resolution: {integrity: sha512-NHokfVBqk8Elei9AtWreWdrm6oThwCbJZEbi3MqKJBEKCo33BEtZuv3QrwrbpNb+Pnm5RJVYMK4Z0sXvt/qohg==} + '@angular/router@21.2.0-rc.0': + resolution: {integrity: sha512-KZmZCdm4H+w3UC1vorQ/Nj4FEHY4sgRkwp+zf4E4WFV+sflyFzqFxzVIKGJ1xTzjaDebCRmipJnc3DZ09fv1fg==} engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0} peerDependencies: - '@angular/common': 21.2.0-next.3 - '@angular/core': 21.2.0-next.3 - '@angular/platform-browser': 21.2.0-next.3 + '@angular/common': 21.2.0-rc.0 + '@angular/core': 21.2.0-rc.0 + '@angular/platform-browser': 21.2.0-rc.0 rxjs: ^6.5.3 || ^7.4.0 - '@angular/service-worker@21.2.0-next.3': - resolution: {integrity: sha512-52Z2plR7926tBS/2nCIYLLXuXcwZ1ByJeoMHXfMXNEx4uM0vbMlcALqkCB/pvrehCtqLlT/8Ec0paHk/uE0jcw==} + '@angular/service-worker@21.2.0-rc.0': + resolution: {integrity: sha512-DmoqwSN+ShgSr4Lekc1KS0Sne5Aa82RNLDn+7JYCZ0rF5NdUpalf8semU5i6ML9a+5he3127IbywugchKlK1eQ==} engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0} hasBin: true peerDependencies: - '@angular/core': 21.2.0-next.3 + '@angular/core': 21.2.0-rc.0 rxjs: ^6.5.3 || ^7.4.0 '@asamuzakjp/css-color@4.1.2': @@ -9480,29 +9480,29 @@ snapshots: '@jridgewell/gen-mapping': 0.3.13 '@jridgewell/trace-mapping': 0.3.31 - '@angular/animations@21.2.0-next.3(@angular/core@21.2.0-next.3(@angular/compiler@21.2.0-next.3)(rxjs@7.8.2)(zone.js@0.16.0))': + '@angular/animations@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0))': dependencies: - '@angular/core': 21.2.0-next.3(@angular/compiler@21.2.0-next.3)(rxjs@7.8.2)(zone.js@0.16.0) + '@angular/core': 21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0) tslib: 2.8.1 - '@angular/cdk@21.2.0-next.4(@angular/common@21.2.0-next.3(@angular/core@21.2.0-next.3(@angular/compiler@21.2.0-next.3)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2))(@angular/core@21.2.0-next.3(@angular/compiler@21.2.0-next.3)(rxjs@7.8.2)(zone.js@0.16.0))(@angular/platform-browser@21.2.0-next.3(@angular/animations@21.2.0-next.3(@angular/core@21.2.0-next.3(@angular/compiler@21.2.0-next.3)(rxjs@7.8.2)(zone.js@0.16.0)))(@angular/common@21.2.0-next.3(@angular/core@21.2.0-next.3(@angular/compiler@21.2.0-next.3)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2))(@angular/core@21.2.0-next.3(@angular/compiler@21.2.0-next.3)(rxjs@7.8.2)(zone.js@0.16.0)))(rxjs@7.8.2)': + '@angular/cdk@21.2.0-rc.0(@angular/common@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2))(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0))(@angular/platform-browser@21.2.0-rc.0(@angular/animations@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0)))(@angular/common@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2))(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0)))(rxjs@7.8.2)': dependencies: - '@angular/common': 21.2.0-next.3(@angular/core@21.2.0-next.3(@angular/compiler@21.2.0-next.3)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2) - '@angular/core': 21.2.0-next.3(@angular/compiler@21.2.0-next.3)(rxjs@7.8.2)(zone.js@0.16.0) - '@angular/platform-browser': 21.2.0-next.3(@angular/animations@21.2.0-next.3(@angular/core@21.2.0-next.3(@angular/compiler@21.2.0-next.3)(rxjs@7.8.2)(zone.js@0.16.0)))(@angular/common@21.2.0-next.3(@angular/core@21.2.0-next.3(@angular/compiler@21.2.0-next.3)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2))(@angular/core@21.2.0-next.3(@angular/compiler@21.2.0-next.3)(rxjs@7.8.2)(zone.js@0.16.0)) + '@angular/common': 21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2) + '@angular/core': 21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0) + '@angular/platform-browser': 21.2.0-rc.0(@angular/animations@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0)))(@angular/common@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2))(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0)) parse5: 8.0.0 rxjs: 7.8.2 tslib: 2.8.1 - '@angular/common@21.2.0-next.3(@angular/core@21.2.0-next.3(@angular/compiler@21.2.0-next.3)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2)': + '@angular/common@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2)': dependencies: - '@angular/core': 21.2.0-next.3(@angular/compiler@21.2.0-next.3)(rxjs@7.8.2)(zone.js@0.16.0) + '@angular/core': 21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0) rxjs: 7.8.2 tslib: 2.8.1 - '@angular/compiler-cli@21.2.0-next.3(@angular/compiler@21.2.0-next.3)(typescript@5.9.3)': + '@angular/compiler-cli@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(typescript@5.9.3)': dependencies: - '@angular/compiler': 21.2.0-next.3 + '@angular/compiler': 21.2.0-rc.0 '@babel/core': 7.29.0 '@jridgewell/sourcemap-codec': 1.5.5 chokidar: 5.0.0 @@ -9516,31 +9516,31 @@ snapshots: transitivePeerDependencies: - supports-color - '@angular/compiler@21.2.0-next.3': + '@angular/compiler@21.2.0-rc.0': dependencies: tslib: 2.8.1 - '@angular/core@21.2.0-next.3(@angular/compiler@21.2.0-next.3)(rxjs@7.8.2)(zone.js@0.16.0)': + '@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0)': dependencies: rxjs: 7.8.2 tslib: 2.8.1 optionalDependencies: - '@angular/compiler': 21.2.0-next.3 + '@angular/compiler': 21.2.0-rc.0 zone.js: 0.16.0 - '@angular/forms@21.2.0-next.3(@angular/common@21.2.0-next.3(@angular/core@21.2.0-next.3(@angular/compiler@21.2.0-next.3)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2))(@angular/core@21.2.0-next.3(@angular/compiler@21.2.0-next.3)(rxjs@7.8.2)(zone.js@0.16.0))(@angular/platform-browser@21.2.0-next.3(@angular/animations@21.2.0-next.3(@angular/core@21.2.0-next.3(@angular/compiler@21.2.0-next.3)(rxjs@7.8.2)(zone.js@0.16.0)))(@angular/common@21.2.0-next.3(@angular/core@21.2.0-next.3(@angular/compiler@21.2.0-next.3)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2))(@angular/core@21.2.0-next.3(@angular/compiler@21.2.0-next.3)(rxjs@7.8.2)(zone.js@0.16.0)))(rxjs@7.8.2)': + '@angular/forms@21.2.0-rc.0(@angular/common@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2))(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0))(@angular/platform-browser@21.2.0-rc.0(@angular/animations@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0)))(@angular/common@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2))(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0)))(rxjs@7.8.2)': dependencies: - '@angular/common': 21.2.0-next.3(@angular/core@21.2.0-next.3(@angular/compiler@21.2.0-next.3)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2) - '@angular/core': 21.2.0-next.3(@angular/compiler@21.2.0-next.3)(rxjs@7.8.2)(zone.js@0.16.0) - '@angular/platform-browser': 21.2.0-next.3(@angular/animations@21.2.0-next.3(@angular/core@21.2.0-next.3(@angular/compiler@21.2.0-next.3)(rxjs@7.8.2)(zone.js@0.16.0)))(@angular/common@21.2.0-next.3(@angular/core@21.2.0-next.3(@angular/compiler@21.2.0-next.3)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2))(@angular/core@21.2.0-next.3(@angular/compiler@21.2.0-next.3)(rxjs@7.8.2)(zone.js@0.16.0)) + '@angular/common': 21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2) + '@angular/core': 21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0) + '@angular/platform-browser': 21.2.0-rc.0(@angular/animations@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0)))(@angular/common@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2))(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0)) '@standard-schema/spec': 1.1.0 rxjs: 7.8.2 tslib: 2.8.1 - '@angular/localize@21.2.0-next.3(@angular/compiler-cli@21.2.0-next.3(@angular/compiler@21.2.0-next.3)(typescript@5.9.3))(@angular/compiler@21.2.0-next.3)': + '@angular/localize@21.2.0-rc.0(@angular/compiler-cli@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(typescript@5.9.3))(@angular/compiler@21.2.0-rc.0)': dependencies: - '@angular/compiler': 21.2.0-next.3 - '@angular/compiler-cli': 21.2.0-next.3(@angular/compiler@21.2.0-next.3)(typescript@5.9.3) + '@angular/compiler': 21.2.0-rc.0 + '@angular/compiler-cli': 21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(typescript@5.9.3) '@babel/core': 7.29.0 '@types/babel__core': 7.20.5 tinyglobby: 0.2.15 @@ -9548,17 +9548,17 @@ snapshots: transitivePeerDependencies: - supports-color - '@angular/material@21.2.0-next.4(75d10325bbcfc22e53b1e47f427450d8)': + '@angular/material@21.2.0-rc.0(4ac7caab525408b0a8d5509a5a82c8db)': dependencies: - '@angular/cdk': 21.2.0-next.4(@angular/common@21.2.0-next.3(@angular/core@21.2.0-next.3(@angular/compiler@21.2.0-next.3)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2))(@angular/core@21.2.0-next.3(@angular/compiler@21.2.0-next.3)(rxjs@7.8.2)(zone.js@0.16.0))(@angular/platform-browser@21.2.0-next.3(@angular/animations@21.2.0-next.3(@angular/core@21.2.0-next.3(@angular/compiler@21.2.0-next.3)(rxjs@7.8.2)(zone.js@0.16.0)))(@angular/common@21.2.0-next.3(@angular/core@21.2.0-next.3(@angular/compiler@21.2.0-next.3)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2))(@angular/core@21.2.0-next.3(@angular/compiler@21.2.0-next.3)(rxjs@7.8.2)(zone.js@0.16.0)))(rxjs@7.8.2) - '@angular/common': 21.2.0-next.3(@angular/core@21.2.0-next.3(@angular/compiler@21.2.0-next.3)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2) - '@angular/core': 21.2.0-next.3(@angular/compiler@21.2.0-next.3)(rxjs@7.8.2)(zone.js@0.16.0) - '@angular/forms': 21.2.0-next.3(@angular/common@21.2.0-next.3(@angular/core@21.2.0-next.3(@angular/compiler@21.2.0-next.3)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2))(@angular/core@21.2.0-next.3(@angular/compiler@21.2.0-next.3)(rxjs@7.8.2)(zone.js@0.16.0))(@angular/platform-browser@21.2.0-next.3(@angular/animations@21.2.0-next.3(@angular/core@21.2.0-next.3(@angular/compiler@21.2.0-next.3)(rxjs@7.8.2)(zone.js@0.16.0)))(@angular/common@21.2.0-next.3(@angular/core@21.2.0-next.3(@angular/compiler@21.2.0-next.3)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2))(@angular/core@21.2.0-next.3(@angular/compiler@21.2.0-next.3)(rxjs@7.8.2)(zone.js@0.16.0)))(rxjs@7.8.2) - '@angular/platform-browser': 21.2.0-next.3(@angular/animations@21.2.0-next.3(@angular/core@21.2.0-next.3(@angular/compiler@21.2.0-next.3)(rxjs@7.8.2)(zone.js@0.16.0)))(@angular/common@21.2.0-next.3(@angular/core@21.2.0-next.3(@angular/compiler@21.2.0-next.3)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2))(@angular/core@21.2.0-next.3(@angular/compiler@21.2.0-next.3)(rxjs@7.8.2)(zone.js@0.16.0)) + '@angular/cdk': 21.2.0-rc.0(@angular/common@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2))(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0))(@angular/platform-browser@21.2.0-rc.0(@angular/animations@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0)))(@angular/common@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2))(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0)))(rxjs@7.8.2) + '@angular/common': 21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2) + '@angular/core': 21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0) + '@angular/forms': 21.2.0-rc.0(@angular/common@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2))(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0))(@angular/platform-browser@21.2.0-rc.0(@angular/animations@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0)))(@angular/common@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2))(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0)))(rxjs@7.8.2) + '@angular/platform-browser': 21.2.0-rc.0(@angular/animations@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0)))(@angular/common@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2))(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0)) rxjs: 7.8.2 tslib: 2.8.1 - '@angular/ng-dev@https://codeload.github.com/angular/dev-infra-private-ng-dev-builds/tar.gz/2a5e8e5b5398ae13a8d9a963ac980707313a6c9e(@modelcontextprotocol/sdk@1.26.0(zod@4.3.6))': + '@angular/ng-dev@https://codeload.github.com/angular/dev-infra-private-ng-dev-builds/tar.gz/b0ab31189ecbeaaafce2bd9259385879b9beabcc(@modelcontextprotocol/sdk@1.26.0(zod@4.3.6))': dependencies: '@actions/core': 3.0.0 '@google-cloud/spanner': 8.0.0(supports-color@10.2.2) @@ -9619,35 +9619,35 @@ snapshots: - '@modelcontextprotocol/sdk' - '@react-native-async-storage/async-storage' - '@angular/platform-browser@21.2.0-next.3(@angular/animations@21.2.0-next.3(@angular/core@21.2.0-next.3(@angular/compiler@21.2.0-next.3)(rxjs@7.8.2)(zone.js@0.16.0)))(@angular/common@21.2.0-next.3(@angular/core@21.2.0-next.3(@angular/compiler@21.2.0-next.3)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2))(@angular/core@21.2.0-next.3(@angular/compiler@21.2.0-next.3)(rxjs@7.8.2)(zone.js@0.16.0))': + '@angular/platform-browser@21.2.0-rc.0(@angular/animations@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0)))(@angular/common@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2))(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0))': dependencies: - '@angular/common': 21.2.0-next.3(@angular/core@21.2.0-next.3(@angular/compiler@21.2.0-next.3)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2) - '@angular/core': 21.2.0-next.3(@angular/compiler@21.2.0-next.3)(rxjs@7.8.2)(zone.js@0.16.0) + '@angular/common': 21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2) + '@angular/core': 21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0) tslib: 2.8.1 optionalDependencies: - '@angular/animations': 21.2.0-next.3(@angular/core@21.2.0-next.3(@angular/compiler@21.2.0-next.3)(rxjs@7.8.2)(zone.js@0.16.0)) + '@angular/animations': 21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0)) - '@angular/platform-server@21.2.0-next.3(@angular/common@21.2.0-next.3(@angular/core@21.2.0-next.3(@angular/compiler@21.2.0-next.3)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2))(@angular/compiler@21.2.0-next.3)(@angular/core@21.2.0-next.3(@angular/compiler@21.2.0-next.3)(rxjs@7.8.2)(zone.js@0.16.0))(@angular/platform-browser@21.2.0-next.3(@angular/animations@21.2.0-next.3(@angular/core@21.2.0-next.3(@angular/compiler@21.2.0-next.3)(rxjs@7.8.2)(zone.js@0.16.0)))(@angular/common@21.2.0-next.3(@angular/core@21.2.0-next.3(@angular/compiler@21.2.0-next.3)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2))(@angular/core@21.2.0-next.3(@angular/compiler@21.2.0-next.3)(rxjs@7.8.2)(zone.js@0.16.0)))(rxjs@7.8.2)': + '@angular/platform-server@21.2.0-rc.0(@angular/common@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2))(@angular/compiler@21.2.0-rc.0)(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0))(@angular/platform-browser@21.2.0-rc.0(@angular/animations@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0)))(@angular/common@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2))(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0)))(rxjs@7.8.2)': dependencies: - '@angular/common': 21.2.0-next.3(@angular/core@21.2.0-next.3(@angular/compiler@21.2.0-next.3)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2) - '@angular/compiler': 21.2.0-next.3 - '@angular/core': 21.2.0-next.3(@angular/compiler@21.2.0-next.3)(rxjs@7.8.2)(zone.js@0.16.0) - '@angular/platform-browser': 21.2.0-next.3(@angular/animations@21.2.0-next.3(@angular/core@21.2.0-next.3(@angular/compiler@21.2.0-next.3)(rxjs@7.8.2)(zone.js@0.16.0)))(@angular/common@21.2.0-next.3(@angular/core@21.2.0-next.3(@angular/compiler@21.2.0-next.3)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2))(@angular/core@21.2.0-next.3(@angular/compiler@21.2.0-next.3)(rxjs@7.8.2)(zone.js@0.16.0)) + '@angular/common': 21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2) + '@angular/compiler': 21.2.0-rc.0 + '@angular/core': 21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0) + '@angular/platform-browser': 21.2.0-rc.0(@angular/animations@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0)))(@angular/common@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2))(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0)) rxjs: 7.8.2 tslib: 2.8.1 xhr2: 0.2.1 - '@angular/router@21.2.0-next.3(@angular/common@21.2.0-next.3(@angular/core@21.2.0-next.3(@angular/compiler@21.2.0-next.3)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2))(@angular/core@21.2.0-next.3(@angular/compiler@21.2.0-next.3)(rxjs@7.8.2)(zone.js@0.16.0))(@angular/platform-browser@21.2.0-next.3(@angular/animations@21.2.0-next.3(@angular/core@21.2.0-next.3(@angular/compiler@21.2.0-next.3)(rxjs@7.8.2)(zone.js@0.16.0)))(@angular/common@21.2.0-next.3(@angular/core@21.2.0-next.3(@angular/compiler@21.2.0-next.3)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2))(@angular/core@21.2.0-next.3(@angular/compiler@21.2.0-next.3)(rxjs@7.8.2)(zone.js@0.16.0)))(rxjs@7.8.2)': + '@angular/router@21.2.0-rc.0(@angular/common@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2))(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0))(@angular/platform-browser@21.2.0-rc.0(@angular/animations@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0)))(@angular/common@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2))(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0)))(rxjs@7.8.2)': dependencies: - '@angular/common': 21.2.0-next.3(@angular/core@21.2.0-next.3(@angular/compiler@21.2.0-next.3)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2) - '@angular/core': 21.2.0-next.3(@angular/compiler@21.2.0-next.3)(rxjs@7.8.2)(zone.js@0.16.0) - '@angular/platform-browser': 21.2.0-next.3(@angular/animations@21.2.0-next.3(@angular/core@21.2.0-next.3(@angular/compiler@21.2.0-next.3)(rxjs@7.8.2)(zone.js@0.16.0)))(@angular/common@21.2.0-next.3(@angular/core@21.2.0-next.3(@angular/compiler@21.2.0-next.3)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2))(@angular/core@21.2.0-next.3(@angular/compiler@21.2.0-next.3)(rxjs@7.8.2)(zone.js@0.16.0)) + '@angular/common': 21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2) + '@angular/core': 21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0) + '@angular/platform-browser': 21.2.0-rc.0(@angular/animations@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0)))(@angular/common@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2))(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0)) rxjs: 7.8.2 tslib: 2.8.1 - '@angular/service-worker@21.2.0-next.3(@angular/core@21.2.0-next.3(@angular/compiler@21.2.0-next.3)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2)': + '@angular/service-worker@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2)': dependencies: - '@angular/core': 21.2.0-next.3(@angular/compiler@21.2.0-next.3)(rxjs@7.8.2)(zone.js@0.16.0) + '@angular/core': 21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0) rxjs: 7.8.2 tslib: 2.8.1 @@ -16680,10 +16680,10 @@ snapshots: netmask@2.0.2: {} - ng-packagr@21.2.0-next.0(@angular/compiler-cli@21.2.0-next.3(@angular/compiler@21.2.0-next.3)(typescript@5.9.3))(tslib@2.8.1)(typescript@5.9.3): + ng-packagr@21.2.0-next.0(@angular/compiler-cli@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(typescript@5.9.3))(tslib@2.8.1)(typescript@5.9.3): dependencies: '@ampproject/remapping': 2.3.0 - '@angular/compiler-cli': 21.2.0-next.3(@angular/compiler@21.2.0-next.3)(typescript@5.9.3) + '@angular/compiler-cli': 21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(typescript@5.9.3) '@rollup/plugin-json': 6.1.0(rollup@4.57.1) '@rollup/wasm-node': 4.57.1 ajv: 8.18.0 diff --git a/tests/e2e/ng-snapshot/package.json b/tests/e2e/ng-snapshot/package.json index ecbe042008a2..09d404e9a2f3 100644 --- a/tests/e2e/ng-snapshot/package.json +++ b/tests/e2e/ng-snapshot/package.json @@ -2,21 +2,21 @@ "description": "snapshot versions of Angular for e2e testing", "private": true, "dependencies": { - "@angular/animations": "github:angular/animations-builds#d635ecb45533490f524b25b0ebb3abff583cd521", - "@angular/cdk": "github:angular/cdk-builds#bcf7a881e663346e311d632263ff706c12dd5a19", - "@angular/common": "github:angular/common-builds#626cf079d862e4d797435e3261adc7ef0ef86c76", - "@angular/compiler": "github:angular/compiler-builds#af9ed4524965bc16c5b5a58195608ecee1d04eee", - "@angular/compiler-cli": "github:angular/compiler-cli-builds#ba424022abd478cb5b3fb226f6bd1774651b1d6c", - "@angular/core": "github:angular/core-builds#6136c5d58f41b2a7b83f1b0e8806d56a6f0089bf", - "@angular/forms": "github:angular/forms-builds#eab77793122749910bab47cbb1890430ff05eeeb", - "@angular/language-service": "github:angular/language-service-builds#5e2031816114b96afd9f91f36a7094547d0e0380", - "@angular/localize": "github:angular/localize-builds#668528de3560b11838d2aa860cdf069029bc52d9", - "@angular/material": "github:angular/material-builds#c656d718165fdc46c61233a24299116c5ce22120", - "@angular/material-moment-adapter": "github:angular/material-moment-adapter-builds#897592312717606ad45293a5edb57fca7eb34103", - "@angular/platform-browser": "github:angular/platform-browser-builds#6b722574f3e91440e74514226e3b49c09edd725c", - "@angular/platform-browser-dynamic": "github:angular/platform-browser-dynamic-builds#5fb9cf19ea62a4c3dcb8b95db0f551e0bcfe4a0a", - "@angular/platform-server": "github:angular/platform-server-builds#0a057e0c1f45d6de067ff23621e9ea2c6bdbd4b9", - "@angular/router": "github:angular/router-builds#d65390913af936ef044ca7f48700a641ebc072e5", - "@angular/service-worker": "github:angular/service-worker-builds#1bf1429e0965e9723d23c246d73f9e315c8093ad" + "@angular/animations": "github:angular/animations-builds#ab35ce3c6ffee90f37ab31029d18044ea8d8ef8d", + "@angular/cdk": "github:angular/cdk-builds#73fc23814a95f9f39b2e1a122cf29b7fb7fe6e78", + "@angular/common": "github:angular/common-builds#8e9264e95edd21fc75c143499ae31af2e7cd4986", + "@angular/compiler": "github:angular/compiler-builds#def2767e13d09ea039538ddf3244238ae9ad7f20", + "@angular/compiler-cli": "github:angular/compiler-cli-builds#e1e61fab6e3191bcf57627f29afb59e364b380fb", + "@angular/core": "github:angular/core-builds#a2db0038aff8f0cc17f9ce77e4fe269c6fdc210f", + "@angular/forms": "github:angular/forms-builds#000e80b9cb5b1591518dfec0f9b7d99d774673d9", + "@angular/language-service": "github:angular/language-service-builds#f426109144af2caaa4cb02382fe250a40db55535", + "@angular/localize": "github:angular/localize-builds#9dfb48b6460f2959a319ece404cba204a33d6579", + "@angular/material": "github:angular/material-builds#7ec5389ddc083aceb4872527da6cc57fce22110b", + "@angular/material-moment-adapter": "github:angular/material-moment-adapter-builds#1f751ef6e79aa52fb3978a026f996cf0a46fb063", + "@angular/platform-browser": "github:angular/platform-browser-builds#61e17ac8708288ba87a4b2c10bb780b98b065703", + "@angular/platform-browser-dynamic": "github:angular/platform-browser-dynamic-builds#6e4ec4f77dfc11ffd40ab5d204afaaf898cf924a", + "@angular/platform-server": "github:angular/platform-server-builds#8fc220d8196229b294965acf4ace8774918ba20b", + "@angular/router": "github:angular/router-builds#96e5b7fffd0fda9add2d1c789de4c2d82856276a", + "@angular/service-worker": "github:angular/service-worker-builds#1bf20b405acae2909b6b92f326b2cb1364e32577" } } From 9f8f40ed1d81090700fe3194b4b3c220511f1fa9 Mon Sep 17 00:00:00 2001 From: Alan Agius Date: Fri, 20 Feb 2026 16:54:51 +0100 Subject: [PATCH 008/226] fix(@angular/cli): validate package manager version using `semver.valid` and throw an error if invalid Prior to this change an `An unhandled exception occurred: Invalid Version: ` was being thrown. --- .../angular/cli/src/package-managers/package-manager.ts | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/packages/angular/cli/src/package-managers/package-manager.ts b/packages/angular/cli/src/package-managers/package-manager.ts index fd3b0a663a79..f8f6831485ea 100644 --- a/packages/angular/cli/src/package-managers/package-manager.ts +++ b/packages/angular/cli/src/package-managers/package-manager.ts @@ -14,7 +14,7 @@ import { join, relative, resolve } from 'node:path'; import npa from 'npm-package-arg'; -import { maxSatisfying } from 'semver'; +import { maxSatisfying, valid } from 'semver'; import { PackageManagerError } from './error'; import { Host } from './host'; import { Logger } from './logger'; @@ -370,6 +370,10 @@ export class PackageManager { const { stdout } = await this.#run(this.descriptor.versionCommand); this.#version = stdout.trim(); + if (!valid(this.#version)) { + throw new Error(`Invalid semver version for ${this.name}: "${this.#version}"`); + } + return this.#version; } From 9c2ddfe187a37880708bba011dc8fe83cca2e748 Mon Sep 17 00:00:00 2001 From: Alan Agius <17563226+alan-agius4@users.noreply.github.com> Date: Fri, 20 Feb 2026 16:56:01 +0000 Subject: [PATCH 009/226] release: switch the next branch to v22.0.0-next.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 6852bca7cec5..6f9e2012ba44 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@angular/devkit-repo", - "version": "21.3.0-next.0", + "version": "22.0.0-next.0", "private": true, "description": "Software Development Kit for Angular", "keywords": [ From 6cf621c905de4815b1e12964fb909876ca6e3ea3 Mon Sep 17 00:00:00 2001 From: Alan Agius Date: Mon, 23 Feb 2026 10:08:15 +0100 Subject: [PATCH 010/226] fix(@angular/ssr): validate host headers to prevent header-based SSRF This change introduces strict validation for `Host`, `X-Forwarded-Host`, `X-Forwarded-Proto`, and `X-Forwarded-Port` headers in the Angular SSR request handling pipeline, including `CommonEngine` and `AngularAppEngine`. --- goldens/public-api/angular/ssr/index.api.md | 6 + .../public-api/angular/ssr/node/index.api.md | 9 +- .../src/builders/application/execute-build.ts | 3 +- .../build/src/builders/application/options.ts | 3 +- .../src/builders/application/schema.json | 8 + .../src/builders/dev-server/vite/index.ts | 12 +- .../src/utils/server-rendering/manifest.ts | 3 + .../src/utils/server-rendering/prerender.ts | 6 + packages/angular/ssr/BUILD.bazel | 2 +- packages/angular/ssr/node/public_api.ts | 2 +- packages/angular/ssr/node/src/app-engine.ts | 43 ++- .../node/src/common-engine/common-engine.ts | 47 +++- .../ssr/node/src/environment-options.ts | 29 ++ packages/angular/ssr/node/src/request.ts | 19 +- packages/angular/ssr/public_api.ts | 2 +- packages/angular/ssr/src/app-engine.ts | 92 ++++++- packages/angular/ssr/src/app.ts | 21 ++ packages/angular/ssr/src/manifest.ts | 6 +- packages/angular/ssr/src/utils/validation.ts | 256 ++++++++++++++++++ packages/angular/ssr/test/app-engine_spec.ts | 158 ++++++++++- .../angular/ssr/test/utils/validation_spec.ts | 240 ++++++++++++++++ .../src/builders/ssr-dev-server/index.ts | 11 +- .../ssr-dev-server/specs/proxy_spec.ts | 3 +- .../builders/ssr-dev-server/specs/ssl_spec.ts | 3 +- .../ssr-dev-server/specs/works_spec.ts | 3 +- .../files/server-builder/server.ts.template | 4 +- packages/schematics/angular/ssr/index.ts | 6 +- .../express-engine-csp-nonce.ts | 1 + .../express-engine-ngmodule.ts | 1 + .../express-engine-standalone.ts | 1 + ...outes-output-mode-server-i18n-base-href.ts | 1 + ...routes-output-mode-server-i18n-sub-path.ts | 1 + .../server-routes-output-mode-server-i18n.ts | 1 + ...tes-output-mode-server-platform-neutral.ts | 3 +- .../server-routes-output-mode-server.ts | 1 + .../server-routes-preload-links.ts | 1 + 36 files changed, 961 insertions(+), 47 deletions(-) create mode 100644 packages/angular/ssr/node/src/environment-options.ts create mode 100644 packages/angular/ssr/src/utils/validation.ts create mode 100644 packages/angular/ssr/test/utils/validation_spec.ts diff --git a/goldens/public-api/angular/ssr/index.api.md b/goldens/public-api/angular/ssr/index.api.md index 81764fcc1f62..cbdacabfd7f6 100644 --- a/goldens/public-api/angular/ssr/index.api.md +++ b/goldens/public-api/angular/ssr/index.api.md @@ -11,11 +11,17 @@ import { Type } from '@angular/core'; // @public export class AngularAppEngine { + constructor(options?: AngularAppEngineOptions); handle(request: Request, requestContext?: unknown): Promise; static ɵallowStaticRouteRender: boolean; static ɵhooks: Hooks; } +// @public +export interface AngularAppEngineOptions { + allowedHosts?: readonly string[]; +} + // @public export function createRequestHandler(handler: RequestHandlerFunction): RequestHandlerFunction; diff --git a/goldens/public-api/angular/ssr/node/index.api.md b/goldens/public-api/angular/ssr/node/index.api.md index eccb6396938e..2c52c06b47c1 100644 --- a/goldens/public-api/angular/ssr/node/index.api.md +++ b/goldens/public-api/angular/ssr/node/index.api.md @@ -15,8 +15,12 @@ import { Type } from '@angular/core'; // @public export class AngularNodeAppEngine { - constructor(); - handle(request: IncomingMessage | Http2ServerRequest, requestContext?: unknown): Promise; + constructor(options?: AngularNodeAppEngineOptions); + handle(request: IncomingMessage | Http2ServerRequest | Request, requestContext?: unknown): Promise; +} + +// @public +export interface AngularNodeAppEngineOptions extends AngularAppEngineOptions { } // @public @@ -27,6 +31,7 @@ export class CommonEngine { // @public (undocumented) export interface CommonEngineOptions { + allowedHosts?: readonly string[]; bootstrap?: Type<{}> | ((context: BootstrapContext) => Promise); enablePerformanceProfiler?: boolean; providers?: StaticProvider[]; diff --git a/packages/angular/build/src/builders/application/execute-build.ts b/packages/angular/build/src/builders/application/execute-build.ts index 0654cd965558..aaddc5b6ef7e 100644 --- a/packages/angular/build/src/builders/application/execute-build.ts +++ b/packages/angular/build/src/builders/application/execute-build.ts @@ -56,6 +56,7 @@ export async function executeBuild( verbose, colors, jsonLogs, + security, } = options; // TODO: Consider integrating into watch mode. Would require full rebuild on target changes. @@ -263,7 +264,7 @@ export async function executeBuild( if (serverEntryPoint) { executionResult.addOutputFile( SERVER_APP_ENGINE_MANIFEST_FILENAME, - generateAngularServerAppEngineManifest(i18nOptions, baseHref), + generateAngularServerAppEngineManifest(i18nOptions, security.allowedHosts, baseHref), BuildOutputFileType.ServerRoot, ); } diff --git a/packages/angular/build/src/builders/application/options.ts b/packages/angular/build/src/builders/application/options.ts index 83b7ea428f35..4f0d1295a7e3 100644 --- a/packages/angular/build/src/builders/application/options.ts +++ b/packages/angular/build/src/builders/application/options.ts @@ -400,8 +400,9 @@ export async function normalizeOptions( } } - const autoCsp = options.security?.autoCsp; + const { autoCsp, allowedHosts = [] } = options.security ?? {}; const security = { + allowedHosts, autoCsp: autoCsp ? { unsafeEval: autoCsp === true ? false : !!autoCsp.unsafeEval, diff --git a/packages/angular/build/src/builders/application/schema.json b/packages/angular/build/src/builders/application/schema.json index 8db4e6145b3f..5498a21fe004 100644 --- a/packages/angular/build/src/builders/application/schema.json +++ b/packages/angular/build/src/builders/application/schema.json @@ -52,6 +52,14 @@ "type": "object", "additionalProperties": false, "properties": { + "allowedHosts": { + "description": "A list of hostnames that are allowed to access the server-side application. For more information, see https://angular.dev/best-practices/security#preventing-server-side-request-forgery-ssrf.", + "type": "array", + "uniqueItems": true, + "items": { + "type": "string" + } + }, "autoCsp": { "description": "Enables automatic generation of a hash-based Strict Content Security Policy (https://web.dev/articles/strict-csp#choose-hash) based on scripts in index.html. Will default to true once we are out of experimental/preview phases.", "default": false, diff --git a/packages/angular/build/src/builders/dev-server/vite/index.ts b/packages/angular/build/src/builders/dev-server/vite/index.ts index 8129daac1ba1..009da8a40688 100644 --- a/packages/angular/build/src/builders/dev-server/vite/index.ts +++ b/packages/angular/build/src/builders/dev-server/vite/index.ts @@ -9,7 +9,6 @@ import type { BuilderContext } from '@angular-devkit/architect'; import type { Plugin } from 'esbuild'; import assert from 'node:assert'; -import { builtinModules, isBuiltin } from 'node:module'; import { join } from 'node:path'; import type { Connect, ViteDevServer } from 'vite'; import type { ComponentStyleRecord } from '../../../tools/vite/middlewares'; @@ -21,7 +20,6 @@ import { Result, ResultKind } from '../../application/results'; import { OutputHashing } from '../../application/schema'; import { type ApplicationBuilderInternalOptions, - type ExternalResultMetadata, JavaScriptTransformer, getSupportedBrowsers, isZonelessApp, @@ -99,8 +97,16 @@ export async function* serveWithVite( browserOptions.ssr ||= true; } - // Disable auto CSP. + const allowedHosts = Array.isArray(serverOptions.allowedHosts) + ? [...serverOptions.allowedHosts] + : []; + + // Always allow the dev server host + allowedHosts.push(serverOptions.host); + browserOptions.security = { + allowedHosts, + // Disable auto CSP. autoCsp: false, }; diff --git a/packages/angular/build/src/utils/server-rendering/manifest.ts b/packages/angular/build/src/utils/server-rendering/manifest.ts index b01bff38b58f..34c2e334b52c 100644 --- a/packages/angular/build/src/utils/server-rendering/manifest.ts +++ b/packages/angular/build/src/utils/server-rendering/manifest.ts @@ -53,11 +53,13 @@ function escapeUnsafeChars(str: string): string { * * @param i18nOptions - The internationalization options for the application build. This * includes settings for inlining locales and determining the output structure. + * @param allowedHosts - A list of hosts that are allowed to access the server-side application. * @param baseHref - The base HREF for the application. This is used to set the base URL * for all relative URLs in the application. */ export function generateAngularServerAppEngineManifest( i18nOptions: NormalizedApplicationBuildOptions['i18nOptions'], + allowedHosts: string[], baseHref: string | undefined, ): string { const entryPoints: Record = {}; @@ -84,6 +86,7 @@ export function generateAngularServerAppEngineManifest( const manifestContent = ` export default { basePath: '${basePath}', + allowedHosts: ${JSON.stringify(allowedHosts, undefined, 2)}, supportedLocales: ${JSON.stringify(supportedLocales, undefined, 2)}, entryPoints: { ${Object.entries(entryPoints) diff --git a/packages/angular/build/src/utils/server-rendering/prerender.ts b/packages/angular/build/src/utils/server-rendering/prerender.ts index f33f851f10c4..39d0f0934c92 100644 --- a/packages/angular/build/src/utils/server-rendering/prerender.ts +++ b/packages/angular/build/src/utils/server-rendering/prerender.ts @@ -225,6 +225,9 @@ async function renderPages( hasSsrEntry: !!outputFilesForWorker['server.mjs'], } as RenderWorkerData, execArgv: workerExecArgv, + env: { + 'NG_ALLOWED_HOSTS': 'localhost', + }, }); try { @@ -337,6 +340,9 @@ async function getAllRoutes( hasSsrEntry: !!outputFilesForWorker['server.mjs'], } as RoutesExtractorWorkerData, execArgv: workerExecArgv, + env: { + 'NG_ALLOWED_HOSTS': 'localhost', + }, }); try { diff --git a/packages/angular/ssr/BUILD.bazel b/packages/angular/ssr/BUILD.bazel index 16498600f603..ec6187173fbf 100644 --- a/packages/angular/ssr/BUILD.bazel +++ b/packages/angular/ssr/BUILD.bazel @@ -20,7 +20,7 @@ ts_project( ), args = [ "--lib", - "dom,es2022", + "dom.iterable,dom,es2022", ], data = [ "//packages/angular/ssr/third_party/beasties:beasties_bundled", diff --git a/packages/angular/ssr/node/public_api.ts b/packages/angular/ssr/node/public_api.ts index 81932873a440..89900f95cc5c 100644 --- a/packages/angular/ssr/node/public_api.ts +++ b/packages/angular/ssr/node/public_api.ts @@ -12,7 +12,7 @@ export { type CommonEngineOptions, } from './src/common-engine/common-engine'; -export { AngularNodeAppEngine } from './src/app-engine'; +export { AngularNodeAppEngine, type AngularNodeAppEngineOptions } from './src/app-engine'; export { createNodeRequestHandler, type NodeRequestHandlerFunction } from './src/handler'; export { writeResponseToNodeResponse } from './src/response'; diff --git a/packages/angular/ssr/node/src/app-engine.ts b/packages/angular/ssr/node/src/app-engine.ts index 8edac0ef69c6..29eb1fd366ab 100644 --- a/packages/angular/ssr/node/src/app-engine.ts +++ b/packages/angular/ssr/node/src/app-engine.ts @@ -9,9 +9,16 @@ import { AngularAppEngine } from '@angular/ssr'; import type { IncomingMessage } from 'node:http'; import type { Http2ServerRequest } from 'node:http2'; +import { AngularAppEngineOptions } from '../../src/app-engine'; +import { getAllowedHostsFromEnv } from './environment-options'; import { attachNodeGlobalErrorHandlers } from './errors'; import { createWebRequestFromNodeRequest } from './request'; +/** + * Options for the Angular Node.js server application engine. + */ +export interface AngularNodeAppEngineOptions extends AngularAppEngineOptions {} + /** * Angular server application engine. * Manages Angular server applications (including localized ones), handles rendering requests, @@ -21,9 +28,18 @@ import { createWebRequestFromNodeRequest } from './request'; * application to ensure consistent handling of rendering requests and resource management. */ export class AngularNodeAppEngine { - private readonly angularAppEngine = new AngularAppEngine(); + private readonly angularAppEngine: AngularAppEngine; + + /** + * Creates a new instance of the Angular Node.js server application engine. + * @param options Options for the Angular Node.js server application engine. + */ + constructor(options?: AngularNodeAppEngineOptions) { + this.angularAppEngine = new AngularAppEngine({ + ...options, + allowedHosts: [...getAllowedHostsFromEnv(), ...(options?.allowedHosts ?? [])], + }); - constructor() { attachNodeGlobalErrorHandlers(); } @@ -31,21 +47,36 @@ export class AngularNodeAppEngine { * Handles an incoming HTTP request by serving prerendered content, performing server-side rendering, * or delivering a static file for client-side rendered routes based on the `RenderMode` setting. * - * This method adapts Node.js's `IncomingMessage` or `Http2ServerRequest` + * This method adapts Node.js's `IncomingMessage`, `Http2ServerRequest` or `Request` * to a format compatible with the `AngularAppEngine` and delegates the handling logic to it. * - * @param request - The incoming HTTP request (`IncomingMessage` or `Http2ServerRequest`). + * @param request - The incoming HTTP request (`IncomingMessage`, `Http2ServerRequest` or `Request`). * @param requestContext - Optional context for rendering, such as metadata associated with the request. * @returns A promise that resolves to the resulting HTTP response object, or `null` if no matching Angular route is found. * * @remarks A request to `https://www.example.com/page/index.html` will serve or render the Angular route * corresponding to `https://www.example.com/page`. + * + * @remarks + * To prevent potential Server-Side Request Forgery (SSRF), this function verifies the hostname + * of the `request.url` against a list of authorized hosts. + * If the hostname is not recognized and `allowedHosts` is not empty, a Client-Side Rendered (CSR) version of the + * page is returned otherwise a 400 Bad Request is returned. + * + * Resolution: + * Authorize your hostname by configuring `allowedHosts` in `angular.json` in: + * `projects.[project-name].architect.build.options.security.allowedHosts`. + * Alternatively, you can define the allowed hostname via the environment variable `process.env['NG_ALLOWED_HOSTS']` + * or pass it directly through the configuration options of `AngularNodeAppEngine`. + * + * For more information see: https://angular.dev/best-practices/security#preventing-server-side-request-forgery-ssrf */ async handle( - request: IncomingMessage | Http2ServerRequest, + request: IncomingMessage | Http2ServerRequest | Request, requestContext?: unknown, ): Promise { - const webRequest = createWebRequestFromNodeRequest(request); + const webRequest = + request instanceof Request ? request : createWebRequestFromNodeRequest(request); return this.angularAppEngine.handle(webRequest, requestContext); } diff --git a/packages/angular/ssr/node/src/common-engine/common-engine.ts b/packages/angular/ssr/node/src/common-engine/common-engine.ts index 673156ee6b43..1c130d9abe86 100644 --- a/packages/angular/ssr/node/src/common-engine/common-engine.ts +++ b/packages/angular/ssr/node/src/common-engine/common-engine.ts @@ -12,6 +12,8 @@ import { renderApplication, renderModule, ɵSERVER_CONTEXT } from '@angular/plat import * as fs from 'node:fs'; import { dirname, join, normalize, resolve } from 'node:path'; import { URL } from 'node:url'; +import { validateUrl } from '../../../src/utils/validation'; +import { getAllowedHostsFromEnv } from '../environment-options'; import { attachNodeGlobalErrorHandlers } from '../errors'; import { CommonEngineInlineCriticalCssProcessor } from './inline-css-processor'; import { @@ -31,6 +33,9 @@ export interface CommonEngineOptions { /** Enable request performance profiling data collection and printing the results in the server console. */ enablePerformanceProfiler?: boolean; + + /** A set of hostnames that are allowed to access the server. */ + allowedHosts?: readonly string[]; } export interface CommonEngineRenderOptions { @@ -64,8 +69,14 @@ export class CommonEngine { private readonly templateCache = new Map(); private readonly inlineCriticalCssProcessor = new CommonEngineInlineCriticalCssProcessor(); private readonly pageIsSSG = new Map(); + private readonly allowedHosts: ReadonlySet; + + constructor(private options?: CommonEngineOptions) { + this.allowedHosts = new Set([ + ...getAllowedHostsFromEnv(), + ...(this.options?.allowedHosts ?? []), + ]); - constructor(private options?: CommonEngineOptions | undefined) { attachNodeGlobalErrorHandlers(); } @@ -74,6 +85,40 @@ export class CommonEngine { * render options */ async render(opts: CommonEngineRenderOptions): Promise { + const { url } = opts; + + if (url && URL.canParse(url)) { + const urlObj = new URL(url); + try { + validateUrl(urlObj, this.allowedHosts); + } catch (error) { + const isAllowedHostConfigured = this.allowedHosts.size > 0; + // eslint-disable-next-line no-console + console.error( + `ERROR: ${(error as Error).message}` + + 'Please provide a list of allowed hosts in the "allowedHosts" option in the "CommonEngine" constructor.', + isAllowedHostConfigured + ? '' + : '\nFalling back to client side rendering. This will become a 400 Bad Request in a future major version.', + ); + + if (!isAllowedHostConfigured) { + // Fallback to CSR to avoid a breaking change. + // TODO(alanagius): Return a 400 and remove this fallback in the next major version (v22). + let document = opts.document; + if (!document && opts.documentFilePath) { + document = opts.document ?? (await this.getDocument(opts.documentFilePath)); + } + + if (document) { + return document; + } + } + + throw error; + } + } + const enablePerformanceProfiler = this.options?.enablePerformanceProfiler; const runMethod = enablePerformanceProfiler diff --git a/packages/angular/ssr/node/src/environment-options.ts b/packages/angular/ssr/node/src/environment-options.ts new file mode 100644 index 000000000000..b18dcd08ebe6 --- /dev/null +++ b/packages/angular/ssr/node/src/environment-options.ts @@ -0,0 +1,29 @@ +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.dev/license + */ + +/** + * Retrieves the list of allowed hosts from the environment variable `NG_ALLOWED_HOSTS`. + * @returns An array of allowed hosts. + */ +export function getAllowedHostsFromEnv(): ReadonlyArray { + const allowedHosts: string[] = []; + const envNgAllowedHosts = process.env['NG_ALLOWED_HOSTS']; + if (!envNgAllowedHosts) { + return allowedHosts; + } + + const hosts = envNgAllowedHosts.split(','); + for (const host of hosts) { + const trimmed = host.trim(); + if (trimmed.length > 0) { + allowedHosts.push(trimmed); + } + } + + return allowedHosts; +} diff --git a/packages/angular/ssr/node/src/request.ts b/packages/angular/ssr/node/src/request.ts index 32d90d0029fc..402ec29ba56d 100644 --- a/packages/angular/ssr/node/src/request.ts +++ b/packages/angular/ssr/node/src/request.ts @@ -8,6 +8,7 @@ import type { IncomingHttpHeaders, IncomingMessage } from 'node:http'; import type { Http2ServerRequest } from 'node:http2'; +import { getFirstHeaderValue } from '../../src/utils/validation'; /** * A set containing all the pseudo-headers defined in the HTTP/2 specification. @@ -103,21 +104,3 @@ export function createRequestUrl(nodeRequest: IncomingMessage | Http2ServerReque return new URL(`${protocol}://${hostnameWithPort}${originalUrl ?? url}`); } - -/** - * Extracts the first value from a multi-value header string. - * - * @param value - A string or an array of strings representing the header values. - * If it's a string, values are expected to be comma-separated. - * @returns The first trimmed value from the multi-value header, or `undefined` if the input is invalid or empty. - * - * @example - * ```typescript - * getFirstHeaderValue("value1, value2, value3"); // "value1" - * getFirstHeaderValue(["value1", "value2"]); // "value1" - * getFirstHeaderValue(undefined); // undefined - * ``` - */ -function getFirstHeaderValue(value: string | string[] | undefined): string | undefined { - return value?.toString().split(',', 1)[0]?.trim(); -} diff --git a/packages/angular/ssr/public_api.ts b/packages/angular/ssr/public_api.ts index e685f4ceabe3..e566d8414f2f 100644 --- a/packages/angular/ssr/public_api.ts +++ b/packages/angular/ssr/public_api.ts @@ -8,7 +8,7 @@ export * from './private_export'; -export { AngularAppEngine } from './src/app-engine'; +export { AngularAppEngine, type AngularAppEngineOptions } from './src/app-engine'; export { createRequestHandler, type RequestHandlerFunction } from './src/handler'; export { diff --git a/packages/angular/ssr/src/app-engine.ts b/packages/angular/ssr/src/app-engine.ts index 0cb728e8535d..0ba82002dcef 100644 --- a/packages/angular/ssr/src/app-engine.ts +++ b/packages/angular/ssr/src/app-engine.ts @@ -11,6 +11,17 @@ import { Hooks } from './hooks'; import { getPotentialLocaleIdFromUrl, getPreferredLocale } from './i18n'; import { EntryPointExports, getAngularAppEngineManifest } from './manifest'; import { joinUrlParts } from './utils/url'; +import { cloneRequestAndPatchHeaders, validateRequest } from './utils/validation'; + +/** + * Options for the Angular server application engine. + */ +export interface AngularAppEngineOptions { + /** + * A set of allowed hostnames for the server application. + */ + allowedHosts?: readonly string[]; +} /** * Angular server application engine. @@ -45,6 +56,11 @@ export class AngularAppEngine { */ private readonly manifest = getAngularAppEngineManifest(); + /** + * A set of allowed hostnames for the server application. + */ + private readonly allowedHosts: ReadonlySet; + /** * A map of supported locales from the server application's manifest. */ @@ -57,6 +73,14 @@ export class AngularAppEngine { */ private readonly entryPointsCache = new Map>(); + /** + * Creates a new instance of the Angular server application engine. + * @param options Options for the Angular server application engine. + */ + constructor(options?: AngularAppEngineOptions) { + this.allowedHosts = new Set([...(options?.allowedHosts ?? []), ...this.manifest.allowedHosts]); + } + /** * Handles an incoming HTTP request by serving prerendered content, performing server-side rendering, * or delivering a static file for client-side rendered routes based on the `RenderMode` setting. @@ -67,12 +91,38 @@ export class AngularAppEngine { * * @remarks A request to `https://www.example.com/page/index.html` will serve or render the Angular route * corresponding to `https://www.example.com/page`. + * + * @remarks + * To prevent potential Server-Side Request Forgery (SSRF), this function verifies the hostname + * of the `request.url` against a list of authorized hosts. + * If the hostname is not recognized and `allowedHosts` is not empty, a Client-Side Rendered (CSR) version of the + * page is returned otherwise a 400 Bad Request is returned. + * Resolution: + * Authorize your hostname by configuring `allowedHosts` in `angular.json` in: + * `projects.[project-name].architect.build.options.security.allowedHosts`. + * Alternatively, you pass it directly through the configuration options of `AngularAppEngine`. + * + * For more information see: https://angular.dev/best-practices/security#preventing-server-side-request-forgery-ssrf */ async handle(request: Request, requestContext?: unknown): Promise { - const serverApp = await this.getAngularServerAppForRequest(request); + const allowedHost = this.allowedHosts; + try { + validateRequest(request, allowedHost); + } catch (error) { + return this.handleValidationError(error as Error, request); + } + + // Clone request with patched headers to prevent unallowed host header access. + const { request: securedRequest, onError: onHeaderValidationError } = + cloneRequestAndPatchHeaders(request, allowedHost); + + const serverApp = await this.getAngularServerAppForRequest(securedRequest); if (serverApp) { - return serverApp.handle(request, requestContext); + return Promise.race([ + onHeaderValidationError.then((error) => this.handleValidationError(error, securedRequest)), + serverApp.handle(securedRequest, requestContext), + ]); } if (this.supportedLocales.length > 1) { @@ -201,4 +251,42 @@ export class AngularAppEngine { return this.getEntryPointExports(potentialLocale) ?? this.getEntryPointExports(''); } + + /** + * Handles validation errors by logging the error and returning an appropriate response. + * + * @param error - The validation error to handle. + * @param request - The HTTP request that caused the validation error. + * @returns A promise that resolves to a `Response` object with a 400 status code if allowed hosts are configured, + * or `null` if allowed hosts are not configured (in which case the request is served client-side). + */ + private async handleValidationError(error: Error, request: Request): Promise { + const isAllowedHostConfigured = this.allowedHosts.size > 0; + const errorMessage = error.message; + + // eslint-disable-next-line no-console + console.error( + `ERROR: Bad Request ("${request.url}").\n` + + errorMessage + + (isAllowedHostConfigured + ? '' + : '\nFalling back to client side rendering. This will become a 400 Bad Request in a future major version.') + + '\n\nFor more information, see https://angular.dev/best-practices/security#preventing-server-side-request-forgery-ssrf', + ); + + if (isAllowedHostConfigured) { + // Allowed hosts has been configured incorrectly, thus we can return a 400 bad request. + return new Response(errorMessage, { + status: 400, + statusText: 'Bad Request', + headers: { 'Content-Type': 'text/plain' }, + }); + } + + // Fallback to CSR to avoid a breaking change. + // TODO(alanagius): Return a 400 and remove this fallback in the next major version (v22). + const serverApp = await this.getAngularServerAppForRequest(request); + + return serverApp?.serveClientSidePage() ?? null; + } } diff --git a/packages/angular/ssr/src/app.ts b/packages/angular/ssr/src/app.ts index 96afaa44c8d6..76296ebe737d 100644 --- a/packages/angular/ssr/src/app.ts +++ b/packages/angular/ssr/src/app.ts @@ -484,6 +484,27 @@ export class AngularServerApp { return html; } + + /** + * Serves the client-side version of the application. + * TODO(alanagius): Remove this method in version 22. + * @internal + */ + async serveClientSidePage(): Promise { + const { + manifest: { locale }, + assets, + } = this; + + const html = await assets.getServerAsset('index.csr.html').text(); + + return new Response(html, { + headers: new Headers({ + 'Content-Type': 'text/html;charset=UTF-8', + ...(locale !== undefined ? { 'Content-Language': locale } : {}), + }), + }); + } } let angularServerApp: AngularServerApp | undefined; diff --git a/packages/angular/ssr/src/manifest.ts b/packages/angular/ssr/src/manifest.ts index 0de603bba104..21ded49b3e10 100644 --- a/packages/angular/ssr/src/manifest.ts +++ b/packages/angular/ssr/src/manifest.ts @@ -6,7 +6,6 @@ * found in the LICENSE file at https://angular.dev/license */ -import type { BootstrapContext } from '@angular/platform-browser'; import type { SerializableRouteTreeNode } from './routes/route-tree'; import { AngularBootstrap } from './utils/ng'; @@ -74,6 +73,11 @@ export interface AngularAppEngineManifest { * - `value`: The url segment associated with that locale. */ readonly supportedLocales: Readonly>; + + /** + * A readonly array of allowed hostnames. + */ + readonly allowedHosts: Readonly; } /** diff --git a/packages/angular/ssr/src/utils/validation.ts b/packages/angular/ssr/src/utils/validation.ts new file mode 100644 index 000000000000..97ac8606f3b4 --- /dev/null +++ b/packages/angular/ssr/src/utils/validation.ts @@ -0,0 +1,256 @@ +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.dev/license + */ + +/** + * The set of headers that should be validated for host header injection attacks. + */ +const HOST_HEADERS_TO_VALIDATE: ReadonlySet = new Set(['host', 'x-forwarded-host']); + +/** + * Regular expression to validate that the port is a numeric value. + */ +const VALID_PORT_REGEX = /^\d+$/; + +/** + * Regular expression to validate that the protocol is either http or https (case-insensitive). + */ +const VALID_PROTO_REGEX = /^https?$/i; + +/** + * Regular expression to validate that the host is a valid hostname. + */ +const VALID_HOST_REGEX = /^[a-z0-9.:-]+$/i; + +/** + * Extracts the first value from a multi-value header string. + * + * @param value - A string or an array of strings representing the header values. + * If it's a string, values are expected to be comma-separated. + * @returns The first trimmed value from the multi-value header, or `undefined` if the input is invalid or empty. + * + * @example + * ```typescript + * getFirstHeaderValue("value1, value2, value3"); // "value1" + * getFirstHeaderValue(["value1", "value2"]); // "value1" + * getFirstHeaderValue(undefined); // undefined + * ``` + */ +export function getFirstHeaderValue( + value: string | string[] | undefined | null, +): string | undefined { + return value?.toString().split(',', 1)[0]?.trim(); +} + +/** + * Validates a request. + * + * @param request - The incoming `Request` object to validate. + * @param allowedHosts - A set of allowed hostnames. + * @throws Error if any of the validated headers contain invalid values. + */ +export function validateRequest(request: Request, allowedHosts: ReadonlySet): void { + validateHeaders(request); + validateUrl(new URL(request.url), allowedHosts); +} + +/** + * Validates that the hostname of a given URL is allowed. + * + * @param url - The URL object to validate. + * @param allowedHosts - A set of allowed hostnames. + * @throws Error if the hostname is not in the allowlist. + */ +export function validateUrl(url: URL, allowedHosts: ReadonlySet): void { + const { hostname } = url; + if (!isHostAllowed(hostname, allowedHosts)) { + throw new Error(`URL with hostname "${hostname}" is not allowed.`); + } +} + +/** + * Clones a request and patches the `get` method of the request headers to validate the host headers. + * @param request - The request to validate. + * @param allowedHosts - A set of allowed hostnames. + * @returns An object containing the cloned request and a promise that resolves to an error + * if any of the validated headers contain invalid values. + */ +export function cloneRequestAndPatchHeaders( + request: Request, + allowedHosts: ReadonlySet, +): { request: Request; onError: Promise } { + let onError: (value: Error) => void; + const onErrorPromise = new Promise((resolve) => { + onError = resolve; + }); + + const clonedReq = new Request(request.clone(), { + signal: request.signal, + }); + + const headers = clonedReq.headers; + + const originalGet = headers.get; + // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion + (headers.get as typeof originalGet) = function (name) { + const value = originalGet.call(headers, name); + if (!value) { + return value; + } + + validateHeader(name, value, allowedHosts, onError); + + return value; + }; + + const originalValues = headers.values; + // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion + (headers.values as typeof originalValues) = function () { + for (const name of HOST_HEADERS_TO_VALIDATE) { + validateHeader(name, originalGet.call(headers, name), allowedHosts, onError); + } + + return originalValues.call(headers); + }; + + const originalEntries = headers.entries; + // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion + (headers.entries as typeof originalEntries) = function () { + const iterator = originalEntries.call(headers); + + return { + next() { + const result = iterator.next(); + if (!result.done) { + const [key, value] = result.value; + validateHeader(key, value, allowedHosts, onError); + } + + return result; + }, + [Symbol.iterator]() { + return this; + }, + }; + }; + + // Ensure for...of loops use the new patched entries + (headers[Symbol.iterator] as typeof originalEntries) = headers.entries; + + return { request: clonedReq, onError: onErrorPromise }; +} + +/** + * Validates a specific header value against the allowed hosts. + * @param name - The name of the header to validate. + * @param value - The value of the header to validate. + * @param allowedHosts - A set of allowed hostnames. + * @param onError - A callback function to call if the header value is invalid. + * @throws Error if the header value is invalid. + */ +function validateHeader( + name: string, + value: string | null, + allowedHosts: ReadonlySet, + onError: (value: Error) => void, +): void { + if (!value) { + return; + } + + if (!HOST_HEADERS_TO_VALIDATE.has(name.toLowerCase())) { + return; + } + + try { + verifyHostAllowed(name, value, allowedHosts); + } catch (error) { + onError(error as Error); + + throw error; + } +} + +/** + * Validates a specific host header value against the allowed hosts. + * + * @param headerName - The name of the header to validate (e.g., 'host', 'x-forwarded-host'). + * @param headerValue - The value of the header to validate. + * @param allowedHosts - A set of allowed hostnames. + * @throws Error if the header value is invalid or the hostname is not in the allowlist. + */ +function verifyHostAllowed( + headerName: string, + headerValue: string, + allowedHosts: ReadonlySet, +): void { + const value = getFirstHeaderValue(headerValue); + if (!value) { + return; + } + + const url = `http://${value}`; + if (!URL.canParse(url)) { + throw new Error(`Header "${headerName}" contains an invalid value and cannot be parsed.`); + } + + const { hostname } = new URL(url); + if (!isHostAllowed(hostname, allowedHosts)) { + throw new Error(`Header "${headerName}" with value "${value}" is not allowed.`); + } +} + +/** + * Checks if the hostname is allowed. + * @param hostname - The hostname to check. + * @param allowedHosts - A set of allowed hostnames. + * @returns `true` if the hostname is allowed, `false` otherwise. + */ +function isHostAllowed(hostname: string, allowedHosts: ReadonlySet): boolean { + if (allowedHosts.has(hostname)) { + return true; + } + + for (const allowedHost of allowedHosts) { + if (!allowedHost.startsWith('*.')) { + continue; + } + + const domain = allowedHost.slice(1); + if (hostname.endsWith(domain)) { + return true; + } + } + + return false; +} + +/** + * Validates the headers of an incoming request. + * + * @param request - The incoming `Request` object containing the headers to validate. + * @throws Error if any of the validated headers contain invalid values. + */ +function validateHeaders(request: Request): void { + const headers = request.headers; + for (const headerName of HOST_HEADERS_TO_VALIDATE) { + const headerValue = getFirstHeaderValue(headers.get(headerName)); + if (headerValue && !VALID_HOST_REGEX.test(headerValue)) { + throw new Error(`Header "${headerName}" contains characters that are not allowed.`); + } + } + + const xForwardedPort = getFirstHeaderValue(headers.get('x-forwarded-port')); + if (xForwardedPort && !VALID_PORT_REGEX.test(xForwardedPort)) { + throw new Error('Header "x-forwarded-port" must be a numeric value.'); + } + + const xForwardedProto = getFirstHeaderValue(headers.get('x-forwarded-proto')); + if (xForwardedProto && !VALID_PROTO_REGEX.test(xForwardedProto)) { + throw new Error('Header "x-forwarded-proto" must be either "http" or "https".'); + } +} diff --git a/packages/angular/ssr/test/app-engine_spec.ts b/packages/angular/ssr/test/app-engine_spec.ts index b08931b9400b..29d638a8c13f 100644 --- a/packages/angular/ssr/test/app-engine_spec.ts +++ b/packages/angular/ssr/test/app-engine_spec.ts @@ -11,13 +11,26 @@ import '@angular/compiler'; /* eslint-enable import/no-unassigned-import */ -import { Component } from '@angular/core'; +import { Component, REQUEST, inject } from '@angular/core'; import { destroyAngularServerApp, getOrCreateAngularServerApp } from '../src/app'; import { AngularAppEngine } from '../src/app-engine'; import { setAngularAppEngineManifest } from '../src/manifest'; import { RenderMode } from '../src/routes/route-config'; import { setAngularAppTestingManifest } from './testing-utils'; +@Component({ + selector: 'app-home', + template: 'Home works', +}) +class TestHomeComponent { + private request = inject(REQUEST); + constructor() { + // Force header access to trigger validation + this.request?.headers.get('host'); + this.request?.headers.get('x-forwarded-host'); + } +} + function createEntryPoint(locale: string) { return async () => { @Component({ @@ -81,6 +94,7 @@ describe('AngularAppEngine', () => { describe('Localized app', () => { beforeAll(() => { setAngularAppEngineManifest({ + allowedHosts: ['example.com'], // Note: Although we are testing only one locale, we need to configure two or more // to ensure that we test a different code path. entryPoints: { @@ -160,6 +174,7 @@ describe('AngularAppEngine', () => { describe('Localized app with single locale', () => { beforeAll(() => { setAngularAppEngineManifest({ + allowedHosts: ['example.com'], entryPoints: { it: createEntryPoint('it'), }, @@ -226,6 +241,7 @@ describe('AngularAppEngine', () => { class HomeComponent {} setAngularAppEngineManifest({ + allowedHosts: ['example.com'], entryPoints: { '': async () => { setAngularAppTestingManifest( @@ -270,4 +286,144 @@ describe('AngularAppEngine', () => { expect(await response?.text()).toContain('Home works'); }); }); + + describe('Invalid host headers', () => { + let consoleErrorSpy: jasmine.Spy; + + describe('with allowed hosts configured', () => { + beforeAll(() => { + setAngularAppEngineManifest({ + allowedHosts: ['example.com'], + entryPoints: { + '': async () => { + setAngularAppTestingManifest( + [{ path: 'home', component: TestHomeComponent }], + [{ path: '**', renderMode: RenderMode.Server }], + ); + + return { + ɵgetOrCreateAngularServerApp: getOrCreateAngularServerApp, + ɵdestroyAngularServerApp: destroyAngularServerApp, + }; + }, + }, + basePath: '/', + supportedLocales: { 'en-US': '' }, + }); + + appEngine = new AngularAppEngine(); + }); + + beforeEach(() => { + consoleErrorSpy = spyOn(console, 'error'); + }); + + it('should return 400 when disallowed host', async () => { + const request = new Request('https://evil.com'); + const response = await appEngine.handle(request); + expect(response).not.toBeNull(); + expect(response?.status).toBe(400); + expect(await response?.text()).toContain('URL with hostname "evil.com" is not allowed.'); + expect(consoleErrorSpy).toHaveBeenCalledWith( + jasmine.stringMatching('URL with hostname "evil.com" is not allowed.'), + ); + }); + + it('should return 400 when disallowed host header', async () => { + const request = new Request('https://example.com/home', { + headers: { 'host': 'evil.com' }, + }); + const response = await appEngine.handle(request); + expect(response).not.toBeNull(); + expect(response?.status).toBe(400); + expect(await response?.text()).toContain( + 'Header "host" with value "evil.com" is not allowed.', + ); + expect(consoleErrorSpy).toHaveBeenCalledWith( + jasmine.stringMatching('Header "host" with value "evil.com" is not allowed.'), + ); + }); + + it('should return 400 when disallowed x-forwarded-host header', async () => { + const request = new Request('https://example.com/home', { + headers: { 'x-forwarded-host': 'evil.com' }, + }); + const response = await appEngine.handle(request); + expect(response).not.toBeNull(); + expect(response?.status).toBe(400); + expect(await response?.text()).toContain( + 'Header "x-forwarded-host" with value "evil.com" is not allowed.', + ); + expect(consoleErrorSpy).toHaveBeenCalledWith( + jasmine.stringMatching('Header "x-forwarded-host" with value "evil.com" is not allowed.'), + ); + }); + + it('should return 400 when host with path separator', async () => { + const request = new Request('https://example.com/home', { + headers: { 'host': 'example.com/evil' }, + }); + const response = await appEngine.handle(request); + expect(response).not.toBeNull(); + expect(response?.status).toBe(400); + expect(await response?.text()).toContain( + 'Header "host" contains characters that are not allowed.', + ); + expect(consoleErrorSpy).toHaveBeenCalledWith( + jasmine.stringMatching('Header "host" contains characters that are not allowed.'), + ); + }); + }); + + describe('without allowed hosts configured', () => { + beforeAll(() => { + setAngularAppEngineManifest({ + allowedHosts: [], + entryPoints: { + '': async () => { + setAngularAppTestingManifest( + [{ path: 'home', component: TestHomeComponent }], + [{ path: '**', renderMode: RenderMode.Server }], + ); + + return { + ɵgetOrCreateAngularServerApp: getOrCreateAngularServerApp, + ɵdestroyAngularServerApp: destroyAngularServerApp, + }; + }, + }, + basePath: '/', + supportedLocales: { 'en-US': '' }, + }); + + appEngine = new AngularAppEngine(); + }); + + beforeEach(() => { + consoleErrorSpy = spyOn(console, 'error'); + }); + + it('should log error and fallback to CSR when disallowed host', async () => { + const request = new Request('https://example.com'); + const response = await appEngine.handle(request); + expect(response).not.toBeNull(); + expect(await response?.text()).toContain('CSR page'); + expect(consoleErrorSpy).toHaveBeenCalledWith( + jasmine.stringMatching('URL with hostname "example.com" is not allowed.'), + ); + }); + + it('should log error and fallback to CSR when host with path separator', async () => { + const request = new Request('https://example.com/home', { + headers: { 'host': 'example.com/evil' }, + }); + const response = await appEngine.handle(request); + expect(response).not.toBeNull(); + expect(await response?.text()).toContain('CSR page'); + expect(consoleErrorSpy).toHaveBeenCalledWith( + jasmine.stringMatching('Header "host" contains characters that are not allowed.'), + ); + }); + }); + }); }); diff --git a/packages/angular/ssr/test/utils/validation_spec.ts b/packages/angular/ssr/test/utils/validation_spec.ts new file mode 100644 index 000000000000..99fbf517b60d --- /dev/null +++ b/packages/angular/ssr/test/utils/validation_spec.ts @@ -0,0 +1,240 @@ +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.dev/license + */ + +import { + cloneRequestAndPatchHeaders, + getFirstHeaderValue, + validateRequest, + validateUrl, +} from '../../src/utils/validation'; + +describe('Validation Utils', () => { + describe('getFirstHeaderValue', () => { + it('should return the first value from a comma-separated string', () => { + expect(getFirstHeaderValue('value1, value2')).toBe('value1'); + }); + + it('should return the value if it is a single string', () => { + expect(getFirstHeaderValue('value1')).toBe('value1'); + }); + + it('should return the first value from an array of strings', () => { + expect(getFirstHeaderValue(['value1', 'value2'])).toBe('value1'); + }); + + it('should return undefined for null or undefined', () => { + expect(getFirstHeaderValue(null)).toBeUndefined(); + expect(getFirstHeaderValue(undefined)).toBeUndefined(); + }); + + it('should return empty string for empty string input', () => { + expect(getFirstHeaderValue('')).toBe(''); + }); + }); + + describe('validateUrl', () => { + const allowedHosts = new Set(['example.com', '*.google.com']); + + it('should pass for allowed hostname', () => { + expect(() => validateUrl(new URL('http://example.com'), allowedHosts)).not.toThrow(); + }); + + it('should pass for wildcard allowed hostname', () => { + expect(() => validateUrl(new URL('http://foo.google.com'), allowedHosts)).not.toThrow(); + }); + + it('should throw for disallowed hostname', () => { + expect(() => validateUrl(new URL('http://evil.com'), allowedHosts)).toThrowError( + /URL with hostname "evil.com" is not allowed/, + ); + }); + + it('should match subdomains for wildcard', () => { + expect(() => validateUrl(new URL('http://sub.foo.google.com'), allowedHosts)).not.toThrow(); + }); + + it('should not match base domain for wildcard (*.google.com vs google.com)', () => { + // Logic: hostname.endsWith('.google.com') -> 'google.com'.endsWith('.google.com') is false + expect(() => validateUrl(new URL('http://google.com'), allowedHosts)).toThrowError( + /URL with hostname "google.com" is not allowed/, + ); + }); + }); + + describe('validateRequest', () => { + const allowedHosts = new Set(['example.com']); + + it('should pass for valid request', () => { + const req = new Request('http://example.com', { + headers: { + 'x-forwarded-port': '443', + 'x-forwarded-proto': 'https', + }, + }); + + expect(() => validateRequest(req, allowedHosts)).not.toThrow(); + }); + + it('should throw if URL hostname is invalid', () => { + const req = new Request('http://evil.com'); + + expect(() => validateRequest(req, allowedHosts)).toThrowError( + /URL with hostname "evil.com" is not allowed/, + ); + }); + + it('should throw if x-forwarded-port is invalid', () => { + const req = new Request('http://example.com', { + headers: { 'x-forwarded-port': 'abc' }, + }); + + expect(() => validateRequest(req, allowedHosts)).toThrowError( + 'Header "x-forwarded-port" must be a numeric value.', + ); + }); + + it('should throw if x-forwarded-proto is invalid', () => { + const req = new Request('http://example.com', { + headers: { 'x-forwarded-proto': 'ftp' }, + }); + expect(() => validateRequest(req, allowedHosts)).toThrowError( + 'Header "x-forwarded-proto" must be either "http" or "https".', + ); + }); + + it('should throw if host contains path separators', () => { + const req = new Request('http://example.com', { + headers: { 'host': 'example.com/bad' }, + }); + expect(() => validateRequest(req, allowedHosts)).toThrowError( + 'Header "host" contains characters that are not allowed.', + ); + }); + + it('should throw if x-forwarded-host contains path separators', () => { + const req = new Request('http://example.com', { + headers: { 'x-forwarded-host': 'example.com/bad' }, + }); + expect(() => validateRequest(req, allowedHosts)).toThrowError( + 'Header "x-forwarded-host" contains characters that are not allowed.', + ); + }); + }); + + describe('cloneRequestAndPatchHeaders', () => { + const allowedHosts = new Set(['example.com', '*.valid.com']); + + it('should validate host header when accessed via get()', async () => { + const req = new Request('http://example.com', { + headers: { 'host': 'evil.com' }, + }); + const { request: secured, onError } = cloneRequestAndPatchHeaders(req, allowedHosts); + + expect(() => secured.headers.get('host')).toThrowError( + 'Header "host" with value "evil.com" is not allowed.', + ); + await expectAsync(onError).toBeResolvedTo( + jasmine.objectContaining({ + message: jasmine.stringMatching('Header "host" with value "evil.com" is not allowed'), + }), + ); + }); + + it('should allow valid host header', () => { + const req = new Request('http://example.com', { + headers: { 'host': 'example.com' }, + }); + const { request: secured } = cloneRequestAndPatchHeaders(req, allowedHosts); + expect(secured.headers.get('host')).toBe('example.com'); + }); + + it('should validate x-forwarded-host header', async () => { + const req = new Request('http://example.com', { + headers: { 'x-forwarded-host': 'evil.com' }, + }); + const { request: secured, onError } = cloneRequestAndPatchHeaders(req, allowedHosts); + + expect(() => secured.headers.get('x-forwarded-host')).toThrowError( + 'Header "x-forwarded-host" with value "evil.com" is not allowed.', + ); + await expectAsync(onError).toBeResolvedTo( + jasmine.objectContaining({ + message: jasmine.stringMatching( + 'Header "x-forwarded-host" with value "evil.com" is not allowed', + ), + }), + ); + }); + + it('should allow accessing other headers without validation', () => { + const req = new Request('http://example.com', { + headers: { 'accept': 'application/json' }, + }); + const { request: secured } = cloneRequestAndPatchHeaders(req, allowedHosts); + + expect(secured.headers.get('accept')).toBe('application/json'); + }); + + it('should validate headers when iterating with entries()', async () => { + const req = new Request('http://example.com', { + headers: { 'host': 'evil.com' }, + }); + const { request: secured, onError } = cloneRequestAndPatchHeaders(req, allowedHosts); + + expect(() => { + for (const _ of secured.headers.entries()) { + // access the header to trigger the validation + } + }).toThrowError('Header "host" with value "evil.com" is not allowed.'); + + await expectAsync(onError).toBeResolvedTo( + jasmine.objectContaining({ + message: jasmine.stringMatching('Header "host" with value "evil.com" is not allowed.'), + }), + ); + }); + + it('should validate headers when iterating with values()', async () => { + const req = new Request('http://example.com', { + headers: { 'host': 'evil.com' }, + }); + const { request: secured, onError } = cloneRequestAndPatchHeaders(req, allowedHosts); + + expect(() => { + for (const _ of secured.headers.values()) { + // access the header to trigger the validation + } + }).toThrowError('Header "host" with value "evil.com" is not allowed.'); + + await expectAsync(onError).toBeResolvedTo( + jasmine.objectContaining({ + message: jasmine.stringMatching('Header "host" with value "evil.com" is not allowed.'), + }), + ); + }); + + it('should validate headers when iterating with for...of', async () => { + const req = new Request('http://example.com', { + headers: { 'host': 'evil.com' }, + }); + const { request: secured, onError } = cloneRequestAndPatchHeaders(req, allowedHosts); + + expect(() => { + for (const _ of secured.headers) { + // access the header to trigger the validation + } + }).toThrowError('Header "host" with value "evil.com" is not allowed.'); + + await expectAsync(onError).toBeResolvedTo( + jasmine.objectContaining({ + message: jasmine.stringMatching('Header "host" with value "evil.com" is not allowed.'), + }), + ); + }); + }); +}); diff --git a/packages/angular_devkit/build_angular/src/builders/ssr-dev-server/index.ts b/packages/angular_devkit/build_angular/src/builders/ssr-dev-server/index.ts index 8ec879993e4f..e919f188e0bf 100644 --- a/packages/angular_devkit/build_angular/src/builders/ssr-dev-server/index.ts +++ b/packages/angular_devkit/build_angular/src/builders/ssr-dev-server/index.ts @@ -115,7 +115,13 @@ export function execute( return of([b, s]); } - return startNodeServer(s, nodeServerPort, context.logger, !!options.inspect).pipe( + return startNodeServer( + s, + nodeServerPort, + options.host, + context.logger, + !!options.inspect, + ).pipe( map(() => [b, s]), catchError((err) => { context.logger.error(`A server error has occurred.\n${mapErrorToMessage(err)}`); @@ -217,12 +223,13 @@ export function log( function startNodeServer( serverOutput: BuilderOutput, port: number, + host: string | undefined, logger: logging.LoggerApi, inspectMode = false, ): Observable { const outputPath = serverOutput.outputPath as string; const path = join(outputPath, 'main.js'); - const env = { ...process.env, PORT: '' + port }; + const env = { ...process.env, PORT: '' + port, NG_ALLOWED_HOSTS: host ?? 'localhost' }; const args = ['--enable-source-maps', `"${path}"`]; if (inspectMode) { diff --git a/packages/angular_devkit/build_angular/src/builders/ssr-dev-server/specs/proxy_spec.ts b/packages/angular_devkit/build_angular/src/builders/ssr-dev-server/specs/proxy_spec.ts index cbde961e59e4..425aad21dada 100644 --- a/packages/angular_devkit/build_angular/src/builders/ssr-dev-server/specs/proxy_spec.ts +++ b/packages/angular_devkit/build_angular/src/builders/ssr-dev-server/specs/proxy_spec.ts @@ -52,11 +52,12 @@ describe('Serve SSR Builder', () => { })); server.use((req, res, next) => { + const { protocol, originalUrl, baseUrl, headers } = req; commonEngine .render({ bootstrap: AppServerModule, documentFilePath: indexHtml, - url: req.originalUrl, + url: \`\${protocol}://\${headers.host}\${originalUrl}\`, publicPath: distFolder, }) .then((html) => res.send(html)) diff --git a/packages/angular_devkit/build_angular/src/builders/ssr-dev-server/specs/ssl_spec.ts b/packages/angular_devkit/build_angular/src/builders/ssr-dev-server/specs/ssl_spec.ts index 7651b2387c16..e61117812bbe 100644 --- a/packages/angular_devkit/build_angular/src/builders/ssr-dev-server/specs/ssl_spec.ts +++ b/packages/angular_devkit/build_angular/src/builders/ssr-dev-server/specs/ssl_spec.ts @@ -52,11 +52,12 @@ describe('Serve SSR Builder', () => { })); server.use((req, res, next) => { + const { protocol, originalUrl, baseUrl, headers } = req; commonEngine .render({ bootstrap: AppServerModule, documentFilePath: indexHtml, - url: req.originalUrl, + url: \`\${protocol}://\${headers.host}\${originalUrl}\`, publicPath: distFolder, }) .then((html) => res.send(html)) diff --git a/packages/angular_devkit/build_angular/src/builders/ssr-dev-server/specs/works_spec.ts b/packages/angular_devkit/build_angular/src/builders/ssr-dev-server/specs/works_spec.ts index 64c56024f089..c8c70d148e63 100644 --- a/packages/angular_devkit/build_angular/src/builders/ssr-dev-server/specs/works_spec.ts +++ b/packages/angular_devkit/build_angular/src/builders/ssr-dev-server/specs/works_spec.ts @@ -51,11 +51,12 @@ describe('Serve SSR Builder', () => { })); server.use((req, res, next) => { + const { protocol, originalUrl, baseUrl, headers } = req; commonEngine .render({ bootstrap: AppServerModule, documentFilePath: indexHtml, - url: req.originalUrl, + url: \`\${protocol}://\${headers.host}\${originalUrl}\`, publicPath: distFolder, }) .then((html) => res.send(html)) diff --git a/packages/schematics/angular/ssr/files/server-builder/server.ts.template b/packages/schematics/angular/ssr/files/server-builder/server.ts.template index 7327c26532ea..8d6a9660dfae 100644 --- a/packages/schematics/angular/ssr/files/server-builder/server.ts.template +++ b/packages/schematics/angular/ssr/files/server-builder/server.ts.template @@ -13,7 +13,9 @@ export function app(): express.Express { ? join(distFolder, 'index.original.html') : join(distFolder, 'index.html'); - const commonEngine = new CommonEngine(); + const commonEngine = new CommonEngine({ + allowedHosts: [/* Configure your hosts here */] + }); server.set('view engine', 'html'); server.set('views', distFolder); diff --git a/packages/schematics/angular/ssr/index.ts b/packages/schematics/angular/ssr/index.ts index 6e27eab47cd5..49e57d523268 100644 --- a/packages/schematics/angular/ssr/index.ts +++ b/packages/schematics/angular/ssr/index.ts @@ -6,7 +6,7 @@ * found in the LICENSE file at https://angular.dev/license */ -import { isJsonObject } from '@angular-devkit/core'; +import { JsonObject, isJsonObject } from '@angular-devkit/core'; import { Rule, RuleFactory, @@ -206,6 +206,10 @@ function updateApplicationBuilderWorkspaceConfigRule( buildTarget.options = { ...buildTarget.options, + security: { + ...((buildTarget.options?.security as JsonObject | undefined) ?? {}), + allowedHosts: [], + }, outputPath, outputMode: 'server', ssr: { diff --git a/tests/e2e/tests/build/server-rendering/express-engine-csp-nonce.ts b/tests/e2e/tests/build/server-rendering/express-engine-csp-nonce.ts index 3d6335b48465..409b141bb48a 100644 --- a/tests/e2e/tests/build/server-rendering/express-engine-csp-nonce.ts +++ b/tests/e2e/tests/build/server-rendering/express-engine-csp-nonce.ts @@ -61,6 +61,7 @@ export default async function () { { ...process.env, 'PORT': String(port), + 'NG_ALLOWED_HOSTS': 'localhost', }, ); diff --git a/tests/e2e/tests/build/server-rendering/express-engine-ngmodule.ts b/tests/e2e/tests/build/server-rendering/express-engine-ngmodule.ts index 92e34f7ca3e8..5eaaa9b0e58b 100644 --- a/tests/e2e/tests/build/server-rendering/express-engine-ngmodule.ts +++ b/tests/e2e/tests/build/server-rendering/express-engine-ngmodule.ts @@ -83,6 +83,7 @@ export default async function () { { ...process.env, 'PORT': String(port), + 'NG_ALLOWED_HOSTS': 'localhost', }, ); diff --git a/tests/e2e/tests/build/server-rendering/express-engine-standalone.ts b/tests/e2e/tests/build/server-rendering/express-engine-standalone.ts index 18920e3a5893..4c8d29d9b770 100644 --- a/tests/e2e/tests/build/server-rendering/express-engine-standalone.ts +++ b/tests/e2e/tests/build/server-rendering/express-engine-standalone.ts @@ -50,6 +50,7 @@ export default async function () { { ...process.env, 'PORT': String(port), + 'NG_ALLOWED_HOSTS': 'localhost', }, ); diff --git a/tests/e2e/tests/build/server-rendering/server-routes-output-mode-server-i18n-base-href.ts b/tests/e2e/tests/build/server-rendering/server-routes-output-mode-server-i18n-base-href.ts index 6d0a45459a16..aa6f7e3426ee 100644 --- a/tests/e2e/tests/build/server-rendering/server-routes-output-mode-server-i18n-base-href.ts +++ b/tests/e2e/tests/build/server-rendering/server-routes-output-mode-server-i18n-base-href.ts @@ -111,6 +111,7 @@ async function spawnServer(): Promise { { ...process.env, 'PORT': String(port), + 'NG_ALLOWED_HOSTS': 'localhost', }, ); diff --git a/tests/e2e/tests/build/server-rendering/server-routes-output-mode-server-i18n-sub-path.ts b/tests/e2e/tests/build/server-rendering/server-routes-output-mode-server-i18n-sub-path.ts index 79fc755c4477..7bc323311b4f 100644 --- a/tests/e2e/tests/build/server-rendering/server-routes-output-mode-server-i18n-sub-path.ts +++ b/tests/e2e/tests/build/server-rendering/server-routes-output-mode-server-i18n-sub-path.ts @@ -146,6 +146,7 @@ async function spawnServer(): Promise { { ...process.env, 'PORT': String(port), + 'NG_ALLOWED_HOSTS': 'localhost', }, ); diff --git a/tests/e2e/tests/build/server-rendering/server-routes-output-mode-server-i18n.ts b/tests/e2e/tests/build/server-rendering/server-routes-output-mode-server-i18n.ts index 994d77343d1e..efbff9871bbc 100644 --- a/tests/e2e/tests/build/server-rendering/server-routes-output-mode-server-i18n.ts +++ b/tests/e2e/tests/build/server-rendering/server-routes-output-mode-server-i18n.ts @@ -122,6 +122,7 @@ async function spawnServer(): Promise { { ...process.env, 'PORT': String(port), + 'NG_ALLOWED_HOSTS': 'localhost', }, ); diff --git a/tests/e2e/tests/build/server-rendering/server-routes-output-mode-server-platform-neutral.ts b/tests/e2e/tests/build/server-rendering/server-routes-output-mode-server-platform-neutral.ts index 130ade10ba9f..6fdd1998cdd2 100644 --- a/tests/e2e/tests/build/server-rendering/server-routes-output-mode-server-platform-neutral.ts +++ b/tests/e2e/tests/build/server-rendering/server-routes-output-mode-server-platform-neutral.ts @@ -11,7 +11,6 @@ import { import { updateJsonFile, useSha } from '../../../utils/project'; import { getGlobalVariable } from '../../../utils/env'; import { findFreePort } from '../../../utils/network'; -import { readFile } from 'node:fs/promises'; export default async function () { assert( @@ -98,6 +97,8 @@ export default async function () { const options = buildTarget['options']; options['ssr']['experimentalPlatform'] = 'neutral'; options['outputMode'] = 'server'; + options['security'] ??= {}; + options['security']['allowedHosts'] = ['localhost']; }); await noSilentNg('build'); diff --git a/tests/e2e/tests/build/server-rendering/server-routes-output-mode-server.ts b/tests/e2e/tests/build/server-rendering/server-routes-output-mode-server.ts index 5205d20eeb0a..ff72cb8e8df2 100644 --- a/tests/e2e/tests/build/server-rendering/server-routes-output-mode-server.ts +++ b/tests/e2e/tests/build/server-rendering/server-routes-output-mode-server.ts @@ -206,6 +206,7 @@ async function spawnServer(): Promise { { ...process.env, 'PORT': String(port), + 'NG_ALLOWED_HOSTS': 'localhost', }, ); diff --git a/tests/e2e/tests/build/server-rendering/server-routes-preload-links.ts b/tests/e2e/tests/build/server-rendering/server-routes-preload-links.ts index f1437392492d..fe316e3cd157 100644 --- a/tests/e2e/tests/build/server-rendering/server-routes-preload-links.ts +++ b/tests/e2e/tests/build/server-rendering/server-routes-preload-links.ts @@ -196,6 +196,7 @@ async function spawnServer(): Promise { { ...process.env, 'PORT': String(port), + 'NG_ALLOWED_HOSTS': 'localhost', }, ); From f086eccc36d10cf01c426e35864bc32e1e292323 Mon Sep 17 00:00:00 2001 From: Alan Agius <17563226+alan-agius4@users.noreply.github.com> Date: Mon, 23 Feb 2026 09:41:08 +0000 Subject: [PATCH 011/226] fix(@angular/ssr): prevent open redirect via X-Forwarded-Prefix header This change addresses a security vulnerability where `joinUrlParts()` in `packages/angular/ssr/src/utils/url.ts` only stripped one leading slash from URL parts. When the `X-Forwarded-Prefix` header contains multiple leading slashes (e.g., `///evil.com`), the function previously produced a protocol-relative URL (e.g., `//evil.com/home`). If the application issues a redirect (e.g., via a generic redirect route), the browser interprets this 'Location' header as an external redirect to `https://evil.com/home`. This vulnerability poses a significant risk as open redirects can be used in phishing attacks. Additionally, since the redirect response may lack `Cache-Control` headers, intermediate CDNs could cache the poisoned redirect, serving it to other users. This commit fixes the issue by: 1. Updating `joinUrlParts` to internally strip *all* leading and trailing slashes from URL segments, preventing the formation of protocol-relative URLs from malicious input. 2. Adding strict validation for the `X-Forwarded-Prefix` header to immediately reject requests with values starting with multiple slashes (`//`) or backslashes (`\\`). Closes #32501 --- packages/angular/ssr/src/utils/url.ts | 24 ++++--- packages/angular/ssr/src/utils/validation.ts | 12 ++++ packages/angular/ssr/test/utils/url_spec.ts | 12 ++++ .../angular/ssr/test/utils/validation_spec.ts | 67 +++++++++++++++++++ 4 files changed, 106 insertions(+), 9 deletions(-) diff --git a/packages/angular/ssr/src/utils/url.ts b/packages/angular/ssr/src/utils/url.ts index 1fa756e19c19..d5e7c9ac2814 100644 --- a/packages/angular/ssr/src/utils/url.ts +++ b/packages/angular/ssr/src/utils/url.ts @@ -95,26 +95,32 @@ export function addTrailingSlash(url: string): string { * ``` */ export function joinUrlParts(...parts: string[]): string { - const normalizeParts: string[] = []; + const normalizedParts: string[] = []; + for (const part of parts) { if (part === '') { // Skip any empty parts continue; } - let normalizedPart = part; - if (part[0] === '/') { - normalizedPart = normalizedPart.slice(1); + let start = 0; + let end = part.length; + + // Use "Pointers" to avoid intermediate slices + while (start < end && part[start] === '/') { + start++; } - if (part.at(-1) === '/') { - normalizedPart = normalizedPart.slice(0, -1); + + while (end > start && part[end - 1] === '/') { + end--; } - if (normalizedPart !== '') { - normalizeParts.push(normalizedPart); + + if (start < end) { + normalizedParts.push(part.slice(start, end)); } } - return addLeadingSlash(normalizeParts.join('/')); + return addLeadingSlash(normalizedParts.join('/')); } /** diff --git a/packages/angular/ssr/src/utils/validation.ts b/packages/angular/ssr/src/utils/validation.ts index 97ac8606f3b4..c89cdd6a64ed 100644 --- a/packages/angular/ssr/src/utils/validation.ts +++ b/packages/angular/ssr/src/utils/validation.ts @@ -26,6 +26,11 @@ const VALID_PROTO_REGEX = /^https?$/i; */ const VALID_HOST_REGEX = /^[a-z0-9.:-]+$/i; +/** + * Regular expression to validate that the prefix is valid. + */ +const INVALID_PREFIX_REGEX = /^[/\\]{2}|(?:^|[/\\])\.\.?(?:[/\\]|$)/; + /** * Extracts the first value from a multi-value header string. * @@ -253,4 +258,11 @@ function validateHeaders(request: Request): void { if (xForwardedProto && !VALID_PROTO_REGEX.test(xForwardedProto)) { throw new Error('Header "x-forwarded-proto" must be either "http" or "https".'); } + + const xForwardedPrefix = getFirstHeaderValue(headers.get('x-forwarded-prefix')); + if (xForwardedPrefix && INVALID_PREFIX_REGEX.test(xForwardedPrefix)) { + throw new Error( + 'Header "x-forwarded-prefix" must not start with multiple "/" or "\\" or contain ".", ".." path segments.', + ); + } } diff --git a/packages/angular/ssr/test/utils/url_spec.ts b/packages/angular/ssr/test/utils/url_spec.ts index 9a7a7cb3ad49..a108c7ff1df6 100644 --- a/packages/angular/ssr/test/utils/url_spec.ts +++ b/packages/angular/ssr/test/utils/url_spec.ts @@ -100,6 +100,18 @@ describe('URL Utils', () => { it('should handle an all-empty URL parts', () => { expect(joinUrlParts('', '')).toBe('/'); }); + + it('should normalize parts with multiple leading and trailing slashes', () => { + expect(joinUrlParts('//path//', '///to///', '//resource//')).toBe('/path/to/resource'); + }); + + it('should handle a single part', () => { + expect(joinUrlParts('path')).toBe('/path'); + }); + + it('should handle parts containing only slashes', () => { + expect(joinUrlParts('//', '///')).toBe('/'); + }); }); describe('stripIndexHtmlFromURL', () => { diff --git a/packages/angular/ssr/test/utils/validation_spec.ts b/packages/angular/ssr/test/utils/validation_spec.ts index 99fbf517b60d..10ab896e36f1 100644 --- a/packages/angular/ssr/test/utils/validation_spec.ts +++ b/packages/angular/ssr/test/utils/validation_spec.ts @@ -124,6 +124,73 @@ describe('Validation Utils', () => { 'Header "x-forwarded-host" contains characters that are not allowed.', ); }); + + it('should throw error if x-forwarded-prefix starts with multiple slashes or backslashes', () => { + const inputs = ['//evil', '\\\\evil', '/\\evil', '\\/evil']; + + for (const prefix of inputs) { + const request = new Request('https://example.com', { + headers: { + 'x-forwarded-prefix': prefix, + }, + }); + + expect(() => validateRequest(request, allowedHosts)) + .withContext(`Prefix: "${prefix}"`) + .toThrowError( + 'Header "x-forwarded-prefix" must not start with multiple "/" or "\\" or contain ".", ".." path segments.', + ); + } + }); + + it('should throw error if x-forwarded-prefix contains dot segments', () => { + const inputs = [ + '/./', + '/../', + '/foo/./bar', + '/foo/../bar', + '/.', + '/..', + './', + '../', + '.\\', + '..\\', + '/foo/.\\bar', + '/foo/..\\bar', + '.', + '..', + ]; + + for (const prefix of inputs) { + const request = new Request('https://example.com', { + headers: { + 'x-forwarded-prefix': prefix, + }, + }); + + expect(() => validateRequest(request, allowedHosts)) + .withContext(`Prefix: "${prefix}"`) + .toThrowError( + 'Header "x-forwarded-prefix" must not start with multiple "/" or "\\" or contain ".", ".." path segments.', + ); + } + }); + + it('should validate x-forwarded-prefix with valid dot usage', () => { + const inputs = ['/foo.bar', '/foo.bar/baz', '/v1.2', '/.well-known']; + + for (const prefix of inputs) { + const request = new Request('https://example.com', { + headers: { + 'x-forwarded-prefix': prefix, + }, + }); + + expect(() => validateRequest(request, allowedHosts)) + .withContext(`Prefix: "${prefix}"`) + .not.toThrow(); + } + }); }); describe('cloneRequestAndPatchHeaders', () => { From 662eca3149cdc8c89a5b5707ef54e1c0cdbfdc3d Mon Sep 17 00:00:00 2001 From: Alan Agius <17563226+alan-agius4@users.noreply.github.com> Date: Mon, 23 Feb 2026 12:15:10 +0000 Subject: [PATCH 012/226] refactor(@angular/cli): use a regex to identify internal Angular framework versions for compatibility checks This includes adding support to exclusive `.0.0-next.0` from the version checks since this will block framework on using the CLI when bumping to a new major version. --- packages/angular/build/src/utils/version.ts | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/packages/angular/build/src/utils/version.ts b/packages/angular/build/src/utils/version.ts index 51f493bfe993..01fbbd65236f 100644 --- a/packages/angular/build/src/utils/version.ts +++ b/packages/angular/build/src/utils/version.ts @@ -11,6 +11,10 @@ import { createRequire } from 'node:module'; import { SemVer, satisfies } from 'semver'; +// Matches exactly '0.0.0' or any string ending in '.0.0-next.0' +// This allows FW to bump the package.json to a new major version without requiring a new CLI version. +const angularVersionRegex = /^0\.0\.0$|\.0\.0-next\.0$/; + export function assertCompatibleAngularVersion(projectRoot: string): void | never { let angularPkgJson; @@ -38,7 +42,10 @@ export function assertCompatibleAngularVersion(projectRoot: string): void | neve } const supportedAngularSemver = '0.0.0-ANGULAR-FW-PEER-DEP'; - if (angularPkgJson['version'] === '0.0.0' || supportedAngularSemver.startsWith('0.0.0')) { + if ( + angularVersionRegex.test(angularPkgJson['version']) || + supportedAngularSemver.startsWith('0.0.0') + ) { // Internal CLI and FW testing version. return; } From 959152e85dc84addd51aee370b9d81d22e450f20 Mon Sep 17 00:00:00 2001 From: Alan Agius <17563226+alan-agius4@users.noreply.github.com> Date: Mon, 23 Feb 2026 17:05:54 +0000 Subject: [PATCH 013/226] docs: release notes for the v19.2.21 release --- CHANGELOG.md | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2570306842cf..5b897a2218c3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,16 @@ + + +# 19.2.21 (2026-02-23) + +### @angular/ssr + +| Commit | Type | Description | +| --------------------------------------------------------------------------------------------------- | ---- | --------------------------------------------------- | +| [288e22816](https://github.com/angular/angular-cli/commit/288e228161e3c0cceb392dd5fc24d07b129a3a64) | fix | prevent open redirect via X-Forwarded-Prefix header | +| [2a72d7483](https://github.com/angular/angular-cli/commit/2a72d7483d87ccdcfa0c5148f34a4c6ebb6c6cf9) | fix | validate host headers to prevent header-based SSRF | + + + # 21.2.0-rc.0 (2026-02-18) @@ -2407,6 +2420,7 @@ - Protractor is no longer supported. Protractor was marked end-of-life in August 2023 (see https://protractortest.org/). Projects still relying on Protractor should consider migrating to another E2E testing framework, several support solid migration paths from Protractor. + - https://angular.dev/tools/cli/end-to-end - https://blog.angular.dev/the-state-of-end-to-end-testing-with-angular-d175f751cb9c @@ -6041,6 +6055,7 @@ Alan Agius, Charles Lyding and Doug Parker ### @angular/cli - Several changes to the `ng analytics` command syntax. + - `ng analytics project ` has been replaced with `ng analytics ` - `ng analytics ` has been replaced with `ng analytics --global` @@ -6070,6 +6085,7 @@ Alan Agius, Charles Lyding and Doug Parker - `browser` and `karma` builders `script` and `styles` options input files extensions are now validated. Valid extensions for `scripts` are: + - `.js` - `.cjs` - `.mjs` @@ -6078,6 +6094,7 @@ Alan Agius, Charles Lyding and Doug Parker - `.mjsx` Valid extensions for `styles` are: + - `.css` - `.less` - `.sass` From b7e2008be3a6bcd7841a6ff8c636919989c912bc Mon Sep 17 00:00:00 2001 From: Alan Agius <17563226+alan-agius4@users.noreply.github.com> Date: Mon, 23 Feb 2026 17:13:30 +0000 Subject: [PATCH 014/226] docs: release notes for the v20.3.17 release --- CHANGELOG.md | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5b897a2218c3..bf9e2eae4a49 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,16 @@ + + +# 20.3.17 (2026-02-23) + +### @angular/ssr + +| Commit | Type | Description | +| --------------------------------------------------------------------------------------------------- | ---- | --------------------------------------------------- | +| [8700e18d7](https://github.com/angular/angular-cli/commit/8700e18d7cf175d80fe6ce6205589767b7870c1c) | fix | prevent open redirect via X-Forwarded-Prefix header | +| [67582a946](https://github.com/angular/angular-cli/commit/67582a946808d2c021cbcfacbf203ef58a6fbded) | fix | validate host headers to prevent header-based SSRF | + + + # 19.2.21 (2026-02-23) @@ -2420,7 +2433,6 @@ - Protractor is no longer supported. Protractor was marked end-of-life in August 2023 (see https://protractortest.org/). Projects still relying on Protractor should consider migrating to another E2E testing framework, several support solid migration paths from Protractor. - - https://angular.dev/tools/cli/end-to-end - https://blog.angular.dev/the-state-of-end-to-end-testing-with-angular-d175f751cb9c @@ -6055,7 +6067,6 @@ Alan Agius, Charles Lyding and Doug Parker ### @angular/cli - Several changes to the `ng analytics` command syntax. - - `ng analytics project ` has been replaced with `ng analytics ` - `ng analytics ` has been replaced with `ng analytics --global` @@ -6085,7 +6096,6 @@ Alan Agius, Charles Lyding and Doug Parker - `browser` and `karma` builders `script` and `styles` options input files extensions are now validated. Valid extensions for `scripts` are: - - `.js` - `.cjs` - `.mjs` @@ -6094,7 +6104,6 @@ Alan Agius, Charles Lyding and Doug Parker - `.mjsx` Valid extensions for `styles` are: - - `.css` - `.less` - `.sass` From dff514b6696dcc4ae1f7fffcad84adc03865d518 Mon Sep 17 00:00:00 2001 From: Charles Lyding <19598772+clydin@users.noreply.github.com> Date: Mon, 23 Feb 2026 10:00:10 -0500 Subject: [PATCH 015/226] refactor(@angular/build): expose dev-server options normalization function The dev-server options normalization function and its associated type are being exposed from the internal API file. This allows other internal builders and tools within the package to leverage the same normalization logic. --- packages/angular/build/src/private.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/packages/angular/build/src/private.ts b/packages/angular/build/src/private.ts index 4791a94a42d3..50d57d0e5a01 100644 --- a/packages/angular/build/src/private.ts +++ b/packages/angular/build/src/private.ts @@ -26,6 +26,10 @@ export { buildApplicationInternal } from './builders/application'; export type { ApplicationBuilderInternalOptions } from './builders/application/options'; export { type Result, type ResultFile, ResultKind } from './builders/application/results'; export { serveWithVite } from './builders/dev-server/vite'; +export { + normalizeOptions as normalizeDevServerOptions, + type NormalizedDevServerOptions, +} from './builders/dev-server/options'; // Tools export * from './tools/babel/plugins'; From c1a4a764ead1e8f8326b27aec996d275fdc46ed0 Mon Sep 17 00:00:00 2001 From: Alan Agius <17563226+alan-agius4@users.noreply.github.com> Date: Mon, 23 Feb 2026 17:17:39 +0000 Subject: [PATCH 016/226] docs: release notes for the v21.1.5 release --- CHANGELOG.md | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index bf9e2eae4a49..af5b03e17d82 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,16 @@ + + +# 21.1.5 (2026-02-23) + +### @angular/ssr + +| Commit | Type | Description | +| --------------------------------------------------------------------------------------------------- | ---- | --------------------------------------------------- | +| [8695d6063](https://github.com/angular/angular-cli/commit/8695d6063e4c4123a37a3450c7db3a7c9d99050a) | fix | prevent open redirect via X-Forwarded-Prefix header | +| [e4d445ec6](https://github.com/angular/angular-cli/commit/e4d445ec674841dd1d374c83344c0a704ee3807c) | fix | validate host headers to prevent header-based SSRF | + + + # 20.3.17 (2026-02-23) From 9850ebc602a60654e4c52cbd5747e7b6231e943d Mon Sep 17 00:00:00 2001 From: Alan Agius <17563226+alan-agius4@users.noreply.github.com> Date: Mon, 23 Feb 2026 17:27:39 +0000 Subject: [PATCH 017/226] docs: release notes for the v21.2.0-rc.1 release --- CHANGELOG.md | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index af5b03e17d82..a78c7645ee86 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,22 @@ + + +# 21.2.0-rc.1 (2026-02-23) + +### @angular/cli + +| Commit | Type | Description | +| --------------------------------------------------------------------------------------------------- | ---- | ----------------------------------------------------------------------------------- | +| [cdd26bb66](https://github.com/angular/angular-cli/commit/cdd26bb66d8ab334f76323c2b5cae1aa8ce815f6) | fix | validate package manager version using `semver.valid` and throw an error if invalid | + +### @angular/ssr + +| Commit | Type | Description | +| --------------------------------------------------------------------------------------------------- | ---- | --------------------------------------------------- | +| [cf5a72d33](https://github.com/angular/angular-cli/commit/cf5a72d33c1753c121f71498c0c415a0f0864492) | fix | prevent open redirect via X-Forwarded-Prefix header | +| [f78f38827](https://github.com/angular/angular-cli/commit/f78f38827861cf01471e30fcf81ef14d6265a0f2) | fix | validate host headers to prevent header-based SSRF | + + + # 21.1.5 (2026-02-23) From 7ac80a8d773a13deb62b28a2b503b92f4153702c Mon Sep 17 00:00:00 2001 From: Alan Agius <17563226+alan-agius4@users.noreply.github.com> Date: Tue, 24 Feb 2026 09:13:33 +0000 Subject: [PATCH 018/226] fix(@angular/cli): simplify Angular version compatibility checks and add special handling for local builds of new major versions Addresses issues with adev version checks. --- packages/angular/build/src/utils/version.ts | 32 ++++++++++++++------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/packages/angular/build/src/utils/version.ts b/packages/angular/build/src/utils/version.ts index 01fbbd65236f..b9bbf5cd03b8 100644 --- a/packages/angular/build/src/utils/version.ts +++ b/packages/angular/build/src/utils/version.ts @@ -11,10 +11,6 @@ import { createRequire } from 'node:module'; import { SemVer, satisfies } from 'semver'; -// Matches exactly '0.0.0' or any string ending in '.0.0-next.0' -// This allows FW to bump the package.json to a new major version without requiring a new CLI version. -const angularVersionRegex = /^0\.0\.0$|\.0\.0-next\.0$/; - export function assertCompatibleAngularVersion(projectRoot: string): void | never { let angularPkgJson; @@ -41,21 +37,35 @@ export function assertCompatibleAngularVersion(projectRoot: string): void | neve process.exit(2); } + const angularCoreSemVer = new SemVer(angularPkgJson['version']); + const { version, build, raw } = angularCoreSemVer; const supportedAngularSemver = '0.0.0-ANGULAR-FW-PEER-DEP'; - if ( - angularVersionRegex.test(angularPkgJson['version']) || - supportedAngularSemver.startsWith('0.0.0') - ) { + + if (version.startsWith('0.0.0') || supportedAngularSemver.startsWith('0.0.0')) { // Internal CLI and FW testing version. return; } - const angularVersion = new SemVer(angularPkgJson['version']); + if (build.length && version.endsWith('.0.0-next.0')) { + // Special handle for local builds only when it's prerelease of major version and it's the 0th version. + // This happends when we are bumping to a new major version. and the cli has not releated a verion. + + // Example: + // raw: '22.0.0-next.0+sha-c7dc705-with-local-changes', + // major: 22, + // minor: 0, + // patch: 0, + // prerelease: [ 'next', 0 ], + // build: [ 'sha-c7dc705-with-local-changes' ], + // version: '22.0.0-next.0' + + return; + } - if (!satisfies(angularVersion, supportedAngularSemver, { includePrerelease: true })) { + if (!satisfies(angularCoreSemVer, supportedAngularSemver, { includePrerelease: true })) { console.error( `Error: The current version of "@angular/build" supports Angular versions ${supportedAngularSemver},\n` + - `but detected Angular version ${angularVersion} instead.\n` + + `but detected Angular version ${raw} instead.\n` + 'Please visit the link below to find instructions on how to update Angular.\nhttps://update.angular.dev/', ); From a1d51c7d4b39194e3d61451719449781375da3fa Mon Sep 17 00:00:00 2001 From: Alan Agius <17563226+alan-agius4@users.noreply.github.com> Date: Tue, 24 Feb 2026 10:44:32 +0000 Subject: [PATCH 019/226] docs: release notes for the v21.2.0-rc.2 release --- CHANGELOG.md | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index a78c7645ee86..e6a598b6d89b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,15 @@ + + +# 21.2.0-rc.2 (2026-02-24) + +### @angular/cli + +| Commit | Type | Description | +| --------------------------------------------------------------------------------------------------- | ---- | ------------------------------------------------------------------------------------------------------------- | +| [201a036f2](https://github.com/angular/angular-cli/commit/201a036f204a6940f70a36a507a4a53d144b5768) | fix | simplify Angular version compatibility checks and add special handling for local builds of new major versions | + + + # 21.2.0-rc.1 (2026-02-23) From a09d825588831bcafa2d55990cdbc77fa895c3bb Mon Sep 17 00:00:00 2001 From: Alan Agius <17563226+alan-agius4@users.noreply.github.com> Date: Tue, 24 Feb 2026 10:49:42 +0000 Subject: [PATCH 020/226] docs: clarify CLI debugging example by replacing ellipsis with `` --- docs/DEVELOPER.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/DEVELOPER.md b/docs/DEVELOPER.md index 8204bd7dcbce..075ddbcf9ca3 100644 --- a/docs/DEVELOPER.md +++ b/docs/DEVELOPER.md @@ -56,7 +56,7 @@ project](#building-and-installing-the-cli), then run the desired `ng` command as: ```shell -node --inspect-brk node_modules/.bin/ng ... +node --inspect-brk node_modules/.bin/ng ``` This will trigger a breakpoint as the CLI starts up. You can connect to this From 85e3ce2e0a35a152a324fe6eb3ec0ed43416f11c Mon Sep 17 00:00:00 2001 From: Charles Lyding <19598772+clydin@users.noreply.github.com> Date: Mon, 23 Feb 2026 09:34:18 -0500 Subject: [PATCH 021/226] fix(@angular/cli): quote complex range specifiers in package manager Complex range specifiers that include shell special characters (e.g., '>', '<') can be misinterpreted when not quoted. This change ensures that version ranges are enclosed in quotes when needed to prevent such issues. A test case has been added to verify that complex specifiers are handled correctly. --- .../angular/cli/src/package-managers/host.ts | 7 ++++ .../src/package-managers/package-manager.ts | 6 ++- .../package-managers/package-manager_spec.ts | 42 +++++++++++++++++-- .../src/package-managers/testing/mock-host.ts | 1 + 4 files changed, 50 insertions(+), 6 deletions(-) diff --git a/packages/angular/cli/src/package-managers/host.ts b/packages/angular/cli/src/package-managers/host.ts index 433b54414f69..893393970907 100644 --- a/packages/angular/cli/src/package-managers/host.ts +++ b/packages/angular/cli/src/package-managers/host.ts @@ -24,6 +24,12 @@ import { PackageManagerError } from './error'; * An abstraction layer for side-effectful operations. */ export interface Host { + /** + * Whether shell quoting is required for package manager specifiers. + * This is typically true on Windows, where commands are executed in a shell. + */ + readonly requiresQuoting?: boolean; + /** * Creates a directory. * @param path The path to the directory. @@ -101,6 +107,7 @@ export interface Host { */ export const NodeJS_HOST: Host = { stat, + requiresQuoting: platform() === 'win32', mkdir, readFile: (path: string) => readFile(path, { encoding: 'utf8' }), copyFile: (src, dest) => copyFile(src, dest, constants.COPYFILE_FICLONE), diff --git a/packages/angular/cli/src/package-managers/package-manager.ts b/packages/angular/cli/src/package-managers/package-manager.ts index f8f6831485ea..de3172107d8d 100644 --- a/packages/angular/cli/src/package-managers/package-manager.ts +++ b/packages/angular/cli/src/package-managers/package-manager.ts @@ -34,7 +34,7 @@ const METADATA_FIELDS = ['name', 'dist-tags', 'versions', 'time'] as const; * This is a performance optimization to avoid downloading unnecessary data. * These fields are the ones required by the CLI for operations like `ng add` and `ng update`. */ -const MANIFEST_FIELDS = [ +export const MANIFEST_FIELDS = [ 'name', 'version', 'deprecated', @@ -444,7 +444,9 @@ export class PackageManager { version: string, options: { timeout?: number; registry?: string; bypassCache?: boolean } = {}, ): Promise { - const specifier = `${packageName}@${version}`; + const specifier = this.host.requiresQuoting + ? `"${packageName}@${version}"` + : `${packageName}@${version}`; const commandArgs = [...this.descriptor.getManifestCommand, specifier]; const formatter = this.descriptor.viewCommandFieldArgFormatter; if (formatter) { diff --git a/packages/angular/cli/src/package-managers/package-manager_spec.ts b/packages/angular/cli/src/package-managers/package-manager_spec.ts index 802f50fa66ab..8d439d9b3b75 100644 --- a/packages/angular/cli/src/package-managers/package-manager_spec.ts +++ b/packages/angular/cli/src/package-managers/package-manager_spec.ts @@ -6,20 +6,54 @@ * found in the LICENSE file at https://angular.dev/license */ -import { Host } from './host'; -import { PackageManager } from './package-manager'; +import { MANIFEST_FIELDS, PackageManager } from './package-manager'; import { SUPPORTED_PACKAGE_MANAGERS } from './package-manager-descriptor'; import { MockHost } from './testing/mock-host'; describe('PackageManager', () => { - let host: Host; + let host: MockHost; let runCommandSpy: jasmine.Spy; const descriptor = SUPPORTED_PACKAGE_MANAGERS['npm']; beforeEach(() => { host = new MockHost(); runCommandSpy = spyOn(host, 'runCommand').and.resolveTo({ stdout: '1.2.3', stderr: '' }); - host.runCommand = runCommandSpy; + }); + + describe('getRegistryManifest', () => { + it('should quote complex range specifiers when required by the host', async () => { + // Simulate a quoting host + Object.assign(host, { requiresQuoting: true }); + + const pm = new PackageManager(host, '/tmp', descriptor); + const manifest = { name: 'foo', version: '1.0.0' }; + runCommandSpy.and.resolveTo({ stdout: JSON.stringify(manifest), stderr: '' }); + + await pm.getRegistryManifest('foo', '>=1.0.0 <2.0.0'); + + expect(runCommandSpy).toHaveBeenCalledWith( + descriptor.binary, + [...descriptor.getManifestCommand, '"foo@>=1.0.0 <2.0.0"', ...MANIFEST_FIELDS], + jasmine.anything(), + ); + }); + + it('should NOT quote complex range specifiers when not required by the host', async () => { + // Simulate a non-quoting host + Object.assign(host, { requiresQuoting: false }); + + const pm = new PackageManager(host, '/tmp', descriptor); + const manifest = { name: 'foo', version: '1.0.0' }; + runCommandSpy.and.resolveTo({ stdout: JSON.stringify(manifest), stderr: '' }); + + await pm.getRegistryManifest('foo', '>=1.0.0 <2.0.0'); + + expect(runCommandSpy).toHaveBeenCalledWith( + descriptor.binary, + [...descriptor.getManifestCommand, 'foo@>=1.0.0 <2.0.0', ...MANIFEST_FIELDS], + jasmine.anything(), + ); + }); }); describe('getVersion', () => { diff --git a/packages/angular/cli/src/package-managers/testing/mock-host.ts b/packages/angular/cli/src/package-managers/testing/mock-host.ts index ae4476c6501d..46e71be3cf60 100644 --- a/packages/angular/cli/src/package-managers/testing/mock-host.ts +++ b/packages/angular/cli/src/package-managers/testing/mock-host.ts @@ -14,6 +14,7 @@ import { Host } from '../host'; * This class allows for simulating a file system in memory. */ export class MockHost implements Host { + readonly requiresQuoting = false; private readonly fs = new Map(); constructor(files: Record = {}) { From e2ee6b3e8e852967c6a878585366953d61030520 Mon Sep 17 00:00:00 2001 From: Alan Agius Date: Tue, 24 Feb 2026 15:33:06 +0100 Subject: [PATCH 022/226] fix(@angular/build): serve extensionless assets without transformation Extensionless files are now served directly without being processed by the underlying transformation pipeline. This ensures that such assets are delivered unmodified and prevents potential serving errors. --- .../tests/behavior/build-assets_spec.ts | 20 +++++++++++++++++++ .../vite/middlewares/assets-middleware.ts | 4 ++-- 2 files changed, 22 insertions(+), 2 deletions(-) diff --git a/packages/angular/build/src/builders/dev-server/tests/behavior/build-assets_spec.ts b/packages/angular/build/src/builders/dev-server/tests/behavior/build-assets_spec.ts index f7c7a0acb33a..7d3e1ffc414b 100644 --- a/packages/angular/build/src/builders/dev-server/tests/behavior/build-assets_spec.ts +++ b/packages/angular/build/src/builders/dev-server/tests/behavior/build-assets_spec.ts @@ -21,6 +21,26 @@ describeServeBuilder(executeDevServer, DEV_SERVER_BUILDER_INFO, (harness, setupT "import {foo} from 'unresolved'; /* a comment */const foo = `bar`;\n\n\n"; describe('Behavior: "browser builder assets"', () => { + it('serves a project extensionless asset unmodified', async () => { + await harness.writeFile('src/extensionless', javascriptFileContent); + + setupTarget(harness, { + assets: ['src/extensionless'], + optimization: { + scripts: true, + }, + }); + + harness.useTarget('serve', { + ...BASE_OPTIONS, + }); + + const { result, response } = await executeOnceAndFetch(harness, 'extensionless'); + + expect(result?.success).toBeTrue(); + expect(await response?.text()).toContain(javascriptFileContent); + }); + it('serves a project JavaScript asset unmodified', async () => { await harness.writeFile('src/extra.js', javascriptFileContent); diff --git a/packages/angular/build/src/tools/vite/middlewares/assets-middleware.ts b/packages/angular/build/src/tools/vite/middlewares/assets-middleware.ts index f0a137f578f8..e0074625afe0 100644 --- a/packages/angular/build/src/tools/vite/middlewares/assets-middleware.ts +++ b/packages/angular/build/src/tools/vite/middlewares/assets-middleware.ts @@ -45,8 +45,8 @@ export function createAngularAssetsMiddleware( // Rewrite all build assets to a vite raw fs URL const asset = assets.get(pathname); if (asset) { - // This is a workaround to serve CSS, JS and TS files without Vite transformations. - if (JS_TS_REGEXP.test(extension) || CSS_PREPROCESSOR_REGEXP.test(extension)) { + // This is a workaround to serve extensionless, CSS, JS and TS files without Vite transformations. + if (!extension || JS_TS_REGEXP.test(extension) || CSS_PREPROCESSOR_REGEXP.test(extension)) { const contents = readFileSync(asset.source); const etag = `W/${createHash('sha256').update(contents).digest('hex')}`; if (checkAndHandleEtag(req, res, etag)) { From d0e9e81639be33c453f1ef66c7c1c8ea4fe543c2 Mon Sep 17 00:00:00 2001 From: Alan Agius <17563226+alan-agius4@users.noreply.github.com> Date: Tue, 24 Feb 2026 16:55:25 +0000 Subject: [PATCH 023/226] build: update minimum supported Node.js versions This commit updates the minimum supported Node.js versions. Node.js v20 support is dropped, and the minimum version for Node.js v22 is bumped to v22.22.0, and for v24 it is bumped to v24.13.1. The 'undici' dependency has been removed from '@angular/build' as we can now rely on native Node.js APIs for SSL certificate handling in newer Node versions. BREAKING CHANGE: Node.js v20 is no longer supported. The minimum supported Node.js versions are now v22.22.0 and v24.13.1. --- .github/workflows/ci.yml | 2 +- MODULE.bazel | 34 +- MODULE.bazel.lock | 764 ++++++++++++++---- constants.bzl | 2 +- package.json | 2 +- packages/angular/build/BUILD.bazel | 1 - packages/angular/build/package.json | 1 - .../src/tools/vite/plugins/ssr-ssl-plugin.ts | 33 +- packages/angular/cli/lib/cli/index.ts | 2 +- .../cli/src/commands/version/version-info.ts | 2 +- pnpm-lock.yaml | 3 - tools/toolchain_info.bzl | 6 - 12 files changed, 637 insertions(+), 215 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 95341f797924..dc4ec404e357 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -78,7 +78,7 @@ jobs: strategy: fail-fast: false matrix: - node: [20, 22, 24] + node: [22, 24] subset: [esbuild, webpack] shard: [0, 1, 2, 3, 4, 5] runs-on: ubuntu-latest diff --git a/MODULE.bazel b/MODULE.bazel index eb799bcbcbee..be8e9402f057 100644 --- a/MODULE.bazel +++ b/MODULE.bazel @@ -68,31 +68,37 @@ use_repo( node_dev = use_extension("@rules_nodejs//nodejs:extensions.bzl", "node", dev_dependency = True) -# Node.js 20 -node_dev.toolchain( - name = "node20", - node_version = "20.19.0", -) - # Node.js 22 node_dev.toolchain( name = "node22", - node_version = "22.12.0", + 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"), + }, + node_version = "22.22.0", ) # Node.js 24 node_dev.toolchain( name = "node24", - node_version = "24.0.0", + node_repositories = { + "24.13.1-darwin_arm64": ("node-v24.13.1-darwin-arm64.tar.gz", "node-v24.13.1-darwin-arm64", "8c039d59f2fec6195e4281ad5b0d02b9a940897b4df7b849c6fb48be6787bba6"), + "24.13.1-darwin_amd64": ("node-v24.13.1-darwin-x64.tar.gz", "node-v24.13.1-darwin-x64", "527f0578d9812e7dfa225121bda0b1546a6a0e4b5f556295fc8299c272de5fbf"), + "24.13.1-linux_arm64": ("node-v24.13.1-linux-arm64.tar.xz", "node-v24.13.1-linux-arm64", "c827d3d301e2eed1a51f36d0116b71b9e3d9e3b728f081615270ea40faac34c1"), + "24.13.1-linux_ppc64le": ("node-v24.13.1-linux-ppc64le.tar.xz", "node-v24.13.1-linux-ppc64le", "fb712a08d317655dbf776c90f60ac2105109d802e33811df6c9ed33d12f801c6"), + "24.13.1-linux_s390x": ("node-v24.13.1-linux-s390x.tar.xz", "node-v24.13.1-linux-s390x", "8e2c0d9b5545c3db22623e8cb8d6f0c28fcd470f29d32dbeabf9432dda289de2"), + "24.13.1-linux_amd64": ("node-v24.13.1-linux-x64.tar.xz", "node-v24.13.1-linux-x64", "30215f90ea3cd04dfbc06e762c021393fa173a1d392974298bbc871a8e461089"), + "24.13.1-windows_amd64": ("node-v24.13.1-win-x64.zip", "node-v24.13.1-win-x64", "fba577c4bb87df04d54dd87bbdaa5a2272f1f99a2acbf9152e1a91b8b5f0b279"), + }, + node_version = "24.13.1", ) use_repo( node_dev, - "node20_darwin_amd64", - "node20_darwin_arm64", - "node20_linux_amd64", - "node20_linux_arm64", - "node20_toolchains", - "node20_windows_amd64", "node22_darwin_amd64", "node22_darwin_arm64", "node22_linux_amd64", diff --git a/MODULE.bazel.lock b/MODULE.bazel.lock index 68caea315d7d..f59691a77ca0 100644 --- a/MODULE.bazel.lock +++ b/MODULE.bazel.lock @@ -1096,7 +1096,7 @@ "@@rules_nodejs+//nodejs:extensions.bzl%node": { "general": { "bzlTransitiveDigest": "4pUxCNc22K4I+6+4Nxu52Hur12tFRfa1JMsN5mdDv60=", - "usagesDigest": "RUNc/H/4+qM5zb0RR5p3jjryvj3HZf8vDnJDU6M9uZc=", + "usagesDigest": "MhZgSV2KT2KowfGcEDHCUJpD8UsBfZDZKKkIgaqjXqA=", "recordedFileInputs": {}, "recordedDirentsInputs": {}, "envVariables": {}, @@ -1511,137 +1511,51 @@ "user_node_repository_name": "nodejs" } }, - "node20_linux_amd64": { - "repoRuleId": "@@rules_nodejs+//nodejs:repositories.bzl%_nodejs_repositories", - "attributes": { - "node_download_auth": {}, - "node_repositories": {}, - "node_urls": [ - "https://nodejs.org/dist/v{version}/{filename}" - ], - "node_version": "20.19.0", - "include_headers": false, - "platform": "linux_amd64" - } - }, - "node20_linux_arm64": { - "repoRuleId": "@@rules_nodejs+//nodejs:repositories.bzl%_nodejs_repositories", - "attributes": { - "node_download_auth": {}, - "node_repositories": {}, - "node_urls": [ - "https://nodejs.org/dist/v{version}/{filename}" - ], - "node_version": "20.19.0", - "include_headers": false, - "platform": "linux_arm64" - } - }, - "node20_linux_s390x": { - "repoRuleId": "@@rules_nodejs+//nodejs:repositories.bzl%_nodejs_repositories", - "attributes": { - "node_download_auth": {}, - "node_repositories": {}, - "node_urls": [ - "https://nodejs.org/dist/v{version}/{filename}" - ], - "node_version": "20.19.0", - "include_headers": false, - "platform": "linux_s390x" - } - }, - "node20_linux_ppc64le": { - "repoRuleId": "@@rules_nodejs+//nodejs:repositories.bzl%_nodejs_repositories", - "attributes": { - "node_download_auth": {}, - "node_repositories": {}, - "node_urls": [ - "https://nodejs.org/dist/v{version}/{filename}" - ], - "node_version": "20.19.0", - "include_headers": false, - "platform": "linux_ppc64le" - } - }, - "node20_darwin_amd64": { - "repoRuleId": "@@rules_nodejs+//nodejs:repositories.bzl%_nodejs_repositories", - "attributes": { - "node_download_auth": {}, - "node_repositories": {}, - "node_urls": [ - "https://nodejs.org/dist/v{version}/{filename}" - ], - "node_version": "20.19.0", - "include_headers": false, - "platform": "darwin_amd64" - } - }, - "node20_darwin_arm64": { - "repoRuleId": "@@rules_nodejs+//nodejs:repositories.bzl%_nodejs_repositories", - "attributes": { - "node_download_auth": {}, - "node_repositories": {}, - "node_urls": [ - "https://nodejs.org/dist/v{version}/{filename}" - ], - "node_version": "20.19.0", - "include_headers": false, - "platform": "darwin_arm64" - } - }, - "node20_windows_amd64": { - "repoRuleId": "@@rules_nodejs+//nodejs:repositories.bzl%_nodejs_repositories", - "attributes": { - "node_download_auth": {}, - "node_repositories": {}, - "node_urls": [ - "https://nodejs.org/dist/v{version}/{filename}" - ], - "node_version": "20.19.0", - "include_headers": false, - "platform": "windows_amd64" - } - }, - "node20_windows_arm64": { - "repoRuleId": "@@rules_nodejs+//nodejs:repositories.bzl%_nodejs_repositories", - "attributes": { - "node_download_auth": {}, - "node_repositories": {}, - "node_urls": [ - "https://nodejs.org/dist/v{version}/{filename}" - ], - "node_version": "20.19.0", - "include_headers": false, - "platform": "windows_arm64" - } - }, - "node20": { - "repoRuleId": "@@rules_nodejs+//nodejs/private:nodejs_repo_host_os_alias.bzl%nodejs_repo_host_os_alias", - "attributes": { - "user_node_repository_name": "node20" - } - }, - "node20_host": { - "repoRuleId": "@@rules_nodejs+//nodejs/private:nodejs_repo_host_os_alias.bzl%nodejs_repo_host_os_alias", - "attributes": { - "user_node_repository_name": "node20" - } - }, - "node20_toolchains": { - "repoRuleId": "@@rules_nodejs+//nodejs/private:nodejs_toolchains_repo.bzl%nodejs_toolchains_repo", - "attributes": { - "user_node_repository_name": "node20" - } - }, "node22_linux_amd64": { "repoRuleId": "@@rules_nodejs+//nodejs:repositories.bzl%_nodejs_repositories", "attributes": { "node_download_auth": {}, - "node_repositories": {}, + "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" + ] + }, "node_urls": [ "https://nodejs.org/dist/v{version}/{filename}" ], - "node_version": "22.12.0", + "node_version": "22.22.0", "include_headers": false, "platform": "linux_amd64" } @@ -1650,11 +1564,47 @@ "repoRuleId": "@@rules_nodejs+//nodejs:repositories.bzl%_nodejs_repositories", "attributes": { "node_download_auth": {}, - "node_repositories": {}, + "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" + ] + }, "node_urls": [ "https://nodejs.org/dist/v{version}/{filename}" ], - "node_version": "22.12.0", + "node_version": "22.22.0", "include_headers": false, "platform": "linux_arm64" } @@ -1663,11 +1613,47 @@ "repoRuleId": "@@rules_nodejs+//nodejs:repositories.bzl%_nodejs_repositories", "attributes": { "node_download_auth": {}, - "node_repositories": {}, + "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" + ] + }, "node_urls": [ "https://nodejs.org/dist/v{version}/{filename}" ], - "node_version": "22.12.0", + "node_version": "22.22.0", "include_headers": false, "platform": "linux_s390x" } @@ -1676,11 +1662,47 @@ "repoRuleId": "@@rules_nodejs+//nodejs:repositories.bzl%_nodejs_repositories", "attributes": { "node_download_auth": {}, - "node_repositories": {}, + "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" + ] + }, "node_urls": [ "https://nodejs.org/dist/v{version}/{filename}" ], - "node_version": "22.12.0", + "node_version": "22.22.0", "include_headers": false, "platform": "linux_ppc64le" } @@ -1689,11 +1711,47 @@ "repoRuleId": "@@rules_nodejs+//nodejs:repositories.bzl%_nodejs_repositories", "attributes": { "node_download_auth": {}, - "node_repositories": {}, + "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" + ] + }, "node_urls": [ "https://nodejs.org/dist/v{version}/{filename}" ], - "node_version": "22.12.0", + "node_version": "22.22.0", "include_headers": false, "platform": "darwin_amd64" } @@ -1702,11 +1760,47 @@ "repoRuleId": "@@rules_nodejs+//nodejs:repositories.bzl%_nodejs_repositories", "attributes": { "node_download_auth": {}, - "node_repositories": {}, + "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" + ] + }, "node_urls": [ "https://nodejs.org/dist/v{version}/{filename}" ], - "node_version": "22.12.0", + "node_version": "22.22.0", "include_headers": false, "platform": "darwin_arm64" } @@ -1715,11 +1809,47 @@ "repoRuleId": "@@rules_nodejs+//nodejs:repositories.bzl%_nodejs_repositories", "attributes": { "node_download_auth": {}, - "node_repositories": {}, + "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" + ] + }, "node_urls": [ "https://nodejs.org/dist/v{version}/{filename}" ], - "node_version": "22.12.0", + "node_version": "22.22.0", "include_headers": false, "platform": "windows_amd64" } @@ -1728,11 +1858,47 @@ "repoRuleId": "@@rules_nodejs+//nodejs:repositories.bzl%_nodejs_repositories", "attributes": { "node_download_auth": {}, - "node_repositories": {}, + "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" + ] + }, "node_urls": [ "https://nodejs.org/dist/v{version}/{filename}" ], - "node_version": "22.12.0", + "node_version": "22.22.0", "include_headers": false, "platform": "windows_arm64" } @@ -1759,11 +1925,47 @@ "repoRuleId": "@@rules_nodejs+//nodejs:repositories.bzl%_nodejs_repositories", "attributes": { "node_download_auth": {}, - "node_repositories": {}, + "node_repositories": { + "24.13.1-darwin_arm64": [ + "node-v24.13.1-darwin-arm64.tar.gz", + "node-v24.13.1-darwin-arm64", + "8c039d59f2fec6195e4281ad5b0d02b9a940897b4df7b849c6fb48be6787bba6" + ], + "24.13.1-darwin_amd64": [ + "node-v24.13.1-darwin-x64.tar.gz", + "node-v24.13.1-darwin-x64", + "527f0578d9812e7dfa225121bda0b1546a6a0e4b5f556295fc8299c272de5fbf" + ], + "24.13.1-linux_arm64": [ + "node-v24.13.1-linux-arm64.tar.xz", + "node-v24.13.1-linux-arm64", + "c827d3d301e2eed1a51f36d0116b71b9e3d9e3b728f081615270ea40faac34c1" + ], + "24.13.1-linux_ppc64le": [ + "node-v24.13.1-linux-ppc64le.tar.xz", + "node-v24.13.1-linux-ppc64le", + "fb712a08d317655dbf776c90f60ac2105109d802e33811df6c9ed33d12f801c6" + ], + "24.13.1-linux_s390x": [ + "node-v24.13.1-linux-s390x.tar.xz", + "node-v24.13.1-linux-s390x", + "8e2c0d9b5545c3db22623e8cb8d6f0c28fcd470f29d32dbeabf9432dda289de2" + ], + "24.13.1-linux_amd64": [ + "node-v24.13.1-linux-x64.tar.xz", + "node-v24.13.1-linux-x64", + "30215f90ea3cd04dfbc06e762c021393fa173a1d392974298bbc871a8e461089" + ], + "24.13.1-windows_amd64": [ + "node-v24.13.1-win-x64.zip", + "node-v24.13.1-win-x64", + "fba577c4bb87df04d54dd87bbdaa5a2272f1f99a2acbf9152e1a91b8b5f0b279" + ] + }, "node_urls": [ "https://nodejs.org/dist/v{version}/{filename}" ], - "node_version": "24.0.0", + "node_version": "24.13.1", "include_headers": false, "platform": "linux_amd64" } @@ -1772,11 +1974,47 @@ "repoRuleId": "@@rules_nodejs+//nodejs:repositories.bzl%_nodejs_repositories", "attributes": { "node_download_auth": {}, - "node_repositories": {}, + "node_repositories": { + "24.13.1-darwin_arm64": [ + "node-v24.13.1-darwin-arm64.tar.gz", + "node-v24.13.1-darwin-arm64", + "8c039d59f2fec6195e4281ad5b0d02b9a940897b4df7b849c6fb48be6787bba6" + ], + "24.13.1-darwin_amd64": [ + "node-v24.13.1-darwin-x64.tar.gz", + "node-v24.13.1-darwin-x64", + "527f0578d9812e7dfa225121bda0b1546a6a0e4b5f556295fc8299c272de5fbf" + ], + "24.13.1-linux_arm64": [ + "node-v24.13.1-linux-arm64.tar.xz", + "node-v24.13.1-linux-arm64", + "c827d3d301e2eed1a51f36d0116b71b9e3d9e3b728f081615270ea40faac34c1" + ], + "24.13.1-linux_ppc64le": [ + "node-v24.13.1-linux-ppc64le.tar.xz", + "node-v24.13.1-linux-ppc64le", + "fb712a08d317655dbf776c90f60ac2105109d802e33811df6c9ed33d12f801c6" + ], + "24.13.1-linux_s390x": [ + "node-v24.13.1-linux-s390x.tar.xz", + "node-v24.13.1-linux-s390x", + "8e2c0d9b5545c3db22623e8cb8d6f0c28fcd470f29d32dbeabf9432dda289de2" + ], + "24.13.1-linux_amd64": [ + "node-v24.13.1-linux-x64.tar.xz", + "node-v24.13.1-linux-x64", + "30215f90ea3cd04dfbc06e762c021393fa173a1d392974298bbc871a8e461089" + ], + "24.13.1-windows_amd64": [ + "node-v24.13.1-win-x64.zip", + "node-v24.13.1-win-x64", + "fba577c4bb87df04d54dd87bbdaa5a2272f1f99a2acbf9152e1a91b8b5f0b279" + ] + }, "node_urls": [ "https://nodejs.org/dist/v{version}/{filename}" ], - "node_version": "24.0.0", + "node_version": "24.13.1", "include_headers": false, "platform": "linux_arm64" } @@ -1785,11 +2023,47 @@ "repoRuleId": "@@rules_nodejs+//nodejs:repositories.bzl%_nodejs_repositories", "attributes": { "node_download_auth": {}, - "node_repositories": {}, + "node_repositories": { + "24.13.1-darwin_arm64": [ + "node-v24.13.1-darwin-arm64.tar.gz", + "node-v24.13.1-darwin-arm64", + "8c039d59f2fec6195e4281ad5b0d02b9a940897b4df7b849c6fb48be6787bba6" + ], + "24.13.1-darwin_amd64": [ + "node-v24.13.1-darwin-x64.tar.gz", + "node-v24.13.1-darwin-x64", + "527f0578d9812e7dfa225121bda0b1546a6a0e4b5f556295fc8299c272de5fbf" + ], + "24.13.1-linux_arm64": [ + "node-v24.13.1-linux-arm64.tar.xz", + "node-v24.13.1-linux-arm64", + "c827d3d301e2eed1a51f36d0116b71b9e3d9e3b728f081615270ea40faac34c1" + ], + "24.13.1-linux_ppc64le": [ + "node-v24.13.1-linux-ppc64le.tar.xz", + "node-v24.13.1-linux-ppc64le", + "fb712a08d317655dbf776c90f60ac2105109d802e33811df6c9ed33d12f801c6" + ], + "24.13.1-linux_s390x": [ + "node-v24.13.1-linux-s390x.tar.xz", + "node-v24.13.1-linux-s390x", + "8e2c0d9b5545c3db22623e8cb8d6f0c28fcd470f29d32dbeabf9432dda289de2" + ], + "24.13.1-linux_amd64": [ + "node-v24.13.1-linux-x64.tar.xz", + "node-v24.13.1-linux-x64", + "30215f90ea3cd04dfbc06e762c021393fa173a1d392974298bbc871a8e461089" + ], + "24.13.1-windows_amd64": [ + "node-v24.13.1-win-x64.zip", + "node-v24.13.1-win-x64", + "fba577c4bb87df04d54dd87bbdaa5a2272f1f99a2acbf9152e1a91b8b5f0b279" + ] + }, "node_urls": [ "https://nodejs.org/dist/v{version}/{filename}" ], - "node_version": "24.0.0", + "node_version": "24.13.1", "include_headers": false, "platform": "linux_s390x" } @@ -1798,11 +2072,47 @@ "repoRuleId": "@@rules_nodejs+//nodejs:repositories.bzl%_nodejs_repositories", "attributes": { "node_download_auth": {}, - "node_repositories": {}, + "node_repositories": { + "24.13.1-darwin_arm64": [ + "node-v24.13.1-darwin-arm64.tar.gz", + "node-v24.13.1-darwin-arm64", + "8c039d59f2fec6195e4281ad5b0d02b9a940897b4df7b849c6fb48be6787bba6" + ], + "24.13.1-darwin_amd64": [ + "node-v24.13.1-darwin-x64.tar.gz", + "node-v24.13.1-darwin-x64", + "527f0578d9812e7dfa225121bda0b1546a6a0e4b5f556295fc8299c272de5fbf" + ], + "24.13.1-linux_arm64": [ + "node-v24.13.1-linux-arm64.tar.xz", + "node-v24.13.1-linux-arm64", + "c827d3d301e2eed1a51f36d0116b71b9e3d9e3b728f081615270ea40faac34c1" + ], + "24.13.1-linux_ppc64le": [ + "node-v24.13.1-linux-ppc64le.tar.xz", + "node-v24.13.1-linux-ppc64le", + "fb712a08d317655dbf776c90f60ac2105109d802e33811df6c9ed33d12f801c6" + ], + "24.13.1-linux_s390x": [ + "node-v24.13.1-linux-s390x.tar.xz", + "node-v24.13.1-linux-s390x", + "8e2c0d9b5545c3db22623e8cb8d6f0c28fcd470f29d32dbeabf9432dda289de2" + ], + "24.13.1-linux_amd64": [ + "node-v24.13.1-linux-x64.tar.xz", + "node-v24.13.1-linux-x64", + "30215f90ea3cd04dfbc06e762c021393fa173a1d392974298bbc871a8e461089" + ], + "24.13.1-windows_amd64": [ + "node-v24.13.1-win-x64.zip", + "node-v24.13.1-win-x64", + "fba577c4bb87df04d54dd87bbdaa5a2272f1f99a2acbf9152e1a91b8b5f0b279" + ] + }, "node_urls": [ "https://nodejs.org/dist/v{version}/{filename}" ], - "node_version": "24.0.0", + "node_version": "24.13.1", "include_headers": false, "platform": "linux_ppc64le" } @@ -1811,11 +2121,47 @@ "repoRuleId": "@@rules_nodejs+//nodejs:repositories.bzl%_nodejs_repositories", "attributes": { "node_download_auth": {}, - "node_repositories": {}, + "node_repositories": { + "24.13.1-darwin_arm64": [ + "node-v24.13.1-darwin-arm64.tar.gz", + "node-v24.13.1-darwin-arm64", + "8c039d59f2fec6195e4281ad5b0d02b9a940897b4df7b849c6fb48be6787bba6" + ], + "24.13.1-darwin_amd64": [ + "node-v24.13.1-darwin-x64.tar.gz", + "node-v24.13.1-darwin-x64", + "527f0578d9812e7dfa225121bda0b1546a6a0e4b5f556295fc8299c272de5fbf" + ], + "24.13.1-linux_arm64": [ + "node-v24.13.1-linux-arm64.tar.xz", + "node-v24.13.1-linux-arm64", + "c827d3d301e2eed1a51f36d0116b71b9e3d9e3b728f081615270ea40faac34c1" + ], + "24.13.1-linux_ppc64le": [ + "node-v24.13.1-linux-ppc64le.tar.xz", + "node-v24.13.1-linux-ppc64le", + "fb712a08d317655dbf776c90f60ac2105109d802e33811df6c9ed33d12f801c6" + ], + "24.13.1-linux_s390x": [ + "node-v24.13.1-linux-s390x.tar.xz", + "node-v24.13.1-linux-s390x", + "8e2c0d9b5545c3db22623e8cb8d6f0c28fcd470f29d32dbeabf9432dda289de2" + ], + "24.13.1-linux_amd64": [ + "node-v24.13.1-linux-x64.tar.xz", + "node-v24.13.1-linux-x64", + "30215f90ea3cd04dfbc06e762c021393fa173a1d392974298bbc871a8e461089" + ], + "24.13.1-windows_amd64": [ + "node-v24.13.1-win-x64.zip", + "node-v24.13.1-win-x64", + "fba577c4bb87df04d54dd87bbdaa5a2272f1f99a2acbf9152e1a91b8b5f0b279" + ] + }, "node_urls": [ "https://nodejs.org/dist/v{version}/{filename}" ], - "node_version": "24.0.0", + "node_version": "24.13.1", "include_headers": false, "platform": "darwin_amd64" } @@ -1824,11 +2170,47 @@ "repoRuleId": "@@rules_nodejs+//nodejs:repositories.bzl%_nodejs_repositories", "attributes": { "node_download_auth": {}, - "node_repositories": {}, + "node_repositories": { + "24.13.1-darwin_arm64": [ + "node-v24.13.1-darwin-arm64.tar.gz", + "node-v24.13.1-darwin-arm64", + "8c039d59f2fec6195e4281ad5b0d02b9a940897b4df7b849c6fb48be6787bba6" + ], + "24.13.1-darwin_amd64": [ + "node-v24.13.1-darwin-x64.tar.gz", + "node-v24.13.1-darwin-x64", + "527f0578d9812e7dfa225121bda0b1546a6a0e4b5f556295fc8299c272de5fbf" + ], + "24.13.1-linux_arm64": [ + "node-v24.13.1-linux-arm64.tar.xz", + "node-v24.13.1-linux-arm64", + "c827d3d301e2eed1a51f36d0116b71b9e3d9e3b728f081615270ea40faac34c1" + ], + "24.13.1-linux_ppc64le": [ + "node-v24.13.1-linux-ppc64le.tar.xz", + "node-v24.13.1-linux-ppc64le", + "fb712a08d317655dbf776c90f60ac2105109d802e33811df6c9ed33d12f801c6" + ], + "24.13.1-linux_s390x": [ + "node-v24.13.1-linux-s390x.tar.xz", + "node-v24.13.1-linux-s390x", + "8e2c0d9b5545c3db22623e8cb8d6f0c28fcd470f29d32dbeabf9432dda289de2" + ], + "24.13.1-linux_amd64": [ + "node-v24.13.1-linux-x64.tar.xz", + "node-v24.13.1-linux-x64", + "30215f90ea3cd04dfbc06e762c021393fa173a1d392974298bbc871a8e461089" + ], + "24.13.1-windows_amd64": [ + "node-v24.13.1-win-x64.zip", + "node-v24.13.1-win-x64", + "fba577c4bb87df04d54dd87bbdaa5a2272f1f99a2acbf9152e1a91b8b5f0b279" + ] + }, "node_urls": [ "https://nodejs.org/dist/v{version}/{filename}" ], - "node_version": "24.0.0", + "node_version": "24.13.1", "include_headers": false, "platform": "darwin_arm64" } @@ -1837,11 +2219,47 @@ "repoRuleId": "@@rules_nodejs+//nodejs:repositories.bzl%_nodejs_repositories", "attributes": { "node_download_auth": {}, - "node_repositories": {}, + "node_repositories": { + "24.13.1-darwin_arm64": [ + "node-v24.13.1-darwin-arm64.tar.gz", + "node-v24.13.1-darwin-arm64", + "8c039d59f2fec6195e4281ad5b0d02b9a940897b4df7b849c6fb48be6787bba6" + ], + "24.13.1-darwin_amd64": [ + "node-v24.13.1-darwin-x64.tar.gz", + "node-v24.13.1-darwin-x64", + "527f0578d9812e7dfa225121bda0b1546a6a0e4b5f556295fc8299c272de5fbf" + ], + "24.13.1-linux_arm64": [ + "node-v24.13.1-linux-arm64.tar.xz", + "node-v24.13.1-linux-arm64", + "c827d3d301e2eed1a51f36d0116b71b9e3d9e3b728f081615270ea40faac34c1" + ], + "24.13.1-linux_ppc64le": [ + "node-v24.13.1-linux-ppc64le.tar.xz", + "node-v24.13.1-linux-ppc64le", + "fb712a08d317655dbf776c90f60ac2105109d802e33811df6c9ed33d12f801c6" + ], + "24.13.1-linux_s390x": [ + "node-v24.13.1-linux-s390x.tar.xz", + "node-v24.13.1-linux-s390x", + "8e2c0d9b5545c3db22623e8cb8d6f0c28fcd470f29d32dbeabf9432dda289de2" + ], + "24.13.1-linux_amd64": [ + "node-v24.13.1-linux-x64.tar.xz", + "node-v24.13.1-linux-x64", + "30215f90ea3cd04dfbc06e762c021393fa173a1d392974298bbc871a8e461089" + ], + "24.13.1-windows_amd64": [ + "node-v24.13.1-win-x64.zip", + "node-v24.13.1-win-x64", + "fba577c4bb87df04d54dd87bbdaa5a2272f1f99a2acbf9152e1a91b8b5f0b279" + ] + }, "node_urls": [ "https://nodejs.org/dist/v{version}/{filename}" ], - "node_version": "24.0.0", + "node_version": "24.13.1", "include_headers": false, "platform": "windows_amd64" } @@ -1850,11 +2268,47 @@ "repoRuleId": "@@rules_nodejs+//nodejs:repositories.bzl%_nodejs_repositories", "attributes": { "node_download_auth": {}, - "node_repositories": {}, + "node_repositories": { + "24.13.1-darwin_arm64": [ + "node-v24.13.1-darwin-arm64.tar.gz", + "node-v24.13.1-darwin-arm64", + "8c039d59f2fec6195e4281ad5b0d02b9a940897b4df7b849c6fb48be6787bba6" + ], + "24.13.1-darwin_amd64": [ + "node-v24.13.1-darwin-x64.tar.gz", + "node-v24.13.1-darwin-x64", + "527f0578d9812e7dfa225121bda0b1546a6a0e4b5f556295fc8299c272de5fbf" + ], + "24.13.1-linux_arm64": [ + "node-v24.13.1-linux-arm64.tar.xz", + "node-v24.13.1-linux-arm64", + "c827d3d301e2eed1a51f36d0116b71b9e3d9e3b728f081615270ea40faac34c1" + ], + "24.13.1-linux_ppc64le": [ + "node-v24.13.1-linux-ppc64le.tar.xz", + "node-v24.13.1-linux-ppc64le", + "fb712a08d317655dbf776c90f60ac2105109d802e33811df6c9ed33d12f801c6" + ], + "24.13.1-linux_s390x": [ + "node-v24.13.1-linux-s390x.tar.xz", + "node-v24.13.1-linux-s390x", + "8e2c0d9b5545c3db22623e8cb8d6f0c28fcd470f29d32dbeabf9432dda289de2" + ], + "24.13.1-linux_amd64": [ + "node-v24.13.1-linux-x64.tar.xz", + "node-v24.13.1-linux-x64", + "30215f90ea3cd04dfbc06e762c021393fa173a1d392974298bbc871a8e461089" + ], + "24.13.1-windows_amd64": [ + "node-v24.13.1-win-x64.zip", + "node-v24.13.1-win-x64", + "fba577c4bb87df04d54dd87bbdaa5a2272f1f99a2acbf9152e1a91b8b5f0b279" + ] + }, "node_urls": [ "https://nodejs.org/dist/v{version}/{filename}" ], - "node_version": "24.0.0", + "node_version": "24.13.1", "include_headers": false, "platform": "windows_arm64" } diff --git a/constants.bzl b/constants.bzl index d4be4fc34b84..c53a8ddb1e86 100644 --- a/constants.bzl +++ b/constants.bzl @@ -1,5 +1,5 @@ # Engine versions to stamp in a release package.json -RELEASE_ENGINES_NODE = "^20.19.0 || ^22.12.0 || >=24.0.0" +RELEASE_ENGINES_NODE = "^22.22.0 || >=24.13.1" RELEASE_ENGINES_NPM = "^6.11.0 || ^7.5.6 || >=8.0.0" RELEASE_ENGINES_YARN = ">= 1.13.0" diff --git a/package.json b/package.json index 6f9e2012ba44..8c3982211715 100644 --- a/package.json +++ b/package.json @@ -30,7 +30,7 @@ }, "packageManager": "pnpm@10.30.0", "engines": { - "node": "^20.19.0 || ^22.12.0 || >=24.0.0", + "node": "^22.22.0 || >=24.13.1", "npm": "Please use pnpm instead of NPM to install dependencies", "yarn": "Please use pnpm instead of Yarn to install dependencies", "pnpm": "10.30.0" diff --git a/packages/angular/build/BUILD.bazel b/packages/angular/build/BUILD.bazel index 2f74117ff850..5303f6763020 100644 --- a/packages/angular/build/BUILD.bazel +++ b/packages/angular/build/BUILD.bazel @@ -105,7 +105,6 @@ ts_project( ":node_modules/sass", ":node_modules/source-map-support", ":node_modules/tinyglobby", - ":node_modules/undici", ":node_modules/vite", ":node_modules/vitest", ":node_modules/watchpack", diff --git a/packages/angular/build/package.json b/packages/angular/build/package.json index f0e5ebdf7fce..6c3b017423a2 100644 --- a/packages/angular/build/package.json +++ b/packages/angular/build/package.json @@ -42,7 +42,6 @@ "semver": "7.7.4", "source-map-support": "0.5.21", "tinyglobby": "0.2.15", - "undici": "7.22.0", "vite": "7.3.1", "watchpack": "2.5.1" }, diff --git a/packages/angular/build/src/tools/vite/plugins/ssr-ssl-plugin.ts b/packages/angular/build/src/tools/vite/plugins/ssr-ssl-plugin.ts index 80ddf56e739a..a32c87a604de 100644 --- a/packages/angular/build/src/tools/vite/plugins/ssr-ssl-plugin.ts +++ b/packages/angular/build/src/tools/vite/plugins/ssr-ssl-plugin.ts @@ -6,8 +6,7 @@ * found in the LICENSE file at https://angular.dev/license */ -import { readFile } from 'node:fs/promises'; -import { getCACertificates, rootCertificates, setDefaultCACertificates } from 'node:tls'; +import { getCACertificates, setDefaultCACertificates } from 'node:tls'; import type { Plugin } from 'vite'; export function createAngularServerSideSSLPlugin(): Plugin { @@ -39,34 +38,8 @@ export function createAngularServerSideSSLPlugin(): Plugin { const { cert } = https; const additionalCerts = Array.isArray(cert) ? cert : [cert]; - // TODO(alanagius): Remove the `if` check once we only support Node.js 22.18.0+ and 24.5.0+. - if (getCACertificates && setDefaultCACertificates) { - const currentCerts = getCACertificates('default'); - setDefaultCACertificates([...currentCerts, ...additionalCerts]); - - return; - } - - // TODO(alanagius): Remove the below and `undici` dependency once we only support Node.js 22.18.0+ and 24.5.0+. - const { getGlobalDispatcher, setGlobalDispatcher, Agent } = await import('undici'); - const originalDispatcher = getGlobalDispatcher(); - const ca = [...rootCertificates, ...additionalCerts]; - const extraNodeCerts = process.env['NODE_EXTRA_CA_CERTS']; - if (extraNodeCerts) { - ca.push(await readFile(extraNodeCerts)); - } - - setGlobalDispatcher( - new Agent({ - connect: { - ca, - }, - }), - ); - - httpServer?.on('close', () => { - setGlobalDispatcher(originalDispatcher); - }); + const currentCerts = getCACertificates('default'); + setDefaultCACertificates([...currentCerts, ...additionalCerts]); }, }; } diff --git a/packages/angular/cli/lib/cli/index.ts b/packages/angular/cli/lib/cli/index.ts index ac7591e43630..a030e692e26b 100644 --- a/packages/angular/cli/lib/cli/index.ts +++ b/packages/angular/cli/lib/cli/index.ts @@ -16,7 +16,7 @@ import { writeErrorToLogFile } from '../../src/utilities/log-file'; export { VERSION } from '../../src/utilities/version'; -const MIN_NODEJS_VERSION = [20, 19] as const; +const MIN_NODEJS_VERSION = [22, 22] as const; /* eslint-disable no-console */ export default async function (options: { cliArgs: string[] }) { diff --git a/packages/angular/cli/src/commands/version/version-info.ts b/packages/angular/cli/src/commands/version/version-info.ts index 3e75c2c58cac..efe2f8506ea5 100644 --- a/packages/angular/cli/src/commands/version/version-info.ts +++ b/packages/angular/cli/src/commands/version/version-info.ts @@ -60,7 +60,7 @@ export interface VersionInfo { * Major versions of Node.js that are officially supported by Angular. * @see https://angular.dev/reference/versions#supported-node-js-versions */ -const SUPPORTED_NODE_MAJORS = [20, 22, 24]; +const SUPPORTED_NODE_MAJORS = [22, 24]; /** * A list of regular expression patterns that match package names that should be included in the diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 57b0f06b5de7..886bc219b842 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -403,9 +403,6 @@ importers: tinyglobby: specifier: 0.2.15 version: 0.2.15 - undici: - specifier: 7.22.0 - version: 7.22.0 vite: specifier: 7.3.1 version: 7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) diff --git a/tools/toolchain_info.bzl b/tools/toolchain_info.bzl index 727a02abcae4..f4bfe56f72d3 100644 --- a/tools/toolchain_info.bzl +++ b/tools/toolchain_info.bzl @@ -3,18 +3,12 @@ # the name can be anything the user wants this is just added to the target to create unique names # the order will match against the order in the TOOLCHAIN_VERSION list. TOOLCHAINS_NAMES = [ - "node20", "node22", "node24", ] # this is the list of toolchains that should be used and are registered with nodejs_register_toolchains in the WORKSPACE file TOOLCHAINS_VERSIONS = [ - select({ - "@bazel_tools//src/conditions:linux_x86_64": "@node20_linux_amd64//:node_toolchain", - "@bazel_tools//src/conditions:darwin": "@node20_darwin_amd64//:node_toolchain", - "@bazel_tools//src/conditions:windows": "@node20_windows_amd64//:node_toolchain", - }), select({ "@bazel_tools//src/conditions:linux_x86_64": "@node22_linux_amd64//:node_toolchain", "@bazel_tools//src/conditions:darwin": "@node22_darwin_amd64//:node_toolchain", From 5e70800c8e963040476428dd0ff25e12c43b3160 Mon Sep 17 00:00:00 2001 From: Angular Robot Date: Tue, 24 Feb 2026 17:27:47 +0000 Subject: [PATCH 024/226] build: update dependency listr2 to v10 See associated pull request for more information. --- packages/angular/build/package.json | 2 +- packages/angular/cli/package.json | 2 +- pnpm-lock.yaml | 32 ++++++++++++++--------------- 3 files changed, 18 insertions(+), 18 deletions(-) diff --git a/packages/angular/build/package.json b/packages/angular/build/package.json index 6c3b017423a2..293769d1f99a 100644 --- a/packages/angular/build/package.json +++ b/packages/angular/build/package.json @@ -31,7 +31,7 @@ "https-proxy-agent": "7.0.6", "istanbul-lib-instrument": "6.0.3", "jsonc-parser": "3.3.1", - "listr2": "9.0.5", + "listr2": "10.1.0", "magic-string": "0.30.21", "mrmime": "2.0.1", "parse5-html-rewriting-stream": "8.0.0", diff --git a/packages/angular/cli/package.json b/packages/angular/cli/package.json index a84f7f82f961..84ed407e6864 100644 --- a/packages/angular/cli/package.json +++ b/packages/angular/cli/package.json @@ -33,7 +33,7 @@ "algoliasearch": "5.49.0", "ini": "6.0.0", "jsonc-parser": "3.3.1", - "listr2": "9.0.5", + "listr2": "10.1.0", "npm-package-arg": "13.0.2", "pacote": "21.3.1", "parse5-html-rewriting-stream": "8.0.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 886bc219b842..1db0789b6497 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -371,8 +371,8 @@ importers: specifier: 3.3.1 version: 3.3.1 listr2: - specifier: 9.0.5 - version: 9.0.5 + specifier: 10.1.0 + version: 10.1.0 magic-string: specifier: 0.30.21 version: 0.30.21 @@ -455,7 +455,7 @@ importers: version: 7.10.1(@types/node@24.10.9) '@listr2/prompt-adapter-inquirer': specifier: 3.0.5 - version: 3.0.5(@inquirer/prompts@7.10.1(@types/node@24.10.9))(@types/node@24.10.9)(listr2@9.0.5) + version: 3.0.5(@inquirer/prompts@7.10.1(@types/node@24.10.9))(@types/node@24.10.9)(listr2@10.1.0) '@modelcontextprotocol/sdk': specifier: 1.26.0 version: 1.26.0(zod@4.3.6) @@ -475,8 +475,8 @@ importers: specifier: 3.3.1 version: 3.3.1 listr2: - specifier: 9.0.5 - version: 9.0.5 + specifier: 10.1.0 + version: 10.1.0 npm-package-arg: specifier: 13.0.2 version: 13.0.2 @@ -6772,9 +6772,9 @@ packages: lines-and-columns@1.2.4: resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} - listr2@9.0.5: - resolution: {integrity: sha512-ME4Fb83LgEgwNw96RKNvKV4VTLuXfoKudAmm2lP8Kk87KaMK0/Xrx/aAkMWmT8mDb+3MlFDspfbCs7adjRxA2g==} - engines: {node: '>=20.0.0'} + listr2@10.1.0: + resolution: {integrity: sha512-/6t2KgDYIcCjhELwvrRxi1gaJ4xCGLTjNvh6mSjYenBkrZxggek8EwCbwBU33GMUCpyyrOzz2TzylrO5mTiI1w==} + engines: {node: '>=22.0.0'} lmdb@3.5.1: resolution: {integrity: sha512-NYHA0MRPjvNX+vSw8Xxg6FLKxzAG+e7Pt8RqAQA/EehzHVXq9SxDqJIN3JL1hK0dweb884y8kIh6rkWvPyg9Wg==} @@ -6853,9 +6853,9 @@ packages: resolution: {integrity: sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==} engines: {node: '>=10'} - log-update@6.1.0: - resolution: {integrity: sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w==} - engines: {node: '>=18'} + log-update@7.1.0: + resolution: {integrity: sha512-y9pi/ZOQQVvTgfRDEHV1Cj4zQUkJZPipEUNOxhn1R6KgmdMs7LKvXWCd9eMVPGJgvYzFLCenecWr0Ps8ChVv2A==} + engines: {node: '>=20'} log4js@6.9.1: resolution: {integrity: sha512-1somDdy9sChrr9/f4UlzhdaGfDR2c/SaD2a4T7qEkG4jTS57/B3qmnjLYePwQ8cqWnUHZI0iAKxMBpCZICiZ2g==} @@ -11421,11 +11421,11 @@ snapshots: '@leichtgewicht/ip-codec@2.0.5': {} - '@listr2/prompt-adapter-inquirer@3.0.5(@inquirer/prompts@7.10.1(@types/node@24.10.9))(@types/node@24.10.9)(listr2@9.0.5)': + '@listr2/prompt-adapter-inquirer@3.0.5(@inquirer/prompts@7.10.1(@types/node@24.10.9))(@types/node@24.10.9)(listr2@10.1.0)': dependencies: '@inquirer/prompts': 7.10.1(@types/node@24.10.9) '@inquirer/type': 3.0.10(@types/node@24.10.9) - listr2: 9.0.5 + listr2: 10.1.0 transitivePeerDependencies: - '@types/node' @@ -16296,12 +16296,12 @@ snapshots: lines-and-columns@1.2.4: {} - listr2@9.0.5: + listr2@10.1.0: dependencies: cli-truncate: 5.1.1 colorette: 2.0.20 eventemitter3: 5.0.4 - log-update: 6.1.0 + log-update: 7.1.0 rfdc: 1.4.1 wrap-ansi: 9.0.2 @@ -16385,7 +16385,7 @@ snapshots: slice-ansi: 4.0.0 wrap-ansi: 6.2.0 - log-update@6.1.0: + log-update@7.1.0: dependencies: ansi-escapes: 7.3.0 cli-cursor: 5.0.0 From 1d35e3f4d6a0d3329b65b03dcb179ee395247b1e Mon Sep 17 00:00:00 2001 From: Angular Robot Date: Tue, 24 Feb 2026 17:26:42 +0000 Subject: [PATCH 025/226] build: update dependency @inquirer/confirm to v6 See associated pull request for more information. --- packages/angular/build/package.json | 2 +- pnpm-lock.yaml | 35 +++++++++++++++++++++++------ 2 files changed, 29 insertions(+), 8 deletions(-) diff --git a/packages/angular/build/package.json b/packages/angular/build/package.json index 293769d1f99a..3d73bcfdd086 100644 --- a/packages/angular/build/package.json +++ b/packages/angular/build/package.json @@ -23,7 +23,7 @@ "@babel/core": "7.29.0", "@babel/helper-annotate-as-pure": "7.27.3", "@babel/helper-split-export-declaration": "7.24.7", - "@inquirer/confirm": "5.1.21", + "@inquirer/confirm": "6.0.8", "@vitejs/plugin-basic-ssl": "2.1.4", "beasties": "0.4.1", "browserslist": "^4.26.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 1db0789b6497..9b5945cd3dd8 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -347,8 +347,8 @@ importers: specifier: 7.24.7 version: 7.24.7 '@inquirer/confirm': - specifier: 5.1.21 - version: 5.1.21(@types/node@24.10.9) + specifier: 6.0.8 + version: 6.0.8(@types/node@24.10.9) '@vitejs/plugin-basic-ssl': specifier: 2.1.4 version: 2.1.4(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)) @@ -2205,8 +2205,8 @@ packages: '@types/node': optional: true - '@inquirer/confirm@6.0.6': - resolution: {integrity: sha512-9ZkrGYiWnOKQPc3xfLIORE3lZW1qvtgRoJcoqopr5zssBn7yk4yONmzGynEOjc16FnUXzkAejj/I29BbfcoUfQ==} + '@inquirer/confirm@6.0.8': + resolution: {integrity: sha512-Di6dgmiZ9xCSUxWUReWTqDtbhXCuG2MQm2xmgSAIruzQzBqNf49b8E07/vbCYY506kDe8BiwJbegXweG8M1klw==} engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} peerDependencies: '@types/node': '>=18' @@ -2232,6 +2232,15 @@ packages: '@types/node': optional: true + '@inquirer/core@11.1.5': + resolution: {integrity: sha512-QQPAX+lka8GyLcZ7u7Nb1h6q72iZ/oy0blilC3IB2nSt1Qqxp7akt94Jqhi/DzARuN3Eo9QwJRvtl4tmVe4T5A==} + engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + '@inquirer/editor@4.2.23': resolution: {integrity: sha512-aLSROkEwirotxZ1pBaP8tugXRFCxW94gwrQLxXfrZsKkfjOYC1aRvAZuhpJOb5cu4IBTJdsCigUlf2iCOu4ZDQ==} engines: {node: '>=18'} @@ -11022,9 +11031,9 @@ snapshots: optionalDependencies: '@types/node': 24.10.9 - '@inquirer/confirm@6.0.6(@types/node@24.10.9)': + '@inquirer/confirm@6.0.8(@types/node@24.10.9)': dependencies: - '@inquirer/core': 11.1.3(@types/node@24.10.9) + '@inquirer/core': 11.1.5(@types/node@24.10.9) '@inquirer/type': 4.0.3(@types/node@24.10.9) optionalDependencies: '@types/node': 24.10.9 @@ -11054,6 +11063,18 @@ snapshots: optionalDependencies: '@types/node': 24.10.9 + '@inquirer/core@11.1.5(@types/node@24.10.9)': + dependencies: + '@inquirer/ansi': 2.0.3 + '@inquirer/figures': 2.0.3 + '@inquirer/type': 4.0.3(@types/node@24.10.9) + cli-width: 4.1.0 + fast-wrap-ansi: 0.2.0 + mute-stream: 3.0.0 + signal-exit: 4.1.0 + optionalDependencies: + '@types/node': 24.10.9 + '@inquirer/editor@4.2.23(@types/node@24.10.9)': dependencies: '@inquirer/core': 10.3.2(@types/node@24.10.9) @@ -11165,7 +11186,7 @@ snapshots: '@inquirer/prompts@8.2.0(@types/node@24.10.9)': dependencies: '@inquirer/checkbox': 5.0.6(@types/node@24.10.9) - '@inquirer/confirm': 6.0.6(@types/node@24.10.9) + '@inquirer/confirm': 6.0.8(@types/node@24.10.9) '@inquirer/editor': 5.0.6(@types/node@24.10.9) '@inquirer/expand': 5.0.6(@types/node@24.10.9) '@inquirer/input': 5.0.6(@types/node@24.10.9) From dfbbe2d28f9ca7af0fe8d43d51191e7b39f930a6 Mon Sep 17 00:00:00 2001 From: Angular Robot Date: Tue, 24 Feb 2026 19:25:46 +0000 Subject: [PATCH 026/226] build: update dependency @listr2/prompt-adapter-inquirer to v4 See associated pull request for more information. --- packages/angular/cli/package.json | 2 +- pnpm-lock.yaml | 18 +++++++++--------- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/packages/angular/cli/package.json b/packages/angular/cli/package.json index 84ed407e6864..cdea55769a9c 100644 --- a/packages/angular/cli/package.json +++ b/packages/angular/cli/package.json @@ -26,7 +26,7 @@ "@angular-devkit/core": "workspace:0.0.0-PLACEHOLDER", "@angular-devkit/schematics": "workspace:0.0.0-PLACEHOLDER", "@inquirer/prompts": "7.10.1", - "@listr2/prompt-adapter-inquirer": "3.0.5", + "@listr2/prompt-adapter-inquirer": "4.1.1", "@modelcontextprotocol/sdk": "1.26.0", "@schematics/angular": "workspace:0.0.0-PLACEHOLDER", "@yarnpkg/lockfile": "1.1.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 9b5945cd3dd8..db1e6664cbb0 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -454,8 +454,8 @@ importers: specifier: 7.10.1 version: 7.10.1(@types/node@24.10.9) '@listr2/prompt-adapter-inquirer': - specifier: 3.0.5 - version: 3.0.5(@inquirer/prompts@7.10.1(@types/node@24.10.9))(@types/node@24.10.9)(listr2@10.1.0) + specifier: 4.1.1 + version: 4.1.1(@inquirer/prompts@7.10.1(@types/node@24.10.9))(@types/node@24.10.9)(listr2@10.1.0) '@modelcontextprotocol/sdk': specifier: 1.26.0 version: 1.26.0(zod@4.3.6) @@ -2622,12 +2622,12 @@ packages: '@leichtgewicht/ip-codec@2.0.5': resolution: {integrity: sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw==} - '@listr2/prompt-adapter-inquirer@3.0.5': - resolution: {integrity: sha512-WELs+hj6xcilkloBXYf9XXK8tYEnKsgLj01Xl5ONUJpKjmT5hGVUzNUS5tooUxs7pGMrw+jFD/41WpqW4V3LDA==} - engines: {node: '>=20.0.0'} + '@listr2/prompt-adapter-inquirer@4.1.1': + resolution: {integrity: sha512-hlUMCYxuBrtjsBqzsy9ohzs3SiosQhXQlHltAZepMdLMBsWSPubjzBbBgTWK/glNO2ZJdZp8flhx2uRYf/RFUg==} + engines: {node: '>=22.0.0'} peerDependencies: - '@inquirer/prompts': '>= 3 < 8' - listr2: 9.0.5 + '@inquirer/prompts': '>= 3 < 9' + listr2: 10.1.1 '@lmdb/lmdb-darwin-arm64@3.5.1': resolution: {integrity: sha512-tpfN4kKrrMpQ+If1l8bhmoNkECJi0iOu6AEdrTJvWVC+32sLxTARX5Rsu579mPImRP9YFWfWgeRQ5oav7zApQQ==} @@ -11442,10 +11442,10 @@ snapshots: '@leichtgewicht/ip-codec@2.0.5': {} - '@listr2/prompt-adapter-inquirer@3.0.5(@inquirer/prompts@7.10.1(@types/node@24.10.9))(@types/node@24.10.9)(listr2@10.1.0)': + '@listr2/prompt-adapter-inquirer@4.1.1(@inquirer/prompts@7.10.1(@types/node@24.10.9))(@types/node@24.10.9)(listr2@10.1.0)': dependencies: '@inquirer/prompts': 7.10.1(@types/node@24.10.9) - '@inquirer/type': 3.0.10(@types/node@24.10.9) + '@inquirer/type': 4.0.3(@types/node@24.10.9) listr2: 10.1.0 transitivePeerDependencies: - '@types/node' From 6584f5f1d8692b81e3908e61cf49b16d48cfaddf Mon Sep 17 00:00:00 2001 From: Charles Lyding <19598772+clydin@users.noreply.github.com> Date: Tue, 24 Feb 2026 16:24:27 -0500 Subject: [PATCH 027/226] refactor(@angular/build): remove Node.js v20 conditional file copying logic The Node.js v20 `fs.copyFile` fallback has been removed in favor of `fs.cp`. This simplifies the file copying logic within the application builder, as `fs.cp` is now the standard for all supported Node.js versions. The related e2e test has also been updated to run unconditionally. --- .../build/src/builders/application/index.ts | 17 ++++------------- tests/e2e/tests/build/assets.ts | 4 +--- 2 files changed, 5 insertions(+), 16 deletions(-) diff --git a/packages/angular/build/src/builders/application/index.ts b/packages/angular/build/src/builders/application/index.ts index b83e3b48f270..d4671decc145 100644 --- a/packages/angular/build/src/builders/application/index.ts +++ b/packages/angular/build/src/builders/application/index.ts @@ -28,8 +28,6 @@ import { import { Result, ResultKind } from './results'; import { Schema as ApplicationBuilderOptions } from './schema'; -const isNodeV22orHigher = Number(process.versions.node.split('.', 1)[0]) >= 22; - export type { ApplicationBuilderOptions }; export async function* buildApplicationInternal( @@ -222,17 +220,10 @@ export async function* buildApplication( await fs.writeFile(fullFilePath, file.contents); } else { // Copy file contents - if (isNodeV22orHigher) { - // Use newer `cp` API on Node.js 22+ (minimum v22 for CLI is 22.11) - await fs.cp(file.inputPath, fullFilePath, { - mode: fs.constants.COPYFILE_FICLONE, - preserveTimestamps: true, - }); - } else { - // For Node.js 20 use `copyFile` (`cp` is not stable for v20) - // TODO: Remove when Node.js 20 is no longer supported - await fs.copyFile(file.inputPath, fullFilePath, fs.constants.COPYFILE_FICLONE); - } + await fs.cp(file.inputPath, fullFilePath, { + mode: fs.constants.COPYFILE_FICLONE, + preserveTimestamps: true, + }); } }); diff --git a/tests/e2e/tests/build/assets.ts b/tests/e2e/tests/build/assets.ts index 93c89b5cad86..0d3c718b270e 100644 --- a/tests/e2e/tests/build/assets.ts +++ b/tests/e2e/tests/build/assets.ts @@ -6,8 +6,6 @@ import { updateJsonFile } from '../../utils/project'; import { expectToFail } from '../../utils/utils'; import { getGlobalVariable } from '../../utils/env'; -const isNodeV22orHigher = Number(process.versions.node.split('.', 1)[0]) >= 22; - export default async function () { // Update the atime and mtime of the original file. // Note: Node.js has different time precision, which may cause mtime-based tests to fail. @@ -28,7 +26,7 @@ export default async function () { await expectToFail(() => expectFileToExist('dist/test-project/browser/.gitkeep')); // Timestamp preservation only supported with application build system on Node.js v22+ - if (isNodeV22orHigher && getGlobalVariable('argv')['esbuild']) { + if (getGlobalVariable('argv')['esbuild']) { const [originalStats, outputStats] = await Promise.all([ stat('public/favicon.ico'), stat('dist/test-project/browser/favicon.ico'), From d5fd9b9d09c4a9f8a24d81b60baba717b52a7e3b Mon Sep 17 00:00:00 2001 From: Angular Robot Date: Tue, 24 Feb 2026 21:51:05 +0000 Subject: [PATCH 028/226] build: update bazel dependencies See associated pull request for more information. --- MODULE.bazel | 6 +++--- MODULE.bazel.lock | 21 ++++++++++++--------- 2 files changed, 15 insertions(+), 12 deletions(-) diff --git a/MODULE.bazel b/MODULE.bazel index be8e9402f057..9c2ad5096335 100644 --- a/MODULE.bazel +++ b/MODULE.bazel @@ -5,16 +5,16 @@ module( ) bazel_dep(name = "platforms", version = "1.0.0") -bazel_dep(name = "yq.bzl", version = "0.3.4") +bazel_dep(name = "yq.bzl", version = "0.3.5") bazel_dep(name = "rules_nodejs", version = "6.7.3") bazel_dep(name = "aspect_rules_js", version = "2.9.2") -bazel_dep(name = "aspect_rules_ts", version = "3.8.4") +bazel_dep(name = "aspect_rules_ts", version = "3.8.5") bazel_dep(name = "rules_pkg", version = "1.2.0") bazel_dep(name = "rules_cc", version = "0.2.17") bazel_dep(name = "aspect_bazel_lib", version = "2.22.5") bazel_dep(name = "bazel_skylib", version = "1.9.0") bazel_dep(name = "aspect_rules_esbuild", version = "0.25.0") -bazel_dep(name = "aspect_rules_jasmine", version = "2.0.2") +bazel_dep(name = "aspect_rules_jasmine", version = "2.0.3") bazel_dep(name = "rules_angular") git_override( module_name = "rules_angular", diff --git a/MODULE.bazel.lock b/MODULE.bazel.lock index f59691a77ca0..fc84172ed921 100644 --- a/MODULE.bazel.lock +++ b/MODULE.bazel.lock @@ -22,7 +22,8 @@ "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.2/MODULE.bazel": "45f054400ff242c4433f6d7f20f6123a9a72739cb7a1f44247d738db1644f46c", - "https://bcr.bazel.build/modules/aspect_rules_jasmine/2.0.2/source.json": "3ed399a5654259a822448f9cdbf21f6c738f16ccd7f89249c7507e374cbdd1e3", + "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_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", @@ -31,7 +32,8 @@ "https://bcr.bazel.build/modules/aspect_rules_ts/3.6.3/MODULE.bazel": "d09db394970f076176ce7bab5b5fa7f0d560fd4f30b8432ea5e2c2570505b130", "https://bcr.bazel.build/modules/aspect_rules_ts/3.7.0/MODULE.bazel": "5aace216caf88638950ef061245d23c36f57c8359e56e97f02a36f70bb09c50f", "https://bcr.bazel.build/modules/aspect_rules_ts/3.8.4/MODULE.bazel": "a50254ac3add6232d0f9f93103836f9afaf614315589a13abf74183982c4101d", - "https://bcr.bazel.build/modules/aspect_rules_ts/3.8.4/source.json": "f786e0763f3ea5de7ea6d4c4e38fccb48bf4d9c5eafaf95091c0e1590502510e", + "https://bcr.bazel.build/modules/aspect_rules_ts/3.8.5/MODULE.bazel": "bcf8f0b6b9375f0f74451e2f70671efae9bb366acef8fdc04675305eaf137f06", + "https://bcr.bazel.build/modules/aspect_rules_ts/3.8.5/source.json": "fa35e43f6359f654e4b70ce55efdf280d0b06c0b3ef9fc0b06ba52327a0e6311", "https://bcr.bazel.build/modules/aspect_tools_telemetry/0.2.3/MODULE.bazel": "20f53b145f40957a51077ae90b37b7ce83582a1daf9350349f0f86179e19dd0d", "https://bcr.bazel.build/modules/aspect_tools_telemetry/0.2.6/MODULE.bazel": "cafb8781ad591bc57cc765dca5fefab08cf9f65af363d162b79d49205c7f8af7", "https://bcr.bazel.build/modules/aspect_tools_telemetry/0.2.8/MODULE.bazel": "aa975a83e72bcaac62ee61ab12b788ea324a1d05c4aab28aadb202f647881679", @@ -203,7 +205,8 @@ "https://bcr.bazel.build/modules/yq.bzl/0.2.0/MODULE.bazel": "6f3a675677db8885be4d607fde14cc51829715e3a879fb016eb9bf336786ce6d", "https://bcr.bazel.build/modules/yq.bzl/0.3.2/MODULE.bazel": "0384efa70e8033d842ea73aa4b7199fa099709e236a7264345c03937166670b6", "https://bcr.bazel.build/modules/yq.bzl/0.3.4/MODULE.bazel": "d3a270662f5d766cd7229732d65a5a5bc485240c3007343dd279edfb60c9ae27", - "https://bcr.bazel.build/modules/yq.bzl/0.3.4/source.json": "786dafdc2843722da3416e4343ee1a05237227f068590779a6e8496a2064c0f9", + "https://bcr.bazel.build/modules/yq.bzl/0.3.5/MODULE.bazel": "130c603e54be717bdf84100210f06598a0d2b4b4e01888fb01b70f50f41767ec", + "https://bcr.bazel.build/modules/yq.bzl/0.3.5/source.json": "1ae7bdc03cb26aaa8bd2bceadf65e90d90f0b2d03008ba9a0564da2e21396c39", "https://bcr.bazel.build/modules/zlib/1.2.11/MODULE.bazel": "07b389abc85fdbca459b69e2ec656ae5622873af3f845e1c9d80fe179f3effa0", "https://bcr.bazel.build/modules/zlib/1.3.1.bcr.5/MODULE.bazel": "eec517b5bbe5492629466e11dae908d043364302283de25581e3eb944326c4ca", "https://bcr.bazel.build/modules/zlib/1.3.1.bcr.5/source.json": "22bc55c47af97246cfc093d0acf683a7869377de362b5d1c552c2c2e16b7a806", @@ -568,7 +571,7 @@ }, "@@aspect_rules_ts+//ts:extensions.bzl%ext": { "general": { - "bzlTransitiveDigest": "QDTi1Wl/eEY4IgbXjRhegUQfHj+bB8ZEVyiSGLZc6qo=", + "bzlTransitiveDigest": "jrh/WHprsSSVvWjNLpDRdUl48LnV4xm2+ZssEvasHxQ=", "usagesDigest": "ohKYRsVTeRZRfv+0QiN+5H2ycAbbirey745XNBkWqkk=", "recordedFileInputs": { "@@rules_browsers+//package.json": "772d873d450a539e2133635aeb5e63744cf1cec86e6b37aeecd9267a147fb0d7" @@ -635,7 +638,7 @@ "@@aspect_tools_telemetry+//:extension.bzl%telemetry": { "general": { "bzlTransitiveDigest": "cl5A2O84vDL6Tt+Qga8FCj1DUDGqn+e7ly5rZ+4xvcc=", - "usagesDigest": "PRLGsERE1Dznyx/OIAl7BPo8mzMvOklnNnZ8zdCpPTE=", + "usagesDigest": "/e/KYM5sjJPlgbDVQclkrYIlSJA/gt68f4vYfSZSvkQ=", "recordedFileInputs": {}, "recordedDirentsInputs": {}, "envVariables": {}, @@ -645,9 +648,9 @@ "attributes": { "deps": { "aspect_rules_js": "2.9.2", - "aspect_rules_ts": "3.8.4", + "aspect_rules_ts": "3.8.5", "aspect_rules_esbuild": "0.25.0", - "aspect_rules_jasmine": "2.0.2", + "aspect_rules_jasmine": "2.0.3", "aspect_tools_telemetry": "0.3.3" } } @@ -5131,8 +5134,8 @@ }, "@@yq.bzl+//yq:extensions.bzl%yq": { "general": { - "bzlTransitiveDigest": "tDqk+ntWTdxNAWPDjRY1uITgHbti2jcXR5ZdinltBs0=", - "usagesDigest": "OQwtwmKiZAvI0n0B86XlM4tmQHq4zcjFjAEiRGPhXVI=", + "bzlTransitiveDigest": "UfFMy8CWK4/dVo/tfaSAIYUiDGNAPes5eRllx9O9Q9Q=", + "usagesDigest": "OKtzWFv/1OIvlyc7JZVttov74lm6Ldv/V6oOd4SGa1U=", "recordedFileInputs": {}, "recordedDirentsInputs": {}, "envVariables": {}, From 0d7972d33a0ba71ae0c3c0ba6d6bc5e4574680c3 Mon Sep 17 00:00:00 2001 From: Alan Agius <17563226+alan-agius4@users.noreply.github.com> Date: Wed, 25 Feb 2026 08:32:56 +0000 Subject: [PATCH 029/226] build: update dependency @inquirer/prompts to v8 See associated pull request for more information. Closes #32566 as a pr takeover --- packages/angular/cli/package.json | 2 +- packages/angular/cli/src/utilities/prompt.ts | 2 +- .../schematics_cli/package.json | 2 +- pnpm-lock.yaml | 303 ++++++------------ 4 files changed, 96 insertions(+), 213 deletions(-) diff --git a/packages/angular/cli/package.json b/packages/angular/cli/package.json index cdea55769a9c..3a16fcbb444c 100644 --- a/packages/angular/cli/package.json +++ b/packages/angular/cli/package.json @@ -25,7 +25,7 @@ "@angular-devkit/architect": "workspace:0.0.0-EXPERIMENTAL-PLACEHOLDER", "@angular-devkit/core": "workspace:0.0.0-PLACEHOLDER", "@angular-devkit/schematics": "workspace:0.0.0-PLACEHOLDER", - "@inquirer/prompts": "7.10.1", + "@inquirer/prompts": "8.3.0", "@listr2/prompt-adapter-inquirer": "4.1.1", "@modelcontextprotocol/sdk": "1.26.0", "@schematics/angular": "workspace:0.0.0-PLACEHOLDER", diff --git a/packages/angular/cli/src/utilities/prompt.ts b/packages/angular/cli/src/utilities/prompt.ts index c1cd8eba0c3c..a12d83d72b4b 100644 --- a/packages/angular/cli/src/utilities/prompt.ts +++ b/packages/angular/cli/src/utilities/prompt.ts @@ -43,7 +43,7 @@ export async function askQuestion( const answer = await select({ message, choices, - default: defaultResponseIndex, + default: choices[defaultResponseIndex].value, theme: { prefix: '', }, diff --git a/packages/angular_devkit/schematics_cli/package.json b/packages/angular_devkit/schematics_cli/package.json index 0b49edc35c55..620300a20942 100644 --- a/packages/angular_devkit/schematics_cli/package.json +++ b/packages/angular_devkit/schematics_cli/package.json @@ -18,6 +18,6 @@ "dependencies": { "@angular-devkit/core": "workspace:0.0.0-PLACEHOLDER", "@angular-devkit/schematics": "workspace:0.0.0-PLACEHOLDER", - "@inquirer/prompts": "7.10.1" + "@inquirer/prompts": "8.3.0" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index db1e6664cbb0..00d3020ecd6c 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -451,11 +451,11 @@ importers: specifier: workspace:0.0.0-PLACEHOLDER version: link:../../angular_devkit/schematics '@inquirer/prompts': - specifier: 7.10.1 - version: 7.10.1(@types/node@24.10.9) + specifier: 8.3.0 + version: 8.3.0(@types/node@24.10.9) '@listr2/prompt-adapter-inquirer': specifier: 4.1.1 - version: 4.1.1(@inquirer/prompts@7.10.1(@types/node@24.10.9))(@types/node@24.10.9)(listr2@10.1.0) + version: 4.1.1(@inquirer/prompts@8.3.0(@types/node@24.10.9))(@types/node@24.10.9)(listr2@10.1.0) '@modelcontextprotocol/sdk': specifier: 1.26.0 version: 1.26.0(zod@4.3.6) @@ -816,8 +816,8 @@ importers: specifier: workspace:0.0.0-PLACEHOLDER version: link:../schematics '@inquirer/prompts': - specifier: 7.10.1 - version: 7.10.1(@types/node@24.10.9) + specifier: 8.3.0 + version: 8.3.0(@types/node@24.10.9) packages/ngtools/webpack: devDependencies: @@ -2170,23 +2170,10 @@ packages: resolution: {integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==} engines: {node: '>=18.18'} - '@inquirer/ansi@1.0.2': - resolution: {integrity: sha512-S8qNSZiYzFd0wAcyG5AXCvUHC5Sr7xpZ9wZ2py9XR88jUz8wooStVx5M6dRzczbBWjic9NP7+rY0Xi7qqK/aMQ==} - engines: {node: '>=18'} - '@inquirer/ansi@2.0.3': resolution: {integrity: sha512-g44zhR3NIKVs0zUesa4iMzExmZpLUdTLRMCStqX3GE5NT6VkPcxQGJ+uC8tDgBUC/vB1rUhUd55cOf++4NZcmw==} engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} - '@inquirer/checkbox@4.3.2': - resolution: {integrity: sha512-VXukHf0RR1doGe6Sm4F0Em7SWYLTHSsbGfJdS9Ja2bX5/D5uwVOEjr07cncLROdBvmnvCATYEWlHqYmXv2IlQA==} - engines: {node: '>=18'} - peerDependencies: - '@types/node': '>=18' - peerDependenciesMeta: - '@types/node': - optional: true - '@inquirer/checkbox@5.0.6': resolution: {integrity: sha512-qLZ1gOpsqsieB5k98GQ9bWYggvMsCXTc7HUwhEQpTsxFQYGthqR9UysCwqB7L9h47THYdXhJegnYb1IqURMjng==} engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} @@ -2196,9 +2183,9 @@ packages: '@types/node': optional: true - '@inquirer/confirm@5.1.21': - resolution: {integrity: sha512-KR8edRkIsUayMXV+o3Gv+q4jlhENF9nMYUZs9PA2HzrXeHI8M5uDag70U7RJn9yyiMZSbtF5/UexBtAVtZGSbQ==} - engines: {node: '>=18'} + '@inquirer/checkbox@5.1.0': + resolution: {integrity: sha512-/HjF1LN0a1h4/OFsbGKHNDtWICFU/dqXCdym719HFTyJo9IG7Otr+ziGWc9S0iQuohRZllh+WprSgd5UW5Fw0g==} + engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} peerDependencies: '@types/node': '>=18' peerDependenciesMeta: @@ -2214,24 +2201,6 @@ packages: '@types/node': optional: true - '@inquirer/core@10.3.2': - resolution: {integrity: sha512-43RTuEbfP8MbKzedNqBrlhhNKVwoK//vUFNW3Q3vZ88BLcrs4kYpGg+B2mm5p2K/HfygoCxuKwJJiv8PbGmE0A==} - engines: {node: '>=18'} - peerDependencies: - '@types/node': '>=18' - peerDependenciesMeta: - '@types/node': - optional: true - - '@inquirer/core@11.1.3': - resolution: {integrity: sha512-TBAGPDGvpwFSQ4nkawQzq5/X7DhElANjvKeUtcjpVnBIfuH/OEu4M+79R3+bGPtwxST4DOIGRtF933mUH2bRVw==} - engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} - peerDependencies: - '@types/node': '>=18' - peerDependenciesMeta: - '@types/node': - optional: true - '@inquirer/core@11.1.5': resolution: {integrity: sha512-QQPAX+lka8GyLcZ7u7Nb1h6q72iZ/oy0blilC3IB2nSt1Qqxp7akt94Jqhi/DzARuN3Eo9QwJRvtl4tmVe4T5A==} engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} @@ -2241,15 +2210,6 @@ packages: '@types/node': optional: true - '@inquirer/editor@4.2.23': - resolution: {integrity: sha512-aLSROkEwirotxZ1pBaP8tugXRFCxW94gwrQLxXfrZsKkfjOYC1aRvAZuhpJOb5cu4IBTJdsCigUlf2iCOu4ZDQ==} - engines: {node: '>=18'} - peerDependencies: - '@types/node': '>=18' - peerDependenciesMeta: - '@types/node': - optional: true - '@inquirer/editor@5.0.6': resolution: {integrity: sha512-dxTi/TB29NaW18u0pQl3B140695izGUMzr340a4Yhxll3oa0/iwxl6C88sX9LDUPFaaM4FDASEMnLm8XVk2VVg==} engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} @@ -2259,9 +2219,9 @@ packages: '@types/node': optional: true - '@inquirer/expand@4.0.23': - resolution: {integrity: sha512-nRzdOyFYnpeYTTR2qFwEVmIWypzdAx/sIkCMeTNTcflFOovfqUk+HcFhQQVBftAh9gmGrpFj6QcGEqrDMDOiew==} - engines: {node: '>=18'} + '@inquirer/editor@5.0.8': + resolution: {integrity: sha512-sLcpbb9B3XqUEGrj1N66KwhDhEckzZ4nI/W6SvLXyBX8Wic3LDLENlWRvkOGpCPoserabe+MxQkpiMoI8irvyA==} + engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} peerDependencies: '@types/node': '>=18' peerDependenciesMeta: @@ -2277,9 +2237,9 @@ packages: '@types/node': optional: true - '@inquirer/external-editor@1.0.3': - resolution: {integrity: sha512-RWbSrDiYmO4LbejWY7ttpxczuwQyZLBUyygsA9Nsv95hpzUWwnNTVQmAq3xuh7vNwCp07UTmE5i11XAEExx4RA==} - engines: {node: '>=18'} + '@inquirer/expand@5.0.8': + resolution: {integrity: sha512-QieW3F1prNw3j+hxO7/NKkG1pk3oz7pOB6+5Upwu3OIwADfPX0oZVppsqlL+Vl/uBHHDSOBY0BirLctLnXwGGg==} + engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} peerDependencies: '@types/node': '>=18' peerDependenciesMeta: @@ -2295,23 +2255,10 @@ packages: '@types/node': optional: true - '@inquirer/figures@1.0.15': - resolution: {integrity: sha512-t2IEY+unGHOzAaVM5Xx6DEWKeXlDDcNPeDyUpsRc6CUhBfU3VQOEl+Vssh7VNp1dR8MdUJBWhuObjXCsVpjN5g==} - engines: {node: '>=18'} - '@inquirer/figures@2.0.3': resolution: {integrity: sha512-y09iGt3JKoOCBQ3w4YrSJdokcD8ciSlMIWsD+auPu+OZpfxLuyz+gICAQ6GCBOmJJt4KEQGHuZSVff2jiNOy7g==} engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} - '@inquirer/input@4.3.1': - resolution: {integrity: sha512-kN0pAM4yPrLjJ1XJBjDxyfDduXOuQHrBB8aLDMueuwUGn+vNpF7Gq7TvyVxx8u4SHlFFj4trmj+a2cbpG4Jn1g==} - engines: {node: '>=18'} - peerDependencies: - '@types/node': '>=18' - peerDependenciesMeta: - '@types/node': - optional: true - '@inquirer/input@5.0.6': resolution: {integrity: sha512-RZsJcjMJA3QNI9q9OiAi1fAom+Pb8on6alJB1Teh5jjKaiG5C79P69cG955ZRfgPdxTmI4uyhf33+94Xj7xWig==} engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} @@ -2321,9 +2268,9 @@ packages: '@types/node': optional: true - '@inquirer/number@3.0.23': - resolution: {integrity: sha512-5Smv0OK7K0KUzUfYUXDXQc9jrf8OHo4ktlEayFlelCjwMXz0299Y8OrI+lj7i4gCBY15UObk76q0QtxjzFcFcg==} - engines: {node: '>=18'} + '@inquirer/input@5.0.8': + resolution: {integrity: sha512-p0IJslw0AmedLEkOU+yrEX3Aj2RTpQq7ZOf8nc1DIhjzaxRWrrgeuE5Kyh39fVRgtcACaMXx/9WNo8+GjgBOfw==} + engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} peerDependencies: '@types/node': '>=18' peerDependenciesMeta: @@ -2339,9 +2286,9 @@ packages: '@types/node': optional: true - '@inquirer/password@4.0.23': - resolution: {integrity: sha512-zREJHjhT5vJBMZX/IUbyI9zVtVfOLiTO66MrF/3GFZYZ7T4YILW5MSkEYHceSii/KtRk+4i3RE7E1CUXA2jHcA==} - engines: {node: '>=18'} + '@inquirer/number@4.0.8': + resolution: {integrity: sha512-uGLiQah9A0F9UIvJBX52m0CnqtLaym0WpT9V4YZrjZ+YRDKZdwwoEPz06N6w8ChE2lrnsdyhY9sL+Y690Kh9gQ==} + engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} peerDependencies: '@types/node': '>=18' peerDependenciesMeta: @@ -2357,9 +2304,9 @@ packages: '@types/node': optional: true - '@inquirer/prompts@7.10.1': - resolution: {integrity: sha512-Dx/y9bCQcXLI5ooQ5KyvA4FTgeo2jYj/7plWfV5Ak5wDPKQZgudKez2ixyfz7tKXzcJciTxqLeK7R9HItwiByg==} - engines: {node: '>=18'} + '@inquirer/password@5.0.8': + resolution: {integrity: sha512-zt1sF4lYLdvPqvmvHdmjOzuUUjuCQ897pdUCO8RbXMUDKXJTTyOQgtn23le+jwcb+MpHl3VAFvzIdxRAf6aPlA==} + engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} peerDependencies: '@types/node': '>=18' peerDependenciesMeta: @@ -2375,9 +2322,9 @@ packages: '@types/node': optional: true - '@inquirer/rawlist@4.1.11': - resolution: {integrity: sha512-+LLQB8XGr3I5LZN/GuAHo+GpDJegQwuPARLChlMICNdwW7OwV2izlCSCxN6cqpL0sMXmbKbFcItJgdQq5EBXTw==} - engines: {node: '>=18'} + '@inquirer/prompts@8.3.0': + resolution: {integrity: sha512-JAj66kjdH/F1+B7LCigjARbwstt3SNUOSzMdjpsvwJmzunK88gJeXmcm95L9nw1KynvFVuY4SzXh/3Y0lvtgSg==} + engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} peerDependencies: '@types/node': '>=18' peerDependenciesMeta: @@ -2393,9 +2340,9 @@ packages: '@types/node': optional: true - '@inquirer/search@3.2.2': - resolution: {integrity: sha512-p2bvRfENXCZdWF/U2BXvnSI9h+tuA8iNqtUKb9UWbmLYCRQxd8WkvwWvYn+3NgYaNwdUkHytJMGG4MMLucI1kA==} - engines: {node: '>=18'} + '@inquirer/rawlist@5.2.4': + resolution: {integrity: sha512-fTuJ5Cq9W286isLxwj6GGyfTjx1Zdk4qppVEPexFuA6yioCCXS4V1zfKroQqw7QdbDPN73xs2DiIAlo55+kBqg==} + engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} peerDependencies: '@types/node': '>=18' peerDependenciesMeta: @@ -2411,9 +2358,9 @@ packages: '@types/node': optional: true - '@inquirer/select@4.4.2': - resolution: {integrity: sha512-l4xMuJo55MAe+N7Qr4rX90vypFwCajSakx59qe/tMaC1aEHWLyw68wF4o0A4SLAY4E0nd+Vt+EyskeDIqu1M6w==} - engines: {node: '>=18'} + '@inquirer/search@4.1.4': + resolution: {integrity: sha512-9yPTxq7LPmYjrGn3DRuaPuPbmC6u3fiWcsE9ggfLcdgO/ICHYgxq7mEy1yJ39brVvgXhtOtvDVjDh9slJxE4LQ==} + engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} peerDependencies: '@types/node': '>=18' peerDependenciesMeta: @@ -2429,9 +2376,9 @@ packages: '@types/node': optional: true - '@inquirer/type@3.0.10': - resolution: {integrity: sha512-BvziSRxfz5Ov8ch0z/n3oijRSEcEsHnhggm4xFZe93DHcUCTlutlq9Ox4SVENAfcRD22UQq7T/atg9Wr3k09eA==} - engines: {node: '>=18'} + '@inquirer/select@5.1.0': + resolution: {integrity: sha512-OyYbKnchS1u+zRe14LpYrN8S0wH1vD0p2yKISvSsJdH2TpI87fh4eZdWnpdbrGauCRWDph3NwxRmM4Pcm/hx1Q==} + engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} peerDependencies: '@types/node': '>=18' peerDependenciesMeta: @@ -7129,10 +7076,6 @@ packages: resolution: {integrity: sha512-SYU3HBAdF4psHEL/+jXDKHO95/m5P2RvboHT2Y0WtTttvJLP4H/2WS9WlQPFvF6C8d6SpLw8vjCnQOnVIVOSJQ==} engines: {node: '>=18'} - mute-stream@2.0.0: - resolution: {integrity: sha512-WWdIxpyjEn+FhQJQQv9aQAYlHoNVdzIzUySNV1gHUPDSdZJ3yZn7pAAbQcV7B56Mvu881q9FZV+0Vx2xC44VWA==} - engines: {node: ^18.17.0 || >=20.5.0} - mute-stream@3.0.0: resolution: {integrity: sha512-dkEJPVvun4FryqBmZ5KhDo0K9iDXAwn08tMLDinNdRBNPcYEDiWYysLcc6k3mjTMlbP9KyylvRpd4wFtwrT9rw==} engines: {node: ^20.17.0 || >=22.9.0} @@ -9355,10 +9298,6 @@ packages: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} - yoctocolors-cjs@2.1.3: - resolution: {integrity: sha512-U/PBtDf35ff0D8X8D0jfdzHYEPFxAI7jJlxZXwCSez5M3190m+QobIfh+sWDWSHMCWWJN2AWamkegn6vr6YBTw==} - engines: {node: '>=18'} - yoctocolors@2.1.2: resolution: {integrity: sha512-CzhO+pFNo8ajLM2d2IW/R93ipy99LWjtwblvC1RsoSUMZgyLbYFr221TnSNT7GjGdYui6P459mw9JH/g/zW2ug==} engines: {node: '>=18'} @@ -11001,65 +10940,30 @@ snapshots: '@humanwhocodes/retry@0.4.3': {} - '@inquirer/ansi@1.0.2': {} - '@inquirer/ansi@2.0.3': {} - '@inquirer/checkbox@4.3.2(@types/node@24.10.9)': - dependencies: - '@inquirer/ansi': 1.0.2 - '@inquirer/core': 10.3.2(@types/node@24.10.9) - '@inquirer/figures': 1.0.15 - '@inquirer/type': 3.0.10(@types/node@24.10.9) - yoctocolors-cjs: 2.1.3 - optionalDependencies: - '@types/node': 24.10.9 - '@inquirer/checkbox@5.0.6(@types/node@24.10.9)': dependencies: '@inquirer/ansi': 2.0.3 - '@inquirer/core': 11.1.3(@types/node@24.10.9) + '@inquirer/core': 11.1.5(@types/node@24.10.9) '@inquirer/figures': 2.0.3 '@inquirer/type': 4.0.3(@types/node@24.10.9) optionalDependencies: '@types/node': 24.10.9 - '@inquirer/confirm@5.1.21(@types/node@24.10.9)': - dependencies: - '@inquirer/core': 10.3.2(@types/node@24.10.9) - '@inquirer/type': 3.0.10(@types/node@24.10.9) - optionalDependencies: - '@types/node': 24.10.9 - - '@inquirer/confirm@6.0.8(@types/node@24.10.9)': + '@inquirer/checkbox@5.1.0(@types/node@24.10.9)': dependencies: + '@inquirer/ansi': 2.0.3 '@inquirer/core': 11.1.5(@types/node@24.10.9) + '@inquirer/figures': 2.0.3 '@inquirer/type': 4.0.3(@types/node@24.10.9) optionalDependencies: '@types/node': 24.10.9 - '@inquirer/core@10.3.2(@types/node@24.10.9)': - dependencies: - '@inquirer/ansi': 1.0.2 - '@inquirer/figures': 1.0.15 - '@inquirer/type': 3.0.10(@types/node@24.10.9) - cli-width: 4.1.0 - mute-stream: 2.0.0 - signal-exit: 4.1.0 - wrap-ansi: 6.2.0 - yoctocolors-cjs: 2.1.3 - optionalDependencies: - '@types/node': 24.10.9 - - '@inquirer/core@11.1.3(@types/node@24.10.9)': + '@inquirer/confirm@6.0.8(@types/node@24.10.9)': dependencies: - '@inquirer/ansi': 2.0.3 - '@inquirer/figures': 2.0.3 + '@inquirer/core': 11.1.5(@types/node@24.10.9) '@inquirer/type': 4.0.3(@types/node@24.10.9) - cli-width: 4.1.0 - fast-wrap-ansi: 0.2.0 - mute-stream: 3.0.0 - signal-exit: 4.1.0 optionalDependencies: '@types/node': 24.10.9 @@ -11075,41 +10979,33 @@ snapshots: optionalDependencies: '@types/node': 24.10.9 - '@inquirer/editor@4.2.23(@types/node@24.10.9)': - dependencies: - '@inquirer/core': 10.3.2(@types/node@24.10.9) - '@inquirer/external-editor': 1.0.3(@types/node@24.10.9) - '@inquirer/type': 3.0.10(@types/node@24.10.9) - optionalDependencies: - '@types/node': 24.10.9 - '@inquirer/editor@5.0.6(@types/node@24.10.9)': dependencies: - '@inquirer/core': 11.1.3(@types/node@24.10.9) + '@inquirer/core': 11.1.5(@types/node@24.10.9) '@inquirer/external-editor': 2.0.3(@types/node@24.10.9) '@inquirer/type': 4.0.3(@types/node@24.10.9) optionalDependencies: '@types/node': 24.10.9 - '@inquirer/expand@4.0.23(@types/node@24.10.9)': + '@inquirer/editor@5.0.8(@types/node@24.10.9)': dependencies: - '@inquirer/core': 10.3.2(@types/node@24.10.9) - '@inquirer/type': 3.0.10(@types/node@24.10.9) - yoctocolors-cjs: 2.1.3 + '@inquirer/core': 11.1.5(@types/node@24.10.9) + '@inquirer/external-editor': 2.0.3(@types/node@24.10.9) + '@inquirer/type': 4.0.3(@types/node@24.10.9) optionalDependencies: '@types/node': 24.10.9 '@inquirer/expand@5.0.6(@types/node@24.10.9)': dependencies: - '@inquirer/core': 11.1.3(@types/node@24.10.9) + '@inquirer/core': 11.1.5(@types/node@24.10.9) '@inquirer/type': 4.0.3(@types/node@24.10.9) optionalDependencies: '@types/node': 24.10.9 - '@inquirer/external-editor@1.0.3(@types/node@24.10.9)': + '@inquirer/expand@5.0.8(@types/node@24.10.9)': dependencies: - chardet: 2.1.1 - iconv-lite: 0.7.2 + '@inquirer/core': 11.1.5(@types/node@24.10.9) + '@inquirer/type': 4.0.3(@types/node@24.10.9) optionalDependencies: '@types/node': 24.10.9 @@ -11120,66 +11016,49 @@ snapshots: optionalDependencies: '@types/node': 24.10.9 - '@inquirer/figures@1.0.15': {} - '@inquirer/figures@2.0.3': {} - '@inquirer/input@4.3.1(@types/node@24.10.9)': - dependencies: - '@inquirer/core': 10.3.2(@types/node@24.10.9) - '@inquirer/type': 3.0.10(@types/node@24.10.9) - optionalDependencies: - '@types/node': 24.10.9 - '@inquirer/input@5.0.6(@types/node@24.10.9)': dependencies: - '@inquirer/core': 11.1.3(@types/node@24.10.9) + '@inquirer/core': 11.1.5(@types/node@24.10.9) '@inquirer/type': 4.0.3(@types/node@24.10.9) optionalDependencies: '@types/node': 24.10.9 - '@inquirer/number@3.0.23(@types/node@24.10.9)': + '@inquirer/input@5.0.8(@types/node@24.10.9)': dependencies: - '@inquirer/core': 10.3.2(@types/node@24.10.9) - '@inquirer/type': 3.0.10(@types/node@24.10.9) + '@inquirer/core': 11.1.5(@types/node@24.10.9) + '@inquirer/type': 4.0.3(@types/node@24.10.9) optionalDependencies: '@types/node': 24.10.9 '@inquirer/number@4.0.6(@types/node@24.10.9)': dependencies: - '@inquirer/core': 11.1.3(@types/node@24.10.9) + '@inquirer/core': 11.1.5(@types/node@24.10.9) '@inquirer/type': 4.0.3(@types/node@24.10.9) optionalDependencies: '@types/node': 24.10.9 - '@inquirer/password@4.0.23(@types/node@24.10.9)': + '@inquirer/number@4.0.8(@types/node@24.10.9)': dependencies: - '@inquirer/ansi': 1.0.2 - '@inquirer/core': 10.3.2(@types/node@24.10.9) - '@inquirer/type': 3.0.10(@types/node@24.10.9) + '@inquirer/core': 11.1.5(@types/node@24.10.9) + '@inquirer/type': 4.0.3(@types/node@24.10.9) optionalDependencies: '@types/node': 24.10.9 '@inquirer/password@5.0.6(@types/node@24.10.9)': dependencies: '@inquirer/ansi': 2.0.3 - '@inquirer/core': 11.1.3(@types/node@24.10.9) + '@inquirer/core': 11.1.5(@types/node@24.10.9) '@inquirer/type': 4.0.3(@types/node@24.10.9) optionalDependencies: '@types/node': 24.10.9 - '@inquirer/prompts@7.10.1(@types/node@24.10.9)': - dependencies: - '@inquirer/checkbox': 4.3.2(@types/node@24.10.9) - '@inquirer/confirm': 5.1.21(@types/node@24.10.9) - '@inquirer/editor': 4.2.23(@types/node@24.10.9) - '@inquirer/expand': 4.0.23(@types/node@24.10.9) - '@inquirer/input': 4.3.1(@types/node@24.10.9) - '@inquirer/number': 3.0.23(@types/node@24.10.9) - '@inquirer/password': 4.0.23(@types/node@24.10.9) - '@inquirer/rawlist': 4.1.11(@types/node@24.10.9) - '@inquirer/search': 3.2.2(@types/node@24.10.9) - '@inquirer/select': 4.4.2(@types/node@24.10.9) + '@inquirer/password@5.0.8(@types/node@24.10.9)': + dependencies: + '@inquirer/ansi': 2.0.3 + '@inquirer/core': 11.1.5(@types/node@24.10.9) + '@inquirer/type': 4.0.3(@types/node@24.10.9) optionalDependencies: '@types/node': 24.10.9 @@ -11198,58 +11077,66 @@ snapshots: optionalDependencies: '@types/node': 24.10.9 - '@inquirer/rawlist@4.1.11(@types/node@24.10.9)': + '@inquirer/prompts@8.3.0(@types/node@24.10.9)': dependencies: - '@inquirer/core': 10.3.2(@types/node@24.10.9) - '@inquirer/type': 3.0.10(@types/node@24.10.9) - yoctocolors-cjs: 2.1.3 + '@inquirer/checkbox': 5.1.0(@types/node@24.10.9) + '@inquirer/confirm': 6.0.8(@types/node@24.10.9) + '@inquirer/editor': 5.0.8(@types/node@24.10.9) + '@inquirer/expand': 5.0.8(@types/node@24.10.9) + '@inquirer/input': 5.0.8(@types/node@24.10.9) + '@inquirer/number': 4.0.8(@types/node@24.10.9) + '@inquirer/password': 5.0.8(@types/node@24.10.9) + '@inquirer/rawlist': 5.2.4(@types/node@24.10.9) + '@inquirer/search': 4.1.4(@types/node@24.10.9) + '@inquirer/select': 5.1.0(@types/node@24.10.9) optionalDependencies: '@types/node': 24.10.9 '@inquirer/rawlist@5.2.2(@types/node@24.10.9)': dependencies: - '@inquirer/core': 11.1.3(@types/node@24.10.9) + '@inquirer/core': 11.1.5(@types/node@24.10.9) '@inquirer/type': 4.0.3(@types/node@24.10.9) optionalDependencies: '@types/node': 24.10.9 - '@inquirer/search@3.2.2(@types/node@24.10.9)': + '@inquirer/rawlist@5.2.4(@types/node@24.10.9)': dependencies: - '@inquirer/core': 10.3.2(@types/node@24.10.9) - '@inquirer/figures': 1.0.15 - '@inquirer/type': 3.0.10(@types/node@24.10.9) - yoctocolors-cjs: 2.1.3 + '@inquirer/core': 11.1.5(@types/node@24.10.9) + '@inquirer/type': 4.0.3(@types/node@24.10.9) optionalDependencies: '@types/node': 24.10.9 '@inquirer/search@4.1.2(@types/node@24.10.9)': dependencies: - '@inquirer/core': 11.1.3(@types/node@24.10.9) + '@inquirer/core': 11.1.5(@types/node@24.10.9) '@inquirer/figures': 2.0.3 '@inquirer/type': 4.0.3(@types/node@24.10.9) optionalDependencies: '@types/node': 24.10.9 - '@inquirer/select@4.4.2(@types/node@24.10.9)': + '@inquirer/search@4.1.4(@types/node@24.10.9)': dependencies: - '@inquirer/ansi': 1.0.2 - '@inquirer/core': 10.3.2(@types/node@24.10.9) - '@inquirer/figures': 1.0.15 - '@inquirer/type': 3.0.10(@types/node@24.10.9) - yoctocolors-cjs: 2.1.3 + '@inquirer/core': 11.1.5(@types/node@24.10.9) + '@inquirer/figures': 2.0.3 + '@inquirer/type': 4.0.3(@types/node@24.10.9) optionalDependencies: '@types/node': 24.10.9 '@inquirer/select@5.0.6(@types/node@24.10.9)': dependencies: '@inquirer/ansi': 2.0.3 - '@inquirer/core': 11.1.3(@types/node@24.10.9) + '@inquirer/core': 11.1.5(@types/node@24.10.9) '@inquirer/figures': 2.0.3 '@inquirer/type': 4.0.3(@types/node@24.10.9) optionalDependencies: '@types/node': 24.10.9 - '@inquirer/type@3.0.10(@types/node@24.10.9)': + '@inquirer/select@5.1.0(@types/node@24.10.9)': + dependencies: + '@inquirer/ansi': 2.0.3 + '@inquirer/core': 11.1.5(@types/node@24.10.9) + '@inquirer/figures': 2.0.3 + '@inquirer/type': 4.0.3(@types/node@24.10.9) optionalDependencies: '@types/node': 24.10.9 @@ -11442,9 +11329,9 @@ snapshots: '@leichtgewicht/ip-codec@2.0.5': {} - '@listr2/prompt-adapter-inquirer@4.1.1(@inquirer/prompts@7.10.1(@types/node@24.10.9))(@types/node@24.10.9)(listr2@10.1.0)': + '@listr2/prompt-adapter-inquirer@4.1.1(@inquirer/prompts@8.3.0(@types/node@24.10.9))(@types/node@24.10.9)(listr2@10.1.0)': dependencies: - '@inquirer/prompts': 7.10.1(@types/node@24.10.9) + '@inquirer/prompts': 8.3.0(@types/node@24.10.9) '@inquirer/type': 4.0.3(@types/node@24.10.9) listr2: 10.1.0 transitivePeerDependencies: @@ -16672,8 +16559,6 @@ snapshots: array-union: 3.0.1 minimatch: 9.0.5 - mute-stream@2.0.0: {} - mute-stream@3.0.0: {} nanocolors@0.2.13: {} @@ -19274,8 +19159,6 @@ snapshots: yocto-queue@0.1.0: {} - yoctocolors-cjs@2.1.3: {} - yoctocolors@2.1.2: {} zod-to-json-schema@3.25.1(zod@4.3.6): From 4ac577dc150d68ced7569c95ecb1d77d8561b961 Mon Sep 17 00:00:00 2001 From: Alan Agius <17563226+alan-agius4@users.noreply.github.com> Date: Wed, 25 Feb 2026 09:12:26 +0000 Subject: [PATCH 030/226] build: update eslint monorepo to v10 See associated pull request for more information. Closes #32456 as a pr takeover --- eslint.config.mjs | 9 +- package.json | 6 +- .../src/builders/karma/progress-reporter.ts | 4 +- .../build/src/builders/unit-test/builder.ts | 10 +- .../unit-test/runners/vitest/executor.ts | 1 + .../tools/esbuild/application-code-bundle.ts | 2 - .../src/tools/esbuild/i18n-inliner-worker.ts | 4 +- .../src/utils/normalize-asset-patterns.ts | 2 +- .../angular/build/src/utils/service-worker.ts | 10 +- .../cli/src/commands/mcp/tools/build.ts | 2 +- .../angular/cli/src/commands/mcp/tools/e2e.ts | 2 +- .../zoneless-migration.ts | 2 +- .../cli/src/commands/mcp/tools/test.ts | 2 +- .../cli/src/commands/mcp/workspace-utils.ts | 12 +- .../angular/cli/src/commands/update/cli.ts | 5 +- .../src/commands/update/schematic/index.ts | 6 +- .../angular/cli/src/utilities/completion.ts | 2 +- packages/angular/cli/src/utilities/config.ts | 5 +- .../architect/src/index_spec.ts | 2 - .../architect/src/jobs/dispatcher.ts | 9 +- .../build_angular/src/builders/karma/index.ts | 1 + .../src/tools/webpack/utils/stats.ts | 3 +- .../src/utils/normalize-asset-patterns.ts | 2 +- .../build_angular/src/utils/process-bundle.ts | 10 +- packages/angular_devkit/core/node/host.ts | 3 + .../schematics/src/tree/host-tree.ts | 2 +- .../schematics/src/tree/recorder.ts | 2 +- .../schematics/angular/app-shell/index.ts | 3 +- .../schematics/angular/application/index.ts | 2 +- .../transformers/jasmine-spy.ts | 2 +- .../angular/utility/ng-ast-utils.ts | 3 +- pnpm-lock.yaml | 262 ++++++++++-------- 32 files changed, 212 insertions(+), 180 deletions(-) diff --git a/eslint.config.mjs b/eslint.config.mjs index 192ba19f2007..89f9fa72243b 100644 --- a/eslint.config.mjs +++ b/eslint.config.mjs @@ -12,7 +12,7 @@ import js from '@eslint/js'; import stylistic from '@stylistic/eslint-plugin'; import typescriptEslint from '@typescript-eslint/eslint-plugin'; import tsParser from '@typescript-eslint/parser'; -import header from 'eslint-plugin-header'; +import header from '@tony.ganchev/eslint-plugin-header'; import _import from 'eslint-plugin-import'; import globals from 'globals'; @@ -22,9 +22,6 @@ const compat = new FlatCompat({ allConfig: js.configs.all, }); -// See: https://github.com/Stuk/eslint-plugin-header/issues/57 -header.rules.header.meta.schema = false; - export default [ { ignores: [ @@ -59,7 +56,7 @@ export default [ '@stylistic': stylistic, '@typescript-eslint': fixupPluginRules(typescriptEslint), import: fixupPluginRules(_import), - header, + '@tony.ganchev': header, }, languageOptions: { @@ -106,7 +103,7 @@ export default [ '@typescript-eslint/no-unused-expressions': 'error', curly: 'error', - 'header/header': [ + '@tony.ganchev/header': [ 'error', 'block', [ diff --git a/package.json b/package.json index 8c3982211715..953ed6940cb7 100644 --- a/package.json +++ b/package.json @@ -61,12 +61,13 @@ "@bazel/buildifier": "8.2.1", "@eslint/compat": "2.0.2", "@eslint/eslintrc": "3.3.3", - "@eslint/js": "9.39.2", + "@eslint/js": "10.0.1", "@rollup/plugin-alias": "^6.0.0", "@rollup/plugin-commonjs": "^29.0.0", "@rollup/plugin-json": "^6.1.0", "@rollup/plugin-node-resolve": "16.0.3", "@stylistic/eslint-plugin": "^5.0.0", + "@tony.ganchev/eslint-plugin-header": "~3.2.4", "@types/babel__core": "7.20.5", "@types/babel__generator": "^7.6.8", "@types/browser-sync": "^2.27.0", @@ -95,9 +96,8 @@ "buffer": "6.0.3", "esbuild": "0.27.3", "esbuild-wasm": "0.27.3", - "eslint": "9.39.2", + "eslint": "10.0.2", "eslint-config-prettier": "10.1.8", - "eslint-plugin-header": "3.1.1", "eslint-plugin-import": "2.32.0", "express": "5.2.1", "fast-glob": "3.3.3", diff --git a/packages/angular/build/src/builders/karma/progress-reporter.ts b/packages/angular/build/src/builders/karma/progress-reporter.ts index 908f1c856e6d..16824badd095 100644 --- a/packages/angular/build/src/builders/karma/progress-reporter.ts +++ b/packages/angular/build/src/builders/karma/progress-reporter.ts @@ -53,11 +53,9 @@ export function injectKarmaReporter( private startWatchingBuild() { void (async () => { // This is effectively "for await of but skip what's already consumed". - let isDone = false; // to mark the loop condition as "not constant". - while (!isDone) { + while (true) { const { done, value: buildOutput } = await buildIterator.next(); if (done) { - isDone = true; break; } diff --git a/packages/angular/build/src/builders/unit-test/builder.ts b/packages/angular/build/src/builders/unit-test/builder.ts index 6f2edd0281d7..fb9faa3b8576 100644 --- a/packages/angular/build/src/builders/unit-test/builder.ts +++ b/packages/angular/build/src/builders/unit-test/builder.ts @@ -45,11 +45,11 @@ async function loadTestRunner(runnerName: string): Promise { } catch (e) { assertIsError(e); if (e.code === 'ERR_MODULE_NOT_FOUND') { - throw new Error(`Unknown test runner "${runnerName}".`); + throw new Error(`Unknown test runner "${runnerName}".`, { cause: e }); } throw new Error( - `Failed to load the '${runnerName}' test runner. The package may be corrupted or improperly installed.\n` + - `Error: ${e.message}`, + `Failed to load the '${runnerName}' test runner. The package may be corrupted or improperly installed.`, + { cause: e }, ); } @@ -370,7 +370,9 @@ async function transformNgPackagrOptions( ngPackageJson = JSON.parse(await readFile(ngPackagePath, 'utf-8')); } catch (e) { assertIsError(e); - throw new Error(`Could not read ng-package.json at ${ngPackagePath}: ${e.message}`); + throw new Error(`Could not read ng-package.json at ${ngPackagePath}`, { + cause: e, + }); } const lib = ngPackageJson['lib'] || {}; diff --git a/packages/angular/build/src/builders/unit-test/runners/vitest/executor.ts b/packages/angular/build/src/builders/unit-test/runners/vitest/executor.ts index 503aa5da9071..5ff9ac1b443f 100644 --- a/packages/angular/build/src/builders/unit-test/runners/vitest/executor.ts +++ b/packages/angular/build/src/builders/unit-test/runners/vitest/executor.ts @@ -185,6 +185,7 @@ export class VitestExecutor implements TestExecutor { } throw new Error( 'The `vitest` package was not found. Please install the package and rerun the test command.', + { cause: error }, ); } const { startVitest } = vitestNodeModule; diff --git a/packages/angular/build/src/tools/esbuild/application-code-bundle.ts b/packages/angular/build/src/tools/esbuild/application-code-bundle.ts index 635faca8c82e..e59f139c8aeb 100644 --- a/packages/angular/build/src/tools/esbuild/application-code-bundle.ts +++ b/packages/angular/build/src/tools/esbuild/application-code-bundle.ts @@ -701,7 +701,6 @@ function getEsBuildCommonPolyfillsOptions( cache: loadResultCache, loadContent: async (_, build) => { let polyfillPaths = polyfills; - let warnings: PartialMessage[] | undefined; if (tryToResolvePolyfillsAsRelative) { polyfillPaths = await Promise.all( @@ -736,7 +735,6 @@ function getEsBuildCommonPolyfillsOptions( return { contents, loader: 'js', - warnings, resolveDir: workspaceRoot, }; }, diff --git a/packages/angular/build/src/tools/esbuild/i18n-inliner-worker.ts b/packages/angular/build/src/tools/esbuild/i18n-inliner-worker.ts index 74550e83e5de..f988a4b2f0d8 100644 --- a/packages/angular/build/src/tools/esbuild/i18n-inliner-worker.ts +++ b/packages/angular/build/src/tools/esbuild/i18n-inliner-worker.ts @@ -196,7 +196,9 @@ async function transformWithBabel( // Which makes it hard to find the actual error message. const index = error.message.indexOf(')\n'); const msg = index !== -1 ? error.message.slice(0, index + 1) : error.message; - throw new Error(`${msg}\nAn error occurred inlining file "${options.filename}"`); + throw new Error(`${msg}\nAn error occurred inlining file "${options.filename}"`, { + cause: error, + }); } if (!ast) { diff --git a/packages/angular/build/src/utils/normalize-asset-patterns.ts b/packages/angular/build/src/utils/normalize-asset-patterns.ts index 929e88fff506..b935f1d84588 100644 --- a/packages/angular/build/src/utils/normalize-asset-patterns.ts +++ b/packages/angular/build/src/utils/normalize-asset-patterns.ts @@ -45,7 +45,7 @@ export function normalizeAssetPatterns( } let glob: string, input: string; - let isDirectory = false; + let isDirectory: boolean; try { isDirectory = statSync(resolvedAssetPath).isDirectory(); diff --git a/packages/angular/build/src/utils/service-worker.ts b/packages/angular/build/src/utils/service-worker.ts index 1535684f635c..3c8b4cbe6b63 100644 --- a/packages/angular/build/src/utils/service-worker.ts +++ b/packages/angular/build/src/utils/service-worker.ts @@ -6,10 +6,9 @@ * found in the LICENSE file at https://angular.dev/license */ -import type { - Config, - Filesystem, -} from '@angular/service-worker/config' with { 'resolution-mode': 'import' }; +import type { Config, Filesystem } from '@angular/service-worker/config' with { + 'resolution-mode': 'import', +}; import * as crypto from 'node:crypto'; import { existsSync, promises as fsPromises } from 'node:fs'; import * as path from 'node:path'; @@ -149,6 +148,7 @@ export async function augmentAppWithServiceWorker( 'Error: Expected to find an ngsw-config.json configuration file' + ` in the ${appRoot} folder. Either provide one or` + ' disable Service Worker in the angular.json configuration file.', + { cause: error }, ); } else { throw error; @@ -200,7 +200,7 @@ export async function augmentAppWithServiceWorkerEsbuild( workspaceRoot, configPath, )}" could not be found.`; - throw new Error(message); + throw new Error(message, { cause: error }); } else { throw error; } diff --git a/packages/angular/cli/src/commands/mcp/tools/build.ts b/packages/angular/cli/src/commands/mcp/tools/build.ts index 5f6ce7a020a0..45d3765b3c86 100644 --- a/packages/angular/cli/src/commands/mcp/tools/build.ts +++ b/packages/angular/cli/src/commands/mcp/tools/build.ts @@ -47,7 +47,7 @@ export async function runBuild(input: BuildToolInput, context: McpToolContext) { const args = ['build', projectName, '-c', input.configuration ?? DEFAULT_CONFIGURATION]; let status: BuildStatus = 'success'; - let logs: string[] = []; + let logs: string[]; let outputPath: string | undefined; try { diff --git a/packages/angular/cli/src/commands/mcp/tools/e2e.ts b/packages/angular/cli/src/commands/mcp/tools/e2e.ts index 93ae2b55b5a6..1354e9ad19e4 100644 --- a/packages/angular/cli/src/commands/mcp/tools/e2e.ts +++ b/packages/angular/cli/src/commands/mcp/tools/e2e.ts @@ -58,7 +58,7 @@ export async function runE2e(input: E2eToolInput, host: Host, context: McpToolCo const args = ['e2e', projectName]; let status: E2eStatus = 'success'; - let logs: string[] = []; + let logs: string[]; try { logs = (await host.runCommand('ng', args, { cwd: workspacePath })).logs; diff --git a/packages/angular/cli/src/commands/mcp/tools/onpush-zoneless-migration/zoneless-migration.ts b/packages/angular/cli/src/commands/mcp/tools/onpush-zoneless-migration/zoneless-migration.ts index f85a6f322c60..065d4e28669e 100644 --- a/packages/angular/cli/src/commands/mcp/tools/onpush-zoneless-migration/zoneless-migration.ts +++ b/packages/angular/cli/src/commands/mcp/tools/onpush-zoneless-migration/zoneless-migration.ts @@ -137,7 +137,7 @@ async function discoverAndCategorizeFiles( isDirectory = statSync(fileOrDirPath).isDirectory(); } catch (e) { // Re-throw to be handled by the main function as a user input error - throw new Error(`Failed to access path: ${fileOrDirPath}`); + throw new Error(`Failed to access path: ${fileOrDirPath}`, { cause: e }); } if (isDirectory) { diff --git a/packages/angular/cli/src/commands/mcp/tools/test.ts b/packages/angular/cli/src/commands/mcp/tools/test.ts index f3a1440b01ce..2ace1496dd46 100644 --- a/packages/angular/cli/src/commands/mcp/tools/test.ts +++ b/packages/angular/cli/src/commands/mcp/tools/test.ts @@ -49,7 +49,7 @@ export async function runTest(input: TestToolInput, context: McpToolContext) { } let status: TestStatus = 'success'; - let logs: string[] = []; + let logs: string[]; try { logs = (await context.host.runCommand('ng', args, { cwd: workspacePath })).logs; diff --git a/packages/angular/cli/src/commands/mcp/workspace-utils.ts b/packages/angular/cli/src/commands/mcp/workspace-utils.ts index 87a4cdc6c1bc..d1edf55fa56b 100644 --- a/packages/angular/cli/src/commands/mcp/workspace-utils.ts +++ b/packages/angular/cli/src/commands/mcp/workspace-utils.ts @@ -123,11 +123,7 @@ export async function resolveWorkspaceAndProject({ try { workspace = await AngularWorkspace.load(configPath); } catch (e) { - throw new Error( - `Failed to load workspace configuration at ${configPath}: ${ - e instanceof Error ? e.message : e - }`, - ); + throw new Error(`Failed to load workspace configuration at ${configPath}`, { cause: e }); } } else if (mcpWorkspace) { workspace = mcpWorkspace; @@ -146,11 +142,7 @@ export async function resolveWorkspaceAndProject({ try { workspace = await AngularWorkspace.load(configPath); } catch (e) { - throw new Error( - `Failed to load workspace configuration at ${configPath}: ${ - e instanceof Error ? e.message : e - }`, - ); + throw new Error(`Failed to load workspace configuration at ${configPath}.`, { cause: e }); } } diff --git a/packages/angular/cli/src/commands/update/cli.ts b/packages/angular/cli/src/commands/update/cli.ts index 9f990845b59b..0a85f9b77ecc 100644 --- a/packages/angular/cli/src/commands/update/cli.ts +++ b/packages/angular/cli/src/commands/update/cli.ts @@ -287,14 +287,13 @@ export default class UpdateCommandModule extends CommandModule { const { logger } = this.context; - let packageDependency = rootDependencies.get(packageName); + const packageDependency = rootDependencies.get(packageName); let packagePath = packageDependency?.path; let packageNode: PackageManifest | undefined; if (!packageDependency) { const installed = await packageManager.getInstalledPackage(packageName); if (installed) { - packageDependency = installed; packagePath = installed.path; } } @@ -450,7 +449,7 @@ export default class UpdateCommandModule extends CommandModule x.padEnd(pads[i])).join(''), ); - logger.info(' ' + '-'.repeat(pads.reduce((s, x) => (s += x), 0) + 20)); + + const totalWidth = pads.reduce((sum, width) => sum + width, 20); + logger.info(` ${'-'.repeat(totalWidth)}`); packagesToUpdate.forEach((fields) => { if (!fields) { @@ -681,7 +683,7 @@ function _addPackageGroup( if (!packageGroup) { return; } - let packageGroupNormalized: Record = {}; + let packageGroupNormalized: Record; if (Array.isArray(packageGroup) && !packageGroup.some((x) => typeof x != 'string')) { packageGroupNormalized = packageGroup.reduce( (acc, curr) => { diff --git a/packages/angular/cli/src/utilities/completion.ts b/packages/angular/cli/src/utilities/completion.ts index 436680902395..0e23e1f03348 100644 --- a/packages/angular/cli/src/utilities/completion.ts +++ b/packages/angular/cli/src/utilities/completion.ts @@ -244,7 +244,7 @@ export async function initializeAutocomplete(): Promise { ); } catch (err) { assertIsError(err); - throw new Error(`Failed to append autocompletion setup to \`${rcFile}\`:\n${err.message}`); + throw new Error(`Failed to append autocompletion setup to \`${rcFile}\`.`, { cause: err }); } return rcFile; diff --git a/packages/angular/cli/src/utilities/config.ts b/packages/angular/cli/src/utilities/config.ts index dfe21fa96692..7b9188bb3d89 100644 --- a/packages/angular/cli/src/utilities/config.ts +++ b/packages/angular/cli/src/utilities/config.ts @@ -207,10 +207,7 @@ export async function getWorkspace( return workspace; } catch (error) { - throw new Error( - `Workspace config file cannot be loaded: ${configPath}` + - `\n${error instanceof Error ? error.message : error}`, - ); + throw new Error(`Workspace config file cannot be loaded: ${configPath}`, { cause: error }); } } diff --git a/packages/angular_devkit/architect/src/index_spec.ts b/packages/angular_devkit/architect/src/index_spec.ts index 50d599b30dac..e5de7d1b3018 100644 --- a/packages/angular_devkit/architect/src/index_spec.ts +++ b/packages/angular_devkit/architect/src/index_spec.ts @@ -331,7 +331,6 @@ describe('architect', () => { // Use an invalid target and check for error. target.target = 'invalid'; - options = {}; // This should not error. const run2 = await architect.scheduleBuilder('package:getTargetOptions', {}); @@ -375,7 +374,6 @@ describe('architect', () => { // Use an invalid target and check for error. target.target = 'invalid'; - actualBuilderName = ''; // This should not error. const run2 = await architect.scheduleBuilder('package:do-it', {}); diff --git a/packages/angular_devkit/architect/src/jobs/dispatcher.ts b/packages/angular_devkit/architect/src/jobs/dispatcher.ts index 1ffea649e83f..0098a99279a8 100644 --- a/packages/angular_devkit/architect/src/jobs/dispatcher.ts +++ b/packages/angular_devkit/architect/src/jobs/dispatcher.ts @@ -14,8 +14,11 @@ import { Readwrite } from './types'; /** * A JobDispatcher can be used to dispatch between multiple jobs. */ -export interface JobDispatcher - extends JobHandler { +export interface JobDispatcher< + A extends JsonValue, + I extends JsonValue, + O extends JsonValue, +> extends JobHandler { /** * Set the default job if all conditionals failed. * @param name The default name if all conditions are false. @@ -43,7 +46,7 @@ export function createDispatcher = Object.assign( (argument: JsonValue, context: JobHandlerContext) => { const maybeDelegate = conditionalDelegateList.find(([predicate]) => predicate(argument)); - let delegate: Job | null = null; + let delegate: Job; if (maybeDelegate) { delegate = context.scheduler.schedule(maybeDelegate[1], argument); diff --git a/packages/angular_devkit/build_angular/src/builders/karma/index.ts b/packages/angular_devkit/build_angular/src/builders/karma/index.ts index ff54a8292ff2..1ea20e0f5db4 100644 --- a/packages/angular_devkit/build_angular/src/builders/karma/index.ts +++ b/packages/angular_devkit/build_angular/src/builders/karma/index.ts @@ -198,6 +198,7 @@ async function checkForEsbuild( // If we can't find a development builder, we can't use 'detect'. throw new Error( 'Failed to detect the builder used by the application. Please set builderMode explicitly.', + { cause: e }, ); } } diff --git a/packages/angular_devkit/build_angular/src/tools/webpack/utils/stats.ts b/packages/angular_devkit/build_angular/src/tools/webpack/utils/stats.ts index 1ed442a43d3e..a5c5b5c9b4f6 100644 --- a/packages/angular_devkit/build_angular/src/tools/webpack/utils/stats.ts +++ b/packages/angular_devkit/build_angular/src/tools/webpack/utils/stats.ts @@ -75,7 +75,6 @@ function statsToString( const w = (x: string) => (colors ? ansiColors.bold.white(x) : x); const changedChunksStats: BundleStats[] = []; - let unchangedChunkNumber = 0; let hasEstimatedTransferSizes = false; const isFirstRun = !runsCache.has(json.outputPath || ''); @@ -109,7 +108,7 @@ function statsToString( } changedChunksStats.push(generateBundleStats({ ...chunk, rawSize, estimatedTransferSize })); } - unchangedChunkNumber = json.chunks.length - changedChunksStats.length; + const unchangedChunkNumber = json.chunks.length - changedChunksStats.length; runsCache.add(json.outputPath || ''); diff --git a/packages/angular_devkit/build_angular/src/utils/normalize-asset-patterns.ts b/packages/angular_devkit/build_angular/src/utils/normalize-asset-patterns.ts index ef421d81042c..7f18080e05f5 100644 --- a/packages/angular_devkit/build_angular/src/utils/normalize-asset-patterns.ts +++ b/packages/angular_devkit/build_angular/src/utils/normalize-asset-patterns.ts @@ -43,7 +43,7 @@ export function normalizeAssetPatterns( } let glob: string, input: string; - let isDirectory = false; + let isDirectory: boolean; try { isDirectory = statSync(resolvedAssetPath).isDirectory(); diff --git a/packages/angular_devkit/build_angular/src/utils/process-bundle.ts b/packages/angular_devkit/build_angular/src/utils/process-bundle.ts index c8ec99eef15e..c3828cf804fb 100644 --- a/packages/angular_devkit/build_angular/src/utils/process-bundle.ts +++ b/packages/angular_devkit/build_angular/src/utils/process-bundle.ts @@ -55,11 +55,9 @@ let localizeToolsModule: LocalizeUtilityModule | undefined; * This module must be dynamically loaded as it is an ESM module and this file is CommonJS. */ async function loadLocalizeTools(): Promise { - if (localizeToolsModule !== undefined) { - return localizeToolsModule; - } + localizeToolsModule ??= await import('@angular/localize/tools'); - return import('@angular/localize/tools'); + return localizeToolsModule; } async function createI18nPlugins( @@ -138,7 +136,9 @@ export async function inlineLocales(options: InlineOptions) { // Which makes it hard to find the actual error message. const index = error.message.indexOf(')\n'); const msg = index !== -1 ? error.message.slice(0, index + 1) : error.message; - throw new Error(`${msg}\nAn error occurred inlining file "${options.filename}"`); + throw new Error(`${msg}\nAn error occurred inlining file "${options.filename}"`, { + cause: error, + }); } if (!ast) { diff --git a/packages/angular_devkit/core/node/host.ts b/packages/angular_devkit/core/node/host.ts index 422a95af2b01..107ce003c7f0 100644 --- a/packages/angular_devkit/core/node/host.ts +++ b/packages/angular_devkit/core/node/host.ts @@ -47,6 +47,9 @@ function loadFSWatcher() { throw new Error( 'As of angular-devkit version 8.0, the "chokidar" package ' + 'must be installed in order to use watch() features.', + { + cause: e, + }, ); } throw e; diff --git a/packages/angular_devkit/schematics/src/tree/host-tree.ts b/packages/angular_devkit/schematics/src/tree/host-tree.ts index 9e275052391f..8f9d793a31a9 100644 --- a/packages/angular_devkit/schematics/src/tree/host-tree.ts +++ b/packages/angular_devkit/schematics/src/tree/host-tree.ts @@ -313,7 +313,7 @@ export class HostTree implements Tree { e instanceof TypeError || (e as NodeJS.ErrnoException).code === 'ERR_ENCODING_INVALID_ENCODED_DATA' ) { - throw new Error(`Failed to decode "${path}" as UTF-8 text.`); + throw new Error(`Failed to decode "${path}" as UTF-8 text.`, { cause: e }); } throw e; } diff --git a/packages/angular_devkit/schematics/src/tree/recorder.ts b/packages/angular_devkit/schematics/src/tree/recorder.ts index d7853b5d136f..7ed047c9aa11 100644 --- a/packages/angular_devkit/schematics/src/tree/recorder.ts +++ b/packages/angular_devkit/schematics/src/tree/recorder.ts @@ -32,7 +32,7 @@ export class UpdateRecorderBase implements UpdateRecorder { text = new TextDecoder(encoding, { fatal: true, ignoreBOM: false }).decode(data); } catch (e) { if (e instanceof TypeError) { - throw new Error(`Failed to decode "${path}" as ${encoding} text.`); + throw new Error(`Failed to decode "${path}" as ${encoding} text.`, { cause: e }); } throw e; diff --git a/packages/schematics/angular/app-shell/index.ts b/packages/schematics/angular/app-shell/index.ts index 2bae5e4bef14..c9b30cdcc8b6 100644 --- a/packages/schematics/angular/app-shell/index.ts +++ b/packages/schematics/angular/app-shell/index.ts @@ -168,7 +168,6 @@ function addServerRoutingConfig(options: AppShellOptions, isStandalone: boolean) throw new SchematicsException(`Cannot find "${configFilePath}".`); } - let recorder = host.beginUpdate(configFilePath); const configSourceFile = getSourceFile(host, configFilePath); const functionCall = findNodes( configSourceFile, @@ -185,7 +184,7 @@ function addServerRoutingConfig(options: AppShellOptions, isStandalone: boolean) ); } - recorder = host.beginUpdate(configFilePath); + const recorder = host.beginUpdate(configFilePath); recorder.insertLeft(functionCall.end - 1, `, withAppShell(AppShell)`); applyToUpdateRecorder(recorder, [ diff --git a/packages/schematics/angular/application/index.ts b/packages/schematics/angular/application/index.ts index e84a40530032..d66d4fc89ce0 100644 --- a/packages/schematics/angular/application/index.ts +++ b/packages/schematics/angular/application/index.ts @@ -261,7 +261,7 @@ function addAppToWorkspaceFile(options: ApplicationOptions, appDir: string): Rul } const sourceRoot = join(normalize(projectRoot), 'src'); - let budgets: { type: string; maximumWarning: string; maximumError: string }[] = []; + let budgets: { type: string; maximumWarning: string; maximumError: string }[]; if (options.strict) { budgets = [ { diff --git a/packages/schematics/angular/refactor/jasmine-vitest/transformers/jasmine-spy.ts b/packages/schematics/angular/refactor/jasmine-vitest/transformers/jasmine-spy.ts index f019dbb53099..1139aedc8aed 100644 --- a/packages/schematics/angular/refactor/jasmine-vitest/transformers/jasmine-spy.ts +++ b/packages/schematics/angular/refactor/jasmine-vitest/transformers/jasmine-spy.ts @@ -232,7 +232,7 @@ export function transformCreateSpyObj( const baseName = hasBaseName ? firstArg.text : undefined; const methods = hasBaseName ? node.arguments[1] : firstArg; const propertiesArg = hasBaseName ? node.arguments[2] : node.arguments[1]; - let properties: ts.PropertyAssignment[] = []; + let properties: ts.PropertyAssignment[]; if (node.arguments.length < 2 && hasBaseName) { const category = 'createSpyObj-single-argument'; diff --git a/packages/schematics/angular/utility/ng-ast-utils.ts b/packages/schematics/angular/utility/ng-ast-utils.ts index 05a9f45c87ca..a78738e9623b 100644 --- a/packages/schematics/angular/utility/ng-ast-utils.ts +++ b/packages/schematics/angular/utility/ng-ast-utils.ts @@ -21,8 +21,7 @@ export function findBootstrapModuleCall(host: Tree, mainPath: string): ts.CallEx let bootstrapCall: ts.CallExpression | null = null; for (const node of allNodes) { - let bootstrapCallNode: ts.Node | null = null; - bootstrapCallNode = findNode(node, ts.SyntaxKind.Identifier, 'bootstrapModule'); + let bootstrapCallNode = findNode(node, ts.SyntaxKind.Identifier, 'bootstrapModule'); // Walk up the parent until CallExpression is found. while ( diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 00d3020ecd6c..f522a55923c9 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -72,13 +72,13 @@ importers: version: 8.2.1 '@eslint/compat': specifier: 2.0.2 - version: 2.0.2(eslint@9.39.2(jiti@2.6.1)) + version: 2.0.2(eslint@10.0.2(jiti@2.6.1)) '@eslint/eslintrc': specifier: 3.3.3 version: 3.3.3 '@eslint/js': - specifier: 9.39.2 - version: 9.39.2 + specifier: 10.0.1 + version: 10.0.1(eslint@10.0.2(jiti@2.6.1)) '@rollup/plugin-alias': specifier: ^6.0.0 version: 6.0.0(rollup@4.57.1) @@ -93,7 +93,10 @@ importers: version: 16.0.3(rollup@4.57.1) '@stylistic/eslint-plugin': specifier: ^5.0.0 - version: 5.8.0(eslint@9.39.2(jiti@2.6.1)) + version: 5.8.0(eslint@10.0.2(jiti@2.6.1)) + '@tony.ganchev/eslint-plugin-header': + specifier: ~3.2.4 + version: 3.2.4(eslint@10.0.2(jiti@2.6.1)) '@types/babel__core': specifier: 7.20.5 version: 7.20.5 @@ -162,10 +165,10 @@ importers: version: 1.1.9 '@typescript-eslint/eslint-plugin': specifier: 8.56.0 - version: 8.56.0(@typescript-eslint/parser@8.56.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) + version: 8.56.0(@typescript-eslint/parser@8.56.0(eslint@10.0.2(jiti@2.6.1))(typescript@5.9.3))(eslint@10.0.2(jiti@2.6.1))(typescript@5.9.3) '@typescript-eslint/parser': specifier: 8.56.0 - version: 8.56.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) + version: 8.56.0(eslint@10.0.2(jiti@2.6.1))(typescript@5.9.3) ajv: specifier: 8.18.0 version: 8.18.0 @@ -179,17 +182,14 @@ importers: specifier: 0.27.3 version: 0.27.3 eslint: - specifier: 9.39.2 - version: 9.39.2(jiti@2.6.1) + specifier: 10.0.2 + version: 10.0.2(jiti@2.6.1) eslint-config-prettier: specifier: 10.1.8 - version: 10.1.8(eslint@9.39.2(jiti@2.6.1)) - eslint-plugin-header: - specifier: 3.1.1 - version: 3.1.1(eslint@9.39.2(jiti@2.6.1)) + version: 10.1.8(eslint@10.0.2(jiti@2.6.1)) eslint-plugin-import: specifier: 2.32.0 - version: 2.32.0(@typescript-eslint/parser@8.56.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1)) + version: 2.32.0(@typescript-eslint/parser@8.56.0(eslint@10.0.2(jiti@2.6.1))(typescript@5.9.3))(eslint@10.0.2(jiti@2.6.1)) express: specifier: 5.2.1 version: 5.2.1 @@ -1833,17 +1833,13 @@ packages: eslint: optional: true - '@eslint/config-array@0.21.1': - resolution: {integrity: sha512-aw1gNayWpdI/jSYVgzN5pL0cfzU02GT3NBpeT/DXbx1/1x7ZKxFPd9bwrzygx/qiwIQiJ1sw/zD8qY/kRvlGHA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@eslint/config-helpers@0.4.2': - resolution: {integrity: sha512-gBrxN88gOIf3R7ja5K9slwNayVcZgK6SOUORm2uBzTeIEfeVaIhOpCtTox3P6R7o2jLFwLFTLnC7kU/RGcYEgw==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@eslint/config-array@0.23.2': + resolution: {integrity: sha512-YF+fE6LV4v5MGWRGj7G404/OZzGNepVF8fxk7jqmqo3lrza7a0uUcDnROGRBG1WFC1omYUS/Wp1f42i0M+3Q3A==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} - '@eslint/core@0.17.0': - resolution: {integrity: sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@eslint/config-helpers@0.5.2': + resolution: {integrity: sha512-a5MxrdDXEvqnIq+LisyCX6tQMPF/dSJpCfBgBauY+pNZ28yCtSsTvyTYrMhaI+LK26bVyCJfJkT0u8KIj2i1dQ==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} '@eslint/core@1.1.0': resolution: {integrity: sha512-/nr9K9wkr3P1EzFTdFdMoLuo1PmIxjmwvPozwoSodjNBdefGujXQUF93u1DDZpEaTuDvMsIQddsd35BwtrW9Xw==} @@ -1853,17 +1849,22 @@ packages: resolution: {integrity: sha512-Kr+LPIUVKz2qkx1HAMH8q1q6azbqBAsXJUxBl/ODDuVPX45Z9DfwB8tPjTi6nNZ8BuM3nbJxC5zCAg5elnBUTQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/js@9.39.2': - resolution: {integrity: sha512-q1mjIoW1VX4IvSocvM/vbTiveKC4k9eLrajNEuSsmjymSDEbpGddtpfOoN7YGAqBK3NG+uqo8ia4PDTt8buCYA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@eslint/js@10.0.1': + resolution: {integrity: sha512-zeR9k5pd4gxjZ0abRoIaxdc7I3nDktoXZk2qOv9gCNWx3mVwEn32VRhyLaRsDiJjTs0xq/T8mfPtyuXu7GWBcA==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} + peerDependencies: + eslint: ^10.0.0 + peerDependenciesMeta: + eslint: + optional: true - '@eslint/object-schema@2.1.7': - resolution: {integrity: sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@eslint/object-schema@3.0.2': + resolution: {integrity: sha512-HOy56KJt48Bx8KmJ+XGQNSUMT/6dZee/M54XyUyuvTvPXJmsERRvBchsUVx1UMe1WwIH49XLAczNC7V2INsuUw==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} - '@eslint/plugin-kit@0.4.1': - resolution: {integrity: sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@eslint/plugin-kit@0.6.0': + resolution: {integrity: sha512-bIZEUzOI1jkhviX2cp5vNyXQc6olzb2ohewQubuYlMXZ2Q/XjBO0x0XhGPvc9fjSIiUN0vw+0hq53BJ4eQSJKQ==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} '@exodus/bytes@1.14.1': resolution: {integrity: sha512-OhkBFWI6GcRMUroChZiopRiSp2iAMvEBK47NhJooDqz1RERO4QuZIZnjP63TXX8GAiLABkYmX+fuQsdJ1dd2QQ==} @@ -3456,6 +3457,11 @@ packages: resolution: {integrity: sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==} engines: {node: '>=10'} + '@tony.ganchev/eslint-plugin-header@3.2.4': + resolution: {integrity: sha512-zqMKTW/KQmqKGINkhwEPoJFcJ0ewUkUAmvzHLB5N+n/6bsk7D/xkQ50VhUakG2P4JHHtqsncaXrPxgSeuBPmOw==} + peerDependencies: + eslint: '>=7.7.0' + '@tootallnate/once@2.0.0': resolution: {integrity: sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==} engines: {node: '>= 10'} @@ -3564,6 +3570,9 @@ packages: '@types/eslint@9.6.1': resolution: {integrity: sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==} + '@types/esrecurse@4.3.1': + resolution: {integrity: sha512-xJBAbDifo5hpffDBuHl0Y8ywswbiAp/Wi7Y/GtAgSlZyIABppyurxVueOPE8LUQOxdlgi6Zqce7uoEpqNTeiUw==} + '@types/estree@1.0.8': resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} @@ -4099,6 +4108,11 @@ packages: engines: {node: '>=0.4.0'} hasBin: true + acorn@8.16.0: + resolution: {integrity: sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==} + engines: {node: '>=0.4.0'} + hasBin: true + adjust-sourcemap-loader@4.0.0: resolution: {integrity: sha512-OXwN5b9pCUXNQHJpwwD2qP40byEmSgzj8B4ydSN0uMNYWiFmJ6x6KwUllMmfk8Rwu/HJDFR7U8ubsWBoN0Xp0A==} engines: {node: '>=8.9'} @@ -4138,6 +4152,9 @@ packages: ajv@6.12.6: resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} + ajv@6.14.0: + resolution: {integrity: sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw==} + ajv@8.17.1: resolution: {integrity: sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==} @@ -5376,11 +5393,6 @@ packages: eslint-import-resolver-webpack: optional: true - eslint-plugin-header@3.1.1: - resolution: {integrity: sha512-9vlKxuJ4qf793CmeeSrZUvVClw6amtpghq3CuWcB5cUNnWHQhgcqy5eF8oVKFk1G3Y/CbchGfEaw3wiIJaNmVg==} - peerDependencies: - eslint: '>=7.7.0' - eslint-plugin-import@2.32.0: resolution: {integrity: sha512-whOE1HFo/qJDyX4SnXzP4N6zOWn79WhnCUY/iDR0mPfQZO8wcYE4JClzI2oZrhBnnMUCBCHZhO6VQyoBU95mZA==} engines: {node: '>=4'} @@ -5395,9 +5407,9 @@ packages: resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} engines: {node: '>=8.0.0'} - eslint-scope@8.4.0: - resolution: {integrity: sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + eslint-scope@9.1.1: + resolution: {integrity: sha512-GaUN0sWim5qc8KVErfPBWmc31LEsOkrUJbvJZV+xuL3u2phMUK4HIvXlWAakfC8W4nzlK+chPEAkYOYb5ZScIw==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} eslint-visitor-keys@3.4.3: resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} @@ -5411,9 +5423,13 @@ packages: resolution: {integrity: sha512-A0XeIi7CXU7nPlfHS9loMYEKxUaONu/hTEzHTGba9Huu94Cq1hPivf+DE5erJozZOky0LfvXAyrV/tcswpLI0Q==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} - eslint@9.39.2: - resolution: {integrity: sha512-LEyamqS7W5HB3ujJyvi0HQK/dtVINZvd5mAAp9eT5S/ujByGjiZLCzPcHVzuXbpJDJF/cxwHlfceVUDZ2lnSTw==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + eslint-visitor-keys@5.0.1: + resolution: {integrity: sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} + + eslint@10.0.2: + resolution: {integrity: sha512-uYixubwmqJZH+KLVYIVKY1JQt7tysXhtj21WSvjcSmU5SVNzMus1bgLe+pAt816yQ8opKfheVVoPLqvVMGejYw==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} hasBin: true peerDependencies: jiti: '*' @@ -5425,6 +5441,10 @@ packages: resolution: {integrity: sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + espree@11.1.1: + resolution: {integrity: sha512-AVHPqQoZYc+RUM4/3Ly5udlZY/U4LS8pIG05jEjWM2lQMU/oaZ7qshzAl2YP1tfNmXfftH3ohurfwNAug+MnsQ==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} + esprima@4.0.1: resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} engines: {node: '>=4'} @@ -6786,9 +6806,6 @@ packages: lodash.isstring@4.0.1: resolution: {integrity: sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==} - lodash.merge@4.6.2: - resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} - lodash.once@4.1.1: resolution: {integrity: sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==} @@ -6980,6 +6997,10 @@ packages: resolution: {integrity: sha512-ugkC31VaVg9cF0DFVoADH12k6061zNZkZON+aX8AWsR9GhPcErkcMBceb6znR8wLERM2AkkOxy2nWRLpT9Jq5w==} engines: {node: 20 || >=22} + minimatch@10.2.2: + resolution: {integrity: sha512-+G4CpNBxa5MprY+04MbgOw1v7So6n5JY166pFi9KfYwT78fxScCeSNQSNzp6dpPSW2rONOps6Ocam1wFhCgoVw==} + engines: {node: 18 || 20 || >=22} + minimatch@3.1.2: resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} @@ -10447,34 +10468,30 @@ snapshots: '@esbuild/win32-x64@0.27.3': optional: true - '@eslint-community/eslint-utils@4.9.1(eslint@9.39.2(jiti@2.6.1))': + '@eslint-community/eslint-utils@4.9.1(eslint@10.0.2(jiti@2.6.1))': dependencies: - eslint: 9.39.2(jiti@2.6.1) + eslint: 10.0.2(jiti@2.6.1) eslint-visitor-keys: 3.4.3 '@eslint-community/regexpp@4.12.2': {} - '@eslint/compat@2.0.2(eslint@9.39.2(jiti@2.6.1))': + '@eslint/compat@2.0.2(eslint@10.0.2(jiti@2.6.1))': dependencies: '@eslint/core': 1.1.0 optionalDependencies: - eslint: 9.39.2(jiti@2.6.1) + eslint: 10.0.2(jiti@2.6.1) - '@eslint/config-array@0.21.1': + '@eslint/config-array@0.23.2': dependencies: - '@eslint/object-schema': 2.1.7 + '@eslint/object-schema': 3.0.2 debug: 4.4.3(supports-color@10.2.2) - minimatch: 3.1.2 + minimatch: 10.2.2 transitivePeerDependencies: - supports-color - '@eslint/config-helpers@0.4.2': + '@eslint/config-helpers@0.5.2': dependencies: - '@eslint/core': 0.17.0 - - '@eslint/core@0.17.0': - dependencies: - '@types/json-schema': 7.0.15 + '@eslint/core': 1.1.0 '@eslint/core@1.1.0': dependencies: @@ -10494,13 +10511,15 @@ snapshots: transitivePeerDependencies: - supports-color - '@eslint/js@9.39.2': {} + '@eslint/js@10.0.1(eslint@10.0.2(jiti@2.6.1))': + optionalDependencies: + eslint: 10.0.2(jiti@2.6.1) - '@eslint/object-schema@2.1.7': {} + '@eslint/object-schema@3.0.2': {} - '@eslint/plugin-kit@0.4.1': + '@eslint/plugin-kit@0.6.0': dependencies: - '@eslint/core': 0.17.0 + '@eslint/core': 1.1.0 levn: 0.4.1 '@exodus/bytes@1.14.1': {} @@ -12129,11 +12148,11 @@ snapshots: '@standard-schema/spec@1.1.0': {} - '@stylistic/eslint-plugin@5.8.0(eslint@9.39.2(jiti@2.6.1))': + '@stylistic/eslint-plugin@5.8.0(eslint@10.0.2(jiti@2.6.1))': dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.2(jiti@2.6.1)) + '@eslint-community/eslint-utils': 4.9.1(eslint@10.0.2(jiti@2.6.1)) '@typescript-eslint/types': 8.55.0 - eslint: 9.39.2(jiti@2.6.1) + eslint: 10.0.2(jiti@2.6.1) eslint-visitor-keys: 4.2.1 espree: 10.4.0 estraverse: 5.3.0 @@ -12143,6 +12162,10 @@ snapshots: dependencies: defer-to-connect: 2.0.1 + '@tony.ganchev/eslint-plugin-header@3.2.4(eslint@10.0.2(jiti@2.6.1))': + dependencies: + eslint: 10.0.2(jiti@2.6.1) + '@tootallnate/once@2.0.0': {} '@tootallnate/quickjs-emscripten@0.23.0': {} @@ -12272,6 +12295,8 @@ snapshots: '@types/estree': 1.0.8 '@types/json-schema': 7.0.15 + '@types/esrecurse@4.3.1': {} + '@types/estree@1.0.8': {} '@types/events@3.0.3': {} @@ -12522,15 +12547,15 @@ snapshots: '@types/node': 22.19.11 optional: true - '@typescript-eslint/eslint-plugin@8.56.0(@typescript-eslint/parser@8.56.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)': + '@typescript-eslint/eslint-plugin@8.56.0(@typescript-eslint/parser@8.56.0(eslint@10.0.2(jiti@2.6.1))(typescript@5.9.3))(eslint@10.0.2(jiti@2.6.1))(typescript@5.9.3)': dependencies: '@eslint-community/regexpp': 4.12.2 - '@typescript-eslint/parser': 8.56.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/parser': 8.56.0(eslint@10.0.2(jiti@2.6.1))(typescript@5.9.3) '@typescript-eslint/scope-manager': 8.56.0 - '@typescript-eslint/type-utils': 8.56.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/utils': 8.56.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/type-utils': 8.56.0(eslint@10.0.2(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/utils': 8.56.0(eslint@10.0.2(jiti@2.6.1))(typescript@5.9.3) '@typescript-eslint/visitor-keys': 8.56.0 - eslint: 9.39.2(jiti@2.6.1) + eslint: 10.0.2(jiti@2.6.1) ignore: 7.0.5 natural-compare: 1.4.0 ts-api-utils: 2.4.0(typescript@5.9.3) @@ -12538,14 +12563,14 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.56.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)': + '@typescript-eslint/parser@8.56.0(eslint@10.0.2(jiti@2.6.1))(typescript@5.9.3)': dependencies: '@typescript-eslint/scope-manager': 8.56.0 '@typescript-eslint/types': 8.56.0 '@typescript-eslint/typescript-estree': 8.56.0(typescript@5.9.3) '@typescript-eslint/visitor-keys': 8.56.0 debug: 4.4.3(supports-color@10.2.2) - eslint: 9.39.2(jiti@2.6.1) + eslint: 10.0.2(jiti@2.6.1) typescript: 5.9.3 transitivePeerDependencies: - supports-color @@ -12568,13 +12593,13 @@ snapshots: dependencies: typescript: 5.9.3 - '@typescript-eslint/type-utils@8.56.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)': + '@typescript-eslint/type-utils@8.56.0(eslint@10.0.2(jiti@2.6.1))(typescript@5.9.3)': dependencies: '@typescript-eslint/types': 8.56.0 '@typescript-eslint/typescript-estree': 8.56.0(typescript@5.9.3) - '@typescript-eslint/utils': 8.56.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/utils': 8.56.0(eslint@10.0.2(jiti@2.6.1))(typescript@5.9.3) debug: 4.4.3(supports-color@10.2.2) - eslint: 9.39.2(jiti@2.6.1) + eslint: 10.0.2(jiti@2.6.1) ts-api-utils: 2.4.0(typescript@5.9.3) typescript: 5.9.3 transitivePeerDependencies: @@ -12599,13 +12624,13 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.56.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)': + '@typescript-eslint/utils@8.56.0(eslint@10.0.2(jiti@2.6.1))(typescript@5.9.3)': dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.2(jiti@2.6.1)) + '@eslint-community/eslint-utils': 4.9.1(eslint@10.0.2(jiti@2.6.1)) '@typescript-eslint/scope-manager': 8.56.0 '@typescript-eslint/types': 8.56.0 '@typescript-eslint/typescript-estree': 8.56.0(typescript@5.9.3) - eslint: 9.39.2(jiti@2.6.1) + eslint: 10.0.2(jiti@2.6.1) typescript: 5.9.3 transitivePeerDependencies: - supports-color @@ -13114,12 +13139,18 @@ snapshots: dependencies: acorn: 8.15.0 + acorn-jsx@5.3.2(acorn@8.16.0): + dependencies: + acorn: 8.16.0 + acorn-walk@8.3.4: dependencies: acorn: 8.15.0 acorn@8.15.0: {} + acorn@8.16.0: {} + adjust-sourcemap-loader@4.0.0: dependencies: loader-utils: 2.0.4 @@ -13159,6 +13190,13 @@ snapshots: json-schema-traverse: 0.4.1 uri-js: 4.4.1 + ajv@6.14.0: + dependencies: + fast-deep-equal: 3.1.3 + fast-json-stable-stringify: 2.1.0 + json-schema-traverse: 0.4.1 + uri-js: 4.4.1 + ajv@8.17.1: dependencies: fast-deep-equal: 3.1.3 @@ -14530,9 +14568,9 @@ snapshots: optionalDependencies: source-map: 0.6.1 - eslint-config-prettier@10.1.8(eslint@9.39.2(jiti@2.6.1)): + eslint-config-prettier@10.1.8(eslint@10.0.2(jiti@2.6.1)): dependencies: - eslint: 9.39.2(jiti@2.6.1) + eslint: 10.0.2(jiti@2.6.1) eslint-import-resolver-node@0.3.9: dependencies: @@ -14542,21 +14580,17 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-module-utils@2.12.1(@typescript-eslint/parser@8.56.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint@9.39.2(jiti@2.6.1)): + eslint-module-utils@2.12.1(@typescript-eslint/parser@8.56.0(eslint@10.0.2(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint@10.0.2(jiti@2.6.1)): dependencies: debug: 3.2.7 optionalDependencies: - '@typescript-eslint/parser': 8.56.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) - eslint: 9.39.2(jiti@2.6.1) + '@typescript-eslint/parser': 8.56.0(eslint@10.0.2(jiti@2.6.1))(typescript@5.9.3) + eslint: 10.0.2(jiti@2.6.1) eslint-import-resolver-node: 0.3.9 transitivePeerDependencies: - supports-color - eslint-plugin-header@3.1.1(eslint@9.39.2(jiti@2.6.1)): - dependencies: - eslint: 9.39.2(jiti@2.6.1) - - eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.56.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1)): + eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.56.0(eslint@10.0.2(jiti@2.6.1))(typescript@5.9.3))(eslint@10.0.2(jiti@2.6.1)): dependencies: '@rtsao/scc': 1.1.0 array-includes: 3.1.9 @@ -14565,9 +14599,9 @@ snapshots: array.prototype.flatmap: 1.3.3 debug: 3.2.7 doctrine: 2.1.0 - eslint: 9.39.2(jiti@2.6.1) + eslint: 10.0.2(jiti@2.6.1) eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.56.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint@9.39.2(jiti@2.6.1)) + eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.56.0(eslint@10.0.2(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint@10.0.2(jiti@2.6.1)) hasown: 2.0.2 is-core-module: 2.16.1 is-glob: 4.0.3 @@ -14579,7 +14613,7 @@ snapshots: string.prototype.trimend: 1.0.9 tsconfig-paths: 3.15.0 optionalDependencies: - '@typescript-eslint/parser': 8.56.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/parser': 8.56.0(eslint@10.0.2(jiti@2.6.1))(typescript@5.9.3) transitivePeerDependencies: - eslint-import-resolver-typescript - eslint-import-resolver-webpack @@ -14590,8 +14624,10 @@ snapshots: esrecurse: 4.3.0 estraverse: 4.3.0 - eslint-scope@8.4.0: + eslint-scope@9.1.1: dependencies: + '@types/esrecurse': 4.3.1 + '@types/estree': 1.0.8 esrecurse: 4.3.0 estraverse: 5.3.0 @@ -14601,28 +14637,27 @@ snapshots: eslint-visitor-keys@5.0.0: {} - eslint@9.39.2(jiti@2.6.1): + eslint-visitor-keys@5.0.1: {} + + eslint@10.0.2(jiti@2.6.1): dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.2(jiti@2.6.1)) + '@eslint-community/eslint-utils': 4.9.1(eslint@10.0.2(jiti@2.6.1)) '@eslint-community/regexpp': 4.12.2 - '@eslint/config-array': 0.21.1 - '@eslint/config-helpers': 0.4.2 - '@eslint/core': 0.17.0 - '@eslint/eslintrc': 3.3.3 - '@eslint/js': 9.39.2 - '@eslint/plugin-kit': 0.4.1 + '@eslint/config-array': 0.23.2 + '@eslint/config-helpers': 0.5.2 + '@eslint/core': 1.1.0 + '@eslint/plugin-kit': 0.6.0 '@humanfs/node': 0.16.7 '@humanwhocodes/module-importer': 1.0.1 '@humanwhocodes/retry': 0.4.3 '@types/estree': 1.0.8 - ajv: 6.12.6 - chalk: 4.1.2 + ajv: 6.14.0 cross-spawn: 7.0.6 debug: 4.4.3(supports-color@10.2.2) escape-string-regexp: 4.0.0 - eslint-scope: 8.4.0 - eslint-visitor-keys: 4.2.1 - espree: 10.4.0 + eslint-scope: 9.1.1 + eslint-visitor-keys: 5.0.1 + espree: 11.1.1 esquery: 1.7.0 esutils: 2.0.3 fast-deep-equal: 3.1.3 @@ -14633,8 +14668,7 @@ snapshots: imurmurhash: 0.1.4 is-glob: 4.0.3 json-stable-stringify-without-jsonify: 1.0.1 - lodash.merge: 4.6.2 - minimatch: 3.1.2 + minimatch: 10.2.2 natural-compare: 1.4.0 optionator: 0.9.4 optionalDependencies: @@ -14648,6 +14682,12 @@ snapshots: acorn-jsx: 5.3.2(acorn@8.15.0) eslint-visitor-keys: 4.2.1 + espree@11.1.1: + dependencies: + acorn: 8.16.0 + acorn-jsx: 5.3.2(acorn@8.16.0) + eslint-visitor-keys: 5.0.1 + esprima@4.0.1: {} esquery@1.7.0: @@ -16271,8 +16311,6 @@ snapshots: lodash.isstring@4.0.1: {} - lodash.merge@4.6.2: {} - lodash.once@4.1.1: {} lodash.snakecase@4.1.1: {} @@ -16459,6 +16497,10 @@ snapshots: dependencies: brace-expansion: 5.0.2 + minimatch@10.2.2: + dependencies: + brace-expansion: 5.0.2 + minimatch@3.1.2: dependencies: brace-expansion: 1.1.12 From b72f817c9a934822a59252ecc65892e2bcd5a66a Mon Sep 17 00:00:00 2001 From: Alan Agius <17563226+alan-agius4@users.noreply.github.com> Date: Wed, 25 Feb 2026 09:19:56 +0000 Subject: [PATCH 031/226] build: update cross-repo angular dependencies See associated pull request for more information. Closes #32526 as a pr takeover --- .../assistant-to-the-branch-manager.yml | 2 +- .github/workflows/ci.yml | 52 +- .github/workflows/dev-infra.yml | 4 +- .github/workflows/feature-requests.yml | 2 +- .github/workflows/perf.yml | 6 +- .github/workflows/pr.yml | 44 +- MODULE.bazel | 2 +- MODULE.bazel.lock | 15 +- .../angular_devkit/architect/index.api.md | 2 +- package.json | 2 +- pnpm-lock.yaml | 713 +++++++----------- tests/e2e/ng-snapshot/package.json | 32 +- 12 files changed, 339 insertions(+), 537 deletions(-) diff --git a/.github/workflows/assistant-to-the-branch-manager.yml b/.github/workflows/assistant-to-the-branch-manager.yml index 360352c2454d..660fd0330ba0 100644 --- a/.github/workflows/assistant-to-the-branch-manager.yml +++ b/.github/workflows/assistant-to-the-branch-manager.yml @@ -17,6 +17,6 @@ jobs: - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 with: persist-credentials: false - - uses: angular/dev-infra/github-actions/branch-manager@e006a332028a4c3cb24e9d92437fac7ae99e2ed5 + - uses: angular/dev-infra/github-actions/branch-manager@16c5f6e199e3e1b67ae5a62385d36366bb9a429d with: angular-robot-key: ${{ secrets.ANGULAR_ROBOT_PRIVATE_KEY }} diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index dc4ec404e357..57e2669c7729 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -21,9 +21,9 @@ jobs: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@e006a332028a4c3cb24e9d92437fac7ae99e2ed5 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@16c5f6e199e3e1b67ae5a62385d36366bb9a429d - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@e006a332028a4c3cb24e9d92437fac7ae99e2ed5 + uses: angular/dev-infra/github-actions/bazel/setup@16c5f6e199e3e1b67ae5a62385d36366bb9a429d - name: Install node modules run: pnpm install --frozen-lockfile - name: Generate JSON schema types @@ -44,11 +44,11 @@ jobs: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@e006a332028a4c3cb24e9d92437fac7ae99e2ed5 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@16c5f6e199e3e1b67ae5a62385d36366bb9a429d - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@e006a332028a4c3cb24e9d92437fac7ae99e2ed5 + uses: angular/dev-infra/github-actions/bazel/setup@16c5f6e199e3e1b67ae5a62385d36366bb9a429d - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@e006a332028a4c3cb24e9d92437fac7ae99e2ed5 + uses: angular/dev-infra/github-actions/bazel/configure-remote@16c5f6e199e3e1b67ae5a62385d36366bb9a429d with: google_credential: ${{ secrets.RBE_TRUSTED_BUILDS_USER }} - name: Install node modules @@ -61,11 +61,11 @@ jobs: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@e006a332028a4c3cb24e9d92437fac7ae99e2ed5 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@16c5f6e199e3e1b67ae5a62385d36366bb9a429d - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@e006a332028a4c3cb24e9d92437fac7ae99e2ed5 + uses: angular/dev-infra/github-actions/bazel/setup@16c5f6e199e3e1b67ae5a62385d36366bb9a429d - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@e006a332028a4c3cb24e9d92437fac7ae99e2ed5 + uses: angular/dev-infra/github-actions/bazel/configure-remote@16c5f6e199e3e1b67ae5a62385d36366bb9a429d with: google_credential: ${{ secrets.RBE_TRUSTED_BUILDS_USER }} - name: Install node modules @@ -84,13 +84,13 @@ jobs: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@e006a332028a4c3cb24e9d92437fac7ae99e2ed5 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@16c5f6e199e3e1b67ae5a62385d36366bb9a429d - name: Install node modules run: pnpm install --frozen-lockfile - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@e006a332028a4c3cb24e9d92437fac7ae99e2ed5 + uses: angular/dev-infra/github-actions/bazel/setup@16c5f6e199e3e1b67ae5a62385d36366bb9a429d - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@e006a332028a4c3cb24e9d92437fac7ae99e2ed5 + uses: angular/dev-infra/github-actions/bazel/configure-remote@16c5f6e199e3e1b67ae5a62385d36366bb9a429d with: google_credential: ${{ secrets.RBE_TRUSTED_BUILDS_USER }} - name: Run CLI E2E tests @@ -100,11 +100,11 @@ jobs: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@e006a332028a4c3cb24e9d92437fac7ae99e2ed5 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@16c5f6e199e3e1b67ae5a62385d36366bb9a429d - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@e006a332028a4c3cb24e9d92437fac7ae99e2ed5 + uses: angular/dev-infra/github-actions/bazel/setup@16c5f6e199e3e1b67ae5a62385d36366bb9a429d - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@e006a332028a4c3cb24e9d92437fac7ae99e2ed5 + uses: angular/dev-infra/github-actions/bazel/configure-remote@16c5f6e199e3e1b67ae5a62385d36366bb9a429d with: google_credential: ${{ secrets.RBE_TRUSTED_BUILDS_USER }} - name: Install node modules @@ -137,7 +137,7 @@ jobs: runs-on: windows-2025 steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@e006a332028a4c3cb24e9d92437fac7ae99e2ed5 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@16c5f6e199e3e1b67ae5a62385d36366bb9a429d - name: Install node modules run: pnpm install --frozen-lockfile - name: Download built Windows E2E tests @@ -164,13 +164,13 @@ jobs: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@e006a332028a4c3cb24e9d92437fac7ae99e2ed5 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@16c5f6e199e3e1b67ae5a62385d36366bb9a429d - name: Install node modules run: pnpm install --frozen-lockfile - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@e006a332028a4c3cb24e9d92437fac7ae99e2ed5 + uses: angular/dev-infra/github-actions/bazel/setup@16c5f6e199e3e1b67ae5a62385d36366bb9a429d - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@e006a332028a4c3cb24e9d92437fac7ae99e2ed5 + uses: angular/dev-infra/github-actions/bazel/configure-remote@16c5f6e199e3e1b67ae5a62385d36366bb9a429d with: google_credential: ${{ secrets.RBE_TRUSTED_BUILDS_USER }} - name: Run CLI E2E tests @@ -188,13 +188,13 @@ jobs: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@e006a332028a4c3cb24e9d92437fac7ae99e2ed5 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@16c5f6e199e3e1b67ae5a62385d36366bb9a429d - name: Install node modules run: pnpm install --frozen-lockfile - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@e006a332028a4c3cb24e9d92437fac7ae99e2ed5 + uses: angular/dev-infra/github-actions/bazel/setup@16c5f6e199e3e1b67ae5a62385d36366bb9a429d - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@e006a332028a4c3cb24e9d92437fac7ae99e2ed5 + uses: angular/dev-infra/github-actions/bazel/configure-remote@16c5f6e199e3e1b67ae5a62385d36366bb9a429d with: google_credential: ${{ secrets.RBE_TRUSTED_BUILDS_USER }} - name: Run CLI E2E tests @@ -208,13 +208,13 @@ jobs: SAUCE_TUNNEL_IDENTIFIER: angular-cli-${{ github.workflow }}-${{ github.run_number }} steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@e006a332028a4c3cb24e9d92437fac7ae99e2ed5 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@16c5f6e199e3e1b67ae5a62385d36366bb9a429d - name: Install node modules run: pnpm install --frozen-lockfile - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@e006a332028a4c3cb24e9d92437fac7ae99e2ed5 + uses: angular/dev-infra/github-actions/bazel/setup@16c5f6e199e3e1b67ae5a62385d36366bb9a429d - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@e006a332028a4c3cb24e9d92437fac7ae99e2ed5 + uses: angular/dev-infra/github-actions/bazel/configure-remote@16c5f6e199e3e1b67ae5a62385d36366bb9a429d with: google_credential: ${{ secrets.RBE_TRUSTED_BUILDS_USER }} - name: Run E2E Browser tests @@ -244,11 +244,11 @@ jobs: CIRCLE_BRANCH: ${{ github.ref_name }} steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@e006a332028a4c3cb24e9d92437fac7ae99e2ed5 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@16c5f6e199e3e1b67ae5a62385d36366bb9a429d - name: Install node modules run: pnpm install --frozen-lockfile - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@e006a332028a4c3cb24e9d92437fac7ae99e2ed5 + uses: angular/dev-infra/github-actions/bazel/setup@16c5f6e199e3e1b67ae5a62385d36366bb9a429d - run: pnpm admin snapshots --verbose env: SNAPSHOT_BUILDS_GITHUB_TOKEN: ${{ secrets.SNAPSHOT_BUILDS_GITHUB_TOKEN }} diff --git a/.github/workflows/dev-infra.yml b/.github/workflows/dev-infra.yml index 48e6cba7bef2..06f67ff5ce19 100644 --- a/.github/workflows/dev-infra.yml +++ b/.github/workflows/dev-infra.yml @@ -13,13 +13,13 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - - uses: angular/dev-infra/github-actions/pull-request-labeling@e006a332028a4c3cb24e9d92437fac7ae99e2ed5 + - uses: angular/dev-infra/github-actions/pull-request-labeling@16c5f6e199e3e1b67ae5a62385d36366bb9a429d with: angular-robot-key: ${{ secrets.ANGULAR_ROBOT_PRIVATE_KEY }} post_approval_changes: runs-on: ubuntu-latest steps: - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - - uses: angular/dev-infra/github-actions/post-approval-changes@e006a332028a4c3cb24e9d92437fac7ae99e2ed5 + - uses: angular/dev-infra/github-actions/post-approval-changes@16c5f6e199e3e1b67ae5a62385d36366bb9a429d with: angular-robot-key: ${{ secrets.ANGULAR_ROBOT_PRIVATE_KEY }} diff --git a/.github/workflows/feature-requests.yml b/.github/workflows/feature-requests.yml index b0a3ed668d9f..feab321286c5 100644 --- a/.github/workflows/feature-requests.yml +++ b/.github/workflows/feature-requests.yml @@ -16,6 +16,6 @@ jobs: if: github.repository == 'angular/angular-cli' runs-on: ubuntu-latest steps: - - uses: angular/dev-infra/github-actions/feature-request@e006a332028a4c3cb24e9d92437fac7ae99e2ed5 + - uses: angular/dev-infra/github-actions/feature-request@16c5f6e199e3e1b67ae5a62385d36366bb9a429d with: angular-robot-key: ${{ secrets.ANGULAR_ROBOT_PRIVATE_KEY }} diff --git a/.github/workflows/perf.yml b/.github/workflows/perf.yml index 318ac9b9a2f6..c9f7ef9fa7f1 100644 --- a/.github/workflows/perf.yml +++ b/.github/workflows/perf.yml @@ -23,7 +23,7 @@ jobs: workflows: ${{ steps.workflows.outputs.workflows }} steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@e006a332028a4c3cb24e9d92437fac7ae99e2ed5 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@16c5f6e199e3e1b67ae5a62385d36366bb9a429d - name: Install node modules run: pnpm install --frozen-lockfile - id: workflows @@ -38,9 +38,9 @@ jobs: workflow: ${{ fromJSON(needs.list.outputs.workflows) }} steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@e006a332028a4c3cb24e9d92437fac7ae99e2ed5 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@16c5f6e199e3e1b67ae5a62385d36366bb9a429d - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@e006a332028a4c3cb24e9d92437fac7ae99e2ed5 + uses: angular/dev-infra/github-actions/bazel/setup@16c5f6e199e3e1b67ae5a62385d36366bb9a429d - name: Install node modules run: pnpm install --frozen-lockfile # We utilize the google-github-actions/auth action to allow us to get an active credential using workflow diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml index 4da5d09424cc..4b12743d2c20 100644 --- a/.github/workflows/pr.yml +++ b/.github/workflows/pr.yml @@ -34,9 +34,9 @@ jobs: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@e006a332028a4c3cb24e9d92437fac7ae99e2ed5 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@16c5f6e199e3e1b67ae5a62385d36366bb9a429d - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@e006a332028a4c3cb24e9d92437fac7ae99e2ed5 + uses: angular/dev-infra/github-actions/bazel/setup@16c5f6e199e3e1b67ae5a62385d36366bb9a429d - name: Setup ESLint Caching uses: actions/cache@cdf6c1fa76f9f475f3d7449005a359c84ca0f306 # v5.0.3 with: @@ -66,17 +66,17 @@ jobs: # it has been merged. run: pnpm ng-dev format changed --check ${{ github.event.pull_request.base.sha }} - name: Check Package Licenses - uses: angular/dev-infra/github-actions/linting/licenses@e006a332028a4c3cb24e9d92437fac7ae99e2ed5 + uses: angular/dev-infra/github-actions/linting/licenses@16c5f6e199e3e1b67ae5a62385d36366bb9a429d build: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@e006a332028a4c3cb24e9d92437fac7ae99e2ed5 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@16c5f6e199e3e1b67ae5a62385d36366bb9a429d - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@e006a332028a4c3cb24e9d92437fac7ae99e2ed5 + uses: angular/dev-infra/github-actions/bazel/setup@16c5f6e199e3e1b67ae5a62385d36366bb9a429d - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@e006a332028a4c3cb24e9d92437fac7ae99e2ed5 + uses: angular/dev-infra/github-actions/bazel/configure-remote@16c5f6e199e3e1b67ae5a62385d36366bb9a429d - name: Install node modules run: pnpm install --frozen-lockfile - name: Build release targets @@ -93,11 +93,11 @@ jobs: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@e006a332028a4c3cb24e9d92437fac7ae99e2ed5 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@16c5f6e199e3e1b67ae5a62385d36366bb9a429d - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@e006a332028a4c3cb24e9d92437fac7ae99e2ed5 + uses: angular/dev-infra/github-actions/bazel/setup@16c5f6e199e3e1b67ae5a62385d36366bb9a429d - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@e006a332028a4c3cb24e9d92437fac7ae99e2ed5 + uses: angular/dev-infra/github-actions/bazel/configure-remote@16c5f6e199e3e1b67ae5a62385d36366bb9a429d - name: Install node modules run: pnpm install --frozen-lockfile - name: Run module and package tests @@ -114,13 +114,13 @@ jobs: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@e006a332028a4c3cb24e9d92437fac7ae99e2ed5 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@16c5f6e199e3e1b67ae5a62385d36366bb9a429d - name: Install node modules run: pnpm install --frozen-lockfile - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@e006a332028a4c3cb24e9d92437fac7ae99e2ed5 + uses: angular/dev-infra/github-actions/bazel/setup@16c5f6e199e3e1b67ae5a62385d36366bb9a429d - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@e006a332028a4c3cb24e9d92437fac7ae99e2ed5 + uses: angular/dev-infra/github-actions/bazel/configure-remote@16c5f6e199e3e1b67ae5a62385d36366bb9a429d - name: Run CLI E2E tests run: pnpm bazel test --test_env=E2E_SHARD_TOTAL=6 --test_env=E2E_SHARD_INDEX=${{ matrix.shard }} --config=e2e //tests:e2e.${{ matrix.subset }}_node${{ matrix.node }} @@ -128,11 +128,11 @@ jobs: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@e006a332028a4c3cb24e9d92437fac7ae99e2ed5 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@16c5f6e199e3e1b67ae5a62385d36366bb9a429d - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@e006a332028a4c3cb24e9d92437fac7ae99e2ed5 + uses: angular/dev-infra/github-actions/bazel/setup@16c5f6e199e3e1b67ae5a62385d36366bb9a429d - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@e006a332028a4c3cb24e9d92437fac7ae99e2ed5 + uses: angular/dev-infra/github-actions/bazel/configure-remote@16c5f6e199e3e1b67ae5a62385d36366bb9a429d - name: Install node modules run: pnpm install --frozen-lockfile - name: Build E2E tests for Windows on Linux @@ -156,7 +156,7 @@ jobs: runs-on: windows-2025 steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@e006a332028a4c3cb24e9d92437fac7ae99e2ed5 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@16c5f6e199e3e1b67ae5a62385d36366bb9a429d - name: Install node modules run: pnpm install --frozen-lockfile - name: Download built Windows E2E tests @@ -183,13 +183,13 @@ jobs: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@e006a332028a4c3cb24e9d92437fac7ae99e2ed5 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@16c5f6e199e3e1b67ae5a62385d36366bb9a429d - name: Install node modules run: pnpm install --frozen-lockfile - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@e006a332028a4c3cb24e9d92437fac7ae99e2ed5 + uses: angular/dev-infra/github-actions/bazel/setup@16c5f6e199e3e1b67ae5a62385d36366bb9a429d - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@e006a332028a4c3cb24e9d92437fac7ae99e2ed5 + uses: angular/dev-infra/github-actions/bazel/configure-remote@16c5f6e199e3e1b67ae5a62385d36366bb9a429d - name: Run CLI E2E tests run: pnpm bazel test --test_env=E2E_SHARD_TOTAL=3 --test_env=E2E_SHARD_INDEX=${{ matrix.shard }} --config=e2e //tests:e2e.${{ matrix.subset }}_node${{ matrix.node }} @@ -205,12 +205,12 @@ jobs: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@e006a332028a4c3cb24e9d92437fac7ae99e2ed5 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@16c5f6e199e3e1b67ae5a62385d36366bb9a429d - name: Install node modules run: pnpm install --frozen-lockfile - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@e006a332028a4c3cb24e9d92437fac7ae99e2ed5 + uses: angular/dev-infra/github-actions/bazel/setup@16c5f6e199e3e1b67ae5a62385d36366bb9a429d - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@e006a332028a4c3cb24e9d92437fac7ae99e2ed5 + uses: angular/dev-infra/github-actions/bazel/configure-remote@16c5f6e199e3e1b67ae5a62385d36366bb9a429d - name: Run CLI E2E tests run: pnpm bazel test --test_env=E2E_SHARD_TOTAL=6 --test_env=E2E_SHARD_INDEX=${{ matrix.shard }} --config=e2e //tests:e2e.snapshots.${{ matrix.subset }}_node${{ matrix.node }} diff --git a/MODULE.bazel b/MODULE.bazel index 9c2ad5096335..362aa8e48581 100644 --- a/MODULE.bazel +++ b/MODULE.bazel @@ -25,7 +25,7 @@ git_override( bazel_dep(name = "devinfra") git_override( module_name = "devinfra", - commit = "e006a332028a4c3cb24e9d92437fac7ae99e2ed5", + commit = "16c5f6e199e3e1b67ae5a62385d36366bb9a429d", remote = "https://github.com/angular/dev-infra.git", ) diff --git a/MODULE.bazel.lock b/MODULE.bazel.lock index fc84172ed921..3f1a0fd4b045 100644 --- a/MODULE.bazel.lock +++ b/MODULE.bazel.lock @@ -21,7 +21,6 @@ "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.2/MODULE.bazel": "45f054400ff242c4433f6d7f20f6123a9a72739cb7a1f44247d738db1644f46c", "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_js/2.0.0/MODULE.bazel": "b45b507574aa60a92796e3e13c195cd5744b3b8aff516a9c0cb5ae6a048161c5", @@ -31,7 +30,6 @@ "https://bcr.bazel.build/modules/aspect_rules_js/2.9.2/source.json": "4bff7c03ab387b60deb15649ba575688e62f2a71a7544cbc7a660b19ec473808", "https://bcr.bazel.build/modules/aspect_rules_ts/3.6.3/MODULE.bazel": "d09db394970f076176ce7bab5b5fa7f0d560fd4f30b8432ea5e2c2570505b130", "https://bcr.bazel.build/modules/aspect_rules_ts/3.7.0/MODULE.bazel": "5aace216caf88638950ef061245d23c36f57c8359e56e97f02a36f70bb09c50f", - "https://bcr.bazel.build/modules/aspect_rules_ts/3.8.4/MODULE.bazel": "a50254ac3add6232d0f9f93103836f9afaf614315589a13abf74183982c4101d", "https://bcr.bazel.build/modules/aspect_rules_ts/3.8.5/MODULE.bazel": "bcf8f0b6b9375f0f74451e2f70671efae9bb366acef8fdc04675305eaf137f06", "https://bcr.bazel.build/modules/aspect_rules_ts/3.8.5/source.json": "fa35e43f6359f654e4b70ce55efdf280d0b06c0b3ef9fc0b06ba52327a0e6311", "https://bcr.bazel.build/modules/aspect_tools_telemetry/0.2.3/MODULE.bazel": "20f53b145f40957a51077ae90b37b7ce83582a1daf9350349f0f86179e19dd0d", @@ -76,7 +74,8 @@ "https://bcr.bazel.build/modules/buildozer/7.1.2/MODULE.bazel": "2e8dd40ede9c454042645fd8d8d0cd1527966aa5c919de86661e62953cd73d84", "https://bcr.bazel.build/modules/buildozer/7.1.2/source.json": "c9028a501d2db85793a6996205c8de120944f50a0d570438fcae0457a5f9d1f8", "https://bcr.bazel.build/modules/gawk/5.3.2.bcr.1/MODULE.bazel": "cdf8cbe5ee750db04b78878c9633cc76e80dcf4416cbe982ac3a9222f80713c8", - "https://bcr.bazel.build/modules/gawk/5.3.2.bcr.1/source.json": "fa7b512dfcb5eafd90ce3959cf42a2a6fe96144ebbb4b3b3928054895f2afac2", + "https://bcr.bazel.build/modules/gawk/5.3.2.bcr.3/MODULE.bazel": "f1b7bb2dd53e8f2ef984b39485ec8a44e9076dda5c4b8efd2fb4c6a6e856a31d", + "https://bcr.bazel.build/modules/gawk/5.3.2.bcr.3/source.json": "ebe931bfe362e4b41e59ee00a528db6074157ff2ced92eb9e970acab2e1089c9", "https://bcr.bazel.build/modules/google_benchmark/1.8.2/MODULE.bazel": "a70cf1bba851000ba93b58ae2f6d76490a9feb74192e57ab8e8ff13c34ec50cb", "https://bcr.bazel.build/modules/googletest/1.11.0/MODULE.bazel": "3a83f095183f66345ca86aa13c58b59f9f94a2f81999c093d4eeaa2d262d12f4", "https://bcr.bazel.build/modules/googletest/1.14.0.bcr.1/MODULE.bazel": "22c31a561553727960057361aa33bf20fb2e98584bc4fec007906e27053f80c6", @@ -126,6 +125,7 @@ "https://bcr.bazel.build/modules/rules_cc/0.2.16/MODULE.bazel": "9242fa89f950c6ef7702801ab53922e99c69b02310c39fb6e62b2bd30df2a1d4", "https://bcr.bazel.build/modules/rules_cc/0.2.17/MODULE.bazel": "1849602c86cb60da8613d2de887f9566a6d354a6df6d7009f9d04a14402f9a84", "https://bcr.bazel.build/modules/rules_cc/0.2.17/source.json": "3832f45d145354049137c0090df04629d9c2b5493dc5c2bf46f1834040133a07", + "https://bcr.bazel.build/modules/rules_cc/0.2.4/MODULE.bazel": "1ff1223dfd24f3ecf8f028446d4a27608aa43c3f41e346d22838a4223980b8cc", "https://bcr.bazel.build/modules/rules_foreign_cc/0.9.0/MODULE.bazel": "c9e8c682bf75b0e7c704166d79b599f93b72cfca5ad7477df596947891feeef6", "https://bcr.bazel.build/modules/rules_fuzzing/0.5.2/MODULE.bazel": "40c97d1144356f52905566c55811f13b299453a14ac7769dfba2ac38192337a8", "https://bcr.bazel.build/modules/rules_fuzzing/0.5.2/source.json": "c8b1e2c717646f1702290959a3302a178fb639d987ab61d548105019f11e527e", @@ -198,13 +198,12 @@ "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.8.1/source.json": "835f83b482facf6205ad8708cf2b2f6524d1d7b1075a90fe9bb540da761d6d2e", + "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", "https://bcr.bazel.build/modules/yq.bzl/0.1.1/MODULE.bazel": "9039681f9bcb8958ee2c87ffc74bdafba9f4369096a2b5634b88abc0eaefa072", "https://bcr.bazel.build/modules/yq.bzl/0.2.0/MODULE.bazel": "6f3a675677db8885be4d607fde14cc51829715e3a879fb016eb9bf336786ce6d", "https://bcr.bazel.build/modules/yq.bzl/0.3.2/MODULE.bazel": "0384efa70e8033d842ea73aa4b7199fa099709e236a7264345c03937166670b6", - "https://bcr.bazel.build/modules/yq.bzl/0.3.4/MODULE.bazel": "d3a270662f5d766cd7229732d65a5a5bc485240c3007343dd279edfb60c9ae27", "https://bcr.bazel.build/modules/yq.bzl/0.3.5/MODULE.bazel": "130c603e54be717bdf84100210f06598a0d2b4b4e01888fb01b70f50f41767ec", "https://bcr.bazel.build/modules/yq.bzl/0.3.5/source.json": "1ae7bdc03cb26aaa8bd2bceadf65e90d90f0b2d03008ba9a0564da2e21396c39", "https://bcr.bazel.build/modules/zlib/1.2.11/MODULE.bazel": "07b389abc85fdbca459b69e2ec656ae5622873af3f845e1c9d80fe179f3effa0", @@ -418,7 +417,7 @@ "@@aspect_rules_js+//npm:extensions.bzl%pnpm": { "general": { "bzlTransitiveDigest": "HC+l+mTivq1p/KbcVQ+iV5QwYR+oKESJh827FY68SH8=", - "usagesDigest": "r0j7dncqReNevN/jHyRMaNgKB+CTMhwal6OgvgkIlU4=", + "usagesDigest": "oKEoJkVZEnW0cjpkX5M2lhXCujejJK2YvKWbS+ELfig=", "recordedFileInputs": {}, "recordedDirentsInputs": {}, "envVariables": {}, @@ -1099,7 +1098,7 @@ "@@rules_nodejs+//nodejs:extensions.bzl%node": { "general": { "bzlTransitiveDigest": "4pUxCNc22K4I+6+4Nxu52Hur12tFRfa1JMsN5mdDv60=", - "usagesDigest": "MhZgSV2KT2KowfGcEDHCUJpD8UsBfZDZKKkIgaqjXqA=", + "usagesDigest": "pAwoD5IwHr4MXoiITGxMFEsRrSYmIbBSeOv6pljPAqM=", "recordedFileInputs": {}, "recordedDirentsInputs": {}, "envVariables": {}, diff --git a/goldens/public-api/angular_devkit/architect/index.api.md b/goldens/public-api/angular_devkit/architect/index.api.md index 0ae8751719b5..747b7010f580 100644 --- a/goldens/public-api/angular_devkit/architect/index.api.md +++ b/goldens/public-api/angular_devkit/architect/index.api.md @@ -530,7 +530,7 @@ export type Target = json.JsonObject & Target_2; export function targetFromTargetString(specifier: string, abbreviatedProjectName?: string, abbreviatedTargetName?: string): Target; // @public -export function targetStringFromTarget({ project, target, configuration }: Target): string; +export function targetStringFromTarget(input: Target): string; // @public export type TypedBuilderProgress = { diff --git a/package.json b/package.json index 953ed6940cb7..788570de87c7 100644 --- a/package.json +++ b/package.json @@ -51,7 +51,7 @@ "@angular/forms": "21.2.0-rc.0", "@angular/localize": "21.2.0-rc.0", "@angular/material": "21.2.0-rc.0", - "@angular/ng-dev": "https://github.com/angular/dev-infra-private-ng-dev-builds.git#b0ab31189ecbeaaafce2bd9259385879b9beabcc", + "@angular/ng-dev": "https://github.com/angular/dev-infra-private-ng-dev-builds.git#99c925a35a7decb22cb0dc7b5fb83b2f41876179", "@angular/platform-browser": "21.2.0-rc.0", "@angular/platform-server": "21.2.0-rc.0", "@angular/router": "21.2.0-rc.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index f522a55923c9..cdedec51bfbf 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -47,8 +47,8 @@ importers: specifier: 21.2.0-rc.0 version: 21.2.0-rc.0(4ac7caab525408b0a8d5509a5a82c8db) '@angular/ng-dev': - specifier: https://github.com/angular/dev-infra-private-ng-dev-builds.git#b0ab31189ecbeaaafce2bd9259385879b9beabcc - version: https://codeload.github.com/angular/dev-infra-private-ng-dev-builds/tar.gz/b0ab31189ecbeaaafce2bd9259385879b9beabcc(@modelcontextprotocol/sdk@1.26.0(zod@4.3.6)) + specifier: https://github.com/angular/dev-infra-private-ng-dev-builds.git#99c925a35a7decb22cb0dc7b5fb83b2f41876179 + version: https://codeload.github.com/angular/dev-infra-private-ng-dev-builds/tar.gz/99c925a35a7decb22cb0dc7b5fb83b2f41876179(@modelcontextprotocol/sdk@1.26.0(zod@4.3.6)) '@angular/platform-browser': specifier: 21.2.0-rc.0 version: 21.2.0-rc.0(@angular/animations@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0)))(@angular/common@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2))(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0)) @@ -315,7 +315,7 @@ importers: version: link:../../../packages/angular/ssr '@vitest/coverage-v8': specifier: 4.0.18 - version: 4.0.18(vitest@4.0.18(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(jiti@2.6.1)(jsdom@28.1.0)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)) + version: 4.0.18(vitest@4.0.18(@opentelemetry/api@1.9.0)(@types/node@24.10.13)(jiti@2.6.1)(jsdom@28.1.0)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)) browser-sync: specifier: 3.0.4 version: 3.0.4(bufferutil@4.1.0)(utf-8-validate@6.0.6) @@ -327,7 +327,7 @@ importers: version: 7.8.2 vitest: specifier: 4.0.18 - version: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(jiti@2.6.1)(jsdom@28.1.0)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) + version: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@24.10.13)(jiti@2.6.1)(jsdom@28.1.0)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) packages/angular/build: dependencies: @@ -348,10 +348,10 @@ importers: version: 7.24.7 '@inquirer/confirm': specifier: 6.0.8 - version: 6.0.8(@types/node@24.10.9) + version: 6.0.8(@types/node@24.10.13) '@vitejs/plugin-basic-ssl': specifier: 2.1.4 - version: 2.1.4(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)) + version: 2.1.4(vite@7.3.1(@types/node@24.10.13)(jiti@2.6.1)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)) beasties: specifier: 0.4.1 version: 0.4.1 @@ -405,7 +405,7 @@ importers: version: 0.2.15 vite: specifier: 7.3.1 - version: 7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) + version: 7.3.1(@types/node@24.10.13)(jiti@2.6.1)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) watchpack: specifier: 2.5.1 version: 2.5.1 @@ -433,7 +433,7 @@ importers: version: 7.8.2 vitest: specifier: 4.0.18 - version: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(jiti@2.6.1)(jsdom@28.1.0)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) + version: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@24.10.13)(jiti@2.6.1)(jsdom@28.1.0)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) optionalDependencies: lmdb: specifier: 3.5.1 @@ -452,10 +452,10 @@ importers: version: link:../../angular_devkit/schematics '@inquirer/prompts': specifier: 8.3.0 - version: 8.3.0(@types/node@24.10.9) + version: 8.3.0(@types/node@24.10.13) '@listr2/prompt-adapter-inquirer': specifier: 4.1.1 - version: 4.1.1(@inquirer/prompts@8.3.0(@types/node@24.10.9))(@types/node@24.10.9)(listr2@10.1.0) + version: 4.1.1(@inquirer/prompts@8.3.0(@types/node@24.10.13))(@types/node@24.10.13)(listr2@10.1.0) '@modelcontextprotocol/sdk': specifier: 1.26.0 version: 1.26.0(zod@4.3.6) @@ -817,7 +817,7 @@ importers: version: link:../schematics '@inquirer/prompts': specifier: 8.3.0 - version: 8.3.0(@types/node@24.10.9) + version: 8.3.0(@types/node@24.10.13) packages/ngtools/webpack: devDependencies: @@ -1017,9 +1017,9 @@ packages: '@angular/platform-browser': ^21.0.0-0 || ^21.1.0-0 || ^21.2.0-0 || ^21.3.0-0 || ^22.0.0-0 rxjs: ^6.5.3 || ^7.4.0 - '@angular/ng-dev@https://codeload.github.com/angular/dev-infra-private-ng-dev-builds/tar.gz/b0ab31189ecbeaaafce2bd9259385879b9beabcc': - resolution: {tarball: https://codeload.github.com/angular/dev-infra-private-ng-dev-builds/tar.gz/b0ab31189ecbeaaafce2bd9259385879b9beabcc} - version: 0.0.0-e006a332028a4c3cb24e9d92437fac7ae99e2ed5 + '@angular/ng-dev@https://codeload.github.com/angular/dev-infra-private-ng-dev-builds/tar.gz/99c925a35a7decb22cb0dc7b5fb83b2f41876179': + resolution: {tarball: https://codeload.github.com/angular/dev-infra-private-ng-dev-builds/tar.gz/99c925a35a7decb22cb0dc7b5fb83b2f41876179} + version: 0.0.0-c69b5bccf6661668b2c160f63c02b42f4f400d5a hasBin: true '@angular/platform-browser@21.2.0-rc.0': @@ -1875,8 +1875,8 @@ packages: '@noble/hashes': optional: true - '@firebase/ai@2.7.0': - resolution: {integrity: sha512-PwpCz+TtAMWICM7uQNO0mkSPpUKwrMV4NSwHkbVKDvPKoaQmSlO96vIz+Suw2Ao1EaUUsxYb5LGImHWt/fSnRQ==} + '@firebase/ai@2.8.0': + resolution: {integrity: sha512-grWYGFPsSo+pt+6CYeKR0kWnUfoLLS3xgWPvNrhAS5EPxl6xWq7+HjDZqX24yLneETyl45AVgDsTbVgxeWeRfg==} engines: {node: '>=20.0.0'} peerDependencies: '@firebase/app': 0.x @@ -1913,15 +1913,15 @@ packages: peerDependencies: '@firebase/app': 0.x - '@firebase/app-compat@0.5.7': - resolution: {integrity: sha512-MO+jfap8IBZQ+K8L2QCiHObyMgpYHrxo4Hc7iJgfb9hjGRW/z1y6LWVdT9wBBK+VJ7cRP2DjAiWQP+thu53hHA==} + '@firebase/app-compat@0.5.8': + resolution: {integrity: sha512-4De6SUZ36zozl9kh5rZSxKWULpgty27rMzZ6x+xkoo7+NWyhWyFdsdvhFsWhTw/9GGj0wXIcbTjwHYCUIUuHyg==} engines: {node: '>=20.0.0'} '@firebase/app-types@0.9.3': resolution: {integrity: sha512-kRVpIl4vVGJ4baogMDINbyrIOtOxqhkZQg4jTq3l8Lw6WSk0xfpEYzezFu+Kl4ve4fbPl79dvwRtaFqAC/ucCw==} - '@firebase/app@0.14.7': - resolution: {integrity: sha512-o3ZfnOx0AWBD5n/36p2zPoB0rDDxQP8H/A60zDLvvfRLtW8b3LfCyV97GKpJaAVV1JMMl/BC89EDzMyzxFZxTw==} + '@firebase/app@0.14.8': + resolution: {integrity: sha512-WiE9uCGRLUnShdjb9iP20sA3ToWrBbNXr14/N5mow7Nls9dmKgfGaGX5cynLvrltxq2OrDLh1VDNaUgsnS/k/g==} engines: {node: '>=20.0.0'} '@firebase/auth-compat@0.6.2': @@ -1969,8 +1969,8 @@ packages: resolution: {integrity: sha512-gM6MJFae3pTyNLoc9VcJNuaUDej0ctdjn3cVtILo3D5lpp0dmUHHLFN/pUKe7ImyeB1KAvRlEYxvIHNF04Filg==} engines: {node: '>=20.0.0'} - '@firebase/firestore-compat@0.4.4': - resolution: {integrity: sha512-JvxxIgi+D5v9BecjLA1YomdyF7LA6CXhJuVK10b4GtRrB3m2O2hT1jJWbKYZYHUAjTaajkvnos+4U5VNxqkI2w==} + '@firebase/firestore-compat@0.4.5': + resolution: {integrity: sha512-yVX1CkVvqBI4qbA56uZo42xFA4TNU0ICQ+9AFDvYq9U9Xu6iAx9lFDAk/tN+NGereQQXXCSnpISwc/oxsQqPLA==} engines: {node: '>=20.0.0'} peerDependencies: '@firebase/app-compat': 0.x @@ -1981,8 +1981,8 @@ packages: '@firebase/app-types': 0.x '@firebase/util': 1.x - '@firebase/firestore@4.10.0': - resolution: {integrity: sha512-fgF6EbpoagGWh5Vwfu/7/jYgBFwUCwTlPNVF/aSjHcoEDRXpRsIqVfAFTp1LD+dWAUcAKEK3h+osk8spMJXtxA==} + '@firebase/firestore@4.11.0': + resolution: {integrity: sha512-Zb88s8rssBd0J2Tt+NUXMPt2sf+Dq7meatKiJf5t9oto1kZ8w9gK59Koe1uPVbaKfdgBp++N/z0I4G/HamyEhg==} engines: {node: '>=20.0.0'} peerDependencies: '@firebase/app': 0.x @@ -2116,8 +2116,8 @@ packages: resolution: {integrity: sha512-IJn+8A3QZJfe7FUtWqHVNo3xJs7KFpurCWGWCiCz3oEh+BkRymKZ1QxfAbU2yGMDzTytLGQ2IV6T2r3cuo75/w==} engines: {node: '>=18'} - '@google/genai@1.38.0': - resolution: {integrity: sha512-V/4CQVQGovvGHuS73lwJwHKR9x33kCij3zz/ReEQ4A7RJaV0U7m4k1mvYhFk55cGZdF5JLKu2S9BTaFuEs5xTA==} + '@google/genai@1.42.0': + resolution: {integrity: sha512-+3nlMTcrQufbQ8IumGkOphxD5Pd5kKyJOzLcnY0/1IuE8upJk5aLmoexZ2BJhBp1zAjRJMEB4a2CJwKI9e2EYw==} engines: {node: '>=20.0.0'} peerDependencies: '@modelcontextprotocol/sdk': ^1.25.2 @@ -2175,15 +2175,6 @@ packages: resolution: {integrity: sha512-g44zhR3NIKVs0zUesa4iMzExmZpLUdTLRMCStqX3GE5NT6VkPcxQGJ+uC8tDgBUC/vB1rUhUd55cOf++4NZcmw==} engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} - '@inquirer/checkbox@5.0.6': - resolution: {integrity: sha512-qLZ1gOpsqsieB5k98GQ9bWYggvMsCXTc7HUwhEQpTsxFQYGthqR9UysCwqB7L9h47THYdXhJegnYb1IqURMjng==} - engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} - peerDependencies: - '@types/node': '>=18' - peerDependenciesMeta: - '@types/node': - optional: true - '@inquirer/checkbox@5.1.0': resolution: {integrity: sha512-/HjF1LN0a1h4/OFsbGKHNDtWICFU/dqXCdym719HFTyJo9IG7Otr+ziGWc9S0iQuohRZllh+WprSgd5UW5Fw0g==} engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} @@ -2211,15 +2202,6 @@ packages: '@types/node': optional: true - '@inquirer/editor@5.0.6': - resolution: {integrity: sha512-dxTi/TB29NaW18u0pQl3B140695izGUMzr340a4Yhxll3oa0/iwxl6C88sX9LDUPFaaM4FDASEMnLm8XVk2VVg==} - engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} - peerDependencies: - '@types/node': '>=18' - peerDependenciesMeta: - '@types/node': - optional: true - '@inquirer/editor@5.0.8': resolution: {integrity: sha512-sLcpbb9B3XqUEGrj1N66KwhDhEckzZ4nI/W6SvLXyBX8Wic3LDLENlWRvkOGpCPoserabe+MxQkpiMoI8irvyA==} engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} @@ -2229,15 +2211,6 @@ packages: '@types/node': optional: true - '@inquirer/expand@5.0.6': - resolution: {integrity: sha512-HmgMzFdMk/gmPXfuFy4xgWkyIVbdH81otQkrFbhklFZcGauwDFD1EbgmZdgmYCN5pWhSEnYIadg1kysLgPIYag==} - engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} - peerDependencies: - '@types/node': '>=18' - peerDependenciesMeta: - '@types/node': - optional: true - '@inquirer/expand@5.0.8': resolution: {integrity: sha512-QieW3F1prNw3j+hxO7/NKkG1pk3oz7pOB6+5Upwu3OIwADfPX0oZVppsqlL+Vl/uBHHDSOBY0BirLctLnXwGGg==} engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} @@ -2260,15 +2233,6 @@ packages: resolution: {integrity: sha512-y09iGt3JKoOCBQ3w4YrSJdokcD8ciSlMIWsD+auPu+OZpfxLuyz+gICAQ6GCBOmJJt4KEQGHuZSVff2jiNOy7g==} engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} - '@inquirer/input@5.0.6': - resolution: {integrity: sha512-RZsJcjMJA3QNI9q9OiAi1fAom+Pb8on6alJB1Teh5jjKaiG5C79P69cG955ZRfgPdxTmI4uyhf33+94Xj7xWig==} - engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} - peerDependencies: - '@types/node': '>=18' - peerDependenciesMeta: - '@types/node': - optional: true - '@inquirer/input@5.0.8': resolution: {integrity: sha512-p0IJslw0AmedLEkOU+yrEX3Aj2RTpQq7ZOf8nc1DIhjzaxRWrrgeuE5Kyh39fVRgtcACaMXx/9WNo8+GjgBOfw==} engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} @@ -2278,15 +2242,6 @@ packages: '@types/node': optional: true - '@inquirer/number@4.0.6': - resolution: {integrity: sha512-owMkAY+gR0BggomDTL+Z22x/yfE4ocFrmNyJacOiaDVA/d+iL4IWyk7Ds7JEuDMxuhHFB46Dubdxg1uiD7GlCA==} - engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} - peerDependencies: - '@types/node': '>=18' - peerDependenciesMeta: - '@types/node': - optional: true - '@inquirer/number@4.0.8': resolution: {integrity: sha512-uGLiQah9A0F9UIvJBX52m0CnqtLaym0WpT9V4YZrjZ+YRDKZdwwoEPz06N6w8ChE2lrnsdyhY9sL+Y690Kh9gQ==} engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} @@ -2296,15 +2251,6 @@ packages: '@types/node': optional: true - '@inquirer/password@5.0.6': - resolution: {integrity: sha512-c4BT4SB79iYwPhtGVBSvrlTnn4oFSYnwocafmktpay8RK75T2c2+fLlR0i1Cxw0QOhdy/YULdmpHoy1sOrPzvA==} - engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} - peerDependencies: - '@types/node': '>=18' - peerDependenciesMeta: - '@types/node': - optional: true - '@inquirer/password@5.0.8': resolution: {integrity: sha512-zt1sF4lYLdvPqvmvHdmjOzuUUjuCQ897pdUCO8RbXMUDKXJTTyOQgtn23le+jwcb+MpHl3VAFvzIdxRAf6aPlA==} engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} @@ -2314,15 +2260,6 @@ packages: '@types/node': optional: true - '@inquirer/prompts@8.2.0': - resolution: {integrity: sha512-rqTzOprAj55a27jctS3vhvDDJzYXsr33WXTjODgVOru21NvBo9yIgLIAf7SBdSV0WERVly3dR6TWyp7ZHkvKFA==} - engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} - peerDependencies: - '@types/node': '>=18' - peerDependenciesMeta: - '@types/node': - optional: true - '@inquirer/prompts@8.3.0': resolution: {integrity: sha512-JAj66kjdH/F1+B7LCigjARbwstt3SNUOSzMdjpsvwJmzunK88gJeXmcm95L9nw1KynvFVuY4SzXh/3Y0lvtgSg==} engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} @@ -2332,15 +2269,6 @@ packages: '@types/node': optional: true - '@inquirer/rawlist@5.2.2': - resolution: {integrity: sha512-ld2EhLlf3fsBv7QfxR31NdBecGdS6eeFFZ+Nx88ApjtifeCEc9TNrw8x5tGe+gd6HG1ERczOb4B/bMojiGIp1g==} - engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} - peerDependencies: - '@types/node': '>=18' - peerDependenciesMeta: - '@types/node': - optional: true - '@inquirer/rawlist@5.2.4': resolution: {integrity: sha512-fTuJ5Cq9W286isLxwj6GGyfTjx1Zdk4qppVEPexFuA6yioCCXS4V1zfKroQqw7QdbDPN73xs2DiIAlo55+kBqg==} engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} @@ -2350,15 +2278,6 @@ packages: '@types/node': optional: true - '@inquirer/search@4.1.2': - resolution: {integrity: sha512-kdGbbbWYKldWxpxodKYPmFl/ctBi3DjWlA4LX48jXtqJ7NEeoEKlyFTbE4xNEFcGDi15tvaxRLzCV4A53zqYIw==} - engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} - peerDependencies: - '@types/node': '>=18' - peerDependenciesMeta: - '@types/node': - optional: true - '@inquirer/search@4.1.4': resolution: {integrity: sha512-9yPTxq7LPmYjrGn3DRuaPuPbmC6u3fiWcsE9ggfLcdgO/ICHYgxq7mEy1yJ39brVvgXhtOtvDVjDh9slJxE4LQ==} engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} @@ -2368,15 +2287,6 @@ packages: '@types/node': optional: true - '@inquirer/select@5.0.6': - resolution: {integrity: sha512-9DyVbNCo4q0C3CkGd6zW0SW3NQuuk4Hy0NSbP6zErz2YNWF4EHHJCRzcV34/CDQLraeAQXbHYlMofuUrs6BBZQ==} - engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} - peerDependencies: - '@types/node': '>=18' - peerDependenciesMeta: - '@types/node': - optional: true - '@inquirer/select@5.1.0': resolution: {integrity: sha512-OyYbKnchS1u+zRe14LpYrN8S0wH1vD0p2yKISvSsJdH2TpI87fh4eZdWnpdbrGauCRWDph3NwxRmM4Pcm/hx1Q==} engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} @@ -2395,14 +2305,6 @@ packages: '@types/node': optional: true - '@isaacs/balanced-match@4.0.1': - resolution: {integrity: sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ==} - engines: {node: 20 || >=22} - - '@isaacs/brace-expansion@5.0.1': - resolution: {integrity: sha512-WMz71T1JS624nWj2n2fnYAuPovhv7EUhk69R6i9dsVyzxt5eM3bjwvgk9L+APE1TRscGysAVMANkB0jh0LQZrQ==} - engines: {node: 20 || >=22} - '@isaacs/cliui@8.0.2': resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} engines: {node: '>=12'} @@ -2652,8 +2554,8 @@ packages: cpu: [x64] os: [win32] - '@mswjs/interceptors@0.39.8': - resolution: {integrity: sha512-2+BzZbjRO7Ct61k8fMNHEtoKjeWI9pIlHFTqBwZ5icHpqszIgEZbjb1MW5Z0+bITTCTl3gk4PDBxs9tA/csXvA==} + '@mswjs/interceptors@0.41.3': + resolution: {integrity: sha512-cXu86tF4VQVfwz8W1SPbhoRyHJkti6mjH/XJIxp40jhO4j2k1m4KYrEykxqWPkFF3vrK4rgQppBh//AwyGSXPA==} engines: {node: '>=18'} '@napi-rs/nice-android-arm-eabi@1.1.1': @@ -2825,8 +2727,8 @@ packages: resolution: {integrity: sha512-ER2N6itRkzWbbtVmZ9WKaWxVlKlOeBFF1/7xx+KA5J1xKa4JjUwBdb6tDpk0v1qA+d+VDwHI9qmLcXSWcmi+Rw==} engines: {node: ^20.17.0 || >=22.9.0} - '@octokit/auth-app@8.1.2': - resolution: {integrity: sha512-db8VO0PqXxfzI6GdjtgEFHY9tzqUql5xMFXYA12juq8TeTgPAuiiP3zid4h50lwlIP457p5+56PnJOgd2GGBuw==} + '@octokit/auth-app@8.2.0': + resolution: {integrity: sha512-vVjdtQQwomrZ4V46B9LaCsxsySxGoHsyw6IYBov/TqJVROrlYdyNgw5q6tQbB7KZt53v1l1W53RiqTvpzL907g==} engines: {node: '>= 20'} '@octokit/auth-oauth-app@9.0.3': @@ -3065,20 +2967,20 @@ packages: resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} engines: {node: '>=14'} - '@pnpm/crypto.hash@1000.2.1': - resolution: {integrity: sha512-Kgo3bgYbdKkC5xFvvQshbHa+Nru7k50D91+yyq7enp4Ur2EMp4wg5oXleaC5xu5hC9A/1eSCRI8npCioplxG4A==} + '@pnpm/crypto.hash@1000.2.2': + resolution: {integrity: sha512-W8pLZvXWLlGG5p0Z2nCvtBhlM6uuTcbAbsS15wlGS31jBBJKJW2udLoFeM7qfWPo7E2PqRPGxca7APpVYAjJhw==} engines: {node: '>=18.12'} '@pnpm/crypto.polyfill@1000.1.0': resolution: {integrity: sha512-tNe7a6U4rCpxLMBaR0SIYTdjxGdL0Vwb3G1zY8++sPtHSvy7qd54u8CIB0Z+Y6t5tc9pNYMYCMwhE/wdSY7ltg==} engines: {node: '>=18.12'} - '@pnpm/dependency-path@1001.1.9': - resolution: {integrity: sha512-C1V4H54GyMfLL47q93PmdVRJkJyNVEE6Ht6cFrMSsjgsR7fxXWqjlem7OaA9MMjSTBB/d/g9mV4xZnoT/HAkDQ==} + '@pnpm/dependency-path@1001.1.10': + resolution: {integrity: sha512-PNImtV2SmNTDpLi4HdN86tJPmsOeIxm4VhmxgBVsMrJPEBfkNEWFcflR3wU6XVn/26g9qWdvlNHaawtCjeB93Q==} engines: {node: '>=18.12'} - '@pnpm/graceful-fs@1000.0.1': - resolution: {integrity: sha512-JnzaAVFJIEgwTcB55eww8N3h5B6qJdZqDA2wYkSK+OcTvvMSQb9c2STMhBP6GfkWygG1fs3w8D7JRx9SPZnxJg==} + '@pnpm/graceful-fs@1000.1.0': + resolution: {integrity: sha512-EsMX4slK0qJN2AR0/AYohY5m0HQNYGMNe+jhN74O994zp22/WbX+PbkIKyw3UQn39yQm2+z6SgwklDxbeapsmQ==} engines: {node: '>=18.12'} '@pnpm/types@1001.3.0': @@ -3669,8 +3571,8 @@ packages: '@types/node@22.19.11': resolution: {integrity: sha512-BH7YwL6rA93ReqeQS1c4bsPpcfOmJasG+Fkr6Y59q83f9M1WcBRHR2vM+P9eOisYRcN3ujQoiZY8uk5W+1WL8w==} - '@types/node@24.10.9': - resolution: {integrity: sha512-ne4A0IpG3+2ETuREInjPNhUGis1SFjv1d5asp8MzEAGtOZeTeHVDOYqOgqfhvseqg/iXty2hjBf1zAOb7RNiNw==} + '@types/node@24.10.13': + resolution: {integrity: sha512-oH72nZRfDv9lADUBSo104Aq7gPHpQZc4BTx38r9xf9pg5LfP6EzSyH2n7qFmmxRQXh7YlUXODcYsg6PuTDSxGg==} '@types/npm-package-arg@6.1.4': resolution: {integrity: sha512-vDgdbMy2QXHnAruzlv68pUtXCjmqUk3WrBAsRboRovsOmxbfn/WiYCjmecyKjGztnMps5dWp4Uq2prp+Ilo17Q==} @@ -3714,6 +3616,9 @@ packages: '@types/responselike@1.0.0': resolution: {integrity: sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==} + '@types/retry@0.12.0': + resolution: {integrity: sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==} + '@types/retry@0.12.2': resolution: {integrity: sha512-XISRgDJ2Tc5q4TRqvgJtzsRkFYNJzZrhTdtMoGVBttwzzQJkPnS3WWTFc7kuDRoPtPakl+T+OfdEUjYJj7Jbow==} @@ -5653,8 +5558,8 @@ packages: resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} engines: {node: '>=10'} - firebase@12.8.0: - resolution: {integrity: sha512-S1tCIR3ENecee0tY2cfTHfMkXqkitHfbsvqpCtvsT0Zi9vDB7A4CodAjHfHCjVvu/XtGy1LHLjOasVcF10rCVw==} + firebase@12.9.0: + resolution: {integrity: sha512-CwwTYoqZg6KxygPOaaJqIc4aoLvo0RCRrXoln9GoxLE8QyAwTydBaSLGVlR4WPcuOgN3OEL0tJLT1H4IU/dv7w==} flat-cache@4.0.1: resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} @@ -6442,10 +6347,6 @@ packages: isexe@2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} - isexe@3.1.5: - resolution: {integrity: sha512-6B3tLtFqtQS4ekarvLVMZ+X+VlvQekbe4taUkf/rhVO3d/h0M2rfARm/pXLcPEsjjMsFgrFgSrhQIxcSVrBz8w==} - engines: {node: '>=18'} - isexe@4.0.0: resolution: {integrity: sha512-FFUtZMpoZ8RqHS3XeXEmHWLA4thH+ZxCv2lOiPIn1Xc7CxrqhWzNSDzD+/chS/zbYezmiwWLdQC09JdQKmthOw==} engines: {node: '>=20'} @@ -6502,8 +6403,8 @@ packages: jasmine-core@5.13.0: resolution: {integrity: sha512-vsYjfh7lyqvZX5QgqKc4YH8phs7g96Z8bsdIFNEU3VqXhlHaq+vov/Fgn/sr6MiUczdZkyXRC3TX369Ll4Nzbw==} - jasmine-core@6.0.0: - resolution: {integrity: sha512-fmBb8aruz2mEIDBUGWOGNmxhXwFJs44SSzwbMcBDqQnNChavPTq3Ra9A6WAn6WdxvxWEdakKTcEb3NzeR3yD1A==} + jasmine-core@6.1.0: + resolution: {integrity: sha512-p/tjBw58O6vxKIWMlrU+yys8lqR3+l3UrqwNTT7wpj+dQ7N4etQekFM8joI+cWzPDYqZf54kN+hLC1+s5TvZvg==} jasmine-reporters@2.5.2: resolution: {integrity: sha512-qdewRUuFOSiWhiyWZX8Yx3YNQ9JG51ntBEO4ekLQRpktxFTwUHy24a86zD/Oi2BRTKksEdfWQZcQFqzjqIkPig==} @@ -6519,8 +6420,8 @@ packages: resolution: {integrity: sha512-oLCXIhEb5e0zzjn9GyuvcuisvLBwUjmgz7a0RNGWKwQtJCDld4m+vwKUpAIJVLB5vbmQFdtKhT86/tIZlJ5gYw==} hasBin: true - jasmine@6.0.0: - resolution: {integrity: sha512-eSPL6LPWT39WwvHSEEbRXuSvioXMTheNhIPaeUT1OPmSprDZwj4S29884DkTx6/tyiOWTWB1N+LdW2ZSg74aEA==} + jasmine@6.1.0: + resolution: {integrity: sha512-WPphPqEMY0uBRMjuhRHoVoxQNvJuxIMqz0yIcJ3k3oYxBedeGoH60/NXNgasxnx2FvfXrq5/r+2wssJ7WE8ABw==} hasBin: true jasminewd2@2.2.0: @@ -6989,10 +6890,6 @@ packages: minimalistic-assert@1.0.1: resolution: {integrity: sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==} - minimatch@10.1.1: - resolution: {integrity: sha512-enIvLvRAFZYXJzkCYG5RKmPfrFArdLv+R+lbQ53BmIMLIry74bjKzX6iHAm8WYamJkhSSEabrWN5D97XnKObjQ==} - engines: {node: 20 || >=22} - minimatch@10.2.0: resolution: {integrity: sha512-ugkC31VaVg9cF0DFVoADH12k6061zNZkZON+aX8AWsR9GhPcErkcMBceb6znR8wLERM2AkkOxy2nWRLpT9Jq5w==} engines: {node: 20 || >=22} @@ -7093,9 +6990,9 @@ packages: resolution: {integrity: sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==} hasBin: true - multimatch@7.0.0: - resolution: {integrity: sha512-SYU3HBAdF4psHEL/+jXDKHO95/m5P2RvboHT2Y0WtTttvJLP4H/2WS9WlQPFvF6C8d6SpLw8vjCnQOnVIVOSJQ==} - engines: {node: '>=18'} + multimatch@8.0.0: + resolution: {integrity: sha512-0D10M2/MnEyvoog7tmozlpSqL3HEU1evxUFa3v1dsKYmBDFSP1dLSX4CH2rNjpQ+4Fps8GKmUkCwiKryaKqd9A==} + engines: {node: '>=20'} mute-stream@3.0.0: resolution: {integrity: sha512-dkEJPVvun4FryqBmZ5KhDo0K9iDXAwn08tMLDinNdRBNPcYEDiWYysLcc6k3mjTMlbP9KyylvRpd4wFtwrT9rw==} @@ -7149,8 +7046,8 @@ packages: tailwindcss: optional: true - nock@14.0.10: - resolution: {integrity: sha512-Q7HjkpyPeLa0ZVZC5qpxBt5EyLczFJ91MEewQiIi9taWuA0KB/MDJlUWtON+7dGouVdADTQsf9RA7TZk6D8VMw==} + nock@14.0.11: + resolution: {integrity: sha512-u5xUnYE+UOOBA6SpELJheMCtj2Laqx15Vl70QxKo43Wz/6nMHXS7PrEioXLjXAwhmawdEMNImwKCcPhBJWbKVw==} engines: {node: '>=18.20.0 <20 || >=20.12.1'} node-addon-api@6.1.0: @@ -7398,6 +7295,10 @@ packages: resolution: {integrity: sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ==} engines: {node: '>=8'} + p-retry@4.6.2: + resolution: {integrity: sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==} + engines: {node: '>=8'} + p-retry@6.2.1: resolution: {integrity: sha512-hEt02O4hUct5wtwg4H4KcWgDdm+l1bOaEy/hWzd8xtXB9BqxTWBBhb+2ImAtH4Cv4rPjV76xN3Zumqk3k3AhhQ==} engines: {node: '>=16.17'} @@ -9119,11 +9020,6 @@ packages: engines: {node: '>= 8'} hasBin: true - which@6.0.0: - resolution: {integrity: sha512-f+gEpIKMR9faW/JgAgPK1D7mekkFoqbmiwvNzuhsHetni20QSgzg9Vhn0g2JSJkkfehQnqdUAx7/e15qS1lPxg==} - engines: {node: ^20.17.0 || >=22.9.0} - hasBin: true - which@6.0.1: resolution: {integrity: sha512-oGLe46MIrCRqX7ytPUf66EAYvdeMIZYn3WaocqqKZAxrBpkqHfL/qvTyJ/bTk5+AqHCjXmrv3CEWgy368zhRUg==} engines: {node: ^20.17.0 || >=22.9.0} @@ -9524,14 +9420,14 @@ snapshots: rxjs: 7.8.2 tslib: 2.8.1 - '@angular/ng-dev@https://codeload.github.com/angular/dev-infra-private-ng-dev-builds/tar.gz/b0ab31189ecbeaaafce2bd9259385879b9beabcc(@modelcontextprotocol/sdk@1.26.0(zod@4.3.6))': + '@angular/ng-dev@https://codeload.github.com/angular/dev-infra-private-ng-dev-builds/tar.gz/99c925a35a7decb22cb0dc7b5fb83b2f41876179(@modelcontextprotocol/sdk@1.26.0(zod@4.3.6))': dependencies: '@actions/core': 3.0.0 '@google-cloud/spanner': 8.0.0(supports-color@10.2.2) - '@google/genai': 1.38.0(@modelcontextprotocol/sdk@1.26.0(zod@4.3.6))(bufferutil@4.1.0)(supports-color@10.2.2)(utf-8-validate@6.0.6) - '@inquirer/prompts': 8.2.0(@types/node@24.10.9) - '@inquirer/type': 4.0.3(@types/node@24.10.9) - '@octokit/auth-app': 8.1.2 + '@google/genai': 1.42.0(@modelcontextprotocol/sdk@1.26.0(zod@4.3.6))(bufferutil@4.1.0)(supports-color@10.2.2)(utf-8-validate@6.0.6) + '@inquirer/prompts': 8.3.0(@types/node@24.10.13) + '@inquirer/type': 4.0.3(@types/node@24.10.13) + '@octokit/auth-app': 8.2.0 '@octokit/core': 7.0.6 '@octokit/graphql': 9.0.3 '@octokit/graphql-schema': 15.26.1 @@ -9541,14 +9437,14 @@ snapshots: '@octokit/request-error': 7.1.0 '@octokit/rest': 22.0.1 '@octokit/types': 16.0.0 - '@pnpm/dependency-path': 1001.1.9 + '@pnpm/dependency-path': 1001.1.10 '@types/cli-progress': 3.11.6 '@types/ejs': 3.1.5 '@types/events': 3.0.3 '@types/folder-hash': 4.0.4 '@types/git-raw-commits': 5.0.1 '@types/jasmine': 6.0.0 - '@types/node': 24.10.9 + '@types/node': 24.10.13 '@types/semver': 7.7.1 '@types/which': 3.0.4 '@types/yargs': 17.0.35 @@ -9561,23 +9457,23 @@ snapshots: ejs: 4.0.1 encoding: 0.1.13 fast-glob: 3.3.3 - firebase: 12.8.0 + firebase: 12.9.0 folder-hash: 4.1.1(supports-color@10.2.2) git-raw-commits: 5.0.0(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.2.1) - jasmine: 6.0.0 - jasmine-core: 6.0.0 + jasmine: 6.1.0 + jasmine-core: 6.1.0 jasmine-reporters: 2.5.2 jsonc-parser: 3.3.1 - minimatch: 10.1.1 - multimatch: 7.0.0 - nock: 14.0.10 - semver: 7.7.3 + minimatch: 10.2.2 + multimatch: 8.0.0 + nock: 14.0.11 + semver: 7.7.4 supports-color: 10.2.2 tsx: 4.21.0 typed-graphqlify: 3.1.6 typescript: 5.9.3 utf-8-validate: 6.0.6 - which: 6.0.0 + which: 6.0.1 yaml: 2.8.2 yargs: 18.0.0 zod: 4.3.6 @@ -10524,9 +10420,9 @@ snapshots: '@exodus/bytes@1.14.1': {} - '@firebase/ai@2.7.0(@firebase/app-types@0.9.3)(@firebase/app@0.14.7)': + '@firebase/ai@2.8.0(@firebase/app-types@0.9.3)(@firebase/app@0.14.8)': dependencies: - '@firebase/app': 0.14.7 + '@firebase/app': 0.14.8 '@firebase/app-check-interop-types': 0.3.3 '@firebase/app-types': 0.9.3 '@firebase/component': 0.7.0 @@ -10534,11 +10430,11 @@ snapshots: '@firebase/util': 1.13.0 tslib: 2.8.1 - '@firebase/analytics-compat@0.2.25(@firebase/app-compat@0.5.7)(@firebase/app@0.14.7)': + '@firebase/analytics-compat@0.2.25(@firebase/app-compat@0.5.8)(@firebase/app@0.14.8)': dependencies: - '@firebase/analytics': 0.10.19(@firebase/app@0.14.7) + '@firebase/analytics': 0.10.19(@firebase/app@0.14.8) '@firebase/analytics-types': 0.8.3 - '@firebase/app-compat': 0.5.7 + '@firebase/app-compat': 0.5.8 '@firebase/component': 0.7.0 '@firebase/util': 1.13.0 tslib: 2.8.1 @@ -10547,20 +10443,20 @@ snapshots: '@firebase/analytics-types@0.8.3': {} - '@firebase/analytics@0.10.19(@firebase/app@0.14.7)': + '@firebase/analytics@0.10.19(@firebase/app@0.14.8)': dependencies: - '@firebase/app': 0.14.7 + '@firebase/app': 0.14.8 '@firebase/component': 0.7.0 - '@firebase/installations': 0.6.19(@firebase/app@0.14.7) + '@firebase/installations': 0.6.19(@firebase/app@0.14.8) '@firebase/logger': 0.5.0 '@firebase/util': 1.13.0 tslib: 2.8.1 - '@firebase/app-check-compat@0.4.0(@firebase/app-compat@0.5.7)(@firebase/app@0.14.7)': + '@firebase/app-check-compat@0.4.0(@firebase/app-compat@0.5.8)(@firebase/app@0.14.8)': dependencies: - '@firebase/app-check': 0.11.0(@firebase/app@0.14.7) + '@firebase/app-check': 0.11.0(@firebase/app@0.14.8) '@firebase/app-check-types': 0.5.3 - '@firebase/app-compat': 0.5.7 + '@firebase/app-compat': 0.5.8 '@firebase/component': 0.7.0 '@firebase/logger': 0.5.0 '@firebase/util': 1.13.0 @@ -10572,17 +10468,17 @@ snapshots: '@firebase/app-check-types@0.5.3': {} - '@firebase/app-check@0.11.0(@firebase/app@0.14.7)': + '@firebase/app-check@0.11.0(@firebase/app@0.14.8)': dependencies: - '@firebase/app': 0.14.7 + '@firebase/app': 0.14.8 '@firebase/component': 0.7.0 '@firebase/logger': 0.5.0 '@firebase/util': 1.13.0 tslib: 2.8.1 - '@firebase/app-compat@0.5.7': + '@firebase/app-compat@0.5.8': dependencies: - '@firebase/app': 0.14.7 + '@firebase/app': 0.14.8 '@firebase/component': 0.7.0 '@firebase/logger': 0.5.0 '@firebase/util': 1.13.0 @@ -10590,7 +10486,7 @@ snapshots: '@firebase/app-types@0.9.3': {} - '@firebase/app@0.14.7': + '@firebase/app@0.14.8': dependencies: '@firebase/component': 0.7.0 '@firebase/logger': 0.5.0 @@ -10598,10 +10494,10 @@ snapshots: idb: 7.1.1 tslib: 2.8.1 - '@firebase/auth-compat@0.6.2(@firebase/app-compat@0.5.7)(@firebase/app-types@0.9.3)(@firebase/app@0.14.7)': + '@firebase/auth-compat@0.6.2(@firebase/app-compat@0.5.8)(@firebase/app-types@0.9.3)(@firebase/app@0.14.8)': dependencies: - '@firebase/app-compat': 0.5.7 - '@firebase/auth': 1.12.0(@firebase/app@0.14.7) + '@firebase/app-compat': 0.5.8 + '@firebase/auth': 1.12.0(@firebase/app@0.14.8) '@firebase/auth-types': 0.13.0(@firebase/app-types@0.9.3)(@firebase/util@1.13.0) '@firebase/component': 0.7.0 '@firebase/util': 1.13.0 @@ -10618,9 +10514,9 @@ snapshots: '@firebase/app-types': 0.9.3 '@firebase/util': 1.13.0 - '@firebase/auth@1.12.0(@firebase/app@0.14.7)': + '@firebase/auth@1.12.0(@firebase/app@0.14.8)': dependencies: - '@firebase/app': 0.14.7 + '@firebase/app': 0.14.8 '@firebase/component': 0.7.0 '@firebase/logger': 0.5.0 '@firebase/util': 1.13.0 @@ -10631,9 +10527,9 @@ snapshots: '@firebase/util': 1.13.0 tslib: 2.8.1 - '@firebase/data-connect@0.3.12(@firebase/app@0.14.7)': + '@firebase/data-connect@0.3.12(@firebase/app@0.14.8)': dependencies: - '@firebase/app': 0.14.7 + '@firebase/app': 0.14.8 '@firebase/auth-interop-types': 0.2.4 '@firebase/component': 0.7.0 '@firebase/logger': 0.5.0 @@ -10664,11 +10560,11 @@ snapshots: faye-websocket: 0.11.4 tslib: 2.8.1 - '@firebase/firestore-compat@0.4.4(@firebase/app-compat@0.5.7)(@firebase/app-types@0.9.3)(@firebase/app@0.14.7)': + '@firebase/firestore-compat@0.4.5(@firebase/app-compat@0.5.8)(@firebase/app-types@0.9.3)(@firebase/app@0.14.8)': dependencies: - '@firebase/app-compat': 0.5.7 + '@firebase/app-compat': 0.5.8 '@firebase/component': 0.7.0 - '@firebase/firestore': 4.10.0(@firebase/app@0.14.7) + '@firebase/firestore': 4.11.0(@firebase/app@0.14.8) '@firebase/firestore-types': 3.0.3(@firebase/app-types@0.9.3)(@firebase/util@1.13.0) '@firebase/util': 1.13.0 tslib: 2.8.1 @@ -10681,9 +10577,9 @@ snapshots: '@firebase/app-types': 0.9.3 '@firebase/util': 1.13.0 - '@firebase/firestore@4.10.0(@firebase/app@0.14.7)': + '@firebase/firestore@4.11.0(@firebase/app@0.14.8)': dependencies: - '@firebase/app': 0.14.7 + '@firebase/app': 0.14.8 '@firebase/component': 0.7.0 '@firebase/logger': 0.5.0 '@firebase/util': 1.13.0 @@ -10692,11 +10588,11 @@ snapshots: '@grpc/proto-loader': 0.7.15 tslib: 2.8.1 - '@firebase/functions-compat@0.4.1(@firebase/app-compat@0.5.7)(@firebase/app@0.14.7)': + '@firebase/functions-compat@0.4.1(@firebase/app-compat@0.5.8)(@firebase/app@0.14.8)': dependencies: - '@firebase/app-compat': 0.5.7 + '@firebase/app-compat': 0.5.8 '@firebase/component': 0.7.0 - '@firebase/functions': 0.13.1(@firebase/app@0.14.7) + '@firebase/functions': 0.13.1(@firebase/app@0.14.8) '@firebase/functions-types': 0.6.3 '@firebase/util': 1.13.0 tslib: 2.8.1 @@ -10705,9 +10601,9 @@ snapshots: '@firebase/functions-types@0.6.3': {} - '@firebase/functions@0.13.1(@firebase/app@0.14.7)': + '@firebase/functions@0.13.1(@firebase/app@0.14.8)': dependencies: - '@firebase/app': 0.14.7 + '@firebase/app': 0.14.8 '@firebase/app-check-interop-types': 0.3.3 '@firebase/auth-interop-types': 0.2.4 '@firebase/component': 0.7.0 @@ -10715,11 +10611,11 @@ snapshots: '@firebase/util': 1.13.0 tslib: 2.8.1 - '@firebase/installations-compat@0.2.19(@firebase/app-compat@0.5.7)(@firebase/app-types@0.9.3)(@firebase/app@0.14.7)': + '@firebase/installations-compat@0.2.19(@firebase/app-compat@0.5.8)(@firebase/app-types@0.9.3)(@firebase/app@0.14.8)': dependencies: - '@firebase/app-compat': 0.5.7 + '@firebase/app-compat': 0.5.8 '@firebase/component': 0.7.0 - '@firebase/installations': 0.6.19(@firebase/app@0.14.7) + '@firebase/installations': 0.6.19(@firebase/app@0.14.8) '@firebase/installations-types': 0.5.3(@firebase/app-types@0.9.3) '@firebase/util': 1.13.0 tslib: 2.8.1 @@ -10731,9 +10627,9 @@ snapshots: dependencies: '@firebase/app-types': 0.9.3 - '@firebase/installations@0.6.19(@firebase/app@0.14.7)': + '@firebase/installations@0.6.19(@firebase/app@0.14.8)': dependencies: - '@firebase/app': 0.14.7 + '@firebase/app': 0.14.8 '@firebase/component': 0.7.0 '@firebase/util': 1.13.0 idb: 7.1.1 @@ -10743,11 +10639,11 @@ snapshots: dependencies: tslib: 2.8.1 - '@firebase/messaging-compat@0.2.23(@firebase/app-compat@0.5.7)(@firebase/app@0.14.7)': + '@firebase/messaging-compat@0.2.23(@firebase/app-compat@0.5.8)(@firebase/app@0.14.8)': dependencies: - '@firebase/app-compat': 0.5.7 + '@firebase/app-compat': 0.5.8 '@firebase/component': 0.7.0 - '@firebase/messaging': 0.12.23(@firebase/app@0.14.7) + '@firebase/messaging': 0.12.23(@firebase/app@0.14.8) '@firebase/util': 1.13.0 tslib: 2.8.1 transitivePeerDependencies: @@ -10755,22 +10651,22 @@ snapshots: '@firebase/messaging-interop-types@0.2.3': {} - '@firebase/messaging@0.12.23(@firebase/app@0.14.7)': + '@firebase/messaging@0.12.23(@firebase/app@0.14.8)': dependencies: - '@firebase/app': 0.14.7 + '@firebase/app': 0.14.8 '@firebase/component': 0.7.0 - '@firebase/installations': 0.6.19(@firebase/app@0.14.7) + '@firebase/installations': 0.6.19(@firebase/app@0.14.8) '@firebase/messaging-interop-types': 0.2.3 '@firebase/util': 1.13.0 idb: 7.1.1 tslib: 2.8.1 - '@firebase/performance-compat@0.2.22(@firebase/app-compat@0.5.7)(@firebase/app@0.14.7)': + '@firebase/performance-compat@0.2.22(@firebase/app-compat@0.5.8)(@firebase/app@0.14.8)': dependencies: - '@firebase/app-compat': 0.5.7 + '@firebase/app-compat': 0.5.8 '@firebase/component': 0.7.0 '@firebase/logger': 0.5.0 - '@firebase/performance': 0.7.9(@firebase/app@0.14.7) + '@firebase/performance': 0.7.9(@firebase/app@0.14.8) '@firebase/performance-types': 0.2.3 '@firebase/util': 1.13.0 tslib: 2.8.1 @@ -10779,22 +10675,22 @@ snapshots: '@firebase/performance-types@0.2.3': {} - '@firebase/performance@0.7.9(@firebase/app@0.14.7)': + '@firebase/performance@0.7.9(@firebase/app@0.14.8)': dependencies: - '@firebase/app': 0.14.7 + '@firebase/app': 0.14.8 '@firebase/component': 0.7.0 - '@firebase/installations': 0.6.19(@firebase/app@0.14.7) + '@firebase/installations': 0.6.19(@firebase/app@0.14.8) '@firebase/logger': 0.5.0 '@firebase/util': 1.13.0 tslib: 2.8.1 web-vitals: 4.2.4 - '@firebase/remote-config-compat@0.2.21(@firebase/app-compat@0.5.7)(@firebase/app@0.14.7)': + '@firebase/remote-config-compat@0.2.21(@firebase/app-compat@0.5.8)(@firebase/app@0.14.8)': dependencies: - '@firebase/app-compat': 0.5.7 + '@firebase/app-compat': 0.5.8 '@firebase/component': 0.7.0 '@firebase/logger': 0.5.0 - '@firebase/remote-config': 0.8.0(@firebase/app@0.14.7) + '@firebase/remote-config': 0.8.0(@firebase/app@0.14.8) '@firebase/remote-config-types': 0.5.0 '@firebase/util': 1.13.0 tslib: 2.8.1 @@ -10803,20 +10699,20 @@ snapshots: '@firebase/remote-config-types@0.5.0': {} - '@firebase/remote-config@0.8.0(@firebase/app@0.14.7)': + '@firebase/remote-config@0.8.0(@firebase/app@0.14.8)': dependencies: - '@firebase/app': 0.14.7 + '@firebase/app': 0.14.8 '@firebase/component': 0.7.0 - '@firebase/installations': 0.6.19(@firebase/app@0.14.7) + '@firebase/installations': 0.6.19(@firebase/app@0.14.8) '@firebase/logger': 0.5.0 '@firebase/util': 1.13.0 tslib: 2.8.1 - '@firebase/storage-compat@0.4.0(@firebase/app-compat@0.5.7)(@firebase/app-types@0.9.3)(@firebase/app@0.14.7)': + '@firebase/storage-compat@0.4.0(@firebase/app-compat@0.5.8)(@firebase/app-types@0.9.3)(@firebase/app@0.14.8)': dependencies: - '@firebase/app-compat': 0.5.7 + '@firebase/app-compat': 0.5.8 '@firebase/component': 0.7.0 - '@firebase/storage': 0.14.0(@firebase/app@0.14.7) + '@firebase/storage': 0.14.0(@firebase/app@0.14.8) '@firebase/storage-types': 0.8.3(@firebase/app-types@0.9.3)(@firebase/util@1.13.0) '@firebase/util': 1.13.0 tslib: 2.8.1 @@ -10829,9 +10725,9 @@ snapshots: '@firebase/app-types': 0.9.3 '@firebase/util': 1.13.0 - '@firebase/storage@0.14.0(@firebase/app@0.14.7)': + '@firebase/storage@0.14.0(@firebase/app@0.14.8)': dependencies: - '@firebase/app': 0.14.7 + '@firebase/app': 0.14.8 '@firebase/component': 0.7.0 '@firebase/util': 1.13.0 tslib: 2.8.1 @@ -10903,9 +10799,10 @@ snapshots: transitivePeerDependencies: - supports-color - '@google/genai@1.38.0(@modelcontextprotocol/sdk@1.26.0(zod@4.3.6))(bufferutil@4.1.0)(supports-color@10.2.2)(utf-8-validate@6.0.6)': + '@google/genai@1.42.0(@modelcontextprotocol/sdk@1.26.0(zod@4.3.6))(bufferutil@4.1.0)(supports-color@10.2.2)(utf-8-validate@6.0.6)': dependencies: google-auth-library: 10.5.0(supports-color@10.2.2) + p-retry: 4.6.2 protobufjs: 7.5.4 ws: 8.19.0(bufferutil@4.1.0)(utf-8-validate@6.0.6) optionalDependencies: @@ -10961,213 +10858,122 @@ snapshots: '@inquirer/ansi@2.0.3': {} - '@inquirer/checkbox@5.0.6(@types/node@24.10.9)': + '@inquirer/checkbox@5.1.0(@types/node@24.10.13)': dependencies: '@inquirer/ansi': 2.0.3 - '@inquirer/core': 11.1.5(@types/node@24.10.9) + '@inquirer/core': 11.1.5(@types/node@24.10.13) '@inquirer/figures': 2.0.3 - '@inquirer/type': 4.0.3(@types/node@24.10.9) + '@inquirer/type': 4.0.3(@types/node@24.10.13) optionalDependencies: - '@types/node': 24.10.9 + '@types/node': 24.10.13 - '@inquirer/checkbox@5.1.0(@types/node@24.10.9)': + '@inquirer/confirm@6.0.8(@types/node@24.10.13)': dependencies: - '@inquirer/ansi': 2.0.3 - '@inquirer/core': 11.1.5(@types/node@24.10.9) - '@inquirer/figures': 2.0.3 - '@inquirer/type': 4.0.3(@types/node@24.10.9) + '@inquirer/core': 11.1.5(@types/node@24.10.13) + '@inquirer/type': 4.0.3(@types/node@24.10.13) optionalDependencies: - '@types/node': 24.10.9 + '@types/node': 24.10.13 - '@inquirer/confirm@6.0.8(@types/node@24.10.9)': - dependencies: - '@inquirer/core': 11.1.5(@types/node@24.10.9) - '@inquirer/type': 4.0.3(@types/node@24.10.9) - optionalDependencies: - '@types/node': 24.10.9 - - '@inquirer/core@11.1.5(@types/node@24.10.9)': + '@inquirer/core@11.1.5(@types/node@24.10.13)': dependencies: '@inquirer/ansi': 2.0.3 '@inquirer/figures': 2.0.3 - '@inquirer/type': 4.0.3(@types/node@24.10.9) + '@inquirer/type': 4.0.3(@types/node@24.10.13) cli-width: 4.1.0 fast-wrap-ansi: 0.2.0 mute-stream: 3.0.0 signal-exit: 4.1.0 optionalDependencies: - '@types/node': 24.10.9 + '@types/node': 24.10.13 - '@inquirer/editor@5.0.6(@types/node@24.10.9)': + '@inquirer/editor@5.0.8(@types/node@24.10.13)': dependencies: - '@inquirer/core': 11.1.5(@types/node@24.10.9) - '@inquirer/external-editor': 2.0.3(@types/node@24.10.9) - '@inquirer/type': 4.0.3(@types/node@24.10.9) + '@inquirer/core': 11.1.5(@types/node@24.10.13) + '@inquirer/external-editor': 2.0.3(@types/node@24.10.13) + '@inquirer/type': 4.0.3(@types/node@24.10.13) optionalDependencies: - '@types/node': 24.10.9 + '@types/node': 24.10.13 - '@inquirer/editor@5.0.8(@types/node@24.10.9)': + '@inquirer/expand@5.0.8(@types/node@24.10.13)': dependencies: - '@inquirer/core': 11.1.5(@types/node@24.10.9) - '@inquirer/external-editor': 2.0.3(@types/node@24.10.9) - '@inquirer/type': 4.0.3(@types/node@24.10.9) + '@inquirer/core': 11.1.5(@types/node@24.10.13) + '@inquirer/type': 4.0.3(@types/node@24.10.13) optionalDependencies: - '@types/node': 24.10.9 + '@types/node': 24.10.13 - '@inquirer/expand@5.0.6(@types/node@24.10.9)': - dependencies: - '@inquirer/core': 11.1.5(@types/node@24.10.9) - '@inquirer/type': 4.0.3(@types/node@24.10.9) - optionalDependencies: - '@types/node': 24.10.9 - - '@inquirer/expand@5.0.8(@types/node@24.10.9)': - dependencies: - '@inquirer/core': 11.1.5(@types/node@24.10.9) - '@inquirer/type': 4.0.3(@types/node@24.10.9) - optionalDependencies: - '@types/node': 24.10.9 - - '@inquirer/external-editor@2.0.3(@types/node@24.10.9)': + '@inquirer/external-editor@2.0.3(@types/node@24.10.13)': dependencies: chardet: 2.1.1 iconv-lite: 0.7.2 optionalDependencies: - '@types/node': 24.10.9 + '@types/node': 24.10.13 '@inquirer/figures@2.0.3': {} - '@inquirer/input@5.0.6(@types/node@24.10.9)': - dependencies: - '@inquirer/core': 11.1.5(@types/node@24.10.9) - '@inquirer/type': 4.0.3(@types/node@24.10.9) - optionalDependencies: - '@types/node': 24.10.9 - - '@inquirer/input@5.0.8(@types/node@24.10.9)': + '@inquirer/input@5.0.8(@types/node@24.10.13)': dependencies: - '@inquirer/core': 11.1.5(@types/node@24.10.9) - '@inquirer/type': 4.0.3(@types/node@24.10.9) + '@inquirer/core': 11.1.5(@types/node@24.10.13) + '@inquirer/type': 4.0.3(@types/node@24.10.13) optionalDependencies: - '@types/node': 24.10.9 + '@types/node': 24.10.13 - '@inquirer/number@4.0.6(@types/node@24.10.9)': + '@inquirer/number@4.0.8(@types/node@24.10.13)': dependencies: - '@inquirer/core': 11.1.5(@types/node@24.10.9) - '@inquirer/type': 4.0.3(@types/node@24.10.9) + '@inquirer/core': 11.1.5(@types/node@24.10.13) + '@inquirer/type': 4.0.3(@types/node@24.10.13) optionalDependencies: - '@types/node': 24.10.9 + '@types/node': 24.10.13 - '@inquirer/number@4.0.8(@types/node@24.10.9)': - dependencies: - '@inquirer/core': 11.1.5(@types/node@24.10.9) - '@inquirer/type': 4.0.3(@types/node@24.10.9) - optionalDependencies: - '@types/node': 24.10.9 - - '@inquirer/password@5.0.6(@types/node@24.10.9)': + '@inquirer/password@5.0.8(@types/node@24.10.13)': dependencies: '@inquirer/ansi': 2.0.3 - '@inquirer/core': 11.1.5(@types/node@24.10.9) - '@inquirer/type': 4.0.3(@types/node@24.10.9) - optionalDependencies: - '@types/node': 24.10.9 - - '@inquirer/password@5.0.8(@types/node@24.10.9)': - dependencies: - '@inquirer/ansi': 2.0.3 - '@inquirer/core': 11.1.5(@types/node@24.10.9) - '@inquirer/type': 4.0.3(@types/node@24.10.9) - optionalDependencies: - '@types/node': 24.10.9 - - '@inquirer/prompts@8.2.0(@types/node@24.10.9)': - dependencies: - '@inquirer/checkbox': 5.0.6(@types/node@24.10.9) - '@inquirer/confirm': 6.0.8(@types/node@24.10.9) - '@inquirer/editor': 5.0.6(@types/node@24.10.9) - '@inquirer/expand': 5.0.6(@types/node@24.10.9) - '@inquirer/input': 5.0.6(@types/node@24.10.9) - '@inquirer/number': 4.0.6(@types/node@24.10.9) - '@inquirer/password': 5.0.6(@types/node@24.10.9) - '@inquirer/rawlist': 5.2.2(@types/node@24.10.9) - '@inquirer/search': 4.1.2(@types/node@24.10.9) - '@inquirer/select': 5.0.6(@types/node@24.10.9) - optionalDependencies: - '@types/node': 24.10.9 - - '@inquirer/prompts@8.3.0(@types/node@24.10.9)': - dependencies: - '@inquirer/checkbox': 5.1.0(@types/node@24.10.9) - '@inquirer/confirm': 6.0.8(@types/node@24.10.9) - '@inquirer/editor': 5.0.8(@types/node@24.10.9) - '@inquirer/expand': 5.0.8(@types/node@24.10.9) - '@inquirer/input': 5.0.8(@types/node@24.10.9) - '@inquirer/number': 4.0.8(@types/node@24.10.9) - '@inquirer/password': 5.0.8(@types/node@24.10.9) - '@inquirer/rawlist': 5.2.4(@types/node@24.10.9) - '@inquirer/search': 4.1.4(@types/node@24.10.9) - '@inquirer/select': 5.1.0(@types/node@24.10.9) + '@inquirer/core': 11.1.5(@types/node@24.10.13) + '@inquirer/type': 4.0.3(@types/node@24.10.13) optionalDependencies: - '@types/node': 24.10.9 - - '@inquirer/rawlist@5.2.2(@types/node@24.10.9)': - dependencies: - '@inquirer/core': 11.1.5(@types/node@24.10.9) - '@inquirer/type': 4.0.3(@types/node@24.10.9) - optionalDependencies: - '@types/node': 24.10.9 - - '@inquirer/rawlist@5.2.4(@types/node@24.10.9)': - dependencies: - '@inquirer/core': 11.1.5(@types/node@24.10.9) - '@inquirer/type': 4.0.3(@types/node@24.10.9) - optionalDependencies: - '@types/node': 24.10.9 - - '@inquirer/search@4.1.2(@types/node@24.10.9)': - dependencies: - '@inquirer/core': 11.1.5(@types/node@24.10.9) - '@inquirer/figures': 2.0.3 - '@inquirer/type': 4.0.3(@types/node@24.10.9) + '@types/node': 24.10.13 + + '@inquirer/prompts@8.3.0(@types/node@24.10.13)': + dependencies: + '@inquirer/checkbox': 5.1.0(@types/node@24.10.13) + '@inquirer/confirm': 6.0.8(@types/node@24.10.13) + '@inquirer/editor': 5.0.8(@types/node@24.10.13) + '@inquirer/expand': 5.0.8(@types/node@24.10.13) + '@inquirer/input': 5.0.8(@types/node@24.10.13) + '@inquirer/number': 4.0.8(@types/node@24.10.13) + '@inquirer/password': 5.0.8(@types/node@24.10.13) + '@inquirer/rawlist': 5.2.4(@types/node@24.10.13) + '@inquirer/search': 4.1.4(@types/node@24.10.13) + '@inquirer/select': 5.1.0(@types/node@24.10.13) optionalDependencies: - '@types/node': 24.10.9 + '@types/node': 24.10.13 - '@inquirer/search@4.1.4(@types/node@24.10.9)': + '@inquirer/rawlist@5.2.4(@types/node@24.10.13)': dependencies: - '@inquirer/core': 11.1.5(@types/node@24.10.9) - '@inquirer/figures': 2.0.3 - '@inquirer/type': 4.0.3(@types/node@24.10.9) + '@inquirer/core': 11.1.5(@types/node@24.10.13) + '@inquirer/type': 4.0.3(@types/node@24.10.13) optionalDependencies: - '@types/node': 24.10.9 + '@types/node': 24.10.13 - '@inquirer/select@5.0.6(@types/node@24.10.9)': + '@inquirer/search@4.1.4(@types/node@24.10.13)': dependencies: - '@inquirer/ansi': 2.0.3 - '@inquirer/core': 11.1.5(@types/node@24.10.9) + '@inquirer/core': 11.1.5(@types/node@24.10.13) '@inquirer/figures': 2.0.3 - '@inquirer/type': 4.0.3(@types/node@24.10.9) + '@inquirer/type': 4.0.3(@types/node@24.10.13) optionalDependencies: - '@types/node': 24.10.9 + '@types/node': 24.10.13 - '@inquirer/select@5.1.0(@types/node@24.10.9)': + '@inquirer/select@5.1.0(@types/node@24.10.13)': dependencies: '@inquirer/ansi': 2.0.3 - '@inquirer/core': 11.1.5(@types/node@24.10.9) + '@inquirer/core': 11.1.5(@types/node@24.10.13) '@inquirer/figures': 2.0.3 - '@inquirer/type': 4.0.3(@types/node@24.10.9) + '@inquirer/type': 4.0.3(@types/node@24.10.13) optionalDependencies: - '@types/node': 24.10.9 + '@types/node': 24.10.13 - '@inquirer/type@4.0.3(@types/node@24.10.9)': + '@inquirer/type@4.0.3(@types/node@24.10.13)': optionalDependencies: - '@types/node': 24.10.9 - - '@isaacs/balanced-match@4.0.1': {} - - '@isaacs/brace-expansion@5.0.1': - dependencies: - '@isaacs/balanced-match': 4.0.1 + '@types/node': 24.10.13 '@isaacs/cliui@8.0.2': dependencies: @@ -11348,10 +11154,10 @@ snapshots: '@leichtgewicht/ip-codec@2.0.5': {} - '@listr2/prompt-adapter-inquirer@4.1.1(@inquirer/prompts@8.3.0(@types/node@24.10.9))(@types/node@24.10.9)(listr2@10.1.0)': + '@listr2/prompt-adapter-inquirer@4.1.1(@inquirer/prompts@8.3.0(@types/node@24.10.13))(@types/node@24.10.13)(listr2@10.1.0)': dependencies: - '@inquirer/prompts': 8.3.0(@types/node@24.10.9) - '@inquirer/type': 4.0.3(@types/node@24.10.9) + '@inquirer/prompts': 8.3.0(@types/node@24.10.13) + '@inquirer/type': 4.0.3(@types/node@24.10.13) listr2: 10.1.0 transitivePeerDependencies: - '@types/node' @@ -11417,7 +11223,7 @@ snapshots: '@msgpackr-extract/msgpackr-extract-win32-x64@3.0.3': optional: true - '@mswjs/interceptors@0.39.8': + '@mswjs/interceptors@0.41.3': dependencies: '@open-draft/deferred-promise': 2.2.0 '@open-draft/logger': 0.3.0 @@ -11578,7 +11384,7 @@ snapshots: transitivePeerDependencies: - supports-color - '@octokit/auth-app@8.1.2': + '@octokit/auth-app@8.2.0': dependencies: '@octokit/auth-oauth-app': 9.0.3 '@octokit/auth-oauth-user': 6.0.2 @@ -11868,21 +11674,21 @@ snapshots: '@pkgjs/parseargs@0.11.0': optional: true - '@pnpm/crypto.hash@1000.2.1': + '@pnpm/crypto.hash@1000.2.2': dependencies: '@pnpm/crypto.polyfill': 1000.1.0 - '@pnpm/graceful-fs': 1000.0.1 + '@pnpm/graceful-fs': 1000.1.0 ssri: 10.0.5 '@pnpm/crypto.polyfill@1000.1.0': {} - '@pnpm/dependency-path@1001.1.9': + '@pnpm/dependency-path@1001.1.10': dependencies: - '@pnpm/crypto.hash': 1000.2.1 + '@pnpm/crypto.hash': 1000.2.2 '@pnpm/types': 1001.3.0 semver: 7.7.4 - '@pnpm/graceful-fs@1000.0.1': + '@pnpm/graceful-fs@1000.1.0': dependencies: graceful-fs: 4.2.11 @@ -12423,7 +12229,7 @@ snapshots: dependencies: undici-types: 7.22.0 - '@types/node@24.10.9': + '@types/node@24.10.13': dependencies: undici-types: 7.22.0 @@ -12475,6 +12281,8 @@ snapshots: dependencies: '@types/node': 22.19.11 + '@types/retry@0.12.0': {} + '@types/retry@0.12.2': {} '@types/selenium-webdriver@3.0.26': {} @@ -12797,11 +12605,11 @@ snapshots: lodash: 4.17.21 minimatch: 7.4.6 - '@vitejs/plugin-basic-ssl@2.1.4(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))': + '@vitejs/plugin-basic-ssl@2.1.4(vite@7.3.1(@types/node@24.10.13)(jiti@2.6.1)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))': dependencies: - vite: 7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) + vite: 7.3.1(@types/node@24.10.13)(jiti@2.6.1)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) - '@vitest/coverage-v8@4.0.18(vitest@4.0.18(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(jiti@2.6.1)(jsdom@28.1.0)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))': + '@vitest/coverage-v8@4.0.18(vitest@4.0.18(@opentelemetry/api@1.9.0)(@types/node@24.10.13)(jiti@2.6.1)(jsdom@28.1.0)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))': dependencies: '@bcoe/v8-coverage': 1.0.2 '@vitest/utils': 4.0.18 @@ -12813,7 +12621,7 @@ snapshots: obug: 2.1.1 std-env: 3.10.0 tinyrainbow: 3.0.3 - vitest: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(jiti@2.6.1)(jsdom@28.1.0)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) + vitest: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@24.10.13)(jiti@2.6.1)(jsdom@28.1.0)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) '@vitest/expect@4.0.18': dependencies: @@ -12824,13 +12632,13 @@ snapshots: chai: 6.2.2 tinyrainbow: 3.0.3 - '@vitest/mocker@4.0.18(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))': + '@vitest/mocker@4.0.18(vite@7.3.1(@types/node@24.10.13)(jiti@2.6.1)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))': dependencies: '@vitest/spy': 4.0.18 estree-walker: 3.0.3 magic-string: 0.30.21 optionalDependencies: - vite: 7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) + vite: 7.3.1(@types/node@24.10.13)(jiti@2.6.1)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) '@vitest/pretty-format@4.0.18': dependencies: @@ -14973,35 +14781,35 @@ snapshots: locate-path: 6.0.0 path-exists: 4.0.0 - firebase@12.8.0: + firebase@12.9.0: dependencies: - '@firebase/ai': 2.7.0(@firebase/app-types@0.9.3)(@firebase/app@0.14.7) - '@firebase/analytics': 0.10.19(@firebase/app@0.14.7) - '@firebase/analytics-compat': 0.2.25(@firebase/app-compat@0.5.7)(@firebase/app@0.14.7) - '@firebase/app': 0.14.7 - '@firebase/app-check': 0.11.0(@firebase/app@0.14.7) - '@firebase/app-check-compat': 0.4.0(@firebase/app-compat@0.5.7)(@firebase/app@0.14.7) - '@firebase/app-compat': 0.5.7 + '@firebase/ai': 2.8.0(@firebase/app-types@0.9.3)(@firebase/app@0.14.8) + '@firebase/analytics': 0.10.19(@firebase/app@0.14.8) + '@firebase/analytics-compat': 0.2.25(@firebase/app-compat@0.5.8)(@firebase/app@0.14.8) + '@firebase/app': 0.14.8 + '@firebase/app-check': 0.11.0(@firebase/app@0.14.8) + '@firebase/app-check-compat': 0.4.0(@firebase/app-compat@0.5.8)(@firebase/app@0.14.8) + '@firebase/app-compat': 0.5.8 '@firebase/app-types': 0.9.3 - '@firebase/auth': 1.12.0(@firebase/app@0.14.7) - '@firebase/auth-compat': 0.6.2(@firebase/app-compat@0.5.7)(@firebase/app-types@0.9.3)(@firebase/app@0.14.7) - '@firebase/data-connect': 0.3.12(@firebase/app@0.14.7) + '@firebase/auth': 1.12.0(@firebase/app@0.14.8) + '@firebase/auth-compat': 0.6.2(@firebase/app-compat@0.5.8)(@firebase/app-types@0.9.3)(@firebase/app@0.14.8) + '@firebase/data-connect': 0.3.12(@firebase/app@0.14.8) '@firebase/database': 1.1.0 '@firebase/database-compat': 2.1.0 - '@firebase/firestore': 4.10.0(@firebase/app@0.14.7) - '@firebase/firestore-compat': 0.4.4(@firebase/app-compat@0.5.7)(@firebase/app-types@0.9.3)(@firebase/app@0.14.7) - '@firebase/functions': 0.13.1(@firebase/app@0.14.7) - '@firebase/functions-compat': 0.4.1(@firebase/app-compat@0.5.7)(@firebase/app@0.14.7) - '@firebase/installations': 0.6.19(@firebase/app@0.14.7) - '@firebase/installations-compat': 0.2.19(@firebase/app-compat@0.5.7)(@firebase/app-types@0.9.3)(@firebase/app@0.14.7) - '@firebase/messaging': 0.12.23(@firebase/app@0.14.7) - '@firebase/messaging-compat': 0.2.23(@firebase/app-compat@0.5.7)(@firebase/app@0.14.7) - '@firebase/performance': 0.7.9(@firebase/app@0.14.7) - '@firebase/performance-compat': 0.2.22(@firebase/app-compat@0.5.7)(@firebase/app@0.14.7) - '@firebase/remote-config': 0.8.0(@firebase/app@0.14.7) - '@firebase/remote-config-compat': 0.2.21(@firebase/app-compat@0.5.7)(@firebase/app@0.14.7) - '@firebase/storage': 0.14.0(@firebase/app@0.14.7) - '@firebase/storage-compat': 0.4.0(@firebase/app-compat@0.5.7)(@firebase/app-types@0.9.3)(@firebase/app@0.14.7) + '@firebase/firestore': 4.11.0(@firebase/app@0.14.8) + '@firebase/firestore-compat': 0.4.5(@firebase/app-compat@0.5.8)(@firebase/app-types@0.9.3)(@firebase/app@0.14.8) + '@firebase/functions': 0.13.1(@firebase/app@0.14.8) + '@firebase/functions-compat': 0.4.1(@firebase/app-compat@0.5.8)(@firebase/app@0.14.8) + '@firebase/installations': 0.6.19(@firebase/app@0.14.8) + '@firebase/installations-compat': 0.2.19(@firebase/app-compat@0.5.8)(@firebase/app-types@0.9.3)(@firebase/app@0.14.8) + '@firebase/messaging': 0.12.23(@firebase/app@0.14.8) + '@firebase/messaging-compat': 0.2.23(@firebase/app-compat@0.5.8)(@firebase/app@0.14.8) + '@firebase/performance': 0.7.9(@firebase/app@0.14.8) + '@firebase/performance-compat': 0.2.22(@firebase/app-compat@0.5.8)(@firebase/app@0.14.8) + '@firebase/remote-config': 0.8.0(@firebase/app@0.14.8) + '@firebase/remote-config-compat': 0.2.21(@firebase/app-compat@0.5.8)(@firebase/app@0.14.8) + '@firebase/storage': 0.14.0(@firebase/app@0.14.8) + '@firebase/storage-compat': 0.4.0(@firebase/app-compat@0.5.8)(@firebase/app-types@0.9.3)(@firebase/app@0.14.8) '@firebase/util': 1.13.0 transitivePeerDependencies: - '@react-native-async-storage/async-storage' @@ -15830,8 +15638,6 @@ snapshots: isexe@2.0.0: {} - isexe@3.1.5: {} - isexe@4.0.0: {} isobject@3.0.1: {} @@ -15901,7 +15707,7 @@ snapshots: jasmine-core@5.13.0: {} - jasmine-core@6.0.0: {} + jasmine-core@6.1.0: {} jasmine-reporters@2.5.2: dependencies: @@ -15923,11 +15729,11 @@ snapshots: glob: 10.5.0 jasmine-core: 5.13.0 - jasmine@6.0.0: + jasmine@6.1.0: dependencies: '@jasminejs/reporters': 1.0.0 glob: 13.0.3 - jasmine-core: 6.0.0 + jasmine-core: 6.1.0 jasminewd2@2.2.0: {} @@ -16489,10 +16295,6 @@ snapshots: minimalistic-assert@1.0.1: {} - minimatch@10.1.1: - dependencies: - '@isaacs/brace-expansion': 5.0.1 - minimatch@10.2.0: dependencies: brace-expansion: 5.0.2 @@ -16595,11 +16397,11 @@ snapshots: dns-packet: 5.6.1 thunky: 1.1.0 - multimatch@7.0.0: + multimatch@8.0.0: dependencies: array-differ: 4.0.0 array-union: 3.0.1 - minimatch: 9.0.5 + minimatch: 10.2.2 mute-stream@3.0.0: {} @@ -16654,9 +16456,9 @@ snapshots: optionalDependencies: rollup: 4.57.1 - nock@14.0.10: + nock@14.0.11: dependencies: - '@mswjs/interceptors': 0.39.8 + '@mswjs/interceptors': 0.41.3 json-stringify-safe: 5.0.1 propagate: 2.0.1 @@ -16929,6 +16731,11 @@ snapshots: eventemitter3: 4.0.7 p-timeout: 3.2.0 + p-retry@4.6.2: + dependencies: + '@types/retry': 0.12.0 + retry: 0.13.1 + p-retry@6.2.1: dependencies: '@types/retry': 0.12.2 @@ -18751,7 +18558,7 @@ snapshots: core-util-is: 1.0.2 extsprintf: 1.3.0 - vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2): + vite@7.3.1(@types/node@24.10.13)(jiti@2.6.1)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2): dependencies: esbuild: 0.27.3 fdir: 6.5.0(picomatch@4.0.3) @@ -18760,7 +18567,7 @@ snapshots: rollup: 4.57.1 tinyglobby: 0.2.15 optionalDependencies: - '@types/node': 24.10.9 + '@types/node': 24.10.13 fsevents: 2.3.3 jiti: 2.6.1 less: 4.4.2 @@ -18769,10 +18576,10 @@ snapshots: tsx: 4.21.0 yaml: 2.8.2 - vitest@4.0.18(@opentelemetry/api@1.9.0)(@types/node@24.10.9)(jiti@2.6.1)(jsdom@28.1.0)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2): + vitest@4.0.18(@opentelemetry/api@1.9.0)(@types/node@24.10.13)(jiti@2.6.1)(jsdom@28.1.0)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2): dependencies: '@vitest/expect': 4.0.18 - '@vitest/mocker': 4.0.18(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)) + '@vitest/mocker': 4.0.18(vite@7.3.1(@types/node@24.10.13)(jiti@2.6.1)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)) '@vitest/pretty-format': 4.0.18 '@vitest/runner': 4.0.18 '@vitest/snapshot': 4.0.18 @@ -18789,11 +18596,11 @@ snapshots: tinyexec: 1.0.2 tinyglobby: 0.2.15 tinyrainbow: 3.0.3 - vite: 7.3.1(@types/node@24.10.9)(jiti@2.6.1)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) + vite: 7.3.1(@types/node@24.10.13)(jiti@2.6.1)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) why-is-node-running: 2.3.0 optionalDependencies: '@opentelemetry/api': 1.9.0 - '@types/node': 24.10.9 + '@types/node': 24.10.13 jsdom: 28.1.0 transitivePeerDependencies: - jiti @@ -19033,10 +18840,6 @@ snapshots: dependencies: isexe: 2.0.0 - which@6.0.0: - dependencies: - isexe: 3.1.5 - which@6.0.1: dependencies: isexe: 4.0.0 diff --git a/tests/e2e/ng-snapshot/package.json b/tests/e2e/ng-snapshot/package.json index 09d404e9a2f3..81c9cf1a0b3f 100644 --- a/tests/e2e/ng-snapshot/package.json +++ b/tests/e2e/ng-snapshot/package.json @@ -2,21 +2,21 @@ "description": "snapshot versions of Angular for e2e testing", "private": true, "dependencies": { - "@angular/animations": "github:angular/animations-builds#ab35ce3c6ffee90f37ab31029d18044ea8d8ef8d", - "@angular/cdk": "github:angular/cdk-builds#73fc23814a95f9f39b2e1a122cf29b7fb7fe6e78", - "@angular/common": "github:angular/common-builds#8e9264e95edd21fc75c143499ae31af2e7cd4986", - "@angular/compiler": "github:angular/compiler-builds#def2767e13d09ea039538ddf3244238ae9ad7f20", - "@angular/compiler-cli": "github:angular/compiler-cli-builds#e1e61fab6e3191bcf57627f29afb59e364b380fb", - "@angular/core": "github:angular/core-builds#a2db0038aff8f0cc17f9ce77e4fe269c6fdc210f", - "@angular/forms": "github:angular/forms-builds#000e80b9cb5b1591518dfec0f9b7d99d774673d9", - "@angular/language-service": "github:angular/language-service-builds#f426109144af2caaa4cb02382fe250a40db55535", - "@angular/localize": "github:angular/localize-builds#9dfb48b6460f2959a319ece404cba204a33d6579", - "@angular/material": "github:angular/material-builds#7ec5389ddc083aceb4872527da6cc57fce22110b", - "@angular/material-moment-adapter": "github:angular/material-moment-adapter-builds#1f751ef6e79aa52fb3978a026f996cf0a46fb063", - "@angular/platform-browser": "github:angular/platform-browser-builds#61e17ac8708288ba87a4b2c10bb780b98b065703", - "@angular/platform-browser-dynamic": "github:angular/platform-browser-dynamic-builds#6e4ec4f77dfc11ffd40ab5d204afaaf898cf924a", - "@angular/platform-server": "github:angular/platform-server-builds#8fc220d8196229b294965acf4ace8774918ba20b", - "@angular/router": "github:angular/router-builds#96e5b7fffd0fda9add2d1c789de4c2d82856276a", - "@angular/service-worker": "github:angular/service-worker-builds#1bf20b405acae2909b6b92f326b2cb1364e32577" + "@angular/animations": "github:angular/animations-builds#935e7084a4c3ce4a7f46b2bca84056ce72c09df5", + "@angular/cdk": "github:angular/cdk-builds#ff29080435cfdf5b8baa09821e6b65dcf468905e", + "@angular/common": "github:angular/common-builds#72f20a6cce9d2f1c7ecb6e34c31a04db285fc293", + "@angular/compiler": "github:angular/compiler-builds#af95891a41e7dfacc8439004ec4205cc3303b567", + "@angular/compiler-cli": "github:angular/compiler-cli-builds#323a2074ad44577b2964cb7329c77a624fcfb554", + "@angular/core": "github:angular/core-builds#d007d1e5e718733cec29d537223a41f75777a4d5", + "@angular/forms": "github:angular/forms-builds#7646376b51f43f6c6d27f65a2004e7e884483be6", + "@angular/language-service": "github:angular/language-service-builds#d7976794cdcb4353b611d1d64494496e70001859", + "@angular/localize": "github:angular/localize-builds#7676fcd5bbaf7424666800985e4198fcceae154d", + "@angular/material": "github:angular/material-builds#93b331340ea7bec519017f91271cee8d5f950b40", + "@angular/material-moment-adapter": "github:angular/material-moment-adapter-builds#55403f8cc9e402973d2ccc05d18d059a5d630f6f", + "@angular/platform-browser": "github:angular/platform-browser-builds#23abe56aa15c354c6233c708011b5cf2ce5deb92", + "@angular/platform-browser-dynamic": "github:angular/platform-browser-dynamic-builds#6a421efde6e3def94e7bd5bc07a07062801bc54d", + "@angular/platform-server": "github:angular/platform-server-builds#49446746b89392e85f9f067727f995cc713a886d", + "@angular/router": "github:angular/router-builds#8b9865890980473097b2f81af38b4effdf6cf1f9", + "@angular/service-worker": "github:angular/service-worker-builds#6933cd2efc51e4ef3f017c8e7a61acda3dc955c0" } } From bfdc7b0abbccd2fcaf43602d8cf70896ec74ea81 Mon Sep 17 00:00:00 2001 From: Alan Agius <17563226+alan-agius4@users.noreply.github.com> Date: Wed, 25 Feb 2026 11:39:31 +0000 Subject: [PATCH 032/226] fix(@angular/build): normalize `allowedHosts` in dev-server This change ensures that allowed hosts starting with a dot (e.g. '.example.com') are converted to the wildcard format ('*.example.com') required by Angular SSR host validation. This aligns Vite's configuration style with Angular's internal validation logic. --- packages/angular/build/src/builders/dev-server/vite/index.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/angular/build/src/builders/dev-server/vite/index.ts b/packages/angular/build/src/builders/dev-server/vite/index.ts index 009da8a40688..083008f17050 100644 --- a/packages/angular/build/src/builders/dev-server/vite/index.ts +++ b/packages/angular/build/src/builders/dev-server/vite/index.ts @@ -97,8 +97,10 @@ export async function* serveWithVite( browserOptions.ssr ||= true; } + // Vite allowedHost syntax doesn't allow `*.` but `.` acts as `*.` + // Angular SSR supports `*.`. const allowedHosts = Array.isArray(serverOptions.allowedHosts) - ? [...serverOptions.allowedHosts] + ? serverOptions.allowedHosts.map((host) => (host[0] === '.' ? '*' + host : host)) : []; // Always allow the dev server host From 83d35d4ea774ed64233f5759a39aeed5619eade2 Mon Sep 17 00:00:00 2001 From: Alan Agius <17563226+alan-agius4@users.noreply.github.com> Date: Wed, 25 Feb 2026 12:28:29 +0000 Subject: [PATCH 033/226] build: update jasmine dependencies to v6 See associated pull request for more information. Closes #32423 as a pr takeover --- .../testing/builder/src/jasmine-helpers.ts | 8 +- package.json | 6 +- .../dev-server/tests/jasmine-helpers.ts | 4 +- .../src/builders/karma/find-tests_spec.ts | 97 --- .../build/src/builders/karma/tests/setup.ts | 4 +- .../tests/options/code-coverage_spec.ts | 2 +- .../plugins/elide-angular-metadata_spec.ts | 2 +- .../plugins/pure-toplevel-functions_spec.ts | 4 +- packages/angular/ssr/test/app_spec.ts | 11 - .../angular_devkit/architect/src/api_spec.ts | 2 +- .../browser/specs/tsconfig-paths_spec.ts | 4 +- .../dev-server/tests/jasmine-helpers.ts | 4 +- .../src/builders/karma/tests/setup.ts | 5 +- .../ssr-dev-server/specs/proxy_spec.ts | 2 +- .../builders/ssr-dev-server/specs/ssl_spec.ts | 2 +- .../ssr-dev-server/specs/works_spec.ts | 2 +- .../core/src/virtual-fs/path_spec.ts | 4 +- .../src/transformers/elide_imports_spec.ts | 684 ++++++++---------- .../transformers/find_image_domains_spec.ts | 146 ++-- .../remove-ivy-jit-support-calls_spec.ts | 212 +++--- .../transformers/replace_resources_spec.ts | 140 ++-- packages/schematics/angular/e2e/index_spec.ts | 2 +- .../schematics/angular/enum/index_spec.ts | 7 - .../schematics/angular/library/index_spec.ts | 2 +- .../schematics/angular/module/index_spec.ts | 9 - .../test-file-transformer_add-imports_spec.ts | 82 +-- .../test-file-transformer_spec.ts | 186 +++-- .../transformers/jasmine-lifecycle_spec.ts | 222 +++--- .../transformers/jasmine-matcher_spec.ts | 558 +++++++------- .../transformers/jasmine-misc_spec.ts | 288 ++++---- .../transformers/jasmine-spy_spec.ts | 438 ++++++----- .../transformers/jasmine-type_spec.ts | 94 ++- .../angular/utility/dependencies_spec.ts | 34 +- pnpm-lock.yaml | 43 +- 34 files changed, 1554 insertions(+), 1756 deletions(-) delete mode 100644 packages/angular/build/src/builders/karma/find-tests_spec.ts diff --git a/modules/testing/builder/src/jasmine-helpers.ts b/modules/testing/builder/src/jasmine-helpers.ts index eb48f8b8dbbc..bd1943ae3ea1 100644 --- a/modules/testing/builder/src/jasmine-helpers.ts +++ b/modules/testing/builder/src/jasmine-helpers.ts @@ -25,6 +25,8 @@ export const BUILD_TIMEOUT = 30_000; const optionSchemaCache = new Map(); +let counter = 0; + export function describeBuilder( builderHandler: BuilderHandlerFn, options: { name?: string; schemaPath: string }, @@ -40,10 +42,8 @@ export function describeBuilder( optionSchema, }); - // This is needed as there are multiple describe calls for the same builder. - jasmine.getEnv().configure({ forbidDuplicateNames: false }); - - describe(options.name || builderHandler.name, () => { + // The counter is needed to avoid duplicate describe names as they are not allowed. + describe((options.name || builderHandler.name) + ` (Suite: ${counter++})`, () => { beforeEach(async () => { harness.resetProjectMetadata(); diff --git a/package.json b/package.json index 788570de87c7..a16aa3936ac4 100644 --- a/package.json +++ b/package.json @@ -74,7 +74,7 @@ "@types/express": "~5.0.1", "@types/http-proxy": "^1.17.4", "@types/ini": "^4.0.0", - "@types/jasmine": "~5.1.0", + "@types/jasmine": "~6.0.0", "@types/jasmine-reporters": "^2", "@types/karma": "^6.3.0", "@types/less": "^3.0.3", @@ -105,8 +105,8 @@ "http-proxy": "^1.18.1", "http-proxy-middleware": "3.0.5", "husky": "9.1.7", - "jasmine": "~5.13.0", - "jasmine-core": "~5.13.0", + "jasmine": "~6.1.0", + "jasmine-core": "~6.1.0", "jasmine-reporters": "^2.5.2", "jasmine-spec-reporter": "~7.0.0", "karma": "~6.4.0", diff --git a/packages/angular/build/src/builders/dev-server/tests/jasmine-helpers.ts b/packages/angular/build/src/builders/dev-server/tests/jasmine-helpers.ts index c5a73446cf5a..966418e16a61 100644 --- a/packages/angular/build/src/builders/dev-server/tests/jasmine-helpers.ts +++ b/packages/angular/build/src/builders/dev-server/tests/jasmine-helpers.ts @@ -12,6 +12,7 @@ import { readFileSync } from 'node:fs'; import { JasmineBuilderHarness, host, setupApplicationTarget } from './setup'; const optionSchemaCache = new Map(); +let counter = 0; export function describeServeBuilder( builderHandler: BuilderHandlerFn, @@ -32,7 +33,8 @@ export function describeServeBuilder( optionSchema, }); - describe(options.name || builderHandler.name, () => { + // The counter is needed to avoid duplicate describe names as they are not allowed. + describe((options.name || builderHandler.name) + ` (${counter++})`, () => { beforeEach(() => host.initialize().toPromise()); afterEach(() => host.restore().toPromise()); diff --git a/packages/angular/build/src/builders/karma/find-tests_spec.ts b/packages/angular/build/src/builders/karma/find-tests_spec.ts deleted file mode 100644 index 88c97c8575fe..000000000000 --- a/packages/angular/build/src/builders/karma/find-tests_spec.ts +++ /dev/null @@ -1,97 +0,0 @@ -/** - * @license - * Copyright Google LLC All Rights Reserved. - * - * Use of this source code is governed by an MIT-style license that can be - * found in the LICENSE file at https://angular.dev/license - */ - -import { getTestEntrypoints } from './find-tests'; - -const UNIX_ENTRYPOINTS_OPTIONS = { - pathSeparator: '/', - workspaceRoot: '/my/workspace/root', - projectSourceRoot: '/my/workspace/root/src-root', -}; - -const WINDOWS_ENTRYPOINTS_OPTIONS = { - pathSeparator: '\\', - workspaceRoot: 'C:\\my\\workspace\\root', - projectSourceRoot: 'C:\\my\\workspace\\root\\src-root', -}; - -describe('getTestEntrypoints', () => { - for (const options of [UNIX_ENTRYPOINTS_OPTIONS, WINDOWS_ENTRYPOINTS_OPTIONS]) { - describe(`with path separator "${options.pathSeparator}"`, () => { - function joinWithSeparator(base: string, rel: string) { - return `${base}${options.pathSeparator}${rel.replace(/\//g, options.pathSeparator)}`; - } - - function getEntrypoints(workspaceRelative: string[], sourceRootRelative: string[] = []) { - return getTestEntrypoints( - [ - ...workspaceRelative.map((p) => joinWithSeparator(options.workspaceRoot, p)), - ...sourceRootRelative.map((p) => joinWithSeparator(options.projectSourceRoot, p)), - ], - options, - ); - } - - it('returns an empty map without test files', () => { - expect(getEntrypoints([])).toEqual(new Map()); - }); - - it('strips workspace root and/or project source root', () => { - expect(getEntrypoints(['a/b.spec.js'], ['c/d.spec.js'])).toEqual( - new Map([ - ['spec-a-b.spec', joinWithSeparator(options.workspaceRoot, 'a/b.spec.js')], - ['spec-c-d.spec', joinWithSeparator(options.projectSourceRoot, 'c/d.spec.js')], - ]), - ); - }); - - it('adds unique prefixes to distinguish between similar names', () => { - expect(getEntrypoints(['a/b/c/d.spec.js', 'a-b/c/d.spec.js'], ['a/b-c/d.spec.js'])).toEqual( - new Map([ - ['spec-a-b-c-d.spec', joinWithSeparator(options.workspaceRoot, 'a/b/c/d.spec.js')], - ['spec-a-b-c-d-2.spec', joinWithSeparator(options.workspaceRoot, 'a-b/c/d.spec.js')], - [ - 'spec-a-b-c-d-3.spec', - joinWithSeparator(options.projectSourceRoot, 'a/b-c/d.spec.js'), - ], - ]), - ); - }); - - describe('with removeTestExtension enabled', () => { - function getEntrypoints(workspaceRelative: string[], sourceRootRelative: string[] = []) { - return getTestEntrypoints( - [ - ...workspaceRelative.map((p) => joinWithSeparator(options.workspaceRoot, p)), - ...sourceRootRelative.map((p) => joinWithSeparator(options.projectSourceRoot, p)), - ], - { ...options, removeTestExtension: true }, - ); - } - - it('removes .spec extension', () => { - expect(getEntrypoints(['a/b.spec.js'], ['c/d.spec.js'])).toEqual( - new Map([ - ['spec-a-b', joinWithSeparator(options.workspaceRoot, 'a/b.spec.js')], - ['spec-c-d', joinWithSeparator(options.projectSourceRoot, 'c/d.spec.js')], - ]), - ); - }); - - it('removes .test extension', () => { - expect(getEntrypoints(['a/b.test.js'], ['c/d.test.js'])).toEqual( - new Map([ - ['spec-a-b', joinWithSeparator(options.workspaceRoot, 'a/b.test.js')], - ['spec-c-d', joinWithSeparator(options.projectSourceRoot, 'c/d.test.js')], - ]), - ); - }); - }); - }); - } -}); diff --git a/packages/angular/build/src/builders/karma/tests/setup.ts b/packages/angular/build/src/builders/karma/tests/setup.ts index e6a013946904..6292074daaf6 100644 --- a/packages/angular/build/src/builders/karma/tests/setup.ts +++ b/packages/angular/build/src/builders/karma/tests/setup.ts @@ -112,6 +112,8 @@ export async function setupApplicationTarget( await harness.appendToFile('src/polyfills.ts', `import '@angular/localize/init';`); } +let counter = 0; + /** Runs the test against both an application- and a browser-builder context. */ export function describeKarmaBuilder( builderHandler: BuilderHandlerFn, @@ -128,7 +130,7 @@ export function describeKarmaBuilder( optionSchema, }); - describe(options.name || builderHandler.name, () => { + describe((options.name || builderHandler.name) + ` (${counter++})`, () => { beforeEach(async () => { await host.initialize().toPromise(); diff --git a/packages/angular/build/src/builders/unit-test/tests/options/code-coverage_spec.ts b/packages/angular/build/src/builders/unit-test/tests/options/code-coverage_spec.ts index f8a8acb60591..d0f51e731de9 100644 --- a/packages/angular/build/src/builders/unit-test/tests/options/code-coverage_spec.ts +++ b/packages/angular/build/src/builders/unit-test/tests/options/code-coverage_spec.ts @@ -42,7 +42,7 @@ describeBuilder(execute, UNIT_TEST_BUILDER_INFO, (harness) => { harness.expectFile('coverage/test/index.html').toExist(); }); - it('should generate a code coverage report when coverage is true', async () => { + it('should generate a code coverage report when coverage is true and coverageReporters is set to json', async () => { harness.useTarget('test', { ...BASE_OPTIONS, coverage: true, diff --git a/packages/angular/build/src/tools/babel/plugins/elide-angular-metadata_spec.ts b/packages/angular/build/src/tools/babel/plugins/elide-angular-metadata_spec.ts index 4705d207a63a..896e1e270af4 100644 --- a/packages/angular/build/src/tools/babel/plugins/elide-angular-metadata_spec.ts +++ b/packages/angular/build/src/tools/babel/plugins/elide-angular-metadata_spec.ts @@ -188,7 +188,7 @@ describe('elide-angular-metadata Babel plugin', () => { ); it( - 'elides arrow-function-based ɵsetClassMetadataAsync', + 'elides ɵsetClassDebugInfo', testCase({ input: ` import { Component } from '@angular/core'; diff --git a/packages/angular/build/src/tools/babel/plugins/pure-toplevel-functions_spec.ts b/packages/angular/build/src/tools/babel/plugins/pure-toplevel-functions_spec.ts index 0966a67d068a..77eb42dc9bbe 100644 --- a/packages/angular/build/src/tools/babel/plugins/pure-toplevel-functions_spec.ts +++ b/packages/angular/build/src/tools/babel/plugins/pure-toplevel-functions_spec.ts @@ -100,7 +100,7 @@ describe('pure-toplevel-functions Babel plugin', () => { ); it( - 'does not annotate call expressions inside function expressions', + 'does not annotate call expressions inside arrow functions', testCaseNoChange('const foo = () => { const result = someFunction(); }'), ); @@ -115,7 +115,7 @@ describe('pure-toplevel-functions Babel plugin', () => { ); it( - 'does not annotate new expressions inside function expressions', + 'does not annotate new expressions inside arrow functions', testCaseNoChange('const foo = () => { const result = new SomeClass(); }'), ); diff --git a/packages/angular/ssr/test/app_spec.ts b/packages/angular/ssr/test/app_spec.ts index a72c4d75fae2..8fb82a10cfb9 100644 --- a/packages/angular/ssr/test/app_spec.ts +++ b/packages/angular/ssr/test/app_spec.ts @@ -309,17 +309,6 @@ describe('AngularServerApp', () => { expect(await conditionalResponse?.text()).toBe(''); }); - it('should return configured headers for pages with specific header settings', async () => { - const response = await app.handle(new Request('http://localhost/home-ssg')); - const headers = response?.headers.entries() ?? []; - expect(Object.fromEntries(headers)).toEqual({ - 'etag': '"f799132d0a09e0fef93c68a12e443527700eb59e6f67fcb7854c3a60ff082fde"', - 'content-length': '28', - 'x-some-header': 'value', - 'content-type': 'text/html;charset=UTF-8', - }); - }); - it('should return null for a non-prerendered page', async () => { const response = await app.handle(new Request('http://localhost/unknown')); expect(response).toBeNull(); diff --git a/packages/angular_devkit/architect/src/api_spec.ts b/packages/angular_devkit/architect/src/api_spec.ts index 55247a59d993..fc1e4c1d7680 100644 --- a/packages/angular_devkit/architect/src/api_spec.ts +++ b/packages/angular_devkit/architect/src/api_spec.ts @@ -40,7 +40,7 @@ describe('Architect API', () => { for (const ts of Object.getOwnPropertyNames(goldens)) { const t: Target = goldens[ts]; - it(`works for ${JSON.stringify(t)}`, () => { + it(`works for ${JSON.stringify(ts)}`, () => { // We have some invalid goldens. Remove everything after the second :. const goldenTs = ts.replace(/(\w+:\w+(:\w*)?).*/, '$1'); expect(targetStringFromTarget(t)).toEqual(goldenTs); diff --git a/packages/angular_devkit/build_angular/src/builders/browser/specs/tsconfig-paths_spec.ts b/packages/angular_devkit/build_angular/src/builders/browser/specs/tsconfig-paths_spec.ts index 754f85e182a9..64be1270ef9a 100644 --- a/packages/angular_devkit/build_angular/src/builders/browser/specs/tsconfig-paths_spec.ts +++ b/packages/angular_devkit/build_angular/src/builders/browser/specs/tsconfig-paths_spec.ts @@ -19,7 +19,7 @@ describe('Browser Builder tsconfig paths', () => { }); afterEach(async () => host.restore().toPromise()); - it('works', async () => { + it('should resolve basic tsconfig paths', async () => { host.replaceInFile('src/app/app.module.ts', './app.component', '@root/app/app.component'); host.replaceInFile( 'tsconfig.json', @@ -37,7 +37,7 @@ describe('Browser Builder tsconfig paths', () => { await browserBuild(architect, host, target); }); - it('works', async () => { + it('should resolve complex tsconfig paths with wildcards', async () => { host.writeMultipleFiles({ 'src/meaning-too.ts': 'export var meaning = 42;', 'src/app/shared/meaning.ts': 'export var meaning = 42;', diff --git a/packages/angular_devkit/build_angular/src/builders/dev-server/tests/jasmine-helpers.ts b/packages/angular_devkit/build_angular/src/builders/dev-server/tests/jasmine-helpers.ts index f3d1bfcea48a..07182ebe07f1 100644 --- a/packages/angular_devkit/build_angular/src/builders/dev-server/tests/jasmine-helpers.ts +++ b/packages/angular_devkit/build_angular/src/builders/dev-server/tests/jasmine-helpers.ts @@ -14,6 +14,7 @@ import { host } from '../../../testing/test-utils'; import { setupApplicationTarget, setupBrowserTarget } from './setup'; const optionSchemaCache = new Map(); +let counter = 0; export function describeServeBuilder( builderHandler: BuilderHandlerFn, @@ -39,7 +40,8 @@ export function describeServeBuilder( optionSchema, }); - describe(options.name || builderHandler.name, () => { + // The counter is needed to avoid duplicate describe names as they are not allowed. + describe((options.name || builderHandler.name) + ` (${counter++})`, () => { for (const isViteRun of [true, false]) { describe(isViteRun ? 'vite' : 'webpack-dev-server', () => { beforeEach(() => host.initialize().toPromise()); diff --git a/packages/angular_devkit/build_angular/src/builders/karma/tests/setup.ts b/packages/angular_devkit/build_angular/src/builders/karma/tests/setup.ts index d78f691bef91..8850e470e67c 100644 --- a/packages/angular_devkit/build_angular/src/builders/karma/tests/setup.ts +++ b/packages/angular_devkit/build_angular/src/builders/karma/tests/setup.ts @@ -140,6 +140,8 @@ export async function setupApplicationTarget( await harness.appendToFile('src/polyfills.ts', `import '@angular/localize/init';`); } +let counter = 0; + /** Runs the test against both an application- and a browser-builder context. */ export function describeKarmaBuilder( builderHandler: BuilderHandlerFn, @@ -161,7 +163,8 @@ export function describeKarmaBuilder( optionSchema, }); - describe(options.name || builderHandler.name, () => { + // The counter is needed to avoid duplicate describe names as they are not allowed. + describe((options.name || builderHandler.name) + ` (${counter++})`, () => { for (const isApplicationTarget of [true, false]) { describe(isApplicationTarget ? 'with application builder' : 'with browser builder', () => { beforeEach(() => host.initialize().toPromise()); diff --git a/packages/angular_devkit/build_angular/src/builders/ssr-dev-server/specs/proxy_spec.ts b/packages/angular_devkit/build_angular/src/builders/ssr-dev-server/specs/proxy_spec.ts index 425aad21dada..c6ea08e05cda 100644 --- a/packages/angular_devkit/build_angular/src/builders/ssr-dev-server/specs/proxy_spec.ts +++ b/packages/angular_devkit/build_angular/src/builders/ssr-dev-server/specs/proxy_spec.ts @@ -13,7 +13,7 @@ import * as http from 'node:http'; import { createArchitect, host } from '../../../testing/test-utils'; import { SSRDevServerBuilderOutput } from '../index'; -describe('Serve SSR Builder', () => { +describe('Serve SSR Builder - Proxy', () => { const target = { project: 'app', target: 'serve-ssr' }; const originalTimeout = jasmine.DEFAULT_TIMEOUT_INTERVAL; let architect: Architect; diff --git a/packages/angular_devkit/build_angular/src/builders/ssr-dev-server/specs/ssl_spec.ts b/packages/angular_devkit/build_angular/src/builders/ssr-dev-server/specs/ssl_spec.ts index e61117812bbe..8c098b514fbb 100644 --- a/packages/angular_devkit/build_angular/src/builders/ssr-dev-server/specs/ssl_spec.ts +++ b/packages/angular_devkit/build_angular/src/builders/ssr-dev-server/specs/ssl_spec.ts @@ -13,7 +13,7 @@ import { Agent } from 'undici'; import { createArchitect, host } from '../../../testing/test-utils'; import { SSRDevServerBuilderOutput } from '../index'; -describe('Serve SSR Builder', () => { +describe('Serve SSR Builder - SSL', () => { const target = { project: 'app', target: 'serve-ssr' }; const originalTimeout = jasmine.DEFAULT_TIMEOUT_INTERVAL; let architect: Architect; diff --git a/packages/angular_devkit/build_angular/src/builders/ssr-dev-server/specs/works_spec.ts b/packages/angular_devkit/build_angular/src/builders/ssr-dev-server/specs/works_spec.ts index c8c70d148e63..731443b6cd94 100644 --- a/packages/angular_devkit/build_angular/src/builders/ssr-dev-server/specs/works_spec.ts +++ b/packages/angular_devkit/build_angular/src/builders/ssr-dev-server/specs/works_spec.ts @@ -12,7 +12,7 @@ import * as browserSync from 'browser-sync'; import { createArchitect, host } from '../../../testing/test-utils'; import { SSRDevServerBuilderOutput } from '../index'; -describe('Serve SSR Builder', () => { +describe('Serve SSR Builder - Works', () => { const target = { project: 'app', target: 'serve-ssr' }; const originalTimeout = jasmine.DEFAULT_TIMEOUT_INTERVAL; let architect: Architect; diff --git a/packages/angular_devkit/core/src/virtual-fs/path_spec.ts b/packages/angular_devkit/core/src/virtual-fs/path_spec.ts index 4e416a1ff12e..e5da5e66e838 100644 --- a/packages/angular_devkit/core/src/virtual-fs/path_spec.ts +++ b/packages/angular_devkit/core/src/virtual-fs/path_spec.ts @@ -94,9 +94,9 @@ describe('path', () => { ]; for (const [input, result] of tests) { - const normalizedInput = normalize(input); + it(`(${input}) == "${result}"`, () => { + const normalizedInput = normalize(input); - it(`(${JSON.stringify(normalizedInput)}) == "${result}"`, () => { expect(split(normalizedInput)).toEqual(result as PathFragment[]); }); } diff --git a/packages/ngtools/webpack/src/transformers/elide_imports_spec.ts b/packages/ngtools/webpack/src/transformers/elide_imports_spec.ts index 9bbcb4a78207..2138a0811034 100644 --- a/packages/ngtools/webpack/src/transformers/elide_imports_spec.ts +++ b/packages/ngtools/webpack/src/transformers/elide_imports_spec.ts @@ -12,63 +12,62 @@ import * as ts from 'typescript'; import { elideImports } from './elide_imports'; import { createTypescriptContext, transformTypescript } from './spec_helpers'; -describe('@ngtools/webpack transformers', () => { - describe('elide_imports', () => { - const dummyNode = `const remove = ''`; - - // Transformer that removes the last node and then elides unused imports - const transformer = (program: ts.Program) => { - return (context: ts.TransformationContext) => { - return (sourceFile: ts.SourceFile) => { - const lastNode = sourceFile.statements[sourceFile.statements.length - 1]; - const updatedSourceFile = context.factory.updateSourceFile( - sourceFile, - ts.setTextRange( - context.factory.createNodeArray(sourceFile.statements.slice(0, -1)), - sourceFile.statements, - ), - ); +describe('elide_imports', () => { + const dummyNode = `const remove = ''`; + + // Transformer that removes the last node and then elides unused imports + const transformer = (program: ts.Program) => { + return (context: ts.TransformationContext) => { + return (sourceFile: ts.SourceFile) => { + const lastNode = sourceFile.statements[sourceFile.statements.length - 1]; + const updatedSourceFile = context.factory.updateSourceFile( + sourceFile, + ts.setTextRange( + context.factory.createNodeArray(sourceFile.statements.slice(0, -1)), + sourceFile.statements, + ), + ); - const importRemovals = elideImports( + const importRemovals = elideImports( + updatedSourceFile, + [lastNode], + () => program.getTypeChecker(), + context.getCompilerOptions(), + ); + if (importRemovals.size > 0) { + return ts.visitEachChild( updatedSourceFile, - [lastNode], - () => program.getTypeChecker(), - context.getCompilerOptions(), + function visitForRemoval(node): ts.Node | undefined { + return importRemovals.has(node) + ? undefined + : ts.visitEachChild(node, visitForRemoval, context); + }, + context, ); - if (importRemovals.size > 0) { - return ts.visitEachChild( - updatedSourceFile, - function visitForRemoval(node): ts.Node | undefined { - return importRemovals.has(node) - ? undefined - : ts.visitEachChild(node, visitForRemoval, context); - }, - context, - ); - } + } - return updatedSourceFile; - }; + return updatedSourceFile; }; }; + }; - const additionalFiles: Record = { - 'const.ts': ` + const additionalFiles: Record = { + 'const.ts': ` export const animations = []; export const promise = () => null; export const take = () => null; export default promise; `, - 'decorator.ts': ` + 'decorator.ts': ` export function Decorator(value?: any): any { return function (): any { }; } `, - 'service.ts': ` + 'service.ts': ` export class Service { } export class Service2 { } `, - 'type.ts': ` + 'type.ts': ` export interface OnChanges { ngOnChanges(changes: SimpleChanges): void; } @@ -77,252 +76,252 @@ describe('@ngtools/webpack transformers', () => { [propName: string]: unknown; } `, - 'jsx.ts': ` + 'jsx.ts': ` export function createElement() {} `, - }; + }; - it('should remove unused imports', () => { - const input = tags.stripIndent` + it('should remove unused imports', () => { + const input = tags.stripIndent` import { promise } from './const'; import { take } from './const'; const unused = promise; `; - const { program, compilerHost } = createTypescriptContext(input, additionalFiles); - const result = transformTypescript(undefined, [transformer(program)], program, compilerHost); + const { program, compilerHost } = createTypescriptContext(input, additionalFiles); + const result = transformTypescript(undefined, [transformer(program)], program, compilerHost); - expect(tags.oneLine`${result}`).toEqual('export {};'); - }); + expect(tags.oneLine`${result}`).toEqual('export {};'); + }); - it('should remove unused aliased imports', () => { - const input = tags.stripIndent` + it('should remove unused aliased imports', () => { + const input = tags.stripIndent` import { promise as fromPromise } from './const'; const unused = fromPromise; `; - const { program, compilerHost } = createTypescriptContext(input, additionalFiles); - const result = transformTypescript(undefined, [transformer(program)], program, compilerHost); + const { program, compilerHost } = createTypescriptContext(input, additionalFiles); + const result = transformTypescript(undefined, [transformer(program)], program, compilerHost); - expect(tags.oneLine`${result}`).toEqual('export {};'); - }); + expect(tags.oneLine`${result}`).toEqual('export {};'); + }); - it('should retain used aliased imports', () => { - const input = tags.stripIndent` + it('should retain used aliased imports', () => { + const input = tags.stripIndent` import { promise as fromPromise } from './const'; const used = fromPromise; ${dummyNode} `; - const output = tags.stripIndent` + const output = tags.stripIndent` import { promise as fromPromise } from './const'; const used = fromPromise; `; - const { program, compilerHost } = createTypescriptContext(input, additionalFiles); - const result = transformTypescript(undefined, [transformer(program)], program, compilerHost); + const { program, compilerHost } = createTypescriptContext(input, additionalFiles); + const result = transformTypescript(undefined, [transformer(program)], program, compilerHost); - expect(tags.oneLine`${result}`).toEqual(tags.oneLine`${output}`); - }); + expect(tags.oneLine`${result}`).toEqual(tags.oneLine`${output}`); + }); - it('should retain used namespaced imports', () => { - const input = tags.stripIndent` + it('should retain used namespaced imports', () => { + const input = tags.stripIndent` import * as namespaced from './const'; const used = namespaced; ${dummyNode} `; - const output = tags.stripIndent` + const output = tags.stripIndent` import * as namespaced from './const'; const used = namespaced; `; - const { program, compilerHost } = createTypescriptContext(input, additionalFiles); - const result = transformTypescript(undefined, [transformer(program)], program, compilerHost); + const { program, compilerHost } = createTypescriptContext(input, additionalFiles); + const result = transformTypescript(undefined, [transformer(program)], program, compilerHost); - expect(tags.oneLine`${result}`).toEqual(tags.oneLine`${output}`); - }); + expect(tags.oneLine`${result}`).toEqual(tags.oneLine`${output}`); + }); - it('should drop unused namespaced imports', () => { - const input = tags.stripIndent` + it('should drop unused namespaced imports', () => { + const input = tags.stripIndent` import * as namespaced from './const'; const used = namespaced; `; - const { program, compilerHost } = createTypescriptContext(input, additionalFiles); - const result = transformTypescript(undefined, [transformer(program)], program, compilerHost); + const { program, compilerHost } = createTypescriptContext(input, additionalFiles); + const result = transformTypescript(undefined, [transformer(program)], program, compilerHost); - expect(tags.oneLine`${result}`).toEqual('export {};'); - }); + expect(tags.oneLine`${result}`).toEqual('export {};'); + }); - it('should drop unused imports in export specifier', () => { - const input = tags.stripIndent` + it('should drop unused imports in export specifier', () => { + const input = tags.stripIndent` import { promise as fromPromise } from './const'; export { fromPromise }; `; - const { program, compilerHost } = createTypescriptContext(input, additionalFiles); - const result = transformTypescript(undefined, [transformer(program)], program, compilerHost); + const { program, compilerHost } = createTypescriptContext(input, additionalFiles); + const result = transformTypescript(undefined, [transformer(program)], program, compilerHost); - expect(tags.oneLine`${result}`).toEqual('export {};'); - }); + expect(tags.oneLine`${result}`).toEqual('export {};'); + }); - it('should retain used imports in export specifier', () => { - const input = tags.stripIndent` + it('should retain used imports in export specifier', () => { + const input = tags.stripIndent` import { promise as fromPromise } from './const'; export { fromPromise }; ${dummyNode} `; - const output = tags.stripIndent` + const output = tags.stripIndent` import { promise as fromPromise } from './const'; export { fromPromise }; `; - const { program, compilerHost } = createTypescriptContext(input, additionalFiles); - const result = transformTypescript(undefined, [transformer(program)], program, compilerHost); + const { program, compilerHost } = createTypescriptContext(input, additionalFiles); + const result = transformTypescript(undefined, [transformer(program)], program, compilerHost); - expect(tags.oneLine`${result}`).toEqual(tags.oneLine`${output}`); - }); + expect(tags.oneLine`${result}`).toEqual(tags.oneLine`${output}`); + }); - it('should drop unused in shorthand property assignment', () => { - const input = tags.stripIndent` + it('should drop unused in shorthand property assignment', () => { + const input = tags.stripIndent` import { promise as fromPromise } from './const'; const unused = { fromPromise }; `; - const { program, compilerHost } = createTypescriptContext(input, additionalFiles); - const result = transformTypescript(undefined, [transformer(program)], program, compilerHost); + const { program, compilerHost } = createTypescriptContext(input, additionalFiles); + const result = transformTypescript(undefined, [transformer(program)], program, compilerHost); - expect(tags.oneLine`${result}`).toEqual('export {};'); - }); + expect(tags.oneLine`${result}`).toEqual('export {};'); + }); - it('should retain used imports in shorthand property assignment', () => { - const input = tags.stripIndent` + it('should retain used imports in shorthand property assignment', () => { + const input = tags.stripIndent` import { promise as fromPromise } from './const'; const used = { fromPromise }; ${dummyNode} `; - const output = tags.stripIndent` + const output = tags.stripIndent` import { promise as fromPromise } from './const'; const used = { fromPromise }; `; - const { program, compilerHost } = createTypescriptContext(input, additionalFiles); - const result = transformTypescript(undefined, [transformer(program)], program, compilerHost); + const { program, compilerHost } = createTypescriptContext(input, additionalFiles); + const result = transformTypescript(undefined, [transformer(program)], program, compilerHost); - expect(tags.oneLine`${result}`).toEqual(tags.oneLine`${output}`); - }); + expect(tags.oneLine`${result}`).toEqual(tags.oneLine`${output}`); + }); - it('should drop unused default import', () => { - const input = tags.stripIndent` + it('should drop unused default import', () => { + const input = tags.stripIndent` import defaultPromise from './const'; const unused = defaultPromise; `; - const { program, compilerHost } = createTypescriptContext(input, additionalFiles); - const result = transformTypescript(undefined, [transformer(program)], program, compilerHost); + const { program, compilerHost } = createTypescriptContext(input, additionalFiles); + const result = transformTypescript(undefined, [transformer(program)], program, compilerHost); - expect(tags.oneLine`${result}`).toEqual('export {};'); - }); + expect(tags.oneLine`${result}`).toEqual('export {};'); + }); - it('should retain used default import', () => { - const input = tags.stripIndent` + it('should retain used default import', () => { + const input = tags.stripIndent` import defaultPromise from './const'; const used = defaultPromise; ${dummyNode} `; - const output = tags.stripIndent` + const output = tags.stripIndent` import defaultPromise from './const'; const used = defaultPromise; `; - const { program, compilerHost } = createTypescriptContext(input, additionalFiles); - const result = transformTypescript(undefined, [transformer(program)], program, compilerHost); + const { program, compilerHost } = createTypescriptContext(input, additionalFiles); + const result = transformTypescript(undefined, [transformer(program)], program, compilerHost); - expect(tags.oneLine`${result}`).toEqual(tags.oneLine`${output}`); - }); + expect(tags.oneLine`${result}`).toEqual(tags.oneLine`${output}`); + }); - it('should only drop unused default imports when named and default (1)', () => { - const input = tags.stripIndent` + it('should only drop unused default imports when named and default (1)', () => { + const input = tags.stripIndent` import promise, { promise as fromPromise } from './const'; const used = fromPromise; const unused = promise; `; - const output = tags.stripIndent` + const output = tags.stripIndent` import { promise as fromPromise } from './const'; const used = fromPromise; `; - const { program, compilerHost } = createTypescriptContext(input, additionalFiles); - const result = transformTypescript(undefined, [transformer(program)], program, compilerHost); + const { program, compilerHost } = createTypescriptContext(input, additionalFiles); + const result = transformTypescript(undefined, [transformer(program)], program, compilerHost); - expect(tags.oneLine`${result}`).toEqual(tags.oneLine`${output}`); - }); + expect(tags.oneLine`${result}`).toEqual(tags.oneLine`${output}`); + }); - it('should only drop unused named imports when named and default (2)', () => { - const input = tags.stripIndent` + it('should only drop unused named imports when named and default (2)', () => { + const input = tags.stripIndent` import promise, { promise as fromPromise, take } from './const'; const used = fromPromise; const unused = promise; `; - const output = tags.stripIndent` + const output = tags.stripIndent` import { promise as fromPromise } from './const'; const used = fromPromise; `; - const { program, compilerHost } = createTypescriptContext(input, additionalFiles); - const result = transformTypescript(undefined, [transformer(program)], program, compilerHost); + const { program, compilerHost } = createTypescriptContext(input, additionalFiles); + const result = transformTypescript(undefined, [transformer(program)], program, compilerHost); - expect(tags.oneLine`${result}`).toEqual(tags.oneLine`${output}`); - }); + expect(tags.oneLine`${result}`).toEqual(tags.oneLine`${output}`); + }); - it('should only drop default imports when having named and default (3)', () => { - const input = tags.stripIndent` + it('should only drop default imports when having named and default (3)', () => { + const input = tags.stripIndent` import promise, { promise as fromPromise } from './const'; const used = promise; const unused = fromPromise; `; - const output = tags.stripIndent` + const output = tags.stripIndent` import promise from './const'; const used = promise; `; - const { program, compilerHost } = createTypescriptContext(input, additionalFiles); - const result = transformTypescript(undefined, [transformer(program)], program, compilerHost); + const { program, compilerHost } = createTypescriptContext(input, additionalFiles); + const result = transformTypescript(undefined, [transformer(program)], program, compilerHost); - expect(tags.oneLine`${result}`).toEqual(tags.oneLine`${output}`); - }); + expect(tags.oneLine`${result}`).toEqual(tags.oneLine`${output}`); + }); - it('should retain import clause', () => { - const input = tags.stripIndent` + it('should retain import clause', () => { + const input = tags.stripIndent` import './const'; ${dummyNode} `; - const output = tags.stripIndent` + const output = tags.stripIndent` import './const'; `; - const { program, compilerHost } = createTypescriptContext(input, additionalFiles); - const result = transformTypescript(undefined, [transformer(program)], program, compilerHost); + const { program, compilerHost } = createTypescriptContext(input, additionalFiles); + const result = transformTypescript(undefined, [transformer(program)], program, compilerHost); - expect(tags.oneLine`${result}`).toEqual(tags.oneLine`${output}`); - }); + expect(tags.oneLine`${result}`).toEqual(tags.oneLine`${output}`); + }); - it(`should remove import for 'ExpressionWithTypeArguments' implements token`, () => { - const input = tags.stripIndent` + it(`should remove import for 'ExpressionWithTypeArguments' implements token`, () => { + const input = tags.stripIndent` import { Bar, Buz, Unused } from './bar'; export class Foo extends Bar implements Buz { } @@ -330,26 +329,26 @@ describe('@ngtools/webpack transformers', () => { ${dummyNode} `; - const output = tags.stripIndent` + const output = tags.stripIndent` import { Bar } from './bar'; export class Foo extends Bar { } `; - const { program, compilerHost } = createTypescriptContext(input); - const result = transformTypescript(undefined, [transformer(program)], program, compilerHost); + const { program, compilerHost } = createTypescriptContext(input); + const result = transformTypescript(undefined, [transformer(program)], program, compilerHost); - expect(tags.oneLine`${result}`).toEqual(tags.oneLine`${output}`); - }); + expect(tags.oneLine`${result}`).toEqual(tags.oneLine`${output}`); + }); - describe('should elide imports decorator type references when emitDecoratorMetadata is false', () => { - const extraCompilerOptions: ts.CompilerOptions = { - emitDecoratorMetadata: false, - experimentalDecorators: true, - }; + describe('should elide imports decorator type references when emitDecoratorMetadata is false', () => { + const extraCompilerOptions: ts.CompilerOptions = { + emitDecoratorMetadata: false, + experimentalDecorators: true, + }; - it('should remove ctor parameter type reference', () => { - const input = tags.stripIndent` + it('should remove ctor parameter type reference', () => { + const input = tags.stripIndent` import { Decorator } from './decorator'; import { Service } from './service'; @@ -362,7 +361,7 @@ describe('@ngtools/webpack transformers', () => { ${dummyNode} `; - const output = tags.stripIndent` + const output = tags.stripIndent` import { __decorate } from "tslib"; import { Decorator } from './decorator'; @@ -371,24 +370,19 @@ describe('@ngtools/webpack transformers', () => { export { Foo }; `; - const { program, compilerHost } = createTypescriptContext( - input, - additionalFiles, - true, - extraCompilerOptions, - ); - const result = transformTypescript( - undefined, - [transformer(program)], - program, - compilerHost, - ); + const { program, compilerHost } = createTypescriptContext( + input, + additionalFiles, + true, + extraCompilerOptions, + ); + const result = transformTypescript(undefined, [transformer(program)], program, compilerHost); - expect(tags.oneLine`${result}`).toEqual(tags.oneLine`${output}`); - }); + expect(tags.oneLine`${result}`).toEqual(tags.oneLine`${output}`); + }); - it('should remove ctor parameter type reference and unused named import from same declaration', () => { - const input = tags.stripIndent` + it('should remove ctor parameter type reference and unused named import from same declaration', () => { + const input = tags.stripIndent` import { Decorator } from './decorator'; import { Service, Service2 as ServiceUnused } from './service'; @@ -401,7 +395,7 @@ describe('@ngtools/webpack transformers', () => { ${dummyNode} `; - const output = tags.stripIndent` + const output = tags.stripIndent` import { __decorate } from "tslib"; import { Decorator } from './decorator'; @@ -410,31 +404,26 @@ describe('@ngtools/webpack transformers', () => { export { Foo }; `; - const { program, compilerHost } = createTypescriptContext( - input, - additionalFiles, - true, - extraCompilerOptions, - ); - const result = transformTypescript( - undefined, - [transformer(program)], - program, - compilerHost, - ); + const { program, compilerHost } = createTypescriptContext( + input, + additionalFiles, + true, + extraCompilerOptions, + ); + const result = transformTypescript(undefined, [transformer(program)], program, compilerHost); - expect(tags.oneLine`${result}`).toEqual(tags.oneLine`${output}`); - }); + expect(tags.oneLine`${result}`).toEqual(tags.oneLine`${output}`); }); + }); - it('keeps jsxFactory imports when configured', () => { - const extraCompilerOptions: ts.CompilerOptions = { - jsxFactory: 'createElement', - experimentalDecorators: true, - jsx: ts.JsxEmit.React, - }; + it('keeps jsxFactory imports when configured', () => { + const extraCompilerOptions: ts.CompilerOptions = { + jsxFactory: 'createElement', + experimentalDecorators: true, + jsx: ts.JsxEmit.React, + }; - const input = tags.stripIndent` + const input = tags.stripIndent` import { Decorator } from './decorator'; import { Service } from './service'; import { createElement } from './jsx'; @@ -450,7 +439,7 @@ describe('@ngtools/webpack transformers', () => { ${dummyNode} `; - const output = tags.stripIndent` + const output = tags.stripIndent` import { __decorate } from "tslib"; import { Decorator } from './decorator'; import { createElement } from './jsx'; @@ -462,26 +451,26 @@ describe('@ngtools/webpack transformers', () => { export { Foo }; `; - const { program, compilerHost } = createTypescriptContext( - input, - additionalFiles, - true, - extraCompilerOptions, - true, - ); - const result = transformTypescript(undefined, [transformer(program)], program, compilerHost); + const { program, compilerHost } = createTypescriptContext( + input, + additionalFiles, + true, + extraCompilerOptions, + true, + ); + const result = transformTypescript(undefined, [transformer(program)], program, compilerHost); - expect(tags.oneLine`${result}`).toEqual(tags.oneLine`${output}`); - }); + expect(tags.oneLine`${result}`).toEqual(tags.oneLine`${output}`); + }); - describe('should not elide imports decorator type references when emitDecoratorMetadata is true', () => { - const extraCompilerOptions: ts.CompilerOptions = { - emitDecoratorMetadata: true, - experimentalDecorators: true, - }; + describe('should not elide imports decorator type references when emitDecoratorMetadata is true', () => { + const extraCompilerOptions: ts.CompilerOptions = { + emitDecoratorMetadata: true, + experimentalDecorators: true, + }; - it('should elide type only named imports', () => { - const input = tags.stripIndent` + it('should elide type only named imports', () => { + const input = tags.stripIndent` import { Decorator } from './decorator'; import { type OnChanges, type SimpleChanges } from './type'; @@ -493,7 +482,7 @@ describe('@ngtools/webpack transformers', () => { ${dummyNode} `; - const output = tags.stripIndent` + const output = tags.stripIndent` import { __decorate } from "tslib"; import { Decorator } from './decorator'; @@ -502,24 +491,19 @@ describe('@ngtools/webpack transformers', () => { export { Foo }; `; - const { program, compilerHost } = createTypescriptContext( - input, - additionalFiles, - true, - extraCompilerOptions, - ); - const result = transformTypescript( - undefined, - [transformer(program)], - program, - compilerHost, - ); + const { program, compilerHost } = createTypescriptContext( + input, + additionalFiles, + true, + extraCompilerOptions, + ); + const result = transformTypescript(undefined, [transformer(program)], program, compilerHost); - expect(tags.oneLine`${result}`).toEqual(tags.oneLine`${output}`); - }); + expect(tags.oneLine`${result}`).toEqual(tags.oneLine`${output}`); + }); - it('should not remove ctor parameter type reference', () => { - const input = tags.stripIndent` + it('should not remove ctor parameter type reference', () => { + const input = tags.stripIndent` import { Decorator } from './decorator'; import { Service } from './service'; @@ -532,7 +516,7 @@ describe('@ngtools/webpack transformers', () => { ${dummyNode} `; - const output = tags.stripIndent` + const output = tags.stripIndent` import { __decorate, __metadata } from "tslib"; import { Decorator } from './decorator'; import { Service } from './service'; @@ -542,24 +526,19 @@ describe('@ngtools/webpack transformers', () => { export { Foo }; `; - const { program, compilerHost } = createTypescriptContext( - input, - additionalFiles, - true, - extraCompilerOptions, - ); - const result = transformTypescript( - undefined, - [transformer(program)], - program, - compilerHost, - ); + const { program, compilerHost } = createTypescriptContext( + input, + additionalFiles, + true, + extraCompilerOptions, + ); + const result = transformTypescript(undefined, [transformer(program)], program, compilerHost); - expect(tags.oneLine`${result}`).toEqual(tags.oneLine`${output}`); - }); + expect(tags.oneLine`${result}`).toEqual(tags.oneLine`${output}`); + }); - it('should not remove property declaration parameter type reference', () => { - const input = tags.stripIndent` + it('should not remove property declaration parameter type reference', () => { + const input = tags.stripIndent` import { Decorator } from './decorator'; import { Service } from './service'; @@ -570,7 +549,7 @@ describe('@ngtools/webpack transformers', () => { ${dummyNode} `; - const output = tags.stripIndent` + const output = tags.stripIndent` import { __decorate, __metadata } from "tslib"; import { Decorator } from './decorator'; @@ -580,24 +559,19 @@ describe('@ngtools/webpack transformers', () => { __decorate([ Decorator(), __metadata("design:type", Service) ], Foo.prototype, "foo", void 0); `; - const { program, compilerHost } = createTypescriptContext( - input, - additionalFiles, - true, - extraCompilerOptions, - ); - const result = transformTypescript( - undefined, - [transformer(program)], - program, - compilerHost, - ); + const { program, compilerHost } = createTypescriptContext( + input, + additionalFiles, + true, + extraCompilerOptions, + ); + const result = transformTypescript(undefined, [transformer(program)], program, compilerHost); - expect(tags.oneLine`${result}`).toEqual(tags.oneLine`${output}`); - }); + expect(tags.oneLine`${result}`).toEqual(tags.oneLine`${output}`); + }); - it('should not remove set accessor parameter type reference', () => { - const input = tags.stripIndent` + it('should not remove set accessor parameter type reference', () => { + const input = tags.stripIndent` import { Decorator } from './decorator'; import { Service } from './service'; @@ -613,7 +587,7 @@ describe('@ngtools/webpack transformers', () => { ${dummyNode} `; - const output = tags.stripIndent` + const output = tags.stripIndent` import { __decorate, __metadata } from "tslib"; import { Decorator } from './decorator'; import { Service } from './service'; @@ -622,24 +596,19 @@ describe('@ngtools/webpack transformers', () => { __decorate([ Decorator(), __metadata("design:type", Service), __metadata("design:paramtypes", [Service]) ], Foo.prototype, "name", null); `; - const { program, compilerHost } = createTypescriptContext( - input, - additionalFiles, - true, - extraCompilerOptions, - ); - const result = transformTypescript( - undefined, - [transformer(program)], - program, - compilerHost, - ); + const { program, compilerHost } = createTypescriptContext( + input, + additionalFiles, + true, + extraCompilerOptions, + ); + const result = transformTypescript(undefined, [transformer(program)], program, compilerHost); - expect(tags.oneLine`${result}`).toEqual(tags.oneLine`${output}`); - }); + expect(tags.oneLine`${result}`).toEqual(tags.oneLine`${output}`); + }); - it('should not remove get accessor parameter type reference', () => { - const input = tags.stripIndent` + it('should not remove get accessor parameter type reference', () => { + const input = tags.stripIndent` import { Decorator } from './decorator'; import { Service } from './service'; @@ -655,7 +624,7 @@ describe('@ngtools/webpack transformers', () => { ${dummyNode} `; - const output = tags.stripIndent` + const output = tags.stripIndent` import { __decorate, __metadata } from "tslib"; import { Decorator } from './decorator'; import { Service } from './service'; @@ -664,24 +633,19 @@ describe('@ngtools/webpack transformers', () => { __decorate([ Decorator(), __metadata("design:type", Service), __metadata("design:paramtypes", []) ], Foo.prototype, "name", null); `; - const { program, compilerHost } = createTypescriptContext( - input, - additionalFiles, - true, - extraCompilerOptions, - ); - const result = transformTypescript( - undefined, - [transformer(program)], - program, - compilerHost, - ); + const { program, compilerHost } = createTypescriptContext( + input, + additionalFiles, + true, + extraCompilerOptions, + ); + const result = transformTypescript(undefined, [transformer(program)], program, compilerHost); - expect(tags.oneLine`${result}`).toEqual(tags.oneLine`${output}`); - }); + expect(tags.oneLine`${result}`).toEqual(tags.oneLine`${output}`); + }); - it('should not remove decorated method return type reference', () => { - const input = tags.stripIndent` + it('should not remove decorated method return type reference', () => { + const input = tags.stripIndent` import { Decorator } from './decorator'; import { Service } from './service'; @@ -695,7 +659,7 @@ describe('@ngtools/webpack transformers', () => { ${dummyNode} `; - const output = tags.stripIndent` + const output = tags.stripIndent` import { __decorate, __metadata } from "tslib"; import { Decorator } from './decorator'; import { Service } from './service'; @@ -705,24 +669,19 @@ describe('@ngtools/webpack transformers', () => { __metadata("design:paramtypes", []), __metadata("design:returntype", Service) ], Foo.prototype, "name", null); `; - const { program, compilerHost } = createTypescriptContext( - input, - additionalFiles, - true, - extraCompilerOptions, - ); - const result = transformTypescript( - undefined, - [transformer(program)], - program, - compilerHost, - ); + const { program, compilerHost } = createTypescriptContext( + input, + additionalFiles, + true, + extraCompilerOptions, + ); + const result = transformTypescript(undefined, [transformer(program)], program, compilerHost); - expect(tags.oneLine`${result}`).toEqual(tags.oneLine`${output}`); - }); + expect(tags.oneLine`${result}`).toEqual(tags.oneLine`${output}`); + }); - it('should not remove decorated method parameter type reference', () => { - const input = tags.stripIndent` + it('should not remove decorated method parameter type reference', () => { + const input = tags.stripIndent` import { Decorator } from './decorator'; import { Service } from './service'; @@ -735,7 +694,7 @@ describe('@ngtools/webpack transformers', () => { ${dummyNode} `; - const output = tags.stripIndent` + const output = tags.stripIndent` import { __decorate, __metadata } from "tslib"; import { Decorator } from './decorator'; @@ -747,24 +706,19 @@ describe('@ngtools/webpack transformers', () => { __metadata("design:returntype", void 0) ], Foo.prototype, "name", null); `; - const { program, compilerHost } = createTypescriptContext( - input, - additionalFiles, - true, - extraCompilerOptions, - ); - const result = transformTypescript( - undefined, - [transformer(program)], - program, - compilerHost, - ); + const { program, compilerHost } = createTypescriptContext( + input, + additionalFiles, + true, + extraCompilerOptions, + ); + const result = transformTypescript(undefined, [transformer(program)], program, compilerHost); - expect(tags.oneLine`${result}`).toEqual(tags.oneLine`${output}`); - }); + expect(tags.oneLine`${result}`).toEqual(tags.oneLine`${output}`); + }); - it('should remove type-only imports', () => { - const input = tags.stripIndent` + it('should remove type-only imports', () => { + const input = tags.stripIndent` import { Decorator } from './decorator'; import { Service } from './service'; import type { OnChanges, SimpleChanges } from './type'; @@ -778,7 +732,7 @@ describe('@ngtools/webpack transformers', () => { ${dummyNode} `; - const output = tags.stripIndent` + const output = tags.stripIndent` import { __decorate, __metadata } from "tslib"; import { Decorator } from './decorator'; import { Service } from './service'; @@ -791,39 +745,34 @@ describe('@ngtools/webpack transformers', () => { Foo = __decorate([ Decorator(), __metadata("design:paramtypes", [Service]) ], Foo); `; - const { program, compilerHost } = createTypescriptContext( - input, - additionalFiles, - true, - extraCompilerOptions, - ); - const result = transformTypescript( - undefined, - [transformer(program)], - program, - compilerHost, - ); - - expect(tags.oneLine`${result}`).toEqual(tags.oneLine`${output}`); - }); + const { program, compilerHost } = createTypescriptContext( + input, + additionalFiles, + true, + extraCompilerOptions, + ); + const result = transformTypescript(undefined, [transformer(program)], program, compilerHost); - describe('NGTSC - ShorthandPropertyAssignment to PropertyAssignment', () => { - const transformShorthandPropertyAssignment = ( - context: ts.TransformationContext, - ): ts.Transformer => { - const visit: ts.Visitor = (node) => { - if (ts.isShorthandPropertyAssignment(node)) { - return ts.factory.createPropertyAssignment(node.name, node.name); - } + expect(tags.oneLine`${result}`).toEqual(tags.oneLine`${output}`); + }); - return ts.visitEachChild(node, (child) => visit(child), context); - }; + describe('NGTSC - ShorthandPropertyAssignment to PropertyAssignment', () => { + const transformShorthandPropertyAssignment = ( + context: ts.TransformationContext, + ): ts.Transformer => { + const visit: ts.Visitor = (node) => { + if (ts.isShorthandPropertyAssignment(node)) { + return ts.factory.createPropertyAssignment(node.name, node.name); + } - return (node) => ts.visitNode(node, visit) as ts.SourceFile; + return ts.visitEachChild(node, (child) => visit(child), context); }; - it('should not elide import when ShorthandPropertyAssignment is transformed to PropertyAssignment', () => { - const input = tags.stripIndent` + return (node) => ts.visitNode(node, visit) as ts.SourceFile; + }; + + it('should not elide import when ShorthandPropertyAssignment is transformed to PropertyAssignment', () => { + const input = tags.stripIndent` import { animations } from './const'; const used = { animations @@ -832,21 +781,20 @@ describe('@ngtools/webpack transformers', () => { ${dummyNode} `; - const output = tags.stripIndent` + const output = tags.stripIndent` import { animations } from './const'; const used = { animations: animations }; `; - const { program, compilerHost } = createTypescriptContext(input, additionalFiles); - const result = transformTypescript( - undefined, - [transformShorthandPropertyAssignment, transformer(program)], - program, - compilerHost, - ); + const { program, compilerHost } = createTypescriptContext(input, additionalFiles); + const result = transformTypescript( + undefined, + [transformShorthandPropertyAssignment, transformer(program)], + program, + compilerHost, + ); - expect(tags.oneLine`${result}`).toEqual(tags.oneLine`${output}`); - }); + expect(tags.oneLine`${result}`).toEqual(tags.oneLine`${output}`); }); }); }); diff --git a/packages/ngtools/webpack/src/transformers/find_image_domains_spec.ts b/packages/ngtools/webpack/src/transformers/find_image_domains_spec.ts index ddb329412518..70bebf4ec15f 100644 --- a/packages/ngtools/webpack/src/transformers/find_image_domains_spec.ts +++ b/packages/ngtools/webpack/src/transformers/find_image_domains_spec.ts @@ -82,42 +82,43 @@ function inputTemplateComponent(provider: string) { `; } -function runSharedTests(template: (povider: string) => string) { - it('should find a domain when a built-in loader is used with a string-literal-like argument', () => { - // Intentionally inconsistent use of quote styles in this data structure: - const builtInLoaders: Array<[string, string]> = [ - ['provideCloudflareLoader("www.cloudflaredomain.com")', 'www.cloudflaredomain.com'], - [ - "provideCloudinaryLoader('https://www.cloudinarydomain.net')", - 'https://www.cloudinarydomain.net', - ], - ['provideImageKitLoader("www.imageKitdomain.com")', 'www.imageKitdomain.com'], - ['provideImgixLoader(`www.imgixdomain.com/images/`)', 'www.imgixdomain.com/images/'], - ]; - for (const loader of builtInLoaders) { - const input = template(loader[0]); - const result = Array.from(findDomains(input)); - expect(result.length).toBe(1); - expect(result[0]).toBe(loader[1]); - } - }); +function runSharedTests(name: string, template: (povider: string) => string) { + describe(name, () => { + it(`should find a domain when a built-in loader is used with a string-literal-like argument`, () => { + // Intentionally inconsistent use of quote styles in this data structure: + const builtInLoaders: Array<[string, string]> = [ + ['provideCloudflareLoader("www.cloudflaredomain.com")', 'www.cloudflaredomain.com'], + [ + "provideCloudinaryLoader('https://www.cloudinarydomain.net')", + 'https://www.cloudinarydomain.net', + ], + ['provideImageKitLoader("www.imageKitdomain.com")', 'www.imageKitdomain.com'], + ['provideImgixLoader(`www.imgixdomain.com/images/`)', 'www.imgixdomain.com/images/'], + ]; + for (const loader of builtInLoaders) { + const input = template(loader[0]); + const result = Array.from(findDomains(input)); + expect(result.length).toBe(1); + expect(result[0]).toBe(loader[1]); + } + }); - it('should find a domain in a custom loader function with a template literal', () => { - const customLoader = tags.stripIndent` + it(`should find a domain in a custom loader function with a template literal`, () => { + const customLoader = tags.stripIndent` { provide: IMAGE_LOADER, useValue: (config: ImageLoaderConfig) => { return ${'`https://customLoaderTemplate.com/images?src=${config.src}&width=${config.width}`'}; }, },`; - const input = template(customLoader); - const result = Array.from(findDomains(input)); - expect(result.length).toBe(1); - expect(result[0]).toBe('https://customLoaderTemplate.com/'); - }); + const input = template(customLoader); + const result = Array.from(findDomains(input)); + expect(result.length).toBe(1); + expect(result[0]).toBe('https://customLoaderTemplate.com/'); + }); - it('should find a domain when provider is alongside other providers', () => { - const customLoader = tags.stripIndent` + it('should find a domain when provider is alongside other providers', () => { + const customLoader = tags.stripIndent` { provide: SOME_OTHER_PROVIDER, useValue: (config: ImageLoaderConfig) => { @@ -137,71 +138,70 @@ function runSharedTests(template: (povider: string) => string) { return ${'`https://notacustomloadertemplate.com/images?src=${config.src}&width=${config.width}`'}; }, },`; - const input = template(customLoader); - const result = Array.from(findDomains(input)); - expect(result.length).toBe(1); - expect(result[0]).toBe('https://customloadertemplate.com/'); + const input = template(customLoader); + const result = Array.from(findDomains(input)); + expect(result.length).toBe(1); + expect(result[0]).toBe('https://customloadertemplate.com/'); + }); }); } -describe('@ngtools/webpack transformers', () => { - describe('find_image_domains (app module)', () => { - runSharedTests(inputTemplateAppModule); - runSharedTests(inputTemplateComponent); +describe('find_image_domains (app module)', () => { + runSharedTests('inputTemplateAppModule', inputTemplateAppModule); + runSharedTests('inputTemplateComponent', inputTemplateComponent); - it('should not find a domain when a built-in loader is used with a variable', () => { - const input = inputTemplateAppModule(`provideCloudflareLoader(myImageCDN)`); - const result = Array.from(findDomains(input)); - expect(result.length).toBe(0); - }); + it('should not find a domain when a built-in loader is used with a variable', () => { + const input = inputTemplateAppModule(`provideCloudflareLoader(myImageCDN)`); + const result = Array.from(findDomains(input)); + expect(result.length).toBe(0); + }); - it('should not find a domain when a built-in loader is used with an expression', () => { - const input = inputTemplateAppModule( - `provideCloudflareLoader("https://www." + (dev ? "dev." : "") + "cloudinarydomain.net")`, - ); - const result = Array.from(findDomains(input)); - expect(result.length).toBe(0); - }); + it('should not find a domain when a built-in loader is used with an expression', () => { + const input = inputTemplateAppModule( + `provideCloudflareLoader("https://www." + (dev ? "dev." : "") + "cloudinarydomain.net")`, + ); + const result = Array.from(findDomains(input)); + expect(result.length).toBe(0); + }); - it('should not find a domain when a built-in loader is used with a template literal', () => { - const input = inputTemplateAppModule( - 'provideCloudflareLoader(`https://www.${dev ? "dev." : ""}cloudinarydomain.net`)', - ); - const result = Array.from(findDomains(input)); - expect(result.length).toBe(0); - }); + it('should not find a domain when a built-in loader is used with a template literal', () => { + const input = inputTemplateAppModule( + 'provideCloudflareLoader(`https://www.${dev ? "dev." : ""}cloudinarydomain.net`)', + ); + const result = Array.from(findDomains(input)); + expect(result.length).toBe(0); + }); - it('should not find a domain in a function that is not a built-in loader', () => { - const input = inputTemplateAppModule('provideNotARealLoader("https://www.foo.com")'); - const result = Array.from(findDomains(input)); - expect(result.length).toBe(0); - }); + it('should not find a domain in a function that is not a built-in loader', () => { + const input = inputTemplateAppModule('provideNotARealLoader("https://www.foo.com")'); + const result = Array.from(findDomains(input)); + expect(result.length).toBe(0); + }); - it('should find a domain in a custom loader function with string concatenation', () => { - const customLoader = tags.stripIndent` + it('should find a domain in a custom loader function with string concatenation', () => { + const customLoader = tags.stripIndent` { provide: IMAGE_LOADER, useValue: (config: ImageLoaderConfig) => { return "https://customLoaderString.com/images?src=" + config.src + "&width=" + config.width; }, },`; - const input = inputTemplateAppModule(customLoader); - const result = Array.from(findDomains(input)); - expect(result.length).toBe(1); - expect(result[0]).toBe('https://customLoaderString.com/'); - }); + const input = inputTemplateAppModule(customLoader); + const result = Array.from(findDomains(input)); + expect(result.length).toBe(1); + expect(result[0]).toBe('https://customLoaderString.com/'); + }); - it('should not find a domain if not an IMAGE_LOADER provider', () => { - const customLoader = tags.stripIndent` + it('should not find a domain if not an IMAGE_LOADER provider', () => { + const customLoader = tags.stripIndent` { provide: SOME_OTHER_PROVIDER, useValue: (config: ImageLoaderConfig) => { return "https://customLoaderString.com/images?src=" + config.src + "&width=" + config.width; }, },`; - const input = inputTemplateAppModule(customLoader); - const result = Array.from(findDomains(input)); - expect(result.length).toBe(0); - }); + const input = inputTemplateAppModule(customLoader); + const result = Array.from(findDomains(input)); + expect(result.length).toBe(0); }); }); diff --git a/packages/ngtools/webpack/src/transformers/remove-ivy-jit-support-calls_spec.ts b/packages/ngtools/webpack/src/transformers/remove-ivy-jit-support-calls_spec.ts index d0ea21aa3054..2c2a2d73f9e7 100644 --- a/packages/ngtools/webpack/src/transformers/remove-ivy-jit-support-calls_spec.ts +++ b/packages/ngtools/webpack/src/transformers/remove-ivy-jit-support-calls_spec.ts @@ -187,10 +187,9 @@ const inputDebugInfo = tags.stripIndent` (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(TestCmp, { className: "TestCmp" }); })(); `; -describe('@ngtools/webpack transformers', () => { - describe('remove-ivy-dev-calls', () => { - it('should allow removing only set class metadata with pure annotation', () => { - const output = tags.stripIndent` +describe('remove-ivy-dev-calls', () => { + it('should allow removing only set class metadata with pure annotation', () => { + const output = tags.stripIndent` export class AppModule { } AppModule.ɵmod = i0.ɵɵdefineNgModule({ type: AppModule, bootstrap: [AppComponent] }); @@ -203,15 +202,15 @@ describe('@ngtools/webpack transformers', () => { AppRoutingModule] }); })(); `; - const result = transform(input, (getTypeChecker) => - removeIvyJitSupportCalls(true, false, false, getTypeChecker), - ); + const result = transform(input, (getTypeChecker) => + removeIvyJitSupportCalls(true, false, false, getTypeChecker), + ); - expect(tags.oneLine`${result}`).toEqual(tags.oneLine`${output}`); - }); + expect(tags.oneLine`${result}`).toEqual(tags.oneLine`${output}`); + }); - it('should allow removing only set class metadata', () => { - const output = tags.stripIndent` + it('should allow removing only set class metadata', () => { + const output = tags.stripIndent` export class AppModule { } AppModule.ɵmod = i0.ɵɵdefineNgModule({ type: AppModule, bootstrap: [AppComponent] }); @@ -224,15 +223,15 @@ describe('@ngtools/webpack transformers', () => { AppRoutingModule] }); })(); `; - const result = transform(inputNoPure, (getTypeChecker) => - removeIvyJitSupportCalls(true, false, false, getTypeChecker), - ); + const result = transform(inputNoPure, (getTypeChecker) => + removeIvyJitSupportCalls(true, false, false, getTypeChecker), + ); - expect(tags.oneLine`${result}`).toEqual(tags.oneLine`${output}`); - }); + expect(tags.oneLine`${result}`).toEqual(tags.oneLine`${output}`); + }); - it('should allow removing only ng module scope with pure annotation', () => { - const output = tags.stripIndent` + it('should allow removing only ng module scope with pure annotation', () => { + const output = tags.stripIndent` export class AppModule { } AppModule.ɵmod = i0.ɵɵdefineNgModule({ type: AppModule, bootstrap: [AppComponent] }); @@ -257,15 +256,15 @@ describe('@ngtools/webpack transformers', () => { }], null, null); })(); `; - const result = transform(input, (getTypeChecker) => - removeIvyJitSupportCalls(false, true, false, getTypeChecker), - ); + const result = transform(input, (getTypeChecker) => + removeIvyJitSupportCalls(false, true, false, getTypeChecker), + ); - expect(tags.oneLine`${result}`).toEqual(tags.oneLine`${output}`); - }); + expect(tags.oneLine`${result}`).toEqual(tags.oneLine`${output}`); + }); - it('should allow removing only ng module scope', () => { - const output = tags.stripIndent` + it('should allow removing only ng module scope', () => { + const output = tags.stripIndent` export class AppModule { } AppModule.ɵmod = i0.ɵɵdefineNgModule({ type: AppModule, bootstrap: [AppComponent] }); @@ -290,15 +289,15 @@ describe('@ngtools/webpack transformers', () => { }], null, null); })(); `; - const result = transform(inputNoPure, (getTypeChecker) => - removeIvyJitSupportCalls(false, true, false, getTypeChecker), - ); + const result = transform(inputNoPure, (getTypeChecker) => + removeIvyJitSupportCalls(false, true, false, getTypeChecker), + ); - expect(tags.oneLine`${result}`).toEqual(tags.oneLine`${output}`); - }); + expect(tags.oneLine`${result}`).toEqual(tags.oneLine`${output}`); + }); - it('should allow removing both set class metadata and ng module scope with pure annotation', () => { - const output = tags.stripIndent` + it('should allow removing both set class metadata and ng module scope with pure annotation', () => { + const output = tags.stripIndent` export class AppModule { } AppModule.ɵmod = i0.ɵɵdefineNgModule({ type: AppModule, bootstrap: [AppComponent] }); @@ -308,15 +307,15 @@ describe('@ngtools/webpack transformers', () => { ]] }); `; - const result = transform(input, (getTypeChecker) => - removeIvyJitSupportCalls(true, true, false, getTypeChecker), - ); + const result = transform(input, (getTypeChecker) => + removeIvyJitSupportCalls(true, true, false, getTypeChecker), + ); - expect(tags.oneLine`${result}`).toEqual(tags.oneLine`${output}`); - }); + expect(tags.oneLine`${result}`).toEqual(tags.oneLine`${output}`); + }); - it('should allow removing both set class metadata and ng module scope', () => { - const output = tags.stripIndent` + it('should allow removing both set class metadata and ng module scope', () => { + const output = tags.stripIndent` export class AppModule { } AppModule.ɵmod = i0.ɵɵdefineNgModule({ type: AppModule, bootstrap: [AppComponent] }); @@ -326,31 +325,31 @@ describe('@ngtools/webpack transformers', () => { ]] }); `; - const result = transform(inputNoPure, (getTypeChecker) => - removeIvyJitSupportCalls(true, true, false, getTypeChecker), - ); + const result = transform(inputNoPure, (getTypeChecker) => + removeIvyJitSupportCalls(true, true, false, getTypeChecker), + ); - expect(tags.oneLine`${result}`).toEqual(tags.oneLine`${output}`); - }); + expect(tags.oneLine`${result}`).toEqual(tags.oneLine`${output}`); + }); - it('should allow removing neither set class metadata nor ng module scope with pure annotation', () => { - const result = transform(input, (getTypeChecker) => - removeIvyJitSupportCalls(false, false, false, getTypeChecker), - ); + it('should allow removing neither set class metadata nor ng module scope with pure annotation', () => { + const result = transform(input, (getTypeChecker) => + removeIvyJitSupportCalls(false, false, false, getTypeChecker), + ); - expect(tags.oneLine`${result}`).toEqual(tags.oneLine`${input}`); - }); + expect(tags.oneLine`${result}`).toEqual(tags.oneLine`${input}`); + }); - it('should allow removing neither set class metadata nor ng module scope', () => { - const result = transform(inputNoPure, (getTypeChecker) => - removeIvyJitSupportCalls(false, false, false, getTypeChecker), - ); + it('should allow removing neither set class metadata nor ng module scope', () => { + const result = transform(inputNoPure, (getTypeChecker) => + removeIvyJitSupportCalls(false, false, false, getTypeChecker), + ); - expect(tags.oneLine`${result}`).toEqual(tags.oneLine`${inputNoPure}`); - }); + expect(tags.oneLine`${result}`).toEqual(tags.oneLine`${inputNoPure}`); + }); - it('should strip unused imports when removing set class metadata and ng module scope with pure annotation', () => { - const imports = tags.stripIndent` + it('should strip unused imports when removing set class metadata and ng module scope with pure annotation', () => { + const imports = tags.stripIndent` import { BrowserModule } from '@angular/platform-browser'; import { NgModule } from '@angular/core'; import { AppRoutingModule } from './app-routing.module'; @@ -359,7 +358,7 @@ describe('@ngtools/webpack transformers', () => { import * as i0 from "@angular/core"; `; - const output = tags.stripIndent` + const output = tags.stripIndent` import { BrowserModule } from '@angular/platform-browser'; import { AppRoutingModule } from './app-routing.module'; import { AppComponent } from './app.component'; @@ -373,15 +372,15 @@ describe('@ngtools/webpack transformers', () => { ]] }); `; - const result = transform(imports + input, (getTypeChecker) => - removeIvyJitSupportCalls(true, true, false, getTypeChecker), - ); + const result = transform(imports + input, (getTypeChecker) => + removeIvyJitSupportCalls(true, true, false, getTypeChecker), + ); - expect(tags.oneLine`${result}`).toEqual(tags.oneLine`${output}`); - }); + expect(tags.oneLine`${result}`).toEqual(tags.oneLine`${output}`); + }); - it('should strip unused imports when removing set class metadata and ng module scope', () => { - const imports = tags.stripIndent` + it('should strip unused imports when removing set class metadata and ng module scope', () => { + const imports = tags.stripIndent` import { BrowserModule } from '@angular/platform-browser'; import { NgModule } from '@angular/core'; import { AppRoutingModule } from './app-routing.module'; @@ -390,7 +389,7 @@ describe('@ngtools/webpack transformers', () => { import * as i0 from "@angular/core"; `; - const output = tags.stripIndent` + const output = tags.stripIndent` import { BrowserModule } from '@angular/platform-browser'; import { AppRoutingModule } from './app-routing.module'; import { AppComponent } from './app.component'; @@ -404,15 +403,15 @@ describe('@ngtools/webpack transformers', () => { ]] }); `; - const result = transform(imports + inputNoPure, (getTypeChecker) => - removeIvyJitSupportCalls(true, true, false, getTypeChecker), - ); + const result = transform(imports + inputNoPure, (getTypeChecker) => + removeIvyJitSupportCalls(true, true, false, getTypeChecker), + ); - expect(tags.oneLine`${result}`).toEqual(tags.oneLine`${output}`); - }); + expect(tags.oneLine`${result}`).toEqual(tags.oneLine`${output}`); + }); - it('should remove setClassMetadata and setNgModuleScope calls inside arrow-function-based IIFEs that have bodies', () => { - const output = tags.stripIndent` + it('should remove setClassMetadata and setNgModuleScope calls inside arrow-function-based IIFEs that have bodies', () => { + const output = tags.stripIndent` export class AppModule { } AppModule.ɵmod = i0.ɵɵdefineNgModule({ type: AppModule, bootstrap: [AppComponent] }); @@ -422,15 +421,15 @@ describe('@ngtools/webpack transformers', () => { ]] }); `; - const result = transform(inputArrowFnWithBody, (getTypeChecker) => - removeIvyJitSupportCalls(true, true, false, getTypeChecker), - ); + const result = transform(inputArrowFnWithBody, (getTypeChecker) => + removeIvyJitSupportCalls(true, true, false, getTypeChecker), + ); - expect(tags.oneLine`${result}`).toEqual(tags.oneLine`${output}`); - }); + expect(tags.oneLine`${result}`).toEqual(tags.oneLine`${output}`); + }); - it('should remove setClassMetadata and setNgModuleScope calls inside arrow-function-based IIFEs that have an implicit return', () => { - const output = tags.stripIndent` + it('should remove setClassMetadata and setNgModuleScope calls inside arrow-function-based IIFEs that have an implicit return', () => { + const output = tags.stripIndent` export class AppModule { } AppModule.ɵmod = i0.ɵɵdefineNgModule({ type: AppModule, bootstrap: [AppComponent] }); @@ -440,56 +439,55 @@ describe('@ngtools/webpack transformers', () => { ]] }); `; - const result = transform(inputArrowFnWithImplicitReturn, (getTypeChecker) => - removeIvyJitSupportCalls(true, true, false, getTypeChecker), - ); + const result = transform(inputArrowFnWithImplicitReturn, (getTypeChecker) => + removeIvyJitSupportCalls(true, true, false, getTypeChecker), + ); - expect(tags.oneLine`${result}`).toEqual(tags.oneLine`${output}`); - }); + expect(tags.oneLine`${result}`).toEqual(tags.oneLine`${output}`); + }); - it('should remove setClassMetadataAsync calls', () => { - const output = tags.stripIndent` + it('should remove setClassMetadataAsync calls', () => { + const output = tags.stripIndent` export class TestCmp { } TestCmp.ɵfac = function TestCmp_Factory(t) { return new (t || TestCmp)(); }; TestCmp.ɵcmp = i0.ɵɵdefineComponent({ type: TestCmp, selectors: [["test-cmp"]], standalone: true, features: [i0.ɵɵStandaloneFeature], decls: 3, vars: 0, template: function TestCmp_Template(rf, ctx) { }, encapsulation: 2 }); `; - const result = transform(inputAsync, (getTypeChecker) => - removeIvyJitSupportCalls(true, false, false, getTypeChecker), - ); + const result = transform(inputAsync, (getTypeChecker) => + removeIvyJitSupportCalls(true, false, false, getTypeChecker), + ); - expect(tags.oneLine`${result}`).toEqual(tags.oneLine`${output}`); - }); + expect(tags.oneLine`${result}`).toEqual(tags.oneLine`${output}`); + }); - it('should remove arrow-function-based setClassMetadataAsync calls', () => { - const output = tags.stripIndent` + it('should remove arrow-function-based setClassMetadataAsync calls', () => { + const output = tags.stripIndent` export class TestCmp { } TestCmp.ɵfac = function TestCmp_Factory(t) { return new (t || TestCmp)(); }; TestCmp.ɵcmp = i0.ɵɵdefineComponent({ type: TestCmp, selectors: [["test-cmp"]], standalone: true, features: [i0.ɵɵStandaloneFeature], decls: 3, vars: 0, template: function TestCmp_Template(rf, ctx) { }, encapsulation: 2 }); `; - const result = transform(inputAsyncArrowFn, (getTypeChecker) => - removeIvyJitSupportCalls(true, false, false, getTypeChecker), - ); + const result = transform(inputAsyncArrowFn, (getTypeChecker) => + removeIvyJitSupportCalls(true, false, false, getTypeChecker), + ); - expect(tags.oneLine`${result}`).toEqual(tags.oneLine`${output}`); - }); + expect(tags.oneLine`${result}`).toEqual(tags.oneLine`${output}`); + }); - it('should remove setClassDebugInfo calls', () => { - const output = tags.stripIndent` + it('should remove setClassDebugInfo calls', () => { + const output = tags.stripIndent` import * as i0 from "@angular/core"; export class TestCmp { } TestCmp.ɵfac = function TestCmp_Factory(t) { return new (t || TestCmp)(); }; TestCmp.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: TestCmp, selectors: [["test-cmp"]], decls: 0, vars: 0, template: function TestCmp_Template(rf, ctx) { }, encapsulation: 2 }); `; - const result = transform(inputDebugInfo, (getTypeChecker) => - removeIvyJitSupportCalls(true, false, true, getTypeChecker), - ); + const result = transform(inputDebugInfo, (getTypeChecker) => + removeIvyJitSupportCalls(true, false, true, getTypeChecker), + ); - expect(tags.oneLine`${result}`).toEqual(tags.oneLine`${output}`); - }); + expect(tags.oneLine`${result}`).toEqual(tags.oneLine`${output}`); }); }); diff --git a/packages/ngtools/webpack/src/transformers/replace_resources_spec.ts b/packages/ngtools/webpack/src/transformers/replace_resources_spec.ts index 8b15f5d55b09..e0be8e4ebb03 100644 --- a/packages/ngtools/webpack/src/transformers/replace_resources_spec.ts +++ b/packages/ngtools/webpack/src/transformers/replace_resources_spec.ts @@ -27,10 +27,9 @@ function transform( return transformTypescript(input, [transformer], program, compilerHost); } -describe('@ngtools/webpack transformers', () => { - describe('find_resources', () => { - it('should replace resources', () => { - const input = tags.stripIndent` +describe('find_resources', () => { + it('should replace resources', () => { + const input = tags.stripIndent` import { Component } from '@angular/core'; @Component({ @@ -42,7 +41,7 @@ describe('@ngtools/webpack transformers', () => { title = 'app'; } `; - const output = tags.stripIndent` + const output = tags.stripIndent` import { __decorate } from "tslib"; import __NG_CLI_RESOURCE__0 from "./app.component.html?ngResource"; import __NG_CLI_RESOURCE__1 from "./app.component.css?ngResource"; @@ -64,12 +63,12 @@ describe('@ngtools/webpack transformers', () => { export { AppComponent }; `; - const result = transform(input); - expect(tags.oneLine`${result}`).toEqual(tags.oneLine`${output}`); - }); + const result = transform(input); + expect(tags.oneLine`${result}`).toEqual(tags.oneLine`${output}`); + }); - it('should replace resources with `require()` when module is CommonJs', () => { - const input = tags.stripIndent` + it('should replace resources with `require()` when module is CommonJs', () => { + const input = tags.stripIndent` import { Component } from '@angular/core'; @Component({ @@ -82,7 +81,7 @@ describe('@ngtools/webpack transformers', () => { } `; - const output = tags.stripIndent` + const output = tags.stripIndent` "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.AppComponent = void 0; @@ -100,12 +99,12 @@ describe('@ngtools/webpack transformers', () => { styles: [require("./app.component.css?ngResource"), require("./app.component.2.css?ngResource")] }) ], AppComponent); `; - const result = transform(input, true, true, ts.ModuleKind.CommonJS); - expect(tags.oneLine`${result}`).toEqual(tags.oneLine`${output}`); - }); + const result = transform(input, true, true, ts.ModuleKind.CommonJS); + expect(tags.oneLine`${result}`).toEqual(tags.oneLine`${output}`); + }); - it('should support svg as templates', () => { - const input = tags.stripIndent` + it('should support svg as templates', () => { + const input = tags.stripIndent` import { Component } from '@angular/core'; @Component({ @@ -116,7 +115,7 @@ describe('@ngtools/webpack transformers', () => { title = 'app'; } `; - const output = tags.stripIndent` + const output = tags.stripIndent` import { __decorate } from "tslib"; import __NG_CLI_RESOURCE__0 from "./app.component.svg?ngResource"; import { Component } from '@angular/core'; @@ -134,12 +133,12 @@ describe('@ngtools/webpack transformers', () => { export { AppComponent }; `; - const result = transform(input); - expect(tags.oneLine`${result}`).toEqual(tags.oneLine`${output}`); - }); + const result = transform(input); + expect(tags.oneLine`${result}`).toEqual(tags.oneLine`${output}`); + }); - it('should merge styleUrls with styles', () => { - const input = tags.stripIndent` + it('should merge styleUrls with styles', () => { + const input = tags.stripIndent` import { Component } from '@angular/core'; @Component({ @@ -152,7 +151,7 @@ describe('@ngtools/webpack transformers', () => { title = 'app'; } `; - const output = tags.stripIndent` + const output = tags.stripIndent` import { __decorate } from "tslib"; import __NG_CLI_RESOURCE__0 from "./app.component.html?ngResource"; import __NG_CLI_RESOURCE__1 from "./app.component.css?ngResource"; @@ -173,12 +172,12 @@ describe('@ngtools/webpack transformers', () => { export { AppComponent }; `; - const result = transform(input); - expect(tags.oneLine`${result}`).toEqual(tags.oneLine`${output}`); - }); + const result = transform(input); + expect(tags.oneLine`${result}`).toEqual(tags.oneLine`${output}`); + }); - it('should replace resources with backticks', () => { - const input = ` + it('should replace resources with backticks', () => { + const input = ` import { Component } from '@angular/core'; @Component({ @@ -190,7 +189,7 @@ describe('@ngtools/webpack transformers', () => { title = 'app'; } `; - const output = ` + const output = ` import { __decorate } from "tslib"; import __NG_CLI_RESOURCE__0 from "./app.component.html?ngResource"; import __NG_CLI_RESOURCE__1 from "./app.component.css?ngResource"; @@ -212,12 +211,12 @@ describe('@ngtools/webpack transformers', () => { export { AppComponent }; `; - const result = transform(input); - expect(tags.oneLine`${result}`).toEqual(tags.oneLine`${output}`); - }); + const result = transform(input); + expect(tags.oneLine`${result}`).toEqual(tags.oneLine`${output}`); + }); - it('should replace resources if Component decorator is aliased', () => { - const input = tags.stripIndent` + it('should replace resources if Component decorator is aliased', () => { + const input = tags.stripIndent` import { Component as NgComponent } from '@angular/core'; @NgComponent({ @@ -229,7 +228,7 @@ describe('@ngtools/webpack transformers', () => { title = 'app'; } `; - const output = tags.stripIndent` + const output = tags.stripIndent` import { __decorate } from "tslib"; import __NG_CLI_RESOURCE__0 from "./app.component.html?ngResource"; import __NG_CLI_RESOURCE__1 from "./app.component.css?ngResource"; @@ -251,16 +250,16 @@ describe('@ngtools/webpack transformers', () => { export { AppComponent }; `; - const { program } = createTypescriptContext(input); - const getTypeChecker = () => program.getTypeChecker(); - const transformer = replaceResources(() => true, getTypeChecker); - const result = transformTypescript(input, [transformer]); + const { program } = createTypescriptContext(input); + const getTypeChecker = () => program.getTypeChecker(); + const transformer = replaceResources(() => true, getTypeChecker); + const result = transformTypescript(input, [transformer]); - expect(tags.oneLine`${result}`).toEqual(tags.oneLine`${output}`); - }); + expect(tags.oneLine`${result}`).toEqual(tags.oneLine`${output}`); + }); - it('should replace resources if Angular Core import is namespaced', () => { - const input = tags.stripIndent` + it('should replace resources if Angular Core import is namespaced', () => { + const input = tags.stripIndent` import * as ng from '@angular/core'; @ng.Component({ @@ -272,7 +271,7 @@ describe('@ngtools/webpack transformers', () => { title = 'app'; } `; - const output = tags.stripIndent` + const output = tags.stripIndent` import { __decorate } from "tslib"; import __NG_CLI_RESOURCE__0 from "./app.component.html?ngResource"; import __NG_CLI_RESOURCE__1 from "./app.component.css?ngResource"; @@ -294,12 +293,12 @@ describe('@ngtools/webpack transformers', () => { export { AppComponent }; `; - const result = transform(input); - expect(tags.oneLine`${result}`).toEqual(tags.oneLine`${output}`); - }); + const result = transform(input); + expect(tags.oneLine`${result}`).toEqual(tags.oneLine`${output}`); + }); - it('should replace resources specified as string literals', () => { - const input = tags.stripIndent` + it('should replace resources specified as string literals', () => { + const input = tags.stripIndent` import { Component } from '@angular/core'; @Component({ @@ -312,7 +311,7 @@ describe('@ngtools/webpack transformers', () => { title = 'app'; } `; - const output = tags.stripIndent` + const output = tags.stripIndent` import { __decorate } from "tslib"; import __NG_CLI_RESOURCE__0 from "./app.component.html?ngResource"; import __NG_CLI_RESOURCE__1 from "./app.component.css?ngResource"; @@ -333,12 +332,12 @@ describe('@ngtools/webpack transformers', () => { export { AppComponent }; `; - const result = transform(input); - expect(tags.oneLine`${result}`).toEqual(tags.oneLine`${output}`); - }); + const result = transform(input); + expect(tags.oneLine`${result}`).toEqual(tags.oneLine`${output}`); + }); - it('should not replace resources if not in Component decorator', () => { - const input = tags.stripIndent` + it('should not replace resources if not in Component decorator', () => { + const input = tags.stripIndent` import { Component } from '@angular/core'; @Component({ @@ -356,7 +355,7 @@ describe('@ngtools/webpack transformers', () => { } `; - const output = tags.stripIndent` + const output = tags.stripIndent` import { __decorate } from "tslib"; import __NG_CLI_RESOURCE__0 from "./app.component.html?ngResource"; import __NG_CLI_RESOURCE__1 from "./app.component.css?ngResource"; @@ -384,12 +383,12 @@ describe('@ngtools/webpack transformers', () => { export { AppComponent }; `; - const result = transform(input); - expect(tags.oneLine`${result}`).toEqual(tags.oneLine`${output}`); - }); + const result = transform(input); + expect(tags.oneLine`${result}`).toEqual(tags.oneLine`${output}`); + }); - it('should not replace resources if not in an NG Component decorator', () => { - const input = tags.stripIndent` + it('should not replace resources if not in an NG Component decorator', () => { + const input = tags.stripIndent` import { Component } from 'foo'; @Component({ @@ -407,7 +406,7 @@ describe('@ngtools/webpack transformers', () => { } `; - const output = tags.stripIndent` + const output = tags.stripIndent` import { __decorate } from "tslib"; import { Component } from 'foo'; @@ -432,12 +431,12 @@ describe('@ngtools/webpack transformers', () => { export { AppComponent }; `; - const result = transform(input); - expect(tags.oneLine`${result}`).toEqual(tags.oneLine`${output}`); - }); + const result = transform(input); + expect(tags.oneLine`${result}`).toEqual(tags.oneLine`${output}`); + }); - it('should not replace resources if shouldTransform returns false', () => { - const input = tags.stripIndent` + it('should not replace resources if shouldTransform returns false', () => { + const input = tags.stripIndent` import { Component } from '@angular/core'; @Component({ @@ -449,7 +448,7 @@ describe('@ngtools/webpack transformers', () => { title = 'app'; } `; - const output = ` + const output = ` import { __decorate } from "tslib"; import { Component } from '@angular/core'; let AppComponent = class AppComponent { @@ -467,8 +466,7 @@ describe('@ngtools/webpack transformers', () => { export { AppComponent }; `; - const result = transform(input, false); - expect(tags.oneLine`${result}`).toEqual(tags.oneLine`${output}`); - }); + const result = transform(input, false); + expect(tags.oneLine`${result}`).toEqual(tags.oneLine`${output}`); }); }); diff --git a/packages/schematics/angular/e2e/index_spec.ts b/packages/schematics/angular/e2e/index_spec.ts index e04e4ca177b5..d8253e52154f 100644 --- a/packages/schematics/angular/e2e/index_spec.ts +++ b/packages/schematics/angular/e2e/index_spec.ts @@ -11,7 +11,7 @@ import { Schema as ApplicationOptions } from '../application/schema'; import { Schema as WorkspaceOptions } from '../workspace/schema'; import { Schema as E2eOptions } from './schema'; -describe('Application Schematic', () => { +describe('E2E Schematic', () => { const schematicRunner = new SchematicTestRunner( '@schematics/angular', require.resolve('../collection.json'), diff --git a/packages/schematics/angular/enum/index_spec.ts b/packages/schematics/angular/enum/index_spec.ts index f6bee88e7243..1b0e8edcad0d 100644 --- a/packages/schematics/angular/enum/index_spec.ts +++ b/packages/schematics/angular/enum/index_spec.ts @@ -41,13 +41,6 @@ describe('Enum Schematic', () => { appTree = await schematicRunner.runSchematic('application', appOptions, appTree); }); - it('should create an enumeration', async () => { - const tree = await schematicRunner.runSchematic('enum', defaultOptions, appTree); - - const files = tree.files; - expect(files).toContain('/projects/bar/src/app/foo.ts'); - }); - it('should create an enumeration', async () => { const tree = await schematicRunner.runSchematic('enum', defaultOptions, appTree); diff --git a/packages/schematics/angular/library/index_spec.ts b/packages/schematics/angular/library/index_spec.ts index bf4f8714294e..9d76bb913d17 100644 --- a/packages/schematics/angular/library/index_spec.ts +++ b/packages/schematics/angular/library/index_spec.ts @@ -414,7 +414,7 @@ describe('Library Schematic', () => { expect(workspace.projects.foo.architect.test.builder).toBe('@angular/build:unit-test'); }); - it(`should add 'unit-test' test builder`, async () => { + it(`should add 'unit-test' test builder when vitest is available`, async () => { const packageJson = getJsonFileContent(workspaceTree, 'package.json'); packageJson['devDependencies']['vitest'] = '^4.0.0'; workspaceTree.overwrite('package.json', JSON.stringify(packageJson)); diff --git a/packages/schematics/angular/module/index_spec.ts b/packages/schematics/angular/module/index_spec.ts index 661142b66fc7..8224f3642111 100644 --- a/packages/schematics/angular/module/index_spec.ts +++ b/packages/schematics/angular/module/index_spec.ts @@ -70,15 +70,6 @@ describe('Module Schematic', () => { expect(content).toMatch(/imports: \[[^\]]*FooModule[^\]]*\]/m); }); - it('should import into another module when using flat', async () => { - const options = { ...defaultOptions, flat: true, module: 'app-module.ts' }; - - const tree = await schematicRunner.runSchematic('module', options, appTree); - const content = tree.readContent('/projects/bar/src/app/app-module.ts'); - expect(content).toMatch(/import { FooModule } from '.\/foo-module'/); - expect(content).toMatch(/imports: \[[^\]]*FooModule[^\]]*\]/m); - }); - it('should import into another module (deep)', async () => { let tree = appTree; diff --git a/packages/schematics/angular/refactor/jasmine-vitest/test-file-transformer_add-imports_spec.ts b/packages/schematics/angular/refactor/jasmine-vitest/test-file-transformer_add-imports_spec.ts index 1fd4beb6546e..6cef7fc3d5ca 100644 --- a/packages/schematics/angular/refactor/jasmine-vitest/test-file-transformer_add-imports_spec.ts +++ b/packages/schematics/angular/refactor/jasmine-vitest/test-file-transformer_add-imports_spec.ts @@ -8,60 +8,59 @@ import { expectTransformation } from './test-helpers'; -describe('Jasmine to Vitest Transformer', () => { - describe('addImports option', () => { - it('should add value imports when addImports is true', async () => { - const input = `spyOn(foo, 'bar');`; - const expected = ` +describe('Jasmine to Vitest Transformer - addImports option', () => { + it('should add value imports when addImports is true', async () => { + const input = `spyOn(foo, 'bar');`; + const expected = ` import { vi } from 'vitest'; vi.spyOn(foo, 'bar'); `; - await expectTransformation(input, expected, true); - }); + await expectTransformation(input, expected, true); + }); - it('should generate a single, combined import for value and type imports when addImports is true', async () => { - const input = ` + it('should generate a single, combined import for value and type imports when addImports is true', async () => { + const input = ` let mySpy: jasmine.Spy; spyOn(foo, 'bar'); `; - const expected = ` + const expected = ` import { type Mock, vi } from 'vitest'; let mySpy: Mock; vi.spyOn(foo, 'bar'); `; - await expectTransformation(input, expected, true); - }); + await expectTransformation(input, expected, true); + }); - it('should only add type imports when addImports is false', async () => { - const input = ` + it('should only add type imports when addImports is false', async () => { + const input = ` let mySpy: jasmine.Spy; spyOn(foo, 'bar'); `; - const expected = ` + const expected = ` import type { Mock } from 'vitest'; let mySpy: Mock; vi.spyOn(foo, 'bar'); `; - await expectTransformation(input, expected, false); - }); + await expectTransformation(input, expected, false); + }); - it('should not add an import if no Vitest APIs are used, even when addImports is true', async () => { - const input = `const a = 1;`; - const expected = `const a = 1;`; - await expectTransformation(input, expected, true); - }); + it('should not add an import if no Vitest APIs are used, even when addImports is true', async () => { + const input = `const a = 1;`; + const expected = `const a = 1;`; + await expectTransformation(input, expected, true); + }); - it('should add imports for top-level describe and it when addImports is true', async () => { - const input = ` + it('should add imports for top-level describe and it when addImports is true', async () => { + const input = ` describe('My Suite', () => { it('should do something', () => { // test content }); }); `; - const expected = ` + const expected = ` import { describe, it } from 'vitest'; describe('My Suite', () => { @@ -70,26 +69,26 @@ describe('Jasmine to Vitest Transformer', () => { }); }); `; - await expectTransformation(input, expected, true); - }); + await expectTransformation(input, expected, true); + }); - it('should add imports for top-level expect when addImports is true', async () => { - const input = `expect(true).toBe(true);`; - const expected = ` + it('should add imports for top-level expect when addImports is true', async () => { + const input = `expect(true).toBe(true);`; + const expected = ` import { expect } from 'vitest'; expect(true).toBe(true); `; - await expectTransformation(input, expected, true); - }); + await expectTransformation(input, expected, true); + }); - it('should add imports for beforeEach and afterEach when addImports is true', async () => { - const input = ` + it('should add imports for beforeEach and afterEach when addImports is true', async () => { + const input = ` describe('My Suite', () => { beforeEach(() => {}); afterEach(() => {}); }); `; - const expected = ` + const expected = ` import { afterEach, beforeEach, describe } from 'vitest'; describe('My Suite', () => { @@ -97,17 +96,17 @@ describe('Jasmine to Vitest Transformer', () => { afterEach(() => {}); }); `; - await expectTransformation(input, expected, true); - }); + await expectTransformation(input, expected, true); + }); - it('should add imports for beforeAll and afterAll when addImports is true', async () => { - const input = ` + it('should add imports for beforeAll and afterAll when addImports is true', async () => { + const input = ` describe('My Suite', () => { beforeAll(() => {}); afterAll(() => {}); }); `; - const expected = ` + const expected = ` import { afterAll, beforeAll, describe } from 'vitest'; describe('My Suite', () => { @@ -115,7 +114,6 @@ describe('Jasmine to Vitest Transformer', () => { afterAll(() => {}); }); `; - await expectTransformation(input, expected, true); - }); + await expectTransformation(input, expected, true); }); }); diff --git a/packages/schematics/angular/refactor/jasmine-vitest/test-file-transformer_spec.ts b/packages/schematics/angular/refactor/jasmine-vitest/test-file-transformer_spec.ts index abe1f3655cdd..d9f78c471e18 100644 --- a/packages/schematics/angular/refactor/jasmine-vitest/test-file-transformer_spec.ts +++ b/packages/schematics/angular/refactor/jasmine-vitest/test-file-transformer_spec.ts @@ -8,34 +8,33 @@ import { expectTransformation } from './test-helpers'; -describe('Jasmine to Vitest Transformer', () => { - describe('Nested Transformations', () => { - const testCases = [ - { - description: 'should handle nested transforms like a spy returning an asymmetric matcher', - input: `spyOn(service, 'getValue').and.returnValue(jasmine.any(Number));`, - expected: `vi.spyOn(service, 'getValue').mockReturnValue(expect.any(Number));`, - }, - { - description: 'should handle expectAsync resolving to an asymmetric matcher', - input: `await expectAsync(myPromise).toBeResolvedTo(jasmine.any(Number));`, - expected: `await expect(myPromise).resolves.toEqual(expect.any(Number));`, - }, - { - description: - 'should handle spying on a property that returns a promise and using expectAsync', - input: ` +describe('Jasmine to Vitest Transformer - Nested Transformations', () => { + const testCases = [ + { + description: 'should handle nested transforms like a spy returning an asymmetric matcher', + input: `spyOn(service, 'getValue').and.returnValue(jasmine.any(Number));`, + expected: `vi.spyOn(service, 'getValue').mockReturnValue(expect.any(Number));`, + }, + { + description: 'should handle expectAsync resolving to an asymmetric matcher', + input: `await expectAsync(myPromise).toBeResolvedTo(jasmine.any(Number));`, + expected: `await expect(myPromise).resolves.toEqual(expect.any(Number));`, + }, + { + description: + 'should handle spying on a property that returns a promise and using expectAsync', + input: ` spyOnProperty(service, 'myProp', 'get').and.returnValue(Promise.resolve(42)); await expectAsync(service.myProp).toBeResolvedTo(42); `, - expected: ` + expected: ` vi.spyOn(service, 'myProp', 'get').mockReturnValue(Promise.resolve(42)); await expect(service.myProp).resolves.toEqual(42); `, - }, - { - description: 'should handle a done callback that also uses timer mocks', - input: ` + }, + { + description: 'should handle a done callback that also uses timer mocks', + input: ` it('should handle timers and async', (done) => { jasmine.clock().install(); setTimeout(() => { @@ -46,7 +45,7 @@ describe('Jasmine to Vitest Transformer', () => { jasmine.clock().tick(100); }); `, - expected: ` + expected: ` it('should handle timers and async', async () => { vi.useFakeTimers(); setTimeout(() => { @@ -56,57 +55,57 @@ describe('Jasmine to Vitest Transformer', () => { vi.advanceTimersByTime(100); }); `, - }, - { - description: 'should handle toHaveBeenCalledOnceWith using an asymmetric matcher', - input: `expect(mySpy).toHaveBeenCalledOnceWith(jasmine.objectContaining({ id: 1 }));`, - expected: ` + }, + { + description: 'should handle toHaveBeenCalledOnceWith using an asymmetric matcher', + input: `expect(mySpy).toHaveBeenCalledOnceWith(jasmine.objectContaining({ id: 1 }));`, + expected: ` expect(mySpy).toHaveBeenCalledTimes(1); expect(mySpy).toHaveBeenCalledWith(expect.objectContaining({ id: 1 })); `, - }, - { - description: 'should handle withContext combined with a multi-statement matcher', - input: `expect(mySpy).withContext('custom message').toHaveBeenCalledOnceWith('foo');`, - expected: ` + }, + { + description: 'should handle withContext combined with a multi-statement matcher', + input: `expect(mySpy).withContext('custom message').toHaveBeenCalledOnceWith('foo');`, + expected: ` expect(mySpy, 'custom message').toHaveBeenCalledTimes(1); expect(mySpy, 'custom message').toHaveBeenCalledWith('foo'); `, - }, - { - description: 'should handle createSpyObj with complex return values', - input: `const spy = jasmine.createSpyObj('MyService', { getPromise: Promise.resolve(jasmine.any(String)) });`, - expected: ` + }, + { + description: 'should handle createSpyObj with complex return values', + input: `const spy = jasmine.createSpyObj('MyService', { getPromise: Promise.resolve(jasmine.any(String)) });`, + expected: ` const spy = { getPromise: vi.fn().mockName("MyService.getPromise").mockReturnValue(Promise.resolve(expect.any(String))), }; `, - }, - { - description: 'should handle arrayWithExactContents containing nested asymmetric matchers', - input: `expect(myArray).toEqual(jasmine.arrayWithExactContents([jasmine.objectContaining({ id: 1 })]));`, - /* eslint-disable max-len */ - expected: ` + }, + { + description: 'should handle arrayWithExactContents containing nested asymmetric matchers', + input: `expect(myArray).toEqual(jasmine.arrayWithExactContents([jasmine.objectContaining({ id: 1 })]));`, + /* eslint-disable max-len */ + expected: ` // TODO: vitest-migration: Verify this matches strict array content (multiset equality). Vitest's arrayContaining is a subset check. expect(myArray).toHaveLength(1); expect(myArray).toEqual(expect.arrayContaining([expect.objectContaining({ id: 1 })])); `, - /* eslint-enable max-len */ - }, - { - description: 'should handle a spy rejecting with an asymmetric matcher', - input: `spyOn(service, 'myMethod').and.rejectWith(jasmine.objectContaining({ code: 'ERROR' }));`, - expected: `vi.spyOn(service, 'myMethod').mockRejectedValue(expect.objectContaining({ code: 'ERROR' }));`, - }, - { - description: 'should handle a complex spy object with a property map and subsequent spyOn', - input: ` + /* eslint-enable max-len */ + }, + { + description: 'should handle a spy rejecting with an asymmetric matcher', + input: `spyOn(service, 'myMethod').and.rejectWith(jasmine.objectContaining({ code: 'ERROR' }));`, + expected: `vi.spyOn(service, 'myMethod').mockRejectedValue(expect.objectContaining({ code: 'ERROR' }));`, + }, + { + description: 'should handle a complex spy object with a property map and subsequent spyOn', + input: ` const myService = jasmine.createSpyObj('MyService', ['methodA'], { propA: 'valueA' }); spyOn(myService, 'methodA').and.returnValue('mocked value'); myService.methodA('test'); expect(myService.methodA).toHaveBeenCalledWith('test'); `, - expected: ` + expected: ` const myService = { methodA: vi.fn().mockName("MyService.methodA"), propA: 'valueA', @@ -115,58 +114,58 @@ describe('Jasmine to Vitest Transformer', () => { myService.methodA('test'); expect(myService.methodA).toHaveBeenCalledWith('test'); `, - }, - ]; + }, + ]; - testCases.forEach(({ description, input, expected }) => { - it(description, async () => { - await expectTransformation(input, expected); - }); + testCases.forEach(({ description, input, expected }) => { + it(description, async () => { + await expectTransformation(input, expected); }); }); +}); - describe('Comment Preservation', () => { - const testCases = [ - { - description: 'should preserve a comment before a spy', - input: ` +describe('Comment Preservation', () => { + const testCases = [ + { + description: 'should preserve a comment before a spy', + input: ` // This is an important spy spyOn(service, 'myMethod').and.returnValue(true); `, - expected: ` + expected: ` // This is an important spy vi.spyOn(service, 'myMethod').mockReturnValue(true); `, - }, - { - description: 'should preserve a multi-line comment between chained calls', - input: ` + }, + { + description: 'should preserve a multi-line comment between chained calls', + input: ` spyOn(service, 'myMethod') /* * This spy needs to return a specific value. */ .and.returnValue(true); `, - expected: ` + expected: ` vi.spyOn(service, 'myMethod') /* * This spy needs to return a specific value. */ .mockReturnValue(true); `, - }, - { - description: 'should preserve a trailing comment on a matcher line', - input: ` + }, + { + description: 'should preserve a trailing comment on a matcher line', + input: ` expect(mySpy).toHaveBeenCalledWith('foo'); // Trailing comment `, - expected: ` + expected: ` expect(mySpy).toHaveBeenCalledWith('foo'); // Trailing comment `, - }, - { - description: 'should preserve comments inside a done callback function', - input: ` + }, + { + description: 'should preserve comments inside a done callback function', + input: ` it('should do something async', (done) => { // Start the async operation setTimeout(() => { @@ -175,7 +174,7 @@ describe('Jasmine to Vitest Transformer', () => { }, 100); }); `, - expected: ` + expected: ` it('should do something async', async () => { // Start the async operation setTimeout(() => { @@ -183,26 +182,25 @@ describe('Jasmine to Vitest Transformer', () => { }, 100); }); `, - }, - { - description: 'should preserve comments around a multi-statement transformation', - input: ` + }, + { + description: 'should preserve comments around a multi-statement transformation', + input: ` // Check if the spy was called correctly expect(mySpy).toHaveBeenCalledOnceWith('foo'); `, - expected: ` + expected: ` // Check if the spy was called correctly expect(mySpy).toHaveBeenCalledTimes(1); expect(mySpy).toHaveBeenCalledWith('foo'); `, - skipped: true, - }, - ]; + skipped: true, + }, + ]; - testCases.forEach(({ description, input, expected, skipped }) => { - (skipped ? xit : it)(description, async () => { - await expectTransformation(input, expected); - }); + testCases.forEach(({ description, input, expected, skipped }) => { + (skipped ? xit : it)(description, async () => { + await expectTransformation(input, expected); }); }); }); diff --git a/packages/schematics/angular/refactor/jasmine-vitest/transformers/jasmine-lifecycle_spec.ts b/packages/schematics/angular/refactor/jasmine-vitest/transformers/jasmine-lifecycle_spec.ts index f41f5fa7ae32..611bb2330cd3 100644 --- a/packages/schematics/angular/refactor/jasmine-vitest/transformers/jasmine-lifecycle_spec.ts +++ b/packages/schematics/angular/refactor/jasmine-vitest/transformers/jasmine-lifecycle_spec.ts @@ -8,12 +8,11 @@ import { expectTransformation } from '../test-helpers'; -describe('Jasmine to Vitest Transformer', () => { - describe('transformDoneCallback', () => { - const testCases = [ - { - description: 'should transform an `it` block with a done callback to an async function', - input: ` +describe('Jasmine to Vitest Transformer - transformDoneCallback', () => { + const testCases = [ + { + description: 'should transform an `it` block with a done callback to an async function', + input: ` it('should do something async', (done) => { setTimeout(() => { expect(true).toBe(true); @@ -21,93 +20,93 @@ describe('Jasmine to Vitest Transformer', () => { }, 100); }); `, - expected: ` + expected: ` it('should do something async', async () => { setTimeout(() => { expect(true).toBe(true); }, 100); }); `, - }, - { - description: 'should transform a promise chain with a done callback to await', - input: ` + }, + { + description: 'should transform a promise chain with a done callback to await', + input: ` beforeEach((done) => { service.init().then(() => done()); }); `, - expected: ` + expected: ` beforeEach(async () => { await service.init().then(() => {}); }); `, - }, - { - description: 'should transform done.fail() to throw new Error()', - input: ` + }, + { + description: 'should transform done.fail() to throw new Error()', + input: ` it('should fail', (done) => { done.fail('it failed'); }); `, - expected: ` + expected: ` it('should fail', async () => { throw new Error('it failed'); }); `, - }, - { - description: 'should transform an `afterEach` block with a done callback', - input: 'afterEach((done) => { promise.then(done); });', - expected: 'afterEach(async () => { await promise; });', - }, - { - description: 'should transform a test with a function(done) signature', - input: ` + }, + { + description: 'should transform an `afterEach` block with a done callback', + input: 'afterEach((done) => { promise.then(done); });', + expected: 'afterEach(async () => { await promise; });', + }, + { + description: 'should transform a test with a function(done) signature', + input: ` it('should work with a function expression', function(done) { done(); }); `, - expected: ` + expected: ` it('should work with a function expression', async function() {}); `, - }, - { - description: 'should transform done.fail() without a message', - input: `it('fails', (done) => { done.fail(); });`, - expected: `it('fails', async () => { throw new Error(); });`, - }, - { - description: 'should handle promise rejections via catch', - input: ` + }, + { + description: 'should transform done.fail() without a message', + input: `it('fails', (done) => { done.fail(); });`, + expected: `it('fails', async () => { throw new Error(); });`, + }, + { + description: 'should handle promise rejections via catch', + input: ` it('should handle promise rejections via catch', (done) => { myPromise.catch(done.fail); }); `, - expected: ` + expected: ` it('should handle promise rejections via catch', async () => { await myPromise; }); `, - }, - { - description: 'should work with a custom done name', - input: ` + }, + { + description: 'should work with a custom done name', + input: ` it('should work with a custom done name', (finish) => { setTimeout(() => { finish(); }, 100); }); `, - expected: ` + expected: ` it('should work with a custom done name', async () => { setTimeout(() => { }, 100); }); `, - }, - { - description: 'should handle done in a finally block', - input: ` + }, + { + description: 'should handle done in a finally block', + input: ` it('should handle done in a finally block', (done) => { try { // some logic @@ -116,31 +115,31 @@ describe('Jasmine to Vitest Transformer', () => { } }); `, - expected: ` + expected: ` it('should handle done in a finally block', async () => { try { // some logic } finally {} }); `, - }, - { - description: 'should not transform a function with a parameter that is not a done callback', - input: ` + }, + { + description: 'should not transform a function with a parameter that is not a done callback', + input: ` it('should not transform a function with a parameter that is not a done callback', (value) => { expect(value).toBe(true); }); `, - expected: ` + expected: ` // TODO: vitest-migration: The 'done' callback was used in an unhandled way. Please migrate manually. it('should not transform a function with a parameter that is not a done callback', (value) => { expect(value).toBe(true); }); `, - }, - { - description: 'should handle a .then() call with a multi-statement body', - input: ` + }, + { + description: 'should handle a .then() call with a multi-statement body', + input: ` it('should handle a complex then', (done) => { let myValue = false; myPromise.then(() => { @@ -149,7 +148,7 @@ describe('Jasmine to Vitest Transformer', () => { }); }); `, - expected: ` + expected: ` it('should handle a complex then', async () => { let myValue = false; await myPromise.then(() => { @@ -157,97 +156,96 @@ describe('Jasmine to Vitest Transformer', () => { }); }); `, - }, - { - description: 'should add a TODO for unhandled done usage', - input: ` + }, + { + description: 'should add a TODO for unhandled done usage', + input: ` it('should do something with helper', (done) => { someHelper(done); }); `, - expected: ` + expected: ` // TODO: vitest-migration: The 'done' callback was used in an unhandled way. Please migrate manually. it('should do something with helper', (done) => { someHelper(done); }); `, - }, - ]; + }, + ]; - testCases.forEach(({ description, input, expected }) => { - it(description, async () => { - await expectTransformation(input, expected); - }); + testCases.forEach(({ description, input, expected }) => { + it(description, async () => { + await expectTransformation(input, expected); }); }); +}); - describe('transformPending', () => { - const testCases = [ - { - description: 'should transform a test with pending() to it.skip()', - input: ` +describe('transformPending', () => { + const testCases = [ + { + description: 'should transform a test with pending() to it.skip()', + input: ` it('is a work in progress', () => { pending('Not yet implemented'); }); `, - expected: ` + expected: ` it.skip('is a work in progress', () => { // TODO: vitest-migration: The pending() function was converted to a skipped test (\`it.skip\`). See: https://vitest.dev/api/vi.html#it-skip // pending('Not yet implemented'); }); `, - }, - { - description: 'should transform a test with pending() using function keyword', - input: ` + }, + { + description: 'should transform a test with pending() using function keyword', + input: ` it('is a work in progress', function() { pending('Not yet implemented'); }); `, - expected: ` + expected: ` it.skip('is a work in progress', function() { // TODO: vitest-migration: The pending() function was converted to a skipped test (\`it.skip\`). See: https://vitest.dev/api/vi.html#it-skip // pending('Not yet implemented'); }); `, - }, - ]; + }, + ]; - testCases.forEach(({ description, input, expected }) => { - it(description, async () => { - await expectTransformation(input, expected); - }); + testCases.forEach(({ description, input, expected }) => { + it(description, async () => { + await expectTransformation(input, expected); }); }); +}); - describe('transformFocusedAndSkippedTests', () => { - const testCases = [ - { - description: 'should transform fdescribe to describe.only', - input: `fdescribe('My Suite', () => {});`, - expected: `describe.only('My Suite', () => {});`, - }, - { - description: 'should transform fit to it.only', - input: `fit('My Test', () => {});`, - expected: `it.only('My Test', () => {});`, - }, - { - description: 'should transform xdescribe to describe.skip', - input: `xdescribe('My Suite', () => {});`, - expected: `describe.skip('My Suite', () => {});`, - }, - { - description: 'should transform xit to it.skip', - input: `xit('My Test', () => {});`, - expected: `it.skip('My Test', () => {});`, - }, - ]; +describe('transformFocusedAndSkippedTests', () => { + const testCases = [ + { + description: 'should transform fdescribe to describe.only', + input: `fdescribe('My Suite', () => {});`, + expected: `describe.only('My Suite', () => {});`, + }, + { + description: 'should transform fit to it.only', + input: `fit('My Test', () => {});`, + expected: `it.only('My Test', () => {});`, + }, + { + description: 'should transform xdescribe to describe.skip', + input: `xdescribe('My Suite', () => {});`, + expected: `describe.skip('My Suite', () => {});`, + }, + { + description: 'should transform xit to it.skip', + input: `xit('My Test', () => {});`, + expected: `it.skip('My Test', () => {});`, + }, + ]; - testCases.forEach(({ description, input, expected }) => { - it(description, async () => { - await expectTransformation(input, expected); - }); + testCases.forEach(({ description, input, expected }) => { + it(description, async () => { + await expectTransformation(input, expected); }); }); }); diff --git a/packages/schematics/angular/refactor/jasmine-vitest/transformers/jasmine-matcher_spec.ts b/packages/schematics/angular/refactor/jasmine-vitest/transformers/jasmine-matcher_spec.ts index a46fc63d2a01..c5e9f8d25a65 100644 --- a/packages/schematics/angular/refactor/jasmine-vitest/transformers/jasmine-matcher_spec.ts +++ b/packages/schematics/angular/refactor/jasmine-vitest/transformers/jasmine-matcher_spec.ts @@ -8,355 +8,351 @@ import { expectTransformation } from '../test-helpers'; -describe('Jasmine to Vitest Transformer', () => { - describe('transformAsymmetricMatchers', () => { - const testCases = [ - { - description: 'should transform jasmine.any(String) to expect.any(String)', - input: `expect(foo).toEqual(jasmine.any(String));`, - expected: `expect(foo).toEqual(expect.any(String));`, - }, - { - description: - 'should transform jasmine.objectContaining(...) to expect.objectContaining(...)', - input: `expect(foo).toEqual(jasmine.objectContaining({ bar: 'baz' }));`, - expected: `expect(foo).toEqual(expect.objectContaining({ bar: 'baz' }));`, - }, - { - description: 'should transform jasmine.anything() to expect.anything()', - input: `expect(foo).toEqual(jasmine.anything());`, - expected: `expect(foo).toEqual(expect.anything());`, - }, - { - description: 'should transform jasmine.stringMatching(...) to expect.stringMatching(...)', - input: `expect(foo).toEqual(jasmine.stringMatching(/some-pattern/));`, - expected: `expect(foo).toEqual(expect.stringMatching(/some-pattern/));`, - }, - { - description: 'should transform jasmine.arrayContaining(...) to expect.arrayContaining(...)', - input: `expect(foo).toEqual(jasmine.arrayContaining(['a']));`, - expected: `expect(foo).toEqual(expect.arrayContaining(['a']));`, - }, - { - description: - 'should transform jasmine.stringContaining(...) to expect.stringContaining(...)', - input: `expect(foo).toEqual(jasmine.stringContaining('substring'));`, - expected: `expect(foo).toEqual(expect.stringContaining('substring'));`, - }, - ]; +describe('Jasmine to Vitest Transformer - transformAsymmetricMatchers', () => { + const testCases = [ + { + description: 'should transform jasmine.any(String) to expect.any(String)', + input: `expect(foo).toEqual(jasmine.any(String));`, + expected: `expect(foo).toEqual(expect.any(String));`, + }, + { + description: 'should transform jasmine.objectContaining(...) to expect.objectContaining(...)', + input: `expect(foo).toEqual(jasmine.objectContaining({ bar: 'baz' }));`, + expected: `expect(foo).toEqual(expect.objectContaining({ bar: 'baz' }));`, + }, + { + description: 'should transform jasmine.anything() to expect.anything()', + input: `expect(foo).toEqual(jasmine.anything());`, + expected: `expect(foo).toEqual(expect.anything());`, + }, + { + description: 'should transform jasmine.stringMatching(...) to expect.stringMatching(...)', + input: `expect(foo).toEqual(jasmine.stringMatching(/some-pattern/));`, + expected: `expect(foo).toEqual(expect.stringMatching(/some-pattern/));`, + }, + { + description: 'should transform jasmine.arrayContaining(...) to expect.arrayContaining(...)', + input: `expect(foo).toEqual(jasmine.arrayContaining(['a']));`, + expected: `expect(foo).toEqual(expect.arrayContaining(['a']));`, + }, + { + description: 'should transform jasmine.stringContaining(...) to expect.stringContaining(...)', + input: `expect(foo).toEqual(jasmine.stringContaining('substring'));`, + expected: `expect(foo).toEqual(expect.stringContaining('substring'));`, + }, + ]; - testCases.forEach(({ description, input, expected }) => { - it(description, async () => { - await expectTransformation(input, expected); - }); + testCases.forEach(({ description, input, expected }) => { + it(description, async () => { + await expectTransformation(input, expected); }); }); +}); - describe('transformExpectAsync', () => { - const testCases = [ - { - description: 'should transform expectAsync(...).toBeResolved()', - input: `await expectAsync(myPromise).toBeResolved();`, - expected: `await expect(myPromise).resolves.not.toThrow();`, - }, - { - description: 'should transform expectAsync(...).toBeResolvedTo(value)', - input: `await expectAsync(myPromise).toBeResolvedTo(42);`, - expected: `await expect(myPromise).resolves.toEqual(42);`, - }, - { - description: 'should transform expectAsync(...).toBeRejected()', - input: `await expectAsync(myPromise).toBeRejected();`, - expected: `await expect(myPromise).rejects.toThrow();`, - }, - { - description: 'should transform expectAsync(...).toBeRejectedWith(error)', - input: `await expectAsync(myPromise).toBeRejectedWith('Error');`, - expected: `await expect(myPromise).rejects.toEqual('Error');`, - }, - { - description: 'should transform expectAsync(...).toBeRejectedWithError(ErrorClass, message)', - input: `await expectAsync(myPromise).toBeRejectedWithError(TypeError, 'Failed');`, - expected: `await expect(myPromise).rejects.toThrowError(TypeError, 'Failed');`, - }, - { - description: 'should add a TODO for an unknown expectAsync matcher', - input: `await expectAsync(myPromise).toBeSomethingElse();`, - expected: ` +describe('transformExpectAsync', () => { + const testCases = [ + { + description: 'should transform expectAsync(...).toBeResolved()', + input: `await expectAsync(myPromise).toBeResolved();`, + expected: `await expect(myPromise).resolves.not.toThrow();`, + }, + { + description: 'should transform expectAsync(...).toBeResolvedTo(value)', + input: `await expectAsync(myPromise).toBeResolvedTo(42);`, + expected: `await expect(myPromise).resolves.toEqual(42);`, + }, + { + description: 'should transform expectAsync(...).toBeRejected()', + input: `await expectAsync(myPromise).toBeRejected();`, + expected: `await expect(myPromise).rejects.toThrow();`, + }, + { + description: 'should transform expectAsync(...).toBeRejectedWith(error)', + input: `await expectAsync(myPromise).toBeRejectedWith('Error');`, + expected: `await expect(myPromise).rejects.toEqual('Error');`, + }, + { + description: 'should transform expectAsync(...).toBeRejectedWithError(ErrorClass, message)', + input: `await expectAsync(myPromise).toBeRejectedWithError(TypeError, 'Failed');`, + expected: `await expect(myPromise).rejects.toThrowError(TypeError, 'Failed');`, + }, + { + description: 'should add a TODO for an unknown expectAsync matcher', + input: `await expectAsync(myPromise).toBeSomethingElse();`, + expected: ` // TODO: vitest-migration: Unsupported expectAsync matcher ".toBeSomethingElse()" found. Please migrate this manually. await expectAsync(myPromise).toBeSomethingElse(); `, - }, - { - description: 'should add a specific TODO for toBePending', - input: `await expectAsync(myPromise).toBePending();`, - /* eslint-disable max-len */ - expected: ` + }, + { + description: 'should add a specific TODO for toBePending', + input: `await expectAsync(myPromise).toBePending();`, + /* eslint-disable max-len */ + expected: ` // TODO: vitest-migration: Unsupported matcher ".toBePending()" found. Vitest does not have a direct equivalent. Please migrate this manually, for example by using \`Promise.race\` to check if the promise settles within a short timeout. await expectAsync(myPromise).toBePending(); `, - /* eslint-enable max-len */ - }, - ]; + /* eslint-enable max-len */ + }, + ]; - testCases.forEach(({ description, input, expected }) => { - it(description, async () => { - await expectTransformation(input, expected); - }); + testCases.forEach(({ description, input, expected }) => { + it(description, async () => { + await expectTransformation(input, expected); }); }); +}); - describe('transformCalledOnceWith', () => { - const testCases = [ - { - description: 'should transform toHaveBeenCalledOnceWith(...) into two separate calls', - input: `expect(mySpy).toHaveBeenCalledOnceWith('foo', 'bar');`, - expected: ` +describe('transformCalledOnceWith', () => { + const testCases = [ + { + description: 'should transform toHaveBeenCalledOnceWith(...) into two separate calls', + input: `expect(mySpy).toHaveBeenCalledOnceWith('foo', 'bar');`, + expected: ` expect(mySpy).toHaveBeenCalledTimes(1); expect(mySpy).toHaveBeenCalledWith('foo', 'bar'); `, - }, - ]; + }, + ]; - testCases.forEach(({ description, input, expected }) => { - it(description, async () => { - await expectTransformation(input, expected); - }); + testCases.forEach(({ description, input, expected }) => { + it(description, async () => { + await expectTransformation(input, expected); }); }); +}); - describe('transformSyntacticSugarMatchers', () => { - const testCases = [ - { - description: 'should transform toBeTrue() to toBe(true)', - input: `expect(value).toBeTrue();`, - expected: `expect(value).toBe(true);`, - }, - { - description: 'should transform toBeFalse() to toBe(false)', - input: `expect(value).toBeFalse();`, - expected: `expect(value).toBe(false);`, - }, - { - description: 'should transform toBePositiveInfinity() to toBe(Infinity)', - input: `expect(value).toBePositiveInfinity();`, - expected: `expect(value).toBe(Infinity);`, - }, - { - description: 'should transform toBeNegativeInfinity() to toBe(-Infinity)', - input: `expect(value).toBeNegativeInfinity();`, - expected: `expect(value).toBe(-Infinity);`, - }, - { - description: 'should transform toHaveSize(number) to toHaveLength(number)', - input: `expect(myArray).toHaveSize(3);`, - expected: `expect(myArray).toHaveLength(3);`, - }, - { - description: 'should add a TODO for toThrowMatching', - input: `expect(() => {}).toThrowMatching((e) => e.message === 'foo');`, - expected: `// TODO: vitest-migration: Unsupported matcher ".toThrowMatching()" found. Please migrate this manually. See: https://vitest.dev/api/expect.html#tothrowerror +describe('transformSyntacticSugarMatchers', () => { + const testCases = [ + { + description: 'should transform toBeTrue() to toBe(true)', + input: `expect(value).toBeTrue();`, + expected: `expect(value).toBe(true);`, + }, + { + description: 'should transform toBeFalse() to toBe(false)', + input: `expect(value).toBeFalse();`, + expected: `expect(value).toBe(false);`, + }, + { + description: 'should transform toBePositiveInfinity() to toBe(Infinity)', + input: `expect(value).toBePositiveInfinity();`, + expected: `expect(value).toBe(Infinity);`, + }, + { + description: 'should transform toBeNegativeInfinity() to toBe(-Infinity)', + input: `expect(value).toBeNegativeInfinity();`, + expected: `expect(value).toBe(-Infinity);`, + }, + { + description: 'should transform toHaveSize(number) to toHaveLength(number)', + input: `expect(myArray).toHaveSize(3);`, + expected: `expect(myArray).toHaveLength(3);`, + }, + { + description: 'should add a TODO for toThrowMatching', + input: `expect(() => {}).toThrowMatching((e) => e.message === 'foo');`, + expected: `// TODO: vitest-migration: Unsupported matcher ".toThrowMatching()" found. Please migrate this manually. See: https://vitest.dev/api/expect.html#tothrowerror expect(() => {}).toThrowMatching((e) => e.message === 'foo');`, - }, - { - description: 'should add a TODO for toHaveSpyInteractions', - input: `expect(mySpyObj).toHaveSpyInteractions();`, - // eslint-disable-next-line max-len - expected: `// TODO: vitest-migration: Unsupported matcher ".toHaveSpyInteractions()" found. Please migrate this manually by checking the \`mock.calls.length\` of the individual spies. + }, + { + description: 'should add a TODO for toHaveSpyInteractions', + input: `expect(mySpyObj).toHaveSpyInteractions();`, + // eslint-disable-next-line max-len + expected: `// TODO: vitest-migration: Unsupported matcher ".toHaveSpyInteractions()" found. Please migrate this manually by checking the \`mock.calls.length\` of the individual spies. expect(mySpyObj).toHaveSpyInteractions();`, - }, - ]; + }, + ]; - testCases.forEach(({ description, input, expected }) => { - it(description, async () => { - await expectTransformation(input, expected); - }); + testCases.forEach(({ description, input, expected }) => { + it(description, async () => { + await expectTransformation(input, expected); }); }); +}); - describe('transformComplexMatchers', () => { - const testCases = [ - { - description: 'should transform toEqual(jasmine.truthy()) to toBeTruthy()', - input: `expect(value).toEqual(jasmine.truthy());`, - expected: `expect(value).toBeTruthy();`, - }, - { - description: 'should transform toEqual(jasmine.falsy()) to toBeFalsy()', - input: `expect(value).toEqual(jasmine.falsy());`, - expected: `expect(value).toBeFalsy();`, - }, - { - description: 'should transform toEqual(jasmine.empty()) to toHaveLength(0)', - input: `expect([]).toEqual(jasmine.empty());`, - expected: `expect([]).toHaveLength(0);`, - }, - { - description: 'should transform not.toEqual(jasmine.empty()) to not.toHaveLength(0)', - input: `expect([1]).not.toEqual(jasmine.empty());`, - expected: `expect([1]).not.toHaveLength(0);`, - }, - { - description: 'should transform toEqual(jasmine.notEmpty()) to not.toHaveLength(0)', - input: `expect([1]).toEqual(jasmine.notEmpty());`, - expected: `expect([1]).not.toHaveLength(0);`, - }, - { - description: 'should transform not.toEqual(jasmine.notEmpty()) to toHaveLength(0)', - input: `expect([]).not.toEqual(jasmine.notEmpty());`, - expected: `expect([]).toHaveLength(0);`, - }, - { - description: 'should transform toEqual(jasmine.is()) to toBe()', - input: `expect(value).toEqual(jasmine.is(otherValue));`, - expected: `expect(value).toBe(otherValue);`, - }, - ]; +describe('transformComplexMatchers', () => { + const testCases = [ + { + description: 'should transform toEqual(jasmine.truthy()) to toBeTruthy()', + input: `expect(value).toEqual(jasmine.truthy());`, + expected: `expect(value).toBeTruthy();`, + }, + { + description: 'should transform toEqual(jasmine.falsy()) to toBeFalsy()', + input: `expect(value).toEqual(jasmine.falsy());`, + expected: `expect(value).toBeFalsy();`, + }, + { + description: 'should transform toEqual(jasmine.empty()) to toHaveLength(0)', + input: `expect([]).toEqual(jasmine.empty());`, + expected: `expect([]).toHaveLength(0);`, + }, + { + description: 'should transform not.toEqual(jasmine.empty()) to not.toHaveLength(0)', + input: `expect([1]).not.toEqual(jasmine.empty());`, + expected: `expect([1]).not.toHaveLength(0);`, + }, + { + description: 'should transform toEqual(jasmine.notEmpty()) to not.toHaveLength(0)', + input: `expect([1]).toEqual(jasmine.notEmpty());`, + expected: `expect([1]).not.toHaveLength(0);`, + }, + { + description: 'should transform not.toEqual(jasmine.notEmpty()) to toHaveLength(0)', + input: `expect([]).not.toEqual(jasmine.notEmpty());`, + expected: `expect([]).toHaveLength(0);`, + }, + { + description: 'should transform toEqual(jasmine.is()) to toBe()', + input: `expect(value).toEqual(jasmine.is(otherValue));`, + expected: `expect(value).toBe(otherValue);`, + }, + ]; - testCases.forEach(({ description, input, expected }) => { - it(description, async () => { - await expectTransformation(input, expected); - }); + testCases.forEach(({ description, input, expected }) => { + it(description, async () => { + await expectTransformation(input, expected); }); }); +}); - describe('transformArrayWithExactContents', () => { - const testCases = [ - { - description: 'should transform toEqual(jasmine.arrayWithExactContents()) into two calls', - input: `expect(myArray).toEqual(jasmine.arrayWithExactContents(['a', 'b']));`, - /* eslint-disable max-len */ - expected: ` +describe('transformArrayWithExactContents', () => { + const testCases = [ + { + description: 'should transform toEqual(jasmine.arrayWithExactContents()) into two calls', + input: `expect(myArray).toEqual(jasmine.arrayWithExactContents(['a', 'b']));`, + /* eslint-disable max-len */ + expected: ` // TODO: vitest-migration: Verify this matches strict array content (multiset equality). Vitest's arrayContaining is a subset check. expect(myArray).toHaveLength(2); expect(myArray).toEqual(expect.arrayContaining(['a', 'b'])); `, - /* eslint-enable max-len */ - }, - { - description: - 'should transform toEqual(jasmine.arrayWithExactContents()) with asymmetric matchers', - input: `expect(myArray).toEqual(jasmine.arrayWithExactContents([jasmine.any(Number), 'a']));`, - /* eslint-disable max-len */ - expected: ` + /* eslint-enable max-len */ + }, + { + description: + 'should transform toEqual(jasmine.arrayWithExactContents()) with asymmetric matchers', + input: `expect(myArray).toEqual(jasmine.arrayWithExactContents([jasmine.any(Number), 'a']));`, + /* eslint-disable max-len */ + expected: ` // TODO: vitest-migration: Verify this matches strict array content (multiset equality). Vitest's arrayContaining is a subset check. expect(myArray).toHaveLength(2); expect(myArray).toEqual(expect.arrayContaining([expect.any(Number), 'a'])); `, - /* eslint-enable max-len */ - }, - { - description: - 'should add a TODO for toEqual(jasmine.arrayWithExactContents()) with a variable', - input: `expect(myArray).toEqual(jasmine.arrayWithExactContents(someOtherArray));`, - expected: ` + /* eslint-enable max-len */ + }, + { + description: + 'should add a TODO for toEqual(jasmine.arrayWithExactContents()) with a variable', + input: `expect(myArray).toEqual(jasmine.arrayWithExactContents(someOtherArray));`, + expected: ` // TODO: vitest-migration: Cannot transform jasmine.arrayWithExactContents with a dynamic variable. Please migrate this manually. expect(myArray).toEqual(jasmine.arrayWithExactContents(someOtherArray)); `, - }, - ]; + }, + ]; - testCases.forEach(({ description, input, expected }) => { - it(description, async () => { - await expectTransformation(input, expected); - }); + testCases.forEach(({ description, input, expected }) => { + it(description, async () => { + await expectTransformation(input, expected); }); }); +}); - describe('transformExpectNothing', () => { - const testCases = [ - { - description: 'should remove expect().nothing() and add a comment', - input: ` +describe('transformExpectNothing', () => { + const testCases = [ + { + description: 'should remove expect().nothing() and add a comment', + input: ` it('should be a passing test', () => { expect().nothing(); }); `, - /* eslint-disable max-len */ - expected: ` + /* eslint-disable max-len */ + expected: ` it('should be a passing test', () => { // TODO: vitest-migration: expect().nothing() has been removed because it is redundant in Vitest. Tests without assertions pass by default. // expect().nothing(); }); `, - /* eslint-enable max-len */ - }, - ]; + /* eslint-enable max-len */ + }, + ]; - testCases.forEach(({ description, input, expected }) => { - it(description, async () => { - await expectTransformation(input, expected); - }); + testCases.forEach(({ description, input, expected }) => { + it(description, async () => { + await expectTransformation(input, expected); }); }); +}); - describe('transformWithContext', () => { - const testCases = [ - { - description: 'should transform .withContext() to an expect message', - input: `expect(value).withContext('It should be true').toBe(true);`, - expected: `expect(value, 'It should be true').toBe(true);`, - }, - { - description: 'should handle chained matchers', - input: `expect(value).withContext('It should not be false').not.toBe(false);`, - expected: `expect(value, 'It should not be false').not.toBe(false);`, - }, - { - description: 'should handle .withContext() with no arguments by removing it', - input: `expect(value).withContext().toBe(true);`, - expected: `expect(value).toBe(true);`, - }, - ]; +describe('transformWithContext', () => { + const testCases = [ + { + description: 'should transform .withContext() to an expect message', + input: `expect(value).withContext('It should be true').toBe(true);`, + expected: `expect(value, 'It should be true').toBe(true);`, + }, + { + description: 'should handle chained matchers', + input: `expect(value).withContext('It should not be false').not.toBe(false);`, + expected: `expect(value, 'It should not be false').not.toBe(false);`, + }, + { + description: 'should handle .withContext() with no arguments by removing it', + input: `expect(value).withContext().toBe(true);`, + expected: `expect(value).toBe(true);`, + }, + ]; - testCases.forEach(({ description, input, expected }) => { - it(description, async () => { - await expectTransformation(input, expected); - }); + testCases.forEach(({ description, input, expected }) => { + it(description, async () => { + await expectTransformation(input, expected); }); }); +}); - describe('transformtoHaveBeenCalledBefore', () => { - const testCases = [ - { - description: 'should transform toHaveBeenCalledBefore', - input: `expect(spyA).toHaveBeenCalledBefore(spyB);`, - // eslint-disable-next-line max-len - expected: `expect(Math.min(...vi.mocked(spyA).mock.invocationCallOrder)).toBeLessThan(Math.min(...vi.mocked(spyB).mock.invocationCallOrder));`, - }, - { - description: 'should transform not.toHaveBeenCalledBefore', - input: `expect(spyA).not.toHaveBeenCalledBefore(spyB);`, - // eslint-disable-next-line max-len - expected: `expect(Math.min(...vi.mocked(spyA).mock.invocationCallOrder)).toBeGreaterThanOrEqual(Math.min(...vi.mocked(spyB).mock.invocationCallOrder));`, - }, - ]; +describe('transformtoHaveBeenCalledBefore', () => { + const testCases = [ + { + description: 'should transform toHaveBeenCalledBefore', + input: `expect(spyA).toHaveBeenCalledBefore(spyB);`, + // eslint-disable-next-line max-len + expected: `expect(Math.min(...vi.mocked(spyA).mock.invocationCallOrder)).toBeLessThan(Math.min(...vi.mocked(spyB).mock.invocationCallOrder));`, + }, + { + description: 'should transform not.toHaveBeenCalledBefore', + input: `expect(spyA).not.toHaveBeenCalledBefore(spyB);`, + // eslint-disable-next-line max-len + expected: `expect(Math.min(...vi.mocked(spyA).mock.invocationCallOrder)).toBeGreaterThanOrEqual(Math.min(...vi.mocked(spyB).mock.invocationCallOrder));`, + }, + ]; - testCases.forEach(({ description, input, expected }) => { - it(description, async () => { - await expectTransformation(input, expected); - }); + testCases.forEach(({ description, input, expected }) => { + it(description, async () => { + await expectTransformation(input, expected); }); }); +}); - describe('transformToHaveClass', () => { - const testCases = [ - { - description: 'should transform toHaveClass', - input: `expect(element).toHaveClass('my-class');`, - expected: `expect(element.classList.contains('my-class')).toBe(true);`, - }, - { - description: 'should transform not.toHaveClass', - input: `expect(element).not.toHaveClass('my-class');`, - expected: `expect(element.classList.contains('my-class')).toBe(false);`, - }, - ]; +describe('transformToHaveClass', () => { + const testCases = [ + { + description: 'should transform toHaveClass', + input: `expect(element).toHaveClass('my-class');`, + expected: `expect(element.classList.contains('my-class')).toBe(true);`, + }, + { + description: 'should transform not.toHaveClass', + input: `expect(element).not.toHaveClass('my-class');`, + expected: `expect(element.classList.contains('my-class')).toBe(false);`, + }, + ]; - testCases.forEach(({ description, input, expected }) => { - it(description, async () => { - await expectTransformation(input, expected); - }); + testCases.forEach(({ description, input, expected }) => { + it(description, async () => { + await expectTransformation(input, expected); }); }); }); diff --git a/packages/schematics/angular/refactor/jasmine-vitest/transformers/jasmine-misc_spec.ts b/packages/schematics/angular/refactor/jasmine-vitest/transformers/jasmine-misc_spec.ts index 0ce25ccacfd5..c4e76f51c9fb 100644 --- a/packages/schematics/angular/refactor/jasmine-vitest/transformers/jasmine-misc_spec.ts +++ b/packages/schematics/angular/refactor/jasmine-vitest/transformers/jasmine-misc_spec.ts @@ -8,85 +8,84 @@ import { expectTransformation } from '../test-helpers'; -describe('Jasmine to Vitest Transformer', () => { - describe('transformTimerMocks', () => { - const testCases = [ - { - description: 'should transform jasmine.clock().install() to vi.useFakeTimers()', - input: `jasmine.clock().install();`, - expected: `vi.useFakeTimers();`, - }, - { - description: 'should transform jasmine.clock().tick(100) to vi.advanceTimersByTime(100)', - input: `jasmine.clock().tick(100);`, - expected: `vi.advanceTimersByTime(100);`, - }, - { - description: 'should transform jasmine.clock().uninstall() to vi.useRealTimers()', - input: `jasmine.clock().uninstall();`, - expected: `vi.useRealTimers();`, - }, - { - description: 'should transform jasmine.clock().mockDate(date) to vi.setSystemTime(date)', - input: `jasmine.clock().mockDate(new Date('2025-01-01'));`, - expected: `vi.setSystemTime(new Date('2025-01-01'));`, - }, - { - description: 'should transform jasmine.clock().mockDate() to vi.setSystemTime(new Date())', - input: `jasmine.clock().mockDate();`, - expected: `vi.setSystemTime(new Date());`, - }, - ]; - - testCases.forEach(({ description, input, expected }) => { - it(description, async () => { - await expectTransformation(input, expected); - }); +describe('Jasmine to Vitest Transformer - transformTimerMocks', () => { + const testCases = [ + { + description: 'should transform jasmine.clock().install() to vi.useFakeTimers()', + input: `jasmine.clock().install();`, + expected: `vi.useFakeTimers();`, + }, + { + description: 'should transform jasmine.clock().tick(100) to vi.advanceTimersByTime(100)', + input: `jasmine.clock().tick(100);`, + expected: `vi.advanceTimersByTime(100);`, + }, + { + description: 'should transform jasmine.clock().uninstall() to vi.useRealTimers()', + input: `jasmine.clock().uninstall();`, + expected: `vi.useRealTimers();`, + }, + { + description: 'should transform jasmine.clock().mockDate(date) to vi.setSystemTime(date)', + input: `jasmine.clock().mockDate(new Date('2025-01-01'));`, + expected: `vi.setSystemTime(new Date('2025-01-01'));`, + }, + { + description: 'should transform jasmine.clock().mockDate() to vi.setSystemTime(new Date())', + input: `jasmine.clock().mockDate();`, + expected: `vi.setSystemTime(new Date());`, + }, + ]; + + testCases.forEach(({ description, input, expected }) => { + it(description, async () => { + await expectTransformation(input, expected); }); }); +}); - describe('transformFail', () => { - const testCases = [ - { - description: 'should transform fail() to throw new Error()', - input: `fail('This should not happen');`, - expected: `throw new Error('This should not happen');`, - }, - { - description: 'should transform fail() without a message to throw new Error()', - input: `fail();`, - expected: `throw new Error();`, - }, - ]; - - testCases.forEach(({ description, input, expected }) => { - it(description, async () => { - await expectTransformation(input, expected); - }); +describe('transformFail', () => { + const testCases = [ + { + description: 'should transform fail() to throw new Error()', + input: `fail('This should not happen');`, + expected: `throw new Error('This should not happen');`, + }, + { + description: 'should transform fail() without a message to throw new Error()', + input: `fail();`, + expected: `throw new Error();`, + }, + ]; + + testCases.forEach(({ description, input, expected }) => { + it(description, async () => { + await expectTransformation(input, expected); }); }); +}); - describe('transformDefaultTimeoutInterval', () => { - const testCases = [ - { - description: 'should transform jasmine.DEFAULT_TIMEOUT_INTERVAL', - input: `jasmine.DEFAULT_TIMEOUT_INTERVAL = 10000;`, - expected: `vi.setConfig({ testTimeout: 10000 });`, - }, - ]; - - testCases.forEach(({ description, input, expected }) => { - it(description, async () => { - await expectTransformation(input, expected); - }); +describe('transformDefaultTimeoutInterval', () => { + const testCases = [ + { + description: 'should transform jasmine.DEFAULT_TIMEOUT_INTERVAL', + input: `jasmine.DEFAULT_TIMEOUT_INTERVAL = 10000;`, + expected: `vi.setConfig({ testTimeout: 10000 });`, + }, + ]; + + testCases.forEach(({ description, input, expected }) => { + it(description, async () => { + await expectTransformation(input, expected); }); }); +}); - describe('transformAddMatchers', () => { - const testCases = [ - { - description: 'should add a TODO for jasmine.addMatchers', - input: ` +describe('transformAddMatchers', () => { + const testCases = [ + { + description: 'should add a TODO for jasmine.addMatchers', + input: ` jasmine.addMatchers({ toBeDivisibleByTwo: function() { return { @@ -99,7 +98,7 @@ describe('Jasmine to Vitest Transformer', () => { } }); `, - expected: ` + expected: ` // TODO: vitest-migration: jasmine.addMatchers is not supported. Please manually migrate to expect.extend(). See: https://vitest.dev/api/expect.html#expect-extend jasmine.addMatchers({ toBeDivisibleByTwo: function () { @@ -113,109 +112,108 @@ describe('Jasmine to Vitest Transformer', () => { }, }); `, - }, - ]; + }, + ]; - testCases.forEach(({ description, input, expected }) => { - it(description, async () => { - await expectTransformation(input, expected); - }); + testCases.forEach(({ description, input, expected }) => { + it(description, async () => { + await expectTransformation(input, expected); }); }); +}); - describe('transformAddCustomEqualityTester', () => { - const testCases = [ - { - description: 'should add a TODO for jasmine.addCustomEqualityTester', - input: ` +describe('transformAddCustomEqualityTester', () => { + const testCases = [ + { + description: 'should add a TODO for jasmine.addCustomEqualityTester', + input: ` jasmine.addCustomEqualityTester((a, b) => { return a.toString() === b.toString(); }); `, - expected: `// TODO: vitest-migration: jasmine.addCustomEqualityTester is not supported. Please manually migrate to expect.addEqualityTesters(). See: https://vitest.dev/api/expect.html#expect-addequalitytesters + expected: `// TODO: vitest-migration: jasmine.addCustomEqualityTester is not supported. Please manually migrate to expect.addEqualityTesters(). See: https://vitest.dev/api/expect.html#expect-addequalitytesters jasmine.addCustomEqualityTester((a, b) => { return a.toString() === b.toString(); }); `, - }, - ]; + }, + ]; - testCases.forEach(({ description, input, expected }) => { - it(description, async () => { - await expectTransformation(input, expected); - }); + testCases.forEach(({ description, input, expected }) => { + it(description, async () => { + await expectTransformation(input, expected); }); }); +}); - describe('transformUnknownJasmineProperties', () => { - const testCases = [ - { - description: 'should add a TODO for an unknown jasmine property', - input: `const env = jasmine.getEnv();`, - expected: `// TODO: vitest-migration: Unsupported jasmine property "getEnv" found. Please migrate this manually. +describe('transformUnknownJasmineProperties', () => { + const testCases = [ + { + description: 'should add a TODO for an unknown jasmine property', + input: `const env = jasmine.getEnv();`, + expected: `// TODO: vitest-migration: Unsupported jasmine property "getEnv" found. Please migrate this manually. const env = jasmine.getEnv();`, - }, - { - description: 'should not add a TODO for a known jasmine property', - input: `const spy = jasmine.createSpy();`, - expected: `const spy = vi.fn();`, - }, - ]; - - testCases.forEach(({ description, input, expected }) => { - it(description, async () => { - await expectTransformation(input, expected); - }); + }, + { + description: 'should not add a TODO for a known jasmine property', + input: `const spy = jasmine.createSpy();`, + expected: `const spy = vi.fn();`, + }, + ]; + + testCases.forEach(({ description, input, expected }) => { + it(description, async () => { + await expectTransformation(input, expected); }); }); +}); - describe('transformGlobalFunctions', () => { - const testCases = [ - { - description: 'should add a TODO for setSpecProperty', - input: `setSpecProperty('myKey', 'myValue');`, - // eslint-disable-next-line max-len - expected: `// TODO: vitest-migration: Unsupported global function \`setSpecProperty\` found. This function is used for custom reporters in Jasmine and has no direct equivalent in Vitest. +describe('transformGlobalFunctions', () => { + const testCases = [ + { + description: 'should add a TODO for setSpecProperty', + input: `setSpecProperty('myKey', 'myValue');`, + // eslint-disable-next-line max-len + expected: `// TODO: vitest-migration: Unsupported global function \`setSpecProperty\` found. This function is used for custom reporters in Jasmine and has no direct equivalent in Vitest. setSpecProperty('myKey', 'myValue');`, - }, - { - description: 'should add a TODO for setSuiteProperty', - input: `setSuiteProperty('myKey', 'myValue');`, - // eslint-disable-next-line max-len - expected: `// TODO: vitest-migration: Unsupported global function \`setSuiteProperty\` found. This function is used for custom reporters in Jasmine and has no direct equivalent in Vitest. + }, + { + description: 'should add a TODO for setSuiteProperty', + input: `setSuiteProperty('myKey', 'myValue');`, + // eslint-disable-next-line max-len + expected: `// TODO: vitest-migration: Unsupported global function \`setSuiteProperty\` found. This function is used for custom reporters in Jasmine and has no direct equivalent in Vitest. setSuiteProperty('myKey', 'myValue');`, - }, - ]; + }, + ]; - testCases.forEach(({ description, input, expected }) => { - it(description, async () => { - await expectTransformation(input, expected); - }); + testCases.forEach(({ description, input, expected }) => { + it(description, async () => { + await expectTransformation(input, expected); }); }); +}); - describe('transformUnsupportedJasmineCalls', () => { - const testCases = [ - { - description: 'should add a TODO for jasmine.mapContaining', - input: `expect(myMap).toEqual(jasmine.mapContaining(new Map()));`, - // eslint-disable-next-line max-len - expected: `// TODO: vitest-migration: jasmine.mapContaining is not supported. Vitest does not have a built-in matcher for Maps. Please manually assert the contents of the Map. +describe('transformUnsupportedJasmineCalls', () => { + const testCases = [ + { + description: 'should add a TODO for jasmine.mapContaining', + input: `expect(myMap).toEqual(jasmine.mapContaining(new Map()));`, + // eslint-disable-next-line max-len + expected: `// TODO: vitest-migration: jasmine.mapContaining is not supported. Vitest does not have a built-in matcher for Maps. Please manually assert the contents of the Map. expect(myMap).toEqual(jasmine.mapContaining(new Map()));`, - }, - { - description: 'should add a TODO for jasmine.setContaining', - input: `expect(mySet).toEqual(jasmine.setContaining(new Set()));`, - // eslint-disable-next-line max-len - expected: `// TODO: vitest-migration: jasmine.setContaining is not supported. Vitest does not have a built-in matcher for Sets. Please manually assert the contents of the Set. + }, + { + description: 'should add a TODO for jasmine.setContaining', + input: `expect(mySet).toEqual(jasmine.setContaining(new Set()));`, + // eslint-disable-next-line max-len + expected: `// TODO: vitest-migration: jasmine.setContaining is not supported. Vitest does not have a built-in matcher for Sets. Please manually assert the contents of the Set. expect(mySet).toEqual(jasmine.setContaining(new Set()));`, - }, - ]; + }, + ]; - testCases.forEach(({ description, input, expected }) => { - it(description, async () => { - await expectTransformation(input, expected); - }); + testCases.forEach(({ description, input, expected }) => { + it(description, async () => { + await expectTransformation(input, expected); }); }); }); diff --git a/packages/schematics/angular/refactor/jasmine-vitest/transformers/jasmine-spy_spec.ts b/packages/schematics/angular/refactor/jasmine-vitest/transformers/jasmine-spy_spec.ts index 6c11f776bd3b..44113c3938c2 100644 --- a/packages/schematics/angular/refactor/jasmine-vitest/transformers/jasmine-spy_spec.ts +++ b/packages/schematics/angular/refactor/jasmine-vitest/transformers/jasmine-spy_spec.ts @@ -8,274 +8,272 @@ import { expectTransformation } from '../test-helpers'; -describe('Jasmine to Vitest Transformer', () => { - describe('transformSpies', () => { - const testCases = [ - { - description: 'should transform spyOn(object, "method") to vi.spyOn(object, "method")', - input: `spyOn(service, 'myMethod');`, - expected: `vi.spyOn(service, 'myMethod');`, - }, - { - description: 'should transform .and.returnValue(...) to .mockReturnValue(...)', - input: `spyOn(service, 'myMethod').and.returnValue(42);`, - expected: `vi.spyOn(service, 'myMethod').mockReturnValue(42);`, - }, - { - description: 'should transform .and.returnValues() to chained .mockReturnValueOnce() calls', - input: `spyOn(service, 'myMethod').and.returnValues('a', 'b', 'c');`, - expected: `vi.spyOn(service, 'myMethod').mockReturnValueOnce('a').mockReturnValueOnce('b').mockReturnValueOnce('c');`, - }, - { - description: 'should transform .and.callFake(...) to .mockImplementation(...)', - input: `spyOn(service, 'myMethod').and.callFake(() => 'fake');`, - expected: `vi.spyOn(service, 'myMethod').mockImplementation(() => 'fake');`, - }, - { - description: 'should remove .and.callThrough()', - input: `spyOn(service, 'myMethod').and.callThrough();`, - expected: `vi.spyOn(service, 'myMethod');`, - }, - { - description: 'should transform jasmine.createSpy("name") to vi.fn()', - input: `const mySpy = jasmine.createSpy('mySpy');`, - expected: `const mySpy = vi.fn();`, - }, - { - description: 'should transform jasmine.createSpy("name", fn) to vi.fn(fn)', - input: `const mySpy = jasmine.createSpy('mySpy', () => 'foo');`, - expected: `const mySpy = vi.fn(() => 'foo');`, - }, - { - description: 'should transform spyOnProperty(object, "prop") to vi.spyOn(object, "prop")', - input: `spyOnProperty(service, 'myProp');`, - expected: `vi.spyOn(service, 'myProp');`, - }, - { - description: 'should transform .and.stub() to .mockImplementation(() => {})', - input: `spyOn(service, 'myMethod').and.stub();`, - expected: `vi.spyOn(service, 'myMethod').mockImplementation(() => {});`, - }, - { - description: 'should add a TODO for jasmine.spyOnAllFunctions(object)', - input: `jasmine.spyOnAllFunctions(myObject);`, - expected: `// TODO: vitest-migration: Vitest does not have a direct equivalent for jasmine.spyOnAllFunctions(). Please spy on individual methods manually using vi.spyOn(). See: https://vitest.dev/api/vi.html#vi-spyon +describe('Jasmine to Vitest Transformer - transformSpies', () => { + const testCases = [ + { + description: 'should transform spyOn(object, "method") to vi.spyOn(object, "method")', + input: `spyOn(service, 'myMethod');`, + expected: `vi.spyOn(service, 'myMethod');`, + }, + { + description: 'should transform .and.returnValue(...) to .mockReturnValue(...)', + input: `spyOn(service, 'myMethod').and.returnValue(42);`, + expected: `vi.spyOn(service, 'myMethod').mockReturnValue(42);`, + }, + { + description: 'should transform .and.returnValues() to chained .mockReturnValueOnce() calls', + input: `spyOn(service, 'myMethod').and.returnValues('a', 'b', 'c');`, + expected: `vi.spyOn(service, 'myMethod').mockReturnValueOnce('a').mockReturnValueOnce('b').mockReturnValueOnce('c');`, + }, + { + description: 'should transform .and.callFake(...) to .mockImplementation(...)', + input: `spyOn(service, 'myMethod').and.callFake(() => 'fake');`, + expected: `vi.spyOn(service, 'myMethod').mockImplementation(() => 'fake');`, + }, + { + description: 'should remove .and.callThrough()', + input: `spyOn(service, 'myMethod').and.callThrough();`, + expected: `vi.spyOn(service, 'myMethod');`, + }, + { + description: 'should transform jasmine.createSpy("name") to vi.fn()', + input: `const mySpy = jasmine.createSpy('mySpy');`, + expected: `const mySpy = vi.fn();`, + }, + { + description: 'should transform jasmine.createSpy("name", fn) to vi.fn(fn)', + input: `const mySpy = jasmine.createSpy('mySpy', () => 'foo');`, + expected: `const mySpy = vi.fn(() => 'foo');`, + }, + { + description: 'should transform spyOnProperty(object, "prop") to vi.spyOn(object, "prop")', + input: `spyOnProperty(service, 'myProp');`, + expected: `vi.spyOn(service, 'myProp');`, + }, + { + description: 'should transform .and.stub() to .mockImplementation(() => {})', + input: `spyOn(service, 'myMethod').and.stub();`, + expected: `vi.spyOn(service, 'myMethod').mockImplementation(() => {});`, + }, + { + description: 'should add a TODO for jasmine.spyOnAllFunctions(object)', + input: `jasmine.spyOnAllFunctions(myObject);`, + expected: `// TODO: vitest-migration: Vitest does not have a direct equivalent for jasmine.spyOnAllFunctions(). Please spy on individual methods manually using vi.spyOn(). See: https://vitest.dev/api/vi.html#vi-spyon jasmine.spyOnAllFunctions(myObject); `, - }, - { - description: 'should handle chained calls on jasmine.createSpy()', - input: `const mySpy = jasmine.createSpy('mySpy').and.returnValue(true);`, - expected: `const mySpy = vi.fn().mockReturnValue(true);`, - }, - { - description: 'should handle .and.returnValues() with no arguments', - input: `spyOn(service, 'myMethod').and.returnValues();`, - expected: `vi.spyOn(service, 'myMethod');`, - }, - { - description: - 'should transform .and.throwError("message") to .mockImplementation(() => { throw new Error("message") })', - input: `spyOn(service, 'myMethod').and.throwError('Something went wrong');`, - expected: `vi.spyOn(service, 'myMethod').mockImplementation(() => { throw new Error('Something went wrong') });`, - }, - { - description: - 'should transform .and.throwError(new Error("message")) to .mockImplementation(() => { throw new Error("message") })', - input: `spyOn(service, 'myMethod').and.throwError(new Error('Custom Error'));`, - expected: `vi.spyOn(service, 'myMethod').mockImplementation(() => { throw new Error('Custom Error') });`, - }, - { - description: 'should transform .and.resolveTo(value) to .mockResolvedValue(value)', - input: `spyOn(service, 'myMethod').and.resolveTo('some value');`, - expected: `vi.spyOn(service, 'myMethod').mockResolvedValue('some value');`, - }, - { - description: 'should transform .and.rejectWith(error) to .mockRejectedValue(error)', - input: `spyOn(service, 'myMethod').and.rejectWith('some error');`, - expected: `vi.spyOn(service, 'myMethod').mockRejectedValue('some error');`, - }, - { - description: 'should add a TODO for an unsupported spy strategy', - input: `spyOn(service, 'myMethod').and.unknownStrategy();`, - expected: `// TODO: vitest-migration: Unsupported spy strategy ".and.unknownStrategy()" found. Please migrate this manually. See: https://vitest.dev/api/mocked.html#mock + }, + { + description: 'should handle chained calls on jasmine.createSpy()', + input: `const mySpy = jasmine.createSpy('mySpy').and.returnValue(true);`, + expected: `const mySpy = vi.fn().mockReturnValue(true);`, + }, + { + description: 'should handle .and.returnValues() with no arguments', + input: `spyOn(service, 'myMethod').and.returnValues();`, + expected: `vi.spyOn(service, 'myMethod');`, + }, + { + description: + 'should transform .and.throwError("message") to .mockImplementation(() => { throw new Error("message") })', + input: `spyOn(service, 'myMethod').and.throwError('Something went wrong');`, + expected: `vi.spyOn(service, 'myMethod').mockImplementation(() => { throw new Error('Something went wrong') });`, + }, + { + description: + 'should transform .and.throwError(new Error("message")) to .mockImplementation(() => { throw new Error("message") })', + input: `spyOn(service, 'myMethod').and.throwError(new Error('Custom Error'));`, + expected: `vi.spyOn(service, 'myMethod').mockImplementation(() => { throw new Error('Custom Error') });`, + }, + { + description: 'should transform .and.resolveTo(value) to .mockResolvedValue(value)', + input: `spyOn(service, 'myMethod').and.resolveTo('some value');`, + expected: `vi.spyOn(service, 'myMethod').mockResolvedValue('some value');`, + }, + { + description: 'should transform .and.rejectWith(error) to .mockRejectedValue(error)', + input: `spyOn(service, 'myMethod').and.rejectWith('some error');`, + expected: `vi.spyOn(service, 'myMethod').mockRejectedValue('some error');`, + }, + { + description: 'should add a TODO for an unsupported spy strategy', + input: `spyOn(service, 'myMethod').and.unknownStrategy();`, + expected: `// TODO: vitest-migration: Unsupported spy strategy ".and.unknownStrategy()" found. Please migrate this manually. See: https://vitest.dev/api/mocked.html#mock vi.spyOn(service, 'myMethod').and.unknownStrategy();`, - }, - ]; + }, + ]; - testCases.forEach(({ description, input, expected }) => { - it(description, async () => { - await expectTransformation(input, expected); - }); + testCases.forEach(({ description, input, expected }) => { + it(description, async () => { + await expectTransformation(input, expected); }); }); +}); - describe('transformCreateSpyObj', () => { - const testCases = [ - { - description: 'should transform jasmine.createSpyObj with an array of methods', - input: `const myService = jasmine.createSpyObj('MyService', ['methodA', 'methodB']);`, - expected: `const myService = { +describe('transformCreateSpyObj', () => { + const testCases = [ + { + description: 'should transform jasmine.createSpyObj with an array of methods', + input: `const myService = jasmine.createSpyObj('MyService', ['methodA', 'methodB']);`, + expected: `const myService = { methodA: vi.fn().mockName("MyService.methodA"), methodB: vi.fn().mockName("MyService.methodB"), };`, - }, - { - description: - 'should transform jasmine.createSpyObj with an array of methods without base name', - input: `const myService = jasmine.createSpyObj(['methodA', 'methodB']);`, - expected: `const myService = { + }, + { + description: + 'should transform jasmine.createSpyObj with an array of methods without base name', + input: `const myService = jasmine.createSpyObj(['methodA', 'methodB']);`, + expected: `const myService = { methodA: vi.fn(), methodB: vi.fn(), };`, - }, - { - description: 'should add a TODO if the second argument is not a literal', - input: `const myService = jasmine.createSpyObj('MyService', methodNames);`, - expected: ` + }, + { + description: 'should add a TODO if the second argument is not a literal', + input: `const myService = jasmine.createSpyObj('MyService', methodNames);`, + expected: ` // TODO: vitest-migration: Cannot transform jasmine.createSpyObj with a dynamic variable. Please migrate this manually. See: https://vitest.dev/api/vi.html#vi-fn const myService = jasmine.createSpyObj('MyService', methodNames); `, - }, - { - description: 'should transform jasmine.createSpyObj with an object of return values', - input: `const myService = jasmine.createSpyObj('MyService', { methodA: 'foo', methodB: 42 });`, - expected: `const myService = { + }, + { + description: 'should transform jasmine.createSpyObj with an object of return values', + input: `const myService = jasmine.createSpyObj('MyService', { methodA: 'foo', methodB: 42 });`, + expected: `const myService = { methodA: vi.fn().mockName("MyService.methodA").mockReturnValue('foo'), methodB: vi.fn().mockName("MyService.methodB").mockReturnValue(42), };`, - }, - { - description: - 'should transform jasmine.createSpyObj with an object of return values without base name', - input: `const myService = jasmine.createSpyObj({ methodA: 'foo', methodB: 42 });`, - expected: `const myService = { + }, + { + description: + 'should transform jasmine.createSpyObj with an object of return values without base name', + input: `const myService = jasmine.createSpyObj({ methodA: 'foo', methodB: 42 });`, + expected: `const myService = { methodA: vi.fn().mockReturnValue('foo'), methodB: vi.fn().mockReturnValue(42), };`, - }, - { - description: - 'should transform jasmine.createSpyObj with an object of return values containing an asymmetric matcher', - input: `const myService = jasmine.createSpyObj('MyService', { methodA: jasmine.any(String) });`, - expected: `const myService = { + }, + { + description: + 'should transform jasmine.createSpyObj with an object of return values containing an asymmetric matcher', + input: `const myService = jasmine.createSpyObj('MyService', { methodA: jasmine.any(String) });`, + expected: `const myService = { methodA: vi.fn().mockName("MyService.methodA").mockReturnValue(expect.any(String)), };`, - }, - { - description: 'should add a TODO for jasmine.createSpyObj with only base name argument', - input: `const myService = jasmine.createSpyObj('MyService');`, - expected: ` + }, + { + description: 'should add a TODO for jasmine.createSpyObj with only base name argument', + input: `const myService = jasmine.createSpyObj('MyService');`, + expected: ` // TODO: vitest-migration: jasmine.createSpyObj called with a single argument is not supported for transformation. See: https://vitest.dev/api/vi.html#vi-fn const myService = jasmine.createSpyObj('MyService'); `, - }, - { - description: 'should transform jasmine.createSpyObj with a property map', - input: `const myService = jasmine.createSpyObj('MyService', ['methodA'], { propA: 'valueA' });`, - expected: `const myService = { + }, + { + description: 'should transform jasmine.createSpyObj with a property map', + input: `const myService = jasmine.createSpyObj('MyService', ['methodA'], { propA: 'valueA' });`, + expected: `const myService = { methodA: vi.fn().mockName("MyService.methodA"), propA: 'valueA', };`, - }, - { - description: 'should transform jasmine.createSpyObj with a method map and a property map', - input: `const myService = jasmine.createSpyObj('MyService', { methodA: 'foo' }, { propA: 'valueA' });`, - expected: `const myService = { + }, + { + description: 'should transform jasmine.createSpyObj with a method map and a property map', + input: `const myService = jasmine.createSpyObj('MyService', { methodA: 'foo' }, { propA: 'valueA' });`, + expected: `const myService = { methodA: vi.fn().mockName("MyService.methodA").mockReturnValue('foo'), propA: 'valueA', };`, - }, - { - description: - 'should transform jasmine.createSpyObj with a method map and a property map without base name', - input: `const myService = jasmine.createSpyObj({ methodA: 'foo' }, { propA: 'valueA' });`, - expected: `const myService = { + }, + { + description: + 'should transform jasmine.createSpyObj with a method map and a property map without base name', + input: `const myService = jasmine.createSpyObj({ methodA: 'foo' }, { propA: 'valueA' });`, + expected: `const myService = { methodA: vi.fn().mockReturnValue('foo'), propA: 'valueA', };`, - }, - { - description: 'should ignore non-string literals in the method array', - input: `const myService = jasmine.createSpyObj('MyService', ['methodA', 123, someVar]);`, - expected: `const myService = { + }, + { + description: 'should ignore non-string literals in the method array', + input: `const myService = jasmine.createSpyObj('MyService', ['methodA', 123, someVar]);`, + expected: `const myService = { methodA: vi.fn().mockName("MyService.methodA"), };`, - }, - ]; + }, + ]; - testCases.forEach(({ description, input, expected }) => { - it(description, async () => { - await expectTransformation(input, expected); - }); + testCases.forEach(({ description, input, expected }) => { + it(description, async () => { + await expectTransformation(input, expected); }); }); +}); - describe('transformSpyReset', () => { - const testCases = [ - { - description: 'should transform spy.calls.reset() to spy.mockClear()', - input: `mySpy.calls.reset();`, - expected: `mySpy.mockClear();`, - }, - ]; +describe('transformSpyReset', () => { + const testCases = [ + { + description: 'should transform spy.calls.reset() to spy.mockClear()', + input: `mySpy.calls.reset();`, + expected: `mySpy.mockClear();`, + }, + ]; - testCases.forEach(({ description, input, expected }) => { - it(description, async () => { - await expectTransformation(input, expected); - }); + testCases.forEach(({ description, input, expected }) => { + it(description, async () => { + await expectTransformation(input, expected); }); }); +}); - describe('transformSpyCallInspection', () => { - const testCases = [ - { - description: 'should transform spy.calls.any()', - input: `expect(mySpy.calls.any()).toBe(true);`, - expected: `expect(vi.mocked(mySpy).mock.calls.length > 0).toBe(true);`, - }, - { - description: 'should transform spy.calls.count()', - input: `expect(mySpy.calls.count()).toBe(1);`, - expected: `expect(vi.mocked(mySpy).mock.calls.length).toBe(1);`, - }, - { - description: 'should transform spy.calls.argsFor(0)', - input: `const args = mySpy.calls.argsFor(0);`, - expected: `const args = vi.mocked(mySpy).mock.calls[0];`, - }, - { - description: 'should transform spy.calls.allArgs()', - input: `const allArgs = mySpy.calls.allArgs();`, - expected: `const allArgs = vi.mocked(mySpy).mock.calls;`, - }, - { - description: 'should transform spy.calls.all()', - input: `const allCalls = mySpy.calls.all();`, - expected: `const allCalls = vi.mocked(mySpy).mock.calls;`, - }, - { - description: 'should transform spy.calls.mostRecent().args', - input: `const recentArgs = mySpy.calls.mostRecent().args;`, - expected: `const recentArgs = vi.mocked(mySpy).mock.lastCall;`, - }, - { - description: 'should transform spy.calls.first()', - input: `const firstCall = mySpy.calls.first();`, - expected: `const firstCall = vi.mocked(mySpy).mock.calls[0];`, - }, - { - description: 'should add a TODO for spy.calls.mostRecent() without .args', - input: `const mostRecent = mySpy.calls.mostRecent();`, - expected: `// TODO: vitest-migration: Direct usage of mostRecent() is not supported. Please refactor to access .args directly or use vi.mocked(spy).mock.lastCall. See: https://vitest.dev/api/mocked.html#mock-lastcall +describe('transformSpyCallInspection', () => { + const testCases = [ + { + description: 'should transform spy.calls.any()', + input: `expect(mySpy.calls.any()).toBe(true);`, + expected: `expect(vi.mocked(mySpy).mock.calls.length > 0).toBe(true);`, + }, + { + description: 'should transform spy.calls.count()', + input: `expect(mySpy.calls.count()).toBe(1);`, + expected: `expect(vi.mocked(mySpy).mock.calls.length).toBe(1);`, + }, + { + description: 'should transform spy.calls.argsFor(0)', + input: `const args = mySpy.calls.argsFor(0);`, + expected: `const args = vi.mocked(mySpy).mock.calls[0];`, + }, + { + description: 'should transform spy.calls.allArgs()', + input: `const allArgs = mySpy.calls.allArgs();`, + expected: `const allArgs = vi.mocked(mySpy).mock.calls;`, + }, + { + description: 'should transform spy.calls.all()', + input: `const allCalls = mySpy.calls.all();`, + expected: `const allCalls = vi.mocked(mySpy).mock.calls;`, + }, + { + description: 'should transform spy.calls.mostRecent().args', + input: `const recentArgs = mySpy.calls.mostRecent().args;`, + expected: `const recentArgs = vi.mocked(mySpy).mock.lastCall;`, + }, + { + description: 'should transform spy.calls.first()', + input: `const firstCall = mySpy.calls.first();`, + expected: `const firstCall = vi.mocked(mySpy).mock.calls[0];`, + }, + { + description: 'should add a TODO for spy.calls.mostRecent() without .args', + input: `const mostRecent = mySpy.calls.mostRecent();`, + expected: `// TODO: vitest-migration: Direct usage of mostRecent() is not supported. Please refactor to access .args directly or use vi.mocked(spy).mock.lastCall. See: https://vitest.dev/api/mocked.html#mock-lastcall const mostRecent = mySpy.calls.mostRecent();`, - }, - ]; + }, + ]; - testCases.forEach(({ description, input, expected }) => { - it(description, async () => { - await expectTransformation(input, expected); - }); + testCases.forEach(({ description, input, expected }) => { + it(description, async () => { + await expectTransformation(input, expected); }); }); }); diff --git a/packages/schematics/angular/refactor/jasmine-vitest/transformers/jasmine-type_spec.ts b/packages/schematics/angular/refactor/jasmine-vitest/transformers/jasmine-type_spec.ts index d38891730f99..d43bd5b8e157 100644 --- a/packages/schematics/angular/refactor/jasmine-vitest/transformers/jasmine-type_spec.ts +++ b/packages/schematics/angular/refactor/jasmine-vitest/transformers/jasmine-type_spec.ts @@ -8,69 +8,67 @@ import { expectTransformation } from '../test-helpers'; -describe('Jasmine to Vitest Transformer', () => { - describe('transformJasmineTypes', () => { - const testCases = [ - { - description: 'should transform a variable with a jasmine.Spy type', - input: `let mySpy: jasmine.Spy;`, - expected: ` +describe('Jasmine to Vitest Transformer - transformJasmineTypes', () => { + const testCases = [ + { + description: 'should transform a variable with a jasmine.Spy type', + input: `let mySpy: jasmine.Spy;`, + expected: ` import type { Mock } from 'vitest'; let mySpy: Mock; `, - }, - { - description: 'should transform a variable with a jasmine.SpyObj type', - input: `let mySpy: jasmine.SpyObj;`, - expected: ` + }, + { + description: 'should transform a variable with a jasmine.SpyObj type', + input: `let mySpy: jasmine.SpyObj;`, + expected: ` import type { MockedObject } from 'vitest'; let mySpy: MockedObject; `, - }, - { - description: 'should handle multiple jasmine types and create a single import', - input: ` + }, + { + description: 'should handle multiple jasmine types and create a single import', + input: ` let mySpy: jasmine.Spy; let mySpyObj: jasmine.SpyObj; `, - expected: ` + expected: ` import type { Mock, MockedObject } from 'vitest'; let mySpy: Mock; let mySpyObj: MockedObject; `, - }, - { - description: 'should not add an import if no jasmine types are used', - input: `let mySpy: any;`, - expected: `let mySpy: any;`, - }, - { - description: 'should transform jasmine.Any to any', - input: `let myMatcher: jasmine.Any;`, - expected: `let myMatcher: any;`, - }, - { - description: 'should transform jasmine.ObjectContaining to Partial', - input: `let myMatcher: jasmine.ObjectContaining;`, - expected: `let myMatcher: Partial;`, - }, - { - description: 'should transform jasmine.ObjectContaining to object', - input: `let myMatcher: jasmine.ObjectContaining;`, - expected: `let myMatcher: object;`, - }, - { - description: 'should transform jasmine.DoneFn to () => void', - input: `let myDoneFn: jasmine.DoneFn;`, - expected: `let myDoneFn: () => void;`, - }, - ]; + }, + { + description: 'should not add an import if no jasmine types are used', + input: `let mySpy: any;`, + expected: `let mySpy: any;`, + }, + { + description: 'should transform jasmine.Any to any', + input: `let myMatcher: jasmine.Any;`, + expected: `let myMatcher: any;`, + }, + { + description: 'should transform jasmine.ObjectContaining to Partial', + input: `let myMatcher: jasmine.ObjectContaining;`, + expected: `let myMatcher: Partial;`, + }, + { + description: 'should transform jasmine.ObjectContaining to object', + input: `let myMatcher: jasmine.ObjectContaining;`, + expected: `let myMatcher: object;`, + }, + { + description: 'should transform jasmine.DoneFn to () => void', + input: `let myDoneFn: jasmine.DoneFn;`, + expected: `let myDoneFn: () => void;`, + }, + ]; - testCases.forEach(({ description, input, expected }) => { - it(description, async () => { - await expectTransformation(input, expected); - }); + testCases.forEach(({ description, input, expected }) => { + it(description, async () => { + await expectTransformation(input, expected); }); }); }); diff --git a/packages/schematics/angular/utility/dependencies_spec.ts b/packages/schematics/angular/utility/dependencies_spec.ts index d2d7b69e2c45..01a0278828fc 100644 --- a/packages/schematics/angular/utility/dependencies_spec.ts +++ b/packages/schematics/angular/utility/dependencies_spec.ts @@ -19,16 +19,10 @@ describe('dependencies', () => { describe('addDependency', () => { let tree: UnitTestTree; const pkgJsonPath = '/package.json'; - let dependency: NodeDependency; + beforeEach(() => { tree = new UnitTestTree(new EmptyTree()); tree.create(pkgJsonPath, '{}'); - - dependency = { - type: NodeDependencyType.Default, - name: 'my-pkg', - version: '1.2.3', - }; }); [ @@ -36,29 +30,39 @@ describe('dependencies', () => { { type: NodeDependencyType.Dev, key: 'devDependencies' }, { type: NodeDependencyType.Optional, key: 'optionalDependencies' }, { type: NodeDependencyType.Peer, key: 'peerDependencies' }, - ].forEach((type) => { - describe(`Type: ${type.toString()}`, () => { - beforeEach(() => { - dependency.type = type.type; - }); + ].forEach(({ type, key }) => { + describe(`Type: ${type}`, () => { + const dependency: NodeDependency = { + type, + name: 'my-pkg', + version: '1.2.3', + }; it('should add a dependency', () => { addPackageJsonDependency(tree, dependency); const pkgJson = JSON.parse(tree.readContent(pkgJsonPath)); - expect(pkgJson[type.key][dependency.name]).toEqual(dependency.version); + + expect(pkgJson[key][dependency.name]).toEqual(dependency.version); }); it('should handle an existing dependency (update version)', () => { addPackageJsonDependency(tree, { ...dependency, version: '0.0.0' }); addPackageJsonDependency(tree, { ...dependency, overwrite: true }); const pkgJson = JSON.parse(tree.readContent(pkgJsonPath)); - expect(pkgJson[type.key][dependency.name]).toEqual(dependency.version); + + expect(pkgJson[key][dependency.name]).toEqual(dependency.version); }); }); }); it('should throw when missing package.json', () => { - expect(() => addPackageJsonDependency(new EmptyTree(), dependency)).toThrow(); + expect(() => + addPackageJsonDependency(new EmptyTree(), { + type: NodeDependencyType.Default, + name: 'my-pkg', + version: '1.2.3', + }), + ).toThrow(); }); }); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index cdedec51bfbf..b320f1708085 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -116,8 +116,8 @@ importers: specifier: ^4.0.0 version: 4.1.1 '@types/jasmine': - specifier: ~5.1.0 - version: 5.1.15 + specifier: ~6.0.0 + version: 6.0.0 '@types/jasmine-reporters': specifier: ^2 version: 2.5.3 @@ -209,11 +209,11 @@ importers: specifier: 9.1.7 version: 9.1.7 jasmine: - specifier: ~5.13.0 - version: 5.13.0 + specifier: ~6.1.0 + version: 6.1.0 jasmine-core: - specifier: ~5.13.0 - version: 5.13.0 + specifier: ~6.1.0 + version: 6.1.0 jasmine-reporters: specifier: ^2.5.2 version: 2.5.2 @@ -234,7 +234,7 @@ importers: version: 5.1.0(karma@6.4.4(bufferutil@4.1.0)) karma-jasmine-html-reporter: specifier: ~2.2.0 - version: 2.2.0(jasmine-core@5.13.0)(karma-jasmine@5.1.0(karma@6.4.4(bufferutil@4.1.0)))(karma@6.4.4(bufferutil@4.1.0)) + version: 2.2.0(jasmine-core@6.1.0)(karma-jasmine@5.1.0(karma@6.4.4(bufferutil@4.1.0)))(karma@6.4.4(bufferutil@4.1.0)) karma-source-map-support: specifier: 1.4.0 version: 1.4.0 @@ -3526,9 +3526,6 @@ packages: '@types/jasmine-reporters@2.5.3': resolution: {integrity: sha512-8aojAUdgdiD9VQbllBJb/9gny3lOjz9T5gyMcbYlKe6npwGVsarbr8v2JYSFJSZSuFYXcPVzFG2lLX3ib0j/DA==} - '@types/jasmine@5.1.15': - resolution: {integrity: sha512-ZAC8KjmV2MJxbNTrwXFN+HKeajpXQZp6KpPiR6Aa4XvaEnjP6qh23lL/Rqb7AYzlp3h/rcwDrQ7Gg7q28cQTQg==} - '@types/jasmine@6.0.0': resolution: {integrity: sha512-18lgGsLmEh3VJk9eZ5wAjTISxdqzl6YOwu8UdMpolajN57QOCNbl+AbHUd+Yu9ItrsFdB+c8LSZSGNg8nHaguw==} @@ -6400,9 +6397,6 @@ packages: jasmine-core@4.6.1: resolution: {integrity: sha512-VYz/BjjmC3klLJlLwA4Kw8ytk0zDSmbbDLNs794VnWmkcCB7I9aAL/D48VNQtmITyPvea2C3jdUMfc3kAoy0PQ==} - jasmine-core@5.13.0: - resolution: {integrity: sha512-vsYjfh7lyqvZX5QgqKc4YH8phs7g96Z8bsdIFNEU3VqXhlHaq+vov/Fgn/sr6MiUczdZkyXRC3TX369Ll4Nzbw==} - jasmine-core@6.1.0: resolution: {integrity: sha512-p/tjBw58O6vxKIWMlrU+yys8lqR3+l3UrqwNTT7wpj+dQ7N4etQekFM8joI+cWzPDYqZf54kN+hLC1+s5TvZvg==} @@ -6416,10 +6410,6 @@ packages: resolution: {integrity: sha512-KbdGQTf5jbZgltoHs31XGiChAPumMSY64OZMWLNYnEnMfG5uwGBhffePwuskexjT+/Jea/gU3qAU8344hNohSw==} hasBin: true - jasmine@5.13.0: - resolution: {integrity: sha512-oLCXIhEb5e0zzjn9GyuvcuisvLBwUjmgz7a0RNGWKwQtJCDld4m+vwKUpAIJVLB5vbmQFdtKhT86/tIZlJ5gYw==} - hasBin: true - jasmine@6.1.0: resolution: {integrity: sha512-WPphPqEMY0uBRMjuhRHoVoxQNvJuxIMqz0yIcJ3k3oYxBedeGoH60/NXNgasxnx2FvfXrq5/r+2wssJ7WE8ABw==} hasBin: true @@ -11989,7 +11979,7 @@ snapshots: '@tufjs/models@4.1.0': dependencies: '@tufjs/canonical-json': 2.0.0 - minimatch: 10.2.0 + minimatch: 10.2.2 '@tybys/wasm-util@0.10.1': dependencies: @@ -12166,9 +12156,7 @@ snapshots: '@types/jasmine-reporters@2.5.3': dependencies: - '@types/jasmine': 5.1.15 - - '@types/jasmine@5.1.15': {} + '@types/jasmine': 6.0.0 '@types/jasmine@6.0.0': {} @@ -15015,7 +15003,7 @@ snapshots: glob@13.0.3: dependencies: - minimatch: 10.2.0 + minimatch: 10.2.2 minipass: 7.1.2 path-scurry: 2.0.1 @@ -15705,8 +15693,6 @@ snapshots: jasmine-core@4.6.1: {} - jasmine-core@5.13.0: {} - jasmine-core@6.1.0: {} jasmine-reporters@2.5.2: @@ -15724,11 +15710,6 @@ snapshots: glob: 7.2.3 jasmine-core: 2.8.0 - jasmine@5.13.0: - dependencies: - glob: 10.5.0 - jasmine-core: 5.13.0 - jasmine@6.1.0: dependencies: '@jasminejs/reporters': 1.0.0 @@ -15888,9 +15869,9 @@ snapshots: transitivePeerDependencies: - supports-color - karma-jasmine-html-reporter@2.2.0(jasmine-core@5.13.0)(karma-jasmine@5.1.0(karma@6.4.4(bufferutil@4.1.0)))(karma@6.4.4(bufferutil@4.1.0)): + karma-jasmine-html-reporter@2.2.0(jasmine-core@6.1.0)(karma-jasmine@5.1.0(karma@6.4.4(bufferutil@4.1.0)))(karma@6.4.4(bufferutil@4.1.0)): dependencies: - jasmine-core: 5.13.0 + jasmine-core: 6.1.0 karma: 6.4.4(bufferutil@4.1.0) karma-jasmine: 5.1.0(karma@6.4.4(bufferutil@4.1.0)) From b4885b851226709ae4146070122806e14a3d5eb9 Mon Sep 17 00:00:00 2001 From: Alan Agius <17563226+alan-agius4@users.noreply.github.com> Date: Wed, 25 Feb 2026 15:15:40 +0000 Subject: [PATCH 034/226] refactor: remove experimental Jest and Web Test Runner builders The experimental Jest and Web Test Runner builders have been removed from the Angular CLI. These builders were experimental and have been superseded. BREAKING CHANGE: The experimental `@angular-devkit/build-angular:jest` and `@angular-devkit/build-angular:web-test-runner` builders have been removed. --- .../cli/lib/config/workspace-schema.json | 46 - .../angular_devkit/build_angular/BUILD.bazel | 14 - .../build_angular/builders.json | 10 - .../angular_devkit/build_angular/package.json | 13 - .../build_angular/src/builders/jest/index.ts | 216 --- .../src/builders/jest/init-test-bed.mjs | 24 - .../src/builders/jest/jest-global.mjs | 19 - .../src/builders/jest/jest.config.mjs | 11 - .../src/builders/jest/options.ts | 34 - .../src/builders/jest/schema.json | 44 - .../src/builders/jest/tests/options.ts | 16 - .../builder-status-warnings.ts | 49 - .../src/builders/web-test-runner/index.ts | 206 --- .../web-test-runner/jasmine_runner.js | 91 -- .../src/builders/web-test-runner/options.ts | 42 - .../builders/web-test-runner/options_spec.ts | 64 - .../src/builders/web-test-runner/schema.json | 297 ---- .../builders/web-test-runner/test_page.html | 40 - .../web-test-runner/write-test-files.ts | 39 - .../build_angular/src/utils/test-files.ts | 37 - .../src/utils/test-files_spec.ts | 151 -- pnpm-lock.yaml | 1273 ----------------- tests/e2e/tests/jest/aot.ts | 41 - tests/e2e/tests/jest/basic.ts | 12 - tests/e2e/tests/jest/custom-config.ts | 53 - tests/e2e/tests/jest/no-zoneless.ts | 29 - tests/e2e/tests/web-test-runner/basic.ts | 15 - tests/e2e/utils/jest.ts | 29 - tests/e2e/utils/web-test-runner.ts | 23 - 29 files changed, 2938 deletions(-) delete mode 100644 packages/angular_devkit/build_angular/src/builders/jest/index.ts delete mode 100644 packages/angular_devkit/build_angular/src/builders/jest/init-test-bed.mjs delete mode 100644 packages/angular_devkit/build_angular/src/builders/jest/jest-global.mjs delete mode 100644 packages/angular_devkit/build_angular/src/builders/jest/jest.config.mjs delete mode 100644 packages/angular_devkit/build_angular/src/builders/jest/options.ts delete mode 100644 packages/angular_devkit/build_angular/src/builders/jest/schema.json delete mode 100644 packages/angular_devkit/build_angular/src/builders/jest/tests/options.ts delete mode 100644 packages/angular_devkit/build_angular/src/builders/web-test-runner/builder-status-warnings.ts delete mode 100644 packages/angular_devkit/build_angular/src/builders/web-test-runner/index.ts delete mode 100644 packages/angular_devkit/build_angular/src/builders/web-test-runner/jasmine_runner.js delete mode 100644 packages/angular_devkit/build_angular/src/builders/web-test-runner/options.ts delete mode 100644 packages/angular_devkit/build_angular/src/builders/web-test-runner/options_spec.ts delete mode 100644 packages/angular_devkit/build_angular/src/builders/web-test-runner/schema.json delete mode 100644 packages/angular_devkit/build_angular/src/builders/web-test-runner/test_page.html delete mode 100644 packages/angular_devkit/build_angular/src/builders/web-test-runner/write-test-files.ts delete mode 100644 packages/angular_devkit/build_angular/src/utils/test-files.ts delete mode 100644 packages/angular_devkit/build_angular/src/utils/test-files_spec.ts delete mode 100644 tests/e2e/tests/jest/aot.ts delete mode 100644 tests/e2e/tests/jest/basic.ts delete mode 100644 tests/e2e/tests/jest/custom-config.ts delete mode 100644 tests/e2e/tests/jest/no-zoneless.ts delete mode 100644 tests/e2e/tests/web-test-runner/basic.ts delete mode 100644 tests/e2e/utils/jest.ts delete mode 100644 tests/e2e/utils/web-test-runner.ts diff --git a/packages/angular/cli/lib/config/workspace-schema.json b/packages/angular/cli/lib/config/workspace-schema.json index 3fede1746559..f73424b5b554 100644 --- a/packages/angular/cli/lib/config/workspace-schema.json +++ b/packages/angular/cli/lib/config/workspace-schema.json @@ -417,8 +417,6 @@ "@angular-devkit/build-angular:karma", "@angular-devkit/build-angular:ng-packagr", "@angular-devkit/build-angular:prerender", - "@angular-devkit/build-angular:jest", - "@angular-devkit/build-angular:web-test-runner", "@angular-devkit/build-angular:server", "@angular-devkit/build-angular:ssr-dev-server" ] @@ -706,50 +704,6 @@ } } }, - { - "type": "object", - "additionalProperties": false, - "properties": { - "builder": { - "const": "@angular-devkit/build-angular:jest" - }, - "defaultConfiguration": { - "type": "string", - "description": "A default named configuration to use when a target configuration is not provided." - }, - "options": { - "$ref": "../../../../angular_devkit/build_angular/src/builders/jest/schema.json" - }, - "configurations": { - "type": "object", - "additionalProperties": { - "$ref": "../../../../angular_devkit/build_angular/src/builders/jest/schema.json" - } - } - } - }, - { - "type": "object", - "additionalProperties": false, - "properties": { - "builder": { - "const": "@angular-devkit/build-angular:web-test-runner" - }, - "defaultConfiguration": { - "type": "string", - "description": "A default named configuration to use when a target configuration is not provided." - }, - "options": { - "$ref": "../../../../angular_devkit/build_angular/src/builders/web-test-runner/schema.json" - }, - "configurations": { - "type": "object", - "additionalProperties": { - "$ref": "../../../../angular_devkit/build_angular/src/builders/web-test-runner/schema.json" - } - } - } - }, { "type": "object", "additionalProperties": false, diff --git a/packages/angular_devkit/build_angular/BUILD.bazel b/packages/angular_devkit/build_angular/BUILD.bazel index 6e4fba869d9f..06bfa412c48d 100644 --- a/packages/angular_devkit/build_angular/BUILD.bazel +++ b/packages/angular_devkit/build_angular/BUILD.bazel @@ -39,11 +39,6 @@ ts_json_schema( src = "src/builders/extract-i18n/schema.json", ) -ts_json_schema( - name = "jest_schema", - src = "src/builders/jest/schema.json", -) - ts_json_schema( name = "karma_schema", src = "src/builders/karma/schema.json", @@ -74,11 +69,6 @@ ts_json_schema( src = "src/builders/prerender/schema.json", ) -ts_json_schema( - name = "web_test_runner_schema", - src = "src/builders/web-test-runner/schema.json", -) - copy_to_bin( name = "schemas", srcs = glob(["**/schema.json"]), @@ -88,7 +78,6 @@ RUNTIME_ASSETS = glob( include = [ "src/**/schema.json", "src/**/*.js", - "src/**/*.mjs", "src/**/*.html", ], ) + [ @@ -117,14 +106,12 @@ ts_project( "//packages/angular_devkit/build_angular:src/builders/browser/schema.ts", "//packages/angular_devkit/build_angular:src/builders/dev-server/schema.ts", "//packages/angular_devkit/build_angular:src/builders/extract-i18n/schema.ts", - "//packages/angular_devkit/build_angular:src/builders/jest/schema.ts", "//packages/angular_devkit/build_angular:src/builders/karma/schema.ts", "//packages/angular_devkit/build_angular:src/builders/ng-packagr/schema.ts", "//packages/angular_devkit/build_angular:src/builders/prerender/schema.ts", "//packages/angular_devkit/build_angular:src/builders/protractor/schema.ts", "//packages/angular_devkit/build_angular:src/builders/server/schema.ts", "//packages/angular_devkit/build_angular:src/builders/ssr-dev-server/schema.ts", - "//packages/angular_devkit/build_angular:src/builders/web-test-runner/schema.ts", ], data = RUNTIME_ASSETS, deps = [ @@ -145,7 +132,6 @@ ts_project( ":node_modules/@babel/runtime", ":node_modules/@discoveryjs/json-ext", ":node_modules/@ngtools/webpack", - ":node_modules/@web/test-runner", ":node_modules/ansi-colors", ":node_modules/autoprefixer", ":node_modules/babel-loader", diff --git a/packages/angular_devkit/build_angular/builders.json b/packages/angular_devkit/build_angular/builders.json index aba9dd1ffca6..b2af093bba3c 100644 --- a/packages/angular_devkit/build_angular/builders.json +++ b/packages/angular_devkit/build_angular/builders.json @@ -27,21 +27,11 @@ "schema": "./src/builders/extract-i18n/schema.json", "description": "Extract i18n strings from a browser application." }, - "jest": { - "implementation": "./src/builders/jest", - "schema": "./src/builders/jest/schema.json", - "description": "Run unit tests using Jest." - }, "karma": { "implementation": "./src/builders/karma", "schema": "./src/builders/karma/schema.json", "description": "Run Karma unit tests." }, - "web-test-runner": { - "implementation": "./src/builders/web-test-runner", - "schema": "./src/builders/web-test-runner/schema.json", - "description": "Run unit tests with Web Test Runner." - }, "protractor": { "implementation": "./src/builders/protractor-error", "schema": "./src/builders/protractor/schema.json", diff --git a/packages/angular_devkit/build_angular/package.json b/packages/angular_devkit/build_angular/package.json index 04423dceffd8..a055ca81b157 100644 --- a/packages/angular_devkit/build_angular/package.json +++ b/packages/angular_devkit/build_angular/package.json @@ -66,7 +66,6 @@ }, "devDependencies": { "@angular/ssr": "workspace:*", - "@web/test-runner": "0.20.2", "browser-sync": "3.0.4", "ng-packagr": "21.2.0-next.0", "undici": "7.22.0" @@ -79,10 +78,7 @@ "@angular/platform-server": "0.0.0-ANGULAR-FW-PEER-DEP", "@angular/service-worker": "0.0.0-ANGULAR-FW-PEER-DEP", "@angular/ssr": "^0.0.0-PLACEHOLDER", - "@web/test-runner": "^0.20.0", "browser-sync": "^3.0.2", - "jest": "^30.2.0", - "jest-environment-jsdom": "^30.2.0", "karma": "^6.3.0", "ng-packagr": "0.0.0-NG-PACKAGR-PEER-DEP", "protractor": "^7.0.0", @@ -108,18 +104,9 @@ "@angular/ssr": { "optional": true }, - "@web/test-runner": { - "optional": true - }, "browser-sync": { "optional": true }, - "jest": { - "optional": true - }, - "jest-environment-jsdom": { - "optional": true - }, "karma": { "optional": true }, diff --git a/packages/angular_devkit/build_angular/src/builders/jest/index.ts b/packages/angular_devkit/build_angular/src/builders/jest/index.ts deleted file mode 100644 index 5cd8d6ebdad9..000000000000 --- a/packages/angular_devkit/build_angular/src/builders/jest/index.ts +++ /dev/null @@ -1,216 +0,0 @@ -/** - * @license - * Copyright Google LLC All Rights Reserved. - * - * Use of this source code is governed by an MIT-style license that can be - * found in the LICENSE file at https://angular.dev/license - */ - -import { ResultKind, buildApplicationInternal } from '@angular/build/private'; -import { BuilderContext, BuilderOutput, createBuilder } from '@angular-devkit/architect'; -import { execFile as execFileCb } from 'node:child_process'; -import { randomUUID } from 'node:crypto'; -import * as fs from 'node:fs/promises'; -import * as path from 'node:path'; -import { promisify } from 'node:util'; -import { colors } from '../../utils/color'; -import { findTestFiles } from '../../utils/test-files'; -import { OutputHashing } from '../browser-esbuild/schema'; -import { writeTestFiles } from '../web-test-runner/write-test-files'; -import { normalizeOptions } from './options'; -import { Schema as JestBuilderSchema } from './schema'; - -const execFile = promisify(execFileCb); - -/** Main execution function for the Jest builder. */ -export default createBuilder( - async (schema: JestBuilderSchema, context: BuilderContext): Promise => { - context.logger.warn( - 'NOTE: The Jest builder is currently EXPERIMENTAL and will be removed in version 22.', - ); - - const options = normalizeOptions(schema); - const testOut = path.join(context.workspaceRoot, 'dist/test-out', randomUUID()); // TODO(dgp1130): Hide in temp directory. - - // Verify Jest installation and get the path to it's binary. - // We need to `node_modules/.bin/jest`, but there is no means to resolve that directly. Fortunately Jest's `package.json` exports the - // same file at `bin/jest`, so we can just resolve that instead. - const jest = resolveModule('jest/bin/jest'); - if (!jest) { - return { - success: false, - // TODO(dgp1130): Display a more accurate message for non-NPM users. - error: - 'Jest is not installed, most likely you need to run `npm install jest --save-dev` in your project.', - }; - } - - // Verify that JSDom is installed in the project. - const environment = resolveModule('jest-environment-jsdom'); - if (!environment) { - return { - success: false, - // TODO(dgp1130): Display a more accurate message for non-NPM users. - error: - '`jest-environment-jsdom` is not installed. Install it with `npm install jest-environment-jsdom --save-dev`.', - }; - } - - const [testFiles, customConfig] = await Promise.all([ - findTestFiles(options.include, options.exclude, context.workspaceRoot), - findCustomJestConfig(context.workspaceRoot), - ]); - - // Warn if a custom Jest configuration is found. We won't use it, so if a developer is trying to use a custom config, this hopefully - // makes a better experience than silently ignoring the configuration. - // Ideally, this would be a hard error. However a Jest config could exist for testing other files in the workspace outside of Angular - // CLI, so we likely can't produce a hard error in this situation without an opt-out. - if (customConfig) { - context.logger.warn( - 'A custom Jest config was found, but this is not supported by `@angular-devkit/build-angular:jest` and will be' + - ` ignored: ${customConfig}. This is an experiment to see if completely abstracting away Jest's configuration is viable. Please` + - ` consider if your use case can be met without directly modifying the Jest config. If this is a major obstacle for your use` + - ` case, please post it in this issue so we can collect feedback and evaluate: https://github.com/angular/angular-cli/issues/25434.`, - ); - } - - // Build all the test files. - const jestGlobal = path.join(__dirname, 'jest-global.mjs'); - const initTestBed = path.join(__dirname, 'init-test-bed.mjs'); - const buildResult = await first( - buildApplicationInternal( - { - // Build all the test files and also the `jest-global` and `init-test-bed` scripts. - entryPoints: new Set([...testFiles, jestGlobal, initTestBed]), - tsConfig: options.tsConfig, - polyfills: options.polyfills ?? ['zone.js', 'zone.js/testing'], - outputPath: testOut, - aot: options.aot, - index: false, - outputHashing: OutputHashing.None, - outExtension: 'mjs', // Force native ESM. - optimization: false, - sourceMap: { - scripts: true, - styles: false, - vendor: false, - }, - }, - context, - ), - ); - if (buildResult.kind === ResultKind.Failure) { - return { success: false }; - } else if (buildResult.kind !== ResultKind.Full) { - return { - success: false, - error: 'A full build result is required from the application builder.', - }; - } - - // Write test files - await writeTestFiles(buildResult.files, testOut); - - // Execute Jest on the built output directory. - const jestProc = execFile(process.execPath, [ - '--experimental-vm-modules', - jest, - - `--rootDir=${testOut}`, - `--config=${path.join(__dirname, 'jest.config.mjs')}`, - '--testEnvironment=jsdom', - - // TODO(dgp1130): Enable cache once we have a mechanism for properly clearing / disabling it. - '--no-cache', - - // Run basically all files in the output directory, any excluded files were already dropped by the build. - `--testMatch="/**/*.mjs"`, - - // Load polyfills and initialize the environment before executing each test file. - // IMPORTANT: Order matters here. - // First, we execute `jest-global.mjs` to initialize the `jest` global variable. - // Second, we execute user polyfills, including `zone.js` and `zone.js/testing`. This is dependent on the Jest global so it can patch - // the environment for fake async to work correctly. - // Third, we initialize `TestBed`. This is dependent on fake async being set up correctly beforehand. - `--setupFilesAfterEnv="/jest-global.mjs"`, - ...(options.polyfills?.length ? [`--setupFilesAfterEnv="/polyfills.mjs"`] : []), - `--setupFilesAfterEnv="/init-test-bed.mjs"`, - - // Don't run any infrastructure files as tests, they are manually loaded where needed. - `--testPathIgnorePatterns="/jest-global\\.mjs"`, - ...(options.polyfills ? [`--testPathIgnorePatterns="/polyfills\\.mjs"`] : []), - `--testPathIgnorePatterns="/init-test-bed\\.mjs"`, - - // Skip shared chunks, as they are not entry points to tests. - `--testPathIgnorePatterns="/chunk-.*\\.mjs"`, - - // Optionally enable color. - ...(colors.enabled ? ['--colors'] : []), - ]); - - // Stream test output to the terminal. - jestProc.child.stdout?.on('data', (chunk) => { - context.logger.info(chunk); - }); - jestProc.child.stderr?.on('data', (chunk) => { - // Write to stderr directly instead of `context.logger.error(chunk)` because the logger will overwrite Jest's coloring information. - process.stderr.write(chunk); - }); - - try { - await jestProc; - } catch (error) { - // No need to propagate error message, already piped to terminal output. - // TODO(dgp1130): Handle process spawning failures. - return { success: false }; - } - - return { success: true }; - }, -); - -/** Returns the first item yielded by the given generator and cancels the execution. */ -async function first(generator: AsyncIterable): Promise { - for await (const value of generator) { - return value; - } - - throw new Error('Expected generator to emit at least once.'); -} - -/** Safely resolves the given Node module string. */ -function resolveModule(module: string): string | undefined { - try { - return require.resolve(module); - } catch { - return undefined; - } -} - -/** Returns whether or not the provided directory includes a Jest configuration file. */ -async function findCustomJestConfig(dir: string): Promise { - const entries = await fs.readdir(dir, { withFileTypes: true }); - - // Jest supports many file extensions (`js`, `ts`, `cjs`, `cts`, `json`, etc.) Just look - // for anything with that prefix. - const config = entries.find((entry) => entry.isFile() && entry.name.startsWith('jest.config.')); - if (config) { - return path.join(dir, config.name); - } - - // Jest also supports a `jest` key in `package.json`, look for a config there. - const packageJsonPath = path.join(dir, 'package.json'); - let packageJson: string | undefined; - try { - packageJson = await fs.readFile(packageJsonPath, 'utf8'); - } catch { - return undefined; // No package.json, therefore no Jest configuration in it. - } - - const json = JSON.parse(packageJson) as { jest?: unknown }; - if ('jest' in json) { - return packageJsonPath; - } - - return undefined; -} diff --git a/packages/angular_devkit/build_angular/src/builders/jest/init-test-bed.mjs b/packages/angular_devkit/build_angular/src/builders/jest/init-test-bed.mjs deleted file mode 100644 index 2a9913b70363..000000000000 --- a/packages/angular_devkit/build_angular/src/builders/jest/init-test-bed.mjs +++ /dev/null @@ -1,24 +0,0 @@ -/** - * @license - * Copyright Google LLC All Rights Reserved. - * - * Use of this source code is governed by an MIT-style license that can be - * found in the LICENSE file at https://angular.dev/license - */ - -// TODO(dgp1130): These imports likely don't resolve in stricter package environments like `pnpm`, since they are resolved relative to -// `@angular-devkit/build-angular` rather than the user's workspace. Should look into virtual modules to support those use cases. - -import { NgModule, provideZoneChangeDetection } from '@angular/core'; -import { getTestBed } from '@angular/core/testing'; -import { BrowserTestingModule, platformBrowserTesting } from '@angular/platform-browser/testing'; - -@NgModule({ - providers: [typeof window.Zone !== 'undefined' ? provideZoneChangeDetection() : []], -}) -class TestModule {} - -getTestBed().initTestEnvironment([BrowserTestingModule, TestModule], platformBrowserTesting(), { - errorOnUnknownElements: true, - errorOnUnknownProperties: true, -}); diff --git a/packages/angular_devkit/build_angular/src/builders/jest/jest-global.mjs b/packages/angular_devkit/build_angular/src/builders/jest/jest-global.mjs deleted file mode 100644 index 40b8135b4e85..000000000000 --- a/packages/angular_devkit/build_angular/src/builders/jest/jest-global.mjs +++ /dev/null @@ -1,19 +0,0 @@ -/** - * @license - * Copyright Google LLC All Rights Reserved. - * - * Use of this source code is governed by an MIT-style license that can be - * found in the LICENSE file at https://angular.dev/license - */ - -/** - * @fileoverview Zone.js requires the `jest` global to be initialized in order to know that it must patch the environment to support Jest - * execution. When running ESM code, Jest does _not_ inject the global `jest` symbol, so Zone.js would not normally know it is running - * within Jest as users are supposed to import from `@jest/globals` or use `import.meta.jest`. Zone.js is not currently aware of this, so we - * manually set this global to get Zone.js to run correctly. - * - * TODO(dgp1130): Update Zone.js to directly support Jest ESM executions so we can drop this. - */ - -// eslint-disable-next-line no-undef -globalThis.jest = import.meta.jest; diff --git a/packages/angular_devkit/build_angular/src/builders/jest/jest.config.mjs b/packages/angular_devkit/build_angular/src/builders/jest/jest.config.mjs deleted file mode 100644 index 44b53d8003fc..000000000000 --- a/packages/angular_devkit/build_angular/src/builders/jest/jest.config.mjs +++ /dev/null @@ -1,11 +0,0 @@ -/** - * @license - * Copyright Google LLC All Rights Reserved. - * - * Use of this source code is governed by an MIT-style license that can be - * found in the LICENSE file at https://angular.dev/license - */ - -// Empty config file, everything is specified via CLI options right now. -// This file is used just so Jest doesn't accidentally inherit a custom user-specified Jest config. -export default {}; diff --git a/packages/angular_devkit/build_angular/src/builders/jest/options.ts b/packages/angular_devkit/build_angular/src/builders/jest/options.ts deleted file mode 100644 index d0298c13a74a..000000000000 --- a/packages/angular_devkit/build_angular/src/builders/jest/options.ts +++ /dev/null @@ -1,34 +0,0 @@ -/** - * @license - * Copyright Google LLC All Rights Reserved. - * - * Use of this source code is governed by an MIT-style license that can be - * found in the LICENSE file at https://angular.dev/license - */ - -import { Schema as JestBuilderSchema } from './schema'; - -/** - * Options supported for the Jest builder. The schema is an approximate - * representation of the options type, but this is a more precise version. - */ -export type JestBuilderOptions = JestBuilderSchema & { - include: string[]; - exclude: string[]; -}; - -/** - * Normalizes input options validated by the schema to a more precise and useful - * options type in {@link JestBuilderOptions}. - */ -export function normalizeOptions(schema: JestBuilderSchema): JestBuilderOptions { - return { - // Options with default values can't actually be null, even if the types say so. - /* eslint-disable @typescript-eslint/no-non-null-assertion */ - include: schema.include!, - exclude: schema.exclude!, - /* eslint-enable @typescript-eslint/no-non-null-assertion */ - - ...schema, - }; -} diff --git a/packages/angular_devkit/build_angular/src/builders/jest/schema.json b/packages/angular_devkit/build_angular/src/builders/jest/schema.json deleted file mode 100644 index 272a1a906597..000000000000 --- a/packages/angular_devkit/build_angular/src/builders/jest/schema.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema", - "title": "Jest browser schema for Build Facade.", - "description": "Jest target options", - "type": "object", - "properties": { - "include": { - "type": "array", - "items": { - "type": "string" - }, - "default": ["**/*.spec.ts"], - "description": "Globs of files to include, relative to project root." - }, - "exclude": { - "type": "array", - "items": { - "type": "string" - }, - "default": [], - "description": "Globs of files to exclude, relative to the project root." - }, - "tsConfig": { - "type": "string", - "description": "The name of the TypeScript configuration file." - }, - "polyfills": { - "type": "array", - "description": "A list of polyfills to include in the build. Can be a full path for a file, relative to the current workspace or module specifier. Example: 'zone.js'.", - "items": { - "type": "string", - "uniqueItems": true - }, - "default": [] - }, - "aot": { - "type": "boolean", - "description": "Run tests using Ahead of Time compilation.", - "default": false - } - }, - "additionalProperties": false, - "required": ["tsConfig"] -} diff --git a/packages/angular_devkit/build_angular/src/builders/jest/tests/options.ts b/packages/angular_devkit/build_angular/src/builders/jest/tests/options.ts deleted file mode 100644 index 33e21fbdd7d6..000000000000 --- a/packages/angular_devkit/build_angular/src/builders/jest/tests/options.ts +++ /dev/null @@ -1,16 +0,0 @@ -/** - * @license - * Copyright Google LLC All Rights Reserved. - * - * Use of this source code is governed by an MIT-style license that can be - * found in the LICENSE file at https://angular.dev/license - */ - -import { JestBuilderOptions } from '../options'; - -/** Default options to use for most tests. */ -export const BASE_OPTIONS = Object.freeze({ - include: ['**/*.spec.ts'], - exclude: [], - tsConfig: 'tsconfig.spec.json', -}); diff --git a/packages/angular_devkit/build_angular/src/builders/web-test-runner/builder-status-warnings.ts b/packages/angular_devkit/build_angular/src/builders/web-test-runner/builder-status-warnings.ts deleted file mode 100644 index 9ece57556005..000000000000 --- a/packages/angular_devkit/build_angular/src/builders/web-test-runner/builder-status-warnings.ts +++ /dev/null @@ -1,49 +0,0 @@ -/** - * @license - * Copyright Google LLC All Rights Reserved. - * - * Use of this source code is governed by an MIT-style license that can be - * found in the LICENSE file at https://angular.dev/license - */ - -import { BuilderContext } from '@angular-devkit/architect'; -import { Schema as WtrBuilderOptions } from './schema'; - -const UNSUPPORTED_OPTIONS: Array = [ - 'main', - 'assets', - 'scripts', - 'styles', - 'inlineStyleLanguage', - 'stylePreprocessorOptions', - 'sourceMap', - 'progress', - 'poll', - 'preserveSymlinks', - 'browsers', - 'codeCoverage', - 'codeCoverageExclude', - 'fileReplacements', - 'webWorkerTsConfig', - 'watch', -]; - -/** Logs a warning for any unsupported options specified. */ -export function logBuilderStatusWarnings(options: WtrBuilderOptions, ctx: BuilderContext) { - // Validate supported options - for (const unsupportedOption of UNSUPPORTED_OPTIONS) { - const value = (options as unknown as WtrBuilderOptions)[unsupportedOption]; - - if (value === undefined || value === false) { - continue; - } - if (Array.isArray(value) && value.length === 0) { - continue; - } - if (typeof value === 'object' && Object.keys(value).length === 0) { - continue; - } - - ctx.logger.warn(`The '${unsupportedOption}' option is not yet supported by this builder.`); - } -} diff --git a/packages/angular_devkit/build_angular/src/builders/web-test-runner/index.ts b/packages/angular_devkit/build_angular/src/builders/web-test-runner/index.ts deleted file mode 100644 index d900375221ff..000000000000 --- a/packages/angular_devkit/build_angular/src/builders/web-test-runner/index.ts +++ /dev/null @@ -1,206 +0,0 @@ -/** - * @license - * Copyright Google LLC All Rights Reserved. - * - * Use of this source code is governed by an MIT-style license that can be - * found in the LICENSE file at https://angular.dev/license - */ - -import { Result, ResultKind, buildApplicationInternal } from '@angular/build/private'; -import { BuilderContext, BuilderOutput, createBuilder } from '@angular-devkit/architect'; -import type * as WebTestRunner from '@web/test-runner'; -import { randomUUID } from 'node:crypto'; -import fs from 'node:fs/promises'; -import { createRequire } from 'node:module'; -import path from 'node:path'; -import { findTestFiles } from '../../utils/test-files'; -import { OutputHashing } from '../browser-esbuild/schema'; -import { logBuilderStatusWarnings } from './builder-status-warnings'; -import { WtrBuilderOptions, normalizeOptions } from './options'; -import { Schema } from './schema'; -import { writeTestFiles } from './write-test-files'; - -export default createBuilder( - async (schema: Schema, ctx: BuilderContext): Promise => { - ctx.logger.warn( - 'NOTE: The Web Test Runner builder is currently EXPERIMENTAL and will be removed in version 22.', - ); - - logBuilderStatusWarnings(schema, ctx); - - // Dynamic import `@web/test-runner` from the user's workspace. As an optional peer dep, it may not be installed - // and may not be resolvable from `@angular-devkit/build-angular`. - const require = createRequire(`${ctx.workspaceRoot}/`); - let wtr: typeof WebTestRunner; - try { - wtr = require('@web/test-runner'); - } catch { - return { - success: false, - // TODO(dgp1130): Display a more accurate message for non-NPM users. - error: - 'Web Test Runner is not installed, most likely you need to run `npm install @web/test-runner --save-dev` in your project.', - }; - } - - const options = normalizeOptions(schema); - - const testDir = path.join(ctx.workspaceRoot, 'dist/test-out', randomUUID()); - - // Parallelize startup work. - const [testFiles] = await Promise.all([ - // Glob for files to test. - findTestFiles(options.include, options.exclude, ctx.workspaceRoot), - // Clean build output path. - fs.rm(testDir, { recursive: true, force: true }), - ]); - - // Build the tests and abort on any build failure. - const buildOutput = await buildTests(testFiles, testDir, options, ctx); - if (buildOutput.kind === ResultKind.Failure) { - return { success: false }; - } else if (buildOutput.kind !== ResultKind.Full) { - return { - success: false, - error: 'A full build result is required from the application builder.', - }; - } - - // Write test files - await writeTestFiles(buildOutput.files, testDir); - - // Run the built tests. - return await runTests(wtr, testDir, options); - }, -); - -/** Build all the given test files and write the result to the given output path. */ -async function buildTests( - testFiles: ReadonlySet, - outputPath: string, - options: WtrBuilderOptions, - ctx: BuilderContext, -): Promise { - const entryPoints = new Set([ - ...testFiles, - 'jasmine-core/lib/jasmine-core/jasmine.js', - '@angular-devkit/build-angular/src/builders/web-test-runner/jasmine_runner.js', - ]); - - // Extract `zone.js/testing` to a separate entry point because it needs to be loaded after Jasmine. - const [polyfills, hasZoneTesting] = extractZoneTesting(options.polyfills); - if (hasZoneTesting) { - entryPoints.add('zone.js/testing'); - } - - // Build tests with `application` builder, using test files as entry points. - // Also bundle in Jasmine and the Jasmine runner script, which need to share chunked dependencies. - const buildOutput = await first( - buildApplicationInternal( - { - entryPoints, - tsConfig: options.tsConfig, - outputPath, - aot: options.aot, - index: false, - outputHashing: OutputHashing.None, - optimization: false, - externalDependencies: [ - // Resolved by `@web/test-runner` at runtime with dynamically generated code. - '@web/test-runner-core', - ], - sourceMap: { - scripts: true, - styles: true, - vendor: true, - }, - polyfills, - }, - ctx, - ), - ); - - return buildOutput; -} - -function extractZoneTesting( - polyfills: readonly string[], -): [polyfills: string[], hasZoneTesting: boolean] { - const polyfillsWithoutZoneTesting = polyfills.filter( - (polyfill) => polyfill !== 'zone.js/testing', - ); - const hasZoneTesting = polyfills.length !== polyfillsWithoutZoneTesting.length; - - return [polyfillsWithoutZoneTesting, hasZoneTesting]; -} - -/** Run Web Test Runner on the given directory of bundled JavaScript tests. */ -async function runTests( - wtr: typeof WebTestRunner, - testDir: string, - options: WtrBuilderOptions, -): Promise { - const testPagePath = path.resolve(__dirname, 'test_page.html'); - const testPage = await fs.readFile(testPagePath, 'utf8'); - - const runner = await wtr.startTestRunner({ - config: { - rootDir: testDir, - files: [ - `${testDir}/**/*.js`, - `!${testDir}/polyfills.js`, - `!${testDir}/chunk-*.js`, - `!${testDir}/jasmine.js`, - `!${testDir}/jasmine_runner.js`, - `!${testDir}/testing.js`, // `zone.js/testing` - ], - testFramework: { - config: { - defaultTimeoutInterval: 5_000, - }, - }, - nodeResolve: true, - port: 9876, - watch: options.watch ?? false, - - testRunnerHtml: (_testFramework, _config) => testPage, - }, - readCliArgs: false, - readFileConfig: false, - autoExitProcess: false, - }); - if (!runner) { - throw new Error('Failed to start Web Test Runner.'); - } - - // Wait for the tests to complete and stop the runner. - const passed = (await once(runner, 'finished')) as boolean; - await runner.stop(); - - // No need to return error messages because Web Test Runner already printed them to the console. - return { success: passed }; -} - -/** Returns the first item yielded by the given generator and cancels the execution. */ -async function first(generator: AsyncIterable): Promise { - for await (const value of generator) { - return value; - } - - throw new Error('Expected generator to emit at least once.'); -} - -/** Listens for a single emission of an event and returns the value emitted. */ -// eslint-disable-next-line @typescript-eslint/no-explicit-any -function once, EventKey extends string & keyof Map>( - emitter: WebTestRunner.EventEmitter, - event: EventKey, -): Promise { - return new Promise((resolve) => { - const onEmit = (arg: Map[EventKey]): void => { - emitter.off(event, onEmit); - resolve(arg); - }; - emitter.on(event, onEmit); - }); -} diff --git a/packages/angular_devkit/build_angular/src/builders/web-test-runner/jasmine_runner.js b/packages/angular_devkit/build_angular/src/builders/web-test-runner/jasmine_runner.js deleted file mode 100644 index 0775ec09b227..000000000000 --- a/packages/angular_devkit/build_angular/src/builders/web-test-runner/jasmine_runner.js +++ /dev/null @@ -1,91 +0,0 @@ -/** - * @license - * Copyright Google LLC All Rights Reserved. - * - * Use of this source code is governed by an MIT-style license that can be - * found in the LICENSE file at https://angular.dev/license - */ - -import { NgModule } from '@angular/core'; -import { getTestBed } from '@angular/core/testing'; -import { BrowserTestingModule, platformBrowserTesting } from '@angular/platform-browser/testing'; -import { - getConfig, - sessionFailed, - sessionFinished, - sessionStarted, -} from '@web/test-runner-core/browser/session.js'; - -/** Executes Angular Jasmine tests in the given environment and reports the results to Web Test Runner. */ -export async function runJasmineTests(jasmineEnv) { - const allSpecs = []; - const failedSpecs = []; - - jasmineEnv.addReporter({ - specDone(result) { - const expectations = [...result.passedExpectations, ...result.failedExpectations]; - allSpecs.push(...expectations.map((e) => ({ name: e.fullName, passed: e.passed }))); - - for (const e of result.failedExpectations) { - const message = `${result.fullName}\n${e.message}\n${e.stack}`; - // eslint-disable-next-line no-console - console.error(message); - failedSpecs.push({ - message, - name: e.fullName, - stack: e.stack, - expected: e.expected, - actual: e.actual, - }); - } - }, - - async jasmineDone(result) { - // eslint-disable-next-line no-console - console.log(`Tests ${result.overallStatus}!`); - await sessionFinished({ - passed: result.overallStatus === 'passed', - errors: failedSpecs, - testResults: { - name: '', - suites: [], - tests: allSpecs, - }, - }); - }, - }); - - await sessionStarted(); - - // Web Test Runner uses a different HTML page for every test, so we only get one `testFile` for the single `*.js` file we need to execute. - const { testFile, testFrameworkConfig } = await getConfig(); - const config = { defaultTimeoutInterval: 60_000, ...(testFrameworkConfig ?? {}) }; - - // eslint-disable-next-line no-undef - jasmine.DEFAULT_TIMEOUT_INTERVAL = config.defaultTimeoutInterval; - - @NgModule({ - providers: [typeof window.Zone !== 'undefined' ? provideZoneChangeDetection() : []], - }) - class TestModule {} - - // Initialize `TestBed` automatically for users. This assumes we already evaluated `zone.js/testing`. - getTestBed().initTestEnvironment([BrowserTestingModule, TestModule], platformBrowserTesting(), { - errorOnUnknownElements: true, - errorOnUnknownProperties: true, - }); - - // Load the test file and evaluate it. - try { - // eslint-disable-next-line no-undef - await import(new URL(testFile, document.baseURI).href); - - // Execute the test functions. - // eslint-disable-next-line no-undef - jasmineEnv.execute(); - } catch (err) { - // eslint-disable-next-line no-console - console.error(err); - await sessionFailed(err); - } -} diff --git a/packages/angular_devkit/build_angular/src/builders/web-test-runner/options.ts b/packages/angular_devkit/build_angular/src/builders/web-test-runner/options.ts deleted file mode 100644 index 881ade56d5bf..000000000000 --- a/packages/angular_devkit/build_angular/src/builders/web-test-runner/options.ts +++ /dev/null @@ -1,42 +0,0 @@ -/** - * @license - * Copyright Google LLC All Rights Reserved. - * - * Use of this source code is governed by an MIT-style license that can be - * found in the LICENSE file at https://angular.dev/license - */ - -import { Schema as WtrBuilderSchema } from './schema'; - -/** - * Options supported for the Web Test Runner builder. The schema is an approximate - * representation of the options type, but this is a more precise version. - */ -export type WtrBuilderOptions = Overwrite< - WtrBuilderSchema, - { - include: string[]; - exclude: string[]; - polyfills: string[]; - } ->; - -type Overwrite = Omit & Overrides; - -/** - * Normalizes input options validated by the schema to a more precise and useful - * options type in {@link WtrBuilderOptions}. - */ -export function normalizeOptions(schema: WtrBuilderSchema): WtrBuilderOptions { - return { - ...schema, - - // Options with default values can't actually be null, even if the types say so. - /* eslint-disable @typescript-eslint/no-non-null-assertion */ - include: schema.include!, - exclude: schema.exclude!, - /* eslint-enable @typescript-eslint/no-non-null-assertion */ - - polyfills: typeof schema.polyfills === 'string' ? [schema.polyfills] : schema.polyfills ?? [], - }; -} diff --git a/packages/angular_devkit/build_angular/src/builders/web-test-runner/options_spec.ts b/packages/angular_devkit/build_angular/src/builders/web-test-runner/options_spec.ts deleted file mode 100644 index d7514fb6d7f4..000000000000 --- a/packages/angular_devkit/build_angular/src/builders/web-test-runner/options_spec.ts +++ /dev/null @@ -1,64 +0,0 @@ -/** - * @license - * Copyright Google LLC All Rights Reserved. - * - * Use of this source code is governed by an MIT-style license that can be - * found in the LICENSE file at https://angular.dev/license - */ - -import { normalizeOptions } from './options'; -import { Schema as WtrBuilderSchema } from './schema'; - -describe('options', () => { - describe('normalizeOptions()', () => { - const GOLDEN_SCHEMA: WtrBuilderSchema = { - include: ['**/included/*.ts'], - exclude: ['**/excluded/*.ts'], - tsConfig: './tsconfig.json', - }; - - it('requires include and exclude properties', () => { - const options = normalizeOptions({ - ...GOLDEN_SCHEMA, - include: ['**/*.ts'], - exclude: ['**/*.d.ts'], - }); - - expect(options).toContain({ - include: ['**/*.ts'], - exclude: ['**/*.d.ts'], - }); - - // @ts-expect-error `undefined` should not be in the `include` type. - options.include = undefined; - - // @ts-expect-error `undefined` should not be in the `exclude` type. - options.exclude = undefined; - }); - - it('normalizes polyfills', () => { - const stringPolyfillOptions = normalizeOptions({ - ...GOLDEN_SCHEMA, - polyfills: './polyfills.ts', - }); - - expect(stringPolyfillOptions.polyfills).toEqual(['./polyfills.ts']); - - const arrayPolyfillOptions = normalizeOptions({ - ...GOLDEN_SCHEMA, - polyfills: ['./first.ts', './second.ts'], - }); - - expect(arrayPolyfillOptions.polyfills).toEqual(['./first.ts', './second.ts']); - }); - - it('passes through other options', () => { - const options = normalizeOptions({ - ...GOLDEN_SCHEMA, - assets: ['./path/to/file.txt'], - }); - - expect(options.assets).toEqual(['./path/to/file.txt']); - }); - }); -}); diff --git a/packages/angular_devkit/build_angular/src/builders/web-test-runner/schema.json b/packages/angular_devkit/build_angular/src/builders/web-test-runner/schema.json deleted file mode 100644 index c922e768849b..000000000000 --- a/packages/angular_devkit/build_angular/src/builders/web-test-runner/schema.json +++ /dev/null @@ -1,297 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema", - "title": "Web Test Runner Target", - "description": "Web Test Runner target options for Build Facade.", - "type": "object", - "properties": { - "main": { - "type": "string", - "description": "The name of the main entry-point file." - }, - "tsConfig": { - "type": "string", - "description": "The name of the TypeScript configuration file." - }, - "polyfills": { - "description": "Polyfills to be included in the build.", - "oneOf": [ - { - "type": "array", - "description": "A list of polyfills to include in the build. Can be a full path for a file, relative to the current workspace or module specifier. Example: 'zone.js'.", - "items": { - "type": "string", - "uniqueItems": true - }, - "default": [] - }, - { - "type": "string", - "description": "The full path for the polyfills file, relative to the current workspace or a module specifier. Example: 'zone.js'." - } - ] - }, - "assets": { - "type": "array", - "description": "List of static application assets.", - "default": [], - "items": { - "$ref": "#/definitions/assetPattern" - } - }, - "scripts": { - "description": "Global scripts to be included in the build.", - "type": "array", - "default": [], - "items": { - "oneOf": [ - { - "type": "object", - "properties": { - "input": { - "type": "string", - "description": "The file to include.", - "pattern": "\\.[cm]?jsx?$" - }, - "bundleName": { - "type": "string", - "pattern": "^[\\w\\-.]*$", - "description": "The bundle name for this extra entry point." - }, - "inject": { - "type": "boolean", - "description": "If the bundle will be referenced in the HTML file.", - "default": true - } - }, - "additionalProperties": false, - "required": ["input"] - }, - { - "type": "string", - "description": "The file to include.", - "pattern": "\\.[cm]?jsx?$" - } - ] - } - }, - "styles": { - "description": "Global styles to be included in the build.", - "type": "array", - "default": [], - "items": { - "oneOf": [ - { - "type": "object", - "properties": { - "input": { - "type": "string", - "description": "The file to include.", - "pattern": "\\.(?:css|scss|sass|less)$" - }, - "bundleName": { - "type": "string", - "pattern": "^[\\w\\-.]*$", - "description": "The bundle name for this extra entry point." - }, - "inject": { - "type": "boolean", - "description": "If the bundle will be referenced in the HTML file.", - "default": true - } - }, - "additionalProperties": false, - "required": ["input"] - }, - { - "type": "string", - "description": "The file to include.", - "pattern": "\\.(?:css|scss|sass|less)$" - } - ] - } - }, - "inlineStyleLanguage": { - "description": "The stylesheet language to use for the application's inline component styles.", - "type": "string", - "default": "css", - "enum": ["css", "less", "sass", "scss"] - }, - "stylePreprocessorOptions": { - "description": "Options to pass to style preprocessors", - "type": "object", - "properties": { - "includePaths": { - "description": "Paths to include. Paths will be resolved to workspace root.", - "type": "array", - "items": { - "type": "string" - }, - "default": [] - } - }, - "additionalProperties": false - }, - "include": { - "type": "array", - "items": { - "type": "string" - }, - "default": ["**/*.spec.ts"], - "description": "Globs of files to include, relative to project root. \nThere are 2 special cases:\n - when a path to directory is provided, all spec files ending \".spec.@(ts|tsx)\" will be included\n - when a path to a file is provided, and a matching spec file exists it will be included instead." - }, - "exclude": { - "type": "array", - "items": { - "type": "string" - }, - "default": [], - "description": "Globs of files to exclude, relative to the project root." - }, - "sourceMap": { - "description": "Output source maps for scripts and styles. For more information, see https://angular.dev/reference/configs/workspace-config#source-map-configuration.", - "default": true, - "oneOf": [ - { - "type": "object", - "properties": { - "scripts": { - "type": "boolean", - "description": "Output source maps for all scripts.", - "default": true - }, - "styles": { - "type": "boolean", - "description": "Output source maps for all styles.", - "default": true - }, - "vendor": { - "type": "boolean", - "description": "Resolve vendor packages source maps.", - "default": false - } - }, - "additionalProperties": false - }, - { - "type": "boolean" - } - ] - }, - "progress": { - "type": "boolean", - "description": "Log progress to the console while building.", - "default": true - }, - "watch": { - "type": "boolean", - "description": "Run build when files change." - }, - "poll": { - "type": "number", - "description": "Enable and define the file watching poll time period in milliseconds." - }, - "preserveSymlinks": { - "type": "boolean", - "description": "Do not use the real path when resolving modules. If unset then will default to `true` if NodeJS option --preserve-symlinks is set." - }, - "browsers": { - "type": "string", - "description": "Override which browsers tests are run against." - }, - "codeCoverage": { - "type": "boolean", - "description": "Output a code coverage report.", - "default": false - }, - "codeCoverageExclude": { - "type": "array", - "description": "Globs to exclude from code coverage.", - "items": { - "type": "string" - }, - "default": [] - }, - "fileReplacements": { - "description": "Replace compilation source files with other compilation source files in the build.", - "type": "array", - "items": { - "oneOf": [ - { - "type": "object", - "properties": { - "src": { - "type": "string" - }, - "replaceWith": { - "type": "string" - } - }, - "additionalProperties": false, - "required": ["src", "replaceWith"] - }, - { - "type": "object", - "properties": { - "replace": { - "type": "string" - }, - "with": { - "type": "string" - } - }, - "additionalProperties": false, - "required": ["replace", "with"] - } - ] - }, - "default": [] - }, - "webWorkerTsConfig": { - "type": "string", - "description": "TypeScript configuration for Web Worker modules." - }, - "aot": { - "type": "boolean", - "description": "Run tests using Ahead of Time compilation.", - "default": false - } - }, - "additionalProperties": false, - "required": ["tsConfig"], - "definitions": { - "assetPattern": { - "oneOf": [ - { - "type": "object", - "properties": { - "glob": { - "type": "string", - "description": "The pattern to match." - }, - "input": { - "type": "string", - "description": "The input directory path in which to apply 'glob'. Defaults to the project root." - }, - "output": { - "type": "string", - "default": "", - "description": "Absolute path within the output." - }, - "ignore": { - "description": "An array of globs to ignore.", - "type": "array", - "items": { - "type": "string" - } - } - }, - "additionalProperties": false, - "required": ["glob", "input"] - }, - { - "type": "string" - } - ] - } - } -} diff --git a/packages/angular_devkit/build_angular/src/builders/web-test-runner/test_page.html b/packages/angular_devkit/build_angular/src/builders/web-test-runner/test_page.html deleted file mode 100644 index 9cff64dccccc..000000000000 --- a/packages/angular_devkit/build_angular/src/builders/web-test-runner/test_page.html +++ /dev/null @@ -1,40 +0,0 @@ - - - - - Unit tests - - - - - diff --git a/packages/angular_devkit/build_angular/src/builders/web-test-runner/write-test-files.ts b/packages/angular_devkit/build_angular/src/builders/web-test-runner/write-test-files.ts deleted file mode 100644 index 268be97f0fe0..000000000000 --- a/packages/angular_devkit/build_angular/src/builders/web-test-runner/write-test-files.ts +++ /dev/null @@ -1,39 +0,0 @@ -/** - * @license - * Copyright Google LLC All Rights Reserved. - * - * Use of this source code is governed by an MIT-style license that can be - * found in the LICENSE file at https://angular.dev/license - */ - -import { BuildOutputFileType } from '@angular/build'; -import { ResultFile, emitFilesToDisk } from '@angular/build/private'; -import fs from 'node:fs/promises'; -import path from 'node:path'; - -export async function writeTestFiles(files: Record, testDir: string) { - const directoryExists = new Set(); - // Writes the test related output files to disk and ensures the containing directories are present - await emitFilesToDisk(Object.entries(files), async ([filePath, file]) => { - if (file.type !== BuildOutputFileType.Browser && file.type !== BuildOutputFileType.Media) { - return; - } - - const fullFilePath = path.join(testDir, filePath); - - // Ensure output subdirectories exist - const fileBasePath = path.dirname(fullFilePath); - if (fileBasePath && !directoryExists.has(fileBasePath)) { - await fs.mkdir(fileBasePath, { recursive: true }); - directoryExists.add(fileBasePath); - } - - if (file.origin === 'memory') { - // Write file contents - await fs.writeFile(fullFilePath, file.contents); - } else { - // Copy file contents - await fs.copyFile(file.inputPath, fullFilePath, fs.constants.COPYFILE_FICLONE); - } - }); -} diff --git a/packages/angular_devkit/build_angular/src/utils/test-files.ts b/packages/angular_devkit/build_angular/src/utils/test-files.ts deleted file mode 100644 index 1276f0347f4b..000000000000 --- a/packages/angular_devkit/build_angular/src/utils/test-files.ts +++ /dev/null @@ -1,37 +0,0 @@ -/** - * @license - * Copyright Google LLC All Rights Reserved. - * - * Use of this source code is governed by an MIT-style license that can be - * found in the LICENSE file at https://angular.dev/license - */ - -import { GlobOptions, glob as globFn } from 'tinyglobby'; - -/** - * Finds all test files in the project. - * - * @param options The builder options describing where to find tests. - * @param workspaceRoot The path to the root directory of the workspace. - * @param glob A promisified implementation of the `glob` module. Only intended for - * testing purposes. - * @returns A set of all test files in the project. - */ -export async function findTestFiles( - include: string[], - exclude: string[], - workspaceRoot: string, - glob: typeof globFn = globFn, -): Promise> { - const globOptions: GlobOptions = { - cwd: workspaceRoot, - ignore: ['node_modules/**'].concat(exclude), - braceExpansion: false, // Do not expand `a{b,c}` to `ab,ac`. - extglob: false, // Disable "extglob" patterns. - }; - - const included = await Promise.all(include.map((pattern) => glob(pattern, globOptions))); - - // Flatten and deduplicate any files found in multiple include patterns. - return new Set(included.flat()); -} diff --git a/packages/angular_devkit/build_angular/src/utils/test-files_spec.ts b/packages/angular_devkit/build_angular/src/utils/test-files_spec.ts deleted file mode 100644 index 9902aa47142a..000000000000 --- a/packages/angular_devkit/build_angular/src/utils/test-files_spec.ts +++ /dev/null @@ -1,151 +0,0 @@ -/** - * @license - * Copyright Google LLC All Rights Reserved. - * - * Use of this source code is governed by an MIT-style license that can be - * found in the LICENSE file at https://angular.dev/license - */ - -// eslint-disable-next-line import/no-extraneous-dependencies -import { promises as fs } from 'node:fs'; -import * as path from 'node:path'; -import { glob as realGlob } from 'tinyglobby'; -import { findTestFiles } from './test-files'; - -describe('test-files', () => { - describe('findTestFiles()', () => { - let tempDir!: string; - - beforeEach(async () => { - tempDir = await fs.mkdtemp('angular-cli-jest-builder-test-files-'); - }); - - afterEach(async () => { - await fs.rm(tempDir, { recursive: true }); - }); - - it('returns all the test files in the project', async () => { - await fs.writeFile(path.join(tempDir, 'foo.spec.ts'), ''); - await fs.mkdir(path.join(tempDir, 'nested')); - await fs.writeFile(path.join(tempDir, 'nested', 'bar.spec.ts'), ''); - - const testFiles = await findTestFiles( - ['**/*.spec.ts'] /* include */, - [] /* exclude */, - tempDir, - ); - - expect(testFiles).toEqual(new Set(['foo.spec.ts', path.join('nested', 'bar.spec.ts')])); - }); - - it('excludes `node_modules/` and files from input options', async () => { - await fs.writeFile(path.join(tempDir, 'foo.spec.ts'), ''); - await fs.writeFile(path.join(tempDir, 'bar.ignored.spec.ts'), ''); - await fs.mkdir(path.join(tempDir, 'node_modules', 'dep'), { recursive: true }); - await fs.writeFile(path.join(tempDir, 'node_modules', 'dep', 'baz.spec.ts'), ''); - - const testFiles = await findTestFiles( - ['**/*.spec.ts'] /* include */, - ['**/*.ignored.spec.ts'] /* exclude */, - tempDir, - ); - - expect(testFiles).toEqual(new Set(['foo.spec.ts'])); - }); - - it('finds files in multiple globs', async () => { - await fs.writeFile(path.join(tempDir, 'foo.spec.ts'), ''); - await fs.writeFile(path.join(tempDir, 'bar.test.ts'), ''); - await fs.writeFile(path.join(tempDir, 'foo.ignored.spec.ts'), ''); - await fs.writeFile(path.join(tempDir, 'bar.ignored.test.ts'), ''); - - await fs.mkdir(path.join(tempDir, 'node_modules', 'dep'), { recursive: true }); - await fs.writeFile(path.join(tempDir, 'node_modules', 'dep', 'baz.spec.ts'), ''); - await fs.writeFile(path.join(tempDir, 'node_modules', 'dep', 'baz.test.ts'), ''); - - const testFiles = await findTestFiles( - ['**/*.spec.ts', '**/*.test.ts'] /* include */, - // Exclude should be applied to all `glob()` executions. - ['**/*.ignored.*.ts'] /* exclude */, - tempDir, - ); - - expect(testFiles).toEqual(new Set(['foo.spec.ts', 'bar.test.ts'])); - }); - - it('is constrained to the workspace root', async () => { - await fs.mkdir(path.join(tempDir, 'nested')); - await fs.writeFile(path.join(tempDir, 'foo.spec.ts'), ''); - await fs.writeFile(path.join(tempDir, 'nested', 'bar.spec.ts'), ''); - - const testFiles = await findTestFiles( - ['**/*.spec.ts'] /* include */, - [] /* exclude */, - path.join(tempDir, 'nested'), - ); - - expect(testFiles).toEqual(new Set(['bar.spec.ts'])); - }); - - it('throws if any `glob` invocation fails', async () => { - const err = new Error('Eww, I stepped in a glob.'); - const glob = jasmine - .createSpy('glob', realGlob) - .and.returnValues( - Promise.resolve(['foo.spec.ts']), - Promise.reject(err), - Promise.resolve(['bar.test.ts']), - ); - - await expectAsync( - findTestFiles( - ['*.spec.ts', '*.stuff.ts', '*.test.ts'] /* include */, - [] /* exclude */, - tempDir, - // eslint-disable-next-line @typescript-eslint/no-explicit-any - glob as any, - ), - ).toBeRejectedWith(err); - }); - - it('disables brace expansion', async () => { - await fs.writeFile(path.join(tempDir, 'foo.spec.ts'), ''); - await fs.writeFile(path.join(tempDir, 'bar.spec.ts'), ''); - - const testFiles = await findTestFiles( - ['{foo,bar}.spec.ts'] /* include */, - [] /* exclude */, - tempDir, - ); - - expect(testFiles).toEqual(new Set()); - }); - - it('disables `extglob` features', async () => { - await fs.writeFile(path.join(tempDir, 'foo.spec.ts'), ''); - await fs.writeFile(path.join(tempDir, 'bar.spec.ts'), ''); - - const testFiles = await findTestFiles( - ['+(foo|bar).spec.ts'] /* include */, - [] /* exclude */, - tempDir, - ); - - expect(testFiles).toEqual(new Set()); - }); - - it('ignores directories', async () => { - await fs.mkdir(path.join(tempDir, 'foo.spec.ts')); - await fs.mkdir(path.join(tempDir, 'bar.spec.ts')); - await fs.writeFile(path.join(tempDir, 'bar.spec.ts', 'baz.spec.ts'), ''); - - const testFiles = await findTestFiles( - ['**/*.spec.ts'] /* include */, - [] /* exclude */, - tempDir, - ); - - expect(testFiles).toEqual(new Set([path.join('bar.spec.ts', 'baz.spec.ts')])); - }); - }); -}); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index b320f1708085..bdda23ac2fbd 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -725,9 +725,6 @@ importers: '@angular/ssr': specifier: workspace:* version: link:../../angular/ssr - '@web/test-runner': - specifier: 0.20.2 - version: 0.20.2(bufferutil@4.1.0) browser-sync: specifier: 3.0.4 version: 3.0.4(bufferutil@4.1.0)(utf-8-validate@6.0.6) @@ -2143,9 +2140,6 @@ packages: engines: {node: '>=6'} hasBin: true - '@hapi/bourne@3.0.0': - resolution: {integrity: sha512-Waj1cwPXJDucOib4a3bAISsKJVb15MKi9IvmTI/7ssVEm6sywXGjVJDhl6/umt1pK1ZS7PacXU3A1PmFKHEZ2w==} - '@harperfast/extended-iterable@1.0.3': resolution: {integrity: sha512-sSAYhQca3rDWtQUHSAPeO7axFIUJOI6hn1gjRC5APVE1a90tuyT8f5WIgRsFhhWA7htNkju2veB9eWL6YHi/Lw==} @@ -3017,11 +3011,6 @@ packages: '@protobufjs/utf8@1.1.0': resolution: {integrity: sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==} - '@puppeteer/browsers@2.12.1': - resolution: {integrity: sha512-fXa6uXLxfslBlus3MEpW8S6S9fe5RwmAE5Gd8u3krqOwnkZJV3/lQJiY3LaFdTctLLqJtyMgEUGkbDnRNf6vbQ==} - engines: {node: '>=18'} - hasBin: true - '@rolldown/binding-android-arm64@1.0.0-rc.5': resolution: {integrity: sha512-zCEmUrt1bggwgBgeKLxNj217J1OrChrp3jJt24VK9jAharSTeVaHODNL+LpcQVhRz+FktYWfT9cjo5oZ99ZLpg==} engines: {node: ^20.19.0 || >=22.12.0} @@ -3133,15 +3122,6 @@ packages: rollup: optional: true - '@rollup/plugin-node-resolve@15.3.1': - resolution: {integrity: sha512-tgg6b91pAybXHJQMAAwW9VuWBO6Thi+q7BCNARLwSqlmsHz0XYURtGvh/AuwSADXSI4h/2uHbs7s4FzlZDGSGA==} - engines: {node: '>=14.0.0'} - peerDependencies: - rollup: ^2.78.0||^3.0.0||^4.0.0 - peerDependenciesMeta: - rollup: - optional: true - '@rollup/plugin-node-resolve@16.0.3': resolution: {integrity: sha512-lUYM3UBGuM93CnMPG1YocWu7X802BrNF3jW2zny5gQyLQgRFJhV1Sq0Zi74+dh/6NBx1DxFC4b4GXg9wUCG5Qg==} engines: {node: '>=14.0.0'} @@ -3368,9 +3348,6 @@ packages: resolution: {integrity: sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==} engines: {node: '>= 10'} - '@tootallnate/quickjs-emscripten@0.23.0': - resolution: {integrity: sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA==} - '@tsconfig/node10@1.0.12': resolution: {integrity: sha512-UCYBaeFvM11aU2y3YPZ//O5Rhj+xKyzy7mvcIoAjASbigy8mHMryP5cK7dgjlz2hWxh1g5pLw084E0a/wlUSFQ==} @@ -3394,12 +3371,6 @@ packages: '@tybys/wasm-util@0.10.1': resolution: {integrity: sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==} - '@types/accepts@1.3.7': - resolution: {integrity: sha512-Pay9fq2lM2wXPWbteBsRAGiWH2hig4ZE2asK+mm7kUzlxRTfL961rj89I6zV/E3PcIkDqyuBEcMxFT7rccugeQ==} - - '@types/babel__code-frame@7.27.0': - resolution: {integrity: sha512-Dwlo+LrxDx/0SpfmJ/BKveHf7QXWvLBLc+x03l5sbzykj3oB9nHygCpSECF1a+s+QIxbghe+KHqC90vGtxLRAA==} - '@types/babel__core@7.20.5': resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} @@ -3430,33 +3401,15 @@ packages: '@types/cli-progress@3.11.6': resolution: {integrity: sha512-cE3+jb9WRlu+uOSAugewNpITJDt1VF8dHOopPO4IABFc3SXYL5WE/+PTz/FCdZRRfIujiWW3n3aMbv1eIGVRWA==} - '@types/co-body@6.1.3': - resolution: {integrity: sha512-UhuhrQ5hclX6UJctv5m4Rfp52AfG9o9+d9/HwjxhVB5NjXxr5t9oKgJxN8xRHgr35oo8meUEHUPFWiKg6y71aA==} - - '@types/command-line-args@5.2.3': - resolution: {integrity: sha512-uv0aG6R0Y8WHZLTamZwtfsDLVRnOa+n+n5rEvFWL5Na5gZ8V2Teab/duDPFzIIIhs9qizDpcavCusCLJZu62Kw==} - '@types/connect-history-api-fallback@1.5.4': resolution: {integrity: sha512-n6Cr2xS1h4uAulPRdlw6Jl6s1oG8KrVilPN2yUITEs+K48EzMJJ3W1xy8K5eWuFvjp3R74AOIGSmp2UfBJ8HFw==} '@types/connect@3.4.38': resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==} - '@types/content-disposition@0.5.9': - resolution: {integrity: sha512-8uYXI3Gw35MhiVYhG3s295oihrxRyytcRHjSjqnqZVDDy/xcGBRny7+Xj1Wgfhv5QzRtN2hB2dVRBUX9XW3UcQ==} - - '@types/convert-source-map@2.0.3': - resolution: {integrity: sha512-ag0BfJLZf6CQz8VIuRIEYQ5Ggwk/82uvTQf27RcpyDNbY0Vw49LIPqAxk5tqYfrCs9xDaIMvl4aj7ZopnYL8bA==} - - '@types/cookies@0.9.2': - resolution: {integrity: sha512-1AvkDdZM2dbyFybL4fxpuNCaWyv//0AwsuUk2DWeXyM1/5ZKm6W3z6mQi24RZ4l2ucY+bkSHzbDVpySqPGuV8A==} - '@types/cors@2.8.19': resolution: {integrity: sha512-mFNylyeyqN93lfe/9CSxOGREz8cpzAhH+E93xJ4xWQf62V8sQ/24reV2nyzUWM6H6Xji+GGHpkbLe7pVoUEskg==} - '@types/debounce@1.2.4': - resolution: {integrity: sha512-jBqiORIzKDOToaF63Fm//haOCHuwQuLa2202RK4MozpA6lh93eCBc+/8+wZn5OzjJt3ySdc+74SXWXB55Ewtyw==} - '@types/deep-eql@4.0.2': resolution: {integrity: sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==} @@ -3502,9 +3455,6 @@ packages: '@types/graceful-fs@4.1.9': resolution: {integrity: sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==} - '@types/http-assert@1.5.6': - resolution: {integrity: sha512-TTEwmtjgVbYAzZYWyeHPrrtWnfVkm8tQkP8P21uQifPgMRgjrow3XDEYqucuC8SKZJT7pUnhU/JymvjggxO9vw==} - '@types/http-errors@2.0.5': resolution: {integrity: sha512-r8Tayk8HJnX0FztbZN7oVqGccWgw98T/0neJphO91KkmOzug1KkofZURD4UaD5uH8AqcFLfdPErnBod0u71/qg==} @@ -3514,15 +3464,6 @@ packages: '@types/ini@4.1.1': resolution: {integrity: sha512-MIyNUZipBTbyUNnhvuXJTY7B6qNI78meck9Jbv3wk0OgNwRyOOVEKDutAkOs1snB/tx0FafyR6/SN4Ps0hZPeg==} - '@types/istanbul-lib-coverage@2.0.6': - resolution: {integrity: sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==} - - '@types/istanbul-lib-report@3.0.3': - resolution: {integrity: sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==} - - '@types/istanbul-reports@3.0.4': - resolution: {integrity: sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==} - '@types/jasmine-reporters@2.5.3': resolution: {integrity: sha512-8aojAUdgdiD9VQbllBJb/9gny3lOjz9T5gyMcbYlKe6npwGVsarbr8v2JYSFJSZSuFYXcPVzFG2lLX3ib0j/DA==} @@ -3538,15 +3479,6 @@ packages: '@types/karma@6.3.9': resolution: {integrity: sha512-sjE/MHnoAZAQYAKRXAbjTOiBKyGGErEM725bruRcmDdMa2vp1bjWPhApI7/i564PTyHlzc3vIGXLL6TFIpAxFg==} - '@types/keygrip@1.0.6': - resolution: {integrity: sha512-lZuNAY9xeJt7Bx4t4dx0rYCDqGPW8RXhQZK1td7d4H6E9zYbLoOtjBvfwdTKpsyxQI/2jv+armjX/RW+ZNpXOQ==} - - '@types/koa-compose@3.2.9': - resolution: {integrity: sha512-BroAZ9FTvPiCy0Pi8tjD1OfJ7bgU1gQf0eR6e1Vm+JJATy9eKOG3hQMFtMciMawiSOVnLMdmUOC46s7HBhSTsA==} - - '@types/koa@2.15.0': - resolution: {integrity: sha512-7QFsywoE5URbuVnG3loe03QXuGajrnotr3gQkXcEBShORai23MePfFYdhz90FEtBBpkyIYQbVD+evKtloCgX3g==} - '@types/less@3.0.8': resolution: {integrity: sha512-Gjm4+H9noDJgu5EdT3rUw5MhPBag46fiOy27BefvWkNL8mlZnKnCaVVVTLKj6RYXed9b62CPKnPav9govyQDzA==} @@ -3586,9 +3518,6 @@ packages: '@types/parse-glob@3.0.32': resolution: {integrity: sha512-n4xmml2WKR12XeQprN8L/sfiVPa8FHS3k+fxp4kSr/PA2GsGUgFND+bvISJxM0y5QdvzNEGjEVU3eIrcKks/pA==} - '@types/parse5@6.0.3': - resolution: {integrity: sha512-SuT16Q1K51EAVPz1K29DJ/sXjhSQ0zjvsypYJ6tlwVsRV9jwW5Adq2ch8Dq8kDBCkYnELS7N7VNCSB5nC56t/g==} - '@types/picomatch@4.0.2': resolution: {integrity: sha512-qHHxQ+P9PysNEGbALT8f8YOSHW0KJu6l2xU8DYY0fu/EmGxXdVnuTLvFUvBgPJMSqXq29SYHveejeAha+4AYgA==} @@ -3658,9 +3587,6 @@ packages: '@types/which@3.0.4': resolution: {integrity: sha512-liyfuo/106JdlgSchJzXEQCVArk0CvevqPote8F8HgWgJ3dRCcTHgJIsLDuee0kxk/mhbInzIZk3QWSZJ8R+2w==} - '@types/ws@7.4.7': - resolution: {integrity: sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww==} - '@types/ws@8.18.1': resolution: {integrity: sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==} @@ -3862,56 +3788,6 @@ packages: '@vitest/utils@4.0.18': resolution: {integrity: sha512-msMRKLMVLWygpK3u2Hybgi4MNjcYJvwTb0Ru09+fOyCXIgT5raYP041DRRdiJiI3k/2U6SEbAETB3YtBrUkCFA==} - '@web/browser-logs@0.4.1': - resolution: {integrity: sha512-ypmMG+72ERm+LvP+loj9A64MTXvWMXHUOu773cPO4L1SV/VWg6xA9Pv7vkvkXQX+ItJtCJt+KQ+U6ui2HhSFUw==} - engines: {node: '>=18.0.0'} - - '@web/config-loader@0.3.3': - resolution: {integrity: sha512-ilzeQzrPpPLWZhzFCV+4doxKDGm7oKVfdKpW9wiUNVgive34NSzCw+WzXTvjE4Jgr5CkyTDIObEmMrqQEjhT0g==} - engines: {node: '>=18.0.0'} - - '@web/dev-server-core@0.7.5': - resolution: {integrity: sha512-Da65zsiN6iZPMRuj4Oa6YPwvsmZmo5gtPWhW2lx3GTUf5CAEapjVpZVlUXnKPL7M7zRuk72jSsIl8lo+XpTCtw==} - engines: {node: '>=18.0.0'} - - '@web/dev-server-rollup@0.6.4': - resolution: {integrity: sha512-sJZfTGCCrdku5xYnQQG51odGI092hKY9YFM0X3Z0tRY3iXKXcYRaLZrErw5KfCxr6g0JRuhe4BBhqXTA5Q2I3Q==} - engines: {node: '>=18.0.0'} - - '@web/dev-server@0.4.6': - resolution: {integrity: sha512-jj/1bcElAy5EZet8m2CcUdzxT+CRvUjIXGh8Lt7vxtthkN9PzY9wlhWx/9WOs5iwlnG1oj0VGo6f/zvbPO0s9w==} - engines: {node: '>=18.0.0'} - hasBin: true - - '@web/parse5-utils@2.1.1': - resolution: {integrity: sha512-7rBVZEMGfrq2iPcAEwJ0KSNSvmA2a6jT2CK8/gyIOHgn4reg7bSSRbzyWIEYWyIkeRoYEukX/aW+nAeCgSSqhQ==} - engines: {node: '>=18.0.0'} - - '@web/test-runner-chrome@0.18.1': - resolution: {integrity: sha512-eO6ctCaqSguGM6G3cFobGHnrEs9wlv9Juj/Akyr4XLjeEMTheNULdvOXw9Bygi+QC/ir/0snMmt+/YKnfy8rYA==} - engines: {node: '>=18.0.0'} - - '@web/test-runner-commands@0.9.0': - resolution: {integrity: sha512-zeLI6QdH0jzzJMDV5O42Pd8WLJtYqovgdt0JdytgHc0d1EpzXDsc7NTCJSImboc2NcayIsWAvvGGeRF69SMMYg==} - engines: {node: '>=18.0.0'} - - '@web/test-runner-core@0.13.4': - resolution: {integrity: sha512-84E1025aUSjvZU1j17eCTwV7m5Zg3cZHErV3+CaJM9JPCesZwLraIa0ONIQ9w4KLgcDgJFw9UnJ0LbFf42h6tg==} - engines: {node: '>=18.0.0'} - - '@web/test-runner-coverage-v8@0.8.0': - resolution: {integrity: sha512-PskiucYpjUtgNfR2zF2AWqWwjXL7H3WW/SnCAYmzUrtob7X9o/+BjdyZ4wKbOxWWSbJO4lEdGIDLu+8X2Xw+lA==} - engines: {node: '>=18.0.0'} - - '@web/test-runner-mocha@0.9.0': - resolution: {integrity: sha512-ZL9F6FXd0DBQvo/h/+mSfzFTSRVxzV9st/AHhpgABtUtV/AIpVE9to6+xdkpu6827kwjezdpuadPfg+PlrBWqQ==} - engines: {node: '>=18.0.0'} - - '@web/test-runner@0.20.2': - resolution: {integrity: sha512-zfEGYEDnS0EI8qgoWFjmtkIXhqP15W40NW3dCaKtbxj5eU0a7E53f3GV/tZGD0GlZKF8d4Fyw+AFrwOJU9Z4GA==} - engines: {node: '>=18.0.0'} - hasBin: true - '@webassemblyjs/ast@1.14.1': resolution: {integrity: sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==} @@ -4071,10 +3947,6 @@ packages: resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==} engines: {node: '>=6'} - ansi-escapes@4.3.2: - resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} - engines: {node: '>=8'} - ansi-escapes@7.3.0: resolution: {integrity: sha512-BvU8nYgGQBxcmMuEeUEmNTvrMVjJNSH7RgW24vXexN4Ven6qCvy4TntnvlnwnMLTVlcRQQdbRY8NKnaIoeWDNg==} engines: {node: '>=18'} @@ -4122,14 +3994,6 @@ packages: argparse@2.0.1: resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} - array-back@3.1.0: - resolution: {integrity: sha512-TkuxA4UCOvxuDK6NZYXCalszEzj+TLszyASooky+i742l9TqsOdYCMJJupxRic61hwquNtppB3hgcuq9SVSH1Q==} - engines: {node: '>=6'} - - array-back@6.2.2: - resolution: {integrity: sha512-gUAZ7HPyb4SJczXAMUXMGAvI976JoK3qEx9v1FTmeYuJj0IBiaKttG1ydtGKdkfqWkIkouke7nG8ufGy77+Cvw==} - engines: {node: '>=12.17'} - array-buffer-byte-length@1.0.2: resolution: {integrity: sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==} engines: {node: '>= 0.4'} @@ -4149,10 +4013,6 @@ packages: resolution: {integrity: sha512-Dxr6QJj/RdU/hCaBjOfxW+q6lyuVE6JFWIrAUpuOOhoJJoQ99cUn3igRaHVB5P9WrgFVN0FfArM3x0cueOU8ng==} engines: {node: '>=0.10.0'} - array-union@2.1.0: - resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} - engines: {node: '>=8'} - array-union@3.0.1: resolution: {integrity: sha512-1OvF9IbWwaeiM9VhzYXVQacMibxpXOMYVNIvMtKRyX9SImBXpKcFr8XvFDeEslCyuH/t6KRt7HEO94AlP8Iatw==} engines: {node: '>=12'} @@ -4200,17 +4060,9 @@ packages: resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==} engines: {node: '>=12'} - ast-types@0.13.4: - resolution: {integrity: sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==} - engines: {node: '>=4'} - ast-v8-to-istanbul@0.3.11: resolution: {integrity: sha512-Qya9fkoofMjCBNVdWINMjB5KZvkYfaO9/anwkWnjxibpWUxo5iHl2sOdP7/uAqaRuUYuoo8rDwnbaaKVFxoUvw==} - astral-regex@2.0.0: - resolution: {integrity: sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==} - engines: {node: '>=8'} - async-each-series@0.1.1: resolution: {integrity: sha512-p4jj6Fws4Iy2m0iCmI2am2ZNZCgbdgE+P8F/8csmn2vx7ixXrO2zGcuNsD46X5uZSVecmkEy/M06X2vG8KD6dQ==} engines: {node: '>=0.8.0'} @@ -4299,36 +4151,6 @@ packages: bare-abort-controller: optional: true - bare-fs@4.5.4: - resolution: {integrity: sha512-POK4oplfA7P7gqvetNmCs4CNtm9fNsx+IAh7jH7GgU0OJdge2rso0R20TNWVq6VoWcCvsTdlNDaleLHGaKx8CA==} - engines: {bare: '>=1.16.0'} - peerDependencies: - bare-buffer: '*' - peerDependenciesMeta: - bare-buffer: - optional: true - - bare-os@3.6.2: - resolution: {integrity: sha512-T+V1+1srU2qYNBmJCXZkUY5vQ0B4FSlL3QDROnKQYOqeiQR8UbjNHlPa+TIbM4cuidiN9GaTaOZgSEgsvPbh5A==} - engines: {bare: '>=1.14.0'} - - bare-path@3.0.0: - resolution: {integrity: sha512-tyfW2cQcB5NN8Saijrhqn0Zh7AnFNsnczRcuWODH0eYAXBsJ5gVxAUuNr7tsHSC6IZ77cA0SitzT+s47kot8Mw==} - - bare-stream@2.7.0: - resolution: {integrity: sha512-oyXQNicV1y8nc2aKffH+BUHFRXmx6VrPzlnaEvMhram0nPBrKcEdcyBg5r08D0i8VxngHFAiVyn1QKXpSG0B8A==} - peerDependencies: - bare-buffer: '*' - bare-events: '*' - peerDependenciesMeta: - bare-buffer: - optional: true - bare-events: - optional: true - - bare-url@2.3.2: - resolution: {integrity: sha512-ZMq4gd9ngV5aTMa5p9+UfY0b3skwhHELaDkhEHetMdX0LRkW9kzaym4oo/Eh+Ghm0CCDuMTsRIGM/ytUc1ZYmw==} - base64-js@1.5.1: resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} @@ -4340,10 +4162,6 @@ packages: resolution: {integrity: sha512-ipDqC8FrAl/76p2SSWKSI+H9tFwm7vYqXQrItCuiVPt26Km0jS+NzSsBWAaBusvSbQcfJG+JitdMm+wZAgTYqg==} hasBin: true - basic-ftp@5.1.0: - resolution: {integrity: sha512-RkaJzeJKDbaDWTIPiJwubyljaEPwpVWkm9Rt5h9Nd6h7tEXTJ3VB4qxdZBioV7JO5yLUaOKwz7vDOzlncUsegw==} - engines: {node: '>=10.0.0'} - batch@0.6.1: resolution: {integrity: sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==} @@ -4476,10 +4294,6 @@ packages: resolution: {integrity: sha512-3pUp4e8hv07k1QlijZu6Kn7c9+ZpWWk4j3F8N3xPuCExULobqJydKYOTj1FTq58srkJsXvO7LbGAH4C0ZU3WGw==} engines: {node: ^20.17.0 || >=22.9.0} - cache-content-type@1.0.1: - resolution: {integrity: sha512-IKufZ1o4Ut42YUrZSo8+qnMTrFuKkvyoLXUywKz9GJ5BrhOFGhLdkx9sG4KAnVvbY6kEcSFjLQul+DVmBm2bgA==} - engines: {node: '>= 6.0.0'} - cacheable-lookup@6.1.0: resolution: {integrity: sha512-KJ/Dmo1lDDhmW2XDPMo+9oiy/CeqosPguPCrgcVzKyZrL6pM1gU2GmPY/xo6OQPTUaA/c0kwHuywB4E6nmT9ww==} engines: {node: '>=10.6.0'} @@ -4508,10 +4322,6 @@ packages: resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} engines: {node: '>=6'} - camelcase@6.3.0: - resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} - engines: {node: '>=10'} - caniuse-lite@1.0.30001770: resolution: {integrity: sha512-x/2CLQ1jHENRbHg5PSId2sXq1CIO1CISvwWAj027ltMVG2UNgW+w9oH2+HzgEIRFembL8bUlXtfbBHR1fCg2xw==} @@ -4522,10 +4332,6 @@ packages: resolution: {integrity: sha512-NUPRluOfOiTKBKvWPtSD4PhFvWCqOi0BGStNWs57X9js7XGTprSmFoz5F0tWhR4WPjNeR9jXqdC7/UpSJTnlRg==} engines: {node: '>=18'} - chalk-template@0.4.0: - resolution: {integrity: sha512-/ghrgmhfY8RaSdeo43hNXxpoHAtxdbskUHjPpfqUWGttFgycUhYPGx3YZBCnUCvOa7Doivn1IZec3DEGFoMgLg==} - engines: {node: '>=12'} - chalk@1.1.3: resolution: {integrity: sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==} engines: {node: '>=0.10.0'} @@ -4563,24 +4369,10 @@ packages: resolution: {integrity: sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==} engines: {node: '>=18'} - chrome-launcher@0.15.2: - resolution: {integrity: sha512-zdLEwNo3aUVzIhKhTtXfxhdvZhUghrnmkvcAq2NoDd+LeOHKf03H5jwZ8T/STsAlzyALkBVK552iaG1fGf1xVQ==} - engines: {node: '>=12.13.0'} - hasBin: true - chrome-trace-event@1.0.4: resolution: {integrity: sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==} engines: {node: '>=6.0'} - chromium-bidi@14.0.0: - resolution: {integrity: sha512-9gYlLtS6tStdRWzrtXaTMnqcM4dudNegMXJxkR0I/CXObHalYeYcAMPrL19eroNZHtJ8DQmu1E+ZNOYu/IXMXw==} - peerDependencies: - devtools-protocol: '*' - - cli-cursor@3.1.0: - resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==} - engines: {node: '>=8'} - cli-cursor@5.0.0: resolution: {integrity: sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==} engines: {node: '>=18'} @@ -4625,18 +4417,6 @@ packages: clone-response@1.0.3: resolution: {integrity: sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==} - clone@2.1.2: - resolution: {integrity: sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==} - engines: {node: '>=0.8'} - - co-body@6.2.0: - resolution: {integrity: sha512-Kbpv2Yd1NdL1V/V4cwLVxraHDV6K8ayohr2rmH0J87Er8+zJjcTa6dAn9QMPC9CRgU8+aNajKbSf1TzDB1yKPA==} - engines: {node: '>=8.0.0'} - - co@4.6.0: - resolution: {integrity: sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==} - engines: {iojs: '>= 1.0.0', node: '>= 0.12.0'} - collection-utils@1.0.1: resolution: {integrity: sha512-LA2YTIlR7biSpXkKYwwuzGjwL5rjWEZVOSnvdUc7gObvWe4WkjxOpfrdhoP7Hs09YWDVfg0Mal9BpAqLfVEzQg==} @@ -4658,14 +4438,6 @@ packages: resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} engines: {node: '>= 0.8'} - command-line-args@5.2.1: - resolution: {integrity: sha512-H4UfQhZyakIjC74I9d34fGYDwk3XpSr17QhEd0Q3I9Xq1CETHo4Hcuo87WyWHpAF1aSLjLRf5lD9ZGX2qStUvg==} - engines: {node: '>=4.0.0'} - - command-line-usage@7.0.3: - resolution: {integrity: sha512-PqMLy5+YGwhMh1wS04mVG44oqDsgyLRSKJBdOo1bnYhMKBW65gZF1dRp2OZRhiTjgUHljy99qkO7bsctLaw35Q==} - engines: {node: '>=12.20.0'} - commander@14.0.3: resolution: {integrity: sha512-H+y0Jo/T1RZ9qPP4Eh1pkcQcLRglraJaSLoyOtHxu6AapkjWVCy2Sit1QQ4x3Dng8qDlSsZEet7g5Pq06MvTgw==} engines: {node: '>=20'} @@ -4748,10 +4520,6 @@ packages: resolution: {integrity: sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==} engines: {node: '>= 0.6'} - cookies@0.9.1: - resolution: {integrity: sha512-TG2hpqe4ELx54QER/S3HQ9SRVnQnGBtKUz5bLQWtYAQ+o6GpgMs6sYUvaiJjVxb+UXwhRhAEP3m7LbsIZ77Hmw==} - engines: {node: '>= 0.8'} - copy-anything@2.0.6: resolution: {integrity: sha512-1j20GZTsvKNkc4BY3NpMOM8tt///wY3FpIzozTOFO2ffuZcV61nojHXVKIy3WM+7ADCy5FVhdZYHYDdgTU0yJw==} @@ -4843,10 +4611,6 @@ packages: resolution: {integrity: sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==} engines: {node: '>= 12'} - data-uri-to-buffer@6.0.2: - resolution: {integrity: sha512-7hvf7/GW8e86rW0ptuwS3OcBGDjIi6SZva7hCyWC0yYry2cOPmLIjXAUHI6DK2HsnwJd9ifmt57i8eV2n4YNpw==} - engines: {node: '>= 14'} - data-urls@7.0.0: resolution: {integrity: sha512-23XHcCF+coGYevirZceTVD7NdJOqVn+49IHyxgszm+JIiHLoB2TkmPtsYkNWT1pvRSGkc35L6NHs0yHkN2SumA==} engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0} @@ -4870,9 +4634,6 @@ packages: dayjs@1.11.13: resolution: {integrity: sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg==} - debounce@1.2.1: - resolution: {integrity: sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==} - debug@2.6.9: resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} peerDependencies: @@ -4936,9 +4697,6 @@ packages: resolution: {integrity: sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==} engines: {node: '>=10'} - deep-equal@1.0.1: - resolution: {integrity: sha512-bHtC0iYvWhyaTzvV3CZgPeZQqCOBGyGsVV7v4eevpdkLHfiSrXUdBG+qAuSz4RI70sszvjQ1QSZ98An1yNwpSw==} - deep-is@0.1.4: resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} @@ -4954,10 +4712,6 @@ packages: resolution: {integrity: sha512-H9LMLr5zwIbSxrmvikGuI/5KGhZ8E2zH3stkMgM5LpOWDutGM2JZaj460Udnf1a+946zc7YBgrqEWwbk7zHvGw==} engines: {node: '>=18'} - default-gateway@6.0.3: - resolution: {integrity: sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==} - engines: {node: '>= 10'} - defer-to-connect@2.0.1: resolution: {integrity: sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==} engines: {node: '>=10'} @@ -4966,10 +4720,6 @@ packages: resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} engines: {node: '>= 0.4'} - define-lazy-prop@2.0.0: - resolution: {integrity: sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==} - engines: {node: '>=8'} - define-lazy-prop@3.0.0: resolution: {integrity: sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==} engines: {node: '>=12'} @@ -4981,10 +4731,6 @@ packages: defu@6.1.4: resolution: {integrity: sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==} - degenerator@5.0.1: - resolution: {integrity: sha512-TllpMR/t0M5sqCXfj85i4XaAzxmS5tVA16dqvdkMwGmzI+dXLXnw3J+3Vdv7VKw+ThlTMboK6i9rnZ6Nntj5CQ==} - engines: {node: '>= 14'} - del@2.2.2: resolution: {integrity: sha512-Z4fzpbIRjOu7lO5jCETSWoqUDVe0IPOlfugBsF6suen2LKDlVb4QZpKEM9P+buNJ4KI1eN7I083w/pbKUpsrWQ==} engines: {node: '>=0.10.0'} @@ -4993,9 +4739,6 @@ packages: resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} engines: {node: '>=0.4.0'} - delegates@1.0.0: - resolution: {integrity: sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==} - depd@1.1.2: resolution: {integrity: sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==} engines: {node: '>= 0.6'} @@ -5004,10 +4747,6 @@ packages: resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} engines: {node: '>= 0.8'} - dependency-graph@0.11.0: - resolution: {integrity: sha512-JeMq7fEshyepOWDfcfHK06N3MhyPhz++vtqWhMT5O9A3K42rdsEDpfdVqjaqaAhsw6a+ZqeDvQVtD0hFHQWrzg==} - engines: {node: '>= 0.6.0'} - dependency-graph@1.0.0: resolution: {integrity: sha512-cW3gggJ28HZ/LExwxP2B++aiKxhJXMSIt9K48FOXQkm+vuG5gyatXnLsONRJdzO/7VfjDIiaOOa/bs4l464Lwg==} engines: {node: '>=4'} @@ -5031,9 +4770,6 @@ packages: devtools-protocol@0.0.1045489: resolution: {integrity: sha512-D+PTmWulkuQW4D1NTiCRCFxF7pQPn0hgp4YyX4wAQ6xYXKOadSWPR3ENGDQ47MW/Ewc9v2rpC/UEEGahgBYpSQ==} - devtools-protocol@0.0.1566079: - resolution: {integrity: sha512-MJfAEA1UfVhSs7fbSQOG4czavUp1ajfg6prlAN0+cmfa2zNjaIbvq8VneP7do1WAQQIvgNJWSMeP6UyI90gIlQ==} - di@0.0.1: resolution: {integrity: sha512-uJaamHkagcZtHPqCIHZxnFrXlunQXgBOsZSUOWwFw31QJCAbyTBoHMW75YOTur5ZNx8pIeAKgf6GWIgaqqiLhA==} @@ -5041,14 +4777,6 @@ packages: resolution: {integrity: sha512-X07nttJQkwkfKfvTPG/KSnE2OMdcUCao6+eXF3wmnIQRn2aPAHH3VxDbDOdegkd6JbPsXqShpvEOHfAT+nCNwQ==} engines: {node: '>=0.3.1'} - diff@5.2.2: - resolution: {integrity: sha512-vtcDfH3TOjP8UekytvnHH1o1P4FcUdt4eQ1Y+Abap1tk/OB2MWQvcwS2ClCd1zuIhc3JKOx6p3kod8Vfys3E+A==} - engines: {node: '>=0.3.1'} - - dir-glob@3.0.1: - resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} - engines: {node: '>=8'} - dns-packet@5.6.1: resolution: {integrity: sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw==} engines: {node: '>=6'} @@ -5192,9 +4920,6 @@ packages: error-ex@1.3.4: resolution: {integrity: sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==} - errorstacks@2.4.1: - resolution: {integrity: sha512-jE4i0SMYevwu/xxAuzhly/KTwtj0xDhbzB6m1xPImxTkw8wcCbgarOQPfCVMi5JKVyW7in29pNJCCJrry3Ynnw==} - es-abstract@1.24.1: resolution: {integrity: sha512-zHXBLhP+QehSSbsS9Pt23Gg964240DPd6QCf8WpkqEXxQ7fhdZzYsocOr5u7apWonsS5EjZDmTF+/slGMyasvw==} engines: {node: '>= 0.4'} @@ -5260,11 +4985,6 @@ packages: resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} engines: {node: '>=10'} - escodegen@2.1.0: - resolution: {integrity: sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==} - engines: {node: '>=6.0'} - hasBin: true - eslint-config-prettier@10.1.8: resolution: {integrity: sha512-82GZUjRS0p/jganf6q1rEO25VSoHH0hKPCTrgillPjdI/3bgBhAE1QzHrHTizjpRvy6pGAvKjDJtk2pF9NDq8w==} hasBin: true @@ -5347,11 +5067,6 @@ packages: resolution: {integrity: sha512-AVHPqQoZYc+RUM4/3Ly5udlZY/U4LS8pIG05jEjWM2lQMU/oaZ7qshzAl2YP1tfNmXfftH3ohurfwNAug+MnsQ==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} - esprima@4.0.1: - resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} - engines: {node: '>=4'} - hasBin: true - esquery@1.7.0: resolution: {integrity: sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==} engines: {node: '>=0.10'} @@ -5410,10 +5125,6 @@ packages: resolution: {integrity: sha512-CRT1WTyuQoD771GW56XEZFQ/ZoSfWid1alKGDYMmkt2yl8UXrVR4pspqWNEcqKvVIzg6PAltWjxcSSPrboA4iA==} engines: {node: '>=18.0.0'} - execa@5.1.1: - resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} - engines: {node: '>=10'} - exit@0.1.2: resolution: {integrity: sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==} engines: {node: '>= 0.8.0'} @@ -5539,10 +5250,6 @@ packages: resolution: {integrity: sha512-CvFd5ivA6HcSHbD+59P7CyzINHXzwhuQK8RY7CxJZtgDSAtRlHiCaQpZQ2lMR/WRyUIEmzUvL6G2AGurMfegZA==} engines: {node: '>=20'} - find-replace@3.0.0: - resolution: {integrity: sha512-6Tb2myMioCAgv5kfvP5/PkZZ/ntTpVK39fHY7WkWBgvbeE+VHd/tZuZ4mrC+bxh4cfOZeYKVPaJIZtZXV7GNCQ==} - engines: {node: '>=4.0.0'} - find-up-simple@1.0.1: resolution: {integrity: sha512-afd4O7zpqHeRyg4PfDQsXmlDe2PfdHtJt6Akt8jOWaApLOZk5JXs6VMR29lz03pRe9mpykrRCYIYxaJYcfpncQ==} engines: {node: '>=18'} @@ -5707,10 +5414,6 @@ packages: get-tsconfig@4.13.6: resolution: {integrity: sha512-shZT/QMiSHc/YBLxxOkMtgSid5HFoauqCE3/exfsEcwg1WkeqjG+V40yBbBrsD+jW2HDXcs28xOfcbm2jI8Ddw==} - get-uri@6.0.5: - resolution: {integrity: sha512-b1O07XYq8eRuVzBNgJLstU6FYc1tS6wnMtF1I1D9lE8LxZSOGZ7LhxN54yPP6mGw5f2CkXY2BQUL9Fx41qvcIg==} - engines: {node: '>= 14'} - getpass@0.1.7: resolution: {integrity: sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==} @@ -5761,10 +5464,6 @@ packages: resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} engines: {node: '>= 0.4'} - globby@11.1.0: - resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} - engines: {node: '>=10'} - globby@5.0.0: resolution: {integrity: sha512-HJRTIH2EeH44ka+LWig+EqT2ONSYpVlNfx6pyd592/VF1TbfljJ7elwie7oSwcViLGqOdWocSdu2txwBF9bjmQ==} engines: {node: '>=0.10.0'} @@ -5888,20 +5587,12 @@ packages: htmlparser2@10.1.0: resolution: {integrity: sha512-VTZkM9GWRAtEpveh7MSF6SjjrpNVNNVJfFup7xTY3UpFtm67foy9HDVXneLtFVt4pMz5kZtgNcvCniNFb1hlEQ==} - http-assert@1.5.0: - resolution: {integrity: sha512-uPpH7OKX4H25hBmU6G1jWNaqJGpTXxey+YOUizJUAgu0AjLUeC8D73hTrhvDS5D+GJN1DN1+hhc/eF/wpxtp0w==} - engines: {node: '>= 0.8'} - http-cache-semantics@4.2.0: resolution: {integrity: sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ==} http-deceiver@1.2.7: resolution: {integrity: sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==} - http-errors@1.6.3: - resolution: {integrity: sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==} - engines: {node: '>= 0.6'} - http-errors@1.8.1: resolution: {integrity: sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==} engines: {node: '>= 0.6'} @@ -5969,10 +5660,6 @@ packages: resolution: {integrity: sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==} engines: {node: '>= 14'} - human-signals@2.1.0: - resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} - engines: {node: '>=10.17.0'} - husky@9.1.7: resolution: {integrity: sha512-5gs5ytaNjBrh5Ow3zrvdUUY+0VxIuWVL4i9irt6friV+BqdCfmV11CQTWMiBYWHbXhco+J1kHfTOUkePhCDvMA==} engines: {node: '>=18'} @@ -6041,17 +5728,10 @@ packages: resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} engines: {node: '>=0.8.19'} - inflation@2.1.0: - resolution: {integrity: sha512-t54PPJHG1Pp7VQvxyVCJ9mBbjG3Hqryges9bXoOO6GExCPa+//i/d5GSuFtpx3ALLd7lgIAur6zrIlBQyJuMlQ==} - engines: {node: '>= 0.8.0'} - inflight@1.0.6: resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. - inherits@2.0.3: - resolution: {integrity: sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==} - inherits@2.0.4: resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} @@ -6065,10 +5745,6 @@ packages: injection-js@2.6.1: resolution: {integrity: sha512-dbR5bdhi7TWDoCye9cByZqeg/gAfamm8Vu3G1KZOTYkOif8WkuM8CD0oeDPtZYMzT5YH76JAFB7bkmyY9OJi2A==} - internal-ip@6.2.0: - resolution: {integrity: sha512-D8WGsR6yDt8uq7vDMu7mjcR+yRMm3dW8yufyChmszWRjcSHuxLBkR3GdS2HZAjodsaGuCvXeEJpueisXJULghg==} - engines: {node: '>=10'} - internal-slot@1.1.0: resolution: {integrity: sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==} engines: {node: '>= 0.4'} @@ -6081,10 +5757,6 @@ packages: resolution: {integrity: sha512-XXADHxXmvT9+CRxhXg56LJovE+bmWnEWB78LB83VZTprKTmaC5QfruXocxzTZ2Kl0DNwKuBdlIhjL8LeY8Sf8Q==} engines: {node: '>= 12'} - ip-regex@4.3.0: - resolution: {integrity: sha512-B9ZWJxHHOHUhUjCPrMpLD4xEq35bUTClHM1S6CBU5ixQnkZmwipwgc96vAd7AAGM9TGHvJR+Uss+/Ak6UphK+Q==} - engines: {node: '>=8'} - ipaddr.js@1.9.1: resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==} engines: {node: '>= 0.10'} @@ -6135,11 +5807,6 @@ packages: is-deflate@1.0.0: resolution: {integrity: sha512-YDoFpuZWu1VRXlsnlYMzKyVRITXj7Ej/V9gXQ2/pAe7X1J7M/RNOqaIYi6qUn+B7nGyB9pDXrv02dsB58d2ZAQ==} - is-docker@2.2.1: - resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==} - engines: {node: '>=8'} - hasBin: true - is-docker@3.0.0: resolution: {integrity: sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -6186,10 +5853,6 @@ packages: resolution: {integrity: sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==} engines: {node: '>=12'} - is-ip@3.1.0: - resolution: {integrity: sha512-35vd5necO7IitFPjd/YBeqwWnyDWbuLH9ZXQdMfDA8TEo7pv5X8yfrvVO3xbJbLUlERCMvf6X0hTUamQxCYJ9Q==} - engines: {node: '>=8'} - is-map@2.0.3: resolution: {integrity: sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==} engines: {node: '>= 0.4'} @@ -6270,10 +5933,6 @@ packages: is-stream-ended@0.1.4: resolution: {integrity: sha512-xj0XPvmr7bQFTvirqnFr50o0hQIh6ZItDqloxt5aJrR4NQsYeSsyFQERYGCAzfindAcnKjINnwEEgLx4IqVzQw==} - is-stream@2.0.1: - resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} - engines: {node: '>=8'} - is-string@1.1.1: resolution: {integrity: sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==} engines: {node: '>= 0.4'} @@ -6315,10 +5974,6 @@ packages: resolution: {integrity: sha512-gfygJYZ2gLTDlmbWMI0CE2MwnFzSN/2SZfkMlItC4K/JBlsWVDB0bO6XhqcY13YXE7iMcAJnzTCJjPiTeJJ0Mw==} engines: {node: '>=4'} - is-wsl@2.2.0: - resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} - engines: {node: '>=8'} - is-wsl@3.1.1: resolution: {integrity: sha512-e6rvdUCiQCAuumZslxRJWR/Doq4VpPR82kqclvcS0efgt430SlGIk05vdCN58+VrzgtIcfNODjozVielycD4Sw==} engines: {node: '>=16'} @@ -6337,10 +5992,6 @@ packages: resolution: {integrity: sha512-iHrqe5shvBUcFbmZq9zOQHBoeOhZJu6RQGrDpBgenUm/Am+F3JM2MgQj+rK3Z601fzrL5gLZWtAPH2OBaSVcyw==} engines: {node: '>= 8.0.0'} - isbinaryfile@5.0.7: - resolution: {integrity: sha512-gnWD14Jh3FzS3CPhF0AxNOJ8CxqeblPTADzI38r0wt8ZyQl5edpy75myt08EG2oKvpyiqSqsx+Wkz9vtkbTqYQ==} - engines: {node: '>= 18.0.0'} - isexe@2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} @@ -6561,10 +6212,6 @@ packages: engines: {node: '>= 10'} hasBin: true - keygrip@1.1.0: - resolution: {integrity: sha512-iYSchDJ+liQ8iwbSI2QqsQOvqv58eJCEanyJPJi+Khyu8smkcKSFUCbPwzFcL7YVtZ6eONjqRX/38caJ7QjRAQ==} - engines: {node: '>= 0.6'} - keyv@4.5.4: resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} @@ -6572,28 +6219,6 @@ packages: resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} engines: {node: '>=0.10.0'} - koa-compose@4.1.0: - resolution: {integrity: sha512-8ODW8TrDuMYvXRwra/Kh7/rJo9BtOfPc6qO8eAfC80CnCvSjSl0bkRM24X6/XBBEyj0v1nRUQ1LyOy3dbqOWXw==} - - koa-convert@2.0.0: - resolution: {integrity: sha512-asOvN6bFlSnxewce2e/DK3p4tltyfC4VM7ZwuTuepI7dEQVcvpyFuBcEARu1+Hxg8DIwytce2n7jrZtRlPrARA==} - engines: {node: '>= 10'} - - koa-etag@4.0.0: - resolution: {integrity: sha512-1cSdezCkBWlyuB9l6c/IFoe1ANCDdPBxkDkRiaIup40xpUub6U/wwRXoKBZw/O5BifX9OlqAjYnDyzM6+l+TAg==} - - koa-send@5.0.1: - resolution: {integrity: sha512-tmcyQ/wXXuxpDxyNXv5yNNkdAMdFRqwtegBXUaowiQzUKqJehttS0x2j0eOZDQAyloAth5w6wwBImnFzkUz3pQ==} - engines: {node: '>= 8'} - - koa-static@5.0.0: - resolution: {integrity: sha512-UqyYyH5YEXaJrf9S8E23GoJFQZXkBVJ9zYYMPGz919MSX1KuvAcycIuS0ci150HCoPf4XQVhQ84Qf8xRPWxFaQ==} - engines: {node: '>= 7.6.0'} - - koa@2.16.3: - resolution: {integrity: sha512-zPPuIt+ku1iCpFBRwseMcPYQ1cJL8l60rSmKeOuGfOXyE6YnTBmf2aEFNL2HQGrD0cPcLO/t+v9RTgC+fwEh/g==} - engines: {node: ^4.8.4 || ^6.10.1 || ^7.10.1 || >= 8.1.4} - launch-editor@2.12.0: resolution: {integrity: sha512-giOHXoOtifjdHqUamwKq6c49GzBdLjvxrd2D+Q4V6uOHopJv7p9VJxikDsQ/CBXZbEITgUqSVHXLTG3VhPP1Dg==} @@ -6630,9 +6255,6 @@ packages: lie@3.3.0: resolution: {integrity: sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==} - lighthouse-logger@1.4.2: - resolution: {integrity: sha512-gPWxznF6TKmUHrOQjlVo2UbaL2EJ71mb2CCeRs/2qBpi4L/g4LUVc9+3lKQ6DTUZwJswfM7ainGrLO1+fOqa2g==} - limiter@1.1.5: resolution: {integrity: sha512-FWWMIEOxz3GwUI4Ts/IvgVy6LPvoMPgjMdQ185nN6psJyBJ4yOpzqm695/h5umdLJg2vW3GR5iG11MAkR2AzJA==} @@ -6713,10 +6335,6 @@ packages: resolution: {integrity: sha512-ja1E3yCr9i/0hmBVaM0bfwDjnGy8I/s6PP4DFp+yP+a+mrHO4Rm7DtmnqROTUkHIkqffC84YY7AeqX6oFk0WFg==} engines: {node: '>=18'} - log-update@4.0.0: - resolution: {integrity: sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==} - engines: {node: '>=10'} - log-update@7.1.0: resolution: {integrity: sha512-y9pi/ZOQQVvTgfRDEHV1Cj4zQUkJZPipEUNOxhn1R6KgmdMs7LKvXWCd9eMVPGJgvYzFLCenecWr0Ps8ChVv2A==} engines: {node: '>=20'} @@ -6750,10 +6368,6 @@ packages: resolution: {integrity: sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==} engines: {node: '>=12'} - lru-cache@8.0.5: - resolution: {integrity: sha512-MhWWlVnuab1RG5/zMRRcVGXZLCXrZTgfwMikgzCegsPnG62yDQo5JnqKkrK4jO5iKqDAZGItAqN5CtKBCBWRUA==} - engines: {node: '>=16.14'} - magic-string@0.30.21: resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==} @@ -6775,9 +6389,6 @@ packages: resolution: {integrity: sha512-iyyEpDty1mwW3dGlYXAJqC/azFn5PPvgKVwXayOGBSmKLxhKZ9fg4qIan2ePpp1vJIwfFiO34LAPZgq9SZW9Aw==} engines: {node: ^20.17.0 || >=22.9.0} - marky@1.3.0: - resolution: {integrity: sha512-ocnPZQLNpvbedwTy9kNrQEsknEfgvcLMvOtz3sFeWApDq1MXH1TqkCIx58xlpESsfwQOnuBO9beyQuNGzVvuhQ==} - math-intrinsics@1.1.0: resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} engines: {node: '>= 0.4'} @@ -6855,10 +6466,6 @@ packages: engines: {node: '>=10.0.0'} hasBin: true - mimic-fn@2.1.0: - resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} - engines: {node: '>=6'} - mimic-function@5.0.1: resolution: {integrity: sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==} engines: {node: '>=18'} @@ -6941,9 +6548,6 @@ packages: mitt@1.2.0: resolution: {integrity: sha512-r6lj77KlwqLhIUku9UWYes7KJtsczvolZkzp8hbaDPPaE24OmWl5s539Mytlj22siEQKosZ26qCBgda2PKwoJw==} - mitt@3.0.1: - resolution: {integrity: sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==} - mkdirp-classic@0.5.3: resolution: {integrity: sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==} @@ -6988,9 +6592,6 @@ packages: resolution: {integrity: sha512-dkEJPVvun4FryqBmZ5KhDo0K9iDXAwn08tMLDinNdRBNPcYEDiWYysLcc6k3mjTMlbP9KyylvRpd4wFtwrT9rw==} engines: {node: ^20.17.0 || >=22.9.0} - nanocolors@0.2.13: - resolution: {integrity: sha512-0n3mSAQLPpGLV9ORXT5+C/D4mwew7Ebws69Hx4E2sgz2ZA5+32Q80B9tL8PbL7XHnRDiAxH/pnrUJ9a4fkTNTA==} - nanoid@3.3.11: resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} @@ -7019,10 +6620,6 @@ packages: neo-async@2.6.2: resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} - netmask@2.0.2: - resolution: {integrity: sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==} - engines: {node: '>= 0.4.0'} - ng-packagr@21.2.0-next.0: resolution: {integrity: sha512-BkRAqx1ZljIYpBbjDi/+3y8AMo9S19vm8zx3YWpqMAaIpDb7cvsT+Une9b4oyEK/7p+XvWw+LaPVleTAQtQEMQ==} engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0} @@ -7133,10 +6730,6 @@ packages: resolution: {integrity: sha512-TakBap6OM1w0H73VZVDf44iFXsOS3h+L4wVMXmbWOQroZgFhMch0juN6XSzBNlD965yIKvWg2dfu7NSiaYLxtw==} engines: {node: ^20.17.0 || >=22.9.0} - npm-run-path@4.0.1: - resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} - engines: {node: '>=8'} - nth-check@2.1.1: resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==} @@ -7200,17 +6793,10 @@ packages: once@1.4.0: resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} - onetime@5.1.2: - resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} - engines: {node: '>=6'} - onetime@7.0.0: resolution: {integrity: sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==} engines: {node: '>=18'} - only@0.0.2: - resolution: {integrity: sha512-Fvw+Jemq5fjjyWz6CpKx6w9s7xxqo3+JCyM0WXWeCSOboZ8ABkyvP8ID4CZuChA/wxSx+XSJmdOm8rGVyJ1hdQ==} - open@10.2.0: resolution: {integrity: sha512-YgBpdJHPyQ2UE5x+hlSXcnejzAvD0b22U2OuAP+8OnlJT+PjWPxtgmGqKKc+RgTM63U9gN0YzrYc71R2WT/hTA==} engines: {node: '>=18'} @@ -7219,10 +6805,6 @@ packages: resolution: {integrity: sha512-smsWv2LzFjP03xmvFoJ331ss6h+jixfA4UUV/Bsiyuu4YJPfN+FIQGOIiv4w9/+MoHkfkJ22UIaQWRVFRfH6Vw==} engines: {node: '>=20'} - open@8.4.2: - resolution: {integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==} - engines: {node: '>=12'} - opn@5.3.0: resolution: {integrity: sha512-bYJHo/LOmoTd+pfiYhfZDnf9zekVJrY+cnS2a5F2x+w5ppvTqObojTP7WiFG+kVZs9Inw+qQ/lw7TroWwhdd2g==} engines: {node: '>=4'} @@ -7253,10 +6835,6 @@ packages: resolution: {integrity: sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==} engines: {node: '>=8'} - p-event@4.2.0: - resolution: {integrity: sha512-KXatOjCRXXkSePPb1Nbi0p0m+gQAwdlbhi4wQKJPI1HsMQS9g+Sqp2o+QHziPr7eYJyOZet836KoHEVM1mwOrQ==} - engines: {node: '>=8'} - p-finally@1.0.0: resolution: {integrity: sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==} engines: {node: '>=4'} @@ -7301,14 +6879,6 @@ packages: resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} engines: {node: '>=6'} - pac-proxy-agent@7.2.0: - resolution: {integrity: sha512-TEB8ESquiLMc0lV8vcd5Ql/JAKAoyzHFXaStwjkzpOpC5Yv+pIzLfHvjTSdf3vpa2bMiUQrg9i6276yn8666aA==} - engines: {node: '>= 14'} - - pac-resolver@7.0.1: - resolution: {integrity: sha512-5NPgf87AT2STgwa2ntRMr45jTKrYBGkVU36yT0ig/n/GMAa3oPqhZfIQ2kMEimReg0+t9kZViDVZ83qfVUlckg==} - engines: {node: '>= 14'} - package-json-from-dist@1.0.1: resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} @@ -7341,9 +6911,6 @@ packages: parse5-sax-parser@8.0.0: resolution: {integrity: sha512-/dQ8UzHZwnrzs3EvDj6IkKrD/jIZyTlB+8XrHJvcjNgRdmWruNdN9i9RK/JtxakmlUdPwKubKPTCqvbTgzGhrw==} - parse5@6.0.1: - resolution: {integrity: sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==} - parse5@8.0.0: resolution: {integrity: sha512-9m4m5GSgXjL4AjumKzq1Fgfp3Z8rsvjRNbnkVwfu2ImRqE5D0LnY2QfDen18FSY9C573YU5XxSapdHZTZ2WolA==} @@ -7383,10 +6950,6 @@ packages: path-to-regexp@8.3.0: resolution: {integrity: sha512-7jdwVIRtsP8MYpdXSwOS0YdD0Du+qOoF/AEPIt88PcCFrZCzx41oxku1jD88hZBwbNUIEfpqvuhjFaMAqMTWnA==} - path-type@4.0.0: - resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} - engines: {node: '>=8'} - pathe@1.1.2: resolution: {integrity: sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==} @@ -7466,10 +7029,6 @@ packages: resolution: {integrity: sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==} engines: {node: '>=4'} - portfinder@1.0.38: - resolution: {integrity: sha512-rEwq/ZHlJIKw++XtLAO8PPuOQA/zaPJOZJ37BVuN97nLpMJeuDVLVGRwbFoBgLudgdTMP2hdRJP++H+8QOA3vg==} - engines: {node: '>= 10.12'} - portscanner@2.2.0: resolution: {integrity: sha512-IFroCz/59Lqa2uBvzK3bKDbDDIEaAY8XJ1jFxcLWTqosrsc32//P4VuSB2vZXoHiHqOmx8B5L5hnKOxL/7FlPw==} engines: {node: '>=0.4', npm: '>=1.0.0'} @@ -7595,10 +7154,6 @@ packages: resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} engines: {node: '>= 0.10'} - proxy-agent@6.5.0: - resolution: {integrity: sha512-TmatMXdr2KlRiA2CyDu8GqR8EjahTG3aY3nXjdzFyoZbmB8hrBsTyMezhULIXKnC0jpfjlmiZ3+EaCzoInSu/A==} - engines: {node: '>= 14'} - proxy-from-env@1.1.0: resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} @@ -7628,10 +7183,6 @@ packages: resolution: {integrity: sha512-MRtTAZfQTluz3U2oU/X2VqVWPcR1+94nbA2V6ZrSZRVEwLqZ8eclZ551qGFQD/vD2PYqHJwWOW/fpC721uznVw==} engines: {node: '>=14.1.0'} - puppeteer-core@24.37.3: - resolution: {integrity: sha512-fokQ8gv+hNgsRWqVuP5rUjGp+wzV5aMTP3fcm8ekNabmLGlJdFHas1OdMscAH9Gzq4Qcf7cfI/Pe6wEcAqQhqg==} - engines: {node: '>=18'} - puppeteer@18.2.1: resolution: {integrity: sha512-7+UhmYa7wxPh2oMRwA++k8UGVDxh3YdWFB52r9C3tM81T6BU7cuusUSxImz0GEYSOYUKk/YzIhkQ6+vc0gHbxQ==} engines: {node: '>=14.1.0'} @@ -7789,10 +7340,6 @@ packages: resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} engines: {node: '>=4'} - resolve-path@1.4.0: - resolution: {integrity: sha512-i1xevIst/Qa+nA9olDxLWnLk8YZbi8R/7JPbCMcgyWaFR6bKWaexgJgEB5oc2PKMjYdrHynyz0NY+if+H98t1w==} - engines: {node: '>= 0.8'} - resolve-pkg-maps@1.0.0: resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} @@ -7812,10 +7359,6 @@ packages: responselike@2.0.1: resolution: {integrity: sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==} - restore-cursor@3.1.0: - resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==} - engines: {node: '>=8'} - restore-cursor@5.1.0: resolution: {integrity: sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==} engines: {node: '>=18'} @@ -8045,9 +7588,6 @@ packages: setimmediate@1.0.5: resolution: {integrity: sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==} - setprototypeof@1.1.0: - resolution: {integrity: sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==} - setprototypeof@1.2.0: resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} @@ -8097,14 +7637,6 @@ packages: resolution: {integrity: sha512-/fUgUhYghuLzVT/gaJoeVehLCgZiUxPCPMcyVNY0lIf/cTCz58K/WTI7PefDarXxp9nUKpEwg1yyz3eSBMTtgA==} engines: {node: ^20.17.0 || >=22.9.0} - slash@3.0.0: - resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} - engines: {node: '>=8'} - - slice-ansi@4.0.0: - resolution: {integrity: sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==} - engines: {node: '>=10'} - slice-ansi@7.1.2: resolution: {integrity: sha512-iOBWFgUX7caIZiuutICxVgX1SdxwAVFFKwt1EvMYYec/NWO5meOJ6K5uQxhrYBdQJne4KxiqZc+KptFOWFSI9w==} engines: {node: '>=18'} @@ -8325,10 +7857,6 @@ packages: resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} engines: {node: '>=4'} - strip-final-newline@2.0.0: - resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} - engines: {node: '>=6'} - strip-json-comments@3.1.1: resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} engines: {node: '>=8'} @@ -8359,10 +7887,6 @@ packages: symbol-tree@3.2.4: resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==} - table-layout@4.1.1: - resolution: {integrity: sha512-iK5/YhZxq5GO5z8wb0bY1317uDF3Zjpha0QFFLA8/trAoiLbQD0HUbMesEaxyzUgDxi2QlcbM8IvqOlEjgoXBA==} - engines: {node: '>=12.17'} - tapable@2.3.0: resolution: {integrity: sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==} engines: {node: '>=6'} @@ -8370,9 +7894,6 @@ packages: tar-fs@2.1.1: resolution: {integrity: sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==} - tar-fs@3.1.1: - resolution: {integrity: sha512-LZA0oaPOc2fVo82Txf3gw+AkEd38szODlptMYejQUhndHMLQ9M059uXR+AfS7DNo0NpINvSqDsvyaCrBVkptWg==} - tar-stream@2.2.0: resolution: {integrity: sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==} engines: {node: '>=6'} @@ -8500,10 +8021,6 @@ packages: tr46@0.0.3: resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} - tr46@5.1.1: - resolution: {integrity: sha512-hdF5ZgjTqgAntKkklYw0R03MG2x/bSzTtkxmIRw/sTNV8YXsCJ1tfLAX23lhxhHJlEf3CRCOCGGWw3vI3GaSPw==} - engines: {node: '>=18'} - tr46@6.0.0: resolution: {integrity: sha512-bLVMLPtstlZ4iMQHpFHTR7GAGj2jxi8Dg0s2h2MafAE4uSWF98FC/3MomU51iQAMf8/qDUbKWf5GxuvvVcXEhw==} engines: {node: '>=20'} @@ -8547,10 +8064,6 @@ packages: tslib@2.8.1: resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} - tsscmp@1.0.6: - resolution: {integrity: sha512-LxhtAkPDTkVCMQjt2h6eBVY28KCjikZqZfMcC15YBeNjkgUpdCfBu5HoiOTDu86v6smE8yOjyEktJ8hlbANHQA==} - engines: {node: '>=0.6.x'} - tsx@4.21.0: resolution: {integrity: sha512-5C1sg4USs1lfG0GFb2RLXsdpXqBSEhAaA/0kPL01wxzpMqLILNxIxIOKiILz+cdg/pLnOUxFYOR5yhHU666wbw==} engines: {node: '>=18.0.0'} @@ -8581,10 +8094,6 @@ packages: resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} engines: {node: '>= 0.8.0'} - type-fest@0.21.3: - resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} - engines: {node: '>=10'} - type-is@1.6.18: resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} engines: {node: '>= 0.6'} @@ -8615,22 +8124,11 @@ packages: typed-graphqlify@3.1.6: resolution: {integrity: sha512-Snlg1ZrokbkQuemOb4xjWWCJrNcOMeb2Ii0/BwMfwLCcJVNjygyqhrFkrYNvi4gDrwWFrGE0TvxxM+Slym2JMg==} - typed-query-selector@2.12.0: - resolution: {integrity: sha512-SbklCd1F0EiZOyPiW192rrHZzZ5sBijB6xM+cpmrwDqObvdtunOHHIk9fCGsoK5JVIYXoyEp4iEdE3upFH3PAg==} - typescript@5.9.3: resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==} engines: {node: '>=14.17'} hasBin: true - typical@4.0.0: - resolution: {integrity: sha512-VAH4IvQ7BDFYglMd7BPRDfLgxZZX4O4TFcRDA6EN5X7erNJJq+McIEp8np9aVtxrCJ6qx4GTYVfOWNjcqwZgRw==} - engines: {node: '>=8'} - - typical@7.3.0: - resolution: {integrity: sha512-ya4mg/30vm+DOWfBg4YK3j2WD6TWtRkCbasOJr40CseYENzCUby/7rIvXA99JGsQHeNxLbnXdyLLxKSv3tauFw==} - engines: {node: '>=12.17'} - ua-parser-js@0.7.41: resolution: {integrity: sha512-O3oYyCMPYgNNHuO7Jjk3uacJWZF8loBgwrfd/5LE/HyZ3lUIOdniQ7DNXJcIgZbwioZxk0fLfI4EVnetdiX5jg==} hasBin: true @@ -8747,10 +8245,6 @@ packages: v8-compile-cache-lib@3.0.1: resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} - v8-to-istanbul@9.3.0: - resolution: {integrity: sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==} - engines: {node: '>=10.12.0'} - validate-npm-package-license@3.0.4: resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} @@ -8886,9 +8380,6 @@ packages: web-vitals@4.2.4: resolution: {integrity: sha512-r4DIlprAGwJ7YM11VZp4R884m0Vmgr6EAKe3P+kO0PPj3Unqyvv59rczf6UiGcb9Z8QxZVcqKNwv/g0WNdWwsw==} - webdriver-bidi-protocol@0.4.1: - resolution: {integrity: sha512-ARrjNjtWRRs2w4Tk7nqrf2gBI0QXWuOmMCx2hU+1jUt6d00MjMxURrhxhGbrsoiZKJrhTSTzbIrc554iKI10qw==} - webdriver-js-extender@2.1.0: resolution: {integrity: sha512-lcUKrjbBfCK6MNsh7xaY2UAUmZwe+/ib03AjVOpFobX4O7+83BUveSrLfU0Qsyb1DaKJdQRbuU+kM9aZ6QUhiQ==} engines: {node: '>=6.9.x'} @@ -8901,10 +8392,6 @@ packages: webidl-conversions@3.0.1: resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} - webidl-conversions@7.0.0: - resolution: {integrity: sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==} - engines: {node: '>=12'} - webidl-conversions@8.0.1: resolution: {integrity: sha512-BMhLD/Sw+GbJC21C/UgyaZX41nPt8bUTg+jWyDeg7e7YN4xOM05YPSIXceACnXVtqyEw/LMClUQMtMZ+PGGpqQ==} engines: {node: '>=20'} @@ -8971,10 +8458,6 @@ packages: resolution: {integrity: sha512-sXcNcHOC51uPGF0P/D4NVtrkjSU2fNsm9iog4ZvZJsL3rjoDAzXZhkm2MWt1y+PUdggKAYVoMAIYcs78wJ51Cw==} engines: {node: '>=20'} - whatwg-url@14.2.0: - resolution: {integrity: sha512-De72GdQZzNTUBBChsXueQUnPKDkg/5A5zp7pFDuQAj5UFoENpiACU0wlCvzpAGnTkj++ihpKwKyYewn/XNUbKw==} - engines: {node: '>=18'} - whatwg-url@16.0.0: resolution: {integrity: sha512-9CcxtEKsf53UFwkSUZjG+9vydAsFO4lFHBpJUtjBcoJOCJpKnSJNwCw813zrYJHpCJ7sgfbtOe0V5Ku7Pa1XMQ==} engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0} @@ -9030,10 +8513,6 @@ packages: wordwrap@1.0.0: resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==} - wordwrapjs@5.1.1: - resolution: {integrity: sha512-0yweIbkINJodk27gX9LBGMzyQdBDan3s/dEAiwBOj+Mf0PPyWL6/rikalkv8EeD0E8jm4o5RXEOrFTP3NXbhJg==} - engines: {node: '>=12.17'} - wrap-ansi@6.2.0: resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} engines: {node: '>=8'} @@ -9053,18 +8532,6 @@ packages: wrappy@1.0.2: resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} - ws@7.5.10: - resolution: {integrity: sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==} - engines: {node: '>=8.3.0'} - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: ^5.0.2 - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true - ws@8.18.3: resolution: {integrity: sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==} engines: {node: '>=10.0.0'} @@ -9193,10 +8660,6 @@ packages: yauzl@2.10.0: resolution: {integrity: sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==} - ylru@1.4.0: - resolution: {integrity: sha512-2OQsPNEmBCvXuFlIni/a+Rn+R2pHW9INm0BxXJ4hVDA8TirqMj+J/Rp9ItLatT/5pZqWwefVrTQcHpixsxnVlA==} - engines: {node: '>= 4.0.0'} - yn@3.1.1: resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==} engines: {node: '>=6'} @@ -9214,9 +8677,6 @@ packages: peerDependencies: zod: ^3.25 || ^4 - zod@3.25.76: - resolution: {integrity: sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==} - zod@4.3.6: resolution: {integrity: sha512-rftlrkhHZOcjDwkGlnUtZZkvaPHCsDATp4pGpuOOMDaTdDDXF91wuVDJoWoPsKX/3YPQ5fHuF3STjcYyKr+Qhg==} @@ -10826,8 +10286,6 @@ snapshots: protobufjs: 7.5.4 yargs: 17.7.2 - '@hapi/bourne@3.0.0': {} - '@harperfast/extended-iterable@1.0.3': optional: true @@ -11707,21 +11165,6 @@ snapshots: '@protobufjs/utf8@1.1.0': {} - '@puppeteer/browsers@2.12.1': - dependencies: - debug: 4.4.3(supports-color@10.2.2) - extract-zip: 2.0.1 - progress: 2.0.3 - proxy-agent: 6.5.0 - semver: 7.7.4 - tar-fs: 3.1.1 - yargs: 17.7.2 - transitivePeerDependencies: - - bare-abort-controller - - bare-buffer - - react-native-b4a - - supports-color - '@rolldown/binding-android-arm64@1.0.0-rc.5': optional: true @@ -11787,16 +11230,6 @@ snapshots: optionalDependencies: rollup: 4.57.1 - '@rollup/plugin-node-resolve@15.3.1(rollup@4.57.1)': - dependencies: - '@rollup/pluginutils': 5.3.0(rollup@4.57.1) - '@types/resolve': 1.20.2 - deepmerge: 4.3.1 - is-module: 1.0.0 - resolve: 1.22.11 - optionalDependencies: - rollup: 4.57.1 - '@rollup/plugin-node-resolve@16.0.3(rollup@4.57.1)': dependencies: '@rollup/pluginutils': 5.3.0(rollup@4.57.1) @@ -11964,8 +11397,6 @@ snapshots: '@tootallnate/once@2.0.0': {} - '@tootallnate/quickjs-emscripten@0.23.0': {} - '@tsconfig/node10@1.0.12': {} '@tsconfig/node12@1.0.11': {} @@ -11986,12 +11417,6 @@ snapshots: tslib: 2.8.1 optional: true - '@types/accepts@1.3.7': - dependencies: - '@types/node': 22.19.11 - - '@types/babel__code-frame@7.27.0': {} - '@types/babel__core@7.20.5': dependencies: '@babel/parser': 7.29.0 @@ -12040,13 +11465,6 @@ snapshots: dependencies: '@types/node': 22.19.11 - '@types/co-body@6.1.3': - dependencies: - '@types/node': 22.19.11 - '@types/qs': 6.14.0 - - '@types/command-line-args@5.2.3': {} - '@types/connect-history-api-fallback@1.5.4': dependencies: '@types/express-serve-static-core': 4.19.8 @@ -12056,23 +11474,10 @@ snapshots: dependencies: '@types/node': 22.19.11 - '@types/content-disposition@0.5.9': {} - - '@types/convert-source-map@2.0.3': {} - - '@types/cookies@0.9.2': - dependencies: - '@types/connect': 3.4.38 - '@types/express': 5.0.6 - '@types/keygrip': 1.0.6 - '@types/node': 22.19.11 - '@types/cors@2.8.19': dependencies: '@types/node': 22.19.11 - '@types/debounce@1.2.4': {} - '@types/deep-eql@4.0.2': {} '@types/duplexify@3.6.5': @@ -12134,8 +11539,6 @@ snapshots: dependencies: '@types/node': 22.19.11 - '@types/http-assert@1.5.6': {} - '@types/http-errors@2.0.5': {} '@types/http-proxy@1.17.17': @@ -12144,16 +11547,6 @@ snapshots: '@types/ini@4.1.1': {} - '@types/istanbul-lib-coverage@2.0.6': {} - - '@types/istanbul-lib-report@3.0.3': - dependencies: - '@types/istanbul-lib-coverage': 2.0.6 - - '@types/istanbul-reports@3.0.4': - dependencies: - '@types/istanbul-lib-report': 3.0.3 - '@types/jasmine-reporters@2.5.3': dependencies: '@types/jasmine': 6.0.0 @@ -12171,23 +11564,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@types/keygrip@1.0.6': {} - - '@types/koa-compose@3.2.9': - dependencies: - '@types/koa': 2.15.0 - - '@types/koa@2.15.0': - dependencies: - '@types/accepts': 1.3.7 - '@types/content-disposition': 0.5.9 - '@types/cookies': 0.9.2 - '@types/http-assert': 1.5.6 - '@types/http-errors': 2.0.5 - '@types/keygrip': 1.0.6 - '@types/koa-compose': 3.2.9 - '@types/node': 22.19.11 - '@types/less@3.0.8': {} '@types/loader-utils@3.0.0(esbuild@0.27.3)': @@ -12244,8 +11620,6 @@ snapshots: '@types/parse-glob@3.0.32': {} - '@types/parse5@6.0.3': {} - '@types/picomatch@4.0.2': {} '@types/progress@2.0.7': @@ -12322,10 +11696,6 @@ snapshots: '@types/which@3.0.4': {} - '@types/ws@7.4.7': - dependencies: - '@types/node': 22.19.11 - '@types/ws@8.18.1': dependencies: '@types/node': 22.19.11 @@ -12650,178 +12020,6 @@ snapshots: '@vitest/pretty-format': 4.0.18 tinyrainbow: 3.0.3 - '@web/browser-logs@0.4.1': - dependencies: - errorstacks: 2.4.1 - - '@web/config-loader@0.3.3': {} - - '@web/dev-server-core@0.7.5(bufferutil@4.1.0)': - dependencies: - '@types/koa': 2.15.0 - '@types/ws': 7.4.7 - '@web/parse5-utils': 2.1.1 - chokidar: 4.0.3 - clone: 2.1.2 - es-module-lexer: 1.7.0 - get-stream: 6.0.1 - is-stream: 2.0.1 - isbinaryfile: 5.0.7 - koa: 2.16.3 - koa-etag: 4.0.0 - koa-send: 5.0.1 - koa-static: 5.0.0 - lru-cache: 8.0.5 - mime-types: 2.1.35 - parse5: 6.0.1 - picomatch: 2.3.1 - ws: 7.5.10(bufferutil@4.1.0) - transitivePeerDependencies: - - bufferutil - - supports-color - - utf-8-validate - - '@web/dev-server-rollup@0.6.4(bufferutil@4.1.0)': - dependencies: - '@rollup/plugin-node-resolve': 15.3.1(rollup@4.57.1) - '@web/dev-server-core': 0.7.5(bufferutil@4.1.0) - nanocolors: 0.2.13 - parse5: 6.0.1 - rollup: 4.57.1 - whatwg-url: 14.2.0 - transitivePeerDependencies: - - bufferutil - - supports-color - - utf-8-validate - - '@web/dev-server@0.4.6(bufferutil@4.1.0)': - dependencies: - '@babel/code-frame': 7.29.0 - '@types/command-line-args': 5.2.3 - '@web/config-loader': 0.3.3 - '@web/dev-server-core': 0.7.5(bufferutil@4.1.0) - '@web/dev-server-rollup': 0.6.4(bufferutil@4.1.0) - camelcase: 6.3.0 - command-line-args: 5.2.1 - command-line-usage: 7.0.3 - debounce: 1.2.1 - deepmerge: 4.3.1 - internal-ip: 6.2.0 - nanocolors: 0.2.13 - open: 8.4.2 - portfinder: 1.0.38 - transitivePeerDependencies: - - bufferutil - - supports-color - - utf-8-validate - - '@web/parse5-utils@2.1.1': - dependencies: - '@types/parse5': 6.0.3 - parse5: 6.0.1 - - '@web/test-runner-chrome@0.18.1(bufferutil@4.1.0)': - dependencies: - '@web/test-runner-core': 0.13.4(bufferutil@4.1.0) - '@web/test-runner-coverage-v8': 0.8.0(bufferutil@4.1.0) - chrome-launcher: 0.15.2 - puppeteer-core: 24.37.3(bufferutil@4.1.0) - transitivePeerDependencies: - - bare-abort-controller - - bare-buffer - - bufferutil - - react-native-b4a - - supports-color - - utf-8-validate - - '@web/test-runner-commands@0.9.0(bufferutil@4.1.0)': - dependencies: - '@web/test-runner-core': 0.13.4(bufferutil@4.1.0) - mkdirp: 1.0.4 - transitivePeerDependencies: - - bufferutil - - supports-color - - utf-8-validate - - '@web/test-runner-core@0.13.4(bufferutil@4.1.0)': - dependencies: - '@babel/code-frame': 7.29.0 - '@types/babel__code-frame': 7.27.0 - '@types/co-body': 6.1.3 - '@types/convert-source-map': 2.0.3 - '@types/debounce': 1.2.4 - '@types/istanbul-lib-coverage': 2.0.6 - '@types/istanbul-reports': 3.0.4 - '@web/browser-logs': 0.4.1 - '@web/dev-server-core': 0.7.5(bufferutil@4.1.0) - chokidar: 4.0.3 - cli-cursor: 3.1.0 - co-body: 6.2.0 - convert-source-map: 2.0.0 - debounce: 1.2.1 - dependency-graph: 0.11.0 - globby: 11.1.0 - internal-ip: 6.2.0 - istanbul-lib-coverage: 3.2.2 - istanbul-lib-report: 3.0.1 - istanbul-reports: 3.2.0 - log-update: 4.0.0 - nanocolors: 0.2.13 - nanoid: 3.3.11 - open: 8.4.2 - picomatch: 2.3.1 - source-map: 0.7.6 - transitivePeerDependencies: - - bufferutil - - supports-color - - utf-8-validate - - '@web/test-runner-coverage-v8@0.8.0(bufferutil@4.1.0)': - dependencies: - '@web/test-runner-core': 0.13.4(bufferutil@4.1.0) - istanbul-lib-coverage: 3.2.2 - lru-cache: 8.0.5 - picomatch: 2.3.1 - v8-to-istanbul: 9.3.0 - transitivePeerDependencies: - - bufferutil - - supports-color - - utf-8-validate - - '@web/test-runner-mocha@0.9.0(bufferutil@4.1.0)': - dependencies: - '@web/test-runner-core': 0.13.4(bufferutil@4.1.0) - transitivePeerDependencies: - - bufferutil - - supports-color - - utf-8-validate - - '@web/test-runner@0.20.2(bufferutil@4.1.0)': - dependencies: - '@web/browser-logs': 0.4.1 - '@web/config-loader': 0.3.3 - '@web/dev-server': 0.4.6(bufferutil@4.1.0) - '@web/test-runner-chrome': 0.18.1(bufferutil@4.1.0) - '@web/test-runner-commands': 0.9.0(bufferutil@4.1.0) - '@web/test-runner-core': 0.13.4(bufferutil@4.1.0) - '@web/test-runner-mocha': 0.9.0(bufferutil@4.1.0) - camelcase: 6.3.0 - command-line-args: 5.2.1 - command-line-usage: 7.0.3 - convert-source-map: 2.0.0 - diff: 5.2.2 - globby: 11.1.0 - nanocolors: 0.2.13 - portfinder: 1.0.38 - source-map: 0.7.6 - transitivePeerDependencies: - - bare-abort-controller - - bare-buffer - - bufferutil - - react-native-b4a - - supports-color - - utf-8-validate - '@webassemblyjs/ast@1.14.1': dependencies: '@webassemblyjs/helper-numbers': 1.13.2 @@ -13026,10 +12224,6 @@ snapshots: ansi-colors@4.1.3: {} - ansi-escapes@4.3.2: - dependencies: - type-fest: 0.21.3 - ansi-escapes@7.3.0: dependencies: environment: 1.1.0 @@ -13061,10 +12255,6 @@ snapshots: argparse@2.0.1: {} - array-back@3.1.0: {} - - array-back@6.2.2: {} - array-buffer-byte-length@1.0.2: dependencies: call-bound: 1.0.4 @@ -13089,8 +12279,6 @@ snapshots: dependencies: array-uniq: 1.0.3 - array-union@2.1.0: {} - array-union@3.0.1: {} array-uniq@1.0.3: {} @@ -13147,18 +12335,12 @@ snapshots: assertion-error@2.0.1: {} - ast-types@0.13.4: - dependencies: - tslib: 2.8.1 - ast-v8-to-istanbul@0.3.11: dependencies: '@jridgewell/trace-mapping': 0.3.31 estree-walker: 3.0.3 js-tokens: 10.0.0 - astral-regex@2.0.0: {} - async-each-series@0.1.1: {} async-function@1.0.0: {} @@ -13238,49 +12420,12 @@ snapshots: bare-events@2.8.2: {} - bare-fs@4.5.4: - dependencies: - bare-events: 2.8.2 - bare-path: 3.0.0 - bare-stream: 2.7.0(bare-events@2.8.2) - bare-url: 2.3.2 - fast-fifo: 1.3.2 - transitivePeerDependencies: - - bare-abort-controller - - react-native-b4a - optional: true - - bare-os@3.6.2: - optional: true - - bare-path@3.0.0: - dependencies: - bare-os: 3.6.2 - optional: true - - bare-stream@2.7.0(bare-events@2.8.2): - dependencies: - streamx: 2.23.0 - optionalDependencies: - bare-events: 2.8.2 - transitivePeerDependencies: - - bare-abort-controller - - react-native-b4a - optional: true - - bare-url@2.3.2: - dependencies: - bare-path: 3.0.0 - optional: true - base64-js@1.5.1: {} base64id@2.0.0: {} baseline-browser-mapping@2.9.19: {} - basic-ftp@5.1.0: {} - batch@0.6.1: {} bcrypt-pbkdf@1.0.2: @@ -13500,11 +12645,6 @@ snapshots: ssri: 13.0.1 unique-filename: 5.0.0 - cache-content-type@1.0.1: - dependencies: - mime-types: 2.1.35 - ylru: 1.4.0 - cacheable-lookup@6.1.0: {} cacheable-request@7.0.2: @@ -13538,18 +12678,12 @@ snapshots: camelcase@5.3.1: {} - camelcase@6.3.0: {} - caniuse-lite@1.0.30001770: {} caseless@0.12.0: {} chai@6.2.2: {} - chalk-template@0.4.0: - dependencies: - chalk: 4.1.2 - chalk@1.1.3: dependencies: ansi-styles: 2.2.1 @@ -13599,27 +12733,8 @@ snapshots: chownr@3.0.0: {} - chrome-launcher@0.15.2: - dependencies: - '@types/node': 22.19.11 - escape-string-regexp: 4.0.0 - is-wsl: 2.2.0 - lighthouse-logger: 1.4.2 - transitivePeerDependencies: - - supports-color - chrome-trace-event@1.0.4: {} - chromium-bidi@14.0.0(devtools-protocol@0.0.1566079): - dependencies: - devtools-protocol: 0.0.1566079 - mitt: 3.0.1 - zod: 3.25.76 - - cli-cursor@3.1.0: - dependencies: - restore-cursor: 3.1.0 - cli-cursor@5.0.0: dependencies: restore-cursor: 5.1.0 @@ -13675,18 +12790,6 @@ snapshots: dependencies: mimic-response: 1.0.1 - clone@2.1.2: {} - - co-body@6.2.0: - dependencies: - '@hapi/bourne': 3.0.0 - inflation: 2.1.0 - qs: 6.15.0 - raw-body: 2.5.3 - type-is: 1.6.18 - - co@4.6.0: {} - collection-utils@1.0.1: {} color-convert@2.0.1: @@ -13703,20 +12806,6 @@ snapshots: dependencies: delayed-stream: 1.0.0 - command-line-args@5.2.1: - dependencies: - array-back: 3.1.0 - find-replace: 3.0.0 - lodash.camelcase: 4.3.0 - typical: 4.0.0 - - command-line-usage@7.0.3: - dependencies: - array-back: 6.2.2 - chalk-template: 0.4.0 - table-layout: 4.1.1 - typical: 7.3.0 - commander@14.0.3: {} commander@2.20.3: {} @@ -13791,11 +12880,6 @@ snapshots: cookie@0.7.2: {} - cookies@0.9.1: - dependencies: - depd: 2.0.0 - keygrip: 1.1.0 - copy-anything@2.0.6: dependencies: is-what: 3.14.1 @@ -13901,8 +12985,6 @@ snapshots: data-uri-to-buffer@4.0.1: {} - data-uri-to-buffer@6.0.2: {} - data-urls@7.0.0: dependencies: whatwg-mimetype: 5.0.0 @@ -13932,8 +13014,6 @@ snapshots: dayjs@1.11.13: {} - debounce@1.2.1: {} - debug@2.6.9: dependencies: ms: 2.0.0 @@ -13970,8 +13050,6 @@ snapshots: dependencies: mimic-response: 3.1.0 - deep-equal@1.0.1: {} - deep-is@0.1.4: {} deepmerge@4.3.1: {} @@ -13983,10 +13061,6 @@ snapshots: bundle-name: 4.1.0 default-browser-id: 5.0.1 - default-gateway@6.0.3: - dependencies: - execa: 5.1.1 - defer-to-connect@2.0.1: {} define-data-property@1.1.4: @@ -13995,8 +13069,6 @@ snapshots: es-errors: 1.3.0 gopd: 1.2.0 - define-lazy-prop@2.0.0: {} - define-lazy-prop@3.0.0: {} define-properties@1.2.1: @@ -14007,12 +13079,6 @@ snapshots: defu@6.1.4: {} - degenerator@5.0.1: - dependencies: - ast-types: 0.13.4 - escodegen: 2.1.0 - esprima: 4.0.1 - del@2.2.2: dependencies: globby: 5.0.0 @@ -14025,14 +13091,10 @@ snapshots: delayed-stream@1.0.0: {} - delegates@1.0.0: {} - depd@1.1.2: {} depd@2.0.0: {} - dependency-graph@0.11.0: {} - dependency-graph@1.0.0: {} destroy@1.2.0: {} @@ -14046,18 +13108,10 @@ snapshots: devtools-protocol@0.0.1045489: {} - devtools-protocol@0.0.1566079: {} - di@0.0.1: {} diff@4.0.4: {} - diff@5.2.2: {} - - dir-glob@3.0.1: - dependencies: - path-type: 4.0.0 - dns-packet@5.6.1: dependencies: '@leichtgewicht/ip-codec': 2.0.5 @@ -14223,8 +13277,6 @@ snapshots: dependencies: is-arrayish: 0.2.1 - errorstacks@2.4.1: {} - es-abstract@1.24.1: dependencies: array-buffer-byte-length: 1.0.2 @@ -14356,14 +13408,6 @@ snapshots: escape-string-regexp@4.0.0: {} - escodegen@2.1.0: - dependencies: - esprima: 4.0.1 - estraverse: 5.3.0 - esutils: 2.0.3 - optionalDependencies: - source-map: 0.6.1 - eslint-config-prettier@10.1.8(eslint@10.0.2(jiti@2.6.1)): dependencies: eslint: 10.0.2(jiti@2.6.1) @@ -14484,8 +13528,6 @@ snapshots: acorn-jsx: 5.3.2(acorn@8.16.0) eslint-visitor-keys: 5.0.1 - esprima@4.0.1: {} - esquery@1.7.0: dependencies: estraverse: 5.3.0 @@ -14530,18 +13572,6 @@ snapshots: dependencies: eventsource-parser: 3.0.6 - execa@5.1.1: - dependencies: - cross-spawn: 7.0.6 - get-stream: 6.0.1 - human-signals: 2.1.0 - is-stream: 2.0.1 - merge-stream: 2.0.0 - npm-run-path: 4.0.1 - onetime: 5.1.2 - signal-exit: 3.0.7 - strip-final-newline: 2.0.0 - exit@0.1.2: {} expect-type@1.3.0: {} @@ -14753,10 +13783,6 @@ snapshots: common-path-prefix: 3.0.0 pkg-dir: 8.0.0 - find-replace@3.0.0: - dependencies: - array-back: 3.1.0 - find-up-simple@1.0.1: {} find-up@4.1.0: @@ -14958,14 +13984,6 @@ snapshots: dependencies: resolve-pkg-maps: 1.0.0 - get-uri@6.0.5: - dependencies: - basic-ftp: 5.1.0 - data-uri-to-buffer: 6.0.2 - debug: 4.4.3(supports-color@10.2.2) - transitivePeerDependencies: - - supports-color - getpass@0.1.7: dependencies: assert-plus: 1.0.0 @@ -15025,15 +14043,6 @@ snapshots: define-properties: 1.2.1 gopd: 1.2.0 - globby@11.1.0: - dependencies: - array-union: 2.1.0 - dir-glob: 3.0.1 - fast-glob: 3.3.3 - ignore: 5.3.2 - merge2: 1.4.1 - slash: 3.0.0 - globby@5.0.0: dependencies: array-union: 1.0.2 @@ -15194,22 +14203,10 @@ snapshots: domutils: 3.2.2 entities: 7.0.1 - http-assert@1.5.0: - dependencies: - deep-equal: 1.0.1 - http-errors: 1.8.1 - http-cache-semantics@4.2.0: {} http-deceiver@1.2.7: {} - http-errors@1.6.3: - dependencies: - depd: 1.1.2 - inherits: 2.0.3 - setprototypeof: 1.1.0 - statuses: 1.5.0 - http-errors@1.8.1: dependencies: depd: 1.1.2 @@ -15322,8 +14319,6 @@ snapshots: transitivePeerDependencies: - supports-color - human-signals@2.1.0: {} - husky@9.1.7: {} hyperdyperid@1.2.0: {} @@ -15372,15 +14367,11 @@ snapshots: imurmurhash@0.1.4: {} - inflation@2.1.0: {} - inflight@1.0.6: dependencies: once: 1.4.0 wrappy: 1.0.2 - inherits@2.0.3: {} - inherits@2.0.4: {} ini@1.3.8: {} @@ -15391,13 +14382,6 @@ snapshots: dependencies: tslib: 2.8.1 - internal-ip@6.2.0: - dependencies: - default-gateway: 6.0.3 - ipaddr.js: 1.9.1 - is-ip: 3.1.0 - p-event: 4.2.0 - internal-slot@1.1.0: dependencies: es-errors: 1.3.0 @@ -15408,8 +14392,6 @@ snapshots: ip-address@10.1.0: {} - ip-regex@4.3.0: {} - ipaddr.js@1.9.1: {} ipaddr.js@2.3.0: {} @@ -15462,8 +14444,6 @@ snapshots: is-deflate@1.0.0: {} - is-docker@2.2.1: {} - is-docker@3.0.0: {} is-extglob@2.1.1: {} @@ -15500,10 +14480,6 @@ snapshots: is-interactive@2.0.0: {} - is-ip@3.1.0: - dependencies: - ip-regex: 4.3.0 - is-map@2.0.3: {} is-module@1.0.0: {} @@ -15568,8 +14544,6 @@ snapshots: is-stream-ended@0.1.4: {} - is-stream@2.0.1: {} - is-string@1.1.1: dependencies: call-bound: 1.0.4 @@ -15606,10 +14580,6 @@ snapshots: is-wsl@1.1.0: {} - is-wsl@2.2.0: - dependencies: - is-docker: 2.2.1 - is-wsl@3.1.1: dependencies: is-inside-container: 1.0.0 @@ -15622,8 +14592,6 @@ snapshots: isbinaryfile@4.0.10: {} - isbinaryfile@5.0.7: {} - isexe@2.0.0: {} isexe@4.0.0: {} @@ -15916,70 +14884,12 @@ snapshots: - supports-color - utf-8-validate - keygrip@1.1.0: - dependencies: - tsscmp: 1.0.6 - keyv@4.5.4: dependencies: json-buffer: 3.0.1 kind-of@6.0.3: {} - koa-compose@4.1.0: {} - - koa-convert@2.0.0: - dependencies: - co: 4.6.0 - koa-compose: 4.1.0 - - koa-etag@4.0.0: - dependencies: - etag: 1.8.1 - - koa-send@5.0.1: - dependencies: - debug: 4.4.3(supports-color@10.2.2) - http-errors: 1.8.1 - resolve-path: 1.4.0 - transitivePeerDependencies: - - supports-color - - koa-static@5.0.0: - dependencies: - debug: 3.2.7 - koa-send: 5.0.1 - transitivePeerDependencies: - - supports-color - - koa@2.16.3: - dependencies: - accepts: 1.3.8 - cache-content-type: 1.0.1 - content-disposition: 0.5.4 - content-type: 1.0.5 - cookies: 0.9.1 - debug: 4.4.3(supports-color@10.2.2) - delegates: 1.0.0 - depd: 2.0.0 - destroy: 1.2.0 - encodeurl: 1.0.2 - escape-html: 1.0.3 - fresh: 0.5.2 - http-assert: 1.5.0 - http-errors: 1.8.1 - is-generator-function: 1.1.2 - koa-compose: 4.1.0 - koa-convert: 2.0.0 - on-finished: 2.4.1 - only: 0.0.2 - parseurl: 1.3.3 - statuses: 1.5.0 - type-is: 1.6.18 - vary: 1.1.2 - transitivePeerDependencies: - - supports-color - launch-editor@2.12.0: dependencies: picocolors: 1.1.1 @@ -16020,13 +14930,6 @@ snapshots: dependencies: immediate: 3.0.6 - lighthouse-logger@1.4.2: - dependencies: - debug: 2.6.9 - marky: 1.3.0 - transitivePeerDependencies: - - supports-color - limiter@1.1.5: {} lines-and-columns@1.2.4: {} @@ -16111,13 +15014,6 @@ snapshots: is-unicode-supported: 2.1.0 yoctocolors: 2.1.2 - log-update@4.0.0: - dependencies: - ansi-escapes: 4.3.2 - cli-cursor: 3.1.0 - slice-ansi: 4.0.0 - wrap-ansi: 6.2.0 - log-update@7.1.0: dependencies: ansi-escapes: 7.3.0 @@ -16158,8 +15054,6 @@ snapshots: lru-cache@7.18.3: {} - lru-cache@8.0.5: {} - magic-string@0.30.21: dependencies: '@jridgewell/sourcemap-codec': 1.5.5 @@ -16198,8 +15092,6 @@ snapshots: transitivePeerDependencies: - supports-color - marky@1.3.0: {} - math-intrinsics@1.1.0: {} mdn-data@2.12.2: {} @@ -16260,8 +15152,6 @@ snapshots: mime@3.0.0: {} - mimic-fn@2.1.0: {} - mimic-function@5.0.1: {} mimic-response@1.0.1: {} @@ -16338,8 +15228,6 @@ snapshots: mitt@1.2.0: {} - mitt@3.0.1: {} - mkdirp-classic@0.5.3: {} mkdirp@0.5.6: @@ -16386,8 +15274,6 @@ snapshots: mute-stream@3.0.0: {} - nanocolors@0.2.13: {} - nanoid@3.3.11: {} natural-compare@1.4.0: {} @@ -16406,8 +15292,6 @@ snapshots: neo-async@2.6.2: {} - netmask@2.0.2: {} - ng-packagr@21.2.0-next.0(@angular/compiler-cli@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(typescript@5.9.3))(tslib@2.8.1)(typescript@5.9.3): dependencies: '@ampproject/remapping': 2.3.0 @@ -16545,10 +15429,6 @@ snapshots: transitivePeerDependencies: - supports-color - npm-run-path@4.0.1: - dependencies: - path-key: 3.1.1 - nth-check@2.1.1: dependencies: boolbase: 1.0.0 @@ -16612,16 +15492,10 @@ snapshots: dependencies: wrappy: 1.0.2 - onetime@5.1.2: - dependencies: - mimic-fn: 2.1.0 - onetime@7.0.0: dependencies: mimic-function: 5.0.1 - only@0.0.2: {} - open@10.2.0: dependencies: default-browser: 5.5.0 @@ -16638,12 +15512,6 @@ snapshots: powershell-utils: 0.1.0 wsl-utils: 0.3.1 - open@8.4.2: - dependencies: - define-lazy-prop: 2.0.0 - is-docker: 2.2.1 - is-wsl: 2.2.0 - opn@5.3.0: dependencies: is-wsl: 1.1.0 @@ -16683,10 +15551,6 @@ snapshots: p-cancelable@2.1.1: {} - p-event@4.2.0: - dependencies: - p-timeout: 3.2.0 - p-finally@1.0.0: {} p-limit@2.3.0: @@ -16729,24 +15593,6 @@ snapshots: p-try@2.2.0: {} - pac-proxy-agent@7.2.0: - dependencies: - '@tootallnate/quickjs-emscripten': 0.23.0 - agent-base: 7.1.4 - debug: 4.4.3(supports-color@10.2.2) - get-uri: 6.0.5 - http-proxy-agent: 7.0.2 - https-proxy-agent: 7.0.6(supports-color@10.2.2) - pac-resolver: 7.0.1 - socks-proxy-agent: 8.0.5 - transitivePeerDependencies: - - supports-color - - pac-resolver@7.0.1: - dependencies: - degenerator: 5.0.1 - netmask: 2.0.2 - package-json-from-dist@1.0.1: {} pacote@21.3.1: @@ -16798,8 +15644,6 @@ snapshots: dependencies: parse5: 8.0.0 - parse5@6.0.1: {} - parse5@8.0.0: dependencies: entities: 6.0.1 @@ -16830,8 +15674,6 @@ snapshots: path-to-regexp@8.3.0: {} - path-type@4.0.0: {} - pathe@1.1.2: {} pathe@2.0.3: {} @@ -16911,13 +15753,6 @@ snapshots: pluralize@8.0.0: {} - portfinder@1.0.38: - dependencies: - async: 3.2.6 - debug: 4.4.3(supports-color@10.2.2) - transitivePeerDependencies: - - supports-color - portscanner@2.2.0: dependencies: async: 2.6.4 @@ -17045,19 +15880,6 @@ snapshots: forwarded: 0.2.0 ipaddr.js: 1.9.1 - proxy-agent@6.5.0: - dependencies: - agent-base: 7.1.4 - debug: 4.4.3(supports-color@10.2.2) - http-proxy-agent: 7.0.2 - https-proxy-agent: 7.0.6(supports-color@10.2.2) - lru-cache: 7.18.3 - pac-proxy-agent: 7.2.0 - proxy-from-env: 1.1.0 - socks-proxy-agent: 8.0.5 - transitivePeerDependencies: - - supports-color - proxy-from-env@1.1.0: {} prr@1.0.1: @@ -17105,23 +15927,6 @@ snapshots: - supports-color - utf-8-validate - puppeteer-core@24.37.3(bufferutil@4.1.0): - dependencies: - '@puppeteer/browsers': 2.12.1 - chromium-bidi: 14.0.0(devtools-protocol@0.0.1566079) - debug: 4.4.3(supports-color@10.2.2) - devtools-protocol: 0.0.1566079 - typed-query-selector: 2.12.0 - webdriver-bidi-protocol: 0.4.1 - ws: 8.19.0(bufferutil@4.1.0)(utf-8-validate@6.0.6) - transitivePeerDependencies: - - bare-abort-controller - - bare-buffer - - bufferutil - - react-native-b4a - - supports-color - - utf-8-validate - puppeteer@18.2.1(bufferutil@4.1.0)(encoding@0.1.13): dependencies: https-proxy-agent: 5.0.1(supports-color@10.2.2) @@ -17325,11 +16130,6 @@ snapshots: resolve-from@4.0.0: {} - resolve-path@1.4.0: - dependencies: - http-errors: 1.6.3 - path-is-absolute: 1.0.1 - resolve-pkg-maps@1.0.0: {} resolve-url-loader@5.0.0: @@ -17357,11 +16157,6 @@ snapshots: dependencies: lowercase-keys: 2.0.0 - restore-cursor@3.1.0: - dependencies: - onetime: 5.1.2 - signal-exit: 3.0.7 - restore-cursor@5.1.0: dependencies: onetime: 7.0.0 @@ -17669,8 +16464,6 @@ snapshots: setimmediate@1.0.5: {} - setprototypeof@1.1.0: {} - setprototypeof@1.2.0: {} shallow-clone@3.0.1: @@ -17730,14 +16523,6 @@ snapshots: transitivePeerDependencies: - supports-color - slash@3.0.0: {} - - slice-ansi@4.0.0: - dependencies: - ansi-styles: 4.3.0 - astral-regex: 2.0.0 - is-fullwidth-code-point: 3.0.0 - slice-ansi@7.1.2: dependencies: ansi-styles: 6.2.3 @@ -18029,8 +16814,6 @@ snapshots: strip-bom@3.0.0: {} - strip-final-newline@2.0.0: {} - strip-json-comments@3.1.1: {} stubs@3.0.0: {} @@ -18051,11 +16834,6 @@ snapshots: symbol-tree@3.2.4: {} - table-layout@4.1.1: - dependencies: - array-back: 6.2.2 - wordwrapjs: 5.1.1 - tapable@2.3.0: {} tar-fs@2.1.1: @@ -18065,18 +16843,6 @@ snapshots: pump: 3.0.3 tar-stream: 2.2.0 - tar-fs@3.1.1: - dependencies: - pump: 3.0.3 - tar-stream: 3.1.7 - optionalDependencies: - bare-fs: 4.5.4 - bare-path: 3.0.0 - transitivePeerDependencies: - - bare-abort-controller - - bare-buffer - - react-native-b4a - tar-stream@2.2.0: dependencies: bl: 4.1.0 @@ -18210,10 +16976,6 @@ snapshots: tr46@0.0.3: {} - tr46@5.1.1: - dependencies: - punycode: 2.3.1 - tr46@6.0.0: dependencies: punycode: 2.3.1 @@ -18257,8 +17019,6 @@ snapshots: tslib@2.8.1: {} - tsscmp@1.0.6: {} - tsx@4.21.0: dependencies: esbuild: 0.27.3 @@ -18292,8 +17052,6 @@ snapshots: dependencies: prelude-ls: 1.2.1 - type-fest@0.21.3: {} - type-is@1.6.18: dependencies: media-typer: 0.3.0 @@ -18342,14 +17100,8 @@ snapshots: typed-graphqlify@3.1.6: {} - typed-query-selector@2.12.0: {} - typescript@5.9.3: {} - typical@4.0.0: {} - - typical@7.3.0: {} - ua-parser-js@0.7.41: {} ua-parser-js@1.0.41: {} @@ -18448,12 +17200,6 @@ snapshots: v8-compile-cache-lib@3.0.1: {} - v8-to-istanbul@9.3.0: - dependencies: - '@jridgewell/trace-mapping': 0.3.31 - '@types/istanbul-lib-coverage': 2.0.6 - convert-source-map: 2.0.0 - validate-npm-package-license@3.0.4: dependencies: spdx-correct: 3.2.0 @@ -18618,8 +17364,6 @@ snapshots: web-vitals@4.2.4: {} - webdriver-bidi-protocol@0.4.1: {} - webdriver-js-extender@2.1.0: dependencies: '@types/selenium-webdriver': 3.0.26 @@ -18641,8 +17385,6 @@ snapshots: webidl-conversions@3.0.1: {} - webidl-conversions@7.0.0: {} - webidl-conversions@8.0.1: {} webpack-dev-middleware@7.4.5(tslib@2.8.1)(webpack@5.105.2(esbuild@0.27.3)): @@ -18752,11 +17494,6 @@ snapshots: whatwg-mimetype@5.0.0: {} - whatwg-url@14.2.0: - dependencies: - tr46: 5.1.1 - webidl-conversions: 7.0.0 - whatwg-url@16.0.0: dependencies: '@exodus/bytes': 1.14.1 @@ -18836,8 +17573,6 @@ snapshots: wordwrap@1.0.0: {} - wordwrapjs@5.1.1: {} - wrap-ansi@6.2.0: dependencies: ansi-styles: 4.3.0 @@ -18864,10 +17599,6 @@ snapshots: wrappy@1.0.2: {} - ws@7.5.10(bufferutil@4.1.0): - optionalDependencies: - bufferutil: 4.1.0 - ws@8.18.3(bufferutil@4.1.0)(utf-8-validate@6.0.6): optionalDependencies: bufferutil: 4.1.0 @@ -18979,8 +17710,6 @@ snapshots: buffer-crc32: 0.2.13 fd-slicer: 1.1.0 - ylru@1.4.0: {} - yn@3.1.1: {} yocto-queue@0.1.0: {} @@ -18991,8 +17720,6 @@ snapshots: dependencies: zod: 4.3.6 - zod@3.25.76: {} - zod@4.3.6: {} zone.js@0.16.0: {} diff --git a/tests/e2e/tests/jest/aot.ts b/tests/e2e/tests/jest/aot.ts deleted file mode 100644 index b015e2a58757..000000000000 --- a/tests/e2e/tests/jest/aot.ts +++ /dev/null @@ -1,41 +0,0 @@ -import { deleteFile, writeFile } from '../../utils/fs'; -import { updateJsonFile } from '../../utils/project'; -import { applyJestBuilder } from '../../utils/jest'; -import { ng } from '../../utils/process'; - -export default async function (): Promise { - await applyJestBuilder(); - - { - await updateJsonFile('tsconfig.spec.json', (json) => { - return { - ...json, - include: ['src/**/*.spec.ts'], - }; - }); - - await writeFile( - 'src/aot.spec.ts', - ` - import { Component } from '@angular/core'; - - describe('Hello', () => { - it('should *not* contain jit instructions', () => { - @Component({ - template: 'Hello', - }) - class Hello {} - - expect((Hello as any).ɵcmp.template.toString()).not.toContain('jit'); - }); - }); - `.trim(), - ); - - const { stderr } = await ng('test', '--aot'); - - if (!stderr.includes('Ran all test suites.') || stderr.includes('failed')) { - throw new Error(`Components were not transformed using AOT.\STDERR:\n\n${stderr}`); - } - } -} diff --git a/tests/e2e/tests/jest/basic.ts b/tests/e2e/tests/jest/basic.ts deleted file mode 100644 index 2a3b19119edd..000000000000 --- a/tests/e2e/tests/jest/basic.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { applyJestBuilder } from '../../utils/jest'; -import { ng } from '../../utils/process'; - -export default async function (): Promise { - await applyJestBuilder(); - - const { stderr } = await ng('test'); - - if (!stderr.includes('Jest builder is currently EXPERIMENTAL')) { - throw new Error(`No experimental notice in stderr.\nSTDERR:\n\n${stderr}`); - } -} diff --git a/tests/e2e/tests/jest/custom-config.ts b/tests/e2e/tests/jest/custom-config.ts deleted file mode 100644 index 10e481a43fcc..000000000000 --- a/tests/e2e/tests/jest/custom-config.ts +++ /dev/null @@ -1,53 +0,0 @@ -import { deleteFile, writeFile } from '../../utils/fs'; -import { applyJestBuilder } from '../../utils/jest'; -import { ng } from '../../utils/process'; -import { updateJsonFile } from '../../utils/project'; - -export default async function (): Promise { - await applyJestBuilder(); - - { - // Users may incorrectly write a Jest config believing it to be used by Angular. - await writeFile( - 'jest.config.mjs', - ` - export default { - runner: 'does-not-exist', - }; - `.trim(), - ); - - // Should not fail from the above (broken) configuration. Shouldn't use it at all. - const { stderr } = await ng('test'); - - // Should warn that a Jest configuration was found but not used. - if (!stderr.includes('A custom Jest config was found')) { - throw new Error(`No warning about custom Jest config:\nSTDERR:\n\n${stderr}`); - } - if (!stderr.includes('jest.config.mjs')) { - throw new Error(`Warning did not call out 'jest.config.mjs':\nSTDERR:\n\n${stderr}`); - } - - await deleteFile('jest.config.mjs'); - } - - { - // Use `package.json` configuration instead of a `jest.config` file. - await updateJsonFile('package.json', (json) => { - json['jest'] = { - runner: 'does-not-exist', - }; - }); - - // Should not fail from the above (broken) configuration. Shouldn't use it at all. - const { stderr } = await ng('test'); - - // Should warn that a Jest configuration was found but not used. - if (!stderr.includes('A custom Jest config was found')) { - throw new Error(`No warning about custom Jest config:\nSTDERR:\n\n${stderr}`); - } - if (!stderr.includes('package.json')) { - throw new Error(`Warning did not call out 'package.json':\nSTDERR:\n\n${stderr}`); - } - } -} diff --git a/tests/e2e/tests/jest/no-zoneless.ts b/tests/e2e/tests/jest/no-zoneless.ts deleted file mode 100644 index 9a74a0295c4e..000000000000 --- a/tests/e2e/tests/jest/no-zoneless.ts +++ /dev/null @@ -1,29 +0,0 @@ -import { replaceInFile } from '../../utils/fs'; -import { applyJestBuilder } from '../../utils/jest'; -import { installPackage, uninstallPackage } from '../../utils/packages'; -import { ng } from '../../utils/process'; - -export default async function (): Promise { - await applyJestBuilder({ - tsConfig: 'tsconfig.spec.json', - polyfills: ['zone.js', 'zone.js/testing'], - }); - - await replaceInFile( - 'src/app/app.spec.ts', - 'await fixture.whenStable();', - 'fixture.detectChanges();', - ); - - try { - await installPackage('zone.js'); - - const { stderr } = await ng('test'); - - if (!stderr.includes('Jest builder is currently EXPERIMENTAL')) { - throw new Error(`No experimental notice in stderr.\nSTDERR:\n\n${stderr}`); - } - } finally { - await uninstallPackage('zone.js'); - } -} diff --git a/tests/e2e/tests/web-test-runner/basic.ts b/tests/e2e/tests/web-test-runner/basic.ts deleted file mode 100644 index 4985f872fb18..000000000000 --- a/tests/e2e/tests/web-test-runner/basic.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { noSilentNg } from '../../utils/process'; -import { applyWtrBuilder } from '../../utils/web-test-runner'; - -export default async function () { - // Temporary disabled due to failure. - return; - - await applyWtrBuilder(); - - const { stderr } = await noSilentNg('test'); - - if (!stderr.includes('Web Test Runner builder is currently EXPERIMENTAL')) { - throw new Error(`No experimental notice in stderr.\nSTDERR:\n\n${stderr}`); - } -} diff --git a/tests/e2e/utils/jest.ts b/tests/e2e/utils/jest.ts deleted file mode 100644 index 5dc1f0efe464..000000000000 --- a/tests/e2e/utils/jest.ts +++ /dev/null @@ -1,29 +0,0 @@ -import { silentNpm } from './process'; -import { updateJsonFile } from './project'; - -/** Updates the `test` builder in the current workspace to use Jest with the given options. */ -export async function applyJestBuilder( - options: {} = { - polyfills: [], - tsConfig: 'tsconfig.spec.json', - }, -): Promise { - await silentNpm('install', 'jest@30.2.0', 'jest-environment-jsdom@30.2.0', '--save-dev'); - - await updateJsonFile('angular.json', (json) => { - const projects = Object.values(json['projects']); - if (projects.length !== 1) { - throw new Error( - `Expected exactly one project but found ${projects.length} projects named ${Object.keys( - json['projects'], - ).join(', ')}`, - ); - } - const project = projects[0]! as any; - - // Update to Jest builder. - const test = project['architect']['test']; - test['builder'] = '@angular-devkit/build-angular:jest'; - test['options'] = options; - }); -} diff --git a/tests/e2e/utils/web-test-runner.ts b/tests/e2e/utils/web-test-runner.ts deleted file mode 100644 index da66c623b76e..000000000000 --- a/tests/e2e/utils/web-test-runner.ts +++ /dev/null @@ -1,23 +0,0 @@ -import { silentNpm } from './process'; -import { updateJsonFile } from './project'; - -/** Updates the `test` builder in the current workspace to use Web Test Runner with the given options. */ -export async function applyWtrBuilder(): Promise { - await silentNpm('install', '@web/test-runner', '--save-dev'); - - await updateJsonFile('angular.json', (json) => { - const projects = Object.values(json['projects']); - if (projects.length !== 1) { - throw new Error( - `Expected exactly one project but found ${projects.length} projects named ${Object.keys( - json['projects'], - ).join(', ')}`, - ); - } - const project = projects[0]! as any; - - // Update to Web Test Runner builder. - const test = project['architect']['test']; - test['builder'] = '@angular-devkit/build-angular:web-test-runner'; - }); -} From 70a81fac9b947451b1945620c90e54a52ab2ab26 Mon Sep 17 00:00:00 2001 From: Alan Agius <17563226+alan-agius4@users.noreply.github.com> Date: Wed, 25 Feb 2026 15:19:24 +0000 Subject: [PATCH 035/226] refactor(@schematics/angular): remove migrations that cannot be used with version 22 Remove old migrations --- .../migrations/migration-collection.json | 10 -- .../update-module-resolution/migration.ts | 60 ------- .../migration_spec.ts | 118 ------------- .../update-typescript-lib/migration.ts | 94 ----------- .../update-typescript-lib/migration_spec.ts | 159 ------------------ 5 files changed, 441 deletions(-) delete mode 100644 packages/schematics/angular/migrations/update-module-resolution/migration.ts delete mode 100644 packages/schematics/angular/migrations/update-module-resolution/migration_spec.ts delete mode 100644 packages/schematics/angular/migrations/update-typescript-lib/migration.ts delete mode 100644 packages/schematics/angular/migrations/update-typescript-lib/migration_spec.ts diff --git a/packages/schematics/angular/migrations/migration-collection.json b/packages/schematics/angular/migrations/migration-collection.json index 502d121784fd..72d2cdef4030 100644 --- a/packages/schematics/angular/migrations/migration-collection.json +++ b/packages/schematics/angular/migrations/migration-collection.json @@ -13,16 +13,6 @@ "version": "21.0.0", "factory": "./karma/migration", "description": "Remove any karma configuration files that only contain the default content. The default configuration is automatically available without a specific project file." - }, - "update-typescript-lib": { - "version": "21.0.0", - "factory": "./update-typescript-lib/migration", - "description": "Updates the 'lib' property in tsconfig files to use 'es2022' or a more modern version." - }, - "update-module-resolution": { - "version": "21.0.0", - "factory": "./update-module-resolution/migration", - "description": "Update 'moduleResolution' to 'bundler' in TypeScript configurations. You can read more about this, here: https://www.typescriptlang.org/tsconfig/#moduleResolution" } } } diff --git a/packages/schematics/angular/migrations/update-module-resolution/migration.ts b/packages/schematics/angular/migrations/update-module-resolution/migration.ts deleted file mode 100644 index ca0419a4eeab..000000000000 --- a/packages/schematics/angular/migrations/update-module-resolution/migration.ts +++ /dev/null @@ -1,60 +0,0 @@ -/** - * @license - * Copyright Google LLC All Rights Reserved. - * - * Use of this source code is governed by an MIT-style license that can be - * found in the LICENSE file at https://angular.dev/license - */ - -import { JsonObject } from '@angular-devkit/core'; -import { Rule, Tree } from '@angular-devkit/schematics'; -import { JSONFile } from '../../utility/json-file'; -import { allTargetOptions, allWorkspaceTargets, getWorkspace } from '../../utility/workspace'; - -export default function (): Rule { - return async (host) => { - const uniqueTsConfigs = new Set(); - - if (host.exists('tsconfig.json')) { - // Workspace level tsconfig - uniqueTsConfigs.add('tsconfig.json'); - } - - const workspace = await getWorkspace(host); - for (const [, target] of allWorkspaceTargets(workspace)) { - for (const [, opt] of allTargetOptions(target)) { - if (typeof opt?.tsConfig === 'string') { - uniqueTsConfigs.add(opt.tsConfig); - } - } - } - - for (const tsConfig of uniqueTsConfigs) { - if (host.exists(tsConfig)) { - updateModuleResolution(host, tsConfig); - } - } - }; -} - -function updateModuleResolution(host: Tree, tsConfigPath: string): void { - const json = new JSONFile(host, tsConfigPath); - const jsonPath = ['compilerOptions']; - const compilerOptions = json.get(jsonPath); - - if (compilerOptions && typeof compilerOptions === 'object') { - const { moduleResolution, module } = compilerOptions as JsonObject; - if (typeof moduleResolution !== 'string' || moduleResolution.toLowerCase() === 'bundler') { - return; - } - - if (typeof module === 'string' && module.toLowerCase() === 'preserve') { - return; - } - - json.modify(jsonPath, { - ...compilerOptions, - 'moduleResolution': 'bundler', - }); - } -} diff --git a/packages/schematics/angular/migrations/update-module-resolution/migration_spec.ts b/packages/schematics/angular/migrations/update-module-resolution/migration_spec.ts deleted file mode 100644 index 53448e80b66a..000000000000 --- a/packages/schematics/angular/migrations/update-module-resolution/migration_spec.ts +++ /dev/null @@ -1,118 +0,0 @@ -/** - * @license - * Copyright Google LLC All Rights Reserved. - * - * Use of this source code is governed by an MIT-style license that can be - * found in the LICENSE file at https://angular.dev/license - */ - -import { isJsonObject } from '@angular-devkit/core'; -import { EmptyTree } from '@angular-devkit/schematics'; -import { SchematicTestRunner, UnitTestTree } from '@angular-devkit/schematics/testing'; -import { Builders, ProjectType, WorkspaceSchema } from '../../utility/workspace-models'; - -describe('Migration to update moduleResolution', () => { - const schematicName = 'update-module-resolution'; - const schematicRunner = new SchematicTestRunner( - 'migrations', - require.resolve('../migration-collection.json'), - ); - - function createJsonFile(tree: UnitTestTree, filePath: string, content: {}): void { - const stringifiedContent = JSON.stringify(content, undefined, 2); - if (tree.exists(filePath)) { - tree.overwrite(filePath, stringifiedContent); - } else { - tree.create(filePath, stringifiedContent); - } - } - - function getCompilerOptionsValue(tree: UnitTestTree, filePath: string): Record { - const json = tree.readJson(filePath); - if (isJsonObject(json) && isJsonObject(json.compilerOptions)) { - return json.compilerOptions; - } - - throw new Error(`Cannot retrieve 'compilerOptions'.`); - } - - const angularConfig: WorkspaceSchema = { - version: 1, - projects: { - app: { - root: '', - sourceRoot: 'src', - projectType: ProjectType.Application, - prefix: 'app', - architect: { - build: { - builder: Builders.Browser, - options: { - tsConfig: 'src/tsconfig.app.json', - main: '', - polyfills: '', - }, - configurations: { - production: { - tsConfig: 'src/tsconfig.app.prod.json', - }, - }, - }, - test: { - builder: Builders.Karma, - options: { - karmaConfig: '', - tsConfig: 'src/tsconfig.spec.json', - }, - }, - }, - }, - }, - }; - - let tree: UnitTestTree; - beforeEach(() => { - tree = new UnitTestTree(new EmptyTree()); - const compilerOptions = { module: 'es2020', moduleResolution: 'node' }; - const configWithExtends = { extends: './tsconfig.json', compilerOptions }; - - // Workspace - createJsonFile(tree, 'angular.json', angularConfig); - createJsonFile(tree, 'tsconfig.json', { compilerOptions }); - - // Application - createJsonFile(tree, 'src/tsconfig.app.json', configWithExtends); - createJsonFile(tree, 'src/tsconfig.app.prod.json', configWithExtends); - createJsonFile(tree, 'src/tsconfig.spec.json', { compilerOptions }); - }); - - it(`should update moduleResolution to 'bundler' in workspace 'tsconfig.json'`, async () => { - const newTree = await schematicRunner.runSchematic(schematicName, {}, tree); - const compilerOptions = getCompilerOptionsValue(newTree, 'tsconfig.json'); - expect(compilerOptions).toEqual( - jasmine.objectContaining({ - moduleResolution: 'bundler', - }), - ); - }); - - it(`should update moduleResolution to 'bundler' in builder tsconfig`, async () => { - const newTree = await schematicRunner.runSchematic(schematicName, {}, tree); - const compilerOptions = getCompilerOptionsValue(newTree, 'src/tsconfig.spec.json'); - expect(compilerOptions).toEqual( - jasmine.objectContaining({ - moduleResolution: 'bundler', - }), - ); - }); - - it('should not update moduleResolution when module is preserve', async () => { - createJsonFile(tree, 'tsconfig.json', { - compilerOptions: { module: 'preserve', moduleResolution: 'node' }, - }); - - const newTree = await schematicRunner.runSchematic(schematicName, {}, tree); - const compilerOptions = getCompilerOptionsValue(newTree, 'tsconfig.json'); - expect(compilerOptions).toEqual({ module: 'preserve', moduleResolution: 'node' }); - }); -}); diff --git a/packages/schematics/angular/migrations/update-typescript-lib/migration.ts b/packages/schematics/angular/migrations/update-typescript-lib/migration.ts deleted file mode 100644 index 9022bcedf578..000000000000 --- a/packages/schematics/angular/migrations/update-typescript-lib/migration.ts +++ /dev/null @@ -1,94 +0,0 @@ -/** - * @license - * Copyright Google LLC All Rights Reserved. - * - * Use of this source code is governed by an MIT-style license that can be - * found in the LICENSE file at https://angular.dev/license - */ - -import { Rule, Tree } from '@angular-devkit/schematics'; -import { JSONFile } from '../../utility/json-file'; -import { getWorkspace } from '../../utility/workspace'; - -export default function (): Rule { - return async (host, context) => { - // Workspace level tsconfig - if (host.exists('tsconfig.json')) { - updateLib(host, 'tsconfig.json'); - } - - const workspace = await getWorkspace(host); - - // Find all tsconfig which are references used by builders - for (const [, project] of workspace.projects) { - for (const [targetName, target] of project.targets) { - if (!target.options) { - continue; - } - - // Update all other known CLI builders that use a tsconfig - const tsConfigs = [target.options, ...Object.values(target.configurations || {})] - .filter((opt) => typeof opt?.tsConfig === 'string') - .map((opt) => (opt as { tsConfig: string }).tsConfig); - - const uniqueTsConfigs = new Set(tsConfigs); - for (const tsConfig of uniqueTsConfigs) { - if (host.exists(tsConfig)) { - updateLib(host, tsConfig); - } else { - context.logger.warn( - `'${tsConfig}' referenced in the '${targetName}' target does not exist.`, - ); - } - } - } - } - }; -} - -function updateLib(host: Tree, tsConfigPath: string): void { - const json = new JSONFile(host, tsConfigPath); - const jsonPath = ['compilerOptions', 'lib']; - const lib = json.get(jsonPath) as string[] | undefined; - - if (!lib || !Array.isArray(lib)) { - return; - } - - const esLibs = lib.filter((l) => typeof l === 'string' && l.toLowerCase().startsWith('es')); - const hasDom = lib.some((l) => typeof l === 'string' && l.toLowerCase() === 'dom'); - - if (esLibs.length === 0) { - return; - } - - const esLibToVersion = new Map(); - for (const l of esLibs) { - const version = l.toLowerCase().match(/^es(next|(\d+))$/)?.[1]; - if (version) { - esLibToVersion.set(l, version === 'next' ? Infinity : Number(version)); - } - } - - if (esLibToVersion.size === 0) { - return; - } - - const latestEsLib = [...esLibToVersion.entries()].sort(([, v1], [, v2]) => v2 - v1)[0]; - const latestVersion = latestEsLib[1]; - - if (hasDom) { - if (latestVersion <= 2022) { - json.remove(jsonPath); - } - - return; - } - - // No 'dom' with 'es' libs, so update 'es' lib. - if (latestVersion < 2022) { - const newLibs = lib.filter((l) => !esLibToVersion.has(l)); - newLibs.push('es2022'); - json.modify(jsonPath, newLibs); - } -} diff --git a/packages/schematics/angular/migrations/update-typescript-lib/migration_spec.ts b/packages/schematics/angular/migrations/update-typescript-lib/migration_spec.ts deleted file mode 100644 index 6cbfe6ebb00a..000000000000 --- a/packages/schematics/angular/migrations/update-typescript-lib/migration_spec.ts +++ /dev/null @@ -1,159 +0,0 @@ -/** - * @license - * Copyright Google LLC All Rights Reserved. - * - * Use of this source code is governed by an MIT-style license that can be - * found in the LICENSE file at https://angular.dev/license - */ - -import { isJsonObject } from '@angular-devkit/core'; -import { EmptyTree } from '@angular-devkit/schematics'; -import { SchematicTestRunner, UnitTestTree } from '@angular-devkit/schematics/testing'; -import { Builders, ProjectType, WorkspaceSchema } from '../../utility/workspace-models'; - -describe('Migration to update TypeScript lib', () => { - const schematicName = 'update-typescript-lib'; - - const schematicRunner = new SchematicTestRunner( - 'migrations', - require.resolve('../migration-collection.json'), - ); - - function createJsonFile(tree: UnitTestTree, filePath: string, content: {}): void { - const stringifiedContent = JSON.stringify(content, undefined, 2); - if (tree.exists(filePath)) { - tree.overwrite(filePath, stringifiedContent); - } else { - tree.create(filePath, stringifiedContent); - } - } - - function getCompilerOptions(tree: UnitTestTree, filePath: string): Record { - const json = tree.readJson(filePath); - if (isJsonObject(json) && isJsonObject(json.compilerOptions)) { - return json.compilerOptions; - } - - throw new Error(`Cannot retrieve 'compilerOptions'.`); - } - - function createWorkSpaceConfig(tree: UnitTestTree) { - const angularConfig: WorkspaceSchema = { - version: 1, - projects: { - app: { - root: '', - sourceRoot: 'src', - projectType: ProjectType.Application, - prefix: 'app', - architect: { - build: { - builder: Builders.Browser, - options: { - tsConfig: 'src/tsconfig.app.json', - main: '', - polyfills: '', - }, - configurations: { - production: { - tsConfig: 'src/tsconfig.app.prod.json', - }, - }, - }, - test: { - builder: Builders.Karma, - options: { - karmaConfig: '', - tsConfig: 'src/tsconfig.spec.json', - }, - }, - }, - }, - }, - }; - - createJsonFile(tree, 'angular.json', angularConfig); - } - - let tree: UnitTestTree; - beforeEach(() => { - tree = new UnitTestTree(new EmptyTree()); - createWorkSpaceConfig(tree); - - // Create tsconfigs - const compilerOptions = { lib: ['es2020', 'dom'] }; - const configWithExtends = { extends: './tsconfig.json', compilerOptions }; - - // Workspace - createJsonFile(tree, 'tsconfig.json', { compilerOptions }); - - // Application - createJsonFile(tree, 'src/tsconfig.app.json', configWithExtends); - createJsonFile(tree, 'src/tsconfig.app.prod.json', configWithExtends); - createJsonFile(tree, 'src/tsconfig.spec.json', { compilerOptions }); - }); - - it(`should remove 'lib' when 'dom' is present and ES version is less than 2022`, async () => { - const newTree = await schematicRunner.runSchematic(schematicName, {}, tree); - const compilerOptions = getCompilerOptions(newTree, 'tsconfig.json'); - expect(compilerOptions.lib).toBeUndefined(); - }); - - it(`should remove 'lib' when 'dom' is present and ES version is 2022`, async () => { - createJsonFile(tree, 'tsconfig.json', { compilerOptions: { lib: ['es2022', 'dom'] } }); - const newTree = await schematicRunner.runSchematic(schematicName, {}, tree); - const compilerOptions = getCompilerOptions(newTree, 'tsconfig.json'); - expect(compilerOptions.lib).toBeUndefined(); - }); - - it(`should not remove 'lib' when 'dom' is present and ES version is 'esnext'`, async () => { - createJsonFile(tree, 'tsconfig.json', { compilerOptions: { lib: ['esnext', 'dom'] } }); - const newTree = await schematicRunner.runSchematic(schematicName, {}, tree); - const compilerOptions = getCompilerOptions(newTree, 'tsconfig.json'); - expect(compilerOptions.lib).toEqual(['esnext', 'dom']); - }); - - it(`should update 'lib' to 'es2022' when 'dom' is not present and ES version is less than 2022`, async () => { - createJsonFile(tree, 'tsconfig.json', { compilerOptions: { lib: ['es2020'] } }); - const newTree = await schematicRunner.runSchematic(schematicName, {}, tree); - const compilerOptions = getCompilerOptions(newTree, 'tsconfig.json'); - expect(compilerOptions.lib).toEqual(['es2022']); - }); - - it(`should not update 'lib' when 'dom' is not present and ES version is 2022`, async () => { - createJsonFile(tree, 'tsconfig.json', { compilerOptions: { lib: ['es2022'] } }); - const newTree = await schematicRunner.runSchematic(schematicName, {}, tree); - const compilerOptions = getCompilerOptions(newTree, 'tsconfig.json'); - expect(compilerOptions.lib).toEqual(['es2022']); - }); - - it(`should not update 'lib' when 'dom' is not present and ES version is 'esnext'`, async () => { - createJsonFile(tree, 'tsconfig.json', { compilerOptions: { lib: ['esnext'] } }); - const newTree = await schematicRunner.runSchematic(schematicName, {}, tree); - const compilerOptions = getCompilerOptions(newTree, 'tsconfig.json'); - expect(compilerOptions.lib).toEqual(['esnext']); - }); - - it('should not error when a tsconfig is not found', async () => { - tree.delete('src/tsconfig.spec.json'); - await schematicRunner.runSchematic(schematicName, {}, tree); - }); - - it('should not error when compilerOptions is not defined', async () => { - createJsonFile(tree, 'tsconfig.json', {}); - await schematicRunner.runSchematic(schematicName, {}, tree); - }); - - it(`should not error when 'lib' is not defined`, async () => { - createJsonFile(tree, 'tsconfig.json', { compilerOptions: {} }); - await schematicRunner.runSchematic(schematicName, {}, tree); - }); - - it(`should remove 'lib' from all tsconfigs`, async () => { - const newTree = await schematicRunner.runSchematic(schematicName, {}, tree); - expect(getCompilerOptions(newTree, 'tsconfig.json').lib).toBeUndefined(); - expect(getCompilerOptions(newTree, 'src/tsconfig.app.json').lib).toBeUndefined(); - expect(getCompilerOptions(newTree, 'src/tsconfig.app.prod.json').lib).toBeUndefined(); - expect(getCompilerOptions(newTree, 'src/tsconfig.spec.json').lib).toBeUndefined(); - }); -}); From 0f8a7127b603bc494bd918916b93acfb98c33dc7 Mon Sep 17 00:00:00 2001 From: Doug Parker Date: Wed, 25 Feb 2026 14:06:42 -0800 Subject: [PATCH 036/226] docs: release notes for the v21.2.0 release --- CHANGELOG.md | 124 +++++++++++---------------------------------------- 1 file changed, 26 insertions(+), 98 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index e6a598b6d89b..985561c25810 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,31 +1,42 @@ - + -# 21.2.0-rc.2 (2026-02-24) +# 21.2.0 (2026-02-25) ### @angular/cli | Commit | Type | Description | | --------------------------------------------------------------------------------------------------- | ---- | ------------------------------------------------------------------------------------------------------------- | +| [0dd04f289](https://github.com/angular/angular-cli/commit/0dd04f289e555a4a8af7bdadabe300da74701e3b) | feat | add markdown files to Prettier's formatting list | +| [fbae1b6ab](https://github.com/angular/angular-cli/commit/fbae1b6ab384186ae69e804c54815cea80e6a600) | feat | automatic formatting files modified by schematics | +| [91b9d281f](https://github.com/angular/angular-cli/commit/91b9d281fc88a242aa6e5dd5495e275990d926ef) | feat | integrate file formatting into update migrations | +| [98a24d040](https://github.com/angular/angular-cli/commit/98a24d0401f36f484dc9c4d8b0f5284ffa524f19) | feat | standardize MCP tools around workspace/project options | +| [d9cd609c5](https://github.com/angular/angular-cli/commit/d9cd609c5d13fe492b1f31973d9be518f8529387) | fix | correctly parse scoped packages in yarn classic list output | +| [5b05f2500](https://github.com/angular/angular-cli/commit/5b05f25005621828565585692b1d7a67c5f0fec8) | fix | enable shell option for Prettier execution on Windows platforms | +| [25b8a157d](https://github.com/angular/angular-cli/commit/25b8a157df70fb0d2c4e6c5438a50ec12e3abc0c) | fix | quote complex range specifiers in package manager | +| [6f29a8c35](https://github.com/angular/angular-cli/commit/6f29a8c35abb8928d4e7ea01958192dd2a83491d) | fix | renamed files by their new path in the schematic workflow | | [201a036f2](https://github.com/angular/angular-cli/commit/201a036f204a6940f70a36a507a4a53d144b5768) | fix | simplify Angular version compatibility checks and add special handling for local builds of new major versions | +| [cdd26bb66](https://github.com/angular/angular-cli/commit/cdd26bb66d8ab334f76323c2b5cae1aa8ce815f6) | fix | validate package manager version using `semver.valid` and throw an error if invalid | +| [bc363af8b](https://github.com/angular/angular-cli/commit/bc363af8bc40f117a4e35ec9eb7eedf69f5b5b37) | perf | optimize package manager discovery with stat-based probing | - - - - -# 21.2.0-rc.1 (2026-02-23) - -### @angular/cli +### @schematics/angular | Commit | Type | Description | | --------------------------------------------------------------------------------------------------- | ---- | ----------------------------------------------------------------------------------- | -| [cdd26bb66](https://github.com/angular/angular-cli/commit/cdd26bb66d8ab334f76323c2b5cae1aa8ce815f6) | fix | validate package manager version using `semver.valid` and throw an error if invalid | +| [aa7381efd](https://github.com/angular/angular-cli/commit/aa7381efd213eff70a8004731a7e2b06a60cb8c2) | feat | add a '.prettierrc' file to generated workspaces and add Prettier as dev dependency | +| [f80db6fb7](https://github.com/angular/angular-cli/commit/f80db6fb714aa326f6ed03a8a51090ca59ad0955) | feat | add ng-add support for Vitest browser providers | +| [5d1df50d8](https://github.com/angular/angular-cli/commit/5d1df50d8b84b453570ae5fd9ab6f949bbc11649) | fix | add actionable feedback to vitest-browser schematic | -### @angular/ssr +### @angular/build -| Commit | Type | Description | -| --------------------------------------------------------------------------------------------------- | ---- | --------------------------------------------------- | -| [cf5a72d33](https://github.com/angular/angular-cli/commit/cf5a72d33c1753c121f71498c0c415a0f0864492) | fix | prevent open redirect via X-Forwarded-Prefix header | -| [f78f38827](https://github.com/angular/angular-cli/commit/f78f38827861cf01471e30fcf81ef14d6265a0f2) | fix | validate host headers to prevent header-based SSRF | +| Commit | Type | Description | +| --------------------------------------------------------------------------------------------------- | ---- | -------------------------------------------------------- | +| [ece30f235](https://github.com/angular/angular-cli/commit/ece30f2359c2dc794b0c9272447f623a121e88b0) | feat | add headless option to unit-test builder | +| [cad7a7c0f](https://github.com/angular/angular-cli/commit/cad7a7c0ff3778f04820a99ad0aa9d74f1067fd5) | feat | run vitest browser with playwright with OS theme | +| [0b4982720](https://github.com/angular/angular-cli/commit/0b4982720e111bf5029bcf97f7e0ce2658c42d43) | fix | adjust sourcemap sources when Vitest wrapper is bypassed | +| [1f114a9e8](https://github.com/angular/angular-cli/commit/1f114a9e8b9bddd53e01016a2d7cb211a04eee48) | fix | bundle setup files in unit-test builder for Vitest | +| [fd5cb28c8](https://github.com/angular/angular-cli/commit/fd5cb28c8082417288a896b89bde659bb0dc92e2) | fix | explicitly fail when using Vitest runtime mocking | +| [dc899e8a5](https://github.com/angular/angular-cli/commit/dc899e8a530979de8e9579f2281b681e6f737a62) | fix | normalize `allowedHosts` in dev-server | +| [26bbea12f](https://github.com/angular/angular-cli/commit/26bbea12f872c18e59de05d3c51cc11dd0a09cda) | fix | serve extensionless assets without transformation | @@ -68,12 +79,6 @@ - - -# 21.2.0-rc.0 (2026-02-18) - - - # 19.2.20 (2026-02-13) @@ -86,20 +91,6 @@ - - -# 21.2.0-next.2 (2026-02-11) - -### @angular/build - -| Commit | Type | Description | -| --------------------------------------------------------------------------------------------------- | ---- | ----------------------------------------------------- | -| [cad7a7c0f](https://github.com/angular/angular-cli/commit/cad7a7c0ff3778f04820a99ad0aa9d74f1067fd5) | feat | run vitest browser with playwright with OS theme | -| [8ae7f59e6](https://github.com/angular/angular-cli/commit/8ae7f59e6f988489fda8c1346e3d2c3768d7a5f0) | fix | correctly resolve absolute setup file paths in Vitest | -| [fd5cb28c8](https://github.com/angular/angular-cli/commit/fd5cb28c8082417288a896b89bde659bb0dc92e2) | fix | explicitly fail when using Vitest runtime mocking | - - - # 21.1.4 (2026-02-11) @@ -124,34 +115,6 @@ - - -# 21.2.0-next.1 (2026-02-05) - -### @angular/cli - -| Commit | Type | Description | -| --------------------------------------------------------------------------------------------------- | ---- | ---------------------------------------------------------- | -| [91b9d281f](https://github.com/angular/angular-cli/commit/91b9d281fc88a242aa6e5dd5495e275990d926ef) | feat | integrate file formatting into update migrations | -| [6f29a8c35](https://github.com/angular/angular-cli/commit/6f29a8c35abb8928d4e7ea01958192dd2a83491d) | fix | renamed files by their new path in the schematic workflow | -| [bc363af8b](https://github.com/angular/angular-cli/commit/bc363af8bc40f117a4e35ec9eb7eedf69f5b5b37) | perf | optimize package manager discovery with stat-based probing | - -### @schematics/angular - -| Commit | Type | Description | -| --------------------------------------------------------------------------------------------------- | ---- | ---------------------------------------------------------------- | -| [5d1df50d8](https://github.com/angular/angular-cli/commit/5d1df50d8b84b453570ae5fd9ab6f949bbc11649) | fix | add actionable feedback to vitest-browser schematic | -| [51fc77828](https://github.com/angular/angular-cli/commit/51fc77828a33fdf35051b7e18d79ad43f90cba1d) | fix | warn when production configuration is missing for service worker | - -### @angular/build - -| Commit | Type | Description | -| --------------------------------------------------------------------------------------------------- | ---- | -------------------------------------------------- | -| [ece30f235](https://github.com/angular/angular-cli/commit/ece30f2359c2dc794b0c9272447f623a121e88b0) | feat | add headless option to unit-test builder | -| [1f114a9e8](https://github.com/angular/angular-cli/commit/1f114a9e8b9bddd53e01016a2d7cb211a04eee48) | fix | bundle setup files in unit-test builder for Vitest | - - - # 21.1.3 (2026-02-05) @@ -170,41 +133,6 @@ - - -# 21.2.0-next.0 (2026-01-28) - -### @angular/cli - -| Commit | Type | Description | -| --------------------------------------------------------------------------------------------------- | ---- | --------------------------------------------------------------- | -| [0dd04f289](https://github.com/angular/angular-cli/commit/0dd04f289e555a4a8af7bdadabe300da74701e3b) | feat | add markdown files to Prettier's formatting list | -| [fbae1b6ab](https://github.com/angular/angular-cli/commit/fbae1b6ab384186ae69e804c54815cea80e6a600) | feat | automatic formatting files modified by schematics | -| [98a24d040](https://github.com/angular/angular-cli/commit/98a24d0401f36f484dc9c4d8b0f5284ffa524f19) | feat | standardize MCP tools around workspace/project options | -| [d9cd609c5](https://github.com/angular/angular-cli/commit/d9cd609c5d13fe492b1f31973d9be518f8529387) | fix | correctly parse scoped packages in yarn classic list output | -| [5b05f2500](https://github.com/angular/angular-cli/commit/5b05f25005621828565585692b1d7a67c5f0fec8) | fix | enable shell option for Prettier execution on Windows platforms | - -### @schematics/angular - -| Commit | Type | Description | -| --------------------------------------------------------------------------------------------------- | ---- | ----------------------------------------------------------------------------------- | -| [aa7381efd](https://github.com/angular/angular-cli/commit/aa7381efd213eff70a8004731a7e2b06a60cb8c2) | feat | add a '.prettierrc' file to generated workspaces and add Prettier as dev dependency | -| [f80db6fb7](https://github.com/angular/angular-cli/commit/f80db6fb714aa326f6ed03a8a51090ca59ad0955) | feat | add ng-add support for Vitest browser providers | - -### @angular-devkit/build-angular - -| Commit | Type | Description | -| --------------------------------------------------------------------------------------------------- | ---- | ----------------------------------- | -| [b4a8d198c](https://github.com/angular/angular-cli/commit/b4a8d198c78aaf0cac7671f26162ce5818a5704c) | fix | address Node.js deprecation DEP0190 | - -### @angular/build - -| Commit | Type | Description | -| --------------------------------------------------------------------------------------------------- | ---- | -------------------------------------------------------- | -| [0b4982720](https://github.com/angular/angular-cli/commit/0b4982720e111bf5029bcf97f7e0ce2658c42d43) | fix | adjust sourcemap sources when Vitest wrapper is bypassed | - - - # 21.1.2 (2026-01-28) From 43c4e2cfe2c4bdeb53c4b485d52405736d3e285c Mon Sep 17 00:00:00 2001 From: Sai Kumar Kola <39924419+SahulKola@users.noreply.github.com> Date: Mon, 23 Feb 2026 13:08:27 +0000 Subject: [PATCH 037/226] refactor(@schematics/angular): add centered-layout for ng starter template Center the template layout Closes: #32536 --- .../files/common-files/src/app/app__suffix__.html.template | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/schematics/angular/application/files/common-files/src/app/app__suffix__.html.template b/packages/schematics/angular/application/files/common-files/src/app/app__suffix__.html.template index 7d9cf8841c9d..37512bbc01e5 100644 --- a/packages/schematics/angular/application/files/common-files/src/app/app__suffix__.html.template +++ b/packages/schematics/angular/application/files/common-files/src/app/app__suffix__.html.template @@ -42,6 +42,8 @@ box-sizing: border-box; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; + display: block; + height: 100dvh; } h1 { From 152d09be4e8507fb7165a0ba8f11381ed2812700 Mon Sep 17 00:00:00 2001 From: jase88 <804836+jase88@users.noreply.github.com> Date: Mon, 23 Feb 2026 21:36:20 +0100 Subject: [PATCH 038/226] fix(@schematics/angular): prevent adding test dependencies when minimal option is enabled --- packages/schematics/angular/application/index.ts | 2 +- .../schematics/angular/application/index_spec.ts | 12 ++++++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/packages/schematics/angular/application/index.ts b/packages/schematics/angular/application/index.ts index d66d4fc89ce0..2820634b1ba8 100644 --- a/packages/schematics/angular/application/index.ts +++ b/packages/schematics/angular/application/index.ts @@ -187,7 +187,7 @@ function addDependenciesToPackageJson(options: ApplicationOptions): Rule { ); } - if (!options.skipTests) { + if (!options.skipTests && !options.minimal) { rules.push(...addTestRunnerDependencies(options.testRunner, !!options.skipInstall)); } diff --git a/packages/schematics/angular/application/index_spec.ts b/packages/schematics/angular/application/index_spec.ts index 215664398b8e..0fe4d142dc4a 100644 --- a/packages/schematics/angular/application/index_spec.ts +++ b/packages/schematics/angular/application/index_spec.ts @@ -167,6 +167,18 @@ describe('Application Schematic', () => { ); }); + it(`should not add test dependencies with "minimal" enabled`, async () => { + const tree = await schematicRunner.runSchematic( + 'application', + { ...defaultOptions, minimal: true }, + workspaceTree, + ); + + const packageJson = JSON.parse(tree.readContent('package.json')); + expect(packageJson.devDependencies['vitest']).toBeUndefined(); + expect(packageJson.devDependencies['jsdom']).toBeUndefined(); + }); + it('should install npm dependencies when `skipInstall` is false', async () => { await schematicRunner.runSchematic( 'application', From 3262d9c2d784ec644990ab731e99847e84eecd17 Mon Sep 17 00:00:00 2001 From: Angular Robot Date: Wed, 25 Feb 2026 14:01:01 +0000 Subject: [PATCH 039/226] build: update pnpm to v10.30.2 See associated pull request for more information. --- MODULE.bazel | 4 ++-- MODULE.bazel.lock | 8 ++++---- package.json | 4 ++-- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/MODULE.bazel b/MODULE.bazel index 362aa8e48581..a8c5cdb6d8ed 100644 --- a/MODULE.bazel +++ b/MODULE.bazel @@ -116,8 +116,8 @@ use_repo( pnpm = use_extension("@aspect_rules_js//npm:extensions.bzl", "pnpm") pnpm.pnpm( name = "pnpm", - pnpm_version = "10.30.0", - pnpm_version_integrity = "sha512-K1dT3gFdSA7riPW1th4AUfBbQwGAioLsi4QMnSrfd0jrNSyD9cFZPKcD/xAXKVvD/dMRmruWhu/Ja5/LGCAJNw==", + pnpm_version = "10.30.2", + pnpm_version_integrity = "sha512-Ns3HB+e3lAqYjJwez4jQhPhRS1w/CF9TouJEwpIdOyVFvCDdTr4fwkX+7EY7spiuzqemPtH3aAuHfcY3nY0MtA==", ) use_repo(pnpm, "pnpm") diff --git a/MODULE.bazel.lock b/MODULE.bazel.lock index 3f1a0fd4b045..7dba7279441a 100644 --- a/MODULE.bazel.lock +++ b/MODULE.bazel.lock @@ -417,7 +417,7 @@ "@@aspect_rules_js+//npm:extensions.bzl%pnpm": { "general": { "bzlTransitiveDigest": "HC+l+mTivq1p/KbcVQ+iV5QwYR+oKESJh827FY68SH8=", - "usagesDigest": "oKEoJkVZEnW0cjpkX5M2lhXCujejJK2YvKWbS+ELfig=", + "usagesDigest": "ZvjRdptHQkMA7CP3Q06p9iboasgFVjpW2zKBrKW0xCA=", "recordedFileInputs": {}, "recordedDirentsInputs": {}, "envVariables": {}, @@ -426,11 +426,11 @@ "repoRuleId": "@@aspect_rules_js+//npm/private:npm_import.bzl%npm_import_rule", "attributes": { "package": "pnpm", - "version": "10.30.0", + "version": "10.30.2", "root_package": "", "link_workspace": "", "link_packages": {}, - "integrity": "sha512-K1dT3gFdSA7riPW1th4AUfBbQwGAioLsi4QMnSrfd0jrNSyD9cFZPKcD/xAXKVvD/dMRmruWhu/Ja5/LGCAJNw==", + "integrity": "sha512-Ns3HB+e3lAqYjJwez4jQhPhRS1w/CF9TouJEwpIdOyVFvCDdTr4fwkX+7EY7spiuzqemPtH3aAuHfcY3nY0MtA==", "url": "", "commit": "", "patch_args": [ @@ -453,7 +453,7 @@ "repoRuleId": "@@aspect_rules_js+//npm/private:npm_import.bzl%npm_import_links", "attributes": { "package": "pnpm", - "version": "10.30.0", + "version": "10.30.2", "dev": false, "root_package": "", "link_packages": {}, diff --git a/package.json b/package.json index a16aa3936ac4..ad346ce0f590 100644 --- a/package.json +++ b/package.json @@ -28,12 +28,12 @@ "type": "git", "url": "https://github.com/angular/angular-cli.git" }, - "packageManager": "pnpm@10.30.0", + "packageManager": "pnpm@10.30.2", "engines": { "node": "^22.22.0 || >=24.13.1", "npm": "Please use pnpm instead of NPM to install dependencies", "yarn": "Please use pnpm instead of Yarn to install dependencies", - "pnpm": "10.30.0" + "pnpm": "10.30.2" }, "author": "Angular Authors", "license": "MIT", From 1aee13d65a9e3e3f49a0d17f09dc73867d0f19a5 Mon Sep 17 00:00:00 2001 From: Angular Robot Date: Thu, 26 Feb 2026 06:23:06 +0000 Subject: [PATCH 040/226] build: update rules_browsers digest to 8231142 See associated pull request for more information. --- MODULE.bazel | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/MODULE.bazel b/MODULE.bazel index a8c5cdb6d8ed..be2d00867bdd 100644 --- a/MODULE.bazel +++ b/MODULE.bazel @@ -39,7 +39,7 @@ git_override( bazel_dep(name = "rules_browsers") git_override( module_name = "rules_browsers", - commit = "ceb52751831f3e6249aba83f688a612e57a8d14a", + commit = "8231142fc5516323b040883bf774ba8362645387", remote = "https://github.com/devversion/rules_browsers.git", ) From a1a84da37730f4d6c8908debade6799dedec7669 Mon Sep 17 00:00:00 2001 From: Angular Robot Date: Thu, 26 Feb 2026 06:24:11 +0000 Subject: [PATCH 041/226] build: update github/codeql-action action to v4.32.4 See associated pull request for more information. --- .github/workflows/codeql.yml | 4 ++-- .github/workflows/scorecard.yml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml index aa419051f888..8e9ed17f7796 100644 --- a/.github/workflows/codeql.yml +++ b/.github/workflows/codeql.yml @@ -23,12 +23,12 @@ jobs: with: persist-credentials: false - name: Initialize CodeQL - uses: github/codeql-action/init@9e907b5e64f6b83e7804b09294d44122997950d6 # v4.32.3 + uses: github/codeql-action/init@89a39a4e59826350b863aa6b6252a07ad50cf83e # v4.32.4 with: languages: javascript-typescript build-mode: none config-file: .github/codeql/config.yml - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@9e907b5e64f6b83e7804b09294d44122997950d6 # v4.32.3 + uses: github/codeql-action/analyze@89a39a4e59826350b863aa6b6252a07ad50cf83e # v4.32.4 with: category: '/language:javascript-typescript' diff --git a/.github/workflows/scorecard.yml b/.github/workflows/scorecard.yml index ae0a6bc1b93c..6e75cf9b2dc3 100644 --- a/.github/workflows/scorecard.yml +++ b/.github/workflows/scorecard.yml @@ -46,6 +46,6 @@ jobs: # Upload the results to GitHub's code scanning dashboard. - name: 'Upload to code-scanning' - uses: github/codeql-action/upload-sarif@9e907b5e64f6b83e7804b09294d44122997950d6 # v4.32.3 + uses: github/codeql-action/upload-sarif@89a39a4e59826350b863aa6b6252a07ad50cf83e # v4.32.4 with: sarif_file: results.sarif From 4bbd8dc652f151a5acd8a2b06fe28a7e7cb9fc46 Mon Sep 17 00:00:00 2001 From: hello Date: Thu, 26 Feb 2026 08:33:40 +0100 Subject: [PATCH 042/226] fix(@angular/cli): ignore unknown files when formatting schematic changes When schematics modify files such as .gitignore, Prettier cannot infer a parser and formatting fails. ``` npx prettier --check .gitignore [error] No parser could be inferred for file ".gitignore". ``` With ignore-unknown enabled, Prettier does not throw this parser error --- packages/angular/cli/src/utilities/prettier.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/angular/cli/src/utilities/prettier.ts b/packages/angular/cli/src/utilities/prettier.ts index e481d94a8b89..e2e516b82367 100644 --- a/packages/angular/cli/src/utilities/prettier.ts +++ b/packages/angular/cli/src/utilities/prettier.ts @@ -44,7 +44,7 @@ export async function formatFiles(cwd: string, files: Set): Promise Date: Thu, 26 Feb 2026 06:24:36 +0000 Subject: [PATCH 043/226] build: update schematics dependencies to ~6.1.0 See associated pull request for more information. --- .../angular_devkit/schematics_cli/schematic/files/package.json | 2 +- .../schematics/angular/utility/latest-versions/package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/angular_devkit/schematics_cli/schematic/files/package.json b/packages/angular_devkit/schematics_cli/schematic/files/package.json index c990dcb47ad4..35fa17720131 100644 --- a/packages/angular_devkit/schematics_cli/schematic/files/package.json +++ b/packages/angular_devkit/schematics_cli/schematic/files/package.json @@ -19,7 +19,7 @@ "devDependencies": { "@types/node": "^20.17.19", "@types/jasmine": "~6.0.0", - "jasmine": "~6.0.0", + "jasmine": "~6.1.0", "typescript": "~5.9.2" } } diff --git a/packages/schematics/angular/utility/latest-versions/package.json b/packages/schematics/angular/utility/latest-versions/package.json index bd7be5095b13..97416e3ba066 100644 --- a/packages/schematics/angular/utility/latest-versions/package.json +++ b/packages/schematics/angular/utility/latest-versions/package.json @@ -8,7 +8,7 @@ "@types/node": "^20.17.19", "browser-sync": "^3.0.0", "express": "^5.1.0", - "jasmine-core": "~6.0.0", + "jasmine-core": "~6.1.0", "jasmine-spec-reporter": "~7.0.0", "karma-chrome-launcher": "~3.2.0", "karma-coverage": "~2.2.0", From b639433d29f26286dfa1912a1e3bef3843920f3d Mon Sep 17 00:00:00 2001 From: Angular Robot Date: Thu, 26 Feb 2026 06:23:39 +0000 Subject: [PATCH 044/226] build: update all non-major dependencies See associated pull request for more information. --- package.json | 12 +- packages/angular/build/package.json | 2 +- packages/angular/cli/package.json | 8 +- pnpm-lock.yaml | 853 ++++++++++++++++++---------- 4 files changed, 562 insertions(+), 313 deletions(-) diff --git a/package.json b/package.json index ad346ce0f590..1222ad147d90 100644 --- a/package.json +++ b/package.json @@ -60,7 +60,7 @@ "@bazel/bazelisk": "1.28.1", "@bazel/buildifier": "8.2.1", "@eslint/compat": "2.0.2", - "@eslint/eslintrc": "3.3.3", + "@eslint/eslintrc": "3.3.4", "@eslint/js": "10.0.1", "@rollup/plugin-alias": "^6.0.0", "@rollup/plugin-commonjs": "^29.0.0", @@ -90,8 +90,8 @@ "@types/yargs": "^17.0.20", "@types/yargs-parser": "^21.0.0", "@types/yarnpkg__lockfile": "^1.1.5", - "@typescript-eslint/eslint-plugin": "8.56.0", - "@typescript-eslint/parser": "8.56.0", + "@typescript-eslint/eslint-plugin": "8.56.1", + "@typescript-eslint/parser": "8.56.1", "ajv": "8.18.0", "buffer": "6.0.3", "esbuild": "0.27.3", @@ -121,10 +121,10 @@ "protractor": "~7.0.0", "puppeteer": "18.2.1", "quicktype-core": "23.2.6", - "rollup": "4.57.1", + "rollup": "4.59.0", "rollup-license-plugin": "~3.1.0", "rollup-plugin-dts": "6.3.0", - "rollup-plugin-sourcemaps2": "0.5.4", + "rollup-plugin-sourcemaps2": "0.5.6", "semver": "7.7.4", "source-map-support": "0.5.21", "ts-node": "^10.9.1", @@ -132,7 +132,7 @@ "typescript": "5.9.3", "undici": "7.22.0", "unenv": "^1.10.0", - "verdaccio": "6.2.5", + "verdaccio": "6.2.7", "verdaccio-auth-memory": "^10.0.0", "zone.js": "^0.16.0" }, diff --git a/packages/angular/build/package.json b/packages/angular/build/package.json index 3d73bcfdd086..63f734a57456 100644 --- a/packages/angular/build/package.json +++ b/packages/angular/build/package.json @@ -31,7 +31,7 @@ "https-proxy-agent": "7.0.6", "istanbul-lib-instrument": "6.0.3", "jsonc-parser": "3.3.1", - "listr2": "10.1.0", + "listr2": "10.1.1", "magic-string": "0.30.21", "mrmime": "2.0.1", "parse5-html-rewriting-stream": "8.0.0", diff --git a/packages/angular/cli/package.json b/packages/angular/cli/package.json index 3a16fcbb444c..1f8ebde2a1dc 100644 --- a/packages/angular/cli/package.json +++ b/packages/angular/cli/package.json @@ -27,15 +27,15 @@ "@angular-devkit/schematics": "workspace:0.0.0-PLACEHOLDER", "@inquirer/prompts": "8.3.0", "@listr2/prompt-adapter-inquirer": "4.1.1", - "@modelcontextprotocol/sdk": "1.26.0", + "@modelcontextprotocol/sdk": "1.27.1", "@schematics/angular": "workspace:0.0.0-PLACEHOLDER", "@yarnpkg/lockfile": "1.1.0", - "algoliasearch": "5.49.0", + "algoliasearch": "5.49.1", "ini": "6.0.0", "jsonc-parser": "3.3.1", - "listr2": "10.1.0", + "listr2": "10.1.1", "npm-package-arg": "13.0.2", - "pacote": "21.3.1", + "pacote": "21.4.0", "parse5-html-rewriting-stream": "8.0.0", "semver": "7.7.4", "yargs": "18.0.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index bdda23ac2fbd..fb1c105eae00 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -48,7 +48,7 @@ importers: version: 21.2.0-rc.0(4ac7caab525408b0a8d5509a5a82c8db) '@angular/ng-dev': specifier: https://github.com/angular/dev-infra-private-ng-dev-builds.git#99c925a35a7decb22cb0dc7b5fb83b2f41876179 - version: https://codeload.github.com/angular/dev-infra-private-ng-dev-builds/tar.gz/99c925a35a7decb22cb0dc7b5fb83b2f41876179(@modelcontextprotocol/sdk@1.26.0(zod@4.3.6)) + version: https://codeload.github.com/angular/dev-infra-private-ng-dev-builds/tar.gz/99c925a35a7decb22cb0dc7b5fb83b2f41876179(@modelcontextprotocol/sdk@1.27.1(zod@4.3.6)) '@angular/platform-browser': specifier: 21.2.0-rc.0 version: 21.2.0-rc.0(@angular/animations@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0)))(@angular/common@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2))(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0)) @@ -74,23 +74,23 @@ importers: specifier: 2.0.2 version: 2.0.2(eslint@10.0.2(jiti@2.6.1)) '@eslint/eslintrc': - specifier: 3.3.3 - version: 3.3.3 + specifier: 3.3.4 + version: 3.3.4 '@eslint/js': specifier: 10.0.1 version: 10.0.1(eslint@10.0.2(jiti@2.6.1)) '@rollup/plugin-alias': specifier: ^6.0.0 - version: 6.0.0(rollup@4.57.1) + version: 6.0.0(rollup@4.59.0) '@rollup/plugin-commonjs': specifier: ^29.0.0 - version: 29.0.0(rollup@4.57.1) + version: 29.0.0(rollup@4.59.0) '@rollup/plugin-json': specifier: ^6.1.0 - version: 6.1.0(rollup@4.57.1) + version: 6.1.0(rollup@4.59.0) '@rollup/plugin-node-resolve': specifier: 16.0.3 - version: 16.0.3(rollup@4.57.1) + version: 16.0.3(rollup@4.59.0) '@stylistic/eslint-plugin': specifier: ^5.0.0 version: 5.8.0(eslint@10.0.2(jiti@2.6.1)) @@ -164,11 +164,11 @@ importers: specifier: ^1.1.5 version: 1.1.9 '@typescript-eslint/eslint-plugin': - specifier: 8.56.0 - version: 8.56.0(@typescript-eslint/parser@8.56.0(eslint@10.0.2(jiti@2.6.1))(typescript@5.9.3))(eslint@10.0.2(jiti@2.6.1))(typescript@5.9.3) + specifier: 8.56.1 + version: 8.56.1(@typescript-eslint/parser@8.56.1(eslint@10.0.2(jiti@2.6.1))(typescript@5.9.3))(eslint@10.0.2(jiti@2.6.1))(typescript@5.9.3) '@typescript-eslint/parser': - specifier: 8.56.0 - version: 8.56.0(eslint@10.0.2(jiti@2.6.1))(typescript@5.9.3) + specifier: 8.56.1 + version: 8.56.1(eslint@10.0.2(jiti@2.6.1))(typescript@5.9.3) ajv: specifier: 8.18.0 version: 8.18.0 @@ -189,7 +189,7 @@ importers: version: 10.1.8(eslint@10.0.2(jiti@2.6.1)) eslint-plugin-import: specifier: 2.32.0 - version: 2.32.0(@typescript-eslint/parser@8.56.0(eslint@10.0.2(jiti@2.6.1))(typescript@5.9.3))(eslint@10.0.2(jiti@2.6.1)) + version: 2.32.0(@typescript-eslint/parser@8.56.1(eslint@10.0.2(jiti@2.6.1))(typescript@5.9.3))(eslint@10.0.2(jiti@2.6.1)) express: specifier: 5.2.1 version: 5.2.1 @@ -257,17 +257,17 @@ importers: specifier: 23.2.6 version: 23.2.6(encoding@0.1.13) rollup: - specifier: 4.57.1 - version: 4.57.1 + specifier: 4.59.0 + version: 4.59.0 rollup-license-plugin: specifier: ~3.1.0 version: 3.1.0 rollup-plugin-dts: specifier: 6.3.0 - version: 6.3.0(rollup@4.57.1)(typescript@5.9.3) + version: 6.3.0(rollup@4.59.0)(typescript@5.9.3) rollup-plugin-sourcemaps2: - specifier: 0.5.4 - version: 0.5.4(@types/node@22.19.11)(rollup@4.57.1) + specifier: 0.5.6 + version: 0.5.6(@types/node@22.19.11)(rollup@4.59.0) semver: specifier: 7.7.4 version: 7.7.4 @@ -290,8 +290,8 @@ importers: specifier: ^1.10.0 version: 1.10.0 verdaccio: - specifier: 6.2.5 - version: 6.2.5(encoding@0.1.13) + specifier: 6.2.7 + version: 6.2.7(encoding@0.1.13) verdaccio-auth-memory: specifier: ^10.0.0 version: 10.3.1 @@ -371,8 +371,8 @@ importers: specifier: 3.3.1 version: 3.3.1 listr2: - specifier: 10.1.0 - version: 10.1.0 + specifier: 10.1.1 + version: 10.1.1 magic-string: specifier: 0.30.21 version: 0.30.21 @@ -455,10 +455,10 @@ importers: version: 8.3.0(@types/node@24.10.13) '@listr2/prompt-adapter-inquirer': specifier: 4.1.1 - version: 4.1.1(@inquirer/prompts@8.3.0(@types/node@24.10.13))(@types/node@24.10.13)(listr2@10.1.0) + version: 4.1.1(@inquirer/prompts@8.3.0(@types/node@24.10.13))(@types/node@24.10.13)(listr2@10.1.1) '@modelcontextprotocol/sdk': - specifier: 1.26.0 - version: 1.26.0(zod@4.3.6) + specifier: 1.27.1 + version: 1.27.1(zod@4.3.6) '@schematics/angular': specifier: workspace:0.0.0-PLACEHOLDER version: link:../../schematics/angular @@ -466,8 +466,8 @@ importers: specifier: 1.1.0 version: 1.1.0 algoliasearch: - specifier: 5.49.0 - version: 5.49.0 + specifier: 5.49.1 + version: 5.49.1 ini: specifier: 6.0.0 version: 6.0.0 @@ -475,14 +475,14 @@ importers: specifier: 3.3.1 version: 3.3.1 listr2: - specifier: 10.1.0 - version: 10.1.0 + specifier: 10.1.1 + version: 10.1.1 npm-package-arg: specifier: 13.0.2 version: 13.0.2 pacote: - specifier: 21.3.1 - version: 21.3.1 + specifier: 21.4.0 + version: 21.4.0 parse5-html-rewriting-stream: specifier: 8.0.0 version: 8.0.0 @@ -878,60 +878,60 @@ packages: '@actions/io@3.0.2': resolution: {integrity: sha512-nRBchcMM+QK1pdjO7/idu86rbJI5YHUKCvKs0KxnSYbVe3F51UfGxuZX4Qy/fWlp6l7gWFwIkrOzN+oUK03kfw==} - '@algolia/abtesting@1.15.0': - resolution: {integrity: sha512-D1QZ8dQx5zC9yrxNao9ER9bojmmzUdL1i2P9waIRiwnZ5fI26YswcCd6VHR/Q4W3PASfVf2My4YQ2FhGGDewTQ==} + '@algolia/abtesting@1.15.1': + resolution: {integrity: sha512-2yuIC48rUuHGhU1U5qJ9kJHaxYpJ0jpDHJVI5ekOxSMYXlH4+HP+pA31G820lsAznfmu2nzDV7n5RO44zIY1zw==} engines: {node: '>= 14.0.0'} - '@algolia/client-abtesting@5.49.0': - resolution: {integrity: sha512-Q1MSRhh4Du9WeLIl1S9O+BDUMaL01uuQtmzCyEzOBtu1xBDr3wvqrTJtfEceEkA5/Nw1BdGSHa6sDT3xTAF90A==} + '@algolia/client-abtesting@5.49.1': + resolution: {integrity: sha512-h6M7HzPin+45/l09q0r2dYmocSSt2MMGOOk5c4O5K/bBBlEwf1BKfN6z+iX4b8WXcQQhf7rgQwC52kBZJt/ZZw==} engines: {node: '>= 14.0.0'} - '@algolia/client-analytics@5.49.0': - resolution: {integrity: sha512-v50elhC80oyQw+8o8BwM+VvPuOo36+3W8VCfR4hsHoafQtGbMtP63U5eNcUydbVsM0py3JLoBaL1yKBK4L01sg==} + '@algolia/client-analytics@5.49.1': + resolution: {integrity: sha512-048T9/Z8OeLmTk8h76QUqaNFp7Rq2VgS2Zm6Y2tNMYGQ1uNuzePY/udB5l5krlXll7ZGflyCjFvRiOtlPZpE9g==} engines: {node: '>= 14.0.0'} - '@algolia/client-common@5.49.0': - resolution: {integrity: sha512-BDmVDtpDvymfLE5YQ2cPnfWJUVTDJqwpJa03Fsb7yJFJmbeKsUOGsnRkYsTbdzf0FfcvyvBB5zdcbrAIL249bg==} + '@algolia/client-common@5.49.1': + resolution: {integrity: sha512-vp5/a9ikqvf3mn9QvHN8PRekn8hW34aV9eX+O0J5mKPZXeA6Pd5OQEh2ZWf7gJY6yyfTlLp5LMFzQUAU+Fpqpg==} engines: {node: '>= 14.0.0'} - '@algolia/client-insights@5.49.0': - resolution: {integrity: sha512-lDCXsnZDx7zQ5GzSi1EL3l07EbksjrdpMgixFRCdi2QqeBe42HIQJfPPqdWtwrAXjORRopsPx2z+gGYJP/79Uw==} + '@algolia/client-insights@5.49.1': + resolution: {integrity: sha512-B6N7PgkvYrul3bntTz/l6uXnhQ2bvP+M7NqTcayh681tSqPaA5cJCUBp/vrP7vpPRpej4Eeyx2qz5p0tE/2N2g==} engines: {node: '>= 14.0.0'} - '@algolia/client-personalization@5.49.0': - resolution: {integrity: sha512-5k/KB+DsnesNKvMUEwTKSzExOf5zYbiPg7DVO7g1Y/+bhMb3wmxp9RFwfqwPfmoRTjptqvwhR6a0593tWVkmAw==} + '@algolia/client-personalization@5.49.1': + resolution: {integrity: sha512-v+4DN+lkYfBd01Hbnb9ZrCHe7l+mvihyx218INRX/kaCXROIWUDIT1cs3urQxfE7kXBFnLsqYeOflQALv/gA5w==} engines: {node: '>= 14.0.0'} - '@algolia/client-query-suggestions@5.49.0': - resolution: {integrity: sha512-pjHNcrdjn7p3RQ5Ql1Baiwfdn9bkS+z4gqONJJP8kuZFqYP8Olthy4G7fl5bCB29UjdUj5EWlaElQKCtPluCtQ==} + '@algolia/client-query-suggestions@5.49.1': + resolution: {integrity: sha512-Un11cab6ZCv0W+Jiak8UktGIqoa4+gSNgEZNfG8m8eTsXGqwIEr370H3Rqwj87zeNSlFpH2BslMXJ/cLNS1qtg==} engines: {node: '>= 14.0.0'} - '@algolia/client-search@5.49.0': - resolution: {integrity: sha512-uGv2P3lcviuaZy8ZOAyN60cZdhOVyjXwaDC27a1qdp3Pb5Azn+lLSJwkHU4TNRpphHmIei9HZuUxwQroujdPjw==} + '@algolia/client-search@5.49.1': + resolution: {integrity: sha512-Nt9hri7nbOo0RipAsGjIssHkpLMHHN/P7QqENywAq5TLsoYDzUyJGny8FEiD/9KJUxtGH8blGpMedilI6kK3rA==} engines: {node: '>= 14.0.0'} - '@algolia/ingestion@1.49.0': - resolution: {integrity: sha512-sH10mftYlmvfGbvAgTtHYbCIstmNUdiAkX//0NAyBcJRB6NnZmNsdLxdFGbE8ZqlGXzoe0zcUIau+DxKpXtqCw==} + '@algolia/ingestion@1.49.1': + resolution: {integrity: sha512-b5hUXwDqje0Y4CpU6VL481DXgPgxpTD5sYMnfQTHKgUispGnaCLCm2/T9WbJo1YNUbX3iHtYDArp804eD6CmRQ==} engines: {node: '>= 14.0.0'} - '@algolia/monitoring@1.49.0': - resolution: {integrity: sha512-RqhGcVVxLpK+lA0GZKywlQIXsI704flc12nv/hOdrwiuk/Uyhxs46KLM4ngip7wutU+7t0PYZWiVayrqBPN/ZQ==} + '@algolia/monitoring@1.49.1': + resolution: {integrity: sha512-bvrXwZ0WsL3rN6Q4m4QqxsXFCo6WAew7sAdrpMQMK4Efn4/W920r9ptOuckejOSSvyLr9pAWgC5rsHhR2FYuYw==} engines: {node: '>= 14.0.0'} - '@algolia/recommend@5.49.0': - resolution: {integrity: sha512-kg8omGRvmIPhhqtUqSIpS3regFKWuoWh3WqyUhGk27N4T7q8I++8TsDYsV8vK7oBEzw706m2vUBtN5fw2fDjmw==} + '@algolia/recommend@5.49.1': + resolution: {integrity: sha512-h2yz3AGeGkQwNgbLmoe3bxYs8fac4An1CprKTypYyTU/k3Q+9FbIvJ8aS1DoBKaTjSRZVoyQS7SZQio6GaHbZw==} engines: {node: '>= 14.0.0'} - '@algolia/requester-browser-xhr@5.49.0': - resolution: {integrity: sha512-BaZ6NTI9VdSbDcsMucdKhTuFFxv6B+3dAZZBozX12fKopYsELh7dBLfZwm8evDCIicmNjIjobi4VNnNshrCSuw==} + '@algolia/requester-browser-xhr@5.49.1': + resolution: {integrity: sha512-2UPyRuUR/qpqSqH8mxFV5uBZWEpxhGPHLlx9Xf6OVxr79XO2ctzZQAhsmTZ6X22x+N8MBWpB9UEky7YU2HGFgA==} engines: {node: '>= 14.0.0'} - '@algolia/requester-fetch@5.49.0': - resolution: {integrity: sha512-2nxISxS5xO5DLAj6QzMImgJv6CqpZhJVkhcTFULESR/k4IpbkJTEHmViVTxw9MlrU8B5GfwHevFd7vKL3a7MXQ==} + '@algolia/requester-fetch@5.49.1': + resolution: {integrity: sha512-N+xlE4lN+wpuT+4vhNEwPVlrfN+DWAZmSX9SYhbz986Oq8AMsqdntOqUyiOXVxYsQtfLwmiej24vbvJGYv1Qtw==} engines: {node: '>= 14.0.0'} - '@algolia/requester-node-http@5.49.0': - resolution: {integrity: sha512-S/B94C6piEUXGpN3y5ysmNKMEqdfNVAXYY+FxivEAV5IGJjbEuLZfT8zPPZUWGw9vh6lgP80Hye2G5aVBNIa8Q==} + '@algolia/requester-node-http@5.49.1': + resolution: {integrity: sha512-zA5bkUOB5PPtTr182DJmajCiizHp0rCJQ0Chf96zNFvkdESKYlDeYA3tQ7r2oyHbu/8DiohAQ5PZ85edctzbXA==} engines: {node: '>= 14.0.0'} '@ampproject/remapping@2.3.0': @@ -1638,8 +1638,8 @@ packages: resolution: {integrity: sha512-QxULHAm7cNu72w97JUNCBFODFaXpbDg+dP8b/oWFAZ2MTRppA3U00Y2L1HqaS4J6yBqxwa/Y3nMBaxVKbB/NsA==} engines: {node: '>=20.19.0'} - '@cypress/request@3.0.9': - resolution: {integrity: sha512-I3l7FdGRXluAS44/0NguwWlO83J18p0vlr2FYHrJkWdNYhgVoiYo61IXPqaOsL+vNxU1ZqMACzItGK3/KKDsdw==} + '@cypress/request@3.0.10': + resolution: {integrity: sha512-hauBrOdvu08vOsagkZ/Aju5XuiZx6ldsLfByg1htFeldhex+PeMrYauANzFsMJeAA0+dyPLbDoX2OYuvVoLDkQ==} engines: {node: '>= 6'} '@discoveryjs/json-ext@0.6.3': @@ -1842,8 +1842,8 @@ packages: resolution: {integrity: sha512-/nr9K9wkr3P1EzFTdFdMoLuo1PmIxjmwvPozwoSodjNBdefGujXQUF93u1DDZpEaTuDvMsIQddsd35BwtrW9Xw==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} - '@eslint/eslintrc@3.3.3': - resolution: {integrity: sha512-Kr+LPIUVKz2qkx1HAMH8q1q6azbqBAsXJUxBl/ODDuVPX45Z9DfwB8tPjTi6nNZ8BuM3nbJxC5zCAg5elnBUTQ==} + '@eslint/eslintrc@3.3.4': + resolution: {integrity: sha512-4h4MVF8pmBsncB60r0wSJiIeUKTSD4m7FmTFThG8RHlsg9ajqckLm9OraguFGZE4vVdpiI1Q4+hFnisopmG6gQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@eslint/js@10.0.1': @@ -2082,6 +2082,10 @@ packages: '@firebase/webchannel-wrapper@1.0.5': resolution: {integrity: sha512-+uGNN7rkfn41HLO0vekTFhTxk61eKa8mTpRGLO0QSqlQdKvIoGAvLp3ppdVIWbTGYJWM6Kp0iN+PjMIOcnVqTw==} + '@gar/promise-retry@1.0.2': + resolution: {integrity: sha512-Lm/ZLhDZcBECta3TmCQSngiQykFdfw+QtI1/GYMsZd4l3nG+P8WLB16XuS7WaBGLQ+9E+cOcWQsth9cayuGt8g==} + engines: {node: ^20.17.0 || >=22.9.0} + '@glideapps/ts-necessities@2.2.3': resolution: {integrity: sha512-gXi0awOZLHk3TbW55GZLCPP6O+y/b5X1pBXKBVckFONSwF1z1E5ND2BGJsghQFah+pW7pkkyFb2VhUQI2qhL5w==} @@ -2508,8 +2512,8 @@ packages: cpu: [x64] os: [win32] - '@modelcontextprotocol/sdk@1.26.0': - resolution: {integrity: sha512-Y5RmPncpiDtTXDbLKswIJzTqu2hyBKxTNsgKqKclDbhIgg1wgtf1fRuvxgTnRfcnxtvvgbIEcqUOzZrJ6iSReg==} + '@modelcontextprotocol/sdk@1.27.1': + resolution: {integrity: sha512-sr6GbP+4edBwFndLbM60gf07z0FQ79gaExpnsjMGePXqFcSSb7t6iscpjk9DhFhwd+mTEQrzNafGP8/iGGFYaA==} engines: {node: '>=18'} peerDependencies: '@cfworker/json-schema': ^4.1.1 @@ -3131,15 +3135,6 @@ packages: rollup: optional: true - '@rollup/pluginutils@5.2.0': - resolution: {integrity: sha512-qWJ2ZTbmumwiLFomfzTyt5Kng4hwPi9rwCYN4SHb6eaRU1KNO4ccxINHr/VhH4GgPlt1XfSTLX2LBTme8ne4Zw==} - engines: {node: '>=14.0.0'} - peerDependencies: - rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 - peerDependenciesMeta: - rollup: - optional: true - '@rollup/pluginutils@5.3.0': resolution: {integrity: sha512-5EdhGZtnu3V88ces7s53hhfK5KSASnJZv8Lulpc04cWO3REESroJXg73DFsOmgbU2BhwV0E20bu2IDZb3VKW4Q==} engines: {node: '>=14.0.0'} @@ -3154,139 +3149,277 @@ packages: cpu: [arm] os: [android] + '@rollup/rollup-android-arm-eabi@4.59.0': + resolution: {integrity: sha512-upnNBkA6ZH2VKGcBj9Fyl9IGNPULcjXRlg0LLeaioQWueH30p6IXtJEbKAgvyv+mJaMxSm1l6xwDXYjpEMiLMg==} + cpu: [arm] + os: [android] + '@rollup/rollup-android-arm64@4.57.1': resolution: {integrity: sha512-dQaAddCY9YgkFHZcFNS/606Exo8vcLHwArFZ7vxXq4rigo2bb494/xKMMwRRQW6ug7Js6yXmBZhSBRuBvCCQ3w==} cpu: [arm64] os: [android] + '@rollup/rollup-android-arm64@4.59.0': + resolution: {integrity: sha512-hZ+Zxj3SySm4A/DylsDKZAeVg0mvi++0PYVceVyX7hemkw7OreKdCvW2oQ3T1FMZvCaQXqOTHb8qmBShoqk69Q==} + cpu: [arm64] + os: [android] + '@rollup/rollup-darwin-arm64@4.57.1': resolution: {integrity: sha512-crNPrwJOrRxagUYeMn/DZwqN88SDmwaJ8Cvi/TN1HnWBU7GwknckyosC2gd0IqYRsHDEnXf328o9/HC6OkPgOg==} cpu: [arm64] os: [darwin] + '@rollup/rollup-darwin-arm64@4.59.0': + resolution: {integrity: sha512-W2Psnbh1J8ZJw0xKAd8zdNgF9HRLkdWwwdWqubSVk0pUuQkoHnv7rx4GiF9rT4t5DIZGAsConRE3AxCdJ4m8rg==} + cpu: [arm64] + os: [darwin] + '@rollup/rollup-darwin-x64@4.57.1': resolution: {integrity: sha512-Ji8g8ChVbKrhFtig5QBV7iMaJrGtpHelkB3lsaKzadFBe58gmjfGXAOfI5FV0lYMH8wiqsxKQ1C9B0YTRXVy4w==} cpu: [x64] os: [darwin] + '@rollup/rollup-darwin-x64@4.59.0': + resolution: {integrity: sha512-ZW2KkwlS4lwTv7ZVsYDiARfFCnSGhzYPdiOU4IM2fDbL+QGlyAbjgSFuqNRbSthybLbIJ915UtZBtmuLrQAT/w==} + cpu: [x64] + os: [darwin] + '@rollup/rollup-freebsd-arm64@4.57.1': resolution: {integrity: sha512-R+/WwhsjmwodAcz65guCGFRkMb4gKWTcIeLy60JJQbXrJ97BOXHxnkPFrP+YwFlaS0m+uWJTstrUA9o+UchFug==} cpu: [arm64] os: [freebsd] + '@rollup/rollup-freebsd-arm64@4.59.0': + resolution: {integrity: sha512-EsKaJ5ytAu9jI3lonzn3BgG8iRBjV4LxZexygcQbpiU0wU0ATxhNVEpXKfUa0pS05gTcSDMKpn3Sx+QB9RlTTA==} + cpu: [arm64] + os: [freebsd] + '@rollup/rollup-freebsd-x64@4.57.1': resolution: {integrity: sha512-IEQTCHeiTOnAUC3IDQdzRAGj3jOAYNr9kBguI7MQAAZK3caezRrg0GxAb6Hchg4lxdZEI5Oq3iov/w/hnFWY9Q==} cpu: [x64] os: [freebsd] + '@rollup/rollup-freebsd-x64@4.59.0': + resolution: {integrity: sha512-d3DuZi2KzTMjImrxoHIAODUZYoUUMsuUiY4SRRcJy6NJoZ6iIqWnJu9IScV9jXysyGMVuW+KNzZvBLOcpdl3Vg==} + cpu: [x64] + os: [freebsd] + '@rollup/rollup-linux-arm-gnueabihf@4.57.1': resolution: {integrity: sha512-F8sWbhZ7tyuEfsmOxwc2giKDQzN3+kuBLPwwZGyVkLlKGdV1nvnNwYD0fKQ8+XS6hp9nY7B+ZeK01EBUE7aHaw==} cpu: [arm] os: [linux] libc: [glibc] + '@rollup/rollup-linux-arm-gnueabihf@4.59.0': + resolution: {integrity: sha512-t4ONHboXi/3E0rT6OZl1pKbl2Vgxf9vJfWgmUoCEVQVxhW6Cw/c8I6hbbu7DAvgp82RKiH7TpLwxnJeKv2pbsw==} + cpu: [arm] + os: [linux] + libc: [glibc] + '@rollup/rollup-linux-arm-musleabihf@4.57.1': resolution: {integrity: sha512-rGfNUfn0GIeXtBP1wL5MnzSj98+PZe/AXaGBCRmT0ts80lU5CATYGxXukeTX39XBKsxzFpEeK+Mrp9faXOlmrw==} cpu: [arm] os: [linux] libc: [musl] + '@rollup/rollup-linux-arm-musleabihf@4.59.0': + resolution: {integrity: sha512-CikFT7aYPA2ufMD086cVORBYGHffBo4K8MQ4uPS/ZnY54GKj36i196u8U+aDVT2LX4eSMbyHtyOh7D7Zvk2VvA==} + cpu: [arm] + os: [linux] + libc: [musl] + '@rollup/rollup-linux-arm64-gnu@4.57.1': resolution: {integrity: sha512-MMtej3YHWeg/0klK2Qodf3yrNzz6CGjo2UntLvk2RSPlhzgLvYEB3frRvbEF2wRKh1Z2fDIg9KRPe1fawv7C+g==} cpu: [arm64] os: [linux] libc: [glibc] + '@rollup/rollup-linux-arm64-gnu@4.59.0': + resolution: {integrity: sha512-jYgUGk5aLd1nUb1CtQ8E+t5JhLc9x5WdBKew9ZgAXg7DBk0ZHErLHdXM24rfX+bKrFe+Xp5YuJo54I5HFjGDAA==} + cpu: [arm64] + os: [linux] + libc: [glibc] + '@rollup/rollup-linux-arm64-musl@4.57.1': resolution: {integrity: sha512-1a/qhaaOXhqXGpMFMET9VqwZakkljWHLmZOX48R0I/YLbhdxr1m4gtG1Hq7++VhVUmf+L3sTAf9op4JlhQ5u1Q==} cpu: [arm64] os: [linux] libc: [musl] + '@rollup/rollup-linux-arm64-musl@4.59.0': + resolution: {integrity: sha512-peZRVEdnFWZ5Bh2KeumKG9ty7aCXzzEsHShOZEFiCQlDEepP1dpUl/SrUNXNg13UmZl+gzVDPsiCwnV1uI0RUA==} + cpu: [arm64] + os: [linux] + libc: [musl] + '@rollup/rollup-linux-loong64-gnu@4.57.1': resolution: {integrity: sha512-QWO6RQTZ/cqYtJMtxhkRkidoNGXc7ERPbZN7dVW5SdURuLeVU7lwKMpo18XdcmpWYd0qsP1bwKPf7DNSUinhvA==} cpu: [loong64] os: [linux] libc: [glibc] + '@rollup/rollup-linux-loong64-gnu@4.59.0': + resolution: {integrity: sha512-gbUSW/97f7+r4gHy3Jlup8zDG190AuodsWnNiXErp9mT90iCy9NKKU0Xwx5k8VlRAIV2uU9CsMnEFg/xXaOfXg==} + cpu: [loong64] + os: [linux] + libc: [glibc] + '@rollup/rollup-linux-loong64-musl@4.57.1': resolution: {integrity: sha512-xpObYIf+8gprgWaPP32xiN5RVTi/s5FCR+XMXSKmhfoJjrpRAjCuuqQXyxUa/eJTdAE6eJ+KDKaoEqjZQxh3Gw==} cpu: [loong64] os: [linux] libc: [musl] + '@rollup/rollup-linux-loong64-musl@4.59.0': + resolution: {integrity: sha512-yTRONe79E+o0FWFijasoTjtzG9EBedFXJMl888NBEDCDV9I2wGbFFfJQQe63OijbFCUZqxpHz1GzpbtSFikJ4Q==} + cpu: [loong64] + os: [linux] + libc: [musl] + '@rollup/rollup-linux-ppc64-gnu@4.57.1': resolution: {integrity: sha512-4BrCgrpZo4hvzMDKRqEaW1zeecScDCR+2nZ86ATLhAoJ5FQ+lbHVD3ttKe74/c7tNT9c6F2viwB3ufwp01Oh2w==} cpu: [ppc64] os: [linux] libc: [glibc] + '@rollup/rollup-linux-ppc64-gnu@4.59.0': + resolution: {integrity: sha512-sw1o3tfyk12k3OEpRddF68a1unZ5VCN7zoTNtSn2KndUE+ea3m3ROOKRCZxEpmT9nsGnogpFP9x6mnLTCaoLkA==} + cpu: [ppc64] + os: [linux] + libc: [glibc] + '@rollup/rollup-linux-ppc64-musl@4.57.1': resolution: {integrity: sha512-NOlUuzesGauESAyEYFSe3QTUguL+lvrN1HtwEEsU2rOwdUDeTMJdO5dUYl/2hKf9jWydJrO9OL/XSSf65R5+Xw==} cpu: [ppc64] os: [linux] libc: [musl] + '@rollup/rollup-linux-ppc64-musl@4.59.0': + resolution: {integrity: sha512-+2kLtQ4xT3AiIxkzFVFXfsmlZiG5FXYW7ZyIIvGA7Bdeuh9Z0aN4hVyXS/G1E9bTP/vqszNIN/pUKCk/BTHsKA==} + cpu: [ppc64] + os: [linux] + libc: [musl] + '@rollup/rollup-linux-riscv64-gnu@4.57.1': resolution: {integrity: sha512-ptA88htVp0AwUUqhVghwDIKlvJMD/fmL/wrQj99PRHFRAG6Z5nbWoWG4o81Nt9FT+IuqUQi+L31ZKAFeJ5Is+A==} cpu: [riscv64] os: [linux] libc: [glibc] + '@rollup/rollup-linux-riscv64-gnu@4.59.0': + resolution: {integrity: sha512-NDYMpsXYJJaj+I7UdwIuHHNxXZ/b/N2hR15NyH3m2qAtb/hHPA4g4SuuvrdxetTdndfj9b1WOmy73kcPRoERUg==} + cpu: [riscv64] + os: [linux] + libc: [glibc] + '@rollup/rollup-linux-riscv64-musl@4.57.1': resolution: {integrity: sha512-S51t7aMMTNdmAMPpBg7OOsTdn4tySRQvklmL3RpDRyknk87+Sp3xaumlatU+ppQ+5raY7sSTcC2beGgvhENfuw==} cpu: [riscv64] os: [linux] libc: [musl] + '@rollup/rollup-linux-riscv64-musl@4.59.0': + resolution: {integrity: sha512-nLckB8WOqHIf1bhymk+oHxvM9D3tyPndZH8i8+35p/1YiVoVswPid2yLzgX7ZJP0KQvnkhM4H6QZ5m0LzbyIAg==} + cpu: [riscv64] + os: [linux] + libc: [musl] + '@rollup/rollup-linux-s390x-gnu@4.57.1': resolution: {integrity: sha512-Bl00OFnVFkL82FHbEqy3k5CUCKH6OEJL54KCyx2oqsmZnFTR8IoNqBF+mjQVcRCT5sB6yOvK8A37LNm/kPJiZg==} cpu: [s390x] os: [linux] libc: [glibc] + '@rollup/rollup-linux-s390x-gnu@4.59.0': + resolution: {integrity: sha512-oF87Ie3uAIvORFBpwnCvUzdeYUqi2wY6jRFWJAy1qus/udHFYIkplYRW+wo+GRUP4sKzYdmE1Y3+rY5Gc4ZO+w==} + cpu: [s390x] + os: [linux] + libc: [glibc] + '@rollup/rollup-linux-x64-gnu@4.57.1': resolution: {integrity: sha512-ABca4ceT4N+Tv/GtotnWAeXZUZuM/9AQyCyKYyKnpk4yoA7QIAuBt6Hkgpw8kActYlew2mvckXkvx0FfoInnLg==} cpu: [x64] os: [linux] libc: [glibc] + '@rollup/rollup-linux-x64-gnu@4.59.0': + resolution: {integrity: sha512-3AHmtQq/ppNuUspKAlvA8HtLybkDflkMuLK4DPo77DfthRb71V84/c4MlWJXixZz4uruIH4uaa07IqoAkG64fg==} + cpu: [x64] + os: [linux] + libc: [glibc] + '@rollup/rollup-linux-x64-musl@4.57.1': resolution: {integrity: sha512-HFps0JeGtuOR2convgRRkHCekD7j+gdAuXM+/i6kGzQtFhlCtQkpwtNzkNj6QhCDp7DRJ7+qC/1Vg2jt5iSOFw==} cpu: [x64] os: [linux] libc: [musl] + '@rollup/rollup-linux-x64-musl@4.59.0': + resolution: {integrity: sha512-2UdiwS/9cTAx7qIUZB/fWtToJwvt0Vbo0zmnYt7ED35KPg13Q0ym1g442THLC7VyI6JfYTP4PiSOWyoMdV2/xg==} + cpu: [x64] + os: [linux] + libc: [musl] + '@rollup/rollup-openbsd-x64@4.57.1': resolution: {integrity: sha512-H+hXEv9gdVQuDTgnqD+SQffoWoc0Of59AStSzTEj/feWTBAnSfSD3+Dql1ZruJQxmykT/JVY0dE8Ka7z0DH1hw==} cpu: [x64] os: [openbsd] + '@rollup/rollup-openbsd-x64@4.59.0': + resolution: {integrity: sha512-M3bLRAVk6GOwFlPTIxVBSYKUaqfLrn8l0psKinkCFxl4lQvOSz8ZrKDz2gxcBwHFpci0B6rttydI4IpS4IS/jQ==} + cpu: [x64] + os: [openbsd] + '@rollup/rollup-openharmony-arm64@4.57.1': resolution: {integrity: sha512-4wYoDpNg6o/oPximyc/NG+mYUejZrCU2q+2w6YZqrAs2UcNUChIZXjtafAiiZSUc7On8v5NyNj34Kzj/Ltk6dQ==} cpu: [arm64] os: [openharmony] + '@rollup/rollup-openharmony-arm64@4.59.0': + resolution: {integrity: sha512-tt9KBJqaqp5i5HUZzoafHZX8b5Q2Fe7UjYERADll83O4fGqJ49O1FsL6LpdzVFQcpwvnyd0i+K/VSwu/o/nWlA==} + cpu: [arm64] + os: [openharmony] + '@rollup/rollup-win32-arm64-msvc@4.57.1': resolution: {integrity: sha512-O54mtsV/6LW3P8qdTcamQmuC990HDfR71lo44oZMZlXU4tzLrbvTii87Ni9opq60ds0YzuAlEr/GNwuNluZyMQ==} cpu: [arm64] os: [win32] + '@rollup/rollup-win32-arm64-msvc@4.59.0': + resolution: {integrity: sha512-V5B6mG7OrGTwnxaNUzZTDTjDS7F75PO1ae6MJYdiMu60sq0CqN5CVeVsbhPxalupvTX8gXVSU9gq+Rx1/hvu6A==} + cpu: [arm64] + os: [win32] + '@rollup/rollup-win32-ia32-msvc@4.57.1': resolution: {integrity: sha512-P3dLS+IerxCT/7D2q2FYcRdWRl22dNbrbBEtxdWhXrfIMPP9lQhb5h4Du04mdl5Woq05jVCDPCMF7Ub0NAjIew==} cpu: [ia32] os: [win32] + '@rollup/rollup-win32-ia32-msvc@4.59.0': + resolution: {integrity: sha512-UKFMHPuM9R0iBegwzKF4y0C4J9u8C6MEJgFuXTBerMk7EJ92GFVFYBfOZaSGLu6COf7FxpQNqhNS4c4icUPqxA==} + cpu: [ia32] + os: [win32] + '@rollup/rollup-win32-x64-gnu@4.57.1': resolution: {integrity: sha512-VMBH2eOOaKGtIJYleXsi2B8CPVADrh+TyNxJ4mWPnKfLB/DBUmzW+5m1xUrcwWoMfSLagIRpjUFeW5CO5hyciQ==} cpu: [x64] os: [win32] + '@rollup/rollup-win32-x64-gnu@4.59.0': + resolution: {integrity: sha512-laBkYlSS1n2L8fSo1thDNGrCTQMmxjYY5G0WFWjFFYZkKPjsMBsgJfGf4TLxXrF6RyhI60L8TMOjBMvXiTcxeA==} + cpu: [x64] + os: [win32] + '@rollup/rollup-win32-x64-msvc@4.57.1': resolution: {integrity: sha512-mxRFDdHIWRxg3UfIIAwCm6NzvxG0jDX/wBN6KsQFTvKFqqg9vTrWUE68qEjHt19A5wwx5X5aUi2zuZT7YR0jrA==} cpu: [x64] os: [win32] + '@rollup/rollup-win32-x64-msvc@4.59.0': + resolution: {integrity: sha512-2HRCml6OztYXyJXAvdDXPKcawukWY2GpR5/nxKp4iBgiO3wcoEGkAaqctIbZcNB6KlUQBIqt8VYkNSj2397EfA==} + cpu: [x64] + os: [win32] + '@rollup/wasm-node@4.57.1': resolution: {integrity: sha512-b0rcJH8ykEanfgTeDtlPubhphIUOx0oaAek+3hizTaFkoC1FBSTsY0GixwB4D5HZ5r3Gt2yI9c8M13OcW/kW5A==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} @@ -3602,39 +3735,39 @@ packages: '@types/yauzl@2.10.3': resolution: {integrity: sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==} - '@typescript-eslint/eslint-plugin@8.56.0': - resolution: {integrity: sha512-lRyPDLzNCuae71A3t9NEINBiTn7swyOhvUj3MyUOxb8x6g6vPEFoOU+ZRmGMusNC3X3YMhqMIX7i8ShqhT74Pw==} + '@typescript-eslint/eslint-plugin@8.56.1': + resolution: {integrity: sha512-Jz9ZztpB37dNC+HU2HI28Bs9QXpzCz+y/twHOwhyrIRdbuVDxSytJNDl6z/aAKlaRIwC7y8wJdkBv7FxYGgi0A==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - '@typescript-eslint/parser': ^8.56.0 + '@typescript-eslint/parser': ^8.56.1 eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/parser@8.56.0': - resolution: {integrity: sha512-IgSWvLobTDOjnaxAfDTIHaECbkNlAlKv2j5SjpB2v7QHKv1FIfjwMy8FsDbVfDX/KjmCmYICcw7uGaXLhtsLNg==} + '@typescript-eslint/parser@8.56.1': + resolution: {integrity: sha512-klQbnPAAiGYFyI02+znpBRLyjL4/BrBd0nyWkdC0s/6xFLkXYQ8OoRrSkqacS1ddVxf/LDyODIKbQ5TgKAf/Fg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/project-service@8.56.0': - resolution: {integrity: sha512-M3rnyL1vIQOMeWxTWIW096/TtVP+8W3p/XnaFflhmcFp+U4zlxUxWj4XwNs6HbDeTtN4yun0GNTTDBw/SvufKg==} + '@typescript-eslint/project-service@8.56.1': + resolution: {integrity: sha512-TAdqQTzHNNvlVFfR+hu2PDJrURiwKsUvxFn1M0h95BB8ah5jejas08jUWG4dBA68jDMI988IvtfdAI53JzEHOQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/scope-manager@8.56.0': - resolution: {integrity: sha512-7UiO/XwMHquH+ZzfVCfUNkIXlp/yQjjnlYUyYz7pfvlK3/EyyN6BK+emDmGNyQLBtLGaYrTAI6KOw8tFucWL2w==} + '@typescript-eslint/scope-manager@8.56.1': + resolution: {integrity: sha512-YAi4VDKcIZp0O4tz/haYKhmIDZFEUPOreKbfdAN3SzUDMcPhJ8QI99xQXqX+HoUVq8cs85eRKnD+rne2UAnj2w==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/tsconfig-utils@8.56.0': - resolution: {integrity: sha512-bSJoIIt4o3lKXD3xmDh9chZcjCz5Lk8xS7Rxn+6l5/pKrDpkCwtQNQQwZ2qRPk7TkUYhrq3WPIHXOXlbXP0itg==} + '@typescript-eslint/tsconfig-utils@8.56.1': + resolution: {integrity: sha512-qOtCYzKEeyr3aR9f28mPJqBty7+DBqsdd63eO0yyDwc6vgThj2UjWfJIcsFeSucYydqcuudMOprZ+x1SpF3ZuQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/type-utils@8.56.0': - resolution: {integrity: sha512-qX2L3HWOU2nuDs6GzglBeuFXviDODreS58tLY/BALPC7iu3Fa+J7EOTwnX9PdNBxUI7Uh0ntP0YWGnxCkXzmfA==} + '@typescript-eslint/type-utils@8.56.1': + resolution: {integrity: sha512-yB/7dxi7MgTtGhZdaHCemf7PuwrHMenHjmzgUW1aJpO+bBU43OycnM3Wn+DdvDO/8zzA9HlhaJ0AUGuvri4oGg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 @@ -3644,25 +3777,25 @@ packages: resolution: {integrity: sha512-ujT0Je8GI5BJWi+/mMoR0wxwVEQaxM+pi30xuMiJETlX80OPovb2p9E8ss87gnSVtYXtJoU9U1Cowcr6w2FE0w==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/types@8.56.0': - resolution: {integrity: sha512-DBsLPs3GsWhX5HylbP9HNG15U0bnwut55Lx12bHB9MpXxQ+R5GC8MwQe+N1UFXxAeQDvEsEDY6ZYwX03K7Z6HQ==} + '@typescript-eslint/types@8.56.1': + resolution: {integrity: sha512-dbMkdIUkIkchgGDIv7KLUpa0Mda4IYjo4IAMJUZ+3xNoUXxMsk9YtKpTHSChRS85o+H9ftm51gsK1dZReY9CVw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/typescript-estree@8.56.0': - resolution: {integrity: sha512-ex1nTUMWrseMltXUHmR2GAQ4d+WjkZCT4f+4bVsps8QEdh0vlBsaCokKTPlnqBFqqGaxilDNJG7b8dolW2m43Q==} + '@typescript-eslint/typescript-estree@8.56.1': + resolution: {integrity: sha512-qzUL1qgalIvKWAf9C1HpvBjif+Vm6rcT5wZd4VoMb9+Km3iS3Cv9DY6dMRMDtPnwRAFyAi7YXJpTIEXLvdfPxg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/utils@8.56.0': - resolution: {integrity: sha512-RZ3Qsmi2nFGsS+n+kjLAYDPVlrzf7UhTffrDIKr+h2yzAlYP/y5ZulU0yeDEPItos2Ph46JAL5P/On3pe7kDIQ==} + '@typescript-eslint/utils@8.56.1': + resolution: {integrity: sha512-HPAVNIME3tABJ61siYlHzSWCGtOoeP2RTIaHXFMPqjrQKCGB9OgUVdiNgH7TJS2JNIQ5qQ4RsAUDuGaGme/KOA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/visitor-keys@8.56.0': - resolution: {integrity: sha512-q+SL+b+05Ud6LbEE35qe4A99P+htKTKVbyiNEe45eCbJFyh/HVK9QXwlrbz+Q4L8SOW4roxSVwXYj4DMBT7Ieg==} + '@typescript-eslint/visitor-keys@8.56.1': + resolution: {integrity: sha512-KiROIzYdEV85YygXw6BI/Dx4fnBlFQu6Mq4QE4MOH9fFnhohw6wX/OAvDY2/C+ut0I3RSPKenvZJIVYqJNkhEw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@verdaccio/auth@8.0.0-next-8.29': @@ -3927,9 +4060,6 @@ packages: peerDependencies: ajv: ^8.8.2 - ajv@6.12.6: - resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} - ajv@6.14.0: resolution: {integrity: sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw==} @@ -3939,8 +4069,8 @@ packages: ajv@8.18.0: resolution: {integrity: sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==} - algoliasearch@5.49.0: - resolution: {integrity: sha512-Tse7vx7WOvbU+kpq/L3BrBhSWTPbtMa59zIEhMn+Z2NoxZlpcCRUDCRxQ7kDFs1T3CHxDgvb+mDuILiBBpBaAA==} + algoliasearch@5.49.1: + resolution: {integrity: sha512-X3Pp2aRQhg4xUC6PQtkubn5NpRKuUPQ9FPDQlx36SmpFwwH2N0/tw4c+NXV3nw3PsgeUs+BuWGP0gjz3TvENLQ==} engines: {node: '>= 14.0.0'} ansi-colors@4.1.3: @@ -4538,10 +4668,6 @@ packages: core-util-is@1.0.3: resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} - cors@2.8.5: - resolution: {integrity: sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==} - engines: {node: '>= 0.10'} - cors@2.8.6: resolution: {integrity: sha512-tJtZBBHA6vjIAaF6EnIaq6laBBP9aq/Y3ouVJjEfoHbRBcHBAHYcMh/w8LDrk2PvIMMq8gmopa5D4V8RmbrxGw==} engines: {node: '>= 0.10'} @@ -5041,10 +5167,6 @@ packages: resolution: {integrity: sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - eslint-visitor-keys@5.0.0: - resolution: {integrity: sha512-A0XeIi7CXU7nPlfHS9loMYEKxUaONu/hTEzHTGba9Huu94Cq1hPivf+DE5erJozZOky0LfvXAyrV/tcswpLI0Q==} - engines: {node: ^20.19.0 || ^22.13.0 || >=24} - eslint-visitor-keys@5.0.1: resolution: {integrity: sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} @@ -5387,6 +5509,10 @@ packages: resolution: {integrity: sha512-QZjmEOC+IT1uk6Rx0sX22V6uHWVwbdbxf1faPqJ1QhLdGgsRGCZoyaQBm/piRdJy/D2um6hM1UP7ZEeQ4EkP+Q==} engines: {node: '>=18'} + get-east-asian-width@1.5.0: + resolution: {integrity: sha512-CQ+bEO+Tva/qlmw24dCejulK5pMzVnUOFOijVogd3KQs07HnRIgp8TGipvCCRT06xeYEbpbgwaCxglFyiuIcmA==} + engines: {node: '>=18'} + get-intrinsic@1.3.0: resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==} engines: {node: '>= 0.4'} @@ -6261,8 +6387,8 @@ packages: lines-and-columns@1.2.4: resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} - listr2@10.1.0: - resolution: {integrity: sha512-/6t2KgDYIcCjhELwvrRxi1gaJ4xCGLTjNvh6mSjYenBkrZxggek8EwCbwBU33GMUCpyyrOzz2TzylrO5mTiI1w==} + listr2@10.1.1: + resolution: {integrity: sha512-4oogpJzRRGtq41B0GKZIldzYCnQTgX2DPM/XvcfNu7g2E7sxaast009150RKFZBnrHAnfMOUaedIqdIOLCCRxQ==} engines: {node: '>=22.0.0'} lmdb@3.5.1: @@ -6487,10 +6613,6 @@ packages: minimalistic-assert@1.0.1: resolution: {integrity: sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==} - minimatch@10.2.0: - resolution: {integrity: sha512-ugkC31VaVg9cF0DFVoADH12k6061zNZkZON+aX8AWsR9GhPcErkcMBceb6znR8wLERM2AkkOxy2nWRLpT9Jq5w==} - engines: {node: 20 || >=22} - minimatch@10.2.2: resolution: {integrity: sha512-+G4CpNBxa5MprY+04MbgOw1v7So6n5JY166pFi9KfYwT78fxScCeSNQSNzp6dpPSW2rONOps6Ocam1wFhCgoVw==} engines: {node: 18 || 20 || >=22} @@ -6498,6 +6620,9 @@ packages: minimatch@3.1.2: resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + minimatch@3.1.4: + resolution: {integrity: sha512-twmL+S8+7yIsE9wsqgzU3E8/LumN3M3QELrBZ20OdmQ9jB2JvW5oZtBEmft84k/Gs5CG9mqtWc6Y9vW+JEzGxw==} + minimatch@5.1.6: resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==} engines: {node: '>=10'} @@ -6882,8 +7007,8 @@ packages: package-json-from-dist@1.0.1: resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} - pacote@21.3.1: - resolution: {integrity: sha512-O0EDXi85LF4AzdjG74GUwEArhdvawi/YOHcsW6IijKNj7wm8IvEWNF5GnfuxNpQ/ZpO3L37+v8hqdVh8GgWYhg==} + pacote@21.4.0: + resolution: {integrity: sha512-DR7mn7HUOomAX1BORnpYy678qVIidbvOojkBscqy27dRKN+s/hLeQT1MeYYrx1Cxh62jyKjiWiDV7RTTqB+ZEQ==} engines: {node: ^20.17.0 || >=22.9.0} hasBin: true @@ -7207,10 +7332,6 @@ packages: resolution: {integrity: sha512-8YOJEHtxpySA3fFDyCRxA+UUV+fA+rTWnuWvylOK/NCjhY+b4ocCtmu8TtsWb+mYeU+GCHf/S66KZF/AsteKHg==} engines: {node: '>=0.9'} - qs@6.14.0: - resolution: {integrity: sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==} - engines: {node: '>=0.6'} - qs@6.14.2: resolution: {integrity: sha512-V/yCWTTF7VJ9hIh18Ugr2zhJMP01MY7c5kh4J870L7imm6/DIzBsNLTXzMwUA3yZ5b/KBqLx8Kp3uRvd7xSe3Q==} engines: {node: '>=0.6'} @@ -7412,8 +7533,8 @@ packages: rollup: ^3.29.4 || ^4 typescript: ^4.5 || ^5.0 - rollup-plugin-sourcemaps2@0.5.4: - resolution: {integrity: sha512-XK6ITvEsKtUFN1GQbYKoqilwh1yKxTS9BLaFlVsm0IaYUYe3eVnhBWzKP4AHbkBO2BNOheGNlf407K7wCj6Rrw==} + rollup-plugin-sourcemaps2@0.5.6: + resolution: {integrity: sha512-oalmewAT4GLVsW6NugcDybx0ypet94vU0dUK3VofdYoWiN4ZjoX1L4dizFd0OhoJ78r/Am9sARTR9gMrX0cJ7w==} engines: {node: '>=18.0.0'} peerDependencies: '@types/node': '>=18.0.0' @@ -7427,6 +7548,11 @@ packages: engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true + rollup@4.59.0: + resolution: {integrity: sha512-2oMpl67a3zCH9H79LeMcbDhXW/UmWG/y2zuqnF2jQq5uq9TbM9TVyXvA4+t+ne2IIkBdrLpAaRQAvo7YI/Yyeg==} + engines: {node: '>=18.0.0', npm: '>=8.0.0'} + hasBin: true + router@2.2.0: resolution: {integrity: sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==} engines: {node: '>= 18'} @@ -7823,6 +7949,10 @@ packages: resolution: {integrity: sha512-KpqHIdDL9KwYk22wEOg/VIqYbrnLeSApsKT/bSj6Ez7pn3CftUiLAv2Lccpq1ALcpLV9UX1Ppn92npZWu2w/aw==} engines: {node: '>=20'} + string-width@8.2.0: + resolution: {integrity: sha512-6hJPQ8N0V0P3SNmP6h2J99RLuzrWz2gvT7VnK5tKvrNqJoyS9W4/Fb8mo31UiPvy00z7DQXkP2hnKBVav76thw==} + engines: {node: '>=20'} + string.prototype.trim@1.2.10: resolution: {integrity: sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==} engines: {node: '>= 0.4'} @@ -8272,8 +8402,8 @@ packages: resolution: {integrity: sha512-JBYCaSTQSUws/EXOqNrh7iOyWPrGLTYSeufCS3Y6BOCJbfDiy2Nh8PbstoZn/L9ZbzUesjPPiIZ4Ou3eUaK0Mw==} engines: {node: '>=18'} - verdaccio@6.2.5: - resolution: {integrity: sha512-sIek+ZF0a1aaRwHo9I5vbONGXzcAgbf5psEmbGVMG9M/MslblIae2wdehG6a2lSxsk4B9c8Ar0j/ZmliTjiStA==} + verdaccio@6.2.7: + resolution: {integrity: sha512-rOqa2Bl713kQtaWRMcKzAIh9gTcn2fTtWITzm0aGtIz1gmutp4F2TUIYek+BbajoAKfoc+xnI8dVNmmaCSUUZA==} engines: {node: '>=18'} hasBin: true @@ -8513,6 +8643,10 @@ packages: wordwrap@1.0.0: resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==} + wrap-ansi@10.0.0: + resolution: {integrity: sha512-SGcvg80f0wUy2/fXES19feHMz8E0JoXv2uNgHOu4Dgi2OrCy1lqwFYEJz1BLbDI0exjPMe/ZdzZ/YpGECBG/aQ==} + engines: {node: '>=20'} + wrap-ansi@6.2.0: resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} engines: {node: '>=8'} @@ -8703,89 +8837,89 @@ snapshots: '@actions/io@3.0.2': {} - '@algolia/abtesting@1.15.0': + '@algolia/abtesting@1.15.1': dependencies: - '@algolia/client-common': 5.49.0 - '@algolia/requester-browser-xhr': 5.49.0 - '@algolia/requester-fetch': 5.49.0 - '@algolia/requester-node-http': 5.49.0 + '@algolia/client-common': 5.49.1 + '@algolia/requester-browser-xhr': 5.49.1 + '@algolia/requester-fetch': 5.49.1 + '@algolia/requester-node-http': 5.49.1 - '@algolia/client-abtesting@5.49.0': + '@algolia/client-abtesting@5.49.1': dependencies: - '@algolia/client-common': 5.49.0 - '@algolia/requester-browser-xhr': 5.49.0 - '@algolia/requester-fetch': 5.49.0 - '@algolia/requester-node-http': 5.49.0 + '@algolia/client-common': 5.49.1 + '@algolia/requester-browser-xhr': 5.49.1 + '@algolia/requester-fetch': 5.49.1 + '@algolia/requester-node-http': 5.49.1 - '@algolia/client-analytics@5.49.0': + '@algolia/client-analytics@5.49.1': dependencies: - '@algolia/client-common': 5.49.0 - '@algolia/requester-browser-xhr': 5.49.0 - '@algolia/requester-fetch': 5.49.0 - '@algolia/requester-node-http': 5.49.0 + '@algolia/client-common': 5.49.1 + '@algolia/requester-browser-xhr': 5.49.1 + '@algolia/requester-fetch': 5.49.1 + '@algolia/requester-node-http': 5.49.1 - '@algolia/client-common@5.49.0': {} + '@algolia/client-common@5.49.1': {} - '@algolia/client-insights@5.49.0': + '@algolia/client-insights@5.49.1': dependencies: - '@algolia/client-common': 5.49.0 - '@algolia/requester-browser-xhr': 5.49.0 - '@algolia/requester-fetch': 5.49.0 - '@algolia/requester-node-http': 5.49.0 + '@algolia/client-common': 5.49.1 + '@algolia/requester-browser-xhr': 5.49.1 + '@algolia/requester-fetch': 5.49.1 + '@algolia/requester-node-http': 5.49.1 - '@algolia/client-personalization@5.49.0': + '@algolia/client-personalization@5.49.1': dependencies: - '@algolia/client-common': 5.49.0 - '@algolia/requester-browser-xhr': 5.49.0 - '@algolia/requester-fetch': 5.49.0 - '@algolia/requester-node-http': 5.49.0 + '@algolia/client-common': 5.49.1 + '@algolia/requester-browser-xhr': 5.49.1 + '@algolia/requester-fetch': 5.49.1 + '@algolia/requester-node-http': 5.49.1 - '@algolia/client-query-suggestions@5.49.0': + '@algolia/client-query-suggestions@5.49.1': dependencies: - '@algolia/client-common': 5.49.0 - '@algolia/requester-browser-xhr': 5.49.0 - '@algolia/requester-fetch': 5.49.0 - '@algolia/requester-node-http': 5.49.0 + '@algolia/client-common': 5.49.1 + '@algolia/requester-browser-xhr': 5.49.1 + '@algolia/requester-fetch': 5.49.1 + '@algolia/requester-node-http': 5.49.1 - '@algolia/client-search@5.49.0': + '@algolia/client-search@5.49.1': dependencies: - '@algolia/client-common': 5.49.0 - '@algolia/requester-browser-xhr': 5.49.0 - '@algolia/requester-fetch': 5.49.0 - '@algolia/requester-node-http': 5.49.0 + '@algolia/client-common': 5.49.1 + '@algolia/requester-browser-xhr': 5.49.1 + '@algolia/requester-fetch': 5.49.1 + '@algolia/requester-node-http': 5.49.1 - '@algolia/ingestion@1.49.0': + '@algolia/ingestion@1.49.1': dependencies: - '@algolia/client-common': 5.49.0 - '@algolia/requester-browser-xhr': 5.49.0 - '@algolia/requester-fetch': 5.49.0 - '@algolia/requester-node-http': 5.49.0 + '@algolia/client-common': 5.49.1 + '@algolia/requester-browser-xhr': 5.49.1 + '@algolia/requester-fetch': 5.49.1 + '@algolia/requester-node-http': 5.49.1 - '@algolia/monitoring@1.49.0': + '@algolia/monitoring@1.49.1': dependencies: - '@algolia/client-common': 5.49.0 - '@algolia/requester-browser-xhr': 5.49.0 - '@algolia/requester-fetch': 5.49.0 - '@algolia/requester-node-http': 5.49.0 + '@algolia/client-common': 5.49.1 + '@algolia/requester-browser-xhr': 5.49.1 + '@algolia/requester-fetch': 5.49.1 + '@algolia/requester-node-http': 5.49.1 - '@algolia/recommend@5.49.0': + '@algolia/recommend@5.49.1': dependencies: - '@algolia/client-common': 5.49.0 - '@algolia/requester-browser-xhr': 5.49.0 - '@algolia/requester-fetch': 5.49.0 - '@algolia/requester-node-http': 5.49.0 + '@algolia/client-common': 5.49.1 + '@algolia/requester-browser-xhr': 5.49.1 + '@algolia/requester-fetch': 5.49.1 + '@algolia/requester-node-http': 5.49.1 - '@algolia/requester-browser-xhr@5.49.0': + '@algolia/requester-browser-xhr@5.49.1': dependencies: - '@algolia/client-common': 5.49.0 + '@algolia/client-common': 5.49.1 - '@algolia/requester-fetch@5.49.0': + '@algolia/requester-fetch@5.49.1': dependencies: - '@algolia/client-common': 5.49.0 + '@algolia/client-common': 5.49.1 - '@algolia/requester-node-http@5.49.0': + '@algolia/requester-node-http@5.49.1': dependencies: - '@algolia/client-common': 5.49.0 + '@algolia/client-common': 5.49.1 '@ampproject/remapping@2.3.0': dependencies: @@ -8870,11 +9004,11 @@ snapshots: rxjs: 7.8.2 tslib: 2.8.1 - '@angular/ng-dev@https://codeload.github.com/angular/dev-infra-private-ng-dev-builds/tar.gz/99c925a35a7decb22cb0dc7b5fb83b2f41876179(@modelcontextprotocol/sdk@1.26.0(zod@4.3.6))': + '@angular/ng-dev@https://codeload.github.com/angular/dev-infra-private-ng-dev-builds/tar.gz/99c925a35a7decb22cb0dc7b5fb83b2f41876179(@modelcontextprotocol/sdk@1.27.1(zod@4.3.6))': dependencies: '@actions/core': 3.0.0 '@google-cloud/spanner': 8.0.0(supports-color@10.2.2) - '@google/genai': 1.42.0(@modelcontextprotocol/sdk@1.26.0(zod@4.3.6))(bufferutil@4.1.0)(supports-color@10.2.2)(utf-8-validate@6.0.6) + '@google/genai': 1.42.0(@modelcontextprotocol/sdk@1.27.1(zod@4.3.6))(bufferutil@4.1.0)(supports-color@10.2.2)(utf-8-validate@6.0.6) '@inquirer/prompts': 8.3.0(@types/node@24.10.13) '@inquirer/type': 4.0.3(@types/node@24.10.13) '@octokit/auth-app': 8.2.0 @@ -9697,7 +9831,7 @@ snapshots: '@csstools/css-tokenizer@4.0.0': {} - '@cypress/request@3.0.9': + '@cypress/request@3.0.10': dependencies: aws-sign2: 0.7.0 aws4: 1.13.2 @@ -9712,7 +9846,7 @@ snapshots: json-stringify-safe: 5.0.1 mime-types: 2.1.35 performance-now: 2.1.0 - qs: 6.14.0 + qs: 6.14.2 safe-buffer: 5.2.1 tough-cookie: 5.1.2 tunnel-agent: 0.6.0 @@ -9843,16 +9977,16 @@ snapshots: dependencies: '@types/json-schema': 7.0.15 - '@eslint/eslintrc@3.3.3': + '@eslint/eslintrc@3.3.4': dependencies: - ajv: 6.12.6 + ajv: 6.14.0 debug: 4.4.3(supports-color@10.2.2) espree: 10.4.0 globals: 14.0.0 ignore: 5.3.2 import-fresh: 3.3.1 js-yaml: 4.1.1 - minimatch: 3.1.2 + minimatch: 3.1.4 strip-json-comments: 3.1.1 transitivePeerDependencies: - supports-color @@ -10188,6 +10322,10 @@ snapshots: '@firebase/webchannel-wrapper@1.0.5': {} + '@gar/promise-retry@1.0.2': + dependencies: + retry: 0.13.1 + '@glideapps/ts-necessities@2.2.3': {} '@google-cloud/common@6.0.0(supports-color@10.2.2)': @@ -10249,14 +10387,14 @@ snapshots: transitivePeerDependencies: - supports-color - '@google/genai@1.42.0(@modelcontextprotocol/sdk@1.26.0(zod@4.3.6))(bufferutil@4.1.0)(supports-color@10.2.2)(utf-8-validate@6.0.6)': + '@google/genai@1.42.0(@modelcontextprotocol/sdk@1.27.1(zod@4.3.6))(bufferutil@4.1.0)(supports-color@10.2.2)(utf-8-validate@6.0.6)': dependencies: google-auth-library: 10.5.0(supports-color@10.2.2) p-retry: 4.6.2 protobufjs: 7.5.4 ws: 8.19.0(bufferutil@4.1.0)(utf-8-validate@6.0.6) optionalDependencies: - '@modelcontextprotocol/sdk': 1.26.0(zod@4.3.6) + '@modelcontextprotocol/sdk': 1.27.1(zod@4.3.6) transitivePeerDependencies: - bufferutil - supports-color @@ -10602,11 +10740,11 @@ snapshots: '@leichtgewicht/ip-codec@2.0.5': {} - '@listr2/prompt-adapter-inquirer@4.1.1(@inquirer/prompts@8.3.0(@types/node@24.10.13))(@types/node@24.10.13)(listr2@10.1.0)': + '@listr2/prompt-adapter-inquirer@4.1.1(@inquirer/prompts@8.3.0(@types/node@24.10.13))(@types/node@24.10.13)(listr2@10.1.1)': dependencies: '@inquirer/prompts': 8.3.0(@types/node@24.10.13) '@inquirer/type': 4.0.3(@types/node@24.10.13) - listr2: 10.1.0 + listr2: 10.1.1 transitivePeerDependencies: - '@types/node' @@ -10631,7 +10769,7 @@ snapshots: '@lmdb/lmdb-win32-x64@3.5.1': optional: true - '@modelcontextprotocol/sdk@1.26.0(zod@4.3.6)': + '@modelcontextprotocol/sdk@1.27.1(zod@4.3.6)': dependencies: '@hono/node-server': 1.19.9(hono@4.11.9) ajv: 8.18.0 @@ -11208,13 +11346,13 @@ snapshots: '@rolldown/pluginutils@1.0.0-rc.5': {} - '@rollup/plugin-alias@6.0.0(rollup@4.57.1)': + '@rollup/plugin-alias@6.0.0(rollup@4.59.0)': optionalDependencies: - rollup: 4.57.1 + rollup: 4.59.0 - '@rollup/plugin-commonjs@29.0.0(rollup@4.57.1)': + '@rollup/plugin-commonjs@29.0.0(rollup@4.59.0)': dependencies: - '@rollup/pluginutils': 5.3.0(rollup@4.57.1) + '@rollup/pluginutils': 5.3.0(rollup@4.59.0) commondir: 1.0.1 estree-walker: 2.0.2 fdir: 6.5.0(picomatch@4.0.3) @@ -11222,7 +11360,7 @@ snapshots: magic-string: 0.30.21 picomatch: 4.0.3 optionalDependencies: - rollup: 4.57.1 + rollup: 4.59.0 '@rollup/plugin-json@6.1.0(rollup@4.57.1)': dependencies: @@ -11230,17 +11368,23 @@ snapshots: optionalDependencies: rollup: 4.57.1 - '@rollup/plugin-node-resolve@16.0.3(rollup@4.57.1)': + '@rollup/plugin-json@6.1.0(rollup@4.59.0)': dependencies: - '@rollup/pluginutils': 5.3.0(rollup@4.57.1) + '@rollup/pluginutils': 5.3.0(rollup@4.59.0) + optionalDependencies: + rollup: 4.59.0 + + '@rollup/plugin-node-resolve@16.0.3(rollup@4.59.0)': + dependencies: + '@rollup/pluginutils': 5.3.0(rollup@4.59.0) '@types/resolve': 1.20.2 deepmerge: 4.3.1 is-module: 1.0.0 resolve: 1.22.11 optionalDependencies: - rollup: 4.57.1 + rollup: 4.59.0 - '@rollup/pluginutils@5.2.0(rollup@4.57.1)': + '@rollup/pluginutils@5.3.0(rollup@4.57.1)': dependencies: '@types/estree': 1.0.8 estree-walker: 2.0.2 @@ -11248,89 +11392,164 @@ snapshots: optionalDependencies: rollup: 4.57.1 - '@rollup/pluginutils@5.3.0(rollup@4.57.1)': + '@rollup/pluginutils@5.3.0(rollup@4.59.0)': dependencies: '@types/estree': 1.0.8 estree-walker: 2.0.2 picomatch: 4.0.3 optionalDependencies: - rollup: 4.57.1 + rollup: 4.59.0 '@rollup/rollup-android-arm-eabi@4.57.1': optional: true + '@rollup/rollup-android-arm-eabi@4.59.0': + optional: true + '@rollup/rollup-android-arm64@4.57.1': optional: true + '@rollup/rollup-android-arm64@4.59.0': + optional: true + '@rollup/rollup-darwin-arm64@4.57.1': optional: true + '@rollup/rollup-darwin-arm64@4.59.0': + optional: true + '@rollup/rollup-darwin-x64@4.57.1': optional: true + '@rollup/rollup-darwin-x64@4.59.0': + optional: true + '@rollup/rollup-freebsd-arm64@4.57.1': optional: true + '@rollup/rollup-freebsd-arm64@4.59.0': + optional: true + '@rollup/rollup-freebsd-x64@4.57.1': optional: true + '@rollup/rollup-freebsd-x64@4.59.0': + optional: true + '@rollup/rollup-linux-arm-gnueabihf@4.57.1': optional: true + '@rollup/rollup-linux-arm-gnueabihf@4.59.0': + optional: true + '@rollup/rollup-linux-arm-musleabihf@4.57.1': optional: true + '@rollup/rollup-linux-arm-musleabihf@4.59.0': + optional: true + '@rollup/rollup-linux-arm64-gnu@4.57.1': optional: true + '@rollup/rollup-linux-arm64-gnu@4.59.0': + optional: true + '@rollup/rollup-linux-arm64-musl@4.57.1': optional: true + '@rollup/rollup-linux-arm64-musl@4.59.0': + optional: true + '@rollup/rollup-linux-loong64-gnu@4.57.1': optional: true + '@rollup/rollup-linux-loong64-gnu@4.59.0': + optional: true + '@rollup/rollup-linux-loong64-musl@4.57.1': optional: true + '@rollup/rollup-linux-loong64-musl@4.59.0': + optional: true + '@rollup/rollup-linux-ppc64-gnu@4.57.1': optional: true + '@rollup/rollup-linux-ppc64-gnu@4.59.0': + optional: true + '@rollup/rollup-linux-ppc64-musl@4.57.1': optional: true + '@rollup/rollup-linux-ppc64-musl@4.59.0': + optional: true + '@rollup/rollup-linux-riscv64-gnu@4.57.1': optional: true + '@rollup/rollup-linux-riscv64-gnu@4.59.0': + optional: true + '@rollup/rollup-linux-riscv64-musl@4.57.1': optional: true + '@rollup/rollup-linux-riscv64-musl@4.59.0': + optional: true + '@rollup/rollup-linux-s390x-gnu@4.57.1': optional: true + '@rollup/rollup-linux-s390x-gnu@4.59.0': + optional: true + '@rollup/rollup-linux-x64-gnu@4.57.1': optional: true + '@rollup/rollup-linux-x64-gnu@4.59.0': + optional: true + '@rollup/rollup-linux-x64-musl@4.57.1': optional: true + '@rollup/rollup-linux-x64-musl@4.59.0': + optional: true + '@rollup/rollup-openbsd-x64@4.57.1': optional: true + '@rollup/rollup-openbsd-x64@4.59.0': + optional: true + '@rollup/rollup-openharmony-arm64@4.57.1': optional: true + '@rollup/rollup-openharmony-arm64@4.59.0': + optional: true + '@rollup/rollup-win32-arm64-msvc@4.57.1': optional: true + '@rollup/rollup-win32-arm64-msvc@4.59.0': + optional: true + '@rollup/rollup-win32-ia32-msvc@4.57.1': optional: true + '@rollup/rollup-win32-ia32-msvc@4.59.0': + optional: true + '@rollup/rollup-win32-x64-gnu@4.57.1': optional: true + '@rollup/rollup-win32-x64-gnu@4.59.0': + optional: true + '@rollup/rollup-win32-x64-msvc@4.57.1': optional: true + '@rollup/rollup-win32-x64-msvc@4.59.0': + optional: true + '@rollup/wasm-node@4.57.1': dependencies: '@types/estree': 1.0.8 @@ -11713,14 +11932,14 @@ snapshots: '@types/node': 22.19.11 optional: true - '@typescript-eslint/eslint-plugin@8.56.0(@typescript-eslint/parser@8.56.0(eslint@10.0.2(jiti@2.6.1))(typescript@5.9.3))(eslint@10.0.2(jiti@2.6.1))(typescript@5.9.3)': + '@typescript-eslint/eslint-plugin@8.56.1(@typescript-eslint/parser@8.56.1(eslint@10.0.2(jiti@2.6.1))(typescript@5.9.3))(eslint@10.0.2(jiti@2.6.1))(typescript@5.9.3)': dependencies: '@eslint-community/regexpp': 4.12.2 - '@typescript-eslint/parser': 8.56.0(eslint@10.0.2(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/scope-manager': 8.56.0 - '@typescript-eslint/type-utils': 8.56.0(eslint@10.0.2(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/utils': 8.56.0(eslint@10.0.2(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/visitor-keys': 8.56.0 + '@typescript-eslint/parser': 8.56.1(eslint@10.0.2(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/scope-manager': 8.56.1 + '@typescript-eslint/type-utils': 8.56.1(eslint@10.0.2(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/utils': 8.56.1(eslint@10.0.2(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/visitor-keys': 8.56.1 eslint: 10.0.2(jiti@2.6.1) ignore: 7.0.5 natural-compare: 1.4.0 @@ -11729,41 +11948,41 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.56.0(eslint@10.0.2(jiti@2.6.1))(typescript@5.9.3)': + '@typescript-eslint/parser@8.56.1(eslint@10.0.2(jiti@2.6.1))(typescript@5.9.3)': dependencies: - '@typescript-eslint/scope-manager': 8.56.0 - '@typescript-eslint/types': 8.56.0 - '@typescript-eslint/typescript-estree': 8.56.0(typescript@5.9.3) - '@typescript-eslint/visitor-keys': 8.56.0 + '@typescript-eslint/scope-manager': 8.56.1 + '@typescript-eslint/types': 8.56.1 + '@typescript-eslint/typescript-estree': 8.56.1(typescript@5.9.3) + '@typescript-eslint/visitor-keys': 8.56.1 debug: 4.4.3(supports-color@10.2.2) eslint: 10.0.2(jiti@2.6.1) typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/project-service@8.56.0(typescript@5.9.3)': + '@typescript-eslint/project-service@8.56.1(typescript@5.9.3)': dependencies: - '@typescript-eslint/tsconfig-utils': 8.56.0(typescript@5.9.3) - '@typescript-eslint/types': 8.56.0 + '@typescript-eslint/tsconfig-utils': 8.56.1(typescript@5.9.3) + '@typescript-eslint/types': 8.56.1 debug: 4.4.3(supports-color@10.2.2) typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/scope-manager@8.56.0': + '@typescript-eslint/scope-manager@8.56.1': dependencies: - '@typescript-eslint/types': 8.56.0 - '@typescript-eslint/visitor-keys': 8.56.0 + '@typescript-eslint/types': 8.56.1 + '@typescript-eslint/visitor-keys': 8.56.1 - '@typescript-eslint/tsconfig-utils@8.56.0(typescript@5.9.3)': + '@typescript-eslint/tsconfig-utils@8.56.1(typescript@5.9.3)': dependencies: typescript: 5.9.3 - '@typescript-eslint/type-utils@8.56.0(eslint@10.0.2(jiti@2.6.1))(typescript@5.9.3)': + '@typescript-eslint/type-utils@8.56.1(eslint@10.0.2(jiti@2.6.1))(typescript@5.9.3)': dependencies: - '@typescript-eslint/types': 8.56.0 - '@typescript-eslint/typescript-estree': 8.56.0(typescript@5.9.3) - '@typescript-eslint/utils': 8.56.0(eslint@10.0.2(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/types': 8.56.1 + '@typescript-eslint/typescript-estree': 8.56.1(typescript@5.9.3) + '@typescript-eslint/utils': 8.56.1(eslint@10.0.2(jiti@2.6.1))(typescript@5.9.3) debug: 4.4.3(supports-color@10.2.2) eslint: 10.0.2(jiti@2.6.1) ts-api-utils: 2.4.0(typescript@5.9.3) @@ -11773,16 +11992,16 @@ snapshots: '@typescript-eslint/types@8.55.0': {} - '@typescript-eslint/types@8.56.0': {} + '@typescript-eslint/types@8.56.1': {} - '@typescript-eslint/typescript-estree@8.56.0(typescript@5.9.3)': + '@typescript-eslint/typescript-estree@8.56.1(typescript@5.9.3)': dependencies: - '@typescript-eslint/project-service': 8.56.0(typescript@5.9.3) - '@typescript-eslint/tsconfig-utils': 8.56.0(typescript@5.9.3) - '@typescript-eslint/types': 8.56.0 - '@typescript-eslint/visitor-keys': 8.56.0 + '@typescript-eslint/project-service': 8.56.1(typescript@5.9.3) + '@typescript-eslint/tsconfig-utils': 8.56.1(typescript@5.9.3) + '@typescript-eslint/types': 8.56.1 + '@typescript-eslint/visitor-keys': 8.56.1 debug: 4.4.3(supports-color@10.2.2) - minimatch: 9.0.5 + minimatch: 10.2.2 semver: 7.7.4 tinyglobby: 0.2.15 ts-api-utils: 2.4.0(typescript@5.9.3) @@ -11790,21 +12009,21 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.56.0(eslint@10.0.2(jiti@2.6.1))(typescript@5.9.3)': + '@typescript-eslint/utils@8.56.1(eslint@10.0.2(jiti@2.6.1))(typescript@5.9.3)': dependencies: '@eslint-community/eslint-utils': 4.9.1(eslint@10.0.2(jiti@2.6.1)) - '@typescript-eslint/scope-manager': 8.56.0 - '@typescript-eslint/types': 8.56.0 - '@typescript-eslint/typescript-estree': 8.56.0(typescript@5.9.3) + '@typescript-eslint/scope-manager': 8.56.1 + '@typescript-eslint/types': 8.56.1 + '@typescript-eslint/typescript-estree': 8.56.1(typescript@5.9.3) eslint: 10.0.2(jiti@2.6.1) typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/visitor-keys@8.56.0': + '@typescript-eslint/visitor-keys@8.56.1': dependencies: - '@typescript-eslint/types': 8.56.0 - eslint-visitor-keys: 5.0.0 + '@typescript-eslint/types': 8.56.1 + eslint-visitor-keys: 5.0.1 '@verdaccio/auth@8.0.0-next-8.29': dependencies: @@ -12129,10 +12348,6 @@ snapshots: dependencies: acorn: 8.15.0 - acorn-jsx@5.3.2(acorn@8.15.0): - dependencies: - acorn: 8.15.0 - acorn-jsx@5.3.2(acorn@8.16.0): dependencies: acorn: 8.16.0 @@ -12177,13 +12392,6 @@ snapshots: ajv: 8.18.0 fast-deep-equal: 3.1.3 - ajv@6.12.6: - dependencies: - fast-deep-equal: 3.1.3 - fast-json-stable-stringify: 2.1.0 - json-schema-traverse: 0.4.1 - uri-js: 4.4.1 - ajv@6.14.0: dependencies: fast-deep-equal: 3.1.3 @@ -12205,22 +12413,22 @@ snapshots: json-schema-traverse: 1.0.0 require-from-string: 2.0.2 - algoliasearch@5.49.0: - dependencies: - '@algolia/abtesting': 1.15.0 - '@algolia/client-abtesting': 5.49.0 - '@algolia/client-analytics': 5.49.0 - '@algolia/client-common': 5.49.0 - '@algolia/client-insights': 5.49.0 - '@algolia/client-personalization': 5.49.0 - '@algolia/client-query-suggestions': 5.49.0 - '@algolia/client-search': 5.49.0 - '@algolia/ingestion': 1.49.0 - '@algolia/monitoring': 1.49.0 - '@algolia/recommend': 5.49.0 - '@algolia/requester-browser-xhr': 5.49.0 - '@algolia/requester-fetch': 5.49.0 - '@algolia/requester-node-http': 5.49.0 + algoliasearch@5.49.1: + dependencies: + '@algolia/abtesting': 1.15.1 + '@algolia/client-abtesting': 5.49.1 + '@algolia/client-analytics': 5.49.1 + '@algolia/client-common': 5.49.1 + '@algolia/client-insights': 5.49.1 + '@algolia/client-personalization': 5.49.1 + '@algolia/client-query-suggestions': 5.49.1 + '@algolia/client-search': 5.49.1 + '@algolia/ingestion': 1.49.1 + '@algolia/monitoring': 1.49.1 + '@algolia/recommend': 5.49.1 + '@algolia/requester-browser-xhr': 5.49.1 + '@algolia/requester-fetch': 5.49.1 + '@algolia/requester-node-http': 5.49.1 ansi-colors@4.1.3: {} @@ -12901,11 +13109,6 @@ snapshots: core-util-is@1.0.3: {} - cors@2.8.5: - dependencies: - object-assign: 4.1.1 - vary: 1.1.2 - cors@2.8.6: dependencies: object-assign: 4.1.1 @@ -13420,17 +13623,17 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-module-utils@2.12.1(@typescript-eslint/parser@8.56.0(eslint@10.0.2(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint@10.0.2(jiti@2.6.1)): + eslint-module-utils@2.12.1(@typescript-eslint/parser@8.56.1(eslint@10.0.2(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint@10.0.2(jiti@2.6.1)): dependencies: debug: 3.2.7 optionalDependencies: - '@typescript-eslint/parser': 8.56.0(eslint@10.0.2(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/parser': 8.56.1(eslint@10.0.2(jiti@2.6.1))(typescript@5.9.3) eslint: 10.0.2(jiti@2.6.1) eslint-import-resolver-node: 0.3.9 transitivePeerDependencies: - supports-color - eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.56.0(eslint@10.0.2(jiti@2.6.1))(typescript@5.9.3))(eslint@10.0.2(jiti@2.6.1)): + eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.56.1(eslint@10.0.2(jiti@2.6.1))(typescript@5.9.3))(eslint@10.0.2(jiti@2.6.1)): dependencies: '@rtsao/scc': 1.1.0 array-includes: 3.1.9 @@ -13441,7 +13644,7 @@ snapshots: doctrine: 2.1.0 eslint: 10.0.2(jiti@2.6.1) eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.56.0(eslint@10.0.2(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint@10.0.2(jiti@2.6.1)) + eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.56.1(eslint@10.0.2(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint@10.0.2(jiti@2.6.1)) hasown: 2.0.2 is-core-module: 2.16.1 is-glob: 4.0.3 @@ -13453,7 +13656,7 @@ snapshots: string.prototype.trimend: 1.0.9 tsconfig-paths: 3.15.0 optionalDependencies: - '@typescript-eslint/parser': 8.56.0(eslint@10.0.2(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/parser': 8.56.1(eslint@10.0.2(jiti@2.6.1))(typescript@5.9.3) transitivePeerDependencies: - eslint-import-resolver-typescript - eslint-import-resolver-webpack @@ -13475,8 +13678,6 @@ snapshots: eslint-visitor-keys@4.2.1: {} - eslint-visitor-keys@5.0.0: {} - eslint-visitor-keys@5.0.1: {} eslint@10.0.2(jiti@2.6.1): @@ -13518,8 +13719,8 @@ snapshots: espree@10.4.0: dependencies: - acorn: 8.15.0 - acorn-jsx: 5.3.2(acorn@8.15.0) + acorn: 8.16.0 + acorn-jsx: 5.3.2(acorn@8.16.0) eslint-visitor-keys: 4.2.1 espree@11.1.1: @@ -13948,6 +14149,8 @@ snapshots: get-east-asian-width@1.4.0: {} + get-east-asian-width@1.5.0: {} + get-intrinsic@1.3.0: dependencies: call-bind-apply-helpers: 1.0.2 @@ -14144,7 +14347,7 @@ snapshots: har-validator@5.1.5: dependencies: - ajv: 6.12.6 + ajv: 6.14.0 har-schema: 2.0.0 has-ansi@2.0.0: @@ -14345,7 +14548,7 @@ snapshots: ignore-walk@8.0.0: dependencies: - minimatch: 10.2.0 + minimatch: 10.2.2 ignore@5.3.2: {} @@ -14934,14 +15137,14 @@ snapshots: lines-and-columns@1.2.4: {} - listr2@10.1.0: + listr2@10.1.1: dependencies: cli-truncate: 5.1.1 colorette: 2.0.20 eventemitter3: 5.0.4 log-update: 7.1.0 rfdc: 1.4.1 - wrap-ansi: 9.0.2 + wrap-ansi: 10.0.0 lmdb@3.5.1: dependencies: @@ -15166,10 +15369,6 @@ snapshots: minimalistic-assert@1.0.1: {} - minimatch@10.2.0: - dependencies: - brace-expansion: 5.0.2 - minimatch@10.2.2: dependencies: brace-expansion: 5.0.2 @@ -15178,6 +15377,10 @@ snapshots: dependencies: brace-expansion: 1.1.12 + minimatch@3.1.4: + dependencies: + brace-expansion: 1.1.12 + minimatch@5.1.6: dependencies: brace-expansion: 2.0.2 @@ -15595,8 +15798,9 @@ snapshots: package-json-from-dist@1.0.1: {} - pacote@21.3.1: + pacote@21.4.0: dependencies: + '@gar/promise-retry': 1.0.2 '@npmcli/git': 7.0.1 '@npmcli/installed-package-contents': 4.0.0 '@npmcli/package-json': 7.0.4 @@ -15610,7 +15814,6 @@ snapshots: npm-pick-manifest: 11.0.3 npm-registry-fetch: 19.1.1 proc-log: 6.1.0 - promise-retry: 2.0.1 sigstore: 4.1.0 ssri: 13.0.1 tar: 7.5.9 @@ -15949,10 +16152,6 @@ snapshots: qjobs@1.2.0: {} - qs@6.14.0: - dependencies: - side-channel: 1.1.0 - qs@6.14.2: dependencies: side-channel: 1.1.0 @@ -16223,10 +16422,18 @@ snapshots: optionalDependencies: '@babel/code-frame': 7.29.0 - rollup-plugin-sourcemaps2@0.5.4(@types/node@22.19.11)(rollup@4.57.1): + rollup-plugin-dts@6.3.0(rollup@4.59.0)(typescript@5.9.3): dependencies: - '@rollup/pluginutils': 5.2.0(rollup@4.57.1) - rollup: 4.57.1 + magic-string: 0.30.21 + rollup: 4.59.0 + typescript: 5.9.3 + optionalDependencies: + '@babel/code-frame': 7.29.0 + + rollup-plugin-sourcemaps2@0.5.6(@types/node@22.19.11)(rollup@4.59.0): + dependencies: + '@rollup/pluginutils': 5.3.0(rollup@4.59.0) + rollup: 4.59.0 optionalDependencies: '@types/node': 22.19.11 @@ -16261,6 +16468,37 @@ snapshots: '@rollup/rollup-win32-x64-msvc': 4.57.1 fsevents: 2.3.3 + rollup@4.59.0: + dependencies: + '@types/estree': 1.0.8 + optionalDependencies: + '@rollup/rollup-android-arm-eabi': 4.59.0 + '@rollup/rollup-android-arm64': 4.59.0 + '@rollup/rollup-darwin-arm64': 4.59.0 + '@rollup/rollup-darwin-x64': 4.59.0 + '@rollup/rollup-freebsd-arm64': 4.59.0 + '@rollup/rollup-freebsd-x64': 4.59.0 + '@rollup/rollup-linux-arm-gnueabihf': 4.59.0 + '@rollup/rollup-linux-arm-musleabihf': 4.59.0 + '@rollup/rollup-linux-arm64-gnu': 4.59.0 + '@rollup/rollup-linux-arm64-musl': 4.59.0 + '@rollup/rollup-linux-loong64-gnu': 4.59.0 + '@rollup/rollup-linux-loong64-musl': 4.59.0 + '@rollup/rollup-linux-ppc64-gnu': 4.59.0 + '@rollup/rollup-linux-ppc64-musl': 4.59.0 + '@rollup/rollup-linux-riscv64-gnu': 4.59.0 + '@rollup/rollup-linux-riscv64-musl': 4.59.0 + '@rollup/rollup-linux-s390x-gnu': 4.59.0 + '@rollup/rollup-linux-x64-gnu': 4.59.0 + '@rollup/rollup-linux-x64-musl': 4.59.0 + '@rollup/rollup-openbsd-x64': 4.59.0 + '@rollup/rollup-openharmony-arm64': 4.59.0 + '@rollup/rollup-win32-arm64-msvc': 4.59.0 + '@rollup/rollup-win32-ia32-msvc': 4.59.0 + '@rollup/rollup-win32-x64-gnu': 4.59.0 + '@rollup/rollup-win32-x64-msvc': 4.59.0 + fsevents: 2.3.3 + router@2.2.0: dependencies: debug: 4.4.3(supports-color@10.2.2) @@ -16769,6 +17007,11 @@ snapshots: get-east-asian-width: 1.4.0 strip-ansi: 7.1.2 + string-width@8.2.0: + dependencies: + get-east-asian-width: 1.5.0 + strip-ansi: 7.1.2 + string.prototype.trim@1.2.10: dependencies: call-bind: 1.0.8 @@ -17241,9 +17484,9 @@ snapshots: transitivePeerDependencies: - supports-color - verdaccio@6.2.5(encoding@0.1.13): + verdaccio@6.2.7(encoding@0.1.13): dependencies: - '@cypress/request': 3.0.9 + '@cypress/request': 3.0.10 '@verdaccio/auth': 8.0.0-next-8.29 '@verdaccio/config': 8.0.0-next-8.29 '@verdaccio/core': 8.0.0-next-8.29 @@ -17263,14 +17506,14 @@ snapshots: async: 3.2.6 clipanion: 4.0.0-rc.4 compression: 1.8.1 - cors: 2.8.5 + cors: 2.8.6 debug: 4.4.3(supports-color@10.2.2) envinfo: 7.15.0 express: 4.22.1 - lodash: 4.17.21 + lodash: 4.17.23 lru-cache: 7.18.3 mime: 3.0.0 - semver: 7.7.3 + semver: 7.7.4 verdaccio-audit: 13.0.0-next-8.29(encoding@0.1.13) verdaccio-htpasswd: 13.0.0-next-8.29 transitivePeerDependencies: @@ -17573,6 +17816,12 @@ snapshots: wordwrap@1.0.0: {} + wrap-ansi@10.0.0: + dependencies: + ansi-styles: 6.2.3 + string-width: 8.2.0 + strip-ansi: 7.1.2 + wrap-ansi@6.2.0: dependencies: ansi-styles: 4.3.0 From 661d5103ba203bef142b389f4fe71f492b00d351 Mon Sep 17 00:00:00 2001 From: Angular Robot Date: Thu, 26 Feb 2026 12:15:21 +0000 Subject: [PATCH 045/226] build: update cross-repo angular dependencies See associated pull request for more information. --- package.json | 2 +- packages/angular/build/package.json | 2 +- .../angular_devkit/build_angular/package.json | 2 +- pnpm-lock.yaml | 62 ++++++------------- tests/e2e/ng-snapshot/package.json | 32 +++++----- 5 files changed, 39 insertions(+), 61 deletions(-) diff --git a/package.json b/package.json index 1222ad147d90..d7d2d017e354 100644 --- a/package.json +++ b/package.json @@ -51,7 +51,7 @@ "@angular/forms": "21.2.0-rc.0", "@angular/localize": "21.2.0-rc.0", "@angular/material": "21.2.0-rc.0", - "@angular/ng-dev": "https://github.com/angular/dev-infra-private-ng-dev-builds.git#99c925a35a7decb22cb0dc7b5fb83b2f41876179", + "@angular/ng-dev": "https://github.com/angular/dev-infra-private-ng-dev-builds.git#32f536bae2ff587a75b3ec6be9f730011ae91e18", "@angular/platform-browser": "21.2.0-rc.0", "@angular/platform-server": "21.2.0-rc.0", "@angular/router": "21.2.0-rc.0", diff --git a/packages/angular/build/package.json b/packages/angular/build/package.json index 63f734a57456..54731e23c099 100644 --- a/packages/angular/build/package.json +++ b/packages/angular/build/package.json @@ -53,7 +53,7 @@ "@angular/ssr": "workspace:*", "jsdom": "28.1.0", "less": "4.4.2", - "ng-packagr": "21.2.0-next.0", + "ng-packagr": "22.0.0-next.0", "postcss": "8.5.6", "rxjs": "7.8.2", "vitest": "4.0.18" diff --git a/packages/angular_devkit/build_angular/package.json b/packages/angular_devkit/build_angular/package.json index a055ca81b157..fb0828e42ffc 100644 --- a/packages/angular_devkit/build_angular/package.json +++ b/packages/angular_devkit/build_angular/package.json @@ -67,7 +67,7 @@ "devDependencies": { "@angular/ssr": "workspace:*", "browser-sync": "3.0.4", - "ng-packagr": "21.2.0-next.0", + "ng-packagr": "22.0.0-next.0", "undici": "7.22.0" }, "peerDependencies": { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index fb1c105eae00..8767e3d5dacb 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -47,8 +47,8 @@ importers: specifier: 21.2.0-rc.0 version: 21.2.0-rc.0(4ac7caab525408b0a8d5509a5a82c8db) '@angular/ng-dev': - specifier: https://github.com/angular/dev-infra-private-ng-dev-builds.git#99c925a35a7decb22cb0dc7b5fb83b2f41876179 - version: https://codeload.github.com/angular/dev-infra-private-ng-dev-builds/tar.gz/99c925a35a7decb22cb0dc7b5fb83b2f41876179(@modelcontextprotocol/sdk@1.27.1(zod@4.3.6)) + specifier: https://github.com/angular/dev-infra-private-ng-dev-builds.git#32f536bae2ff587a75b3ec6be9f730011ae91e18 + version: https://codeload.github.com/angular/dev-infra-private-ng-dev-builds/tar.gz/32f536bae2ff587a75b3ec6be9f730011ae91e18(@modelcontextprotocol/sdk@1.27.1(zod@4.3.6)) '@angular/platform-browser': specifier: 21.2.0-rc.0 version: 21.2.0-rc.0(@angular/animations@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0)))(@angular/common@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2))(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0)) @@ -423,8 +423,8 @@ importers: specifier: 4.4.2 version: 4.4.2 ng-packagr: - specifier: 21.2.0-next.0 - version: 21.2.0-next.0(@angular/compiler-cli@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(typescript@5.9.3))(tslib@2.8.1)(typescript@5.9.3) + specifier: 22.0.0-next.0 + version: 22.0.0-next.0(@angular/compiler-cli@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(typescript@5.9.3))(tslib@2.8.1)(typescript@5.9.3) postcss: specifier: 8.5.6 version: 8.5.6 @@ -729,8 +729,8 @@ importers: specifier: 3.0.4 version: 3.0.4(bufferutil@4.1.0)(utf-8-validate@6.0.6) ng-packagr: - specifier: 21.2.0-next.0 - version: 21.2.0-next.0(@angular/compiler-cli@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(typescript@5.9.3))(tslib@2.8.1)(typescript@5.9.3) + specifier: 22.0.0-next.0 + version: 22.0.0-next.0(@angular/compiler-cli@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(typescript@5.9.3))(tslib@2.8.1)(typescript@5.9.3) undici: specifier: 7.22.0 version: 7.22.0 @@ -1014,9 +1014,9 @@ packages: '@angular/platform-browser': ^21.0.0-0 || ^21.1.0-0 || ^21.2.0-0 || ^21.3.0-0 || ^22.0.0-0 rxjs: ^6.5.3 || ^7.4.0 - '@angular/ng-dev@https://codeload.github.com/angular/dev-infra-private-ng-dev-builds/tar.gz/99c925a35a7decb22cb0dc7b5fb83b2f41876179': - resolution: {tarball: https://codeload.github.com/angular/dev-infra-private-ng-dev-builds/tar.gz/99c925a35a7decb22cb0dc7b5fb83b2f41876179} - version: 0.0.0-c69b5bccf6661668b2c160f63c02b42f4f400d5a + '@angular/ng-dev@https://codeload.github.com/angular/dev-infra-private-ng-dev-builds/tar.gz/32f536bae2ff587a75b3ec6be9f730011ae91e18': + resolution: {tarball: https://codeload.github.com/angular/dev-infra-private-ng-dev-builds/tar.gz/32f536bae2ff587a75b3ec6be9f730011ae91e18} + version: 0.0.0-16c5f6e199e3e1b67ae5a62385d36366bb9a429d hasBin: true '@angular/platform-browser@21.2.0-rc.0': @@ -6745,15 +6745,15 @@ packages: neo-async@2.6.2: resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} - ng-packagr@21.2.0-next.0: - resolution: {integrity: sha512-BkRAqx1ZljIYpBbjDi/+3y8AMo9S19vm8zx3YWpqMAaIpDb7cvsT+Une9b4oyEK/7p+XvWw+LaPVleTAQtQEMQ==} - engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0} + ng-packagr@22.0.0-next.0: + resolution: {integrity: sha512-AHq15yteBa2u/8OQYLlbD+gaHDfKSz9wfIsCKi/3UOX1BwJXQSXDSnSSAZh0etAw21XxxXTkbEy+2uNj7Ss+Jw==} + engines: {node: ^22.22.0 || >=24.13.1} hasBin: true peerDependencies: - '@angular/compiler-cli': ^21.0.0 || ^21.1.0-next || ^21.2.0-next + '@angular/compiler-cli': ^22.0.0-next tailwindcss: ^2.0.0 || ^3.0.0 || ^4.0.0 tslib: ^2.3.0 - typescript: '>=5.9 <6.0' + typescript: '>=5.9 <6.1' peerDependenciesMeta: tailwindcss: optional: true @@ -9004,7 +9004,7 @@ snapshots: rxjs: 7.8.2 tslib: 2.8.1 - '@angular/ng-dev@https://codeload.github.com/angular/dev-infra-private-ng-dev-builds/tar.gz/99c925a35a7decb22cb0dc7b5fb83b2f41876179(@modelcontextprotocol/sdk@1.27.1(zod@4.3.6))': + '@angular/ng-dev@https://codeload.github.com/angular/dev-infra-private-ng-dev-builds/tar.gz/32f536bae2ff587a75b3ec6be9f730011ae91e18(@modelcontextprotocol/sdk@1.27.1(zod@4.3.6))': dependencies: '@actions/core': 3.0.0 '@google-cloud/spanner': 8.0.0(supports-color@10.2.2) @@ -11362,12 +11362,6 @@ snapshots: optionalDependencies: rollup: 4.59.0 - '@rollup/plugin-json@6.1.0(rollup@4.57.1)': - dependencies: - '@rollup/pluginutils': 5.3.0(rollup@4.57.1) - optionalDependencies: - rollup: 4.57.1 - '@rollup/plugin-json@6.1.0(rollup@4.59.0)': dependencies: '@rollup/pluginutils': 5.3.0(rollup@4.59.0) @@ -11384,14 +11378,6 @@ snapshots: optionalDependencies: rollup: 4.59.0 - '@rollup/pluginutils@5.3.0(rollup@4.57.1)': - dependencies: - '@types/estree': 1.0.8 - estree-walker: 2.0.2 - picomatch: 4.0.3 - optionalDependencies: - rollup: 4.57.1 - '@rollup/pluginutils@5.3.0(rollup@4.59.0)': dependencies: '@types/estree': 1.0.8 @@ -14233,7 +14219,7 @@ snapshots: fs.realpath: 1.0.0 inflight: 1.0.6 inherits: 2.0.4 - minimatch: 3.1.2 + minimatch: 3.1.4 once: 1.4.0 path-is-absolute: 1.0.1 @@ -15495,11 +15481,11 @@ snapshots: neo-async@2.6.2: {} - ng-packagr@21.2.0-next.0(@angular/compiler-cli@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(typescript@5.9.3))(tslib@2.8.1)(typescript@5.9.3): + ng-packagr@22.0.0-next.0(@angular/compiler-cli@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(typescript@5.9.3))(tslib@2.8.1)(typescript@5.9.3): dependencies: '@ampproject/remapping': 2.3.0 '@angular/compiler-cli': 21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(typescript@5.9.3) - '@rollup/plugin-json': 6.1.0(rollup@4.57.1) + '@rollup/plugin-json': 6.1.0(rollup@4.59.0) '@rollup/wasm-node': 4.57.1 ajv: 8.18.0 ansi-colors: 4.1.3 @@ -15515,14 +15501,14 @@ snapshots: ora: 9.3.0 piscina: 5.1.4 postcss: 8.5.6 - rollup-plugin-dts: 6.3.0(rollup@4.57.1)(typescript@5.9.3) + rollup-plugin-dts: 6.3.0(rollup@4.59.0)(typescript@5.9.3) rxjs: 7.8.2 sass: 1.97.3 tinyglobby: 0.2.15 tslib: 2.8.1 typescript: 5.9.3 optionalDependencies: - rollup: 4.57.1 + rollup: 4.59.0 nock@14.0.11: dependencies: @@ -16414,14 +16400,6 @@ snapshots: semver: 7.7.4 spdx-expression-validate: 2.0.0 - rollup-plugin-dts@6.3.0(rollup@4.57.1)(typescript@5.9.3): - dependencies: - magic-string: 0.30.21 - rollup: 4.57.1 - typescript: 5.9.3 - optionalDependencies: - '@babel/code-frame': 7.29.0 - rollup-plugin-dts@6.3.0(rollup@4.59.0)(typescript@5.9.3): dependencies: magic-string: 0.30.21 diff --git a/tests/e2e/ng-snapshot/package.json b/tests/e2e/ng-snapshot/package.json index 81c9cf1a0b3f..7cf069377067 100644 --- a/tests/e2e/ng-snapshot/package.json +++ b/tests/e2e/ng-snapshot/package.json @@ -2,21 +2,21 @@ "description": "snapshot versions of Angular for e2e testing", "private": true, "dependencies": { - "@angular/animations": "github:angular/animations-builds#935e7084a4c3ce4a7f46b2bca84056ce72c09df5", - "@angular/cdk": "github:angular/cdk-builds#ff29080435cfdf5b8baa09821e6b65dcf468905e", - "@angular/common": "github:angular/common-builds#72f20a6cce9d2f1c7ecb6e34c31a04db285fc293", - "@angular/compiler": "github:angular/compiler-builds#af95891a41e7dfacc8439004ec4205cc3303b567", - "@angular/compiler-cli": "github:angular/compiler-cli-builds#323a2074ad44577b2964cb7329c77a624fcfb554", - "@angular/core": "github:angular/core-builds#d007d1e5e718733cec29d537223a41f75777a4d5", - "@angular/forms": "github:angular/forms-builds#7646376b51f43f6c6d27f65a2004e7e884483be6", - "@angular/language-service": "github:angular/language-service-builds#d7976794cdcb4353b611d1d64494496e70001859", - "@angular/localize": "github:angular/localize-builds#7676fcd5bbaf7424666800985e4198fcceae154d", - "@angular/material": "github:angular/material-builds#93b331340ea7bec519017f91271cee8d5f950b40", - "@angular/material-moment-adapter": "github:angular/material-moment-adapter-builds#55403f8cc9e402973d2ccc05d18d059a5d630f6f", - "@angular/platform-browser": "github:angular/platform-browser-builds#23abe56aa15c354c6233c708011b5cf2ce5deb92", - "@angular/platform-browser-dynamic": "github:angular/platform-browser-dynamic-builds#6a421efde6e3def94e7bd5bc07a07062801bc54d", - "@angular/platform-server": "github:angular/platform-server-builds#49446746b89392e85f9f067727f995cc713a886d", - "@angular/router": "github:angular/router-builds#8b9865890980473097b2f81af38b4effdf6cf1f9", - "@angular/service-worker": "github:angular/service-worker-builds#6933cd2efc51e4ef3f017c8e7a61acda3dc955c0" + "@angular/animations": "github:angular/animations-builds#e0b7ba27e93ec73223c8ad64467d8c0ce9b8732d", + "@angular/cdk": "github:angular/cdk-builds#5e97af5ad334182854f09262a8b26e238967aa68", + "@angular/common": "github:angular/common-builds#3a75a08706ee0a25e860ed3139932ee6856da4b7", + "@angular/compiler": "github:angular/compiler-builds#23b4fb60f5f3a70a6c7238126eb005d1ff91a7e4", + "@angular/compiler-cli": "github:angular/compiler-cli-builds#2ed949f3ed00ed3fff14d57b92a67df079627bd5", + "@angular/core": "github:angular/core-builds#06fce06a0547789b777adcc6d51b51dd3e4c9bf3", + "@angular/forms": "github:angular/forms-builds#f868ef7002c9c876343abc95b9866f6ae8b4a115", + "@angular/language-service": "github:angular/language-service-builds#5c51099c93309e7aa4d01660c22b54e9e9a3b94b", + "@angular/localize": "github:angular/localize-builds#eb78c31574c7eb8fa5187f4d743a289c347e38be", + "@angular/material": "github:angular/material-builds#6921af69ff90449f3963620d22d47a64137bca1d", + "@angular/material-moment-adapter": "github:angular/material-moment-adapter-builds#9d63fb9749dde15dd45057270adeaee9736753df", + "@angular/platform-browser": "github:angular/platform-browser-builds#4dfaf35eb93dd1dd76e535457d637bba18b354fd", + "@angular/platform-browser-dynamic": "github:angular/platform-browser-dynamic-builds#a042d4010fbd204a0cb7a88926a2e8349119e3a1", + "@angular/platform-server": "github:angular/platform-server-builds#c29e6f6cefa5930d1f14c0d75c4f0855059dbf4d", + "@angular/router": "github:angular/router-builds#49e044ac35258efe2d535f648e89962c7bed2128", + "@angular/service-worker": "github:angular/service-worker-builds#d21e1cc54fcdee4f1cb5af21d66dc563004220a4" } } From 9d167ca11cdbe76c4619eba704ef4fc88b00ce18 Mon Sep 17 00:00:00 2001 From: Alan Agius <17563226+alan-agius4@users.noreply.github.com> Date: Thu, 26 Feb 2026 10:32:31 +0000 Subject: [PATCH 046/226] perf(@angular/build): fix memory leak in `ng serve` with i18n When running `ng serve` with i18n configured, every file save (.html files) triggers a rebuild that creates a new piscina `ThreadPool` for `i18n-inline-worker.js`. Old pools and their worker threads were not properly cleaned up because the inliner was closed prematurely, causing unbounded memory growth. This commit ensures that the inliner is kept open while processing template updates, resolving the issue where orphaned threads were created. Closes #32584 --- .../build/src/builders/application/i18n.ts | 76 +++++++++---------- 1 file changed, 38 insertions(+), 38 deletions(-) diff --git a/packages/angular/build/src/builders/application/i18n.ts b/packages/angular/build/src/builders/application/i18n.ts index ae37efa674e4..081be50e7a9f 100644 --- a/packages/angular/build/src/builders/application/i18n.ts +++ b/packages/angular/build/src/builders/application/i18n.ts @@ -123,48 +123,48 @@ export async function inlineI18n( inlineResult.prerenderedRoutes = { ...inlineResult.prerenderedRoutes, ...generatedRoutes }; updatedOutputFiles.push(...localeOutputFiles); } - } finally { - await inliner.close(); - } - // Update the result with all localized files. - executionResult.outputFiles = [ - // Root and SSR entry files are not modified. - ...unModifiedOutputFiles, - // Updated files for each locale. - ...updatedOutputFiles, - ]; - - // Assets are only changed if not using the flat output option - if (!i18nOptions.flatOutput) { - executionResult.assetFiles = updatedAssetFiles; - } - - // Inline any template updates if present - if (executionResult.templateUpdates?.size) { - // The development server only allows a single locale but issue a warning if used programmatically (experimental) - // with multiple locales and template HMR. - if (i18nOptions.inlineLocales.size > 1) { - inlineResult.warnings.push( - `Component HMR updates can only be inlined with a single locale. The first locale will be used.`, - ); + // Update the result with all localized files. + executionResult.outputFiles = [ + // Root and SSR entry files are not modified. + ...unModifiedOutputFiles, + // Updated files for each locale. + ...updatedOutputFiles, + ]; + + // Assets are only changed if not using the flat output option + if (!i18nOptions.flatOutput) { + executionResult.assetFiles = updatedAssetFiles; } - const firstLocale = [...i18nOptions.inlineLocales][0]; - - for (const [id, content] of executionResult.templateUpdates) { - const templateUpdateResult = await inliner.inlineTemplateUpdate( - firstLocale, - i18nOptions.locales[firstLocale].translation, - content, - id, - ); - executionResult.templateUpdates.set(id, templateUpdateResult.code); - inlineResult.errors.push(...templateUpdateResult.errors); - inlineResult.warnings.push(...templateUpdateResult.warnings); + + // Inline any template updates if present + if (executionResult.templateUpdates?.size) { + // The development server only allows a single locale but issue a warning if used programmatically (experimental) + // with multiple locales and template HMR. + if (i18nOptions.inlineLocales.size > 1) { + inlineResult.warnings.push( + `Component HMR updates can only be inlined with a single locale. The first locale will be used.`, + ); + } + const firstLocale = [...i18nOptions.inlineLocales][0]; + + for (const [id, content] of executionResult.templateUpdates) { + const templateUpdateResult = await inliner.inlineTemplateUpdate( + firstLocale, + i18nOptions.locales[firstLocale].translation, + content, + id, + ); + executionResult.templateUpdates.set(id, templateUpdateResult.code); + inlineResult.errors.push(...templateUpdateResult.errors); + inlineResult.warnings.push(...templateUpdateResult.warnings); + } } - } - return inlineResult; + return inlineResult; + } finally { + await inliner.close(); + } } /** From a5c7c0b5fda4ae0c00351ba34e5f39dab2c6baee Mon Sep 17 00:00:00 2001 From: hawkgs Date: Thu, 26 Feb 2026 17:21:53 +0200 Subject: [PATCH 047/226] fix(@angular/cli): reflect new minimum supported Node version in ng.js Update the minimum supported Node version to v22.22 and v24.13.1, respectively, in the CLI's binary script in order to reflect the changes introduced in `d0e9e81`. --- packages/angular/cli/bin/ng.js | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/packages/angular/cli/bin/ng.js b/packages/angular/cli/bin/ng.js index e0f5eb36a2ef..8487b50a2ae1 100755 --- a/packages/angular/cli/bin/ng.js +++ b/packages/angular/cli/bin/ng.js @@ -42,7 +42,7 @@ if (rawCommandName === '--get-yargs-completions' || rawCommandName === 'completi // This node version check ensures that extremely old versions of node are not used. // These may not support ES2015 features such as const/let/async/await/etc. // These would then crash with a hard to diagnose error message. -const [major, minor] = process.versions.node.split('.', 2).map((part) => Number(part)); +const [major, minor, patch] = process.versions.node.split('.', 3).map((part) => Number(part)); if (major % 2 === 1) { // Allow new odd numbered releases with a warning (currently v17+) @@ -55,13 +55,17 @@ if (major % 2 === 1) { ); require('./bootstrap'); -} else if (major < 20 || (major === 20 && minor < 19) || (major === 22 && minor < 12)) { - // Error and exit if less than 20.19 or 22.12 +} else if ( + major < 22 || + (major === 22 && minor < 22) || + (major === 24 && minor < 13 && patch < 1) +) { + // Error and exit if less than 22.22 or 24.13.1 console.error( 'Node.js version ' + process.version + ' detected.\n' + - 'The Angular CLI requires a minimum Node.js version of v20.19 or v22.12.\n\n' + + 'The Angular CLI requires a minimum Node.js version of v22.22 or v24.13.1.\n\n' + 'Please update your Node.js version or visit https://nodejs.org/ for additional instructions.\n', ); From 15794dc101fffd49818545c4ab015a3bf238b14a Mon Sep 17 00:00:00 2001 From: Alan Agius <17563226+alan-agius4@users.noreply.github.com> Date: Thu, 26 Feb 2026 14:17:11 +0000 Subject: [PATCH 048/226] refactor: centralize ESLint file targeting within `eslint.config.mjs` to process only TypeScript files and ignore JavaScript files MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This is needed as the glob is no longer being parsed from the CLI. ``` Run pnpm lint --cache-strategy content > @angular/devkit-repo@22.0.0-next.0 lint /home/runner/work/angular-cli/angular-cli > eslint --cache --max-warnings=0 "**/*.@(ts|mts|cts)" --cache-strategy content Oops! Something went wrong! :( ESLint: 10.0.2 No files matching the pattern "**/*.@(ts|mts|cts)" were found. Please check for typing mistakes in the pattern.  ELIFECYCLE  Command failed with exit code 2. ``` --- eslint.config.mjs | 8 +++++++- package.json | 2 +- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/eslint.config.mjs b/eslint.config.mjs index 89f9fa72243b..cd0a12c4aa6d 100644 --- a/eslint.config.mjs +++ b/eslint.config.mjs @@ -10,9 +10,9 @@ import { fixupConfigRules, fixupPluginRules } from '@eslint/compat'; import { FlatCompat } from '@eslint/eslintrc'; import js from '@eslint/js'; import stylistic from '@stylistic/eslint-plugin'; +import header from '@tony.ganchev/eslint-plugin-header'; import typescriptEslint from '@typescript-eslint/eslint-plugin'; import tsParser from '@typescript-eslint/parser'; -import header from '@tony.ganchev/eslint-plugin-header'; import _import from 'eslint-plugin-import'; import globals from 'globals'; @@ -23,8 +23,14 @@ const compat = new FlatCompat({ }); export default [ + { + files: ['**/*.ts', '**/*.mts', '**/*.cts'], + }, { ignores: [ + '**/*.js', + '**/*.mjs', + '**/*.cjs', '**/bazel-out', '**/dist-schema', 'goldens/public-api', diff --git a/package.json b/package.json index d7d2d017e354..1675bd17610d 100644 --- a/package.json +++ b/package.json @@ -16,7 +16,7 @@ "test": "bazel test //packages/...", "build": "pnpm -s admin build", "build-schema": "bazel build //... --build_tag_filters schema --symlink_prefix dist-schema/", - "lint": "eslint --cache --max-warnings=0 \"**/*.@(ts|mts|cts)\"", + "lint": "eslint --cache --max-warnings=0", "templates": "pnpm -s admin templates", "validate": "pnpm -s admin validate", "postinstall": "husky", From 3c5e902598ff0c24aabd55823ec3eb6d88c04085 Mon Sep 17 00:00:00 2001 From: Alan Agius <17563226+alan-agius4@users.noreply.github.com> Date: Thu, 26 Feb 2026 16:50:42 +0000 Subject: [PATCH 049/226] refactor(@angular/cli): centralize Node.js version checks into a new utility Makes it effort less to update a supported Node.js version --- packages/angular/cli/BUILD.bazel | 1 + packages/angular/cli/bin/ng.js | 15 ++-- packages/angular/cli/lib/cli/index.ts | 12 +-- .../cli/src/commands/version/version-info.ts | 13 +--- .../angular/cli/src/utilities/node-version.ts | 75 +++++++++++++++++++ 5 files changed, 89 insertions(+), 27 deletions(-) create mode 100644 packages/angular/cli/src/utilities/node-version.ts diff --git a/packages/angular/cli/BUILD.bazel b/packages/angular/cli/BUILD.bazel index 0eac4a2cede9..a49e30695138 100644 --- a/packages/angular/cli/BUILD.bazel +++ b/packages/angular/cli/BUILD.bazel @@ -172,6 +172,7 @@ npm_package( ], stamp_files = [ "src/utilities/version.js", + "src/utilities/node-version.js", ], tags = ["release-package"], deps = RUNTIME_ASSETS + [ diff --git a/packages/angular/cli/bin/ng.js b/packages/angular/cli/bin/ng.js index 8487b50a2ae1..7303a5c05632 100755 --- a/packages/angular/cli/bin/ng.js +++ b/packages/angular/cli/bin/ng.js @@ -12,6 +12,7 @@ 'use strict'; const path = require('path'); +const nodeUtils = require('../src/utilities/node-version'); // Error if the external CLI appears to be used inside a google3 context. if (process.cwd().split(path.sep).includes('google3')) { @@ -42,10 +43,10 @@ if (rawCommandName === '--get-yargs-completions' || rawCommandName === 'completi // This node version check ensures that extremely old versions of node are not used. // These may not support ES2015 features such as const/let/async/await/etc. // These would then crash with a hard to diagnose error message. -const [major, minor, patch] = process.versions.node.split('.', 3).map((part) => Number(part)); +const [major] = process.versions.node.split('.', 1).map((part) => Number(part)); if (major % 2 === 1) { - // Allow new odd numbered releases with a warning (currently v17+) + // Allow new odd numbered releases with a warning. console.warn( 'Node.js version ' + process.version + @@ -55,17 +56,15 @@ if (major % 2 === 1) { ); require('./bootstrap'); -} else if ( - major < 22 || - (major === 22 && minor < 22) || - (major === 24 && minor < 13 && patch < 1) -) { +} else if (!nodeUtils.isNodeVersionSupported()) { // Error and exit if less than 22.22 or 24.13.1 console.error( 'Node.js version ' + process.version + ' detected.\n' + - 'The Angular CLI requires a minimum Node.js version of v22.22 or v24.13.1.\n\n' + + 'The Angular CLI requires a minimum Node.js version of ' + + nodeUtils.supportedNodeVersions.map((v) => 'v' + v).join(' or ') + + '.\n\n' + 'Please update your Node.js version or visit https://nodejs.org/ for additional instructions.\n', ); diff --git a/packages/angular/cli/lib/cli/index.ts b/packages/angular/cli/lib/cli/index.ts index a030e692e26b..a497dc0ea243 100644 --- a/packages/angular/cli/lib/cli/index.ts +++ b/packages/angular/cli/lib/cli/index.ts @@ -13,22 +13,18 @@ import { runCommand } from '../../src/command-builder/command-runner'; import { colors, supportColor } from '../../src/utilities/color'; import { ngDebug } from '../../src/utilities/environment-options'; import { writeErrorToLogFile } from '../../src/utilities/log-file'; +import { isNodeVersionMinSupported, supportedNodeVersions } from '../../src/utilities/node-version'; export { VERSION } from '../../src/utilities/version'; -const MIN_NODEJS_VERSION = [22, 22] as const; - /* eslint-disable no-console */ export default async function (options: { cliArgs: string[] }) { // This node version check ensures that the requirements of the project instance of the CLI are met - const [major, minor] = process.versions.node.split('.').map((part) => Number(part)); - if ( - major < MIN_NODEJS_VERSION[0] || - (major === MIN_NODEJS_VERSION[0] && minor < MIN_NODEJS_VERSION[1]) - ) { + + if (!isNodeVersionMinSupported()) { process.stderr.write( `Node.js version ${process.version} detected.\n` + - `The Angular CLI requires a minimum of v${MIN_NODEJS_VERSION[0]}.${MIN_NODEJS_VERSION[1]}.\n\n` + + `The Angular CLI requires a minimum of v${supportedNodeVersions[0]}.\n\n` + 'Please update your Node.js version or visit https://nodejs.org/ for additional instructions.\n', ); diff --git a/packages/angular/cli/src/commands/version/version-info.ts b/packages/angular/cli/src/commands/version/version-info.ts index efe2f8506ea5..128cc8ef5449 100644 --- a/packages/angular/cli/src/commands/version/version-info.ts +++ b/packages/angular/cli/src/commands/version/version-info.ts @@ -8,7 +8,7 @@ import { createRequire } from 'node:module'; import { CommandContext } from '../../command-builder/definitions'; -import { PackageManager } from '../../package-managers'; +import { isNodeVersionSupported } from '../../utilities/node-version'; import { VERSION } from '../../utilities/version'; /** @@ -56,12 +56,6 @@ export interface VersionInfo { packages: Record; } -/** - * Major versions of Node.js that are officially supported by Angular. - * @see https://angular.dev/reference/versions#supported-node-js-versions - */ -const SUPPORTED_NODE_MAJORS = [22, 24]; - /** * A list of regular expression patterns that match package names that should be included in the * version output. @@ -92,9 +86,6 @@ export async function gatherVersionInfo(context: CommandContext): Promise Number(part)); - const unsupportedNodeVersion = !SUPPORTED_NODE_MAJORS.includes(nodeMajor); - const allDependencies = { ...workspacePackage?.dependencies, ...workspacePackage?.devDependencies, @@ -123,7 +114,7 @@ export async function gatherVersionInfo(context: CommandContext): Promise=]/g, '') + .split('||') + .map((v) => v.trim()); + +/** + * Checks if the current Node.js version is supported. + * @returns `true` if the current Node.js version is supported, `false` otherwise. + */ +export function isNodeVersionSupported(): boolean { + if (SUPPORTED_NODE_VERSIONS.charAt(0) === '0') { + // Unlike `pkg_npm`, `ts_library` which is used to run unit tests does not support substitutions. + return true; + } + + const [processMajor, processMinor, processPatch] = process.versions.node + .split('.', 3) + .map((part) => Number(part)); + + for (const version of supportedNodeVersions) { + const [major, minor, patch] = version.split('.', 3).map((part) => Number(part)); + if ( + (major === processMajor && processMinor === minor && processPatch >= patch) || + (major === processMajor && processMinor > minor) + ) { + return true; + } + } + + return false; +} + +/** + * Checks if the current Node.js version is the minimum supported version. + * @returns `true` if the current Node.js version is the minimum supported version, `false` otherwise. + */ +export function isNodeVersionMinSupported(): boolean { + if (SUPPORTED_NODE_VERSIONS.charAt(0) === '0') { + // Unlike `pkg_npm`, `ts_library` which is used to run unit tests does not support substitutions. + return true; + } + + const [processMajor, processMinor, processPatch] = process.versions.node + .split('.', 3) + .map((part) => Number(part)); + const [major, minor, patch] = supportedNodeVersions[0].split('.', 3).map((part) => Number(part)); + + return ( + processMajor > major || + (processMajor === major && processMinor > minor) || + (processMajor === major && processMinor === minor && processPatch >= patch) + ); +} From fc316e66cdbf7ee41d3901f7fb024c880ec638f4 Mon Sep 17 00:00:00 2001 From: Alan Agius <17563226+alan-agius4@users.noreply.github.com> Date: Thu, 26 Feb 2026 17:48:47 +0000 Subject: [PATCH 050/226] docs: remove incorrect JSDoc type annotation for `SUPPORTED_NODE_VERSIONS` --- packages/angular/cli/src/utilities/node-version.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/angular/cli/src/utilities/node-version.ts b/packages/angular/cli/src/utilities/node-version.ts index 05d2bff34760..7bed934428c8 100644 --- a/packages/angular/cli/src/utilities/node-version.ts +++ b/packages/angular/cli/src/utilities/node-version.ts @@ -13,7 +13,6 @@ /** * The supported Node.js version for the Angular CLI. - * @type {[string, number]} The supported Node.js version. */ const SUPPORTED_NODE_VERSIONS = '0.0.0-ENGINES-NODE'; From 12192e22e750ded5d5a817879e53ea507f0bbde0 Mon Sep 17 00:00:00 2001 From: hawkgs Date: Wed, 25 Feb 2026 14:22:36 +0200 Subject: [PATCH 051/226] refactor(@schematics/angular): remove protractor e2e schematic Protractor is no longer supported and has been deprecated since v19. --- packages/schematics/angular/collection.json | 6 - .../e2e/files/protractor.conf.js.template | 37 ------ .../e2e/files/src/app.e2e-spec.ts.template | 23 ---- .../angular/e2e/files/src/app.po.ts.template | 11 -- .../angular/e2e/files/tsconfig.json.template | 14 --- packages/schematics/angular/e2e/index.ts | 106 ------------------ packages/schematics/angular/e2e/index_spec.ts | 98 ---------------- packages/schematics/angular/e2e/schema.json | 20 ---- .../utility/latest-versions/package.json | 1 - .../angular/utility/workspace-models.ts | 4 - 10 files changed, 320 deletions(-) delete mode 100644 packages/schematics/angular/e2e/files/protractor.conf.js.template delete mode 100644 packages/schematics/angular/e2e/files/src/app.e2e-spec.ts.template delete mode 100644 packages/schematics/angular/e2e/files/src/app.po.ts.template delete mode 100644 packages/schematics/angular/e2e/files/tsconfig.json.template delete mode 100644 packages/schematics/angular/e2e/index.ts delete mode 100644 packages/schematics/angular/e2e/index_spec.ts delete mode 100644 packages/schematics/angular/e2e/schema.json diff --git a/packages/schematics/angular/collection.json b/packages/schematics/angular/collection.json index c275bc40144f..29b361ccafbb 100755 --- a/packages/schematics/angular/collection.json +++ b/packages/schematics/angular/collection.json @@ -23,12 +23,6 @@ "schema": "./application/schema.json", "description": "Create an Angular application." }, - "private-e2e": { - "factory": "./e2e", - "schema": "./e2e/schema.json", - "description": "PRIVATE API - Do not use.", - "hidden": true - }, "class": { "aliases": ["cl"], "factory": "./class", diff --git a/packages/schematics/angular/e2e/files/protractor.conf.js.template b/packages/schematics/angular/e2e/files/protractor.conf.js.template deleted file mode 100644 index 361e7f0cdfa1..000000000000 --- a/packages/schematics/angular/e2e/files/protractor.conf.js.template +++ /dev/null @@ -1,37 +0,0 @@ -// @ts-check -// Protractor configuration file, see link for more information -// https://github.com/angular/protractor/blob/master/lib/config.ts - -const { SpecReporter, StacktraceOption } = require('jasmine-spec-reporter'); - -/** - * @type { import("protractor").Config } - */ -exports.config = { - allScriptsTimeout: 11000, - specs: [ - './src/**/*.e2e-spec.ts' - ], - capabilities: { - browserName: 'chrome' - }, - directConnect: true, - SELENIUM_PROMISE_MANAGER: false, - baseUrl: 'http://localhost:4200/', - framework: 'jasmine', - jasmineNodeOpts: { - showColors: true, - defaultTimeoutInterval: 30000, - print: function() {} - }, - onPrepare() { - require('ts-node').register({ - project: require('path').join(__dirname, './tsconfig.json') - }); - jasmine.getEnv().addReporter(new SpecReporter({ - spec: { - displayStacktrace: StacktraceOption.PRETTY - } - })); - } -}; \ No newline at end of file diff --git a/packages/schematics/angular/e2e/files/src/app.e2e-spec.ts.template b/packages/schematics/angular/e2e/files/src/app.e2e-spec.ts.template deleted file mode 100644 index fdbe66b2ab46..000000000000 --- a/packages/schematics/angular/e2e/files/src/app.e2e-spec.ts.template +++ /dev/null @@ -1,23 +0,0 @@ -import { browser, logging } from 'protractor'; -import { AppPage } from './app.po'; - -describe('workspace-project App', () => { - let page: AppPage; - - beforeEach(() => { - page = new AppPage(); - }); - - it('should display welcome message', async () => { - await page.navigateTo(); - expect(await page.getTitleText()).toEqual('Hello, <%= relatedAppName %>'); - }); - - afterEach(async () => { - // Assert that there are no errors emitted from the browser - const logs = await browser.manage().logs().get(logging.Type.BROWSER); - expect(logs).not.toContain(jasmine.objectContaining({ - level: logging.Level.SEVERE, - } as logging.Entry)); - }); -}); diff --git a/packages/schematics/angular/e2e/files/src/app.po.ts.template b/packages/schematics/angular/e2e/files/src/app.po.ts.template deleted file mode 100644 index 602087cca38f..000000000000 --- a/packages/schematics/angular/e2e/files/src/app.po.ts.template +++ /dev/null @@ -1,11 +0,0 @@ -import { browser, by, element } from 'protractor'; - -export class AppPage { - async navigateTo(): Promise { - return browser.get(browser.baseUrl); - } - - async getTitleText(): Promise { - return element(by.css('h1')).getText(); - } -} diff --git a/packages/schematics/angular/e2e/files/tsconfig.json.template b/packages/schematics/angular/e2e/files/tsconfig.json.template deleted file mode 100644 index 1bc14be7a84c..000000000000 --- a/packages/schematics/angular/e2e/files/tsconfig.json.template +++ /dev/null @@ -1,14 +0,0 @@ -/* To learn more about Typescript configuration file: https://www.typescriptlang.org/docs/handbook/tsconfig-json.html. */ -/* To learn more about Angular compiler options: https://angular.dev/reference/configs/angular-compiler-options. */ -{ - "extends": "<%= relativePathToWorkspaceRoot %>/tsconfig.json", - "compilerOptions": { - "outDir": "<%= relativePathToWorkspaceRoot %>/out-tsc/e2e", - "module": "commonjs", - "target": "es2019", - "types": [ - "jasmine", - "node" - ] - } -} diff --git a/packages/schematics/angular/e2e/index.ts b/packages/schematics/angular/e2e/index.ts deleted file mode 100644 index 0fba1363028e..000000000000 --- a/packages/schematics/angular/e2e/index.ts +++ /dev/null @@ -1,106 +0,0 @@ -/** - * @license - * Copyright Google LLC All Rights Reserved. - * - * Use of this source code is governed by an MIT-style license that can be - * found in the LICENSE file at https://angular.dev/license - */ - -import { - Rule, - SchematicsException, - apply, - applyTemplates, - chain, - mergeWith, - move, - strings, - url, -} from '@angular-devkit/schematics'; -import { posix as path } from 'node:path'; -import { DependencyType, ExistingBehavior, addDependency } from '../utility/dependency'; -import { JSONFile } from '../utility/json-file'; -import { latestVersions } from '../utility/latest-versions'; -import { addRootProvider } from '../utility/standalone'; -import { updateWorkspace } from '../utility/workspace'; -import { Builders as AngularBuilder } from '../utility/workspace-models'; -import { Schema as E2eOptions } from './schema'; - -/** - * The list of development dependencies used by the E2E protractor-based builder. - * The versions are sourced from the latest versions `../utility/latest-versions/package.json` - * file which is automatically updated via renovate. - */ -const E2E_DEV_DEPENDENCIES = Object.freeze([ - 'protractor', - 'jasmine-spec-reporter', - 'ts-node', - '@types/node', -]); - -function addScriptsToPackageJson(): Rule { - return (host) => { - const pkgJson = new JSONFile(host, 'package.json'); - const e2eScriptPath = ['scripts', 'e2e']; - - if (!pkgJson.get(e2eScriptPath)) { - pkgJson.modify(e2eScriptPath, 'ng e2e', false); - } - }; -} - -export default function (options: E2eOptions): Rule { - const { relatedAppName } = options; - - return updateWorkspace((workspace) => { - const project = workspace.projects.get(relatedAppName); - - if (!project) { - throw new SchematicsException(`Project name "${relatedAppName}" doesn't not exist.`); - } - - const e2eRootPath = path.join(project.root, 'e2e'); - - project.targets.add({ - name: 'e2e', - builder: AngularBuilder.Protractor, - defaultConfiguration: 'development', - options: { - protractorConfig: path.join(e2eRootPath, 'protractor.conf.js'), - }, - configurations: { - production: { - devServerTarget: `${relatedAppName}:serve:production`, - }, - development: { - devServerTarget: `${relatedAppName}:serve:development`, - }, - }, - }); - - return chain([ - mergeWith( - apply(url('./files'), [ - applyTemplates({ - utils: strings, - ...options, - relativePathToWorkspaceRoot: path.relative(path.join('/', e2eRootPath), '/'), - }), - move(e2eRootPath), - ]), - ), - addRootProvider( - relatedAppName, - ({ code, external }) => - code`${external('provideProtractorTestingSupport', '@angular/platform-browser')}()`, - ), - ...E2E_DEV_DEPENDENCIES.map((name) => - addDependency(name, latestVersions[name], { - type: DependencyType.Dev, - existing: ExistingBehavior.Skip, - }), - ), - addScriptsToPackageJson(), - ]); - }); -} diff --git a/packages/schematics/angular/e2e/index_spec.ts b/packages/schematics/angular/e2e/index_spec.ts deleted file mode 100644 index d8253e52154f..000000000000 --- a/packages/schematics/angular/e2e/index_spec.ts +++ /dev/null @@ -1,98 +0,0 @@ -/** - * @license - * Copyright Google LLC All Rights Reserved. - * - * Use of this source code is governed by an MIT-style license that can be - * found in the LICENSE file at https://angular.dev/license - */ - -import { SchematicTestRunner, UnitTestTree } from '@angular-devkit/schematics/testing'; -import { Schema as ApplicationOptions } from '../application/schema'; -import { Schema as WorkspaceOptions } from '../workspace/schema'; -import { Schema as E2eOptions } from './schema'; - -describe('E2E Schematic', () => { - const schematicRunner = new SchematicTestRunner( - '@schematics/angular', - require.resolve('../collection.json'), - ); - - const workspaceOptions: WorkspaceOptions = { - name: 'workspace', - newProjectRoot: 'projects', - version: '6.0.0', - }; - - const defaultOptions: E2eOptions = { - relatedAppName: 'foo', - }; - - const defaultAppOptions: ApplicationOptions = { - name: 'foo', - inlineStyle: true, - inlineTemplate: true, - routing: false, - skipPackageJson: false, - minimal: true, - }; - - let applicationTree: UnitTestTree; - - beforeEach(async () => { - const workspaceTree = await schematicRunner.runSchematic('workspace', workspaceOptions); - - applicationTree = await schematicRunner.runSchematic( - 'application', - defaultAppOptions, - workspaceTree, - ); - }); - - it('should create all files of e2e in an application', async () => { - const tree = await schematicRunner.runSchematic('private-e2e', defaultOptions, applicationTree); - - const files = tree.files; - expect(files).toEqual( - jasmine.arrayContaining([ - '/projects/foo/e2e/protractor.conf.js', - '/projects/foo/e2e/tsconfig.json', - '/projects/foo/e2e/src/app.e2e-spec.ts', - '/projects/foo/e2e/src/app.po.ts', - ]), - ); - }); - - describe('workspace config', () => { - it('should add e2e targets for the app', async () => { - const tree = await schematicRunner.runSchematic( - 'private-e2e', - defaultOptions, - applicationTree, - ); - - const workspace = JSON.parse(tree.readContent('/angular.json')); - const targets = workspace.projects.foo.architect; - expect(targets.e2e).toBeDefined(); - }); - - it('should set the e2e options', async () => { - const tree = await schematicRunner.runSchematic( - 'private-e2e', - defaultOptions, - applicationTree, - ); - - const workspace = JSON.parse(tree.readContent('/angular.json')); - const { options, configurations } = workspace.projects.foo.architect.e2e; - expect(options.protractorConfig).toEqual('projects/foo/e2e/protractor.conf.js'); - expect(configurations.development.devServerTarget).toEqual('foo:serve:development'); - }); - }); - - it('should add an e2e script in package.json', async () => { - const tree = await schematicRunner.runSchematic('private-e2e', defaultOptions, applicationTree); - - const pkg = JSON.parse(tree.readContent('/package.json')); - expect(pkg.scripts['e2e']).toBe('ng e2e'); - }); -}); diff --git a/packages/schematics/angular/e2e/schema.json b/packages/schematics/angular/e2e/schema.json deleted file mode 100644 index e4805dd04c5a..000000000000 --- a/packages/schematics/angular/e2e/schema.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema", - "$id": "SchematicsAngularE2eApp", - "title": "Angular e2e Application Options Schema", - "type": "object", - "additionalProperties": false, - "description": "Generates a new, generic end-to-end test definition in the given project.", - "properties": { - "rootSelector": { - "description": "The HTML selector for the root component of the test app.", - "type": "string", - "default": "app-root" - }, - "relatedAppName": { - "description": "The name of the application being tested.", - "type": "string" - } - }, - "required": ["relatedAppName"] -} diff --git a/packages/schematics/angular/utility/latest-versions/package.json b/packages/schematics/angular/utility/latest-versions/package.json index 97416e3ba066..806527a60fba 100644 --- a/packages/schematics/angular/utility/latest-versions/package.json +++ b/packages/schematics/angular/utility/latest-versions/package.json @@ -19,7 +19,6 @@ "less": "^4.2.0", "postcss": "^8.5.3", "prettier": "^3.8.1", - "protractor": "~7.0.0", "rxjs": "~7.8.0", "tailwindcss": "^4.1.12", "@tailwindcss/postcss": "^4.1.12", diff --git a/packages/schematics/angular/utility/workspace-models.ts b/packages/schematics/angular/utility/workspace-models.ts index e4a570410371..d1ae1b146835 100644 --- a/packages/schematics/angular/utility/workspace-models.ts +++ b/packages/schematics/angular/utility/workspace-models.ts @@ -35,7 +35,6 @@ export enum Builders { BuildDevServer = '@angular/build:dev-server', ExtractI18n = '@angular-devkit/build-angular:extract-i18n', BuildExtractI18n = '@angular/build:extract-i18n', - Protractor = '@angular-devkit/build-angular:private-protractor', BuildApplication = '@angular/build:application', } @@ -123,7 +122,6 @@ export interface ExtractI18nOptions { } export interface E2EOptions { - protractorConfig: string; devServerTarget: string; } @@ -143,7 +141,6 @@ export type AppShellBuilderTarget = BuilderTarget; export type ServeBuilderTarget = BuilderTarget; export type ExtractI18nBuilderTarget = BuilderTarget; -export type E2EBuilderTarget = BuilderTarget; interface WorkspaceCLISchema { warnings?: Record; @@ -185,7 +182,6 @@ export interface WorkspaceTargets Date: Wed, 25 Feb 2026 14:27:39 +0200 Subject: [PATCH 052/226] refactor(@angular-devkit/build-angular): remove protractor Remove Protractor since it's no longer supported and has been deprecated since v19; Remove the dependency. --- .../angular_devkit/build_angular/index.api.md | 17 - .../projects/hello-world-app/README.md | 2 +- .../projects/hello-world-app/angular.json | 14 - .../hello-world-app/e2e/app.e2e-spec.ts | 22 - .../projects/hello-world-app/e2e/app.po.ts | 19 - .../hello-world-app/e2e/tsconfig.e2e.json | 12 - .../hello-world-app/protractor.conf.js | 43 - modules/testing/builder/src/test-utils.ts | 1 - package.json | 2 - .../angular_devkit/build_angular/BUILD.bazel | 18 - .../angular_devkit/build_angular/README.md | 1 - .../build_angular/builders.json | 10 - .../angular_devkit/build_angular/package.json | 6 +- .../src/builders/protractor-error/index.ts | 20 - .../src/builders/protractor/index.ts | 175 ---- .../src/builders/protractor/schema.json | 58 -- .../src/builders/protractor/works_spec.ts | 136 ---- .../angular_devkit/build_angular/src/index.ts | 5 - .../core/src/workspace/json/reader_spec.ts | 2 +- .../core/src/workspace/json/test/angular.json | 28 - .../json/test/cases/AddProject2.json | 28 - .../json/test/cases/AddProject3.json | 28 - .../json/test/cases/ProjectAddTarget.json | 28 - .../json/test/cases/ProjectDeleteTarget.json | 28 - .../test/cases/ProjectModifyProperties.json | 28 - .../json/test/cases/ProjectSetProperties.json | 28 - .../utility/latest-versions/package.json | 1 - pnpm-lock.yaml | 751 +----------------- tests/e2e/tests/protractor/test-fails.ts | 19 - tests/e2e/utils/BUILD.bazel | 1 - 30 files changed, 7 insertions(+), 1524 deletions(-) delete mode 100644 modules/testing/builder/projects/hello-world-app/e2e/app.e2e-spec.ts delete mode 100644 modules/testing/builder/projects/hello-world-app/e2e/app.po.ts delete mode 100644 modules/testing/builder/projects/hello-world-app/e2e/tsconfig.e2e.json delete mode 100644 modules/testing/builder/projects/hello-world-app/protractor.conf.js delete mode 100644 packages/angular_devkit/build_angular/src/builders/protractor-error/index.ts delete mode 100644 packages/angular_devkit/build_angular/src/builders/protractor/index.ts delete mode 100644 packages/angular_devkit/build_angular/src/builders/protractor/schema.json delete mode 100644 packages/angular_devkit/build_angular/src/builders/protractor/works_spec.ts delete mode 100644 tests/e2e/tests/protractor/test-fails.ts diff --git a/goldens/public-api/angular_devkit/build_angular/index.api.md b/goldens/public-api/angular_devkit/build_angular/index.api.md index 0208e998a300..a7747bda9da2 100644 --- a/goldens/public-api/angular_devkit/build_angular/index.api.md +++ b/goldens/public-api/angular_devkit/build_angular/index.api.md @@ -173,9 +173,6 @@ export function executeKarmaBuilder(options: KarmaBuilderOptions, context: Build // @public export function executeNgPackagrBuilder(options: NgPackagrBuilderOptions, context: BuilderContext): Observable; -// @public -export function executeProtractorBuilder(options: ProtractorBuilderOptions, context: BuilderContext): Promise; - // @public export function executeServerBuilder(options: ServerBuilderOptions, context: BuilderContext, transforms?: { webpackConfiguration?: ExecutionTransformer; @@ -269,20 +266,6 @@ export enum OutputHashing { None = "none" } -// @public -export type ProtractorBuilderOptions = { - baseUrl?: string; - devServerTarget?: string; - grep?: string; - host?: string; - invertGrep?: boolean; - port?: number; - protractorConfig: string; - specs?: string[]; - suite?: string; - webdriverUpdate?: boolean; -}; - // @public (undocumented) export type ServerBuilderOptions = { assets?: AssetPattern_3[]; diff --git a/modules/testing/builder/projects/hello-world-app/README.md b/modules/testing/builder/projects/hello-world-app/README.md index 3c578babc961..c2795c8bcc94 100644 --- a/modules/testing/builder/projects/hello-world-app/README.md +++ b/modules/testing/builder/projects/hello-world-app/README.md @@ -20,7 +20,7 @@ Run `ng test` to execute the unit tests via [Karma](https://karma-runner.github. ## Running end-to-end tests -Run `ng e2e` to execute the end-to-end tests via [Protractor](http://www.protractortest.org/). +Run `ng e2e` to setup and run the end-to-end tests. ## Further help diff --git a/modules/testing/builder/projects/hello-world-app/angular.json b/modules/testing/builder/projects/hello-world-app/angular.json index 95607701be8f..9ab612b8b2c5 100644 --- a/modules/testing/builder/projects/hello-world-app/angular.json +++ b/modules/testing/builder/projects/hello-world-app/angular.json @@ -172,20 +172,6 @@ } } } - }, - "app-e2e": { - "root": "e2e", - "projectType": "application", - "targets": { - "e2e": { - "builder": "@angular-devkit/build-angular:private-protractor", - "options": { - "protractorConfig": "protractor.conf.js", - "devServerTarget": "app:serve", - "webdriverUpdate": false - } - } - } } } } diff --git a/modules/testing/builder/projects/hello-world-app/e2e/app.e2e-spec.ts b/modules/testing/builder/projects/hello-world-app/e2e/app.e2e-spec.ts deleted file mode 100644 index 862e95302ce3..000000000000 --- a/modules/testing/builder/projects/hello-world-app/e2e/app.e2e-spec.ts +++ /dev/null @@ -1,22 +0,0 @@ -/** - * @license - * Copyright Google LLC All Rights Reserved. - * - * Use of this source code is governed by an MIT-style license that can be - * found in the LICENSE file at https://angular.dev/license - */ - -import { AppPage } from './app.po'; - -describe('hello-world-app App', () => { - let page: AppPage; - - beforeEach(() => { - page = new AppPage(); - }); - - it('should display welcome message', async () => { - page.navigateTo(); - expect(await page.getTitleText()).toEqual('Welcome to app!'); - }); -}); diff --git a/modules/testing/builder/projects/hello-world-app/e2e/app.po.ts b/modules/testing/builder/projects/hello-world-app/e2e/app.po.ts deleted file mode 100644 index 7cb6bc3fb743..000000000000 --- a/modules/testing/builder/projects/hello-world-app/e2e/app.po.ts +++ /dev/null @@ -1,19 +0,0 @@ -/** - * @license - * Copyright Google LLC All Rights Reserved. - * - * Use of this source code is governed by an MIT-style license that can be - * found in the LICENSE file at https://angular.dev/license - */ - -import { browser, by, element } from 'protractor'; - -export class AppPage { - navigateTo(): Promise { - return browser.get(browser.baseUrl) as Promise; - } - - getTitleText(): Promise { - return element(by.css('app-root h1')).getText() as Promise; - } -} diff --git a/modules/testing/builder/projects/hello-world-app/e2e/tsconfig.e2e.json b/modules/testing/builder/projects/hello-world-app/e2e/tsconfig.e2e.json deleted file mode 100644 index a82df00eef37..000000000000 --- a/modules/testing/builder/projects/hello-world-app/e2e/tsconfig.e2e.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "extends": "../tsconfig.json", - "compilerOptions": { - "outDir": "../out-tsc/e2e", - "module": "commonjs", - "target": "es2018", - "types": [ - "jasmine", - "node" - ] - } -} diff --git a/modules/testing/builder/projects/hello-world-app/protractor.conf.js b/modules/testing/builder/projects/hello-world-app/protractor.conf.js deleted file mode 100644 index 313f7ac7c53b..000000000000 --- a/modules/testing/builder/projects/hello-world-app/protractor.conf.js +++ /dev/null @@ -1,43 +0,0 @@ -/** - * @license - * Copyright Google LLC All Rights Reserved. - * - * Use of this source code is governed by an MIT-style license that can be - * found in the LICENSE file at https://angular.dev/license - */ - -// Protractor configuration file, see link for more information -// https://github.com/angular/protractor/blob/master/lib/config.ts - -const { SpecReporter, StacktraceOption } = require('jasmine-spec-reporter'); -const { resolve } = require('path'); - -exports.config = { - allScriptsTimeout: 11000, - specs: ['./e2e/**/*.e2e-spec.ts'], - capabilities: { - browserName: 'chrome', - chromeOptions: { - args: ['--headless', '--no-sandbox', '--disable-gpu', '--disable-dev-shm-usage'], - binary: require('puppeteer').executablePath(), - }, - }, - directConnect: true, - baseUrl: 'http://localhost:4200/', - framework: 'jasmine', - jasmineNodeOpts: { - showColors: true, - defaultTimeoutInterval: 30000, - print: function() {}, - }, - onPrepare() { - require('ts-node').register({ - project: resolve(__dirname, './e2e/tsconfig.e2e.json'), - }); - jasmine.getEnv().addReporter(new SpecReporter({ - spec: { - displayStacktrace: StacktraceOption.PRETTY - } - })); - }, -}; diff --git a/modules/testing/builder/src/test-utils.ts b/modules/testing/builder/src/test-utils.ts index f41cb42d1ea6..3e8f1fe48fcb 100644 --- a/modules/testing/builder/src/test-utils.ts +++ b/modules/testing/builder/src/test-utils.ts @@ -36,7 +36,6 @@ export const devServerTargetSpec = { project: 'app', target: 'serve' }; export const extractI18nTargetSpec = { project: 'app', target: 'extract-i18n' }; export const karmaTargetSpec = { project: 'app', target: 'test' }; export const tslintTargetSpec = { project: 'app', target: 'lint' }; -export const protractorTargetSpec = { project: 'app-e2e', target: 'e2e' }; export async function createArchitect(workspaceRoot: Path) { const registry = new schema.CoreSchemaRegistry(); diff --git a/package.json b/package.json index 1675bd17610d..5477154caaa3 100644 --- a/package.json +++ b/package.json @@ -118,7 +118,6 @@ "lodash": "^4.17.21", "magic-string": "0.30.21", "prettier": "^3.0.0", - "protractor": "~7.0.0", "puppeteer": "18.2.1", "quicktype-core": "23.2.6", "rollup": "4.59.0", @@ -127,7 +126,6 @@ "rollup-plugin-sourcemaps2": "0.5.6", "semver": "7.7.4", "source-map-support": "0.5.21", - "ts-node": "^10.9.1", "tslib": "2.8.1", "typescript": "5.9.3", "undici": "7.22.0", diff --git a/packages/angular_devkit/build_angular/BUILD.bazel b/packages/angular_devkit/build_angular/BUILD.bazel index 06bfa412c48d..ee90b96ec703 100644 --- a/packages/angular_devkit/build_angular/BUILD.bazel +++ b/packages/angular_devkit/build_angular/BUILD.bazel @@ -44,11 +44,6 @@ ts_json_schema( src = "src/builders/karma/schema.json", ) -ts_json_schema( - name = "protractor_schema", - src = "src/builders/protractor/schema.json", -) - ts_json_schema( name = "server_schema", src = "src/builders/server/schema.json", @@ -109,7 +104,6 @@ ts_project( "//packages/angular_devkit/build_angular:src/builders/karma/schema.ts", "//packages/angular_devkit/build_angular:src/builders/ng-packagr/schema.ts", "//packages/angular_devkit/build_angular:src/builders/prerender/schema.ts", - "//packages/angular_devkit/build_angular:src/builders/protractor/schema.ts", "//packages/angular_devkit/build_angular:src/builders/server/schema.ts", "//packages/angular_devkit/build_angular:src/builders/ssr-dev-server/schema.ts", ], @@ -321,18 +315,6 @@ LARGE_SPECS = { ":node_modules/webpack", ], }, - "protractor": { - "extra_deps": [ - "//:node_modules/jasmine-spec-reporter", - "//:node_modules/protractor", - "//:node_modules/puppeteer", - "//:node_modules/ts-node", - ], - # NB: does not run on rbe because webdriver manager uses an absolute path to chromedriver - "tags": ["no-remote-exec"], - # NB: multiple shards will compete for port 4200 so limiting to 1 - "shards": 1, - }, "server": { "size": "large", "extra_deps": [ diff --git a/packages/angular_devkit/build_angular/README.md b/packages/angular_devkit/build_angular/README.md index e839387b98ea..0c9ec4e36bf0 100644 --- a/packages/angular_devkit/build_angular/README.md +++ b/packages/angular_devkit/build_angular/README.md @@ -17,7 +17,6 @@ This package contains [Architect builders](/packages/angular_devkit/architect/RE | prerender | [Prerender](https://angular.dev/guide/prerendering) pages of your application. Prerendering is the process where a dynamic page is processed at build time generating static HTML. | | server | Build an Angular application targeting a [Node.js](https://nodejs.org) environment. | | ssr-dev-server | A development server which offers live reload during development, but uses server-side rendering. | -| protractor | **Deprecated** - Run end-to-end tests using [Protractor](https://www.protractortest.org/) framework. | ## Disclaimer diff --git a/packages/angular_devkit/build_angular/builders.json b/packages/angular_devkit/build_angular/builders.json index b2af093bba3c..4e823879bbfe 100644 --- a/packages/angular_devkit/build_angular/builders.json +++ b/packages/angular_devkit/build_angular/builders.json @@ -32,16 +32,6 @@ "schema": "./src/builders/karma/schema.json", "description": "Run Karma unit tests." }, - "protractor": { - "implementation": "./src/builders/protractor-error", - "schema": "./src/builders/protractor/schema.json", - "description": "Throw an error that Protractor is end-of-life and no longer supported." - }, - "private-protractor": { - "implementation": "./src/builders/protractor", - "schema": "./src/builders/protractor/schema.json", - "description": "PRIVATE API - Do not use." - }, "server": { "implementation": "./src/builders/server", "schema": "./src/builders/server/schema.json", diff --git a/packages/angular_devkit/build_angular/package.json b/packages/angular_devkit/build_angular/package.json index fb0828e42ffc..00863906a1f5 100644 --- a/packages/angular_devkit/build_angular/package.json +++ b/packages/angular_devkit/build_angular/package.json @@ -71,8 +71,8 @@ "undici": "7.22.0" }, "peerDependencies": { - "@angular/core": "0.0.0-ANGULAR-FW-PEER-DEP", "@angular/compiler-cli": "0.0.0-ANGULAR-FW-PEER-DEP", + "@angular/core": "0.0.0-ANGULAR-FW-PEER-DEP", "@angular/localize": "0.0.0-ANGULAR-FW-PEER-DEP", "@angular/platform-browser": "0.0.0-ANGULAR-FW-PEER-DEP", "@angular/platform-server": "0.0.0-ANGULAR-FW-PEER-DEP", @@ -81,7 +81,6 @@ "browser-sync": "^3.0.2", "karma": "^6.3.0", "ng-packagr": "0.0.0-NG-PACKAGR-PEER-DEP", - "protractor": "^7.0.0", "tailwindcss": "^2.0.0 || ^3.0.0 || ^4.0.0", "typescript": ">=5.9 <6.0" }, @@ -113,9 +112,6 @@ "ng-packagr": { "optional": true }, - "protractor": { - "optional": true - }, "tailwindcss": { "optional": true } diff --git a/packages/angular_devkit/build_angular/src/builders/protractor-error/index.ts b/packages/angular_devkit/build_angular/src/builders/protractor-error/index.ts deleted file mode 100644 index 31c9fe183731..000000000000 --- a/packages/angular_devkit/build_angular/src/builders/protractor-error/index.ts +++ /dev/null @@ -1,20 +0,0 @@ -/** - * @license - * Copyright Google LLC All Rights Reserved. - * - * Use of this source code is governed by an MIT-style license that can be - * found in the LICENSE file at https://angular.dev/license - */ - -import { BuilderContext, createBuilder } from '@angular-devkit/architect'; -import { Schema as ProtractorBuilderOptions } from '../protractor/schema'; - -export default createBuilder( - (_options: ProtractorBuilderOptions, context: BuilderContext) => { - context.logger.error( - 'Protractor has reached end-of-life and is no longer supported. For additional information and alternatives, please see https://blog.angular.dev/protractor-deprecation-update-august-2023-2beac7402ce0.', - ); - - return { success: false }; - }, -); diff --git a/packages/angular_devkit/build_angular/src/builders/protractor/index.ts b/packages/angular_devkit/build_angular/src/builders/protractor/index.ts deleted file mode 100644 index df0a60759835..000000000000 --- a/packages/angular_devkit/build_angular/src/builders/protractor/index.ts +++ /dev/null @@ -1,175 +0,0 @@ -/** - * @license - * Copyright Google LLC All Rights Reserved. - * - * Use of this source code is governed by an MIT-style license that can be - * found in the LICENSE file at https://angular.dev/license - */ - -import { - BuilderContext, - BuilderOutput, - createBuilder, - targetFromTargetString, -} from '@angular-devkit/architect'; -import { tags } from '@angular-devkit/core'; -import { resolve } from 'node:path'; -import * as url from 'node:url'; -import { runModuleAsObservableFork } from '../../utils'; -import { assertIsError } from '../../utils/error'; -import { DevServerBuilderOptions } from '../dev-server/index'; -import { Schema as ProtractorBuilderOptions } from './schema'; - -interface JasmineNodeOpts { - jasmineNodeOpts: { - grep?: string; - invertGrep?: boolean; - }; -} - -function runProtractor(root: string, options: ProtractorBuilderOptions): Promise { - const additionalProtractorConfig: Partial & Partial = { - baseUrl: options.baseUrl, - specs: options.specs && options.specs.length ? options.specs : undefined, - suite: options.suite, - jasmineNodeOpts: { - grep: options.grep, - invertGrep: options.invertGrep, - }, - }; - - // TODO: Protractor manages process.exit itself, so this target will allways quit the - // process. To work around this we run it in a subprocess. - // https://github.com/angular/protractor/issues/4160 - return runModuleAsObservableFork(root, 'protractor/built/launcher', 'init', [ - resolve(root, options.protractorConfig), - additionalProtractorConfig, - ]).toPromise() as Promise; -} - -async function updateWebdriver() { - // The webdriver-manager update command can only be accessed via a deep import. - const webdriverDeepImport = 'webdriver-manager/built/lib/cmds/update'; - - let path; - try { - const protractorPath = require.resolve('protractor'); - - path = require.resolve(webdriverDeepImport, { paths: [protractorPath] }); - } catch (error) { - assertIsError(error); - if (error.code !== 'MODULE_NOT_FOUND') { - throw error; - } - } - - if (!path) { - throw new Error(tags.stripIndents` - Cannot automatically find webdriver-manager to update. - Update webdriver-manager manually and run 'ng e2e --no-webdriver-update' instead. - `); - } - - const webdriverUpdate = await import(path); - // const webdriverUpdate = await import(path) as typeof import ('webdriver-manager/built/lib/cmds/update'); - - // run `webdriver-manager update --standalone false --gecko false --quiet` - // if you change this, update the command comment in prev line - return webdriverUpdate.program.run({ - standalone: false, - gecko: false, - quiet: true, - } as unknown as JSON); -} - -export type { ProtractorBuilderOptions }; - -/** - * @experimental Direct usage of this function is considered experimental. - */ -export async function execute( - options: ProtractorBuilderOptions, - context: BuilderContext, -): Promise { - context.logger.warn( - 'Protractor has reached end-of-life and is no longer supported by the Angular team. The `protractor` builder will be removed in a future Angular major version. For additional information and alternatives, please see https://blog.angular.dev/protractor-deprecation-update-august-2023-2beac7402ce0.', - ); - - // ensure that only one of these options is used - if (options.devServerTarget && options.baseUrl) { - throw new Error(tags.stripIndents` - The 'baseUrl' option cannot be used with 'devServerTarget'. - When present, 'devServerTarget' will be used to automatically setup 'baseUrl' for Protractor. - `); - } - - if (options.webdriverUpdate) { - await updateWebdriver(); - } - - let baseUrl = options.baseUrl; - let server; - - try { - if (options.devServerTarget) { - const target = targetFromTargetString(options.devServerTarget); - const serverOptions = await context.getTargetOptions(target); - - const overrides = { - watch: false, - liveReload: false, - } as DevServerBuilderOptions; - - if (options.host !== undefined) { - overrides.host = options.host; - } else if (typeof serverOptions.host === 'string') { - options.host = serverOptions.host; - } else { - options.host = overrides.host = 'localhost'; - } - - if (options.port !== undefined) { - overrides.port = options.port; - } else if (typeof serverOptions.port === 'number') { - options.port = serverOptions.port; - } - - server = await context.scheduleTarget(target, overrides); - const result = await server.result; - if (!result.success) { - return { success: false }; - } - - if (typeof serverOptions.publicHost === 'string') { - let publicHost = serverOptions.publicHost; - if (!/^\w+:\/\//.test(publicHost)) { - publicHost = `${serverOptions.ssl ? 'https' : 'http'}://${publicHost}`; - } - const clientUrl = url.parse(publicHost); - baseUrl = url.format(clientUrl); - } else if (typeof result.baseUrl === 'string') { - baseUrl = result.baseUrl; - } else if (typeof result.port === 'number') { - baseUrl = url.format({ - protocol: serverOptions.ssl ? 'https' : 'http', - hostname: options.host, - port: result.port.toString(), - }); - } - } - - // Like the baseUrl in protractor config file when using the API we need to add - // a trailing slash when provide to the baseUrl. - if (baseUrl && !baseUrl.endsWith('/')) { - baseUrl += '/'; - } - - return await runProtractor(context.workspaceRoot, { ...options, baseUrl }); - } catch { - return { success: false }; - } finally { - await server?.stop(); - } -} - -export default createBuilder(execute); diff --git a/packages/angular_devkit/build_angular/src/builders/protractor/schema.json b/packages/angular_devkit/build_angular/src/builders/protractor/schema.json deleted file mode 100644 index 286a315a96a9..000000000000 --- a/packages/angular_devkit/build_angular/src/builders/protractor/schema.json +++ /dev/null @@ -1,58 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema", - "title": "Protractor Target", - "description": "Protractor target options for Build Facade.", - "type": "object", - "properties": { - "protractorConfig": { - "type": "string", - "description": "The name of the Protractor configuration file." - }, - "devServerTarget": { - "type": "string", - "description": "A dev-server builder target to run tests against in the format of `project:target[:configuration]`. You can also pass in more than one configuration name as a comma-separated list. Example: `project:target:production,staging`.", - "pattern": "^([^:\\s]+:[^:\\s]+(:[^\\s]+)?)?$" - }, - "grep": { - "type": "string", - "description": "Execute specs whose names match the pattern, which is internally compiled to a RegExp." - }, - "invertGrep": { - "type": "boolean", - "description": "Invert the selection specified by the 'grep' option.", - "default": false - }, - "specs": { - "type": "array", - "description": "Override specs in the protractor config.", - "default": [], - "items": { - "type": "string", - "description": "Spec name." - } - }, - "suite": { - "type": "string", - "description": "Override suite in the protractor config." - }, - "webdriverUpdate": { - "type": "boolean", - "description": "Try to update webdriver.", - "default": true - }, - "port": { - "type": "number", - "description": "The port to use to serve the application." - }, - "host": { - "type": "string", - "description": "Host to listen on." - }, - "baseUrl": { - "type": "string", - "description": "Base URL for protractor to connect to." - } - }, - "additionalProperties": false, - "required": ["protractorConfig"] -} diff --git a/packages/angular_devkit/build_angular/src/builders/protractor/works_spec.ts b/packages/angular_devkit/build_angular/src/builders/protractor/works_spec.ts deleted file mode 100644 index d42d677055b3..000000000000 --- a/packages/angular_devkit/build_angular/src/builders/protractor/works_spec.ts +++ /dev/null @@ -1,136 +0,0 @@ -/** - * @license - * Copyright Google LLC All Rights Reserved. - * - * Use of this source code is governed by an MIT-style license that can be - * found in the LICENSE file at https://angular.dev/license - */ - -import { Architect } from '@angular-devkit/architect'; -import { JsonObject, normalize } from '@angular-devkit/core'; -import { createArchitect, host, protractorTargetSpec } from '../../testing/test-utils'; - -describe('Protractor Builder', () => { - let architect: Architect; - - beforeEach(async () => { - await host.initialize().toPromise(); - architect = (await createArchitect(host.root())).architect; - }); - - afterEach(() => host.restore().toPromise()); - - it('executes tests with automatic dev server usage', async () => { - const run = await architect.scheduleTarget(protractorTargetSpec); - - await expectAsync(run.result).toBeResolvedTo(jasmine.objectContaining({ success: true })); - - await run.stop(); - }); - - it('fails with no devServerTarget and no standalone server', async () => { - const overrides = { devServerTarget: undefined } as unknown as JsonObject; - const run = await architect.scheduleTarget(protractorTargetSpec, overrides); - - await expectAsync(run.result).toBeResolvedTo(jasmine.objectContaining({ success: false })); - - await run.stop(); - }); - - it('overrides protractor specs', async () => { - host - .scopedSync() - .rename(normalize('./e2e/app.e2e-spec.ts'), normalize('./e2e/renamed-app.e2e.spec.ts')); - - const overrides = { specs: ['./e2e/renamed-app.e2e.spec.ts'] }; - const run = await architect.scheduleTarget(protractorTargetSpec, overrides); - - await expectAsync(run.result).toBeResolvedTo(jasmine.objectContaining({ success: true })); - - await run.stop(); - }); - - it('overrides protractor suites', async () => { - host - .scopedSync() - .rename(normalize('./e2e/app.e2e-spec.ts'), normalize('./e2e/renamed-app.e2e-spec.ts')); - - // Suites block needs to be added in the protractor.conf.js file to test suites - host.replaceInFile( - 'protractor.conf.js', - `allScriptsTimeout: 11000,`, - ` - allScriptsTimeout: 11000, - suites: { - app: './e2e/app.e2e-spec.ts' - }, - `, - ); - - const overrides = { suite: 'app' }; - const run = await architect.scheduleTarget(protractorTargetSpec, overrides); - - await expectAsync(run.result).toBeResolvedTo(jasmine.objectContaining({ success: true })); - - await run.stop(); - }); - - it('supports automatic port assignment (port = 0)', async () => { - const overrides = { port: 0 }; - const run = await architect.scheduleTarget(protractorTargetSpec, overrides); - - await expectAsync(run.result).toBeResolvedTo(jasmine.objectContaining({ success: true })); - - await run.stop(); - }); - - it('supports dev server builder with browser builder base HREF option', async () => { - host.replaceInFile( - 'angular.json', - '"main": "src/main.ts",', - '"main": "src/main.ts", "baseHref": "/base/",', - ); - // Need to reset architect to use the modified config - architect = (await createArchitect(host.root())).architect; - - const run = await architect.scheduleTarget(protractorTargetSpec); - - await expectAsync(run.result).toBeResolvedTo(jasmine.objectContaining({ success: true })); - - await run.stop(); - }); - - it('supports running tests by pattern', async () => { - host.writeMultipleFiles({ - 'e2e/app.e2e-spec.ts': ` - it('should succeed', () => expect(true).toBeTruthy()); - it('should fail', () => expect(false).toBeTruthy()); - `, - }); - - const overrides = { grep: 'succeed' }; - - const run = await architect.scheduleTarget(protractorTargetSpec, overrides); - - await expectAsync(run.result).toBeResolvedTo(jasmine.objectContaining({ success: true })); - - await run.stop(); - }); - - it('supports running tests excluding a pattern', async () => { - host.writeMultipleFiles({ - 'e2e/app.e2e-spec.ts': ` - it('should succeed', () => expect(true).toBeTruthy()); - it('should fail', () => expect(false).toBeTruthy()); - `, - }); - - const overrides = { grep: 'fail', invertGrep: true }; - - const run = await architect.scheduleTarget(protractorTargetSpec, overrides); - - await expectAsync(run.result).toBeResolvedTo(jasmine.objectContaining({ success: true })); - - await run.stop(); - }); -}); diff --git a/packages/angular_devkit/build_angular/src/index.ts b/packages/angular_devkit/build_angular/src/index.ts index 1ba9ce034544..8c8b27e39987 100644 --- a/packages/angular_devkit/build_angular/src/index.ts +++ b/packages/angular_devkit/build_angular/src/index.ts @@ -65,11 +65,6 @@ export function executeKarmaBuilder( export { type KarmaBuilderOptions, type KarmaConfigOptions }; -export { - execute as executeProtractorBuilder, - type ProtractorBuilderOptions, -} from './builders/protractor'; - export { execute as executeServerBuilder, type ServerBuilderOptions, diff --git a/packages/angular_devkit/core/src/workspace/json/reader_spec.ts b/packages/angular_devkit/core/src/workspace/json/reader_spec.ts index 32647444ab2b..041cf580ce0b 100644 --- a/packages/angular_devkit/core/src/workspace/json/reader_spec.ts +++ b/packages/angular_devkit/core/src/workspace/json/reader_spec.ts @@ -75,7 +75,7 @@ describe('readJsonWorkpace Parsing', () => { const workspace = await readJsonWorkspace('', host); - expect(Array.from(workspace.projects.keys())).toEqual(['my-app', 'my-app-e2e']); + expect(Array.from(workspace.projects.keys())).toEqual(['my-app']); expect(workspace.extensions['newProjectRoot']).toBe('projects'); expect(workspace.projects.get('my-app')!.extensions['schematics']).toEqual({ '@schematics/angular:component': { styleext: 'scss' }, diff --git a/packages/angular_devkit/core/src/workspace/json/test/angular.json b/packages/angular_devkit/core/src/workspace/json/test/angular.json index 94800e0dfa56..285676999acb 100644 --- a/packages/angular_devkit/core/src/workspace/json/test/angular.json +++ b/packages/angular_devkit/core/src/workspace/json/test/angular.json @@ -104,34 +104,6 @@ } } } - }, - "my-app-e2e": { - "root": "e2e/", - "projectType": "application", - "prefix": "", - "architect": { - "e2e": { - "builder": "@angular-devkit/build-angular:private-protractor", - "options": { - "protractorConfig": "e2e/protractor.conf.js", - "devServerTarget": "my-app:serve" - }, - "configurations": { - "production": { - "devServerTarget": "my-app:serve:production" - } - } - }, - "lint": { - "builder": "@angular-devkit/build-angular:tslint", - "options": { - "tsConfig": "e2e/tsconfig.e2e.json", - "exclude": [ - "**/node_modules/**" - ] - } - } - } } } } diff --git a/packages/angular_devkit/core/src/workspace/json/test/cases/AddProject2.json b/packages/angular_devkit/core/src/workspace/json/test/cases/AddProject2.json index 5ae73ae1eff6..55ec083ffa9f 100644 --- a/packages/angular_devkit/core/src/workspace/json/test/cases/AddProject2.json +++ b/packages/angular_devkit/core/src/workspace/json/test/cases/AddProject2.json @@ -105,34 +105,6 @@ } } }, - "my-app-e2e": { - "root": "e2e/", - "projectType": "application", - "prefix": "", - "architect": { - "e2e": { - "builder": "@angular-devkit/build-angular:private-protractor", - "options": { - "protractorConfig": "e2e/protractor.conf.js", - "devServerTarget": "my-app:serve" - }, - "configurations": { - "production": { - "devServerTarget": "my-app:serve:production" - } - } - }, - "lint": { - "builder": "@angular-devkit/build-angular:tslint", - "options": { - "tsConfig": "e2e/tsconfig.e2e.json", - "exclude": [ - "**/node_modules/**" - ] - } - } - } - }, "new": { "root": "src" } diff --git a/packages/angular_devkit/core/src/workspace/json/test/cases/AddProject3.json b/packages/angular_devkit/core/src/workspace/json/test/cases/AddProject3.json index 6198c97007a0..cbd98e4c89ef 100644 --- a/packages/angular_devkit/core/src/workspace/json/test/cases/AddProject3.json +++ b/packages/angular_devkit/core/src/workspace/json/test/cases/AddProject3.json @@ -105,34 +105,6 @@ } } }, - "my-app-e2e": { - "root": "e2e/", - "projectType": "application", - "prefix": "", - "architect": { - "e2e": { - "builder": "@angular-devkit/build-angular:private-protractor", - "options": { - "protractorConfig": "e2e/protractor.conf.js", - "devServerTarget": "my-app:serve" - }, - "configurations": { - "production": { - "devServerTarget": "my-app:serve:production" - } - } - }, - "lint": { - "builder": "@angular-devkit/build-angular:tslint", - "options": { - "tsConfig": "e2e/tsconfig.e2e.json", - "exclude": [ - "**/node_modules/**" - ] - } - } - } - }, "1": { "root": "src" } diff --git a/packages/angular_devkit/core/src/workspace/json/test/cases/ProjectAddTarget.json b/packages/angular_devkit/core/src/workspace/json/test/cases/ProjectAddTarget.json index 1fdf8eeec7ed..e42eb5a70c6f 100644 --- a/packages/angular_devkit/core/src/workspace/json/test/cases/ProjectAddTarget.json +++ b/packages/angular_devkit/core/src/workspace/json/test/cases/ProjectAddTarget.json @@ -107,34 +107,6 @@ "builder": "new-builder" } } - }, - "my-app-e2e": { - "root": "e2e/", - "projectType": "application", - "prefix": "", - "architect": { - "e2e": { - "builder": "@angular-devkit/build-angular:private-protractor", - "options": { - "protractorConfig": "e2e/protractor.conf.js", - "devServerTarget": "my-app:serve" - }, - "configurations": { - "production": { - "devServerTarget": "my-app:serve:production" - } - } - }, - "lint": { - "builder": "@angular-devkit/build-angular:tslint", - "options": { - "tsConfig": "e2e/tsconfig.e2e.json", - "exclude": [ - "**/node_modules/**" - ] - } - } - } } } } diff --git a/packages/angular_devkit/core/src/workspace/json/test/cases/ProjectDeleteTarget.json b/packages/angular_devkit/core/src/workspace/json/test/cases/ProjectDeleteTarget.json index 81804c2f04b5..573a5835564b 100644 --- a/packages/angular_devkit/core/src/workspace/json/test/cases/ProjectDeleteTarget.json +++ b/packages/angular_devkit/core/src/workspace/json/test/cases/ProjectDeleteTarget.json @@ -98,34 +98,6 @@ } } } - }, - "my-app-e2e": { - "root": "e2e/", - "projectType": "application", - "prefix": "", - "architect": { - "e2e": { - "builder": "@angular-devkit/build-angular:private-protractor", - "options": { - "protractorConfig": "e2e/protractor.conf.js", - "devServerTarget": "my-app:serve" - }, - "configurations": { - "production": { - "devServerTarget": "my-app:serve:production" - } - } - }, - "lint": { - "builder": "@angular-devkit/build-angular:tslint", - "options": { - "tsConfig": "e2e/tsconfig.e2e.json", - "exclude": [ - "**/node_modules/**" - ] - } - } - } } } } diff --git a/packages/angular_devkit/core/src/workspace/json/test/cases/ProjectModifyProperties.json b/packages/angular_devkit/core/src/workspace/json/test/cases/ProjectModifyProperties.json index 1debd9ed6e6b..9f6380eb89c0 100644 --- a/packages/angular_devkit/core/src/workspace/json/test/cases/ProjectModifyProperties.json +++ b/packages/angular_devkit/core/src/workspace/json/test/cases/ProjectModifyProperties.json @@ -104,34 +104,6 @@ } } } - }, - "my-app-e2e": { - "root": "e2e/", - "projectType": "application", - "prefix": "", - "architect": { - "e2e": { - "builder": "@angular-devkit/build-angular:private-protractor", - "options": { - "protractorConfig": "e2e/protractor.conf.js", - "devServerTarget": "my-app:serve" - }, - "configurations": { - "production": { - "devServerTarget": "my-app:serve:production" - } - } - }, - "lint": { - "builder": "@angular-devkit/build-angular:tslint", - "options": { - "tsConfig": "e2e/tsconfig.e2e.json", - "exclude": [ - "**/node_modules/**" - ] - } - } - } } } } diff --git a/packages/angular_devkit/core/src/workspace/json/test/cases/ProjectSetProperties.json b/packages/angular_devkit/core/src/workspace/json/test/cases/ProjectSetProperties.json index 9e2bfb88483c..7b8b3f85e5c4 100644 --- a/packages/angular_devkit/core/src/workspace/json/test/cases/ProjectSetProperties.json +++ b/packages/angular_devkit/core/src/workspace/json/test/cases/ProjectSetProperties.json @@ -105,34 +105,6 @@ } }, "sourceRoot": "src" - }, - "my-app-e2e": { - "root": "e2e/", - "projectType": "application", - "prefix": "", - "architect": { - "e2e": { - "builder": "@angular-devkit/build-angular:private-protractor", - "options": { - "protractorConfig": "e2e/protractor.conf.js", - "devServerTarget": "my-app:serve" - }, - "configurations": { - "production": { - "devServerTarget": "my-app:serve:production" - } - } - }, - "lint": { - "builder": "@angular-devkit/build-angular:tslint", - "options": { - "tsConfig": "e2e/tsconfig.e2e.json", - "exclude": [ - "**/node_modules/**" - ] - } - } - } } } } diff --git a/packages/schematics/angular/utility/latest-versions/package.json b/packages/schematics/angular/utility/latest-versions/package.json index 806527a60fba..ea0e8e92de5a 100644 --- a/packages/schematics/angular/utility/latest-versions/package.json +++ b/packages/schematics/angular/utility/latest-versions/package.json @@ -23,7 +23,6 @@ "tailwindcss": "^4.1.12", "@tailwindcss/postcss": "^4.1.12", "tslib": "^2.3.0", - "ts-node": "~10.9.0", "typescript": "~5.9.2", "vitest": "^4.0.8", "@vitest/browser-playwright": "^4.0.8", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 8767e3d5dacb..ce8b9910b540 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -247,9 +247,6 @@ importers: prettier: specifier: ^3.0.0 version: 3.8.1 - protractor: - specifier: ~7.0.0 - version: 7.0.0 puppeteer: specifier: 18.2.1 version: 18.2.1(bufferutil@4.1.0)(encoding@0.1.13) @@ -274,9 +271,6 @@ importers: source-map-support: specifier: 0.5.21 version: 0.5.21 - ts-node: - specifier: ^10.9.1 - version: 10.9.2(@types/node@22.19.11)(typescript@5.9.3) tslib: specifier: 2.8.1 version: 2.8.1 @@ -1603,10 +1597,6 @@ packages: conventional-commits-parser: optional: true - '@cspotcode/source-map-support@0.8.1': - resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} - engines: {node: '>=12'} - '@csstools/color-helpers@6.0.1': resolution: {integrity: sha512-NmXRccUJMk2AWA5A7e5a//3bCIMyOu2hAtdRYrhPPHjDxINuCwX1w6rnIZ4xjLcp0ayv6h8Pc3X0eJUGiAAXHQ==} engines: {node: '>=20.19.0'} @@ -2341,9 +2331,6 @@ packages: '@jridgewell/trace-mapping@0.3.31': resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==} - '@jridgewell/trace-mapping@0.3.9': - resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} - '@js-sdsl/ordered-map@4.4.2': resolution: {integrity: sha512-iUKgm52T8HOE/makSxjqoWhe95ZJA1/G1sYsGev2JDKUSS14KAgg1LHb+Ba+IPow0xflbnSkOsZcO08C7w1gYw==} @@ -3481,18 +3468,6 @@ packages: resolution: {integrity: sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==} engines: {node: '>= 10'} - '@tsconfig/node10@1.0.12': - resolution: {integrity: sha512-UCYBaeFvM11aU2y3YPZ//O5Rhj+xKyzy7mvcIoAjASbigy8mHMryP5cK7dgjlz2hWxh1g5pLw084E0a/wlUSFQ==} - - '@tsconfig/node12@1.0.11': - resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==} - - '@tsconfig/node14@1.0.3': - resolution: {integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==} - - '@tsconfig/node16@1.0.4': - resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==} - '@tufjs/canonical-json@2.0.0': resolution: {integrity: sha512-yVtV8zsdo8qFHe+/3kw81dSLyF7D576A5cCFCi4X7B39tWT7SekaEFUnvnWJHz+9qO7qJTah1JbrDjWKqFtdWA==} engines: {node: ^16.14.0 || >=18.0.0} @@ -3660,9 +3635,6 @@ packages: '@types/pumpify@1.4.5': resolution: {integrity: sha512-BGVAQyK5yJdfIII230fVYGY47V63hUNAhryuuS3b4lEN2LNwxUXFKsEf8QLDCjmZuimlj23BHppJgcrGvNtqKg==} - '@types/q@0.0.32': - resolution: {integrity: sha512-qYi3YV9inU/REEfxwVcGZzbS3KG/Xs90lv0Pr+lDtuVjBPGd1A+eciXzVSaRvLify132BfcvhvEjeVahrUl0Ug==} - '@types/qs@6.14.0': resolution: {integrity: sha512-eOunJqu0K1923aExK6y8p6fsihYEn/BYuQ4g0CxAAgFc4b/ZLN4CrsRZ55srTdqoiLzU2B2evC+apEIxprEzkQ==} @@ -3681,9 +3653,6 @@ packages: '@types/retry@0.12.2': resolution: {integrity: sha512-XISRgDJ2Tc5q4TRqvgJtzsRkFYNJzZrhTdtMoGVBttwzzQJkPnS3WWTFc7kuDRoPtPakl+T+OfdEUjYJj7Jbow==} - '@types/selenium-webdriver@3.0.26': - resolution: {integrity: sha512-dyIGFKXfUFiwkMfNGn1+F6b80ZjR3uSYv1j6xVJSDlft5waZ2cwkHW4e7zNzvq7hiEackcgvBpmnXZrI1GltPg==} - '@types/semver@7.7.1': resolution: {integrity: sha512-FmgJfu+MOcQ370SD0ev7EI8TlCAfKYU+B4m5T3yXc1CiRN94g/SZPtsCkk506aUDtlMnFZvasDwHHUcZUEaYuA==} @@ -4010,10 +3979,6 @@ packages: peerDependencies: acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 - acorn-walk@8.3.4: - resolution: {integrity: sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==} - engines: {node: '>=0.4.0'} - acorn@8.15.0: resolution: {integrity: sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==} engines: {node: '>=0.4.0'} @@ -4028,14 +3993,6 @@ packages: resolution: {integrity: sha512-OXwN5b9pCUXNQHJpwwD2qP40byEmSgzj8B4ydSN0uMNYWiFmJ6x6KwUllMmfk8Rwu/HJDFR7U8ubsWBoN0Xp0A==} engines: {node: '>=8.9'} - adm-zip@0.5.16: - resolution: {integrity: sha512-TGw5yVi4saajsSEgz25grObGHEUaDrniwvA2qwSC060KfqGPdglhvPMA2lPIoxs3PQIItj2iag35fONcQqgUaQ==} - engines: {node: '>=12.0'} - - agent-base@4.3.0: - resolution: {integrity: sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg==} - engines: {node: '>= 4.0.0'} - agent-base@6.0.2: resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} engines: {node: '>= 6.0.0'} @@ -4086,10 +4043,6 @@ packages: engines: {'0': node >= 0.8.0} hasBin: true - ansi-regex@2.1.1: - resolution: {integrity: sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==} - engines: {node: '>=0.10.0'} - ansi-regex@5.0.1: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} engines: {node: '>=8'} @@ -4098,10 +4051,6 @@ packages: resolution: {integrity: sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==} engines: {node: '>=12'} - ansi-styles@2.2.1: - resolution: {integrity: sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==} - engines: {node: '>=0.10.0'} - ansi-styles@4.3.0: resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} engines: {node: '>=8'} @@ -4118,9 +4067,6 @@ packages: resolution: {integrity: sha512-FCAJojipPn0bXjuEpjOOOMN8FZDkxfWWp4JGN9mifU2IhxvKyXZYqpzPHdnTSUpmPDy+tsslB6Z1g+Vg6nVbYA==} engines: {node: '>=8'} - arg@4.1.3: - resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} - argparse@2.0.1: resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} @@ -4139,18 +4085,10 @@ packages: resolution: {integrity: sha512-FmeCCAenzH0KH381SPT5FZmiA/TmpndpcaShhfgEN9eCVjnFBqq3l1xrI42y8+PPLI6hypzou4GXw00WHmPBLQ==} engines: {node: '>= 0.4'} - array-union@1.0.2: - resolution: {integrity: sha512-Dxr6QJj/RdU/hCaBjOfxW+q6lyuVE6JFWIrAUpuOOhoJJoQ99cUn3igRaHVB5P9WrgFVN0FfArM3x0cueOU8ng==} - engines: {node: '>=0.10.0'} - array-union@3.0.1: resolution: {integrity: sha512-1OvF9IbWwaeiM9VhzYXVQacMibxpXOMYVNIvMtKRyX9SImBXpKcFr8XvFDeEslCyuH/t6KRt7HEO94AlP8Iatw==} engines: {node: '>=12'} - array-uniq@1.0.3: - resolution: {integrity: sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==} - engines: {node: '>=0.10.0'} - array.prototype.findlastindex@1.2.6: resolution: {integrity: sha512-F/TKATkzseUExPlfvmwQKGITM3DGTK+vkAsCZoDc5daVygbJBnjEUCbgkAvVFsgfXfX4YIqZ/27G3k3tdXrTxQ==} engines: {node: '>= 0.4'} @@ -4167,10 +4105,6 @@ packages: resolution: {integrity: sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==} engines: {node: '>= 0.4'} - arrify@1.0.1: - resolution: {integrity: sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==} - engines: {node: '>=0.10.0'} - arrify@2.0.1: resolution: {integrity: sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==} engines: {node: '>=8'} @@ -4327,11 +4261,6 @@ packages: bl@4.1.0: resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} - blocking-proxy@1.0.1: - resolution: {integrity: sha512-KE8NFMZr3mN2E0HcvCgRtX7DjhiIQrwle+nSVJVC/yqFb9+xznHl2ZcoBp2L9qzkI4t4cBFJ1efXF8Dwi132RA==} - engines: {node: '>=6.9.x'} - hasBin: true - body-parser@1.20.4: resolution: {integrity: sha512-ZTgYYLMOXY9qKU/57FAo8F+HA2dGX7bqGc71txDRC1rS4frdFI5R7NhluHxH6M0YItAP0sHB4uqAOcYKxO6uGA==} engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} @@ -4383,9 +4312,6 @@ packages: engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true - browserstack@1.6.1: - resolution: {integrity: sha512-GxtFjpIaKdbAyzHfFDKixKO8IBT7wR3NjbzrGc78nNs/Ciys9wU3/nBtsqsWv5nDSrdI5tz0peKuzCPuNXNUiw==} - bs-recipes@1.3.4: resolution: {integrity: sha512-BXvDkqhDNxXEjeGM8LFkSbR+jzmP/CYpCiVKYn+soB1dDldeU15EBNDkwVXndKuX35wnNUaPd0qSoQEAkmQtMw==} @@ -4448,10 +4374,6 @@ packages: resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} engines: {node: '>=6'} - camelcase@5.3.1: - resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} - engines: {node: '>=6'} - caniuse-lite@1.0.30001770: resolution: {integrity: sha512-x/2CLQ1jHENRbHg5PSId2sXq1CIO1CISvwWAj027ltMVG2UNgW+w9oH2+HzgEIRFembL8bUlXtfbBHR1fCg2xw==} @@ -4462,10 +4384,6 @@ packages: resolution: {integrity: sha512-NUPRluOfOiTKBKvWPtSD4PhFvWCqOi0BGStNWs57X9js7XGTprSmFoz5F0tWhR4WPjNeR9jXqdC7/UpSJTnlRg==} engines: {node: '>=18'} - chalk@1.1.3: - resolution: {integrity: sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==} - engines: {node: '>=0.10.0'} - chalk@4.1.2: resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} engines: {node: '>=10'} @@ -4526,9 +4444,6 @@ packages: clipanion@4.0.0-rc.4: resolution: {integrity: sha512-CXkMQxU6s9GklO/1f714dkKBMu1lopS1WFF0B8o4AxPykR1hpozxSiUZ5ZUeBjfPgCWqbcNOtZVFhB8Lkfp1+Q==} - cliui@6.0.0: - resolution: {integrity: sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==} - cliui@7.0.4: resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==} @@ -4681,9 +4596,6 @@ packages: typescript: optional: true - create-require@1.1.1: - resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} - cross-fetch@3.1.5: resolution: {integrity: sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==} @@ -4812,10 +4724,6 @@ packages: supports-color: optional: true - decamelize@1.2.0: - resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==} - engines: {node: '>=0.10.0'} - decimal.js@10.6.0: resolution: {integrity: sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg==} @@ -4857,10 +4765,6 @@ packages: defu@6.1.4: resolution: {integrity: sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==} - del@2.2.2: - resolution: {integrity: sha512-Z4fzpbIRjOu7lO5jCETSWoqUDVe0IPOlfugBsF6suen2LKDlVb4QZpKEM9P+buNJ4KI1eN7I083w/pbKUpsrWQ==} - engines: {node: '>=0.10.0'} - delayed-stream@1.0.0: resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} engines: {node: '>=0.4.0'} @@ -4899,10 +4803,6 @@ packages: di@0.0.1: resolution: {integrity: sha512-uJaamHkagcZtHPqCIHZxnFrXlunQXgBOsZSUOWwFw31QJCAbyTBoHMW75YOTur5ZNx8pIeAKgf6GWIgaqqiLhA==} - diff@4.0.4: - resolution: {integrity: sha512-X07nttJQkwkfKfvTPG/KSnE2OMdcUCao6+eXF3wmnIQRn2aPAHH3VxDbDOdegkd6JbPsXqShpvEOHfAT+nCNwQ==} - engines: {node: '>=0.3.1'} - dns-packet@5.6.1: resolution: {integrity: sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw==} engines: {node: '>=6'} @@ -5080,12 +4980,6 @@ packages: resolution: {integrity: sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==} engines: {node: '>= 0.4'} - es6-promise@4.2.8: - resolution: {integrity: sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==} - - es6-promisify@5.0.0: - resolution: {integrity: sha512-C+d6UdsYDk0lMebHNR4S2NybQMMngAOnOwYBQjTOiv0MkoJMP0Myw2mgpDLBcpfCmRLxyFqYhS/CfOENq4SJhQ==} - esbuild-wasm@0.27.3: resolution: {integrity: sha512-AUXuOxZ145/5Az+lIqk6TdJbxKTyDGkXMJpTExmBdbnHR6n6qAFx+F4oG9ORpVYJ9dQYeQAqzv51TO4DFKsbXw==} engines: {node: '>=18'} @@ -5103,10 +4997,6 @@ packages: escape-html@1.0.3: resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} - escape-string-regexp@1.0.5: - resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} - engines: {node: '>=0.8.0'} - escape-string-regexp@4.0.0: resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} engines: {node: '>=10'} @@ -5247,10 +5137,6 @@ packages: resolution: {integrity: sha512-CRT1WTyuQoD771GW56XEZFQ/ZoSfWid1alKGDYMmkt2yl8UXrVR4pspqWNEcqKvVIzg6PAltWjxcSSPrboA4iA==} engines: {node: '>=18.0.0'} - exit@0.1.2: - resolution: {integrity: sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==} - engines: {node: '>= 0.8.0'} - expect-type@1.3.0: resolution: {integrity: sha512-knvyeauYhqjOYvQ66MznSMs83wmHrCycNEN6Ao+2AeYEfxUIkuiVxdEa1qlGEPK+We3n0THiDciYSsCcgW/DoA==} engines: {node: '>=12.0.0'} @@ -5376,10 +5262,6 @@ packages: resolution: {integrity: sha512-afd4O7zpqHeRyg4PfDQsXmlDe2PfdHtJt6Akt8jOWaApLOZk5JXs6VMR29lz03pRe9mpykrRCYIYxaJYcfpncQ==} engines: {node: '>=18'} - find-up@4.1.0: - resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} - engines: {node: '>=8'} - find-up@5.0.0: resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} engines: {node: '>=10'} @@ -5426,10 +5308,6 @@ packages: form-data-encoder@1.7.2: resolution: {integrity: sha512-qfqtYan3rxrnCk1VYaA4H+Ms9xdpPqvLZa6xmMgFvhO32x7/3J/ExcTd6qpxM0vH2GdMI+poehyBZvqfMTto8A==} - form-data@2.3.3: - resolution: {integrity: sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==} - engines: {node: '>= 0.12'} - form-data@4.0.5: resolution: {integrity: sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==} engines: {node: '>= 6'} @@ -5590,10 +5468,6 @@ packages: resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} engines: {node: '>= 0.4'} - globby@5.0.0: - resolution: {integrity: sha512-HJRTIH2EeH44ka+LWig+EqT2ONSYpVlNfx6pyd592/VF1TbfljJ7elwie7oSwcViLGqOdWocSdu2txwBF9bjmQ==} - engines: {node: '>=0.10.0'} - google-auth-library@10.5.0: resolution: {integrity: sha512-7ABviyMOlX5hIVD60YOfHw4/CxOfBhyduaYB+wbFWCWoni4N7SLcV46hrVRktuBbZjFC9ONyqamZITN7q3n32w==} engines: {node: '>=18'} @@ -5649,19 +5523,6 @@ packages: engines: {node: '>=0.4.7'} hasBin: true - har-schema@2.0.0: - resolution: {integrity: sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==} - engines: {node: '>=4'} - - har-validator@5.1.5: - resolution: {integrity: sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==} - engines: {node: '>=6'} - deprecated: this library is no longer supported - - has-ansi@2.0.0: - resolution: {integrity: sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg==} - engines: {node: '>=0.10.0'} - has-bigints@1.1.0: resolution: {integrity: sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==} engines: {node: '>= 0.4'} @@ -5759,10 +5620,6 @@ packages: resolution: {integrity: sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==} engines: {node: '>=8.0.0'} - http-signature@1.2.0: - resolution: {integrity: sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==} - engines: {node: '>=0.8', npm: '>=1.3.7'} - http-signature@1.4.0: resolution: {integrity: sha512-G5akfn7eKbpDN+8nPS/cb57YeA1jLTVxjpCj7tmm3QKPdyDy7T+qSC40e9ptydSWvkwjSXw1VbkpyEm39ukeAg==} engines: {node: '>=0.10'} @@ -5774,10 +5631,6 @@ packages: resolution: {integrity: sha512-V5nVw1PAOgfI3Lmeaj2Exmeg7fenjhRUgz1lPSezy1CuhPYbgQtbQj4jZfEAEMlaL+vupsvhjqCyjzob0yxsmQ==} engines: {node: '>=10.19.0'} - https-proxy-agent@2.2.4: - resolution: {integrity: sha512-OmvfoQ53WLjtA9HeYP9RNrWMJzzAz1JGaSFr1nijg0PVR1JaD/xbJq1mdEIIlxGpXp9eSe/O2LgU9DJmTPd0Eg==} - engines: {node: '>= 4.5.0'} - https-proxy-agent@5.0.1: resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==} engines: {node: '>= 6'} @@ -5836,9 +5689,6 @@ packages: engines: {node: '>=0.10.0'} hasBin: true - immediate@3.0.6: - resolution: {integrity: sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==} - immutable@3.8.2: resolution: {integrity: sha512-15gZoQ38eYjEjxkorfbcgBKBL6R7T459OuK+CpcWt7O3KF4uPCx2tD0uFETlUDIyo+1789crbMhTvQBSR5yBMg==} engines: {node: '>=0.10.0'} @@ -5861,9 +5711,6 @@ packages: inherits@2.0.4: resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} - ini@1.3.8: - resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} - ini@6.0.0: resolution: {integrity: sha512-IBTdIkzZNOpqm7q3dRqJvMaldXjDHWkEDfrwGEQTs5eaQMWV+djAhR+wahyNNMAa+qpbDUhBMVt4ZKNwpPm7xQ==} engines: {node: ^20.17.0 || >=22.9.0} @@ -6008,18 +5855,6 @@ packages: resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} engines: {node: '>=0.12.0'} - is-path-cwd@1.0.0: - resolution: {integrity: sha512-cnS56eR9SPAscL77ik76ATVqoPARTqPIVkMDVxRaWH06zT+6+CzIroYRJ0VVvm0Z1zfAvxvz9i/D3Ppjaqt5Nw==} - engines: {node: '>=0.10.0'} - - is-path-in-cwd@1.0.1: - resolution: {integrity: sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ==} - engines: {node: '>=0.10.0'} - - is-path-inside@1.0.1: - resolution: {integrity: sha512-qhsCR/Esx4U4hg/9I19OVUAJkGWtjRYHMRgUMZE2TDdj+Ag+kttZanLupfddNyglzz50cUlmWzUaI37GDfNx/g==} - engines: {node: '>=0.10.0'} - is-plain-obj@3.0.0: resolution: {integrity: sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==} engines: {node: '>=10'} @@ -6168,9 +6003,6 @@ packages: engines: {node: '>=10'} hasBin: true - jasmine-core@2.8.0: - resolution: {integrity: sha512-SNkOkS+/jMZvLhuSx1fjhcNWUC/KG6oVyFUGkSBEr9n1axSNduWU8GlI7suaHXr4yxjet6KjrUZxUTE5WzzWwQ==} - jasmine-core@4.6.1: resolution: {integrity: sha512-VYz/BjjmC3klLJlLwA4Kw8ytk0zDSmbbDLNs794VnWmkcCB7I9aAL/D48VNQtmITyPvea2C3jdUMfc3kAoy0PQ==} @@ -6183,18 +6015,10 @@ packages: jasmine-spec-reporter@7.0.0: resolution: {integrity: sha512-OtC7JRasiTcjsaCBPtMO0Tl8glCejM4J4/dNuOJdA8lBjz4PmWjYQ6pzb0uzpBNAWJMDudYuj9OdXJWqM2QTJg==} - jasmine@2.8.0: - resolution: {integrity: sha512-KbdGQTf5jbZgltoHs31XGiChAPumMSY64OZMWLNYnEnMfG5uwGBhffePwuskexjT+/Jea/gU3qAU8344hNohSw==} - hasBin: true - jasmine@6.1.0: resolution: {integrity: sha512-WPphPqEMY0uBRMjuhRHoVoxQNvJuxIMqz0yIcJ3k3oYxBedeGoH60/NXNgasxnx2FvfXrq5/r+2wssJ7WE8ABw==} hasBin: true - jasminewd2@2.2.0: - resolution: {integrity: sha512-Rn0nZe4rfDhzA63Al3ZGh0E+JTmM6ESZYXJGKuqKGZObsAB9fwXPD03GjtIEvJBDOhN94T5MzbwZSqzFHSQPzg==} - engines: {node: '>= 6.9.x'} - jest-worker@27.5.1: resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==} engines: {node: '>= 10.13.0'} @@ -6293,17 +6117,10 @@ packages: resolution: {integrity: sha512-MT/xP0CrubFRNLNKvxJ2BYfy53Zkm++5bX9dtuPbqAeQpTVe0MQTFhao8+Cp//EmJp244xt6Drw/GVEGCUj40g==} engines: {node: '>=12', npm: '>=6'} - jsprim@1.4.2: - resolution: {integrity: sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==} - engines: {node: '>=0.6.0'} - jsprim@2.0.2: resolution: {integrity: sha512-gqXddjPqQ6G40VdnI6T6yObEC+pDNvyP95wdQhkWkg7crHH3km5qP1FsOXEkzEQwnz6gz5qGTn1c2Y52wP3OyQ==} engines: {'0': node >=0.6.0} - jszip@3.10.1: - resolution: {integrity: sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==} - jwa@2.0.1: resolution: {integrity: sha512-hRF04fqJIP8Abbkq5NKGN0Bbr3JxlQ+qhZufXVr0DvujKy93ZCbXZMHDL4EOtodSbCWxOqR8MS1tXA5hwqCXDg==} @@ -6378,9 +6195,6 @@ packages: webpack: optional: true - lie@3.3.0: - resolution: {integrity: sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==} - limiter@1.1.5: resolution: {integrity: sha512-FWWMIEOxz3GwUI4Ts/IvgVy6LPvoMPgjMdQ185nN6psJyBJ4yOpzqm695/h5umdLJg2vW3GR5iG11MAkR2AzJA==} @@ -6407,10 +6221,6 @@ packages: resolution: {integrity: sha512-FMJTLMXfCLMLfJxcX9PFqX5qD88Z5MRGaZCVzfuqeZSPsyiBzs+pahDQjbIWz2QIzPZz0NX9Zy4FX3lmK6YHIg==} engines: {node: '>= 12.13.0'} - locate-path@5.0.0: - resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} - engines: {node: '>=8'} - locate-path@6.0.0: resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} engines: {node: '>=10'} @@ -6508,9 +6318,6 @@ packages: resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==} engines: {node: '>=10'} - make-error@1.3.6: - resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} - make-fetch-happen@15.0.3: resolution: {integrity: sha512-iyyEpDty1mwW3dGlYXAJqC/azFn5PPvgKVwXayOGBSmKLxhKZ9fg4qIan2ePpp1vJIwfFiO34LAPZgq9SZW9Aw==} engines: {node: ^20.17.0 || >=22.9.0} @@ -6858,9 +6665,6 @@ packages: nth-check@2.1.1: resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==} - oauth-sign@0.9.0: - resolution: {integrity: sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==} - object-assign@4.1.1: resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} engines: {node: '>=0.10.0'} @@ -6945,10 +6749,6 @@ packages: ordered-binary@1.6.1: resolution: {integrity: sha512-QkCdPooczexPLiXIrbVOPYkR3VO3T6v2OyKRkR1Xbhpy7/LAVXwahnRCgRp78Oe/Ehf0C/HATAxfSr6eA1oX+w==} - os-tmpdir@1.0.2: - resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==} - engines: {node: '>=0.10.0'} - outvariant@1.4.3: resolution: {integrity: sha512-+Sl2UErvtsoajRDKCE5/dBz4DIvHXQQnAxtQTF04OJxY0+DyZXSo5P5Bb7XYWOh81syohlYL24hbDwxedPUJCA==} @@ -6964,18 +6764,10 @@ packages: resolution: {integrity: sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==} engines: {node: '>=4'} - p-limit@2.3.0: - resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} - engines: {node: '>=6'} - p-limit@3.1.0: resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} engines: {node: '>=10'} - p-locate@4.1.0: - resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} - engines: {node: '>=8'} - p-locate@5.0.0: resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} engines: {node: '>=10'} @@ -7000,10 +6792,6 @@ packages: resolution: {integrity: sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==} engines: {node: '>=8'} - p-try@2.2.0: - resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} - engines: {node: '>=6'} - package-json-from-dist@1.0.1: resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} @@ -7051,9 +6839,6 @@ packages: resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} engines: {node: '>=0.10.0'} - path-is-inside@1.0.2: - resolution: {integrity: sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w==} - path-key@3.1.1: resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} engines: {node: '>=8'} @@ -7101,10 +6886,6 @@ packages: resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==} engines: {node: '>=12'} - pify@2.3.0: - resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} - engines: {node: '>=0.10.0'} - pify@3.0.0: resolution: {integrity: sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==} engines: {node: '>=4'} @@ -7113,14 +6894,6 @@ packages: resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==} engines: {node: '>=6'} - pinkie-promise@2.0.1: - resolution: {integrity: sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==} - engines: {node: '>=0.10.0'} - - pinkie@2.0.4: - resolution: {integrity: sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==} - engines: {node: '>=0.10.0'} - pino-abstract-transport@1.2.0: resolution: {integrity: sha512-Guhh8EZfPCfH+PMXAb6rKOjGQEoy0xlAIn+irODG5kgfYV+BQ0rGYYWTIel3P5mmyXqkYkPmdIkywsn6QKUR1Q==} @@ -7269,12 +7042,6 @@ packages: resolution: {integrity: sha512-CvexbZtbov6jW2eXAvLukXjXUW1TzFaivC46BpWc/3BpcCysb5Vffu+B3XHMm8lVEuy2Mm4XGex8hBSg1yapPg==} engines: {node: '>=12.0.0'} - protractor@7.0.0: - resolution: {integrity: sha512-UqkFjivi4GcvUQYzqGYNe0mLzfn5jiLmO8w9nMhQoJRLhy2grJonpga2IWhI6yJO30LibWXJJtA4MOIZD2GgZw==} - engines: {node: '>=10.13.x'} - deprecated: We have news to share - Protractor is deprecated and will reach end-of-life by Summer 2023. To learn more and find out about other options please refer to this post on the Angular blog. Thank you for using and contributing to Protractor. https://goo.gle/state-of-e2e-in-angular - hasBin: true - proxy-addr@2.0.7: resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} engines: {node: '>= 0.10'} @@ -7285,9 +7052,6 @@ packages: prr@1.0.1: resolution: {integrity: sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==} - psl@1.15.0: - resolution: {integrity: sha512-JZd3gMVBAVQkSs6HdNZo9Sdo0LNcQeMNP3CozBJb3JYC/QUYZTnKxP+f8oWRX4rHP5EurWxqAHTSwUCjlNKa1w==} - pump@2.0.1: resolution: {integrity: sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==} @@ -7320,14 +7084,6 @@ packages: resolution: {integrity: sha512-KTqnxsgGiQ6ZAzZCVlJH5eOjSnvlyEgx1m8bkRJfOhmGRqfo5KLvmAlACQkrjEtOQ4B7wF9TdSLIs9O90MX9xA==} engines: {node: '>=16.0.0'} - q@1.4.1: - resolution: {integrity: sha512-/CdEdaw49VZVmyIDGUQKDDT53c7qBkO6g5CefWz91Ae+l4+cRtcDYwMTXh6me4O8TMldeGHG3N2Bl84V78Ywbg==} - engines: {node: '>=0.6.0', teleport: '>=0.2.0'} - deprecated: |- - You or someone you depend on is using Q, the JavaScript Promise library that gave JavaScript developers strong feelings about promises. They can almost certainly migrate to the native JavaScript promise now. Thank you literally everyone for joining me in this bet against the odds. Be excellent to each other. - - (For a CapTP with native promises, see @endo/eventual-send and @endo/captp) - qjobs@1.2.0: resolution: {integrity: sha512-8YOJEHtxpySA3fFDyCRxA+UUV+fA+rTWnuWvylOK/NCjhY+b4ocCtmu8TtsWb+mYeU+GCHf/S66KZF/AsteKHg==} engines: {node: '>=0.9'} @@ -7340,10 +7096,6 @@ packages: resolution: {integrity: sha512-mAZTtNCeetKMH+pSjrb76NAM8V9a05I9aBZOHztWy/UqcJdQYNsf59vrRKWnojAT9Y+GbIvoTBC++CPHqpDBhQ==} engines: {node: '>=0.6'} - qs@6.5.5: - resolution: {integrity: sha512-mzR4sElr1bfCaPJe7m8ilJ6ZXdDaGoObcYR0ZHSsktM/Lt21MVHj5De30GQH2eiZ1qGRTO7LCAzQsUeXTNexWQ==} - engines: {node: '>=0.6'} - queue-microtask@1.2.3: resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} @@ -7435,11 +7187,6 @@ packages: resolution: {integrity: sha512-NZQZdC5wOE/H3UT28fVGL+ikOZcEzfMGk/c3iN9UGxzWHMa1op7274oyiUVrAG4B2EuFhus8SvkaYnhvW92p9Q==} hasBin: true - request@2.88.2: - resolution: {integrity: sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==} - engines: {node: '>= 6'} - deprecated: request has been deprecated, see https://github.com/request/request/issues/3142 - require-directory@2.1.1: resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} engines: {node: '>=0.10.0'} @@ -7448,9 +7195,6 @@ packages: resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} engines: {node: '>=0.10.0'} - require-main-filename@2.0.0: - resolution: {integrity: sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==} - requires-port@1.0.0: resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==} @@ -7503,11 +7247,6 @@ packages: rfdc@1.4.1: resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==} - rimraf@2.7.1: - resolution: {integrity: sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==} - deprecated: Rimraf versions prior to v4 are no longer supported - hasBin: true - rimraf@3.0.2: resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} deprecated: Rimraf versions prior to v4 are no longer supported @@ -7621,9 +7360,6 @@ packages: engines: {node: '>=14.0.0'} hasBin: true - saucelabs@1.5.0: - resolution: {integrity: sha512-jlX3FGdWvYf4Q3LFfFWS1QvPg3IGCGWxIc8QBFdPTbpTJnt/v17FHXYVAn7C8sHf1yUXo2c7yIM0isDryfYtHQ==} - sax@1.4.4: resolution: {integrity: sha512-1n3r/tGXO6b6VXMdFT54SHzT9ytu9yr7TaELowdYpMqY/Ao7EnlQGmAQ1+RatX7Tkkdm6hONI2owqNx2aZj5Sw==} engines: {node: '>=11.0.0'} @@ -7639,10 +7375,6 @@ packages: select-hose@2.0.0: resolution: {integrity: sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==} - selenium-webdriver@3.6.0: - resolution: {integrity: sha512-WH7Aldse+2P5bbFBO4Gle/nuQOdVwpHMTL6raL3uuBj/vPG07k6uzt3aiahu352ONBr5xXh0hDlM3LhtXPOC4Q==} - engines: {node: '>= 6.9.0'} - selfsigned@5.5.0: resolution: {integrity: sha512-ftnu3TW4+3eBfLRFnDEkzGxSF/10BJBkaLJuBHZX0kiPS7bRdlpZGu6YGt4KngMkdTwJE6MbjavFpqHvqVt+Ew==} engines: {node: '>=18'} @@ -7696,9 +7428,6 @@ packages: server-destroy@1.0.1: resolution: {integrity: sha512-rb+9B5YBIEzYcD6x2VKidaa+cqYBJQKnU4oe4E3ANwRRN56yk/ua1YCJT1n21NTS8w6CcOclAKNP3PhdCXKYtQ==} - set-blocking@2.0.0: - resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==} - set-function-length@1.2.2: resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} engines: {node: '>= 0.4'} @@ -7711,9 +7440,6 @@ packages: resolution: {integrity: sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==} engines: {node: '>= 0.4'} - setimmediate@1.0.5: - resolution: {integrity: sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==} - setprototypeof@1.2.0: resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} @@ -7813,16 +7539,9 @@ packages: peerDependencies: webpack: ^5.72.1 - source-map-support@0.4.18: - resolution: {integrity: sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==} - source-map-support@0.5.21: resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} - source-map@0.5.7: - resolution: {integrity: sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==} - engines: {node: '>=0.10.0'} - source-map@0.6.1: resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} engines: {node: '>=0.10.0'} @@ -7971,10 +7690,6 @@ packages: string_decoder@1.3.0: resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} - strip-ansi@3.0.1: - resolution: {integrity: sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==} - engines: {node: '>=0.10.0'} - strip-ansi@6.0.1: resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} engines: {node: '>=8'} @@ -7998,10 +7713,6 @@ packages: resolution: {integrity: sha512-SS+jx45GF1QjgEXQx4NJZV9ImqmO2NPz5FNsIHrsDjh2YsHnawpan7SNQ1o8NuhrbHZy9AZhIoCUiCeaW/C80g==} engines: {node: '>=18'} - supports-color@2.0.0: - resolution: {integrity: sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==} - engines: {node: '>=0.8.0'} - supports-color@7.2.0: resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} engines: {node: '>=8'} @@ -8116,10 +7827,6 @@ packages: resolution: {integrity: sha512-ASdhgQIBSay0R/eXggAkQ53G4nTJqTXqC2kbaBbdDwM7SkjyZyO0OaaN1/FH7U/yCeqOHDwFO5j8+Os/IS1dXw==} hasBin: true - tmp@0.0.30: - resolution: {integrity: sha512-HXdTB7lvMwcb55XFfrTM8CPr/IYREk4hVBFaQ4b/6nInrluSL86hfHm7vu0luYKCfyBZp2trCjpc8caC3vVM3w==} - engines: {node: '>=0.4.0'} - tmp@0.2.5: resolution: {integrity: sha512-voyz6MApa1rQGUxT3E+BK7/ROe8itEx7vD8/HEvt4xwXucvQ5G5oeEiHkmHZJuBO21RpOf+YYm9MOivj709jow==} engines: {node: '>=14.14'} @@ -8136,10 +7843,6 @@ packages: resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} engines: {node: '>=0.6'} - tough-cookie@2.5.0: - resolution: {integrity: sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==} - engines: {node: '>=0.8'} - tough-cookie@5.1.2: resolution: {integrity: sha512-FVDYdxtnj0G6Qm/DhNPSb8Ju59ULcup3tuJxkFb5K8Bv2pUXILbf0xZWU8PX8Ov19OXljbUyveOFwRMwkXzO+A==} engines: {node: '>=16'} @@ -8171,20 +7874,6 @@ packages: peerDependencies: typescript: '>=4.8.4' - ts-node@10.9.2: - resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==} - hasBin: true - peerDependencies: - '@swc/core': '>=1.2.50' - '@swc/wasm': '>=1.2.50' - '@types/node': '*' - typescript: '>=2.7' - peerDependenciesMeta: - '@swc/core': - optional: true - '@swc/wasm': - optional: true - tsconfig-paths@3.15.0: resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==} @@ -8363,18 +8052,10 @@ packages: resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==} engines: {node: '>= 0.4.0'} - uuid@3.4.0: - resolution: {integrity: sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==} - deprecated: Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details. - hasBin: true - uuid@8.3.2: resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} hasBin: true - v8-compile-cache-lib@3.0.1: - resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} - validate-npm-package-license@3.0.4: resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} @@ -8510,15 +8191,6 @@ packages: web-vitals@4.2.4: resolution: {integrity: sha512-r4DIlprAGwJ7YM11VZp4R884m0Vmgr6EAKe3P+kO0PPj3Unqyvv59rczf6UiGcb9Z8QxZVcqKNwv/g0WNdWwsw==} - webdriver-js-extender@2.1.0: - resolution: {integrity: sha512-lcUKrjbBfCK6MNsh7xaY2UAUmZwe+/ib03AjVOpFobX4O7+83BUveSrLfU0Qsyb1DaKJdQRbuU+kM9aZ6QUhiQ==} - engines: {node: '>=6.9.x'} - - webdriver-manager@12.1.9: - resolution: {integrity: sha512-Yl113uKm8z4m/KMUVWHq1Sjtla2uxEBtx2Ue3AmIlnlPAKloDn/Lvmy6pqWCUersVISpdMeVpAaGbNnvMuT2LQ==} - engines: {node: '>=6.9.x'} - hasBin: true - webidl-conversions@3.0.1: resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} @@ -8607,9 +8279,6 @@ packages: resolution: {integrity: sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==} engines: {node: '>= 0.4'} - which-module@2.0.1: - resolution: {integrity: sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==} - which-typed-array@1.1.20: resolution: {integrity: sha512-LYfpUkmqwl0h9A2HL09Mms427Q1RZWuOHsukfVcKRq9q95iQxdw0ix1JQrqbcDR9PH1QDwf5Qo8OZb5lksZ8Xg==} engines: {node: '>= 0.4'} @@ -8647,10 +8316,6 @@ packages: resolution: {integrity: sha512-SGcvg80f0wUy2/fXES19feHMz8E0JoXv2uNgHOu4Dgi2OrCy1lqwFYEJz1BLbDI0exjPMe/ZdzZ/YpGECBG/aQ==} engines: {node: '>=20'} - wrap-ansi@6.2.0: - resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} - engines: {node: '>=8'} - wrap-ansi@7.0.0: resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} engines: {node: '>=10'} @@ -8718,14 +8383,6 @@ packages: resolution: {integrity: sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==} engines: {node: '>=18'} - xml2js@0.4.23: - resolution: {integrity: sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug==} - engines: {node: '>=4.0.0'} - - xmlbuilder@11.0.1: - resolution: {integrity: sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==} - engines: {node: '>=4.0'} - xmlchars@2.2.0: resolution: {integrity: sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==} @@ -8737,9 +8394,6 @@ packages: resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} engines: {node: '>=0.4'} - y18n@4.0.3: - resolution: {integrity: sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==} - y18n@5.0.8: resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} engines: {node: '>=10'} @@ -8759,10 +8413,6 @@ packages: engines: {node: '>= 14.6'} hasBin: true - yargs-parser@18.1.3: - resolution: {integrity: sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==} - engines: {node: '>=6'} - yargs-parser@20.2.9: resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==} engines: {node: '>=10'} @@ -8775,10 +8425,6 @@ packages: resolution: {integrity: sha512-rwu/ClNdSMpkSrUb+d6BRsSkLUq1fmfsY6TOpYzTwvwkg1/NRG85KBy3kq++A8LKQwX6lsu+aWad+2khvuXrqw==} engines: {node: ^20.19.0 || ^22.12.0 || >=23} - yargs@15.4.1: - resolution: {integrity: sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==} - engines: {node: '>=8'} - yargs@16.2.0: resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==} engines: {node: '>=10'} @@ -8794,10 +8440,6 @@ packages: yauzl@2.10.0: resolution: {integrity: sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==} - yn@3.1.1: - resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==} - engines: {node: '>=6'} - yocto-queue@0.1.0: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} @@ -9805,10 +9447,6 @@ snapshots: conventional-commits-filter: 5.0.0 conventional-commits-parser: 6.2.1 - '@cspotcode/source-map-support@0.8.1': - dependencies: - '@jridgewell/trace-mapping': 0.3.9 - '@csstools/color-helpers@6.0.1': {} '@csstools/css-calc@3.1.1(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0)': @@ -10604,11 +10242,6 @@ snapshots: '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.5.5 - '@jridgewell/trace-mapping@0.3.9': - dependencies: - '@jridgewell/resolve-uri': 3.1.2 - '@jridgewell/sourcemap-codec': 1.5.5 - '@js-sdsl/ordered-map@4.4.2': {} '@jsonjoy.com/base64@1.1.2(tslib@2.8.1)': @@ -11602,14 +11235,6 @@ snapshots: '@tootallnate/once@2.0.0': {} - '@tsconfig/node10@1.0.12': {} - - '@tsconfig/node12@1.0.11': {} - - '@tsconfig/node14@1.0.3': {} - - '@tsconfig/node16@1.0.4': {} - '@tufjs/canonical-json@2.0.0': {} '@tufjs/models@4.1.0': @@ -11836,8 +11461,6 @@ snapshots: '@types/duplexify': 3.6.5 '@types/node': 22.19.11 - '@types/q@0.0.32': {} - '@types/qs@6.14.0': {} '@types/range-parser@1.2.7': {} @@ -11852,8 +11475,6 @@ snapshots: '@types/retry@0.12.2': {} - '@types/selenium-webdriver@3.0.26': {} - '@types/semver@7.7.1': {} '@types/send@0.17.6': @@ -12338,10 +11959,6 @@ snapshots: dependencies: acorn: 8.16.0 - acorn-walk@8.3.4: - dependencies: - acorn: 8.15.0 - acorn@8.15.0: {} acorn@8.16.0: {} @@ -12351,12 +11968,6 @@ snapshots: loader-utils: 2.0.4 regex-parser: 2.3.1 - adm-zip@0.5.16: {} - - agent-base@4.3.0: - dependencies: - es6-promisify: 5.0.0 - agent-base@6.0.2(supports-color@10.2.2): dependencies: debug: 4.4.3(supports-color@10.2.2) @@ -12424,14 +12035,10 @@ snapshots: ansi-html-community@0.0.8: {} - ansi-regex@2.1.1: {} - ansi-regex@5.0.1: {} ansi-regex@6.2.2: {} - ansi-styles@2.2.1: {} - ansi-styles@4.3.0: dependencies: color-convert: 2.0.1 @@ -12445,8 +12052,6 @@ snapshots: apache-md5@1.1.8: {} - arg@4.1.3: {} - argparse@2.0.1: {} array-buffer-byte-length@1.0.2: @@ -12469,14 +12074,8 @@ snapshots: is-string: 1.1.1 math-intrinsics: 1.1.0 - array-union@1.0.2: - dependencies: - array-uniq: 1.0.3 - array-union@3.0.1: {} - array-uniq@1.0.3: {} - array.prototype.findlastindex@1.2.6: dependencies: call-bind: 1.0.8 @@ -12511,8 +12110,6 @@ snapshots: get-intrinsic: 1.3.0 is-array-buffer: 3.0.5 - arrify@1.0.1: {} - arrify@2.0.1: {} asn1@0.2.6: @@ -12660,10 +12257,6 @@ snapshots: inherits: 2.0.4 readable-stream: 3.6.2 - blocking-proxy@1.0.1: - dependencies: - minimist: 1.2.8 - body-parser@1.20.4: dependencies: bytes: 3.1.2 @@ -12789,12 +12382,6 @@ snapshots: node-releases: 2.0.27 update-browserslist-db: 1.2.3(browserslist@4.28.1) - browserstack@1.6.1: - dependencies: - https-proxy-agent: 2.2.4 - transitivePeerDependencies: - - supports-color - bs-recipes@1.3.4: {} buffer-crc32@0.2.13: {} @@ -12870,22 +12457,12 @@ snapshots: callsites@3.1.0: {} - camelcase@5.3.1: {} - caniuse-lite@1.0.30001770: {} caseless@0.12.0: {} chai@6.2.2: {} - chalk@1.1.3: - dependencies: - ansi-styles: 2.2.1 - escape-string-regexp: 1.0.5 - has-ansi: 2.0.0 - strip-ansi: 3.0.1 - supports-color: 2.0.0 - chalk@4.1.2: dependencies: ansi-styles: 4.3.0 @@ -12950,12 +12527,6 @@ snapshots: dependencies: typanion: 3.14.0 - cliui@6.0.0: - dependencies: - string-width: 4.2.3 - strip-ansi: 6.0.1 - wrap-ansi: 6.2.0 - cliui@7.0.4: dependencies: string-width: 4.2.3 @@ -13109,8 +12680,6 @@ snapshots: optionalDependencies: typescript: 5.9.3 - create-require@1.1.1: {} - cross-fetch@3.1.5(encoding@0.1.13): dependencies: node-fetch: 2.6.7(encoding@0.1.13) @@ -13231,8 +12800,6 @@ snapshots: optionalDependencies: supports-color: 10.2.2 - decamelize@1.2.0: {} - decimal.js@10.6.0: {} decompress-response@6.0.0: @@ -13268,16 +12835,6 @@ snapshots: defu@6.1.4: {} - del@2.2.2: - dependencies: - globby: 5.0.0 - is-path-cwd: 1.0.0 - is-path-in-cwd: 1.0.1 - object-assign: 4.1.1 - pify: 2.3.0 - pinkie-promise: 2.0.1 - rimraf: 2.7.1 - delayed-stream@1.0.0: {} depd@1.1.2: {} @@ -13299,8 +12856,6 @@ snapshots: di@0.0.1: {} - diff@4.0.4: {} - dns-packet@5.6.1: dependencies: '@leichtgewicht/ip-codec': 2.0.5 @@ -13552,12 +13107,6 @@ snapshots: is-date-object: 1.1.0 is-symbol: 1.1.1 - es6-promise@4.2.8: {} - - es6-promisify@5.0.0: - dependencies: - es6-promise: 4.2.8 - esbuild-wasm@0.27.3: {} esbuild@0.27.3: @@ -13593,8 +13142,6 @@ snapshots: escape-html@1.0.3: {} - escape-string-regexp@1.0.5: {} - escape-string-regexp@4.0.0: {} eslint-config-prettier@10.1.8(eslint@10.0.2(jiti@2.6.1)): @@ -13759,8 +13306,6 @@ snapshots: dependencies: eventsource-parser: 3.0.6 - exit@0.1.2: {} - expect-type@1.3.0: {} exponential-backoff@3.1.3: {} @@ -13972,11 +13517,6 @@ snapshots: find-up-simple@1.0.1: {} - find-up@4.1.0: - dependencies: - locate-path: 5.0.0 - path-exists: 4.0.0 - find-up@5.0.0: dependencies: locate-path: 6.0.0 @@ -14048,12 +13588,6 @@ snapshots: form-data-encoder@1.7.2: {} - form-data@2.3.3: - dependencies: - asynckit: 0.4.0 - combined-stream: 1.0.8 - mime-types: 2.1.35 - form-data@4.0.5: dependencies: asynckit: 0.4.0 @@ -14232,15 +13766,6 @@ snapshots: define-properties: 1.2.1 gopd: 1.2.0 - globby@5.0.0: - dependencies: - array-union: 1.0.2 - arrify: 1.0.1 - glob: 7.2.3 - object-assign: 4.1.1 - pify: 2.3.0 - pinkie-promise: 2.0.1 - google-auth-library@10.5.0(supports-color@10.2.2): dependencies: base64-js: 1.5.1 @@ -14329,17 +13854,6 @@ snapshots: optionalDependencies: uglify-js: 3.19.3 - har-schema@2.0.0: {} - - har-validator@5.1.5: - dependencies: - ajv: 6.14.0 - har-schema: 2.0.0 - - has-ansi@2.0.0: - dependencies: - ansi-regex: 2.1.1 - has-bigints@1.1.0: {} has-flag@4.0.0: {} @@ -14468,12 +13982,6 @@ snapshots: transitivePeerDependencies: - debug - http-signature@1.2.0: - dependencies: - assert-plus: 1.0.0 - jsprim: 1.4.2 - sshpk: 1.18.0 - http-signature@1.4.0: dependencies: assert-plus: 1.0.0 @@ -14487,13 +13995,6 @@ snapshots: quick-lru: 5.1.1 resolve-alpn: 1.2.1 - https-proxy-agent@2.2.4: - dependencies: - agent-base: 4.3.0 - debug: 3.2.7 - transitivePeerDependencies: - - supports-color - https-proxy-agent@5.0.1(supports-color@10.2.2): dependencies: agent-base: 6.0.2(supports-color@10.2.2) @@ -14543,8 +14044,6 @@ snapshots: image-size@0.5.5: optional: true - immediate@3.0.6: {} - immutable@3.8.2: {} immutable@5.1.4: {} @@ -14563,8 +14062,6 @@ snapshots: inherits@2.0.4: {} - ini@1.3.8: {} - ini@6.0.0: {} injection-js@2.6.1: @@ -14690,16 +14187,6 @@ snapshots: is-number@7.0.0: {} - is-path-cwd@1.0.0: {} - - is-path-in-cwd@1.0.1: - dependencies: - is-path-inside: 1.0.1 - - is-path-inside@1.0.1: - dependencies: - path-is-inside: 1.0.2 - is-plain-obj@3.0.0: {} is-plain-object@2.0.4: @@ -14846,8 +14333,6 @@ snapshots: filelist: 1.0.4 picocolors: 1.1.1 - jasmine-core@2.8.0: {} - jasmine-core@4.6.1: {} jasmine-core@6.1.0: {} @@ -14861,20 +14346,12 @@ snapshots: dependencies: colors: 1.4.0 - jasmine@2.8.0: - dependencies: - exit: 0.1.2 - glob: 7.2.3 - jasmine-core: 2.8.0 - jasmine@6.1.0: dependencies: '@jasminejs/reporters': 1.0.0 glob: 13.0.3 jasmine-core: 6.1.0 - jasminewd2@2.2.0: {} - jest-worker@27.5.1: dependencies: '@types/node': 22.19.11 @@ -14979,13 +14456,6 @@ snapshots: ms: 2.1.3 semver: 7.7.4 - jsprim@1.4.2: - dependencies: - assert-plus: 1.0.0 - extsprintf: 1.3.0 - json-schema: 0.4.0 - verror: 1.10.0 - jsprim@2.0.2: dependencies: assert-plus: 1.0.0 @@ -14993,13 +14463,6 @@ snapshots: json-schema: 0.4.0 verror: 1.10.0 - jszip@3.10.1: - dependencies: - lie: 3.3.0 - pako: 1.0.11 - readable-stream: 2.3.8 - setimmediate: 1.0.5 - jwa@2.0.1: dependencies: buffer-equal-constant-time: 1.0.1 @@ -15115,10 +14578,6 @@ snapshots: optionalDependencies: webpack: 5.105.2(esbuild@0.27.3) - lie@3.3.0: - dependencies: - immediate: 3.0.6 - limiter@1.1.5: {} lines-and-columns@1.2.4: {} @@ -15160,10 +14619,6 @@ snapshots: loader-utils@3.3.1: {} - locate-path@5.0.0: - dependencies: - p-locate: 4.1.0 - locate-path@6.0.0: dependencies: p-locate: 5.0.0 @@ -15263,8 +14718,6 @@ snapshots: dependencies: semver: 7.7.4 - make-error@1.3.6: {} - make-fetch-happen@15.0.3: dependencies: '@npmcli/agent': 4.0.0 @@ -15622,8 +15075,6 @@ snapshots: dependencies: boolbase: 1.0.0 - oauth-sign@0.9.0: {} - object-assign@4.1.1: {} object-hash@3.0.0: {} @@ -15728,8 +15179,6 @@ snapshots: ordered-binary@1.6.1: optional: true - os-tmpdir@1.0.2: {} - outvariant@1.4.3: {} own-keys@1.0.1: @@ -15742,18 +15191,10 @@ snapshots: p-finally@1.0.0: {} - p-limit@2.3.0: - dependencies: - p-try: 2.2.0 - p-limit@3.1.0: dependencies: yocto-queue: 0.1.0 - p-locate@4.1.0: - dependencies: - p-limit: 2.3.0 - p-locate@5.0.0: dependencies: p-limit: 3.1.0 @@ -15780,8 +15221,6 @@ snapshots: dependencies: p-finally: 1.0.0 - p-try@2.2.0: {} - package-json-from-dist@1.0.1: {} pacote@21.4.0: @@ -15843,8 +15282,6 @@ snapshots: path-is-absolute@1.0.1: {} - path-is-inside@1.0.2: {} - path-key@3.1.1: {} path-parse@1.0.7: {} @@ -15883,19 +15320,11 @@ snapshots: picomatch@4.0.3: {} - pify@2.3.0: {} - pify@3.0.0: {} pify@4.0.1: optional: true - pinkie-promise@2.0.1: - dependencies: - pinkie: 2.0.4 - - pinkie@2.0.4: {} - pino-abstract-transport@1.2.0: dependencies: readable-stream: 4.7.0 @@ -16044,26 +15473,6 @@ snapshots: '@types/node': 22.19.11 long: 5.3.2 - protractor@7.0.0: - dependencies: - '@types/q': 0.0.32 - '@types/selenium-webdriver': 3.0.26 - blocking-proxy: 1.0.1 - browserstack: 1.6.1 - chalk: 1.1.3 - glob: 7.2.3 - jasmine: 2.8.0 - jasminewd2: 2.2.0 - q: 1.4.1 - saucelabs: 1.5.0 - selenium-webdriver: 3.6.0 - source-map-support: 0.4.18 - webdriver-js-extender: 2.1.0 - webdriver-manager: 12.1.9 - yargs: 15.4.1 - transitivePeerDependencies: - - supports-color - proxy-addr@2.0.7: dependencies: forwarded: 0.2.0 @@ -16074,10 +15483,6 @@ snapshots: prr@1.0.1: optional: true - psl@1.15.0: - dependencies: - punycode: 2.3.1 - pump@2.0.1: dependencies: end-of-stream: 1.4.5 @@ -16134,8 +15539,6 @@ snapshots: pvutils@1.1.5: {} - q@1.4.1: {} - qjobs@1.2.0: {} qs@6.14.2: @@ -16146,8 +15549,6 @@ snapshots: dependencies: side-channel: 1.1.0 - qs@6.5.5: {} - queue-microtask@1.2.3: {} quick-format-unescaped@4.0.4: {} @@ -16280,35 +15681,10 @@ snapshots: dependencies: jsesc: 3.1.0 - request@2.88.2: - dependencies: - aws-sign2: 0.7.0 - aws4: 1.13.2 - caseless: 0.12.0 - combined-stream: 1.0.8 - extend: 3.0.2 - forever-agent: 0.6.1 - form-data: 2.3.3 - har-validator: 5.1.5 - http-signature: 1.2.0 - is-typedarray: 1.0.0 - isstream: 0.1.2 - json-stringify-safe: 5.0.1 - mime-types: 2.1.35 - oauth-sign: 0.9.0 - performance-now: 2.1.0 - qs: 6.5.5 - safe-buffer: 5.2.1 - tough-cookie: 2.5.0 - tunnel-agent: 0.6.0 - uuid: 3.4.0 - require-directory@2.1.1: {} require-from-string@2.0.2: {} - require-main-filename@2.0.0: {} - requires-port@1.0.0: {} resolve-alpn@1.2.1: {} @@ -16362,10 +15738,6 @@ snapshots: rfdc@1.4.1: {} - rimraf@2.7.1: - dependencies: - glob: 7.2.3 - rimraf@3.0.2: dependencies: glob: 7.2.3 @@ -16541,13 +15913,8 @@ snapshots: optionalDependencies: '@parcel/watcher': 2.5.6 - saucelabs@1.5.0: - dependencies: - https-proxy-agent: 2.2.4 - transitivePeerDependencies: - - supports-color - - sax@1.4.4: {} + sax@1.4.4: + optional: true saxes@6.0.0: dependencies: @@ -16562,19 +15929,13 @@ snapshots: select-hose@2.0.0: {} - selenium-webdriver@3.6.0: - dependencies: - jszip: 3.10.1 - rimraf: 2.7.1 - tmp: 0.0.30 - xml2js: 0.4.23 - selfsigned@5.5.0: dependencies: '@peculiar/x509': 1.14.3 pkijs: 3.3.3 - semver@5.7.2: {} + semver@5.7.2: + optional: true semver@6.3.1: {} @@ -16654,8 +16015,6 @@ snapshots: server-destroy@1.0.1: {} - set-blocking@2.0.0: {} - set-function-length@1.2.2: dependencies: define-data-property: 1.1.4 @@ -16678,8 +16037,6 @@ snapshots: es-errors: 1.3.0 es-object-atoms: 1.1.1 - setimmediate@1.0.5: {} - setprototypeof@1.2.0: {} shallow-clone@3.0.1: @@ -16822,17 +16179,11 @@ snapshots: source-map-js: 1.2.1 webpack: 5.105.2(esbuild@0.27.3) - source-map-support@0.4.18: - dependencies: - source-map: 0.5.7 - source-map-support@0.5.21: dependencies: buffer-from: 1.1.2 source-map: 0.6.1 - source-map@0.5.7: {} - source-map@0.6.1: {} source-map@0.7.6: {} @@ -17021,10 +16372,6 @@ snapshots: dependencies: safe-buffer: 5.2.1 - strip-ansi@3.0.1: - dependencies: - ansi-regex: 2.1.1 - strip-ansi@6.0.1: dependencies: ansi-regex: 5.0.1 @@ -17041,8 +16388,6 @@ snapshots: supports-color@10.2.2: {} - supports-color@2.0.0: {} - supports-color@7.2.0: dependencies: has-flag: 4.0.0 @@ -17168,10 +16513,6 @@ snapshots: dependencies: tldts-core: 7.0.23 - tmp@0.0.30: - dependencies: - os-tmpdir: 1.0.2 - tmp@0.2.5: {} to-regex-range@5.0.1: @@ -17182,11 +16523,6 @@ snapshots: toidentifier@1.0.1: {} - tough-cookie@2.5.0: - dependencies: - psl: 1.15.0 - punycode: 2.3.1 - tough-cookie@5.1.2: dependencies: tldts: 6.1.86 @@ -17211,24 +16547,6 @@ snapshots: dependencies: typescript: 5.9.3 - ts-node@10.9.2(@types/node@22.19.11)(typescript@5.9.3): - dependencies: - '@cspotcode/source-map-support': 0.8.1 - '@tsconfig/node10': 1.0.12 - '@tsconfig/node12': 1.0.11 - '@tsconfig/node14': 1.0.3 - '@tsconfig/node16': 1.0.4 - '@types/node': 22.19.11 - acorn: 8.15.0 - acorn-walk: 8.3.4 - arg: 4.1.3 - create-require: 1.1.1 - diff: 4.0.4 - make-error: 1.3.6 - typescript: 5.9.3 - v8-compile-cache-lib: 3.0.1 - yn: 3.1.1 - tsconfig-paths@3.15.0: dependencies: '@types/json5': 0.0.29 @@ -17415,12 +16733,8 @@ snapshots: utils-merge@1.0.1: {} - uuid@3.4.0: {} - uuid@8.3.2: {} - v8-compile-cache-lib@3.0.1: {} - validate-npm-package-license@3.0.4: dependencies: spdx-correct: 3.2.0 @@ -17585,25 +16899,6 @@ snapshots: web-vitals@4.2.4: {} - webdriver-js-extender@2.1.0: - dependencies: - '@types/selenium-webdriver': 3.0.26 - selenium-webdriver: 3.6.0 - - webdriver-manager@12.1.9: - dependencies: - adm-zip: 0.5.16 - chalk: 1.1.3 - del: 2.2.2 - glob: 7.2.3 - ini: 1.3.8 - minimist: 1.2.8 - q: 1.4.1 - request: 2.88.2 - rimraf: 2.7.1 - semver: 5.7.2 - xml2js: 0.4.23 - webidl-conversions@3.0.1: {} webidl-conversions@8.0.1: {} @@ -17759,8 +17054,6 @@ snapshots: is-weakmap: 2.0.2 is-weakset: 2.0.4 - which-module@2.0.1: {} - which-typed-array@1.1.20: dependencies: available-typed-arrays: 1.0.7 @@ -17800,12 +17093,6 @@ snapshots: string-width: 8.2.0 strip-ansi: 7.1.2 - wrap-ansi@6.2.0: - dependencies: - ansi-styles: 4.3.0 - string-width: 4.2.3 - strip-ansi: 6.0.1 - wrap-ansi@7.0.0: dependencies: ansi-styles: 4.3.0 @@ -17853,21 +17140,12 @@ snapshots: xml-name-validator@5.0.0: {} - xml2js@0.4.23: - dependencies: - sax: 1.4.4 - xmlbuilder: 11.0.1 - - xmlbuilder@11.0.1: {} - xmlchars@2.2.0: {} xmlhttprequest-ssl@2.1.2: {} xtend@4.0.2: {} - y18n@4.0.3: {} - y18n@5.0.8: {} yallist@3.1.1: {} @@ -17878,31 +17156,12 @@ snapshots: yaml@2.8.2: {} - yargs-parser@18.1.3: - dependencies: - camelcase: 5.3.1 - decamelize: 1.2.0 - yargs-parser@20.2.9: {} yargs-parser@21.1.1: {} yargs-parser@22.0.0: {} - yargs@15.4.1: - dependencies: - cliui: 6.0.0 - decamelize: 1.2.0 - find-up: 4.1.0 - get-caller-file: 2.0.5 - require-directory: 2.1.1 - require-main-filename: 2.0.0 - set-blocking: 2.0.0 - string-width: 4.2.3 - which-module: 2.0.1 - y18n: 4.0.3 - yargs-parser: 18.1.3 - yargs@16.2.0: dependencies: cliui: 7.0.4 @@ -17937,8 +17196,6 @@ snapshots: buffer-crc32: 0.2.13 fd-slicer: 1.1.0 - yn@3.1.1: {} - yocto-queue@0.1.0: {} yoctocolors@2.1.2: {} diff --git a/tests/e2e/tests/protractor/test-fails.ts b/tests/e2e/tests/protractor/test-fails.ts deleted file mode 100644 index 5204e29338fa..000000000000 --- a/tests/e2e/tests/protractor/test-fails.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { execAndCaptureError, ng } from '../../utils/process'; -import { updateJsonFile } from '../../utils/project'; - -export default async function () { - // Setup `protractor` builder. - await updateJsonFile('angular.json', (config) => { - config.projects['test-project'].architect['e2e'] = { - builder: '@angular-devkit/build-angular:protractor', - options: { - protractorConfig: '', - }, - }; - }); - - const error = await execAndCaptureError('ng', ['e2e']); - if (!error.message.includes('Protractor has reached end-of-life')) { - throw new Error(`Protractor did not fail with an appropriate message. Got:\n${error.message}`); - } -} diff --git a/tests/e2e/utils/BUILD.bazel b/tests/e2e/utils/BUILD.bazel index 8082ab9d97c4..d4493fb14492 100644 --- a/tests/e2e/utils/BUILD.bazel +++ b/tests/e2e/utils/BUILD.bazel @@ -14,7 +14,6 @@ ts_project( "//:node_modules/@types/node", "//:node_modules/@types/semver", "//:node_modules/fast-glob", - "//:node_modules/protractor", "//:node_modules/puppeteer", "//:node_modules/semver", "//:node_modules/verdaccio", From daa8bfbd0773f5bbac209a9bf198ee8dd7d68de8 Mon Sep 17 00:00:00 2001 From: Angular Robot Date: Thu, 26 Feb 2026 18:18:05 +0000 Subject: [PATCH 053/226] build: update cross-repo angular dependencies See associated pull request for more information. --- .../assistant-to-the-branch-manager.yml | 2 +- .github/workflows/ci.yml | 52 +++++++++---------- .github/workflows/dev-infra.yml | 4 +- .github/workflows/feature-requests.yml | 2 +- .github/workflows/perf.yml | 6 +-- .github/workflows/pr.yml | 44 ++++++++-------- MODULE.bazel | 2 +- package.json | 2 +- pnpm-lock.yaml | 24 ++++++--- tests/e2e/ng-snapshot/package.json | 26 +++++----- 10 files changed, 86 insertions(+), 78 deletions(-) diff --git a/.github/workflows/assistant-to-the-branch-manager.yml b/.github/workflows/assistant-to-the-branch-manager.yml index 660fd0330ba0..fb289835030f 100644 --- a/.github/workflows/assistant-to-the-branch-manager.yml +++ b/.github/workflows/assistant-to-the-branch-manager.yml @@ -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@4b8f9c22c9a8780d3f8162ffb6ffdedce37ae5e2 with: angular-robot-key: ${{ secrets.ANGULAR_ROBOT_PRIVATE_KEY }} diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 57e2669c7729..a0e5c12f01a3 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -21,9 +21,9 @@ jobs: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@16c5f6e199e3e1b67ae5a62385d36366bb9a429d + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@4b8f9c22c9a8780d3f8162ffb6ffdedce37ae5e2 - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@16c5f6e199e3e1b67ae5a62385d36366bb9a429d + uses: angular/dev-infra/github-actions/bazel/setup@4b8f9c22c9a8780d3f8162ffb6ffdedce37ae5e2 - name: Install node modules run: pnpm install --frozen-lockfile - name: Generate JSON schema types @@ -44,11 +44,11 @@ jobs: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@16c5f6e199e3e1b67ae5a62385d36366bb9a429d + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@4b8f9c22c9a8780d3f8162ffb6ffdedce37ae5e2 - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@16c5f6e199e3e1b67ae5a62385d36366bb9a429d + uses: angular/dev-infra/github-actions/bazel/setup@4b8f9c22c9a8780d3f8162ffb6ffdedce37ae5e2 - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@16c5f6e199e3e1b67ae5a62385d36366bb9a429d + uses: angular/dev-infra/github-actions/bazel/configure-remote@4b8f9c22c9a8780d3f8162ffb6ffdedce37ae5e2 with: google_credential: ${{ secrets.RBE_TRUSTED_BUILDS_USER }} - name: Install node modules @@ -61,11 +61,11 @@ jobs: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@16c5f6e199e3e1b67ae5a62385d36366bb9a429d + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@4b8f9c22c9a8780d3f8162ffb6ffdedce37ae5e2 - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@16c5f6e199e3e1b67ae5a62385d36366bb9a429d + uses: angular/dev-infra/github-actions/bazel/setup@4b8f9c22c9a8780d3f8162ffb6ffdedce37ae5e2 - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@16c5f6e199e3e1b67ae5a62385d36366bb9a429d + uses: angular/dev-infra/github-actions/bazel/configure-remote@4b8f9c22c9a8780d3f8162ffb6ffdedce37ae5e2 with: google_credential: ${{ secrets.RBE_TRUSTED_BUILDS_USER }} - name: Install node modules @@ -84,13 +84,13 @@ jobs: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@16c5f6e199e3e1b67ae5a62385d36366bb9a429d + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@4b8f9c22c9a8780d3f8162ffb6ffdedce37ae5e2 - 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@4b8f9c22c9a8780d3f8162ffb6ffdedce37ae5e2 - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@16c5f6e199e3e1b67ae5a62385d36366bb9a429d + uses: angular/dev-infra/github-actions/bazel/configure-remote@4b8f9c22c9a8780d3f8162ffb6ffdedce37ae5e2 with: google_credential: ${{ secrets.RBE_TRUSTED_BUILDS_USER }} - name: Run CLI E2E tests @@ -100,11 +100,11 @@ jobs: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@16c5f6e199e3e1b67ae5a62385d36366bb9a429d + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@4b8f9c22c9a8780d3f8162ffb6ffdedce37ae5e2 - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@16c5f6e199e3e1b67ae5a62385d36366bb9a429d + uses: angular/dev-infra/github-actions/bazel/setup@4b8f9c22c9a8780d3f8162ffb6ffdedce37ae5e2 - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@16c5f6e199e3e1b67ae5a62385d36366bb9a429d + uses: angular/dev-infra/github-actions/bazel/configure-remote@4b8f9c22c9a8780d3f8162ffb6ffdedce37ae5e2 with: google_credential: ${{ secrets.RBE_TRUSTED_BUILDS_USER }} - name: Install node modules @@ -137,7 +137,7 @@ jobs: runs-on: windows-2025 steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@16c5f6e199e3e1b67ae5a62385d36366bb9a429d + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@4b8f9c22c9a8780d3f8162ffb6ffdedce37ae5e2 - name: Install node modules run: pnpm install --frozen-lockfile - name: Download built Windows E2E tests @@ -164,13 +164,13 @@ jobs: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@16c5f6e199e3e1b67ae5a62385d36366bb9a429d + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@4b8f9c22c9a8780d3f8162ffb6ffdedce37ae5e2 - 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@4b8f9c22c9a8780d3f8162ffb6ffdedce37ae5e2 - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@16c5f6e199e3e1b67ae5a62385d36366bb9a429d + uses: angular/dev-infra/github-actions/bazel/configure-remote@4b8f9c22c9a8780d3f8162ffb6ffdedce37ae5e2 with: google_credential: ${{ secrets.RBE_TRUSTED_BUILDS_USER }} - name: Run CLI E2E tests @@ -188,13 +188,13 @@ jobs: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@16c5f6e199e3e1b67ae5a62385d36366bb9a429d + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@4b8f9c22c9a8780d3f8162ffb6ffdedce37ae5e2 - 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@4b8f9c22c9a8780d3f8162ffb6ffdedce37ae5e2 - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@16c5f6e199e3e1b67ae5a62385d36366bb9a429d + uses: angular/dev-infra/github-actions/bazel/configure-remote@4b8f9c22c9a8780d3f8162ffb6ffdedce37ae5e2 with: google_credential: ${{ secrets.RBE_TRUSTED_BUILDS_USER }} - name: Run CLI E2E tests @@ -208,13 +208,13 @@ jobs: SAUCE_TUNNEL_IDENTIFIER: angular-cli-${{ github.workflow }}-${{ github.run_number }} steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@16c5f6e199e3e1b67ae5a62385d36366bb9a429d + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@4b8f9c22c9a8780d3f8162ffb6ffdedce37ae5e2 - 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@4b8f9c22c9a8780d3f8162ffb6ffdedce37ae5e2 - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@16c5f6e199e3e1b67ae5a62385d36366bb9a429d + uses: angular/dev-infra/github-actions/bazel/configure-remote@4b8f9c22c9a8780d3f8162ffb6ffdedce37ae5e2 with: google_credential: ${{ secrets.RBE_TRUSTED_BUILDS_USER }} - name: Run E2E Browser tests @@ -244,11 +244,11 @@ jobs: CIRCLE_BRANCH: ${{ github.ref_name }} 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@4b8f9c22c9a8780d3f8162ffb6ffdedce37ae5e2 - 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@4b8f9c22c9a8780d3f8162ffb6ffdedce37ae5e2 - run: pnpm admin snapshots --verbose env: SNAPSHOT_BUILDS_GITHUB_TOKEN: ${{ secrets.SNAPSHOT_BUILDS_GITHUB_TOKEN }} diff --git a/.github/workflows/dev-infra.yml b/.github/workflows/dev-infra.yml index 06f67ff5ce19..9c148fddbf3a 100644 --- a/.github/workflows/dev-infra.yml +++ b/.github/workflows/dev-infra.yml @@ -13,13 +13,13 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - - uses: angular/dev-infra/github-actions/pull-request-labeling@16c5f6e199e3e1b67ae5a62385d36366bb9a429d + - uses: angular/dev-infra/github-actions/pull-request-labeling@4b8f9c22c9a8780d3f8162ffb6ffdedce37ae5e2 with: angular-robot-key: ${{ secrets.ANGULAR_ROBOT_PRIVATE_KEY }} post_approval_changes: 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@4b8f9c22c9a8780d3f8162ffb6ffdedce37ae5e2 with: angular-robot-key: ${{ secrets.ANGULAR_ROBOT_PRIVATE_KEY }} diff --git a/.github/workflows/feature-requests.yml b/.github/workflows/feature-requests.yml index feab321286c5..70bc0ed9e32a 100644 --- a/.github/workflows/feature-requests.yml +++ b/.github/workflows/feature-requests.yml @@ -16,6 +16,6 @@ jobs: if: github.repository == 'angular/angular-cli' runs-on: ubuntu-latest steps: - - uses: angular/dev-infra/github-actions/feature-request@16c5f6e199e3e1b67ae5a62385d36366bb9a429d + - uses: angular/dev-infra/github-actions/feature-request@4b8f9c22c9a8780d3f8162ffb6ffdedce37ae5e2 with: angular-robot-key: ${{ secrets.ANGULAR_ROBOT_PRIVATE_KEY }} diff --git a/.github/workflows/perf.yml b/.github/workflows/perf.yml index c9f7ef9fa7f1..8a749b0b3b5a 100644 --- a/.github/workflows/perf.yml +++ b/.github/workflows/perf.yml @@ -23,7 +23,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@4b8f9c22c9a8780d3f8162ffb6ffdedce37ae5e2 - name: Install node modules run: pnpm install --frozen-lockfile - id: workflows @@ -38,9 +38,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@4b8f9c22c9a8780d3f8162ffb6ffdedce37ae5e2 - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@16c5f6e199e3e1b67ae5a62385d36366bb9a429d + uses: angular/dev-infra/github-actions/bazel/setup@4b8f9c22c9a8780d3f8162ffb6ffdedce37ae5e2 - name: Install node modules run: pnpm install --frozen-lockfile # We utilize the google-github-actions/auth action to allow us to get an active credential using workflow diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml index 4b12743d2c20..3a6459769445 100644 --- a/.github/workflows/pr.yml +++ b/.github/workflows/pr.yml @@ -34,9 +34,9 @@ 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@4b8f9c22c9a8780d3f8162ffb6ffdedce37ae5e2 - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@16c5f6e199e3e1b67ae5a62385d36366bb9a429d + uses: angular/dev-infra/github-actions/bazel/setup@4b8f9c22c9a8780d3f8162ffb6ffdedce37ae5e2 - name: Setup ESLint Caching uses: actions/cache@cdf6c1fa76f9f475f3d7449005a359c84ca0f306 # v5.0.3 with: @@ -66,17 +66,17 @@ jobs: # it has been merged. run: pnpm ng-dev format changed --check ${{ github.event.pull_request.base.sha }} - name: Check Package Licenses - uses: angular/dev-infra/github-actions/linting/licenses@16c5f6e199e3e1b67ae5a62385d36366bb9a429d + uses: angular/dev-infra/github-actions/linting/licenses@4b8f9c22c9a8780d3f8162ffb6ffdedce37ae5e2 build: 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@4b8f9c22c9a8780d3f8162ffb6ffdedce37ae5e2 - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@16c5f6e199e3e1b67ae5a62385d36366bb9a429d + uses: angular/dev-infra/github-actions/bazel/setup@4b8f9c22c9a8780d3f8162ffb6ffdedce37ae5e2 - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@16c5f6e199e3e1b67ae5a62385d36366bb9a429d + uses: angular/dev-infra/github-actions/bazel/configure-remote@4b8f9c22c9a8780d3f8162ffb6ffdedce37ae5e2 - name: Install node modules run: pnpm install --frozen-lockfile - name: Build release targets @@ -93,11 +93,11 @@ jobs: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@16c5f6e199e3e1b67ae5a62385d36366bb9a429d + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@4b8f9c22c9a8780d3f8162ffb6ffdedce37ae5e2 - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@16c5f6e199e3e1b67ae5a62385d36366bb9a429d + uses: angular/dev-infra/github-actions/bazel/setup@4b8f9c22c9a8780d3f8162ffb6ffdedce37ae5e2 - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@16c5f6e199e3e1b67ae5a62385d36366bb9a429d + uses: angular/dev-infra/github-actions/bazel/configure-remote@4b8f9c22c9a8780d3f8162ffb6ffdedce37ae5e2 - name: Install node modules run: pnpm install --frozen-lockfile - name: Run module and package tests @@ -114,13 +114,13 @@ jobs: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@16c5f6e199e3e1b67ae5a62385d36366bb9a429d + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@4b8f9c22c9a8780d3f8162ffb6ffdedce37ae5e2 - 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@4b8f9c22c9a8780d3f8162ffb6ffdedce37ae5e2 - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@16c5f6e199e3e1b67ae5a62385d36366bb9a429d + uses: angular/dev-infra/github-actions/bazel/configure-remote@4b8f9c22c9a8780d3f8162ffb6ffdedce37ae5e2 - name: Run CLI E2E tests run: pnpm bazel test --test_env=E2E_SHARD_TOTAL=6 --test_env=E2E_SHARD_INDEX=${{ matrix.shard }} --config=e2e //tests:e2e.${{ matrix.subset }}_node${{ matrix.node }} @@ -128,11 +128,11 @@ jobs: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@16c5f6e199e3e1b67ae5a62385d36366bb9a429d + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@4b8f9c22c9a8780d3f8162ffb6ffdedce37ae5e2 - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@16c5f6e199e3e1b67ae5a62385d36366bb9a429d + uses: angular/dev-infra/github-actions/bazel/setup@4b8f9c22c9a8780d3f8162ffb6ffdedce37ae5e2 - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@16c5f6e199e3e1b67ae5a62385d36366bb9a429d + uses: angular/dev-infra/github-actions/bazel/configure-remote@4b8f9c22c9a8780d3f8162ffb6ffdedce37ae5e2 - name: Install node modules run: pnpm install --frozen-lockfile - name: Build E2E tests for Windows on Linux @@ -156,7 +156,7 @@ jobs: runs-on: windows-2025 steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@16c5f6e199e3e1b67ae5a62385d36366bb9a429d + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@4b8f9c22c9a8780d3f8162ffb6ffdedce37ae5e2 - name: Install node modules run: pnpm install --frozen-lockfile - name: Download built Windows E2E tests @@ -183,13 +183,13 @@ jobs: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@16c5f6e199e3e1b67ae5a62385d36366bb9a429d + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@4b8f9c22c9a8780d3f8162ffb6ffdedce37ae5e2 - 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@4b8f9c22c9a8780d3f8162ffb6ffdedce37ae5e2 - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@16c5f6e199e3e1b67ae5a62385d36366bb9a429d + uses: angular/dev-infra/github-actions/bazel/configure-remote@4b8f9c22c9a8780d3f8162ffb6ffdedce37ae5e2 - name: Run CLI E2E tests run: pnpm bazel test --test_env=E2E_SHARD_TOTAL=3 --test_env=E2E_SHARD_INDEX=${{ matrix.shard }} --config=e2e //tests:e2e.${{ matrix.subset }}_node${{ matrix.node }} @@ -205,12 +205,12 @@ jobs: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@16c5f6e199e3e1b67ae5a62385d36366bb9a429d + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@4b8f9c22c9a8780d3f8162ffb6ffdedce37ae5e2 - 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@4b8f9c22c9a8780d3f8162ffb6ffdedce37ae5e2 - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@16c5f6e199e3e1b67ae5a62385d36366bb9a429d + uses: angular/dev-infra/github-actions/bazel/configure-remote@4b8f9c22c9a8780d3f8162ffb6ffdedce37ae5e2 - name: Run CLI E2E tests run: pnpm bazel test --test_env=E2E_SHARD_TOTAL=6 --test_env=E2E_SHARD_INDEX=${{ matrix.shard }} --config=e2e //tests:e2e.snapshots.${{ matrix.subset }}_node${{ matrix.node }} diff --git a/MODULE.bazel b/MODULE.bazel index be2d00867bdd..f4a526350e3b 100644 --- a/MODULE.bazel +++ b/MODULE.bazel @@ -25,7 +25,7 @@ git_override( bazel_dep(name = "devinfra") git_override( module_name = "devinfra", - commit = "16c5f6e199e3e1b67ae5a62385d36366bb9a429d", + commit = "4b8f9c22c9a8780d3f8162ffb6ffdedce37ae5e2", remote = "https://github.com/angular/dev-infra.git", ) diff --git a/package.json b/package.json index 5477154caaa3..269901c04363 100644 --- a/package.json +++ b/package.json @@ -51,7 +51,7 @@ "@angular/forms": "21.2.0-rc.0", "@angular/localize": "21.2.0-rc.0", "@angular/material": "21.2.0-rc.0", - "@angular/ng-dev": "https://github.com/angular/dev-infra-private-ng-dev-builds.git#32f536bae2ff587a75b3ec6be9f730011ae91e18", + "@angular/ng-dev": "https://github.com/angular/dev-infra-private-ng-dev-builds.git#5853f34e078f46777430088574777683efe2fc85", "@angular/platform-browser": "21.2.0-rc.0", "@angular/platform-server": "21.2.0-rc.0", "@angular/router": "21.2.0-rc.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index ce8b9910b540..b5a21b91e181 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -47,8 +47,8 @@ importers: specifier: 21.2.0-rc.0 version: 21.2.0-rc.0(4ac7caab525408b0a8d5509a5a82c8db) '@angular/ng-dev': - specifier: https://github.com/angular/dev-infra-private-ng-dev-builds.git#32f536bae2ff587a75b3ec6be9f730011ae91e18 - version: https://codeload.github.com/angular/dev-infra-private-ng-dev-builds/tar.gz/32f536bae2ff587a75b3ec6be9f730011ae91e18(@modelcontextprotocol/sdk@1.27.1(zod@4.3.6)) + specifier: https://github.com/angular/dev-infra-private-ng-dev-builds.git#5853f34e078f46777430088574777683efe2fc85 + version: https://codeload.github.com/angular/dev-infra-private-ng-dev-builds/tar.gz/5853f34e078f46777430088574777683efe2fc85(@modelcontextprotocol/sdk@1.27.1(zod@4.3.6)) '@angular/platform-browser': specifier: 21.2.0-rc.0 version: 21.2.0-rc.0(@angular/animations@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0)))(@angular/common@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2))(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0)) @@ -1008,9 +1008,9 @@ packages: '@angular/platform-browser': ^21.0.0-0 || ^21.1.0-0 || ^21.2.0-0 || ^21.3.0-0 || ^22.0.0-0 rxjs: ^6.5.3 || ^7.4.0 - '@angular/ng-dev@https://codeload.github.com/angular/dev-infra-private-ng-dev-builds/tar.gz/32f536bae2ff587a75b3ec6be9f730011ae91e18': - resolution: {tarball: https://codeload.github.com/angular/dev-infra-private-ng-dev-builds/tar.gz/32f536bae2ff587a75b3ec6be9f730011ae91e18} - version: 0.0.0-16c5f6e199e3e1b67ae5a62385d36366bb9a429d + '@angular/ng-dev@https://codeload.github.com/angular/dev-infra-private-ng-dev-builds/tar.gz/5853f34e078f46777430088574777683efe2fc85': + resolution: {tarball: https://codeload.github.com/angular/dev-infra-private-ng-dev-builds/tar.gz/5853f34e078f46777430088574777683efe2fc85} + version: 0.0.0-4b8f9c22c9a8780d3f8162ffb6ffdedce37ae5e2 hasBin: true '@angular/platform-browser@21.2.0-rc.0': @@ -6424,6 +6424,10 @@ packages: resolution: {integrity: sha512-+G4CpNBxa5MprY+04MbgOw1v7So6n5JY166pFi9KfYwT78fxScCeSNQSNzp6dpPSW2rONOps6Ocam1wFhCgoVw==} engines: {node: 18 || 20 || >=22} + minimatch@10.2.3: + resolution: {integrity: sha512-Rwi3pnapEqirPSbWbrZaa6N3nmqq4Xer/2XooiOKyV3q12ML06f7MOuc5DVH8ONZIFhwIYQ3yzPH4nt7iWHaTg==} + engines: {node: 18 || 20 || >=22} + minimatch@3.1.2: resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} @@ -8646,7 +8650,7 @@ snapshots: rxjs: 7.8.2 tslib: 2.8.1 - '@angular/ng-dev@https://codeload.github.com/angular/dev-infra-private-ng-dev-builds/tar.gz/32f536bae2ff587a75b3ec6be9f730011ae91e18(@modelcontextprotocol/sdk@1.27.1(zod@4.3.6))': + '@angular/ng-dev@https://codeload.github.com/angular/dev-infra-private-ng-dev-builds/tar.gz/5853f34e078f46777430088574777683efe2fc85(@modelcontextprotocol/sdk@1.27.1(zod@4.3.6))': dependencies: '@actions/core': 3.0.0 '@google-cloud/spanner': 8.0.0(supports-color@10.2.2) @@ -8690,7 +8694,7 @@ snapshots: jasmine-core: 6.1.0 jasmine-reporters: 2.5.2 jsonc-parser: 3.3.1 - minimatch: 10.2.2 + minimatch: 10.2.3 multimatch: 8.0.0 nock: 14.0.11 semver: 7.7.4 @@ -14812,6 +14816,10 @@ snapshots: dependencies: brace-expansion: 5.0.2 + minimatch@10.2.3: + dependencies: + brace-expansion: 5.0.2 + minimatch@3.1.2: dependencies: brace-expansion: 1.1.12 @@ -14912,7 +14920,7 @@ snapshots: dependencies: array-differ: 4.0.0 array-union: 3.0.1 - minimatch: 10.2.2 + minimatch: 10.2.3 mute-stream@3.0.0: {} diff --git a/tests/e2e/ng-snapshot/package.json b/tests/e2e/ng-snapshot/package.json index 7cf069377067..ab7ba0acdf28 100644 --- a/tests/e2e/ng-snapshot/package.json +++ b/tests/e2e/ng-snapshot/package.json @@ -2,21 +2,21 @@ "description": "snapshot versions of Angular for e2e testing", "private": true, "dependencies": { - "@angular/animations": "github:angular/animations-builds#e0b7ba27e93ec73223c8ad64467d8c0ce9b8732d", + "@angular/animations": "github:angular/animations-builds#19ed9e7a0b8515d22bf13b5fb58a8a8f3c4a2842", "@angular/cdk": "github:angular/cdk-builds#5e97af5ad334182854f09262a8b26e238967aa68", - "@angular/common": "github:angular/common-builds#3a75a08706ee0a25e860ed3139932ee6856da4b7", - "@angular/compiler": "github:angular/compiler-builds#23b4fb60f5f3a70a6c7238126eb005d1ff91a7e4", - "@angular/compiler-cli": "github:angular/compiler-cli-builds#2ed949f3ed00ed3fff14d57b92a67df079627bd5", - "@angular/core": "github:angular/core-builds#06fce06a0547789b777adcc6d51b51dd3e4c9bf3", - "@angular/forms": "github:angular/forms-builds#f868ef7002c9c876343abc95b9866f6ae8b4a115", - "@angular/language-service": "github:angular/language-service-builds#5c51099c93309e7aa4d01660c22b54e9e9a3b94b", - "@angular/localize": "github:angular/localize-builds#eb78c31574c7eb8fa5187f4d743a289c347e38be", + "@angular/common": "github:angular/common-builds#a32c10557e0780803fd32bb7a1e3a6a960705b6a", + "@angular/compiler": "github:angular/compiler-builds#e8d51a5002e450e552a4c587c2bd25235ffb0cc3", + "@angular/compiler-cli": "github:angular/compiler-cli-builds#18a10b769c9786066286e1650570044f39db3f06", + "@angular/core": "github:angular/core-builds#befb8fd739ef58416f7eca1eb701ea1d00bb86c8", + "@angular/forms": "github:angular/forms-builds#dd7f45337c00117c64766017e5edc3c023857db9", + "@angular/language-service": "github:angular/language-service-builds#b9415c1269e487ca6c5fa255a8c6d80eefde9d16", + "@angular/localize": "github:angular/localize-builds#33755250cd9aec2aaca392a906ad247da032a53b", "@angular/material": "github:angular/material-builds#6921af69ff90449f3963620d22d47a64137bca1d", "@angular/material-moment-adapter": "github:angular/material-moment-adapter-builds#9d63fb9749dde15dd45057270adeaee9736753df", - "@angular/platform-browser": "github:angular/platform-browser-builds#4dfaf35eb93dd1dd76e535457d637bba18b354fd", - "@angular/platform-browser-dynamic": "github:angular/platform-browser-dynamic-builds#a042d4010fbd204a0cb7a88926a2e8349119e3a1", - "@angular/platform-server": "github:angular/platform-server-builds#c29e6f6cefa5930d1f14c0d75c4f0855059dbf4d", - "@angular/router": "github:angular/router-builds#49e044ac35258efe2d535f648e89962c7bed2128", - "@angular/service-worker": "github:angular/service-worker-builds#d21e1cc54fcdee4f1cb5af21d66dc563004220a4" + "@angular/platform-browser": "github:angular/platform-browser-builds#0b4e889ddafe5ac3b7ab0e777123407490a3e2e2", + "@angular/platform-browser-dynamic": "github:angular/platform-browser-dynamic-builds#dffe604ea8cbb7bb45ae55c1a6785454683f80bd", + "@angular/platform-server": "github:angular/platform-server-builds#9905f63d91fda825342324da42cfcd2da2d5912c", + "@angular/router": "github:angular/router-builds#0f2f8ca2fe9884706e18de1941933ee0a0cc27c3", + "@angular/service-worker": "github:angular/service-worker-builds#3add2f993604ad5a9e4c8879f17f6291073c2b11" } } From 7f36a3635ba016620436d5d7b3c67ad3091499e7 Mon Sep 17 00:00:00 2001 From: Doug Parker Date: Thu, 26 Feb 2026 11:47:04 -0800 Subject: [PATCH 054/226] docs: release notes for the v19.2.22 release --- CHANGELOG.md | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 985561c25810..ea99613b2305 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,21 @@ + + +# 19.2.22 (2026-02-26) + +### @angular-devkit/core + +| Commit | Type | Description | +| --------------------------------------------------------------------------------------------------- | ---- | ------------------------ | +| [0a01aecd9](https://github.com/angular/angular-cli/commit/0a01aecd92a5dfa1a254429481906a88be725c5e) | fix | update `ajv` to `8.18.0` | + +### @angular/build + +| Commit | Type | Description | +| --------------------------------------------------------------------------------------------------- | ---- | ----------------------- | +| [79f59412a](https://github.com/angular/angular-cli/commit/79f59412a17eeabd2ad5df1d614ed634354d1eee) | fix | update rollup to 4.59.0 | + + + # 21.2.0 (2026-02-25) @@ -2405,6 +2423,7 @@ - Protractor is no longer supported. Protractor was marked end-of-life in August 2023 (see https://protractortest.org/). Projects still relying on Protractor should consider migrating to another E2E testing framework, several support solid migration paths from Protractor. + - https://angular.dev/tools/cli/end-to-end - https://blog.angular.dev/the-state-of-end-to-end-testing-with-angular-d175f751cb9c @@ -6039,6 +6058,7 @@ Alan Agius, Charles Lyding and Doug Parker ### @angular/cli - Several changes to the `ng analytics` command syntax. + - `ng analytics project ` has been replaced with `ng analytics ` - `ng analytics ` has been replaced with `ng analytics --global` @@ -6068,6 +6088,7 @@ Alan Agius, Charles Lyding and Doug Parker - `browser` and `karma` builders `script` and `styles` options input files extensions are now validated. Valid extensions for `scripts` are: + - `.js` - `.cjs` - `.mjs` @@ -6076,6 +6097,7 @@ Alan Agius, Charles Lyding and Doug Parker - `.mjsx` Valid extensions for `styles` are: + - `.css` - `.less` - `.sass` From f050ecbd6862cf098abdacf9bfd905a63b9ce386 Mon Sep 17 00:00:00 2001 From: Doug Parker Date: Thu, 26 Feb 2026 13:14:18 -0800 Subject: [PATCH 055/226] docs: release notes for the v20.3.18 release --- CHANGELOG.md | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ea99613b2305..b8541354d4b1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,21 @@ + + +# 20.3.18 (2026-02-26) + +### @angular-devkit/core + +| Commit | Type | Description | +| --------------------------------------------------------------------------------------------------- | ---- | ------------------------ | +| [39596d529](https://github.com/angular/angular-cli/commit/39596d529f831f72a2134bc3c9ac163867ff5702) | fix | update `ajv` to `8.18.0` | + +### @angular/build + +| Commit | Type | Description | +| --------------------------------------------------------------------------------------------------- | ---- | ----------------------- | +| [f668e2778](https://github.com/angular/angular-cli/commit/f668e2778c4c4dbecc8a1c6831c092f5512d1ec1) | fix | update rollup to 4.59.0 | + + + # 19.2.22 (2026-02-26) @@ -2423,7 +2441,6 @@ - Protractor is no longer supported. Protractor was marked end-of-life in August 2023 (see https://protractortest.org/). Projects still relying on Protractor should consider migrating to another E2E testing framework, several support solid migration paths from Protractor. - - https://angular.dev/tools/cli/end-to-end - https://blog.angular.dev/the-state-of-end-to-end-testing-with-angular-d175f751cb9c @@ -6058,7 +6075,6 @@ Alan Agius, Charles Lyding and Doug Parker ### @angular/cli - Several changes to the `ng analytics` command syntax. - - `ng analytics project ` has been replaced with `ng analytics ` - `ng analytics ` has been replaced with `ng analytics --global` @@ -6088,7 +6104,6 @@ Alan Agius, Charles Lyding and Doug Parker - `browser` and `karma` builders `script` and `styles` options input files extensions are now validated. Valid extensions for `scripts` are: - - `.js` - `.cjs` - `.mjs` @@ -6097,7 +6112,6 @@ Alan Agius, Charles Lyding and Doug Parker - `.mjsx` Valid extensions for `styles` are: - - `.css` - `.less` - `.sass` From b5868a8d2b4d74069e99b3ea4a075ca64c054e10 Mon Sep 17 00:00:00 2001 From: Angular Robot Date: Thu, 26 Feb 2026 18:50:59 +0000 Subject: [PATCH 056/226] build: lock file maintenance See associated pull request for more information. --- pnpm-lock.yaml | 893 ++++++++++++++++--------------------------------- 1 file changed, 287 insertions(+), 606 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index b5a21b91e181..c4e2a2439500 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -21,13 +21,13 @@ importers: devDependencies: '@angular/animations': specifier: 21.2.0-rc.0 - version: 21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0)) + version: 21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1)) '@angular/cdk': specifier: 21.2.0-rc.0 - version: 21.2.0-rc.0(@angular/common@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2))(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0))(@angular/platform-browser@21.2.0-rc.0(@angular/animations@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0)))(@angular/common@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2))(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0)))(rxjs@7.8.2) + version: 21.2.0-rc.0(@angular/common@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@21.2.0-rc.0(@angular/animations@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1)))(rxjs@7.8.2) '@angular/common': specifier: 21.2.0-rc.0 - version: 21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2) + version: 21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2) '@angular/compiler': specifier: 21.2.0-rc.0 version: 21.2.0-rc.0 @@ -36,31 +36,31 @@ importers: version: 21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(typescript@5.9.3) '@angular/core': specifier: 21.2.0-rc.0 - version: 21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0) + version: 21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1) '@angular/forms': specifier: 21.2.0-rc.0 - version: 21.2.0-rc.0(@angular/common@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2))(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0))(@angular/platform-browser@21.2.0-rc.0(@angular/animations@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0)))(@angular/common@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2))(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0)))(rxjs@7.8.2) + version: 21.2.0-rc.0(@angular/common@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@21.2.0-rc.0(@angular/animations@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1)))(rxjs@7.8.2) '@angular/localize': specifier: 21.2.0-rc.0 version: 21.2.0-rc.0(@angular/compiler-cli@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(typescript@5.9.3))(@angular/compiler@21.2.0-rc.0) '@angular/material': specifier: 21.2.0-rc.0 - version: 21.2.0-rc.0(4ac7caab525408b0a8d5509a5a82c8db) + version: 21.2.0-rc.0(b10e235d889ab235dc2911d6ec167f08) '@angular/ng-dev': specifier: https://github.com/angular/dev-infra-private-ng-dev-builds.git#5853f34e078f46777430088574777683efe2fc85 version: https://codeload.github.com/angular/dev-infra-private-ng-dev-builds/tar.gz/5853f34e078f46777430088574777683efe2fc85(@modelcontextprotocol/sdk@1.27.1(zod@4.3.6)) '@angular/platform-browser': specifier: 21.2.0-rc.0 - version: 21.2.0-rc.0(@angular/animations@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0)))(@angular/common@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2))(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0)) + version: 21.2.0-rc.0(@angular/animations@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1)) '@angular/platform-server': specifier: 21.2.0-rc.0 - version: 21.2.0-rc.0(@angular/common@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2))(@angular/compiler@21.2.0-rc.0)(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0))(@angular/platform-browser@21.2.0-rc.0(@angular/animations@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0)))(@angular/common@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2))(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0)))(rxjs@7.8.2) + version: 21.2.0-rc.0(@angular/common@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/compiler@21.2.0-rc.0)(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@21.2.0-rc.0(@angular/animations@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1)))(rxjs@7.8.2) '@angular/router': specifier: 21.2.0-rc.0 - version: 21.2.0-rc.0(@angular/common@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2))(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0))(@angular/platform-browser@21.2.0-rc.0(@angular/animations@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0)))(@angular/common@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2))(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0)))(rxjs@7.8.2) + version: 21.2.0-rc.0(@angular/common@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@21.2.0-rc.0(@angular/animations@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1)))(rxjs@7.8.2) '@angular/service-worker': specifier: 21.2.0-rc.0 - version: 21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2) + version: 21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2) '@babel/core': specifier: 7.29.0 version: 7.29.0 @@ -93,7 +93,7 @@ importers: version: 16.0.3(rollup@4.59.0) '@stylistic/eslint-plugin': specifier: ^5.0.0 - version: 5.8.0(eslint@10.0.2(jiti@2.6.1)) + version: 5.9.0(eslint@10.0.2(jiti@2.6.1)) '@tony.ganchev/eslint-plugin-header': specifier: ~3.2.4 version: 3.2.4(eslint@10.0.2(jiti@2.6.1)) @@ -132,7 +132,7 @@ importers: version: 3.0.0(esbuild@0.27.3) '@types/lodash': specifier: ^4.17.0 - version: 4.17.23 + version: 4.17.24 '@types/node': specifier: ^22.12.0 version: 22.19.11 @@ -291,7 +291,7 @@ importers: version: 10.3.1 zone.js: specifier: ^0.16.0 - version: 0.16.0 + version: 0.16.1 modules/testing/builder: devDependencies: @@ -513,22 +513,22 @@ importers: version: link:../../angular_devkit/schematics '@angular/common': specifier: 21.2.0-rc.0 - version: 21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2) + version: 21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2) '@angular/compiler': specifier: 21.2.0-rc.0 version: 21.2.0-rc.0 '@angular/core': specifier: 21.2.0-rc.0 - version: 21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0) + version: 21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1) '@angular/platform-browser': specifier: 21.2.0-rc.0 - version: 21.2.0-rc.0(@angular/animations@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0)))(@angular/common@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2))(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0)) + version: 21.2.0-rc.0(@angular/animations@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1)) '@angular/platform-server': specifier: 21.2.0-rc.0 - version: 21.2.0-rc.0(@angular/common@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2))(@angular/compiler@21.2.0-rc.0)(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0))(@angular/platform-browser@21.2.0-rc.0(@angular/animations@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0)))(@angular/common@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2))(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0)))(rxjs@7.8.2) + version: 21.2.0-rc.0(@angular/common@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/compiler@21.2.0-rc.0)(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@21.2.0-rc.0(@angular/animations@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1)))(rxjs@7.8.2) '@angular/router': specifier: 21.2.0-rc.0 - version: 21.2.0-rc.0(@angular/common@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2))(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0))(@angular/platform-browser@21.2.0-rc.0(@angular/animations@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0)))(@angular/common@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2))(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0)))(rxjs@7.8.2) + version: 21.2.0-rc.0(@angular/common@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@21.2.0-rc.0(@angular/animations@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1)))(rxjs@7.8.2) '@schematics/angular': specifier: workspace:* version: link:../../schematics/angular @@ -1051,8 +1051,9 @@ packages: '@angular/core': 21.2.0-rc.0 rxjs: ^6.5.3 || ^7.4.0 - '@asamuzakjp/css-color@4.1.2': - resolution: {integrity: sha512-NfBUvBaYgKIuq6E/RBLY1m0IohzNHAYyaJGuTK79Z23uNwmz2jl1mPsC5ZxCCxylinKhT1Amn5oNTlx1wN8cQg==} + '@asamuzakjp/css-color@5.0.1': + resolution: {integrity: sha512-2SZFvqMyvboVV1d15lMf7XiI3m7SDqXUuKaTymJYLN6dSGadqp+fVojqJlVoMlbZnlTmu3S0TLwLTJpvBMO1Aw==} + engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0} '@asamuzakjp/dom-selector@6.8.1': resolution: {integrity: sha512-MvRz1nCqW0fsy8Qz4dnLIvhOlMzqDVBabZx6lH+YywFDdjXhMY37SmpV1XFX3JzG5GWHn63j6HX6QPr3lZXHvQ==} @@ -1597,8 +1598,8 @@ packages: conventional-commits-parser: optional: true - '@csstools/color-helpers@6.0.1': - resolution: {integrity: sha512-NmXRccUJMk2AWA5A7e5a//3bCIMyOu2hAtdRYrhPPHjDxINuCwX1w6rnIZ4xjLcp0ayv6h8Pc3X0eJUGiAAXHQ==} + '@csstools/color-helpers@6.0.2': + resolution: {integrity: sha512-LMGQLS9EuADloEFkcTBR3BwV/CGHV7zyDxVRtVDTwdI2Ca4it0CCVTT9wCkxSgokjE5Ho41hEPgb8OEUwoXr6Q==} engines: {node: '>=20.19.0'} '@csstools/css-calc@3.1.1': @@ -1608,8 +1609,8 @@ packages: '@csstools/css-parser-algorithms': ^4.0.0 '@csstools/css-tokenizer': ^4.0.0 - '@csstools/css-color-parser@4.0.1': - resolution: {integrity: sha512-vYwO15eRBEkeF6xjAno/KQ61HacNhfQuuU/eGwH67DplL0zD5ZixUa563phQvUelA07yDczIXdtmYojCphKJcw==} + '@csstools/css-color-parser@4.0.2': + resolution: {integrity: sha512-0GEfbBLmTFf0dJlpsNU7zwxRIH0/BGEMuXLTCvFYxuL1tNhqzTbtnFICyJLTNK4a+RechKP75e7w42ClXSnJQw==} engines: {node: '>=20.19.0'} peerDependencies: '@csstools/css-parser-algorithms': ^4.0.0 @@ -1621,8 +1622,8 @@ packages: peerDependencies: '@csstools/css-tokenizer': ^4.0.0 - '@csstools/css-syntax-patches-for-csstree@1.0.27': - resolution: {integrity: sha512-sxP33Jwg1bviSUXAV43cVYdmjt2TLnLXNqCWl9xmxHawWVjGz/kEbdkr7F9pxJNBN2Mh+dq0crgItbW6tQvyow==} + '@csstools/css-syntax-patches-for-csstree@1.0.28': + resolution: {integrity: sha512-1NRf1CUBjnr3K7hu8BLxjQrKCxEe8FP/xmPTenAxCRZWVLbmGotkFvG9mfNpjA6k7Bw1bw4BilZq9cu19RA5pg==} '@csstools/css-tokenizer@4.0.0': resolution: {integrity: sha512-QxULHAm7cNu72w97JUNCBFODFaXpbDg+dP8b/oWFAZ2MTRppA3U00Y2L1HqaS4J6yBqxwa/Y3nMBaxVKbB/NsA==} @@ -2297,10 +2298,6 @@ packages: resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} engines: {node: '>=12'} - '@isaacs/cliui@9.0.0': - resolution: {integrity: sha512-AokJm4tuBHillT+FpMtxQ60n8ObyXBatq7jD2/JA9dxbDDokKQm8KMht5ibGzLVU9IJDIKK4TPKgMHEYMn3lMg==} - engines: {node: '>=18'} - '@isaacs/fs-minipass@4.0.1': resolution: {integrity: sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==} engines: {node: '>=18.0.0'} @@ -2683,8 +2680,8 @@ packages: resolution: {integrity: sha512-7OsC1gNORBEawOa5+j2pXN9vsicaIOH5cPXxoR6fJOmH6/EXpJB2CajXOu1fPRFun2m1lktEFX11+P89hqO/og==} engines: {node: ^20.17.0 || >=22.9.0} - '@npmcli/git@7.0.1': - resolution: {integrity: sha512-+XTFxK2jJF/EJJ5SoAzXk3qwIDfvFc5/g+bD274LZ7uY7LE8sTfG6Z8rOanPl2ZEvZWqNvmEdtXC25cE54VcoA==} + '@npmcli/git@7.0.2': + resolution: {integrity: sha512-oeolHDjExNAJAnlYP2qzNjMX/Xi9bmu78C9dIGr4xjobrSKbuMYCph8lTzn4vnW3NjIqVmw/f8BCfouqyJXlRg==} engines: {node: ^20.17.0 || >=22.9.0} '@npmcli/installed-package-contents@4.0.0': @@ -2696,8 +2693,8 @@ packages: resolution: {integrity: sha512-uuG5HZFXLfyFKqg8QypsmgLQW7smiRjVc45bqD/ofZZcR/uxEjgQU8qDPv0s9TEeMUiAAU/GC5bR6++UdTirIQ==} engines: {node: ^20.17.0 || >=22.9.0} - '@npmcli/package-json@7.0.4': - resolution: {integrity: sha512-0wInJG3j/K40OJt/33ax47WfWMzZTm6OQxB9cDhTt5huCP2a9g2GnlsxmfN+PulItNPIpPrZ+kfwwUil7eHcZQ==} + '@npmcli/package-json@7.0.5': + resolution: {integrity: sha512-iVuTlG3ORq2iaVa1IWUxAO/jIp77tUKBhoMjuzYW2kL4MLN1bi/ofqkZ7D7OOwh8coAx1/S2ge0rMdGv8sLSOQ==} engines: {node: ^20.17.0 || >=22.9.0} '@npmcli/promise-spawn@9.0.1': @@ -2736,8 +2733,8 @@ packages: resolution: {integrity: sha512-DhGl4xMVFGVIyMwswXeyzdL4uXD5OGILGX5N8Y+f6W7LhC1Ze2poSNrkF/fedpVDHEEZ+PHFW0vL14I+mm8K3Q==} engines: {node: '>= 20'} - '@octokit/endpoint@11.0.2': - resolution: {integrity: sha512-4zCpzP1fWc7QlqunZ5bSEjxc6yLAlRTnDwKtgXfcI/FxxGoqedDG8V2+xJ60bV2kODqcGB+nATdtap/XYq2NZQ==} + '@octokit/endpoint@11.0.3': + resolution: {integrity: sha512-FWFlNxghg4HrXkD3ifYbS/IdL/mDHjh9QcsNyhQjN8dplUoZbejsdpmuqdA76nxj2xoWPs7p8uX2SNr9rYu0Ag==} engines: {node: '>= 20'} '@octokit/graphql-schema@15.26.1': @@ -2780,8 +2777,8 @@ packages: resolution: {integrity: sha512-KMQIfq5sOPpkQYajXHwnhjCC0slzCNScLHs9JafXc4RAJI+9f+jNDlBNaIMTvazOPLgb4BnlhGJOTbnN0wIjPw==} engines: {node: '>= 20'} - '@octokit/request@10.0.7': - resolution: {integrity: sha512-v93h0i1yu4idj8qFPZwjehoJx4j3Ntn+JhXsdJrG9pYaX6j/XRz2RmasMUHtNgQD39nrv/VwTWSqK0RNXR8upA==} + '@octokit/request@10.0.8': + resolution: {integrity: sha512-SJZNwY9pur9Agf7l87ywFi14W+Hd9Jg6Ifivsd33+/bGUQIjNujdFiXII2/qSlN2ybqUHfp5xpekMEjIBTjlSw==} engines: {node: '>= 20'} '@octokit/rest@22.0.1': @@ -3131,284 +3128,146 @@ packages: rollup: optional: true - '@rollup/rollup-android-arm-eabi@4.57.1': - resolution: {integrity: sha512-A6ehUVSiSaaliTxai040ZpZ2zTevHYbvu/lDoeAteHI8QnaosIzm4qwtezfRg1jOYaUmnzLX1AOD6Z+UJjtifg==} - cpu: [arm] - os: [android] - '@rollup/rollup-android-arm-eabi@4.59.0': resolution: {integrity: sha512-upnNBkA6ZH2VKGcBj9Fyl9IGNPULcjXRlg0LLeaioQWueH30p6IXtJEbKAgvyv+mJaMxSm1l6xwDXYjpEMiLMg==} cpu: [arm] os: [android] - '@rollup/rollup-android-arm64@4.57.1': - resolution: {integrity: sha512-dQaAddCY9YgkFHZcFNS/606Exo8vcLHwArFZ7vxXq4rigo2bb494/xKMMwRRQW6ug7Js6yXmBZhSBRuBvCCQ3w==} - cpu: [arm64] - os: [android] - '@rollup/rollup-android-arm64@4.59.0': resolution: {integrity: sha512-hZ+Zxj3SySm4A/DylsDKZAeVg0mvi++0PYVceVyX7hemkw7OreKdCvW2oQ3T1FMZvCaQXqOTHb8qmBShoqk69Q==} cpu: [arm64] os: [android] - '@rollup/rollup-darwin-arm64@4.57.1': - resolution: {integrity: sha512-crNPrwJOrRxagUYeMn/DZwqN88SDmwaJ8Cvi/TN1HnWBU7GwknckyosC2gd0IqYRsHDEnXf328o9/HC6OkPgOg==} - cpu: [arm64] - os: [darwin] - '@rollup/rollup-darwin-arm64@4.59.0': resolution: {integrity: sha512-W2Psnbh1J8ZJw0xKAd8zdNgF9HRLkdWwwdWqubSVk0pUuQkoHnv7rx4GiF9rT4t5DIZGAsConRE3AxCdJ4m8rg==} cpu: [arm64] os: [darwin] - '@rollup/rollup-darwin-x64@4.57.1': - resolution: {integrity: sha512-Ji8g8ChVbKrhFtig5QBV7iMaJrGtpHelkB3lsaKzadFBe58gmjfGXAOfI5FV0lYMH8wiqsxKQ1C9B0YTRXVy4w==} - cpu: [x64] - os: [darwin] - '@rollup/rollup-darwin-x64@4.59.0': resolution: {integrity: sha512-ZW2KkwlS4lwTv7ZVsYDiARfFCnSGhzYPdiOU4IM2fDbL+QGlyAbjgSFuqNRbSthybLbIJ915UtZBtmuLrQAT/w==} cpu: [x64] os: [darwin] - '@rollup/rollup-freebsd-arm64@4.57.1': - resolution: {integrity: sha512-R+/WwhsjmwodAcz65guCGFRkMb4gKWTcIeLy60JJQbXrJ97BOXHxnkPFrP+YwFlaS0m+uWJTstrUA9o+UchFug==} - cpu: [arm64] - os: [freebsd] - '@rollup/rollup-freebsd-arm64@4.59.0': resolution: {integrity: sha512-EsKaJ5ytAu9jI3lonzn3BgG8iRBjV4LxZexygcQbpiU0wU0ATxhNVEpXKfUa0pS05gTcSDMKpn3Sx+QB9RlTTA==} cpu: [arm64] os: [freebsd] - '@rollup/rollup-freebsd-x64@4.57.1': - resolution: {integrity: sha512-IEQTCHeiTOnAUC3IDQdzRAGj3jOAYNr9kBguI7MQAAZK3caezRrg0GxAb6Hchg4lxdZEI5Oq3iov/w/hnFWY9Q==} - cpu: [x64] - os: [freebsd] - '@rollup/rollup-freebsd-x64@4.59.0': resolution: {integrity: sha512-d3DuZi2KzTMjImrxoHIAODUZYoUUMsuUiY4SRRcJy6NJoZ6iIqWnJu9IScV9jXysyGMVuW+KNzZvBLOcpdl3Vg==} cpu: [x64] os: [freebsd] - '@rollup/rollup-linux-arm-gnueabihf@4.57.1': - resolution: {integrity: sha512-F8sWbhZ7tyuEfsmOxwc2giKDQzN3+kuBLPwwZGyVkLlKGdV1nvnNwYD0fKQ8+XS6hp9nY7B+ZeK01EBUE7aHaw==} - cpu: [arm] - os: [linux] - libc: [glibc] - '@rollup/rollup-linux-arm-gnueabihf@4.59.0': resolution: {integrity: sha512-t4ONHboXi/3E0rT6OZl1pKbl2Vgxf9vJfWgmUoCEVQVxhW6Cw/c8I6hbbu7DAvgp82RKiH7TpLwxnJeKv2pbsw==} cpu: [arm] os: [linux] libc: [glibc] - '@rollup/rollup-linux-arm-musleabihf@4.57.1': - resolution: {integrity: sha512-rGfNUfn0GIeXtBP1wL5MnzSj98+PZe/AXaGBCRmT0ts80lU5CATYGxXukeTX39XBKsxzFpEeK+Mrp9faXOlmrw==} - cpu: [arm] - os: [linux] - libc: [musl] - '@rollup/rollup-linux-arm-musleabihf@4.59.0': resolution: {integrity: sha512-CikFT7aYPA2ufMD086cVORBYGHffBo4K8MQ4uPS/ZnY54GKj36i196u8U+aDVT2LX4eSMbyHtyOh7D7Zvk2VvA==} cpu: [arm] os: [linux] libc: [musl] - '@rollup/rollup-linux-arm64-gnu@4.57.1': - resolution: {integrity: sha512-MMtej3YHWeg/0klK2Qodf3yrNzz6CGjo2UntLvk2RSPlhzgLvYEB3frRvbEF2wRKh1Z2fDIg9KRPe1fawv7C+g==} - cpu: [arm64] - os: [linux] - libc: [glibc] - '@rollup/rollup-linux-arm64-gnu@4.59.0': resolution: {integrity: sha512-jYgUGk5aLd1nUb1CtQ8E+t5JhLc9x5WdBKew9ZgAXg7DBk0ZHErLHdXM24rfX+bKrFe+Xp5YuJo54I5HFjGDAA==} cpu: [arm64] os: [linux] libc: [glibc] - '@rollup/rollup-linux-arm64-musl@4.57.1': - resolution: {integrity: sha512-1a/qhaaOXhqXGpMFMET9VqwZakkljWHLmZOX48R0I/YLbhdxr1m4gtG1Hq7++VhVUmf+L3sTAf9op4JlhQ5u1Q==} - cpu: [arm64] - os: [linux] - libc: [musl] - '@rollup/rollup-linux-arm64-musl@4.59.0': resolution: {integrity: sha512-peZRVEdnFWZ5Bh2KeumKG9ty7aCXzzEsHShOZEFiCQlDEepP1dpUl/SrUNXNg13UmZl+gzVDPsiCwnV1uI0RUA==} cpu: [arm64] os: [linux] libc: [musl] - '@rollup/rollup-linux-loong64-gnu@4.57.1': - resolution: {integrity: sha512-QWO6RQTZ/cqYtJMtxhkRkidoNGXc7ERPbZN7dVW5SdURuLeVU7lwKMpo18XdcmpWYd0qsP1bwKPf7DNSUinhvA==} - cpu: [loong64] - os: [linux] - libc: [glibc] - '@rollup/rollup-linux-loong64-gnu@4.59.0': resolution: {integrity: sha512-gbUSW/97f7+r4gHy3Jlup8zDG190AuodsWnNiXErp9mT90iCy9NKKU0Xwx5k8VlRAIV2uU9CsMnEFg/xXaOfXg==} cpu: [loong64] os: [linux] libc: [glibc] - '@rollup/rollup-linux-loong64-musl@4.57.1': - resolution: {integrity: sha512-xpObYIf+8gprgWaPP32xiN5RVTi/s5FCR+XMXSKmhfoJjrpRAjCuuqQXyxUa/eJTdAE6eJ+KDKaoEqjZQxh3Gw==} - cpu: [loong64] - os: [linux] - libc: [musl] - '@rollup/rollup-linux-loong64-musl@4.59.0': resolution: {integrity: sha512-yTRONe79E+o0FWFijasoTjtzG9EBedFXJMl888NBEDCDV9I2wGbFFfJQQe63OijbFCUZqxpHz1GzpbtSFikJ4Q==} cpu: [loong64] os: [linux] libc: [musl] - '@rollup/rollup-linux-ppc64-gnu@4.57.1': - resolution: {integrity: sha512-4BrCgrpZo4hvzMDKRqEaW1zeecScDCR+2nZ86ATLhAoJ5FQ+lbHVD3ttKe74/c7tNT9c6F2viwB3ufwp01Oh2w==} - cpu: [ppc64] - os: [linux] - libc: [glibc] - '@rollup/rollup-linux-ppc64-gnu@4.59.0': resolution: {integrity: sha512-sw1o3tfyk12k3OEpRddF68a1unZ5VCN7zoTNtSn2KndUE+ea3m3ROOKRCZxEpmT9nsGnogpFP9x6mnLTCaoLkA==} cpu: [ppc64] os: [linux] libc: [glibc] - '@rollup/rollup-linux-ppc64-musl@4.57.1': - resolution: {integrity: sha512-NOlUuzesGauESAyEYFSe3QTUguL+lvrN1HtwEEsU2rOwdUDeTMJdO5dUYl/2hKf9jWydJrO9OL/XSSf65R5+Xw==} - cpu: [ppc64] - os: [linux] - libc: [musl] - '@rollup/rollup-linux-ppc64-musl@4.59.0': resolution: {integrity: sha512-+2kLtQ4xT3AiIxkzFVFXfsmlZiG5FXYW7ZyIIvGA7Bdeuh9Z0aN4hVyXS/G1E9bTP/vqszNIN/pUKCk/BTHsKA==} cpu: [ppc64] os: [linux] libc: [musl] - '@rollup/rollup-linux-riscv64-gnu@4.57.1': - resolution: {integrity: sha512-ptA88htVp0AwUUqhVghwDIKlvJMD/fmL/wrQj99PRHFRAG6Z5nbWoWG4o81Nt9FT+IuqUQi+L31ZKAFeJ5Is+A==} - cpu: [riscv64] - os: [linux] - libc: [glibc] - '@rollup/rollup-linux-riscv64-gnu@4.59.0': resolution: {integrity: sha512-NDYMpsXYJJaj+I7UdwIuHHNxXZ/b/N2hR15NyH3m2qAtb/hHPA4g4SuuvrdxetTdndfj9b1WOmy73kcPRoERUg==} cpu: [riscv64] os: [linux] libc: [glibc] - '@rollup/rollup-linux-riscv64-musl@4.57.1': - resolution: {integrity: sha512-S51t7aMMTNdmAMPpBg7OOsTdn4tySRQvklmL3RpDRyknk87+Sp3xaumlatU+ppQ+5raY7sSTcC2beGgvhENfuw==} - cpu: [riscv64] - os: [linux] - libc: [musl] - '@rollup/rollup-linux-riscv64-musl@4.59.0': resolution: {integrity: sha512-nLckB8WOqHIf1bhymk+oHxvM9D3tyPndZH8i8+35p/1YiVoVswPid2yLzgX7ZJP0KQvnkhM4H6QZ5m0LzbyIAg==} cpu: [riscv64] os: [linux] libc: [musl] - '@rollup/rollup-linux-s390x-gnu@4.57.1': - resolution: {integrity: sha512-Bl00OFnVFkL82FHbEqy3k5CUCKH6OEJL54KCyx2oqsmZnFTR8IoNqBF+mjQVcRCT5sB6yOvK8A37LNm/kPJiZg==} - cpu: [s390x] - os: [linux] - libc: [glibc] - '@rollup/rollup-linux-s390x-gnu@4.59.0': resolution: {integrity: sha512-oF87Ie3uAIvORFBpwnCvUzdeYUqi2wY6jRFWJAy1qus/udHFYIkplYRW+wo+GRUP4sKzYdmE1Y3+rY5Gc4ZO+w==} cpu: [s390x] os: [linux] libc: [glibc] - '@rollup/rollup-linux-x64-gnu@4.57.1': - resolution: {integrity: sha512-ABca4ceT4N+Tv/GtotnWAeXZUZuM/9AQyCyKYyKnpk4yoA7QIAuBt6Hkgpw8kActYlew2mvckXkvx0FfoInnLg==} - cpu: [x64] - os: [linux] - libc: [glibc] - '@rollup/rollup-linux-x64-gnu@4.59.0': resolution: {integrity: sha512-3AHmtQq/ppNuUspKAlvA8HtLybkDflkMuLK4DPo77DfthRb71V84/c4MlWJXixZz4uruIH4uaa07IqoAkG64fg==} cpu: [x64] os: [linux] libc: [glibc] - '@rollup/rollup-linux-x64-musl@4.57.1': - resolution: {integrity: sha512-HFps0JeGtuOR2convgRRkHCekD7j+gdAuXM+/i6kGzQtFhlCtQkpwtNzkNj6QhCDp7DRJ7+qC/1Vg2jt5iSOFw==} - cpu: [x64] - os: [linux] - libc: [musl] - '@rollup/rollup-linux-x64-musl@4.59.0': resolution: {integrity: sha512-2UdiwS/9cTAx7qIUZB/fWtToJwvt0Vbo0zmnYt7ED35KPg13Q0ym1g442THLC7VyI6JfYTP4PiSOWyoMdV2/xg==} cpu: [x64] os: [linux] libc: [musl] - '@rollup/rollup-openbsd-x64@4.57.1': - resolution: {integrity: sha512-H+hXEv9gdVQuDTgnqD+SQffoWoc0Of59AStSzTEj/feWTBAnSfSD3+Dql1ZruJQxmykT/JVY0dE8Ka7z0DH1hw==} - cpu: [x64] - os: [openbsd] - '@rollup/rollup-openbsd-x64@4.59.0': resolution: {integrity: sha512-M3bLRAVk6GOwFlPTIxVBSYKUaqfLrn8l0psKinkCFxl4lQvOSz8ZrKDz2gxcBwHFpci0B6rttydI4IpS4IS/jQ==} cpu: [x64] os: [openbsd] - '@rollup/rollup-openharmony-arm64@4.57.1': - resolution: {integrity: sha512-4wYoDpNg6o/oPximyc/NG+mYUejZrCU2q+2w6YZqrAs2UcNUChIZXjtafAiiZSUc7On8v5NyNj34Kzj/Ltk6dQ==} - cpu: [arm64] - os: [openharmony] - '@rollup/rollup-openharmony-arm64@4.59.0': resolution: {integrity: sha512-tt9KBJqaqp5i5HUZzoafHZX8b5Q2Fe7UjYERADll83O4fGqJ49O1FsL6LpdzVFQcpwvnyd0i+K/VSwu/o/nWlA==} cpu: [arm64] os: [openharmony] - '@rollup/rollup-win32-arm64-msvc@4.57.1': - resolution: {integrity: sha512-O54mtsV/6LW3P8qdTcamQmuC990HDfR71lo44oZMZlXU4tzLrbvTii87Ni9opq60ds0YzuAlEr/GNwuNluZyMQ==} - cpu: [arm64] - os: [win32] - '@rollup/rollup-win32-arm64-msvc@4.59.0': resolution: {integrity: sha512-V5B6mG7OrGTwnxaNUzZTDTjDS7F75PO1ae6MJYdiMu60sq0CqN5CVeVsbhPxalupvTX8gXVSU9gq+Rx1/hvu6A==} cpu: [arm64] os: [win32] - '@rollup/rollup-win32-ia32-msvc@4.57.1': - resolution: {integrity: sha512-P3dLS+IerxCT/7D2q2FYcRdWRl22dNbrbBEtxdWhXrfIMPP9lQhb5h4Du04mdl5Woq05jVCDPCMF7Ub0NAjIew==} - cpu: [ia32] - os: [win32] - '@rollup/rollup-win32-ia32-msvc@4.59.0': resolution: {integrity: sha512-UKFMHPuM9R0iBegwzKF4y0C4J9u8C6MEJgFuXTBerMk7EJ92GFVFYBfOZaSGLu6COf7FxpQNqhNS4c4icUPqxA==} cpu: [ia32] os: [win32] - '@rollup/rollup-win32-x64-gnu@4.57.1': - resolution: {integrity: sha512-VMBH2eOOaKGtIJYleXsi2B8CPVADrh+TyNxJ4mWPnKfLB/DBUmzW+5m1xUrcwWoMfSLagIRpjUFeW5CO5hyciQ==} - cpu: [x64] - os: [win32] - '@rollup/rollup-win32-x64-gnu@4.59.0': resolution: {integrity: sha512-laBkYlSS1n2L8fSo1thDNGrCTQMmxjYY5G0WFWjFFYZkKPjsMBsgJfGf4TLxXrF6RyhI60L8TMOjBMvXiTcxeA==} cpu: [x64] os: [win32] - '@rollup/rollup-win32-x64-msvc@4.57.1': - resolution: {integrity: sha512-mxRFDdHIWRxg3UfIIAwCm6NzvxG0jDX/wBN6KsQFTvKFqqg9vTrWUE68qEjHt19A5wwx5X5aUi2zuZT7YR0jrA==} - cpu: [x64] - os: [win32] - '@rollup/rollup-win32-x64-msvc@4.59.0': resolution: {integrity: sha512-2HRCml6OztYXyJXAvdDXPKcawukWY2GpR5/nxKp4iBgiO3wcoEGkAaqctIbZcNB6KlUQBIqt8VYkNSj2397EfA==} cpu: [x64] os: [win32] - '@rollup/wasm-node@4.57.1': - resolution: {integrity: sha512-b0rcJH8ykEanfgTeDtlPubhphIUOx0oaAek+3hizTaFkoC1FBSTsY0GixwB4D5HZ5r3Gt2yI9c8M13OcW/kW5A==} + '@rollup/wasm-node@4.59.0': + resolution: {integrity: sha512-cKB/Pe05aJWQYw3UFS79Id+KVXdExBxWful0+CSl24z3ukwOgBSy6l39XZNwfm3vCh/fpUrAAs+T7PsJ6dC8NA==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true @@ -3449,11 +3308,11 @@ packages: '@standard-schema/spec@1.1.0': resolution: {integrity: sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==} - '@stylistic/eslint-plugin@5.8.0': - resolution: {integrity: sha512-WNPVF/FfBAjyi3OA7gok8swRiImNLKI4dmV3iK/GC/0xSJR7eCzBFsw9hLZVgb1+MYNLy7aDsjohxN1hA/FIfQ==} + '@stylistic/eslint-plugin@5.9.0': + resolution: {integrity: sha512-FqqSkvDMYJReydrMhlugc71M76yLLQWNfmGq+SIlLa7N3kHp8Qq8i2PyWrVNAfjOyOIY+xv9XaaYwvVW7vroMA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - eslint: '>=9.0.0' + eslint: ^9.0.0 || ^10.0.0 '@szmarczak/http-timer@4.0.6': resolution: {integrity: sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==} @@ -3593,8 +3452,8 @@ packages: '@types/loader-utils@3.0.0': resolution: {integrity: sha512-oOi4OGpiLUbb+Q/cN9FIkkDFgOpOGZ2cUAzb5i03wrGstnG6Syx1WDMhSiB5rcP10XX7cw7Uev8mv++/aplnNg==} - '@types/lodash@4.17.23': - resolution: {integrity: sha512-RDvF6wTulMPjrNdCoYRC8gNR880JNGT8uB+REUpC2Ns4pRqQJhGz90wh7rgdXDPpCczF3VGktDuFGVnz8zP7HA==} + '@types/lodash@4.17.24': + resolution: {integrity: sha512-gIW7lQLZbue7lRSWEFql49QJJWThrTFFeIMJdp3eH4tKoxm1OvEPg02rm4wCCSHS0cL3/Fizimb35b7k8atwsQ==} '@types/micromatch@2.3.35': resolution: {integrity: sha512-J749bHo/Zu56w0G0NI/IGHLQPiSsjx//0zJhfEVAN95K/xM5C8ZDmhkXtU3qns0sBOao7HuQzr8XV1/2o5LbXA==} @@ -3742,10 +3601,6 @@ packages: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/types@8.55.0': - resolution: {integrity: sha512-ujT0Je8GI5BJWi+/mMoR0wxwVEQaxM+pi30xuMiJETlX80OPovb2p9E8ss87gnSVtYXtJoU9U1Cowcr6w2FE0w==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/types@8.56.1': resolution: {integrity: sha512-dbMkdIUkIkchgGDIv7KLUpa0Mda4IYjo4IAMJUZ+3xNoUXxMsk9YtKpTHSChRS85o+H9ftm51gsK1dZReY9CVw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -3979,11 +3834,6 @@ packages: peerDependencies: acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 - acorn@8.15.0: - resolution: {integrity: sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==} - engines: {node: '>=0.4.0'} - hasBin: true - acorn@8.16.0: resolution: {integrity: sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==} engines: {node: '>=0.4.0'} @@ -4165,8 +4015,8 @@ packages: aws4@1.13.2: resolution: {integrity: sha512-lHe62zvbTB5eEABUVi/AwVh0ZKY9rMMDhmm+eeyuuUQbQ3+J+fONVQOZyj+DdrvD4BY33uYniyRJ4UJIaSKAfw==} - b4a@1.7.4: - resolution: {integrity: sha512-u20zJLDaSWpxaZ+zaAkEIB2dZZ1o+DF4T/MRbmsvGp9nletHOyiai19OzX1fF8xUBYsO1bPXxODvcd0978pnug==} + b4a@1.8.0: + resolution: {integrity: sha512-qRuSmNSkGQaHwNbM7J78Wwy+ghLEYF1zNrSeMxj4Kgw6y33O3mXcQ6Ie9fRvfU/YnxWkOchPXbaLb73TkIsfdg==} peerDependencies: react-native-b4a: '*' peerDependenciesMeta: @@ -4203,9 +4053,9 @@ packages: balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} - balanced-match@4.0.2: - resolution: {integrity: sha512-x0K50QvKQ97fdEz2kPehIerj+YTeptKF9hyYkKf6egnwmMWAkADiO0QCzSp0R5xN8FTZgYaBfSaue46Ej62nMg==} - engines: {node: 20 || >=22} + balanced-match@4.0.4: + resolution: {integrity: sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==} + engines: {node: 18 || 20 || >=22} bare-events@2.8.2: resolution: {integrity: sha512-riJjyv1/mHLIPX4RwiK+oW9/4c3TEUeORHKefKAKnZ5kyslbN+HXowtbaVEqt4IMUB7OXlfixcs6gsFeo/jhiQ==} @@ -4222,8 +4072,9 @@ packages: resolution: {integrity: sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==} engines: {node: ^4.5.0 || >= 5.9} - baseline-browser-mapping@2.9.19: - resolution: {integrity: sha512-ipDqC8FrAl/76p2SSWKSI+H9tFwm7vYqXQrItCuiVPt26Km0jS+NzSsBWAaBusvSbQcfJG+JitdMm+wZAgTYqg==} + baseline-browser-mapping@2.10.0: + resolution: {integrity: sha512-lIyg0szRfYbiy67j9KN8IyeD7q7hcmqnJ1ddWmNt19ItGpNN64mnllmxUNFIOdOm6by97jlL6wfpTTJrmnjWAA==} + engines: {node: '>=6.0.0'} hasBin: true batch@0.6.1: @@ -4281,9 +4132,9 @@ packages: brace-expansion@2.0.2: resolution: {integrity: sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==} - brace-expansion@5.0.2: - resolution: {integrity: sha512-Pdk8c9poy+YhOgVWw1JNN22/HcivgKWwpxKq04M/jTmHyCZn12WPJebZxdjSa5TmBqISrUSgNYU3eRORljfCCw==} - engines: {node: 20 || >=22} + brace-expansion@5.0.3: + resolution: {integrity: sha512-fy6KJm2RawA5RcHkLa1z/ScpBeA762UF9KmZQxwIbDtRJrgLzM10depAiEQ+CXYcoiqW1/m96OAAoke2nE9EeA==} + engines: {node: 18 || 20 || >=22} braces@3.0.3: resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} @@ -4374,8 +4225,8 @@ packages: resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} engines: {node: '>=6'} - caniuse-lite@1.0.30001770: - resolution: {integrity: sha512-x/2CLQ1jHENRbHg5PSId2sXq1CIO1CISvwWAj027ltMVG2UNgW+w9oH2+HzgEIRFembL8bUlXtfbBHR1fCg2xw==} + caniuse-lite@1.0.30001774: + resolution: {integrity: sha512-DDdwPGz99nmIEv216hKSgLD+D4ikHQHjBC/seF98N9CPqRX4M5mSxT9eTV6oyisnJcuzxtZy4n17yKKQYmYQOA==} caseless@0.12.0: resolution: {integrity: sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==} @@ -4634,8 +4485,8 @@ packages: engines: {node: '>=4'} hasBin: true - cssstyle@6.0.1: - resolution: {integrity: sha512-IoJs7La+oFp/AB033wBStxNOJt4+9hHMxsXUPANcoXL2b3W4DZKghlJ2cI/eyeRZIQ9ysvYEorVhjrcYctWbog==} + cssstyle@6.1.0: + resolution: {integrity: sha512-Ml4fP2UT2K3CUBQnVlbdV/8aFDdlY69E+YnwJM+3VUWl08S3J8c8aRuJqCkD9Py8DHZ7zNNvsfKl8psocHZEFg==} engines: {node: '>=20'} custom-event@1.0.1: @@ -4862,8 +4713,8 @@ packages: engines: {node: '>=0.12.18'} hasBin: true - electron-to-chromium@1.5.286: - resolution: {integrity: sha512-9tfDXhJ4RKFNerfjdCcZfufu49vg620741MNs26a9+bhLThdB+plgMeou98CAaHu/WATj2iHOOHTp1hWtABj2A==} + electron-to-chromium@1.5.302: + resolution: {integrity: sha512-sM6HAN2LyK82IyPBpznDRqlTQAtuSaO+ShzFiWTvoMJLHyZ+Y39r8VMfHzwbU8MVBzQ4Wdn85+wlZl2TLGIlwg==} emoji-regex@10.6.0: resolution: {integrity: sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==} @@ -5231,8 +5082,9 @@ packages: resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} engines: {node: '>=16.0.0'} - filelist@1.0.4: - resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==} + filelist@1.0.5: + resolution: {integrity: sha512-ct/ckWBV/9Dg3MlvCXsLcSUyoWwv9mCKqlhLNB2DAuXR/NZolSXlQqP5dyy6guWlPXBhodZyZ5lGPQcbQDxrEQ==} + engines: {node: 20 || >=22} fill-range@7.1.1: resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} @@ -5383,10 +5235,6 @@ packages: resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} engines: {node: 6.* || 8.* || >= 10.*} - get-east-asian-width@1.4.0: - resolution: {integrity: sha512-QZjmEOC+IT1uk6Rx0sX22V6uHWVwbdbxf1faPqJ1QhLdGgsRGCZoyaQBm/piRdJy/D2um6hM1UP7ZEeQ4EkP+Q==} - engines: {node: '>=18'} - get-east-asian-width@1.5.0: resolution: {integrity: sha512-CQ+bEO+Tva/qlmw24dCejulK5pMzVnUOFOijVogd3KQs07HnRIgp8TGipvCCRT06xeYEbpbgwaCxglFyiuIcmA==} engines: {node: '>=18'} @@ -5448,9 +5296,9 @@ packages: deprecated: Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me hasBin: true - glob@13.0.3: - resolution: {integrity: sha512-/g3B0mC+4x724v1TgtBlBtt2hPi/EWptsIAmXUx9Z2rvBYleQcsrmaOzd5LyL50jf/Soi83ZDJmw2+XqvH/EeA==} - engines: {node: 20 || >=22} + glob@13.0.6: + resolution: {integrity: sha512-Wjlyrolmm8uDpm/ogGyXZXb1Z+Ca2B8NbJwqBVg0axK9GbBeoS7yGV6vjXnYdGm6X53iehEuxxbyiKp8QmN4Vw==} + engines: {node: 18 || 20 || >=22} glob@7.2.3: resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} @@ -5468,8 +5316,8 @@ packages: resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} engines: {node: '>= 0.4'} - google-auth-library@10.5.0: - resolution: {integrity: sha512-7ABviyMOlX5hIVD60YOfHw4/CxOfBhyduaYB+wbFWCWoni4N7SLcV46hrVRktuBbZjFC9ONyqamZITN7q3n32w==} + google-auth-library@10.6.1: + resolution: {integrity: sha512-5awwuLrzNol+pFDmKJd0dKtZ0fPLAtoA5p7YO4ODsDu6ONJUVqbYwvv8y2ZBO5MBNp9TJXigB19710kYpBPdtA==} engines: {node: '>=18'} google-gax@5.0.6: @@ -5497,8 +5345,8 @@ packages: peerDependencies: graphql: ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 - graphql@16.12.0: - resolution: {integrity: sha512-DKKrynuQRne0PNpEbzuEdHlYOMksHSUI8Zc9Unei5gTsMNA2/vMpoMz/yKba50pejK56qj98qM0SjYxAKi13gQ==} + graphql@16.13.0: + resolution: {integrity: sha512-uSisMYERbaB9bkA9M4/4dnqyktaEkf1kMHNKq/7DHyxVeWqHQ2mBmVqm5u6/FVHwF3iCNalKcg82Zfl+tffWoA==} engines: {node: ^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0} grpc-gcp@1.0.1: @@ -5507,10 +5355,6 @@ packages: peerDependencies: protobufjs: '*' - gtoken@8.0.0: - resolution: {integrity: sha512-+CqsMbHPiSTdtSO14O51eMNlrp9N79gmeqmXeouJOhfucAedHw9noVe/n5uJk3tbKE6a+6ZCQg3RPhVhHByAIw==} - engines: {node: '>=18'} - gunzip-maybe@1.4.2: resolution: {integrity: sha512-4haO1M4mLO91PW57BMsDFf75UmwoRX0GkdD+Faw+Lr+r/OZrOCS0pIBwOL1xCKQqnQzbNFGgK2V2CpBUPeFNTw==} hasBin: true @@ -5550,8 +5394,8 @@ packages: resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} engines: {node: '>= 0.4'} - hono@4.11.9: - resolution: {integrity: sha512-Eaw2YTGM6WOxA6CXbckaEvslr2Ne4NFsKrvc0v97JD5awbmeBLO5w9Ho9L9kmKonrwF9RJlW6BxT1PVv/agBHQ==} + hono@4.12.2: + resolution: {integrity: sha512-gJnaDHXKDayjt8ue0n8Gs0A007yKXj4Xzb8+cNjZeYsSzzwKc0Lr+OZgYwVfB0pHfUs17EPoLvrOsEaJ9mj+Tg==} engines: {node: '>=16.9.0'} hosted-git-info@9.0.2: @@ -5994,10 +5838,6 @@ packages: jackspeak@3.4.3: resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} - jackspeak@4.2.3: - resolution: {integrity: sha512-ykkVRwrYvFm1nb2AJfKKYPr0emF6IiXDYUaFx4Zn9ZuIH7MrzEZ3sD5RlqGXNRpHtvUHJyOnCEFxOlNDtGo7wg==} - engines: {node: 20 || >=22} - jake@10.9.4: resolution: {integrity: sha512-wpHYzhxiVQL+IV05BLE2Xn34zW1S223hvjtqk0+gsPrwd/8JNLXJgZZM/iPFsYc1xyphF+6M6EvdE5E9MBGkDA==} engines: {node: '>=10'} @@ -6091,6 +5931,9 @@ packages: json-stringify-safe@5.0.1: resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==} + json-with-bigint@3.5.3: + resolution: {integrity: sha512-QObKu6nxy7NsxqR0VK4rkXnsNr5L9ElJaGEg+ucJ6J7/suoKZ0n+p76cu9aCqowytxEbwYNzvrMerfMkXneF5A==} + json5@1.0.2: resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} hasBin: true @@ -6162,8 +6005,8 @@ packages: resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} engines: {node: '>=0.10.0'} - launch-editor@2.12.0: - resolution: {integrity: sha512-giOHXoOtifjdHqUamwKq6c49GzBdLjvxrd2D+Q4V6uOHopJv7p9VJxikDsQ/CBXZbEITgUqSVHXLTG3VhPP1Dg==} + launch-editor@2.13.1: + resolution: {integrity: sha512-lPSddlAAluRKJ7/cjRFoXUFzaX7q/YKI7yPHuEvSJVqoXvFnJov1/Ud87Aa4zULIbA9Nja4mSPK8l0z/7eV2wA==} less-loader@12.3.1: resolution: {integrity: sha512-JZZmG7gMzoDP3VGeEG8Sh6FW5wygB5jYL7Wp29FFihuRTsIBacqO3LbRPr2yStYD11riVf13selLm/CPFRDBRQ==} @@ -6318,8 +6161,8 @@ packages: resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==} engines: {node: '>=10'} - make-fetch-happen@15.0.3: - resolution: {integrity: sha512-iyyEpDty1mwW3dGlYXAJqC/azFn5PPvgKVwXayOGBSmKLxhKZ9fg4qIan2ePpp1vJIwfFiO34LAPZgq9SZW9Aw==} + make-fetch-happen@15.0.4: + resolution: {integrity: sha512-vM2sG+wbVeVGYcCm16mM3d5fuem9oC28n436HjsGO3LcxoTI8LNVa4rwZDn3f76+cWyT4GGJDxjTYU1I2nr6zw==} engines: {node: ^20.17.0 || >=22.9.0} math-intrinsics@1.1.0: @@ -6420,30 +6263,23 @@ packages: minimalistic-assert@1.0.1: resolution: {integrity: sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==} - minimatch@10.2.2: - resolution: {integrity: sha512-+G4CpNBxa5MprY+04MbgOw1v7So6n5JY166pFi9KfYwT78fxScCeSNQSNzp6dpPSW2rONOps6Ocam1wFhCgoVw==} - engines: {node: 18 || 20 || >=22} - minimatch@10.2.3: resolution: {integrity: sha512-Rwi3pnapEqirPSbWbrZaa6N3nmqq4Xer/2XooiOKyV3q12ML06f7MOuc5DVH8ONZIFhwIYQ3yzPH4nt7iWHaTg==} engines: {node: 18 || 20 || >=22} - minimatch@3.1.2: - resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} - - minimatch@3.1.4: - resolution: {integrity: sha512-twmL+S8+7yIsE9wsqgzU3E8/LumN3M3QELrBZ20OdmQ9jB2JvW5oZtBEmft84k/Gs5CG9mqtWc6Y9vW+JEzGxw==} + minimatch@10.2.4: + resolution: {integrity: sha512-oRjTw/97aTBN0RHbYCdtF1MQfvusSIBQM0IZEgzl6426+8jSC0nF1a/GmnVLpfB9yyr6g6FTqWqiZVbxrtaCIg==} + engines: {node: 18 || 20 || >=22} - minimatch@5.1.6: - resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==} - engines: {node: '>=10'} + minimatch@3.1.5: + resolution: {integrity: sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==} minimatch@7.4.6: resolution: {integrity: sha512-sBz8G/YjVniEz6lKPNpKxXwazJe4c19fEfV2GDMX6AjFz+MX9uDWIZW8XreVhkFW3fkIdTv/gxWr/Kks5FFAVw==} engines: {node: '>=10'} - minimatch@9.0.5: - resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} + minimatch@9.0.8: + resolution: {integrity: sha512-reYkDYtj/b19TeqbNZCV4q9t+Yxylf/rYBsLb42SXJatTv4/ylq5lEiAmhA/IToxO7NI2UzNMghHoHuaqDkAjw==} engines: {node: '>=16 || 14 >=14.17'} minimist@1.2.8: @@ -6453,8 +6289,8 @@ packages: resolution: {integrity: sha512-D7V8PO9oaz7PWGLbCACuI1qEOsq7UKfLotx/C0Aet43fCUB/wfQ7DYeq2oR/svFJGYDHPr38SHATeaj/ZoKHKw==} engines: {node: '>=16 || 14 >=14.17'} - minipass-fetch@5.0.1: - resolution: {integrity: sha512-yHK8pb0iCGat0lDrs/D6RZmCdaBT64tULXjdxjSMAqoDi18Q3qKEUTHypHQZQd9+FYpIS+lkvpq6C/R6SbUeRw==} + minipass-fetch@5.0.2: + resolution: {integrity: sha512-2d0q2a8eCi2IRg/IGubCNRJoYbA1+YPXAzQVRFmB45gdGZafyivnZ5YSEfo3JikbjGxOdntGFvBQGqaSMXlAFQ==} engines: {node: ^20.17.0 || >=22.9.0} minipass-flush@1.0.5: @@ -6473,8 +6309,8 @@ packages: resolution: {integrity: sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==} engines: {node: '>=8'} - minipass@7.1.2: - resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} + minipass@7.1.3: + resolution: {integrity: sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==} engines: {node: '>=16 || 14 >=14.17'} minizlib@3.1.0: @@ -6654,8 +6490,8 @@ packages: resolution: {integrity: sha512-IciCE3SY3uE84Ld8WZU23gAPPV9rIYod4F+rc+vJ7h7cwAJt9Vk6TVsK60ry7Uj3SRS3bqRRIGuTp9YVlk6WNA==} engines: {node: ^20.17.0 || >=22.9.0} - npm-packlist@10.0.3: - resolution: {integrity: sha512-zPukTwJMOu5X5uvm0fztwS5Zxyvmk38H/LfidkOMt3gbZVCyro2cD/ETzwzVPcWZA3JOyPznfUN/nkyFiyUbxg==} + npm-packlist@10.0.4: + resolution: {integrity: sha512-uMW73iajD8hiH4ZBxEV3HC+eTnppIqwakjOYuvgddnalIw2lJguKviK1pcUJDlIWm1wSJkchpDZDSVVsZEYRng==} engines: {node: ^20.17.0 || >=22.9.0} npm-pick-manifest@11.0.3: @@ -6854,9 +6690,9 @@ packages: resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} engines: {node: '>=16 || 14 >=14.18'} - path-scurry@2.0.1: - resolution: {integrity: sha512-oWyT4gICAu+kaA7QWk/jvCHWarMKNs6pXOGWKDTr7cw4IGcUbW+PeTfbaQiLGheFRpjo6O9J0PmyMfQPjH71oA==} - engines: {node: 20 || >=22} + path-scurry@2.0.2: + resolution: {integrity: sha512-3O/iVVsJAPsOnpwWIeD+d6z/7PmqApyQePUtCndjatj/9I5LylHvt5qluFaBT3I5h3r1ejfR056c+FCv+NnNXg==} + engines: {node: 18 || 20 || >=22} path-to-regexp@0.1.12: resolution: {integrity: sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==} @@ -7286,11 +7122,6 @@ packages: '@types/node': optional: true - rollup@4.57.1: - resolution: {integrity: sha512-oQL6lgK3e2QZeQ7gcgIkS2YZPg5slw37hYufJ3edKlfQSGGm8ICoxswK15ntSzF/a8+h7ekRy7k7oWc3BQ7y8A==} - engines: {node: '>=18.0.0', npm: '>=8.0.0'} - hasBin: true - rollup@4.59.0: resolution: {integrity: sha512-2oMpl67a3zCH9H79LeMcbDhXW/UmWG/y2zuqnF2jQq5uq9TbM9TVyXvA4+t+ne2IIkBdrLpAaRQAvo7YI/Yyeg==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} @@ -7554,20 +7385,20 @@ packages: resolution: {integrity: sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==} engines: {node: '>= 12'} - spdx-correct@3.2.0: - resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==} - spdx-exceptions@2.5.0: resolution: {integrity: sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==} spdx-expression-parse@3.0.1: resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==} + spdx-expression-parse@4.0.0: + resolution: {integrity: sha512-Clya5JIij/7C6bRR22+tnGXbc4VKlibKSVj2iHvVeX5iMW7s1SIQlqu699JkODJJIhh/pUu8L0/VLh8xflD+LQ==} + spdx-expression-validate@2.0.0: resolution: {integrity: sha512-b3wydZLM+Tc6CFvaRDBOF9d76oGIHNCLYFeHbftFXUWjnfZWganmDmvtM5sm1cRwJc/VDBMLyGGrsLFd1vOxbg==} - spdx-license-ids@3.0.22: - resolution: {integrity: sha512-4PRT4nh1EImPbt2jASOKHX7PB7I+e4IWNLvkKFDxNhJlfjbYlleYQh285Z/3mPTHSAK/AvdMmw5BNNuYH8ShgQ==} + spdx-license-ids@3.0.23: + resolution: {integrity: sha512-CWLcCCH7VLu13TgOH+r8p1O/Znwhqv/dbb6lqWy67G+pT1kHmeD/+V36AVb/vq8QMIQwVShJ6Ssl5FPh0fuSdw==} spdy-transport@3.0.0: resolution: {integrity: sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==} @@ -7668,10 +7499,6 @@ packages: resolution: {integrity: sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==} engines: {node: '>=18'} - string-width@8.1.1: - resolution: {integrity: sha512-KpqHIdDL9KwYk22wEOg/VIqYbrnLeSApsKT/bSj6Ez7pn3CftUiLAv2Lccpq1ALcpLV9UX1Ppn92npZWu2w/aw==} - engines: {node: '>=20'} - string-width@8.2.0: resolution: {integrity: sha512-6hJPQ8N0V0P3SNmP6h2J99RLuzrWz2gvT7VnK5tKvrNqJoyS9W4/Fb8mo31UiPvy00z7DQXkP2hnKBVav76thw==} engines: {node: '>=20'} @@ -7775,8 +7602,8 @@ packages: engines: {node: '>=10'} hasBin: true - text-decoder@1.2.6: - resolution: {integrity: sha512-27FeW5GQFDfw0FpwMQhMagB7BztOOlmjcSRi97t2oplhKVTZtp0DZbSegSaXS5IIC6mxMvBG4AR1Sgc6BX3CQg==} + text-decoder@1.2.7: + resolution: {integrity: sha512-vlLytXkeP4xvEq2otHeJfSQIRyWxo/oZGEbXrtEEF9Hnmrdly59sUbzZ/QgyWuLYHctCHxFF4tRQZNQ9k60ExQ==} thingies@2.5.0: resolution: {integrity: sha512-s+2Bwztg6PhWUD7XMfeYm5qliDdSiZm7M7n8KjTkIsm3l/2lgVRc2/Gx/v+ZX8lT4FMA+i8aQvhcWylldc+ZNw==} @@ -8060,9 +7887,6 @@ packages: resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} hasBin: true - validate-npm-package-license@3.0.4: - resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} - validate-npm-package-name@7.0.2: resolution: {integrity: sha512-hVDIBwsRruT73PbK7uP5ebUt+ezEtCmzZz3F59BSr2F6OVFnJ/6h8liuvdLrQ88Xmnk6/+xGGuq+pG9WwTuy3A==} engines: {node: ^20.17.0 || >=22.9.0} @@ -8264,8 +8088,8 @@ packages: resolution: {integrity: sha512-sXcNcHOC51uPGF0P/D4NVtrkjSU2fNsm9iog4ZvZJsL3rjoDAzXZhkm2MWt1y+PUdggKAYVoMAIYcs78wJ51Cw==} engines: {node: '>=20'} - whatwg-url@16.0.0: - resolution: {integrity: sha512-9CcxtEKsf53UFwkSUZjG+9vydAsFO4lFHBpJUtjBcoJOCJpKnSJNwCw813zrYJHpCJ7sgfbtOe0V5Ku7Pa1XMQ==} + whatwg-url@16.0.1: + resolution: {integrity: sha512-1to4zXBxmXHV3IiSSEInrreIlu02vUOvrhxJJH5vcxYTBDAx51cqZiKdyTxlecdKNSjj8EcxGBxNf6Vg+945gw==} engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0} whatwg-url@5.0.0: @@ -8460,8 +8284,8 @@ packages: zod@4.3.6: resolution: {integrity: sha512-rftlrkhHZOcjDwkGlnUtZZkvaPHCsDATp4pGpuOOMDaTdDDXF91wuVDJoWoPsKX/3YPQ5fHuF3STjcYyKr+Qhg==} - zone.js@0.16.0: - resolution: {integrity: sha512-LqLPpIQANebrlxY6jKcYKdgN5DTXyyHAKnnWWjE5pPfEQ4n7j5zn7mOEEpwNZVKGqx3kKKmvplEmoBrvpgROTA==} + zone.js@0.16.1: + resolution: {integrity: sha512-dpvY17vxYIW3+bNrP0ClUlaiY0CiIRK3tnoLaGoQsQcY9/I/NpzIWQ7tQNhbV7LacQMpCII6wVzuL3tuWOyfuA==} snapshots: @@ -8572,23 +8396,23 @@ snapshots: '@jridgewell/gen-mapping': 0.3.13 '@jridgewell/trace-mapping': 0.3.31 - '@angular/animations@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0))': + '@angular/animations@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1))': dependencies: - '@angular/core': 21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0) + '@angular/core': 21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1) tslib: 2.8.1 - '@angular/cdk@21.2.0-rc.0(@angular/common@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2))(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0))(@angular/platform-browser@21.2.0-rc.0(@angular/animations@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0)))(@angular/common@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2))(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0)))(rxjs@7.8.2)': + '@angular/cdk@21.2.0-rc.0(@angular/common@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@21.2.0-rc.0(@angular/animations@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1)))(rxjs@7.8.2)': dependencies: - '@angular/common': 21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2) - '@angular/core': 21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0) - '@angular/platform-browser': 21.2.0-rc.0(@angular/animations@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0)))(@angular/common@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2))(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0)) + '@angular/common': 21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2) + '@angular/core': 21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1) + '@angular/platform-browser': 21.2.0-rc.0(@angular/animations@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1)) parse5: 8.0.0 rxjs: 7.8.2 tslib: 2.8.1 - '@angular/common@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2)': + '@angular/common@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2)': dependencies: - '@angular/core': 21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0) + '@angular/core': 21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1) rxjs: 7.8.2 tslib: 2.8.1 @@ -8612,19 +8436,19 @@ snapshots: dependencies: tslib: 2.8.1 - '@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0)': + '@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1)': dependencies: rxjs: 7.8.2 tslib: 2.8.1 optionalDependencies: '@angular/compiler': 21.2.0-rc.0 - zone.js: 0.16.0 + zone.js: 0.16.1 - '@angular/forms@21.2.0-rc.0(@angular/common@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2))(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0))(@angular/platform-browser@21.2.0-rc.0(@angular/animations@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0)))(@angular/common@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2))(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0)))(rxjs@7.8.2)': + '@angular/forms@21.2.0-rc.0(@angular/common@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@21.2.0-rc.0(@angular/animations@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1)))(rxjs@7.8.2)': dependencies: - '@angular/common': 21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2) - '@angular/core': 21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0) - '@angular/platform-browser': 21.2.0-rc.0(@angular/animations@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0)))(@angular/common@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2))(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0)) + '@angular/common': 21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2) + '@angular/core': 21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1) + '@angular/platform-browser': 21.2.0-rc.0(@angular/animations@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1)) '@standard-schema/spec': 1.1.0 rxjs: 7.8.2 tslib: 2.8.1 @@ -8640,13 +8464,13 @@ snapshots: transitivePeerDependencies: - supports-color - '@angular/material@21.2.0-rc.0(4ac7caab525408b0a8d5509a5a82c8db)': + '@angular/material@21.2.0-rc.0(b10e235d889ab235dc2911d6ec167f08)': dependencies: - '@angular/cdk': 21.2.0-rc.0(@angular/common@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2))(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0))(@angular/platform-browser@21.2.0-rc.0(@angular/animations@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0)))(@angular/common@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2))(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0)))(rxjs@7.8.2) - '@angular/common': 21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2) - '@angular/core': 21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0) - '@angular/forms': 21.2.0-rc.0(@angular/common@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2))(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0))(@angular/platform-browser@21.2.0-rc.0(@angular/animations@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0)))(@angular/common@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2))(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0)))(rxjs@7.8.2) - '@angular/platform-browser': 21.2.0-rc.0(@angular/animations@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0)))(@angular/common@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2))(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0)) + '@angular/cdk': 21.2.0-rc.0(@angular/common@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@21.2.0-rc.0(@angular/animations@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1)))(rxjs@7.8.2) + '@angular/common': 21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2) + '@angular/core': 21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1) + '@angular/forms': 21.2.0-rc.0(@angular/common@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@21.2.0-rc.0(@angular/animations@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1)))(rxjs@7.8.2) + '@angular/platform-browser': 21.2.0-rc.0(@angular/animations@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1)) rxjs: 7.8.2 tslib: 2.8.1 @@ -8711,42 +8535,42 @@ snapshots: - '@modelcontextprotocol/sdk' - '@react-native-async-storage/async-storage' - '@angular/platform-browser@21.2.0-rc.0(@angular/animations@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0)))(@angular/common@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2))(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0))': + '@angular/platform-browser@21.2.0-rc.0(@angular/animations@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1))': dependencies: - '@angular/common': 21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2) - '@angular/core': 21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0) + '@angular/common': 21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2) + '@angular/core': 21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1) tslib: 2.8.1 optionalDependencies: - '@angular/animations': 21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0)) + '@angular/animations': 21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1)) - '@angular/platform-server@21.2.0-rc.0(@angular/common@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2))(@angular/compiler@21.2.0-rc.0)(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0))(@angular/platform-browser@21.2.0-rc.0(@angular/animations@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0)))(@angular/common@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2))(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0)))(rxjs@7.8.2)': + '@angular/platform-server@21.2.0-rc.0(@angular/common@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/compiler@21.2.0-rc.0)(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@21.2.0-rc.0(@angular/animations@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1)))(rxjs@7.8.2)': dependencies: - '@angular/common': 21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2) + '@angular/common': 21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2) '@angular/compiler': 21.2.0-rc.0 - '@angular/core': 21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0) - '@angular/platform-browser': 21.2.0-rc.0(@angular/animations@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0)))(@angular/common@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2))(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0)) + '@angular/core': 21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1) + '@angular/platform-browser': 21.2.0-rc.0(@angular/animations@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1)) rxjs: 7.8.2 tslib: 2.8.1 xhr2: 0.2.1 - '@angular/router@21.2.0-rc.0(@angular/common@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2))(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0))(@angular/platform-browser@21.2.0-rc.0(@angular/animations@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0)))(@angular/common@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2))(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0)))(rxjs@7.8.2)': + '@angular/router@21.2.0-rc.0(@angular/common@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@21.2.0-rc.0(@angular/animations@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1)))(rxjs@7.8.2)': dependencies: - '@angular/common': 21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2) - '@angular/core': 21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0) - '@angular/platform-browser': 21.2.0-rc.0(@angular/animations@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0)))(@angular/common@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2))(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0)) + '@angular/common': 21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2) + '@angular/core': 21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1) + '@angular/platform-browser': 21.2.0-rc.0(@angular/animations@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1)) rxjs: 7.8.2 tslib: 2.8.1 - '@angular/service-worker@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0))(rxjs@7.8.2)': + '@angular/service-worker@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2)': dependencies: - '@angular/core': 21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.0) + '@angular/core': 21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1) rxjs: 7.8.2 tslib: 2.8.1 - '@asamuzakjp/css-color@4.1.2': + '@asamuzakjp/css-color@5.0.1': dependencies: '@csstools/css-calc': 3.1.1(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) - '@csstools/css-color-parser': 4.0.1(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) + '@csstools/css-color-parser': 4.0.2(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) '@csstools/css-tokenizer': 4.0.0 lru-cache: 11.2.6 @@ -9451,16 +9275,16 @@ snapshots: conventional-commits-filter: 5.0.0 conventional-commits-parser: 6.2.1 - '@csstools/color-helpers@6.0.1': {} + '@csstools/color-helpers@6.0.2': {} '@csstools/css-calc@3.1.1(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0)': dependencies: '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) '@csstools/css-tokenizer': 4.0.0 - '@csstools/css-color-parser@4.0.1(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0)': + '@csstools/css-color-parser@4.0.2(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0)': dependencies: - '@csstools/color-helpers': 6.0.1 + '@csstools/color-helpers': 6.0.2 '@csstools/css-calc': 3.1.1(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) '@csstools/css-tokenizer': 4.0.0 @@ -9469,7 +9293,7 @@ snapshots: dependencies: '@csstools/css-tokenizer': 4.0.0 - '@csstools/css-syntax-patches-for-csstree@1.0.27': {} + '@csstools/css-syntax-patches-for-csstree@1.0.28': {} '@csstools/css-tokenizer@4.0.0': {} @@ -9607,7 +9431,7 @@ snapshots: dependencies: '@eslint/object-schema': 3.0.2 debug: 4.4.3(supports-color@10.2.2) - minimatch: 10.2.2 + minimatch: 10.2.4 transitivePeerDependencies: - supports-color @@ -9628,7 +9452,7 @@ snapshots: ignore: 5.3.2 import-fresh: 3.3.1 js-yaml: 4.1.1 - minimatch: 3.1.4 + minimatch: 3.1.5 strip-json-comments: 3.1.1 transitivePeerDependencies: - supports-color @@ -9977,7 +9801,7 @@ snapshots: arrify: 2.0.1 duplexify: 4.1.3 extend: 3.0.2 - google-auth-library: 10.5.0(supports-color@10.2.2) + google-auth-library: 10.6.1(supports-color@10.2.2) html-entities: 2.6.0 retry-request: 8.0.2(supports-color@10.2.2) teeny-request: 10.1.0(supports-color@10.2.2) @@ -10012,7 +9836,7 @@ snapshots: duplexify: 4.1.3 events-intercept: 2.0.0 extend: 3.0.2 - google-auth-library: 10.5.0(supports-color@10.2.2) + google-auth-library: 10.6.1(supports-color@10.2.2) google-gax: 5.0.6(supports-color@10.2.2) grpc-gcp: 1.0.1(protobufjs@7.5.4) is: 3.3.2 @@ -10031,7 +9855,7 @@ snapshots: '@google/genai@1.42.0(@modelcontextprotocol/sdk@1.27.1(zod@4.3.6))(bufferutil@4.1.0)(supports-color@10.2.2)(utf-8-validate@6.0.6)': dependencies: - google-auth-library: 10.5.0(supports-color@10.2.2) + google-auth-library: 10.6.1(supports-color@10.2.2) p-retry: 4.6.2 protobufjs: 7.5.4 ws: 8.19.0(bufferutil@4.1.0)(utf-8-validate@6.0.6) @@ -10069,9 +9893,9 @@ snapshots: '@harperfast/extended-iterable@1.0.3': optional: true - '@hono/node-server@1.19.9(hono@4.11.9)': + '@hono/node-server@1.19.9(hono@4.12.2)': dependencies: - hono: 4.11.9 + hono: 4.12.2 '@humanfs/core@0.19.1': {} @@ -10212,11 +10036,9 @@ snapshots: wrap-ansi: 8.1.0 wrap-ansi-cjs: wrap-ansi@7.0.0 - '@isaacs/cliui@9.0.0': {} - '@isaacs/fs-minipass@4.0.1': dependencies: - minipass: 7.1.2 + minipass: 7.1.3 '@istanbuljs/schema@0.1.3': {} @@ -10408,7 +10230,7 @@ snapshots: '@modelcontextprotocol/sdk@1.27.1(zod@4.3.6)': dependencies: - '@hono/node-server': 1.19.9(hono@4.11.9) + '@hono/node-server': 1.19.9(hono@4.12.2) ajv: 8.18.0 ajv-formats: 3.0.1(ajv@8.18.0) content-type: 1.0.5 @@ -10418,7 +10240,7 @@ snapshots: eventsource-parser: 3.0.6 express: 5.2.1 express-rate-limit: 8.2.1(express@5.2.1) - hono: 4.11.9 + hono: 4.12.2 jose: 6.1.3 json-schema-typed: 8.0.2 pkce-challenge: 5.0.1 @@ -10562,14 +10384,14 @@ snapshots: dependencies: semver: 7.7.4 - '@npmcli/git@7.0.1': + '@npmcli/git@7.0.2': dependencies: + '@gar/promise-retry': 1.0.2 '@npmcli/promise-spawn': 9.0.1 ini: 6.0.0 lru-cache: 11.2.6 npm-pick-manifest: 11.0.3 proc-log: 6.1.0 - promise-retry: 2.0.1 semver: 7.7.4 which: 6.0.1 @@ -10580,15 +10402,15 @@ snapshots: '@npmcli/node-gyp@5.0.0': {} - '@npmcli/package-json@7.0.4': + '@npmcli/package-json@7.0.5': dependencies: - '@npmcli/git': 7.0.1 - glob: 13.0.3 + '@npmcli/git': 7.0.2 + glob: 13.0.6 hosted-git-info: 9.0.2 json-parse-even-better-errors: 5.0.0 proc-log: 6.1.0 semver: 7.7.4 - validate-npm-package-license: 3.0.4 + spdx-expression-parse: 4.0.0 '@npmcli/promise-spawn@9.0.1': dependencies: @@ -10599,7 +10421,7 @@ snapshots: '@npmcli/run-script@10.0.3': dependencies: '@npmcli/node-gyp': 5.0.0 - '@npmcli/package-json': 7.0.4 + '@npmcli/package-json': 7.0.5 '@npmcli/promise-spawn': 9.0.1 node-gyp: 12.2.0 proc-log: 6.1.0 @@ -10611,7 +10433,7 @@ snapshots: dependencies: '@octokit/auth-oauth-app': 9.0.3 '@octokit/auth-oauth-user': 6.0.2 - '@octokit/request': 10.0.7 + '@octokit/request': 10.0.8 '@octokit/request-error': 7.1.0 '@octokit/types': 16.0.0 toad-cache: 3.7.0 @@ -10622,14 +10444,14 @@ snapshots: dependencies: '@octokit/auth-oauth-device': 8.0.3 '@octokit/auth-oauth-user': 6.0.2 - '@octokit/request': 10.0.7 + '@octokit/request': 10.0.8 '@octokit/types': 16.0.0 universal-user-agent: 7.0.3 '@octokit/auth-oauth-device@8.0.3': dependencies: '@octokit/oauth-methods': 6.0.2 - '@octokit/request': 10.0.7 + '@octokit/request': 10.0.8 '@octokit/types': 16.0.0 universal-user-agent: 7.0.3 @@ -10637,7 +10459,7 @@ snapshots: dependencies: '@octokit/auth-oauth-device': 8.0.3 '@octokit/oauth-methods': 6.0.2 - '@octokit/request': 10.0.7 + '@octokit/request': 10.0.8 '@octokit/types': 16.0.0 universal-user-agent: 7.0.3 @@ -10647,25 +10469,25 @@ snapshots: dependencies: '@octokit/auth-token': 6.0.0 '@octokit/graphql': 9.0.3 - '@octokit/request': 10.0.7 + '@octokit/request': 10.0.8 '@octokit/request-error': 7.1.0 '@octokit/types': 16.0.0 before-after-hook: 4.0.0 universal-user-agent: 7.0.3 - '@octokit/endpoint@11.0.2': + '@octokit/endpoint@11.0.3': dependencies: '@octokit/types': 16.0.0 universal-user-agent: 7.0.3 '@octokit/graphql-schema@15.26.1': dependencies: - graphql: 16.12.0 - graphql-tag: 2.12.6(graphql@16.12.0) + graphql: 16.13.0 + graphql-tag: 2.12.6(graphql@16.13.0) '@octokit/graphql@9.0.3': dependencies: - '@octokit/request': 10.0.7 + '@octokit/request': 10.0.8 '@octokit/types': 16.0.0 universal-user-agent: 7.0.3 @@ -10674,7 +10496,7 @@ snapshots: '@octokit/oauth-methods@6.0.2': dependencies: '@octokit/oauth-authorization-url': 8.0.0 - '@octokit/request': 10.0.7 + '@octokit/request': 10.0.8 '@octokit/request-error': 7.1.0 '@octokit/types': 16.0.0 @@ -10698,12 +10520,13 @@ snapshots: dependencies: '@octokit/types': 16.0.0 - '@octokit/request@10.0.7': + '@octokit/request@10.0.8': dependencies: - '@octokit/endpoint': 11.0.2 + '@octokit/endpoint': 11.0.3 '@octokit/request-error': 7.1.0 '@octokit/types': 16.0.0 fast-content-type-parse: 3.0.0 + json-with-bigint: 3.5.3 universal-user-agent: 7.0.3 '@octokit/rest@22.0.1': @@ -11023,157 +10846,82 @@ snapshots: optionalDependencies: rollup: 4.59.0 - '@rollup/rollup-android-arm-eabi@4.57.1': - optional: true - '@rollup/rollup-android-arm-eabi@4.59.0': optional: true - '@rollup/rollup-android-arm64@4.57.1': - optional: true - '@rollup/rollup-android-arm64@4.59.0': optional: true - '@rollup/rollup-darwin-arm64@4.57.1': - optional: true - '@rollup/rollup-darwin-arm64@4.59.0': optional: true - '@rollup/rollup-darwin-x64@4.57.1': - optional: true - '@rollup/rollup-darwin-x64@4.59.0': optional: true - '@rollup/rollup-freebsd-arm64@4.57.1': - optional: true - '@rollup/rollup-freebsd-arm64@4.59.0': optional: true - '@rollup/rollup-freebsd-x64@4.57.1': - optional: true - '@rollup/rollup-freebsd-x64@4.59.0': optional: true - '@rollup/rollup-linux-arm-gnueabihf@4.57.1': - optional: true - '@rollup/rollup-linux-arm-gnueabihf@4.59.0': optional: true - '@rollup/rollup-linux-arm-musleabihf@4.57.1': - optional: true - '@rollup/rollup-linux-arm-musleabihf@4.59.0': optional: true - '@rollup/rollup-linux-arm64-gnu@4.57.1': - optional: true - '@rollup/rollup-linux-arm64-gnu@4.59.0': optional: true - '@rollup/rollup-linux-arm64-musl@4.57.1': - optional: true - '@rollup/rollup-linux-arm64-musl@4.59.0': optional: true - '@rollup/rollup-linux-loong64-gnu@4.57.1': - optional: true - '@rollup/rollup-linux-loong64-gnu@4.59.0': optional: true - '@rollup/rollup-linux-loong64-musl@4.57.1': - optional: true - '@rollup/rollup-linux-loong64-musl@4.59.0': optional: true - '@rollup/rollup-linux-ppc64-gnu@4.57.1': - optional: true - '@rollup/rollup-linux-ppc64-gnu@4.59.0': optional: true - '@rollup/rollup-linux-ppc64-musl@4.57.1': - optional: true - '@rollup/rollup-linux-ppc64-musl@4.59.0': optional: true - '@rollup/rollup-linux-riscv64-gnu@4.57.1': - optional: true - '@rollup/rollup-linux-riscv64-gnu@4.59.0': optional: true - '@rollup/rollup-linux-riscv64-musl@4.57.1': - optional: true - '@rollup/rollup-linux-riscv64-musl@4.59.0': optional: true - '@rollup/rollup-linux-s390x-gnu@4.57.1': - optional: true - '@rollup/rollup-linux-s390x-gnu@4.59.0': optional: true - '@rollup/rollup-linux-x64-gnu@4.57.1': - optional: true - '@rollup/rollup-linux-x64-gnu@4.59.0': optional: true - '@rollup/rollup-linux-x64-musl@4.57.1': - optional: true - '@rollup/rollup-linux-x64-musl@4.59.0': optional: true - '@rollup/rollup-openbsd-x64@4.57.1': - optional: true - '@rollup/rollup-openbsd-x64@4.59.0': optional: true - '@rollup/rollup-openharmony-arm64@4.57.1': - optional: true - '@rollup/rollup-openharmony-arm64@4.59.0': optional: true - '@rollup/rollup-win32-arm64-msvc@4.57.1': - optional: true - '@rollup/rollup-win32-arm64-msvc@4.59.0': optional: true - '@rollup/rollup-win32-ia32-msvc@4.57.1': - optional: true - '@rollup/rollup-win32-ia32-msvc@4.59.0': optional: true - '@rollup/rollup-win32-x64-gnu@4.57.1': - optional: true - '@rollup/rollup-win32-x64-gnu@4.59.0': optional: true - '@rollup/rollup-win32-x64-msvc@4.57.1': - optional: true - '@rollup/rollup-win32-x64-msvc@4.59.0': optional: true - '@rollup/wasm-node@4.57.1': + '@rollup/wasm-node@4.59.0': dependencies: '@types/estree': 1.0.8 optionalDependencies: @@ -11194,7 +10942,7 @@ snapshots: '@sigstore/bundle': 4.0.0 '@sigstore/core': 3.1.0 '@sigstore/protobuf-specs': 0.5.0 - make-fetch-happen: 15.0.3 + make-fetch-happen: 15.0.4 proc-log: 6.1.0 promise-retry: 2.0.1 transitivePeerDependencies: @@ -11219,10 +10967,10 @@ snapshots: '@standard-schema/spec@1.1.0': {} - '@stylistic/eslint-plugin@5.8.0(eslint@10.0.2(jiti@2.6.1))': + '@stylistic/eslint-plugin@5.9.0(eslint@10.0.2(jiti@2.6.1))': dependencies: '@eslint-community/eslint-utils': 4.9.1(eslint@10.0.2(jiti@2.6.1)) - '@typescript-eslint/types': 8.55.0 + '@typescript-eslint/types': 8.56.1 eslint: 10.0.2(jiti@2.6.1) eslint-visitor-keys: 4.2.1 espree: 10.4.0 @@ -11244,7 +10992,7 @@ snapshots: '@tufjs/models@4.1.0': dependencies: '@tufjs/canonical-json': 2.0.0 - minimatch: 10.2.2 + minimatch: 10.2.4 '@tybys/wasm-util@0.10.1': dependencies: @@ -11410,7 +11158,7 @@ snapshots: - uglify-js - webpack-cli - '@types/lodash@4.17.23': {} + '@types/lodash@4.17.24': {} '@types/micromatch@2.3.35': dependencies: @@ -11601,8 +11349,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/types@8.55.0': {} - '@typescript-eslint/types@8.56.1': {} '@typescript-eslint/typescript-estree@8.56.1(typescript@5.9.3)': @@ -11612,7 +11358,7 @@ snapshots: '@typescript-eslint/types': 8.56.1 '@typescript-eslint/visitor-keys': 8.56.1 debug: 4.4.3(supports-color@10.2.2) - minimatch: 10.2.2 + minimatch: 10.2.4 semver: 7.7.4 tinyglobby: 0.2.15 ts-api-utils: 2.4.0(typescript@5.9.3) @@ -11955,16 +11701,14 @@ snapshots: mime-types: 3.0.2 negotiator: 1.0.0 - acorn-import-phases@1.0.4(acorn@8.15.0): + acorn-import-phases@1.0.4(acorn@8.16.0): dependencies: - acorn: 8.15.0 + acorn: 8.16.0 acorn-jsx@5.3.2(acorn@8.16.0): dependencies: acorn: 8.16.0 - acorn@8.15.0: {} - acorn@8.16.0: {} adjust-sourcemap-loader@4.0.0: @@ -12153,7 +11897,7 @@ snapshots: autoprefixer@10.4.24(postcss@8.5.6): dependencies: browserslist: 4.28.1 - caniuse-lite: 1.0.30001770 + caniuse-lite: 1.0.30001774 fraction.js: 5.3.4 picocolors: 1.1.1 postcss: 8.5.6 @@ -12167,7 +11911,7 @@ snapshots: aws4@1.13.2: {} - b4a@1.7.4: {} + b4a@1.8.0: {} babel-loader@10.0.0(@babel/core@7.29.0)(webpack@5.105.2(esbuild@0.27.3)): dependencies: @@ -12209,9 +11953,7 @@ snapshots: balanced-match@1.0.2: {} - balanced-match@4.0.2: - dependencies: - jackspeak: 4.2.3 + balanced-match@4.0.4: {} bare-events@2.8.2: {} @@ -12219,7 +11961,7 @@ snapshots: base64id@2.0.0: {} - baseline-browser-mapping@2.9.19: {} + baseline-browser-mapping@2.10.0: {} batch@0.6.1: {} @@ -12308,9 +12050,9 @@ snapshots: dependencies: balanced-match: 1.0.2 - brace-expansion@5.0.2: + brace-expansion@5.0.3: dependencies: - balanced-match: 4.0.2 + balanced-match: 4.0.4 braces@3.0.3: dependencies: @@ -12380,9 +12122,9 @@ snapshots: browserslist@4.28.1: dependencies: - baseline-browser-mapping: 2.9.19 - caniuse-lite: 1.0.30001770 - electron-to-chromium: 1.5.286 + baseline-browser-mapping: 2.10.0 + caniuse-lite: 1.0.30001774 + electron-to-chromium: 1.5.302 node-releases: 2.0.27 update-browserslist-db: 1.2.3(browserslist@4.28.1) @@ -12420,9 +12162,9 @@ snapshots: dependencies: '@npmcli/fs': 5.0.0 fs-minipass: 3.0.3 - glob: 13.0.3 + glob: 13.0.6 lru-cache: 11.2.6 - minipass: 7.1.2 + minipass: 7.1.3 minipass-collect: 2.0.1 minipass-flush: 1.0.5 minipass-pipeline: 1.2.4 @@ -12461,7 +12203,7 @@ snapshots: callsites@3.1.0: {} - caniuse-lite@1.0.30001770: {} + caniuse-lite@1.0.30001774: {} caseless@0.12.0: {} @@ -12523,7 +12265,7 @@ snapshots: cli-truncate@5.1.1: dependencies: slice-ansi: 7.1.2 - string-width: 8.1.1 + string-width: 8.2.0 cli-width@4.1.0: {} @@ -12732,10 +12474,10 @@ snapshots: cssesc@3.0.0: {} - cssstyle@6.0.1: + cssstyle@6.1.0: dependencies: - '@asamuzakjp/css-color': 4.1.2 - '@csstools/css-syntax-patches-for-csstree': 1.0.27 + '@asamuzakjp/css-color': 5.0.1 + '@csstools/css-syntax-patches-for-csstree': 1.0.28 css-tree: 3.1.0 lru-cache: 11.2.6 @@ -12750,7 +12492,7 @@ snapshots: data-urls@7.0.0: dependencies: whatwg-mimetype: 5.0.0 - whatwg-url: 16.0.0 + whatwg-url: 16.0.1 transitivePeerDependencies: - '@noble/hashes' @@ -12938,7 +12680,7 @@ snapshots: dependencies: jake: 10.9.4 - electron-to-chromium@1.5.286: {} + electron-to-chromium@1.5.302: {} emoji-regex@10.6.0: {} @@ -13185,7 +12927,7 @@ snapshots: hasown: 2.0.2 is-core-module: 2.16.1 is-glob: 4.0.3 - minimatch: 3.1.2 + minimatch: 3.1.5 object.fromentries: 2.0.8 object.groupby: 1.0.3 object.values: 1.2.1 @@ -13246,7 +12988,7 @@ snapshots: imurmurhash: 0.1.4 is-glob: 4.0.3 json-stable-stringify-without-jsonify: 1.0.1 - minimatch: 10.2.2 + minimatch: 10.2.4 natural-compare: 1.4.0 optionator: 0.9.4 optionalDependencies: @@ -13394,7 +13136,7 @@ snapshots: extract-zip@2.0.1: dependencies: - debug: 4.4.3(supports-color@10.2.2) + debug: 4.3.4 get-stream: 5.2.0 yauzl: 2.10.0 optionalDependencies: @@ -13459,9 +13201,9 @@ snapshots: dependencies: flat-cache: 4.0.1 - filelist@1.0.4: + filelist@1.0.5: dependencies: - minimatch: 5.1.6 + minimatch: 10.2.3 fill-range@7.1.1: dependencies: @@ -13628,7 +13370,7 @@ snapshots: fs-minipass@3.0.3: dependencies: - minipass: 7.1.2 + minipass: 7.1.3 fs.realpath@1.0.0: {} @@ -13671,8 +13413,6 @@ snapshots: get-caller-file@2.0.5: {} - get-east-asian-width@1.4.0: {} - get-east-asian-width@1.5.0: {} get-intrinsic@1.3.0: @@ -13741,23 +13481,23 @@ snapshots: dependencies: foreground-child: 3.3.1 jackspeak: 3.4.3 - minimatch: 9.0.5 - minipass: 7.1.2 + minimatch: 9.0.8 + minipass: 7.1.3 package-json-from-dist: 1.0.1 path-scurry: 1.11.1 - glob@13.0.3: + glob@13.0.6: dependencies: - minimatch: 10.2.2 - minipass: 7.1.2 - path-scurry: 2.0.1 + minimatch: 10.2.4 + minipass: 7.1.3 + path-scurry: 2.0.2 glob@7.2.3: dependencies: fs.realpath: 1.0.0 inflight: 1.0.6 inherits: 2.0.4 - minimatch: 3.1.4 + minimatch: 3.1.5 once: 1.4.0 path-is-absolute: 1.0.1 @@ -13770,14 +13510,13 @@ snapshots: define-properties: 1.2.1 gopd: 1.2.0 - google-auth-library@10.5.0(supports-color@10.2.2): + google-auth-library@10.6.1(supports-color@10.2.2): dependencies: base64-js: 1.5.1 ecdsa-sig-formatter: 1.0.11 gaxios: 7.1.3(supports-color@10.2.2) gcp-metadata: 8.1.2(supports-color@10.2.2) google-logging-utils: 1.1.3 - gtoken: 8.0.0(supports-color@10.2.2) jws: 4.0.1 transitivePeerDependencies: - supports-color @@ -13787,7 +13526,7 @@ snapshots: '@grpc/grpc-js': 1.14.3 '@grpc/proto-loader': 0.8.0 duplexify: 4.1.3 - google-auth-library: 10.5.0(supports-color@10.2.2) + google-auth-library: 10.6.1(supports-color@10.2.2) google-logging-utils: 1.1.3 node-fetch: 3.3.2 object-hash: 3.0.0 @@ -13819,25 +13558,18 @@ snapshots: graceful-fs@4.2.11: {} - graphql-tag@2.12.6(graphql@16.12.0): + graphql-tag@2.12.6(graphql@16.13.0): dependencies: - graphql: 16.12.0 + graphql: 16.13.0 tslib: 2.8.1 - graphql@16.12.0: {} + graphql@16.13.0: {} grpc-gcp@1.0.1(protobufjs@7.5.4): dependencies: '@grpc/grpc-js': 1.14.3 protobufjs: 7.5.4 - gtoken@8.0.0(supports-color@10.2.2): - dependencies: - gaxios: 7.1.3(supports-color@10.2.2) - jws: 4.0.1 - transitivePeerDependencies: - - supports-color - gunzip-maybe@1.4.2: dependencies: browserify-zlib: 0.1.4 @@ -13880,7 +13612,7 @@ snapshots: dependencies: function-bind: 1.1.2 - hono@4.11.9: {} + hono@4.12.2: {} hosted-git-info@9.0.2: dependencies: @@ -14039,7 +13771,7 @@ snapshots: ignore-walk@8.0.0: dependencies: - minimatch: 10.2.2 + minimatch: 10.2.4 ignore@5.3.2: {} @@ -14146,7 +13878,7 @@ snapshots: is-fullwidth-code-point@5.1.0: dependencies: - get-east-asian-width: 1.4.0 + get-east-asian-width: 1.5.0 is-generator-function@1.1.2: dependencies: @@ -14327,14 +14059,10 @@ snapshots: optionalDependencies: '@pkgjs/parseargs': 0.11.0 - jackspeak@4.2.3: - dependencies: - '@isaacs/cliui': 9.0.0 - jake@10.9.4: dependencies: async: 3.2.6 - filelist: 1.0.4 + filelist: 1.0.5 picocolors: 1.1.1 jasmine-core@4.6.1: {} @@ -14353,7 +14081,7 @@ snapshots: jasmine@6.1.0: dependencies: '@jasminejs/reporters': 1.0.0 - glob: 13.0.3 + glob: 13.0.6 jasmine-core: 6.1.0 jest-worker@27.5.1: @@ -14384,7 +14112,7 @@ snapshots: '@asamuzakjp/dom-selector': 6.8.1 '@bramus/specificity': 2.4.2 '@exodus/bytes': 1.14.1 - cssstyle: 6.0.1 + cssstyle: 6.1.0 data-urls: 7.0.0 decimal.js: 10.6.0 html-encoding-sniffer: 6.0.0 @@ -14399,7 +14127,7 @@ snapshots: w3c-xmlserializer: 5.0.0 webidl-conversions: 8.0.1 whatwg-mimetype: 5.0.0 - whatwg-url: 16.0.0 + whatwg-url: 16.0.1 xml-name-validator: 5.0.0 transitivePeerDependencies: - '@noble/hashes' @@ -14429,6 +14157,8 @@ snapshots: json-stringify-safe@5.0.1: {} + json-with-bigint@3.5.3: {} + json5@1.0.2: dependencies: minimist: 1.2.8 @@ -14489,7 +14219,7 @@ snapshots: istanbul-lib-report: 3.0.1 istanbul-lib-source-maps: 4.0.1 istanbul-reports: 3.2.0 - minimatch: 3.1.2 + minimatch: 3.1.5 transitivePeerDependencies: - supports-color @@ -14524,7 +14254,7 @@ snapshots: lodash: 4.17.23 log4js: 6.9.1 mime: 2.6.0 - minimatch: 3.1.2 + minimatch: 3.1.5 mkdirp: 0.5.6 qjobs: 1.2.0 range-parser: 1.2.1 @@ -14546,7 +14276,7 @@ snapshots: kind-of@6.0.3: {} - launch-editor@2.12.0: + launch-editor@2.13.1: dependencies: picocolors: 1.1.1 shell-quote: 1.8.3 @@ -14722,18 +14452,18 @@ snapshots: dependencies: semver: 7.7.4 - make-fetch-happen@15.0.3: + make-fetch-happen@15.0.4: dependencies: + '@gar/promise-retry': 1.0.2 '@npmcli/agent': 4.0.0 cacache: 20.0.3 http-cache-semantics: 4.2.0 - minipass: 7.1.2 - minipass-fetch: 5.0.1 + minipass: 7.1.3 + minipass-fetch: 5.0.2 minipass-flush: 1.0.5 minipass-pipeline: 1.2.4 negotiator: 1.0.0 proc-log: 6.1.0 - promise-retry: 2.0.1 ssri: 13.0.1 transitivePeerDependencies: - supports-color @@ -14812,47 +14542,39 @@ snapshots: minimalistic-assert@1.0.1: {} - minimatch@10.2.2: - dependencies: - brace-expansion: 5.0.2 - minimatch@10.2.3: dependencies: - brace-expansion: 5.0.2 + brace-expansion: 5.0.3 - minimatch@3.1.2: + minimatch@10.2.4: dependencies: - brace-expansion: 1.1.12 + brace-expansion: 5.0.3 - minimatch@3.1.4: + minimatch@3.1.5: dependencies: brace-expansion: 1.1.12 - minimatch@5.1.6: - dependencies: - brace-expansion: 2.0.2 - minimatch@7.4.6: dependencies: brace-expansion: 2.0.2 - minimatch@9.0.5: + minimatch@9.0.8: dependencies: - brace-expansion: 2.0.2 + brace-expansion: 5.0.3 minimist@1.2.8: {} minipass-collect@2.0.1: dependencies: - minipass: 7.1.2 + minipass: 7.1.3 - minipass-fetch@5.0.1: + minipass-fetch@5.0.2: dependencies: - minipass: 7.1.2 + minipass: 7.1.3 minipass-sized: 2.0.0 minizlib: 3.1.0 optionalDependencies: - encoding: 0.1.13 + iconv-lite: 0.7.2 minipass-flush@1.0.5: dependencies: @@ -14864,17 +14586,17 @@ snapshots: minipass-sized@2.0.0: dependencies: - minipass: 7.1.2 + minipass: 7.1.3 minipass@3.3.6: dependencies: yallist: 4.0.0 - minipass@7.1.2: {} + minipass@7.1.3: {} minizlib@3.1.0: dependencies: - minipass: 7.1.2 + minipass: 7.1.3 mitt@1.2.0: {} @@ -14947,7 +14669,7 @@ snapshots: '@ampproject/remapping': 2.3.0 '@angular/compiler-cli': 21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(typescript@5.9.3) '@rollup/plugin-json': 6.1.0(rollup@4.59.0) - '@rollup/wasm-node': 4.57.1 + '@rollup/wasm-node': 4.59.0 ajv: 8.18.0 ansi-colors: 4.1.3 browserslist: 4.28.1 @@ -15017,7 +14739,7 @@ snapshots: env-paths: 2.2.1 exponential-backoff: 3.1.3 graceful-fs: 4.2.11 - make-fetch-happen: 15.0.3 + make-fetch-happen: 15.0.4 nopt: 9.0.0 proc-log: 6.1.0 semver: 7.7.4 @@ -15054,7 +14776,7 @@ snapshots: semver: 7.7.4 validate-npm-package-name: 7.0.2 - npm-packlist@10.0.3: + npm-packlist@10.0.4: dependencies: ignore-walk: 8.0.0 proc-log: 6.1.0 @@ -15070,9 +14792,9 @@ snapshots: dependencies: '@npmcli/redact': 4.0.0 jsonparse: 1.3.1 - make-fetch-happen: 15.0.3 - minipass: 7.1.2 - minipass-fetch: 5.0.1 + make-fetch-happen: 15.0.4 + minipass: 7.1.3 + minipass-fetch: 5.0.2 minizlib: 3.1.0 npm-package-arg: 13.0.2 proc-log: 6.1.0 @@ -15182,7 +14904,7 @@ snapshots: is-unicode-supported: 2.1.0 log-symbols: 7.0.1 stdin-discarder: 0.3.1 - string-width: 8.1.1 + string-width: 8.2.0 ordered-binary@1.6.1: optional: true @@ -15234,16 +14956,16 @@ snapshots: pacote@21.4.0: dependencies: '@gar/promise-retry': 1.0.2 - '@npmcli/git': 7.0.1 + '@npmcli/git': 7.0.2 '@npmcli/installed-package-contents': 4.0.0 - '@npmcli/package-json': 7.0.4 + '@npmcli/package-json': 7.0.5 '@npmcli/promise-spawn': 9.0.1 '@npmcli/run-script': 10.0.3 cacache: 20.0.3 fs-minipass: 3.0.3 - minipass: 7.1.2 + minipass: 7.1.3 npm-package-arg: 13.0.2 - npm-packlist: 10.0.3 + npm-packlist: 10.0.4 npm-pick-manifest: 11.0.3 npm-registry-fetch: 19.1.1 proc-log: 6.1.0 @@ -15297,12 +15019,12 @@ snapshots: path-scurry@1.11.1: dependencies: lru-cache: 10.4.3 - minipass: 7.1.2 + minipass: 7.1.3 - path-scurry@2.0.1: + path-scurry@2.0.2: dependencies: lru-cache: 11.2.6 - minipass: 7.1.2 + minipass: 7.1.3 path-to-regexp@0.1.12: {} @@ -15718,7 +15440,7 @@ snapshots: resp-modifier@6.0.2: dependencies: debug: 2.6.9 - minimatch: 3.1.2 + minimatch: 3.1.5 transitivePeerDependencies: - supports-color @@ -15795,37 +15517,6 @@ snapshots: optionalDependencies: '@types/node': 22.19.11 - rollup@4.57.1: - dependencies: - '@types/estree': 1.0.8 - optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.57.1 - '@rollup/rollup-android-arm64': 4.57.1 - '@rollup/rollup-darwin-arm64': 4.57.1 - '@rollup/rollup-darwin-x64': 4.57.1 - '@rollup/rollup-freebsd-arm64': 4.57.1 - '@rollup/rollup-freebsd-x64': 4.57.1 - '@rollup/rollup-linux-arm-gnueabihf': 4.57.1 - '@rollup/rollup-linux-arm-musleabihf': 4.57.1 - '@rollup/rollup-linux-arm64-gnu': 4.57.1 - '@rollup/rollup-linux-arm64-musl': 4.57.1 - '@rollup/rollup-linux-loong64-gnu': 4.57.1 - '@rollup/rollup-linux-loong64-musl': 4.57.1 - '@rollup/rollup-linux-ppc64-gnu': 4.57.1 - '@rollup/rollup-linux-ppc64-musl': 4.57.1 - '@rollup/rollup-linux-riscv64-gnu': 4.57.1 - '@rollup/rollup-linux-riscv64-musl': 4.57.1 - '@rollup/rollup-linux-s390x-gnu': 4.57.1 - '@rollup/rollup-linux-x64-gnu': 4.57.1 - '@rollup/rollup-linux-x64-musl': 4.57.1 - '@rollup/rollup-openbsd-x64': 4.57.1 - '@rollup/rollup-openharmony-arm64': 4.57.1 - '@rollup/rollup-win32-arm64-msvc': 4.57.1 - '@rollup/rollup-win32-ia32-msvc': 4.57.1 - '@rollup/rollup-win32-x64-gnu': 4.57.1 - '@rollup/rollup-win32-x64-msvc': 4.57.1 - fsevents: 2.3.3 - rollup@4.59.0: dependencies: '@types/estree': 1.0.8 @@ -16196,23 +15887,23 @@ snapshots: source-map@0.7.6: {} - spdx-correct@3.2.0: - dependencies: - spdx-expression-parse: 3.0.1 - spdx-license-ids: 3.0.22 - spdx-exceptions@2.5.0: {} spdx-expression-parse@3.0.1: dependencies: spdx-exceptions: 2.5.0 - spdx-license-ids: 3.0.22 + spdx-license-ids: 3.0.23 + + spdx-expression-parse@4.0.0: + dependencies: + spdx-exceptions: 2.5.0 + spdx-license-ids: 3.0.23 spdx-expression-validate@2.0.0: dependencies: spdx-expression-parse: 3.0.1 - spdx-license-ids@3.0.22: {} + spdx-license-ids@3.0.23: {} spdy-transport@3.0.0: dependencies: @@ -16260,11 +15951,11 @@ snapshots: ssri@10.0.5: dependencies: - minipass: 7.1.2 + minipass: 7.1.3 ssri@13.0.1: dependencies: - minipass: 7.1.2 + minipass: 7.1.3 stack-trace@0.0.10: {} @@ -16314,7 +16005,7 @@ snapshots: dependencies: events-universal: 1.0.1 fast-fifo: 1.3.2 - text-decoder: 1.2.6 + text-decoder: 1.2.7 transitivePeerDependencies: - bare-abort-controller - react-native-b4a @@ -16336,12 +16027,7 @@ snapshots: string-width@7.2.0: dependencies: emoji-regex: 10.6.0 - get-east-asian-width: 1.4.0 - strip-ansi: 7.1.2 - - string-width@8.1.1: - dependencies: - get-east-asian-width: 1.4.0 + get-east-asian-width: 1.5.0 strip-ansi: 7.1.2 string-width@8.2.0: @@ -16427,7 +16113,7 @@ snapshots: tar-stream@3.1.7: dependencies: - b4a: 1.7.4 + b4a: 1.8.0 fast-fifo: 1.3.2 streamx: 2.23.0 transitivePeerDependencies: @@ -16438,7 +16124,7 @@ snapshots: dependencies: '@isaacs/fs-minipass': 4.0.1 chownr: 3.0.0 - minipass: 7.1.2 + minipass: 7.1.3 minizlib: 3.1.0 yallist: 5.0.0 @@ -16465,13 +16151,13 @@ snapshots: terser@5.46.0: dependencies: '@jridgewell/source-map': 0.3.11 - acorn: 8.15.0 + acorn: 8.16.0 commander: 2.20.3 source-map-support: 0.5.21 - text-decoder@1.2.6: + text-decoder@1.2.7: dependencies: - b4a: 1.7.4 + b4a: 1.8.0 transitivePeerDependencies: - react-native-b4a @@ -16581,7 +16267,7 @@ snapshots: dependencies: '@tufjs/models': 4.1.0 debug: 4.4.3(supports-color@10.2.2) - make-fetch-happen: 15.0.3 + make-fetch-happen: 15.0.4 transitivePeerDependencies: - supports-color @@ -16743,11 +16429,6 @@ snapshots: uuid@8.3.2: {} - validate-npm-package-license@3.0.4: - dependencies: - spdx-correct: 3.2.0 - spdx-expression-parse: 3.0.1 - validate-npm-package-name@7.0.2: {} validator@13.15.26: {} @@ -16834,7 +16515,7 @@ snapshots: fdir: 6.5.0(picomatch@4.0.3) picomatch: 4.0.3 postcss: 8.5.6 - rollup: 4.57.1 + rollup: 4.59.0 tinyglobby: 0.2.15 optionalDependencies: '@types/node': 24.10.13 @@ -16944,7 +16625,7 @@ snapshots: graceful-fs: 4.2.11 http-proxy-middleware: 2.0.9(@types/express@4.17.25) ipaddr.js: 2.3.0 - launch-editor: 2.12.0 + launch-editor: 2.13.1 open: 10.2.0 p-retry: 6.2.1 schema-utils: 4.3.3 @@ -16984,8 +16665,8 @@ snapshots: '@webassemblyjs/ast': 1.14.1 '@webassemblyjs/wasm-edit': 1.14.1 '@webassemblyjs/wasm-parser': 1.14.1 - acorn: 8.15.0 - acorn-import-phases: 1.0.4(acorn@8.15.0) + acorn: 8.16.0 + acorn-import-phases: 1.0.4(acorn@8.16.0) browserslist: 4.28.1 chrome-trace-event: 1.0.4 enhanced-resolve: 5.19.0 @@ -17018,7 +16699,7 @@ snapshots: whatwg-mimetype@5.0.0: {} - whatwg-url@16.0.0: + whatwg-url@16.0.1: dependencies: '@exodus/bytes': 1.14.1 tr46: 6.0.0 @@ -17214,4 +16895,4 @@ snapshots: zod@4.3.6: {} - zone.js@0.16.0: {} + zone.js@0.16.1: {} From 27cd355619aad140dfc221c6bd161f4a981e0f3b Mon Sep 17 00:00:00 2001 From: Alan Agius <17563226+alan-agius4@users.noreply.github.com> Date: Wed, 25 Feb 2026 13:55:34 +0000 Subject: [PATCH 057/226] refactor(@angular/ssr): remove CSR fallback for invalid hosts Previously, when a request contained an unrecognized host header, the server would fallback to serving the client-side application (CSR) as a temporary migration path. This commit removes this fallback behavior. Requests with invalid or unrecognized host headers will now strictly return a 400 Bad Request response. BREAKING CHANGE: The server no longer falls back to Client-Side Rendering (CSR) when a request fails host validation. Requests with unrecognized 'Host' headers will now return a 400 Bad Request status code. Users must ensure all valid hosts are correctly configured in the 'allowedHosts' option. --- packages/angular/ssr/node/src/app-engine.ts | 3 +- .../node/src/common-engine/common-engine.ts | 17 -- packages/angular/ssr/src/app-engine.ts | 43 ++-- packages/angular/ssr/src/app.ts | 21 -- packages/angular/ssr/test/app-engine_spec.ts | 191 +++++++----------- 5 files changed, 85 insertions(+), 190 deletions(-) diff --git a/packages/angular/ssr/node/src/app-engine.ts b/packages/angular/ssr/node/src/app-engine.ts index 29eb1fd366ab..7f7d3017a846 100644 --- a/packages/angular/ssr/node/src/app-engine.ts +++ b/packages/angular/ssr/node/src/app-engine.ts @@ -60,8 +60,7 @@ export class AngularNodeAppEngine { * @remarks * To prevent potential Server-Side Request Forgery (SSRF), this function verifies the hostname * of the `request.url` against a list of authorized hosts. - * If the hostname is not recognized and `allowedHosts` is not empty, a Client-Side Rendered (CSR) version of the - * page is returned otherwise a 400 Bad Request is returned. + * If the hostname is not recognized a 400 Bad Request is returned. * * Resolution: * Authorize your hostname by configuring `allowedHosts` in `angular.json` in: diff --git a/packages/angular/ssr/node/src/common-engine/common-engine.ts b/packages/angular/ssr/node/src/common-engine/common-engine.ts index 1c130d9abe86..b44c2c5255ca 100644 --- a/packages/angular/ssr/node/src/common-engine/common-engine.ts +++ b/packages/angular/ssr/node/src/common-engine/common-engine.ts @@ -92,29 +92,12 @@ export class CommonEngine { try { validateUrl(urlObj, this.allowedHosts); } catch (error) { - const isAllowedHostConfigured = this.allowedHosts.size > 0; // eslint-disable-next-line no-console console.error( `ERROR: ${(error as Error).message}` + 'Please provide a list of allowed hosts in the "allowedHosts" option in the "CommonEngine" constructor.', - isAllowedHostConfigured - ? '' - : '\nFalling back to client side rendering. This will become a 400 Bad Request in a future major version.', ); - if (!isAllowedHostConfigured) { - // Fallback to CSR to avoid a breaking change. - // TODO(alanagius): Return a 400 and remove this fallback in the next major version (v22). - let document = opts.document; - if (!document && opts.documentFilePath) { - document = opts.document ?? (await this.getDocument(opts.documentFilePath)); - } - - if (document) { - return document; - } - } - throw error; } } diff --git a/packages/angular/ssr/src/app-engine.ts b/packages/angular/ssr/src/app-engine.ts index 0ba82002dcef..3b9d468d70b9 100644 --- a/packages/angular/ssr/src/app-engine.ts +++ b/packages/angular/ssr/src/app-engine.ts @@ -95,8 +95,8 @@ export class AngularAppEngine { * @remarks * To prevent potential Server-Side Request Forgery (SSRF), this function verifies the hostname * of the `request.url` against a list of authorized hosts. - * If the hostname is not recognized and `allowedHosts` is not empty, a Client-Side Rendered (CSR) version of the - * page is returned otherwise a 400 Bad Request is returned. + * If the hostname is not recognized a 400 Bad Request is returned. + * * Resolution: * Authorize your hostname by configuring `allowedHosts` in `angular.json` in: * `projects.[project-name].architect.build.options.security.allowedHosts`. @@ -110,7 +110,7 @@ export class AngularAppEngine { try { validateRequest(request, allowedHost); } catch (error) { - return this.handleValidationError(error as Error, request); + return this.handleValidationError(request.url, error as Error); } // Clone request with patched headers to prevent unallowed host header access. @@ -120,7 +120,9 @@ export class AngularAppEngine { const serverApp = await this.getAngularServerAppForRequest(securedRequest); if (serverApp) { return Promise.race([ - onHeaderValidationError.then((error) => this.handleValidationError(error, securedRequest)), + onHeaderValidationError.then((error) => + this.handleValidationError(securedRequest.url, error), + ), serverApp.handle(securedRequest, requestContext), ]); } @@ -255,38 +257,23 @@ export class AngularAppEngine { /** * Handles validation errors by logging the error and returning an appropriate response. * + * @param url - The URL of the request. * @param error - The validation error to handle. - * @param request - The HTTP request that caused the validation error. - * @returns A promise that resolves to a `Response` object with a 400 status code if allowed hosts are configured, - * or `null` if allowed hosts are not configured (in which case the request is served client-side). + * @returns A `Response` object with a 400 status code. */ - private async handleValidationError(error: Error, request: Request): Promise { - const isAllowedHostConfigured = this.allowedHosts.size > 0; + private handleValidationError(url: string, error: Error): Response { const errorMessage = error.message; - // eslint-disable-next-line no-console console.error( - `ERROR: Bad Request ("${request.url}").\n` + + `ERROR: Bad Request ("${url}").\n` + errorMessage + - (isAllowedHostConfigured - ? '' - : '\nFalling back to client side rendering. This will become a 400 Bad Request in a future major version.') + '\n\nFor more information, see https://angular.dev/best-practices/security#preventing-server-side-request-forgery-ssrf', ); - if (isAllowedHostConfigured) { - // Allowed hosts has been configured incorrectly, thus we can return a 400 bad request. - return new Response(errorMessage, { - status: 400, - statusText: 'Bad Request', - headers: { 'Content-Type': 'text/plain' }, - }); - } - - // Fallback to CSR to avoid a breaking change. - // TODO(alanagius): Return a 400 and remove this fallback in the next major version (v22). - const serverApp = await this.getAngularServerAppForRequest(request); - - return serverApp?.serveClientSidePage() ?? null; + return new Response(errorMessage, { + status: 400, + statusText: 'Bad Request', + headers: { 'Content-Type': 'text/plain' }, + }); } } diff --git a/packages/angular/ssr/src/app.ts b/packages/angular/ssr/src/app.ts index 76296ebe737d..96afaa44c8d6 100644 --- a/packages/angular/ssr/src/app.ts +++ b/packages/angular/ssr/src/app.ts @@ -484,27 +484,6 @@ export class AngularServerApp { return html; } - - /** - * Serves the client-side version of the application. - * TODO(alanagius): Remove this method in version 22. - * @internal - */ - async serveClientSidePage(): Promise { - const { - manifest: { locale }, - assets, - } = this; - - const html = await assets.getServerAsset('index.csr.html').text(); - - return new Response(html, { - headers: new Headers({ - 'Content-Type': 'text/html;charset=UTF-8', - ...(locale !== undefined ? { 'Content-Language': locale } : {}), - }), - }); - } } let angularServerApp: AngularServerApp | undefined; diff --git a/packages/angular/ssr/test/app-engine_spec.ts b/packages/angular/ssr/test/app-engine_spec.ts index 29d638a8c13f..7693c6158a38 100644 --- a/packages/angular/ssr/test/app-engine_spec.ts +++ b/packages/angular/ssr/test/app-engine_spec.ts @@ -290,140 +290,87 @@ describe('AngularAppEngine', () => { describe('Invalid host headers', () => { let consoleErrorSpy: jasmine.Spy; - describe('with allowed hosts configured', () => { - beforeAll(() => { - setAngularAppEngineManifest({ - allowedHosts: ['example.com'], - entryPoints: { - '': async () => { - setAngularAppTestingManifest( - [{ path: 'home', component: TestHomeComponent }], - [{ path: '**', renderMode: RenderMode.Server }], - ); - - return { - ɵgetOrCreateAngularServerApp: getOrCreateAngularServerApp, - ɵdestroyAngularServerApp: destroyAngularServerApp, - }; - }, - }, - basePath: '/', - supportedLocales: { 'en-US': '' }, - }); - - appEngine = new AngularAppEngine(); - }); - - beforeEach(() => { - consoleErrorSpy = spyOn(console, 'error'); - }); - - it('should return 400 when disallowed host', async () => { - const request = new Request('https://evil.com'); - const response = await appEngine.handle(request); - expect(response).not.toBeNull(); - expect(response?.status).toBe(400); - expect(await response?.text()).toContain('URL with hostname "evil.com" is not allowed.'); - expect(consoleErrorSpy).toHaveBeenCalledWith( - jasmine.stringMatching('URL with hostname "evil.com" is not allowed.'), - ); - }); - - it('should return 400 when disallowed host header', async () => { - const request = new Request('https://example.com/home', { - headers: { 'host': 'evil.com' }, - }); - const response = await appEngine.handle(request); - expect(response).not.toBeNull(); - expect(response?.status).toBe(400); - expect(await response?.text()).toContain( - 'Header "host" with value "evil.com" is not allowed.', - ); - expect(consoleErrorSpy).toHaveBeenCalledWith( - jasmine.stringMatching('Header "host" with value "evil.com" is not allowed.'), - ); - }); + beforeAll(() => { + setAngularAppEngineManifest({ + allowedHosts: ['example.com'], + entryPoints: { + '': async () => { + setAngularAppTestingManifest( + [{ path: 'home', component: TestHomeComponent }], + [{ path: '**', renderMode: RenderMode.Server }], + ); - it('should return 400 when disallowed x-forwarded-host header', async () => { - const request = new Request('https://example.com/home', { - headers: { 'x-forwarded-host': 'evil.com' }, - }); - const response = await appEngine.handle(request); - expect(response).not.toBeNull(); - expect(response?.status).toBe(400); - expect(await response?.text()).toContain( - 'Header "x-forwarded-host" with value "evil.com" is not allowed.', - ); - expect(consoleErrorSpy).toHaveBeenCalledWith( - jasmine.stringMatching('Header "x-forwarded-host" with value "evil.com" is not allowed.'), - ); + return { + ɵgetOrCreateAngularServerApp: getOrCreateAngularServerApp, + ɵdestroyAngularServerApp: destroyAngularServerApp, + }; + }, + }, + basePath: '/', + supportedLocales: { 'en-US': '' }, }); - it('should return 400 when host with path separator', async () => { - const request = new Request('https://example.com/home', { - headers: { 'host': 'example.com/evil' }, - }); - const response = await appEngine.handle(request); - expect(response).not.toBeNull(); - expect(response?.status).toBe(400); - expect(await response?.text()).toContain( - 'Header "host" contains characters that are not allowed.', - ); - expect(consoleErrorSpy).toHaveBeenCalledWith( - jasmine.stringMatching('Header "host" contains characters that are not allowed.'), - ); - }); + appEngine = new AngularAppEngine(); }); - describe('without allowed hosts configured', () => { - beforeAll(() => { - setAngularAppEngineManifest({ - allowedHosts: [], - entryPoints: { - '': async () => { - setAngularAppTestingManifest( - [{ path: 'home', component: TestHomeComponent }], - [{ path: '**', renderMode: RenderMode.Server }], - ); - - return { - ɵgetOrCreateAngularServerApp: getOrCreateAngularServerApp, - ɵdestroyAngularServerApp: destroyAngularServerApp, - }; - }, - }, - basePath: '/', - supportedLocales: { 'en-US': '' }, - }); + beforeEach(() => { + consoleErrorSpy = spyOn(console, 'error'); + }); - appEngine = new AngularAppEngine(); - }); + it('should return 400 when disallowed host', async () => { + const request = new Request('https://evil.com'); + const response = await appEngine.handle(request); + expect(response).not.toBeNull(); + expect(response?.status).toBe(400); + expect(await response?.text()).toContain('URL with hostname "evil.com" is not allowed.'); + expect(consoleErrorSpy).toHaveBeenCalledWith( + jasmine.stringMatching('URL with hostname "evil.com" is not allowed.'), + ); + }); - beforeEach(() => { - consoleErrorSpy = spyOn(console, 'error'); + it('should return 400 when disallowed host header', async () => { + const request = new Request('https://example.com/home', { + headers: { 'host': 'evil.com' }, }); + const response = await appEngine.handle(request); + expect(response).not.toBeNull(); + expect(response?.status).toBe(400); + expect(await response?.text()).toContain( + 'Header "host" with value "evil.com" is not allowed.', + ); + expect(consoleErrorSpy).toHaveBeenCalledWith( + jasmine.stringMatching('Header "host" with value "evil.com" is not allowed.'), + ); + }); - it('should log error and fallback to CSR when disallowed host', async () => { - const request = new Request('https://example.com'); - const response = await appEngine.handle(request); - expect(response).not.toBeNull(); - expect(await response?.text()).toContain('CSR page'); - expect(consoleErrorSpy).toHaveBeenCalledWith( - jasmine.stringMatching('URL with hostname "example.com" is not allowed.'), - ); + it('should return 400 when disallowed x-forwarded-host header', async () => { + const request = new Request('https://example.com/home', { + headers: { 'x-forwarded-host': 'evil.com' }, }); + const response = await appEngine.handle(request); + expect(response).not.toBeNull(); + expect(response?.status).toBe(400); + expect(await response?.text()).toContain( + 'Header "x-forwarded-host" with value "evil.com" is not allowed.', + ); + expect(consoleErrorSpy).toHaveBeenCalledWith( + jasmine.stringMatching('Header "x-forwarded-host" with value "evil.com" is not allowed.'), + ); + }); - it('should log error and fallback to CSR when host with path separator', async () => { - const request = new Request('https://example.com/home', { - headers: { 'host': 'example.com/evil' }, - }); - const response = await appEngine.handle(request); - expect(response).not.toBeNull(); - expect(await response?.text()).toContain('CSR page'); - expect(consoleErrorSpy).toHaveBeenCalledWith( - jasmine.stringMatching('Header "host" contains characters that are not allowed.'), - ); + it('should return 400 when host with path separator', async () => { + const request = new Request('https://example.com/home', { + headers: { 'host': 'example.com/evil' }, }); + const response = await appEngine.handle(request); + expect(response).not.toBeNull(); + expect(response?.status).toBe(400); + expect(await response?.text()).toContain( + 'Header "host" contains characters that are not allowed.', + ); + expect(consoleErrorSpy).toHaveBeenCalledWith( + jasmine.stringMatching('Header "host" contains characters that are not allowed.'), + ); }); }); }); From 01f4fc00d2c965dcc063df3d0f59bebe6f8f1c2d Mon Sep 17 00:00:00 2001 From: Joey Perrott Date: Thu, 26 Feb 2026 18:38:59 +0000 Subject: [PATCH 058/226] 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. --- MODULE.bazel | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/MODULE.bazel b/MODULE.bazel index f4a526350e3b..b176171daf7e 100644 --- a/MODULE.bazel +++ b/MODULE.bazel @@ -19,7 +19,7 @@ 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") @@ -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 = "8231142fc5516323b040883bf774ba8362645387", - remote = "https://github.com/devversion/rules_browsers.git", + remote = "https://github.com/angular/rules_browsers.git", ) node = use_extension("@rules_nodejs//nodejs:extensions.bzl", "node") From fe9137523e30169b365e951fe8f6d8078f84fe75 Mon Sep 17 00:00:00 2001 From: Angular Robot Date: Fri, 27 Feb 2026 10:15:19 +0000 Subject: [PATCH 059/226] build: update cross-repo angular dependencies See associated pull request for more information. --- .../assistant-to-the-branch-manager.yml | 2 +- .github/workflows/ci.yml | 52 +++++++++---------- .github/workflows/dev-infra.yml | 4 +- .github/workflows/feature-requests.yml | 2 +- .github/workflows/perf.yml | 6 +-- .github/workflows/pr.yml | 44 ++++++++-------- MODULE.bazel | 2 +- package.json | 2 +- pnpm-lock.yaml | 18 +++---- tests/e2e/ng-snapshot/package.json | 32 ++++++------ 10 files changed, 82 insertions(+), 82 deletions(-) diff --git a/.github/workflows/assistant-to-the-branch-manager.yml b/.github/workflows/assistant-to-the-branch-manager.yml index fb289835030f..eada34703004 100644 --- a/.github/workflows/assistant-to-the-branch-manager.yml +++ b/.github/workflows/assistant-to-the-branch-manager.yml @@ -17,6 +17,6 @@ jobs: - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 with: persist-credentials: false - - uses: angular/dev-infra/github-actions/branch-manager@4b8f9c22c9a8780d3f8162ffb6ffdedce37ae5e2 + - uses: angular/dev-infra/github-actions/branch-manager@9cc477855b9788df6257301074a1629bc3545722 with: angular-robot-key: ${{ secrets.ANGULAR_ROBOT_PRIVATE_KEY }} diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index a0e5c12f01a3..2b2ef8b337ab 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -21,9 +21,9 @@ jobs: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@4b8f9c22c9a8780d3f8162ffb6ffdedce37ae5e2 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@9cc477855b9788df6257301074a1629bc3545722 - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@4b8f9c22c9a8780d3f8162ffb6ffdedce37ae5e2 + uses: angular/dev-infra/github-actions/bazel/setup@9cc477855b9788df6257301074a1629bc3545722 - name: Install node modules run: pnpm install --frozen-lockfile - name: Generate JSON schema types @@ -44,11 +44,11 @@ jobs: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@4b8f9c22c9a8780d3f8162ffb6ffdedce37ae5e2 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@9cc477855b9788df6257301074a1629bc3545722 - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@4b8f9c22c9a8780d3f8162ffb6ffdedce37ae5e2 + uses: angular/dev-infra/github-actions/bazel/setup@9cc477855b9788df6257301074a1629bc3545722 - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@4b8f9c22c9a8780d3f8162ffb6ffdedce37ae5e2 + uses: angular/dev-infra/github-actions/bazel/configure-remote@9cc477855b9788df6257301074a1629bc3545722 with: google_credential: ${{ secrets.RBE_TRUSTED_BUILDS_USER }} - name: Install node modules @@ -61,11 +61,11 @@ jobs: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@4b8f9c22c9a8780d3f8162ffb6ffdedce37ae5e2 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@9cc477855b9788df6257301074a1629bc3545722 - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@4b8f9c22c9a8780d3f8162ffb6ffdedce37ae5e2 + uses: angular/dev-infra/github-actions/bazel/setup@9cc477855b9788df6257301074a1629bc3545722 - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@4b8f9c22c9a8780d3f8162ffb6ffdedce37ae5e2 + uses: angular/dev-infra/github-actions/bazel/configure-remote@9cc477855b9788df6257301074a1629bc3545722 with: google_credential: ${{ secrets.RBE_TRUSTED_BUILDS_USER }} - name: Install node modules @@ -84,13 +84,13 @@ jobs: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@4b8f9c22c9a8780d3f8162ffb6ffdedce37ae5e2 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@9cc477855b9788df6257301074a1629bc3545722 - name: Install node modules run: pnpm install --frozen-lockfile - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@4b8f9c22c9a8780d3f8162ffb6ffdedce37ae5e2 + uses: angular/dev-infra/github-actions/bazel/setup@9cc477855b9788df6257301074a1629bc3545722 - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@4b8f9c22c9a8780d3f8162ffb6ffdedce37ae5e2 + uses: angular/dev-infra/github-actions/bazel/configure-remote@9cc477855b9788df6257301074a1629bc3545722 with: google_credential: ${{ secrets.RBE_TRUSTED_BUILDS_USER }} - name: Run CLI E2E tests @@ -100,11 +100,11 @@ jobs: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@4b8f9c22c9a8780d3f8162ffb6ffdedce37ae5e2 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@9cc477855b9788df6257301074a1629bc3545722 - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@4b8f9c22c9a8780d3f8162ffb6ffdedce37ae5e2 + uses: angular/dev-infra/github-actions/bazel/setup@9cc477855b9788df6257301074a1629bc3545722 - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@4b8f9c22c9a8780d3f8162ffb6ffdedce37ae5e2 + uses: angular/dev-infra/github-actions/bazel/configure-remote@9cc477855b9788df6257301074a1629bc3545722 with: google_credential: ${{ secrets.RBE_TRUSTED_BUILDS_USER }} - name: Install node modules @@ -137,7 +137,7 @@ jobs: runs-on: windows-2025 steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@4b8f9c22c9a8780d3f8162ffb6ffdedce37ae5e2 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@9cc477855b9788df6257301074a1629bc3545722 - name: Install node modules run: pnpm install --frozen-lockfile - name: Download built Windows E2E tests @@ -164,13 +164,13 @@ jobs: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@4b8f9c22c9a8780d3f8162ffb6ffdedce37ae5e2 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@9cc477855b9788df6257301074a1629bc3545722 - name: Install node modules run: pnpm install --frozen-lockfile - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@4b8f9c22c9a8780d3f8162ffb6ffdedce37ae5e2 + uses: angular/dev-infra/github-actions/bazel/setup@9cc477855b9788df6257301074a1629bc3545722 - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@4b8f9c22c9a8780d3f8162ffb6ffdedce37ae5e2 + uses: angular/dev-infra/github-actions/bazel/configure-remote@9cc477855b9788df6257301074a1629bc3545722 with: google_credential: ${{ secrets.RBE_TRUSTED_BUILDS_USER }} - name: Run CLI E2E tests @@ -188,13 +188,13 @@ jobs: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@4b8f9c22c9a8780d3f8162ffb6ffdedce37ae5e2 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@9cc477855b9788df6257301074a1629bc3545722 - name: Install node modules run: pnpm install --frozen-lockfile - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@4b8f9c22c9a8780d3f8162ffb6ffdedce37ae5e2 + uses: angular/dev-infra/github-actions/bazel/setup@9cc477855b9788df6257301074a1629bc3545722 - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@4b8f9c22c9a8780d3f8162ffb6ffdedce37ae5e2 + uses: angular/dev-infra/github-actions/bazel/configure-remote@9cc477855b9788df6257301074a1629bc3545722 with: google_credential: ${{ secrets.RBE_TRUSTED_BUILDS_USER }} - name: Run CLI E2E tests @@ -208,13 +208,13 @@ jobs: SAUCE_TUNNEL_IDENTIFIER: angular-cli-${{ github.workflow }}-${{ github.run_number }} steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@4b8f9c22c9a8780d3f8162ffb6ffdedce37ae5e2 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@9cc477855b9788df6257301074a1629bc3545722 - name: Install node modules run: pnpm install --frozen-lockfile - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@4b8f9c22c9a8780d3f8162ffb6ffdedce37ae5e2 + uses: angular/dev-infra/github-actions/bazel/setup@9cc477855b9788df6257301074a1629bc3545722 - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@4b8f9c22c9a8780d3f8162ffb6ffdedce37ae5e2 + uses: angular/dev-infra/github-actions/bazel/configure-remote@9cc477855b9788df6257301074a1629bc3545722 with: google_credential: ${{ secrets.RBE_TRUSTED_BUILDS_USER }} - name: Run E2E Browser tests @@ -244,11 +244,11 @@ jobs: CIRCLE_BRANCH: ${{ github.ref_name }} steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@4b8f9c22c9a8780d3f8162ffb6ffdedce37ae5e2 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@9cc477855b9788df6257301074a1629bc3545722 - name: Install node modules run: pnpm install --frozen-lockfile - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@4b8f9c22c9a8780d3f8162ffb6ffdedce37ae5e2 + uses: angular/dev-infra/github-actions/bazel/setup@9cc477855b9788df6257301074a1629bc3545722 - run: pnpm admin snapshots --verbose env: SNAPSHOT_BUILDS_GITHUB_TOKEN: ${{ secrets.SNAPSHOT_BUILDS_GITHUB_TOKEN }} diff --git a/.github/workflows/dev-infra.yml b/.github/workflows/dev-infra.yml index 9c148fddbf3a..55b7a545c05b 100644 --- a/.github/workflows/dev-infra.yml +++ b/.github/workflows/dev-infra.yml @@ -13,13 +13,13 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - - uses: angular/dev-infra/github-actions/pull-request-labeling@4b8f9c22c9a8780d3f8162ffb6ffdedce37ae5e2 + - uses: angular/dev-infra/github-actions/pull-request-labeling@9cc477855b9788df6257301074a1629bc3545722 with: angular-robot-key: ${{ secrets.ANGULAR_ROBOT_PRIVATE_KEY }} post_approval_changes: runs-on: ubuntu-latest steps: - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - - uses: angular/dev-infra/github-actions/post-approval-changes@4b8f9c22c9a8780d3f8162ffb6ffdedce37ae5e2 + - uses: angular/dev-infra/github-actions/post-approval-changes@9cc477855b9788df6257301074a1629bc3545722 with: angular-robot-key: ${{ secrets.ANGULAR_ROBOT_PRIVATE_KEY }} diff --git a/.github/workflows/feature-requests.yml b/.github/workflows/feature-requests.yml index 70bc0ed9e32a..dc02ea5f6ee2 100644 --- a/.github/workflows/feature-requests.yml +++ b/.github/workflows/feature-requests.yml @@ -16,6 +16,6 @@ jobs: if: github.repository == 'angular/angular-cli' runs-on: ubuntu-latest steps: - - uses: angular/dev-infra/github-actions/feature-request@4b8f9c22c9a8780d3f8162ffb6ffdedce37ae5e2 + - uses: angular/dev-infra/github-actions/feature-request@9cc477855b9788df6257301074a1629bc3545722 with: angular-robot-key: ${{ secrets.ANGULAR_ROBOT_PRIVATE_KEY }} diff --git a/.github/workflows/perf.yml b/.github/workflows/perf.yml index 8a749b0b3b5a..9cfe7d19ebed 100644 --- a/.github/workflows/perf.yml +++ b/.github/workflows/perf.yml @@ -23,7 +23,7 @@ jobs: workflows: ${{ steps.workflows.outputs.workflows }} steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@4b8f9c22c9a8780d3f8162ffb6ffdedce37ae5e2 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@9cc477855b9788df6257301074a1629bc3545722 - name: Install node modules run: pnpm install --frozen-lockfile - id: workflows @@ -38,9 +38,9 @@ jobs: workflow: ${{ fromJSON(needs.list.outputs.workflows) }} steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@4b8f9c22c9a8780d3f8162ffb6ffdedce37ae5e2 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@9cc477855b9788df6257301074a1629bc3545722 - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@4b8f9c22c9a8780d3f8162ffb6ffdedce37ae5e2 + uses: angular/dev-infra/github-actions/bazel/setup@9cc477855b9788df6257301074a1629bc3545722 - name: Install node modules run: pnpm install --frozen-lockfile # We utilize the google-github-actions/auth action to allow us to get an active credential using workflow diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml index 3a6459769445..e3da41b25686 100644 --- a/.github/workflows/pr.yml +++ b/.github/workflows/pr.yml @@ -34,9 +34,9 @@ jobs: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@4b8f9c22c9a8780d3f8162ffb6ffdedce37ae5e2 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@9cc477855b9788df6257301074a1629bc3545722 - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@4b8f9c22c9a8780d3f8162ffb6ffdedce37ae5e2 + uses: angular/dev-infra/github-actions/bazel/setup@9cc477855b9788df6257301074a1629bc3545722 - name: Setup ESLint Caching uses: actions/cache@cdf6c1fa76f9f475f3d7449005a359c84ca0f306 # v5.0.3 with: @@ -66,17 +66,17 @@ jobs: # it has been merged. run: pnpm ng-dev format changed --check ${{ github.event.pull_request.base.sha }} - name: Check Package Licenses - uses: angular/dev-infra/github-actions/linting/licenses@4b8f9c22c9a8780d3f8162ffb6ffdedce37ae5e2 + uses: angular/dev-infra/github-actions/linting/licenses@9cc477855b9788df6257301074a1629bc3545722 build: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@4b8f9c22c9a8780d3f8162ffb6ffdedce37ae5e2 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@9cc477855b9788df6257301074a1629bc3545722 - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@4b8f9c22c9a8780d3f8162ffb6ffdedce37ae5e2 + uses: angular/dev-infra/github-actions/bazel/setup@9cc477855b9788df6257301074a1629bc3545722 - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@4b8f9c22c9a8780d3f8162ffb6ffdedce37ae5e2 + uses: angular/dev-infra/github-actions/bazel/configure-remote@9cc477855b9788df6257301074a1629bc3545722 - name: Install node modules run: pnpm install --frozen-lockfile - name: Build release targets @@ -93,11 +93,11 @@ jobs: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@4b8f9c22c9a8780d3f8162ffb6ffdedce37ae5e2 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@9cc477855b9788df6257301074a1629bc3545722 - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@4b8f9c22c9a8780d3f8162ffb6ffdedce37ae5e2 + uses: angular/dev-infra/github-actions/bazel/setup@9cc477855b9788df6257301074a1629bc3545722 - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@4b8f9c22c9a8780d3f8162ffb6ffdedce37ae5e2 + uses: angular/dev-infra/github-actions/bazel/configure-remote@9cc477855b9788df6257301074a1629bc3545722 - name: Install node modules run: pnpm install --frozen-lockfile - name: Run module and package tests @@ -114,13 +114,13 @@ jobs: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@4b8f9c22c9a8780d3f8162ffb6ffdedce37ae5e2 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@9cc477855b9788df6257301074a1629bc3545722 - name: Install node modules run: pnpm install --frozen-lockfile - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@4b8f9c22c9a8780d3f8162ffb6ffdedce37ae5e2 + uses: angular/dev-infra/github-actions/bazel/setup@9cc477855b9788df6257301074a1629bc3545722 - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@4b8f9c22c9a8780d3f8162ffb6ffdedce37ae5e2 + uses: angular/dev-infra/github-actions/bazel/configure-remote@9cc477855b9788df6257301074a1629bc3545722 - name: Run CLI E2E tests run: pnpm bazel test --test_env=E2E_SHARD_TOTAL=6 --test_env=E2E_SHARD_INDEX=${{ matrix.shard }} --config=e2e //tests:e2e.${{ matrix.subset }}_node${{ matrix.node }} @@ -128,11 +128,11 @@ jobs: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@4b8f9c22c9a8780d3f8162ffb6ffdedce37ae5e2 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@9cc477855b9788df6257301074a1629bc3545722 - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@4b8f9c22c9a8780d3f8162ffb6ffdedce37ae5e2 + uses: angular/dev-infra/github-actions/bazel/setup@9cc477855b9788df6257301074a1629bc3545722 - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@4b8f9c22c9a8780d3f8162ffb6ffdedce37ae5e2 + uses: angular/dev-infra/github-actions/bazel/configure-remote@9cc477855b9788df6257301074a1629bc3545722 - name: Install node modules run: pnpm install --frozen-lockfile - name: Build E2E tests for Windows on Linux @@ -156,7 +156,7 @@ jobs: runs-on: windows-2025 steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@4b8f9c22c9a8780d3f8162ffb6ffdedce37ae5e2 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@9cc477855b9788df6257301074a1629bc3545722 - name: Install node modules run: pnpm install --frozen-lockfile - name: Download built Windows E2E tests @@ -183,13 +183,13 @@ jobs: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@4b8f9c22c9a8780d3f8162ffb6ffdedce37ae5e2 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@9cc477855b9788df6257301074a1629bc3545722 - name: Install node modules run: pnpm install --frozen-lockfile - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@4b8f9c22c9a8780d3f8162ffb6ffdedce37ae5e2 + uses: angular/dev-infra/github-actions/bazel/setup@9cc477855b9788df6257301074a1629bc3545722 - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@4b8f9c22c9a8780d3f8162ffb6ffdedce37ae5e2 + uses: angular/dev-infra/github-actions/bazel/configure-remote@9cc477855b9788df6257301074a1629bc3545722 - name: Run CLI E2E tests run: pnpm bazel test --test_env=E2E_SHARD_TOTAL=3 --test_env=E2E_SHARD_INDEX=${{ matrix.shard }} --config=e2e //tests:e2e.${{ matrix.subset }}_node${{ matrix.node }} @@ -205,12 +205,12 @@ jobs: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@4b8f9c22c9a8780d3f8162ffb6ffdedce37ae5e2 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@9cc477855b9788df6257301074a1629bc3545722 - name: Install node modules run: pnpm install --frozen-lockfile - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@4b8f9c22c9a8780d3f8162ffb6ffdedce37ae5e2 + uses: angular/dev-infra/github-actions/bazel/setup@9cc477855b9788df6257301074a1629bc3545722 - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@4b8f9c22c9a8780d3f8162ffb6ffdedce37ae5e2 + uses: angular/dev-infra/github-actions/bazel/configure-remote@9cc477855b9788df6257301074a1629bc3545722 - name: Run CLI E2E tests run: pnpm bazel test --test_env=E2E_SHARD_TOTAL=6 --test_env=E2E_SHARD_INDEX=${{ matrix.shard }} --config=e2e //tests:e2e.snapshots.${{ matrix.subset }}_node${{ matrix.node }} diff --git a/MODULE.bazel b/MODULE.bazel index b176171daf7e..2a56a70869d1 100644 --- a/MODULE.bazel +++ b/MODULE.bazel @@ -25,7 +25,7 @@ git_override( bazel_dep(name = "devinfra") git_override( module_name = "devinfra", - commit = "4b8f9c22c9a8780d3f8162ffb6ffdedce37ae5e2", + commit = "9cc477855b9788df6257301074a1629bc3545722", remote = "https://github.com/angular/dev-infra.git", ) diff --git a/package.json b/package.json index 269901c04363..3851cce64e87 100644 --- a/package.json +++ b/package.json @@ -51,7 +51,7 @@ "@angular/forms": "21.2.0-rc.0", "@angular/localize": "21.2.0-rc.0", "@angular/material": "21.2.0-rc.0", - "@angular/ng-dev": "https://github.com/angular/dev-infra-private-ng-dev-builds.git#5853f34e078f46777430088574777683efe2fc85", + "@angular/ng-dev": "https://github.com/angular/dev-infra-private-ng-dev-builds.git#c78d7a03ae1ca76d2946651d0dd7f476f09b4374", "@angular/platform-browser": "21.2.0-rc.0", "@angular/platform-server": "21.2.0-rc.0", "@angular/router": "21.2.0-rc.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index c4e2a2439500..47138045be51 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -47,8 +47,8 @@ importers: specifier: 21.2.0-rc.0 version: 21.2.0-rc.0(b10e235d889ab235dc2911d6ec167f08) '@angular/ng-dev': - specifier: https://github.com/angular/dev-infra-private-ng-dev-builds.git#5853f34e078f46777430088574777683efe2fc85 - version: https://codeload.github.com/angular/dev-infra-private-ng-dev-builds/tar.gz/5853f34e078f46777430088574777683efe2fc85(@modelcontextprotocol/sdk@1.27.1(zod@4.3.6)) + specifier: https://github.com/angular/dev-infra-private-ng-dev-builds.git#c78d7a03ae1ca76d2946651d0dd7f476f09b4374 + version: https://codeload.github.com/angular/dev-infra-private-ng-dev-builds/tar.gz/c78d7a03ae1ca76d2946651d0dd7f476f09b4374(@modelcontextprotocol/sdk@1.27.1(zod@4.3.6)) '@angular/platform-browser': specifier: 21.2.0-rc.0 version: 21.2.0-rc.0(@angular/animations@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1)) @@ -1008,9 +1008,9 @@ packages: '@angular/platform-browser': ^21.0.0-0 || ^21.1.0-0 || ^21.2.0-0 || ^21.3.0-0 || ^22.0.0-0 rxjs: ^6.5.3 || ^7.4.0 - '@angular/ng-dev@https://codeload.github.com/angular/dev-infra-private-ng-dev-builds/tar.gz/5853f34e078f46777430088574777683efe2fc85': - resolution: {tarball: https://codeload.github.com/angular/dev-infra-private-ng-dev-builds/tar.gz/5853f34e078f46777430088574777683efe2fc85} - version: 0.0.0-4b8f9c22c9a8780d3f8162ffb6ffdedce37ae5e2 + '@angular/ng-dev@https://codeload.github.com/angular/dev-infra-private-ng-dev-builds/tar.gz/c78d7a03ae1ca76d2946651d0dd7f476f09b4374': + resolution: {tarball: https://codeload.github.com/angular/dev-infra-private-ng-dev-builds/tar.gz/c78d7a03ae1ca76d2946651d0dd7f476f09b4374} + version: 0.0.0-61f9fe81614db102d95bb9bcb9909a304c6e6d10 hasBin: true '@angular/platform-browser@21.2.0-rc.0': @@ -8474,7 +8474,7 @@ snapshots: rxjs: 7.8.2 tslib: 2.8.1 - '@angular/ng-dev@https://codeload.github.com/angular/dev-infra-private-ng-dev-builds/tar.gz/5853f34e078f46777430088574777683efe2fc85(@modelcontextprotocol/sdk@1.27.1(zod@4.3.6))': + '@angular/ng-dev@https://codeload.github.com/angular/dev-infra-private-ng-dev-builds/tar.gz/c78d7a03ae1ca76d2946651d0dd7f476f09b4374(@modelcontextprotocol/sdk@1.27.1(zod@4.3.6))': dependencies: '@actions/core': 3.0.0 '@google-cloud/spanner': 8.0.0(supports-color@10.2.2) @@ -13136,7 +13136,7 @@ snapshots: extract-zip@2.0.1: dependencies: - debug: 4.3.4 + debug: 4.4.3(supports-color@10.2.2) get-stream: 5.2.0 yauzl: 2.10.0 optionalDependencies: @@ -13203,7 +13203,7 @@ snapshots: filelist@1.0.5: dependencies: - minimatch: 10.2.3 + minimatch: 10.2.4 fill-range@7.1.1: dependencies: @@ -14642,7 +14642,7 @@ snapshots: dependencies: array-differ: 4.0.0 array-union: 3.0.1 - minimatch: 10.2.3 + minimatch: 10.2.4 mute-stream@3.0.0: {} diff --git a/tests/e2e/ng-snapshot/package.json b/tests/e2e/ng-snapshot/package.json index ab7ba0acdf28..371adce40829 100644 --- a/tests/e2e/ng-snapshot/package.json +++ b/tests/e2e/ng-snapshot/package.json @@ -2,21 +2,21 @@ "description": "snapshot versions of Angular for e2e testing", "private": true, "dependencies": { - "@angular/animations": "github:angular/animations-builds#19ed9e7a0b8515d22bf13b5fb58a8a8f3c4a2842", - "@angular/cdk": "github:angular/cdk-builds#5e97af5ad334182854f09262a8b26e238967aa68", - "@angular/common": "github:angular/common-builds#a32c10557e0780803fd32bb7a1e3a6a960705b6a", - "@angular/compiler": "github:angular/compiler-builds#e8d51a5002e450e552a4c587c2bd25235ffb0cc3", - "@angular/compiler-cli": "github:angular/compiler-cli-builds#18a10b769c9786066286e1650570044f39db3f06", - "@angular/core": "github:angular/core-builds#befb8fd739ef58416f7eca1eb701ea1d00bb86c8", - "@angular/forms": "github:angular/forms-builds#dd7f45337c00117c64766017e5edc3c023857db9", - "@angular/language-service": "github:angular/language-service-builds#b9415c1269e487ca6c5fa255a8c6d80eefde9d16", - "@angular/localize": "github:angular/localize-builds#33755250cd9aec2aaca392a906ad247da032a53b", - "@angular/material": "github:angular/material-builds#6921af69ff90449f3963620d22d47a64137bca1d", - "@angular/material-moment-adapter": "github:angular/material-moment-adapter-builds#9d63fb9749dde15dd45057270adeaee9736753df", - "@angular/platform-browser": "github:angular/platform-browser-builds#0b4e889ddafe5ac3b7ab0e777123407490a3e2e2", - "@angular/platform-browser-dynamic": "github:angular/platform-browser-dynamic-builds#dffe604ea8cbb7bb45ae55c1a6785454683f80bd", - "@angular/platform-server": "github:angular/platform-server-builds#9905f63d91fda825342324da42cfcd2da2d5912c", - "@angular/router": "github:angular/router-builds#0f2f8ca2fe9884706e18de1941933ee0a0cc27c3", - "@angular/service-worker": "github:angular/service-worker-builds#3add2f993604ad5a9e4c8879f17f6291073c2b11" + "@angular/animations": "github:angular/animations-builds#8546bf7fad7f43c4b6da8285d6d89b69a459e9d0", + "@angular/cdk": "github:angular/cdk-builds#8edceea9e6c048b8360a593d2e38ab7b4aa5f6a4", + "@angular/common": "github:angular/common-builds#eff394d2590166253a21ddbceaf74f9e5703bbf8", + "@angular/compiler": "github:angular/compiler-builds#98b36cd28892d8bdffa3c01bc94a2b1b5bb6e602", + "@angular/compiler-cli": "github:angular/compiler-cli-builds#0c0002ae6557f9fddb84cdc1cb957103215c86ad", + "@angular/core": "github:angular/core-builds#48d277cf736d1efaa028429a158636b1a032a8dc", + "@angular/forms": "github:angular/forms-builds#783871bbc6d470579596b2bc9cb9038a891a0e58", + "@angular/language-service": "github:angular/language-service-builds#5cf6a73d2c4c8336c5e07e72e49e7241b03d6819", + "@angular/localize": "github:angular/localize-builds#1a3523ce9577f139dc349eaf3ba4ad5064ad1479", + "@angular/material": "github:angular/material-builds#7fe6144f6b141f2156514a5f8afa9daf6ef65891", + "@angular/material-moment-adapter": "github:angular/material-moment-adapter-builds#0fa3861ab1a8eac59063e1fc43ccc2af7ffecdca", + "@angular/platform-browser": "github:angular/platform-browser-builds#b37ce3a2974aa7ef00950879a730a16acc7a0c04", + "@angular/platform-browser-dynamic": "github:angular/platform-browser-dynamic-builds#f38377cceb64be3eab16249ad494c4955ed5d6d3", + "@angular/platform-server": "github:angular/platform-server-builds#a85070ca305b869d45ad5d0e3ad8a0b9d86c6cf6", + "@angular/router": "github:angular/router-builds#e6acd4c9b022cdecbf8f320dec0da01cd23ffbda", + "@angular/service-worker": "github:angular/service-worker-builds#a7dffc1299061a658819404b1704c4cf04b1222c" } } From f7e02fe00e42ebf1a1b7b633e2a711ab4618c988 Mon Sep 17 00:00:00 2001 From: Angular Robot Date: Fri, 27 Feb 2026 13:51:32 +0000 Subject: [PATCH 060/226] build: lock file maintenance See associated pull request for more information. --- pnpm-lock.yaml | 133 ++++++++++++++++++++++++++----------------------- 1 file changed, 70 insertions(+), 63 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 47138045be51..973c69296503 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -135,7 +135,7 @@ importers: version: 4.17.24 '@types/node': specifier: ^22.12.0 - version: 22.19.11 + version: 22.19.12 '@types/npm-package-arg': specifier: ^6.1.0 version: 6.1.4 @@ -264,7 +264,7 @@ importers: version: 6.3.0(rollup@4.59.0)(typescript@5.9.3) rollup-plugin-sourcemaps2: specifier: 0.5.6 - version: 0.5.6(@types/node@22.19.11)(rollup@4.59.0) + version: 0.5.6(@types/node@22.19.12)(rollup@4.59.0) semver: specifier: 7.7.4 version: 7.7.4 @@ -2813,8 +2813,8 @@ packages: peerDependencies: '@opentelemetry/api': '>=1.0.0 <1.10.0' - '@opentelemetry/semantic-conventions@1.39.0': - resolution: {integrity: sha512-R5R9tb2AXs2IRLNKLBJDynhkfmx7mX0vi8NkhZb3gUkPWHn6HXk5J8iQ/dql0U3ApfWym4kXXmBDRGO+oeOfjg==} + '@opentelemetry/semantic-conventions@1.40.0': + resolution: {integrity: sha512-cifvXDhcqMwwTlTK04GBNeIe7yyo28Mfby85QXFe1Yk8nmi36Ab/5UQwptOx84SsoGNRg+EVSjwzfSZMy6pmlw==} engines: {node: '>=14'} '@oxc-project/types@0.114.0': @@ -3464,8 +3464,8 @@ packages: '@types/node-fetch@2.6.13': resolution: {integrity: sha512-QGpRVpzSaUs30JBSGPjOg4Uveu384erbHBoT1zeONvyCfwQxIkUshLAOqN/k9EjGviPRmWTTe6aH2qySWKTVSw==} - '@types/node@22.19.11': - resolution: {integrity: sha512-BH7YwL6rA93ReqeQS1c4bsPpcfOmJasG+Fkr6Y59q83f9M1WcBRHR2vM+P9eOisYRcN3ujQoiZY8uk5W+1WL8w==} + '@types/node@22.19.12': + resolution: {integrity: sha512-0QEp0aPJYSyf6RrTjDB7HlKgNMTY+V2C7ESTaVt6G9gQ0rPLzTGz7OF2NXTLR5vcy7HJEtIUsyWLsfX0kTqJBA==} '@types/node@24.10.13': resolution: {integrity: sha512-oH72nZRfDv9lADUBSo104Aq7gPHpQZc4BTx38r9xf9pg5LfP6EzSyH2n7qFmmxRQXh7YlUXODcYsg6PuTDSxGg==} @@ -5082,9 +5082,8 @@ packages: resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} engines: {node: '>=16.0.0'} - filelist@1.0.5: - resolution: {integrity: sha512-ct/ckWBV/9Dg3MlvCXsLcSUyoWwv9mCKqlhLNB2DAuXR/NZolSXlQqP5dyy6guWlPXBhodZyZ5lGPQcbQDxrEQ==} - engines: {node: 20 || >=22} + filelist@1.0.6: + resolution: {integrity: sha512-5giy2PkLYY1cP39p17Ech+2xlpTRL9HLspOfEgm0L6CwBXBTgsK5ou0JtzYuepxkaQ/tvhCFIJ5uXo0OrM2DxA==} fill-range@7.1.1: resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} @@ -5394,8 +5393,8 @@ packages: resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} engines: {node: '>= 0.4'} - hono@4.12.2: - resolution: {integrity: sha512-gJnaDHXKDayjt8ue0n8Gs0A007yKXj4Xzb8+cNjZeYsSzzwKc0Lr+OZgYwVfB0pHfUs17EPoLvrOsEaJ9mj+Tg==} + hono@4.12.3: + resolution: {integrity: sha512-SFsVSjp8sj5UumXOOFlkZOG6XS9SJDKw0TbwFeV+AJ8xlST8kxK5Z/5EYa111UY8732lK2S/xB653ceuaoGwpg==} engines: {node: '>=16.9.0'} hosted-git-info@9.0.2: @@ -6274,6 +6273,10 @@ packages: minimatch@3.1.5: resolution: {integrity: sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==} + minimatch@5.1.9: + resolution: {integrity: sha512-7o1wEA2RyMP7Iu7GNba9vc0RWWGACJOCZBJX2GJWip0ikV+wcOsgVuY9uE8CPiyQhkGFSlhuSkZPavN7u1c2Fw==} + engines: {node: '>=10'} + minimatch@7.4.6: resolution: {integrity: sha512-sBz8G/YjVniEz6lKPNpKxXwazJe4c19fEfV2GDMX6AjFz+MX9uDWIZW8XreVhkFW3fkIdTv/gxWr/Kks5FFAVw==} engines: {node: '>=10'} @@ -9828,7 +9831,7 @@ snapshots: '@opentelemetry/api': 1.9.0 '@opentelemetry/context-async-hooks': 2.5.1(@opentelemetry/api@1.9.0) '@opentelemetry/core': 2.5.1(@opentelemetry/api@1.9.0) - '@opentelemetry/semantic-conventions': 1.39.0 + '@opentelemetry/semantic-conventions': 1.40.0 '@types/big.js': 6.2.2 '@types/stack-trace': 0.0.33 big.js: 7.0.1 @@ -9874,7 +9877,7 @@ snapshots: '@grpc/grpc-js@1.9.15': dependencies: '@grpc/proto-loader': 0.7.15 - '@types/node': 22.19.11 + '@types/node': 22.19.12 '@grpc/proto-loader@0.7.15': dependencies: @@ -9893,9 +9896,9 @@ snapshots: '@harperfast/extended-iterable@1.0.3': optional: true - '@hono/node-server@1.19.9(hono@4.12.2)': + '@hono/node-server@1.19.9(hono@4.12.3)': dependencies: - hono: 4.12.2 + hono: 4.12.3 '@humanfs/core@0.19.1': {} @@ -10230,7 +10233,7 @@ snapshots: '@modelcontextprotocol/sdk@1.27.1(zod@4.3.6)': dependencies: - '@hono/node-server': 1.19.9(hono@4.12.2) + '@hono/node-server': 1.19.9(hono@4.12.3) ajv: 8.18.0 ajv-formats: 3.0.1(ajv@8.18.0) content-type: 1.0.5 @@ -10240,7 +10243,7 @@ snapshots: eventsource-parser: 3.0.6 express: 5.2.1 express-rate-limit: 8.2.1(express@5.2.1) - hono: 4.12.2 + hono: 4.12.3 jose: 6.1.3 json-schema-typed: 8.0.2 pkce-challenge: 5.0.1 @@ -10558,9 +10561,9 @@ snapshots: '@opentelemetry/core@2.5.1(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/semantic-conventions': 1.39.0 + '@opentelemetry/semantic-conventions': 1.40.0 - '@opentelemetry/semantic-conventions@1.39.0': {} + '@opentelemetry/semantic-conventions@1.40.0': {} '@oxc-project/types@0.114.0': {} @@ -11025,16 +11028,16 @@ snapshots: '@types/body-parser@1.19.6': dependencies: '@types/connect': 3.4.38 - '@types/node': 22.19.11 + '@types/node': 22.19.12 '@types/bonjour@3.5.13': dependencies: - '@types/node': 22.19.11 + '@types/node': 22.19.12 '@types/browser-sync@2.29.1': dependencies: '@types/micromatch': 2.3.35 - '@types/node': 22.19.11 + '@types/node': 22.19.12 '@types/serve-static': 2.2.0 chokidar: 3.6.0 @@ -11045,26 +11048,26 @@ snapshots: '@types/cli-progress@3.11.6': dependencies: - '@types/node': 22.19.11 + '@types/node': 22.19.12 '@types/connect-history-api-fallback@1.5.4': dependencies: '@types/express-serve-static-core': 4.19.8 - '@types/node': 22.19.11 + '@types/node': 22.19.12 '@types/connect@3.4.38': dependencies: - '@types/node': 22.19.11 + '@types/node': 22.19.12 '@types/cors@2.8.19': dependencies: - '@types/node': 22.19.11 + '@types/node': 22.19.12 '@types/deep-eql@4.0.2': {} '@types/duplexify@3.6.5': dependencies: - '@types/node': 22.19.11 + '@types/node': 22.19.12 '@types/ejs@3.1.5': {} @@ -11086,14 +11089,14 @@ snapshots: '@types/express-serve-static-core@4.19.8': dependencies: - '@types/node': 22.19.11 + '@types/node': 22.19.12 '@types/qs': 6.14.0 '@types/range-parser': 1.2.7 '@types/send': 1.2.1 '@types/express-serve-static-core@5.1.1': dependencies: - '@types/node': 22.19.11 + '@types/node': 22.19.12 '@types/qs': 6.14.0 '@types/range-parser': 1.2.7 '@types/send': 1.2.1 @@ -11115,17 +11118,17 @@ snapshots: '@types/git-raw-commits@5.0.1': dependencies: - '@types/node': 22.19.11 + '@types/node': 22.19.12 '@types/graceful-fs@4.1.9': dependencies: - '@types/node': 22.19.11 + '@types/node': 22.19.12 '@types/http-errors@2.0.5': {} '@types/http-proxy@1.17.17': dependencies: - '@types/node': 22.19.11 + '@types/node': 22.19.12 '@types/ini@4.1.1': {} @@ -11141,7 +11144,7 @@ snapshots: '@types/karma@6.3.9': dependencies: - '@types/node': 22.19.11 + '@types/node': 22.19.12 log4js: 6.9.1 transitivePeerDependencies: - supports-color @@ -11150,7 +11153,7 @@ snapshots: '@types/loader-utils@3.0.0(esbuild@0.27.3)': dependencies: - '@types/node': 22.19.11 + '@types/node': 22.19.12 webpack: 5.105.2(esbuild@0.27.3) transitivePeerDependencies: - '@swc/core' @@ -11168,10 +11171,10 @@ snapshots: '@types/node-fetch@2.6.13': dependencies: - '@types/node': 22.19.11 + '@types/node': 22.19.12 form-data: 4.0.5 - '@types/node@22.19.11': + '@types/node@22.19.12': dependencies: undici-types: 7.22.0 @@ -11183,7 +11186,7 @@ snapshots: '@types/npm-registry-fetch@8.0.9': dependencies: - '@types/node': 22.19.11 + '@types/node': 22.19.12 '@types/node-fetch': 2.6.13 '@types/npm-package-arg': 6.1.4 '@types/npmlog': 7.0.0 @@ -11191,11 +11194,11 @@ snapshots: '@types/npmlog@7.0.0': dependencies: - '@types/node': 22.19.11 + '@types/node': 22.19.12 '@types/pacote@11.1.8': dependencies: - '@types/node': 22.19.11 + '@types/node': 22.19.12 '@types/npm-registry-fetch': 8.0.9 '@types/npmlog': 7.0.0 '@types/ssri': 7.1.5 @@ -11206,12 +11209,12 @@ snapshots: '@types/progress@2.0.7': dependencies: - '@types/node': 22.19.11 + '@types/node': 22.19.12 '@types/pumpify@1.4.5': dependencies: '@types/duplexify': 3.6.5 - '@types/node': 22.19.11 + '@types/node': 22.19.12 '@types/qs@6.14.0': {} @@ -11221,7 +11224,7 @@ snapshots: '@types/responselike@1.0.0': dependencies: - '@types/node': 22.19.11 + '@types/node': 22.19.12 '@types/retry@0.12.0': {} @@ -11232,11 +11235,11 @@ snapshots: '@types/send@0.17.6': dependencies: '@types/mime': 1.3.5 - '@types/node': 22.19.11 + '@types/node': 22.19.12 '@types/send@1.2.1': dependencies: - '@types/node': 22.19.11 + '@types/node': 22.19.12 '@types/serve-index@1.9.4': dependencies: @@ -11245,38 +11248,38 @@ snapshots: '@types/serve-static@1.15.10': dependencies: '@types/http-errors': 2.0.5 - '@types/node': 22.19.11 + '@types/node': 22.19.12 '@types/send': 0.17.6 '@types/serve-static@2.2.0': dependencies: '@types/http-errors': 2.0.5 - '@types/node': 22.19.11 + '@types/node': 22.19.12 '@types/sockjs@0.3.36': dependencies: - '@types/node': 22.19.11 + '@types/node': 22.19.12 '@types/ssri@7.1.5': dependencies: - '@types/node': 22.19.11 + '@types/node': 22.19.12 '@types/stack-trace@0.0.33': {} '@types/tar-stream@3.1.4': dependencies: - '@types/node': 22.19.11 + '@types/node': 22.19.12 '@types/watchpack@2.4.5': dependencies: '@types/graceful-fs': 4.1.9 - '@types/node': 22.19.11 + '@types/node': 22.19.12 '@types/which@3.0.4': {} '@types/ws@8.18.1': dependencies: - '@types/node': 22.19.11 + '@types/node': 22.19.12 '@types/yargs-parser@21.0.3': {} @@ -11288,7 +11291,7 @@ snapshots: '@types/yauzl@2.10.3': dependencies: - '@types/node': 22.19.11 + '@types/node': 22.19.12 optional: true '@typescript-eslint/eslint-plugin@8.56.1(@typescript-eslint/parser@8.56.1(eslint@10.0.2(jiti@2.6.1))(typescript@5.9.3))(eslint@10.0.2(jiti@2.6.1))(typescript@5.9.3)': @@ -12719,7 +12722,7 @@ snapshots: engine.io@6.6.5(bufferutil@4.1.0)(utf-8-validate@6.0.6): dependencies: '@types/cors': 2.8.19 - '@types/node': 22.19.11 + '@types/node': 22.19.12 accepts: 1.3.8 base64id: 2.0.0 cookie: 0.7.2 @@ -13136,7 +13139,7 @@ snapshots: extract-zip@2.0.1: dependencies: - debug: 4.4.3(supports-color@10.2.2) + debug: 4.3.4 get-stream: 5.2.0 yauzl: 2.10.0 optionalDependencies: @@ -13201,9 +13204,9 @@ snapshots: dependencies: flat-cache: 4.0.1 - filelist@1.0.5: + filelist@1.0.6: dependencies: - minimatch: 10.2.4 + minimatch: 5.1.9 fill-range@7.1.1: dependencies: @@ -13612,7 +13615,7 @@ snapshots: dependencies: function-bind: 1.1.2 - hono@4.12.2: {} + hono@4.12.3: {} hosted-git-info@9.0.2: dependencies: @@ -14062,7 +14065,7 @@ snapshots: jake@10.9.4: dependencies: async: 3.2.6 - filelist: 1.0.5 + filelist: 1.0.6 picocolors: 1.1.1 jasmine-core@4.6.1: {} @@ -14086,7 +14089,7 @@ snapshots: jest-worker@27.5.1: dependencies: - '@types/node': 22.19.11 + '@types/node': 22.19.12 merge-stream: 2.0.0 supports-color: 8.1.1 @@ -14554,6 +14557,10 @@ snapshots: dependencies: brace-expansion: 1.1.12 + minimatch@5.1.9: + dependencies: + brace-expansion: 2.0.2 + minimatch@7.4.6: dependencies: brace-expansion: 2.0.2 @@ -14642,7 +14649,7 @@ snapshots: dependencies: array-differ: 4.0.0 array-union: 3.0.1 - minimatch: 10.2.4 + minimatch: 10.2.3 mute-stream@3.0.0: {} @@ -15200,7 +15207,7 @@ snapshots: '@protobufjs/path': 1.1.2 '@protobufjs/pool': 1.1.0 '@protobufjs/utf8': 1.1.0 - '@types/node': 22.19.11 + '@types/node': 22.19.12 long: 5.3.2 proxy-addr@2.0.7: @@ -15510,12 +15517,12 @@ snapshots: optionalDependencies: '@babel/code-frame': 7.29.0 - rollup-plugin-sourcemaps2@0.5.6(@types/node@22.19.11)(rollup@4.59.0): + rollup-plugin-sourcemaps2@0.5.6(@types/node@22.19.12)(rollup@4.59.0): dependencies: '@rollup/pluginutils': 5.3.0(rollup@4.59.0) rollup: 4.59.0 optionalDependencies: - '@types/node': 22.19.11 + '@types/node': 22.19.12 rollup@4.59.0: dependencies: From 7f101f1c49f3a932144fc594ec1198d05a49e2de Mon Sep 17 00:00:00 2001 From: Alan Agius <17563226+alan-agius4@users.noreply.github.com> Date: Fri, 27 Feb 2026 13:42:08 +0000 Subject: [PATCH 061/226] test(@angular/build): remove isViteRun from dev-server test harness Removes the `isViteRun` parameter from the `describeServeBuilder` helper and updates usage in test files. This change simplifies the tests by assuming the modern application builder behavior, removing conditional logic for legacy builders. --- .../tests/behavior/build-budgets_spec.ts | 38 +-- .../tests/behavior/build-conditions_spec.ts | 128 ++++--- .../behavior/build_translation_watch_spec.ts | 98 +++--- .../serve-live-reload-proxies_spec.ts | 241 +++++++------- .../behavior/serve_service-worker_spec.ts | 312 +++++++++--------- .../dev-server/tests/jasmine-helpers.ts | 3 +- .../dev-server/tests/options/port_spec.ts | 125 +++---- .../tests/options/prebundle_spec.ts | 118 ++++--- .../tests/options/proxy-config_spec.ts | 106 +++--- .../tests/options/serve-path_spec.ts | 156 +++++---- 10 files changed, 620 insertions(+), 705 deletions(-) diff --git a/packages/angular/build/src/builders/dev-server/tests/behavior/build-budgets_spec.ts b/packages/angular/build/src/builders/dev-server/tests/behavior/build-budgets_spec.ts index aee551e78b48..97a68506fcf5 100644 --- a/packages/angular/build/src/builders/dev-server/tests/behavior/build-budgets_spec.ts +++ b/packages/angular/build/src/builders/dev-server/tests/behavior/build-budgets_spec.ts @@ -11,29 +11,25 @@ import { executeDevServer } from '../../index'; import { describeServeBuilder } from '../jasmine-helpers'; import { BASE_OPTIONS, DEV_SERVER_BUILDER_INFO } from '../setup'; -describeServeBuilder( - executeDevServer, - DEV_SERVER_BUILDER_INFO, - (harness, setupTarget, isViteRun) => { - // TODO(fix-vite): currently this is broken in vite. - (isViteRun ? xdescribe : describe)('Behavior: "browser builder budgets"', () => { - beforeEach(() => { - setupTarget(harness, { - // Add a budget error for any file over 100 bytes - budgets: [{ type: BudgetType.All, maximumError: '100b' }], - optimization: true, - }); +describeServeBuilder(executeDevServer, DEV_SERVER_BUILDER_INFO, (harness, setupTarget) => { + // TODO(fix-vite): currently this is broken in vite. + xdescribe('Behavior: "browser builder budgets"', () => { + beforeEach(() => { + setupTarget(harness, { + // Add a budget error for any file over 100 bytes + budgets: [{ type: BudgetType.All, maximumError: '100b' }], + optimization: true, }); + }); - it('should ignore budgets defined in the "buildTarget" options', async () => { - harness.useTarget('serve', { - ...BASE_OPTIONS, - }); + it('should ignore budgets defined in the "buildTarget" options', async () => { + harness.useTarget('serve', { + ...BASE_OPTIONS, + }); - const { result } = await harness.executeOnce(); + const { result } = await harness.executeOnce(); - expect(result?.success).toBe(true); - }); + expect(result?.success).toBe(true); }); - }, -); + }); +}); diff --git a/packages/angular/build/src/builders/dev-server/tests/behavior/build-conditions_spec.ts b/packages/angular/build/src/builders/dev-server/tests/behavior/build-conditions_spec.ts index 2a7d59d8d574..aef1973d4a48 100644 --- a/packages/angular/build/src/builders/dev-server/tests/behavior/build-conditions_spec.ts +++ b/packages/angular/build/src/builders/dev-server/tests/behavior/build-conditions_spec.ts @@ -15,86 +15,74 @@ import { executeOnceAndFetch } from '../execute-fetch'; import { describeServeBuilder } from '../jasmine-helpers'; import { BASE_OPTIONS, DEV_SERVER_BUILDER_INFO } from '../setup'; -describeServeBuilder( - executeDevServer, - DEV_SERVER_BUILDER_INFO, - (harness, setupTarget, isApplicationBuilder) => { - describe('Behavior: "conditional imports"', () => { - if (!isApplicationBuilder) { - it('requires esbuild', () => { - expect(true).toBeTrue(); - }); - - return; - } - - beforeEach(async () => { - setupTarget(harness); +describeServeBuilder(executeDevServer, DEV_SERVER_BUILDER_INFO, (harness, setupTarget) => { + describe('Behavior: "conditional imports"', () => { + beforeEach(async () => { + setupTarget(harness); - await setupConditionImport(harness); - }); + await setupConditionImport(harness); + }); - interface ImportsTestCase { - name: string; - mapping: unknown; - output?: string; - } + interface ImportsTestCase { + name: string; + mapping: unknown; + output?: string; + } - const GOOD_TARGET = './src/good.js'; - const BAD_TARGET = './src/bad.js'; + const GOOD_TARGET = './src/good.js'; + const BAD_TARGET = './src/bad.js'; - const testCases: ImportsTestCase[] = [ - { name: 'simple string', mapping: GOOD_TARGET }, - { - name: 'default fallback without matching condition', - mapping: { - 'never': BAD_TARGET, - 'default': GOOD_TARGET, - }, + const testCases: ImportsTestCase[] = [ + { name: 'simple string', mapping: GOOD_TARGET }, + { + name: 'default fallback without matching condition', + mapping: { + 'never': BAD_TARGET, + 'default': GOOD_TARGET, }, - { - name: 'development condition', - mapping: { - 'development': GOOD_TARGET, - 'default': BAD_TARGET, - }, + }, + { + name: 'development condition', + mapping: { + 'development': GOOD_TARGET, + 'default': BAD_TARGET, }, - { - name: 'production condition', - mapping: { - 'production': BAD_TARGET, - 'default': GOOD_TARGET, - }, + }, + { + name: 'production condition', + mapping: { + 'production': BAD_TARGET, + 'default': GOOD_TARGET, }, - { - name: 'browser condition (in browser)', - mapping: { - 'browser': GOOD_TARGET, - 'default': BAD_TARGET, - }, + }, + { + name: 'browser condition (in browser)', + mapping: { + 'browser': GOOD_TARGET, + 'default': BAD_TARGET, }, - ]; + }, + ]; - for (const testCase of testCases) { - describe(testCase.name, () => { - beforeEach(async () => { - await setTargetMapping(harness, testCase.mapping); - }); + for (const testCase of testCases) { + describe(testCase.name, () => { + beforeEach(async () => { + await setTargetMapping(harness, testCase.mapping); + }); - it('resolves to expected target', async () => { - harness.useTarget('serve', { - ...BASE_OPTIONS, - }); + it('resolves to expected target', async () => { + harness.useTarget('serve', { + ...BASE_OPTIONS, + }); - const { result, response } = await executeOnceAndFetch(harness, '/main.js'); + const { result, response } = await executeOnceAndFetch(harness, '/main.js'); - expect(result?.success).toBeTrue(); - const output = await response?.text(); - expect(output).toContain('good-value'); - expect(output).not.toContain('bad-value'); - }); + expect(result?.success).toBeTrue(); + const output = await response?.text(); + expect(output).toContain('good-value'); + expect(output).not.toContain('bad-value'); }); - } - }); - }, -); + }); + } + }); +}); diff --git a/packages/angular/build/src/builders/dev-server/tests/behavior/build_translation_watch_spec.ts b/packages/angular/build/src/builders/dev-server/tests/behavior/build_translation_watch_spec.ts index b7d65e52e966..24dca8a6a5dc 100644 --- a/packages/angular/build/src/builders/dev-server/tests/behavior/build_translation_watch_spec.ts +++ b/packages/angular/build/src/builders/dev-server/tests/behavior/build_translation_watch_spec.ts @@ -12,70 +12,66 @@ import { executeDevServer } from '../../index'; import { describeServeBuilder } from '../jasmine-helpers'; import { BASE_OPTIONS, DEV_SERVER_BUILDER_INFO } from '../setup'; -describeServeBuilder( - executeDevServer, - DEV_SERVER_BUILDER_INFO, - (harness, setupTarget, isViteRun) => { - // TODO(fix-vite): currently this is broken in vite. - (isViteRun ? xdescribe : describe)('Behavior: "i18n translation file watching"', () => { - beforeEach(() => { - harness.useProject('test', { - root: '.', - sourceRoot: 'src', - cli: { - cache: { - enabled: false, - }, +describeServeBuilder(executeDevServer, DEV_SERVER_BUILDER_INFO, (harness, setupTarget) => { + // TODO(fix-vite): currently this is broken in vite. + xdescribe('Behavior: "i18n translation file watching"', () => { + beforeEach(() => { + harness.useProject('test', { + root: '.', + sourceRoot: 'src', + cli: { + cache: { + enabled: false, }, - i18n: { - locales: { - fr: 'src/locales/messages.fr.xlf', - }, + }, + i18n: { + locales: { + fr: 'src/locales/messages.fr.xlf', }, - }); - - setupTarget(harness, { localize: ['fr'] }); + }, }); - it('watches i18n translation files by default', async () => { - harness.useTarget('serve', { - ...BASE_OPTIONS, - watch: true, - }); + setupTarget(harness, { localize: ['fr'] }); + }); + + it('watches i18n translation files by default', async () => { + harness.useTarget('serve', { + ...BASE_OPTIONS, + watch: true, + }); - await harness.writeFile( - 'src/app/app.component.html', - ` + await harness.writeFile( + 'src/app/app.component.html', + `

Hello {{ title }}!

`, - ); + ); - await harness.writeFile('src/locales/messages.fr.xlf', TRANSLATION_FILE_CONTENT); + await harness.writeFile('src/locales/messages.fr.xlf', TRANSLATION_FILE_CONTENT); - await harness.executeWithCases([ - async ({ result }) => { - expect(result?.success).toBe(true); + await harness.executeWithCases([ + async ({ result }) => { + expect(result?.success).toBe(true); - const mainUrl = new URL('main.js', `${result?.baseUrl}`); - const response = await fetch(mainUrl); - expect(await response?.text()).toContain('Bonjour'); + const mainUrl = new URL('main.js', `${result?.baseUrl}`); + const response = await fetch(mainUrl); + expect(await response?.text()).toContain('Bonjour'); - await harness.modifyFile('src/locales/messages.fr.xlf', (content) => - content.replace('Bonjour', 'Salut'), - ); - }, - async ({ result }) => { - expect(result?.success).toBe(true); + await harness.modifyFile('src/locales/messages.fr.xlf', (content) => + content.replace('Bonjour', 'Salut'), + ); + }, + async ({ result }) => { + expect(result?.success).toBe(true); - const mainUrl = new URL('main.js', `${result?.baseUrl}`); - const response = await fetch(mainUrl); - expect(await response?.text()).toContain('Salut'); - }, - ]); - }); + const mainUrl = new URL('main.js', `${result?.baseUrl}`); + const response = await fetch(mainUrl); + expect(await response?.text()).toContain('Salut'); + }, + ]); }); - }, -); + }); +}); const TRANSLATION_FILE_CONTENT = ` diff --git a/packages/angular/build/src/builders/dev-server/tests/behavior/serve-live-reload-proxies_spec.ts b/packages/angular/build/src/builders/dev-server/tests/behavior/serve-live-reload-proxies_spec.ts index efdd749de258..6c41769d5aea 100644 --- a/packages/angular/build/src/builders/dev-server/tests/behavior/serve-live-reload-proxies_spec.ts +++ b/packages/angular/build/src/builders/dev-server/tests/behavior/serve-live-reload-proxies_spec.ts @@ -133,145 +133,138 @@ async function goToPageAndWaitForWS(page: Page, url: string): Promise { await client.detach(); } -describeServeBuilder( - executeDevServer, - DEV_SERVER_BUILDER_INFO, - (harness, setupTarget, isViteRun) => { - // TODO(fix-vite): currently this is broken in vite. - (isViteRun ? xdescribe : describe)( - 'Behavior: "Dev-server builder live-reload with proxies"', - () => { - let browser: Browser; - let page: Page; +describeServeBuilder(executeDevServer, DEV_SERVER_BUILDER_INFO, (harness, setupTarget) => { + // TODO(fix-vite): currently this is broken in vite. + xdescribe('Behavior: "Dev-server builder live-reload with proxies"', () => { + let browser: Browser; + let page: Page; - const SERVE_OPTIONS = Object.freeze({ - ...BASE_OPTIONS, - hmr: false, - watch: true, - liveReload: true, - }); + const SERVE_OPTIONS = Object.freeze({ + ...BASE_OPTIONS, + hmr: false, + watch: true, + liveReload: true, + }); - beforeAll(async () => { - browser = await puppeteer.launch({ - // MacOSX users need to set the local binary manually because Chrome has lib files with - // spaces in them which Bazel does not support in runfiles - // See: https://github.com/angular/angular-cli/pull/17624 - // eslint-disable-next-line max-len - // executablePath: '/Users//git/angular-cli/node_modules/puppeteer/.local-chromium/mac-818858/chrome-mac/Chromium.app/Contents/MacOS/Chromium', - ignoreHTTPSErrors: true, - args: ['--no-sandbox', '--disable-gpu'], - }); - }); + beforeAll(async () => { + browser = await puppeteer.launch({ + // MacOSX users need to set the local binary manually because Chrome has lib files with + // spaces in them which Bazel does not support in runfiles + // See: https://github.com/angular/angular-cli/pull/17624 + // eslint-disable-next-line max-len + // executablePath: '/Users//git/angular-cli/node_modules/puppeteer/.local-chromium/mac-818858/chrome-mac/Chromium.app/Contents/MacOS/Chromium', + ignoreHTTPSErrors: true, + args: ['--no-sandbox', '--disable-gpu'], + }); + }); - afterAll(async () => { - await browser.close(); - }); + afterAll(async () => { + await browser.close(); + }); - beforeEach(async () => { - setupTarget(harness, { - polyfills: ['src/polyfills.ts'], - }); + beforeEach(async () => { + setupTarget(harness, { + polyfills: ['src/polyfills.ts'], + }); - page = await browser.newPage(); - }); + page = await browser.newPage(); + }); - afterEach(async () => { - await page.close(); - }); + afterEach(async () => { + await page.close(); + }); - it('works without proxy', async () => { - harness.useTarget('serve', { - ...SERVE_OPTIONS, - }); + it('works without proxy', async () => { + harness.useTarget('serve', { + ...SERVE_OPTIONS, + }); - await harness.writeFile('src/app/app.component.html', '

{{ title }}

'); + await harness.writeFile('src/app/app.component.html', '

{{ title }}

'); - await harness.executeWithCases([ - async ({ result }) => { - expect(result?.success).toBeTrue(); - if (typeof result?.baseUrl !== 'string') { - throw new Error('Expected "baseUrl" to be a string.'); - } + await harness.executeWithCases([ + async ({ result }) => { + expect(result?.success).toBeTrue(); + if (typeof result?.baseUrl !== 'string') { + throw new Error('Expected "baseUrl" to be a string.'); + } - await goToPageAndWaitForWS(page, result.baseUrl); - await harness.modifyFile('src/app/app.component.ts', (content) => - content.replace(`'app'`, `'app-live-reload'`), - ); - }, - async ({ result }) => { - expect(result?.success).toBeTrue(); - const innerText = await page.evaluate(() => document.querySelector('p').innerText); - expect(innerText).toBe('app-live-reload'); - }, - ]); - }); + await goToPageAndWaitForWS(page, result.baseUrl); + await harness.modifyFile('src/app/app.component.ts', (content) => + content.replace(`'app'`, `'app-live-reload'`), + ); + }, + async ({ result }) => { + expect(result?.success).toBeTrue(); + const innerText = await page.evaluate(() => document.querySelector('p').innerText); + expect(innerText).toBe('app-live-reload'); + }, + ]); + }); - it('works without http -> http proxy', async () => { - harness.useTarget('serve', { - ...SERVE_OPTIONS, - }); + it('works without http -> http proxy', async () => { + harness.useTarget('serve', { + ...SERVE_OPTIONS, + }); - await harness.writeFile('src/app/app.component.html', '

{{ title }}

'); + await harness.writeFile('src/app/app.component.html', '

{{ title }}

'); - let proxy: ProxyInstance | undefined; - try { - await harness.executeWithCases([ - async ({ result }) => { - expect(result?.success).toBeTrue(); - if (typeof result?.baseUrl !== 'string') { - throw new Error('Expected "baseUrl" to be a string.'); - } + let proxy: ProxyInstance | undefined; + try { + await harness.executeWithCases([ + async ({ result }) => { + expect(result?.success).toBeTrue(); + if (typeof result?.baseUrl !== 'string') { + throw new Error('Expected "baseUrl" to be a string.'); + } - proxy = await createProxy(result.baseUrl, false); - await goToPageAndWaitForWS(page, proxy.url); - await harness.modifyFile('src/app/app.component.ts', (content) => - content.replace(`'app'`, `'app-live-reload'`), - ); - }, - async ({ result }) => { - expect(result?.success).toBeTrue(); - const innerText = await page.evaluate(() => document.querySelector('p').innerText); - expect(innerText).toBe('app-live-reload'); - }, - ]); - } finally { - proxy?.server.close(); - } - }); + proxy = await createProxy(result.baseUrl, false); + await goToPageAndWaitForWS(page, proxy.url); + await harness.modifyFile('src/app/app.component.ts', (content) => + content.replace(`'app'`, `'app-live-reload'`), + ); + }, + async ({ result }) => { + expect(result?.success).toBeTrue(); + const innerText = await page.evaluate(() => document.querySelector('p').innerText); + expect(innerText).toBe('app-live-reload'); + }, + ]); + } finally { + proxy?.server.close(); + } + }); - it('works without https -> http proxy', async () => { - harness.useTarget('serve', { - ...SERVE_OPTIONS, - }); + it('works without https -> http proxy', async () => { + harness.useTarget('serve', { + ...SERVE_OPTIONS, + }); - await harness.writeFile('src/app/app.component.html', '

{{ title }}

'); + await harness.writeFile('src/app/app.component.html', '

{{ title }}

'); - let proxy: ProxyInstance | undefined; - try { - await harness.executeWithCases([ - async ({ result }) => { - expect(result?.success).toBeTrue(); - if (typeof result?.baseUrl !== 'string') { - throw new Error('Expected "baseUrl" to be a string.'); - } + let proxy: ProxyInstance | undefined; + try { + await harness.executeWithCases([ + async ({ result }) => { + expect(result?.success).toBeTrue(); + if (typeof result?.baseUrl !== 'string') { + throw new Error('Expected "baseUrl" to be a string.'); + } - proxy = await createProxy(result.baseUrl, true); - await goToPageAndWaitForWS(page, proxy.url); - await harness.modifyFile('src/app/app.component.ts', (content) => - content.replace(`'app'`, `'app-live-reload'`), - ); - }, - async ({ result }) => { - expect(result?.success).toBeTrue(); - const innerText = await page.evaluate(() => document.querySelector('p').innerText); - expect(innerText).toBe('app-live-reload'); - }, - ]); - } finally { - proxy?.server.close(); - } - }); - }, - ); - }, -); + proxy = await createProxy(result.baseUrl, true); + await goToPageAndWaitForWS(page, proxy.url); + await harness.modifyFile('src/app/app.component.ts', (content) => + content.replace(`'app'`, `'app-live-reload'`), + ); + }, + async ({ result }) => { + expect(result?.success).toBeTrue(); + const innerText = await page.evaluate(() => document.querySelector('p').innerText); + expect(innerText).toBe('app-live-reload'); + }, + ]); + } finally { + proxy?.server.close(); + } + }); + }); +}); diff --git a/packages/angular/build/src/builders/dev-server/tests/behavior/serve_service-worker_spec.ts b/packages/angular/build/src/builders/dev-server/tests/behavior/serve_service-worker_spec.ts index b3b63c3a3093..10e2cee70465 100644 --- a/packages/angular/build/src/builders/dev-server/tests/behavior/serve_service-worker_spec.ts +++ b/packages/angular/build/src/builders/dev-server/tests/behavior/serve_service-worker_spec.ts @@ -36,180 +36,174 @@ const manifest = { ], }; -describeServeBuilder( - executeDevServer, - DEV_SERVER_BUILDER_INFO, - (harness, setupTarget, isViteRun) => { - describe('Behavior: "dev-server builder serves service worker"', () => { - beforeEach(async () => { - // Application code is not needed for these tests - await harness.writeFile('src/main.ts', ''); - await harness.writeFile('src/polyfills.ts', ''); - - harness.useProject('test', { - root: '.', - sourceRoot: 'src', - cli: { - cache: { - enabled: false, - }, +describeServeBuilder(executeDevServer, DEV_SERVER_BUILDER_INFO, (harness, setupTarget) => { + describe('Behavior: "dev-server builder serves service worker"', () => { + beforeEach(async () => { + // Application code is not needed for these tests + await harness.writeFile('src/main.ts', ''); + await harness.writeFile('src/polyfills.ts', ''); + + harness.useProject('test', { + root: '.', + sourceRoot: 'src', + cli: { + cache: { + enabled: false, }, - i18n: { - sourceLocale: { - code: 'fr', - }, + }, + i18n: { + sourceLocale: { + code: 'fr', }, - }); + }, + }); + }); + + it('works with service worker', async () => { + setupTarget(harness, { + // eslint-disable-next-line @typescript-eslint/no-explicit-any + serviceWorker: 'ngsw-config.json', + assets: ['src/favicon.ico', 'src/assets'], + styles: ['src/styles.css'], }); - it('works with service worker', async () => { - setupTarget(harness, { - // eslint-disable-next-line @typescript-eslint/no-explicit-any - serviceWorker: (isViteRun ? 'ngsw-config.json' : true) as any, - assets: ['src/favicon.ico', 'src/assets'], - styles: ['src/styles.css'], - }); - - await harness.writeFiles({ - 'ngsw-config.json': JSON.stringify(manifest), - 'src/assets/folder-asset.txt': 'folder-asset.txt', - 'src/styles.css': `body { background: url(./spectrum.png); }`, - }); - - harness.useTarget('serve', { - ...BASE_OPTIONS, - }); - - const { result, response } = await executeOnceAndFetch(harness, '/ngsw.json'); - - expect(result?.success).toBeTrue(); - - expect(await response?.json()).toEqual( - jasmine.objectContaining({ - configVersion: 1, - index: '/index.html', - navigationUrls: [ - { positive: true, regex: '^\\/.*$' }, - { positive: false, regex: '^\\/(?:.+\\/)?[^/]*\\.[^/]*$' }, - { positive: false, regex: '^\\/(?:.+\\/)?[^/]*__[^/]*$' }, - { positive: false, regex: '^\\/(?:.+\\/)?[^/]*__[^/]*\\/.*$' }, - ], - assetGroups: [ - { - name: 'app', - installMode: 'prefetch', - updateMode: 'prefetch', - urls: ['/favicon.ico', '/index.html'], - cacheQueryOptions: { - ignoreVary: true, - }, - patterns: [], + await harness.writeFiles({ + 'ngsw-config.json': JSON.stringify(manifest), + 'src/assets/folder-asset.txt': 'folder-asset.txt', + 'src/styles.css': `body { background: url(./spectrum.png); }`, + }); + + harness.useTarget('serve', { + ...BASE_OPTIONS, + }); + + const { result, response } = await executeOnceAndFetch(harness, '/ngsw.json'); + + expect(result?.success).toBeTrue(); + + expect(await response?.json()).toEqual( + jasmine.objectContaining({ + configVersion: 1, + index: '/index.html', + navigationUrls: [ + { positive: true, regex: '^\\/.*$' }, + { positive: false, regex: '^\\/(?:.+\\/)?[^/]*\\.[^/]*$' }, + { positive: false, regex: '^\\/(?:.+\\/)?[^/]*__[^/]*$' }, + { positive: false, regex: '^\\/(?:.+\\/)?[^/]*__[^/]*\\/.*$' }, + ], + assetGroups: [ + { + name: 'app', + installMode: 'prefetch', + updateMode: 'prefetch', + urls: ['/favicon.ico', '/index.html'], + cacheQueryOptions: { + ignoreVary: true, }, - { - name: 'assets', - installMode: 'lazy', - updateMode: 'prefetch', - urls: ['/assets/folder-asset.txt', '/media/spectrum.png'], - cacheQueryOptions: { - ignoreVary: true, - }, - patterns: [], + patterns: [], + }, + { + name: 'assets', + installMode: 'lazy', + updateMode: 'prefetch', + urls: ['/assets/folder-asset.txt', '/media/spectrum.png'], + cacheQueryOptions: { + ignoreVary: true, }, - ], - dataGroups: [], - hashTable: { - '/favicon.ico': '84161b857f5c547e3699ddfbffc6d8d737542e01', - '/assets/folder-asset.txt': '617f202968a6a81050aa617c2e28e1dca11ce8d4', - '/index.html': isViteRun - ? 'e5b73e6798d2782bf59dd5272d254d5bde364695' - : '9d232e3e13b4605d197037224a2a6303dd337480', - '/media/spectrum.png': '8d048ece46c0f3af4b598a95fd8e4709b631c3c0', + patterns: [], }, - }), - ); + ], + dataGroups: [], + hashTable: { + '/favicon.ico': '84161b857f5c547e3699ddfbffc6d8d737542e01', + '/assets/folder-asset.txt': '617f202968a6a81050aa617c2e28e1dca11ce8d4', + '/index.html': 'e5b73e6798d2782bf59dd5272d254d5bde364695', + '/media/spectrum.png': '8d048ece46c0f3af4b598a95fd8e4709b631c3c0', + }, + }), + ); + }); + + it('works with localize', async () => { + setupTarget(harness, { + // eslint-disable-next-line @typescript-eslint/no-explicit-any + serviceWorker: 'ngsw-config.json' as any, + assets: ['src/favicon.ico', 'src/assets'], + styles: ['src/styles.css'], + localize: ['fr'], }); - it('works with localize', async () => { - setupTarget(harness, { - // eslint-disable-next-line @typescript-eslint/no-explicit-any - serviceWorker: (isViteRun ? 'ngsw-config.json' : true) as any, - assets: ['src/favicon.ico', 'src/assets'], - styles: ['src/styles.css'], - localize: ['fr'], - }); + await harness.writeFiles({ + 'ngsw-config.json': JSON.stringify(manifest), + 'src/assets/folder-asset.txt': 'folder-asset.txt', + 'src/styles.css': `body { background: url(./spectrum.png); }`, + }); + + harness.useTarget('serve', { + ...BASE_OPTIONS, + }); - await harness.writeFiles({ - 'ngsw-config.json': JSON.stringify(manifest), - 'src/assets/folder-asset.txt': 'folder-asset.txt', - 'src/styles.css': `body { background: url(./spectrum.png); }`, - }); + const { result, response } = await executeOnceAndFetch(harness, '/ngsw.json'); - harness.useTarget('serve', { - ...BASE_OPTIONS, - }); + expect(result?.success).toBeTrue(); - const { result, response } = await executeOnceAndFetch(harness, '/ngsw.json'); + expect(await response?.json()).toBeDefined(); + }); - expect(result?.success).toBeTrue(); + // TODO(fix-vite): currently this is broken in vite due to watcher never terminates. + xit('works in watch mode', async () => { + setupTarget(harness, { + // eslint-disable-next-line @typescript-eslint/no-explicit-any + serviceWorker: 'ngsw-config.json' as any, + assets: ['src/favicon.ico', 'src/assets'], + styles: ['src/styles.css'], + }); - expect(await response?.json()).toBeDefined(); + await harness.writeFiles({ + 'ngsw-config.json': JSON.stringify(manifest), + 'src/assets/folder-asset.txt': 'folder-asset.txt', + 'src/styles.css': `body { background: url(./spectrum.png); }`, }); - // TODO(fix-vite): currently this is broken in vite due to watcher never terminates. - (isViteRun ? xit : it)('works in watch mode', async () => { - setupTarget(harness, { - // eslint-disable-next-line @typescript-eslint/no-explicit-any - serviceWorker: (isViteRun ? 'ngsw-config.json' : true) as any, - assets: ['src/favicon.ico', 'src/assets'], - styles: ['src/styles.css'], - }); - - await harness.writeFiles({ - 'ngsw-config.json': JSON.stringify(manifest), - 'src/assets/folder-asset.txt': 'folder-asset.txt', - 'src/styles.css': `body { background: url(./spectrum.png); }`, - }); - - harness.useTarget('serve', { - ...BASE_OPTIONS, - watch: true, - }); - - await harness.executeWithCases([ - async ({ result }) => { - expect(result?.success).toBeTrue(); - const response = await fetch(new URL('ngsw.json', `${result?.baseUrl}`)); - const { hashTable } = (await response.json()) as { hashTable: object }; - const hashTableEntries = Object.keys(hashTable); - - expect(hashTableEntries).toEqual([ - '/assets/folder-asset.txt', - '/favicon.ico', - '/index.html', - '/media/spectrum.png', - ]); - - await harness.writeFile( - 'src/assets/folder-new-asset.txt', - harness.readFile('src/assets/folder-asset.txt'), - ); - }, - async ({ result }) => { - expect(result?.success).toBeTrue(); - const response = await fetch(new URL('ngsw.json', `${result?.baseUrl}`)); - const { hashTable } = (await response.json()) as { hashTable: object }; - const hashTableEntries = Object.keys(hashTable); - - expect(hashTableEntries).toEqual([ - '/assets/folder-asset.txt', - '/assets/folder-new-asset.txt', - '/favicon.ico', - '/index.html', - '/media/spectrum.png', - ]); - }, - ]); + harness.useTarget('serve', { + ...BASE_OPTIONS, + watch: true, }); + + await harness.executeWithCases([ + async ({ result }) => { + expect(result?.success).toBeTrue(); + const response = await fetch(new URL('ngsw.json', `${result?.baseUrl}`)); + const { hashTable } = (await response.json()) as { hashTable: object }; + const hashTableEntries = Object.keys(hashTable); + + expect(hashTableEntries).toEqual([ + '/assets/folder-asset.txt', + '/favicon.ico', + '/index.html', + '/media/spectrum.png', + ]); + + await harness.writeFile( + 'src/assets/folder-new-asset.txt', + harness.readFile('src/assets/folder-asset.txt'), + ); + }, + async ({ result }) => { + expect(result?.success).toBeTrue(); + const response = await fetch(new URL('ngsw.json', `${result?.baseUrl}`)); + const { hashTable } = (await response.json()) as { hashTable: object }; + const hashTableEntries = Object.keys(hashTable); + + expect(hashTableEntries).toEqual([ + '/assets/folder-asset.txt', + '/assets/folder-new-asset.txt', + '/favicon.ico', + '/index.html', + '/media/spectrum.png', + ]); + }, + ]); }); - }, -); + }); +}); diff --git a/packages/angular/build/src/builders/dev-server/tests/jasmine-helpers.ts b/packages/angular/build/src/builders/dev-server/tests/jasmine-helpers.ts index 966418e16a61..0781b3d875a7 100644 --- a/packages/angular/build/src/builders/dev-server/tests/jasmine-helpers.ts +++ b/packages/angular/build/src/builders/dev-server/tests/jasmine-helpers.ts @@ -20,7 +20,6 @@ export function describeServeBuilder( specDefinitions: ( harness: JasmineBuilderHarness, setupTarget: typeof setupApplicationTarget, - isViteRun: true, ) => void, ): void { let optionSchema = optionSchemaCache.get(options.schemaPath); @@ -38,6 +37,6 @@ export function describeServeBuilder( beforeEach(() => host.initialize().toPromise()); afterEach(() => host.restore().toPromise()); - specDefinitions(harness, setupApplicationTarget, true); + specDefinitions(harness, setupApplicationTarget); }); } diff --git a/packages/angular/build/src/builders/dev-server/tests/options/port_spec.ts b/packages/angular/build/src/builders/dev-server/tests/options/port_spec.ts index 83f3a4d1486b..8869dd20dcbb 100644 --- a/packages/angular/build/src/builders/dev-server/tests/options/port_spec.ts +++ b/packages/angular/build/src/builders/dev-server/tests/options/port_spec.ts @@ -26,87 +26,58 @@ function getResultPort(result: Record | undefined): string | un } } -describeServeBuilder( - executeDevServer, - DEV_SERVER_BUILDER_INFO, - (harness, setupTarget, isViteRun) => { - describe('option: "port"', () => { - beforeEach(async () => { - setupTarget(harness); - - // Application code is not needed for these tests - await harness.writeFile('src/main.ts', ''); - }); +describeServeBuilder(executeDevServer, DEV_SERVER_BUILDER_INFO, (harness, setupTarget) => { + describe('option: "port"', () => { + beforeEach(async () => { + setupTarget(harness); + + // Application code is not needed for these tests + await harness.writeFile('src/main.ts', ''); + }); - it('uses default port (4200) when not present', async () => { - harness.useTarget('serve', { - ...BASE_OPTIONS, - // Base options set port to zero - port: undefined, - }); - - const { result, response, logs } = await executeOnceAndFetch(harness, '/'); - - expect(result?.success).toBeTrue(); - expect(getResultPort(result)).toBe('4200'); - expect(await response?.text()).toContain(''); - - if (!isViteRun) { - expect(logs).toContain( - jasmine.objectContaining({ - message: jasmine.stringMatching(/:4200/), - }), - ); - } + it('uses default port (4200) when not present', async () => { + harness.useTarget('serve', { + ...BASE_OPTIONS, + // Base options set port to zero + port: undefined, }); - it('uses a random free port when set to 0 (zero)', async () => { - harness.useTarget('serve', { - ...BASE_OPTIONS, - port: 0, - }); - - const { result, response, logs } = await executeOnceAndFetch(harness, '/'); - - expect(result?.success).toBeTrue(); - const port = getResultPort(result); - expect(port).not.toBe('4200'); - if (isViteRun) { - // Should not be default Vite port either - expect(port).not.toBe('5173'); - } - - expect(port).toMatch(/\d{4,6}/); - expect(await response?.text()).toContain('<title>'); - - if (!isViteRun) { - expect(logs).toContain( - jasmine.objectContaining({ - message: jasmine.stringMatching(':' + port), - }), - ); - } + const { result, response, logs } = await executeOnceAndFetch(harness, '/'); + + expect(result?.success).toBeTrue(); + expect(getResultPort(result)).toBe('4200'); + expect(await response?.text()).toContain('<title>'); + }); + + it('uses a random free port when set to 0 (zero)', async () => { + harness.useTarget('serve', { + ...BASE_OPTIONS, + port: 0, }); - it('uses specific port when a non-zero number is specified', async () => { - harness.useTarget('serve', { - ...BASE_OPTIONS, - port: 8000, - }); - - const { result, response, logs } = await executeOnceAndFetch(harness, '/'); - - expect(result?.success).toBeTrue(); - expect(getResultPort(result)).toBe('8000'); - expect(await response?.text()).toContain('<title>'); - if (!isViteRun) { - expect(logs).toContain( - jasmine.objectContaining({ - message: jasmine.stringMatching(':8000'), - }), - ); - } + const { result, response, logs } = await executeOnceAndFetch(harness, '/'); + + expect(result?.success).toBeTrue(); + const port = getResultPort(result); + expect(port).not.toBe('4200'); + // Should not be default Vite port either + expect(port).not.toBe('5173'); + + expect(port).toMatch(/\d{4,6}/); + expect(await response?.text()).toContain('<title>'); + }); + + it('uses specific port when a non-zero number is specified', async () => { + harness.useTarget('serve', { + ...BASE_OPTIONS, + port: 8000, }); + + const { result, response, logs } = await executeOnceAndFetch(harness, '/'); + + expect(result?.success).toBeTrue(); + expect(getResultPort(result)).toBe('8000'); + expect(await response?.text()).toContain('<title>'); }); - }, -); + }); +}); diff --git a/packages/angular/build/src/builders/dev-server/tests/options/prebundle_spec.ts b/packages/angular/build/src/builders/dev-server/tests/options/prebundle_spec.ts index 1e7c5fcd7322..80bab96d3bb8 100644 --- a/packages/angular/build/src/builders/dev-server/tests/options/prebundle_spec.ts +++ b/packages/angular/build/src/builders/dev-server/tests/options/prebundle_spec.ts @@ -12,88 +12,84 @@ import { describeServeBuilder } from '../jasmine-helpers'; import { BASE_OPTIONS, DEV_SERVER_BUILDER_INFO } from '../setup'; // TODO: Temporarily disabled pending investigation into test-only Vite not stopping when caching is enabled -describeServeBuilder( - executeDevServer, - DEV_SERVER_BUILDER_INFO, - (harness, setupTarget, isViteRun) => { - // prebundling is not available in webpack - (isViteRun ? xdescribe : xdescribe)('option: "prebundle"', () => { - beforeEach(async () => { - setupTarget(harness); - - harness.useProject('test', { - cli: { - cache: { - enabled: true, - }, +describeServeBuilder(executeDevServer, DEV_SERVER_BUILDER_INFO, (harness, setupTarget) => { + // prebundling is not available in webpack + xdescribe('option: "prebundle"', () => { + beforeEach(async () => { + setupTarget(harness); + + harness.useProject('test', { + cli: { + cache: { + enabled: true, }, - }); + }, + }); - // Application code is not needed for these tests - await harness.writeFile( - 'src/main.ts', - ` + // Application code is not needed for these tests + await harness.writeFile( + 'src/main.ts', + ` import { VERSION as coreVersion } from '@angular/core'; import { VERSION as platformVersion } from '@angular/platform-browser'; console.log(coreVersion); console.log(platformVersion); `, - ); + ); + }); + + it('should prebundle dependencies when option is not present', async () => { + harness.useTarget('serve', { + ...BASE_OPTIONS, }); - it('should prebundle dependencies when option is not present', async () => { - harness.useTarget('serve', { - ...BASE_OPTIONS, - }); + const { result, content } = await executeOnceAndFetch(harness, '/main.js'); - const { result, content } = await executeOnceAndFetch(harness, '/main.js'); + expect(result?.success).toBeTrue(); + expect(content).toContain('vite/deps/@angular_core.js'); + expect(content).not.toContain('node_modules/@angular/core/'); + }); - expect(result?.success).toBeTrue(); - expect(content).toContain('vite/deps/@angular_core.js'); - expect(content).not.toContain('node_modules/@angular/core/'); + it('should prebundle dependencies when option is set to true', async () => { + harness.useTarget('serve', { + ...BASE_OPTIONS, + prebundle: true, }); - it('should prebundle dependencies when option is set to true', async () => { - harness.useTarget('serve', { - ...BASE_OPTIONS, - prebundle: true, - }); + const { result, content } = await executeOnceAndFetch(harness, '/main.js'); - const { result, content } = await executeOnceAndFetch(harness, '/main.js'); + expect(result?.success).toBeTrue(); + expect(content).toContain('vite/deps/@angular_core.js'); + expect(content).not.toContain('node_modules/@angular/core/'); + }); - expect(result?.success).toBeTrue(); - expect(content).toContain('vite/deps/@angular_core.js'); - expect(content).not.toContain('node_modules/@angular/core/'); + it('should not prebundle dependencies when option is set to false', async () => { + harness.useTarget('serve', { + ...BASE_OPTIONS, + prebundle: false, }); - it('should not prebundle dependencies when option is set to false', async () => { - harness.useTarget('serve', { - ...BASE_OPTIONS, - prebundle: false, - }); + const { result, content } = await executeOnceAndFetch(harness, '/main.js'); - const { result, content } = await executeOnceAndFetch(harness, '/main.js'); + expect(result?.success).toBeTrue(); + expect(content).not.toContain('vite/deps/@angular_core.js'); + expect(content).toContain('node_modules/@angular/core/'); + }); - expect(result?.success).toBeTrue(); - expect(content).not.toContain('vite/deps/@angular_core.js'); - expect(content).toContain('node_modules/@angular/core/'); + it('should not prebundle specified dependency if added to exclude list', async () => { + harness.useTarget('serve', { + ...BASE_OPTIONS, + prebundle: { exclude: ['@angular/platform-browser'] }, }); - it('should not prebundle specified dependency if added to exclude list', async () => { - harness.useTarget('serve', { - ...BASE_OPTIONS, - prebundle: { exclude: ['@angular/platform-browser'] }, - }); + const { result, content } = await executeOnceAndFetch(harness, '/main.js'); - const { result, content } = await executeOnceAndFetch(harness, '/main.js'); - - expect(result?.success).toBeTrue(); - expect(content).toContain('vite/deps/@angular_core.js'); - expect(content).not.toContain('node_modules/@angular/core/'); - expect(content).not.toContain('vite/deps/@angular_platform-browser.js'); - expect(content).toContain('node_modules/@angular/platform-browser/'); - }); + expect(result?.success).toBeTrue(); + expect(content).toContain('vite/deps/@angular_core.js'); + expect(content).not.toContain('node_modules/@angular/core/'); + expect(content).not.toContain('vite/deps/@angular_platform-browser.js'); + expect(content).toContain('node_modules/@angular/platform-browser/'); }); - }, -); + }); +}); diff --git a/packages/angular/build/src/builders/dev-server/tests/options/proxy-config_spec.ts b/packages/angular/build/src/builders/dev-server/tests/options/proxy-config_spec.ts index 78f3323b97cc..1c6dfb60ca9d 100644 --- a/packages/angular/build/src/builders/dev-server/tests/options/proxy-config_spec.ts +++ b/packages/angular/build/src/builders/dev-server/tests/options/proxy-config_spec.ts @@ -12,7 +12,7 @@ import { executeOnceAndFetch } from '../execute-fetch'; import { describeServeBuilder } from '../jasmine-helpers'; import { BASE_OPTIONS, DEV_SERVER_BUILDER_INFO, BuilderHarness } from '../setup'; -describeServeBuilder(executeDevServer, DEV_SERVER_BUILDER_INFO, (harness, setupTarget, isVite) => { +describeServeBuilder(executeDevServer, DEV_SERVER_BUILDER_INFO, (harness, setupTarget) => { describe('option: "proxyConfig"', () => { beforeEach(async () => { setupTarget(harness); @@ -236,14 +236,51 @@ describeServeBuilder(executeDevServer, DEV_SERVER_BUILDER_INFO, (harness, setupT } }); - /** - * **************************************************************************************************** - * ********************************** Below only Vite specific tests ********************************** - * **************************************************************************************************** - */ - if (isVite) { - viteOnlyTests(harness); - } + it('proxies support regexp as context', async () => { + harness.useTarget('serve', { + ...BASE_OPTIONS, + proxyConfig: 'proxy.config.json', + }); + + const proxyServer = await createProxyServer(); + try { + await harness.writeFiles({ + 'proxy.config.json': ` + { "^/api/.*": { "target": "http://127.0.0.1:${proxyServer.address.port}" } } + `, + }); + + const { result, response } = await executeOnceAndFetch(harness, '/api/test'); + + expect(result?.success).toBeTrue(); + expect(await response?.text()).toContain('TEST_API_RETURN'); + } finally { + await proxyServer.close(); + } + }); + + it('proxies support negated regexp as context', async () => { + harness.useTarget('serve', { + ...BASE_OPTIONS, + proxyConfig: 'proxy.config.json', + }); + + const proxyServer = await createProxyServer(); + try { + await harness.writeFiles({ + 'proxy.config.json': ` + { "^\\/(?!something).*": { "target": "http://127.0.0.1:${proxyServer.address.port}" } } + `, + }); + + const { result, response } = await executeOnceAndFetch(harness, '/api/test'); + + expect(result?.success).toBeTrue(); + expect(await response?.text()).toContain('TEST_API_RETURN'); + } finally { + await proxyServer.close(); + } + }); }); }); @@ -270,54 +307,3 @@ async function createProxyServer() { close: () => new Promise<void>((resolve) => proxyServer.close(() => resolve())), }; } - -/** - * Vite specific tests - */ -function viteOnlyTests(harness: BuilderHarness<unknown>): void { - it('proxies support regexp as context', async () => { - harness.useTarget('serve', { - ...BASE_OPTIONS, - proxyConfig: 'proxy.config.json', - }); - - const proxyServer = await createProxyServer(); - try { - await harness.writeFiles({ - 'proxy.config.json': ` - { "^/api/.*": { "target": "http://127.0.0.1:${proxyServer.address.port}" } } - `, - }); - - const { result, response } = await executeOnceAndFetch(harness, '/api/test'); - - expect(result?.success).toBeTrue(); - expect(await response?.text()).toContain('TEST_API_RETURN'); - } finally { - await proxyServer.close(); - } - }); - - it('proxies support negated regexp as context', async () => { - harness.useTarget('serve', { - ...BASE_OPTIONS, - proxyConfig: 'proxy.config.json', - }); - - const proxyServer = await createProxyServer(); - try { - await harness.writeFiles({ - 'proxy.config.json': ` - { "^\\/(?!something).*": { "target": "http://127.0.0.1:${proxyServer.address.port}" } } - `, - }); - - const { result, response } = await executeOnceAndFetch(harness, '/api/test'); - - expect(result?.success).toBeTrue(); - expect(await response?.text()).toContain('TEST_API_RETURN'); - } finally { - await proxyServer.close(); - } - }); -} diff --git a/packages/angular/build/src/builders/dev-server/tests/options/serve-path_spec.ts b/packages/angular/build/src/builders/dev-server/tests/options/serve-path_spec.ts index 7570175c65d2..5917dcc8eeb4 100644 --- a/packages/angular/build/src/builders/dev-server/tests/options/serve-path_spec.ts +++ b/packages/angular/build/src/builders/dev-server/tests/options/serve-path_spec.ts @@ -12,109 +12,105 @@ import { executeOnceAndFetch } from '../execute-fetch'; import { describeServeBuilder } from '../jasmine-helpers'; import { BASE_OPTIONS, DEV_SERVER_BUILDER_INFO } from '../setup'; -describeServeBuilder( - executeDevServer, - DEV_SERVER_BUILDER_INFO, - (harness, setupTarget, isViteRun) => { - describe('option: "servePath"', () => { - beforeEach(async () => { - setupTarget(harness, { - assets: ['src/assets'], - }); - - // Application code is not needed for these tests - await harness.writeFile('src/main.ts', 'console.log("foo");'); +describeServeBuilder(executeDevServer, DEV_SERVER_BUILDER_INFO, (harness, setupTarget) => { + describe('option: "servePath"', () => { + beforeEach(async () => { + setupTarget(harness, { + assets: ['src/assets'], }); - it('serves application at the root when option is not present', async () => { - harness.useTarget('serve', { - ...BASE_OPTIONS, - }); - - const { result, response } = await executeOnceAndFetch(harness, '/main.js'); + // Application code is not needed for these tests + await harness.writeFile('src/main.ts', 'console.log("foo");'); + }); - expect(result?.success).toBeTrue(); - const baseUrl = new URL(`${result?.baseUrl}`); - expect(baseUrl.pathname).toBe('/'); - expect(await response?.text()).toContain('console.log'); + it('serves application at the root when option is not present', async () => { + harness.useTarget('serve', { + ...BASE_OPTIONS, }); - it('serves application at specified path when option is used', async () => { - harness.useTarget('serve', { - ...BASE_OPTIONS, - servePath: 'test', - }); + const { result, response } = await executeOnceAndFetch(harness, '/main.js'); - const { result, response } = await executeOnceAndFetch(harness, '/test/main.js'); + expect(result?.success).toBeTrue(); + const baseUrl = new URL(`${result?.baseUrl}`); + expect(baseUrl.pathname).toBe('/'); + expect(await response?.text()).toContain('console.log'); + }); - expect(result?.success).toBeTrue(); - const baseUrl = new URL(`${result?.baseUrl}/`); - expect(baseUrl.pathname).toBe('/test/'); - expect(await response?.text()).toContain('console.log'); + it('serves application at specified path when option is used', async () => { + harness.useTarget('serve', { + ...BASE_OPTIONS, + servePath: 'test', }); - // TODO(fix-vite): currently this is broken in vite. - (isViteRun ? xit : it)('does not rewrite from root when option is used', async () => { - harness.useTarget('serve', { - ...BASE_OPTIONS, - servePath: 'test', - }); + const { result, response } = await executeOnceAndFetch(harness, '/test/main.js'); - const { result, response } = await executeOnceAndFetch(harness, '/', { - // fallback processing requires an accept header - request: { headers: { accept: 'text/html' } }, - }); + expect(result?.success).toBeTrue(); + const baseUrl = new URL(`${result?.baseUrl}/`); + expect(baseUrl.pathname).toBe('/test/'); + expect(await response?.text()).toContain('console.log'); + }); - expect(result?.success).toBeTrue(); - expect(response?.status).toBe(404); + // TODO(fix-vite): currently this is broken in vite. + xit('does not rewrite from root when option is used', async () => { + harness.useTarget('serve', { + ...BASE_OPTIONS, + servePath: 'test', }); - it('does not rewrite from path outside serve path when option is used', async () => { - harness.useTarget('serve', { - ...BASE_OPTIONS, - servePath: 'test', - }); + const { result, response } = await executeOnceAndFetch(harness, '/', { + // fallback processing requires an accept header + request: { headers: { accept: 'text/html' } }, + }); - const { result, response } = await executeOnceAndFetch(harness, '/api/', { - // fallback processing requires an accept header - request: { headers: { accept: 'text/html' } }, - }); + expect(result?.success).toBeTrue(); + expect(response?.status).toBe(404); + }); - expect(result?.success).toBeTrue(); - expect(response?.status).toBe(404); + it('does not rewrite from path outside serve path when option is used', async () => { + harness.useTarget('serve', { + ...BASE_OPTIONS, + servePath: 'test', }); - it('rewrites from path inside serve path when option is used', async () => { - harness.useTarget('serve', { - ...BASE_OPTIONS, - servePath: 'test', - }); + const { result, response } = await executeOnceAndFetch(harness, '/api/', { + // fallback processing requires an accept header + request: { headers: { accept: 'text/html' } }, + }); - const { result, response } = await executeOnceAndFetch(harness, '/test/inside', { - // fallback processing requires an accept header - request: { headers: { accept: 'text/html' } }, - }); + expect(result?.success).toBeTrue(); + expect(response?.status).toBe(404); + }); + + it('rewrites from path inside serve path when option is used', async () => { + harness.useTarget('serve', { + ...BASE_OPTIONS, + servePath: 'test', + }); - expect(result?.success).toBeTrue(); - expect(await response?.text()).toContain('<title>'); + const { result, response } = await executeOnceAndFetch(harness, '/test/inside', { + // fallback processing requires an accept header + request: { headers: { accept: 'text/html' } }, }); - it('serves assets at specified path when option is used', async () => { - await harness.writeFile('src/assets/test.txt', 'hello world!'); + expect(result?.success).toBeTrue(); + expect(await response?.text()).toContain('<title>'); + }); - harness.useTarget('serve', { - ...BASE_OPTIONS, - servePath: 'test', - }); + it('serves assets at specified path when option is used', async () => { + await harness.writeFile('src/assets/test.txt', 'hello world!'); - const { result, response } = await executeOnceAndFetch(harness, '/test/assets/test.txt', { - // fallback processing requires an accept header - request: { headers: { accept: 'text/html' } }, - }); + harness.useTarget('serve', { + ...BASE_OPTIONS, + servePath: 'test', + }); - expect(result?.success).toBeTrue(); - expect(await response?.text()).toContain('hello world'); + const { result, response } = await executeOnceAndFetch(harness, '/test/assets/test.txt', { + // fallback processing requires an accept header + request: { headers: { accept: 'text/html' } }, }); + + expect(result?.success).toBeTrue(); + expect(await response?.text()).toContain('hello world'); }); - }, -); + }); +}); From 069e3d3edd4abeb55b62351f81109e9693438c19 Mon Sep 17 00:00:00 2001 From: Alan Agius <17563226+alan-agius4@users.noreply.github.com> Date: Fri, 27 Feb 2026 13:48:31 +0000 Subject: [PATCH 062/226] fix(@angular/cli): disable npm update notifier in package manager host The NPM update notifier can prevent child processes from closing promptly, causing them to hang until a timeout occurs (up to 3 minutes). This change disables the update notifier by setting the `NO_UPDATE_NOTIFIER` and `NPM_CONFIG_UPDATE_NOTIFIER` environment variables when spawning package manager processes. --- packages/angular/cli/src/package-managers/host.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/packages/angular/cli/src/package-managers/host.ts b/packages/angular/cli/src/package-managers/host.ts index 893393970907..cee68015f677 100644 --- a/packages/angular/cli/src/package-managers/host.ts +++ b/packages/angular/cli/src/package-managers/host.ts @@ -137,6 +137,9 @@ export const NodeJS_HOST: Host = { env: { ...process.env, ...options.env, + // NPM updater notifier will prevents the child process from closing until it timeout after 3 minutes. + NO_UPDATE_NOTIFIER: '1', + NPM_CONFIG_UPDATE_NOTIFIER: 'false', }, } satisfies SpawnOptions; const childProcess = isWin32 From 8fb74c9b84885c35ad2a09bb9971a3f17effbc4c Mon Sep 17 00:00:00 2001 From: Charles Lyding <19598772+clydin@users.noreply.github.com> Date: Fri, 27 Feb 2026 09:28:02 -0500 Subject: [PATCH 063/226] refactor(@angular-devkit/build-angular): remove unused utility files With the protractor builder removed, these utility functions are no longer used. --- .../angular_devkit/build_angular/BUILD.bazel | 1 - .../build_angular/src/utils/index.ts | 1 - .../utils/run-module-as-observable-fork.ts | 86 ------------------- .../src/utils/run-module-worker.js | 18 ---- 4 files changed, 106 deletions(-) delete mode 100644 packages/angular_devkit/build_angular/src/utils/run-module-as-observable-fork.ts delete mode 100644 packages/angular_devkit/build_angular/src/utils/run-module-worker.js diff --git a/packages/angular_devkit/build_angular/BUILD.bazel b/packages/angular_devkit/build_angular/BUILD.bazel index ee90b96ec703..b475ebfdf1bc 100644 --- a/packages/angular_devkit/build_angular/BUILD.bazel +++ b/packages/angular_devkit/build_angular/BUILD.bazel @@ -72,7 +72,6 @@ copy_to_bin( RUNTIME_ASSETS = glob( include = [ "src/**/schema.json", - "src/**/*.js", "src/**/*.html", ], ) + [ diff --git a/packages/angular_devkit/build_angular/src/utils/index.ts b/packages/angular_devkit/build_angular/src/utils/index.ts index 16aaa04d8c34..da07543fafa8 100644 --- a/packages/angular_devkit/build_angular/src/utils/index.ts +++ b/packages/angular_devkit/build_angular/src/utils/index.ts @@ -8,7 +8,6 @@ export * from './default-progress'; export { deleteOutputDir, loadProxyConfiguration } from '@angular/build/private'; -export * from './run-module-as-observable-fork'; export * from './normalize-file-replacements'; export * from './normalize-asset-patterns'; export * from './normalize-source-maps'; diff --git a/packages/angular_devkit/build_angular/src/utils/run-module-as-observable-fork.ts b/packages/angular_devkit/build_angular/src/utils/run-module-as-observable-fork.ts deleted file mode 100644 index f447103da9b4..000000000000 --- a/packages/angular_devkit/build_angular/src/utils/run-module-as-observable-fork.ts +++ /dev/null @@ -1,86 +0,0 @@ -/** - * @license - * Copyright Google LLC All Rights Reserved. - * - * Use of this source code is governed by an MIT-style license that can be - * found in the LICENSE file at https://angular.dev/license - */ - -import { BuilderOutput } from '@angular-devkit/architect'; -import { ForkOptions, fork } from 'node:child_process'; -import { resolve } from 'node:path'; -import { Observable } from 'rxjs'; -import treeKill from 'tree-kill'; - -export function runModuleAsObservableFork( - cwd: string, - modulePath: string, - exportName: string | undefined, - // eslint-disable-next-line @typescript-eslint/no-explicit-any - args: any[], -): Observable<BuilderOutput> { - return new Observable((obs) => { - const workerPath: string = resolve(__dirname, './run-module-worker.js'); - - const debugArgRegex = /--inspect(?:-brk|-port)?|--debug(?:-brk|-port)/; - const execArgv = process.execArgv.filter((arg) => { - // Remove debug args. - // Workaround for https://github.com/nodejs/node/issues/9435 - return !debugArgRegex.test(arg); - }); - const forkOptions: ForkOptions = { - cwd, - execArgv, - }; - - // TODO: support passing in a logger to use as stdio streams - // if (logger) { - // (forkOptions as any).stdio = [ - // 'ignore', - // logger.info, // make it a stream - // logger.error, // make it a stream - // ]; - // } - - const forkedProcess = fork(workerPath, undefined, forkOptions); - - // Cleanup. - const killForkedProcess = () => { - if (forkedProcess && forkedProcess.pid) { - treeKill(forkedProcess.pid, 'SIGTERM'); - } - }; - - // Handle child process exit. - const handleChildProcessExit = (code?: number) => { - killForkedProcess(); - if (code && code !== 0) { - obs.error(); - } - obs.next({ success: true }); - obs.complete(); - }; - forkedProcess.once('exit', handleChildProcessExit); - forkedProcess.once('SIGINT', handleChildProcessExit); - forkedProcess.once('uncaughtException', handleChildProcessExit); - - // Handle parent process exit. - const handleParentProcessExit = () => { - killForkedProcess(); - }; - process.once('exit', handleParentProcessExit); - process.once('SIGINT', handleParentProcessExit); - process.once('uncaughtException', handleParentProcessExit); - - // Run module. - forkedProcess.send({ - hash: '5d4b9a5c0a4e0f9977598437b0e85bcc', - modulePath, - exportName, - args, - }); - - // Teardown logic. When unsubscribing, kill the forked process. - return killForkedProcess; - }); -} diff --git a/packages/angular_devkit/build_angular/src/utils/run-module-worker.js b/packages/angular_devkit/build_angular/src/utils/run-module-worker.js deleted file mode 100644 index a6f3fa54513a..000000000000 --- a/packages/angular_devkit/build_angular/src/utils/run-module-worker.js +++ /dev/null @@ -1,18 +0,0 @@ -/** - * @license - * Copyright Google LLC All Rights Reserved. - * - * Use of this source code is governed by an MIT-style license that can be - * found in the LICENSE file at https://angular.dev/license - */ -process.on('message', (message) => { - // Only process messages with the hash in 'run-module-as-observable-fork.ts'. - if (message.hash === '5d4b9a5c0a4e0f9977598437b0e85bcc') { - const requiredModule = require(message.modulePath); - if (message.exportName) { - requiredModule[message.exportName](...message.args); - } else { - requiredModule(...message.args); - } - } -}); From 9c2ca3ac5a9bc1e5c47c8fb01e1699127aac1fbe Mon Sep 17 00:00:00 2001 From: Alan Agius <17563226+alan-agius4@users.noreply.github.com> Date: Thu, 26 Feb 2026 13:38:43 +0000 Subject: [PATCH 064/226] test: simplify array option parsing test cases by consolidating multiple flag usages into a single flag with multiple values This ensures that array parsing is handled correctly. --- .../utilities/json-schema_spec.ts | 22 +++---------------- 1 file changed, 3 insertions(+), 19 deletions(-) diff --git a/packages/angular/cli/src/command-builder/utilities/json-schema_spec.ts b/packages/angular/cli/src/command-builder/utilities/json-schema_spec.ts index d311373d69f0..f0aca0175f30 100644 --- a/packages/angular/cli/src/command-builder/utilities/json-schema_spec.ts +++ b/packages/angular/cli/src/command-builder/utilities/json-schema_spec.ts @@ -139,9 +139,7 @@ describe('parseJsonSchemaToOptions', () => { describe('type=array, enum', () => { it('parses valid option value', async () => { - expect( - await parse(['--arrayWithChoices', 'always', '--arrayWithChoices', 'never']), - ).toEqual( + expect(await parse(['--arrayWithChoices', 'always', 'never'])).toEqual( jasmine.objectContaining({ 'arrayWithChoices': ['always', 'never'], }), @@ -161,14 +159,7 @@ describe('parseJsonSchemaToOptions', () => { describe('type=array, enum in oneOf', () => { it('parses valid option value', async () => { - expect( - await parse([ - '--arrayWithChoicesInOneOf', - 'default', - '--arrayWithChoicesInOneOf', - 'verbose', - ]), - ).toEqual( + expect(await parse(['--arrayWithChoicesInOneOf', 'default', 'verbose'])).toEqual( jasmine.objectContaining({ 'arrayWithChoicesInOneOf': ['default', 'verbose'], }), @@ -184,14 +175,7 @@ describe('parseJsonSchemaToOptions', () => { describe('type=array, anyOf', () => { it('parses valid option value', async () => { - expect( - await parse([ - '--arrayWithComplexAnyOf', - 'default', - '--arrayWithComplexAnyOf', - 'something-else', - ]), - ).toEqual( + expect(await parse(['--arrayWithComplexAnyOf', 'default', 'something-else'])).toEqual( jasmine.objectContaining({ 'arrayWithComplexAnyOf': ['default', 'something-else'], }), From 64ec3377bbe401968a9b6124fe80aa5b3c208c4b Mon Sep 17 00:00:00 2001 From: Alan Agius <17563226+alan-agius4@users.noreply.github.com> Date: Thu, 26 Feb 2026 13:58:45 +0000 Subject: [PATCH 065/226] test: optimize `json-schema_spec.ts` by parsing the schema once in `beforeAll` instead of `beforeEach` This reduces the parsing times. --- .../utilities/json-schema_spec.ts | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/packages/angular/cli/src/command-builder/utilities/json-schema_spec.ts b/packages/angular/cli/src/command-builder/utilities/json-schema_spec.ts index f0aca0175f30..b74cbfc9d6ad 100644 --- a/packages/angular/cli/src/command-builder/utilities/json-schema_spec.ts +++ b/packages/angular/cli/src/command-builder/utilities/json-schema_spec.ts @@ -9,7 +9,7 @@ import { JsonObject, schema } from '@angular-devkit/core'; import yargs from 'yargs'; -import { addSchemaOptionsToCommand, parseJsonSchemaToOptions } from './json-schema'; +import { Option, addSchemaOptionsToCommand, parseJsonSchemaToOptions } from './json-schema'; describe('parseJsonSchemaToOptions', () => { describe('without required fields in schema', () => { @@ -21,10 +21,9 @@ describe('parseJsonSchemaToOptions', () => { }; let localYargs: yargs.Argv<unknown>; - beforeEach(async () => { - // Create a fresh yargs for each call. The yargs object is stateful and - // calling .parse multiple times on the same instance isn't safe. - localYargs = yargs().exitProcess(false).strict().fail(false).wrap(1_000); + let options: Option[]; + + beforeAll(async () => { const jsonSchema = { 'type': 'object', 'properties': { @@ -118,12 +117,20 @@ describe('parseJsonSchemaToOptions', () => { }, }, }; + const registry = new schema.CoreSchemaRegistry(); - const options = await parseJsonSchemaToOptions( + options = await parseJsonSchemaToOptions( registry, jsonSchema as unknown as JsonObject, false, ); + }); + + beforeEach(async () => { + // Create a fresh yargs for each call. The yargs object is stateful and + // calling .parse multiple times on the same instance isn't safe. + localYargs = yargs().exitProcess(false).strict().fail(false).wrap(1_000); + addSchemaOptionsToCommand(localYargs, options, true); }); From 0a61f20cb40d0064ecc29215ca76833f7042a908 Mon Sep 17 00:00:00 2001 From: Alan Agius <17563226+alan-agius4@users.noreply.github.com> Date: Fri, 27 Feb 2026 14:43:06 +0000 Subject: [PATCH 066/226] test: add test cases for parsing array options specified multiple times Add some more tests for arrays. --- .../utilities/json-schema_spec.ts | 46 +++++++++++++++++-- 1 file changed, 43 insertions(+), 3 deletions(-) diff --git a/packages/angular/cli/src/command-builder/utilities/json-schema_spec.ts b/packages/angular/cli/src/command-builder/utilities/json-schema_spec.ts index b74cbfc9d6ad..11228e4adca0 100644 --- a/packages/angular/cli/src/command-builder/utilities/json-schema_spec.ts +++ b/packages/angular/cli/src/command-builder/utilities/json-schema_spec.ts @@ -145,7 +145,7 @@ describe('parseJsonSchemaToOptions', () => { }); describe('type=array, enum', () => { - it('parses valid option value', async () => { + it('parses valid option value when specified once', async () => { expect(await parse(['--arrayWithChoices', 'always', 'never'])).toEqual( jasmine.objectContaining({ 'arrayWithChoices': ['always', 'never'], @@ -153,6 +153,16 @@ describe('parseJsonSchemaToOptions', () => { ); }); + it('parses valid option value when specified multiple times', async () => { + expect( + await parse(['--arrayWithChoices', 'always', '--arrayWithChoices', 'never']), + ).toEqual( + jasmine.objectContaining({ + 'arrayWithChoices': ['always', 'never'], + }), + ); + }); + it('rejects non-enum values', async () => { await expectAsync(parse(['--arrayWithChoices', 'yes'])).toBeRejectedWithError( /Argument: array-with-choices, Given: "yes", Choices:/, @@ -165,7 +175,7 @@ describe('parseJsonSchemaToOptions', () => { }); describe('type=array, enum in oneOf', () => { - it('parses valid option value', async () => { + it('parses valid option value when specified once', async () => { expect(await parse(['--arrayWithChoicesInOneOf', 'default', 'verbose'])).toEqual( jasmine.objectContaining({ 'arrayWithChoicesInOneOf': ['default', 'verbose'], @@ -173,6 +183,21 @@ describe('parseJsonSchemaToOptions', () => { ); }); + it('parses valid option value when specified multiple times', async () => { + expect( + await parse([ + '--arrayWithChoicesInOneOf', + 'default', + '--arrayWithChoicesInOneOf', + 'verbose', + ]), + ).toEqual( + jasmine.objectContaining({ + 'arrayWithChoicesInOneOf': ['default', 'verbose'], + }), + ); + }); + it('rejects non-enum values', async () => { await expectAsync(parse(['--arrayWithChoicesInOneOf', 'yes'])).toBeRejectedWithError( /Argument: array-with-choices-in-one-of, Given: "yes", Choices:/, @@ -181,13 +206,28 @@ describe('parseJsonSchemaToOptions', () => { }); describe('type=array, anyOf', () => { - it('parses valid option value', async () => { + it('parses valid option value when specified once', async () => { expect(await parse(['--arrayWithComplexAnyOf', 'default', 'something-else'])).toEqual( jasmine.objectContaining({ 'arrayWithComplexAnyOf': ['default', 'something-else'], }), ); }); + + it('parses valid option value when specified multiple times', async () => { + expect( + await parse([ + '--arrayWithComplexAnyOf', + 'default', + '--arrayWithComplexAnyOf', + 'something-else', + ]), + ).toEqual( + jasmine.objectContaining({ + 'arrayWithComplexAnyOf': ['default', 'something-else'], + }), + ); + }); }); describe('type=string, enum', () => { From e0fa7bfe9d9d717c17a00a0aa2fdd5ce9465ddeb Mon Sep 17 00:00:00 2001 From: Alan Agius <17563226+alan-agius4@users.noreply.github.com> Date: Fri, 27 Feb 2026 14:51:34 +0000 Subject: [PATCH 067/226] refactor: remove `tree-kill` dependency by using native `child_process.kill` and correcting `spawn` usage This is no longer required. --- packages/angular_devkit/build_angular/BUILD.bazel | 1 - packages/angular_devkit/build_angular/package.json | 1 - .../build_angular/src/builders/ssr-dev-server/utils.ts | 5 ++--- pnpm-lock.yaml | 3 --- 4 files changed, 2 insertions(+), 8 deletions(-) diff --git a/packages/angular_devkit/build_angular/BUILD.bazel b/packages/angular_devkit/build_angular/BUILD.bazel index b475ebfdf1bc..981e2231e68f 100644 --- a/packages/angular_devkit/build_angular/BUILD.bazel +++ b/packages/angular_devkit/build_angular/BUILD.bazel @@ -154,7 +154,6 @@ ts_project( ":node_modules/source-map-support", ":node_modules/terser", ":node_modules/tinyglobby", - ":node_modules/tree-kill", ":node_modules/webpack", ":node_modules/webpack-dev-middleware", ":node_modules/webpack-dev-server", diff --git a/packages/angular_devkit/build_angular/package.json b/packages/angular_devkit/build_angular/package.json index 00863906a1f5..5872b85511f3 100644 --- a/packages/angular_devkit/build_angular/package.json +++ b/packages/angular_devkit/build_angular/package.json @@ -53,7 +53,6 @@ "source-map-support": "0.5.21", "terser": "5.46.0", "tinyglobby": "0.2.15", - "tree-kill": "1.2.2", "tslib": "2.8.1", "webpack": "5.105.2", "webpack-dev-middleware": "7.4.5", diff --git a/packages/angular_devkit/build_angular/src/builders/ssr-dev-server/utils.ts b/packages/angular_devkit/build_angular/src/builders/ssr-dev-server/utils.ts index db59e2cb6d31..059c0e0a89e9 100644 --- a/packages/angular_devkit/build_angular/src/builders/ssr-dev-server/utils.ts +++ b/packages/angular_devkit/build_angular/src/builders/ssr-dev-server/utils.ts @@ -9,7 +9,6 @@ import { SpawnOptions, spawn } from 'node:child_process'; import { AddressInfo, createConnection, createServer } from 'node:net'; import { Observable, mergeMap, retryWhen, throwError, timer } from 'rxjs'; -import treeKill from 'tree-kill'; export function getAvailablePort(): Promise<number> { return new Promise((resolve, reject) => { @@ -50,8 +49,8 @@ export function spawnAsObservable( }); return () => { - if (!proc.killed && proc.pid) { - treeKill(proc.pid, 'SIGTERM'); + if (!proc.killed) { + proc.kill(); } }; }); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 973c69296503..b74843b5b8b8 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -694,9 +694,6 @@ importers: tinyglobby: specifier: 0.2.15 version: 0.2.15 - tree-kill: - specifier: 1.2.2 - version: 1.2.2 tslib: specifier: 2.8.1 version: 2.8.1 From 6a1471bab9ea6ac4dcd1d12d5450d2002c7b0491 Mon Sep 17 00:00:00 2001 From: Charles Lyding <19598772+clydin@users.noreply.github.com> Date: Thu, 26 Feb 2026 16:52:34 -0500 Subject: [PATCH 068/226] build: update puppeteer to v24.37.5 --- .../projects/hello-world-app/karma.conf.js | 5 +- package.json | 3 +- .../serve-live-reload-proxies_spec.ts | 2 +- .../src/builders/dev-server/specs/hmr_spec.ts | 9 +- .../serve-live-reload-proxies_spec.ts | 11 +- pnpm-lock.yaml | 416 +++++++++++++----- tests/e2e/tests/build/auto-csp.ts | 2 +- tests/e2e/utils/puppeteer.ts | 2 +- tools/defaults.bzl | 13 + 9 files changed, 326 insertions(+), 137 deletions(-) diff --git a/modules/testing/builder/projects/hello-world-app/karma.conf.js b/modules/testing/builder/projects/hello-world-app/karma.conf.js index 7d5f7c8d98f5..d3206bd4cf87 100644 --- a/modules/testing/builder/projects/hello-world-app/karma.conf.js +++ b/modules/testing/builder/projects/hello-world-app/karma.conf.js @@ -10,7 +10,10 @@ // https://karma-runner.github.io/1.0/config/configuration-file.html const path = require('path'); -process.env.CHROME_BIN = require('puppeteer').executablePath(); + +// Resolve from relative paths to absolute paths within the bazel runfiles tree +// so subprocesses spawned in a different working directory can still find them. +process.env.CHROME_BIN = process.env.CHROME_BIN ? path.resolve(path.join(process.cwd(), '..', '..', '..'), process.env.CHROME_BIN) : require('puppeteer').executablePath(); module.exports = function(config) { config.set({ diff --git a/package.json b/package.json index 3851cce64e87..2e33cfa7084e 100644 --- a/package.json +++ b/package.json @@ -118,7 +118,7 @@ "lodash": "^4.17.21", "magic-string": "0.30.21", "prettier": "^3.0.0", - "puppeteer": "18.2.1", + "puppeteer": "24.37.5", "quicktype-core": "23.2.6", "rollup": "4.59.0", "rollup-license-plugin": "~3.1.0", @@ -144,7 +144,6 @@ }, "pnpm": { "onlyBuiltDependencies": [ - "puppeteer", "webdriver-manager" ], "overrides": { diff --git a/packages/angular/build/src/builders/dev-server/tests/behavior/serve-live-reload-proxies_spec.ts b/packages/angular/build/src/builders/dev-server/tests/behavior/serve-live-reload-proxies_spec.ts index 6c41769d5aea..3b7fa033aed6 100644 --- a/packages/angular/build/src/builders/dev-server/tests/behavior/serve-live-reload-proxies_spec.ts +++ b/packages/angular/build/src/builders/dev-server/tests/behavior/serve-live-reload-proxies_spec.ts @@ -153,7 +153,7 @@ describeServeBuilder(executeDevServer, DEV_SERVER_BUILDER_INFO, (harness, setupT // See: https://github.com/angular/angular-cli/pull/17624 // eslint-disable-next-line max-len // executablePath: '/Users/<USERNAME>/git/angular-cli/node_modules/puppeteer/.local-chromium/mac-818858/chrome-mac/Chromium.app/Contents/MacOS/Chromium', - ignoreHTTPSErrors: true, + acceptInsecureCerts: true, args: ['--no-sandbox', '--disable-gpu'], }); }); diff --git a/packages/angular_devkit/build_angular/src/builders/dev-server/specs/hmr_spec.ts b/packages/angular_devkit/build_angular/src/builders/dev-server/specs/hmr_spec.ts index 2ecda166bfbe..9433f71220bf 100644 --- a/packages/angular_devkit/build_angular/src/builders/dev-server/specs/hmr_spec.ts +++ b/packages/angular_devkit/build_angular/src/builders/dev-server/specs/hmr_spec.ts @@ -7,6 +7,7 @@ */ import { Architect, BuilderRun } from '@angular-devkit/architect'; +import path from 'node:path'; // eslint-disable-next-line import/no-extraneous-dependencies import puppeteer, { Browser, Page } from 'puppeteer'; import { debounceTime, switchMap, take } from 'rxjs'; @@ -28,12 +29,10 @@ describe('Dev Server Builder HMR', () => { beforeAll(async () => { browser = await puppeteer.launch({ - // MacOSX users need to set the local binary manually because Chrome has lib files with - // spaces in them which Bazel does not support in runfiles - // See: https://github.com/angular/angular-cli/pull/17624 - // eslint-disable-next-line max-len - // executablePath: '/Users/<USERNAME>/git/angular-cli/node_modules/puppeteer/.local-chromium/mac-800071/chrome-mac/Chromium.app/Contents/MacOS/Chromium', args: ['--no-sandbox', '--disable-gpu'], + executablePath: process.env.CHROME_BIN + ? path.resolve(path.join(process.cwd(), '..', '..', '..'), process.env.CHROME_BIN) + : undefined, }); }); diff --git a/packages/angular_devkit/build_angular/src/builders/dev-server/tests/behavior/serve-live-reload-proxies_spec.ts b/packages/angular_devkit/build_angular/src/builders/dev-server/tests/behavior/serve-live-reload-proxies_spec.ts index 09d50dbb4528..2ebd9e27d6c4 100644 --- a/packages/angular_devkit/build_angular/src/builders/dev-server/tests/behavior/serve-live-reload-proxies_spec.ts +++ b/packages/angular_devkit/build_angular/src/builders/dev-server/tests/behavior/serve-live-reload-proxies_spec.ts @@ -9,6 +9,7 @@ /* eslint-disable import/no-extraneous-dependencies */ import { tags } from '@angular-devkit/core'; import { createServer } from 'node:http'; +import path from 'node:path'; import { createProxyServer } from 'http-proxy'; import { AddressInfo } from 'node:net'; import { setTimeout as setTimeoutPromise } from 'node:timers/promises'; @@ -156,12 +157,10 @@ describeServeBuilder( beforeAll(async () => { browser = await puppeteer.launch({ - // MacOSX users need to set the local binary manually because Chrome has lib files with - // spaces in them which Bazel does not support in runfiles - // See: https://github.com/angular/angular-cli/pull/17624 - // eslint-disable-next-line max-len - // executablePath: '/Users/<USERNAME>/git/angular-cli/node_modules/puppeteer/.local-chromium/mac-818858/chrome-mac/Chromium.app/Contents/MacOS/Chromium', - ignoreHTTPSErrors: true, + executablePath: process.env.CHROME_BIN + ? path.resolve(path.join(process.cwd(), '..', '..', '..'), process.env.CHROME_BIN) + : undefined, + acceptInsecureCerts: true, args: ['--no-sandbox', '--disable-gpu'], }); }); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index b74843b5b8b8..929e00d801f8 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -222,7 +222,7 @@ importers: version: 7.0.0 karma: specifier: ~6.4.0 - version: 6.4.4(bufferutil@4.1.0) + version: 6.4.4(bufferutil@4.1.0)(utf-8-validate@6.0.6) karma-chrome-launcher: specifier: ~3.2.0 version: 3.2.0 @@ -231,10 +231,10 @@ importers: version: 2.2.1 karma-jasmine: specifier: ~5.1.0 - version: 5.1.0(karma@6.4.4(bufferutil@4.1.0)) + version: 5.1.0(karma@6.4.4(bufferutil@4.1.0)(utf-8-validate@6.0.6)) karma-jasmine-html-reporter: specifier: ~2.2.0 - version: 2.2.0(jasmine-core@6.1.0)(karma-jasmine@5.1.0(karma@6.4.4(bufferutil@4.1.0)))(karma@6.4.4(bufferutil@4.1.0)) + version: 2.2.0(jasmine-core@6.1.0)(karma-jasmine@5.1.0(karma@6.4.4(bufferutil@4.1.0)(utf-8-validate@6.0.6)))(karma@6.4.4(bufferutil@4.1.0)(utf-8-validate@6.0.6)) karma-source-map-support: specifier: 1.4.0 version: 1.4.0 @@ -248,8 +248,8 @@ importers: specifier: ^3.0.0 version: 3.8.1 puppeteer: - specifier: 18.2.1 - version: 18.2.1(bufferutil@4.1.0)(encoding@0.1.13) + specifier: 24.37.5 + version: 24.37.5(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6) quicktype-core: specifier: 23.2.6 version: 23.2.6(encoding@0.1.13) @@ -2996,6 +2996,11 @@ packages: '@protobufjs/utf8@1.1.0': resolution: {integrity: sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==} + '@puppeteer/browsers@2.13.0': + resolution: {integrity: sha512-46BZJYJjc/WwmKjsvDFykHtXrtomsCIrwYQPOP7VfMJoZY2bsDF9oROBABR3paDjDcmkUye1Pb1BqdcdiipaWA==} + engines: {node: '>=18'} + hasBin: true + '@rolldown/binding-android-arm64@1.0.0-rc.5': resolution: {integrity: sha512-zCEmUrt1bggwgBgeKLxNj217J1OrChrp3jJt24VK9jAharSTeVaHODNL+LpcQVhRz+FktYWfT9cjo5oZ99ZLpg==} engines: {node: ^20.19.0 || >=22.12.0} @@ -3324,6 +3329,9 @@ packages: resolution: {integrity: sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==} engines: {node: '>= 10'} + '@tootallnate/quickjs-emscripten@0.23.0': + resolution: {integrity: sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA==} + '@tufjs/canonical-json@2.0.0': resolution: {integrity: sha512-yVtV8zsdo8qFHe+/3kw81dSLyF7D576A5cCFCi4X7B39tWT7SekaEFUnvnWJHz+9qO7qJTah1JbrDjWKqFtdWA==} engines: {node: ^16.14.0 || >=18.0.0} @@ -3971,6 +3979,10 @@ packages: resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==} engines: {node: '>=12'} + ast-types@0.13.4: + resolution: {integrity: sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==} + engines: {node: '>=4'} + ast-v8-to-istanbul@0.3.11: resolution: {integrity: sha512-Qya9fkoofMjCBNVdWINMjB5KZvkYfaO9/anwkWnjxibpWUxo5iHl2sOdP7/uAqaRuUYuoo8rDwnbaaKVFxoUvw==} @@ -4062,6 +4074,36 @@ packages: bare-abort-controller: optional: true + bare-fs@4.5.5: + resolution: {integrity: sha512-XvwYM6VZqKoqDll8BmSww5luA5eflDzY0uEFfBJtFKe4PAAtxBjU3YIxzIBzhyaEQBy1VXEQBto4cpN5RZJw+w==} + engines: {bare: '>=1.16.0'} + peerDependencies: + bare-buffer: '*' + peerDependenciesMeta: + bare-buffer: + optional: true + + bare-os@3.7.0: + resolution: {integrity: sha512-64Rcwj8qlnTZU8Ps6JJEdSmxBEUGgI7g8l+lMtsJLl4IsfTcHMTfJ188u2iGV6P6YPRZrtv72B2kjn+hp+Yv3g==} + engines: {bare: '>=1.14.0'} + + bare-path@3.0.0: + resolution: {integrity: sha512-tyfW2cQcB5NN8Saijrhqn0Zh7AnFNsnczRcuWODH0eYAXBsJ5gVxAUuNr7tsHSC6IZ77cA0SitzT+s47kot8Mw==} + + bare-stream@2.8.0: + resolution: {integrity: sha512-reUN0M2sHRqCdG4lUK3Fw8w98eeUIZHL5c3H7Mbhk2yVBL+oofgaIp0ieLfD5QXwPCypBpmEEKU2WZKzbAk8GA==} + peerDependencies: + bare-buffer: '*' + bare-events: '*' + peerDependenciesMeta: + bare-buffer: + optional: true + bare-events: + optional: true + + bare-url@2.3.2: + resolution: {integrity: sha512-ZMq4gd9ngV5aTMa5p9+UfY0b3skwhHELaDkhEHetMdX0LRkW9kzaym4oo/Eh+Ghm0CCDuMTsRIGM/ytUc1ZYmw==} + base64-js@1.5.1: resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} @@ -4074,6 +4116,10 @@ packages: engines: {node: '>=6.0.0'} hasBin: true + basic-ftp@5.2.0: + resolution: {integrity: sha512-VoMINM2rqJwJgfdHq6RiUudKt2BV+FY5ZFezP/ypmwayk68+NzzAQy4XXLlqsGD4MCzq3DrmNFD/uUmBJuGoXw==} + engines: {node: '>=10.0.0'} + batch@0.6.1: resolution: {integrity: sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==} @@ -4106,9 +4152,6 @@ packages: resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} engines: {node: '>=8'} - bl@4.1.0: - resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} - body-parser@1.20.4: resolution: {integrity: sha512-ZTgYYLMOXY9qKU/57FAo8F+HA2dGX7bqGc71txDRC1rS4frdFI5R7NhluHxH6M0YItAP0sHB4uqAOcYKxO6uGA==} engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} @@ -4172,9 +4215,6 @@ packages: buffer-from@1.1.2: resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} - buffer@5.7.1: - resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} - buffer@6.0.3: resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==} @@ -4258,9 +4298,6 @@ packages: resolution: {integrity: sha512-TQMmc3w+5AxjpL8iIiwebF73dRDF4fBIieAqGn9RGCWaEVwQ6Fb2cGe31Yns0RRIzii5goJ1Y7xbMwo1TxMplw==} engines: {node: '>= 20.19.0'} - chownr@1.1.4: - resolution: {integrity: sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==} - chownr@3.0.0: resolution: {integrity: sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==} engines: {node: '>=18'} @@ -4269,6 +4306,11 @@ packages: resolution: {integrity: sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==} engines: {node: '>=6.0'} + chromium-bidi@14.0.0: + resolution: {integrity: sha512-9gYlLtS6tStdRWzrtXaTMnqcM4dudNegMXJxkR0I/CXObHalYeYcAMPrL19eroNZHtJ8DQmu1E+ZNOYu/IXMXw==} + peerDependencies: + devtools-protocol: '*' + cli-cursor@5.0.0: resolution: {integrity: sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==} engines: {node: '>=18'} @@ -4444,9 +4486,6 @@ packages: typescript: optional: true - cross-fetch@3.1.5: - resolution: {integrity: sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==} - cross-fetch@4.1.0: resolution: {integrity: sha512-uKm5PU+MHTootlWEY+mZ4vvXoCn4fLQxT9dSc1sXVMSFkINTJVN8cAQROpwcKm8bJ/c7rgZVIBWzH5T78sNZZw==} @@ -4497,6 +4536,10 @@ packages: resolution: {integrity: sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==} engines: {node: '>= 12'} + data-uri-to-buffer@6.0.2: + resolution: {integrity: sha512-7hvf7/GW8e86rW0ptuwS3OcBGDjIi6SZva7hCyWC0yYry2cOPmLIjXAUHI6DK2HsnwJd9ifmt57i8eV2n4YNpw==} + engines: {node: '>= 14'} + data-urls@7.0.0: resolution: {integrity: sha512-23XHcCF+coGYevirZceTVD7NdJOqVn+49IHyxgszm+JIiHLoB2TkmPtsYkNWT1pvRSGkc35L6NHs0yHkN2SumA==} engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0} @@ -4613,6 +4656,10 @@ packages: defu@6.1.4: resolution: {integrity: sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==} + degenerator@5.0.1: + resolution: {integrity: sha512-TllpMR/t0M5sqCXfj85i4XaAzxmS5tVA16dqvdkMwGmzI+dXLXnw3J+3Vdv7VKw+ThlTMboK6i9rnZ6Nntj5CQ==} + engines: {node: '>= 14'} + delayed-stream@1.0.0: resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} engines: {node: '>=0.4.0'} @@ -4645,8 +4692,8 @@ packages: engines: {node: '>= 0.8.0'} hasBin: true - devtools-protocol@0.0.1045489: - resolution: {integrity: sha512-D+PTmWulkuQW4D1NTiCRCFxF7pQPn0hgp4YyX4wAQ6xYXKOadSWPR3ENGDQ47MW/Ewc9v2rpC/UEEGahgBYpSQ==} + devtools-protocol@0.0.1566079: + resolution: {integrity: sha512-MJfAEA1UfVhSs7fbSQOG4czavUp1ajfg6prlAN0+cmfa2zNjaIbvq8VneP7do1WAQQIvgNJWSMeP6UyI90gIlQ==} di@0.0.1: resolution: {integrity: sha512-uJaamHkagcZtHPqCIHZxnFrXlunQXgBOsZSUOWwFw31QJCAbyTBoHMW75YOTur5ZNx8pIeAKgf6GWIgaqqiLhA==} @@ -4849,6 +4896,11 @@ packages: resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} engines: {node: '>=10'} + escodegen@2.1.0: + resolution: {integrity: sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==} + engines: {node: '>=6.0'} + hasBin: true + eslint-config-prettier@10.1.8: resolution: {integrity: sha512-82GZUjRS0p/jganf6q1rEO25VSoHH0hKPCTrgillPjdI/3bgBhAE1QzHrHTizjpRvy6pGAvKjDJtk2pF9NDq8w==} hasBin: true @@ -4927,6 +4979,11 @@ packages: resolution: {integrity: sha512-AVHPqQoZYc+RUM4/3Ly5udlZY/U4LS8pIG05jEjWM2lQMU/oaZ7qshzAl2YP1tfNmXfftH3ohurfwNAug+MnsQ==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} + esprima@4.0.1: + resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} + engines: {node: '>=4'} + hasBin: true + esquery@1.7.0: resolution: {integrity: sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==} engines: {node: '>=0.10'} @@ -5179,9 +5236,6 @@ packages: resolution: {integrity: sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==} engines: {node: '>= 0.8'} - fs-constants@1.0.0: - resolution: {integrity: sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==} - fs-extra@3.0.1: resolution: {integrity: sha512-V3Z3WZWVUYd8hoCL5xfXJCaHWYzmtwW5XWYSlLgERi8PWd8bx1kUHUk8L1BT57e49oKnDDD180mjfrHc1yA9rg==} @@ -5262,6 +5316,10 @@ packages: get-tsconfig@4.13.6: resolution: {integrity: sha512-shZT/QMiSHc/YBLxxOkMtgSid5HFoauqCE3/exfsEcwg1WkeqjG+V40yBbBrsD+jW2HDXcs28xOfcbm2jI8Ddw==} + get-uri@6.0.5: + resolution: {integrity: sha512-b1O07XYq8eRuVzBNgJLstU6FYc1tS6wnMtF1I1D9lE8LxZSOGZ7LhxN54yPP6mGw5f2CkXY2BQUL9Fx41qvcIg==} + engines: {node: '>= 14'} + getpass@0.1.7: resolution: {integrity: sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==} @@ -6320,8 +6378,8 @@ packages: mitt@1.2.0: resolution: {integrity: sha512-r6lj77KlwqLhIUku9UWYes7KJtsczvolZkzp8hbaDPPaE24OmWl5s539Mytlj22siEQKosZ26qCBgda2PKwoJw==} - mkdirp-classic@0.5.3: - resolution: {integrity: sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==} + mitt@3.0.1: + resolution: {integrity: sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==} mkdirp@0.5.6: resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==} @@ -6392,6 +6450,10 @@ packages: neo-async@2.6.2: resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} + netmask@2.0.2: + resolution: {integrity: sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==} + engines: {node: '>= 0.4.0'} + ng-packagr@22.0.0-next.0: resolution: {integrity: sha512-AHq15yteBa2u/8OQYLlbD+gaHDfKSz9wfIsCKi/3UOX1BwJXQSXDSnSSAZh0etAw21XxxXTkbEy+2uNj7Ss+Jw==} engines: {node: ^22.22.0 || >=24.13.1} @@ -6632,6 +6694,14 @@ packages: resolution: {integrity: sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==} engines: {node: '>=8'} + pac-proxy-agent@7.2.0: + resolution: {integrity: sha512-TEB8ESquiLMc0lV8vcd5Ql/JAKAoyzHFXaStwjkzpOpC5Yv+pIzLfHvjTSdf3vpa2bMiUQrg9i6276yn8666aA==} + engines: {node: '>= 14'} + + pac-resolver@7.0.1: + resolution: {integrity: sha512-5NPgf87AT2STgwa2ntRMr45jTKrYBGkVU36yT0ig/n/GMAa3oPqhZfIQ2kMEimReg0+t9kZViDVZ83qfVUlckg==} + engines: {node: '>= 14'} + package-json-from-dist@1.0.1: resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} @@ -6886,6 +6956,10 @@ packages: resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} engines: {node: '>= 0.10'} + proxy-agent@6.5.0: + resolution: {integrity: sha512-TmatMXdr2KlRiA2CyDu8GqR8EjahTG3aY3nXjdzFyoZbmB8hrBsTyMezhULIXKnC0jpfjlmiZ3+EaCzoInSu/A==} + engines: {node: '>= 14'} + proxy-from-env@1.1.0: resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} @@ -6908,14 +6982,14 @@ packages: resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} engines: {node: '>=6'} - puppeteer-core@18.2.1: - resolution: {integrity: sha512-MRtTAZfQTluz3U2oU/X2VqVWPcR1+94nbA2V6ZrSZRVEwLqZ8eclZ551qGFQD/vD2PYqHJwWOW/fpC721uznVw==} - engines: {node: '>=14.1.0'} + puppeteer-core@24.37.5: + resolution: {integrity: sha512-ybL7iE78YPN4T6J+sPLO7r0lSByp/0NN6PvfBEql219cOnttoTFzCWKiBOjstXSqi/OKpwae623DWAsL7cn2MQ==} + engines: {node: '>=18'} - puppeteer@18.2.1: - resolution: {integrity: sha512-7+UhmYa7wxPh2oMRwA++k8UGVDxh3YdWFB52r9C3tM81T6BU7cuusUSxImz0GEYSOYUKk/YzIhkQ6+vc0gHbxQ==} - engines: {node: '>=14.1.0'} - deprecated: < 24.15.0 is no longer supported + puppeteer@24.37.5: + resolution: {integrity: sha512-3PAOIQLceyEmn1Fi76GkGO2EVxztv5OtdlB1m8hMUZL3f8KDHnlvXbvCXv+Ls7KzF1R0KdKBqLuT/Hhrok12hQ==} + engines: {node: '>=18'} + hasBin: true pvtsutils@1.3.6: resolution: {integrity: sha512-PLgQXQ6H2FWCaeRak8vvk1GW462lMxB5s3Jm673N82zI4vqtVUPuZdffdZbPDFRoU8kAhItWFtPCWiPpp4/EDg==} @@ -7563,12 +7637,8 @@ packages: resolution: {integrity: sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==} engines: {node: '>=6'} - tar-fs@2.1.1: - resolution: {integrity: sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==} - - tar-stream@2.2.0: - resolution: {integrity: sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==} - engines: {node: '>=6'} + tar-fs@3.1.1: + resolution: {integrity: sha512-LZA0oaPOc2fVo82Txf3gw+AkEd38szODlptMYejQUhndHMLQ9M059uXR+AfS7DNo0NpINvSqDsvyaCrBVkptWg==} tar-stream@3.1.7: resolution: {integrity: sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==} @@ -7581,6 +7651,9 @@ packages: resolution: {integrity: sha512-3ZnLvgWF29jikg1sAQ1g0o+lr5JX6sVgYvfUJazn7ZjJroDBUTWp44/+cFVX0bULjv4vci+rBD+oGVAkWqhUbw==} engines: {node: '>=18'} + teex@1.0.1: + resolution: {integrity: sha512-eYE6iEI62Ni1H8oIa7KlDU6uQBtqr4Eajni3wX7rpfXD8ysFx8z0+dri+KWEPWpBsxXfxu58x/0jvTVT1ekOSg==} + terser-webpack-plugin@5.3.16: resolution: {integrity: sha512-h9oBFCWrq78NyWWVcSwZarJkZ01c2AyGrzs1crmHZO3QUg9D61Wu4NPjBy69n7JqylFF5y+CsUZYmYEIZ3mR+Q==} engines: {node: '>= 10.13.0'} @@ -7774,6 +7847,9 @@ packages: typed-graphqlify@3.1.6: resolution: {integrity: sha512-Snlg1ZrokbkQuemOb4xjWWCJrNcOMeb2Ii0/BwMfwLCcJVNjygyqhrFkrYNvi4gDrwWFrGE0TvxxM+Slym2JMg==} + typed-query-selector@2.12.0: + resolution: {integrity: sha512-SbklCd1F0EiZOyPiW192rrHZzZ5sBijB6xM+cpmrwDqObvdtunOHHIk9fCGsoK5JVIYXoyEp4iEdE3upFH3PAg==} + typescript@5.9.3: resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==} engines: {node: '>=14.17'} @@ -7796,9 +7872,6 @@ packages: resolution: {integrity: sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==} engines: {node: '>= 0.4'} - unbzip2-stream@1.4.3: - resolution: {integrity: sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==} - undici-types@7.22.0: resolution: {integrity: sha512-RKZvifiL60xdsIuC80UY0dq8Z7DbJUV8/l2hOVbyZAxBzEeQU4Z58+4ZzJ6WN2Lidi9KzT5EbiGX+PI/UGYuRw==} @@ -8019,6 +8092,9 @@ packages: web-vitals@4.2.4: resolution: {integrity: sha512-r4DIlprAGwJ7YM11VZp4R884m0Vmgr6EAKe3P+kO0PPj3Unqyvv59rczf6UiGcb9Z8QxZVcqKNwv/g0WNdWwsw==} + webdriver-bidi-protocol@0.4.1: + resolution: {integrity: sha512-ARrjNjtWRRs2w4Tk7nqrf2gBI0QXWuOmMCx2hU+1jUt6d00MjMxURrhxhGbrsoiZKJrhTSTzbIrc554iKI10qw==} + webidl-conversions@3.0.1: resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} @@ -8183,18 +8259,6 @@ packages: utf-8-validate: optional: true - ws@8.9.0: - resolution: {integrity: sha512-Ja7nszREasGaYUYCI2k4lCKIRTt+y7XuqVoHR44YpI49TtryyqbqvDMn5eqfW7e6HzTukDRIsXqzVHScqRcafg==} - engines: {node: '>=10.0.0'} - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: ^5.0.2 - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true - wsl-utils@0.1.0: resolution: {integrity: sha512-h3Fbisa2nKGPxCpm89Hk33lBLsnaGBvctQopaBSOW/uIs6FTe1ATyAnKFJrzVs9vpGdsTe73WF3V4lIsk4Gacw==} engines: {node: '>=18'} @@ -8281,6 +8345,9 @@ packages: peerDependencies: zod: ^3.25 || ^4 + zod@3.25.76: + resolution: {integrity: sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==} + zod@4.3.6: resolution: {integrity: sha512-rftlrkhHZOcjDwkGlnUtZZkvaPHCsDATp4pGpuOOMDaTdDDXF91wuVDJoWoPsKX/3YPQ5fHuF3STjcYyKr+Qhg==} @@ -10763,6 +10830,21 @@ snapshots: '@protobufjs/utf8@1.1.0': {} + '@puppeteer/browsers@2.13.0': + dependencies: + debug: 4.4.3(supports-color@10.2.2) + extract-zip: 2.0.1 + progress: 2.0.3 + proxy-agent: 6.5.0 + semver: 7.7.4 + tar-fs: 3.1.1 + yargs: 17.7.2 + transitivePeerDependencies: + - bare-abort-controller + - bare-buffer + - react-native-b4a + - supports-color + '@rolldown/binding-android-arm64@1.0.0-rc.5': optional: true @@ -10987,6 +11069,8 @@ snapshots: '@tootallnate/once@2.0.0': {} + '@tootallnate/quickjs-emscripten@0.23.0': {} + '@tufjs/canonical-json@2.0.0': {} '@tufjs/models@4.1.0': @@ -11874,6 +11958,10 @@ snapshots: assertion-error@2.0.1: {} + ast-types@0.13.4: + dependencies: + tslib: 2.8.1 + ast-v8-to-istanbul@0.3.11: dependencies: '@jridgewell/trace-mapping': 0.3.31 @@ -11957,12 +12045,50 @@ snapshots: bare-events@2.8.2: {} + bare-fs@4.5.5: + dependencies: + bare-events: 2.8.2 + bare-path: 3.0.0 + bare-stream: 2.8.0(bare-events@2.8.2) + bare-url: 2.3.2 + fast-fifo: 1.3.2 + transitivePeerDependencies: + - bare-abort-controller + - react-native-b4a + optional: true + + bare-os@3.7.0: + optional: true + + bare-path@3.0.0: + dependencies: + bare-os: 3.7.0 + optional: true + + bare-stream@2.8.0(bare-events@2.8.2): + dependencies: + streamx: 2.23.0 + teex: 1.0.1 + optionalDependencies: + bare-events: 2.8.2 + transitivePeerDependencies: + - bare-abort-controller + - react-native-b4a + optional: true + + bare-url@2.3.2: + dependencies: + bare-path: 3.0.0 + optional: true + base64-js@1.5.1: {} base64id@2.0.0: {} baseline-browser-mapping@2.10.0: {} + basic-ftp@5.2.0: {} + batch@0.6.1: {} bcrypt-pbkdf@1.0.2: @@ -11997,12 +12123,6 @@ snapshots: binary-extensions@2.3.0: {} - bl@4.1.0: - dependencies: - buffer: 5.7.1 - inherits: 2.0.4 - readable-stream: 3.6.2 - body-parser@1.20.4: dependencies: bytes: 3.1.2 @@ -12136,11 +12256,6 @@ snapshots: buffer-from@1.1.2: {} - buffer@5.7.1: - dependencies: - base64-js: 1.5.1 - ieee754: 1.2.1 - buffer@6.0.3: dependencies: base64-js: 1.5.1 @@ -12246,12 +12361,16 @@ snapshots: dependencies: readdirp: 5.0.0 - chownr@1.1.4: {} - chownr@3.0.0: {} chrome-trace-event@1.0.4: {} + chromium-bidi@14.0.0(devtools-protocol@0.0.1566079): + dependencies: + devtools-protocol: 0.0.1566079 + mitt: 3.0.1 + zod: 3.25.76 + cli-cursor@5.0.0: dependencies: restore-cursor: 5.1.0 @@ -12426,12 +12545,6 @@ snapshots: optionalDependencies: typescript: 5.9.3 - cross-fetch@3.1.5(encoding@0.1.13): - dependencies: - node-fetch: 2.6.7(encoding@0.1.13) - transitivePeerDependencies: - - encoding - cross-fetch@4.1.0(encoding@0.1.13): dependencies: node-fetch: 2.7.0(encoding@0.1.13) @@ -12489,6 +12602,8 @@ snapshots: data-uri-to-buffer@4.0.1: {} + data-uri-to-buffer@6.0.2: {} + data-urls@7.0.0: dependencies: whatwg-mimetype: 5.0.0 @@ -12581,6 +12696,12 @@ snapshots: defu@6.1.4: {} + degenerator@5.0.1: + dependencies: + ast-types: 0.13.4 + escodegen: 2.1.0 + esprima: 4.0.1 + delayed-stream@1.0.0: {} depd@1.1.2: {} @@ -12598,7 +12719,7 @@ snapshots: dev-ip@1.0.1: {} - devtools-protocol@0.0.1045489: {} + devtools-protocol@0.0.1566079: {} di@0.0.1: {} @@ -12890,6 +13011,14 @@ snapshots: escape-string-regexp@4.0.0: {} + escodegen@2.1.0: + dependencies: + esprima: 4.0.1 + estraverse: 5.3.0 + esutils: 2.0.3 + optionalDependencies: + source-map: 0.6.1 + eslint-config-prettier@10.1.8(eslint@10.0.2(jiti@2.6.1)): dependencies: eslint: 10.0.2(jiti@2.6.1) @@ -13008,6 +13137,8 @@ snapshots: acorn-jsx: 5.3.2(acorn@8.16.0) eslint-visitor-keys: 5.0.1 + esprima@4.0.1: {} + esquery@1.7.0: dependencies: estraverse: 5.3.0 @@ -13354,8 +13485,6 @@ snapshots: fresh@2.0.0: {} - fs-constants@1.0.0: {} - fs-extra@3.0.1: dependencies: graceful-fs: 4.2.11 @@ -13451,6 +13580,14 @@ snapshots: dependencies: resolve-pkg-maps: 1.0.0 + get-uri@6.0.5: + dependencies: + basic-ftp: 5.2.0 + data-uri-to-buffer: 6.0.2 + debug: 4.4.3(supports-color@10.2.2) + transitivePeerDependencies: + - supports-color + getpass@0.1.7: dependencies: assert-plus: 1.0.0 @@ -14223,22 +14360,22 @@ snapshots: transitivePeerDependencies: - supports-color - karma-jasmine-html-reporter@2.2.0(jasmine-core@6.1.0)(karma-jasmine@5.1.0(karma@6.4.4(bufferutil@4.1.0)))(karma@6.4.4(bufferutil@4.1.0)): + karma-jasmine-html-reporter@2.2.0(jasmine-core@6.1.0)(karma-jasmine@5.1.0(karma@6.4.4(bufferutil@4.1.0)(utf-8-validate@6.0.6)))(karma@6.4.4(bufferutil@4.1.0)(utf-8-validate@6.0.6)): dependencies: jasmine-core: 6.1.0 - karma: 6.4.4(bufferutil@4.1.0) - karma-jasmine: 5.1.0(karma@6.4.4(bufferutil@4.1.0)) + karma: 6.4.4(bufferutil@4.1.0)(utf-8-validate@6.0.6) + karma-jasmine: 5.1.0(karma@6.4.4(bufferutil@4.1.0)(utf-8-validate@6.0.6)) - karma-jasmine@5.1.0(karma@6.4.4(bufferutil@4.1.0)): + karma-jasmine@5.1.0(karma@6.4.4(bufferutil@4.1.0)(utf-8-validate@6.0.6)): dependencies: jasmine-core: 4.6.1 - karma: 6.4.4(bufferutil@4.1.0) + karma: 6.4.4(bufferutil@4.1.0)(utf-8-validate@6.0.6) karma-source-map-support@1.4.0: dependencies: source-map-support: 0.5.21 - karma@6.4.4(bufferutil@4.1.0): + karma@6.4.4(bufferutil@4.1.0)(utf-8-validate@6.0.6): dependencies: '@colors/colors': 1.5.0 body-parser: 1.20.4 @@ -14604,7 +14741,7 @@ snapshots: mitt@1.2.0: {} - mkdirp-classic@0.5.3: {} + mitt@3.0.1: {} mkdirp@0.5.6: dependencies: @@ -14668,6 +14805,8 @@ snapshots: neo-async@2.6.2: {} + netmask@2.0.2: {} + ng-packagr@22.0.0-next.0(@angular/compiler-cli@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(typescript@5.9.3))(tslib@2.8.1)(typescript@5.9.3): dependencies: '@ampproject/remapping': 2.3.0 @@ -14955,6 +15094,24 @@ snapshots: dependencies: p-finally: 1.0.0 + pac-proxy-agent@7.2.0: + dependencies: + '@tootallnate/quickjs-emscripten': 0.23.0 + agent-base: 7.1.4 + debug: 4.4.3(supports-color@10.2.2) + get-uri: 6.0.5 + http-proxy-agent: 7.0.2 + https-proxy-agent: 7.0.6(supports-color@10.2.2) + pac-resolver: 7.0.1 + socks-proxy-agent: 8.0.5 + transitivePeerDependencies: + - supports-color + + pac-resolver@7.0.1: + dependencies: + degenerator: 5.0.1 + netmask: 2.0.2 + package-json-from-dist@1.0.1: {} pacote@21.4.0: @@ -15212,6 +15369,19 @@ snapshots: forwarded: 0.2.0 ipaddr.js: 1.9.1 + proxy-agent@6.5.0: + dependencies: + agent-base: 7.1.4 + debug: 4.4.3(supports-color@10.2.2) + http-proxy-agent: 7.0.2 + https-proxy-agent: 7.0.6(supports-color@10.2.2) + lru-cache: 7.18.3 + pac-proxy-agent: 7.2.0 + proxy-from-env: 1.1.0 + socks-proxy-agent: 8.0.5 + transitivePeerDependencies: + - supports-color + proxy-from-env@1.1.0: {} prr@1.0.1: @@ -15237,34 +15407,38 @@ snapshots: punycode@2.3.1: {} - puppeteer-core@18.2.1(bufferutil@4.1.0)(encoding@0.1.13): + puppeteer-core@24.37.5(bufferutil@4.1.0)(utf-8-validate@6.0.6): dependencies: - cross-fetch: 3.1.5(encoding@0.1.13) - debug: 4.3.4 - devtools-protocol: 0.0.1045489 - extract-zip: 2.0.1 - https-proxy-agent: 5.0.1(supports-color@10.2.2) - proxy-from-env: 1.1.0 - rimraf: 3.0.2 - tar-fs: 2.1.1 - unbzip2-stream: 1.4.3 - ws: 8.9.0(bufferutil@4.1.0) + '@puppeteer/browsers': 2.13.0 + chromium-bidi: 14.0.0(devtools-protocol@0.0.1566079) + debug: 4.4.3(supports-color@10.2.2) + devtools-protocol: 0.0.1566079 + typed-query-selector: 2.12.0 + webdriver-bidi-protocol: 0.4.1 + ws: 8.19.0(bufferutil@4.1.0)(utf-8-validate@6.0.6) transitivePeerDependencies: + - bare-abort-controller + - bare-buffer - bufferutil - - encoding + - react-native-b4a - supports-color - utf-8-validate - puppeteer@18.2.1(bufferutil@4.1.0)(encoding@0.1.13): + puppeteer@24.37.5(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6): dependencies: - https-proxy-agent: 5.0.1(supports-color@10.2.2) - progress: 2.0.3 - proxy-from-env: 1.1.0 - puppeteer-core: 18.2.1(bufferutil@4.1.0)(encoding@0.1.13) + '@puppeteer/browsers': 2.13.0 + chromium-bidi: 14.0.0(devtools-protocol@0.0.1566079) + cosmiconfig: 9.0.0(typescript@5.9.3) + devtools-protocol: 0.0.1566079 + puppeteer-core: 24.37.5(bufferutil@4.1.0)(utf-8-validate@6.0.6) + typed-query-selector: 2.12.0 transitivePeerDependencies: + - bare-abort-controller + - bare-buffer - bufferutil - - encoding + - react-native-b4a - supports-color + - typescript - utf-8-validate pvtsutils@1.3.6: @@ -16100,20 +16274,17 @@ snapshots: tapable@2.3.0: {} - tar-fs@2.1.1: + tar-fs@3.1.1: dependencies: - chownr: 1.1.4 - mkdirp-classic: 0.5.3 pump: 3.0.3 - tar-stream: 2.2.0 - - tar-stream@2.2.0: - dependencies: - bl: 4.1.0 - end-of-stream: 1.4.5 - fs-constants: 1.0.0 - inherits: 2.0.4 - readable-stream: 3.6.2 + tar-stream: 3.1.7 + optionalDependencies: + bare-fs: 4.5.5 + bare-path: 3.0.0 + transitivePeerDependencies: + - bare-abort-controller + - bare-buffer + - react-native-b4a tar-stream@3.1.7: dependencies: @@ -16141,6 +16312,14 @@ snapshots: transitivePeerDependencies: - supports-color + teex@1.0.1: + dependencies: + streamx: 2.23.0 + transitivePeerDependencies: + - bare-abort-controller + - react-native-b4a + optional: true + terser-webpack-plugin@5.3.16(esbuild@0.27.3)(webpack@5.105.2(esbuild@0.27.3)): dependencies: '@jridgewell/trace-mapping': 0.3.31 @@ -16337,6 +16516,8 @@ snapshots: typed-graphqlify@3.1.6: {} + typed-query-selector@2.12.0: {} + typescript@5.9.3: {} ua-parser-js@0.7.41: {} @@ -16353,11 +16534,6 @@ snapshots: has-symbols: 1.1.0 which-boxed-primitive: 1.1.1 - unbzip2-stream@1.4.3: - dependencies: - buffer: 5.7.1 - through: 2.3.8 - undici-types@7.22.0: {} undici@6.23.0: {} @@ -16592,6 +16768,8 @@ snapshots: web-vitals@4.2.4: {} + webdriver-bidi-protocol@0.4.1: {} + webidl-conversions@3.0.1: {} webidl-conversions@8.0.1: {} @@ -16816,10 +16994,6 @@ snapshots: bufferutil: 4.1.0 utf-8-validate: 6.0.6 - ws@8.9.0(bufferutil@4.1.0): - optionalDependencies: - bufferutil: 4.1.0 - wsl-utils@0.1.0: dependencies: is-wsl: 3.1.1 @@ -16897,6 +17071,8 @@ snapshots: dependencies: zod: 4.3.6 + zod@3.25.76: {} + zod@4.3.6: {} zone.js@0.16.1: {} diff --git a/tests/e2e/tests/build/auto-csp.ts b/tests/e2e/tests/build/auto-csp.ts index f9e30efe2de9..10dfa877864f 100644 --- a/tests/e2e/tests/build/auto-csp.ts +++ b/tests/e2e/tests/build/auto-csp.ts @@ -97,7 +97,7 @@ export default async function () { checkFn: async (page) => { const warnMessages: string[] = []; page.on('console', (msg) => { - if (msg.type() === 'warning') { + if (msg.type() === 'warn') { warnMessages.push(msg.text()); } }); diff --git a/tests/e2e/utils/puppeteer.ts b/tests/e2e/utils/puppeteer.ts index 647773964ec5..da0ef79cca2e 100644 --- a/tests/e2e/utils/puppeteer.ts +++ b/tests/e2e/utils/puppeteer.ts @@ -53,7 +53,7 @@ export async function executeBrowserTest(options: BrowserTestOptions = {}) { } }); page.on('pageerror', (err) => { - errors.push(err.toString()); + errors.push(`${err}`); }); await page.goto(url); diff --git a/tools/defaults.bzl b/tools/defaults.bzl index d301591a32ba..e9804c3e6160 100644 --- a/tools/defaults.bzl +++ b/tools/defaults.bzl @@ -65,9 +65,22 @@ def jasmine_test(data = [], args = [], **kwargs): # we change the `chdir` below to the package directory. relative_to_root = "/".join([".."] * len(native.package_name().split("/"))) + # Chromium browser toolchain + env = kwargs.pop("env", {}) + env.update({ + "CHROME_BIN": "$(CHROME-HEADLESS-SHELL)", + "CHROME_PATH": "$(CHROME-HEADLESS-SHELL)", + "CHROMEDRIVER_BIN": "$(CHROMEDRIVER)", + }) + toolchains = kwargs.pop("toolchains", []) + toolchains = toolchains + ["@rules_browsers//browsers/chromium:toolchain_alias"] + data = data + ["@rules_browsers//browsers/chromium"] + _jasmine_test( node_modules = "//:node_modules", chdir = native.package_name(), + env = env, + toolchains = toolchains, args = [ "--require=%s/node_modules/source-map-support/register.js" % relative_to_root, # Escape so that the `js_binary` launcher triggers Bash expansion. From 13902292e7212119b4507d14ba281565b3601cbf Mon Sep 17 00:00:00 2001 From: Alan Agius <17563226+alan-agius4@users.noreply.github.com> Date: Fri, 27 Feb 2026 09:59:56 +0000 Subject: [PATCH 069/226] fix(@angular/ssr): improve header validation logic Updates the `validateRequest` function to correctly handle the `allowedHost=true` option. --- goldens/public-api/angular/ssr/index.api.md | 1 + .../tools/vite/middlewares/ssr-middleware.ts | 5 ++ packages/angular/ssr/src/app-engine.ts | 35 +++++++++--- packages/angular/ssr/src/utils/validation.ts | 12 +++- packages/angular/ssr/test/app-engine_spec.ts | 57 +++++++++++++++++++ .../angular/ssr/test/utils/validation_spec.ts | 40 ++++++++++--- 6 files changed, 130 insertions(+), 20 deletions(-) diff --git a/goldens/public-api/angular/ssr/index.api.md b/goldens/public-api/angular/ssr/index.api.md index cbdacabfd7f6..e44a7099b521 100644 --- a/goldens/public-api/angular/ssr/index.api.md +++ b/goldens/public-api/angular/ssr/index.api.md @@ -14,6 +14,7 @@ export class AngularAppEngine { constructor(options?: AngularAppEngineOptions); handle(request: Request, requestContext?: unknown): Promise<Response | null>; static ɵallowStaticRouteRender: boolean; + static ɵdisableAllowedHostsCheck: boolean; static ɵhooks: Hooks; } diff --git a/packages/angular/build/src/tools/vite/middlewares/ssr-middleware.ts b/packages/angular/build/src/tools/vite/middlewares/ssr-middleware.ts index 4b0a8d8390f1..a26fa8e5e257 100644 --- a/packages/angular/build/src/tools/vite/middlewares/ssr-middleware.ts +++ b/packages/angular/build/src/tools/vite/middlewares/ssr-middleware.ts @@ -90,6 +90,10 @@ export async function createAngularSsrExternalMiddleware( '@angular/ssr/node' as string )) as typeof import('@angular/ssr/node', { with: { 'resolution-mode': 'import' } }); + // Disable host check if allowed hosts is true meaning allow all hosts. + const { allowedHosts } = server.config.server; + const disableAllowedHostsCheck = allowedHosts === true; + return function angularSsrExternalMiddleware( req: Connect.IncomingMessage, res: ServerResponse, @@ -123,6 +127,7 @@ export async function createAngularSsrExternalMiddleware( } if (cachedAngularAppEngine !== AngularAppEngine) { + AngularAppEngine.ɵdisableAllowedHostsCheck = disableAllowedHostsCheck; AngularAppEngine.ɵallowStaticRouteRender = true; AngularAppEngine.ɵhooks.on('html:transform:pre', async ({ html, url }) => { const processedHtml = await server.transformIndexHtml(url.pathname, html); diff --git a/packages/angular/ssr/src/app-engine.ts b/packages/angular/ssr/src/app-engine.ts index 3b9d468d70b9..de4eb1efa14f 100644 --- a/packages/angular/ssr/src/app-engine.ts +++ b/packages/angular/ssr/src/app-engine.ts @@ -42,6 +42,15 @@ export class AngularAppEngine { */ static ɵallowStaticRouteRender = false; + /** + * A flag to enable or disable the allowed hosts check. + * + * Typically used during development to avoid the allowed hosts check. + * + * @private + */ + static ɵdisableAllowedHostsCheck = false; + /** * Hooks for extending or modifying the behavior of the server application. * These hooks are used by the Angular CLI when running the development server and @@ -106,25 +115,33 @@ export class AngularAppEngine { */ async handle(request: Request, requestContext?: unknown): Promise<Response | null> { const allowedHost = this.allowedHosts; + const disableAllowedHostsCheck = AngularAppEngine.ɵdisableAllowedHostsCheck; try { - validateRequest(request, allowedHost); + validateRequest(request, allowedHost, disableAllowedHostsCheck); } catch (error) { return this.handleValidationError(request.url, error as Error); } // Clone request with patched headers to prevent unallowed host header access. - const { request: securedRequest, onError: onHeaderValidationError } = - cloneRequestAndPatchHeaders(request, allowedHost); + const { request: securedRequest, onError: onHeaderValidationError } = disableAllowedHostsCheck + ? { request, onError: null } + : cloneRequestAndPatchHeaders(request, allowedHost); const serverApp = await this.getAngularServerAppForRequest(securedRequest); if (serverApp) { - return Promise.race([ - onHeaderValidationError.then((error) => - this.handleValidationError(securedRequest.url, error), - ), - serverApp.handle(securedRequest, requestContext), - ]); + const promises: Promise<Response | null>[] = []; + if (onHeaderValidationError) { + promises.push( + onHeaderValidationError.then((error) => + this.handleValidationError(securedRequest.url, error), + ), + ); + } + + promises.push(serverApp.handle(securedRequest, requestContext)); + + return Promise.race(promises); } if (this.supportedLocales.length > 1) { diff --git a/packages/angular/ssr/src/utils/validation.ts b/packages/angular/ssr/src/utils/validation.ts index c89cdd6a64ed..dd89caf55592 100644 --- a/packages/angular/ssr/src/utils/validation.ts +++ b/packages/angular/ssr/src/utils/validation.ts @@ -56,11 +56,19 @@ export function getFirstHeaderValue( * * @param request - The incoming `Request` object to validate. * @param allowedHosts - A set of allowed hostnames. + * @param disableHostCheck - Whether to disable the host check. * @throws Error if any of the validated headers contain invalid values. */ -export function validateRequest(request: Request, allowedHosts: ReadonlySet<string>): void { +export function validateRequest( + request: Request, + allowedHosts: ReadonlySet<string>, + disableHostCheck: boolean, +): void { validateHeaders(request); - validateUrl(new URL(request.url), allowedHosts); + + if (!disableHostCheck) { + validateUrl(new URL(request.url), allowedHosts); + } } /** diff --git a/packages/angular/ssr/test/app-engine_spec.ts b/packages/angular/ssr/test/app-engine_spec.ts index 7693c6158a38..7f8d24dce77a 100644 --- a/packages/angular/ssr/test/app-engine_spec.ts +++ b/packages/angular/ssr/test/app-engine_spec.ts @@ -373,4 +373,61 @@ describe('AngularAppEngine', () => { ); }); }); + + describe('Disable host check', () => { + let consoleErrorSpy: jasmine.Spy; + + beforeAll(() => { + setAngularAppEngineManifest({ + allowedHosts: ['example.com'], + entryPoints: { + '': async () => { + setAngularAppTestingManifest( + [{ path: 'home', component: TestHomeComponent }], + [{ path: '**', renderMode: RenderMode.Server }], + ); + + return { + ɵgetOrCreateAngularServerApp: getOrCreateAngularServerApp, + ɵdestroyAngularServerApp: destroyAngularServerApp, + }; + }, + }, + basePath: '/', + supportedLocales: { 'en-US': '' }, + }); + + appEngine = new AngularAppEngine(); + + AngularAppEngine.ɵdisableAllowedHostsCheck = true; + }); + + afterAll(() => { + AngularAppEngine.ɵdisableAllowedHostsCheck = false; + }); + + beforeEach(() => { + consoleErrorSpy = spyOn(console, 'error'); + }); + + it('should allow requests to disallowed hosts', async () => { + const request = new Request('https://evil.com/home'); + const response = await appEngine.handle(request); + expect(response).toBeDefined(); + expect(response?.status).toBe(200); + expect(await response?.text()).toContain('Home works'); + expect(consoleErrorSpy).not.toHaveBeenCalled(); + }); + + it('should allow requests with disallowed host header', async () => { + const request = new Request('https://example.com/home', { + headers: { 'host': 'evil.com' }, + }); + const response = await appEngine.handle(request); + expect(response).toBeDefined(); + expect(response?.status).toBe(200); + expect(await response?.text()).toContain('Home works'); + expect(consoleErrorSpy).not.toHaveBeenCalled(); + }); + }); }); diff --git a/packages/angular/ssr/test/utils/validation_spec.ts b/packages/angular/ssr/test/utils/validation_spec.ts index 10ab896e36f1..6f8b5e170ec1 100644 --- a/packages/angular/ssr/test/utils/validation_spec.ts +++ b/packages/angular/ssr/test/utils/validation_spec.ts @@ -77,13 +77,19 @@ describe('Validation Utils', () => { }, }); - expect(() => validateRequest(req, allowedHosts)).not.toThrow(); + expect(() => validateRequest(req, allowedHosts, false)).not.toThrow(); + }); + + it('should pass for valid request when disableHostCheck is true', () => { + const req = new Request('http://evil.com'); + + expect(() => validateRequest(req, allowedHosts, true)).not.toThrow(); }); it('should throw if URL hostname is invalid', () => { const req = new Request('http://evil.com'); - expect(() => validateRequest(req, allowedHosts)).toThrowError( + expect(() => validateRequest(req, allowedHosts, false)).toThrowError( /URL with hostname "evil.com" is not allowed/, ); }); @@ -93,7 +99,7 @@ describe('Validation Utils', () => { headers: { 'x-forwarded-port': 'abc' }, }); - expect(() => validateRequest(req, allowedHosts)).toThrowError( + expect(() => validateRequest(req, allowedHosts, false)).toThrowError( 'Header "x-forwarded-port" must be a numeric value.', ); }); @@ -102,16 +108,32 @@ describe('Validation Utils', () => { const req = new Request('http://example.com', { headers: { 'x-forwarded-proto': 'ftp' }, }); - expect(() => validateRequest(req, allowedHosts)).toThrowError( + expect(() => validateRequest(req, allowedHosts, false)).toThrowError( 'Header "x-forwarded-proto" must be either "http" or "https".', ); }); + it('should pass for valid x-forwarded-proto (case-insensitive)', () => { + const req = new Request('http://example.com', { + headers: { 'x-forwarded-proto': 'HTTP' }, + }); + expect(() => validateRequest(req, allowedHosts, false)).not.toThrow(); + }); + it('should throw if host contains path separators', () => { const req = new Request('http://example.com', { headers: { 'host': 'example.com/bad' }, }); - expect(() => validateRequest(req, allowedHosts)).toThrowError( + expect(() => validateRequest(req, allowedHosts, false)).toThrowError( + 'Header "host" contains characters that are not allowed.', + ); + }); + + it('should throw if host contains invalid characters', () => { + const req = new Request('http://example.com', { + headers: { 'host': 'example.com?query=1' }, + }); + expect(() => validateRequest(req, allowedHosts, false)).toThrowError( 'Header "host" contains characters that are not allowed.', ); }); @@ -120,7 +142,7 @@ describe('Validation Utils', () => { const req = new Request('http://example.com', { headers: { 'x-forwarded-host': 'example.com/bad' }, }); - expect(() => validateRequest(req, allowedHosts)).toThrowError( + expect(() => validateRequest(req, allowedHosts, false)).toThrowError( 'Header "x-forwarded-host" contains characters that are not allowed.', ); }); @@ -135,7 +157,7 @@ describe('Validation Utils', () => { }, }); - expect(() => validateRequest(request, allowedHosts)) + expect(() => validateRequest(request, allowedHosts, false)) .withContext(`Prefix: "${prefix}"`) .toThrowError( 'Header "x-forwarded-prefix" must not start with multiple "/" or "\\" or contain ".", ".." path segments.', @@ -168,7 +190,7 @@ describe('Validation Utils', () => { }, }); - expect(() => validateRequest(request, allowedHosts)) + expect(() => validateRequest(request, allowedHosts, false)) .withContext(`Prefix: "${prefix}"`) .toThrowError( 'Header "x-forwarded-prefix" must not start with multiple "/" or "\\" or contain ".", ".." path segments.', @@ -186,7 +208,7 @@ describe('Validation Utils', () => { }, }); - expect(() => validateRequest(request, allowedHosts)) + expect(() => validateRequest(request, allowedHosts, false)) .withContext(`Prefix: "${prefix}"`) .not.toThrow(); } From 630d4fb213c50e3637ce0fed91d9e3bb6b62c091 Mon Sep 17 00:00:00 2001 From: Angular Robot <angular-robot@google.com> Date: Fri, 27 Feb 2026 18:12:40 +0000 Subject: [PATCH 070/226] build: update cross-repo angular dependencies See associated pull request for more information. --- tests/e2e/ng-snapshot/package.json | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/tests/e2e/ng-snapshot/package.json b/tests/e2e/ng-snapshot/package.json index 371adce40829..534cdd10091d 100644 --- a/tests/e2e/ng-snapshot/package.json +++ b/tests/e2e/ng-snapshot/package.json @@ -2,21 +2,21 @@ "description": "snapshot versions of Angular for e2e testing", "private": true, "dependencies": { - "@angular/animations": "github:angular/animations-builds#8546bf7fad7f43c4b6da8285d6d89b69a459e9d0", + "@angular/animations": "github:angular/animations-builds#b06e0efa431f49cca5c6b569e63045d47a6dc73f", "@angular/cdk": "github:angular/cdk-builds#8edceea9e6c048b8360a593d2e38ab7b4aa5f6a4", - "@angular/common": "github:angular/common-builds#eff394d2590166253a21ddbceaf74f9e5703bbf8", - "@angular/compiler": "github:angular/compiler-builds#98b36cd28892d8bdffa3c01bc94a2b1b5bb6e602", - "@angular/compiler-cli": "github:angular/compiler-cli-builds#0c0002ae6557f9fddb84cdc1cb957103215c86ad", - "@angular/core": "github:angular/core-builds#48d277cf736d1efaa028429a158636b1a032a8dc", - "@angular/forms": "github:angular/forms-builds#783871bbc6d470579596b2bc9cb9038a891a0e58", - "@angular/language-service": "github:angular/language-service-builds#5cf6a73d2c4c8336c5e07e72e49e7241b03d6819", - "@angular/localize": "github:angular/localize-builds#1a3523ce9577f139dc349eaf3ba4ad5064ad1479", + "@angular/common": "github:angular/common-builds#1fa25beeb88fda67a29c95f9e8f5ce6156c640ff", + "@angular/compiler": "github:angular/compiler-builds#9babcd3b1182dc657e80452295c39bb321cd9f47", + "@angular/compiler-cli": "github:angular/compiler-cli-builds#f22b7003d46d35d23e8aa152294c17439130a832", + "@angular/core": "github:angular/core-builds#ec50f95df447e3bc37c5a0de55a85a10503cd402", + "@angular/forms": "github:angular/forms-builds#a5bb010530813a7deb491c4c655429970ddffce1", + "@angular/language-service": "github:angular/language-service-builds#2d329d09688581c4da3e1b74b5ac649e933a0567", + "@angular/localize": "github:angular/localize-builds#75e1692e975659b41bc5bf399043623bfc398b68", "@angular/material": "github:angular/material-builds#7fe6144f6b141f2156514a5f8afa9daf6ef65891", "@angular/material-moment-adapter": "github:angular/material-moment-adapter-builds#0fa3861ab1a8eac59063e1fc43ccc2af7ffecdca", - "@angular/platform-browser": "github:angular/platform-browser-builds#b37ce3a2974aa7ef00950879a730a16acc7a0c04", - "@angular/platform-browser-dynamic": "github:angular/platform-browser-dynamic-builds#f38377cceb64be3eab16249ad494c4955ed5d6d3", - "@angular/platform-server": "github:angular/platform-server-builds#a85070ca305b869d45ad5d0e3ad8a0b9d86c6cf6", - "@angular/router": "github:angular/router-builds#e6acd4c9b022cdecbf8f320dec0da01cd23ffbda", - "@angular/service-worker": "github:angular/service-worker-builds#a7dffc1299061a658819404b1704c4cf04b1222c" + "@angular/platform-browser": "github:angular/platform-browser-builds#1b1d7b3e62fc763a3cb6a7e32b1c9c7714af2346", + "@angular/platform-browser-dynamic": "github:angular/platform-browser-dynamic-builds#289f13f553987447e8e9730f5a4227497f632823", + "@angular/platform-server": "github:angular/platform-server-builds#36df7d6def28647d5a3b0202f7dc2bd70f298802", + "@angular/router": "github:angular/router-builds#61733b15d32b569eff0192ea1b1ef98784341371", + "@angular/service-worker": "github:angular/service-worker-builds#c3649d800168e7f145cc5cb8b2a55b5760844e90" } } From b6971450e9a25029ea23fb2af64c324962cce019 Mon Sep 17 00:00:00 2001 From: Angular Robot <angular-robot@google.com> Date: Fri, 27 Feb 2026 06:19:05 +0000 Subject: [PATCH 071/226] build: update dependency bazel to v8.6.0 See associated pull request for more information. --- .bazelversion | 2 +- MODULE.bazel.lock | 14 +++++++------- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/.bazelversion b/.bazelversion index f9c71a52e2fd..acd405b1d62e 100644 --- a/.bazelversion +++ b/.bazelversion @@ -1 +1 @@ -8.5.1 +8.6.0 diff --git a/MODULE.bazel.lock b/MODULE.bazel.lock index 7dba7279441a..308f372dfc63 100644 --- a/MODULE.bazel.lock +++ b/MODULE.bazel.lock @@ -215,7 +215,7 @@ "moduleExtensions": { "@@aspect_rules_esbuild+//esbuild:extensions.bzl%esbuild": { "general": { - "bzlTransitiveDigest": "c4i5gawrp4Au9UMb55EzQCePYwkrFqD9tFBN7GdHG5g=", + "bzlTransitiveDigest": "fzdwsWU1Px4bYL57Cw1rvU/mgOqB7f0AF51JxT5kAs8=", "usagesDigest": "ToTaCONCN/E05krnHXLM1kpV1zrHNxHrGpUip973II4=", "recordedFileInputs": {}, "recordedDirentsInputs": {}, @@ -416,7 +416,7 @@ }, "@@aspect_rules_js+//npm:extensions.bzl%pnpm": { "general": { - "bzlTransitiveDigest": "HC+l+mTivq1p/KbcVQ+iV5QwYR+oKESJh827FY68SH8=", + "bzlTransitiveDigest": "9Zmqluz9ltvCoc6pskOslTkQpkH6CIINjWVkgam9aa4=", "usagesDigest": "ZvjRdptHQkMA7CP3Q06p9iboasgFVjpW2zKBrKW0xCA=", "recordedFileInputs": {}, "recordedDirentsInputs": {}, @@ -570,7 +570,7 @@ }, "@@aspect_rules_ts+//ts:extensions.bzl%ext": { "general": { - "bzlTransitiveDigest": "jrh/WHprsSSVvWjNLpDRdUl48LnV4xm2+ZssEvasHxQ=", + "bzlTransitiveDigest": "6NyLUdrb79stFKm8oWIBK2q65cT5Upbr8IR2Qwsywu8=", "usagesDigest": "ohKYRsVTeRZRfv+0QiN+5H2ycAbbirey745XNBkWqkk=", "recordedFileInputs": { "@@rules_browsers+//package.json": "772d873d450a539e2133635aeb5e63744cf1cec86e6b37aeecd9267a147fb0d7" @@ -671,7 +671,7 @@ }, "@@pybind11_bazel+//:python_configure.bzl%extension": { "general": { - "bzlTransitiveDigest": "c9ZWWeXeu6bctL4/SsY2otFWyeFN0JJ20+ymGyJZtWk=", + "bzlTransitiveDigest": "D2/qWHU6yQFwRG7Bb+caqrYMha5avsASao2vERrxK24=", "usagesDigest": "fycyB39YnXIJkfWCIXLUKJMZzANcuLy9ZE73hRucjFk=", "recordedFileInputs": { "@@pybind11_bazel+//MODULE.bazel": "88af1c246226d87e65be78ed49ecd1e6f5e98648558c14ce99176da041dc378e" @@ -950,7 +950,7 @@ }, "@@rules_fuzzing+//fuzzing/private:extensions.bzl%non_module_dependencies": { "general": { - "bzlTransitiveDigest": "WHRlQQnxW7e7XMRBhq7SARkDarLDOAbg6iLaJpk5QYM=", + "bzlTransitiveDigest": "4LouzhF/yT117s7peGnNs9ROomiJXC6Zl5R0oI21jho=", "usagesDigest": "wy6ISK6UOcBEjj/mvJ/S3WeXoO67X+1llb9yPyFtPgc=", "recordedFileInputs": {}, "recordedDirentsInputs": {}, @@ -1033,7 +1033,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": {}, @@ -2339,7 +2339,7 @@ }, "@@rules_python+//python/extensions:pip.bzl%pip": { "general": { - "bzlTransitiveDigest": "d3ENjFH8qMwmOrkcb3c9JYqQ5hJ6owjfbSr24KY0Ugg=", + "bzlTransitiveDigest": "LFkevJ0u48WgTVCyU07LkRD8iYwsRUs2M7uSFHkQAW0=", "usagesDigest": "AK1R124YPWwAs8z1CQYyjYuci8RO5Ofot+EP5ZCNQDc=", "recordedFileInputs": { "@@protobuf+//python/requirements.txt": "983be60d3cec4b319dcab6d48aeb3f5b2f7c3350f26b3a9e97486c37967c73c5", From ec289c36baa5a1df780406fe7c54b846302ad877 Mon Sep 17 00:00:00 2001 From: Alan Agius <17563226+alan-agius4@users.noreply.github.com> Date: Mon, 2 Mar 2026 07:58:15 +0000 Subject: [PATCH 072/226] fix(@angular/build): bundle polyfills to preserve execution order in dev server When using the development server with ESM, polyfills were built as a mix of bundled local files and external package imports. Due to ESM hoisting behavior, all top-level import statements are executed before any other code in the module. This caused polyfills that modify global state (like zone-flags.js) to run after the polyfills they were intended to configure (like zone.js), rendering the flags ineffective. This change ensures that all polyfills are bundled together into the single polyfills.js file when using the development server, matching the behavior of the production build and preserving the intended execution order. Closes #32632 --- .../src/tools/esbuild/application-code-bundle.ts | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/packages/angular/build/src/tools/esbuild/application-code-bundle.ts b/packages/angular/build/src/tools/esbuild/application-code-bundle.ts index e59f139c8aeb..257a98fc0f45 100644 --- a/packages/angular/build/src/tools/esbuild/application-code-bundle.ts +++ b/packages/angular/build/src/tools/esbuild/application-code-bundle.ts @@ -654,9 +654,13 @@ function getEsBuildCommonPolyfillsOptions( tryToResolvePolyfillsAsRelative: boolean, loadResultCache: LoadResultCache | undefined, ): BuildOptions | undefined { - const { jit, workspaceRoot, i18nOptions, externalPackages } = options; + const { jit, workspaceRoot, i18nOptions } = options; - const buildOptions = getEsBuildCommonOptions(options); + const buildOptions = getEsBuildCommonOptions({ + ...options, + externalPackages: false, + }); + buildOptions.packages = 'bundle'; buildOptions.splitting = false; buildOptions.plugins ??= []; @@ -671,10 +675,8 @@ function getEsBuildCommonPolyfillsOptions( // Locale data should go first so that project provided polyfill code can augment if needed. let needLocaleDataPlugin = false; if (i18nOptions.shouldInline) { - if (!externalPackages) { - // Remove localize polyfill when i18n inline transformation have been applied to all the packages. - polyfills = polyfills.filter((path) => !path.startsWith('@angular/localize')); - } + // Remove localize polyfill when i18n inline transformation have been applied to all the packages. + polyfills = polyfills.filter((path) => !path.startsWith('@angular/localize')); // Add locale data for all active locales // TODO: Inject each individually within the inlining process itself From 038a9317ed6411500210a2b771ca574452a5e93c Mon Sep 17 00:00:00 2001 From: Alan Agius <17563226+alan-agius4@users.noreply.github.com> Date: Mon, 2 Mar 2026 08:28:32 +0000 Subject: [PATCH 073/226] fix(@angular/cli): correct dev dependency detection logic in `ng add` Previously, the logic for determining whether to install a package as a dev dependency in `ng add` was using a negative check (`!== 'dependencies'`). This has been changed to an explicit check (`=== 'devDependencies'`) to ensure the same behaviour as previous versions. Closes #32630 --- packages/angular/cli/src/commands/add/cli.ts | 2 +- tests/e2e/tests/commands/add/add-material.ts | 10 ++++++++-- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/packages/angular/cli/src/commands/add/cli.ts b/packages/angular/cli/src/commands/add/cli.ts index a27c6405f18f..a41c9b54c7f3 100644 --- a/packages/angular/cli/src/commands/add/cli.ts +++ b/packages/angular/cli/src/commands/add/cli.ts @@ -583,7 +583,7 @@ export default class AddCommandModule await packageManager.add( packageIdentifier.toString(), 'none', - savePackage !== 'dependencies', + savePackage === 'devDependencies', false, true, { diff --git a/tests/e2e/tests/commands/add/add-material.ts b/tests/e2e/tests/commands/add/add-material.ts index 238e5d94dddb..a7453f035a6f 100644 --- a/tests/e2e/tests/commands/add/add-material.ts +++ b/tests/e2e/tests/commands/add/add-material.ts @@ -1,9 +1,10 @@ import { assertIsError } from '../../../utils/utils'; -import { expectFileToMatch, rimraf } from '../../../utils/fs'; +import { readFile, rimraf } from '../../../utils/fs'; import { getActivePackageManager, uninstallPackage } from '../../../utils/packages'; import { ng } from '../../../utils/process'; import { isPrereleaseCli } from '../../../utils/project'; import { appendFile } from 'node:fs/promises'; +import assert from 'node:assert'; export default async function () { // forcibly remove in case another test doesn't clean itself up @@ -32,7 +33,12 @@ export default async function () { '--verbose', '--skip-confirmation', ); - await expectFileToMatch('package.json', /@angular\/material/); + + const { dependencies } = JSON.parse(await readFile('package.json')); + assert.ok( + dependencies['@angular/material'], + '`@angular/material` was not found added to dependencies', + ); // Clean up existing cdk package // Not doing so can cause adding material to fail if an incompatible cdk is present From 1f21e89d99c191642627df6842402644a1bf26ee Mon Sep 17 00:00:00 2001 From: Alan Agius <17563226+alan-agius4@users.noreply.github.com> Date: Mon, 2 Mar 2026 08:04:48 +0000 Subject: [PATCH 074/226] refactor: remove `@angular-devkit/architect-cli` package The `@angular-devkit/architect-cli` package has been removed as it is no longer necessary. The `architect` command-line tool, which was previously provided by this package, is now available directly through the `@angular-devkit/architect` package. Users who were using the standalone `architect` tool should update their dependencies to point directly to `@angular-devkit/architect`. BREAKING CHANGE: The `@angular-devkit/architect-cli` package is no longer available. The `architect` CLI tool has been moved to the `@angular-devkit/architect` package. --- .github/_CODEOWNERS.tmp | 1 - .monorepo.json | 5 --- .ng-dev/release.mjs | 7 +--- CONTRIBUTING.md | 1 - MODULE.bazel | 1 - README.md | 1 - constants.bzl | 1 - .../angular_devkit/architect_cli/BUILD.bazel | 32 ------------------- .../angular_devkit/architect_cli/README.md | 19 ----------- .../angular_devkit/architect_cli/bin/cli.js | 10 ------ .../angular_devkit/architect_cli/package.json | 20 ------------ pnpm-lock.yaml | 6 ---- pnpm-workspace.yaml | 1 - tests/e2e.bzl | 1 - .../tests/architect_cli/package_execution.ts | 22 ------------- 15 files changed, 1 insertion(+), 127 deletions(-) delete mode 100644 packages/angular_devkit/architect_cli/BUILD.bazel delete mode 100644 packages/angular_devkit/architect_cli/README.md delete mode 100644 packages/angular_devkit/architect_cli/bin/cli.js delete mode 100644 packages/angular_devkit/architect_cli/package.json delete mode 100644 tests/e2e/tests/architect_cli/package_execution.ts diff --git a/.github/_CODEOWNERS.tmp b/.github/_CODEOWNERS.tmp index 3e79d395914f..bbe389cb0619 100644 --- a/.github/_CODEOWNERS.tmp +++ b/.github/_CODEOWNERS.tmp @@ -1,7 +1,6 @@ /packages/_/ @hansl @clydin /packages/angular/pwa @hansl @Brocco /packages/angular_devkit/architect/ @filipesilva @hansl -/packages/angular_devkit/architect_cli/ @filipesilva @hansl /packages/angular_devkit/build_angular/ @filipesilva @clydin /packages/angular_devkit/build_ng_packagr/ @filipesilva @clydin /packages/angular_devkit/build_optimizer/ @filipesilva @clydin diff --git a/.monorepo.json b/.monorepo.json index 4d5face644df..ad86e09acdeb 100644 --- a/.monorepo.json +++ b/.monorepo.json @@ -59,11 +59,6 @@ ], "snapshotRepo": "angular/angular-devkit-architect-builds" }, - "@angular-devkit/architect-cli": { - "name": "Architect CLI", - "section": "Tooling", - "snapshotRepo": "angular/angular-devkit-architect-cli-builds" - }, "@angular-devkit/build-angular": { "name": "Build Angular", "links": [ diff --git a/.ng-dev/release.mjs b/.ng-dev/release.mjs index 2aadf9db122c..4d4a4fc4b927 100644 --- a/.ng-dev/release.mjs +++ b/.ng-dev/release.mjs @@ -23,12 +23,7 @@ export const release = { await assertValidDependencyRanges(newVersion, releasePackages); }, releaseNotes: { - groupOrder: [ - '@angular/cli', - '@schematics/angular', - '@angular-devkit/architect-cli', - '@angular-devkit/schematics-cli', - ], + groupOrder: ['@angular/cli', '@schematics/angular', '@angular-devkit/schematics-cli'], }, publishRegistry: 'https://wombat-dressing-room.appspot.com', releasePrLabels: ['action: merge'], diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 06db9756c89d..e3b2d4fe1bb2 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -217,7 +217,6 @@ The following is the list of supported scopes: * **@angular/pwa** * **@angular/ssr** * **@angular-devkit/architect** -* **@angular-devkit/architect-cli** * **@angular-devkit/build-angular** * **@angular-devkit/build-webpack** * **@angular-devkit/core** diff --git a/MODULE.bazel b/MODULE.bazel index 2a56a70869d1..47b4699a08ee 100644 --- a/MODULE.bazel +++ b/MODULE.bazel @@ -138,7 +138,6 @@ npm.npm_translate_lock( "//packages/angular/pwa:package.json", "//packages/angular/ssr:package.json", "//packages/angular_devkit/architect:package.json", - "//packages/angular_devkit/architect_cli:package.json", "//packages/angular_devkit/build_angular:package.json", "//packages/angular_devkit/build_webpack:package.json", "//packages/angular_devkit/core:package.json", diff --git a/README.md b/README.md index f14224e1cac7..9d3364263312 100644 --- a/README.md +++ b/README.md @@ -141,7 +141,6 @@ This is a monorepo which contains many tools and packages: |---|---|---|---| **Angular Build System** | [`@angular/build`](https://npmjs.com/package/@angular/build) | [![latest](https://img.shields.io/npm/v/%40angular%2Fbuild/latest.svg)](https://npmjs.com/package/@angular/build) | [![README](https://img.shields.io/badge/README--green.svg)](/packages/angular/build/README.md) [![snapshot](https://img.shields.io/badge/snapshot--blue.svg)](https://github.com/angular/angular-build-builds) **Angular CLI** | [`@angular/cli`](https://npmjs.com/package/@angular/cli) | [![latest](https://img.shields.io/npm/v/%40angular%2Fcli/latest.svg)](https://npmjs.com/package/@angular/cli) | [![README](https://img.shields.io/badge/README--green.svg)](/packages/angular/cli/README.md) [![snapshot](https://img.shields.io/badge/snapshot--blue.svg)](https://github.com/angular/cli-builds) -**Architect CLI** | [`@angular-devkit/architect-cli`](https://npmjs.com/package/@angular-devkit/architect-cli) | [![latest](https://img.shields.io/npm/v/%40angular-devkit%2Farchitect-cli/latest.svg)](https://npmjs.com/package/@angular-devkit/architect-cli) | [![snapshot](https://img.shields.io/badge/snapshot--blue.svg)](https://github.com/angular/angular-devkit-architect-cli-builds) **Schematics CLI** | [`@angular-devkit/schematics-cli`](https://npmjs.com/package/@angular-devkit/schematics-cli) | [![latest](https://img.shields.io/npm/v/%40angular-devkit%2Fschematics-cli/latest.svg)](https://npmjs.com/package/@angular-devkit/schematics-cli) | [![snapshot](https://img.shields.io/badge/snapshot--blue.svg)](https://github.com/angular/angular-devkit-schematics-cli-builds) diff --git a/constants.bzl b/constants.bzl index c53a8ddb1e86..f737df7c94db 100644 --- a/constants.bzl +++ b/constants.bzl @@ -21,7 +21,6 @@ SNAPSHOT_REPOS = { "@angular/build": "angular/angular-build-builds", "@angular/ssr": "angular/angular-ssr-builds", "@angular-devkit/architect": "angular/angular-devkit-architect-builds", - "@angular-devkit/architect-cli": "angular/angular-devkit-architect-cli-builds", "@angular-devkit/build-angular": "angular/angular-devkit-build-angular-builds", "@angular-devkit/build-webpack": "angular/angular-devkit-build-webpack-builds", "@angular-devkit/core": "angular/angular-devkit-core-builds", diff --git a/packages/angular_devkit/architect_cli/BUILD.bazel b/packages/angular_devkit/architect_cli/BUILD.bazel deleted file mode 100644 index 98cfd7606b81..000000000000 --- a/packages/angular_devkit/architect_cli/BUILD.bazel +++ /dev/null @@ -1,32 +0,0 @@ -load("@npm//:defs.bzl", "npm_link_all_packages") -load("//tools:defaults.bzl", "npm_package") - -# Copyright Google LLC. All Rights Reserved. -# -# Use of this source code is governed by an MIT-style license that can be -# found in the LICENSE file at https://angular.dev/license -licenses(["notice"]) - -package(default_visibility = ["//visibility:public"]) - -npm_link_all_packages() - -genrule( - name = "license", - srcs = ["//:LICENSE"], - outs = ["LICENSE"], - cmd = "cp $(execpath //:LICENSE) $@", -) - -npm_package( - name = "pkg", - pkg_deps = [ - "//packages/angular_devkit/architect:package.json", - ], - tags = ["release-package"], - deps = [ - ":README.md", - ":bin/cli.js", - ":license", - ], -) diff --git a/packages/angular_devkit/architect_cli/README.md b/packages/angular_devkit/architect_cli/README.md deleted file mode 100644 index 3dae8d2fe2eb..000000000000 --- a/packages/angular_devkit/architect_cli/README.md +++ /dev/null @@ -1,19 +0,0 @@ -# Architect CLI - -This package contains the executable for running an [Architect Builder](/packages/angular_devkit/architect/README.md). - -# Usage - -``` -architect [project][:target][:configuration] [options, ...] - -Run a project target. -If project/target/configuration are not specified, the workspace defaults will be used. - -Options: - --help Show available options for project target. - Shows this message instead when ran without the run argument. - - -Any additional option is passed the target, overriding existing options. -``` diff --git a/packages/angular_devkit/architect_cli/bin/cli.js b/packages/angular_devkit/architect_cli/bin/cli.js deleted file mode 100644 index c1988e048dec..000000000000 --- a/packages/angular_devkit/architect_cli/bin/cli.js +++ /dev/null @@ -1,10 +0,0 @@ -#!/usr/bin/env node -/** - * @license - * Copyright Google LLC All Rights Reserved. - * - * Use of this source code is governed by an MIT-style license that can be - * found in the LICENSE file at https://angular.dev/license - */ - -import '@angular-devkit/architect/bin/architect.js'; diff --git a/packages/angular_devkit/architect_cli/package.json b/packages/angular_devkit/architect_cli/package.json deleted file mode 100644 index bf1ba1d2debb..000000000000 --- a/packages/angular_devkit/architect_cli/package.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "name": "@angular-devkit/architect-cli", - "version": "0.0.0-EXPERIMENTAL-PLACEHOLDER", - "type": "module", - "description": "Angular Architect CLI", - "homepage": "https://github.com/angular/angular-cli", - "experimental": true, - "bin": { - "architect": "./bin/cli.js" - }, - "keywords": [ - "build system", - "build facade", - "build", - "tooling" - ], - "dependencies": { - "@angular-devkit/architect": "workspace:0.0.0-EXPERIMENTAL-PLACEHOLDER" - } -} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 929e00d801f8..eb487bd2cb6c 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -545,12 +545,6 @@ importers: specifier: 7.8.2 version: 7.8.2 - packages/angular_devkit/architect_cli: - dependencies: - '@angular-devkit/architect': - specifier: workspace:0.0.0-EXPERIMENTAL-PLACEHOLDER - version: link:../architect - packages/angular_devkit/build_angular: dependencies: '@ampproject/remapping': diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index ecfbec6f3cb9..a6c57def2129 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -1,7 +1,6 @@ packages: - . - packages/angular_devkit/architect - - packages/angular_devkit/architect_cli - packages/angular_devkit/core - packages/angular_devkit/build_webpack - packages/angular_devkit/build_angular diff --git a/tests/e2e.bzl b/tests/e2e.bzl index 34ae2452a0fb..02897672a9d3 100644 --- a/tests/e2e.bzl +++ b/tests/e2e.bzl @@ -9,7 +9,6 @@ TESTED_PACKAGES = [ "//packages/angular/ssr:npm_package_archive.tgz", "//packages/angular/pwa:npm_package_archive.tgz", "//packages/angular_devkit/architect:npm_package_archive.tgz", - "//packages/angular_devkit/architect_cli:npm_package_archive.tgz", "//packages/angular_devkit/build_angular:npm_package_archive.tgz", "//packages/angular_devkit/build_webpack:npm_package_archive.tgz", "//packages/angular_devkit/core:npm_package_archive.tgz", diff --git a/tests/e2e/tests/architect_cli/package_execution.ts b/tests/e2e/tests/architect_cli/package_execution.ts deleted file mode 100644 index 60b3964b7521..000000000000 --- a/tests/e2e/tests/architect_cli/package_execution.ts +++ /dev/null @@ -1,22 +0,0 @@ -import * as assert from 'node:assert/strict'; -import { exec } from '../../utils/process'; -import { installPackage, uninstallPackage } from '../../utils/packages'; -import { join } from 'node:path'; - -export default async function () { - // Install CLI package - await installPackage('@angular-devkit/architect-cli'); - - try { - // Run help command - const binPath = join('node_modules', '.bin', 'architect'); - const { stdout } = await exec(binPath, '--help'); - - assert.ok( - stdout.includes('architect [project][:target][:configuration] [options, ...]'), - 'Expected stdout to contain usage information.', - ); - } finally { - await uninstallPackage('@angular-devkit/architect-cli'); - } -} From 4fec6bf2dae5cfc038bf61ac8ffe8a190cc19061 Mon Sep 17 00:00:00 2001 From: Alan Agius <17563226+alan-agius4@users.noreply.github.com> Date: Mon, 2 Mar 2026 14:11:09 +0000 Subject: [PATCH 075/226] refactor: delete temporary CODEOWNERS file This is outdated and unused. --- .github/_CODEOWNERS.tmp | 16 ---------------- 1 file changed, 16 deletions(-) delete mode 100644 .github/_CODEOWNERS.tmp diff --git a/.github/_CODEOWNERS.tmp b/.github/_CODEOWNERS.tmp deleted file mode 100644 index bbe389cb0619..000000000000 --- a/.github/_CODEOWNERS.tmp +++ /dev/null @@ -1,16 +0,0 @@ -/packages/_/ @hansl @clydin -/packages/angular/pwa @hansl @Brocco -/packages/angular_devkit/architect/ @filipesilva @hansl -/packages/angular_devkit/build_angular/ @filipesilva @clydin -/packages/angular_devkit/build_ng_packagr/ @filipesilva @clydin -/packages/angular_devkit/build_optimizer/ @filipesilva @clydin -/packages/angular_devkit/core/ @hansl @clydin -/packages/angular_devkit/schematics/ @hansl @Brocco -/packages/angular_devkit/schematics_cli/ @hansl @Brocco -/packages/ngtools/webpack/ @hansl @filipesilva @clydin -/packages/schematics/angular/ @hansl @Brocco -/packages/schematics/package_update/ @hansl @Brocco -/packages/schematics/schematics/ @hansl @Brocco -/packages/schematics/update/ @hansl @Brocco -/rules/ @hansl @clydin -/scripts/ @hansl @clydin From 363fd37ea5f70ebac997309ac68a678b508409a0 Mon Sep 17 00:00:00 2001 From: Alan Agius <17563226+alan-agius4@users.noreply.github.com> Date: Mon, 2 Mar 2026 13:13:54 +0000 Subject: [PATCH 076/226] fix(@angular/cli): ensure group members are updated to targeted version When performing an update, all members of a package group should be updated to the same version as the targeted packages in that group, even if they are not explicitly passed as arguments to the command. This change separates the package group expansion and peer dependency resolution into two distinct loops. By completing the package group expansion first, we ensure that all group members are added to the update list with their group-synced versions before Evaluate peer dependencies. This prevents cases where a peer dependency might be pulled in at a newer (latest) version before its membership in a targeted group update is recognized. Closes #32576 --- .../src/commands/update/schematic/index.ts | 7 +++ .../commands/update/schematic/index_spec.ts | 53 +++++++++++++++++++ 2 files changed, 60 insertions(+) diff --git a/packages/angular/cli/src/commands/update/schematic/index.ts b/packages/angular/cli/src/commands/update/schematic/index.ts index 77f0425b5080..e110480d09a5 100644 --- a/packages/angular/cli/src/commands/update/schematic/index.ts +++ b/packages/angular/cli/src/commands/update/schematic/index.ts @@ -886,6 +886,13 @@ export default function (options: UpdateSchema): Rule { lastPackagesSize = packages.size; npmPackageJsonMap.forEach((npmPackageJson) => { _addPackageGroup(tree, packages, npmDeps, npmPackageJson, logger); + }); + } while (packages.size > lastPackagesSize); + + // This is done in seperate loop to ensure that package groups are added before peer dependencies. + do { + lastPackagesSize = packages.size; + npmPackageJsonMap.forEach((npmPackageJson) => { _addPeerDependencies(tree, packages, npmDeps, npmPackageJson, npmPackageJsonMap, logger); }); } while (packages.size > lastPackagesSize); diff --git a/packages/angular/cli/src/commands/update/schematic/index_spec.ts b/packages/angular/cli/src/commands/update/schematic/index_spec.ts index 3954e3c78254..11b2a0b5855e 100644 --- a/packages/angular/cli/src/commands/update/schematic/index_spec.ts +++ b/packages/angular/cli/src/commands/update/schematic/index_spec.ts @@ -335,4 +335,57 @@ describe('@schematics/update', () => { const resultTreeContent = resultTree.readContent('/package.json'); expect(resultTreeContent.endsWith('}')).toBeTrue(); }); + + it('updates group members to the same version as the targeted package', async () => { + const packageJsonContent = `{ + "name": "test", + "dependencies": { + "@angular/cdk": "^19.2.19", + "@angular/common": "^19.2.0", + "@angular/compiler": "^19.2.0", + "@angular/core": "^19.2.0", + "@angular/forms": "^19.2.0", + "@angular/platform-browser": "^19.2.0", + "@angular/platform-browser-dynamic": "^19.2.0", + "@angular/router": "^19.2.0", + "rxjs": "~7.8.0", + "tslib": "^2.3.0", + "zone.js": "~0.15.0" + }, + "devDependencies": { + "@angular-devkit/build-angular": "^19.2.21", + "@angular/cli": "^19.2.21", + "@angular/compiler-cli": "^19.2.0", + "typescript": "~5.7.2" + } + }`; + + const inputTree = new UnitTestTree( + new HostTree( + new virtualFs.test.TestHost({ + '/package.json': packageJsonContent, + }), + ), + ); + + const resultTree = await schematicRunner.runSchematic( + 'update', + { force: true, packages: ['@angular/cli@20', '@angular/cdk@20', '@angular/core@20'] }, + inputTree, + ); + + const { devDependencies, dependencies } = resultTree.readJson('/package.json') as { + devDependencies: Record<string, string>; + dependencies: Record<string, string>; + }; + + const version20Regexp = /^\^20.\d+.\d+$/; + + expect(devDependencies['typescript']).toMatch(/5\.9\.\d+/); + expect(devDependencies['@angular/cli']).toMatch(version20Regexp); + expect(devDependencies['@angular/compiler-cli']).toMatch(version20Regexp); + expect(dependencies['@angular/cdk']).toMatch(version20Regexp); + expect(dependencies['@angular/common']).toMatch(version20Regexp); + expect(dependencies['@angular/core']).toMatch(version20Regexp); + }); }); From 597e6c33dc5577a5d8b9548e1ccb90256a357e01 Mon Sep 17 00:00:00 2001 From: Alan Agius <alanagius@google.com> Date: Mon, 2 Mar 2026 15:52:47 +0100 Subject: [PATCH 077/226] refactor: remove `tree-kill` dependency and refactor `killAllProcesses` to use native `childProc.kill` with retries. Remove last `tree-kill` package usage. --- pnpm-lock.yaml | 9 ------- tests/e2e/utils/BUILD.bazel | 1 - tests/e2e/utils/process.ts | 48 +++++++++++++++++++++---------------- tests/package.json | 3 +-- 4 files changed, 29 insertions(+), 32 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index eb487bd2cb6c..5dba7004dae2 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -842,9 +842,6 @@ importers: tar-stream: specifier: 3.1.7 version: 3.1.7 - tree-kill: - specifier: 1.2.2 - version: 1.2.2 packages: @@ -7762,10 +7759,6 @@ packages: peerDependencies: tslib: '2' - tree-kill@1.2.2: - resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==} - hasBin: true - ts-api-utils@2.4.0: resolution: {integrity: sha512-3TaVTaAv2gTiMB35i3FiGJaRfwb3Pyn/j3m/bfAvGe8FB7CF6u+LMYqYlDh7reQf7UNvoTvdfAqHGmPGOSsPmA==} engines: {node: '>=18.12'} @@ -16412,8 +16405,6 @@ snapshots: dependencies: tslib: 2.8.1 - tree-kill@1.2.2: {} - ts-api-utils@2.4.0(typescript@5.9.3): dependencies: typescript: 5.9.3 diff --git a/tests/e2e/utils/BUILD.bazel b/tests/e2e/utils/BUILD.bazel index d4493fb14492..dbbda05702cd 100644 --- a/tests/e2e/utils/BUILD.bazel +++ b/tests/e2e/utils/BUILD.bazel @@ -20,6 +20,5 @@ ts_project( "//:node_modules/verdaccio-auth-memory", "//tests:node_modules/@types/tar-stream", "//tests:node_modules/tar-stream", - "//tests:node_modules/tree-kill", ], ) diff --git a/tests/e2e/utils/process.ts b/tests/e2e/utils/process.ts index 91216843086a..54bcf629a69e 100644 --- a/tests/e2e/utils/process.ts +++ b/tests/e2e/utils/process.ts @@ -1,7 +1,7 @@ import { spawn, SpawnOptions } from 'node:child_process'; import * as child_process from 'node:child_process'; import { getGlobalVariable, getGlobalVariablesEnv } from './env'; -import treeKill from 'tree-kill'; +import { setTimeout as sleep } from 'node:timers/promises'; import { delimiter, join, resolve } from 'node:path'; import { stripVTControlCharacters, styleText } from 'node:util'; @@ -255,29 +255,37 @@ export async function waitForAnyProcessOutputToMatch( return matchingProcess; } -export async function killAllProcesses(signal = 'SIGTERM'): Promise<void> { - const processesToKill: Promise<void>[] = []; +/** + * Kills all tracked processes with a retry mechanism. + */ +export async function killAllProcesses(signal: NodeJS.Signals = 'SIGTERM'): Promise<void> { + let attempts = 0; + const maxRetries = 3; + + while (_processes.length > 0 && attempts < maxRetries) { + attempts++; + + // Iterate backwards so we can remove elements while looping if needed. + for (let i = _processes.length - 1; i >= 0; i--) { + const childProc = _processes[i]; - while (_processes.length) { - const childProc = _processes.pop(); - if (!childProc || childProc.pid === undefined) { - continue; + if (!childProc || childProc.killed) { + _processes.splice(i, 1); + continue; + } + + const killed = childProc.kill(signal); + if (killed) { + _processes.splice(i, 1); + continue; + } } - processesToKill.push( - new Promise<void>((resolve) => { - treeKill(childProc.pid!, signal, () => { - // Ignore all errors. - // This is due to a race condition with the `waitForMatch` logic. - // where promises are resolved on matches and not when the process terminates. - // Also in some cases in windows we get `The operation attempted is not supported`. - resolve(); - }); - }), - ); + // If still have processes, wait a bit before the next retry (e.g., 100ms) + if (_processes.length > 0 && attempts < maxRetries) { + await sleep(100); + } } - - await Promise.all(processesToKill); } export function exec(cmd: string, ...args: string[]) { diff --git a/tests/package.json b/tests/package.json index 17660ff2192e..9eb906b8cda5 100644 --- a/tests/package.json +++ b/tests/package.json @@ -2,7 +2,6 @@ "devDependencies": { "@types/tar-stream": "3.1.4", "@angular-devkit/schematics": "workspace:*", - "tar-stream": "3.1.7", - "tree-kill": "1.2.2" + "tar-stream": "3.1.7" } } From 414320d02a090b7b36720051569cba7563bf9ac6 Mon Sep 17 00:00:00 2001 From: Charles Lyding <19598772+clydin@users.noreply.github.com> Date: Fri, 13 Feb 2026 17:51:43 -0500 Subject: [PATCH 078/226] feat(@angular/build): support runtime Zone.js detection in Vitest unit test runner This commit improves how the Vitest unit test runner handles Zone.js and its testing polyfills. Previously, the inclusion of provideZoneChangeDetection and zone.js/testing was determined solely by a build-time check for zone.js in the polyfills array. Now, the runner supports three strategies for zone.js/testing inclusion: - none: If zone.js is not installed in the project. - static: If zone.js is explicitly included in the polyfills build option. - dynamic: If zone.js is installed but not explicitly in polyfills. This uses a runtime check and dynamic import to load testing support if Zone is present. Additionally, TestBed initialization now dynamically provides ZoneChangeDetection based on the runtime presence of Zone.js, better supporting zoneless applications and implicit Zone.js loading scenarios. --- .../unit-test/runners/vitest/build-options.ts | 44 ++++++++++-- .../tests/behavior/vitest-zone-init_spec.ts | 71 +++++++++++++++++++ 2 files changed, 108 insertions(+), 7 deletions(-) create mode 100644 packages/angular/build/src/builders/unit-test/tests/behavior/vitest-zone-init_spec.ts diff --git a/packages/angular/build/src/builders/unit-test/runners/vitest/build-options.ts b/packages/angular/build/src/builders/unit-test/runners/vitest/build-options.ts index 3aa7e2c8947e..052a104863eb 100644 --- a/packages/angular/build/src/builders/unit-test/runners/vitest/build-options.ts +++ b/packages/angular/build/src/builders/unit-test/runners/vitest/build-options.ts @@ -6,11 +6,12 @@ * found in the LICENSE file at https://angular.dev/license */ +import { createRequire } from 'node:module'; import path from 'node:path'; import { toPosixPath } from '../../../../utils/path'; import type { ApplicationBuilderInternalOptions } from '../../../application/options'; import { OutputHashing } from '../../../application/schema'; -import { NormalizedUnitTestBuilderOptions, injectTestingPolyfills } from '../../options'; +import { NormalizedUnitTestBuilderOptions } from '../../options'; import { findTests, getTestEntrypoints } from '../../test-discovery'; import { RunnerOptions } from '../api'; @@ -18,9 +19,8 @@ function createTestBedInitVirtualFile( providersFile: string | undefined, projectSourceRoot: string, teardown: boolean, - polyfills: string[] = [], + zoneTestingStrategy: 'none' | 'static' | 'dynamic', ): string { - const usesZoneJS = polyfills.includes('zone.js'); let providersImport = 'const providers = [];'; if (providersFile) { const relativePath = path.relative(projectSourceRoot, providersFile); @@ -31,12 +31,25 @@ function createTestBedInitVirtualFile( return ` // Initialize the Angular testing environment - import { NgModule${usesZoneJS ? ', provideZoneChangeDetection' : ''} } from '@angular/core'; + import { NgModule, provideZoneChangeDetection } from '@angular/core'; import { getTestBed, ɵgetCleanupHook as getCleanupHook } from '@angular/core/testing'; import { BrowserTestingModule, platformBrowserTesting } from '@angular/platform-browser/testing'; import { afterEach, beforeEach } from 'vitest'; ${providersImport} + ${ + zoneTestingStrategy === 'static' + ? `import 'zone.js/testing';` + : zoneTestingStrategy === 'dynamic' + ? ` + if (typeof Zone !== 'undefined') { + // 'zone.js/testing' is used to initialize the ZoneJS testing environment. + // It must be imported dynamically to avoid a static dependency on 'zone.js'. + await import('zone.js/testing'); + }` + : '' + } + // The beforeEach and afterEach hooks are registered outside the globalThis guard. // This ensures that the hooks are always applied, even in non-isolated browser environments. // Same as https://github.com/angular/angular/blob/05a03d3f975771bb59c7eefd37c01fa127ee2229/packages/core/testing/srcs/test_hooks.ts#L21-L29 @@ -52,7 +65,10 @@ function createTestBedInitVirtualFile( // The guard condition above ensures that the setup is only performed once. @NgModule({ - providers: [${usesZoneJS ? 'provideZoneChangeDetection(), ' : ''}...providers], + providers: [ + ...(typeof Zone !== 'undefined' ? [provideZoneChangeDetection()] : []), + ...providers, + ], }) class TestModule {} @@ -145,13 +161,27 @@ export async function getVitestBuildOptions( externalDependencies, }; - buildOptions.polyfills = injectTestingPolyfills(buildOptions.polyfills); + // Inject the zone.js testing polyfill if Zone.js is installed. + let zoneTestingStrategy: 'none' | 'static' | 'dynamic'; + if (buildOptions.polyfills?.includes('zone.js/testing')) { + zoneTestingStrategy = 'none'; + } else if (buildOptions.polyfills?.includes('zone.js')) { + zoneTestingStrategy = 'static'; + } else { + try { + const projectRequire = createRequire(path.join(projectSourceRoot, 'package.json')); + projectRequire.resolve('zone.js'); + zoneTestingStrategy = 'dynamic'; + } catch { + zoneTestingStrategy = 'none'; + } + } const testBedInitContents = createTestBedInitVirtualFile( providersFile, projectSourceRoot, !options.debug, - buildOptions.polyfills, + zoneTestingStrategy, ); const mockPatchContents = ` diff --git a/packages/angular/build/src/builders/unit-test/tests/behavior/vitest-zone-init_spec.ts b/packages/angular/build/src/builders/unit-test/tests/behavior/vitest-zone-init_spec.ts new file mode 100644 index 000000000000..812dba7fa70d --- /dev/null +++ b/packages/angular/build/src/builders/unit-test/tests/behavior/vitest-zone-init_spec.ts @@ -0,0 +1,71 @@ +import { execute } from '../../index'; +import { + BASE_OPTIONS, + describeBuilder, + UNIT_TEST_BUILDER_INFO, + setupApplicationTarget, +} from '../setup'; + +describeBuilder(execute, UNIT_TEST_BUILDER_INFO, (harness) => { + describe('Behavior: "Vitest Zone initialization"', () => { + // Zone.js does not current provide fakAsync support for Vitest + xit('should load Zone and Zone testing support by default', async () => { + setupApplicationTarget(harness); // Defaults include zone.js + + harness.useTarget('test', { + ...BASE_OPTIONS, + }); + + harness.writeFile( + 'src/app/app.component.spec.ts', + ` + import { describe, it, expect } from 'vitest'; + import { fakeAsync, tick } from '@angular/core/testing'; + + describe('Zone Test', () => { + it('should have Zone defined', () => { + expect((globalThis as any).Zone).toBeDefined(); + }); + + it('should support fakeAsync', fakeAsync(() => { + let val = false; + setTimeout(() => { val = true; }, 100); + tick(100); + expect(val).toBeTrue(); + })); + }); + `, + ); + + const { result } = await harness.executeOnce(); + expect(result?.success).toBeTrue(); + }); + + it('should NOT load Zone when zoneless (no zone.js in polyfills)', async () => { + // Setup application target WITHOUT zone.js in polyfills + setupApplicationTarget(harness, { + polyfills: [], + }); + + harness.useTarget('test', { + ...BASE_OPTIONS, + }); + + harness.writeFile( + 'src/app/app.component.spec.ts', + ` + import { describe, it, expect } from 'vitest'; + + describe('Zoneless Test', () => { + it('should NOT have Zone defined', () => { + expect((globalThis as any).Zone).toBeUndefined(); + }); + }); + `, + ); + + const { result } = await harness.executeOnce(); + expect(result?.success).toBe(true); + }); + }); +}); From 73b9e37576a2f5bb04eeb106aaec7408dd6fd8e8 Mon Sep 17 00:00:00 2001 From: Alan Agius <17563226+alan-agius4@users.noreply.github.com> Date: Mon, 2 Mar 2026 16:05:05 +0000 Subject: [PATCH 079/226] Revert "refactor: remove `tree-kill` dependency and refactor `killAllProcesses` to use native `childProc.kill` with retries." This reverts commit 597e6c33dc5577a5d8b9548e1ccb90256a357e01. --- pnpm-lock.yaml | 9 +++++++ tests/e2e/utils/BUILD.bazel | 1 + tests/e2e/utils/process.ts | 48 ++++++++++++++++--------------------- tests/package.json | 3 ++- 4 files changed, 32 insertions(+), 29 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 5dba7004dae2..eb487bd2cb6c 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -842,6 +842,9 @@ importers: tar-stream: specifier: 3.1.7 version: 3.1.7 + tree-kill: + specifier: 1.2.2 + version: 1.2.2 packages: @@ -7759,6 +7762,10 @@ packages: peerDependencies: tslib: '2' + tree-kill@1.2.2: + resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==} + hasBin: true + ts-api-utils@2.4.0: resolution: {integrity: sha512-3TaVTaAv2gTiMB35i3FiGJaRfwb3Pyn/j3m/bfAvGe8FB7CF6u+LMYqYlDh7reQf7UNvoTvdfAqHGmPGOSsPmA==} engines: {node: '>=18.12'} @@ -16405,6 +16412,8 @@ snapshots: dependencies: tslib: 2.8.1 + tree-kill@1.2.2: {} + ts-api-utils@2.4.0(typescript@5.9.3): dependencies: typescript: 5.9.3 diff --git a/tests/e2e/utils/BUILD.bazel b/tests/e2e/utils/BUILD.bazel index dbbda05702cd..d4493fb14492 100644 --- a/tests/e2e/utils/BUILD.bazel +++ b/tests/e2e/utils/BUILD.bazel @@ -20,5 +20,6 @@ ts_project( "//:node_modules/verdaccio-auth-memory", "//tests:node_modules/@types/tar-stream", "//tests:node_modules/tar-stream", + "//tests:node_modules/tree-kill", ], ) diff --git a/tests/e2e/utils/process.ts b/tests/e2e/utils/process.ts index 54bcf629a69e..91216843086a 100644 --- a/tests/e2e/utils/process.ts +++ b/tests/e2e/utils/process.ts @@ -1,7 +1,7 @@ import { spawn, SpawnOptions } from 'node:child_process'; import * as child_process from 'node:child_process'; import { getGlobalVariable, getGlobalVariablesEnv } from './env'; -import { setTimeout as sleep } from 'node:timers/promises'; +import treeKill from 'tree-kill'; import { delimiter, join, resolve } from 'node:path'; import { stripVTControlCharacters, styleText } from 'node:util'; @@ -255,37 +255,29 @@ export async function waitForAnyProcessOutputToMatch( return matchingProcess; } -/** - * Kills all tracked processes with a retry mechanism. - */ -export async function killAllProcesses(signal: NodeJS.Signals = 'SIGTERM'): Promise<void> { - let attempts = 0; - const maxRetries = 3; - - while (_processes.length > 0 && attempts < maxRetries) { - attempts++; - - // Iterate backwards so we can remove elements while looping if needed. - for (let i = _processes.length - 1; i >= 0; i--) { - const childProc = _processes[i]; +export async function killAllProcesses(signal = 'SIGTERM'): Promise<void> { + const processesToKill: Promise<void>[] = []; - if (!childProc || childProc.killed) { - _processes.splice(i, 1); - continue; - } - - const killed = childProc.kill(signal); - if (killed) { - _processes.splice(i, 1); - continue; - } + while (_processes.length) { + const childProc = _processes.pop(); + if (!childProc || childProc.pid === undefined) { + continue; } - // If still have processes, wait a bit before the next retry (e.g., 100ms) - if (_processes.length > 0 && attempts < maxRetries) { - await sleep(100); - } + processesToKill.push( + new Promise<void>((resolve) => { + treeKill(childProc.pid!, signal, () => { + // Ignore all errors. + // This is due to a race condition with the `waitForMatch` logic. + // where promises are resolved on matches and not when the process terminates. + // Also in some cases in windows we get `The operation attempted is not supported`. + resolve(); + }); + }), + ); } + + await Promise.all(processesToKill); } export function exec(cmd: string, ...args: string[]) { diff --git a/tests/package.json b/tests/package.json index 9eb906b8cda5..17660ff2192e 100644 --- a/tests/package.json +++ b/tests/package.json @@ -2,6 +2,7 @@ "devDependencies": { "@types/tar-stream": "3.1.4", "@angular-devkit/schematics": "workspace:*", - "tar-stream": "3.1.7" + "tar-stream": "3.1.7", + "tree-kill": "1.2.2" } } From b47078fadf82e9502d508263d7579014d0044166 Mon Sep 17 00:00:00 2001 From: Charles Lyding <19598772+clydin@users.noreply.github.com> Date: Mon, 2 Mar 2026 10:53:49 -0500 Subject: [PATCH 080/226] refactor(@ngtools/webpack): support optional baseUrl with tsconfig paths The Webpack plugin now ensures a `baseUrl` is set when `paths` are present, using the `pathsBasePath` as a fallback. This makes the `baseUrl` property optional in `tsconfig.json` files when `paths` are used. This commit also refactors several tests to remove their reliance on a pre-existing `baseUrl`. The tests now programmatically add `paths` to the `tsconfig.json` to avoid brittle string replacements. The test project's base `tsconfig.json` has also been updated to remove the now optional `baseUrl`. --- .../projects/hello-world-app/tsconfig.json | 1 - .../behavior/typescript-path-mapping_spec.ts | 2 +- .../allowed-common-js-dependencies_spec.ts | 18 +++---- .../karma/tests/options/code-coverage_spec.ts | 22 ++++---- .../browser/specs/tsconfig-paths_spec.ts | 53 ++++++++----------- .../allowed-common-js-dependencies_spec.ts | 18 +++---- .../karma/tests/options/code-coverage_spec.ts | 22 ++++---- packages/ngtools/webpack/src/ivy/plugin.ts | 1 + 8 files changed, 56 insertions(+), 81 deletions(-) diff --git a/modules/testing/builder/projects/hello-world-app/tsconfig.json b/modules/testing/builder/projects/hello-world-app/tsconfig.json index 8f8859a21d4f..4f9890cb8e7d 100644 --- a/modules/testing/builder/projects/hello-world-app/tsconfig.json +++ b/modules/testing/builder/projects/hello-world-app/tsconfig.json @@ -1,7 +1,6 @@ { "compileOnSave": false, "compilerOptions": { - "baseUrl": "./", "outDir": "./dist/out-tsc", "sourceMap": true, "declaration": false, diff --git a/packages/angular/build/src/builders/application/tests/behavior/typescript-path-mapping_spec.ts b/packages/angular/build/src/builders/application/tests/behavior/typescript-path-mapping_spec.ts index 41539df239f2..6e497f149566 100644 --- a/packages/angular/build/src/builders/application/tests/behavior/typescript-path-mapping_spec.ts +++ b/packages/angular/build/src/builders/application/tests/behavior/typescript-path-mapping_spec.ts @@ -81,7 +81,7 @@ describeBuilder(buildApplication, APPLICATION_BUILDER_INFO, (harness) => { await harness.modifyFile('tsconfig.json', (content) => { const tsconfig = JSON.parse(content); tsconfig.compilerOptions.paths = { - 'app-module': ['a.js'], + 'app-module': ['./a.js'], }; return JSON.stringify(tsconfig); diff --git a/packages/angular/build/src/builders/application/tests/options/allowed-common-js-dependencies_spec.ts b/packages/angular/build/src/builders/application/tests/options/allowed-common-js-dependencies_spec.ts index bcc361ccdbe1..7521b1a1a495 100644 --- a/packages/angular/build/src/builders/application/tests/options/allowed-common-js-dependencies_spec.ts +++ b/packages/angular/build/src/builders/application/tests/options/allowed-common-js-dependencies_spec.ts @@ -129,17 +129,13 @@ describeBuilder(buildApplication, APPLICATION_BUILDER_INFO, (harness) => { it('should not show warning in JIT for templateUrl and styleUrl when using paths', async () => { await harness.modifyFile('tsconfig.json', (content) => { - return content.replace( - /"baseUrl": ".\/",/, - ` - "baseUrl": "./", - "paths": { - "@app/*": [ - "src/app/*" - ] - }, - `, - ); + const tsconfig = JSON.parse(content); + tsconfig.compilerOptions ??= {}; + tsconfig.compilerOptions.paths = { + '@app/*': ['./src/app/*'], + }; + + return JSON.stringify(tsconfig, null, 2); }); await harness.modifyFile('src/app/app.module.ts', (content) => diff --git a/packages/angular/build/src/builders/karma/tests/options/code-coverage_spec.ts b/packages/angular/build/src/builders/karma/tests/options/code-coverage_spec.ts index a8849ba643ef..21dbfdfc073d 100644 --- a/packages/angular/build/src/builders/karma/tests/options/code-coverage_spec.ts +++ b/packages/angular/build/src/builders/karma/tests/options/code-coverage_spec.ts @@ -88,19 +88,15 @@ describeKarmaBuilder(execute, KARMA_BUILDER_INFO, (harness, setupTarget) => { } `, }); - await harness.modifyFile('tsconfig.json', (content) => - content.replace( - /"baseUrl": ".\/",/, - ` - "baseUrl": "./", - "paths": { - "my-lib": [ - "./dist/my-lib" - ] - }, - `, - ), - ); + await harness.modifyFile('tsconfig.json', (content) => { + const tsconfig = JSON.parse(content); + tsconfig.compilerOptions ??= {}; + tsconfig.compilerOptions.paths = { + 'my-lib': ['./dist/my-lib'], + }; + + return JSON.stringify(tsconfig, null, 2); + }); harness.useTarget('test', { ...BASE_OPTIONS, diff --git a/packages/angular_devkit/build_angular/src/builders/browser/specs/tsconfig-paths_spec.ts b/packages/angular_devkit/build_angular/src/builders/browser/specs/tsconfig-paths_spec.ts index 64be1270ef9a..c40337393a5e 100644 --- a/packages/angular_devkit/build_angular/src/builders/browser/specs/tsconfig-paths_spec.ts +++ b/packages/angular_devkit/build_angular/src/builders/browser/specs/tsconfig-paths_spec.ts @@ -7,6 +7,7 @@ */ import { Architect } from '@angular-devkit/architect'; +import { normalize, virtualFs } from '@angular-devkit/core'; import { browserBuild, createArchitect, host } from '../../../testing/test-utils'; describe('Browser Builder tsconfig paths', () => { @@ -21,18 +22,16 @@ describe('Browser Builder tsconfig paths', () => { it('should resolve basic tsconfig paths', async () => { host.replaceInFile('src/app/app.module.ts', './app.component', '@root/app/app.component'); - host.replaceInFile( - 'tsconfig.json', - /"baseUrl": ".\/",/, - ` - "baseUrl": "./", - "paths": { - "@root/*": [ - "./src/*" - ] - }, - `, - ); + + const tsconfigPath = normalize('tsconfig.json'); + const tsconfig = JSON.parse(virtualFs.fileBufferToString(host.scopedSync().read(tsconfigPath))); + tsconfig.compilerOptions ??= {}; + tsconfig.compilerOptions.paths = { + '@root/*': ['./src/*'], + }; + host + .scopedSync() + .write(tsconfigPath, virtualFs.stringToFileBuffer(JSON.stringify(tsconfig, null, 2))); await browserBuild(architect, host, target); }); @@ -43,25 +42,17 @@ describe('Browser Builder tsconfig paths', () => { 'src/app/shared/meaning.ts': 'export var meaning = 42;', 'src/app/shared/index.ts': `export * from './meaning'`, }); - host.replaceInFile( - 'tsconfig.json', - /"baseUrl": ".\/",/, - ` - "baseUrl": "./", - "paths": { - "@shared": [ - "src/app/shared" - ], - "@shared/*": [ - "src/app/shared/*" - ], - "*": [ - "*", - "src/app/shared/*" - ] - }, - `, - ); + const tsconfigPath = normalize('tsconfig.json'); + const tsconfig = JSON.parse(virtualFs.fileBufferToString(host.scopedSync().read(tsconfigPath))); + tsconfig.compilerOptions ??= {}; + tsconfig.compilerOptions.paths = { + '@shared': ['src/app/shared'], + '@shared/*': ['src/app/shared/*'], + '*': ['*', 'src/app/shared/*'], + }; + host + .scopedSync() + .write(tsconfigPath, virtualFs.stringToFileBuffer(JSON.stringify(tsconfig, null, 2))); host.appendToFile( 'src/app/app.component.ts', ` diff --git a/packages/angular_devkit/build_angular/src/builders/browser/tests/options/allowed-common-js-dependencies_spec.ts b/packages/angular_devkit/build_angular/src/builders/browser/tests/options/allowed-common-js-dependencies_spec.ts index d53349df5c48..5389a1457673 100644 --- a/packages/angular_devkit/build_angular/src/builders/browser/tests/options/allowed-common-js-dependencies_spec.ts +++ b/packages/angular_devkit/build_angular/src/builders/browser/tests/options/allowed-common-js-dependencies_spec.ts @@ -119,17 +119,13 @@ describeBuilder(buildWebpackBrowser, BROWSER_BUILDER_INFO, (harness) => { it('should not show warning in JIT for templateUrl and styleUrl when using paths', async () => { await harness.modifyFile('tsconfig.json', (content) => { - return content.replace( - /"baseUrl": ".\/",/, - ` - "baseUrl": "./", - "paths": { - "@app/*": [ - "src/app/*" - ] - }, - `, - ); + const tsconfig = JSON.parse(content); + tsconfig.compilerOptions ??= {}; + tsconfig.compilerOptions.paths = { + '@app/*': ['src/app/*'], + }; + + return JSON.stringify(tsconfig, null, 2); }); await harness.modifyFile('src/app/app.module.ts', (content) => diff --git a/packages/angular_devkit/build_angular/src/builders/karma/tests/options/code-coverage_spec.ts b/packages/angular_devkit/build_angular/src/builders/karma/tests/options/code-coverage_spec.ts index a8849ba643ef..21dbfdfc073d 100644 --- a/packages/angular_devkit/build_angular/src/builders/karma/tests/options/code-coverage_spec.ts +++ b/packages/angular_devkit/build_angular/src/builders/karma/tests/options/code-coverage_spec.ts @@ -88,19 +88,15 @@ describeKarmaBuilder(execute, KARMA_BUILDER_INFO, (harness, setupTarget) => { } `, }); - await harness.modifyFile('tsconfig.json', (content) => - content.replace( - /"baseUrl": ".\/",/, - ` - "baseUrl": "./", - "paths": { - "my-lib": [ - "./dist/my-lib" - ] - }, - `, - ), - ); + await harness.modifyFile('tsconfig.json', (content) => { + const tsconfig = JSON.parse(content); + tsconfig.compilerOptions ??= {}; + tsconfig.compilerOptions.paths = { + 'my-lib': ['./dist/my-lib'], + }; + + return JSON.stringify(tsconfig, null, 2); + }); harness.useTarget('test', { ...BASE_OPTIONS, diff --git a/packages/ngtools/webpack/src/ivy/plugin.ts b/packages/ngtools/webpack/src/ivy/plugin.ts index f46b1360f26a..ac52c4188c3e 100644 --- a/packages/ngtools/webpack/src/ivy/plugin.ts +++ b/packages/ngtools/webpack/src/ivy/plugin.ts @@ -410,6 +410,7 @@ export class AngularWebpackPlugin { this.pluginOptions.tsconfig, this.pluginOptions.compilerOptions, ); + compilerOptions.baseUrl ??= compilerOptions['pathsBasePath']; compilerOptions.composite = false; compilerOptions.noEmitOnError = false; compilerOptions.suppressOutputPathCheck = true; From 47dae1013ee31fb8ab19ef498c8fbcda3738ddcc Mon Sep 17 00:00:00 2001 From: Angular Robot <angular-robot@google.com> Date: Tue, 3 Mar 2026 05:26:03 +0000 Subject: [PATCH 081/226] build: lock file maintenance See associated pull request for more information. --- pnpm-lock.yaml | 242 ++++++++++++++++++++++++------------------------- 1 file changed, 121 insertions(+), 121 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index eb487bd2cb6c..1e282d02baae 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -135,7 +135,7 @@ importers: version: 4.17.24 '@types/node': specifier: ^22.12.0 - version: 22.19.12 + version: 22.19.13 '@types/npm-package-arg': specifier: ^6.1.0 version: 6.1.4 @@ -264,7 +264,7 @@ importers: version: 6.3.0(rollup@4.59.0)(typescript@5.9.3) rollup-plugin-sourcemaps2: specifier: 0.5.6 - version: 0.5.6(@types/node@22.19.12)(rollup@4.59.0) + version: 0.5.6(@types/node@22.19.13)(rollup@4.59.0) semver: specifier: 7.7.4 version: 7.7.4 @@ -2696,8 +2696,8 @@ packages: resolution: {integrity: sha512-gOBg5YHMfZy+TfHArfVogwgfBeQnKbbGo3pSUyK/gSI0AVu+pEiDVcKlQb0D8Mg1LNRZILZ6XG8I5dJ4KuAd9Q==} engines: {node: ^20.17.0 || >=22.9.0} - '@npmcli/run-script@10.0.3': - resolution: {integrity: sha512-ER2N6itRkzWbbtVmZ9WKaWxVlKlOeBFF1/7xx+KA5J1xKa4JjUwBdb6tDpk0v1qA+d+VDwHI9qmLcXSWcmi+Rw==} + '@npmcli/run-script@10.0.4': + resolution: {integrity: sha512-mGUWr1uMnf0le2TwfOZY4SFxZGXGfm4Jtay/nwAa2FLNAKXUoUwaGwBMNH36UHPtinWfTSJ3nqFQr0091CxVGg==} engines: {node: ^20.17.0 || >=22.9.0} '@octokit/auth-app@8.2.0': @@ -3463,8 +3463,8 @@ packages: '@types/node-fetch@2.6.13': resolution: {integrity: sha512-QGpRVpzSaUs30JBSGPjOg4Uveu384erbHBoT1zeONvyCfwQxIkUshLAOqN/k9EjGviPRmWTTe6aH2qySWKTVSw==} - '@types/node@22.19.12': - resolution: {integrity: sha512-0QEp0aPJYSyf6RrTjDB7HlKgNMTY+V2C7ESTaVt6G9gQ0rPLzTGz7OF2NXTLR5vcy7HJEtIUsyWLsfX0kTqJBA==} + '@types/node@22.19.13': + resolution: {integrity: sha512-akNQMv0wW5uyRpD2v2IEyRSZiR+BeGuoB6L310EgGObO44HSMNT8z1xzio28V8qOrgYaopIDNA18YgdXd+qTiw==} '@types/node@24.10.13': resolution: {integrity: sha512-oH72nZRfDv9lADUBSo104Aq7gPHpQZc4BTx38r9xf9pg5LfP6EzSyH2n7qFmmxRQXh7YlUXODcYsg6PuTDSxGg==} @@ -3977,8 +3977,8 @@ packages: resolution: {integrity: sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==} engines: {node: '>=4'} - ast-v8-to-istanbul@0.3.11: - resolution: {integrity: sha512-Qya9fkoofMjCBNVdWINMjB5KZvkYfaO9/anwkWnjxibpWUxo5iHl2sOdP7/uAqaRuUYuoo8rDwnbaaKVFxoUvw==} + ast-v8-to-istanbul@0.3.12: + resolution: {integrity: sha512-BRRC8VRZY2R4Z4lFIL35MwNXmwVqBityvOIwETtsCSwvjl0IdgFsy9NhdaA6j74nUdtJJlIypeRhpDam19Wq3g==} async-each-series@0.1.1: resolution: {integrity: sha512-p4jj6Fws4Iy2m0iCmI2am2ZNZCgbdgE+P8F/8csmn2vx7ixXrO2zGcuNsD46X5uZSVecmkEy/M06X2vG8KD6dQ==} @@ -4166,8 +4166,8 @@ packages: brace-expansion@2.0.2: resolution: {integrity: sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==} - brace-expansion@5.0.3: - resolution: {integrity: sha512-fy6KJm2RawA5RcHkLa1z/ScpBeA762UF9KmZQxwIbDtRJrgLzM10depAiEQ+CXYcoiqW1/m96OAAoke2nE9EeA==} + brace-expansion@5.0.4: + resolution: {integrity: sha512-h+DEnpVvxmfVefa4jFbCf5HdH5YMDXRsmKflpf1pILZWRFlTbJpxeU55nJl4Smt5HQaGzg1o6RHFPJaOqnmBDg==} engines: {node: 18 || 20 || >=22} braces@3.0.3: @@ -4256,8 +4256,8 @@ packages: resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} 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==} @@ -4317,8 +4317,8 @@ packages: resolution: {integrity: sha512-bXfOC4QcT1tKXGorxL3wbJm6XJPDqEnij2gQ2m7ESQuE+/z9YFIWnl/5RpTiKWbMq3EVKR4fRLJGn6DVfu0mpw==} engines: {node: '>=18.20'} - cli-truncate@5.1.1: - resolution: {integrity: sha512-SroPvNHxUnk+vIW/dOSfNqdy1sPEFkrTk6TUtqLCnBlo3N7TNYYkzzN7uSD6+jVjrdO4+p8nH7JzH6cIvUem6A==} + cli-truncate@5.2.0: + resolution: {integrity: sha512-xRwvIOMGrfOAnM1JYtqQImuaNtDEv9v6oIYAs4LIHwTiKee8uwvIi363igssOC0O5U04i4AlENs79LQLu9tEMw==} engines: {node: '>=20'} cli-width@4.1.0: @@ -4792,8 +4792,8 @@ packages: resolution: {integrity: sha512-2RZdgEbXmp5+dVbRm0P7HQUImZpICccJy7rN7Tv+SFa55pH+lxnuw6/K1ZxxBfHoYpSkHLAO92oa8O4SwFXA2A==} engines: {node: '>=10.2.0'} - enhanced-resolve@5.19.0: - resolution: {integrity: sha512-phv3E1Xl4tQOShqSte26C7Fl84EwUdZsyOuSSk9qtAGyyQs2s3jJzComh+Abf4g187lUUAvH+H26omrqia2aGg==} + enhanced-resolve@5.20.0: + resolution: {integrity: sha512-/ce7+jQ1PQ6rVXwe+jKEg5hW5ciicHwIQUagZkp6IufBoY3YDgdTTY1azVs0qoRgVmvsNB+rbjLJxDAeHHtwsQ==} engines: {node: '>=10.13.0'} ent@2.2.2: @@ -5320,6 +5320,7 @@ packages: git-raw-commits@5.0.0: resolution: {integrity: sha512-I2ZXrXeOc0KrCvC7swqtIFXFN+rbjnC7b2T943tvemIOVNl+XP8YnA9UVwqFhzzLClnSA60KR/qEjLpXzs73Qg==} engines: {node: '>=18'} + deprecated: This package is no longer maintained. For the JavaScript API, please use @conventional-changelog/git-client instead. hasBin: true glob-parent@5.1.2: @@ -5729,8 +5730,8 @@ packages: resolution: {integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==} engines: {node: '>= 0.4'} - is-network-error@1.3.0: - resolution: {integrity: sha512-6oIwpsgRfnDiyEDLMay/GqCl3HoAtH5+RUKW29gYkL0QA+ipzpDLA16yQs7/RHCSu+BwgbJaOUqa4A99qNVQVw==} + is-network-error@1.3.1: + resolution: {integrity: sha512-6QCxa49rQbmUWLfk0nuGqzql9U8uaV2H6279bRErPBHe/109hCzsLUBUHfbEtvLIHBd6hyXbgedBSHevm43Edw==} engines: {node: '>=16'} is-node-process@1.2.0: @@ -5979,8 +5980,8 @@ packages: json-stringify-safe@5.0.1: resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==} - json-with-bigint@3.5.3: - resolution: {integrity: sha512-QObKu6nxy7NsxqR0VK4rkXnsNr5L9ElJaGEg+ucJ6J7/suoKZ0n+p76cu9aCqowytxEbwYNzvrMerfMkXneF5A==} + json-with-bigint@3.5.7: + resolution: {integrity: sha512-7ei3MdAI5+fJPVnKlW77TKNKwQ5ppSzWvhPuSuINT/GYW9ZOC1eRKOuhV9yHG5aEsUPj9BBx5JIekkmoLHxZOw==} json5@1.0.2: resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} @@ -6162,8 +6163,8 @@ packages: resolution: {integrity: sha512-ja1E3yCr9i/0hmBVaM0bfwDjnGy8I/s6PP4DFp+yP+a+mrHO4Rm7DtmnqROTUkHIkqffC84YY7AeqX6oFk0WFg==} engines: {node: '>=18'} - log-update@7.1.0: - resolution: {integrity: sha512-y9pi/ZOQQVvTgfRDEHV1Cj4zQUkJZPipEUNOxhn1R6KgmdMs7LKvXWCd9eMVPGJgvYzFLCenecWr0Ps8ChVv2A==} + log-update@7.2.0: + resolution: {integrity: sha512-iLs7dGSyjZiUgvrUvuD3FndAxVJk+TywBkkkwUSm9HdYoskJalWg5qVsEiXeufPvRVPbCUmNQewg798rx+sPXg==} engines: {node: '>=20'} log4js@6.9.1: @@ -6330,8 +6331,8 @@ packages: resolution: {integrity: sha512-sBz8G/YjVniEz6lKPNpKxXwazJe4c19fEfV2GDMX6AjFz+MX9uDWIZW8XreVhkFW3fkIdTv/gxWr/Kks5FFAVw==} engines: {node: '>=10'} - minimatch@9.0.8: - resolution: {integrity: sha512-reYkDYtj/b19TeqbNZCV4q9t+Yxylf/rYBsLb42SXJatTv4/ylq5lEiAmhA/IToxO7NI2UzNMghHoHuaqDkAjw==} + minimatch@9.0.9: + resolution: {integrity: sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==} engines: {node: '>=16 || 14 >=14.17'} minimist@1.2.8: @@ -6963,8 +6964,8 @@ packages: pump@2.0.1: resolution: {integrity: sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==} - pump@3.0.3: - resolution: {integrity: sha512-todwxLMY7/heScKmntwQG8CXVkWUOdYxIvY2s0VWAAMh/nd8SoYiRaKjlr7+iCs984f2P8zvrfWcDDYVb73NfA==} + pump@3.0.4: + resolution: {integrity: sha512-VS7sjc6KR7e1ukRFhQSY5LM2uBWAUPiOPa/A3mkKmiMwSmRFUITt0xuj+/lesgnCv+dPIEYlkzrcyXgquIHMcA==} pumpify@1.5.1: resolution: {integrity: sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==} @@ -7263,8 +7264,8 @@ packages: engines: {node: '>=14.0.0'} hasBin: true - 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'} saxes@6.0.0: @@ -7392,9 +7393,9 @@ packages: resolution: {integrity: sha512-/fUgUhYghuLzVT/gaJoeVehLCgZiUxPCPMcyVNY0lIf/cTCz58K/WTI7PefDarXxp9nUKpEwg1yyz3eSBMTtgA==} engines: {node: ^20.17.0 || >=22.9.0} - slice-ansi@7.1.2: - resolution: {integrity: sha512-iOBWFgUX7caIZiuutICxVgX1SdxwAVFFKwt1EvMYYec/NWO5meOJ6K5uQxhrYBdQJne4KxiqZc+KptFOWFSI9w==} - engines: {node: '>=18'} + slice-ansi@8.0.0: + resolution: {integrity: sha512-stxByr12oeeOyY2BlviTNQlYV5xOj47GirPr4yA1hE9JCtxfQN0+tVbkxwCtYDQWhEKWFHsEK48ORg5jrouCAg==} + engines: {node: '>=20'} smart-buffer@4.2.0: resolution: {integrity: sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==} @@ -7593,8 +7594,8 @@ packages: resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} engines: {node: '>=8'} - strip-ansi@7.1.2: - resolution: {integrity: sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==} + strip-ansi@7.2.0: + resolution: {integrity: sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==} engines: {node: '>=12'} strip-bom@3.0.0: @@ -7841,8 +7842,8 @@ packages: typed-graphqlify@3.1.6: resolution: {integrity: sha512-Snlg1ZrokbkQuemOb4xjWWCJrNcOMeb2Ii0/BwMfwLCcJVNjygyqhrFkrYNvi4gDrwWFrGE0TvxxM+Slym2JMg==} - typed-query-selector@2.12.0: - resolution: {integrity: sha512-SbklCd1F0EiZOyPiW192rrHZzZ5sBijB6xM+cpmrwDqObvdtunOHHIk9fCGsoK5JVIYXoyEp4iEdE3upFH3PAg==} + typed-query-selector@2.12.1: + resolution: {integrity: sha512-uzR+FzI8qrUEIu96oaeBJmd9E7CFEiQ3goA5qCVgc4s5llSubcfGHq9yUstZx/k4s9dXHVKsE35YWoFyvEqEHA==} typescript@5.9.3: resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==} @@ -9935,7 +9936,7 @@ snapshots: '@grpc/grpc-js@1.9.15': dependencies: '@grpc/proto-loader': 0.7.15 - '@types/node': 22.19.12 + '@types/node': 22.19.13 '@grpc/proto-loader@0.7.15': dependencies: @@ -10092,7 +10093,7 @@ snapshots: dependencies: string-width: 5.1.2 string-width-cjs: string-width@4.2.3 - strip-ansi: 7.1.2 + strip-ansi: 7.2.0 strip-ansi-cjs: strip-ansi@6.0.1 wrap-ansi: 8.1.0 wrap-ansi-cjs: wrap-ansi@7.0.0 @@ -10479,14 +10480,13 @@ snapshots: '@npmcli/redact@4.0.0': {} - '@npmcli/run-script@10.0.3': + '@npmcli/run-script@10.0.4': dependencies: '@npmcli/node-gyp': 5.0.0 '@npmcli/package-json': 7.0.5 '@npmcli/promise-spawn': 9.0.1 node-gyp: 12.2.0 proc-log: 6.1.0 - which: 6.0.1 transitivePeerDependencies: - supports-color @@ -10587,7 +10587,7 @@ snapshots: '@octokit/request-error': 7.1.0 '@octokit/types': 16.0.0 fast-content-type-parse: 3.0.0 - json-with-bigint: 3.5.3 + json-with-bigint: 3.5.7 universal-user-agent: 7.0.3 '@octokit/rest@22.0.1': @@ -11103,16 +11103,16 @@ snapshots: '@types/body-parser@1.19.6': dependencies: '@types/connect': 3.4.38 - '@types/node': 22.19.12 + '@types/node': 22.19.13 '@types/bonjour@3.5.13': dependencies: - '@types/node': 22.19.12 + '@types/node': 22.19.13 '@types/browser-sync@2.29.1': dependencies: '@types/micromatch': 2.3.35 - '@types/node': 22.19.12 + '@types/node': 22.19.13 '@types/serve-static': 2.2.0 chokidar: 3.6.0 @@ -11123,26 +11123,26 @@ snapshots: '@types/cli-progress@3.11.6': dependencies: - '@types/node': 22.19.12 + '@types/node': 22.19.13 '@types/connect-history-api-fallback@1.5.4': dependencies: '@types/express-serve-static-core': 4.19.8 - '@types/node': 22.19.12 + '@types/node': 22.19.13 '@types/connect@3.4.38': dependencies: - '@types/node': 22.19.12 + '@types/node': 22.19.13 '@types/cors@2.8.19': dependencies: - '@types/node': 22.19.12 + '@types/node': 22.19.13 '@types/deep-eql@4.0.2': {} '@types/duplexify@3.6.5': dependencies: - '@types/node': 22.19.12 + '@types/node': 22.19.13 '@types/ejs@3.1.5': {} @@ -11164,14 +11164,14 @@ snapshots: '@types/express-serve-static-core@4.19.8': dependencies: - '@types/node': 22.19.12 + '@types/node': 22.19.13 '@types/qs': 6.14.0 '@types/range-parser': 1.2.7 '@types/send': 1.2.1 '@types/express-serve-static-core@5.1.1': dependencies: - '@types/node': 22.19.12 + '@types/node': 22.19.13 '@types/qs': 6.14.0 '@types/range-parser': 1.2.7 '@types/send': 1.2.1 @@ -11193,17 +11193,17 @@ snapshots: '@types/git-raw-commits@5.0.1': dependencies: - '@types/node': 22.19.12 + '@types/node': 22.19.13 '@types/graceful-fs@4.1.9': dependencies: - '@types/node': 22.19.12 + '@types/node': 22.19.13 '@types/http-errors@2.0.5': {} '@types/http-proxy@1.17.17': dependencies: - '@types/node': 22.19.12 + '@types/node': 22.19.13 '@types/ini@4.1.1': {} @@ -11219,7 +11219,7 @@ snapshots: '@types/karma@6.3.9': dependencies: - '@types/node': 22.19.12 + '@types/node': 22.19.13 log4js: 6.9.1 transitivePeerDependencies: - supports-color @@ -11228,7 +11228,7 @@ snapshots: '@types/loader-utils@3.0.0(esbuild@0.27.3)': dependencies: - '@types/node': 22.19.12 + '@types/node': 22.19.13 webpack: 5.105.2(esbuild@0.27.3) transitivePeerDependencies: - '@swc/core' @@ -11246,10 +11246,10 @@ snapshots: '@types/node-fetch@2.6.13': dependencies: - '@types/node': 22.19.12 + '@types/node': 22.19.13 form-data: 4.0.5 - '@types/node@22.19.12': + '@types/node@22.19.13': dependencies: undici-types: 7.22.0 @@ -11261,7 +11261,7 @@ snapshots: '@types/npm-registry-fetch@8.0.9': dependencies: - '@types/node': 22.19.12 + '@types/node': 22.19.13 '@types/node-fetch': 2.6.13 '@types/npm-package-arg': 6.1.4 '@types/npmlog': 7.0.0 @@ -11269,11 +11269,11 @@ snapshots: '@types/npmlog@7.0.0': dependencies: - '@types/node': 22.19.12 + '@types/node': 22.19.13 '@types/pacote@11.1.8': dependencies: - '@types/node': 22.19.12 + '@types/node': 22.19.13 '@types/npm-registry-fetch': 8.0.9 '@types/npmlog': 7.0.0 '@types/ssri': 7.1.5 @@ -11284,12 +11284,12 @@ snapshots: '@types/progress@2.0.7': dependencies: - '@types/node': 22.19.12 + '@types/node': 22.19.13 '@types/pumpify@1.4.5': dependencies: '@types/duplexify': 3.6.5 - '@types/node': 22.19.12 + '@types/node': 22.19.13 '@types/qs@6.14.0': {} @@ -11299,7 +11299,7 @@ snapshots: '@types/responselike@1.0.0': dependencies: - '@types/node': 22.19.12 + '@types/node': 22.19.13 '@types/retry@0.12.0': {} @@ -11310,11 +11310,11 @@ snapshots: '@types/send@0.17.6': dependencies: '@types/mime': 1.3.5 - '@types/node': 22.19.12 + '@types/node': 22.19.13 '@types/send@1.2.1': dependencies: - '@types/node': 22.19.12 + '@types/node': 22.19.13 '@types/serve-index@1.9.4': dependencies: @@ -11323,38 +11323,38 @@ snapshots: '@types/serve-static@1.15.10': dependencies: '@types/http-errors': 2.0.5 - '@types/node': 22.19.12 + '@types/node': 22.19.13 '@types/send': 0.17.6 '@types/serve-static@2.2.0': dependencies: '@types/http-errors': 2.0.5 - '@types/node': 22.19.12 + '@types/node': 22.19.13 '@types/sockjs@0.3.36': dependencies: - '@types/node': 22.19.12 + '@types/node': 22.19.13 '@types/ssri@7.1.5': dependencies: - '@types/node': 22.19.12 + '@types/node': 22.19.13 '@types/stack-trace@0.0.33': {} '@types/tar-stream@3.1.4': dependencies: - '@types/node': 22.19.12 + '@types/node': 22.19.13 '@types/watchpack@2.4.5': dependencies: '@types/graceful-fs': 4.1.9 - '@types/node': 22.19.12 + '@types/node': 22.19.13 '@types/which@3.0.4': {} '@types/ws@8.18.1': dependencies: - '@types/node': 22.19.12 + '@types/node': 22.19.13 '@types/yargs-parser@21.0.3': {} @@ -11366,7 +11366,7 @@ snapshots: '@types/yauzl@2.10.3': dependencies: - '@types/node': 22.19.12 + '@types/node': 22.19.13 optional: true '@typescript-eslint/eslint-plugin@8.56.1(@typescript-eslint/parser@8.56.1(eslint@10.0.2(jiti@2.6.1))(typescript@5.9.3))(eslint@10.0.2(jiti@2.6.1))(typescript@5.9.3)': @@ -11625,7 +11625,7 @@ snapshots: dependencies: '@bcoe/v8-coverage': 1.0.2 '@vitest/utils': 4.0.18 - ast-v8-to-istanbul: 0.3.11 + ast-v8-to-istanbul: 0.3.12 istanbul-lib-coverage: 3.2.2 istanbul-lib-report: 3.0.1 istanbul-reports: 3.2.0 @@ -11956,7 +11956,7 @@ snapshots: dependencies: tslib: 2.8.1 - ast-v8-to-istanbul@0.3.11: + ast-v8-to-istanbul@0.3.12: dependencies: '@jridgewell/trace-mapping': 0.3.31 estree-walker: 3.0.3 @@ -11979,7 +11979,7 @@ snapshots: autoprefixer@10.4.24(postcss@8.5.6): dependencies: browserslist: 4.28.1 - caniuse-lite: 1.0.30001774 + caniuse-lite: 1.0.30001775 fraction.js: 5.3.4 picocolors: 1.1.1 postcss: 8.5.6 @@ -12164,7 +12164,7 @@ snapshots: dependencies: balanced-match: 1.0.2 - brace-expansion@5.0.3: + brace-expansion@5.0.4: dependencies: balanced-match: 4.0.4 @@ -12237,7 +12237,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) @@ -12312,7 +12312,7 @@ snapshots: callsites@3.1.0: {} - caniuse-lite@1.0.30001774: {} + caniuse-lite@1.0.30001775: {} caseless@0.12.0: {} @@ -12375,9 +12375,9 @@ snapshots: cli-spinners@3.4.0: {} - cli-truncate@5.1.1: + cli-truncate@5.2.0: dependencies: - slice-ansi: 7.1.2 + slice-ansi: 8.0.0 string-width: 8.2.0 cli-width@4.1.0: {} @@ -12401,7 +12401,7 @@ snapshots: cliui@9.0.1: dependencies: string-width: 7.2.0 - strip-ansi: 7.1.2 + strip-ansi: 7.2.0 wrap-ansi: 9.0.2 clone-deep@4.0.1: @@ -12834,7 +12834,7 @@ snapshots: engine.io@6.6.5(bufferutil@4.1.0)(utf-8-validate@6.0.6): dependencies: '@types/cors': 2.8.19 - '@types/node': 22.19.12 + '@types/node': 22.19.13 accepts: 1.3.8 base64id: 2.0.0 cookie: 0.7.2 @@ -12847,7 +12847,7 @@ snapshots: - supports-color - utf-8-validate - enhanced-resolve@5.19.0: + enhanced-resolve@5.20.0: dependencies: graceful-fs: 4.2.11 tapable: 2.3.0 @@ -13261,7 +13261,7 @@ snapshots: extract-zip@2.0.1: dependencies: - debug: 4.3.4 + debug: 4.4.3(supports-color@10.2.2) get-stream: 5.2.0 yauzl: 2.10.0 optionalDependencies: @@ -13560,7 +13560,7 @@ snapshots: get-stream@5.2.0: dependencies: - pump: 3.0.3 + pump: 3.0.4 get-stream@6.0.1: {} @@ -13612,7 +13612,7 @@ snapshots: dependencies: foreground-child: 3.3.1 jackspeak: 3.4.3 - minimatch: 9.0.8 + minimatch: 9.0.9 minipass: 7.1.3 package-json-from-dist: 1.0.1 path-scurry: 1.11.1 @@ -14039,7 +14039,7 @@ snapshots: is-negative-zero@2.0.3: {} - is-network-error@1.3.0: {} + is-network-error@1.3.1: {} is-node-process@1.2.0: {} @@ -14217,7 +14217,7 @@ snapshots: jest-worker@27.5.1: dependencies: - '@types/node': 22.19.12 + '@types/node': 22.19.13 merge-stream: 2.0.0 supports-color: 8.1.1 @@ -14288,7 +14288,7 @@ snapshots: json-stringify-safe@5.0.1: {} - json-with-bigint@3.5.3: {} + json-with-bigint@3.5.7: {} json5@1.0.2: dependencies: @@ -14449,10 +14449,10 @@ snapshots: listr2@10.1.1: dependencies: - cli-truncate: 5.1.1 + cli-truncate: 5.2.0 colorette: 2.0.20 eventemitter3: 5.0.4 - log-update: 7.1.0 + log-update: 7.2.0 rfdc: 1.4.1 wrap-ansi: 10.0.0 @@ -14523,13 +14523,13 @@ snapshots: is-unicode-supported: 2.1.0 yoctocolors: 2.1.2 - log-update@7.1.0: + log-update@7.2.0: dependencies: ansi-escapes: 7.3.0 cli-cursor: 5.0.0 - slice-ansi: 7.1.2 - strip-ansi: 7.1.2 - wrap-ansi: 9.0.2 + slice-ansi: 8.0.0 + strip-ansi: 7.2.0 + wrap-ansi: 10.0.0 log4js@6.9.1: dependencies: @@ -14675,11 +14675,11 @@ snapshots: minimatch@10.2.3: dependencies: - brace-expansion: 5.0.3 + brace-expansion: 5.0.4 minimatch@10.2.4: dependencies: - brace-expansion: 5.0.3 + brace-expansion: 5.0.4 minimatch@3.1.5: dependencies: @@ -14693,9 +14693,9 @@ snapshots: dependencies: brace-expansion: 2.0.2 - minimatch@9.0.8: + minimatch@9.0.9: dependencies: - brace-expansion: 5.0.3 + brace-expansion: 2.0.2 minimist@1.2.8: {} @@ -14788,7 +14788,7 @@ snapshots: needle@3.3.1: dependencies: iconv-lite: 0.6.3 - sax: 1.4.4 + sax: 1.5.0 optional: true negotiator@0.6.3: {} @@ -15081,7 +15081,7 @@ snapshots: p-retry@6.2.1: dependencies: '@types/retry': 0.12.2 - is-network-error: 1.3.0 + is-network-error: 1.3.1 retry: 0.13.1 p-timeout@3.2.0: @@ -15115,7 +15115,7 @@ snapshots: '@npmcli/installed-package-contents': 4.0.0 '@npmcli/package-json': 7.0.5 '@npmcli/promise-spawn': 9.0.1 - '@npmcli/run-script': 10.0.3 + '@npmcli/run-script': 10.0.4 cacache: 20.0.3 fs-minipass: 3.0.3 minipass: 7.1.3 @@ -15355,7 +15355,7 @@ snapshots: '@protobufjs/path': 1.1.2 '@protobufjs/pool': 1.1.0 '@protobufjs/utf8': 1.1.0 - '@types/node': 22.19.12 + '@types/node': 22.19.13 long: 5.3.2 proxy-addr@2.0.7: @@ -15386,7 +15386,7 @@ snapshots: end-of-stream: 1.4.5 once: 1.4.0 - pump@3.0.3: + pump@3.0.4: dependencies: end-of-stream: 1.4.5 once: 1.4.0 @@ -15407,7 +15407,7 @@ snapshots: chromium-bidi: 14.0.0(devtools-protocol@0.0.1566079) debug: 4.4.3(supports-color@10.2.2) devtools-protocol: 0.0.1566079 - typed-query-selector: 2.12.0 + typed-query-selector: 2.12.1 webdriver-bidi-protocol: 0.4.1 ws: 8.19.0(bufferutil@4.1.0)(utf-8-validate@6.0.6) transitivePeerDependencies: @@ -15425,7 +15425,7 @@ snapshots: cosmiconfig: 9.0.0(typescript@5.9.3) devtools-protocol: 0.0.1566079 puppeteer-core: 24.37.5(bufferutil@4.1.0)(utf-8-validate@6.0.6) - typed-query-selector: 2.12.0 + typed-query-selector: 2.12.1 transitivePeerDependencies: - bare-abort-controller - bare-buffer @@ -15682,12 +15682,12 @@ snapshots: optionalDependencies: '@babel/code-frame': 7.29.0 - rollup-plugin-sourcemaps2@0.5.6(@types/node@22.19.12)(rollup@4.59.0): + rollup-plugin-sourcemaps2@0.5.6(@types/node@22.19.13)(rollup@4.59.0): dependencies: '@rollup/pluginutils': 5.3.0(rollup@4.59.0) rollup: 4.59.0 optionalDependencies: - '@types/node': 22.19.12 + '@types/node': 22.19.13 rollup@4.59.0: dependencies: @@ -15784,7 +15784,7 @@ snapshots: optionalDependencies: '@parcel/watcher': 2.5.6 - sax@1.4.4: + sax@1.5.0: optional: true saxes@6.0.0: @@ -15967,7 +15967,7 @@ snapshots: transitivePeerDependencies: - supports-color - slice-ansi@7.1.2: + slice-ansi@8.0.0: dependencies: ansi-styles: 6.2.3 is-fullwidth-code-point: 5.1.0 @@ -16194,18 +16194,18 @@ snapshots: dependencies: eastasianwidth: 0.2.0 emoji-regex: 9.2.2 - strip-ansi: 7.1.2 + strip-ansi: 7.2.0 string-width@7.2.0: dependencies: emoji-regex: 10.6.0 get-east-asian-width: 1.5.0 - strip-ansi: 7.1.2 + strip-ansi: 7.2.0 string-width@8.2.0: dependencies: get-east-asian-width: 1.5.0 - strip-ansi: 7.1.2 + strip-ansi: 7.2.0 string.prototype.trim@1.2.10: dependencies: @@ -16242,7 +16242,7 @@ snapshots: dependencies: ansi-regex: 5.0.1 - strip-ansi@7.1.2: + strip-ansi@7.2.0: dependencies: ansi-regex: 6.2.2 @@ -16270,7 +16270,7 @@ snapshots: tar-fs@3.1.1: dependencies: - pump: 3.0.3 + pump: 3.0.4 tar-stream: 3.1.7 optionalDependencies: bare-fs: 4.5.5 @@ -16510,7 +16510,7 @@ snapshots: typed-graphqlify@3.1.6: {} - typed-query-selector@2.12.0: {} + typed-query-selector@2.12.1: {} typescript@5.9.3: {} @@ -16845,7 +16845,7 @@ snapshots: acorn-import-phases: 1.0.4(acorn@8.16.0) browserslist: 4.28.1 chrome-trace-event: 1.0.4 - enhanced-resolve: 5.19.0 + enhanced-resolve: 5.20.0 es-module-lexer: 2.0.0 eslint-scope: 5.1.1 events: 3.3.0 @@ -16956,7 +16956,7 @@ snapshots: dependencies: ansi-styles: 6.2.3 string-width: 8.2.0 - strip-ansi: 7.1.2 + strip-ansi: 7.2.0 wrap-ansi@7.0.0: dependencies: @@ -16968,13 +16968,13 @@ snapshots: dependencies: ansi-styles: 6.2.3 string-width: 5.1.2 - strip-ansi: 7.1.2 + strip-ansi: 7.2.0 wrap-ansi@9.0.2: dependencies: ansi-styles: 6.2.3 string-width: 7.2.0 - strip-ansi: 7.1.2 + strip-ansi: 7.2.0 wrappy@1.0.2: {} From 0f41585a7c2372e31c4e68e0c7442692b75a3dae Mon Sep 17 00:00:00 2001 From: Alan Agius <17563226+alan-agius4@users.noreply.github.com> Date: Tue, 3 Mar 2026 13:40:14 +0000 Subject: [PATCH 082/226] fix(@angular/ssr): introduce DI token to signal route discovery process A new DI token, `IS_DISCOVERING_ROUTES`, is introduced to provide a clear signal for when the application is operating in route discovery mode. This token is provided with the value `true` within the route extraction providers. Other services and components can inject this token to conditionally alter their behavior, for instance, to disable functionality that is not required or could interfere with the route discovery process. Closes #32474 --- goldens/public-api/angular/ssr/index.api.md | 4 ++++ packages/angular/ssr/public_api.ts | 2 ++ packages/angular/ssr/src/routes/ng-routes.ts | 22 +++++++++++++++++ .../angular/ssr/test/routes/ng-routes_spec.ts | 24 ++++++++++++++++++- 4 files changed, 51 insertions(+), 1 deletion(-) diff --git a/goldens/public-api/angular/ssr/index.api.md b/goldens/public-api/angular/ssr/index.api.md index e44a7099b521..e5d85138b72f 100644 --- a/goldens/public-api/angular/ssr/index.api.md +++ b/goldens/public-api/angular/ssr/index.api.md @@ -6,6 +6,7 @@ import { DefaultExport } from '@angular/router'; import { EnvironmentProviders } from '@angular/core'; +import { InjectionToken } from '@angular/core'; import { Provider } from '@angular/core'; import { Type } from '@angular/core'; @@ -26,6 +27,9 @@ export interface AngularAppEngineOptions { // @public export function createRequestHandler(handler: RequestHandlerFunction): RequestHandlerFunction; +// @public +export const IS_DISCOVERING_ROUTES: InjectionToken<boolean>; + // @public export enum PrerenderFallback { Client = 1, diff --git a/packages/angular/ssr/public_api.ts b/packages/angular/ssr/public_api.ts index e566d8414f2f..eb05be266588 100644 --- a/packages/angular/ssr/public_api.ts +++ b/packages/angular/ssr/public_api.ts @@ -24,3 +24,5 @@ export { type ServerRouteServer, type ServerRouteCommon, } from './src/routes/route-config'; + +export { IS_DISCOVERING_ROUTES } from './src/routes/ng-routes'; diff --git a/packages/angular/ssr/src/routes/ng-routes.ts b/packages/angular/ssr/src/routes/ng-routes.ts index b60e704371a4..438e8450d331 100644 --- a/packages/angular/ssr/src/routes/ng-routes.ts +++ b/packages/angular/ssr/src/routes/ng-routes.ts @@ -11,6 +11,7 @@ import { ApplicationRef, Compiler, EnvironmentInjector, + InjectionToken, Injector, createEnvironmentInjector, runInInjectionContext, @@ -23,6 +24,7 @@ import { Router, ɵloadChildren as loadChildrenHelper, } from '@angular/router'; + import { ServerAssets } from '../assets'; import { Console } from '../console'; import { AngularAppManifest, getAngularAppManifest } from '../manifest'; @@ -39,6 +41,22 @@ import { } from './route-config'; import { RouteTree, RouteTreeNodeMetadata } from './route-tree'; +/** + * A DI token that indicates whether the application is in the process of discovering routes. + * + * This token is provided with the value `true` when route discovery is active, allowing other + * parts of the application to conditionally execute logic. For example, it can be used to + * disable features or behaviors that are not necessary or might interfere with the route + * discovery process. + */ +export const IS_DISCOVERING_ROUTES = new InjectionToken<boolean>( + typeof ngDevMode === 'undefined' || ngDevMode ? 'IS_DISCOVERING_ROUTES' : '', + { + providedIn: 'platform', + factory: () => false, + }, +); + interface Route extends AngularRoute { ɵentryName?: string; } @@ -623,6 +641,10 @@ export async function getRoutesFromAngularRouterConfig( provide: ɵENABLE_ROOT_COMPONENT_BOOTSTRAP, useValue: false, }, + { + provide: IS_DISCOVERING_ROUTES, + useValue: true, + }, ]); try { diff --git a/packages/angular/ssr/test/routes/ng-routes_spec.ts b/packages/angular/ssr/test/routes/ng-routes_spec.ts index 324abe8c4d29..1532eb337faa 100644 --- a/packages/angular/ssr/test/routes/ng-routes_spec.ts +++ b/packages/angular/ssr/test/routes/ng-routes_spec.ts @@ -18,7 +18,7 @@ import { provideRouter, withEnabledBlockingInitialNavigation, } from '@angular/router'; -import { extractRoutesAndCreateRouteTree } from '../../src/routes/ng-routes'; +import { IS_DISCOVERING_ROUTES, extractRoutesAndCreateRouteTree } from '../../src/routes/ng-routes'; import { PrerenderFallback, RenderMode } from '../../src/routes/route-config'; import { setAngularAppTestingManifest } from '../testing-utils'; @@ -790,4 +790,26 @@ describe('extractRoutesAndCreateRouteTree', () => { { route: '/home', renderMode: RenderMode.Server }, ]); }); + + it('should provide `IS_DISCOVERING_ROUTES` as `true` during route discovery', async () => { + let isDiscoveringRoutes: boolean | undefined; + + setAngularAppTestingManifest( + [ + { + path: 'lazy', + loadChildren: () => { + isDiscoveringRoutes = inject(IS_DISCOVERING_ROUTES); + + return []; + }, + }, + ], + [{ path: '**', renderMode: RenderMode.Server }], + ); + + await extractRoutesAndCreateRouteTree({ url }); + + expect(isDiscoveringRoutes).toBeTrue(); + }); }); From 73186bad93a36682c5f2046cee7d74a604cf04bd Mon Sep 17 00:00:00 2001 From: Alan Agius <17563226+alan-agius4@users.noreply.github.com> Date: Tue, 3 Mar 2026 12:43:10 +0000 Subject: [PATCH 083/226] refactor: remove `tree-kill` dependency and refactor `killAllProcesses` to use native `childProc.kill`. Remove last `tree-kill` package usage. --- pnpm-lock.yaml | 9 -------- tests/e2e/utils/BUILD.bazel | 1 - tests/e2e/utils/process.ts | 45 +++++++++++++++++++++++++------------ tests/package.json | 3 +-- 4 files changed, 32 insertions(+), 26 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 1e282d02baae..c3cd5db30930 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -842,9 +842,6 @@ importers: tar-stream: specifier: 3.1.7 version: 3.1.7 - tree-kill: - specifier: 1.2.2 - version: 1.2.2 packages: @@ -7763,10 +7760,6 @@ packages: peerDependencies: tslib: '2' - tree-kill@1.2.2: - resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==} - hasBin: true - ts-api-utils@2.4.0: resolution: {integrity: sha512-3TaVTaAv2gTiMB35i3FiGJaRfwb3Pyn/j3m/bfAvGe8FB7CF6u+LMYqYlDh7reQf7UNvoTvdfAqHGmPGOSsPmA==} engines: {node: '>=18.12'} @@ -16412,8 +16405,6 @@ snapshots: dependencies: tslib: 2.8.1 - tree-kill@1.2.2: {} - ts-api-utils@2.4.0(typescript@5.9.3): dependencies: typescript: 5.9.3 diff --git a/tests/e2e/utils/BUILD.bazel b/tests/e2e/utils/BUILD.bazel index d4493fb14492..dbbda05702cd 100644 --- a/tests/e2e/utils/BUILD.bazel +++ b/tests/e2e/utils/BUILD.bazel @@ -20,6 +20,5 @@ ts_project( "//:node_modules/verdaccio-auth-memory", "//tests:node_modules/@types/tar-stream", "//tests:node_modules/tar-stream", - "//tests:node_modules/tree-kill", ], ) diff --git a/tests/e2e/utils/process.ts b/tests/e2e/utils/process.ts index 91216843086a..102acb0af65a 100644 --- a/tests/e2e/utils/process.ts +++ b/tests/e2e/utils/process.ts @@ -1,9 +1,9 @@ import { spawn, SpawnOptions } from 'node:child_process'; import * as child_process from 'node:child_process'; import { getGlobalVariable, getGlobalVariablesEnv } from './env'; -import treeKill from 'tree-kill'; import { delimiter, join, resolve } from 'node:path'; import { stripVTControlCharacters, styleText } from 'node:util'; +import { assertIsError } from './utils'; interface ExecOptions { silent?: boolean; @@ -255,26 +255,43 @@ export async function waitForAnyProcessOutputToMatch( return matchingProcess; } -export async function killAllProcesses(signal = 'SIGTERM'): Promise<void> { +/** + * Kills a process by PID + * @param pid The PID of the process to kill + * @param signal The signal to send to the process + */ +async function killProcess(pid: number, signal: NodeJS.Signals): Promise<void> { + if (process.platform === 'win32') { + // /T kills child processes, /F forces it + await new Promise<void>((resolve) => { + child_process.exec(`taskkill /pid ${pid} /T /F`, () => resolve()); + }); + } else { + // Use -pid to signal the entire process group + try { + process.kill(-pid, signal); + } catch (error) { + assertIsError(error); + if (error.code !== 'ESRCH') { + throw error; + } + } + } +} + +/** + * Kills all tracked processes + */ +export async function killAllProcesses(signal: NodeJS.Signals = 'SIGTERM'): Promise<void> { const processesToKill: Promise<void>[] = []; while (_processes.length) { const childProc = _processes.pop(); - if (!childProc || childProc.pid === undefined) { + if (!childProc || childProc.pid === undefined || childProc.killed) { continue; } - processesToKill.push( - new Promise<void>((resolve) => { - treeKill(childProc.pid!, signal, () => { - // Ignore all errors. - // This is due to a race condition with the `waitForMatch` logic. - // where promises are resolved on matches and not when the process terminates. - // Also in some cases in windows we get `The operation attempted is not supported`. - resolve(); - }); - }), - ); + processesToKill.push(killProcess(childProc.pid, signal)); } await Promise.all(processesToKill); diff --git a/tests/package.json b/tests/package.json index 17660ff2192e..9eb906b8cda5 100644 --- a/tests/package.json +++ b/tests/package.json @@ -2,7 +2,6 @@ "devDependencies": { "@types/tar-stream": "3.1.4", "@angular-devkit/schematics": "workspace:*", - "tar-stream": "3.1.7", - "tree-kill": "1.2.2" + "tar-stream": "3.1.7" } } From 2887d84986329c929bea68e80f58510f49be7f6f Mon Sep 17 00:00:00 2001 From: Charles Lyding <19598772+clydin@users.noreply.github.com> Date: Thu, 26 Feb 2026 14:46:13 -0500 Subject: [PATCH 084/226] refactor(@angular/build): add debug logging to Vitest executor This commit introduces a multi-level debug logging system within the Vitest test runner's executor. This logging is intended to aid in troubleshooting internal issues and provide deeper insights into the test execution process. Logging is controlled by the `NG_TEST_LOG` environment variable, which accepts numeric levels (0 for off, 1 for debug, 2 for verbose). Crucial lifecycle events and state changes in the `VitestExecutor` are now logged, such as constructor instantiation, build result processing (full and incremental), test re-run specifications, Vitest initialization details (including browser configuration, external configuration path, and included files), and executor disposal. These logs are guarded by the `logLevel` to prevent any performance penalties during normal execution. Furthermore, specific areas like incremental run file mappings and external dependency metadata are logged at a verbose level. --- .../unit-test/runners/vitest/executor.ts | 164 ++++++++++++++---- 1 file changed, 128 insertions(+), 36 deletions(-) diff --git a/packages/angular/build/src/builders/unit-test/runners/vitest/executor.ts b/packages/angular/build/src/builders/unit-test/runners/vitest/executor.ts index 5ff9ac1b443f..38156e876994 100644 --- a/packages/angular/build/src/builders/unit-test/runners/vitest/executor.ts +++ b/packages/angular/build/src/builders/unit-test/runners/vitest/executor.ts @@ -27,6 +27,11 @@ import { setupBrowserConfiguration } from './browser-provider'; import { findVitestBaseConfig } from './configuration'; import { createVitestConfigPlugin, createVitestPlugins } from './plugins'; +enum DebugLogLevel { + Info = 1, + Verbose = 2, +} + export class VitestExecutor implements TestExecutor { private vitest: Vitest | undefined; private normalizePath: ((id: string) => string) | undefined; @@ -40,6 +45,7 @@ export class VitestExecutor implements TestExecutor { explicitBrowser: [], explicitServer: [], }; + private readonly debugLevel: number; // This is a reverse map of the entry points created in `build-options.ts`. // It is used by the in-memory provider plugin to map the requested test file @@ -54,19 +60,42 @@ export class VitestExecutor implements TestExecutor { testEntryPointMappings: Map<string, string> | undefined, logger: BuilderContext['logger'], ) { + const level = parseInt(process.env['NG_TEST_LOG'] ?? '0', 10); + this.debugLevel = isNaN(level) ? 0 : level; + this.projectName = projectName; this.options = options; this.logger = logger; + this.debugLog(DebugLogLevel.Info, 'VitestExecutor instantiated.'); + this.debugLog(DebugLogLevel.Verbose, 'NormalizedUnitTestBuilderOptions:', options); + if (testEntryPointMappings) { for (const [entryPoint, testFile] of testEntryPointMappings) { this.testFileToEntryPoint.set(testFile, entryPoint); this.entryPointToTestFile.set(entryPoint + '.js', testFile); } + this.debugLog( + DebugLogLevel.Verbose, + 'Test entry point mappings:', + Object.fromEntries(testEntryPointMappings), + ); } } + private debugLog(level: DebugLogLevel, message: string, data?: object) { + if (this.debugLevel < level) { + return; + } + + const formattedMessage = `[VitestExecutor:${DebugLogLevel[level]}] ${message}`; + // Custom formatting for data object to ensure it's readable + const logData = data ? JSON.stringify(data, null, 2) : ''; + this.logger.info(`${formattedMessage}${logData ? `\n${logData}` : ''}`); + } + async *execute(buildResult: FullResult | IncrementalResult): AsyncIterable<BuilderOutput> { + this.debugLog(DebugLogLevel.Info, `Executing test run (kind: ${buildResult.kind}).`); this.normalizePath ??= (await import('vite')).normalizePath; if (buildResult.kind === ResultKind.Full) { @@ -74,7 +103,20 @@ export class VitestExecutor implements TestExecutor { for (const [path, file] of Object.entries(buildResult.files)) { this.buildResultFiles.set(this.normalizePath(path), file); } + this.debugLog( + DebugLogLevel.Info, + `Full build results received. Total files: ${this.buildResultFiles.size}.`, + ); } else { + this.debugLog( + DebugLogLevel.Info, + `Incremental build results received.` + + `Added: ${buildResult.added.length}, Modified: ${buildResult.modified.length}, Removed: ${buildResult.removed.length}.`, + ); + this.debugLog(DebugLogLevel.Verbose, 'Added files:', buildResult.added); + this.debugLog(DebugLogLevel.Verbose, 'Modified files:', buildResult.modified); + this.debugLog(DebugLogLevel.Verbose, 'Removed files:', buildResult.removed); + for (const file of buildResult.removed) { this.buildResultFiles.delete(this.normalizePath(file.path)); } @@ -84,6 +126,7 @@ export class VitestExecutor implements TestExecutor { } updateExternalMetadata(buildResult, this.externalMetadata, undefined, true); + this.debugLog(DebugLogLevel.Verbose, 'Updated external metadata:', this.externalMetadata); // Reset the exit code to allow for a clean state. // This is necessary because Vitest may set the exit code on failure, which can @@ -103,7 +146,16 @@ export class VitestExecutor implements TestExecutor { // We need to find the original source file path to pass to Vitest. const source = this.entryPointToTestFile.get(modifiedFile); if (source) { + this.debugLog( + DebugLogLevel.Verbose, + `Mapped output file '${modifiedFile}' to source file '${source}' for re-run.`, + ); modifiedSourceFiles.add(source); + } else { + this.debugLog( + DebugLogLevel.Verbose, + `Could not map output file '${modifiedFile}' to a source file. It may not be a test file.`, + ); } vitest.invalidateFile( this.normalizePath(path.join(this.options.workspaceRoot, modifiedFile)), @@ -120,7 +172,11 @@ export class VitestExecutor implements TestExecutor { } if (specsToRerun.length > 0) { + this.debugLog(DebugLogLevel.Info, `Re-running ${specsToRerun.length} test specifications.`); + this.debugLog(DebugLogLevel.Verbose, 'Specs to rerun:', specsToRerun); testResults = await vitest.rerunTestSpecifications(specsToRerun); + } else { + this.debugLog(DebugLogLevel.Info, 'No test specifications to rerun.'); } } @@ -128,20 +184,29 @@ export class VitestExecutor implements TestExecutor { const testModules = testResults?.testModules ?? this.vitest.state.getTestModules(); let success = testModules.every((testModule) => testModule.ok()); + let finalResultReason = 'All tests passed.'; + // Vitest does not return a failure result when coverage thresholds are not met. // Instead, it sets the process exit code to 1. // We check this exit code to determine if the test run should be considered a failure. if (success && process.exitCode === 1) { success = false; + finalResultReason = 'Test run failed due to unmet coverage thresholds.'; // Reset the exit code to prevent it from carrying over to subsequent runs/builds process.exitCode = 0; } + this.debugLog( + DebugLogLevel.Info, + `Test run finished with success: ${success}. Reason: ${finalResultReason}`, + ); yield { success }; } async [Symbol.asyncDispose](): Promise<void> { + this.debugLog(DebugLogLevel.Info, 'Disposing VitestExecutor: Closing Vitest instance.'); await this.vitest?.close(); + this.debugLog(DebugLogLevel.Info, 'Vitest instance closed.'); } private prepareSetupFiles(): string[] { @@ -154,10 +219,13 @@ export class VitestExecutor implements TestExecutor { testSetupFiles.unshift('polyfills.js'); } + this.debugLog(DebugLogLevel.Info, 'Prepared setup files:', testSetupFiles); + return testSetupFiles; } private async initializeVitest(): Promise<Vitest> { + this.debugLog(DebugLogLevel.Info, 'Initializing Vitest.'); const { coverage, reporters, @@ -180,6 +248,10 @@ export class VitestExecutor implements TestExecutor { vitestNodeModule = await import('vitest/node'); } catch (error: unknown) { assertIsError(error); + this.debugLog( + DebugLogLevel.Info, + `Failed to import 'vitest/node'. Error code: ${error.code}`, + ); if (error.code !== 'ERR_MODULE_NOT_FOUND') { throw error; } @@ -199,6 +271,9 @@ export class VitestExecutor implements TestExecutor { browserViewport, ); if (browserOptions.errors?.length) { + this.debugLog(DebugLogLevel.Info, 'Browser configuration errors found.', { + errors: browserOptions.errors, + }); throw new Error(browserOptions.errors.join('\n')); } @@ -207,7 +282,14 @@ export class VitestExecutor implements TestExecutor { this.logger.info(message); } } + this.debugLog(DebugLogLevel.Info, 'Browser configuration complete.', { + config: browserOptions.browser, + }); + this.debugLog( + DebugLogLevel.Info, + `Verifying build results. File count: ${this.buildResultFiles.size}.`, + ); assert( this.buildResultFiles.size > 0, 'buildResult must be available before initializing vitest', @@ -235,6 +317,10 @@ export class VitestExecutor implements TestExecutor { ? await findVitestBaseConfig([projectRoot, workspaceRoot]) : runnerConfig; + this.debugLog(DebugLogLevel.Info, 'External Vitest configuration path:', { + externalConfigPath, + }); + let project = projectName; if (debug && browserOptions.browser?.instances) { if (browserOptions.browser.instances.length > 1) { @@ -246,6 +332,9 @@ export class VitestExecutor implements TestExecutor { // When running browser tests, Vitest appends the browser name to the project identifier. // The project name must match this augmented name to ensure the correct project is targeted. project = `${projectName} (${browserOptions.browser.instances[0].browser})`; + this.debugLog(DebugLogLevel.Info, 'Adjusted project name for debugging with browser:', { + project, + }); } // Filter internal entries and setup files from the include list @@ -256,43 +345,46 @@ export class VitestExecutor implements TestExecutor { !internalEntries.some((internal) => entry.startsWith(internal)) && !setupFileSet.has(entry) ); }); + this.debugLog(DebugLogLevel.Verbose, 'Included test files (after filtering):', include); - return startVitest( - 'test', - undefined, - { - config: externalConfigPath, - root: workspaceRoot, - project, - outputFile, - cache: cacheOptions.enabled ? undefined : false, - testNamePattern: this.options.filter, - watch, - ...(typeof ui === 'boolean' ? { ui } : {}), - ...debugOptions, - }, - { - // Note `.vitest` is auto appended to the path. - cacheDir: cacheOptions.path, - server: { - // Disable the actual file watcher. The boolean watch option above should still - // be enabled as it controls other internal behavior related to rerunning tests. - watch: null, - }, - plugins: [ - await createVitestConfigPlugin({ - browser: browserOptions.browser, - coverage, - projectName, - projectSourceRoot, - optimizeDepsInclude: this.externalMetadata.implicitBrowser, - reporters, - setupFiles: testSetupFiles, - projectPlugins, - include, - }), - ], + const vitestConfig = { + config: externalConfigPath, + root: workspaceRoot, + project, + outputFile, + cache: cacheOptions.enabled ? undefined : (false as const), + testNamePattern: this.options.filter, + watch, + ...(typeof ui === 'boolean' ? { ui } : {}), + ...debugOptions, + }; + const vitestServerConfig = { + // Note `.vitest` is auto appended to the path. + cacheDir: cacheOptions.path, + server: { + // Disable the actual file watcher. The boolean watch option above should still + // be enabled as it controls other internal behavior related to rerunning tests. + watch: null, }, - ); + plugins: [ + await createVitestConfigPlugin({ + browser: browserOptions.browser, + coverage, + projectName, + projectSourceRoot, + optimizeDepsInclude: this.externalMetadata.implicitBrowser, + reporters, + setupFiles: testSetupFiles, + projectPlugins, + include, + }), + ], + }; + + this.debugLog(DebugLogLevel.Info, 'Calling startVitest with final configuration.'); + this.debugLog(DebugLogLevel.Verbose, 'Vitest config:', vitestConfig); + this.debugLog(DebugLogLevel.Verbose, 'Vitest server config:', vitestServerConfig); + + return startVitest('test', undefined, vitestConfig, vitestServerConfig); } } From c7f069f71f084b5b8f5a2c5f6c93a8ed019af3c6 Mon Sep 17 00:00:00 2001 From: Angular Robot <angular-robot@google.com> Date: Mon, 2 Mar 2026 06:20:09 +0000 Subject: [PATCH 085/226] build: update pnpm to v10.30.3 See associated pull request for more information. --- MODULE.bazel | 4 ++-- MODULE.bazel.lock | 8 ++++---- package.json | 4 ++-- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/MODULE.bazel b/MODULE.bazel index 47b4699a08ee..be1291e2a303 100644 --- a/MODULE.bazel +++ b/MODULE.bazel @@ -116,8 +116,8 @@ use_repo( 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") diff --git a/MODULE.bazel.lock b/MODULE.bazel.lock index 308f372dfc63..67e0b7c02deb 100644 --- a/MODULE.bazel.lock +++ b/MODULE.bazel.lock @@ -417,7 +417,7 @@ "@@aspect_rules_js+//npm:extensions.bzl%pnpm": { "general": { "bzlTransitiveDigest": "9Zmqluz9ltvCoc6pskOslTkQpkH6CIINjWVkgam9aa4=", - "usagesDigest": "ZvjRdptHQkMA7CP3Q06p9iboasgFVjpW2zKBrKW0xCA=", + "usagesDigest": "/hSZVSDQaoDMng/HxW0ZY0VCHXyuKHlo2Q/gRZKnObQ=", "recordedFileInputs": {}, "recordedDirentsInputs": {}, "envVariables": {}, @@ -426,11 +426,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": [ @@ -453,7 +453,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": {}, diff --git a/package.json b/package.json index 2e33cfa7084e..9406bace15f2 100644 --- a/package.json +++ b/package.json @@ -28,12 +28,12 @@ "type": "git", "url": "https://github.com/angular/angular-cli.git" }, - "packageManager": "pnpm@10.30.2", + "packageManager": "pnpm@10.30.3", "engines": { "node": "^22.22.0 || >=24.13.1", "npm": "Please use pnpm instead of NPM to install dependencies", "yarn": "Please use pnpm instead of Yarn to install dependencies", - "pnpm": "10.30.2" + "pnpm": "10.30.3" }, "author": "Angular Authors", "license": "MIT", From 8350e420146af0bb7c9dba30802f2185a750fbdf Mon Sep 17 00:00:00 2001 From: Angular Robot <angular-robot@google.com> Date: Tue, 3 Mar 2026 16:49:01 +0000 Subject: [PATCH 086/226] build: update all non-major dependencies See associated pull request for more information. --- package.json | 4 +- packages/angular/build/package.json | 4 +- packages/angular/cli/package.json | 4 +- .../angular_devkit/build_angular/package.json | 4 +- .../angular_devkit/build_webpack/package.json | 2 +- packages/ngtools/webpack/package.json | 2 +- pnpm-lock.yaml | 343 +++++++++--------- tests/package.json | 2 +- 8 files changed, 191 insertions(+), 174 deletions(-) diff --git a/package.json b/package.json index 9406bace15f2..e8e765270e90 100644 --- a/package.json +++ b/package.json @@ -101,7 +101,7 @@ "eslint-plugin-import": "2.32.0", "express": "5.2.1", "fast-glob": "3.3.3", - "globals": "17.3.0", + "globals": "17.4.0", "http-proxy": "^1.18.1", "http-proxy-middleware": "3.0.5", "husky": "9.1.7", @@ -130,7 +130,7 @@ "typescript": "5.9.3", "undici": "7.22.0", "unenv": "^1.10.0", - "verdaccio": "6.2.7", + "verdaccio": "6.2.9", "verdaccio-auth-memory": "^10.0.0", "zone.js": "^0.16.0" }, diff --git a/packages/angular/build/package.json b/packages/angular/build/package.json index 54731e23c099..805c87a77a1e 100644 --- a/packages/angular/build/package.json +++ b/packages/angular/build/package.json @@ -31,13 +31,13 @@ "https-proxy-agent": "7.0.6", "istanbul-lib-instrument": "6.0.3", "jsonc-parser": "3.3.1", - "listr2": "10.1.1", + "listr2": "10.1.2", "magic-string": "0.30.21", "mrmime": "2.0.1", "parse5-html-rewriting-stream": "8.0.0", "picomatch": "4.0.3", "piscina": "5.1.4", - "rolldown": "1.0.0-rc.5", + "rolldown": "1.0.0-rc.6", "sass": "1.97.3", "semver": "7.7.4", "source-map-support": "0.5.21", diff --git a/packages/angular/cli/package.json b/packages/angular/cli/package.json index 1f8ebde2a1dc..bdc3f1b75fe3 100644 --- a/packages/angular/cli/package.json +++ b/packages/angular/cli/package.json @@ -26,14 +26,14 @@ "@angular-devkit/core": "workspace:0.0.0-PLACEHOLDER", "@angular-devkit/schematics": "workspace:0.0.0-PLACEHOLDER", "@inquirer/prompts": "8.3.0", - "@listr2/prompt-adapter-inquirer": "4.1.1", + "@listr2/prompt-adapter-inquirer": "4.1.2", "@modelcontextprotocol/sdk": "1.27.1", "@schematics/angular": "workspace:0.0.0-PLACEHOLDER", "@yarnpkg/lockfile": "1.1.0", "algoliasearch": "5.49.1", "ini": "6.0.0", "jsonc-parser": "3.3.1", - "listr2": "10.1.1", + "listr2": "10.1.2", "npm-package-arg": "13.0.2", "pacote": "21.4.0", "parse5-html-rewriting-stream": "8.0.0", diff --git a/packages/angular_devkit/build_angular/package.json b/packages/angular_devkit/build_angular/package.json index 5872b85511f3..df5671ae370b 100644 --- a/packages/angular_devkit/build_angular/package.json +++ b/packages/angular_devkit/build_angular/package.json @@ -23,7 +23,7 @@ "@discoveryjs/json-ext": "0.6.3", "@ngtools/webpack": "workspace:0.0.0-PLACEHOLDER", "ansi-colors": "4.1.3", - "autoprefixer": "10.4.24", + "autoprefixer": "10.4.27", "babel-loader": "10.0.0", "browserslist": "^4.26.0", "copy-webpack-plugin": "13.0.1", @@ -54,7 +54,7 @@ "terser": "5.46.0", "tinyglobby": "0.2.15", "tslib": "2.8.1", - "webpack": "5.105.2", + "webpack": "5.105.3", "webpack-dev-middleware": "7.4.5", "webpack-dev-server": "5.2.3", "webpack-merge": "6.0.1", diff --git a/packages/angular_devkit/build_webpack/package.json b/packages/angular_devkit/build_webpack/package.json index 463b2e014fa2..d5b1c719f44e 100644 --- a/packages/angular_devkit/build_webpack/package.json +++ b/packages/angular_devkit/build_webpack/package.json @@ -22,7 +22,7 @@ "devDependencies": { "@angular-devkit/core": "workspace:0.0.0-PLACEHOLDER", "@ngtools/webpack": "workspace:0.0.0-PLACEHOLDER", - "webpack": "5.105.2", + "webpack": "5.105.3", "webpack-dev-server": "5.2.3" }, "peerDependencies": { diff --git a/packages/ngtools/webpack/package.json b/packages/ngtools/webpack/package.json index b4dc7692be83..132839480fc5 100644 --- a/packages/ngtools/webpack/package.json +++ b/packages/ngtools/webpack/package.json @@ -30,6 +30,6 @@ "@angular/compiler": "21.2.0-rc.0", "@angular/compiler-cli": "21.2.0-rc.0", "typescript": "5.9.3", - "webpack": "5.105.2" + "webpack": "5.105.3" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index c3cd5db30930..baabaa028c75 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -197,8 +197,8 @@ importers: specifier: 3.3.3 version: 3.3.3 globals: - specifier: 17.3.0 - version: 17.3.0 + specifier: 17.4.0 + version: 17.4.0 http-proxy: specifier: ^1.18.1 version: 1.18.1(debug@4.4.3) @@ -284,8 +284,8 @@ importers: specifier: ^1.10.0 version: 1.10.0 verdaccio: - specifier: 6.2.7 - version: 6.2.7(encoding@0.1.13) + specifier: 6.2.9 + version: 6.2.9(encoding@0.1.13) verdaccio-auth-memory: specifier: ^10.0.0 version: 10.3.1 @@ -365,8 +365,8 @@ importers: specifier: 3.3.1 version: 3.3.1 listr2: - specifier: 10.1.1 - version: 10.1.1 + specifier: 10.1.2 + version: 10.1.2 magic-string: specifier: 0.30.21 version: 0.30.21 @@ -383,8 +383,8 @@ importers: specifier: 5.1.4 version: 5.1.4 rolldown: - specifier: 1.0.0-rc.5 - version: 1.0.0-rc.5 + specifier: 1.0.0-rc.6 + version: 1.0.0-rc.6 sass: specifier: 1.97.3 version: 1.97.3 @@ -448,8 +448,8 @@ importers: specifier: 8.3.0 version: 8.3.0(@types/node@24.10.13) '@listr2/prompt-adapter-inquirer': - specifier: 4.1.1 - version: 4.1.1(@inquirer/prompts@8.3.0(@types/node@24.10.13))(@types/node@24.10.13)(listr2@10.1.1) + specifier: 4.1.2 + version: 4.1.2(@inquirer/prompts@8.3.0(@types/node@24.10.13))(@types/node@24.10.13)(listr2@10.1.2) '@modelcontextprotocol/sdk': specifier: 1.27.1 version: 1.27.1(zod@4.3.6) @@ -469,8 +469,8 @@ importers: specifier: 3.3.1 version: 3.3.1 listr2: - specifier: 10.1.1 - version: 10.1.1 + specifier: 10.1.2 + version: 10.1.2 npm-package-arg: specifier: 13.0.2 version: 13.0.2 @@ -599,20 +599,20 @@ importers: specifier: 4.1.3 version: 4.1.3 autoprefixer: - specifier: 10.4.24 - version: 10.4.24(postcss@8.5.6) + specifier: 10.4.27 + version: 10.4.27(postcss@8.5.6) babel-loader: specifier: 10.0.0 - version: 10.0.0(@babel/core@7.29.0)(webpack@5.105.2(esbuild@0.27.3)) + version: 10.0.0(@babel/core@7.29.0)(webpack@5.105.3(esbuild@0.27.3)) browserslist: specifier: ^4.26.0 version: 4.28.1 copy-webpack-plugin: specifier: 13.0.1 - version: 13.0.1(webpack@5.105.2(esbuild@0.27.3)) + version: 13.0.1(webpack@5.105.3(esbuild@0.27.3)) css-loader: specifier: 7.1.4 - version: 7.1.4(webpack@5.105.2(esbuild@0.27.3)) + version: 7.1.4(webpack@5.105.3(esbuild@0.27.3)) esbuild-wasm: specifier: 0.27.3 version: 0.27.3 @@ -633,16 +633,16 @@ importers: version: 4.4.2 less-loader: specifier: 12.3.1 - version: 12.3.1(less@4.4.2)(webpack@5.105.2(esbuild@0.27.3)) + version: 12.3.1(less@4.4.2)(webpack@5.105.3(esbuild@0.27.3)) license-webpack-plugin: specifier: 4.0.2 - version: 4.0.2(webpack@5.105.2(esbuild@0.27.3)) + version: 4.0.2(webpack@5.105.3(esbuild@0.27.3)) loader-utils: specifier: 3.3.1 version: 3.3.1 mini-css-extract-plugin: specifier: 2.10.0 - version: 2.10.0(webpack@5.105.2(esbuild@0.27.3)) + version: 2.10.0(webpack@5.105.3(esbuild@0.27.3)) open: specifier: 11.0.0 version: 11.0.0 @@ -660,7 +660,7 @@ importers: version: 8.5.6 postcss-loader: specifier: 8.2.1 - version: 8.2.1(postcss@8.5.6)(typescript@5.9.3)(webpack@5.105.2(esbuild@0.27.3)) + version: 8.2.1(postcss@8.5.6)(typescript@5.9.3)(webpack@5.105.3(esbuild@0.27.3)) resolve-url-loader: specifier: 5.0.0 version: 5.0.0 @@ -672,13 +672,13 @@ importers: version: 1.97.3 sass-loader: specifier: 16.0.7 - version: 16.0.7(sass@1.97.3)(webpack@5.105.2(esbuild@0.27.3)) + version: 16.0.7(sass@1.97.3)(webpack@5.105.3(esbuild@0.27.3)) semver: specifier: 7.7.4 version: 7.7.4 source-map-loader: specifier: 5.0.0 - version: 5.0.0(webpack@5.105.2(esbuild@0.27.3)) + version: 5.0.0(webpack@5.105.3(esbuild@0.27.3)) source-map-support: specifier: 0.5.21 version: 0.5.21 @@ -692,20 +692,20 @@ importers: specifier: 2.8.1 version: 2.8.1 webpack: - specifier: 5.105.2 - version: 5.105.2(esbuild@0.27.3) + specifier: 5.105.3 + version: 5.105.3(esbuild@0.27.3) webpack-dev-middleware: specifier: 7.4.5 - version: 7.4.5(tslib@2.8.1)(webpack@5.105.2(esbuild@0.27.3)) + version: 7.4.5(tslib@2.8.1)(webpack@5.105.3(esbuild@0.27.3)) webpack-dev-server: specifier: 5.2.3 - version: 5.2.3(bufferutil@4.1.0)(tslib@2.8.1)(utf-8-validate@6.0.6)(webpack@5.105.2(esbuild@0.27.3)) + version: 5.2.3(bufferutil@4.1.0)(tslib@2.8.1)(utf-8-validate@6.0.6)(webpack@5.105.3(esbuild@0.27.3)) webpack-merge: specifier: 6.0.1 version: 6.0.1 webpack-subresource-integrity: specifier: 5.1.0 - version: 5.1.0(webpack@5.105.2(esbuild@0.27.3)) + version: 5.1.0(webpack@5.105.3(esbuild@0.27.3)) devDependencies: '@angular/ssr': specifier: workspace:* @@ -740,11 +740,11 @@ importers: specifier: workspace:0.0.0-PLACEHOLDER version: link:../../ngtools/webpack webpack: - specifier: 5.105.2 - version: 5.105.2(esbuild@0.27.3) + specifier: 5.105.3 + version: 5.105.3(esbuild@0.27.3) webpack-dev-server: specifier: 5.2.3 - version: 5.2.3(bufferutil@4.1.0)(tslib@2.8.1)(utf-8-validate@6.0.6)(webpack@5.105.2(esbuild@0.27.3)) + version: 5.2.3(bufferutil@4.1.0)(tslib@2.8.1)(utf-8-validate@6.0.6)(webpack@5.105.3(esbuild@0.27.3)) packages/angular_devkit/core: dependencies: @@ -816,8 +816,8 @@ importers: specifier: 5.9.3 version: 5.9.3 webpack: - specifier: 5.105.2 - version: 5.105.2(esbuild@0.27.3) + specifier: 5.105.3 + version: 5.105.3(esbuild@0.27.3) packages/schematics/angular: dependencies: @@ -840,8 +840,8 @@ importers: specifier: 3.1.4 version: 3.1.4 tar-stream: - specifier: 3.1.7 - version: 3.1.7 + specifier: 3.1.8 + version: 3.1.8 packages: @@ -2442,12 +2442,12 @@ packages: '@leichtgewicht/ip-codec@2.0.5': resolution: {integrity: sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw==} - '@listr2/prompt-adapter-inquirer@4.1.1': - resolution: {integrity: sha512-hlUMCYxuBrtjsBqzsy9ohzs3SiosQhXQlHltAZepMdLMBsWSPubjzBbBgTWK/glNO2ZJdZp8flhx2uRYf/RFUg==} + '@listr2/prompt-adapter-inquirer@4.1.2': + resolution: {integrity: sha512-Gnq4scw3evxbEVTQ5cz7l1zpjDdF35/NOOvTqPRvbGnPNegu9YbRwhFH144o30a0G5q+7iLgz6s1xOg+B5bvhg==} engines: {node: '>=22.0.0'} peerDependencies: '@inquirer/prompts': '>= 3 < 9' - listr2: 10.1.1 + listr2: 10.1.2 '@lmdb/lmdb-darwin-arm64@3.5.1': resolution: {integrity: sha512-tpfN4kKrrMpQ+If1l8bhmoNkECJi0iOu6AEdrTJvWVC+32sLxTARX5Rsu579mPImRP9YFWfWgeRQ5oav7zApQQ==} @@ -2805,8 +2805,8 @@ packages: resolution: {integrity: sha512-cifvXDhcqMwwTlTK04GBNeIe7yyo28Mfby85QXFe1Yk8nmi36Ab/5UQwptOx84SsoGNRg+EVSjwzfSZMy6pmlw==} engines: {node: '>=14'} - '@oxc-project/types@0.114.0': - resolution: {integrity: sha512-//nBfbzHQHvJs8oFIjv6coZ6uxQ4alLfiPe6D5vit6c4pmxATHHlVwgB1k+Hv4yoAMyncdxgRBF5K4BYWUCzvA==} + '@oxc-project/types@0.115.0': + resolution: {integrity: sha512-4n91DKnebUS4yjUHl2g3/b2T+IUdCfmoZGhmwsovZCDaJSs+QkVAM+0AqqTxHSsHfeiMuueT75cZaZcT/m0pSw==} '@parcel/watcher-android-arm64@2.5.6': resolution: {integrity: sha512-YQxSS34tPF/6ZG7r/Ih9xy+kP/WwediEUsqmtf0cuCV5TPPKw/PQHRhueUo6JdeFJaqV3pyjm0GdYjZotbRt/A==} @@ -2992,89 +2992,89 @@ packages: engines: {node: '>=18'} hasBin: true - '@rolldown/binding-android-arm64@1.0.0-rc.5': - resolution: {integrity: sha512-zCEmUrt1bggwgBgeKLxNj217J1OrChrp3jJt24VK9jAharSTeVaHODNL+LpcQVhRz+FktYWfT9cjo5oZ99ZLpg==} + '@rolldown/binding-android-arm64@1.0.0-rc.6': + resolution: {integrity: sha512-kvjTSWGcrv+BaR2vge57rsKiYdVR8V8CoS0vgKrc570qRBfty4bT+1X0z3j2TaVV+kAYzA0PjeB9+mdZyqUZlg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [android] - '@rolldown/binding-darwin-arm64@1.0.0-rc.5': - resolution: {integrity: sha512-ZP9xb9lPAex36pvkNWCjSEJW/Gfdm9I3ssiqOFLmpZ/vosPXgpoGxCmh+dX1Qs+/bWQE6toNFXWWL8vYoKoK9Q==} + '@rolldown/binding-darwin-arm64@1.0.0-rc.6': + resolution: {integrity: sha512-+tJhD21KvGNtUrpLXrZQlT+j5HZKiEwR2qtcZb3vNOUpvoT9QjEykr75ZW/Kr0W89gose/HVXU6351uVZD8Qvw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [darwin] - '@rolldown/binding-darwin-x64@1.0.0-rc.5': - resolution: {integrity: sha512-7IdrPunf6dp9mywMgTOKMMGDnMHQ6+h5gRl6LW8rhD8WK2kXX0IwzcM5Zc0B5J7xQs8QWOlKjv8BJsU/1CD3pg==} + '@rolldown/binding-darwin-x64@1.0.0-rc.6': + resolution: {integrity: sha512-DKNhjMk38FAWaHwUt1dFR3rA/qRAvn2NUvSG2UGvxvlMxSmN/qqww/j4ABAbXhNRXtGQNmrAINMXRuwHl16ZHg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [darwin] - '@rolldown/binding-freebsd-x64@1.0.0-rc.5': - resolution: {integrity: sha512-o/JCk+dL0IN68EBhZ4DqfsfvxPfMeoM6cJtxORC1YYoxGHZyth2Kb2maXDb4oddw2wu8iIbnYXYPEzBtAF5CAg==} + '@rolldown/binding-freebsd-x64@1.0.0-rc.6': + resolution: {integrity: sha512-8TThsRkCPAnfyMBShxrGdtoOE6h36QepqRQI97iFaQSCRbHFWHcDHppcojZnzXoruuhPnjMEygzaykvPVJsMRg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [freebsd] - '@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.5': - resolution: {integrity: sha512-IIBwTtA6VwxQLcEgq2mfrUgam7VvPZjhd/jxmeS1npM+edWsrrpRLHUdze+sk4rhb8/xpP3flemgcZXXUW6ukw==} + '@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.6': + resolution: {integrity: sha512-ZfmFoOwPUZCWtGOVC9/qbQzfc0249FrRUOzV2XabSMUV60Crp211OWLQN1zmQAsRIVWRcEwhJ46Z1mXGo/L/nQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [linux] - '@rolldown/binding-linux-arm64-gnu@1.0.0-rc.5': - resolution: {integrity: sha512-KSol1De1spMZL+Xg7K5IBWXIvRWv7+pveaxFWXpezezAG7CS6ojzRjtCGCiLxQricutTAi/LkNWKMsd2wNhMKQ==} + '@rolldown/binding-linux-arm64-gnu@1.0.0-rc.6': + resolution: {integrity: sha512-ZsGzbNETxPodGlLTYHaCSGVhNN/rvkMDCJYHdT7PZr5jFJRmBfmDi2awhF64Dt2vxrJqY6VeeYSgOzEbHRsb7Q==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] libc: [glibc] - '@rolldown/binding-linux-arm64-musl@1.0.0-rc.5': - resolution: {integrity: sha512-WFljyDkxtXRlWxMjxeegf7xMYXxUr8u7JdXlOEWKYgDqEgxUnSEsVDxBiNWQ1D5kQKwf8Wo4sVKEYPRhCdsjwA==} + '@rolldown/binding-linux-arm64-musl@1.0.0-rc.6': + resolution: {integrity: sha512-elPpdevtCdUOqziemR86C4CSCr/5sUxalzDrf/CJdMT+kZt2C556as++qHikNOz0vuFf52h+GJNXZM08eWgGPQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] libc: [musl] - '@rolldown/binding-linux-x64-gnu@1.0.0-rc.5': - resolution: {integrity: sha512-CUlplTujmbDWp2gamvrqVKi2Or8lmngXT1WxsizJfts7JrvfGhZObciaY/+CbdbS9qNnskvwMZNEhTPrn7b+WA==} + '@rolldown/binding-linux-x64-gnu@1.0.0-rc.6': + resolution: {integrity: sha512-IBwXsf56o3xhzAyaZxdM1CX8UFiBEUFCjiVUgny67Q8vPIqkjzJj0YKhd3TbBHanuxThgBa59f6Pgutg2OGk5A==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] libc: [glibc] - '@rolldown/binding-linux-x64-musl@1.0.0-rc.5': - resolution: {integrity: sha512-wdf7g9NbVZCeAo2iGhsjJb7I8ZFfs6X8bumfrWg82VK+8P6AlLXwk48a1ASiJQDTS7Svq2xVzZg3sGO2aXpHRA==} + '@rolldown/binding-linux-x64-musl@1.0.0-rc.6': + resolution: {integrity: sha512-vOk7G8V9Zm+8a6PL6JTpCea61q491oYlGtO6CvnsbhNLlKdf0bbCPytFzGQhYmCKZDKkEbmnkcIprTEGCURnwg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] libc: [musl] - '@rolldown/binding-openharmony-arm64@1.0.0-rc.5': - resolution: {integrity: sha512-0CWY7ubu12nhzz+tkpHjoG3IRSTlWYe0wrfJRf4qqjqQSGtAYgoL9kwzdvlhaFdZ5ffVeyYw9qLsChcjUMEloQ==} + '@rolldown/binding-openharmony-arm64@1.0.0-rc.6': + resolution: {integrity: sha512-ASjEDI4MRv7XCQb2JVaBzfEYO98JKCGrAgoW6M03fJzH/ilCnC43Mb3ptB9q/lzsaahoJyIBoAGKAYEjUvpyvQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [openharmony] - '@rolldown/binding-wasm32-wasi@1.0.0-rc.5': - resolution: {integrity: sha512-LztXnGzv6t2u830mnZrFLRVqT/DPJ9DL4ZTz/y93rqUVkeHjMMYIYaFj+BUthiYxbVH9dH0SZYufETspKY/NhA==} + '@rolldown/binding-wasm32-wasi@1.0.0-rc.6': + resolution: {integrity: sha512-mYa1+h2l6Zc0LvmwUh0oXKKYihnw/1WC73vTqw+IgtfEtv47A+rWzzcWwVDkW73+UDr0d/Ie/HRXoaOY22pQDw==} engines: {node: '>=14.0.0'} cpu: [wasm32] - '@rolldown/binding-win32-arm64-msvc@1.0.0-rc.5': - resolution: {integrity: sha512-jUct1XVeGtyjqJXEAfvdFa8xoigYZ2rge7nYEm70ppQxpfH9ze2fbIrpHmP2tNM2vL/F6Dd0CpXhpjPbC6bSxQ==} + '@rolldown/binding-win32-arm64-msvc@1.0.0-rc.6': + resolution: {integrity: sha512-e2ABskbNH3MRUBMjgxaMjYIw11DSwjLJxBII3UgpF6WClGLIh8A20kamc+FKH5vIaFVnYQInmcLYSUVpqMPLow==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [win32] - '@rolldown/binding-win32-x64-msvc@1.0.0-rc.5': - resolution: {integrity: sha512-VQ8F9ld5gw29epjnVGdrx8ugiLTe8BMqmhDYy7nGbdeDo4HAt4bgdZvLbViEhg7DZyHLpiEUlO5/jPSUrIuxRQ==} + '@rolldown/binding-win32-x64-msvc@1.0.0-rc.6': + resolution: {integrity: sha512-dJVc3ifhaRXxIEh1xowLohzFrlQXkJ66LepHm+CmSprTWgVrPa8Fx3OL57xwIqDEH9hufcKkDX2v65rS3NZyRA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [win32] - '@rolldown/pluginutils@1.0.0-rc.5': - resolution: {integrity: sha512-RxlLX/DPoarZ9PtxVrQgZhPoor987YtKQqCo5zkjX+0S0yLJ7Vv515Wk6+xtTL67VONKJKxETWZwuZjss2idYw==} + '@rolldown/pluginutils@1.0.0-rc.6': + resolution: {integrity: sha512-Y0+JT8Mi1mmW08K6HieG315XNRu4L0rkfCpA364HtytjgiqYnMYRdFPcxRl+BQQqNXzecL2S9nii+RUpO93XIA==} '@rollup/plugin-alias@6.0.0': resolution: {integrity: sha512-tPCzJOtS7uuVZd+xPhoy5W4vThe6KWXNmsFCNktaAh5RTqcLiSfT4huPQIXkgJ6YCOjJHvecOAzQxLFhPxKr+g==} @@ -3998,8 +3998,8 @@ packages: resolution: {integrity: sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==} engines: {node: '>=8.0.0'} - autoprefixer@10.4.24: - resolution: {integrity: sha512-uHZg7N9ULTVbutaIsDRoUkoS8/h3bdsmVJYZ5l3wv8Cp/6UIIoRDm90hZ+BwxUj/hGBEzLxdHNSKuFpn8WOyZw==} + autoprefixer@10.4.27: + resolution: {integrity: sha512-NP9APE+tO+LuJGn7/9+cohklunJsXWiaWEfV3si4Gi/XHDwVNgkwr1J3RQYFIvPy76GmJ9/bW8vyoU1LcxwKHA==} engines: {node: ^10 || ^12 || >=14} hasBin: true peerDependencies: @@ -5354,8 +5354,8 @@ packages: resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} engines: {node: '>=18'} - globals@17.3.0: - resolution: {integrity: sha512-yMqGUQVVCkD4tqjOJf3TnrvaaHDMYp4VlUSObbkIiuCPe/ofdMBFIAcBbCSRFWOnos6qRiTVStDwqPLUclaxIw==} + globals@17.4.0: + resolution: {integrity: sha512-hjrNztw/VajQwOLsMNT1cbJiH2muO3OROCHnbehc8eY5JyD2gqz4AcMHPqgaOR59DjgUjYAYLeH699g/eWi2jw==} engines: {node: '>=18'} globalthis@1.0.4: @@ -6090,8 +6090,8 @@ packages: lines-and-columns@1.2.4: resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} - listr2@10.1.1: - resolution: {integrity: sha512-4oogpJzRRGtq41B0GKZIldzYCnQTgX2DPM/XvcfNu7g2E7sxaast009150RKFZBnrHAnfMOUaedIqdIOLCCRxQ==} + listr2@10.1.2: + resolution: {integrity: sha512-ENXj5KYVtdZigbaWY0+lUCzRZNvKDEbxree+93oaCeSz8GICxgJyOMi6U9mHuiFd3hJ9y0RIDQh8RYttBKOnaQ==} engines: {node: '>=22.0.0'} lmdb@3.5.1: @@ -6160,9 +6160,9 @@ packages: resolution: {integrity: sha512-ja1E3yCr9i/0hmBVaM0bfwDjnGy8I/s6PP4DFp+yP+a+mrHO4Rm7DtmnqROTUkHIkqffC84YY7AeqX6oFk0WFg==} engines: {node: '>=18'} - log-update@7.2.0: - resolution: {integrity: sha512-iLs7dGSyjZiUgvrUvuD3FndAxVJk+TywBkkkwUSm9HdYoskJalWg5qVsEiXeufPvRVPbCUmNQewg798rx+sPXg==} - engines: {node: '>=20'} + log-update@6.1.0: + resolution: {integrity: sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w==} + engines: {node: '>=18'} log4js@6.9.1: resolution: {integrity: sha512-1somDdy9sChrr9/f4UlzhdaGfDR2c/SaD2a4T7qEkG4jTS57/B3qmnjLYePwQ8cqWnUHZI0iAKxMBpCZICiZ2g==} @@ -7162,8 +7162,8 @@ packages: resolution: {integrity: sha512-l0OE8wL34P4nJH/H2ffoaniAokM2qSmrtXHmlpvYr5AVVX8msAyW0l8NVJFDxlSK4u3Uh/f41cQheDVdnYijwQ==} hasBin: true - rolldown@1.0.0-rc.5: - resolution: {integrity: sha512-0AdalTs6hNTioaCYIkAa7+xsmHBfU5hCNclZnM/lp7lGGDuUOb6N4BVNtwiomybbencDjq/waKjTImqiGCs5sw==} + rolldown@1.0.0-rc.6: + resolution: {integrity: sha512-B8vFPV1ADyegoYfhg+E7RAucYKv0xdVlwYYsIJgfPNeiSxZGWNxts9RqhyGzC11ULK/VaeXyKezGCwpMiH8Ktw==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true @@ -7390,6 +7390,10 @@ packages: resolution: {integrity: sha512-/fUgUhYghuLzVT/gaJoeVehLCgZiUxPCPMcyVNY0lIf/cTCz58K/WTI7PefDarXxp9nUKpEwg1yyz3eSBMTtgA==} engines: {node: ^20.17.0 || >=22.9.0} + slice-ansi@7.1.2: + resolution: {integrity: sha512-iOBWFgUX7caIZiuutICxVgX1SdxwAVFFKwt1EvMYYec/NWO5meOJ6K5uQxhrYBdQJne4KxiqZc+KptFOWFSI9w==} + engines: {node: '>=18'} + slice-ansi@8.0.0: resolution: {integrity: sha512-stxByr12oeeOyY2BlviTNQlYV5xOj47GirPr4yA1hE9JCtxfQN0+tVbkxwCtYDQWhEKWFHsEK48ORg5jrouCAg==} engines: {node: '>=20'} @@ -7635,6 +7639,9 @@ packages: tar-stream@3.1.7: resolution: {integrity: sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==} + tar-stream@3.1.8: + resolution: {integrity: sha512-U6QpVRyCGHva435KoNWy9PRoi2IFYCgtEhq9nmrPPpbRacPs9IH4aJ3gbrFC8dPcXvdSZ4XXfXT5Fshbp2MtlQ==} + tar@7.5.9: resolution: {integrity: sha512-BTLcK0xsDh2+PUe9F6c2TlRp4zOOBMTkoQHQIWSIzI0R7KG46uEwq4OPk2W7bZcprBMsuaeFsqwYr7pjh6CuHg==} engines: {node: '>=18'} @@ -7972,8 +7979,8 @@ packages: resolution: {integrity: sha512-JBYCaSTQSUws/EXOqNrh7iOyWPrGLTYSeufCS3Y6BOCJbfDiy2Nh8PbstoZn/L9ZbzUesjPPiIZ4Ou3eUaK0Mw==} engines: {node: '>=18'} - verdaccio@6.2.7: - resolution: {integrity: sha512-rOqa2Bl713kQtaWRMcKzAIh9gTcn2fTtWITzm0aGtIz1gmutp4F2TUIYek+BbajoAKfoc+xnI8dVNmmaCSUUZA==} + verdaccio@6.2.9: + resolution: {integrity: sha512-w1LYqM/wuvtiUedF9eSTsIC1yEI0nShIX48OqG1R6xzS4eEt0Pe1NYl5oPC/d7UyVSOufpjE8QVgd1CqauyhXQ==} engines: {node: '>=18'} hasBin: true @@ -8130,8 +8137,8 @@ packages: html-webpack-plugin: optional: true - webpack@5.105.2: - resolution: {integrity: sha512-dRXm0a2qcHPUBEzVk8uph0xWSjV/xZxenQQbLwnwP7caQCYpqG1qddwlyEkIDkYn0K8tvmcrZ+bOrzoQ3HxCDw==} + webpack@5.105.3: + resolution: {integrity: sha512-LLBBA4oLmT7sZdHiYE/PeVuifOxYyE2uL/V+9VQP7YSYdJU7bSf7H8bZRRxW8kEPMkmVjnrXmoR3oejIdX0xbg==} engines: {node: '>=10.13.0'} hasBin: true peerDependencies: @@ -10254,11 +10261,11 @@ snapshots: '@leichtgewicht/ip-codec@2.0.5': {} - '@listr2/prompt-adapter-inquirer@4.1.1(@inquirer/prompts@8.3.0(@types/node@24.10.13))(@types/node@24.10.13)(listr2@10.1.1)': + '@listr2/prompt-adapter-inquirer@4.1.2(@inquirer/prompts@8.3.0(@types/node@24.10.13))(@types/node@24.10.13)(listr2@10.1.2)': dependencies: '@inquirer/prompts': 8.3.0(@types/node@24.10.13) '@inquirer/type': 4.0.3(@types/node@24.10.13) - listr2: 10.1.1 + listr2: 10.1.2 transitivePeerDependencies: - '@types/node' @@ -10616,7 +10623,7 @@ snapshots: '@opentelemetry/semantic-conventions@1.40.0': {} - '@oxc-project/types@0.114.0': {} + '@oxc-project/types@0.115.0': {} '@parcel/watcher-android-arm64@2.5.6': optional: true @@ -10832,48 +10839,48 @@ snapshots: - react-native-b4a - supports-color - '@rolldown/binding-android-arm64@1.0.0-rc.5': + '@rolldown/binding-android-arm64@1.0.0-rc.6': optional: true - '@rolldown/binding-darwin-arm64@1.0.0-rc.5': + '@rolldown/binding-darwin-arm64@1.0.0-rc.6': optional: true - '@rolldown/binding-darwin-x64@1.0.0-rc.5': + '@rolldown/binding-darwin-x64@1.0.0-rc.6': optional: true - '@rolldown/binding-freebsd-x64@1.0.0-rc.5': + '@rolldown/binding-freebsd-x64@1.0.0-rc.6': optional: true - '@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.5': + '@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.6': optional: true - '@rolldown/binding-linux-arm64-gnu@1.0.0-rc.5': + '@rolldown/binding-linux-arm64-gnu@1.0.0-rc.6': optional: true - '@rolldown/binding-linux-arm64-musl@1.0.0-rc.5': + '@rolldown/binding-linux-arm64-musl@1.0.0-rc.6': optional: true - '@rolldown/binding-linux-x64-gnu@1.0.0-rc.5': + '@rolldown/binding-linux-x64-gnu@1.0.0-rc.6': optional: true - '@rolldown/binding-linux-x64-musl@1.0.0-rc.5': + '@rolldown/binding-linux-x64-musl@1.0.0-rc.6': optional: true - '@rolldown/binding-openharmony-arm64@1.0.0-rc.5': + '@rolldown/binding-openharmony-arm64@1.0.0-rc.6': optional: true - '@rolldown/binding-wasm32-wasi@1.0.0-rc.5': + '@rolldown/binding-wasm32-wasi@1.0.0-rc.6': dependencies: '@napi-rs/wasm-runtime': 1.1.1 optional: true - '@rolldown/binding-win32-arm64-msvc@1.0.0-rc.5': + '@rolldown/binding-win32-arm64-msvc@1.0.0-rc.6': optional: true - '@rolldown/binding-win32-x64-msvc@1.0.0-rc.5': + '@rolldown/binding-win32-x64-msvc@1.0.0-rc.6': optional: true - '@rolldown/pluginutils@1.0.0-rc.5': {} + '@rolldown/pluginutils@1.0.0-rc.6': {} '@rollup/plugin-alias@6.0.0(rollup@4.59.0)': optionalDependencies: @@ -11222,7 +11229,7 @@ snapshots: '@types/loader-utils@3.0.0(esbuild@0.27.3)': dependencies: '@types/node': 22.19.13 - webpack: 5.105.2(esbuild@0.27.3) + webpack: 5.105.3(esbuild@0.27.3) transitivePeerDependencies: - '@swc/core' - esbuild @@ -11969,7 +11976,7 @@ snapshots: atomic-sleep@1.0.0: {} - autoprefixer@10.4.24(postcss@8.5.6): + autoprefixer@10.4.27(postcss@8.5.6): dependencies: browserslist: 4.28.1 caniuse-lite: 1.0.30001775 @@ -11988,11 +11995,11 @@ snapshots: b4a@1.8.0: {} - babel-loader@10.0.0(@babel/core@7.29.0)(webpack@5.105.2(esbuild@0.27.3)): + babel-loader@10.0.0(@babel/core@7.29.0)(webpack@5.105.3(esbuild@0.27.3)): dependencies: '@babel/core': 7.29.0 find-up: 5.0.0 - webpack: 5.105.2(esbuild@0.27.3) + webpack: 5.105.3(esbuild@0.27.3) babel-plugin-polyfill-corejs2@0.4.15(@babel/core@7.29.0): dependencies: @@ -12042,15 +12049,12 @@ snapshots: transitivePeerDependencies: - bare-abort-controller - react-native-b4a - optional: true - bare-os@3.7.0: - optional: true + bare-os@3.7.0: {} bare-path@3.0.0: dependencies: bare-os: 3.7.0 - optional: true bare-stream@2.8.0(bare-events@2.8.2): dependencies: @@ -12061,12 +12065,10 @@ snapshots: transitivePeerDependencies: - bare-abort-controller - react-native-b4a - optional: true bare-url@2.3.2: dependencies: bare-path: 3.0.0 - optional: true base64-js@1.5.1: {} @@ -12501,14 +12503,14 @@ snapshots: dependencies: is-what: 3.14.1 - copy-webpack-plugin@13.0.1(webpack@5.105.2(esbuild@0.27.3)): + copy-webpack-plugin@13.0.1(webpack@5.105.3(esbuild@0.27.3)): dependencies: glob-parent: 6.0.2 normalize-path: 3.0.0 schema-utils: 4.3.3 serialize-javascript: 6.0.2 tinyglobby: 0.2.15 - webpack: 5.105.2(esbuild@0.27.3) + webpack: 5.105.3(esbuild@0.27.3) core-js-compat@3.48.0: dependencies: @@ -12544,7 +12546,7 @@ snapshots: shebang-command: 2.0.0 which: 2.0.2 - css-loader@7.1.4(webpack@5.105.2(esbuild@0.27.3)): + css-loader@7.1.4(webpack@5.105.3(esbuild@0.27.3)): dependencies: icss-utils: 5.1.0(postcss@8.5.6) postcss: 8.5.6 @@ -12555,7 +12557,7 @@ snapshots: postcss-value-parser: 4.2.0 semver: 7.7.4 optionalDependencies: - webpack: 5.105.2(esbuild@0.27.3) + webpack: 5.105.3(esbuild@0.27.3) css-select@6.0.0: dependencies: @@ -13627,7 +13629,7 @@ snapshots: globals@14.0.0: {} - globals@17.3.0: {} + globals@17.4.0: {} globalthis@1.0.4: dependencies: @@ -14405,11 +14407,11 @@ snapshots: picocolors: 1.1.1 shell-quote: 1.8.3 - less-loader@12.3.1(less@4.4.2)(webpack@5.105.2(esbuild@0.27.3)): + less-loader@12.3.1(less@4.4.2)(webpack@5.105.3(esbuild@0.27.3)): dependencies: less: 4.4.2 optionalDependencies: - webpack: 5.105.2(esbuild@0.27.3) + webpack: 5.105.3(esbuild@0.27.3) less@4.4.2: dependencies: @@ -14430,22 +14432,22 @@ snapshots: prelude-ls: 1.2.1 type-check: 0.4.0 - license-webpack-plugin@4.0.2(webpack@5.105.2(esbuild@0.27.3)): + license-webpack-plugin@4.0.2(webpack@5.105.3(esbuild@0.27.3)): dependencies: webpack-sources: 3.3.4 optionalDependencies: - webpack: 5.105.2(esbuild@0.27.3) + webpack: 5.105.3(esbuild@0.27.3) limiter@1.1.5: {} lines-and-columns@1.2.4: {} - listr2@10.1.1: + listr2@10.1.2: dependencies: cli-truncate: 5.2.0 colorette: 2.0.20 eventemitter3: 5.0.4 - log-update: 7.2.0 + log-update: 6.1.0 rfdc: 1.4.1 wrap-ansi: 10.0.0 @@ -14516,13 +14518,13 @@ snapshots: is-unicode-supported: 2.1.0 yoctocolors: 2.1.2 - log-update@7.2.0: + log-update@6.1.0: dependencies: ansi-escapes: 7.3.0 cli-cursor: 5.0.0 - slice-ansi: 8.0.0 + slice-ansi: 7.1.2 strip-ansi: 7.2.0 - wrap-ansi: 10.0.0 + wrap-ansi: 9.0.2 log4js@6.9.1: dependencies: @@ -14658,11 +14660,11 @@ snapshots: mimic-response@3.1.0: {} - mini-css-extract-plugin@2.10.0(webpack@5.105.2(esbuild@0.27.3)): + mini-css-extract-plugin@2.10.0(webpack@5.105.3(esbuild@0.27.3)): dependencies: schema-utils: 4.3.3 tapable: 2.3.0 - webpack: 5.105.2(esbuild@0.27.3) + webpack: 5.105.3(esbuild@0.27.3) minimalistic-assert@1.0.1: {} @@ -14770,7 +14772,7 @@ snapshots: dependencies: array-differ: 4.0.0 array-union: 3.0.1 - minimatch: 10.2.3 + minimatch: 10.2.4 mute-stream@3.0.0: {} @@ -15256,14 +15258,14 @@ snapshots: possible-typed-array-names@1.1.0: {} - postcss-loader@8.2.1(postcss@8.5.6)(typescript@5.9.3)(webpack@5.105.2(esbuild@0.27.3)): + postcss-loader@8.2.1(postcss@8.5.6)(typescript@5.9.3)(webpack@5.105.3(esbuild@0.27.3)): dependencies: cosmiconfig: 9.0.0(typescript@5.9.3) jiti: 2.6.1 postcss: 8.5.6 semver: 7.7.4 optionalDependencies: - webpack: 5.105.2(esbuild@0.27.3) + webpack: 5.105.3(esbuild@0.27.3) transitivePeerDependencies: - typescript @@ -15641,24 +15643,24 @@ snapshots: dependencies: glob: 10.5.0 - rolldown@1.0.0-rc.5: + rolldown@1.0.0-rc.6: dependencies: - '@oxc-project/types': 0.114.0 - '@rolldown/pluginutils': 1.0.0-rc.5 + '@oxc-project/types': 0.115.0 + '@rolldown/pluginutils': 1.0.0-rc.6 optionalDependencies: - '@rolldown/binding-android-arm64': 1.0.0-rc.5 - '@rolldown/binding-darwin-arm64': 1.0.0-rc.5 - '@rolldown/binding-darwin-x64': 1.0.0-rc.5 - '@rolldown/binding-freebsd-x64': 1.0.0-rc.5 - '@rolldown/binding-linux-arm-gnueabihf': 1.0.0-rc.5 - '@rolldown/binding-linux-arm64-gnu': 1.0.0-rc.5 - '@rolldown/binding-linux-arm64-musl': 1.0.0-rc.5 - '@rolldown/binding-linux-x64-gnu': 1.0.0-rc.5 - '@rolldown/binding-linux-x64-musl': 1.0.0-rc.5 - '@rolldown/binding-openharmony-arm64': 1.0.0-rc.5 - '@rolldown/binding-wasm32-wasi': 1.0.0-rc.5 - '@rolldown/binding-win32-arm64-msvc': 1.0.0-rc.5 - '@rolldown/binding-win32-x64-msvc': 1.0.0-rc.5 + '@rolldown/binding-android-arm64': 1.0.0-rc.6 + '@rolldown/binding-darwin-arm64': 1.0.0-rc.6 + '@rolldown/binding-darwin-x64': 1.0.0-rc.6 + '@rolldown/binding-freebsd-x64': 1.0.0-rc.6 + '@rolldown/binding-linux-arm-gnueabihf': 1.0.0-rc.6 + '@rolldown/binding-linux-arm64-gnu': 1.0.0-rc.6 + '@rolldown/binding-linux-arm64-musl': 1.0.0-rc.6 + '@rolldown/binding-linux-x64-gnu': 1.0.0-rc.6 + '@rolldown/binding-linux-x64-musl': 1.0.0-rc.6 + '@rolldown/binding-openharmony-arm64': 1.0.0-rc.6 + '@rolldown/binding-wasm32-wasi': 1.0.0-rc.6 + '@rolldown/binding-win32-arm64-msvc': 1.0.0-rc.6 + '@rolldown/binding-win32-x64-msvc': 1.0.0-rc.6 rollup-license-plugin@3.1.0: dependencies: @@ -15762,12 +15764,12 @@ snapshots: safer-buffer@2.1.2: {} - sass-loader@16.0.7(sass@1.97.3)(webpack@5.105.2(esbuild@0.27.3)): + sass-loader@16.0.7(sass@1.97.3)(webpack@5.105.3(esbuild@0.27.3)): dependencies: neo-async: 2.6.2 optionalDependencies: sass: 1.97.3 - webpack: 5.105.2(esbuild@0.27.3) + webpack: 5.105.3(esbuild@0.27.3) sass@1.97.3: dependencies: @@ -15960,6 +15962,11 @@ snapshots: transitivePeerDependencies: - supports-color + slice-ansi@7.1.2: + dependencies: + ansi-styles: 6.2.3 + is-fullwidth-code-point: 5.1.0 + slice-ansi@8.0.0: dependencies: ansi-styles: 6.2.3 @@ -16037,11 +16044,11 @@ snapshots: source-map-js@1.2.1: {} - source-map-loader@5.0.0(webpack@5.105.2(esbuild@0.27.3)): + source-map-loader@5.0.0(webpack@5.105.3(esbuild@0.27.3)): dependencies: iconv-lite: 0.6.3 source-map-js: 1.2.1 - webpack: 5.105.2(esbuild@0.27.3) + webpack: 5.105.3(esbuild@0.27.3) source-map-support@0.5.21: dependencies: @@ -16264,7 +16271,7 @@ snapshots: tar-fs@3.1.1: dependencies: pump: 3.0.4 - tar-stream: 3.1.7 + tar-stream: 3.1.8 optionalDependencies: bare-fs: 4.5.5 bare-path: 3.0.0 @@ -16282,6 +16289,17 @@ snapshots: - bare-abort-controller - react-native-b4a + tar-stream@3.1.8: + dependencies: + b4a: 1.8.0 + bare-fs: 4.5.5 + fast-fifo: 1.3.2 + streamx: 2.23.0 + transitivePeerDependencies: + - bare-abort-controller + - bare-buffer + - react-native-b4a + tar@7.5.9: dependencies: '@isaacs/fs-minipass': 4.0.1 @@ -16305,16 +16323,15 @@ snapshots: transitivePeerDependencies: - bare-abort-controller - react-native-b4a - optional: true - terser-webpack-plugin@5.3.16(esbuild@0.27.3)(webpack@5.105.2(esbuild@0.27.3)): + terser-webpack-plugin@5.3.16(esbuild@0.27.3)(webpack@5.105.3(esbuild@0.27.3)): dependencies: '@jridgewell/trace-mapping': 0.3.31 jest-worker: 27.5.1 schema-utils: 4.3.3 serialize-javascript: 6.0.2 terser: 5.46.0 - webpack: 5.105.2(esbuild@0.27.3) + webpack: 5.105.3(esbuild@0.27.3) optionalDependencies: esbuild: 0.27.3 @@ -16630,7 +16647,7 @@ snapshots: transitivePeerDependencies: - supports-color - verdaccio@6.2.7(encoding@0.1.13): + verdaccio@6.2.9(encoding@0.1.13): dependencies: '@cypress/request': 3.0.10 '@verdaccio/auth': 8.0.0-next-8.29 @@ -16759,7 +16776,7 @@ snapshots: webidl-conversions@8.0.1: {} - webpack-dev-middleware@7.4.5(tslib@2.8.1)(webpack@5.105.2(esbuild@0.27.3)): + webpack-dev-middleware@7.4.5(tslib@2.8.1)(webpack@5.105.3(esbuild@0.27.3)): dependencies: colorette: 2.0.20 memfs: 4.56.10(tslib@2.8.1) @@ -16768,11 +16785,11 @@ snapshots: range-parser: 1.2.1 schema-utils: 4.3.3 optionalDependencies: - webpack: 5.105.2(esbuild@0.27.3) + webpack: 5.105.3(esbuild@0.27.3) transitivePeerDependencies: - tslib - webpack-dev-server@5.2.3(bufferutil@4.1.0)(tslib@2.8.1)(utf-8-validate@6.0.6)(webpack@5.105.2(esbuild@0.27.3)): + webpack-dev-server@5.2.3(bufferutil@4.1.0)(tslib@2.8.1)(utf-8-validate@6.0.6)(webpack@5.105.3(esbuild@0.27.3)): dependencies: '@types/bonjour': 3.5.13 '@types/connect-history-api-fallback': 1.5.4 @@ -16800,10 +16817,10 @@ snapshots: serve-index: 1.9.2 sockjs: 0.3.24 spdy: 4.0.2 - webpack-dev-middleware: 7.4.5(tslib@2.8.1)(webpack@5.105.2(esbuild@0.27.3)) + webpack-dev-middleware: 7.4.5(tslib@2.8.1)(webpack@5.105.3(esbuild@0.27.3)) ws: 8.19.0(bufferutil@4.1.0)(utf-8-validate@6.0.6) optionalDependencies: - webpack: 5.105.2(esbuild@0.27.3) + webpack: 5.105.3(esbuild@0.27.3) transitivePeerDependencies: - bufferutil - debug @@ -16819,12 +16836,12 @@ snapshots: webpack-sources@3.3.4: {} - webpack-subresource-integrity@5.1.0(webpack@5.105.2(esbuild@0.27.3)): + webpack-subresource-integrity@5.1.0(webpack@5.105.3(esbuild@0.27.3)): dependencies: typed-assert: 1.0.9 - webpack: 5.105.2(esbuild@0.27.3) + webpack: 5.105.3(esbuild@0.27.3) - webpack@5.105.2(esbuild@0.27.3): + webpack@5.105.3(esbuild@0.27.3): dependencies: '@types/eslint-scope': 3.7.7 '@types/estree': 1.0.8 @@ -16848,7 +16865,7 @@ snapshots: neo-async: 2.6.2 schema-utils: 4.3.3 tapable: 2.3.0 - terser-webpack-plugin: 5.3.16(esbuild@0.27.3)(webpack@5.105.2(esbuild@0.27.3)) + terser-webpack-plugin: 5.3.16(esbuild@0.27.3)(webpack@5.105.3(esbuild@0.27.3)) watchpack: 2.5.1 webpack-sources: 3.3.4 transitivePeerDependencies: diff --git a/tests/package.json b/tests/package.json index 9eb906b8cda5..87853142d75c 100644 --- a/tests/package.json +++ b/tests/package.json @@ -2,6 +2,6 @@ "devDependencies": { "@types/tar-stream": "3.1.4", "@angular-devkit/schematics": "workspace:*", - "tar-stream": "3.1.7" + "tar-stream": "3.1.8" } } From 62a2874cc3c1ddcea697178c6588e19e11530fc9 Mon Sep 17 00:00:00 2001 From: Alan Agius <alanagius@google.com> Date: Tue, 3 Mar 2026 21:39:13 +0100 Subject: [PATCH 087/226] ci: delete feature request workflow This will be removed from dev-infra. --- .github/workflows/feature-requests.yml | 21 --------------------- 1 file changed, 21 deletions(-) delete mode 100644 .github/workflows/feature-requests.yml diff --git a/.github/workflows/feature-requests.yml b/.github/workflows/feature-requests.yml deleted file mode 100644 index dc02ea5f6ee2..000000000000 --- a/.github/workflows/feature-requests.yml +++ /dev/null @@ -1,21 +0,0 @@ -name: Feature request triage bot - -# Declare default permissions as read only. -permissions: - contents: read - -on: - schedule: - # Run at 13:00 every day - - cron: '0 13 * * *' - -jobs: - feature_triage: - # To prevent this action from running in forks, we only run it if the repository is exactly the - # angular/angular-cli repository. - if: github.repository == 'angular/angular-cli' - runs-on: ubuntu-latest - steps: - - uses: angular/dev-infra/github-actions/feature-request@9cc477855b9788df6257301074a1629bc3545722 - with: - angular-robot-key: ${{ secrets.ANGULAR_ROBOT_PRIVATE_KEY }} From f6c4e35fdcc5e35d67f72b3c8e1fb665e4f0b2ac Mon Sep 17 00:00:00 2001 From: Angular Robot <angular-robot@google.com> Date: Tue, 3 Mar 2026 22:31:36 +0000 Subject: [PATCH 088/226] build: update dependency aspect_rules_jasmine to v2.0.4 See associated pull request for more information. --- MODULE.bazel | 2 +- MODULE.bazel.lock | 7 ++++--- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/MODULE.bazel b/MODULE.bazel index be1291e2a303..1eeca2d19130 100644 --- a/MODULE.bazel +++ b/MODULE.bazel @@ -14,7 +14,7 @@ bazel_dep(name = "rules_cc", version = "0.2.17") bazel_dep(name = "aspect_bazel_lib", version = "2.22.5") bazel_dep(name = "bazel_skylib", version = "1.9.0") 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 = "rules_angular") git_override( module_name = "rules_angular", diff --git a/MODULE.bazel.lock b/MODULE.bazel.lock index 67e0b7c02deb..1f5cc58c58cf 100644 --- a/MODULE.bazel.lock +++ b/MODULE.bazel.lock @@ -22,7 +22,8 @@ "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", @@ -637,7 +638,7 @@ "@@aspect_tools_telemetry+//:extension.bzl%telemetry": { "general": { "bzlTransitiveDigest": "cl5A2O84vDL6Tt+Qga8FCj1DUDGqn+e7ly5rZ+4xvcc=", - "usagesDigest": "/e/KYM5sjJPlgbDVQclkrYIlSJA/gt68f4vYfSZSvkQ=", + "usagesDigest": "FyfEmerc0O7uyjsX5yrhDDHz3grA5p9rBWtVLQGMSxQ=", "recordedFileInputs": {}, "recordedDirentsInputs": {}, "envVariables": {}, @@ -649,7 +650,7 @@ "aspect_rules_js": "2.9.2", "aspect_rules_ts": "3.8.5", "aspect_rules_esbuild": "0.25.0", - "aspect_rules_jasmine": "2.0.3", + "aspect_rules_jasmine": "2.0.4", "aspect_tools_telemetry": "0.3.3" } } From 2b484daf2d19dd3c8f131c6770f7899b1996eae5 Mon Sep 17 00:00:00 2001 From: Joey Perrott <josephperrott@gmail.com> Date: Tue, 3 Mar 2026 21:51:47 +0000 Subject: [PATCH 089/226] ci: create gemini code reviewer configuration --- .gemini/config.yaml | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 .gemini/config.yaml diff --git a/.gemini/config.yaml b/.gemini/config.yaml new file mode 100644 index 000000000000..9f4eb5f02da3 --- /dev/null +++ b/.gemini/config.yaml @@ -0,0 +1,11 @@ +have_fun: false +code_review: + disable: false + comment_severity_threshold: MEDIUM + max_review_comments: -1 + pull_request_opened: + help: false + summary: false + code_review: true + include_drafts: false +ignore_patterns: [] From f4c9f2f8183081c08520325ca241ee78dfbf0d7e Mon Sep 17 00:00:00 2001 From: Angular Robot <angular-robot@google.com> Date: Tue, 3 Mar 2026 22:09:04 +0000 Subject: [PATCH 090/226] build: update dependency copy-webpack-plugin to v14 See associated pull request for more information. --- .../angular_devkit/build_angular/package.json | 2 +- pnpm-lock.yaml | 20 ++++++++++++------- 2 files changed, 14 insertions(+), 8 deletions(-) diff --git a/packages/angular_devkit/build_angular/package.json b/packages/angular_devkit/build_angular/package.json index df5671ae370b..aa877a53c81b 100644 --- a/packages/angular_devkit/build_angular/package.json +++ b/packages/angular_devkit/build_angular/package.json @@ -26,7 +26,7 @@ "autoprefixer": "10.4.27", "babel-loader": "10.0.0", "browserslist": "^4.26.0", - "copy-webpack-plugin": "13.0.1", + "copy-webpack-plugin": "14.0.0", "css-loader": "7.1.4", "esbuild-wasm": "0.27.3", "http-proxy-middleware": "3.0.5", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index baabaa028c75..a0db4d4d75d3 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -608,8 +608,8 @@ importers: specifier: ^4.26.0 version: 4.28.1 copy-webpack-plugin: - specifier: 13.0.1 - version: 13.0.1(webpack@5.105.3(esbuild@0.27.3)) + specifier: 14.0.0 + version: 14.0.0(webpack@5.105.3(esbuild@0.27.3)) css-loader: specifier: 7.1.4 version: 7.1.4(webpack@5.105.3(esbuild@0.27.3)) @@ -4449,9 +4449,9 @@ packages: copy-anything@2.0.6: resolution: {integrity: sha512-1j20GZTsvKNkc4BY3NpMOM8tt///wY3FpIzozTOFO2ffuZcV61nojHXVKIy3WM+7ADCy5FVhdZYHYDdgTU0yJw==} - copy-webpack-plugin@13.0.1: - resolution: {integrity: sha512-J+YV3WfhY6W/Xf9h+J1znYuqTye2xkBUIGyTPWuBAT27qajBa5mR4f8WBmfDY3YjRftT2kqZZiLi1qf0H+UOFw==} - engines: {node: '>= 18.12.0'} + copy-webpack-plugin@14.0.0: + resolution: {integrity: sha512-3JLW90aBGeaTLpM7mYQKpnVdgsUZRExY55giiZgLuX/xTQRUs1dOCwbBnWnvY6Q6rfZoXMNwzOQJCSZPppfqXA==} + engines: {node: '>= 20.9.0'} peerDependencies: webpack: ^5.1.0 @@ -7314,6 +7314,10 @@ packages: serialize-javascript@6.0.2: resolution: {integrity: sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==} + serialize-javascript@7.0.3: + resolution: {integrity: sha512-h+cZ/XXarqDgCjo+YSyQU/ulDEESGGf8AMK9pPNmhNSl/FzPl6L8pMp1leca5z6NuG6tvV/auC8/43tmovowww==} + engines: {node: '>=20.0.0'} + serve-index@1.9.2: resolution: {integrity: sha512-KDj11HScOaLmrPxl70KYNW1PksP4Nb/CLL2yvC+Qd2kHMPEEpfc4Re2e4FOay+bC/+XQl/7zAcWON3JVo5v3KQ==} engines: {node: '>= 0.8.0'} @@ -12503,12 +12507,12 @@ snapshots: dependencies: is-what: 3.14.1 - copy-webpack-plugin@13.0.1(webpack@5.105.3(esbuild@0.27.3)): + copy-webpack-plugin@14.0.0(webpack@5.105.3(esbuild@0.27.3)): dependencies: glob-parent: 6.0.2 normalize-path: 3.0.0 schema-utils: 4.3.3 - serialize-javascript: 6.0.2 + serialize-javascript: 7.0.3 tinyglobby: 0.2.15 webpack: 5.105.3(esbuild@0.27.3) @@ -15849,6 +15853,8 @@ snapshots: dependencies: randombytes: 2.1.0 + serialize-javascript@7.0.3: {} + serve-index@1.9.2: dependencies: accepts: 1.3.8 From 6293caeb75966b2dc683b9e9590cfb347eb4373e Mon Sep 17 00:00:00 2001 From: Angular Robot <angular-robot@google.com> Date: Wed, 4 Mar 2026 08:47:49 +0000 Subject: [PATCH 091/226] build: update cross-repo angular dependencies See associated pull request for more information. --- .../assistant-to-the-branch-manager.yml | 2 +- .github/workflows/ci.yml | 52 +- .github/workflows/dev-infra.yml | 4 +- .github/workflows/perf.yml | 6 +- .github/workflows/pr.yml | 44 +- MODULE.bazel | 2 +- MODULE.bazel.lock | 3 +- package.json | 2 +- pnpm-lock.yaml | 701 +++++++++--------- tests/e2e/ng-snapshot/package.json | 32 +- 10 files changed, 427 insertions(+), 421 deletions(-) diff --git a/.github/workflows/assistant-to-the-branch-manager.yml b/.github/workflows/assistant-to-the-branch-manager.yml index eada34703004..529f1e6d51d7 100644 --- a/.github/workflows/assistant-to-the-branch-manager.yml +++ b/.github/workflows/assistant-to-the-branch-manager.yml @@ -17,6 +17,6 @@ jobs: - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 with: persist-credentials: false - - uses: angular/dev-infra/github-actions/branch-manager@9cc477855b9788df6257301074a1629bc3545722 + - uses: angular/dev-infra/github-actions/branch-manager@63fd18d4726829e65f6abe6f15c0fe79f63f1dec with: angular-robot-key: ${{ secrets.ANGULAR_ROBOT_PRIVATE_KEY }} diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 2b2ef8b337ab..eef6c834c53a 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -21,9 +21,9 @@ jobs: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@9cc477855b9788df6257301074a1629bc3545722 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@63fd18d4726829e65f6abe6f15c0fe79f63f1dec - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@9cc477855b9788df6257301074a1629bc3545722 + uses: angular/dev-infra/github-actions/bazel/setup@63fd18d4726829e65f6abe6f15c0fe79f63f1dec - name: Install node modules run: pnpm install --frozen-lockfile - name: Generate JSON schema types @@ -44,11 +44,11 @@ jobs: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@9cc477855b9788df6257301074a1629bc3545722 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@63fd18d4726829e65f6abe6f15c0fe79f63f1dec - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@9cc477855b9788df6257301074a1629bc3545722 + uses: angular/dev-infra/github-actions/bazel/setup@63fd18d4726829e65f6abe6f15c0fe79f63f1dec - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@9cc477855b9788df6257301074a1629bc3545722 + uses: angular/dev-infra/github-actions/bazel/configure-remote@63fd18d4726829e65f6abe6f15c0fe79f63f1dec with: google_credential: ${{ secrets.RBE_TRUSTED_BUILDS_USER }} - name: Install node modules @@ -61,11 +61,11 @@ jobs: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@9cc477855b9788df6257301074a1629bc3545722 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@63fd18d4726829e65f6abe6f15c0fe79f63f1dec - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@9cc477855b9788df6257301074a1629bc3545722 + uses: angular/dev-infra/github-actions/bazel/setup@63fd18d4726829e65f6abe6f15c0fe79f63f1dec - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@9cc477855b9788df6257301074a1629bc3545722 + uses: angular/dev-infra/github-actions/bazel/configure-remote@63fd18d4726829e65f6abe6f15c0fe79f63f1dec with: google_credential: ${{ secrets.RBE_TRUSTED_BUILDS_USER }} - name: Install node modules @@ -84,13 +84,13 @@ jobs: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@9cc477855b9788df6257301074a1629bc3545722 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@63fd18d4726829e65f6abe6f15c0fe79f63f1dec - name: Install node modules run: pnpm install --frozen-lockfile - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@9cc477855b9788df6257301074a1629bc3545722 + uses: angular/dev-infra/github-actions/bazel/setup@63fd18d4726829e65f6abe6f15c0fe79f63f1dec - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@9cc477855b9788df6257301074a1629bc3545722 + uses: angular/dev-infra/github-actions/bazel/configure-remote@63fd18d4726829e65f6abe6f15c0fe79f63f1dec with: google_credential: ${{ secrets.RBE_TRUSTED_BUILDS_USER }} - name: Run CLI E2E tests @@ -100,11 +100,11 @@ jobs: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@9cc477855b9788df6257301074a1629bc3545722 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@63fd18d4726829e65f6abe6f15c0fe79f63f1dec - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@9cc477855b9788df6257301074a1629bc3545722 + uses: angular/dev-infra/github-actions/bazel/setup@63fd18d4726829e65f6abe6f15c0fe79f63f1dec - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@9cc477855b9788df6257301074a1629bc3545722 + uses: angular/dev-infra/github-actions/bazel/configure-remote@63fd18d4726829e65f6abe6f15c0fe79f63f1dec with: google_credential: ${{ secrets.RBE_TRUSTED_BUILDS_USER }} - name: Install node modules @@ -137,7 +137,7 @@ jobs: runs-on: windows-2025 steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@9cc477855b9788df6257301074a1629bc3545722 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@63fd18d4726829e65f6abe6f15c0fe79f63f1dec - name: Install node modules run: pnpm install --frozen-lockfile - name: Download built Windows E2E tests @@ -164,13 +164,13 @@ jobs: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@9cc477855b9788df6257301074a1629bc3545722 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@63fd18d4726829e65f6abe6f15c0fe79f63f1dec - name: Install node modules run: pnpm install --frozen-lockfile - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@9cc477855b9788df6257301074a1629bc3545722 + uses: angular/dev-infra/github-actions/bazel/setup@63fd18d4726829e65f6abe6f15c0fe79f63f1dec - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@9cc477855b9788df6257301074a1629bc3545722 + uses: angular/dev-infra/github-actions/bazel/configure-remote@63fd18d4726829e65f6abe6f15c0fe79f63f1dec with: google_credential: ${{ secrets.RBE_TRUSTED_BUILDS_USER }} - name: Run CLI E2E tests @@ -188,13 +188,13 @@ jobs: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@9cc477855b9788df6257301074a1629bc3545722 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@63fd18d4726829e65f6abe6f15c0fe79f63f1dec - name: Install node modules run: pnpm install --frozen-lockfile - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@9cc477855b9788df6257301074a1629bc3545722 + uses: angular/dev-infra/github-actions/bazel/setup@63fd18d4726829e65f6abe6f15c0fe79f63f1dec - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@9cc477855b9788df6257301074a1629bc3545722 + uses: angular/dev-infra/github-actions/bazel/configure-remote@63fd18d4726829e65f6abe6f15c0fe79f63f1dec with: google_credential: ${{ secrets.RBE_TRUSTED_BUILDS_USER }} - name: Run CLI E2E tests @@ -208,13 +208,13 @@ jobs: SAUCE_TUNNEL_IDENTIFIER: angular-cli-${{ github.workflow }}-${{ github.run_number }} steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@9cc477855b9788df6257301074a1629bc3545722 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@63fd18d4726829e65f6abe6f15c0fe79f63f1dec - name: Install node modules run: pnpm install --frozen-lockfile - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@9cc477855b9788df6257301074a1629bc3545722 + uses: angular/dev-infra/github-actions/bazel/setup@63fd18d4726829e65f6abe6f15c0fe79f63f1dec - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@9cc477855b9788df6257301074a1629bc3545722 + uses: angular/dev-infra/github-actions/bazel/configure-remote@63fd18d4726829e65f6abe6f15c0fe79f63f1dec with: google_credential: ${{ secrets.RBE_TRUSTED_BUILDS_USER }} - name: Run E2E Browser tests @@ -244,11 +244,11 @@ jobs: CIRCLE_BRANCH: ${{ github.ref_name }} steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@9cc477855b9788df6257301074a1629bc3545722 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@63fd18d4726829e65f6abe6f15c0fe79f63f1dec - name: Install node modules run: pnpm install --frozen-lockfile - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@9cc477855b9788df6257301074a1629bc3545722 + uses: angular/dev-infra/github-actions/bazel/setup@63fd18d4726829e65f6abe6f15c0fe79f63f1dec - run: pnpm admin snapshots --verbose env: SNAPSHOT_BUILDS_GITHUB_TOKEN: ${{ secrets.SNAPSHOT_BUILDS_GITHUB_TOKEN }} diff --git a/.github/workflows/dev-infra.yml b/.github/workflows/dev-infra.yml index 55b7a545c05b..cfcd43f76324 100644 --- a/.github/workflows/dev-infra.yml +++ b/.github/workflows/dev-infra.yml @@ -13,13 +13,13 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - - uses: angular/dev-infra/github-actions/pull-request-labeling@9cc477855b9788df6257301074a1629bc3545722 + - uses: angular/dev-infra/github-actions/pull-request-labeling@63fd18d4726829e65f6abe6f15c0fe79f63f1dec with: angular-robot-key: ${{ secrets.ANGULAR_ROBOT_PRIVATE_KEY }} post_approval_changes: runs-on: ubuntu-latest steps: - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - - uses: angular/dev-infra/github-actions/post-approval-changes@9cc477855b9788df6257301074a1629bc3545722 + - uses: angular/dev-infra/github-actions/post-approval-changes@63fd18d4726829e65f6abe6f15c0fe79f63f1dec with: angular-robot-key: ${{ secrets.ANGULAR_ROBOT_PRIVATE_KEY }} diff --git a/.github/workflows/perf.yml b/.github/workflows/perf.yml index 9cfe7d19ebed..b4d8817aa7c6 100644 --- a/.github/workflows/perf.yml +++ b/.github/workflows/perf.yml @@ -23,7 +23,7 @@ jobs: workflows: ${{ steps.workflows.outputs.workflows }} steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@9cc477855b9788df6257301074a1629bc3545722 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@63fd18d4726829e65f6abe6f15c0fe79f63f1dec - name: Install node modules run: pnpm install --frozen-lockfile - id: workflows @@ -38,9 +38,9 @@ jobs: workflow: ${{ fromJSON(needs.list.outputs.workflows) }} steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@9cc477855b9788df6257301074a1629bc3545722 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@63fd18d4726829e65f6abe6f15c0fe79f63f1dec - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@9cc477855b9788df6257301074a1629bc3545722 + uses: angular/dev-infra/github-actions/bazel/setup@63fd18d4726829e65f6abe6f15c0fe79f63f1dec - name: Install node modules run: pnpm install --frozen-lockfile # We utilize the google-github-actions/auth action to allow us to get an active credential using workflow diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml index e3da41b25686..087e7e0b55ce 100644 --- a/.github/workflows/pr.yml +++ b/.github/workflows/pr.yml @@ -34,9 +34,9 @@ jobs: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@9cc477855b9788df6257301074a1629bc3545722 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@63fd18d4726829e65f6abe6f15c0fe79f63f1dec - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@9cc477855b9788df6257301074a1629bc3545722 + uses: angular/dev-infra/github-actions/bazel/setup@63fd18d4726829e65f6abe6f15c0fe79f63f1dec - name: Setup ESLint Caching uses: actions/cache@cdf6c1fa76f9f475f3d7449005a359c84ca0f306 # v5.0.3 with: @@ -66,17 +66,17 @@ jobs: # it has been merged. run: pnpm ng-dev format changed --check ${{ github.event.pull_request.base.sha }} - name: Check Package Licenses - uses: angular/dev-infra/github-actions/linting/licenses@9cc477855b9788df6257301074a1629bc3545722 + uses: angular/dev-infra/github-actions/linting/licenses@63fd18d4726829e65f6abe6f15c0fe79f63f1dec build: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@9cc477855b9788df6257301074a1629bc3545722 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@63fd18d4726829e65f6abe6f15c0fe79f63f1dec - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@9cc477855b9788df6257301074a1629bc3545722 + uses: angular/dev-infra/github-actions/bazel/setup@63fd18d4726829e65f6abe6f15c0fe79f63f1dec - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@9cc477855b9788df6257301074a1629bc3545722 + uses: angular/dev-infra/github-actions/bazel/configure-remote@63fd18d4726829e65f6abe6f15c0fe79f63f1dec - name: Install node modules run: pnpm install --frozen-lockfile - name: Build release targets @@ -93,11 +93,11 @@ jobs: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@9cc477855b9788df6257301074a1629bc3545722 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@63fd18d4726829e65f6abe6f15c0fe79f63f1dec - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@9cc477855b9788df6257301074a1629bc3545722 + uses: angular/dev-infra/github-actions/bazel/setup@63fd18d4726829e65f6abe6f15c0fe79f63f1dec - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@9cc477855b9788df6257301074a1629bc3545722 + uses: angular/dev-infra/github-actions/bazel/configure-remote@63fd18d4726829e65f6abe6f15c0fe79f63f1dec - name: Install node modules run: pnpm install --frozen-lockfile - name: Run module and package tests @@ -114,13 +114,13 @@ jobs: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@9cc477855b9788df6257301074a1629bc3545722 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@63fd18d4726829e65f6abe6f15c0fe79f63f1dec - name: Install node modules run: pnpm install --frozen-lockfile - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@9cc477855b9788df6257301074a1629bc3545722 + uses: angular/dev-infra/github-actions/bazel/setup@63fd18d4726829e65f6abe6f15c0fe79f63f1dec - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@9cc477855b9788df6257301074a1629bc3545722 + uses: angular/dev-infra/github-actions/bazel/configure-remote@63fd18d4726829e65f6abe6f15c0fe79f63f1dec - name: Run CLI E2E tests run: pnpm bazel test --test_env=E2E_SHARD_TOTAL=6 --test_env=E2E_SHARD_INDEX=${{ matrix.shard }} --config=e2e //tests:e2e.${{ matrix.subset }}_node${{ matrix.node }} @@ -128,11 +128,11 @@ jobs: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@9cc477855b9788df6257301074a1629bc3545722 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@63fd18d4726829e65f6abe6f15c0fe79f63f1dec - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@9cc477855b9788df6257301074a1629bc3545722 + uses: angular/dev-infra/github-actions/bazel/setup@63fd18d4726829e65f6abe6f15c0fe79f63f1dec - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@9cc477855b9788df6257301074a1629bc3545722 + uses: angular/dev-infra/github-actions/bazel/configure-remote@63fd18d4726829e65f6abe6f15c0fe79f63f1dec - name: Install node modules run: pnpm install --frozen-lockfile - name: Build E2E tests for Windows on Linux @@ -156,7 +156,7 @@ jobs: runs-on: windows-2025 steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@9cc477855b9788df6257301074a1629bc3545722 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@63fd18d4726829e65f6abe6f15c0fe79f63f1dec - name: Install node modules run: pnpm install --frozen-lockfile - name: Download built Windows E2E tests @@ -183,13 +183,13 @@ jobs: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@9cc477855b9788df6257301074a1629bc3545722 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@63fd18d4726829e65f6abe6f15c0fe79f63f1dec - name: Install node modules run: pnpm install --frozen-lockfile - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@9cc477855b9788df6257301074a1629bc3545722 + uses: angular/dev-infra/github-actions/bazel/setup@63fd18d4726829e65f6abe6f15c0fe79f63f1dec - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@9cc477855b9788df6257301074a1629bc3545722 + uses: angular/dev-infra/github-actions/bazel/configure-remote@63fd18d4726829e65f6abe6f15c0fe79f63f1dec - name: Run CLI E2E tests run: pnpm bazel test --test_env=E2E_SHARD_TOTAL=3 --test_env=E2E_SHARD_INDEX=${{ matrix.shard }} --config=e2e //tests:e2e.${{ matrix.subset }}_node${{ matrix.node }} @@ -205,12 +205,12 @@ jobs: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@9cc477855b9788df6257301074a1629bc3545722 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@63fd18d4726829e65f6abe6f15c0fe79f63f1dec - name: Install node modules run: pnpm install --frozen-lockfile - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@9cc477855b9788df6257301074a1629bc3545722 + uses: angular/dev-infra/github-actions/bazel/setup@63fd18d4726829e65f6abe6f15c0fe79f63f1dec - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@9cc477855b9788df6257301074a1629bc3545722 + uses: angular/dev-infra/github-actions/bazel/configure-remote@63fd18d4726829e65f6abe6f15c0fe79f63f1dec - name: Run CLI E2E tests run: pnpm bazel test --test_env=E2E_SHARD_TOTAL=6 --test_env=E2E_SHARD_INDEX=${{ matrix.shard }} --config=e2e //tests:e2e.snapshots.${{ matrix.subset }}_node${{ matrix.node }} diff --git a/MODULE.bazel b/MODULE.bazel index 1eeca2d19130..b7cbca0be3dc 100644 --- a/MODULE.bazel +++ b/MODULE.bazel @@ -25,7 +25,7 @@ git_override( bazel_dep(name = "devinfra") git_override( module_name = "devinfra", - commit = "9cc477855b9788df6257301074a1629bc3545722", + commit = "63fd18d4726829e65f6abe6f15c0fe79f63f1dec", remote = "https://github.com/angular/dev-infra.git", ) diff --git a/MODULE.bazel.lock b/MODULE.bazel.lock index 1f5cc58c58cf..90379b2bd8eb 100644 --- a/MODULE.bazel.lock +++ b/MODULE.bazel.lock @@ -21,7 +21,6 @@ "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.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", @@ -418,7 +417,7 @@ "@@aspect_rules_js+//npm:extensions.bzl%pnpm": { "general": { "bzlTransitiveDigest": "9Zmqluz9ltvCoc6pskOslTkQpkH6CIINjWVkgam9aa4=", - "usagesDigest": "/hSZVSDQaoDMng/HxW0ZY0VCHXyuKHlo2Q/gRZKnObQ=", + "usagesDigest": "7YJUf9JYy8m5TzTHJcA+pv3PiF7bwtuR5NRtkllp6O0=", "recordedFileInputs": {}, "recordedDirentsInputs": {}, "envVariables": {}, diff --git a/package.json b/package.json index e8e765270e90..8a73b94dd8b1 100644 --- a/package.json +++ b/package.json @@ -51,7 +51,7 @@ "@angular/forms": "21.2.0-rc.0", "@angular/localize": "21.2.0-rc.0", "@angular/material": "21.2.0-rc.0", - "@angular/ng-dev": "https://github.com/angular/dev-infra-private-ng-dev-builds.git#c78d7a03ae1ca76d2946651d0dd7f476f09b4374", + "@angular/ng-dev": "https://github.com/angular/dev-infra-private-ng-dev-builds.git#363cd055209d441778715bb625b92b48323bb38e", "@angular/platform-browser": "21.2.0-rc.0", "@angular/platform-server": "21.2.0-rc.0", "@angular/router": "21.2.0-rc.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index a0db4d4d75d3..9b327bac466a 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -47,8 +47,8 @@ importers: specifier: 21.2.0-rc.0 version: 21.2.0-rc.0(b10e235d889ab235dc2911d6ec167f08) '@angular/ng-dev': - specifier: https://github.com/angular/dev-infra-private-ng-dev-builds.git#c78d7a03ae1ca76d2946651d0dd7f476f09b4374 - version: https://codeload.github.com/angular/dev-infra-private-ng-dev-builds/tar.gz/c78d7a03ae1ca76d2946651d0dd7f476f09b4374(@modelcontextprotocol/sdk@1.27.1(zod@4.3.6)) + specifier: https://github.com/angular/dev-infra-private-ng-dev-builds.git#363cd055209d441778715bb625b92b48323bb38e + version: https://codeload.github.com/angular/dev-infra-private-ng-dev-builds/tar.gz/363cd055209d441778715bb625b92b48323bb38e(@modelcontextprotocol/sdk@1.27.1(zod@4.3.6)) '@angular/platform-browser': specifier: 21.2.0-rc.0 version: 21.2.0-rc.0(@angular/animations@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1)) @@ -309,7 +309,7 @@ importers: version: link:../../../packages/angular/ssr '@vitest/coverage-v8': specifier: 4.0.18 - version: 4.0.18(vitest@4.0.18(@opentelemetry/api@1.9.0)(@types/node@24.10.13)(jiti@2.6.1)(jsdom@28.1.0)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)) + version: 4.0.18(vitest@4.0.18(@opentelemetry/api@1.9.0)(@types/node@24.11.0)(jiti@2.6.1)(jsdom@28.1.0)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)) browser-sync: specifier: 3.0.4 version: 3.0.4(bufferutil@4.1.0)(utf-8-validate@6.0.6) @@ -321,7 +321,7 @@ importers: version: 7.8.2 vitest: specifier: 4.0.18 - version: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@24.10.13)(jiti@2.6.1)(jsdom@28.1.0)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) + version: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@24.11.0)(jiti@2.6.1)(jsdom@28.1.0)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) packages/angular/build: dependencies: @@ -342,10 +342,10 @@ importers: version: 7.24.7 '@inquirer/confirm': specifier: 6.0.8 - version: 6.0.8(@types/node@24.10.13) + version: 6.0.8(@types/node@24.11.0) '@vitejs/plugin-basic-ssl': specifier: 2.1.4 - version: 2.1.4(vite@7.3.1(@types/node@24.10.13)(jiti@2.6.1)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)) + version: 2.1.4(vite@7.3.1(@types/node@24.11.0)(jiti@2.6.1)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)) beasties: specifier: 0.4.1 version: 0.4.1 @@ -399,7 +399,7 @@ importers: version: 0.2.15 vite: specifier: 7.3.1 - version: 7.3.1(@types/node@24.10.13)(jiti@2.6.1)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) + version: 7.3.1(@types/node@24.11.0)(jiti@2.6.1)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) watchpack: specifier: 2.5.1 version: 2.5.1 @@ -427,7 +427,7 @@ importers: version: 7.8.2 vitest: specifier: 4.0.18 - version: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@24.10.13)(jiti@2.6.1)(jsdom@28.1.0)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) + version: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@24.11.0)(jiti@2.6.1)(jsdom@28.1.0)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) optionalDependencies: lmdb: specifier: 3.5.1 @@ -446,10 +446,10 @@ importers: version: link:../../angular_devkit/schematics '@inquirer/prompts': specifier: 8.3.0 - version: 8.3.0(@types/node@24.10.13) + version: 8.3.0(@types/node@24.11.0) '@listr2/prompt-adapter-inquirer': specifier: 4.1.2 - version: 4.1.2(@inquirer/prompts@8.3.0(@types/node@24.10.13))(@types/node@24.10.13)(listr2@10.1.2) + version: 4.1.2(@inquirer/prompts@8.3.0(@types/node@24.11.0))(@types/node@24.11.0)(listr2@10.1.2) '@modelcontextprotocol/sdk': specifier: 1.27.1 version: 1.27.1(zod@4.3.6) @@ -799,7 +799,7 @@ importers: version: link:../schematics '@inquirer/prompts': specifier: 8.3.0 - version: 8.3.0(@types/node@24.10.13) + version: 8.3.0(@types/node@24.11.0) packages/ngtools/webpack: devDependencies: @@ -996,9 +996,9 @@ packages: '@angular/platform-browser': ^21.0.0-0 || ^21.1.0-0 || ^21.2.0-0 || ^21.3.0-0 || ^22.0.0-0 rxjs: ^6.5.3 || ^7.4.0 - '@angular/ng-dev@https://codeload.github.com/angular/dev-infra-private-ng-dev-builds/tar.gz/c78d7a03ae1ca76d2946651d0dd7f476f09b4374': - resolution: {tarball: https://codeload.github.com/angular/dev-infra-private-ng-dev-builds/tar.gz/c78d7a03ae1ca76d2946651d0dd7f476f09b4374} - version: 0.0.0-61f9fe81614db102d95bb9bcb9909a304c6e6d10 + '@angular/ng-dev@https://codeload.github.com/angular/dev-infra-private-ng-dev-builds/tar.gz/363cd055209d441778715bb625b92b48323bb38e': + resolution: {tarball: https://codeload.github.com/angular/dev-infra-private-ng-dev-builds/tar.gz/363cd055209d441778715bb625b92b48323bb38e} + version: 0.0.0-153cb4797250a059dddcf0469b0b13cea116b965 hasBin: true '@angular/platform-browser@21.2.0-rc.0': @@ -1574,12 +1574,12 @@ packages: resolution: {integrity: sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==} engines: {node: '>=0.1.90'} - '@conventional-changelog/git-client@1.0.1': - resolution: {integrity: sha512-PJEqBwAleffCMETaVm/fUgHldzBE35JFk3/9LL6NUA5EXa3qednu+UT6M7E5iBu3zIQZCULYIiZ90fBYHt6xUw==} + '@conventional-changelog/git-client@2.6.0': + resolution: {integrity: sha512-T+uPDciKf0/ioNNDpMGc8FDsehJClZP0yR3Q5MN6wE/Y/1QZ7F+80OgznnTCOlMEG4AV0LvH2UJi3C/nBnaBUg==} engines: {node: '>=18'} peerDependencies: conventional-commits-filter: ^5.0.0 - conventional-commits-parser: ^6.0.0 + conventional-commits-parser: ^6.3.0 peerDependenciesMeta: conventional-commits-filter: optional: true @@ -1851,28 +1851,28 @@ packages: '@noble/hashes': optional: true - '@firebase/ai@2.8.0': - resolution: {integrity: sha512-grWYGFPsSo+pt+6CYeKR0kWnUfoLLS3xgWPvNrhAS5EPxl6xWq7+HjDZqX24yLneETyl45AVgDsTbVgxeWeRfg==} + '@firebase/ai@2.9.0': + resolution: {integrity: sha512-NPvBBuvdGo9x3esnABAucFYmqbBmXvyTMimBq2PCuLZbdANZoHzGlx7vfzbwNDaEtCBq4RGGNMliLIv6bZ+PtA==} engines: {node: '>=20.0.0'} peerDependencies: '@firebase/app': 0.x '@firebase/app-types': 0.x - '@firebase/analytics-compat@0.2.25': - resolution: {integrity: sha512-fdzoaG0BEKbqksRDhmf4JoyZf16Wosrl0Y7tbZtJyVDOOwziE0vrFjmZuTdviL0yhak+Nco6rMsUUbkbD+qb6Q==} + '@firebase/analytics-compat@0.2.26': + resolution: {integrity: sha512-0j2ruLOoVSwwcXAF53AMoniJKnkwiTjGVfic5LDzqiRkR13vb5j6TXMeix787zbLeQtN/m1883Yv1TxI0gItbA==} peerDependencies: '@firebase/app-compat': 0.x '@firebase/analytics-types@0.8.3': resolution: {integrity: sha512-VrIp/d8iq2g501qO46uGz3hjbDb8xzYMrbu8Tp0ovzIzrvJZ2fvmj649gTjge/b7cCCcjT0H37g1gVtlNhnkbg==} - '@firebase/analytics@0.10.19': - resolution: {integrity: sha512-3wU676fh60gaiVYQEEXsbGS4HbF2XsiBphyvvqDbtC1U4/dO4coshbYktcCHq+HFaGIK07iHOh4pME0hEq1fcg==} + '@firebase/analytics@0.10.20': + resolution: {integrity: sha512-adGTNVUWH5q66tI/OQuKLSN6mamPpfYhj0radlH2xt+3eL6NFPtXoOs+ulvs+UsmK27vNFx5FjRDfWk+TyduHg==} peerDependencies: '@firebase/app': 0.x - '@firebase/app-check-compat@0.4.0': - resolution: {integrity: sha512-UfK2Q8RJNjYM/8MFORltZRG9lJj11k0nW84rrffiKvcJxLf1jf6IEjCIkCamykHE73C6BwqhVfhIBs69GXQV0g==} + '@firebase/app-check-compat@0.4.1': + resolution: {integrity: sha512-yjSvSl5B1u4CirnxhzirN1uiTRCRfx+/qtfbyeyI+8Cx8Cw1RWAIO/OqytPSVwLYbJJ1vEC3EHfxazRaMoWKaA==} engines: {node: '>=20.0.0'} peerDependencies: '@firebase/app-compat': 0.x @@ -1883,25 +1883,25 @@ packages: '@firebase/app-check-types@0.5.3': resolution: {integrity: sha512-hyl5rKSj0QmwPdsAxrI5x1otDlByQ7bvNvVt8G/XPO2CSwE++rmSVf3VEhaeOR4J8ZFaF0Z0NDSmLejPweZ3ng==} - '@firebase/app-check@0.11.0': - resolution: {integrity: sha512-XAvALQayUMBJo58U/rxW02IhsesaxxfWVmVkauZvGEz3vOAjMEQnzFlyblqkc2iAaO82uJ2ZVyZv9XzPfxjJ6w==} + '@firebase/app-check@0.11.1': + resolution: {integrity: sha512-gmKfwQ2k8aUQlOyRshc+fOQLq0OwUmibIZvpuY1RDNu2ho0aTMlwxOuEiJeYOs7AxzhSx7gnXPFNsXCFbnvXUQ==} engines: {node: '>=20.0.0'} peerDependencies: '@firebase/app': 0.x - '@firebase/app-compat@0.5.8': - resolution: {integrity: sha512-4De6SUZ36zozl9kh5rZSxKWULpgty27rMzZ6x+xkoo7+NWyhWyFdsdvhFsWhTw/9GGj0wXIcbTjwHYCUIUuHyg==} + '@firebase/app-compat@0.5.9': + resolution: {integrity: sha512-e5LzqjO69/N2z7XcJeuMzIp4wWnW696dQeaHAUpQvGk89gIWHAIvG6W+mA3UotGW6jBoqdppEJ9DnuwbcBByug==} engines: {node: '>=20.0.0'} '@firebase/app-types@0.9.3': resolution: {integrity: sha512-kRVpIl4vVGJ4baogMDINbyrIOtOxqhkZQg4jTq3l8Lw6WSk0xfpEYzezFu+Kl4ve4fbPl79dvwRtaFqAC/ucCw==} - '@firebase/app@0.14.8': - resolution: {integrity: sha512-WiE9uCGRLUnShdjb9iP20sA3ToWrBbNXr14/N5mow7Nls9dmKgfGaGX5cynLvrltxq2OrDLh1VDNaUgsnS/k/g==} + '@firebase/app@0.14.9': + resolution: {integrity: sha512-3gtUX0e584MYkKBQMgSECMvE1Dwzg+eONefDQ0wxVSe5YMBsZwdN5pL7UapwWBlV8+i8QCztF9TP947tEjZAGA==} engines: {node: '>=20.0.0'} - '@firebase/auth-compat@0.6.2': - resolution: {integrity: sha512-8UhCzF6pav9bw/eXA8Zy1QAKssPRYEYXaWagie1ewLTwHkXv6bKp/j6/IwzSYQP67sy/BMFXIFaCCsoXzFLr7A==} + '@firebase/auth-compat@0.6.3': + resolution: {integrity: sha512-nHOkupcYuGVxI1AJJ/OBhLPaRokbP14Gq4nkkoVvf1yvuREEWqdnrYB/CdsSnPxHMAnn5wJIKngxBF9jNX7s/Q==} engines: {node: '>=20.0.0'} peerDependencies: '@firebase/app-compat': 0.x @@ -1915,8 +1915,8 @@ packages: '@firebase/app-types': 0.x '@firebase/util': 1.x - '@firebase/auth@1.12.0': - resolution: {integrity: sha512-zkvLpsrxynWHk07qGrUDfCSqKf4AvfZGEqJ7mVCtYGjNNDbGE71k0Yn84rg8QEZu4hQw1BC0qDEHzpNVBcSVmA==} + '@firebase/auth@1.12.1': + resolution: {integrity: sha512-nXKj7d5bMBlnq6XpcQQpmnSVwEeHBkoVbY/+Wk0P1ebLSICoH4XPtvKOFlXKfIHmcS84mLQ99fk3njlDGKSDtw==} engines: {node: '>=20.0.0'} peerDependencies: '@firebase/app': 0.x @@ -1925,28 +1925,28 @@ packages: '@react-native-async-storage/async-storage': optional: true - '@firebase/component@0.7.0': - resolution: {integrity: sha512-wR9En2A+WESUHexjmRHkqtaVH94WLNKt6rmeqZhSLBybg4Wyf0Umk04SZsS6sBq4102ZsDBFwoqMqJYj2IoDSg==} + '@firebase/component@0.7.1': + resolution: {integrity: sha512-mFzsm7CLHR60o08S23iLUY8m/i6kLpOK87wdEFPLhdlCahaxKmWOwSVGiWoENYSmFJJoDhrR3gKSCxz7ENdIww==} engines: {node: '>=20.0.0'} - '@firebase/data-connect@0.3.12': - resolution: {integrity: sha512-baPddcoNLj/+vYo+HSJidJUdr5W4OkhT109c5qhR8T1dJoZcyJpkv/dFpYlw/VJ3dV66vI8GHQFrmAZw/xUS4g==} + '@firebase/data-connect@0.4.0': + resolution: {integrity: sha512-vLXM6WHNIR3VtEeYNUb/5GTsUOyl3Of4iWNZHBe1i9f88sYFnxybJNWVBjvJ7flhCyF8UdxGpzWcUnv6F5vGfg==} peerDependencies: '@firebase/app': 0.x - '@firebase/database-compat@2.1.0': - resolution: {integrity: sha512-8nYc43RqxScsePVd1qe1xxvWNf0OBnbwHxmXJ7MHSuuTVYFO3eLyLW3PiCKJ9fHnmIz4p4LbieXwz+qtr9PZDg==} + '@firebase/database-compat@2.1.1': + resolution: {integrity: sha512-heAEVZ9Z8c8PnBUcmGh91JHX0cXcVa1yESW/xkLuwaX7idRFyLiN8sl73KXpR8ZArGoPXVQDanBnk6SQiekRCQ==} engines: {node: '>=20.0.0'} - '@firebase/database-types@1.0.16': - resolution: {integrity: sha512-xkQLQfU5De7+SPhEGAXFBnDryUWhhlFXelEg2YeZOQMCdoe7dL64DDAd77SQsR+6uoXIZY5MB4y/inCs4GTfcw==} + '@firebase/database-types@1.0.17': + resolution: {integrity: sha512-4eWaM5fW3qEIHjGzfi3cf0Jpqi1xQsAdT6rSDE1RZPrWu8oGjgrq6ybMjobtyHQFgwGCykBm4YM89qDzc+uG/w==} - '@firebase/database@1.1.0': - resolution: {integrity: sha512-gM6MJFae3pTyNLoc9VcJNuaUDej0ctdjn3cVtILo3D5lpp0dmUHHLFN/pUKe7ImyeB1KAvRlEYxvIHNF04Filg==} + '@firebase/database@1.1.1': + resolution: {integrity: sha512-LwIXe8+mVHY5LBPulWECOOIEXDiatyECp/BOlu0gOhe+WOcKjWHROaCbLlkFTgHMY7RHr5MOxkLP/tltWAH3dA==} engines: {node: '>=20.0.0'} - '@firebase/firestore-compat@0.4.5': - resolution: {integrity: sha512-yVX1CkVvqBI4qbA56uZo42xFA4TNU0ICQ+9AFDvYq9U9Xu6iAx9lFDAk/tN+NGereQQXXCSnpISwc/oxsQqPLA==} + '@firebase/firestore-compat@0.4.6': + resolution: {integrity: sha512-NgVyR4hHHN2FvSNQOtbgBOuVsEdD/in30d9FKbEvvITiAChrBN2nBstmhfjI4EOTnHaP8zigwvkNYFI9yKGAkQ==} engines: {node: '>=20.0.0'} peerDependencies: '@firebase/app-compat': 0.x @@ -1957,14 +1957,14 @@ packages: '@firebase/app-types': 0.x '@firebase/util': 1.x - '@firebase/firestore@4.11.0': - resolution: {integrity: sha512-Zb88s8rssBd0J2Tt+NUXMPt2sf+Dq7meatKiJf5t9oto1kZ8w9gK59Koe1uPVbaKfdgBp++N/z0I4G/HamyEhg==} + '@firebase/firestore@4.12.0': + resolution: {integrity: sha512-PM47OyiiAAoAMB8kkq4Je14mTciaRoAPDd3ng3Ckqz9i2TX9D9LfxIRcNzP/OxzNV4uBKRq6lXoOggkJBQR3Gw==} engines: {node: '>=20.0.0'} peerDependencies: '@firebase/app': 0.x - '@firebase/functions-compat@0.4.1': - resolution: {integrity: sha512-AxxUBXKuPrWaVNQ8o1cG1GaCAtXT8a0eaTDfqgS5VsRYLAR0ALcfqDLwo/QyijZj1w8Qf8n3Qrfy/+Im245hOQ==} + '@firebase/functions-compat@0.4.2': + resolution: {integrity: sha512-YNxgnezvZDkqxqXa6cT7/oTeD4WXbxgIP7qZp4LFnathQv5o2omM6EoIhXiT9Ie5AoQDcIhG9Y3/dj+DFJGaGQ==} engines: {node: '>=20.0.0'} peerDependencies: '@firebase/app-compat': 0.x @@ -1972,14 +1972,14 @@ packages: '@firebase/functions-types@0.6.3': resolution: {integrity: sha512-EZoDKQLUHFKNx6VLipQwrSMh01A1SaL3Wg6Hpi//x6/fJ6Ee4hrAeswK99I5Ht8roiniKHw4iO0B1Oxj5I4plg==} - '@firebase/functions@0.13.1': - resolution: {integrity: sha512-sUeWSb0rw5T+6wuV2o9XNmh9yHxjFI9zVGFnjFi+n7drTEWpl7ZTz1nROgGrSu472r+LAaj+2YaSicD4R8wfbw==} + '@firebase/functions@0.13.2': + resolution: {integrity: sha512-tHduUD+DeokM3NB1QbHCvEMoL16e8Z8JSkmuVA4ROoJKPxHn8ibnecHPO2e3nVCJR1D9OjuKvxz4gksfq92/ZQ==} engines: {node: '>=20.0.0'} peerDependencies: '@firebase/app': 0.x - '@firebase/installations-compat@0.2.19': - resolution: {integrity: sha512-khfzIY3EI5LePePo7vT19/VEIH1E3iYsHknI/6ek9T8QCozAZshWT9CjlwOzZrKvTHMeNcbpo/VSOSIWDSjWdQ==} + '@firebase/installations-compat@0.2.20': + resolution: {integrity: sha512-9C9pL/DIEGucmoPj8PlZTnztbX3nhNj5RTYVpUM7wQq/UlHywaYv99969JU/WHLvi9ptzIogXYS9d1eZ6XFe9g==} peerDependencies: '@firebase/app-compat': 0.x @@ -1988,8 +1988,8 @@ packages: peerDependencies: '@firebase/app-types': 0.x - '@firebase/installations@0.6.19': - resolution: {integrity: sha512-nGDmiwKLI1lerhwfwSHvMR9RZuIH5/8E3kgUWnVRqqL7kGVSktjLTWEMva7oh5yxQ3zXfIlIwJwMcaM5bK5j8Q==} + '@firebase/installations@0.6.20': + resolution: {integrity: sha512-LOzvR7XHPbhS0YB5ANXhqXB5qZlntPpwU/4KFwhSNpXNsGk/sBQ9g5hepi0y0/MfenJLe2v7t644iGOOElQaHQ==} peerDependencies: '@firebase/app': 0.x @@ -1997,47 +1997,47 @@ packages: resolution: {integrity: sha512-cGskaAvkrnh42b3BA3doDWeBmuHFO/Mx5A83rbRDYakPjO9bJtRL3dX7javzc2Rr/JHZf4HlterTW2lUkfeN4g==} engines: {node: '>=20.0.0'} - '@firebase/messaging-compat@0.2.23': - resolution: {integrity: sha512-SN857v/kBUvlQ9X/UjAqBoQ2FEaL1ZozpnmL1ByTe57iXkmnVVFm9KqAsTfmf+OEwWI4kJJe9NObtN/w22lUgg==} + '@firebase/messaging-compat@0.2.24': + resolution: {integrity: sha512-wXH8FrKbJvFuFe6v98TBhAtvgknxKIZtGM/wCVsfpOGmaAE80bD8tBxztl+uochjnFb9plihkd6mC4y7sZXSpA==} peerDependencies: '@firebase/app-compat': 0.x '@firebase/messaging-interop-types@0.2.3': resolution: {integrity: sha512-xfzFaJpzcmtDjycpDeCUj0Ge10ATFi/VHVIvEEjDNc3hodVBQADZ7BWQU7CuFpjSHE+eLuBI13z5F/9xOoGX8Q==} - '@firebase/messaging@0.12.23': - resolution: {integrity: sha512-cfuzv47XxqW4HH/OcR5rM+AlQd1xL/VhuaeW/wzMW1LFrsFcTn0GND/hak1vkQc2th8UisBcrkVcQAnOnKwYxg==} + '@firebase/messaging@0.12.24': + resolution: {integrity: sha512-UtKoubegAhHyehcB7iQjvQ8OVITThPbbWk3g2/2ze42PrQr6oe6OmCElYQkBrE5RDCeMTNucXejbdulrQ2XwVg==} peerDependencies: '@firebase/app': 0.x - '@firebase/performance-compat@0.2.22': - resolution: {integrity: sha512-xLKxaSAl/FVi10wDX/CHIYEUP13jXUjinL+UaNXT9ByIvxII5Ne5150mx6IgM8G6Q3V+sPiw9C8/kygkyHUVxg==} + '@firebase/performance-compat@0.2.23': + resolution: {integrity: sha512-c7qOAGBUAOpIuUlHu1axWcrCVtIYKPMhH0lMnoCDWnPwn1HcPuPUBVTWETbC7UWw71RMJF8DpirfWXzMWJQfgA==} peerDependencies: '@firebase/app-compat': 0.x '@firebase/performance-types@0.2.3': resolution: {integrity: sha512-IgkyTz6QZVPAq8GSkLYJvwSLr3LS9+V6vNPQr0x4YozZJiLF5jYixj0amDtATf1X0EtYHqoPO48a9ija8GocxQ==} - '@firebase/performance@0.7.9': - resolution: {integrity: sha512-UzybENl1EdM2I1sjYm74xGt/0JzRnU/0VmfMAKo2LSpHJzaj77FCLZXmYQ4oOuE+Pxtt8Wy2BVJEENiZkaZAzQ==} + '@firebase/performance@0.7.10': + resolution: {integrity: sha512-8nRFld+Ntzp5cLKzZuG9g+kBaSn8Ks9dmn87UQGNFDygbmR6ebd8WawauEXiJjMj1n70ypkvAOdE+lzeyfXtGA==} peerDependencies: '@firebase/app': 0.x - '@firebase/remote-config-compat@0.2.21': - resolution: {integrity: sha512-9+lm0eUycxbu8GO25JfJe4s6R2xlDqlVt0CR6CvN9E6B4AFArEV4qfLoDVRgIEB7nHKwvH2nYRocPWfmjRQTnw==} + '@firebase/remote-config-compat@0.2.22': + resolution: {integrity: sha512-uW/eNKKtRBot2gnCC5mnoy5Voo2wMzZuQ7dwqqGHU176fO9zFgMwKiRzk+aaC99NLrFk1KOmr0ZVheD+zdJmjQ==} peerDependencies: '@firebase/app-compat': 0.x '@firebase/remote-config-types@0.5.0': resolution: {integrity: sha512-vI3bqLoF14L/GchtgayMiFpZJF+Ao3uR8WCde0XpYNkSokDpAKca2DxvcfeZv7lZUqkUwQPL2wD83d3vQ4vvrg==} - '@firebase/remote-config@0.8.0': - resolution: {integrity: sha512-sJz7C2VACeE257Z/3kY9Ap2WXbFsgsDLfaGfZmmToKAK39ipXxFan+vzB9CSbF6mP7bzjyzEnqPcMXhAnYE6fQ==} + '@firebase/remote-config@0.8.1': + resolution: {integrity: sha512-L86TReBnPiiJOWd7k9iaiE9f7rHtMpjAoYN0fH2ey2ZRzsOChHV0s5sYf1+IIUYzplzsE46pjlmAUNkRRKwHSQ==} peerDependencies: '@firebase/app': 0.x - '@firebase/storage-compat@0.4.0': - resolution: {integrity: sha512-vDzhgGczr1OfcOy285YAPur5pWDEvD67w4thyeCUh6Ys0izN9fNYtA1MJERmNBfqjqu0lg0FM5GLbw0Il21M+g==} + '@firebase/storage-compat@0.4.1': + resolution: {integrity: sha512-bgl3FHHfXAmBgzIK/Fps6Xyv2HiAQlSTov07CBL+RGGhrC5YIk4lruS8JVIC+UkujRdYvnf8cpQFGn2RCilJ/A==} engines: {node: '>=20.0.0'} peerDependencies: '@firebase/app-compat': 0.x @@ -2048,14 +2048,14 @@ packages: '@firebase/app-types': 0.x '@firebase/util': 1.x - '@firebase/storage@0.14.0': - resolution: {integrity: sha512-xWWbb15o6/pWEw8H01UQ1dC5U3rf8QTAzOChYyCpafV6Xki7KVp3Yaw2nSklUwHEziSWE9KoZJS7iYeyqWnYFA==} + '@firebase/storage@0.14.1': + resolution: {integrity: sha512-uIpYgBBsv1vIET+5xV20XT7wwqV+H4GFp6PBzfmLUcEgguS4SWNFof56Z3uOC2lNDh0KDda1UflYq2VwD9Nefw==} engines: {node: '>=20.0.0'} peerDependencies: '@firebase/app': 0.x - '@firebase/util@1.13.0': - resolution: {integrity: sha512-0AZUyYUfpMNcztR5l09izHwXkZpghLgCUaAGjtMwXnCg3bj4ml5VgiwqOMOxJ+Nw4qN/zJAaOQBcJ7KGkWStqQ==} + '@firebase/util@1.14.0': + resolution: {integrity: sha512-/gnejm7MKkVIXnSJGpc9L2CvvvzJvtDPeAEq5jAwgVlf/PeNxot+THx/bpD20wQ8uL5sz0xqgXy1nisOYMU+mw==} engines: {node: '>=20.0.0'} '@firebase/webchannel-wrapper@1.0.5': @@ -2096,8 +2096,8 @@ packages: resolution: {integrity: sha512-IJn+8A3QZJfe7FUtWqHVNo3xJs7KFpurCWGWCiCz3oEh+BkRymKZ1QxfAbU2yGMDzTytLGQ2IV6T2r3cuo75/w==} engines: {node: '>=18'} - '@google/genai@1.42.0': - resolution: {integrity: sha512-+3nlMTcrQufbQ8IumGkOphxD5Pd5kKyJOzLcnY0/1IuE8upJk5aLmoexZ2BJhBp1zAjRJMEB4a2CJwKI9e2EYw==} + '@google/genai@1.43.0': + resolution: {integrity: sha512-hklCsJNdMlDM1IwcCVcGQFBg2izY0+t5BIGbRsxi2UnKi6AGKL7pqJqmBDNRbw0bYCs4y3NA7TB+fkKfP/Nrdw==} engines: {node: '>=20.0.0'} peerDependencies: '@modelcontextprotocol/sdk': ^1.25.2 @@ -3291,6 +3291,14 @@ packages: resolution: {integrity: sha512-mNe0Iigql08YupSOGv197YdHpPPr+EzDZmfCgMc7RPNaZTw5aLN01nBl6CHJOh3BGtnMIj83EeN4butBchc8Ag==} engines: {node: ^20.17.0 || >=22.9.0} + '@simple-libs/child-process-utils@1.0.2': + resolution: {integrity: sha512-/4R8QKnd/8agJynkNdJmNw2MBxuFTRcNFnE5Sg/G+jkSsV8/UBgULMzhizWWW42p8L5H7flImV2ATi79Ove2Tw==} + engines: {node: '>=18'} + + '@simple-libs/stream-utils@1.2.0': + resolution: {integrity: sha512-KxXvfapcixpz6rVEB6HPjOUZT22yN6v0vI0urQSk1L8MlEWPDFCZkhw2xmkyoTGYeFw7tWTZd7e3lVzRZRN/EA==} + engines: {node: '>=18'} + '@sindresorhus/is@4.6.0': resolution: {integrity: sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==} engines: {node: '>=10'} @@ -3463,8 +3471,8 @@ packages: '@types/node@22.19.13': resolution: {integrity: sha512-akNQMv0wW5uyRpD2v2IEyRSZiR+BeGuoB6L310EgGObO44HSMNT8z1xzio28V8qOrgYaopIDNA18YgdXd+qTiw==} - '@types/node@24.10.13': - resolution: {integrity: sha512-oH72nZRfDv9lADUBSo104Aq7gPHpQZc4BTx38r9xf9pg5LfP6EzSyH2n7qFmmxRQXh7YlUXODcYsg6PuTDSxGg==} + '@types/node@24.11.0': + resolution: {integrity: sha512-fPxQqz4VTgPI/IQ+lj9r0h+fDR66bzoeMGHp8ASee+32OSGIkeASsoZuJixsQoVef1QJbeubcPBxKk22QVoWdw==} '@types/npm-package-arg@6.1.4': resolution: {integrity: sha512-vDgdbMy2QXHnAruzlv68pUtXCjmqUk3WrBAsRboRovsOmxbfn/WiYCjmecyKjGztnMps5dWp4Uq2prp+Ilo17Q==} @@ -4424,8 +4432,8 @@ packages: resolution: {integrity: sha512-tQMagCOC59EVgNZcC5zl7XqO30Wki9i9J3acbUvkaosCT6JX3EeFwJD7Qqp4MCikRnzS18WXV3BLIQ66ytu6+Q==} engines: {node: '>=18'} - conventional-commits-parser@6.2.1: - resolution: {integrity: sha512-20pyHgnO40rvfI0NGF/xiEoFMkXDtkF8FwHvk5BokoFoCuTQRI8vrNCNFWUOfuolKJMm1tPCHc8GgYEtr1XRNA==} + conventional-commits-parser@6.3.0: + resolution: {integrity: sha512-RfOq/Cqy9xV9bOA8N+ZH6DlrDR+5S3Mi0B5kACEjESpE+AviIpAptx9a9cFpWCCvgRtWT+0BbUw+e1BZfts9jg==} engines: {node: '>=18'} hasBin: true @@ -5162,8 +5170,8 @@ packages: resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} engines: {node: '>=10'} - firebase@12.9.0: - resolution: {integrity: sha512-CwwTYoqZg6KxygPOaaJqIc4aoLvo0RCRrXoln9GoxLE8QyAwTydBaSLGVlR4WPcuOgN3OEL0tJLT1H4IU/dv7w==} + firebase@12.10.0: + resolution: {integrity: sha512-tAjHnEirksqWpa+NKDUSUMjulOnsTcsPC1X1rQ+gwPtjlhJS572na91CwaBXQJHXharIrfj7sw/okDkXOsphjA==} flat-cache@4.0.1: resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} @@ -5314,10 +5322,9 @@ packages: getpass@0.1.7: resolution: {integrity: sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==} - git-raw-commits@5.0.0: - resolution: {integrity: sha512-I2ZXrXeOc0KrCvC7swqtIFXFN+rbjnC7b2T943tvemIOVNl+XP8YnA9UVwqFhzzLClnSA60KR/qEjLpXzs73Qg==} + git-raw-commits@5.0.1: + resolution: {integrity: sha512-Y+csSm2GD/PCSh6Isd/WiMjNAydu0VBiG9J7EdQsNA5P9uXvLayqjmTsNlK5Gs9IhblFZqOU0yid5Il5JPoLiQ==} engines: {node: '>=18'} - deprecated: This package is no longer maintained. For the JavaScript API, please use @conventional-changelog/git-client instead. hasBin: true glob-parent@5.1.2: @@ -6309,10 +6316,6 @@ packages: minimalistic-assert@1.0.1: resolution: {integrity: sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==} - minimatch@10.2.3: - resolution: {integrity: sha512-Rwi3pnapEqirPSbWbrZaa6N3nmqq4Xer/2XooiOKyV3q12ML06f7MOuc5DVH8ONZIFhwIYQ3yzPH4nt7iWHaTg==} - engines: {node: 18 || 20 || >=22} - minimatch@10.2.4: resolution: {integrity: sha512-oRjTw/97aTBN0RHbYCdtF1MQfvusSIBQM0IZEgzl6426+8jSC0nF1a/GmnVLpfB9yyr6g6FTqWqiZVbxrtaCIg==} engines: {node: 18 || 20 || >=22} @@ -8540,13 +8543,13 @@ snapshots: rxjs: 7.8.2 tslib: 2.8.1 - '@angular/ng-dev@https://codeload.github.com/angular/dev-infra-private-ng-dev-builds/tar.gz/c78d7a03ae1ca76d2946651d0dd7f476f09b4374(@modelcontextprotocol/sdk@1.27.1(zod@4.3.6))': + '@angular/ng-dev@https://codeload.github.com/angular/dev-infra-private-ng-dev-builds/tar.gz/363cd055209d441778715bb625b92b48323bb38e(@modelcontextprotocol/sdk@1.27.1(zod@4.3.6))': dependencies: '@actions/core': 3.0.0 '@google-cloud/spanner': 8.0.0(supports-color@10.2.2) - '@google/genai': 1.42.0(@modelcontextprotocol/sdk@1.27.1(zod@4.3.6))(bufferutil@4.1.0)(supports-color@10.2.2)(utf-8-validate@6.0.6) - '@inquirer/prompts': 8.3.0(@types/node@24.10.13) - '@inquirer/type': 4.0.3(@types/node@24.10.13) + '@google/genai': 1.43.0(@modelcontextprotocol/sdk@1.27.1(zod@4.3.6))(bufferutil@4.1.0)(supports-color@10.2.2)(utf-8-validate@6.0.6) + '@inquirer/prompts': 8.3.0(@types/node@24.11.0) + '@inquirer/type': 4.0.3(@types/node@24.11.0) '@octokit/auth-app': 8.2.0 '@octokit/core': 7.0.6 '@octokit/graphql': 9.0.3 @@ -8564,7 +8567,7 @@ snapshots: '@types/folder-hash': 4.0.4 '@types/git-raw-commits': 5.0.1 '@types/jasmine': 6.0.0 - '@types/node': 24.10.13 + '@types/node': 24.11.0 '@types/semver': 7.7.1 '@types/which': 3.0.4 '@types/yargs': 17.0.35 @@ -8573,18 +8576,18 @@ snapshots: bufferutil: 4.1.0 cli-progress: 3.12.0 conventional-commits-filter: 5.0.0 - conventional-commits-parser: 6.2.1 + conventional-commits-parser: 6.3.0 ejs: 4.0.1 encoding: 0.1.13 fast-glob: 3.3.3 - firebase: 12.9.0 + firebase: 12.10.0 folder-hash: 4.1.1(supports-color@10.2.2) - git-raw-commits: 5.0.0(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.2.1) + git-raw-commits: 5.0.1(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.3.0) jasmine: 6.1.0 jasmine-core: 6.1.0 jasmine-reporters: 2.5.2 jsonc-parser: 3.3.1 - minimatch: 10.2.3 + minimatch: 10.2.4 multimatch: 8.0.0 nock: 14.0.11 semver: 7.7.4 @@ -9333,13 +9336,14 @@ snapshots: '@colors/colors@1.5.0': {} - '@conventional-changelog/git-client@1.0.1(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.2.1)': + '@conventional-changelog/git-client@2.6.0(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.3.0)': dependencies: - '@types/semver': 7.7.1 + '@simple-libs/child-process-utils': 1.0.2 + '@simple-libs/stream-utils': 1.2.0 semver: 7.7.4 optionalDependencies: conventional-commits-filter: 5.0.0 - conventional-commits-parser: 6.2.1 + conventional-commits-parser: 6.3.0 '@csstools/color-helpers@6.0.2': {} @@ -9536,46 +9540,46 @@ snapshots: '@exodus/bytes@1.14.1': {} - '@firebase/ai@2.8.0(@firebase/app-types@0.9.3)(@firebase/app@0.14.8)': + '@firebase/ai@2.9.0(@firebase/app-types@0.9.3)(@firebase/app@0.14.9)': dependencies: - '@firebase/app': 0.14.8 + '@firebase/app': 0.14.9 '@firebase/app-check-interop-types': 0.3.3 '@firebase/app-types': 0.9.3 - '@firebase/component': 0.7.0 + '@firebase/component': 0.7.1 '@firebase/logger': 0.5.0 - '@firebase/util': 1.13.0 + '@firebase/util': 1.14.0 tslib: 2.8.1 - '@firebase/analytics-compat@0.2.25(@firebase/app-compat@0.5.8)(@firebase/app@0.14.8)': + '@firebase/analytics-compat@0.2.26(@firebase/app-compat@0.5.9)(@firebase/app@0.14.9)': dependencies: - '@firebase/analytics': 0.10.19(@firebase/app@0.14.8) + '@firebase/analytics': 0.10.20(@firebase/app@0.14.9) '@firebase/analytics-types': 0.8.3 - '@firebase/app-compat': 0.5.8 - '@firebase/component': 0.7.0 - '@firebase/util': 1.13.0 + '@firebase/app-compat': 0.5.9 + '@firebase/component': 0.7.1 + '@firebase/util': 1.14.0 tslib: 2.8.1 transitivePeerDependencies: - '@firebase/app' '@firebase/analytics-types@0.8.3': {} - '@firebase/analytics@0.10.19(@firebase/app@0.14.8)': + '@firebase/analytics@0.10.20(@firebase/app@0.14.9)': dependencies: - '@firebase/app': 0.14.8 - '@firebase/component': 0.7.0 - '@firebase/installations': 0.6.19(@firebase/app@0.14.8) + '@firebase/app': 0.14.9 + '@firebase/component': 0.7.1 + '@firebase/installations': 0.6.20(@firebase/app@0.14.9) '@firebase/logger': 0.5.0 - '@firebase/util': 1.13.0 + '@firebase/util': 1.14.0 tslib: 2.8.1 - '@firebase/app-check-compat@0.4.0(@firebase/app-compat@0.5.8)(@firebase/app@0.14.8)': + '@firebase/app-check-compat@0.4.1(@firebase/app-compat@0.5.9)(@firebase/app@0.14.9)': dependencies: - '@firebase/app-check': 0.11.0(@firebase/app@0.14.8) + '@firebase/app-check': 0.11.1(@firebase/app@0.14.9) '@firebase/app-check-types': 0.5.3 - '@firebase/app-compat': 0.5.8 - '@firebase/component': 0.7.0 + '@firebase/app-compat': 0.5.9 + '@firebase/component': 0.7.1 '@firebase/logger': 0.5.0 - '@firebase/util': 1.13.0 + '@firebase/util': 1.14.0 tslib: 2.8.1 transitivePeerDependencies: - '@firebase/app' @@ -9584,39 +9588,39 @@ snapshots: '@firebase/app-check-types@0.5.3': {} - '@firebase/app-check@0.11.0(@firebase/app@0.14.8)': + '@firebase/app-check@0.11.1(@firebase/app@0.14.9)': dependencies: - '@firebase/app': 0.14.8 - '@firebase/component': 0.7.0 + '@firebase/app': 0.14.9 + '@firebase/component': 0.7.1 '@firebase/logger': 0.5.0 - '@firebase/util': 1.13.0 + '@firebase/util': 1.14.0 tslib: 2.8.1 - '@firebase/app-compat@0.5.8': + '@firebase/app-compat@0.5.9': dependencies: - '@firebase/app': 0.14.8 - '@firebase/component': 0.7.0 + '@firebase/app': 0.14.9 + '@firebase/component': 0.7.1 '@firebase/logger': 0.5.0 - '@firebase/util': 1.13.0 + '@firebase/util': 1.14.0 tslib: 2.8.1 '@firebase/app-types@0.9.3': {} - '@firebase/app@0.14.8': + '@firebase/app@0.14.9': dependencies: - '@firebase/component': 0.7.0 + '@firebase/component': 0.7.1 '@firebase/logger': 0.5.0 - '@firebase/util': 1.13.0 + '@firebase/util': 1.14.0 idb: 7.1.1 tslib: 2.8.1 - '@firebase/auth-compat@0.6.2(@firebase/app-compat@0.5.8)(@firebase/app-types@0.9.3)(@firebase/app@0.14.8)': + '@firebase/auth-compat@0.6.3(@firebase/app-compat@0.5.9)(@firebase/app-types@0.9.3)(@firebase/app@0.14.9)': dependencies: - '@firebase/app-compat': 0.5.8 - '@firebase/auth': 1.12.0(@firebase/app@0.14.8) - '@firebase/auth-types': 0.13.0(@firebase/app-types@0.9.3)(@firebase/util@1.13.0) - '@firebase/component': 0.7.0 - '@firebase/util': 1.13.0 + '@firebase/app-compat': 0.5.9 + '@firebase/auth': 1.12.1(@firebase/app@0.14.9) + '@firebase/auth-types': 0.13.0(@firebase/app-types@0.9.3)(@firebase/util@1.14.0) + '@firebase/component': 0.7.1 + '@firebase/util': 1.14.0 tslib: 2.8.1 transitivePeerDependencies: - '@firebase/app' @@ -9625,115 +9629,115 @@ snapshots: '@firebase/auth-interop-types@0.2.4': {} - '@firebase/auth-types@0.13.0(@firebase/app-types@0.9.3)(@firebase/util@1.13.0)': + '@firebase/auth-types@0.13.0(@firebase/app-types@0.9.3)(@firebase/util@1.14.0)': dependencies: '@firebase/app-types': 0.9.3 - '@firebase/util': 1.13.0 + '@firebase/util': 1.14.0 - '@firebase/auth@1.12.0(@firebase/app@0.14.8)': + '@firebase/auth@1.12.1(@firebase/app@0.14.9)': dependencies: - '@firebase/app': 0.14.8 - '@firebase/component': 0.7.0 + '@firebase/app': 0.14.9 + '@firebase/component': 0.7.1 '@firebase/logger': 0.5.0 - '@firebase/util': 1.13.0 + '@firebase/util': 1.14.0 tslib: 2.8.1 - '@firebase/component@0.7.0': + '@firebase/component@0.7.1': dependencies: - '@firebase/util': 1.13.0 + '@firebase/util': 1.14.0 tslib: 2.8.1 - '@firebase/data-connect@0.3.12(@firebase/app@0.14.8)': + '@firebase/data-connect@0.4.0(@firebase/app@0.14.9)': dependencies: - '@firebase/app': 0.14.8 + '@firebase/app': 0.14.9 '@firebase/auth-interop-types': 0.2.4 - '@firebase/component': 0.7.0 + '@firebase/component': 0.7.1 '@firebase/logger': 0.5.0 - '@firebase/util': 1.13.0 + '@firebase/util': 1.14.0 tslib: 2.8.1 - '@firebase/database-compat@2.1.0': + '@firebase/database-compat@2.1.1': dependencies: - '@firebase/component': 0.7.0 - '@firebase/database': 1.1.0 - '@firebase/database-types': 1.0.16 + '@firebase/component': 0.7.1 + '@firebase/database': 1.1.1 + '@firebase/database-types': 1.0.17 '@firebase/logger': 0.5.0 - '@firebase/util': 1.13.0 + '@firebase/util': 1.14.0 tslib: 2.8.1 - '@firebase/database-types@1.0.16': + '@firebase/database-types@1.0.17': dependencies: '@firebase/app-types': 0.9.3 - '@firebase/util': 1.13.0 + '@firebase/util': 1.14.0 - '@firebase/database@1.1.0': + '@firebase/database@1.1.1': dependencies: '@firebase/app-check-interop-types': 0.3.3 '@firebase/auth-interop-types': 0.2.4 - '@firebase/component': 0.7.0 + '@firebase/component': 0.7.1 '@firebase/logger': 0.5.0 - '@firebase/util': 1.13.0 + '@firebase/util': 1.14.0 faye-websocket: 0.11.4 tslib: 2.8.1 - '@firebase/firestore-compat@0.4.5(@firebase/app-compat@0.5.8)(@firebase/app-types@0.9.3)(@firebase/app@0.14.8)': + '@firebase/firestore-compat@0.4.6(@firebase/app-compat@0.5.9)(@firebase/app-types@0.9.3)(@firebase/app@0.14.9)': dependencies: - '@firebase/app-compat': 0.5.8 - '@firebase/component': 0.7.0 - '@firebase/firestore': 4.11.0(@firebase/app@0.14.8) - '@firebase/firestore-types': 3.0.3(@firebase/app-types@0.9.3)(@firebase/util@1.13.0) - '@firebase/util': 1.13.0 + '@firebase/app-compat': 0.5.9 + '@firebase/component': 0.7.1 + '@firebase/firestore': 4.12.0(@firebase/app@0.14.9) + '@firebase/firestore-types': 3.0.3(@firebase/app-types@0.9.3)(@firebase/util@1.14.0) + '@firebase/util': 1.14.0 tslib: 2.8.1 transitivePeerDependencies: - '@firebase/app' - '@firebase/app-types' - '@firebase/firestore-types@3.0.3(@firebase/app-types@0.9.3)(@firebase/util@1.13.0)': + '@firebase/firestore-types@3.0.3(@firebase/app-types@0.9.3)(@firebase/util@1.14.0)': dependencies: '@firebase/app-types': 0.9.3 - '@firebase/util': 1.13.0 + '@firebase/util': 1.14.0 - '@firebase/firestore@4.11.0(@firebase/app@0.14.8)': + '@firebase/firestore@4.12.0(@firebase/app@0.14.9)': dependencies: - '@firebase/app': 0.14.8 - '@firebase/component': 0.7.0 + '@firebase/app': 0.14.9 + '@firebase/component': 0.7.1 '@firebase/logger': 0.5.0 - '@firebase/util': 1.13.0 + '@firebase/util': 1.14.0 '@firebase/webchannel-wrapper': 1.0.5 '@grpc/grpc-js': 1.9.15 '@grpc/proto-loader': 0.7.15 tslib: 2.8.1 - '@firebase/functions-compat@0.4.1(@firebase/app-compat@0.5.8)(@firebase/app@0.14.8)': + '@firebase/functions-compat@0.4.2(@firebase/app-compat@0.5.9)(@firebase/app@0.14.9)': dependencies: - '@firebase/app-compat': 0.5.8 - '@firebase/component': 0.7.0 - '@firebase/functions': 0.13.1(@firebase/app@0.14.8) + '@firebase/app-compat': 0.5.9 + '@firebase/component': 0.7.1 + '@firebase/functions': 0.13.2(@firebase/app@0.14.9) '@firebase/functions-types': 0.6.3 - '@firebase/util': 1.13.0 + '@firebase/util': 1.14.0 tslib: 2.8.1 transitivePeerDependencies: - '@firebase/app' '@firebase/functions-types@0.6.3': {} - '@firebase/functions@0.13.1(@firebase/app@0.14.8)': + '@firebase/functions@0.13.2(@firebase/app@0.14.9)': dependencies: - '@firebase/app': 0.14.8 + '@firebase/app': 0.14.9 '@firebase/app-check-interop-types': 0.3.3 '@firebase/auth-interop-types': 0.2.4 - '@firebase/component': 0.7.0 + '@firebase/component': 0.7.1 '@firebase/messaging-interop-types': 0.2.3 - '@firebase/util': 1.13.0 + '@firebase/util': 1.14.0 tslib: 2.8.1 - '@firebase/installations-compat@0.2.19(@firebase/app-compat@0.5.8)(@firebase/app-types@0.9.3)(@firebase/app@0.14.8)': + '@firebase/installations-compat@0.2.20(@firebase/app-compat@0.5.9)(@firebase/app-types@0.9.3)(@firebase/app@0.14.9)': dependencies: - '@firebase/app-compat': 0.5.8 - '@firebase/component': 0.7.0 - '@firebase/installations': 0.6.19(@firebase/app@0.14.8) + '@firebase/app-compat': 0.5.9 + '@firebase/component': 0.7.1 + '@firebase/installations': 0.6.20(@firebase/app@0.14.9) '@firebase/installations-types': 0.5.3(@firebase/app-types@0.9.3) - '@firebase/util': 1.13.0 + '@firebase/util': 1.14.0 tslib: 2.8.1 transitivePeerDependencies: - '@firebase/app' @@ -9743,11 +9747,11 @@ snapshots: dependencies: '@firebase/app-types': 0.9.3 - '@firebase/installations@0.6.19(@firebase/app@0.14.8)': + '@firebase/installations@0.6.20(@firebase/app@0.14.9)': dependencies: - '@firebase/app': 0.14.8 - '@firebase/component': 0.7.0 - '@firebase/util': 1.13.0 + '@firebase/app': 0.14.9 + '@firebase/component': 0.7.1 + '@firebase/util': 1.14.0 idb: 7.1.1 tslib: 2.8.1 @@ -9755,100 +9759,100 @@ snapshots: dependencies: tslib: 2.8.1 - '@firebase/messaging-compat@0.2.23(@firebase/app-compat@0.5.8)(@firebase/app@0.14.8)': + '@firebase/messaging-compat@0.2.24(@firebase/app-compat@0.5.9)(@firebase/app@0.14.9)': dependencies: - '@firebase/app-compat': 0.5.8 - '@firebase/component': 0.7.0 - '@firebase/messaging': 0.12.23(@firebase/app@0.14.8) - '@firebase/util': 1.13.0 + '@firebase/app-compat': 0.5.9 + '@firebase/component': 0.7.1 + '@firebase/messaging': 0.12.24(@firebase/app@0.14.9) + '@firebase/util': 1.14.0 tslib: 2.8.1 transitivePeerDependencies: - '@firebase/app' '@firebase/messaging-interop-types@0.2.3': {} - '@firebase/messaging@0.12.23(@firebase/app@0.14.8)': + '@firebase/messaging@0.12.24(@firebase/app@0.14.9)': dependencies: - '@firebase/app': 0.14.8 - '@firebase/component': 0.7.0 - '@firebase/installations': 0.6.19(@firebase/app@0.14.8) + '@firebase/app': 0.14.9 + '@firebase/component': 0.7.1 + '@firebase/installations': 0.6.20(@firebase/app@0.14.9) '@firebase/messaging-interop-types': 0.2.3 - '@firebase/util': 1.13.0 + '@firebase/util': 1.14.0 idb: 7.1.1 tslib: 2.8.1 - '@firebase/performance-compat@0.2.22(@firebase/app-compat@0.5.8)(@firebase/app@0.14.8)': + '@firebase/performance-compat@0.2.23(@firebase/app-compat@0.5.9)(@firebase/app@0.14.9)': dependencies: - '@firebase/app-compat': 0.5.8 - '@firebase/component': 0.7.0 + '@firebase/app-compat': 0.5.9 + '@firebase/component': 0.7.1 '@firebase/logger': 0.5.0 - '@firebase/performance': 0.7.9(@firebase/app@0.14.8) + '@firebase/performance': 0.7.10(@firebase/app@0.14.9) '@firebase/performance-types': 0.2.3 - '@firebase/util': 1.13.0 + '@firebase/util': 1.14.0 tslib: 2.8.1 transitivePeerDependencies: - '@firebase/app' '@firebase/performance-types@0.2.3': {} - '@firebase/performance@0.7.9(@firebase/app@0.14.8)': + '@firebase/performance@0.7.10(@firebase/app@0.14.9)': dependencies: - '@firebase/app': 0.14.8 - '@firebase/component': 0.7.0 - '@firebase/installations': 0.6.19(@firebase/app@0.14.8) + '@firebase/app': 0.14.9 + '@firebase/component': 0.7.1 + '@firebase/installations': 0.6.20(@firebase/app@0.14.9) '@firebase/logger': 0.5.0 - '@firebase/util': 1.13.0 + '@firebase/util': 1.14.0 tslib: 2.8.1 web-vitals: 4.2.4 - '@firebase/remote-config-compat@0.2.21(@firebase/app-compat@0.5.8)(@firebase/app@0.14.8)': + '@firebase/remote-config-compat@0.2.22(@firebase/app-compat@0.5.9)(@firebase/app@0.14.9)': dependencies: - '@firebase/app-compat': 0.5.8 - '@firebase/component': 0.7.0 + '@firebase/app-compat': 0.5.9 + '@firebase/component': 0.7.1 '@firebase/logger': 0.5.0 - '@firebase/remote-config': 0.8.0(@firebase/app@0.14.8) + '@firebase/remote-config': 0.8.1(@firebase/app@0.14.9) '@firebase/remote-config-types': 0.5.0 - '@firebase/util': 1.13.0 + '@firebase/util': 1.14.0 tslib: 2.8.1 transitivePeerDependencies: - '@firebase/app' '@firebase/remote-config-types@0.5.0': {} - '@firebase/remote-config@0.8.0(@firebase/app@0.14.8)': + '@firebase/remote-config@0.8.1(@firebase/app@0.14.9)': dependencies: - '@firebase/app': 0.14.8 - '@firebase/component': 0.7.0 - '@firebase/installations': 0.6.19(@firebase/app@0.14.8) + '@firebase/app': 0.14.9 + '@firebase/component': 0.7.1 + '@firebase/installations': 0.6.20(@firebase/app@0.14.9) '@firebase/logger': 0.5.0 - '@firebase/util': 1.13.0 + '@firebase/util': 1.14.0 tslib: 2.8.1 - '@firebase/storage-compat@0.4.0(@firebase/app-compat@0.5.8)(@firebase/app-types@0.9.3)(@firebase/app@0.14.8)': + '@firebase/storage-compat@0.4.1(@firebase/app-compat@0.5.9)(@firebase/app-types@0.9.3)(@firebase/app@0.14.9)': dependencies: - '@firebase/app-compat': 0.5.8 - '@firebase/component': 0.7.0 - '@firebase/storage': 0.14.0(@firebase/app@0.14.8) - '@firebase/storage-types': 0.8.3(@firebase/app-types@0.9.3)(@firebase/util@1.13.0) - '@firebase/util': 1.13.0 + '@firebase/app-compat': 0.5.9 + '@firebase/component': 0.7.1 + '@firebase/storage': 0.14.1(@firebase/app@0.14.9) + '@firebase/storage-types': 0.8.3(@firebase/app-types@0.9.3)(@firebase/util@1.14.0) + '@firebase/util': 1.14.0 tslib: 2.8.1 transitivePeerDependencies: - '@firebase/app' - '@firebase/app-types' - '@firebase/storage-types@0.8.3(@firebase/app-types@0.9.3)(@firebase/util@1.13.0)': + '@firebase/storage-types@0.8.3(@firebase/app-types@0.9.3)(@firebase/util@1.14.0)': dependencies: '@firebase/app-types': 0.9.3 - '@firebase/util': 1.13.0 + '@firebase/util': 1.14.0 - '@firebase/storage@0.14.0(@firebase/app@0.14.8)': + '@firebase/storage@0.14.1(@firebase/app@0.14.9)': dependencies: - '@firebase/app': 0.14.8 - '@firebase/component': 0.7.0 - '@firebase/util': 1.13.0 + '@firebase/app': 0.14.9 + '@firebase/component': 0.7.1 + '@firebase/util': 1.14.0 tslib: 2.8.1 - '@firebase/util@1.13.0': + '@firebase/util@1.14.0': dependencies: tslib: 2.8.1 @@ -9919,7 +9923,7 @@ snapshots: transitivePeerDependencies: - supports-color - '@google/genai@1.42.0(@modelcontextprotocol/sdk@1.27.1(zod@4.3.6))(bufferutil@4.1.0)(supports-color@10.2.2)(utf-8-validate@6.0.6)': + '@google/genai@1.43.0(@modelcontextprotocol/sdk@1.27.1(zod@4.3.6))(bufferutil@4.1.0)(supports-color@10.2.2)(utf-8-validate@6.0.6)': dependencies: google-auth-library: 10.6.1(supports-color@10.2.2) p-retry: 4.6.2 @@ -9976,122 +9980,122 @@ snapshots: '@inquirer/ansi@2.0.3': {} - '@inquirer/checkbox@5.1.0(@types/node@24.10.13)': + '@inquirer/checkbox@5.1.0(@types/node@24.11.0)': dependencies: '@inquirer/ansi': 2.0.3 - '@inquirer/core': 11.1.5(@types/node@24.10.13) + '@inquirer/core': 11.1.5(@types/node@24.11.0) '@inquirer/figures': 2.0.3 - '@inquirer/type': 4.0.3(@types/node@24.10.13) + '@inquirer/type': 4.0.3(@types/node@24.11.0) optionalDependencies: - '@types/node': 24.10.13 + '@types/node': 24.11.0 - '@inquirer/confirm@6.0.8(@types/node@24.10.13)': + '@inquirer/confirm@6.0.8(@types/node@24.11.0)': dependencies: - '@inquirer/core': 11.1.5(@types/node@24.10.13) - '@inquirer/type': 4.0.3(@types/node@24.10.13) + '@inquirer/core': 11.1.5(@types/node@24.11.0) + '@inquirer/type': 4.0.3(@types/node@24.11.0) optionalDependencies: - '@types/node': 24.10.13 + '@types/node': 24.11.0 - '@inquirer/core@11.1.5(@types/node@24.10.13)': + '@inquirer/core@11.1.5(@types/node@24.11.0)': dependencies: '@inquirer/ansi': 2.0.3 '@inquirer/figures': 2.0.3 - '@inquirer/type': 4.0.3(@types/node@24.10.13) + '@inquirer/type': 4.0.3(@types/node@24.11.0) cli-width: 4.1.0 fast-wrap-ansi: 0.2.0 mute-stream: 3.0.0 signal-exit: 4.1.0 optionalDependencies: - '@types/node': 24.10.13 + '@types/node': 24.11.0 - '@inquirer/editor@5.0.8(@types/node@24.10.13)': + '@inquirer/editor@5.0.8(@types/node@24.11.0)': dependencies: - '@inquirer/core': 11.1.5(@types/node@24.10.13) - '@inquirer/external-editor': 2.0.3(@types/node@24.10.13) - '@inquirer/type': 4.0.3(@types/node@24.10.13) + '@inquirer/core': 11.1.5(@types/node@24.11.0) + '@inquirer/external-editor': 2.0.3(@types/node@24.11.0) + '@inquirer/type': 4.0.3(@types/node@24.11.0) optionalDependencies: - '@types/node': 24.10.13 + '@types/node': 24.11.0 - '@inquirer/expand@5.0.8(@types/node@24.10.13)': + '@inquirer/expand@5.0.8(@types/node@24.11.0)': dependencies: - '@inquirer/core': 11.1.5(@types/node@24.10.13) - '@inquirer/type': 4.0.3(@types/node@24.10.13) + '@inquirer/core': 11.1.5(@types/node@24.11.0) + '@inquirer/type': 4.0.3(@types/node@24.11.0) optionalDependencies: - '@types/node': 24.10.13 + '@types/node': 24.11.0 - '@inquirer/external-editor@2.0.3(@types/node@24.10.13)': + '@inquirer/external-editor@2.0.3(@types/node@24.11.0)': dependencies: chardet: 2.1.1 iconv-lite: 0.7.2 optionalDependencies: - '@types/node': 24.10.13 + '@types/node': 24.11.0 '@inquirer/figures@2.0.3': {} - '@inquirer/input@5.0.8(@types/node@24.10.13)': + '@inquirer/input@5.0.8(@types/node@24.11.0)': dependencies: - '@inquirer/core': 11.1.5(@types/node@24.10.13) - '@inquirer/type': 4.0.3(@types/node@24.10.13) + '@inquirer/core': 11.1.5(@types/node@24.11.0) + '@inquirer/type': 4.0.3(@types/node@24.11.0) optionalDependencies: - '@types/node': 24.10.13 + '@types/node': 24.11.0 - '@inquirer/number@4.0.8(@types/node@24.10.13)': + '@inquirer/number@4.0.8(@types/node@24.11.0)': dependencies: - '@inquirer/core': 11.1.5(@types/node@24.10.13) - '@inquirer/type': 4.0.3(@types/node@24.10.13) + '@inquirer/core': 11.1.5(@types/node@24.11.0) + '@inquirer/type': 4.0.3(@types/node@24.11.0) optionalDependencies: - '@types/node': 24.10.13 + '@types/node': 24.11.0 - '@inquirer/password@5.0.8(@types/node@24.10.13)': + '@inquirer/password@5.0.8(@types/node@24.11.0)': dependencies: '@inquirer/ansi': 2.0.3 - '@inquirer/core': 11.1.5(@types/node@24.10.13) - '@inquirer/type': 4.0.3(@types/node@24.10.13) + '@inquirer/core': 11.1.5(@types/node@24.11.0) + '@inquirer/type': 4.0.3(@types/node@24.11.0) optionalDependencies: - '@types/node': 24.10.13 - - '@inquirer/prompts@8.3.0(@types/node@24.10.13)': - dependencies: - '@inquirer/checkbox': 5.1.0(@types/node@24.10.13) - '@inquirer/confirm': 6.0.8(@types/node@24.10.13) - '@inquirer/editor': 5.0.8(@types/node@24.10.13) - '@inquirer/expand': 5.0.8(@types/node@24.10.13) - '@inquirer/input': 5.0.8(@types/node@24.10.13) - '@inquirer/number': 4.0.8(@types/node@24.10.13) - '@inquirer/password': 5.0.8(@types/node@24.10.13) - '@inquirer/rawlist': 5.2.4(@types/node@24.10.13) - '@inquirer/search': 4.1.4(@types/node@24.10.13) - '@inquirer/select': 5.1.0(@types/node@24.10.13) + '@types/node': 24.11.0 + + '@inquirer/prompts@8.3.0(@types/node@24.11.0)': + dependencies: + '@inquirer/checkbox': 5.1.0(@types/node@24.11.0) + '@inquirer/confirm': 6.0.8(@types/node@24.11.0) + '@inquirer/editor': 5.0.8(@types/node@24.11.0) + '@inquirer/expand': 5.0.8(@types/node@24.11.0) + '@inquirer/input': 5.0.8(@types/node@24.11.0) + '@inquirer/number': 4.0.8(@types/node@24.11.0) + '@inquirer/password': 5.0.8(@types/node@24.11.0) + '@inquirer/rawlist': 5.2.4(@types/node@24.11.0) + '@inquirer/search': 4.1.4(@types/node@24.11.0) + '@inquirer/select': 5.1.0(@types/node@24.11.0) optionalDependencies: - '@types/node': 24.10.13 + '@types/node': 24.11.0 - '@inquirer/rawlist@5.2.4(@types/node@24.10.13)': + '@inquirer/rawlist@5.2.4(@types/node@24.11.0)': dependencies: - '@inquirer/core': 11.1.5(@types/node@24.10.13) - '@inquirer/type': 4.0.3(@types/node@24.10.13) + '@inquirer/core': 11.1.5(@types/node@24.11.0) + '@inquirer/type': 4.0.3(@types/node@24.11.0) optionalDependencies: - '@types/node': 24.10.13 + '@types/node': 24.11.0 - '@inquirer/search@4.1.4(@types/node@24.10.13)': + '@inquirer/search@4.1.4(@types/node@24.11.0)': dependencies: - '@inquirer/core': 11.1.5(@types/node@24.10.13) + '@inquirer/core': 11.1.5(@types/node@24.11.0) '@inquirer/figures': 2.0.3 - '@inquirer/type': 4.0.3(@types/node@24.10.13) + '@inquirer/type': 4.0.3(@types/node@24.11.0) optionalDependencies: - '@types/node': 24.10.13 + '@types/node': 24.11.0 - '@inquirer/select@5.1.0(@types/node@24.10.13)': + '@inquirer/select@5.1.0(@types/node@24.11.0)': dependencies: '@inquirer/ansi': 2.0.3 - '@inquirer/core': 11.1.5(@types/node@24.10.13) + '@inquirer/core': 11.1.5(@types/node@24.11.0) '@inquirer/figures': 2.0.3 - '@inquirer/type': 4.0.3(@types/node@24.10.13) + '@inquirer/type': 4.0.3(@types/node@24.11.0) optionalDependencies: - '@types/node': 24.10.13 + '@types/node': 24.11.0 - '@inquirer/type@4.0.3(@types/node@24.10.13)': + '@inquirer/type@4.0.3(@types/node@24.11.0)': optionalDependencies: - '@types/node': 24.10.13 + '@types/node': 24.11.0 '@isaacs/cliui@8.0.2': dependencies: @@ -10265,10 +10269,10 @@ snapshots: '@leichtgewicht/ip-codec@2.0.5': {} - '@listr2/prompt-adapter-inquirer@4.1.2(@inquirer/prompts@8.3.0(@types/node@24.10.13))(@types/node@24.10.13)(listr2@10.1.2)': + '@listr2/prompt-adapter-inquirer@4.1.2(@inquirer/prompts@8.3.0(@types/node@24.11.0))(@types/node@24.11.0)(listr2@10.1.2)': dependencies: - '@inquirer/prompts': 8.3.0(@types/node@24.10.13) - '@inquirer/type': 4.0.3(@types/node@24.10.13) + '@inquirer/prompts': 8.3.0(@types/node@24.11.0) + '@inquirer/type': 4.0.3(@types/node@24.11.0) listr2: 10.1.2 transitivePeerDependencies: - '@types/node' @@ -11041,6 +11045,12 @@ snapshots: '@sigstore/core': 3.1.0 '@sigstore/protobuf-specs': 0.5.0 + '@simple-libs/child-process-utils@1.0.2': + dependencies: + '@simple-libs/stream-utils': 1.2.0 + + '@simple-libs/stream-utils@1.2.0': {} + '@sindresorhus/is@4.6.0': {} '@socket.io/component-emitter@3.1.2': {} @@ -11257,7 +11267,7 @@ snapshots: dependencies: undici-types: 7.22.0 - '@types/node@24.10.13': + '@types/node@24.11.0': dependencies: undici-types: 7.22.0 @@ -11621,11 +11631,11 @@ snapshots: lodash: 4.17.21 minimatch: 7.4.6 - '@vitejs/plugin-basic-ssl@2.1.4(vite@7.3.1(@types/node@24.10.13)(jiti@2.6.1)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))': + '@vitejs/plugin-basic-ssl@2.1.4(vite@7.3.1(@types/node@24.11.0)(jiti@2.6.1)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))': dependencies: - vite: 7.3.1(@types/node@24.10.13)(jiti@2.6.1)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) + vite: 7.3.1(@types/node@24.11.0)(jiti@2.6.1)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) - '@vitest/coverage-v8@4.0.18(vitest@4.0.18(@opentelemetry/api@1.9.0)(@types/node@24.10.13)(jiti@2.6.1)(jsdom@28.1.0)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))': + '@vitest/coverage-v8@4.0.18(vitest@4.0.18(@opentelemetry/api@1.9.0)(@types/node@24.11.0)(jiti@2.6.1)(jsdom@28.1.0)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))': dependencies: '@bcoe/v8-coverage': 1.0.2 '@vitest/utils': 4.0.18 @@ -11637,7 +11647,7 @@ snapshots: obug: 2.1.1 std-env: 3.10.0 tinyrainbow: 3.0.3 - vitest: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@24.10.13)(jiti@2.6.1)(jsdom@28.1.0)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) + vitest: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@24.11.0)(jiti@2.6.1)(jsdom@28.1.0)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) '@vitest/expect@4.0.18': dependencies: @@ -11648,13 +11658,13 @@ snapshots: chai: 6.2.2 tinyrainbow: 3.0.3 - '@vitest/mocker@4.0.18(vite@7.3.1(@types/node@24.10.13)(jiti@2.6.1)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))': + '@vitest/mocker@4.0.18(vite@7.3.1(@types/node@24.11.0)(jiti@2.6.1)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))': dependencies: '@vitest/spy': 4.0.18 estree-walker: 3.0.3 magic-string: 0.30.21 optionalDependencies: - vite: 7.3.1(@types/node@24.10.13)(jiti@2.6.1)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) + vite: 7.3.1(@types/node@24.11.0)(jiti@2.6.1)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) '@vitest/pretty-format@4.0.18': dependencies: @@ -12489,8 +12499,9 @@ snapshots: conventional-commits-filter@5.0.0: {} - conventional-commits-parser@6.2.1: + conventional-commits-parser@6.3.0: dependencies: + '@simple-libs/stream-utils': 1.2.0 meow: 13.2.0 convert-source-map@1.9.0: {} @@ -13392,36 +13403,36 @@ snapshots: locate-path: 6.0.0 path-exists: 4.0.0 - firebase@12.9.0: + firebase@12.10.0: dependencies: - '@firebase/ai': 2.8.0(@firebase/app-types@0.9.3)(@firebase/app@0.14.8) - '@firebase/analytics': 0.10.19(@firebase/app@0.14.8) - '@firebase/analytics-compat': 0.2.25(@firebase/app-compat@0.5.8)(@firebase/app@0.14.8) - '@firebase/app': 0.14.8 - '@firebase/app-check': 0.11.0(@firebase/app@0.14.8) - '@firebase/app-check-compat': 0.4.0(@firebase/app-compat@0.5.8)(@firebase/app@0.14.8) - '@firebase/app-compat': 0.5.8 + '@firebase/ai': 2.9.0(@firebase/app-types@0.9.3)(@firebase/app@0.14.9) + '@firebase/analytics': 0.10.20(@firebase/app@0.14.9) + '@firebase/analytics-compat': 0.2.26(@firebase/app-compat@0.5.9)(@firebase/app@0.14.9) + '@firebase/app': 0.14.9 + '@firebase/app-check': 0.11.1(@firebase/app@0.14.9) + '@firebase/app-check-compat': 0.4.1(@firebase/app-compat@0.5.9)(@firebase/app@0.14.9) + '@firebase/app-compat': 0.5.9 '@firebase/app-types': 0.9.3 - '@firebase/auth': 1.12.0(@firebase/app@0.14.8) - '@firebase/auth-compat': 0.6.2(@firebase/app-compat@0.5.8)(@firebase/app-types@0.9.3)(@firebase/app@0.14.8) - '@firebase/data-connect': 0.3.12(@firebase/app@0.14.8) - '@firebase/database': 1.1.0 - '@firebase/database-compat': 2.1.0 - '@firebase/firestore': 4.11.0(@firebase/app@0.14.8) - '@firebase/firestore-compat': 0.4.5(@firebase/app-compat@0.5.8)(@firebase/app-types@0.9.3)(@firebase/app@0.14.8) - '@firebase/functions': 0.13.1(@firebase/app@0.14.8) - '@firebase/functions-compat': 0.4.1(@firebase/app-compat@0.5.8)(@firebase/app@0.14.8) - '@firebase/installations': 0.6.19(@firebase/app@0.14.8) - '@firebase/installations-compat': 0.2.19(@firebase/app-compat@0.5.8)(@firebase/app-types@0.9.3)(@firebase/app@0.14.8) - '@firebase/messaging': 0.12.23(@firebase/app@0.14.8) - '@firebase/messaging-compat': 0.2.23(@firebase/app-compat@0.5.8)(@firebase/app@0.14.8) - '@firebase/performance': 0.7.9(@firebase/app@0.14.8) - '@firebase/performance-compat': 0.2.22(@firebase/app-compat@0.5.8)(@firebase/app@0.14.8) - '@firebase/remote-config': 0.8.0(@firebase/app@0.14.8) - '@firebase/remote-config-compat': 0.2.21(@firebase/app-compat@0.5.8)(@firebase/app@0.14.8) - '@firebase/storage': 0.14.0(@firebase/app@0.14.8) - '@firebase/storage-compat': 0.4.0(@firebase/app-compat@0.5.8)(@firebase/app-types@0.9.3)(@firebase/app@0.14.8) - '@firebase/util': 1.13.0 + '@firebase/auth': 1.12.1(@firebase/app@0.14.9) + '@firebase/auth-compat': 0.6.3(@firebase/app-compat@0.5.9)(@firebase/app-types@0.9.3)(@firebase/app@0.14.9) + '@firebase/data-connect': 0.4.0(@firebase/app@0.14.9) + '@firebase/database': 1.1.1 + '@firebase/database-compat': 2.1.1 + '@firebase/firestore': 4.12.0(@firebase/app@0.14.9) + '@firebase/firestore-compat': 0.4.6(@firebase/app-compat@0.5.9)(@firebase/app-types@0.9.3)(@firebase/app@0.14.9) + '@firebase/functions': 0.13.2(@firebase/app@0.14.9) + '@firebase/functions-compat': 0.4.2(@firebase/app-compat@0.5.9)(@firebase/app@0.14.9) + '@firebase/installations': 0.6.20(@firebase/app@0.14.9) + '@firebase/installations-compat': 0.2.20(@firebase/app-compat@0.5.9)(@firebase/app-types@0.9.3)(@firebase/app@0.14.9) + '@firebase/messaging': 0.12.24(@firebase/app@0.14.9) + '@firebase/messaging-compat': 0.2.24(@firebase/app-compat@0.5.9)(@firebase/app@0.14.9) + '@firebase/performance': 0.7.10(@firebase/app@0.14.9) + '@firebase/performance-compat': 0.2.23(@firebase/app-compat@0.5.9)(@firebase/app@0.14.9) + '@firebase/remote-config': 0.8.1(@firebase/app@0.14.9) + '@firebase/remote-config-compat': 0.2.22(@firebase/app-compat@0.5.9)(@firebase/app@0.14.9) + '@firebase/storage': 0.14.1(@firebase/app@0.14.9) + '@firebase/storage-compat': 0.4.1(@firebase/app-compat@0.5.9)(@firebase/app-types@0.9.3)(@firebase/app@0.14.9) + '@firebase/util': 1.14.0 transitivePeerDependencies: - '@react-native-async-storage/async-storage' @@ -13585,9 +13596,9 @@ snapshots: dependencies: assert-plus: 1.0.0 - git-raw-commits@5.0.0(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.2.1): + git-raw-commits@5.0.1(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.3.0): dependencies: - '@conventional-changelog/git-client': 1.0.1(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.2.1) + '@conventional-changelog/git-client': 2.6.0(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.3.0) meow: 13.2.0 transitivePeerDependencies: - conventional-commits-filter @@ -14672,10 +14683,6 @@ snapshots: minimalistic-assert@1.0.1: {} - minimatch@10.2.3: - dependencies: - brace-expansion: 5.0.4 - minimatch@10.2.4: dependencies: brace-expansion: 5.0.4 @@ -16697,7 +16704,7 @@ snapshots: core-util-is: 1.0.2 extsprintf: 1.3.0 - vite@7.3.1(@types/node@24.10.13)(jiti@2.6.1)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2): + vite@7.3.1(@types/node@24.11.0)(jiti@2.6.1)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2): dependencies: esbuild: 0.27.3 fdir: 6.5.0(picomatch@4.0.3) @@ -16706,7 +16713,7 @@ snapshots: rollup: 4.59.0 tinyglobby: 0.2.15 optionalDependencies: - '@types/node': 24.10.13 + '@types/node': 24.11.0 fsevents: 2.3.3 jiti: 2.6.1 less: 4.4.2 @@ -16715,10 +16722,10 @@ snapshots: tsx: 4.21.0 yaml: 2.8.2 - vitest@4.0.18(@opentelemetry/api@1.9.0)(@types/node@24.10.13)(jiti@2.6.1)(jsdom@28.1.0)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2): + vitest@4.0.18(@opentelemetry/api@1.9.0)(@types/node@24.11.0)(jiti@2.6.1)(jsdom@28.1.0)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2): dependencies: '@vitest/expect': 4.0.18 - '@vitest/mocker': 4.0.18(vite@7.3.1(@types/node@24.10.13)(jiti@2.6.1)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)) + '@vitest/mocker': 4.0.18(vite@7.3.1(@types/node@24.11.0)(jiti@2.6.1)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)) '@vitest/pretty-format': 4.0.18 '@vitest/runner': 4.0.18 '@vitest/snapshot': 4.0.18 @@ -16735,11 +16742,11 @@ snapshots: tinyexec: 1.0.2 tinyglobby: 0.2.15 tinyrainbow: 3.0.3 - vite: 7.3.1(@types/node@24.10.13)(jiti@2.6.1)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) + vite: 7.3.1(@types/node@24.11.0)(jiti@2.6.1)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) why-is-node-running: 2.3.0 optionalDependencies: '@opentelemetry/api': 1.9.0 - '@types/node': 24.10.13 + '@types/node': 24.11.0 jsdom: 28.1.0 transitivePeerDependencies: - jiti diff --git a/tests/e2e/ng-snapshot/package.json b/tests/e2e/ng-snapshot/package.json index 534cdd10091d..02f2f21b8ae3 100644 --- a/tests/e2e/ng-snapshot/package.json +++ b/tests/e2e/ng-snapshot/package.json @@ -2,21 +2,21 @@ "description": "snapshot versions of Angular for e2e testing", "private": true, "dependencies": { - "@angular/animations": "github:angular/animations-builds#b06e0efa431f49cca5c6b569e63045d47a6dc73f", - "@angular/cdk": "github:angular/cdk-builds#8edceea9e6c048b8360a593d2e38ab7b4aa5f6a4", - "@angular/common": "github:angular/common-builds#1fa25beeb88fda67a29c95f9e8f5ce6156c640ff", - "@angular/compiler": "github:angular/compiler-builds#9babcd3b1182dc657e80452295c39bb321cd9f47", - "@angular/compiler-cli": "github:angular/compiler-cli-builds#f22b7003d46d35d23e8aa152294c17439130a832", - "@angular/core": "github:angular/core-builds#ec50f95df447e3bc37c5a0de55a85a10503cd402", - "@angular/forms": "github:angular/forms-builds#a5bb010530813a7deb491c4c655429970ddffce1", - "@angular/language-service": "github:angular/language-service-builds#2d329d09688581c4da3e1b74b5ac649e933a0567", - "@angular/localize": "github:angular/localize-builds#75e1692e975659b41bc5bf399043623bfc398b68", - "@angular/material": "github:angular/material-builds#7fe6144f6b141f2156514a5f8afa9daf6ef65891", - "@angular/material-moment-adapter": "github:angular/material-moment-adapter-builds#0fa3861ab1a8eac59063e1fc43ccc2af7ffecdca", - "@angular/platform-browser": "github:angular/platform-browser-builds#1b1d7b3e62fc763a3cb6a7e32b1c9c7714af2346", - "@angular/platform-browser-dynamic": "github:angular/platform-browser-dynamic-builds#289f13f553987447e8e9730f5a4227497f632823", - "@angular/platform-server": "github:angular/platform-server-builds#36df7d6def28647d5a3b0202f7dc2bd70f298802", - "@angular/router": "github:angular/router-builds#61733b15d32b569eff0192ea1b1ef98784341371", - "@angular/service-worker": "github:angular/service-worker-builds#c3649d800168e7f145cc5cb8b2a55b5760844e90" + "@angular/animations": "github:angular/animations-builds#4a2fb93a7d09582c3ab7c28d06d89bbac48df6dc", + "@angular/cdk": "github:angular/cdk-builds#9845450e6cc30dda5a757df2d16c987614f263df", + "@angular/common": "github:angular/common-builds#a7169b150f5255c578171d5a561f12efe3c2c311", + "@angular/compiler": "github:angular/compiler-builds#f594b10336ac21475e347a2a623cab190aaeea4c", + "@angular/compiler-cli": "github:angular/compiler-cli-builds#53663df8656b286c1cd92b8df04454d5896da00c", + "@angular/core": "github:angular/core-builds#1f2a5bab656bdc79b2cbbdfd05755d6e06bae251", + "@angular/forms": "github:angular/forms-builds#2d743a17502789c831d195fb9b209e3e80f5eba0", + "@angular/language-service": "github:angular/language-service-builds#38c0018c0e4ee4d47cb8f049c35db94b3a15ae61", + "@angular/localize": "github:angular/localize-builds#f0a8f2b302a55fb23a1573ecf1810b773efc78fd", + "@angular/material": "github:angular/material-builds#499ff2f33fe168011ab88c12877f708bb2849922", + "@angular/material-moment-adapter": "github:angular/material-moment-adapter-builds#c43748dcaf0091560fbd76db59d4f3bd2fe166ab", + "@angular/platform-browser": "github:angular/platform-browser-builds#f9ced9dd87c6531f6092fc1fe7bcabfac684c0c5", + "@angular/platform-browser-dynamic": "github:angular/platform-browser-dynamic-builds#a8966d88a08a7fe49b901391d975fa4ac14553fb", + "@angular/platform-server": "github:angular/platform-server-builds#0bf340200767ef7d6958a65ee99d24f02947ebf3", + "@angular/router": "github:angular/router-builds#e3f594159f5df0fd73e994698744d855e905a723", + "@angular/service-worker": "github:angular/service-worker-builds#fe1ffe79e665c16a38b1186354b1ef793bfa0214" } } From 843ca01c78141b1e72ce592a9f970669bd03a5e7 Mon Sep 17 00:00:00 2001 From: Alan Agius <17563226+alan-agius4@users.noreply.github.com> Date: Wed, 4 Mar 2026 09:29:05 +0000 Subject: [PATCH 092/226] ci: update pull-request labeling action path This has been moved: https://github.com/angular/dev-infra/pull/3456 --- .github/workflows/dev-infra.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/dev-infra.yml b/.github/workflows/dev-infra.yml index cfcd43f76324..338e93e0a381 100644 --- a/.github/workflows/dev-infra.yml +++ b/.github/workflows/dev-infra.yml @@ -13,7 +13,7 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - - uses: angular/dev-infra/github-actions/pull-request-labeling@63fd18d4726829e65f6abe6f15c0fe79f63f1dec + - uses: angular/dev-infra/github-actions/labeling/pull-request@63fd18d4726829e65f6abe6f15c0fe79f63f1dec with: angular-robot-key: ${{ secrets.ANGULAR_ROBOT_PRIVATE_KEY }} post_approval_changes: From 634066654994b938948e856f2420f439c7d5b6d4 Mon Sep 17 00:00:00 2001 From: Alan Agius <alanagius@google.com> Date: Wed, 4 Mar 2026 13:08:17 +0100 Subject: [PATCH 093/226] refactor: move `baseUrl` fallback logic to `paths-plugin.ts` This ensure that we do not set `baseUrl` internally which would trigger a deprecation warning. --- .../src/builders/browser/specs/tsconfig-paths_spec.ts | 7 ++++--- .../tests/options/allowed-common-js-dependencies_spec.ts | 2 +- packages/ngtools/webpack/src/ivy/plugin.ts | 1 - packages/ngtools/webpack/src/paths-plugin.ts | 2 +- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/packages/angular_devkit/build_angular/src/builders/browser/specs/tsconfig-paths_spec.ts b/packages/angular_devkit/build_angular/src/builders/browser/specs/tsconfig-paths_spec.ts index c40337393a5e..80285bf5499d 100644 --- a/packages/angular_devkit/build_angular/src/builders/browser/specs/tsconfig-paths_spec.ts +++ b/packages/angular_devkit/build_angular/src/builders/browser/specs/tsconfig-paths_spec.ts @@ -46,13 +46,14 @@ describe('Browser Builder tsconfig paths', () => { const tsconfig = JSON.parse(virtualFs.fileBufferToString(host.scopedSync().read(tsconfigPath))); tsconfig.compilerOptions ??= {}; tsconfig.compilerOptions.paths = { - '@shared': ['src/app/shared'], - '@shared/*': ['src/app/shared/*'], - '*': ['*', 'src/app/shared/*'], + '@shared': ['./src/app/shared'], + '@shared/*': ['./src/app/shared/*'], + '*': ['./*', './src/app/shared/*'], }; host .scopedSync() .write(tsconfigPath, virtualFs.stringToFileBuffer(JSON.stringify(tsconfig, null, 2))); + host.appendToFile( 'src/app/app.component.ts', ` diff --git a/packages/angular_devkit/build_angular/src/builders/browser/tests/options/allowed-common-js-dependencies_spec.ts b/packages/angular_devkit/build_angular/src/builders/browser/tests/options/allowed-common-js-dependencies_spec.ts index 5389a1457673..b0e89583bb63 100644 --- a/packages/angular_devkit/build_angular/src/builders/browser/tests/options/allowed-common-js-dependencies_spec.ts +++ b/packages/angular_devkit/build_angular/src/builders/browser/tests/options/allowed-common-js-dependencies_spec.ts @@ -122,7 +122,7 @@ describeBuilder(buildWebpackBrowser, BROWSER_BUILDER_INFO, (harness) => { const tsconfig = JSON.parse(content); tsconfig.compilerOptions ??= {}; tsconfig.compilerOptions.paths = { - '@app/*': ['src/app/*'], + '@app/*': ['./src/app/*'], }; return JSON.stringify(tsconfig, null, 2); diff --git a/packages/ngtools/webpack/src/ivy/plugin.ts b/packages/ngtools/webpack/src/ivy/plugin.ts index ac52c4188c3e..f46b1360f26a 100644 --- a/packages/ngtools/webpack/src/ivy/plugin.ts +++ b/packages/ngtools/webpack/src/ivy/plugin.ts @@ -410,7 +410,6 @@ export class AngularWebpackPlugin { this.pluginOptions.tsconfig, this.pluginOptions.compilerOptions, ); - compilerOptions.baseUrl ??= compilerOptions['pathsBasePath']; compilerOptions.composite = false; compilerOptions.noEmitOnError = false; compilerOptions.suppressOutputPathCheck = true; diff --git a/packages/ngtools/webpack/src/paths-plugin.ts b/packages/ngtools/webpack/src/paths-plugin.ts index 612d70d4ad6e..063c96120d18 100644 --- a/packages/ngtools/webpack/src/paths-plugin.ts +++ b/packages/ngtools/webpack/src/paths-plugin.ts @@ -45,7 +45,7 @@ export class TypeScriptPathsPlugin { * @param options The `paths` and `baseUrl` options from TypeScript's `CompilerOptions`. */ update(options: TypeScriptPathsPluginOptions): void { - this.baseUrl = options.baseUrl; + this.baseUrl = options.baseUrl ?? (options as Record<string, string>)['pathsBasePath']; this.patterns = undefined; if (options.paths) { From 108fe0735f360d956cfdff61907682a2ea4138e3 Mon Sep 17 00:00:00 2001 From: Charles Lyding <19598772+clydin@users.noreply.github.com> Date: Tue, 3 Mar 2026 11:39:06 -0500 Subject: [PATCH 094/226] fix(@angular/build): conditionally allow `vi.mock` for non-relative imports Previously, `vi.mock` and related Vitest mocking APIs were completely disabled, causing errors even for valid use cases like mocking Node.js built-in modules or installed packages. This commit refactors the `vitest-mock-patch` to: - Allow `vi.mock` for non-relative module paths (e.g., 'fs', '@angular/core'). - Continue to block `vi.mock` for relative module paths (e.g., './my-local-module') to enforce the use of Angular TestBed for local dependency mocking. --- .../unit-test/runners/vitest/build-options.ts | 31 +++++++++++++++---- .../behavior/vitest-mock-unsupported_spec.ts | 29 ++++++++++++++++- 2 files changed, 53 insertions(+), 7 deletions(-) diff --git a/packages/angular/build/src/builders/unit-test/runners/vitest/build-options.ts b/packages/angular/build/src/builders/unit-test/runners/vitest/build-options.ts index 052a104863eb..3f75d2038453 100644 --- a/packages/angular/build/src/builders/unit-test/runners/vitest/build-options.ts +++ b/packages/angular/build/src/builders/unit-test/runners/vitest/build-options.ts @@ -186,13 +186,32 @@ export async function getVitestBuildOptions( const mockPatchContents = ` import { vi } from 'vitest'; + const error = new Error( - 'The "vi.mock" and related methods are not supported with the Angular unit-test system. Please use Angular TestBed for mocking.'); - vi.mock = () => { throw error; }; - vi.doMock = () => { throw error; }; - vi.importMock = () => { throw error; }; - vi.unmock = () => { throw error; }; - vi.doUnmock = () => { throw error; }; + 'The "vi.mock" and related methods are not supported for relative imports with the Angular unit-test system. ' + + 'Please use Angular TestBed for mocking dependencies.' + ); + + // Store original implementations + const { mock, doMock, importMock, unmock, doUnmock } = vi; + + function patch(original) { + return (path, ...args) => { + // Check if the path is a string and starts with a character that indicates a relative path. + if (typeof path === 'string' && /^[./]/.test(path)) { + throw error; + } + + // Call the original function for non-relative paths. + return original(path, ...args); + }; + } + + vi.mock = patch(mock); + vi.doMock = patch(doMock); + vi.importMock = patch(importMock); + vi.unmock = patch(unmock); + vi.doUnmock = patch(doUnmock); `; return { diff --git a/packages/angular/build/src/builders/unit-test/tests/behavior/vitest-mock-unsupported_spec.ts b/packages/angular/build/src/builders/unit-test/tests/behavior/vitest-mock-unsupported_spec.ts index 30565429f2ca..547d6528d86d 100644 --- a/packages/angular/build/src/builders/unit-test/tests/behavior/vitest-mock-unsupported_spec.ts +++ b/packages/angular/build/src/builders/unit-test/tests/behavior/vitest-mock-unsupported_spec.ts @@ -34,8 +34,35 @@ describeBuilder(execute, UNIT_TEST_BUILDER_INFO, (harness) => { `, ); - const { result, logs } = await harness.executeOnce(); + const { result } = await harness.executeOnce(); expect(result?.success).toBeFalse(); }); + + it('should not fail when vi.mock is used with a non-relative path', async () => { + harness.useTarget('test', { + ...BASE_OPTIONS, + }); + + harness.writeFile( + 'src/app/mock-non-relative.spec.ts', + ` + import { vi } from 'vitest'; + vi.mock('@angular/cdk', () => ({})); + describe('Ignored', () => { it('pass', () => expect(true).toBe(true)); }); + `, + ); + + // Overwrite default to avoid noise + harness.writeFile( + 'src/app/app.component.spec.ts', + ` + import { describe, it, expect } from 'vitest'; + describe('Ignored', () => { it('pass', () => expect(true).toBe(true)); }); + `, + ); + + const { result } = await harness.executeOnce(); + expect(result?.success).toBeTrue(); + }); }); }); From 1d7fceb55c4333176a33a0794288cabe68527c0f Mon Sep 17 00:00:00 2001 From: Kristiyan Kostadinov <crisbeto@abv.bg> Date: Wed, 4 Mar 2026 13:48:13 +0100 Subject: [PATCH 095/226] build: update to TypeScript 6 Updates the repo to TypeScript 6 and resolves the resulting test failures. --- MODULE.bazel | 6 +- MODULE.bazel.lock | 6 +- .../hello-world-app/src/tsconfig.server.json | 3 +- modules/testing/builder/src/test-utils.ts | 2 +- package.json | 2 +- packages/angular/build/package.json | 2 +- .../tests/behavior/rebuild-errors_spec.ts | 2 +- .../typescript-isolated-modules_spec.ts | 3 + .../behavior/typescript-path-mapping_spec.ts | 1 + .../behavior/typescript-resolve-json_spec.ts | 9 +- .../tests/options/polyfills_spec.ts | 3 + .../tests/options/setup-files_spec.ts | 4 +- .../architect/src/create-builder.ts | 6 +- .../angular_devkit/build_angular/BUILD.bazel | 1 + .../angular_devkit/build_angular/package.json | 2 +- .../src/builders/app-shell/index.ts | 8 +- .../builders/browser/specs/allow-js_spec.ts | 6 +- .../builders/browser/specs/base-href_spec.ts | 13 +- .../browser/specs/build-optimizer_spec.ts | 4 +- .../browser/specs/cross-origin_spec.ts | 8 +- .../builders/browser/specs/deploy-url_spec.ts | 4 +- .../src/builders/browser/specs/index_spec.ts | 8 +- .../specs/unused-files-warning_spec.ts | 10 +- .../tests/behavior/rebuild-errors_spec.ts | 8 +- .../src/builders/server/index.ts | 3 +- .../ssr-dev-server/specs/proxy_spec.ts | 5 +- .../builders/ssr-dev-server/specs/ssl_spec.ts | 5 +- .../ssr-dev-server/specs/works_spec.ts | 5 +- .../test/hello-world-lib/tsconfig.json | 1 - .../builders/webpack-dev-server/index_spec.ts | 6 +- .../src/builders/webpack/index_spec.ts | 4 +- .../test/angular-app/tsconfig.json | 1 - .../test/basic-app/tsconfig.json | 1 - .../core/src/json/schema/visitor_spec.ts | 13 +- .../schematics/src/engine/schematic_spec.ts | 48 +++--- .../schematics/src/rules/base_spec.ts | 117 +++++++-------- .../schematics/src/rules/call_spec.ts | 97 ++++--------- .../schematics/src/rules/move_spec.ts | 69 ++++----- .../schematics/src/rules/template_spec.ts | 28 ++-- .../schematics/src/sink/host_spec.ts | 69 +++------ .../tools/file-system-engine-host_spec.ts | 19 +-- .../tools/workflow/node-workflow_spec.ts | 7 +- .../blank/project-files/tsconfig.json | 1 - .../schematic/files/tsconfig.json | 1 - packages/ngtools/webpack/package.json | 4 +- .../src/transformers/elide_imports_spec.ts | 10 +- .../webpack/src/transformers/spec_helpers.ts | 2 +- pnpm-lock.yaml | 137 +++++++++--------- .../assets/ssr-project-webpack/tsconfig.json | 1 - 49 files changed, 333 insertions(+), 442 deletions(-) diff --git a/MODULE.bazel b/MODULE.bazel index b7cbca0be3dc..e8b0ffd5b69b 100644 --- a/MODULE.bazel +++ b/MODULE.bazel @@ -165,9 +165,9 @@ use_repo(npm, "npm") rules_ts_ext = use_extension("@aspect_rules_ts//ts:extensions.bzl", "ext") rules_ts_ext.deps( name = "angular_cli_npm_typescript", - # Obtained by: npm info typescript@5.9.3 dist.integrity - ts_integrity = "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", - ts_version = "5.9.3", + # Obtained by: npm info typescript@6.0.0-beta dist.integrity + ts_integrity = "sha512-CldZdztDpQRLM1HC6WDQjQkQN5Ub5zRau737a1diGh3lPmb9oRsaWHk1y5iqK0o7+1bNJ0oXfEGRkAogFZBL+Q==", + ts_version = "6.0.0-beta", ) use_repo(rules_ts_ext, **{"npm_typescript": "angular_cli_npm_typescript"}) diff --git a/MODULE.bazel.lock b/MODULE.bazel.lock index 90379b2bd8eb..411b7f3dd1d8 100644 --- a/MODULE.bazel.lock +++ b/MODULE.bazel.lock @@ -571,7 +571,7 @@ "@@aspect_rules_ts+//ts:extensions.bzl%ext": { "general": { "bzlTransitiveDigest": "6NyLUdrb79stFKm8oWIBK2q65cT5Upbr8IR2Qwsywu8=", - "usagesDigest": "ohKYRsVTeRZRfv+0QiN+5H2ycAbbirey745XNBkWqkk=", + "usagesDigest": "WMA7n3NdJjSGUvkfejE4MruMdWMQ15/EpOmPFuISD6A=", "recordedFileInputs": { "@@rules_browsers+//package.json": "772d873d450a539e2133635aeb5e63744cf1cec86e6b37aeecd9267a147fb0d7" }, @@ -581,8 +581,8 @@ "angular_cli_npm_typescript": { "repoRuleId": "@@aspect_rules_ts+//ts/private:npm_repositories.bzl%http_archive_version", "attributes": { - "version": "5.9.3", - "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", + "version": "6.0.0-beta", + "integrity": "sha512-CldZdztDpQRLM1HC6WDQjQkQN5Ub5zRau737a1diGh3lPmb9oRsaWHk1y5iqK0o7+1bNJ0oXfEGRkAogFZBL+Q==", "urls": [ "https://registry.npmjs.org/typescript/-/typescript-{}.tgz" ] diff --git a/modules/testing/builder/projects/hello-world-app/src/tsconfig.server.json b/modules/testing/builder/projects/hello-world-app/src/tsconfig.server.json index 9a492c781eb1..3fd4df49c45d 100644 --- a/modules/testing/builder/projects/hello-world-app/src/tsconfig.server.json +++ b/modules/testing/builder/projects/hello-world-app/src/tsconfig.server.json @@ -2,8 +2,7 @@ "extends": "./tsconfig.app.json", "compilerOptions": { "outDir": "../dist-server", - "baseUrl": "./", - "types": ["@angular/localize", "node"] + "types": ["@angular/localize", "node", "@types/express"] }, "files": [ "main.server.ts" diff --git a/modules/testing/builder/src/test-utils.ts b/modules/testing/builder/src/test-utils.ts index 3e8f1fe48fcb..63ded0215c90 100644 --- a/modules/testing/builder/src/test-utils.ts +++ b/modules/testing/builder/src/test-utils.ts @@ -80,7 +80,7 @@ export async function browserBuild( scheduleOptions?: ScheduleOptions, ): Promise<BrowserBuildOutput> { const run = await architect.scheduleTarget(target, overrides, scheduleOptions); - const output = (await run.result) as BuilderOutput & { outputs: { path: string }[] }; + const output = await run.result; expect(output.success).toBe(true); if (!output.success) { diff --git a/package.json b/package.json index 8a73b94dd8b1..85c25d1214b4 100644 --- a/package.json +++ b/package.json @@ -127,7 +127,7 @@ "semver": "7.7.4", "source-map-support": "0.5.21", "tslib": "2.8.1", - "typescript": "5.9.3", + "typescript": "6.0.0-beta", "undici": "7.22.0", "unenv": "^1.10.0", "verdaccio": "6.2.9", diff --git a/packages/angular/build/package.json b/packages/angular/build/package.json index 805c87a77a1e..a8b030952db5 100644 --- a/packages/angular/build/package.json +++ b/packages/angular/build/package.json @@ -73,7 +73,7 @@ "postcss": "^8.4.0", "tailwindcss": "^2.0.0 || ^3.0.0 || ^4.0.0", "tslib": "^2.3.0", - "typescript": ">=5.9 <6.0", + "typescript": ">=5.9 <6.1", "vitest": "^4.0.8" }, "peerDependenciesMeta": { diff --git a/packages/angular/build/src/builders/application/tests/behavior/rebuild-errors_spec.ts b/packages/angular/build/src/builders/application/tests/behavior/rebuild-errors_spec.ts index fa384be88080..de53c7223fff 100644 --- a/packages/angular/build/src/builders/application/tests/behavior/rebuild-errors_spec.ts +++ b/packages/angular/build/src/builders/application/tests/behavior/rebuild-errors_spec.ts @@ -33,7 +33,7 @@ describeBuilder(buildApplication, APPLICATION_BUILDER_INFO, (harness) => { import { Directive, Input } from '@angular/core'; @Directive({ selector: 'dir', standalone: false }) export class Dir { - @Input() foo: number; + @Input() foo!: number; } `; diff --git a/packages/angular/build/src/builders/application/tests/behavior/typescript-isolated-modules_spec.ts b/packages/angular/build/src/builders/application/tests/behavior/typescript-isolated-modules_spec.ts index 06e66cbd6da9..bef97e545ad9 100644 --- a/packages/angular/build/src/builders/application/tests/behavior/typescript-isolated-modules_spec.ts +++ b/packages/angular/build/src/builders/application/tests/behavior/typescript-isolated-modules_spec.ts @@ -55,6 +55,9 @@ describeBuilder(buildApplication, APPLICATION_BUILDER_INFO, (harness) => { tsconfig.compilerOptions.isolatedModules = true; tsconfig.compilerOptions.jsx = 'react-jsx'; + // There's an implicit `any`, because we don't include the React typings. + tsconfig.compilerOptions.noImplicitAny = false; + return JSON.stringify(tsconfig); }); diff --git a/packages/angular/build/src/builders/application/tests/behavior/typescript-path-mapping_spec.ts b/packages/angular/build/src/builders/application/tests/behavior/typescript-path-mapping_spec.ts index 6e497f149566..416ee9c227bd 100644 --- a/packages/angular/build/src/builders/application/tests/behavior/typescript-path-mapping_spec.ts +++ b/packages/angular/build/src/builders/application/tests/behavior/typescript-path-mapping_spec.ts @@ -83,6 +83,7 @@ describeBuilder(buildApplication, APPLICATION_BUILDER_INFO, (harness) => { tsconfig.compilerOptions.paths = { 'app-module': ['./a.js'], }; + tsconfig.compilerOptions.allowJs = true; return JSON.stringify(tsconfig); }); diff --git a/packages/angular/build/src/builders/application/tests/behavior/typescript-resolve-json_spec.ts b/packages/angular/build/src/builders/application/tests/behavior/typescript-resolve-json_spec.ts index cf21d5545f7a..6ad5bbb3a9de 100644 --- a/packages/angular/build/src/builders/application/tests/behavior/typescript-resolve-json_spec.ts +++ b/packages/angular/build/src/builders/application/tests/behavior/typescript-resolve-json_spec.ts @@ -20,7 +20,8 @@ describeBuilder(buildApplication, APPLICATION_BUILDER_INFO, (harness) => { // Enable tsconfig resolveJsonModule option in tsconfig await harness.modifyFile('tsconfig.json', (content) => { const tsconfig = JSON.parse(content); - tsconfig.compilerOptions.moduleResolution = 'node'; + tsconfig.compilerOptions.moduleResolution = 'node16'; + tsconfig.compilerOptions.module = 'node16'; tsconfig.compilerOptions.resolveJsonModule = true; return JSON.stringify(tsconfig); @@ -44,7 +45,8 @@ describeBuilder(buildApplication, APPLICATION_BUILDER_INFO, (harness) => { // Enable tsconfig resolveJsonModule option in tsconfig await harness.modifyFile('tsconfig.json', (content) => { const tsconfig = JSON.parse(content); - tsconfig.compilerOptions.moduleResolution = 'node'; + tsconfig.compilerOptions.moduleResolution = 'node16'; + tsconfig.compilerOptions.module = 'node16'; tsconfig.compilerOptions.resolveJsonModule = undefined; return JSON.stringify(tsconfig); @@ -73,7 +75,8 @@ describeBuilder(buildApplication, APPLICATION_BUILDER_INFO, (harness) => { // Enable tsconfig resolveJsonModule option in tsconfig await harness.modifyFile('tsconfig.json', (content) => { const tsconfig = JSON.parse(content); - tsconfig.compilerOptions.moduleResolution = 'node'; + tsconfig.compilerOptions.moduleResolution = 'node16'; + tsconfig.compilerOptions.module = 'node16'; tsconfig.compilerOptions.resolveJsonModule = false; return JSON.stringify(tsconfig); diff --git a/packages/angular/build/src/builders/application/tests/options/polyfills_spec.ts b/packages/angular/build/src/builders/application/tests/options/polyfills_spec.ts index 8b5cc3a09ab3..5fff9bd33a7c 100644 --- a/packages/angular/build/src/builders/application/tests/options/polyfills_spec.ts +++ b/packages/angular/build/src/builders/application/tests/options/polyfills_spec.ts @@ -26,6 +26,9 @@ describeBuilder(buildApplication, APPLICATION_BUILDER_INFO, (harness) => { const tsconfig = JSON.parse(content); tsconfig.compilerOptions.baseUrl = baseUrl; + // The test is specifically testing `baseUrl` which is deprecated in TS6. + tsconfig.compilerOptions.ignoreDeprecations = '6.0'; + return JSON.stringify(tsconfig); }); }); diff --git a/packages/angular/build/src/builders/unit-test/tests/options/setup-files_spec.ts b/packages/angular/build/src/builders/unit-test/tests/options/setup-files_spec.ts index be70c833c9a9..65d0dadf17b8 100644 --- a/packages/angular/build/src/builders/unit-test/tests/options/setup-files_spec.ts +++ b/packages/angular/build/src/builders/unit-test/tests/options/setup-files_spec.ts @@ -36,12 +36,12 @@ describeBuilder(execute, UNIT_TEST_BUILDER_INFO, (harness) => { it('should include the setup files', async () => { await harness.writeFiles({ - 'src/setup.ts': `globalThis['TEST_SETUP_RAN'] = true;`, + 'src/setup.ts': `(globalThis as any)['TEST_SETUP_RAN'] = true;`, 'src/app/app.component.spec.ts': ` import { describe, expect, test } from 'vitest' describe('AppComponent', () => { test('should have run setup file', () => { - expect(globalThis['TEST_SETUP_RAN']).toBe(true); + expect((globalThis as any)['TEST_SETUP_RAN']).toBe(true); }); });`, }); diff --git a/packages/angular_devkit/architect/src/create-builder.ts b/packages/angular_devkit/architect/src/create-builder.ts index d2fc8cfba5eb..de4808aaa296 100644 --- a/packages/angular_devkit/architect/src/create-builder.ts +++ b/packages/angular_devkit/architect/src/create-builder.ts @@ -92,9 +92,7 @@ export function createBuilder<OptT = json.JsonObject, OutT extends BuilderOutput function onInput(i: BuilderInput) { const builder = i.info as BuilderInfo; - const loggerName = i.target - ? targetStringFromTarget(i.target as Target) - : builder.builderName; + const loggerName = i.target ? targetStringFromTarget(i.target) : builder.builderName; const logger = new logging.Logger(loggerName); subscriptions.push(logger.subscribe((entry) => log(entry))); @@ -103,7 +101,7 @@ export function createBuilder<OptT = json.JsonObject, OutT extends BuilderOutput builder, workspaceRoot: i.workspaceRoot, currentDirectory: i.currentDirectory, - target: i.target as Target, + target: i.target, logger: logger, id: i.id, async scheduleTarget( diff --git a/packages/angular_devkit/build_angular/BUILD.bazel b/packages/angular_devkit/build_angular/BUILD.bazel index 981e2231e68f..57b9fa4e9372 100644 --- a/packages/angular_devkit/build_angular/BUILD.bazel +++ b/packages/angular_devkit/build_angular/BUILD.bazel @@ -366,6 +366,7 @@ LARGE_SPECS = { "//:node_modules/@angular/core", "//:node_modules/@angular/platform-browser", "//:node_modules/@angular/router", + "//:node_modules/@types/express", ":node_modules/rxjs", "//:node_modules/tslib", "//:node_modules/typescript", diff --git a/packages/angular_devkit/build_angular/package.json b/packages/angular_devkit/build_angular/package.json index aa877a53c81b..7e967803f446 100644 --- a/packages/angular_devkit/build_angular/package.json +++ b/packages/angular_devkit/build_angular/package.json @@ -81,7 +81,7 @@ "karma": "^6.3.0", "ng-packagr": "0.0.0-NG-PACKAGR-PEER-DEP", "tailwindcss": "^2.0.0 || ^3.0.0 || ^4.0.0", - "typescript": ">=5.9 <6.0" + "typescript": ">=5.9 <6.1" }, "peerDependenciesMeta": { "@angular/core": { diff --git a/packages/angular_devkit/build_angular/src/builders/app-shell/index.ts b/packages/angular_devkit/build_angular/src/builders/app-shell/index.ts index abdaf31f3a98..6a70ff1a60d2 100644 --- a/packages/angular_devkit/build_angular/src/builders/app-shell/index.ts +++ b/packages/angular_devkit/build_angular/src/builders/app-shell/index.ts @@ -194,10 +194,10 @@ async function _appShellBuilder( let spinner: Spinner | undefined; try { - const [browserResult, serverResult] = await Promise.all([ - browserTargetRun.result as Promise<BrowserBuilderOutput>, - serverTargetRun.result as Promise<ServerBuilderOutput>, - ]); + const [browserResult, serverResult] = (await Promise.all([ + browserTargetRun.result, + serverTargetRun.result, + ])) as [BrowserBuilderOutput, ServerBuilderOutput]; if (browserResult.success === false || browserResult.baseOutputPath === undefined) { return browserResult; diff --git a/packages/angular_devkit/build_angular/src/builders/browser/specs/allow-js_spec.ts b/packages/angular_devkit/build_angular/src/builders/browser/specs/allow-js_spec.ts index e8e270b9e16c..3d75ce49a690 100644 --- a/packages/angular_devkit/build_angular/src/builders/browser/specs/allow-js_spec.ts +++ b/packages/angular_devkit/build_angular/src/builders/browser/specs/allow-js_spec.ts @@ -36,7 +36,7 @@ describe('Browser Builder allow js', () => { ); const run = await architect.scheduleTarget(targetSpec); - const output = (await run.result) as BrowserBuilderOutput; + const output = await run.result; expect(output.success).toBe(true); const content = virtualFs.fileBufferToString( @@ -63,7 +63,7 @@ describe('Browser Builder allow js', () => { const overrides = { aot: true }; const run = await architect.scheduleTarget(targetSpec, overrides); - const output = (await run.result) as BrowserBuilderOutput; + const output = await run.result; expect(output.success).toBe(true); const content = virtualFs.fileBufferToString( @@ -93,7 +93,7 @@ describe('Browser Builder allow js', () => { const run = await architect.scheduleTarget(targetSpec, overrides); await lastValueFrom( - (run.output as Observable<BrowserBuilderOutput>).pipe( + run.output.pipe( tap((output) => { const path = relative(host.root(), join(normalize(output.outputs[0].path), 'main.js')); const content = virtualFs.fileBufferToString(host.scopedSync().read(path)); diff --git a/packages/angular_devkit/build_angular/src/builders/browser/specs/base-href_spec.ts b/packages/angular_devkit/build_angular/src/builders/browser/specs/base-href_spec.ts index f8788cf3d947..b65dd9b74525 100644 --- a/packages/angular_devkit/build_angular/src/builders/browser/specs/base-href_spec.ts +++ b/packages/angular_devkit/build_angular/src/builders/browser/specs/base-href_spec.ts @@ -10,7 +10,6 @@ import { Architect } from '@angular-devkit/architect'; import { join, normalize, tags, virtualFs } from '@angular-devkit/core'; import { lastValueFrom } from 'rxjs'; import { createArchitect, host } from '../../../testing/test-utils'; -import { BrowserBuilderOutput } from '../index'; describe('Browser Builder base href', () => { const targetSpec = { project: 'app', target: 'build' }; @@ -23,6 +22,12 @@ describe('Browser Builder base href', () => { afterEach(async () => host.restore().toPromise()); it('works', async () => { + host.replaceInFile( + 'tsconfig.json', + '"target": "es2022"', + '"target": "es2022", "allowJs": true', + ); + host.writeMultipleFiles({ 'src/my-js-file.js': `console.log(1); export const a = 2;`, 'src/main.ts': `import { a } from './my-js-file'; console.log(a);`, @@ -30,7 +35,7 @@ describe('Browser Builder base href', () => { const overrides = { baseHref: '/myUrl' }; const run = await architect.scheduleTarget(targetSpec, overrides); - const output = (await run.result) as BrowserBuilderOutput; + const output = await run.result; expect(output.success).toBe(true); const fileName = join(normalize(output.outputs[0].path), 'index.html'); @@ -51,7 +56,7 @@ describe('Browser Builder base href', () => { }); const run = await architect.scheduleTarget(targetSpec); - const output = (await run.result) as BrowserBuilderOutput; + const output = await run.result; expect(output.success).toBeTrue(); const fileName = join(normalize(output.outputs[0].path), 'index.html'); @@ -71,7 +76,7 @@ describe('Browser Builder base href', () => { const overrides = { baseHref: '/myUrl' }; const run = await architect.scheduleTarget(targetSpec, overrides); - const output = (await run.result) as BrowserBuilderOutput; + const output = await run.result; expect(output.success).toBe(true); const fileName = join(normalize(output.outputs[0].path), 'index.html'); const content = virtualFs.fileBufferToString( diff --git a/packages/angular_devkit/build_angular/src/builders/browser/specs/build-optimizer_spec.ts b/packages/angular_devkit/build_angular/src/builders/browser/specs/build-optimizer_spec.ts index 47f641fb55ff..b6c7be1fd931 100644 --- a/packages/angular_devkit/build_angular/src/builders/browser/specs/build-optimizer_spec.ts +++ b/packages/angular_devkit/build_angular/src/builders/browser/specs/build-optimizer_spec.ts @@ -40,7 +40,7 @@ describe('Browser Builder build optimizer', () => { const boOverrides = { ...noBoOverrides, buildOptimizer: true }; const run = await architect.scheduleTarget(targetSpec, noBoOverrides); - const output = (await run.result) as BrowserBuilderOutput; + const output = await run.result; expect(output.success).toBe(true); @@ -54,7 +54,7 @@ describe('Browser Builder build optimizer', () => { await run.stop(); const boRun = await architect.scheduleTarget(targetSpec, boOverrides); - const boOutput = (await run.result) as BrowserBuilderOutput; + const boOutput = await run.result; expect(boOutput.success).toBe(true); const boStats = await lastValueFrom( diff --git a/packages/angular_devkit/build_angular/src/builders/browser/specs/cross-origin_spec.ts b/packages/angular_devkit/build_angular/src/builders/browser/specs/cross-origin_spec.ts index 8101c325b724..8b0b21eff392 100644 --- a/packages/angular_devkit/build_angular/src/builders/browser/specs/cross-origin_spec.ts +++ b/packages/angular_devkit/build_angular/src/builders/browser/specs/cross-origin_spec.ts @@ -34,7 +34,7 @@ describe('Browser Builder crossOrigin', () => { it('works with use-credentials', async () => { const overrides = { crossOrigin: CrossOrigin.UseCredentials }; const run = await architect.scheduleTarget(targetSpec, overrides); - const output = (await run.result) as BrowserBuilderOutput; + const output = await run.result; expect(output.success).toBe(true); const fileName = join(normalize(output.outputs[0].path), 'index.html'); const content = virtualFs.fileBufferToString( @@ -54,7 +54,7 @@ describe('Browser Builder crossOrigin', () => { it('works with anonymous', async () => { const overrides = { crossOrigin: CrossOrigin.Anonymous }; const run = await architect.scheduleTarget(targetSpec, overrides); - const output = (await run.result) as BrowserBuilderOutput; + const output = await run.result; expect(output.success).toBe(true); const fileName = join(normalize(output.outputs[0].path), 'index.html'); const content = virtualFs.fileBufferToString( @@ -75,7 +75,7 @@ describe('Browser Builder crossOrigin', () => { it('works with none', async () => { const overrides = { crossOrigin: CrossOrigin.None }; const run = await architect.scheduleTarget(targetSpec, overrides); - const output = (await run.result) as BrowserBuilderOutput; + const output = await run.result; expect(output.success).toBe(true); const fileName = join(normalize(output.outputs[0].path), 'index.html'); const content = virtualFs.fileBufferToString( @@ -101,7 +101,7 @@ describe('Browser Builder crossOrigin', () => { const overrides = { crossOrigin: CrossOrigin.UseCredentials }; const run = await architect.scheduleTarget(targetSpec, overrides); - const output = (await run.result) as BrowserBuilderOutput; + const output = await run.result; expect(output.success).toBe(true); const fileName = join(normalize(output.outputs[0].path), 'runtime.js'); diff --git a/packages/angular_devkit/build_angular/src/builders/browser/specs/deploy-url_spec.ts b/packages/angular_devkit/build_angular/src/builders/browser/specs/deploy-url_spec.ts index 69453827b5a5..c24fabd3128b 100644 --- a/packages/angular_devkit/build_angular/src/builders/browser/specs/deploy-url_spec.ts +++ b/packages/angular_devkit/build_angular/src/builders/browser/specs/deploy-url_spec.ts @@ -34,7 +34,7 @@ describe('Browser Builder deploy url', () => { }); const run = await architect.scheduleTarget(targetSpec, overrides); - const output = (await run.result) as BrowserBuilderOutput; + const output = await run.result; expect(output.success).toBe(true); expect(output.outputs[0].path).not.toBeUndefined(); const outputPath = normalize(output.outputs[0].path); @@ -51,7 +51,7 @@ describe('Browser Builder deploy url', () => { expect(runtimeContent).toContain('deployUrl/'); const run2 = await architect.scheduleTarget(targetSpec, overrides2); - const output2 = (await run2.result) as BrowserBuilderOutput; + const output2 = await run2.result; expect(output2.outputs[0].path).toEqual(outputPath); // These should be the same. const content2 = virtualFs.fileBufferToString( diff --git a/packages/angular_devkit/build_angular/src/builders/browser/specs/index_spec.ts b/packages/angular_devkit/build_angular/src/builders/browser/specs/index_spec.ts index cf2e2a5d6c76..7f06fe730475 100644 --- a/packages/angular_devkit/build_angular/src/builders/browser/specs/index_spec.ts +++ b/packages/angular_devkit/build_angular/src/builders/browser/specs/index_spec.ts @@ -31,7 +31,7 @@ describe('Browser Builder index HTML processing', () => { }); const run = await architect.scheduleTarget(targetSpec); - const output = (await run.result) as BrowserBuilderOutput; + const output = await run.result; expect(output.success).toBe(true); const fileName = join(normalize(output.outputs[0].path), 'index.html'); const content = virtualFs.fileBufferToString( @@ -56,7 +56,7 @@ describe('Browser Builder index HTML processing', () => { }); const run = await architect.scheduleTarget(targetSpec); - const output = (await run.result) as BrowserBuilderOutput; + const output = await run.result; expect(output.success).toBe(true); const fileName = join(normalize(output.outputs[0].path), 'index.html'); const content = virtualFs.fileBufferToString( @@ -81,7 +81,7 @@ describe('Browser Builder index HTML processing', () => { }); const run = await architect.scheduleTarget(targetSpec); - const output = (await run.result) as BrowserBuilderOutput; + const output = await run.result; expect(output.success).toBe(true); const fileName = join(normalize(output.outputs[0].path), 'index.html'); const content = virtualFs.fileBufferToString( @@ -105,7 +105,7 @@ describe('Browser Builder index HTML processing', () => { }); const run = await architect.scheduleTarget(targetSpec); - const output = (await run.result) as BrowserBuilderOutput; + const output = await run.result; expect(output.success).toBe(true); const fileName = join(normalize(output.outputs[0].path), 'index.html'); const content = virtualFs.fileBufferToString( diff --git a/packages/angular_devkit/build_angular/src/builders/browser/specs/unused-files-warning_spec.ts b/packages/angular_devkit/build_angular/src/builders/browser/specs/unused-files-warning_spec.ts index b25d599f18a4..fc66978d8114 100644 --- a/packages/angular_devkit/build_angular/src/builders/browser/specs/unused-files-warning_spec.ts +++ b/packages/angular_devkit/build_angular/src/builders/browser/specs/unused-files-warning_spec.ts @@ -30,7 +30,7 @@ describe('Browser Builder unused files warnings', () => { logger.subscribe((e) => logs.push(e.message)); const run = await architect.scheduleTarget(targetSpec, undefined, { logger }); - const output = (await run.result) as BrowserBuilderOutput; + const output = await run.result; expect(output.success).toBe(true); expect(logs.join().includes(warningMessageSuffix)).toBe(false); @@ -49,7 +49,7 @@ describe('Browser Builder unused files warnings', () => { logger.subscribe((e) => logs.push(e.message)); const run = await architect.scheduleTarget(targetSpec, undefined, { logger }); - const output = (await run.result) as BrowserBuilderOutput; + const output = await run.result; expect(output.success).toBe(true); expect(logs.join().includes(`unused-file.ts ${warningMessageSuffix}`)).toBe(true); @@ -82,7 +82,7 @@ describe('Browser Builder unused files warnings', () => { logger.subscribe((e) => logs.push(e.message)); const run = await architect.scheduleTarget(targetSpec, { aot: true }, { logger }); - const output = (await run.result) as BrowserBuilderOutput; + const output = await run.result; expect(output.success).toBe(true); expect(logs.join().includes(warningMessageSuffix)).toBe(false); @@ -105,7 +105,7 @@ describe('Browser Builder unused files warnings', () => { logger.subscribe((e) => logs.push(e.message)); const run = await architect.scheduleTarget(targetSpec, undefined, { logger }); - const output = (await run.result) as BrowserBuilderOutput; + const output = await run.result; expect(output.success).toBe(true); expect(logs.join().includes(warningMessageSuffix)).toBe(false); @@ -129,7 +129,7 @@ describe('Browser Builder unused files warnings', () => { logger.subscribe((e) => logs.push(e.message)); const run = await architect.scheduleTarget(targetSpec, undefined, { logger }); - const output = (await run.result) as BrowserBuilderOutput; + const output = await run.result; expect(output.success).toBe(true); expect(logs.join().includes(warningMessageSuffix)).toBe(false); diff --git a/packages/angular_devkit/build_angular/src/builders/browser/tests/behavior/rebuild-errors_spec.ts b/packages/angular_devkit/build_angular/src/builders/browser/tests/behavior/rebuild-errors_spec.ts index 0daece623c63..26cbe1144d2b 100644 --- a/packages/angular_devkit/build_angular/src/builders/browser/tests/behavior/rebuild-errors_spec.ts +++ b/packages/angular_devkit/build_angular/src/builders/browser/tests/behavior/rebuild-errors_spec.ts @@ -23,7 +23,7 @@ describeBuilder(buildWebpackBrowser, BROWSER_BUILDER_INFO, (harness) => { import { Directive, Input } from '@angular/core'; @Directive({ selector: 'dir', standalone: false }) export class Dir { - @Input() foo: number; + @Input() foo!: number; } `; @@ -150,7 +150,7 @@ describeBuilder(buildWebpackBrowser, BROWSER_BUILDER_INFO, (harness) => { import { Directive, Input } from '@angular/core'; @Directive({ selector: 'dir', standalone: false }) export class Dir { - @Input() foo: number; + @Input() foo!: number; } `, ); @@ -160,7 +160,7 @@ describeBuilder(buildWebpackBrowser, BROWSER_BUILDER_INFO, (harness) => { import { Directive } from '@angular/core'; @Directive({ selector: 'dir', standalone: false }) export class Dir2 { - foo: string; + foo!: string; } `; await harness.writeFile('src/app/dir2.ts', goodDirectiveContents); @@ -216,7 +216,7 @@ describeBuilder(buildWebpackBrowser, BROWSER_BUILDER_INFO, (harness) => { import { Directive, Input } from '@angular/core'; @Directive({ selector: 'dir', standalone: false }) export class Dir2 { - @Input() foo: string; + @Input() foo!: string; } `, ); diff --git a/packages/angular_devkit/build_angular/src/builders/server/index.ts b/packages/angular_devkit/build_angular/src/builders/server/index.ts index 4903fe8e2403..ffe7174f0c44 100644 --- a/packages/angular_devkit/build_angular/src/builders/server/index.ts +++ b/packages/angular_devkit/build_angular/src/builders/server/index.ts @@ -158,7 +158,8 @@ export function execute( }), concatMap(async (output) => { if (!output.success) { - return output as ServerBuilderOutput; + // The `as unknown` is here primarily for the linter. + return output as unknown as ServerBuilderOutput; } return { diff --git a/packages/angular_devkit/build_angular/src/builders/ssr-dev-server/specs/proxy_spec.ts b/packages/angular_devkit/build_angular/src/builders/ssr-dev-server/specs/proxy_spec.ts index c6ea08e05cda..5539501222a6 100644 --- a/packages/angular_devkit/build_angular/src/builders/ssr-dev-server/specs/proxy_spec.ts +++ b/packages/angular_devkit/build_angular/src/builders/ssr-dev-server/specs/proxy_spec.ts @@ -11,7 +11,6 @@ import { Architect } from '@angular-devkit/architect'; import * as browserSync from 'browser-sync'; import * as http from 'node:http'; import { createArchitect, host } from '../../../testing/test-utils'; -import { SSRDevServerBuilderOutput } from '../index'; describe('Serve SSR Builder - Proxy', () => { const target = { project: 'app', target: 'serve-ssr' }; @@ -33,7 +32,7 @@ describe('Serve SSR Builder - Proxy', () => { host.writeMultipleFiles({ 'src/main.server.ts': ` import { CommonEngine } from '@angular/ssr/node'; - import * as express from 'express'; + import express from 'express'; import { resolve, join } from 'node:path'; import { AppServerModule } from './app/app.module.server'; @@ -103,7 +102,7 @@ describe('Serve SSR Builder - Proxy', () => { proxyConfig: 'proxy.config.json', }); - const output = (await run.result) as SSRDevServerBuilderOutput; + const output = await run.result; expect(output.success).toBe(true); expect(output.baseUrl).toBe(`http://localhost:${output.port}`); diff --git a/packages/angular_devkit/build_angular/src/builders/ssr-dev-server/specs/ssl_spec.ts b/packages/angular_devkit/build_angular/src/builders/ssr-dev-server/specs/ssl_spec.ts index 8c098b514fbb..0e81c282791a 100644 --- a/packages/angular_devkit/build_angular/src/builders/ssr-dev-server/specs/ssl_spec.ts +++ b/packages/angular_devkit/build_angular/src/builders/ssr-dev-server/specs/ssl_spec.ts @@ -11,7 +11,6 @@ import { Architect } from '@angular-devkit/architect'; import * as browserSync from 'browser-sync'; import { Agent } from 'undici'; import { createArchitect, host } from '../../../testing/test-utils'; -import { SSRDevServerBuilderOutput } from '../index'; describe('Serve SSR Builder - SSL', () => { const target = { project: 'app', target: 'serve-ssr' }; @@ -33,7 +32,7 @@ describe('Serve SSR Builder - SSL', () => { host.writeMultipleFiles({ 'src/main.server.ts': ` import { CommonEngine } from '@angular/ssr/node'; - import * as express from 'express'; + import express from 'express'; import { resolve, join } from 'node:path'; import { AppServerModule } from './app/app.module.server'; @@ -81,7 +80,7 @@ describe('Serve SSR Builder - SSL', () => { it('works with SSL', async () => { const run = await architect.scheduleTarget(target, { ssl: true, port: 0 }); - const output = (await run.result) as SSRDevServerBuilderOutput; + const output = await run.result; expect(output.success).toBe(true); expect(output.baseUrl).toBe(`https://localhost:${output.port}`); diff --git a/packages/angular_devkit/build_angular/src/builders/ssr-dev-server/specs/works_spec.ts b/packages/angular_devkit/build_angular/src/builders/ssr-dev-server/specs/works_spec.ts index 731443b6cd94..92324fa34526 100644 --- a/packages/angular_devkit/build_angular/src/builders/ssr-dev-server/specs/works_spec.ts +++ b/packages/angular_devkit/build_angular/src/builders/ssr-dev-server/specs/works_spec.ts @@ -10,7 +10,6 @@ import { Architect } from '@angular-devkit/architect'; // eslint-disable-next-line import/no-extraneous-dependencies import * as browserSync from 'browser-sync'; import { createArchitect, host } from '../../../testing/test-utils'; -import { SSRDevServerBuilderOutput } from '../index'; describe('Serve SSR Builder - Works', () => { const target = { project: 'app', target: 'serve-ssr' }; @@ -32,7 +31,7 @@ describe('Serve SSR Builder - Works', () => { host.writeMultipleFiles({ 'src/main.server.ts': ` import { CommonEngine } from '@angular/ssr/node'; - import * as express from 'express'; + import express from 'express'; import { resolve, join } from 'node:path'; import { AppServerModule } from './app/app.module.server'; @@ -90,7 +89,7 @@ describe('Serve SSR Builder - Works', () => { it('works with port 0', async () => { const run = await architect.scheduleTarget(target, { port: 0 }); - const output = (await run.result) as SSRDevServerBuilderOutput; + const output = await run.result; await run.stop(); expect(output.success).toBe(true); diff --git a/packages/angular_devkit/build_angular/test/hello-world-lib/tsconfig.json b/packages/angular_devkit/build_angular/test/hello-world-lib/tsconfig.json index f749045924e4..8ccae14cd594 100644 --- a/packages/angular_devkit/build_angular/test/hello-world-lib/tsconfig.json +++ b/packages/angular_devkit/build_angular/test/hello-world-lib/tsconfig.json @@ -1,7 +1,6 @@ { "compileOnSave": false, "compilerOptions": { - "baseUrl": "./", "outDir": "./dist/out-tsc", "sourceMap": true, "declaration": false, diff --git a/packages/angular_devkit/build_webpack/src/builders/webpack-dev-server/index_spec.ts b/packages/angular_devkit/build_webpack/src/builders/webpack-dev-server/index_spec.ts index 80b12e622b71..9e4f688d0c4e 100644 --- a/packages/angular_devkit/build_webpack/src/builders/webpack-dev-server/index_spec.ts +++ b/packages/angular_devkit/build_webpack/src/builders/webpack-dev-server/index_spec.ts @@ -50,7 +50,7 @@ describe('Dev Server Builder', () => { const run = await architect.scheduleTarget(webpackTargetSpec, { webpackConfig: 'webpack.config.cjs', }); - const output = (await run.result) as DevServerBuildOutput; + const output = await run.result; expect(output.success).toBe(true); const response = await fetch(`http://localhost:${output.port}/bundle.js`); @@ -63,7 +63,7 @@ describe('Dev Server Builder', () => { const run = await architect.scheduleTarget(webpackTargetSpec, { webpackConfig: 'webpack.config.mjs', }); - const output = (await run.result) as DevServerBuildOutput; + const output = await run.result; expect(output.success).toBe(true); const response = await fetch(`http://localhost:${output.port}/bundle.js`); @@ -74,7 +74,7 @@ describe('Dev Server Builder', () => { it('works and returns emitted files', async () => { const run = await architect.scheduleTarget(webpackTargetSpec); - const output = (await run.result) as DevServerBuildOutput; + const output = await run.result; expect(output.success).toBe(true); expect(output.emittedFiles).toContain({ diff --git a/packages/angular_devkit/build_webpack/src/builders/webpack/index_spec.ts b/packages/angular_devkit/build_webpack/src/builders/webpack/index_spec.ts index 9564387d3d73..6209272d9376 100644 --- a/packages/angular_devkit/build_webpack/src/builders/webpack/index_spec.ts +++ b/packages/angular_devkit/build_webpack/src/builders/webpack/index_spec.ts @@ -73,7 +73,7 @@ describe('Webpack Builder basic test', () => { it('works and returns emitted files', async () => { const run = await architect.scheduleTarget({ project: 'app', target: 'build' }); - const output = (await run.result) as BuildResult; + const output = await run.result; expect(output.success).toBe(true); expect(output.emittedFiles).toContain({ @@ -114,7 +114,7 @@ describe('Webpack Builder basic test', () => { it('works and returns emitted files', async () => { const run = await architect.scheduleTarget({ project: 'app', target: 'build-webpack' }); - const output = (await run.result) as BuildResult; + const output = await run.result; expect(output.success).toBe(true); expect(output.emittedFiles).toContain( diff --git a/packages/angular_devkit/build_webpack/test/angular-app/tsconfig.json b/packages/angular_devkit/build_webpack/test/angular-app/tsconfig.json index c2343708c79a..beb80b8f4d01 100644 --- a/packages/angular_devkit/build_webpack/test/angular-app/tsconfig.json +++ b/packages/angular_devkit/build_webpack/test/angular-app/tsconfig.json @@ -1,7 +1,6 @@ { "compileOnSave": false, "compilerOptions": { - "baseUrl": "./", "outDir": "./dist/out-tsc", "sourceMap": true, "declaration": false, diff --git a/packages/angular_devkit/build_webpack/test/basic-app/tsconfig.json b/packages/angular_devkit/build_webpack/test/basic-app/tsconfig.json index 4625ba86dca4..d93948c96ff0 100644 --- a/packages/angular_devkit/build_webpack/test/basic-app/tsconfig.json +++ b/packages/angular_devkit/build_webpack/test/basic-app/tsconfig.json @@ -1,7 +1,6 @@ { "compileOnSave": false, "compilerOptions": { - "baseUrl": "./", "outDir": "./dist/out-tsc", "sourceMap": true, "declaration": false, diff --git a/packages/angular_devkit/core/src/json/schema/visitor_spec.ts b/packages/angular_devkit/core/src/json/schema/visitor_spec.ts index 4a556f979e9d..38cde5732e3e 100644 --- a/packages/angular_devkit/core/src/json/schema/visitor_spec.ts +++ b/packages/angular_devkit/core/src/json/schema/visitor_spec.ts @@ -84,13 +84,13 @@ describe('visitJson', () => { expect(result).toEqual({ a: { b: { c: ['_1', '_2', '_3'] } } }); }); - it('goes through all replacements recursively (async)', (done) => { + it('goes through all replacements recursively (async)', async () => { const json = { a: 1 }; const newJson = { b: '' }; const newJson2 = { c: [] }; const newJson3 = [1, 2, 3]; - visitJson(json, (value, ptr) => { + const result = await visitJson(json, (value, ptr) => { if (ptr.endsWith('a')) { return from(Promise.resolve(newJson)); } else if (ptr.endsWith('b')) { @@ -104,12 +104,9 @@ describe('visitJson', () => { } else { return from(Promise.resolve('abc')); } - }) - .toPromise() - .then((result) => { - expect(result).toEqual({ a: { b: { c: ['_1', '_2', '_3'] } } }); - done(); - }, done.fail); + }).toPromise(); + + expect(result).toEqual({ a: { b: { c: ['_1', '_2', '_3'] } } }); }); it('works with schema', () => { diff --git a/packages/angular_devkit/schematics/src/engine/schematic_spec.ts b/packages/angular_devkit/schematics/src/engine/schematic_spec.ts index b5f6fa8a18b9..8beb6ad81e9f 100644 --- a/packages/angular_devkit/schematics/src/engine/schematic_spec.ts +++ b/packages/angular_devkit/schematics/src/engine/schematic_spec.ts @@ -48,7 +48,7 @@ function files(tree: Tree) { } describe('Schematic', () => { - it('works with a rule', (done) => { + it('works with a rule', async () => { let inner: Tree | null = null; const desc: SchematicDescription<CollectionT, SchematicT> = { collection, @@ -64,15 +64,12 @@ describe('Schematic', () => { }; const schematic = new SchematicImpl(desc, desc.factory, null!, engine); - lastValueFrom(schematic.call({}, observableOf(empty()))) - .then((x) => { - expect(files(inner!)).toEqual([]); - expect(files(x)).toEqual(['/a/b/c']); - }) - .then(done, done.fail); + const x = await lastValueFrom(schematic.call({}, observableOf(empty()))); + expect(files(inner!)).toEqual([]); + expect(files(x)).toEqual(['/a/b/c']); }); - it('works with a rule that returns an observable', (done) => { + it('works with a rule that returns an observable', async () => { let inner: Tree | null = null; const desc: SchematicDescription<CollectionT, SchematicT> = { collection, @@ -87,16 +84,13 @@ describe('Schematic', () => { }; const schematic = new SchematicImpl(desc, desc.factory, null!, engine); - lastValueFrom(schematic.call({}, observableOf(empty()))) - .then((x) => { - expect(files(inner!)).toEqual([]); - expect(files(x)).toEqual([]); - expect(inner).not.toBe(x); - }) - .then(done, done.fail); + const x = await lastValueFrom(schematic.call({}, observableOf(empty()))); + expect(files(inner!)).toEqual([]); + expect(files(x)).toEqual([]); + expect(inner!).not.toBe(x); }); - it('works with nested chained function rules', (done) => { + it('works with nested chained function rules', async () => { let chainCount = 0; let oneCount = 0; let twoCount = 0; @@ -137,17 +131,14 @@ describe('Schematic', () => { }; const schematic = new SchematicImpl(desc, desc.factory, null!, engine); - lastValueFrom(schematic.call({}, observableOf(empty()))) - .then((_x) => { - expect(chainCount).toBe(1); - expect(oneCount).toBe(1); - expect(twoCount).toBe(1); - expect(threeCount).toBe(1); - }) - .then(done, done.fail); + await lastValueFrom(schematic.call({}, observableOf(empty()))); + expect(chainCount).toBe(1); + expect(oneCount).toBe(1); + expect(twoCount).toBe(1); + expect(threeCount).toBe(1); }); - it('can be called with a scope', (done) => { + it('can be called with a scope', async () => { const desc: SchematicDescription<CollectionT, SchematicT> = { collection, name: 'test', @@ -159,10 +150,7 @@ describe('Schematic', () => { }; const schematic = new SchematicImpl(desc, desc.factory, null!, engine); - lastValueFrom(schematic.call({}, observableOf(empty()), {}, { scope: 'base' })) - .then((x) => { - expect(files(x)).toEqual(['/base/a/b/c']); - }) - .then(done, done.fail); + const x = await lastValueFrom(schematic.call({}, observableOf(empty()), {}, { scope: 'base' })); + expect(files(x)).toEqual(['/base/a/b/c']); }); }); diff --git a/packages/angular_devkit/schematics/src/rules/base_spec.ts b/packages/angular_devkit/schematics/src/rules/base_spec.ts index 9470a55fcdb1..b3578ca8c00a 100644 --- a/packages/angular_devkit/schematics/src/rules/base_spec.ts +++ b/packages/angular_devkit/schematics/src/rules/base_spec.ts @@ -23,7 +23,7 @@ const context: SchematicContext = { } as {} as SchematicContext; describe('chain', () => { - it('works with simple rules', (done) => { + it('works with simple rules', async () => { const rulesCalled: Tree[] = []; const tree0 = empty(); @@ -35,18 +35,17 @@ describe('chain', () => { const rule1: Rule = (tree: Tree) => ((rulesCalled[1] = tree), tree2); const rule2: Rule = (tree: Tree) => ((rulesCalled[2] = tree), tree3); - lastValueFrom(callRule(chain([rule0, rule1, rule2]), observableOf(tree0), context)) - .then((result) => { - expect(result).not.toBe(tree0); - expect(rulesCalled[0]).toBe(tree0); - expect(rulesCalled[1]).toBe(tree1); - expect(rulesCalled[2]).toBe(tree2); - expect(result).toBe(tree3); - }) - .then(done, done.fail); + const result = await lastValueFrom( + callRule(chain([rule0, rule1, rule2]), observableOf(tree0), context), + ); + expect(result).not.toBe(tree0); + expect(rulesCalled[0]).toBe(tree0); + expect(rulesCalled[1]).toBe(tree1); + expect(rulesCalled[2]).toBe(tree2); + expect(result).toBe(tree3); }); - it('works with async rules', (done) => { + it('works with async rules', async () => { const rulesCalled: Tree[] = []; const tree0 = empty(); @@ -58,15 +57,12 @@ describe('chain', () => { const rule1: Rule = async (tree: Tree) => ((rulesCalled[1] = tree), tree2); const rule2: Rule = async (tree: Tree) => ((rulesCalled[2] = tree), tree3); - lastValueFrom(callRule(chain([rule0, rule1, rule2]), tree0, context)) - .then((result) => { - expect(result).not.toBe(tree0); - expect(rulesCalled[0]).toBe(tree0); - expect(rulesCalled[1]).toBe(tree1); - expect(rulesCalled[2]).toBe(tree2); - expect(result).toBe(tree3); - }) - .then(done, done.fail); + const result = await lastValueFrom(callRule(chain([rule0, rule1, rule2]), tree0, context)); + expect(result).not.toBe(tree0); + expect(rulesCalled[0]).toBe(tree0); + expect(rulesCalled[1]).toBe(tree1); + expect(rulesCalled[2]).toBe(tree2); + expect(result).toBe(tree3); }); it('works with a sync generator of rules', async () => { @@ -123,7 +119,7 @@ describe('chain', () => { expect(result).toBe(tree3); }); - it('works with observable rules', (done) => { + it('works with observable rules', async () => { const rulesCalled: Tree[] = []; const tree0 = empty(); @@ -135,20 +131,19 @@ describe('chain', () => { const rule1: Rule = (tree: Tree) => ((rulesCalled[1] = tree), observableOf(tree2)); const rule2: Rule = (tree: Tree) => ((rulesCalled[2] = tree), tree3); - lastValueFrom(callRule(chain([rule0, rule1, rule2]), observableOf(tree0), context)) - .then((result) => { - expect(result).not.toBe(tree0); - expect(rulesCalled[0]).toBe(tree0); - expect(rulesCalled[1]).toBe(tree1); - expect(rulesCalled[2]).toBe(tree2); - expect(result).toBe(tree3); - }) - .then(done, done.fail); + const result = await lastValueFrom( + callRule(chain([rule0, rule1, rule2]), observableOf(tree0), context), + ); + expect(result).not.toBe(tree0); + expect(rulesCalled[0]).toBe(tree0); + expect(rulesCalled[1]).toBe(tree1); + expect(rulesCalled[2]).toBe(tree2); + expect(result).toBe(tree3); }); }); describe('apply', () => { - it('works with simple rules', (done) => { + it('works with simple rules', async () => { const rulesCalled: Tree[] = []; const tree0 = empty(); const tree1 = empty(); @@ -160,18 +155,15 @@ describe('apply', () => { const rule1: Rule = (tree: Tree) => ((rulesCalled[1] = tree), tree2); const rule2: Rule = (tree: Tree) => ((rulesCalled[2] = tree), tree3); - lastValueFrom(callSource(apply(source, [rule0, rule1, rule2]), context)) - .then((result) => { - expect(result).not.toBe(tree0); - expect(rulesCalled[0]).toBe(tree0); - expect(rulesCalled[1]).toBe(tree1); - expect(rulesCalled[2]).toBe(tree2); - expect(result).toBe(tree3); - }) - .then(done, done.fail); + const result = await lastValueFrom(callSource(apply(source, [rule0, rule1, rule2]), context)); + expect(result).not.toBe(tree0); + expect(rulesCalled[0]).toBe(tree0); + expect(rulesCalled[1]).toBe(tree1); + expect(rulesCalled[2]).toBe(tree2); + expect(result).toBe(tree3); }); - it('works with observable rules', (done) => { + it('works with observable rules', async () => { const rulesCalled: Tree[] = []; const tree0 = empty(); const tree1 = empty(); @@ -183,20 +175,17 @@ describe('apply', () => { const rule1: Rule = (tree: Tree) => ((rulesCalled[1] = tree), observableOf(tree2)); const rule2: Rule = (tree: Tree) => ((rulesCalled[2] = tree), tree3); - lastValueFrom(callSource(apply(source, [rule0, rule1, rule2]), context)) - .then((result) => { - expect(result).not.toBe(tree0); - expect(rulesCalled[0]).toBe(tree0); - expect(rulesCalled[1]).toBe(tree1); - expect(rulesCalled[2]).toBe(tree2); - expect(result).toBe(tree3); - }) - .then(done, done.fail); + const result = await lastValueFrom(callSource(apply(source, [rule0, rule1, rule2]), context)); + expect(result).not.toBe(tree0); + expect(rulesCalled[0]).toBe(tree0); + expect(rulesCalled[1]).toBe(tree1); + expect(rulesCalled[2]).toBe(tree2); + expect(result).toBe(tree3); }); }); describe('partitionApplyMerge', () => { - it('works with simple rules', (done) => { + it('works with simple rules', async () => { const host = new virtualFs.test.TestHost({ '/test1': '', '/test2': '', @@ -217,30 +206,26 @@ describe('partitionApplyMerge', () => { return empty(); }; - lastValueFrom( + const result = await lastValueFrom( callRule(partitionApplyMerge(predicate, ruleYes, ruleNo), observableOf(tree), context), - ) - .then((result) => { - expect(result.exists('/test1')).toBe(false); - expect(result.exists('/test2')).toBe(false); - }) - .then(done, done.fail); + ); + expect(result.exists('/test1')).toBe(false); + expect(result.exists('/test2')).toBe(false); }); }); describe('applyToSubtree', () => { - it('works', (done) => { + it('works', async () => { const tree = new HostTree(); tree.create('a/b/file1', 'hello world'); tree.create('a/b/file2', 'hello world'); tree.create('a/c/file3', 'hello world'); - lastValueFrom(callRule(applyToSubtree('a/b', [move('x')]), observableOf(tree), context)) - .then((result) => { - expect(result.exists('a/b/x/file1')).toBe(true); - expect(result.exists('a/b/x/file2')).toBe(true); - expect(result.exists('a/c/file3')).toBe(true); - }) - .then(done, done.fail); + const result = await lastValueFrom( + callRule(applyToSubtree('a/b', [move('x')]), observableOf(tree), context), + ); + expect(result.exists('a/b/x/file1')).toBe(true); + expect(result.exists('a/b/x/file2')).toBe(true); + expect(result.exists('a/c/file3')).toBe(true); }); }); diff --git a/packages/angular_devkit/schematics/src/rules/call_spec.ts b/packages/angular_devkit/schematics/src/rules/call_spec.ts index f088f03a60b1..3d9a7c8ce2ea 100644 --- a/packages/angular_devkit/schematics/src/rules/call_spec.ts +++ b/packages/angular_devkit/schematics/src/rules/call_spec.ts @@ -25,70 +25,42 @@ const context: SchematicContext = { } as {} as SchematicContext; describe('callSource', () => { - it('errors if undefined source', (done) => { + it('errors if undefined source', async () => { const source0: any = () => undefined; - callSource(source0, context) - .toPromise() - .then( - () => done.fail(), - (err) => { - expect(err).toEqual(new InvalidSourceResultException()); - }, - ) - .then(done, done.fail); + await expectAsync(callSource(source0, context).toPromise()).toBeRejectedWithError( + InvalidSourceResultException, + ); }); - it('errors if invalid source object', (done) => { + it('errors if invalid source object', async () => { const source0: Source = () => ({}) as Tree; - callSource(source0, context) - .toPromise() - .then( - () => done.fail(), - (err) => { - expect(err).toEqual(new InvalidSourceResultException({})); - }, - ) - .then(done, done.fail); + await expectAsync(callSource(source0, context).toPromise()).toBeRejectedWithError( + InvalidSourceResultException, + ); }); - it('errors if Observable of invalid source object', (done) => { + it('errors if Observable of invalid source object', async () => { const source0: Source = () => observableOf({} as Tree); - callSource(source0, context) - .toPromise() - .then( - () => done.fail(), - (err) => { - expect(err).toEqual(new InvalidSourceResultException({})); - }, - ) - .then(done, done.fail); + await expectAsync(callSource(source0, context).toPromise()).toBeRejectedWithError( + InvalidSourceResultException, + ); }); - it('works with a Tree', (done) => { + it('works with a Tree', async () => { const tree0 = empty(); const source0: Source = () => tree0; - - callSource(source0, context) - .toPromise() - .then((tree) => { - expect(tree).toBe(tree0); - }) - .then(done, done.fail); + const tree = await callSource(source0, context).toPromise(); + expect(tree).toBe(tree0); }); - it('works with an Observable', (done) => { + it('works with an Observable', async () => { const tree0 = empty(); const source0: Source = () => observableOf(tree0); - - callSource(source0, context) - .toPromise() - .then((tree) => { - expect(tree).toBe(tree0); - }) - .then(done, done.fail); + const tree = await callSource(source0, context).toPromise(); + expect(tree).toBe(tree0); }); }); @@ -109,39 +81,24 @@ describe('callRule', () => { ); }); - it('works with undefined result', (done) => { + it('works with undefined result', async () => { const tree0 = empty(); const rule0: Rule = () => undefined; - - callRule(rule0, observableOf(tree0), context) - .toPromise() - .then((tree) => { - expect(tree).toBe(tree0); - }) - .then(done, done.fail); + const tree = await callRule(rule0, observableOf(tree0), context).toPromise(); + expect(tree).toBe(tree0); }); - it('works with a Tree', (done) => { + it('works with a Tree', async () => { const tree0 = empty(); const rule0: Rule = () => tree0; - - callRule(rule0, observableOf(tree0), context) - .toPromise() - .then((tree) => { - expect(tree).toBe(tree0); - }) - .then(done, done.fail); + const tree = await callRule(rule0, observableOf(tree0), context).toPromise(); + expect(tree).toBe(tree0); }); - it('works with an Observable', (done) => { + it('works with an Observable', async () => { const tree0 = empty(); const rule0: Rule = () => observableOf(tree0); - - callRule(rule0, observableOf(tree0), context) - .toPromise() - .then((tree) => { - expect(tree).toBe(tree0); - }) - .then(done, done.fail); + const tree = await callRule(rule0, observableOf(tree0), context).toPromise(); + expect(tree).toBe(tree0); }); }); diff --git a/packages/angular_devkit/schematics/src/rules/move_spec.ts b/packages/angular_devkit/schematics/src/rules/move_spec.ts index 3e0d20591375..10a33c693d43 100644 --- a/packages/angular_devkit/schematics/src/rules/move_spec.ts +++ b/packages/angular_devkit/schematics/src/rules/move_spec.ts @@ -16,80 +16,65 @@ import { move } from './move'; const context: SchematicContext = null!; describe('move', () => { - it('works on moving the whole structure', (done) => { + it('works on moving the whole structure', async () => { const tree = new HostTree(); tree.create('a/b/file1', 'hello world'); tree.create('a/b/file2', 'hello world'); tree.create('a/c/file3', 'hello world'); - lastValueFrom(callRule(move('sub'), observableOf(tree), context)) - .then((result) => { - expect(result.exists('sub/a/b/file1')).toBe(true); - expect(result.exists('sub/a/b/file2')).toBe(true); - expect(result.exists('sub/a/c/file3')).toBe(true); - }) - .then(done, done.fail); + const result = await lastValueFrom(callRule(move('sub'), observableOf(tree), context)); + expect(result.exists('sub/a/b/file1')).toBe(true); + expect(result.exists('sub/a/b/file2')).toBe(true); + expect(result.exists('sub/a/c/file3')).toBe(true); }); - it('works on moving a subdirectory structure', (done) => { + it('works on moving a subdirectory structure', async () => { const tree = new HostTree(); tree.create('a/b/file1', 'hello world'); tree.create('a/b/file2', 'hello world'); tree.create('a/c/file3', 'hello world'); - lastValueFrom(callRule(move('a/b', 'sub'), observableOf(tree), context)) - .then((result) => { - expect(result.exists('sub/file1')).toBe(true); - expect(result.exists('sub/file2')).toBe(true); - expect(result.exists('a/c/file3')).toBe(true); - }) - .then(done, done.fail); + const result = await lastValueFrom(callRule(move('a/b', 'sub'), observableOf(tree), context)); + expect(result.exists('sub/file1')).toBe(true); + expect(result.exists('sub/file2')).toBe(true); + expect(result.exists('a/c/file3')).toBe(true); }); - it('works on moving a directory into a subdirectory of itself', (done) => { + it('works on moving a directory into a subdirectory of itself', async () => { const tree = new HostTree(); tree.create('a/b/file1', 'hello world'); tree.create('a/b/file2', 'hello world'); tree.create('a/c/file3', 'hello world'); - lastValueFrom(callRule(move('a/b', 'a/b/c'), observableOf(tree), context)) - .then((result) => { - expect(result.exists('a/b/c/file1')).toBe(true); - expect(result.exists('a/b/c/file2')).toBe(true); - expect(result.exists('a/c/file3')).toBe(true); - }) - .then(done, done.fail); + const result = await lastValueFrom(callRule(move('a/b', 'a/b/c'), observableOf(tree), context)); + expect(result.exists('a/b/c/file1')).toBe(true); + expect(result.exists('a/b/c/file2')).toBe(true); + expect(result.exists('a/c/file3')).toBe(true); }); - it('works on moving a directory into a parent of itself', (done) => { + it('works on moving a directory into a parent of itself', async () => { const tree = new HostTree(); tree.create('a/b/file1', 'hello world'); tree.create('a/b/file2', 'hello world'); tree.create('a/c/file3', 'hello world'); - lastValueFrom(callRule(move('a/b', 'a'), observableOf(tree), context)) - .then((result) => { - expect(result.exists('file1')).toBe(false); - expect(result.exists('file2')).toBe(false); - expect(result.exists('a/file1')).toBe(true); - expect(result.exists('a/file2')).toBe(true); - expect(result.exists('a/c/file3')).toBe(true); - }) - .then(done, done.fail); + const result = await lastValueFrom(callRule(move('a/b', 'a'), observableOf(tree), context)); + expect(result.exists('file1')).toBe(false); + expect(result.exists('file2')).toBe(false); + expect(result.exists('a/file1')).toBe(true); + expect(result.exists('a/file2')).toBe(true); + expect(result.exists('a/c/file3')).toBe(true); }); - it('becomes a noop with identical from and to', (done) => { + it('becomes a noop with identical from and to', async () => { const tree = new HostTree(); tree.create('a/b/file1', 'hello world'); tree.create('a/b/file2', 'hello world'); tree.create('a/c/file3', 'hello world'); - lastValueFrom(callRule(move(''), observableOf(tree), context)) - .then((result) => { - expect(result.exists('a/b/file1')).toBe(true); - expect(result.exists('a/b/file2')).toBe(true); - expect(result.exists('a/c/file3')).toBe(true); - }) - .then(done, done.fail); + const result = await lastValueFrom(callRule(move(''), observableOf(tree), context)); + expect(result.exists('a/b/file1')).toBe(true); + expect(result.exists('a/b/file2')).toBe(true); + expect(result.exists('a/c/file3')).toBe(true); }); }); diff --git a/packages/angular_devkit/schematics/src/rules/template_spec.ts b/packages/angular_devkit/schematics/src/rules/template_spec.ts index 076550e6f043..1833d8e7f37c 100644 --- a/packages/angular_devkit/schematics/src/rules/template_spec.ts +++ b/packages/angular_devkit/schematics/src/rules/template_spec.ts @@ -174,7 +174,7 @@ describe('contentTemplate', () => { }); describe('applyTemplateFiles', () => { - it('works with template files exclusively', (done) => { + it('works with template files exclusively', async () => { const tree = new UnitTestTree(new HostTree()); tree.create('a/b/file1', 'hello world'); tree.create('a/b/file2', 'hello world'); @@ -188,20 +188,16 @@ describe('applyTemplateFiles', () => { } as SchematicContext; // Rename all files that contain 'b' to 'hello'. - callRule(applyTemplates({ a: 'foo' }), observableOf(tree), context) - .toPromise() - .then(() => { - expect([...tree.files].sort()).toEqual([ - '/a/b/file1', - '/a/b/file2', - '/a/b/file3', - '/a/b/file__norename__', - '/a/b/filefoo', - '/a/c/file4', - ]); - - expect(tree.readContent('/a/b/file3')).toBe('hello 1 world'); - }) - .then(done, done.fail); + await callRule(applyTemplates({ a: 'foo' }), observableOf(tree), context).toPromise(); + + expect([...tree.files].sort()).toEqual([ + '/a/b/file1', + '/a/b/file2', + '/a/b/file3', + '/a/b/file__norename__', + '/a/b/filefoo', + '/a/c/file4', + ]); + expect(tree.readContent('/a/b/file3')).toBe('hello 1 world'); }); }); diff --git a/packages/angular_devkit/schematics/src/sink/host_spec.ts b/packages/angular_devkit/schematics/src/sink/host_spec.ts index 9a89b82af91d..55d92bea7e7f 100644 --- a/packages/angular_devkit/schematics/src/sink/host_spec.ts +++ b/packages/angular_devkit/schematics/src/sink/host_spec.ts @@ -11,7 +11,7 @@ import { HostCreateTree, HostTree } from '../tree/host-tree'; import { HostSink } from './host'; describe('FileSystemSink', () => { - it('works', (done) => { + it('works', async () => { const host = new virtualFs.test.TestHost({ '/hello': 'world', '/sub/directory/file2': '', @@ -32,19 +32,14 @@ describe('FileSystemSink', () => { const outputHost = new virtualFs.test.TestHost(); const sink = new HostSink(outputHost); - sink - .commit(tree) - .toPromise() - .then(() => { - const tmpFiles = outputHost.files.sort(); - expect(tmpFiles as string[]).toEqual(files); - expect(outputHost.sync.read(normalize('/test')).toString()).toBe('testing testing 1 2'); - }) - .then(done, done.fail); + await sink.commit(tree).toPromise(); + const tmpFiles = outputHost.files.sort(); + expect(tmpFiles as string[]).toEqual(files); + expect(outputHost.sync.read(normalize('/test')).toString()).toBe('testing testing 1 2'); }); describe('complex tests', () => { - beforeEach((done) => { + beforeEach(async () => { // Commit a version of the tree. const host = new virtualFs.test.TestHost({ '/file0': '/file0', @@ -55,10 +50,10 @@ describe('FileSystemSink', () => { const outputHost = new virtualFs.test.TestHost(); const sink = new HostSink(outputHost); - sink.commit(tree).toPromise().then(done, done.fail); + await sink.commit(tree).toPromise(); }); - it('can rename files', (done) => { + it('can rename files', async () => { const host = new virtualFs.test.TestHost({ '/file0': '/file0', }); @@ -66,17 +61,12 @@ describe('FileSystemSink', () => { tree.rename('/file0', '/file1'); const sink = new HostSink(host); - sink - .commit(tree) - .toPromise() - .then(() => { - expect(host.sync.exists(normalize('/file0'))).toBe(false); - expect(host.sync.exists(normalize('/file1'))).toBe(true); - }) - .then(done, done.fail); + await sink.commit(tree).toPromise(); + expect(host.sync.exists(normalize('/file0'))).toBe(false); + expect(host.sync.exists(normalize('/file1'))).toBe(true); }); - it('can rename nested files', (done) => { + it('can rename nested files', async () => { const host = new virtualFs.test.TestHost({ '/sub/directory/file2': '', }); @@ -84,17 +74,12 @@ describe('FileSystemSink', () => { tree.rename('/sub/directory/file2', '/another-directory/file2'); const sink = new HostSink(host); - sink - .commit(tree) - .toPromise() - .then(() => { - expect(host.sync.exists(normalize('/sub/directory/file2'))).toBe(false); - expect(host.sync.exists(normalize('/another-directory/file2'))).toBe(true); - }) - .then(done, done.fail); + await sink.commit(tree).toPromise(); + expect(host.sync.exists(normalize('/sub/directory/file2'))).toBe(false); + expect(host.sync.exists(normalize('/another-directory/file2'))).toBe(true); }); - it('can delete and create the same file', (done) => { + it('can delete and create the same file', async () => { const host = new virtualFs.test.TestHost({ '/file0': 'world', }); @@ -103,16 +88,11 @@ describe('FileSystemSink', () => { tree.create('/file0', 'hello'); const sink = new HostSink(host); - sink - .commit(tree) - .toPromise() - .then(() => { - expect(host.sync.read(normalize('/file0')).toString()).toBe('hello'); - }) - .then(done, done.fail); + await sink.commit(tree).toPromise(); + expect(host.sync.read(normalize('/file0')).toString()).toBe('hello'); }); - it('can rename then create the same file', (done) => { + it('can rename then create the same file', async () => { const host = new virtualFs.test.TestHost({ '/file0': 'world', }); @@ -126,14 +106,9 @@ describe('FileSystemSink', () => { expect(tree.exists('/file0')).toBeTruthy(); const sink = new HostSink(host); - sink - .commit(tree) - .toPromise() - .then(() => { - expect(host.sync.read(normalize('/file0')).toString()).toBe('hello'); - expect(virtualFs.fileBufferToString(host.sync.read(normalize('/file1')))).toBe('world'); - }) - .then(done, done.fail); + await sink.commit(tree).toPromise(); + expect(host.sync.read(normalize('/file0')).toString()).toBe('hello'); + expect(virtualFs.fileBufferToString(host.sync.read(normalize('/file1')))).toBe('world'); }); it('can rename then modify the same file', async () => { diff --git a/packages/angular_devkit/schematics/tools/file-system-engine-host_spec.ts b/packages/angular_devkit/schematics/tools/file-system-engine-host_spec.ts index 3d785563e663..c3ad3af40c5b 100644 --- a/packages/angular_devkit/schematics/tools/file-system-engine-host_spec.ts +++ b/packages/angular_devkit/schematics/tools/file-system-engine-host_spec.ts @@ -297,7 +297,7 @@ describe('FileSystemEngineHost', () => { expect(() => collection.createSchematic('private-schematic')).toThrow(); }); - it('allows extra properties on schema', (done) => { + it('allows extra properties on schema', async () => { const engineHost = new FileSystemEngineHost(root); const engine = new SchematicEngine(engineHost); const host = new virtualFs.test.TestHost(); @@ -305,17 +305,12 @@ describe('FileSystemEngineHost', () => { const collection = engine.createCollection('extra-properties'); const schematic = collection.createSchematic('schematic1'); - lastValueFrom(schematic.call({}, observableOf(new HostTree(host)))) - .then((tree) => { - return lastValueFrom(new HostSink(host).commit(tree)); - }) - .then(() => { - expect(host.files as string[]).toEqual(['/extra-schematic']); - expect(host.sync.read(normalize('/extra-schematic')).toString()).toEqual( - 'extra-collection', - ); - }) - .then(done, done.fail); + await lastValueFrom(schematic.call({}, observableOf(new HostTree(host)))).then((tree) => { + return lastValueFrom(new HostSink(host).commit(tree)); + }); + + expect(host.files as string[]).toEqual(['/extra-schematic']); + expect(host.sync.read(normalize('/extra-schematic')).toString()).toEqual('extra-collection'); }); it('discovers a file-based task', () => { diff --git a/packages/angular_devkit/schematics/tools/workflow/node-workflow_spec.ts b/packages/angular_devkit/schematics/tools/workflow/node-workflow_spec.ts index 3d19f401c82b..d5ad2ff6bb25 100644 --- a/packages/angular_devkit/schematics/tools/workflow/node-workflow_spec.ts +++ b/packages/angular_devkit/schematics/tools/workflow/node-workflow_spec.ts @@ -13,17 +13,16 @@ import { NodeWorkflow } from './node-workflow'; describe('NodeWorkflow', () => { // TODO: this test seems to either not work on windows or on linux. - xit('works', (done) => { + xit('works', async () => { const workflow = new NodeWorkflow(new NodeJsSyncHost(), { dryRun: true }); const collection = path.join(__dirname, '../../../../schematics/angular/package.json'); - workflow + await workflow .execute({ collection, schematic: 'ng-new', options: { name: 'workflow-test', version: '6.0.0-rc.4' }, }) - .toPromise() - .then(done, done.fail); + .toPromise(); }); }); diff --git a/packages/angular_devkit/schematics_cli/blank/project-files/tsconfig.json b/packages/angular_devkit/schematics_cli/blank/project-files/tsconfig.json index 75cf15fa8e3c..e1f6243c1a46 100644 --- a/packages/angular_devkit/schematics_cli/blank/project-files/tsconfig.json +++ b/packages/angular_devkit/schematics_cli/blank/project-files/tsconfig.json @@ -1,6 +1,5 @@ { "compilerOptions": { - "baseUrl": "tsconfig", "lib": ["es2018", "dom"], "declaration": true, "module": "commonjs", diff --git a/packages/angular_devkit/schematics_cli/schematic/files/tsconfig.json b/packages/angular_devkit/schematics_cli/schematic/files/tsconfig.json index ae3b3e55e6a3..79285278e55c 100644 --- a/packages/angular_devkit/schematics_cli/schematic/files/tsconfig.json +++ b/packages/angular_devkit/schematics_cli/schematic/files/tsconfig.json @@ -1,6 +1,5 @@ { "compilerOptions": { - "baseUrl": "tsconfig", "lib": ["es2018", "dom"], "module": "commonjs", "moduleResolution": "node", diff --git a/packages/ngtools/webpack/package.json b/packages/ngtools/webpack/package.json index 132839480fc5..df63faea2067 100644 --- a/packages/ngtools/webpack/package.json +++ b/packages/ngtools/webpack/package.json @@ -22,14 +22,14 @@ "homepage": "https://github.com/angular/angular-cli/tree/main/packages/ngtools/webpack", "peerDependencies": { "@angular/compiler-cli": "0.0.0-ANGULAR-FW-PEER-DEP", - "typescript": ">=5.9 <6.0", + "typescript": ">=5.9 <6.1", "webpack": "^5.54.0" }, "devDependencies": { "@angular-devkit/core": "workspace:0.0.0-PLACEHOLDER", "@angular/compiler": "21.2.0-rc.0", "@angular/compiler-cli": "21.2.0-rc.0", - "typescript": "5.9.3", + "typescript": "6.0.0-beta", "webpack": "5.105.3" } } diff --git a/packages/ngtools/webpack/src/transformers/elide_imports_spec.ts b/packages/ngtools/webpack/src/transformers/elide_imports_spec.ts index 2138a0811034..92d28e46d8cd 100644 --- a/packages/ngtools/webpack/src/transformers/elide_imports_spec.ts +++ b/packages/ngtools/webpack/src/transformers/elide_imports_spec.ts @@ -421,6 +421,8 @@ describe('elide_imports', () => { jsxFactory: 'createElement', experimentalDecorators: true, jsx: ts.JsxEmit.React, + // The TS elements are implicitly `any`, because we don't include the React types. + noImplicitAny: false, }; const input = tags.stripIndent` @@ -543,7 +545,7 @@ describe('elide_imports', () => { import { Service } from './service'; export class Foo { - @Decorator() foo: Service; + @Decorator() foo!: Service; } ${dummyNode} @@ -576,7 +578,7 @@ describe('elide_imports', () => { import { Service } from './service'; export class Foo { - _foo: Service; + _foo!: Service; @Decorator() set name(f: Service) { @@ -613,7 +615,7 @@ describe('elide_imports', () => { import { Service } from './service'; export class Foo { - _foo: Service; + _foo!: Service; @Decorator() get name(): Service { @@ -652,7 +654,7 @@ describe('elide_imports', () => { export class Foo { @Decorator() name(): Service { - return undefined; + return undefined!; } } diff --git a/packages/ngtools/webpack/src/transformers/spec_helpers.ts b/packages/ngtools/webpack/src/transformers/spec_helpers.ts index 2b059d02f4e3..bc6e199cb8dd 100644 --- a/packages/ngtools/webpack/src/transformers/spec_helpers.ts +++ b/packages/ngtools/webpack/src/transformers/spec_helpers.ts @@ -28,7 +28,7 @@ export function createTypescriptContext( noEmitOnError: useLibs, allowJs: true, newLine: ts.NewLineKind.LineFeed, - moduleResolution: ts.ModuleResolutionKind.Node10, + moduleResolution: ts.ModuleResolutionKind.Bundler, module: ts.ModuleKind.ES2020, target: ts.ScriptTarget.ES2020, skipLibCheck: true, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 9b327bac466a..30a017b18639 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -33,7 +33,7 @@ importers: version: 21.2.0-rc.0 '@angular/compiler-cli': specifier: 21.2.0-rc.0 - version: 21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(typescript@5.9.3) + version: 21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(typescript@6.0.0-beta) '@angular/core': specifier: 21.2.0-rc.0 version: 21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1) @@ -42,7 +42,7 @@ importers: version: 21.2.0-rc.0(@angular/common@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@21.2.0-rc.0(@angular/animations@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1)))(rxjs@7.8.2) '@angular/localize': specifier: 21.2.0-rc.0 - version: 21.2.0-rc.0(@angular/compiler-cli@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(typescript@5.9.3))(@angular/compiler@21.2.0-rc.0) + version: 21.2.0-rc.0(@angular/compiler-cli@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(typescript@6.0.0-beta))(@angular/compiler@21.2.0-rc.0) '@angular/material': specifier: 21.2.0-rc.0 version: 21.2.0-rc.0(b10e235d889ab235dc2911d6ec167f08) @@ -165,10 +165,10 @@ importers: version: 1.1.9 '@typescript-eslint/eslint-plugin': specifier: 8.56.1 - version: 8.56.1(@typescript-eslint/parser@8.56.1(eslint@10.0.2(jiti@2.6.1))(typescript@5.9.3))(eslint@10.0.2(jiti@2.6.1))(typescript@5.9.3) + version: 8.56.1(@typescript-eslint/parser@8.56.1(eslint@10.0.2(jiti@2.6.1))(typescript@6.0.0-beta))(eslint@10.0.2(jiti@2.6.1))(typescript@6.0.0-beta) '@typescript-eslint/parser': specifier: 8.56.1 - version: 8.56.1(eslint@10.0.2(jiti@2.6.1))(typescript@5.9.3) + version: 8.56.1(eslint@10.0.2(jiti@2.6.1))(typescript@6.0.0-beta) ajv: specifier: 8.18.0 version: 8.18.0 @@ -189,7 +189,7 @@ importers: version: 10.1.8(eslint@10.0.2(jiti@2.6.1)) eslint-plugin-import: specifier: 2.32.0 - version: 2.32.0(@typescript-eslint/parser@8.56.1(eslint@10.0.2(jiti@2.6.1))(typescript@5.9.3))(eslint@10.0.2(jiti@2.6.1)) + version: 2.32.0(@typescript-eslint/parser@8.56.1(eslint@10.0.2(jiti@2.6.1))(typescript@6.0.0-beta))(eslint@10.0.2(jiti@2.6.1)) express: specifier: 5.2.1 version: 5.2.1 @@ -249,7 +249,7 @@ importers: version: 3.8.1 puppeteer: specifier: 24.37.5 - version: 24.37.5(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6) + version: 24.37.5(bufferutil@4.1.0)(typescript@6.0.0-beta)(utf-8-validate@6.0.6) quicktype-core: specifier: 23.2.6 version: 23.2.6(encoding@0.1.13) @@ -261,7 +261,7 @@ importers: version: 3.1.0 rollup-plugin-dts: specifier: 6.3.0 - version: 6.3.0(rollup@4.59.0)(typescript@5.9.3) + version: 6.3.0(rollup@4.59.0)(typescript@6.0.0-beta) rollup-plugin-sourcemaps2: specifier: 0.5.6 version: 0.5.6(@types/node@22.19.13)(rollup@4.59.0) @@ -275,8 +275,8 @@ importers: specifier: 2.8.1 version: 2.8.1 typescript: - specifier: 5.9.3 - version: 5.9.3 + specifier: 6.0.0-beta + version: 6.0.0-beta undici: specifier: 7.22.0 version: 7.22.0 @@ -418,7 +418,7 @@ importers: version: 4.4.2 ng-packagr: specifier: 22.0.0-next.0 - version: 22.0.0-next.0(@angular/compiler-cli@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(typescript@5.9.3))(tslib@2.8.1)(typescript@5.9.3) + version: 22.0.0-next.0(@angular/compiler-cli@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(typescript@6.0.0-beta))(tslib@2.8.1)(typescript@6.0.0-beta) postcss: specifier: 8.5.6 version: 8.5.6 @@ -660,7 +660,7 @@ importers: version: 8.5.6 postcss-loader: specifier: 8.2.1 - version: 8.2.1(postcss@8.5.6)(typescript@5.9.3)(webpack@5.105.3(esbuild@0.27.3)) + version: 8.2.1(postcss@8.5.6)(typescript@6.0.0-beta)(webpack@5.105.3(esbuild@0.27.3)) resolve-url-loader: specifier: 5.0.0 version: 5.0.0 @@ -715,7 +715,7 @@ importers: version: 3.0.4(bufferutil@4.1.0)(utf-8-validate@6.0.6) ng-packagr: specifier: 22.0.0-next.0 - version: 22.0.0-next.0(@angular/compiler-cli@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(typescript@5.9.3))(tslib@2.8.1)(typescript@5.9.3) + version: 22.0.0-next.0(@angular/compiler-cli@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(typescript@6.0.0-beta))(tslib@2.8.1)(typescript@6.0.0-beta) undici: specifier: 7.22.0 version: 7.22.0 @@ -811,10 +811,10 @@ importers: version: 21.2.0-rc.0 '@angular/compiler-cli': specifier: 21.2.0-rc.0 - version: 21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(typescript@5.9.3) + version: 21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(typescript@6.0.0-beta) typescript: - specifier: 5.9.3 - version: 5.9.3 + specifier: 6.0.0-beta + version: 6.0.0-beta webpack: specifier: 5.105.3 version: 5.105.3(esbuild@0.27.3) @@ -7857,6 +7857,11 @@ packages: engines: {node: '>=14.17'} hasBin: true + typescript@6.0.0-beta: + resolution: {integrity: sha512-CldZdztDpQRLM1HC6WDQjQkQN5Ub5zRau737a1diGh3lPmb9oRsaWHk1y5iqK0o7+1bNJ0oXfEGRkAogFZBL+Q==} + engines: {node: '>=14.17'} + hasBin: true + ua-parser-js@0.7.41: resolution: {integrity: sha512-O3oYyCMPYgNNHuO7Jjk3uacJWZF8loBgwrfd/5LE/HyZ3lUIOdniQ7DNXJcIgZbwioZxk0fLfI4EVnetdiX5jg==} hasBin: true @@ -8485,7 +8490,7 @@ snapshots: rxjs: 7.8.2 tslib: 2.8.1 - '@angular/compiler-cli@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(typescript@5.9.3)': + '@angular/compiler-cli@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(typescript@6.0.0-beta)': dependencies: '@angular/compiler': 21.2.0-rc.0 '@babel/core': 7.29.0 @@ -8497,7 +8502,7 @@ snapshots: tslib: 2.8.1 yargs: 18.0.0 optionalDependencies: - typescript: 5.9.3 + typescript: 6.0.0-beta transitivePeerDependencies: - supports-color @@ -8522,10 +8527,10 @@ snapshots: rxjs: 7.8.2 tslib: 2.8.1 - '@angular/localize@21.2.0-rc.0(@angular/compiler-cli@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(typescript@5.9.3))(@angular/compiler@21.2.0-rc.0)': + '@angular/localize@21.2.0-rc.0(@angular/compiler-cli@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(typescript@6.0.0-beta))(@angular/compiler@21.2.0-rc.0)': dependencies: '@angular/compiler': 21.2.0-rc.0 - '@angular/compiler-cli': 21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(typescript@5.9.3) + '@angular/compiler-cli': 21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(typescript@6.0.0-beta) '@babel/core': 7.29.0 '@types/babel__core': 7.20.5 tinyglobby: 0.2.15 @@ -11383,40 +11388,40 @@ snapshots: '@types/node': 22.19.13 optional: true - '@typescript-eslint/eslint-plugin@8.56.1(@typescript-eslint/parser@8.56.1(eslint@10.0.2(jiti@2.6.1))(typescript@5.9.3))(eslint@10.0.2(jiti@2.6.1))(typescript@5.9.3)': + '@typescript-eslint/eslint-plugin@8.56.1(@typescript-eslint/parser@8.56.1(eslint@10.0.2(jiti@2.6.1))(typescript@6.0.0-beta))(eslint@10.0.2(jiti@2.6.1))(typescript@6.0.0-beta)': dependencies: '@eslint-community/regexpp': 4.12.2 - '@typescript-eslint/parser': 8.56.1(eslint@10.0.2(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/parser': 8.56.1(eslint@10.0.2(jiti@2.6.1))(typescript@6.0.0-beta) '@typescript-eslint/scope-manager': 8.56.1 - '@typescript-eslint/type-utils': 8.56.1(eslint@10.0.2(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/utils': 8.56.1(eslint@10.0.2(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/type-utils': 8.56.1(eslint@10.0.2(jiti@2.6.1))(typescript@6.0.0-beta) + '@typescript-eslint/utils': 8.56.1(eslint@10.0.2(jiti@2.6.1))(typescript@6.0.0-beta) '@typescript-eslint/visitor-keys': 8.56.1 eslint: 10.0.2(jiti@2.6.1) ignore: 7.0.5 natural-compare: 1.4.0 - ts-api-utils: 2.4.0(typescript@5.9.3) - typescript: 5.9.3 + ts-api-utils: 2.4.0(typescript@6.0.0-beta) + typescript: 6.0.0-beta transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.56.1(eslint@10.0.2(jiti@2.6.1))(typescript@5.9.3)': + '@typescript-eslint/parser@8.56.1(eslint@10.0.2(jiti@2.6.1))(typescript@6.0.0-beta)': dependencies: '@typescript-eslint/scope-manager': 8.56.1 '@typescript-eslint/types': 8.56.1 - '@typescript-eslint/typescript-estree': 8.56.1(typescript@5.9.3) + '@typescript-eslint/typescript-estree': 8.56.1(typescript@6.0.0-beta) '@typescript-eslint/visitor-keys': 8.56.1 debug: 4.4.3(supports-color@10.2.2) eslint: 10.0.2(jiti@2.6.1) - typescript: 5.9.3 + typescript: 6.0.0-beta transitivePeerDependencies: - supports-color - '@typescript-eslint/project-service@8.56.1(typescript@5.9.3)': + '@typescript-eslint/project-service@8.56.1(typescript@6.0.0-beta)': dependencies: - '@typescript-eslint/tsconfig-utils': 8.56.1(typescript@5.9.3) + '@typescript-eslint/tsconfig-utils': 8.56.1(typescript@6.0.0-beta) '@typescript-eslint/types': 8.56.1 debug: 4.4.3(supports-color@10.2.2) - typescript: 5.9.3 + typescript: 6.0.0-beta transitivePeerDependencies: - supports-color @@ -11425,47 +11430,47 @@ snapshots: '@typescript-eslint/types': 8.56.1 '@typescript-eslint/visitor-keys': 8.56.1 - '@typescript-eslint/tsconfig-utils@8.56.1(typescript@5.9.3)': + '@typescript-eslint/tsconfig-utils@8.56.1(typescript@6.0.0-beta)': dependencies: - typescript: 5.9.3 + typescript: 6.0.0-beta - '@typescript-eslint/type-utils@8.56.1(eslint@10.0.2(jiti@2.6.1))(typescript@5.9.3)': + '@typescript-eslint/type-utils@8.56.1(eslint@10.0.2(jiti@2.6.1))(typescript@6.0.0-beta)': dependencies: '@typescript-eslint/types': 8.56.1 - '@typescript-eslint/typescript-estree': 8.56.1(typescript@5.9.3) - '@typescript-eslint/utils': 8.56.1(eslint@10.0.2(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/typescript-estree': 8.56.1(typescript@6.0.0-beta) + '@typescript-eslint/utils': 8.56.1(eslint@10.0.2(jiti@2.6.1))(typescript@6.0.0-beta) debug: 4.4.3(supports-color@10.2.2) eslint: 10.0.2(jiti@2.6.1) - ts-api-utils: 2.4.0(typescript@5.9.3) - typescript: 5.9.3 + ts-api-utils: 2.4.0(typescript@6.0.0-beta) + typescript: 6.0.0-beta transitivePeerDependencies: - supports-color '@typescript-eslint/types@8.56.1': {} - '@typescript-eslint/typescript-estree@8.56.1(typescript@5.9.3)': + '@typescript-eslint/typescript-estree@8.56.1(typescript@6.0.0-beta)': dependencies: - '@typescript-eslint/project-service': 8.56.1(typescript@5.9.3) - '@typescript-eslint/tsconfig-utils': 8.56.1(typescript@5.9.3) + '@typescript-eslint/project-service': 8.56.1(typescript@6.0.0-beta) + '@typescript-eslint/tsconfig-utils': 8.56.1(typescript@6.0.0-beta) '@typescript-eslint/types': 8.56.1 '@typescript-eslint/visitor-keys': 8.56.1 debug: 4.4.3(supports-color@10.2.2) minimatch: 10.2.4 semver: 7.7.4 tinyglobby: 0.2.15 - ts-api-utils: 2.4.0(typescript@5.9.3) - typescript: 5.9.3 + ts-api-utils: 2.4.0(typescript@6.0.0-beta) + typescript: 6.0.0-beta transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.56.1(eslint@10.0.2(jiti@2.6.1))(typescript@5.9.3)': + '@typescript-eslint/utils@8.56.1(eslint@10.0.2(jiti@2.6.1))(typescript@6.0.0-beta)': dependencies: '@eslint-community/eslint-utils': 4.9.1(eslint@10.0.2(jiti@2.6.1)) '@typescript-eslint/scope-manager': 8.56.1 '@typescript-eslint/types': 8.56.1 - '@typescript-eslint/typescript-estree': 8.56.1(typescript@5.9.3) + '@typescript-eslint/typescript-estree': 8.56.1(typescript@6.0.0-beta) eslint: 10.0.2(jiti@2.6.1) - typescript: 5.9.3 + typescript: 6.0.0-beta transitivePeerDependencies: - supports-color @@ -12540,14 +12545,14 @@ snapshots: object-assign: 4.1.1 vary: 1.1.2 - cosmiconfig@9.0.0(typescript@5.9.3): + cosmiconfig@9.0.0(typescript@6.0.0-beta): dependencies: env-paths: 2.2.1 import-fresh: 3.3.1 js-yaml: 4.1.1 parse-json: 5.2.0 optionalDependencies: - typescript: 5.9.3 + typescript: 6.0.0-beta cross-fetch@4.1.0(encoding@0.1.13): dependencies: @@ -13035,17 +13040,17 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-module-utils@2.12.1(@typescript-eslint/parser@8.56.1(eslint@10.0.2(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint@10.0.2(jiti@2.6.1)): + eslint-module-utils@2.12.1(@typescript-eslint/parser@8.56.1(eslint@10.0.2(jiti@2.6.1))(typescript@6.0.0-beta))(eslint-import-resolver-node@0.3.9)(eslint@10.0.2(jiti@2.6.1)): dependencies: debug: 3.2.7 optionalDependencies: - '@typescript-eslint/parser': 8.56.1(eslint@10.0.2(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/parser': 8.56.1(eslint@10.0.2(jiti@2.6.1))(typescript@6.0.0-beta) eslint: 10.0.2(jiti@2.6.1) eslint-import-resolver-node: 0.3.9 transitivePeerDependencies: - supports-color - eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.56.1(eslint@10.0.2(jiti@2.6.1))(typescript@5.9.3))(eslint@10.0.2(jiti@2.6.1)): + eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.56.1(eslint@10.0.2(jiti@2.6.1))(typescript@6.0.0-beta))(eslint@10.0.2(jiti@2.6.1)): dependencies: '@rtsao/scc': 1.1.0 array-includes: 3.1.9 @@ -13056,7 +13061,7 @@ snapshots: doctrine: 2.1.0 eslint: 10.0.2(jiti@2.6.1) eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.56.1(eslint@10.0.2(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint@10.0.2(jiti@2.6.1)) + eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.56.1(eslint@10.0.2(jiti@2.6.1))(typescript@6.0.0-beta))(eslint-import-resolver-node@0.3.9)(eslint@10.0.2(jiti@2.6.1)) hasown: 2.0.2 is-core-module: 2.16.1 is-glob: 4.0.3 @@ -13068,7 +13073,7 @@ snapshots: string.prototype.trimend: 1.0.9 tsconfig-paths: 3.15.0 optionalDependencies: - '@typescript-eslint/parser': 8.56.1(eslint@10.0.2(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/parser': 8.56.1(eslint@10.0.2(jiti@2.6.1))(typescript@6.0.0-beta) transitivePeerDependencies: - eslint-import-resolver-typescript - eslint-import-resolver-webpack @@ -14807,10 +14812,10 @@ snapshots: netmask@2.0.2: {} - ng-packagr@22.0.0-next.0(@angular/compiler-cli@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(typescript@5.9.3))(tslib@2.8.1)(typescript@5.9.3): + ng-packagr@22.0.0-next.0(@angular/compiler-cli@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(typescript@6.0.0-beta))(tslib@2.8.1)(typescript@6.0.0-beta): dependencies: '@ampproject/remapping': 2.3.0 - '@angular/compiler-cli': 21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(typescript@5.9.3) + '@angular/compiler-cli': 21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(typescript@6.0.0-beta) '@rollup/plugin-json': 6.1.0(rollup@4.59.0) '@rollup/wasm-node': 4.59.0 ajv: 8.18.0 @@ -14827,12 +14832,12 @@ snapshots: ora: 9.3.0 piscina: 5.1.4 postcss: 8.5.6 - rollup-plugin-dts: 6.3.0(rollup@4.59.0)(typescript@5.9.3) + rollup-plugin-dts: 6.3.0(rollup@4.59.0)(typescript@6.0.0-beta) rxjs: 7.8.2 sass: 1.97.3 tinyglobby: 0.2.15 tslib: 2.8.1 - typescript: 5.9.3 + typescript: 6.0.0-beta optionalDependencies: rollup: 4.59.0 @@ -15269,9 +15274,9 @@ snapshots: possible-typed-array-names@1.1.0: {} - postcss-loader@8.2.1(postcss@8.5.6)(typescript@5.9.3)(webpack@5.105.3(esbuild@0.27.3)): + postcss-loader@8.2.1(postcss@8.5.6)(typescript@6.0.0-beta)(webpack@5.105.3(esbuild@0.27.3)): dependencies: - cosmiconfig: 9.0.0(typescript@5.9.3) + cosmiconfig: 9.0.0(typescript@6.0.0-beta) jiti: 2.6.1 postcss: 8.5.6 semver: 7.7.4 @@ -15424,11 +15429,11 @@ snapshots: - supports-color - utf-8-validate - puppeteer@24.37.5(bufferutil@4.1.0)(typescript@5.9.3)(utf-8-validate@6.0.6): + puppeteer@24.37.5(bufferutil@4.1.0)(typescript@6.0.0-beta)(utf-8-validate@6.0.6): dependencies: '@puppeteer/browsers': 2.13.0 chromium-bidi: 14.0.0(devtools-protocol@0.0.1566079) - cosmiconfig: 9.0.0(typescript@5.9.3) + cosmiconfig: 9.0.0(typescript@6.0.0-beta) devtools-protocol: 0.0.1566079 puppeteer-core: 24.37.5(bufferutil@4.1.0)(utf-8-validate@6.0.6) typed-query-selector: 2.12.1 @@ -15680,11 +15685,11 @@ snapshots: semver: 7.7.4 spdx-expression-validate: 2.0.0 - rollup-plugin-dts@6.3.0(rollup@4.59.0)(typescript@5.9.3): + rollup-plugin-dts@6.3.0(rollup@4.59.0)(typescript@6.0.0-beta): dependencies: magic-string: 0.30.21 rollup: 4.59.0 - typescript: 5.9.3 + typescript: 6.0.0-beta optionalDependencies: '@babel/code-frame': 7.29.0 @@ -16435,9 +16440,9 @@ snapshots: dependencies: tslib: 2.8.1 - ts-api-utils@2.4.0(typescript@5.9.3): + ts-api-utils@2.4.0(typescript@6.0.0-beta): dependencies: - typescript: 5.9.3 + typescript: 6.0.0-beta tsconfig-paths@3.15.0: dependencies: @@ -16535,6 +16540,8 @@ snapshots: typescript@5.9.3: {} + typescript@6.0.0-beta: {} + ua-parser-js@0.7.41: {} ua-parser-js@1.0.41: {} diff --git a/tests/e2e/assets/ssr-project-webpack/tsconfig.json b/tests/e2e/assets/ssr-project-webpack/tsconfig.json index bbc051d01524..9fbbe86694c4 100644 --- a/tests/e2e/assets/ssr-project-webpack/tsconfig.json +++ b/tests/e2e/assets/ssr-project-webpack/tsconfig.json @@ -2,7 +2,6 @@ { "compileOnSave": false, "compilerOptions": { - "baseUrl": "./", "outDir": "./dist/out-tsc", "strict": true, "noImplicitOverride": true, From ac065ad39ddd98327287cac0e4b4a2f7ca27c83e Mon Sep 17 00:00:00 2001 From: Alan Agius <17563226+alan-agius4@users.noreply.github.com> Date: Wed, 4 Mar 2026 09:15:13 +0000 Subject: [PATCH 096/226] fix(@angular/build): resolve style include paths relative to `ng-package.json` in unit-test builder When using the `unit-test` builder with an `ng-packagr` build target, the `styleIncludePaths` from `ng-package.json` were being used relative to the workspace root instead of the library's directory. This caused build failures when libraries specified style include paths. This change ensures that these paths are correctly resolved relative to the directory containing `ng-package.json`. --- .../build/src/builders/unit-test/builder.ts | 15 +++++++------- tests/e2e/tests/vitest/library.ts | 20 +++++-------------- 2 files changed, 12 insertions(+), 23 deletions(-) diff --git a/packages/angular/build/src/builders/unit-test/builder.ts b/packages/angular/build/src/builders/unit-test/builder.ts index fb9faa3b8576..97c3c0dce055 100644 --- a/packages/angular/build/src/builders/unit-test/builder.ts +++ b/packages/angular/build/src/builders/unit-test/builder.ts @@ -375,16 +375,15 @@ async function transformNgPackagrOptions( }); } - const lib = ngPackageJson['lib'] || {}; - const styleIncludePaths = lib['styleIncludePaths'] || []; - const assets = ngPackageJson['assets'] || []; - const inlineStyleLanguage = ngPackageJson['inlineStyleLanguage']; + const { lib: { styleIncludePaths = [] } = {}, assets = [], inlineStyleLanguage } = ngPackageJson; + + const includePaths = styleIncludePaths.map((includePath: string) => + path.resolve(path.dirname(ngPackagePath), includePath), + ); return { - stylePreprocessorOptions: styleIncludePaths.length - ? { includePaths: styleIncludePaths } - : undefined, + stylePreprocessorOptions: includePaths.length ? { includePaths } : undefined, assets: assets.length ? assets : undefined, - inlineStyleLanguage: typeof inlineStyleLanguage === 'string' ? inlineStyleLanguage : undefined, + inlineStyleLanguage, } as ApplicationBuilderInternalOptions; } diff --git a/tests/e2e/tests/vitest/library.ts b/tests/e2e/tests/vitest/library.ts index ba1e31dc38f8..0bb989057279 100644 --- a/tests/e2e/tests/vitest/library.ts +++ b/tests/e2e/tests/vitest/library.ts @@ -1,12 +1,9 @@ import assert from 'node:assert/strict'; import { updateJsonFile } from '../../utils/project'; -import { ng, silentNpm } from '../../utils/process'; -import { createDir, writeFile } from '../../utils/fs'; +import { ng } from '../../utils/process'; +import { appendToFile, createDir, writeFile } from '../../utils/fs'; export default async function (): Promise<void> { - // Install Vitest deps - await silentNpm('install', 'vitest@^4.0.8', 'jsdom@^27.1.0', '--save-dev'); - // Generate a library await ng('generate', 'library', 'my-lib', '--test-runner', 'vitest'); @@ -25,17 +22,10 @@ export default async function (): Promise<void> { // 3. Update the component to use SCSS and import the shared file // Rename CSS to SCSS - await ng( - 'generate', - 'component', - 'styled-comp', - '--project=my-lib', - '--style=scss', - '--skip-import', - ); + await ng('generate', 'component', 'styled-comp', '--project=my-lib', '--style=scss'); - await writeFile( - 'projects/my-lib/src/lib/styled-comp/styled-comp.component.scss', + await appendToFile( + 'projects/my-lib/src/lib/styled-comp/styled-comp.scss', ` @use 'vars'; p { color: vars.$primary-color; } From f17ed308bf2f3931eb19f91b8f44bb33d98050cb Mon Sep 17 00:00:00 2001 From: Alan Agius <17563226+alan-agius4@users.noreply.github.com> Date: Wed, 4 Mar 2026 13:17:03 +0000 Subject: [PATCH 097/226] fix(@angular/build): treat empty browsers array as undefined in unit-test builder Ensure that an empty `browsers` array is treated as `undefined` during the option normalization process. This allows the unit-test builder to properly fall back to the Node.js/jsdom environment for Vitest, and allows the Karma runner to use its default configuration. Closes #32652 --- packages/angular/build/src/builders/unit-test/options.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/angular/build/src/builders/unit-test/options.ts b/packages/angular/build/src/builders/unit-test/options.ts index 72b5f3eb3e8d..0a71f2d642f1 100644 --- a/packages/angular/build/src/builders/unit-test/options.ts +++ b/packages/angular/build/src/builders/unit-test/options.ts @@ -116,7 +116,7 @@ export async function normalizeOptions( buildProgress: progress, reporters: normalizeReporterOption(options.reporters), outputFile: options.outputFile, - browsers, + browsers: browsers?.length ? browsers : undefined, browserViewport: width && height ? { width, height } : undefined, watch, debug: options.debug ?? false, From 8adfc222560b6835c833ce07dd9fdeacfed440e9 Mon Sep 17 00:00:00 2001 From: Charles Lyding <19598772+clydin@users.noreply.github.com> Date: Wed, 4 Mar 2026 13:53:20 -0500 Subject: [PATCH 098/226] docs: release notes for the v20.3.19 release --- CHANGELOG.md | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index b8541354d4b1..2cd85d18ad71 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,15 @@ +<a name="20.3.19"></a> + +# 20.3.19 (2026-03-04) + +### @angular-devkit/build-angular + +| Commit | Type | Description | +| --------------------------------------------------------------------------------------------------- | ---- | ------------------------------------- | +| [0299b4d1a](https://github.com/angular/angular-cli/commit/0299b4d1aca13f11a06e2e92c593fe3e20906d23) | fix | update copy-webpack-plugin to v14.0.0 | + +<!-- CHANGELOG SPLIT MARKER --> + <a name="20.3.18"></a> # 20.3.18 (2026-02-26) From 6034178c5982013a68aa5462460519599c783c33 Mon Sep 17 00:00:00 2001 From: Joey Perrott <josephperrott@gmail.com> Date: Wed, 4 Mar 2026 21:48:53 +0000 Subject: [PATCH 099/226] ci: add issue_labels job to dev-infra workflow --- .github/workflows/dev-infra.yml | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/.github/workflows/dev-infra.yml b/.github/workflows/dev-infra.yml index 338e93e0a381..8cc1802c3c9a 100644 --- a/.github/workflows/dev-infra.yml +++ b/.github/workflows/dev-infra.yml @@ -3,6 +3,8 @@ name: DevInfra on: pull_request_target: types: [opened, synchronize, reopened] + issues: + types: [opened, reopened] # Declare default permissions as read only. permissions: @@ -10,6 +12,7 @@ permissions: jobs: labels: + if: github.event_name == 'pull_request_target' runs-on: ubuntu-latest steps: - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 @@ -17,9 +20,18 @@ jobs: with: angular-robot-key: ${{ secrets.ANGULAR_ROBOT_PRIVATE_KEY }} post_approval_changes: + if: github.event_name == 'pull_request_target' runs-on: ubuntu-latest steps: - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - uses: angular/dev-infra/github-actions/post-approval-changes@63fd18d4726829e65f6abe6f15c0fe79f63f1dec 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@c4344a4e20dbdf9cb8eeb7a7eb91431b98eabd99 + with: + angular-robot-key: ${{ secrets.ANGULAR_ROBOT_PRIVATE_KEY }} + google-generative-ai-key: ${{ secrets.GOOGLE_GENERATIVE_AI_KEY }} From 4e8ade8f3d81075de4ad1b6de6db9b614e6dd76c Mon Sep 17 00:00:00 2001 From: Alan Agius <17563226+alan-agius4@users.noreply.github.com> Date: Thu, 5 Mar 2026 11:17:00 +0000 Subject: [PATCH 100/226] docs: release notes for the v21.2.1 release --- CHANGELOG.md | 44 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2cd85d18ad71..267399fde0ba 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,47 @@ +<a name="21.2.1"></a> + +# 21.2.1 (2026-03-05) + +### @angular/cli + +| Commit | Type | Description | +| --------------------------------------------------------------------------------------------------- | ---- | ------------------------------------------------------ | +| [ae4c28d00](https://github.com/angular/angular-cli/commit/ae4c28d0083d948489f4ba38c571b7f955400226) | fix | correct dev dependency detection logic in `ng add` | +| [465073bc1](https://github.com/angular/angular-cli/commit/465073bc1b2b0e9fa594698651a9e0afe747a74a) | fix | disable npm update notifier in package manager host | +| [36270634f](https://github.com/angular/angular-cli/commit/36270634f6ff5ab15896a8c2b345659511a8a276) | fix | ensure group members are updated to targeted version | +| [d87dba6af](https://github.com/angular/angular-cli/commit/d87dba6af1116de0838d8683cd69fd31ed9811fd) | fix | ignore unknown files when formatting schematic changes | + +### @schematics/angular + +| Commit | Type | Description | +| --------------------------------------------------------------------------------------------------- | ---- | --------------------------------------------------------------- | +| [72d466aa0](https://github.com/angular/angular-cli/commit/72d466aa04d4d0cc4d654410bcb6dd44f0de3357) | fix | prevent adding test dependencies when minimal option is enabled | + +### @angular-devkit/build-angular + +| Commit | Type | Description | +| --------------------------------------------------------------------------------------------------- | ---- | ------------------------------------- | +| [0019d1c8e](https://github.com/angular/angular-cli/commit/0019d1c8e1494295a754063dbf936e1cd40d05bd) | fix | update copy-webpack-plugin to v14.0.0 | + +### @angular/build + +| Commit | Type | Description | +| --------------------------------------------------------------------------------------------------- | ---- | ------------------------------------------------------------------------------ | +| [6ad860863](https://github.com/angular/angular-cli/commit/6ad8608636ad48ae140cc7299a32e0358c761fcc) | fix | bundle polyfills to preserve execution order in dev server | +| [d17397375](https://github.com/angular/angular-cli/commit/d1739737564fbcc3e4c5a6c3369046cccf0f6120) | fix | conditionally allow `vi.mock` for non-relative imports | +| [0d49f86ed](https://github.com/angular/angular-cli/commit/0d49f86edf5592f0266c6d6689ab4d55b27b2d8d) | fix | resolve style include paths relative to `ng-package.json` in unit-test builder | +| [584f6a2d9](https://github.com/angular/angular-cli/commit/584f6a2d95ac4bdd9f20d918c6700ea79227cc92) | fix | treat empty browsers array as undefined in unit-test builder | +| [6699cdc9b](https://github.com/angular/angular-cli/commit/6699cdc9bfbabc3de2ff0cf03acfd6989dc5596c) | perf | fix memory leak in `ng serve` with i18n | + +### @angular/ssr + +| Commit | Type | Description | +| --------------------------------------------------------------------------------------------------- | ---- | ---------------------------------------------------- | +| [43a9dfa66](https://github.com/angular/angular-cli/commit/43a9dfa663c386217c9a654f0e80af74823fcf6a) | fix | improve header validation logic | +| [dee3717b3](https://github.com/angular/angular-cli/commit/dee3717b3faae9ea75d0a5e53c925f915949b8d0) | fix | introduce DI token to signal route discovery process | + +<!-- CHANGELOG SPLIT MARKER --> + <a name="20.3.19"></a> # 20.3.19 (2026-03-04) From 4d345b5146b0df9e2ac8d31891f7557b0eb198b4 Mon Sep 17 00:00:00 2001 From: Alan Agius <17563226+alan-agius4@users.noreply.github.com> Date: Thu, 5 Mar 2026 09:00:38 +0000 Subject: [PATCH 101/226] ci: remove redundant `actions/checkout` steps from dev-infra workflows Checking out the repo is not needed for these actions. --- .github/workflows/dev-infra.yml | 2 -- 1 file changed, 2 deletions(-) diff --git a/.github/workflows/dev-infra.yml b/.github/workflows/dev-infra.yml index 8cc1802c3c9a..1123806799d9 100644 --- a/.github/workflows/dev-infra.yml +++ b/.github/workflows/dev-infra.yml @@ -15,7 +15,6 @@ jobs: 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/labeling/pull-request@63fd18d4726829e65f6abe6f15c0fe79f63f1dec with: angular-robot-key: ${{ secrets.ANGULAR_ROBOT_PRIVATE_KEY }} @@ -23,7 +22,6 @@ jobs: 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@63fd18d4726829e65f6abe6f15c0fe79f63f1dec with: angular-robot-key: ${{ secrets.ANGULAR_ROBOT_PRIVATE_KEY }} From a19dc738d71abd6e4d04092387dd18fa4c2f569f Mon Sep 17 00:00:00 2001 From: Alan Agius <17563226+alan-agius4@users.noreply.github.com> Date: Thu, 5 Mar 2026 11:55:27 +0000 Subject: [PATCH 102/226] build: standardize `bin` script paths and `repository.url` formats across `package.json` files This removed warnings during the releases --- package.json | 2 +- packages/angular/cli/package.json | 4 ++-- packages/angular/create/package.json | 2 +- packages/angular/ssr/package.json | 2 +- packages/angular_devkit/architect/package.json | 2 +- packages/angular_devkit/schematics_cli/package.json | 2 +- packages/ngtools/webpack/package.json | 2 +- 7 files changed, 8 insertions(+), 8 deletions(-) diff --git a/package.json b/package.json index 85c25d1214b4..ac643bd4590f 100644 --- a/package.json +++ b/package.json @@ -26,7 +26,7 @@ }, "repository": { "type": "git", - "url": "https://github.com/angular/angular-cli.git" + "url": "git+https://github.com/angular/angular-cli.git" }, "packageManager": "pnpm@10.30.3", "engines": { diff --git a/packages/angular/cli/package.json b/packages/angular/cli/package.json index bdc3f1b75fe3..06973525125d 100644 --- a/packages/angular/cli/package.json +++ b/packages/angular/cli/package.json @@ -4,7 +4,7 @@ "description": "CLI tool for Angular", "main": "lib/cli/index.js", "bin": { - "ng": "./bin/ng.js" + "ng": "bin/ng.js" }, "keywords": [ "angular", @@ -13,7 +13,7 @@ ], "repository": { "type": "git", - "url": "https://github.com/angular/angular-cli.git" + "url": "git+https://github.com/angular/angular-cli.git" }, "author": "Angular Authors", "license": "MIT", diff --git a/packages/angular/create/package.json b/packages/angular/create/package.json index a5ad3fce4ff9..e20338df9e30 100644 --- a/packages/angular/create/package.json +++ b/packages/angular/create/package.json @@ -9,7 +9,7 @@ "code generation", "schematics" ], - "bin": "./src/index.js", + "bin": "src/index.js", "dependencies": { "@angular/cli": "0.0.0-PLACEHOLDER" } diff --git a/packages/angular/ssr/package.json b/packages/angular/ssr/package.json index 1d3a4763fd28..83cbd279bd00 100644 --- a/packages/angular/ssr/package.json +++ b/packages/angular/ssr/package.json @@ -42,6 +42,6 @@ "schematics": "./schematics/collection.json", "repository": { "type": "git", - "url": "https://github.com/angular/angular-cli.git" + "url": "git+https://github.com/angular/angular-cli.git" } } diff --git a/packages/angular_devkit/architect/package.json b/packages/angular_devkit/architect/package.json index c3f51752bc0c..6cdaa6e5ddac 100644 --- a/packages/angular_devkit/architect/package.json +++ b/packages/angular_devkit/architect/package.json @@ -4,7 +4,7 @@ "description": "Angular Build Facade", "experimental": true, "bin": { - "architect": "./bin/cli.js" + "architect": "bin/cli.js" }, "main": "src/index.js", "typings": "src/index.d.ts", diff --git a/packages/angular_devkit/schematics_cli/package.json b/packages/angular_devkit/schematics_cli/package.json index 620300a20942..92ab60dc5b11 100644 --- a/packages/angular_devkit/schematics_cli/package.json +++ b/packages/angular_devkit/schematics_cli/package.json @@ -4,7 +4,7 @@ "description": "Angular Schematics - CLI", "homepage": "https://github.com/angular/angular-cli", "bin": { - "schematics": "./bin/schematics.js" + "schematics": "bin/schematics.js" }, "keywords": [ "blueprints", diff --git a/packages/ngtools/webpack/package.json b/packages/ngtools/webpack/package.json index df63faea2067..66f371dec0f4 100644 --- a/packages/ngtools/webpack/package.json +++ b/packages/ngtools/webpack/package.json @@ -13,7 +13,7 @@ ], "repository": { "type": "git", - "url": "https://github.com/angular/angular-cli.git" + "url": "git+https://github.com/angular/angular-cli.git" }, "author": "angular", "bugs": { From f190263a4010a4f7b9ae85806b5d70a16b57b9fa Mon Sep 17 00:00:00 2001 From: Alan Agius <17563226+alan-agius4@users.noreply.github.com> Date: Thu, 5 Mar 2026 10:08:04 +0000 Subject: [PATCH 103/226] fix(@angular/build): allow any `CHROME_BIN` for vitest playwright provider The Playwright browser provider in Vitest now uses the `CHROME_BIN` environment variable as the executable path if it's set, removing the restriction that it must contain 'rules_browsers'. This is useful in CI environments to ensure a specific browser binary is used for testing in CI. Closes #32697 --- .../runners/vitest/browser-provider.ts | 24 ++++++------------- 1 file changed, 7 insertions(+), 17 deletions(-) diff --git a/packages/angular/build/src/builders/unit-test/runners/vitest/browser-provider.ts b/packages/angular/build/src/builders/unit-test/runners/vitest/browser-provider.ts index f89848abfbf6..503f551c15cb 100644 --- a/packages/angular/build/src/builders/unit-test/runners/vitest/browser-provider.ts +++ b/packages/angular/build/src/builders/unit-test/runners/vitest/browser-provider.ts @@ -88,24 +88,14 @@ export async function setupBrowserConfiguration( // Validate that the imported module has the expected structure const providerFactory = providerModule[providerName]; if (typeof providerFactory === 'function') { - if ( - providerName === 'playwright' && - process.env['CHROME_BIN']?.includes('rules_browsers') - ) { - // Use the Chrome binary from the 'rules_browsers' toolchain (via CHROME_BIN) - // for Playwright when available to ensure hermetic testing, preventing reliance - // on locally installed or NPM-managed browser versions. - provider = providerFactory({ - launchOptions: { - executablePath: process.env.CHROME_BIN, - }, - contextOptions: { - // Enables `prefer-color-scheme` for Vitest browser instead of `light` - colorScheme: null, - }, - }); - } else if (providerName === 'playwright') { + if (providerName === 'playwright') { + const executablePath = process.env['CHROME_BIN']; provider = providerFactory({ + launchOptions: executablePath + ? { + executablePath, + } + : undefined, contextOptions: { // Enables `prefer-color-scheme` for Vitest browser instead of `light` colorScheme: null, From 097267a360b5c7517fc343a62c359ca207f258be Mon Sep 17 00:00:00 2001 From: Alan Agius <17563226+alan-agius4@users.noreply.github.com> Date: Thu, 5 Mar 2026 15:30:06 +0000 Subject: [PATCH 104/226] build: update cross-repo angular dependencies See associated pull request for more information. Closes #32681 as a pr takeover --- .../assistant-to-the-branch-manager.yml | 2 +- .github/workflows/ci.yml | 52 +-- .github/workflows/dev-infra.yml | 6 +- .github/workflows/perf.yml | 6 +- .github/workflows/pr.yml | 44 +-- MODULE.bazel | 2 +- constants.bzl | 8 +- package.json | 28 +- packages/angular/ssr/package.json | 12 +- .../hello-world-lib/projects/lib/package.json | 4 +- packages/ngtools/webpack/package.json | 4 +- pnpm-lock.yaml | 344 ++++++++---------- .../assets/ssr-project-webpack/package.json | 37 +- tests/e2e/ng-snapshot/package.json | 32 +- 14 files changed, 272 insertions(+), 309 deletions(-) diff --git a/.github/workflows/assistant-to-the-branch-manager.yml b/.github/workflows/assistant-to-the-branch-manager.yml index 529f1e6d51d7..9cb2265aae7e 100644 --- a/.github/workflows/assistant-to-the-branch-manager.yml +++ b/.github/workflows/assistant-to-the-branch-manager.yml @@ -17,6 +17,6 @@ jobs: - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 with: persist-credentials: false - - uses: angular/dev-infra/github-actions/branch-manager@63fd18d4726829e65f6abe6f15c0fe79f63f1dec + - uses: angular/dev-infra/github-actions/branch-manager@e4dcda13e469f50a6bd92667e2ded8b98173bf2c with: angular-robot-key: ${{ secrets.ANGULAR_ROBOT_PRIVATE_KEY }} diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index eef6c834c53a..d69c25e22489 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -21,9 +21,9 @@ jobs: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@63fd18d4726829e65f6abe6f15c0fe79f63f1dec + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@e4dcda13e469f50a6bd92667e2ded8b98173bf2c - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@63fd18d4726829e65f6abe6f15c0fe79f63f1dec + uses: angular/dev-infra/github-actions/bazel/setup@e4dcda13e469f50a6bd92667e2ded8b98173bf2c - name: Install node modules run: pnpm install --frozen-lockfile - name: Generate JSON schema types @@ -44,11 +44,11 @@ jobs: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@63fd18d4726829e65f6abe6f15c0fe79f63f1dec + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@e4dcda13e469f50a6bd92667e2ded8b98173bf2c - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@63fd18d4726829e65f6abe6f15c0fe79f63f1dec + uses: angular/dev-infra/github-actions/bazel/setup@e4dcda13e469f50a6bd92667e2ded8b98173bf2c - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@63fd18d4726829e65f6abe6f15c0fe79f63f1dec + uses: angular/dev-infra/github-actions/bazel/configure-remote@e4dcda13e469f50a6bd92667e2ded8b98173bf2c with: google_credential: ${{ secrets.RBE_TRUSTED_BUILDS_USER }} - name: Install node modules @@ -61,11 +61,11 @@ jobs: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@63fd18d4726829e65f6abe6f15c0fe79f63f1dec + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@e4dcda13e469f50a6bd92667e2ded8b98173bf2c - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@63fd18d4726829e65f6abe6f15c0fe79f63f1dec + uses: angular/dev-infra/github-actions/bazel/setup@e4dcda13e469f50a6bd92667e2ded8b98173bf2c - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@63fd18d4726829e65f6abe6f15c0fe79f63f1dec + uses: angular/dev-infra/github-actions/bazel/configure-remote@e4dcda13e469f50a6bd92667e2ded8b98173bf2c with: google_credential: ${{ secrets.RBE_TRUSTED_BUILDS_USER }} - name: Install node modules @@ -84,13 +84,13 @@ jobs: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@63fd18d4726829e65f6abe6f15c0fe79f63f1dec + 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@63fd18d4726829e65f6abe6f15c0fe79f63f1dec + uses: angular/dev-infra/github-actions/bazel/setup@e4dcda13e469f50a6bd92667e2ded8b98173bf2c - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@63fd18d4726829e65f6abe6f15c0fe79f63f1dec + uses: angular/dev-infra/github-actions/bazel/configure-remote@e4dcda13e469f50a6bd92667e2ded8b98173bf2c with: google_credential: ${{ secrets.RBE_TRUSTED_BUILDS_USER }} - name: Run CLI E2E tests @@ -100,11 +100,11 @@ jobs: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@63fd18d4726829e65f6abe6f15c0fe79f63f1dec + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@e4dcda13e469f50a6bd92667e2ded8b98173bf2c - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@63fd18d4726829e65f6abe6f15c0fe79f63f1dec + uses: angular/dev-infra/github-actions/bazel/setup@e4dcda13e469f50a6bd92667e2ded8b98173bf2c - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@63fd18d4726829e65f6abe6f15c0fe79f63f1dec + uses: angular/dev-infra/github-actions/bazel/configure-remote@e4dcda13e469f50a6bd92667e2ded8b98173bf2c with: google_credential: ${{ secrets.RBE_TRUSTED_BUILDS_USER }} - name: Install node modules @@ -137,7 +137,7 @@ jobs: runs-on: windows-2025 steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@63fd18d4726829e65f6abe6f15c0fe79f63f1dec + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@e4dcda13e469f50a6bd92667e2ded8b98173bf2c - name: Install node modules run: pnpm install --frozen-lockfile - name: Download built Windows E2E tests @@ -164,13 +164,13 @@ jobs: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@63fd18d4726829e65f6abe6f15c0fe79f63f1dec + 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@63fd18d4726829e65f6abe6f15c0fe79f63f1dec + uses: angular/dev-infra/github-actions/bazel/setup@e4dcda13e469f50a6bd92667e2ded8b98173bf2c - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@63fd18d4726829e65f6abe6f15c0fe79f63f1dec + uses: angular/dev-infra/github-actions/bazel/configure-remote@e4dcda13e469f50a6bd92667e2ded8b98173bf2c with: google_credential: ${{ secrets.RBE_TRUSTED_BUILDS_USER }} - name: Run CLI E2E tests @@ -188,13 +188,13 @@ jobs: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@63fd18d4726829e65f6abe6f15c0fe79f63f1dec + 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@63fd18d4726829e65f6abe6f15c0fe79f63f1dec + uses: angular/dev-infra/github-actions/bazel/setup@e4dcda13e469f50a6bd92667e2ded8b98173bf2c - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@63fd18d4726829e65f6abe6f15c0fe79f63f1dec + uses: angular/dev-infra/github-actions/bazel/configure-remote@e4dcda13e469f50a6bd92667e2ded8b98173bf2c with: google_credential: ${{ secrets.RBE_TRUSTED_BUILDS_USER }} - name: Run CLI E2E tests @@ -208,13 +208,13 @@ jobs: SAUCE_TUNNEL_IDENTIFIER: angular-cli-${{ github.workflow }}-${{ github.run_number }} steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@63fd18d4726829e65f6abe6f15c0fe79f63f1dec + 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@63fd18d4726829e65f6abe6f15c0fe79f63f1dec + uses: angular/dev-infra/github-actions/bazel/setup@e4dcda13e469f50a6bd92667e2ded8b98173bf2c - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@63fd18d4726829e65f6abe6f15c0fe79f63f1dec + uses: angular/dev-infra/github-actions/bazel/configure-remote@e4dcda13e469f50a6bd92667e2ded8b98173bf2c with: google_credential: ${{ secrets.RBE_TRUSTED_BUILDS_USER }} - name: Run E2E Browser tests @@ -244,11 +244,11 @@ jobs: CIRCLE_BRANCH: ${{ github.ref_name }} steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@63fd18d4726829e65f6abe6f15c0fe79f63f1dec + 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@63fd18d4726829e65f6abe6f15c0fe79f63f1dec + uses: angular/dev-infra/github-actions/bazel/setup@e4dcda13e469f50a6bd92667e2ded8b98173bf2c - run: pnpm admin snapshots --verbose env: SNAPSHOT_BUILDS_GITHUB_TOKEN: ${{ secrets.SNAPSHOT_BUILDS_GITHUB_TOKEN }} diff --git a/.github/workflows/dev-infra.yml b/.github/workflows/dev-infra.yml index 1123806799d9..c61f1d1efed9 100644 --- a/.github/workflows/dev-infra.yml +++ b/.github/workflows/dev-infra.yml @@ -15,21 +15,21 @@ jobs: if: github.event_name == 'pull_request_target' runs-on: ubuntu-latest steps: - - uses: angular/dev-infra/github-actions/labeling/pull-request@63fd18d4726829e65f6abe6f15c0fe79f63f1dec + - uses: angular/dev-infra/github-actions/labeling/pull-request@e4dcda13e469f50a6bd92667e2ded8b98173bf2c with: angular-robot-key: ${{ secrets.ANGULAR_ROBOT_PRIVATE_KEY }} post_approval_changes: if: github.event_name == 'pull_request_target' runs-on: ubuntu-latest steps: - - uses: angular/dev-infra/github-actions/post-approval-changes@63fd18d4726829e65f6abe6f15c0fe79f63f1dec + - 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@c4344a4e20dbdf9cb8eeb7a7eb91431b98eabd99 + - 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 }} diff --git a/.github/workflows/perf.yml b/.github/workflows/perf.yml index b4d8817aa7c6..b3f7a63abc87 100644 --- a/.github/workflows/perf.yml +++ b/.github/workflows/perf.yml @@ -23,7 +23,7 @@ jobs: workflows: ${{ steps.workflows.outputs.workflows }} steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@63fd18d4726829e65f6abe6f15c0fe79f63f1dec + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@e4dcda13e469f50a6bd92667e2ded8b98173bf2c - name: Install node modules run: pnpm install --frozen-lockfile - id: workflows @@ -38,9 +38,9 @@ jobs: workflow: ${{ fromJSON(needs.list.outputs.workflows) }} steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@63fd18d4726829e65f6abe6f15c0fe79f63f1dec + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@e4dcda13e469f50a6bd92667e2ded8b98173bf2c - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@63fd18d4726829e65f6abe6f15c0fe79f63f1dec + 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 diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml index 087e7e0b55ce..e02522586f40 100644 --- a/.github/workflows/pr.yml +++ b/.github/workflows/pr.yml @@ -34,9 +34,9 @@ jobs: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@63fd18d4726829e65f6abe6f15c0fe79f63f1dec + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@e4dcda13e469f50a6bd92667e2ded8b98173bf2c - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@63fd18d4726829e65f6abe6f15c0fe79f63f1dec + uses: angular/dev-infra/github-actions/bazel/setup@e4dcda13e469f50a6bd92667e2ded8b98173bf2c - name: Setup ESLint Caching uses: actions/cache@cdf6c1fa76f9f475f3d7449005a359c84ca0f306 # v5.0.3 with: @@ -66,17 +66,17 @@ jobs: # it has been merged. run: pnpm ng-dev format changed --check ${{ github.event.pull_request.base.sha }} - name: Check Package Licenses - uses: angular/dev-infra/github-actions/linting/licenses@63fd18d4726829e65f6abe6f15c0fe79f63f1dec + uses: angular/dev-infra/github-actions/linting/licenses@e4dcda13e469f50a6bd92667e2ded8b98173bf2c build: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@63fd18d4726829e65f6abe6f15c0fe79f63f1dec + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@e4dcda13e469f50a6bd92667e2ded8b98173bf2c - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@63fd18d4726829e65f6abe6f15c0fe79f63f1dec + uses: angular/dev-infra/github-actions/bazel/setup@e4dcda13e469f50a6bd92667e2ded8b98173bf2c - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@63fd18d4726829e65f6abe6f15c0fe79f63f1dec + uses: angular/dev-infra/github-actions/bazel/configure-remote@e4dcda13e469f50a6bd92667e2ded8b98173bf2c - name: Install node modules run: pnpm install --frozen-lockfile - name: Build release targets @@ -93,11 +93,11 @@ jobs: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@63fd18d4726829e65f6abe6f15c0fe79f63f1dec + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@e4dcda13e469f50a6bd92667e2ded8b98173bf2c - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@63fd18d4726829e65f6abe6f15c0fe79f63f1dec + uses: angular/dev-infra/github-actions/bazel/setup@e4dcda13e469f50a6bd92667e2ded8b98173bf2c - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@63fd18d4726829e65f6abe6f15c0fe79f63f1dec + uses: angular/dev-infra/github-actions/bazel/configure-remote@e4dcda13e469f50a6bd92667e2ded8b98173bf2c - name: Install node modules run: pnpm install --frozen-lockfile - name: Run module and package tests @@ -114,13 +114,13 @@ jobs: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@63fd18d4726829e65f6abe6f15c0fe79f63f1dec + 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@63fd18d4726829e65f6abe6f15c0fe79f63f1dec + uses: angular/dev-infra/github-actions/bazel/setup@e4dcda13e469f50a6bd92667e2ded8b98173bf2c - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@63fd18d4726829e65f6abe6f15c0fe79f63f1dec + uses: angular/dev-infra/github-actions/bazel/configure-remote@e4dcda13e469f50a6bd92667e2ded8b98173bf2c - name: Run CLI E2E tests run: pnpm bazel test --test_env=E2E_SHARD_TOTAL=6 --test_env=E2E_SHARD_INDEX=${{ matrix.shard }} --config=e2e //tests:e2e.${{ matrix.subset }}_node${{ matrix.node }} @@ -128,11 +128,11 @@ jobs: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@63fd18d4726829e65f6abe6f15c0fe79f63f1dec + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@e4dcda13e469f50a6bd92667e2ded8b98173bf2c - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@63fd18d4726829e65f6abe6f15c0fe79f63f1dec + uses: angular/dev-infra/github-actions/bazel/setup@e4dcda13e469f50a6bd92667e2ded8b98173bf2c - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@63fd18d4726829e65f6abe6f15c0fe79f63f1dec + uses: angular/dev-infra/github-actions/bazel/configure-remote@e4dcda13e469f50a6bd92667e2ded8b98173bf2c - name: Install node modules run: pnpm install --frozen-lockfile - name: Build E2E tests for Windows on Linux @@ -156,7 +156,7 @@ jobs: runs-on: windows-2025 steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@63fd18d4726829e65f6abe6f15c0fe79f63f1dec + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@e4dcda13e469f50a6bd92667e2ded8b98173bf2c - name: Install node modules run: pnpm install --frozen-lockfile - name: Download built Windows E2E tests @@ -183,13 +183,13 @@ jobs: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@63fd18d4726829e65f6abe6f15c0fe79f63f1dec + 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@63fd18d4726829e65f6abe6f15c0fe79f63f1dec + uses: angular/dev-infra/github-actions/bazel/setup@e4dcda13e469f50a6bd92667e2ded8b98173bf2c - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@63fd18d4726829e65f6abe6f15c0fe79f63f1dec + uses: angular/dev-infra/github-actions/bazel/configure-remote@e4dcda13e469f50a6bd92667e2ded8b98173bf2c - name: Run CLI E2E tests run: pnpm bazel test --test_env=E2E_SHARD_TOTAL=3 --test_env=E2E_SHARD_INDEX=${{ matrix.shard }} --config=e2e //tests:e2e.${{ matrix.subset }}_node${{ matrix.node }} @@ -205,12 +205,12 @@ jobs: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@63fd18d4726829e65f6abe6f15c0fe79f63f1dec + 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@63fd18d4726829e65f6abe6f15c0fe79f63f1dec + uses: angular/dev-infra/github-actions/bazel/setup@e4dcda13e469f50a6bd92667e2ded8b98173bf2c - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@63fd18d4726829e65f6abe6f15c0fe79f63f1dec + uses: angular/dev-infra/github-actions/bazel/configure-remote@e4dcda13e469f50a6bd92667e2ded8b98173bf2c - name: Run CLI E2E tests run: pnpm bazel test --test_env=E2E_SHARD_TOTAL=6 --test_env=E2E_SHARD_INDEX=${{ matrix.shard }} --config=e2e //tests:e2e.snapshots.${{ matrix.subset }}_node${{ matrix.node }} diff --git a/MODULE.bazel b/MODULE.bazel index e8b0ffd5b69b..9ad428881a32 100644 --- a/MODULE.bazel +++ b/MODULE.bazel @@ -25,7 +25,7 @@ git_override( bazel_dep(name = "devinfra") git_override( module_name = "devinfra", - commit = "63fd18d4726829e65f6abe6f15c0fe79f63f1dec", + commit = "e4dcda13e469f50a6bd92667e2ded8b98173bf2c", remote = "https://github.com/angular/dev-infra.git", ) diff --git a/constants.bzl b/constants.bzl index f737df7c94db..89d6eb63421c 100644 --- a/constants.bzl +++ b/constants.bzl @@ -3,10 +3,10 @@ RELEASE_ENGINES_NODE = "^22.22.0 || >=24.13.1" RELEASE_ENGINES_NPM = "^6.11.0 || ^7.5.6 || >=8.0.0" RELEASE_ENGINES_YARN = ">= 1.13.0" -NG_PACKAGR_VERSION = "^21.2.0-next.0" -ANGULAR_FW_VERSION = "^21.2.0-next.0" -ANGULAR_FW_PEER_DEP = "^21.0.0 || ^21.2.0-next.0" -NG_PACKAGR_PEER_DEP = "^21.0.0 || ^21.2.0-next.0" +NG_PACKAGR_VERSION = "^22.0.0-next.0" +ANGULAR_FW_VERSION = "^22.0.0-next.0" +ANGULAR_FW_PEER_DEP = "^22.0.0-next.0" +NG_PACKAGR_PEER_DEP = "^22.0.0-next.0" # Baseline widely-available date in `YYYY-MM-DD` format which defines Angular's # browser support. This date serves as the source of truth for the Angular CLI's diff --git a/package.json b/package.json index ac643bd4590f..d1b6ca3b8458 100644 --- a/package.json +++ b/package.json @@ -42,20 +42,20 @@ }, "homepage": "https://github.com/angular/angular-cli", "devDependencies": { - "@angular/animations": "21.2.0-rc.0", - "@angular/cdk": "21.2.0-rc.0", - "@angular/common": "21.2.0-rc.0", - "@angular/compiler": "21.2.0-rc.0", - "@angular/compiler-cli": "21.2.0-rc.0", - "@angular/core": "21.2.0-rc.0", - "@angular/forms": "21.2.0-rc.0", - "@angular/localize": "21.2.0-rc.0", - "@angular/material": "21.2.0-rc.0", - "@angular/ng-dev": "https://github.com/angular/dev-infra-private-ng-dev-builds.git#363cd055209d441778715bb625b92b48323bb38e", - "@angular/platform-browser": "21.2.0-rc.0", - "@angular/platform-server": "21.2.0-rc.0", - "@angular/router": "21.2.0-rc.0", - "@angular/service-worker": "21.2.0-rc.0", + "@angular/animations": "22.0.0-next.0", + "@angular/cdk": "21.3.0-next.0", + "@angular/common": "22.0.0-next.0", + "@angular/compiler": "22.0.0-next.0", + "@angular/compiler-cli": "22.0.0-next.0", + "@angular/core": "22.0.0-next.0", + "@angular/forms": "22.0.0-next.0", + "@angular/localize": "22.0.0-next.0", + "@angular/material": "21.3.0-next.0", + "@angular/ng-dev": "https://github.com/angular/dev-infra-private-ng-dev-builds.git#610c7c10ab750bfe5688581d6d5ec11114048f35", + "@angular/platform-browser": "22.0.0-next.0", + "@angular/platform-server": "22.0.0-next.0", + "@angular/router": "22.0.0-next.0", + "@angular/service-worker": "22.0.0-next.0", "@babel/core": "7.29.0", "@bazel/bazelisk": "1.28.1", "@bazel/buildifier": "8.2.1", diff --git a/packages/angular/ssr/package.json b/packages/angular/ssr/package.json index 83cbd279bd00..ff9841d70ba7 100644 --- a/packages/angular/ssr/package.json +++ b/packages/angular/ssr/package.json @@ -29,12 +29,12 @@ }, "devDependencies": { "@angular-devkit/schematics": "workspace:*", - "@angular/common": "21.2.0-rc.0", - "@angular/compiler": "21.2.0-rc.0", - "@angular/core": "21.2.0-rc.0", - "@angular/platform-browser": "21.2.0-rc.0", - "@angular/platform-server": "21.2.0-rc.0", - "@angular/router": "21.2.0-rc.0", + "@angular/common": "22.0.0-next.0", + "@angular/compiler": "22.0.0-next.0", + "@angular/core": "22.0.0-next.0", + "@angular/platform-browser": "22.0.0-next.0", + "@angular/platform-server": "22.0.0-next.0", + "@angular/router": "22.0.0-next.0", "@schematics/angular": "workspace:*", "beasties": "0.4.1" }, diff --git a/packages/angular_devkit/build_angular/test/hello-world-lib/projects/lib/package.json b/packages/angular_devkit/build_angular/test/hello-world-lib/projects/lib/package.json index cacc9ceaa935..ac7b847f2366 100644 --- a/packages/angular_devkit/build_angular/test/hello-world-lib/projects/lib/package.json +++ b/packages/angular_devkit/build_angular/test/hello-world-lib/projects/lib/package.json @@ -2,7 +2,7 @@ "name": "lib", "version": "0.0.1", "peerDependencies": { - "@angular/common": "^21.2.0-next", - "@angular/core": "^21.2.0-next" + "@angular/common": "^22.0.0-next", + "@angular/core": "^22.0.0-next" } } \ No newline at end of file diff --git a/packages/ngtools/webpack/package.json b/packages/ngtools/webpack/package.json index 66f371dec0f4..eee3a1c0060d 100644 --- a/packages/ngtools/webpack/package.json +++ b/packages/ngtools/webpack/package.json @@ -27,8 +27,8 @@ }, "devDependencies": { "@angular-devkit/core": "workspace:0.0.0-PLACEHOLDER", - "@angular/compiler": "21.2.0-rc.0", - "@angular/compiler-cli": "21.2.0-rc.0", + "@angular/compiler": "22.0.0-next.0", + "@angular/compiler-cli": "22.0.0-next.0", "typescript": "6.0.0-beta", "webpack": "5.105.3" } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 30a017b18639..e0a22cb10635 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -20,47 +20,47 @@ importers: built: true devDependencies: '@angular/animations': - specifier: 21.2.0-rc.0 - version: 21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1)) + specifier: 22.0.0-next.0 + version: 22.0.0-next.0(@angular/core@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(rxjs@7.8.2)(zone.js@0.16.1)) '@angular/cdk': - specifier: 21.2.0-rc.0 - version: 21.2.0-rc.0(@angular/common@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@21.2.0-rc.0(@angular/animations@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1)))(rxjs@7.8.2) + specifier: 21.3.0-next.0 + version: 21.3.0-next.0(@angular/common@22.0.0-next.0(@angular/core@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@22.0.0-next.0(@angular/animations@22.0.0-next.0(@angular/core@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@22.0.0-next.0(@angular/core@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(rxjs@7.8.2)(zone.js@0.16.1)))(rxjs@7.8.2) '@angular/common': - specifier: 21.2.0-rc.0 - version: 21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2) + specifier: 22.0.0-next.0 + version: 22.0.0-next.0(@angular/core@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2) '@angular/compiler': - specifier: 21.2.0-rc.0 - version: 21.2.0-rc.0 + specifier: 22.0.0-next.0 + version: 22.0.0-next.0 '@angular/compiler-cli': - specifier: 21.2.0-rc.0 - version: 21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(typescript@6.0.0-beta) + specifier: 22.0.0-next.0 + version: 22.0.0-next.0(@angular/compiler@22.0.0-next.0)(typescript@6.0.0-beta) '@angular/core': - specifier: 21.2.0-rc.0 - version: 21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1) + specifier: 22.0.0-next.0 + version: 22.0.0-next.0(@angular/compiler@22.0.0-next.0)(rxjs@7.8.2)(zone.js@0.16.1) '@angular/forms': - specifier: 21.2.0-rc.0 - version: 21.2.0-rc.0(@angular/common@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@21.2.0-rc.0(@angular/animations@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1)))(rxjs@7.8.2) + specifier: 22.0.0-next.0 + version: 22.0.0-next.0(@angular/common@22.0.0-next.0(@angular/core@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@22.0.0-next.0(@angular/animations@22.0.0-next.0(@angular/core@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@22.0.0-next.0(@angular/core@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(rxjs@7.8.2)(zone.js@0.16.1)))(rxjs@7.8.2) '@angular/localize': - specifier: 21.2.0-rc.0 - version: 21.2.0-rc.0(@angular/compiler-cli@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(typescript@6.0.0-beta))(@angular/compiler@21.2.0-rc.0) + specifier: 22.0.0-next.0 + version: 22.0.0-next.0(@angular/compiler-cli@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(typescript@6.0.0-beta))(@angular/compiler@22.0.0-next.0) '@angular/material': - specifier: 21.2.0-rc.0 - version: 21.2.0-rc.0(b10e235d889ab235dc2911d6ec167f08) + specifier: 21.3.0-next.0 + version: 21.3.0-next.0(3b5e22ded8635c9a08f958235c8786ff) '@angular/ng-dev': - specifier: https://github.com/angular/dev-infra-private-ng-dev-builds.git#363cd055209d441778715bb625b92b48323bb38e - version: https://codeload.github.com/angular/dev-infra-private-ng-dev-builds/tar.gz/363cd055209d441778715bb625b92b48323bb38e(@modelcontextprotocol/sdk@1.27.1(zod@4.3.6)) + specifier: https://github.com/angular/dev-infra-private-ng-dev-builds.git#610c7c10ab750bfe5688581d6d5ec11114048f35 + version: https://codeload.github.com/angular/dev-infra-private-ng-dev-builds/tar.gz/610c7c10ab750bfe5688581d6d5ec11114048f35(@modelcontextprotocol/sdk@1.27.1(zod@4.3.6)) '@angular/platform-browser': - specifier: 21.2.0-rc.0 - version: 21.2.0-rc.0(@angular/animations@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1)) + specifier: 22.0.0-next.0 + version: 22.0.0-next.0(@angular/animations@22.0.0-next.0(@angular/core@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@22.0.0-next.0(@angular/core@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(rxjs@7.8.2)(zone.js@0.16.1)) '@angular/platform-server': - specifier: 21.2.0-rc.0 - version: 21.2.0-rc.0(@angular/common@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/compiler@21.2.0-rc.0)(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@21.2.0-rc.0(@angular/animations@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1)))(rxjs@7.8.2) + specifier: 22.0.0-next.0 + version: 22.0.0-next.0(@angular/common@22.0.0-next.0(@angular/core@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/compiler@22.0.0-next.0)(@angular/core@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@22.0.0-next.0(@angular/animations@22.0.0-next.0(@angular/core@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@22.0.0-next.0(@angular/core@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(rxjs@7.8.2)(zone.js@0.16.1)))(rxjs@7.8.2) '@angular/router': - specifier: 21.2.0-rc.0 - version: 21.2.0-rc.0(@angular/common@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@21.2.0-rc.0(@angular/animations@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1)))(rxjs@7.8.2) + specifier: 22.0.0-next.0 + version: 22.0.0-next.0(@angular/common@22.0.0-next.0(@angular/core@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@22.0.0-next.0(@angular/animations@22.0.0-next.0(@angular/core@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@22.0.0-next.0(@angular/core@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(rxjs@7.8.2)(zone.js@0.16.1)))(rxjs@7.8.2) '@angular/service-worker': - specifier: 21.2.0-rc.0 - version: 21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2) + specifier: 22.0.0-next.0 + version: 22.0.0-next.0(@angular/core@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2) '@babel/core': specifier: 7.29.0 version: 7.29.0 @@ -418,7 +418,7 @@ importers: version: 4.4.2 ng-packagr: specifier: 22.0.0-next.0 - version: 22.0.0-next.0(@angular/compiler-cli@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(typescript@6.0.0-beta))(tslib@2.8.1)(typescript@6.0.0-beta) + version: 22.0.0-next.0(@angular/compiler-cli@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(typescript@6.0.0-beta))(tslib@2.8.1)(typescript@6.0.0-beta) postcss: specifier: 8.5.6 version: 8.5.6 @@ -512,23 +512,23 @@ importers: specifier: workspace:* version: link:../../angular_devkit/schematics '@angular/common': - specifier: 21.2.0-rc.0 - version: 21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2) + specifier: 22.0.0-next.0 + version: 22.0.0-next.0(@angular/core@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2) '@angular/compiler': - specifier: 21.2.0-rc.0 - version: 21.2.0-rc.0 + specifier: 22.0.0-next.0 + version: 22.0.0-next.0 '@angular/core': - specifier: 21.2.0-rc.0 - version: 21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1) + specifier: 22.0.0-next.0 + version: 22.0.0-next.0(@angular/compiler@22.0.0-next.0)(rxjs@7.8.2)(zone.js@0.16.1) '@angular/platform-browser': - specifier: 21.2.0-rc.0 - version: 21.2.0-rc.0(@angular/animations@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1)) + specifier: 22.0.0-next.0 + version: 22.0.0-next.0(@angular/animations@22.0.0-next.0(@angular/core@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@22.0.0-next.0(@angular/core@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(rxjs@7.8.2)(zone.js@0.16.1)) '@angular/platform-server': - specifier: 21.2.0-rc.0 - version: 21.2.0-rc.0(@angular/common@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/compiler@21.2.0-rc.0)(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@21.2.0-rc.0(@angular/animations@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1)))(rxjs@7.8.2) + specifier: 22.0.0-next.0 + version: 22.0.0-next.0(@angular/common@22.0.0-next.0(@angular/core@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/compiler@22.0.0-next.0)(@angular/core@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@22.0.0-next.0(@angular/animations@22.0.0-next.0(@angular/core@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@22.0.0-next.0(@angular/core@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(rxjs@7.8.2)(zone.js@0.16.1)))(rxjs@7.8.2) '@angular/router': - specifier: 21.2.0-rc.0 - version: 21.2.0-rc.0(@angular/common@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@21.2.0-rc.0(@angular/animations@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1)))(rxjs@7.8.2) + specifier: 22.0.0-next.0 + version: 22.0.0-next.0(@angular/common@22.0.0-next.0(@angular/core@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@22.0.0-next.0(@angular/animations@22.0.0-next.0(@angular/core@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@22.0.0-next.0(@angular/core@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(rxjs@7.8.2)(zone.js@0.16.1)))(rxjs@7.8.2) '@schematics/angular': specifier: workspace:* version: link:../../schematics/angular @@ -715,7 +715,7 @@ importers: version: 3.0.4(bufferutil@4.1.0)(utf-8-validate@6.0.6) ng-packagr: specifier: 22.0.0-next.0 - version: 22.0.0-next.0(@angular/compiler-cli@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(typescript@6.0.0-beta))(tslib@2.8.1)(typescript@6.0.0-beta) + version: 22.0.0-next.0(@angular/compiler-cli@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(typescript@6.0.0-beta))(tslib@2.8.1)(typescript@6.0.0-beta) undici: specifier: 7.22.0 version: 7.22.0 @@ -807,11 +807,11 @@ importers: specifier: workspace:0.0.0-PLACEHOLDER version: link:../../angular_devkit/core '@angular/compiler': - specifier: 21.2.0-rc.0 - version: 21.2.0-rc.0 + specifier: 22.0.0-next.0 + version: 22.0.0-next.0 '@angular/compiler-cli': - specifier: 21.2.0-rc.0 - version: 21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(typescript@6.0.0-beta) + specifier: 22.0.0-next.0 + version: 22.0.0-next.0(@angular/compiler@22.0.0-next.0)(typescript@6.0.0-beta) typescript: specifier: 6.0.0-beta version: 6.0.0-beta @@ -920,47 +920,47 @@ packages: resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} engines: {node: '>=6.0.0'} - '@angular/animations@21.2.0-rc.0': - resolution: {integrity: sha512-9oMEVaSqkb3/3R5FLEV8cSjyC9dYCru3NdcXbe/8D4RerBJjlAjGSXjmfNAS6fzXD+/CsINK0ELh8Mcxvqe/GQ==} - engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0} + '@angular/animations@22.0.0-next.0': + resolution: {integrity: sha512-oNobZGZxeOMCKKYg6qxgyanxe3ydRzvCO2VtSoljgW890S84E6pwomUeyu+fn2uHKXEOjVpIUo2qCNw7Ya2cNA==} + engines: {node: ^22.22.0 || >=24.13.1} peerDependencies: - '@angular/core': 21.2.0-rc.0 + '@angular/core': 22.0.0-next.0 - '@angular/cdk@21.2.0-rc.0': - resolution: {integrity: sha512-dfVC6OjwgfonuE+os2mYNh0tY6bRlT7u+zz2rWXbEYH5J9nRvRTr1jo3+GORT/0FY0Kt9nI0FVydyrFvjfqh3g==} + '@angular/cdk@21.3.0-next.0': + resolution: {integrity: sha512-G5EDENTxLaMCZ35DO3FVbplU05r5NPm6bWLp88xrNGc8u3a9cwswp5fNwSVcW3E7c1VuvCC4tTsPmPYI1DycGw==} 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 rxjs: ^6.5.3 || ^7.4.0 - '@angular/common@21.2.0-rc.0': - resolution: {integrity: sha512-2O3cbBIM8ls97XwkYVdgJwEg3UOy/bVZ0uBoY14cLskhETj6wbrFENiy8KpikZ+xsTxE9gWohairxCRiEoFuKg==} - engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0} + '@angular/common@22.0.0-next.0': + resolution: {integrity: sha512-f8VpaKaBLQZjnFVNituC4k+X8vlp5s9YlvWs1IZu6bQ6J2WAx87wiPeHA/zuishu9D2bp7y5OcXPccwAk/XNiw==} + engines: {node: ^22.22.0 || >=24.13.1} peerDependencies: - '@angular/core': 21.2.0-rc.0 + '@angular/core': 22.0.0-next.0 rxjs: ^6.5.3 || ^7.4.0 - '@angular/compiler-cli@21.2.0-rc.0': - resolution: {integrity: sha512-lHPA5BzQq9ttHXCAnAC/zW5vW0lFiawBIvRpNRbsI8Vw1noMs614OqZ2R6UBReVPE4kpyGwh7HCQIZyX5Cth6g==} - engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0} + '@angular/compiler-cli@22.0.0-next.0': + resolution: {integrity: sha512-2WX/B0C2lPclLI0k0q8WJKTsUDOmgYlQqQNepe2VLKqY6h87bVgu5nJuoyOEjN5o9BDyrZWig5XDmlEGvkabrw==} + engines: {node: ^22.22.0 || >=24.13.1} hasBin: true peerDependencies: - '@angular/compiler': 21.2.0-rc.0 + '@angular/compiler': 22.0.0-next.0 typescript: '>=5.9 <6.1' peerDependenciesMeta: typescript: optional: true - '@angular/compiler@21.2.0-rc.0': - resolution: {integrity: sha512-gl2dQgMFKkH/iM/YxqWO0oIbYRpBZpOZuxj9W5TjG50EpMDioD1CNu2DfXpODVo3/rOfZJvOa+Jw0Cxpj5ClMQ==} - engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0} + '@angular/compiler@22.0.0-next.0': + resolution: {integrity: sha512-tTUIKgr90oh5/sU9cjPmV3GjQ2pqSojWiZcS8GVDqydKTMx2YOflQ6A8yL3FtL5hkTJ7rlZYZwA1dzRKuNaEvQ==} + engines: {node: ^22.22.0 || >=24.13.1} - '@angular/core@21.2.0-rc.0': - resolution: {integrity: sha512-Txdi6ocSNC8GbCYMGh2AUm1lx+J11LNRjNrfGcgxQhQAiEPVO8jGojfObM+rdjv1h8t0pCms5vzEmFiJ9z06hg==} - engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0} + '@angular/core@22.0.0-next.0': + resolution: {integrity: sha512-HXMOh56el5hq0541LcxYlIttiFMLNmqJ3kQry27VIPuxakCgZdam8HbhWPje4PMfioiLHShdCZUF+VWnr11Erg==} + engines: {node: ^22.22.0 || >=24.13.1} peerDependencies: - '@angular/compiler': 21.2.0-rc.0 + '@angular/compiler': 22.0.0-next.0 rxjs: ^6.5.3 || ^7.4.0 zone.js: ~0.15.0 || ~0.16.0 peerDependenciesMeta: @@ -969,74 +969,74 @@ packages: zone.js: optional: true - '@angular/forms@21.2.0-rc.0': - resolution: {integrity: sha512-GsX4c+GYUxcKla8yO/hpEzpliCsMslP+yIIk9l6831PkSf3uCyKHUHriJtOEca4uN5fNo23ix5NXo5VPkmldLQ==} - engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0} + '@angular/forms@22.0.0-next.0': + resolution: {integrity: sha512-eljVun7G5FLQE6SMiNt0JiMmLsfo/mSFAhAPPp+8VlVxW31RV117RTC0wvP4fMAQMzBgiRRZShQRKMc8orMnoQ==} + engines: {node: ^22.22.0 || >=24.13.1} 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': 22.0.0-next.0 + '@angular/core': 22.0.0-next.0 + '@angular/platform-browser': 22.0.0-next.0 rxjs: ^6.5.3 || ^7.4.0 - '@angular/localize@21.2.0-rc.0': - resolution: {integrity: sha512-5OfXbWU0L9Py1mBIflZsdz9i39HF7wL38UxXzGe/y3my9I1Jk5fKD3J514htfgVXgdUqWogY6f2fpcxm2EP0Ug==} - engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0} + '@angular/localize@22.0.0-next.0': + resolution: {integrity: sha512-efHunpqsizxKQKNay1fnG2V/oxrdI5s3+AlznUxNQQ5Rn8bpdvhwdBzGrsQY+H5FqrZNTC/9hhGqczROjMJREA==} + engines: {node: ^22.22.0 || >=24.13.1} hasBin: true peerDependencies: - '@angular/compiler': 21.2.0-rc.0 - '@angular/compiler-cli': 21.2.0-rc.0 + '@angular/compiler': 22.0.0-next.0 + '@angular/compiler-cli': 22.0.0-next.0 - '@angular/material@21.2.0-rc.0': - resolution: {integrity: sha512-A+u984wpMKmJsJ17q1aTHC5VScyz/Lkp3yFI2Wt05vMrXU+Dn0JZHT/34AjmPbO3sqvIqMRG0Y88kWfJflcJaw==} + '@angular/material@21.3.0-next.0': + resolution: {integrity: sha512-rUR6LNR5pe0xOv3llqaXA3x08w/CXCihFRvmxFotvZ12lxm6bNw9sYGz60V6fVYYOYKI96G4Uylz0PlZdiHAYQ==} peerDependencies: - '@angular/cdk': 21.2.0-rc.0 + '@angular/cdk': 21.3.0-next.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 rxjs: ^6.5.3 || ^7.4.0 - '@angular/ng-dev@https://codeload.github.com/angular/dev-infra-private-ng-dev-builds/tar.gz/363cd055209d441778715bb625b92b48323bb38e': - resolution: {tarball: https://codeload.github.com/angular/dev-infra-private-ng-dev-builds/tar.gz/363cd055209d441778715bb625b92b48323bb38e} - version: 0.0.0-153cb4797250a059dddcf0469b0b13cea116b965 + '@angular/ng-dev@https://codeload.github.com/angular/dev-infra-private-ng-dev-builds/tar.gz/610c7c10ab750bfe5688581d6d5ec11114048f35': + resolution: {tarball: https://codeload.github.com/angular/dev-infra-private-ng-dev-builds/tar.gz/610c7c10ab750bfe5688581d6d5ec11114048f35} + version: 0.0.0-e4dcda13e469f50a6bd92667e2ded8b98173bf2c hasBin: true - '@angular/platform-browser@21.2.0-rc.0': - resolution: {integrity: sha512-FCNRhzkf35l6B18gzaT6GDdTJ3v4AiLOSXc5RdiQ2PMn2dLOkm70SH0caXQGzvtXAzHrHlR+Evj/ZqaFYvjcYg==} - engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0} + '@angular/platform-browser@22.0.0-next.0': + resolution: {integrity: sha512-erbW9VyQMqrW3PfX6lKpAttbxJsc7xWNuO7h449B6PXsNNkyqURC8haJANDWbDx8tTUGDqxEAiAQC7ANtgT6ZA==} + engines: {node: ^22.22.0 || >=24.13.1} peerDependencies: - '@angular/animations': 21.2.0-rc.0 - '@angular/common': 21.2.0-rc.0 - '@angular/core': 21.2.0-rc.0 + '@angular/animations': 22.0.0-next.0 + '@angular/common': 22.0.0-next.0 + '@angular/core': 22.0.0-next.0 peerDependenciesMeta: '@angular/animations': optional: true - '@angular/platform-server@21.2.0-rc.0': - resolution: {integrity: sha512-Sx4PQVgIooDK8644MMtbN6YPjOb35bfXUImNK9m3saMoADqa8kZxPlM1Vg9ZKLoz4p75FJyPXxlh9sh6WNNTXw==} - engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0} + '@angular/platform-server@22.0.0-next.0': + resolution: {integrity: sha512-i3yYSZ2vrx3XpHEfJS0n18fwAYMig1gPMo8+6YoB5Ywf+R7ffq8kygPxutuI0bVDAbC4ChsVgBdXRrltTiE6fg==} + engines: {node: ^22.22.0 || >=24.13.1} peerDependencies: - '@angular/common': 21.2.0-rc.0 - '@angular/compiler': 21.2.0-rc.0 - '@angular/core': 21.2.0-rc.0 - '@angular/platform-browser': 21.2.0-rc.0 + '@angular/common': 22.0.0-next.0 + '@angular/compiler': 22.0.0-next.0 + '@angular/core': 22.0.0-next.0 + '@angular/platform-browser': 22.0.0-next.0 rxjs: ^6.5.3 || ^7.4.0 - '@angular/router@21.2.0-rc.0': - resolution: {integrity: sha512-KZmZCdm4H+w3UC1vorQ/Nj4FEHY4sgRkwp+zf4E4WFV+sflyFzqFxzVIKGJ1xTzjaDebCRmipJnc3DZ09fv1fg==} - engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0} + '@angular/router@22.0.0-next.0': + resolution: {integrity: sha512-LhFmsy+pjdyItBtRoyUni/sF67bXmQkYS3FqcOqpDKDpPKu0gKEisUt/txAp5I2npf5ZX6KTbS0OUkXW/REb8A==} + engines: {node: ^22.22.0 || >=24.13.1} 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': 22.0.0-next.0 + '@angular/core': 22.0.0-next.0 + '@angular/platform-browser': 22.0.0-next.0 rxjs: ^6.5.3 || ^7.4.0 - '@angular/service-worker@21.2.0-rc.0': - resolution: {integrity: sha512-DmoqwSN+ShgSr4Lekc1KS0Sne5Aa82RNLDn+7JYCZ0rF5NdUpalf8semU5i6ML9a+5he3127IbywugchKlK1eQ==} - engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0} + '@angular/service-worker@22.0.0-next.0': + resolution: {integrity: sha512-oJ5kXL0Q5krgStHvo6/QsxmRdOlOuoHu4xecD1CpYw93vi/T9ryWAr1w92BgczJsdf5KyChZlFES7g9iEZOD6A==} + engines: {node: ^22.22.0 || >=24.13.1} hasBin: true peerDependencies: - '@angular/core': 21.2.0-rc.0 + '@angular/core': 22.0.0-next.0 rxjs: ^6.5.3 || ^7.4.0 '@asamuzakjp/css-color@5.0.1': @@ -1574,12 +1574,12 @@ packages: resolution: {integrity: sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==} engines: {node: '>=0.1.90'} - '@conventional-changelog/git-client@2.6.0': - resolution: {integrity: sha512-T+uPDciKf0/ioNNDpMGc8FDsehJClZP0yR3Q5MN6wE/Y/1QZ7F+80OgznnTCOlMEG4AV0LvH2UJi3C/nBnaBUg==} + '@conventional-changelog/git-client@1.0.1': + resolution: {integrity: sha512-PJEqBwAleffCMETaVm/fUgHldzBE35JFk3/9LL6NUA5EXa3qednu+UT6M7E5iBu3zIQZCULYIiZ90fBYHt6xUw==} engines: {node: '>=18'} peerDependencies: conventional-commits-filter: ^5.0.0 - conventional-commits-parser: ^6.3.0 + conventional-commits-parser: ^6.0.0 peerDependenciesMeta: conventional-commits-filter: optional: true @@ -3291,10 +3291,6 @@ packages: resolution: {integrity: sha512-mNe0Iigql08YupSOGv197YdHpPPr+EzDZmfCgMc7RPNaZTw5aLN01nBl6CHJOh3BGtnMIj83EeN4butBchc8Ag==} engines: {node: ^20.17.0 || >=22.9.0} - '@simple-libs/child-process-utils@1.0.2': - resolution: {integrity: sha512-/4R8QKnd/8agJynkNdJmNw2MBxuFTRcNFnE5Sg/G+jkSsV8/UBgULMzhizWWW42p8L5H7flImV2ATi79Ove2Tw==} - engines: {node: '>=18'} - '@simple-libs/stream-utils@1.2.0': resolution: {integrity: sha512-KxXvfapcixpz6rVEB6HPjOUZT22yN6v0vI0urQSk1L8MlEWPDFCZkhw2xmkyoTGYeFw7tWTZd7e3lVzRZRN/EA==} engines: {node: '>=18'} @@ -3420,9 +3416,6 @@ packages: '@types/folder-hash@4.0.4': resolution: {integrity: sha512-c+PwHm51Dw3fXM8SDK+93PO3oXdk4XNouCCvV67lj4aijRkZz5g67myk+9wqWWnyv3go6q96hT6ywcd3XtoZiQ==} - '@types/git-raw-commits@5.0.1': - resolution: {integrity: sha512-sd4kgxJbuZF0RDy6cX7KlKSGiwqB1mqn8nriUbxt5e1F+MO/N4hJlhaYn0Omw4g2biClFpT5Mre07x7OkGt8tg==} - '@types/graceful-fs@4.1.9': resolution: {integrity: sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==} @@ -5322,11 +5315,6 @@ packages: getpass@0.1.7: resolution: {integrity: sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==} - git-raw-commits@5.0.1: - resolution: {integrity: sha512-Y+csSm2GD/PCSh6Isd/WiMjNAydu0VBiG9J7EdQsNA5P9uXvLayqjmTsNlK5Gs9IhblFZqOU0yid5Il5JPoLiQ==} - engines: {node: '>=18'} - hasBin: true - glob-parent@5.1.2: resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} engines: {node: '>= 6'} @@ -8470,29 +8458,29 @@ snapshots: '@jridgewell/gen-mapping': 0.3.13 '@jridgewell/trace-mapping': 0.3.31 - '@angular/animations@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1))': + '@angular/animations@22.0.0-next.0(@angular/core@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(rxjs@7.8.2)(zone.js@0.16.1))': dependencies: - '@angular/core': 21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1) + '@angular/core': 22.0.0-next.0(@angular/compiler@22.0.0-next.0)(rxjs@7.8.2)(zone.js@0.16.1) tslib: 2.8.1 - '@angular/cdk@21.2.0-rc.0(@angular/common@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@21.2.0-rc.0(@angular/animations@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1)))(rxjs@7.8.2)': + '@angular/cdk@21.3.0-next.0(@angular/common@22.0.0-next.0(@angular/core@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@22.0.0-next.0(@angular/animations@22.0.0-next.0(@angular/core@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@22.0.0-next.0(@angular/core@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(rxjs@7.8.2)(zone.js@0.16.1)))(rxjs@7.8.2)': dependencies: - '@angular/common': 21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2) - '@angular/core': 21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1) - '@angular/platform-browser': 21.2.0-rc.0(@angular/animations@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1)) + '@angular/common': 22.0.0-next.0(@angular/core@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2) + '@angular/core': 22.0.0-next.0(@angular/compiler@22.0.0-next.0)(rxjs@7.8.2)(zone.js@0.16.1) + '@angular/platform-browser': 22.0.0-next.0(@angular/animations@22.0.0-next.0(@angular/core@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@22.0.0-next.0(@angular/core@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(rxjs@7.8.2)(zone.js@0.16.1)) parse5: 8.0.0 rxjs: 7.8.2 tslib: 2.8.1 - '@angular/common@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2)': + '@angular/common@22.0.0-next.0(@angular/core@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2)': dependencies: - '@angular/core': 21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1) + '@angular/core': 22.0.0-next.0(@angular/compiler@22.0.0-next.0)(rxjs@7.8.2)(zone.js@0.16.1) rxjs: 7.8.2 tslib: 2.8.1 - '@angular/compiler-cli@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(typescript@6.0.0-beta)': + '@angular/compiler-cli@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(typescript@6.0.0-beta)': dependencies: - '@angular/compiler': 21.2.0-rc.0 + '@angular/compiler': 22.0.0-next.0 '@babel/core': 7.29.0 '@jridgewell/sourcemap-codec': 1.5.5 chokidar: 5.0.0 @@ -8506,31 +8494,31 @@ snapshots: transitivePeerDependencies: - supports-color - '@angular/compiler@21.2.0-rc.0': + '@angular/compiler@22.0.0-next.0': dependencies: tslib: 2.8.1 - '@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1)': + '@angular/core@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(rxjs@7.8.2)(zone.js@0.16.1)': dependencies: rxjs: 7.8.2 tslib: 2.8.1 optionalDependencies: - '@angular/compiler': 21.2.0-rc.0 + '@angular/compiler': 22.0.0-next.0 zone.js: 0.16.1 - '@angular/forms@21.2.0-rc.0(@angular/common@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@21.2.0-rc.0(@angular/animations@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1)))(rxjs@7.8.2)': + '@angular/forms@22.0.0-next.0(@angular/common@22.0.0-next.0(@angular/core@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@22.0.0-next.0(@angular/animations@22.0.0-next.0(@angular/core@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@22.0.0-next.0(@angular/core@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(rxjs@7.8.2)(zone.js@0.16.1)))(rxjs@7.8.2)': dependencies: - '@angular/common': 21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2) - '@angular/core': 21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1) - '@angular/platform-browser': 21.2.0-rc.0(@angular/animations@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1)) + '@angular/common': 22.0.0-next.0(@angular/core@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2) + '@angular/core': 22.0.0-next.0(@angular/compiler@22.0.0-next.0)(rxjs@7.8.2)(zone.js@0.16.1) + '@angular/platform-browser': 22.0.0-next.0(@angular/animations@22.0.0-next.0(@angular/core@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@22.0.0-next.0(@angular/core@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(rxjs@7.8.2)(zone.js@0.16.1)) '@standard-schema/spec': 1.1.0 rxjs: 7.8.2 tslib: 2.8.1 - '@angular/localize@21.2.0-rc.0(@angular/compiler-cli@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(typescript@6.0.0-beta))(@angular/compiler@21.2.0-rc.0)': + '@angular/localize@22.0.0-next.0(@angular/compiler-cli@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(typescript@6.0.0-beta))(@angular/compiler@22.0.0-next.0)': dependencies: - '@angular/compiler': 21.2.0-rc.0 - '@angular/compiler-cli': 21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(typescript@6.0.0-beta) + '@angular/compiler': 22.0.0-next.0 + '@angular/compiler-cli': 22.0.0-next.0(@angular/compiler@22.0.0-next.0)(typescript@6.0.0-beta) '@babel/core': 7.29.0 '@types/babel__core': 7.20.5 tinyglobby: 0.2.15 @@ -8538,19 +8526,20 @@ snapshots: transitivePeerDependencies: - supports-color - '@angular/material@21.2.0-rc.0(b10e235d889ab235dc2911d6ec167f08)': + '@angular/material@21.3.0-next.0(3b5e22ded8635c9a08f958235c8786ff)': dependencies: - '@angular/cdk': 21.2.0-rc.0(@angular/common@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@21.2.0-rc.0(@angular/animations@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1)))(rxjs@7.8.2) - '@angular/common': 21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2) - '@angular/core': 21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1) - '@angular/forms': 21.2.0-rc.0(@angular/common@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@21.2.0-rc.0(@angular/animations@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1)))(rxjs@7.8.2) - '@angular/platform-browser': 21.2.0-rc.0(@angular/animations@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1)) + '@angular/cdk': 21.3.0-next.0(@angular/common@22.0.0-next.0(@angular/core@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@22.0.0-next.0(@angular/animations@22.0.0-next.0(@angular/core@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@22.0.0-next.0(@angular/core@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(rxjs@7.8.2)(zone.js@0.16.1)))(rxjs@7.8.2) + '@angular/common': 22.0.0-next.0(@angular/core@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2) + '@angular/core': 22.0.0-next.0(@angular/compiler@22.0.0-next.0)(rxjs@7.8.2)(zone.js@0.16.1) + '@angular/forms': 22.0.0-next.0(@angular/common@22.0.0-next.0(@angular/core@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@22.0.0-next.0(@angular/animations@22.0.0-next.0(@angular/core@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@22.0.0-next.0(@angular/core@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(rxjs@7.8.2)(zone.js@0.16.1)))(rxjs@7.8.2) + '@angular/platform-browser': 22.0.0-next.0(@angular/animations@22.0.0-next.0(@angular/core@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@22.0.0-next.0(@angular/core@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(rxjs@7.8.2)(zone.js@0.16.1)) rxjs: 7.8.2 tslib: 2.8.1 - '@angular/ng-dev@https://codeload.github.com/angular/dev-infra-private-ng-dev-builds/tar.gz/363cd055209d441778715bb625b92b48323bb38e(@modelcontextprotocol/sdk@1.27.1(zod@4.3.6))': + '@angular/ng-dev@https://codeload.github.com/angular/dev-infra-private-ng-dev-builds/tar.gz/610c7c10ab750bfe5688581d6d5ec11114048f35(@modelcontextprotocol/sdk@1.27.1(zod@4.3.6))': dependencies: '@actions/core': 3.0.0 + '@conventional-changelog/git-client': 1.0.1(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.3.0) '@google-cloud/spanner': 8.0.0(supports-color@10.2.2) '@google/genai': 1.43.0(@modelcontextprotocol/sdk@1.27.1(zod@4.3.6))(bufferutil@4.1.0)(supports-color@10.2.2)(utf-8-validate@6.0.6) '@inquirer/prompts': 8.3.0(@types/node@24.11.0) @@ -8570,7 +8559,6 @@ snapshots: '@types/ejs': 3.1.5 '@types/events': 3.0.3 '@types/folder-hash': 4.0.4 - '@types/git-raw-commits': 5.0.1 '@types/jasmine': 6.0.0 '@types/node': 24.11.0 '@types/semver': 7.7.1 @@ -8587,7 +8575,6 @@ snapshots: fast-glob: 3.3.3 firebase: 12.10.0 folder-hash: 4.1.1(supports-color@10.2.2) - git-raw-commits: 5.0.1(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.3.0) jasmine: 6.1.0 jasmine-core: 6.1.0 jasmine-reporters: 2.5.2 @@ -8609,35 +8596,35 @@ snapshots: - '@modelcontextprotocol/sdk' - '@react-native-async-storage/async-storage' - '@angular/platform-browser@21.2.0-rc.0(@angular/animations@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1))': + '@angular/platform-browser@22.0.0-next.0(@angular/animations@22.0.0-next.0(@angular/core@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@22.0.0-next.0(@angular/core@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(rxjs@7.8.2)(zone.js@0.16.1))': dependencies: - '@angular/common': 21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2) - '@angular/core': 21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1) + '@angular/common': 22.0.0-next.0(@angular/core@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2) + '@angular/core': 22.0.0-next.0(@angular/compiler@22.0.0-next.0)(rxjs@7.8.2)(zone.js@0.16.1) tslib: 2.8.1 optionalDependencies: - '@angular/animations': 21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1)) + '@angular/animations': 22.0.0-next.0(@angular/core@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(rxjs@7.8.2)(zone.js@0.16.1)) - '@angular/platform-server@21.2.0-rc.0(@angular/common@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/compiler@21.2.0-rc.0)(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@21.2.0-rc.0(@angular/animations@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1)))(rxjs@7.8.2)': + '@angular/platform-server@22.0.0-next.0(@angular/common@22.0.0-next.0(@angular/core@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/compiler@22.0.0-next.0)(@angular/core@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@22.0.0-next.0(@angular/animations@22.0.0-next.0(@angular/core@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@22.0.0-next.0(@angular/core@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(rxjs@7.8.2)(zone.js@0.16.1)))(rxjs@7.8.2)': dependencies: - '@angular/common': 21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2) - '@angular/compiler': 21.2.0-rc.0 - '@angular/core': 21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1) - '@angular/platform-browser': 21.2.0-rc.0(@angular/animations@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1)) + '@angular/common': 22.0.0-next.0(@angular/core@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2) + '@angular/compiler': 22.0.0-next.0 + '@angular/core': 22.0.0-next.0(@angular/compiler@22.0.0-next.0)(rxjs@7.8.2)(zone.js@0.16.1) + '@angular/platform-browser': 22.0.0-next.0(@angular/animations@22.0.0-next.0(@angular/core@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@22.0.0-next.0(@angular/core@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(rxjs@7.8.2)(zone.js@0.16.1)) rxjs: 7.8.2 tslib: 2.8.1 xhr2: 0.2.1 - '@angular/router@21.2.0-rc.0(@angular/common@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@21.2.0-rc.0(@angular/animations@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1)))(rxjs@7.8.2)': + '@angular/router@22.0.0-next.0(@angular/common@22.0.0-next.0(@angular/core@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@22.0.0-next.0(@angular/animations@22.0.0-next.0(@angular/core@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@22.0.0-next.0(@angular/core@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(rxjs@7.8.2)(zone.js@0.16.1)))(rxjs@7.8.2)': dependencies: - '@angular/common': 21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2) - '@angular/core': 21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1) - '@angular/platform-browser': 21.2.0-rc.0(@angular/animations@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1)) + '@angular/common': 22.0.0-next.0(@angular/core@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2) + '@angular/core': 22.0.0-next.0(@angular/compiler@22.0.0-next.0)(rxjs@7.8.2)(zone.js@0.16.1) + '@angular/platform-browser': 22.0.0-next.0(@angular/animations@22.0.0-next.0(@angular/core@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@22.0.0-next.0(@angular/core@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(rxjs@7.8.2)(zone.js@0.16.1)) rxjs: 7.8.2 tslib: 2.8.1 - '@angular/service-worker@21.2.0-rc.0(@angular/core@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2)': + '@angular/service-worker@22.0.0-next.0(@angular/core@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2)': dependencies: - '@angular/core': 21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.1) + '@angular/core': 22.0.0-next.0(@angular/compiler@22.0.0-next.0)(rxjs@7.8.2)(zone.js@0.16.1) rxjs: 7.8.2 tslib: 2.8.1 @@ -9341,10 +9328,9 @@ snapshots: '@colors/colors@1.5.0': {} - '@conventional-changelog/git-client@2.6.0(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.3.0)': + '@conventional-changelog/git-client@1.0.1(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.3.0)': dependencies: - '@simple-libs/child-process-utils': 1.0.2 - '@simple-libs/stream-utils': 1.2.0 + '@types/semver': 7.7.1 semver: 7.7.4 optionalDependencies: conventional-commits-filter: 5.0.0 @@ -11050,10 +11036,6 @@ snapshots: '@sigstore/core': 3.1.0 '@sigstore/protobuf-specs': 0.5.0 - '@simple-libs/child-process-utils@1.0.2': - dependencies: - '@simple-libs/stream-utils': 1.2.0 - '@simple-libs/stream-utils@1.2.0': {} '@sindresorhus/is@4.6.0': {} @@ -11210,10 +11192,6 @@ snapshots: '@types/folder-hash@4.0.4': {} - '@types/git-raw-commits@5.0.1': - dependencies: - '@types/node': 22.19.13 - '@types/graceful-fs@4.1.9': dependencies: '@types/node': 22.19.13 @@ -13601,14 +13579,6 @@ snapshots: dependencies: assert-plus: 1.0.0 - git-raw-commits@5.0.1(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.3.0): - dependencies: - '@conventional-changelog/git-client': 2.6.0(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.3.0) - meow: 13.2.0 - transitivePeerDependencies: - - conventional-commits-filter - - conventional-commits-parser - glob-parent@5.1.2: dependencies: is-glob: 4.0.3 @@ -14812,10 +14782,10 @@ snapshots: netmask@2.0.2: {} - ng-packagr@22.0.0-next.0(@angular/compiler-cli@21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(typescript@6.0.0-beta))(tslib@2.8.1)(typescript@6.0.0-beta): + ng-packagr@22.0.0-next.0(@angular/compiler-cli@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(typescript@6.0.0-beta))(tslib@2.8.1)(typescript@6.0.0-beta): dependencies: '@ampproject/remapping': 2.3.0 - '@angular/compiler-cli': 21.2.0-rc.0(@angular/compiler@21.2.0-rc.0)(typescript@6.0.0-beta) + '@angular/compiler-cli': 22.0.0-next.0(@angular/compiler@22.0.0-next.0)(typescript@6.0.0-beta) '@rollup/plugin-json': 6.1.0(rollup@4.59.0) '@rollup/wasm-node': 4.59.0 ajv: 8.18.0 diff --git a/tests/e2e/assets/ssr-project-webpack/package.json b/tests/e2e/assets/ssr-project-webpack/package.json index 9d6b1f7338e8..06d680c58fa0 100644 --- a/tests/e2e/assets/ssr-project-webpack/package.json +++ b/tests/e2e/assets/ssr-project-webpack/package.json @@ -14,34 +14,27 @@ }, "private": true, "dependencies": { - "@angular/animations": "^21.0.0-next.0", - "@angular/common": "^21.0.0-next.0", - "@angular/compiler": "^21.0.0-next.0", - "@angular/core": "^21.0.0-next.0", - "@angular/forms": "^21.0.0-next.0", - "@angular/platform-browser": "^21.0.0-next.0", - "@angular/platform-server": "^21.0.0-next.0", - "@angular/router": "^21.0.0-next.0", - "@angular/ssr": "^21.0.0-next.0", + "@angular/animations": "^22.0.0-next.0", + "@angular/common": "^22.0.0-next.0", + "@angular/compiler": "^22.0.0-next.0", + "@angular/core": "^22.0.0-next.0", + "@angular/forms": "^22.0.0-next.0", + "@angular/platform-browser": "^22.0.0-next.0", + "@angular/platform-server": "^22.0.0-next.0", + "@angular/router": "^22.0.0-next.0", + "@angular/ssr": "^22.0.0-next.0", "express": "^4.18.2", "rxjs": "~7.8.0", - "tslib": "^2.3.0", - "zone.js": "~0.15.0" + "tslib": "^2.5.0", + "zone.js": "~0.16.0" }, "devDependencies": { - "@angular-devkit/build-angular": "^21.0.0-next.0", - "@angular/cli": "^21.0.0-next.0", - "@angular/compiler-cli": "^21.0.0-next.0", - "@types/express": "^4.17.17", + "@angular-devkit/build-angular": "^22.0.0-next.0", + "@angular/cli": "^22.0.0-next.0", + "@angular/compiler-cli": "^22.0.0-next.0", + "@types/express": "^4.17.24", "@types/jasmine": "~4.3.0", - "@types/mime": "^3.0.0", "@types/node": "^20.17.19", - "jasmine-core": "~4.6.0", - "karma": "~6.4.0", - "karma-chrome-launcher": "~3.2.0", - "karma-coverage": "~2.2.0", - "karma-jasmine": "~5.1.0", - "karma-jasmine-html-reporter": "~2.1.0", "typescript": "~5.9.2" } } diff --git a/tests/e2e/ng-snapshot/package.json b/tests/e2e/ng-snapshot/package.json index 02f2f21b8ae3..d5b6a1741a24 100644 --- a/tests/e2e/ng-snapshot/package.json +++ b/tests/e2e/ng-snapshot/package.json @@ -2,21 +2,21 @@ "description": "snapshot versions of Angular for e2e testing", "private": true, "dependencies": { - "@angular/animations": "github:angular/animations-builds#4a2fb93a7d09582c3ab7c28d06d89bbac48df6dc", - "@angular/cdk": "github:angular/cdk-builds#9845450e6cc30dda5a757df2d16c987614f263df", - "@angular/common": "github:angular/common-builds#a7169b150f5255c578171d5a561f12efe3c2c311", - "@angular/compiler": "github:angular/compiler-builds#f594b10336ac21475e347a2a623cab190aaeea4c", - "@angular/compiler-cli": "github:angular/compiler-cli-builds#53663df8656b286c1cd92b8df04454d5896da00c", - "@angular/core": "github:angular/core-builds#1f2a5bab656bdc79b2cbbdfd05755d6e06bae251", - "@angular/forms": "github:angular/forms-builds#2d743a17502789c831d195fb9b209e3e80f5eba0", - "@angular/language-service": "github:angular/language-service-builds#38c0018c0e4ee4d47cb8f049c35db94b3a15ae61", - "@angular/localize": "github:angular/localize-builds#f0a8f2b302a55fb23a1573ecf1810b773efc78fd", - "@angular/material": "github:angular/material-builds#499ff2f33fe168011ab88c12877f708bb2849922", - "@angular/material-moment-adapter": "github:angular/material-moment-adapter-builds#c43748dcaf0091560fbd76db59d4f3bd2fe166ab", - "@angular/platform-browser": "github:angular/platform-browser-builds#f9ced9dd87c6531f6092fc1fe7bcabfac684c0c5", - "@angular/platform-browser-dynamic": "github:angular/platform-browser-dynamic-builds#a8966d88a08a7fe49b901391d975fa4ac14553fb", - "@angular/platform-server": "github:angular/platform-server-builds#0bf340200767ef7d6958a65ee99d24f02947ebf3", - "@angular/router": "github:angular/router-builds#e3f594159f5df0fd73e994698744d855e905a723", - "@angular/service-worker": "github:angular/service-worker-builds#fe1ffe79e665c16a38b1186354b1ef793bfa0214" + "@angular/animations": "github:angular/animations-builds#6deb7836116872ec41c33851cf12be152fc4164c", + "@angular/cdk": "github:angular/cdk-builds#0d40ef4cfe8c15d6a996389f4528b1eb1b933f77", + "@angular/common": "github:angular/common-builds#5a4bc97e0af211080fadb8a32680227ac0467c4f", + "@angular/compiler": "github:angular/compiler-builds#8fd4791a982d28e5822cbc3a609a4adb0105b6d5", + "@angular/compiler-cli": "github:angular/compiler-cli-builds#06b0ed420505ecd5d9bf1de3ec39be772e9c1a1c", + "@angular/core": "github:angular/core-builds#ddb58f19eba430e7977608d632ddc50a6eac9abe", + "@angular/forms": "github:angular/forms-builds#cb11b70e58365a5f490fcdb153417d1cd15ef706", + "@angular/language-service": "github:angular/language-service-builds#e03bcbccc148069234096f18f30506291c86aa97", + "@angular/localize": "github:angular/localize-builds#b14e25d5763e8b2c01968000980ec968f6b1fd6e", + "@angular/material": "github:angular/material-builds#26f37cd9237322c71232b0fbcf63f1359e7af56a", + "@angular/material-moment-adapter": "github:angular/material-moment-adapter-builds#8143927f746aee7521769a12c17f2f884066bc13", + "@angular/platform-browser": "github:angular/platform-browser-builds#78bbfc55af2955bf6ecaf1aeb0281afe0bfd0ef4", + "@angular/platform-browser-dynamic": "github:angular/platform-browser-dynamic-builds#d14c110bb81d14b3379d8835831bbaabc6709058", + "@angular/platform-server": "github:angular/platform-server-builds#b296a99ed401f3af812f60e05e6e5766efaed354", + "@angular/router": "github:angular/router-builds#f614cde22d617a05cd6f0864dfacf95ba3b9b5e3", + "@angular/service-worker": "github:angular/service-worker-builds#7a74790699461d33ace5c675bfde919fc46ae744" } } From 93b1debc57ff7298be616469cdefe94f215c43be Mon Sep 17 00:00:00 2001 From: Alan Agius <17563226+alan-agius4@users.noreply.github.com> Date: Thu, 5 Mar 2026 19:28:05 +0000 Subject: [PATCH 105/226] release: cut the v22.0.0-next.0 release --- CHANGELOG.md | 45 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 267399fde0ba..7e133067d5d5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,48 @@ +<a name="22.0.0-next.0"></a> + +# 22.0.0-next.0 (2026-03-05) + +## Breaking Changes + +### + +- Node.js v20 is no longer supported. The minimum supported Node.js versions are now v22.22.0 and v24.13.1. +- The `@angular-devkit/architect-cli` package is no longer available. The `architect` CLI tool has been moved to the `@angular-devkit/architect` package. +- The experimental `@angular-devkit/build-angular:jest` and `@angular-devkit/build-angular:web-test-runner` builders have been removed. + +### @angular/ssr + +- The server no longer falls back to Client-Side Rendering (CSR) when a request fails host validation. Requests with unrecognized 'Host' headers will now return a 400 Bad Request status code. Users must ensure all valid hosts are correctly configured in the 'allowedHosts' option. + +### @angular/cli + +| Commit | Type | Description | +| --------------------------------------------------------------------------------------------------- | ---- | --------------------------------------------------- | +| [a5c7c0b5f](https://github.com/angular/angular-cli/commit/a5c7c0b5fda4ae0c00351ba34e5f39dab2c6baee) | fix | reflect new minimum supported Node version in ng.js | + +### + +| Commit | Type | Description | +| --------------------------------------------------------------------------------------------------- | -------- | ----------------------------------------------------- | +| [d0e9e8163](https://github.com/angular/angular-cli/commit/d0e9e81639be33c453f1ef66c7c1c8ea4fe543c2) | build | update minimum supported Node.js versions | +| [1f21e89d9](https://github.com/angular/angular-cli/commit/1f21e89d99c191642627df6842402644a1bf26ee) | refactor | remove `@angular-devkit/architect-cli` package | +| [b4885b851](https://github.com/angular/angular-cli/commit/b4885b851226709ae4146070122806e14a3d5eb9) | refactor | remove experimental Jest and Web Test Runner builders | + +### @angular/build + +| Commit | Type | Description | +| --------------------------------------------------------------------------------------------------- | ---- | ------------------------------------------------------------ | +| [414320d02](https://github.com/angular/angular-cli/commit/414320d02a090b7b36720051569cba7563bf9ac6) | feat | support runtime Zone.js detection in Vitest unit test runner | +| [f190263a4](https://github.com/angular/angular-cli/commit/f190263a4010a4f7b9ae85806b5d70a16b57b9fa) | fix | allow any `CHROME_BIN` for vitest playwright provider | + +### @angular/ssr + +| Commit | Type | Description | +| --------------------------------------------------------------------------------------------------- | -------- | ------------------------------------- | +| [27cd35561](https://github.com/angular/angular-cli/commit/27cd355619aad140dfc221c6bd161f4a981e0f3b) | refactor | remove CSR fallback for invalid hosts | + +<!-- CHANGELOG SPLIT MARKER --> + <a name="21.2.1"></a> # 21.2.1 (2026-03-05) From fe720cab64bbc8bcc2db583188e32ad938e63a23 Mon Sep 17 00:00:00 2001 From: hawkgs <hawk.dvp@gmail.com> Date: Thu, 5 Mar 2026 17:04:17 +0200 Subject: [PATCH 106/226] feat(@angular/build): add process.env.PORT support to the dev server Make possible to set the dev server port via `process.env.PORT`. BREAKING CHANGE: The `@angular/build:dev-server (ng serve)` now assigns the highest priority to the `PORT` environment variable. This value will override any port configurations specified in `angular.json` or via the `--port` command-line flag. This includes the default port 4200. Resolves #32236 --- .../build/src/builders/dev-server/options.ts | 14 +++++++++-- .../dev-server/tests/options/port_spec.ts | 25 ++++++++++++++++--- 2 files changed, 34 insertions(+), 5 deletions(-) diff --git a/packages/angular/build/src/builders/dev-server/options.ts b/packages/angular/build/src/builders/dev-server/options.ts index b6da278f2936..5473da832449 100644 --- a/packages/angular/build/src/builders/dev-server/options.ts +++ b/packages/angular/build/src/builders/dev-server/options.ts @@ -86,10 +86,20 @@ export async function normalizeOptions( } } + let port = options.port ?? 4200; + // Overwrite port, if process.env.PORT is available. + if (process.env.PORT) { + const envPort = Number(process.env.PORT); + + if (!isNaN(envPort)) { + port = envPort; + logger.info(`Environment variable "PORT" detected. Using port ${envPort}.`); + } + } + // Initial options to keep const { host, - port, poll, open, verbose, @@ -111,7 +121,7 @@ export async function normalizeOptions( return { buildTarget, host: host ?? 'localhost', - port: port ?? 4200, + port, poll, open, verbose, diff --git a/packages/angular/build/src/builders/dev-server/tests/options/port_spec.ts b/packages/angular/build/src/builders/dev-server/tests/options/port_spec.ts index 8869dd20dcbb..d3e860023bde 100644 --- a/packages/angular/build/src/builders/dev-server/tests/options/port_spec.ts +++ b/packages/angular/build/src/builders/dev-server/tests/options/port_spec.ts @@ -42,7 +42,7 @@ describeServeBuilder(executeDevServer, DEV_SERVER_BUILDER_INFO, (harness, setupT port: undefined, }); - const { result, response, logs } = await executeOnceAndFetch(harness, '/'); + const { result, response } = await executeOnceAndFetch(harness, '/'); expect(result?.success).toBeTrue(); expect(getResultPort(result)).toBe('4200'); @@ -55,7 +55,7 @@ describeServeBuilder(executeDevServer, DEV_SERVER_BUILDER_INFO, (harness, setupT port: 0, }); - const { result, response, logs } = await executeOnceAndFetch(harness, '/'); + const { result, response } = await executeOnceAndFetch(harness, '/'); expect(result?.success).toBeTrue(); const port = getResultPort(result); @@ -73,11 +73,30 @@ describeServeBuilder(executeDevServer, DEV_SERVER_BUILDER_INFO, (harness, setupT port: 8000, }); - const { result, response, logs } = await executeOnceAndFetch(harness, '/'); + const { result, response } = await executeOnceAndFetch(harness, '/'); expect(result?.success).toBeTrue(); expect(getResultPort(result)).toBe('8000'); expect(await response?.text()).toContain('<title>'); }); + + it('should be overwritten by process.env.PORT if it exists', async () => { + try { + harness.useTarget('serve', { + ...BASE_OPTIONS, + port: 8000, + }); + + process.env.PORT = '4201'; + + const { result, response } = await executeOnceAndFetch(harness, '/'); + + expect(result?.success).toBeTrue(); + expect(getResultPort(result)).toBe('4201'); + expect(await response?.text()).toContain('<title>'); + } finally { + delete process.env.PORT; + } + }); }); }); From 7b0f71b8e3c224d968f3efc1280e2fd7f01b65b6 Mon Sep 17 00:00:00 2001 From: Angular Robot <angular-robot@google.com> Date: Thu, 5 Mar 2026 06:19:15 +0000 Subject: [PATCH 107/226] build: update all github actions See associated pull request for more information. --- .github/workflows/ci.yml | 6 +++--- .github/workflows/pr.yml | 6 +++--- .github/workflows/scorecard.yml | 2 +- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index d69c25e22489..177d944ba9db 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -117,7 +117,7 @@ jobs: //tests:e2e.esbuild_node24 \ --platforms=tools:windows_x64 - name: Store built Windows E2E tests - uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0 + uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7.0.0 with: name: win-e2e-build-artifacts path: | @@ -141,7 +141,7 @@ jobs: - name: Install node modules run: pnpm install --frozen-lockfile - name: Download built Windows E2E tests - uses: actions/download-artifact@37930b1c2abaa49bbe596cd826c3c89aef350131 # v7.0.0 + uses: actions/download-artifact@70fc10c6e5e1ce46ad2ea6f2b72d43f7d47b13c3 # v8.0.0 with: name: win-e2e-build-artifacts path: dist/bin/tests/ @@ -231,7 +231,7 @@ jobs: ./scripts/saucelabs/wait-for-tunnel.sh pnpm bazel test --config=saucelabs //tests:e2e.saucelabs ./scripts/saucelabs/stop-tunnel.sh - - uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0 + - uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7.0.0 if: ${{ failure() }} with: name: sauce-connect-log diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml index e02522586f40..2932b87511d4 100644 --- a/.github/workflows/pr.yml +++ b/.github/workflows/pr.yml @@ -82,7 +82,7 @@ jobs: - name: Build release targets run: pnpm ng-dev release build - name: Store PR release packages - uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0 + uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7.0.0 with: name: packages path: dist/releases/*.tgz @@ -142,7 +142,7 @@ jobs: //tests:e2e.esbuild_node24 \ --platforms=tools:windows_x64 - name: Store built Windows E2E tests - uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0 + uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7.0.0 with: name: win-e2e-build-artifacts path: | @@ -160,7 +160,7 @@ jobs: - name: Install node modules run: pnpm install --frozen-lockfile - name: Download built Windows E2E tests - uses: actions/download-artifact@37930b1c2abaa49bbe596cd826c3c89aef350131 # v7.0.0 + uses: actions/download-artifact@70fc10c6e5e1ce46ad2ea6f2b72d43f7d47b13c3 # v8.0.0 with: name: win-e2e-build-artifacts path: dist/bin/tests/ diff --git a/.github/workflows/scorecard.yml b/.github/workflows/scorecard.yml index 6e75cf9b2dc3..06ddb2678b04 100644 --- a/.github/workflows/scorecard.yml +++ b/.github/workflows/scorecard.yml @@ -38,7 +38,7 @@ jobs: # Upload the results as artifacts. - name: 'Upload artifact' - uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0 + uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7.0.0 with: name: SARIF file path: results.sarif From d7d06460965a879b664aa8e13485ad8a9a424c34 Mon Sep 17 00:00:00 2001 From: Angular Robot <angular-robot@google.com> Date: Fri, 6 Mar 2026 06:16:32 +0000 Subject: [PATCH 108/226] build: update dependency node to v22.22.1 See associated pull request for more information. --- .nvmrc | 2 +- MODULE.bazel | 16 +- MODULE.bazel.lock | 562 +++++++++++++++++++++++----------------------- 3 files changed, 290 insertions(+), 290 deletions(-) diff --git a/.nvmrc b/.nvmrc index 85e502778f62..32a2d7bd80d1 100644 --- a/.nvmrc +++ b/.nvmrc @@ -1 +1 @@ -22.22.0 +22.22.1 diff --git a/MODULE.bazel b/MODULE.bazel index 9ad428881a32..46fd97d008bb 100644 --- a/MODULE.bazel +++ b/MODULE.bazel @@ -46,15 +46,15 @@ git_override( 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, diff --git a/MODULE.bazel.lock b/MODULE.bazel.lock index 411b7f3dd1d8..3ac5124b40e5 100644 --- a/MODULE.bazel.lock +++ b/MODULE.bazel.lock @@ -1098,7 +1098,7 @@ "@@rules_nodejs+//nodejs:extensions.bzl%node": { "general": { "bzlTransitiveDigest": "4pUxCNc22K4I+6+4Nxu52Hur12tFRfa1JMsN5mdDv60=", - "usagesDigest": "pAwoD5IwHr4MXoiITGxMFEsRrSYmIbBSeOv6pljPAqM=", + "usagesDigest": "eMvpQ/q8jSLOsluFIeASRy0dLdjpM/HqVMVIzPCsVSk=", "recordedFileInputs": {}, "recordedDirentsInputs": {}, "envVariables": {}, @@ -1108,46 +1108,46 @@ "attributes": { "node_download_auth": {}, "node_repositories": { - "22.22.0-darwin_arm64": [ - "node-v22.22.0-darwin-arm64.tar.gz", - "node-v22.22.0-darwin-arm64", - "5ed4db0fcf1eaf84d91ad12462631d73bf4576c1377e192d222e48026a902640" - ], - "22.22.0-darwin_amd64": [ - "node-v22.22.0-darwin-x64.tar.gz", - "node-v22.22.0-darwin-x64", - "5ea50c9d6dea3dfa3abb66b2656f7a4e1c8cef23432b558d45fb538c7b5dedce" - ], - "22.22.0-linux_arm64": [ - "node-v22.22.0-linux-arm64.tar.xz", - "node-v22.22.0-linux-arm64", - "1bf1eb9ee63ffc4e5d324c0b9b62cf4a289f44332dfef9607cea1a0d9596ba6f" - ], - "22.22.0-linux_ppc64le": [ - "node-v22.22.0-linux-ppc64le.tar.xz", - "node-v22.22.0-linux-ppc64le", - "d83b9957431cc18e1fc143a4b99f89cde7b8a18f53ef392231b4336afd058865" - ], - "22.22.0-linux_s390x": [ - "node-v22.22.0-linux-s390x.tar.xz", - "node-v22.22.0-linux-s390x", - "5aa0e520689448c4233e8d73f284e8e0634fdcd32b479735698494be5641f3e4" - ], - "22.22.0-linux_amd64": [ - "node-v22.22.0-linux-x64.tar.xz", - "node-v22.22.0-linux-x64", - "9aa8e9d2298ab68c600bd6fb86a6c13bce11a4eca1ba9b39d79fa021755d7c37" - ], - "22.22.0-windows_amd64": [ - "node-v22.22.0-win-x64.zip", - "node-v22.22.0-win-x64", - "c97fa376d2becdc8863fcd3ca2dd9a83a9f3468ee7ccf7a6d076ec66a645c77a" + "22.22.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_urls": [ "https://nodejs.org/dist/v{version}/{filename}" ], - "node_version": "22.22.0", + "node_version": "22.22.1", "include_headers": false, "platform": "linux_amd64" } @@ -1157,46 +1157,46 @@ "attributes": { "node_download_auth": {}, "node_repositories": { - "22.22.0-darwin_arm64": [ - "node-v22.22.0-darwin-arm64.tar.gz", - "node-v22.22.0-darwin-arm64", - "5ed4db0fcf1eaf84d91ad12462631d73bf4576c1377e192d222e48026a902640" - ], - "22.22.0-darwin_amd64": [ - "node-v22.22.0-darwin-x64.tar.gz", - "node-v22.22.0-darwin-x64", - "5ea50c9d6dea3dfa3abb66b2656f7a4e1c8cef23432b558d45fb538c7b5dedce" - ], - "22.22.0-linux_arm64": [ - "node-v22.22.0-linux-arm64.tar.xz", - "node-v22.22.0-linux-arm64", - "1bf1eb9ee63ffc4e5d324c0b9b62cf4a289f44332dfef9607cea1a0d9596ba6f" - ], - "22.22.0-linux_ppc64le": [ - "node-v22.22.0-linux-ppc64le.tar.xz", - "node-v22.22.0-linux-ppc64le", - "d83b9957431cc18e1fc143a4b99f89cde7b8a18f53ef392231b4336afd058865" - ], - "22.22.0-linux_s390x": [ - "node-v22.22.0-linux-s390x.tar.xz", - "node-v22.22.0-linux-s390x", - "5aa0e520689448c4233e8d73f284e8e0634fdcd32b479735698494be5641f3e4" - ], - "22.22.0-linux_amd64": [ - "node-v22.22.0-linux-x64.tar.xz", - "node-v22.22.0-linux-x64", - "9aa8e9d2298ab68c600bd6fb86a6c13bce11a4eca1ba9b39d79fa021755d7c37" - ], - "22.22.0-windows_amd64": [ - "node-v22.22.0-win-x64.zip", - "node-v22.22.0-win-x64", - "c97fa376d2becdc8863fcd3ca2dd9a83a9f3468ee7ccf7a6d076ec66a645c77a" + "22.22.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_urls": [ "https://nodejs.org/dist/v{version}/{filename}" ], - "node_version": "22.22.0", + "node_version": "22.22.1", "include_headers": false, "platform": "linux_arm64" } @@ -1206,46 +1206,46 @@ "attributes": { "node_download_auth": {}, "node_repositories": { - "22.22.0-darwin_arm64": [ - "node-v22.22.0-darwin-arm64.tar.gz", - "node-v22.22.0-darwin-arm64", - "5ed4db0fcf1eaf84d91ad12462631d73bf4576c1377e192d222e48026a902640" - ], - "22.22.0-darwin_amd64": [ - "node-v22.22.0-darwin-x64.tar.gz", - "node-v22.22.0-darwin-x64", - "5ea50c9d6dea3dfa3abb66b2656f7a4e1c8cef23432b558d45fb538c7b5dedce" - ], - "22.22.0-linux_arm64": [ - "node-v22.22.0-linux-arm64.tar.xz", - "node-v22.22.0-linux-arm64", - "1bf1eb9ee63ffc4e5d324c0b9b62cf4a289f44332dfef9607cea1a0d9596ba6f" - ], - "22.22.0-linux_ppc64le": [ - "node-v22.22.0-linux-ppc64le.tar.xz", - "node-v22.22.0-linux-ppc64le", - "d83b9957431cc18e1fc143a4b99f89cde7b8a18f53ef392231b4336afd058865" - ], - "22.22.0-linux_s390x": [ - "node-v22.22.0-linux-s390x.tar.xz", - "node-v22.22.0-linux-s390x", - "5aa0e520689448c4233e8d73f284e8e0634fdcd32b479735698494be5641f3e4" - ], - "22.22.0-linux_amd64": [ - "node-v22.22.0-linux-x64.tar.xz", - "node-v22.22.0-linux-x64", - "9aa8e9d2298ab68c600bd6fb86a6c13bce11a4eca1ba9b39d79fa021755d7c37" - ], - "22.22.0-windows_amd64": [ - "node-v22.22.0-win-x64.zip", - "node-v22.22.0-win-x64", - "c97fa376d2becdc8863fcd3ca2dd9a83a9f3468ee7ccf7a6d076ec66a645c77a" + "22.22.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_urls": [ "https://nodejs.org/dist/v{version}/{filename}" ], - "node_version": "22.22.0", + "node_version": "22.22.1", "include_headers": false, "platform": "linux_s390x" } @@ -1255,46 +1255,46 @@ "attributes": { "node_download_auth": {}, "node_repositories": { - "22.22.0-darwin_arm64": [ - "node-v22.22.0-darwin-arm64.tar.gz", - "node-v22.22.0-darwin-arm64", - "5ed4db0fcf1eaf84d91ad12462631d73bf4576c1377e192d222e48026a902640" - ], - "22.22.0-darwin_amd64": [ - "node-v22.22.0-darwin-x64.tar.gz", - "node-v22.22.0-darwin-x64", - "5ea50c9d6dea3dfa3abb66b2656f7a4e1c8cef23432b558d45fb538c7b5dedce" - ], - "22.22.0-linux_arm64": [ - "node-v22.22.0-linux-arm64.tar.xz", - "node-v22.22.0-linux-arm64", - "1bf1eb9ee63ffc4e5d324c0b9b62cf4a289f44332dfef9607cea1a0d9596ba6f" - ], - "22.22.0-linux_ppc64le": [ - "node-v22.22.0-linux-ppc64le.tar.xz", - "node-v22.22.0-linux-ppc64le", - "d83b9957431cc18e1fc143a4b99f89cde7b8a18f53ef392231b4336afd058865" - ], - "22.22.0-linux_s390x": [ - "node-v22.22.0-linux-s390x.tar.xz", - "node-v22.22.0-linux-s390x", - "5aa0e520689448c4233e8d73f284e8e0634fdcd32b479735698494be5641f3e4" - ], - "22.22.0-linux_amd64": [ - "node-v22.22.0-linux-x64.tar.xz", - "node-v22.22.0-linux-x64", - "9aa8e9d2298ab68c600bd6fb86a6c13bce11a4eca1ba9b39d79fa021755d7c37" - ], - "22.22.0-windows_amd64": [ - "node-v22.22.0-win-x64.zip", - "node-v22.22.0-win-x64", - "c97fa376d2becdc8863fcd3ca2dd9a83a9f3468ee7ccf7a6d076ec66a645c77a" + "22.22.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_urls": [ "https://nodejs.org/dist/v{version}/{filename}" ], - "node_version": "22.22.0", + "node_version": "22.22.1", "include_headers": false, "platform": "linux_ppc64le" } @@ -1304,46 +1304,46 @@ "attributes": { "node_download_auth": {}, "node_repositories": { - "22.22.0-darwin_arm64": [ - "node-v22.22.0-darwin-arm64.tar.gz", - "node-v22.22.0-darwin-arm64", - "5ed4db0fcf1eaf84d91ad12462631d73bf4576c1377e192d222e48026a902640" - ], - "22.22.0-darwin_amd64": [ - "node-v22.22.0-darwin-x64.tar.gz", - "node-v22.22.0-darwin-x64", - "5ea50c9d6dea3dfa3abb66b2656f7a4e1c8cef23432b558d45fb538c7b5dedce" - ], - "22.22.0-linux_arm64": [ - "node-v22.22.0-linux-arm64.tar.xz", - "node-v22.22.0-linux-arm64", - "1bf1eb9ee63ffc4e5d324c0b9b62cf4a289f44332dfef9607cea1a0d9596ba6f" - ], - "22.22.0-linux_ppc64le": [ - "node-v22.22.0-linux-ppc64le.tar.xz", - "node-v22.22.0-linux-ppc64le", - "d83b9957431cc18e1fc143a4b99f89cde7b8a18f53ef392231b4336afd058865" - ], - "22.22.0-linux_s390x": [ - "node-v22.22.0-linux-s390x.tar.xz", - "node-v22.22.0-linux-s390x", - "5aa0e520689448c4233e8d73f284e8e0634fdcd32b479735698494be5641f3e4" - ], - "22.22.0-linux_amd64": [ - "node-v22.22.0-linux-x64.tar.xz", - "node-v22.22.0-linux-x64", - "9aa8e9d2298ab68c600bd6fb86a6c13bce11a4eca1ba9b39d79fa021755d7c37" - ], - "22.22.0-windows_amd64": [ - "node-v22.22.0-win-x64.zip", - "node-v22.22.0-win-x64", - "c97fa376d2becdc8863fcd3ca2dd9a83a9f3468ee7ccf7a6d076ec66a645c77a" + "22.22.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_urls": [ "https://nodejs.org/dist/v{version}/{filename}" ], - "node_version": "22.22.0", + "node_version": "22.22.1", "include_headers": false, "platform": "darwin_amd64" } @@ -1353,46 +1353,46 @@ "attributes": { "node_download_auth": {}, "node_repositories": { - "22.22.0-darwin_arm64": [ - "node-v22.22.0-darwin-arm64.tar.gz", - "node-v22.22.0-darwin-arm64", - "5ed4db0fcf1eaf84d91ad12462631d73bf4576c1377e192d222e48026a902640" - ], - "22.22.0-darwin_amd64": [ - "node-v22.22.0-darwin-x64.tar.gz", - "node-v22.22.0-darwin-x64", - "5ea50c9d6dea3dfa3abb66b2656f7a4e1c8cef23432b558d45fb538c7b5dedce" - ], - "22.22.0-linux_arm64": [ - "node-v22.22.0-linux-arm64.tar.xz", - "node-v22.22.0-linux-arm64", - "1bf1eb9ee63ffc4e5d324c0b9b62cf4a289f44332dfef9607cea1a0d9596ba6f" - ], - "22.22.0-linux_ppc64le": [ - "node-v22.22.0-linux-ppc64le.tar.xz", - "node-v22.22.0-linux-ppc64le", - "d83b9957431cc18e1fc143a4b99f89cde7b8a18f53ef392231b4336afd058865" - ], - "22.22.0-linux_s390x": [ - "node-v22.22.0-linux-s390x.tar.xz", - "node-v22.22.0-linux-s390x", - "5aa0e520689448c4233e8d73f284e8e0634fdcd32b479735698494be5641f3e4" - ], - "22.22.0-linux_amd64": [ - "node-v22.22.0-linux-x64.tar.xz", - "node-v22.22.0-linux-x64", - "9aa8e9d2298ab68c600bd6fb86a6c13bce11a4eca1ba9b39d79fa021755d7c37" - ], - "22.22.0-windows_amd64": [ - "node-v22.22.0-win-x64.zip", - "node-v22.22.0-win-x64", - "c97fa376d2becdc8863fcd3ca2dd9a83a9f3468ee7ccf7a6d076ec66a645c77a" + "22.22.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_urls": [ "https://nodejs.org/dist/v{version}/{filename}" ], - "node_version": "22.22.0", + "node_version": "22.22.1", "include_headers": false, "platform": "darwin_arm64" } @@ -1402,46 +1402,46 @@ "attributes": { "node_download_auth": {}, "node_repositories": { - "22.22.0-darwin_arm64": [ - "node-v22.22.0-darwin-arm64.tar.gz", - "node-v22.22.0-darwin-arm64", - "5ed4db0fcf1eaf84d91ad12462631d73bf4576c1377e192d222e48026a902640" - ], - "22.22.0-darwin_amd64": [ - "node-v22.22.0-darwin-x64.tar.gz", - "node-v22.22.0-darwin-x64", - "5ea50c9d6dea3dfa3abb66b2656f7a4e1c8cef23432b558d45fb538c7b5dedce" - ], - "22.22.0-linux_arm64": [ - "node-v22.22.0-linux-arm64.tar.xz", - "node-v22.22.0-linux-arm64", - "1bf1eb9ee63ffc4e5d324c0b9b62cf4a289f44332dfef9607cea1a0d9596ba6f" - ], - "22.22.0-linux_ppc64le": [ - "node-v22.22.0-linux-ppc64le.tar.xz", - "node-v22.22.0-linux-ppc64le", - "d83b9957431cc18e1fc143a4b99f89cde7b8a18f53ef392231b4336afd058865" - ], - "22.22.0-linux_s390x": [ - "node-v22.22.0-linux-s390x.tar.xz", - "node-v22.22.0-linux-s390x", - "5aa0e520689448c4233e8d73f284e8e0634fdcd32b479735698494be5641f3e4" - ], - "22.22.0-linux_amd64": [ - "node-v22.22.0-linux-x64.tar.xz", - "node-v22.22.0-linux-x64", - "9aa8e9d2298ab68c600bd6fb86a6c13bce11a4eca1ba9b39d79fa021755d7c37" - ], - "22.22.0-windows_amd64": [ - "node-v22.22.0-win-x64.zip", - "node-v22.22.0-win-x64", - "c97fa376d2becdc8863fcd3ca2dd9a83a9f3468ee7ccf7a6d076ec66a645c77a" + "22.22.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_urls": [ "https://nodejs.org/dist/v{version}/{filename}" ], - "node_version": "22.22.0", + "node_version": "22.22.1", "include_headers": false, "platform": "windows_amd64" } @@ -1451,46 +1451,46 @@ "attributes": { "node_download_auth": {}, "node_repositories": { - "22.22.0-darwin_arm64": [ - "node-v22.22.0-darwin-arm64.tar.gz", - "node-v22.22.0-darwin-arm64", - "5ed4db0fcf1eaf84d91ad12462631d73bf4576c1377e192d222e48026a902640" - ], - "22.22.0-darwin_amd64": [ - "node-v22.22.0-darwin-x64.tar.gz", - "node-v22.22.0-darwin-x64", - "5ea50c9d6dea3dfa3abb66b2656f7a4e1c8cef23432b558d45fb538c7b5dedce" - ], - "22.22.0-linux_arm64": [ - "node-v22.22.0-linux-arm64.tar.xz", - "node-v22.22.0-linux-arm64", - "1bf1eb9ee63ffc4e5d324c0b9b62cf4a289f44332dfef9607cea1a0d9596ba6f" - ], - "22.22.0-linux_ppc64le": [ - "node-v22.22.0-linux-ppc64le.tar.xz", - "node-v22.22.0-linux-ppc64le", - "d83b9957431cc18e1fc143a4b99f89cde7b8a18f53ef392231b4336afd058865" - ], - "22.22.0-linux_s390x": [ - "node-v22.22.0-linux-s390x.tar.xz", - "node-v22.22.0-linux-s390x", - "5aa0e520689448c4233e8d73f284e8e0634fdcd32b479735698494be5641f3e4" - ], - "22.22.0-linux_amd64": [ - "node-v22.22.0-linux-x64.tar.xz", - "node-v22.22.0-linux-x64", - "9aa8e9d2298ab68c600bd6fb86a6c13bce11a4eca1ba9b39d79fa021755d7c37" - ], - "22.22.0-windows_amd64": [ - "node-v22.22.0-win-x64.zip", - "node-v22.22.0-win-x64", - "c97fa376d2becdc8863fcd3ca2dd9a83a9f3468ee7ccf7a6d076ec66a645c77a" + "22.22.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_urls": [ "https://nodejs.org/dist/v{version}/{filename}" ], - "node_version": "22.22.0", + "node_version": "22.22.1", "include_headers": false, "platform": "windows_arm64" } From d2743e2dad2fb50a1398dccb7c1c44069f3e7e35 Mon Sep 17 00:00:00 2001 From: Angular Robot <angular-robot@google.com> Date: Fri, 6 Mar 2026 07:20:13 +0000 Subject: [PATCH 109/226] build: update all non-major dependencies See associated pull request for more information. --- package.json | 2 +- packages/angular/build/package.json | 6 +- packages/angular/cli/package.json | 4 +- .../angular_devkit/build_angular/package.json | 4 +- .../angular_devkit/build_webpack/package.json | 2 +- packages/ngtools/webpack/package.json | 2 +- pnpm-lock.yaml | 406 +++++++++--------- 7 files changed, 216 insertions(+), 210 deletions(-) diff --git a/package.json b/package.json index d1b6ca3b8458..64a306266a35 100644 --- a/package.json +++ b/package.json @@ -118,7 +118,7 @@ "lodash": "^4.17.21", "magic-string": "0.30.21", "prettier": "^3.0.0", - "puppeteer": "24.37.5", + "puppeteer": "24.38.0", "quicktype-core": "23.2.6", "rollup": "4.59.0", "rollup-license-plugin": "~3.1.0", diff --git a/packages/angular/build/package.json b/packages/angular/build/package.json index a8b030952db5..3a42deff3eb2 100644 --- a/packages/angular/build/package.json +++ b/packages/angular/build/package.json @@ -31,13 +31,13 @@ "https-proxy-agent": "7.0.6", "istanbul-lib-instrument": "6.0.3", "jsonc-parser": "3.3.1", - "listr2": "10.1.2", + "listr2": "10.2.1", "magic-string": "0.30.21", "mrmime": "2.0.1", "parse5-html-rewriting-stream": "8.0.0", "picomatch": "4.0.3", "piscina": "5.1.4", - "rolldown": "1.0.0-rc.6", + "rolldown": "1.0.0-rc.7", "sass": "1.97.3", "semver": "7.7.4", "source-map-support": "0.5.21", @@ -54,7 +54,7 @@ "jsdom": "28.1.0", "less": "4.4.2", "ng-packagr": "22.0.0-next.0", - "postcss": "8.5.6", + "postcss": "8.5.8", "rxjs": "7.8.2", "vitest": "4.0.18" }, diff --git a/packages/angular/cli/package.json b/packages/angular/cli/package.json index 06973525125d..6ab17c1c788d 100644 --- a/packages/angular/cli/package.json +++ b/packages/angular/cli/package.json @@ -26,14 +26,14 @@ "@angular-devkit/core": "workspace:0.0.0-PLACEHOLDER", "@angular-devkit/schematics": "workspace:0.0.0-PLACEHOLDER", "@inquirer/prompts": "8.3.0", - "@listr2/prompt-adapter-inquirer": "4.1.2", + "@listr2/prompt-adapter-inquirer": "4.2.1", "@modelcontextprotocol/sdk": "1.27.1", "@schematics/angular": "workspace:0.0.0-PLACEHOLDER", "@yarnpkg/lockfile": "1.1.0", "algoliasearch": "5.49.1", "ini": "6.0.0", "jsonc-parser": "3.3.1", - "listr2": "10.1.2", + "listr2": "10.2.1", "npm-package-arg": "13.0.2", "pacote": "21.4.0", "parse5-html-rewriting-stream": "8.0.0", diff --git a/packages/angular_devkit/build_angular/package.json b/packages/angular_devkit/build_angular/package.json index 7e967803f446..4f9c25897e50 100644 --- a/packages/angular_devkit/build_angular/package.json +++ b/packages/angular_devkit/build_angular/package.json @@ -42,7 +42,7 @@ "ora": "9.3.0", "picomatch": "4.0.3", "piscina": "5.1.4", - "postcss": "8.5.6", + "postcss": "8.5.8", "postcss-loader": "8.2.1", "resolve-url-loader": "5.0.0", "rxjs": "7.8.2", @@ -54,7 +54,7 @@ "terser": "5.46.0", "tinyglobby": "0.2.15", "tslib": "2.8.1", - "webpack": "5.105.3", + "webpack": "5.105.4", "webpack-dev-middleware": "7.4.5", "webpack-dev-server": "5.2.3", "webpack-merge": "6.0.1", diff --git a/packages/angular_devkit/build_webpack/package.json b/packages/angular_devkit/build_webpack/package.json index d5b1c719f44e..709478ff1455 100644 --- a/packages/angular_devkit/build_webpack/package.json +++ b/packages/angular_devkit/build_webpack/package.json @@ -22,7 +22,7 @@ "devDependencies": { "@angular-devkit/core": "workspace:0.0.0-PLACEHOLDER", "@ngtools/webpack": "workspace:0.0.0-PLACEHOLDER", - "webpack": "5.105.3", + "webpack": "5.105.4", "webpack-dev-server": "5.2.3" }, "peerDependencies": { diff --git a/packages/ngtools/webpack/package.json b/packages/ngtools/webpack/package.json index eee3a1c0060d..2ad302dd14b4 100644 --- a/packages/ngtools/webpack/package.json +++ b/packages/ngtools/webpack/package.json @@ -30,6 +30,6 @@ "@angular/compiler": "22.0.0-next.0", "@angular/compiler-cli": "22.0.0-next.0", "typescript": "6.0.0-beta", - "webpack": "5.105.3" + "webpack": "5.105.4" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index e0a22cb10635..7e25a3a0ed65 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -248,8 +248,8 @@ importers: specifier: ^3.0.0 version: 3.8.1 puppeteer: - specifier: 24.37.5 - version: 24.37.5(bufferutil@4.1.0)(typescript@6.0.0-beta)(utf-8-validate@6.0.6) + specifier: 24.38.0 + version: 24.38.0(bufferutil@4.1.0)(typescript@6.0.0-beta)(utf-8-validate@6.0.6) quicktype-core: specifier: 23.2.6 version: 23.2.6(encoding@0.1.13) @@ -365,8 +365,8 @@ importers: specifier: 3.3.1 version: 3.3.1 listr2: - specifier: 10.1.2 - version: 10.1.2 + specifier: 10.2.1 + version: 10.2.1 magic-string: specifier: 0.30.21 version: 0.30.21 @@ -383,8 +383,8 @@ importers: specifier: 5.1.4 version: 5.1.4 rolldown: - specifier: 1.0.0-rc.6 - version: 1.0.0-rc.6 + specifier: 1.0.0-rc.7 + version: 1.0.0-rc.7 sass: specifier: 1.97.3 version: 1.97.3 @@ -420,8 +420,8 @@ importers: specifier: 22.0.0-next.0 version: 22.0.0-next.0(@angular/compiler-cli@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(typescript@6.0.0-beta))(tslib@2.8.1)(typescript@6.0.0-beta) postcss: - specifier: 8.5.6 - version: 8.5.6 + specifier: 8.5.8 + version: 8.5.8 rxjs: specifier: 7.8.2 version: 7.8.2 @@ -448,8 +448,8 @@ importers: specifier: 8.3.0 version: 8.3.0(@types/node@24.11.0) '@listr2/prompt-adapter-inquirer': - specifier: 4.1.2 - version: 4.1.2(@inquirer/prompts@8.3.0(@types/node@24.11.0))(@types/node@24.11.0)(listr2@10.1.2) + specifier: 4.2.1 + version: 4.2.1(@inquirer/prompts@8.3.0(@types/node@24.11.0))(@types/node@24.11.0)(listr2@10.2.1) '@modelcontextprotocol/sdk': specifier: 1.27.1 version: 1.27.1(zod@4.3.6) @@ -469,8 +469,8 @@ importers: specifier: 3.3.1 version: 3.3.1 listr2: - specifier: 10.1.2 - version: 10.1.2 + specifier: 10.2.1 + version: 10.2.1 npm-package-arg: specifier: 13.0.2 version: 13.0.2 @@ -600,19 +600,19 @@ importers: version: 4.1.3 autoprefixer: specifier: 10.4.27 - version: 10.4.27(postcss@8.5.6) + version: 10.4.27(postcss@8.5.8) babel-loader: specifier: 10.0.0 - version: 10.0.0(@babel/core@7.29.0)(webpack@5.105.3(esbuild@0.27.3)) + version: 10.0.0(@babel/core@7.29.0)(webpack@5.105.4(esbuild@0.27.3)) browserslist: specifier: ^4.26.0 version: 4.28.1 copy-webpack-plugin: specifier: 14.0.0 - version: 14.0.0(webpack@5.105.3(esbuild@0.27.3)) + version: 14.0.0(webpack@5.105.4(esbuild@0.27.3)) css-loader: specifier: 7.1.4 - version: 7.1.4(webpack@5.105.3(esbuild@0.27.3)) + version: 7.1.4(webpack@5.105.4(esbuild@0.27.3)) esbuild-wasm: specifier: 0.27.3 version: 0.27.3 @@ -633,16 +633,16 @@ importers: version: 4.4.2 less-loader: specifier: 12.3.1 - version: 12.3.1(less@4.4.2)(webpack@5.105.3(esbuild@0.27.3)) + version: 12.3.1(less@4.4.2)(webpack@5.105.4(esbuild@0.27.3)) license-webpack-plugin: specifier: 4.0.2 - version: 4.0.2(webpack@5.105.3(esbuild@0.27.3)) + version: 4.0.2(webpack@5.105.4(esbuild@0.27.3)) loader-utils: specifier: 3.3.1 version: 3.3.1 mini-css-extract-plugin: specifier: 2.10.0 - version: 2.10.0(webpack@5.105.3(esbuild@0.27.3)) + version: 2.10.0(webpack@5.105.4(esbuild@0.27.3)) open: specifier: 11.0.0 version: 11.0.0 @@ -656,11 +656,11 @@ importers: specifier: 5.1.4 version: 5.1.4 postcss: - specifier: 8.5.6 - version: 8.5.6 + specifier: 8.5.8 + version: 8.5.8 postcss-loader: specifier: 8.2.1 - version: 8.2.1(postcss@8.5.6)(typescript@6.0.0-beta)(webpack@5.105.3(esbuild@0.27.3)) + version: 8.2.1(postcss@8.5.8)(typescript@6.0.0-beta)(webpack@5.105.4(esbuild@0.27.3)) resolve-url-loader: specifier: 5.0.0 version: 5.0.0 @@ -672,13 +672,13 @@ importers: version: 1.97.3 sass-loader: specifier: 16.0.7 - version: 16.0.7(sass@1.97.3)(webpack@5.105.3(esbuild@0.27.3)) + version: 16.0.7(sass@1.97.3)(webpack@5.105.4(esbuild@0.27.3)) semver: specifier: 7.7.4 version: 7.7.4 source-map-loader: specifier: 5.0.0 - version: 5.0.0(webpack@5.105.3(esbuild@0.27.3)) + version: 5.0.0(webpack@5.105.4(esbuild@0.27.3)) source-map-support: specifier: 0.5.21 version: 0.5.21 @@ -692,20 +692,20 @@ importers: specifier: 2.8.1 version: 2.8.1 webpack: - specifier: 5.105.3 - version: 5.105.3(esbuild@0.27.3) + specifier: 5.105.4 + version: 5.105.4(esbuild@0.27.3) webpack-dev-middleware: specifier: 7.4.5 - version: 7.4.5(tslib@2.8.1)(webpack@5.105.3(esbuild@0.27.3)) + version: 7.4.5(tslib@2.8.1)(webpack@5.105.4(esbuild@0.27.3)) webpack-dev-server: specifier: 5.2.3 - version: 5.2.3(bufferutil@4.1.0)(tslib@2.8.1)(utf-8-validate@6.0.6)(webpack@5.105.3(esbuild@0.27.3)) + version: 5.2.3(bufferutil@4.1.0)(tslib@2.8.1)(utf-8-validate@6.0.6)(webpack@5.105.4(esbuild@0.27.3)) webpack-merge: specifier: 6.0.1 version: 6.0.1 webpack-subresource-integrity: specifier: 5.1.0 - version: 5.1.0(webpack@5.105.3(esbuild@0.27.3)) + version: 5.1.0(webpack@5.105.4(esbuild@0.27.3)) devDependencies: '@angular/ssr': specifier: workspace:* @@ -740,11 +740,11 @@ importers: specifier: workspace:0.0.0-PLACEHOLDER version: link:../../ngtools/webpack webpack: - specifier: 5.105.3 - version: 5.105.3(esbuild@0.27.3) + specifier: 5.105.4 + version: 5.105.4(esbuild@0.27.3) webpack-dev-server: specifier: 5.2.3 - version: 5.2.3(bufferutil@4.1.0)(tslib@2.8.1)(utf-8-validate@6.0.6)(webpack@5.105.3(esbuild@0.27.3)) + version: 5.2.3(bufferutil@4.1.0)(tslib@2.8.1)(utf-8-validate@6.0.6)(webpack@5.105.4(esbuild@0.27.3)) packages/angular_devkit/core: dependencies: @@ -816,8 +816,8 @@ importers: specifier: 6.0.0-beta version: 6.0.0-beta webpack: - specifier: 5.105.3 - version: 5.105.3(esbuild@0.27.3) + specifier: 5.105.4 + version: 5.105.4(esbuild@0.27.3) packages/schematics/angular: dependencies: @@ -2442,12 +2442,12 @@ packages: '@leichtgewicht/ip-codec@2.0.5': resolution: {integrity: sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw==} - '@listr2/prompt-adapter-inquirer@4.1.2': - resolution: {integrity: sha512-Gnq4scw3evxbEVTQ5cz7l1zpjDdF35/NOOvTqPRvbGnPNegu9YbRwhFH144o30a0G5q+7iLgz6s1xOg+B5bvhg==} - engines: {node: '>=22.0.0'} + '@listr2/prompt-adapter-inquirer@4.2.1': + resolution: {integrity: sha512-z3jVhDIz6/X5rPFAk8r00mOHTxpZljgOKNnrq6FLIoZUbXcPrcW3wfM7aUOxy4NXrUewTchcVZxgxHLZY3vN7Q==} + engines: {node: '>=22.13.0'} peerDependencies: '@inquirer/prompts': '>= 3 < 9' - listr2: 10.1.2 + listr2: 10.2.1 '@lmdb/lmdb-darwin-arm64@3.5.1': resolution: {integrity: sha512-tpfN4kKrrMpQ+If1l8bhmoNkECJi0iOu6AEdrTJvWVC+32sLxTARX5Rsu579mPImRP9YFWfWgeRQ5oav7zApQQ==} @@ -2992,89 +2992,103 @@ packages: engines: {node: '>=18'} hasBin: true - '@rolldown/binding-android-arm64@1.0.0-rc.6': - resolution: {integrity: sha512-kvjTSWGcrv+BaR2vge57rsKiYdVR8V8CoS0vgKrc570qRBfty4bT+1X0z3j2TaVV+kAYzA0PjeB9+mdZyqUZlg==} + '@rolldown/binding-android-arm64@1.0.0-rc.7': + resolution: {integrity: sha512-/uadfNUaMLFFBGvcIOiq8NnlhvTZTjOyybJaJnhGxD0n9k5vZRJfTaitH5GHnbwmc6T2PC+ZpS1FQH+vXyS/UA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [android] - '@rolldown/binding-darwin-arm64@1.0.0-rc.6': - resolution: {integrity: sha512-+tJhD21KvGNtUrpLXrZQlT+j5HZKiEwR2qtcZb3vNOUpvoT9QjEykr75ZW/Kr0W89gose/HVXU6351uVZD8Qvw==} + '@rolldown/binding-darwin-arm64@1.0.0-rc.7': + resolution: {integrity: sha512-zokYr1KgRn0hRA89dmgtPj/BmKp9DxgrfAJvOEFfXa8nfYWW2nmgiYIBGpSIAJrEg7Qc/Qznovy6xYwmKh0M8g==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [darwin] - '@rolldown/binding-darwin-x64@1.0.0-rc.6': - resolution: {integrity: sha512-DKNhjMk38FAWaHwUt1dFR3rA/qRAvn2NUvSG2UGvxvlMxSmN/qqww/j4ABAbXhNRXtGQNmrAINMXRuwHl16ZHg==} + '@rolldown/binding-darwin-x64@1.0.0-rc.7': + resolution: {integrity: sha512-eZFjbmrapCBVgMmuLALH3pmQQQStHFuRhsFceJHk6KISW8CkI2e9OPLp9V4qXksrySQcD8XM8fpvGLs5l5C7LQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [darwin] - '@rolldown/binding-freebsd-x64@1.0.0-rc.6': - resolution: {integrity: sha512-8TThsRkCPAnfyMBShxrGdtoOE6h36QepqRQI97iFaQSCRbHFWHcDHppcojZnzXoruuhPnjMEygzaykvPVJsMRg==} + '@rolldown/binding-freebsd-x64@1.0.0-rc.7': + resolution: {integrity: sha512-xjMrh8Dmu2DNwdY6DZsrF6YPGeesc3PaTlkh8v9cqmkSCNeTxnhX3ErhVnuv1j3n8t2IuuhQIwM9eZDINNEt5Q==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [freebsd] - '@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.6': - resolution: {integrity: sha512-ZfmFoOwPUZCWtGOVC9/qbQzfc0249FrRUOzV2XabSMUV60Crp211OWLQN1zmQAsRIVWRcEwhJ46Z1mXGo/L/nQ==} + '@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.7': + resolution: {integrity: sha512-mOvftrHiXg4/xFdxJY3T9Wl1/zDAOSlMN8z9an2bXsCwuvv3RdyhYbSMZDuDO52S04w9z7+cBd90lvQSPTAQtw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [linux] - '@rolldown/binding-linux-arm64-gnu@1.0.0-rc.6': - resolution: {integrity: sha512-ZsGzbNETxPodGlLTYHaCSGVhNN/rvkMDCJYHdT7PZr5jFJRmBfmDi2awhF64Dt2vxrJqY6VeeYSgOzEbHRsb7Q==} + '@rolldown/binding-linux-arm64-gnu@1.0.0-rc.7': + resolution: {integrity: sha512-TuUkeuEEPRyXMBbJ86NRhAiPNezxHW8merl3Om2HASA9Pl1rI+VZcTtsVQ6v/P0MDIFpSl0k0+tUUze9HIXyEw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] libc: [glibc] - '@rolldown/binding-linux-arm64-musl@1.0.0-rc.6': - resolution: {integrity: sha512-elPpdevtCdUOqziemR86C4CSCr/5sUxalzDrf/CJdMT+kZt2C556as++qHikNOz0vuFf52h+GJNXZM08eWgGPQ==} + '@rolldown/binding-linux-arm64-musl@1.0.0-rc.7': + resolution: {integrity: sha512-G43ZElEvaby+YSOgrXfBgpeQv42LdS0ivFFYQufk2tBDWeBfzE/+ob5DmO8Izbyn4Y8k6GgLF11jFDYNnmU/3w==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] libc: [musl] - '@rolldown/binding-linux-x64-gnu@1.0.0-rc.6': - resolution: {integrity: sha512-IBwXsf56o3xhzAyaZxdM1CX8UFiBEUFCjiVUgny67Q8vPIqkjzJj0YKhd3TbBHanuxThgBa59f6Pgutg2OGk5A==} + '@rolldown/binding-linux-ppc64-gnu@1.0.0-rc.7': + resolution: {integrity: sha512-Y48ShVxGE2zUTt0A0PR3grCLNxW4DWtAfe5lxf6L3uYEQujwo/LGuRogMsAtOJeYLCPTJo2i714LOdnK34cHpw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [ppc64] + os: [linux] + libc: [glibc] + + '@rolldown/binding-linux-s390x-gnu@1.0.0-rc.7': + resolution: {integrity: sha512-KU5DUYvX3qI8/TX6D3RA4awXi4Ge/1+M6Jqv7kRiUndpqoVGgD765xhV3Q6QvtABnYjLJenrWDl3S1B5U56ixA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [s390x] + os: [linux] + libc: [glibc] + + '@rolldown/binding-linux-x64-gnu@1.0.0-rc.7': + resolution: {integrity: sha512-1THb6FdBkAEL12zvUue2bmK4W1+P+tz8Pgu5uEzq+xrtYa3iBzmmKNlyfUzCFNCqsPd8WJEQrYdLcw4iMW4AVw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] libc: [glibc] - '@rolldown/binding-linux-x64-musl@1.0.0-rc.6': - resolution: {integrity: sha512-vOk7G8V9Zm+8a6PL6JTpCea61q491oYlGtO6CvnsbhNLlKdf0bbCPytFzGQhYmCKZDKkEbmnkcIprTEGCURnwg==} + '@rolldown/binding-linux-x64-musl@1.0.0-rc.7': + resolution: {integrity: sha512-12o73atFNWDgYnLyA52QEUn9AH8pHIe12W28cmqjyHt4bIEYRzMICvYVCPa2IQm6DJBvCBrEhD9K+ct4wr2hwg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] libc: [musl] - '@rolldown/binding-openharmony-arm64@1.0.0-rc.6': - resolution: {integrity: sha512-ASjEDI4MRv7XCQb2JVaBzfEYO98JKCGrAgoW6M03fJzH/ilCnC43Mb3ptB9q/lzsaahoJyIBoAGKAYEjUvpyvQ==} + '@rolldown/binding-openharmony-arm64@1.0.0-rc.7': + resolution: {integrity: sha512-+uUgGwvuUCXl894MTsmTS2J0BnCZccFsmzV7y1jFxW5pTSxkuwL5agyPuDvDOztPeS6RrdqWkn7sT0jRd0ECkg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [openharmony] - '@rolldown/binding-wasm32-wasi@1.0.0-rc.6': - resolution: {integrity: sha512-mYa1+h2l6Zc0LvmwUh0oXKKYihnw/1WC73vTqw+IgtfEtv47A+rWzzcWwVDkW73+UDr0d/Ie/HRXoaOY22pQDw==} + '@rolldown/binding-wasm32-wasi@1.0.0-rc.7': + resolution: {integrity: sha512-53p2L/NSy21UiFOqUGlC11kJDZS2Nx2GJRz1QvbkXovypA3cOHbsyZHLkV72JsLSbiEQe+kg4tndUhSiC31UEA==} engines: {node: '>=14.0.0'} cpu: [wasm32] - '@rolldown/binding-win32-arm64-msvc@1.0.0-rc.6': - resolution: {integrity: sha512-e2ABskbNH3MRUBMjgxaMjYIw11DSwjLJxBII3UgpF6WClGLIh8A20kamc+FKH5vIaFVnYQInmcLYSUVpqMPLow==} + '@rolldown/binding-win32-arm64-msvc@1.0.0-rc.7': + resolution: {integrity: sha512-K6svNRljO6QrL6VTKxwh4yThhlR9DT/tK0XpaFQMnJwwQKng+NYcVEtUkAM0WsoiZHw+Hnh3DGnn3taf/pNYGg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [win32] - '@rolldown/binding-win32-x64-msvc@1.0.0-rc.6': - resolution: {integrity: sha512-dJVc3ifhaRXxIEh1xowLohzFrlQXkJ66LepHm+CmSprTWgVrPa8Fx3OL57xwIqDEH9hufcKkDX2v65rS3NZyRA==} + '@rolldown/binding-win32-x64-msvc@1.0.0-rc.7': + resolution: {integrity: sha512-3ZJBT47VWLKVKIyvHhUSUgVwHzzZW761YAIkM3tOT+8ZTjFVp0acCM0Y2Z2j3jCl+XYi2d9y2uEWQ8H0PvvpPw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [win32] - '@rolldown/pluginutils@1.0.0-rc.6': - resolution: {integrity: sha512-Y0+JT8Mi1mmW08K6HieG315XNRu4L0rkfCpA364HtytjgiqYnMYRdFPcxRl+BQQqNXzecL2S9nii+RUpO93XIA==} + '@rolldown/pluginutils@1.0.0-rc.7': + resolution: {integrity: sha512-qujRfC8sFVInYSPPMLQByRh7zhwkGFS4+tyMQ83srV1qrxL4g8E2tyxVVyxd0+8QeBM1mIk9KbWxkegRr76XzA==} '@rollup/plugin-alias@6.0.0': resolution: {integrity: sha512-tPCzJOtS7uuVZd+xPhoy5W4vThe6KWXNmsFCNktaAh5RTqcLiSfT4huPQIXkgJ6YCOjJHvecOAzQxLFhPxKr+g==} @@ -4684,8 +4698,8 @@ packages: engines: {node: '>= 0.8.0'} hasBin: true - devtools-protocol@0.0.1566079: - resolution: {integrity: sha512-MJfAEA1UfVhSs7fbSQOG4czavUp1ajfg6prlAN0+cmfa2zNjaIbvq8VneP7do1WAQQIvgNJWSMeP6UyI90gIlQ==} + devtools-protocol@0.0.1581282: + resolution: {integrity: sha512-nv7iKtNZQshSW2hKzYNr46nM/Cfh5SEvE2oV0/SEGgc9XupIY5ggf84Cz8eJIkBce7S3bmTAauFD6aysMpnqsQ==} di@0.0.1: resolution: {integrity: sha512-uJaamHkagcZtHPqCIHZxnFrXlunQXgBOsZSUOWwFw31QJCAbyTBoHMW75YOTur5ZNx8pIeAKgf6GWIgaqqiLhA==} @@ -6085,9 +6099,9 @@ packages: lines-and-columns@1.2.4: resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} - listr2@10.1.2: - resolution: {integrity: sha512-ENXj5KYVtdZigbaWY0+lUCzRZNvKDEbxree+93oaCeSz8GICxgJyOMi6U9mHuiFd3hJ9y0RIDQh8RYttBKOnaQ==} - engines: {node: '>=22.0.0'} + listr2@10.2.1: + resolution: {integrity: sha512-7I5knELsJKTUjXG+A6BkKAiGkW1i25fNa/xlUl9hFtk15WbE9jndA89xu5FzQKrY5llajE1hfZZFMILXkDHk/Q==} + engines: {node: '>=22.13.0'} lmdb@3.5.1: resolution: {integrity: sha512-NYHA0MRPjvNX+vSw8Xxg6FLKxzAG+e7Pt8RqAQA/EehzHVXq9SxDqJIN3JL1hK0dweb884y8kIh6rkWvPyg9Wg==} @@ -6881,8 +6895,8 @@ packages: postcss-value-parser@4.2.0: resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} - postcss@8.5.6: - resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==} + postcss@8.5.8: + resolution: {integrity: sha512-OW/rX8O/jXnm82Ey1k44pObPtdblfiuWnrd8X7GJ7emImCOstunGbXUpp7HdBrFQX6rJzn3sPT397Wp5aCwCHg==} engines: {node: ^10 || ^12 || >=14} powershell-utils@0.1.0: @@ -6965,12 +6979,12 @@ packages: resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} engines: {node: '>=6'} - puppeteer-core@24.37.5: - resolution: {integrity: sha512-ybL7iE78YPN4T6J+sPLO7r0lSByp/0NN6PvfBEql219cOnttoTFzCWKiBOjstXSqi/OKpwae623DWAsL7cn2MQ==} + puppeteer-core@24.38.0: + resolution: {integrity: sha512-zB3S/tksIhgi2gZRndUe07AudBz5SXOB7hqG0kEa9/YXWrGwlVlYm3tZtwKgfRftBzbmLQl5iwHkQQl04n/mWw==} engines: {node: '>=18'} - puppeteer@24.37.5: - resolution: {integrity: sha512-3PAOIQLceyEmn1Fi76GkGO2EVxztv5OtdlB1m8hMUZL3f8KDHnlvXbvCXv+Ls7KzF1R0KdKBqLuT/Hhrok12hQ==} + puppeteer@24.38.0: + resolution: {integrity: sha512-abnJOBVoL9PQTLKSbYGm9mjNFyIPaTVj77J/6cS370dIQtcZMpx8wyZoAuBzR71Aoon6yvI71NEVFUsl3JU82g==} engines: {node: '>=18'} hasBin: true @@ -7006,9 +7020,6 @@ packages: quicktype-core@23.2.6: resolution: {integrity: sha512-asfeSv7BKBNVb9WiYhFRBvBZHcRutPRBwJMxW0pefluK4kkKu4lv0IvZBwFKvw2XygLcL1Rl90zxWDHYgkwCmA==} - randombytes@2.1.0: - resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} - range-parser@1.2.1: resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==} engines: {node: '>= 0.6'} @@ -7153,8 +7164,8 @@ packages: resolution: {integrity: sha512-l0OE8wL34P4nJH/H2ffoaniAokM2qSmrtXHmlpvYr5AVVX8msAyW0l8NVJFDxlSK4u3Uh/f41cQheDVdnYijwQ==} hasBin: true - rolldown@1.0.0-rc.6: - resolution: {integrity: sha512-B8vFPV1ADyegoYfhg+E7RAucYKv0xdVlwYYsIJgfPNeiSxZGWNxts9RqhyGzC11ULK/VaeXyKezGCwpMiH8Ktw==} + rolldown@1.0.0-rc.7: + resolution: {integrity: sha512-5X0zEeQFzDpB3MqUWQZyO2TUQqP9VnT7CqXHF2laTFRy487+b6QZyotCazOySAuZLAvplCaOVsg1tVn/Zlmwfg==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true @@ -7302,9 +7313,6 @@ packages: resolution: {integrity: sha512-1gnZf7DFcoIcajTjTwjwuDjzuz4PPcY2StKPlsGAQ1+YH20IRVrBaXSWmdjowTJ6u8Rc01PoYOGHXfP1mYcZNQ==} engines: {node: '>= 18'} - serialize-javascript@6.0.2: - resolution: {integrity: sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==} - serialize-javascript@7.0.3: resolution: {integrity: sha512-h+cZ/XXarqDgCjo+YSyQU/ulDEESGGf8AMK9pPNmhNSl/FzPl6L8pMp1leca5z6NuG6tvV/auC8/43tmovowww==} engines: {node: '>=20.0.0'} @@ -7648,8 +7656,8 @@ packages: teex@1.0.1: resolution: {integrity: sha512-eYE6iEI62Ni1H8oIa7KlDU6uQBtqr4Eajni3wX7rpfXD8ysFx8z0+dri+KWEPWpBsxXfxu58x/0jvTVT1ekOSg==} - terser-webpack-plugin@5.3.16: - resolution: {integrity: sha512-h9oBFCWrq78NyWWVcSwZarJkZ01c2AyGrzs1crmHZO3QUg9D61Wu4NPjBy69n7JqylFF5y+CsUZYmYEIZ3mR+Q==} + terser-webpack-plugin@5.3.17: + resolution: {integrity: sha512-YR7PtUp6GMU91BgSJmlaX/rS2lGDbAF7D+Wtq7hRO+MiljNmodYvqslzCFiYVAgW+Qoaaia/QUIP4lGXufjdZw==} engines: {node: '>= 10.13.0'} peerDependencies: '@swc/core': '*' @@ -8137,8 +8145,8 @@ packages: html-webpack-plugin: optional: true - webpack@5.105.3: - resolution: {integrity: sha512-LLBBA4oLmT7sZdHiYE/PeVuifOxYyE2uL/V+9VQP7YSYdJU7bSf7H8bZRRxW8kEPMkmVjnrXmoR3oejIdX0xbg==} + webpack@5.105.4: + resolution: {integrity: sha512-jTywjboN9aHxFlToqb0K0Zs9SbBoW4zRUlGzI2tYNxVYcEi/IPpn+Xi4ye5jTLvX2YeLuic/IvxNot+Q1jMoOw==} engines: {node: '>=10.13.0'} hasBin: true peerDependencies: @@ -10260,11 +10268,11 @@ snapshots: '@leichtgewicht/ip-codec@2.0.5': {} - '@listr2/prompt-adapter-inquirer@4.1.2(@inquirer/prompts@8.3.0(@types/node@24.11.0))(@types/node@24.11.0)(listr2@10.1.2)': + '@listr2/prompt-adapter-inquirer@4.2.1(@inquirer/prompts@8.3.0(@types/node@24.11.0))(@types/node@24.11.0)(listr2@10.2.1)': dependencies: '@inquirer/prompts': 8.3.0(@types/node@24.11.0) '@inquirer/type': 4.0.3(@types/node@24.11.0) - listr2: 10.1.2 + listr2: 10.2.1 transitivePeerDependencies: - '@types/node' @@ -10838,48 +10846,54 @@ snapshots: - react-native-b4a - supports-color - '@rolldown/binding-android-arm64@1.0.0-rc.6': + '@rolldown/binding-android-arm64@1.0.0-rc.7': + optional: true + + '@rolldown/binding-darwin-arm64@1.0.0-rc.7': optional: true - '@rolldown/binding-darwin-arm64@1.0.0-rc.6': + '@rolldown/binding-darwin-x64@1.0.0-rc.7': optional: true - '@rolldown/binding-darwin-x64@1.0.0-rc.6': + '@rolldown/binding-freebsd-x64@1.0.0-rc.7': optional: true - '@rolldown/binding-freebsd-x64@1.0.0-rc.6': + '@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.7': optional: true - '@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.6': + '@rolldown/binding-linux-arm64-gnu@1.0.0-rc.7': optional: true - '@rolldown/binding-linux-arm64-gnu@1.0.0-rc.6': + '@rolldown/binding-linux-arm64-musl@1.0.0-rc.7': optional: true - '@rolldown/binding-linux-arm64-musl@1.0.0-rc.6': + '@rolldown/binding-linux-ppc64-gnu@1.0.0-rc.7': optional: true - '@rolldown/binding-linux-x64-gnu@1.0.0-rc.6': + '@rolldown/binding-linux-s390x-gnu@1.0.0-rc.7': optional: true - '@rolldown/binding-linux-x64-musl@1.0.0-rc.6': + '@rolldown/binding-linux-x64-gnu@1.0.0-rc.7': optional: true - '@rolldown/binding-openharmony-arm64@1.0.0-rc.6': + '@rolldown/binding-linux-x64-musl@1.0.0-rc.7': optional: true - '@rolldown/binding-wasm32-wasi@1.0.0-rc.6': + '@rolldown/binding-openharmony-arm64@1.0.0-rc.7': + optional: true + + '@rolldown/binding-wasm32-wasi@1.0.0-rc.7': dependencies: '@napi-rs/wasm-runtime': 1.1.1 optional: true - '@rolldown/binding-win32-arm64-msvc@1.0.0-rc.6': + '@rolldown/binding-win32-arm64-msvc@1.0.0-rc.7': optional: true - '@rolldown/binding-win32-x64-msvc@1.0.0-rc.6': + '@rolldown/binding-win32-x64-msvc@1.0.0-rc.7': optional: true - '@rolldown/pluginutils@1.0.0-rc.6': {} + '@rolldown/pluginutils@1.0.0-rc.7': {} '@rollup/plugin-alias@6.0.0(rollup@4.59.0)': optionalDependencies: @@ -11226,7 +11240,7 @@ snapshots: '@types/loader-utils@3.0.0(esbuild@0.27.3)': dependencies: '@types/node': 22.19.13 - webpack: 5.105.3(esbuild@0.27.3) + webpack: 5.105.4(esbuild@0.27.3) transitivePeerDependencies: - '@swc/core' - esbuild @@ -11973,13 +11987,13 @@ snapshots: atomic-sleep@1.0.0: {} - autoprefixer@10.4.27(postcss@8.5.6): + autoprefixer@10.4.27(postcss@8.5.8): dependencies: browserslist: 4.28.1 caniuse-lite: 1.0.30001775 fraction.js: 5.3.4 picocolors: 1.1.1 - postcss: 8.5.6 + postcss: 8.5.8 postcss-value-parser: 4.2.0 available-typed-arrays@1.0.7: @@ -11992,11 +12006,11 @@ snapshots: b4a@1.8.0: {} - babel-loader@10.0.0(@babel/core@7.29.0)(webpack@5.105.3(esbuild@0.27.3)): + babel-loader@10.0.0(@babel/core@7.29.0)(webpack@5.105.4(esbuild@0.27.3)): dependencies: '@babel/core': 7.29.0 find-up: 5.0.0 - webpack: 5.105.3(esbuild@0.27.3) + webpack: 5.105.4(esbuild@0.27.3) babel-plugin-polyfill-corejs2@0.4.15(@babel/core@7.29.0): dependencies: @@ -12091,9 +12105,9 @@ snapshots: domhandler: 5.0.3 htmlparser2: 10.1.0 picocolors: 1.1.1 - postcss: 8.5.6 + postcss: 8.5.8 postcss-media-query-parser: 0.2.3 - postcss-safe-parser: 7.0.1(postcss@8.5.6) + postcss-safe-parser: 7.0.1(postcss@8.5.8) before-after-hook@4.0.0: {} @@ -12351,9 +12365,9 @@ snapshots: chrome-trace-event@1.0.4: {} - chromium-bidi@14.0.0(devtools-protocol@0.0.1566079): + chromium-bidi@14.0.0(devtools-protocol@0.0.1581282): dependencies: - devtools-protocol: 0.0.1566079 + devtools-protocol: 0.0.1581282 mitt: 3.0.1 zod: 3.25.76 @@ -12501,14 +12515,14 @@ snapshots: dependencies: is-what: 3.14.1 - copy-webpack-plugin@14.0.0(webpack@5.105.3(esbuild@0.27.3)): + copy-webpack-plugin@14.0.0(webpack@5.105.4(esbuild@0.27.3)): dependencies: glob-parent: 6.0.2 normalize-path: 3.0.0 schema-utils: 4.3.3 serialize-javascript: 7.0.3 tinyglobby: 0.2.15 - webpack: 5.105.3(esbuild@0.27.3) + webpack: 5.105.4(esbuild@0.27.3) core-js-compat@3.48.0: dependencies: @@ -12544,18 +12558,18 @@ snapshots: shebang-command: 2.0.0 which: 2.0.2 - css-loader@7.1.4(webpack@5.105.3(esbuild@0.27.3)): + css-loader@7.1.4(webpack@5.105.4(esbuild@0.27.3)): dependencies: - icss-utils: 5.1.0(postcss@8.5.6) - postcss: 8.5.6 - postcss-modules-extract-imports: 3.1.0(postcss@8.5.6) - postcss-modules-local-by-default: 4.2.0(postcss@8.5.6) - postcss-modules-scope: 3.2.1(postcss@8.5.6) - postcss-modules-values: 4.0.0(postcss@8.5.6) + icss-utils: 5.1.0(postcss@8.5.8) + postcss: 8.5.8 + postcss-modules-extract-imports: 3.1.0(postcss@8.5.8) + postcss-modules-local-by-default: 4.2.0(postcss@8.5.8) + postcss-modules-scope: 3.2.1(postcss@8.5.8) + postcss-modules-values: 4.0.0(postcss@8.5.8) postcss-value-parser: 4.2.0 semver: 7.7.4 optionalDependencies: - webpack: 5.105.3(esbuild@0.27.3) + webpack: 5.105.4(esbuild@0.27.3) css-select@6.0.0: dependencies: @@ -12706,7 +12720,7 @@ snapshots: dev-ip@1.0.1: {} - devtools-protocol@0.0.1566079: {} + devtools-protocol@0.0.1581282: {} di@0.0.1: {} @@ -13877,9 +13891,9 @@ snapshots: dependencies: safer-buffer: 2.1.2 - icss-utils@5.1.0(postcss@8.5.6): + icss-utils@5.1.0(postcss@8.5.8): dependencies: - postcss: 8.5.6 + postcss: 8.5.8 idb@7.1.1: {} @@ -14397,11 +14411,11 @@ snapshots: picocolors: 1.1.1 shell-quote: 1.8.3 - less-loader@12.3.1(less@4.4.2)(webpack@5.105.3(esbuild@0.27.3)): + less-loader@12.3.1(less@4.4.2)(webpack@5.105.4(esbuild@0.27.3)): dependencies: less: 4.4.2 optionalDependencies: - webpack: 5.105.3(esbuild@0.27.3) + webpack: 5.105.4(esbuild@0.27.3) less@4.4.2: dependencies: @@ -14422,20 +14436,19 @@ snapshots: prelude-ls: 1.2.1 type-check: 0.4.0 - license-webpack-plugin@4.0.2(webpack@5.105.3(esbuild@0.27.3)): + license-webpack-plugin@4.0.2(webpack@5.105.4(esbuild@0.27.3)): dependencies: webpack-sources: 3.3.4 optionalDependencies: - webpack: 5.105.3(esbuild@0.27.3) + webpack: 5.105.4(esbuild@0.27.3) limiter@1.1.5: {} lines-and-columns@1.2.4: {} - listr2@10.1.2: + listr2@10.2.1: dependencies: cli-truncate: 5.2.0 - colorette: 2.0.20 eventemitter3: 5.0.4 log-update: 6.1.0 rfdc: 1.4.1 @@ -14650,11 +14663,11 @@ snapshots: mimic-response@3.1.0: {} - mini-css-extract-plugin@2.10.0(webpack@5.105.3(esbuild@0.27.3)): + mini-css-extract-plugin@2.10.0(webpack@5.105.4(esbuild@0.27.3)): dependencies: schema-utils: 4.3.3 tapable: 2.3.0 - webpack: 5.105.3(esbuild@0.27.3) + webpack: 5.105.4(esbuild@0.27.3) minimalistic-assert@1.0.1: {} @@ -14801,7 +14814,7 @@ snapshots: less: 4.4.2 ora: 9.3.0 piscina: 5.1.4 - postcss: 8.5.6 + postcss: 8.5.8 rollup-plugin-dts: 6.3.0(rollup@4.59.0)(typescript@6.0.0-beta) rxjs: 7.8.2 sass: 1.97.3 @@ -15244,43 +15257,43 @@ snapshots: possible-typed-array-names@1.1.0: {} - postcss-loader@8.2.1(postcss@8.5.6)(typescript@6.0.0-beta)(webpack@5.105.3(esbuild@0.27.3)): + postcss-loader@8.2.1(postcss@8.5.8)(typescript@6.0.0-beta)(webpack@5.105.4(esbuild@0.27.3)): dependencies: cosmiconfig: 9.0.0(typescript@6.0.0-beta) jiti: 2.6.1 - postcss: 8.5.6 + postcss: 8.5.8 semver: 7.7.4 optionalDependencies: - webpack: 5.105.3(esbuild@0.27.3) + webpack: 5.105.4(esbuild@0.27.3) transitivePeerDependencies: - typescript postcss-media-query-parser@0.2.3: {} - postcss-modules-extract-imports@3.1.0(postcss@8.5.6): + postcss-modules-extract-imports@3.1.0(postcss@8.5.8): dependencies: - postcss: 8.5.6 + postcss: 8.5.8 - postcss-modules-local-by-default@4.2.0(postcss@8.5.6): + postcss-modules-local-by-default@4.2.0(postcss@8.5.8): dependencies: - icss-utils: 5.1.0(postcss@8.5.6) - postcss: 8.5.6 + icss-utils: 5.1.0(postcss@8.5.8) + postcss: 8.5.8 postcss-selector-parser: 7.1.1 postcss-value-parser: 4.2.0 - postcss-modules-scope@3.2.1(postcss@8.5.6): + postcss-modules-scope@3.2.1(postcss@8.5.8): dependencies: - postcss: 8.5.6 + postcss: 8.5.8 postcss-selector-parser: 7.1.1 - postcss-modules-values@4.0.0(postcss@8.5.6): + postcss-modules-values@4.0.0(postcss@8.5.8): dependencies: - icss-utils: 5.1.0(postcss@8.5.6) - postcss: 8.5.6 + icss-utils: 5.1.0(postcss@8.5.8) + postcss: 8.5.8 - postcss-safe-parser@7.0.1(postcss@8.5.6): + postcss-safe-parser@7.0.1(postcss@8.5.8): dependencies: - postcss: 8.5.6 + postcss: 8.5.8 postcss-selector-parser@7.1.1: dependencies: @@ -15289,7 +15302,7 @@ snapshots: postcss-value-parser@4.2.0: {} - postcss@8.5.6: + postcss@8.5.8: dependencies: nanoid: 3.3.11 picocolors: 1.1.1 @@ -15382,12 +15395,12 @@ snapshots: punycode@2.3.1: {} - puppeteer-core@24.37.5(bufferutil@4.1.0)(utf-8-validate@6.0.6): + puppeteer-core@24.38.0(bufferutil@4.1.0)(utf-8-validate@6.0.6): dependencies: '@puppeteer/browsers': 2.13.0 - chromium-bidi: 14.0.0(devtools-protocol@0.0.1566079) + chromium-bidi: 14.0.0(devtools-protocol@0.0.1581282) debug: 4.4.3(supports-color@10.2.2) - devtools-protocol: 0.0.1566079 + devtools-protocol: 0.0.1581282 typed-query-selector: 2.12.1 webdriver-bidi-protocol: 0.4.1 ws: 8.19.0(bufferutil@4.1.0)(utf-8-validate@6.0.6) @@ -15399,13 +15412,13 @@ snapshots: - supports-color - utf-8-validate - puppeteer@24.37.5(bufferutil@4.1.0)(typescript@6.0.0-beta)(utf-8-validate@6.0.6): + puppeteer@24.38.0(bufferutil@4.1.0)(typescript@6.0.0-beta)(utf-8-validate@6.0.6): dependencies: '@puppeteer/browsers': 2.13.0 - chromium-bidi: 14.0.0(devtools-protocol@0.0.1566079) + chromium-bidi: 14.0.0(devtools-protocol@0.0.1581282) cosmiconfig: 9.0.0(typescript@6.0.0-beta) - devtools-protocol: 0.0.1566079 - puppeteer-core: 24.37.5(bufferutil@4.1.0)(utf-8-validate@6.0.6) + devtools-protocol: 0.0.1581282 + puppeteer-core: 24.38.0(bufferutil@4.1.0)(utf-8-validate@6.0.6) typed-query-selector: 2.12.1 transitivePeerDependencies: - bare-abort-controller @@ -15457,10 +15470,6 @@ snapshots: transitivePeerDependencies: - encoding - randombytes@2.1.0: - dependencies: - safe-buffer: 5.2.1 - range-parser@1.2.1: {} raw-body@2.5.3: @@ -15581,7 +15590,7 @@ snapshots: adjust-sourcemap-loader: 4.0.0 convert-source-map: 1.9.0 loader-utils: 2.0.4 - postcss: 8.5.6 + postcss: 8.5.8 source-map: 0.6.1 resolve@1.22.11: @@ -15629,24 +15638,26 @@ snapshots: dependencies: glob: 10.5.0 - rolldown@1.0.0-rc.6: + rolldown@1.0.0-rc.7: dependencies: '@oxc-project/types': 0.115.0 - '@rolldown/pluginutils': 1.0.0-rc.6 + '@rolldown/pluginutils': 1.0.0-rc.7 optionalDependencies: - '@rolldown/binding-android-arm64': 1.0.0-rc.6 - '@rolldown/binding-darwin-arm64': 1.0.0-rc.6 - '@rolldown/binding-darwin-x64': 1.0.0-rc.6 - '@rolldown/binding-freebsd-x64': 1.0.0-rc.6 - '@rolldown/binding-linux-arm-gnueabihf': 1.0.0-rc.6 - '@rolldown/binding-linux-arm64-gnu': 1.0.0-rc.6 - '@rolldown/binding-linux-arm64-musl': 1.0.0-rc.6 - '@rolldown/binding-linux-x64-gnu': 1.0.0-rc.6 - '@rolldown/binding-linux-x64-musl': 1.0.0-rc.6 - '@rolldown/binding-openharmony-arm64': 1.0.0-rc.6 - '@rolldown/binding-wasm32-wasi': 1.0.0-rc.6 - '@rolldown/binding-win32-arm64-msvc': 1.0.0-rc.6 - '@rolldown/binding-win32-x64-msvc': 1.0.0-rc.6 + '@rolldown/binding-android-arm64': 1.0.0-rc.7 + '@rolldown/binding-darwin-arm64': 1.0.0-rc.7 + '@rolldown/binding-darwin-x64': 1.0.0-rc.7 + '@rolldown/binding-freebsd-x64': 1.0.0-rc.7 + '@rolldown/binding-linux-arm-gnueabihf': 1.0.0-rc.7 + '@rolldown/binding-linux-arm64-gnu': 1.0.0-rc.7 + '@rolldown/binding-linux-arm64-musl': 1.0.0-rc.7 + '@rolldown/binding-linux-ppc64-gnu': 1.0.0-rc.7 + '@rolldown/binding-linux-s390x-gnu': 1.0.0-rc.7 + '@rolldown/binding-linux-x64-gnu': 1.0.0-rc.7 + '@rolldown/binding-linux-x64-musl': 1.0.0-rc.7 + '@rolldown/binding-openharmony-arm64': 1.0.0-rc.7 + '@rolldown/binding-wasm32-wasi': 1.0.0-rc.7 + '@rolldown/binding-win32-arm64-msvc': 1.0.0-rc.7 + '@rolldown/binding-win32-x64-msvc': 1.0.0-rc.7 rollup-license-plugin@3.1.0: dependencies: @@ -15750,12 +15761,12 @@ snapshots: safer-buffer@2.1.2: {} - sass-loader@16.0.7(sass@1.97.3)(webpack@5.105.3(esbuild@0.27.3)): + sass-loader@16.0.7(sass@1.97.3)(webpack@5.105.4(esbuild@0.27.3)): dependencies: neo-async: 2.6.2 optionalDependencies: sass: 1.97.3 - webpack: 5.105.3(esbuild@0.27.3) + webpack: 5.105.4(esbuild@0.27.3) sass@1.97.3: dependencies: @@ -15831,10 +15842,6 @@ snapshots: transitivePeerDependencies: - supports-color - serialize-javascript@6.0.2: - dependencies: - randombytes: 2.1.0 - serialize-javascript@7.0.3: {} serve-index@1.9.2: @@ -16032,11 +16039,11 @@ snapshots: source-map-js@1.2.1: {} - source-map-loader@5.0.0(webpack@5.105.3(esbuild@0.27.3)): + source-map-loader@5.0.0(webpack@5.105.4(esbuild@0.27.3)): dependencies: iconv-lite: 0.6.3 source-map-js: 1.2.1 - webpack: 5.105.3(esbuild@0.27.3) + webpack: 5.105.4(esbuild@0.27.3) source-map-support@0.5.21: dependencies: @@ -16312,14 +16319,13 @@ snapshots: - bare-abort-controller - react-native-b4a - terser-webpack-plugin@5.3.16(esbuild@0.27.3)(webpack@5.105.3(esbuild@0.27.3)): + terser-webpack-plugin@5.3.17(esbuild@0.27.3)(webpack@5.105.4(esbuild@0.27.3)): dependencies: '@jridgewell/trace-mapping': 0.3.31 jest-worker: 27.5.1 schema-utils: 4.3.3 - serialize-javascript: 6.0.2 terser: 5.46.0 - webpack: 5.105.3(esbuild@0.27.3) + webpack: 5.105.4(esbuild@0.27.3) optionalDependencies: esbuild: 0.27.3 @@ -16686,7 +16692,7 @@ snapshots: esbuild: 0.27.3 fdir: 6.5.0(picomatch@4.0.3) picomatch: 4.0.3 - postcss: 8.5.6 + postcss: 8.5.8 rollup: 4.59.0 tinyglobby: 0.2.15 optionalDependencies: @@ -16766,7 +16772,7 @@ snapshots: webidl-conversions@8.0.1: {} - webpack-dev-middleware@7.4.5(tslib@2.8.1)(webpack@5.105.3(esbuild@0.27.3)): + webpack-dev-middleware@7.4.5(tslib@2.8.1)(webpack@5.105.4(esbuild@0.27.3)): dependencies: colorette: 2.0.20 memfs: 4.56.10(tslib@2.8.1) @@ -16775,11 +16781,11 @@ snapshots: range-parser: 1.2.1 schema-utils: 4.3.3 optionalDependencies: - webpack: 5.105.3(esbuild@0.27.3) + webpack: 5.105.4(esbuild@0.27.3) transitivePeerDependencies: - tslib - webpack-dev-server@5.2.3(bufferutil@4.1.0)(tslib@2.8.1)(utf-8-validate@6.0.6)(webpack@5.105.3(esbuild@0.27.3)): + webpack-dev-server@5.2.3(bufferutil@4.1.0)(tslib@2.8.1)(utf-8-validate@6.0.6)(webpack@5.105.4(esbuild@0.27.3)): dependencies: '@types/bonjour': 3.5.13 '@types/connect-history-api-fallback': 1.5.4 @@ -16807,10 +16813,10 @@ snapshots: serve-index: 1.9.2 sockjs: 0.3.24 spdy: 4.0.2 - webpack-dev-middleware: 7.4.5(tslib@2.8.1)(webpack@5.105.3(esbuild@0.27.3)) + webpack-dev-middleware: 7.4.5(tslib@2.8.1)(webpack@5.105.4(esbuild@0.27.3)) ws: 8.19.0(bufferutil@4.1.0)(utf-8-validate@6.0.6) optionalDependencies: - webpack: 5.105.3(esbuild@0.27.3) + webpack: 5.105.4(esbuild@0.27.3) transitivePeerDependencies: - bufferutil - debug @@ -16826,12 +16832,12 @@ snapshots: webpack-sources@3.3.4: {} - webpack-subresource-integrity@5.1.0(webpack@5.105.3(esbuild@0.27.3)): + webpack-subresource-integrity@5.1.0(webpack@5.105.4(esbuild@0.27.3)): dependencies: typed-assert: 1.0.9 - webpack: 5.105.3(esbuild@0.27.3) + webpack: 5.105.4(esbuild@0.27.3) - webpack@5.105.3(esbuild@0.27.3): + webpack@5.105.4(esbuild@0.27.3): dependencies: '@types/eslint-scope': 3.7.7 '@types/estree': 1.0.8 @@ -16855,7 +16861,7 @@ snapshots: neo-async: 2.6.2 schema-utils: 4.3.3 tapable: 2.3.0 - terser-webpack-plugin: 5.3.16(esbuild@0.27.3)(webpack@5.105.3(esbuild@0.27.3)) + terser-webpack-plugin: 5.3.17(esbuild@0.27.3)(webpack@5.105.4(esbuild@0.27.3)) watchpack: 2.5.1 webpack-sources: 3.3.4 transitivePeerDependencies: From f0fc197d88b49bf6bd17ae18e9d12bf02db8fa8f Mon Sep 17 00:00:00 2001 From: Angular Robot <angular-robot@google.com> Date: Thu, 5 Mar 2026 19:51:43 +0000 Subject: [PATCH 110/226] build: update github/codeql-action action to v4.32.6 See associated pull request for more information. --- .github/workflows/codeql.yml | 4 ++-- .github/workflows/scorecard.yml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml index 8e9ed17f7796..f8515e9bb8c8 100644 --- a/.github/workflows/codeql.yml +++ b/.github/workflows/codeql.yml @@ -23,12 +23,12 @@ jobs: with: persist-credentials: false - name: Initialize CodeQL - uses: github/codeql-action/init@89a39a4e59826350b863aa6b6252a07ad50cf83e # v4.32.4 + uses: github/codeql-action/init@0d579ffd059c29b07949a3cce3983f0780820c98 # v4.32.6 with: languages: javascript-typescript build-mode: none config-file: .github/codeql/config.yml - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@89a39a4e59826350b863aa6b6252a07ad50cf83e # v4.32.4 + uses: github/codeql-action/analyze@0d579ffd059c29b07949a3cce3983f0780820c98 # v4.32.6 with: category: '/language:javascript-typescript' diff --git a/.github/workflows/scorecard.yml b/.github/workflows/scorecard.yml index 06ddb2678b04..ed72a6906f0c 100644 --- a/.github/workflows/scorecard.yml +++ b/.github/workflows/scorecard.yml @@ -46,6 +46,6 @@ jobs: # Upload the results to GitHub's code scanning dashboard. - name: 'Upload to code-scanning' - uses: github/codeql-action/upload-sarif@89a39a4e59826350b863aa6b6252a07ad50cf83e # v4.32.4 + uses: github/codeql-action/upload-sarif@0d579ffd059c29b07949a3cce3983f0780820c98 # v4.32.6 with: sarif_file: results.sarif From 6324133c282f5e04ee6e9e46fc5f387cbbefad8e Mon Sep 17 00:00:00 2001 From: Alan Agius <17563226+alan-agius4@users.noreply.github.com> Date: Fri, 6 Mar 2026 08:20:47 +0000 Subject: [PATCH 111/226] fix(@angular/build): normalize line endings for CSP hash generation When `autoCsp` reads an `index.html` with CRLF line endings, it generates hashes based on the CRLF content. However, the transformed file is always written with LF line endings, causing CSP violations. This commit ensures that script content line endings are normalized to LF before hashing to match the output file. Closes #32709 --- .../build/src/utils/index-file/auto-csp.ts | 13 +++-- .../src/utils/index-file/auto-csp_spec.ts | 53 +++++++++++++------ 2 files changed, 42 insertions(+), 24 deletions(-) diff --git a/packages/angular/build/src/utils/index-file/auto-csp.ts b/packages/angular/build/src/utils/index-file/auto-csp.ts index c50e0bfce3f2..0e1dfe3ed916 100644 --- a/packages/angular/build/src/utils/index-file/auto-csp.ts +++ b/packages/angular/build/src/utils/index-file/auto-csp.ts @@ -52,12 +52,7 @@ function isJavascriptMimeType(mimeType: string): boolean { * @returns whether to add the script tag to the dynamically loaded script tag */ function shouldDynamicallyLoadScriptTagBasedOnType(scriptType: string | undefined): boolean { - return ( - scriptType === undefined || - scriptType === '' || - scriptType === 'module' || - isJavascriptMimeType(scriptType) - ); + return !scriptType || scriptType === 'module' || isJavascriptMimeType(scriptType); } /** @@ -67,7 +62,11 @@ function shouldDynamicallyLoadScriptTagBasedOnType(scriptType: string | undefine * @returns The hash of the text formatted appropriately for CSP. */ export function hashTextContent(scriptText: string): string { - const hash = crypto.createHash(HASH_FUNCTION).update(scriptText, 'utf-8').digest('base64'); + // Normalize CRLF to LF to ensure consistent since the rewriter might normalize the line endings. + const hash = crypto + .createHash(HASH_FUNCTION) + .update(scriptText.replace(/\r\n?/g, '\n'), 'utf-8') + .digest('base64'); return `'${HASH_FUNCTION}-${hash}'`; } diff --git a/packages/angular/build/src/utils/index-file/auto-csp_spec.ts b/packages/angular/build/src/utils/index-file/auto-csp_spec.ts index 1ec5f2ab06aa..2f3337004f6e 100644 --- a/packages/angular/build/src/utils/index-file/auto-csp_spec.ts +++ b/packages/angular/build/src/utils/index-file/auto-csp_spec.ts @@ -15,13 +15,13 @@ const getCsps = (html: string) => { ).map((m) => m[1]); // Only capture group. }; -const ONE_HASH_CSP = +const CSP_SINGLE_HASH_REGEX = /script-src 'strict-dynamic' 'sha256-[^']+' https: 'unsafe-inline';object-src 'none';base-uri 'self';/; -const TWO_HASH_CSP = +const CSP_TWO_HASHES_REGEX = /script-src 'strict-dynamic' (?:'sha256-[^']+' ){2}https: 'unsafe-inline';object-src 'none';base-uri 'self';/; -const FOUR_HASH_CSP = +const CSP_FOUR_HASHES_REGEX = /script-src 'strict-dynamic' (?:'sha256-[^']+' ){4}https: 'unsafe-inline';object-src 'none';base-uri 'self';/; describe('auto-csp', () => { @@ -38,8 +38,8 @@ describe('auto-csp', () => { `); const csps = getCsps(result); - expect(csps.length).toBe(1); - expect(csps[0]).toMatch(ONE_HASH_CSP); + expect(csps).toHaveSize(1); + expect(csps[0]).toMatch(CSP_SINGLE_HASH_REGEX); expect(csps[0]).toContain(hashTextContent("console.log('foo');")); }); @@ -56,8 +56,8 @@ describe('auto-csp', () => { `); const csps = getCsps(result); - expect(csps.length).toBe(1); - expect(csps[0]).toMatch(ONE_HASH_CSP); + expect(csps).toHaveSize(1); + expect(csps[0]).toMatch(CSP_SINGLE_HASH_REGEX); expect(result).toContain(`var scripts = [['./main.js', '', false, false]];`); }); @@ -74,8 +74,8 @@ describe('auto-csp', () => { `); const csps = getCsps(result); - expect(csps.length).toBe(1); - expect(csps[0]).toMatch(ONE_HASH_CSP); + expect(csps).toHaveSize(1); + expect(csps[0]).toMatch(CSP_SINGLE_HASH_REGEX); // Our loader script appears after the HTML text content. expect(result).toMatch( /Some text<\/div>\s*<script>\s*var scripts = \[\['.\/main.js', '', false, false\]\];/, @@ -99,8 +99,8 @@ describe('auto-csp', () => { `); const csps = getCsps(result); - expect(csps.length).toBe(1); - expect(csps[0]).toMatch(TWO_HASH_CSP); + expect(csps).toHaveSize(1); + expect(csps[0]).toMatch(CSP_TWO_HASHES_REGEX); expect(result).toContain( // eslint-disable-next-line max-len `var scripts = [['./main1.js', '', false, false],['./main2.js', '', true, false],['./main3.js', 'module', true, true]];`, @@ -127,8 +127,8 @@ describe('auto-csp', () => { `); const csps = getCsps(result); - expect(csps.length).toBe(1); - expect(csps[0]).toMatch(ONE_HASH_CSP); + expect(csps).toHaveSize(1); + expect(csps[0]).toMatch(CSP_SINGLE_HASH_REGEX); // & encodes correctly expect(result).toContain(`'/foo&bar'`); // Impossible to escape a string and create invalid loader JS with a ' @@ -158,9 +158,9 @@ describe('auto-csp', () => { `); const csps = getCsps(result); - expect(csps.length).toBe(1); + expect(csps).toHaveSize(1); // Exactly four hashes for the four scripts that remain (inline, loader, inline, loader). - expect(csps[0]).toMatch(FOUR_HASH_CSP); + expect(csps[0]).toMatch(CSP_FOUR_HASHES_REGEX); expect(csps[0]).toContain(hashTextContent("console.log('foo');")); expect(csps[0]).toContain(hashTextContent("console.log('bar');")); // Loader script for main.js and main2.js appear after 'foo' and before 'bar'. @@ -190,8 +190,8 @@ describe('auto-csp', () => { `); const csps = getCsps(result); - expect(csps.length).toBe(1); - expect(csps[0]).toMatch(ONE_HASH_CSP); + expect(csps).toHaveSize(1); + expect(csps[0]).toMatch(CSP_SINGLE_HASH_REGEX); expect(result).toContain( // eslint-disable-next-line max-len @@ -202,4 +202,23 @@ describe('auto-csp', () => { // Only one loader script is created. expect(Array.from(result.matchAll(/<script>/g)).length).toEqual(1); }); + + it('should rewrite a single inline script with CRLF', async () => { + const result = await autoCsp(` + <html> + <head> + </head> + <body> + <script>\r\nconsole.log('foo');\r\n</script> + <div>Some text </div> + </body> + </html>\r\n + `); + + const csps = getCsps(result); + expect(result).not.toContain(`\r\n`); + expect(csps).toHaveSize(1); + expect(csps[0]).toMatch(CSP_SINGLE_HASH_REGEX); + expect(csps[0]).toContain(hashTextContent(`\r\nconsole.log('foo');\r\n`)); + }); }); From f30f8900efb8ad9a835630f57e3667346926dc4d Mon Sep 17 00:00:00 2001 From: Alan Agius <17563226+alan-agius4@users.noreply.github.com> Date: Fri, 6 Mar 2026 13:44:21 +0000 Subject: [PATCH 112/226] fix(@angular/build): resolve assets correctly during i18n prerendering In i18n static output builds, requests for assets made during prerendering (e.g., via `HttpClient`) include the locale's `baseHref`. However, the in-memory asset mapping used by the patched server-side `fetch` did not account for this `baseHref`, causing assets to fail to resolve. Closes #32713 --- .../src/utils/server-rendering/prerender.ts | 4 +- ...utes-output-mode-static-i18n-http-calls.ts | 137 ++++++++++++++++++ 2 files changed, 140 insertions(+), 1 deletion(-) create mode 100644 tests/e2e/tests/build/server-rendering/server-routes-output-mode-static-i18n-http-calls.ts diff --git a/packages/angular/build/src/utils/server-rendering/prerender.ts b/packages/angular/build/src/utils/server-rendering/prerender.ts index 39d0f0934c92..d2f60744381a 100644 --- a/packages/angular/build/src/utils/server-rendering/prerender.ts +++ b/packages/angular/build/src/utils/server-rendering/prerender.ts @@ -96,7 +96,9 @@ export async function prerenderPages( const assetsReversed: Record</** Destination */ string, /** Source */ string> = {}; for (const { source, destination } of assets) { - assetsReversed[addLeadingSlash(toPosixPath(destination))] = source; + // Assets are not stored with baseHref when using i18n, + // we append the base href so that requests are resolved correctly. + assetsReversed[joinUrlParts(baseHref, toPosixPath(destination))] = source; } // Get routes to prerender diff --git a/tests/e2e/tests/build/server-rendering/server-routes-output-mode-static-i18n-http-calls.ts b/tests/e2e/tests/build/server-rendering/server-routes-output-mode-static-i18n-http-calls.ts new file mode 100644 index 000000000000..964c7827c23e --- /dev/null +++ b/tests/e2e/tests/build/server-rendering/server-routes-output-mode-static-i18n-http-calls.ts @@ -0,0 +1,137 @@ +import assert, { match } from 'node:assert'; +import { join } from 'node:path'; +import { readFile, writeMultipleFiles } from '../../../utils/fs'; +import { ng, noSilentNg, silentNg } from '../../../utils/process'; +import { getGlobalVariable } from '../../../utils/env'; +import { installWorkspacePackages, uninstallPackage } from '../../../utils/packages'; +import { useSha } from '../../../utils/project'; +import { langTranslations, setupI18nConfig } from '../../i18n/setup'; + +export default async function () { + assert( + getGlobalVariable('argv')['esbuild'], + 'This test should not be called in the Webpack suite.', + ); + + // Setup project + await setupI18nConfig(); + + // Forcibly remove in case another test doesn't clean itself up. + await uninstallPackage('@angular/ssr'); + await ng('add', '@angular/ssr', '--skip-confirmation', '--skip-install'); + await useSha(); + await installWorkspacePackages(); + + await writeMultipleFiles({ + // Add asset + 'public/media.json': JSON.stringify({ dataFromAssets: true }), + // Update component to do an HTTP call to asset and API. + 'src/app/app.ts': ` + import { ChangeDetectorRef, Component, inject } from '@angular/core'; + import { JsonPipe } from '@angular/common'; + import { RouterOutlet } from '@angular/router'; + import { HttpClient } from '@angular/common/http'; + + @Component({ + selector: 'app-root', + imports: [JsonPipe, RouterOutlet], + template: \` + <p>{{ assetsData | json }}</p> + <p>{{ apiData | json }}</p> + <router-outlet></router-outlet> + \`, + }) + export class App { + assetsData: any; + apiData: any; + private readonly cdr: ChangeDetectorRef = inject(ChangeDetectorRef); + + constructor() { + const http = inject(HttpClient); + + http.get('media.json').toPromise().then((d) => { + this.assetsData = d; + this.cdr.markForCheck(); + }); + + http.get('/api').toPromise().then((d) => { + this.apiData = d; + this.cdr.markForCheck(); + }); + } + } + `, + // Add http client and route + 'src/app/app.config.ts': ` + import { ApplicationConfig } from '@angular/core'; + import { provideRouter } from '@angular/router'; + + import { Home } from './home/home'; + import { provideClientHydration } from '@angular/platform-browser'; + import { provideHttpClient, withFetch } from '@angular/common/http'; + + export const appConfig: ApplicationConfig = { + providers: [ + provideRouter([{ + path: 'home', + component: Home, + }]), + provideClientHydration(), + provideHttpClient(withFetch()), + ], + }; + `, + 'src/server.ts': ` + import { AngularNodeAppEngine, writeResponseToNodeResponse, isMainModule, createNodeRequestHandler } from '@angular/ssr/node'; + import express from 'express'; + import { join } from 'node:path'; + + export function app(): express.Express { + const server = express(); + const browserDistFolder = join(import.meta.dirname, '../browser'); + const angularNodeAppEngine = new AngularNodeAppEngine(); + + server.get('/api', (req, res) => { + res.json({ dataFromAPI: true }) + }); + + server.use(express.static(browserDistFolder, { + maxAge: '1y', + index: 'index.html' + })); + + server.use((req, res, next) => { + angularNodeAppEngine.handle(req) + .then((response) => response ? writeResponseToNodeResponse(response, res) : next()) + .catch(next); + }); + return server; + } + + const server = app(); + + if (isMainModule(import.meta.url)) { + const port = process.env['PORT'] || 4000; + server.listen(port, (error) => { + if (error) { + throw error; + } + console.log(\`Node Express server listening on http://localhost:\${port}\`); + }); + } + + export const reqHandler = createNodeRequestHandler(server); + `, + }); + + await silentNg('generate', 'component', 'home'); + + await noSilentNg('build', '--output-mode=static'); + + for (const { lang, outputPath } of langTranslations) { + const contents = await readFile(join(outputPath, 'home/index.html')); + match(contents, /<p>{[\S\s]*"dataFromAssets":[\s\S]*true[\S\s]*}<\/p>/); + match(contents, /<p>{[\S\s]*"dataFromAPI":[\s\S]*true[\S\s]*}<\/p>/); + match(contents, new RegExp(`<base href="\\/${lang}\\/">`)); + } +} From ad0fd5f41fc6ee5d920fb3c725f09f17d86d2ab4 Mon Sep 17 00:00:00 2001 From: Charles Lyding <19598772+clydin@users.noreply.github.com> Date: Fri, 6 Mar 2026 13:49:07 -0500 Subject: [PATCH 113/226] perf(@angular/cli): avoid redundant package version resolution in ng add The `ng add` command would previously resolve the package version from the registry multiple times during execution. This change updates the package identifier with the exact version from the manifest once it has been fetched from the registry, preventing subsequent redundant lookups. Additionally, the already-parsed package identifier is now passed directly to the package manager's `getManifest` method. --- packages/angular/cli/src/commands/add/cli.ts | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/packages/angular/cli/src/commands/add/cli.ts b/packages/angular/cli/src/commands/add/cli.ts index a41c9b54c7f3..b84de70db580 100644 --- a/packages/angular/cli/src/commands/add/cli.ts +++ b/packages/angular/cli/src/commands/add/cli.ts @@ -489,12 +489,9 @@ export default class AddCommandModule let manifest; try { - manifest = await this.context.packageManager.getManifest( - context.packageIdentifier.toString(), - { - registry, - }, - ); + manifest = await this.context.packageManager.getManifest(context.packageIdentifier, { + registry, + }); } catch (e) { assertIsError(e); throw new CommandError( @@ -508,6 +505,17 @@ export default class AddCommandModule ); } + // Avoid fully resolving the package version from the registry again in later steps + if (context.packageIdentifier.registry) { + assert(context.packageIdentifier.name, 'Registry package identifier must have a name'); + context.packageIdentifier = npa.resolve( + context.packageIdentifier.name, + // `save-prefix` option is ignored by some package managers so the caret is needed to ensure + // that the value in the project package.json is correct. + '^' + manifest.version, + ); + } + context.hasSchematics = !!manifest.schematics; context.savePackage = manifest['ng-add']?.save; context.collectionName = manifest.name; From a39a33128fb56e9c65ea89e06c4f127252d3b220 Mon Sep 17 00:00:00 2001 From: Charles Lyding <19598772+clydin@users.noreply.github.com> Date: Fri, 6 Mar 2026 14:27:12 -0500 Subject: [PATCH 114/226] perf(@angular/cli): cache root manifest and resolve restricted package exports in ng add This change enhances the `ng add` command's performance by caching the root project manifest (`package.json`) to avoid redundant disk reads and JSON parsing during peer dependency conflict checks. Additionally, it improves the robustness of `package.json` resolution for installed packages. Previously, resolving `package.json` could fail if a third-party package used the Node.js `"exports"` field without explicitly exporting its `package.json`. The CLI now correctly handles this by falling back to resolving the package's entry point and traversing upwards to find the manifest. --- packages/angular/cli/src/commands/add/cli.ts | 85 ++++++++++++++------ 1 file changed, 59 insertions(+), 26 deletions(-) diff --git a/packages/angular/cli/src/commands/add/cli.ts b/packages/angular/cli/src/commands/add/cli.ts index b84de70db580..c7853ce8b052 100644 --- a/packages/angular/cli/src/commands/add/cli.ts +++ b/packages/angular/cli/src/commands/add/cli.ts @@ -8,9 +8,10 @@ import { Listr, ListrRenderer, ListrTaskWrapper, color, figures } from 'listr2'; import assert from 'node:assert'; +import { existsSync } from 'node:fs'; import fs from 'node:fs/promises'; import { createRequire } from 'node:module'; -import { dirname, join } from 'node:path'; +import { basename, dirname, join } from 'node:path'; import npa from 'npm-package-arg'; import semver, { Range, compare, intersects, prerelease, satisfies, valid } from 'semver'; import { Argv } from 'yargs'; @@ -107,6 +108,7 @@ export default class AddCommandModule private readonly schematicName = 'ng-add'; private rootRequire = createRequire(this.context.root + '/'); #projectVersionCache = new Map<string, string | null>(); + #rootManifestCache: PackageManifest | null = null; override async builder(argv: Argv): Promise<Argv<AddCommandArgs>> { const localYargs = (await super.builder(argv)) @@ -156,6 +158,7 @@ export default class AddCommandModule async run(options: Options<AddCommandArgs> & OtherOptions): Promise<number | void> { this.#projectVersionCache.clear(); + this.#rootManifestCache = null; const { logger } = this.context; const { collection, skipConfirmation } = options; @@ -665,18 +668,7 @@ export default class AddCommandModule } private isPackageInstalled(name: string): boolean { - try { - this.rootRequire.resolve(join(name, 'package.json')); - - return true; - } catch (e) { - assertIsError(e); - if (e.code !== 'MODULE_NOT_FOUND') { - throw e; - } - } - - return false; + return !!this.resolvePackageJson(name); } private executeSchematic( @@ -715,12 +707,7 @@ export default class AddCommandModule return cachedVersion; } - const { root } = this.context; - let installedPackagePath; - try { - installedPackagePath = this.rootRequire.resolve(join(name, 'package.json')); - } catch {} - + const installedPackagePath = this.resolvePackageJson(name); if (installedPackagePath) { try { const installedPackage = JSON.parse( @@ -732,13 +719,7 @@ export default class AddCommandModule } catch {} } - let projectManifest; - try { - projectManifest = JSON.parse( - await fs.readFile(join(root, 'package.json'), 'utf-8'), - ) as PackageManifest; - } catch {} - + const projectManifest = await this.getProjectManifest(); if (projectManifest) { const version = projectManifest.dependencies?.[name] || projectManifest.devDependencies?.[name]; @@ -754,6 +735,58 @@ export default class AddCommandModule return null; } + private async getProjectManifest(): Promise<PackageManifest | null> { + if (this.#rootManifestCache) { + return this.#rootManifestCache; + } + + const { root } = this.context; + try { + this.#rootManifestCache = JSON.parse( + await fs.readFile(join(root, 'package.json'), 'utf-8'), + ) as PackageManifest; + + return this.#rootManifestCache; + } catch { + return null; + } + } + + private resolvePackageJson(name: string): string | undefined { + try { + return this.rootRequire.resolve(join(name, 'package.json')); + } catch (e) { + assertIsError(e); + if (e.code === 'ERR_PACKAGE_PATH_NOT_EXPORTED') { + try { + const mainPath = this.rootRequire.resolve(name); + let directory = dirname(mainPath); + + // Stop at the node_modules boundary or the root of the file system + while (directory && basename(directory) !== 'node_modules') { + const packageJsonPath = join(directory, 'package.json'); + if (existsSync(packageJsonPath)) { + return packageJsonPath; + } + + const parent = dirname(directory); + if (parent === directory) { + break; + } + directory = parent; + } + } catch (e) { + assertIsError(e); + this.context.logger.debug( + `Failed to resolve package '${name}' during fallback: ${e.message}`, + ); + } + } + } + + return undefined; + } + private async getPeerDependencyConflicts(manifest: PackageManifest): Promise<string[] | false> { if (!manifest.peerDependencies) { return false; From 832bb4915f76df00ffa531b54d3771dea79499cf Mon Sep 17 00:00:00 2001 From: Kristiyan Kostadinov <crisbeto@abv.bg> Date: Mon, 9 Mar 2026 07:59:52 +0100 Subject: [PATCH 115/226] build: update to the TypeScript 6 RC Updates the repo to the release candidate of TypeScript 6. --- MODULE.bazel | 6 +- MODULE.bazel.lock | 6 +- package.json | 2 +- packages/ngtools/webpack/package.json | 2 +- pnpm-lock.yaml | 136 +++++++++++++------------- 5 files changed, 76 insertions(+), 76 deletions(-) diff --git a/MODULE.bazel b/MODULE.bazel index 46fd97d008bb..091f26b8786a 100644 --- a/MODULE.bazel +++ b/MODULE.bazel @@ -165,9 +165,9 @@ use_repo(npm, "npm") rules_ts_ext = use_extension("@aspect_rules_ts//ts:extensions.bzl", "ext") rules_ts_ext.deps( name = "angular_cli_npm_typescript", - # Obtained by: npm info typescript@6.0.0-beta dist.integrity - ts_integrity = "sha512-CldZdztDpQRLM1HC6WDQjQkQN5Ub5zRau737a1diGh3lPmb9oRsaWHk1y5iqK0o7+1bNJ0oXfEGRkAogFZBL+Q==", - ts_version = "6.0.0-beta", + # Obtained by: npm info typescript@6.0.1-rc dist.integrity + ts_integrity = "sha512-7XlzYb+p/7YxX6qSOzwB4mxVFRdAgWWkj1PgAZ+jzldeuFV6Z77vwFbNxHsUXAL/bhlWY2jCT8shLwDJR8337g==", + ts_version = "6.0.1-rc", ) use_repo(rules_ts_ext, **{"npm_typescript": "angular_cli_npm_typescript"}) diff --git a/MODULE.bazel.lock b/MODULE.bazel.lock index 3ac5124b40e5..7c42b3b10b4e 100644 --- a/MODULE.bazel.lock +++ b/MODULE.bazel.lock @@ -571,7 +571,7 @@ "@@aspect_rules_ts+//ts:extensions.bzl%ext": { "general": { "bzlTransitiveDigest": "6NyLUdrb79stFKm8oWIBK2q65cT5Upbr8IR2Qwsywu8=", - "usagesDigest": "WMA7n3NdJjSGUvkfejE4MruMdWMQ15/EpOmPFuISD6A=", + "usagesDigest": "araovWFelvfLxh/XEV9hTACAzPA8hNkpItmM5kCKZiQ=", "recordedFileInputs": { "@@rules_browsers+//package.json": "772d873d450a539e2133635aeb5e63744cf1cec86e6b37aeecd9267a147fb0d7" }, @@ -581,8 +581,8 @@ "angular_cli_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": "6.0.1-rc", + "integrity": "sha512-7XlzYb+p/7YxX6qSOzwB4mxVFRdAgWWkj1PgAZ+jzldeuFV6Z77vwFbNxHsUXAL/bhlWY2jCT8shLwDJR8337g==", "urls": [ "https://registry.npmjs.org/typescript/-/typescript-{}.tgz" ] diff --git a/package.json b/package.json index 64a306266a35..b331084b5c4e 100644 --- a/package.json +++ b/package.json @@ -127,7 +127,7 @@ "semver": "7.7.4", "source-map-support": "0.5.21", "tslib": "2.8.1", - "typescript": "6.0.0-beta", + "typescript": "6.0.1-rc", "undici": "7.22.0", "unenv": "^1.10.0", "verdaccio": "6.2.9", diff --git a/packages/ngtools/webpack/package.json b/packages/ngtools/webpack/package.json index 2ad302dd14b4..1aab364f0abb 100644 --- a/packages/ngtools/webpack/package.json +++ b/packages/ngtools/webpack/package.json @@ -29,7 +29,7 @@ "@angular-devkit/core": "workspace:0.0.0-PLACEHOLDER", "@angular/compiler": "22.0.0-next.0", "@angular/compiler-cli": "22.0.0-next.0", - "typescript": "6.0.0-beta", + "typescript": "6.0.1-rc", "webpack": "5.105.4" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 7e25a3a0ed65..12432f9bf209 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -33,7 +33,7 @@ importers: version: 22.0.0-next.0 '@angular/compiler-cli': specifier: 22.0.0-next.0 - version: 22.0.0-next.0(@angular/compiler@22.0.0-next.0)(typescript@6.0.0-beta) + version: 22.0.0-next.0(@angular/compiler@22.0.0-next.0)(typescript@6.0.1-rc) '@angular/core': specifier: 22.0.0-next.0 version: 22.0.0-next.0(@angular/compiler@22.0.0-next.0)(rxjs@7.8.2)(zone.js@0.16.1) @@ -42,7 +42,7 @@ importers: version: 22.0.0-next.0(@angular/common@22.0.0-next.0(@angular/core@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@22.0.0-next.0(@angular/animations@22.0.0-next.0(@angular/core@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@22.0.0-next.0(@angular/core@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(rxjs@7.8.2)(zone.js@0.16.1)))(rxjs@7.8.2) '@angular/localize': specifier: 22.0.0-next.0 - version: 22.0.0-next.0(@angular/compiler-cli@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(typescript@6.0.0-beta))(@angular/compiler@22.0.0-next.0) + version: 22.0.0-next.0(@angular/compiler-cli@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(typescript@6.0.1-rc))(@angular/compiler@22.0.0-next.0) '@angular/material': specifier: 21.3.0-next.0 version: 21.3.0-next.0(3b5e22ded8635c9a08f958235c8786ff) @@ -165,10 +165,10 @@ importers: version: 1.1.9 '@typescript-eslint/eslint-plugin': specifier: 8.56.1 - version: 8.56.1(@typescript-eslint/parser@8.56.1(eslint@10.0.2(jiti@2.6.1))(typescript@6.0.0-beta))(eslint@10.0.2(jiti@2.6.1))(typescript@6.0.0-beta) + version: 8.56.1(@typescript-eslint/parser@8.56.1(eslint@10.0.2(jiti@2.6.1))(typescript@6.0.1-rc))(eslint@10.0.2(jiti@2.6.1))(typescript@6.0.1-rc) '@typescript-eslint/parser': specifier: 8.56.1 - version: 8.56.1(eslint@10.0.2(jiti@2.6.1))(typescript@6.0.0-beta) + version: 8.56.1(eslint@10.0.2(jiti@2.6.1))(typescript@6.0.1-rc) ajv: specifier: 8.18.0 version: 8.18.0 @@ -189,7 +189,7 @@ importers: version: 10.1.8(eslint@10.0.2(jiti@2.6.1)) eslint-plugin-import: specifier: 2.32.0 - version: 2.32.0(@typescript-eslint/parser@8.56.1(eslint@10.0.2(jiti@2.6.1))(typescript@6.0.0-beta))(eslint@10.0.2(jiti@2.6.1)) + version: 2.32.0(@typescript-eslint/parser@8.56.1(eslint@10.0.2(jiti@2.6.1))(typescript@6.0.1-rc))(eslint@10.0.2(jiti@2.6.1)) express: specifier: 5.2.1 version: 5.2.1 @@ -249,7 +249,7 @@ importers: version: 3.8.1 puppeteer: specifier: 24.38.0 - version: 24.38.0(bufferutil@4.1.0)(typescript@6.0.0-beta)(utf-8-validate@6.0.6) + version: 24.38.0(bufferutil@4.1.0)(typescript@6.0.1-rc)(utf-8-validate@6.0.6) quicktype-core: specifier: 23.2.6 version: 23.2.6(encoding@0.1.13) @@ -261,7 +261,7 @@ importers: version: 3.1.0 rollup-plugin-dts: specifier: 6.3.0 - version: 6.3.0(rollup@4.59.0)(typescript@6.0.0-beta) + version: 6.3.0(rollup@4.59.0)(typescript@6.0.1-rc) rollup-plugin-sourcemaps2: specifier: 0.5.6 version: 0.5.6(@types/node@22.19.13)(rollup@4.59.0) @@ -275,8 +275,8 @@ importers: specifier: 2.8.1 version: 2.8.1 typescript: - specifier: 6.0.0-beta - version: 6.0.0-beta + specifier: 6.0.1-rc + version: 6.0.1-rc undici: specifier: 7.22.0 version: 7.22.0 @@ -418,7 +418,7 @@ importers: version: 4.4.2 ng-packagr: specifier: 22.0.0-next.0 - version: 22.0.0-next.0(@angular/compiler-cli@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(typescript@6.0.0-beta))(tslib@2.8.1)(typescript@6.0.0-beta) + version: 22.0.0-next.0(@angular/compiler-cli@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(typescript@6.0.1-rc))(tslib@2.8.1)(typescript@6.0.1-rc) postcss: specifier: 8.5.8 version: 8.5.8 @@ -660,7 +660,7 @@ importers: version: 8.5.8 postcss-loader: specifier: 8.2.1 - version: 8.2.1(postcss@8.5.8)(typescript@6.0.0-beta)(webpack@5.105.4(esbuild@0.27.3)) + version: 8.2.1(postcss@8.5.8)(typescript@6.0.1-rc)(webpack@5.105.4(esbuild@0.27.3)) resolve-url-loader: specifier: 5.0.0 version: 5.0.0 @@ -715,7 +715,7 @@ importers: version: 3.0.4(bufferutil@4.1.0)(utf-8-validate@6.0.6) ng-packagr: specifier: 22.0.0-next.0 - version: 22.0.0-next.0(@angular/compiler-cli@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(typescript@6.0.0-beta))(tslib@2.8.1)(typescript@6.0.0-beta) + version: 22.0.0-next.0(@angular/compiler-cli@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(typescript@6.0.1-rc))(tslib@2.8.1)(typescript@6.0.1-rc) undici: specifier: 7.22.0 version: 7.22.0 @@ -811,10 +811,10 @@ importers: version: 22.0.0-next.0 '@angular/compiler-cli': specifier: 22.0.0-next.0 - version: 22.0.0-next.0(@angular/compiler@22.0.0-next.0)(typescript@6.0.0-beta) + version: 22.0.0-next.0(@angular/compiler@22.0.0-next.0)(typescript@6.0.1-rc) typescript: - specifier: 6.0.0-beta - version: 6.0.0-beta + specifier: 6.0.1-rc + version: 6.0.1-rc webpack: specifier: 5.105.4 version: 5.105.4(esbuild@0.27.3) @@ -7853,8 +7853,8 @@ packages: engines: {node: '>=14.17'} hasBin: true - typescript@6.0.0-beta: - resolution: {integrity: sha512-CldZdztDpQRLM1HC6WDQjQkQN5Ub5zRau737a1diGh3lPmb9oRsaWHk1y5iqK0o7+1bNJ0oXfEGRkAogFZBL+Q==} + typescript@6.0.1-rc: + resolution: {integrity: sha512-7XlzYb+p/7YxX6qSOzwB4mxVFRdAgWWkj1PgAZ+jzldeuFV6Z77vwFbNxHsUXAL/bhlWY2jCT8shLwDJR8337g==} engines: {node: '>=14.17'} hasBin: true @@ -8486,7 +8486,7 @@ snapshots: rxjs: 7.8.2 tslib: 2.8.1 - '@angular/compiler-cli@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(typescript@6.0.0-beta)': + '@angular/compiler-cli@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(typescript@6.0.1-rc)': dependencies: '@angular/compiler': 22.0.0-next.0 '@babel/core': 7.29.0 @@ -8498,7 +8498,7 @@ snapshots: tslib: 2.8.1 yargs: 18.0.0 optionalDependencies: - typescript: 6.0.0-beta + typescript: 6.0.1-rc transitivePeerDependencies: - supports-color @@ -8523,10 +8523,10 @@ snapshots: rxjs: 7.8.2 tslib: 2.8.1 - '@angular/localize@22.0.0-next.0(@angular/compiler-cli@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(typescript@6.0.0-beta))(@angular/compiler@22.0.0-next.0)': + '@angular/localize@22.0.0-next.0(@angular/compiler-cli@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(typescript@6.0.1-rc))(@angular/compiler@22.0.0-next.0)': dependencies: '@angular/compiler': 22.0.0-next.0 - '@angular/compiler-cli': 22.0.0-next.0(@angular/compiler@22.0.0-next.0)(typescript@6.0.0-beta) + '@angular/compiler-cli': 22.0.0-next.0(@angular/compiler@22.0.0-next.0)(typescript@6.0.1-rc) '@babel/core': 7.29.0 '@types/babel__core': 7.20.5 tinyglobby: 0.2.15 @@ -11380,40 +11380,40 @@ snapshots: '@types/node': 22.19.13 optional: true - '@typescript-eslint/eslint-plugin@8.56.1(@typescript-eslint/parser@8.56.1(eslint@10.0.2(jiti@2.6.1))(typescript@6.0.0-beta))(eslint@10.0.2(jiti@2.6.1))(typescript@6.0.0-beta)': + '@typescript-eslint/eslint-plugin@8.56.1(@typescript-eslint/parser@8.56.1(eslint@10.0.2(jiti@2.6.1))(typescript@6.0.1-rc))(eslint@10.0.2(jiti@2.6.1))(typescript@6.0.1-rc)': dependencies: '@eslint-community/regexpp': 4.12.2 - '@typescript-eslint/parser': 8.56.1(eslint@10.0.2(jiti@2.6.1))(typescript@6.0.0-beta) + '@typescript-eslint/parser': 8.56.1(eslint@10.0.2(jiti@2.6.1))(typescript@6.0.1-rc) '@typescript-eslint/scope-manager': 8.56.1 - '@typescript-eslint/type-utils': 8.56.1(eslint@10.0.2(jiti@2.6.1))(typescript@6.0.0-beta) - '@typescript-eslint/utils': 8.56.1(eslint@10.0.2(jiti@2.6.1))(typescript@6.0.0-beta) + '@typescript-eslint/type-utils': 8.56.1(eslint@10.0.2(jiti@2.6.1))(typescript@6.0.1-rc) + '@typescript-eslint/utils': 8.56.1(eslint@10.0.2(jiti@2.6.1))(typescript@6.0.1-rc) '@typescript-eslint/visitor-keys': 8.56.1 eslint: 10.0.2(jiti@2.6.1) ignore: 7.0.5 natural-compare: 1.4.0 - ts-api-utils: 2.4.0(typescript@6.0.0-beta) - typescript: 6.0.0-beta + ts-api-utils: 2.4.0(typescript@6.0.1-rc) + typescript: 6.0.1-rc transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.56.1(eslint@10.0.2(jiti@2.6.1))(typescript@6.0.0-beta)': + '@typescript-eslint/parser@8.56.1(eslint@10.0.2(jiti@2.6.1))(typescript@6.0.1-rc)': dependencies: '@typescript-eslint/scope-manager': 8.56.1 '@typescript-eslint/types': 8.56.1 - '@typescript-eslint/typescript-estree': 8.56.1(typescript@6.0.0-beta) + '@typescript-eslint/typescript-estree': 8.56.1(typescript@6.0.1-rc) '@typescript-eslint/visitor-keys': 8.56.1 debug: 4.4.3(supports-color@10.2.2) eslint: 10.0.2(jiti@2.6.1) - typescript: 6.0.0-beta + typescript: 6.0.1-rc transitivePeerDependencies: - supports-color - '@typescript-eslint/project-service@8.56.1(typescript@6.0.0-beta)': + '@typescript-eslint/project-service@8.56.1(typescript@6.0.1-rc)': dependencies: - '@typescript-eslint/tsconfig-utils': 8.56.1(typescript@6.0.0-beta) + '@typescript-eslint/tsconfig-utils': 8.56.1(typescript@6.0.1-rc) '@typescript-eslint/types': 8.56.1 debug: 4.4.3(supports-color@10.2.2) - typescript: 6.0.0-beta + typescript: 6.0.1-rc transitivePeerDependencies: - supports-color @@ -11422,47 +11422,47 @@ snapshots: '@typescript-eslint/types': 8.56.1 '@typescript-eslint/visitor-keys': 8.56.1 - '@typescript-eslint/tsconfig-utils@8.56.1(typescript@6.0.0-beta)': + '@typescript-eslint/tsconfig-utils@8.56.1(typescript@6.0.1-rc)': dependencies: - typescript: 6.0.0-beta + typescript: 6.0.1-rc - '@typescript-eslint/type-utils@8.56.1(eslint@10.0.2(jiti@2.6.1))(typescript@6.0.0-beta)': + '@typescript-eslint/type-utils@8.56.1(eslint@10.0.2(jiti@2.6.1))(typescript@6.0.1-rc)': dependencies: '@typescript-eslint/types': 8.56.1 - '@typescript-eslint/typescript-estree': 8.56.1(typescript@6.0.0-beta) - '@typescript-eslint/utils': 8.56.1(eslint@10.0.2(jiti@2.6.1))(typescript@6.0.0-beta) + '@typescript-eslint/typescript-estree': 8.56.1(typescript@6.0.1-rc) + '@typescript-eslint/utils': 8.56.1(eslint@10.0.2(jiti@2.6.1))(typescript@6.0.1-rc) debug: 4.4.3(supports-color@10.2.2) eslint: 10.0.2(jiti@2.6.1) - ts-api-utils: 2.4.0(typescript@6.0.0-beta) - typescript: 6.0.0-beta + ts-api-utils: 2.4.0(typescript@6.0.1-rc) + typescript: 6.0.1-rc transitivePeerDependencies: - supports-color '@typescript-eslint/types@8.56.1': {} - '@typescript-eslint/typescript-estree@8.56.1(typescript@6.0.0-beta)': + '@typescript-eslint/typescript-estree@8.56.1(typescript@6.0.1-rc)': dependencies: - '@typescript-eslint/project-service': 8.56.1(typescript@6.0.0-beta) - '@typescript-eslint/tsconfig-utils': 8.56.1(typescript@6.0.0-beta) + '@typescript-eslint/project-service': 8.56.1(typescript@6.0.1-rc) + '@typescript-eslint/tsconfig-utils': 8.56.1(typescript@6.0.1-rc) '@typescript-eslint/types': 8.56.1 '@typescript-eslint/visitor-keys': 8.56.1 debug: 4.4.3(supports-color@10.2.2) minimatch: 10.2.4 semver: 7.7.4 tinyglobby: 0.2.15 - ts-api-utils: 2.4.0(typescript@6.0.0-beta) - typescript: 6.0.0-beta + ts-api-utils: 2.4.0(typescript@6.0.1-rc) + typescript: 6.0.1-rc transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.56.1(eslint@10.0.2(jiti@2.6.1))(typescript@6.0.0-beta)': + '@typescript-eslint/utils@8.56.1(eslint@10.0.2(jiti@2.6.1))(typescript@6.0.1-rc)': dependencies: '@eslint-community/eslint-utils': 4.9.1(eslint@10.0.2(jiti@2.6.1)) '@typescript-eslint/scope-manager': 8.56.1 '@typescript-eslint/types': 8.56.1 - '@typescript-eslint/typescript-estree': 8.56.1(typescript@6.0.0-beta) + '@typescript-eslint/typescript-estree': 8.56.1(typescript@6.0.1-rc) eslint: 10.0.2(jiti@2.6.1) - typescript: 6.0.0-beta + typescript: 6.0.1-rc transitivePeerDependencies: - supports-color @@ -12537,14 +12537,14 @@ snapshots: object-assign: 4.1.1 vary: 1.1.2 - cosmiconfig@9.0.0(typescript@6.0.0-beta): + cosmiconfig@9.0.0(typescript@6.0.1-rc): dependencies: env-paths: 2.2.1 import-fresh: 3.3.1 js-yaml: 4.1.1 parse-json: 5.2.0 optionalDependencies: - typescript: 6.0.0-beta + typescript: 6.0.1-rc cross-fetch@4.1.0(encoding@0.1.13): dependencies: @@ -13032,17 +13032,17 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-module-utils@2.12.1(@typescript-eslint/parser@8.56.1(eslint@10.0.2(jiti@2.6.1))(typescript@6.0.0-beta))(eslint-import-resolver-node@0.3.9)(eslint@10.0.2(jiti@2.6.1)): + eslint-module-utils@2.12.1(@typescript-eslint/parser@8.56.1(eslint@10.0.2(jiti@2.6.1))(typescript@6.0.1-rc))(eslint-import-resolver-node@0.3.9)(eslint@10.0.2(jiti@2.6.1)): dependencies: debug: 3.2.7 optionalDependencies: - '@typescript-eslint/parser': 8.56.1(eslint@10.0.2(jiti@2.6.1))(typescript@6.0.0-beta) + '@typescript-eslint/parser': 8.56.1(eslint@10.0.2(jiti@2.6.1))(typescript@6.0.1-rc) eslint: 10.0.2(jiti@2.6.1) eslint-import-resolver-node: 0.3.9 transitivePeerDependencies: - supports-color - eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.56.1(eslint@10.0.2(jiti@2.6.1))(typescript@6.0.0-beta))(eslint@10.0.2(jiti@2.6.1)): + eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.56.1(eslint@10.0.2(jiti@2.6.1))(typescript@6.0.1-rc))(eslint@10.0.2(jiti@2.6.1)): dependencies: '@rtsao/scc': 1.1.0 array-includes: 3.1.9 @@ -13053,7 +13053,7 @@ snapshots: doctrine: 2.1.0 eslint: 10.0.2(jiti@2.6.1) eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.56.1(eslint@10.0.2(jiti@2.6.1))(typescript@6.0.0-beta))(eslint-import-resolver-node@0.3.9)(eslint@10.0.2(jiti@2.6.1)) + eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.56.1(eslint@10.0.2(jiti@2.6.1))(typescript@6.0.1-rc))(eslint-import-resolver-node@0.3.9)(eslint@10.0.2(jiti@2.6.1)) hasown: 2.0.2 is-core-module: 2.16.1 is-glob: 4.0.3 @@ -13065,7 +13065,7 @@ snapshots: string.prototype.trimend: 1.0.9 tsconfig-paths: 3.15.0 optionalDependencies: - '@typescript-eslint/parser': 8.56.1(eslint@10.0.2(jiti@2.6.1))(typescript@6.0.0-beta) + '@typescript-eslint/parser': 8.56.1(eslint@10.0.2(jiti@2.6.1))(typescript@6.0.1-rc) transitivePeerDependencies: - eslint-import-resolver-typescript - eslint-import-resolver-webpack @@ -14795,10 +14795,10 @@ snapshots: netmask@2.0.2: {} - ng-packagr@22.0.0-next.0(@angular/compiler-cli@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(typescript@6.0.0-beta))(tslib@2.8.1)(typescript@6.0.0-beta): + ng-packagr@22.0.0-next.0(@angular/compiler-cli@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(typescript@6.0.1-rc))(tslib@2.8.1)(typescript@6.0.1-rc): dependencies: '@ampproject/remapping': 2.3.0 - '@angular/compiler-cli': 22.0.0-next.0(@angular/compiler@22.0.0-next.0)(typescript@6.0.0-beta) + '@angular/compiler-cli': 22.0.0-next.0(@angular/compiler@22.0.0-next.0)(typescript@6.0.1-rc) '@rollup/plugin-json': 6.1.0(rollup@4.59.0) '@rollup/wasm-node': 4.59.0 ajv: 8.18.0 @@ -14815,12 +14815,12 @@ snapshots: ora: 9.3.0 piscina: 5.1.4 postcss: 8.5.8 - rollup-plugin-dts: 6.3.0(rollup@4.59.0)(typescript@6.0.0-beta) + rollup-plugin-dts: 6.3.0(rollup@4.59.0)(typescript@6.0.1-rc) rxjs: 7.8.2 sass: 1.97.3 tinyglobby: 0.2.15 tslib: 2.8.1 - typescript: 6.0.0-beta + typescript: 6.0.1-rc optionalDependencies: rollup: 4.59.0 @@ -15257,9 +15257,9 @@ snapshots: possible-typed-array-names@1.1.0: {} - postcss-loader@8.2.1(postcss@8.5.8)(typescript@6.0.0-beta)(webpack@5.105.4(esbuild@0.27.3)): + postcss-loader@8.2.1(postcss@8.5.8)(typescript@6.0.1-rc)(webpack@5.105.4(esbuild@0.27.3)): dependencies: - cosmiconfig: 9.0.0(typescript@6.0.0-beta) + cosmiconfig: 9.0.0(typescript@6.0.1-rc) jiti: 2.6.1 postcss: 8.5.8 semver: 7.7.4 @@ -15412,11 +15412,11 @@ snapshots: - supports-color - utf-8-validate - puppeteer@24.38.0(bufferutil@4.1.0)(typescript@6.0.0-beta)(utf-8-validate@6.0.6): + puppeteer@24.38.0(bufferutil@4.1.0)(typescript@6.0.1-rc)(utf-8-validate@6.0.6): dependencies: '@puppeteer/browsers': 2.13.0 chromium-bidi: 14.0.0(devtools-protocol@0.0.1581282) - cosmiconfig: 9.0.0(typescript@6.0.0-beta) + cosmiconfig: 9.0.0(typescript@6.0.1-rc) devtools-protocol: 0.0.1581282 puppeteer-core: 24.38.0(bufferutil@4.1.0)(utf-8-validate@6.0.6) typed-query-selector: 2.12.1 @@ -15666,11 +15666,11 @@ snapshots: semver: 7.7.4 spdx-expression-validate: 2.0.0 - rollup-plugin-dts@6.3.0(rollup@4.59.0)(typescript@6.0.0-beta): + rollup-plugin-dts@6.3.0(rollup@4.59.0)(typescript@6.0.1-rc): dependencies: magic-string: 0.30.21 rollup: 4.59.0 - typescript: 6.0.0-beta + typescript: 6.0.1-rc optionalDependencies: '@babel/code-frame': 7.29.0 @@ -16416,9 +16416,9 @@ snapshots: dependencies: tslib: 2.8.1 - ts-api-utils@2.4.0(typescript@6.0.0-beta): + ts-api-utils@2.4.0(typescript@6.0.1-rc): dependencies: - typescript: 6.0.0-beta + typescript: 6.0.1-rc tsconfig-paths@3.15.0: dependencies: @@ -16516,7 +16516,7 @@ snapshots: typescript@5.9.3: {} - typescript@6.0.0-beta: {} + typescript@6.0.1-rc: {} ua-parser-js@0.7.41: {} From e59f77adbeb8a31f78d09b8ae8ccd81809c53a5e Mon Sep 17 00:00:00 2001 From: Alan Agius <alanagius@google.com> Date: Mon, 9 Mar 2026 15:24:53 +0100 Subject: [PATCH 116/226] build: update `aspect_rules_js` to `3.0.2` This updates the major version of `aspect_rules_js`. --- MODULE.bazel | 16 +- MODULE.bazel.lock | 228 ++++-------------- goldens/BUILD.bazel | 2 +- modules/testing/builder/BUILD.bazel | 1 + modules/testing/builder/package.json | 7 +- .../projects}/hello-world-lib/.gitignore | 0 .../projects}/hello-world-lib/angular.json | 0 .../projects/lib/karma.conf.js | 0 .../projects/lib/ng-package.json | 0 .../hello-world-lib/projects/lib/package.json | 0 .../lib/src/lib/lib.component.spec.ts | 0 .../projects/lib/src/lib/lib.component.ts | 0 .../projects/lib/src/lib/lib.service.spec.ts | 0 .../projects/lib/src/lib/lib.service.ts | 0 .../projects/lib/src/public-api.ts | 0 .../projects/lib/tsconfig.lib.json | 0 .../projects/lib/tsconfig.lib.prod.json | 0 .../projects/lib/tsconfig.spec.json | 0 .../projects}/hello-world-lib/tsconfig.json | 0 package.json | 1 + .../angular/build/src/utils/worker-pool.ts | 4 +- packages/angular/cli/bin/bootstrap.js | 4 +- .../angular/ssr/test/npm_package/BUILD.bazel | 2 +- .../ssr/third_party/beasties/BUILD.bazel | 2 +- .../angular_devkit/build_angular/BUILD.bazel | 9 +- .../src/builders/ng-packagr/index.ts | 5 +- .../src/builders/ng-packagr/works_spec.ts | 5 +- .../test/hello-world-lib/BUILD.bazel | 21 -- .../schematics_cli/test/BUILD.bazel | 1 - pnpm-lock.yaml | 6 + tests/BUILD.bazel | 4 +- tools/bazel/npm_package.bzl | 8 +- tools/defaults.bzl | 2 +- tools/link_package_json_to_tarballs.bzl | 4 +- tools/test/BUILD.bazel | 2 +- tools/toolchains/BUILD.bazel | 12 - 36 files changed, 98 insertions(+), 248 deletions(-) rename {packages/angular_devkit/build_angular/test => modules/testing/builder/projects}/hello-world-lib/.gitignore (100%) rename {packages/angular_devkit/build_angular/test => modules/testing/builder/projects}/hello-world-lib/angular.json (100%) rename {packages/angular_devkit/build_angular/test => modules/testing/builder/projects}/hello-world-lib/projects/lib/karma.conf.js (100%) rename {packages/angular_devkit/build_angular/test => modules/testing/builder/projects}/hello-world-lib/projects/lib/ng-package.json (100%) rename {packages/angular_devkit/build_angular/test => modules/testing/builder/projects}/hello-world-lib/projects/lib/package.json (100%) rename {packages/angular_devkit/build_angular/test => modules/testing/builder/projects}/hello-world-lib/projects/lib/src/lib/lib.component.spec.ts (100%) rename {packages/angular_devkit/build_angular/test => modules/testing/builder/projects}/hello-world-lib/projects/lib/src/lib/lib.component.ts (100%) rename {packages/angular_devkit/build_angular/test => modules/testing/builder/projects}/hello-world-lib/projects/lib/src/lib/lib.service.spec.ts (100%) rename {packages/angular_devkit/build_angular/test => modules/testing/builder/projects}/hello-world-lib/projects/lib/src/lib/lib.service.ts (100%) rename {packages/angular_devkit/build_angular/test => modules/testing/builder/projects}/hello-world-lib/projects/lib/src/public-api.ts (100%) rename {packages/angular_devkit/build_angular/test => modules/testing/builder/projects}/hello-world-lib/projects/lib/tsconfig.lib.json (100%) rename {packages/angular_devkit/build_angular/test => modules/testing/builder/projects}/hello-world-lib/projects/lib/tsconfig.lib.prod.json (100%) rename {packages/angular_devkit/build_angular/test => modules/testing/builder/projects}/hello-world-lib/projects/lib/tsconfig.spec.json (100%) rename {packages/angular_devkit/build_angular/test => modules/testing/builder/projects}/hello-world-lib/tsconfig.json (100%) delete mode 100644 packages/angular_devkit/build_angular/test/hello-world-lib/BUILD.bazel diff --git a/MODULE.bazel b/MODULE.bazel index 091f26b8786a..7b347cbe5f09 100644 --- a/MODULE.bazel +++ b/MODULE.bazel @@ -7,11 +7,12 @@ module( bazel_dep(name = "platforms", version = "1.0.0") bazel_dep(name = "yq.bzl", version = "0.3.5") bazel_dep(name = "rules_nodejs", version = "6.7.3") -bazel_dep(name = "aspect_rules_js", version = "2.9.2") +bazel_dep(name = "aspect_rules_js", version = "3.0.2") bazel_dep(name = "aspect_rules_ts", version = "3.8.5") bazel_dep(name = "rules_pkg", version = "1.2.0") bazel_dep(name = "rules_cc", version = "0.2.17") -bazel_dep(name = "aspect_bazel_lib", version = "2.22.5") +bazel_dep(name = "jq.bzl", version = "0.4.0") +bazel_dep(name = "bazel_lib", version = "3.2.2") bazel_dep(name = "bazel_skylib", version = "1.9.0") bazel_dep(name = "aspect_rules_esbuild", version = "0.25.0") bazel_dep(name = "aspect_rules_jasmine", version = "2.0.4") @@ -25,7 +26,7 @@ git_override( bazel_dep(name = "devinfra") git_override( module_name = "devinfra", - commit = "e4dcda13e469f50a6bd92667e2ded8b98173bf2c", + commit = "491fa7fc1803683748875b2b89d85700aca2b1f4", remote = "https://github.com/angular/dev-infra.git", ) @@ -160,6 +161,14 @@ npm.npm_translate_lock( npmrc = "//:.npmrc", pnpm_lock = "//:pnpm-lock.yaml", ) + +# This is needed as by default `.md` files are excluded from the npm package. +# But @angular/core includes best-practices.md file. +# See: https://github.com/aspect-build/rules_js/blob/786a74a158dd36ed073188b0e506c423cd05501a/npm/private/exclude_package_contents_presets.bzl#L29 +npm.npm_exclude_package_contents( + package = "@angular/core", + presets = [], +) use_repo(npm, "npm") rules_ts_ext = use_extension("@aspect_rules_ts//ts:extensions.bzl", "ext") @@ -185,5 +194,4 @@ register_toolchains( "@devinfra//bazel/git-toolchain:git_macos_arm64_toolchain", "@devinfra//bazel/git-toolchain:git_windows_toolchain", "//tools/toolchains:dummy_cc_windows_no_exec_toolchain", - "//tools/toolchains:node24_windows_no_exec_toolchain", ) diff --git a/MODULE.bazel.lock b/MODULE.bazel.lock index 7c42b3b10b4e..63e767233515 100644 --- a/MODULE.bazel.lock +++ b/MODULE.bazel.lock @@ -12,7 +12,6 @@ "https://bcr.bazel.build/modules/abseil-cpp/20240116.1/source.json": "9be551b8d4e3ef76875c0d744b5d6a504a27e3ae67bc6b28f46415fd2d2957da", "https://bcr.bazel.build/modules/aspect_bazel_lib/2.0.0/MODULE.bazel": "e118477db5c49419a88d78ebc7a2c2cea9d49600fe0f490c1903324a2c16ecd9", "https://bcr.bazel.build/modules/aspect_bazel_lib/2.14.0/MODULE.bazel": "2b31ffcc9bdc8295b2167e07a757dbbc9ac8906e7028e5170a3708cecaac119f", - "https://bcr.bazel.build/modules/aspect_bazel_lib/2.19.2/MODULE.bazel": "30dfabbfae0139b1f0036e01c201dd4c0167da3017f0b7ef3820d78e07622989", "https://bcr.bazel.build/modules/aspect_bazel_lib/2.19.3/MODULE.bazel": "253d739ba126f62a5767d832765b12b59e9f8d2bc88cc1572f4a73e46eb298ca", "https://bcr.bazel.build/modules/aspect_bazel_lib/2.22.5/MODULE.bazel": "004ba890363d05372a97248c37205ae64b6fa31047629cd2c0895a9d0c7779e8", "https://bcr.bazel.build/modules/aspect_bazel_lib/2.22.5/source.json": "ac2c3213df8f985785f1d0aeb7f0f73d5324e6e67d593d9b9470fb74a25d4a9b", @@ -26,8 +25,8 @@ "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", - "https://bcr.bazel.build/modules/aspect_rules_js/2.9.2/MODULE.bazel": "93fd5b85e6e912fb0712cbab453c43271d4ea33a093f84fd587638fbc9f8c145", - "https://bcr.bazel.build/modules/aspect_rules_js/2.9.2/source.json": "4bff7c03ab387b60deb15649ba575688e62f2a71a7544cbc7a660b19ec473808", + "https://bcr.bazel.build/modules/aspect_rules_js/3.0.2/MODULE.bazel": "c5d22d2db2a2f0cf41ec2028ded2e2543d7ff1ea9f6faf5d6b2791546ee1d6a9", + "https://bcr.bazel.build/modules/aspect_rules_js/3.0.2/source.json": "8a8642e6869ead1b37c5442b60b59912bb35ae265d94e4115d3e1a2598fdd849", "https://bcr.bazel.build/modules/aspect_rules_ts/3.6.3/MODULE.bazel": "d09db394970f076176ce7bab5b5fa7f0d560fd4f30b8432ea5e2c2570505b130", "https://bcr.bazel.build/modules/aspect_rules_ts/3.7.0/MODULE.bazel": "5aace216caf88638950ef061245d23c36f57c8359e56e97f02a36f70bb09c50f", "https://bcr.bazel.build/modules/aspect_rules_ts/3.8.5/MODULE.bazel": "bcf8f0b6b9375f0f74451e2f70671efae9bb366acef8fdc04675305eaf137f06", @@ -48,13 +47,16 @@ "https://bcr.bazel.build/modules/bazel_features/1.30.0/MODULE.bazel": "a14b62d05969a293b80257e72e597c2da7f717e1e69fa8b339703ed6731bec87", "https://bcr.bazel.build/modules/bazel_features/1.34.0/MODULE.bazel": "e8475ad7c8965542e0c7aac8af68eb48c4af904be3d614b6aa6274c092c2ea1e", "https://bcr.bazel.build/modules/bazel_features/1.39.0/MODULE.bazel": "28739425c1fc283c91931619749c832b555e60bcd1010b40d8441ce0a5cf726d", - "https://bcr.bazel.build/modules/bazel_features/1.39.0/source.json": "f63cbeb4c602098484d57001e5a07d31cb02bbccde9b5e2c9bf0b29d05283e93", "https://bcr.bazel.build/modules/bazel_features/1.4.1/MODULE.bazel": "e45b6bb2350aff3e442ae1111c555e27eac1d915e77775f6fdc4b351b758b5d7", + "https://bcr.bazel.build/modules/bazel_features/1.41.0/MODULE.bazel": "6e0f87fafed801273c371d41e22a15a6f8abf83fdd7f87d5e44ad317b94433d0", + "https://bcr.bazel.build/modules/bazel_features/1.41.0/source.json": "8fd525b31b0883c47e0593443cdd10219b94a7556b3195fc02d75c86c66cfe30", "https://bcr.bazel.build/modules/bazel_features/1.9.0/MODULE.bazel": "885151d58d90d8d9c811eb75e3288c11f850e1d6b481a8c9f766adee4712358b", "https://bcr.bazel.build/modules/bazel_features/1.9.1/MODULE.bazel": "8f679097876a9b609ad1f60249c49d68bfab783dd9be012faf9d82547b14815a", "https://bcr.bazel.build/modules/bazel_lib/3.0.0-beta.1/MODULE.bazel": "407729e232f611c3270005b016b437005daa7b1505826798ea584169a476e878", + "https://bcr.bazel.build/modules/bazel_lib/3.0.0-rc.0/MODULE.bazel": "d6e00979a98ac14ada5e31c8794708b41434d461e7e7ca39b59b765e6d233b18", "https://bcr.bazel.build/modules/bazel_lib/3.0.0/MODULE.bazel": "22b70b80ac89ad3f3772526cd9feee2fa412c2b01933fea7ed13238a448d370d", - "https://bcr.bazel.build/modules/bazel_lib/3.0.0/source.json": "895f21909c6fba01d7c17914bb6c8e135982275a1b18cdaa4e62272217ef1751", + "https://bcr.bazel.build/modules/bazel_lib/3.2.2/MODULE.bazel": "e2c890c8a515d6bca9c66d47718aa9e44b458fde64ec7204b8030bf2d349058c", + "https://bcr.bazel.build/modules/bazel_lib/3.2.2/source.json": "9e84e115c20e14652c5c21401ae85ff4daa8702e265b5c0b3bf89353f17aa212", "https://bcr.bazel.build/modules/bazel_skylib/1.0.3/MODULE.bazel": "bcb0fd896384802d1ad283b4e4eb4d718eebd8cb820b0a2c3a347fb971afd9d8", "https://bcr.bazel.build/modules/bazel_skylib/1.1.1/MODULE.bazel": "1add3e7d93ff2e6998f9e118022c84d163917d912f5afafb3058e3d2f1545b5e", "https://bcr.bazel.build/modules/bazel_skylib/1.2.0/MODULE.bazel": "44fe84260e454ed94ad326352a698422dbe372b21a1ac9f3eab76eb531223686", @@ -82,7 +84,8 @@ "https://bcr.bazel.build/modules/googletest/1.14.0.bcr.1/source.json": "41e9e129f80d8c8bf103a7acc337b76e54fad1214ac0a7084bf24f4cd924b8b4", "https://bcr.bazel.build/modules/googletest/1.14.0/MODULE.bazel": "cfbcbf3e6eac06ef9d85900f64424708cc08687d1b527f0ef65aa7517af8118f", "https://bcr.bazel.build/modules/jq.bzl/0.1.0/MODULE.bazel": "2ce69b1af49952cd4121a9c3055faa679e748ce774c7f1fda9657f936cae902f", - "https://bcr.bazel.build/modules/jq.bzl/0.1.0/source.json": "746bf13cac0860f091df5e4911d0c593971cd8796b5ad4e809b2f8e133eee3d5", + "https://bcr.bazel.build/modules/jq.bzl/0.4.0/MODULE.bazel": "a7b39b37589f2b0dad53fd6c1ccaabbdb290330caa920d7ef3e6aad068cd4ab2", + "https://bcr.bazel.build/modules/jq.bzl/0.4.0/source.json": "52ec7530c4618e03f634b30ff719814a68d7d39c235938b7aa2abbfe1eb1c52c", "https://bcr.bazel.build/modules/jsoncpp/1.9.5/MODULE.bazel": "31271aedc59e815656f5736f282bb7509a97c7ecb43e927ac1a37966e0578075", "https://bcr.bazel.build/modules/jsoncpp/1.9.5/source.json": "4108ee5085dd2885a341c7fab149429db457b3169b86eb081fa245eadf69169d", "https://bcr.bazel.build/modules/libpfm/4.11.0/MODULE.bazel": "45061ff025b301940f1e30d2c16bea596c25b176c8b6b3087e92615adbd52902", @@ -105,6 +108,7 @@ "https://bcr.bazel.build/modules/protobuf/29.0/MODULE.bazel": "319dc8bf4c679ff87e71b1ccfb5a6e90a6dbc4693501d471f48662ac46d04e4e", "https://bcr.bazel.build/modules/protobuf/29.0/source.json": "b857f93c796750eef95f0d61ee378f3420d00ee1dd38627b27193aa482f4f981", "https://bcr.bazel.build/modules/protobuf/3.19.0/MODULE.bazel": "6b5fbb433f760a99a22b18b6850ed5784ef0e9928a72668b66e4d7ccd47db9b0", + "https://bcr.bazel.build/modules/protobuf/3.19.6/MODULE.bazel": "9233edc5e1f2ee276a60de3eaa47ac4132302ef9643238f23128fea53ea12858", "https://bcr.bazel.build/modules/pybind11_bazel/2.11.1/MODULE.bazel": "88af1c246226d87e65be78ed49ecd1e6f5e98648558c14ce99176da041dc378e", "https://bcr.bazel.build/modules/pybind11_bazel/2.11.1/source.json": "be4789e951dd5301282729fe3d4938995dc4c1a81c2ff150afc9f1b0504c6022", "https://bcr.bazel.build/modules/re2/2023-09-01/MODULE.bazel": "cb3d511531b16cfc78a225a9e2136007a48cf8a677e4264baeab57fe78a80206", @@ -160,7 +164,6 @@ "https://bcr.bazel.build/modules/rules_license/1.0.0/source.json": "a52c89e54cc311196e478f8382df91c15f7a2bfdf4c6cd0e2675cc2ff0b56efb", "https://bcr.bazel.build/modules/rules_nodejs/6.2.0/MODULE.bazel": "ec27907f55eb34705adb4e8257952162a2d4c3ed0f0b3b4c3c1aad1fac7be35e", "https://bcr.bazel.build/modules/rules_nodejs/6.3.0/MODULE.bazel": "45345e4aba35dd6e4701c1eebf5a4e67af4ed708def9ebcdc6027585b34ee52d", - "https://bcr.bazel.build/modules/rules_nodejs/6.3.3/MODULE.bazel": "b66eadebd10f1f1b25f52f95ab5213a57e82c37c3f656fcd9a57ad04d2264ce7", "https://bcr.bazel.build/modules/rules_nodejs/6.5.0/MODULE.bazel": "546d0cf79f36f9f6e080816045f97234b071c205f4542e3351bd4424282a8810", "https://bcr.bazel.build/modules/rules_nodejs/6.5.2/MODULE.bazel": "7f9ea68a0ce6d82905ce9f74e76ab8a8b4531ed4c747018c9d76424ad0b3370d", "https://bcr.bazel.build/modules/rules_nodejs/6.7.3/MODULE.bazel": "c22a48b2a0dbf05a9dc5f83837bbc24c226c1f6e618de3c3a610044c9f336056", @@ -198,6 +201,7 @@ "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.6.0/MODULE.bazel": "a3584b4edcfafcabd9b0ef9819808f05b372957bbdff41601429d5fd0aac2e7c", "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", @@ -207,6 +211,7 @@ "https://bcr.bazel.build/modules/yq.bzl/0.3.5/MODULE.bazel": "130c603e54be717bdf84100210f06598a0d2b4b4e01888fb01b70f50f41767ec", "https://bcr.bazel.build/modules/yq.bzl/0.3.5/source.json": "1ae7bdc03cb26aaa8bd2bceadf65e90d90f0b2d03008ba9a0564da2e21396c39", "https://bcr.bazel.build/modules/zlib/1.2.11/MODULE.bazel": "07b389abc85fdbca459b69e2ec656ae5622873af3f845e1c9d80fe179f3effa0", + "https://bcr.bazel.build/modules/zlib/1.2.12/MODULE.bazel": "3b1a8834ada2a883674be8cbd36ede1b6ec481477ada359cd2d3ddc562340b27", "https://bcr.bazel.build/modules/zlib/1.3.1.bcr.5/MODULE.bazel": "eec517b5bbe5492629466e11dae908d043364302283de25581e3eb944326c4ca", "https://bcr.bazel.build/modules/zlib/1.3.1.bcr.5/source.json": "22bc55c47af97246cfc093d0acf683a7869377de362b5d1c552c2c2e16b7a806", "https://bcr.bazel.build/modules/zlib/1.3.1/MODULE.bazel": "751c9940dcfe869f5f7274e1295422a34623555916eb98c174c1e945594bf198" @@ -215,7 +220,7 @@ "moduleExtensions": { "@@aspect_rules_esbuild+//esbuild:extensions.bzl%esbuild": { "general": { - "bzlTransitiveDigest": "fzdwsWU1Px4bYL57Cw1rvU/mgOqB7f0AF51JxT5kAs8=", + "bzlTransitiveDigest": "3n8gVQlbxgyvUg00KQzlj45loySDpuyrPrfkMDisJCg=", "usagesDigest": "ToTaCONCN/E05krnHXLM1kpV1zrHNxHrGpUip973II4=", "recordedFileInputs": {}, "recordedDirentsInputs": {}, @@ -271,11 +276,10 @@ "npm__esbuild_0.19.9": { "repoRuleId": "@@aspect_rules_js+//npm/private:npm_import.bzl%npm_import_rule", "attributes": { + "key": "npm__esbuild_0.19.9", "package": "esbuild", "version": "0.19.9", "root_package": "", - "link_workspace": "", - "link_packages": {}, "integrity": "sha512-U9CHtKSy+EpPsEBa+/A2gMs/h3ylBC0H0KSqIg7tpztHerLi6nrrcoUJAkNCEPumx8yJ+Byic4BVwHgRbN0TBg==", "url": "", "commit": "", @@ -290,20 +294,23 @@ "npm_auth_password": "", "lifecycle_hooks": [], "extra_build_content": "", + "generate_package_json_bzl": false, "generate_bzl_library_targets": false, "extract_full_archive": false, - "exclude_package_contents": [] + "exclude_package_contents": [], + "exclude_package_contents_presets": [] } }, "npm__esbuild_0.19.9__links": { - "repoRuleId": "@@aspect_rules_js+//npm/private:npm_import.bzl%npm_import_links", + "repoRuleId": "@@aspect_rules_js+//npm/private:npm_import.bzl%npm_import_links_rule", "attributes": { + "key": "npm__esbuild_0.19.9", "package": "esbuild", "version": "0.19.9", - "dev": false, "root_package": "", - "link_packages": {}, "deps": {}, + "deps_oss": {}, + "deps_cpus": {}, "transitive_closure": {}, "lifecycle_build_target": false, "lifecycle_hooks_env": [], @@ -316,31 +323,12 @@ "//visibility:public" ], "replace_package": "", - "exclude_package_contents": [] + "exclude_package_contents": [], + "exclude_package_contents_presets": [] } } }, "recordedRepoMappingEntries": [ - [ - "aspect_bazel_lib+", - "bazel_lib", - "bazel_lib+" - ], - [ - "aspect_bazel_lib+", - "bazel_skylib", - "bazel_skylib+" - ], - [ - "aspect_bazel_lib+", - "bazel_tools", - "bazel_tools" - ], - [ - "aspect_bazel_lib+", - "tar.bzl", - "tar.bzl+" - ], [ "aspect_rules_esbuild+", "aspect_rules_js", @@ -356,11 +344,6 @@ "bazel_skylib", "bazel_skylib+" ], - [ - "aspect_rules_js+", - "aspect_bazel_lib", - "aspect_bazel_lib+" - ], [ "aspect_rules_js+", "aspect_rules_js", @@ -373,162 +356,33 @@ ], [ "aspect_rules_js+", - "bazel_lib", - "bazel_lib+" - ], - [ - "aspect_rules_js+", - "bazel_skylib", - "bazel_skylib+" + "bazel_features", + "bazel_features+" ], [ "aspect_rules_js+", - "bazel_tools", - "bazel_tools" - ], - [ - "bazel_lib+", - "bazel_skylib", - "bazel_skylib+" - ], - [ - "bazel_lib+", - "bazel_tools", - "bazel_tools" - ], - [ - "tar.bzl+", "bazel_lib", "bazel_lib+" ], [ - "tar.bzl+", - "bazel_skylib", - "bazel_skylib+" - ], - [ - "tar.bzl+", - "tar.bzl", - "tar.bzl+" - ] - ] - } - }, - "@@aspect_rules_js+//npm:extensions.bzl%pnpm": { - "general": { - "bzlTransitiveDigest": "9Zmqluz9ltvCoc6pskOslTkQpkH6CIINjWVkgam9aa4=", - "usagesDigest": "7YJUf9JYy8m5TzTHJcA+pv3PiF7bwtuR5NRtkllp6O0=", - "recordedFileInputs": {}, - "recordedDirentsInputs": {}, - "envVariables": {}, - "generatedRepoSpecs": { - "pnpm": { - "repoRuleId": "@@aspect_rules_js+//npm/private:npm_import.bzl%npm_import_rule", - "attributes": { - "package": "pnpm", - "version": "10.30.3", - "root_package": "", - "link_workspace": "", - "link_packages": {}, - "integrity": "sha512-yWHR4KLY41TsqlFmuCJRZmi39Ey1vZUSLVkN2Bki9gb1RzttI+xKW+Bef80Y6EiNR9l4u+mBhy8RRdBumnQAFw==", - "url": "", - "commit": "", - "patch_args": [ - "-p0" - ], - "patches": [], - "custom_postinstall": "", - "npm_auth": "", - "npm_auth_basic": "", - "npm_auth_username": "", - "npm_auth_password": "", - "lifecycle_hooks": [], - "extra_build_content": "load(\"@aspect_rules_js//js:defs.bzl\", \"js_binary\")\njs_binary(name = \"pnpm\", data = glob([\"package/**\"]), entry_point = \"package/dist/pnpm.cjs\", visibility = [\"//visibility:public\"])", - "generate_bzl_library_targets": false, - "extract_full_archive": true, - "exclude_package_contents": [] - } - }, - "pnpm__links": { - "repoRuleId": "@@aspect_rules_js+//npm/private:npm_import.bzl%npm_import_links", - "attributes": { - "package": "pnpm", - "version": "10.30.3", - "dev": false, - "root_package": "", - "link_packages": {}, - "deps": {}, - "transitive_closure": {}, - "lifecycle_build_target": false, - "lifecycle_hooks_env": [], - "lifecycle_hooks_execution_requirements": [ - "no-sandbox" - ], - "lifecycle_hooks_use_default_shell_env": false, - "bins": {}, - "package_visibility": [ - "//visibility:public" - ], - "replace_package": "", - "exclude_package_contents": [] - } - } - }, - "recordedRepoMappingEntries": [ - [ - "aspect_bazel_lib+", - "bazel_lib", - "bazel_lib+" - ], - [ - "aspect_bazel_lib+", + "aspect_rules_js+", "bazel_skylib", "bazel_skylib+" ], [ - "aspect_bazel_lib+", + "aspect_rules_js+", "bazel_tools", "bazel_tools" ], - [ - "aspect_bazel_lib+", - "tar.bzl", - "tar.bzl+" - ], - [ - "aspect_rules_js+", - "aspect_bazel_lib", - "aspect_bazel_lib+" - ], - [ - "aspect_rules_js+", - "aspect_rules_js", - "aspect_rules_js+" - ], - [ - "aspect_rules_js+", - "aspect_tools_telemetry_report", - "aspect_tools_telemetry++telemetry+aspect_tools_telemetry_report" - ], - [ - "aspect_rules_js+", - "bazel_features", - "bazel_features+" - ], - [ - "aspect_rules_js+", - "bazel_lib", - "bazel_lib+" - ], [ "aspect_rules_js+", - "bazel_skylib", - "bazel_skylib+" + "protobuf", + "protobuf+" ], [ "aspect_rules_js+", - "bazel_tools", - "bazel_tools" + "tar.bzl", + "tar.bzl+" ], [ "bazel_features+", @@ -540,6 +394,11 @@ "bazel_features_version", "bazel_features++version_extension+bazel_features_version" ], + [ + "bazel_lib+", + "bazel_lib", + "bazel_lib+" + ], [ "bazel_lib+", "bazel_skylib", @@ -550,6 +409,11 @@ "bazel_tools", "bazel_tools" ], + [ + "protobuf+", + "proto_bazel_features", + "bazel_features+" + ], [ "tar.bzl+", "bazel_lib", @@ -637,7 +501,7 @@ "@@aspect_tools_telemetry+//:extension.bzl%telemetry": { "general": { "bzlTransitiveDigest": "cl5A2O84vDL6Tt+Qga8FCj1DUDGqn+e7ly5rZ+4xvcc=", - "usagesDigest": "FyfEmerc0O7uyjsX5yrhDDHz3grA5p9rBWtVLQGMSxQ=", + "usagesDigest": "WjAXczB0+lKrbiyjhsdOKDO3vZyMrPHKBUgS6uTc3XM=", "recordedFileInputs": {}, "recordedDirentsInputs": {}, "envVariables": {}, @@ -646,7 +510,7 @@ "repoRuleId": "@@aspect_tools_telemetry+//:extension.bzl%tel_repository", "attributes": { "deps": { - "aspect_rules_js": "2.9.2", + "aspect_rules_js": "3.0.2", "aspect_rules_ts": "3.8.5", "aspect_rules_esbuild": "0.25.0", "aspect_rules_jasmine": "2.0.4", @@ -1098,7 +962,7 @@ "@@rules_nodejs+//nodejs:extensions.bzl%node": { "general": { "bzlTransitiveDigest": "4pUxCNc22K4I+6+4Nxu52Hur12tFRfa1JMsN5mdDv60=", - "usagesDigest": "eMvpQ/q8jSLOsluFIeASRy0dLdjpM/HqVMVIzPCsVSk=", + "usagesDigest": "LWkuWzN4r0/mUt55eEdfQvbzNLGkgnSCDR/51JXQNHs=", "recordedFileInputs": {}, "recordedDirentsInputs": {}, "envVariables": {}, @@ -2339,7 +2203,7 @@ }, "@@rules_python+//python/extensions:pip.bzl%pip": { "general": { - "bzlTransitiveDigest": "LFkevJ0u48WgTVCyU07LkRD8iYwsRUs2M7uSFHkQAW0=", + "bzlTransitiveDigest": "WViZ5k1A9F8R5wfEe2ArLMFS1g9UmgfbS8Q/7q1/z7o=", "usagesDigest": "AK1R124YPWwAs8z1CQYyjYuci8RO5Ofot+EP5ZCNQDc=", "recordedFileInputs": { "@@protobuf+//python/requirements.txt": "983be60d3cec4b319dcab6d48aeb3f5b2f7c3350f26b3a9e97486c37967c73c5", @@ -5134,7 +4998,7 @@ "@@yq.bzl+//yq:extensions.bzl%yq": { "general": { "bzlTransitiveDigest": "UfFMy8CWK4/dVo/tfaSAIYUiDGNAPes5eRllx9O9Q9Q=", - "usagesDigest": "OKtzWFv/1OIvlyc7JZVttov74lm6Ldv/V6oOd4SGa1U=", + "usagesDigest": "u+ujDEN69Oj7FVCeZOhiedgk8GTKB0ZslrsqMm1djlE=", "recordedFileInputs": {}, "recordedDirentsInputs": {}, "envVariables": {}, diff --git a/goldens/BUILD.bazel b/goldens/BUILD.bazel index 6dbbdd28f25b..711154f524b1 100644 --- a/goldens/BUILD.bazel +++ b/goldens/BUILD.bazel @@ -1,4 +1,4 @@ -load("@aspect_bazel_lib//lib:copy_to_bin.bzl", "copy_to_bin") +load("@bazel_lib//lib:copy_to_bin.bzl", "copy_to_bin") package(default_visibility = ["//visibility:public"]) diff --git a/modules/testing/builder/BUILD.bazel b/modules/testing/builder/BUILD.bazel index 7f542efb0138..4fa8b7ee723b 100644 --- a/modules/testing/builder/BUILD.bazel +++ b/modules/testing/builder/BUILD.bazel @@ -22,6 +22,7 @@ ts_project( ":node_modules/@angular/ssr", ":node_modules/browser-sync", ":node_modules/jsdom", + ":node_modules/ng-packagr", ":node_modules/vitest", ":node_modules/@vitest/coverage-v8", ] + glob(["projects/**/*"]), diff --git a/modules/testing/builder/package.json b/modules/testing/builder/package.json index 47ff33d0cd7d..205458b0a4c1 100644 --- a/modules/testing/builder/package.json +++ b/modules/testing/builder/package.json @@ -1,12 +1,13 @@ { "devDependencies": { - "@angular-devkit/core": "workspace:*", "@angular-devkit/architect": "workspace:*", - "@angular/ssr": "workspace:*", "@angular-devkit/build-angular": "workspace:*", - "browser-sync": "3.0.4", + "@angular-devkit/core": "workspace:*", + "@angular/ssr": "workspace:*", "@vitest/coverage-v8": "4.0.18", + "browser-sync": "3.0.4", "jsdom": "28.1.0", + "ng-packagr": "22.0.0-next.0", "rxjs": "7.8.2", "vitest": "4.0.18" } diff --git a/packages/angular_devkit/build_angular/test/hello-world-lib/.gitignore b/modules/testing/builder/projects/hello-world-lib/.gitignore similarity index 100% rename from packages/angular_devkit/build_angular/test/hello-world-lib/.gitignore rename to modules/testing/builder/projects/hello-world-lib/.gitignore diff --git a/packages/angular_devkit/build_angular/test/hello-world-lib/angular.json b/modules/testing/builder/projects/hello-world-lib/angular.json similarity index 100% rename from packages/angular_devkit/build_angular/test/hello-world-lib/angular.json rename to modules/testing/builder/projects/hello-world-lib/angular.json diff --git a/packages/angular_devkit/build_angular/test/hello-world-lib/projects/lib/karma.conf.js b/modules/testing/builder/projects/hello-world-lib/projects/lib/karma.conf.js similarity index 100% rename from packages/angular_devkit/build_angular/test/hello-world-lib/projects/lib/karma.conf.js rename to modules/testing/builder/projects/hello-world-lib/projects/lib/karma.conf.js diff --git a/packages/angular_devkit/build_angular/test/hello-world-lib/projects/lib/ng-package.json b/modules/testing/builder/projects/hello-world-lib/projects/lib/ng-package.json similarity index 100% rename from packages/angular_devkit/build_angular/test/hello-world-lib/projects/lib/ng-package.json rename to modules/testing/builder/projects/hello-world-lib/projects/lib/ng-package.json diff --git a/packages/angular_devkit/build_angular/test/hello-world-lib/projects/lib/package.json b/modules/testing/builder/projects/hello-world-lib/projects/lib/package.json similarity index 100% rename from packages/angular_devkit/build_angular/test/hello-world-lib/projects/lib/package.json rename to modules/testing/builder/projects/hello-world-lib/projects/lib/package.json diff --git a/packages/angular_devkit/build_angular/test/hello-world-lib/projects/lib/src/lib/lib.component.spec.ts b/modules/testing/builder/projects/hello-world-lib/projects/lib/src/lib/lib.component.spec.ts similarity index 100% rename from packages/angular_devkit/build_angular/test/hello-world-lib/projects/lib/src/lib/lib.component.spec.ts rename to modules/testing/builder/projects/hello-world-lib/projects/lib/src/lib/lib.component.spec.ts diff --git a/packages/angular_devkit/build_angular/test/hello-world-lib/projects/lib/src/lib/lib.component.ts b/modules/testing/builder/projects/hello-world-lib/projects/lib/src/lib/lib.component.ts similarity index 100% rename from packages/angular_devkit/build_angular/test/hello-world-lib/projects/lib/src/lib/lib.component.ts rename to modules/testing/builder/projects/hello-world-lib/projects/lib/src/lib/lib.component.ts diff --git a/packages/angular_devkit/build_angular/test/hello-world-lib/projects/lib/src/lib/lib.service.spec.ts b/modules/testing/builder/projects/hello-world-lib/projects/lib/src/lib/lib.service.spec.ts similarity index 100% rename from packages/angular_devkit/build_angular/test/hello-world-lib/projects/lib/src/lib/lib.service.spec.ts rename to modules/testing/builder/projects/hello-world-lib/projects/lib/src/lib/lib.service.spec.ts diff --git a/packages/angular_devkit/build_angular/test/hello-world-lib/projects/lib/src/lib/lib.service.ts b/modules/testing/builder/projects/hello-world-lib/projects/lib/src/lib/lib.service.ts similarity index 100% rename from packages/angular_devkit/build_angular/test/hello-world-lib/projects/lib/src/lib/lib.service.ts rename to modules/testing/builder/projects/hello-world-lib/projects/lib/src/lib/lib.service.ts diff --git a/packages/angular_devkit/build_angular/test/hello-world-lib/projects/lib/src/public-api.ts b/modules/testing/builder/projects/hello-world-lib/projects/lib/src/public-api.ts similarity index 100% rename from packages/angular_devkit/build_angular/test/hello-world-lib/projects/lib/src/public-api.ts rename to modules/testing/builder/projects/hello-world-lib/projects/lib/src/public-api.ts diff --git a/packages/angular_devkit/build_angular/test/hello-world-lib/projects/lib/tsconfig.lib.json b/modules/testing/builder/projects/hello-world-lib/projects/lib/tsconfig.lib.json similarity index 100% rename from packages/angular_devkit/build_angular/test/hello-world-lib/projects/lib/tsconfig.lib.json rename to modules/testing/builder/projects/hello-world-lib/projects/lib/tsconfig.lib.json diff --git a/packages/angular_devkit/build_angular/test/hello-world-lib/projects/lib/tsconfig.lib.prod.json b/modules/testing/builder/projects/hello-world-lib/projects/lib/tsconfig.lib.prod.json similarity index 100% rename from packages/angular_devkit/build_angular/test/hello-world-lib/projects/lib/tsconfig.lib.prod.json rename to modules/testing/builder/projects/hello-world-lib/projects/lib/tsconfig.lib.prod.json diff --git a/packages/angular_devkit/build_angular/test/hello-world-lib/projects/lib/tsconfig.spec.json b/modules/testing/builder/projects/hello-world-lib/projects/lib/tsconfig.spec.json similarity index 100% rename from packages/angular_devkit/build_angular/test/hello-world-lib/projects/lib/tsconfig.spec.json rename to modules/testing/builder/projects/hello-world-lib/projects/lib/tsconfig.spec.json diff --git a/packages/angular_devkit/build_angular/test/hello-world-lib/tsconfig.json b/modules/testing/builder/projects/hello-world-lib/tsconfig.json similarity index 100% rename from packages/angular_devkit/build_angular/test/hello-world-lib/tsconfig.json rename to modules/testing/builder/projects/hello-world-lib/tsconfig.json diff --git a/package.json b/package.json index b331084b5c4e..4476da33e1de 100644 --- a/package.json +++ b/package.json @@ -66,6 +66,7 @@ "@rollup/plugin-commonjs": "^29.0.0", "@rollup/plugin-json": "^6.1.0", "@rollup/plugin-node-resolve": "16.0.3", + "@rollup/wasm-node": "4.59.0", "@stylistic/eslint-plugin": "^5.0.0", "@tony.ganchev/eslint-plugin-header": "~3.2.4", "@types/babel__core": "7.20.5", diff --git a/packages/angular/build/src/utils/worker-pool.ts b/packages/angular/build/src/utils/worker-pool.ts index 78db4302ef1a..907de66ba02f 100644 --- a/packages/angular/build/src/utils/worker-pool.ts +++ b/packages/angular/build/src/utils/worker-pool.ts @@ -26,7 +26,9 @@ export class WorkerPool extends Piscina { // Enable compile code caching if enabled for the main process (only exists on Node.js v22.8+). // Skip if running inside Bazel via a RUNFILES environment variable check. The cache does not work // well with Bazel's hermeticity requirements. - const compileCacheDirectory = process.env['RUNFILES'] ? undefined : getCompileCacheDir?.(); + const compileCacheDirectory = process.env['JS_BINARY__RUNFILES'] + ? undefined + : getCompileCacheDir?.(); if (compileCacheDirectory) { if (typeof piscinaOptions.env === 'object') { piscinaOptions.env['NODE_COMPILE_CACHE'] = compileCacheDirectory; diff --git a/packages/angular/cli/bin/bootstrap.js b/packages/angular/cli/bin/bootstrap.js index 18d1ed73160c..6b1a18db4d42 100644 --- a/packages/angular/cli/bin/bootstrap.js +++ b/packages/angular/cli/bin/bootstrap.js @@ -19,9 +19,9 @@ */ // Enable on-disk code caching if available (Node.js 22.8+) -// Skip if running inside Bazel via a RUNFILES environment variable check and no explicit cache +// Skip if running inside Bazel via a JS_BINARY__RUNFILES environment variable check and no explicit cache // location defined. The default cache location does not work well with Bazel's hermeticity requirements. -if (!process.env['RUNFILES'] || process.env['NODE_COMPILE_CACHE']) { +if (!process.env['JS_BINARY__RUNFILES'] || process.env['NODE_COMPILE_CACHE']) { try { const { enableCompileCache } = require('node:module'); diff --git a/packages/angular/ssr/test/npm_package/BUILD.bazel b/packages/angular/ssr/test/npm_package/BUILD.bazel index ae1694d8caac..cbf2c2623025 100644 --- a/packages/angular/ssr/test/npm_package/BUILD.bazel +++ b/packages/angular/ssr/test/npm_package/BUILD.bazel @@ -1,4 +1,4 @@ -load("@aspect_bazel_lib//lib:write_source_files.bzl", "write_source_file") +load("@bazel_lib//lib:write_source_files.bzl", "write_source_file") load("//tools:defaults.bzl", "jasmine_test", "ts_project") ts_project( diff --git a/packages/angular/ssr/third_party/beasties/BUILD.bazel b/packages/angular/ssr/third_party/beasties/BUILD.bazel index 3e8be4267570..b88771871810 100644 --- a/packages/angular/ssr/third_party/beasties/BUILD.bazel +++ b/packages/angular/ssr/third_party/beasties/BUILD.bazel @@ -1,5 +1,5 @@ load("@aspect_rules_js//js:defs.bzl", "js_library") -load("@npm//:rollup/package_json.bzl", rollup = "bin") +load("@npm//:@rollup/wasm-node/package_json.bzl", rollup = "bin") package(default_visibility = ["//visibility:public"]) diff --git a/packages/angular_devkit/build_angular/BUILD.bazel b/packages/angular_devkit/build_angular/BUILD.bazel index 57b9fa4e9372..90fc7bf4b1fc 100644 --- a/packages/angular_devkit/build_angular/BUILD.bazel +++ b/packages/angular_devkit/build_angular/BUILD.bazel @@ -197,9 +197,6 @@ ts_project( "src/builders/**/*_spec.ts", ], ), - data = [ - "//packages/angular_devkit/build_angular/test/hello-world-lib", - ], deps = [ ":build_angular", ":build_angular_test_utils", @@ -268,9 +265,6 @@ ts_project( "src/**/*_spec.ts", ], ), - data = [ - "//packages/angular_devkit/build_angular/test/hello-world-lib", - ], deps = [ ":build_angular", ":node_modules/@angular-devkit/architect", @@ -319,7 +313,8 @@ LARGE_SPECS = { "//:node_modules/@angular/animations", ], }, - "ng-packagr": {}, + "ng-packagr": { + }, "browser": { "shards": 10, "size": "large", diff --git a/packages/angular_devkit/build_angular/src/builders/ng-packagr/index.ts b/packages/angular_devkit/build_angular/src/builders/ng-packagr/index.ts index 2062e4cad595..42533a33aa0d 100644 --- a/packages/angular_devkit/build_angular/src/builders/ng-packagr/index.ts +++ b/packages/angular_devkit/build_angular/src/builders/ng-packagr/index.ts @@ -9,6 +9,7 @@ import { purgeStaleBuildCache } from '@angular/build/private'; import { BuilderContext, BuilderOutput, createBuilder } from '@angular-devkit/architect'; import type { NgPackagrOptions } from 'ng-packagr'; +import { createRequire } from 'node:module'; import { join, resolve } from 'node:path'; import { Observable, catchError, from, map, of, switchMap } from 'rxjs'; import { normalizeCacheOptions } from '../../utils/normalize-cache'; @@ -27,7 +28,9 @@ export function execute( await purgeStaleBuildCache(context); const root = context.workspaceRoot; - const packager = (await import('ng-packagr')).ngPackagr(); + const workspaceRequire = createRequire(root + '/'); + const ngPackagePath = workspaceRequire.resolve('ng-packagr'); + const packager = (await import(ngPackagePath)).ngPackagr(); packager.forProject(resolve(root, options.project)); diff --git a/packages/angular_devkit/build_angular/src/builders/ng-packagr/works_spec.ts b/packages/angular_devkit/build_angular/src/builders/ng-packagr/works_spec.ts index 4bf1ac2dec91..90581f9d9437 100644 --- a/packages/angular_devkit/build_angular/src/builders/ng-packagr/works_spec.ts +++ b/packages/angular_devkit/build_angular/src/builders/ng-packagr/works_spec.ts @@ -20,7 +20,10 @@ import { import { debounceTime, map, take, tap } from 'rxjs'; describe('NgPackagr Builder', () => { - const workspaceRoot = join(normalize(__dirname), `../../../test/hello-world-lib/`); + const workspaceRoot = join( + normalize(__dirname), + `../../../../../../modules/testing/builder/projects/hello-world-lib/`, + ); const host = new TestProjectHost(workspaceRoot); let architect: Architect; diff --git a/packages/angular_devkit/build_angular/test/hello-world-lib/BUILD.bazel b/packages/angular_devkit/build_angular/test/hello-world-lib/BUILD.bazel deleted file mode 100644 index 0eef93e382cd..000000000000 --- a/packages/angular_devkit/build_angular/test/hello-world-lib/BUILD.bazel +++ /dev/null @@ -1,21 +0,0 @@ -load("@aspect_bazel_lib//lib:copy_to_bin.bzl", "copy_to_bin") -load("@aspect_rules_js//npm:defs.bzl", "npm_link_package") - -# Note: Link the package into node modules for testing. Notably, tests -# of a package generally don't use the associated npm package, to e.g. allow for relative -# imports, but here this is an exception as the package needs to be resolvable at runtime -# to replicate a CLI environment. -npm_link_package( - name = "node_modules/@angular-devkit/build-angular", - src = "//packages/angular_devkit/build_angular:pkg", - package = "@angular-devkit/build-angular", - root_package = package_name(), -) - -copy_to_bin( - name = "hello-world-lib", - srcs = glob(["**/*"]) + [ - ":node_modules/@angular-devkit/build-angular", - ], - visibility = ["//packages/angular_devkit/build_angular:__pkg__"], -) diff --git a/packages/angular_devkit/schematics_cli/test/BUILD.bazel b/packages/angular_devkit/schematics_cli/test/BUILD.bazel index 29eb34e8b7ea..b2ab6ee89d12 100644 --- a/packages/angular_devkit/schematics_cli/test/BUILD.bazel +++ b/packages/angular_devkit/schematics_cli/test/BUILD.bazel @@ -17,7 +17,6 @@ npm_link_package( name = "node_modules/@angular-devkit/schematics-cli", src = "//packages/angular_devkit/schematics_cli:pkg", package = "@angular-devkit/schematics-cli", - root_package = package_name(), ) jasmine_test( diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 12432f9bf209..962d60bf838f 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -91,6 +91,9 @@ importers: '@rollup/plugin-node-resolve': specifier: 16.0.3 version: 16.0.3(rollup@4.59.0) + '@rollup/wasm-node': + specifier: 4.59.0 + version: 4.59.0 '@stylistic/eslint-plugin': specifier: ^5.0.0 version: 5.9.0(eslint@10.0.2(jiti@2.6.1)) @@ -316,6 +319,9 @@ importers: jsdom: specifier: 28.1.0 version: 28.1.0 + ng-packagr: + specifier: 22.0.0-next.0 + version: 22.0.0-next.0(@angular/compiler-cli@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(typescript@6.0.0-beta))(tslib@2.8.1)(typescript@6.0.0-beta) rxjs: specifier: 7.8.2 version: 7.8.2 diff --git a/tests/BUILD.bazel b/tests/BUILD.bazel index 318bf3b965e4..7c61901ecb60 100644 --- a/tests/BUILD.bazel +++ b/tests/BUILD.bazel @@ -1,6 +1,6 @@ -load("@aspect_bazel_lib//lib:directory_path.bzl", "directory_path") +load("@bazel_lib//lib:directory_path.bzl", "directory_path") +load("@npm//:@rollup/wasm-node/package_json.bzl", rollup = "bin") load("@npm//:defs.bzl", "npm_link_all_packages") -load("@npm//:rollup/package_json.bzl", rollup = "bin") load("//tools:defaults.bzl", "ts_project") load(":e2e.bzl", "e2e_suites") diff --git a/tools/bazel/npm_package.bzl b/tools/bazel/npm_package.bzl index c6ce650d3971..3e2843f37946 100644 --- a/tools/bazel/npm_package.bzl +++ b/tools/bazel/npm_package.bzl @@ -1,8 +1,8 @@ -load("@aspect_bazel_lib//lib:copy_to_bin.bzl", "copy_to_bin") -load("@aspect_bazel_lib//lib:expand_template.bzl", "expand_template") -load("@aspect_bazel_lib//lib:jq.bzl", "jq") -load("@aspect_bazel_lib//lib:utils.bzl", "to_label") load("@aspect_rules_js//npm:defs.bzl", _npm_package = "npm_package") +load("@bazel_lib//lib:copy_to_bin.bzl", "copy_to_bin") +load("@bazel_lib//lib:expand_template.bzl", "expand_template") +load("@bazel_lib//lib:utils.bzl", "to_label") +load("@jq.bzl//jq:jq.bzl", "jq") load("@rules_pkg//:pkg.bzl", "pkg_tar") load("//tools:link_package_json_to_tarballs.bzl", "link_package_json_to_tarballs") load("//tools:snapshot_repo_filter.bzl", "SNAPSHOT_REPO_JQ_FILTER") diff --git a/tools/defaults.bzl b/tools/defaults.bzl index e9804c3e6160..dd706151d169 100644 --- a/tools/defaults.bzl +++ b/tools/defaults.bzl @@ -1,6 +1,6 @@ -load("@aspect_bazel_lib//lib:copy_to_bin.bzl", _copy_to_bin = "copy_to_bin") load("@aspect_rules_jasmine//jasmine:defs.bzl", _jasmine_test = "jasmine_test") load("@aspect_rules_js//js:defs.bzl", _js_binary = "js_binary") +load("@bazel_lib//lib:copy_to_bin.bzl", _copy_to_bin = "copy_to_bin") load("@devinfra//bazel/ts_project:index.bzl", "strict_deps_test") load("@rules_angular//src/ng_examples_db:index.bzl", _ng_examples_db = "ng_examples_db") load("@rules_angular//src/ng_package:index.bzl", _ng_package = "ng_package") diff --git a/tools/link_package_json_to_tarballs.bzl b/tools/link_package_json_to_tarballs.bzl index b01d64669834..4a31cd194bf7 100644 --- a/tools/link_package_json_to_tarballs.bzl +++ b/tools/link_package_json_to_tarballs.bzl @@ -2,8 +2,8 @@ # # Use of this source code is governed by an MIT-style license that can be # found in the LICENSE file at https://angular.dev/license -load("@aspect_bazel_lib//lib:jq.bzl", "jq") -load("@aspect_bazel_lib//lib:utils.bzl", "to_label") +load("@bazel_lib//lib:utils.bzl", "to_label") +load("@jq.bzl//jq:jq.bzl", "jq") def link_package_json_to_tarballs(name, src, pkg_deps, out): """Substitute tar paths into a package.json file for the packages it depends on. diff --git a/tools/test/BUILD.bazel b/tools/test/BUILD.bazel index 5d210ff7ac50..71ef3e3c2794 100644 --- a/tools/test/BUILD.bazel +++ b/tools/test/BUILD.bazel @@ -1,5 +1,5 @@ -load("@aspect_bazel_lib//lib:jq.bzl", "jq") load("@bazel_skylib//rules:diff_test.bzl", "diff_test") +load("@jq.bzl//jq:jq.bzl", "jq") jq( name = "final_package_json", diff --git a/tools/toolchains/BUILD.bazel b/tools/toolchains/BUILD.bazel index 5895884b09be..09bb94865046 100644 --- a/tools/toolchains/BUILD.bazel +++ b/tools/toolchains/BUILD.bazel @@ -1,18 +1,6 @@ load("@rules_cc//cc:defs.bzl", "cc_toolchain") load(":dummy_cc_toolchain.bzl", "dummy_cc_toolchain_config") -# This is needed following https://github.com/bazel-contrib/rules_nodejs/pull/3859 -toolchain( - name = "node24_windows_no_exec_toolchain", - exec_compatible_with = [], - target_compatible_with = [ - "@platforms//os:windows", - "@platforms//cpu:x86_64", - ], - toolchain = "@node24_windows_amd64//:toolchain", - toolchain_type = "@rules_nodejs//nodejs:toolchain_type", -) - # This defines a dummy C++ toolchain for Windows. # Without this, the build fails with "Unable to find a CC toolchain using toolchain resolution". dummy_cc_toolchain_config(name = "dummy_cc_toolchain_config") From a09f27a841cc41a9a02dc6f07e8d39a085d7bbf6 Mon Sep 17 00:00:00 2001 From: Alan Agius <17563226+alan-agius4@users.noreply.github.com> Date: Mon, 9 Mar 2026 13:51:43 +0000 Subject: [PATCH 117/226] test: update tests to handle regexp to be case insensitive Addresses https://github.com/angular/angular-cli/security/code-scanning/94 --- .../angular/build/src/utils/index-file/auto-csp_spec.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/angular/build/src/utils/index-file/auto-csp_spec.ts b/packages/angular/build/src/utils/index-file/auto-csp_spec.ts index 2f3337004f6e..efbd338233ad 100644 --- a/packages/angular/build/src/utils/index-file/auto-csp_spec.ts +++ b/packages/angular/build/src/utils/index-file/auto-csp_spec.ts @@ -108,7 +108,7 @@ describe('auto-csp', () => { // Head loader script is in the head. expect(result).toContain(`</script></head>`); // Only two loader scripts are created. - expect(Array.from(result.matchAll(/<script>/g)).length).toEqual(2); + expect(Array.from(result.matchAll(/<script>/gi)).length).toEqual(2); }); it('should rewrite source scripts with weird URLs', async () => { @@ -174,7 +174,7 @@ describe('auto-csp', () => { /console.log\('bar'\);<\/script>\s*<script>\s*var scripts = \[\['.\/main3.js', '', false, false\],\['.\/main4.js', '', false, false\]\];/, ); // Exactly 4 scripts should be left. - expect(Array.from(result.matchAll(/<script>/g)).length).toEqual(4); + expect(Array.from(result.matchAll(/<script>/gi)).length).toEqual(4); }); it('should write a loader script that appends to head', async () => { @@ -200,7 +200,7 @@ describe('auto-csp', () => { // Head loader script is in the head. expect(result).toContain(`</script></head>`); // Only one loader script is created. - expect(Array.from(result.matchAll(/<script>/g)).length).toEqual(1); + expect(Array.from(result.matchAll(/<script>/gi)).length).toEqual(1); }); it('should rewrite a single inline script with CRLF', async () => { From 6e4aa3bb723ec7a23ecec4cc87fc175a5b6da1f7 Mon Sep 17 00:00:00 2001 From: Alan Agius <17563226+alan-agius4@users.noreply.github.com> Date: Mon, 9 Mar 2026 15:01:03 +0000 Subject: [PATCH 118/226] build: fix broken lock file The main lock file is broken --- pnpm-lock.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 962d60bf838f..8b69f7bf84d1 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -321,7 +321,7 @@ importers: version: 28.1.0 ng-packagr: specifier: 22.0.0-next.0 - version: 22.0.0-next.0(@angular/compiler-cli@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(typescript@6.0.0-beta))(tslib@2.8.1)(typescript@6.0.0-beta) + version: 22.0.0-next.0(@angular/compiler-cli@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(typescript@6.0.1-rc))(tslib@2.8.1)(typescript@6.0.1-rc) rxjs: specifier: 7.8.2 version: 7.8.2 From b5fb457e157fa78b61565eaba6b88e9f80b3b288 Mon Sep 17 00:00:00 2001 From: Charles Lyding <19598772+clydin@users.noreply.github.com> Date: Mon, 9 Mar 2026 09:44:21 -0400 Subject: [PATCH 119/226] fix(@angular/cli): preserve exact version in ng add when requested The `ng add` command would previously always add a caret (`^`) prefix to the resolved package version, even if the user explicitly requested an exact version. This change ensures that the exact version is preserved in the package identifier if requested, while maintaining the caret prefix for general requests to ensure consistent behavior with package managers. --- packages/angular/cli/src/commands/add/cli.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/angular/cli/src/commands/add/cli.ts b/packages/angular/cli/src/commands/add/cli.ts index c7853ce8b052..136704947e69 100644 --- a/packages/angular/cli/src/commands/add/cli.ts +++ b/packages/angular/cli/src/commands/add/cli.ts @@ -45,6 +45,7 @@ interface AddCommandArgs extends SchematicsCommandArgs { interface AddCommandTaskContext { packageIdentifier: npa.Result; + isExactVersion: boolean; savePackage?: NgAddSaveDependency; collectionName?: string; executeSchematic: AddCommandModule['executeSchematic']; @@ -188,6 +189,7 @@ export default class AddCommandModule const taskContext = { packageIdentifier, + isExactVersion: packageIdentifier.type === 'version', executeSchematic: this.executeSchematic.bind(this), getPeerDependencyConflicts: this.getPeerDependencyConflicts.bind(this), dryRun: options.dryRun, @@ -515,7 +517,7 @@ export default class AddCommandModule context.packageIdentifier.name, // `save-prefix` option is ignored by some package managers so the caret is needed to ensure // that the value in the project package.json is correct. - '^' + manifest.version, + (context.isExactVersion ? '' : '^') + manifest.version, ); } From 598a690a0baea5cd54af5cea38e673c33605a627 Mon Sep 17 00:00:00 2001 From: Alan Agius <17563226+alan-agius4@users.noreply.github.com> Date: Thu, 5 Mar 2026 13:06:55 +0000 Subject: [PATCH 120/226] fix(@angular/cli): conditionally quote package names when adding dependencies based on host requirements Complex range specifiers that include shell special characters (e.g., '>', '<') can be misinterpreted when not quoted. This change ensures that version ranges are enclosed in quotes when needed to prevent such issues. --- packages/angular/cli/src/package-managers/package-manager.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/angular/cli/src/package-managers/package-manager.ts b/packages/angular/cli/src/package-managers/package-manager.ts index de3172107d8d..0dfb89e57371 100644 --- a/packages/angular/cli/src/package-managers/package-manager.ts +++ b/packages/angular/cli/src/package-managers/package-manager.ts @@ -323,7 +323,9 @@ export class PackageManager { ignoreScripts ? this.descriptor.ignoreScriptsFlag : '', ].filter((flag) => flag); - const args = [this.descriptor.addCommand, packageName, ...flags]; + const specifier = this.host.requiresQuoting ? `"${packageName}"` : packageName; + const args = [this.descriptor.addCommand, specifier, ...flags]; + await this.#run(args, options); this.#dependencyCache = null; From 3202f627738ca6338f684d145722d368344d0b94 Mon Sep 17 00:00:00 2001 From: Angular Robot <angular-robot@google.com> Date: Tue, 10 Mar 2026 05:23:57 +0000 Subject: [PATCH 121/226] build: lock file maintenance See associated pull request for more information. --- pnpm-lock.yaml | 562 ++++++++++++++++++++++++------------------------- 1 file changed, 278 insertions(+), 284 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 8b69f7bf84d1..e2f2d6baf104 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -84,7 +84,7 @@ importers: version: 6.0.0(rollup@4.59.0) '@rollup/plugin-commonjs': specifier: ^29.0.0 - version: 29.0.0(rollup@4.59.0) + version: 29.0.2(rollup@4.59.0) '@rollup/plugin-json': specifier: ^6.1.0 version: 6.1.0(rollup@4.59.0) @@ -96,10 +96,10 @@ importers: version: 4.59.0 '@stylistic/eslint-plugin': specifier: ^5.0.0 - version: 5.9.0(eslint@10.0.2(jiti@2.6.1)) + version: 5.10.0(eslint@10.0.2(jiti@2.6.1)) '@tony.ganchev/eslint-plugin-header': specifier: ~3.2.4 - version: 3.2.4(eslint@10.0.2(jiti@2.6.1)) + version: 3.2.6(eslint@10.0.2(jiti@2.6.1)) '@types/babel__core': specifier: 7.20.5 version: 7.20.5 @@ -138,7 +138,7 @@ importers: version: 4.17.24 '@types/node': specifier: ^22.12.0 - version: 22.19.13 + version: 22.19.15 '@types/npm-package-arg': specifier: ^6.1.0 version: 6.1.4 @@ -267,7 +267,7 @@ importers: version: 6.3.0(rollup@4.59.0)(typescript@6.0.1-rc) rollup-plugin-sourcemaps2: specifier: 0.5.6 - version: 0.5.6(@types/node@22.19.13)(rollup@4.59.0) + version: 0.5.6(@types/node@22.19.15)(rollup@4.59.0) semver: specifier: 7.7.4 version: 7.7.4 @@ -1091,8 +1091,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0 - '@babel/helper-define-polyfill-provider@0.6.6': - resolution: {integrity: sha512-mOAsxeeKkUKayvZR3HeTYD/fICpCPLJrU5ZjelT/PA6WHtNDBOE436YiaEUvHN454bRM3CebhDsIpieCc4texA==} + '@babel/helper-define-polyfill-provider@0.6.7': + resolution: {integrity: sha512-6Fqi8MtQ/PweQ9xvux65emkLQ83uB+qAVtfHkC9UodyHMIZdxNI01HjLCLUtybElp2KY2XNE0nOgyP1E1vXw9w==} peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 @@ -1616,8 +1616,8 @@ packages: peerDependencies: '@csstools/css-tokenizer': ^4.0.0 - '@csstools/css-syntax-patches-for-csstree@1.0.28': - resolution: {integrity: sha512-1NRf1CUBjnr3K7hu8BLxjQrKCxEe8FP/xmPTenAxCRZWVLbmGotkFvG9mfNpjA6k7Bw1bw4BilZq9cu19RA5pg==} + '@csstools/css-syntax-patches-for-csstree@1.1.0': + resolution: {integrity: sha512-H4tuz2nhWgNKLt1inYpoVCfbJbMwX/lQKp3g69rrrIMIYlFD9+zTykOKhNR8uGrAmbS/kT9n6hTFkmDkxLgeTA==} '@csstools/css-tokenizer@4.0.0': resolution: {integrity: sha512-QxULHAm7cNu72w97JUNCBFODFaXpbDg+dP8b/oWFAZ2MTRppA3U00Y2L1HqaS4J6yBqxwa/Y3nMBaxVKbB/NsA==} @@ -1815,16 +1815,16 @@ packages: eslint: optional: true - '@eslint/config-array@0.23.2': - resolution: {integrity: sha512-YF+fE6LV4v5MGWRGj7G404/OZzGNepVF8fxk7jqmqo3lrza7a0uUcDnROGRBG1WFC1omYUS/Wp1f42i0M+3Q3A==} + '@eslint/config-array@0.23.3': + resolution: {integrity: sha512-j+eEWmB6YYLwcNOdlwQ6L2OsptI/LO6lNBuLIqe5R7RetD658HLoF+Mn7LzYmAWWNNzdC6cqP+L6r8ujeYXWLw==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} - '@eslint/config-helpers@0.5.2': - resolution: {integrity: sha512-a5MxrdDXEvqnIq+LisyCX6tQMPF/dSJpCfBgBauY+pNZ28yCtSsTvyTYrMhaI+LK26bVyCJfJkT0u8KIj2i1dQ==} + '@eslint/config-helpers@0.5.3': + resolution: {integrity: sha512-lzGN0onllOZCGroKJmRwY6QcEHxbjBw1gwB8SgRSqK8YbbtEXMvKynsXc3553ckIEBxsbMBU7oOZXKIPGZNeZw==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} - '@eslint/core@1.1.0': - resolution: {integrity: sha512-/nr9K9wkr3P1EzFTdFdMoLuo1PmIxjmwvPozwoSodjNBdefGujXQUF93u1DDZpEaTuDvMsIQddsd35BwtrW9Xw==} + '@eslint/core@1.1.1': + resolution: {integrity: sha512-QUPblTtE51/7/Zhfv8BDwO0qkkzQL7P/aWWbqcf4xWLEYn1oKjdO0gglQBB4GAsu7u6wjijbCmzsUTy6mnk6oQ==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} '@eslint/eslintrc@3.3.4': @@ -1840,16 +1840,16 @@ packages: eslint: optional: true - '@eslint/object-schema@3.0.2': - resolution: {integrity: sha512-HOy56KJt48Bx8KmJ+XGQNSUMT/6dZee/M54XyUyuvTvPXJmsERRvBchsUVx1UMe1WwIH49XLAczNC7V2INsuUw==} + '@eslint/object-schema@3.0.3': + resolution: {integrity: sha512-iM869Pugn9Nsxbh/YHRqYiqd23AmIbxJOcpUMOuWCVNdoQJ5ZtwL6h3t0bcZzJUlC3Dq9jCFCESBZnX0GTv7iQ==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} - '@eslint/plugin-kit@0.6.0': - resolution: {integrity: sha512-bIZEUzOI1jkhviX2cp5vNyXQc6olzb2ohewQubuYlMXZ2Q/XjBO0x0XhGPvc9fjSIiUN0vw+0hq53BJ4eQSJKQ==} + '@eslint/plugin-kit@0.6.1': + resolution: {integrity: sha512-iH1B076HoAshH1mLpHMgwdGeTs0CYwL0SPMkGuSebZrwBp16v415e9NZXg2jtrqPVQjf6IANe2Vtlr5KswtcZQ==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} - '@exodus/bytes@1.14.1': - resolution: {integrity: sha512-OhkBFWI6GcRMUroChZiopRiSp2iAMvEBK47NhJooDqz1RERO4QuZIZnjP63TXX8GAiLABkYmX+fuQsdJ1dd2QQ==} + '@exodus/bytes@1.15.0': + resolution: {integrity: sha512-UY0nlA+feH81UGSHv92sLEPLCeZFjXOuHhrIo0HQydScuQc8s0A7kL/UdgwgDq8g8ilksmuoF35YVTNphV2aBQ==} engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0} peerDependencies: '@noble/hashes': ^1.8.0 || ^2.0.0 @@ -2132,8 +2132,8 @@ packages: '@harperfast/extended-iterable@1.0.3': resolution: {integrity: sha512-sSAYhQca3rDWtQUHSAPeO7axFIUJOI6hn1gjRC5APVE1a90tuyT8f5WIgRsFhhWA7htNkju2veB9eWL6YHi/Lw==} - '@hono/node-server@1.19.9': - resolution: {integrity: sha512-vHL6w3ecZsky+8P5MD+eFfaGTyCeOHUIFYMGpQGbrBTSmNNoxv0if69rEZ5giu36weC5saFuznL411gRX7bJDw==} + '@hono/node-server@1.19.11': + resolution: {integrity: sha512-dr8/3zEaB+p0D2n/IUrlPF1HZm586qgJNXK1a9fhg/PzdtkK7Ksd5l312tJX2yBuALqDYBlG20QEbayqPyxn+g==} engines: {node: '>=18.14.1'} peerDependencies: hono: ^4 @@ -2361,50 +2361,50 @@ packages: peerDependencies: tslib: '2' - '@jsonjoy.com/fs-core@4.56.10': - resolution: {integrity: sha512-PyAEA/3cnHhsGcdY+AmIU+ZPqTuZkDhCXQ2wkXypdLitSpd6d5Ivxhnq4wa2ETRWFVJGabYynBWxIijOswSmOw==} + '@jsonjoy.com/fs-core@4.56.11': + resolution: {integrity: sha512-wThHjzUp01ImIjfCwhs+UnFkeGPFAymwLEkOtenHewaKe2pTP12p6r1UuwikA9NEvNf9Vlck92r8fb8n/MWM5w==} engines: {node: '>=10.0'} peerDependencies: tslib: '2' - '@jsonjoy.com/fs-fsa@4.56.10': - resolution: {integrity: sha512-/FVK63ysNzTPOnCCcPoPHt77TOmachdMS422txM4KhxddLdbW1fIbFMYH0AM0ow/YchCyS5gqEjKLNyv71j/5Q==} + '@jsonjoy.com/fs-fsa@4.56.11': + resolution: {integrity: sha512-ZYlF3XbMayyp97xEN8ZvYutU99PCHjM64mMZvnCseXkCJXJDVLAwlF8Q/7q/xiWQRsv3pQBj1WXHd9eEyYcaCQ==} engines: {node: '>=10.0'} peerDependencies: tslib: '2' - '@jsonjoy.com/fs-node-builtins@4.56.10': - resolution: {integrity: sha512-uUnKz8R0YJyKq5jXpZtkGV9U0pJDt8hmYcLRrPjROheIfjMXsz82kXMgAA/qNg0wrZ1Kv+hrg7azqEZx6XZCVw==} + '@jsonjoy.com/fs-node-builtins@4.56.11': + resolution: {integrity: sha512-CNmt3a0zMCIhniFLXtzPWuUxXFU+U+2VyQiIrgt/rRVeEJNrMQUABaRbVxR0Ouw1LyR9RjaEkPM6nYpED+y43A==} engines: {node: '>=10.0'} peerDependencies: tslib: '2' - '@jsonjoy.com/fs-node-to-fsa@4.56.10': - resolution: {integrity: sha512-oH+O6Y4lhn9NyG6aEoFwIBNKZeYy66toP5LJcDOMBgL99BKQMUf/zWJspdRhMdn/3hbzQsZ8EHHsuekbFLGUWw==} + '@jsonjoy.com/fs-node-to-fsa@4.56.11': + resolution: {integrity: sha512-5OzGdvJDgZVo+xXWEYo72u81zpOWlxlbG4d4nL+hSiW+LKlua/dldNgPrpWxtvhgyntmdFQad2UTxFyGjJAGhA==} engines: {node: '>=10.0'} peerDependencies: tslib: '2' - '@jsonjoy.com/fs-node-utils@4.56.10': - resolution: {integrity: sha512-8EuPBgVI2aDPwFdaNQeNpHsyqPi3rr+85tMNG/lHvQLiVjzoZsvxA//Xd8aB567LUhy4QS03ptT+unkD/DIsNg==} + '@jsonjoy.com/fs-node-utils@4.56.11': + resolution: {integrity: sha512-JADOZFDA3wRfsuxkT0+MYc4F9hJO2PYDaY66kRTG6NqGX3+bqmKu66YFYAbII/tEmQWPZeHoClUB23rtQM9UPg==} engines: {node: '>=10.0'} peerDependencies: tslib: '2' - '@jsonjoy.com/fs-node@4.56.10': - resolution: {integrity: sha512-7R4Gv3tkUdW3dXfXiOkqxkElxKNVdd8BDOWC0/dbERd0pXpPY+s2s1Mino+aTvkGrFPiY+mmVxA7zhskm4Ue4Q==} + '@jsonjoy.com/fs-node@4.56.11': + resolution: {integrity: sha512-D65YrnP6wRuZyEWoSFnBJSr5zARVpVBGctnhie4rCsMuGXNzX7IHKaOt85/Aj7SSoG1N2+/xlNjWmkLvZ2H3Tg==} engines: {node: '>=10.0'} peerDependencies: tslib: '2' - '@jsonjoy.com/fs-print@4.56.10': - resolution: {integrity: sha512-JW4fp5mAYepzFsSGrQ48ep8FXxpg4niFWHdF78wDrFGof7F3tKDJln72QFDEn/27M1yHd4v7sKHHVPh78aWcEw==} + '@jsonjoy.com/fs-print@4.56.11': + resolution: {integrity: sha512-rnaKRgCRIn8JGTjxhS0JPE38YM3Pj/H7SW4/tglhIPbfKEkky7dpPayNKV2qy25SZSL15oFVgH/62dMZ/z7cyA==} engines: {node: '>=10.0'} peerDependencies: tslib: '2' - '@jsonjoy.com/fs-snapshot@4.56.10': - resolution: {integrity: sha512-DkR6l5fj7+qj0+fVKm/OOXMGfDFCGXLfyHkORH3DF8hxkpDgIHbhf/DwncBMs2igu/ST7OEkexn1gIqoU6Y+9g==} + '@jsonjoy.com/fs-snapshot@4.56.11': + resolution: {integrity: sha512-IIldPX+cIRQuUol9fQzSS3hqyECxVpYMJQMqdU3dCKZFRzEl1rkIkw4P6y7Oh493sI7YdxZlKr/yWdzEWZ1wGQ==} engines: {node: '>=10.0'} peerDependencies: tslib: '2' @@ -2795,14 +2795,14 @@ packages: resolution: {integrity: sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg==} engines: {node: '>=8.0.0'} - '@opentelemetry/context-async-hooks@2.5.1': - resolution: {integrity: sha512-MHbu8XxCHcBn6RwvCt2Vpn1WnLMNECfNKYB14LI5XypcgH4IE0/DiVifVR9tAkwPMyLXN8dOoPJfya3IryLQVw==} + '@opentelemetry/context-async-hooks@2.6.0': + resolution: {integrity: sha512-L8UyDwqpTcbkIK5cgwDRDYDoEhQoj8wp8BwsO19w3LB1Z41yEQm2VJyNfAi9DrLP/YTqXqWpKHyZfR9/tFYo1Q==} engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: '@opentelemetry/api': '>=1.0.0 <1.10.0' - '@opentelemetry/core@2.5.1': - resolution: {integrity: sha512-Dwlc+3HAZqpgTYq0MUyZABjFkcrKTePwuiFVLjahGD8cx3enqihmpAmdgNFO1R4m/sIe5afjJrA25Prqy4NXlA==} + '@opentelemetry/core@2.6.0': + resolution: {integrity: sha512-HLM1v2cbZ4TgYN6KEOj+Bbj8rAKriOdkF9Ed3tG25FoprSiQl7kYc+RRT6fUZGOvx0oMi5U67GoFdT+XUn8zEg==} engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: '@opentelemetry/api': '>=1.0.0 <1.10.0' @@ -3105,8 +3105,8 @@ packages: rollup: optional: true - '@rollup/plugin-commonjs@29.0.0': - resolution: {integrity: sha512-U2YHaxR2cU/yAiwKJtJRhnyLk7cifnQw0zUpISsocBDoHDJn+HTV74ABqnwr5bEgWUwFZC9oFL6wLe21lHu5eQ==} + '@rollup/plugin-commonjs@29.0.2': + resolution: {integrity: sha512-S/ggWH1LU7jTyi9DxZOKyxpVd4hF/OZ0JrEbeLjXk/DFXwRny0tjD2c992zOUYQobLrVkRVMDdmHP16HKP7GRg==} engines: {node: '>=16.0.0 || 14 >= 14.17'} peerDependencies: rollup: ^2.68.0||^3.0.0||^4.0.0 @@ -3325,8 +3325,8 @@ packages: '@standard-schema/spec@1.1.0': resolution: {integrity: sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==} - '@stylistic/eslint-plugin@5.9.0': - resolution: {integrity: sha512-FqqSkvDMYJReydrMhlugc71M76yLLQWNfmGq+SIlLa7N3kHp8Qq8i2PyWrVNAfjOyOIY+xv9XaaYwvVW7vroMA==} + '@stylistic/eslint-plugin@5.10.0': + resolution: {integrity: sha512-nPK52ZHvot8Ju/0A4ucSX1dcPV2/1clx0kLcH5wDmrE4naKso7TUC/voUyU1O9OTKTrR6MYip6LP0ogEMQ9jPQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^9.0.0 || ^10.0.0 @@ -3335,8 +3335,8 @@ packages: resolution: {integrity: sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==} engines: {node: '>=10'} - '@tony.ganchev/eslint-plugin-header@3.2.4': - resolution: {integrity: sha512-zqMKTW/KQmqKGINkhwEPoJFcJ0ewUkUAmvzHLB5N+n/6bsk7D/xkQ50VhUakG2P4JHHtqsncaXrPxgSeuBPmOw==} + '@tony.ganchev/eslint-plugin-header@3.2.6': + resolution: {integrity: sha512-eplJG8O2L2sb6UWEy2G+34KckrSNX/LNaKQcE6ADUmFJ1ywqBqpSoJRYILSehntjgxMdqMhC7y6OZAt93q++xg==} peerDependencies: eslint: '>=7.7.0' @@ -3481,8 +3481,8 @@ packages: '@types/node-fetch@2.6.13': resolution: {integrity: sha512-QGpRVpzSaUs30JBSGPjOg4Uveu384erbHBoT1zeONvyCfwQxIkUshLAOqN/k9EjGviPRmWTTe6aH2qySWKTVSw==} - '@types/node@22.19.13': - resolution: {integrity: sha512-akNQMv0wW5uyRpD2v2IEyRSZiR+BeGuoB6L310EgGObO44HSMNT8z1xzio28V8qOrgYaopIDNA18YgdXd+qTiw==} + '@types/node@22.19.15': + resolution: {integrity: sha512-F0R/h2+dsy5wJAUe3tAU6oqa2qbWY5TpNfL/RGmo1y38hiyO1w3x2jPtt76wmuaJI4DQnOBu21cNXQ2STIUUWg==} '@types/node@24.11.0': resolution: {integrity: sha512-fPxQqz4VTgPI/IQ+lj9r0h+fDR66bzoeMGHp8ASee+32OSGIkeASsoZuJixsQoVef1QJbeubcPBxKk22QVoWdw==} @@ -3511,8 +3511,8 @@ packages: '@types/pumpify@1.4.5': resolution: {integrity: sha512-BGVAQyK5yJdfIII230fVYGY47V63hUNAhryuuS3b4lEN2LNwxUXFKsEf8QLDCjmZuimlj23BHppJgcrGvNtqKg==} - '@types/qs@6.14.0': - resolution: {integrity: sha512-eOunJqu0K1923aExK6y8p6fsihYEn/BYuQ4g0CxAAgFc4b/ZLN4CrsRZ55srTdqoiLzU2B2evC+apEIxprEzkQ==} + '@types/qs@6.15.0': + resolution: {integrity: sha512-JawvT8iBVWpzTrz3EGw9BTQFg3BQNmwERdKE22vlTxawwtbyUSlMppvZYKLZzB5zgACXdXxbD3m1bXaMqP/9ow==} '@types/range-parser@1.2.7': resolution: {integrity: sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==} @@ -4051,8 +4051,8 @@ packages: '@babel/core': ^7.12.0 webpack: '>=5.61.0' - babel-plugin-polyfill-corejs2@0.4.15: - resolution: {integrity: sha512-hR3GwrRwHUfYwGfrisXPIDP3JcYfBrW7wKE7+Au6wDYl7fm/ka1NEII6kORzxNU556JjfidZeBsO10kYvtV1aw==} + babel-plugin-polyfill-corejs2@0.4.16: + resolution: {integrity: sha512-xaVwwSfebXf0ooE11BJovZYKhFjIvQo7TsyVpETuIeH2JHv0k/T6Y5j22pPTvqYqmpkxdlPAJlyJ0tfOJAoMxw==} peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 @@ -4061,13 +4061,13 @@ packages: peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 - babel-plugin-polyfill-corejs3@0.14.0: - resolution: {integrity: sha512-AvDcMxJ34W4Wgy4KBIIePQTAOP1Ie2WFwkQp3dB7FQ/f0lI5+nM96zUnYEOE1P9sEg0es5VCP0HxiWu5fUHZAQ==} + babel-plugin-polyfill-corejs3@0.14.1: + resolution: {integrity: sha512-ENp89vM9Pw4kv/koBb5N2f9bDZsR0hpf3BdPMOg/pkS3pwO4dzNnQZVXtBbeyAadgm865DmQG2jMMLqmZXvuCw==} peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 - babel-plugin-polyfill-regenerator@0.6.6: - resolution: {integrity: sha512-hYm+XLYRMvupxiQzrvXUj7YyvFFVfv5gI0R71AJzudg1g2AI2vyCPPIFEBjk162/wFzti3inBHo7isWFuEVS/A==} + babel-plugin-polyfill-regenerator@0.6.7: + resolution: {integrity: sha512-OTYbUlSwXhNgr4g6efMZgsO8//jA61P7ZbRX3iTT53VON8l+WQS8IAUEVo4a4cWknrg2W8Cj4gQhRYNCJ8GkAA==} peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 @@ -4095,8 +4095,8 @@ packages: bare-buffer: optional: true - bare-os@3.7.0: - resolution: {integrity: sha512-64Rcwj8qlnTZU8Ps6JJEdSmxBEUGgI7g8l+lMtsJLl4IsfTcHMTfJ188u2iGV6P6YPRZrtv72B2kjn+hp+Yv3g==} + bare-os@3.7.1: + resolution: {integrity: sha512-ebvMaS5BgZKmJlvuWh14dg9rbUI84QeV3WlWn6Ph6lFI8jJoh7ADtVTyD2c93euwbe+zgi0DVrl4YmqXeM9aIA==} engines: {bare: '>=1.14.0'} bare-path@3.0.0: @@ -4274,8 +4274,8 @@ packages: resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} engines: {node: '>=6'} - caniuse-lite@1.0.30001775: - resolution: {integrity: sha512-s3Qv7Lht9zbVKE9XoTyRG6wVDCKdtOFIjBGg3+Yhn6JaytuNKPIjBMTMIY1AnOH3seL5mvF+x33oGAyK3hVt3A==} + caniuse-lite@1.0.30001777: + resolution: {integrity: sha512-tmN+fJxroPndC74efCdp12j+0rk0RHwV5Jwa1zWaFVyw2ZxAuPeG8ZgWC3Wz7uSjT3qMRQ5XHZ4COgQmsCMJAQ==} caseless@0.12.0: resolution: {integrity: sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==} @@ -4489,8 +4489,8 @@ packages: resolution: {integrity: sha512-tJtZBBHA6vjIAaF6EnIaq6laBBP9aq/Y3ouVJjEfoHbRBcHBAHYcMh/w8LDrk2PvIMMq8gmopa5D4V8RmbrxGw==} engines: {node: '>= 0.10'} - cosmiconfig@9.0.0: - resolution: {integrity: sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==} + cosmiconfig@9.0.1: + resolution: {integrity: sha512-hr4ihw+DBqcvrsEDioRO31Z17x71pUYoNe/4h6Z0wB72p7MU7/9gH8Q3s12NFhHPfYBBOV3qyfUxmr/Yn3shnQ==} engines: {node: '>=14'} peerDependencies: typescript: '>=4.9.5' @@ -4520,8 +4520,8 @@ packages: css-select@6.0.0: resolution: {integrity: sha512-rZZVSLle8v0+EY8QAkDWrKhpgt6SA5OtHsgBnsj6ZaLb5dmDVOWUDtQitd9ydxxvEjhewNudS6eTVU7uOyzvXw==} - css-tree@3.1.0: - resolution: {integrity: sha512-0eW44TGN5SQXU1mWSkKwFstI/22X2bG1nYzZTYMAWjylYURhse752YgbE4Cx46AC+bAvI+/dYTPRk1LqSUnu6w==} + css-tree@3.2.1: + resolution: {integrity: sha512-X7sjQzceUhu1u7Y/ylrRZFU2FS6LRiFVp6rKLPg23y3x3c3DOKAwuXGDp+PAGjh6CSnCjYeAul8pcT8bAl+lSA==} engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0} css-what@7.0.0: @@ -4533,8 +4533,8 @@ packages: engines: {node: '>=4'} hasBin: true - cssstyle@6.1.0: - resolution: {integrity: sha512-Ml4fP2UT2K3CUBQnVlbdV/8aFDdlY69E+YnwJM+3VUWl08S3J8c8aRuJqCkD9Py8DHZ7zNNvsfKl8psocHZEFg==} + cssstyle@6.2.0: + resolution: {integrity: sha512-Fm5NvhYathRnXNVndkUsCCuR63DCLVVwGOOwQw782coXFi5HhkXdu289l59HlXZBawsyNccXfWRYvLzcDCdDig==} engines: {node: '>=20'} custom-event@1.0.1: @@ -4769,8 +4769,8 @@ packages: engines: {node: '>=0.12.18'} hasBin: true - electron-to-chromium@1.5.302: - resolution: {integrity: sha512-sM6HAN2LyK82IyPBpznDRqlTQAtuSaO+ShzFiWTvoMJLHyZ+Y39r8VMfHzwbU8MVBzQ4Wdn85+wlZl2TLGIlwg==} + electron-to-chromium@1.5.307: + resolution: {integrity: sha512-5z3uFKBWjiNR44nFcYdkcXjKMbg5KXNdciu7mhTPo9tB7NbqSNP2sSnGR+fqknZSCwKkBN+oxiiajWs4dT6ORg==} emoji-regex@10.6.0: resolution: {integrity: sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==} @@ -4957,8 +4957,8 @@ packages: resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} engines: {node: '>=8.0.0'} - eslint-scope@9.1.1: - resolution: {integrity: sha512-GaUN0sWim5qc8KVErfPBWmc31LEsOkrUJbvJZV+xuL3u2phMUK4HIvXlWAakfC8W4nzlK+chPEAkYOYb5ZScIw==} + eslint-scope@9.1.2: + resolution: {integrity: sha512-xS90H51cKw0jltxmvmHy2Iai1LIqrfbw57b79w/J7MfvDfkIkFZ+kj6zC3BjtUwh150HsSSdxXZcsuv72miDFQ==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} eslint-visitor-keys@3.4.3: @@ -4987,8 +4987,8 @@ packages: resolution: {integrity: sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - espree@11.1.1: - resolution: {integrity: sha512-AVHPqQoZYc+RUM4/3Ly5udlZY/U4LS8pIG05jEjWM2lQMU/oaZ7qshzAl2YP1tfNmXfftH3ohurfwNAug+MnsQ==} + espree@11.2.0: + resolution: {integrity: sha512-7p3DrVEIopW1B1avAGLuCSh1jubc01H2JHc8B4qqGblmg5gI9yumBgACjWo4JlIc04ufug4xJ3SQI8HkS/Rgzw==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} esprima@4.0.1: @@ -5064,8 +5064,8 @@ packages: express-rate-limit@5.5.1: resolution: {integrity: sha512-MTjE2eIbHv5DyfuFz4zLYWxpqVhEhkTiwFGuB74Q9CSou2WHO52nlE5y3Zlg6SIsiYUIPj6ifFxnkPz6O3sIUg==} - express-rate-limit@8.2.1: - resolution: {integrity: sha512-PCZEIEIxqwhzw4KF0n7QF4QqruVTcF73O5kFKUnGOyjbCCgizBBiFaYpd/fnBLUMPw/BWw9OsiN7GgrNYr7j6g==} + express-rate-limit@8.3.0: + resolution: {integrity: sha512-KJzBawY6fB9FiZGdE/0aftepZ91YlaGIrV8vgblRM3J8X+dHx/aiowJWwkx6LIGyuqGiANsjSwwrbb8mifOJ4Q==} engines: {node: '>= 16'} peerDependencies: express: '>= 4.11' @@ -5194,8 +5194,8 @@ packages: resolution: {integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==} hasBin: true - flatted@3.3.3: - resolution: {integrity: sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==} + flatted@3.4.0: + resolution: {integrity: sha512-kC6Bb+ooptOIvWj5B63EQWkF0FEnNjV2ZNkLMLZRDDduIiWeFF4iKnslwhiWxjAdbg4NzTNo6h0qLuvFrcx+Sw==} folder-hash@4.1.1: resolution: {integrity: sha512-1ZSlKJSbET3XpglnEXC9g+QF4QRZhqHIjpFfa4pAMfO4tu/XYPafpeHEX6zOFS2EolOIXr0lPh1eSjmdWItX2w==} @@ -5406,8 +5406,8 @@ packages: peerDependencies: graphql: ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 - graphql@16.13.0: - resolution: {integrity: sha512-uSisMYERbaB9bkA9M4/4dnqyktaEkf1kMHNKq/7DHyxVeWqHQ2mBmVqm5u6/FVHwF3iCNalKcg82Zfl+tffWoA==} + graphql@16.13.1: + resolution: {integrity: sha512-gGgrVCoDKlIZ8fIqXBBb0pPKqDgki0Z/FSKNiQzSGj2uEYHr1tq5wmBegGwJx6QB5S5cM0khSBpi/JFHMCvsmQ==} engines: {node: ^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0} grpc-gcp@1.0.1: @@ -5455,8 +5455,8 @@ packages: resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} engines: {node: '>= 0.4'} - hono@4.12.3: - resolution: {integrity: sha512-SFsVSjp8sj5UumXOOFlkZOG6XS9SJDKw0TbwFeV+AJ8xlST8kxK5Z/5EYa111UY8732lK2S/xB653ceuaoGwpg==} + hono@4.12.5: + resolution: {integrity: sha512-3qq+FUBtlTHhtYxbxheZgY8NIFnkkC/MR8u5TTsr7YZ3wixryQ3cCwn3iZbg8p8B88iDBBAYSfZDS75t8MN7Vg==} engines: {node: '>=16.9.0'} hosted-git-info@9.0.2: @@ -5594,12 +5594,12 @@ packages: engines: {node: '>=0.10.0'} hasBin: true - immutable@3.8.2: - resolution: {integrity: sha512-15gZoQ38eYjEjxkorfbcgBKBL6R7T459OuK+CpcWt7O3KF4uPCx2tD0uFETlUDIyo+1789crbMhTvQBSR5yBMg==} + immutable@3.8.3: + resolution: {integrity: sha512-AUY/VyX0E5XlibOmWt10uabJzam1zlYjwiEgQSDc5+UIkFNaF9WM0JxXKaNMGf+F/ffUF+7kRKXM9A7C0xXqMg==} engines: {node: '>=0.10.0'} - immutable@5.1.4: - resolution: {integrity: sha512-p6u1bG3YSnINT5RQmx/yRZBpenIl30kVxkTLDyHLIMk0gict704Q9n+thfDI7lTRm9vXdDYutVzXhzcThxTnXA==} + immutable@5.1.5: + resolution: {integrity: sha512-t7xcm2siw+hlUM68I+UEOK+z84RzmN59as9DZ7P1l0994DKUWV7UXBMQZVxaoMSRQ+PBZbHCOoBt7a2wxOMt+A==} import-fresh@3.3.1: resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==} @@ -5627,10 +5627,6 @@ packages: resolution: {integrity: sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==} engines: {node: '>= 0.4'} - ip-address@10.0.1: - resolution: {integrity: sha512-NWv9YLW4PoW2B7xtzaS3NCot75m6nK7Icdv0o3lfMceJVRfSoQwqD4wEH5rLwoKJwUiZ/rfpiVBhnaF0FK4HoA==} - engines: {node: '>= 12'} - ip-address@10.1.0: resolution: {integrity: sha512-XXADHxXmvT9+CRxhXg56LJovE+bmWnEWB78LB83VZTprKTmaC5QfruXocxzTZ2Kl0DNwKuBdlIhjL8LeY8Sf8Q==} engines: {node: '>= 12'} @@ -5928,8 +5924,8 @@ packages: resolution: {integrity: sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==} hasBin: true - jose@6.1.3: - resolution: {integrity: sha512-0TpaTfihd4QMNwrz/ob2Bp7X04yuxJkjRGi4aKmOqwhov54i6u79oCv7T+C7lo70MKH6BesI3vscD1yb/yzKXQ==} + jose@6.2.0: + resolution: {integrity: sha512-xsfE1TcSCbUdo6U07tR0mvhg0flGxU8tPLbF03mirl2ukGQENhUg4ubGYQnhVH0b5stLlPM+WOqDkEl1R1y5sQ==} js-base64@3.7.8: resolution: {integrity: sha512-hNngCeKxIUQiEUN3GPJOkz4wF/YvdUdbNL9hsBcMQTkKzboD7T/q3OYOuuPZLUE6dBxSGpwhk5mwuDud7JVAow==} @@ -6230,8 +6226,8 @@ packages: resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} engines: {node: '>= 0.4'} - mdn-data@2.12.2: - resolution: {integrity: sha512-IEn+pegP1aManZuckezWCO+XZQDplx1366JoVhTpMpBB1sPey/SbveZQUosKiKiGYjg1wH4pMlNgXbCiYgihQA==} + mdn-data@2.27.1: + resolution: {integrity: sha512-9Yubnt3e8A0OKwxYSXyhLymGW4sCufcLG6VdiDdUGVkPhpqLxlvP5vl1983gQjJl3tqbrM731mjaZaP68AgosQ==} media-typer@0.3.0: resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==} @@ -6241,8 +6237,8 @@ packages: resolution: {integrity: sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==} engines: {node: '>= 0.8'} - memfs@4.56.10: - resolution: {integrity: sha512-eLvzyrwqLHnLYalJP7YZ3wBe79MXktMdfQbvMrVD80K+NhrIukCVBvgP30zTJYEEDh9hZ/ep9z0KOdD7FSHo7w==} + memfs@4.56.11: + resolution: {integrity: sha512-/GodtwVeKVIHZKLUSr2ZdOxKBC5hHki4JNCU22DoCGPEHr5o2PD5U721zvESKyWwCfTfavFl9WZYgA13OAYK0g==} peerDependencies: tslib: '2' @@ -6523,8 +6519,8 @@ packages: engines: {node: ^20.17.0 || >=22.9.0} hasBin: true - node-releases@2.0.27: - resolution: {integrity: sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==} + node-releases@2.0.36: + resolution: {integrity: sha512-TdC8FSgHz8Mwtw9g5L4gR/Sh9XhSP/0DEkQxfEFXOpiul5IiHgHan2VhYYb6agDSfp4KuvltmGApc8HMgUrIkA==} nopt@9.0.0: resolution: {integrity: sha512-Zhq3a+yFKrYwSBluL4H9XP3m3y5uvQkB/09CwDruCiRmR/UJYnn9W4R48ry0uGC70aeTPKLynBtscP9efFFcPw==} @@ -7319,8 +7315,8 @@ packages: resolution: {integrity: sha512-1gnZf7DFcoIcajTjTwjwuDjzuz4PPcY2StKPlsGAQ1+YH20IRVrBaXSWmdjowTJ6u8Rc01PoYOGHXfP1mYcZNQ==} engines: {node: '>= 18'} - serialize-javascript@7.0.3: - resolution: {integrity: sha512-h+cZ/XXarqDgCjo+YSyQU/ulDEESGGf8AMK9pPNmhNSl/FzPl6L8pMp1leca5z6NuG6tvV/auC8/43tmovowww==} + serialize-javascript@7.0.4: + resolution: {integrity: sha512-DuGdB+Po43Q5Jxwpzt1lhyFSYKryqoNjQSA9M92tyw0lyHIOur+XCalOUe0KTJpyqzT8+fQ5A0Jf7vCx/NKmIg==} engines: {node: '>=20.0.0'} serve-index@1.9.2: @@ -7642,8 +7638,8 @@ packages: resolution: {integrity: sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==} engines: {node: '>=6'} - tar-fs@3.1.1: - resolution: {integrity: sha512-LZA0oaPOc2fVo82Txf3gw+AkEd38szODlptMYejQUhndHMLQ9M059uXR+AfS7DNo0NpINvSqDsvyaCrBVkptWg==} + tar-fs@3.1.2: + resolution: {integrity: sha512-QGxxTxxyleAdyM3kpFs14ymbYmNFrfY+pHj7Z8FgtbZ7w2//VAgLMac7sT6nRpIHjppXO2AwwEOg0bPFVRcmXw==} tar-stream@3.1.7: resolution: {integrity: sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==} @@ -7651,8 +7647,8 @@ packages: tar-stream@3.1.8: resolution: {integrity: sha512-U6QpVRyCGHva435KoNWy9PRoi2IFYCgtEhq9nmrPPpbRacPs9IH4aJ3gbrFC8dPcXvdSZ4XXfXT5Fshbp2MtlQ==} - tar@7.5.9: - resolution: {integrity: sha512-BTLcK0xsDh2+PUe9F6c2TlRp4zOOBMTkoQHQIWSIzI0R7KG46uEwq4OPk2W7bZcprBMsuaeFsqwYr7pjh6CuHg==} + tar@7.5.10: + resolution: {integrity: sha512-8mOPs1//5q/rlkNSPcCegA6hiHJYDmSLEI8aMH/CdSQJNWztHC9WHNam5zdQlfpTwB9Xp7IBEsHfV5LKMJGVAw==} engines: {node: '>=18'} teeny-request@10.1.0: @@ -7728,15 +7724,15 @@ packages: tldts-core@6.1.86: resolution: {integrity: sha512-Je6p7pkk+KMzMv2XXKmAE3McmolOQFdxkKw0R8EYNr7sELW46JqnNeTX8ybPiQgvg1ymCoF8LXs5fzFaZvJPTA==} - tldts-core@7.0.23: - resolution: {integrity: sha512-0g9vrtDQLrNIiCj22HSe9d4mLVG3g5ph5DZ8zCKBr4OtrspmNB6ss7hVyzArAeE88ceZocIEGkyW1Ime7fxPtQ==} + tldts-core@7.0.25: + resolution: {integrity: sha512-ZjCZK0rppSBu7rjHYDYsEaMOIbbT+nWF57hKkv4IUmZWBNrBWBOjIElc0mKRgLM8bm7x/BBlof6t2gi/Oq/Asw==} tldts@6.1.86: resolution: {integrity: sha512-WMi/OQ2axVTf/ykqCQgXiIct+mSQDFdH2fkwhPwgEwvJ1kSzZRiinb0zF2Xb8u4+OqPChmyI6MEu4EezNJz+FQ==} hasBin: true - tldts@7.0.23: - resolution: {integrity: sha512-ASdhgQIBSay0R/eXggAkQ53G4nTJqTXqC2kbaBbdDwM7SkjyZyO0OaaN1/FH7U/yCeqOHDwFO5j8+Os/IS1dXw==} + tldts@7.0.25: + resolution: {integrity: sha512-keinCnPbwXEUG3ilrWQZU+CqcTTzHq9m2HhoUP2l7Xmi8l1LuijAXLpAJ5zRW+ifKTNscs4NdCkfkDCBYm352w==} hasBin: true tmp@0.2.5: @@ -8654,7 +8650,7 @@ snapshots: dependencies: '@asamuzakjp/nwsapi': 2.3.9 bidi-js: 1.0.3 - css-tree: 3.1.0 + css-tree: 3.2.1 is-potential-custom-element-name: 1.0.1 lru-cache: 11.2.6 @@ -8728,7 +8724,7 @@ snapshots: regexpu-core: 6.4.0 semver: 6.3.1 - '@babel/helper-define-polyfill-provider@0.6.6(@babel/core@7.29.0)': + '@babel/helper-define-polyfill-provider@0.6.7(@babel/core@7.29.0)': dependencies: '@babel/core': 7.29.0 '@babel/helper-compilation-targets': 7.28.6 @@ -9164,9 +9160,9 @@ snapshots: '@babel/core': 7.29.0 '@babel/helper-module-imports': 7.28.6 '@babel/helper-plugin-utils': 7.28.6 - babel-plugin-polyfill-corejs2: 0.4.15(@babel/core@7.29.0) + babel-plugin-polyfill-corejs2: 0.4.16(@babel/core@7.29.0) babel-plugin-polyfill-corejs3: 0.13.0(@babel/core@7.29.0) - babel-plugin-polyfill-regenerator: 0.6.6(@babel/core@7.29.0) + babel-plugin-polyfill-regenerator: 0.6.7(@babel/core@7.29.0) semver: 6.3.1 transitivePeerDependencies: - supports-color @@ -9290,9 +9286,9 @@ snapshots: '@babel/plugin-transform-unicode-regex': 7.27.1(@babel/core@7.29.0) '@babel/plugin-transform-unicode-sets-regex': 7.28.6(@babel/core@7.29.0) '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.29.0) - babel-plugin-polyfill-corejs2: 0.4.15(@babel/core@7.29.0) - babel-plugin-polyfill-corejs3: 0.14.0(@babel/core@7.29.0) - babel-plugin-polyfill-regenerator: 0.6.6(@babel/core@7.29.0) + babel-plugin-polyfill-corejs2: 0.4.16(@babel/core@7.29.0) + babel-plugin-polyfill-corejs3: 0.14.1(@babel/core@7.29.0) + babel-plugin-polyfill-regenerator: 0.6.7(@babel/core@7.29.0) core-js-compat: 3.48.0 semver: 6.3.1 transitivePeerDependencies: @@ -9338,7 +9334,7 @@ snapshots: '@bramus/specificity@2.4.2': dependencies: - css-tree: 3.1.0 + css-tree: 3.2.1 '@colors/colors@1.5.0': {} @@ -9368,7 +9364,7 @@ snapshots: dependencies: '@csstools/css-tokenizer': 4.0.0 - '@csstools/css-syntax-patches-for-csstree@1.0.28': {} + '@csstools/css-syntax-patches-for-csstree@1.1.0': {} '@csstools/css-tokenizer@4.0.0': {} @@ -9498,23 +9494,23 @@ snapshots: '@eslint/compat@2.0.2(eslint@10.0.2(jiti@2.6.1))': dependencies: - '@eslint/core': 1.1.0 + '@eslint/core': 1.1.1 optionalDependencies: eslint: 10.0.2(jiti@2.6.1) - '@eslint/config-array@0.23.2': + '@eslint/config-array@0.23.3': dependencies: - '@eslint/object-schema': 3.0.2 + '@eslint/object-schema': 3.0.3 debug: 4.4.3(supports-color@10.2.2) minimatch: 10.2.4 transitivePeerDependencies: - supports-color - '@eslint/config-helpers@0.5.2': + '@eslint/config-helpers@0.5.3': dependencies: - '@eslint/core': 1.1.0 + '@eslint/core': 1.1.1 - '@eslint/core@1.1.0': + '@eslint/core@1.1.1': dependencies: '@types/json-schema': 7.0.15 @@ -9536,14 +9532,14 @@ snapshots: optionalDependencies: eslint: 10.0.2(jiti@2.6.1) - '@eslint/object-schema@3.0.2': {} + '@eslint/object-schema@3.0.3': {} - '@eslint/plugin-kit@0.6.0': + '@eslint/plugin-kit@0.6.1': dependencies: - '@eslint/core': 1.1.0 + '@eslint/core': 1.1.1 levn: 0.4.1 - '@exodus/bytes@1.14.1': {} + '@exodus/bytes@1.15.0': {} '@firebase/ai@2.9.0(@firebase/app-types@0.9.3)(@firebase/app@0.14.9)': dependencies: @@ -9901,8 +9897,8 @@ snapshots: '@google-cloud/promisify': 5.0.0 '@grpc/proto-loader': 0.7.15 '@opentelemetry/api': 1.9.0 - '@opentelemetry/context-async-hooks': 2.5.1(@opentelemetry/api@1.9.0) - '@opentelemetry/core': 2.5.1(@opentelemetry/api@1.9.0) + '@opentelemetry/context-async-hooks': 2.6.0(@opentelemetry/api@1.9.0) + '@opentelemetry/core': 2.6.0(@opentelemetry/api@1.9.0) '@opentelemetry/semantic-conventions': 1.40.0 '@types/big.js': 6.2.2 '@types/stack-trace': 0.0.33 @@ -9949,7 +9945,7 @@ snapshots: '@grpc/grpc-js@1.9.15': dependencies: '@grpc/proto-loader': 0.7.15 - '@types/node': 22.19.13 + '@types/node': 22.19.15 '@grpc/proto-loader@0.7.15': dependencies: @@ -9968,9 +9964,9 @@ snapshots: '@harperfast/extended-iterable@1.0.3': optional: true - '@hono/node-server@1.19.9(hono@4.12.3)': + '@hono/node-server@1.19.11(hono@4.12.5)': dependencies: - hono: 4.12.3 + hono: 4.12.5 '@humanfs/core@0.19.1': {} @@ -10169,58 +10165,58 @@ snapshots: dependencies: tslib: 2.8.1 - '@jsonjoy.com/fs-core@4.56.10(tslib@2.8.1)': + '@jsonjoy.com/fs-core@4.56.11(tslib@2.8.1)': dependencies: - '@jsonjoy.com/fs-node-builtins': 4.56.10(tslib@2.8.1) - '@jsonjoy.com/fs-node-utils': 4.56.10(tslib@2.8.1) + '@jsonjoy.com/fs-node-builtins': 4.56.11(tslib@2.8.1) + '@jsonjoy.com/fs-node-utils': 4.56.11(tslib@2.8.1) thingies: 2.5.0(tslib@2.8.1) tslib: 2.8.1 - '@jsonjoy.com/fs-fsa@4.56.10(tslib@2.8.1)': + '@jsonjoy.com/fs-fsa@4.56.11(tslib@2.8.1)': dependencies: - '@jsonjoy.com/fs-core': 4.56.10(tslib@2.8.1) - '@jsonjoy.com/fs-node-builtins': 4.56.10(tslib@2.8.1) - '@jsonjoy.com/fs-node-utils': 4.56.10(tslib@2.8.1) + '@jsonjoy.com/fs-core': 4.56.11(tslib@2.8.1) + '@jsonjoy.com/fs-node-builtins': 4.56.11(tslib@2.8.1) + '@jsonjoy.com/fs-node-utils': 4.56.11(tslib@2.8.1) thingies: 2.5.0(tslib@2.8.1) tslib: 2.8.1 - '@jsonjoy.com/fs-node-builtins@4.56.10(tslib@2.8.1)': + '@jsonjoy.com/fs-node-builtins@4.56.11(tslib@2.8.1)': dependencies: tslib: 2.8.1 - '@jsonjoy.com/fs-node-to-fsa@4.56.10(tslib@2.8.1)': + '@jsonjoy.com/fs-node-to-fsa@4.56.11(tslib@2.8.1)': dependencies: - '@jsonjoy.com/fs-fsa': 4.56.10(tslib@2.8.1) - '@jsonjoy.com/fs-node-builtins': 4.56.10(tslib@2.8.1) - '@jsonjoy.com/fs-node-utils': 4.56.10(tslib@2.8.1) + '@jsonjoy.com/fs-fsa': 4.56.11(tslib@2.8.1) + '@jsonjoy.com/fs-node-builtins': 4.56.11(tslib@2.8.1) + '@jsonjoy.com/fs-node-utils': 4.56.11(tslib@2.8.1) tslib: 2.8.1 - '@jsonjoy.com/fs-node-utils@4.56.10(tslib@2.8.1)': + '@jsonjoy.com/fs-node-utils@4.56.11(tslib@2.8.1)': dependencies: - '@jsonjoy.com/fs-node-builtins': 4.56.10(tslib@2.8.1) + '@jsonjoy.com/fs-node-builtins': 4.56.11(tslib@2.8.1) tslib: 2.8.1 - '@jsonjoy.com/fs-node@4.56.10(tslib@2.8.1)': + '@jsonjoy.com/fs-node@4.56.11(tslib@2.8.1)': dependencies: - '@jsonjoy.com/fs-core': 4.56.10(tslib@2.8.1) - '@jsonjoy.com/fs-node-builtins': 4.56.10(tslib@2.8.1) - '@jsonjoy.com/fs-node-utils': 4.56.10(tslib@2.8.1) - '@jsonjoy.com/fs-print': 4.56.10(tslib@2.8.1) - '@jsonjoy.com/fs-snapshot': 4.56.10(tslib@2.8.1) + '@jsonjoy.com/fs-core': 4.56.11(tslib@2.8.1) + '@jsonjoy.com/fs-node-builtins': 4.56.11(tslib@2.8.1) + '@jsonjoy.com/fs-node-utils': 4.56.11(tslib@2.8.1) + '@jsonjoy.com/fs-print': 4.56.11(tslib@2.8.1) + '@jsonjoy.com/fs-snapshot': 4.56.11(tslib@2.8.1) glob-to-regex.js: 1.2.0(tslib@2.8.1) thingies: 2.5.0(tslib@2.8.1) tslib: 2.8.1 - '@jsonjoy.com/fs-print@4.56.10(tslib@2.8.1)': + '@jsonjoy.com/fs-print@4.56.11(tslib@2.8.1)': dependencies: - '@jsonjoy.com/fs-node-utils': 4.56.10(tslib@2.8.1) + '@jsonjoy.com/fs-node-utils': 4.56.11(tslib@2.8.1) tree-dump: 1.1.0(tslib@2.8.1) tslib: 2.8.1 - '@jsonjoy.com/fs-snapshot@4.56.10(tslib@2.8.1)': + '@jsonjoy.com/fs-snapshot@4.56.11(tslib@2.8.1)': dependencies: '@jsonjoy.com/buffers': 17.67.0(tslib@2.8.1) - '@jsonjoy.com/fs-node-utils': 4.56.10(tslib@2.8.1) + '@jsonjoy.com/fs-node-utils': 4.56.11(tslib@2.8.1) '@jsonjoy.com/json-pack': 17.67.0(tslib@2.8.1) '@jsonjoy.com/util': 17.67.0(tslib@2.8.1) tslib: 2.8.1 @@ -10305,7 +10301,7 @@ snapshots: '@modelcontextprotocol/sdk@1.27.1(zod@4.3.6)': dependencies: - '@hono/node-server': 1.19.9(hono@4.12.3) + '@hono/node-server': 1.19.11(hono@4.12.5) ajv: 8.18.0 ajv-formats: 3.0.1(ajv@8.18.0) content-type: 1.0.5 @@ -10314,9 +10310,9 @@ snapshots: eventsource: 3.0.7 eventsource-parser: 3.0.6 express: 5.2.1 - express-rate-limit: 8.2.1(express@5.2.1) - hono: 4.12.3 - jose: 6.1.3 + express-rate-limit: 8.3.0(express@5.2.1) + hono: 4.12.5 + jose: 6.2.0 json-schema-typed: 8.0.2 pkce-challenge: 5.0.1 raw-body: 3.0.2 @@ -10556,8 +10552,8 @@ snapshots: '@octokit/graphql-schema@15.26.1': dependencies: - graphql: 16.13.0 - graphql-tag: 2.12.6(graphql@16.13.0) + graphql: 16.13.1 + graphql-tag: 2.12.6(graphql@16.13.1) '@octokit/graphql@9.0.3': dependencies: @@ -10625,11 +10621,11 @@ snapshots: '@opentelemetry/api@1.9.0': {} - '@opentelemetry/context-async-hooks@2.5.1(@opentelemetry/api@1.9.0)': + '@opentelemetry/context-async-hooks@2.6.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 - '@opentelemetry/core@2.5.1(@opentelemetry/api@1.9.0)': + '@opentelemetry/core@2.6.0(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 '@opentelemetry/semantic-conventions': 1.40.0 @@ -10844,7 +10840,7 @@ snapshots: progress: 2.0.3 proxy-agent: 6.5.0 semver: 7.7.4 - tar-fs: 3.1.1 + tar-fs: 3.1.2 yargs: 17.7.2 transitivePeerDependencies: - bare-abort-controller @@ -10905,7 +10901,7 @@ snapshots: optionalDependencies: rollup: 4.59.0 - '@rollup/plugin-commonjs@29.0.0(rollup@4.59.0)': + '@rollup/plugin-commonjs@29.0.2(rollup@4.59.0)': dependencies: '@rollup/pluginutils': 5.3.0(rollup@4.59.0) commondir: 1.0.1 @@ -11064,7 +11060,7 @@ snapshots: '@standard-schema/spec@1.1.0': {} - '@stylistic/eslint-plugin@5.9.0(eslint@10.0.2(jiti@2.6.1))': + '@stylistic/eslint-plugin@5.10.0(eslint@10.0.2(jiti@2.6.1))': dependencies: '@eslint-community/eslint-utils': 4.9.1(eslint@10.0.2(jiti@2.6.1)) '@typescript-eslint/types': 8.56.1 @@ -11078,7 +11074,7 @@ snapshots: dependencies: defer-to-connect: 2.0.1 - '@tony.ganchev/eslint-plugin-header@3.2.4(eslint@10.0.2(jiti@2.6.1))': + '@tony.ganchev/eslint-plugin-header@3.2.6(eslint@10.0.2(jiti@2.6.1))': dependencies: eslint: 10.0.2(jiti@2.6.1) @@ -11124,16 +11120,16 @@ snapshots: '@types/body-parser@1.19.6': dependencies: '@types/connect': 3.4.38 - '@types/node': 22.19.13 + '@types/node': 22.19.15 '@types/bonjour@3.5.13': dependencies: - '@types/node': 22.19.13 + '@types/node': 22.19.15 '@types/browser-sync@2.29.1': dependencies: '@types/micromatch': 2.3.35 - '@types/node': 22.19.13 + '@types/node': 22.19.15 '@types/serve-static': 2.2.0 chokidar: 3.6.0 @@ -11144,26 +11140,26 @@ snapshots: '@types/cli-progress@3.11.6': dependencies: - '@types/node': 22.19.13 + '@types/node': 22.19.15 '@types/connect-history-api-fallback@1.5.4': dependencies: '@types/express-serve-static-core': 4.19.8 - '@types/node': 22.19.13 + '@types/node': 22.19.15 '@types/connect@3.4.38': dependencies: - '@types/node': 22.19.13 + '@types/node': 22.19.15 '@types/cors@2.8.19': dependencies: - '@types/node': 22.19.13 + '@types/node': 22.19.15 '@types/deep-eql@4.0.2': {} '@types/duplexify@3.6.5': dependencies: - '@types/node': 22.19.13 + '@types/node': 22.19.15 '@types/ejs@3.1.5': {} @@ -11185,15 +11181,15 @@ snapshots: '@types/express-serve-static-core@4.19.8': dependencies: - '@types/node': 22.19.13 - '@types/qs': 6.14.0 + '@types/node': 22.19.15 + '@types/qs': 6.15.0 '@types/range-parser': 1.2.7 '@types/send': 1.2.1 '@types/express-serve-static-core@5.1.1': dependencies: - '@types/node': 22.19.13 - '@types/qs': 6.14.0 + '@types/node': 22.19.15 + '@types/qs': 6.15.0 '@types/range-parser': 1.2.7 '@types/send': 1.2.1 @@ -11201,7 +11197,7 @@ snapshots: dependencies: '@types/body-parser': 1.19.6 '@types/express-serve-static-core': 4.19.8 - '@types/qs': 6.14.0 + '@types/qs': 6.15.0 '@types/serve-static': 1.15.10 '@types/express@5.0.6': @@ -11214,13 +11210,13 @@ snapshots: '@types/graceful-fs@4.1.9': dependencies: - '@types/node': 22.19.13 + '@types/node': 22.19.15 '@types/http-errors@2.0.5': {} '@types/http-proxy@1.17.17': dependencies: - '@types/node': 22.19.13 + '@types/node': 22.19.15 '@types/ini@4.1.1': {} @@ -11236,7 +11232,7 @@ snapshots: '@types/karma@6.3.9': dependencies: - '@types/node': 22.19.13 + '@types/node': 22.19.15 log4js: 6.9.1 transitivePeerDependencies: - supports-color @@ -11245,7 +11241,7 @@ snapshots: '@types/loader-utils@3.0.0(esbuild@0.27.3)': dependencies: - '@types/node': 22.19.13 + '@types/node': 22.19.15 webpack: 5.105.4(esbuild@0.27.3) transitivePeerDependencies: - '@swc/core' @@ -11263,10 +11259,10 @@ snapshots: '@types/node-fetch@2.6.13': dependencies: - '@types/node': 22.19.13 + '@types/node': 22.19.15 form-data: 4.0.5 - '@types/node@22.19.13': + '@types/node@22.19.15': dependencies: undici-types: 7.22.0 @@ -11278,7 +11274,7 @@ snapshots: '@types/npm-registry-fetch@8.0.9': dependencies: - '@types/node': 22.19.13 + '@types/node': 22.19.15 '@types/node-fetch': 2.6.13 '@types/npm-package-arg': 6.1.4 '@types/npmlog': 7.0.0 @@ -11286,11 +11282,11 @@ snapshots: '@types/npmlog@7.0.0': dependencies: - '@types/node': 22.19.13 + '@types/node': 22.19.15 '@types/pacote@11.1.8': dependencies: - '@types/node': 22.19.13 + '@types/node': 22.19.15 '@types/npm-registry-fetch': 8.0.9 '@types/npmlog': 7.0.0 '@types/ssri': 7.1.5 @@ -11301,14 +11297,14 @@ snapshots: '@types/progress@2.0.7': dependencies: - '@types/node': 22.19.13 + '@types/node': 22.19.15 '@types/pumpify@1.4.5': dependencies: '@types/duplexify': 3.6.5 - '@types/node': 22.19.13 + '@types/node': 22.19.15 - '@types/qs@6.14.0': {} + '@types/qs@6.15.0': {} '@types/range-parser@1.2.7': {} @@ -11316,7 +11312,7 @@ snapshots: '@types/responselike@1.0.0': dependencies: - '@types/node': 22.19.13 + '@types/node': 22.19.15 '@types/retry@0.12.0': {} @@ -11327,11 +11323,11 @@ snapshots: '@types/send@0.17.6': dependencies: '@types/mime': 1.3.5 - '@types/node': 22.19.13 + '@types/node': 22.19.15 '@types/send@1.2.1': dependencies: - '@types/node': 22.19.13 + '@types/node': 22.19.15 '@types/serve-index@1.9.4': dependencies: @@ -11340,38 +11336,38 @@ snapshots: '@types/serve-static@1.15.10': dependencies: '@types/http-errors': 2.0.5 - '@types/node': 22.19.13 + '@types/node': 22.19.15 '@types/send': 0.17.6 '@types/serve-static@2.2.0': dependencies: '@types/http-errors': 2.0.5 - '@types/node': 22.19.13 + '@types/node': 22.19.15 '@types/sockjs@0.3.36': dependencies: - '@types/node': 22.19.13 + '@types/node': 22.19.15 '@types/ssri@7.1.5': dependencies: - '@types/node': 22.19.13 + '@types/node': 22.19.15 '@types/stack-trace@0.0.33': {} '@types/tar-stream@3.1.4': dependencies: - '@types/node': 22.19.13 + '@types/node': 22.19.15 '@types/watchpack@2.4.5': dependencies: '@types/graceful-fs': 4.1.9 - '@types/node': 22.19.13 + '@types/node': 22.19.15 '@types/which@3.0.4': {} '@types/ws@8.18.1': dependencies: - '@types/node': 22.19.13 + '@types/node': 22.19.15 '@types/yargs-parser@21.0.3': {} @@ -11383,7 +11379,7 @@ snapshots: '@types/yauzl@2.10.3': dependencies: - '@types/node': 22.19.13 + '@types/node': 22.19.15 optional: true '@typescript-eslint/eslint-plugin@8.56.1(@typescript-eslint/parser@8.56.1(eslint@10.0.2(jiti@2.6.1))(typescript@6.0.1-rc))(eslint@10.0.2(jiti@2.6.1))(typescript@6.0.1-rc)': @@ -11996,7 +11992,7 @@ snapshots: autoprefixer@10.4.27(postcss@8.5.8): dependencies: browserslist: 4.28.1 - caniuse-lite: 1.0.30001775 + caniuse-lite: 1.0.30001777 fraction.js: 5.3.4 picocolors: 1.1.1 postcss: 8.5.8 @@ -12018,11 +12014,11 @@ snapshots: find-up: 5.0.0 webpack: 5.105.4(esbuild@0.27.3) - babel-plugin-polyfill-corejs2@0.4.15(@babel/core@7.29.0): + babel-plugin-polyfill-corejs2@0.4.16(@babel/core@7.29.0): dependencies: '@babel/compat-data': 7.29.0 '@babel/core': 7.29.0 - '@babel/helper-define-polyfill-provider': 0.6.6(@babel/core@7.29.0) + '@babel/helper-define-polyfill-provider': 0.6.7(@babel/core@7.29.0) semver: 6.3.1 transitivePeerDependencies: - supports-color @@ -12030,23 +12026,23 @@ snapshots: babel-plugin-polyfill-corejs3@0.13.0(@babel/core@7.29.0): dependencies: '@babel/core': 7.29.0 - '@babel/helper-define-polyfill-provider': 0.6.6(@babel/core@7.29.0) + '@babel/helper-define-polyfill-provider': 0.6.7(@babel/core@7.29.0) core-js-compat: 3.48.0 transitivePeerDependencies: - supports-color - babel-plugin-polyfill-corejs3@0.14.0(@babel/core@7.29.0): + babel-plugin-polyfill-corejs3@0.14.1(@babel/core@7.29.0): dependencies: '@babel/core': 7.29.0 - '@babel/helper-define-polyfill-provider': 0.6.6(@babel/core@7.29.0) + '@babel/helper-define-polyfill-provider': 0.6.7(@babel/core@7.29.0) core-js-compat: 3.48.0 transitivePeerDependencies: - supports-color - babel-plugin-polyfill-regenerator@0.6.6(@babel/core@7.29.0): + babel-plugin-polyfill-regenerator@0.6.7(@babel/core@7.29.0): dependencies: '@babel/core': 7.29.0 - '@babel/helper-define-polyfill-provider': 0.6.6(@babel/core@7.29.0) + '@babel/helper-define-polyfill-provider': 0.6.7(@babel/core@7.29.0) transitivePeerDependencies: - supports-color @@ -12067,11 +12063,11 @@ snapshots: - bare-abort-controller - react-native-b4a - bare-os@3.7.0: {} + bare-os@3.7.1: {} bare-path@3.0.0: dependencies: - bare-os: 3.7.0 + bare-os: 3.7.1 bare-stream@2.8.0(bare-events@2.8.2): dependencies: @@ -12197,7 +12193,7 @@ snapshots: async-each-series: 0.1.1 chalk: 4.1.2 connect-history-api-fallback: 1.6.0 - immutable: 3.8.2 + immutable: 3.8.3 server-destroy: 1.0.1 socket.io-client: 4.8.3(bufferutil@4.1.0)(utf-8-validate@6.0.6) stream-throttle: 0.1.3 @@ -12222,7 +12218,7 @@ snapshots: fresh: 0.5.2 fs-extra: 3.0.1 http-proxy: 1.18.1(debug@4.4.3) - immutable: 3.8.2 + immutable: 3.8.3 micromatch: 4.0.8 opn: 5.3.0 portscanner: 2.2.0 @@ -12249,9 +12245,9 @@ snapshots: browserslist@4.28.1: dependencies: baseline-browser-mapping: 2.10.0 - caniuse-lite: 1.0.30001775 - electron-to-chromium: 1.5.302 - node-releases: 2.0.27 + caniuse-lite: 1.0.30001777 + electron-to-chromium: 1.5.307 + node-releases: 2.0.36 update-browserslist-db: 1.2.3(browserslist@4.28.1) bs-recipes@1.3.4: {} @@ -12324,7 +12320,7 @@ snapshots: callsites@3.1.0: {} - caniuse-lite@1.0.30001775: {} + caniuse-lite@1.0.30001777: {} caseless@0.12.0: {} @@ -12526,7 +12522,7 @@ snapshots: glob-parent: 6.0.2 normalize-path: 3.0.0 schema-utils: 4.3.3 - serialize-javascript: 7.0.3 + serialize-javascript: 7.0.4 tinyglobby: 0.2.15 webpack: 5.105.4(esbuild@0.27.3) @@ -12543,7 +12539,7 @@ snapshots: object-assign: 4.1.1 vary: 1.1.2 - cosmiconfig@9.0.0(typescript@6.0.1-rc): + cosmiconfig@9.0.1(typescript@6.0.1-rc): dependencies: env-paths: 2.2.1 import-fresh: 3.3.1 @@ -12585,20 +12581,20 @@ snapshots: domutils: 3.2.2 nth-check: 2.1.1 - css-tree@3.1.0: + css-tree@3.2.1: dependencies: - mdn-data: 2.12.2 + mdn-data: 2.27.1 source-map-js: 1.2.1 css-what@7.0.0: {} cssesc@3.0.0: {} - cssstyle@6.1.0: + cssstyle@6.2.0: dependencies: '@asamuzakjp/css-color': 5.0.1 - '@csstools/css-syntax-patches-for-csstree': 1.0.28 - css-tree: 3.1.0 + '@csstools/css-syntax-patches-for-csstree': 1.1.0 + css-tree: 3.2.1 lru-cache: 11.2.6 custom-event@1.0.1: {} @@ -12808,7 +12804,7 @@ snapshots: dependencies: jake: 10.9.4 - electron-to-chromium@1.5.302: {} + electron-to-chromium@1.5.307: {} emoji-regex@10.6.0: {} @@ -12847,7 +12843,7 @@ snapshots: engine.io@6.6.5(bufferutil@4.1.0)(utf-8-validate@6.0.6): dependencies: '@types/cors': 2.8.19 - '@types/node': 22.19.13 + '@types/node': 22.19.15 accepts: 1.3.8 base64id: 2.0.0 cookie: 0.7.2 @@ -13082,7 +13078,7 @@ snapshots: esrecurse: 4.3.0 estraverse: 4.3.0 - eslint-scope@9.1.1: + eslint-scope@9.1.2: dependencies: '@types/esrecurse': 4.3.1 '@types/estree': 1.0.8 @@ -13099,10 +13095,10 @@ snapshots: dependencies: '@eslint-community/eslint-utils': 4.9.1(eslint@10.0.2(jiti@2.6.1)) '@eslint-community/regexpp': 4.12.2 - '@eslint/config-array': 0.23.2 - '@eslint/config-helpers': 0.5.2 - '@eslint/core': 1.1.0 - '@eslint/plugin-kit': 0.6.0 + '@eslint/config-array': 0.23.3 + '@eslint/config-helpers': 0.5.3 + '@eslint/core': 1.1.1 + '@eslint/plugin-kit': 0.6.1 '@humanfs/node': 0.16.7 '@humanwhocodes/module-importer': 1.0.1 '@humanwhocodes/retry': 0.4.3 @@ -13111,9 +13107,9 @@ snapshots: cross-spawn: 7.0.6 debug: 4.4.3(supports-color@10.2.2) escape-string-regexp: 4.0.0 - eslint-scope: 9.1.1 + eslint-scope: 9.1.2 eslint-visitor-keys: 5.0.1 - espree: 11.1.1 + espree: 11.2.0 esquery: 1.7.0 esutils: 2.0.3 fast-deep-equal: 3.1.3 @@ -13138,7 +13134,7 @@ snapshots: acorn-jsx: 5.3.2(acorn@8.16.0) eslint-visitor-keys: 4.2.1 - espree@11.1.1: + espree@11.2.0: dependencies: acorn: 8.16.0 acorn-jsx: 5.3.2(acorn@8.16.0) @@ -13196,10 +13192,10 @@ snapshots: express-rate-limit@5.5.1: {} - express-rate-limit@8.2.1(express@5.2.1): + express-rate-limit@8.3.0(express@5.2.1): dependencies: express: 5.2.1 - ip-address: 10.0.1 + ip-address: 10.1.0 express@4.22.1: dependencies: @@ -13441,12 +13437,12 @@ snapshots: flat-cache@4.0.1: dependencies: - flatted: 3.3.3 + flatted: 3.4.0 keyv: 4.5.4 flat@5.0.2: {} - flatted@3.3.3: {} + flatted@3.4.0: {} folder-hash@4.1.1(supports-color@10.2.2): dependencies: @@ -13694,12 +13690,12 @@ snapshots: graceful-fs@4.2.11: {} - graphql-tag@2.12.6(graphql@16.13.0): + graphql-tag@2.12.6(graphql@16.13.1): dependencies: - graphql: 16.13.0 + graphql: 16.13.1 tslib: 2.8.1 - graphql@16.13.0: {} + graphql@16.13.1: {} grpc-gcp@1.0.1(protobufjs@7.5.4): dependencies: @@ -13748,7 +13744,7 @@ snapshots: dependencies: function-bind: 1.1.2 - hono@4.12.3: {} + hono@4.12.5: {} hosted-git-info@9.0.2: dependencies: @@ -13763,7 +13759,7 @@ snapshots: html-encoding-sniffer@6.0.0: dependencies: - '@exodus/bytes': 1.14.1 + '@exodus/bytes': 1.15.0 transitivePeerDependencies: - '@noble/hashes' @@ -13916,9 +13912,9 @@ snapshots: image-size@0.5.5: optional: true - immutable@3.8.2: {} + immutable@3.8.3: {} - immutable@5.1.4: {} + immutable@5.1.5: {} import-fresh@3.3.1: dependencies: @@ -13946,8 +13942,6 @@ snapshots: hasown: 2.0.2 side-channel: 1.1.0 - ip-address@10.0.1: {} - ip-address@10.1.0: {} ipaddr.js@1.9.1: {} @@ -14222,13 +14216,13 @@ snapshots: jest-worker@27.5.1: dependencies: - '@types/node': 22.19.13 + '@types/node': 22.19.15 merge-stream: 2.0.0 supports-color: 8.1.1 jiti@2.6.1: {} - jose@6.1.3: {} + jose@6.2.0: {} js-base64@3.7.8: {} @@ -14247,8 +14241,8 @@ snapshots: '@acemir/cssom': 0.9.31 '@asamuzakjp/dom-selector': 6.8.1 '@bramus/specificity': 2.4.2 - '@exodus/bytes': 1.14.1 - cssstyle: 6.1.0 + '@exodus/bytes': 1.15.0 + cssstyle: 6.2.0 data-urls: 7.0.0 decimal.js: 10.6.0 html-encoding-sniffer: 6.0.0 @@ -14539,7 +14533,7 @@ snapshots: dependencies: date-format: 4.0.14 debug: 4.4.3(supports-color@10.2.2) - flatted: 3.3.3 + flatted: 3.4.0 rfdc: 1.4.1 streamroller: 3.1.5 transitivePeerDependencies: @@ -14605,22 +14599,22 @@ snapshots: math-intrinsics@1.1.0: {} - mdn-data@2.12.2: {} + mdn-data@2.27.1: {} media-typer@0.3.0: {} media-typer@1.1.0: {} - memfs@4.56.10(tslib@2.8.1): + memfs@4.56.11(tslib@2.8.1): dependencies: - '@jsonjoy.com/fs-core': 4.56.10(tslib@2.8.1) - '@jsonjoy.com/fs-fsa': 4.56.10(tslib@2.8.1) - '@jsonjoy.com/fs-node': 4.56.10(tslib@2.8.1) - '@jsonjoy.com/fs-node-builtins': 4.56.10(tslib@2.8.1) - '@jsonjoy.com/fs-node-to-fsa': 4.56.10(tslib@2.8.1) - '@jsonjoy.com/fs-node-utils': 4.56.10(tslib@2.8.1) - '@jsonjoy.com/fs-print': 4.56.10(tslib@2.8.1) - '@jsonjoy.com/fs-snapshot': 4.56.10(tslib@2.8.1) + '@jsonjoy.com/fs-core': 4.56.11(tslib@2.8.1) + '@jsonjoy.com/fs-fsa': 4.56.11(tslib@2.8.1) + '@jsonjoy.com/fs-node': 4.56.11(tslib@2.8.1) + '@jsonjoy.com/fs-node-builtins': 4.56.11(tslib@2.8.1) + '@jsonjoy.com/fs-node-to-fsa': 4.56.11(tslib@2.8.1) + '@jsonjoy.com/fs-node-utils': 4.56.11(tslib@2.8.1) + '@jsonjoy.com/fs-print': 4.56.11(tslib@2.8.1) + '@jsonjoy.com/fs-snapshot': 4.56.11(tslib@2.8.1) '@jsonjoy.com/json-pack': 1.21.0(tslib@2.8.1) '@jsonjoy.com/util': 1.9.0(tslib@2.8.1) glob-to-regex.js: 1.2.0(tslib@2.8.1) @@ -14880,13 +14874,13 @@ snapshots: nopt: 9.0.0 proc-log: 6.1.0 semver: 7.7.4 - tar: 7.5.9 + tar: 7.5.10 tinyglobby: 0.2.15 which: 6.0.1 transitivePeerDependencies: - supports-color - node-releases@2.0.27: {} + node-releases@2.0.36: {} nopt@9.0.0: dependencies: @@ -15126,7 +15120,7 @@ snapshots: proc-log: 6.1.0 sigstore: 4.1.0 ssri: 13.0.1 - tar: 7.5.9 + tar: 7.5.10 transitivePeerDependencies: - supports-color @@ -15265,7 +15259,7 @@ snapshots: postcss-loader@8.2.1(postcss@8.5.8)(typescript@6.0.1-rc)(webpack@5.105.4(esbuild@0.27.3)): dependencies: - cosmiconfig: 9.0.0(typescript@6.0.1-rc) + cosmiconfig: 9.0.1(typescript@6.0.1-rc) jiti: 2.6.1 postcss: 8.5.8 semver: 7.7.4 @@ -15355,7 +15349,7 @@ snapshots: '@protobufjs/path': 1.1.2 '@protobufjs/pool': 1.1.0 '@protobufjs/utf8': 1.1.0 - '@types/node': 22.19.13 + '@types/node': 22.19.15 long: 5.3.2 proxy-addr@2.0.7: @@ -15422,7 +15416,7 @@ snapshots: dependencies: '@puppeteer/browsers': 2.13.0 chromium-bidi: 14.0.0(devtools-protocol@0.0.1581282) - cosmiconfig: 9.0.0(typescript@6.0.1-rc) + cosmiconfig: 9.0.1(typescript@6.0.1-rc) devtools-protocol: 0.0.1581282 puppeteer-core: 24.38.0(bufferutil@4.1.0)(utf-8-validate@6.0.6) typed-query-selector: 2.12.1 @@ -15680,12 +15674,12 @@ snapshots: optionalDependencies: '@babel/code-frame': 7.29.0 - rollup-plugin-sourcemaps2@0.5.6(@types/node@22.19.13)(rollup@4.59.0): + rollup-plugin-sourcemaps2@0.5.6(@types/node@22.19.15)(rollup@4.59.0): dependencies: '@rollup/pluginutils': 5.3.0(rollup@4.59.0) rollup: 4.59.0 optionalDependencies: - '@types/node': 22.19.13 + '@types/node': 22.19.15 rollup@4.59.0: dependencies: @@ -15777,7 +15771,7 @@ snapshots: sass@1.97.3: dependencies: chokidar: 4.0.3 - immutable: 5.1.4 + immutable: 5.1.5 source-map-js: 1.2.1 optionalDependencies: '@parcel/watcher': 2.5.6 @@ -15848,7 +15842,7 @@ snapshots: transitivePeerDependencies: - supports-color - serialize-javascript@7.0.3: {} + serialize-javascript@7.0.4: {} serve-index@1.9.2: dependencies: @@ -16269,7 +16263,7 @@ snapshots: tapable@2.3.0: {} - tar-fs@3.1.1: + tar-fs@3.1.2: dependencies: pump: 3.0.4 tar-stream: 3.1.8 @@ -16301,7 +16295,7 @@ snapshots: - bare-buffer - react-native-b4a - tar@7.5.9: + tar@7.5.10: dependencies: '@isaacs/fs-minipass': 4.0.1 chownr: 3.0.0 @@ -16384,15 +16378,15 @@ snapshots: tldts-core@6.1.86: {} - tldts-core@7.0.23: {} + tldts-core@7.0.25: {} tldts@6.1.86: dependencies: tldts-core: 6.1.86 - tldts@7.0.23: + tldts@7.0.25: dependencies: - tldts-core: 7.0.23 + tldts-core: 7.0.25 tmp@0.2.5: {} @@ -16410,7 +16404,7 @@ snapshots: tough-cookie@6.0.0: dependencies: - tldts: 7.0.23 + tldts: 7.0.25 tr46@0.0.3: {} @@ -16781,7 +16775,7 @@ snapshots: webpack-dev-middleware@7.4.5(tslib@2.8.1)(webpack@5.105.4(esbuild@0.27.3)): dependencies: colorette: 2.0.20 - memfs: 4.56.10(tslib@2.8.1) + memfs: 4.56.11(tslib@2.8.1) mime-types: 3.0.2 on-finished: 2.4.1 range-parser: 1.2.1 @@ -16887,7 +16881,7 @@ snapshots: whatwg-url@16.0.1: dependencies: - '@exodus/bytes': 1.14.1 + '@exodus/bytes': 1.15.0 tr46: 6.0.0 webidl-conversions: 8.0.1 transitivePeerDependencies: From 081153b01f5bfb50a852f9e2661e14788650eb22 Mon Sep 17 00:00:00 2001 From: Angular Robot <angular-robot@google.com> Date: Mon, 9 Mar 2026 15:23:27 +0000 Subject: [PATCH 122/226] build: update pnpm to v10.31.0 See associated pull request for more information. --- MODULE.bazel | 4 ++-- package.json | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/MODULE.bazel b/MODULE.bazel index 7b347cbe5f09..e3a2e0a634f8 100644 --- a/MODULE.bazel +++ b/MODULE.bazel @@ -117,8 +117,8 @@ use_repo( pnpm = use_extension("@aspect_rules_js//npm:extensions.bzl", "pnpm") pnpm.pnpm( name = "pnpm", - pnpm_version = "10.30.3", - pnpm_version_integrity = "sha512-yWHR4KLY41TsqlFmuCJRZmi39Ey1vZUSLVkN2Bki9gb1RzttI+xKW+Bef80Y6EiNR9l4u+mBhy8RRdBumnQAFw==", + pnpm_version = "10.31.0", + pnpm_version_integrity = "sha512-45JziL+qgHjOt5t0j/wegnToTXUWPme8IuBsDTrtQ90VMVHL8R1/gwH/SsuYxovcXK32mJUygB/6/js+SmPCaA==", ) use_repo(pnpm, "pnpm") diff --git a/package.json b/package.json index 4476da33e1de..79596b07bdb6 100644 --- a/package.json +++ b/package.json @@ -28,12 +28,12 @@ "type": "git", "url": "git+https://github.com/angular/angular-cli.git" }, - "packageManager": "pnpm@10.30.3", + "packageManager": "pnpm@10.31.0", "engines": { "node": "^22.22.0 || >=24.13.1", "npm": "Please use pnpm instead of NPM to install dependencies", "yarn": "Please use pnpm instead of Yarn to install dependencies", - "pnpm": "10.30.3" + "pnpm": "10.31.0" }, "author": "Angular Authors", "license": "MIT", From 76448a345bcb089802411d30bbeef7fa096fb8f3 Mon Sep 17 00:00:00 2001 From: Angular Robot <angular-robot@google.com> Date: Tue, 10 Mar 2026 00:17:45 +0000 Subject: [PATCH 123/226] build: update cross-repo angular dependencies See associated pull request for more information. --- .../assistant-to-the-branch-manager.yml | 2 +- .github/workflows/ci.yml | 52 +-- .github/workflows/dev-infra.yml | 6 +- .github/workflows/perf.yml | 6 +- .github/workflows/pr.yml | 44 +-- MODULE.bazel | 8 +- MODULE.bazel.lock | 28 +- package.json | 24 +- packages/angular/ssr/package.json | 12 +- packages/ngtools/webpack/package.json | 4 +- pnpm-lock.yaml | 325 +++++++++--------- tests/e2e/ng-snapshot/package.json | 32 +- 12 files changed, 259 insertions(+), 284 deletions(-) diff --git a/.github/workflows/assistant-to-the-branch-manager.yml b/.github/workflows/assistant-to-the-branch-manager.yml index 9cb2265aae7e..b798c4604936 100644 --- a/.github/workflows/assistant-to-the-branch-manager.yml +++ b/.github/workflows/assistant-to-the-branch-manager.yml @@ -17,6 +17,6 @@ jobs: - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 with: persist-credentials: false - - uses: angular/dev-infra/github-actions/branch-manager@e4dcda13e469f50a6bd92667e2ded8b98173bf2c + - uses: angular/dev-infra/github-actions/branch-manager@08542a03ec636e2b37541e3e4104ec1cdf2c32d6 with: angular-robot-key: ${{ secrets.ANGULAR_ROBOT_PRIVATE_KEY }} diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 177d944ba9db..75aceb2663e0 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -21,9 +21,9 @@ jobs: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@e4dcda13e469f50a6bd92667e2ded8b98173bf2c + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@08542a03ec636e2b37541e3e4104ec1cdf2c32d6 - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@e4dcda13e469f50a6bd92667e2ded8b98173bf2c + uses: angular/dev-infra/github-actions/bazel/setup@08542a03ec636e2b37541e3e4104ec1cdf2c32d6 - name: Install node modules run: pnpm install --frozen-lockfile - name: Generate JSON schema types @@ -44,11 +44,11 @@ jobs: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@e4dcda13e469f50a6bd92667e2ded8b98173bf2c + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@08542a03ec636e2b37541e3e4104ec1cdf2c32d6 - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@e4dcda13e469f50a6bd92667e2ded8b98173bf2c + uses: angular/dev-infra/github-actions/bazel/setup@08542a03ec636e2b37541e3e4104ec1cdf2c32d6 - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@e4dcda13e469f50a6bd92667e2ded8b98173bf2c + uses: angular/dev-infra/github-actions/bazel/configure-remote@08542a03ec636e2b37541e3e4104ec1cdf2c32d6 with: google_credential: ${{ secrets.RBE_TRUSTED_BUILDS_USER }} - name: Install node modules @@ -61,11 +61,11 @@ jobs: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@e4dcda13e469f50a6bd92667e2ded8b98173bf2c + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@08542a03ec636e2b37541e3e4104ec1cdf2c32d6 - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@e4dcda13e469f50a6bd92667e2ded8b98173bf2c + uses: angular/dev-infra/github-actions/bazel/setup@08542a03ec636e2b37541e3e4104ec1cdf2c32d6 - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@e4dcda13e469f50a6bd92667e2ded8b98173bf2c + uses: angular/dev-infra/github-actions/bazel/configure-remote@08542a03ec636e2b37541e3e4104ec1cdf2c32d6 with: google_credential: ${{ secrets.RBE_TRUSTED_BUILDS_USER }} - name: Install node modules @@ -84,13 +84,13 @@ jobs: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@e4dcda13e469f50a6bd92667e2ded8b98173bf2c + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@08542a03ec636e2b37541e3e4104ec1cdf2c32d6 - name: Install node modules run: pnpm install --frozen-lockfile - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@e4dcda13e469f50a6bd92667e2ded8b98173bf2c + uses: angular/dev-infra/github-actions/bazel/setup@08542a03ec636e2b37541e3e4104ec1cdf2c32d6 - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@e4dcda13e469f50a6bd92667e2ded8b98173bf2c + uses: angular/dev-infra/github-actions/bazel/configure-remote@08542a03ec636e2b37541e3e4104ec1cdf2c32d6 with: google_credential: ${{ secrets.RBE_TRUSTED_BUILDS_USER }} - name: Run CLI E2E tests @@ -100,11 +100,11 @@ jobs: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@e4dcda13e469f50a6bd92667e2ded8b98173bf2c + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@08542a03ec636e2b37541e3e4104ec1cdf2c32d6 - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@e4dcda13e469f50a6bd92667e2ded8b98173bf2c + uses: angular/dev-infra/github-actions/bazel/setup@08542a03ec636e2b37541e3e4104ec1cdf2c32d6 - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@e4dcda13e469f50a6bd92667e2ded8b98173bf2c + uses: angular/dev-infra/github-actions/bazel/configure-remote@08542a03ec636e2b37541e3e4104ec1cdf2c32d6 with: google_credential: ${{ secrets.RBE_TRUSTED_BUILDS_USER }} - name: Install node modules @@ -137,7 +137,7 @@ jobs: runs-on: windows-2025 steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@e4dcda13e469f50a6bd92667e2ded8b98173bf2c + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@08542a03ec636e2b37541e3e4104ec1cdf2c32d6 - name: Install node modules run: pnpm install --frozen-lockfile - name: Download built Windows E2E tests @@ -164,13 +164,13 @@ jobs: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@e4dcda13e469f50a6bd92667e2ded8b98173bf2c + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@08542a03ec636e2b37541e3e4104ec1cdf2c32d6 - name: Install node modules run: pnpm install --frozen-lockfile - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@e4dcda13e469f50a6bd92667e2ded8b98173bf2c + uses: angular/dev-infra/github-actions/bazel/setup@08542a03ec636e2b37541e3e4104ec1cdf2c32d6 - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@e4dcda13e469f50a6bd92667e2ded8b98173bf2c + uses: angular/dev-infra/github-actions/bazel/configure-remote@08542a03ec636e2b37541e3e4104ec1cdf2c32d6 with: google_credential: ${{ secrets.RBE_TRUSTED_BUILDS_USER }} - name: Run CLI E2E tests @@ -188,13 +188,13 @@ jobs: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@e4dcda13e469f50a6bd92667e2ded8b98173bf2c + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@08542a03ec636e2b37541e3e4104ec1cdf2c32d6 - name: Install node modules run: pnpm install --frozen-lockfile - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@e4dcda13e469f50a6bd92667e2ded8b98173bf2c + uses: angular/dev-infra/github-actions/bazel/setup@08542a03ec636e2b37541e3e4104ec1cdf2c32d6 - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@e4dcda13e469f50a6bd92667e2ded8b98173bf2c + uses: angular/dev-infra/github-actions/bazel/configure-remote@08542a03ec636e2b37541e3e4104ec1cdf2c32d6 with: google_credential: ${{ secrets.RBE_TRUSTED_BUILDS_USER }} - name: Run CLI E2E tests @@ -208,13 +208,13 @@ jobs: SAUCE_TUNNEL_IDENTIFIER: angular-cli-${{ github.workflow }}-${{ github.run_number }} steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@e4dcda13e469f50a6bd92667e2ded8b98173bf2c + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@08542a03ec636e2b37541e3e4104ec1cdf2c32d6 - name: Install node modules run: pnpm install --frozen-lockfile - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@e4dcda13e469f50a6bd92667e2ded8b98173bf2c + uses: angular/dev-infra/github-actions/bazel/setup@08542a03ec636e2b37541e3e4104ec1cdf2c32d6 - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@e4dcda13e469f50a6bd92667e2ded8b98173bf2c + uses: angular/dev-infra/github-actions/bazel/configure-remote@08542a03ec636e2b37541e3e4104ec1cdf2c32d6 with: google_credential: ${{ secrets.RBE_TRUSTED_BUILDS_USER }} - name: Run E2E Browser tests @@ -244,11 +244,11 @@ jobs: CIRCLE_BRANCH: ${{ github.ref_name }} steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@e4dcda13e469f50a6bd92667e2ded8b98173bf2c + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@08542a03ec636e2b37541e3e4104ec1cdf2c32d6 - name: Install node modules run: pnpm install --frozen-lockfile - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@e4dcda13e469f50a6bd92667e2ded8b98173bf2c + uses: angular/dev-infra/github-actions/bazel/setup@08542a03ec636e2b37541e3e4104ec1cdf2c32d6 - run: pnpm admin snapshots --verbose env: SNAPSHOT_BUILDS_GITHUB_TOKEN: ${{ secrets.SNAPSHOT_BUILDS_GITHUB_TOKEN }} diff --git a/.github/workflows/dev-infra.yml b/.github/workflows/dev-infra.yml index c61f1d1efed9..07c69ab94295 100644 --- a/.github/workflows/dev-infra.yml +++ b/.github/workflows/dev-infra.yml @@ -15,21 +15,21 @@ jobs: if: github.event_name == 'pull_request_target' runs-on: ubuntu-latest steps: - - uses: angular/dev-infra/github-actions/labeling/pull-request@e4dcda13e469f50a6bd92667e2ded8b98173bf2c + - uses: angular/dev-infra/github-actions/labeling/pull-request@08542a03ec636e2b37541e3e4104ec1cdf2c32d6 with: angular-robot-key: ${{ secrets.ANGULAR_ROBOT_PRIVATE_KEY }} post_approval_changes: if: github.event_name == 'pull_request_target' runs-on: ubuntu-latest steps: - - uses: angular/dev-infra/github-actions/post-approval-changes@e4dcda13e469f50a6bd92667e2ded8b98173bf2c + - uses: angular/dev-infra/github-actions/post-approval-changes@08542a03ec636e2b37541e3e4104ec1cdf2c32d6 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 + - uses: angular/dev-infra/github-actions/labeling/issue@08542a03ec636e2b37541e3e4104ec1cdf2c32d6 with: angular-robot-key: ${{ secrets.ANGULAR_ROBOT_PRIVATE_KEY }} google-generative-ai-key: ${{ secrets.GOOGLE_GENERATIVE_AI_KEY }} diff --git a/.github/workflows/perf.yml b/.github/workflows/perf.yml index b3f7a63abc87..8dfd2870fe4a 100644 --- a/.github/workflows/perf.yml +++ b/.github/workflows/perf.yml @@ -23,7 +23,7 @@ jobs: workflows: ${{ steps.workflows.outputs.workflows }} steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@e4dcda13e469f50a6bd92667e2ded8b98173bf2c + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@08542a03ec636e2b37541e3e4104ec1cdf2c32d6 - name: Install node modules run: pnpm install --frozen-lockfile - id: workflows @@ -38,9 +38,9 @@ jobs: workflow: ${{ fromJSON(needs.list.outputs.workflows) }} steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@e4dcda13e469f50a6bd92667e2ded8b98173bf2c + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@08542a03ec636e2b37541e3e4104ec1cdf2c32d6 - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@e4dcda13e469f50a6bd92667e2ded8b98173bf2c + uses: angular/dev-infra/github-actions/bazel/setup@08542a03ec636e2b37541e3e4104ec1cdf2c32d6 - name: Install node modules run: pnpm install --frozen-lockfile # We utilize the google-github-actions/auth action to allow us to get an active credential using workflow diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml index 2932b87511d4..86e6c451e931 100644 --- a/.github/workflows/pr.yml +++ b/.github/workflows/pr.yml @@ -34,9 +34,9 @@ jobs: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@e4dcda13e469f50a6bd92667e2ded8b98173bf2c + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@08542a03ec636e2b37541e3e4104ec1cdf2c32d6 - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@e4dcda13e469f50a6bd92667e2ded8b98173bf2c + uses: angular/dev-infra/github-actions/bazel/setup@08542a03ec636e2b37541e3e4104ec1cdf2c32d6 - name: Setup ESLint Caching uses: actions/cache@cdf6c1fa76f9f475f3d7449005a359c84ca0f306 # v5.0.3 with: @@ -66,17 +66,17 @@ jobs: # it has been merged. run: pnpm ng-dev format changed --check ${{ github.event.pull_request.base.sha }} - name: Check Package Licenses - uses: angular/dev-infra/github-actions/linting/licenses@e4dcda13e469f50a6bd92667e2ded8b98173bf2c + uses: angular/dev-infra/github-actions/linting/licenses@08542a03ec636e2b37541e3e4104ec1cdf2c32d6 build: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@e4dcda13e469f50a6bd92667e2ded8b98173bf2c + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@08542a03ec636e2b37541e3e4104ec1cdf2c32d6 - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@e4dcda13e469f50a6bd92667e2ded8b98173bf2c + uses: angular/dev-infra/github-actions/bazel/setup@08542a03ec636e2b37541e3e4104ec1cdf2c32d6 - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@e4dcda13e469f50a6bd92667e2ded8b98173bf2c + uses: angular/dev-infra/github-actions/bazel/configure-remote@08542a03ec636e2b37541e3e4104ec1cdf2c32d6 - name: Install node modules run: pnpm install --frozen-lockfile - name: Build release targets @@ -93,11 +93,11 @@ jobs: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@e4dcda13e469f50a6bd92667e2ded8b98173bf2c + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@08542a03ec636e2b37541e3e4104ec1cdf2c32d6 - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@e4dcda13e469f50a6bd92667e2ded8b98173bf2c + uses: angular/dev-infra/github-actions/bazel/setup@08542a03ec636e2b37541e3e4104ec1cdf2c32d6 - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@e4dcda13e469f50a6bd92667e2ded8b98173bf2c + uses: angular/dev-infra/github-actions/bazel/configure-remote@08542a03ec636e2b37541e3e4104ec1cdf2c32d6 - name: Install node modules run: pnpm install --frozen-lockfile - name: Run module and package tests @@ -114,13 +114,13 @@ jobs: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@e4dcda13e469f50a6bd92667e2ded8b98173bf2c + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@08542a03ec636e2b37541e3e4104ec1cdf2c32d6 - name: Install node modules run: pnpm install --frozen-lockfile - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@e4dcda13e469f50a6bd92667e2ded8b98173bf2c + uses: angular/dev-infra/github-actions/bazel/setup@08542a03ec636e2b37541e3e4104ec1cdf2c32d6 - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@e4dcda13e469f50a6bd92667e2ded8b98173bf2c + uses: angular/dev-infra/github-actions/bazel/configure-remote@08542a03ec636e2b37541e3e4104ec1cdf2c32d6 - name: Run CLI E2E tests run: pnpm bazel test --test_env=E2E_SHARD_TOTAL=6 --test_env=E2E_SHARD_INDEX=${{ matrix.shard }} --config=e2e //tests:e2e.${{ matrix.subset }}_node${{ matrix.node }} @@ -128,11 +128,11 @@ jobs: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@e4dcda13e469f50a6bd92667e2ded8b98173bf2c + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@08542a03ec636e2b37541e3e4104ec1cdf2c32d6 - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@e4dcda13e469f50a6bd92667e2ded8b98173bf2c + uses: angular/dev-infra/github-actions/bazel/setup@08542a03ec636e2b37541e3e4104ec1cdf2c32d6 - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@e4dcda13e469f50a6bd92667e2ded8b98173bf2c + uses: angular/dev-infra/github-actions/bazel/configure-remote@08542a03ec636e2b37541e3e4104ec1cdf2c32d6 - name: Install node modules run: pnpm install --frozen-lockfile - name: Build E2E tests for Windows on Linux @@ -156,7 +156,7 @@ jobs: runs-on: windows-2025 steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@e4dcda13e469f50a6bd92667e2ded8b98173bf2c + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@08542a03ec636e2b37541e3e4104ec1cdf2c32d6 - name: Install node modules run: pnpm install --frozen-lockfile - name: Download built Windows E2E tests @@ -183,13 +183,13 @@ jobs: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@e4dcda13e469f50a6bd92667e2ded8b98173bf2c + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@08542a03ec636e2b37541e3e4104ec1cdf2c32d6 - name: Install node modules run: pnpm install --frozen-lockfile - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@e4dcda13e469f50a6bd92667e2ded8b98173bf2c + uses: angular/dev-infra/github-actions/bazel/setup@08542a03ec636e2b37541e3e4104ec1cdf2c32d6 - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@e4dcda13e469f50a6bd92667e2ded8b98173bf2c + uses: angular/dev-infra/github-actions/bazel/configure-remote@08542a03ec636e2b37541e3e4104ec1cdf2c32d6 - name: Run CLI E2E tests run: pnpm bazel test --test_env=E2E_SHARD_TOTAL=3 --test_env=E2E_SHARD_INDEX=${{ matrix.shard }} --config=e2e //tests:e2e.${{ matrix.subset }}_node${{ matrix.node }} @@ -205,12 +205,12 @@ jobs: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@e4dcda13e469f50a6bd92667e2ded8b98173bf2c + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@08542a03ec636e2b37541e3e4104ec1cdf2c32d6 - name: Install node modules run: pnpm install --frozen-lockfile - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@e4dcda13e469f50a6bd92667e2ded8b98173bf2c + uses: angular/dev-infra/github-actions/bazel/setup@08542a03ec636e2b37541e3e4104ec1cdf2c32d6 - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@e4dcda13e469f50a6bd92667e2ded8b98173bf2c + uses: angular/dev-infra/github-actions/bazel/configure-remote@08542a03ec636e2b37541e3e4104ec1cdf2c32d6 - name: Run CLI E2E tests run: pnpm bazel test --test_env=E2E_SHARD_TOTAL=6 --test_env=E2E_SHARD_INDEX=${{ matrix.shard }} --config=e2e //tests:e2e.snapshots.${{ matrix.subset }}_node${{ matrix.node }} diff --git a/MODULE.bazel b/MODULE.bazel index e3a2e0a634f8..e4ad3ddfeccd 100644 --- a/MODULE.bazel +++ b/MODULE.bazel @@ -19,28 +19,28 @@ bazel_dep(name = "aspect_rules_jasmine", version = "2.0.4") bazel_dep(name = "rules_angular") git_override( module_name = "rules_angular", - commit = "d746c4f75e42cffe389d1ab077f4639be2bc78d1", + commit = "b930bab8deb308e14d8862d359ef064204daee2a", remote = "https://github.com/angular/rules_angular.git", ) bazel_dep(name = "devinfra") git_override( module_name = "devinfra", - commit = "491fa7fc1803683748875b2b89d85700aca2b1f4", + commit = "08542a03ec636e2b37541e3e4104ec1cdf2c32d6", remote = "https://github.com/angular/dev-infra.git", ) bazel_dep(name = "rules_sass") git_override( module_name = "rules_sass", - commit = "1184a80751a21af8348f308abc5b38a41f26850e", + commit = "ac89385361e502fb88fdbffe9979648045d8919c", remote = "https://github.com/angular/rules_sass.git", ) bazel_dep(name = "rules_browsers") git_override( module_name = "rules_browsers", - commit = "8231142fc5516323b040883bf774ba8362645387", + commit = "7043f918640169063a6281ab4afb61389a0aad6d", remote = "https://github.com/angular/rules_browsers.git", ) diff --git a/MODULE.bazel.lock b/MODULE.bazel.lock index 63e767233515..dfac969148da 100644 --- a/MODULE.bazel.lock +++ b/MODULE.bazel.lock @@ -24,13 +24,12 @@ "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", "https://bcr.bazel.build/modules/aspect_rules_js/3.0.2/MODULE.bazel": "c5d22d2db2a2f0cf41ec2028ded2e2543d7ff1ea9f6faf5d6b2791546ee1d6a9", "https://bcr.bazel.build/modules/aspect_rules_js/3.0.2/source.json": "8a8642e6869ead1b37c5442b60b59912bb35ae265d94e4115d3e1a2598fdd849", "https://bcr.bazel.build/modules/aspect_rules_ts/3.6.3/MODULE.bazel": "d09db394970f076176ce7bab5b5fa7f0d560fd4f30b8432ea5e2c2570505b130", - "https://bcr.bazel.build/modules/aspect_rules_ts/3.7.0/MODULE.bazel": "5aace216caf88638950ef061245d23c36f57c8359e56e97f02a36f70bb09c50f", "https://bcr.bazel.build/modules/aspect_rules_ts/3.8.5/MODULE.bazel": "bcf8f0b6b9375f0f74451e2f70671efae9bb366acef8fdc04675305eaf137f06", - "https://bcr.bazel.build/modules/aspect_rules_ts/3.8.5/source.json": "fa35e43f6359f654e4b70ce55efdf280d0b06c0b3ef9fc0b06ba52327a0e6311", + "https://bcr.bazel.build/modules/aspect_rules_ts/3.8.6/MODULE.bazel": "371bacab13c9c36323384b56c7cabfde1982b69674e78729e1ddd1edd54d984e", + "https://bcr.bazel.build/modules/aspect_rules_ts/3.8.6/source.json": "b87a583fa2aa5c546221e3c514c883b2344c9284f27347759a5ff700deceb012", "https://bcr.bazel.build/modules/aspect_tools_telemetry/0.2.3/MODULE.bazel": "20f53b145f40957a51077ae90b37b7ce83582a1daf9350349f0f86179e19dd0d", "https://bcr.bazel.build/modules/aspect_tools_telemetry/0.2.6/MODULE.bazel": "cafb8781ad591bc57cc765dca5fefab08cf9f65af363d162b79d49205c7f8af7", "https://bcr.bazel.build/modules/aspect_tools_telemetry/0.2.8/MODULE.bazel": "aa975a83e72bcaac62ee61ab12b788ea324a1d05c4aab28aadb202f647881679", @@ -52,7 +51,6 @@ "https://bcr.bazel.build/modules/bazel_features/1.41.0/source.json": "8fd525b31b0883c47e0593443cdd10219b94a7556b3195fc02d75c86c66cfe30", "https://bcr.bazel.build/modules/bazel_features/1.9.0/MODULE.bazel": "885151d58d90d8d9c811eb75e3288c11f850e1d6b481a8c9f766adee4712358b", "https://bcr.bazel.build/modules/bazel_features/1.9.1/MODULE.bazel": "8f679097876a9b609ad1f60249c49d68bfab783dd9be012faf9d82547b14815a", - "https://bcr.bazel.build/modules/bazel_lib/3.0.0-beta.1/MODULE.bazel": "407729e232f611c3270005b016b437005daa7b1505826798ea584169a476e878", "https://bcr.bazel.build/modules/bazel_lib/3.0.0-rc.0/MODULE.bazel": "d6e00979a98ac14ada5e31c8794708b41434d461e7e7ca39b59b765e6d233b18", "https://bcr.bazel.build/modules/bazel_lib/3.0.0/MODULE.bazel": "22b70b80ac89ad3f3772526cd9feee2fa412c2b01933fea7ed13238a448d370d", "https://bcr.bazel.build/modules/bazel_lib/3.2.2/MODULE.bazel": "e2c890c8a515d6bca9c66d47718aa9e44b458fde64ec7204b8030bf2d349058c", @@ -165,7 +163,6 @@ "https://bcr.bazel.build/modules/rules_nodejs/6.2.0/MODULE.bazel": "ec27907f55eb34705adb4e8257952162a2d4c3ed0f0b3b4c3c1aad1fac7be35e", "https://bcr.bazel.build/modules/rules_nodejs/6.3.0/MODULE.bazel": "45345e4aba35dd6e4701c1eebf5a4e67af4ed708def9ebcdc6027585b34ee52d", "https://bcr.bazel.build/modules/rules_nodejs/6.5.0/MODULE.bazel": "546d0cf79f36f9f6e080816045f97234b071c205f4542e3351bd4424282a8810", - "https://bcr.bazel.build/modules/rules_nodejs/6.5.2/MODULE.bazel": "7f9ea68a0ce6d82905ce9f74e76ab8a8b4531ed4c747018c9d76424ad0b3370d", "https://bcr.bazel.build/modules/rules_nodejs/6.7.3/MODULE.bazel": "c22a48b2a0dbf05a9dc5f83837bbc24c226c1f6e618de3c3a610044c9f336056", "https://bcr.bazel.build/modules/rules_nodejs/6.7.3/source.json": "a3f966f4415a8a6545e560ee5449eac95cc633f96429d08e87c87775c72f5e09", "https://bcr.bazel.build/modules/rules_pkg/0.7.0/MODULE.bazel": "df99f03fc7934a4737122518bb87e667e62d780b610910f0447665a7e2be62dc", @@ -434,11 +431,9 @@ }, "@@aspect_rules_ts+//ts:extensions.bzl%ext": { "general": { - "bzlTransitiveDigest": "6NyLUdrb79stFKm8oWIBK2q65cT5Upbr8IR2Qwsywu8=", - "usagesDigest": "araovWFelvfLxh/XEV9hTACAzPA8hNkpItmM5kCKZiQ=", - "recordedFileInputs": { - "@@rules_browsers+//package.json": "772d873d450a539e2133635aeb5e63744cf1cec86e6b37aeecd9267a147fb0d7" - }, + "bzlTransitiveDigest": "0PprNyRYWkfOXKNvI8gaaD69N+xwJfjp1B9PAbgTdTI=", + "usagesDigest": "GXjk1/lLMGbjULA0h8RtzouEhOhStQEDuoMHoClwtqc=", + "recordedFileInputs": {}, "recordedDirentsInputs": {}, "envVariables": {}, "generatedRepoSpecs": { @@ -475,9 +470,8 @@ "npm_rules_browsers_typescript": { "repoRuleId": "@@aspect_rules_ts+//ts/private:npm_repositories.bzl%http_archive_version", "attributes": { - "version": "", - "version_from": "@@rules_browsers+//:package.json", - "integrity": "", + "version": "5.8.2", + "integrity": "sha512-aJn6wq13/afZp/jT9QZmwEjDqqvSGp1VT5GVg+f/t6/oVyrgXM6BY1h9BRh/O5p3PlUPAe+WuiEZOmb/49RqoQ==", "urls": [ "https://registry.npmjs.org/typescript/-/typescript-{}.tgz" ] @@ -501,7 +495,7 @@ "@@aspect_tools_telemetry+//:extension.bzl%telemetry": { "general": { "bzlTransitiveDigest": "cl5A2O84vDL6Tt+Qga8FCj1DUDGqn+e7ly5rZ+4xvcc=", - "usagesDigest": "WjAXczB0+lKrbiyjhsdOKDO3vZyMrPHKBUgS6uTc3XM=", + "usagesDigest": "4S2FeP1q6AdW4e8yrlxmvEvdMor3zaatSVEcYykHgQM=", "recordedFileInputs": {}, "recordedDirentsInputs": {}, "envVariables": {}, @@ -511,7 +505,7 @@ "attributes": { "deps": { "aspect_rules_js": "3.0.2", - "aspect_rules_ts": "3.8.5", + "aspect_rules_ts": "3.8.6", "aspect_rules_esbuild": "0.25.0", "aspect_rules_jasmine": "2.0.4", "aspect_tools_telemetry": "0.3.3" @@ -962,7 +956,7 @@ "@@rules_nodejs+//nodejs:extensions.bzl%node": { "general": { "bzlTransitiveDigest": "4pUxCNc22K4I+6+4Nxu52Hur12tFRfa1JMsN5mdDv60=", - "usagesDigest": "LWkuWzN4r0/mUt55eEdfQvbzNLGkgnSCDR/51JXQNHs=", + "usagesDigest": "RVRqvqv2B/puZoo/J18nMQjDOufEtP5CHzu0by/yvoc=", "recordedFileInputs": {}, "recordedDirentsInputs": {}, "envVariables": {}, @@ -4941,7 +4935,7 @@ }, "@@rules_sass+//src/toolchain:extensions.bzl%sass": { "general": { - "bzlTransitiveDigest": "RA58Nyrsn03Z5YmQnpmBw3mqlVck++XIrx34amsqU/E=", + "bzlTransitiveDigest": "mOfuR8PsNuUWEq7JZ4MpIRbwyAGAqrCvkXXGaRNnlPQ=", "usagesDigest": "R0KshhzIouLWuexMUCrl4HY+FUDwlVVgF9Z7UnwyUWA=", "recordedFileInputs": {}, "recordedDirentsInputs": {}, diff --git a/package.json b/package.json index 79596b07bdb6..fc5da39f8234 100644 --- a/package.json +++ b/package.json @@ -42,20 +42,20 @@ }, "homepage": "https://github.com/angular/angular-cli", "devDependencies": { - "@angular/animations": "22.0.0-next.0", + "@angular/animations": "22.0.0-next.1", "@angular/cdk": "21.3.0-next.0", - "@angular/common": "22.0.0-next.0", - "@angular/compiler": "22.0.0-next.0", - "@angular/compiler-cli": "22.0.0-next.0", - "@angular/core": "22.0.0-next.0", - "@angular/forms": "22.0.0-next.0", - "@angular/localize": "22.0.0-next.0", + "@angular/common": "22.0.0-next.1", + "@angular/compiler": "22.0.0-next.1", + "@angular/compiler-cli": "22.0.0-next.1", + "@angular/core": "22.0.0-next.1", + "@angular/forms": "22.0.0-next.1", + "@angular/localize": "22.0.0-next.1", "@angular/material": "21.3.0-next.0", - "@angular/ng-dev": "https://github.com/angular/dev-infra-private-ng-dev-builds.git#610c7c10ab750bfe5688581d6d5ec11114048f35", - "@angular/platform-browser": "22.0.0-next.0", - "@angular/platform-server": "22.0.0-next.0", - "@angular/router": "22.0.0-next.0", - "@angular/service-worker": "22.0.0-next.0", + "@angular/ng-dev": "https://github.com/angular/dev-infra-private-ng-dev-builds.git#06cf48df3a70d5a314336359dd47722724f69439", + "@angular/platform-browser": "22.0.0-next.1", + "@angular/platform-server": "22.0.0-next.1", + "@angular/router": "22.0.0-next.1", + "@angular/service-worker": "22.0.0-next.1", "@babel/core": "7.29.0", "@bazel/bazelisk": "1.28.1", "@bazel/buildifier": "8.2.1", diff --git a/packages/angular/ssr/package.json b/packages/angular/ssr/package.json index ff9841d70ba7..762c27f282bf 100644 --- a/packages/angular/ssr/package.json +++ b/packages/angular/ssr/package.json @@ -29,12 +29,12 @@ }, "devDependencies": { "@angular-devkit/schematics": "workspace:*", - "@angular/common": "22.0.0-next.0", - "@angular/compiler": "22.0.0-next.0", - "@angular/core": "22.0.0-next.0", - "@angular/platform-browser": "22.0.0-next.0", - "@angular/platform-server": "22.0.0-next.0", - "@angular/router": "22.0.0-next.0", + "@angular/common": "22.0.0-next.1", + "@angular/compiler": "22.0.0-next.1", + "@angular/core": "22.0.0-next.1", + "@angular/platform-browser": "22.0.0-next.1", + "@angular/platform-server": "22.0.0-next.1", + "@angular/router": "22.0.0-next.1", "@schematics/angular": "workspace:*", "beasties": "0.4.1" }, diff --git a/packages/ngtools/webpack/package.json b/packages/ngtools/webpack/package.json index 1aab364f0abb..8a3441c99a43 100644 --- a/packages/ngtools/webpack/package.json +++ b/packages/ngtools/webpack/package.json @@ -27,8 +27,8 @@ }, "devDependencies": { "@angular-devkit/core": "workspace:0.0.0-PLACEHOLDER", - "@angular/compiler": "22.0.0-next.0", - "@angular/compiler-cli": "22.0.0-next.0", + "@angular/compiler": "22.0.0-next.1", + "@angular/compiler-cli": "22.0.0-next.1", "typescript": "6.0.1-rc", "webpack": "5.105.4" } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index e2f2d6baf104..ac4d14a0c58b 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -20,47 +20,47 @@ importers: built: true devDependencies: '@angular/animations': - specifier: 22.0.0-next.0 - version: 22.0.0-next.0(@angular/core@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(rxjs@7.8.2)(zone.js@0.16.1)) + specifier: 22.0.0-next.1 + version: 22.0.0-next.1(@angular/core@22.0.0-next.1(@angular/compiler@22.0.0-next.1)(rxjs@7.8.2)(zone.js@0.16.1)) '@angular/cdk': specifier: 21.3.0-next.0 - version: 21.3.0-next.0(@angular/common@22.0.0-next.0(@angular/core@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@22.0.0-next.0(@angular/animations@22.0.0-next.0(@angular/core@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@22.0.0-next.0(@angular/core@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(rxjs@7.8.2)(zone.js@0.16.1)))(rxjs@7.8.2) + version: 21.3.0-next.0(@angular/common@22.0.0-next.1(@angular/core@22.0.0-next.1(@angular/compiler@22.0.0-next.1)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.1(@angular/compiler@22.0.0-next.1)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@22.0.0-next.1(@angular/animations@22.0.0-next.1(@angular/core@22.0.0-next.1(@angular/compiler@22.0.0-next.1)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@22.0.0-next.1(@angular/core@22.0.0-next.1(@angular/compiler@22.0.0-next.1)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.1(@angular/compiler@22.0.0-next.1)(rxjs@7.8.2)(zone.js@0.16.1)))(rxjs@7.8.2) '@angular/common': - specifier: 22.0.0-next.0 - version: 22.0.0-next.0(@angular/core@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2) + specifier: 22.0.0-next.1 + version: 22.0.0-next.1(@angular/core@22.0.0-next.1(@angular/compiler@22.0.0-next.1)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2) '@angular/compiler': - specifier: 22.0.0-next.0 - version: 22.0.0-next.0 + specifier: 22.0.0-next.1 + version: 22.0.0-next.1 '@angular/compiler-cli': - specifier: 22.0.0-next.0 - version: 22.0.0-next.0(@angular/compiler@22.0.0-next.0)(typescript@6.0.1-rc) + specifier: 22.0.0-next.1 + version: 22.0.0-next.1(@angular/compiler@22.0.0-next.1)(typescript@6.0.1-rc) '@angular/core': - specifier: 22.0.0-next.0 - version: 22.0.0-next.0(@angular/compiler@22.0.0-next.0)(rxjs@7.8.2)(zone.js@0.16.1) + specifier: 22.0.0-next.1 + version: 22.0.0-next.1(@angular/compiler@22.0.0-next.1)(rxjs@7.8.2)(zone.js@0.16.1) '@angular/forms': - specifier: 22.0.0-next.0 - version: 22.0.0-next.0(@angular/common@22.0.0-next.0(@angular/core@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@22.0.0-next.0(@angular/animations@22.0.0-next.0(@angular/core@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@22.0.0-next.0(@angular/core@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(rxjs@7.8.2)(zone.js@0.16.1)))(rxjs@7.8.2) + specifier: 22.0.0-next.1 + version: 22.0.0-next.1(@angular/common@22.0.0-next.1(@angular/core@22.0.0-next.1(@angular/compiler@22.0.0-next.1)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.1(@angular/compiler@22.0.0-next.1)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@22.0.0-next.1(@angular/animations@22.0.0-next.1(@angular/core@22.0.0-next.1(@angular/compiler@22.0.0-next.1)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@22.0.0-next.1(@angular/core@22.0.0-next.1(@angular/compiler@22.0.0-next.1)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.1(@angular/compiler@22.0.0-next.1)(rxjs@7.8.2)(zone.js@0.16.1)))(rxjs@7.8.2) '@angular/localize': - specifier: 22.0.0-next.0 - version: 22.0.0-next.0(@angular/compiler-cli@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(typescript@6.0.1-rc))(@angular/compiler@22.0.0-next.0) + specifier: 22.0.0-next.1 + version: 22.0.0-next.1(@angular/compiler-cli@22.0.0-next.1(@angular/compiler@22.0.0-next.1)(typescript@6.0.1-rc))(@angular/compiler@22.0.0-next.1) '@angular/material': specifier: 21.3.0-next.0 - version: 21.3.0-next.0(3b5e22ded8635c9a08f958235c8786ff) + version: 21.3.0-next.0(2645b915ebf9074f759b05c1e2af589e) '@angular/ng-dev': - specifier: https://github.com/angular/dev-infra-private-ng-dev-builds.git#610c7c10ab750bfe5688581d6d5ec11114048f35 - version: https://codeload.github.com/angular/dev-infra-private-ng-dev-builds/tar.gz/610c7c10ab750bfe5688581d6d5ec11114048f35(@modelcontextprotocol/sdk@1.27.1(zod@4.3.6)) + specifier: https://github.com/angular/dev-infra-private-ng-dev-builds.git#06cf48df3a70d5a314336359dd47722724f69439 + version: https://codeload.github.com/angular/dev-infra-private-ng-dev-builds/tar.gz/06cf48df3a70d5a314336359dd47722724f69439(@modelcontextprotocol/sdk@1.27.1(zod@4.3.6)) '@angular/platform-browser': - specifier: 22.0.0-next.0 - version: 22.0.0-next.0(@angular/animations@22.0.0-next.0(@angular/core@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@22.0.0-next.0(@angular/core@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(rxjs@7.8.2)(zone.js@0.16.1)) + specifier: 22.0.0-next.1 + version: 22.0.0-next.1(@angular/animations@22.0.0-next.1(@angular/core@22.0.0-next.1(@angular/compiler@22.0.0-next.1)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@22.0.0-next.1(@angular/core@22.0.0-next.1(@angular/compiler@22.0.0-next.1)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.1(@angular/compiler@22.0.0-next.1)(rxjs@7.8.2)(zone.js@0.16.1)) '@angular/platform-server': - specifier: 22.0.0-next.0 - version: 22.0.0-next.0(@angular/common@22.0.0-next.0(@angular/core@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/compiler@22.0.0-next.0)(@angular/core@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@22.0.0-next.0(@angular/animations@22.0.0-next.0(@angular/core@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@22.0.0-next.0(@angular/core@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(rxjs@7.8.2)(zone.js@0.16.1)))(rxjs@7.8.2) + specifier: 22.0.0-next.1 + version: 22.0.0-next.1(@angular/common@22.0.0-next.1(@angular/core@22.0.0-next.1(@angular/compiler@22.0.0-next.1)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/compiler@22.0.0-next.1)(@angular/core@22.0.0-next.1(@angular/compiler@22.0.0-next.1)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@22.0.0-next.1(@angular/animations@22.0.0-next.1(@angular/core@22.0.0-next.1(@angular/compiler@22.0.0-next.1)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@22.0.0-next.1(@angular/core@22.0.0-next.1(@angular/compiler@22.0.0-next.1)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.1(@angular/compiler@22.0.0-next.1)(rxjs@7.8.2)(zone.js@0.16.1)))(rxjs@7.8.2) '@angular/router': - specifier: 22.0.0-next.0 - version: 22.0.0-next.0(@angular/common@22.0.0-next.0(@angular/core@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@22.0.0-next.0(@angular/animations@22.0.0-next.0(@angular/core@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@22.0.0-next.0(@angular/core@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(rxjs@7.8.2)(zone.js@0.16.1)))(rxjs@7.8.2) + specifier: 22.0.0-next.1 + version: 22.0.0-next.1(@angular/common@22.0.0-next.1(@angular/core@22.0.0-next.1(@angular/compiler@22.0.0-next.1)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.1(@angular/compiler@22.0.0-next.1)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@22.0.0-next.1(@angular/animations@22.0.0-next.1(@angular/core@22.0.0-next.1(@angular/compiler@22.0.0-next.1)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@22.0.0-next.1(@angular/core@22.0.0-next.1(@angular/compiler@22.0.0-next.1)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.1(@angular/compiler@22.0.0-next.1)(rxjs@7.8.2)(zone.js@0.16.1)))(rxjs@7.8.2) '@angular/service-worker': - specifier: 22.0.0-next.0 - version: 22.0.0-next.0(@angular/core@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2) + specifier: 22.0.0-next.1 + version: 22.0.0-next.1(@angular/core@22.0.0-next.1(@angular/compiler@22.0.0-next.1)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2) '@babel/core': specifier: 7.29.0 version: 7.29.0 @@ -321,7 +321,7 @@ importers: version: 28.1.0 ng-packagr: specifier: 22.0.0-next.0 - version: 22.0.0-next.0(@angular/compiler-cli@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(typescript@6.0.1-rc))(tslib@2.8.1)(typescript@6.0.1-rc) + version: 22.0.0-next.0(@angular/compiler-cli@22.0.0-next.1(@angular/compiler@22.0.0-next.1)(typescript@6.0.1-rc))(tslib@2.8.1)(typescript@6.0.1-rc) rxjs: specifier: 7.8.2 version: 7.8.2 @@ -424,7 +424,7 @@ importers: version: 4.4.2 ng-packagr: specifier: 22.0.0-next.0 - version: 22.0.0-next.0(@angular/compiler-cli@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(typescript@6.0.1-rc))(tslib@2.8.1)(typescript@6.0.1-rc) + version: 22.0.0-next.0(@angular/compiler-cli@22.0.0-next.1(@angular/compiler@22.0.0-next.1)(typescript@6.0.1-rc))(tslib@2.8.1)(typescript@6.0.1-rc) postcss: specifier: 8.5.8 version: 8.5.8 @@ -518,23 +518,23 @@ importers: specifier: workspace:* version: link:../../angular_devkit/schematics '@angular/common': - specifier: 22.0.0-next.0 - version: 22.0.0-next.0(@angular/core@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2) + specifier: 22.0.0-next.1 + version: 22.0.0-next.1(@angular/core@22.0.0-next.1(@angular/compiler@22.0.0-next.1)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2) '@angular/compiler': - specifier: 22.0.0-next.0 - version: 22.0.0-next.0 + specifier: 22.0.0-next.1 + version: 22.0.0-next.1 '@angular/core': - specifier: 22.0.0-next.0 - version: 22.0.0-next.0(@angular/compiler@22.0.0-next.0)(rxjs@7.8.2)(zone.js@0.16.1) + specifier: 22.0.0-next.1 + version: 22.0.0-next.1(@angular/compiler@22.0.0-next.1)(rxjs@7.8.2)(zone.js@0.16.1) '@angular/platform-browser': - specifier: 22.0.0-next.0 - version: 22.0.0-next.0(@angular/animations@22.0.0-next.0(@angular/core@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@22.0.0-next.0(@angular/core@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(rxjs@7.8.2)(zone.js@0.16.1)) + specifier: 22.0.0-next.1 + version: 22.0.0-next.1(@angular/animations@22.0.0-next.1(@angular/core@22.0.0-next.1(@angular/compiler@22.0.0-next.1)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@22.0.0-next.1(@angular/core@22.0.0-next.1(@angular/compiler@22.0.0-next.1)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.1(@angular/compiler@22.0.0-next.1)(rxjs@7.8.2)(zone.js@0.16.1)) '@angular/platform-server': - specifier: 22.0.0-next.0 - version: 22.0.0-next.0(@angular/common@22.0.0-next.0(@angular/core@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/compiler@22.0.0-next.0)(@angular/core@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@22.0.0-next.0(@angular/animations@22.0.0-next.0(@angular/core@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@22.0.0-next.0(@angular/core@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(rxjs@7.8.2)(zone.js@0.16.1)))(rxjs@7.8.2) + specifier: 22.0.0-next.1 + version: 22.0.0-next.1(@angular/common@22.0.0-next.1(@angular/core@22.0.0-next.1(@angular/compiler@22.0.0-next.1)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/compiler@22.0.0-next.1)(@angular/core@22.0.0-next.1(@angular/compiler@22.0.0-next.1)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@22.0.0-next.1(@angular/animations@22.0.0-next.1(@angular/core@22.0.0-next.1(@angular/compiler@22.0.0-next.1)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@22.0.0-next.1(@angular/core@22.0.0-next.1(@angular/compiler@22.0.0-next.1)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.1(@angular/compiler@22.0.0-next.1)(rxjs@7.8.2)(zone.js@0.16.1)))(rxjs@7.8.2) '@angular/router': - specifier: 22.0.0-next.0 - version: 22.0.0-next.0(@angular/common@22.0.0-next.0(@angular/core@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@22.0.0-next.0(@angular/animations@22.0.0-next.0(@angular/core@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@22.0.0-next.0(@angular/core@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(rxjs@7.8.2)(zone.js@0.16.1)))(rxjs@7.8.2) + specifier: 22.0.0-next.1 + version: 22.0.0-next.1(@angular/common@22.0.0-next.1(@angular/core@22.0.0-next.1(@angular/compiler@22.0.0-next.1)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.1(@angular/compiler@22.0.0-next.1)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@22.0.0-next.1(@angular/animations@22.0.0-next.1(@angular/core@22.0.0-next.1(@angular/compiler@22.0.0-next.1)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@22.0.0-next.1(@angular/core@22.0.0-next.1(@angular/compiler@22.0.0-next.1)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.1(@angular/compiler@22.0.0-next.1)(rxjs@7.8.2)(zone.js@0.16.1)))(rxjs@7.8.2) '@schematics/angular': specifier: workspace:* version: link:../../schematics/angular @@ -721,7 +721,7 @@ importers: version: 3.0.4(bufferutil@4.1.0)(utf-8-validate@6.0.6) ng-packagr: specifier: 22.0.0-next.0 - version: 22.0.0-next.0(@angular/compiler-cli@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(typescript@6.0.1-rc))(tslib@2.8.1)(typescript@6.0.1-rc) + version: 22.0.0-next.0(@angular/compiler-cli@22.0.0-next.1(@angular/compiler@22.0.0-next.1)(typescript@6.0.1-rc))(tslib@2.8.1)(typescript@6.0.1-rc) undici: specifier: 7.22.0 version: 7.22.0 @@ -813,11 +813,11 @@ importers: specifier: workspace:0.0.0-PLACEHOLDER version: link:../../angular_devkit/core '@angular/compiler': - specifier: 22.0.0-next.0 - version: 22.0.0-next.0 + specifier: 22.0.0-next.1 + version: 22.0.0-next.1 '@angular/compiler-cli': - specifier: 22.0.0-next.0 - version: 22.0.0-next.0(@angular/compiler@22.0.0-next.0)(typescript@6.0.1-rc) + specifier: 22.0.0-next.1 + version: 22.0.0-next.1(@angular/compiler@22.0.0-next.1)(typescript@6.0.1-rc) typescript: specifier: 6.0.1-rc version: 6.0.1-rc @@ -926,11 +926,11 @@ packages: resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} engines: {node: '>=6.0.0'} - '@angular/animations@22.0.0-next.0': - resolution: {integrity: sha512-oNobZGZxeOMCKKYg6qxgyanxe3ydRzvCO2VtSoljgW890S84E6pwomUeyu+fn2uHKXEOjVpIUo2qCNw7Ya2cNA==} + '@angular/animations@22.0.0-next.1': + resolution: {integrity: sha512-bJOvi+jo27Zqn4scMNmucsa5RKmXEQDwrIBQCC4w6pzLWH0Q/PXYfD7EI0ssFLcdDJW2DPB8uiSePYlh7UBOFQ==} engines: {node: ^22.22.0 || >=24.13.1} peerDependencies: - '@angular/core': 22.0.0-next.0 + '@angular/core': 22.0.0-next.1 '@angular/cdk@21.3.0-next.0': resolution: {integrity: sha512-G5EDENTxLaMCZ35DO3FVbplU05r5NPm6bWLp88xrNGc8u3a9cwswp5fNwSVcW3E7c1VuvCC4tTsPmPYI1DycGw==} @@ -940,33 +940,33 @@ packages: '@angular/platform-browser': ^21.0.0-0 || ^21.1.0-0 || ^21.2.0-0 || ^21.3.0-0 || ^22.0.0-0 rxjs: ^6.5.3 || ^7.4.0 - '@angular/common@22.0.0-next.0': - resolution: {integrity: sha512-f8VpaKaBLQZjnFVNituC4k+X8vlp5s9YlvWs1IZu6bQ6J2WAx87wiPeHA/zuishu9D2bp7y5OcXPccwAk/XNiw==} + '@angular/common@22.0.0-next.1': + resolution: {integrity: sha512-yzlrH6vjdiLhzvSbbwNqiINFVU4TnAIVTDH7wRRayV/c/niGrY/C9AjTqy+/H8rDw94oUbgskplOe8qQGii6Gw==} engines: {node: ^22.22.0 || >=24.13.1} peerDependencies: - '@angular/core': 22.0.0-next.0 + '@angular/core': 22.0.0-next.1 rxjs: ^6.5.3 || ^7.4.0 - '@angular/compiler-cli@22.0.0-next.0': - resolution: {integrity: sha512-2WX/B0C2lPclLI0k0q8WJKTsUDOmgYlQqQNepe2VLKqY6h87bVgu5nJuoyOEjN5o9BDyrZWig5XDmlEGvkabrw==} + '@angular/compiler-cli@22.0.0-next.1': + resolution: {integrity: sha512-sbh3d2iG7YMBW2H0pG8jnySjVJz2SVycAQ7D+vP2E2DTaJGDDu9SQyr1MBhM8S81u8QV0u1050wech/EFu+Ukg==} engines: {node: ^22.22.0 || >=24.13.1} hasBin: true peerDependencies: - '@angular/compiler': 22.0.0-next.0 + '@angular/compiler': 22.0.0-next.1 typescript: '>=5.9 <6.1' peerDependenciesMeta: typescript: optional: true - '@angular/compiler@22.0.0-next.0': - resolution: {integrity: sha512-tTUIKgr90oh5/sU9cjPmV3GjQ2pqSojWiZcS8GVDqydKTMx2YOflQ6A8yL3FtL5hkTJ7rlZYZwA1dzRKuNaEvQ==} + '@angular/compiler@22.0.0-next.1': + resolution: {integrity: sha512-qbDEy0RkRy3M8xQj2O5ZVWaSJsm6KqZiz6BRMAvydX3otMImr6ELOuBbAHLGdZ3R1LaVrYeNnSsgQez7Z7Skfw==} engines: {node: ^22.22.0 || >=24.13.1} - '@angular/core@22.0.0-next.0': - resolution: {integrity: sha512-HXMOh56el5hq0541LcxYlIttiFMLNmqJ3kQry27VIPuxakCgZdam8HbhWPje4PMfioiLHShdCZUF+VWnr11Erg==} + '@angular/core@22.0.0-next.1': + resolution: {integrity: sha512-/41VYZpvV/G/HZ4w+nVp5Oywjjy+29JmXiwHMIvcFO47IcT8LVM7jfags/BNYVTk/UjT4HllMi/DWKFAPf3fwA==} engines: {node: ^22.22.0 || >=24.13.1} peerDependencies: - '@angular/compiler': 22.0.0-next.0 + '@angular/compiler': 22.0.0-next.1 rxjs: ^6.5.3 || ^7.4.0 zone.js: ~0.15.0 || ~0.16.0 peerDependenciesMeta: @@ -975,22 +975,22 @@ packages: zone.js: optional: true - '@angular/forms@22.0.0-next.0': - resolution: {integrity: sha512-eljVun7G5FLQE6SMiNt0JiMmLsfo/mSFAhAPPp+8VlVxW31RV117RTC0wvP4fMAQMzBgiRRZShQRKMc8orMnoQ==} + '@angular/forms@22.0.0-next.1': + resolution: {integrity: sha512-yI8XGFrVMx2W+tKqlv6svylitvrh2TlwE3z3kZzGQx+SVgz9P53bbnOKwLjtAymudY1P6KTlQmeNasgnsvwmMw==} engines: {node: ^22.22.0 || >=24.13.1} peerDependencies: - '@angular/common': 22.0.0-next.0 - '@angular/core': 22.0.0-next.0 - '@angular/platform-browser': 22.0.0-next.0 + '@angular/common': 22.0.0-next.1 + '@angular/core': 22.0.0-next.1 + '@angular/platform-browser': 22.0.0-next.1 rxjs: ^6.5.3 || ^7.4.0 - '@angular/localize@22.0.0-next.0': - resolution: {integrity: sha512-efHunpqsizxKQKNay1fnG2V/oxrdI5s3+AlznUxNQQ5Rn8bpdvhwdBzGrsQY+H5FqrZNTC/9hhGqczROjMJREA==} + '@angular/localize@22.0.0-next.1': + resolution: {integrity: sha512-3L+IPu+4Kx7MB4ZbFGOX65MCBW/G0NlQeBfyXyU3U5CwHCU6AEyxn+1kU5dfci6ZkCKgdiISEZyWr3tpkFoppg==} engines: {node: ^22.22.0 || >=24.13.1} hasBin: true peerDependencies: - '@angular/compiler': 22.0.0-next.0 - '@angular/compiler-cli': 22.0.0-next.0 + '@angular/compiler': 22.0.0-next.1 + '@angular/compiler-cli': 22.0.0-next.1 '@angular/material@21.3.0-next.0': resolution: {integrity: sha512-rUR6LNR5pe0xOv3llqaXA3x08w/CXCihFRvmxFotvZ12lxm6bNw9sYGz60V6fVYYOYKI96G4Uylz0PlZdiHAYQ==} @@ -1002,47 +1002,47 @@ packages: '@angular/platform-browser': ^21.0.0-0 || ^21.1.0-0 || ^21.2.0-0 || ^21.3.0-0 || ^22.0.0-0 rxjs: ^6.5.3 || ^7.4.0 - '@angular/ng-dev@https://codeload.github.com/angular/dev-infra-private-ng-dev-builds/tar.gz/610c7c10ab750bfe5688581d6d5ec11114048f35': - resolution: {tarball: https://codeload.github.com/angular/dev-infra-private-ng-dev-builds/tar.gz/610c7c10ab750bfe5688581d6d5ec11114048f35} - version: 0.0.0-e4dcda13e469f50a6bd92667e2ded8b98173bf2c + '@angular/ng-dev@https://codeload.github.com/angular/dev-infra-private-ng-dev-builds/tar.gz/06cf48df3a70d5a314336359dd47722724f69439': + resolution: {tarball: https://codeload.github.com/angular/dev-infra-private-ng-dev-builds/tar.gz/06cf48df3a70d5a314336359dd47722724f69439} + version: 0.0.0-08542a03ec636e2b37541e3e4104ec1cdf2c32d6 hasBin: true - '@angular/platform-browser@22.0.0-next.0': - resolution: {integrity: sha512-erbW9VyQMqrW3PfX6lKpAttbxJsc7xWNuO7h449B6PXsNNkyqURC8haJANDWbDx8tTUGDqxEAiAQC7ANtgT6ZA==} + '@angular/platform-browser@22.0.0-next.1': + resolution: {integrity: sha512-n7tevqK5XQGn9iga3nZjtbFA6nGtUZJvuJI+iCN3epZQ9N+IXPrGJzVe1Nx1ys+lGG/RxB8fbTf1yqEXUR/7aQ==} engines: {node: ^22.22.0 || >=24.13.1} peerDependencies: - '@angular/animations': 22.0.0-next.0 - '@angular/common': 22.0.0-next.0 - '@angular/core': 22.0.0-next.0 + '@angular/animations': 22.0.0-next.1 + '@angular/common': 22.0.0-next.1 + '@angular/core': 22.0.0-next.1 peerDependenciesMeta: '@angular/animations': optional: true - '@angular/platform-server@22.0.0-next.0': - resolution: {integrity: sha512-i3yYSZ2vrx3XpHEfJS0n18fwAYMig1gPMo8+6YoB5Ywf+R7ffq8kygPxutuI0bVDAbC4ChsVgBdXRrltTiE6fg==} + '@angular/platform-server@22.0.0-next.1': + resolution: {integrity: sha512-eFh+ITBnL8tx/fIQeSjQ2tCRKtiCggmx4Ez6D2uQPEYkDukItRJypjJvgWBYLoG+VZUApgohbbc/qJh0n5zOZA==} engines: {node: ^22.22.0 || >=24.13.1} peerDependencies: - '@angular/common': 22.0.0-next.0 - '@angular/compiler': 22.0.0-next.0 - '@angular/core': 22.0.0-next.0 - '@angular/platform-browser': 22.0.0-next.0 + '@angular/common': 22.0.0-next.1 + '@angular/compiler': 22.0.0-next.1 + '@angular/core': 22.0.0-next.1 + '@angular/platform-browser': 22.0.0-next.1 rxjs: ^6.5.3 || ^7.4.0 - '@angular/router@22.0.0-next.0': - resolution: {integrity: sha512-LhFmsy+pjdyItBtRoyUni/sF67bXmQkYS3FqcOqpDKDpPKu0gKEisUt/txAp5I2npf5ZX6KTbS0OUkXW/REb8A==} + '@angular/router@22.0.0-next.1': + resolution: {integrity: sha512-aeaf9AS5FnJhWbIvKlngnCyBJx1CutQ2o2ymLbp2lnB/Xc72wdv8R5kuMplAmrrAnjUoI9KO/pwzc0UjMmSU6w==} engines: {node: ^22.22.0 || >=24.13.1} peerDependencies: - '@angular/common': 22.0.0-next.0 - '@angular/core': 22.0.0-next.0 - '@angular/platform-browser': 22.0.0-next.0 + '@angular/common': 22.0.0-next.1 + '@angular/core': 22.0.0-next.1 + '@angular/platform-browser': 22.0.0-next.1 rxjs: ^6.5.3 || ^7.4.0 - '@angular/service-worker@22.0.0-next.0': - resolution: {integrity: sha512-oJ5kXL0Q5krgStHvo6/QsxmRdOlOuoHu4xecD1CpYw93vi/T9ryWAr1w92BgczJsdf5KyChZlFES7g9iEZOD6A==} + '@angular/service-worker@22.0.0-next.1': + resolution: {integrity: sha512-xkoOL21ZC9TlvLKSNm0o1QKN3blQdZVPHItYjzT7kHaXI1hJNEJbqsIA5HljsthBtzfa1CBiweZRzCHGfs5gbA==} engines: {node: ^22.22.0 || >=24.13.1} hasBin: true peerDependencies: - '@angular/core': 22.0.0-next.0 + '@angular/core': 22.0.0-next.1 rxjs: ^6.5.3 || ^7.4.0 '@asamuzakjp/css-color@5.0.1': @@ -1580,12 +1580,12 @@ packages: resolution: {integrity: sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==} engines: {node: '>=0.1.90'} - '@conventional-changelog/git-client@1.0.1': - resolution: {integrity: sha512-PJEqBwAleffCMETaVm/fUgHldzBE35JFk3/9LL6NUA5EXa3qednu+UT6M7E5iBu3zIQZCULYIiZ90fBYHt6xUw==} + '@conventional-changelog/git-client@2.6.0': + resolution: {integrity: sha512-T+uPDciKf0/ioNNDpMGc8FDsehJClZP0yR3Q5MN6wE/Y/1QZ7F+80OgznnTCOlMEG4AV0LvH2UJi3C/nBnaBUg==} engines: {node: '>=18'} peerDependencies: conventional-commits-filter: ^5.0.0 - conventional-commits-parser: ^6.0.0 + conventional-commits-parser: ^6.3.0 peerDependenciesMeta: conventional-commits-filter: optional: true @@ -3311,6 +3311,10 @@ packages: resolution: {integrity: sha512-mNe0Iigql08YupSOGv197YdHpPPr+EzDZmfCgMc7RPNaZTw5aLN01nBl6CHJOh3BGtnMIj83EeN4butBchc8Ag==} engines: {node: ^20.17.0 || >=22.9.0} + '@simple-libs/child-process-utils@1.0.2': + resolution: {integrity: sha512-/4R8QKnd/8agJynkNdJmNw2MBxuFTRcNFnE5Sg/G+jkSsV8/UBgULMzhizWWW42p8L5H7flImV2ATi79Ove2Tw==} + engines: {node: '>=18'} + '@simple-libs/stream-utils@1.2.0': resolution: {integrity: sha512-KxXvfapcixpz6rVEB6HPjOUZT22yN6v0vI0urQSk1L8MlEWPDFCZkhw2xmkyoTGYeFw7tWTZd7e3lVzRZRN/EA==} engines: {node: '>=18'} @@ -4764,8 +4768,8 @@ packages: ee-first@1.1.1: resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} - ejs@4.0.1: - resolution: {integrity: sha512-krvQtxc0btwSm/nvnt1UpnaFDFVJpJ0fdckmALpCgShsr/iGYHTnJiUliZTgmzq/UxTX33TtOQVKaNigMQp/6Q==} + ejs@5.0.1: + resolution: {integrity: sha512-COqBPFMxuPTPspXl2DkVYaDS3HtrD1GpzOGkNTJ1IYkifq/r9h8SVEFrjA3D9/VJGOEoMQcrlhpntcSUrM8k6A==} engines: {node: '>=0.12.18'} hasBin: true @@ -5148,9 +5152,6 @@ packages: resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} engines: {node: '>=16.0.0'} - filelist@1.0.6: - resolution: {integrity: sha512-5giy2PkLYY1cP39p17Ech+2xlpTRL9HLspOfEgm0L6CwBXBTgsK5ou0JtzYuepxkaQ/tvhCFIJ5uXo0OrM2DxA==} - fill-range@7.1.1: resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} engines: {node: '>=8'} @@ -5895,11 +5896,6 @@ packages: jackspeak@3.4.3: resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} - jake@10.9.4: - resolution: {integrity: sha512-wpHYzhxiVQL+IV05BLE2Xn34zW1S223hvjtqk0+gsPrwd/8JNLXJgZZM/iPFsYc1xyphF+6M6EvdE5E9MBGkDA==} - engines: {node: '>=10'} - hasBin: true - jasmine-core@4.6.1: resolution: {integrity: sha512-VYz/BjjmC3klLJlLwA4Kw8ytk0zDSmbbDLNs794VnWmkcCB7I9aAL/D48VNQtmITyPvea2C3jdUMfc3kAoy0PQ==} @@ -6327,10 +6323,6 @@ packages: minimatch@3.1.5: resolution: {integrity: sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==} - minimatch@5.1.9: - resolution: {integrity: sha512-7o1wEA2RyMP7Iu7GNba9vc0RWWGACJOCZBJX2GJWip0ikV+wcOsgVuY9uE8CPiyQhkGFSlhuSkZPavN7u1c2Fw==} - engines: {node: '>=10'} - minimatch@7.4.6: resolution: {integrity: sha512-sBz8G/YjVniEz6lKPNpKxXwazJe4c19fEfV2GDMX6AjFz+MX9uDWIZW8XreVhkFW3fkIdTv/gxWr/Kks5FFAVw==} engines: {node: '>=10'} @@ -8468,29 +8460,29 @@ snapshots: '@jridgewell/gen-mapping': 0.3.13 '@jridgewell/trace-mapping': 0.3.31 - '@angular/animations@22.0.0-next.0(@angular/core@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(rxjs@7.8.2)(zone.js@0.16.1))': + '@angular/animations@22.0.0-next.1(@angular/core@22.0.0-next.1(@angular/compiler@22.0.0-next.1)(rxjs@7.8.2)(zone.js@0.16.1))': dependencies: - '@angular/core': 22.0.0-next.0(@angular/compiler@22.0.0-next.0)(rxjs@7.8.2)(zone.js@0.16.1) + '@angular/core': 22.0.0-next.1(@angular/compiler@22.0.0-next.1)(rxjs@7.8.2)(zone.js@0.16.1) tslib: 2.8.1 - '@angular/cdk@21.3.0-next.0(@angular/common@22.0.0-next.0(@angular/core@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@22.0.0-next.0(@angular/animations@22.0.0-next.0(@angular/core@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@22.0.0-next.0(@angular/core@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(rxjs@7.8.2)(zone.js@0.16.1)))(rxjs@7.8.2)': + '@angular/cdk@21.3.0-next.0(@angular/common@22.0.0-next.1(@angular/core@22.0.0-next.1(@angular/compiler@22.0.0-next.1)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.1(@angular/compiler@22.0.0-next.1)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@22.0.0-next.1(@angular/animations@22.0.0-next.1(@angular/core@22.0.0-next.1(@angular/compiler@22.0.0-next.1)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@22.0.0-next.1(@angular/core@22.0.0-next.1(@angular/compiler@22.0.0-next.1)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.1(@angular/compiler@22.0.0-next.1)(rxjs@7.8.2)(zone.js@0.16.1)))(rxjs@7.8.2)': dependencies: - '@angular/common': 22.0.0-next.0(@angular/core@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2) - '@angular/core': 22.0.0-next.0(@angular/compiler@22.0.0-next.0)(rxjs@7.8.2)(zone.js@0.16.1) - '@angular/platform-browser': 22.0.0-next.0(@angular/animations@22.0.0-next.0(@angular/core@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@22.0.0-next.0(@angular/core@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(rxjs@7.8.2)(zone.js@0.16.1)) + '@angular/common': 22.0.0-next.1(@angular/core@22.0.0-next.1(@angular/compiler@22.0.0-next.1)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2) + '@angular/core': 22.0.0-next.1(@angular/compiler@22.0.0-next.1)(rxjs@7.8.2)(zone.js@0.16.1) + '@angular/platform-browser': 22.0.0-next.1(@angular/animations@22.0.0-next.1(@angular/core@22.0.0-next.1(@angular/compiler@22.0.0-next.1)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@22.0.0-next.1(@angular/core@22.0.0-next.1(@angular/compiler@22.0.0-next.1)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.1(@angular/compiler@22.0.0-next.1)(rxjs@7.8.2)(zone.js@0.16.1)) parse5: 8.0.0 rxjs: 7.8.2 tslib: 2.8.1 - '@angular/common@22.0.0-next.0(@angular/core@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2)': + '@angular/common@22.0.0-next.1(@angular/core@22.0.0-next.1(@angular/compiler@22.0.0-next.1)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2)': dependencies: - '@angular/core': 22.0.0-next.0(@angular/compiler@22.0.0-next.0)(rxjs@7.8.2)(zone.js@0.16.1) + '@angular/core': 22.0.0-next.1(@angular/compiler@22.0.0-next.1)(rxjs@7.8.2)(zone.js@0.16.1) rxjs: 7.8.2 tslib: 2.8.1 - '@angular/compiler-cli@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(typescript@6.0.1-rc)': + '@angular/compiler-cli@22.0.0-next.1(@angular/compiler@22.0.0-next.1)(typescript@6.0.1-rc)': dependencies: - '@angular/compiler': 22.0.0-next.0 + '@angular/compiler': 22.0.0-next.1 '@babel/core': 7.29.0 '@jridgewell/sourcemap-codec': 1.5.5 chokidar: 5.0.0 @@ -8504,31 +8496,31 @@ snapshots: transitivePeerDependencies: - supports-color - '@angular/compiler@22.0.0-next.0': + '@angular/compiler@22.0.0-next.1': dependencies: tslib: 2.8.1 - '@angular/core@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(rxjs@7.8.2)(zone.js@0.16.1)': + '@angular/core@22.0.0-next.1(@angular/compiler@22.0.0-next.1)(rxjs@7.8.2)(zone.js@0.16.1)': dependencies: rxjs: 7.8.2 tslib: 2.8.1 optionalDependencies: - '@angular/compiler': 22.0.0-next.0 + '@angular/compiler': 22.0.0-next.1 zone.js: 0.16.1 - '@angular/forms@22.0.0-next.0(@angular/common@22.0.0-next.0(@angular/core@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@22.0.0-next.0(@angular/animations@22.0.0-next.0(@angular/core@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@22.0.0-next.0(@angular/core@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(rxjs@7.8.2)(zone.js@0.16.1)))(rxjs@7.8.2)': + '@angular/forms@22.0.0-next.1(@angular/common@22.0.0-next.1(@angular/core@22.0.0-next.1(@angular/compiler@22.0.0-next.1)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.1(@angular/compiler@22.0.0-next.1)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@22.0.0-next.1(@angular/animations@22.0.0-next.1(@angular/core@22.0.0-next.1(@angular/compiler@22.0.0-next.1)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@22.0.0-next.1(@angular/core@22.0.0-next.1(@angular/compiler@22.0.0-next.1)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.1(@angular/compiler@22.0.0-next.1)(rxjs@7.8.2)(zone.js@0.16.1)))(rxjs@7.8.2)': dependencies: - '@angular/common': 22.0.0-next.0(@angular/core@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2) - '@angular/core': 22.0.0-next.0(@angular/compiler@22.0.0-next.0)(rxjs@7.8.2)(zone.js@0.16.1) - '@angular/platform-browser': 22.0.0-next.0(@angular/animations@22.0.0-next.0(@angular/core@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@22.0.0-next.0(@angular/core@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(rxjs@7.8.2)(zone.js@0.16.1)) + '@angular/common': 22.0.0-next.1(@angular/core@22.0.0-next.1(@angular/compiler@22.0.0-next.1)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2) + '@angular/core': 22.0.0-next.1(@angular/compiler@22.0.0-next.1)(rxjs@7.8.2)(zone.js@0.16.1) + '@angular/platform-browser': 22.0.0-next.1(@angular/animations@22.0.0-next.1(@angular/core@22.0.0-next.1(@angular/compiler@22.0.0-next.1)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@22.0.0-next.1(@angular/core@22.0.0-next.1(@angular/compiler@22.0.0-next.1)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.1(@angular/compiler@22.0.0-next.1)(rxjs@7.8.2)(zone.js@0.16.1)) '@standard-schema/spec': 1.1.0 rxjs: 7.8.2 tslib: 2.8.1 - '@angular/localize@22.0.0-next.0(@angular/compiler-cli@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(typescript@6.0.1-rc))(@angular/compiler@22.0.0-next.0)': + '@angular/localize@22.0.0-next.1(@angular/compiler-cli@22.0.0-next.1(@angular/compiler@22.0.0-next.1)(typescript@6.0.1-rc))(@angular/compiler@22.0.0-next.1)': dependencies: - '@angular/compiler': 22.0.0-next.0 - '@angular/compiler-cli': 22.0.0-next.0(@angular/compiler@22.0.0-next.0)(typescript@6.0.1-rc) + '@angular/compiler': 22.0.0-next.1 + '@angular/compiler-cli': 22.0.0-next.1(@angular/compiler@22.0.0-next.1)(typescript@6.0.1-rc) '@babel/core': 7.29.0 '@types/babel__core': 7.20.5 tinyglobby: 0.2.15 @@ -8536,20 +8528,20 @@ snapshots: transitivePeerDependencies: - supports-color - '@angular/material@21.3.0-next.0(3b5e22ded8635c9a08f958235c8786ff)': + '@angular/material@21.3.0-next.0(2645b915ebf9074f759b05c1e2af589e)': dependencies: - '@angular/cdk': 21.3.0-next.0(@angular/common@22.0.0-next.0(@angular/core@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@22.0.0-next.0(@angular/animations@22.0.0-next.0(@angular/core@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@22.0.0-next.0(@angular/core@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(rxjs@7.8.2)(zone.js@0.16.1)))(rxjs@7.8.2) - '@angular/common': 22.0.0-next.0(@angular/core@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2) - '@angular/core': 22.0.0-next.0(@angular/compiler@22.0.0-next.0)(rxjs@7.8.2)(zone.js@0.16.1) - '@angular/forms': 22.0.0-next.0(@angular/common@22.0.0-next.0(@angular/core@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@22.0.0-next.0(@angular/animations@22.0.0-next.0(@angular/core@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@22.0.0-next.0(@angular/core@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(rxjs@7.8.2)(zone.js@0.16.1)))(rxjs@7.8.2) - '@angular/platform-browser': 22.0.0-next.0(@angular/animations@22.0.0-next.0(@angular/core@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@22.0.0-next.0(@angular/core@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(rxjs@7.8.2)(zone.js@0.16.1)) + '@angular/cdk': 21.3.0-next.0(@angular/common@22.0.0-next.1(@angular/core@22.0.0-next.1(@angular/compiler@22.0.0-next.1)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.1(@angular/compiler@22.0.0-next.1)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@22.0.0-next.1(@angular/animations@22.0.0-next.1(@angular/core@22.0.0-next.1(@angular/compiler@22.0.0-next.1)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@22.0.0-next.1(@angular/core@22.0.0-next.1(@angular/compiler@22.0.0-next.1)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.1(@angular/compiler@22.0.0-next.1)(rxjs@7.8.2)(zone.js@0.16.1)))(rxjs@7.8.2) + '@angular/common': 22.0.0-next.1(@angular/core@22.0.0-next.1(@angular/compiler@22.0.0-next.1)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2) + '@angular/core': 22.0.0-next.1(@angular/compiler@22.0.0-next.1)(rxjs@7.8.2)(zone.js@0.16.1) + '@angular/forms': 22.0.0-next.1(@angular/common@22.0.0-next.1(@angular/core@22.0.0-next.1(@angular/compiler@22.0.0-next.1)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.1(@angular/compiler@22.0.0-next.1)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@22.0.0-next.1(@angular/animations@22.0.0-next.1(@angular/core@22.0.0-next.1(@angular/compiler@22.0.0-next.1)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@22.0.0-next.1(@angular/core@22.0.0-next.1(@angular/compiler@22.0.0-next.1)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.1(@angular/compiler@22.0.0-next.1)(rxjs@7.8.2)(zone.js@0.16.1)))(rxjs@7.8.2) + '@angular/platform-browser': 22.0.0-next.1(@angular/animations@22.0.0-next.1(@angular/core@22.0.0-next.1(@angular/compiler@22.0.0-next.1)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@22.0.0-next.1(@angular/core@22.0.0-next.1(@angular/compiler@22.0.0-next.1)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.1(@angular/compiler@22.0.0-next.1)(rxjs@7.8.2)(zone.js@0.16.1)) rxjs: 7.8.2 tslib: 2.8.1 - '@angular/ng-dev@https://codeload.github.com/angular/dev-infra-private-ng-dev-builds/tar.gz/610c7c10ab750bfe5688581d6d5ec11114048f35(@modelcontextprotocol/sdk@1.27.1(zod@4.3.6))': + '@angular/ng-dev@https://codeload.github.com/angular/dev-infra-private-ng-dev-builds/tar.gz/06cf48df3a70d5a314336359dd47722724f69439(@modelcontextprotocol/sdk@1.27.1(zod@4.3.6))': dependencies: '@actions/core': 3.0.0 - '@conventional-changelog/git-client': 1.0.1(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.3.0) + '@conventional-changelog/git-client': 2.6.0(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.3.0) '@google-cloud/spanner': 8.0.0(supports-color@10.2.2) '@google/genai': 1.43.0(@modelcontextprotocol/sdk@1.27.1(zod@4.3.6))(bufferutil@4.1.0)(supports-color@10.2.2)(utf-8-validate@6.0.6) '@inquirer/prompts': 8.3.0(@types/node@24.11.0) @@ -8580,7 +8572,7 @@ snapshots: cli-progress: 3.12.0 conventional-commits-filter: 5.0.0 conventional-commits-parser: 6.3.0 - ejs: 4.0.1 + ejs: 5.0.1 encoding: 0.1.13 fast-glob: 3.3.3 firebase: 12.10.0 @@ -8606,35 +8598,35 @@ snapshots: - '@modelcontextprotocol/sdk' - '@react-native-async-storage/async-storage' - '@angular/platform-browser@22.0.0-next.0(@angular/animations@22.0.0-next.0(@angular/core@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@22.0.0-next.0(@angular/core@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(rxjs@7.8.2)(zone.js@0.16.1))': + '@angular/platform-browser@22.0.0-next.1(@angular/animations@22.0.0-next.1(@angular/core@22.0.0-next.1(@angular/compiler@22.0.0-next.1)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@22.0.0-next.1(@angular/core@22.0.0-next.1(@angular/compiler@22.0.0-next.1)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.1(@angular/compiler@22.0.0-next.1)(rxjs@7.8.2)(zone.js@0.16.1))': dependencies: - '@angular/common': 22.0.0-next.0(@angular/core@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2) - '@angular/core': 22.0.0-next.0(@angular/compiler@22.0.0-next.0)(rxjs@7.8.2)(zone.js@0.16.1) + '@angular/common': 22.0.0-next.1(@angular/core@22.0.0-next.1(@angular/compiler@22.0.0-next.1)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2) + '@angular/core': 22.0.0-next.1(@angular/compiler@22.0.0-next.1)(rxjs@7.8.2)(zone.js@0.16.1) tslib: 2.8.1 optionalDependencies: - '@angular/animations': 22.0.0-next.0(@angular/core@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(rxjs@7.8.2)(zone.js@0.16.1)) + '@angular/animations': 22.0.0-next.1(@angular/core@22.0.0-next.1(@angular/compiler@22.0.0-next.1)(rxjs@7.8.2)(zone.js@0.16.1)) - '@angular/platform-server@22.0.0-next.0(@angular/common@22.0.0-next.0(@angular/core@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/compiler@22.0.0-next.0)(@angular/core@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@22.0.0-next.0(@angular/animations@22.0.0-next.0(@angular/core@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@22.0.0-next.0(@angular/core@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(rxjs@7.8.2)(zone.js@0.16.1)))(rxjs@7.8.2)': + '@angular/platform-server@22.0.0-next.1(@angular/common@22.0.0-next.1(@angular/core@22.0.0-next.1(@angular/compiler@22.0.0-next.1)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/compiler@22.0.0-next.1)(@angular/core@22.0.0-next.1(@angular/compiler@22.0.0-next.1)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@22.0.0-next.1(@angular/animations@22.0.0-next.1(@angular/core@22.0.0-next.1(@angular/compiler@22.0.0-next.1)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@22.0.0-next.1(@angular/core@22.0.0-next.1(@angular/compiler@22.0.0-next.1)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.1(@angular/compiler@22.0.0-next.1)(rxjs@7.8.2)(zone.js@0.16.1)))(rxjs@7.8.2)': dependencies: - '@angular/common': 22.0.0-next.0(@angular/core@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2) - '@angular/compiler': 22.0.0-next.0 - '@angular/core': 22.0.0-next.0(@angular/compiler@22.0.0-next.0)(rxjs@7.8.2)(zone.js@0.16.1) - '@angular/platform-browser': 22.0.0-next.0(@angular/animations@22.0.0-next.0(@angular/core@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@22.0.0-next.0(@angular/core@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(rxjs@7.8.2)(zone.js@0.16.1)) + '@angular/common': 22.0.0-next.1(@angular/core@22.0.0-next.1(@angular/compiler@22.0.0-next.1)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2) + '@angular/compiler': 22.0.0-next.1 + '@angular/core': 22.0.0-next.1(@angular/compiler@22.0.0-next.1)(rxjs@7.8.2)(zone.js@0.16.1) + '@angular/platform-browser': 22.0.0-next.1(@angular/animations@22.0.0-next.1(@angular/core@22.0.0-next.1(@angular/compiler@22.0.0-next.1)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@22.0.0-next.1(@angular/core@22.0.0-next.1(@angular/compiler@22.0.0-next.1)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.1(@angular/compiler@22.0.0-next.1)(rxjs@7.8.2)(zone.js@0.16.1)) rxjs: 7.8.2 tslib: 2.8.1 xhr2: 0.2.1 - '@angular/router@22.0.0-next.0(@angular/common@22.0.0-next.0(@angular/core@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@22.0.0-next.0(@angular/animations@22.0.0-next.0(@angular/core@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@22.0.0-next.0(@angular/core@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(rxjs@7.8.2)(zone.js@0.16.1)))(rxjs@7.8.2)': + '@angular/router@22.0.0-next.1(@angular/common@22.0.0-next.1(@angular/core@22.0.0-next.1(@angular/compiler@22.0.0-next.1)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.1(@angular/compiler@22.0.0-next.1)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@22.0.0-next.1(@angular/animations@22.0.0-next.1(@angular/core@22.0.0-next.1(@angular/compiler@22.0.0-next.1)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@22.0.0-next.1(@angular/core@22.0.0-next.1(@angular/compiler@22.0.0-next.1)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.1(@angular/compiler@22.0.0-next.1)(rxjs@7.8.2)(zone.js@0.16.1)))(rxjs@7.8.2)': dependencies: - '@angular/common': 22.0.0-next.0(@angular/core@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2) - '@angular/core': 22.0.0-next.0(@angular/compiler@22.0.0-next.0)(rxjs@7.8.2)(zone.js@0.16.1) - '@angular/platform-browser': 22.0.0-next.0(@angular/animations@22.0.0-next.0(@angular/core@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@22.0.0-next.0(@angular/core@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(rxjs@7.8.2)(zone.js@0.16.1)) + '@angular/common': 22.0.0-next.1(@angular/core@22.0.0-next.1(@angular/compiler@22.0.0-next.1)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2) + '@angular/core': 22.0.0-next.1(@angular/compiler@22.0.0-next.1)(rxjs@7.8.2)(zone.js@0.16.1) + '@angular/platform-browser': 22.0.0-next.1(@angular/animations@22.0.0-next.1(@angular/core@22.0.0-next.1(@angular/compiler@22.0.0-next.1)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@22.0.0-next.1(@angular/core@22.0.0-next.1(@angular/compiler@22.0.0-next.1)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.1(@angular/compiler@22.0.0-next.1)(rxjs@7.8.2)(zone.js@0.16.1)) rxjs: 7.8.2 tslib: 2.8.1 - '@angular/service-worker@22.0.0-next.0(@angular/core@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2)': + '@angular/service-worker@22.0.0-next.1(@angular/core@22.0.0-next.1(@angular/compiler@22.0.0-next.1)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2)': dependencies: - '@angular/core': 22.0.0-next.0(@angular/compiler@22.0.0-next.0)(rxjs@7.8.2)(zone.js@0.16.1) + '@angular/core': 22.0.0-next.1(@angular/compiler@22.0.0-next.1)(rxjs@7.8.2)(zone.js@0.16.1) rxjs: 7.8.2 tslib: 2.8.1 @@ -9338,9 +9330,10 @@ snapshots: '@colors/colors@1.5.0': {} - '@conventional-changelog/git-client@1.0.1(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.3.0)': + '@conventional-changelog/git-client@2.6.0(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.3.0)': dependencies: - '@types/semver': 7.7.1 + '@simple-libs/child-process-utils': 1.0.2 + '@simple-libs/stream-utils': 1.2.0 semver: 7.7.4 optionalDependencies: conventional-commits-filter: 5.0.0 @@ -11052,6 +11045,10 @@ snapshots: '@sigstore/core': 3.1.0 '@sigstore/protobuf-specs': 0.5.0 + '@simple-libs/child-process-utils@1.0.2': + dependencies: + '@simple-libs/stream-utils': 1.2.0 + '@simple-libs/stream-utils@1.2.0': {} '@sindresorhus/is@4.6.0': {} @@ -12800,9 +12797,7 @@ snapshots: ee-first@1.1.1: {} - ejs@4.0.1: - dependencies: - jake: 10.9.4 + ejs@5.0.1: {} electron-to-chromium@1.5.307: {} @@ -13335,10 +13330,6 @@ snapshots: dependencies: flat-cache: 4.0.1 - filelist@1.0.6: - dependencies: - minimatch: 5.1.9 - fill-range@7.1.1: dependencies: to-regex-range: 5.0.1 @@ -14189,12 +14180,6 @@ snapshots: optionalDependencies: '@pkgjs/parseargs': 0.11.0 - jake@10.9.4: - dependencies: - async: 3.2.6 - filelist: 1.0.6 - picocolors: 1.1.1 - jasmine-core@4.6.1: {} jasmine-core@6.1.0: {} @@ -14679,10 +14664,6 @@ snapshots: dependencies: brace-expansion: 1.1.12 - minimatch@5.1.9: - dependencies: - brace-expansion: 2.0.2 - minimatch@7.4.6: dependencies: brace-expansion: 2.0.2 @@ -14795,10 +14776,10 @@ snapshots: netmask@2.0.2: {} - ng-packagr@22.0.0-next.0(@angular/compiler-cli@22.0.0-next.0(@angular/compiler@22.0.0-next.0)(typescript@6.0.1-rc))(tslib@2.8.1)(typescript@6.0.1-rc): + ng-packagr@22.0.0-next.0(@angular/compiler-cli@22.0.0-next.1(@angular/compiler@22.0.0-next.1)(typescript@6.0.1-rc))(tslib@2.8.1)(typescript@6.0.1-rc): dependencies: '@ampproject/remapping': 2.3.0 - '@angular/compiler-cli': 22.0.0-next.0(@angular/compiler@22.0.0-next.0)(typescript@6.0.1-rc) + '@angular/compiler-cli': 22.0.0-next.1(@angular/compiler@22.0.0-next.1)(typescript@6.0.1-rc) '@rollup/plugin-json': 6.1.0(rollup@4.59.0) '@rollup/wasm-node': 4.59.0 ajv: 8.18.0 diff --git a/tests/e2e/ng-snapshot/package.json b/tests/e2e/ng-snapshot/package.json index d5b6a1741a24..71a9c8a9f605 100644 --- a/tests/e2e/ng-snapshot/package.json +++ b/tests/e2e/ng-snapshot/package.json @@ -2,21 +2,21 @@ "description": "snapshot versions of Angular for e2e testing", "private": true, "dependencies": { - "@angular/animations": "github:angular/animations-builds#6deb7836116872ec41c33851cf12be152fc4164c", - "@angular/cdk": "github:angular/cdk-builds#0d40ef4cfe8c15d6a996389f4528b1eb1b933f77", - "@angular/common": "github:angular/common-builds#5a4bc97e0af211080fadb8a32680227ac0467c4f", - "@angular/compiler": "github:angular/compiler-builds#8fd4791a982d28e5822cbc3a609a4adb0105b6d5", - "@angular/compiler-cli": "github:angular/compiler-cli-builds#06b0ed420505ecd5d9bf1de3ec39be772e9c1a1c", - "@angular/core": "github:angular/core-builds#ddb58f19eba430e7977608d632ddc50a6eac9abe", - "@angular/forms": "github:angular/forms-builds#cb11b70e58365a5f490fcdb153417d1cd15ef706", - "@angular/language-service": "github:angular/language-service-builds#e03bcbccc148069234096f18f30506291c86aa97", - "@angular/localize": "github:angular/localize-builds#b14e25d5763e8b2c01968000980ec968f6b1fd6e", - "@angular/material": "github:angular/material-builds#26f37cd9237322c71232b0fbcf63f1359e7af56a", - "@angular/material-moment-adapter": "github:angular/material-moment-adapter-builds#8143927f746aee7521769a12c17f2f884066bc13", - "@angular/platform-browser": "github:angular/platform-browser-builds#78bbfc55af2955bf6ecaf1aeb0281afe0bfd0ef4", - "@angular/platform-browser-dynamic": "github:angular/platform-browser-dynamic-builds#d14c110bb81d14b3379d8835831bbaabc6709058", - "@angular/platform-server": "github:angular/platform-server-builds#b296a99ed401f3af812f60e05e6e5766efaed354", - "@angular/router": "github:angular/router-builds#f614cde22d617a05cd6f0864dfacf95ba3b9b5e3", - "@angular/service-worker": "github:angular/service-worker-builds#7a74790699461d33ace5c675bfde919fc46ae744" + "@angular/animations": "github:angular/animations-builds#0e45ecb1d60e9b946f2bf93faa12ebc21f8fff0e", + "@angular/cdk": "github:angular/cdk-builds#0bef6f6275412065b0abf224163ab66c2fb69ca9", + "@angular/common": "github:angular/common-builds#9e790ffe08aac699bca3dbdf50f559eca77ceda3", + "@angular/compiler": "github:angular/compiler-builds#1178d70490860593d91d77d11241ba3e6e29d3a8", + "@angular/compiler-cli": "github:angular/compiler-cli-builds#08610db44eeedf16d1aeb66a913fbb5d6576bca0", + "@angular/core": "github:angular/core-builds#e746948282798e46d64cf1c7d38c97143cd4349a", + "@angular/forms": "github:angular/forms-builds#96b66c58f03894609955c18646531fa719816d17", + "@angular/language-service": "github:angular/language-service-builds#30a725ed6033a27ec81501e6c2c62ad9fd095fdf", + "@angular/localize": "github:angular/localize-builds#489b1edae70e2995a60e488dc76a79b38617865e", + "@angular/material": "github:angular/material-builds#db331c86faf850c670b17f8fe6b8bbcc5f86a74e", + "@angular/material-moment-adapter": "github:angular/material-moment-adapter-builds#34507e80d56bd16ddaec96b6792269ad675ecc0f", + "@angular/platform-browser": "github:angular/platform-browser-builds#7f7a34cde0324bddbc1032a5d21a79dbb6b033f2", + "@angular/platform-browser-dynamic": "github:angular/platform-browser-dynamic-builds#37d5eb01f04549ce90cee0ef2556a201f3642e3a", + "@angular/platform-server": "github:angular/platform-server-builds#764b1700086c1ea66fc8d59bb076d6e644ecf119", + "@angular/router": "github:angular/router-builds#403aec2c14b0c2fb9557536b9f54c90ff2739b7b", + "@angular/service-worker": "github:angular/service-worker-builds#52b4f137777331ef154344d6b2414d50adfc58e2" } } From 231f5798b2ccfc6327d7cdc820f837bc8fa79d7c Mon Sep 17 00:00:00 2001 From: Alan Agius <17563226+alan-agius4@users.noreply.github.com> Date: Tue, 10 Mar 2026 13:39:36 +0000 Subject: [PATCH 124/226] refactor: remove `@angular-devkit/core` logger and its dependencies from the e2e runner This logger was unused. --- tests/BUILD.bazel | 3 --- tests/e2e_runner.ts | 19 +------------------ 2 files changed, 1 insertion(+), 21 deletions(-) diff --git a/tests/BUILD.bazel b/tests/BUILD.bazel index 7c61901ecb60..651eccb6dc43 100644 --- a/tests/BUILD.bazel +++ b/tests/BUILD.bazel @@ -19,8 +19,6 @@ ts_project( deps = [ "//:node_modules/@types/node", "//:node_modules/fast-glob", - "//packages/angular_devkit/core", - "//packages/angular_devkit/core/node", "//tests/e2e/utils", ], ) @@ -31,7 +29,6 @@ rollup.rollup( srcs = [ "rollup.config.mjs", ":runner", - "//:node_modules/@rollup/plugin-alias", "//:node_modules/@rollup/plugin-commonjs", "//:node_modules/@rollup/plugin-json", "//:node_modules/@rollup/plugin-node-resolve", diff --git a/tests/e2e_runner.ts b/tests/e2e_runner.ts index c7a672161b7a..f77d6e367e9b 100644 --- a/tests/e2e_runner.ts +++ b/tests/e2e_runner.ts @@ -1,5 +1,4 @@ import { parseArgs, styleText } from 'node:util'; -import { createConsoleLogger } from '../packages/angular_devkit/core/node'; import glob from 'fast-glob'; import * as path from 'node:path'; import * as fs from 'node:fs'; @@ -110,19 +109,6 @@ if (process.env.CHROME_BIN) { process.env.PATH = process.env.PATH! + delimiter + dirname(process.env.CHROME_BIN!); } -const logger = createConsoleLogger(argv.verbose, process.stdout, process.stderr, { - info: (s) => s, - debug: (s) => s, - warn: (s) => styleText(['bold', 'yellow'], s), - error: (s) => styleText(['bold', 'red'], s), - fatal: (s) => styleText(['bold', 'red'], s), -}); - -const logStack = [logger]; -function lastLogger() { - return logStack.at(-1)!; -} - // Under bazel the compiled file (.js) and types (.d.ts) are available. const SRC_FILE_EXT_RE = /\.js$/; const testGlob = (process.env.TESTBRIDGE_TEST_ONLY ?? argv.glob).replace(/\.ts$/, '.js'); @@ -303,8 +289,7 @@ async function runSteps( printHeader(name, stepIndex, steps.length, type); - // Run the test function with the current file on the logStack. - logStack.push(lastLogger().createChild(absoluteName)); + // Run the test function with the current file. try { await run(absoluteName); } catch (e) { @@ -312,8 +297,6 @@ async function runSteps( console.error(styleText(['red'], `${capsType} "${name}" failed...`)); throw e; - } finally { - logStack.pop(); } console.log('----'); From af2c7e9444fba81d3b1fd2d37dc4412f8305b5ed Mon Sep 17 00:00:00 2001 From: Alan Agius <17563226+alan-agius4@users.noreply.github.com> Date: Tue, 10 Mar 2026 12:21:07 +0000 Subject: [PATCH 125/226] feat(@angular/build): rename `experimentalPlatform` to `platform` in application builder The `experimentalPlatform` option within the `ssr` option of the application builder has been renamed to `platform`. This change promotes the feature from experimental status while maintaining its functionality for specifying the target server platform. A migration has been added to automatically update existing configuration to the new option name. --- .../build/src/builders/application/options.ts | 6 +- .../src/builders/application/schema.json | 4 +- .../tools/esbuild/application-code-bundle.ts | 12 +- .../migrations/migration-collection.json | 7 +- .../update-workspace-config/migration.ts | 47 ++++++++ .../update-workspace-config/migration_spec.ts | 103 ++++++++++++++++++ ...tes-output-mode-server-platform-neutral.ts | 2 +- 7 files changed, 168 insertions(+), 13 deletions(-) create mode 100644 packages/schematics/angular/migrations/update-workspace-config/migration.ts create mode 100644 packages/schematics/angular/migrations/update-workspace-config/migration_spec.ts diff --git a/packages/angular/build/src/builders/application/options.ts b/packages/angular/build/src/builders/application/options.ts index 4f0d1295a7e3..99d5d67efbfd 100644 --- a/packages/angular/build/src/builders/application/options.ts +++ b/packages/angular/build/src/builders/application/options.ts @@ -28,11 +28,11 @@ import { getProjectRootPaths, normalizeDirectoryPath } from '../../utils/project import { addTrailingSlash, joinUrlParts, stripLeadingSlash } from '../../utils/url'; import { Schema as ApplicationBuilderOptions, - ExperimentalPlatform, I18NTranslation, OutputHashing, OutputMode, OutputPathClass, + Platform, } from './schema'; /** @@ -292,11 +292,11 @@ export async function normalizeOptions( if (options.ssr === true) { ssrOptions = {}; } else if (typeof options.ssr === 'object') { - const { entry, experimentalPlatform = ExperimentalPlatform.Node } = options.ssr; + const { entry, platform = Platform.Node } = options.ssr; ssrOptions = { entry: entry && path.join(workspaceRoot, entry), - platform: experimentalPlatform, + platform, }; } diff --git a/packages/angular/build/src/builders/application/schema.json b/packages/angular/build/src/builders/application/schema.json index 5498a21fe004..8bf30aec8298 100644 --- a/packages/angular/build/src/builders/application/schema.json +++ b/packages/angular/build/src/builders/application/schema.json @@ -603,8 +603,8 @@ "type": "string", "description": "The server entry-point that when executed will spawn the web server." }, - "experimentalPlatform": { - "description": "Specifies the platform for which the server bundle is generated. This affects the APIs and modules available in the server-side code. \n\n- `node`: (Default) Generates a bundle optimized for Node.js environments. \n- `neutral`: Generates a platform-neutral bundle suitable for environments like edge workers, and other serverless platforms. This option avoids using Node.js-specific APIs, making the bundle more portable. \n\nPlease note that this feature does not provide polyfills for Node.js modules. Additionally, it is experimental, and the schematics may undergo changes in future versions.", + "platform": { + "description": "Specifies the platform for which the server bundle is generated. This affects the APIs and modules available in the server-side code. \n\n- `node`: (Default) Generates a bundle optimized for Node.js environments. \n- `neutral`: Generates a platform-neutral bundle suitable for environments like edge workers, and other serverless platforms. This option avoids using Node.js-specific APIs, making the bundle more portable. \n\nPlease note that this feature does not provide polyfills for Node.js modules.", "default": "node", "enum": ["node", "neutral"] } diff --git a/packages/angular/build/src/tools/esbuild/application-code-bundle.ts b/packages/angular/build/src/tools/esbuild/application-code-bundle.ts index 257a98fc0f45..08da63744c97 100644 --- a/packages/angular/build/src/tools/esbuild/application-code-bundle.ts +++ b/packages/angular/build/src/tools/esbuild/application-code-bundle.ts @@ -6,12 +6,12 @@ * found in the LICENSE file at https://angular.dev/license */ -import type { BuildOptions, PartialMessage, Plugin } from 'esbuild'; +import type { BuildOptions, Plugin } from 'esbuild'; import assert from 'node:assert'; import { createHash } from 'node:crypto'; import { extname, relative } from 'node:path'; import type { NormalizedApplicationBuildOptions } from '../../builders/application/options'; -import { ExperimentalPlatform } from '../../builders/application/schema'; +import { Platform } from '../../builders/application/schema'; import { allowMangle } from '../../utils/environment-options'; import { toPosixPath } from '../../utils/path'; import { @@ -158,7 +158,7 @@ export function createServerPolyfillBundleOptions( ): BundlerOptionsFactory | undefined { const serverPolyfills: string[] = []; const polyfillsFromConfig = new Set(options.polyfills); - const isNodePlatform = options.ssrOptions?.platform !== ExperimentalPlatform.Neutral; + const isNodePlatform = options.ssrOptions?.platform !== Platform.Neutral; if (!isZonelessApp(options.polyfills)) { serverPolyfills.push(isNodePlatform ? 'zone.js/node' : 'zone.js'); @@ -295,7 +295,7 @@ export function createServerMainCodeBundleOptions( // Mark manifest and polyfills file as external as these are generated by a different bundle step. (buildOptions.external ??= []).push(...SERVER_GENERATED_EXTERNALS); - const isNodePlatform = options.ssrOptions?.platform !== ExperimentalPlatform.Neutral; + const isNodePlatform = options.ssrOptions?.platform !== Platform.Neutral; if (!isNodePlatform) { // `@angular/platform-server` lazily depends on `xhr2` for XHR usage with the HTTP client. @@ -387,7 +387,7 @@ export function createSsrEntryCodeBundleOptions( const pluginOptions = createCompilerPluginOptions(options, sourceFileCache, loadResultCache); const ssrEntryNamespace = 'angular:ssr-entry'; const ssrInjectManifestNamespace = 'angular:ssr-entry-inject-manifest'; - const isNodePlatform = options.ssrOptions?.platform !== ExperimentalPlatform.Neutral; + const isNodePlatform = options.ssrOptions?.platform !== Platform.Neutral; const jsBanner: string[] = []; if (options.externalDependencies?.length) { @@ -505,7 +505,7 @@ export function createSsrEntryCodeBundleOptions( } function getEsBuildServerCommonOptions(options: NormalizedApplicationBuildOptions): BuildOptions { - const isNodePlatform = options.ssrOptions?.platform !== ExperimentalPlatform.Neutral; + const isNodePlatform = options.ssrOptions?.platform !== Platform.Neutral; const commonOptions = getEsBuildCommonOptions(options); commonOptions.define ??= {}; diff --git a/packages/schematics/angular/migrations/migration-collection.json b/packages/schematics/angular/migrations/migration-collection.json index 72d2cdef4030..3745792eb6cc 100644 --- a/packages/schematics/angular/migrations/migration-collection.json +++ b/packages/schematics/angular/migrations/migration-collection.json @@ -2,7 +2,7 @@ "encapsulation": false, "schematics": { "use-application-builder": { - "version": "21.0.0", + "version": "22.0.0", "factory": "./use-application-builder/migration", "description": "Migrate application projects to the new build system. Application projects that are using the '@angular-devkit/build-angular' package's 'browser' and/or 'browser-esbuild' builders will be migrated to use the new 'application' builder. You can read more about this, including known issues and limitations, here: https://angular.dev/tools/cli/build-system-migration", "optional": true, @@ -13,6 +13,11 @@ "version": "21.0.0", "factory": "./karma/migration", "description": "Remove any karma configuration files that only contain the default content. The default configuration is automatically available without a specific project file." + }, + "update-workspace-config": { + "version": "22.0.0", + "factory": "./update-workspace-config/migration", + "description": "Update the angular workspace configuration." } } } diff --git a/packages/schematics/angular/migrations/update-workspace-config/migration.ts b/packages/schematics/angular/migrations/update-workspace-config/migration.ts new file mode 100644 index 000000000000..3abd89d35a80 --- /dev/null +++ b/packages/schematics/angular/migrations/update-workspace-config/migration.ts @@ -0,0 +1,47 @@ +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.dev/license + */ + +import { isJsonObject } from '@angular-devkit/core'; +import { Rule } from '@angular-devkit/schematics'; +import { allTargetOptions, updateWorkspace } from '../../utility/workspace'; +import { Builders, ProjectType } from '../../utility/workspace-models'; + +/** + * Migration to update the angular workspace configuration. + */ +export default function (): Rule { + return updateWorkspace((workspace) => { + for (const project of workspace.projects.values()) { + if (project.extensions['projectType'] !== ProjectType.Application) { + continue; + } + + for (const target of project.targets.values()) { + if ( + target.builder !== Builders.Application && + target.builder !== Builders.BuildApplication + ) { + continue; + } + + for (const [, options] of allTargetOptions(target)) { + const ssr = options['ssr']; + if (!ssr || !isJsonObject(ssr)) { + continue; + } + + const platform = ssr['experimentalPlatform']; + if (platform) { + ssr['platform'] = platform; + delete ssr['experimentalPlatform']; + } + } + } + } + }); +} diff --git a/packages/schematics/angular/migrations/update-workspace-config/migration_spec.ts b/packages/schematics/angular/migrations/update-workspace-config/migration_spec.ts new file mode 100644 index 000000000000..a56247cf3a1a --- /dev/null +++ b/packages/schematics/angular/migrations/update-workspace-config/migration_spec.ts @@ -0,0 +1,103 @@ +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.dev/license + */ + +import { EmptyTree } from '@angular-devkit/schematics'; +import { SchematicTestRunner, UnitTestTree } from '@angular-devkit/schematics/testing'; +import { Builders, ProjectType } from '../../utility/workspace-models'; + +describe('Migration to update the angular workspace configuration', () => { + const schematicName = 'update-workspace-config'; + const schematicRunner = new SchematicTestRunner( + 'migrations', + require.resolve('../migration-collection.json'), + ); + + let tree: UnitTestTree; + beforeEach(() => { + tree = new UnitTestTree(new EmptyTree()); + }); + + it('should rename experimentalPlatform to platform in application builder', async () => { + const angularConfig = { + version: 1, + projects: { + app: { + root: '', + sourceRoot: 'src', + projectType: ProjectType.Application, + prefix: 'app', + architect: { + build: { + builder: Builders.Application, + options: { + ssr: { + entry: 'src/server.ts', + experimentalPlatform: 'neutral', + }, + }, + configurations: { + production: { + ssr: { + experimentalPlatform: 'node', + }, + }, + }, + }, + }, + }, + }, + }; + + tree.create('/angular.json', JSON.stringify(angularConfig, undefined, 2)); + + const newTree = await schematicRunner.runSchematic(schematicName, {}, tree); + // eslint-disable-next-line @typescript-eslint/no-explicit-any + const config = newTree.readJson('/angular.json') as any; + const options = config.projects.app.architect.build.options; + const prodOptions = config.projects.app.architect.build.configurations.production; + + expect(options.ssr.platform).toBe('neutral'); + expect(options.ssr.experimentalPlatform).toBeUndefined(); + expect(prodOptions.ssr.platform).toBe('node'); + expect(prodOptions.ssr.experimentalPlatform).toBeUndefined(); + }); + + it('should not change other builders', async () => { + const angularConfig = { + version: 1, + projects: { + app: { + root: '', + sourceRoot: 'src', + projectType: ProjectType.Application, + prefix: 'app', + architect: { + build: { + builder: Builders.Browser, + options: { + ssr: { + experimentalPlatform: 'neutral', + }, + }, + }, + }, + }, + }, + }; + + tree.create('/angular.json', JSON.stringify(angularConfig, undefined, 2)); + + const newTree = await schematicRunner.runSchematic(schematicName, {}, tree); + // eslint-disable-next-line @typescript-eslint/no-explicit-any + const config = newTree.readJson('/angular.json') as any; + const options = config.projects.app.architect.build.options; + + expect(options.ssr.experimentalPlatform).toBe('neutral'); + expect(options.ssr.platform).toBeUndefined(); + }); +}); diff --git a/tests/e2e/tests/build/server-rendering/server-routes-output-mode-server-platform-neutral.ts b/tests/e2e/tests/build/server-rendering/server-routes-output-mode-server-platform-neutral.ts index 6fdd1998cdd2..dff15d055943 100644 --- a/tests/e2e/tests/build/server-rendering/server-routes-output-mode-server-platform-neutral.ts +++ b/tests/e2e/tests/build/server-rendering/server-routes-output-mode-server-platform-neutral.ts @@ -95,7 +95,7 @@ export default async function () { await updateJsonFile('angular.json', (json) => { const buildTarget = json['projects']['test-project']['architect']['build']; const options = buildTarget['options']; - options['ssr']['experimentalPlatform'] = 'neutral'; + options['ssr']['platform'] = 'neutral'; options['outputMode'] = 'server'; options['security'] ??= {}; options['security']['allowedHosts'] = ['localhost']; From b3d838dfdb2adc3bd035b495f7f9457d742d73a4 Mon Sep 17 00:00:00 2001 From: Alan Agius <17563226+alan-agius4@users.noreply.github.com> Date: Tue, 10 Mar 2026 14:41:25 +0000 Subject: [PATCH 126/226] fix(@schematics/angular): replace deprecated `ChangeDetectionStrategy.Default` with `Eager` Updates the component schematic to use `ChangeDetectionStrategy.Eager` as the default strategy and updates the allowed enum values in the schema, as `ChangeDetectionStrategy.Default` is now deprecated. --- packages/schematics/angular/component/index_spec.ts | 2 +- packages/schematics/angular/component/schema.json | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/schematics/angular/component/index_spec.ts b/packages/schematics/angular/component/index_spec.ts index 3aea03309e12..5bff59152715 100644 --- a/packages/schematics/angular/component/index_spec.ts +++ b/packages/schematics/angular/component/index_spec.ts @@ -23,7 +23,7 @@ describe('Component Schematic', () => { inlineStyle: false, inlineTemplate: false, displayBlock: false, - changeDetection: ChangeDetection.Default, + changeDetection: ChangeDetection.Eager, style: Style.Css, type: 'Component', skipTests: false, diff --git a/packages/schematics/angular/component/schema.json b/packages/schematics/angular/component/schema.json index eaa2c95f197b..a2c04647abf5 100644 --- a/packages/schematics/angular/component/schema.json +++ b/packages/schematics/angular/component/schema.json @@ -65,9 +65,9 @@ }, "changeDetection": { "description": "Configures the change detection strategy for the component.", - "enum": ["Default", "OnPush"], + "enum": ["Eager", "OnPush"], "type": "string", - "default": "Default", + "default": "Eager", "alias": "c" }, "prefix": { From 93c3eb8fb2a0d531f18779152b0a62e9b73dbb23 Mon Sep 17 00:00:00 2001 From: Alan Agius <17563226+alan-agius4@users.noreply.github.com> Date: Tue, 10 Mar 2026 15:46:23 +0000 Subject: [PATCH 127/226] fix(@angular/cli): update zoneless migration tool to handle `ChangeDetectionStrategy.Eager` `ChangeDetectionStrategy.Default` is deprecated. This update ensures the zoneless migration tool correctly identifies, handles, and prompts for the new `ChangeDetectionStrategy.Eager` strategy in component metadata. --- .../migrate-single-file.ts | 14 +++++--------- .../migrate-single-file_spec.ts | 4 ++-- .../mcp/tools/onpush-zoneless-migration/prompts.ts | 8 ++++---- .../zoneless-migration.ts | 3 +-- 4 files changed, 12 insertions(+), 17 deletions(-) diff --git a/packages/angular/cli/src/commands/mcp/tools/onpush-zoneless-migration/migrate-single-file.ts b/packages/angular/cli/src/commands/mcp/tools/onpush-zoneless-migration/migrate-single-file.ts index 1a1bc2c58f34..afd6316da83d 100644 --- a/packages/angular/cli/src/commands/mcp/tools/onpush-zoneless-migration/migrate-single-file.ts +++ b/packages/angular/cli/src/commands/mcp/tools/onpush-zoneless-migration/migrate-single-file.ts @@ -16,6 +16,8 @@ import { sendDebugMessage } from './send-debug-message'; import { getImportSpecifier, loadTypescript } from './ts-utils'; import type { MigrationResponse } from './types'; +const supportedStrategies: ReadonlySet<string> = new Set(['OnPush', 'Default', 'Eager']); + export async function migrateSingleFile( sourceFile: SourceFile, extras: RequestHandlerExtra<ServerRequest, ServerNotification>, @@ -31,7 +33,7 @@ export async function migrateSingleFile( return unsupportedZoneUseResponse; } - let detectedStrategy: 'OnPush' | 'Default' | undefined; + let detectedStrategy: string | undefined; let hasComponentDecorator = false; const componentSpecifier = await getImportSpecifier(sourceFile, '@angular/core', 'Component'); @@ -63,7 +65,7 @@ export async function migrateSingleFile( prop.initializer.expression.getText(sourceFile) === 'ChangeDetectionStrategy' ) { const strategy = prop.initializer.name.text; - if (strategy === 'OnPush' || strategy === 'Default') { + if (supportedStrategies.has(strategy)) { detectedStrategy = strategy; return; @@ -77,13 +79,7 @@ export async function migrateSingleFile( ts.forEachChild(node, visit); }); - if ( - !hasComponentDecorator || - // component uses OnPush. We don't have anything more to do here. - detectedStrategy === 'OnPush' || - // Explicit default strategy, assume there's a reason for it (already migrated, or is a library that hosts Default components) and skip. - detectedStrategy === 'Default' - ) { + if (!hasComponentDecorator || (detectedStrategy && supportedStrategies.has(detectedStrategy))) { sendDebugMessage( `Component decorator found with strategy: ${detectedStrategy} in file: ${sourceFile.fileName}. Skipping migration for file.`, extras, diff --git a/packages/angular/cli/src/commands/mcp/tools/onpush-zoneless-migration/migrate-single-file_spec.ts b/packages/angular/cli/src/commands/mcp/tools/onpush-zoneless-migration/migrate-single-file_spec.ts index 20ed43626639..442dc2c68378 100644 --- a/packages/angular/cli/src/commands/mcp/tools/onpush-zoneless-migration/migrate-single-file_spec.ts +++ b/packages/angular/cli/src/commands/mcp/tools/onpush-zoneless-migration/migrate-single-file_spec.ts @@ -85,7 +85,7 @@ describe('migrateSingleFile', () => { expect(result).toBeNull(); }); - it('should return null if component has ChangeDetectionStrategy.Default', async () => { + it('should return null if component has ChangeDetectionStrategy.Eager', async () => { const fileName = 'app.component.ts'; const content = ` import { Component, ChangeDetectionStrategy } from '@angular/core'; @@ -93,7 +93,7 @@ describe('migrateSingleFile', () => { @Component({ selector: 'app-root', template: 'Hello', - changeDetection: ChangeDetectionStrategy.Default, + changeDetection: ChangeDetectionStrategy.Eager, }) export class AppComponent {} `; diff --git a/packages/angular/cli/src/commands/mcp/tools/onpush-zoneless-migration/prompts.ts b/packages/angular/cli/src/commands/mcp/tools/onpush-zoneless-migration/prompts.ts index f4eba63ceb4c..af925bd4f70a 100644 --- a/packages/angular/cli/src/commands/mcp/tools/onpush-zoneless-migration/prompts.ts +++ b/packages/angular/cli/src/commands/mcp/tools/onpush-zoneless-migration/prompts.ts @@ -130,11 +130,11 @@ export function generateZonelessMigrationInstructionsForComponent( * **(Preferred) Convert to Signal**: The best approach is to convert the property to an Angular Signal. This is the most idiomatic and future-proof way to handle state in zoneless applications. * **(Alternative) Use \`markForCheck()\`**: If converting to a signal is too complex or would require extensive refactoring, you can instead inject \`ChangeDetectorRef\` and call \`this.cdr.markForCheck()\` immediately after the property is updated. - #### Step 2: Add \`ChangeDetectionStrategy.Default\` + #### Step 2: Add \`ChangeDetectionStrategy.Eager\` After you have refactored all necessary properties, you must update the component's decorator to explicitly set the change detection strategy. 1. Add \`ChangeDetectionStrategy\` to the import from \`@angular/core\`. - 2. In the \`@Component\` decorator, add the property \`changeDetection: ChangeDetectionStrategy.Default\`. + 2. In the \`@Component\` decorator, add the property \`changeDetection: ChangeDetectionStrategy.Eager\`. 3. Add a \`// TODO\` comment above this line explaining that the component should be fully migrated to \`OnPush\` after the application has been tested with these changes. Example: @@ -143,14 +143,14 @@ export function generateZonelessMigrationInstructionsForComponent( ... // TODO: This component has been partially migrated to be zoneless-compatible. // After testing, this should be updated to ChangeDetectionStrategy.OnPush. - changeDetection: ChangeDetectionStrategy.Default, + changeDetection: ChangeDetectionStrategy.Eager, }) \`\`\` ### IMPORTANT: Rules and Constraints You must follow these rules without exception: 1. **DO** apply one of the two refactoring strategies (signals or \`markForCheck()\`) for all relevant component properties. - 2. **DO** add \`changeDetection: ChangeDetectionStrategy.Default\` with the specified TODO comment as the final code change. + 2. **DO** add \`changeDetection: ChangeDetectionStrategy.Eager\` with the specified TODO comment as the final code change. 3. **DO NOT** use \`ChangeDetectionStrategy.OnPush\`. This will be the next step in the migration, but it is not part of this task. 4. **DO NOT** modify properties that are already signals or are used with the \`async\` pipe in the template, as they are already zoneless-compatible. 5. **DO NOT** make any changes to files other than the component file at \`${filePath}\` and its direct template/style files if necessary. diff --git a/packages/angular/cli/src/commands/mcp/tools/onpush-zoneless-migration/zoneless-migration.ts b/packages/angular/cli/src/commands/mcp/tools/onpush-zoneless-migration/zoneless-migration.ts index 065d4e28669e..28941e47b355 100644 --- a/packages/angular/cli/src/commands/mcp/tools/onpush-zoneless-migration/zoneless-migration.ts +++ b/packages/angular/cli/src/commands/mcp/tools/onpush-zoneless-migration/zoneless-migration.ts @@ -204,8 +204,7 @@ async function categorizeFile( componentTestFiles.add(sourceFile); } else if (componentSpecifier) { if ( - !content.includes('changeDetectionStrategy: ChangeDetectionStrategy.OnPush') && - !content.includes('changeDetectionStrategy: ChangeDetectionStrategy.Default') + !/changeDetectionStrategy:\s*ChangeDetectionStrategy\.(?:OnPush|Default|Eager)/.test(content) ) { filesWithComponents.add(sourceFile); } else { From f74717a43c58d740a906aa33ef6060d81cdc5a07 Mon Sep 17 00:00:00 2001 From: Alan Agius <alanagius@google.com> Date: Tue, 10 Mar 2026 20:35:38 +0100 Subject: [PATCH 128/226] ci: re-enable renovate for less package This package has been updated and fixed. --- renovate.json | 1 - 1 file changed, 1 deletion(-) diff --git a/renovate.json b/renovate.json index 8c193909dc0a..6b91ffcea750 100644 --- a/renovate.json +++ b/renovate.json @@ -2,7 +2,6 @@ "$schema": "https://docs.renovatebot.com/renovate-schema.json", "baseBranchPatterns": ["main", "21.2.x"], "extends": ["github>angular/dev-infra//renovate-presets/default.json5"], - "ignoreDeps": ["less"], "ignorePaths": ["tests/e2e/assets/**", "tests/schematics/update/packages/**"], "packageRules": [ { From 82b91f1df3403e157509876315e92ddefb6a8add Mon Sep 17 00:00:00 2001 From: Angular Robot <angular-robot@google.com> Date: Wed, 11 Mar 2026 06:18:39 +0000 Subject: [PATCH 129/226] build: update dependency @discoveryjs/json-ext to v1 See associated pull request for more information. --- packages/angular_devkit/build_angular/package.json | 2 +- pnpm-lock.yaml | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/packages/angular_devkit/build_angular/package.json b/packages/angular_devkit/build_angular/package.json index 4f9c25897e50..3820fc0b705a 100644 --- a/packages/angular_devkit/build_angular/package.json +++ b/packages/angular_devkit/build_angular/package.json @@ -20,7 +20,7 @@ "@babel/plugin-transform-runtime": "7.29.0", "@babel/preset-env": "7.29.0", "@babel/runtime": "7.28.6", - "@discoveryjs/json-ext": "0.6.3", + "@discoveryjs/json-ext": "1.0.0", "@ngtools/webpack": "workspace:0.0.0-PLACEHOLDER", "ansi-colors": "4.1.3", "autoprefixer": "10.4.27", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index ac4d14a0c58b..fcbf99be4dd7 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -596,8 +596,8 @@ importers: specifier: 7.28.6 version: 7.28.6 '@discoveryjs/json-ext': - specifier: 0.6.3 - version: 0.6.3 + specifier: 1.0.0 + version: 1.0.0 '@ngtools/webpack': specifier: workspace:0.0.0-PLACEHOLDER version: link:../../ngtools/webpack @@ -1627,8 +1627,8 @@ packages: resolution: {integrity: sha512-hauBrOdvu08vOsagkZ/Aju5XuiZx6ldsLfByg1htFeldhex+PeMrYauANzFsMJeAA0+dyPLbDoX2OYuvVoLDkQ==} engines: {node: '>= 6'} - '@discoveryjs/json-ext@0.6.3': - resolution: {integrity: sha512-4B4OijXeVNOPZlYA2oEwWOTkzyltLao+xbotHQeqN++Rv27Y6s818+n2Qkp8q+Fxhn0t/5lA5X1Mxktud8eayQ==} + '@discoveryjs/json-ext@1.0.0': + resolution: {integrity: sha512-dDlz3W405VMFO4w5kIP9DOmELBcvFQGmLoKSdIRstBDubKFYwaNHV1NnlzMCQpXQFGWVALmeMORAuiLx18AvZQ==} engines: {node: '>=14.17.0'} '@emnapi/core@1.8.1': @@ -9382,7 +9382,7 @@ snapshots: tunnel-agent: 0.6.0 uuid: 8.3.2 - '@discoveryjs/json-ext@0.6.3': {} + '@discoveryjs/json-ext@1.0.0': {} '@emnapi/core@1.8.1': dependencies: From 839c725c234b2c1c3e44d52e3a1442ad1b538be9 Mon Sep 17 00:00:00 2001 From: Alan Agius <17563226+alan-agius4@users.noreply.github.com> Date: Tue, 10 Mar 2026 12:23:53 +0000 Subject: [PATCH 130/226] fix(@angular/build): pass process environment variables to prerender workers Worker processes used for prerendering and route extraction now inherit `process.env`. This ensures that any custom environment variables required by the application are available during the server-side rendering process. Closes #32730 --- packages/angular/build/src/utils/server-rendering/prerender.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/angular/build/src/utils/server-rendering/prerender.ts b/packages/angular/build/src/utils/server-rendering/prerender.ts index d2f60744381a..f0e822eb3de9 100644 --- a/packages/angular/build/src/utils/server-rendering/prerender.ts +++ b/packages/angular/build/src/utils/server-rendering/prerender.ts @@ -228,6 +228,7 @@ async function renderPages( } as RenderWorkerData, execArgv: workerExecArgv, env: { + ...process.env, 'NG_ALLOWED_HOSTS': 'localhost', }, }); @@ -343,6 +344,7 @@ async function getAllRoutes( } as RoutesExtractorWorkerData, execArgv: workerExecArgv, env: { + ...process.env, 'NG_ALLOWED_HOSTS': 'localhost', }, }); From 63537ff6823fb16717a79d49498f63d9534f40e6 Mon Sep 17 00:00:00 2001 From: Alan Agius <17563226+alan-agius4@users.noreply.github.com> Date: Wed, 11 Mar 2026 12:58:59 +0000 Subject: [PATCH 131/226] docs: release notes for the v20.3.20 release --- CHANGELOG.md | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7e133067d5d5..12f963964eb9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,15 @@ +<a name="20.3.20"></a> + +# 20.3.20 (2026-03-11) + +### @angular/build + +| Commit | Type | Description | +| --------------------------------------------------------------------------------------------------- | ---- | ------------------------------------------------------- | +| [0fd6823af](https://github.com/angular/angular-cli/commit/0fd6823af0adec23f7c3f1d531f45f6432afe555) | fix | pass process environment variables to prerender workers | + +<!-- CHANGELOG SPLIT MARKER --> + <a name="22.0.0-next.0"></a> # 22.0.0-next.0 (2026-03-05) From 05b6df9afd07747d61a217805db992298abfd359 Mon Sep 17 00:00:00 2001 From: Alan Agius <17563226+alan-agius4@users.noreply.github.com> Date: Wed, 11 Mar 2026 13:05:09 +0000 Subject: [PATCH 132/226] docs: release notes for the v21.2.2 release --- CHANGELOG.md | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 12f963964eb9..04b4a3a41d0e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,26 @@ +<a name="21.2.2"></a> + +# 21.2.2 (2026-03-11) + +### @angular/cli + +| Commit | Type | Description | +| --------------------------------------------------------------------------------------------------- | ---- | ------------------------------------------------------------------------------------- | +| [8447d9132](https://github.com/angular/angular-cli/commit/8447d913280a8fa09a842d11193ce77527d0f7a6) | fix | conditionally quote package names when adding dependencies based on host requirements | +| [d2f209823](https://github.com/angular/angular-cli/commit/d2f209823a524a6effde4910017547675c7a6166) | fix | preserve exact version in ng add when requested | +| [28f4d684a](https://github.com/angular/angular-cli/commit/28f4d684ae12f0e0860bf0ace8851fdddad1c068) | perf | avoid redundant package version resolution in ng add | + +### @angular/build + +| Commit | Type | Description | +| --------------------------------------------------------------------------------------------------- | ---- | ------------------------------------------------------- | +| [06010294f](https://github.com/angular/angular-cli/commit/06010294f8fe7a4843f802aafba51703ce810f61) | fix | allow any `CHROME_BIN` for vitest playwright provider | +| [8dec0c62b](https://github.com/angular/angular-cli/commit/8dec0c62ba40af339f4fd0fa34f20cbed545cd71) | fix | normalize line endings for CSP hash generation | +| [58688ebd7](https://github.com/angular/angular-cli/commit/58688ebd727fe295adcb538a33b525867caf82bd) | fix | pass process environment variables to prerender workers | +| [4ca61647f](https://github.com/angular/angular-cli/commit/4ca61647f208ec0ab9bc06f64583696b0619c259) | fix | resolve assets correctly during i18n prerendering | + +<!-- CHANGELOG SPLIT MARKER --> + <a name="20.3.20"></a> # 20.3.20 (2026-03-11) From 174c7860b212d2f4f78ad7275e5e33f0f17487fd Mon Sep 17 00:00:00 2001 From: Alan Agius <17563226+alan-agius4@users.noreply.github.com> Date: Wed, 11 Mar 2026 13:07:17 +0000 Subject: [PATCH 133/226] release: cut the v22.0.0-next.1 release --- CHANGELOG.md | 38 ++++++++++++++++++++++++++++++++++++++ package.json | 2 +- 2 files changed, 39 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 04b4a3a41d0e..874e93c24312 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,41 @@ +<a name="22.0.0-next.1"></a> + +# 22.0.0-next.1 (2026-03-11) + +## Breaking Changes + +### @angular/build + +- The `@angular/build:dev-server (ng serve)` now assigns the highest priority to the `PORT` environment variable. This value will override any port configurations specified in `angular.json` or via the `--port` command-line flag. This includes the default port 4200. + +### @schematics/angular + +| Commit | Type | Description | +| --------------------------------------------------------------------------------------------------- | ---- | ----------------------------------------------------------------- | +| [b3d838dfd](https://github.com/angular/angular-cli/commit/b3d838dfdb2adc3bd035b495f7f9457d742d73a4) | fix | replace deprecated `ChangeDetectionStrategy.Default` with `Eager` | + +### @angular/cli + +| Commit | Type | Description | +| --------------------------------------------------------------------------------------------------- | ---- | ------------------------------------------------------------------------------------- | +| [598a690a0](https://github.com/angular/angular-cli/commit/598a690a0baea5cd54af5cea38e673c33605a627) | fix | conditionally quote package names when adding dependencies based on host requirements | +| [b5fb457e1](https://github.com/angular/angular-cli/commit/b5fb457e157fa78b61565eaba6b88e9f80b3b288) | fix | preserve exact version in ng add when requested | +| [93c3eb8fb](https://github.com/angular/angular-cli/commit/93c3eb8fb2a0d531f18779152b0a62e9b73dbb23) | fix | update zoneless migration tool to handle `ChangeDetectionStrategy.Eager` | +| [ad0fd5f41](https://github.com/angular/angular-cli/commit/ad0fd5f41fc6ee5d920fb3c725f09f17d86d2ab4) | perf | avoid redundant package version resolution in ng add | +| [a39a33128](https://github.com/angular/angular-cli/commit/a39a33128fb56e9c65ea89e06c4f127252d3b220) | perf | cache root manifest and resolve restricted package exports in ng add | + +### @angular/build + +| Commit | Type | Description | +| --------------------------------------------------------------------------------------------------- | ---- | ------------------------------------------------------------------ | +| [fe720cab6](https://github.com/angular/angular-cli/commit/fe720cab64bbc8bcc2db583188e32ad938e63a23) | feat | add process.env.PORT support to the dev server | +| [af2c7e944](https://github.com/angular/angular-cli/commit/af2c7e9444fba81d3b1fd2d37dc4412f8305b5ed) | feat | rename `experimentalPlatform` to `platform` in application builder | +| [6324133c2](https://github.com/angular/angular-cli/commit/6324133c282f5e04ee6e9e46fc5f387cbbefad8e) | fix | normalize line endings for CSP hash generation | +| [839c725c2](https://github.com/angular/angular-cli/commit/839c725c234b2c1c3e44d52e3a1442ad1b538be9) | fix | pass process environment variables to prerender workers | +| [f30f8900e](https://github.com/angular/angular-cli/commit/f30f8900efb8ad9a835630f57e3667346926dc4d) | fix | resolve assets correctly during i18n prerendering | + +<!-- CHANGELOG SPLIT MARKER --> + <a name="21.2.2"></a> # 21.2.2 (2026-03-11) diff --git a/package.json b/package.json index fc5da39f8234..0058a17fbbff 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@angular/devkit-repo", - "version": "22.0.0-next.0", + "version": "22.0.0-next.1", "private": true, "description": "Software Development Kit for Angular", "keywords": [ From 29df5ed06d1f6eac7e6112faec78e832ed4e327b Mon Sep 17 00:00:00 2001 From: Angular Robot <angular-robot@google.com> Date: Thu, 12 Mar 2026 06:20:40 +0000 Subject: [PATCH 134/226] build: update bazel dependencies See associated pull request for more information. --- MODULE.bazel | 8 ++++---- MODULE.bazel.lock | 24 ++++++++++++++---------- 2 files changed, 18 insertions(+), 14 deletions(-) diff --git a/MODULE.bazel b/MODULE.bazel index e4ad3ddfeccd..e7801b06b386 100644 --- a/MODULE.bazel +++ b/MODULE.bazel @@ -7,14 +7,14 @@ module( bazel_dep(name = "platforms", version = "1.0.0") bazel_dep(name = "yq.bzl", version = "0.3.5") bazel_dep(name = "rules_nodejs", version = "6.7.3") -bazel_dep(name = "aspect_rules_js", version = "3.0.2") -bazel_dep(name = "aspect_rules_ts", version = "3.8.5") +bazel_dep(name = "aspect_rules_js", version = "3.0.3") +bazel_dep(name = "aspect_rules_ts", version = "3.8.6") bazel_dep(name = "rules_pkg", version = "1.2.0") bazel_dep(name = "rules_cc", version = "0.2.17") -bazel_dep(name = "jq.bzl", version = "0.4.0") +bazel_dep(name = "jq.bzl", version = "0.6.1") bazel_dep(name = "bazel_lib", version = "3.2.2") bazel_dep(name = "bazel_skylib", version = "1.9.0") -bazel_dep(name = "aspect_rules_esbuild", version = "0.25.0") +bazel_dep(name = "aspect_rules_esbuild", version = "0.25.1") bazel_dep(name = "aspect_rules_jasmine", version = "2.0.4") bazel_dep(name = "rules_angular") git_override( diff --git a/MODULE.bazel.lock b/MODULE.bazel.lock index dfac969148da..3cc762fc1337 100644 --- a/MODULE.bazel.lock +++ b/MODULE.bazel.lock @@ -19,13 +19,15 @@ "https://bcr.bazel.build/modules/aspect_bazel_lib/2.8.1/MODULE.bazel": "812d2dd42f65dca362152101fbec418029cc8fd34cbad1a2fde905383d705838", "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_esbuild/0.25.1/MODULE.bazel": "9b931b3e483bd8eedb6966bda6df07d801f70ccb4896231b4e5e711b5130f3aa", + "https://bcr.bazel.build/modules/aspect_rules_esbuild/0.25.1/source.json": "a0b72e23ed06113f3878cb635d586b4045ef37750983467af72fe0315c3a2fcd", "https://bcr.bazel.build/modules/aspect_rules_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/3.0.2/MODULE.bazel": "c5d22d2db2a2f0cf41ec2028ded2e2543d7ff1ea9f6faf5d6b2791546ee1d6a9", - "https://bcr.bazel.build/modules/aspect_rules_js/3.0.2/source.json": "8a8642e6869ead1b37c5442b60b59912bb35ae265d94e4115d3e1a2598fdd849", + "https://bcr.bazel.build/modules/aspect_rules_js/3.0.3/MODULE.bazel": "28a30e8fc33bf64a67835d64d124f6e05a7d59648dcb27b110fb3502f761e503", + "https://bcr.bazel.build/modules/aspect_rules_js/3.0.3/source.json": "bb8fff9a304452e1042af9522ad1d54d6f1d1fdf71c5127deadb6fd156654193", "https://bcr.bazel.build/modules/aspect_rules_ts/3.6.3/MODULE.bazel": "d09db394970f076176ce7bab5b5fa7f0d560fd4f30b8432ea5e2c2570505b130", "https://bcr.bazel.build/modules/aspect_rules_ts/3.8.5/MODULE.bazel": "bcf8f0b6b9375f0f74451e2f70671efae9bb366acef8fdc04675305eaf137f06", "https://bcr.bazel.build/modules/aspect_rules_ts/3.8.6/MODULE.bazel": "371bacab13c9c36323384b56c7cabfde1982b69674e78729e1ddd1edd54d984e", @@ -83,7 +85,8 @@ "https://bcr.bazel.build/modules/googletest/1.14.0/MODULE.bazel": "cfbcbf3e6eac06ef9d85900f64424708cc08687d1b527f0ef65aa7517af8118f", "https://bcr.bazel.build/modules/jq.bzl/0.1.0/MODULE.bazel": "2ce69b1af49952cd4121a9c3055faa679e748ce774c7f1fda9657f936cae902f", "https://bcr.bazel.build/modules/jq.bzl/0.4.0/MODULE.bazel": "a7b39b37589f2b0dad53fd6c1ccaabbdb290330caa920d7ef3e6aad068cd4ab2", - "https://bcr.bazel.build/modules/jq.bzl/0.4.0/source.json": "52ec7530c4618e03f634b30ff719814a68d7d39c235938b7aa2abbfe1eb1c52c", + "https://bcr.bazel.build/modules/jq.bzl/0.6.1/MODULE.bazel": "f30c46e0a08a9f7566a8bf60a43d48abea960cd7f57b315b01e2762f1537eb52", + "https://bcr.bazel.build/modules/jq.bzl/0.6.1/source.json": "9ca9e2f90baa6a5bb0a49626ed9528554ec83165adf47b39792673ecc7feda22", "https://bcr.bazel.build/modules/jsoncpp/1.9.5/MODULE.bazel": "31271aedc59e815656f5736f282bb7509a97c7ecb43e927ac1a37966e0578075", "https://bcr.bazel.build/modules/jsoncpp/1.9.5/source.json": "4108ee5085dd2885a341c7fab149429db457b3169b86eb081fa245eadf69169d", "https://bcr.bazel.build/modules/libpfm/4.11.0/MODULE.bazel": "45061ff025b301940f1e30d2c16bea596c25b176c8b6b3087e92615adbd52902", @@ -217,8 +220,8 @@ "moduleExtensions": { "@@aspect_rules_esbuild+//esbuild:extensions.bzl%esbuild": { "general": { - "bzlTransitiveDigest": "3n8gVQlbxgyvUg00KQzlj45loySDpuyrPrfkMDisJCg=", - "usagesDigest": "ToTaCONCN/E05krnHXLM1kpV1zrHNxHrGpUip973II4=", + "bzlTransitiveDigest": "GnYkDpVOnWnYv+xwyhEi0qjk3Lvp4Wei30PeSIQF5vM=", + "usagesDigest": "6We6zwGoawD9YXqMI0KPaxEKJTnamXBsuOekhFS2D40=", "recordedFileInputs": {}, "recordedDirentsInputs": {}, "envVariables": {}, @@ -277,6 +280,7 @@ "package": "esbuild", "version": "0.19.9", "root_package": "", + "link_workspace": "", "integrity": "sha512-U9CHtKSy+EpPsEBa+/A2gMs/h3ylBC0H0KSqIg7tpztHerLi6nrrcoUJAkNCEPumx8yJ+Byic4BVwHgRbN0TBg==", "url": "", "commit": "", @@ -495,7 +499,7 @@ "@@aspect_tools_telemetry+//:extension.bzl%telemetry": { "general": { "bzlTransitiveDigest": "cl5A2O84vDL6Tt+Qga8FCj1DUDGqn+e7ly5rZ+4xvcc=", - "usagesDigest": "4S2FeP1q6AdW4e8yrlxmvEvdMor3zaatSVEcYykHgQM=", + "usagesDigest": "8ec8vDJXeev7aw6Ksb2ghlIJcrGrrXGWjUyizRQ4qhA=", "recordedFileInputs": {}, "recordedDirentsInputs": {}, "envVariables": {}, @@ -504,9 +508,9 @@ "repoRuleId": "@@aspect_tools_telemetry+//:extension.bzl%tel_repository", "attributes": { "deps": { - "aspect_rules_js": "3.0.2", + "aspect_rules_js": "3.0.3", "aspect_rules_ts": "3.8.6", - "aspect_rules_esbuild": "0.25.0", + "aspect_rules_esbuild": "0.25.1", "aspect_rules_jasmine": "2.0.4", "aspect_tools_telemetry": "0.3.3" } @@ -956,7 +960,7 @@ "@@rules_nodejs+//nodejs:extensions.bzl%node": { "general": { "bzlTransitiveDigest": "4pUxCNc22K4I+6+4Nxu52Hur12tFRfa1JMsN5mdDv60=", - "usagesDigest": "RVRqvqv2B/puZoo/J18nMQjDOufEtP5CHzu0by/yvoc=", + "usagesDigest": "O/o6zGuiN7DpORxvoqtlIhpLwDYSAOWlPpMvtzBCjBs=", "recordedFileInputs": {}, "recordedDirentsInputs": {}, "envVariables": {}, @@ -4992,7 +4996,7 @@ "@@yq.bzl+//yq:extensions.bzl%yq": { "general": { "bzlTransitiveDigest": "UfFMy8CWK4/dVo/tfaSAIYUiDGNAPes5eRllx9O9Q9Q=", - "usagesDigest": "u+ujDEN69Oj7FVCeZOhiedgk8GTKB0ZslrsqMm1djlE=", + "usagesDigest": "da9wP1gnmr42ci1bT30rSLLWu7O0jJPIkd01GNAM7NE=", "recordedFileInputs": {}, "recordedDirentsInputs": {}, "envVariables": {}, From 6572a69443356ff0022e6ce162915125fee0e3bb Mon Sep 17 00:00:00 2001 From: cexbrayat <cedric@ninja-squad.com> Date: Wed, 11 Mar 2026 16:13:26 +0100 Subject: [PATCH 135/226] fix(@schematics/angular): default components to OnPush change detection --- ...dasherize__.__type@dasherize__.ts.template | 4 +-- .../angular/component/index_spec.ts | 31 +++++++++++++------ .../schematics/angular/component/schema.json | 2 +- 3 files changed, 24 insertions(+), 13 deletions(-) diff --git a/packages/schematics/angular/component/files/__name@dasherize@if-flat__/__name@dasherize__.__type@dasherize__.ts.template b/packages/schematics/angular/component/files/__name@dasherize@if-flat__/__name@dasherize__.__type@dasherize__.ts.template index dcea9394edb8..d46cd8233862 100644 --- a/packages/schematics/angular/component/files/__name@dasherize@if-flat__/__name@dasherize__.__type@dasherize__.ts.template +++ b/packages/schematics/angular/component/files/__name@dasherize@if-flat__/__name@dasherize__.__type@dasherize__.ts.template @@ -1,4 +1,4 @@ -import { <% if(changeDetection !== 'Default') { %>ChangeDetectionStrategy, <% }%>Component<% if(!!viewEncapsulation) { %>, ViewEncapsulation<% }%> } from '@angular/core'; +import { <% if(changeDetection !== 'OnPush') { %>ChangeDetectionStrategy, <% }%>Component<% if(!!viewEncapsulation) { %>, ViewEncapsulation<% }%> } from '@angular/core'; @Component({<% if(!skipSelector) {%> selector: '<%= selector %>',<%}%><% if(standalone) {%> @@ -16,7 +16,7 @@ import { <% if(changeDetection !== 'Default') { %>ChangeDetectionStrategy, <% }% } <% } %>`,<% } else if (style !== 'none') { %> styleUrl: './<%= dasherize(name) %><%= type ? '.' + dasherize(type): '' %>.<%= style %>',<% } %><% if(!!viewEncapsulation) { %> - encapsulation: ViewEncapsulation.<%= viewEncapsulation %>,<% } if (changeDetection !== 'Default') { %> + encapsulation: ViewEncapsulation.<%= viewEncapsulation %>,<% } if (changeDetection !== 'OnPush') { %> changeDetection: ChangeDetectionStrategy.<%= changeDetection %>,<% } %> }) export <% if(exportDefault) {%>default <%}%>class <%= classifiedName %> { diff --git a/packages/schematics/angular/component/index_spec.ts b/packages/schematics/angular/component/index_spec.ts index 5bff59152715..1f03be864db9 100644 --- a/packages/schematics/angular/component/index_spec.ts +++ b/packages/schematics/angular/component/index_spec.ts @@ -23,7 +23,7 @@ describe('Component Schematic', () => { inlineStyle: false, inlineTemplate: false, displayBlock: false, - changeDetection: ChangeDetection.Eager, + changeDetection: ChangeDetection.OnPush, style: Style.Css, type: 'Component', skipTests: false, @@ -64,12 +64,23 @@ describe('Component Schematic', () => { expect(tsContent).toContain('compileComponents()'); }); - it('should set change detection to OnPush', async () => { - const options = { ...defaultOptions, changeDetection: 'OnPush' }; + it('should not set change detection when default is OnPush', async () => { + const options = { ...defaultOptions }; + + const tree = await schematicRunner.runSchematic('component', options, appTree); + const tsContent = tree.readContent('/projects/bar/src/app/foo/foo.component.ts'); + expect(tsContent).not.toMatch(/import.*ChangeDetectionStrategy/); + expect(tsContent).not.toMatch(/changeDetection:/); + expect(tsContent).not.toMatch(/ChangeDetectionStrategy/); + }); + + it('should set changeDetection to Eager when requested', async () => { + const options = { ...defaultOptions, changeDetection: 'Eager' }; const tree = await schematicRunner.runSchematic('component', options, appTree); const tsContent = tree.readContent('/projects/bar/src/app/foo/foo.component.ts'); - expect(tsContent).toMatch(/changeDetection: ChangeDetectionStrategy.OnPush/); + expect(tsContent).toMatch(/import .*ChangeDetectionStrategy/); + expect(tsContent).toContain('changeDetection: ChangeDetectionStrategy.Eager,'); }); it('should not set view encapsulation', async () => { @@ -348,27 +359,27 @@ describe('Component Schematic', () => { expect(tree.files).not.toContain('/projects/bar/src/app/foo/foo.component.spec.ts'); }); - it('should respect templateUrl when style=none and changeDetection=OnPush', async () => { - const options = { ...defaultOptions, style: Style.None, changeDetection: 'OnPush' }; + it('should respect templateUrl when style=none and changeDetection=Eager', async () => { + const options = { ...defaultOptions, style: Style.None, changeDetection: 'Eager' }; const tree = await schematicRunner.runSchematic('component', options, appTree); const content = tree.readContent('/projects/bar/src/app/foo/foo.component.ts'); expect(content).not.toMatch(/styleUrls: /); expect(content).toMatch(/templateUrl: '.\/foo.component.html',\n/); - expect(content).toMatch(/changeDetection: ChangeDetectionStrategy.OnPush/); + expect(content).toMatch(/changeDetection: ChangeDetectionStrategy.Eager/); }); - it('should respect inlineTemplate when style=none and changeDetection=OnPush', async () => { + it('should respect inlineTemplate when style=none and changeDetection=Eager', async () => { const options = { ...defaultOptions, style: Style.None, - changeDetection: 'OnPush', + changeDetection: 'Eager', inlineTemplate: true, }; const tree = await schematicRunner.runSchematic('component', options, appTree); const content = tree.readContent('/projects/bar/src/app/foo/foo.component.ts'); expect(content).not.toMatch(/styleUrls: /); expect(content).toMatch(/template: `(\n(.|)*){3}\n\s*`,\n/); - expect(content).toMatch(/changeDetection: ChangeDetectionStrategy.OnPush/); + expect(content).toMatch(/changeDetection: ChangeDetectionStrategy.Eager,/); }); it('should create a standalone component', async () => { diff --git a/packages/schematics/angular/component/schema.json b/packages/schematics/angular/component/schema.json index a2c04647abf5..3d6f24590bd4 100644 --- a/packages/schematics/angular/component/schema.json +++ b/packages/schematics/angular/component/schema.json @@ -67,7 +67,7 @@ "description": "Configures the change detection strategy for the component.", "enum": ["Eager", "OnPush"], "type": "string", - "default": "Eager", + "default": "OnPush", "alias": "c" }, "prefix": { From 6b76f744cc303f51654f6a93ee8eb249161cb735 Mon Sep 17 00:00:00 2001 From: Angular Robot <angular-robot@google.com> Date: Thu, 12 Mar 2026 09:49:22 +0000 Subject: [PATCH 136/226] build: update pnpm to v10.32.1 See associated pull request for more information. --- MODULE.bazel | 4 ++-- package.json | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/MODULE.bazel b/MODULE.bazel index e7801b06b386..4cd6ad62f336 100644 --- a/MODULE.bazel +++ b/MODULE.bazel @@ -117,8 +117,8 @@ use_repo( pnpm = use_extension("@aspect_rules_js//npm:extensions.bzl", "pnpm") pnpm.pnpm( name = "pnpm", - pnpm_version = "10.31.0", - pnpm_version_integrity = "sha512-45JziL+qgHjOt5t0j/wegnToTXUWPme8IuBsDTrtQ90VMVHL8R1/gwH/SsuYxovcXK32mJUygB/6/js+SmPCaA==", + pnpm_version = "10.32.1", + pnpm_version_integrity = "sha512-pwaTjw6JrBRWtlY+q07fHR+vM2jRGR/FxZeQ6W3JGORFarLmfWE94QQ9LoyB+HMD5rQNT/7KnfFe8a1Wc0jyvg==", ) use_repo(pnpm, "pnpm") diff --git a/package.json b/package.json index 0058a17fbbff..88595562d334 100644 --- a/package.json +++ b/package.json @@ -28,12 +28,12 @@ "type": "git", "url": "git+https://github.com/angular/angular-cli.git" }, - "packageManager": "pnpm@10.31.0", + "packageManager": "pnpm@10.32.1", "engines": { "node": "^22.22.0 || >=24.13.1", "npm": "Please use pnpm instead of NPM to install dependencies", "yarn": "Please use pnpm instead of Yarn to install dependencies", - "pnpm": "10.31.0" + "pnpm": "10.32.1" }, "author": "Angular Authors", "license": "MIT", From cb57740f4e6dcada6fae210db6369c12ad4ce468 Mon Sep 17 00:00:00 2001 From: Angular Robot <angular-robot@google.com> Date: Thu, 12 Mar 2026 09:47:50 +0000 Subject: [PATCH 137/226] build: update actions/download-artifact action to v8.0.1 See associated pull request for more information. --- .github/workflows/ci.yml | 2 +- .github/workflows/pr.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 75aceb2663e0..90e9030b7c6e 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -141,7 +141,7 @@ jobs: - name: Install node modules run: pnpm install --frozen-lockfile - name: Download built Windows E2E tests - uses: actions/download-artifact@70fc10c6e5e1ce46ad2ea6f2b72d43f7d47b13c3 # v8.0.0 + uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1 with: name: win-e2e-build-artifacts path: dist/bin/tests/ diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml index 86e6c451e931..9a744da56722 100644 --- a/.github/workflows/pr.yml +++ b/.github/workflows/pr.yml @@ -160,7 +160,7 @@ jobs: - name: Install node modules run: pnpm install --frozen-lockfile - name: Download built Windows E2E tests - uses: actions/download-artifact@70fc10c6e5e1ce46ad2ea6f2b72d43f7d47b13c3 # v8.0.0 + uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1 with: name: win-e2e-build-artifacts path: dist/bin/tests/ From 4643a8a3b3e2a3bcf7baae9f812ae8a9ef10ebad Mon Sep 17 00:00:00 2001 From: Charles Lyding <19598772+clydin@users.noreply.github.com> Date: Thu, 12 Mar 2026 14:16:13 -0400 Subject: [PATCH 138/226] fix(@angular/build): only use external packages for polyfills when no local files are present The polyfills bundle now conditionally employs external package resolution only if no local files are detected in the polyfills array. If local files are present, all polyfills are bundled together to ensure the import execution order is correctly preserved between local and package-based entries. --- .../tools/esbuild/application-code-bundle.ts | 26 +++++++++++++++---- 1 file changed, 21 insertions(+), 5 deletions(-) diff --git a/packages/angular/build/src/tools/esbuild/application-code-bundle.ts b/packages/angular/build/src/tools/esbuild/application-code-bundle.ts index 08da63744c97..f28103b34a3e 100644 --- a/packages/angular/build/src/tools/esbuild/application-code-bundle.ts +++ b/packages/angular/build/src/tools/esbuild/application-code-bundle.ts @@ -654,18 +654,19 @@ function getEsBuildCommonPolyfillsOptions( tryToResolvePolyfillsAsRelative: boolean, loadResultCache: LoadResultCache | undefined, ): BuildOptions | undefined { - const { jit, workspaceRoot, i18nOptions } = options; + const { jit, workspaceRoot, i18nOptions, externalPackages } = options; + + let polyfills = options.polyfills ? [...options.polyfills] : []; const buildOptions = getEsBuildCommonOptions({ ...options, - externalPackages: false, + // If any polyfills are local files, disable external packages for the polyfills build. + // This ensures that local files are properly bundled. + externalPackages: polyfills.some(isLocalFile) ? false : externalPackages, }); - buildOptions.packages = 'bundle'; buildOptions.splitting = false; buildOptions.plugins ??= []; - let polyfills = options.polyfills ? [...options.polyfills] : []; - // Angular JIT mode requires the runtime compiler if (jit) { polyfills.unshift('@angular/compiler'); @@ -749,3 +750,18 @@ function getEsBuildCommonPolyfillsOptions( function entryFileToWorkspaceRelative(workspaceRoot: string, entryFile: string): string { return './' + toPosixPath(relative(workspaceRoot, entryFile).replace(/.[mc]?ts$/, '')); } + +/** + * Determines if a polyfill path is a local file. + * A local file is defined as a path starting with a `.` or having a TypeScript/JavaScript extension. + * `zone.js` and its subpaths are specifically excluded and treated as packages. + * @param path The polyfill path to check. + * @returns true if the path is a local file; false otherwise. + */ +function isLocalFile(path: string): boolean { + if (path.startsWith('zone.js')) { + return false; + } + + return path[0] === '.' || /\.[mc]?[jt]sx?$/.test(path); +} From 037aa9e59013fa79703b2e423be0c8849392ca7b Mon Sep 17 00:00:00 2001 From: Alan Agius <17563226+alan-agius4@users.noreply.github.com> Date: Mon, 16 Mar 2026 13:18:44 +0000 Subject: [PATCH 139/226] build: update dependency https-proxy-agent to v8 See associated pull request for more information. Closes #32762 as a pr takeover --- packages/angular/build/package.json | 2 +- .../src/utils/index-file/inline-fonts.ts | 21 ++++++++++++++++--- pnpm-lock.yaml | 21 +++++++++++++++++-- 3 files changed, 38 insertions(+), 6 deletions(-) diff --git a/packages/angular/build/package.json b/packages/angular/build/package.json index 3a42deff3eb2..98a9285e0fd4 100644 --- a/packages/angular/build/package.json +++ b/packages/angular/build/package.json @@ -28,7 +28,7 @@ "beasties": "0.4.1", "browserslist": "^4.26.0", "esbuild": "0.27.3", - "https-proxy-agent": "7.0.6", + "https-proxy-agent": "8.0.0", "istanbul-lib-instrument": "6.0.3", "jsonc-parser": "3.3.1", "listr2": "10.2.1", diff --git a/packages/angular/build/src/utils/index-file/inline-fonts.ts b/packages/angular/build/src/utils/index-file/inline-fonts.ts index 8f70139a77a4..52181200c885 100644 --- a/packages/angular/build/src/utils/index-file/inline-fonts.ts +++ b/packages/angular/build/src/utils/index-file/inline-fonts.ts @@ -6,10 +6,9 @@ * found in the LICENSE file at https://angular.dev/license */ -import { HttpsProxyAgent } from 'https-proxy-agent'; import { createHash } from 'node:crypto'; import { readFile, rm, writeFile } from 'node:fs/promises'; -import { get as httpsGet } from 'node:https'; +import { type Agent, get as httpsGet } from 'node:https'; import { join } from 'node:path'; import { NormalizedCachedOptions } from '../normalize-cache'; import { htmlRewritingStream } from './html-rewriting-stream'; @@ -195,12 +194,28 @@ export class InlineFontsProcessor { } const httpsProxy = process.env.HTTPS_PROXY ?? process.env.https_proxy; + let agent: Agent | undefined; + if (httpsProxy) { + // TODO: Remove `https-proxy-agent` usage once the min supported version of Node.js is 24.5.0 + // https.globalAgent = new https.Agent({ + // proxyEnv: { HTTPS_PROXY: 'http://proxy.company.com:8080' }, + // }); + // See: https://nodejs.org/en/learn/http/enterprise-network-configuration + // See: https://nodejs.org/docs/latest/api/https.html + + const { HttpsProxyAgent } = (await import('https-proxy-agent' as string)) as typeof import( + 'https-proxy-agent', + { with: { 'resolution-mode': 'import' } } + ); + agent = new HttpsProxyAgent(httpsProxy) as unknown as Agent; + } + const data = await new Promise<string>((resolve, reject) => { let rawResponse = ''; httpsGet( url, { - agent: httpsProxy ? new HttpsProxyAgent(httpsProxy) : undefined, + agent, headers: { /** * Always use a Windows UA. This is because Google fonts will including hinting in fonts for Windows. diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index fcbf99be4dd7..5c6587427d36 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -362,8 +362,8 @@ importers: specifier: 0.27.3 version: 0.27.3 https-proxy-agent: - specifier: 7.0.6 - version: 7.0.6(supports-color@10.2.2) + specifier: 8.0.0 + version: 8.0.0 istanbul-lib-instrument: specifier: 6.0.3 version: 6.0.3 @@ -3872,6 +3872,10 @@ packages: resolution: {integrity: sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==} engines: {node: '>= 14'} + agent-base@8.0.0: + resolution: {integrity: sha512-QT8i0hCz6C/KQ+KTAbSNwCHDGdmUJl2tp2ZpNlGSWCfhUNVbYG2WLE3MdZGBAgXPV4GAvjGMxo+C1hroyxmZEg==} + engines: {node: '>= 14'} + ajv-formats@2.1.1: resolution: {integrity: sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==} @@ -5545,6 +5549,10 @@ packages: resolution: {integrity: sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==} engines: {node: '>= 14'} + https-proxy-agent@8.0.0: + resolution: {integrity: sha512-YYeW+iCnAS3xhvj2dvVoWgsbca3RfQy/IlaNHHOtDmU0jMqPI9euIq3Y9BJETdxk16h9NHHCKqp/KB9nIMStCQ==} + engines: {node: '>= 14'} + husky@9.1.7: resolution: {integrity: sha512-5gs5ytaNjBrh5Ow3zrvdUUY+0VxIuWVL4i9irt6friV+BqdCfmV11CQTWMiBYWHbXhco+J1kHfTOUkePhCDvMA==} engines: {node: '>=18'} @@ -11812,6 +11820,8 @@ snapshots: agent-base@7.1.4: {} + agent-base@8.0.0: {} + ajv-formats@2.1.1: dependencies: ajv: 8.18.0 @@ -13868,6 +13878,13 @@ snapshots: transitivePeerDependencies: - supports-color + https-proxy-agent@8.0.0: + dependencies: + agent-base: 8.0.0 + debug: 4.4.3(supports-color@10.2.2) + transitivePeerDependencies: + - supports-color + husky@9.1.7: {} hyperdyperid@1.2.0: {} From 9b33e1781328d3b42665145bf580fb8e06c8ad2b Mon Sep 17 00:00:00 2001 From: arturovt <arthurandrosovich@gmail.com> Date: Fri, 13 Mar 2026 19:16:23 +0200 Subject: [PATCH 140/226] fix(@angular/build): alias createRequire banner import to avoid duplicate binding ESBuild processes banner content as raw text outside of its module graph, so it cannot deduplicate or rename banner imports the way it does for user imports. If user code already imports `createRequire` from `node:module`, the injected banner produces a duplicate binding that causes a runtime error. Alias the banner import to `__ngCreateRequire` to avoid colliding with any `createRequire` binding that esbuild may emit from bundled user code. --- .../tools/esbuild/application-code-bundle.ts | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/packages/angular/build/src/tools/esbuild/application-code-bundle.ts b/packages/angular/build/src/tools/esbuild/application-code-bundle.ts index f28103b34a3e..c3f542e1bdfb 100644 --- a/packages/angular/build/src/tools/esbuild/application-code-bundle.ts +++ b/packages/angular/build/src/tools/esbuild/application-code-bundle.ts @@ -196,9 +196,14 @@ export function createServerPolyfillBundleOptions( if (isNodePlatform) { // Note: Needed as esbuild does not provide require shims / proxy from ESModules. // See: https://github.com/evanw/esbuild/issues/1921. + // Use an alias to avoid colliding with any `createRequire` import that may + // already exist in the bundled user code. ESBuild processes banner content + // as raw text outside of its module graph, so it cannot deduplicate or + // rename banner imports the way it does for user imports. Without the alias, + // a duplicate `import { createRequire }` binding would cause a runtime error. jsBanner.push( - `import { createRequire } from 'node:module';`, - `globalThis['require'] ??= createRequire(import.meta.url);`, + `import { createRequire as __ngCreateRequire } from 'node:module';`, + `globalThis['require'] ??= __ngCreateRequire(import.meta.url);`, ); } @@ -397,9 +402,14 @@ export function createSsrEntryCodeBundleOptions( if (isNodePlatform) { // Note: Needed as esbuild does not provide require shims / proxy from ESModules. // See: https://github.com/evanw/esbuild/issues/1921. + // Use an alias to avoid colliding with any `createRequire` import that may + // already exist in the bundled user code. ESBuild processes banner content + // as raw text outside of its module graph, so it cannot deduplicate or + // rename banner imports the way it does for user imports. Without the alias, + // a duplicate `import { createRequire }` binding would cause a runtime error. jsBanner.push( - `import { createRequire } from 'node:module';`, - `globalThis['require'] ??= createRequire(import.meta.url);`, + `import { createRequire as __ngCreateRequire } from 'node:module';`, + `globalThis['require'] ??= __ngCreateRequire(import.meta.url);`, ); } From 1b9a0695b8d99c46b5e80c5fadf4f1d45df03b67 Mon Sep 17 00:00:00 2001 From: SkyZeroZx <73321943+SkyZeroZx@users.noreply.github.com> Date: Sat, 14 Mar 2026 12:57:07 -0500 Subject: [PATCH 141/226] docs: update long-description --- .../angular/cli/src/commands/update/long-description.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/angular/cli/src/commands/update/long-description.md b/packages/angular/cli/src/commands/update/long-description.md index 612971de0c4d..1771f7ffe1de 100644 --- a/packages/angular/cli/src/commands/update/long-description.md +++ b/packages/angular/cli/src/commands/update/long-description.md @@ -13,10 +13,10 @@ ng update @angular/cli@^<major_version> @angular/core@^<major_version> ``` We recommend that you always update to the latest patch version, as it contains fixes we released since the initial major release. -For example, use the following command to take the latest 10.x.x version and use that to update. +For example, use the following command to take the latest 21.x.x version and use that to update. ``` -ng update @angular/cli@^10 @angular/core@^10 +ng update @angular/cli@^21 @angular/core@^21 ``` -For detailed information and guidance on updating your application, see the interactive [Angular Update Guide](https://update.angular.dev/). +For detailed information and guidance on updating your application, see the interactive [Angular Update Guide](/update-guide). From cb8d4d9017dee3350b4d92b3bf7592beedf99a0d Mon Sep 17 00:00:00 2001 From: Angular Robot <angular-robot@google.com> Date: Mon, 16 Mar 2026 18:50:34 +0000 Subject: [PATCH 142/226] build: update cross-repo angular dependencies See associated pull request for more information. --- .../assistant-to-the-branch-manager.yml | 2 +- .github/workflows/ci.yml | 52 +- .github/workflows/dev-infra.yml | 6 +- .github/workflows/perf.yml | 6 +- .github/workflows/pr.yml | 44 +- MODULE.bazel | 8 +- MODULE.bazel.lock | 36 +- package.json | 28 +- packages/angular/ssr/package.json | 12 +- packages/ngtools/webpack/package.json | 4 +- pnpm-lock.yaml | 506 +++++++++--------- tests/e2e/ng-snapshot/package.json | 32 +- 12 files changed, 368 insertions(+), 368 deletions(-) diff --git a/.github/workflows/assistant-to-the-branch-manager.yml b/.github/workflows/assistant-to-the-branch-manager.yml index b798c4604936..e3a723fdaf97 100644 --- a/.github/workflows/assistant-to-the-branch-manager.yml +++ b/.github/workflows/assistant-to-the-branch-manager.yml @@ -17,6 +17,6 @@ jobs: - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 with: persist-credentials: false - - uses: angular/dev-infra/github-actions/branch-manager@08542a03ec636e2b37541e3e4104ec1cdf2c32d6 + - uses: angular/dev-infra/github-actions/branch-manager@0c9cddc9853934bdf85834239f56ad0e83e61d8f with: angular-robot-key: ${{ secrets.ANGULAR_ROBOT_PRIVATE_KEY }} diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 90e9030b7c6e..e9980cfcaaa7 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -21,9 +21,9 @@ jobs: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@08542a03ec636e2b37541e3e4104ec1cdf2c32d6 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@0c9cddc9853934bdf85834239f56ad0e83e61d8f - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@08542a03ec636e2b37541e3e4104ec1cdf2c32d6 + uses: angular/dev-infra/github-actions/bazel/setup@0c9cddc9853934bdf85834239f56ad0e83e61d8f - name: Install node modules run: pnpm install --frozen-lockfile - name: Generate JSON schema types @@ -44,11 +44,11 @@ jobs: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@08542a03ec636e2b37541e3e4104ec1cdf2c32d6 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@0c9cddc9853934bdf85834239f56ad0e83e61d8f - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@08542a03ec636e2b37541e3e4104ec1cdf2c32d6 + uses: angular/dev-infra/github-actions/bazel/setup@0c9cddc9853934bdf85834239f56ad0e83e61d8f - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@08542a03ec636e2b37541e3e4104ec1cdf2c32d6 + uses: angular/dev-infra/github-actions/bazel/configure-remote@0c9cddc9853934bdf85834239f56ad0e83e61d8f with: google_credential: ${{ secrets.RBE_TRUSTED_BUILDS_USER }} - name: Install node modules @@ -61,11 +61,11 @@ jobs: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@08542a03ec636e2b37541e3e4104ec1cdf2c32d6 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@0c9cddc9853934bdf85834239f56ad0e83e61d8f - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@08542a03ec636e2b37541e3e4104ec1cdf2c32d6 + uses: angular/dev-infra/github-actions/bazel/setup@0c9cddc9853934bdf85834239f56ad0e83e61d8f - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@08542a03ec636e2b37541e3e4104ec1cdf2c32d6 + uses: angular/dev-infra/github-actions/bazel/configure-remote@0c9cddc9853934bdf85834239f56ad0e83e61d8f with: google_credential: ${{ secrets.RBE_TRUSTED_BUILDS_USER }} - name: Install node modules @@ -84,13 +84,13 @@ jobs: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@08542a03ec636e2b37541e3e4104ec1cdf2c32d6 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@0c9cddc9853934bdf85834239f56ad0e83e61d8f - name: Install node modules run: pnpm install --frozen-lockfile - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@08542a03ec636e2b37541e3e4104ec1cdf2c32d6 + uses: angular/dev-infra/github-actions/bazel/setup@0c9cddc9853934bdf85834239f56ad0e83e61d8f - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@08542a03ec636e2b37541e3e4104ec1cdf2c32d6 + uses: angular/dev-infra/github-actions/bazel/configure-remote@0c9cddc9853934bdf85834239f56ad0e83e61d8f with: google_credential: ${{ secrets.RBE_TRUSTED_BUILDS_USER }} - name: Run CLI E2E tests @@ -100,11 +100,11 @@ jobs: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@08542a03ec636e2b37541e3e4104ec1cdf2c32d6 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@0c9cddc9853934bdf85834239f56ad0e83e61d8f - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@08542a03ec636e2b37541e3e4104ec1cdf2c32d6 + uses: angular/dev-infra/github-actions/bazel/setup@0c9cddc9853934bdf85834239f56ad0e83e61d8f - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@08542a03ec636e2b37541e3e4104ec1cdf2c32d6 + uses: angular/dev-infra/github-actions/bazel/configure-remote@0c9cddc9853934bdf85834239f56ad0e83e61d8f with: google_credential: ${{ secrets.RBE_TRUSTED_BUILDS_USER }} - name: Install node modules @@ -137,7 +137,7 @@ jobs: runs-on: windows-2025 steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@08542a03ec636e2b37541e3e4104ec1cdf2c32d6 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@0c9cddc9853934bdf85834239f56ad0e83e61d8f - name: Install node modules run: pnpm install --frozen-lockfile - name: Download built Windows E2E tests @@ -164,13 +164,13 @@ jobs: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@08542a03ec636e2b37541e3e4104ec1cdf2c32d6 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@0c9cddc9853934bdf85834239f56ad0e83e61d8f - name: Install node modules run: pnpm install --frozen-lockfile - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@08542a03ec636e2b37541e3e4104ec1cdf2c32d6 + uses: angular/dev-infra/github-actions/bazel/setup@0c9cddc9853934bdf85834239f56ad0e83e61d8f - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@08542a03ec636e2b37541e3e4104ec1cdf2c32d6 + uses: angular/dev-infra/github-actions/bazel/configure-remote@0c9cddc9853934bdf85834239f56ad0e83e61d8f with: google_credential: ${{ secrets.RBE_TRUSTED_BUILDS_USER }} - name: Run CLI E2E tests @@ -188,13 +188,13 @@ jobs: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@08542a03ec636e2b37541e3e4104ec1cdf2c32d6 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@0c9cddc9853934bdf85834239f56ad0e83e61d8f - name: Install node modules run: pnpm install --frozen-lockfile - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@08542a03ec636e2b37541e3e4104ec1cdf2c32d6 + uses: angular/dev-infra/github-actions/bazel/setup@0c9cddc9853934bdf85834239f56ad0e83e61d8f - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@08542a03ec636e2b37541e3e4104ec1cdf2c32d6 + uses: angular/dev-infra/github-actions/bazel/configure-remote@0c9cddc9853934bdf85834239f56ad0e83e61d8f with: google_credential: ${{ secrets.RBE_TRUSTED_BUILDS_USER }} - name: Run CLI E2E tests @@ -208,13 +208,13 @@ jobs: SAUCE_TUNNEL_IDENTIFIER: angular-cli-${{ github.workflow }}-${{ github.run_number }} steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@08542a03ec636e2b37541e3e4104ec1cdf2c32d6 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@0c9cddc9853934bdf85834239f56ad0e83e61d8f - name: Install node modules run: pnpm install --frozen-lockfile - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@08542a03ec636e2b37541e3e4104ec1cdf2c32d6 + uses: angular/dev-infra/github-actions/bazel/setup@0c9cddc9853934bdf85834239f56ad0e83e61d8f - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@08542a03ec636e2b37541e3e4104ec1cdf2c32d6 + uses: angular/dev-infra/github-actions/bazel/configure-remote@0c9cddc9853934bdf85834239f56ad0e83e61d8f with: google_credential: ${{ secrets.RBE_TRUSTED_BUILDS_USER }} - name: Run E2E Browser tests @@ -244,11 +244,11 @@ jobs: CIRCLE_BRANCH: ${{ github.ref_name }} steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@08542a03ec636e2b37541e3e4104ec1cdf2c32d6 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@0c9cddc9853934bdf85834239f56ad0e83e61d8f - name: Install node modules run: pnpm install --frozen-lockfile - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@08542a03ec636e2b37541e3e4104ec1cdf2c32d6 + uses: angular/dev-infra/github-actions/bazel/setup@0c9cddc9853934bdf85834239f56ad0e83e61d8f - run: pnpm admin snapshots --verbose env: SNAPSHOT_BUILDS_GITHUB_TOKEN: ${{ secrets.SNAPSHOT_BUILDS_GITHUB_TOKEN }} diff --git a/.github/workflows/dev-infra.yml b/.github/workflows/dev-infra.yml index 07c69ab94295..36d1cdff2ffe 100644 --- a/.github/workflows/dev-infra.yml +++ b/.github/workflows/dev-infra.yml @@ -15,21 +15,21 @@ jobs: if: github.event_name == 'pull_request_target' runs-on: ubuntu-latest steps: - - uses: angular/dev-infra/github-actions/labeling/pull-request@08542a03ec636e2b37541e3e4104ec1cdf2c32d6 + - uses: angular/dev-infra/github-actions/labeling/pull-request@0c9cddc9853934bdf85834239f56ad0e83e61d8f with: angular-robot-key: ${{ secrets.ANGULAR_ROBOT_PRIVATE_KEY }} post_approval_changes: if: github.event_name == 'pull_request_target' runs-on: ubuntu-latest steps: - - uses: angular/dev-infra/github-actions/post-approval-changes@08542a03ec636e2b37541e3e4104ec1cdf2c32d6 + - uses: angular/dev-infra/github-actions/post-approval-changes@0c9cddc9853934bdf85834239f56ad0e83e61d8f 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@08542a03ec636e2b37541e3e4104ec1cdf2c32d6 + - uses: angular/dev-infra/github-actions/labeling/issue@0c9cddc9853934bdf85834239f56ad0e83e61d8f with: angular-robot-key: ${{ secrets.ANGULAR_ROBOT_PRIVATE_KEY }} google-generative-ai-key: ${{ secrets.GOOGLE_GENERATIVE_AI_KEY }} diff --git a/.github/workflows/perf.yml b/.github/workflows/perf.yml index 8dfd2870fe4a..56b333e7865e 100644 --- a/.github/workflows/perf.yml +++ b/.github/workflows/perf.yml @@ -23,7 +23,7 @@ jobs: workflows: ${{ steps.workflows.outputs.workflows }} steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@08542a03ec636e2b37541e3e4104ec1cdf2c32d6 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@0c9cddc9853934bdf85834239f56ad0e83e61d8f - name: Install node modules run: pnpm install --frozen-lockfile - id: workflows @@ -38,9 +38,9 @@ jobs: workflow: ${{ fromJSON(needs.list.outputs.workflows) }} steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@08542a03ec636e2b37541e3e4104ec1cdf2c32d6 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@0c9cddc9853934bdf85834239f56ad0e83e61d8f - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@08542a03ec636e2b37541e3e4104ec1cdf2c32d6 + uses: angular/dev-infra/github-actions/bazel/setup@0c9cddc9853934bdf85834239f56ad0e83e61d8f - name: Install node modules run: pnpm install --frozen-lockfile # We utilize the google-github-actions/auth action to allow us to get an active credential using workflow diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml index 9a744da56722..07c4e7f9a099 100644 --- a/.github/workflows/pr.yml +++ b/.github/workflows/pr.yml @@ -34,9 +34,9 @@ jobs: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@08542a03ec636e2b37541e3e4104ec1cdf2c32d6 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@0c9cddc9853934bdf85834239f56ad0e83e61d8f - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@08542a03ec636e2b37541e3e4104ec1cdf2c32d6 + uses: angular/dev-infra/github-actions/bazel/setup@0c9cddc9853934bdf85834239f56ad0e83e61d8f - name: Setup ESLint Caching uses: actions/cache@cdf6c1fa76f9f475f3d7449005a359c84ca0f306 # v5.0.3 with: @@ -66,17 +66,17 @@ jobs: # it has been merged. run: pnpm ng-dev format changed --check ${{ github.event.pull_request.base.sha }} - name: Check Package Licenses - uses: angular/dev-infra/github-actions/linting/licenses@08542a03ec636e2b37541e3e4104ec1cdf2c32d6 + uses: angular/dev-infra/github-actions/linting/licenses@0c9cddc9853934bdf85834239f56ad0e83e61d8f build: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@08542a03ec636e2b37541e3e4104ec1cdf2c32d6 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@0c9cddc9853934bdf85834239f56ad0e83e61d8f - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@08542a03ec636e2b37541e3e4104ec1cdf2c32d6 + uses: angular/dev-infra/github-actions/bazel/setup@0c9cddc9853934bdf85834239f56ad0e83e61d8f - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@08542a03ec636e2b37541e3e4104ec1cdf2c32d6 + uses: angular/dev-infra/github-actions/bazel/configure-remote@0c9cddc9853934bdf85834239f56ad0e83e61d8f - name: Install node modules run: pnpm install --frozen-lockfile - name: Build release targets @@ -93,11 +93,11 @@ jobs: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@08542a03ec636e2b37541e3e4104ec1cdf2c32d6 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@0c9cddc9853934bdf85834239f56ad0e83e61d8f - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@08542a03ec636e2b37541e3e4104ec1cdf2c32d6 + uses: angular/dev-infra/github-actions/bazel/setup@0c9cddc9853934bdf85834239f56ad0e83e61d8f - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@08542a03ec636e2b37541e3e4104ec1cdf2c32d6 + uses: angular/dev-infra/github-actions/bazel/configure-remote@0c9cddc9853934bdf85834239f56ad0e83e61d8f - name: Install node modules run: pnpm install --frozen-lockfile - name: Run module and package tests @@ -114,13 +114,13 @@ jobs: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@08542a03ec636e2b37541e3e4104ec1cdf2c32d6 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@0c9cddc9853934bdf85834239f56ad0e83e61d8f - name: Install node modules run: pnpm install --frozen-lockfile - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@08542a03ec636e2b37541e3e4104ec1cdf2c32d6 + uses: angular/dev-infra/github-actions/bazel/setup@0c9cddc9853934bdf85834239f56ad0e83e61d8f - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@08542a03ec636e2b37541e3e4104ec1cdf2c32d6 + uses: angular/dev-infra/github-actions/bazel/configure-remote@0c9cddc9853934bdf85834239f56ad0e83e61d8f - name: Run CLI E2E tests run: pnpm bazel test --test_env=E2E_SHARD_TOTAL=6 --test_env=E2E_SHARD_INDEX=${{ matrix.shard }} --config=e2e //tests:e2e.${{ matrix.subset }}_node${{ matrix.node }} @@ -128,11 +128,11 @@ jobs: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@08542a03ec636e2b37541e3e4104ec1cdf2c32d6 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@0c9cddc9853934bdf85834239f56ad0e83e61d8f - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@08542a03ec636e2b37541e3e4104ec1cdf2c32d6 + uses: angular/dev-infra/github-actions/bazel/setup@0c9cddc9853934bdf85834239f56ad0e83e61d8f - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@08542a03ec636e2b37541e3e4104ec1cdf2c32d6 + uses: angular/dev-infra/github-actions/bazel/configure-remote@0c9cddc9853934bdf85834239f56ad0e83e61d8f - name: Install node modules run: pnpm install --frozen-lockfile - name: Build E2E tests for Windows on Linux @@ -156,7 +156,7 @@ jobs: runs-on: windows-2025 steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@08542a03ec636e2b37541e3e4104ec1cdf2c32d6 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@0c9cddc9853934bdf85834239f56ad0e83e61d8f - name: Install node modules run: pnpm install --frozen-lockfile - name: Download built Windows E2E tests @@ -183,13 +183,13 @@ jobs: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@08542a03ec636e2b37541e3e4104ec1cdf2c32d6 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@0c9cddc9853934bdf85834239f56ad0e83e61d8f - name: Install node modules run: pnpm install --frozen-lockfile - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@08542a03ec636e2b37541e3e4104ec1cdf2c32d6 + uses: angular/dev-infra/github-actions/bazel/setup@0c9cddc9853934bdf85834239f56ad0e83e61d8f - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@08542a03ec636e2b37541e3e4104ec1cdf2c32d6 + uses: angular/dev-infra/github-actions/bazel/configure-remote@0c9cddc9853934bdf85834239f56ad0e83e61d8f - name: Run CLI E2E tests run: pnpm bazel test --test_env=E2E_SHARD_TOTAL=3 --test_env=E2E_SHARD_INDEX=${{ matrix.shard }} --config=e2e //tests:e2e.${{ matrix.subset }}_node${{ matrix.node }} @@ -205,12 +205,12 @@ jobs: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@08542a03ec636e2b37541e3e4104ec1cdf2c32d6 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@0c9cddc9853934bdf85834239f56ad0e83e61d8f - name: Install node modules run: pnpm install --frozen-lockfile - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@08542a03ec636e2b37541e3e4104ec1cdf2c32d6 + uses: angular/dev-infra/github-actions/bazel/setup@0c9cddc9853934bdf85834239f56ad0e83e61d8f - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@08542a03ec636e2b37541e3e4104ec1cdf2c32d6 + uses: angular/dev-infra/github-actions/bazel/configure-remote@0c9cddc9853934bdf85834239f56ad0e83e61d8f - name: Run CLI E2E tests run: pnpm bazel test --test_env=E2E_SHARD_TOTAL=6 --test_env=E2E_SHARD_INDEX=${{ matrix.shard }} --config=e2e //tests:e2e.snapshots.${{ matrix.subset }}_node${{ matrix.node }} diff --git a/MODULE.bazel b/MODULE.bazel index 4cd6ad62f336..6b1b9e016364 100644 --- a/MODULE.bazel +++ b/MODULE.bazel @@ -19,28 +19,28 @@ bazel_dep(name = "aspect_rules_jasmine", version = "2.0.4") bazel_dep(name = "rules_angular") git_override( module_name = "rules_angular", - commit = "b930bab8deb308e14d8862d359ef064204daee2a", + commit = "24dbfaaf3ba439ff17b97f0e9aeea8574ca4b214", remote = "https://github.com/angular/rules_angular.git", ) bazel_dep(name = "devinfra") git_override( module_name = "devinfra", - commit = "08542a03ec636e2b37541e3e4104ec1cdf2c32d6", + commit = "0c9cddc9853934bdf85834239f56ad0e83e61d8f", remote = "https://github.com/angular/dev-infra.git", ) bazel_dep(name = "rules_sass") git_override( module_name = "rules_sass", - commit = "ac89385361e502fb88fdbffe9979648045d8919c", + commit = "02795527950cfc28373eecda04f2e641767a6161", remote = "https://github.com/angular/rules_sass.git", ) bazel_dep(name = "rules_browsers") git_override( module_name = "rules_browsers", - commit = "7043f918640169063a6281ab4afb61389a0aad6d", + commit = "58868ac62b0b775db0c82af0b60cfe0bdafdb35c", remote = "https://github.com/angular/rules_browsers.git", ) diff --git a/MODULE.bazel.lock b/MODULE.bazel.lock index 3cc762fc1337..9d15a50582cf 100644 --- a/MODULE.bazel.lock +++ b/MODULE.bazel.lock @@ -12,27 +12,22 @@ "https://bcr.bazel.build/modules/abseil-cpp/20240116.1/source.json": "9be551b8d4e3ef76875c0d744b5d6a504a27e3ae67bc6b28f46415fd2d2957da", "https://bcr.bazel.build/modules/aspect_bazel_lib/2.0.0/MODULE.bazel": "e118477db5c49419a88d78ebc7a2c2cea9d49600fe0f490c1903324a2c16ecd9", "https://bcr.bazel.build/modules/aspect_bazel_lib/2.14.0/MODULE.bazel": "2b31ffcc9bdc8295b2167e07a757dbbc9ac8906e7028e5170a3708cecaac119f", + "https://bcr.bazel.build/modules/aspect_bazel_lib/2.19.2/MODULE.bazel": "30dfabbfae0139b1f0036e01c201dd4c0167da3017f0b7ef3820d78e07622989", "https://bcr.bazel.build/modules/aspect_bazel_lib/2.19.3/MODULE.bazel": "253d739ba126f62a5767d832765b12b59e9f8d2bc88cc1572f4a73e46eb298ca", "https://bcr.bazel.build/modules/aspect_bazel_lib/2.22.5/MODULE.bazel": "004ba890363d05372a97248c37205ae64b6fa31047629cd2c0895a9d0c7779e8", "https://bcr.bazel.build/modules/aspect_bazel_lib/2.22.5/source.json": "ac2c3213df8f985785f1d0aeb7f0f73d5324e6e67d593d9b9470fb74a25d4a9b", "https://bcr.bazel.build/modules/aspect_bazel_lib/2.7.7/MODULE.bazel": "491f8681205e31bb57892d67442ce448cda4f472a8e6b3dc062865e29a64f89c", "https://bcr.bazel.build/modules/aspect_bazel_lib/2.8.1/MODULE.bazel": "812d2dd42f65dca362152101fbec418029cc8fd34cbad1a2fde905383d705838", - "https://bcr.bazel.build/modules/aspect_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.1/MODULE.bazel": "9b931b3e483bd8eedb6966bda6df07d801f70ccb4896231b4e5e711b5130f3aa", "https://bcr.bazel.build/modules/aspect_rules_esbuild/0.25.1/source.json": "a0b72e23ed06113f3878cb635d586b4045ef37750983467af72fe0315c3a2fcd", "https://bcr.bazel.build/modules/aspect_rules_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/3.0.2/MODULE.bazel": "c5d22d2db2a2f0cf41ec2028ded2e2543d7ff1ea9f6faf5d6b2791546ee1d6a9", "https://bcr.bazel.build/modules/aspect_rules_js/3.0.3/MODULE.bazel": "28a30e8fc33bf64a67835d64d124f6e05a7d59648dcb27b110fb3502f761e503", "https://bcr.bazel.build/modules/aspect_rules_js/3.0.3/source.json": "bb8fff9a304452e1042af9522ad1d54d6f1d1fdf71c5127deadb6fd156654193", - "https://bcr.bazel.build/modules/aspect_rules_ts/3.6.3/MODULE.bazel": "d09db394970f076176ce7bab5b5fa7f0d560fd4f30b8432ea5e2c2570505b130", - "https://bcr.bazel.build/modules/aspect_rules_ts/3.8.5/MODULE.bazel": "bcf8f0b6b9375f0f74451e2f70671efae9bb366acef8fdc04675305eaf137f06", "https://bcr.bazel.build/modules/aspect_rules_ts/3.8.6/MODULE.bazel": "371bacab13c9c36323384b56c7cabfde1982b69674e78729e1ddd1edd54d984e", - "https://bcr.bazel.build/modules/aspect_rules_ts/3.8.6/source.json": "b87a583fa2aa5c546221e3c514c883b2344c9284f27347759a5ff700deceb012", - "https://bcr.bazel.build/modules/aspect_tools_telemetry/0.2.3/MODULE.bazel": "20f53b145f40957a51077ae90b37b7ce83582a1daf9350349f0f86179e19dd0d", + "https://bcr.bazel.build/modules/aspect_rules_ts/3.8.7/MODULE.bazel": "830f8a53bb9f1139c24006a90ddc0230481326d69fa847eb00daf8eaae118724", + "https://bcr.bazel.build/modules/aspect_rules_ts/3.8.7/source.json": "95549d64e28f3e4e3648cc037cefdac01ec3b0f58fced2409c286784e82ad0f0", "https://bcr.bazel.build/modules/aspect_tools_telemetry/0.2.6/MODULE.bazel": "cafb8781ad591bc57cc765dca5fefab08cf9f65af363d162b79d49205c7f8af7", "https://bcr.bazel.build/modules/aspect_tools_telemetry/0.2.8/MODULE.bazel": "aa975a83e72bcaac62ee61ab12b788ea324a1d05c4aab28aadb202f647881679", "https://bcr.bazel.build/modules/aspect_tools_telemetry/0.3.3/MODULE.bazel": "37c764292861c2f70314efa9846bb6dbb44fc0308903b3285da6528305450183", @@ -62,7 +57,6 @@ "https://bcr.bazel.build/modules/bazel_skylib/1.2.0/MODULE.bazel": "44fe84260e454ed94ad326352a698422dbe372b21a1ac9f3eab76eb531223686", "https://bcr.bazel.build/modules/bazel_skylib/1.2.1/MODULE.bazel": "f35baf9da0efe45fa3da1696ae906eea3d615ad41e2e3def4aeb4e8bc0ef9a7a", "https://bcr.bazel.build/modules/bazel_skylib/1.3.0/MODULE.bazel": "20228b92868bf5cfc41bda7afc8a8ba2a543201851de39d990ec957b513579c5", - "https://bcr.bazel.build/modules/bazel_skylib/1.4.0/MODULE.bazel": "2ab127ef8d56a739a99bb2ce00ec4c7d1ecc7977d4370c0ca6efd0d8f03d6d99", "https://bcr.bazel.build/modules/bazel_skylib/1.4.1/MODULE.bazel": "a0dcb779424be33100dcae821e9e27e4f2901d9dfd5333efe5ac6a8d7ab75e1d", "https://bcr.bazel.build/modules/bazel_skylib/1.4.2/MODULE.bazel": "3bd40978e7a1fac911d5989e6b09d8f64921865a45822d8b09e815eaa726a651", "https://bcr.bazel.build/modules/bazel_skylib/1.5.0/MODULE.bazel": "32880f5e2945ce6a03d1fbd588e9198c0a959bb42297b2cfaf1685b7bc32e138", @@ -164,7 +158,6 @@ "https://bcr.bazel.build/modules/rules_license/1.0.0/MODULE.bazel": "a7fda60eefdf3d8c827262ba499957e4df06f659330bbe6cdbdb975b768bb65c", "https://bcr.bazel.build/modules/rules_license/1.0.0/source.json": "a52c89e54cc311196e478f8382df91c15f7a2bfdf4c6cd0e2675cc2ff0b56efb", "https://bcr.bazel.build/modules/rules_nodejs/6.2.0/MODULE.bazel": "ec27907f55eb34705adb4e8257952162a2d4c3ed0f0b3b4c3c1aad1fac7be35e", - "https://bcr.bazel.build/modules/rules_nodejs/6.3.0/MODULE.bazel": "45345e4aba35dd6e4701c1eebf5a4e67af4ed708def9ebcdc6027585b34ee52d", "https://bcr.bazel.build/modules/rules_nodejs/6.5.0/MODULE.bazel": "546d0cf79f36f9f6e080816045f97234b071c205f4542e3351bd4424282a8810", "https://bcr.bazel.build/modules/rules_nodejs/6.7.3/MODULE.bazel": "c22a48b2a0dbf05a9dc5f83837bbc24c226c1f6e618de3c3a610044c9f336056", "https://bcr.bazel.build/modules/rules_nodejs/6.7.3/source.json": "a3f966f4415a8a6545e560ee5449eac95cc633f96429d08e87c87775c72f5e09", @@ -206,7 +199,6 @@ "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", "https://bcr.bazel.build/modules/yq.bzl/0.1.1/MODULE.bazel": "9039681f9bcb8958ee2c87ffc74bdafba9f4369096a2b5634b88abc0eaefa072", - "https://bcr.bazel.build/modules/yq.bzl/0.2.0/MODULE.bazel": "6f3a675677db8885be4d607fde14cc51829715e3a879fb016eb9bf336786ce6d", "https://bcr.bazel.build/modules/yq.bzl/0.3.2/MODULE.bazel": "0384efa70e8033d842ea73aa4b7199fa099709e236a7264345c03937166670b6", "https://bcr.bazel.build/modules/yq.bzl/0.3.5/MODULE.bazel": "130c603e54be717bdf84100210f06598a0d2b4b4e01888fb01b70f50f41767ec", "https://bcr.bazel.build/modules/yq.bzl/0.3.5/source.json": "1ae7bdc03cb26aaa8bd2bceadf65e90d90f0b2d03008ba9a0564da2e21396c39", @@ -435,8 +427,8 @@ }, "@@aspect_rules_ts+//ts:extensions.bzl%ext": { "general": { - "bzlTransitiveDigest": "0PprNyRYWkfOXKNvI8gaaD69N+xwJfjp1B9PAbgTdTI=", - "usagesDigest": "GXjk1/lLMGbjULA0h8RtzouEhOhStQEDuoMHoClwtqc=", + "bzlTransitiveDigest": "GbfZLeEI0W26fAQ89dUljyLGSAkzkr3CkF+VDQ0IFlI=", + "usagesDigest": "NEcSh/CygeQtMiUvLufm5mltdm7VYYMKhoN+swz5Nb8=", "recordedFileInputs": {}, "recordedDirentsInputs": {}, "envVariables": {}, @@ -454,8 +446,8 @@ "rules_angular_npm_typescript": { "repoRuleId": "@@aspect_rules_ts+//ts/private:npm_repositories.bzl%http_archive_version", "attributes": { - "version": "5.9.2", - "integrity": "sha512-CWBzXQrc/qOkhidw1OzBTQuYRbfyxDXJMVJ1XNwUHGROVmuaeiEm3OslpZ1RV96d7SKKjZKrSJu3+t/xlw3R9A==", + "version": "5.9.3", + "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", "urls": [ "https://registry.npmjs.org/typescript/-/typescript-{}.tgz" ] @@ -474,8 +466,8 @@ "npm_rules_browsers_typescript": { "repoRuleId": "@@aspect_rules_ts+//ts/private:npm_repositories.bzl%http_archive_version", "attributes": { - "version": "5.8.2", - "integrity": "sha512-aJn6wq13/afZp/jT9QZmwEjDqqvSGp1VT5GVg+f/t6/oVyrgXM6BY1h9BRh/O5p3PlUPAe+WuiEZOmb/49RqoQ==", + "version": "5.9.3", + "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", "urls": [ "https://registry.npmjs.org/typescript/-/typescript-{}.tgz" ] @@ -499,7 +491,7 @@ "@@aspect_tools_telemetry+//:extension.bzl%telemetry": { "general": { "bzlTransitiveDigest": "cl5A2O84vDL6Tt+Qga8FCj1DUDGqn+e7ly5rZ+4xvcc=", - "usagesDigest": "8ec8vDJXeev7aw6Ksb2ghlIJcrGrrXGWjUyizRQ4qhA=", + "usagesDigest": "Htk4MyL4d05V7Kpv8OWMQ8y+7IkUx9BOmnhlLXYMO80=", "recordedFileInputs": {}, "recordedDirentsInputs": {}, "envVariables": {}, @@ -509,7 +501,7 @@ "attributes": { "deps": { "aspect_rules_js": "3.0.3", - "aspect_rules_ts": "3.8.6", + "aspect_rules_ts": "3.8.7", "aspect_rules_esbuild": "0.25.1", "aspect_rules_jasmine": "2.0.4", "aspect_tools_telemetry": "0.3.3" @@ -568,7 +560,7 @@ "@@rules_angular+//setup:extensions.bzl%rules_angular": { "general": { "bzlTransitiveDigest": "fkaH7HMicL3g7/NDaFzlq39kcLopMyQ3KdbDn+5CRzA=", - "usagesDigest": "ZinuLP7QHxaW5achD0Vz19qElMu4r2LvGvh96Z5zYlA=", + "usagesDigest": "it5nR/3UaQWj2eaaMj+EnoZuL2z/AeTuz7uOnqd+nxo=", "recordedFileInputs": {}, "recordedDirentsInputs": {}, "envVariables": {}, @@ -584,7 +576,7 @@ "repoRuleId": "@@rules_angular+//setup:repositories.bzl%configurable_deps_repo", "attributes": { "angular_compiler_cli": "@@rules_angular+//:node_modules/@angular/compiler-cli", - "typescript": "@@rules_angular+//:node_modules/typescript-local" + "typescript": "@@rules_angular+//:node_modules/typescript" } }, "dev_infra_rules_angular_configurable_deps": { @@ -960,7 +952,7 @@ "@@rules_nodejs+//nodejs:extensions.bzl%node": { "general": { "bzlTransitiveDigest": "4pUxCNc22K4I+6+4Nxu52Hur12tFRfa1JMsN5mdDv60=", - "usagesDigest": "O/o6zGuiN7DpORxvoqtlIhpLwDYSAOWlPpMvtzBCjBs=", + "usagesDigest": "X7Kxcfcdl7MhnOnNAIrP4Jopm219NlA68akZFd9dFGo=", "recordedFileInputs": {}, "recordedDirentsInputs": {}, "envVariables": {}, diff --git a/package.json b/package.json index 88595562d334..905d02ca4d32 100644 --- a/package.json +++ b/package.json @@ -42,20 +42,20 @@ }, "homepage": "https://github.com/angular/angular-cli", "devDependencies": { - "@angular/animations": "22.0.0-next.1", - "@angular/cdk": "21.3.0-next.0", - "@angular/common": "22.0.0-next.1", - "@angular/compiler": "22.0.0-next.1", - "@angular/compiler-cli": "22.0.0-next.1", - "@angular/core": "22.0.0-next.1", - "@angular/forms": "22.0.0-next.1", - "@angular/localize": "22.0.0-next.1", - "@angular/material": "21.3.0-next.0", - "@angular/ng-dev": "https://github.com/angular/dev-infra-private-ng-dev-builds.git#06cf48df3a70d5a314336359dd47722724f69439", - "@angular/platform-browser": "22.0.0-next.1", - "@angular/platform-server": "22.0.0-next.1", - "@angular/router": "22.0.0-next.1", - "@angular/service-worker": "22.0.0-next.1", + "@angular/animations": "22.0.0-next.3", + "@angular/cdk": "22.0.0-next.0", + "@angular/common": "22.0.0-next.3", + "@angular/compiler": "22.0.0-next.3", + "@angular/compiler-cli": "22.0.0-next.3", + "@angular/core": "22.0.0-next.3", + "@angular/forms": "22.0.0-next.3", + "@angular/localize": "22.0.0-next.3", + "@angular/material": "22.0.0-next.0", + "@angular/ng-dev": "https://github.com/angular/dev-infra-private-ng-dev-builds.git#ddbbfb8f2802fcfb85c8bf6b2f78a5ea120137e7", + "@angular/platform-browser": "22.0.0-next.3", + "@angular/platform-server": "22.0.0-next.3", + "@angular/router": "22.0.0-next.3", + "@angular/service-worker": "22.0.0-next.3", "@babel/core": "7.29.0", "@bazel/bazelisk": "1.28.1", "@bazel/buildifier": "8.2.1", diff --git a/packages/angular/ssr/package.json b/packages/angular/ssr/package.json index 762c27f282bf..0d27e982bfe4 100644 --- a/packages/angular/ssr/package.json +++ b/packages/angular/ssr/package.json @@ -29,12 +29,12 @@ }, "devDependencies": { "@angular-devkit/schematics": "workspace:*", - "@angular/common": "22.0.0-next.1", - "@angular/compiler": "22.0.0-next.1", - "@angular/core": "22.0.0-next.1", - "@angular/platform-browser": "22.0.0-next.1", - "@angular/platform-server": "22.0.0-next.1", - "@angular/router": "22.0.0-next.1", + "@angular/common": "22.0.0-next.3", + "@angular/compiler": "22.0.0-next.3", + "@angular/core": "22.0.0-next.3", + "@angular/platform-browser": "22.0.0-next.3", + "@angular/platform-server": "22.0.0-next.3", + "@angular/router": "22.0.0-next.3", "@schematics/angular": "workspace:*", "beasties": "0.4.1" }, diff --git a/packages/ngtools/webpack/package.json b/packages/ngtools/webpack/package.json index 8a3441c99a43..300573b6a8df 100644 --- a/packages/ngtools/webpack/package.json +++ b/packages/ngtools/webpack/package.json @@ -27,8 +27,8 @@ }, "devDependencies": { "@angular-devkit/core": "workspace:0.0.0-PLACEHOLDER", - "@angular/compiler": "22.0.0-next.1", - "@angular/compiler-cli": "22.0.0-next.1", + "@angular/compiler": "22.0.0-next.3", + "@angular/compiler-cli": "22.0.0-next.3", "typescript": "6.0.1-rc", "webpack": "5.105.4" } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 5c6587427d36..00595e3ed192 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -20,47 +20,47 @@ importers: built: true devDependencies: '@angular/animations': - specifier: 22.0.0-next.1 - version: 22.0.0-next.1(@angular/core@22.0.0-next.1(@angular/compiler@22.0.0-next.1)(rxjs@7.8.2)(zone.js@0.16.1)) + specifier: 22.0.0-next.3 + version: 22.0.0-next.3(@angular/core@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1)) '@angular/cdk': - specifier: 21.3.0-next.0 - version: 21.3.0-next.0(@angular/common@22.0.0-next.1(@angular/core@22.0.0-next.1(@angular/compiler@22.0.0-next.1)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.1(@angular/compiler@22.0.0-next.1)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@22.0.0-next.1(@angular/animations@22.0.0-next.1(@angular/core@22.0.0-next.1(@angular/compiler@22.0.0-next.1)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@22.0.0-next.1(@angular/core@22.0.0-next.1(@angular/compiler@22.0.0-next.1)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.1(@angular/compiler@22.0.0-next.1)(rxjs@7.8.2)(zone.js@0.16.1)))(rxjs@7.8.2) + specifier: 22.0.0-next.0 + version: 22.0.0-next.0(@angular/common@22.0.0-next.3(@angular/core@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@22.0.0-next.3(@angular/animations@22.0.0-next.3(@angular/core@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@22.0.0-next.3(@angular/core@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1)))(rxjs@7.8.2) '@angular/common': - specifier: 22.0.0-next.1 - version: 22.0.0-next.1(@angular/core@22.0.0-next.1(@angular/compiler@22.0.0-next.1)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2) + specifier: 22.0.0-next.3 + version: 22.0.0-next.3(@angular/core@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2) '@angular/compiler': - specifier: 22.0.0-next.1 - version: 22.0.0-next.1 + specifier: 22.0.0-next.3 + version: 22.0.0-next.3 '@angular/compiler-cli': - specifier: 22.0.0-next.1 - version: 22.0.0-next.1(@angular/compiler@22.0.0-next.1)(typescript@6.0.1-rc) + specifier: 22.0.0-next.3 + version: 22.0.0-next.3(@angular/compiler@22.0.0-next.3)(typescript@6.0.1-rc) '@angular/core': - specifier: 22.0.0-next.1 - version: 22.0.0-next.1(@angular/compiler@22.0.0-next.1)(rxjs@7.8.2)(zone.js@0.16.1) + specifier: 22.0.0-next.3 + version: 22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1) '@angular/forms': - specifier: 22.0.0-next.1 - version: 22.0.0-next.1(@angular/common@22.0.0-next.1(@angular/core@22.0.0-next.1(@angular/compiler@22.0.0-next.1)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.1(@angular/compiler@22.0.0-next.1)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@22.0.0-next.1(@angular/animations@22.0.0-next.1(@angular/core@22.0.0-next.1(@angular/compiler@22.0.0-next.1)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@22.0.0-next.1(@angular/core@22.0.0-next.1(@angular/compiler@22.0.0-next.1)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.1(@angular/compiler@22.0.0-next.1)(rxjs@7.8.2)(zone.js@0.16.1)))(rxjs@7.8.2) + specifier: 22.0.0-next.3 + version: 22.0.0-next.3(@angular/common@22.0.0-next.3(@angular/core@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@22.0.0-next.3(@angular/animations@22.0.0-next.3(@angular/core@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@22.0.0-next.3(@angular/core@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1)))(rxjs@7.8.2) '@angular/localize': - specifier: 22.0.0-next.1 - version: 22.0.0-next.1(@angular/compiler-cli@22.0.0-next.1(@angular/compiler@22.0.0-next.1)(typescript@6.0.1-rc))(@angular/compiler@22.0.0-next.1) + specifier: 22.0.0-next.3 + version: 22.0.0-next.3(@angular/compiler-cli@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(typescript@6.0.1-rc))(@angular/compiler@22.0.0-next.3) '@angular/material': - specifier: 21.3.0-next.0 - version: 21.3.0-next.0(2645b915ebf9074f759b05c1e2af589e) + specifier: 22.0.0-next.0 + version: 22.0.0-next.0(2d75345887a5a4c2bc113233c009d4e6) '@angular/ng-dev': - specifier: https://github.com/angular/dev-infra-private-ng-dev-builds.git#06cf48df3a70d5a314336359dd47722724f69439 - version: https://codeload.github.com/angular/dev-infra-private-ng-dev-builds/tar.gz/06cf48df3a70d5a314336359dd47722724f69439(@modelcontextprotocol/sdk@1.27.1(zod@4.3.6)) + specifier: https://github.com/angular/dev-infra-private-ng-dev-builds.git#ddbbfb8f2802fcfb85c8bf6b2f78a5ea120137e7 + version: https://codeload.github.com/angular/dev-infra-private-ng-dev-builds/tar.gz/ddbbfb8f2802fcfb85c8bf6b2f78a5ea120137e7(@modelcontextprotocol/sdk@1.27.1(zod@4.3.6)) '@angular/platform-browser': - specifier: 22.0.0-next.1 - version: 22.0.0-next.1(@angular/animations@22.0.0-next.1(@angular/core@22.0.0-next.1(@angular/compiler@22.0.0-next.1)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@22.0.0-next.1(@angular/core@22.0.0-next.1(@angular/compiler@22.0.0-next.1)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.1(@angular/compiler@22.0.0-next.1)(rxjs@7.8.2)(zone.js@0.16.1)) + specifier: 22.0.0-next.3 + version: 22.0.0-next.3(@angular/animations@22.0.0-next.3(@angular/core@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@22.0.0-next.3(@angular/core@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1)) '@angular/platform-server': - specifier: 22.0.0-next.1 - version: 22.0.0-next.1(@angular/common@22.0.0-next.1(@angular/core@22.0.0-next.1(@angular/compiler@22.0.0-next.1)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/compiler@22.0.0-next.1)(@angular/core@22.0.0-next.1(@angular/compiler@22.0.0-next.1)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@22.0.0-next.1(@angular/animations@22.0.0-next.1(@angular/core@22.0.0-next.1(@angular/compiler@22.0.0-next.1)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@22.0.0-next.1(@angular/core@22.0.0-next.1(@angular/compiler@22.0.0-next.1)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.1(@angular/compiler@22.0.0-next.1)(rxjs@7.8.2)(zone.js@0.16.1)))(rxjs@7.8.2) + specifier: 22.0.0-next.3 + version: 22.0.0-next.3(@angular/common@22.0.0-next.3(@angular/core@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/compiler@22.0.0-next.3)(@angular/core@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@22.0.0-next.3(@angular/animations@22.0.0-next.3(@angular/core@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@22.0.0-next.3(@angular/core@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1)))(rxjs@7.8.2) '@angular/router': - specifier: 22.0.0-next.1 - version: 22.0.0-next.1(@angular/common@22.0.0-next.1(@angular/core@22.0.0-next.1(@angular/compiler@22.0.0-next.1)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.1(@angular/compiler@22.0.0-next.1)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@22.0.0-next.1(@angular/animations@22.0.0-next.1(@angular/core@22.0.0-next.1(@angular/compiler@22.0.0-next.1)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@22.0.0-next.1(@angular/core@22.0.0-next.1(@angular/compiler@22.0.0-next.1)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.1(@angular/compiler@22.0.0-next.1)(rxjs@7.8.2)(zone.js@0.16.1)))(rxjs@7.8.2) + specifier: 22.0.0-next.3 + version: 22.0.0-next.3(@angular/common@22.0.0-next.3(@angular/core@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@22.0.0-next.3(@angular/animations@22.0.0-next.3(@angular/core@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@22.0.0-next.3(@angular/core@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1)))(rxjs@7.8.2) '@angular/service-worker': - specifier: 22.0.0-next.1 - version: 22.0.0-next.1(@angular/core@22.0.0-next.1(@angular/compiler@22.0.0-next.1)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2) + specifier: 22.0.0-next.3 + version: 22.0.0-next.3(@angular/core@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2) '@babel/core': specifier: 7.29.0 version: 7.29.0 @@ -312,7 +312,7 @@ importers: version: link:../../../packages/angular/ssr '@vitest/coverage-v8': specifier: 4.0.18 - version: 4.0.18(vitest@4.0.18(@opentelemetry/api@1.9.0)(@types/node@24.11.0)(jiti@2.6.1)(jsdom@28.1.0)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)) + version: 4.0.18(vitest@4.0.18(@opentelemetry/api@1.9.0)(@types/node@24.12.0)(jiti@2.6.1)(jsdom@28.1.0)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)) browser-sync: specifier: 3.0.4 version: 3.0.4(bufferutil@4.1.0)(utf-8-validate@6.0.6) @@ -321,13 +321,13 @@ importers: version: 28.1.0 ng-packagr: specifier: 22.0.0-next.0 - version: 22.0.0-next.0(@angular/compiler-cli@22.0.0-next.1(@angular/compiler@22.0.0-next.1)(typescript@6.0.1-rc))(tslib@2.8.1)(typescript@6.0.1-rc) + version: 22.0.0-next.0(@angular/compiler-cli@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(typescript@6.0.1-rc))(tslib@2.8.1)(typescript@6.0.1-rc) rxjs: specifier: 7.8.2 version: 7.8.2 vitest: specifier: 4.0.18 - version: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@24.11.0)(jiti@2.6.1)(jsdom@28.1.0)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) + version: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@24.12.0)(jiti@2.6.1)(jsdom@28.1.0)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) packages/angular/build: dependencies: @@ -348,10 +348,10 @@ importers: version: 7.24.7 '@inquirer/confirm': specifier: 6.0.8 - version: 6.0.8(@types/node@24.11.0) + version: 6.0.8(@types/node@24.12.0) '@vitejs/plugin-basic-ssl': specifier: 2.1.4 - version: 2.1.4(vite@7.3.1(@types/node@24.11.0)(jiti@2.6.1)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)) + version: 2.1.4(vite@7.3.1(@types/node@24.12.0)(jiti@2.6.1)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)) beasties: specifier: 0.4.1 version: 0.4.1 @@ -405,7 +405,7 @@ importers: version: 0.2.15 vite: specifier: 7.3.1 - version: 7.3.1(@types/node@24.11.0)(jiti@2.6.1)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) + version: 7.3.1(@types/node@24.12.0)(jiti@2.6.1)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) watchpack: specifier: 2.5.1 version: 2.5.1 @@ -424,7 +424,7 @@ importers: version: 4.4.2 ng-packagr: specifier: 22.0.0-next.0 - version: 22.0.0-next.0(@angular/compiler-cli@22.0.0-next.1(@angular/compiler@22.0.0-next.1)(typescript@6.0.1-rc))(tslib@2.8.1)(typescript@6.0.1-rc) + version: 22.0.0-next.0(@angular/compiler-cli@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(typescript@6.0.1-rc))(tslib@2.8.1)(typescript@6.0.1-rc) postcss: specifier: 8.5.8 version: 8.5.8 @@ -433,7 +433,7 @@ importers: version: 7.8.2 vitest: specifier: 4.0.18 - version: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@24.11.0)(jiti@2.6.1)(jsdom@28.1.0)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) + version: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@24.12.0)(jiti@2.6.1)(jsdom@28.1.0)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) optionalDependencies: lmdb: specifier: 3.5.1 @@ -452,10 +452,10 @@ importers: version: link:../../angular_devkit/schematics '@inquirer/prompts': specifier: 8.3.0 - version: 8.3.0(@types/node@24.11.0) + version: 8.3.0(@types/node@24.12.0) '@listr2/prompt-adapter-inquirer': specifier: 4.2.1 - version: 4.2.1(@inquirer/prompts@8.3.0(@types/node@24.11.0))(@types/node@24.11.0)(listr2@10.2.1) + version: 4.2.1(@inquirer/prompts@8.3.0(@types/node@24.12.0))(@types/node@24.12.0)(listr2@10.2.1) '@modelcontextprotocol/sdk': specifier: 1.27.1 version: 1.27.1(zod@4.3.6) @@ -518,23 +518,23 @@ importers: specifier: workspace:* version: link:../../angular_devkit/schematics '@angular/common': - specifier: 22.0.0-next.1 - version: 22.0.0-next.1(@angular/core@22.0.0-next.1(@angular/compiler@22.0.0-next.1)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2) + specifier: 22.0.0-next.3 + version: 22.0.0-next.3(@angular/core@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2) '@angular/compiler': - specifier: 22.0.0-next.1 - version: 22.0.0-next.1 + specifier: 22.0.0-next.3 + version: 22.0.0-next.3 '@angular/core': - specifier: 22.0.0-next.1 - version: 22.0.0-next.1(@angular/compiler@22.0.0-next.1)(rxjs@7.8.2)(zone.js@0.16.1) + specifier: 22.0.0-next.3 + version: 22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1) '@angular/platform-browser': - specifier: 22.0.0-next.1 - version: 22.0.0-next.1(@angular/animations@22.0.0-next.1(@angular/core@22.0.0-next.1(@angular/compiler@22.0.0-next.1)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@22.0.0-next.1(@angular/core@22.0.0-next.1(@angular/compiler@22.0.0-next.1)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.1(@angular/compiler@22.0.0-next.1)(rxjs@7.8.2)(zone.js@0.16.1)) + specifier: 22.0.0-next.3 + version: 22.0.0-next.3(@angular/animations@22.0.0-next.3(@angular/core@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@22.0.0-next.3(@angular/core@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1)) '@angular/platform-server': - specifier: 22.0.0-next.1 - version: 22.0.0-next.1(@angular/common@22.0.0-next.1(@angular/core@22.0.0-next.1(@angular/compiler@22.0.0-next.1)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/compiler@22.0.0-next.1)(@angular/core@22.0.0-next.1(@angular/compiler@22.0.0-next.1)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@22.0.0-next.1(@angular/animations@22.0.0-next.1(@angular/core@22.0.0-next.1(@angular/compiler@22.0.0-next.1)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@22.0.0-next.1(@angular/core@22.0.0-next.1(@angular/compiler@22.0.0-next.1)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.1(@angular/compiler@22.0.0-next.1)(rxjs@7.8.2)(zone.js@0.16.1)))(rxjs@7.8.2) + specifier: 22.0.0-next.3 + version: 22.0.0-next.3(@angular/common@22.0.0-next.3(@angular/core@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/compiler@22.0.0-next.3)(@angular/core@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@22.0.0-next.3(@angular/animations@22.0.0-next.3(@angular/core@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@22.0.0-next.3(@angular/core@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1)))(rxjs@7.8.2) '@angular/router': - specifier: 22.0.0-next.1 - version: 22.0.0-next.1(@angular/common@22.0.0-next.1(@angular/core@22.0.0-next.1(@angular/compiler@22.0.0-next.1)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.1(@angular/compiler@22.0.0-next.1)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@22.0.0-next.1(@angular/animations@22.0.0-next.1(@angular/core@22.0.0-next.1(@angular/compiler@22.0.0-next.1)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@22.0.0-next.1(@angular/core@22.0.0-next.1(@angular/compiler@22.0.0-next.1)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.1(@angular/compiler@22.0.0-next.1)(rxjs@7.8.2)(zone.js@0.16.1)))(rxjs@7.8.2) + specifier: 22.0.0-next.3 + version: 22.0.0-next.3(@angular/common@22.0.0-next.3(@angular/core@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@22.0.0-next.3(@angular/animations@22.0.0-next.3(@angular/core@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@22.0.0-next.3(@angular/core@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1)))(rxjs@7.8.2) '@schematics/angular': specifier: workspace:* version: link:../../schematics/angular @@ -721,7 +721,7 @@ importers: version: 3.0.4(bufferutil@4.1.0)(utf-8-validate@6.0.6) ng-packagr: specifier: 22.0.0-next.0 - version: 22.0.0-next.0(@angular/compiler-cli@22.0.0-next.1(@angular/compiler@22.0.0-next.1)(typescript@6.0.1-rc))(tslib@2.8.1)(typescript@6.0.1-rc) + version: 22.0.0-next.0(@angular/compiler-cli@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(typescript@6.0.1-rc))(tslib@2.8.1)(typescript@6.0.1-rc) undici: specifier: 7.22.0 version: 7.22.0 @@ -805,7 +805,7 @@ importers: version: link:../schematics '@inquirer/prompts': specifier: 8.3.0 - version: 8.3.0(@types/node@24.11.0) + version: 8.3.0(@types/node@24.12.0) packages/ngtools/webpack: devDependencies: @@ -813,11 +813,11 @@ importers: specifier: workspace:0.0.0-PLACEHOLDER version: link:../../angular_devkit/core '@angular/compiler': - specifier: 22.0.0-next.1 - version: 22.0.0-next.1 + specifier: 22.0.0-next.3 + version: 22.0.0-next.3 '@angular/compiler-cli': - specifier: 22.0.0-next.1 - version: 22.0.0-next.1(@angular/compiler@22.0.0-next.1)(typescript@6.0.1-rc) + specifier: 22.0.0-next.3 + version: 22.0.0-next.3(@angular/compiler@22.0.0-next.3)(typescript@6.0.1-rc) typescript: specifier: 6.0.1-rc version: 6.0.1-rc @@ -926,47 +926,47 @@ packages: resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} engines: {node: '>=6.0.0'} - '@angular/animations@22.0.0-next.1': - resolution: {integrity: sha512-bJOvi+jo27Zqn4scMNmucsa5RKmXEQDwrIBQCC4w6pzLWH0Q/PXYfD7EI0ssFLcdDJW2DPB8uiSePYlh7UBOFQ==} + '@angular/animations@22.0.0-next.3': + resolution: {integrity: sha512-xrlr33kLDHmcBq0VzFGVmRUgpezFaO55UkUSVdU2hgeRdFLaQ2R8tmxB3nRJRZWsTM4z2pqjl5+VFcmUtip9VQ==} engines: {node: ^22.22.0 || >=24.13.1} peerDependencies: - '@angular/core': 22.0.0-next.1 + '@angular/core': 22.0.0-next.3 - '@angular/cdk@21.3.0-next.0': - resolution: {integrity: sha512-G5EDENTxLaMCZ35DO3FVbplU05r5NPm6bWLp88xrNGc8u3a9cwswp5fNwSVcW3E7c1VuvCC4tTsPmPYI1DycGw==} + '@angular/cdk@22.0.0-next.0': + resolution: {integrity: sha512-ca6pMpN9tAupIyr8LDaqpVlBN9beGL91unXH95pGfsngTCWcz7mh3IYVQ2CJ24e9O+2Lp/gtLYhvzOpIUpiV3A==} 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': ^22.0.0-0 || ^22.1.0-0 || ^22.2.0-0 || ^22.3.0-0 || ^23.0.0-0 + '@angular/core': ^22.0.0-0 || ^22.1.0-0 || ^22.2.0-0 || ^22.3.0-0 || ^23.0.0-0 + '@angular/platform-browser': ^22.0.0-0 || ^22.1.0-0 || ^22.2.0-0 || ^22.3.0-0 || ^23.0.0-0 rxjs: ^6.5.3 || ^7.4.0 - '@angular/common@22.0.0-next.1': - resolution: {integrity: sha512-yzlrH6vjdiLhzvSbbwNqiINFVU4TnAIVTDH7wRRayV/c/niGrY/C9AjTqy+/H8rDw94oUbgskplOe8qQGii6Gw==} + '@angular/common@22.0.0-next.3': + resolution: {integrity: sha512-nbk6G9lId68X1JJ2XDLzAzeQYnMqfW+5A9k2Q98MltEGxX6By2yyKr4//Eycg4mhs8X7LTLK/kx4QxItSK161w==} engines: {node: ^22.22.0 || >=24.13.1} peerDependencies: - '@angular/core': 22.0.0-next.1 + '@angular/core': 22.0.0-next.3 rxjs: ^6.5.3 || ^7.4.0 - '@angular/compiler-cli@22.0.0-next.1': - resolution: {integrity: sha512-sbh3d2iG7YMBW2H0pG8jnySjVJz2SVycAQ7D+vP2E2DTaJGDDu9SQyr1MBhM8S81u8QV0u1050wech/EFu+Ukg==} + '@angular/compiler-cli@22.0.0-next.3': + resolution: {integrity: sha512-li56XaAcjmPSG+WzwQXv07W1htKDo6HtZ8h4IQm+JGvYNkfcJiKJYbfZUL5ZSxEzHa/eiKoAODsLXR0lkYboyw==} engines: {node: ^22.22.0 || >=24.13.1} hasBin: true peerDependencies: - '@angular/compiler': 22.0.0-next.1 + '@angular/compiler': 22.0.0-next.3 typescript: '>=5.9 <6.1' peerDependenciesMeta: typescript: optional: true - '@angular/compiler@22.0.0-next.1': - resolution: {integrity: sha512-qbDEy0RkRy3M8xQj2O5ZVWaSJsm6KqZiz6BRMAvydX3otMImr6ELOuBbAHLGdZ3R1LaVrYeNnSsgQez7Z7Skfw==} + '@angular/compiler@22.0.0-next.3': + resolution: {integrity: sha512-b1z3WTBk0nysyZ9RnZG7EeNiOOr+rpm7/a8KedjJz8+dEeOP6Q+MN3JN4oTvLbU/GaN//560+TAc5MuUY1AKPQ==} engines: {node: ^22.22.0 || >=24.13.1} - '@angular/core@22.0.0-next.1': - resolution: {integrity: sha512-/41VYZpvV/G/HZ4w+nVp5Oywjjy+29JmXiwHMIvcFO47IcT8LVM7jfags/BNYVTk/UjT4HllMi/DWKFAPf3fwA==} + '@angular/core@22.0.0-next.3': + resolution: {integrity: sha512-F0zES0ziee/f429vYuOMe/NokRrEk84IGP9Qtfc0zVoFkzcHdZbFW8o3Eg/F5WI1BxIA4YhEXg33nDN5tEA+AQ==} engines: {node: ^22.22.0 || >=24.13.1} peerDependencies: - '@angular/compiler': 22.0.0-next.1 + '@angular/compiler': 22.0.0-next.3 rxjs: ^6.5.3 || ^7.4.0 zone.js: ~0.15.0 || ~0.16.0 peerDependenciesMeta: @@ -975,74 +975,74 @@ packages: zone.js: optional: true - '@angular/forms@22.0.0-next.1': - resolution: {integrity: sha512-yI8XGFrVMx2W+tKqlv6svylitvrh2TlwE3z3kZzGQx+SVgz9P53bbnOKwLjtAymudY1P6KTlQmeNasgnsvwmMw==} + '@angular/forms@22.0.0-next.3': + resolution: {integrity: sha512-Af8viVslusUK/Jn8xJ4UGHg7nEQoTBixkzppfHBQKZNrDlMFNak1LD+QDE8AWV+mTGi7OXpoF8zNPz9hJTYs8g==} engines: {node: ^22.22.0 || >=24.13.1} peerDependencies: - '@angular/common': 22.0.0-next.1 - '@angular/core': 22.0.0-next.1 - '@angular/platform-browser': 22.0.0-next.1 + '@angular/common': 22.0.0-next.3 + '@angular/core': 22.0.0-next.3 + '@angular/platform-browser': 22.0.0-next.3 rxjs: ^6.5.3 || ^7.4.0 - '@angular/localize@22.0.0-next.1': - resolution: {integrity: sha512-3L+IPu+4Kx7MB4ZbFGOX65MCBW/G0NlQeBfyXyU3U5CwHCU6AEyxn+1kU5dfci6ZkCKgdiISEZyWr3tpkFoppg==} + '@angular/localize@22.0.0-next.3': + resolution: {integrity: sha512-BnfYtZe6ptXZKx84NkmPOg8zDFRx+p8MAWLUq0sZmsX8Jc16FrHGBli3KDaxL0Mrs2TMtKsrBSovTm077uOmDg==} engines: {node: ^22.22.0 || >=24.13.1} hasBin: true peerDependencies: - '@angular/compiler': 22.0.0-next.1 - '@angular/compiler-cli': 22.0.0-next.1 + '@angular/compiler': 22.0.0-next.3 + '@angular/compiler-cli': 22.0.0-next.3 - '@angular/material@21.3.0-next.0': - resolution: {integrity: sha512-rUR6LNR5pe0xOv3llqaXA3x08w/CXCihFRvmxFotvZ12lxm6bNw9sYGz60V6fVYYOYKI96G4Uylz0PlZdiHAYQ==} + '@angular/material@22.0.0-next.0': + resolution: {integrity: sha512-kI9DRWyARS0p45zSGLqdvDRT3+QRo/kBg11ieewmx9n+o3zCI+vOqVD7wyUA9vFARDSIR5SLRTjVu2QSaGPWgQ==} peerDependencies: - '@angular/cdk': 21.3.0-next.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': 22.0.0-next.0 + '@angular/common': ^22.0.0-0 || ^22.1.0-0 || ^22.2.0-0 || ^22.3.0-0 || ^23.0.0-0 + '@angular/core': ^22.0.0-0 || ^22.1.0-0 || ^22.2.0-0 || ^22.3.0-0 || ^23.0.0-0 + '@angular/forms': ^22.0.0-0 || ^22.1.0-0 || ^22.2.0-0 || ^22.3.0-0 || ^23.0.0-0 + '@angular/platform-browser': ^22.0.0-0 || ^22.1.0-0 || ^22.2.0-0 || ^22.3.0-0 || ^23.0.0-0 rxjs: ^6.5.3 || ^7.4.0 - '@angular/ng-dev@https://codeload.github.com/angular/dev-infra-private-ng-dev-builds/tar.gz/06cf48df3a70d5a314336359dd47722724f69439': - resolution: {tarball: https://codeload.github.com/angular/dev-infra-private-ng-dev-builds/tar.gz/06cf48df3a70d5a314336359dd47722724f69439} - version: 0.0.0-08542a03ec636e2b37541e3e4104ec1cdf2c32d6 + '@angular/ng-dev@https://codeload.github.com/angular/dev-infra-private-ng-dev-builds/tar.gz/ddbbfb8f2802fcfb85c8bf6b2f78a5ea120137e7': + resolution: {tarball: https://codeload.github.com/angular/dev-infra-private-ng-dev-builds/tar.gz/ddbbfb8f2802fcfb85c8bf6b2f78a5ea120137e7} + version: 0.0.0-0c9cddc9853934bdf85834239f56ad0e83e61d8f hasBin: true - '@angular/platform-browser@22.0.0-next.1': - resolution: {integrity: sha512-n7tevqK5XQGn9iga3nZjtbFA6nGtUZJvuJI+iCN3epZQ9N+IXPrGJzVe1Nx1ys+lGG/RxB8fbTf1yqEXUR/7aQ==} + '@angular/platform-browser@22.0.0-next.3': + resolution: {integrity: sha512-9QmGhkP26km+hVxuy/2x5xHdEGRzb/SCrPrJBBWPgIQ7L3IoXzoE2ElnvlGEfgJNdWFblHN3Dpymc8m0afz0mA==} engines: {node: ^22.22.0 || >=24.13.1} peerDependencies: - '@angular/animations': 22.0.0-next.1 - '@angular/common': 22.0.0-next.1 - '@angular/core': 22.0.0-next.1 + '@angular/animations': 22.0.0-next.3 + '@angular/common': 22.0.0-next.3 + '@angular/core': 22.0.0-next.3 peerDependenciesMeta: '@angular/animations': optional: true - '@angular/platform-server@22.0.0-next.1': - resolution: {integrity: sha512-eFh+ITBnL8tx/fIQeSjQ2tCRKtiCggmx4Ez6D2uQPEYkDukItRJypjJvgWBYLoG+VZUApgohbbc/qJh0n5zOZA==} + '@angular/platform-server@22.0.0-next.3': + resolution: {integrity: sha512-qAeU3noQZjctQfcJXsRZ65Sn/amBcUUZdMaqFoYvWyKfHcuEbMBFBvktleilHF74YY1h04A7d5mjGgjZ6t8exw==} engines: {node: ^22.22.0 || >=24.13.1} peerDependencies: - '@angular/common': 22.0.0-next.1 - '@angular/compiler': 22.0.0-next.1 - '@angular/core': 22.0.0-next.1 - '@angular/platform-browser': 22.0.0-next.1 + '@angular/common': 22.0.0-next.3 + '@angular/compiler': 22.0.0-next.3 + '@angular/core': 22.0.0-next.3 + '@angular/platform-browser': 22.0.0-next.3 rxjs: ^6.5.3 || ^7.4.0 - '@angular/router@22.0.0-next.1': - resolution: {integrity: sha512-aeaf9AS5FnJhWbIvKlngnCyBJx1CutQ2o2ymLbp2lnB/Xc72wdv8R5kuMplAmrrAnjUoI9KO/pwzc0UjMmSU6w==} + '@angular/router@22.0.0-next.3': + resolution: {integrity: sha512-wCM8jnGWrE3aXo6v6gV1GKRTMosNUfadcjrn/axFCzWd2o1vWUPvVnEc2gg3Pf3MEcm4ZbxrUo3hcEo/aqIClg==} engines: {node: ^22.22.0 || >=24.13.1} peerDependencies: - '@angular/common': 22.0.0-next.1 - '@angular/core': 22.0.0-next.1 - '@angular/platform-browser': 22.0.0-next.1 + '@angular/common': 22.0.0-next.3 + '@angular/core': 22.0.0-next.3 + '@angular/platform-browser': 22.0.0-next.3 rxjs: ^6.5.3 || ^7.4.0 - '@angular/service-worker@22.0.0-next.1': - resolution: {integrity: sha512-xkoOL21ZC9TlvLKSNm0o1QKN3blQdZVPHItYjzT7kHaXI1hJNEJbqsIA5HljsthBtzfa1CBiweZRzCHGfs5gbA==} + '@angular/service-worker@22.0.0-next.3': + resolution: {integrity: sha512-jn5p6pAoxjI/Rd449Kyg4MrToiggtxE5hrKhf8vZrIbEA5bdT0a+63CK+1jG1TQ4TsmgX6gi4PGVpo4nv6mB1A==} engines: {node: ^22.22.0 || >=24.13.1} hasBin: true peerDependencies: - '@angular/core': 22.0.0-next.1 + '@angular/core': 22.0.0-next.3 rxjs: ^6.5.3 || ^7.4.0 '@asamuzakjp/css-color@5.0.1': @@ -2102,8 +2102,8 @@ packages: resolution: {integrity: sha512-IJn+8A3QZJfe7FUtWqHVNo3xJs7KFpurCWGWCiCz3oEh+BkRymKZ1QxfAbU2yGMDzTytLGQ2IV6T2r3cuo75/w==} engines: {node: '>=18'} - '@google/genai@1.43.0': - resolution: {integrity: sha512-hklCsJNdMlDM1IwcCVcGQFBg2izY0+t5BIGbRsxi2UnKi6AGKL7pqJqmBDNRbw0bYCs4y3NA7TB+fkKfP/Nrdw==} + '@google/genai@1.45.0': + resolution: {integrity: sha512-+sNRWhKiRibVgc4OKi7aBJJ0A7RcoVD8tGG+eFkqxAWRjASDW+ktS9lLwTDnAxZICzCVoeAdu8dYLJVTX60N9w==} engines: {node: '>=20.0.0'} peerDependencies: '@modelcontextprotocol/sdk': ^1.25.2 @@ -3488,8 +3488,8 @@ packages: '@types/node@22.19.15': resolution: {integrity: sha512-F0R/h2+dsy5wJAUe3tAU6oqa2qbWY5TpNfL/RGmo1y38hiyO1w3x2jPtt76wmuaJI4DQnOBu21cNXQ2STIUUWg==} - '@types/node@24.11.0': - resolution: {integrity: sha512-fPxQqz4VTgPI/IQ+lj9r0h+fDR66bzoeMGHp8ASee+32OSGIkeASsoZuJixsQoVef1QJbeubcPBxKk22QVoWdw==} + '@types/node@24.12.0': + resolution: {integrity: sha512-GYDxsZi3ChgmckRT9HPU0WEhKLP08ev/Yfcq2AstjrDASOYCSXeyjDsHg4v5t4jOj7cyDX3vmprafKlWIG9MXQ==} '@types/npm-package-arg@6.1.4': resolution: {integrity: sha512-vDgdbMy2QXHnAruzlv68pUtXCjmqUk3WrBAsRboRovsOmxbfn/WiYCjmecyKjGztnMps5dWp4Uq2prp+Ilo17Q==} @@ -5202,8 +5202,8 @@ packages: flatted@3.4.0: resolution: {integrity: sha512-kC6Bb+ooptOIvWj5B63EQWkF0FEnNjV2ZNkLMLZRDDduIiWeFF4iKnslwhiWxjAdbg4NzTNo6h0qLuvFrcx+Sw==} - folder-hash@4.1.1: - resolution: {integrity: sha512-1ZSlKJSbET3XpglnEXC9g+QF4QRZhqHIjpFfa4pAMfO4tu/XYPafpeHEX6zOFS2EolOIXr0lPh1eSjmdWItX2w==} + folder-hash@4.1.2: + resolution: {integrity: sha512-rjdiHw3ShVonhMZZXvD/I28boUkbJFT/RBsg5MbQQd8e61PhevIwFwmL218/AscBEsW/blH4BC4A+kFeIqHVfw==} engines: {node: '>=10.10.0'} hasBin: true @@ -6335,6 +6335,10 @@ packages: resolution: {integrity: sha512-sBz8G/YjVniEz6lKPNpKxXwazJe4c19fEfV2GDMX6AjFz+MX9uDWIZW8XreVhkFW3fkIdTv/gxWr/Kks5FFAVw==} engines: {node: '>=10'} + minimatch@7.4.9: + resolution: {integrity: sha512-Brg/fp/iAVDOQoHxkuN5bEYhyQlZhxddI78yWsCbeEwTHXQjlNLtiJDUsp1GIptVqMI7/gkJMz4vVAc01mpoBw==} + engines: {node: '>=10'} + minimatch@9.0.9: resolution: {integrity: sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==} engines: {node: '>=16 || 14 >=14.17'} @@ -8468,29 +8472,29 @@ snapshots: '@jridgewell/gen-mapping': 0.3.13 '@jridgewell/trace-mapping': 0.3.31 - '@angular/animations@22.0.0-next.1(@angular/core@22.0.0-next.1(@angular/compiler@22.0.0-next.1)(rxjs@7.8.2)(zone.js@0.16.1))': + '@angular/animations@22.0.0-next.3(@angular/core@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1))': dependencies: - '@angular/core': 22.0.0-next.1(@angular/compiler@22.0.0-next.1)(rxjs@7.8.2)(zone.js@0.16.1) + '@angular/core': 22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1) tslib: 2.8.1 - '@angular/cdk@21.3.0-next.0(@angular/common@22.0.0-next.1(@angular/core@22.0.0-next.1(@angular/compiler@22.0.0-next.1)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.1(@angular/compiler@22.0.0-next.1)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@22.0.0-next.1(@angular/animations@22.0.0-next.1(@angular/core@22.0.0-next.1(@angular/compiler@22.0.0-next.1)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@22.0.0-next.1(@angular/core@22.0.0-next.1(@angular/compiler@22.0.0-next.1)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.1(@angular/compiler@22.0.0-next.1)(rxjs@7.8.2)(zone.js@0.16.1)))(rxjs@7.8.2)': + '@angular/cdk@22.0.0-next.0(@angular/common@22.0.0-next.3(@angular/core@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@22.0.0-next.3(@angular/animations@22.0.0-next.3(@angular/core@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@22.0.0-next.3(@angular/core@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1)))(rxjs@7.8.2)': dependencies: - '@angular/common': 22.0.0-next.1(@angular/core@22.0.0-next.1(@angular/compiler@22.0.0-next.1)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2) - '@angular/core': 22.0.0-next.1(@angular/compiler@22.0.0-next.1)(rxjs@7.8.2)(zone.js@0.16.1) - '@angular/platform-browser': 22.0.0-next.1(@angular/animations@22.0.0-next.1(@angular/core@22.0.0-next.1(@angular/compiler@22.0.0-next.1)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@22.0.0-next.1(@angular/core@22.0.0-next.1(@angular/compiler@22.0.0-next.1)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.1(@angular/compiler@22.0.0-next.1)(rxjs@7.8.2)(zone.js@0.16.1)) + '@angular/common': 22.0.0-next.3(@angular/core@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2) + '@angular/core': 22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1) + '@angular/platform-browser': 22.0.0-next.3(@angular/animations@22.0.0-next.3(@angular/core@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@22.0.0-next.3(@angular/core@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1)) parse5: 8.0.0 rxjs: 7.8.2 tslib: 2.8.1 - '@angular/common@22.0.0-next.1(@angular/core@22.0.0-next.1(@angular/compiler@22.0.0-next.1)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2)': + '@angular/common@22.0.0-next.3(@angular/core@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2)': dependencies: - '@angular/core': 22.0.0-next.1(@angular/compiler@22.0.0-next.1)(rxjs@7.8.2)(zone.js@0.16.1) + '@angular/core': 22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1) rxjs: 7.8.2 tslib: 2.8.1 - '@angular/compiler-cli@22.0.0-next.1(@angular/compiler@22.0.0-next.1)(typescript@6.0.1-rc)': + '@angular/compiler-cli@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(typescript@6.0.1-rc)': dependencies: - '@angular/compiler': 22.0.0-next.1 + '@angular/compiler': 22.0.0-next.3 '@babel/core': 7.29.0 '@jridgewell/sourcemap-codec': 1.5.5 chokidar: 5.0.0 @@ -8504,31 +8508,31 @@ snapshots: transitivePeerDependencies: - supports-color - '@angular/compiler@22.0.0-next.1': + '@angular/compiler@22.0.0-next.3': dependencies: tslib: 2.8.1 - '@angular/core@22.0.0-next.1(@angular/compiler@22.0.0-next.1)(rxjs@7.8.2)(zone.js@0.16.1)': + '@angular/core@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1)': dependencies: rxjs: 7.8.2 tslib: 2.8.1 optionalDependencies: - '@angular/compiler': 22.0.0-next.1 + '@angular/compiler': 22.0.0-next.3 zone.js: 0.16.1 - '@angular/forms@22.0.0-next.1(@angular/common@22.0.0-next.1(@angular/core@22.0.0-next.1(@angular/compiler@22.0.0-next.1)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.1(@angular/compiler@22.0.0-next.1)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@22.0.0-next.1(@angular/animations@22.0.0-next.1(@angular/core@22.0.0-next.1(@angular/compiler@22.0.0-next.1)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@22.0.0-next.1(@angular/core@22.0.0-next.1(@angular/compiler@22.0.0-next.1)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.1(@angular/compiler@22.0.0-next.1)(rxjs@7.8.2)(zone.js@0.16.1)))(rxjs@7.8.2)': + '@angular/forms@22.0.0-next.3(@angular/common@22.0.0-next.3(@angular/core@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@22.0.0-next.3(@angular/animations@22.0.0-next.3(@angular/core@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@22.0.0-next.3(@angular/core@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1)))(rxjs@7.8.2)': dependencies: - '@angular/common': 22.0.0-next.1(@angular/core@22.0.0-next.1(@angular/compiler@22.0.0-next.1)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2) - '@angular/core': 22.0.0-next.1(@angular/compiler@22.0.0-next.1)(rxjs@7.8.2)(zone.js@0.16.1) - '@angular/platform-browser': 22.0.0-next.1(@angular/animations@22.0.0-next.1(@angular/core@22.0.0-next.1(@angular/compiler@22.0.0-next.1)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@22.0.0-next.1(@angular/core@22.0.0-next.1(@angular/compiler@22.0.0-next.1)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.1(@angular/compiler@22.0.0-next.1)(rxjs@7.8.2)(zone.js@0.16.1)) + '@angular/common': 22.0.0-next.3(@angular/core@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2) + '@angular/core': 22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1) + '@angular/platform-browser': 22.0.0-next.3(@angular/animations@22.0.0-next.3(@angular/core@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@22.0.0-next.3(@angular/core@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1)) '@standard-schema/spec': 1.1.0 rxjs: 7.8.2 tslib: 2.8.1 - '@angular/localize@22.0.0-next.1(@angular/compiler-cli@22.0.0-next.1(@angular/compiler@22.0.0-next.1)(typescript@6.0.1-rc))(@angular/compiler@22.0.0-next.1)': + '@angular/localize@22.0.0-next.3(@angular/compiler-cli@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(typescript@6.0.1-rc))(@angular/compiler@22.0.0-next.3)': dependencies: - '@angular/compiler': 22.0.0-next.1 - '@angular/compiler-cli': 22.0.0-next.1(@angular/compiler@22.0.0-next.1)(typescript@6.0.1-rc) + '@angular/compiler': 22.0.0-next.3 + '@angular/compiler-cli': 22.0.0-next.3(@angular/compiler@22.0.0-next.3)(typescript@6.0.1-rc) '@babel/core': 7.29.0 '@types/babel__core': 7.20.5 tinyglobby: 0.2.15 @@ -8536,24 +8540,24 @@ snapshots: transitivePeerDependencies: - supports-color - '@angular/material@21.3.0-next.0(2645b915ebf9074f759b05c1e2af589e)': + '@angular/material@22.0.0-next.0(2d75345887a5a4c2bc113233c009d4e6)': dependencies: - '@angular/cdk': 21.3.0-next.0(@angular/common@22.0.0-next.1(@angular/core@22.0.0-next.1(@angular/compiler@22.0.0-next.1)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.1(@angular/compiler@22.0.0-next.1)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@22.0.0-next.1(@angular/animations@22.0.0-next.1(@angular/core@22.0.0-next.1(@angular/compiler@22.0.0-next.1)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@22.0.0-next.1(@angular/core@22.0.0-next.1(@angular/compiler@22.0.0-next.1)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.1(@angular/compiler@22.0.0-next.1)(rxjs@7.8.2)(zone.js@0.16.1)))(rxjs@7.8.2) - '@angular/common': 22.0.0-next.1(@angular/core@22.0.0-next.1(@angular/compiler@22.0.0-next.1)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2) - '@angular/core': 22.0.0-next.1(@angular/compiler@22.0.0-next.1)(rxjs@7.8.2)(zone.js@0.16.1) - '@angular/forms': 22.0.0-next.1(@angular/common@22.0.0-next.1(@angular/core@22.0.0-next.1(@angular/compiler@22.0.0-next.1)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.1(@angular/compiler@22.0.0-next.1)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@22.0.0-next.1(@angular/animations@22.0.0-next.1(@angular/core@22.0.0-next.1(@angular/compiler@22.0.0-next.1)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@22.0.0-next.1(@angular/core@22.0.0-next.1(@angular/compiler@22.0.0-next.1)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.1(@angular/compiler@22.0.0-next.1)(rxjs@7.8.2)(zone.js@0.16.1)))(rxjs@7.8.2) - '@angular/platform-browser': 22.0.0-next.1(@angular/animations@22.0.0-next.1(@angular/core@22.0.0-next.1(@angular/compiler@22.0.0-next.1)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@22.0.0-next.1(@angular/core@22.0.0-next.1(@angular/compiler@22.0.0-next.1)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.1(@angular/compiler@22.0.0-next.1)(rxjs@7.8.2)(zone.js@0.16.1)) + '@angular/cdk': 22.0.0-next.0(@angular/common@22.0.0-next.3(@angular/core@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@22.0.0-next.3(@angular/animations@22.0.0-next.3(@angular/core@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@22.0.0-next.3(@angular/core@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1)))(rxjs@7.8.2) + '@angular/common': 22.0.0-next.3(@angular/core@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2) + '@angular/core': 22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1) + '@angular/forms': 22.0.0-next.3(@angular/common@22.0.0-next.3(@angular/core@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@22.0.0-next.3(@angular/animations@22.0.0-next.3(@angular/core@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@22.0.0-next.3(@angular/core@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1)))(rxjs@7.8.2) + '@angular/platform-browser': 22.0.0-next.3(@angular/animations@22.0.0-next.3(@angular/core@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@22.0.0-next.3(@angular/core@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1)) rxjs: 7.8.2 tslib: 2.8.1 - '@angular/ng-dev@https://codeload.github.com/angular/dev-infra-private-ng-dev-builds/tar.gz/06cf48df3a70d5a314336359dd47722724f69439(@modelcontextprotocol/sdk@1.27.1(zod@4.3.6))': + '@angular/ng-dev@https://codeload.github.com/angular/dev-infra-private-ng-dev-builds/tar.gz/ddbbfb8f2802fcfb85c8bf6b2f78a5ea120137e7(@modelcontextprotocol/sdk@1.27.1(zod@4.3.6))': dependencies: '@actions/core': 3.0.0 '@conventional-changelog/git-client': 2.6.0(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.3.0) '@google-cloud/spanner': 8.0.0(supports-color@10.2.2) - '@google/genai': 1.43.0(@modelcontextprotocol/sdk@1.27.1(zod@4.3.6))(bufferutil@4.1.0)(supports-color@10.2.2)(utf-8-validate@6.0.6) - '@inquirer/prompts': 8.3.0(@types/node@24.11.0) - '@inquirer/type': 4.0.3(@types/node@24.11.0) + '@google/genai': 1.45.0(@modelcontextprotocol/sdk@1.27.1(zod@4.3.6))(bufferutil@4.1.0)(supports-color@10.2.2)(utf-8-validate@6.0.6) + '@inquirer/prompts': 8.3.0(@types/node@24.12.0) + '@inquirer/type': 4.0.3(@types/node@24.12.0) '@octokit/auth-app': 8.2.0 '@octokit/core': 7.0.6 '@octokit/graphql': 9.0.3 @@ -8570,7 +8574,7 @@ snapshots: '@types/events': 3.0.3 '@types/folder-hash': 4.0.4 '@types/jasmine': 6.0.0 - '@types/node': 24.11.0 + '@types/node': 24.12.0 '@types/semver': 7.7.1 '@types/which': 3.0.4 '@types/yargs': 17.0.35 @@ -8584,7 +8588,7 @@ snapshots: encoding: 0.1.13 fast-glob: 3.3.3 firebase: 12.10.0 - folder-hash: 4.1.1(supports-color@10.2.2) + folder-hash: 4.1.2(supports-color@10.2.2) jasmine: 6.1.0 jasmine-core: 6.1.0 jasmine-reporters: 2.5.2 @@ -8606,35 +8610,35 @@ snapshots: - '@modelcontextprotocol/sdk' - '@react-native-async-storage/async-storage' - '@angular/platform-browser@22.0.0-next.1(@angular/animations@22.0.0-next.1(@angular/core@22.0.0-next.1(@angular/compiler@22.0.0-next.1)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@22.0.0-next.1(@angular/core@22.0.0-next.1(@angular/compiler@22.0.0-next.1)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.1(@angular/compiler@22.0.0-next.1)(rxjs@7.8.2)(zone.js@0.16.1))': + '@angular/platform-browser@22.0.0-next.3(@angular/animations@22.0.0-next.3(@angular/core@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@22.0.0-next.3(@angular/core@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1))': dependencies: - '@angular/common': 22.0.0-next.1(@angular/core@22.0.0-next.1(@angular/compiler@22.0.0-next.1)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2) - '@angular/core': 22.0.0-next.1(@angular/compiler@22.0.0-next.1)(rxjs@7.8.2)(zone.js@0.16.1) + '@angular/common': 22.0.0-next.3(@angular/core@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2) + '@angular/core': 22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1) tslib: 2.8.1 optionalDependencies: - '@angular/animations': 22.0.0-next.1(@angular/core@22.0.0-next.1(@angular/compiler@22.0.0-next.1)(rxjs@7.8.2)(zone.js@0.16.1)) + '@angular/animations': 22.0.0-next.3(@angular/core@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1)) - '@angular/platform-server@22.0.0-next.1(@angular/common@22.0.0-next.1(@angular/core@22.0.0-next.1(@angular/compiler@22.0.0-next.1)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/compiler@22.0.0-next.1)(@angular/core@22.0.0-next.1(@angular/compiler@22.0.0-next.1)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@22.0.0-next.1(@angular/animations@22.0.0-next.1(@angular/core@22.0.0-next.1(@angular/compiler@22.0.0-next.1)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@22.0.0-next.1(@angular/core@22.0.0-next.1(@angular/compiler@22.0.0-next.1)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.1(@angular/compiler@22.0.0-next.1)(rxjs@7.8.2)(zone.js@0.16.1)))(rxjs@7.8.2)': + '@angular/platform-server@22.0.0-next.3(@angular/common@22.0.0-next.3(@angular/core@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/compiler@22.0.0-next.3)(@angular/core@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@22.0.0-next.3(@angular/animations@22.0.0-next.3(@angular/core@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@22.0.0-next.3(@angular/core@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1)))(rxjs@7.8.2)': dependencies: - '@angular/common': 22.0.0-next.1(@angular/core@22.0.0-next.1(@angular/compiler@22.0.0-next.1)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2) - '@angular/compiler': 22.0.0-next.1 - '@angular/core': 22.0.0-next.1(@angular/compiler@22.0.0-next.1)(rxjs@7.8.2)(zone.js@0.16.1) - '@angular/platform-browser': 22.0.0-next.1(@angular/animations@22.0.0-next.1(@angular/core@22.0.0-next.1(@angular/compiler@22.0.0-next.1)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@22.0.0-next.1(@angular/core@22.0.0-next.1(@angular/compiler@22.0.0-next.1)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.1(@angular/compiler@22.0.0-next.1)(rxjs@7.8.2)(zone.js@0.16.1)) + '@angular/common': 22.0.0-next.3(@angular/core@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2) + '@angular/compiler': 22.0.0-next.3 + '@angular/core': 22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1) + '@angular/platform-browser': 22.0.0-next.3(@angular/animations@22.0.0-next.3(@angular/core@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@22.0.0-next.3(@angular/core@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1)) rxjs: 7.8.2 tslib: 2.8.1 xhr2: 0.2.1 - '@angular/router@22.0.0-next.1(@angular/common@22.0.0-next.1(@angular/core@22.0.0-next.1(@angular/compiler@22.0.0-next.1)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.1(@angular/compiler@22.0.0-next.1)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@22.0.0-next.1(@angular/animations@22.0.0-next.1(@angular/core@22.0.0-next.1(@angular/compiler@22.0.0-next.1)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@22.0.0-next.1(@angular/core@22.0.0-next.1(@angular/compiler@22.0.0-next.1)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.1(@angular/compiler@22.0.0-next.1)(rxjs@7.8.2)(zone.js@0.16.1)))(rxjs@7.8.2)': + '@angular/router@22.0.0-next.3(@angular/common@22.0.0-next.3(@angular/core@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@22.0.0-next.3(@angular/animations@22.0.0-next.3(@angular/core@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@22.0.0-next.3(@angular/core@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1)))(rxjs@7.8.2)': dependencies: - '@angular/common': 22.0.0-next.1(@angular/core@22.0.0-next.1(@angular/compiler@22.0.0-next.1)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2) - '@angular/core': 22.0.0-next.1(@angular/compiler@22.0.0-next.1)(rxjs@7.8.2)(zone.js@0.16.1) - '@angular/platform-browser': 22.0.0-next.1(@angular/animations@22.0.0-next.1(@angular/core@22.0.0-next.1(@angular/compiler@22.0.0-next.1)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@22.0.0-next.1(@angular/core@22.0.0-next.1(@angular/compiler@22.0.0-next.1)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.1(@angular/compiler@22.0.0-next.1)(rxjs@7.8.2)(zone.js@0.16.1)) + '@angular/common': 22.0.0-next.3(@angular/core@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2) + '@angular/core': 22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1) + '@angular/platform-browser': 22.0.0-next.3(@angular/animations@22.0.0-next.3(@angular/core@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@22.0.0-next.3(@angular/core@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1)) rxjs: 7.8.2 tslib: 2.8.1 - '@angular/service-worker@22.0.0-next.1(@angular/core@22.0.0-next.1(@angular/compiler@22.0.0-next.1)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2)': + '@angular/service-worker@22.0.0-next.3(@angular/core@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2)': dependencies: - '@angular/core': 22.0.0-next.1(@angular/compiler@22.0.0-next.1)(rxjs@7.8.2)(zone.js@0.16.1) + '@angular/core': 22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1) rxjs: 7.8.2 tslib: 2.8.1 @@ -9925,7 +9929,7 @@ snapshots: transitivePeerDependencies: - supports-color - '@google/genai@1.43.0(@modelcontextprotocol/sdk@1.27.1(zod@4.3.6))(bufferutil@4.1.0)(supports-color@10.2.2)(utf-8-validate@6.0.6)': + '@google/genai@1.45.0(@modelcontextprotocol/sdk@1.27.1(zod@4.3.6))(bufferutil@4.1.0)(supports-color@10.2.2)(utf-8-validate@6.0.6)': dependencies: google-auth-library: 10.6.1(supports-color@10.2.2) p-retry: 4.6.2 @@ -9982,122 +9986,122 @@ snapshots: '@inquirer/ansi@2.0.3': {} - '@inquirer/checkbox@5.1.0(@types/node@24.11.0)': + '@inquirer/checkbox@5.1.0(@types/node@24.12.0)': dependencies: '@inquirer/ansi': 2.0.3 - '@inquirer/core': 11.1.5(@types/node@24.11.0) + '@inquirer/core': 11.1.5(@types/node@24.12.0) '@inquirer/figures': 2.0.3 - '@inquirer/type': 4.0.3(@types/node@24.11.0) + '@inquirer/type': 4.0.3(@types/node@24.12.0) optionalDependencies: - '@types/node': 24.11.0 + '@types/node': 24.12.0 - '@inquirer/confirm@6.0.8(@types/node@24.11.0)': + '@inquirer/confirm@6.0.8(@types/node@24.12.0)': dependencies: - '@inquirer/core': 11.1.5(@types/node@24.11.0) - '@inquirer/type': 4.0.3(@types/node@24.11.0) + '@inquirer/core': 11.1.5(@types/node@24.12.0) + '@inquirer/type': 4.0.3(@types/node@24.12.0) optionalDependencies: - '@types/node': 24.11.0 + '@types/node': 24.12.0 - '@inquirer/core@11.1.5(@types/node@24.11.0)': + '@inquirer/core@11.1.5(@types/node@24.12.0)': dependencies: '@inquirer/ansi': 2.0.3 '@inquirer/figures': 2.0.3 - '@inquirer/type': 4.0.3(@types/node@24.11.0) + '@inquirer/type': 4.0.3(@types/node@24.12.0) cli-width: 4.1.0 fast-wrap-ansi: 0.2.0 mute-stream: 3.0.0 signal-exit: 4.1.0 optionalDependencies: - '@types/node': 24.11.0 + '@types/node': 24.12.0 - '@inquirer/editor@5.0.8(@types/node@24.11.0)': + '@inquirer/editor@5.0.8(@types/node@24.12.0)': dependencies: - '@inquirer/core': 11.1.5(@types/node@24.11.0) - '@inquirer/external-editor': 2.0.3(@types/node@24.11.0) - '@inquirer/type': 4.0.3(@types/node@24.11.0) + '@inquirer/core': 11.1.5(@types/node@24.12.0) + '@inquirer/external-editor': 2.0.3(@types/node@24.12.0) + '@inquirer/type': 4.0.3(@types/node@24.12.0) optionalDependencies: - '@types/node': 24.11.0 + '@types/node': 24.12.0 - '@inquirer/expand@5.0.8(@types/node@24.11.0)': + '@inquirer/expand@5.0.8(@types/node@24.12.0)': dependencies: - '@inquirer/core': 11.1.5(@types/node@24.11.0) - '@inquirer/type': 4.0.3(@types/node@24.11.0) + '@inquirer/core': 11.1.5(@types/node@24.12.0) + '@inquirer/type': 4.0.3(@types/node@24.12.0) optionalDependencies: - '@types/node': 24.11.0 + '@types/node': 24.12.0 - '@inquirer/external-editor@2.0.3(@types/node@24.11.0)': + '@inquirer/external-editor@2.0.3(@types/node@24.12.0)': dependencies: chardet: 2.1.1 iconv-lite: 0.7.2 optionalDependencies: - '@types/node': 24.11.0 + '@types/node': 24.12.0 '@inquirer/figures@2.0.3': {} - '@inquirer/input@5.0.8(@types/node@24.11.0)': + '@inquirer/input@5.0.8(@types/node@24.12.0)': dependencies: - '@inquirer/core': 11.1.5(@types/node@24.11.0) - '@inquirer/type': 4.0.3(@types/node@24.11.0) + '@inquirer/core': 11.1.5(@types/node@24.12.0) + '@inquirer/type': 4.0.3(@types/node@24.12.0) optionalDependencies: - '@types/node': 24.11.0 + '@types/node': 24.12.0 - '@inquirer/number@4.0.8(@types/node@24.11.0)': + '@inquirer/number@4.0.8(@types/node@24.12.0)': dependencies: - '@inquirer/core': 11.1.5(@types/node@24.11.0) - '@inquirer/type': 4.0.3(@types/node@24.11.0) + '@inquirer/core': 11.1.5(@types/node@24.12.0) + '@inquirer/type': 4.0.3(@types/node@24.12.0) optionalDependencies: - '@types/node': 24.11.0 + '@types/node': 24.12.0 - '@inquirer/password@5.0.8(@types/node@24.11.0)': + '@inquirer/password@5.0.8(@types/node@24.12.0)': dependencies: '@inquirer/ansi': 2.0.3 - '@inquirer/core': 11.1.5(@types/node@24.11.0) - '@inquirer/type': 4.0.3(@types/node@24.11.0) + '@inquirer/core': 11.1.5(@types/node@24.12.0) + '@inquirer/type': 4.0.3(@types/node@24.12.0) optionalDependencies: - '@types/node': 24.11.0 - - '@inquirer/prompts@8.3.0(@types/node@24.11.0)': - dependencies: - '@inquirer/checkbox': 5.1.0(@types/node@24.11.0) - '@inquirer/confirm': 6.0.8(@types/node@24.11.0) - '@inquirer/editor': 5.0.8(@types/node@24.11.0) - '@inquirer/expand': 5.0.8(@types/node@24.11.0) - '@inquirer/input': 5.0.8(@types/node@24.11.0) - '@inquirer/number': 4.0.8(@types/node@24.11.0) - '@inquirer/password': 5.0.8(@types/node@24.11.0) - '@inquirer/rawlist': 5.2.4(@types/node@24.11.0) - '@inquirer/search': 4.1.4(@types/node@24.11.0) - '@inquirer/select': 5.1.0(@types/node@24.11.0) + '@types/node': 24.12.0 + + '@inquirer/prompts@8.3.0(@types/node@24.12.0)': + dependencies: + '@inquirer/checkbox': 5.1.0(@types/node@24.12.0) + '@inquirer/confirm': 6.0.8(@types/node@24.12.0) + '@inquirer/editor': 5.0.8(@types/node@24.12.0) + '@inquirer/expand': 5.0.8(@types/node@24.12.0) + '@inquirer/input': 5.0.8(@types/node@24.12.0) + '@inquirer/number': 4.0.8(@types/node@24.12.0) + '@inquirer/password': 5.0.8(@types/node@24.12.0) + '@inquirer/rawlist': 5.2.4(@types/node@24.12.0) + '@inquirer/search': 4.1.4(@types/node@24.12.0) + '@inquirer/select': 5.1.0(@types/node@24.12.0) optionalDependencies: - '@types/node': 24.11.0 + '@types/node': 24.12.0 - '@inquirer/rawlist@5.2.4(@types/node@24.11.0)': + '@inquirer/rawlist@5.2.4(@types/node@24.12.0)': dependencies: - '@inquirer/core': 11.1.5(@types/node@24.11.0) - '@inquirer/type': 4.0.3(@types/node@24.11.0) + '@inquirer/core': 11.1.5(@types/node@24.12.0) + '@inquirer/type': 4.0.3(@types/node@24.12.0) optionalDependencies: - '@types/node': 24.11.0 + '@types/node': 24.12.0 - '@inquirer/search@4.1.4(@types/node@24.11.0)': + '@inquirer/search@4.1.4(@types/node@24.12.0)': dependencies: - '@inquirer/core': 11.1.5(@types/node@24.11.0) + '@inquirer/core': 11.1.5(@types/node@24.12.0) '@inquirer/figures': 2.0.3 - '@inquirer/type': 4.0.3(@types/node@24.11.0) + '@inquirer/type': 4.0.3(@types/node@24.12.0) optionalDependencies: - '@types/node': 24.11.0 + '@types/node': 24.12.0 - '@inquirer/select@5.1.0(@types/node@24.11.0)': + '@inquirer/select@5.1.0(@types/node@24.12.0)': dependencies: '@inquirer/ansi': 2.0.3 - '@inquirer/core': 11.1.5(@types/node@24.11.0) + '@inquirer/core': 11.1.5(@types/node@24.12.0) '@inquirer/figures': 2.0.3 - '@inquirer/type': 4.0.3(@types/node@24.11.0) + '@inquirer/type': 4.0.3(@types/node@24.12.0) optionalDependencies: - '@types/node': 24.11.0 + '@types/node': 24.12.0 - '@inquirer/type@4.0.3(@types/node@24.11.0)': + '@inquirer/type@4.0.3(@types/node@24.12.0)': optionalDependencies: - '@types/node': 24.11.0 + '@types/node': 24.12.0 '@isaacs/cliui@8.0.2': dependencies: @@ -10271,10 +10275,10 @@ snapshots: '@leichtgewicht/ip-codec@2.0.5': {} - '@listr2/prompt-adapter-inquirer@4.2.1(@inquirer/prompts@8.3.0(@types/node@24.11.0))(@types/node@24.11.0)(listr2@10.2.1)': + '@listr2/prompt-adapter-inquirer@4.2.1(@inquirer/prompts@8.3.0(@types/node@24.12.0))(@types/node@24.12.0)(listr2@10.2.1)': dependencies: - '@inquirer/prompts': 8.3.0(@types/node@24.11.0) - '@inquirer/type': 4.0.3(@types/node@24.11.0) + '@inquirer/prompts': 8.3.0(@types/node@24.12.0) + '@inquirer/type': 4.0.3(@types/node@24.12.0) listr2: 10.2.1 transitivePeerDependencies: - '@types/node' @@ -11271,7 +11275,7 @@ snapshots: dependencies: undici-types: 7.22.0 - '@types/node@24.11.0': + '@types/node@24.12.0': dependencies: undici-types: 7.22.0 @@ -11635,11 +11639,11 @@ snapshots: lodash: 4.17.21 minimatch: 7.4.6 - '@vitejs/plugin-basic-ssl@2.1.4(vite@7.3.1(@types/node@24.11.0)(jiti@2.6.1)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))': + '@vitejs/plugin-basic-ssl@2.1.4(vite@7.3.1(@types/node@24.12.0)(jiti@2.6.1)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))': dependencies: - vite: 7.3.1(@types/node@24.11.0)(jiti@2.6.1)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) + vite: 7.3.1(@types/node@24.12.0)(jiti@2.6.1)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) - '@vitest/coverage-v8@4.0.18(vitest@4.0.18(@opentelemetry/api@1.9.0)(@types/node@24.11.0)(jiti@2.6.1)(jsdom@28.1.0)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))': + '@vitest/coverage-v8@4.0.18(vitest@4.0.18(@opentelemetry/api@1.9.0)(@types/node@24.12.0)(jiti@2.6.1)(jsdom@28.1.0)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))': dependencies: '@bcoe/v8-coverage': 1.0.2 '@vitest/utils': 4.0.18 @@ -11651,7 +11655,7 @@ snapshots: obug: 2.1.1 std-env: 3.10.0 tinyrainbow: 3.0.3 - vitest: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@24.11.0)(jiti@2.6.1)(jsdom@28.1.0)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) + vitest: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@24.12.0)(jiti@2.6.1)(jsdom@28.1.0)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) '@vitest/expect@4.0.18': dependencies: @@ -11662,13 +11666,13 @@ snapshots: chai: 6.2.2 tinyrainbow: 3.0.3 - '@vitest/mocker@4.0.18(vite@7.3.1(@types/node@24.11.0)(jiti@2.6.1)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))': + '@vitest/mocker@4.0.18(vite@7.3.1(@types/node@24.12.0)(jiti@2.6.1)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))': dependencies: '@vitest/spy': 4.0.18 estree-walker: 3.0.3 magic-string: 0.30.21 optionalDependencies: - vite: 7.3.1(@types/node@24.11.0)(jiti@2.6.1)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) + vite: 7.3.1(@types/node@24.12.0)(jiti@2.6.1)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) '@vitest/pretty-format@4.0.18': dependencies: @@ -13445,10 +13449,10 @@ snapshots: flatted@3.4.0: {} - folder-hash@4.1.1(supports-color@10.2.2): + folder-hash@4.1.2(supports-color@10.2.2): dependencies: debug: 4.4.0(supports-color@10.2.2) - minimatch: 7.4.6 + minimatch: 7.4.9 transitivePeerDependencies: - supports-color @@ -14685,6 +14689,10 @@ snapshots: dependencies: brace-expansion: 2.0.2 + minimatch@7.4.9: + dependencies: + brace-expansion: 2.0.2 + minimatch@9.0.9: dependencies: brace-expansion: 2.0.2 @@ -14793,10 +14801,10 @@ snapshots: netmask@2.0.2: {} - ng-packagr@22.0.0-next.0(@angular/compiler-cli@22.0.0-next.1(@angular/compiler@22.0.0-next.1)(typescript@6.0.1-rc))(tslib@2.8.1)(typescript@6.0.1-rc): + ng-packagr@22.0.0-next.0(@angular/compiler-cli@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(typescript@6.0.1-rc))(tslib@2.8.1)(typescript@6.0.1-rc): dependencies: '@ampproject/remapping': 2.3.0 - '@angular/compiler-cli': 22.0.0-next.1(@angular/compiler@22.0.0-next.1)(typescript@6.0.1-rc) + '@angular/compiler-cli': 22.0.0-next.3(@angular/compiler@22.0.0-next.3)(typescript@6.0.1-rc) '@rollup/plugin-json': 6.1.0(rollup@4.59.0) '@rollup/wasm-node': 4.59.0 ajv: 8.18.0 @@ -16685,7 +16693,7 @@ snapshots: core-util-is: 1.0.2 extsprintf: 1.3.0 - vite@7.3.1(@types/node@24.11.0)(jiti@2.6.1)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2): + vite@7.3.1(@types/node@24.12.0)(jiti@2.6.1)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2): dependencies: esbuild: 0.27.3 fdir: 6.5.0(picomatch@4.0.3) @@ -16694,7 +16702,7 @@ snapshots: rollup: 4.59.0 tinyglobby: 0.2.15 optionalDependencies: - '@types/node': 24.11.0 + '@types/node': 24.12.0 fsevents: 2.3.3 jiti: 2.6.1 less: 4.4.2 @@ -16703,10 +16711,10 @@ snapshots: tsx: 4.21.0 yaml: 2.8.2 - vitest@4.0.18(@opentelemetry/api@1.9.0)(@types/node@24.11.0)(jiti@2.6.1)(jsdom@28.1.0)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2): + vitest@4.0.18(@opentelemetry/api@1.9.0)(@types/node@24.12.0)(jiti@2.6.1)(jsdom@28.1.0)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2): dependencies: '@vitest/expect': 4.0.18 - '@vitest/mocker': 4.0.18(vite@7.3.1(@types/node@24.11.0)(jiti@2.6.1)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)) + '@vitest/mocker': 4.0.18(vite@7.3.1(@types/node@24.12.0)(jiti@2.6.1)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)) '@vitest/pretty-format': 4.0.18 '@vitest/runner': 4.0.18 '@vitest/snapshot': 4.0.18 @@ -16723,11 +16731,11 @@ snapshots: tinyexec: 1.0.2 tinyglobby: 0.2.15 tinyrainbow: 3.0.3 - vite: 7.3.1(@types/node@24.11.0)(jiti@2.6.1)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) + vite: 7.3.1(@types/node@24.12.0)(jiti@2.6.1)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) why-is-node-running: 2.3.0 optionalDependencies: '@opentelemetry/api': 1.9.0 - '@types/node': 24.11.0 + '@types/node': 24.12.0 jsdom: 28.1.0 transitivePeerDependencies: - jiti diff --git a/tests/e2e/ng-snapshot/package.json b/tests/e2e/ng-snapshot/package.json index 71a9c8a9f605..160b900e987d 100644 --- a/tests/e2e/ng-snapshot/package.json +++ b/tests/e2e/ng-snapshot/package.json @@ -2,21 +2,21 @@ "description": "snapshot versions of Angular for e2e testing", "private": true, "dependencies": { - "@angular/animations": "github:angular/animations-builds#0e45ecb1d60e9b946f2bf93faa12ebc21f8fff0e", - "@angular/cdk": "github:angular/cdk-builds#0bef6f6275412065b0abf224163ab66c2fb69ca9", - "@angular/common": "github:angular/common-builds#9e790ffe08aac699bca3dbdf50f559eca77ceda3", - "@angular/compiler": "github:angular/compiler-builds#1178d70490860593d91d77d11241ba3e6e29d3a8", - "@angular/compiler-cli": "github:angular/compiler-cli-builds#08610db44eeedf16d1aeb66a913fbb5d6576bca0", - "@angular/core": "github:angular/core-builds#e746948282798e46d64cf1c7d38c97143cd4349a", - "@angular/forms": "github:angular/forms-builds#96b66c58f03894609955c18646531fa719816d17", - "@angular/language-service": "github:angular/language-service-builds#30a725ed6033a27ec81501e6c2c62ad9fd095fdf", - "@angular/localize": "github:angular/localize-builds#489b1edae70e2995a60e488dc76a79b38617865e", - "@angular/material": "github:angular/material-builds#db331c86faf850c670b17f8fe6b8bbcc5f86a74e", - "@angular/material-moment-adapter": "github:angular/material-moment-adapter-builds#34507e80d56bd16ddaec96b6792269ad675ecc0f", - "@angular/platform-browser": "github:angular/platform-browser-builds#7f7a34cde0324bddbc1032a5d21a79dbb6b033f2", - "@angular/platform-browser-dynamic": "github:angular/platform-browser-dynamic-builds#37d5eb01f04549ce90cee0ef2556a201f3642e3a", - "@angular/platform-server": "github:angular/platform-server-builds#764b1700086c1ea66fc8d59bb076d6e644ecf119", - "@angular/router": "github:angular/router-builds#403aec2c14b0c2fb9557536b9f54c90ff2739b7b", - "@angular/service-worker": "github:angular/service-worker-builds#52b4f137777331ef154344d6b2414d50adfc58e2" + "@angular/animations": "github:angular/animations-builds#5b71e748eba9e4a51ef16a32db8490e59b7a89f9", + "@angular/cdk": "github:angular/cdk-builds#ac5186a3f2b0eb9757617ced2d6e30e29ccd15e3", + "@angular/common": "github:angular/common-builds#67b6183d0980d459b5425cf8f3ee7731091910a2", + "@angular/compiler": "github:angular/compiler-builds#77fb241e18fa51f6c20b15269e3ec41438812308", + "@angular/compiler-cli": "github:angular/compiler-cli-builds#6b534391ae644ad5d720d611620b0164eb4bdd62", + "@angular/core": "github:angular/core-builds#0953f784f67ba20617a233c77cfc03214d6d6a64", + "@angular/forms": "github:angular/forms-builds#adcb3810aee67a5c9b1381dee9a606ef9da9b428", + "@angular/language-service": "github:angular/language-service-builds#a458dd57809621d399b18a79f3a35a0c54373874", + "@angular/localize": "github:angular/localize-builds#9953ba75a98eab347a5b99589db85ff243696891", + "@angular/material": "github:angular/material-builds#a9b949632c4a1d482901b3efd77f42817d5eb49d", + "@angular/material-moment-adapter": "github:angular/material-moment-adapter-builds#7c650ae1ec319407546685ac0dc39a46f8981415", + "@angular/platform-browser": "github:angular/platform-browser-builds#8143dedad3f2e32a4b2f64dfa921280dd5856419", + "@angular/platform-browser-dynamic": "github:angular/platform-browser-dynamic-builds#45a110ea72cdfc0c33248564e9f65a1df3f05f6b", + "@angular/platform-server": "github:angular/platform-server-builds#462fd1e71382b1bc3f7985de276fd73fc7bacc75", + "@angular/router": "github:angular/router-builds#a88b30ec686b72136805dc386defe51031cab308", + "@angular/service-worker": "github:angular/service-worker-builds#0ea41701ee73c131025ba4e71dab65086357167d" } } From 4d564f66f694011724d4933bf025f1c4fed55bca Mon Sep 17 00:00:00 2001 From: Alan Agius <17563226+alan-agius4@users.noreply.github.com> Date: Mon, 16 Mar 2026 09:23:43 +0000 Subject: [PATCH 143/226] fix(@angular/ssr): disallow x-forwarded-prefix starting with a backslash Updated the INVALID_PREFIX_REGEX to ensure that prefixes starting with a backslash are considered invalid. Previously, only multiple slashes or dot segments were explicitly disallowed at the start. Also updated the associated validation error message and unit tests to reflect this change. --- packages/angular/ssr/src/utils/validation.ts | 4 ++-- packages/angular/ssr/test/utils/validation_spec.ts | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/packages/angular/ssr/src/utils/validation.ts b/packages/angular/ssr/src/utils/validation.ts index dd89caf55592..cb1bf6ecb56b 100644 --- a/packages/angular/ssr/src/utils/validation.ts +++ b/packages/angular/ssr/src/utils/validation.ts @@ -29,7 +29,7 @@ const VALID_HOST_REGEX = /^[a-z0-9.:-]+$/i; /** * Regular expression to validate that the prefix is valid. */ -const INVALID_PREFIX_REGEX = /^[/\\]{2}|(?:^|[/\\])\.\.?(?:[/\\]|$)/; +const INVALID_PREFIX_REGEX = /^(?:\\|\/[/\\])|(?:^|[/\\])\.\.?(?:[/\\]|$)/; /** * Extracts the first value from a multi-value header string. @@ -270,7 +270,7 @@ function validateHeaders(request: Request): void { const xForwardedPrefix = getFirstHeaderValue(headers.get('x-forwarded-prefix')); if (xForwardedPrefix && INVALID_PREFIX_REGEX.test(xForwardedPrefix)) { throw new Error( - 'Header "x-forwarded-prefix" must not start with multiple "/" or "\\" or contain ".", ".." path segments.', + 'Header "x-forwarded-prefix" must not start with "\\" or multiple "/" or contain ".", ".." path segments.', ); } } diff --git a/packages/angular/ssr/test/utils/validation_spec.ts b/packages/angular/ssr/test/utils/validation_spec.ts index 6f8b5e170ec1..d8c3eaeebdb3 100644 --- a/packages/angular/ssr/test/utils/validation_spec.ts +++ b/packages/angular/ssr/test/utils/validation_spec.ts @@ -147,8 +147,8 @@ describe('Validation Utils', () => { ); }); - it('should throw error if x-forwarded-prefix starts with multiple slashes or backslashes', () => { - const inputs = ['//evil', '\\\\evil', '/\\evil', '\\/evil']; + it('should throw error if x-forwarded-prefix starts with a backslash or multiple slashes', () => { + const inputs = ['//evil', '\\\\evil', '/\\evil', '\\/evil', '\\evil']; for (const prefix of inputs) { const request = new Request('https://example.com', { @@ -160,7 +160,7 @@ describe('Validation Utils', () => { expect(() => validateRequest(request, allowedHosts, false)) .withContext(`Prefix: "${prefix}"`) .toThrowError( - 'Header "x-forwarded-prefix" must not start with multiple "/" or "\\" or contain ".", ".." path segments.', + 'Header "x-forwarded-prefix" must not start with "\\" or multiple "/" or contain ".", ".." path segments.', ); } }); @@ -193,7 +193,7 @@ describe('Validation Utils', () => { expect(() => validateRequest(request, allowedHosts, false)) .withContext(`Prefix: "${prefix}"`) .toThrowError( - 'Header "x-forwarded-prefix" must not start with multiple "/" or "\\" or contain ".", ".." path segments.', + 'Header "x-forwarded-prefix" must not start with "\\" or multiple "/" or contain ".", ".." path segments.', ); } }); From 998b8298e3106c95d77ced8090ab815365c462c7 Mon Sep 17 00:00:00 2001 From: Alan Agius <17563226+alan-agius4@users.noreply.github.com> Date: Mon, 16 Mar 2026 13:09:21 +0000 Subject: [PATCH 144/226] fix(@angular/ssr): support custom headers in redirect responses Updates createRedirectResponse to accept an optional Record<string, string> of headers, allowing custom headers to be merged into the redirect response. The Location and Vary: X-Forwarded-Prefix headers are automatically set to ensure correct routing and proxy behavior. AngularServerApp now passes relevant headers from the matched route or response context when creating a redirect. --- packages/angular/ssr/src/app.ts | 5 +- packages/angular/ssr/src/utils/redirect.ts | 28 +++++++-- .../angular/ssr/test/utils/redirect_spec.ts | 60 +++++++++++++++++++ 3 files changed, 87 insertions(+), 6 deletions(-) create mode 100644 packages/angular/ssr/test/utils/redirect_spec.ts diff --git a/packages/angular/ssr/src/app.ts b/packages/angular/ssr/src/app.ts index 96afaa44c8d6..0c381c08ae88 100644 --- a/packages/angular/ssr/src/app.ts +++ b/packages/angular/ssr/src/app.ts @@ -190,7 +190,7 @@ export class AngularServerApp { return null; } - const { redirectTo, status, renderMode } = matchedRoute; + const { redirectTo, status, renderMode, headers } = matchedRoute; if (redirectTo !== undefined) { return createRedirectResponse( @@ -199,6 +199,7 @@ export class AngularServerApp { buildPathWithParams(redirectTo, url.pathname), ), status, + headers, ); } @@ -352,7 +353,7 @@ export class AngularServerApp { } if (result.redirectTo) { - return createRedirectResponse(result.redirectTo, responseInit.status); + return createRedirectResponse(result.redirectTo, responseInit.status, headers); } if (renderMode === RenderMode.Prerender) { diff --git a/packages/angular/ssr/src/utils/redirect.ts b/packages/angular/ssr/src/utils/redirect.ts index 18ca3f92b819..3da6a0232bd8 100644 --- a/packages/angular/ssr/src/utils/redirect.ts +++ b/packages/angular/ssr/src/utils/redirect.ts @@ -27,9 +27,14 @@ export function isValidRedirectResponseCode(code: number): boolean { * @param location - The URL to which the response should redirect. * @param status - The HTTP status code for the redirection. Defaults to 302 (Found). * See: https://developer.mozilla.org/en-US/docs/Web/API/Response/redirect_static#status + * @param headers - Additional headers to include in the response. * @returns A `Response` object representing the HTTP redirect. */ -export function createRedirectResponse(location: string, status = 302): Response { +export function createRedirectResponse( + location: string, + status = 302, + headers?: Record<string, string>, +): Response { if (ngDevMode && !isValidRedirectResponseCode(status)) { throw new Error( `Invalid redirect status code: ${status}. ` + @@ -37,10 +42,25 @@ export function createRedirectResponse(location: string, status = 302): Response ); } + const resHeaders = new Headers(headers); + if (ngDevMode && resHeaders.has('location')) { + // eslint-disable-next-line no-console + console.warn( + `Location header "${resHeaders.get('location')}" will ignored and set to "${location}".`, + ); + } + + let vary = resHeaders.get('Vary') ?? ''; + if (vary) { + vary += ', '; + } + vary += 'X-Forwarded-Prefix'; + + resHeaders.set('Vary', vary); + resHeaders.set('Location', location); + return new Response(null, { status, - headers: { - 'Location': location, - }, + headers: resHeaders, }); } diff --git a/packages/angular/ssr/test/utils/redirect_spec.ts b/packages/angular/ssr/test/utils/redirect_spec.ts new file mode 100644 index 000000000000..bddbb81e2723 --- /dev/null +++ b/packages/angular/ssr/test/utils/redirect_spec.ts @@ -0,0 +1,60 @@ +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.dev/license + */ + +import { createRedirectResponse } from '../../src/utils/redirect'; + +describe('Redirect Utils', () => { + describe('createRedirectResponse', () => { + it('should create a redirect response with default status 302', () => { + const response = createRedirectResponse('/home'); + expect(response.status).toBe(302); + expect(response.headers.get('Location')).toBe('/home'); + expect(response.headers.get('Vary')).toBe('X-Forwarded-Prefix'); + }); + + it('should create a redirect response with a custom status', () => { + const response = createRedirectResponse('/home', 301); + expect(response.status).toBe(301); + expect(response.headers.get('Location')).toBe('/home'); + }); + + it('should allow providing additional headers', () => { + const response = createRedirectResponse('/home', 302, { 'X-Custom': 'value' }); + expect(response.headers.get('X-Custom')).toBe('value'); + expect(response.headers.get('Location')).toBe('/home'); + expect(response.headers.get('Vary')).toBe('X-Forwarded-Prefix'); + }); + + it('should append to Vary header instead of overriding it', () => { + const response = createRedirectResponse('/home', 302, { + 'Location': '/evil', + 'Vary': 'Host', + }); + expect(response.headers.get('Location')).toBe('/home'); + expect(response.headers.get('Vary')).toBe('Host, X-Forwarded-Prefix'); + }); + + it('should warn if Location header is provided in extra headers in dev mode', () => { + // @ts-expect-error accessing global + globalThis.ngDevMode = true; + const warnSpy = spyOn(console, 'warn'); + createRedirectResponse('/home', 302, { 'Location': '/evil' }); + expect(warnSpy).toHaveBeenCalledWith( + 'Location header "/evil" will ignored and set to "/home".', + ); + }); + + it('should throw error for invalid redirect status code in dev mode', () => { + // @ts-expect-error accessing global + globalThis.ngDevMode = true; + expect(() => createRedirectResponse('/home', 200)).toThrowError( + /Invalid redirect status code: 200/, + ); + }); + }); +}); From 67cd62e4aec6ece5d6bafd3d5343faf640703f44 Mon Sep 17 00:00:00 2001 From: Alan Agius <17563226+alan-agius4@users.noreply.github.com> Date: Tue, 17 Mar 2026 11:19:00 +0000 Subject: [PATCH 145/226] build: update all non-major dependencies See associated pull request for more information. Closes #32756 as a pr takeover --- eslint.config.mjs | 3 +- modules/testing/builder/package.json | 4 +- package.json | 22 +- packages/angular/build/package.json | 14 +- packages/angular/cli/package.json | 6 +- .../angular_devkit/build_angular/package.json | 12 +- .../schematics_cli/package.json | 2 +- pnpm-lock.yaml | 1453 ++++++++++------- 8 files changed, 913 insertions(+), 603 deletions(-) diff --git a/eslint.config.mjs b/eslint.config.mjs index cd0a12c4aa6d..08a993804c32 100644 --- a/eslint.config.mjs +++ b/eslint.config.mjs @@ -75,7 +75,8 @@ export default [ sourceType: 'module', parserOptions: { - project: 'tsconfig.json', + projectService: true, // v8 recommended alternative to "project" + tsconfigRootDir: import.meta.dirname, }, }, diff --git a/modules/testing/builder/package.json b/modules/testing/builder/package.json index 205458b0a4c1..361bf2ebaf97 100644 --- a/modules/testing/builder/package.json +++ b/modules/testing/builder/package.json @@ -4,11 +4,11 @@ "@angular-devkit/build-angular": "workspace:*", "@angular-devkit/core": "workspace:*", "@angular/ssr": "workspace:*", - "@vitest/coverage-v8": "4.0.18", + "@vitest/coverage-v8": "4.1.0", "browser-sync": "3.0.4", "jsdom": "28.1.0", "ng-packagr": "22.0.0-next.0", "rxjs": "7.8.2", - "vitest": "4.0.18" + "vitest": "4.1.0" } } diff --git a/package.json b/package.json index 905d02ca4d32..d24af3193639 100644 --- a/package.json +++ b/package.json @@ -59,8 +59,8 @@ "@babel/core": "7.29.0", "@bazel/bazelisk": "1.28.1", "@bazel/buildifier": "8.2.1", - "@eslint/compat": "2.0.2", - "@eslint/eslintrc": "3.3.4", + "@eslint/compat": "2.0.3", + "@eslint/eslintrc": "3.3.5", "@eslint/js": "10.0.1", "@rollup/plugin-alias": "^6.0.0", "@rollup/plugin-commonjs": "^29.0.0", @@ -68,7 +68,7 @@ "@rollup/plugin-node-resolve": "16.0.3", "@rollup/wasm-node": "4.59.0", "@stylistic/eslint-plugin": "^5.0.0", - "@tony.ganchev/eslint-plugin-header": "~3.2.4", + "@tony.ganchev/eslint-plugin-header": "~3.3.1", "@types/babel__core": "7.20.5", "@types/babel__generator": "^7.6.8", "@types/browser-sync": "^2.27.0", @@ -91,13 +91,13 @@ "@types/yargs": "^17.0.20", "@types/yargs-parser": "^21.0.0", "@types/yarnpkg__lockfile": "^1.1.5", - "@typescript-eslint/eslint-plugin": "8.56.1", - "@typescript-eslint/parser": "8.56.1", + "@typescript-eslint/eslint-plugin": "8.57.0", + "@typescript-eslint/parser": "8.57.0", "ajv": "8.18.0", "buffer": "6.0.3", "esbuild": "0.27.3", "esbuild-wasm": "0.27.3", - "eslint": "10.0.2", + "eslint": "10.0.3", "eslint-config-prettier": "10.1.8", "eslint-plugin-import": "2.32.0", "express": "5.2.1", @@ -119,19 +119,19 @@ "lodash": "^4.17.21", "magic-string": "0.30.21", "prettier": "^3.0.0", - "puppeteer": "24.38.0", + "puppeteer": "24.39.1", "quicktype-core": "23.2.6", "rollup": "4.59.0", - "rollup-license-plugin": "~3.1.0", - "rollup-plugin-dts": "6.3.0", + "rollup-license-plugin": "~3.2.0", + "rollup-plugin-dts": "6.4.0", "rollup-plugin-sourcemaps2": "0.5.6", "semver": "7.7.4", "source-map-support": "0.5.21", "tslib": "2.8.1", "typescript": "6.0.1-rc", - "undici": "7.22.0", + "undici": "7.24.4", "unenv": "^1.10.0", - "verdaccio": "6.2.9", + "verdaccio": "6.3.2", "verdaccio-auth-memory": "^10.0.0", "zone.js": "^0.16.0" }, diff --git a/packages/angular/build/package.json b/packages/angular/build/package.json index 98a9285e0fd4..aa0c32ae52e3 100644 --- a/packages/angular/build/package.json +++ b/packages/angular/build/package.json @@ -23,8 +23,8 @@ "@babel/core": "7.29.0", "@babel/helper-annotate-as-pure": "7.27.3", "@babel/helper-split-export-declaration": "7.24.7", - "@inquirer/confirm": "6.0.8", - "@vitejs/plugin-basic-ssl": "2.1.4", + "@inquirer/confirm": "6.0.10", + "@vitejs/plugin-basic-ssl": "2.2.0", "beasties": "0.4.1", "browserslist": "^4.26.0", "esbuild": "0.27.3", @@ -37,8 +37,8 @@ "parse5-html-rewriting-stream": "8.0.0", "picomatch": "4.0.3", "piscina": "5.1.4", - "rolldown": "1.0.0-rc.7", - "sass": "1.97.3", + "rolldown": "1.0.0-rc.9", + "sass": "1.98.0", "semver": "7.7.4", "source-map-support": "0.5.21", "tinyglobby": "0.2.15", @@ -46,17 +46,17 @@ "watchpack": "2.5.1" }, "optionalDependencies": { - "lmdb": "3.5.1" + "lmdb": "3.5.2" }, "devDependencies": { "@angular-devkit/core": "workspace:*", "@angular/ssr": "workspace:*", "jsdom": "28.1.0", - "less": "4.4.2", + "less": "4.6.4", "ng-packagr": "22.0.0-next.0", "postcss": "8.5.8", "rxjs": "7.8.2", - "vitest": "4.0.18" + "vitest": "4.1.0" }, "peerDependencies": { "@angular/compiler": "0.0.0-ANGULAR-FW-PEER-DEP", diff --git a/packages/angular/cli/package.json b/packages/angular/cli/package.json index 6ab17c1c788d..f2f053facab5 100644 --- a/packages/angular/cli/package.json +++ b/packages/angular/cli/package.json @@ -25,17 +25,17 @@ "@angular-devkit/architect": "workspace:0.0.0-EXPERIMENTAL-PLACEHOLDER", "@angular-devkit/core": "workspace:0.0.0-PLACEHOLDER", "@angular-devkit/schematics": "workspace:0.0.0-PLACEHOLDER", - "@inquirer/prompts": "8.3.0", + "@inquirer/prompts": "8.3.2", "@listr2/prompt-adapter-inquirer": "4.2.1", "@modelcontextprotocol/sdk": "1.27.1", "@schematics/angular": "workspace:0.0.0-PLACEHOLDER", "@yarnpkg/lockfile": "1.1.0", - "algoliasearch": "5.49.1", + "algoliasearch": "5.49.2", "ini": "6.0.0", "jsonc-parser": "3.3.1", "listr2": "10.2.1", "npm-package-arg": "13.0.2", - "pacote": "21.4.0", + "pacote": "21.5.0", "parse5-html-rewriting-stream": "8.0.0", "semver": "7.7.4", "yargs": "18.0.0", diff --git a/packages/angular_devkit/build_angular/package.json b/packages/angular_devkit/build_angular/package.json index 3820fc0b705a..1242ea933801 100644 --- a/packages/angular_devkit/build_angular/package.json +++ b/packages/angular_devkit/build_angular/package.json @@ -24,7 +24,7 @@ "@ngtools/webpack": "workspace:0.0.0-PLACEHOLDER", "ansi-colors": "4.1.3", "autoprefixer": "10.4.27", - "babel-loader": "10.0.0", + "babel-loader": "10.1.1", "browserslist": "^4.26.0", "copy-webpack-plugin": "14.0.0", "css-loader": "7.1.4", @@ -33,11 +33,11 @@ "istanbul-lib-instrument": "6.0.3", "jsonc-parser": "3.3.1", "karma-source-map-support": "1.4.0", - "less": "4.4.2", - "less-loader": "12.3.1", + "less": "4.6.4", + "less-loader": "12.3.2", "license-webpack-plugin": "4.0.2", "loader-utils": "3.3.1", - "mini-css-extract-plugin": "2.10.0", + "mini-css-extract-plugin": "2.10.1", "open": "11.0.0", "ora": "9.3.0", "picomatch": "4.0.3", @@ -46,7 +46,7 @@ "postcss-loader": "8.2.1", "resolve-url-loader": "5.0.0", "rxjs": "7.8.2", - "sass": "1.97.3", + "sass": "1.98.0", "sass-loader": "16.0.7", "semver": "7.7.4", "source-map-loader": "5.0.0", @@ -67,7 +67,7 @@ "@angular/ssr": "workspace:*", "browser-sync": "3.0.4", "ng-packagr": "22.0.0-next.0", - "undici": "7.22.0" + "undici": "7.24.4" }, "peerDependencies": { "@angular/compiler-cli": "0.0.0-ANGULAR-FW-PEER-DEP", diff --git a/packages/angular_devkit/schematics_cli/package.json b/packages/angular_devkit/schematics_cli/package.json index 92ab60dc5b11..dbdeeab43501 100644 --- a/packages/angular_devkit/schematics_cli/package.json +++ b/packages/angular_devkit/schematics_cli/package.json @@ -18,6 +18,6 @@ "dependencies": { "@angular-devkit/core": "workspace:0.0.0-PLACEHOLDER", "@angular-devkit/schematics": "workspace:0.0.0-PLACEHOLDER", - "@inquirer/prompts": "8.3.0" + "@inquirer/prompts": "8.3.2" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 00595e3ed192..77fdde1c8925 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -71,14 +71,14 @@ importers: specifier: 8.2.1 version: 8.2.1 '@eslint/compat': - specifier: 2.0.2 - version: 2.0.2(eslint@10.0.2(jiti@2.6.1)) + specifier: 2.0.3 + version: 2.0.3(eslint@10.0.3(jiti@2.6.1)) '@eslint/eslintrc': - specifier: 3.3.4 - version: 3.3.4 + specifier: 3.3.5 + version: 3.3.5 '@eslint/js': specifier: 10.0.1 - version: 10.0.1(eslint@10.0.2(jiti@2.6.1)) + version: 10.0.1(eslint@10.0.3(jiti@2.6.1)) '@rollup/plugin-alias': specifier: ^6.0.0 version: 6.0.0(rollup@4.59.0) @@ -96,10 +96,10 @@ importers: version: 4.59.0 '@stylistic/eslint-plugin': specifier: ^5.0.0 - version: 5.10.0(eslint@10.0.2(jiti@2.6.1)) + version: 5.10.0(eslint@10.0.3(jiti@2.6.1)) '@tony.ganchev/eslint-plugin-header': - specifier: ~3.2.4 - version: 3.2.6(eslint@10.0.2(jiti@2.6.1)) + specifier: ~3.3.1 + version: 3.3.1(eslint@10.0.3(jiti@2.6.1)) '@types/babel__core': specifier: 7.20.5 version: 7.20.5 @@ -167,11 +167,11 @@ importers: specifier: ^1.1.5 version: 1.1.9 '@typescript-eslint/eslint-plugin': - specifier: 8.56.1 - version: 8.56.1(@typescript-eslint/parser@8.56.1(eslint@10.0.2(jiti@2.6.1))(typescript@6.0.1-rc))(eslint@10.0.2(jiti@2.6.1))(typescript@6.0.1-rc) + specifier: 8.57.0 + version: 8.57.0(@typescript-eslint/parser@8.57.0(eslint@10.0.3(jiti@2.6.1))(typescript@6.0.1-rc))(eslint@10.0.3(jiti@2.6.1))(typescript@6.0.1-rc) '@typescript-eslint/parser': - specifier: 8.56.1 - version: 8.56.1(eslint@10.0.2(jiti@2.6.1))(typescript@6.0.1-rc) + specifier: 8.57.0 + version: 8.57.0(eslint@10.0.3(jiti@2.6.1))(typescript@6.0.1-rc) ajv: specifier: 8.18.0 version: 8.18.0 @@ -185,14 +185,14 @@ importers: specifier: 0.27.3 version: 0.27.3 eslint: - specifier: 10.0.2 - version: 10.0.2(jiti@2.6.1) + specifier: 10.0.3 + version: 10.0.3(jiti@2.6.1) eslint-config-prettier: specifier: 10.1.8 - version: 10.1.8(eslint@10.0.2(jiti@2.6.1)) + version: 10.1.8(eslint@10.0.3(jiti@2.6.1)) eslint-plugin-import: specifier: 2.32.0 - version: 2.32.0(@typescript-eslint/parser@8.56.1(eslint@10.0.2(jiti@2.6.1))(typescript@6.0.1-rc))(eslint@10.0.2(jiti@2.6.1)) + version: 2.32.0(@typescript-eslint/parser@8.57.0(eslint@10.0.3(jiti@2.6.1))(typescript@6.0.1-rc))(eslint@10.0.3(jiti@2.6.1)) express: specifier: 5.2.1 version: 5.2.1 @@ -251,8 +251,8 @@ importers: specifier: ^3.0.0 version: 3.8.1 puppeteer: - specifier: 24.38.0 - version: 24.38.0(bufferutil@4.1.0)(typescript@6.0.1-rc)(utf-8-validate@6.0.6) + specifier: 24.39.1 + version: 24.39.1(bufferutil@4.1.0)(typescript@6.0.1-rc)(utf-8-validate@6.0.6) quicktype-core: specifier: 23.2.6 version: 23.2.6(encoding@0.1.13) @@ -260,11 +260,11 @@ importers: specifier: 4.59.0 version: 4.59.0 rollup-license-plugin: - specifier: ~3.1.0 - version: 3.1.0 + specifier: ~3.2.0 + version: 3.2.1 rollup-plugin-dts: - specifier: 6.3.0 - version: 6.3.0(rollup@4.59.0)(typescript@6.0.1-rc) + specifier: 6.4.0 + version: 6.4.0(rollup@4.59.0)(typescript@6.0.1-rc) rollup-plugin-sourcemaps2: specifier: 0.5.6 version: 0.5.6(@types/node@22.19.15)(rollup@4.59.0) @@ -281,14 +281,14 @@ importers: specifier: 6.0.1-rc version: 6.0.1-rc undici: - specifier: 7.22.0 - version: 7.22.0 + specifier: 7.24.4 + version: 7.24.4 unenv: specifier: ^1.10.0 version: 1.10.0 verdaccio: - specifier: 6.2.9 - version: 6.2.9(encoding@0.1.13) + specifier: 6.3.2 + version: 6.3.2(encoding@0.1.13) verdaccio-auth-memory: specifier: ^10.0.0 version: 10.3.1 @@ -311,8 +311,8 @@ importers: specifier: workspace:* version: link:../../../packages/angular/ssr '@vitest/coverage-v8': - specifier: 4.0.18 - version: 4.0.18(vitest@4.0.18(@opentelemetry/api@1.9.0)(@types/node@24.12.0)(jiti@2.6.1)(jsdom@28.1.0)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)) + specifier: 4.1.0 + version: 4.1.0(vitest@4.1.0(@opentelemetry/api@1.9.0)(@types/node@24.12.0)(jiti@2.6.1)(jsdom@28.1.0)(less@4.6.4)(sass@1.98.0)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)) browser-sync: specifier: 3.0.4 version: 3.0.4(bufferutil@4.1.0)(utf-8-validate@6.0.6) @@ -326,8 +326,8 @@ importers: specifier: 7.8.2 version: 7.8.2 vitest: - specifier: 4.0.18 - version: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@24.12.0)(jiti@2.6.1)(jsdom@28.1.0)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) + specifier: 4.1.0 + version: 4.1.0(@opentelemetry/api@1.9.0)(@types/node@24.12.0)(jiti@2.6.1)(jsdom@28.1.0)(less@4.6.4)(sass@1.98.0)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) packages/angular/build: dependencies: @@ -347,11 +347,11 @@ importers: specifier: 7.24.7 version: 7.24.7 '@inquirer/confirm': - specifier: 6.0.8 - version: 6.0.8(@types/node@24.12.0) + specifier: 6.0.10 + version: 6.0.10(@types/node@24.12.0) '@vitejs/plugin-basic-ssl': - specifier: 2.1.4 - version: 2.1.4(vite@7.3.1(@types/node@24.12.0)(jiti@2.6.1)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)) + specifier: 2.2.0 + version: 2.2.0(vite@7.3.1(@types/node@24.12.0)(jiti@2.6.1)(less@4.6.4)(sass@1.98.0)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)) beasties: specifier: 0.4.1 version: 0.4.1 @@ -389,11 +389,11 @@ importers: specifier: 5.1.4 version: 5.1.4 rolldown: - specifier: 1.0.0-rc.7 - version: 1.0.0-rc.7 + specifier: 1.0.0-rc.9 + version: 1.0.0-rc.9 sass: - specifier: 1.97.3 - version: 1.97.3 + specifier: 1.98.0 + version: 1.98.0 semver: specifier: 7.7.4 version: 7.7.4 @@ -405,7 +405,7 @@ importers: version: 0.2.15 vite: specifier: 7.3.1 - version: 7.3.1(@types/node@24.12.0)(jiti@2.6.1)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) + version: 7.3.1(@types/node@24.12.0)(jiti@2.6.1)(less@4.6.4)(sass@1.98.0)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) watchpack: specifier: 2.5.1 version: 2.5.1 @@ -420,8 +420,8 @@ importers: specifier: 28.1.0 version: 28.1.0 less: - specifier: 4.4.2 - version: 4.4.2 + specifier: 4.6.4 + version: 4.6.4 ng-packagr: specifier: 22.0.0-next.0 version: 22.0.0-next.0(@angular/compiler-cli@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(typescript@6.0.1-rc))(tslib@2.8.1)(typescript@6.0.1-rc) @@ -432,12 +432,12 @@ importers: specifier: 7.8.2 version: 7.8.2 vitest: - specifier: 4.0.18 - version: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@24.12.0)(jiti@2.6.1)(jsdom@28.1.0)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) + specifier: 4.1.0 + version: 4.1.0(@opentelemetry/api@1.9.0)(@types/node@24.12.0)(jiti@2.6.1)(jsdom@28.1.0)(less@4.6.4)(sass@1.98.0)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) optionalDependencies: lmdb: - specifier: 3.5.1 - version: 3.5.1 + specifier: 3.5.2 + version: 3.5.2 packages/angular/cli: dependencies: @@ -451,11 +451,11 @@ importers: specifier: workspace:0.0.0-PLACEHOLDER version: link:../../angular_devkit/schematics '@inquirer/prompts': - specifier: 8.3.0 - version: 8.3.0(@types/node@24.12.0) + specifier: 8.3.2 + version: 8.3.2(@types/node@24.12.0) '@listr2/prompt-adapter-inquirer': specifier: 4.2.1 - version: 4.2.1(@inquirer/prompts@8.3.0(@types/node@24.12.0))(@types/node@24.12.0)(listr2@10.2.1) + version: 4.2.1(@inquirer/prompts@8.3.2(@types/node@24.12.0))(@types/node@24.12.0)(listr2@10.2.1) '@modelcontextprotocol/sdk': specifier: 1.27.1 version: 1.27.1(zod@4.3.6) @@ -466,8 +466,8 @@ importers: specifier: 1.1.0 version: 1.1.0 algoliasearch: - specifier: 5.49.1 - version: 5.49.1 + specifier: 5.49.2 + version: 5.49.2 ini: specifier: 6.0.0 version: 6.0.0 @@ -481,8 +481,8 @@ importers: specifier: 13.0.2 version: 13.0.2 pacote: - specifier: 21.4.0 - version: 21.4.0 + specifier: 21.5.0 + version: 21.5.0 parse5-html-rewriting-stream: specifier: 8.0.0 version: 8.0.0 @@ -608,8 +608,8 @@ importers: specifier: 10.4.27 version: 10.4.27(postcss@8.5.8) babel-loader: - specifier: 10.0.0 - version: 10.0.0(@babel/core@7.29.0)(webpack@5.105.4(esbuild@0.27.3)) + specifier: 10.1.1 + version: 10.1.1(@babel/core@7.29.0)(webpack@5.105.4(esbuild@0.27.3)) browserslist: specifier: ^4.26.0 version: 4.28.1 @@ -635,11 +635,11 @@ importers: specifier: 1.4.0 version: 1.4.0 less: - specifier: 4.4.2 - version: 4.4.2 + specifier: 4.6.4 + version: 4.6.4 less-loader: - specifier: 12.3.1 - version: 12.3.1(less@4.4.2)(webpack@5.105.4(esbuild@0.27.3)) + specifier: 12.3.2 + version: 12.3.2(less@4.6.4)(webpack@5.105.4(esbuild@0.27.3)) license-webpack-plugin: specifier: 4.0.2 version: 4.0.2(webpack@5.105.4(esbuild@0.27.3)) @@ -647,8 +647,8 @@ importers: specifier: 3.3.1 version: 3.3.1 mini-css-extract-plugin: - specifier: 2.10.0 - version: 2.10.0(webpack@5.105.4(esbuild@0.27.3)) + specifier: 2.10.1 + version: 2.10.1(webpack@5.105.4(esbuild@0.27.3)) open: specifier: 11.0.0 version: 11.0.0 @@ -674,11 +674,11 @@ importers: specifier: 7.8.2 version: 7.8.2 sass: - specifier: 1.97.3 - version: 1.97.3 + specifier: 1.98.0 + version: 1.98.0 sass-loader: specifier: 16.0.7 - version: 16.0.7(sass@1.97.3)(webpack@5.105.4(esbuild@0.27.3)) + version: 16.0.7(sass@1.98.0)(webpack@5.105.4(esbuild@0.27.3)) semver: specifier: 7.7.4 version: 7.7.4 @@ -723,8 +723,8 @@ importers: specifier: 22.0.0-next.0 version: 22.0.0-next.0(@angular/compiler-cli@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(typescript@6.0.1-rc))(tslib@2.8.1)(typescript@6.0.1-rc) undici: - specifier: 7.22.0 - version: 7.22.0 + specifier: 7.24.4 + version: 7.24.4 optionalDependencies: esbuild: specifier: 0.27.3 @@ -804,8 +804,8 @@ importers: specifier: workspace:0.0.0-PLACEHOLDER version: link:../schematics '@inquirer/prompts': - specifier: 8.3.0 - version: 8.3.0(@types/node@24.12.0) + specifier: 8.3.2 + version: 8.3.2(@types/node@24.12.0) packages/ngtools/webpack: devDependencies: @@ -866,60 +866,60 @@ packages: '@actions/io@3.0.2': resolution: {integrity: sha512-nRBchcMM+QK1pdjO7/idu86rbJI5YHUKCvKs0KxnSYbVe3F51UfGxuZX4Qy/fWlp6l7gWFwIkrOzN+oUK03kfw==} - '@algolia/abtesting@1.15.1': - resolution: {integrity: sha512-2yuIC48rUuHGhU1U5qJ9kJHaxYpJ0jpDHJVI5ekOxSMYXlH4+HP+pA31G820lsAznfmu2nzDV7n5RO44zIY1zw==} + '@algolia/abtesting@1.15.2': + resolution: {integrity: sha512-rF7vRVE61E0QORw8e2NNdnttcl3jmFMWS9B4hhdga12COe+lMa26bQLfcBn/Nbp9/AF/8gXdaRCPsVns3CnjsA==} engines: {node: '>= 14.0.0'} - '@algolia/client-abtesting@5.49.1': - resolution: {integrity: sha512-h6M7HzPin+45/l09q0r2dYmocSSt2MMGOOk5c4O5K/bBBlEwf1BKfN6z+iX4b8WXcQQhf7rgQwC52kBZJt/ZZw==} + '@algolia/client-abtesting@5.49.2': + resolution: {integrity: sha512-XyvKCm0RRmovMI/ChaAVjTwpZhXdbgt3iZofK914HeEHLqD1MUFFVLz7M0+Ou7F56UkHXwRbpHwb9xBDNopprQ==} engines: {node: '>= 14.0.0'} - '@algolia/client-analytics@5.49.1': - resolution: {integrity: sha512-048T9/Z8OeLmTk8h76QUqaNFp7Rq2VgS2Zm6Y2tNMYGQ1uNuzePY/udB5l5krlXll7ZGflyCjFvRiOtlPZpE9g==} + '@algolia/client-analytics@5.49.2': + resolution: {integrity: sha512-jq/3qvtmj3NijZlhq7A1B0Cl41GfaBpjJxcwukGsYds6aMSCWrEAJ9pUqw/C9B3hAmILYKl7Ljz3N9SFvekD3Q==} engines: {node: '>= 14.0.0'} - '@algolia/client-common@5.49.1': - resolution: {integrity: sha512-vp5/a9ikqvf3mn9QvHN8PRekn8hW34aV9eX+O0J5mKPZXeA6Pd5OQEh2ZWf7gJY6yyfTlLp5LMFzQUAU+Fpqpg==} + '@algolia/client-common@5.49.2': + resolution: {integrity: sha512-bn0biLequn3epobCfjUqCxlIlurLr4RHu7RaE4trgN+RDcUq6HCVC3/yqq1hwbNYpVtulnTOJzcaxYlSr1fnuw==} engines: {node: '>= 14.0.0'} - '@algolia/client-insights@5.49.1': - resolution: {integrity: sha512-B6N7PgkvYrul3bntTz/l6uXnhQ2bvP+M7NqTcayh681tSqPaA5cJCUBp/vrP7vpPRpej4Eeyx2qz5p0tE/2N2g==} + '@algolia/client-insights@5.49.2': + resolution: {integrity: sha512-z14wfFs1T3eeYbCArC8pvntAWsPo9f6hnUGoj8IoRUJTwgJiiySECkm8bmmV47/x0oGHfsVn3kBdjMX0yq0sNA==} engines: {node: '>= 14.0.0'} - '@algolia/client-personalization@5.49.1': - resolution: {integrity: sha512-v+4DN+lkYfBd01Hbnb9ZrCHe7l+mvihyx218INRX/kaCXROIWUDIT1cs3urQxfE7kXBFnLsqYeOflQALv/gA5w==} + '@algolia/client-personalization@5.49.2': + resolution: {integrity: sha512-GpRf7yuuAX93+Qt0JGEJZwgtL0MFdjFO9n7dn8s2pA9mTjzl0Sc5+uTk1VPbIAuf7xhCP9Mve+URGb6J+EYxgA==} engines: {node: '>= 14.0.0'} - '@algolia/client-query-suggestions@5.49.1': - resolution: {integrity: sha512-Un11cab6ZCv0W+Jiak8UktGIqoa4+gSNgEZNfG8m8eTsXGqwIEr370H3Rqwj87zeNSlFpH2BslMXJ/cLNS1qtg==} + '@algolia/client-query-suggestions@5.49.2': + resolution: {integrity: sha512-HZwApmNkp0DiAjZcLYdQLddcG4Agb88OkojiAHGgcm5DVXobT5uSZ9lmyrbw/tmQBJwgu2CNw4zTyXoIB7YbPA==} engines: {node: '>= 14.0.0'} - '@algolia/client-search@5.49.1': - resolution: {integrity: sha512-Nt9hri7nbOo0RipAsGjIssHkpLMHHN/P7QqENywAq5TLsoYDzUyJGny8FEiD/9KJUxtGH8blGpMedilI6kK3rA==} + '@algolia/client-search@5.49.2': + resolution: {integrity: sha512-y1IOpG6OSmTpGg/CT0YBb/EAhR2nsC18QWp9Jy8HO9iGySpcwaTvs5kHa17daP3BMTwWyaX9/1tDTDQshZzXdg==} engines: {node: '>= 14.0.0'} - '@algolia/ingestion@1.49.1': - resolution: {integrity: sha512-b5hUXwDqje0Y4CpU6VL481DXgPgxpTD5sYMnfQTHKgUispGnaCLCm2/T9WbJo1YNUbX3iHtYDArp804eD6CmRQ==} + '@algolia/ingestion@1.49.2': + resolution: {integrity: sha512-YYJRjaZ2bqk923HxE4um7j/Cm3/xoSkF2HC2ZweOF8cXL3sqnlndSUYmCaxHFjNPWLaSHk2IfssX6J/tdKTULw==} engines: {node: '>= 14.0.0'} - '@algolia/monitoring@1.49.1': - resolution: {integrity: sha512-bvrXwZ0WsL3rN6Q4m4QqxsXFCo6WAew7sAdrpMQMK4Efn4/W920r9ptOuckejOSSvyLr9pAWgC5rsHhR2FYuYw==} + '@algolia/monitoring@1.49.2': + resolution: {integrity: sha512-9WgH+Dha39EQQyGKCHlGYnxW/7W19DIrEbCEbnzwAMpGAv1yTWCHMPXHxYa+LcL3eCp2V/5idD1zHNlIKmHRHg==} engines: {node: '>= 14.0.0'} - '@algolia/recommend@5.49.1': - resolution: {integrity: sha512-h2yz3AGeGkQwNgbLmoe3bxYs8fac4An1CprKTypYyTU/k3Q+9FbIvJ8aS1DoBKaTjSRZVoyQS7SZQio6GaHbZw==} + '@algolia/recommend@5.49.2': + resolution: {integrity: sha512-K7Gp5u+JtVYgaVpBxF5rGiM+Ia8SsMdcAJMTDV93rwh00DKNllC19o1g+PwrDjDvyXNrnTEbofzbTs2GLfFyKA==} engines: {node: '>= 14.0.0'} - '@algolia/requester-browser-xhr@5.49.1': - resolution: {integrity: sha512-2UPyRuUR/qpqSqH8mxFV5uBZWEpxhGPHLlx9Xf6OVxr79XO2ctzZQAhsmTZ6X22x+N8MBWpB9UEky7YU2HGFgA==} + '@algolia/requester-browser-xhr@5.49.2': + resolution: {integrity: sha512-3UhYCcWX6fbtN8ABcxZlhaQEwXFh3CsFtARyyadQShHMPe3mJV9Wel4FpJTa+seugRkbezFz0tt6aPTZSYTBuA==} engines: {node: '>= 14.0.0'} - '@algolia/requester-fetch@5.49.1': - resolution: {integrity: sha512-N+xlE4lN+wpuT+4vhNEwPVlrfN+DWAZmSX9SYhbz986Oq8AMsqdntOqUyiOXVxYsQtfLwmiej24vbvJGYv1Qtw==} + '@algolia/requester-fetch@5.49.2': + resolution: {integrity: sha512-G94VKSGbsr+WjsDDOBe5QDQ82QYgxvpxRGJfCHZBnYKYsy/jv9qGIDb93biza+LJWizQBUtDj7bZzp3QZyzhPQ==} engines: {node: '>= 14.0.0'} - '@algolia/requester-node-http@5.49.1': - resolution: {integrity: sha512-zA5bkUOB5PPtTr182DJmajCiizHp0rCJQ0Chf96zNFvkdESKYlDeYA3tQ7r2oyHbu/8DiohAQ5PZ85edctzbXA==} + '@algolia/requester-node-http@5.49.2': + resolution: {integrity: sha512-UuihBGHafG/ENsrcTGAn5rsOffrCIRuHMOsD85fZGLEY92ate+BMTUqxz60dv5zerh8ZumN4bRm8eW2z9L11jA==} engines: {node: '>= 14.0.0'} '@ampproject/remapping@2.3.0': @@ -1806,8 +1806,8 @@ packages: resolution: {integrity: sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} - '@eslint/compat@2.0.2': - resolution: {integrity: sha512-pR1DoD0h3HfF675QZx0xsyrsU8q70Z/plx7880NOhS02NuWLgBCOMDL787nUeQ7EWLkxv3bPQJaarjcPQb2Dwg==} + '@eslint/compat@2.0.3': + resolution: {integrity: sha512-SjIJhGigp8hmd1YGIBwh7Ovri7Kisl42GYFjrOyHhtfYGGoLW6teYi/5p8W50KSsawUPpuLOSmsq1bD0NGQLBw==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} peerDependencies: eslint: ^8.40 || 9 || 10 @@ -1827,8 +1827,8 @@ packages: resolution: {integrity: sha512-QUPblTtE51/7/Zhfv8BDwO0qkkzQL7P/aWWbqcf4xWLEYn1oKjdO0gglQBB4GAsu7u6wjijbCmzsUTy6mnk6oQ==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} - '@eslint/eslintrc@3.3.4': - resolution: {integrity: sha512-4h4MVF8pmBsncB60r0wSJiIeUKTSD4m7FmTFThG8RHlsg9ajqckLm9OraguFGZE4vVdpiI1Q4+hFnisopmG6gQ==} + '@eslint/eslintrc@3.3.5': + resolution: {integrity: sha512-4IlJx0X0qftVsN5E+/vGujTRIFtwuLbNsVUe7TO6zYPDR1O6nFwvwhIKEKSrl6dZchmYBITazxKoUYOjdtjlRg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@eslint/js@10.0.1': @@ -2158,6 +2158,10 @@ packages: resolution: {integrity: sha512-g44zhR3NIKVs0zUesa4iMzExmZpLUdTLRMCStqX3GE5NT6VkPcxQGJ+uC8tDgBUC/vB1rUhUd55cOf++4NZcmw==} engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} + '@inquirer/ansi@2.0.4': + resolution: {integrity: sha512-DpcZrQObd7S0R/U3bFdkcT5ebRwbTTC4D3tCc1vsJizmgPLxNJBo+AAFmrZwe8zk30P2QzgzGWZ3Q9uJwWuhIg==} + engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} + '@inquirer/checkbox@5.1.0': resolution: {integrity: sha512-/HjF1LN0a1h4/OFsbGKHNDtWICFU/dqXCdym719HFTyJo9IG7Otr+ziGWc9S0iQuohRZllh+WprSgd5UW5Fw0g==} engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} @@ -2167,8 +2171,17 @@ packages: '@types/node': optional: true - '@inquirer/confirm@6.0.8': - resolution: {integrity: sha512-Di6dgmiZ9xCSUxWUReWTqDtbhXCuG2MQm2xmgSAIruzQzBqNf49b8E07/vbCYY506kDe8BiwJbegXweG8M1klw==} + '@inquirer/checkbox@5.1.2': + resolution: {integrity: sha512-PubpMPO2nJgMufkoB3P2wwxNXEMUXnBIKi/ACzDUYfaoPuM7gSTmuxJeMscoLVEsR4qqrCMf5p0SiYGWnVJ8kw==} + engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/confirm@6.0.10': + resolution: {integrity: sha512-tiNyA73pgpQ0FQ7axqtoLUe4GDYjNCDcVsbgcA5anvwg2z6i+suEngLKKJrWKJolT//GFPZHwN30binDIHgSgQ==} engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} peerDependencies: '@types/node': '>=18' @@ -2185,6 +2198,24 @@ packages: '@types/node': optional: true + '@inquirer/core@11.1.7': + resolution: {integrity: sha512-1BiBNDk9btIwYIzNZpkikIHXWeNzNncJePPqwDyVMhXhD1ebqbpn1mKGctpoqAbzywZfdG0O4tvmsGIcOevAPQ==} + engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/editor@5.0.10': + resolution: {integrity: sha512-VJx4XyaKea7t8hEApTw5dxeIyMtWXre2OiyJcICCRZI4hkoHsMoCnl/KbUnJJExLbH9csLLHMVR144ZhFE1CwA==} + engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + '@inquirer/editor@5.0.8': resolution: {integrity: sha512-sLcpbb9B3XqUEGrj1N66KwhDhEckzZ4nI/W6SvLXyBX8Wic3LDLENlWRvkOGpCPoserabe+MxQkpiMoI8irvyA==} engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} @@ -2194,6 +2225,15 @@ packages: '@types/node': optional: true + '@inquirer/expand@5.0.10': + resolution: {integrity: sha512-fC0UHJPXsTRvY2fObiwuQYaAnHrp3aDqfwKUJSdfpgv18QUG054ezGbaRNStk/BKD5IPijeMKWej8VV8O5Q/eQ==} + engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + '@inquirer/expand@5.0.8': resolution: {integrity: sha512-QieW3F1prNw3j+hxO7/NKkG1pk3oz7pOB6+5Upwu3OIwADfPX0oZVppsqlL+Vl/uBHHDSOBY0BirLctLnXwGGg==} engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} @@ -2212,10 +2252,32 @@ packages: '@types/node': optional: true + '@inquirer/external-editor@2.0.4': + resolution: {integrity: sha512-Prenuv9C1PHj2Itx0BcAOVBTonz02Hc2Nd2DbU67PdGUaqn0nPCnV34oDyyoaZHnmfRxkpuhh/u51ThkrO+RdA==} + engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + '@inquirer/figures@2.0.3': resolution: {integrity: sha512-y09iGt3JKoOCBQ3w4YrSJdokcD8ciSlMIWsD+auPu+OZpfxLuyz+gICAQ6GCBOmJJt4KEQGHuZSVff2jiNOy7g==} engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} + '@inquirer/figures@2.0.4': + resolution: {integrity: sha512-eLBsjlS7rPS3WEhmOmh1znQ5IsQrxWzxWDxO51e4urv+iVrSnIHbq4zqJIOiyNdYLa+BVjwOtdetcQx1lWPpiQ==} + engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} + + '@inquirer/input@5.0.10': + resolution: {integrity: sha512-nvZ6qEVeX/zVtZ1dY2hTGDQpVGD3R7MYPLODPgKO8Y+RAqxkrP3i/3NwF3fZpLdaMiNuK0z2NaYIx9tPwiSegQ==} + engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + '@inquirer/input@5.0.8': resolution: {integrity: sha512-p0IJslw0AmedLEkOU+yrEX3Aj2RTpQq7ZOf8nc1DIhjzaxRWrrgeuE5Kyh39fVRgtcACaMXx/9WNo8+GjgBOfw==} engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} @@ -2225,6 +2287,15 @@ packages: '@types/node': optional: true + '@inquirer/number@4.0.10': + resolution: {integrity: sha512-Ht8OQstxiS3APMGjHV0aYAjRAysidWdwurWEo2i8yI5xbhOBWqizT0+MU1S2GCcuhIBg+3SgWVjEoXgfhY+XaA==} + engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + '@inquirer/number@4.0.8': resolution: {integrity: sha512-uGLiQah9A0F9UIvJBX52m0CnqtLaym0WpT9V4YZrjZ+YRDKZdwwoEPz06N6w8ChE2lrnsdyhY9sL+Y690Kh9gQ==} engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} @@ -2234,6 +2305,15 @@ packages: '@types/node': optional: true + '@inquirer/password@5.0.10': + resolution: {integrity: sha512-QbNyvIE8q2GTqKLYSsA8ATG+eETo+m31DSR0+AU7x3d2FhaTWzqQek80dj3JGTo743kQc6mhBR0erMjYw5jQ0A==} + engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + '@inquirer/password@5.0.8': resolution: {integrity: sha512-zt1sF4lYLdvPqvmvHdmjOzuUUjuCQ897pdUCO8RbXMUDKXJTTyOQgtn23le+jwcb+MpHl3VAFvzIdxRAf6aPlA==} engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} @@ -2252,6 +2332,15 @@ packages: '@types/node': optional: true + '@inquirer/prompts@8.3.2': + resolution: {integrity: sha512-yFroiSj2iiBFlm59amdTvAcQFvWS6ph5oKESls/uqPBect7rTU2GbjyZO2DqxMGuIwVA8z0P4K6ViPcd/cp+0w==} + engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + '@inquirer/rawlist@5.2.4': resolution: {integrity: sha512-fTuJ5Cq9W286isLxwj6GGyfTjx1Zdk4qppVEPexFuA6yioCCXS4V1zfKroQqw7QdbDPN73xs2DiIAlo55+kBqg==} engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} @@ -2261,6 +2350,15 @@ packages: '@types/node': optional: true + '@inquirer/rawlist@5.2.6': + resolution: {integrity: sha512-jfw0MLJ5TilNsa9zlJ6nmRM0ZFVZhhTICt4/6CU2Dv1ndY7l3sqqo1gIYZyMMDw0LvE1u1nzJNisfHEhJIxq5w==} + engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + '@inquirer/search@4.1.4': resolution: {integrity: sha512-9yPTxq7LPmYjrGn3DRuaPuPbmC6u3fiWcsE9ggfLcdgO/ICHYgxq7mEy1yJ39brVvgXhtOtvDVjDh9slJxE4LQ==} engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} @@ -2270,6 +2368,15 @@ packages: '@types/node': optional: true + '@inquirer/search@4.1.6': + resolution: {integrity: sha512-3/6kTRae98hhDevENScy7cdFEuURnSpM3JbBNg8yfXLw88HgTOl+neUuy/l9W0No5NzGsLVydhBzTIxZP7yChQ==} + engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + '@inquirer/select@5.1.0': resolution: {integrity: sha512-OyYbKnchS1u+zRe14LpYrN8S0wH1vD0p2yKISvSsJdH2TpI87fh4eZdWnpdbrGauCRWDph3NwxRmM4Pcm/hx1Q==} engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} @@ -2279,6 +2386,15 @@ packages: '@types/node': optional: true + '@inquirer/select@5.1.2': + resolution: {integrity: sha512-kTK8YIkHV+f02y7bWCh7E0u2/11lul5WepVTclr3UMBtBr05PgcZNWfMa7FY57ihpQFQH/spLMHTcr0rXy50tA==} + engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + '@inquirer/type@4.0.3': resolution: {integrity: sha512-cKZN7qcXOpj1h+1eTTcGDVLaBIHNMT1Rz9JqJP5MnEJ0JhgVWllx7H/tahUp5YEK1qaByH2Itb8wLG/iScD5kw==} engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} @@ -2288,6 +2404,15 @@ packages: '@types/node': optional: true + '@inquirer/type@4.0.4': + resolution: {integrity: sha512-PamArxO3cFJZoOzspzo6cxVlLeIftyBsZw/S9bKY5DzxqJVZgjoj1oP8d0rskKtp7sZxBycsoer1g6UeJV1BBA==} + engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + '@isaacs/cliui@8.0.2': resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} engines: {node: '>=12'} @@ -2455,38 +2580,38 @@ packages: '@inquirer/prompts': '>= 3 < 9' listr2: 10.2.1 - '@lmdb/lmdb-darwin-arm64@3.5.1': - resolution: {integrity: sha512-tpfN4kKrrMpQ+If1l8bhmoNkECJi0iOu6AEdrTJvWVC+32sLxTARX5Rsu579mPImRP9YFWfWgeRQ5oav7zApQQ==} + '@lmdb/lmdb-darwin-arm64@3.5.2': + resolution: {integrity: sha512-ZTEuSwB3QHOA6Jal4bi0oxAV1MK3xtzS3oUMq5OK3HSXNN4A79f9dhieZA0hgvwOTaGzEWmTd8Fg9XSkBIhAWw==} cpu: [arm64] os: [darwin] - '@lmdb/lmdb-darwin-x64@3.5.1': - resolution: {integrity: sha512-+a2tTfc3rmWhLAolFUWRgJtpSuu+Fw/yjn4rF406NMxhfjbMuiOUTDRvRlMFV+DzyjkwnokisskHbCWkS3Ly5w==} + '@lmdb/lmdb-darwin-x64@3.5.2': + resolution: {integrity: sha512-Zs+mdB6gNqpPK6ybNbqFoSU+DCIdhE8tqeaAzRs+hNJt8V43PRvTVxu1UPBHwK2917FnQ4dL5/OIoqHDa+9Dpw==} cpu: [x64] os: [darwin] - '@lmdb/lmdb-linux-arm64@3.5.1': - resolution: {integrity: sha512-aoERa5B6ywXdyFeYGQ1gbQpkMkDbEo45qVoXE5QpIRavqjnyPwjOulMkmkypkmsbJ5z4Wi0TBztON8agCTG0Vg==} + '@lmdb/lmdb-linux-arm64@3.5.2': + resolution: {integrity: sha512-hT6JPw5hDCXzppBgpIFS/cQp4v2LqNMgd5nuo4U9H5/wnbMS7Prh0twu5IbDvzYZf2a/xPTXtTDRuUiFc39lEw==} cpu: [arm64] os: [linux] - '@lmdb/lmdb-linux-arm@3.5.1': - resolution: {integrity: sha512-0EgcE6reYr8InjD7V37EgXcYrloqpxVPINy3ig1MwDSbl6LF/vXTYRH9OE1Ti1D8YZnB35ZH9aTcdfSb5lql2A==} + '@lmdb/lmdb-linux-arm@3.5.2': + resolution: {integrity: sha512-GhdC4huGWDzcbZWfS+G3dW4/TopNUnO+/E7aVdfWIhslSs1FI2+sVo94040S9BPJ7lNpnf1zVxaBlLmqZpKhcw==} cpu: [arm] os: [linux] - '@lmdb/lmdb-linux-x64@3.5.1': - resolution: {integrity: sha512-SqNDY1+vpji7bh0sFH5wlWyFTOzjbDOl0/kB5RLLYDAFyd/uw3n7wyrmas3rYPpAW7z18lMOi1yKlTPv967E3g==} + '@lmdb/lmdb-linux-x64@3.5.2': + resolution: {integrity: sha512-aTBBxTQGdgKcqZD6ywIVCIbCIJ3fJ28OhzCxgl3zGQzzJwkDt5TSIuBtMt4oKZMgDSjuRBjtID9TOUvSRg8IQA==} cpu: [x64] os: [linux] - '@lmdb/lmdb-win32-arm64@3.5.1': - resolution: {integrity: sha512-50v0O1Lt37cwrmR9vWZK5hRW0Aw+KEmxJJ75fge/zIYdvNKB/0bSMSVR5Uc2OV9JhosIUyklOmrEvavwNJ8D6w==} + '@lmdb/lmdb-win32-arm64@3.5.2': + resolution: {integrity: sha512-mqfNN5zb3z3QnHEPaV4Zv5zd3BhlcL+uqPNF7kGRkmCaRHuh6T9N5g/4ZqOiNHNPWglv3g8Ut15XxCKZjf6jHw==} cpu: [arm64] os: [win32] - '@lmdb/lmdb-win32-x64@3.5.1': - resolution: {integrity: sha512-qwosvPyl+zpUlp3gRb7UcJ3H8S28XHCzkv0Y0EgQToXjQP91ZD67EHSCDmaLjtKhe+GVIW5om1KUpzVLA0l6pg==} + '@lmdb/lmdb-win32-x64@3.5.2': + resolution: {integrity: sha512-JhPxlA8sIxPIdS78e4LeNfTlkF+2I/r98jKXf90pf+yhMCzyLkphcvbnWv7YL8yckp32c1uKZ1vf/JqcSiplHg==} cpu: [x64] os: [win32] @@ -2998,103 +3123,103 @@ packages: engines: {node: '>=18'} hasBin: true - '@rolldown/binding-android-arm64@1.0.0-rc.7': - resolution: {integrity: sha512-/uadfNUaMLFFBGvcIOiq8NnlhvTZTjOyybJaJnhGxD0n9k5vZRJfTaitH5GHnbwmc6T2PC+ZpS1FQH+vXyS/UA==} + '@rolldown/binding-android-arm64@1.0.0-rc.9': + resolution: {integrity: sha512-lcJL0bN5hpgJfSIz/8PIf02irmyL43P+j1pTCfbD1DbLkmGRuFIA4DD3B3ZOvGqG0XiVvRznbKtN0COQVaKUTg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [android] - '@rolldown/binding-darwin-arm64@1.0.0-rc.7': - resolution: {integrity: sha512-zokYr1KgRn0hRA89dmgtPj/BmKp9DxgrfAJvOEFfXa8nfYWW2nmgiYIBGpSIAJrEg7Qc/Qznovy6xYwmKh0M8g==} + '@rolldown/binding-darwin-arm64@1.0.0-rc.9': + resolution: {integrity: sha512-J7Zk3kLYFsLtuH6U+F4pS2sYVzac0qkjcO5QxHS7OS7yZu2LRs+IXo+uvJ/mvpyUljDJ3LROZPoQfgBIpCMhdQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [darwin] - '@rolldown/binding-darwin-x64@1.0.0-rc.7': - resolution: {integrity: sha512-eZFjbmrapCBVgMmuLALH3pmQQQStHFuRhsFceJHk6KISW8CkI2e9OPLp9V4qXksrySQcD8XM8fpvGLs5l5C7LQ==} + '@rolldown/binding-darwin-x64@1.0.0-rc.9': + resolution: {integrity: sha512-iwtmmghy8nhfRGeNAIltcNXzD0QMNaaA5U/NyZc1Ia4bxrzFByNMDoppoC+hl7cDiUq5/1CnFthpT9n+UtfFyg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [darwin] - '@rolldown/binding-freebsd-x64@1.0.0-rc.7': - resolution: {integrity: sha512-xjMrh8Dmu2DNwdY6DZsrF6YPGeesc3PaTlkh8v9cqmkSCNeTxnhX3ErhVnuv1j3n8t2IuuhQIwM9eZDINNEt5Q==} + '@rolldown/binding-freebsd-x64@1.0.0-rc.9': + resolution: {integrity: sha512-DLFYI78SCiZr5VvdEplsVC2Vx53lnA4/Ga5C65iyldMVaErr86aiqCoNBLl92PXPfDtUYjUh+xFFor40ueNs4Q==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [freebsd] - '@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.7': - resolution: {integrity: sha512-mOvftrHiXg4/xFdxJY3T9Wl1/zDAOSlMN8z9an2bXsCwuvv3RdyhYbSMZDuDO52S04w9z7+cBd90lvQSPTAQtw==} + '@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.9': + resolution: {integrity: sha512-CsjTmTwd0Hri6iTw/DRMK7kOZ7FwAkrO4h8YWKoX/kcj833e4coqo2wzIFywtch/8Eb5enQ/lwLM7w6JX1W5RQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [linux] - '@rolldown/binding-linux-arm64-gnu@1.0.0-rc.7': - resolution: {integrity: sha512-TuUkeuEEPRyXMBbJ86NRhAiPNezxHW8merl3Om2HASA9Pl1rI+VZcTtsVQ6v/P0MDIFpSl0k0+tUUze9HIXyEw==} + '@rolldown/binding-linux-arm64-gnu@1.0.0-rc.9': + resolution: {integrity: sha512-2x9O2JbSPxpxMDhP9Z74mahAStibTlrBMW0520+epJH5sac7/LwZW5Bmg/E6CXuEF53JJFW509uP+lSedaUNxg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] libc: [glibc] - '@rolldown/binding-linux-arm64-musl@1.0.0-rc.7': - resolution: {integrity: sha512-G43ZElEvaby+YSOgrXfBgpeQv42LdS0ivFFYQufk2tBDWeBfzE/+ob5DmO8Izbyn4Y8k6GgLF11jFDYNnmU/3w==} + '@rolldown/binding-linux-arm64-musl@1.0.0-rc.9': + resolution: {integrity: sha512-JA1QRW31ogheAIRhIg9tjMfsYbglXXYGNPLdPEYrwFxdbkQCAzvpSCSHCDWNl4hTtrol8WeboCSEpjdZK8qrCg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] libc: [musl] - '@rolldown/binding-linux-ppc64-gnu@1.0.0-rc.7': - resolution: {integrity: sha512-Y48ShVxGE2zUTt0A0PR3grCLNxW4DWtAfe5lxf6L3uYEQujwo/LGuRogMsAtOJeYLCPTJo2i714LOdnK34cHpw==} + '@rolldown/binding-linux-ppc64-gnu@1.0.0-rc.9': + resolution: {integrity: sha512-aOKU9dJheda8Kj8Y3w9gnt9QFOO+qKPAl8SWd7JPHP+Cu0EuDAE5wokQubLzIDQWg2myXq2XhTpOVS07qqvT+w==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [ppc64] os: [linux] libc: [glibc] - '@rolldown/binding-linux-s390x-gnu@1.0.0-rc.7': - resolution: {integrity: sha512-KU5DUYvX3qI8/TX6D3RA4awXi4Ge/1+M6Jqv7kRiUndpqoVGgD765xhV3Q6QvtABnYjLJenrWDl3S1B5U56ixA==} + '@rolldown/binding-linux-s390x-gnu@1.0.0-rc.9': + resolution: {integrity: sha512-OalO94fqj7IWRn3VdXWty75jC5dk4C197AWEuMhIpvVv2lw9fiPhud0+bW2ctCxb3YoBZor71QHbY+9/WToadA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [s390x] os: [linux] libc: [glibc] - '@rolldown/binding-linux-x64-gnu@1.0.0-rc.7': - resolution: {integrity: sha512-1THb6FdBkAEL12zvUue2bmK4W1+P+tz8Pgu5uEzq+xrtYa3iBzmmKNlyfUzCFNCqsPd8WJEQrYdLcw4iMW4AVw==} + '@rolldown/binding-linux-x64-gnu@1.0.0-rc.9': + resolution: {integrity: sha512-cVEl1vZtBsBZna3YMjGXNvnYYrOJ7RzuWvZU0ffvJUexWkukMaDuGhUXn0rjnV0ptzGVkvc+vW9Yqy6h8YX4pg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] libc: [glibc] - '@rolldown/binding-linux-x64-musl@1.0.0-rc.7': - resolution: {integrity: sha512-12o73atFNWDgYnLyA52QEUn9AH8pHIe12W28cmqjyHt4bIEYRzMICvYVCPa2IQm6DJBvCBrEhD9K+ct4wr2hwg==} + '@rolldown/binding-linux-x64-musl@1.0.0-rc.9': + resolution: {integrity: sha512-UzYnKCIIc4heAKgI4PZ3dfBGUZefGCJ1TPDuLHoCzgrMYPb5Rv6TLFuYtyM4rWyHM7hymNdsg5ik2C+UD9VDbA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] libc: [musl] - '@rolldown/binding-openharmony-arm64@1.0.0-rc.7': - resolution: {integrity: sha512-+uUgGwvuUCXl894MTsmTS2J0BnCZccFsmzV7y1jFxW5pTSxkuwL5agyPuDvDOztPeS6RrdqWkn7sT0jRd0ECkg==} + '@rolldown/binding-openharmony-arm64@1.0.0-rc.9': + resolution: {integrity: sha512-+6zoiF+RRyf5cdlFQP7nm58mq7+/2PFaY2DNQeD4B87N36JzfF/l9mdBkkmTvSYcYPE8tMh/o3cRlsx1ldLfog==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [openharmony] - '@rolldown/binding-wasm32-wasi@1.0.0-rc.7': - resolution: {integrity: sha512-53p2L/NSy21UiFOqUGlC11kJDZS2Nx2GJRz1QvbkXovypA3cOHbsyZHLkV72JsLSbiEQe+kg4tndUhSiC31UEA==} + '@rolldown/binding-wasm32-wasi@1.0.0-rc.9': + resolution: {integrity: sha512-rgFN6sA/dyebil3YTlL2evvi/M+ivhfnyxec7AccTpRPccno/rPoNlqybEZQBkcbZu8Hy+eqNJCqfBR8P7Pg8g==} engines: {node: '>=14.0.0'} cpu: [wasm32] - '@rolldown/binding-win32-arm64-msvc@1.0.0-rc.7': - resolution: {integrity: sha512-K6svNRljO6QrL6VTKxwh4yThhlR9DT/tK0XpaFQMnJwwQKng+NYcVEtUkAM0WsoiZHw+Hnh3DGnn3taf/pNYGg==} + '@rolldown/binding-win32-arm64-msvc@1.0.0-rc.9': + resolution: {integrity: sha512-lHVNUG/8nlF1IQk1C0Ci574qKYyty2goMiPlRqkC5R+3LkXDkL5Dhx8ytbxq35m+pkHVIvIxviD+TWLdfeuadA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [win32] - '@rolldown/binding-win32-x64-msvc@1.0.0-rc.7': - resolution: {integrity: sha512-3ZJBT47VWLKVKIyvHhUSUgVwHzzZW761YAIkM3tOT+8ZTjFVp0acCM0Y2Z2j3jCl+XYi2d9y2uEWQ8H0PvvpPw==} + '@rolldown/binding-win32-x64-msvc@1.0.0-rc.9': + resolution: {integrity: sha512-G0oA4+w1iY5AGi5HcDTxWsoxF509hrFIPB2rduV5aDqS9FtDg1CAfa7V34qImbjfhIcA8C+RekocJZA96EarwQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [win32] - '@rolldown/pluginutils@1.0.0-rc.7': - resolution: {integrity: sha512-qujRfC8sFVInYSPPMLQByRh7zhwkGFS4+tyMQ83srV1qrxL4g8E2tyxVVyxd0+8QeBM1mIk9KbWxkegRr76XzA==} + '@rolldown/pluginutils@1.0.0-rc.9': + resolution: {integrity: sha512-w6oiRWgEBl04QkFZgmW+jnU1EC9b57Oihi2ot3HNWIQRqgHp5PnYDia5iZ5FF7rpa4EQdiqMDXjlqKGXBhsoXw==} '@rollup/plugin-alias@6.0.0': resolution: {integrity: sha512-tPCzJOtS7uuVZd+xPhoy5W4vThe6KWXNmsFCNktaAh5RTqcLiSfT4huPQIXkgJ6YCOjJHvecOAzQxLFhPxKr+g==} @@ -3339,8 +3464,8 @@ packages: resolution: {integrity: sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==} engines: {node: '>=10'} - '@tony.ganchev/eslint-plugin-header@3.2.6': - resolution: {integrity: sha512-eplJG8O2L2sb6UWEy2G+34KckrSNX/LNaKQcE6ADUmFJ1ywqBqpSoJRYILSehntjgxMdqMhC7y6OZAt93q++xg==} + '@tony.ganchev/eslint-plugin-header@3.3.1': + resolution: {integrity: sha512-/Fj0+DaXbBfrlXmd3wBZkB8TIwGT3N++y/oTYxRABK/gzNxjgcBjt63xBpuHCYIXmH1EwuALd6XS1fzNG4S0zg==} peerDependencies: eslint: '>=7.7.0' @@ -3584,39 +3709,39 @@ packages: '@types/yauzl@2.10.3': resolution: {integrity: sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==} - '@typescript-eslint/eslint-plugin@8.56.1': - resolution: {integrity: sha512-Jz9ZztpB37dNC+HU2HI28Bs9QXpzCz+y/twHOwhyrIRdbuVDxSytJNDl6z/aAKlaRIwC7y8wJdkBv7FxYGgi0A==} + '@typescript-eslint/eslint-plugin@8.57.0': + resolution: {integrity: sha512-qeu4rTHR3/IaFORbD16gmjq9+rEs9fGKdX0kF6BKSfi+gCuG3RCKLlSBYzn/bGsY9Tj7KE/DAQStbp8AHJGHEQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - '@typescript-eslint/parser': ^8.56.1 + '@typescript-eslint/parser': ^8.57.0 eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/parser@8.56.1': - resolution: {integrity: sha512-klQbnPAAiGYFyI02+znpBRLyjL4/BrBd0nyWkdC0s/6xFLkXYQ8OoRrSkqacS1ddVxf/LDyODIKbQ5TgKAf/Fg==} + '@typescript-eslint/parser@8.57.0': + resolution: {integrity: sha512-XZzOmihLIr8AD1b9hL9ccNMzEMWt/dE2u7NyTY9jJG6YNiNthaD5XtUHVF2uCXZ15ng+z2hT3MVuxnUYhq6k1g==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/project-service@8.56.1': - resolution: {integrity: sha512-TAdqQTzHNNvlVFfR+hu2PDJrURiwKsUvxFn1M0h95BB8ah5jejas08jUWG4dBA68jDMI988IvtfdAI53JzEHOQ==} + '@typescript-eslint/project-service@8.57.0': + resolution: {integrity: sha512-pR+dK0BlxCLxtWfaKQWtYr7MhKmzqZxuii+ZjuFlZlIGRZm22HnXFqa2eY+90MUz8/i80YJmzFGDUsi8dMOV5w==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/scope-manager@8.56.1': - resolution: {integrity: sha512-YAi4VDKcIZp0O4tz/haYKhmIDZFEUPOreKbfdAN3SzUDMcPhJ8QI99xQXqX+HoUVq8cs85eRKnD+rne2UAnj2w==} + '@typescript-eslint/scope-manager@8.57.0': + resolution: {integrity: sha512-nvExQqAHF01lUM66MskSaZulpPL5pgy5hI5RfrxviLgzZVffB5yYzw27uK/ft8QnKXI2X0LBrHJFr1TaZtAibw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/tsconfig-utils@8.56.1': - resolution: {integrity: sha512-qOtCYzKEeyr3aR9f28mPJqBty7+DBqsdd63eO0yyDwc6vgThj2UjWfJIcsFeSucYydqcuudMOprZ+x1SpF3ZuQ==} + '@typescript-eslint/tsconfig-utils@8.57.0': + resolution: {integrity: sha512-LtXRihc5ytjJIQEH+xqjB0+YgsV4/tW35XKX3GTZHpWtcC8SPkT/d4tqdf1cKtesryHm2bgp6l555NYcT2NLvA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/type-utils@8.56.1': - resolution: {integrity: sha512-yB/7dxi7MgTtGhZdaHCemf7PuwrHMenHjmzgUW1aJpO+bBU43OycnM3Wn+DdvDO/8zzA9HlhaJ0AUGuvri4oGg==} + '@typescript-eslint/type-utils@8.57.0': + resolution: {integrity: sha512-yjgh7gmDcJ1+TcEg8x3uWQmn8ifvSupnPfjP21twPKrDP/pTHlEQgmKcitzF/rzPSmv7QjJ90vRpN4U+zoUjwQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 @@ -3626,37 +3751,41 @@ packages: resolution: {integrity: sha512-dbMkdIUkIkchgGDIv7KLUpa0Mda4IYjo4IAMJUZ+3xNoUXxMsk9YtKpTHSChRS85o+H9ftm51gsK1dZReY9CVw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/typescript-estree@8.56.1': - resolution: {integrity: sha512-qzUL1qgalIvKWAf9C1HpvBjif+Vm6rcT5wZd4VoMb9+Km3iS3Cv9DY6dMRMDtPnwRAFyAi7YXJpTIEXLvdfPxg==} + '@typescript-eslint/types@8.57.0': + resolution: {integrity: sha512-dTLI8PEXhjUC7B9Kre+u0XznO696BhXcTlOn0/6kf1fHaQW8+VjJAVHJ3eTI14ZapTxdkOmc80HblPQLaEeJdg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@typescript-eslint/typescript-estree@8.57.0': + resolution: {integrity: sha512-m7faHcyVg0BT3VdYTlX8GdJEM7COexXxS6KqGopxdtkQRvBanK377QDHr4W/vIPAR+ah9+B/RclSW5ldVniO1Q==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/utils@8.56.1': - resolution: {integrity: sha512-HPAVNIME3tABJ61siYlHzSWCGtOoeP2RTIaHXFMPqjrQKCGB9OgUVdiNgH7TJS2JNIQ5qQ4RsAUDuGaGme/KOA==} + '@typescript-eslint/utils@8.57.0': + resolution: {integrity: sha512-5iIHvpD3CZe06riAsbNxxreP+MuYgVUsV0n4bwLH//VJmgtt54sQeY2GszntJ4BjYCpMzrfVh2SBnUQTtys2lQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/visitor-keys@8.56.1': - resolution: {integrity: sha512-KiROIzYdEV85YygXw6BI/Dx4fnBlFQu6Mq4QE4MOH9fFnhohw6wX/OAvDY2/C+ut0I3RSPKenvZJIVYqJNkhEw==} + '@typescript-eslint/visitor-keys@8.57.0': + resolution: {integrity: sha512-zm6xx8UT/Xy2oSr2ZXD0pZo7Jx2XsCoID2IUh9YSTFRu7z+WdwYTRk6LhUftm1crwqbuoF6I8zAFeCMw0YjwDg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@verdaccio/auth@8.0.0-next-8.29': - resolution: {integrity: sha512-lEIqneZ7LYYkF07/P9cJhOYVZTIIARGRVE66j666VR58T/fY/pC4hxEfuyqlfd3BhS3hM65aIrPZu+s03hyg+w==} + '@verdaccio/auth@8.0.0-next-8.33': + resolution: {integrity: sha512-HRIqEj9J7t95ZG3pCVpaCJoXCNVPB0R2DpkEXfG19TXsapf/mv5vMnBYG6O1C/ShNagHMA7z+Z6NwFZXHUzm9g==} engines: {node: '>=18'} - '@verdaccio/config@8.0.0-next-8.29': - resolution: {integrity: sha512-7kEZ6tv3NsJFPcKQrxELMkvJFI9Hmy1s8IPjuXjz9gobDV3NyF9VhPsh6l18Tm+nsqXb6ZTWiRup9V8Lkg0p0g==} + '@verdaccio/config@8.0.0-next-8.33': + resolution: {integrity: sha512-6/n/qcVMbNTK8oFY8l6vlJMeG6zor/aOFcR2Wd6yCoKcehITigmLn8MFziZPriYivzxYJJRjlaKO9+HuuQSKCA==} engines: {node: '>=18'} '@verdaccio/core@8.0.0-next-8.21': resolution: {integrity: sha512-n3Y8cqf84cwXxUUdTTfEJc8fV55PONPKijCt2YaC0jilb5qp1ieB3d4brqTOdCdXuwkmnG2uLCiGpUd/RuSW0Q==} engines: {node: '>=18'} - '@verdaccio/core@8.0.0-next-8.29': - resolution: {integrity: sha512-ztsNbnHMGqpOJlC3x/Jz7+0Xzrul+UIQQAFsTFHO3pET8nyZWkh/1TH50olz0pZ/OS87O/+7mk04TK9hHD/eFQ==} + '@verdaccio/core@8.0.0-next-8.33': + resolution: {integrity: sha512-ndPAfZVyN677y/EZX+USkL0/aOcU5rvnzS99nRCIHarZB44WMno9jl6FdX5Ax3b3exGo9GsxhEdbYHgOYaRlLQ==} engines: {node: '>=18'} '@verdaccio/file-locking@10.3.1': @@ -3667,104 +3796,104 @@ packages: resolution: {integrity: sha512-F6xQWvsZnEyGjugrYfe+D/ChSVudXmBFWi8xuTIX6PAdp7dk9x9biOGQFW8O3GSAK8UhJ6WlRisQKJeYRa6vWQ==} engines: {node: '>=18'} - '@verdaccio/hooks@8.0.0-next-8.29': - resolution: {integrity: sha512-KRuTN6iYg9ntFXmrH+fY+dNCFpNBMcEwOVLOJXk/fA3I3ki188FpRZz9rKToyj1XYZzPDqGUWv82ekswX5wrYw==} + '@verdaccio/hooks@8.0.0-next-8.33': + resolution: {integrity: sha512-8xP6kVOCufjaZWriFtaxP3HEmvYTIBhcxWldui4eCG7dzBdZzPlCkRbYKWP8LMnOEIxbJNbeFkokOaI1nho1jg==} engines: {node: '>=18'} - '@verdaccio/loaders@8.0.0-next-8.19': - resolution: {integrity: sha512-+mQuEZNLRZ4EEjzfROHrVeZXVHNFhQTpI98KCpcbU1NEC7ZAl5m7OBD2XPVtvNTia2ZT83q4H0JPi/bAomnIRA==} + '@verdaccio/loaders@8.0.0-next-8.23': + resolution: {integrity: sha512-UruK7pFz7aRKkR41/Hg/cPFSqX5Oxbx9rKGWK5ql3mvg2+xaWleRwknmnNjbVod7QK6cWsYA6cKnttRBTQuPkQ==} engines: {node: '>=18'} '@verdaccio/local-storage-legacy@11.1.1': resolution: {integrity: sha512-P6ahH2W6/KqfJFKP+Eid7P134FHDLNvHa+i8KVgRVBeo2/IXb6FEANpM1mCVNvPANu0LCAmNJBOXweoUKViaoA==} engines: {node: '>=18'} - '@verdaccio/logger-commons@8.0.0-next-8.29': - resolution: {integrity: sha512-CVeLv+U0cL9wtNJVwtzjj7wtUFYxMDmynWoXtepP+AthVoNj6G6rU2P2tGLX/uqH40EwqaHJy5Vo0uZ3ex2qhQ==} + '@verdaccio/logger-commons@8.0.0-next-8.33': + resolution: {integrity: sha512-WmMq/6HyRliKWus3sQR9Pgodopzbp84dl/h/E0tnxuOmzc/eDwYCEiQMfFhIBaOlpVJdsdLYqNAM9+YkoSDK0g==} engines: {node: '>=18'} '@verdaccio/logger-prettify@8.0.0-next-8.4': resolution: {integrity: sha512-gjI/JW29fyalutn/X1PQ0iNuGvzeVWKXRmnLa7gXVKhdi4p37l/j7YZ7n44XVbbiLIKAK0pbavEg9Yr66QrYaA==} engines: {node: '>=18'} - '@verdaccio/logger@8.0.0-next-8.29': - resolution: {integrity: sha512-AF6hBAkgsRjDFGLjFWO9hzUWM47Jt15v90I6Wk0TotzsrWxgBYbslfJyTgwmTpGjhPe7al2dnFwT7hxKa6fr/w==} + '@verdaccio/logger@8.0.0-next-8.33': + resolution: {integrity: sha512-8nR3hreOcINIbMIOohhxZNUL3l0uvgGYQecl8WJvR4XizYTp1vPHv4qz1CPyuaI5bKj1QFRqHkKvvtEnD1A0rw==} engines: {node: '>=18'} - '@verdaccio/middleware@8.0.0-next-8.29': - resolution: {integrity: sha512-ANsQ8qjyNslH6BfGZnNkBvK1acTlnFgedXen6BnbN9nF+AWzHUea6knh529J5Clm3zrWggbRnGCrp1SSlbOqSA==} + '@verdaccio/middleware@8.0.0-next-8.33': + resolution: {integrity: sha512-iMzE3stUp/qocHzFX2+xkzUe6L89vWZ/J4a4v7IxPu6KqBH39XCg4gI8Qu0xXRIFeYSTpZNzRUO+FTkeZRhJ1A==} engines: {node: '>=18'} '@verdaccio/search-indexer@8.0.0-next-8.5': resolution: {integrity: sha512-0GC2tJKstbPg/W2PZl2yE+hoAxffD2ZWilEnEYSEo2e9UQpNIy2zg7KE/uMUq2P72Vf5EVfVzb8jdaH4KV4QeA==} engines: {node: '>=18'} - '@verdaccio/signature@8.0.0-next-8.21': - resolution: {integrity: sha512-5TuGPRT4c5B3k6svxJ6Q5l31UBZTODo3iAJxmuAAC0iZBLNnivdvJlqUVdpZtYfrhwvuP5vuo7lucHQk6DsSmw==} + '@verdaccio/signature@8.0.0-next-8.25': + resolution: {integrity: sha512-3qMHZ9uXgNmRQDw7Bz3coCbXJAfI3q+bWRXQ0/fKg03LgSV6pbMD0HinGKcIBn0Kni+e8IsXxBfrs5ga4FF+Rg==} engines: {node: '>=18'} '@verdaccio/streams@10.2.1': resolution: {integrity: sha512-OojIG/f7UYKxC4dYX8x5ax8QhRx1b8OYUAMz82rUottCuzrssX/4nn5QE7Ank0DUSX3C9l/HPthc4d9uKRJqJQ==} engines: {node: '>=12', npm: '>=5'} - '@verdaccio/tarball@13.0.0-next-8.29': - resolution: {integrity: sha512-4hTQMXYF1olwwydaVfb6ab1TTImM42rAxLmw3VnJUI5ttbmfB9h095/TYsCssy5vqGQMp3l8YW/JxVTPcVtGYA==} + '@verdaccio/tarball@13.0.0-next-8.33': + resolution: {integrity: sha512-VQZ8I5Fs6INxO1cY6Lpk4Wx3sD0Uy7YIzTY9qWrZNRPGDxGcZu2fyFMUfoNc1+ygJP0r5TTqdVAY74z0iQnsWg==} engines: {node: '>=18'} - '@verdaccio/ui-theme@8.0.0-next-8.29': - resolution: {integrity: sha512-kSg69so1LHOL2SA1qLJikFxkx8FEOFQJV+Nde0lN3XMkp0RST8DgLx/hiVbgYzPz54S8LuvYR/DQAulyRulMcg==} + '@verdaccio/ui-theme@8.0.0-next-8.30': + resolution: {integrity: sha512-MSvFnYeocTWp6hqtIqtwp7Zm920UNhO3zQkKTPT6qGNjarkhxCCWRcSOAz7oJZhpbyLXc85zuxOLkTezCl4KUg==} - '@verdaccio/url@13.0.0-next-8.29': - resolution: {integrity: sha512-ucJ6MhLfY0g8uU0zjcJypSkCa1mXSLmrqdiILyj16Lo0y4w/gEvddMrfab8QUmgvvuzbCgSqCZHJmbZn7DFxQg==} + '@verdaccio/url@13.0.0-next-8.33': + resolution: {integrity: sha512-26LzQTCuUFFcNasAdzayBqsYWBheQy+D4tSWnVtmj4kKQnVhufBvHLjpEjK1gqphOMx6/Mju0IQe0LsjRc1zdg==} engines: {node: '>=18'} - '@verdaccio/utils@8.1.0-next-8.29': - resolution: {integrity: sha512-EgyazlL0VejvZqWZ6KL3ig27Yl8RXcwhz1hayuqeAIxaqbsnmSmogL2zKXgGnm9y/A6QkPfZH1BcQoUh1STvtQ==} + '@verdaccio/utils@8.1.0-next-8.33': + resolution: {integrity: sha512-WLE8qTBgzuZPa+gq/nKPWtF4MTMayaeOD3Qy6yfChxNvFXY+6yPFkS0QocXL7CdB2A+w+ylgTOOzKr0tWvyTpQ==} engines: {node: '>=18'} - '@vitejs/plugin-basic-ssl@2.1.4': - resolution: {integrity: sha512-HXciTXN/sDBYWgeAD4V4s0DN0g72x5mlxQhHxtYu3Tt8BLa6MzcJZUyDVFCdtjNs3bfENVHVzOsmooTVuNgAAw==} + '@vitejs/plugin-basic-ssl@2.2.0': + resolution: {integrity: sha512-nmyQ1HGRkfUxjsv3jw0+hMhEdZdrtkvMTdkzRUaRWfiO6PCWw2V2Pz3gldCq96Tn9S8htcgdTxw/gmbLLEbfYw==} engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} peerDependencies: - vite: ^6.0.0 || ^7.0.0 + vite: ^6.0.0 || ^7.0.0 || ^8.0.0 - '@vitest/coverage-v8@4.0.18': - resolution: {integrity: sha512-7i+N2i0+ME+2JFZhfuz7Tg/FqKtilHjGyGvoHYQ6iLV0zahbsJ9sljC9OcFcPDbhYKCet+sG8SsVqlyGvPflZg==} + '@vitest/coverage-v8@4.1.0': + resolution: {integrity: sha512-nDWulKeik2bL2Va/Wl4x7DLuTKAXa906iRFooIRPR+huHkcvp9QDkPQ2RJdmjOFrqOqvNfoSQLF68deE3xC3CQ==} peerDependencies: - '@vitest/browser': 4.0.18 - vitest: 4.0.18 + '@vitest/browser': 4.1.0 + vitest: 4.1.0 peerDependenciesMeta: '@vitest/browser': optional: true - '@vitest/expect@4.0.18': - resolution: {integrity: sha512-8sCWUyckXXYvx4opfzVY03EOiYVxyNrHS5QxX3DAIi5dpJAAkyJezHCP77VMX4HKA2LDT/Jpfo8i2r5BE3GnQQ==} + '@vitest/expect@4.1.0': + resolution: {integrity: sha512-EIxG7k4wlWweuCLG9Y5InKFwpMEOyrMb6ZJ1ihYu02LVj/bzUwn2VMU+13PinsjRW75XnITeFrQBMH5+dLvCDA==} - '@vitest/mocker@4.0.18': - resolution: {integrity: sha512-HhVd0MDnzzsgevnOWCBj5Otnzobjy5wLBe4EdeeFGv8luMsGcYqDuFRMcttKWZA5vVO8RFjexVovXvAM4JoJDQ==} + '@vitest/mocker@4.1.0': + resolution: {integrity: sha512-evxREh+Hork43+Y4IOhTo+h5lGmVRyjqI739Rz4RlUPqwrkFFDF6EMvOOYjTx4E8Tl6gyCLRL8Mu7Ry12a13Tw==} peerDependencies: msw: ^2.4.9 - vite: ^6.0.0 || ^7.0.0-0 + vite: ^6.0.0 || ^7.0.0 || ^8.0.0-0 peerDependenciesMeta: msw: optional: true vite: optional: true - '@vitest/pretty-format@4.0.18': - resolution: {integrity: sha512-P24GK3GulZWC5tz87ux0m8OADrQIUVDPIjjj65vBXYG17ZeU3qD7r+MNZ1RNv4l8CGU2vtTRqixrOi9fYk/yKw==} + '@vitest/pretty-format@4.1.0': + resolution: {integrity: sha512-3RZLZlh88Ib0J7NQTRATfc/3ZPOnSUn2uDBUoGNn5T36+bALixmzphN26OUD3LRXWkJu4H0s5vvUeqBiw+kS0A==} - '@vitest/runner@4.0.18': - resolution: {integrity: sha512-rpk9y12PGa22Jg6g5M3UVVnTS7+zycIGk9ZNGN+m6tZHKQb7jrP7/77WfZy13Y/EUDd52NDsLRQhYKtv7XfPQw==} + '@vitest/runner@4.1.0': + resolution: {integrity: sha512-Duvx2OzQ7d6OjchL+trw+aSrb9idh7pnNfxrklo14p3zmNL4qPCDeIJAK+eBKYjkIwG96Bc6vYuxhqDXQOWpoQ==} - '@vitest/snapshot@4.0.18': - resolution: {integrity: sha512-PCiV0rcl7jKQjbgYqjtakly6T1uwv/5BQ9SwBLekVg/EaYeQFPiXcgrC2Y7vDMA8dM1SUEAEV82kgSQIlXNMvA==} + '@vitest/snapshot@4.1.0': + resolution: {integrity: sha512-0Vy9euT1kgsnj1CHttwi9i9o+4rRLEaPRSOJ5gyv579GJkNpgJK+B4HSv/rAWixx2wdAFci1X4CEPjiu2bXIMg==} - '@vitest/spy@4.0.18': - resolution: {integrity: sha512-cbQt3PTSD7P2OARdVW3qWER5EGq7PHlvE+QfzSC0lbwO+xnt7+XH06ZzFjFRgzUX//JmpxrCu92VdwvEPlWSNw==} + '@vitest/spy@4.1.0': + resolution: {integrity: sha512-pz77k+PgNpyMDv2FV6qmk5ZVau6c3R8HC8v342T2xlFxQKTrSeYw9waIJG8KgV9fFwAtTu4ceRzMivPTH6wSxw==} - '@vitest/utils@4.0.18': - resolution: {integrity: sha512-msMRKLMVLWygpK3u2Hybgi4MNjcYJvwTb0Ru09+fOyCXIgT5raYP041DRRdiJiI3k/2U6SEbAETB3YtBrUkCFA==} + '@vitest/utils@4.1.0': + resolution: {integrity: sha512-XfPXT6a8TZY3dcGY8EdwsBulFCIw+BeeX0RZn2x/BtiY/75YGh8FeWGG8QISN/WhaqSrE2OrlDgtF8q5uhOTmw==} '@webassemblyjs/ast@1.14.1': resolution: {integrity: sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==} @@ -3901,8 +4030,8 @@ packages: ajv@8.18.0: resolution: {integrity: sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==} - algoliasearch@5.49.1: - resolution: {integrity: sha512-X3Pp2aRQhg4xUC6PQtkubn5NpRKuUPQ9FPDQlx36SmpFwwH2N0/tw4c+NXV3nw3PsgeUs+BuWGP0gjz3TvENLQ==} + algoliasearch@5.49.2: + resolution: {integrity: sha512-1K0wtDaRONwfhL4h8bbJ9qTjmY6rhGgRvvagXkMBsAOMNr+3Q2SffHECh9DIuNVrMA1JwA0zCwhyepgBZVakng==} engines: {node: '>= 14.0.0'} ansi-colors@4.1.3: @@ -4003,8 +4132,8 @@ packages: resolution: {integrity: sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==} engines: {node: '>=4'} - ast-v8-to-istanbul@0.3.12: - resolution: {integrity: sha512-BRRC8VRZY2R4Z4lFIL35MwNXmwVqBityvOIwETtsCSwvjl0IdgFsy9NhdaA6j74nUdtJJlIypeRhpDam19Wq3g==} + ast-v8-to-istanbul@1.0.0: + resolution: {integrity: sha512-1fSfIwuDICFA4LKkCzRPO7F0hzFf0B7+Xqrl27ynQaa+Rh0e1Es0v6kWHPott3lU10AyAr7oKHa65OppjLn3Rg==} async-each-series@0.1.1: resolution: {integrity: sha512-p4jj6Fws4Iy2m0iCmI2am2ZNZCgbdgE+P8F/8csmn2vx7ixXrO2zGcuNsD46X5uZSVecmkEy/M06X2vG8KD6dQ==} @@ -4052,12 +4181,18 @@ packages: react-native-b4a: optional: true - babel-loader@10.0.0: - resolution: {integrity: sha512-z8jt+EdS61AMw22nSfoNJAZ0vrtmhPRVi6ghL3rCeRZI8cdNYFiV5xeV3HbE7rlZZNmGH8BVccwWt8/ED0QOHA==} + babel-loader@10.1.1: + resolution: {integrity: sha512-JwKSzk2kjIe7mgPK+/lyZ2QAaJcpahNAdM+hgR2HI8D0OJVkdj8Rl6J3kaLYki9pwF7P2iWnD8qVv80Lq1ABtg==} engines: {node: ^18.20.0 || ^20.10.0 || >=22.0.0} peerDependencies: - '@babel/core': ^7.12.0 + '@babel/core': ^7.12.0 || ^8.0.0-beta.1 + '@rspack/core': ^1.0.0 || ^2.0.0-0 webpack: '>=5.61.0' + peerDependenciesMeta: + '@rspack/core': + optional: true + webpack: + optional: true babel-plugin-polyfill-corejs2@0.4.16: resolution: {integrity: sha512-xaVwwSfebXf0ooE11BJovZYKhFjIvQo7TsyVpETuIeH2JHv0k/T6Y5j22pPTvqYqmpkxdlPAJlyJ0tfOJAoMxw==} @@ -4478,6 +4613,10 @@ packages: copy-anything@2.0.6: resolution: {integrity: sha512-1j20GZTsvKNkc4BY3NpMOM8tt///wY3FpIzozTOFO2ffuZcV61nojHXVKIy3WM+7ADCy5FVhdZYHYDdgTU0yJw==} + copy-anything@3.0.5: + resolution: {integrity: sha512-yCEafptTtb4bk7GLEQoM8KVJpxAfdBJYaXyzQEgQQQgYrZiDp8SJmGKlYza6CYjEDNstAdNdKA3UuoULlEbS6w==} + engines: {node: '>=12.13'} + copy-webpack-plugin@14.0.0: resolution: {integrity: sha512-3JLW90aBGeaTLpM7mYQKpnVdgsUZRExY55giiZgLuX/xTQRUs1dOCwbBnWnvY6Q6rfZoXMNwzOQJCSZPppfqXA==} engines: {node: '>= 20.9.0'} @@ -4842,8 +4981,8 @@ packages: resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==} engines: {node: '>=6'} - envinfo@7.15.0: - resolution: {integrity: sha512-chR+t7exF6y59kelhXw5I3849nTy7KIRO+ePdLMhCD+JRP/JvmkenDWP7QSFGlsHX+kxGxdDutOPrmj5j1HR6g==} + envinfo@7.21.0: + resolution: {integrity: sha512-Lw7I8Zp5YKHFCXL7+Dz95g4CcbMEpgvqZNNq3AmlT5XAV6CgAAk6gyAMqn2zjw08K9BHfcNuKrMiCPLByGafow==} engines: {node: '>=4'} hasBin: true @@ -4873,9 +5012,6 @@ packages: resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} engines: {node: '>= 0.4'} - es-module-lexer@1.7.0: - resolution: {integrity: sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==} - es-module-lexer@2.0.0: resolution: {integrity: sha512-5POEcUuZybH7IdmGsD8wlf0AI55wMecM9rVBTI/qEAy2c1kTOm3DjFYjrBdI2K3BaJjJYfYFeRtM0t9ssnRuxw==} @@ -4981,8 +5117,8 @@ packages: resolution: {integrity: sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} - eslint@10.0.2: - resolution: {integrity: sha512-uYixubwmqJZH+KLVYIVKY1JQt7tysXhtj21WSvjcSmU5SVNzMus1bgLe+pAt816yQ8opKfheVVoPLqvVMGejYw==} + eslint@10.0.3: + resolution: {integrity: sha512-COV33RzXZkqhG9P2rZCFl9ZmJ7WL+gQSCRzE7RhkbclbQPtLAWReL7ysA0Sh4c8Im2U9ynybdR56PV0XcKvqaQ==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} hasBin: true peerDependencies: @@ -5841,6 +5977,10 @@ packages: is-what@3.14.1: resolution: {integrity: sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA==} + is-what@4.1.16: + resolution: {integrity: sha512-ZhMwEosbFJkA0YhFnNDgTM4ZxDRsS6HqTo7qsZM08fehyRYIYa0yHu5R6mgo1n/8MgaPBXiPimPD77baVFYg+A==} + engines: {node: '>=12.13'} + is-wsl@1.1.0: resolution: {integrity: sha512-gfygJYZ2gLTDlmbWMI0CE2MwnFzSN/2SZfkMlItC4K/JBlsWVDB0bO6XhqcY13YXE7iMcAJnzTCJjPiTeJJ0Mw==} engines: {node: '>=4'} @@ -6069,8 +6209,8 @@ packages: launch-editor@2.13.1: resolution: {integrity: sha512-lPSddlAAluRKJ7/cjRFoXUFzaX7q/YKI7yPHuEvSJVqoXvFnJov1/Ud87Aa4zULIbA9Nja4mSPK8l0z/7eV2wA==} - less-loader@12.3.1: - resolution: {integrity: sha512-JZZmG7gMzoDP3VGeEG8Sh6FW5wygB5jYL7Wp29FFihuRTsIBacqO3LbRPr2yStYD11riVf13selLm/CPFRDBRQ==} + less-loader@12.3.2: + resolution: {integrity: sha512-uLV5c702ff2jBvO7qewpkLRzkh/I9QW07ur2NKkv8TVTrtX2lrKjEbEU/LLXAn7cgpCIBbkfyUm4qYXCQs5/+w==} engines: {node: '>= 18.12.0'} peerDependencies: '@rspack/core': 0.x || ^1.0.0 || ^2.0.0-0 @@ -6087,6 +6227,11 @@ packages: engines: {node: '>=14'} hasBin: true + less@4.6.4: + resolution: {integrity: sha512-OJmO5+HxZLLw0RLzkqaNHzcgEAQG7C0y3aMbwtCzIUFZsLMNNq/1IdAdHEycQ58CwUO3jPTHmoN+tE5I7FQxNg==} + engines: {node: '>=18'} + hasBin: true + levn@0.4.1: resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} engines: {node: '>= 0.8.0'} @@ -6109,8 +6254,8 @@ packages: resolution: {integrity: sha512-7I5knELsJKTUjXG+A6BkKAiGkW1i25fNa/xlUl9hFtk15WbE9jndA89xu5FzQKrY5llajE1hfZZFMILXkDHk/Q==} engines: {node: '>=22.13.0'} - lmdb@3.5.1: - resolution: {integrity: sha512-NYHA0MRPjvNX+vSw8Xxg6FLKxzAG+e7Pt8RqAQA/EehzHVXq9SxDqJIN3JL1hK0dweb884y8kIh6rkWvPyg9Wg==} + lmdb@3.5.2: + resolution: {integrity: sha512-od5AWh1MNylIOeX7MB7TV627MM9tzyOUn8U8FZOeWKpWFnMU5FS9pu5t41pS4+pi7OxHRyk5QVRhuUimHjfkmg==} hasBin: true loader-runner@4.3.1: @@ -6315,8 +6460,8 @@ packages: resolution: {integrity: sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==} engines: {node: '>=10'} - mini-css-extract-plugin@2.10.0: - resolution: {integrity: sha512-540P2c5dYnJlyJxTaSloliZexv8rji6rY8FhQN+WF/82iHQfA23j/xtJx97L+mXOML27EqksSek/g4eK7jaL3g==} + mini-css-extract-plugin@2.10.1: + resolution: {integrity: sha512-k7G3Y5QOegl380tXmZ68foBRRjE9Ljavx835ObdvmZjQ639izvZD8CS7BkWw1qKPPzHsGL/JDhl0uyU1zc2rJw==} engines: {node: '>= 12.13.0'} peerDependencies: webpack: ^5.0.0 @@ -6708,8 +6853,8 @@ packages: package-json-from-dist@1.0.1: resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} - pacote@21.4.0: - resolution: {integrity: sha512-DR7mn7HUOomAX1BORnpYy678qVIidbvOojkBscqy27dRKN+s/hLeQT1MeYYrx1Cxh62jyKjiWiDV7RTTqB+ZEQ==} + pacote@21.5.0: + resolution: {integrity: sha512-VtZ0SB8mb5Tzw3dXDfVAIjhyVKUHZkS/ZH9/5mpKenwC9sFOXNI0JI7kEF7IMkwOnsWMFrvAZHzx1T5fmrp9FQ==} engines: {node: ^20.17.0 || >=22.9.0} hasBin: true @@ -6985,12 +7130,12 @@ packages: resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} engines: {node: '>=6'} - puppeteer-core@24.38.0: - resolution: {integrity: sha512-zB3S/tksIhgi2gZRndUe07AudBz5SXOB7hqG0kEa9/YXWrGwlVlYm3tZtwKgfRftBzbmLQl5iwHkQQl04n/mWw==} + puppeteer-core@24.39.1: + resolution: {integrity: sha512-AMqQIKoEhPS6CilDzw0Gd1brLri3emkC+1N2J6ZCCuY1Cglo56M63S0jOeBZDQlemOiRd686MYVMl9ELJBzN3A==} engines: {node: '>=18'} - puppeteer@24.38.0: - resolution: {integrity: sha512-abnJOBVoL9PQTLKSbYGm9mjNFyIPaTVj77J/6cS370dIQtcZMpx8wyZoAuBzR71Aoon6yvI71NEVFUsl3JU82g==} + puppeteer@24.39.1: + resolution: {integrity: sha512-68Zc9QpcVvfxp2C+3UL88TyUogEAn5tSylXidbEuEXvhiqK1+v65zeBU5ubinAgEHMGr3dcSYqvYrGtdzsPI3w==} engines: {node: '>=18'} hasBin: true @@ -7170,13 +7315,13 @@ packages: resolution: {integrity: sha512-l0OE8wL34P4nJH/H2ffoaniAokM2qSmrtXHmlpvYr5AVVX8msAyW0l8NVJFDxlSK4u3Uh/f41cQheDVdnYijwQ==} hasBin: true - rolldown@1.0.0-rc.7: - resolution: {integrity: sha512-5X0zEeQFzDpB3MqUWQZyO2TUQqP9VnT7CqXHF2laTFRy487+b6QZyotCazOySAuZLAvplCaOVsg1tVn/Zlmwfg==} + rolldown@1.0.0-rc.9: + resolution: {integrity: sha512-9EbgWge7ZH+yqb4d2EnELAntgPTWbfL8ajiTW+SyhJEC4qhBbkCKbqFV4Ge4zmu5ziQuVbWxb/XwLZ+RIO7E8Q==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true - rollup-license-plugin@3.1.0: - resolution: {integrity: sha512-wt0sqnedDjYVUnalyDEajrVAiup2V3O30I5PzXDS3syN9liSRKrZ8H6EECiV3OEZRs2fLauwT9t0QZGLuVTs2Q==} + rollup-license-plugin@3.2.1: + resolution: {integrity: sha512-66iiym49fU6YDJW4DPEYbmUwm4emHXP048lJM9YkecADYGO4cKf0gQZ13U/IqRN00DXbKz0g7O3yOt8m4BNFew==} engines: {node: '>=18.0.0'} rollup-plugin-dts@6.3.0: @@ -7186,6 +7331,13 @@ packages: rollup: ^3.29.4 || ^4 typescript: ^4.5 || ^5.0 + rollup-plugin-dts@6.4.0: + resolution: {integrity: sha512-2i00A5UoPCoDecLEs13Eu105QegSGfrbp1sDeUj/54LKGmv6XFHDxWKC6Wsb4BobGUWYVCWWjmjAc8bXXbXH/Q==} + engines: {node: '>=16'} + peerDependencies: + rollup: ^3.29.4 || ^4 + typescript: ^4.5 || ^5.0 || ^6.0 + rollup-plugin-sourcemaps2@0.5.6: resolution: {integrity: sha512-oalmewAT4GLVsW6NugcDybx0ypet94vU0dUK3VofdYoWiN4ZjoX1L4dizFd0OhoJ78r/Am9sARTR9gMrX0cJ7w==} engines: {node: '>=18.0.0'} @@ -7269,6 +7421,11 @@ packages: engines: {node: '>=14.0.0'} hasBin: true + sass@1.98.0: + resolution: {integrity: sha512-+4N/u9dZ4PrgzGgPlKnaaRQx64RO0JBKs9sDhQ2pLgN6JQZ25uPQZKQYaBJU48Kd5BxgXoJ4e09Dq7nMcOUW3A==} + engines: {node: '>=14.0.0'} + hasBin: true + sax@1.5.0: resolution: {integrity: sha512-21IYA3Q5cQf089Z6tgaUTr7lDAyzoTPx5HRtbhsME8Udispad8dC/+sziTNugOEx54ilvatQ9YCzl4KQLPcRHA==} engines: {node: '>=11.0.0'} @@ -7301,11 +7458,6 @@ packages: engines: {node: '>=10'} hasBin: true - semver@7.7.3: - resolution: {integrity: sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==} - engines: {node: '>=10'} - hasBin: true - semver@7.7.4: resolution: {integrity: sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==} engines: {node: '>=10'} @@ -7531,8 +7683,8 @@ packages: resolution: {integrity: sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==} engines: {node: '>= 0.8'} - std-env@3.10.0: - resolution: {integrity: sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg==} + std-env@4.0.0: + resolution: {integrity: sha512-zUMPtQ/HBY3/50VbpkupYHbRroTRZJPRLvreamgErJVys0ceuzMkD44J/QjqhHjOzK42GQ3QZIeFG1OYfOtKqQ==} stdin-discarder@0.3.1: resolution: {integrity: sha512-reExS1kSGoElkextOcPkel4NE99S0BWxjUHQeDFnR8S993JxpPX7KU4MNmO19NXhlJp+8dmdCbKQVNgLJh2teA==} @@ -7892,6 +8044,10 @@ packages: resolution: {integrity: sha512-RqslV2Us5BrllB+JeiZnK4peryVTndy9Dnqq62S3yYRRTj0tFQCwEniUy2167skdGOy3vqRzEvl1Dm4sV2ReDg==} engines: {node: '>=20.18.1'} + undici@7.24.4: + resolution: {integrity: sha512-BM/JzwwaRXxrLdElV2Uo6cTLEjhSb3WXboncJamZ15NgUURmvlXvxa6xkwIOILIjPNo9i8ku136ZvWV0Uly8+w==} + engines: {node: '>=20.18.1'} + unenv@1.10.0: resolution: {integrity: sha512-wY5bskBQFL9n3Eca5XnhH6KbUo/tfvkwm9OpcdCvLaeA7piBNbavbOKJySEwQ1V0RH6HvNlSAFRTpvTqgKRQXQ==} @@ -7981,20 +8137,20 @@ packages: resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} engines: {node: '>= 0.8'} - verdaccio-audit@13.0.0-next-8.29: - resolution: {integrity: sha512-ZUNONewbFocBq3oWXrwAL8IX4ZovPU70yj0nuYStSVJ9+Vrb74Duc+eI+IIS+jLfyysZe5L0ZAODGN8ny1Lu6w==} + verdaccio-audit@13.0.0-next-8.33: + resolution: {integrity: sha512-qBMN0b4cbSbo6RbOke0QtVy/HuSzmxgRXIjnXM3C86ZhjN6DlhdeAoQYcZUfbXM8BklRXtObAnMoTlgeJ7BJLA==} engines: {node: '>=18'} verdaccio-auth-memory@10.3.1: resolution: {integrity: sha512-3m4VH5lD3qdRkDvcvVzHP6YftcsRXgu3WZuspcrH0/76+ugI2wkVezgBDbu4WRwJqRvG0MEf8Zxoup9zVK5SVw==} engines: {node: '>=18'} - verdaccio-htpasswd@13.0.0-next-8.29: - resolution: {integrity: sha512-JBYCaSTQSUws/EXOqNrh7iOyWPrGLTYSeufCS3Y6BOCJbfDiy2Nh8PbstoZn/L9ZbzUesjPPiIZ4Ou3eUaK0Mw==} + verdaccio-htpasswd@13.0.0-next-8.33: + resolution: {integrity: sha512-ZYqvF/EuA4W4idfv2O1ZN8YhSI2xreFbGdrcWgOd+QBedDin7NzMhgypbafutm9mPhkI6Xv/+3syee1u1cEL8g==} engines: {node: '>=18'} - verdaccio@6.2.9: - resolution: {integrity: sha512-w1LYqM/wuvtiUedF9eSTsIC1yEI0nShIX48OqG1R6xzS4eEt0Pe1NYl5oPC/d7UyVSOufpjE8QVgd1CqauyhXQ==} + verdaccio@6.3.2: + resolution: {integrity: sha512-9BmfrGlakdAW1QNBrD2GgO8hOhwIp6ogbAhaaDgtDsK3/94qXwS6n2PM1/gG2V/zFC5JH1rWbLia390i0xbodA==} engines: {node: '>=18'} hasBin: true @@ -8042,18 +8198,18 @@ packages: yaml: optional: true - vitest@4.0.18: - resolution: {integrity: sha512-hOQuK7h0FGKgBAas7v0mSAsnvrIgAvWmRFjmzpJ7SwFHH3g1k2u37JtYwOwmEKhK6ZO3v9ggDBBm0La1LCK4uQ==} + vitest@4.1.0: + resolution: {integrity: sha512-YbDrMF9jM2Lqc++2530UourxZHmkKLxrs4+mYhEwqWS97WJ7wOYEkcr+QfRgJ3PW9wz3odRijLZjHEaRLTNbqw==} engines: {node: ^20.0.0 || ^22.0.0 || >=24.0.0} hasBin: true peerDependencies: '@edge-runtime/vm': '*' '@opentelemetry/api': ^1.9.0 '@types/node': ^20.0.0 || ^22.0.0 || >=24.0.0 - '@vitest/browser-playwright': 4.0.18 - '@vitest/browser-preview': 4.0.18 - '@vitest/browser-webdriverio': 4.0.18 - '@vitest/ui': 4.0.18 + '@vitest/browser-playwright': 4.1.0 + '@vitest/browser-preview': 4.1.0 + '@vitest/browser-webdriverio': 4.1.0 + '@vitest/ui': 4.1.0 happy-dom: '*' jsdom: '*' peerDependenciesMeta: @@ -8383,89 +8539,89 @@ snapshots: '@actions/io@3.0.2': {} - '@algolia/abtesting@1.15.1': + '@algolia/abtesting@1.15.2': dependencies: - '@algolia/client-common': 5.49.1 - '@algolia/requester-browser-xhr': 5.49.1 - '@algolia/requester-fetch': 5.49.1 - '@algolia/requester-node-http': 5.49.1 + '@algolia/client-common': 5.49.2 + '@algolia/requester-browser-xhr': 5.49.2 + '@algolia/requester-fetch': 5.49.2 + '@algolia/requester-node-http': 5.49.2 - '@algolia/client-abtesting@5.49.1': + '@algolia/client-abtesting@5.49.2': dependencies: - '@algolia/client-common': 5.49.1 - '@algolia/requester-browser-xhr': 5.49.1 - '@algolia/requester-fetch': 5.49.1 - '@algolia/requester-node-http': 5.49.1 + '@algolia/client-common': 5.49.2 + '@algolia/requester-browser-xhr': 5.49.2 + '@algolia/requester-fetch': 5.49.2 + '@algolia/requester-node-http': 5.49.2 - '@algolia/client-analytics@5.49.1': + '@algolia/client-analytics@5.49.2': dependencies: - '@algolia/client-common': 5.49.1 - '@algolia/requester-browser-xhr': 5.49.1 - '@algolia/requester-fetch': 5.49.1 - '@algolia/requester-node-http': 5.49.1 + '@algolia/client-common': 5.49.2 + '@algolia/requester-browser-xhr': 5.49.2 + '@algolia/requester-fetch': 5.49.2 + '@algolia/requester-node-http': 5.49.2 - '@algolia/client-common@5.49.1': {} + '@algolia/client-common@5.49.2': {} - '@algolia/client-insights@5.49.1': + '@algolia/client-insights@5.49.2': dependencies: - '@algolia/client-common': 5.49.1 - '@algolia/requester-browser-xhr': 5.49.1 - '@algolia/requester-fetch': 5.49.1 - '@algolia/requester-node-http': 5.49.1 + '@algolia/client-common': 5.49.2 + '@algolia/requester-browser-xhr': 5.49.2 + '@algolia/requester-fetch': 5.49.2 + '@algolia/requester-node-http': 5.49.2 - '@algolia/client-personalization@5.49.1': + '@algolia/client-personalization@5.49.2': dependencies: - '@algolia/client-common': 5.49.1 - '@algolia/requester-browser-xhr': 5.49.1 - '@algolia/requester-fetch': 5.49.1 - '@algolia/requester-node-http': 5.49.1 + '@algolia/client-common': 5.49.2 + '@algolia/requester-browser-xhr': 5.49.2 + '@algolia/requester-fetch': 5.49.2 + '@algolia/requester-node-http': 5.49.2 - '@algolia/client-query-suggestions@5.49.1': + '@algolia/client-query-suggestions@5.49.2': dependencies: - '@algolia/client-common': 5.49.1 - '@algolia/requester-browser-xhr': 5.49.1 - '@algolia/requester-fetch': 5.49.1 - '@algolia/requester-node-http': 5.49.1 + '@algolia/client-common': 5.49.2 + '@algolia/requester-browser-xhr': 5.49.2 + '@algolia/requester-fetch': 5.49.2 + '@algolia/requester-node-http': 5.49.2 - '@algolia/client-search@5.49.1': + '@algolia/client-search@5.49.2': dependencies: - '@algolia/client-common': 5.49.1 - '@algolia/requester-browser-xhr': 5.49.1 - '@algolia/requester-fetch': 5.49.1 - '@algolia/requester-node-http': 5.49.1 + '@algolia/client-common': 5.49.2 + '@algolia/requester-browser-xhr': 5.49.2 + '@algolia/requester-fetch': 5.49.2 + '@algolia/requester-node-http': 5.49.2 - '@algolia/ingestion@1.49.1': + '@algolia/ingestion@1.49.2': dependencies: - '@algolia/client-common': 5.49.1 - '@algolia/requester-browser-xhr': 5.49.1 - '@algolia/requester-fetch': 5.49.1 - '@algolia/requester-node-http': 5.49.1 + '@algolia/client-common': 5.49.2 + '@algolia/requester-browser-xhr': 5.49.2 + '@algolia/requester-fetch': 5.49.2 + '@algolia/requester-node-http': 5.49.2 - '@algolia/monitoring@1.49.1': + '@algolia/monitoring@1.49.2': dependencies: - '@algolia/client-common': 5.49.1 - '@algolia/requester-browser-xhr': 5.49.1 - '@algolia/requester-fetch': 5.49.1 - '@algolia/requester-node-http': 5.49.1 + '@algolia/client-common': 5.49.2 + '@algolia/requester-browser-xhr': 5.49.2 + '@algolia/requester-fetch': 5.49.2 + '@algolia/requester-node-http': 5.49.2 - '@algolia/recommend@5.49.1': + '@algolia/recommend@5.49.2': dependencies: - '@algolia/client-common': 5.49.1 - '@algolia/requester-browser-xhr': 5.49.1 - '@algolia/requester-fetch': 5.49.1 - '@algolia/requester-node-http': 5.49.1 + '@algolia/client-common': 5.49.2 + '@algolia/requester-browser-xhr': 5.49.2 + '@algolia/requester-fetch': 5.49.2 + '@algolia/requester-node-http': 5.49.2 - '@algolia/requester-browser-xhr@5.49.1': + '@algolia/requester-browser-xhr@5.49.2': dependencies: - '@algolia/client-common': 5.49.1 + '@algolia/client-common': 5.49.2 - '@algolia/requester-fetch@5.49.1': + '@algolia/requester-fetch@5.49.2': dependencies: - '@algolia/client-common': 5.49.1 + '@algolia/client-common': 5.49.2 - '@algolia/requester-node-http@5.49.1': + '@algolia/requester-node-http@5.49.2': dependencies: - '@algolia/client-common': 5.49.1 + '@algolia/client-common': 5.49.2 '@ampproject/remapping@2.3.0': dependencies: @@ -9490,18 +9646,18 @@ snapshots: '@esbuild/win32-x64@0.27.3': optional: true - '@eslint-community/eslint-utils@4.9.1(eslint@10.0.2(jiti@2.6.1))': + '@eslint-community/eslint-utils@4.9.1(eslint@10.0.3(jiti@2.6.1))': dependencies: - eslint: 10.0.2(jiti@2.6.1) + eslint: 10.0.3(jiti@2.6.1) eslint-visitor-keys: 3.4.3 '@eslint-community/regexpp@4.12.2': {} - '@eslint/compat@2.0.2(eslint@10.0.2(jiti@2.6.1))': + '@eslint/compat@2.0.3(eslint@10.0.3(jiti@2.6.1))': dependencies: '@eslint/core': 1.1.1 optionalDependencies: - eslint: 10.0.2(jiti@2.6.1) + eslint: 10.0.3(jiti@2.6.1) '@eslint/config-array@0.23.3': dependencies: @@ -9519,7 +9675,7 @@ snapshots: dependencies: '@types/json-schema': 7.0.15 - '@eslint/eslintrc@3.3.4': + '@eslint/eslintrc@3.3.5': dependencies: ajv: 6.14.0 debug: 4.4.3(supports-color@10.2.2) @@ -9533,9 +9689,9 @@ snapshots: transitivePeerDependencies: - supports-color - '@eslint/js@10.0.1(eslint@10.0.2(jiti@2.6.1))': + '@eslint/js@10.0.1(eslint@10.0.3(jiti@2.6.1))': optionalDependencies: - eslint: 10.0.2(jiti@2.6.1) + eslint: 10.0.3(jiti@2.6.1) '@eslint/object-schema@3.0.3': {} @@ -9986,6 +10142,8 @@ snapshots: '@inquirer/ansi@2.0.3': {} + '@inquirer/ansi@2.0.4': {} + '@inquirer/checkbox@5.1.0(@types/node@24.12.0)': dependencies: '@inquirer/ansi': 2.0.3 @@ -9995,10 +10153,19 @@ snapshots: optionalDependencies: '@types/node': 24.12.0 - '@inquirer/confirm@6.0.8(@types/node@24.12.0)': + '@inquirer/checkbox@5.1.2(@types/node@24.12.0)': dependencies: - '@inquirer/core': 11.1.5(@types/node@24.12.0) - '@inquirer/type': 4.0.3(@types/node@24.12.0) + '@inquirer/ansi': 2.0.4 + '@inquirer/core': 11.1.7(@types/node@24.12.0) + '@inquirer/figures': 2.0.4 + '@inquirer/type': 4.0.4(@types/node@24.12.0) + optionalDependencies: + '@types/node': 24.12.0 + + '@inquirer/confirm@6.0.10(@types/node@24.12.0)': + dependencies: + '@inquirer/core': 11.1.7(@types/node@24.12.0) + '@inquirer/type': 4.0.4(@types/node@24.12.0) optionalDependencies: '@types/node': 24.12.0 @@ -10014,6 +10181,26 @@ snapshots: optionalDependencies: '@types/node': 24.12.0 + '@inquirer/core@11.1.7(@types/node@24.12.0)': + dependencies: + '@inquirer/ansi': 2.0.4 + '@inquirer/figures': 2.0.4 + '@inquirer/type': 4.0.4(@types/node@24.12.0) + cli-width: 4.1.0 + fast-wrap-ansi: 0.2.0 + mute-stream: 3.0.0 + signal-exit: 4.1.0 + optionalDependencies: + '@types/node': 24.12.0 + + '@inquirer/editor@5.0.10(@types/node@24.12.0)': + dependencies: + '@inquirer/core': 11.1.7(@types/node@24.12.0) + '@inquirer/external-editor': 2.0.4(@types/node@24.12.0) + '@inquirer/type': 4.0.4(@types/node@24.12.0) + optionalDependencies: + '@types/node': 24.12.0 + '@inquirer/editor@5.0.8(@types/node@24.12.0)': dependencies: '@inquirer/core': 11.1.5(@types/node@24.12.0) @@ -10022,6 +10209,13 @@ snapshots: optionalDependencies: '@types/node': 24.12.0 + '@inquirer/expand@5.0.10(@types/node@24.12.0)': + dependencies: + '@inquirer/core': 11.1.7(@types/node@24.12.0) + '@inquirer/type': 4.0.4(@types/node@24.12.0) + optionalDependencies: + '@types/node': 24.12.0 + '@inquirer/expand@5.0.8(@types/node@24.12.0)': dependencies: '@inquirer/core': 11.1.5(@types/node@24.12.0) @@ -10036,8 +10230,24 @@ snapshots: optionalDependencies: '@types/node': 24.12.0 + '@inquirer/external-editor@2.0.4(@types/node@24.12.0)': + dependencies: + chardet: 2.1.1 + iconv-lite: 0.7.2 + optionalDependencies: + '@types/node': 24.12.0 + '@inquirer/figures@2.0.3': {} + '@inquirer/figures@2.0.4': {} + + '@inquirer/input@5.0.10(@types/node@24.12.0)': + dependencies: + '@inquirer/core': 11.1.7(@types/node@24.12.0) + '@inquirer/type': 4.0.4(@types/node@24.12.0) + optionalDependencies: + '@types/node': 24.12.0 + '@inquirer/input@5.0.8(@types/node@24.12.0)': dependencies: '@inquirer/core': 11.1.5(@types/node@24.12.0) @@ -10045,6 +10255,13 @@ snapshots: optionalDependencies: '@types/node': 24.12.0 + '@inquirer/number@4.0.10(@types/node@24.12.0)': + dependencies: + '@inquirer/core': 11.1.7(@types/node@24.12.0) + '@inquirer/type': 4.0.4(@types/node@24.12.0) + optionalDependencies: + '@types/node': 24.12.0 + '@inquirer/number@4.0.8(@types/node@24.12.0)': dependencies: '@inquirer/core': 11.1.5(@types/node@24.12.0) @@ -10052,6 +10269,14 @@ snapshots: optionalDependencies: '@types/node': 24.12.0 + '@inquirer/password@5.0.10(@types/node@24.12.0)': + dependencies: + '@inquirer/ansi': 2.0.4 + '@inquirer/core': 11.1.7(@types/node@24.12.0) + '@inquirer/type': 4.0.4(@types/node@24.12.0) + optionalDependencies: + '@types/node': 24.12.0 + '@inquirer/password@5.0.8(@types/node@24.12.0)': dependencies: '@inquirer/ansi': 2.0.3 @@ -10063,7 +10288,7 @@ snapshots: '@inquirer/prompts@8.3.0(@types/node@24.12.0)': dependencies: '@inquirer/checkbox': 5.1.0(@types/node@24.12.0) - '@inquirer/confirm': 6.0.8(@types/node@24.12.0) + '@inquirer/confirm': 6.0.10(@types/node@24.12.0) '@inquirer/editor': 5.0.8(@types/node@24.12.0) '@inquirer/expand': 5.0.8(@types/node@24.12.0) '@inquirer/input': 5.0.8(@types/node@24.12.0) @@ -10075,6 +10300,21 @@ snapshots: optionalDependencies: '@types/node': 24.12.0 + '@inquirer/prompts@8.3.2(@types/node@24.12.0)': + dependencies: + '@inquirer/checkbox': 5.1.2(@types/node@24.12.0) + '@inquirer/confirm': 6.0.10(@types/node@24.12.0) + '@inquirer/editor': 5.0.10(@types/node@24.12.0) + '@inquirer/expand': 5.0.10(@types/node@24.12.0) + '@inquirer/input': 5.0.10(@types/node@24.12.0) + '@inquirer/number': 4.0.10(@types/node@24.12.0) + '@inquirer/password': 5.0.10(@types/node@24.12.0) + '@inquirer/rawlist': 5.2.6(@types/node@24.12.0) + '@inquirer/search': 4.1.6(@types/node@24.12.0) + '@inquirer/select': 5.1.2(@types/node@24.12.0) + optionalDependencies: + '@types/node': 24.12.0 + '@inquirer/rawlist@5.2.4(@types/node@24.12.0)': dependencies: '@inquirer/core': 11.1.5(@types/node@24.12.0) @@ -10082,6 +10322,13 @@ snapshots: optionalDependencies: '@types/node': 24.12.0 + '@inquirer/rawlist@5.2.6(@types/node@24.12.0)': + dependencies: + '@inquirer/core': 11.1.7(@types/node@24.12.0) + '@inquirer/type': 4.0.4(@types/node@24.12.0) + optionalDependencies: + '@types/node': 24.12.0 + '@inquirer/search@4.1.4(@types/node@24.12.0)': dependencies: '@inquirer/core': 11.1.5(@types/node@24.12.0) @@ -10090,6 +10337,14 @@ snapshots: optionalDependencies: '@types/node': 24.12.0 + '@inquirer/search@4.1.6(@types/node@24.12.0)': + dependencies: + '@inquirer/core': 11.1.7(@types/node@24.12.0) + '@inquirer/figures': 2.0.4 + '@inquirer/type': 4.0.4(@types/node@24.12.0) + optionalDependencies: + '@types/node': 24.12.0 + '@inquirer/select@5.1.0(@types/node@24.12.0)': dependencies: '@inquirer/ansi': 2.0.3 @@ -10099,10 +10354,23 @@ snapshots: optionalDependencies: '@types/node': 24.12.0 + '@inquirer/select@5.1.2(@types/node@24.12.0)': + dependencies: + '@inquirer/ansi': 2.0.4 + '@inquirer/core': 11.1.7(@types/node@24.12.0) + '@inquirer/figures': 2.0.4 + '@inquirer/type': 4.0.4(@types/node@24.12.0) + optionalDependencies: + '@types/node': 24.12.0 + '@inquirer/type@4.0.3(@types/node@24.12.0)': optionalDependencies: '@types/node': 24.12.0 + '@inquirer/type@4.0.4(@types/node@24.12.0)': + optionalDependencies: + '@types/node': 24.12.0 + '@isaacs/cliui@8.0.2': dependencies: string-width: 5.1.2 @@ -10275,33 +10543,33 @@ snapshots: '@leichtgewicht/ip-codec@2.0.5': {} - '@listr2/prompt-adapter-inquirer@4.2.1(@inquirer/prompts@8.3.0(@types/node@24.12.0))(@types/node@24.12.0)(listr2@10.2.1)': + '@listr2/prompt-adapter-inquirer@4.2.1(@inquirer/prompts@8.3.2(@types/node@24.12.0))(@types/node@24.12.0)(listr2@10.2.1)': dependencies: - '@inquirer/prompts': 8.3.0(@types/node@24.12.0) + '@inquirer/prompts': 8.3.2(@types/node@24.12.0) '@inquirer/type': 4.0.3(@types/node@24.12.0) listr2: 10.2.1 transitivePeerDependencies: - '@types/node' - '@lmdb/lmdb-darwin-arm64@3.5.1': + '@lmdb/lmdb-darwin-arm64@3.5.2': optional: true - '@lmdb/lmdb-darwin-x64@3.5.1': + '@lmdb/lmdb-darwin-x64@3.5.2': optional: true - '@lmdb/lmdb-linux-arm64@3.5.1': + '@lmdb/lmdb-linux-arm64@3.5.2': optional: true - '@lmdb/lmdb-linux-arm@3.5.1': + '@lmdb/lmdb-linux-arm@3.5.2': optional: true - '@lmdb/lmdb-linux-x64@3.5.1': + '@lmdb/lmdb-linux-x64@3.5.2': optional: true - '@lmdb/lmdb-win32-arm64@3.5.1': + '@lmdb/lmdb-win32-arm64@3.5.2': optional: true - '@lmdb/lmdb-win32-x64@3.5.1': + '@lmdb/lmdb-win32-x64@3.5.2': optional: true '@modelcontextprotocol/sdk@1.27.1(zod@4.3.6)': @@ -10853,54 +11121,54 @@ snapshots: - react-native-b4a - supports-color - '@rolldown/binding-android-arm64@1.0.0-rc.7': + '@rolldown/binding-android-arm64@1.0.0-rc.9': optional: true - '@rolldown/binding-darwin-arm64@1.0.0-rc.7': + '@rolldown/binding-darwin-arm64@1.0.0-rc.9': optional: true - '@rolldown/binding-darwin-x64@1.0.0-rc.7': + '@rolldown/binding-darwin-x64@1.0.0-rc.9': optional: true - '@rolldown/binding-freebsd-x64@1.0.0-rc.7': + '@rolldown/binding-freebsd-x64@1.0.0-rc.9': optional: true - '@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.7': + '@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.9': optional: true - '@rolldown/binding-linux-arm64-gnu@1.0.0-rc.7': + '@rolldown/binding-linux-arm64-gnu@1.0.0-rc.9': optional: true - '@rolldown/binding-linux-arm64-musl@1.0.0-rc.7': + '@rolldown/binding-linux-arm64-musl@1.0.0-rc.9': optional: true - '@rolldown/binding-linux-ppc64-gnu@1.0.0-rc.7': + '@rolldown/binding-linux-ppc64-gnu@1.0.0-rc.9': optional: true - '@rolldown/binding-linux-s390x-gnu@1.0.0-rc.7': + '@rolldown/binding-linux-s390x-gnu@1.0.0-rc.9': optional: true - '@rolldown/binding-linux-x64-gnu@1.0.0-rc.7': + '@rolldown/binding-linux-x64-gnu@1.0.0-rc.9': optional: true - '@rolldown/binding-linux-x64-musl@1.0.0-rc.7': + '@rolldown/binding-linux-x64-musl@1.0.0-rc.9': optional: true - '@rolldown/binding-openharmony-arm64@1.0.0-rc.7': + '@rolldown/binding-openharmony-arm64@1.0.0-rc.9': optional: true - '@rolldown/binding-wasm32-wasi@1.0.0-rc.7': + '@rolldown/binding-wasm32-wasi@1.0.0-rc.9': dependencies: '@napi-rs/wasm-runtime': 1.1.1 optional: true - '@rolldown/binding-win32-arm64-msvc@1.0.0-rc.7': + '@rolldown/binding-win32-arm64-msvc@1.0.0-rc.9': optional: true - '@rolldown/binding-win32-x64-msvc@1.0.0-rc.7': + '@rolldown/binding-win32-x64-msvc@1.0.0-rc.9': optional: true - '@rolldown/pluginutils@1.0.0-rc.7': {} + '@rolldown/pluginutils@1.0.0-rc.9': {} '@rollup/plugin-alias@6.0.0(rollup@4.59.0)': optionalDependencies: @@ -11069,11 +11337,11 @@ snapshots: '@standard-schema/spec@1.1.0': {} - '@stylistic/eslint-plugin@5.10.0(eslint@10.0.2(jiti@2.6.1))': + '@stylistic/eslint-plugin@5.10.0(eslint@10.0.3(jiti@2.6.1))': dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@10.0.2(jiti@2.6.1)) + '@eslint-community/eslint-utils': 4.9.1(eslint@10.0.3(jiti@2.6.1)) '@typescript-eslint/types': 8.56.1 - eslint: 10.0.2(jiti@2.6.1) + eslint: 10.0.3(jiti@2.6.1) eslint-visitor-keys: 4.2.1 espree: 10.4.0 estraverse: 5.3.0 @@ -11083,9 +11351,9 @@ snapshots: dependencies: defer-to-connect: 2.0.1 - '@tony.ganchev/eslint-plugin-header@3.2.6(eslint@10.0.2(jiti@2.6.1))': + '@tony.ganchev/eslint-plugin-header@3.3.1(eslint@10.0.3(jiti@2.6.1))': dependencies: - eslint: 10.0.2(jiti@2.6.1) + eslint: 10.0.3(jiti@2.6.1) '@tootallnate/once@2.0.0': {} @@ -11391,15 +11659,15 @@ snapshots: '@types/node': 22.19.15 optional: true - '@typescript-eslint/eslint-plugin@8.56.1(@typescript-eslint/parser@8.56.1(eslint@10.0.2(jiti@2.6.1))(typescript@6.0.1-rc))(eslint@10.0.2(jiti@2.6.1))(typescript@6.0.1-rc)': + '@typescript-eslint/eslint-plugin@8.57.0(@typescript-eslint/parser@8.57.0(eslint@10.0.3(jiti@2.6.1))(typescript@6.0.1-rc))(eslint@10.0.3(jiti@2.6.1))(typescript@6.0.1-rc)': dependencies: '@eslint-community/regexpp': 4.12.2 - '@typescript-eslint/parser': 8.56.1(eslint@10.0.2(jiti@2.6.1))(typescript@6.0.1-rc) - '@typescript-eslint/scope-manager': 8.56.1 - '@typescript-eslint/type-utils': 8.56.1(eslint@10.0.2(jiti@2.6.1))(typescript@6.0.1-rc) - '@typescript-eslint/utils': 8.56.1(eslint@10.0.2(jiti@2.6.1))(typescript@6.0.1-rc) - '@typescript-eslint/visitor-keys': 8.56.1 - eslint: 10.0.2(jiti@2.6.1) + '@typescript-eslint/parser': 8.57.0(eslint@10.0.3(jiti@2.6.1))(typescript@6.0.1-rc) + '@typescript-eslint/scope-manager': 8.57.0 + '@typescript-eslint/type-utils': 8.57.0(eslint@10.0.3(jiti@2.6.1))(typescript@6.0.1-rc) + '@typescript-eslint/utils': 8.57.0(eslint@10.0.3(jiti@2.6.1))(typescript@6.0.1-rc) + '@typescript-eslint/visitor-keys': 8.57.0 + eslint: 10.0.3(jiti@2.6.1) ignore: 7.0.5 natural-compare: 1.4.0 ts-api-utils: 2.4.0(typescript@6.0.1-rc) @@ -11407,43 +11675,43 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.56.1(eslint@10.0.2(jiti@2.6.1))(typescript@6.0.1-rc)': + '@typescript-eslint/parser@8.57.0(eslint@10.0.3(jiti@2.6.1))(typescript@6.0.1-rc)': dependencies: - '@typescript-eslint/scope-manager': 8.56.1 - '@typescript-eslint/types': 8.56.1 - '@typescript-eslint/typescript-estree': 8.56.1(typescript@6.0.1-rc) - '@typescript-eslint/visitor-keys': 8.56.1 + '@typescript-eslint/scope-manager': 8.57.0 + '@typescript-eslint/types': 8.57.0 + '@typescript-eslint/typescript-estree': 8.57.0(typescript@6.0.1-rc) + '@typescript-eslint/visitor-keys': 8.57.0 debug: 4.4.3(supports-color@10.2.2) - eslint: 10.0.2(jiti@2.6.1) + eslint: 10.0.3(jiti@2.6.1) typescript: 6.0.1-rc transitivePeerDependencies: - supports-color - '@typescript-eslint/project-service@8.56.1(typescript@6.0.1-rc)': + '@typescript-eslint/project-service@8.57.0(typescript@6.0.1-rc)': dependencies: - '@typescript-eslint/tsconfig-utils': 8.56.1(typescript@6.0.1-rc) - '@typescript-eslint/types': 8.56.1 + '@typescript-eslint/tsconfig-utils': 8.57.0(typescript@6.0.1-rc) + '@typescript-eslint/types': 8.57.0 debug: 4.4.3(supports-color@10.2.2) typescript: 6.0.1-rc transitivePeerDependencies: - supports-color - '@typescript-eslint/scope-manager@8.56.1': + '@typescript-eslint/scope-manager@8.57.0': dependencies: - '@typescript-eslint/types': 8.56.1 - '@typescript-eslint/visitor-keys': 8.56.1 + '@typescript-eslint/types': 8.57.0 + '@typescript-eslint/visitor-keys': 8.57.0 - '@typescript-eslint/tsconfig-utils@8.56.1(typescript@6.0.1-rc)': + '@typescript-eslint/tsconfig-utils@8.57.0(typescript@6.0.1-rc)': dependencies: typescript: 6.0.1-rc - '@typescript-eslint/type-utils@8.56.1(eslint@10.0.2(jiti@2.6.1))(typescript@6.0.1-rc)': + '@typescript-eslint/type-utils@8.57.0(eslint@10.0.3(jiti@2.6.1))(typescript@6.0.1-rc)': dependencies: - '@typescript-eslint/types': 8.56.1 - '@typescript-eslint/typescript-estree': 8.56.1(typescript@6.0.1-rc) - '@typescript-eslint/utils': 8.56.1(eslint@10.0.2(jiti@2.6.1))(typescript@6.0.1-rc) + '@typescript-eslint/types': 8.57.0 + '@typescript-eslint/typescript-estree': 8.57.0(typescript@6.0.1-rc) + '@typescript-eslint/utils': 8.57.0(eslint@10.0.3(jiti@2.6.1))(typescript@6.0.1-rc) debug: 4.4.3(supports-color@10.2.2) - eslint: 10.0.2(jiti@2.6.1) + eslint: 10.0.3(jiti@2.6.1) ts-api-utils: 2.4.0(typescript@6.0.1-rc) typescript: 6.0.1-rc transitivePeerDependencies: @@ -11451,12 +11719,14 @@ snapshots: '@typescript-eslint/types@8.56.1': {} - '@typescript-eslint/typescript-estree@8.56.1(typescript@6.0.1-rc)': + '@typescript-eslint/types@8.57.0': {} + + '@typescript-eslint/typescript-estree@8.57.0(typescript@6.0.1-rc)': dependencies: - '@typescript-eslint/project-service': 8.56.1(typescript@6.0.1-rc) - '@typescript-eslint/tsconfig-utils': 8.56.1(typescript@6.0.1-rc) - '@typescript-eslint/types': 8.56.1 - '@typescript-eslint/visitor-keys': 8.56.1 + '@typescript-eslint/project-service': 8.57.0(typescript@6.0.1-rc) + '@typescript-eslint/tsconfig-utils': 8.57.0(typescript@6.0.1-rc) + '@typescript-eslint/types': 8.57.0 + '@typescript-eslint/visitor-keys': 8.57.0 debug: 4.4.3(supports-color@10.2.2) minimatch: 10.2.4 semver: 7.7.4 @@ -11466,40 +11736,40 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.56.1(eslint@10.0.2(jiti@2.6.1))(typescript@6.0.1-rc)': + '@typescript-eslint/utils@8.57.0(eslint@10.0.3(jiti@2.6.1))(typescript@6.0.1-rc)': dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@10.0.2(jiti@2.6.1)) - '@typescript-eslint/scope-manager': 8.56.1 - '@typescript-eslint/types': 8.56.1 - '@typescript-eslint/typescript-estree': 8.56.1(typescript@6.0.1-rc) - eslint: 10.0.2(jiti@2.6.1) + '@eslint-community/eslint-utils': 4.9.1(eslint@10.0.3(jiti@2.6.1)) + '@typescript-eslint/scope-manager': 8.57.0 + '@typescript-eslint/types': 8.57.0 + '@typescript-eslint/typescript-estree': 8.57.0(typescript@6.0.1-rc) + eslint: 10.0.3(jiti@2.6.1) typescript: 6.0.1-rc transitivePeerDependencies: - supports-color - '@typescript-eslint/visitor-keys@8.56.1': + '@typescript-eslint/visitor-keys@8.57.0': dependencies: - '@typescript-eslint/types': 8.56.1 + '@typescript-eslint/types': 8.57.0 eslint-visitor-keys: 5.0.1 - '@verdaccio/auth@8.0.0-next-8.29': + '@verdaccio/auth@8.0.0-next-8.33': dependencies: - '@verdaccio/config': 8.0.0-next-8.29 - '@verdaccio/core': 8.0.0-next-8.29 - '@verdaccio/loaders': 8.0.0-next-8.19 - '@verdaccio/signature': 8.0.0-next-8.21 + '@verdaccio/config': 8.0.0-next-8.33 + '@verdaccio/core': 8.0.0-next-8.33 + '@verdaccio/loaders': 8.0.0-next-8.23 + '@verdaccio/signature': 8.0.0-next-8.25 debug: 4.4.3(supports-color@10.2.2) - lodash: 4.17.21 - verdaccio-htpasswd: 13.0.0-next-8.29 + lodash: 4.17.23 + verdaccio-htpasswd: 13.0.0-next-8.33 transitivePeerDependencies: - supports-color - '@verdaccio/config@8.0.0-next-8.29': + '@verdaccio/config@8.0.0-next-8.33': dependencies: - '@verdaccio/core': 8.0.0-next-8.29 + '@verdaccio/core': 8.0.0-next-8.33 debug: 4.4.3(supports-color@10.2.2) js-yaml: 4.1.1 - lodash: 4.17.21 + lodash: 4.17.23 transitivePeerDependencies: - supports-color @@ -11512,14 +11782,14 @@ snapshots: process-warning: 1.0.0 semver: 7.7.2 - '@verdaccio/core@8.0.0-next-8.29': + '@verdaccio/core@8.0.0-next-8.33': dependencies: - ajv: 8.17.1 - http-errors: 2.0.0 + ajv: 8.18.0 + http-errors: 2.0.1 http-status-codes: 2.3.0 - minimatch: 7.4.6 + minimatch: 7.4.9 process-warning: 1.0.0 - semver: 7.7.3 + semver: 7.7.4 '@verdaccio/file-locking@10.3.1': dependencies: @@ -11529,21 +11799,21 @@ snapshots: dependencies: lockfile: 1.0.4 - '@verdaccio/hooks@8.0.0-next-8.29': + '@verdaccio/hooks@8.0.0-next-8.33': dependencies: - '@verdaccio/core': 8.0.0-next-8.29 - '@verdaccio/logger': 8.0.0-next-8.29 + '@verdaccio/core': 8.0.0-next-8.33 + '@verdaccio/logger': 8.0.0-next-8.33 debug: 4.4.3(supports-color@10.2.2) got-cjs: 12.5.4 handlebars: 4.7.8 transitivePeerDependencies: - supports-color - '@verdaccio/loaders@8.0.0-next-8.19': + '@verdaccio/loaders@8.0.0-next-8.23': dependencies: - '@verdaccio/core': 8.0.0-next-8.29 + '@verdaccio/core': 8.0.0-next-8.33 debug: 4.4.3(supports-color@10.2.2) - lodash: 4.17.21 + lodash: 4.17.23 transitivePeerDependencies: - supports-color @@ -11560,9 +11830,9 @@ snapshots: transitivePeerDependencies: - supports-color - '@verdaccio/logger-commons@8.0.0-next-8.29': + '@verdaccio/logger-commons@8.0.0-next-8.33': dependencies: - '@verdaccio/core': 8.0.0-next-8.29 + '@verdaccio/core': 8.0.0-next-8.33 '@verdaccio/logger-prettify': 8.0.0-next-8.4 colorette: 2.0.20 debug: 4.4.3(supports-color@10.2.2) @@ -11578,32 +11848,32 @@ snapshots: pino-abstract-transport: 1.2.0 sonic-boom: 3.8.1 - '@verdaccio/logger@8.0.0-next-8.29': + '@verdaccio/logger@8.0.0-next-8.33': dependencies: - '@verdaccio/logger-commons': 8.0.0-next-8.29 + '@verdaccio/logger-commons': 8.0.0-next-8.33 pino: 9.14.0 transitivePeerDependencies: - supports-color - '@verdaccio/middleware@8.0.0-next-8.29': + '@verdaccio/middleware@8.0.0-next-8.33': dependencies: - '@verdaccio/config': 8.0.0-next-8.29 - '@verdaccio/core': 8.0.0-next-8.29 - '@verdaccio/url': 13.0.0-next-8.29 + '@verdaccio/config': 8.0.0-next-8.33 + '@verdaccio/core': 8.0.0-next-8.33 + '@verdaccio/url': 13.0.0-next-8.33 debug: 4.4.3(supports-color@10.2.2) express: 4.22.1 express-rate-limit: 5.5.1 - lodash: 4.17.21 + lodash: 4.17.23 lru-cache: 7.18.3 transitivePeerDependencies: - supports-color '@verdaccio/search-indexer@8.0.0-next-8.5': {} - '@verdaccio/signature@8.0.0-next-8.21': + '@verdaccio/signature@8.0.0-next-8.25': dependencies: - '@verdaccio/config': 8.0.0-next-8.29 - '@verdaccio/core': 8.0.0-next-8.29 + '@verdaccio/config': 8.0.0-next-8.33 + '@verdaccio/core': 8.0.0-next-8.33 debug: 4.4.3(supports-color@10.2.2) jsonwebtoken: 9.0.3 transitivePeerDependencies: @@ -11611,10 +11881,10 @@ snapshots: '@verdaccio/streams@10.2.1': {} - '@verdaccio/tarball@13.0.0-next-8.29': + '@verdaccio/tarball@13.0.0-next-8.33': dependencies: - '@verdaccio/core': 8.0.0-next-8.29 - '@verdaccio/url': 13.0.0-next-8.29 + '@verdaccio/core': 8.0.0-next-8.33 + '@verdaccio/url': 13.0.0-next-8.33 debug: 4.4.3(supports-color@10.2.2) gunzip-maybe: 1.4.2 tar-stream: 3.1.7 @@ -11623,77 +11893,79 @@ snapshots: - react-native-b4a - supports-color - '@verdaccio/ui-theme@8.0.0-next-8.29': {} + '@verdaccio/ui-theme@8.0.0-next-8.30': {} - '@verdaccio/url@13.0.0-next-8.29': + '@verdaccio/url@13.0.0-next-8.33': dependencies: - '@verdaccio/core': 8.0.0-next-8.29 + '@verdaccio/core': 8.0.0-next-8.33 debug: 4.4.3(supports-color@10.2.2) validator: 13.15.26 transitivePeerDependencies: - supports-color - '@verdaccio/utils@8.1.0-next-8.29': + '@verdaccio/utils@8.1.0-next-8.33': dependencies: - '@verdaccio/core': 8.0.0-next-8.29 - lodash: 4.17.21 - minimatch: 7.4.6 + '@verdaccio/core': 8.0.0-next-8.33 + lodash: 4.17.23 + minimatch: 7.4.9 - '@vitejs/plugin-basic-ssl@2.1.4(vite@7.3.1(@types/node@24.12.0)(jiti@2.6.1)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))': + '@vitejs/plugin-basic-ssl@2.2.0(vite@7.3.1(@types/node@24.12.0)(jiti@2.6.1)(less@4.6.4)(sass@1.98.0)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))': dependencies: - vite: 7.3.1(@types/node@24.12.0)(jiti@2.6.1)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) + vite: 7.3.1(@types/node@24.12.0)(jiti@2.6.1)(less@4.6.4)(sass@1.98.0)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) - '@vitest/coverage-v8@4.0.18(vitest@4.0.18(@opentelemetry/api@1.9.0)(@types/node@24.12.0)(jiti@2.6.1)(jsdom@28.1.0)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))': + '@vitest/coverage-v8@4.1.0(vitest@4.1.0(@opentelemetry/api@1.9.0)(@types/node@24.12.0)(jiti@2.6.1)(jsdom@28.1.0)(less@4.6.4)(sass@1.98.0)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))': dependencies: '@bcoe/v8-coverage': 1.0.2 - '@vitest/utils': 4.0.18 - ast-v8-to-istanbul: 0.3.12 + '@vitest/utils': 4.1.0 + ast-v8-to-istanbul: 1.0.0 istanbul-lib-coverage: 3.2.2 istanbul-lib-report: 3.0.1 istanbul-reports: 3.2.0 magicast: 0.5.2 obug: 2.1.1 - std-env: 3.10.0 + std-env: 4.0.0 tinyrainbow: 3.0.3 - vitest: 4.0.18(@opentelemetry/api@1.9.0)(@types/node@24.12.0)(jiti@2.6.1)(jsdom@28.1.0)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) + vitest: 4.1.0(@opentelemetry/api@1.9.0)(@types/node@24.12.0)(jiti@2.6.1)(jsdom@28.1.0)(less@4.6.4)(sass@1.98.0)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) - '@vitest/expect@4.0.18': + '@vitest/expect@4.1.0': dependencies: '@standard-schema/spec': 1.1.0 '@types/chai': 5.2.3 - '@vitest/spy': 4.0.18 - '@vitest/utils': 4.0.18 + '@vitest/spy': 4.1.0 + '@vitest/utils': 4.1.0 chai: 6.2.2 tinyrainbow: 3.0.3 - '@vitest/mocker@4.0.18(vite@7.3.1(@types/node@24.12.0)(jiti@2.6.1)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))': + '@vitest/mocker@4.1.0(vite@7.3.1(@types/node@24.12.0)(jiti@2.6.1)(less@4.6.4)(sass@1.98.0)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))': dependencies: - '@vitest/spy': 4.0.18 + '@vitest/spy': 4.1.0 estree-walker: 3.0.3 magic-string: 0.30.21 optionalDependencies: - vite: 7.3.1(@types/node@24.12.0)(jiti@2.6.1)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) + vite: 7.3.1(@types/node@24.12.0)(jiti@2.6.1)(less@4.6.4)(sass@1.98.0)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) - '@vitest/pretty-format@4.0.18': + '@vitest/pretty-format@4.1.0': dependencies: tinyrainbow: 3.0.3 - '@vitest/runner@4.0.18': + '@vitest/runner@4.1.0': dependencies: - '@vitest/utils': 4.0.18 + '@vitest/utils': 4.1.0 pathe: 2.0.3 - '@vitest/snapshot@4.0.18': + '@vitest/snapshot@4.1.0': dependencies: - '@vitest/pretty-format': 4.0.18 + '@vitest/pretty-format': 4.1.0 + '@vitest/utils': 4.1.0 magic-string: 0.30.21 pathe: 2.0.3 - '@vitest/spy@4.0.18': {} + '@vitest/spy@4.1.0': {} - '@vitest/utils@4.0.18': + '@vitest/utils@4.1.0': dependencies: - '@vitest/pretty-format': 4.0.18 + '@vitest/pretty-format': 4.1.0 + convert-source-map: 2.0.0 tinyrainbow: 3.0.3 '@webassemblyjs/ast@1.14.1': @@ -11860,22 +12132,22 @@ snapshots: json-schema-traverse: 1.0.0 require-from-string: 2.0.2 - algoliasearch@5.49.1: - dependencies: - '@algolia/abtesting': 1.15.1 - '@algolia/client-abtesting': 5.49.1 - '@algolia/client-analytics': 5.49.1 - '@algolia/client-common': 5.49.1 - '@algolia/client-insights': 5.49.1 - '@algolia/client-personalization': 5.49.1 - '@algolia/client-query-suggestions': 5.49.1 - '@algolia/client-search': 5.49.1 - '@algolia/ingestion': 1.49.1 - '@algolia/monitoring': 1.49.1 - '@algolia/recommend': 5.49.1 - '@algolia/requester-browser-xhr': 5.49.1 - '@algolia/requester-fetch': 5.49.1 - '@algolia/requester-node-http': 5.49.1 + algoliasearch@5.49.2: + dependencies: + '@algolia/abtesting': 1.15.2 + '@algolia/client-abtesting': 5.49.2 + '@algolia/client-analytics': 5.49.2 + '@algolia/client-common': 5.49.2 + '@algolia/client-insights': 5.49.2 + '@algolia/client-personalization': 5.49.2 + '@algolia/client-query-suggestions': 5.49.2 + '@algolia/client-search': 5.49.2 + '@algolia/ingestion': 1.49.2 + '@algolia/monitoring': 1.49.2 + '@algolia/recommend': 5.49.2 + '@algolia/requester-browser-xhr': 5.49.2 + '@algolia/requester-fetch': 5.49.2 + '@algolia/requester-node-http': 5.49.2 ansi-colors@4.1.3: {} @@ -11980,7 +12252,7 @@ snapshots: dependencies: tslib: 2.8.1 - ast-v8-to-istanbul@0.3.12: + ast-v8-to-istanbul@1.0.0: dependencies: '@jridgewell/trace-mapping': 0.3.31 estree-walker: 3.0.3 @@ -12019,10 +12291,11 @@ snapshots: b4a@1.8.0: {} - babel-loader@10.0.0(@babel/core@7.29.0)(webpack@5.105.4(esbuild@0.27.3)): + babel-loader@10.1.1(@babel/core@7.29.0)(webpack@5.105.4(esbuild@0.27.3)): dependencies: '@babel/core': 7.29.0 find-up: 5.0.0 + optionalDependencies: webpack: 5.105.4(esbuild@0.27.3) babel-plugin-polyfill-corejs2@0.4.16(@babel/core@7.29.0): @@ -12528,6 +12801,10 @@ snapshots: dependencies: is-what: 3.14.1 + copy-anything@3.0.5: + dependencies: + is-what: 4.1.16 + copy-webpack-plugin@14.0.0(webpack@5.105.4(esbuild@0.27.3)): dependencies: glob-parent: 6.0.2 @@ -12885,7 +13162,7 @@ snapshots: env-paths@2.2.1: {} - envinfo@7.15.0: {} + envinfo@7.21.0: {} environment@1.1.0: {} @@ -12961,8 +13238,6 @@ snapshots: es-errors@1.3.0: {} - es-module-lexer@1.7.0: {} - es-module-lexer@2.0.0: {} es-object-atoms@1.1.1: @@ -13031,9 +13306,9 @@ snapshots: optionalDependencies: source-map: 0.6.1 - eslint-config-prettier@10.1.8(eslint@10.0.2(jiti@2.6.1)): + eslint-config-prettier@10.1.8(eslint@10.0.3(jiti@2.6.1)): dependencies: - eslint: 10.0.2(jiti@2.6.1) + eslint: 10.0.3(jiti@2.6.1) eslint-import-resolver-node@0.3.9: dependencies: @@ -13043,17 +13318,17 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-module-utils@2.12.1(@typescript-eslint/parser@8.56.1(eslint@10.0.2(jiti@2.6.1))(typescript@6.0.1-rc))(eslint-import-resolver-node@0.3.9)(eslint@10.0.2(jiti@2.6.1)): + eslint-module-utils@2.12.1(@typescript-eslint/parser@8.57.0(eslint@10.0.3(jiti@2.6.1))(typescript@6.0.1-rc))(eslint-import-resolver-node@0.3.9)(eslint@10.0.3(jiti@2.6.1)): dependencies: debug: 3.2.7 optionalDependencies: - '@typescript-eslint/parser': 8.56.1(eslint@10.0.2(jiti@2.6.1))(typescript@6.0.1-rc) - eslint: 10.0.2(jiti@2.6.1) + '@typescript-eslint/parser': 8.57.0(eslint@10.0.3(jiti@2.6.1))(typescript@6.0.1-rc) + eslint: 10.0.3(jiti@2.6.1) eslint-import-resolver-node: 0.3.9 transitivePeerDependencies: - supports-color - eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.56.1(eslint@10.0.2(jiti@2.6.1))(typescript@6.0.1-rc))(eslint@10.0.2(jiti@2.6.1)): + eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.57.0(eslint@10.0.3(jiti@2.6.1))(typescript@6.0.1-rc))(eslint@10.0.3(jiti@2.6.1)): dependencies: '@rtsao/scc': 1.1.0 array-includes: 3.1.9 @@ -13062,9 +13337,9 @@ snapshots: array.prototype.flatmap: 1.3.3 debug: 3.2.7 doctrine: 2.1.0 - eslint: 10.0.2(jiti@2.6.1) + eslint: 10.0.3(jiti@2.6.1) eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.56.1(eslint@10.0.2(jiti@2.6.1))(typescript@6.0.1-rc))(eslint-import-resolver-node@0.3.9)(eslint@10.0.2(jiti@2.6.1)) + eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.57.0(eslint@10.0.3(jiti@2.6.1))(typescript@6.0.1-rc))(eslint-import-resolver-node@0.3.9)(eslint@10.0.3(jiti@2.6.1)) hasown: 2.0.2 is-core-module: 2.16.1 is-glob: 4.0.3 @@ -13076,7 +13351,7 @@ snapshots: string.prototype.trimend: 1.0.9 tsconfig-paths: 3.15.0 optionalDependencies: - '@typescript-eslint/parser': 8.56.1(eslint@10.0.2(jiti@2.6.1))(typescript@6.0.1-rc) + '@typescript-eslint/parser': 8.57.0(eslint@10.0.3(jiti@2.6.1))(typescript@6.0.1-rc) transitivePeerDependencies: - eslint-import-resolver-typescript - eslint-import-resolver-webpack @@ -13100,9 +13375,9 @@ snapshots: eslint-visitor-keys@5.0.1: {} - eslint@10.0.2(jiti@2.6.1): + eslint@10.0.3(jiti@2.6.1): dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@10.0.2(jiti@2.6.1)) + '@eslint-community/eslint-utils': 4.9.1(eslint@10.0.3(jiti@2.6.1)) '@eslint-community/regexpp': 4.12.2 '@eslint/config-array': 0.23.3 '@eslint/config-helpers': 0.5.3 @@ -14132,6 +14407,8 @@ snapshots: is-what@3.14.1: {} + is-what@4.1.16: {} + is-wsl@1.1.0: {} is-wsl@3.1.1: @@ -14417,9 +14694,9 @@ snapshots: picocolors: 1.1.1 shell-quote: 1.8.3 - less-loader@12.3.1(less@4.4.2)(webpack@5.105.4(esbuild@0.27.3)): + less-loader@12.3.2(less@4.6.4)(webpack@5.105.4(esbuild@0.27.3)): dependencies: - less: 4.4.2 + less: 4.6.4 optionalDependencies: webpack: 5.105.4(esbuild@0.27.3) @@ -14437,6 +14714,19 @@ snapshots: needle: 3.3.1 source-map: 0.6.1 + less@4.6.4: + dependencies: + copy-anything: 3.0.5 + parse-node-version: 1.0.1 + optionalDependencies: + errno: 0.1.8 + graceful-fs: 4.2.11 + image-size: 0.5.5 + make-dir: 2.1.0 + mime: 1.6.0 + needle: 3.3.1 + source-map: 0.6.1 + levn@0.4.1: dependencies: prelude-ls: 1.2.1 @@ -14460,7 +14750,7 @@ snapshots: rfdc: 1.4.1 wrap-ansi: 10.0.0 - lmdb@3.5.1: + lmdb@3.5.2: dependencies: '@harperfast/extended-iterable': 1.0.3 msgpackr: 1.11.8 @@ -14469,13 +14759,13 @@ snapshots: ordered-binary: 1.6.1 weak-lru-cache: 1.2.2 optionalDependencies: - '@lmdb/lmdb-darwin-arm64': 3.5.1 - '@lmdb/lmdb-darwin-x64': 3.5.1 - '@lmdb/lmdb-linux-arm': 3.5.1 - '@lmdb/lmdb-linux-arm64': 3.5.1 - '@lmdb/lmdb-linux-x64': 3.5.1 - '@lmdb/lmdb-win32-arm64': 3.5.1 - '@lmdb/lmdb-win32-x64': 3.5.1 + '@lmdb/lmdb-darwin-arm64': 3.5.2 + '@lmdb/lmdb-darwin-x64': 3.5.2 + '@lmdb/lmdb-linux-arm': 3.5.2 + '@lmdb/lmdb-linux-arm64': 3.5.2 + '@lmdb/lmdb-linux-x64': 3.5.2 + '@lmdb/lmdb-win32-arm64': 3.5.2 + '@lmdb/lmdb-win32-x64': 3.5.2 optional: true loader-runner@4.3.1: {} @@ -14669,7 +14959,7 @@ snapshots: mimic-response@3.1.0: {} - mini-css-extract-plugin@2.10.0(webpack@5.105.4(esbuild@0.27.3)): + mini-css-extract-plugin@2.10.1(webpack@5.105.4(esbuild@0.27.3)): dependencies: schema-utils: 4.3.3 tapable: 2.3.0 @@ -15108,7 +15398,7 @@ snapshots: package-json-from-dist@1.0.1: {} - pacote@21.4.0: + pacote@21.5.0: dependencies: '@gar/promise-retry': 1.0.2 '@npmcli/git': 7.0.2 @@ -15401,7 +15691,7 @@ snapshots: punycode@2.3.1: {} - puppeteer-core@24.38.0(bufferutil@4.1.0)(utf-8-validate@6.0.6): + puppeteer-core@24.39.1(bufferutil@4.1.0)(utf-8-validate@6.0.6): dependencies: '@puppeteer/browsers': 2.13.0 chromium-bidi: 14.0.0(devtools-protocol@0.0.1581282) @@ -15418,13 +15708,13 @@ snapshots: - supports-color - utf-8-validate - puppeteer@24.38.0(bufferutil@4.1.0)(typescript@6.0.1-rc)(utf-8-validate@6.0.6): + puppeteer@24.39.1(bufferutil@4.1.0)(typescript@6.0.1-rc)(utf-8-validate@6.0.6): dependencies: '@puppeteer/browsers': 2.13.0 chromium-bidi: 14.0.0(devtools-protocol@0.0.1581282) cosmiconfig: 9.0.1(typescript@6.0.1-rc) devtools-protocol: 0.0.1581282 - puppeteer-core: 24.38.0(bufferutil@4.1.0)(utf-8-validate@6.0.6) + puppeteer-core: 24.39.1(bufferutil@4.1.0)(utf-8-validate@6.0.6) typed-query-selector: 2.12.1 transitivePeerDependencies: - bare-abort-controller @@ -15644,28 +15934,28 @@ snapshots: dependencies: glob: 10.5.0 - rolldown@1.0.0-rc.7: + rolldown@1.0.0-rc.9: dependencies: '@oxc-project/types': 0.115.0 - '@rolldown/pluginutils': 1.0.0-rc.7 + '@rolldown/pluginutils': 1.0.0-rc.9 optionalDependencies: - '@rolldown/binding-android-arm64': 1.0.0-rc.7 - '@rolldown/binding-darwin-arm64': 1.0.0-rc.7 - '@rolldown/binding-darwin-x64': 1.0.0-rc.7 - '@rolldown/binding-freebsd-x64': 1.0.0-rc.7 - '@rolldown/binding-linux-arm-gnueabihf': 1.0.0-rc.7 - '@rolldown/binding-linux-arm64-gnu': 1.0.0-rc.7 - '@rolldown/binding-linux-arm64-musl': 1.0.0-rc.7 - '@rolldown/binding-linux-ppc64-gnu': 1.0.0-rc.7 - '@rolldown/binding-linux-s390x-gnu': 1.0.0-rc.7 - '@rolldown/binding-linux-x64-gnu': 1.0.0-rc.7 - '@rolldown/binding-linux-x64-musl': 1.0.0-rc.7 - '@rolldown/binding-openharmony-arm64': 1.0.0-rc.7 - '@rolldown/binding-wasm32-wasi': 1.0.0-rc.7 - '@rolldown/binding-win32-arm64-msvc': 1.0.0-rc.7 - '@rolldown/binding-win32-x64-msvc': 1.0.0-rc.7 - - rollup-license-plugin@3.1.0: + '@rolldown/binding-android-arm64': 1.0.0-rc.9 + '@rolldown/binding-darwin-arm64': 1.0.0-rc.9 + '@rolldown/binding-darwin-x64': 1.0.0-rc.9 + '@rolldown/binding-freebsd-x64': 1.0.0-rc.9 + '@rolldown/binding-linux-arm-gnueabihf': 1.0.0-rc.9 + '@rolldown/binding-linux-arm64-gnu': 1.0.0-rc.9 + '@rolldown/binding-linux-arm64-musl': 1.0.0-rc.9 + '@rolldown/binding-linux-ppc64-gnu': 1.0.0-rc.9 + '@rolldown/binding-linux-s390x-gnu': 1.0.0-rc.9 + '@rolldown/binding-linux-x64-gnu': 1.0.0-rc.9 + '@rolldown/binding-linux-x64-musl': 1.0.0-rc.9 + '@rolldown/binding-openharmony-arm64': 1.0.0-rc.9 + '@rolldown/binding-wasm32-wasi': 1.0.0-rc.9 + '@rolldown/binding-win32-arm64-msvc': 1.0.0-rc.9 + '@rolldown/binding-win32-x64-msvc': 1.0.0-rc.9 + + rollup-license-plugin@3.2.1: dependencies: get-npm-tarball-url: 2.1.0 node-fetch: 3.3.2 @@ -15680,6 +15970,17 @@ snapshots: optionalDependencies: '@babel/code-frame': 7.29.0 + rollup-plugin-dts@6.4.0(rollup@4.59.0)(typescript@6.0.1-rc): + dependencies: + '@jridgewell/remapping': 2.3.5 + '@jridgewell/sourcemap-codec': 1.5.5 + convert-source-map: 2.0.0 + magic-string: 0.30.21 + rollup: 4.59.0 + typescript: 6.0.1-rc + optionalDependencies: + '@babel/code-frame': 7.29.0 + rollup-plugin-sourcemaps2@0.5.6(@types/node@22.19.15)(rollup@4.59.0): dependencies: '@rollup/pluginutils': 5.3.0(rollup@4.59.0) @@ -15767,11 +16068,11 @@ snapshots: safer-buffer@2.1.2: {} - sass-loader@16.0.7(sass@1.97.3)(webpack@5.105.4(esbuild@0.27.3)): + sass-loader@16.0.7(sass@1.98.0)(webpack@5.105.4(esbuild@0.27.3)): dependencies: neo-async: 2.6.2 optionalDependencies: - sass: 1.97.3 + sass: 1.98.0 webpack: 5.105.4(esbuild@0.27.3) sass@1.97.3: @@ -15782,6 +16083,14 @@ snapshots: optionalDependencies: '@parcel/watcher': 2.5.6 + sass@1.98.0: + dependencies: + chokidar: 4.0.3 + immutable: 5.1.5 + source-map-js: 1.2.1 + optionalDependencies: + '@parcel/watcher': 2.5.6 + sax@1.5.0: optional: true @@ -15810,8 +16119,6 @@ snapshots: semver@7.7.2: {} - semver@7.7.3: {} - semver@7.7.4: {} send@0.19.2: @@ -16142,7 +16449,7 @@ snapshots: statuses@2.0.2: {} - std-env@3.10.0: {} + std-env@4.0.0: {} stdin-discarder@0.3.1: {} @@ -16544,6 +16851,8 @@ snapshots: undici@7.22.0: {} + undici@7.24.4: {} + unenv@1.10.0: dependencies: consola: 3.4.2 @@ -16619,10 +16928,10 @@ snapshots: vary@1.1.2: {} - verdaccio-audit@13.0.0-next-8.29(encoding@0.1.13): + verdaccio-audit@13.0.0-next-8.33(encoding@0.1.13): dependencies: - '@verdaccio/config': 8.0.0-next-8.29 - '@verdaccio/core': 8.0.0-next-8.29 + '@verdaccio/config': 8.0.0-next-8.33 + '@verdaccio/core': 8.0.0-next-8.33 express: 4.22.1 https-proxy-agent: 5.0.1(supports-color@10.2.2) node-fetch: 2.6.7(encoding@0.1.13) @@ -16637,50 +16946,50 @@ snapshots: transitivePeerDependencies: - supports-color - verdaccio-htpasswd@13.0.0-next-8.29: + verdaccio-htpasswd@13.0.0-next-8.33: dependencies: - '@verdaccio/core': 8.0.0-next-8.29 + '@verdaccio/core': 8.0.0-next-8.33 '@verdaccio/file-locking': 13.0.0-next-8.6 apache-md5: 1.1.8 bcryptjs: 2.4.3 debug: 4.4.3(supports-color@10.2.2) - http-errors: 2.0.0 + http-errors: 2.0.1 unix-crypt-td-js: 1.1.4 transitivePeerDependencies: - supports-color - verdaccio@6.2.9(encoding@0.1.13): + verdaccio@6.3.2(encoding@0.1.13): dependencies: '@cypress/request': 3.0.10 - '@verdaccio/auth': 8.0.0-next-8.29 - '@verdaccio/config': 8.0.0-next-8.29 - '@verdaccio/core': 8.0.0-next-8.29 - '@verdaccio/hooks': 8.0.0-next-8.29 - '@verdaccio/loaders': 8.0.0-next-8.19 + '@verdaccio/auth': 8.0.0-next-8.33 + '@verdaccio/config': 8.0.0-next-8.33 + '@verdaccio/core': 8.0.0-next-8.33 + '@verdaccio/hooks': 8.0.0-next-8.33 + '@verdaccio/loaders': 8.0.0-next-8.23 '@verdaccio/local-storage-legacy': 11.1.1 - '@verdaccio/logger': 8.0.0-next-8.29 - '@verdaccio/middleware': 8.0.0-next-8.29 + '@verdaccio/logger': 8.0.0-next-8.33 + '@verdaccio/middleware': 8.0.0-next-8.33 '@verdaccio/search-indexer': 8.0.0-next-8.5 - '@verdaccio/signature': 8.0.0-next-8.21 + '@verdaccio/signature': 8.0.0-next-8.25 '@verdaccio/streams': 10.2.1 - '@verdaccio/tarball': 13.0.0-next-8.29 - '@verdaccio/ui-theme': 8.0.0-next-8.29 - '@verdaccio/url': 13.0.0-next-8.29 - '@verdaccio/utils': 8.1.0-next-8.29 + '@verdaccio/tarball': 13.0.0-next-8.33 + '@verdaccio/ui-theme': 8.0.0-next-8.30 + '@verdaccio/url': 13.0.0-next-8.33 + '@verdaccio/utils': 8.1.0-next-8.33 JSONStream: 1.3.5 async: 3.2.6 clipanion: 4.0.0-rc.4 compression: 1.8.1 cors: 2.8.6 debug: 4.4.3(supports-color@10.2.2) - envinfo: 7.15.0 + envinfo: 7.21.0 express: 4.22.1 lodash: 4.17.23 lru-cache: 7.18.3 mime: 3.0.0 semver: 7.7.4 - verdaccio-audit: 13.0.0-next-8.29(encoding@0.1.13) - verdaccio-htpasswd: 13.0.0-next-8.29 + verdaccio-audit: 13.0.0-next-8.33(encoding@0.1.13) + verdaccio-htpasswd: 13.0.0-next-8.33 transitivePeerDependencies: - bare-abort-controller - encoding @@ -16693,7 +17002,7 @@ snapshots: core-util-is: 1.0.2 extsprintf: 1.3.0 - vite@7.3.1(@types/node@24.12.0)(jiti@2.6.1)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2): + vite@7.3.1(@types/node@24.12.0)(jiti@2.6.1)(less@4.6.4)(sass@1.98.0)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2): dependencies: esbuild: 0.27.3 fdir: 6.5.0(picomatch@4.0.3) @@ -16705,33 +17014,33 @@ snapshots: '@types/node': 24.12.0 fsevents: 2.3.3 jiti: 2.6.1 - less: 4.4.2 - sass: 1.97.3 + less: 4.6.4 + sass: 1.98.0 terser: 5.46.0 tsx: 4.21.0 yaml: 2.8.2 - vitest@4.0.18(@opentelemetry/api@1.9.0)(@types/node@24.12.0)(jiti@2.6.1)(jsdom@28.1.0)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2): + vitest@4.1.0(@opentelemetry/api@1.9.0)(@types/node@24.12.0)(jiti@2.6.1)(jsdom@28.1.0)(less@4.6.4)(sass@1.98.0)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2): dependencies: - '@vitest/expect': 4.0.18 - '@vitest/mocker': 4.0.18(vite@7.3.1(@types/node@24.12.0)(jiti@2.6.1)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)) - '@vitest/pretty-format': 4.0.18 - '@vitest/runner': 4.0.18 - '@vitest/snapshot': 4.0.18 - '@vitest/spy': 4.0.18 - '@vitest/utils': 4.0.18 - es-module-lexer: 1.7.0 + '@vitest/expect': 4.1.0 + '@vitest/mocker': 4.1.0(vite@7.3.1(@types/node@24.12.0)(jiti@2.6.1)(less@4.6.4)(sass@1.98.0)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)) + '@vitest/pretty-format': 4.1.0 + '@vitest/runner': 4.1.0 + '@vitest/snapshot': 4.1.0 + '@vitest/spy': 4.1.0 + '@vitest/utils': 4.1.0 + es-module-lexer: 2.0.0 expect-type: 1.3.0 magic-string: 0.30.21 obug: 2.1.1 pathe: 2.0.3 picomatch: 4.0.3 - std-env: 3.10.0 + std-env: 4.0.0 tinybench: 2.9.0 tinyexec: 1.0.2 tinyglobby: 0.2.15 tinyrainbow: 3.0.3 - vite: 7.3.1(@types/node@24.12.0)(jiti@2.6.1)(less@4.4.2)(sass@1.97.3)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) + vite: 7.3.1(@types/node@24.12.0)(jiti@2.6.1)(less@4.6.4)(sass@1.98.0)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) why-is-node-running: 2.3.0 optionalDependencies: '@opentelemetry/api': 1.9.0 From c9f07db8fcb0b3f8400fbbf0e131be7f9857a987 Mon Sep 17 00:00:00 2001 From: Alan Agius <17563226+alan-agius4@users.noreply.github.com> Date: Tue, 17 Mar 2026 11:21:43 +0000 Subject: [PATCH 146/226] fix(@angular/cli): use parsed package name for migrate-only updates This change updates the update command to use the parsed package name from `npm-package-arg` instead of the raw input string when performing a 'migrate-only' update. This ensures that package identifiers are correctly and consistently handled. --- packages/angular/cli/src/commands/update/cli.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/angular/cli/src/commands/update/cli.ts b/packages/angular/cli/src/commands/update/cli.ts index 0a85f9b77ecc..de6d7f53fea0 100644 --- a/packages/angular/cli/src/commands/update/cli.ts +++ b/packages/angular/cli/src/commands/update/cli.ts @@ -265,7 +265,7 @@ export default class UpdateCommandModule extends CommandModule<UpdateCommandArgs return options.migrateOnly ? this.migrateOnly( workflow, - (options.packages ?? [])[0], + packages[0].name as string, rootDependencies, options, packageManager, From 7982e262b76651a790d9d6392f5efa2e836ab6f4 Mon Sep 17 00:00:00 2001 From: Angular Robot <angular-robot@google.com> Date: Tue, 17 Mar 2026 16:35:32 +0000 Subject: [PATCH 147/226] build: lock file maintenance See associated pull request for more information. --- pnpm-lock.yaml | 553 +++++++++++++------------------------------------ 1 file changed, 145 insertions(+), 408 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 77fdde1c8925..aaa74bfbed26 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1616,8 +1616,13 @@ packages: peerDependencies: '@csstools/css-tokenizer': ^4.0.0 - '@csstools/css-syntax-patches-for-csstree@1.1.0': - resolution: {integrity: sha512-H4tuz2nhWgNKLt1inYpoVCfbJbMwX/lQKp3g69rrrIMIYlFD9+zTykOKhNR8uGrAmbS/kT9n6hTFkmDkxLgeTA==} + '@csstools/css-syntax-patches-for-csstree@1.1.1': + resolution: {integrity: sha512-BvqN0AMWNAnLk9G8jnUT77D+mUbY/H2b3uDTvg2isJkHaOufUE2R3AOwxWo7VBQKT1lOdwdvorddo2B/lk64+w==} + peerDependencies: + css-tree: ^3.2.1 + peerDependenciesMeta: + css-tree: + optional: true '@csstools/css-tokenizer@4.0.0': resolution: {integrity: sha512-QxULHAm7cNu72w97JUNCBFODFaXpbDg+dP8b/oWFAZ2MTRppA3U00Y2L1HqaS4J6yBqxwa/Y3nMBaxVKbB/NsA==} @@ -1631,14 +1636,14 @@ packages: resolution: {integrity: sha512-dDlz3W405VMFO4w5kIP9DOmELBcvFQGmLoKSdIRstBDubKFYwaNHV1NnlzMCQpXQFGWVALmeMORAuiLx18AvZQ==} engines: {node: '>=14.17.0'} - '@emnapi/core@1.8.1': - resolution: {integrity: sha512-AvT9QFpxK0Zd8J0jopedNm+w/2fIzvtPKPjqyw9jwvBaReTTqPBk9Hixaz7KbjimP+QNz605/XnjFcDAL2pqBg==} + '@emnapi/core@1.9.0': + resolution: {integrity: sha512-0DQ98G9ZQZOxfUcQn1waV2yS8aWdZ6kJMbYCJB3oUBecjWYO1fqJ+a1DRfPF3O5JEkwqwP1A9QEN/9mYm2Yd0w==} - '@emnapi/runtime@1.8.1': - resolution: {integrity: sha512-mehfKSMWjjNol8659Z8KxEMrdSJDDot5SXMq00dM8BN4o+CLNXQ0xH2V7EchNHV4RmbZLmmPdEaXZc5H2FXmDg==} + '@emnapi/runtime@1.9.0': + resolution: {integrity: sha512-QN75eB0IH2ywSpRpNddCRfQIhmJYBCJ1x5Lb3IscKAL8bMnVAKnRg8dCoXbHzVLLH7P38N2Z3mtulB7W0J0FKw==} - '@emnapi/wasi-threads@1.1.0': - resolution: {integrity: sha512-WI0DdZ8xFSbgMjR1sFsKABJ/C5OnRrjT06JXbZKexJGrDuPTzZdDYfFlsgcCXCyf+suG5QU2e/y1Wo2V/OapLQ==} + '@emnapi/wasi-threads@1.2.0': + resolution: {integrity: sha512-N10dEJNSsUx41Z6pZsXU8FjPjpBEplgH24sfkmITrBED1/U2Esum9F3lfLrMjKHHjmi557zQn7kR9R+XWXu5Rg==} '@esbuild/aix-ppc64@0.27.3': resolution: {integrity: sha512-9fJMTNFTWZMh5qwrBItuziu834eOCUcEqymSH7pY+zoMVEZg3gcPuBNxH1EvfVYe9h0x/Ptw8KBzv7qxb7l8dg==} @@ -2154,23 +2159,10 @@ packages: resolution: {integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==} engines: {node: '>=18.18'} - '@inquirer/ansi@2.0.3': - resolution: {integrity: sha512-g44zhR3NIKVs0zUesa4iMzExmZpLUdTLRMCStqX3GE5NT6VkPcxQGJ+uC8tDgBUC/vB1rUhUd55cOf++4NZcmw==} - engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} - '@inquirer/ansi@2.0.4': resolution: {integrity: sha512-DpcZrQObd7S0R/U3bFdkcT5ebRwbTTC4D3tCc1vsJizmgPLxNJBo+AAFmrZwe8zk30P2QzgzGWZ3Q9uJwWuhIg==} engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} - '@inquirer/checkbox@5.1.0': - resolution: {integrity: sha512-/HjF1LN0a1h4/OFsbGKHNDtWICFU/dqXCdym719HFTyJo9IG7Otr+ziGWc9S0iQuohRZllh+WprSgd5UW5Fw0g==} - engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} - peerDependencies: - '@types/node': '>=18' - peerDependenciesMeta: - '@types/node': - optional: true - '@inquirer/checkbox@5.1.2': resolution: {integrity: sha512-PubpMPO2nJgMufkoB3P2wwxNXEMUXnBIKi/ACzDUYfaoPuM7gSTmuxJeMscoLVEsR4qqrCMf5p0SiYGWnVJ8kw==} engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} @@ -2189,15 +2181,6 @@ packages: '@types/node': optional: true - '@inquirer/core@11.1.5': - resolution: {integrity: sha512-QQPAX+lka8GyLcZ7u7Nb1h6q72iZ/oy0blilC3IB2nSt1Qqxp7akt94Jqhi/DzARuN3Eo9QwJRvtl4tmVe4T5A==} - engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} - peerDependencies: - '@types/node': '>=18' - peerDependenciesMeta: - '@types/node': - optional: true - '@inquirer/core@11.1.7': resolution: {integrity: sha512-1BiBNDk9btIwYIzNZpkikIHXWeNzNncJePPqwDyVMhXhD1ebqbpn1mKGctpoqAbzywZfdG0O4tvmsGIcOevAPQ==} engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} @@ -2216,15 +2199,6 @@ packages: '@types/node': optional: true - '@inquirer/editor@5.0.8': - resolution: {integrity: sha512-sLcpbb9B3XqUEGrj1N66KwhDhEckzZ4nI/W6SvLXyBX8Wic3LDLENlWRvkOGpCPoserabe+MxQkpiMoI8irvyA==} - engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} - peerDependencies: - '@types/node': '>=18' - peerDependenciesMeta: - '@types/node': - optional: true - '@inquirer/expand@5.0.10': resolution: {integrity: sha512-fC0UHJPXsTRvY2fObiwuQYaAnHrp3aDqfwKUJSdfpgv18QUG054ezGbaRNStk/BKD5IPijeMKWej8VV8O5Q/eQ==} engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} @@ -2234,24 +2208,6 @@ packages: '@types/node': optional: true - '@inquirer/expand@5.0.8': - resolution: {integrity: sha512-QieW3F1prNw3j+hxO7/NKkG1pk3oz7pOB6+5Upwu3OIwADfPX0oZVppsqlL+Vl/uBHHDSOBY0BirLctLnXwGGg==} - engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} - peerDependencies: - '@types/node': '>=18' - peerDependenciesMeta: - '@types/node': - optional: true - - '@inquirer/external-editor@2.0.3': - resolution: {integrity: sha512-LgyI7Agbda74/cL5MvA88iDpvdXI2KuMBCGRkbCl2Dg1vzHeOgs+s0SDcXV7b+WZJrv2+ERpWSM65Fpi9VfY3w==} - engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} - peerDependencies: - '@types/node': '>=18' - peerDependenciesMeta: - '@types/node': - optional: true - '@inquirer/external-editor@2.0.4': resolution: {integrity: sha512-Prenuv9C1PHj2Itx0BcAOVBTonz02Hc2Nd2DbU67PdGUaqn0nPCnV34oDyyoaZHnmfRxkpuhh/u51ThkrO+RdA==} engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} @@ -2261,10 +2217,6 @@ packages: '@types/node': optional: true - '@inquirer/figures@2.0.3': - resolution: {integrity: sha512-y09iGt3JKoOCBQ3w4YrSJdokcD8ciSlMIWsD+auPu+OZpfxLuyz+gICAQ6GCBOmJJt4KEQGHuZSVff2jiNOy7g==} - engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} - '@inquirer/figures@2.0.4': resolution: {integrity: sha512-eLBsjlS7rPS3WEhmOmh1znQ5IsQrxWzxWDxO51e4urv+iVrSnIHbq4zqJIOiyNdYLa+BVjwOtdetcQx1lWPpiQ==} engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} @@ -2278,15 +2230,6 @@ packages: '@types/node': optional: true - '@inquirer/input@5.0.8': - resolution: {integrity: sha512-p0IJslw0AmedLEkOU+yrEX3Aj2RTpQq7ZOf8nc1DIhjzaxRWrrgeuE5Kyh39fVRgtcACaMXx/9WNo8+GjgBOfw==} - engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} - peerDependencies: - '@types/node': '>=18' - peerDependenciesMeta: - '@types/node': - optional: true - '@inquirer/number@4.0.10': resolution: {integrity: sha512-Ht8OQstxiS3APMGjHV0aYAjRAysidWdwurWEo2i8yI5xbhOBWqizT0+MU1S2GCcuhIBg+3SgWVjEoXgfhY+XaA==} engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} @@ -2296,15 +2239,6 @@ packages: '@types/node': optional: true - '@inquirer/number@4.0.8': - resolution: {integrity: sha512-uGLiQah9A0F9UIvJBX52m0CnqtLaym0WpT9V4YZrjZ+YRDKZdwwoEPz06N6w8ChE2lrnsdyhY9sL+Y690Kh9gQ==} - engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} - peerDependencies: - '@types/node': '>=18' - peerDependenciesMeta: - '@types/node': - optional: true - '@inquirer/password@5.0.10': resolution: {integrity: sha512-QbNyvIE8q2GTqKLYSsA8ATG+eETo+m31DSR0+AU7x3d2FhaTWzqQek80dj3JGTo743kQc6mhBR0erMjYw5jQ0A==} engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} @@ -2314,15 +2248,6 @@ packages: '@types/node': optional: true - '@inquirer/password@5.0.8': - resolution: {integrity: sha512-zt1sF4lYLdvPqvmvHdmjOzuUUjuCQ897pdUCO8RbXMUDKXJTTyOQgtn23le+jwcb+MpHl3VAFvzIdxRAf6aPlA==} - engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} - peerDependencies: - '@types/node': '>=18' - peerDependenciesMeta: - '@types/node': - optional: true - '@inquirer/prompts@8.3.0': resolution: {integrity: sha512-JAj66kjdH/F1+B7LCigjARbwstt3SNUOSzMdjpsvwJmzunK88gJeXmcm95L9nw1KynvFVuY4SzXh/3Y0lvtgSg==} engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} @@ -2341,15 +2266,6 @@ packages: '@types/node': optional: true - '@inquirer/rawlist@5.2.4': - resolution: {integrity: sha512-fTuJ5Cq9W286isLxwj6GGyfTjx1Zdk4qppVEPexFuA6yioCCXS4V1zfKroQqw7QdbDPN73xs2DiIAlo55+kBqg==} - engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} - peerDependencies: - '@types/node': '>=18' - peerDependenciesMeta: - '@types/node': - optional: true - '@inquirer/rawlist@5.2.6': resolution: {integrity: sha512-jfw0MLJ5TilNsa9zlJ6nmRM0ZFVZhhTICt4/6CU2Dv1ndY7l3sqqo1gIYZyMMDw0LvE1u1nzJNisfHEhJIxq5w==} engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} @@ -2359,15 +2275,6 @@ packages: '@types/node': optional: true - '@inquirer/search@4.1.4': - resolution: {integrity: sha512-9yPTxq7LPmYjrGn3DRuaPuPbmC6u3fiWcsE9ggfLcdgO/ICHYgxq7mEy1yJ39brVvgXhtOtvDVjDh9slJxE4LQ==} - engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} - peerDependencies: - '@types/node': '>=18' - peerDependenciesMeta: - '@types/node': - optional: true - '@inquirer/search@4.1.6': resolution: {integrity: sha512-3/6kTRae98hhDevENScy7cdFEuURnSpM3JbBNg8yfXLw88HgTOl+neUuy/l9W0No5NzGsLVydhBzTIxZP7yChQ==} engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} @@ -2377,15 +2284,6 @@ packages: '@types/node': optional: true - '@inquirer/select@5.1.0': - resolution: {integrity: sha512-OyYbKnchS1u+zRe14LpYrN8S0wH1vD0p2yKISvSsJdH2TpI87fh4eZdWnpdbrGauCRWDph3NwxRmM4Pcm/hx1Q==} - engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} - peerDependencies: - '@types/node': '>=18' - peerDependenciesMeta: - '@types/node': - optional: true - '@inquirer/select@5.1.2': resolution: {integrity: sha512-kTK8YIkHV+f02y7bWCh7E0u2/11lul5WepVTclr3UMBtBr05PgcZNWfMa7FY57ihpQFQH/spLMHTcr0rXy50tA==} engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} @@ -3747,10 +3645,6 @@ packages: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/types@8.56.1': - resolution: {integrity: sha512-dbMkdIUkIkchgGDIv7KLUpa0Mda4IYjo4IAMJUZ+3xNoUXxMsk9YtKpTHSChRS85o+H9ftm51gsK1dZReY9CVw==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/types@8.57.0': resolution: {integrity: sha512-dTLI8PEXhjUC7B9Kre+u0XznO696BhXcTlOn0/6kf1fHaQW8+VjJAVHJ3eTI14ZapTxdkOmc80HblPQLaEeJdg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -4238,15 +4132,15 @@ packages: bare-buffer: optional: true - bare-os@3.7.1: - resolution: {integrity: sha512-ebvMaS5BgZKmJlvuWh14dg9rbUI84QeV3WlWn6Ph6lFI8jJoh7ADtVTyD2c93euwbe+zgi0DVrl4YmqXeM9aIA==} + bare-os@3.8.0: + resolution: {integrity: sha512-Dc9/SlwfxkXIGYhvMQNUtKaXCaGkZYGcd1vuNUUADVqzu4/vQfvnMkYYOUnt2VwQ2AqKr/8qAVFRtwETljgeFg==} engines: {bare: '>=1.14.0'} bare-path@3.0.0: resolution: {integrity: sha512-tyfW2cQcB5NN8Saijrhqn0Zh7AnFNsnczRcuWODH0eYAXBsJ5gVxAUuNr7tsHSC6IZ77cA0SitzT+s47kot8Mw==} - bare-stream@2.8.0: - resolution: {integrity: sha512-reUN0M2sHRqCdG4lUK3Fw8w98eeUIZHL5c3H7Mbhk2yVBL+oofgaIp0ieLfD5QXwPCypBpmEEKU2WZKzbAk8GA==} + bare-stream@2.8.1: + resolution: {integrity: sha512-bSeR8RfvbRwDpD7HWZvn8M3uYNDrk7m9DQjYOFkENZlXW8Ju/MPaqUPQq5LqJ3kyjEm07siTaAQ7wBKCU59oHg==} peerDependencies: bare-buffer: '*' bare-events: '*' @@ -4266,8 +4160,8 @@ packages: resolution: {integrity: sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==} engines: {node: ^4.5.0 || >= 5.9} - baseline-browser-mapping@2.10.0: - resolution: {integrity: sha512-lIyg0szRfYbiy67j9KN8IyeD7q7hcmqnJ1ddWmNt19ItGpNN64mnllmxUNFIOdOm6by97jlL6wfpTTJrmnjWAA==} + baseline-browser-mapping@2.10.8: + resolution: {integrity: sha512-PCLz/LXGBsNTErbtB6i5u4eLpHeMfi93aUv5duMmj6caNu6IphS4q6UevDnL36sZQv9lrP11dbPKGMaXPwMKfQ==} engines: {node: '>=6.0.0'} hasBin: true @@ -4417,8 +4311,8 @@ packages: resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} engines: {node: '>=6'} - caniuse-lite@1.0.30001777: - resolution: {integrity: sha512-tmN+fJxroPndC74efCdp12j+0rk0RHwV5Jwa1zWaFVyw2ZxAuPeG8ZgWC3Wz7uSjT3qMRQ5XHZ4COgQmsCMJAQ==} + caniuse-lite@1.0.30001779: + resolution: {integrity: sha512-U5og2PN7V4DMgF50YPNtnZJGWVLFjjsN3zb6uMT5VGYIewieDj1upwfuVNXf4Kor+89c3iCRJnSzMD5LmTvsfA==} caseless@0.12.0: resolution: {integrity: sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==} @@ -4610,9 +4504,6 @@ packages: resolution: {integrity: sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==} engines: {node: '>= 0.6'} - copy-anything@2.0.6: - resolution: {integrity: sha512-1j20GZTsvKNkc4BY3NpMOM8tt///wY3FpIzozTOFO2ffuZcV61nojHXVKIy3WM+7ADCy5FVhdZYHYDdgTU0yJw==} - copy-anything@3.0.5: resolution: {integrity: sha512-yCEafptTtb4bk7GLEQoM8KVJpxAfdBJYaXyzQEgQQQgYrZiDp8SJmGKlYza6CYjEDNstAdNdKA3UuoULlEbS6w==} engines: {node: '>=12.13'} @@ -4916,8 +4807,8 @@ packages: engines: {node: '>=0.12.18'} hasBin: true - electron-to-chromium@1.5.307: - resolution: {integrity: sha512-5z3uFKBWjiNR44nFcYdkcXjKMbg5KXNdciu7mhTPo9tB7NbqSNP2sSnGR+fqknZSCwKkBN+oxiiajWs4dT6ORg==} + electron-to-chromium@1.5.313: + resolution: {integrity: sha512-QBMrTWEf00GXZmJyx2lbYD45jpI3TUFnNIzJ5BBc8piGUDwMPa1GV6HJWTZVvY/eiN3fSopl7NRbgGp9sZ9LTA==} emoji-regex@10.6.0: resolution: {integrity: sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==} @@ -4953,8 +4844,8 @@ packages: resolution: {integrity: sha512-HqD3yTBfnBxIrbnM1DoD6Pcq8NECnh8d4As1Qgh0z5Gg3jRRIqijury0CL3ghu/edArpUYiYqQiDUQBIs4np3Q==} engines: {node: '>=10.0.0'} - engine.io@6.6.5: - resolution: {integrity: sha512-2RZdgEbXmp5+dVbRm0P7HQUImZpICccJy7rN7Tv+SFa55pH+lxnuw6/K1ZxxBfHoYpSkHLAO92oa8O4SwFXA2A==} + engine.io@6.6.6: + resolution: {integrity: sha512-U2SN0w3OpjFRVlrc17E6TMDmH58Xl9rai1MblNjAdwWp07Kk+llmzX0hjDpQdrDGzwmvOtgM5yI+meYX6iZ2xA==} engines: {node: '>=10.2.0'} enhanced-resolve@5.20.0: @@ -5208,8 +5099,8 @@ packages: express-rate-limit@5.5.1: resolution: {integrity: sha512-MTjE2eIbHv5DyfuFz4zLYWxpqVhEhkTiwFGuB74Q9CSou2WHO52nlE5y3Zlg6SIsiYUIPj6ifFxnkPz6O3sIUg==} - express-rate-limit@8.3.0: - resolution: {integrity: sha512-KJzBawY6fB9FiZGdE/0aftepZ91YlaGIrV8vgblRM3J8X+dHx/aiowJWwkx6LIGyuqGiANsjSwwrbb8mifOJ4Q==} + express-rate-limit@8.3.1: + resolution: {integrity: sha512-D1dKN+cmyPWuvB+G2SREQDzPY1agpBIcTa9sJxOPMCNeH3gwzhqJRDWCXW3gg0y//+LQ/8j52JbMROWyrKdMdw==} engines: {node: '>= 16'} peerDependencies: express: '>= 4.11' @@ -5335,8 +5226,8 @@ packages: resolution: {integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==} hasBin: true - flatted@3.4.0: - resolution: {integrity: sha512-kC6Bb+ooptOIvWj5B63EQWkF0FEnNjV2ZNkLMLZRDDduIiWeFF4iKnslwhiWxjAdbg4NzTNo6h0qLuvFrcx+Sw==} + flatted@3.4.1: + resolution: {integrity: sha512-IxfVbRFVlV8V/yRaGzk0UVIcsKKHMSfYw66T/u4nTwlWteQePsxe//LjudR1AMX4tZW3WFCh3Zqa/sjlqpbURQ==} folder-hash@4.1.2: resolution: {integrity: sha512-rjdiHw3ShVonhMZZXvD/I28boUkbJFT/RBsg5MbQQd8e61PhevIwFwmL218/AscBEsW/blH4BC4A+kFeIqHVfw==} @@ -5596,8 +5487,8 @@ packages: resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} engines: {node: '>= 0.4'} - hono@4.12.5: - resolution: {integrity: sha512-3qq+FUBtlTHhtYxbxheZgY8NIFnkkC/MR8u5TTsr7YZ3wixryQ3cCwn3iZbg8p8B88iDBBAYSfZDS75t8MN7Vg==} + hono@4.12.8: + resolution: {integrity: sha512-VJCEvtrezO1IAR+kqEYnxUOoStaQPGrCmX3j4wDTNOcD1uRPFpGlwQUIW8niPuvHXaTUxeOUl5MMDGrl+tmO9A==} engines: {node: '>=16.9.0'} hosted-git-info@9.0.2: @@ -5974,9 +5865,6 @@ packages: resolution: {integrity: sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==} engines: {node: '>= 0.4'} - is-what@3.14.1: - resolution: {integrity: sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA==} - is-what@4.1.16: resolution: {integrity: sha512-ZhMwEosbFJkA0YhFnNDgTM4ZxDRsS6HqTo7qsZM08fehyRYIYa0yHu5R6mgo1n/8MgaPBXiPimPD77baVFYg+A==} engines: {node: '>=12.13'} @@ -6068,8 +5956,8 @@ packages: resolution: {integrity: sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==} hasBin: true - jose@6.2.0: - resolution: {integrity: sha512-xsfE1TcSCbUdo6U07tR0mvhg0flGxU8tPLbF03mirl2ukGQENhUg4ubGYQnhVH0b5stLlPM+WOqDkEl1R1y5sQ==} + jose@6.2.1: + resolution: {integrity: sha512-jUaKr1yrbfaImV7R2TN/b3IcZzsw38/chqMpo2XJ7i2F8AfM/lA4G1goC3JVEwg0H7UldTmSt3P68nt31W7/mw==} js-base64@3.7.8: resolution: {integrity: sha512-hNngCeKxIUQiEUN3GPJOkz4wF/YvdUdbNL9hsBcMQTkKzboD7T/q3OYOuuPZLUE6dBxSGpwhk5mwuDud7JVAow==} @@ -6222,11 +6110,6 @@ packages: webpack: optional: true - less@4.4.2: - resolution: {integrity: sha512-j1n1IuTX1VQjIy3tT7cyGbX7nvQOsFLoIqobZv4ttI5axP923gA44zUj6miiA6R5Aoms4sEGVIIcucXUbRI14g==} - engines: {node: '>=14'} - hasBin: true - less@4.6.4: resolution: {integrity: sha512-OJmO5+HxZLLw0RLzkqaNHzcgEAQG7C0y3aMbwtCzIUFZsLMNNq/1IdAdHEycQ58CwUO3jPTHmoN+tE5I7FQxNg==} engines: {node: '>=18'} @@ -6342,8 +6225,8 @@ packages: lru-cache@10.4.3: resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} - lru-cache@11.2.6: - resolution: {integrity: sha512-ESL2CrkS/2wTPfuend7Zhkzo2u0daGJ/A2VucJOgQ/C48S/zB8MMeMHSGKYpXhIjbPxfuezITkaBH1wqv00DDQ==} + lru-cache@11.2.7: + resolution: {integrity: sha512-aY/R+aEsRelme17KGQa/1ZSIpLpNYYrhcrepKTZgE+W3WM16YMCaPwOHLHsmopZHELU0Ojin1lPVxKR0MihncA==} engines: {node: 20 || >=22} lru-cache@5.1.1: @@ -6555,8 +6438,8 @@ packages: resolution: {integrity: sha512-P0efT1C9jIdVRefqjzOQ9Xml57zpOXnIuS+csaB4MdZbTdmGDLo8XhzBG1N7aO11gKDDkJvBLULeFTo46wwreA==} hasBin: true - msgpackr@1.11.8: - resolution: {integrity: sha512-bC4UGzHhVvgDNS7kn9tV8fAucIYUBuGojcaLiz7v+P63Lmtm0Xeji8B/8tYKddALXxJLpwIeBmUN3u64C4YkRA==} + msgpackr@1.11.9: + resolution: {integrity: sha512-FkoAAyyA6HM8wL882EcEyFZ9s7hVADSwG9xrVx3dxxNQAtgADTrJoEWivID82Iv1zWDsv/OtbrrcZAzGzOMdNw==} multicast-dns@7.2.5: resolution: {integrity: sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==} @@ -6578,8 +6461,8 @@ packages: natural-compare@1.4.0: resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} - needle@3.3.1: - resolution: {integrity: sha512-6k0YULvhpw+RoLNiQCRKOl09Rv1dPLr8hHnVjHqdolKwDrdNyk+Hmrthi4lIGPPz3r39dLx0hsF5s40sZ3Us4Q==} + needle@3.5.0: + resolution: {integrity: sha512-jaQyPKKk2YokHrEg+vFDYxXIHTCBgiZwSHOoVx/8V3GIBS8/VN6NdVRmg8q1ERtPkMvmOvebsgga4sAj5hls/w==} engines: {node: '>= 4.4.x'} hasBin: true @@ -7324,13 +7207,6 @@ packages: resolution: {integrity: sha512-66iiym49fU6YDJW4DPEYbmUwm4emHXP048lJM9YkecADYGO4cKf0gQZ13U/IqRN00DXbKz0g7O3yOt8m4BNFew==} engines: {node: '>=18.0.0'} - rollup-plugin-dts@6.3.0: - resolution: {integrity: sha512-d0UrqxYd8KyZ6i3M2Nx7WOMy708qsV/7fTHMHxCMCBOAe3V/U7OMPu5GkX8hC+cmkHhzGnfeYongl1IgiooddA==} - engines: {node: '>=16'} - peerDependencies: - rollup: ^3.29.4 || ^4 - typescript: ^4.5 || ^5.0 - rollup-plugin-dts@6.4.0: resolution: {integrity: sha512-2i00A5UoPCoDecLEs13Eu105QegSGfrbp1sDeUj/54LKGmv6XFHDxWKC6Wsb4BobGUWYVCWWjmjAc8bXXbXH/Q==} engines: {node: '>=16'} @@ -7416,11 +7292,6 @@ packages: webpack: optional: true - sass@1.97.3: - resolution: {integrity: sha512-fDz1zJpd5GycprAbu4Q2PV/RprsRtKC/0z82z0JLgdytmcq0+ujJbJ/09bPGDxCLkKY3Np5cRAOcWiVkLXJURg==} - engines: {node: '>=14.0.0'} - hasBin: true - sass@1.98.0: resolution: {integrity: sha512-+4N/u9dZ4PrgzGgPlKnaaRQx64RO0JBKs9sDhQ2pLgN6JQZ25uPQZKQYaBJU48Kd5BxgXoJ4e09Dq7nMcOUW3A==} engines: {node: '>=14.0.0'} @@ -7803,8 +7674,8 @@ packages: tar-stream@3.1.8: resolution: {integrity: sha512-U6QpVRyCGHva435KoNWy9PRoi2IFYCgtEhq9nmrPPpbRacPs9IH4aJ3gbrFC8dPcXvdSZ4XXfXT5Fshbp2MtlQ==} - tar@7.5.10: - resolution: {integrity: sha512-8mOPs1//5q/rlkNSPcCegA6hiHJYDmSLEI8aMH/CdSQJNWztHC9WHNam5zdQlfpTwB9Xp7IBEsHfV5LKMJGVAw==} + tar@7.5.11: + resolution: {integrity: sha512-ChjMH33/KetonMTAtpYdgUFr0tbz69Fp2v7zWxQfYZX4g5ZN2nOBXm1R2xyA+lMIKrLKIoKAwFj93jE/avX9cQ==} engines: {node: '>=18'} teeny-request@10.1.0: @@ -7814,8 +7685,8 @@ packages: teex@1.0.1: resolution: {integrity: sha512-eYE6iEI62Ni1H8oIa7KlDU6uQBtqr4Eajni3wX7rpfXD8ysFx8z0+dri+KWEPWpBsxXfxu58x/0jvTVT1ekOSg==} - terser-webpack-plugin@5.3.17: - resolution: {integrity: sha512-YR7PtUp6GMU91BgSJmlaX/rS2lGDbAF7D+Wtq7hRO+MiljNmodYvqslzCFiYVAgW+Qoaaia/QUIP4lGXufjdZw==} + terser-webpack-plugin@5.4.0: + resolution: {integrity: sha512-Bn5vxm48flOIfkdl5CaD2+1CiUVbonWQ3KQPyP7/EuIl9Gbzq/gQFOzaMFUEgVjB1396tcK0SG8XcNJ/2kDH8g==} engines: {node: '>= 10.13.0'} peerDependencies: '@swc/core': '*' @@ -7865,30 +7736,30 @@ packages: tinybench@2.9.0: resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==} - tinyexec@1.0.2: - resolution: {integrity: sha512-W/KYk+NFhkmsYpuHq5JykngiOCnxeVL8v8dFnqxSD8qEEdRfXk1SDM6JzNqcERbcGYj9tMrDQBYV9cjgnunFIg==} + tinyexec@1.0.4: + resolution: {integrity: sha512-u9r3uZC0bdpGOXtlxUIdwf9pkmvhqJdrVCH9fapQtgy/OeTTMZ1nqH7agtvEfmGui6e1XxjcdrlxvxJvc3sMqw==} engines: {node: '>=18'} tinyglobby@0.2.15: resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==} engines: {node: '>=12.0.0'} - tinyrainbow@3.0.3: - resolution: {integrity: sha512-PSkbLUoxOFRzJYjjxHJt9xro7D+iilgMX/C9lawzVuYiIdcihh9DXmVibBe8lmcFrRi/VzlPjBxbN7rH24q8/Q==} + tinyrainbow@3.1.0: + resolution: {integrity: sha512-Bf+ILmBgretUrdJxzXM0SgXLZ3XfiaUuOj/IKQHuTXip+05Xn+uyEYdVg0kYDipTBcLrCVyUzAPz7QmArb0mmw==} engines: {node: '>=14.0.0'} tldts-core@6.1.86: resolution: {integrity: sha512-Je6p7pkk+KMzMv2XXKmAE3McmolOQFdxkKw0R8EYNr7sELW46JqnNeTX8ybPiQgvg1ymCoF8LXs5fzFaZvJPTA==} - tldts-core@7.0.25: - resolution: {integrity: sha512-ZjCZK0rppSBu7rjHYDYsEaMOIbbT+nWF57hKkv4IUmZWBNrBWBOjIElc0mKRgLM8bm7x/BBlof6t2gi/Oq/Asw==} + tldts-core@7.0.26: + resolution: {integrity: sha512-5WJ2SqFsv4G2Dwi7ZFVRnz6b2H1od39QME1lc2y5Ew3eWiZMAeqOAfWpRP9jHvhUl881406QtZTODvjttJs+ew==} tldts@6.1.86: resolution: {integrity: sha512-WMi/OQ2axVTf/ykqCQgXiIct+mSQDFdH2fkwhPwgEwvJ1kSzZRiinb0zF2Xb8u4+OqPChmyI6MEu4EezNJz+FQ==} hasBin: true - tldts@7.0.25: - resolution: {integrity: sha512-keinCnPbwXEUG3ilrWQZU+CqcTTzHq9m2HhoUP2l7Xmi8l1LuijAXLpAJ5zRW+ifKTNscs4NdCkfkDCBYm352w==} + tldts@7.0.26: + resolution: {integrity: sha512-WiGwQjr0qYdNNG8KpMKlSvpxz652lqa3Rd+/hSaDcY4Uo6SKWZq2LAF+hsAhUewTtYhXlorBKgNF3Kk8hnjGoQ==} hasBin: true tmp@0.2.5: @@ -7911,8 +7782,8 @@ packages: resolution: {integrity: sha512-FVDYdxtnj0G6Qm/DhNPSb8Ju59ULcup3tuJxkFb5K8Bv2pUXILbf0xZWU8PX8Ov19OXljbUyveOFwRMwkXzO+A==} engines: {node: '>=16'} - tough-cookie@6.0.0: - resolution: {integrity: sha512-kXuRi1mtaKMrsLUxz3sQYvVl37B0Ns6MzfrtV5DvJceE9bPyspOqk9xxv7XbZWcfLWbFmm997vl83qUWVJA64w==} + tough-cookie@6.0.1: + resolution: {integrity: sha512-LktZQb3IeoUWB9lqR5EWTHgW/VTITCXg4D21M+lvybRVdylLrRMnqaIONLVb5mav8vM19m44HIcGq4qASeu2Qw==} engines: {node: '>=16'} tr46@0.0.3: @@ -8033,17 +7904,13 @@ packages: resolution: {integrity: sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==} engines: {node: '>= 0.4'} - undici-types@7.22.0: - resolution: {integrity: sha512-RKZvifiL60xdsIuC80UY0dq8Z7DbJUV8/l2hOVbyZAxBzEeQU4Z58+4ZzJ6WN2Lidi9KzT5EbiGX+PI/UGYuRw==} + undici-types@7.24.4: + resolution: {integrity: sha512-cRaY9PagdEZoRmcwzk3tUV3SVGrVQkR6bcSilav/A0vXsfpW4Lvd0BvgRMwTEDTLLGN+QdyBTG+nnvTgJhdt6w==} - undici@6.23.0: - resolution: {integrity: sha512-VfQPToRA5FZs/qJxLIinmU59u0r7LXqoJkCzinq3ckNJp3vKEh7jTWN589YQ5+aoAC/TGRLyJLCPKcLQbM8r9g==} + undici@6.24.1: + resolution: {integrity: sha512-sC+b0tB1whOCzbtlx20fx3WgCXwkW627p4EA9uM+/tNNPkSS+eSEld6pAs9nDv7WbY1UUljBMYPtu9BCOrCWKA==} engines: {node: '>=18.17'} - undici@7.22.0: - resolution: {integrity: sha512-RqslV2Us5BrllB+JeiZnK4peryVTndy9Dnqq62S3yYRRTj0tFQCwEniUy2167skdGOy3vqRzEvl1Dm4sV2ReDg==} - engines: {node: '>=20.18.1'} - undici@7.24.4: resolution: {integrity: sha512-BM/JzwwaRXxrLdElV2Uo6cTLEjhSb3WXboncJamZ15NgUURmvlXvxa6xkwIOILIjPNo9i8ku136ZvWV0Uly8+w==} engines: {node: '>=20.18.1'} @@ -8535,7 +8402,7 @@ snapshots: '@actions/http-client@4.0.0': dependencies: tunnel: 0.0.6 - undici: 6.23.0 + undici: 6.24.1 '@actions/io@3.0.2': {} @@ -8804,7 +8671,7 @@ snapshots: '@csstools/css-color-parser': 4.0.2(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) '@csstools/css-tokenizer': 4.0.0 - lru-cache: 11.2.6 + lru-cache: 11.2.7 '@asamuzakjp/dom-selector@6.8.1': dependencies: @@ -8812,7 +8679,7 @@ snapshots: bidi-js: 1.0.3 css-tree: 3.2.1 is-potential-custom-element-name: 1.0.1 - lru-cache: 11.2.6 + lru-cache: 11.2.7 '@asamuzakjp/nwsapi@2.3.9': {} @@ -9525,7 +9392,9 @@ snapshots: dependencies: '@csstools/css-tokenizer': 4.0.0 - '@csstools/css-syntax-patches-for-csstree@1.1.0': {} + '@csstools/css-syntax-patches-for-csstree@1.1.1(css-tree@3.2.1)': + optionalDependencies: + css-tree: 3.2.1 '@csstools/css-tokenizer@4.0.0': {} @@ -9552,18 +9421,18 @@ snapshots: '@discoveryjs/json-ext@1.0.0': {} - '@emnapi/core@1.8.1': + '@emnapi/core@1.9.0': dependencies: - '@emnapi/wasi-threads': 1.1.0 + '@emnapi/wasi-threads': 1.2.0 tslib: 2.8.1 optional: true - '@emnapi/runtime@1.8.1': + '@emnapi/runtime@1.9.0': dependencies: tslib: 2.8.1 optional: true - '@emnapi/wasi-threads@1.1.0': + '@emnapi/wasi-threads@1.2.0': dependencies: tslib: 2.8.1 optional: true @@ -10125,9 +9994,9 @@ snapshots: '@harperfast/extended-iterable@1.0.3': optional: true - '@hono/node-server@1.19.11(hono@4.12.5)': + '@hono/node-server@1.19.11(hono@4.12.8)': dependencies: - hono: 4.12.5 + hono: 4.12.8 '@humanfs/core@0.19.1': {} @@ -10140,19 +10009,8 @@ snapshots: '@humanwhocodes/retry@0.4.3': {} - '@inquirer/ansi@2.0.3': {} - '@inquirer/ansi@2.0.4': {} - '@inquirer/checkbox@5.1.0(@types/node@24.12.0)': - dependencies: - '@inquirer/ansi': 2.0.3 - '@inquirer/core': 11.1.5(@types/node@24.12.0) - '@inquirer/figures': 2.0.3 - '@inquirer/type': 4.0.3(@types/node@24.12.0) - optionalDependencies: - '@types/node': 24.12.0 - '@inquirer/checkbox@5.1.2(@types/node@24.12.0)': dependencies: '@inquirer/ansi': 2.0.4 @@ -10169,18 +10027,6 @@ snapshots: optionalDependencies: '@types/node': 24.12.0 - '@inquirer/core@11.1.5(@types/node@24.12.0)': - dependencies: - '@inquirer/ansi': 2.0.3 - '@inquirer/figures': 2.0.3 - '@inquirer/type': 4.0.3(@types/node@24.12.0) - cli-width: 4.1.0 - fast-wrap-ansi: 0.2.0 - mute-stream: 3.0.0 - signal-exit: 4.1.0 - optionalDependencies: - '@types/node': 24.12.0 - '@inquirer/core@11.1.7(@types/node@24.12.0)': dependencies: '@inquirer/ansi': 2.0.4 @@ -10201,14 +10047,6 @@ snapshots: optionalDependencies: '@types/node': 24.12.0 - '@inquirer/editor@5.0.8(@types/node@24.12.0)': - dependencies: - '@inquirer/core': 11.1.5(@types/node@24.12.0) - '@inquirer/external-editor': 2.0.3(@types/node@24.12.0) - '@inquirer/type': 4.0.3(@types/node@24.12.0) - optionalDependencies: - '@types/node': 24.12.0 - '@inquirer/expand@5.0.10(@types/node@24.12.0)': dependencies: '@inquirer/core': 11.1.7(@types/node@24.12.0) @@ -10216,20 +10054,6 @@ snapshots: optionalDependencies: '@types/node': 24.12.0 - '@inquirer/expand@5.0.8(@types/node@24.12.0)': - dependencies: - '@inquirer/core': 11.1.5(@types/node@24.12.0) - '@inquirer/type': 4.0.3(@types/node@24.12.0) - optionalDependencies: - '@types/node': 24.12.0 - - '@inquirer/external-editor@2.0.3(@types/node@24.12.0)': - dependencies: - chardet: 2.1.1 - iconv-lite: 0.7.2 - optionalDependencies: - '@types/node': 24.12.0 - '@inquirer/external-editor@2.0.4(@types/node@24.12.0)': dependencies: chardet: 2.1.1 @@ -10237,8 +10061,6 @@ snapshots: optionalDependencies: '@types/node': 24.12.0 - '@inquirer/figures@2.0.3': {} - '@inquirer/figures@2.0.4': {} '@inquirer/input@5.0.10(@types/node@24.12.0)': @@ -10248,13 +10070,6 @@ snapshots: optionalDependencies: '@types/node': 24.12.0 - '@inquirer/input@5.0.8(@types/node@24.12.0)': - dependencies: - '@inquirer/core': 11.1.5(@types/node@24.12.0) - '@inquirer/type': 4.0.3(@types/node@24.12.0) - optionalDependencies: - '@types/node': 24.12.0 - '@inquirer/number@4.0.10(@types/node@24.12.0)': dependencies: '@inquirer/core': 11.1.7(@types/node@24.12.0) @@ -10262,13 +10077,6 @@ snapshots: optionalDependencies: '@types/node': 24.12.0 - '@inquirer/number@4.0.8(@types/node@24.12.0)': - dependencies: - '@inquirer/core': 11.1.5(@types/node@24.12.0) - '@inquirer/type': 4.0.3(@types/node@24.12.0) - optionalDependencies: - '@types/node': 24.12.0 - '@inquirer/password@5.0.10(@types/node@24.12.0)': dependencies: '@inquirer/ansi': 2.0.4 @@ -10277,26 +10085,18 @@ snapshots: optionalDependencies: '@types/node': 24.12.0 - '@inquirer/password@5.0.8(@types/node@24.12.0)': - dependencies: - '@inquirer/ansi': 2.0.3 - '@inquirer/core': 11.1.5(@types/node@24.12.0) - '@inquirer/type': 4.0.3(@types/node@24.12.0) - optionalDependencies: - '@types/node': 24.12.0 - '@inquirer/prompts@8.3.0(@types/node@24.12.0)': dependencies: - '@inquirer/checkbox': 5.1.0(@types/node@24.12.0) + '@inquirer/checkbox': 5.1.2(@types/node@24.12.0) '@inquirer/confirm': 6.0.10(@types/node@24.12.0) - '@inquirer/editor': 5.0.8(@types/node@24.12.0) - '@inquirer/expand': 5.0.8(@types/node@24.12.0) - '@inquirer/input': 5.0.8(@types/node@24.12.0) - '@inquirer/number': 4.0.8(@types/node@24.12.0) - '@inquirer/password': 5.0.8(@types/node@24.12.0) - '@inquirer/rawlist': 5.2.4(@types/node@24.12.0) - '@inquirer/search': 4.1.4(@types/node@24.12.0) - '@inquirer/select': 5.1.0(@types/node@24.12.0) + '@inquirer/editor': 5.0.10(@types/node@24.12.0) + '@inquirer/expand': 5.0.10(@types/node@24.12.0) + '@inquirer/input': 5.0.10(@types/node@24.12.0) + '@inquirer/number': 4.0.10(@types/node@24.12.0) + '@inquirer/password': 5.0.10(@types/node@24.12.0) + '@inquirer/rawlist': 5.2.6(@types/node@24.12.0) + '@inquirer/search': 4.1.6(@types/node@24.12.0) + '@inquirer/select': 5.1.2(@types/node@24.12.0) optionalDependencies: '@types/node': 24.12.0 @@ -10315,13 +10115,6 @@ snapshots: optionalDependencies: '@types/node': 24.12.0 - '@inquirer/rawlist@5.2.4(@types/node@24.12.0)': - dependencies: - '@inquirer/core': 11.1.5(@types/node@24.12.0) - '@inquirer/type': 4.0.3(@types/node@24.12.0) - optionalDependencies: - '@types/node': 24.12.0 - '@inquirer/rawlist@5.2.6(@types/node@24.12.0)': dependencies: '@inquirer/core': 11.1.7(@types/node@24.12.0) @@ -10329,14 +10122,6 @@ snapshots: optionalDependencies: '@types/node': 24.12.0 - '@inquirer/search@4.1.4(@types/node@24.12.0)': - dependencies: - '@inquirer/core': 11.1.5(@types/node@24.12.0) - '@inquirer/figures': 2.0.3 - '@inquirer/type': 4.0.3(@types/node@24.12.0) - optionalDependencies: - '@types/node': 24.12.0 - '@inquirer/search@4.1.6(@types/node@24.12.0)': dependencies: '@inquirer/core': 11.1.7(@types/node@24.12.0) @@ -10345,15 +10130,6 @@ snapshots: optionalDependencies: '@types/node': 24.12.0 - '@inquirer/select@5.1.0(@types/node@24.12.0)': - dependencies: - '@inquirer/ansi': 2.0.3 - '@inquirer/core': 11.1.5(@types/node@24.12.0) - '@inquirer/figures': 2.0.3 - '@inquirer/type': 4.0.3(@types/node@24.12.0) - optionalDependencies: - '@types/node': 24.12.0 - '@inquirer/select@5.1.2(@types/node@24.12.0)': dependencies: '@inquirer/ansi': 2.0.4 @@ -10546,7 +10322,7 @@ snapshots: '@listr2/prompt-adapter-inquirer@4.2.1(@inquirer/prompts@8.3.2(@types/node@24.12.0))(@types/node@24.12.0)(listr2@10.2.1)': dependencies: '@inquirer/prompts': 8.3.2(@types/node@24.12.0) - '@inquirer/type': 4.0.3(@types/node@24.12.0) + '@inquirer/type': 4.0.4(@types/node@24.12.0) listr2: 10.2.1 transitivePeerDependencies: - '@types/node' @@ -10574,7 +10350,7 @@ snapshots: '@modelcontextprotocol/sdk@1.27.1(zod@4.3.6)': dependencies: - '@hono/node-server': 1.19.11(hono@4.12.5) + '@hono/node-server': 1.19.11(hono@4.12.8) ajv: 8.18.0 ajv-formats: 3.0.1(ajv@8.18.0) content-type: 1.0.5 @@ -10583,9 +10359,9 @@ snapshots: eventsource: 3.0.7 eventsource-parser: 3.0.6 express: 5.2.1 - express-rate-limit: 8.3.0(express@5.2.1) - hono: 4.12.5 - jose: 6.2.0 + express-rate-limit: 8.3.1(express@5.2.1) + hono: 4.12.8 + jose: 6.2.1 json-schema-typed: 8.0.2 pkce-challenge: 5.0.1 raw-body: 3.0.2 @@ -10695,8 +10471,8 @@ snapshots: '@napi-rs/wasm-runtime@1.1.1': dependencies: - '@emnapi/core': 1.8.1 - '@emnapi/runtime': 1.8.1 + '@emnapi/core': 1.9.0 + '@emnapi/runtime': 1.9.0 '@tybys/wasm-util': 0.10.1 optional: true @@ -10719,7 +10495,7 @@ snapshots: agent-base: 7.1.4 http-proxy-agent: 7.0.2 https-proxy-agent: 7.0.6(supports-color@10.2.2) - lru-cache: 11.2.6 + lru-cache: 11.2.7 socks-proxy-agent: 8.0.5 transitivePeerDependencies: - supports-color @@ -10733,7 +10509,7 @@ snapshots: '@gar/promise-retry': 1.0.2 '@npmcli/promise-spawn': 9.0.1 ini: 6.0.0 - lru-cache: 11.2.6 + lru-cache: 11.2.7 npm-pick-manifest: 11.0.3 proc-log: 6.1.0 semver: 7.7.4 @@ -11340,7 +11116,7 @@ snapshots: '@stylistic/eslint-plugin@5.10.0(eslint@10.0.3(jiti@2.6.1))': dependencies: '@eslint-community/eslint-utils': 4.9.1(eslint@10.0.3(jiti@2.6.1)) - '@typescript-eslint/types': 8.56.1 + '@typescript-eslint/types': 8.57.0 eslint: 10.0.3(jiti@2.6.1) eslint-visitor-keys: 4.2.1 espree: 10.4.0 @@ -11541,11 +11317,11 @@ snapshots: '@types/node@22.19.15': dependencies: - undici-types: 7.22.0 + undici-types: 7.24.4 '@types/node@24.12.0': dependencies: - undici-types: 7.22.0 + undici-types: 7.24.4 '@types/npm-package-arg@6.1.4': {} @@ -11717,8 +11493,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/types@8.56.1': {} - '@typescript-eslint/types@8.57.0': {} '@typescript-eslint/typescript-estree@8.57.0(typescript@6.0.1-rc)': @@ -11924,7 +11698,7 @@ snapshots: magicast: 0.5.2 obug: 2.1.1 std-env: 4.0.0 - tinyrainbow: 3.0.3 + tinyrainbow: 3.1.0 vitest: 4.1.0(@opentelemetry/api@1.9.0)(@types/node@24.12.0)(jiti@2.6.1)(jsdom@28.1.0)(less@4.6.4)(sass@1.98.0)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) '@vitest/expect@4.1.0': @@ -11934,7 +11708,7 @@ snapshots: '@vitest/spy': 4.1.0 '@vitest/utils': 4.1.0 chai: 6.2.2 - tinyrainbow: 3.0.3 + tinyrainbow: 3.1.0 '@vitest/mocker@4.1.0(vite@7.3.1(@types/node@24.12.0)(jiti@2.6.1)(less@4.6.4)(sass@1.98.0)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))': dependencies: @@ -11946,7 +11720,7 @@ snapshots: '@vitest/pretty-format@4.1.0': dependencies: - tinyrainbow: 3.0.3 + tinyrainbow: 3.1.0 '@vitest/runner@4.1.0': dependencies: @@ -11966,7 +11740,7 @@ snapshots: dependencies: '@vitest/pretty-format': 4.1.0 convert-source-map: 2.0.0 - tinyrainbow: 3.0.3 + tinyrainbow: 3.1.0 '@webassemblyjs/ast@1.14.1': dependencies: @@ -12275,7 +12049,7 @@ snapshots: autoprefixer@10.4.27(postcss@8.5.8): dependencies: browserslist: 4.28.1 - caniuse-lite: 1.0.30001777 + caniuse-lite: 1.0.30001779 fraction.js: 5.3.4 picocolors: 1.1.1 postcss: 8.5.8 @@ -12340,20 +12114,20 @@ snapshots: dependencies: bare-events: 2.8.2 bare-path: 3.0.0 - bare-stream: 2.8.0(bare-events@2.8.2) + bare-stream: 2.8.1(bare-events@2.8.2) bare-url: 2.3.2 fast-fifo: 1.3.2 transitivePeerDependencies: - bare-abort-controller - react-native-b4a - bare-os@3.7.1: {} + bare-os@3.8.0: {} bare-path@3.0.0: dependencies: - bare-os: 3.7.1 + bare-os: 3.8.0 - bare-stream@2.8.0(bare-events@2.8.2): + bare-stream@2.8.1(bare-events@2.8.2): dependencies: streamx: 2.23.0 teex: 1.0.1 @@ -12371,7 +12145,7 @@ snapshots: base64id@2.0.0: {} - baseline-browser-mapping@2.10.0: {} + baseline-browser-mapping@2.10.8: {} basic-ftp@5.2.0: {} @@ -12528,9 +12302,9 @@ snapshots: browserslist@4.28.1: dependencies: - baseline-browser-mapping: 2.10.0 - caniuse-lite: 1.0.30001777 - electron-to-chromium: 1.5.307 + baseline-browser-mapping: 2.10.8 + caniuse-lite: 1.0.30001779 + electron-to-chromium: 1.5.313 node-releases: 2.0.36 update-browserslist-db: 1.2.3(browserslist@4.28.1) @@ -12564,7 +12338,7 @@ snapshots: '@npmcli/fs': 5.0.0 fs-minipass: 3.0.3 glob: 13.0.6 - lru-cache: 11.2.6 + lru-cache: 11.2.7 minipass: 7.1.3 minipass-collect: 2.0.1 minipass-flush: 1.0.5 @@ -12604,7 +12378,7 @@ snapshots: callsites@3.1.0: {} - caniuse-lite@1.0.30001777: {} + caniuse-lite@1.0.30001779: {} caseless@0.12.0: {} @@ -12797,10 +12571,6 @@ snapshots: cookie@0.7.2: {} - copy-anything@2.0.6: - dependencies: - is-what: 3.14.1 - copy-anything@3.0.5: dependencies: is-what: 4.1.16 @@ -12881,9 +12651,9 @@ snapshots: cssstyle@6.2.0: dependencies: '@asamuzakjp/css-color': 5.0.1 - '@csstools/css-syntax-patches-for-csstree': 1.1.0 + '@csstools/css-syntax-patches-for-csstree': 1.1.1(css-tree@3.2.1) css-tree: 3.2.1 - lru-cache: 11.2.6 + lru-cache: 11.2.7 custom-event@1.0.1: {} @@ -13090,7 +12860,7 @@ snapshots: ejs@5.0.1: {} - electron-to-chromium@1.5.307: {} + electron-to-chromium@1.5.313: {} emoji-regex@10.6.0: {} @@ -13126,10 +12896,11 @@ snapshots: engine.io-parser@5.2.3: {} - engine.io@6.6.5(bufferutil@4.1.0)(utf-8-validate@6.0.6): + engine.io@6.6.6(bufferutil@4.1.0)(utf-8-validate@6.0.6): dependencies: '@types/cors': 2.8.19 '@types/node': 22.19.15 + '@types/ws': 8.18.1 accepts: 1.3.8 base64id: 2.0.0 cookie: 0.7.2 @@ -13476,7 +13247,7 @@ snapshots: express-rate-limit@5.5.1: {} - express-rate-limit@8.3.0(express@5.2.1): + express-rate-limit@8.3.1(express@5.2.1): dependencies: express: 5.2.1 ip-address: 10.1.0 @@ -13717,12 +13488,12 @@ snapshots: flat-cache@4.0.1: dependencies: - flatted: 3.4.0 + flatted: 3.4.1 keyv: 4.5.4 flat@5.0.2: {} - flatted@3.4.0: {} + flatted@3.4.1: {} folder-hash@4.1.2(supports-color@10.2.2): dependencies: @@ -14024,11 +13795,11 @@ snapshots: dependencies: function-bind: 1.1.2 - hono@4.12.5: {} + hono@4.12.8: {} hosted-git-info@9.0.2: dependencies: - lru-cache: 11.2.6 + lru-cache: 11.2.7 hpack.js@2.1.6: dependencies: @@ -14405,8 +14176,6 @@ snapshots: call-bound: 1.0.4 get-intrinsic: 1.3.0 - is-what@3.14.1: {} - is-what@4.1.16: {} is-wsl@1.1.0: {} @@ -14505,7 +14274,7 @@ snapshots: jiti@2.6.1: {} - jose@6.2.0: {} + jose@6.2.1: {} js-base64@3.7.8: {} @@ -14535,8 +14304,8 @@ snapshots: parse5: 8.0.0 saxes: 6.0.0 symbol-tree: 3.2.4 - tough-cookie: 6.0.0 - undici: 7.22.0 + tough-cookie: 6.0.1 + undici: 7.24.4 w3c-xmlserializer: 5.0.0 webidl-conversions: 8.0.1 whatwg-mimetype: 5.0.0 @@ -14700,20 +14469,6 @@ snapshots: optionalDependencies: webpack: 5.105.4(esbuild@0.27.3) - less@4.4.2: - dependencies: - copy-anything: 2.0.6 - parse-node-version: 1.0.1 - tslib: 2.8.1 - optionalDependencies: - errno: 0.1.8 - graceful-fs: 4.2.11 - image-size: 0.5.5 - make-dir: 2.1.0 - mime: 1.6.0 - needle: 3.3.1 - source-map: 0.6.1 - less@4.6.4: dependencies: copy-anything: 3.0.5 @@ -14724,7 +14479,7 @@ snapshots: image-size: 0.5.5 make-dir: 2.1.0 mime: 1.6.0 - needle: 3.3.1 + needle: 3.5.0 source-map: 0.6.1 levn@0.4.1: @@ -14753,7 +14508,7 @@ snapshots: lmdb@3.5.2: dependencies: '@harperfast/extended-iterable': 1.0.3 - msgpackr: 1.11.8 + msgpackr: 1.11.9 node-addon-api: 6.1.0 node-gyp-build-optional-packages: 5.2.2 ordered-binary: 1.6.1 @@ -14829,7 +14584,7 @@ snapshots: dependencies: date-format: 4.0.14 debug: 4.4.3(supports-color@10.2.2) - flatted: 3.4.0 + flatted: 3.4.1 rfdc: 1.4.1 streamroller: 3.1.5 transitivePeerDependencies: @@ -14849,7 +14604,7 @@ snapshots: lru-cache@10.4.3: {} - lru-cache@11.2.6: {} + lru-cache@11.2.7: {} lru-cache@5.1.1: dependencies: @@ -15053,7 +14808,7 @@ snapshots: '@msgpackr-extract/msgpackr-extract-win32-x64': 3.0.3 optional: true - msgpackr@1.11.8: + msgpackr@1.11.9: optionalDependencies: msgpackr-extract: 3.0.3 optional: true @@ -15075,7 +14830,7 @@ snapshots: natural-compare@1.4.0: {} - needle@3.3.1: + needle@3.5.0: dependencies: iconv-lite: 0.6.3 sax: 1.5.0 @@ -15107,13 +14862,13 @@ snapshots: find-cache-directory: 6.0.0 injection-js: 2.6.1 jsonc-parser: 3.3.1 - less: 4.4.2 + less: 4.6.4 ora: 9.3.0 piscina: 5.1.4 postcss: 8.5.8 - rollup-plugin-dts: 6.3.0(rollup@4.59.0)(typescript@6.0.1-rc) + rollup-plugin-dts: 6.4.0(rollup@4.59.0)(typescript@6.0.1-rc) rxjs: 7.8.2 - sass: 1.97.3 + sass: 1.98.0 tinyglobby: 0.2.15 tslib: 2.8.1 typescript: 6.0.1-rc @@ -15170,7 +14925,7 @@ snapshots: nopt: 9.0.0 proc-log: 6.1.0 semver: 7.7.4 - tar: 7.5.10 + tar: 7.5.11 tinyglobby: 0.2.15 which: 6.0.1 transitivePeerDependencies: @@ -15416,7 +15171,7 @@ snapshots: proc-log: 6.1.0 sigstore: 4.1.0 ssri: 13.0.1 - tar: 7.5.10 + tar: 7.5.11 transitivePeerDependencies: - supports-color @@ -15468,7 +15223,7 @@ snapshots: path-scurry@2.0.2: dependencies: - lru-cache: 11.2.6 + lru-cache: 11.2.7 minipass: 7.1.3 path-to-regexp@0.1.12: {} @@ -15962,14 +15717,6 @@ snapshots: semver: 7.7.4 spdx-expression-validate: 2.0.0 - rollup-plugin-dts@6.3.0(rollup@4.59.0)(typescript@6.0.1-rc): - dependencies: - magic-string: 0.30.21 - rollup: 4.59.0 - typescript: 6.0.1-rc - optionalDependencies: - '@babel/code-frame': 7.29.0 - rollup-plugin-dts@6.4.0(rollup@4.59.0)(typescript@6.0.1-rc): dependencies: '@jridgewell/remapping': 2.3.5 @@ -16075,14 +15822,6 @@ snapshots: sass: 1.98.0 webpack: 5.105.4(esbuild@0.27.3) - sass@1.97.3: - dependencies: - chokidar: 4.0.3 - immutable: 5.1.5 - source-map-js: 1.2.1 - optionalDependencies: - '@parcel/watcher': 2.5.6 - sass@1.98.0: dependencies: chokidar: 4.0.3 @@ -16315,7 +16054,7 @@ snapshots: base64id: 2.0.0 cors: 2.8.6 debug: 4.4.3(supports-color@10.2.2) - engine.io: 6.6.5(bufferutil@4.1.0)(utf-8-validate@6.0.6) + engine.io: 6.6.6(bufferutil@4.1.0)(utf-8-validate@6.0.6) socket.io-adapter: 2.5.6(bufferutil@4.1.0)(utf-8-validate@6.0.6) socket.io-parser: 4.2.5 transitivePeerDependencies: @@ -16608,7 +16347,7 @@ snapshots: - bare-buffer - react-native-b4a - tar@7.5.10: + tar@7.5.11: dependencies: '@isaacs/fs-minipass': 4.0.1 chownr: 3.0.0 @@ -16632,7 +16371,7 @@ snapshots: - bare-abort-controller - react-native-b4a - terser-webpack-plugin@5.3.17(esbuild@0.27.3)(webpack@5.105.4(esbuild@0.27.3)): + terser-webpack-plugin@5.4.0(esbuild@0.27.3)(webpack@5.105.4(esbuild@0.27.3)): dependencies: '@jridgewell/trace-mapping': 0.3.31 jest-worker: 27.5.1 @@ -16680,26 +16419,26 @@ snapshots: tinybench@2.9.0: {} - tinyexec@1.0.2: {} + tinyexec@1.0.4: {} tinyglobby@0.2.15: dependencies: fdir: 6.5.0(picomatch@4.0.3) picomatch: 4.0.3 - tinyrainbow@3.0.3: {} + tinyrainbow@3.1.0: {} tldts-core@6.1.86: {} - tldts-core@7.0.25: {} + tldts-core@7.0.26: {} tldts@6.1.86: dependencies: tldts-core: 6.1.86 - tldts@7.0.25: + tldts@7.0.26: dependencies: - tldts-core: 7.0.25 + tldts-core: 7.0.26 tmp@0.2.5: {} @@ -16715,9 +16454,9 @@ snapshots: dependencies: tldts: 6.1.86 - tough-cookie@6.0.0: + tough-cookie@6.0.1: dependencies: - tldts: 7.0.25 + tldts: 7.0.26 tr46@0.0.3: {} @@ -16845,11 +16584,9 @@ snapshots: has-symbols: 1.1.0 which-boxed-primitive: 1.1.1 - undici-types@7.22.0: {} - - undici@6.23.0: {} + undici-types@7.24.4: {} - undici@7.22.0: {} + undici@6.24.1: {} undici@7.24.4: {} @@ -17037,9 +16774,9 @@ snapshots: picomatch: 4.0.3 std-env: 4.0.0 tinybench: 2.9.0 - tinyexec: 1.0.2 + tinyexec: 1.0.4 tinyglobby: 0.2.15 - tinyrainbow: 3.0.3 + tinyrainbow: 3.1.0 vite: 7.3.1(@types/node@24.12.0)(jiti@2.6.1)(less@4.6.4)(sass@1.98.0)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) why-is-node-running: 2.3.0 optionalDependencies: @@ -17176,7 +16913,7 @@ snapshots: neo-async: 2.6.2 schema-utils: 4.3.3 tapable: 2.3.0 - terser-webpack-plugin: 5.3.17(esbuild@0.27.3)(webpack@5.105.4(esbuild@0.27.3)) + terser-webpack-plugin: 5.4.0(esbuild@0.27.3)(webpack@5.105.4(esbuild@0.27.3)) watchpack: 2.5.1 webpack-sources: 3.3.4 transitivePeerDependencies: From ff1160e3015eb321971e398cbedff80f4c053166 Mon Sep 17 00:00:00 2001 From: Alan Agius <17563226+alan-agius4@users.noreply.github.com> Date: Tue, 17 Mar 2026 10:20:09 +0000 Subject: [PATCH 148/226] fix(@angular/ssr): ensure unique values in redirect response Vary header Refactors the `createRedirectResponse` function to use a `Set` for constructing the `Vary` header. This ensures that `X-Forwarded-Prefix` is always present exactly once, and that existing `Vary` values from provided headers are correctly parsed, deduplicated, and preserved. Updates the associated unit tests to reflect the new header order and verify the deduplication logic. --- packages/angular/ssr/src/utils/redirect.ts | 15 ++++++++++----- packages/angular/ssr/test/utils/redirect_spec.ts | 9 ++++++++- 2 files changed, 18 insertions(+), 6 deletions(-) diff --git a/packages/angular/ssr/src/utils/redirect.ts b/packages/angular/ssr/src/utils/redirect.ts index 3da6a0232bd8..79fb10f424dc 100644 --- a/packages/angular/ssr/src/utils/redirect.ts +++ b/packages/angular/ssr/src/utils/redirect.ts @@ -50,13 +50,18 @@ export function createRedirectResponse( ); } - let vary = resHeaders.get('Vary') ?? ''; - if (vary) { - vary += ', '; + // Ensure unique values for Vary header + const varyArray = resHeaders.get('Vary')?.split(',') ?? []; + const varySet = new Set(['X-Forwarded-Prefix']); + for (const vary of varyArray) { + const value = vary.trim(); + + if (value) { + varySet.add(value); + } } - vary += 'X-Forwarded-Prefix'; - resHeaders.set('Vary', vary); + resHeaders.set('Vary', [...varySet].join(', ')); resHeaders.set('Location', location); return new Response(null, { diff --git a/packages/angular/ssr/test/utils/redirect_spec.ts b/packages/angular/ssr/test/utils/redirect_spec.ts index bddbb81e2723..b26edd458ac3 100644 --- a/packages/angular/ssr/test/utils/redirect_spec.ts +++ b/packages/angular/ssr/test/utils/redirect_spec.ts @@ -36,7 +36,14 @@ describe('Redirect Utils', () => { 'Vary': 'Host', }); expect(response.headers.get('Location')).toBe('/home'); - expect(response.headers.get('Vary')).toBe('Host, X-Forwarded-Prefix'); + expect(response.headers.get('Vary')).toBe('X-Forwarded-Prefix, Host'); + }); + + it('should NOT add duplicate X-Forwarded-Prefix if already present in Vary header', () => { + const response = createRedirectResponse('/home', 302, { + 'Vary': 'X-Forwarded-Prefix, Host', + }); + expect(response.headers.get('Vary')).toBe('X-Forwarded-Prefix, Host'); }); it('should warn if Location header is provided in extra headers in dev mode', () => { From 98450e149248e23de893bf1f9d3d741d5696f6e8 Mon Sep 17 00:00:00 2001 From: Angular Robot <angular-robot@google.com> Date: Tue, 17 Mar 2026 17:25:37 +0000 Subject: [PATCH 149/226] build: update cross-repo angular dependencies See associated pull request for more information. --- .../assistant-to-the-branch-manager.yml | 2 +- .github/workflows/ci.yml | 52 +++++++++---------- .github/workflows/dev-infra.yml | 6 +-- .github/workflows/perf.yml | 6 +-- .github/workflows/pr.yml | 44 ++++++++-------- MODULE.bazel | 8 +-- package.json | 2 +- pnpm-lock.yaml | 12 ++--- tests/e2e/ng-snapshot/package.json | 32 ++++++------ 9 files changed, 82 insertions(+), 82 deletions(-) diff --git a/.github/workflows/assistant-to-the-branch-manager.yml b/.github/workflows/assistant-to-the-branch-manager.yml index e3a723fdaf97..7185b5ef34cb 100644 --- a/.github/workflows/assistant-to-the-branch-manager.yml +++ b/.github/workflows/assistant-to-the-branch-manager.yml @@ -17,6 +17,6 @@ jobs: - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 with: persist-credentials: false - - uses: angular/dev-infra/github-actions/branch-manager@0c9cddc9853934bdf85834239f56ad0e83e61d8f + - uses: angular/dev-infra/github-actions/branch-manager@9de194d77b66b6b3294e0f041e29985d2916e911 with: angular-robot-key: ${{ secrets.ANGULAR_ROBOT_PRIVATE_KEY }} diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index e9980cfcaaa7..b0f5840b16ab 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -21,9 +21,9 @@ jobs: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@0c9cddc9853934bdf85834239f56ad0e83e61d8f + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@9de194d77b66b6b3294e0f041e29985d2916e911 - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@0c9cddc9853934bdf85834239f56ad0e83e61d8f + uses: angular/dev-infra/github-actions/bazel/setup@9de194d77b66b6b3294e0f041e29985d2916e911 - name: Install node modules run: pnpm install --frozen-lockfile - name: Generate JSON schema types @@ -44,11 +44,11 @@ jobs: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@0c9cddc9853934bdf85834239f56ad0e83e61d8f + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@9de194d77b66b6b3294e0f041e29985d2916e911 - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@0c9cddc9853934bdf85834239f56ad0e83e61d8f + uses: angular/dev-infra/github-actions/bazel/setup@9de194d77b66b6b3294e0f041e29985d2916e911 - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@0c9cddc9853934bdf85834239f56ad0e83e61d8f + uses: angular/dev-infra/github-actions/bazel/configure-remote@9de194d77b66b6b3294e0f041e29985d2916e911 with: google_credential: ${{ secrets.RBE_TRUSTED_BUILDS_USER }} - name: Install node modules @@ -61,11 +61,11 @@ jobs: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@0c9cddc9853934bdf85834239f56ad0e83e61d8f + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@9de194d77b66b6b3294e0f041e29985d2916e911 - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@0c9cddc9853934bdf85834239f56ad0e83e61d8f + uses: angular/dev-infra/github-actions/bazel/setup@9de194d77b66b6b3294e0f041e29985d2916e911 - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@0c9cddc9853934bdf85834239f56ad0e83e61d8f + uses: angular/dev-infra/github-actions/bazel/configure-remote@9de194d77b66b6b3294e0f041e29985d2916e911 with: google_credential: ${{ secrets.RBE_TRUSTED_BUILDS_USER }} - name: Install node modules @@ -84,13 +84,13 @@ jobs: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@0c9cddc9853934bdf85834239f56ad0e83e61d8f + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@9de194d77b66b6b3294e0f041e29985d2916e911 - name: Install node modules run: pnpm install --frozen-lockfile - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@0c9cddc9853934bdf85834239f56ad0e83e61d8f + uses: angular/dev-infra/github-actions/bazel/setup@9de194d77b66b6b3294e0f041e29985d2916e911 - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@0c9cddc9853934bdf85834239f56ad0e83e61d8f + uses: angular/dev-infra/github-actions/bazel/configure-remote@9de194d77b66b6b3294e0f041e29985d2916e911 with: google_credential: ${{ secrets.RBE_TRUSTED_BUILDS_USER }} - name: Run CLI E2E tests @@ -100,11 +100,11 @@ jobs: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@0c9cddc9853934bdf85834239f56ad0e83e61d8f + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@9de194d77b66b6b3294e0f041e29985d2916e911 - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@0c9cddc9853934bdf85834239f56ad0e83e61d8f + uses: angular/dev-infra/github-actions/bazel/setup@9de194d77b66b6b3294e0f041e29985d2916e911 - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@0c9cddc9853934bdf85834239f56ad0e83e61d8f + uses: angular/dev-infra/github-actions/bazel/configure-remote@9de194d77b66b6b3294e0f041e29985d2916e911 with: google_credential: ${{ secrets.RBE_TRUSTED_BUILDS_USER }} - name: Install node modules @@ -137,7 +137,7 @@ jobs: runs-on: windows-2025 steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@0c9cddc9853934bdf85834239f56ad0e83e61d8f + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@9de194d77b66b6b3294e0f041e29985d2916e911 - name: Install node modules run: pnpm install --frozen-lockfile - name: Download built Windows E2E tests @@ -164,13 +164,13 @@ jobs: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@0c9cddc9853934bdf85834239f56ad0e83e61d8f + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@9de194d77b66b6b3294e0f041e29985d2916e911 - name: Install node modules run: pnpm install --frozen-lockfile - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@0c9cddc9853934bdf85834239f56ad0e83e61d8f + uses: angular/dev-infra/github-actions/bazel/setup@9de194d77b66b6b3294e0f041e29985d2916e911 - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@0c9cddc9853934bdf85834239f56ad0e83e61d8f + uses: angular/dev-infra/github-actions/bazel/configure-remote@9de194d77b66b6b3294e0f041e29985d2916e911 with: google_credential: ${{ secrets.RBE_TRUSTED_BUILDS_USER }} - name: Run CLI E2E tests @@ -188,13 +188,13 @@ jobs: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@0c9cddc9853934bdf85834239f56ad0e83e61d8f + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@9de194d77b66b6b3294e0f041e29985d2916e911 - name: Install node modules run: pnpm install --frozen-lockfile - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@0c9cddc9853934bdf85834239f56ad0e83e61d8f + uses: angular/dev-infra/github-actions/bazel/setup@9de194d77b66b6b3294e0f041e29985d2916e911 - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@0c9cddc9853934bdf85834239f56ad0e83e61d8f + uses: angular/dev-infra/github-actions/bazel/configure-remote@9de194d77b66b6b3294e0f041e29985d2916e911 with: google_credential: ${{ secrets.RBE_TRUSTED_BUILDS_USER }} - name: Run CLI E2E tests @@ -208,13 +208,13 @@ jobs: SAUCE_TUNNEL_IDENTIFIER: angular-cli-${{ github.workflow }}-${{ github.run_number }} steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@0c9cddc9853934bdf85834239f56ad0e83e61d8f + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@9de194d77b66b6b3294e0f041e29985d2916e911 - name: Install node modules run: pnpm install --frozen-lockfile - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@0c9cddc9853934bdf85834239f56ad0e83e61d8f + uses: angular/dev-infra/github-actions/bazel/setup@9de194d77b66b6b3294e0f041e29985d2916e911 - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@0c9cddc9853934bdf85834239f56ad0e83e61d8f + uses: angular/dev-infra/github-actions/bazel/configure-remote@9de194d77b66b6b3294e0f041e29985d2916e911 with: google_credential: ${{ secrets.RBE_TRUSTED_BUILDS_USER }} - name: Run E2E Browser tests @@ -244,11 +244,11 @@ jobs: CIRCLE_BRANCH: ${{ github.ref_name }} steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@0c9cddc9853934bdf85834239f56ad0e83e61d8f + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@9de194d77b66b6b3294e0f041e29985d2916e911 - name: Install node modules run: pnpm install --frozen-lockfile - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@0c9cddc9853934bdf85834239f56ad0e83e61d8f + uses: angular/dev-infra/github-actions/bazel/setup@9de194d77b66b6b3294e0f041e29985d2916e911 - run: pnpm admin snapshots --verbose env: SNAPSHOT_BUILDS_GITHUB_TOKEN: ${{ secrets.SNAPSHOT_BUILDS_GITHUB_TOKEN }} diff --git a/.github/workflows/dev-infra.yml b/.github/workflows/dev-infra.yml index 36d1cdff2ffe..2d888480ccc2 100644 --- a/.github/workflows/dev-infra.yml +++ b/.github/workflows/dev-infra.yml @@ -15,21 +15,21 @@ jobs: if: github.event_name == 'pull_request_target' runs-on: ubuntu-latest steps: - - uses: angular/dev-infra/github-actions/labeling/pull-request@0c9cddc9853934bdf85834239f56ad0e83e61d8f + - uses: angular/dev-infra/github-actions/labeling/pull-request@9de194d77b66b6b3294e0f041e29985d2916e911 with: angular-robot-key: ${{ secrets.ANGULAR_ROBOT_PRIVATE_KEY }} post_approval_changes: if: github.event_name == 'pull_request_target' runs-on: ubuntu-latest steps: - - uses: angular/dev-infra/github-actions/post-approval-changes@0c9cddc9853934bdf85834239f56ad0e83e61d8f + - uses: angular/dev-infra/github-actions/post-approval-changes@9de194d77b66b6b3294e0f041e29985d2916e911 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@0c9cddc9853934bdf85834239f56ad0e83e61d8f + - uses: angular/dev-infra/github-actions/labeling/issue@9de194d77b66b6b3294e0f041e29985d2916e911 with: angular-robot-key: ${{ secrets.ANGULAR_ROBOT_PRIVATE_KEY }} google-generative-ai-key: ${{ secrets.GOOGLE_GENERATIVE_AI_KEY }} diff --git a/.github/workflows/perf.yml b/.github/workflows/perf.yml index 56b333e7865e..e900eb9c6e38 100644 --- a/.github/workflows/perf.yml +++ b/.github/workflows/perf.yml @@ -23,7 +23,7 @@ jobs: workflows: ${{ steps.workflows.outputs.workflows }} steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@0c9cddc9853934bdf85834239f56ad0e83e61d8f + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@9de194d77b66b6b3294e0f041e29985d2916e911 - name: Install node modules run: pnpm install --frozen-lockfile - id: workflows @@ -38,9 +38,9 @@ jobs: workflow: ${{ fromJSON(needs.list.outputs.workflows) }} steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@0c9cddc9853934bdf85834239f56ad0e83e61d8f + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@9de194d77b66b6b3294e0f041e29985d2916e911 - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@0c9cddc9853934bdf85834239f56ad0e83e61d8f + uses: angular/dev-infra/github-actions/bazel/setup@9de194d77b66b6b3294e0f041e29985d2916e911 - name: Install node modules run: pnpm install --frozen-lockfile # We utilize the google-github-actions/auth action to allow us to get an active credential using workflow diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml index 07c4e7f9a099..47c17711832a 100644 --- a/.github/workflows/pr.yml +++ b/.github/workflows/pr.yml @@ -34,9 +34,9 @@ jobs: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@0c9cddc9853934bdf85834239f56ad0e83e61d8f + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@9de194d77b66b6b3294e0f041e29985d2916e911 - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@0c9cddc9853934bdf85834239f56ad0e83e61d8f + uses: angular/dev-infra/github-actions/bazel/setup@9de194d77b66b6b3294e0f041e29985d2916e911 - name: Setup ESLint Caching uses: actions/cache@cdf6c1fa76f9f475f3d7449005a359c84ca0f306 # v5.0.3 with: @@ -66,17 +66,17 @@ jobs: # it has been merged. run: pnpm ng-dev format changed --check ${{ github.event.pull_request.base.sha }} - name: Check Package Licenses - uses: angular/dev-infra/github-actions/linting/licenses@0c9cddc9853934bdf85834239f56ad0e83e61d8f + uses: angular/dev-infra/github-actions/linting/licenses@9de194d77b66b6b3294e0f041e29985d2916e911 build: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@0c9cddc9853934bdf85834239f56ad0e83e61d8f + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@9de194d77b66b6b3294e0f041e29985d2916e911 - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@0c9cddc9853934bdf85834239f56ad0e83e61d8f + uses: angular/dev-infra/github-actions/bazel/setup@9de194d77b66b6b3294e0f041e29985d2916e911 - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@0c9cddc9853934bdf85834239f56ad0e83e61d8f + uses: angular/dev-infra/github-actions/bazel/configure-remote@9de194d77b66b6b3294e0f041e29985d2916e911 - name: Install node modules run: pnpm install --frozen-lockfile - name: Build release targets @@ -93,11 +93,11 @@ jobs: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@0c9cddc9853934bdf85834239f56ad0e83e61d8f + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@9de194d77b66b6b3294e0f041e29985d2916e911 - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@0c9cddc9853934bdf85834239f56ad0e83e61d8f + uses: angular/dev-infra/github-actions/bazel/setup@9de194d77b66b6b3294e0f041e29985d2916e911 - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@0c9cddc9853934bdf85834239f56ad0e83e61d8f + uses: angular/dev-infra/github-actions/bazel/configure-remote@9de194d77b66b6b3294e0f041e29985d2916e911 - name: Install node modules run: pnpm install --frozen-lockfile - name: Run module and package tests @@ -114,13 +114,13 @@ jobs: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@0c9cddc9853934bdf85834239f56ad0e83e61d8f + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@9de194d77b66b6b3294e0f041e29985d2916e911 - name: Install node modules run: pnpm install --frozen-lockfile - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@0c9cddc9853934bdf85834239f56ad0e83e61d8f + uses: angular/dev-infra/github-actions/bazel/setup@9de194d77b66b6b3294e0f041e29985d2916e911 - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@0c9cddc9853934bdf85834239f56ad0e83e61d8f + uses: angular/dev-infra/github-actions/bazel/configure-remote@9de194d77b66b6b3294e0f041e29985d2916e911 - name: Run CLI E2E tests run: pnpm bazel test --test_env=E2E_SHARD_TOTAL=6 --test_env=E2E_SHARD_INDEX=${{ matrix.shard }} --config=e2e //tests:e2e.${{ matrix.subset }}_node${{ matrix.node }} @@ -128,11 +128,11 @@ jobs: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@0c9cddc9853934bdf85834239f56ad0e83e61d8f + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@9de194d77b66b6b3294e0f041e29985d2916e911 - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@0c9cddc9853934bdf85834239f56ad0e83e61d8f + uses: angular/dev-infra/github-actions/bazel/setup@9de194d77b66b6b3294e0f041e29985d2916e911 - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@0c9cddc9853934bdf85834239f56ad0e83e61d8f + uses: angular/dev-infra/github-actions/bazel/configure-remote@9de194d77b66b6b3294e0f041e29985d2916e911 - name: Install node modules run: pnpm install --frozen-lockfile - name: Build E2E tests for Windows on Linux @@ -156,7 +156,7 @@ jobs: runs-on: windows-2025 steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@0c9cddc9853934bdf85834239f56ad0e83e61d8f + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@9de194d77b66b6b3294e0f041e29985d2916e911 - name: Install node modules run: pnpm install --frozen-lockfile - name: Download built Windows E2E tests @@ -183,13 +183,13 @@ jobs: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@0c9cddc9853934bdf85834239f56ad0e83e61d8f + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@9de194d77b66b6b3294e0f041e29985d2916e911 - name: Install node modules run: pnpm install --frozen-lockfile - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@0c9cddc9853934bdf85834239f56ad0e83e61d8f + uses: angular/dev-infra/github-actions/bazel/setup@9de194d77b66b6b3294e0f041e29985d2916e911 - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@0c9cddc9853934bdf85834239f56ad0e83e61d8f + uses: angular/dev-infra/github-actions/bazel/configure-remote@9de194d77b66b6b3294e0f041e29985d2916e911 - name: Run CLI E2E tests run: pnpm bazel test --test_env=E2E_SHARD_TOTAL=3 --test_env=E2E_SHARD_INDEX=${{ matrix.shard }} --config=e2e //tests:e2e.${{ matrix.subset }}_node${{ matrix.node }} @@ -205,12 +205,12 @@ jobs: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@0c9cddc9853934bdf85834239f56ad0e83e61d8f + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@9de194d77b66b6b3294e0f041e29985d2916e911 - name: Install node modules run: pnpm install --frozen-lockfile - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@0c9cddc9853934bdf85834239f56ad0e83e61d8f + uses: angular/dev-infra/github-actions/bazel/setup@9de194d77b66b6b3294e0f041e29985d2916e911 - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@0c9cddc9853934bdf85834239f56ad0e83e61d8f + uses: angular/dev-infra/github-actions/bazel/configure-remote@9de194d77b66b6b3294e0f041e29985d2916e911 - name: Run CLI E2E tests run: pnpm bazel test --test_env=E2E_SHARD_TOTAL=6 --test_env=E2E_SHARD_INDEX=${{ matrix.shard }} --config=e2e //tests:e2e.snapshots.${{ matrix.subset }}_node${{ matrix.node }} diff --git a/MODULE.bazel b/MODULE.bazel index 6b1b9e016364..0406e51609b6 100644 --- a/MODULE.bazel +++ b/MODULE.bazel @@ -19,28 +19,28 @@ bazel_dep(name = "aspect_rules_jasmine", version = "2.0.4") bazel_dep(name = "rules_angular") git_override( module_name = "rules_angular", - commit = "24dbfaaf3ba439ff17b97f0e9aeea8574ca4b214", + commit = "cc27b644546c1b8f680f3e5a1000f7a127eef13b", remote = "https://github.com/angular/rules_angular.git", ) bazel_dep(name = "devinfra") git_override( module_name = "devinfra", - commit = "0c9cddc9853934bdf85834239f56ad0e83e61d8f", + commit = "9de194d77b66b6b3294e0f041e29985d2916e911", remote = "https://github.com/angular/dev-infra.git", ) bazel_dep(name = "rules_sass") git_override( module_name = "rules_sass", - commit = "02795527950cfc28373eecda04f2e641767a6161", + commit = "6c5490b4da59c283f7d4a48f68615a513a352b10", remote = "https://github.com/angular/rules_sass.git", ) bazel_dep(name = "rules_browsers") git_override( module_name = "rules_browsers", - commit = "58868ac62b0b775db0c82af0b60cfe0bdafdb35c", + commit = "79771c96882a2aa5ad8a2311e858e1c9eddf786a", remote = "https://github.com/angular/rules_browsers.git", ) diff --git a/package.json b/package.json index d24af3193639..5088d9bb328a 100644 --- a/package.json +++ b/package.json @@ -51,7 +51,7 @@ "@angular/forms": "22.0.0-next.3", "@angular/localize": "22.0.0-next.3", "@angular/material": "22.0.0-next.0", - "@angular/ng-dev": "https://github.com/angular/dev-infra-private-ng-dev-builds.git#ddbbfb8f2802fcfb85c8bf6b2f78a5ea120137e7", + "@angular/ng-dev": "https://github.com/angular/dev-infra-private-ng-dev-builds.git#ae3393e8549a472a9fb199222eeebb387b5769e6", "@angular/platform-browser": "22.0.0-next.3", "@angular/platform-server": "22.0.0-next.3", "@angular/router": "22.0.0-next.3", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index aaa74bfbed26..f7e1feaf37fc 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -47,8 +47,8 @@ importers: specifier: 22.0.0-next.0 version: 22.0.0-next.0(2d75345887a5a4c2bc113233c009d4e6) '@angular/ng-dev': - specifier: https://github.com/angular/dev-infra-private-ng-dev-builds.git#ddbbfb8f2802fcfb85c8bf6b2f78a5ea120137e7 - version: https://codeload.github.com/angular/dev-infra-private-ng-dev-builds/tar.gz/ddbbfb8f2802fcfb85c8bf6b2f78a5ea120137e7(@modelcontextprotocol/sdk@1.27.1(zod@4.3.6)) + specifier: https://github.com/angular/dev-infra-private-ng-dev-builds.git#ae3393e8549a472a9fb199222eeebb387b5769e6 + version: https://codeload.github.com/angular/dev-infra-private-ng-dev-builds/tar.gz/ae3393e8549a472a9fb199222eeebb387b5769e6(@modelcontextprotocol/sdk@1.27.1(zod@4.3.6)) '@angular/platform-browser': specifier: 22.0.0-next.3 version: 22.0.0-next.3(@angular/animations@22.0.0-next.3(@angular/core@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@22.0.0-next.3(@angular/core@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1)) @@ -1002,9 +1002,9 @@ packages: '@angular/platform-browser': ^22.0.0-0 || ^22.1.0-0 || ^22.2.0-0 || ^22.3.0-0 || ^23.0.0-0 rxjs: ^6.5.3 || ^7.4.0 - '@angular/ng-dev@https://codeload.github.com/angular/dev-infra-private-ng-dev-builds/tar.gz/ddbbfb8f2802fcfb85c8bf6b2f78a5ea120137e7': - resolution: {tarball: https://codeload.github.com/angular/dev-infra-private-ng-dev-builds/tar.gz/ddbbfb8f2802fcfb85c8bf6b2f78a5ea120137e7} - version: 0.0.0-0c9cddc9853934bdf85834239f56ad0e83e61d8f + '@angular/ng-dev@https://codeload.github.com/angular/dev-infra-private-ng-dev-builds/tar.gz/ae3393e8549a472a9fb199222eeebb387b5769e6': + resolution: {tarball: https://codeload.github.com/angular/dev-infra-private-ng-dev-builds/tar.gz/ae3393e8549a472a9fb199222eeebb387b5769e6} + version: 0.0.0-9de194d77b66b6b3294e0f041e29985d2916e911 hasBin: true '@angular/platform-browser@22.0.0-next.3': @@ -8573,7 +8573,7 @@ snapshots: rxjs: 7.8.2 tslib: 2.8.1 - '@angular/ng-dev@https://codeload.github.com/angular/dev-infra-private-ng-dev-builds/tar.gz/ddbbfb8f2802fcfb85c8bf6b2f78a5ea120137e7(@modelcontextprotocol/sdk@1.27.1(zod@4.3.6))': + '@angular/ng-dev@https://codeload.github.com/angular/dev-infra-private-ng-dev-builds/tar.gz/ae3393e8549a472a9fb199222eeebb387b5769e6(@modelcontextprotocol/sdk@1.27.1(zod@4.3.6))': dependencies: '@actions/core': 3.0.0 '@conventional-changelog/git-client': 2.6.0(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.3.0) diff --git a/tests/e2e/ng-snapshot/package.json b/tests/e2e/ng-snapshot/package.json index 160b900e987d..e70cd8b0322f 100644 --- a/tests/e2e/ng-snapshot/package.json +++ b/tests/e2e/ng-snapshot/package.json @@ -2,21 +2,21 @@ "description": "snapshot versions of Angular for e2e testing", "private": true, "dependencies": { - "@angular/animations": "github:angular/animations-builds#5b71e748eba9e4a51ef16a32db8490e59b7a89f9", - "@angular/cdk": "github:angular/cdk-builds#ac5186a3f2b0eb9757617ced2d6e30e29ccd15e3", - "@angular/common": "github:angular/common-builds#67b6183d0980d459b5425cf8f3ee7731091910a2", - "@angular/compiler": "github:angular/compiler-builds#77fb241e18fa51f6c20b15269e3ec41438812308", - "@angular/compiler-cli": "github:angular/compiler-cli-builds#6b534391ae644ad5d720d611620b0164eb4bdd62", - "@angular/core": "github:angular/core-builds#0953f784f67ba20617a233c77cfc03214d6d6a64", - "@angular/forms": "github:angular/forms-builds#adcb3810aee67a5c9b1381dee9a606ef9da9b428", - "@angular/language-service": "github:angular/language-service-builds#a458dd57809621d399b18a79f3a35a0c54373874", - "@angular/localize": "github:angular/localize-builds#9953ba75a98eab347a5b99589db85ff243696891", - "@angular/material": "github:angular/material-builds#a9b949632c4a1d482901b3efd77f42817d5eb49d", - "@angular/material-moment-adapter": "github:angular/material-moment-adapter-builds#7c650ae1ec319407546685ac0dc39a46f8981415", - "@angular/platform-browser": "github:angular/platform-browser-builds#8143dedad3f2e32a4b2f64dfa921280dd5856419", - "@angular/platform-browser-dynamic": "github:angular/platform-browser-dynamic-builds#45a110ea72cdfc0c33248564e9f65a1df3f05f6b", - "@angular/platform-server": "github:angular/platform-server-builds#462fd1e71382b1bc3f7985de276fd73fc7bacc75", - "@angular/router": "github:angular/router-builds#a88b30ec686b72136805dc386defe51031cab308", - "@angular/service-worker": "github:angular/service-worker-builds#0ea41701ee73c131025ba4e71dab65086357167d" + "@angular/animations": "github:angular/animations-builds#258921fb85e069f55d1e8e885ee0996795ff1d6c", + "@angular/cdk": "github:angular/cdk-builds#31d61d82940bc415359502be54af9d1bf41cd51d", + "@angular/common": "github:angular/common-builds#3089c5f552c223bb4042b77803a1839135af2cfb", + "@angular/compiler": "github:angular/compiler-builds#fd30be17bf48408c0c69c69ceba6d069c1b09706", + "@angular/compiler-cli": "github:angular/compiler-cli-builds#876ef8f7536abde91a74cc122551e7f465319b76", + "@angular/core": "github:angular/core-builds#1da8e3dd9f61d4b576e5dbf933729c9b5f0d4a66", + "@angular/forms": "github:angular/forms-builds#dd01546e26789ccb379a63787cd7748c381fab4a", + "@angular/language-service": "github:angular/language-service-builds#dd51f3ccb3a764459412010194c47b072ae3daeb", + "@angular/localize": "github:angular/localize-builds#8c7a6a4ba2b4694ce9a13ebe1276fbc49acae545", + "@angular/material": "github:angular/material-builds#e307643479de20868e65d2fc50d83dfd64707023", + "@angular/material-moment-adapter": "github:angular/material-moment-adapter-builds#915c34b096cde2c7938dc03848467a9063f03935", + "@angular/platform-browser": "github:angular/platform-browser-builds#f233500075dfeb87e348f5f39088b9db119f550b", + "@angular/platform-browser-dynamic": "github:angular/platform-browser-dynamic-builds#35aa512837c24f70e26b8ed412bdaf03fb87b18a", + "@angular/platform-server": "github:angular/platform-server-builds#3de2069df22ff869671ec68760ee6015fbe209c7", + "@angular/router": "github:angular/router-builds#ecfb555cc807c99ad375dcca171622cc9cf82904", + "@angular/service-worker": "github:angular/service-worker-builds#60efd8593b3ea0149d4aba31a3c8c1df30e8f3df" } } From 6ca09c5aacfea65bfa35c2c70b7772e834d69802 Mon Sep 17 00:00:00 2001 From: Angular Robot <angular-robot@google.com> Date: Tue, 17 Mar 2026 17:51:11 +0000 Subject: [PATCH 150/226] build: update dependency jsdom to v29 See associated pull request for more information. --- modules/testing/builder/package.json | 2 +- packages/angular/build/package.json | 2 +- pnpm-lock.yaml | 64 +++++++++++----------------- 3 files changed, 26 insertions(+), 42 deletions(-) diff --git a/modules/testing/builder/package.json b/modules/testing/builder/package.json index 361bf2ebaf97..0f7682b96ada 100644 --- a/modules/testing/builder/package.json +++ b/modules/testing/builder/package.json @@ -6,7 +6,7 @@ "@angular/ssr": "workspace:*", "@vitest/coverage-v8": "4.1.0", "browser-sync": "3.0.4", - "jsdom": "28.1.0", + "jsdom": "29.0.0", "ng-packagr": "22.0.0-next.0", "rxjs": "7.8.2", "vitest": "4.1.0" diff --git a/packages/angular/build/package.json b/packages/angular/build/package.json index aa0c32ae52e3..7e54d39cfb3d 100644 --- a/packages/angular/build/package.json +++ b/packages/angular/build/package.json @@ -51,7 +51,7 @@ "devDependencies": { "@angular-devkit/core": "workspace:*", "@angular/ssr": "workspace:*", - "jsdom": "28.1.0", + "jsdom": "29.0.0", "less": "4.6.4", "ng-packagr": "22.0.0-next.0", "postcss": "8.5.8", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index f7e1feaf37fc..f2223d9eeddb 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -312,13 +312,13 @@ importers: version: link:../../../packages/angular/ssr '@vitest/coverage-v8': specifier: 4.1.0 - version: 4.1.0(vitest@4.1.0(@opentelemetry/api@1.9.0)(@types/node@24.12.0)(jiti@2.6.1)(jsdom@28.1.0)(less@4.6.4)(sass@1.98.0)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)) + version: 4.1.0(vitest@4.1.0(@opentelemetry/api@1.9.0)(@types/node@24.12.0)(jiti@2.6.1)(jsdom@29.0.0)(less@4.6.4)(sass@1.98.0)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)) browser-sync: specifier: 3.0.4 version: 3.0.4(bufferutil@4.1.0)(utf-8-validate@6.0.6) jsdom: - specifier: 28.1.0 - version: 28.1.0 + specifier: 29.0.0 + version: 29.0.0 ng-packagr: specifier: 22.0.0-next.0 version: 22.0.0-next.0(@angular/compiler-cli@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(typescript@6.0.1-rc))(tslib@2.8.1)(typescript@6.0.1-rc) @@ -327,7 +327,7 @@ importers: version: 7.8.2 vitest: specifier: 4.1.0 - version: 4.1.0(@opentelemetry/api@1.9.0)(@types/node@24.12.0)(jiti@2.6.1)(jsdom@28.1.0)(less@4.6.4)(sass@1.98.0)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) + version: 4.1.0(@opentelemetry/api@1.9.0)(@types/node@24.12.0)(jiti@2.6.1)(jsdom@29.0.0)(less@4.6.4)(sass@1.98.0)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) packages/angular/build: dependencies: @@ -417,8 +417,8 @@ importers: specifier: workspace:* version: link:../ssr jsdom: - specifier: 28.1.0 - version: 28.1.0 + specifier: 29.0.0 + version: 29.0.0 less: specifier: 4.6.4 version: 4.6.4 @@ -433,7 +433,7 @@ importers: version: 7.8.2 vitest: specifier: 4.1.0 - version: 4.1.0(@opentelemetry/api@1.9.0)(@types/node@24.12.0)(jiti@2.6.1)(jsdom@28.1.0)(less@4.6.4)(sass@1.98.0)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) + version: 4.1.0(@opentelemetry/api@1.9.0)(@types/node@24.12.0)(jiti@2.6.1)(jsdom@29.0.0)(less@4.6.4)(sass@1.98.0)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) optionalDependencies: lmdb: specifier: 3.5.2 @@ -851,9 +851,6 @@ importers: packages: - '@acemir/cssom@0.9.31': - resolution: {integrity: sha512-ZnR3GSaH+/vJ0YlHau21FjfLYjMpYVIzTD8M8vIEQvIGxeOXyXdzCI140rrCY862p/C/BbzWsjc1dgnM9mkoTA==} - '@actions/core@3.0.0': resolution: {integrity: sha512-zYt6cz+ivnTmiT/ksRVriMBOiuoUpDCJJlZ5KPl2/FRdvwU3f7MPh9qftvbkXJThragzUZieit2nyHUyw53Seg==} @@ -1049,8 +1046,9 @@ packages: resolution: {integrity: sha512-2SZFvqMyvboVV1d15lMf7XiI3m7SDqXUuKaTymJYLN6dSGadqp+fVojqJlVoMlbZnlTmu3S0TLwLTJpvBMO1Aw==} engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0} - '@asamuzakjp/dom-selector@6.8.1': - resolution: {integrity: sha512-MvRz1nCqW0fsy8Qz4dnLIvhOlMzqDVBabZx6lH+YywFDdjXhMY37SmpV1XFX3JzG5GWHn63j6HX6QPr3lZXHvQ==} + '@asamuzakjp/dom-selector@7.0.3': + resolution: {integrity: sha512-Q6mU0Z6bfj6YvnX2k9n0JxiIwrCFN59x/nWmYQnAqP000ruX/yV+5bp/GRcF5T8ncvfwJQ7fgfP74DlpKExILA==} + engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0} '@asamuzakjp/nwsapi@2.3.9': resolution: {integrity: sha512-n8GuYSrI9bF7FFZ/SjhwevlHc8xaVlb/7HmHelnc/PZXBD2ZR49NnN9sMMuDdEGPeeRQ5d0hqlSlEpgCX3Wl0Q==} @@ -4571,10 +4569,6 @@ packages: engines: {node: '>=4'} hasBin: true - cssstyle@6.2.0: - resolution: {integrity: sha512-Fm5NvhYathRnXNVndkUsCCuR63DCLVVwGOOwQw782coXFi5HhkXdu289l59HlXZBawsyNccXfWRYvLzcDCdDig==} - engines: {node: '>=20'} - custom-event@1.0.1: resolution: {integrity: sha512-GAj5FOq0Hd+RsCGVJxZuKaIDXDf3h6GQoNEjFgbLLI/trgtavwUbSnZ5pVfg27DVCaWjIohryS0JFwIJyT2cMg==} @@ -5975,9 +5969,9 @@ packages: jsbn@0.1.1: resolution: {integrity: sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==} - jsdom@28.1.0: - resolution: {integrity: sha512-0+MoQNYyr2rBHqO1xilltfDjV9G7ymYGlAUazgcDLQaUf8JDHbuGwsxN6U9qWaElZ4w1B2r7yEGIL3GdeW3Rug==} - engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0} + jsdom@29.0.0: + resolution: {integrity: sha512-9FshNB6OepopZ08unmmGpsF7/qCjxGPbo3NbgfJAnPeHXnsODE9WWffXZtRFRFe0ntzaAOcSKNJFz8wiyvF1jQ==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24.0.0} peerDependencies: canvas: ^3.0.0 peerDependenciesMeta: @@ -8388,8 +8382,6 @@ packages: snapshots: - '@acemir/cssom@0.9.31': {} - '@actions/core@3.0.0': dependencies: '@actions/exec': 3.0.0 @@ -8673,7 +8665,7 @@ snapshots: '@csstools/css-tokenizer': 4.0.0 lru-cache: 11.2.7 - '@asamuzakjp/dom-selector@6.8.1': + '@asamuzakjp/dom-selector@7.0.3': dependencies: '@asamuzakjp/nwsapi': 2.3.9 bidi-js: 1.0.3 @@ -11687,7 +11679,7 @@ snapshots: dependencies: vite: 7.3.1(@types/node@24.12.0)(jiti@2.6.1)(less@4.6.4)(sass@1.98.0)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) - '@vitest/coverage-v8@4.1.0(vitest@4.1.0(@opentelemetry/api@1.9.0)(@types/node@24.12.0)(jiti@2.6.1)(jsdom@28.1.0)(less@4.6.4)(sass@1.98.0)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))': + '@vitest/coverage-v8@4.1.0(vitest@4.1.0(@opentelemetry/api@1.9.0)(@types/node@24.12.0)(jiti@2.6.1)(jsdom@29.0.0)(less@4.6.4)(sass@1.98.0)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))': dependencies: '@bcoe/v8-coverage': 1.0.2 '@vitest/utils': 4.1.0 @@ -11699,7 +11691,7 @@ snapshots: obug: 2.1.1 std-env: 4.0.0 tinyrainbow: 3.1.0 - vitest: 4.1.0(@opentelemetry/api@1.9.0)(@types/node@24.12.0)(jiti@2.6.1)(jsdom@28.1.0)(less@4.6.4)(sass@1.98.0)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) + vitest: 4.1.0(@opentelemetry/api@1.9.0)(@types/node@24.12.0)(jiti@2.6.1)(jsdom@29.0.0)(less@4.6.4)(sass@1.98.0)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) '@vitest/expect@4.1.0': dependencies: @@ -12648,13 +12640,6 @@ snapshots: cssesc@3.0.0: {} - cssstyle@6.2.0: - dependencies: - '@asamuzakjp/css-color': 5.0.1 - '@csstools/css-syntax-patches-for-csstree': 1.1.1(css-tree@3.2.1) - css-tree: 3.2.1 - lru-cache: 11.2.7 - custom-event@1.0.1: {} dashdash@1.14.1: @@ -14288,19 +14273,19 @@ snapshots: jsbn@0.1.1: {} - jsdom@28.1.0: + jsdom@29.0.0: dependencies: - '@acemir/cssom': 0.9.31 - '@asamuzakjp/dom-selector': 6.8.1 + '@asamuzakjp/css-color': 5.0.1 + '@asamuzakjp/dom-selector': 7.0.3 '@bramus/specificity': 2.4.2 + '@csstools/css-syntax-patches-for-csstree': 1.1.1(css-tree@3.2.1) '@exodus/bytes': 1.15.0 - cssstyle: 6.2.0 + css-tree: 3.2.1 data-urls: 7.0.0 decimal.js: 10.6.0 html-encoding-sniffer: 6.0.0 - http-proxy-agent: 7.0.2 - https-proxy-agent: 7.0.6(supports-color@10.2.2) is-potential-custom-element-name: 1.0.1 + lru-cache: 11.2.7 parse5: 8.0.0 saxes: 6.0.0 symbol-tree: 3.2.4 @@ -14313,7 +14298,6 @@ snapshots: xml-name-validator: 5.0.0 transitivePeerDependencies: - '@noble/hashes' - - supports-color jsesc@3.1.0: {} @@ -16757,7 +16741,7 @@ snapshots: tsx: 4.21.0 yaml: 2.8.2 - vitest@4.1.0(@opentelemetry/api@1.9.0)(@types/node@24.12.0)(jiti@2.6.1)(jsdom@28.1.0)(less@4.6.4)(sass@1.98.0)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2): + vitest@4.1.0(@opentelemetry/api@1.9.0)(@types/node@24.12.0)(jiti@2.6.1)(jsdom@29.0.0)(less@4.6.4)(sass@1.98.0)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2): dependencies: '@vitest/expect': 4.1.0 '@vitest/mocker': 4.1.0(vite@7.3.1(@types/node@24.12.0)(jiti@2.6.1)(less@4.6.4)(sass@1.98.0)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)) @@ -16782,7 +16766,7 @@ snapshots: optionalDependencies: '@opentelemetry/api': 1.9.0 '@types/node': 24.12.0 - jsdom: 28.1.0 + jsdom: 29.0.0 transitivePeerDependencies: - jiti - less From cd24d7165e458bbbf1d1ea7e3d283e9a833e1de6 Mon Sep 17 00:00:00 2001 From: SkyZeroZx <73321943+SkyZeroZx@users.noreply.github.com> Date: Tue, 17 Mar 2026 18:27:53 -0500 Subject: [PATCH 151/226] docs: update references from `app.component` to `app` to match the style guide --- packages/schematics/angular/application/schema.json | 4 ++-- packages/schematics/angular/ng-new/schema.json | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/schematics/angular/application/schema.json b/packages/schematics/angular/application/schema.json index f047232c23cc..83df1b163873 100644 --- a/packages/schematics/angular/application/schema.json +++ b/packages/schematics/angular/application/schema.json @@ -21,13 +21,13 @@ "x-prompt": "What name would you like to use for the application?" }, "inlineStyle": { - "description": "Include the styles for the root component directly within the `app.component.ts` file. Only CSS styles can be included inline. By default, a separate stylesheet file (e.g., `app.component.css`) is created.", + "description": "Include the styles for the root component directly within the `app.ts` file. Only CSS styles can be included inline. By default, a separate stylesheet file (e.g., `app.css`) is created.", "type": "boolean", "alias": "s", "x-user-analytics": "ep.ng_inline_style" }, "inlineTemplate": { - "description": "Include the HTML template for the root component directly within the `app.component.ts` file. By default, a separate template file (e.g., `app.component.html`) is created.", + "description": "Include the HTML template for the root component directly within the `app.ts` file. By default, a separate template file (e.g., `app.html`) is created.", "type": "boolean", "alias": "t", "x-user-analytics": "ep.ng_inline_template" diff --git a/packages/schematics/angular/ng-new/schema.json b/packages/schematics/angular/ng-new/schema.json index 3bbb0eb3dee4..30957b9342c1 100644 --- a/packages/schematics/angular/ng-new/schema.json +++ b/packages/schematics/angular/ng-new/schema.json @@ -59,13 +59,13 @@ "default": "projects" }, "inlineStyle": { - "description": "Include the styles for the initial application's root component directly within the `app.component.ts` file. By default, a separate stylesheet file (e.g., `app.component.css`) is created.", + "description": "Include the styles for the initial application's root component directly within the `app.ts` file. By default, a separate stylesheet file (e.g., `app.css`) is created.", "type": "boolean", "alias": "s", "x-user-analytics": "ep.ng_inline_style" }, "inlineTemplate": { - "description": "Include the HTML template for the initial application's root component directly within the `app.component.ts` file. By default, a separate template file (e.g., `app.component.html`) is created.", + "description": "Include the HTML template for the initial application's root component directly within the `app.ts` file. By default, a separate template file (e.g., `app.html`) is created.", "type": "boolean", "alias": "t", "x-user-analytics": "ep.ng_inline_template" From e39db2bb7c74466845469160a2dff0f491281445 Mon Sep 17 00:00:00 2001 From: Doug Parker <dgp1130@users.noreply.github.com> Date: Wed, 18 Mar 2026 12:21:07 -0700 Subject: [PATCH 152/226] docs: release notes for the v21.2.3 release --- CHANGELOG.md | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 874e93c24312..239824e9e017 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,30 @@ +<a name="21.2.3"></a> + +# 21.2.3 (2026-03-18) + +### @angular/cli + +| Commit | Type | Description | +| --------------------------------------------------------------------------------------------------- | ---- | ------------------------------------------------ | +| [1505164bb](https://github.com/angular/angular-cli/commit/1505164bb2703254a2b25a76c7b3a1ff2fd76a85) | fix | use parsed package name for migrate-only updates | + +### @angular/build + +| Commit | Type | Description | +| --------------------------------------------------------------------------------------------------- | ---- | ------------------------------------------------------------------------ | +| [75fa94cad](https://github.com/angular/angular-cli/commit/75fa94cad26b0947e687ef94d50653cb7651d18c) | fix | alias createRequire banner import to avoid duplicate binding | +| [d009aa1ec](https://github.com/angular/angular-cli/commit/d009aa1ec7411b67b61b81003eb6181cde6f306f) | fix | only use external packages for polyfills when no local files are present | + +### @angular/ssr + +| Commit | Type | Description | +| --------------------------------------------------------------------------------------------------- | ---- | ----------------------------------------------------- | +| [f3e0e82c2](https://github.com/angular/angular-cli/commit/f3e0e82c2cecc3d9ebb5b8acc6e64d2d88c4efbd) | fix | disallow x-forwarded-prefix starting with a backslash | +| [b8bcd59b4](https://github.com/angular/angular-cli/commit/b8bcd59b40496369a57de0b0b39d85f323af30c7) | fix | ensure unique values in redirect response Vary header | +| [84385411d](https://github.com/angular/angular-cli/commit/84385411d4542d60d635aea9063c1fd751deb607) | fix | support custom headers in redirect responses | + +<!-- CHANGELOG SPLIT MARKER --> + <a name="22.0.0-next.1"></a> # 22.0.0-next.1 (2026-03-11) From 110a2278dc67f92f90a2535ea2616e6d26989ddf Mon Sep 17 00:00:00 2001 From: Doug Parker <dgp1130@users.noreply.github.com> Date: Wed, 18 Mar 2026 12:32:52 -0700 Subject: [PATCH 153/226] release: cut the v22.0.0-next.2 release --- CHANGELOG.md | 33 +++++++++++++++++++++++++++++++++ package.json | 2 +- 2 files changed, 34 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 239824e9e017..a1fcf578cff3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,36 @@ +<a name="22.0.0-next.2"></a> + +# 22.0.0-next.2 (2026-03-18) + +### @angular/cli + +| Commit | Type | Description | +| --------------------------------------------------------------------------------------------------- | ---- | ------------------------------------------------ | +| [c9f07db8f](https://github.com/angular/angular-cli/commit/c9f07db8fcb0b3f8400fbbf0e131be7f9857a987) | fix | use parsed package name for migrate-only updates | + +### @schematics/angular + +| Commit | Type | Description | +| --------------------------------------------------------------------------------------------------- | ---- | --------------------------------------------- | +| [6572a6944](https://github.com/angular/angular-cli/commit/6572a69443356ff0022e6ce162915125fee0e3bb) | fix | default components to OnPush change detection | + +### @angular/build + +| Commit | Type | Description | +| --------------------------------------------------------------------------------------------------- | ---- | ------------------------------------------------------------------------ | +| [9b33e1781](https://github.com/angular/angular-cli/commit/9b33e1781328d3b42665145bf580fb8e06c8ad2b) | fix | alias createRequire banner import to avoid duplicate binding | +| [4643a8a3b](https://github.com/angular/angular-cli/commit/4643a8a3b3e2a3bcf7baae9f812ae8a9ef10ebad) | fix | only use external packages for polyfills when no local files are present | + +### @angular/ssr + +| Commit | Type | Description | +| --------------------------------------------------------------------------------------------------- | ---- | ----------------------------------------------------- | +| [4d564f66f](https://github.com/angular/angular-cli/commit/4d564f66f694011724d4933bf025f1c4fed55bca) | fix | disallow x-forwarded-prefix starting with a backslash | +| [ff1160e30](https://github.com/angular/angular-cli/commit/ff1160e3015eb321971e398cbedff80f4c053166) | fix | ensure unique values in redirect response Vary header | +| [998b8298e](https://github.com/angular/angular-cli/commit/998b8298e3106c95d77ced8090ab815365c462c7) | fix | support custom headers in redirect responses | + +<!-- CHANGELOG SPLIT MARKER --> + <a name="21.2.3"></a> # 21.2.3 (2026-03-18) diff --git a/package.json b/package.json index 5088d9bb328a..227c537ff21a 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@angular/devkit-repo", - "version": "22.0.0-next.1", + "version": "22.0.0-next.2", "private": true, "description": "Software Development Kit for Angular", "keywords": [ From 9222725a4ffc0e97c974346653e7e5f9cf34049b Mon Sep 17 00:00:00 2001 From: Alan Agius <17563226+alan-agius4@users.noreply.github.com> Date: Thu, 19 Mar 2026 13:37:00 +0000 Subject: [PATCH 154/226] docs: release notes for the v20.3.21 release --- CHANGELOG.md | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index a1fcf578cff3..63074d7002e1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,17 @@ +<a name="20.3.21"></a> + +# 20.3.21 (2026-03-19) + +### @angular/ssr + +| Commit | Type | Description | +| --------------------------------------------------------------------------------------------------- | ---- | ----------------------------------------------------- | +| [1dc6992a5](https://github.com/angular/angular-cli/commit/1dc6992a5ae6c5a1f16f22f6c94690d5cf218c38) | fix | disallow x-forwarded-prefix starting with a backslash | +| [0a2ff0b2b](https://github.com/angular/angular-cli/commit/0a2ff0b2b3aceb228c9447c19fb762df742d7265) | fix | ensure unique values in redirect response Vary header | +| [cdbac82a8](https://github.com/angular/angular-cli/commit/cdbac82a85b35f24c70a062eeb8a13b521831019) | fix | support custom headers in redirect responses | + +<!-- CHANGELOG SPLIT MARKER --> + <a name="22.0.0-next.2"></a> # 22.0.0-next.2 (2026-03-18) From 34fe246734b9750cf70d3e18058763d77f12ddcd Mon Sep 17 00:00:00 2001 From: Angular Robot <angular-robot@google.com> Date: Thu, 19 Mar 2026 06:22:02 +0000 Subject: [PATCH 155/226] build: update all github actions See associated pull request for more information. --- .github/workflows/codeql.yml | 4 ++-- .github/workflows/pr.yml | 4 ++-- .github/workflows/scorecard.yml | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml index f8515e9bb8c8..73124eebf3c9 100644 --- a/.github/workflows/codeql.yml +++ b/.github/workflows/codeql.yml @@ -23,12 +23,12 @@ jobs: with: persist-credentials: false - name: Initialize CodeQL - uses: github/codeql-action/init@0d579ffd059c29b07949a3cce3983f0780820c98 # v4.32.6 + uses: github/codeql-action/init@b1bff81932f5cdfc8695c7752dcee935dcd061c8 # v4.33.0 with: languages: javascript-typescript build-mode: none config-file: .github/codeql/config.yml - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@0d579ffd059c29b07949a3cce3983f0780820c98 # v4.32.6 + uses: github/codeql-action/analyze@b1bff81932f5cdfc8695c7752dcee935dcd061c8 # v4.33.0 with: category: '/language:javascript-typescript' diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml index 47c17711832a..70e5240d9e8b 100644 --- a/.github/workflows/pr.yml +++ b/.github/workflows/pr.yml @@ -23,7 +23,7 @@ jobs: - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 with: persist-credentials: false - - uses: dorny/paths-filter@de90cc6fb38fc0963ad72b210f1f284cd68cea36 # v3.0.2 + - uses: dorny/paths-filter@d1c1ffe0248fe513906c8e24db8ea791d46f8590 # v3.0.3 id: filter with: filters: | @@ -38,7 +38,7 @@ jobs: - name: Setup Bazel uses: angular/dev-infra/github-actions/bazel/setup@9de194d77b66b6b3294e0f041e29985d2916e911 - name: Setup ESLint Caching - uses: actions/cache@cdf6c1fa76f9f475f3d7449005a359c84ca0f306 # v5.0.3 + uses: actions/cache@668228422ae6a00e4ad889ee87cd7109ec5666a7 # v5.0.4 with: path: .eslintcache key: ${{ runner.os }}-${{ hashFiles('.eslintrc.json') }} diff --git a/.github/workflows/scorecard.yml b/.github/workflows/scorecard.yml index ed72a6906f0c..8ffd6aa43a14 100644 --- a/.github/workflows/scorecard.yml +++ b/.github/workflows/scorecard.yml @@ -46,6 +46,6 @@ jobs: # Upload the results to GitHub's code scanning dashboard. - name: 'Upload to code-scanning' - uses: github/codeql-action/upload-sarif@0d579ffd059c29b07949a3cce3983f0780820c98 # v4.32.6 + uses: github/codeql-action/upload-sarif@b1bff81932f5cdfc8695c7752dcee935dcd061c8 # v4.33.0 with: sarif_file: results.sarif From 2678f5fb5a15c7abb5c119e97efcf1f5d7183cbf Mon Sep 17 00:00:00 2001 From: Angular Robot <angular-robot@google.com> Date: Thu, 19 Mar 2026 06:22:55 +0000 Subject: [PATCH 156/226] build: update dependency aspect_rules_ts to v3.8.7 See associated pull request for more information. --- MODULE.bazel | 2 +- MODULE.bazel.lock | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/MODULE.bazel b/MODULE.bazel index 0406e51609b6..8651f5d9383e 100644 --- a/MODULE.bazel +++ b/MODULE.bazel @@ -8,7 +8,7 @@ bazel_dep(name = "platforms", version = "1.0.0") bazel_dep(name = "yq.bzl", version = "0.3.5") bazel_dep(name = "rules_nodejs", version = "6.7.3") bazel_dep(name = "aspect_rules_js", version = "3.0.3") -bazel_dep(name = "aspect_rules_ts", version = "3.8.6") +bazel_dep(name = "aspect_rules_ts", version = "3.8.7") bazel_dep(name = "rules_pkg", version = "1.2.0") bazel_dep(name = "rules_cc", version = "0.2.17") bazel_dep(name = "jq.bzl", version = "0.6.1") diff --git a/MODULE.bazel.lock b/MODULE.bazel.lock index 9d15a50582cf..9c1f883a5e30 100644 --- a/MODULE.bazel.lock +++ b/MODULE.bazel.lock @@ -25,7 +25,6 @@ "https://bcr.bazel.build/modules/aspect_rules_js/2.0.0/MODULE.bazel": "b45b507574aa60a92796e3e13c195cd5744b3b8aff516a9c0cb5ae6a048161c5", "https://bcr.bazel.build/modules/aspect_rules_js/3.0.3/MODULE.bazel": "28a30e8fc33bf64a67835d64d124f6e05a7d59648dcb27b110fb3502f761e503", "https://bcr.bazel.build/modules/aspect_rules_js/3.0.3/source.json": "bb8fff9a304452e1042af9522ad1d54d6f1d1fdf71c5127deadb6fd156654193", - "https://bcr.bazel.build/modules/aspect_rules_ts/3.8.6/MODULE.bazel": "371bacab13c9c36323384b56c7cabfde1982b69674e78729e1ddd1edd54d984e", "https://bcr.bazel.build/modules/aspect_rules_ts/3.8.7/MODULE.bazel": "830f8a53bb9f1139c24006a90ddc0230481326d69fa847eb00daf8eaae118724", "https://bcr.bazel.build/modules/aspect_rules_ts/3.8.7/source.json": "95549d64e28f3e4e3648cc037cefdac01ec3b0f58fced2409c286784e82ad0f0", "https://bcr.bazel.build/modules/aspect_tools_telemetry/0.2.6/MODULE.bazel": "cafb8781ad591bc57cc765dca5fefab08cf9f65af363d162b79d49205c7f8af7", From ec10eb365261549c2181efa98a494a749444a787 Mon Sep 17 00:00:00 2001 From: Charles Lyding <19598772+clydin@users.noreply.github.com> Date: Thu, 19 Mar 2026 17:54:21 -0400 Subject: [PATCH 157/226] fix(@angular/build): warn when vitest watch config conflicts with builder Added a warning in the `angular:vitest-configuration` plugin to alert users if the `watch` option specified in their `vitest.config.ts` differs from the Angular CLI builder's `--watch` option. Because the Angular CLI's build system and file watcher drives the execution, the Vitest-specific `watch` option is overridden and has no effect. --- .../unit-test/runners/vitest/executor.ts | 1 + .../unit-test/runners/vitest/plugins.ts | 9 +++++ .../behavior/runner-config-vitest_spec.ts | 33 +++++++++++++++++++ 3 files changed, 43 insertions(+) diff --git a/packages/angular/build/src/builders/unit-test/runners/vitest/executor.ts b/packages/angular/build/src/builders/unit-test/runners/vitest/executor.ts index 38156e876994..c5b70e9a2487 100644 --- a/packages/angular/build/src/builders/unit-test/runners/vitest/executor.ts +++ b/packages/angular/build/src/builders/unit-test/runners/vitest/executor.ts @@ -377,6 +377,7 @@ export class VitestExecutor implements TestExecutor { setupFiles: testSetupFiles, projectPlugins, include, + watch, }), ], }; diff --git a/packages/angular/build/src/builders/unit-test/runners/vitest/plugins.ts b/packages/angular/build/src/builders/unit-test/runners/vitest/plugins.ts index 9abe0d7be404..bd8a6926bfd6 100644 --- a/packages/angular/build/src/builders/unit-test/runners/vitest/plugins.ts +++ b/packages/angular/build/src/builders/unit-test/runners/vitest/plugins.ts @@ -46,6 +46,7 @@ interface VitestConfigPluginOptions { projectPlugins: Exclude<UserWorkspaceConfig['plugins'], undefined>; include: string[]; optimizeDepsInclude: string[]; + watch: boolean; } async function findTestEnvironment( @@ -97,6 +98,14 @@ export async function createVitestConfigPlugin( delete testConfig.include; } + if (testConfig?.watch !== undefined && testConfig.watch !== options.watch) { + this.warn( + `The "test.watch" option in the Vitest configuration file is overridden by the builder's ` + + `watch option. Please use the Angular CLI "--watch" option to enable or disable watch mode.`, + ); + delete testConfig.watch; + } + // Merge user-defined plugins from the Vitest config with the CLI's internal plugins. if (config.plugins) { const userPlugins = config.plugins.filter( diff --git a/packages/angular/build/src/builders/unit-test/tests/behavior/runner-config-vitest_spec.ts b/packages/angular/build/src/builders/unit-test/tests/behavior/runner-config-vitest_spec.ts index 603c69f533ea..49c5ab284237 100644 --- a/packages/angular/build/src/builders/unit-test/tests/behavior/runner-config-vitest_spec.ts +++ b/packages/angular/build/src/builders/unit-test/tests/behavior/runner-config-vitest_spec.ts @@ -290,6 +290,39 @@ describeBuilder(execute, UNIT_TEST_BUILDER_INFO, (harness) => { // ); }); + it('should warn and ignore "test.watch" option from runnerConfig file', async () => { + harness.useTarget('test', { + ...BASE_OPTIONS, + watch: false, + runnerConfig: 'vitest.config.ts', + }); + + harness.writeFile( + 'vitest.config.ts', + ` + import { defineConfig } from 'vitest/config'; + export default defineConfig({ + test: { + watch: true, + }, + }); + `, + ); + + const { result, logs } = await harness.executeOnce(); + expect(result?.success).toBeTrue(); + + // TODO: Re-enable once Vite logs are remapped through build system + // expect(logs).toContain( + // jasmine.objectContaining({ + // level: 'warn', + // message: jasmine.stringMatching( + // 'The "test.watch" option in the Vitest configuration file is overridden by the builder\\'s watch option.', + // ), + // }), + // ); + }); + it(`should append "test.setupFiles" (string) from runnerConfig to the CLI's setup`, async () => { harness.useTarget('test', { ...BASE_OPTIONS, From 1a8376bee9b7683b84c2ae50d08e50d5c5c7b99a Mon Sep 17 00:00:00 2001 From: Charles Lyding <19598772+clydin@users.noreply.github.com> Date: Thu, 19 Mar 2026 17:42:36 -0400 Subject: [PATCH 158/226] fix(@angular/build): remove default for unit-test coverage option Removing the default value of `false` for the `coverage` schema option in the unit-test builder. When a default was present, it forced the coverage check in the Vitest plugins to override any user-provided `coverage: { enabled: true }` values set within a custom `vitest.config.ts`. Removing the default explicitly allows the option to be `undefined`, respecting the fallback behavior of the runner configuration. The description was also updated to explicitly document how the Vitest runner resolves the coverage configuration when the builder flag is omitted. --- .../build/src/builders/unit-test/schema.json | 3 +-- .../behavior/runner-config-vitest_spec.ts | 25 +++++++++++++++++++ 2 files changed, 26 insertions(+), 2 deletions(-) diff --git a/packages/angular/build/src/builders/unit-test/schema.json b/packages/angular/build/src/builders/unit-test/schema.json index 951fd5a29e73..46b9b5fb6276 100644 --- a/packages/angular/build/src/builders/unit-test/schema.json +++ b/packages/angular/build/src/builders/unit-test/schema.json @@ -75,8 +75,7 @@ }, "coverage": { "type": "boolean", - "description": "Enables coverage reporting for tests.", - "default": false + "description": "Enables coverage reporting for tests. If not specified, the coverage configuration from a runner configuration file will be used if present. Otherwise, coverage is disabled by default." }, "coverageInclude": { "type": "array", diff --git a/packages/angular/build/src/builders/unit-test/tests/behavior/runner-config-vitest_spec.ts b/packages/angular/build/src/builders/unit-test/tests/behavior/runner-config-vitest_spec.ts index 49c5ab284237..fcfa3644035f 100644 --- a/packages/angular/build/src/builders/unit-test/tests/behavior/runner-config-vitest_spec.ts +++ b/packages/angular/build/src/builders/unit-test/tests/behavior/runner-config-vitest_spec.ts @@ -92,6 +92,31 @@ describeBuilder(execute, UNIT_TEST_BUILDER_INFO, (harness) => { harness.expectFile('coverage/test/coverage-final.json').toExist(); }); + it('should enable coverage when set in runnerConfig file without builder option', async () => { + harness.useTarget('test', { + ...BASE_OPTIONS, + runnerConfig: 'vitest.config.ts', + }); + + harness.writeFile( + 'vitest.config.ts', + ` + import { defineConfig } from 'vitest/config'; + export default defineConfig({ + test: { + coverage: { + enabled: true, + }, + }, + }); + `, + ); + + const { result } = await harness.executeOnce(); + expect(result?.success).toBeTrue(); + harness.expectFile('coverage/test/coverage-final.json').toExist(); + }); + it('should exclude test files based on runnerConfig file', async () => { harness.useTarget('test', { ...BASE_OPTIONS, From a203dcf1d9a6d544cbae867aa949ab0582e60a88 Mon Sep 17 00:00:00 2001 From: Charles Lyding <19598772+clydin@users.noreply.github.com> Date: Fri, 20 Mar 2026 11:20:56 -0400 Subject: [PATCH 159/226] fix(@angular/build): warn about performance of test.exclude in vitest configuration When a user specifies `test.exclude` inside their `vitest.config.ts`, the tests are correctly excluded during Vitest's execution phase. However, because the Angular CLI extracts test files earlier in the process using its own `exclude` builder option, those skipped tests are still unnecessarily compiled by esbuild in-memory. This adds a warning to explicitly notify developers of this hidden build overhead and suggests using the Angular CLI `exclude` option instead to improve performance. --- .../unit-test/runners/vitest/plugins.ts | 8 +++++ .../behavior/runner-config-vitest_spec.ts | 32 +++++++++++++++++++ 2 files changed, 40 insertions(+) diff --git a/packages/angular/build/src/builders/unit-test/runners/vitest/plugins.ts b/packages/angular/build/src/builders/unit-test/runners/vitest/plugins.ts index bd8a6926bfd6..e526e5fa3f83 100644 --- a/packages/angular/build/src/builders/unit-test/runners/vitest/plugins.ts +++ b/packages/angular/build/src/builders/unit-test/runners/vitest/plugins.ts @@ -106,6 +106,14 @@ export async function createVitestConfigPlugin( delete testConfig.watch; } + if (testConfig?.exclude) { + this.warn( + 'The "test.exclude" option in the Vitest configuration file is evaluated after ' + + 'tests are compiled. For better build performance, please use the Angular CLI ' + + '"exclude" option instead.', + ); + } + // Merge user-defined plugins from the Vitest config with the CLI's internal plugins. if (config.plugins) { const userPlugins = config.plugins.filter( diff --git a/packages/angular/build/src/builders/unit-test/tests/behavior/runner-config-vitest_spec.ts b/packages/angular/build/src/builders/unit-test/tests/behavior/runner-config-vitest_spec.ts index fcfa3644035f..a2c626828b6f 100644 --- a/packages/angular/build/src/builders/unit-test/tests/behavior/runner-config-vitest_spec.ts +++ b/packages/angular/build/src/builders/unit-test/tests/behavior/runner-config-vitest_spec.ts @@ -348,6 +348,38 @@ describeBuilder(execute, UNIT_TEST_BUILDER_INFO, (harness) => { // ); }); + it('should warn about performance when "test.exclude" option is in runnerConfig file', async () => { + harness.useTarget('test', { + ...BASE_OPTIONS, + runnerConfig: 'vitest.config.ts', + }); + + harness.writeFile( + 'vitest.config.ts', + ` + import { defineConfig } from 'vitest/config'; + export default defineConfig({ + test: { + exclude: ['src/app/non-existent.spec.ts'], + }, + }); + `, + ); + + const { result, logs } = await harness.executeOnce(); + expect(result?.success).toBeTrue(); + + // TODO: Re-enable once Vite logs are remapped through build system + // expect(logs).toContain( + // jasmine.objectContaining({ + // level: 'warn', + // message: jasmine.stringMatching( + // 'The "test.exclude" option in the Vitest configuration file is evaluated after', + // ), + // }), + // ); + }); + it(`should append "test.setupFiles" (string) from runnerConfig to the CLI's setup`, async () => { harness.useTarget('test', { ...BASE_OPTIONS, From 01bd5d06410719f66fcabb0bfd04c809e7db12f7 Mon Sep 17 00:00:00 2001 From: Charles Lyding <19598772+clydin@users.noreply.github.com> Date: Fri, 20 Mar 2026 11:44:48 -0400 Subject: [PATCH 160/226] fix(@angular/build): deduplicate and merge coverage excludes with vitest Previously, providing a --coverage-exclude CLI option to the builder would completely clobber any custom coverage.exclude items defined natively within vitest.config.ts. This correctly merges both sources using an internal Set to prevent duplicate exclusions and preserves configurations so developers can combine global ignores alongside CLI-specific boundaries. --- .../unit-test/runners/vitest/plugins.ts | 18 ++++--- .../behavior/runner-config-vitest_spec.ts | 53 +++++++++++++++++++ 2 files changed, 65 insertions(+), 6 deletions(-) diff --git a/packages/angular/build/src/builders/unit-test/runners/vitest/plugins.ts b/packages/angular/build/src/builders/unit-test/runners/vitest/plugins.ts index e526e5fa3f83..3eb47f1a459b 100644 --- a/packages/angular/build/src/builders/unit-test/runners/vitest/plugins.ts +++ b/packages/angular/build/src/builders/unit-test/runners/vitest/plugins.ts @@ -406,6 +406,9 @@ async function generateCoverageOption( projectName: string, ): Promise<VitestCoverageOption> { let defaultExcludes: string[] = []; + // When a coverage exclude option is provided, Vitest's default coverage excludes + // will be overridden. To retain them, we manually fetch the defaults to append to the + // user's provided exclusions. if (optionsCoverage.exclude) { try { const vitestConfig = await import('vitest/config'); @@ -437,12 +440,15 @@ async function generateCoverageOption( // Special handling for `exclude`/`reporters` due to an undefined value causing upstream failures ...(optionsCoverage.exclude ? { - exclude: [ - // Augment the default exclude https://vitest.dev/config/#coverage-exclude - // with the user defined exclusions - ...optionsCoverage.exclude, - ...defaultExcludes, - ], + exclude: Array.from( + new Set([ + // Augment the default exclude https://vitest.dev/config/#coverage-exclude + // with the user defined exclusions + ...(configCoverage?.exclude || []), + ...optionsCoverage.exclude, + ...defaultExcludes, + ]), + ), } : {}), ...(optionsCoverage.reporters diff --git a/packages/angular/build/src/builders/unit-test/tests/behavior/runner-config-vitest_spec.ts b/packages/angular/build/src/builders/unit-test/tests/behavior/runner-config-vitest_spec.ts index a2c626828b6f..5fbace9076e6 100644 --- a/packages/angular/build/src/builders/unit-test/tests/behavior/runner-config-vitest_spec.ts +++ b/packages/angular/build/src/builders/unit-test/tests/behavior/runner-config-vitest_spec.ts @@ -164,6 +164,59 @@ describeBuilder(execute, UNIT_TEST_BUILDER_INFO, (harness) => { expect(results.numPassedTests).toBe(1); }); + it('should correctly merge coverage.exclude arrays from builder and runner options', async () => { + harness.useTarget('test', { + ...BASE_OPTIONS, + coverage: true, + runnerConfig: 'vitest.config.ts', + coverageExclude: ['src/app/cli-excluded.ts'], + }); + + harness.writeFile( + 'vitest.config.ts', + ` + import { defineConfig } from 'vitest/config'; + export default defineConfig({ + test: { + coverage: { + exclude: ['src/app/config-excluded.ts'], + }, + }, + }); + `, + ); + + // Create two files that would normally be covered + harness.writeFile('src/app/cli-excluded.ts', 'export const cliExcluded = true;'); + harness.writeFile('src/app/config-excluded.ts', 'export const configExcluded = true;'); + + // Update the test file to import them so they're picked up by coverage + harness.writeFile( + 'src/app/app.component.spec.ts', + ` + import { test, expect } from 'vitest'; + import './cli-excluded'; + import './config-excluded'; + test('should pass', () => { + expect(true).toBe(true); + }); + `, + ); + + const { result } = await harness.executeOnce(); + expect(result?.success).toBeTrue(); + harness.expectFile('coverage/test/coverage-final.json').toExist(); + + const coverageMap = JSON.parse(harness.readFile('coverage/test/coverage-final.json')); + const coveredFiles = Object.keys(coverageMap); + + const hasCliExcluded = coveredFiles.some((f) => f.includes('cli-excluded.ts')); + const hasConfigExcluded = coveredFiles.some((f) => f.includes('config-excluded.ts')); + + expect(hasCliExcluded).withContext('CLI target should be excluded').toBeFalse(); + expect(hasConfigExcluded).withContext('Config file target should be excluded').toBeFalse(); + }); + it('should allow overriding globals to false via runnerConfig file', async () => { harness.useTarget('test', { ...BASE_OPTIONS, From 355ebe8c54b58201c8080543e5e04208599f0947 Mon Sep 17 00:00:00 2001 From: Charles Lyding <19598772+clydin@users.noreply.github.com> Date: Fri, 20 Mar 2026 12:39:31 -0400 Subject: [PATCH 161/226] fix(@angular/build): prevent reporter duplicates by explicitly overriding Vitest configuration When leveraging the Angular CLI to run tests with a specific set of `--reporters`, Vitest's underlying `mergeConfig` logic would normally array-concatenate the CLI reporters with any reporters defined natively inside `vitest.config.ts`. This led to duplicate output processors (e.g. running 'default' twice). By explicitly wiping the original configurations when CLI overrides are present, the CLI now acts as a strict Source-of-Truth array replacer, which is the expected behavior for CI and custom targets. --- .../builders/unit-test/runners/vitest/plugins.ts | 12 ++++++++++++ .../tests/behavior/runner-config-vitest_spec.ts | 15 +++++++++++++++ 2 files changed, 27 insertions(+) diff --git a/packages/angular/build/src/builders/unit-test/runners/vitest/plugins.ts b/packages/angular/build/src/builders/unit-test/runners/vitest/plugins.ts index 3eb47f1a459b..d36f8a05ffa6 100644 --- a/packages/angular/build/src/builders/unit-test/runners/vitest/plugins.ts +++ b/packages/angular/build/src/builders/unit-test/runners/vitest/plugins.ts @@ -82,6 +82,18 @@ export async function createVitestConfigPlugin( async config(config) { const testConfig = config.test; + if (reporters !== undefined) { + delete testConfig?.reporters; + } + + if ( + options.coverage.reporters !== undefined && + testConfig?.coverage && + 'reporter' in testConfig.coverage + ) { + delete testConfig.coverage.reporter; + } + if (testConfig?.projects?.length) { this.warn( 'The "test.projects" option in the Vitest configuration file is not supported. ' + diff --git a/packages/angular/build/src/builders/unit-test/tests/behavior/runner-config-vitest_spec.ts b/packages/angular/build/src/builders/unit-test/tests/behavior/runner-config-vitest_spec.ts index 5fbace9076e6..609d736e00f7 100644 --- a/packages/angular/build/src/builders/unit-test/tests/behavior/runner-config-vitest_spec.ts +++ b/packages/angular/build/src/builders/unit-test/tests/behavior/runner-config-vitest_spec.ts @@ -42,6 +42,21 @@ describeBuilder(execute, UNIT_TEST_BUILDER_INFO, (harness) => { harness.expectFile('vitest-results.xml').toExist(); }); + it('should override reporters defined in runnerConfig file when CLI option is present', async () => { + harness.useTarget('test', { + ...BASE_OPTIONS, + runnerConfig: 'vitest.config.ts', + reporters: ['default'], + }); + + harness.writeFile('vitest.config.ts', VITEST_CONFIG_CONTENT); + + const { result } = await harness.executeOnce(); + expect(result?.success).toBeTrue(); + // The CLI option 'default' should override the 'junit' reporter in VITEST_CONFIG_CONTENT + harness.expectFile('vitest-results.xml').toNotExist(); + }); + it('should use custom reportsDirectory defined in runnerConfig file', async () => { harness.useTarget('test', { ...BASE_OPTIONS, From 65f39d03d68b252d0d507ad8ecbeb3d517680054 Mon Sep 17 00:00:00 2001 From: Alan Agius <17563226+alan-agius4@users.noreply.github.com> Date: Mon, 23 Mar 2026 09:52:31 +0000 Subject: [PATCH 162/226] ci: block esbuild updates due to a regression Version 0.27.4 caused a regression which breaks metadata file See: https://github.com/evanw/esbuild/issues/4420 --- renovate.json | 1 + 1 file changed, 1 insertion(+) diff --git a/renovate.json b/renovate.json index 6b91ffcea750..9992df21ecd6 100644 --- a/renovate.json +++ b/renovate.json @@ -2,6 +2,7 @@ "$schema": "https://docs.renovatebot.com/renovate-schema.json", "baseBranchPatterns": ["main", "21.2.x"], "extends": ["github>angular/dev-infra//renovate-presets/default.json5"], + "ignoreDeps": ["esbuild"], "ignorePaths": ["tests/e2e/assets/**", "tests/schematics/update/packages/**"], "packageRules": [ { From 742a8740d6209c7f6ad53237babbf4ba6ee69d7d Mon Sep 17 00:00:00 2001 From: Alan Agius <17563226+alan-agius4@users.noreply.github.com> Date: Mon, 23 Mar 2026 12:57:12 +0000 Subject: [PATCH 163/226] ci: block esbuild-wasm updates due to a regression Version 0.27.4 caused a regression which breaks metadata file See: https://github.com/evanw/esbuild/issues/4420 --- renovate.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/renovate.json b/renovate.json index 9992df21ecd6..765ab674bcbe 100644 --- a/renovate.json +++ b/renovate.json @@ -2,7 +2,7 @@ "$schema": "https://docs.renovatebot.com/renovate-schema.json", "baseBranchPatterns": ["main", "21.2.x"], "extends": ["github>angular/dev-infra//renovate-presets/default.json5"], - "ignoreDeps": ["esbuild"], + "ignoreDeps": ["esbuild", "esbuild-wasm"], "ignorePaths": ["tests/e2e/assets/**", "tests/schematics/update/packages/**"], "packageRules": [ { From 240870ec5b8cd9ead296851874c7e220aa693902 Mon Sep 17 00:00:00 2001 From: Alan Agius <17563226+alan-agius4@users.noreply.github.com> Date: Mon, 23 Mar 2026 15:44:57 +0000 Subject: [PATCH 164/226] test: ignore HMR disabled console errors The e2e test utility now ignores browser console errors containing the string "Hot Module Replacement is disabled". This prevents tests from failing when running with HMR disabled. --- tests/e2e/utils/puppeteer.ts | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/tests/e2e/utils/puppeteer.ts b/tests/e2e/utils/puppeteer.ts index da0ef79cca2e..d33411938639 100644 --- a/tests/e2e/utils/puppeteer.ts +++ b/tests/e2e/utils/puppeteer.ts @@ -53,7 +53,10 @@ export async function executeBrowserTest(options: BrowserTestOptions = {}) { } }); page.on('pageerror', (err) => { - errors.push(`${err}`); + const error = `${err}`; + if (!error.includes('Hot Module Replacement is disabled')) { + errors.push(error); + } }); await page.goto(url); From 7a3dc2625098bffa3399f1681f293b6b64244277 Mon Sep 17 00:00:00 2001 From: Angular Robot <angular-robot@google.com> Date: Thu, 19 Mar 2026 16:22:38 +0000 Subject: [PATCH 165/226] build: update dorny/paths-filter action to v4 See associated pull request for more information. --- .github/workflows/pr.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml index 70e5240d9e8b..f432be2c9863 100644 --- a/.github/workflows/pr.yml +++ b/.github/workflows/pr.yml @@ -23,7 +23,7 @@ jobs: - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 with: persist-credentials: false - - uses: dorny/paths-filter@d1c1ffe0248fe513906c8e24db8ea791d46f8590 # v3.0.3 + - uses: dorny/paths-filter@fbd0ab8f3e69293af611ebaee6363fc25e6d187d # v4.0.1 id: filter with: filters: | From 1ebdb3c4c24c46fbb41b01a541d173403b2ba7a6 Mon Sep 17 00:00:00 2001 From: Angular Robot <angular-robot@google.com> Date: Mon, 23 Mar 2026 16:12:50 +0000 Subject: [PATCH 166/226] build: update all non-major dependencies See associated pull request for more information. --- modules/testing/builder/package.json | 2 +- package.json | 16 +- packages/angular/build/package.json | 4 +- packages/angular/cli/package.json | 2 +- .../angular_devkit/build_angular/package.json | 8 +- pnpm-lock.yaml | 798 ++++++++++++------ 6 files changed, 564 insertions(+), 266 deletions(-) diff --git a/modules/testing/builder/package.json b/modules/testing/builder/package.json index 0f7682b96ada..208af538e912 100644 --- a/modules/testing/builder/package.json +++ b/modules/testing/builder/package.json @@ -6,7 +6,7 @@ "@angular/ssr": "workspace:*", "@vitest/coverage-v8": "4.1.0", "browser-sync": "3.0.4", - "jsdom": "29.0.0", + "jsdom": "29.0.1", "ng-packagr": "22.0.0-next.0", "rxjs": "7.8.2", "vitest": "4.1.0" diff --git a/package.json b/package.json index 227c537ff21a..7143e92c8c27 100644 --- a/package.json +++ b/package.json @@ -66,7 +66,7 @@ "@rollup/plugin-commonjs": "^29.0.0", "@rollup/plugin-json": "^6.1.0", "@rollup/plugin-node-resolve": "16.0.3", - "@rollup/wasm-node": "4.59.0", + "@rollup/wasm-node": "4.60.0", "@stylistic/eslint-plugin": "^5.0.0", "@tony.ganchev/eslint-plugin-header": "~3.3.1", "@types/babel__core": "7.20.5", @@ -91,13 +91,13 @@ "@types/yargs": "^17.0.20", "@types/yargs-parser": "^21.0.0", "@types/yarnpkg__lockfile": "^1.1.5", - "@typescript-eslint/eslint-plugin": "8.57.0", - "@typescript-eslint/parser": "8.57.0", + "@typescript-eslint/eslint-plugin": "8.57.1", + "@typescript-eslint/parser": "8.57.1", "ajv": "8.18.0", "buffer": "6.0.3", "esbuild": "0.27.3", "esbuild-wasm": "0.27.3", - "eslint": "10.0.3", + "eslint": "10.1.0", "eslint-config-prettier": "10.1.8", "eslint-plugin-import": "2.32.0", "express": "5.2.1", @@ -119,17 +119,17 @@ "lodash": "^4.17.21", "magic-string": "0.30.21", "prettier": "^3.0.0", - "puppeteer": "24.39.1", + "puppeteer": "24.40.0", "quicktype-core": "23.2.6", - "rollup": "4.59.0", + "rollup": "4.60.0", "rollup-license-plugin": "~3.2.0", - "rollup-plugin-dts": "6.4.0", + "rollup-plugin-dts": "6.4.1", "rollup-plugin-sourcemaps2": "0.5.6", "semver": "7.7.4", "source-map-support": "0.5.21", "tslib": "2.8.1", "typescript": "6.0.1-rc", - "undici": "7.24.4", + "undici": "7.24.5", "unenv": "^1.10.0", "verdaccio": "6.3.2", "verdaccio-auth-memory": "^10.0.0", diff --git a/packages/angular/build/package.json b/packages/angular/build/package.json index 7e54d39cfb3d..0f1cb12de94f 100644 --- a/packages/angular/build/package.json +++ b/packages/angular/build/package.json @@ -37,7 +37,7 @@ "parse5-html-rewriting-stream": "8.0.0", "picomatch": "4.0.3", "piscina": "5.1.4", - "rolldown": "1.0.0-rc.9", + "rolldown": "1.0.0-rc.10", "sass": "1.98.0", "semver": "7.7.4", "source-map-support": "0.5.21", @@ -51,7 +51,7 @@ "devDependencies": { "@angular-devkit/core": "workspace:*", "@angular/ssr": "workspace:*", - "jsdom": "29.0.0", + "jsdom": "29.0.1", "less": "4.6.4", "ng-packagr": "22.0.0-next.0", "postcss": "8.5.8", diff --git a/packages/angular/cli/package.json b/packages/angular/cli/package.json index f2f053facab5..6b74742ae8e3 100644 --- a/packages/angular/cli/package.json +++ b/packages/angular/cli/package.json @@ -26,7 +26,7 @@ "@angular-devkit/core": "workspace:0.0.0-PLACEHOLDER", "@angular-devkit/schematics": "workspace:0.0.0-PLACEHOLDER", "@inquirer/prompts": "8.3.2", - "@listr2/prompt-adapter-inquirer": "4.2.1", + "@listr2/prompt-adapter-inquirer": "4.2.2", "@modelcontextprotocol/sdk": "1.27.1", "@schematics/angular": "workspace:0.0.0-PLACEHOLDER", "@yarnpkg/lockfile": "1.1.0", diff --git a/packages/angular_devkit/build_angular/package.json b/packages/angular_devkit/build_angular/package.json index 1242ea933801..f578f1fc6f2a 100644 --- a/packages/angular_devkit/build_angular/package.json +++ b/packages/angular_devkit/build_angular/package.json @@ -18,8 +18,8 @@ "@babel/plugin-transform-async-generator-functions": "7.29.0", "@babel/plugin-transform-async-to-generator": "7.28.6", "@babel/plugin-transform-runtime": "7.29.0", - "@babel/preset-env": "7.29.0", - "@babel/runtime": "7.28.6", + "@babel/preset-env": "7.29.2", + "@babel/runtime": "7.29.2", "@discoveryjs/json-ext": "1.0.0", "@ngtools/webpack": "workspace:0.0.0-PLACEHOLDER", "ansi-colors": "4.1.3", @@ -51,7 +51,7 @@ "semver": "7.7.4", "source-map-loader": "5.0.0", "source-map-support": "0.5.21", - "terser": "5.46.0", + "terser": "5.46.1", "tinyglobby": "0.2.15", "tslib": "2.8.1", "webpack": "5.105.4", @@ -67,7 +67,7 @@ "@angular/ssr": "workspace:*", "browser-sync": "3.0.4", "ng-packagr": "22.0.0-next.0", - "undici": "7.24.4" + "undici": "7.24.5" }, "peerDependencies": { "@angular/compiler-cli": "0.0.0-ANGULAR-FW-PEER-DEP", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index f2223d9eeddb..952115f50b4c 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -72,34 +72,34 @@ importers: version: 8.2.1 '@eslint/compat': specifier: 2.0.3 - version: 2.0.3(eslint@10.0.3(jiti@2.6.1)) + version: 2.0.3(eslint@10.1.0(jiti@2.6.1)) '@eslint/eslintrc': specifier: 3.3.5 version: 3.3.5 '@eslint/js': specifier: 10.0.1 - version: 10.0.1(eslint@10.0.3(jiti@2.6.1)) + version: 10.0.1(eslint@10.1.0(jiti@2.6.1)) '@rollup/plugin-alias': specifier: ^6.0.0 - version: 6.0.0(rollup@4.59.0) + version: 6.0.0(rollup@4.60.0) '@rollup/plugin-commonjs': specifier: ^29.0.0 - version: 29.0.2(rollup@4.59.0) + version: 29.0.2(rollup@4.60.0) '@rollup/plugin-json': specifier: ^6.1.0 - version: 6.1.0(rollup@4.59.0) + version: 6.1.0(rollup@4.60.0) '@rollup/plugin-node-resolve': specifier: 16.0.3 - version: 16.0.3(rollup@4.59.0) + version: 16.0.3(rollup@4.60.0) '@rollup/wasm-node': - specifier: 4.59.0 - version: 4.59.0 + specifier: 4.60.0 + version: 4.60.0 '@stylistic/eslint-plugin': specifier: ^5.0.0 - version: 5.10.0(eslint@10.0.3(jiti@2.6.1)) + version: 5.10.0(eslint@10.1.0(jiti@2.6.1)) '@tony.ganchev/eslint-plugin-header': specifier: ~3.3.1 - version: 3.3.1(eslint@10.0.3(jiti@2.6.1)) + version: 3.3.1(eslint@10.1.0(jiti@2.6.1)) '@types/babel__core': specifier: 7.20.5 version: 7.20.5 @@ -167,11 +167,11 @@ importers: specifier: ^1.1.5 version: 1.1.9 '@typescript-eslint/eslint-plugin': - specifier: 8.57.0 - version: 8.57.0(@typescript-eslint/parser@8.57.0(eslint@10.0.3(jiti@2.6.1))(typescript@6.0.1-rc))(eslint@10.0.3(jiti@2.6.1))(typescript@6.0.1-rc) + specifier: 8.57.1 + version: 8.57.1(@typescript-eslint/parser@8.57.1(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.1-rc))(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.1-rc) '@typescript-eslint/parser': - specifier: 8.57.0 - version: 8.57.0(eslint@10.0.3(jiti@2.6.1))(typescript@6.0.1-rc) + specifier: 8.57.1 + version: 8.57.1(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.1-rc) ajv: specifier: 8.18.0 version: 8.18.0 @@ -185,14 +185,14 @@ importers: specifier: 0.27.3 version: 0.27.3 eslint: - specifier: 10.0.3 - version: 10.0.3(jiti@2.6.1) + specifier: 10.1.0 + version: 10.1.0(jiti@2.6.1) eslint-config-prettier: specifier: 10.1.8 - version: 10.1.8(eslint@10.0.3(jiti@2.6.1)) + version: 10.1.8(eslint@10.1.0(jiti@2.6.1)) eslint-plugin-import: specifier: 2.32.0 - version: 2.32.0(@typescript-eslint/parser@8.57.0(eslint@10.0.3(jiti@2.6.1))(typescript@6.0.1-rc))(eslint@10.0.3(jiti@2.6.1)) + version: 2.32.0(@typescript-eslint/parser@8.57.1(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.1-rc))(eslint@10.1.0(jiti@2.6.1)) express: specifier: 5.2.1 version: 5.2.1 @@ -251,23 +251,23 @@ importers: specifier: ^3.0.0 version: 3.8.1 puppeteer: - specifier: 24.39.1 - version: 24.39.1(bufferutil@4.1.0)(typescript@6.0.1-rc)(utf-8-validate@6.0.6) + specifier: 24.40.0 + version: 24.40.0(bufferutil@4.1.0)(typescript@6.0.1-rc)(utf-8-validate@6.0.6) quicktype-core: specifier: 23.2.6 version: 23.2.6(encoding@0.1.13) rollup: - specifier: 4.59.0 - version: 4.59.0 + specifier: 4.60.0 + version: 4.60.0 rollup-license-plugin: specifier: ~3.2.0 version: 3.2.1 rollup-plugin-dts: - specifier: 6.4.0 - version: 6.4.0(rollup@4.59.0)(typescript@6.0.1-rc) + specifier: 6.4.1 + version: 6.4.1(rollup@4.60.0)(typescript@6.0.1-rc) rollup-plugin-sourcemaps2: specifier: 0.5.6 - version: 0.5.6(@types/node@22.19.15)(rollup@4.59.0) + version: 0.5.6(@types/node@22.19.15)(rollup@4.60.0) semver: specifier: 7.7.4 version: 7.7.4 @@ -281,8 +281,8 @@ importers: specifier: 6.0.1-rc version: 6.0.1-rc undici: - specifier: 7.24.4 - version: 7.24.4 + specifier: 7.24.5 + version: 7.24.5 unenv: specifier: ^1.10.0 version: 1.10.0 @@ -312,13 +312,13 @@ importers: version: link:../../../packages/angular/ssr '@vitest/coverage-v8': specifier: 4.1.0 - version: 4.1.0(vitest@4.1.0(@opentelemetry/api@1.9.0)(@types/node@24.12.0)(jiti@2.6.1)(jsdom@29.0.0)(less@4.6.4)(sass@1.98.0)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)) + version: 4.1.0(vitest@4.1.0(@opentelemetry/api@1.9.0)(@types/node@24.12.0)(jiti@2.6.1)(jsdom@29.0.1)(less@4.6.4)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2)) browser-sync: specifier: 3.0.4 version: 3.0.4(bufferutil@4.1.0)(utf-8-validate@6.0.6) jsdom: - specifier: 29.0.0 - version: 29.0.0 + specifier: 29.0.1 + version: 29.0.1 ng-packagr: specifier: 22.0.0-next.0 version: 22.0.0-next.0(@angular/compiler-cli@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(typescript@6.0.1-rc))(tslib@2.8.1)(typescript@6.0.1-rc) @@ -327,7 +327,7 @@ importers: version: 7.8.2 vitest: specifier: 4.1.0 - version: 4.1.0(@opentelemetry/api@1.9.0)(@types/node@24.12.0)(jiti@2.6.1)(jsdom@29.0.0)(less@4.6.4)(sass@1.98.0)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) + version: 4.1.0(@opentelemetry/api@1.9.0)(@types/node@24.12.0)(jiti@2.6.1)(jsdom@29.0.1)(less@4.6.4)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2) packages/angular/build: dependencies: @@ -351,7 +351,7 @@ importers: version: 6.0.10(@types/node@24.12.0) '@vitejs/plugin-basic-ssl': specifier: 2.2.0 - version: 2.2.0(vite@7.3.1(@types/node@24.12.0)(jiti@2.6.1)(less@4.6.4)(sass@1.98.0)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)) + version: 2.2.0(vite@7.3.1(@types/node@24.12.0)(jiti@2.6.1)(less@4.6.4)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2)) beasties: specifier: 0.4.1 version: 0.4.1 @@ -389,8 +389,8 @@ importers: specifier: 5.1.4 version: 5.1.4 rolldown: - specifier: 1.0.0-rc.9 - version: 1.0.0-rc.9 + specifier: 1.0.0-rc.10 + version: 1.0.0-rc.10 sass: specifier: 1.98.0 version: 1.98.0 @@ -405,7 +405,7 @@ importers: version: 0.2.15 vite: specifier: 7.3.1 - version: 7.3.1(@types/node@24.12.0)(jiti@2.6.1)(less@4.6.4)(sass@1.98.0)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) + version: 7.3.1(@types/node@24.12.0)(jiti@2.6.1)(less@4.6.4)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2) watchpack: specifier: 2.5.1 version: 2.5.1 @@ -417,8 +417,8 @@ importers: specifier: workspace:* version: link:../ssr jsdom: - specifier: 29.0.0 - version: 29.0.0 + specifier: 29.0.1 + version: 29.0.1 less: specifier: 4.6.4 version: 4.6.4 @@ -433,7 +433,7 @@ importers: version: 7.8.2 vitest: specifier: 4.1.0 - version: 4.1.0(@opentelemetry/api@1.9.0)(@types/node@24.12.0)(jiti@2.6.1)(jsdom@29.0.0)(less@4.6.4)(sass@1.98.0)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) + version: 4.1.0(@opentelemetry/api@1.9.0)(@types/node@24.12.0)(jiti@2.6.1)(jsdom@29.0.1)(less@4.6.4)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2) optionalDependencies: lmdb: specifier: 3.5.2 @@ -454,8 +454,8 @@ importers: specifier: 8.3.2 version: 8.3.2(@types/node@24.12.0) '@listr2/prompt-adapter-inquirer': - specifier: 4.2.1 - version: 4.2.1(@inquirer/prompts@8.3.2(@types/node@24.12.0))(@types/node@24.12.0)(listr2@10.2.1) + specifier: 4.2.2 + version: 4.2.2(@inquirer/prompts@8.3.2(@types/node@24.12.0))(@types/node@24.12.0)(listr2@10.2.1) '@modelcontextprotocol/sdk': specifier: 1.27.1 version: 1.27.1(zod@4.3.6) @@ -590,11 +590,11 @@ importers: specifier: 7.29.0 version: 7.29.0(@babel/core@7.29.0) '@babel/preset-env': - specifier: 7.29.0 - version: 7.29.0(@babel/core@7.29.0) + specifier: 7.29.2 + version: 7.29.2(@babel/core@7.29.0) '@babel/runtime': - specifier: 7.28.6 - version: 7.28.6 + specifier: 7.29.2 + version: 7.29.2 '@discoveryjs/json-ext': specifier: 1.0.0 version: 1.0.0 @@ -689,8 +689,8 @@ importers: specifier: 0.5.21 version: 0.5.21 terser: - specifier: 5.46.0 - version: 5.46.0 + specifier: 5.46.1 + version: 5.46.1 tinyglobby: specifier: 0.2.15 version: 0.2.15 @@ -723,8 +723,8 @@ importers: specifier: 22.0.0-next.0 version: 22.0.0-next.0(@angular/compiler-cli@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(typescript@6.0.1-rc))(tslib@2.8.1)(typescript@6.0.1-rc) undici: - specifier: 7.24.4 - version: 7.24.4 + specifier: 7.24.5 + version: 7.24.5 optionalDependencies: esbuild: specifier: 0.27.3 @@ -1531,8 +1531,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0 - '@babel/preset-env@7.29.0': - resolution: {integrity: sha512-fNEdfc0yi16lt6IZo2Qxk3knHVdfMYX33czNb4v8yWhemoBhibCpQK/uYHtSKIiO+p/zd3+8fYVXhQdOVV608w==} + '@babel/preset-env@7.29.2': + resolution: {integrity: sha512-DYD23veRYGvBFhcTY1iUvJnDNpuqNd/BzBwCvzOTKUnJjKg5kpUBh3/u9585Agdkgj+QuygG7jLfOPWMa2KVNw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -1542,8 +1542,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 || ^8.0.0-0 <8.0.0 - '@babel/runtime@7.28.6': - resolution: {integrity: sha512-05WQkdpL9COIMz4LjTxGpPNCdlpyimKppYNoJ5Di5EUObifl8t4tuLuUBBZEpoLYOmfvIWrsp9fCl0HoPRVTdA==} + '@babel/runtime@7.29.2': + resolution: {integrity: sha512-JiDShH45zKHWyGe4ZNVRrCjBz8Nh9TMmZG1kh4QTK8hCBTWBi8Da+i7s1fJw7/lYpM4ccepSNfqzZ/QvABBi5g==} engines: {node: '>=6.9.0'} '@babel/template@7.28.6': @@ -2469,8 +2469,8 @@ packages: '@leichtgewicht/ip-codec@2.0.5': resolution: {integrity: sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw==} - '@listr2/prompt-adapter-inquirer@4.2.1': - resolution: {integrity: sha512-z3jVhDIz6/X5rPFAk8r00mOHTxpZljgOKNnrq6FLIoZUbXcPrcW3wfM7aUOxy4NXrUewTchcVZxgxHLZY3vN7Q==} + '@listr2/prompt-adapter-inquirer@4.2.2': + resolution: {integrity: sha512-QCVBPLxPEG3ZLSfGz8DfzgiqkLiK31sb4JTIxp+sfdOrpze5rjZscHSAuSI0e/engIS9tWgzifLhSCwlocFsZQ==} engines: {node: '>=22.13.0'} peerDependencies: '@inquirer/prompts': '>= 3 < 9' @@ -2832,8 +2832,8 @@ packages: resolution: {integrity: sha512-cifvXDhcqMwwTlTK04GBNeIe7yyo28Mfby85QXFe1Yk8nmi36Ab/5UQwptOx84SsoGNRg+EVSjwzfSZMy6pmlw==} engines: {node: '>=14'} - '@oxc-project/types@0.115.0': - resolution: {integrity: sha512-4n91DKnebUS4yjUHl2g3/b2T+IUdCfmoZGhmwsovZCDaJSs+QkVAM+0AqqTxHSsHfeiMuueT75cZaZcT/m0pSw==} + '@oxc-project/types@0.120.0': + resolution: {integrity: sha512-k1YNu55DuvAip/MGE1FTsIuU3FUCn6v/ujG9V7Nq5Df/kX2CWb13hhwD0lmJGMGqE+bE1MXvv9SZVnMzEXlWcg==} '@parcel/watcher-android-arm64@2.5.6': resolution: {integrity: sha512-YQxSS34tPF/6ZG7r/Ih9xy+kP/WwediEUsqmtf0cuCV5TPPKw/PQHRhueUo6JdeFJaqV3pyjm0GdYjZotbRt/A==} @@ -3019,103 +3019,103 @@ packages: engines: {node: '>=18'} hasBin: true - '@rolldown/binding-android-arm64@1.0.0-rc.9': - resolution: {integrity: sha512-lcJL0bN5hpgJfSIz/8PIf02irmyL43P+j1pTCfbD1DbLkmGRuFIA4DD3B3ZOvGqG0XiVvRznbKtN0COQVaKUTg==} + '@rolldown/binding-android-arm64@1.0.0-rc.10': + resolution: {integrity: sha512-jOHxwXhxmFKuXztiu1ORieJeTbx5vrTkcOkkkn2d35726+iwhrY1w/+nYY/AGgF12thg33qC3R1LMBF5tHTZHg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [android] - '@rolldown/binding-darwin-arm64@1.0.0-rc.9': - resolution: {integrity: sha512-J7Zk3kLYFsLtuH6U+F4pS2sYVzac0qkjcO5QxHS7OS7yZu2LRs+IXo+uvJ/mvpyUljDJ3LROZPoQfgBIpCMhdQ==} + '@rolldown/binding-darwin-arm64@1.0.0-rc.10': + resolution: {integrity: sha512-gED05Teg/vtTZbIJBc4VNMAxAFDUPkuO/rAIyyxZjTj1a1/s6z5TII/5yMGZ0uLRCifEtwUQn8OlYzuYc0m70w==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [darwin] - '@rolldown/binding-darwin-x64@1.0.0-rc.9': - resolution: {integrity: sha512-iwtmmghy8nhfRGeNAIltcNXzD0QMNaaA5U/NyZc1Ia4bxrzFByNMDoppoC+hl7cDiUq5/1CnFthpT9n+UtfFyg==} + '@rolldown/binding-darwin-x64@1.0.0-rc.10': + resolution: {integrity: sha512-rI15NcM1mA48lqrIxVkHfAqcyFLcQwyXWThy+BQ5+mkKKPvSO26ir+ZDp36AgYoYVkqvMcdS8zOE6SeBsR9e8A==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [darwin] - '@rolldown/binding-freebsd-x64@1.0.0-rc.9': - resolution: {integrity: sha512-DLFYI78SCiZr5VvdEplsVC2Vx53lnA4/Ga5C65iyldMVaErr86aiqCoNBLl92PXPfDtUYjUh+xFFor40ueNs4Q==} + '@rolldown/binding-freebsd-x64@1.0.0-rc.10': + resolution: {integrity: sha512-XZRXHdTa+4ME1MuDVp021+doQ+z6Ei4CCFmNc5/sKbqb8YmkiJdj8QKlV3rCI0AJtAeSB5n0WGPuJWNL9p/L2w==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [freebsd] - '@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.9': - resolution: {integrity: sha512-CsjTmTwd0Hri6iTw/DRMK7kOZ7FwAkrO4h8YWKoX/kcj833e4coqo2wzIFywtch/8Eb5enQ/lwLM7w6JX1W5RQ==} + '@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.10': + resolution: {integrity: sha512-R0SQMRluISSLzFE20sPWYHVmJdDQnRyc/FzSCN72BqQmh2SOZUFG+N3/vBZpR4C6WpEUVYJLrYUXaj43sJsNLA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [linux] - '@rolldown/binding-linux-arm64-gnu@1.0.0-rc.9': - resolution: {integrity: sha512-2x9O2JbSPxpxMDhP9Z74mahAStibTlrBMW0520+epJH5sac7/LwZW5Bmg/E6CXuEF53JJFW509uP+lSedaUNxg==} + '@rolldown/binding-linux-arm64-gnu@1.0.0-rc.10': + resolution: {integrity: sha512-Y1reMrV/o+cwpduYhJuOE3OMKx32RMYCidf14y+HssARRmhDuWXJ4yVguDg2R/8SyyGNo+auzz64LnPK9Hq6jg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] libc: [glibc] - '@rolldown/binding-linux-arm64-musl@1.0.0-rc.9': - resolution: {integrity: sha512-JA1QRW31ogheAIRhIg9tjMfsYbglXXYGNPLdPEYrwFxdbkQCAzvpSCSHCDWNl4hTtrol8WeboCSEpjdZK8qrCg==} + '@rolldown/binding-linux-arm64-musl@1.0.0-rc.10': + resolution: {integrity: sha512-vELN+HNb2IzuzSBUOD4NHmP9yrGwl1DVM29wlQvx1OLSclL0NgVWnVDKl/8tEks79EFek/kebQKnNJkIAA4W2g==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] libc: [musl] - '@rolldown/binding-linux-ppc64-gnu@1.0.0-rc.9': - resolution: {integrity: sha512-aOKU9dJheda8Kj8Y3w9gnt9QFOO+qKPAl8SWd7JPHP+Cu0EuDAE5wokQubLzIDQWg2myXq2XhTpOVS07qqvT+w==} + '@rolldown/binding-linux-ppc64-gnu@1.0.0-rc.10': + resolution: {integrity: sha512-ZqrufYTgzxbHwpqOjzSsb0UV/aV2TFIY5rP8HdsiPTv/CuAgCRjM6s9cYFwQ4CNH+hf9Y4erHW1GjZuZ7WoI7w==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [ppc64] os: [linux] libc: [glibc] - '@rolldown/binding-linux-s390x-gnu@1.0.0-rc.9': - resolution: {integrity: sha512-OalO94fqj7IWRn3VdXWty75jC5dk4C197AWEuMhIpvVv2lw9fiPhud0+bW2ctCxb3YoBZor71QHbY+9/WToadA==} + '@rolldown/binding-linux-s390x-gnu@1.0.0-rc.10': + resolution: {integrity: sha512-gSlmVS1FZJSRicA6IyjoRoKAFK7IIHBs7xJuHRSmjImqk3mPPWbR7RhbnfH2G6bcmMEllCt2vQ/7u9e6bBnByg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [s390x] os: [linux] libc: [glibc] - '@rolldown/binding-linux-x64-gnu@1.0.0-rc.9': - resolution: {integrity: sha512-cVEl1vZtBsBZna3YMjGXNvnYYrOJ7RzuWvZU0ffvJUexWkukMaDuGhUXn0rjnV0ptzGVkvc+vW9Yqy6h8YX4pg==} + '@rolldown/binding-linux-x64-gnu@1.0.0-rc.10': + resolution: {integrity: sha512-eOCKUpluKgfObT2pHjztnaWEIbUabWzk3qPZ5PuacuPmr4+JtQG4k2vGTY0H15edaTnicgU428XW/IH6AimcQw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] libc: [glibc] - '@rolldown/binding-linux-x64-musl@1.0.0-rc.9': - resolution: {integrity: sha512-UzYnKCIIc4heAKgI4PZ3dfBGUZefGCJ1TPDuLHoCzgrMYPb5Rv6TLFuYtyM4rWyHM7hymNdsg5ik2C+UD9VDbA==} + '@rolldown/binding-linux-x64-musl@1.0.0-rc.10': + resolution: {integrity: sha512-Xdf2jQbfQowJnLcgYfD/m0Uu0Qj5OdxKallD78/IPPfzaiaI4KRAwZzHcKQ4ig1gtg1SuzC7jovNiM2TzQsBXA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] libc: [musl] - '@rolldown/binding-openharmony-arm64@1.0.0-rc.9': - resolution: {integrity: sha512-+6zoiF+RRyf5cdlFQP7nm58mq7+/2PFaY2DNQeD4B87N36JzfF/l9mdBkkmTvSYcYPE8tMh/o3cRlsx1ldLfog==} + '@rolldown/binding-openharmony-arm64@1.0.0-rc.10': + resolution: {integrity: sha512-o1hYe8hLi1EY6jgPFyxQgQ1wcycX+qz8eEbVmot2hFkgUzPxy9+kF0u0NIQBeDq+Mko47AkaFFaChcvZa9UX9Q==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [openharmony] - '@rolldown/binding-wasm32-wasi@1.0.0-rc.9': - resolution: {integrity: sha512-rgFN6sA/dyebil3YTlL2evvi/M+ivhfnyxec7AccTpRPccno/rPoNlqybEZQBkcbZu8Hy+eqNJCqfBR8P7Pg8g==} + '@rolldown/binding-wasm32-wasi@1.0.0-rc.10': + resolution: {integrity: sha512-Ugv9o7qYJudqQO5Y5y2N2SOo6S4WiqiNOpuQyoPInnhVzCY+wi/GHltcLHypG9DEUYMB0iTB/huJrpadiAcNcA==} engines: {node: '>=14.0.0'} cpu: [wasm32] - '@rolldown/binding-win32-arm64-msvc@1.0.0-rc.9': - resolution: {integrity: sha512-lHVNUG/8nlF1IQk1C0Ci574qKYyty2goMiPlRqkC5R+3LkXDkL5Dhx8ytbxq35m+pkHVIvIxviD+TWLdfeuadA==} + '@rolldown/binding-win32-arm64-msvc@1.0.0-rc.10': + resolution: {integrity: sha512-7UODQb4fQUNT/vmgDZBl3XOBAIOutP5R3O/rkxg0aLfEGQ4opbCgU5vOw/scPe4xOqBwL9fw7/RP1vAMZ6QlAQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [win32] - '@rolldown/binding-win32-x64-msvc@1.0.0-rc.9': - resolution: {integrity: sha512-G0oA4+w1iY5AGi5HcDTxWsoxF509hrFIPB2rduV5aDqS9FtDg1CAfa7V34qImbjfhIcA8C+RekocJZA96EarwQ==} + '@rolldown/binding-win32-x64-msvc@1.0.0-rc.10': + resolution: {integrity: sha512-PYxKHMVHOb5NJuDL53vBUl1VwUjymDcYI6rzpIni0C9+9mTiJedvUxSk7/RPp7OOAm3v+EjgMu9bIy3N6b408w==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [win32] - '@rolldown/pluginutils@1.0.0-rc.9': - resolution: {integrity: sha512-w6oiRWgEBl04QkFZgmW+jnU1EC9b57Oihi2ot3HNWIQRqgHp5PnYDia5iZ5FF7rpa4EQdiqMDXjlqKGXBhsoXw==} + '@rolldown/pluginutils@1.0.0-rc.10': + resolution: {integrity: sha512-UkVDEFk1w3mveXeKgaTuYfKWtPbvgck1dT8TUG3bnccrH0XtLTuAyfCoks4Q/M5ZGToSVJTIQYCzy2g/atAOeg==} '@rollup/plugin-alias@6.0.0': resolution: {integrity: sha512-tPCzJOtS7uuVZd+xPhoy5W4vThe6KWXNmsFCNktaAh5RTqcLiSfT4huPQIXkgJ6YCOjJHvecOAzQxLFhPxKr+g==} @@ -3167,144 +3167,287 @@ packages: cpu: [arm] os: [android] + '@rollup/rollup-android-arm-eabi@4.60.0': + resolution: {integrity: sha512-WOhNW9K8bR3kf4zLxbfg6Pxu2ybOUbB2AjMDHSQx86LIF4rH4Ft7vmMwNt0loO0eonglSNy4cpD3MKXXKQu0/A==} + cpu: [arm] + os: [android] + '@rollup/rollup-android-arm64@4.59.0': resolution: {integrity: sha512-hZ+Zxj3SySm4A/DylsDKZAeVg0mvi++0PYVceVyX7hemkw7OreKdCvW2oQ3T1FMZvCaQXqOTHb8qmBShoqk69Q==} cpu: [arm64] os: [android] + '@rollup/rollup-android-arm64@4.60.0': + resolution: {integrity: sha512-u6JHLll5QKRvjciE78bQXDmqRqNs5M/3GVqZeMwvmjaNODJih/WIrJlFVEihvV0MiYFmd+ZyPr9wxOVbPAG2Iw==} + cpu: [arm64] + os: [android] + '@rollup/rollup-darwin-arm64@4.59.0': resolution: {integrity: sha512-W2Psnbh1J8ZJw0xKAd8zdNgF9HRLkdWwwdWqubSVk0pUuQkoHnv7rx4GiF9rT4t5DIZGAsConRE3AxCdJ4m8rg==} cpu: [arm64] os: [darwin] + '@rollup/rollup-darwin-arm64@4.60.0': + resolution: {integrity: sha512-qEF7CsKKzSRc20Ciu2Zw1wRrBz4g56F7r/vRwY430UPp/nt1x21Q/fpJ9N5l47WWvJlkNCPJz3QRVw008fi7yA==} + cpu: [arm64] + os: [darwin] + '@rollup/rollup-darwin-x64@4.59.0': resolution: {integrity: sha512-ZW2KkwlS4lwTv7ZVsYDiARfFCnSGhzYPdiOU4IM2fDbL+QGlyAbjgSFuqNRbSthybLbIJ915UtZBtmuLrQAT/w==} cpu: [x64] os: [darwin] + '@rollup/rollup-darwin-x64@4.60.0': + resolution: {integrity: sha512-WADYozJ4QCnXCH4wPB+3FuGmDPoFseVCUrANmA5LWwGmC6FL14BWC7pcq+FstOZv3baGX65tZ378uT6WG8ynTw==} + cpu: [x64] + os: [darwin] + '@rollup/rollup-freebsd-arm64@4.59.0': resolution: {integrity: sha512-EsKaJ5ytAu9jI3lonzn3BgG8iRBjV4LxZexygcQbpiU0wU0ATxhNVEpXKfUa0pS05gTcSDMKpn3Sx+QB9RlTTA==} cpu: [arm64] os: [freebsd] + '@rollup/rollup-freebsd-arm64@4.60.0': + resolution: {integrity: sha512-6b8wGHJlDrGeSE3aH5mGNHBjA0TTkxdoNHik5EkvPHCt351XnigA4pS7Wsj/Eo9Y8RBU6f35cjN9SYmCFBtzxw==} + cpu: [arm64] + os: [freebsd] + '@rollup/rollup-freebsd-x64@4.59.0': resolution: {integrity: sha512-d3DuZi2KzTMjImrxoHIAODUZYoUUMsuUiY4SRRcJy6NJoZ6iIqWnJu9IScV9jXysyGMVuW+KNzZvBLOcpdl3Vg==} cpu: [x64] os: [freebsd] + '@rollup/rollup-freebsd-x64@4.60.0': + resolution: {integrity: sha512-h25Ga0t4jaylMB8M/JKAyrvvfxGRjnPQIR8lnCayyzEjEOx2EJIlIiMbhpWxDRKGKF8jbNH01NnN663dH638mA==} + cpu: [x64] + os: [freebsd] + '@rollup/rollup-linux-arm-gnueabihf@4.59.0': resolution: {integrity: sha512-t4ONHboXi/3E0rT6OZl1pKbl2Vgxf9vJfWgmUoCEVQVxhW6Cw/c8I6hbbu7DAvgp82RKiH7TpLwxnJeKv2pbsw==} cpu: [arm] os: [linux] libc: [glibc] + '@rollup/rollup-linux-arm-gnueabihf@4.60.0': + resolution: {integrity: sha512-RzeBwv0B3qtVBWtcuABtSuCzToo2IEAIQrcyB/b2zMvBWVbjo8bZDjACUpnaafaxhTw2W+imQbP2BD1usasK4g==} + cpu: [arm] + os: [linux] + libc: [glibc] + '@rollup/rollup-linux-arm-musleabihf@4.59.0': resolution: {integrity: sha512-CikFT7aYPA2ufMD086cVORBYGHffBo4K8MQ4uPS/ZnY54GKj36i196u8U+aDVT2LX4eSMbyHtyOh7D7Zvk2VvA==} cpu: [arm] os: [linux] libc: [musl] + '@rollup/rollup-linux-arm-musleabihf@4.60.0': + resolution: {integrity: sha512-Sf7zusNI2CIU1HLzuu9Tc5YGAHEZs5Lu7N1ssJG4Tkw6e0MEsN7NdjUDDfGNHy2IU+ENyWT+L2obgWiguWibWQ==} + cpu: [arm] + os: [linux] + libc: [musl] + '@rollup/rollup-linux-arm64-gnu@4.59.0': resolution: {integrity: sha512-jYgUGk5aLd1nUb1CtQ8E+t5JhLc9x5WdBKew9ZgAXg7DBk0ZHErLHdXM24rfX+bKrFe+Xp5YuJo54I5HFjGDAA==} cpu: [arm64] os: [linux] libc: [glibc] + '@rollup/rollup-linux-arm64-gnu@4.60.0': + resolution: {integrity: sha512-DX2x7CMcrJzsE91q7/O02IJQ5/aLkVtYFryqCjduJhUfGKG6yJV8hxaw8pZa93lLEpPTP/ohdN4wFz7yp/ry9A==} + cpu: [arm64] + os: [linux] + libc: [glibc] + '@rollup/rollup-linux-arm64-musl@4.59.0': resolution: {integrity: sha512-peZRVEdnFWZ5Bh2KeumKG9ty7aCXzzEsHShOZEFiCQlDEepP1dpUl/SrUNXNg13UmZl+gzVDPsiCwnV1uI0RUA==} cpu: [arm64] os: [linux] libc: [musl] + '@rollup/rollup-linux-arm64-musl@4.60.0': + resolution: {integrity: sha512-09EL+yFVbJZlhcQfShpswwRZ0Rg+z/CsSELFCnPt3iK+iqwGsI4zht3secj5vLEs957QvFFXnzAT0FFPIxSrkQ==} + cpu: [arm64] + os: [linux] + libc: [musl] + '@rollup/rollup-linux-loong64-gnu@4.59.0': resolution: {integrity: sha512-gbUSW/97f7+r4gHy3Jlup8zDG190AuodsWnNiXErp9mT90iCy9NKKU0Xwx5k8VlRAIV2uU9CsMnEFg/xXaOfXg==} cpu: [loong64] os: [linux] libc: [glibc] + '@rollup/rollup-linux-loong64-gnu@4.60.0': + resolution: {integrity: sha512-i9IcCMPr3EXm8EQg5jnja0Zyc1iFxJjZWlb4wr7U2Wx/GrddOuEafxRdMPRYVaXjgbhvqalp6np07hN1w9kAKw==} + cpu: [loong64] + os: [linux] + libc: [glibc] + '@rollup/rollup-linux-loong64-musl@4.59.0': resolution: {integrity: sha512-yTRONe79E+o0FWFijasoTjtzG9EBedFXJMl888NBEDCDV9I2wGbFFfJQQe63OijbFCUZqxpHz1GzpbtSFikJ4Q==} cpu: [loong64] os: [linux] libc: [musl] + '@rollup/rollup-linux-loong64-musl@4.60.0': + resolution: {integrity: sha512-DGzdJK9kyJ+B78MCkWeGnpXJ91tK/iKA6HwHxF4TAlPIY7GXEvMe8hBFRgdrR9Ly4qebR/7gfUs9y2IoaVEyog==} + cpu: [loong64] + os: [linux] + libc: [musl] + '@rollup/rollup-linux-ppc64-gnu@4.59.0': resolution: {integrity: sha512-sw1o3tfyk12k3OEpRddF68a1unZ5VCN7zoTNtSn2KndUE+ea3m3ROOKRCZxEpmT9nsGnogpFP9x6mnLTCaoLkA==} cpu: [ppc64] os: [linux] libc: [glibc] + '@rollup/rollup-linux-ppc64-gnu@4.60.0': + resolution: {integrity: sha512-RwpnLsqC8qbS8z1H1AxBA1H6qknR4YpPR9w2XX0vo2Sz10miu57PkNcnHVaZkbqyw/kUWfKMI73jhmfi9BRMUQ==} + cpu: [ppc64] + os: [linux] + libc: [glibc] + '@rollup/rollup-linux-ppc64-musl@4.59.0': resolution: {integrity: sha512-+2kLtQ4xT3AiIxkzFVFXfsmlZiG5FXYW7ZyIIvGA7Bdeuh9Z0aN4hVyXS/G1E9bTP/vqszNIN/pUKCk/BTHsKA==} cpu: [ppc64] os: [linux] libc: [musl] + '@rollup/rollup-linux-ppc64-musl@4.60.0': + resolution: {integrity: sha512-Z8pPf54Ly3aqtdWC3G4rFigZgNvd+qJlOE52fmko3KST9SoGfAdSRCwyoyG05q1HrrAblLbk1/PSIV+80/pxLg==} + cpu: [ppc64] + os: [linux] + libc: [musl] + '@rollup/rollup-linux-riscv64-gnu@4.59.0': resolution: {integrity: sha512-NDYMpsXYJJaj+I7UdwIuHHNxXZ/b/N2hR15NyH3m2qAtb/hHPA4g4SuuvrdxetTdndfj9b1WOmy73kcPRoERUg==} cpu: [riscv64] os: [linux] libc: [glibc] + '@rollup/rollup-linux-riscv64-gnu@4.60.0': + resolution: {integrity: sha512-3a3qQustp3COCGvnP4SvrMHnPQ9d1vzCakQVRTliaz8cIp/wULGjiGpbcqrkv0WrHTEp8bQD/B3HBjzujVWLOA==} + cpu: [riscv64] + os: [linux] + libc: [glibc] + '@rollup/rollup-linux-riscv64-musl@4.59.0': resolution: {integrity: sha512-nLckB8WOqHIf1bhymk+oHxvM9D3tyPndZH8i8+35p/1YiVoVswPid2yLzgX7ZJP0KQvnkhM4H6QZ5m0LzbyIAg==} cpu: [riscv64] os: [linux] libc: [musl] + '@rollup/rollup-linux-riscv64-musl@4.60.0': + resolution: {integrity: sha512-pjZDsVH/1VsghMJ2/kAaxt6dL0psT6ZexQVrijczOf+PeP2BUqTHYejk3l6TlPRydggINOeNRhvpLa0AYpCWSQ==} + cpu: [riscv64] + os: [linux] + libc: [musl] + '@rollup/rollup-linux-s390x-gnu@4.59.0': resolution: {integrity: sha512-oF87Ie3uAIvORFBpwnCvUzdeYUqi2wY6jRFWJAy1qus/udHFYIkplYRW+wo+GRUP4sKzYdmE1Y3+rY5Gc4ZO+w==} cpu: [s390x] os: [linux] libc: [glibc] + '@rollup/rollup-linux-s390x-gnu@4.60.0': + resolution: {integrity: sha512-3ObQs0BhvPgiUVZrN7gqCSvmFuMWvWvsjG5ayJ3Lraqv+2KhOsp+pUbigqbeWqueGIsnn+09HBw27rJ+gYK4VQ==} + cpu: [s390x] + os: [linux] + libc: [glibc] + '@rollup/rollup-linux-x64-gnu@4.59.0': resolution: {integrity: sha512-3AHmtQq/ppNuUspKAlvA8HtLybkDflkMuLK4DPo77DfthRb71V84/c4MlWJXixZz4uruIH4uaa07IqoAkG64fg==} cpu: [x64] os: [linux] libc: [glibc] + '@rollup/rollup-linux-x64-gnu@4.60.0': + resolution: {integrity: sha512-EtylprDtQPdS5rXvAayrNDYoJhIz1/vzN2fEubo3yLE7tfAw+948dO0g4M0vkTVFhKojnF+n6C8bDNe+gDRdTg==} + cpu: [x64] + os: [linux] + libc: [glibc] + '@rollup/rollup-linux-x64-musl@4.59.0': resolution: {integrity: sha512-2UdiwS/9cTAx7qIUZB/fWtToJwvt0Vbo0zmnYt7ED35KPg13Q0ym1g442THLC7VyI6JfYTP4PiSOWyoMdV2/xg==} cpu: [x64] os: [linux] libc: [musl] + '@rollup/rollup-linux-x64-musl@4.60.0': + resolution: {integrity: sha512-k09oiRCi/bHU9UVFqD17r3eJR9bn03TyKraCrlz5ULFJGdJGi7VOmm9jl44vOJvRJ6P7WuBi/s2A97LxxHGIdw==} + cpu: [x64] + os: [linux] + libc: [musl] + '@rollup/rollup-openbsd-x64@4.59.0': resolution: {integrity: sha512-M3bLRAVk6GOwFlPTIxVBSYKUaqfLrn8l0psKinkCFxl4lQvOSz8ZrKDz2gxcBwHFpci0B6rttydI4IpS4IS/jQ==} cpu: [x64] os: [openbsd] + '@rollup/rollup-openbsd-x64@4.60.0': + resolution: {integrity: sha512-1o/0/pIhozoSaDJoDcec+IVLbnRtQmHwPV730+AOD29lHEEo4F5BEUB24H0OBdhbBBDwIOSuf7vgg0Ywxdfiiw==} + cpu: [x64] + os: [openbsd] + '@rollup/rollup-openharmony-arm64@4.59.0': resolution: {integrity: sha512-tt9KBJqaqp5i5HUZzoafHZX8b5Q2Fe7UjYERADll83O4fGqJ49O1FsL6LpdzVFQcpwvnyd0i+K/VSwu/o/nWlA==} cpu: [arm64] os: [openharmony] + '@rollup/rollup-openharmony-arm64@4.60.0': + resolution: {integrity: sha512-pESDkos/PDzYwtyzB5p/UoNU/8fJo68vcXM9ZW2V0kjYayj1KaaUfi1NmTUTUpMn4UhU4gTuK8gIaFO4UGuMbA==} + cpu: [arm64] + os: [openharmony] + '@rollup/rollup-win32-arm64-msvc@4.59.0': resolution: {integrity: sha512-V5B6mG7OrGTwnxaNUzZTDTjDS7F75PO1ae6MJYdiMu60sq0CqN5CVeVsbhPxalupvTX8gXVSU9gq+Rx1/hvu6A==} cpu: [arm64] os: [win32] + '@rollup/rollup-win32-arm64-msvc@4.60.0': + resolution: {integrity: sha512-hj1wFStD7B1YBeYmvY+lWXZ7ey73YGPcViMShYikqKT1GtstIKQAtfUI6yrzPjAy/O7pO0VLXGmUVWXQMaYgTQ==} + cpu: [arm64] + os: [win32] + '@rollup/rollup-win32-ia32-msvc@4.59.0': resolution: {integrity: sha512-UKFMHPuM9R0iBegwzKF4y0C4J9u8C6MEJgFuXTBerMk7EJ92GFVFYBfOZaSGLu6COf7FxpQNqhNS4c4icUPqxA==} cpu: [ia32] os: [win32] + '@rollup/rollup-win32-ia32-msvc@4.60.0': + resolution: {integrity: sha512-SyaIPFoxmUPlNDq5EHkTbiKzmSEmq/gOYFI/3HHJ8iS/v1mbugVa7dXUzcJGQfoytp9DJFLhHH4U3/eTy2Bq4w==} + cpu: [ia32] + os: [win32] + '@rollup/rollup-win32-x64-gnu@4.59.0': resolution: {integrity: sha512-laBkYlSS1n2L8fSo1thDNGrCTQMmxjYY5G0WFWjFFYZkKPjsMBsgJfGf4TLxXrF6RyhI60L8TMOjBMvXiTcxeA==} cpu: [x64] os: [win32] + '@rollup/rollup-win32-x64-gnu@4.60.0': + resolution: {integrity: sha512-RdcryEfzZr+lAr5kRm2ucN9aVlCCa2QNq4hXelZxb8GG0NJSazq44Z3PCCc8wISRuCVnGs0lQJVX5Vp6fKA+IA==} + cpu: [x64] + os: [win32] + '@rollup/rollup-win32-x64-msvc@4.59.0': resolution: {integrity: sha512-2HRCml6OztYXyJXAvdDXPKcawukWY2GpR5/nxKp4iBgiO3wcoEGkAaqctIbZcNB6KlUQBIqt8VYkNSj2397EfA==} cpu: [x64] os: [win32] + '@rollup/rollup-win32-x64-msvc@4.60.0': + resolution: {integrity: sha512-PrsWNQ8BuE00O3Xsx3ALh2Df8fAj9+cvvX9AIA6o4KpATR98c9mud4XtDWVvsEuyia5U4tVSTKygawyJkjm60w==} + cpu: [x64] + os: [win32] + '@rollup/wasm-node@4.59.0': resolution: {integrity: sha512-cKB/Pe05aJWQYw3UFS79Id+KVXdExBxWful0+CSl24z3ukwOgBSy6l39XZNwfm3vCh/fpUrAAs+T7PsJ6dC8NA==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true + '@rollup/wasm-node@4.60.0': + resolution: {integrity: sha512-b4MyEi8S6dvHy0ZAwxO/zQPxpagdv+VZQDlTDaQJloif+axEHbjaJ+dkjN+uTs4mj8qT3nOidkGtDdNvVj7rrg==} + engines: {node: '>=18.0.0', npm: '>=8.0.0'} + hasBin: true + '@rtsao/scc@1.1.0': resolution: {integrity: sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==} @@ -3605,39 +3748,39 @@ packages: '@types/yauzl@2.10.3': resolution: {integrity: sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==} - '@typescript-eslint/eslint-plugin@8.57.0': - resolution: {integrity: sha512-qeu4rTHR3/IaFORbD16gmjq9+rEs9fGKdX0kF6BKSfi+gCuG3RCKLlSBYzn/bGsY9Tj7KE/DAQStbp8AHJGHEQ==} + '@typescript-eslint/eslint-plugin@8.57.1': + resolution: {integrity: sha512-Gn3aqnvNl4NGc6x3/Bqk1AOn0thyTU9bqDRhiRnUWezgvr2OnhYCWCgC8zXXRVqBsIL1pSDt7T9nJUe0oM0kDQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - '@typescript-eslint/parser': ^8.57.0 + '@typescript-eslint/parser': ^8.57.1 eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/parser@8.57.0': - resolution: {integrity: sha512-XZzOmihLIr8AD1b9hL9ccNMzEMWt/dE2u7NyTY9jJG6YNiNthaD5XtUHVF2uCXZ15ng+z2hT3MVuxnUYhq6k1g==} + '@typescript-eslint/parser@8.57.1': + resolution: {integrity: sha512-k4eNDan0EIMTT/dUKc/g+rsJ6wcHYhNPdY19VoX/EOtaAG8DLtKCykhrUnuHPYvinn5jhAPgD2Qw9hXBwrahsw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/project-service@8.57.0': - resolution: {integrity: sha512-pR+dK0BlxCLxtWfaKQWtYr7MhKmzqZxuii+ZjuFlZlIGRZm22HnXFqa2eY+90MUz8/i80YJmzFGDUsi8dMOV5w==} + '@typescript-eslint/project-service@8.57.1': + resolution: {integrity: sha512-vx1F37BRO1OftsYlmG9xay1TqnjNVlqALymwWVuYTdo18XuKxtBpCj1QlzNIEHlvlB27osvXFWptYiEWsVdYsg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/scope-manager@8.57.0': - resolution: {integrity: sha512-nvExQqAHF01lUM66MskSaZulpPL5pgy5hI5RfrxviLgzZVffB5yYzw27uK/ft8QnKXI2X0LBrHJFr1TaZtAibw==} + '@typescript-eslint/scope-manager@8.57.1': + resolution: {integrity: sha512-hs/QcpCwlwT2L5S+3fT6gp0PabyGk4Q0Rv2doJXA0435/OpnSR3VRgvrp8Xdoc3UAYSg9cyUjTeFXZEPg/3OKg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/tsconfig-utils@8.57.0': - resolution: {integrity: sha512-LtXRihc5ytjJIQEH+xqjB0+YgsV4/tW35XKX3GTZHpWtcC8SPkT/d4tqdf1cKtesryHm2bgp6l555NYcT2NLvA==} + '@typescript-eslint/tsconfig-utils@8.57.1': + resolution: {integrity: sha512-0lgOZB8cl19fHO4eI46YUx2EceQqhgkPSuCGLlGi79L2jwYY1cxeYc1Nae8Aw1xjgW3PKVDLlr3YJ6Bxx8HkWg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/type-utils@8.57.0': - resolution: {integrity: sha512-yjgh7gmDcJ1+TcEg8x3uWQmn8ifvSupnPfjP21twPKrDP/pTHlEQgmKcitzF/rzPSmv7QjJ90vRpN4U+zoUjwQ==} + '@typescript-eslint/type-utils@8.57.1': + resolution: {integrity: sha512-+Bwwm0ScukFdyoJsh2u6pp4S9ktegF98pYUU0hkphOOqdMB+1sNQhIz8y5E9+4pOioZijrkfNO/HUJVAFFfPKA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 @@ -3647,21 +3790,25 @@ packages: resolution: {integrity: sha512-dTLI8PEXhjUC7B9Kre+u0XznO696BhXcTlOn0/6kf1fHaQW8+VjJAVHJ3eTI14ZapTxdkOmc80HblPQLaEeJdg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/typescript-estree@8.57.0': - resolution: {integrity: sha512-m7faHcyVg0BT3VdYTlX8GdJEM7COexXxS6KqGopxdtkQRvBanK377QDHr4W/vIPAR+ah9+B/RclSW5ldVniO1Q==} + '@typescript-eslint/types@8.57.1': + resolution: {integrity: sha512-S29BOBPJSFUiblEl6RzPPjJt6w25A6XsBqRVDt53tA/tlL8q7ceQNZHTjPeONt/3S7KRI4quk+yP9jK2WjBiPQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@typescript-eslint/typescript-estree@8.57.1': + resolution: {integrity: sha512-ybe2hS9G6pXpqGtPli9Gx9quNV0TWLOmh58ADlmZe9DguLq0tiAKVjirSbtM1szG6+QH6rVXyU6GTLQbWnMY+g==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/utils@8.57.0': - resolution: {integrity: sha512-5iIHvpD3CZe06riAsbNxxreP+MuYgVUsV0n4bwLH//VJmgtt54sQeY2GszntJ4BjYCpMzrfVh2SBnUQTtys2lQ==} + '@typescript-eslint/utils@8.57.1': + resolution: {integrity: sha512-XUNSJ/lEVFttPMMoDVA2r2bwrl8/oPx8cURtczkSEswY5T3AeLmCy+EKWQNdL4u0MmAHOjcWrqJp2cdvgjn8dQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/visitor-keys@8.57.0': - resolution: {integrity: sha512-zm6xx8UT/Xy2oSr2ZXD0pZo7Jx2XsCoID2IUh9YSTFRu7z+WdwYTRk6LhUftm1crwqbuoF6I8zAFeCMw0YjwDg==} + '@typescript-eslint/visitor-keys@8.57.1': + resolution: {integrity: sha512-YWnmJkXbofiz9KbnbbwuA2rpGkFPLbAIetcCNO6mJ8gdhdZ/v7WDXsoGFAJuM6ikUFKTlSQnjWnVO4ux+UzS6A==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@verdaccio/auth@8.0.0-next-8.33': @@ -5002,8 +5149,8 @@ packages: resolution: {integrity: sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} - eslint@10.0.3: - resolution: {integrity: sha512-COV33RzXZkqhG9P2rZCFl9ZmJ7WL+gQSCRzE7RhkbclbQPtLAWReL7ysA0Sh4c8Im2U9ynybdR56PV0XcKvqaQ==} + eslint@10.1.0: + resolution: {integrity: sha512-S9jlY/ELKEUwwQnqWDO+f+m6sercqOPSqXM5Go94l7DOmxHVDgmSFGWEzeE/gwgTAr0W103BWt0QLe/7mabIvA==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} hasBin: true peerDependencies: @@ -5969,8 +6116,8 @@ packages: jsbn@0.1.1: resolution: {integrity: sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==} - jsdom@29.0.0: - resolution: {integrity: sha512-9FshNB6OepopZ08unmmGpsF7/qCjxGPbo3NbgfJAnPeHXnsODE9WWffXZtRFRFe0ntzaAOcSKNJFz8wiyvF1jQ==} + jsdom@29.0.1: + resolution: {integrity: sha512-z6JOK5gRO7aMybVq/y/MlIpKh8JIi68FBKMUtKkK2KH/wMSRlCxQ682d08LB9fYXplyY/UXG8P4XXTScmdjApg==} engines: {node: ^20.19.0 || ^22.13.0 || >=24.0.0} peerDependencies: canvas: ^3.0.0 @@ -7007,12 +7154,12 @@ packages: resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} engines: {node: '>=6'} - puppeteer-core@24.39.1: - resolution: {integrity: sha512-AMqQIKoEhPS6CilDzw0Gd1brLri3emkC+1N2J6ZCCuY1Cglo56M63S0jOeBZDQlemOiRd686MYVMl9ELJBzN3A==} + puppeteer-core@24.40.0: + resolution: {integrity: sha512-MWL3XbUCfVgGR0gRsidzT6oKJT2QydPLhMITU6HoVWiiv4gkb6gJi3pcdAa8q4HwjBTbqISOWVP4aJiiyUJvag==} engines: {node: '>=18'} - puppeteer@24.39.1: - resolution: {integrity: sha512-68Zc9QpcVvfxp2C+3UL88TyUogEAn5tSylXidbEuEXvhiqK1+v65zeBU5ubinAgEHMGr3dcSYqvYrGtdzsPI3w==} + puppeteer@24.40.0: + resolution: {integrity: sha512-IxQbDq93XHVVLWHrAkFP7F7iHvb9o0mgfsSIMlhHb+JM+JjM1V4v4MNSQfcRWJopx9dsNOr9adYv0U5fm9BJBQ==} engines: {node: '>=18'} hasBin: true @@ -7192,8 +7339,8 @@ packages: resolution: {integrity: sha512-l0OE8wL34P4nJH/H2ffoaniAokM2qSmrtXHmlpvYr5AVVX8msAyW0l8NVJFDxlSK4u3Uh/f41cQheDVdnYijwQ==} hasBin: true - rolldown@1.0.0-rc.9: - resolution: {integrity: sha512-9EbgWge7ZH+yqb4d2EnELAntgPTWbfL8ajiTW+SyhJEC4qhBbkCKbqFV4Ge4zmu5ziQuVbWxb/XwLZ+RIO7E8Q==} + rolldown@1.0.0-rc.10: + resolution: {integrity: sha512-q7j6vvarRFmKpgJUT8HCAUljkgzEp4LAhPlJUvQhA5LA1SUL36s5QCysMutErzL3EbNOZOkoziSx9iZC4FddKA==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true @@ -7208,6 +7355,13 @@ packages: rollup: ^3.29.4 || ^4 typescript: ^4.5 || ^5.0 || ^6.0 + rollup-plugin-dts@6.4.1: + resolution: {integrity: sha512-l//F3Zf7ID5GoOfLfD8kroBjQKEKpy1qfhtAdnpibFZMffPaylrg1CoDC2vGkPeTeyxUe4bVFCln2EFuL7IGGg==} + engines: {node: '>=20'} + peerDependencies: + rollup: ^3.29.4 || ^4 + typescript: ^4.5 || ^5.0 || ^6.0 + rollup-plugin-sourcemaps2@0.5.6: resolution: {integrity: sha512-oalmewAT4GLVsW6NugcDybx0ypet94vU0dUK3VofdYoWiN4ZjoX1L4dizFd0OhoJ78r/Am9sARTR9gMrX0cJ7w==} engines: {node: '>=18.0.0'} @@ -7223,6 +7377,11 @@ packages: engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true + rollup@4.60.0: + resolution: {integrity: sha512-yqjxruMGBQJ2gG4HtjZtAfXArHomazDHoFwFFmZZl0r7Pdo7qCIXKqKHZc8yeoMgzJJ+pO6pEEHa+V7uzWlrAQ==} + engines: {node: '>=18.0.0', npm: '>=8.0.0'} + hasBin: true + router@2.2.0: resolution: {integrity: sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==} engines: {node: '>= 18'} @@ -7695,8 +7854,8 @@ packages: uglify-js: optional: true - terser@5.46.0: - resolution: {integrity: sha512-jTwoImyr/QbOWFFso3YoU3ik0jBBDJ6JTOQiy/J2YxVJdZCc+5u7skhNwiOR3FQIygFqVUPHl7qbbxtjW2K3Qg==} + terser@5.46.1: + resolution: {integrity: sha512-vzCjQO/rgUuK9sf8VJZvjqiqiHFaZLnOiimmUuOKODxWL8mm/xua7viT7aqX7dgPY60otQjUotzFMmCB4VdmqQ==} engines: {node: '>=10'} hasBin: true @@ -7905,8 +8064,8 @@ packages: resolution: {integrity: sha512-sC+b0tB1whOCzbtlx20fx3WgCXwkW627p4EA9uM+/tNNPkSS+eSEld6pAs9nDv7WbY1UUljBMYPtu9BCOrCWKA==} engines: {node: '>=18.17'} - undici@7.24.4: - resolution: {integrity: sha512-BM/JzwwaRXxrLdElV2Uo6cTLEjhSb3WXboncJamZ15NgUURmvlXvxa6xkwIOILIjPNo9i8ku136ZvWV0Uly8+w==} + undici@7.24.5: + resolution: {integrity: sha512-3IWdCpjgxp15CbJnsi/Y9TCDE7HWVN19j1hmzVhoAkY/+CJx449tVxT5wZc1Gwg8J+P0LWvzlBzxYRnHJ+1i7Q==} engines: {node: '>=20.18.1'} unenv@1.10.0: @@ -9237,7 +9396,7 @@ snapshots: '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.29.0) '@babel/helper-plugin-utils': 7.28.6 - '@babel/preset-env@7.29.0(@babel/core@7.29.0)': + '@babel/preset-env@7.29.2(@babel/core@7.29.0)': dependencies: '@babel/compat-data': 7.29.0 '@babel/core': 7.29.0 @@ -9320,7 +9479,7 @@ snapshots: '@babel/types': 7.29.0 esutils: 2.0.3 - '@babel/runtime@7.28.6': {} + '@babel/runtime@7.29.2': {} '@babel/template@7.28.6': dependencies: @@ -9507,18 +9666,18 @@ snapshots: '@esbuild/win32-x64@0.27.3': optional: true - '@eslint-community/eslint-utils@4.9.1(eslint@10.0.3(jiti@2.6.1))': + '@eslint-community/eslint-utils@4.9.1(eslint@10.1.0(jiti@2.6.1))': dependencies: - eslint: 10.0.3(jiti@2.6.1) + eslint: 10.1.0(jiti@2.6.1) eslint-visitor-keys: 3.4.3 '@eslint-community/regexpp@4.12.2': {} - '@eslint/compat@2.0.3(eslint@10.0.3(jiti@2.6.1))': + '@eslint/compat@2.0.3(eslint@10.1.0(jiti@2.6.1))': dependencies: '@eslint/core': 1.1.1 optionalDependencies: - eslint: 10.0.3(jiti@2.6.1) + eslint: 10.1.0(jiti@2.6.1) '@eslint/config-array@0.23.3': dependencies: @@ -9550,9 +9709,9 @@ snapshots: transitivePeerDependencies: - supports-color - '@eslint/js@10.0.1(eslint@10.0.3(jiti@2.6.1))': + '@eslint/js@10.0.1(eslint@10.1.0(jiti@2.6.1))': optionalDependencies: - eslint: 10.0.3(jiti@2.6.1) + eslint: 10.1.0(jiti@2.6.1) '@eslint/object-schema@3.0.3': {} @@ -10311,7 +10470,7 @@ snapshots: '@leichtgewicht/ip-codec@2.0.5': {} - '@listr2/prompt-adapter-inquirer@4.2.1(@inquirer/prompts@8.3.2(@types/node@24.12.0))(@types/node@24.12.0)(listr2@10.2.1)': + '@listr2/prompt-adapter-inquirer@4.2.2(@inquirer/prompts@8.3.2(@types/node@24.12.0))(@types/node@24.12.0)(listr2@10.2.1)': dependencies: '@inquirer/prompts': 8.3.2(@types/node@24.12.0) '@inquirer/type': 4.0.4(@types/node@24.12.0) @@ -10673,7 +10832,7 @@ snapshots: '@opentelemetry/semantic-conventions@1.40.0': {} - '@oxc-project/types@0.115.0': {} + '@oxc-project/types@0.120.0': {} '@parcel/watcher-android-arm64@2.5.6': optional: true @@ -10889,62 +11048,62 @@ snapshots: - react-native-b4a - supports-color - '@rolldown/binding-android-arm64@1.0.0-rc.9': + '@rolldown/binding-android-arm64@1.0.0-rc.10': optional: true - '@rolldown/binding-darwin-arm64@1.0.0-rc.9': + '@rolldown/binding-darwin-arm64@1.0.0-rc.10': optional: true - '@rolldown/binding-darwin-x64@1.0.0-rc.9': + '@rolldown/binding-darwin-x64@1.0.0-rc.10': optional: true - '@rolldown/binding-freebsd-x64@1.0.0-rc.9': + '@rolldown/binding-freebsd-x64@1.0.0-rc.10': optional: true - '@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.9': + '@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.10': optional: true - '@rolldown/binding-linux-arm64-gnu@1.0.0-rc.9': + '@rolldown/binding-linux-arm64-gnu@1.0.0-rc.10': optional: true - '@rolldown/binding-linux-arm64-musl@1.0.0-rc.9': + '@rolldown/binding-linux-arm64-musl@1.0.0-rc.10': optional: true - '@rolldown/binding-linux-ppc64-gnu@1.0.0-rc.9': + '@rolldown/binding-linux-ppc64-gnu@1.0.0-rc.10': optional: true - '@rolldown/binding-linux-s390x-gnu@1.0.0-rc.9': + '@rolldown/binding-linux-s390x-gnu@1.0.0-rc.10': optional: true - '@rolldown/binding-linux-x64-gnu@1.0.0-rc.9': + '@rolldown/binding-linux-x64-gnu@1.0.0-rc.10': optional: true - '@rolldown/binding-linux-x64-musl@1.0.0-rc.9': + '@rolldown/binding-linux-x64-musl@1.0.0-rc.10': optional: true - '@rolldown/binding-openharmony-arm64@1.0.0-rc.9': + '@rolldown/binding-openharmony-arm64@1.0.0-rc.10': optional: true - '@rolldown/binding-wasm32-wasi@1.0.0-rc.9': + '@rolldown/binding-wasm32-wasi@1.0.0-rc.10': dependencies: '@napi-rs/wasm-runtime': 1.1.1 optional: true - '@rolldown/binding-win32-arm64-msvc@1.0.0-rc.9': + '@rolldown/binding-win32-arm64-msvc@1.0.0-rc.10': optional: true - '@rolldown/binding-win32-x64-msvc@1.0.0-rc.9': + '@rolldown/binding-win32-x64-msvc@1.0.0-rc.10': optional: true - '@rolldown/pluginutils@1.0.0-rc.9': {} + '@rolldown/pluginutils@1.0.0-rc.10': {} - '@rollup/plugin-alias@6.0.0(rollup@4.59.0)': + '@rollup/plugin-alias@6.0.0(rollup@4.60.0)': optionalDependencies: - rollup: 4.59.0 + rollup: 4.60.0 - '@rollup/plugin-commonjs@29.0.2(rollup@4.59.0)': + '@rollup/plugin-commonjs@29.0.2(rollup@4.60.0)': dependencies: - '@rollup/pluginutils': 5.3.0(rollup@4.59.0) + '@rollup/pluginutils': 5.3.0(rollup@4.60.0) commondir: 1.0.1 estree-walker: 2.0.2 fdir: 6.5.0(picomatch@4.0.3) @@ -10952,7 +11111,7 @@ snapshots: magic-string: 0.30.21 picomatch: 4.0.3 optionalDependencies: - rollup: 4.59.0 + rollup: 4.60.0 '@rollup/plugin-json@6.1.0(rollup@4.59.0)': dependencies: @@ -10960,15 +11119,21 @@ snapshots: optionalDependencies: rollup: 4.59.0 - '@rollup/plugin-node-resolve@16.0.3(rollup@4.59.0)': + '@rollup/plugin-json@6.1.0(rollup@4.60.0)': dependencies: - '@rollup/pluginutils': 5.3.0(rollup@4.59.0) + '@rollup/pluginutils': 5.3.0(rollup@4.60.0) + optionalDependencies: + rollup: 4.60.0 + + '@rollup/plugin-node-resolve@16.0.3(rollup@4.60.0)': + dependencies: + '@rollup/pluginutils': 5.3.0(rollup@4.60.0) '@types/resolve': 1.20.2 deepmerge: 4.3.1 is-module: 1.0.0 resolve: 1.22.11 optionalDependencies: - rollup: 4.59.0 + rollup: 4.60.0 '@rollup/pluginutils@5.3.0(rollup@4.59.0)': dependencies: @@ -10978,87 +11143,176 @@ snapshots: optionalDependencies: rollup: 4.59.0 + '@rollup/pluginutils@5.3.0(rollup@4.60.0)': + dependencies: + '@types/estree': 1.0.8 + estree-walker: 2.0.2 + picomatch: 4.0.3 + optionalDependencies: + rollup: 4.60.0 + '@rollup/rollup-android-arm-eabi@4.59.0': optional: true + '@rollup/rollup-android-arm-eabi@4.60.0': + optional: true + '@rollup/rollup-android-arm64@4.59.0': optional: true + '@rollup/rollup-android-arm64@4.60.0': + optional: true + '@rollup/rollup-darwin-arm64@4.59.0': optional: true + '@rollup/rollup-darwin-arm64@4.60.0': + optional: true + '@rollup/rollup-darwin-x64@4.59.0': optional: true + '@rollup/rollup-darwin-x64@4.60.0': + optional: true + '@rollup/rollup-freebsd-arm64@4.59.0': optional: true + '@rollup/rollup-freebsd-arm64@4.60.0': + optional: true + '@rollup/rollup-freebsd-x64@4.59.0': optional: true + '@rollup/rollup-freebsd-x64@4.60.0': + optional: true + '@rollup/rollup-linux-arm-gnueabihf@4.59.0': optional: true + '@rollup/rollup-linux-arm-gnueabihf@4.60.0': + optional: true + '@rollup/rollup-linux-arm-musleabihf@4.59.0': optional: true + '@rollup/rollup-linux-arm-musleabihf@4.60.0': + optional: true + '@rollup/rollup-linux-arm64-gnu@4.59.0': optional: true + '@rollup/rollup-linux-arm64-gnu@4.60.0': + optional: true + '@rollup/rollup-linux-arm64-musl@4.59.0': optional: true + '@rollup/rollup-linux-arm64-musl@4.60.0': + optional: true + '@rollup/rollup-linux-loong64-gnu@4.59.0': optional: true + '@rollup/rollup-linux-loong64-gnu@4.60.0': + optional: true + '@rollup/rollup-linux-loong64-musl@4.59.0': optional: true + '@rollup/rollup-linux-loong64-musl@4.60.0': + optional: true + '@rollup/rollup-linux-ppc64-gnu@4.59.0': optional: true + '@rollup/rollup-linux-ppc64-gnu@4.60.0': + optional: true + '@rollup/rollup-linux-ppc64-musl@4.59.0': optional: true + '@rollup/rollup-linux-ppc64-musl@4.60.0': + optional: true + '@rollup/rollup-linux-riscv64-gnu@4.59.0': optional: true + '@rollup/rollup-linux-riscv64-gnu@4.60.0': + optional: true + '@rollup/rollup-linux-riscv64-musl@4.59.0': optional: true + '@rollup/rollup-linux-riscv64-musl@4.60.0': + optional: true + '@rollup/rollup-linux-s390x-gnu@4.59.0': optional: true + '@rollup/rollup-linux-s390x-gnu@4.60.0': + optional: true + '@rollup/rollup-linux-x64-gnu@4.59.0': optional: true + '@rollup/rollup-linux-x64-gnu@4.60.0': + optional: true + '@rollup/rollup-linux-x64-musl@4.59.0': optional: true + '@rollup/rollup-linux-x64-musl@4.60.0': + optional: true + '@rollup/rollup-openbsd-x64@4.59.0': optional: true + '@rollup/rollup-openbsd-x64@4.60.0': + optional: true + '@rollup/rollup-openharmony-arm64@4.59.0': optional: true + '@rollup/rollup-openharmony-arm64@4.60.0': + optional: true + '@rollup/rollup-win32-arm64-msvc@4.59.0': optional: true + '@rollup/rollup-win32-arm64-msvc@4.60.0': + optional: true + '@rollup/rollup-win32-ia32-msvc@4.59.0': optional: true + '@rollup/rollup-win32-ia32-msvc@4.60.0': + optional: true + '@rollup/rollup-win32-x64-gnu@4.59.0': optional: true + '@rollup/rollup-win32-x64-gnu@4.60.0': + optional: true + '@rollup/rollup-win32-x64-msvc@4.59.0': optional: true + '@rollup/rollup-win32-x64-msvc@4.60.0': + optional: true + '@rollup/wasm-node@4.59.0': dependencies: '@types/estree': 1.0.8 optionalDependencies: fsevents: 2.3.3 + '@rollup/wasm-node@4.60.0': + dependencies: + '@types/estree': 1.0.8 + optionalDependencies: + fsevents: 2.3.3 + '@rtsao/scc@1.1.0': {} '@sigstore/bundle@4.0.0': @@ -11105,11 +11359,11 @@ snapshots: '@standard-schema/spec@1.1.0': {} - '@stylistic/eslint-plugin@5.10.0(eslint@10.0.3(jiti@2.6.1))': + '@stylistic/eslint-plugin@5.10.0(eslint@10.1.0(jiti@2.6.1))': dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@10.0.3(jiti@2.6.1)) + '@eslint-community/eslint-utils': 4.9.1(eslint@10.1.0(jiti@2.6.1)) '@typescript-eslint/types': 8.57.0 - eslint: 10.0.3(jiti@2.6.1) + eslint: 10.1.0(jiti@2.6.1) eslint-visitor-keys: 4.2.1 espree: 10.4.0 estraverse: 5.3.0 @@ -11119,9 +11373,9 @@ snapshots: dependencies: defer-to-connect: 2.0.1 - '@tony.ganchev/eslint-plugin-header@3.3.1(eslint@10.0.3(jiti@2.6.1))': + '@tony.ganchev/eslint-plugin-header@3.3.1(eslint@10.1.0(jiti@2.6.1))': dependencies: - eslint: 10.0.3(jiti@2.6.1) + eslint: 10.1.0(jiti@2.6.1) '@tootallnate/once@2.0.0': {} @@ -11427,15 +11681,15 @@ snapshots: '@types/node': 22.19.15 optional: true - '@typescript-eslint/eslint-plugin@8.57.0(@typescript-eslint/parser@8.57.0(eslint@10.0.3(jiti@2.6.1))(typescript@6.0.1-rc))(eslint@10.0.3(jiti@2.6.1))(typescript@6.0.1-rc)': + '@typescript-eslint/eslint-plugin@8.57.1(@typescript-eslint/parser@8.57.1(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.1-rc))(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.1-rc)': dependencies: '@eslint-community/regexpp': 4.12.2 - '@typescript-eslint/parser': 8.57.0(eslint@10.0.3(jiti@2.6.1))(typescript@6.0.1-rc) - '@typescript-eslint/scope-manager': 8.57.0 - '@typescript-eslint/type-utils': 8.57.0(eslint@10.0.3(jiti@2.6.1))(typescript@6.0.1-rc) - '@typescript-eslint/utils': 8.57.0(eslint@10.0.3(jiti@2.6.1))(typescript@6.0.1-rc) - '@typescript-eslint/visitor-keys': 8.57.0 - eslint: 10.0.3(jiti@2.6.1) + '@typescript-eslint/parser': 8.57.1(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.1-rc) + '@typescript-eslint/scope-manager': 8.57.1 + '@typescript-eslint/type-utils': 8.57.1(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.1-rc) + '@typescript-eslint/utils': 8.57.1(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.1-rc) + '@typescript-eslint/visitor-keys': 8.57.1 + eslint: 10.1.0(jiti@2.6.1) ignore: 7.0.5 natural-compare: 1.4.0 ts-api-utils: 2.4.0(typescript@6.0.1-rc) @@ -11443,43 +11697,43 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.57.0(eslint@10.0.3(jiti@2.6.1))(typescript@6.0.1-rc)': + '@typescript-eslint/parser@8.57.1(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.1-rc)': dependencies: - '@typescript-eslint/scope-manager': 8.57.0 - '@typescript-eslint/types': 8.57.0 - '@typescript-eslint/typescript-estree': 8.57.0(typescript@6.0.1-rc) - '@typescript-eslint/visitor-keys': 8.57.0 + '@typescript-eslint/scope-manager': 8.57.1 + '@typescript-eslint/types': 8.57.1 + '@typescript-eslint/typescript-estree': 8.57.1(typescript@6.0.1-rc) + '@typescript-eslint/visitor-keys': 8.57.1 debug: 4.4.3(supports-color@10.2.2) - eslint: 10.0.3(jiti@2.6.1) + eslint: 10.1.0(jiti@2.6.1) typescript: 6.0.1-rc transitivePeerDependencies: - supports-color - '@typescript-eslint/project-service@8.57.0(typescript@6.0.1-rc)': + '@typescript-eslint/project-service@8.57.1(typescript@6.0.1-rc)': dependencies: - '@typescript-eslint/tsconfig-utils': 8.57.0(typescript@6.0.1-rc) - '@typescript-eslint/types': 8.57.0 + '@typescript-eslint/tsconfig-utils': 8.57.1(typescript@6.0.1-rc) + '@typescript-eslint/types': 8.57.1 debug: 4.4.3(supports-color@10.2.2) typescript: 6.0.1-rc transitivePeerDependencies: - supports-color - '@typescript-eslint/scope-manager@8.57.0': + '@typescript-eslint/scope-manager@8.57.1': dependencies: - '@typescript-eslint/types': 8.57.0 - '@typescript-eslint/visitor-keys': 8.57.0 + '@typescript-eslint/types': 8.57.1 + '@typescript-eslint/visitor-keys': 8.57.1 - '@typescript-eslint/tsconfig-utils@8.57.0(typescript@6.0.1-rc)': + '@typescript-eslint/tsconfig-utils@8.57.1(typescript@6.0.1-rc)': dependencies: typescript: 6.0.1-rc - '@typescript-eslint/type-utils@8.57.0(eslint@10.0.3(jiti@2.6.1))(typescript@6.0.1-rc)': + '@typescript-eslint/type-utils@8.57.1(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.1-rc)': dependencies: - '@typescript-eslint/types': 8.57.0 - '@typescript-eslint/typescript-estree': 8.57.0(typescript@6.0.1-rc) - '@typescript-eslint/utils': 8.57.0(eslint@10.0.3(jiti@2.6.1))(typescript@6.0.1-rc) + '@typescript-eslint/types': 8.57.1 + '@typescript-eslint/typescript-estree': 8.57.1(typescript@6.0.1-rc) + '@typescript-eslint/utils': 8.57.1(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.1-rc) debug: 4.4.3(supports-color@10.2.2) - eslint: 10.0.3(jiti@2.6.1) + eslint: 10.1.0(jiti@2.6.1) ts-api-utils: 2.4.0(typescript@6.0.1-rc) typescript: 6.0.1-rc transitivePeerDependencies: @@ -11487,12 +11741,14 @@ snapshots: '@typescript-eslint/types@8.57.0': {} - '@typescript-eslint/typescript-estree@8.57.0(typescript@6.0.1-rc)': + '@typescript-eslint/types@8.57.1': {} + + '@typescript-eslint/typescript-estree@8.57.1(typescript@6.0.1-rc)': dependencies: - '@typescript-eslint/project-service': 8.57.0(typescript@6.0.1-rc) - '@typescript-eslint/tsconfig-utils': 8.57.0(typescript@6.0.1-rc) - '@typescript-eslint/types': 8.57.0 - '@typescript-eslint/visitor-keys': 8.57.0 + '@typescript-eslint/project-service': 8.57.1(typescript@6.0.1-rc) + '@typescript-eslint/tsconfig-utils': 8.57.1(typescript@6.0.1-rc) + '@typescript-eslint/types': 8.57.1 + '@typescript-eslint/visitor-keys': 8.57.1 debug: 4.4.3(supports-color@10.2.2) minimatch: 10.2.4 semver: 7.7.4 @@ -11502,20 +11758,20 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.57.0(eslint@10.0.3(jiti@2.6.1))(typescript@6.0.1-rc)': + '@typescript-eslint/utils@8.57.1(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.1-rc)': dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@10.0.3(jiti@2.6.1)) - '@typescript-eslint/scope-manager': 8.57.0 - '@typescript-eslint/types': 8.57.0 - '@typescript-eslint/typescript-estree': 8.57.0(typescript@6.0.1-rc) - eslint: 10.0.3(jiti@2.6.1) + '@eslint-community/eslint-utils': 4.9.1(eslint@10.1.0(jiti@2.6.1)) + '@typescript-eslint/scope-manager': 8.57.1 + '@typescript-eslint/types': 8.57.1 + '@typescript-eslint/typescript-estree': 8.57.1(typescript@6.0.1-rc) + eslint: 10.1.0(jiti@2.6.1) typescript: 6.0.1-rc transitivePeerDependencies: - supports-color - '@typescript-eslint/visitor-keys@8.57.0': + '@typescript-eslint/visitor-keys@8.57.1': dependencies: - '@typescript-eslint/types': 8.57.0 + '@typescript-eslint/types': 8.57.1 eslint-visitor-keys: 5.0.1 '@verdaccio/auth@8.0.0-next-8.33': @@ -11675,11 +11931,11 @@ snapshots: lodash: 4.17.23 minimatch: 7.4.9 - '@vitejs/plugin-basic-ssl@2.2.0(vite@7.3.1(@types/node@24.12.0)(jiti@2.6.1)(less@4.6.4)(sass@1.98.0)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))': + '@vitejs/plugin-basic-ssl@2.2.0(vite@7.3.1(@types/node@24.12.0)(jiti@2.6.1)(less@4.6.4)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))': dependencies: - vite: 7.3.1(@types/node@24.12.0)(jiti@2.6.1)(less@4.6.4)(sass@1.98.0)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) + vite: 7.3.1(@types/node@24.12.0)(jiti@2.6.1)(less@4.6.4)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2) - '@vitest/coverage-v8@4.1.0(vitest@4.1.0(@opentelemetry/api@1.9.0)(@types/node@24.12.0)(jiti@2.6.1)(jsdom@29.0.0)(less@4.6.4)(sass@1.98.0)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))': + '@vitest/coverage-v8@4.1.0(vitest@4.1.0(@opentelemetry/api@1.9.0)(@types/node@24.12.0)(jiti@2.6.1)(jsdom@29.0.1)(less@4.6.4)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))': dependencies: '@bcoe/v8-coverage': 1.0.2 '@vitest/utils': 4.1.0 @@ -11691,7 +11947,7 @@ snapshots: obug: 2.1.1 std-env: 4.0.0 tinyrainbow: 3.1.0 - vitest: 4.1.0(@opentelemetry/api@1.9.0)(@types/node@24.12.0)(jiti@2.6.1)(jsdom@29.0.0)(less@4.6.4)(sass@1.98.0)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) + vitest: 4.1.0(@opentelemetry/api@1.9.0)(@types/node@24.12.0)(jiti@2.6.1)(jsdom@29.0.1)(less@4.6.4)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2) '@vitest/expect@4.1.0': dependencies: @@ -11702,13 +11958,13 @@ snapshots: chai: 6.2.2 tinyrainbow: 3.1.0 - '@vitest/mocker@4.1.0(vite@7.3.1(@types/node@24.12.0)(jiti@2.6.1)(less@4.6.4)(sass@1.98.0)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2))': + '@vitest/mocker@4.1.0(vite@7.3.1(@types/node@24.12.0)(jiti@2.6.1)(less@4.6.4)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))': dependencies: '@vitest/spy': 4.1.0 estree-walker: 3.0.3 magic-string: 0.30.21 optionalDependencies: - vite: 7.3.1(@types/node@24.12.0)(jiti@2.6.1)(less@4.6.4)(sass@1.98.0)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) + vite: 7.3.1(@types/node@24.12.0)(jiti@2.6.1)(less@4.6.4)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2) '@vitest/pretty-format@4.1.0': dependencies: @@ -13062,9 +13318,9 @@ snapshots: optionalDependencies: source-map: 0.6.1 - eslint-config-prettier@10.1.8(eslint@10.0.3(jiti@2.6.1)): + eslint-config-prettier@10.1.8(eslint@10.1.0(jiti@2.6.1)): dependencies: - eslint: 10.0.3(jiti@2.6.1) + eslint: 10.1.0(jiti@2.6.1) eslint-import-resolver-node@0.3.9: dependencies: @@ -13074,17 +13330,17 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-module-utils@2.12.1(@typescript-eslint/parser@8.57.0(eslint@10.0.3(jiti@2.6.1))(typescript@6.0.1-rc))(eslint-import-resolver-node@0.3.9)(eslint@10.0.3(jiti@2.6.1)): + eslint-module-utils@2.12.1(@typescript-eslint/parser@8.57.1(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.1-rc))(eslint-import-resolver-node@0.3.9)(eslint@10.1.0(jiti@2.6.1)): dependencies: debug: 3.2.7 optionalDependencies: - '@typescript-eslint/parser': 8.57.0(eslint@10.0.3(jiti@2.6.1))(typescript@6.0.1-rc) - eslint: 10.0.3(jiti@2.6.1) + '@typescript-eslint/parser': 8.57.1(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.1-rc) + eslint: 10.1.0(jiti@2.6.1) eslint-import-resolver-node: 0.3.9 transitivePeerDependencies: - supports-color - eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.57.0(eslint@10.0.3(jiti@2.6.1))(typescript@6.0.1-rc))(eslint@10.0.3(jiti@2.6.1)): + eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.57.1(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.1-rc))(eslint@10.1.0(jiti@2.6.1)): dependencies: '@rtsao/scc': 1.1.0 array-includes: 3.1.9 @@ -13093,9 +13349,9 @@ snapshots: array.prototype.flatmap: 1.3.3 debug: 3.2.7 doctrine: 2.1.0 - eslint: 10.0.3(jiti@2.6.1) + eslint: 10.1.0(jiti@2.6.1) eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.57.0(eslint@10.0.3(jiti@2.6.1))(typescript@6.0.1-rc))(eslint-import-resolver-node@0.3.9)(eslint@10.0.3(jiti@2.6.1)) + eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.57.1(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.1-rc))(eslint-import-resolver-node@0.3.9)(eslint@10.1.0(jiti@2.6.1)) hasown: 2.0.2 is-core-module: 2.16.1 is-glob: 4.0.3 @@ -13107,7 +13363,7 @@ snapshots: string.prototype.trimend: 1.0.9 tsconfig-paths: 3.15.0 optionalDependencies: - '@typescript-eslint/parser': 8.57.0(eslint@10.0.3(jiti@2.6.1))(typescript@6.0.1-rc) + '@typescript-eslint/parser': 8.57.1(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.1-rc) transitivePeerDependencies: - eslint-import-resolver-typescript - eslint-import-resolver-webpack @@ -13131,9 +13387,9 @@ snapshots: eslint-visitor-keys@5.0.1: {} - eslint@10.0.3(jiti@2.6.1): + eslint@10.1.0(jiti@2.6.1): dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@10.0.3(jiti@2.6.1)) + '@eslint-community/eslint-utils': 4.9.1(eslint@10.1.0(jiti@2.6.1)) '@eslint-community/regexpp': 4.12.2 '@eslint/config-array': 0.23.3 '@eslint/config-helpers': 0.5.3 @@ -14273,7 +14529,7 @@ snapshots: jsbn@0.1.1: {} - jsdom@29.0.0: + jsdom@29.0.1: dependencies: '@asamuzakjp/css-color': 5.0.1 '@asamuzakjp/dom-selector': 7.0.3 @@ -14290,7 +14546,7 @@ snapshots: saxes: 6.0.0 symbol-tree: 3.2.4 tough-cookie: 6.0.1 - undici: 7.24.4 + undici: 7.24.5 w3c-xmlserializer: 5.0.0 webidl-conversions: 8.0.1 whatwg-mimetype: 5.0.0 @@ -15430,7 +15686,7 @@ snapshots: punycode@2.3.1: {} - puppeteer-core@24.39.1(bufferutil@4.1.0)(utf-8-validate@6.0.6): + puppeteer-core@24.40.0(bufferutil@4.1.0)(utf-8-validate@6.0.6): dependencies: '@puppeteer/browsers': 2.13.0 chromium-bidi: 14.0.0(devtools-protocol@0.0.1581282) @@ -15447,13 +15703,13 @@ snapshots: - supports-color - utf-8-validate - puppeteer@24.39.1(bufferutil@4.1.0)(typescript@6.0.1-rc)(utf-8-validate@6.0.6): + puppeteer@24.40.0(bufferutil@4.1.0)(typescript@6.0.1-rc)(utf-8-validate@6.0.6): dependencies: '@puppeteer/browsers': 2.13.0 chromium-bidi: 14.0.0(devtools-protocol@0.0.1581282) cosmiconfig: 9.0.1(typescript@6.0.1-rc) devtools-protocol: 0.0.1581282 - puppeteer-core: 24.39.1(bufferutil@4.1.0)(utf-8-validate@6.0.6) + puppeteer-core: 24.40.0(bufferutil@4.1.0)(utf-8-validate@6.0.6) typed-query-selector: 2.12.1 transitivePeerDependencies: - bare-abort-controller @@ -15673,26 +15929,26 @@ snapshots: dependencies: glob: 10.5.0 - rolldown@1.0.0-rc.9: + rolldown@1.0.0-rc.10: dependencies: - '@oxc-project/types': 0.115.0 - '@rolldown/pluginutils': 1.0.0-rc.9 + '@oxc-project/types': 0.120.0 + '@rolldown/pluginutils': 1.0.0-rc.10 optionalDependencies: - '@rolldown/binding-android-arm64': 1.0.0-rc.9 - '@rolldown/binding-darwin-arm64': 1.0.0-rc.9 - '@rolldown/binding-darwin-x64': 1.0.0-rc.9 - '@rolldown/binding-freebsd-x64': 1.0.0-rc.9 - '@rolldown/binding-linux-arm-gnueabihf': 1.0.0-rc.9 - '@rolldown/binding-linux-arm64-gnu': 1.0.0-rc.9 - '@rolldown/binding-linux-arm64-musl': 1.0.0-rc.9 - '@rolldown/binding-linux-ppc64-gnu': 1.0.0-rc.9 - '@rolldown/binding-linux-s390x-gnu': 1.0.0-rc.9 - '@rolldown/binding-linux-x64-gnu': 1.0.0-rc.9 - '@rolldown/binding-linux-x64-musl': 1.0.0-rc.9 - '@rolldown/binding-openharmony-arm64': 1.0.0-rc.9 - '@rolldown/binding-wasm32-wasi': 1.0.0-rc.9 - '@rolldown/binding-win32-arm64-msvc': 1.0.0-rc.9 - '@rolldown/binding-win32-x64-msvc': 1.0.0-rc.9 + '@rolldown/binding-android-arm64': 1.0.0-rc.10 + '@rolldown/binding-darwin-arm64': 1.0.0-rc.10 + '@rolldown/binding-darwin-x64': 1.0.0-rc.10 + '@rolldown/binding-freebsd-x64': 1.0.0-rc.10 + '@rolldown/binding-linux-arm-gnueabihf': 1.0.0-rc.10 + '@rolldown/binding-linux-arm64-gnu': 1.0.0-rc.10 + '@rolldown/binding-linux-arm64-musl': 1.0.0-rc.10 + '@rolldown/binding-linux-ppc64-gnu': 1.0.0-rc.10 + '@rolldown/binding-linux-s390x-gnu': 1.0.0-rc.10 + '@rolldown/binding-linux-x64-gnu': 1.0.0-rc.10 + '@rolldown/binding-linux-x64-musl': 1.0.0-rc.10 + '@rolldown/binding-openharmony-arm64': 1.0.0-rc.10 + '@rolldown/binding-wasm32-wasi': 1.0.0-rc.10 + '@rolldown/binding-win32-arm64-msvc': 1.0.0-rc.10 + '@rolldown/binding-win32-x64-msvc': 1.0.0-rc.10 rollup-license-plugin@3.2.1: dependencies: @@ -15712,10 +15968,21 @@ snapshots: optionalDependencies: '@babel/code-frame': 7.29.0 - rollup-plugin-sourcemaps2@0.5.6(@types/node@22.19.15)(rollup@4.59.0): + rollup-plugin-dts@6.4.1(rollup@4.60.0)(typescript@6.0.1-rc): dependencies: - '@rollup/pluginutils': 5.3.0(rollup@4.59.0) - rollup: 4.59.0 + '@jridgewell/remapping': 2.3.5 + '@jridgewell/sourcemap-codec': 1.5.5 + convert-source-map: 2.0.0 + magic-string: 0.30.21 + rollup: 4.60.0 + typescript: 6.0.1-rc + optionalDependencies: + '@babel/code-frame': 7.29.0 + + rollup-plugin-sourcemaps2@0.5.6(@types/node@22.19.15)(rollup@4.60.0): + dependencies: + '@rollup/pluginutils': 5.3.0(rollup@4.60.0) + rollup: 4.60.0 optionalDependencies: '@types/node': 22.19.15 @@ -15750,6 +16017,37 @@ snapshots: '@rollup/rollup-win32-x64-msvc': 4.59.0 fsevents: 2.3.3 + rollup@4.60.0: + dependencies: + '@types/estree': 1.0.8 + optionalDependencies: + '@rollup/rollup-android-arm-eabi': 4.60.0 + '@rollup/rollup-android-arm64': 4.60.0 + '@rollup/rollup-darwin-arm64': 4.60.0 + '@rollup/rollup-darwin-x64': 4.60.0 + '@rollup/rollup-freebsd-arm64': 4.60.0 + '@rollup/rollup-freebsd-x64': 4.60.0 + '@rollup/rollup-linux-arm-gnueabihf': 4.60.0 + '@rollup/rollup-linux-arm-musleabihf': 4.60.0 + '@rollup/rollup-linux-arm64-gnu': 4.60.0 + '@rollup/rollup-linux-arm64-musl': 4.60.0 + '@rollup/rollup-linux-loong64-gnu': 4.60.0 + '@rollup/rollup-linux-loong64-musl': 4.60.0 + '@rollup/rollup-linux-ppc64-gnu': 4.60.0 + '@rollup/rollup-linux-ppc64-musl': 4.60.0 + '@rollup/rollup-linux-riscv64-gnu': 4.60.0 + '@rollup/rollup-linux-riscv64-musl': 4.60.0 + '@rollup/rollup-linux-s390x-gnu': 4.60.0 + '@rollup/rollup-linux-x64-gnu': 4.60.0 + '@rollup/rollup-linux-x64-musl': 4.60.0 + '@rollup/rollup-openbsd-x64': 4.60.0 + '@rollup/rollup-openharmony-arm64': 4.60.0 + '@rollup/rollup-win32-arm64-msvc': 4.60.0 + '@rollup/rollup-win32-ia32-msvc': 4.60.0 + '@rollup/rollup-win32-x64-gnu': 4.60.0 + '@rollup/rollup-win32-x64-msvc': 4.60.0 + fsevents: 2.3.3 + router@2.2.0: dependencies: debug: 4.4.3(supports-color@10.2.2) @@ -16360,12 +16658,12 @@ snapshots: '@jridgewell/trace-mapping': 0.3.31 jest-worker: 27.5.1 schema-utils: 4.3.3 - terser: 5.46.0 + terser: 5.46.1 webpack: 5.105.4(esbuild@0.27.3) optionalDependencies: esbuild: 0.27.3 - terser@5.46.0: + terser@5.46.1: dependencies: '@jridgewell/source-map': 0.3.11 acorn: 8.16.0 @@ -16572,7 +16870,7 @@ snapshots: undici@6.24.1: {} - undici@7.24.4: {} + undici@7.24.5: {} unenv@1.10.0: dependencies: @@ -16723,7 +17021,7 @@ snapshots: core-util-is: 1.0.2 extsprintf: 1.3.0 - vite@7.3.1(@types/node@24.12.0)(jiti@2.6.1)(less@4.6.4)(sass@1.98.0)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2): + vite@7.3.1(@types/node@24.12.0)(jiti@2.6.1)(less@4.6.4)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2): dependencies: esbuild: 0.27.3 fdir: 6.5.0(picomatch@4.0.3) @@ -16737,14 +17035,14 @@ snapshots: jiti: 2.6.1 less: 4.6.4 sass: 1.98.0 - terser: 5.46.0 + terser: 5.46.1 tsx: 4.21.0 yaml: 2.8.2 - vitest@4.1.0(@opentelemetry/api@1.9.0)(@types/node@24.12.0)(jiti@2.6.1)(jsdom@29.0.0)(less@4.6.4)(sass@1.98.0)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2): + vitest@4.1.0(@opentelemetry/api@1.9.0)(@types/node@24.12.0)(jiti@2.6.1)(jsdom@29.0.1)(less@4.6.4)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2): dependencies: '@vitest/expect': 4.1.0 - '@vitest/mocker': 4.1.0(vite@7.3.1(@types/node@24.12.0)(jiti@2.6.1)(less@4.6.4)(sass@1.98.0)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)) + '@vitest/mocker': 4.1.0(vite@7.3.1(@types/node@24.12.0)(jiti@2.6.1)(less@4.6.4)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2)) '@vitest/pretty-format': 4.1.0 '@vitest/runner': 4.1.0 '@vitest/snapshot': 4.1.0 @@ -16761,12 +17059,12 @@ snapshots: tinyexec: 1.0.4 tinyglobby: 0.2.15 tinyrainbow: 3.1.0 - vite: 7.3.1(@types/node@24.12.0)(jiti@2.6.1)(less@4.6.4)(sass@1.98.0)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2) + vite: 7.3.1(@types/node@24.12.0)(jiti@2.6.1)(less@4.6.4)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2) why-is-node-running: 2.3.0 optionalDependencies: '@opentelemetry/api': 1.9.0 '@types/node': 24.12.0 - jsdom: 29.0.0 + jsdom: 29.0.1 transitivePeerDependencies: - jiti - less From ca6f08c6e59820160f7ae496a9d8775c78ce1a58 Mon Sep 17 00:00:00 2001 From: Muhammad Abdul Rehman <artahir@computingfuturetech.com> Date: Tue, 24 Mar 2026 12:36:02 +0500 Subject: [PATCH 167/226] fix(@angular/ssr): apply forwarded prefix and vary header in accept-language redirects --- packages/angular/ssr/src/app-engine.ts | 18 ++++++++++-------- packages/angular/ssr/test/app-engine_spec.ts | 16 +++++++++++++++- 2 files changed, 25 insertions(+), 9 deletions(-) diff --git a/packages/angular/ssr/src/app-engine.ts b/packages/angular/ssr/src/app-engine.ts index de4eb1efa14f..f7babe9beaf7 100644 --- a/packages/angular/ssr/src/app-engine.ts +++ b/packages/angular/ssr/src/app-engine.ts @@ -10,6 +10,7 @@ import type { AngularServerApp, getOrCreateAngularServerApp } from './app'; import { Hooks } from './hooks'; import { getPotentialLocaleIdFromUrl, getPreferredLocale } from './i18n'; import { EntryPointExports, getAngularAppEngineManifest } from './manifest'; +import { createRedirectResponse } from './utils/redirect'; import { joinUrlParts } from './utils/url'; import { cloneRequestAndPatchHeaders, validateRequest } from './utils/validation'; @@ -146,7 +147,7 @@ export class AngularAppEngine { if (this.supportedLocales.length > 1) { // Redirect to the preferred language if i18n is enabled. - return this.redirectBasedOnAcceptLanguage(request); + return this.redirectBasedOnAcceptLanguage(securedRequest); } return null; @@ -179,13 +180,14 @@ export class AngularAppEngine { if (preferredLocale) { const subPath = supportedLocales[preferredLocale]; if (subPath !== undefined) { - return new Response(null, { - status: 302, // Use a 302 redirect as language preference may change. - headers: { - 'Location': joinUrlParts(pathname, subPath), - 'Vary': 'Accept-Language', - }, - }); + const prefix = request.headers.get('X-Forwarded-Prefix') ?? ''; + + return createRedirectResponse( + joinUrlParts(prefix, pathname, subPath), + 302, + // Use a 302 redirect as language preference may change. + { 'Vary': 'Accept-Language' }, + ); } } diff --git a/packages/angular/ssr/test/app-engine_spec.ts b/packages/angular/ssr/test/app-engine_spec.ts index 7f8d24dce77a..14e664659748 100644 --- a/packages/angular/ssr/test/app-engine_spec.ts +++ b/packages/angular/ssr/test/app-engine_spec.ts @@ -160,7 +160,21 @@ describe('AngularAppEngine', () => { const response = await appEngine.handle(request); expect(response?.status).toBe(302); expect(response?.headers.get('Location')).toBe('/it'); - expect(response?.headers.get('Vary')).toBe('Accept-Language'); + expect(response?.headers.get('Vary')).toBe('X-Forwarded-Prefix, Accept-Language'); + }); + + it('should include forwarded prefix in locale redirect location when present', async () => { + const request = new Request('https://example.com', { + headers: { + 'Accept-Language': 'it', + 'X-Forwarded-Prefix': '/app', + }, + }); + + const response = await appEngine.handle(request); + expect(response?.status).toBe(302); + expect(response?.headers.get('Location')).toBe('/app/it'); + expect(response?.headers.get('Vary')).toBe('X-Forwarded-Prefix, Accept-Language'); }); it('should return null for requests to file-like resources in a locale', async () => { From f98cc82eb0f46986e61b4f94b57dcd36e4eaf215 Mon Sep 17 00:00:00 2001 From: Alan Agius <alanagius@google.com> Date: Tue, 24 Mar 2026 15:05:29 +0100 Subject: [PATCH 168/226] feat(@schematics/angular): rely on strict template default in generated workspaces Since strict templates are now the default in the Angular compiler, this change removes the explicit "strictTemplates": true setting when creating a new strict workspace. We now only explicitly set "strictTemplates": false when the workspace is created with --strict=false to maintain consistent behavior for non-strict setups. --- .../angular/workspace/files/tsconfig.json.template | 4 ++-- packages/schematics/angular/workspace/index_spec.ts | 12 +++++++----- 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/packages/schematics/angular/workspace/files/tsconfig.json.template b/packages/schematics/angular/workspace/files/tsconfig.json.template index d51e03ac01fe..799cff73365a 100644 --- a/packages/schematics/angular/workspace/files/tsconfig.json.template +++ b/packages/schematics/angular/workspace/files/tsconfig.json.template @@ -18,8 +18,8 @@ "angularCompilerOptions": { "enableI18nLegacyMessageIdFormat": false<% if (strict) { %>, "strictInjectionParameters": true, - "strictInputAccessModifiers": true, - "strictTemplates": true<% } %> + "strictInputAccessModifiers": true<% } else { %>, + "strictTemplates": false<% } %> }, "files": [] } diff --git a/packages/schematics/angular/workspace/index_spec.ts b/packages/schematics/angular/workspace/index_spec.ts index bc7a9366b68b..7941fbac96cc 100644 --- a/packages/schematics/angular/workspace/index_spec.ts +++ b/packages/schematics/angular/workspace/index_spec.ts @@ -99,9 +99,9 @@ describe('Workspace Schematic', () => { tree.readContent('tsconfig.json').toString(), ); expect(compilerOptions.strict).toBeUndefined(); - expect( - Object.keys(angularCompilerOptions).filter((option) => option.startsWith('strict')), - ).toEqual([]); + expect(angularCompilerOptions.strictTemplates).toBeFalse(); + expect(angularCompilerOptions.strictInputAccessModifiers).toBeUndefined(); + expect(angularCompilerOptions.strictInjectionParameters).toBeUndefined(); }); it('should add strict compiler options when true', async () => { @@ -112,8 +112,10 @@ describe('Workspace Schematic', () => { const { compilerOptions, angularCompilerOptions } = parseJson( tree.readContent('tsconfig.json').toString(), ); - expect(compilerOptions.strict).toBe(true); - expect(angularCompilerOptions.strictTemplates).toBe(true); + expect(compilerOptions.strict).toBeTrue(); + expect(angularCompilerOptions.strictTemplates).toBeUndefined(); + expect(angularCompilerOptions.strictInputAccessModifiers).toBeTrue(); + expect(angularCompilerOptions.strictInjectionParameters).toBeTrue(); }); it('should add vscode testing configuration', async () => { From 3b99ee140db82c8ddae3f6e48f9fc38eca204a53 Mon Sep 17 00:00:00 2001 From: Alan Agius <alanagius@google.com> Date: Wed, 25 Mar 2026 09:35:55 +0100 Subject: [PATCH 169/226] fix(@angular/ssr): support '*' in allowedHosts and warn about security risks This commit adds support for '*' in allowedHosts for SSR, allowing any host to be validated. It also adds a security warning when '*' is used to inform users of the potential risks of allowing all host headers. --- .../build/src/builders/dev-server/vite/index.ts | 4 +++- packages/angular/ssr/src/app-engine.ts | 17 ++++++++++++++++- packages/angular/ssr/src/utils/validation.ts | 2 +- .../angular/ssr/test/utils/validation_spec.ts | 16 ++++++++++++++++ 4 files changed, 36 insertions(+), 3 deletions(-) diff --git a/packages/angular/build/src/builders/dev-server/vite/index.ts b/packages/angular/build/src/builders/dev-server/vite/index.ts index 083008f17050..557b2d34b52a 100644 --- a/packages/angular/build/src/builders/dev-server/vite/index.ts +++ b/packages/angular/build/src/builders/dev-server/vite/index.ts @@ -101,7 +101,9 @@ export async function* serveWithVite( // Angular SSR supports `*.`. const allowedHosts = Array.isArray(serverOptions.allowedHosts) ? serverOptions.allowedHosts.map((host) => (host[0] === '.' ? '*' + host : host)) - : []; + : serverOptions.allowedHosts === true + ? ['*'] + : []; // Always allow the dev server host allowedHosts.push(serverOptions.host); diff --git a/packages/angular/ssr/src/app-engine.ts b/packages/angular/ssr/src/app-engine.ts index f7babe9beaf7..09e1093fef72 100644 --- a/packages/angular/ssr/src/app-engine.ts +++ b/packages/angular/ssr/src/app-engine.ts @@ -88,7 +88,22 @@ export class AngularAppEngine { * @param options Options for the Angular server application engine. */ constructor(options?: AngularAppEngineOptions) { - this.allowedHosts = new Set([...(options?.allowedHosts ?? []), ...this.manifest.allowedHosts]); + this.allowedHosts = this.getAllowedHosts(options); + } + + private getAllowedHosts(options: AngularAppEngineOptions | undefined): ReadonlySet<string> { + const allowedHosts = new Set([...(options?.allowedHosts ?? []), ...this.manifest.allowedHosts]); + + if (allowedHosts.has('*')) { + // eslint-disable-next-line no-console + console.warn( + 'Allowing all hosts via "*" is a security risk. This configuration should only be used when ' + + 'validation for "Host" and "X-Forwarded-Host" headers is performed in another layer, such as a load balancer or reverse proxy. ' + + 'For more information see: https://angular.dev/best-practices/security#preventing-server-side-request-forgery-ssrf', + ); + } + + return allowedHosts; } /** diff --git a/packages/angular/ssr/src/utils/validation.ts b/packages/angular/ssr/src/utils/validation.ts index cb1bf6ecb56b..e359b94aac6f 100644 --- a/packages/angular/ssr/src/utils/validation.ts +++ b/packages/angular/ssr/src/utils/validation.ts @@ -224,7 +224,7 @@ function verifyHostAllowed( * @returns `true` if the hostname is allowed, `false` otherwise. */ function isHostAllowed(hostname: string, allowedHosts: ReadonlySet<string>): boolean { - if (allowedHosts.has(hostname)) { + if (allowedHosts.has('*') || allowedHosts.has(hostname)) { return true; } diff --git a/packages/angular/ssr/test/utils/validation_spec.ts b/packages/angular/ssr/test/utils/validation_spec.ts index d8c3eaeebdb3..8fed87e83713 100644 --- a/packages/angular/ssr/test/utils/validation_spec.ts +++ b/packages/angular/ssr/test/utils/validation_spec.ts @@ -64,6 +64,13 @@ describe('Validation Utils', () => { /URL with hostname "google.com" is not allowed/, ); }); + + it('should pass for all hostnames when "*" is used', () => { + const allowedHosts = new Set(['*']); + expect(() => validateUrl(new URL('http://example.com'), allowedHosts)).not.toThrow(); + expect(() => validateUrl(new URL('http://google.com'), allowedHosts)).not.toThrow(); + expect(() => validateUrl(new URL('http://evil.com'), allowedHosts)).not.toThrow(); + }); }); describe('validateRequest', () => { @@ -242,6 +249,15 @@ describe('Validation Utils', () => { expect(secured.headers.get('host')).toBe('example.com'); }); + it('should allow any host header when "*" is used', () => { + const allowedHosts = new Set(['*']); + const req = new Request('http://example.com', { + headers: { 'host': 'evil.com' }, + }); + const { request: secured } = cloneRequestAndPatchHeaders(req, allowedHosts); + expect(secured.headers.get('host')).toBe('evil.com'); + }); + it('should validate x-forwarded-host header', async () => { const req = new Request('http://example.com', { headers: { 'x-forwarded-host': 'evil.com' }, From 8ab937536405ad458d18c67d6f222899483b0ba1 Mon Sep 17 00:00:00 2001 From: Kristiyan Kostadinov <crisbeto@abv.bg> Date: Wed, 25 Mar 2026 09:45:17 +0100 Subject: [PATCH 170/226] build: update to TypeScript 6 stable Updates to the stable version of TypeScript 6. --- MODULE.bazel | 6 +- MODULE.bazel.lock | 6 +- package.json | 2 +- .../blank/project-files/package.json | 2 +- .../blank/project-files/tsconfig.json | 4 +- .../schematic/files/package.json | 2 +- .../schematic/files/tsconfig.json | 2 +- packages/ngtools/webpack/package.json | 2 +- .../Microsoft/TypeScript/BUILD.bazel | 2 +- .../Microsoft/TypeScript/lib/typescript.d.ts | 128 +- .../Microsoft/TypeScript/lib/typescript.js | 4411 ++++++++++------- .../utility/latest-versions/package.json | 2 +- pnpm-lock.yaml | 160 +- .../assets/ssr-project-webpack/package.json | 2 +- .../assets/ssr-project-webpack/tsconfig.json | 3 +- tests/e2e/tests/build/ts-paths.ts | 14 +- 16 files changed, 2770 insertions(+), 1978 deletions(-) diff --git a/MODULE.bazel b/MODULE.bazel index 8651f5d9383e..a347c132304b 100644 --- a/MODULE.bazel +++ b/MODULE.bazel @@ -174,9 +174,9 @@ use_repo(npm, "npm") rules_ts_ext = use_extension("@aspect_rules_ts//ts:extensions.bzl", "ext") rules_ts_ext.deps( name = "angular_cli_npm_typescript", - # Obtained by: npm info typescript@6.0.1-rc dist.integrity - ts_integrity = "sha512-7XlzYb+p/7YxX6qSOzwB4mxVFRdAgWWkj1PgAZ+jzldeuFV6Z77vwFbNxHsUXAL/bhlWY2jCT8shLwDJR8337g==", - ts_version = "6.0.1-rc", + # Obtained by: npm info typescript@6.0.2 dist.integrity + ts_integrity = "sha512-bGdAIrZ0wiGDo5l8c++HWtbaNCWTS4UTv7RaTH/ThVIgjkveJt83m74bBHMJkuCbslY8ixgLBVZJIOiQlQTjfQ==", + ts_version = "6.0.2", ) use_repo(rules_ts_ext, **{"npm_typescript": "angular_cli_npm_typescript"}) diff --git a/MODULE.bazel.lock b/MODULE.bazel.lock index 9c1f883a5e30..953c1d821f33 100644 --- a/MODULE.bazel.lock +++ b/MODULE.bazel.lock @@ -427,7 +427,7 @@ "@@aspect_rules_ts+//ts:extensions.bzl%ext": { "general": { "bzlTransitiveDigest": "GbfZLeEI0W26fAQ89dUljyLGSAkzkr3CkF+VDQ0IFlI=", - "usagesDigest": "NEcSh/CygeQtMiUvLufm5mltdm7VYYMKhoN+swz5Nb8=", + "usagesDigest": "M9vJ1ahjqDb8ONBLGfZdvp4Vq1o4Y6Xjfv/ZY7PlnYo=", "recordedFileInputs": {}, "recordedDirentsInputs": {}, "envVariables": {}, @@ -435,8 +435,8 @@ "angular_cli_npm_typescript": { "repoRuleId": "@@aspect_rules_ts+//ts/private:npm_repositories.bzl%http_archive_version", "attributes": { - "version": "6.0.1-rc", - "integrity": "sha512-7XlzYb+p/7YxX6qSOzwB4mxVFRdAgWWkj1PgAZ+jzldeuFV6Z77vwFbNxHsUXAL/bhlWY2jCT8shLwDJR8337g==", + "version": "6.0.2", + "integrity": "sha512-bGdAIrZ0wiGDo5l8c++HWtbaNCWTS4UTv7RaTH/ThVIgjkveJt83m74bBHMJkuCbslY8ixgLBVZJIOiQlQTjfQ==", "urls": [ "https://registry.npmjs.org/typescript/-/typescript-{}.tgz" ] diff --git a/package.json b/package.json index 7143e92c8c27..1958b08c024a 100644 --- a/package.json +++ b/package.json @@ -128,7 +128,7 @@ "semver": "7.7.4", "source-map-support": "0.5.21", "tslib": "2.8.1", - "typescript": "6.0.1-rc", + "typescript": "6.0.2", "undici": "7.24.5", "unenv": "^1.10.0", "verdaccio": "6.3.2", diff --git a/packages/angular_devkit/schematics_cli/blank/project-files/package.json b/packages/angular_devkit/schematics_cli/blank/project-files/package.json index 1a912351a9b9..88693af94a7c 100644 --- a/packages/angular_devkit/schematics_cli/blank/project-files/package.json +++ b/packages/angular_devkit/schematics_cli/blank/project-files/package.json @@ -15,7 +15,7 @@ "dependencies": { "@angular-devkit/core": "^<%= coreVersion %>", "@angular-devkit/schematics": "^<%= schematicsVersion %>", - "typescript": "~5.9.2" + "typescript": "~6.0.2" }, "devDependencies": { "@types/node": "^20.17.19", diff --git a/packages/angular_devkit/schematics_cli/blank/project-files/tsconfig.json b/packages/angular_devkit/schematics_cli/blank/project-files/tsconfig.json index e1f6243c1a46..99391a4f8038 100644 --- a/packages/angular_devkit/schematics_cli/blank/project-files/tsconfig.json +++ b/packages/angular_devkit/schematics_cli/blank/project-files/tsconfig.json @@ -2,8 +2,8 @@ "compilerOptions": { "lib": ["es2018", "dom"], "declaration": true, - "module": "commonjs", - "moduleResolution": "node", + "module": "node16", + "moduleResolution": "node16", "noEmitOnError": true, "noFallthroughCasesInSwitch": true, "noImplicitAny": true, diff --git a/packages/angular_devkit/schematics_cli/schematic/files/package.json b/packages/angular_devkit/schematics_cli/schematic/files/package.json index 35fa17720131..c2aff5195638 100644 --- a/packages/angular_devkit/schematics_cli/schematic/files/package.json +++ b/packages/angular_devkit/schematics_cli/schematic/files/package.json @@ -20,6 +20,6 @@ "@types/node": "^20.17.19", "@types/jasmine": "~6.0.0", "jasmine": "~6.1.0", - "typescript": "~5.9.2" + "typescript": "~6.0.2" } } diff --git a/packages/angular_devkit/schematics_cli/schematic/files/tsconfig.json b/packages/angular_devkit/schematics_cli/schematic/files/tsconfig.json index 79285278e55c..db277e5fa543 100644 --- a/packages/angular_devkit/schematics_cli/schematic/files/tsconfig.json +++ b/packages/angular_devkit/schematics_cli/schematic/files/tsconfig.json @@ -2,7 +2,7 @@ "compilerOptions": { "lib": ["es2018", "dom"], "module": "commonjs", - "moduleResolution": "node", + "moduleResolution": "bundler", "noEmitOnError": true, "noFallthroughCasesInSwitch": true, "noImplicitAny": true, diff --git a/packages/ngtools/webpack/package.json b/packages/ngtools/webpack/package.json index 300573b6a8df..5cf8f0089501 100644 --- a/packages/ngtools/webpack/package.json +++ b/packages/ngtools/webpack/package.json @@ -29,7 +29,7 @@ "@angular-devkit/core": "workspace:0.0.0-PLACEHOLDER", "@angular/compiler": "22.0.0-next.3", "@angular/compiler-cli": "22.0.0-next.3", - "typescript": "6.0.1-rc", + "typescript": "6.0.2", "webpack": "5.105.4" } } diff --git a/packages/schematics/angular/third_party/github.com/Microsoft/TypeScript/BUILD.bazel b/packages/schematics/angular/third_party/github.com/Microsoft/TypeScript/BUILD.bazel index b4ac5f975b5a..b04b3e0fa7cd 100644 --- a/packages/schematics/angular/third_party/github.com/Microsoft/TypeScript/BUILD.bazel +++ b/packages/schematics/angular/third_party/github.com/Microsoft/TypeScript/BUILD.bazel @@ -1,6 +1,6 @@ load("@aspect_rules_js//js:defs.bzl", "js_library") -# files fetched on 2025-08-01 +# files fetched on 2026-03-25 # Commands to update from node_modules: # cp node_modules/typescript/lib/typescript.d.ts packages/schematics/angular/third_party/github.com/Microsoft/TypeScript/lib/typescript.d.ts diff --git a/packages/schematics/angular/third_party/github.com/Microsoft/TypeScript/lib/typescript.d.ts b/packages/schematics/angular/third_party/github.com/Microsoft/TypeScript/lib/typescript.d.ts index 87942520f2ab..0f39eae746a0 100644 --- a/packages/schematics/angular/third_party/github.com/Microsoft/TypeScript/lib/typescript.d.ts +++ b/packages/schematics/angular/third_party/github.com/Microsoft/TypeScript/lib/typescript.d.ts @@ -7,7 +7,7 @@ License at http://www.apache.org/licenses/LICENSE-2.0 THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE, -MERCHANTABLITY OR NON-INFRINGEMENT. +MERCHANTABILITY OR NON-INFRINGEMENT. See the Apache Version 2.0 License for specific language governing permissions and limitations under the License. @@ -2530,6 +2530,7 @@ declare namespace ts { Node = "node", /** @deprecated Renamed to `Node10` */ NodeJs = "node", + /** @deprecated */ Node10 = "node10", Node16 = "node16", NodeNext = "nodenext", @@ -2542,6 +2543,7 @@ declare namespace ts { export enum ScriptTarget { /** @deprecated */ ES3 = "es3", + /** @deprecated */ ES5 = "es5", ES6 = "es6", ES2015 = "es2015", @@ -2554,9 +2556,11 @@ declare namespace ts { ES2022 = "es2022", ES2023 = "es2023", ES2024 = "es2024", + ES2025 = "es2025", ESNext = "esnext", JSON = "json", Latest = "esnext", + LatestStandard = "es2025", } } namespace typingsInstaller { @@ -3646,7 +3650,7 @@ declare namespace ts { readDirectory(rootDir: string, extensions: readonly string[], excludes: readonly string[] | undefined, includes: readonly string[] | undefined, depth?: number): string[]; } } - const versionMajorMinor = "5.9"; + const versionMajorMinor = "6.0"; /** The version of the TypeScript compiler release */ const version: string; /** @@ -5907,7 +5911,6 @@ declare namespace ts { */ interface SourceFileLike { readonly text: string; - languageVariant?: LanguageVariant; } interface SourceFileLike { getLineAndCharacterOfPosition(pos: number): LineAndCharacter; @@ -5926,14 +5929,7 @@ declare namespace ts { libReferenceDirectives: readonly FileReference[]; languageVariant: LanguageVariant; isDeclarationFile: boolean; - /** - * lib.d.ts should have a reference comment like - * - * /// <reference no-default-lib="true"/> - * - * If any other file has this comment, it signals not to include lib.d.ts - * because this containing file is intended to act as a default library. - */ + /** @deprecated Always false. Use a Program to determine if a file is a lib file. */ hasNoDefaultLib: boolean; languageVersion: ScriptTarget; /** @@ -6598,53 +6594,53 @@ declare namespace ts { enum TypeFlags { Any = 1, Unknown = 2, - String = 4, - Number = 8, - Boolean = 16, - Enum = 32, - BigInt = 64, - StringLiteral = 128, - NumberLiteral = 256, - BooleanLiteral = 512, - EnumLiteral = 1024, - BigIntLiteral = 2048, - ESSymbol = 4096, - UniqueESSymbol = 8192, - Void = 16384, - Undefined = 32768, - Null = 65536, - Never = 131072, - TypeParameter = 262144, - Object = 524288, - Union = 1048576, - Intersection = 2097152, - Index = 4194304, - IndexedAccess = 8388608, - Conditional = 16777216, - Substitution = 33554432, - NonPrimitive = 67108864, - TemplateLiteral = 134217728, - StringMapping = 268435456, - Literal = 2944, - Unit = 109472, - Freshable = 2976, - StringOrNumberLiteral = 384, - PossiblyFalsy = 117724, - StringLike = 402653316, - NumberLike = 296, - BigIntLike = 2112, - BooleanLike = 528, - EnumLike = 1056, - ESSymbolLike = 12288, - VoidLike = 49152, - UnionOrIntersection = 3145728, - StructuredType = 3670016, - TypeVariable = 8650752, - InstantiableNonPrimitive = 58982400, - InstantiablePrimitive = 406847488, - Instantiable = 465829888, - StructuredOrInstantiable = 469499904, - Narrowable = 536624127, + Undefined = 4, + Null = 8, + Void = 16, + String = 32, + Number = 64, + BigInt = 128, + Boolean = 256, + ESSymbol = 512, + StringLiteral = 1024, + NumberLiteral = 2048, + BigIntLiteral = 4096, + BooleanLiteral = 8192, + UniqueESSymbol = 16384, + EnumLiteral = 32768, + Enum = 65536, + NonPrimitive = 131072, + Never = 262144, + TypeParameter = 524288, + Object = 1048576, + Index = 2097152, + TemplateLiteral = 4194304, + StringMapping = 8388608, + Substitution = 16777216, + IndexedAccess = 33554432, + Conditional = 67108864, + Union = 134217728, + Intersection = 268435456, + Literal = 15360, + Unit = 97292, + Freshable = 80896, + StringOrNumberLiteral = 3072, + PossiblyFalsy = 15868, + StringLike = 12583968, + NumberLike = 67648, + BigIntLike = 4224, + BooleanLike = 8448, + EnumLike = 98304, + ESSymbolLike = 16896, + VoidLike = 20, + UnionOrIntersection = 402653184, + StructuredType = 403701760, + TypeVariable = 34078720, + InstantiableNonPrimitive = 117964800, + InstantiablePrimitive = 14680064, + Instantiable = 132644864, + StructuredOrInstantiable = 536346624, + Narrowable = 536575971, } type DestructuringPattern = BindingPattern | ObjectLiteralExpression | ArrayLiteralExpression; interface Type { @@ -6951,6 +6947,7 @@ declare namespace ts { Message = 3, } enum ModuleResolutionKind { + /** @deprecated */ Classic = 1, /** * @deprecated @@ -6958,6 +6955,9 @@ declare namespace ts { * Use the new name or consider switching to a modern module resolution target. */ NodeJs = 2, + /** + * @deprecated + */ Node10 = 2, Node16 = 3, NodeNext = 99, @@ -7020,6 +7020,7 @@ declare namespace ts { allowUnreachableCode?: boolean; allowUnusedLabels?: boolean; alwaysStrict?: boolean; + /** @deprecated */ baseUrl?: string; /** @deprecated */ charset?: string; @@ -7033,6 +7034,7 @@ declare namespace ts { disableSourceOfProjectReferenceRedirect?: boolean; disableSolutionSearching?: boolean; disableReferencedProjectLoad?: boolean; + /** @deprecated */ downlevelIteration?: boolean; emitBOM?: boolean; emitDecoratorMetadata?: boolean; @@ -7150,10 +7152,14 @@ declare namespace ts { [option: string]: CompilerOptionsValue | undefined; } enum ModuleKind { + /** @deprecated */ None = 0, CommonJS = 1, + /** @deprecated */ AMD = 2, + /** @deprecated */ UMD = 3, + /** @deprecated */ System = 4, ES2015 = 5, ES2020 = 6, @@ -7205,6 +7211,7 @@ declare namespace ts { enum ScriptTarget { /** @deprecated */ ES3 = 0, + /** @deprecated */ ES5 = 1, ES2015 = 2, ES2016 = 3, @@ -7216,9 +7223,11 @@ declare namespace ts { ES2022 = 9, ES2023 = 10, ES2024 = 11, + ES2025 = 12, ESNext = 99, JSON = 100, Latest = 99, + LatestStandard = 12, } enum LanguageVariant { Standard = 0, @@ -9320,7 +9329,7 @@ declare namespace ts { * Given a set of options, returns the set of type directive names * that should be included for this program automatically. * This list could either come from the config file, - * or from enumerating the types root + initial secondary types lookup location. + * and/or from enumerating the types root + initial secondary types lookup location given "*" compat wildcard. * More type directives might appear in the program later as a result of loading actual source files; * this list is only the set of defaults that are implicitly included. */ @@ -10039,6 +10048,7 @@ declare namespace ts { libReferenceDirectives: FileReference[]; importedFiles: FileReference[]; ambientExternalModules?: string[]; + /** @deprecated Always false. Use a Program to determine if a file is a lib file. */ isLibFile: boolean; } interface HostCancellationToken { diff --git a/packages/schematics/angular/third_party/github.com/Microsoft/TypeScript/lib/typescript.js b/packages/schematics/angular/third_party/github.com/Microsoft/TypeScript/lib/typescript.js index 2643aa12aa64..d322bce73085 100644 --- a/packages/schematics/angular/third_party/github.com/Microsoft/TypeScript/lib/typescript.js +++ b/packages/schematics/angular/third_party/github.com/Microsoft/TypeScript/lib/typescript.js @@ -7,7 +7,7 @@ License at http://www.apache.org/licenses/LICENSE-2.0 THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE, -MERCHANTABLITY OR NON-INFRINGEMENT. +MERCHANTABILITY OR NON-INFRINGEMENT. See the Apache Version 2.0 License for specific language governing permissions and limitations under the License. @@ -251,6 +251,7 @@ __export(typescript_exports, { canHaveLocals: () => canHaveLocals, canHaveModifiers: () => canHaveModifiers, canHaveModuleSpecifier: () => canHaveModuleSpecifier, + canHaveStatements: () => canHaveStatements, canHaveSymbol: () => canHaveSymbol, canIncludeBindAndCheckDiagnostics: () => canIncludeBindAndCheckDiagnostics, canJsonReportNoInputFiles: () => canJsonReportNoInputFiles, @@ -298,6 +299,7 @@ __export(typescript_exports, { commonOptionsWithBuild: () => commonOptionsWithBuild, compact: () => compact, compareBooleans: () => compareBooleans, + compareComparableValues: () => compareComparableValues, compareDataObjects: () => compareDataObjects, compareDiagnostics: () => compareDiagnostics, compareEmitHelpers: () => compareEmitHelpers, @@ -643,6 +645,7 @@ __export(typescript_exports, { getAllowImportingTsExtensions: () => getAllowImportingTsExtensions, getAllowJSCompilerOption: () => getAllowJSCompilerOption, getAllowSyntheticDefaultImports: () => getAllowSyntheticDefaultImports, + getAlwaysStrict: () => getAlwaysStrict, getAncestor: () => getAncestor, getAnyExtensionFromPath: () => getAnyExtensionFromPath, getAreDeclarationMapsEnabled: () => getAreDeclarationMapsEnabled, @@ -672,6 +675,7 @@ __export(typescript_exports, { getCommonSourceDirectory: () => getCommonSourceDirectory, getCommonSourceDirectoryOfConfig: () => getCommonSourceDirectoryOfConfig, getCompilerOptionValue: () => getCompilerOptionValue, + getComputedCommonSourceDirectory: () => getComputedCommonSourceDirectory, getConditions: () => getConditions, getConfigFileParsingDiagnostics: () => getConfigFileParsingDiagnostics, getConstantValue: () => getConstantValue, @@ -881,6 +885,7 @@ __export(typescript_exports, { getModuleInstanceState: () => getModuleInstanceState, getModuleNameStringLiteralAt: () => getModuleNameStringLiteralAt, getModuleSpecifierEndingPreference: () => getModuleSpecifierEndingPreference, + getModuleSpecifierOfBareOrAccessedRequire: () => getModuleSpecifierOfBareOrAccessedRequire, getModuleSpecifierResolverHost: () => getModuleSpecifierResolverHost, getNameForExportedSymbol: () => getNameForExportedSymbol, getNameFromImportAttribute: () => getNameFromImportAttribute, @@ -911,7 +916,6 @@ __export(typescript_exports, { getNonAugmentationDeclaration: () => getNonAugmentationDeclaration, getNonDecoratorTokenPosOfNode: () => getNonDecoratorTokenPosOfNode, getNonIncrementalBuildInfoRoots: () => getNonIncrementalBuildInfoRoots, - getNonModifierTokenPosOfNode: () => getNonModifierTokenPosOfNode, getNormalizedAbsolutePath: () => getNormalizedAbsolutePath, getNormalizedAbsolutePathWithoutRoot: () => getNormalizedAbsolutePathWithoutRoot, getNormalizedPathComponents: () => getNormalizedPathComponents, @@ -1642,6 +1646,7 @@ __export(typescript_exports, { isPlusToken: () => isPlusToken, isPossiblyTypeArgumentPosition: () => isPossiblyTypeArgumentPosition, isPostfixUnaryExpression: () => isPostfixUnaryExpression, + isPotentiallyExecutableNode: () => isPotentiallyExecutableNode, isPrefixUnaryExpression: () => isPrefixUnaryExpression, isPrimitiveLiteralValue: () => isPrimitiveLiteralValue, isPrivateIdentifier: () => isPrivateIdentifier, @@ -2244,9 +2249,7 @@ __export(typescript_exports, { unmangleScopedPackageName: () => unmangleScopedPackageName, unorderedRemoveItem: () => unorderedRemoveItem, unprefixedNodeCoreModules: () => unprefixedNodeCoreModules, - unreachableCodeIsError: () => unreachableCodeIsError, unsetNodeChildren: () => unsetNodeChildren, - unusedLabelIsError: () => unusedLabelIsError, unwrapInnermostStatementOfLabel: () => unwrapInnermostStatementOfLabel, unwrapParenthesizedExpression: () => unwrapParenthesizedExpression, updateErrorForNoInputFiles: () => updateErrorForNoInputFiles, @@ -2256,6 +2259,7 @@ __export(typescript_exports, { updateSharedExtendedConfigFileWatcher: () => updateSharedExtendedConfigFileWatcher, updateSourceFile: () => updateSourceFile, updateWatchingWildcardDirectories: () => updateWatchingWildcardDirectories, + usesWildcardTypes: () => usesWildcardTypes, usingSingleLineStringWriter: () => usingSingleLineStringWriter, utf16EncodeAsString: () => utf16EncodeAsString, validateLocaleAndSetLanguage: () => validateLocaleAndSetLanguage, @@ -2284,8 +2288,8 @@ __export(typescript_exports, { module.exports = __toCommonJS(typescript_exports); // src/compiler/corePublic.ts -var versionMajorMinor = "5.9"; -var version = "5.9.2"; +var versionMajorMinor = "6.0"; +var version = "6.0.2"; var Comparison = /* @__PURE__ */ ((Comparison3) => { Comparison3[Comparison3["LessThan"] = -1] = "LessThan"; Comparison3[Comparison3["EqualTo"] = 0] = "EqualTo"; @@ -2980,7 +2984,7 @@ function binarySearchKey(array, key, keySelector, keyComparer, offset) { while (low <= high) { const middle = low + (high - low >> 1); const midKey = keySelector(array[middle], middle); - switch (keyComparer(midKey, key)) { + switch (Math.sign(keyComparer(midKey, key))) { case -1 /* LessThan */: low = middle + 1; break; @@ -4305,8 +4309,8 @@ Node ${formatSyntaxKind(node.kind)} was unexpected.`, // for use with vscode-js-debug's new customDescriptionGenerator in launch.json __tsDebuggerDisplay: { value() { - const typeHeader = this.flags & 67359327 /* Intrinsic */ ? `IntrinsicType ${this.intrinsicName}${this.debugIntrinsicName ? ` (${this.debugIntrinsicName})` : ""}` : this.flags & 98304 /* Nullable */ ? "NullableType" : this.flags & 384 /* StringOrNumberLiteral */ ? `LiteralType ${JSON.stringify(this.value)}` : this.flags & 2048 /* BigIntLiteral */ ? `LiteralType ${this.value.negative ? "-" : ""}${this.value.base10Value}n` : this.flags & 8192 /* UniqueESSymbol */ ? "UniqueESSymbolType" : this.flags & 32 /* Enum */ ? "EnumType" : this.flags & 1048576 /* Union */ ? "UnionType" : this.flags & 2097152 /* Intersection */ ? "IntersectionType" : this.flags & 4194304 /* Index */ ? "IndexType" : this.flags & 8388608 /* IndexedAccess */ ? "IndexedAccessType" : this.flags & 16777216 /* Conditional */ ? "ConditionalType" : this.flags & 33554432 /* Substitution */ ? "SubstitutionType" : this.flags & 262144 /* TypeParameter */ ? "TypeParameter" : this.flags & 524288 /* Object */ ? this.objectFlags & 3 /* ClassOrInterface */ ? "InterfaceType" : this.objectFlags & 4 /* Reference */ ? "TypeReference" : this.objectFlags & 8 /* Tuple */ ? "TupleType" : this.objectFlags & 16 /* Anonymous */ ? "AnonymousType" : this.objectFlags & 32 /* Mapped */ ? "MappedType" : this.objectFlags & 1024 /* ReverseMapped */ ? "ReverseMappedType" : this.objectFlags & 256 /* EvolvingArray */ ? "EvolvingArrayType" : "ObjectType" : "Type"; - const remainingObjectFlags = this.flags & 524288 /* Object */ ? this.objectFlags & ~1343 /* ObjectTypeKindMask */ : 0; + const typeHeader = this.flags & 402431 /* Intrinsic */ ? `IntrinsicType ${this.intrinsicName}${this.debugIntrinsicName ? ` (${this.debugIntrinsicName})` : ""}` : this.flags & 12 /* Nullable */ ? "NullableType" : this.flags & 3072 /* StringOrNumberLiteral */ ? `LiteralType ${JSON.stringify(this.value)}` : this.flags & 4096 /* BigIntLiteral */ ? `LiteralType ${this.value.negative ? "-" : ""}${this.value.base10Value}n` : this.flags & 16384 /* UniqueESSymbol */ ? "UniqueESSymbolType" : this.flags & 65536 /* Enum */ ? "EnumType" : this.flags & 134217728 /* Union */ ? "UnionType" : this.flags & 268435456 /* Intersection */ ? "IntersectionType" : this.flags & 2097152 /* Index */ ? "IndexType" : this.flags & 33554432 /* IndexedAccess */ ? "IndexedAccessType" : this.flags & 67108864 /* Conditional */ ? "ConditionalType" : this.flags & 16777216 /* Substitution */ ? "SubstitutionType" : this.flags & 524288 /* TypeParameter */ ? "TypeParameter" : this.flags & 1048576 /* Object */ ? this.objectFlags & 3 /* ClassOrInterface */ ? "InterfaceType" : this.objectFlags & 4 /* Reference */ ? "TypeReference" : this.objectFlags & 8 /* Tuple */ ? "TupleType" : this.objectFlags & 16 /* Anonymous */ ? "AnonymousType" : this.objectFlags & 32 /* Mapped */ ? "MappedType" : this.objectFlags & 1024 /* ReverseMapped */ ? "ReverseMappedType" : this.objectFlags & 256 /* EvolvingArray */ ? "EvolvingArrayType" : "ObjectType" : "Type"; + const remainingObjectFlags = this.flags & 1048576 /* Object */ ? this.objectFlags & ~142607679 /* ObjectTypeKindMask */ : 0; return `${typeHeader}${this.symbol ? ` '${symbolName(this.symbol)}'` : ""}${remainingObjectFlags ? ` (${formatObjectFlags(remainingObjectFlags)})` : ""}`; } }, @@ -4317,7 +4321,7 @@ Node ${formatSyntaxKind(node.kind)} was unexpected.`, }, __debugObjectFlags: { get() { - return this.flags & 524288 /* Object */ ? formatObjectFlags(this.objectFlags) : ""; + return this.flags & 1048576 /* Object */ ? formatObjectFlags(this.objectFlags) : ""; } }, __debugTypeToString: { @@ -5408,7 +5412,7 @@ var tracingEnabled; const objectFlags = type.objectFlags; const symbol = type.aliasSymbol ?? type.symbol; let display; - if (objectFlags & 16 /* Anonymous */ | type.flags & 2944 /* Literal */) { + if (objectFlags & 16 /* Anonymous */ | type.flags & 15360 /* Literal */) { try { display = (_a = type.checker) == null ? void 0 : _a.typeToString(type); } catch { @@ -5416,7 +5420,7 @@ var tracingEnabled; } } let indexedAccessProperties = {}; - if (type.flags & 8388608 /* IndexedAccess */) { + if (type.flags & 33554432 /* IndexedAccess */) { const indexedAccessType = type; indexedAccessProperties = { indexedAccessObjectType: (_b = indexedAccessType.objectType) == null ? void 0 : _b.id, @@ -5433,7 +5437,7 @@ var tracingEnabled; }; } let conditionalProperties = {}; - if (type.flags & 16777216 /* Conditional */) { + if (type.flags & 67108864 /* Conditional */) { const conditionalType = type; conditionalProperties = { conditionalCheckType: (_f = conditionalType.checkType) == null ? void 0 : _f.id, @@ -5443,7 +5447,7 @@ var tracingEnabled; }; } let substitutionProperties = {}; - if (type.flags & 33554432 /* Substitution */) { + if (type.flags & 16777216 /* Substitution */) { const substitutionType = type; substitutionProperties = { substitutionBaseType: (_j = substitutionType.baseType) == null ? void 0 : _j.id, @@ -5482,10 +5486,10 @@ var tracingEnabled; symbolName: (symbol == null ? void 0 : symbol.escapedName) && unescapeLeadingUnderscores(symbol.escapedName), recursionId: recursionToken, isTuple: objectFlags & 8 /* Tuple */ ? true : void 0, - unionTypes: type.flags & 1048576 /* Union */ ? (_p = type.types) == null ? void 0 : _p.map((t) => t.id) : void 0, - intersectionTypes: type.flags & 2097152 /* Intersection */ ? type.types.map((t) => t.id) : void 0, + unionTypes: type.flags & 134217728 /* Union */ ? (_p = type.types) == null ? void 0 : _p.map((t) => t.id) : void 0, + intersectionTypes: type.flags & 268435456 /* Intersection */ ? type.types.map((t) => t.id) : void 0, aliasTypeArguments: (_q = type.aliasTypeArguments) == null ? void 0 : _q.map((t) => t.id), - keyofType: type.flags & 4194304 /* Index */ ? (_r = type.type) == null ? void 0 : _r.id : void 0, + keyofType: type.flags & 2097152 /* Index */ ? (_r = type.type) == null ? void 0 : _r.id : void 0, ...indexedAccessProperties, ...referenceProperties, ...conditionalProperties, @@ -5951,6 +5955,7 @@ var NodeFlags = /* @__PURE__ */ ((NodeFlags3) => { NodeFlags3[NodeFlags3["JsonFile"] = 134217728] = "JsonFile"; NodeFlags3[NodeFlags3["TypeCached"] = 268435456] = "TypeCached"; NodeFlags3[NodeFlags3["Deprecated"] = 536870912] = "Deprecated"; + NodeFlags3[NodeFlags3["Unreachable"] = 1073741824] = "Unreachable"; NodeFlags3[NodeFlags3["BlockScoped"] = 7] = "BlockScoped"; NodeFlags3[NodeFlags3["Constant"] = 6] = "Constant"; NodeFlags3[NodeFlags3["ReachabilityCheckFlags"] = 1536] = "ReachabilityCheckFlags"; @@ -6167,7 +6172,7 @@ var ContextFlags = /* @__PURE__ */ ((ContextFlags3) => { ContextFlags3[ContextFlags3["None"] = 0] = "None"; ContextFlags3[ContextFlags3["Signature"] = 1] = "Signature"; ContextFlags3[ContextFlags3["NoConstraints"] = 2] = "NoConstraints"; - ContextFlags3[ContextFlags3["Completions"] = 4] = "Completions"; + ContextFlags3[ContextFlags3["IgnoreNodeInferences"] = 4] = "IgnoreNodeInferences"; ContextFlags3[ContextFlags3["SkipBindingPatterns"] = 8] = "SkipBindingPatterns"; return ContextFlags3; })(ContextFlags || {}); @@ -6429,75 +6434,76 @@ var NodeCheckFlags = /* @__PURE__ */ ((NodeCheckFlags3) => { var TypeFlags = /* @__PURE__ */ ((TypeFlags2) => { TypeFlags2[TypeFlags2["Any"] = 1] = "Any"; TypeFlags2[TypeFlags2["Unknown"] = 2] = "Unknown"; - TypeFlags2[TypeFlags2["String"] = 4] = "String"; - TypeFlags2[TypeFlags2["Number"] = 8] = "Number"; - TypeFlags2[TypeFlags2["Boolean"] = 16] = "Boolean"; - TypeFlags2[TypeFlags2["Enum"] = 32] = "Enum"; - TypeFlags2[TypeFlags2["BigInt"] = 64] = "BigInt"; - TypeFlags2[TypeFlags2["StringLiteral"] = 128] = "StringLiteral"; - TypeFlags2[TypeFlags2["NumberLiteral"] = 256] = "NumberLiteral"; - TypeFlags2[TypeFlags2["BooleanLiteral"] = 512] = "BooleanLiteral"; - TypeFlags2[TypeFlags2["EnumLiteral"] = 1024] = "EnumLiteral"; - TypeFlags2[TypeFlags2["BigIntLiteral"] = 2048] = "BigIntLiteral"; - TypeFlags2[TypeFlags2["ESSymbol"] = 4096] = "ESSymbol"; - TypeFlags2[TypeFlags2["UniqueESSymbol"] = 8192] = "UniqueESSymbol"; - TypeFlags2[TypeFlags2["Void"] = 16384] = "Void"; - TypeFlags2[TypeFlags2["Undefined"] = 32768] = "Undefined"; - TypeFlags2[TypeFlags2["Null"] = 65536] = "Null"; - TypeFlags2[TypeFlags2["Never"] = 131072] = "Never"; - TypeFlags2[TypeFlags2["TypeParameter"] = 262144] = "TypeParameter"; - TypeFlags2[TypeFlags2["Object"] = 524288] = "Object"; - TypeFlags2[TypeFlags2["Union"] = 1048576] = "Union"; - TypeFlags2[TypeFlags2["Intersection"] = 2097152] = "Intersection"; - TypeFlags2[TypeFlags2["Index"] = 4194304] = "Index"; - TypeFlags2[TypeFlags2["IndexedAccess"] = 8388608] = "IndexedAccess"; - TypeFlags2[TypeFlags2["Conditional"] = 16777216] = "Conditional"; - TypeFlags2[TypeFlags2["Substitution"] = 33554432] = "Substitution"; - TypeFlags2[TypeFlags2["NonPrimitive"] = 67108864] = "NonPrimitive"; - TypeFlags2[TypeFlags2["TemplateLiteral"] = 134217728] = "TemplateLiteral"; - TypeFlags2[TypeFlags2["StringMapping"] = 268435456] = "StringMapping"; + TypeFlags2[TypeFlags2["Undefined"] = 4] = "Undefined"; + TypeFlags2[TypeFlags2["Null"] = 8] = "Null"; + TypeFlags2[TypeFlags2["Void"] = 16] = "Void"; + TypeFlags2[TypeFlags2["String"] = 32] = "String"; + TypeFlags2[TypeFlags2["Number"] = 64] = "Number"; + TypeFlags2[TypeFlags2["BigInt"] = 128] = "BigInt"; + TypeFlags2[TypeFlags2["Boolean"] = 256] = "Boolean"; + TypeFlags2[TypeFlags2["ESSymbol"] = 512] = "ESSymbol"; + TypeFlags2[TypeFlags2["StringLiteral"] = 1024] = "StringLiteral"; + TypeFlags2[TypeFlags2["NumberLiteral"] = 2048] = "NumberLiteral"; + TypeFlags2[TypeFlags2["BigIntLiteral"] = 4096] = "BigIntLiteral"; + TypeFlags2[TypeFlags2["BooleanLiteral"] = 8192] = "BooleanLiteral"; + TypeFlags2[TypeFlags2["UniqueESSymbol"] = 16384] = "UniqueESSymbol"; + TypeFlags2[TypeFlags2["EnumLiteral"] = 32768] = "EnumLiteral"; + TypeFlags2[TypeFlags2["Enum"] = 65536] = "Enum"; + TypeFlags2[TypeFlags2["NonPrimitive"] = 131072] = "NonPrimitive"; + TypeFlags2[TypeFlags2["Never"] = 262144] = "Never"; + TypeFlags2[TypeFlags2["TypeParameter"] = 524288] = "TypeParameter"; + TypeFlags2[TypeFlags2["Object"] = 1048576] = "Object"; + TypeFlags2[TypeFlags2["Index"] = 2097152] = "Index"; + TypeFlags2[TypeFlags2["TemplateLiteral"] = 4194304] = "TemplateLiteral"; + TypeFlags2[TypeFlags2["StringMapping"] = 8388608] = "StringMapping"; + TypeFlags2[TypeFlags2["Substitution"] = 16777216] = "Substitution"; + TypeFlags2[TypeFlags2["IndexedAccess"] = 33554432] = "IndexedAccess"; + TypeFlags2[TypeFlags2["Conditional"] = 67108864] = "Conditional"; + TypeFlags2[TypeFlags2["Union"] = 134217728] = "Union"; + TypeFlags2[TypeFlags2["Intersection"] = 268435456] = "Intersection"; TypeFlags2[TypeFlags2["Reserved1"] = 536870912] = "Reserved1"; TypeFlags2[TypeFlags2["Reserved2"] = 1073741824] = "Reserved2"; + TypeFlags2[TypeFlags2["Reserved3"] = -2147483648] = "Reserved3"; TypeFlags2[TypeFlags2["AnyOrUnknown"] = 3] = "AnyOrUnknown"; - TypeFlags2[TypeFlags2["Nullable"] = 98304] = "Nullable"; - TypeFlags2[TypeFlags2["Literal"] = 2944] = "Literal"; - TypeFlags2[TypeFlags2["Unit"] = 109472] = "Unit"; - TypeFlags2[TypeFlags2["Freshable"] = 2976] = "Freshable"; - TypeFlags2[TypeFlags2["StringOrNumberLiteral"] = 384] = "StringOrNumberLiteral"; - TypeFlags2[TypeFlags2["StringOrNumberLiteralOrUnique"] = 8576] = "StringOrNumberLiteralOrUnique"; - TypeFlags2[TypeFlags2["DefinitelyFalsy"] = 117632] = "DefinitelyFalsy"; - TypeFlags2[TypeFlags2["PossiblyFalsy"] = 117724] = "PossiblyFalsy"; - TypeFlags2[TypeFlags2["Intrinsic"] = 67359327] = "Intrinsic"; - TypeFlags2[TypeFlags2["StringLike"] = 402653316] = "StringLike"; - TypeFlags2[TypeFlags2["NumberLike"] = 296] = "NumberLike"; - TypeFlags2[TypeFlags2["BigIntLike"] = 2112] = "BigIntLike"; - TypeFlags2[TypeFlags2["BooleanLike"] = 528] = "BooleanLike"; - TypeFlags2[TypeFlags2["EnumLike"] = 1056] = "EnumLike"; - TypeFlags2[TypeFlags2["ESSymbolLike"] = 12288] = "ESSymbolLike"; - TypeFlags2[TypeFlags2["VoidLike"] = 49152] = "VoidLike"; - TypeFlags2[TypeFlags2["Primitive"] = 402784252] = "Primitive"; - TypeFlags2[TypeFlags2["DefinitelyNonNullable"] = 470302716] = "DefinitelyNonNullable"; - TypeFlags2[TypeFlags2["DisjointDomains"] = 469892092] = "DisjointDomains"; - TypeFlags2[TypeFlags2["UnionOrIntersection"] = 3145728] = "UnionOrIntersection"; - TypeFlags2[TypeFlags2["StructuredType"] = 3670016] = "StructuredType"; - TypeFlags2[TypeFlags2["TypeVariable"] = 8650752] = "TypeVariable"; - TypeFlags2[TypeFlags2["InstantiableNonPrimitive"] = 58982400] = "InstantiableNonPrimitive"; - TypeFlags2[TypeFlags2["InstantiablePrimitive"] = 406847488] = "InstantiablePrimitive"; - TypeFlags2[TypeFlags2["Instantiable"] = 465829888] = "Instantiable"; - TypeFlags2[TypeFlags2["StructuredOrInstantiable"] = 469499904] = "StructuredOrInstantiable"; - TypeFlags2[TypeFlags2["ObjectFlagsType"] = 3899393] = "ObjectFlagsType"; - TypeFlags2[TypeFlags2["Simplifiable"] = 25165824] = "Simplifiable"; - TypeFlags2[TypeFlags2["Singleton"] = 67358815] = "Singleton"; - TypeFlags2[TypeFlags2["Narrowable"] = 536624127] = "Narrowable"; - TypeFlags2[TypeFlags2["IncludesMask"] = 473694207] = "IncludesMask"; - TypeFlags2[TypeFlags2["IncludesMissingType"] = 262144 /* TypeParameter */] = "IncludesMissingType"; - TypeFlags2[TypeFlags2["IncludesNonWideningType"] = 4194304 /* Index */] = "IncludesNonWideningType"; - TypeFlags2[TypeFlags2["IncludesWildcard"] = 8388608 /* IndexedAccess */] = "IncludesWildcard"; - TypeFlags2[TypeFlags2["IncludesEmptyObject"] = 16777216 /* Conditional */] = "IncludesEmptyObject"; - TypeFlags2[TypeFlags2["IncludesInstantiable"] = 33554432 /* Substitution */] = "IncludesInstantiable"; + TypeFlags2[TypeFlags2["Nullable"] = 12] = "Nullable"; + TypeFlags2[TypeFlags2["Literal"] = 15360] = "Literal"; + TypeFlags2[TypeFlags2["Unit"] = 97292] = "Unit"; + TypeFlags2[TypeFlags2["Freshable"] = 80896] = "Freshable"; + TypeFlags2[TypeFlags2["StringOrNumberLiteral"] = 3072] = "StringOrNumberLiteral"; + TypeFlags2[TypeFlags2["StringOrNumberLiteralOrUnique"] = 19456] = "StringOrNumberLiteralOrUnique"; + TypeFlags2[TypeFlags2["DefinitelyFalsy"] = 15388] = "DefinitelyFalsy"; + TypeFlags2[TypeFlags2["PossiblyFalsy"] = 15868] = "PossiblyFalsy"; + TypeFlags2[TypeFlags2["Intrinsic"] = 402431] = "Intrinsic"; + TypeFlags2[TypeFlags2["StringLike"] = 12583968] = "StringLike"; + TypeFlags2[TypeFlags2["NumberLike"] = 67648] = "NumberLike"; + TypeFlags2[TypeFlags2["BigIntLike"] = 4224] = "BigIntLike"; + TypeFlags2[TypeFlags2["BooleanLike"] = 8448] = "BooleanLike"; + TypeFlags2[TypeFlags2["EnumLike"] = 98304] = "EnumLike"; + TypeFlags2[TypeFlags2["ESSymbolLike"] = 16896] = "ESSymbolLike"; + TypeFlags2[TypeFlags2["VoidLike"] = 20] = "VoidLike"; + TypeFlags2[TypeFlags2["Primitive"] = 12713980] = "Primitive"; + TypeFlags2[TypeFlags2["DefinitelyNonNullable"] = 13893600] = "DefinitelyNonNullable"; + TypeFlags2[TypeFlags2["DisjointDomains"] = 12812284] = "DisjointDomains"; + TypeFlags2[TypeFlags2["UnionOrIntersection"] = 402653184] = "UnionOrIntersection"; + TypeFlags2[TypeFlags2["StructuredType"] = 403701760] = "StructuredType"; + TypeFlags2[TypeFlags2["TypeVariable"] = 34078720] = "TypeVariable"; + TypeFlags2[TypeFlags2["InstantiableNonPrimitive"] = 117964800] = "InstantiableNonPrimitive"; + TypeFlags2[TypeFlags2["InstantiablePrimitive"] = 14680064] = "InstantiablePrimitive"; + TypeFlags2[TypeFlags2["Instantiable"] = 132644864] = "Instantiable"; + TypeFlags2[TypeFlags2["StructuredOrInstantiable"] = 536346624] = "StructuredOrInstantiable"; + TypeFlags2[TypeFlags2["ObjectFlagsType"] = 403963917] = "ObjectFlagsType"; + TypeFlags2[TypeFlags2["Simplifiable"] = 102760448] = "Simplifiable"; + TypeFlags2[TypeFlags2["Singleton"] = 394239] = "Singleton"; + TypeFlags2[TypeFlags2["Narrowable"] = 536575971] = "Narrowable"; + TypeFlags2[TypeFlags2["IncludesMask"] = 416808959] = "IncludesMask"; + TypeFlags2[TypeFlags2["IncludesMissingType"] = 524288 /* TypeParameter */] = "IncludesMissingType"; + TypeFlags2[TypeFlags2["IncludesNonWideningType"] = 2097152 /* Index */] = "IncludesNonWideningType"; + TypeFlags2[TypeFlags2["IncludesWildcard"] = 33554432 /* IndexedAccess */] = "IncludesWildcard"; + TypeFlags2[TypeFlags2["IncludesEmptyObject"] = 67108864 /* Conditional */] = "IncludesEmptyObject"; + TypeFlags2[TypeFlags2["IncludesInstantiable"] = 16777216 /* Substitution */] = "IncludesInstantiable"; TypeFlags2[TypeFlags2["IncludesConstrainedTypeVariable"] = 536870912 /* Reserved1 */] = "IncludesConstrainedTypeVariable"; TypeFlags2[TypeFlags2["IncludesError"] = 1073741824 /* Reserved2 */] = "IncludesError"; - TypeFlags2[TypeFlags2["NotPrimitiveUnion"] = 36323331] = "NotPrimitiveUnion"; + TypeFlags2[TypeFlags2["NotPrimitiveUnion"] = 286523411] = "NotPrimitiveUnion"; return TypeFlags2; })(TypeFlags || {}); var ObjectFlags = /* @__PURE__ */ ((ObjectFlags3) => { @@ -6528,10 +6534,10 @@ var ObjectFlags = /* @__PURE__ */ ((ObjectFlags3) => { ObjectFlags3[ObjectFlags3["RequiresWidening"] = 196608] = "RequiresWidening"; ObjectFlags3[ObjectFlags3["PropagatingFlags"] = 458752] = "PropagatingFlags"; ObjectFlags3[ObjectFlags3["InstantiatedMapped"] = 96] = "InstantiatedMapped"; - ObjectFlags3[ObjectFlags3["ObjectTypeKindMask"] = 1343] = "ObjectTypeKindMask"; ObjectFlags3[ObjectFlags3["ContainsSpread"] = 2097152] = "ContainsSpread"; ObjectFlags3[ObjectFlags3["ObjectRestType"] = 4194304] = "ObjectRestType"; ObjectFlags3[ObjectFlags3["InstantiationExpressionType"] = 8388608] = "InstantiationExpressionType"; + ObjectFlags3[ObjectFlags3["ObjectTypeKindMask"] = 142607679] = "ObjectTypeKindMask"; ObjectFlags3[ObjectFlags3["IsClassInstanceClone"] = 16777216] = "IsClassInstanceClone"; ObjectFlags3[ObjectFlags3["IdenticalBaseTypeCalculated"] = 33554432] = "IdenticalBaseTypeCalculated"; ObjectFlags3[ObjectFlags3["IdenticalBaseTypeExists"] = 67108864] = "IdenticalBaseTypeExists"; @@ -6785,15 +6791,17 @@ var ScriptTarget = /* @__PURE__ */ ((ScriptTarget12) => { ScriptTarget12[ScriptTarget12["ES2022"] = 9] = "ES2022"; ScriptTarget12[ScriptTarget12["ES2023"] = 10] = "ES2023"; ScriptTarget12[ScriptTarget12["ES2024"] = 11] = "ES2024"; + ScriptTarget12[ScriptTarget12["ES2025"] = 12] = "ES2025"; ScriptTarget12[ScriptTarget12["ESNext"] = 99] = "ESNext"; ScriptTarget12[ScriptTarget12["JSON"] = 100] = "JSON"; ScriptTarget12[ScriptTarget12["Latest"] = 99 /* ESNext */] = "Latest"; + ScriptTarget12[ScriptTarget12["LatestStandard"] = 12 /* ES2025 */] = "LatestStandard"; return ScriptTarget12; })(ScriptTarget || {}); -var LanguageVariant = /* @__PURE__ */ ((LanguageVariant3) => { - LanguageVariant3[LanguageVariant3["Standard"] = 0] = "Standard"; - LanguageVariant3[LanguageVariant3["JSX"] = 1] = "JSX"; - return LanguageVariant3; +var LanguageVariant = /* @__PURE__ */ ((LanguageVariant4) => { + LanguageVariant4[LanguageVariant4["Standard"] = 0] = "Standard"; + LanguageVariant4[LanguageVariant4["JSX"] = 1] = "JSX"; + return LanguageVariant4; })(LanguageVariant || {}); var WatchDirectoryFlags = /* @__PURE__ */ ((WatchDirectoryFlags3) => { WatchDirectoryFlags3[WatchDirectoryFlags3["None"] = 0] = "None"; @@ -7623,10 +7631,10 @@ function createSingleWatcherPerName(cache, useCaseSensitiveFileNames2, name, cal cache.set(path, { watcher: createWatcher( // Cant infer types correctly so lets satisfy checker - (param1, param2, param3) => { + ((param1, param2, param3) => { var _a; return (_a = cache.get(path)) == null ? void 0 : _a.callbacks.slice().forEach((cb) => cb(param1, param2, param3)); - } + }) ), callbacks: [callback] }); @@ -9454,7 +9462,7 @@ var Diagnostics = { A_bigint_literal_cannot_use_exponential_notation: diag(1352, 1 /* Error */, "A_bigint_literal_cannot_use_exponential_notation_1352", "A bigint literal cannot use exponential notation."), A_bigint_literal_must_be_an_integer: diag(1353, 1 /* Error */, "A_bigint_literal_must_be_an_integer_1353", "A bigint literal must be an integer."), readonly_type_modifier_is_only_permitted_on_array_and_tuple_literal_types: diag(1354, 1 /* Error */, "readonly_type_modifier_is_only_permitted_on_array_and_tuple_literal_types_1354", "'readonly' type modifier is only permitted on array and tuple literal types."), - A_const_assertions_can_only_be_applied_to_references_to_enum_members_or_string_number_boolean_array_or_object_literals: diag(1355, 1 /* Error */, "A_const_assertions_can_only_be_applied_to_references_to_enum_members_or_string_number_boolean_array__1355", "A 'const' assertions can only be applied to references to enum members, or string, number, boolean, array, or object literals."), + A_const_assertion_can_only_be_applied_to_references_to_enum_members_or_string_number_boolean_array_or_object_literals: diag(1355, 1 /* Error */, "A_const_assertion_can_only_be_applied_to_references_to_enum_members_or_string_number_boolean_array_o_1355", "A 'const' assertion can only be applied to references to enum members, or string, number, boolean, array, or object literals."), Did_you_mean_to_mark_this_function_as_async: diag(1356, 1 /* Error */, "Did_you_mean_to_mark_this_function_as_async_1356", "Did you mean to mark this function as 'async'?"), An_enum_member_name_must_be_followed_by_a_or: diag(1357, 1 /* Error */, "An_enum_member_name_must_be_followed_by_a_or_1357", "An enum member name must be followed by a ',', '=', or '}'."), Tagged_template_expressions_are_not_permitted_in_an_optional_chain: diag(1358, 1 /* Error */, "Tagged_template_expressions_are_not_permitted_in_an_optional_chain_1358", "Tagged template expressions are not permitted in an optional chain."), @@ -9620,24 +9628,16 @@ var Diagnostics = { Decimal_escape_sequences_and_backreferences_are_not_allowed_in_a_character_class: diag(1537, 1 /* Error */, "Decimal_escape_sequences_and_backreferences_are_not_allowed_in_a_character_class_1537", "Decimal escape sequences and backreferences are not allowed in a character class."), Unicode_escape_sequences_are_only_available_when_the_Unicode_u_flag_or_the_Unicode_Sets_v_flag_is_set: diag(1538, 1 /* Error */, "Unicode_escape_sequences_are_only_available_when_the_Unicode_u_flag_or_the_Unicode_Sets_v_flag_is_se_1538", "Unicode escape sequences are only available when the Unicode (u) flag or the Unicode Sets (v) flag is set."), A_bigint_literal_cannot_be_used_as_a_property_name: diag(1539, 1 /* Error */, "A_bigint_literal_cannot_be_used_as_a_property_name_1539", "A 'bigint' literal cannot be used as a property name."), - A_namespace_declaration_should_not_be_declared_using_the_module_keyword_Please_use_the_namespace_keyword_instead: diag( - 1540, - 2 /* Suggestion */, - "A_namespace_declaration_should_not_be_declared_using_the_module_keyword_Please_use_the_namespace_key_1540", - "A 'namespace' declaration should not be declared using the 'module' keyword. Please use the 'namespace' keyword instead.", - /*reportsUnnecessary*/ - void 0, - /*elidedInCompatabilityPyramid*/ - void 0, - /*reportsDeprecated*/ - true - ), + A_namespace_declaration_should_not_be_declared_using_the_module_keyword_Please_use_the_namespace_keyword_instead: diag(1540, 1 /* Error */, "A_namespace_declaration_should_not_be_declared_using_the_module_keyword_Please_use_the_namespace_key_1540", "A 'namespace' declaration should not be declared using the 'module' keyword. Please use the 'namespace' keyword instead."), Type_only_import_of_an_ECMAScript_module_from_a_CommonJS_module_must_have_a_resolution_mode_attribute: diag(1541, 1 /* Error */, "Type_only_import_of_an_ECMAScript_module_from_a_CommonJS_module_must_have_a_resolution_mode_attribut_1541", "Type-only import of an ECMAScript module from a CommonJS module must have a 'resolution-mode' attribute."), Type_import_of_an_ECMAScript_module_from_a_CommonJS_module_must_have_a_resolution_mode_attribute: diag(1542, 1 /* Error */, "Type_import_of_an_ECMAScript_module_from_a_CommonJS_module_must_have_a_resolution_mode_attribute_1542", "Type import of an ECMAScript module from a CommonJS module must have a 'resolution-mode' attribute."), Importing_a_JSON_file_into_an_ECMAScript_module_requires_a_type_Colon_json_import_attribute_when_module_is_set_to_0: diag(1543, 1 /* Error */, "Importing_a_JSON_file_into_an_ECMAScript_module_requires_a_type_Colon_json_import_attribute_when_mod_1543", `Importing a JSON file into an ECMAScript module requires a 'type: "json"' import attribute when 'module' is set to '{0}'.`), Named_imports_from_a_JSON_file_into_an_ECMAScript_module_are_not_allowed_when_module_is_set_to_0: diag(1544, 1 /* Error */, "Named_imports_from_a_JSON_file_into_an_ECMAScript_module_are_not_allowed_when_module_is_set_to_0_1544", "Named imports from a JSON file into an ECMAScript module are not allowed when 'module' is set to '{0}'."), using_declarations_are_not_allowed_in_ambient_contexts: diag(1545, 1 /* Error */, "using_declarations_are_not_allowed_in_ambient_contexts_1545", "'using' declarations are not allowed in ambient contexts."), await_using_declarations_are_not_allowed_in_ambient_contexts: diag(1546, 1 /* Error */, "await_using_declarations_are_not_allowed_in_ambient_contexts_1546", "'await using' declarations are not allowed in ambient contexts."), + using_declarations_are_not_allowed_in_case_or_default_clauses_unless_contained_within_a_block: diag(1547, 1 /* Error */, "using_declarations_are_not_allowed_in_case_or_default_clauses_unless_contained_within_a_block_1547", "'using' declarations are not allowed in 'case' or 'default' clauses unless contained within a block."), + await_using_declarations_are_not_allowed_in_case_or_default_clauses_unless_contained_within_a_block: diag(1548, 1 /* Error */, "await_using_declarations_are_not_allowed_in_case_or_default_clauses_unless_contained_within_a_block_1548", "'await using' declarations are not allowed in 'case' or 'default' clauses unless contained within a block."), + Ignore_the_tsconfig_found_and_build_with_commandline_options_and_files: diag(1549, 3 /* Message */, "Ignore_the_tsconfig_found_and_build_with_commandline_options_and_files_1549", "Ignore the tsconfig found and build with commandline options and files."), The_types_of_0_are_incompatible_between_these_types: diag(2200, 1 /* Error */, "The_types_of_0_are_incompatible_between_these_types_2200", "The types of '{0}' are incompatible between these types."), The_types_returned_by_0_are_incompatible_between_these_types: diag(2201, 1 /* Error */, "The_types_returned_by_0_are_incompatible_between_these_types_2201", "The types returned by '{0}' are incompatible between these types."), Call_signature_return_types_0_and_1_are_incompatible: diag( @@ -10218,6 +10218,8 @@ var Diagnostics = { Using_JSX_fragments_requires_fragment_factory_0_to_be_in_scope_but_it_could_not_be_found: diag(2879, 1 /* Error */, "Using_JSX_fragments_requires_fragment_factory_0_to_be_in_scope_but_it_could_not_be_found_2879", "Using JSX fragments requires fragment factory '{0}' to be in scope, but it could not be found."), Import_assertions_have_been_replaced_by_import_attributes_Use_with_instead_of_assert: diag(2880, 1 /* Error */, "Import_assertions_have_been_replaced_by_import_attributes_Use_with_instead_of_assert_2880", "Import assertions have been replaced by import attributes. Use 'with' instead of 'assert'."), This_expression_is_never_nullish: diag(2881, 1 /* Error */, "This_expression_is_never_nullish_2881", "This expression is never nullish."), + Cannot_find_module_or_type_declarations_for_side_effect_import_of_0: diag(2882, 1 /* Error */, "Cannot_find_module_or_type_declarations_for_side_effect_import_of_0_2882", "Cannot find module or type declarations for side-effect import of '{0}'."), + The_inferred_type_of_0_cannot_be_named_without_a_reference_to_2_from_1_This_is_likely_not_portable_A_type_annotation_is_necessary: diag(2883, 1 /* Error */, "The_inferred_type_of_0_cannot_be_named_without_a_reference_to_2_from_1_This_is_likely_not_portable_A_2883", "The inferred type of '{0}' cannot be named without a reference to '{2}' from '{1}'. This is likely not portable. A type annotation is necessary."), Import_declaration_0_is_using_private_name_1: diag(4e3, 1 /* Error */, "Import_declaration_0_is_using_private_name_1_4000", "Import declaration '{0}' is using private name '{1}'."), Type_parameter_0_of_exported_class_has_or_is_using_private_name_1: diag(4002, 1 /* Error */, "Type_parameter_0_of_exported_class_has_or_is_using_private_name_1_4002", "Type parameter '{0}' of exported class has or is using private name '{1}'."), Type_parameter_0_of_exported_interface_has_or_is_using_private_name_1: diag(4004, 1 /* Error */, "Type_parameter_0_of_exported_interface_has_or_is_using_private_name_1_4004", "Type parameter '{0}' of exported interface has or is using private name '{1}'."), @@ -10332,6 +10334,7 @@ var Diagnostics = { The_current_host_does_not_support_the_0_option: diag(5001, 1 /* Error */, "The_current_host_does_not_support_the_0_option_5001", "The current host does not support the '{0}' option."), Cannot_find_the_common_subdirectory_path_for_the_input_files: diag(5009, 1 /* Error */, "Cannot_find_the_common_subdirectory_path_for_the_input_files_5009", "Cannot find the common subdirectory path for the input files."), File_specification_cannot_end_in_a_recursive_directory_wildcard_Asterisk_Asterisk_Colon_0: diag(5010, 1 /* Error */, "File_specification_cannot_end_in_a_recursive_directory_wildcard_Asterisk_Asterisk_Colon_0_5010", "File specification cannot end in a recursive directory wildcard ('**'): '{0}'."), + The_common_source_directory_of_0_is_1_The_rootDir_setting_must_be_explicitly_set_to_this_or_another_path_to_adjust_your_output_s_file_layout: diag(5011, 1 /* Error */, "The_common_source_directory_of_0_is_1_The_rootDir_setting_must_be_explicitly_set_to_this_or_another__5011", "The common source directory of '{0}' is '{1}'. The 'rootDir' setting must be explicitly set to this or another path to adjust your output's file layout."), Cannot_read_file_0_Colon_1: diag(5012, 1 /* Error */, "Cannot_read_file_0_Colon_1_5012", "Cannot read file '{0}': {1}."), Unknown_compiler_option_0: diag(5023, 1 /* Error */, "Unknown_compiler_option_0_5023", "Unknown compiler option '{0}'."), Compiler_option_0_requires_a_value_of_type_1: diag(5024, 1 /* Error */, "Compiler_option_0_requires_a_value_of_type_1_5024", "Compiler option '{0}' requires a value of type {1}."), @@ -10381,8 +10384,8 @@ var Diagnostics = { The_root_value_of_a_0_file_must_be_an_object: diag(5092, 1 /* Error */, "The_root_value_of_a_0_file_must_be_an_object_5092", "The root value of a '{0}' file must be an object."), Compiler_option_0_may_only_be_used_with_build: diag(5093, 1 /* Error */, "Compiler_option_0_may_only_be_used_with_build_5093", "Compiler option '--{0}' may only be used with '--build'."), Compiler_option_0_may_not_be_used_with_build: diag(5094, 1 /* Error */, "Compiler_option_0_may_not_be_used_with_build_5094", "Compiler option '--{0}' may not be used with '--build'."), - Option_0_can_only_be_used_when_module_is_set_to_preserve_or_to_es2015_or_later: diag(5095, 1 /* Error */, "Option_0_can_only_be_used_when_module_is_set_to_preserve_or_to_es2015_or_later_5095", "Option '{0}' can only be used when 'module' is set to 'preserve' or to 'es2015' or later."), - Option_allowImportingTsExtensions_can_only_be_used_when_either_noEmit_or_emitDeclarationOnly_is_set: diag(5096, 1 /* Error */, "Option_allowImportingTsExtensions_can_only_be_used_when_either_noEmit_or_emitDeclarationOnly_is_set_5096", "Option 'allowImportingTsExtensions' can only be used when either 'noEmit' or 'emitDeclarationOnly' is set."), + Option_0_can_only_be_used_when_module_is_set_to_preserve_commonjs_or_es2015_or_later: diag(5095, 1 /* Error */, "Option_0_can_only_be_used_when_module_is_set_to_preserve_commonjs_or_es2015_or_later_5095", "Option '{0}' can only be used when 'module' is set to 'preserve', 'commonjs', or 'es2015' or later."), + Option_allowImportingTsExtensions_can_only_be_used_when_one_of_noEmit_emitDeclarationOnly_or_rewriteRelativeImportExtensions_is_set: diag(5096, 1 /* Error */, "Option_allowImportingTsExtensions_can_only_be_used_when_one_of_noEmit_emitDeclarationOnly_or_rewrite_5096", "Option 'allowImportingTsExtensions' can only be used when one of 'noEmit', 'emitDeclarationOnly', or 'rewriteRelativeImportExtensions' is set."), An_import_path_can_only_end_with_a_0_extension_when_allowImportingTsExtensions_is_enabled: diag(5097, 1 /* Error */, "An_import_path_can_only_end_with_a_0_extension_when_allowImportingTsExtensions_is_enabled_5097", "An import path can only end with a '{0}' extension when 'allowImportingTsExtensions' is enabled."), Option_0_can_only_be_used_when_moduleResolution_is_set_to_node16_nodenext_or_bundler: diag(5098, 1 /* Error */, "Option_0_can_only_be_used_when_moduleResolution_is_set_to_node16_nodenext_or_bundler_5098", "Option '{0}' can only be used when 'moduleResolution' is set to 'node16', 'nodenext', or 'bundler'."), Option_0_is_deprecated_and_will_stop_functioning_in_TypeScript_1_Specify_compilerOption_ignoreDeprecations_Colon_2_to_silence_this_error: diag(5101, 1 /* Error */, "Option_0_is_deprecated_and_will_stop_functioning_in_TypeScript_1_Specify_compilerOption_ignoreDeprec_5101", `Option '{0}' is deprecated and will stop functioning in TypeScript {1}. Specify compilerOption '"ignoreDeprecations": "{2}"' to silence this error.`), @@ -10395,6 +10398,8 @@ var Diagnostics = { Option_0_1_has_been_removed_Please_remove_it_from_your_configuration: diag(5108, 1 /* Error */, "Option_0_1_has_been_removed_Please_remove_it_from_your_configuration_5108", "Option '{0}={1}' has been removed. Please remove it from your configuration."), Option_moduleResolution_must_be_set_to_0_or_left_unspecified_when_option_module_is_set_to_1: diag(5109, 1 /* Error */, "Option_moduleResolution_must_be_set_to_0_or_left_unspecified_when_option_module_is_set_to_1_5109", "Option 'moduleResolution' must be set to '{0}' (or left unspecified) when option 'module' is set to '{1}'."), Option_module_must_be_set_to_0_when_option_moduleResolution_is_set_to_1: diag(5110, 1 /* Error */, "Option_module_must_be_set_to_0_when_option_moduleResolution_is_set_to_1_5110", "Option 'module' must be set to '{0}' when option 'moduleResolution' is set to '{1}'."), + Visit_https_Colon_Slash_Slashaka_ms_Slashts6_for_migration_information: diag(5111, 3 /* Message */, "Visit_https_Colon_Slash_Slashaka_ms_Slashts6_for_migration_information_5111", "Visit https://aka.ms/ts6 for migration information."), + tsconfig_json_is_present_but_will_not_be_loaded_if_files_are_specified_on_commandline_Use_ignoreConfig_to_skip_this_error: diag(5112, 1 /* Error */, "tsconfig_json_is_present_but_will_not_be_loaded_if_files_are_specified_on_commandline_Use_ignoreConf_5112", "tsconfig.json is present but will not be loaded if files are specified on commandline. Use '--ignoreConfig' to skip this error."), Generates_a_sourcemap_for_each_corresponding_d_ts_file: diag(6e3, 3 /* Message */, "Generates_a_sourcemap_for_each_corresponding_d_ts_file_6000", "Generates a sourcemap for each corresponding '.d.ts' file."), Concatenate_and_emit_output_to_single_file: diag(6001, 3 /* Message */, "Concatenate_and_emit_output_to_single_file_6001", "Concatenate and emit output to single file."), Generates_corresponding_d_ts_file: diag(6002, 3 /* Message */, "Generates_corresponding_d_ts_file_6002", "Generates corresponding '.d.ts' file."), @@ -10917,17 +10922,17 @@ var Diagnostics = { Check_side_effect_imports: diag(6806, 3 /* Message */, "Check_side_effect_imports_6806", "Check side effect imports."), This_operation_can_be_simplified_This_shift_is_identical_to_0_1_2: diag(6807, 1 /* Error */, "This_operation_can_be_simplified_This_shift_is_identical_to_0_1_2_6807", "This operation can be simplified. This shift is identical to `{0} {1} {2}`."), Enable_lib_replacement: diag(6808, 3 /* Message */, "Enable_lib_replacement_6808", "Enable lib replacement."), + Ensure_types_are_ordered_stably_and_deterministically_across_compilations: diag(6809, 3 /* Message */, "Ensure_types_are_ordered_stably_and_deterministically_across_compilations_6809", "Ensure types are ordered stably and deterministically across compilations."), one_of_Colon: diag(6900, 3 /* Message */, "one_of_Colon_6900", "one of:"), one_or_more_Colon: diag(6901, 3 /* Message */, "one_or_more_Colon_6901", "one or more:"), type_Colon: diag(6902, 3 /* Message */, "type_Colon_6902", "type:"), default_Colon: diag(6903, 3 /* Message */, "default_Colon_6903", "default:"), - module_system_or_esModuleInterop: diag(6904, 3 /* Message */, "module_system_or_esModuleInterop_6904", 'module === "system" or esModuleInterop'), - false_unless_strict_is_set: diag(6905, 3 /* Message */, "false_unless_strict_is_set_6905", "`false`, unless `strict` is set"), + true_unless_strict_is_false: diag(6905, 3 /* Message */, "true_unless_strict_is_false_6905", "`true`, unless `strict` is `false`"), false_unless_composite_is_set: diag(6906, 3 /* Message */, "false_unless_composite_is_set_6906", "`false`, unless `composite` is set"), node_modules_bower_components_jspm_packages_plus_the_value_of_outDir_if_one_is_specified: diag(6907, 3 /* Message */, "node_modules_bower_components_jspm_packages_plus_the_value_of_outDir_if_one_is_specified_6907", '`["node_modules", "bower_components", "jspm_packages"]`, plus the value of `outDir` if one is specified.'), if_files_is_specified_otherwise_Asterisk_Asterisk_Slash_Asterisk: diag(6908, 3 /* Message */, "if_files_is_specified_otherwise_Asterisk_Asterisk_Slash_Asterisk_6908", '`[]` if `files` is specified, otherwise `["**/*"]`'), true_if_composite_false_otherwise: diag(6909, 3 /* Message */, "true_if_composite_false_otherwise_6909", "`true` if `composite`, `false` otherwise"), - module_AMD_or_UMD_or_System_or_ES6_then_Classic_Otherwise_Node: diag(69010, 3 /* Message */, "module_AMD_or_UMD_or_System_or_ES6_then_Classic_Otherwise_Node_69010", "module === `AMD` or `UMD` or `System` or `ES6`, then `Classic`, Otherwise `Node`"), + nodenext_if_module_is_nodenext_node16_if_module_is_node16_or_node18_otherwise_bundler: diag(69010, 3 /* Message */, "nodenext_if_module_is_nodenext_node16_if_module_is_node16_or_node18_otherwise_bundler_69010", "`nodenext` if `module` is `nodenext`; `node16` if `module` is `node16` or `node18`; otherwise, `bundler`."), Computed_from_the_list_of_input_files: diag(6911, 3 /* Message */, "Computed_from_the_list_of_input_files_6911", "Computed from the list of input files"), Platform_specific: diag(6912, 3 /* Message */, "Platform_specific_6912", "Platform specific"), You_can_learn_about_all_of_the_compiler_options_at_0: diag(6913, 3 /* Message */, "You_can_learn_about_all_of_the_compiler_options_at_0_6913", "You can learn about all of the compiler options at {0}"), @@ -10949,6 +10954,7 @@ var Diagnostics = { Compiles_the_current_project_with_additional_settings: diag(6929, 3 /* Message */, "Compiles_the_current_project_with_additional_settings_6929", "Compiles the current project, with additional settings."), true_for_ES2022_and_above_including_ESNext: diag(6930, 3 /* Message */, "true_for_ES2022_and_above_including_ESNext_6930", "`true` for ES2022 and above, including ESNext."), List_of_file_name_suffixes_to_search_when_resolving_a_module: diag(6931, 1 /* Error */, "List_of_file_name_suffixes_to_search_when_resolving_a_module_6931", "List of file name suffixes to search when resolving a module."), + false_unless_checkJs_is_set: diag(6932, 3 /* Message */, "false_unless_checkJs_is_set_6932", "`false`, unless `checkJs` is set"), Variable_0_implicitly_has_an_1_type: diag(7005, 1 /* Error */, "Variable_0_implicitly_has_an_1_type_7005", "Variable '{0}' implicitly has an '{1}' type."), Parameter_0_implicitly_has_an_1_type: diag(7006, 1 /* Error */, "Parameter_0_implicitly_has_an_1_type_7006", "Parameter '{0}' implicitly has an '{1}' type."), Member_0_implicitly_has_an_1_type: diag(7008, 1 /* Error */, "Member_0_implicitly_has_an_1_type_7008", "Member '{0}' implicitly has an '{1}' type."), @@ -14665,6 +14671,7 @@ function sortAndDeduplicateDiagnostics(diagnostics) { } var targetToLibMap = /* @__PURE__ */ new Map([ [99 /* ESNext */, "lib.esnext.full.d.ts"], + [12 /* ES2025 */, "lib.es2025.full.d.ts"], [11 /* ES2024 */, "lib.es2024.full.d.ts"], [10 /* ES2023 */, "lib.es2023.full.d.ts"], [9 /* ES2022 */, "lib.es2022.full.d.ts"], @@ -14681,6 +14688,7 @@ function getDefaultLibFileName(options) { const target = getEmitScriptTarget(options); switch (target) { case 99 /* ESNext */: + case 12 /* ES2025 */: case 11 /* ES2024 */: case 10 /* ES2023 */: case 9 /* ES2022 */: @@ -16659,13 +16667,6 @@ function getNonDecoratorTokenPosOfNode(node, sourceFile) { } return skipTrivia((sourceFile || getSourceFileOfNode(node)).text, lastDecorator.end); } -function getNonModifierTokenPosOfNode(node, sourceFile) { - const lastModifier = !nodeIsMissing(node) && canHaveModifiers(node) && node.modifiers ? last(node.modifiers) : void 0; - if (!lastModifier) { - return getTokenPosOfNode(node, sourceFile); - } - return skipTrivia((sourceFile || getSourceFileOfNode(node)).text, lastModifier.end); -} function getSourceTextOfNodeFromSourceFile(sourceFile, node, includeTrivia = false) { return getTextOfNodeFromSourceText(sourceFile.text, node, includeTrivia); } @@ -16816,6 +16817,11 @@ var getScriptTargetFeatures = /* @__PURE__ */ memoize( "unicodeSets" ] })), + RegExpConstructor: new Map(Object.entries({ + es2025: [ + "escape" + ] + })), Reflect: new Map(Object.entries({ es2015: [ "apply", @@ -16895,7 +16901,7 @@ var getScriptTargetFeatures = /* @__PURE__ */ memoize( "fround", "cbrt" ], - esnext: [ + es2025: [ "f16round" ] })), @@ -16904,6 +16910,10 @@ var getScriptTargetFeatures = /* @__PURE__ */ memoize( "entries", "keys", "values" + ], + esnext: [ + "getOrInsert", + "getOrInsertComputed" ] })), MapConstructor: new Map(Object.entries({ @@ -16917,7 +16927,7 @@ var getScriptTargetFeatures = /* @__PURE__ */ memoize( "keys", "values" ], - esnext: [ + es2025: [ "union", "intersection", "difference", @@ -16942,6 +16952,9 @@ var getScriptTargetFeatures = /* @__PURE__ */ memoize( ], es2024: [ "withResolvers" + ], + es2025: [ + "try" ] })), Symbol: new Map(Object.entries({ @@ -16958,6 +16971,10 @@ var getScriptTargetFeatures = /* @__PURE__ */ memoize( "entries", "keys", "values" + ], + esnext: [ + "getOrInsert", + "getOrInsertComputed" ] })), WeakSet: new Map(Object.entries({ @@ -17043,6 +17060,21 @@ var getScriptTargetFeatures = /* @__PURE__ */ memoize( Intl: new Map(Object.entries({ es2018: [ "PluralRules" + ], + es2020: [ + "RelativeTimeFormat", + "Locale", + "DisplayNames" + ], + es2021: [ + "ListFormat", + "DateTimeFormat" + ], + es2022: [ + "Segmenter" + ], + es2025: [ + "DurationFormat" ] })), NumberFormat: new Map(Object.entries({ @@ -17067,7 +17099,7 @@ var getScriptTargetFeatures = /* @__PURE__ */ memoize( "getBigInt64", "getBigUint64" ], - esnext: [ + es2025: [ "setFloat16", "getFloat16" ] @@ -17106,6 +17138,12 @@ var getScriptTargetFeatures = /* @__PURE__ */ memoize( "toSorted", "toSpliced", "with" + ], + esnext: [ + "toBase64", + "setFromBase64", + "toHex", + "setFromHex" ] })), Uint8ClampedArray: new Map(Object.entries({ @@ -17174,7 +17212,7 @@ var getScriptTargetFeatures = /* @__PURE__ */ memoize( ] })), Float16Array: new Map(Object.entries({ - esnext: emptyArray + es2025: emptyArray })), Float32Array: new Map(Object.entries({ es2022: [ @@ -17234,6 +17272,28 @@ var getScriptTargetFeatures = /* @__PURE__ */ memoize( es2022: [ "cause" ] + })), + ErrorConstructor: new Map(Object.entries({ + esnext: [ + "isError" + ] + })), + Uint8ArrayConstructor: new Map(Object.entries({ + esnext: [ + "fromBase64", + "fromHex" + ] + })), + Date: new Map(Object.entries({ + esnext: [ + "toTemporalInstant" + ] + })), + DisposableStack: new Map(Object.entries({ + esnext: emptyArray + })), + AsyncDisposableStack: new Map(Object.entries({ + esnext: emptyArray })) })) ); @@ -17373,7 +17433,7 @@ function isEffectiveStrictModeSourceFile(node, compilerOptions) { if (node.isDeclarationFile) { return false; } - if (getStrictOptionValue(compilerOptions, "alwaysStrict")) { + if (getAlwaysStrict(compilerOptions)) { return true; } if (startsWithUseStrict(node.statements)) { @@ -17952,12 +18012,15 @@ function forEachYieldExpression(body, visitor) { function traverse(node) { switch (node.kind) { case 230 /* YieldExpression */: - visitor(node); + const value = visitor(node); + if (value) { + return value; + } const operand = node.expression; - if (operand) { - traverse(operand); + if (!operand) { + return; } - return; + return traverse(operand); case 267 /* EnumDeclaration */: case 265 /* InterfaceDeclaration */: case 268 /* ModuleDeclaration */: @@ -17966,11 +18029,10 @@ function forEachYieldExpression(body, visitor) { default: if (isFunctionLike(node)) { if (node.name && node.name.kind === 168 /* ComputedPropertyName */) { - traverse(node.name.expression); - return; + return traverse(node.name.expression); } } else if (!isPartOfTypeNode(node)) { - forEachChild(node, traverse); + return forEachChild(node, traverse); } } } @@ -18580,6 +18642,22 @@ function isVariableDeclarationInitializedToBareOrAccessedRequire(node) { function isBindingElementOfBareOrAccessedRequire(node) { return isBindingElement(node) && isVariableDeclarationInitializedToBareOrAccessedRequire(node.parent.parent); } +function getModuleSpecifierOfBareOrAccessedRequire(node) { + if (isVariableDeclarationInitializedToRequire(node)) { + return node.initializer.arguments[0]; + } + if (isVariableDeclarationInitializedToBareOrAccessedRequire(node)) { + const leftmost = getLeftmostAccessExpression(node.initializer); + if (isRequireCall( + leftmost, + /*requireStringLiteralLikeArgument*/ + true + )) { + return leftmost.arguments[0]; + } + } + return void 0; +} function isVariableDeclarationInitializedWithRequireHelper(node, allowAccessedRequire) { return isVariableDeclaration(node) && !!node.initializer && isRequireCall( allowAccessedRequire ? getLeftmostAccessExpression(node.initializer) : node.initializer, @@ -20379,7 +20457,7 @@ function sourceFileMayBeEmitted(sourceFile, host, forceDtsEmit) { if (host.getRedirectFromSourceFile(sourceFile.fileName)) return false; if (options.outFile) return true; if (!options.outDir) return false; - if (options.rootDir || options.composite && options.configFilePath) { + if (options.rootDir || options.configFilePath) { const commonDir = getNormalizedAbsolutePath(getCommonSourceDirectory(options, () => [], host.getCurrentDirectory(), host.getCanonicalFileName), host.getCurrentDirectory()); const outputPath = getSourceFilePathInNewDirWorker(sourceFile.fileName, options.outDir, host.getCurrentDirectory(), commonDir, host.getCanonicalFileName); if (comparePaths(sourceFile.fileName, outputPath, host.getCurrentDirectory(), !host.useCaseSensitiveFileNames()) === 0 /* EqualTo */) return false; @@ -21388,7 +21466,7 @@ function getClassLikeDeclarationOfSymbol(symbol) { return (_a = symbol.declarations) == null ? void 0 : _a.find(isClassLike); } function getObjectFlags(type) { - return type.flags & 3899393 /* ObjectFlagsType */ ? type.objectFlags : 0; + return type.flags & 403963917 /* ObjectFlagsType */ ? type.objectFlags : 0; } function isUMDExportSymbol(symbol) { return !!symbol && !!symbol.declarations && !!symbol.declarations[0] && isNamespaceExportDeclaration(symbol.declarations[0]); @@ -21892,6 +21970,9 @@ function importSyntaxAffectsModuleResolution(options) { const moduleResolution = getEmitModuleResolutionKind(options); return 3 /* Node16 */ <= moduleResolution && moduleResolution <= 99 /* NodeNext */ || getResolvePackageJsonExports(options) || getResolvePackageJsonImports(options); } +function usesWildcardTypes(options) { + return some(options.types, (t) => t === "*"); +} function createComputedCompilerOptions(options) { return options; } @@ -21903,44 +21984,54 @@ var _computedOptions = createComputedCompilerOptions({ } }, target: { - dependencies: ["module"], + dependencies: [], computeValue: (compilerOptions) => { const target = compilerOptions.target === 0 /* ES3 */ ? void 0 : compilerOptions.target; - return target ?? (compilerOptions.module === 100 /* Node16 */ && 9 /* ES2022 */ || compilerOptions.module === 101 /* Node18 */ && 9 /* ES2022 */ || compilerOptions.module === 102 /* Node20 */ && 10 /* ES2023 */ || compilerOptions.module === 199 /* NodeNext */ && 99 /* ESNext */ || 1 /* ES5 */); + return target ?? 12 /* LatestStandard */; } }, module: { dependencies: ["target"], computeValue: (compilerOptions) => { - return typeof compilerOptions.module === "number" ? compilerOptions.module : _computedOptions.target.computeValue(compilerOptions) >= 2 /* ES2015 */ ? 5 /* ES2015 */ : 1 /* CommonJS */; + if (typeof compilerOptions.module === "number") { + return compilerOptions.module; + } + const target = _computedOptions.target.computeValue(compilerOptions); + if (target === 99 /* ESNext */) { + return 99 /* ESNext */; + } + if (target >= 9 /* ES2022 */) { + return 7 /* ES2022 */; + } + if (target >= 7 /* ES2020 */) { + return 6 /* ES2020 */; + } + if (target >= 2 /* ES2015 */) { + return 5 /* ES2015 */; + } + return 1 /* CommonJS */; } }, moduleResolution: { dependencies: ["module", "target"], computeValue: (compilerOptions) => { - let moduleResolution = compilerOptions.moduleResolution; - if (moduleResolution === void 0) { - switch (_computedOptions.module.computeValue(compilerOptions)) { - case 1 /* CommonJS */: - moduleResolution = 2 /* Node10 */; - break; - case 100 /* Node16 */: - case 101 /* Node18 */: - case 102 /* Node20 */: - moduleResolution = 3 /* Node16 */; - break; - case 199 /* NodeNext */: - moduleResolution = 99 /* NodeNext */; - break; - case 200 /* Preserve */: - moduleResolution = 100 /* Bundler */; - break; - default: - moduleResolution = 1 /* Classic */; - break; - } + if (compilerOptions.moduleResolution !== void 0) { + return compilerOptions.moduleResolution; + } + const moduleKind = _computedOptions.module.computeValue(compilerOptions); + switch (moduleKind) { + case 0 /* None */: + case 2 /* AMD */: + case 3 /* UMD */: + case 4 /* System */: + return 1 /* Classic */; + case 199 /* NodeNext */: + return 99 /* NodeNext */; + } + if (100 /* Node16 */ <= moduleKind && moduleKind < 199 /* NodeNext */) { + return 3 /* Node16 */; } - return moduleResolution; + return 100 /* Bundler */; } }, moduleDetection: { @@ -21960,33 +22051,25 @@ var _computedOptions = createComputedCompilerOptions({ } }, esModuleInterop: { - dependencies: ["module", "target"], + dependencies: [], computeValue: (compilerOptions) => { if (compilerOptions.esModuleInterop !== void 0) { return compilerOptions.esModuleInterop; } - switch (_computedOptions.module.computeValue(compilerOptions)) { - case 100 /* Node16 */: - case 101 /* Node18 */: - case 102 /* Node20 */: - case 199 /* NodeNext */: - case 200 /* Preserve */: - return true; - } - return false; + return true; } }, allowSyntheticDefaultImports: { - dependencies: ["module", "target", "moduleResolution"], + dependencies: [], computeValue: (compilerOptions) => { if (compilerOptions.allowSyntheticDefaultImports !== void 0) { return compilerOptions.allowSyntheticDefaultImports; } - return _computedOptions.esModuleInterop.computeValue(compilerOptions) || _computedOptions.module.computeValue(compilerOptions) === 4 /* System */ || _computedOptions.moduleResolution.computeValue(compilerOptions) === 100 /* Bundler */; + return true; } }, resolvePackageJsonExports: { - dependencies: ["moduleResolution"], + dependencies: ["moduleResolution", "module", "target"], computeValue: (compilerOptions) => { const moduleResolution = _computedOptions.moduleResolution.computeValue(compilerOptions); if (!moduleResolutionSupportsPackageJsonExportsAndImports(moduleResolution)) { @@ -22005,7 +22088,7 @@ var _computedOptions = createComputedCompilerOptions({ } }, resolvePackageJsonImports: { - dependencies: ["moduleResolution", "resolvePackageJsonExports"], + dependencies: ["moduleResolution", "resolvePackageJsonExports", "module", "target"], computeValue: (compilerOptions) => { const moduleResolution = _computedOptions.moduleResolution.computeValue(compilerOptions); if (!moduleResolutionSupportsPackageJsonExportsAndImports(moduleResolution)) { @@ -22118,10 +22201,11 @@ var _computedOptions = createComputedCompilerOptions({ return getStrictOptionValue(compilerOptions, "strictBuiltinIteratorReturn"); } }, + // Previously a strict-mode flag, but no longer. alwaysStrict: { - dependencies: ["strict"], + dependencies: [], computeValue: (compilerOptions) => { - return getStrictOptionValue(compilerOptions, "alwaysStrict"); + return compilerOptions.alwaysStrict !== false; } }, useUnknownInCatchVariables: { @@ -22149,6 +22233,7 @@ var isIncrementalCompilation = _computedOptions.incremental.computeValue; var getAreDeclarationMapsEnabled = _computedOptions.declarationMap.computeValue; var getAllowJSCompilerOption = _computedOptions.allowJs.computeValue; var getUseDefineForClassFields = _computedOptions.useDefineForClassFields.computeValue; +var getAlwaysStrict = _computedOptions.alwaysStrict.computeValue; function emitModuleKindIsNonNodeESM(moduleKind) { return moduleKind >= 5 /* ES2015 */ && moduleKind <= 99 /* ESNext */; } @@ -22161,12 +22246,6 @@ function hasJsonModuleEmitEnabled(options) { } return true; } -function unreachableCodeIsError(options) { - return options.allowUnreachableCode === false; -} -function unusedLabelIsError(options) { - return options.allowUnusedLabels === false; -} function moduleResolutionSupportsPackageJsonExportsAndImports(moduleResolution) { return moduleResolution >= 3 /* Node16 */ && moduleResolution <= 99 /* NodeNext */ || moduleResolution === 100 /* Bundler */; } @@ -22174,7 +22253,7 @@ function moduleSupportsImportAttributes(moduleKind) { return 101 /* Node18 */ <= moduleKind && moduleKind <= 199 /* NodeNext */ || moduleKind === 200 /* Preserve */ || moduleKind === 99 /* ESNext */; } function getStrictOptionValue(compilerOptions, flag) { - return compilerOptions[flag] === void 0 ? !!compilerOptions.strict : !!compilerOptions[flag]; + return compilerOptions[flag] === void 0 ? compilerOptions.strict !== false : !!compilerOptions[flag]; } function getNameOfScriptTarget(scriptTarget) { return forEachEntry(targetOptionDeclaration.type, (value, key) => value === scriptTarget ? key : void 0); @@ -22817,7 +22896,7 @@ function skipTypeCheckingIgnoringNoCheck(sourceFile, options, host) { ); } function skipTypeCheckingWorker(sourceFile, options, host, ignoreNoCheck) { - return options.skipLibCheck && sourceFile.isDeclarationFile || options.skipDefaultLibCheck && sourceFile.hasNoDefaultLib || !ignoreNoCheck && options.noCheck || host.isSourceOfProjectReferenceRedirect(sourceFile.fileName) || !canIncludeBindAndCheckDiagnostics(sourceFile, options); + return options.skipLibCheck && sourceFile.isDeclarationFile || options.skipDefaultLibCheck && host.isSourceFileDefaultLibrary(sourceFile) || !ignoreNoCheck && options.noCheck || host.isSourceOfProjectReferenceRedirect(sourceFile.fileName) || !canIncludeBindAndCheckDiagnostics(sourceFile, options); } function canIncludeBindAndCheckDiagnostics(sourceFile, options) { if (!!sourceFile.checkJsDirective && sourceFile.checkJsDirective.enabled === false) return false; @@ -23121,7 +23200,7 @@ function hasContextSensitiveParameters(node) { if (node.kind !== 220 /* ArrowFunction */) { const parameter = firstOrUndefined(node.parameters); if (!(parameter && parameterIsThisKeyword(parameter))) { - return true; + return !!(node.flags & 256 /* ContainsThis */); } } } @@ -23147,7 +23226,7 @@ function createPropertyNameNodeForIdentifierOrLiteral(name, target, singleQuote, return !isMethodNamedNew && isIdentifierText(name, target) ? factory.createIdentifier(name) : !stringNamed && !isMethodNamedNew && isNumericLiteralName(name) && +name >= 0 ? factory.createNumericLiteral(+name) : factory.createStringLiteral(name, !!singleQuote); } function isThisTypeParameter(type) { - return !!(type.flags & 262144 /* TypeParameter */ && type.isThisType); + return !!(type.flags & 524288 /* TypeParameter */ && type.isThisType); } function getNodeModulePathParts(fullPath) { let topLevelNodeModulesIndex = 0; @@ -23290,13 +23369,13 @@ function intrinsicTagNameToString(node) { return isIdentifier(node) ? idText(node) : getTextOfJsxNamespacedName(node); } function isTypeUsableAsPropertyName(type) { - return !!(type.flags & 8576 /* StringOrNumberLiteralOrUnique */); + return !!(type.flags & 19456 /* StringOrNumberLiteralOrUnique */); } function getPropertyNameFromType(type) { - if (type.flags & 8192 /* UniqueESSymbol */) { + if (type.flags & 16384 /* UniqueESSymbol */) { return type.escapedName; } - if (type.flags & (128 /* StringLiteral */ | 256 /* NumberLiteral */)) { + if (type.flags & (1024 /* StringLiteral */ | 2048 /* NumberLiteral */)) { return escapeLeadingUnderscores("" + type.value); } return Debug.fail(); @@ -24026,7 +24105,6 @@ var unprefixedNodeCoreModulesList = [ "stream/web", "string_decoder", "sys", - "test/mock_loader", "timers", "timers/promises", "tls", @@ -24043,6 +24121,7 @@ var unprefixedNodeCoreModulesList = [ ]; var unprefixedNodeCoreModules = new Set(unprefixedNodeCoreModulesList); var exclusivelyPrefixedNodeCoreModules = /* @__PURE__ */ new Set([ + "node:quic", "node:sea", "node:sqlite", "node:test", @@ -24230,6 +24309,21 @@ function addEmitFlagsRecursively(node, flag, getChild) { function getFirstChild(node) { return forEachChild(node, (child) => child); } +function canHaveStatements(node) { + return isBlock(node) || isModuleBlock(node) || isSourceFile(node) || isCaseClause(node) || isDefaultClause(node); +} +function isPotentiallyExecutableNode(node) { + if (244 /* FirstStatement */ <= node.kind && node.kind <= 260 /* LastStatement */) { + if (isVariableStatement(node)) { + if (getCombinedNodeFlags(node.declarationList) & 7 /* BlockScoped */) { + return true; + } + return some(node.declarationList.declarations, (d) => d.initializer !== void 0); + } + return true; + } + return isClassDeclaration(node) || isEnumDeclaration(node) || isModuleDeclaration(node); +} // src/compiler/factory/baseNodeFactory.ts function createBaseNodeFactory() { @@ -24351,10 +24445,22 @@ function createParenthesizerRules(factory2) { } return parenthesizerRule; } + function mixingBinaryOperatorsRequiresParentheses(a, b) { + if (a === 61 /* QuestionQuestionToken */) { + return b === 56 /* AmpersandAmpersandToken */ || b === 57 /* BarBarToken */; + } + if (b === 61 /* QuestionQuestionToken */) { + return a === 56 /* AmpersandAmpersandToken */ || a === 57 /* BarBarToken */; + } + return false; + } function binaryOperandNeedsParentheses(binaryOperator, operand, isLeftSideOfBinary, leftOperand) { + const emittedOperand = skipPartiallyEmittedExpressions(operand); + if (isBinaryExpression(emittedOperand) && mixingBinaryOperatorsRequiresParentheses(binaryOperator, emittedOperand.operatorToken.kind)) { + return true; + } const binaryOperatorPrecedence = getOperatorPrecedence(227 /* BinaryExpression */, binaryOperator); const binaryOperatorAssociativity = getOperatorAssociativity(227 /* BinaryExpression */, binaryOperator); - const emittedOperand = skipPartiallyEmittedExpressions(operand); if (!isLeftSideOfBinary && operand.kind === 220 /* ArrowFunction */ && binaryOperatorPrecedence > 3 /* Assignment */) { return true; } @@ -28236,7 +28342,7 @@ function createNodeFactory(flags, baseFactory2) { node.path = ""; node.resolvedPath = ""; node.originalFileName = ""; - node.languageVersion = 1 /* ES5 */; + node.languageVersion = 12 /* LatestStandard */; node.languageVariant = 0; node.scriptKind = 0; node.isDeclarationFile = false; @@ -28337,8 +28443,17 @@ function createNodeFactory(flags, baseFactory2) { node.transformFlags = propagateChildrenFlags(node.statements) | propagateChildFlags(node.endOfFileToken); return node; } - function updateSourceFile2(node, statements, isDeclarationFile = node.isDeclarationFile, referencedFiles = node.referencedFiles, typeReferenceDirectives = node.typeReferenceDirectives, hasNoDefaultLib = node.hasNoDefaultLib, libReferenceDirectives = node.libReferenceDirectives) { - return node.statements !== statements || node.isDeclarationFile !== isDeclarationFile || node.referencedFiles !== referencedFiles || node.typeReferenceDirectives !== typeReferenceDirectives || node.hasNoDefaultLib !== hasNoDefaultLib || node.libReferenceDirectives !== libReferenceDirectives ? update(cloneSourceFileWithChanges(node, statements, isDeclarationFile, referencedFiles, typeReferenceDirectives, hasNoDefaultLib, libReferenceDirectives), node) : node; + function updateSourceFile2(node, statements, isDeclarationFile = node.isDeclarationFile, referencedFiles = node.referencedFiles, typeReferenceDirectives = node.typeReferenceDirectives, _hasNoDefaultLib = false, libReferenceDirectives = node.libReferenceDirectives) { + return node.statements !== statements || node.isDeclarationFile !== isDeclarationFile || node.referencedFiles !== referencedFiles || node.typeReferenceDirectives !== typeReferenceDirectives || node.libReferenceDirectives !== libReferenceDirectives ? update(cloneSourceFileWithChanges( + node, + statements, + isDeclarationFile, + referencedFiles, + typeReferenceDirectives, + /*hasNoDefaultLib*/ + false, + libReferenceDirectives + ), node) : node; } function createBundle(sourceFiles) { const node = createBaseNode(309 /* Bundle */); @@ -28346,7 +28461,6 @@ function createNodeFactory(flags, baseFactory2) { node.syntheticFileReferences = void 0; node.syntheticTypeReferences = void 0; node.syntheticLibReferences = void 0; - node.hasNoDefaultLib = void 0; return node; } function updateBundle(node, sourceFiles) { @@ -37847,7 +37961,11 @@ var Parser; case 121 /* LetKeyword */: case 87 /* ConstKeyword */: case 160 /* UsingKeyword */: + return parseVariableStatement(pos, hasJSDoc, modifiersIn); case 135 /* AwaitKeyword */: + if (!isAwaitUsingDeclaration()) { + break; + } return parseVariableStatement(pos, hasJSDoc, modifiersIn); case 100 /* FunctionKeyword */: return parseFunctionDeclaration(pos, hasJSDoc, modifiersIn); @@ -37876,20 +37994,19 @@ var Parser; default: return parseExportDeclaration(pos, hasJSDoc, modifiersIn); } - default: - if (modifiersIn) { - const missing = createMissingNode( - 283 /* MissingDeclaration */, - /*reportAtCurrentPosition*/ - true, - Diagnostics.Declaration_expected - ); - setTextRangePos(missing, pos); - missing.modifiers = modifiersIn; - return missing; - } - return void 0; } + if (modifiersIn) { + const missing = createMissingNode( + 283 /* MissingDeclaration */, + /*reportAtCurrentPosition*/ + true, + Diagnostics.Declaration_expected + ); + setTextRangePos(missing, pos); + missing.modifiers = modifiersIn; + return missing; + } + return void 0; } function nextTokenIsStringLiteral() { return nextToken() === 11 /* StringLiteral */; @@ -38008,7 +38125,9 @@ var Parser; flags |= 4 /* Using */; break; case 135 /* AwaitKeyword */: - Debug.assert(isAwaitUsingDeclaration()); + if (!isAwaitUsingDeclaration()) { + break; + } flags |= 6 /* AwaitUsing */; nextToken(); break; @@ -38628,7 +38747,7 @@ var Parser; } function tryParseImportAttributes() { const currentToken2 = token(); - if ((currentToken2 === 118 /* WithKeyword */ || currentToken2 === 132 /* AssertKeyword */) && !scanner2.hasPrecedingLineBreak()) { + if (currentToken2 === 118 /* WithKeyword */ || currentToken2 === 132 /* AssertKeyword */ && !scanner2.hasPrecedingLineBreak()) { return parseImportAttributes(currentToken2); } } @@ -40402,7 +40521,6 @@ function processPragmasIntoFields(context, reportDiagnostic) { context.typeReferenceDirectives = []; context.libReferenceDirectives = []; context.amdDependencies = []; - context.hasNoDefaultLib = false; context.pragmas.forEach((entryOrList, key) => { switch (key) { case "reference": { @@ -40413,7 +40531,6 @@ function processPragmasIntoFields(context, reportDiagnostic) { const { types, lib, path, ["resolution-mode"]: res, preserve: _preserve } = arg.arguments; const preserve = _preserve === "true" ? true : void 0; if (arg.arguments["no-default-lib"] === "true") { - context.hasNoDefaultLib = true; } else if (types) { const parsed = parseResolutionMode(res, types.pos, types.end, reportDiagnostic); typeReferenceDirectives.push({ pos: types.pos, end: types.end, fileName: types.value, ...parsed ? { resolutionMode: parsed } : {}, ...preserve ? { preserve } : {} }); @@ -40604,6 +40721,7 @@ var libEntries = [ ["es2022", "lib.es2022.d.ts"], ["es2023", "lib.es2023.d.ts"], ["es2024", "lib.es2024.d.ts"], + ["es2025", "lib.es2025.d.ts"], ["esnext", "lib.esnext.d.ts"], // Host only ["dom", "lib.dom.d.ts"], @@ -40614,7 +40732,7 @@ var libEntries = [ ["webworker.iterable", "lib.webworker.iterable.d.ts"], ["webworker.asynciterable", "lib.webworker.asynciterable.d.ts"], ["scripthost", "lib.scripthost.d.ts"], - // ES2015 Or ESNext By-feature options + // ES2015 and later By-feature options ["es2015.core", "lib.es2015.core.d.ts"], ["es2015.collection", "lib.es2015.collection.d.ts"], ["es2015.generator", "lib.es2015.generator.d.ts"], @@ -40671,26 +40789,35 @@ var libEntries = [ ["es2024.regexp", "lib.es2024.regexp.d.ts"], ["es2024.sharedmemory", "lib.es2024.sharedmemory.d.ts"], ["es2024.string", "lib.es2024.string.d.ts"], - ["esnext.array", "lib.es2023.array.d.ts"], - ["esnext.collection", "lib.esnext.collection.d.ts"], - ["esnext.symbol", "lib.es2019.symbol.d.ts"], + ["es2025.collection", "lib.es2025.collection.d.ts"], + ["es2025.float16", "lib.es2025.float16.d.ts"], + ["es2025.intl", "lib.es2025.intl.d.ts"], + ["es2025.iterator", "lib.es2025.iterator.d.ts"], + ["es2025.promise", "lib.es2025.promise.d.ts"], + ["es2025.regexp", "lib.es2025.regexp.d.ts"], + // Fallback for backward compatibility ["esnext.asynciterable", "lib.es2018.asynciterable.d.ts"], - ["esnext.intl", "lib.esnext.intl.d.ts"], - ["esnext.disposable", "lib.esnext.disposable.d.ts"], + ["esnext.symbol", "lib.es2019.symbol.d.ts"], ["esnext.bigint", "lib.es2020.bigint.d.ts"], - ["esnext.string", "lib.es2022.string.d.ts"], - ["esnext.promise", "lib.es2024.promise.d.ts"], ["esnext.weakref", "lib.es2021.weakref.d.ts"], - ["esnext.decorators", "lib.esnext.decorators.d.ts"], ["esnext.object", "lib.es2024.object.d.ts"], - ["esnext.array", "lib.esnext.array.d.ts"], ["esnext.regexp", "lib.es2024.regexp.d.ts"], ["esnext.string", "lib.es2024.string.d.ts"], - ["esnext.iterator", "lib.esnext.iterator.d.ts"], - ["esnext.promise", "lib.esnext.promise.d.ts"], - ["esnext.float16", "lib.esnext.float16.d.ts"], + ["esnext.float16", "lib.es2025.float16.d.ts"], + ["esnext.iterator", "lib.es2025.iterator.d.ts"], + ["esnext.promise", "lib.es2025.promise.d.ts"], + // ESNext By-feature options + ["esnext.array", "lib.esnext.array.d.ts"], + ["esnext.collection", "lib.esnext.collection.d.ts"], + ["esnext.date", "lib.esnext.date.d.ts"], + ["esnext.decorators", "lib.esnext.decorators.d.ts"], + ["esnext.disposable", "lib.esnext.disposable.d.ts"], ["esnext.error", "lib.esnext.error.d.ts"], + ["esnext.intl", "lib.esnext.intl.d.ts"], ["esnext.sharedmemory", "lib.esnext.sharedmemory.d.ts"], + ["esnext.temporal", "lib.esnext.temporal.d.ts"], + ["esnext.typedarrays", "lib.esnext.typedarrays.d.ts"], + // Decorators ["decorators", "lib.decorators.d.ts"], ["decorators.legacy", "lib.decorators.legacy.d.ts"] ]; @@ -40989,18 +41116,19 @@ var targetOptionDeclaration = { es2022: 9 /* ES2022 */, es2023: 10 /* ES2023 */, es2024: 11 /* ES2024 */, + es2025: 12 /* ES2025 */, esnext: 99 /* ESNext */ })), affectsSourceFile: true, affectsModuleResolution: true, affectsEmit: true, affectsBuildInfo: true, - deprecatedKeys: /* @__PURE__ */ new Set(["es3"]), + deprecatedKeys: /* @__PURE__ */ new Set(["es3", "es5"]), paramType: Diagnostics.VERSION, showInSimplifiedHelpView: true, category: Diagnostics.Language_and_Environment, description: Diagnostics.Set_the_JavaScript_language_version_for_emitted_JavaScript_and_include_compatible_library_declarations, - defaultValueDescription: 1 /* ES5 */ + defaultValueDescription: 12 /* LatestStandard */ }; var moduleOptionDeclaration = { name: "module", @@ -41022,6 +41150,7 @@ var moduleOptionDeclaration = { nodenext: 199 /* NodeNext */, preserve: 200 /* Preserve */ })), + deprecatedKeys: /* @__PURE__ */ new Set(["none", "amd", "system", "umd"]), affectsSourceFile: true, affectsModuleResolution: true, affectsEmit: true, @@ -41086,6 +41215,15 @@ var commandOptionsWithoutBuild = [ description: Diagnostics.Print_names_of_files_that_are_part_of_the_compilation_and_then_stop_processing, defaultValueDescription: false }, + { + name: "ignoreConfig", + type: "boolean", + showInSimplifiedHelpView: true, + category: Diagnostics.Command_line_Options, + isCommandLineOnly: true, + description: Diagnostics.Ignore_the_tsconfig_found_and_build_with_commandline_options_and_files, + defaultValueDescription: false + }, // Basic targetOptionDeclaration, moduleOptionDeclaration, @@ -41111,7 +41249,7 @@ var commandOptionsWithoutBuild = [ showInSimplifiedHelpView: true, category: Diagnostics.JavaScript_Support, description: Diagnostics.Allow_JavaScript_files_to_be_a_part_of_your_program_Use_the_checkJs_option_to_get_errors_from_these_files, - defaultValueDescription: false + defaultValueDescription: Diagnostics.false_unless_checkJs_is_set }, { name: "checkJs", @@ -41286,7 +41424,7 @@ var commandOptionsWithoutBuild = [ affectsProgramStructure: true, category: Diagnostics.Language_and_Environment, description: Diagnostics.Enable_lib_replacement, - defaultValueDescription: true + defaultValueDescription: false }, // Strict Type Checks { @@ -41300,7 +41438,7 @@ var commandOptionsWithoutBuild = [ showInSimplifiedHelpView: true, category: Diagnostics.Type_Checking, description: Diagnostics.Enable_all_strict_type_checking_options, - defaultValueDescription: false + defaultValueDescription: true }, { name: "noImplicitAny", @@ -41310,7 +41448,7 @@ var commandOptionsWithoutBuild = [ strictFlag: true, category: Diagnostics.Type_Checking, description: Diagnostics.Enable_error_reporting_for_expressions_and_declarations_with_an_implied_any_type, - defaultValueDescription: Diagnostics.false_unless_strict_is_set + defaultValueDescription: Diagnostics.true_unless_strict_is_false }, { name: "strictNullChecks", @@ -41320,7 +41458,7 @@ var commandOptionsWithoutBuild = [ strictFlag: true, category: Diagnostics.Type_Checking, description: Diagnostics.When_type_checking_take_into_account_null_and_undefined, - defaultValueDescription: Diagnostics.false_unless_strict_is_set + defaultValueDescription: Diagnostics.true_unless_strict_is_false }, { name: "strictFunctionTypes", @@ -41330,7 +41468,7 @@ var commandOptionsWithoutBuild = [ strictFlag: true, category: Diagnostics.Type_Checking, description: Diagnostics.When_assigning_functions_check_to_ensure_parameters_and_the_return_values_are_subtype_compatible, - defaultValueDescription: Diagnostics.false_unless_strict_is_set + defaultValueDescription: Diagnostics.true_unless_strict_is_false }, { name: "strictBindCallApply", @@ -41340,7 +41478,7 @@ var commandOptionsWithoutBuild = [ strictFlag: true, category: Diagnostics.Type_Checking, description: Diagnostics.Check_that_the_arguments_for_bind_call_and_apply_methods_match_the_original_function, - defaultValueDescription: Diagnostics.false_unless_strict_is_set + defaultValueDescription: Diagnostics.true_unless_strict_is_false }, { name: "strictPropertyInitialization", @@ -41350,7 +41488,7 @@ var commandOptionsWithoutBuild = [ strictFlag: true, category: Diagnostics.Type_Checking, description: Diagnostics.Check_for_class_properties_that_are_declared_but_not_set_in_the_constructor, - defaultValueDescription: Diagnostics.false_unless_strict_is_set + defaultValueDescription: Diagnostics.true_unless_strict_is_false }, { name: "strictBuiltinIteratorReturn", @@ -41360,7 +41498,17 @@ var commandOptionsWithoutBuild = [ strictFlag: true, category: Diagnostics.Type_Checking, description: Diagnostics.Built_in_iterators_are_instantiated_with_a_TReturn_type_of_undefined_instead_of_any, - defaultValueDescription: Diagnostics.false_unless_strict_is_set + defaultValueDescription: Diagnostics.true_unless_strict_is_false + }, + { + name: "stableTypeOrdering", + type: "boolean", + affectsSemanticDiagnostics: true, + affectsBuildInfo: true, + showInHelp: false, + category: Diagnostics.Type_Checking, + description: Diagnostics.Ensure_types_are_ordered_stably_and_deterministically_across_compilations, + defaultValueDescription: false }, { name: "noImplicitThis", @@ -41370,7 +41518,7 @@ var commandOptionsWithoutBuild = [ strictFlag: true, category: Diagnostics.Type_Checking, description: Diagnostics.Enable_error_reporting_when_this_is_given_the_type_any, - defaultValueDescription: Diagnostics.false_unless_strict_is_set + defaultValueDescription: Diagnostics.true_unless_strict_is_false }, { name: "useUnknownInCatchVariables", @@ -41380,7 +41528,7 @@ var commandOptionsWithoutBuild = [ strictFlag: true, category: Diagnostics.Type_Checking, description: Diagnostics.Default_catch_clause_variables_as_unknown_instead_of_any, - defaultValueDescription: Diagnostics.false_unless_strict_is_set + defaultValueDescription: Diagnostics.true_unless_strict_is_false }, { name: "alwaysStrict", @@ -41388,10 +41536,9 @@ var commandOptionsWithoutBuild = [ affectsSourceFile: true, affectsEmit: true, affectsBuildInfo: true, - strictFlag: true, category: Diagnostics.Type_Checking, description: Diagnostics.Ensure_use_strict_is_always_emitted, - defaultValueDescription: Diagnostics.false_unless_strict_is_set + defaultValueDescription: true }, // Additional Checks { @@ -41480,13 +41627,13 @@ var commandOptionsWithoutBuild = [ nodenext: 99 /* NodeNext */, bundler: 100 /* Bundler */ })), - deprecatedKeys: /* @__PURE__ */ new Set(["node"]), + deprecatedKeys: /* @__PURE__ */ new Set(["node", "node10", "classic"]), affectsSourceFile: true, affectsModuleResolution: true, paramType: Diagnostics.STRATEGY, category: Diagnostics.Modules, description: Diagnostics.Specify_how_TypeScript_looks_up_a_file_from_a_given_module_specifier, - defaultValueDescription: Diagnostics.module_AMD_or_UMD_or_System_or_ES6_then_Classic_Otherwise_Node + defaultValueDescription: Diagnostics.nodenext_if_module_is_nodenext_node16_if_module_is_node16_or_node18_otherwise_bundler }, { name: "baseUrl", @@ -41559,7 +41706,7 @@ var commandOptionsWithoutBuild = [ affectsBuildInfo: true, category: Diagnostics.Interop_Constraints, description: Diagnostics.Allow_import_x_from_y_when_a_module_doesn_t_have_a_default_export, - defaultValueDescription: Diagnostics.module_system_or_esModuleInterop + defaultValueDescription: true }, { name: "esModuleInterop", @@ -41570,7 +41717,7 @@ var commandOptionsWithoutBuild = [ showInSimplifiedHelpView: true, category: Diagnostics.Interop_Constraints, description: Diagnostics.Emit_additional_JavaScript_to_ease_support_for_importing_CommonJS_modules_This_enables_allowSyntheticDefaultImports_for_type_compatibility, - defaultValueDescription: false + defaultValueDescription: true }, { name: "preserveSymlinks", @@ -41653,7 +41800,7 @@ var commandOptionsWithoutBuild = [ affectsBuildInfo: true, category: Diagnostics.Modules, description: Diagnostics.Check_side_effect_imports, - defaultValueDescription: false + defaultValueDescription: true }, // Source Maps { @@ -44316,7 +44463,7 @@ function resolveTypeReferenceDirective(typeReferenceDirectiveName, containingFil const affectingLocations = []; let features = getNodeResolutionFeatures(options); if (resolutionMode !== void 0) { - features |= 30 /* AllFeatures */; + features |= 94 /* AllFeatures */; } const moduleResolution = getEmitModuleResolutionKind(options); if (resolutionMode === 99 /* ESNext */ && (3 /* Node16 */ <= moduleResolution && moduleResolution <= 99 /* NodeNext */)) { @@ -44471,10 +44618,10 @@ function getNodeResolutionFeatures(options) { features = 30 /* Node16Default */; break; case 99 /* NodeNext */: - features = 30 /* NodeNextDefault */; + features = 94 /* NodeNextDefault */; break; case 100 /* Bundler */: - features = 30 /* BundlerDefault */; + features = 94 /* BundlerDefault */; break; } if (options.resolvePackageJsonExports) { @@ -44523,10 +44670,10 @@ function resolvePackageNameToPackageJson(packageName, containingDirectory, optio }); } function getAutomaticTypeDirectiveNames(options, host) { - if (options.types) { - return options.types; + if (!usesWildcardTypes(options)) { + return options.types ?? []; } - const result = []; + const wildcardMatches = []; if (host.directoryExists && host.getDirectories) { const typeRoots = getEffectiveTypeRoots(options, host); if (typeRoots) { @@ -44539,7 +44686,7 @@ function getAutomaticTypeDirectiveNames(options, host) { if (!isNotNeededPackage) { const baseFileName = getBaseFileName(normalized); if (baseFileName.charCodeAt(0) !== 46 /* dot */) { - result.push(baseFileName); + wildcardMatches.push(baseFileName); } } } @@ -44547,7 +44694,7 @@ function getAutomaticTypeDirectiveNames(options, host) { } } } - return result; + return deduplicate(flatten(options.types.map((t) => t === "*" ? wildcardMatches : t)), equateValues); } function isPackageJsonInfo(entry) { return !!(entry == null ? void 0 : entry.contents); @@ -45074,10 +45221,11 @@ var NodeResolutionFeatures = /* @__PURE__ */ ((NodeResolutionFeatures2) => { NodeResolutionFeatures2[NodeResolutionFeatures2["SelfName"] = 4] = "SelfName"; NodeResolutionFeatures2[NodeResolutionFeatures2["Exports"] = 8] = "Exports"; NodeResolutionFeatures2[NodeResolutionFeatures2["ExportsPatternTrailers"] = 16] = "ExportsPatternTrailers"; - NodeResolutionFeatures2[NodeResolutionFeatures2["AllFeatures"] = 30] = "AllFeatures"; + NodeResolutionFeatures2[NodeResolutionFeatures2["ImportsPatternRoot"] = 64] = "ImportsPatternRoot"; + NodeResolutionFeatures2[NodeResolutionFeatures2["AllFeatures"] = 94] = "AllFeatures"; NodeResolutionFeatures2[NodeResolutionFeatures2["Node16Default"] = 30] = "Node16Default"; - NodeResolutionFeatures2[NodeResolutionFeatures2["NodeNextDefault"] = 30 /* AllFeatures */] = "NodeNextDefault"; - NodeResolutionFeatures2[NodeResolutionFeatures2["BundlerDefault"] = 30] = "BundlerDefault"; + NodeResolutionFeatures2[NodeResolutionFeatures2["NodeNextDefault"] = 94 /* AllFeatures */] = "NodeNextDefault"; + NodeResolutionFeatures2[NodeResolutionFeatures2["BundlerDefault"] = 94] = "BundlerDefault"; NodeResolutionFeatures2[NodeResolutionFeatures2["EsmMode"] = 32] = "EsmMode"; return NodeResolutionFeatures2; })(NodeResolutionFeatures || {}); @@ -45095,7 +45243,7 @@ function node16ModuleNameResolver(moduleName, containingFile, compilerOptions, h } function nodeNextModuleNameResolver(moduleName, containingFile, compilerOptions, host, cache, redirectedReference, resolutionMode) { return nodeNextModuleNameResolverWorker( - 30 /* NodeNextDefault */, + 94 /* NodeNextDefault */, moduleName, containingFile, compilerOptions, @@ -45174,11 +45322,11 @@ function nodeModuleNameResolver(moduleName, containingFile, compilerOptions, hos } else { extensions = getResolveJsonModule(compilerOptions) ? 1 /* TypeScript */ | 2 /* JavaScript */ | 4 /* Declaration */ | 8 /* Json */ : 1 /* TypeScript */ | 2 /* JavaScript */ | 4 /* Declaration */; } - return nodeModuleNameResolverWorker(conditions ? 30 /* AllFeatures */ : 0 /* None */, moduleName, getDirectoryPath(containingFile), compilerOptions, host, cache, extensions, !!isConfigLookup, redirectedReference, conditions); + return nodeModuleNameResolverWorker(conditions ? 94 /* AllFeatures */ : 0 /* None */, moduleName, getDirectoryPath(containingFile), compilerOptions, host, cache, extensions, !!isConfigLookup, redirectedReference, conditions); } function nodeNextJsonConfigResolver(moduleName, containingFile, host) { return nodeModuleNameResolverWorker( - 30 /* NodeNextDefault */, + 94 /* NodeNextDefault */, moduleName, getDirectoryPath(containingFile), { moduleResolution: 99 /* NodeNext */ }, @@ -45251,7 +45399,7 @@ function nodeModuleNameResolverWorker(features, moduleName, containingDirectory, const diagnosticState = { ...state, compilerOptions: diagnosticsCompilerOptions, - features: 30 /* BundlerDefault */, + features: 94 /* BundlerDefault */, conditions: getConditions(diagnosticsCompilerOptions), reportDiagnostic: noop }; @@ -45901,7 +46049,7 @@ function loadModuleFromExports(scope, extensions, subpath, state, cache, redirec } function loadModuleFromImports(extensions, moduleName, directory, state, cache, redirectedReference) { var _a, _b; - if (moduleName === "#" || startsWith(moduleName, "#/")) { + if (moduleName === "#" || startsWith(moduleName, "#/") && !(state.features & 64 /* ImportsPatternRoot */)) { if (state.traceEnabled) { trace(state.host, Diagnostics.Invalid_import_specifier_0_has_no_possible_resolutions, moduleName); } @@ -46121,7 +46269,9 @@ function getLoadModuleFromTargetExportOrImport(extensions, state, cache, redirec const subTarget = target[condition]; const result = loadModuleFromTargetExportOrImport(subTarget, subpath, pattern, key); if (result) { - traceIfEnabled(state, Diagnostics.Resolved_under_condition_0, condition); + if (result.value) { + traceIfEnabled(state, Diagnostics.Resolved_under_condition_0, condition); + } traceIfEnabled(state, Diagnostics.Exiting_conditional_exports); return result; } else { @@ -46154,10 +46304,7 @@ function getLoadModuleFromTargetExportOrImport(extensions, state, cache, redirec if (state.traceEnabled) { trace(state.host, Diagnostics.package_json_scope_0_explicitly_maps_specifier_1_to_null, scope.packageDirectory, moduleName); } - return toSearchResult( - /*value*/ - void 0 - ); + return { value: void 0 }; } if (state.traceEnabled) { trace(state.host, Diagnostics.package_json_scope_0_has_invalid_type_for_target_of_specifier_1, scope.packageDirectory, moduleName); @@ -46179,7 +46326,7 @@ function getLoadModuleFromTargetExportOrImport(extensions, state, cache, redirec if (!state.isConfigLookup && (state.compilerOptions.declarationDir || state.compilerOptions.outDir) && !finalPath.includes("/node_modules/") && (state.compilerOptions.configFile ? containsPath(scope.packageDirectory, toAbsolutePath(state.compilerOptions.configFile.fileName), !useCaseSensitiveFileNames(state)) : true)) { const getCanonicalFileName = hostGetCanonicalFileName({ useCaseSensitiveFileNames: () => useCaseSensitiveFileNames(state) }); const commonSourceDirGuesses = []; - if (state.compilerOptions.rootDir || state.compilerOptions.composite && state.compilerOptions.configFilePath) { + if (state.compilerOptions.rootDir || state.compilerOptions.configFilePath) { const commonDir = toAbsolutePath(getCommonSourceDirectory(state.compilerOptions, () => [], ((_b2 = (_a2 = state.host).getCurrentDirectory) == null ? void 0 : _b2.call(_a2)) || "", getCanonicalFileName)); commonSourceDirGuesses.push(commonDir); } else if (state.requestContainingDirectory) { @@ -46786,6 +46933,7 @@ var ContainerFlags = /* @__PURE__ */ ((ContainerFlags2) => { ContainerFlags2[ContainerFlags2["HasLocals"] = 32] = "HasLocals"; ContainerFlags2[ContainerFlags2["IsInterface"] = 64] = "IsInterface"; ContainerFlags2[ContainerFlags2["IsObjectLiteralOrClassExpressionMethodOrAccessor"] = 128] = "IsObjectLiteralOrClassExpressionMethodOrAccessor"; + ContainerFlags2[ContainerFlags2["PropagatesThisKeyword"] = 256] = "PropagatesThisKeyword"; return ContainerFlags2; })(ContainerFlags || {}); function createFlowNode(flags, node, antecedent) { @@ -46835,13 +46983,6 @@ function createBinder() { /*antecedent*/ void 0 ); - var reportedUnreachableFlow = createFlowNode( - 1 /* Unreachable */, - /*node*/ - void 0, - /*antecedent*/ - void 0 - ); var bindBinaryExpressionFlow = createBindBinaryExpressionFlow(); return bindSourceFile2; function createDiagnosticForNode2(node, message, ...args) { @@ -46857,7 +46998,6 @@ function createBinder() { symbolCount = 0; Symbol48 = objectAllocator.getSymbolConstructor(); Debug.attachFlowNodeDebugInfo(unreachableFlow); - Debug.attachFlowNodeDebugInfo(reportedUnreachableFlow); if (!file.locals) { (_a = tracing) == null ? void 0 : _a.push( tracing.Phase.Bind, @@ -46899,7 +47039,7 @@ function createBinder() { emitFlags = 0 /* None */; } function bindInStrictMode(file2, opts) { - if (getStrictOptionValue(opts, "alwaysStrict") && !file2.isDeclarationFile) { + if (getAlwaysStrict(opts) && !file2.isDeclarationFile) { return true; } else { return !!file2.externalModuleIndicator; @@ -47155,6 +47295,7 @@ function createBinder() { const saveExceptionTarget = currentExceptionTarget; const saveActiveLabelList = activeLabelList; const saveHasExplicitReturn = hasExplicitReturn; + const saveSeenThisKeyword = seenThisKeyword; const isImmediatelyInvoked = containerFlags & 16 /* IsFunctionExpression */ && !hasSyntacticModifier(node, 1024 /* Async */) && !node.asteriskToken && !!getImmediatelyInvokedFunctionExpression(node) || node.kind === 176 /* ClassStaticBlockDeclaration */; if (!isImmediatelyInvoked) { currentFlow = createFlowNode( @@ -47174,13 +47315,17 @@ function createBinder() { currentContinueTarget = void 0; activeLabelList = void 0; hasExplicitReturn = false; + seenThisKeyword = false; bindChildren(node); - node.flags &= ~5632 /* ReachabilityAndEmitFlags */; + node.flags &= ~(5632 /* ReachabilityAndEmitFlags */ | 256 /* ContainsThis */); if (!(currentFlow.flags & 1 /* Unreachable */) && containerFlags & 8 /* IsFunctionLike */ && nodeIsPresent(node.body)) { node.flags |= 512 /* HasImplicitReturn */; if (hasExplicitReturn) node.flags |= 1024 /* HasExplicitReturn */; node.endFlowNode = currentFlow; } + if (seenThisKeyword) { + node.flags |= 256 /* ContainsThis */; + } if (node.kind === 308 /* SourceFile */) { node.flags |= emitFlags; node.endFlowNode = currentFlow; @@ -47201,11 +47346,14 @@ function createBinder() { currentExceptionTarget = saveExceptionTarget; activeLabelList = saveActiveLabelList; hasExplicitReturn = saveHasExplicitReturn; + seenThisKeyword = containerFlags & 256 /* PropagatesThisKeyword */ ? saveSeenThisKeyword || seenThisKeyword : saveSeenThisKeyword; } else if (containerFlags & 64 /* IsInterface */) { + const saveSeenThisKeyword = seenThisKeyword; seenThisKeyword = false; bindChildren(node); Debug.assertNotNode(node, isIdentifier); node.flags = seenThisKeyword ? node.flags | 256 /* ContainsThis */ : node.flags & ~256 /* ContainsThis */; + seenThisKeyword = saveSeenThisKeyword; } else { bindChildren(node); } @@ -47230,16 +47378,22 @@ function createBinder() { function bindChildren(node) { const saveInAssignmentPattern = inAssignmentPattern; inAssignmentPattern = false; - if (checkUnreachable(node)) { - if (canHaveFlowNode(node) && node.flowNode) { + if (isPotentiallyExecutableNode(node)) { + node.flags &= ~1073741824 /* Unreachable */; + } + if (currentFlow === unreachableFlow) { + if (canHaveFlowNode(node)) { node.flowNode = void 0; } + if (isPotentiallyExecutableNode(node)) { + node.flags |= 1073741824 /* Unreachable */; + } bindEachChild(node); bindJSDoc(node); inAssignmentPattern = saveInAssignmentPattern; return; } - if (node.kind >= 244 /* FirstStatement */ && node.kind <= 260 /* LastStatement */ && (!options.allowUnreachableCode || node.kind === 254 /* ReturnStatement */)) { + if (244 /* FirstStatement */ <= node.kind && node.kind <= 260 /* LastStatement */ && canHaveFlowNode(node)) { node.flowNode = currentFlow; } switch (node.kind) { @@ -47826,8 +47980,8 @@ function createBinder() { }; bind(node.label); bind(node.statement); - if (!activeLabelList.referenced && !options.allowUnusedLabels) { - errorOrSuggestionOnNode(unusedLabelIsError(options), node.label, Diagnostics.Unused_label); + if (!activeLabelList.referenced) { + node.label.flags |= 1073741824 /* Unreachable */; } activeLabelList = activeLabelList.next; addAntecedent(postStatementLabel, currentFlow); @@ -48604,20 +48758,6 @@ function createBinder() { const span = getSpanOfTokenAtPosition(file, node.pos); file.bindDiagnostics.push(createFileDiagnostic(file, span.start, span.length, message, ...args)); } - function errorOrSuggestionOnNode(isError, node, message) { - errorOrSuggestionOnRange(isError, node, node, message); - } - function errorOrSuggestionOnRange(isError, startNode2, endNode2, message) { - addErrorOrSuggestionDiagnostic(isError, { pos: getTokenPosOfNode(startNode2, file), end: endNode2.end }, message); - } - function addErrorOrSuggestionDiagnostic(isError, range, message) { - const diag2 = createFileDiagnostic(file, range.pos, range.end - range.pos, message); - if (isError) { - file.bindDiagnostics.push(diag2); - } else { - file.bindSuggestionDiagnostics = append(file.bindSuggestionDiagnostics, { ...diag2, category: 2 /* Suggestion */ }); - } - } function bind(node) { if (!node) { return; @@ -48693,6 +48833,9 @@ function createBinder() { } // falls through case 110 /* ThisKeyword */: + if (node.kind === 110 /* ThisKeyword */) { + seenThisKeyword = true; + } if (currentFlow && (isExpression(node) || parent2.kind === 305 /* ShorthandPropertyAssignment */)) { node.flowNode = currentFlow; } @@ -49504,61 +49647,6 @@ function createBinder() { declareSymbolAndAddToSymbolTable(node, 262144 /* TypeParameter */, 526824 /* TypeParameterExcludes */); } } - function shouldReportErrorOnModuleDeclaration(node) { - const instanceState = getModuleInstanceState(node); - return instanceState === 1 /* Instantiated */ || instanceState === 2 /* ConstEnumOnly */ && shouldPreserveConstEnums(options); - } - function checkUnreachable(node) { - if (!(currentFlow.flags & 1 /* Unreachable */)) { - return false; - } - if (currentFlow === unreachableFlow) { - const reportError = ( - // report error on all statements except empty ones - isStatementButNotDeclaration(node) && node.kind !== 243 /* EmptyStatement */ || // report error on class declarations - node.kind === 264 /* ClassDeclaration */ || // report errors on enums with preserved emit - isEnumDeclarationWithPreservedEmit(node, options) || // report error on instantiated modules - node.kind === 268 /* ModuleDeclaration */ && shouldReportErrorOnModuleDeclaration(node) - ); - if (reportError) { - currentFlow = reportedUnreachableFlow; - if (!options.allowUnreachableCode) { - const isError = unreachableCodeIsError(options) && !(node.flags & 33554432 /* Ambient */) && (!isVariableStatement(node) || !!(getCombinedNodeFlags(node.declarationList) & 7 /* BlockScoped */) || node.declarationList.declarations.some((d) => !!d.initializer)); - eachUnreachableRange(node, options, (start, end) => errorOrSuggestionOnRange(isError, start, end, Diagnostics.Unreachable_code_detected)); - } - } - } - return true; - } -} -function isEnumDeclarationWithPreservedEmit(node, options) { - return node.kind === 267 /* EnumDeclaration */ && (!isEnumConst(node) || shouldPreserveConstEnums(options)); -} -function eachUnreachableRange(node, options, cb) { - if (isStatement(node) && isExecutableStatement(node) && isBlock(node.parent)) { - const { statements } = node.parent; - const slice = sliceAfter(statements, node); - getRangesWhere(slice, isExecutableStatement, (start, afterEnd) => cb(slice[start], slice[afterEnd - 1])); - } else { - cb(node, node); - } - function isExecutableStatement(s) { - return !isFunctionDeclaration(s) && !isPurelyTypeDeclaration(s) && // `var x;` may declare a variable used above - !(isVariableStatement(s) && !(getCombinedNodeFlags(s) & 7 /* BlockScoped */) && s.declarationList.declarations.some((d) => !d.initializer)); - } - function isPurelyTypeDeclaration(s) { - switch (s.kind) { - case 265 /* InterfaceDeclaration */: - case 266 /* TypeAliasDeclaration */: - return true; - case 268 /* ModuleDeclaration */: - return getModuleInstanceState(s) !== 1 /* Instantiated */; - case 267 /* EnumDeclaration */: - return !isEnumDeclarationWithPreservedEmit(s, options); - default: - return false; - } - } } function isExportsOrModuleExportsOrAlias(sourceFile, node) { let i = 0; @@ -49615,6 +49703,8 @@ function getContainerFlags(node) { // falls through case 177 /* Constructor */: case 263 /* FunctionDeclaration */: + case 176 /* ClassStaticBlockDeclaration */: + return 1 /* IsContainer */ | 4 /* IsControlFlowContainer */ | 32 /* HasLocals */ | 8 /* IsFunctionLike */; case 174 /* MethodSignature */: case 180 /* CallSignature */: case 324 /* JSDocSignature */: @@ -49622,17 +49712,15 @@ function getContainerFlags(node) { case 185 /* FunctionType */: case 181 /* ConstructSignature */: case 186 /* ConstructorType */: - case 176 /* ClassStaticBlockDeclaration */: - return 1 /* IsContainer */ | 4 /* IsControlFlowContainer */ | 32 /* HasLocals */ | 8 /* IsFunctionLike */; + return 1 /* IsContainer */ | 4 /* IsControlFlowContainer */ | 32 /* HasLocals */ | 8 /* IsFunctionLike */ | 256 /* PropagatesThisKeyword */; case 352 /* JSDocImportTag */: - return 1 /* IsContainer */ | 4 /* IsControlFlowContainer */ | 32 /* HasLocals */; + return 1 /* IsContainer */ | 4 /* IsControlFlowContainer */ | 32 /* HasLocals */ | 256 /* PropagatesThisKeyword */; case 219 /* FunctionExpression */: - case 220 /* ArrowFunction */: return 1 /* IsContainer */ | 4 /* IsControlFlowContainer */ | 32 /* HasLocals */ | 8 /* IsFunctionLike */ | 16 /* IsFunctionExpression */; + case 220 /* ArrowFunction */: + return 1 /* IsContainer */ | 4 /* IsControlFlowContainer */ | 32 /* HasLocals */ | 8 /* IsFunctionLike */ | 16 /* IsFunctionExpression */ | 256 /* PropagatesThisKeyword */; case 269 /* ModuleBlock */: return 4 /* IsControlFlowContainer */; - case 173 /* PropertyDeclaration */: - return node.initializer ? 4 /* IsControlFlowContainer */ : 0; case 300 /* CatchClause */: case 249 /* ForStatement */: case 250 /* ForInStatement */: @@ -49694,7 +49782,7 @@ function createGetSymbolWalker(getRestTypeOfSignature, getTypePredicateOfSignatu visitedTypes[type.id] = type; const shouldBail = visitSymbol(type.symbol); if (shouldBail) return; - if (type.flags & 524288 /* Object */) { + if (type.flags & 1048576 /* Object */) { const objectType = type; const objectFlags = objectType.objectFlags; if (objectFlags & 4 /* Reference */) { @@ -49710,16 +49798,16 @@ function createGetSymbolWalker(getRestTypeOfSignature, getTypePredicateOfSignatu visitObjectType(objectType); } } - if (type.flags & 262144 /* TypeParameter */) { + if (type.flags & 524288 /* TypeParameter */) { visitTypeParameter(type); } - if (type.flags & 3145728 /* UnionOrIntersection */) { + if (type.flags & 402653184 /* UnionOrIntersection */) { visitUnionOrIntersectionType(type); } - if (type.flags & 4194304 /* Index */) { + if (type.flags & 2097152 /* Index */) { visitIndexType(type); } - if (type.flags & 8388608 /* IndexedAccess */) { + if (type.flags & 33554432 /* IndexedAccess */) { visitIndexedAccessType(type); } } @@ -50999,6 +51087,8 @@ function createTypeChecker(host) { var currentNode; var varianceTypeParameter; var isInferencePartiallyBlocked = false; + var withinUnreachableCode = false; + var reportedUnreachableNodes; var emptySymbols = createSymbolTable(); var arrayVariances = [1 /* Covariant */]; var compilerOptions = host.getCompilerOptions(); @@ -51017,7 +51107,9 @@ function createTypeChecker(host) { var noImplicitThis = getStrictOptionValue(compilerOptions, "noImplicitThis"); var useUnknownInCatchVariables = getStrictOptionValue(compilerOptions, "useUnknownInCatchVariables"); var exactOptionalPropertyTypes = compilerOptions.exactOptionalPropertyTypes; - var noUncheckedSideEffectImports = !!compilerOptions.noUncheckedSideEffectImports; + var noUncheckedSideEffectImports = compilerOptions.noUncheckedSideEffectImports !== false; + var stableTypeOrdering = !!compilerOptions.stableTypeOrdering; + var fileIndexMap = stableTypeOrdering ? new Map(host.getSourceFiles().map((file, i) => [file, i])) : void 0; var checkBinaryExpression = createCheckBinaryExpression(); var emitResolver = createResolver(); var nodeBuilder = createNodeBuilder(); @@ -51218,7 +51310,7 @@ function createTypeChecker(host) { if (!node) { return void 0; } - if (contextFlags & 4 /* Completions */) { + if (contextFlags & 4 /* IgnoreNodeInferences */) { return runWithInferenceBlockedFromSourceNode(node, () => getContextualType2(node, contextFlags)); } return getContextualType2(node, contextFlags); @@ -51362,7 +51454,7 @@ function createTypeChecker(host) { getSuggestedSymbolForNonexistentModule, getSuggestedSymbolForNonexistentClassMember, getBaseConstraintOfType, - getDefaultFromTypeParameter: (type) => type && type.flags & 262144 /* TypeParameter */ ? getDefaultFromTypeParameter(type) : void 0, + getDefaultFromTypeParameter: (type) => type && type.flags & 524288 /* TypeParameter */ ? getDefaultFromTypeParameter(type) : void 0, resolveName(name, location, meaning, excludeGlobals) { return resolveName( location, @@ -51570,10 +51662,10 @@ function createTypeChecker(host) { var nonInferrableAnyType = createIntrinsicType(1 /* Any */, "any", 65536 /* ContainsWideningType */, "non-inferrable"); var intrinsicMarkerType = createIntrinsicType(1 /* Any */, "intrinsic"); var unknownType = createIntrinsicType(2 /* Unknown */, "unknown"); - var undefinedType = createIntrinsicType(32768 /* Undefined */, "undefined"); - var undefinedWideningType = strictNullChecks ? undefinedType : createIntrinsicType(32768 /* Undefined */, "undefined", 65536 /* ContainsWideningType */, "widening"); + var undefinedType = createIntrinsicType(4 /* Undefined */, "undefined"); + var undefinedWideningType = strictNullChecks ? undefinedType : createIntrinsicType(4 /* Undefined */, "undefined", 65536 /* ContainsWideningType */, "widening"); var missingType = createIntrinsicType( - 32768 /* Undefined */, + 4 /* Undefined */, "undefined", /*objectFlags*/ void 0, @@ -51581,33 +51673,33 @@ function createTypeChecker(host) { ); var undefinedOrMissingType = exactOptionalPropertyTypes ? missingType : undefinedType; var optionalType = createIntrinsicType( - 32768 /* Undefined */, + 4 /* Undefined */, "undefined", /*objectFlags*/ void 0, "optional" ); - var nullType = createIntrinsicType(65536 /* Null */, "null"); - var nullWideningType = strictNullChecks ? nullType : createIntrinsicType(65536 /* Null */, "null", 65536 /* ContainsWideningType */, "widening"); - var stringType = createIntrinsicType(4 /* String */, "string"); - var numberType = createIntrinsicType(8 /* Number */, "number"); - var bigintType = createIntrinsicType(64 /* BigInt */, "bigint"); + var nullType = createIntrinsicType(8 /* Null */, "null"); + var nullWideningType = strictNullChecks ? nullType : createIntrinsicType(8 /* Null */, "null", 65536 /* ContainsWideningType */, "widening"); + var stringType = createIntrinsicType(32 /* String */, "string"); + var numberType = createIntrinsicType(64 /* Number */, "number"); + var bigintType = createIntrinsicType(128 /* BigInt */, "bigint"); var falseType = createIntrinsicType( - 512 /* BooleanLiteral */, + 8192 /* BooleanLiteral */, "false", /*objectFlags*/ void 0, "fresh" ); - var regularFalseType = createIntrinsicType(512 /* BooleanLiteral */, "false"); + var regularFalseType = createIntrinsicType(8192 /* BooleanLiteral */, "false"); var trueType = createIntrinsicType( - 512 /* BooleanLiteral */, + 8192 /* BooleanLiteral */, "true", /*objectFlags*/ void 0, "fresh" ); - var regularTrueType = createIntrinsicType(512 /* BooleanLiteral */, "true"); + var regularTrueType = createIntrinsicType(8192 /* BooleanLiteral */, "true"); trueType.regularType = regularTrueType; trueType.freshType = trueType; regularTrueType.regularType = regularTrueType; @@ -51617,40 +51709,40 @@ function createTypeChecker(host) { regularFalseType.regularType = regularFalseType; regularFalseType.freshType = falseType; var booleanType = getUnionType([regularFalseType, regularTrueType]); - var esSymbolType = createIntrinsicType(4096 /* ESSymbol */, "symbol"); - var voidType = createIntrinsicType(16384 /* Void */, "void"); - var neverType = createIntrinsicType(131072 /* Never */, "never"); - var silentNeverType = createIntrinsicType(131072 /* Never */, "never", 262144 /* NonInferrableType */, "silent"); + var esSymbolType = createIntrinsicType(512 /* ESSymbol */, "symbol"); + var voidType = createIntrinsicType(16 /* Void */, "void"); + var neverType = createIntrinsicType(262144 /* Never */, "never"); + var silentNeverType = createIntrinsicType(262144 /* Never */, "never", 262144 /* NonInferrableType */, "silent"); var implicitNeverType = createIntrinsicType( - 131072 /* Never */, + 262144 /* Never */, "never", /*objectFlags*/ void 0, "implicit" ); var unreachableNeverType = createIntrinsicType( - 131072 /* Never */, + 262144 /* Never */, "never", /*objectFlags*/ void 0, "unreachable" ); - var nonPrimitiveType = createIntrinsicType(67108864 /* NonPrimitive */, "object"); + var nonPrimitiveType = createIntrinsicType(131072 /* NonPrimitive */, "object"); var stringOrNumberType = getUnionType([stringType, numberType]); var stringNumberSymbolType = getUnionType([stringType, numberType, esSymbolType]); var numberOrBigIntType = getUnionType([numberType, bigintType]); var templateConstraintType = getUnionType([stringType, numberType, booleanType, bigintType, nullType, undefinedType]); var numericStringType = getTemplateLiteralType(["", ""], [numberType]); - var restrictiveMapper = makeFunctionTypeMapper((t) => t.flags & 262144 /* TypeParameter */ ? getRestrictiveTypeParameter(t) : t, () => "(restrictive mapper)"); - var permissiveMapper = makeFunctionTypeMapper((t) => t.flags & 262144 /* TypeParameter */ ? wildcardType : t, () => "(permissive mapper)"); + var restrictiveMapper = makeFunctionTypeMapper((t) => t.flags & 524288 /* TypeParameter */ ? getRestrictiveTypeParameter(t) : t, () => "(restrictive mapper)"); + var permissiveMapper = makeFunctionTypeMapper((t) => t.flags & 524288 /* TypeParameter */ ? wildcardType : t, () => "(permissive mapper)"); var uniqueLiteralType = createIntrinsicType( - 131072 /* Never */, + 262144 /* Never */, "never", /*objectFlags*/ void 0, "unique literal" ); - var uniqueLiteralMapper = makeFunctionTypeMapper((t) => t.flags & 262144 /* TypeParameter */ ? uniqueLiteralType : t, () => "(unique literal mapper)"); + var uniqueLiteralMapper = makeFunctionTypeMapper((t) => t.flags & 524288 /* TypeParameter */ ? uniqueLiteralType : t, () => "(unique literal mapper)"); var outofbandVarianceMarkerHandler; var reportUnreliableMapper = makeFunctionTypeMapper((t) => { if (outofbandVarianceMarkerHandler && (t === markerSuperType || t === markerSubType || t === markerOtherType)) { @@ -51839,7 +51931,6 @@ function createTypeChecker(host) { } }; var anyIterationTypes = createIterationTypes(anyType, anyType, anyType); - var silentNeverIterationTypes = createIterationTypes(silentNeverType, silentNeverType, silentNeverType); var asyncIterationTypesResolver = { iterableCacheKey: "iterationTypesOfAsyncIterable", iteratorCacheKey: "iterationTypesOfAsyncIterator", @@ -52362,7 +52453,9 @@ function createTypeChecker(host) { const targetSymbol = target.get(id); const merged = targetSymbol ? mergeSymbol(targetSymbol, sourceSymbol, unidirectional) : getMergedSymbol(sourceSymbol); if (mergedParent && targetSymbol) { - merged.parent = mergedParent; + if (merged.flags & 33554432 /* Transient */) { + merged.parent = mergedParent; + } } target.set(id, merged); }); @@ -52928,9 +53021,9 @@ function createTypeChecker(host) { const container = findAncestor(node.parent, (n) => isComputedPropertyName(n) || isPropertySignature(n) ? false : isTypeLiteralNode(n) || "quit"); if (container && container.members.length === 1) { const type = getDeclaredTypeOfSymbol(symbol); - return !!(type.flags & 1048576 /* Union */) && allTypesAssignableToKind( + return !!(type.flags & 134217728 /* Union */) && allTypesAssignableToKind( type, - 384 /* StringOrNumberLiteral */, + 3072 /* StringOrNumberLiteral */, /*strict*/ true ); @@ -53142,6 +53235,15 @@ function createTypeChecker(host) { if (usageMode === 99 /* ESNext */ && targetMode === 99 /* ESNext */) { return false; } + if (!targetMode && file.isDeclarationFile) { + const redirect = host.getRedirectFromSourceFile(file.path) || host.getRedirectFromOutput(file.path); + if (redirect) { + const targetModuleKind = host.getEmitModuleFormatOfFile(file); + if (usageMode === 99 /* ESNext */ && 5 /* ES2015 */ <= targetModuleKind && targetModuleKind <= 99 /* ESNext */) { + return false; + } + } + } } if (!allowSyntheticDefaultImports) { return false; @@ -53993,9 +54095,9 @@ function createTypeChecker(host) { } } } - function resolveExternalModuleName(location, moduleReferenceExpression, ignoreErrors) { + function resolveExternalModuleName(location, moduleReferenceExpression, ignoreErrors, errorMessage) { const isClassic = getEmitModuleResolutionKind(compilerOptions) === 1 /* Classic */; - const errorMessage = isClassic ? Diagnostics.Cannot_find_module_0_Did_you_mean_to_set_the_moduleResolution_option_to_nodenext_or_to_add_aliases_to_the_paths_option : Diagnostics.Cannot_find_module_0_or_its_corresponding_type_declarations; + errorMessage ?? (errorMessage = getCannotResolveModuleNameErrorForSpecificModule(moduleReferenceExpression) ?? (isClassic ? Diagnostics.Cannot_find_module_0_Did_you_mean_to_set_the_moduleResolution_option_to_nodenext_or_to_add_aliases_to_the_paths_option : Diagnostics.Cannot_find_module_0_or_its_corresponding_type_declarations)); return resolveExternalModuleNameWorker(location, moduleReferenceExpression, ignoreErrors ? void 0 : errorMessage, ignoreErrors); } function resolveExternalModuleNameWorker(location, moduleReferenceExpression, moduleNotFoundError, ignoreErrors = false, isForAugmentation = false) { @@ -54017,11 +54119,7 @@ function createTypeChecker(host) { return ambientModule; } const currentSourceFile = getSourceFileOfNode(location); - const contextSpecifier = isStringLiteralLike(location) ? location : ((_a = isModuleDeclaration(location) ? location : location.parent && isModuleDeclaration(location.parent) && location.parent.name === location ? location.parent : void 0) == null ? void 0 : _a.name) || ((_b = isLiteralImportTypeNode(location) ? location : void 0) == null ? void 0 : _b.argument.literal) || (isVariableDeclaration(location) && location.initializer && isRequireCall( - location.initializer, - /*requireStringLiteralLikeArgument*/ - true - ) ? location.initializer.arguments[0] : void 0) || ((_c = findAncestor(location, isImportCall)) == null ? void 0 : _c.arguments[0]) || ((_d = findAncestor(location, or(isImportDeclaration, isJSDocImportTag, isExportDeclaration))) == null ? void 0 : _d.moduleSpecifier) || ((_e = findAncestor(location, isExternalModuleImportEqualsDeclaration)) == null ? void 0 : _e.moduleReference.expression); + const contextSpecifier = isStringLiteralLike(location) ? location : ((_a = isModuleDeclaration(location) ? location : location.parent && isModuleDeclaration(location.parent) && location.parent.name === location ? location.parent : void 0) == null ? void 0 : _a.name) || ((_b = isLiteralImportTypeNode(location) ? location : void 0) == null ? void 0 : _b.argument.literal) || isVariableDeclarationInitializedToBareOrAccessedRequire(location) && getModuleSpecifierOfBareOrAccessedRequire(location) || ((_c = findAncestor(location, isImportCall)) == null ? void 0 : _c.arguments[0]) || ((_d = findAncestor(location, or(isImportDeclaration, isJSDocImportTag, isExportDeclaration))) == null ? void 0 : _d.moduleSpecifier) || ((_e = findAncestor(location, isExternalModuleImportEqualsDeclaration)) == null ? void 0 : _e.moduleReference.expression); const mode = contextSpecifier && isStringLiteralLike(contextSpecifier) ? host.getModeForUsageLocation(currentSourceFile, contextSpecifier) : host.getDefaultResolutionModeForFile(currentSourceFile); const moduleResolutionKind = getEmitModuleResolutionKind(compilerOptions); const resolvedModule = (_f = host.getResolvedModule(currentSourceFile, moduleReference, mode)) == null ? void 0 : _f.resolvedModule; @@ -54285,7 +54383,7 @@ function createTypeChecker(host) { /*skipObjectFunctionPropertyAugment*/ true ) || isEsmCjsRef) { - const moduleType = type.flags & 3670016 /* StructuredType */ ? getTypeWithSyntheticDefaultImportType(type, symbol, moduleSymbol, reference) : createDefaultPropertyWrapperForModule(symbol, symbol.parent); + const moduleType = type.flags & 403701760 /* StructuredType */ ? getTypeWithSyntheticDefaultImportType(type, symbol, moduleSymbol, reference) : createDefaultPropertyWrapperForModule(symbol, symbol.parent); return cloneTypeAsModuleType(symbol, moduleType, referenceParent); } } @@ -54363,7 +54461,7 @@ function createTypeChecker(host) { return shouldTreatPropertiesOfExternalModuleAsExports(type) ? getPropertyOfType(type, memberName) : void 0; } function shouldTreatPropertiesOfExternalModuleAsExports(resolvedExternalModuleType) { - return !(resolvedExternalModuleType.flags & 402784252 /* Primitive */ || getObjectFlags(resolvedExternalModuleType) & 1 /* Class */ || // `isArrayOrTupleLikeType` is too expensive to use in this auto-imports hot path + return !(resolvedExternalModuleType.flags & 12713980 /* Primitive */ || getObjectFlags(resolvedExternalModuleType) & 1 /* Class */ || // `isArrayOrTupleLikeType` is too expensive to use in this auto-imports hot path isArrayType(resolvedExternalModuleType) || isTupleType(resolvedExternalModuleType)); } function getExportsOfSymbol(symbol) { @@ -54568,7 +54666,7 @@ function createTypeChecker(host) { )) { return append(concatenate(concatenate([container2], additionalContainers), reexportContainers), objectLiteralContainer); } - const firstVariableMatch = !(container2.flags & getQualifiedLeftMeaning(meaning)) && container2.flags & 788968 /* Type */ && getDeclaredTypeOfSymbol(container2).flags & 524288 /* Object */ && meaning === 111551 /* Value */ ? forEachSymbolTableInScope(enclosingDeclaration, (t) => { + const firstVariableMatch = !(container2.flags & getQualifiedLeftMeaning(meaning)) && container2.flags & 788968 /* Type */ && getDeclaredTypeOfSymbol(container2).flags & 1048576 /* Object */ && meaning === 111551 /* Value */ ? forEachSymbolTableInScope(enclosingDeclaration, (t) => { return forEachEntry(t, (s) => { if (s.flags & getQualifiedLeftMeaning(meaning) && getTypeOfSymbol(s) === getDeclaredTypeOfSymbol(container2)) { return s; @@ -54659,7 +54757,7 @@ function createTypeChecker(host) { seenIntrinsicNames.add(key); } function createObjectType(objectFlags, symbol) { - const type = createTypeWithSymbol(524288 /* Object */, symbol); + const type = createTypeWithSymbol(1048576 /* Object */, symbol); type.objectFlags = objectFlags; type.members = void 0; type.properties = void 0; @@ -54669,28 +54767,64 @@ function createTypeChecker(host) { return type; } function createTypeofType() { - return getUnionType(arrayFrom(typeofNEFacts.keys(), getStringLiteralType)); + return getUnionType(map(stableTypeOrdering ? [...typeofNEFacts.keys()].sort() : arrayFrom(typeofNEFacts.keys()), getStringLiteralType)); } function createTypeParameter(symbol) { - return createTypeWithSymbol(262144 /* TypeParameter */, symbol); + return createTypeWithSymbol(524288 /* TypeParameter */, symbol); } function isReservedMemberName(name) { return name.charCodeAt(0) === 95 /* _ */ && name.charCodeAt(1) === 95 /* _ */ && name.charCodeAt(2) !== 95 /* _ */ && name.charCodeAt(2) !== 64 /* at */ && name.charCodeAt(2) !== 35 /* hash */; } - function getNamedMembers(members) { - let result; + function getNamedMembers(members, container) { + if (!stableTypeOrdering) { + let result; + members.forEach((symbol, id) => { + if (isNamedMember(symbol, id)) { + (result ?? (result = [])).push(symbol); + } + }); + return result ?? emptyArray; + } + if (members.size === 0) { + return emptyArray; + } + let contained; + if (container && container.flags & (32 /* Class */ | 64 /* Interface */)) { + members.forEach((symbol, id) => { + if (isNamedMember(symbol, id) && isDeclarationContainedBy(symbol, container)) { + contained = append(contained, symbol); + } + }); + } + let nonContained; members.forEach((symbol, id) => { - if (isNamedMember(symbol, id)) { - (result || (result = [])).push(symbol); + if (isNamedMember(symbol, id) && (!container || !(container.flags & (32 /* Class */ | 64 /* Interface */)) || !isDeclarationContainedBy(symbol, container))) { + nonContained = append(nonContained, symbol); } }); - return result || emptyArray; + contained == null ? void 0 : contained.sort(compareSymbols); + nonContained == null ? void 0 : nonContained.sort(compareSymbols); + return concatenate(contained, nonContained) ?? emptyArray; + function isDeclarationContainedBy(symbol, container2) { + const declaration = symbol.valueDeclaration; + if (declaration && container2.declarations) { + for (const d of container2.declarations) { + if (containedBy(declaration, d)) { + return true; + } + } + } + return false; + function containedBy(a, b) { + return b.pos <= a.pos && b.end >= a.end; + } + } } function isNamedMember(member, escapedName) { return !isReservedMemberName(escapedName) && symbolIsValue(member); } - function getNamedOrIndexSignatureMembers(members) { - const result = getNamedMembers(members); + function getNamedOrIndexSignatureMembers(members, symbol) { + const result = getNamedMembers(members, symbol); const index = getIndexSymbolFromSymbolTable(members); return index ? concatenate(result, [index]) : result; } @@ -54701,7 +54835,7 @@ function createTypeChecker(host) { resolved.callSignatures = callSignatures; resolved.constructSignatures = constructSignatures; resolved.indexInfos = indexInfos; - if (members !== emptySymbols) resolved.properties = getNamedMembers(members); + if (members !== emptySymbols) resolved.properties = getNamedMembers(members, type.symbol); return resolved; } function createAnonymousType(symbol, members, callSignatures, constructSignatures, indexInfos) { @@ -55268,7 +55402,7 @@ function createTypeChecker(host) { return flags & 848330095 /* NodeBuilderFlagsMask */; } function isClassInstanceSide(type) { - return !!type.symbol && !!(type.symbol.flags & 32 /* Class */) && (type === getDeclaredTypeOfClassOrInterface(type.symbol) || !!(type.flags & 524288 /* Object */) && !!(getObjectFlags(type) & 16777216 /* IsClassInstanceClone */)); + return !!type.symbol && !!(type.symbol.flags & 32 /* Class */) && (type === getDeclaredTypeOfClassOrInterface(type.symbol) || !!(type.flags & 1048576 /* Object */) && !!(getObjectFlags(type) & 16777216 /* IsClassInstanceClone */)); } function getTypeFromTypeNodeWithoutContext(node) { return getTypeFromTypeNode(node); @@ -55417,7 +55551,7 @@ function createTypeChecker(host) { if (name.includes("/node_modules/")) { context.encounteredError = true; if (context.tracker.reportLikelyUnsafeImportRequiredError) { - context.tracker.reportLikelyUnsafeImportRequiredError(name); + context.tracker.reportLikelyUnsafeImportRequiredError(name, nodeSymbol ? unescapeLeadingUnderscores(nodeSymbol.escapedName) : void 0); } } if (name !== originalName) { @@ -55625,7 +55759,7 @@ function createTypeChecker(host) { if (name && isComputedPropertyName(name)) return name; } const nameType = getSymbolLinks(symbol).nameType; - if (nameType && nameType.flags & (1024 /* EnumLiteral */ | 8192 /* UniqueESSymbol */)) { + if (nameType && nameType.flags & (32768 /* EnumLiteral */ | 16384 /* UniqueESSymbol */)) { context.enclosingDeclaration = nameType.symbol.valueDeclaration; return factory.createComputedPropertyName(symbolToExpression(nameType.symbol, context, meaning)); } @@ -55702,7 +55836,7 @@ function createTypeChecker(host) { return statements; } function withContext2(enclosingDeclaration, flags, internalFlags, tracker, maximumLength, verbosityLevel, cb, out) { - const moduleResolverHost = (tracker == null ? void 0 : tracker.trackSymbol) ? tracker.moduleResolverHost : (internalFlags || 0 /* None */) & 4 /* DoNotIncludeSymbolChain */ ? createBasicNodeBuilderModuleSpecifierResolutionHost(host) : void 0; + const moduleResolverHost = (tracker == null ? void 0 : tracker.moduleResolverHost) ?? createBasicNodeBuilderModuleSpecifierResolutionHost(host); flags = flags || 0 /* None */; const maxTruncationLength = maximumLength || (flags & 1 /* NoTruncation */ ? noTruncationMaximumTruncationLength : defaultMaximumTruncationLength); const context = { @@ -55847,23 +55981,23 @@ function createTypeChecker(host) { if (type.flags & 2 /* Unknown */) { return factory.createKeywordTypeNode(159 /* UnknownKeyword */); } - if (type.flags & 4 /* String */) { + if (type.flags & 32 /* String */) { context.approximateLength += 6; return factory.createKeywordTypeNode(154 /* StringKeyword */); } - if (type.flags & 8 /* Number */) { + if (type.flags & 64 /* Number */) { context.approximateLength += 6; return factory.createKeywordTypeNode(150 /* NumberKeyword */); } - if (type.flags & 64 /* BigInt */) { + if (type.flags & 128 /* BigInt */) { context.approximateLength += 6; return factory.createKeywordTypeNode(163 /* BigIntKeyword */); } - if (type.flags & 16 /* Boolean */ && !type.aliasSymbol) { + if (type.flags & 256 /* Boolean */ && !type.aliasSymbol) { context.approximateLength += 7; return factory.createKeywordTypeNode(136 /* BooleanKeyword */); } - if (type.flags & 1056 /* EnumLike */) { + if (type.flags & 98304 /* EnumLike */) { if (type.symbol.flags & 8 /* EnumMember */) { const parentSymbol = getParentOfSymbol(type.symbol); const parentName = symbolToTypeNode(parentSymbol, context, 788968 /* Type */); @@ -55871,7 +56005,7 @@ function createTypeChecker(host) { return parentName; } const memberName = symbolName(type.symbol); - if (isIdentifierText(memberName, 1 /* ES5 */)) { + if (isIdentifierText(memberName, 99 /* ESNext */)) { return appendReferenceToType( parentName, factory.createTypeReferenceNode( @@ -55896,24 +56030,24 @@ function createTypeChecker(host) { expandingEnum = true; } } - if (type.flags & 128 /* StringLiteral */) { + if (type.flags & 1024 /* StringLiteral */) { context.approximateLength += type.value.length + 2; return factory.createLiteralTypeNode(setEmitFlags(factory.createStringLiteral(type.value, !!(context.flags & 268435456 /* UseSingleQuotesForStringLiteralType */)), 16777216 /* NoAsciiEscaping */)); } - if (type.flags & 256 /* NumberLiteral */) { + if (type.flags & 2048 /* NumberLiteral */) { const value = type.value; context.approximateLength += ("" + value).length; return factory.createLiteralTypeNode(value < 0 ? factory.createPrefixUnaryExpression(41 /* MinusToken */, factory.createNumericLiteral(-value)) : factory.createNumericLiteral(value)); } - if (type.flags & 2048 /* BigIntLiteral */) { + if (type.flags & 4096 /* BigIntLiteral */) { context.approximateLength += pseudoBigIntToString(type.value).length + 1; return factory.createLiteralTypeNode(factory.createBigIntLiteral(type.value)); } - if (type.flags & 512 /* BooleanLiteral */) { + if (type.flags & 8192 /* BooleanLiteral */) { context.approximateLength += type.intrinsicName.length; return factory.createLiteralTypeNode(type.intrinsicName === "true" ? factory.createTrue() : factory.createFalse()); } - if (type.flags & 8192 /* UniqueESSymbol */) { + if (type.flags & 16384 /* UniqueESSymbol */) { if (!(context.flags & 1048576 /* AllowUniqueESSymbolType */)) { if (isValueSymbolAccessible(type.symbol, context.enclosingDeclaration)) { context.approximateLength += 6; @@ -55926,27 +56060,27 @@ function createTypeChecker(host) { context.approximateLength += 13; return factory.createTypeOperatorNode(158 /* UniqueKeyword */, factory.createKeywordTypeNode(155 /* SymbolKeyword */)); } - if (type.flags & 16384 /* Void */) { + if (type.flags & 16 /* Void */) { context.approximateLength += 4; return factory.createKeywordTypeNode(116 /* VoidKeyword */); } - if (type.flags & 32768 /* Undefined */) { + if (type.flags & 4 /* Undefined */) { context.approximateLength += 9; return factory.createKeywordTypeNode(157 /* UndefinedKeyword */); } - if (type.flags & 65536 /* Null */) { + if (type.flags & 8 /* Null */) { context.approximateLength += 4; return factory.createLiteralTypeNode(factory.createNull()); } - if (type.flags & 131072 /* Never */) { + if (type.flags & 262144 /* Never */) { context.approximateLength += 5; return factory.createKeywordTypeNode(146 /* NeverKeyword */); } - if (type.flags & 4096 /* ESSymbol */) { + if (type.flags & 512 /* ESSymbol */) { context.approximateLength += 6; return factory.createKeywordTypeNode(155 /* SymbolKeyword */); } - if (type.flags & 67108864 /* NonPrimitive */) { + if (type.flags & 131072 /* NonPrimitive */) { context.approximateLength += 6; return factory.createKeywordTypeNode(151 /* ObjectKeyword */); } @@ -55978,7 +56112,7 @@ function createTypeChecker(host) { } const objectFlags = getObjectFlags(type); if (objectFlags & 4 /* Reference */) { - Debug.assert(!!(type.flags & 524288 /* Object */)); + Debug.assert(!!(type.flags & 1048576 /* Object */)); if (shouldExpandType(type, context)) { context.depth += 1; return createAnonymousTypeNode( @@ -55991,8 +56125,8 @@ function createTypeChecker(host) { } return type.node ? visitAndTransformType(type, typeReferenceToTypeNode) : typeReferenceToTypeNode(type); } - if (type.flags & 262144 /* TypeParameter */ || objectFlags & 3 /* ClassOrInterface */) { - if (type.flags & 262144 /* TypeParameter */ && contains(context.inferTypeParameters, type)) { + if (type.flags & 524288 /* TypeParameter */ || objectFlags & 3 /* ClassOrInterface */) { + if (type.flags & 524288 /* TypeParameter */ && contains(context.inferTypeParameters, type)) { context.approximateLength += symbolName(type.symbol).length + 6; let constraintNode; const constraint = getConstraintOfTypeParameter(type); @@ -56009,7 +56143,7 @@ function createTypeChecker(host) { } return factory.createInferTypeNode(typeParameterToDeclarationWithConstraint(type, context, constraintNode)); } - if (context.flags & 4 /* GenerateNamesForShadowedTypeParams */ && type.flags & 262144 /* TypeParameter */) { + if (context.flags & 4 /* GenerateNamesForShadowedTypeParams */ && type.flags & 524288 /* TypeParameter */) { const name2 = typeParameterToName(type, context); context.approximateLength += idText(name2).length; return factory.createTypeReferenceNode( @@ -56038,11 +56172,11 @@ function createTypeChecker(host) { void 0 ); } - if (type.flags & 1048576 /* Union */ && type.origin) { + if (type.flags & 134217728 /* Union */ && type.origin) { type = type.origin; } - if (type.flags & (1048576 /* Union */ | 2097152 /* Intersection */)) { - const types = type.flags & 1048576 /* Union */ ? formatUnionTypes(type.types, expandingEnum) : type.types; + if (type.flags & (134217728 /* Union */ | 268435456 /* Intersection */)) { + const types = type.flags & 134217728 /* Union */ ? formatUnionTypes(type.types, expandingEnum) : type.types; if (length(types) === 1) { return typeToTypeNodeHelper(types[0], context); } @@ -56053,7 +56187,7 @@ function createTypeChecker(host) { true ); if (typeNodes && typeNodes.length > 0) { - return type.flags & 1048576 /* Union */ ? factory.createUnionTypeNode(typeNodes) : factory.createIntersectionTypeNode(typeNodes); + return type.flags & 134217728 /* Union */ ? factory.createUnionTypeNode(typeNodes) : factory.createIntersectionTypeNode(typeNodes); } else { if (!context.encounteredError && !(context.flags & 262144 /* AllowEmptyUnionOrIntersection */)) { context.encounteredError = true; @@ -56062,16 +56196,16 @@ function createTypeChecker(host) { } } if (objectFlags & (16 /* Anonymous */ | 32 /* Mapped */)) { - Debug.assert(!!(type.flags & 524288 /* Object */)); + Debug.assert(!!(type.flags & 1048576 /* Object */)); return createAnonymousTypeNode(type); } - if (type.flags & 4194304 /* Index */) { + if (type.flags & 2097152 /* Index */) { const indexedType = type.type; context.approximateLength += 6; const indexTypeNode = typeToTypeNodeHelper(indexedType, context); return factory.createTypeOperatorNode(143 /* KeyOfKeyword */, indexTypeNode); } - if (type.flags & 134217728 /* TemplateLiteral */) { + if (type.flags & 4194304 /* TemplateLiteral */) { const texts = type.texts; const types = type.types; const templateHead = factory.createTemplateHead(texts[0]); @@ -56084,20 +56218,20 @@ function createTypeChecker(host) { context.approximateLength += 2; return factory.createTemplateLiteralType(templateHead, templateSpans); } - if (type.flags & 268435456 /* StringMapping */) { + if (type.flags & 8388608 /* StringMapping */) { const typeNode = typeToTypeNodeHelper(type.type, context); return symbolToTypeNode(type.symbol, context, 788968 /* Type */, [typeNode]); } - if (type.flags & 8388608 /* IndexedAccess */) { + if (type.flags & 33554432 /* IndexedAccess */) { const objectTypeNode = typeToTypeNodeHelper(type.objectType, context); const indexTypeNode = typeToTypeNodeHelper(type.indexType, context); context.approximateLength += 2; return factory.createIndexedAccessTypeNode(objectTypeNode, indexTypeNode); } - if (type.flags & 16777216 /* Conditional */) { + if (type.flags & 67108864 /* Conditional */) { return visitAndTransformType(type, (type2) => conditionalTypeToTypeNode(type2)); } - if (type.flags & 33554432 /* Substitution */) { + if (type.flags & 16777216 /* Substitution */) { const typeNode = typeToTypeNodeHelper(type.baseType, context); const noInferSymbol = isNoInferType(type) && getGlobalTypeSymbol( "NoInfer", @@ -56110,7 +56244,7 @@ function createTypeChecker(host) { function conditionalTypeToTypeNode(type2) { const checkTypeNode = typeToTypeNodeHelper(type2.checkType, context); context.approximateLength += 15; - if (context.flags & 4 /* GenerateNamesForShadowedTypeParams */ && type2.root.isDistributive && !(type2.checkType.flags & 262144 /* TypeParameter */)) { + if (context.flags & 4 /* GenerateNamesForShadowedTypeParams */ && type2.root.isDistributive && !(type2.checkType.flags & 524288 /* TypeParameter */)) { const newParam = createTypeParameter(createSymbol(262144 /* TypeParameter */, "T")); const name = typeParameterToName(newParam, context); const newTypeVariable = factory.createTypeReferenceNode(name); @@ -56148,7 +56282,7 @@ function createTypeChecker(host) { } function typeToTypeNodeOrCircularityElision(type2) { var _a2, _b2, _c; - if (type2.flags & 1048576 /* Union */) { + if (type2.flags & 134217728 /* Union */) { if ((_a2 = context.visitedTypes) == null ? void 0 : _a2.has(getTypeId(type2))) { if (!(context.flags & 131072 /* AllowAnonymousIdentifier */)) { context.encounteredError = true; @@ -56168,14 +56302,14 @@ function createTypeChecker(host) { } function createMappedTypeNodeFromType(type2) { var _a2; - Debug.assert(!!(type2.flags & 524288 /* Object */)); + Debug.assert(!!(type2.flags & 1048576 /* Object */)); const readonlyToken = type2.declaration.readonlyToken ? factory.createToken(type2.declaration.readonlyToken.kind) : void 0; const questionToken = type2.declaration.questionToken ? factory.createToken(type2.declaration.questionToken.kind) : void 0; let appropriateConstraintTypeNode; let newTypeVariable; let templateType = getTemplateTypeFromMappedType(type2); const typeParameter = getTypeParameterFromMappedType(type2); - const needsModifierPreservingWrapper = !isMappedTypeWithKeyofConstraintDeclaration(type2) && !(getModifiersTypeFromMappedType(type2).flags & 2 /* Unknown */) && context.flags & 4 /* GenerateNamesForShadowedTypeParams */ && !(getConstraintTypeFromMappedType(type2).flags & 262144 /* TypeParameter */ && ((_a2 = getConstraintOfTypeParameter(getConstraintTypeFromMappedType(type2))) == null ? void 0 : _a2.flags) & 4194304 /* Index */); + const needsModifierPreservingWrapper = !isMappedTypeWithKeyofConstraintDeclaration(type2) && !(getModifiersTypeFromMappedType(type2).flags & 2 /* Unknown */) && context.flags & 4 /* GenerateNamesForShadowedTypeParams */ && !(getConstraintTypeFromMappedType(type2).flags & 524288 /* TypeParameter */ && ((_a2 = getConstraintOfTypeParameter(getConstraintTypeFromMappedType(type2))) == null ? void 0 : _a2.flags) & 2097152 /* Index */); if (isMappedTypeWithKeyofConstraintDeclaration(type2)) { if (isHomomorphicMappedTypeWithNonHomomorphicInstantiation(type2) && context.flags & 4 /* GenerateNamesForShadowedTypeParams */) { const newConstraintParam = createTypeParameter(createSymbol(262144 /* TypeParameter */, "T")); @@ -56311,7 +56445,7 @@ function createTypeChecker(host) { var _a2, _b2, _c; const typeId = type2.id; const isConstructorObject = getObjectFlags(type2) & 16 /* Anonymous */ && type2.symbol && type2.symbol.flags & 32 /* Class */; - const id = getObjectFlags(type2) & 4 /* Reference */ && type2.node ? "N" + getNodeId(type2.node) : type2.flags & 16777216 /* Conditional */ ? "N" + getNodeId(type2.root.node) : type2.symbol ? (isConstructorObject ? "+" : "") + getSymbolId(type2.symbol) : void 0; + const id = getObjectFlags(type2) & 4 /* Reference */ && type2.node ? "N" + getNodeId(type2.node) : type2.flags & 67108864 /* Conditional */ ? "N" + getNodeId(type2.root.node) : type2.symbol ? (isConstructorObject ? "+" : "") + getSymbolId(type2.symbol) : void 0; if (!context.visitedTypes) { context.visitedTypes = /* @__PURE__ */ new Set(); } @@ -56679,6 +56813,9 @@ function createTypeChecker(host) { if (getDeclarationModifierFlagsFromSymbol(propertySymbol) & (2 /* Private */ | 4 /* Protected */) && context.tracker.reportPrivateInBaseOfClassExpression) { context.tracker.reportPrivateInBaseOfClassExpression(unescapeLeadingUnderscores(propertySymbol.escapedName)); } + if (isPrivateIdentifierSymbol(propertySymbol) && context.tracker.reportPrivateInBaseOfClassExpression) { + context.tracker.reportPrivateInBaseOfClassExpression(idText(propertySymbol.valueDeclaration.name)); + } } if (checkTruncationLength(context) && i + 2 < properties.length - 1) { context.out.truncated = true; @@ -56838,7 +56975,7 @@ function createTypeChecker(host) { } const optionalToken = propertySymbol.flags & 16777216 /* Optional */ ? factory.createToken(58 /* QuestionToken */) : void 0; if (propertySymbol.flags & (16 /* Function */ | 8192 /* Method */) && !getPropertiesOfObjectType(propertyType).length && !isReadonlySymbol(propertySymbol)) { - const signatures = getSignaturesOfType(filterType(propertyType, (t) => !(t.flags & 32768 /* Undefined */)), 0 /* Call */); + const signatures = getSignaturesOfType(filterType(propertyType, (t) => !(t.flags & 4 /* Undefined */)), 0 /* Call */); for (const signature of signatures) { const methodDeclaration = signatureToSignatureDeclarationHelper(signature, 174 /* MethodSignature */, context, { name: propertyName, questionToken: optionalToken }); typeElements.push(preserveCommentsOn(methodDeclaration, signature.declaration || propertySymbol.valueDeclaration)); @@ -57127,8 +57264,8 @@ function createTypeChecker(host) { reportInaccessibleUniqueSymbolError() { markError(() => oldTracker.reportInaccessibleUniqueSymbolError()); }, - reportLikelyUnsafeImportRequiredError(specifier) { - markError(() => oldTracker.reportLikelyUnsafeImportRequiredError(specifier)); + reportLikelyUnsafeImportRequiredError(specifier, symbolName2) { + markError(() => oldTracker.reportLikelyUnsafeImportRequiredError(specifier, symbolName2)); }, reportNonSerializableProperty(name) { markError(() => oldTracker.reportNonSerializableProperty(name)); @@ -57654,7 +57791,7 @@ function createTypeChecker(host) { if (!attributes) { context.encounteredError = true; if (context.tracker.reportLikelyUnsafeImportRequiredError) { - context.tracker.reportLikelyUnsafeImportRequiredError(oldSpecifier); + context.tracker.reportLikelyUnsafeImportRequiredError(oldSpecifier, unescapeLeadingUnderscores(symbol.escapedName)); } } } @@ -57888,11 +58025,11 @@ function createTypeChecker(host) { } if (isComputedPropertyName(name)) { const type = checkExpression(name.expression); - return !!(type.flags & 402653316 /* StringLike */); + return !!(type.flags & 12583968 /* StringLike */); } if (isElementAccessExpression(name)) { const type = checkExpression(name.argumentExpression); - return !!(type.flags & 402653316 /* StringLike */); + return !!(type.flags & 12583968 /* StringLike */); } return isStringLiteral(name); } @@ -57922,7 +58059,7 @@ function createTypeChecker(host) { function getPropertyNameNodeForSymbolFromNameType(symbol, context, singleQuote, stringNamed, isMethod) { const nameType = getSymbolLinks(symbol).nameType; if (nameType) { - if (nameType.flags & 384 /* StringOrNumberLiteral */) { + if (nameType.flags & 3072 /* StringOrNumberLiteral */) { const name = "" + nameType.value; if (!isIdentifierText(name, getEmitScriptTarget(compilerOptions)) && (stringNamed || !isNumericLiteralName(name))) { return factory.createStringLiteral(name, !!singleQuote); @@ -57932,7 +58069,7 @@ function createTypeChecker(host) { } return createPropertyNameNodeForIdentifierOrLiteral(name, getEmitScriptTarget(compilerOptions), singleQuote, stringNamed, isMethod); } - if (nameType.flags & 8192 /* UniqueESSymbol */) { + if (nameType.flags & 16384 /* UniqueESSymbol */) { return factory.createComputedPropertyName(symbolToExpression(nameType.symbol, context, 111551 /* Value */)); } } @@ -57974,7 +58111,7 @@ function createTypeChecker(host) { return enclosingDeclaration; } function serializeInferredTypeForDeclaration(symbol, context, type) { - if (type.flags & 8192 /* UniqueESSymbol */ && type.symbol === symbol && (!context.enclosingDeclaration || some(symbol.declarations, (d) => getSourceFileOfNode(d) === context.enclosingFile))) { + if (type.flags & 16384 /* UniqueESSymbol */ && type.symbol === symbol && (!context.enclosingDeclaration || some(symbol.declarations, (d) => getSourceFileOfNode(d) === context.enclosingFile))) { context.flags |= 1048576 /* AllowUniqueESSymbolType */; } const result = typeToTypeNodeHelper(type, context); @@ -58207,7 +58344,7 @@ function createTypeChecker(host) { } function serializeExistingTypeNode(context, typeNode, addUndefined) { const type = getTypeFromTypeNode2(context, typeNode); - if (addUndefined && !someType(type, (t) => !!(t.flags & 32768 /* Undefined */)) && canReuseTypeNode(context, typeNode)) { + if (addUndefined && !someType(type, (t) => !!(t.flags & 4 /* Undefined */)) && canReuseTypeNode(context, typeNode)) { const clone2 = syntacticNodeBuilder.tryReuseExistingTypeNode(context, typeNode); if (clone2) { return factory.createUnionTypeNode([clone2, factory.createKeywordTypeNode(157 /* UndefinedKeyword */)]); @@ -59973,10 +60110,10 @@ function createTypeChecker(host) { for (let i = 0; i < types.length; i++) { const t = types[i]; flags |= t.flags; - if (!(t.flags & 98304 /* Nullable */)) { - if (t.flags & 512 /* BooleanLiteral */ || !expandingEnum && t.flags | 1056 /* EnumLike */) { - const baseType = t.flags & 512 /* BooleanLiteral */ ? booleanType : getBaseTypeOfEnumLikeType(t); - if (baseType.flags & 1048576 /* Union */) { + if (!(t.flags & 12 /* Nullable */)) { + if (t.flags & 8192 /* BooleanLiteral */ || !expandingEnum && t.flags | 98304 /* EnumLike */) { + const baseType = t.flags & 8192 /* BooleanLiteral */ ? booleanType : getBaseTypeOfEnumLikeType(t); + if (baseType.flags & 134217728 /* Union */) { const count = baseType.types.length; if (i + count <= types.length && getRegularTypeOfLiteralType(types[i + count - 1]) === getRegularTypeOfLiteralType(baseType.types[count - 1])) { result.push(baseType); @@ -59988,8 +60125,8 @@ function createTypeChecker(host) { result.push(t); } } - if (flags & 65536 /* Null */) result.push(nullType); - if (flags & 32768 /* Undefined */) result.push(undefinedType); + if (flags & 8 /* Null */) result.push(nullType); + if (flags & 4 /* Undefined */) result.push(undefinedType); return result || types; } function visibilityToString(flags) { @@ -60019,7 +60156,7 @@ function createTypeChecker(host) { function getNameOfSymbolFromNameType(symbol, context) { const nameType = getSymbolLinks(symbol).nameType; if (nameType) { - if (nameType.flags & 384 /* StringOrNumberLiteral */) { + if (nameType.flags & 3072 /* StringOrNumberLiteral */) { const name = "" + nameType.value; if (!isIdentifierText(name, getEmitScriptTarget(compilerOptions)) && !isNumericLiteralName(name)) { return `"${escapeString(name, 34 /* doubleQuote */)}"`; @@ -60029,7 +60166,7 @@ function createTypeChecker(host) { } return name; } - if (nameType.flags & 8192 /* UniqueESSymbol */) { + if (nameType.flags & 16384 /* UniqueESSymbol */) { return `[${getNameOfSymbolAsWritten(nameType.symbol, context)}]`; } } @@ -60054,7 +60191,7 @@ function createTypeChecker(host) { } if (isComputedPropertyName(name2) && !(getCheckFlags(symbol) & 4096 /* Late */)) { const nameType = getSymbolLinks(symbol).nameType; - if (nameType && nameType.flags & 384 /* StringOrNumberLiteral */) { + if (nameType && nameType.flags & 3072 /* StringOrNumberLiteral */) { const result = getNameOfSymbolFromNameType(symbol, context); if (result !== void 0) { return result; @@ -60335,18 +60472,18 @@ function createTypeChecker(host) { ); } function getRestType(source, properties, symbol) { - source = filterType(source, (t) => !(t.flags & 98304 /* Nullable */)); - if (source.flags & 131072 /* Never */) { + source = filterType(source, (t) => !(t.flags & 12 /* Nullable */)); + if (source.flags & 262144 /* Never */) { return emptyObjectType; } - if (source.flags & 1048576 /* Union */) { + if (source.flags & 134217728 /* Union */) { return mapType(source, (t) => getRestType(t, properties, symbol)); } let omitKeyType = getUnionType(map(properties, getLiteralTypeFromPropertyName)); const spreadableProperties = []; const unspreadableToRestKeys = []; for (const prop of getPropertiesOfType(source)) { - const literalTypeFromProperty = getLiteralTypeFromProperty(prop, 8576 /* StringOrNumberLiteralOrUnique */); + const literalTypeFromProperty = getLiteralTypeFromProperty(prop, 19456 /* StringOrNumberLiteralOrUnique */); if (!isTypeAssignableTo(literalTypeFromProperty, omitKeyType) && !(getDeclarationModifierFlagsFromSymbol(prop) & (2 /* Private */ | 4 /* Protected */)) && isSpreadableProperty(prop)) { spreadableProperties.push(prop); } else { @@ -60357,7 +60494,7 @@ function createTypeChecker(host) { if (unspreadableToRestKeys.length) { omitKeyType = getUnionType([omitKeyType, ...unspreadableToRestKeys]); } - if (omitKeyType.flags & 131072 /* Never */) { + if (omitKeyType.flags & 262144 /* Never */) { return source; } const omitTypeAlias = getGlobalOmitSymbol(); @@ -60379,10 +60516,10 @@ function createTypeChecker(host) { return result; } function isGenericTypeWithUndefinedConstraint(type) { - return !!(type.flags & 465829888 /* Instantiable */) && maybeTypeOfKind(getBaseConstraintOfType(type) || unknownType, 32768 /* Undefined */); + return !!(type.flags & 132644864 /* Instantiable */) && maybeTypeOfKind(getBaseConstraintOfType(type) || unknownType, 4 /* Undefined */); } function getNonUndefinedType(type) { - const typeOrConstraint = someType(type, isGenericTypeWithUndefinedConstraint) ? mapType(type, (t) => t.flags & 465829888 /* Instantiable */ ? getBaseConstraintOrType(t) : t) : type; + const typeOrConstraint = someType(type, isGenericTypeWithUndefinedConstraint) ? mapType(type, (t) => t.flags & 132644864 /* Instantiable */ ? getBaseConstraintOrType(t) : t) : type; return getTypeWithFacts(typeOrConstraint, 524288 /* NEUndefined */); } function getFlowTypeOfDestructuring(node, declaredType) { @@ -60433,7 +60570,7 @@ function createTypeChecker(host) { } function getLiteralPropertyNameText(name) { const type = getLiteralTypeFromPropertyName(name); - return type.flags & (128 /* StringLiteral */ | 256 /* NumberLiteral */) ? "" + type.value : void 0; + return type.flags & (1024 /* StringLiteral */ | 2048 /* NumberLiteral */) ? "" + type.value : void 0; } function getTypeForBindingElement(declaration) { const checkMode = declaration.dotDotDotToken ? 32 /* RestBindingElement */ : 0 /* Normal */; @@ -60481,7 +60618,7 @@ function createTypeChecker(host) { const elementType = checkIteratedTypeOrElementType(65 /* Destructuring */ | (declaration.dotDotDotToken ? 0 : 128 /* PossiblyOutOfBounds */), parentType, undefinedType, pattern); const index = pattern.elements.indexOf(declaration); if (declaration.dotDotDotToken) { - const baseConstraint = mapType(parentType, (t) => t.flags & 58982400 /* InstantiableNonPrimitive */ ? getBaseConstraintOrType(t) : t); + const baseConstraint = mapType(parentType, (t) => t.flags & 117964800 /* InstantiableNonPrimitive */ ? getBaseConstraintOrType(t) : t); type = everyType(baseConstraint, isTupleType) ? mapType(baseConstraint, (t) => sliceTupleType(t, index)) : createArrayType(elementType); } else if (isArrayLikeType(parentType)) { const indexType = getNumberLiteralType(index); @@ -60532,7 +60669,7 @@ function createTypeChecker(host) { /*checkMode*/ checkMode ))); - return indexType.flags & (262144 /* TypeParameter */ | 4194304 /* Index */) ? getExtractStringType(indexType) : stringType; + return indexType.flags & (524288 /* TypeParameter */ | 2097152 /* Index */) ? getExtractStringType(indexType) : stringType; } if (isVariableDeclaration(declaration) && declaration.parent.parent.kind === 251 /* ForOfStatement */) { const forOfStatement = declaration.parent.parent; @@ -60773,7 +60910,7 @@ function createTypeChecker(host) { definedInConstructor = true; } } - const sourceTypes = some(constructorTypes, (t) => !!(t.flags & ~98304 /* Nullable */)) ? constructorTypes : types; + const sourceTypes = some(constructorTypes, (t) => !!(t.flags & ~12 /* Nullable */)) ? constructorTypes : types; type = getUnionType(sourceTypes); } } @@ -60783,7 +60920,7 @@ function createTypeChecker(host) { false, definedInMethod && !definedInConstructor )); - if (symbol.valueDeclaration && isInJSFile(symbol.valueDeclaration) && filterType(widened, (t) => !!(t.flags & ~98304 /* Nullable */)) === neverType) { + if (symbol.valueDeclaration && isInJSFile(symbol.valueDeclaration) && filterType(widened, (t) => !!(t.flags & ~12 /* Nullable */)) === neverType) { reportImplicitAny(symbol.valueDeclaration, anyType); return anyType; } @@ -60872,7 +61009,7 @@ function createTypeChecker(host) { } const isDirectExport = kind === 1 /* ExportsProperty */ && (isPropertyAccessExpression(expression.left) || isElementAccessExpression(expression.left)) && (isModuleExportsAccessExpression(expression.left.expression) || isIdentifier(expression.left.expression) && isExportsIdentifier(expression.left.expression)); const type = resolvedSymbol ? getTypeOfSymbol(resolvedSymbol) : isDirectExport ? getRegularTypeOfLiteralType(checkExpressionCached(expression.right)) : getWidenedLiteralType(checkExpressionCached(expression.right)); - if (type.flags & 524288 /* Object */ && kind === 2 /* ModuleExports */ && symbol.escapedName === "export=" /* ExportEquals */) { + if (type.flags & 1048576 /* Object */ && kind === 2 /* ModuleExports */ && symbol.escapedName === "export=" /* ExportEquals */) { const exportedType = resolveStructuredTypeMembers(type); const members = createSymbolTable(); copyEntries(exportedType.members, members); @@ -61081,13 +61218,13 @@ function createTypeChecker(host) { } function widenTypeForVariableLikeDeclaration(type, declaration, reportErrors2) { if (type) { - if (type.flags & 4096 /* ESSymbol */ && isGlobalSymbolConstructor(declaration.parent)) { + if (type.flags & 512 /* ESSymbol */ && isGlobalSymbolConstructor(declaration.parent)) { type = getESSymbolLikeTypeForNode(declaration); } if (reportErrors2) { reportErrorsFromWidening(declaration, type); } - if (type.flags & 8192 /* UniqueESSymbol */ && (isBindingElement(declaration) || !tryGetTypeFromEffectiveTypeNode(declaration)) && type.symbol !== getSymbolOfDeclaration(declaration)) { + if (type.flags & 16384 /* UniqueESSymbol */ && (isBindingElement(declaration) || !tryGetTypeFromEffectiveTypeNode(declaration)) && type.symbol !== getSymbolOfDeclaration(declaration)) { type = esSymbolType; } return getWidenedType(type); @@ -61299,7 +61436,7 @@ function createTypeChecker(host) { } function getBaseTypeVariableOfClass(symbol) { const baseConstructorType = getBaseConstructorTypeOfClass(getDeclaredTypeOfClassOrInterface(symbol)); - return baseConstructorType.flags & 8650752 /* TypeVariable */ ? baseConstructorType : baseConstructorType.flags & 2097152 /* Intersection */ ? find(baseConstructorType.types, (t) => !!(t.flags & 8650752 /* TypeVariable */)) : void 0; + return baseConstructorType.flags & 34078720 /* TypeVariable */ ? baseConstructorType : baseConstructorType.flags & 268435456 /* Intersection */ ? find(baseConstructorType.types, (t) => !!(t.flags & 34078720 /* TypeVariable */)) : void 0; } function getTypeOfFuncClassEnumModule(symbol) { let links = getSymbolLinks(symbol); @@ -61409,7 +61546,7 @@ function createTypeChecker(host) { if (!links.type) { Debug.assertIsDefined(links.deferralParent); Debug.assertIsDefined(links.deferralConstituents); - links.type = links.deferralParent.flags & 1048576 /* Union */ ? getUnionType(links.deferralConstituents) : getIntersectionType(links.deferralConstituents); + links.type = links.deferralParent.flags & 134217728 /* Union */ ? getUnionType(links.deferralConstituents) : getIntersectionType(links.deferralConstituents); } return links.type; } @@ -61418,7 +61555,7 @@ function createTypeChecker(host) { if (!links.writeType && links.deferralWriteConstituents) { Debug.assertIsDefined(links.deferralParent); Debug.assertIsDefined(links.deferralConstituents); - links.writeType = links.deferralParent.flags & 1048576 /* Union */ ? getUnionType(links.deferralWriteConstituents) : getIntersectionType(links.deferralWriteConstituents); + links.writeType = links.deferralParent.flags & 134217728 /* Union */ ? getUnionType(links.deferralWriteConstituents) : getIntersectionType(links.deferralWriteConstituents); } return links.writeType; } @@ -61495,7 +61632,7 @@ function createTypeChecker(host) { if (getObjectFlags(type2) & (3 /* ClassOrInterface */ | 4 /* Reference */)) { const target = getTargetType(type2); return target === checkBase || some(getBaseTypes(target), check); - } else if (type2.flags & 2097152 /* Intersection */) { + } else if (type2.flags & 268435456 /* Intersection */) { return some(type2.types, check); } return false; @@ -61619,7 +61756,7 @@ function createTypeChecker(host) { if (getSignaturesOfType(type, 1 /* Construct */).length > 0) { return true; } - if (type.flags & 8650752 /* TypeVariable */) { + if (type.flags & 34078720 /* TypeVariable */) { const constraint = getBaseConstraintOfType(type); return !!constraint && isMixinConstructorType(constraint); } @@ -61655,7 +61792,7 @@ function createTypeChecker(host) { Debug.assert(!extended.typeArguments); checkExpression(extended.expression); } - if (baseConstructorType.flags & (524288 /* Object */ | 2097152 /* Intersection */)) { + if (baseConstructorType.flags & (1048576 /* Object */ | 268435456 /* Intersection */)) { resolveStructuredTypeMembers(baseConstructorType); } if (!popTypeResolution()) { @@ -61664,7 +61801,7 @@ function createTypeChecker(host) { } if (!(baseConstructorType.flags & 1 /* Any */) && baseConstructorType !== nullWideningType && !isConstructorType(baseConstructorType)) { const err = error2(baseTypeNode.expression, Diagnostics.Type_0_is_not_a_constructor_function_type, typeToString(baseConstructorType)); - if (baseConstructorType.flags & 262144 /* TypeParameter */) { + if (baseConstructorType.flags & 524288 /* TypeParameter */) { const constraint = getConstraintFromTypeParameter(baseConstructorType); let ctorReturn = unknownType; if (constraint) { @@ -61712,6 +61849,9 @@ function createTypeChecker(host) { )); } function getBaseTypes(type) { + if (!(getObjectFlags(type) & (3 /* ClassOrInterface */ | 4 /* Reference */))) { + return emptyArray; + } if (!type.baseTypesResolved) { if (pushTypeResolution(type, 6 /* ResolvedBaseTypes */)) { if (type.objectFlags & 8 /* Tuple */) { @@ -61745,7 +61885,7 @@ function createTypeChecker(host) { function resolveBaseTypesOfClass(type) { type.resolvedBaseTypes = resolvingEmptyArray; const baseConstructorType = getApparentType(getBaseConstructorTypeOfClass(type)); - if (!(baseConstructorType.flags & (524288 /* Object */ | 2097152 /* Intersection */ | 1 /* Any */))) { + if (!(baseConstructorType.flags & (1048576 /* Object */ | 268435456 /* Intersection */ | 1 /* Any */))) { return type.resolvedBaseTypes = emptyArray; } const baseTypeNode = getBaseTypeNodeOfClass(type); @@ -61801,13 +61941,13 @@ function createTypeChecker(host) { return true; } function isValidBaseType(type) { - if (type.flags & 262144 /* TypeParameter */) { + if (type.flags & 524288 /* TypeParameter */) { const constraint = getBaseConstraintOfType(type); if (constraint) { return isValidBaseType(constraint); } } - return !!(type.flags & (524288 /* Object */ | 67108864 /* NonPrimitive */ | 1 /* Any */) && !isGenericMappedType(type) || type.flags & 2097152 /* Intersection */ && every(type.types, isValidBaseType)); + return !!(type.flags & (1048576 /* Object */ | 131072 /* NonPrimitive */ | 1 /* Any */) && !isGenericMappedType(type) || type.flags & 268435456 /* Intersection */ && every(type.types, isValidBaseType)); } function resolveBaseTypesOfInterface(type) { type.resolvedBaseTypes = type.resolvedBaseTypes || emptyArray; @@ -61927,7 +62067,7 @@ function createTypeChecker(host) { return links.declaredType; } function getBaseTypeOfEnumLikeType(type) { - return type.flags & 1056 /* EnumLike */ && type.symbol.flags & 8 /* EnumMember */ ? getDeclaredTypeOfSymbol(getParentOfSymbol(type.symbol)) : type; + return type.flags & 98304 /* EnumLike */ && type.symbol.flags & 8 /* EnumMember */ ? getDeclaredTypeOfSymbol(getParentOfSymbol(type.symbol)) : type; } function getDeclaredTypeOfEnum(symbol) { const links = getSymbolLinks(symbol); @@ -61957,8 +62097,8 @@ function createTypeChecker(host) { /*aliasTypeArguments*/ void 0 ) : createComputedEnumType(symbol); - if (enumType.flags & 1048576 /* Union */) { - enumType.flags |= 1024 /* EnumLiteral */; + if (enumType.flags & 134217728 /* Union */) { + enumType.flags |= 32768 /* EnumLiteral */; enumType.symbol = symbol; } links.declaredType = enumType; @@ -61966,8 +62106,8 @@ function createTypeChecker(host) { return links.declaredType; } function createComputedEnumType(symbol) { - const regularType = createTypeWithSymbol(32 /* Enum */, symbol); - const freshType = createTypeWithSymbol(32 /* Enum */, symbol); + const regularType = createTypeWithSymbol(65536 /* Enum */, symbol); + const freshType = createTypeWithSymbol(65536 /* Enum */, symbol); regularType.regularType = regularType; regularType.freshType = freshType; freshType.regularType = regularType; @@ -62096,7 +62236,7 @@ function createTypeChecker(host) { if (!type.declaredProperties) { const symbol = type.symbol; const members = getMembersOfSymbol(symbol); - type.declaredProperties = getNamedMembers(members); + type.declaredProperties = getNamedMembers(members, symbol); type.declaredCallSignatures = emptyArray; type.declaredConstructSignatures = emptyArray; type.declaredIndexInfos = emptyArray; @@ -62167,7 +62307,7 @@ function createTypeChecker(host) { const earlySymbol = earlySymbols && earlySymbols.get(memberName); if (!(parent2.flags & 32 /* Class */) && lateSymbol.flags & getExcludedSymbolFlags(symbolFlags)) { const declarations = earlySymbol ? concatenate(earlySymbol.declarations, lateSymbol.declarations) : lateSymbol.declarations; - const name = !(type.flags & 8192 /* UniqueESSymbol */) && unescapeLeadingUnderscores(memberName) || declarationNameToString(declName); + const name = !(type.flags & 16384 /* UniqueESSymbol */) && unescapeLeadingUnderscores(memberName) || declarationNameToString(declName); forEach(declarations, (declaration) => error2(getNameOfDeclaration(declaration) || declaration, Diagnostics.Property_0_was_also_declared_here, name)); error2(declName || decl, Diagnostics.Duplicate_property_0, name); lateSymbol = createSymbol(0 /* None */, memberName, 4096 /* Late */); @@ -62280,7 +62420,7 @@ function createTypeChecker(host) { const target = type.target; const typeArguments = getTypeArguments(type); return length(target.typeParameters) === length(typeArguments) ? createTypeReference(target, concatenate(typeArguments, [thisArgument || target.thisType])) : type; - } else if (type.flags & 2097152 /* Intersection */) { + } else if (type.flags & 268435456 /* Intersection */) { const types = sameMap(type.types, (t) => getTypeWithThisArgument(t, thisArgument, needApparentType)); return types !== type.types ? getIntersectionType(types) : type; } @@ -62380,7 +62520,7 @@ function createTypeChecker(host) { function createUnionSignature(signature, unionSignatures) { const result = cloneSignature(signature); result.compositeSignatures = unionSignatures; - result.compositeKind = 1048576 /* Union */; + result.compositeKind = 134217728 /* Union */; result.target = void 0; result.mapper = void 0; return result; @@ -62408,7 +62548,7 @@ function createTypeChecker(host) { const restType = getTypeOfSymbol(restSymbol); if (isTupleType(restType)) { return [expandSignatureParametersWithTupleMembers(restType, restIndex, restSymbol)]; - } else if (!skipUnionExpanding && restType.flags & 1048576 /* Union */ && every(restType.types, isTupleType)) { + } else if (!skipUnionExpanding && restType.flags & 134217728 /* Union */ && every(restType.types, isTupleType)) { return map(restType.types, (t) => expandSignatureParametersWithTupleMembers(t, restIndex, restSymbol)); } } @@ -62691,11 +62831,11 @@ function createTypeChecker(host) { minArgCount, flags ); - result.compositeKind = 1048576 /* Union */; - result.compositeSignatures = concatenate(left.compositeKind !== 2097152 /* Intersection */ && left.compositeSignatures || [left], [right]); + result.compositeKind = 134217728 /* Union */; + result.compositeSignatures = concatenate(left.compositeKind !== 268435456 /* Intersection */ && left.compositeSignatures || [left], [right]); if (paramMapper) { - result.mapper = left.compositeKind !== 2097152 /* Intersection */ && left.mapper && left.compositeSignatures ? combineTypeMappers(left.mapper, paramMapper) : paramMapper; - } else if (left.compositeKind !== 2097152 /* Intersection */ && left.mapper && left.compositeSignatures) { + result.mapper = left.compositeKind !== 268435456 /* Intersection */ && left.mapper && left.compositeSignatures ? combineTypeMappers(left.mapper, paramMapper) : paramMapper; + } else if (left.compositeKind !== 268435456 /* Intersection */ && left.mapper && left.compositeSignatures) { result.mapper = left.mapper; } return result; @@ -62848,8 +62988,8 @@ function createTypeChecker(host) { if (symbol.flags & 32 /* Class */) { const classType = getDeclaredTypeOfClassOrInterface(symbol); const baseConstructorType = getBaseConstructorTypeOfClass(classType); - if (baseConstructorType.flags & (524288 /* Object */ | 2097152 /* Intersection */ | 8650752 /* TypeVariable */)) { - members = createSymbolTable(getNamedOrIndexSignatureMembers(members)); + if (baseConstructorType.flags & (1048576 /* Object */ | 268435456 /* Intersection */ | 34078720 /* TypeVariable */)) { + members = createSymbolTable(getNamedOrIndexSignatureMembers(members, symbol)); addInheritedMembers(members, getPropertiesOfType(baseConstructorType)); } else if (baseConstructorType === anyType) { baseConstructorIndexInfo = anyBaseTypeIndexInfo; @@ -62862,7 +63002,7 @@ function createTypeChecker(host) { if (baseConstructorIndexInfo) { indexInfos = append(indexInfos, baseConstructorIndexInfo); } - if (symbol.flags & 384 /* Enum */ && (getDeclaredTypeOfSymbol(symbol).flags & 32 /* Enum */ || some(type.properties, (prop) => !!(getTypeOfSymbol(prop).flags & 296 /* NumberLike */)))) { + if (symbol.flags & 384 /* Enum */ && (getDeclaredTypeOfSymbol(symbol).flags & 65536 /* Enum */ || some(type.properties, (prop) => !!(getTypeOfSymbol(prop).flags & 67648 /* NumberLike */)))) { indexInfos = append(indexInfos, enumNumberIndexInfo); } } @@ -62903,11 +63043,11 @@ function createTypeChecker(host) { } function getLimitedConstraint(type) { const constraint = getConstraintTypeFromMappedType(type.mappedType); - if (!(constraint.flags & 1048576 /* Union */ || constraint.flags & 2097152 /* Intersection */)) { + if (!(constraint.flags & 134217728 /* Union */ || constraint.flags & 268435456 /* Intersection */)) { return; } - const origin = constraint.flags & 1048576 /* Union */ ? constraint.origin : constraint; - if (!origin || !(origin.flags & 2097152 /* Intersection */)) { + const origin = constraint.flags & 134217728 /* Union */ ? constraint.origin : constraint; + if (!origin || !(origin.flags & 268435456 /* Intersection */)) { return; } const limitedConstraint = getIntersectionType(origin.types.filter((t) => t !== type.constraintType)); @@ -62923,7 +63063,7 @@ function createTypeChecker(host) { const limitedConstraint = getLimitedConstraint(type); for (const prop of getPropertiesOfType(type.source)) { if (limitedConstraint) { - const propertyNameType = getLiteralTypeFromProperty(prop, 8576 /* StringOrNumberLiteralOrUnique */); + const propertyNameType = getLiteralTypeFromProperty(prop, 19456 /* StringOrNumberLiteralOrUnique */); if (!isTypeAssignableTo(propertyNameType, limitedConstraint)) { continue; } @@ -62933,7 +63073,7 @@ function createTypeChecker(host) { inferredProp.declarations = prop.declarations; inferredProp.links.nameType = getSymbolLinks(prop).nameType; inferredProp.links.propertyType = getTypeOfSymbol(prop); - if (type.constraintType.type.flags & 8388608 /* IndexedAccess */ && type.constraintType.type.objectType.flags & 262144 /* TypeParameter */ && type.constraintType.type.indexType.flags & 262144 /* TypeParameter */) { + if (type.constraintType.type.flags & 33554432 /* IndexedAccess */ && type.constraintType.type.objectType.flags & 524288 /* TypeParameter */ && type.constraintType.type.indexType.flags & 524288 /* TypeParameter */) { const newTypeParam = type.constraintType.type.objectType; const newMappedType = replaceIndexedAccess(type.mappedType, type.constraintType.type, newTypeParam); inferredProp.links.mappedType = newMappedType; @@ -62947,11 +63087,11 @@ function createTypeChecker(host) { setStructuredTypeMembers(type, members, emptyArray, emptyArray, indexInfos); } function getLowerBoundOfKeyType(type) { - if (type.flags & 4194304 /* Index */) { + if (type.flags & 2097152 /* Index */) { const t = getApparentType(type.type); return isGenericTupleType(t) ? getKnownKeysOfTupleType(t) : getIndexType(t); } - if (type.flags & 16777216 /* Conditional */) { + if (type.flags & 67108864 /* Conditional */) { if (type.root.isDistributive) { const checkType = type.checkType; const constraint = getLowerBoundOfKeyType(checkType); @@ -62966,7 +63106,7 @@ function createTypeChecker(host) { } return type; } - if (type.flags & 1048576 /* Union */) { + if (type.flags & 134217728 /* Union */) { return mapType( type, getLowerBoundOfKeyType, @@ -62974,9 +63114,9 @@ function createTypeChecker(host) { true ); } - if (type.flags & 2097152 /* Intersection */) { + if (type.flags & 268435456 /* Intersection */) { const types = type.types; - if (types.length === 2 && !!(types[0].flags & (4 /* String */ | 8 /* Number */ | 64 /* BigInt */)) && types[1] === emptyTypeLiteralType) { + if (types.length === 2 && !!(types[0].flags & (32 /* String */ | 64 /* Number */ | 128 /* BigInt */)) && types[1] === emptyTypeLiteralType) { return type; } return getIntersectionType(sameMap(type.types, getLowerBoundOfKeyType)); @@ -62994,7 +63134,7 @@ function createTypeChecker(host) { cb(stringType); } else { for (const info of getIndexInfosOfType(type)) { - if (!stringsOnly || info.keyType.flags & (4 /* String */ | 134217728 /* TemplateLiteral */)) { + if (!stringsOnly || info.keyType.flags & (32 /* String */ | 4194304 /* TemplateLiteral */)) { cb(info.keyType); } } @@ -63012,7 +63152,7 @@ function createTypeChecker(host) { const templateType = getTemplateTypeFromMappedType(mappedType); const modifiersType = getApparentType(getModifiersTypeFromMappedType(type)); const templateModifiers = getMappedTypeModifiers(type); - const include = 8576 /* StringOrNumberLiteralOrUnique */; + const include = 19456 /* StringOrNumberLiteralOrUnique */; if (isMappedTypeWithKeyofConstraintDeclaration(type)) { forEachMappedTypePropertyKeyTypeAndIndexSignatureKeyType( modifiersType, @@ -63052,8 +63192,8 @@ function createTypeChecker(host) { } members.set(propName, prop); } - } else if (isValidIndexKeyType(propNameType) || propNameType.flags & (1 /* Any */ | 32 /* Enum */)) { - const indexKeyType = propNameType.flags & (1 /* Any */ | 4 /* String */) ? stringType : propNameType.flags & (8 /* Number */ | 32 /* Enum */) ? numberType : propNameType; + } else if (isValidIndexKeyType(propNameType) || propNameType.flags & (1 /* Any */ | 65536 /* Enum */)) { + const indexKeyType = propNameType.flags & (1 /* Any */ | 32 /* String */) ? stringType : propNameType.flags & (64 /* Number */ | 65536 /* Enum */) ? numberType : propNameType; const propType = instantiateType(templateType, appendTypeMapping(type.mapper, typeParameter, keyType)); const modifiersIndexInfo = getApplicableIndexInfo(modifiersType, propNameType); const isReadonly = !!(templateModifiers & 1 /* IncludeReadonly */ || !(templateModifiers & 2 /* ExcludeReadonly */) && (modifiersIndexInfo == null ? void 0 : modifiersIndexInfo.isReadonly)); @@ -63078,7 +63218,7 @@ function createTypeChecker(host) { const templateType = getTemplateTypeFromMappedType(mappedType.target || mappedType); const mapper = appendTypeMapping(mappedType.mapper, getTypeParameterFromMappedType(mappedType), symbol.links.keyType); const propType = instantiateType(templateType, mapper); - let type = strictNullChecks && symbol.flags & 16777216 /* Optional */ && !maybeTypeOfKind(propType, 32768 /* Undefined */ | 16384 /* Void */) ? getOptionalType( + let type = strictNullChecks && symbol.flags & 16777216 /* Optional */ && !maybeTypeOfKind(propType, 4 /* Undefined */ | 16 /* Void */) ? getOptionalType( propType, /*isProperty*/ true @@ -63122,8 +63262,8 @@ function createTypeChecker(host) { } else { const declaredType = getTypeFromMappedTypeNode(type.declaration); const constraint = getConstraintTypeFromMappedType(declaredType); - const extendedConstraint = constraint && constraint.flags & 262144 /* TypeParameter */ ? getConstraintOfTypeParameter(constraint) : constraint; - type.modifiersType = extendedConstraint && extendedConstraint.flags & 4194304 /* Index */ ? instantiateType(extendedConstraint.type, type.mapper) : unknownType; + const extendedConstraint = constraint && constraint.flags & 524288 /* TypeParameter */ ? getConstraintOfTypeParameter(constraint) : constraint; + type.modifiersType = extendedConstraint && extendedConstraint.flags & 2097152 /* Index */ ? instantiateType(extendedConstraint.type, type.mapper) : unknownType; } } return type.modifiersType; @@ -63140,7 +63280,7 @@ function createTypeChecker(host) { if (getObjectFlags(type) & 32 /* Mapped */) { return getMappedTypeOptionality(type) || getCombinedMappedTypeOptionality(getModifiersTypeFromMappedType(type)); } - if (type.flags & 2097152 /* Intersection */) { + if (type.flags & 268435456 /* Intersection */) { const optionality = getCombinedMappedTypeOptionality(type.types[0]); return every(type.types, (t, i) => i === 0 || getCombinedMappedTypeOptionality(t) === optionality) ? optionality : 0; } @@ -63171,7 +63311,7 @@ function createTypeChecker(host) { } function resolveStructuredTypeMembers(type) { if (!type.members) { - if (type.flags & 524288 /* Object */) { + if (type.flags & 1048576 /* Object */) { if (type.objectFlags & 4 /* Reference */) { resolveTypeReferenceMembers(type); } else if (type.objectFlags & 3 /* ClassOrInterface */) { @@ -63185,9 +63325,9 @@ function createTypeChecker(host) { } else { Debug.fail("Unhandled object type " + Debug.formatObjectFlags(type.objectFlags)); } - } else if (type.flags & 1048576 /* Union */) { + } else if (type.flags & 134217728 /* Union */) { resolveUnionTypeMembers(type); - } else if (type.flags & 2097152 /* Intersection */) { + } else if (type.flags & 268435456 /* Intersection */) { resolveIntersectionTypeMembers(type); } else { Debug.fail("Unhandled type " + Debug.formatTypeFlags(type.flags)); @@ -63196,13 +63336,13 @@ function createTypeChecker(host) { return type; } function getPropertiesOfObjectType(type) { - if (type.flags & 524288 /* Object */) { + if (type.flags & 1048576 /* Object */) { return resolveStructuredTypeMembers(type).properties; } return emptyArray; } function getPropertyOfObjectType(type, name) { - if (type.flags & 524288 /* Object */) { + if (type.flags & 1048576 /* Object */) { const resolved = resolveStructuredTypeMembers(type); const symbol = resolved.members.get(name); if (symbol && symbolIsValue(symbol)) { @@ -63220,28 +63360,28 @@ function createTypeChecker(host) { type, prop.escapedName, /*skipObjectFunctionPropertyAugment*/ - !!(type.flags & 2097152 /* Intersection */) + !!(type.flags & 268435456 /* Intersection */) ); if (combinedProp) { members.set(prop.escapedName, combinedProp); } } } - if (type.flags & 1048576 /* Union */ && getIndexInfosOfType(current).length === 0) { + if (type.flags & 134217728 /* Union */ && getIndexInfosOfType(current).length === 0) { break; } } - type.resolvedProperties = getNamedMembers(members); + type.resolvedProperties = getNamedMembers(members, type.symbol); } return type.resolvedProperties; } function getPropertiesOfType(type) { type = getReducedApparentType(type); - return type.flags & 3145728 /* UnionOrIntersection */ ? getPropertiesOfUnionOrIntersectionType(type) : getPropertiesOfObjectType(type); + return type.flags & 402653184 /* UnionOrIntersection */ ? getPropertiesOfUnionOrIntersectionType(type) : getPropertiesOfObjectType(type); } function forEachPropertyOfType(type, action) { type = getReducedApparentType(type); - if (type.flags & 3670016 /* StructuredType */) { + if (type.flags & 403701760 /* StructuredType */) { resolveStructuredTypeMembers(type).members.forEach((symbol, escapedName) => { if (isNamedMember(symbol, escapedName)) { action(symbol, escapedName); @@ -63260,7 +63400,7 @@ function createTypeChecker(host) { } function getAllPossiblePropertiesOfTypes(types) { const unionType = getUnionType(types); - if (!(unionType.flags & 1048576 /* Union */)) { + if (!(unionType.flags & 134217728 /* Union */)) { return getAugmentedPropertiesOfType(unionType); } const props = createSymbolTable(); @@ -63275,7 +63415,7 @@ function createTypeChecker(host) { return arrayFrom(props.values()); } function getConstraintOfType(type) { - return type.flags & 262144 /* TypeParameter */ ? getConstraintOfTypeParameter(type) : type.flags & 8388608 /* IndexedAccess */ ? getConstraintOfIndexedAccess(type) : type.flags & 16777216 /* Conditional */ ? getConstraintOfConditionalType(type) : getBaseConstraintOfType(type); + return type.flags & 524288 /* TypeParameter */ ? getConstraintOfTypeParameter(type) : type.flags & 33554432 /* IndexedAccess */ ? getConstraintOfIndexedAccess(type) : type.flags & 67108864 /* Conditional */ ? getConstraintOfConditionalType(type) : getBaseConstraintOfType(type); } function getConstraintOfTypeParameter(typeParameter) { return hasNonCircularBaseConstraint(typeParameter) ? getConstraintFromTypeParameter(typeParameter) : void 0; @@ -63286,7 +63426,7 @@ function createTypeChecker(host) { } function isConstTypeVariable(type, depth = 0) { var _a; - return depth < 5 && !!(type && (type.flags & 262144 /* TypeParameter */ && some((_a = type.symbol) == null ? void 0 : _a.declarations, (d) => hasSyntacticModifier(d, 4096 /* Const */)) || type.flags & 3145728 /* UnionOrIntersection */ && some(type.types, (t) => isConstTypeVariable(t, depth)) || type.flags & 8388608 /* IndexedAccess */ && isConstTypeVariable(type.objectType, depth + 1) || type.flags & 16777216 /* Conditional */ && isConstTypeVariable(getConstraintOfConditionalType(type), depth + 1) || type.flags & 33554432 /* Substitution */ && isConstTypeVariable(type.baseType, depth) || getObjectFlags(type) & 32 /* Mapped */ && isConstMappedType(type, depth) || isGenericTupleType(type) && findIndex(getElementTypes(type), (t, i) => !!(type.target.elementFlags[i] & 8 /* Variadic */) && isConstTypeVariable(t, depth)) >= 0)); + return depth < 5 && !!(type && (type.flags & 524288 /* TypeParameter */ && some((_a = type.symbol) == null ? void 0 : _a.declarations, (d) => hasSyntacticModifier(d, 4096 /* Const */)) || type.flags & 402653184 /* UnionOrIntersection */ && some(type.types, (t) => isConstTypeVariable(t, depth)) || type.flags & 33554432 /* IndexedAccess */ && isConstTypeVariable(type.objectType, depth + 1) || type.flags & 67108864 /* Conditional */ && isConstTypeVariable(getConstraintOfConditionalType(type), depth + 1) || type.flags & 16777216 /* Substitution */ && isConstTypeVariable(type.baseType, depth) || getObjectFlags(type) & 32 /* Mapped */ && isConstMappedType(type, depth) || isGenericTupleType(type) && findIndex(getElementTypes(type), (t, i) => !!(type.target.elementFlags[i] & 8 /* Variadic */) && isConstTypeVariable(t, depth)) >= 0)); } function getConstraintOfIndexedAccess(type) { return hasNonCircularBaseConstraint(type) ? getConstraintFromIndexedAccess(type) : void 0; @@ -63342,7 +63482,7 @@ function createTypeChecker(host) { /*forConstraint*/ true ); - if (!(instantiated.flags & 131072 /* Never */)) { + if (!(instantiated.flags & 262144 /* Never */)) { type.resolvedConstraintOfDistributive = instantiated; return instantiated; } @@ -63361,9 +63501,9 @@ function createTypeChecker(host) { let constraints; let hasDisjointDomainType = false; for (const t of types) { - if (t.flags & 465829888 /* Instantiable */) { + if (t.flags & 132644864 /* Instantiable */) { let constraint = getConstraintOfType(t); - while (constraint && constraint.flags & (262144 /* TypeParameter */ | 4194304 /* Index */ | 16777216 /* Conditional */)) { + while (constraint && constraint.flags & (524288 /* TypeParameter */ | 2097152 /* Index */ | 67108864 /* Conditional */)) { constraint = getConstraintOfType(constraint); } if (constraint) { @@ -63372,14 +63512,14 @@ function createTypeChecker(host) { constraints = append(constraints, t); } } - } else if (t.flags & 469892092 /* DisjointDomains */ || isEmptyAnonymousObjectType(t)) { + } else if (t.flags & 12812284 /* DisjointDomains */ || isEmptyAnonymousObjectType(t)) { hasDisjointDomainType = true; } } if (constraints && (targetIsUnion || hasDisjointDomainType)) { if (hasDisjointDomainType) { for (const t of types) { - if (t.flags & 469892092 /* DisjointDomains */ || isEmptyAnonymousObjectType(t)) { + if (t.flags & 12812284 /* DisjointDomains */ || isEmptyAnonymousObjectType(t)) { constraints = append(constraints, t); } } @@ -63393,11 +63533,11 @@ function createTypeChecker(host) { return void 0; } function getBaseConstraintOfType(type) { - if (type.flags & (58982400 /* InstantiableNonPrimitive */ | 3145728 /* UnionOrIntersection */ | 134217728 /* TemplateLiteral */ | 268435456 /* StringMapping */) || isGenericTupleType(type)) { + if (type.flags & (117964800 /* InstantiableNonPrimitive */ | 402653184 /* UnionOrIntersection */ | 4194304 /* TemplateLiteral */ | 8388608 /* StringMapping */) || isGenericTupleType(type)) { const constraint = getResolvedBaseConstraint(type); return constraint !== noConstraintType && constraint !== circularConstraintType ? constraint : void 0; } - return type.flags & 4194304 /* Index */ ? stringNumberSymbolType : void 0; + return type.flags & 2097152 /* Index */ ? stringNumberSymbolType : void 0; } function getBaseConstraintOrType(type) { return getBaseConstraintOfType(type) || type; @@ -63428,7 +63568,7 @@ function createTypeChecker(host) { stack.pop(); } if (!popTypeResolution()) { - if (t.flags & 262144 /* TypeParameter */) { + if (t.flags & 524288 /* TypeParameter */) { const errorNode = getConstraintDeclaration(t); if (errorNode) { const diagnostic = error2(errorNode, Diagnostics.Type_parameter_0_has_a_circular_constraint, typeToString(t)); @@ -63448,11 +63588,11 @@ function createTypeChecker(host) { return c !== noConstraintType && c !== circularConstraintType ? c : void 0; } function computeBaseConstraint(t) { - if (t.flags & 262144 /* TypeParameter */) { + if (t.flags & 524288 /* TypeParameter */) { const constraint = getConstraintFromTypeParameter(t); return t.isThisType || !constraint ? constraint : getBaseConstraint(constraint); } - if (t.flags & 3145728 /* UnionOrIntersection */) { + if (t.flags & 402653184 /* UnionOrIntersection */) { const types = t.types; const baseTypes = []; let different = false; @@ -63470,21 +63610,27 @@ function createTypeChecker(host) { if (!different) { return t; } - return t.flags & 1048576 /* Union */ && baseTypes.length === types.length ? getUnionType(baseTypes) : t.flags & 2097152 /* Intersection */ && baseTypes.length ? getIntersectionType(baseTypes) : void 0; + return t.flags & 134217728 /* Union */ && baseTypes.length === types.length ? getUnionType(baseTypes) : t.flags & 268435456 /* Intersection */ && baseTypes.length ? getIntersectionType(baseTypes) : void 0; } - if (t.flags & 4194304 /* Index */) { + if (t.flags & 2097152 /* Index */) { + if (isGenericMappedType(t.type)) { + const mappedType = t.type; + if (getNameTypeFromMappedType(mappedType) && !isMappedTypeWithKeyofConstraintDeclaration(mappedType)) { + return getBaseConstraint(getIndexTypeForMappedType(mappedType, 0 /* None */)); + } + } return stringNumberSymbolType; } - if (t.flags & 134217728 /* TemplateLiteral */) { + if (t.flags & 4194304 /* TemplateLiteral */) { const types = t.types; const constraints = mapDefined(types, getBaseConstraint); return constraints.length === types.length ? getTemplateLiteralType(t.texts, constraints) : stringType; } - if (t.flags & 268435456 /* StringMapping */) { + if (t.flags & 8388608 /* StringMapping */) { const constraint = getBaseConstraint(t.type); return constraint && constraint !== t.type ? getStringMappingType(t.symbol, constraint) : stringType; } - if (t.flags & 8388608 /* IndexedAccess */) { + if (t.flags & 33554432 /* IndexedAccess */) { if (isMappedTypeGenericIndexedAccess(t)) { return getBaseConstraint(substituteIndexedMappedType(t.objectType, t.indexType)); } @@ -63493,16 +63639,16 @@ function createTypeChecker(host) { const baseIndexedAccess = baseObjectType && baseIndexType && getIndexedAccessTypeOrUndefined(baseObjectType, baseIndexType, t.accessFlags); return baseIndexedAccess && getBaseConstraint(baseIndexedAccess); } - if (t.flags & 16777216 /* Conditional */) { + if (t.flags & 67108864 /* Conditional */) { const constraint = getConstraintFromConditionalType(t); return constraint && getBaseConstraint(constraint); } - if (t.flags & 33554432 /* Substitution */) { + if (t.flags & 16777216 /* Substitution */) { return getBaseConstraint(getSubstitutionIntersection(t)); } if (isGenericTupleType(t)) { const newElements = map(getElementTypes(t), (v, i) => { - const constraint = v.flags & 262144 /* TypeParameter */ && t.target.elementFlags[i] & 8 /* Variadic */ && getBaseConstraint(v) || v; + const constraint = v.flags & 524288 /* TypeParameter */ && t.target.elementFlags[i] & 8 /* Variadic */ && getBaseConstraint(v) || v; return constraint !== v && everyType(constraint, (c) => isArrayOrTupleType(c) && !isGenericTupleType(c)) ? constraint : v; }); return createTupleType(newElements, t.target.elementFlags, t.target.readonly, t.target.labeledElementDeclarations); @@ -63571,16 +63717,16 @@ function createTypeChecker(host) { return type; } function isArrayOrTupleOrIntersection(type) { - return !!(type.flags & 2097152 /* Intersection */) && every(type.types, isArrayOrTupleType); + return !!(type.flags & 268435456 /* Intersection */) && every(type.types, isArrayOrTupleType); } function isMappedTypeGenericIndexedAccess(type) { let objectType; - return !!(type.flags & 8388608 /* IndexedAccess */ && getObjectFlags(objectType = type.objectType) & 32 /* Mapped */ && !isGenericMappedType(objectType) && isGenericIndexType(type.indexType) && !(getMappedTypeModifiers(objectType) & 8 /* ExcludeOptional */) && !objectType.declaration.nameType); + return !!(type.flags & 33554432 /* IndexedAccess */ && getObjectFlags(objectType = type.objectType) & 32 /* Mapped */ && !isGenericMappedType(objectType) && isGenericIndexType(type.indexType) && !(getMappedTypeModifiers(objectType) & 8 /* ExcludeOptional */) && !objectType.declaration.nameType); } function getApparentType(type) { - const t = type.flags & 465829888 /* Instantiable */ ? getBaseConstraintOfType(type) || unknownType : type; + const t = type.flags & 132644864 /* Instantiable */ ? getBaseConstraintOfType(type) || unknownType : type; const objectFlags = getObjectFlags(t); - return objectFlags & 32 /* Mapped */ ? getApparentTypeOfMappedType(t) : objectFlags & 4 /* Reference */ && t !== type ? getTypeWithThisArgument(t, type) : t.flags & 2097152 /* Intersection */ ? getApparentTypeOfIntersectionType(t, type) : t.flags & 402653316 /* StringLike */ ? globalStringType : t.flags & 296 /* NumberLike */ ? globalNumberType : t.flags & 2112 /* BigIntLike */ ? getGlobalBigIntType() : t.flags & 528 /* BooleanLike */ ? globalBooleanType : t.flags & 12288 /* ESSymbolLike */ ? getGlobalESSymbolType() : t.flags & 67108864 /* NonPrimitive */ ? emptyObjectType : t.flags & 4194304 /* Index */ ? stringNumberSymbolType : t.flags & 2 /* Unknown */ && !strictNullChecks ? emptyObjectType : t; + return objectFlags & 32 /* Mapped */ ? getApparentTypeOfMappedType(t) : objectFlags & 4 /* Reference */ && t !== type ? getTypeWithThisArgument(t, type) : t.flags & 268435456 /* Intersection */ ? getApparentTypeOfIntersectionType(t, type) : t.flags & 12583968 /* StringLike */ ? globalStringType : t.flags & 67648 /* NumberLike */ ? globalNumberType : t.flags & 4224 /* BigIntLike */ ? getGlobalBigIntType() : t.flags & 8448 /* BooleanLike */ ? globalBooleanType : t.flags & 16896 /* ESSymbolLike */ ? getGlobalESSymbolType() : t.flags & 131072 /* NonPrimitive */ ? emptyObjectType : t.flags & 2097152 /* Index */ ? stringNumberSymbolType : t.flags & 2 /* Unknown */ && !strictNullChecks ? emptyObjectType : t; } function getReducedApparentType(type) { return getReducedType(getApparentType(getReducedType(type))); @@ -63591,14 +63737,14 @@ function createTypeChecker(host) { let singleProp; let propSet; let indexTypes; - const isUnion = containingType.flags & 1048576 /* Union */; + const isUnion = containingType.flags & 134217728 /* Union */; let optionalFlag; let syntheticFlag = 4 /* SyntheticMethod */; let checkFlags = isUnion ? 0 : 8 /* Readonly */; let mergedInstantiations = false; for (const current of containingType.types) { const type = getApparentType(current); - if (!(isErrorType(type) || type.flags & 131072 /* Never */)) { + if (!(isErrorType(type) || type.flags & 262144 /* Never */)) { const prop = getPropertyOfType(type, name, skipObjectFunctionPropertyAugment); const modifiers = prop ? getDeclarationModifierFlagsFromSymbol(prop) : 0; if (prop) { @@ -63701,7 +63847,7 @@ function createTypeChecker(host) { if (isLiteralType(type) || isPatternLiteralType(type)) { checkFlags |= 128 /* HasLiteralType */; } - if (type.flags & 131072 /* Never */ && type !== uniqueLiteralType) { + if (type.flags & 262144 /* Never */ && type !== uniqueLiteralType) { checkFlags |= 131072 /* HasNeverType */; } propTypes.push(type); @@ -63772,9 +63918,9 @@ function createTypeChecker(host) { return property && !(getCheckFlags(property) & 16 /* ReadPartial */) ? property : void 0; } function getReducedType(type) { - if (type.flags & 1048576 /* Union */ && type.objectFlags & 16777216 /* ContainsIntersections */) { + if (type.flags & 134217728 /* Union */ && type.objectFlags & 16777216 /* ContainsIntersections */) { return type.resolvedReducedType || (type.resolvedReducedType = getReducedUnionType(type)); - } else if (type.flags & 2097152 /* Intersection */) { + } else if (type.flags & 268435456 /* Intersection */) { if (!(type.objectFlags & 16777216 /* IsNeverIntersectionComputed */)) { type.objectFlags |= 16777216 /* IsNeverIntersectionComputed */ | (some(getPropertiesOfUnionOrIntersectionType(type), isNeverReducedProperty) ? 33554432 /* IsNeverIntersection */ : 0); } @@ -63788,7 +63934,7 @@ function createTypeChecker(host) { return unionType; } const reduced = getUnionType(reducedTypes); - if (reduced.flags & 1048576 /* Union */) { + if (reduced.flags & 134217728 /* Union */) { reduced.resolvedReducedType = reduced; } return reduced; @@ -63797,20 +63943,20 @@ function createTypeChecker(host) { return isDiscriminantWithNeverType(prop) || isConflictingPrivateProperty(prop); } function isDiscriminantWithNeverType(prop) { - return !(prop.flags & 16777216 /* Optional */) && (getCheckFlags(prop) & (192 /* Discriminant */ | 131072 /* HasNeverType */)) === 192 /* Discriminant */ && !!(getTypeOfSymbol(prop).flags & 131072 /* Never */); + return !(prop.flags & 16777216 /* Optional */) && (getCheckFlags(prop) & (192 /* Discriminant */ | 131072 /* HasNeverType */)) === 192 /* Discriminant */ && !!(getTypeOfSymbol(prop).flags & 262144 /* Never */); } function isConflictingPrivateProperty(prop) { return !prop.valueDeclaration && !!(getCheckFlags(prop) & 1024 /* ContainsPrivate */); } function isGenericReducibleType(type) { - return !!(type.flags & 1048576 /* Union */ && type.objectFlags & 16777216 /* ContainsIntersections */ && some(type.types, isGenericReducibleType) || type.flags & 2097152 /* Intersection */ && isReducibleIntersection(type)); + return !!(type.flags & 134217728 /* Union */ && type.objectFlags & 16777216 /* ContainsIntersections */ && some(type.types, isGenericReducibleType) || type.flags & 268435456 /* Intersection */ && isReducibleIntersection(type)); } function isReducibleIntersection(type) { const uniqueFilled = type.uniqueLiteralFilledInstantiation || (type.uniqueLiteralFilledInstantiation = instantiateType(type, uniqueLiteralMapper)); return getReducedType(uniqueFilled) !== uniqueFilled; } function elaborateNeverIntersection(errorInfo, type) { - if (type.flags & 2097152 /* Intersection */ && getObjectFlags(type) & 33554432 /* IsNeverIntersection */) { + if (type.flags & 268435456 /* Intersection */ && getObjectFlags(type) & 33554432 /* IsNeverIntersection */) { const neverProp = find(getPropertiesOfUnionOrIntersectionType(type), isDiscriminantWithNeverType); if (neverProp) { return chainDiagnosticMessages(errorInfo, Diagnostics.The_intersection_0_was_reduced_to_never_because_property_1_has_conflicting_types_in_some_constituents, typeToString( @@ -63835,7 +63981,7 @@ function createTypeChecker(host) { function getPropertyOfType(type, name, skipObjectFunctionPropertyAugment, includeTypeOnlyMembers) { var _a, _b; type = getReducedApparentType(type); - if (type.flags & 524288 /* Object */) { + if (type.flags & 1048576 /* Object */) { const resolved = resolveStructuredTypeMembers(type); const symbol = resolved.members.get(name); if (symbol && !includeTypeOnlyMembers && ((_a = type.symbol) == null ? void 0 : _a.flags) & 512 /* ValueModule */ && ((_b = getSymbolLinks(type.symbol).typeOnlyExportStarMap) == null ? void 0 : _b.has(name))) { @@ -63854,7 +64000,7 @@ function createTypeChecker(host) { } return getPropertyOfObjectType(globalObjectType, name); } - if (type.flags & 2097152 /* Intersection */) { + if (type.flags & 268435456 /* Intersection */) { const prop = getPropertyOfUnionOrIntersectionType( type, name, @@ -63869,13 +64015,13 @@ function createTypeChecker(host) { } return void 0; } - if (type.flags & 1048576 /* Union */) { + if (type.flags & 134217728 /* Union */) { return getPropertyOfUnionOrIntersectionType(type, name, skipObjectFunctionPropertyAugment); } return void 0; } function getSignaturesOfStructuredType(type, kind) { - if (type.flags & 3670016 /* StructuredType */) { + if (type.flags & 403701760 /* StructuredType */) { const resolved = resolveStructuredTypeMembers(type); return kind === 0 /* Call */ ? resolved.callSignatures : resolved.constructSignatures; } @@ -63883,7 +64029,7 @@ function createTypeChecker(host) { } function getSignaturesOfType(type, kind) { const result = getSignaturesOfStructuredType(getReducedApparentType(type), kind); - if (kind === 0 /* Call */ && !length(result) && type.flags & 1048576 /* Union */) { + if (kind === 0 /* Call */ && !length(result) && type.flags & 134217728 /* Union */) { if (type.arrayFallbackSignatures) { return type.arrayFallbackSignatures; } @@ -63938,10 +64084,10 @@ function createTypeChecker(host) { )) : applicableInfo ? applicableInfo : stringIndexInfo && isApplicableIndexType(keyType, stringType) ? stringIndexInfo : void 0; } function isApplicableIndexType(source, target) { - return isTypeAssignableTo(source, target) || target === stringType && isTypeAssignableTo(source, numberType) || target === numberType && (source === numericStringType || !!(source.flags & 128 /* StringLiteral */) && isNumericLiteralName(source.value)); + return isTypeAssignableTo(source, target) || target === stringType && isTypeAssignableTo(source, numberType) || target === numberType && (source === numericStringType || !!(source.flags & 1024 /* StringLiteral */) && isNumericLiteralName(source.value)); } function getIndexInfosOfStructuredType(type) { - if (type.flags & 3670016 /* StructuredType */) { + if (type.flags & 403701760 /* StructuredType */) { const resolved = resolveStructuredTypeMembers(type); return resolved.indexInfos; } @@ -64267,7 +64413,7 @@ function createTypeChecker(host) { } if (type || jsdocPredicate) { signature.resolvedTypePredicate = type && isTypePredicateNode(type) ? createTypePredicateFromTypePredicateNode(type, signature) : jsdocPredicate || noTypePredicate; - } else if (signature.declaration && isFunctionLikeDeclaration(signature.declaration) && (!signature.resolvedReturnType || signature.resolvedReturnType.flags & 16 /* Boolean */) && getParameterCount(signature) > 0) { + } else if (signature.declaration && isFunctionLikeDeclaration(signature.declaration) && (!signature.resolvedReturnType || signature.resolvedReturnType.flags & 256 /* Boolean */) && getParameterCount(signature) > 0) { const { declaration } = signature; signature.resolvedTypePredicate = noTypePredicate; signature.resolvedTypePredicate = getTypePredicateFromBody(declaration) || noTypePredicate; @@ -64292,7 +64438,7 @@ function createTypeChecker(host) { ) : createTypePredicate(node.assertsModifier ? 3 /* AssertsIdentifier */ : 1 /* Identifier */, parameterName.escapedText, findIndex(signature.parameters, (p) => p.escapedName === parameterName.escapedText), type); } function getUnionOrIntersectionType(types, kind, unionReduction) { - return kind !== 2097152 /* Intersection */ ? getUnionType(types, unionReduction) : getIntersectionType(types); + return kind !== 268435456 /* Intersection */ ? getUnionType(types, unionReduction) : getIntersectionType(types); } function getReturnTypeOfSignature(signature) { if (!signature.resolvedReturnType) { @@ -64538,7 +64684,7 @@ function createTypeChecker(host) { return emptyArray; } function isValidIndexKeyType(type) { - return !!(type.flags & (4 /* String */ | 8 /* Number */ | 4096 /* ESSymbol */)) || isPatternLiteralType(type) || !!(type.flags & 2097152 /* Intersection */) && !isGenericType(type) && some(type.types, isValidIndexKeyType); + return !!(type.flags & (32 /* String */ | 64 /* Number */ | 512 /* ESSymbol */)) || isPatternLiteralType(type) || !!(type.flags & 268435456 /* Intersection */) && !isGenericType(type) && some(type.types, isValidIndexKeyType); } function getConstraintDeclaration(type) { return mapDefined(filter(type.symbol && type.symbol.declarations, isTypeParameterDeclaration), getEffectiveConstraintOfTypeParameter)[0]; @@ -64909,10 +65055,10 @@ function createTypeChecker(host) { return isNoInferTargetType(type) ? getOrCreateSubstitutionType(type, unknownType) : type; } function isNoInferTargetType(type) { - return !!(type.flags & 3145728 /* UnionOrIntersection */ && some(type.types, isNoInferTargetType) || type.flags & 33554432 /* Substitution */ && !isNoInferType(type) && isNoInferTargetType(type.baseType) || type.flags & 524288 /* Object */ && !isEmptyAnonymousObjectType(type) || type.flags & (465829888 /* Instantiable */ & ~33554432 /* Substitution */) && !isPatternLiteralType(type)); + return !!(type.flags & 402653184 /* UnionOrIntersection */ && some(type.types, isNoInferTargetType) || type.flags & 16777216 /* Substitution */ && !isNoInferType(type) && isNoInferTargetType(type.baseType) || type.flags & 1048576 /* Object */ && !isEmptyAnonymousObjectType(type) || type.flags & (132644864 /* Instantiable */ & ~16777216 /* Substitution */) && !isPatternLiteralType(type)); } function isNoInferType(type) { - return !!(type.flags & 33554432 /* Substitution */ && type.constraint.flags & 2 /* Unknown */); + return !!(type.flags & 16777216 /* Substitution */ && type.constraint.flags & 2 /* Unknown */); } function getSubstitutionType(baseType, constraint) { return constraint.flags & 3 /* AnyOrUnknown */ || constraint === baseType || baseType.flags & 1 /* Any */ ? baseType : getOrCreateSubstitutionType(baseType, constraint); @@ -64923,7 +65069,7 @@ function createTypeChecker(host) { if (cached) { return cached; } - const result = createType(33554432 /* Substitution */); + const result = createType(16777216 /* Substitution */); result.baseType = baseType; result.constraint = constraint; substitutionTypes.set(id, result); @@ -64946,12 +65092,12 @@ function createTypeChecker(host) { if (parent2.kind === 170 /* Parameter */) { covariant = !covariant; } - if ((covariant || type.flags & 8650752 /* TypeVariable */) && parent2.kind === 195 /* ConditionalType */ && node === parent2.trueType) { + if ((covariant || type.flags & 34078720 /* TypeVariable */) && parent2.kind === 195 /* ConditionalType */ && node === parent2.trueType) { const constraint = getImpliedConstraint(type, parent2.checkType, parent2.extendsType); if (constraint) { constraints = append(constraints, constraint); } - } else if (type.flags & 262144 /* TypeParameter */ && parent2.kind === 201 /* MappedType */ && !parent2.nameType && node === parent2.type) { + } else if (type.flags & 524288 /* TypeParameter */ && parent2.kind === 201 /* MappedType */ && !parent2.nameType && node === parent2.type) { const mappedType = getTypeFromTypeNode(parent2); if (getTypeParameterFromMappedType(mappedType) === getActualTypeVariable(type)) { const typeParameter = getHomomorphicTypeVariable(mappedType); @@ -65039,7 +65185,7 @@ function createTypeChecker(host) { } function getTypeFromJSDocNullableTypeNode(node) { const type = getTypeFromTypeNode(node.type); - return strictNullChecks ? getNullableType(type, 65536 /* Null */) : type; + return strictNullChecks ? getNullableType(type, 8 /* Null */) : type; } function getTypeFromTypeReference(node) { const links = getNodeLinks(node); @@ -65106,7 +65252,7 @@ function createTypeChecker(host) { return arity ? emptyGenericType : emptyObjectType; } const type = getDeclaredTypeOfSymbol(symbol); - if (!(type.flags & 524288 /* Object */)) { + if (!(type.flags & 1048576 /* Object */)) { error2(getTypeDeclaration(symbol), Diagnostics.Global_type_0_must_be_a_class_or_interface_type, symbolName(symbol)); return arity ? emptyGenericType : emptyObjectType; } @@ -65703,7 +65849,7 @@ function createTypeChecker(host) { return createTypeReference(target, elementTypes); } if (target.combinedFlags & 8 /* Variadic */) { - const unionIndex = findIndex(elementTypes, (t, i) => !!(target.elementFlags[i] & 8 /* Variadic */ && t.flags & (131072 /* Never */ | 1048576 /* Union */))); + const unionIndex = findIndex(elementTypes, (t, i) => !!(target.elementFlags[i] & 8 /* Variadic */ && t.flags & (262144 /* Never */ | 134217728 /* Union */))); if (unionIndex >= 0) { return checkCrossProductUnion(map(elementTypes, (t, i) => target.elementFlags[i] & 8 /* Variadic */ ? t : unknownType)) ? mapType(elementTypes[unionIndex], (t) => createNormalizedTupleType(target, replaceElement(elementTypes, unionIndex, t))) : errorType; } @@ -65720,7 +65866,7 @@ function createTypeChecker(host) { if (flags & 8 /* Variadic */) { if (type.flags & 1 /* Any */) { addElement(type, 4 /* Rest */, (_a = target.labeledElementDeclarations) == null ? void 0 : _a[i]); - } else if (type.flags & 58982400 /* InstantiableNonPrimitive */ || isGenericMappedType(type)) { + } else if (type.flags & 117964800 /* InstantiableNonPrimitive */ || isGenericMappedType(type)) { addElement(type, 8 /* Variadic */, (_b = target.labeledElementDeclarations) == null ? void 0 : _b[i]); } else if (isTupleType(type)) { const elements = getElementTypes(type); @@ -65812,10 +65958,10 @@ function createTypeChecker(host) { return type.id; } function containsType(types, type) { - return binarySearch(types, type, getTypeId, compareValues) >= 0; + return stableTypeOrdering ? binarySearch(types, type, identity, compareTypes) >= 0 : binarySearch(types, type, getTypeId, compareValues) >= 0; } function insertType(types, type) { - const index = binarySearch(types, type, getTypeId, compareValues); + const index = stableTypeOrdering ? binarySearch(types, type, identity, compareTypes) : binarySearch(types, type, getTypeId, compareValues); if (index < 0) { types.splice(~index, 0, type); return true; @@ -65824,17 +65970,17 @@ function createTypeChecker(host) { } function addTypeToUnion(typeSet, includes, type) { const flags = type.flags; - if (!(flags & 131072 /* Never */)) { - includes |= flags & 473694207 /* IncludesMask */; - if (flags & 465829888 /* Instantiable */) includes |= 33554432 /* IncludesInstantiable */; - if (flags & 2097152 /* Intersection */ && getObjectFlags(type) & 67108864 /* IsConstrainedTypeVariable */) includes |= 536870912 /* IncludesConstrainedTypeVariable */; - if (type === wildcardType) includes |= 8388608 /* IncludesWildcard */; + if (!(flags & 262144 /* Never */)) { + includes |= flags & 416808959 /* IncludesMask */; + if (flags & 132644864 /* Instantiable */) includes |= 16777216 /* IncludesInstantiable */; + if (flags & 268435456 /* Intersection */ && getObjectFlags(type) & 67108864 /* IsConstrainedTypeVariable */) includes |= 536870912 /* IncludesConstrainedTypeVariable */; + if (type === wildcardType) includes |= 33554432 /* IncludesWildcard */; if (isErrorType(type)) includes |= 1073741824 /* IncludesError */; - if (!strictNullChecks && flags & 98304 /* Nullable */) { - if (!(getObjectFlags(type) & 65536 /* ContainsWideningType */)) includes |= 4194304 /* IncludesNonWideningType */; + if (!strictNullChecks && flags & 12 /* Nullable */) { + if (!(getObjectFlags(type) & 65536 /* ContainsWideningType */)) includes |= 2097152 /* IncludesNonWideningType */; } else { const len = typeSet.length; - const index = len && type.id > typeSet[len - 1].id ? ~len : binarySearch(typeSet, type, getTypeId, compareValues); + const index = stableTypeOrdering ? binarySearch(typeSet, type, identity, compareTypes) : len && type.id > typeSet[len - 1].id ? ~len : binarySearch(typeSet, type, getTypeId, compareValues); if (index < 0) { typeSet.splice(~index, 0, type); } @@ -65846,7 +65992,7 @@ function createTypeChecker(host) { let lastType; for (const type of types) { if (type !== lastType) { - includes = type.flags & 1048576 /* Union */ ? addTypesToUnion(typeSet, includes | (isNamedUnionType(type) ? 1048576 /* Union */ : 0), type.types) : addTypeToUnion(typeSet, includes, type); + includes = type.flags & 134217728 /* Union */ ? addTypesToUnion(typeSet, includes | (isNamedUnionType(type) ? 134217728 /* Union */ : 0), type.types) : addTypeToUnion(typeSet, includes, type); lastType = type; } } @@ -65862,21 +66008,21 @@ function createTypeChecker(host) { if (match) { return match; } - const hasEmptyObject = hasObjectTypes && some(types, (t) => !!(t.flags & 524288 /* Object */) && !isGenericMappedType(t) && isEmptyResolvedType(resolveStructuredTypeMembers(t))); + const hasEmptyObject = hasObjectTypes && some(types, (t) => !!(t.flags & 1048576 /* Object */) && !isGenericMappedType(t) && isEmptyResolvedType(resolveStructuredTypeMembers(t))); const len = types.length; let i = len; let count = 0; while (i > 0) { i--; const source = types[i]; - if (hasEmptyObject || source.flags & 469499904 /* StructuredOrInstantiable */) { - if (source.flags & 262144 /* TypeParameter */ && getBaseConstraintOrType(source).flags & 1048576 /* Union */) { + if (hasEmptyObject || source.flags & 536346624 /* StructuredOrInstantiable */) { + if (source.flags & 524288 /* TypeParameter */ && getBaseConstraintOrType(source).flags & 134217728 /* Union */) { if (isTypeRelatedTo(source, getUnionType(map(types, (t) => t === source ? neverType : t)), strictSubtypeRelation)) { orderedRemoveItemAt(types, i); } continue; } - const keyProperty = source.flags & (524288 /* Object */ | 2097152 /* Intersection */ | 58982400 /* InstantiableNonPrimitive */) ? find(getPropertiesOfType(source), (p) => isUnitType(getTypeOfSymbol(p))) : void 0; + const keyProperty = source.flags & (1048576 /* Object */ | 268435456 /* Intersection */ | 117964800 /* InstantiableNonPrimitive */) ? find(getPropertiesOfType(source), (p) => isUnitType(getTypeOfSymbol(p))) : void 0; const keyPropertyType = keyProperty && getRegularTypeOfLiteralType(getTypeOfSymbol(keyProperty)); for (const target of types) { if (source !== target) { @@ -65889,7 +66035,7 @@ function createTypeChecker(host) { } } count++; - if (keyProperty && target.flags & (524288 /* Object */ | 2097152 /* Intersection */ | 58982400 /* InstantiableNonPrimitive */)) { + if (keyProperty && target.flags & (1048576 /* Object */ | 268435456 /* Intersection */ | 117964800 /* InstantiableNonPrimitive */)) { const t = getTypeOfPropertyOfType(target, keyProperty.escapedName); if (t && isUnitType(t) && getRegularTypeOfLiteralType(t) !== keyPropertyType) { continue; @@ -65912,7 +66058,7 @@ function createTypeChecker(host) { i--; const t = types[i]; const flags = t.flags; - const remove = flags & (128 /* StringLiteral */ | 134217728 /* TemplateLiteral */ | 268435456 /* StringMapping */) && includes & 4 /* String */ || flags & 256 /* NumberLiteral */ && includes & 8 /* Number */ || flags & 2048 /* BigIntLiteral */ && includes & 64 /* BigInt */ || flags & 8192 /* UniqueESSymbol */ && includes & 4096 /* ESSymbol */ || reduceVoidUndefined && flags & 32768 /* Undefined */ && includes & 16384 /* Void */ || isFreshLiteralType(t) && containsType(types, t.regularType); + const remove = flags & (1024 /* StringLiteral */ | 4194304 /* TemplateLiteral */ | 8388608 /* StringMapping */) && includes & 32 /* String */ || flags & 2048 /* NumberLiteral */ && includes & 64 /* Number */ || flags & 4096 /* BigIntLiteral */ && includes & 128 /* BigInt */ || flags & 16384 /* UniqueESSymbol */ && includes & 512 /* ESSymbol */ || reduceVoidUndefined && flags & 4 /* Undefined */ && includes & 16 /* Void */ || isFreshLiteralType(t) && containsType(types, t.regularType); if (remove) { orderedRemoveItemAt(types, i); } @@ -65925,28 +66071,28 @@ function createTypeChecker(host) { while (i > 0) { i--; const t = types[i]; - if (t.flags & 128 /* StringLiteral */ && some(templates, (template) => isTypeMatchedByTemplateLiteralOrStringMapping(t, template))) { + if (t.flags & 1024 /* StringLiteral */ && some(templates, (template) => isTypeMatchedByTemplateLiteralOrStringMapping(t, template))) { orderedRemoveItemAt(types, i); } } } } function isTypeMatchedByTemplateLiteralOrStringMapping(type, template) { - return template.flags & 134217728 /* TemplateLiteral */ ? isTypeMatchedByTemplateLiteralType(type, template) : isMemberOfStringMapping(type, template); + return template.flags & 4194304 /* TemplateLiteral */ ? isTypeMatchedByTemplateLiteralType(type, template) : isMemberOfStringMapping(type, template); } function removeConstrainedTypeVariables(types) { const typeVariables = []; for (const type of types) { - if (type.flags & 2097152 /* Intersection */ && getObjectFlags(type) & 67108864 /* IsConstrainedTypeVariable */) { - const index = type.types[0].flags & 8650752 /* TypeVariable */ ? 0 : 1; + if (type.flags & 268435456 /* Intersection */ && getObjectFlags(type) & 67108864 /* IsConstrainedTypeVariable */) { + const index = type.types[0].flags & 34078720 /* TypeVariable */ ? 0 : 1; pushIfUnique(typeVariables, type.types[index]); } } for (const typeVariable of typeVariables) { const primitives = []; for (const type of types) { - if (type.flags & 2097152 /* Intersection */ && getObjectFlags(type) & 67108864 /* IsConstrainedTypeVariable */) { - const index = type.types[0].flags & 8650752 /* TypeVariable */ ? 0 : 1; + if (type.flags & 268435456 /* Intersection */ && getObjectFlags(type) & 67108864 /* IsConstrainedTypeVariable */) { + const index = type.types[0].flags & 34078720 /* TypeVariable */ ? 0 : 1; if (type.types[index] === typeVariable) { insertType(primitives, type.types[1 - index]); } @@ -65958,8 +66104,8 @@ function createTypeChecker(host) { while (i > 0) { i--; const type = types[i]; - if (type.flags & 2097152 /* Intersection */ && getObjectFlags(type) & 67108864 /* IsConstrainedTypeVariable */) { - const index = type.types[0].flags & 8650752 /* TypeVariable */ ? 0 : 1; + if (type.flags & 268435456 /* Intersection */ && getObjectFlags(type) & 67108864 /* IsConstrainedTypeVariable */) { + const index = type.types[0].flags & 34078720 /* TypeVariable */ ? 0 : 1; if (type.types[index] === typeVariable && containsType(primitives, type.types[1 - index])) { orderedRemoveItemAt(types, i); } @@ -65970,15 +66116,15 @@ function createTypeChecker(host) { } } function isNamedUnionType(type) { - return !!(type.flags & 1048576 /* Union */ && (type.aliasSymbol || type.origin)); + return !!(type.flags & 134217728 /* Union */ && (type.aliasSymbol || type.origin)); } function addNamedUnions(namedUnions, types) { for (const t of types) { - if (t.flags & 1048576 /* Union */) { + if (t.flags & 134217728 /* Union */) { const origin = t.origin; - if (t.aliasSymbol || origin && !(origin.flags & 1048576 /* Union */)) { + if (t.aliasSymbol || origin && !(origin.flags & 134217728 /* Union */)) { pushIfUnique(namedUnions, t); - } else if (origin && origin.flags & 1048576 /* Union */) { + } else if (origin && origin.flags & 134217728 /* Union */) { addNamedUnions(namedUnions, origin.types); } } @@ -65996,7 +66142,7 @@ function createTypeChecker(host) { if (types.length === 1) { return types[0]; } - if (types.length === 2 && !origin && (types[0].flags & 1048576 /* Union */ || types[1].flags & 1048576 /* Union */)) { + if (types.length === 2 && !origin && (types[0].flags & 134217728 /* Union */ || types[1].flags & 134217728 /* Union */)) { const infix = unionReduction === 0 /* None */ ? "N" : unionReduction === 2 /* Subtype */ ? "S" : "L"; const index = types[0].id < types[1].id ? 0 : 1; const id = types[index].id + infix + types[1 - index].id + getAliasId(aliasSymbol, aliasTypeArguments); @@ -66021,33 +66167,33 @@ function createTypeChecker(host) { const includes = addTypesToUnion(typeSet, 0, types); if (unionReduction !== 0 /* None */) { if (includes & 3 /* AnyOrUnknown */) { - return includes & 1 /* Any */ ? includes & 8388608 /* IncludesWildcard */ ? wildcardType : includes & 1073741824 /* IncludesError */ ? errorType : anyType : unknownType; + return includes & 1 /* Any */ ? includes & 33554432 /* IncludesWildcard */ ? wildcardType : includes & 1073741824 /* IncludesError */ ? errorType : anyType : unknownType; } - if (includes & 32768 /* Undefined */) { + if (includes & 4 /* Undefined */) { if (typeSet.length >= 2 && typeSet[0] === undefinedType && typeSet[1] === missingType) { orderedRemoveItemAt(typeSet, 1); } } - if (includes & (32 /* Enum */ | 2944 /* Literal */ | 8192 /* UniqueESSymbol */ | 134217728 /* TemplateLiteral */ | 268435456 /* StringMapping */) || includes & 16384 /* Void */ && includes & 32768 /* Undefined */) { + if (includes & (65536 /* Enum */ | 15360 /* Literal */ | 16384 /* UniqueESSymbol */ | 4194304 /* TemplateLiteral */ | 8388608 /* StringMapping */) || includes & 16 /* Void */ && includes & 4 /* Undefined */) { removeRedundantLiteralTypes(typeSet, includes, !!(unionReduction & 2 /* Subtype */)); } - if (includes & 128 /* StringLiteral */ && includes & (134217728 /* TemplateLiteral */ | 268435456 /* StringMapping */)) { + if (includes & 1024 /* StringLiteral */ && includes & (4194304 /* TemplateLiteral */ | 8388608 /* StringMapping */)) { removeStringLiteralsMatchedByTemplateLiterals(typeSet); } if (includes & 536870912 /* IncludesConstrainedTypeVariable */) { removeConstrainedTypeVariables(typeSet); } if (unionReduction === 2 /* Subtype */) { - typeSet = removeSubtypes(typeSet, !!(includes & 524288 /* Object */)); + typeSet = removeSubtypes(typeSet, !!(includes & 1048576 /* Object */)); if (!typeSet) { return errorType; } } if (typeSet.length === 0) { - return includes & 65536 /* Null */ ? includes & 4194304 /* IncludesNonWideningType */ ? nullType : nullWideningType : includes & 32768 /* Undefined */ ? includes & 4194304 /* IncludesNonWideningType */ ? undefinedType : undefinedWideningType : neverType; + return includes & 8 /* Null */ ? includes & 2097152 /* IncludesNonWideningType */ ? nullType : nullWideningType : includes & 4 /* Undefined */ ? includes & 2097152 /* IncludesNonWideningType */ ? undefinedType : undefinedWideningType : neverType; } } - if (!origin && includes & 1048576 /* Union */) { + if (!origin && includes & 134217728 /* Union */) { const namedUnions = []; addNamedUnions(namedUnions, types); const reducedTypes = []; @@ -66064,10 +66210,10 @@ function createTypeChecker(host) { for (const t of namedUnions) { insertType(reducedTypes, t); } - origin = createOriginUnionOrIntersectionType(1048576 /* Union */, reducedTypes); + origin = createOriginUnionOrIntersectionType(134217728 /* Union */, reducedTypes); } } - const objectFlags = (includes & 36323331 /* NotPrimitiveUnion */ ? 0 : 32768 /* PrimitiveUnion */) | (includes & 2097152 /* Intersection */ ? 16777216 /* ContainsIntersections */ : 0); + const objectFlags = (includes & 286523411 /* NotPrimitiveUnion */ ? 0 : 32768 /* PrimitiveUnion */) | (includes & 268435456 /* Intersection */ ? 16777216 /* ContainsIntersections */ : 0); return getUnionTypeFromSortedList(typeSet, objectFlags, aliasSymbol, aliasTypeArguments, origin); } function getUnionOrIntersectionTypePredicate(signatures, kind) { @@ -66082,7 +66228,7 @@ function createTypeChecker(host) { last2 = pred; types.push(pred.type); } else { - const returnType = kind !== 2097152 /* Intersection */ ? getReturnTypeOfSignature(sig) : void 0; + const returnType = kind !== 268435456 /* Intersection */ ? getReturnTypeOfSignature(sig) : void 0; if (returnType !== falseType && returnType !== regularFalseType) { return void 0; } @@ -66104,22 +66250,22 @@ function createTypeChecker(host) { if (types.length === 1) { return types[0]; } - const typeKey = !origin ? getTypeListId(types) : origin.flags & 1048576 /* Union */ ? `|${getTypeListId(origin.types)}` : origin.flags & 2097152 /* Intersection */ ? `&${getTypeListId(origin.types)}` : `#${origin.type.id}|${getTypeListId(types)}`; + const typeKey = !origin ? getTypeListId(types) : origin.flags & 134217728 /* Union */ ? `|${getTypeListId(origin.types)}` : origin.flags & 268435456 /* Intersection */ ? `&${getTypeListId(origin.types)}` : `#${origin.type.id}|${getTypeListId(types)}`; const id = typeKey + getAliasId(aliasSymbol, aliasTypeArguments); let type = unionTypes.get(id); if (!type) { - type = createType(1048576 /* Union */); + type = createType(134217728 /* Union */); type.objectFlags = precomputedObjectFlags | getPropagatingFlagsOfTypes( types, /*excludeKinds*/ - 98304 /* Nullable */ + 12 /* Nullable */ ); type.types = types; type.origin = origin; type.aliasSymbol = aliasSymbol; type.aliasTypeArguments = aliasTypeArguments; - if (types.length === 2 && types[0].flags & 512 /* BooleanLiteral */ && types[1].flags & 512 /* BooleanLiteral */) { - type.flags |= 16 /* Boolean */; + if (types.length === 2 && types[0].flags & 8192 /* BooleanLiteral */ && types[1].flags & 8192 /* BooleanLiteral */) { + type.flags |= 256 /* Boolean */; type.intrinsicName = "boolean"; } unionTypes.set(id, type); @@ -66136,31 +66282,31 @@ function createTypeChecker(host) { } function addTypeToIntersection(typeSet, includes, type) { const flags = type.flags; - if (flags & 2097152 /* Intersection */) { + if (flags & 268435456 /* Intersection */) { return addTypesToIntersection(typeSet, includes, type.types); } if (isEmptyAnonymousObjectType(type)) { - if (!(includes & 16777216 /* IncludesEmptyObject */)) { - includes |= 16777216 /* IncludesEmptyObject */; + if (!(includes & 67108864 /* IncludesEmptyObject */)) { + includes |= 67108864 /* IncludesEmptyObject */; typeSet.set(type.id.toString(), type); } } else { if (flags & 3 /* AnyOrUnknown */) { - if (type === wildcardType) includes |= 8388608 /* IncludesWildcard */; + if (type === wildcardType) includes |= 33554432 /* IncludesWildcard */; if (isErrorType(type)) includes |= 1073741824 /* IncludesError */; - } else if (strictNullChecks || !(flags & 98304 /* Nullable */)) { + } else if (strictNullChecks || !(flags & 12 /* Nullable */)) { if (type === missingType) { - includes |= 262144 /* IncludesMissingType */; + includes |= 524288 /* IncludesMissingType */; type = undefinedType; } if (!typeSet.has(type.id.toString())) { - if (type.flags & 109472 /* Unit */ && includes & 109472 /* Unit */) { - includes |= 67108864 /* NonPrimitive */; + if (type.flags & 97292 /* Unit */ && includes & 97292 /* Unit */) { + includes |= 131072 /* NonPrimitive */; } typeSet.set(type.id.toString(), type); } } - includes |= flags & 473694207 /* IncludesMask */; + includes |= flags & 416808959 /* IncludesMask */; } return includes; } @@ -66175,7 +66321,7 @@ function createTypeChecker(host) { while (i > 0) { i--; const t = types[i]; - const remove = t.flags & 4 /* String */ && includes & (128 /* StringLiteral */ | 134217728 /* TemplateLiteral */ | 268435456 /* StringMapping */) || t.flags & 8 /* Number */ && includes & 256 /* NumberLiteral */ || t.flags & 64 /* BigInt */ && includes & 2048 /* BigIntLiteral */ || t.flags & 4096 /* ESSymbol */ && includes & 8192 /* UniqueESSymbol */ || t.flags & 16384 /* Void */ && includes & 32768 /* Undefined */ || isEmptyAnonymousObjectType(t) && includes & 470302716 /* DefinitelyNonNullable */; + const remove = t.flags & 32 /* String */ && includes & (1024 /* StringLiteral */ | 4194304 /* TemplateLiteral */ | 8388608 /* StringMapping */) || t.flags & 64 /* Number */ && includes & 2048 /* NumberLiteral */ || t.flags & 128 /* BigInt */ && includes & 4096 /* BigIntLiteral */ || t.flags & 512 /* ESSymbol */ && includes & 16384 /* UniqueESSymbol */ || t.flags & 16 /* Void */ && includes & 4 /* Undefined */ || isEmptyAnonymousObjectType(t) && includes & 13893600 /* DefinitelyNonNullable */; if (remove) { orderedRemoveItemAt(types, i); } @@ -66190,7 +66336,7 @@ function createTypeChecker(host) { if (type === undefinedType) { return containsType(u.types, missingType); } - const primitive = type.flags & 128 /* StringLiteral */ ? stringType : type.flags & (32 /* Enum */ | 256 /* NumberLiteral */) ? numberType : type.flags & 2048 /* BigIntLiteral */ ? bigintType : type.flags & 8192 /* UniqueESSymbol */ ? esSymbolType : void 0; + const primitive = type.flags & 1024 /* StringLiteral */ ? stringType : type.flags & (65536 /* Enum */ | 2048 /* NumberLiteral */) ? numberType : type.flags & 4096 /* BigIntLiteral */ ? bigintType : type.flags & 16384 /* UniqueESSymbol */ ? esSymbolType : void 0; if (!primitive || !containsType(u.types, primitive)) { return false; } @@ -66200,11 +66346,11 @@ function createTypeChecker(host) { } function extractRedundantTemplateLiterals(types) { let i = types.length; - const literals = filter(types, (t) => !!(t.flags & 128 /* StringLiteral */)); + const literals = filter(types, (t) => !!(t.flags & 1024 /* StringLiteral */)); while (i > 0) { i--; const t = types[i]; - if (!(t.flags & (134217728 /* TemplateLiteral */ | 268435456 /* StringMapping */))) continue; + if (!(t.flags & (4194304 /* TemplateLiteral */ | 8388608 /* StringMapping */))) continue; for (const t2 of literals) { if (isTypeSubtypeOf(t2, t)) { orderedRemoveItemAt(types, i); @@ -66262,11 +66408,11 @@ function createTypeChecker(host) { return true; } function createIntersectionType(types, objectFlags, aliasSymbol, aliasTypeArguments) { - const result = createType(2097152 /* Intersection */); + const result = createType(268435456 /* Intersection */); result.objectFlags = objectFlags | getPropagatingFlagsOfTypes( types, /*excludeKinds*/ - 98304 /* Nullable */ + 12 /* Nullable */ ); result.types = types; result.aliasSymbol = aliasSymbol; @@ -66278,25 +66424,25 @@ function createTypeChecker(host) { const includes = addTypesToIntersection(typeMembershipMap, 0, types); const typeSet = arrayFrom(typeMembershipMap.values()); let objectFlags = 0 /* None */; - if (includes & 131072 /* Never */) { + if (includes & 262144 /* Never */) { return contains(typeSet, silentNeverType) ? silentNeverType : neverType; } - if (strictNullChecks && includes & 98304 /* Nullable */ && includes & (524288 /* Object */ | 67108864 /* NonPrimitive */ | 16777216 /* IncludesEmptyObject */) || includes & 67108864 /* NonPrimitive */ && includes & (469892092 /* DisjointDomains */ & ~67108864 /* NonPrimitive */) || includes & 402653316 /* StringLike */ && includes & (469892092 /* DisjointDomains */ & ~402653316 /* StringLike */) || includes & 296 /* NumberLike */ && includes & (469892092 /* DisjointDomains */ & ~296 /* NumberLike */) || includes & 2112 /* BigIntLike */ && includes & (469892092 /* DisjointDomains */ & ~2112 /* BigIntLike */) || includes & 12288 /* ESSymbolLike */ && includes & (469892092 /* DisjointDomains */ & ~12288 /* ESSymbolLike */) || includes & 49152 /* VoidLike */ && includes & (469892092 /* DisjointDomains */ & ~49152 /* VoidLike */)) { + if (strictNullChecks && includes & 12 /* Nullable */ && includes & (1048576 /* Object */ | 131072 /* NonPrimitive */ | 67108864 /* IncludesEmptyObject */) || includes & 131072 /* NonPrimitive */ && includes & (12812284 /* DisjointDomains */ & ~131072 /* NonPrimitive */) || includes & 12583968 /* StringLike */ && includes & (12812284 /* DisjointDomains */ & ~12583968 /* StringLike */) || includes & 67648 /* NumberLike */ && includes & (12812284 /* DisjointDomains */ & ~67648 /* NumberLike */) || includes & 4224 /* BigIntLike */ && includes & (12812284 /* DisjointDomains */ & ~4224 /* BigIntLike */) || includes & 16896 /* ESSymbolLike */ && includes & (12812284 /* DisjointDomains */ & ~16896 /* ESSymbolLike */) || includes & 20 /* VoidLike */ && includes & (12812284 /* DisjointDomains */ & ~20 /* VoidLike */)) { return neverType; } - if (includes & (134217728 /* TemplateLiteral */ | 268435456 /* StringMapping */) && includes & 128 /* StringLiteral */ && extractRedundantTemplateLiterals(typeSet)) { + if (includes & (4194304 /* TemplateLiteral */ | 8388608 /* StringMapping */) && includes & 1024 /* StringLiteral */ && extractRedundantTemplateLiterals(typeSet)) { return neverType; } if (includes & 1 /* Any */) { - return includes & 8388608 /* IncludesWildcard */ ? wildcardType : includes & 1073741824 /* IncludesError */ ? errorType : anyType; + return includes & 33554432 /* IncludesWildcard */ ? wildcardType : includes & 1073741824 /* IncludesError */ ? errorType : anyType; } - if (!strictNullChecks && includes & 98304 /* Nullable */) { - return includes & 16777216 /* IncludesEmptyObject */ ? neverType : includes & 32768 /* Undefined */ ? undefinedType : nullType; + if (!strictNullChecks && includes & 12 /* Nullable */) { + return includes & 67108864 /* IncludesEmptyObject */ ? neverType : includes & 4 /* Undefined */ ? undefinedType : nullType; } - if (includes & 4 /* String */ && includes & (128 /* StringLiteral */ | 134217728 /* TemplateLiteral */ | 268435456 /* StringMapping */) || includes & 8 /* Number */ && includes & 256 /* NumberLiteral */ || includes & 64 /* BigInt */ && includes & 2048 /* BigIntLiteral */ || includes & 4096 /* ESSymbol */ && includes & 8192 /* UniqueESSymbol */ || includes & 16384 /* Void */ && includes & 32768 /* Undefined */ || includes & 16777216 /* IncludesEmptyObject */ && includes & 470302716 /* DefinitelyNonNullable */) { + if (includes & 32 /* String */ && includes & (1024 /* StringLiteral */ | 4194304 /* TemplateLiteral */ | 8388608 /* StringMapping */) || includes & 64 /* Number */ && includes & 2048 /* NumberLiteral */ || includes & 128 /* BigInt */ && includes & 4096 /* BigIntLiteral */ || includes & 512 /* ESSymbol */ && includes & 16384 /* UniqueESSymbol */ || includes & 16 /* Void */ && includes & 4 /* Undefined */ || includes & 67108864 /* IncludesEmptyObject */ && includes & 13893600 /* DefinitelyNonNullable */) { if (!(flags & 1 /* NoSupertypeReduction */)) removeRedundantSupertypes(typeSet, includes); } - if (includes & 262144 /* IncludesMissingType */) { + if (includes & 524288 /* IncludesMissingType */) { typeSet[typeSet.indexOf(undefinedType)] = missingType; } if (typeSet.length === 0) { @@ -66306,16 +66452,16 @@ function createTypeChecker(host) { return typeSet[0]; } if (typeSet.length === 2 && !(flags & 2 /* NoConstraintReduction */)) { - const typeVarIndex = typeSet[0].flags & 8650752 /* TypeVariable */ ? 0 : 1; + const typeVarIndex = typeSet[0].flags & 34078720 /* TypeVariable */ ? 0 : 1; const typeVariable = typeSet[typeVarIndex]; const primitiveType = typeSet[1 - typeVarIndex]; - if (typeVariable.flags & 8650752 /* TypeVariable */ && (primitiveType.flags & (402784252 /* Primitive */ | 67108864 /* NonPrimitive */) && !isGenericStringLikeType(primitiveType) || includes & 16777216 /* IncludesEmptyObject */)) { + if (typeVariable.flags & 34078720 /* TypeVariable */ && (primitiveType.flags & (12713980 /* Primitive */ | 131072 /* NonPrimitive */) && !isGenericStringLikeType(primitiveType) || includes & 67108864 /* IncludesEmptyObject */)) { const constraint = getBaseConstraintOfType(typeVariable); - if (constraint && everyType(constraint, (t) => !!(t.flags & (402784252 /* Primitive */ | 67108864 /* NonPrimitive */)) || isEmptyAnonymousObjectType(t))) { + if (constraint && everyType(constraint, (t) => !!(t.flags & (12713980 /* Primitive */ | 131072 /* NonPrimitive */)) || isEmptyAnonymousObjectType(t))) { if (isTypeStrictSubtypeOf(constraint, primitiveType)) { return typeVariable; } - if (!(constraint.flags & 1048576 /* Union */ && someType(constraint, (c) => isTypeStrictSubtypeOf(c, primitiveType)))) { + if (!(constraint.flags & 134217728 /* Union */ && someType(constraint, (c) => isTypeStrictSubtypeOf(c, primitiveType)))) { if (!isTypeStrictSubtypeOf(primitiveType, constraint)) { return neverType; } @@ -66327,15 +66473,15 @@ function createTypeChecker(host) { const id = getTypeListId(typeSet) + (flags & 2 /* NoConstraintReduction */ ? "*" : getAliasId(aliasSymbol, aliasTypeArguments)); let result = intersectionTypes.get(id); if (!result) { - if (includes & 1048576 /* Union */) { + if (includes & 134217728 /* Union */) { if (intersectUnionsOfPrimitiveTypes(typeSet)) { result = getIntersectionType(typeSet, flags, aliasSymbol, aliasTypeArguments); - } else if (every(typeSet, (t) => !!(t.flags & 1048576 /* Union */ && t.types[0].flags & 32768 /* Undefined */))) { + } else if (every(typeSet, (t) => !!(t.flags & 134217728 /* Union */ && t.types[0].flags & 4 /* Undefined */))) { const containedUndefinedType = some(typeSet, containsMissingType) ? missingType : undefinedType; - removeFromEach(typeSet, 32768 /* Undefined */); + removeFromEach(typeSet, 4 /* Undefined */); result = getUnionType([getIntersectionType(typeSet, flags), containedUndefinedType], 1 /* Literal */, aliasSymbol, aliasTypeArguments); - } else if (every(typeSet, (t) => !!(t.flags & 1048576 /* Union */ && (t.types[0].flags & 65536 /* Null */ || t.types[1].flags & 65536 /* Null */)))) { - removeFromEach(typeSet, 65536 /* Null */); + } else if (every(typeSet, (t) => !!(t.flags & 134217728 /* Union */ && (t.types[0].flags & 8 /* Null */ || t.types[1].flags & 8 /* Null */)))) { + removeFromEach(typeSet, 8 /* Null */); result = getUnionType([getIntersectionType(typeSet, flags), nullType], 1 /* Literal */, aliasSymbol, aliasTypeArguments); } else if (typeSet.length >= 3 && types.length > 2) { const middle = Math.floor(typeSet.length / 2); @@ -66345,7 +66491,7 @@ function createTypeChecker(host) { return errorType; } const constituents = getCrossProductIntersections(typeSet, flags); - const origin = some(constituents, (t) => !!(t.flags & 2097152 /* Intersection */)) && getConstituentCountOfTypes(constituents) > getConstituentCountOfTypes(typeSet) ? createOriginUnionOrIntersectionType(2097152 /* Intersection */, typeSet) : void 0; + const origin = some(constituents, (t) => !!(t.flags & 268435456 /* Intersection */)) && getConstituentCountOfTypes(constituents) > getConstituentCountOfTypes(typeSet) ? createOriginUnionOrIntersectionType(268435456 /* Intersection */, typeSet) : void 0; result = getUnionType(constituents, 1 /* Literal */, aliasSymbol, aliasTypeArguments, origin); } } else { @@ -66356,7 +66502,7 @@ function createTypeChecker(host) { return result; } function getCrossProductUnionSize(types) { - return reduceLeft(types, (n, t) => t.flags & 1048576 /* Union */ ? n * t.types.length : t.flags & 131072 /* Never */ ? 0 : n, 1); + return reduceLeft(types, (n, t) => t.flags & 134217728 /* Union */ ? n * t.types.length : t.flags & 262144 /* Never */ ? 0 : n, 1); } function checkCrossProductUnion(types) { var _a; @@ -66375,7 +66521,7 @@ function createTypeChecker(host) { const constituents = types.slice(); let n = i; for (let j = types.length - 1; j >= 0; j--) { - if (types[j].flags & 1048576 /* Union */) { + if (types[j].flags & 134217728 /* Union */) { const sourceTypes = types[j].types; const length2 = sourceTypes.length; constituents[j] = sourceTypes[n % length2]; @@ -66383,12 +66529,12 @@ function createTypeChecker(host) { } } const t = getIntersectionType(constituents, flags); - if (!(t.flags & 131072 /* Never */)) intersections.push(t); + if (!(t.flags & 262144 /* Never */)) intersections.push(t); } return intersections; } function getConstituentCount(type) { - return !(type.flags & 3145728 /* UnionOrIntersection */) || type.aliasSymbol ? 1 : type.flags & 1048576 /* Union */ && type.origin ? getConstituentCount(type.origin) : getConstituentCountOfTypes(type.types); + return !(type.flags & 402653184 /* UnionOrIntersection */) || type.aliasSymbol ? 1 : type.flags & 134217728 /* Union */ && type.origin ? getConstituentCount(type.origin) : getConstituentCountOfTypes(type.types); } function getConstituentCountOfTypes(types) { return reduceLeft(types, (n, t) => n + getConstituentCount(t), 0); @@ -66400,19 +66546,19 @@ function createTypeChecker(host) { const types = map(node.types, getTypeFromTypeNode); const emptyIndex = types.length === 2 ? types.indexOf(emptyTypeLiteralType) : -1; const t = emptyIndex >= 0 ? types[1 - emptyIndex] : unknownType; - const noSupertypeReduction = !!(t.flags & (4 /* String */ | 8 /* Number */ | 64 /* BigInt */) || t.flags & 134217728 /* TemplateLiteral */ && isPatternLiteralType(t)); + const noSupertypeReduction = !!(t.flags & (32 /* String */ | 64 /* Number */ | 128 /* BigInt */) || t.flags & 4194304 /* TemplateLiteral */ && isPatternLiteralType(t)); links.resolvedType = getIntersectionType(types, noSupertypeReduction ? 1 /* NoSupertypeReduction */ : 0, aliasSymbol, getTypeArgumentsForAliasSymbol(aliasSymbol)); } return links.resolvedType; } function createIndexType(type, indexFlags) { - const result = createType(4194304 /* Index */); + const result = createType(2097152 /* Index */); result.type = type; result.indexFlags = indexFlags; return result; } function createOriginIndexType(type) { - const result = createOriginType(4194304 /* Index */); + const result = createOriginType(2097152 /* Index */); result.type = type; return result; } @@ -66434,12 +66580,12 @@ function createTypeChecker(host) { forEachType(constraintType, addMemberForKeyType); } else if (isMappedTypeWithKeyofConstraintDeclaration(type)) { const modifiersType = getApparentType(getModifiersTypeFromMappedType(type)); - forEachMappedTypePropertyKeyTypeAndIndexSignatureKeyType(modifiersType, 8576 /* StringOrNumberLiteralOrUnique */, !!(indexFlags & 1 /* StringsOnly */), addMemberForKeyType); + forEachMappedTypePropertyKeyTypeAndIndexSignatureKeyType(modifiersType, 19456 /* StringOrNumberLiteralOrUnique */, !!(indexFlags & 1 /* StringsOnly */), addMemberForKeyType); } else { forEachType(getLowerBoundOfKeyType(constraintType), addMemberForKeyType); } - const result = indexFlags & 2 /* NoIndexSignatures */ ? filterType(getUnionType(keyTypes), (t) => !(t.flags & (1 /* Any */ | 4 /* String */))) : getUnionType(keyTypes); - if (result.flags & 1048576 /* Union */ && constraintType.flags & 1048576 /* Union */ && getTypeListId(result.types) === getTypeListId(constraintType.types)) { + const result = indexFlags & 2 /* NoIndexSignatures */ ? filterType(getUnionType(keyTypes), (t) => !(t.flags & (1 /* Any */ | 32 /* String */))) : getUnionType(keyTypes); + if (result.flags & 134217728 /* Union */ && constraintType.flags & 134217728 /* Union */ && getTypeListId(result.types) === getTypeListId(constraintType.types)) { return constraintType; } return result; @@ -66448,13 +66594,6 @@ function createTypeChecker(host) { keyTypes.push(propNameType === stringType ? stringOrNumberType : propNameType); } } - function hasDistributiveNameType(mappedType) { - const typeVariable = getTypeParameterFromMappedType(mappedType); - return isDistributive(getNameTypeFromMappedType(mappedType) || typeVariable); - function isDistributive(type) { - return type.flags & (3 /* AnyOrUnknown */ | 402784252 /* Primitive */ | 131072 /* Never */ | 262144 /* TypeParameter */ | 524288 /* Object */ | 67108864 /* NonPrimitive */) ? true : type.flags & 16777216 /* Conditional */ ? type.root.isDistributive && type.checkType === typeVariable : type.flags & (3145728 /* UnionOrIntersection */ | 134217728 /* TemplateLiteral */) ? every(type.types, isDistributive) : type.flags & 8388608 /* IndexedAccess */ ? isDistributive(type.objectType) && isDistributive(type.indexType) : type.flags & 33554432 /* Substitution */ ? isDistributive(type.baseType) && isDistributive(type.constraint) : type.flags & 268435456 /* StringMapping */ ? isDistributive(type.type) : false; - } - } function getLiteralTypeFromPropertyName(name) { if (isPrivateIdentifier(name)) { return neverType; @@ -66488,12 +66627,12 @@ function createTypeChecker(host) { return neverType; } function isKeyTypeIncluded(keyType, include) { - return !!(keyType.flags & include || keyType.flags & 2097152 /* Intersection */ && some(keyType.types, (t) => isKeyTypeIncluded(t, include))); + return !!(keyType.flags & include || keyType.flags & 268435456 /* Intersection */ && some(keyType.types, (t) => isKeyTypeIncluded(t, include))); } function getLiteralTypeFromProperties(type, include, includeOrigin) { const origin = includeOrigin && (getObjectFlags(type) & (3 /* ClassOrInterface */ | 4 /* Reference */) || type.aliasSymbol) ? createOriginIndexType(type) : void 0; const propertyTypes = map(getPropertiesOfType(type), (prop) => getLiteralTypeFromProperty(prop, include)); - const indexKeyTypes = map(getIndexInfosOfType(type), (info) => info !== enumNumberIndexInfo && isKeyTypeIncluded(info.keyType, include) ? info.keyType === stringType && include & 8 /* Number */ ? stringOrNumberType : info.keyType : neverType); + const indexKeyTypes = map(getIndexInfosOfType(type), (info) => info !== enumNumberIndexInfo && isKeyTypeIncluded(info.keyType, include) ? info.keyType === stringType && include & 64 /* Number */ ? stringOrNumberType : info.keyType : neverType); return getUnionType( concatenate(propertyTypes, indexKeyTypes), 1 /* Literal */, @@ -66505,11 +66644,11 @@ function createTypeChecker(host) { ); } function shouldDeferIndexType(type, indexFlags = 0 /* None */) { - return !!(type.flags & 58982400 /* InstantiableNonPrimitive */ || isGenericTupleType(type) || isGenericMappedType(type) && (!hasDistributiveNameType(type) || getMappedTypeNameTypeKind(type) === 2 /* Remapping */) || type.flags & 1048576 /* Union */ && !(indexFlags & 4 /* NoReducibleCheck */) && isGenericReducibleType(type) || type.flags & 2097152 /* Intersection */ && maybeTypeOfKind(type, 465829888 /* Instantiable */) && some(type.types, isEmptyAnonymousObjectType)); + return !!(type.flags & 117964800 /* InstantiableNonPrimitive */ || isGenericTupleType(type) || isGenericMappedType(type) && getNameTypeFromMappedType(type) || type.flags & 134217728 /* Union */ && !(indexFlags & 4 /* NoReducibleCheck */) && isGenericReducibleType(type) || type.flags & 268435456 /* Intersection */ && maybeTypeOfKind(type, 132644864 /* Instantiable */) && some(type.types, isEmptyAnonymousObjectType)); } function getIndexType(type, indexFlags = 0 /* None */) { type = getReducedType(type); - return isNoInferType(type) ? getNoInferType(getIndexType(type.baseType, indexFlags)) : shouldDeferIndexType(type, indexFlags) ? getIndexTypeForGenericType(type, indexFlags) : type.flags & 1048576 /* Union */ ? getIntersectionType(map(type.types, (t) => getIndexType(t, indexFlags))) : type.flags & 2097152 /* Intersection */ ? getUnionType(map(type.types, (t) => getIndexType(t, indexFlags))) : getObjectFlags(type) & 32 /* Mapped */ ? getIndexTypeForMappedType(type, indexFlags) : type === wildcardType ? wildcardType : type.flags & 2 /* Unknown */ ? neverType : type.flags & (1 /* Any */ | 131072 /* Never */) ? stringNumberSymbolType : getLiteralTypeFromProperties(type, (indexFlags & 2 /* NoIndexSignatures */ ? 128 /* StringLiteral */ : 402653316 /* StringLike */) | (indexFlags & 1 /* StringsOnly */ ? 0 : 296 /* NumberLike */ | 12288 /* ESSymbolLike */), indexFlags === 0 /* None */); + return isNoInferType(type) ? getNoInferType(getIndexType(type.baseType, indexFlags)) : shouldDeferIndexType(type, indexFlags) ? getIndexTypeForGenericType(type, indexFlags) : type.flags & 134217728 /* Union */ ? getIntersectionType(map(type.types, (t) => getIndexType(t, indexFlags))) : type.flags & 268435456 /* Intersection */ ? getUnionType(map(type.types, (t) => getIndexType(t, indexFlags))) : getObjectFlags(type) & 32 /* Mapped */ ? getIndexTypeForMappedType(type, indexFlags) : type === wildcardType ? wildcardType : type.flags & 2 /* Unknown */ ? neverType : type.flags & (1 /* Any */ | 262144 /* Never */) ? stringNumberSymbolType : getLiteralTypeFromProperties(type, (indexFlags & 2 /* NoIndexSignatures */ ? 1024 /* StringLiteral */ : 12583968 /* StringLike */) | (indexFlags & 1 /* StringsOnly */ ? 0 : 67648 /* NumberLike */ | 16896 /* ESSymbolLike */), indexFlags === 0 /* None */); } function getExtractStringType(type) { const extractTypeAlias = getGlobalExtractSymbol(); @@ -66517,7 +66656,7 @@ function createTypeChecker(host) { } function getIndexTypeOrString(type) { const indexType = getExtractStringType(getIndexType(type)); - return indexType.flags & 131072 /* Never */ ? stringType : indexType; + return indexType.flags & 262144 /* Never */ ? stringType : indexType; } function getTypeFromTypeOperatorNode(node) { const links = getNodeLinks(node); @@ -66549,7 +66688,7 @@ function createTypeChecker(host) { return links.resolvedType; } function getTemplateLiteralType(texts, types) { - const unionIndex = findIndex(types, (t) => !!(t.flags & (131072 /* Never */ | 1048576 /* Union */))); + const unionIndex = findIndex(types, (t) => !!(t.flags & (262144 /* Never */ | 134217728 /* Union */))); if (unionIndex >= 0) { return checkCrossProductUnion(types) ? mapType(types[unionIndex], (t) => getTemplateLiteralType(texts, replaceElement(types, unionIndex, t))) : errorType; } @@ -66567,7 +66706,7 @@ function createTypeChecker(host) { } newTexts.push(text); if (every(newTexts, (t) => t === "")) { - if (every(newTypes, (t) => !!(t.flags & 4 /* String */))) { + if (every(newTypes, (t) => !!(t.flags & 32 /* String */))) { return stringType; } if (newTypes.length === 1 && isPatternLiteralType(newTypes[0])) { @@ -66583,10 +66722,10 @@ function createTypeChecker(host) { function addSpans(texts2, types2) { for (let i = 0; i < types2.length; i++) { const t = types2[i]; - if (t.flags & (2944 /* Literal */ | 65536 /* Null */ | 32768 /* Undefined */)) { + if (t.flags & (15360 /* Literal */ | 8 /* Null */ | 4 /* Undefined */)) { text += getTemplateStringForType(t) || ""; text += texts2[i + 1]; - } else if (t.flags & 134217728 /* TemplateLiteral */) { + } else if (t.flags & 4194304 /* TemplateLiteral */) { text += t.texts[0]; if (!addSpans(t.texts, t.types)) return false; text += texts2[i + 1]; @@ -66602,18 +66741,18 @@ function createTypeChecker(host) { } } function getTemplateStringForType(type) { - return type.flags & 128 /* StringLiteral */ ? type.value : type.flags & 256 /* NumberLiteral */ ? "" + type.value : type.flags & 2048 /* BigIntLiteral */ ? pseudoBigIntToString(type.value) : type.flags & (512 /* BooleanLiteral */ | 98304 /* Nullable */) ? type.intrinsicName : void 0; + return type.flags & 1024 /* StringLiteral */ ? type.value : type.flags & 2048 /* NumberLiteral */ ? "" + type.value : type.flags & 4096 /* BigIntLiteral */ ? pseudoBigIntToString(type.value) : type.flags & (8192 /* BooleanLiteral */ | 12 /* Nullable */) ? type.intrinsicName : void 0; } function createTemplateLiteralType(texts, types) { - const type = createType(134217728 /* TemplateLiteral */); + const type = createType(4194304 /* TemplateLiteral */); type.texts = texts; type.types = types; return type; } function getStringMappingType(symbol, type) { - return type.flags & (1048576 /* Union */ | 131072 /* Never */) ? mapType(type, (t) => getStringMappingType(symbol, t)) : type.flags & 128 /* StringLiteral */ ? getStringLiteralType(applyStringMapping(symbol, type.value)) : type.flags & 134217728 /* TemplateLiteral */ ? getTemplateLiteralType(...applyTemplateStringMapping(symbol, type.texts, type.types)) : ( + return type.flags & (134217728 /* Union */ | 262144 /* Never */) ? mapType(type, (t) => getStringMappingType(symbol, t)) : type.flags & 1024 /* StringLiteral */ ? getStringLiteralType(applyStringMapping(symbol, type.value)) : type.flags & 4194304 /* TemplateLiteral */ ? getTemplateLiteralType(...applyTemplateStringMapping(symbol, type.texts, type.types)) : ( // Mapping<Mapping<T>> === Mapping<T> - type.flags & 268435456 /* StringMapping */ && symbol === type.symbol ? type : type.flags & (1 /* Any */ | 4 /* String */ | 268435456 /* StringMapping */) || isGenericIndexType(type) ? getStringMappingTypeForGenericType(symbol, type) : ( + type.flags & 8388608 /* StringMapping */ && symbol === type.symbol ? type : type.flags & (1 /* Any */ | 32 /* String */ | 8388608 /* StringMapping */) || isGenericIndexType(type) ? getStringMappingTypeForGenericType(symbol, type) : ( // This handles Mapping<`${number}`> and Mapping<`${bigint}`> isPatternLiteralPlaceholderType(type) ? getStringMappingTypeForGenericType(symbol, getTemplateLiteralType(["", ""], [type])) : type ) @@ -66654,12 +66793,12 @@ function createTypeChecker(host) { return result; } function createStringMappingType(symbol, type) { - const result = createTypeWithSymbol(268435456 /* StringMapping */, symbol); + const result = createTypeWithSymbol(8388608 /* StringMapping */, symbol); result.type = type; return result; } function createIndexedAccessType(objectType, indexType, accessFlags, aliasSymbol, aliasTypeArguments) { - const type = createType(8388608 /* IndexedAccess */); + const type = createType(33554432 /* IndexedAccess */); type.objectType = objectType; type.indexType = indexType; type.accessFlags = accessFlags; @@ -66674,13 +66813,13 @@ function createTypeChecker(host) { if (getObjectFlags(type) & 4096 /* JSLiteral */) { return true; } - if (type.flags & 1048576 /* Union */) { + if (type.flags & 134217728 /* Union */) { return every(type.types, isJSLiteralType); } - if (type.flags & 2097152 /* Intersection */) { + if (type.flags & 268435456 /* Intersection */) { return some(type.types, isJSLiteralType); } - if (type.flags & 465829888 /* Instantiable */) { + if (type.flags & 132644864 /* Instantiable */) { const constraint = getResolvedBaseConstraint(type); return constraint !== type && isJSLiteralType(constraint); } @@ -66751,8 +66890,8 @@ function createTypeChecker(host) { } } } - if (!(indexType.flags & 98304 /* Nullable */) && isTypeAssignableToKind(indexType, 402653316 /* StringLike */ | 296 /* NumberLike */ | 12288 /* ESSymbolLike */)) { - if (objectType.flags & (1 /* Any */ | 131072 /* Never */)) { + if (!(indexType.flags & 12 /* Nullable */) && isTypeAssignableToKind(indexType, 12583968 /* StringLike */ | 67648 /* NumberLike */ | 16896 /* ESSymbolLike */)) { + if (objectType.flags & (1 /* Any */ | 262144 /* Never */)) { return objectType; } const indexInfo = getApplicableIndexInfo(objectType, indexType) || getIndexInfoOfType(objectType, stringType); @@ -66767,18 +66906,18 @@ function createTypeChecker(host) { } return void 0; } - if (accessNode && indexInfo.keyType === stringType && !isTypeAssignableToKind(indexType, 4 /* String */ | 8 /* Number */)) { + if (accessNode && indexInfo.keyType === stringType && !isTypeAssignableToKind(indexType, 32 /* String */ | 64 /* Number */)) { const indexNode = getIndexNodeForAccessExpression(accessNode); error2(indexNode, Diagnostics.Type_0_cannot_be_used_as_an_index_type, typeToString(indexType)); return accessFlags & 1 /* IncludeUndefined */ ? getUnionType([indexInfo.type, missingType]) : indexInfo.type; } errorIfWritingToReadonlyIndex(indexInfo); - if (accessFlags & 1 /* IncludeUndefined */ && !(objectType.symbol && objectType.symbol.flags & (256 /* RegularEnum */ | 128 /* ConstEnum */) && (indexType.symbol && indexType.flags & 1024 /* EnumLiteral */ && getParentOfSymbol(indexType.symbol) === objectType.symbol))) { + if (accessFlags & 1 /* IncludeUndefined */ && !(objectType.symbol && objectType.symbol.flags & (256 /* RegularEnum */ | 128 /* ConstEnum */) && (indexType.symbol && indexType.flags & 32768 /* EnumLiteral */ && getParentOfSymbol(indexType.symbol) === objectType.symbol))) { return getUnionType([indexInfo.type, missingType]); } return indexInfo.type; } - if (indexType.flags & 131072 /* Never */) { + if (indexType.flags & 262144 /* Never */) { return neverType; } if (isJSLiteralType(objectType)) { @@ -66786,10 +66925,10 @@ function createTypeChecker(host) { } if (accessExpression && !isConstEnumObjectType(objectType)) { if (isObjectLiteralType2(objectType)) { - if (noImplicitAny && indexType.flags & (128 /* StringLiteral */ | 256 /* NumberLiteral */)) { + if (noImplicitAny && indexType.flags & (1024 /* StringLiteral */ | 2048 /* NumberLiteral */)) { diagnostics.add(createDiagnosticForNode(accessExpression, Diagnostics.Property_0_does_not_exist_on_type_1, indexType.value, typeToString(objectType))); return undefinedType; - } else if (indexType.flags & (8 /* Number */ | 4 /* String */)) { + } else if (indexType.flags & (64 /* Number */ | 32 /* String */)) { const types = map(objectType.properties, (property) => { return getTypeOfSymbol(property); }); @@ -66816,7 +66955,7 @@ function createTypeChecker(host) { error2(accessExpression, Diagnostics.Element_implicitly_has_an_any_type_because_type_0_has_no_index_signature_Did_you_mean_to_call_1, typeToString(objectType), suggestion2); } else { let errorInfo; - if (indexType.flags & 1024 /* EnumLiteral */) { + if (indexType.flags & 32768 /* EnumLiteral */) { errorInfo = chainDiagnosticMessages( /*details*/ void 0, @@ -66824,7 +66963,7 @@ function createTypeChecker(host) { "[" + typeToString(indexType) + "]", typeToString(objectType) ); - } else if (indexType.flags & 8192 /* UniqueESSymbol */) { + } else if (indexType.flags & 16384 /* UniqueESSymbol */) { const symbolName2 = getFullyQualifiedName(indexType.symbol, accessExpression); errorInfo = chainDiagnosticMessages( /*details*/ @@ -66833,7 +66972,7 @@ function createTypeChecker(host) { "[" + symbolName2 + "]", typeToString(objectType) ); - } else if (indexType.flags & 128 /* StringLiteral */) { + } else if (indexType.flags & 1024 /* StringLiteral */) { errorInfo = chainDiagnosticMessages( /*details*/ void 0, @@ -66841,7 +66980,7 @@ function createTypeChecker(host) { indexType.value, typeToString(objectType) ); - } else if (indexType.flags & 256 /* NumberLiteral */) { + } else if (indexType.flags & 2048 /* NumberLiteral */) { errorInfo = chainDiagnosticMessages( /*details*/ void 0, @@ -66849,7 +66988,7 @@ function createTypeChecker(host) { indexType.value, typeToString(objectType) ); - } else if (indexType.flags & (8 /* Number */ | 4 /* String */)) { + } else if (indexType.flags & (64 /* Number */ | 32 /* String */)) { errorInfo = chainDiagnosticMessages( /*details*/ void 0, @@ -66880,9 +67019,9 @@ function createTypeChecker(host) { } if (accessNode) { const indexNode = getIndexNodeForAccessExpression(accessNode); - if (indexNode.kind !== 10 /* BigIntLiteral */ && indexType.flags & (128 /* StringLiteral */ | 256 /* NumberLiteral */)) { + if (indexNode.kind !== 10 /* BigIntLiteral */ && indexType.flags & (1024 /* StringLiteral */ | 2048 /* NumberLiteral */)) { error2(indexNode, Diagnostics.Property_0_does_not_exist_on_type_1, "" + indexType.value, typeToString(objectType)); - } else if (indexType.flags & (4 /* String */ | 8 /* Number */)) { + } else if (indexType.flags & (32 /* String */ | 64 /* Number */)) { error2(indexNode, Diagnostics.Type_0_has_no_matching_index_signature_for_type_1, typeToString(objectType), typeToString(indexType)); } else { const typeString = indexNode.kind === 10 /* BigIntLiteral */ ? "bigint" : typeToString(indexType); @@ -66903,24 +67042,24 @@ function createTypeChecker(host) { return accessNode.kind === 213 /* ElementAccessExpression */ ? accessNode.argumentExpression : accessNode.kind === 200 /* IndexedAccessType */ ? accessNode.indexType : accessNode.kind === 168 /* ComputedPropertyName */ ? accessNode.expression : accessNode; } function isPatternLiteralPlaceholderType(type) { - if (type.flags & 2097152 /* Intersection */) { + if (type.flags & 268435456 /* Intersection */) { let seenPlaceholder = false; for (const t of type.types) { - if (t.flags & (2944 /* Literal */ | 98304 /* Nullable */) || isPatternLiteralPlaceholderType(t)) { + if (t.flags & (15360 /* Literal */ | 12 /* Nullable */) || isPatternLiteralPlaceholderType(t)) { seenPlaceholder = true; - } else if (!(t.flags & 524288 /* Object */)) { + } else if (!(t.flags & 1048576 /* Object */)) { return false; } } return seenPlaceholder; } - return !!(type.flags & (1 /* Any */ | 4 /* String */ | 8 /* Number */ | 64 /* BigInt */)) || isPatternLiteralType(type); + return !!(type.flags & (1 /* Any */ | 32 /* String */ | 64 /* Number */ | 128 /* BigInt */)) || isPatternLiteralType(type); } function isPatternLiteralType(type) { - return !!(type.flags & 134217728 /* TemplateLiteral */) && every(type.types, isPatternLiteralPlaceholderType) || !!(type.flags & 268435456 /* StringMapping */) && isPatternLiteralPlaceholderType(type.type); + return !!(type.flags & 4194304 /* TemplateLiteral */) && every(type.types, isPatternLiteralPlaceholderType) || !!(type.flags & 8388608 /* StringMapping */) && isPatternLiteralPlaceholderType(type.type); } function isGenericStringLikeType(type) { - return !!(type.flags & (134217728 /* TemplateLiteral */ | 268435456 /* StringMapping */)) && !isPatternLiteralType(type); + return !!(type.flags & (4194304 /* TemplateLiteral */ | 8388608 /* StringMapping */)) && !isPatternLiteralType(type); } function isGenericType(type) { return !!getGenericObjectFlags(type); @@ -66932,31 +67071,31 @@ function createTypeChecker(host) { return !!(getGenericObjectFlags(type) & 8388608 /* IsGenericIndexType */); } function getGenericObjectFlags(type) { - if (type.flags & 3145728 /* UnionOrIntersection */) { + if (type.flags & 402653184 /* UnionOrIntersection */) { if (!(type.objectFlags & 2097152 /* IsGenericTypeComputed */)) { type.objectFlags |= 2097152 /* IsGenericTypeComputed */ | reduceLeft(type.types, (flags, t) => flags | getGenericObjectFlags(t), 0); } return type.objectFlags & 12582912 /* IsGenericType */; } - if (type.flags & 33554432 /* Substitution */) { + if (type.flags & 16777216 /* Substitution */) { if (!(type.objectFlags & 2097152 /* IsGenericTypeComputed */)) { type.objectFlags |= 2097152 /* IsGenericTypeComputed */ | getGenericObjectFlags(type.baseType) | getGenericObjectFlags(type.constraint); } return type.objectFlags & 12582912 /* IsGenericType */; } - return (type.flags & 58982400 /* InstantiableNonPrimitive */ || isGenericMappedType(type) || isGenericTupleType(type) ? 4194304 /* IsGenericObjectType */ : 0) | (type.flags & (58982400 /* InstantiableNonPrimitive */ | 4194304 /* Index */) || isGenericStringLikeType(type) ? 8388608 /* IsGenericIndexType */ : 0); + return (type.flags & 117964800 /* InstantiableNonPrimitive */ || isGenericMappedType(type) || isGenericTupleType(type) ? 4194304 /* IsGenericObjectType */ : 0) | (type.flags & (117964800 /* InstantiableNonPrimitive */ | 2097152 /* Index */) || isGenericStringLikeType(type) ? 8388608 /* IsGenericIndexType */ : 0); } function getSimplifiedType(type, writing) { - return type.flags & 8388608 /* IndexedAccess */ ? getSimplifiedIndexedAccessType(type, writing) : type.flags & 16777216 /* Conditional */ ? getSimplifiedConditionalType(type, writing) : type; + return type.flags & 33554432 /* IndexedAccess */ ? getSimplifiedIndexedAccessType(type, writing) : type.flags & 67108864 /* Conditional */ ? getSimplifiedConditionalType(type, writing) : type.flags & 2097152 /* Index */ ? getSimplifiedIndexType(type) : type; } function distributeIndexOverObjectType(objectType, indexType, writing) { - if (objectType.flags & 1048576 /* Union */ || objectType.flags & 2097152 /* Intersection */ && !shouldDeferIndexType(objectType)) { + if (objectType.flags & 134217728 /* Union */ || objectType.flags & 268435456 /* Intersection */ && !shouldDeferIndexType(objectType)) { const types = map(objectType.types, (t) => getSimplifiedType(getIndexedAccessType(t, indexType), writing)); - return objectType.flags & 2097152 /* Intersection */ || writing ? getIntersectionType(types) : getUnionType(types); + return objectType.flags & 268435456 /* Intersection */ || writing ? getIntersectionType(types) : getUnionType(types); } } function distributeObjectOverIndexType(objectType, indexType, writing) { - if (indexType.flags & 1048576 /* Union */) { + if (indexType.flags & 134217728 /* Union */) { const types = map(indexType.types, (t) => getSimplifiedType(getIndexedAccessType(objectType, t), writing)); return writing ? getIntersectionType(types) : getUnionType(types); } @@ -66973,16 +67112,16 @@ function createTypeChecker(host) { if (distributedOverIndex) { return type[cache] = distributedOverIndex; } - if (!(indexType.flags & 465829888 /* Instantiable */)) { + if (!(indexType.flags & 132644864 /* Instantiable */)) { const distributedOverObject = distributeIndexOverObjectType(objectType, indexType, writing); if (distributedOverObject) { return type[cache] = distributedOverObject; } } - if (isGenericTupleType(objectType) && indexType.flags & 296 /* NumberLike */) { + if (isGenericTupleType(objectType) && indexType.flags & 67648 /* NumberLike */) { const elementType = getElementTypeOfSliceOfTupleType( objectType, - indexType.flags & 8 /* Number */ ? 0 : objectType.target.fixedLength, + indexType.flags & 64 /* Number */ ? 0 : objectType.target.fixedLength, /*endSkipCount*/ 0, writing @@ -67003,13 +67142,13 @@ function createTypeChecker(host) { const extendsType = type.extendsType; const trueType2 = getTrueTypeFromConditionalType(type); const falseType2 = getFalseTypeFromConditionalType(type); - if (falseType2.flags & 131072 /* Never */ && getActualTypeVariable(trueType2) === getActualTypeVariable(checkType)) { + if (falseType2.flags & 262144 /* Never */ && getActualTypeVariable(trueType2) === getActualTypeVariable(checkType)) { if (checkType.flags & 1 /* Any */ || isTypeAssignableTo(getRestrictiveInstantiation(checkType), getRestrictiveInstantiation(extendsType))) { return getSimplifiedType(trueType2, writing); } else if (isIntersectionEmpty(checkType, extendsType)) { return neverType; } - } else if (trueType2.flags & 131072 /* Never */ && getActualTypeVariable(falseType2) === getActualTypeVariable(checkType)) { + } else if (trueType2.flags & 262144 /* Never */ && getActualTypeVariable(falseType2) === getActualTypeVariable(checkType)) { if (!(checkType.flags & 1 /* Any */) && isTypeAssignableTo(getRestrictiveInstantiation(checkType), getRestrictiveInstantiation(extendsType))) { return neverType; } else if (checkType.flags & 1 /* Any */ || isIntersectionEmpty(checkType, extendsType)) { @@ -67018,8 +67157,14 @@ function createTypeChecker(host) { } return type; } + function getSimplifiedIndexType(type) { + if (isGenericMappedType(type.type) && getNameTypeFromMappedType(type.type) && !isMappedTypeWithKeyofConstraintDeclaration(type.type)) { + return getIndexTypeForMappedType(type.type, 0 /* None */); + } + return type; + } function isIntersectionEmpty(type1, type2) { - return !!(getUnionType([intersectTypes(type1, type2), neverType]).flags & 131072 /* Never */); + return !!(getUnionType([intersectTypes(type1, type2), neverType]).flags & 262144 /* Never */); } function substituteIndexedMappedType(objectType, index) { const mapper = createTypeMapper([getTypeParameterFromMappedType(objectType)], [index]); @@ -67035,14 +67180,14 @@ function createTypeChecker(host) { } function couldAccessOptionalProperty(objectType, indexType) { const indexConstraint = getBaseConstraintOfType(indexType); - return !!indexConstraint && some(getPropertiesOfType(objectType), (p) => !!(p.flags & 16777216 /* Optional */) && isTypeAssignableTo(getLiteralTypeFromProperty(p, 8576 /* StringOrNumberLiteralOrUnique */), indexConstraint)); + return !!indexConstraint && some(getPropertiesOfType(objectType), (p) => !!(p.flags & 16777216 /* Optional */) && isTypeAssignableTo(getLiteralTypeFromProperty(p, 19456 /* StringOrNumberLiteralOrUnique */), indexConstraint)); } function getIndexedAccessType(objectType, indexType, accessFlags = 0 /* None */, accessNode, aliasSymbol, aliasTypeArguments) { return getIndexedAccessTypeOrUndefined(objectType, indexType, accessFlags, accessNode, aliasSymbol, aliasTypeArguments) || (accessNode ? errorType : unknownType); } function indexTypeLessThan(indexType, limit) { return everyType(indexType, (t) => { - if (t.flags & 384 /* StringOrNumberLiteral */) { + if (t.flags & 3072 /* StringOrNumberLiteral */) { const propName = getPropertyNameFromType(t); if (isNumericLiteralName(propName)) { const index = +propName; @@ -67057,7 +67202,7 @@ function createTypeChecker(host) { return wildcardType; } objectType = getReducedType(objectType); - if (isStringIndexSignatureOnlyType(objectType) && !(indexType.flags & 98304 /* Nullable */) && isTypeAssignableToKind(indexType, 4 /* String */ | 8 /* Number */)) { + if (isStringIndexSignatureOnlyType(objectType) && !(indexType.flags & 12 /* Nullable */) && isTypeAssignableToKind(indexType, 32 /* String */ | 64 /* Number */)) { indexType = stringType; } if (compilerOptions.noUncheckedIndexedAccess && accessFlags & 32 /* ExpressionPosition */) accessFlags |= 1 /* IncludeUndefined */; @@ -67074,7 +67219,7 @@ function createTypeChecker(host) { return type; } const apparentObjectType = getReducedApparentType(objectType); - if (indexType.flags & 1048576 /* Union */ && !(indexType.flags & 16 /* Boolean */)) { + if (indexType.flags & 134217728 /* Union */ && !(indexType.flags & 256 /* Boolean */)) { const propTypes = []; let wasMissingProp = false; for (const t of indexType.types) { @@ -67117,10 +67262,10 @@ function createTypeChecker(host) { return links.resolvedType; } function getActualTypeVariable(type) { - if (type.flags & 33554432 /* Substitution */) { + if (type.flags & 16777216 /* Substitution */) { return getActualTypeVariable(type.baseType); } - if (type.flags & 8388608 /* IndexedAccess */ && (type.objectType.flags & 33554432 /* Substitution */ || type.indexType.flags & 33554432 /* Substitution */)) { + if (type.flags & 33554432 /* IndexedAccess */ && (type.objectType.flags & 16777216 /* Substitution */ || type.indexType.flags & 16777216 /* Substitution */)) { return getIndexedAccessType(getActualTypeVariable(type.objectType), getActualTypeVariable(type.indexType)); } return type; @@ -67171,11 +67316,11 @@ function createTypeChecker(host) { const inferredExtendsType = combinedMapper ? instantiateType(root.extendsType, combinedMapper) : extendsType; if (!checkTypeDeferred && !isDeferredType(inferredExtendsType, checkTuples)) { if (!(inferredExtendsType.flags & 3 /* AnyOrUnknown */) && (checkType.flags & 1 /* Any */ || !isTypeAssignableTo(getPermissiveInstantiation(checkType), getPermissiveInstantiation(inferredExtendsType)))) { - if (checkType.flags & 1 /* Any */ || forConstraint && !(inferredExtendsType.flags & 131072 /* Never */) && someType(getPermissiveInstantiation(inferredExtendsType), (t) => isTypeAssignableTo(t, getPermissiveInstantiation(checkType)))) { + if (checkType.flags & 1 /* Any */ || forConstraint && !(inferredExtendsType.flags & 262144 /* Never */) && someType(getPermissiveInstantiation(inferredExtendsType), (t) => isTypeAssignableTo(t, getPermissiveInstantiation(checkType)))) { (extraTypes || (extraTypes = [])).push(instantiateType(getTypeFromTypeNode(root.node.trueType), combinedMapper || mapper)); } const falseType2 = getTypeFromTypeNode(root.node.falseType); - if (falseType2.flags & 16777216 /* Conditional */) { + if (falseType2.flags & 67108864 /* Conditional */) { const newRoot = falseType2.root; if (newRoot.node.parent === root.node && (!newRoot.isDistributive || newRoot.checkType === root.checkType)) { root = newRoot; @@ -67198,7 +67343,7 @@ function createTypeChecker(host) { break; } } - result = createType(16777216 /* Conditional */); + result = createType(67108864 /* Conditional */); result.root = root; result.checkType = instantiateType(root.checkType, mapper); result.extendsType = instantiateType(root.extendsType, mapper); @@ -67210,14 +67355,14 @@ function createTypeChecker(host) { } return extraTypes ? getUnionType(append(extraTypes, result)) : result; function canTailRecurse(newType, newMapper) { - if (newType.flags & 16777216 /* Conditional */ && newMapper) { + if (newType.flags & 67108864 /* Conditional */ && newMapper) { const newRoot = newType.root; if (newRoot.outerTypeParameters) { const typeParamMapper = combineTypeMappers(newType.mapper, newMapper); const typeArguments = map(newRoot.outerTypeParameters, (t) => getMappedType(t, typeParamMapper)); const newRootMapper = createTypeMapper(newRoot.outerTypeParameters, typeArguments); const newCheckType = newRoot.isDistributive ? getMappedType(newRoot.checkType, newRootMapper) : void 0; - if (!newCheckType || newCheckType === newRoot.checkType || !(newCheckType.flags & (1048576 /* Union */ | 131072 /* Never */))) { + if (!newCheckType || newCheckType === newRoot.checkType || !(newCheckType.flags & (134217728 /* Union */ | 262144 /* Never */))) { root = newRoot; mapper = newRootMapper; aliasSymbol = void 0; @@ -67271,7 +67416,7 @@ function createTypeChecker(host) { node, checkType, extendsType: getTypeFromTypeNode(node.extendsType), - isDistributive: !!(checkType.flags & 262144 /* TypeParameter */), + isDistributive: !!(checkType.flags & 524288 /* TypeParameter */), inferTypeParameters: getInferTypeParameters(node), outerTypeParameters, instantiations: void 0, @@ -67404,13 +67549,13 @@ function createTypeChecker(host) { return symbol ? getLocalTypeParametersOfClassOrInterfaceOrTypeAlias(symbol) : void 0; } function isNonGenericObjectType(type) { - return !!(type.flags & 524288 /* Object */) && !isGenericMappedType(type); + return !!(type.flags & 1048576 /* Object */) && !isGenericMappedType(type); } function isEmptyObjectTypeOrSpreadsIntoEmptyObject(type) { - return isEmptyObjectType(type) || !!(type.flags & (65536 /* Null */ | 32768 /* Undefined */ | 528 /* BooleanLike */ | 296 /* NumberLike */ | 2112 /* BigIntLike */ | 402653316 /* StringLike */ | 1056 /* EnumLike */ | 67108864 /* NonPrimitive */ | 4194304 /* Index */)); + return isEmptyObjectType(type) || !!(type.flags & (8 /* Null */ | 4 /* Undefined */ | 8448 /* BooleanLike */ | 67648 /* NumberLike */ | 4224 /* BigIntLike */ | 12583968 /* StringLike */ | 98304 /* EnumLike */ | 131072 /* NonPrimitive */ | 2097152 /* Index */)); } function tryMergeUnionOfObjectTypeAndEmptyObject(type, readonly) { - if (!(type.flags & 1048576 /* Union */)) { + if (!(type.flags & 134217728 /* Union */)) { return type; } if (every(type.types, isEmptyObjectTypeOrSpreadsIntoEmptyObject)) { @@ -67456,28 +67601,28 @@ function createTypeChecker(host) { if (left.flags & 2 /* Unknown */ || right.flags & 2 /* Unknown */) { return unknownType; } - if (left.flags & 131072 /* Never */) { + if (left.flags & 262144 /* Never */) { return right; } - if (right.flags & 131072 /* Never */) { + if (right.flags & 262144 /* Never */) { return left; } left = tryMergeUnionOfObjectTypeAndEmptyObject(left, readonly); - if (left.flags & 1048576 /* Union */) { + if (left.flags & 134217728 /* Union */) { return checkCrossProductUnion([left, right]) ? mapType(left, (t) => getSpreadType(t, right, symbol, objectFlags, readonly)) : errorType; } right = tryMergeUnionOfObjectTypeAndEmptyObject(right, readonly); - if (right.flags & 1048576 /* Union */) { + if (right.flags & 134217728 /* Union */) { return checkCrossProductUnion([left, right]) ? mapType(right, (t) => getSpreadType(left, t, symbol, objectFlags, readonly)) : errorType; } - if (right.flags & (528 /* BooleanLike */ | 296 /* NumberLike */ | 2112 /* BigIntLike */ | 402653316 /* StringLike */ | 1056 /* EnumLike */ | 67108864 /* NonPrimitive */ | 4194304 /* Index */)) { + if (right.flags & (8448 /* BooleanLike */ | 67648 /* NumberLike */ | 4224 /* BigIntLike */ | 12583968 /* StringLike */ | 98304 /* EnumLike */ | 131072 /* NonPrimitive */ | 2097152 /* Index */)) { return left; } if (isGenericObjectType(left) || isGenericObjectType(right)) { if (isEmptyObjectType(left)) { return right; } - if (left.flags & 2097152 /* Intersection */) { + if (left.flags & 268435456 /* Intersection */) { const types = left.types; const lastLeft = types[types.length - 1]; if (isNonGenericObjectType(lastLeft) && isNonGenericObjectType(right)) { @@ -67552,7 +67697,7 @@ function createTypeChecker(host) { return type; } function getFreshTypeOfLiteralType(type) { - if (type.flags & 2976 /* Freshable */) { + if (type.flags & 80896 /* Freshable */) { if (!type.freshType) { const freshType = createLiteralType(type.flags, type.value, type.symbol, type); freshType.freshType = freshType; @@ -67563,28 +67708,28 @@ function createTypeChecker(host) { return type; } function getRegularTypeOfLiteralType(type) { - return type.flags & 2976 /* Freshable */ ? type.regularType : type.flags & 1048576 /* Union */ ? type.regularType || (type.regularType = mapType(type, getRegularTypeOfLiteralType)) : type; + return type.flags & 80896 /* Freshable */ ? type.regularType : type.flags & 134217728 /* Union */ ? type.regularType || (type.regularType = mapType(type, getRegularTypeOfLiteralType)) : type; } function isFreshLiteralType(type) { - return !!(type.flags & 2976 /* Freshable */) && type.freshType === type; + return !!(type.flags & 80896 /* Freshable */) && type.freshType === type; } function getStringLiteralType(value) { let type; - return stringLiteralTypes.get(value) || (stringLiteralTypes.set(value, type = createLiteralType(128 /* StringLiteral */, value)), type); + return stringLiteralTypes.get(value) || (stringLiteralTypes.set(value, type = createLiteralType(1024 /* StringLiteral */, value)), type); } function getNumberLiteralType(value) { let type; - return numberLiteralTypes.get(value) || (numberLiteralTypes.set(value, type = createLiteralType(256 /* NumberLiteral */, value)), type); + return numberLiteralTypes.get(value) || (numberLiteralTypes.set(value, type = createLiteralType(2048 /* NumberLiteral */, value)), type); } function getBigIntLiteralType(value) { let type; const key = pseudoBigIntToString(value); - return bigIntLiteralTypes.get(key) || (bigIntLiteralTypes.set(key, type = createLiteralType(2048 /* BigIntLiteral */, value)), type); + return bigIntLiteralTypes.get(key) || (bigIntLiteralTypes.set(key, type = createLiteralType(4096 /* BigIntLiteral */, value)), type); } function getEnumLiteralType(value, enumId, symbol) { let type; const key = `${enumId}${typeof value === "string" ? "@" : "#"}${value}`; - const flags = 1024 /* EnumLiteral */ | (typeof value === "string" ? 128 /* StringLiteral */ : 256 /* NumberLiteral */); + const flags = 32768 /* EnumLiteral */ | (typeof value === "string" ? 1024 /* StringLiteral */ : 2048 /* NumberLiteral */); return enumLiteralTypes.get(key) || (enumLiteralTypes.set(key, type = createLiteralType(flags, value, symbol)), type); } function getTypeFromLiteralTypeNode(node) { @@ -67598,7 +67743,7 @@ function createTypeChecker(host) { return links.resolvedType; } function createUniqueESSymbolType(symbol) { - const type = createTypeWithSymbol(8192 /* UniqueESSymbol */, symbol); + const type = createTypeWithSymbol(16384 /* UniqueESSymbol */, symbol); type.escapedName = `__@${type.symbol.escapedName}@${getSymbolId(type.symbol)}`; return type; } @@ -67987,7 +68132,7 @@ function createTypeChecker(host) { result = target.objectFlags & 4 /* Reference */ ? createDeferredTypeReference(type.target, type.node, newMapper, newAliasSymbol, newAliasTypeArguments) : target.objectFlags & 32 /* Mapped */ ? instantiateMappedType(target, newMapper, newAliasSymbol, newAliasTypeArguments) : instantiateAnonymousType(target, newMapper, newAliasSymbol, newAliasTypeArguments); target.instantiations.set(id, result); const resultObjectFlags = getObjectFlags(result); - if (result.flags & 3899393 /* ObjectFlagsType */ && !(resultObjectFlags & 524288 /* CouldContainTypeVariablesComputed */)) { + if (result.flags & 403963917 /* ObjectFlagsType */ && !(resultObjectFlags & 524288 /* CouldContainTypeVariablesComputed */)) { const resultCouldContainTypeVariables = some(typeArguments, couldContainTypeVariables); if (!(getObjectFlags(result) & 524288 /* CouldContainTypeVariablesComputed */)) { if (resultObjectFlags & (32 /* Mapped */ | 16 /* Anonymous */ | 4 /* Reference */)) { @@ -68050,9 +68195,9 @@ function createTypeChecker(host) { } function getHomomorphicTypeVariable(type) { const constraintType = getConstraintTypeFromMappedType(type); - if (constraintType.flags & 4194304 /* Index */) { + if (constraintType.flags & 2097152 /* Index */) { const typeVariable = getActualTypeVariable(constraintType.type); - if (typeVariable.flags & 262144 /* TypeParameter */) { + if (typeVariable.flags & 524288 /* TypeParameter */) { return typeVariable; } } @@ -68068,7 +68213,7 @@ function createTypeChecker(host) { } return instantiateType(getConstraintTypeFromMappedType(type), mapper) === wildcardType ? wildcardType : instantiateAnonymousType(type, mapper, aliasSymbol, aliasTypeArguments); function instantiateConstituent(t) { - if (t.flags & (3 /* AnyOrUnknown */ | 58982400 /* InstantiableNonPrimitive */ | 524288 /* Object */ | 2097152 /* Intersection */) && t !== wildcardType && !isErrorType(t)) { + if (t.flags & (3 /* AnyOrUnknown */ | 117964800 /* InstantiableNonPrimitive */ | 1048576 /* Object */ | 268435456 /* Intersection */) && t !== wildcardType && !isErrorType(t)) { if (!type.declaration.nameType) { let constraint; if (isArrayType(t) || t.flags & 1 /* Any */ && findResolutionCycleStartIndex(typeVariable, 4 /* ImmediateBaseConstraint */) < 0 && (constraint = getConstraintOfTypeParameter(typeVariable)) && everyType(constraint, isArrayOrTupleType)) { @@ -68116,7 +68261,7 @@ function createTypeChecker(host) { const templateMapper = appendTypeMapping(mapper, getTypeParameterFromMappedType(type), key); const propType = instantiateType(getTemplateTypeFromMappedType(type.target || type), templateMapper); const modifiers = getMappedTypeModifiers(type); - return strictNullChecks && modifiers & 4 /* IncludeOptional */ && !maybeTypeOfKind(propType, 32768 /* Undefined */ | 16384 /* Void */) ? getOptionalType( + return strictNullChecks && modifiers & 4 /* IncludeOptional */ && !maybeTypeOfKind(propType, 4 /* Undefined */ | 16 /* Void */) ? getOptionalType( propType, /*isProperty*/ true @@ -68153,7 +68298,7 @@ function createTypeChecker(host) { const newMapper = createTypeMapper(root.outerTypeParameters, typeArguments); const checkType = root.checkType; const distributionType = root.isDistributive ? getReducedType(getMappedType(checkType, newMapper)) : void 0; - result = distributionType && checkType !== distributionType && distributionType.flags & (1048576 /* Union */ | 131072 /* Never */) ? mapTypeWithAlias(distributionType, (t) => getConditionalType(root, prependTypeMapping(checkType, t, newMapper), forConstraint), aliasSymbol, aliasTypeArguments) : getConditionalType(root, newMapper, forConstraint, aliasSymbol, aliasTypeArguments); + result = distributionType && checkType !== distributionType && distributionType.flags & (134217728 /* Union */ | 262144 /* Never */) ? mapTypeWithAlias(distributionType, (t) => getConditionalType(root, prependTypeMapping(checkType, t, newMapper), forConstraint), aliasSymbol, aliasTypeArguments) : getConditionalType(root, newMapper, forConstraint, aliasSymbol, aliasTypeArguments); root.instantiations.set(id, result); } return result; @@ -68204,10 +68349,10 @@ function createTypeChecker(host) { } function instantiateTypeWorker(type, mapper, aliasSymbol, aliasTypeArguments) { const flags = type.flags; - if (flags & 262144 /* TypeParameter */) { + if (flags & 524288 /* TypeParameter */) { return getMappedType(type, mapper); } - if (flags & 524288 /* Object */) { + if (flags & 1048576 /* Object */) { const objectFlags = type.objectFlags; if (objectFlags & (4 /* Reference */ | 16 /* Anonymous */ | 32 /* Mapped */)) { if (objectFlags & 4 /* Reference */ && !type.node) { @@ -68222,27 +68367,27 @@ function createTypeChecker(host) { } return type; } - if (flags & 3145728 /* UnionOrIntersection */) { - const origin = type.flags & 1048576 /* Union */ ? type.origin : void 0; - const types = origin && origin.flags & 3145728 /* UnionOrIntersection */ ? origin.types : type.types; + if (flags & 402653184 /* UnionOrIntersection */) { + const origin = type.flags & 134217728 /* Union */ ? type.origin : void 0; + const types = origin && origin.flags & 402653184 /* UnionOrIntersection */ ? origin.types : type.types; const newTypes = instantiateTypes(types, mapper); if (newTypes === types && aliasSymbol === type.aliasSymbol) { return type; } const newAliasSymbol = aliasSymbol || type.aliasSymbol; const newAliasTypeArguments = aliasSymbol ? aliasTypeArguments : instantiateTypes(type.aliasTypeArguments, mapper); - return flags & 2097152 /* Intersection */ || origin && origin.flags & 2097152 /* Intersection */ ? getIntersectionType(newTypes, 0 /* None */, newAliasSymbol, newAliasTypeArguments) : getUnionType(newTypes, 1 /* Literal */, newAliasSymbol, newAliasTypeArguments); + return flags & 268435456 /* Intersection */ || origin && origin.flags & 268435456 /* Intersection */ ? getIntersectionType(newTypes, 0 /* None */, newAliasSymbol, newAliasTypeArguments) : getUnionType(newTypes, 1 /* Literal */, newAliasSymbol, newAliasTypeArguments); } - if (flags & 4194304 /* Index */) { + if (flags & 2097152 /* Index */) { return getIndexType(instantiateType(type.type, mapper)); } - if (flags & 134217728 /* TemplateLiteral */) { + if (flags & 4194304 /* TemplateLiteral */) { return getTemplateLiteralType(type.texts, instantiateTypes(type.types, mapper)); } - if (flags & 268435456 /* StringMapping */) { + if (flags & 8388608 /* StringMapping */) { return getStringMappingType(type.symbol, instantiateType(type.type, mapper)); } - if (flags & 8388608 /* IndexedAccess */) { + if (flags & 33554432 /* IndexedAccess */) { const newAliasSymbol = aliasSymbol || type.aliasSymbol; const newAliasTypeArguments = aliasSymbol ? aliasTypeArguments : instantiateTypes(type.aliasTypeArguments, mapper); return getIndexedAccessType( @@ -68255,7 +68400,7 @@ function createTypeChecker(host) { newAliasTypeArguments ); } - if (flags & 16777216 /* Conditional */) { + if (flags & 67108864 /* Conditional */) { return getConditionalTypeInstantiation( type, combineTypeMappers(type.mapper, mapper), @@ -68265,19 +68410,19 @@ function createTypeChecker(host) { aliasTypeArguments ); } - if (flags & 33554432 /* Substitution */) { + if (flags & 16777216 /* Substitution */) { const newBaseType = instantiateType(type.baseType, mapper); if (isNoInferType(type)) { return getNoInferType(newBaseType); } const newConstraint = instantiateType(type.constraint, mapper); - if (newBaseType.flags & 8650752 /* TypeVariable */ && isGenericType(newConstraint)) { + if (newBaseType.flags & 34078720 /* TypeVariable */ && isGenericType(newConstraint)) { return getSubstitutionType(newBaseType, newConstraint); } if (newConstraint.flags & 3 /* AnyOrUnknown */ || isTypeAssignableTo(getRestrictiveInstantiation(newBaseType), getRestrictiveInstantiation(newConstraint))) { return newBaseType; } - return newBaseType.flags & 8650752 /* TypeVariable */ ? getSubstitutionType(newBaseType, newConstraint) : getIntersectionType([newConstraint, newBaseType]); + return newBaseType.flags & 34078720 /* TypeVariable */ ? getSubstitutionType(newBaseType, newConstraint) : getIntersectionType([newConstraint, newBaseType]); } return type; } @@ -68287,7 +68432,7 @@ function createTypeChecker(host) { return type; } const innerIndexType = instantiateType(type.constraintType, mapper); - if (!(innerIndexType.flags & 4194304 /* Index */)) { + if (!(innerIndexType.flags & 2097152 /* Index */)) { return type; } const instantiated = inferTypeForHomomorphicMappedType( @@ -68301,10 +68446,10 @@ function createTypeChecker(host) { return type; } function getPermissiveInstantiation(type) { - return type.flags & (402784252 /* Primitive */ | 3 /* AnyOrUnknown */ | 131072 /* Never */) ? type : type.permissiveInstantiation || (type.permissiveInstantiation = instantiateType(type, permissiveMapper)); + return type.flags & (12713980 /* Primitive */ | 3 /* AnyOrUnknown */ | 262144 /* Never */) ? type : type.permissiveInstantiation || (type.permissiveInstantiation = instantiateType(type, permissiveMapper)); } function getRestrictiveInstantiation(type) { - if (type.flags & (402784252 /* Primitive */ | 3 /* AnyOrUnknown */ | 131072 /* Never */)) { + if (type.flags & (12713980 /* Primitive */ | 3 /* AnyOrUnknown */ | 262144 /* Never */)) { return type; } if (type.restrictiveInstantiation) { @@ -68343,7 +68488,8 @@ function createTypeChecker(host) { const { initializer } = node; return !!initializer && isContextSensitive(initializer); } - case 295 /* JsxExpression */: { + case 295 /* JsxExpression */: + case 230 /* YieldExpression */: { const { expression } = node; return !!expression && isContextSensitive(expression); } @@ -68351,7 +68497,7 @@ function createTypeChecker(host) { return false; } function isContextSensitiveFunctionLikeDeclaration(node) { - return hasContextSensitiveParameters(node) || hasContextSensitiveReturnExpression(node); + return hasContextSensitiveParameters(node) || hasContextSensitiveReturnExpression(node) || hasContextSensitiveYieldExpression(node); } function hasContextSensitiveReturnExpression(node) { if (node.typeParameters || getEffectiveReturnTypeNode(node) || !node.body) { @@ -68362,11 +68508,14 @@ function createTypeChecker(host) { } return !!forEachReturnStatement(node.body, (statement) => !!statement.expression && isContextSensitive(statement.expression)); } + function hasContextSensitiveYieldExpression(node) { + return !!(getFunctionFlags(node) & 1 /* Generator */ && node.body && forEachYieldExpression(node.body, isContextSensitive)); + } function isContextSensitiveFunctionOrObjectLiteralMethod(func) { return (isFunctionExpressionOrArrowFunction(func) || isObjectLiteralMethod(func)) && isContextSensitiveFunctionLikeDeclaration(func); } function getTypeWithoutSignatures(type) { - if (type.flags & 524288 /* Object */) { + if (type.flags & 1048576 /* Object */) { const resolved = resolveStructuredTypeMembers(type); if (resolved.constructSignatures.length || resolved.callSignatures.length) { const result = createObjectType(16 /* Anonymous */, type.symbol); @@ -68377,7 +68526,7 @@ function createTypeChecker(host) { result.indexInfos = emptyArray; return result; } - } else if (type.flags & 2097152 /* Intersection */) { + } else if (type.flags & 268435456 /* Intersection */) { return getIntersectionType(map(type.types, getTypeWithoutSignatures)); } return type; @@ -68404,7 +68553,7 @@ function createTypeChecker(host) { return isTypeRelatedTo(source, target, assignableRelation); } function isTypeDerivedFrom(source, target) { - return source.flags & 1048576 /* Union */ ? every(source.types, (t) => isTypeDerivedFrom(t, target)) : target.flags & 1048576 /* Union */ ? some(target.types, (t) => isTypeDerivedFrom(source, t)) : source.flags & 2097152 /* Intersection */ ? some(source.types, (t) => isTypeDerivedFrom(t, target)) : source.flags & 58982400 /* InstantiableNonPrimitive */ ? isTypeDerivedFrom(getBaseConstraintOfType(source) || unknownType, target) : isEmptyAnonymousObjectType(target) ? !!(source.flags & (524288 /* Object */ | 67108864 /* NonPrimitive */)) : target === globalObjectType ? !!(source.flags & (524288 /* Object */ | 67108864 /* NonPrimitive */)) && !isEmptyAnonymousObjectType(source) : target === globalFunctionType ? !!(source.flags & 524288 /* Object */) && isFunctionObjectType(source) : hasBaseType(source, getTargetType(target)) || isArrayType(target) && !isReadonlyArrayType(target) && isTypeDerivedFrom(source, globalReadonlyArrayType); + return source.flags & 134217728 /* Union */ ? every(source.types, (t) => isTypeDerivedFrom(t, target)) : target.flags & 134217728 /* Union */ ? some(target.types, (t) => isTypeDerivedFrom(source, t)) : source.flags & 268435456 /* Intersection */ ? some(source.types, (t) => isTypeDerivedFrom(t, target)) : source.flags & 117964800 /* InstantiableNonPrimitive */ ? isTypeDerivedFrom(getBaseConstraintOfType(source) || unknownType, target) : isEmptyAnonymousObjectType(target) ? !!(source.flags & (1048576 /* Object */ | 131072 /* NonPrimitive */)) : target === globalObjectType ? !!(source.flags & (1048576 /* Object */ | 131072 /* NonPrimitive */)) && !isEmptyAnonymousObjectType(source) : target === globalFunctionType ? !!(source.flags & 1048576 /* Object */) && isFunctionObjectType(source) : hasBaseType(source, getTargetType(target)) || isArrayType(target) && !isReadonlyArrayType(target) && isTypeDerivedFrom(source, globalReadonlyArrayType); } function isTypeComparableTo(source, target) { return isTypeRelatedTo(source, target, comparableRelation); @@ -68436,7 +68585,7 @@ function createTypeChecker(host) { return false; } function isOrHasGenericConditional(type) { - return !!(type.flags & 16777216 /* Conditional */ || type.flags & 2097152 /* Intersection */ && some(type.types, isOrHasGenericConditional)); + return !!(type.flags & 67108864 /* Conditional */ || type.flags & 268435456 /* Intersection */ && some(type.types, isOrHasGenericConditional)); } function elaborateError(node, source, target, relation, headMessage, containingMessageChain, errorOutputContainer) { if (!node || isOrHasGenericConditional(target)) return false; @@ -68482,7 +68631,7 @@ function createTypeChecker(host) { for (const signatures of [constructSignatures, callSignatures]) { if (some(signatures, (s) => { const returnType = getReturnTypeOfSignature(s); - return !(returnType.flags & (1 /* Any */ | 131072 /* Never */)) && checkTypeRelatedTo( + return !(returnType.flags & (1 /* Any */ | 262144 /* Never */)) && checkTypeRelatedTo( returnType, target, relation, @@ -68589,7 +68738,7 @@ function createTypeChecker(host) { if (idx) { return idx; } - if (target.flags & 1048576 /* Union */) { + if (target.flags & 134217728 /* Union */) { const best = getBestMatchingType(source, target); if (best) { return getIndexedAccessTypeOrUndefined(best, nameType); @@ -68612,7 +68761,7 @@ function createTypeChecker(host) { for (const value of iterator) { const { errorNode: prop, innerExpression: next, nameType, errorMessage } = value; let targetPropType = getBestMatchIndexedAccessTypeOrUndefined(source, target, nameType); - if (!targetPropType || targetPropType.flags & 8388608 /* IndexedAccess */) continue; + if (!targetPropType || targetPropType.flags & 33554432 /* IndexedAccess */) continue; let sourcePropType = getIndexedAccessTypeOrUndefined(source, nameType); if (!sourcePropType) continue; const propName = getPropertyNameFromIndex( @@ -68662,20 +68811,20 @@ function createTypeChecker(host) { let issuedElaboration = false; if (!targetProp) { const indexInfo = getApplicableIndexInfo(target, nameType); - if (indexInfo && indexInfo.declaration && !getSourceFileOfNode(indexInfo.declaration).hasNoDefaultLib) { + if (indexInfo && indexInfo.declaration && !host.isSourceFileDefaultLibrary(getSourceFileOfNode(indexInfo.declaration))) { issuedElaboration = true; addRelatedInfo(reportedDiag, createDiagnosticForNode(indexInfo.declaration, Diagnostics.The_expected_type_comes_from_this_index_signature)); } } if (!issuedElaboration && (targetProp && length(targetProp.declarations) || target.symbol && length(target.symbol.declarations))) { const targetNode = targetProp && length(targetProp.declarations) ? targetProp.declarations[0] : target.symbol.declarations[0]; - if (!getSourceFileOfNode(targetNode).hasNoDefaultLib) { + if (!host.isSourceFileDefaultLibrary(getSourceFileOfNode(targetNode))) { addRelatedInfo( reportedDiag, createDiagnosticForNode( targetNode, Diagnostics.The_expected_type_comes_from_property_0_which_is_declared_here_on_type_1, - propertyName && !(nameType.flags & 8192 /* UniqueESSymbol */) ? unescapeLeadingUnderscores(propertyName) : typeToString(nameType), + propertyName && !(nameType.flags & 16384 /* UniqueESSymbol */) ? unescapeLeadingUnderscores(propertyName) : typeToString(nameType), typeToString(target) ) ); @@ -68702,7 +68851,7 @@ function createTypeChecker(host) { const { errorNode: prop, innerExpression: next, nameType, errorMessage } = status.value; let targetPropType = iterationType; const targetIndexedPropType = tupleOrArrayLikeTargetParts !== neverType ? getBestMatchIndexedAccessTypeOrUndefined(source, tupleOrArrayLikeTargetParts, nameType) : void 0; - if (targetIndexedPropType && !(targetIndexedPropType.flags & 8388608 /* IndexedAccess */)) { + if (targetIndexedPropType && !(targetIndexedPropType.flags & 33554432 /* IndexedAccess */)) { targetPropType = iterationType ? getUnionType([iterationType, targetIndexedPropType]) : targetIndexedPropType; } if (!targetPropType) continue; @@ -68842,9 +68991,9 @@ function createTypeChecker(host) { const elem = getElaborationElementForJsxChild(child, childrenNameType, getInvalidTextualChildDiagnostic); if (elem) { result = elaborateElementwise( - function* () { + (function* () { yield elem; - }(), + })(), source, target, relation, @@ -68892,7 +69041,7 @@ function createTypeChecker(host) { } } function elaborateArrayLiteral(node, source, target, relation, containingMessageChain, errorOutputContainer) { - if (target.flags & (402784252 /* Primitive */ | 131072 /* Never */)) return false; + if (target.flags & (12713980 /* Primitive */ | 262144 /* Never */)) return false; if (isTupleLikeType(source)) { return elaborateElementwise(generateLimitedTupleElements(node, target), source, target, relation, containingMessageChain, errorOutputContainer); } @@ -68918,8 +69067,8 @@ function createTypeChecker(host) { if (!length(node.properties)) return; for (const prop of node.properties) { if (isSpreadAssignment(prop)) continue; - const type = getLiteralTypeFromProperty(getSymbolOfDeclaration(prop), 8576 /* StringOrNumberLiteralOrUnique */); - if (!type || type.flags & 131072 /* Never */) { + const type = getLiteralTypeFromProperty(getSymbolOfDeclaration(prop), 19456 /* StringOrNumberLiteralOrUnique */); + if (!type || type.flags & 262144 /* Never */) { continue; } switch (prop.kind) { @@ -68938,7 +69087,7 @@ function createTypeChecker(host) { } } function elaborateObjectLiteral(node, source, target, relation, containingMessageChain, errorOutputContainer) { - if (target.flags & (402784252 /* Primitive */ | 131072 /* Never */)) return false; + if (target.flags & (12713980 /* Primitive */ | 262144 /* Never */)) return false; return elaborateElementwise(generateObjectLiteralElements(node), source, target, relation, containingMessageChain, errorOutputContainer); } function checkTypeComparableTo(source, target, errorNode, headMessage, containingMessageChain) { @@ -68964,11 +69113,11 @@ function createTypeChecker(host) { if (!s.typeParameters && (!s.thisParameter || isTypeAny(getTypeOfParameter(s.thisParameter))) && s.parameters.length === 1 && signatureHasRestParameter(s)) { const paramType = getTypeOfParameter(s.parameters[0]); const restType = isArrayType(paramType) ? getTypeArguments(paramType)[0] : paramType; - return !!(restType.flags & (1 /* Any */ | 131072 /* Never */) && getReturnTypeOfSignature(s).flags & 3 /* AnyOrUnknown */); + return !!(restType.flags & (1 /* Any */ | 262144 /* Never */) && getReturnTypeOfSignature(s).flags & 3 /* AnyOrUnknown */); } return false; } - function compareSignaturesRelated(source, target, checkMode, reportErrors2, errorReporter, incompatibleErrorReporter, compareTypes, reportUnreliableMarkers) { + function compareSignaturesRelated(source, target, checkMode, reportErrors2, errorReporter, incompatibleErrorReporter, compareTypes2, reportUnreliableMarkers) { if (source === target) { return -1 /* True */; } @@ -68993,7 +69142,7 @@ function createTypeChecker(host) { target, /*inferenceContext*/ void 0, - compareTypes + compareTypes2 ); } const sourceCount = getParameterCount(source); @@ -69009,12 +69158,12 @@ function createTypeChecker(host) { if (sourceThisType && sourceThisType !== voidType) { const targetThisType = getThisTypeOfSignature(target); if (targetThisType) { - const related = !strictVariance && compareTypes( + const related = !strictVariance && compareTypes2( sourceThisType, targetThisType, /*reportErrors*/ false - ) || compareTypes(targetThisType, sourceThisType, reportErrors2); + ) || compareTypes2(targetThisType, sourceThisType, reportErrors2); if (!related) { if (reportErrors2) { errorReporter(Diagnostics.The_this_types_of_each_signature_are_incompatible); @@ -69033,13 +69182,13 @@ function createTypeChecker(host) { const sourceSig = checkMode & 3 /* Callback */ || isInstantiatedGenericParameter(source, i) ? void 0 : getSingleCallSignature(getNonNullableType(sourceType)); const targetSig = checkMode & 3 /* Callback */ || isInstantiatedGenericParameter(target, i) ? void 0 : getSingleCallSignature(getNonNullableType(targetType)); const callbacks = sourceSig && targetSig && !getTypePredicateOfSignature(sourceSig) && !getTypePredicateOfSignature(targetSig) && getTypeFacts(sourceType, 50331648 /* IsUndefinedOrNull */) === getTypeFacts(targetType, 50331648 /* IsUndefinedOrNull */); - let related = callbacks ? compareSignaturesRelated(targetSig, sourceSig, checkMode & 8 /* StrictArity */ | (strictVariance ? 2 /* StrictCallback */ : 1 /* BivariantCallback */), reportErrors2, errorReporter, incompatibleErrorReporter, compareTypes, reportUnreliableMarkers) : !(checkMode & 3 /* Callback */) && !strictVariance && compareTypes( + let related = callbacks ? compareSignaturesRelated(targetSig, sourceSig, checkMode & 8 /* StrictArity */ | (strictVariance ? 2 /* StrictCallback */ : 1 /* BivariantCallback */), reportErrors2, errorReporter, incompatibleErrorReporter, compareTypes2, reportUnreliableMarkers) : !(checkMode & 3 /* Callback */) && !strictVariance && compareTypes2( sourceType, targetType, /*reportErrors*/ false - ) || compareTypes(targetType, sourceType, reportErrors2); - if (related && checkMode & 8 /* StrictArity */ && i >= getMinArgumentCount(source) && i < getMinArgumentCount(target) && compareTypes( + ) || compareTypes2(targetType, sourceType, reportErrors2); + if (related && checkMode & 8 /* StrictArity */ && i >= getMinArgumentCount(source) && i < getMinArgumentCount(target) && compareTypes2( sourceType, targetType, /*reportErrors*/ @@ -69066,7 +69215,7 @@ function createTypeChecker(host) { if (targetTypePredicate) { const sourceTypePredicate = getTypePredicateOfSignature(source); if (sourceTypePredicate) { - result &= compareTypePredicateRelatedTo(sourceTypePredicate, targetTypePredicate, reportErrors2, errorReporter, compareTypes); + result &= compareTypePredicateRelatedTo(sourceTypePredicate, targetTypePredicate, reportErrors2, errorReporter, compareTypes2); } else if (isIdentifierTypePredicate(targetTypePredicate) || isThisTypePredicate(targetTypePredicate)) { if (reportErrors2) { errorReporter(Diagnostics.Signature_0_must_be_a_type_predicate, signatureToString(source)); @@ -69074,12 +69223,12 @@ function createTypeChecker(host) { return 0 /* False */; } } else { - result &= checkMode & 1 /* BivariantCallback */ && compareTypes( + result &= checkMode & 1 /* BivariantCallback */ && compareTypes2( targetReturnType, sourceReturnType, /*reportErrors*/ false - ) || compareTypes(sourceReturnType, targetReturnType, reportErrors2); + ) || compareTypes2(sourceReturnType, targetReturnType, reportErrors2); if (!result && reportErrors2 && incompatibleErrorReporter) { incompatibleErrorReporter(sourceReturnType, targetReturnType); } @@ -69087,7 +69236,7 @@ function createTypeChecker(host) { } return result; } - function compareTypePredicateRelatedTo(source, target, reportErrors2, errorReporter, compareTypes) { + function compareTypePredicateRelatedTo(source, target, reportErrors2, errorReporter, compareTypes2) { if (source.kind !== target.kind) { if (reportErrors2) { errorReporter(Diagnostics.A_this_based_type_guard_is_not_compatible_with_a_parameter_based_type_guard); @@ -69104,7 +69253,7 @@ function createTypeChecker(host) { return 0 /* False */; } } - const related = source.type === target.type ? -1 /* True */ : source.type && target.type ? compareTypes(source.type, target.type, reportErrors2) : 0 /* False */; + const related = source.type === target.type ? -1 /* True */ : source.type && target.type ? compareTypes2(source.type, target.type, reportErrors2) : 0 /* False */; if (related === 0 /* False */ && reportErrors2) { errorReporter(Diagnostics.Type_predicate_0_is_not_assignable_to_1, typePredicateToString(source), typePredicateToString(target)); } @@ -69129,30 +69278,30 @@ function createTypeChecker(host) { return t !== anyFunctionType && t.properties.length === 0 && t.callSignatures.length === 0 && t.constructSignatures.length === 0 && t.indexInfos.length === 0; } function isEmptyObjectType(type) { - return type.flags & 524288 /* Object */ ? !isGenericMappedType(type) && isEmptyResolvedType(resolveStructuredTypeMembers(type)) : type.flags & 67108864 /* NonPrimitive */ ? true : type.flags & 1048576 /* Union */ ? some(type.types, isEmptyObjectType) : type.flags & 2097152 /* Intersection */ ? every(type.types, isEmptyObjectType) : false; + return type.flags & 1048576 /* Object */ ? !isGenericMappedType(type) && isEmptyResolvedType(resolveStructuredTypeMembers(type)) : type.flags & 131072 /* NonPrimitive */ ? true : type.flags & 134217728 /* Union */ ? some(type.types, isEmptyObjectType) : type.flags & 268435456 /* Intersection */ ? every(type.types, isEmptyObjectType) : false; } function isEmptyAnonymousObjectType(type) { return !!(getObjectFlags(type) & 16 /* Anonymous */ && (type.members && isEmptyResolvedType(type) || type.symbol && type.symbol.flags & 2048 /* TypeLiteral */ && getMembersOfSymbol(type.symbol).size === 0)); } function isUnknownLikeUnionType(type) { - if (strictNullChecks && type.flags & 1048576 /* Union */) { + if (strictNullChecks && type.flags & 134217728 /* Union */) { if (!(type.objectFlags & 33554432 /* IsUnknownLikeUnionComputed */)) { const types = type.types; - type.objectFlags |= 33554432 /* IsUnknownLikeUnionComputed */ | (types.length >= 3 && types[0].flags & 32768 /* Undefined */ && types[1].flags & 65536 /* Null */ && some(types, isEmptyAnonymousObjectType) ? 67108864 /* IsUnknownLikeUnion */ : 0); + type.objectFlags |= 33554432 /* IsUnknownLikeUnionComputed */ | (types.length >= 3 && types[0].flags & 4 /* Undefined */ && types[1].flags & 8 /* Null */ && some(types, isEmptyAnonymousObjectType) ? 67108864 /* IsUnknownLikeUnion */ : 0); } return !!(type.objectFlags & 67108864 /* IsUnknownLikeUnion */); } return false; } function containsUndefinedType(type) { - return !!((type.flags & 1048576 /* Union */ ? type.types[0] : type).flags & 32768 /* Undefined */); + return !!((type.flags & 134217728 /* Union */ ? type.types[0] : type).flags & 4 /* Undefined */); } function containsNonMissingUndefinedType(type) { - const candidate = type.flags & 1048576 /* Union */ ? type.types[0] : type; - return !!(candidate.flags & 32768 /* Undefined */) && candidate !== missingType; + const candidate = type.flags & 134217728 /* Union */ ? type.types[0] : type; + return !!(candidate.flags & 4 /* Undefined */) && candidate !== missingType; } function isStringIndexSignatureOnlyType(type) { - return type.flags & 524288 /* Object */ && !isGenericMappedType(type) && getPropertiesOfType(type).length === 0 && getIndexInfosOfType(type).length === 1 && !!getIndexInfoOfType(type, stringType) || type.flags & 3145728 /* UnionOrIntersection */ && every(type.types, isStringIndexSignatureOnlyType) || false; + return type.flags & 1048576 /* Object */ && !isGenericMappedType(type) && getPropertiesOfType(type).length === 0 && getIndexInfosOfType(type).length === 1 && !!getIndexInfoOfType(type, stringType) || type.flags & 402653184 /* UnionOrIntersection */ && every(type.types, isStringIndexSignatureOnlyType) || false; } function isEnumTypeRelatedTo(source, target, errorReporter) { const sourceSymbol = source.flags & 8 /* EnumMember */ ? getParentOfSymbol(source) : source; @@ -69217,28 +69366,28 @@ function createTypeChecker(host) { function isSimpleTypeRelatedTo(source, target, relation, errorReporter) { const s = source.flags; const t = target.flags; - if (t & 1 /* Any */ || s & 131072 /* Never */ || source === wildcardType) return true; + if (t & 1 /* Any */ || s & 262144 /* Never */ || source === wildcardType) return true; if (t & 2 /* Unknown */ && !(relation === strictSubtypeRelation && s & 1 /* Any */)) return true; - if (t & 131072 /* Never */) return false; - if (s & 402653316 /* StringLike */ && t & 4 /* String */) return true; - if (s & 128 /* StringLiteral */ && s & 1024 /* EnumLiteral */ && t & 128 /* StringLiteral */ && !(t & 1024 /* EnumLiteral */) && source.value === target.value) return true; - if (s & 296 /* NumberLike */ && t & 8 /* Number */) return true; - if (s & 256 /* NumberLiteral */ && s & 1024 /* EnumLiteral */ && t & 256 /* NumberLiteral */ && !(t & 1024 /* EnumLiteral */) && source.value === target.value) return true; - if (s & 2112 /* BigIntLike */ && t & 64 /* BigInt */) return true; - if (s & 528 /* BooleanLike */ && t & 16 /* Boolean */) return true; - if (s & 12288 /* ESSymbolLike */ && t & 4096 /* ESSymbol */) return true; - if (s & 32 /* Enum */ && t & 32 /* Enum */ && source.symbol.escapedName === target.symbol.escapedName && isEnumTypeRelatedTo(source.symbol, target.symbol, errorReporter)) return true; - if (s & 1024 /* EnumLiteral */ && t & 1024 /* EnumLiteral */) { - if (s & 1048576 /* Union */ && t & 1048576 /* Union */ && isEnumTypeRelatedTo(source.symbol, target.symbol, errorReporter)) return true; - if (s & 2944 /* Literal */ && t & 2944 /* Literal */ && source.value === target.value && isEnumTypeRelatedTo(source.symbol, target.symbol, errorReporter)) return true; - } - if (s & 32768 /* Undefined */ && (!strictNullChecks && !(t & 3145728 /* UnionOrIntersection */) || t & (32768 /* Undefined */ | 16384 /* Void */))) return true; - if (s & 65536 /* Null */ && (!strictNullChecks && !(t & 3145728 /* UnionOrIntersection */) || t & 65536 /* Null */)) return true; - if (s & 524288 /* Object */ && t & 67108864 /* NonPrimitive */ && !(relation === strictSubtypeRelation && isEmptyAnonymousObjectType(source) && !(getObjectFlags(source) & 8192 /* FreshLiteral */))) return true; + if (t & 262144 /* Never */) return false; + if (s & 12583968 /* StringLike */ && t & 32 /* String */) return true; + if (s & 1024 /* StringLiteral */ && s & 32768 /* EnumLiteral */ && t & 1024 /* StringLiteral */ && !(t & 32768 /* EnumLiteral */) && source.value === target.value) return true; + if (s & 67648 /* NumberLike */ && t & 64 /* Number */) return true; + if (s & 2048 /* NumberLiteral */ && s & 32768 /* EnumLiteral */ && t & 2048 /* NumberLiteral */ && !(t & 32768 /* EnumLiteral */) && source.value === target.value) return true; + if (s & 4224 /* BigIntLike */ && t & 128 /* BigInt */) return true; + if (s & 8448 /* BooleanLike */ && t & 256 /* Boolean */) return true; + if (s & 16896 /* ESSymbolLike */ && t & 512 /* ESSymbol */) return true; + if (s & 65536 /* Enum */ && t & 65536 /* Enum */ && source.symbol.escapedName === target.symbol.escapedName && isEnumTypeRelatedTo(source.symbol, target.symbol, errorReporter)) return true; + if (s & 32768 /* EnumLiteral */ && t & 32768 /* EnumLiteral */) { + if (s & 134217728 /* Union */ && t & 134217728 /* Union */ && isEnumTypeRelatedTo(source.symbol, target.symbol, errorReporter)) return true; + if (s & 15360 /* Literal */ && t & 15360 /* Literal */ && source.value === target.value && isEnumTypeRelatedTo(source.symbol, target.symbol, errorReporter)) return true; + } + if (s & 4 /* Undefined */ && (!strictNullChecks && !(t & 402653184 /* UnionOrIntersection */) || t & (4 /* Undefined */ | 16 /* Void */))) return true; + if (s & 8 /* Null */ && (!strictNullChecks && !(t & 402653184 /* UnionOrIntersection */) || t & 8 /* Null */)) return true; + if (s & 1048576 /* Object */ && t & 131072 /* NonPrimitive */ && !(relation === strictSubtypeRelation && isEmptyAnonymousObjectType(source) && !(getObjectFlags(source) & 8192 /* FreshLiteral */))) return true; if (relation === assignableRelation || relation === comparableRelation) { if (s & 1 /* Any */) return true; - if (s & 8 /* Number */ && (t & 32 /* Enum */ || t & 256 /* NumberLiteral */ && t & 1024 /* EnumLiteral */)) return true; - if (s & 256 /* NumberLiteral */ && !(s & 1024 /* EnumLiteral */) && (t & 32 /* Enum */ || t & 256 /* NumberLiteral */ && t & 1024 /* EnumLiteral */ && source.value === target.value)) return true; + if (s & 64 /* Number */ && (t & 65536 /* Enum */ || t & 2048 /* NumberLiteral */ && t & 32768 /* EnumLiteral */)) return true; + if (s & 2048 /* NumberLiteral */ && !(s & 32768 /* EnumLiteral */) && (t & 65536 /* Enum */ || t & 2048 /* NumberLiteral */ && t & 32768 /* EnumLiteral */ && source.value === target.value)) return true; if (isUnknownLikeUnionType(target)) return true; } return false; @@ -69254,14 +69403,14 @@ function createTypeChecker(host) { return true; } if (relation !== identityRelation) { - if (relation === comparableRelation && !(target.flags & 131072 /* Never */) && isSimpleTypeRelatedTo(target, source, relation) || isSimpleTypeRelatedTo(source, target, relation)) { + if (relation === comparableRelation && !(target.flags & 262144 /* Never */) && isSimpleTypeRelatedTo(target, source, relation) || isSimpleTypeRelatedTo(source, target, relation)) { return true; } - } else if (!((source.flags | target.flags) & (3145728 /* UnionOrIntersection */ | 8388608 /* IndexedAccess */ | 16777216 /* Conditional */ | 33554432 /* Substitution */))) { + } else if (!((source.flags | target.flags) & (402653184 /* UnionOrIntersection */ | 33554432 /* IndexedAccess */ | 67108864 /* Conditional */ | 16777216 /* Substitution */))) { if (source.flags !== target.flags) return false; - if (source.flags & 67358815 /* Singleton */) return true; + if (source.flags & 394239 /* Singleton */) return true; } - if (source.flags & 524288 /* Object */ && target.flags & 524288 /* Object */) { + if (source.flags & 1048576 /* Object */ && target.flags & 1048576 /* Object */) { const related = relation.get(getRelationKey( source, target, @@ -69274,7 +69423,7 @@ function createTypeChecker(host) { return !!(related & 1 /* Succeeded */); } } - if (source.flags & 469499904 /* StructuredOrInstantiable */ || target.flags & 469499904 /* StructuredOrInstantiable */) { + if (source.flags & 536346624 /* StructuredOrInstantiable */ || target.flags & 536346624 /* StructuredOrInstantiable */) { return checkTypeRelatedTo( source, target, @@ -69290,7 +69439,7 @@ function createTypeChecker(host) { } function getNormalizedType(type, writing) { while (true) { - const t = isFreshLiteralType(type) ? type.regularType : isGenericTupleType(type) ? getNormalizedTupleType(type, writing) : getObjectFlags(type) & 4 /* Reference */ ? type.node ? createTypeReference(type.target, getTypeArguments(type)) : getSingleBaseForNonAugmentingSubtype(type) || type : type.flags & 3145728 /* UnionOrIntersection */ ? getNormalizedUnionOrIntersectionType(type, writing) : type.flags & 33554432 /* Substitution */ ? writing ? type.baseType : getSubstitutionIntersection(type) : type.flags & 25165824 /* Simplifiable */ ? getSimplifiedType(type, writing) : type; + const t = isFreshLiteralType(type) ? type.regularType : isGenericTupleType(type) ? getNormalizedTupleType(type, writing) : getObjectFlags(type) & 4 /* Reference */ ? type.node ? createTypeReference(type.target, getTypeArguments(type)) : getSingleBaseForNonAugmentingSubtype(type) || type : type.flags & 402653184 /* UnionOrIntersection */ ? getNormalizedUnionOrIntersectionType(type, writing) : type.flags & 16777216 /* Substitution */ ? writing ? type.baseType : getSubstitutionIntersection(type) : type.flags & 102760448 /* Simplifiable */ ? getSimplifiedType(type, writing) : type; if (t === type) return t; type = t; } @@ -69300,7 +69449,7 @@ function createTypeChecker(host) { if (reduced !== type) { return reduced; } - if (type.flags & 2097152 /* Intersection */ && shouldNormalizeIntersection(type)) { + if (type.flags & 268435456 /* Intersection */ && shouldNormalizeIntersection(type)) { const normalizedTypes = sameMap(type.types, (t) => getNormalizedType(t, writing)); if (normalizedTypes !== type.types) { return getIntersectionType(normalizedTypes); @@ -69312,15 +69461,15 @@ function createTypeChecker(host) { let hasInstantiable = false; let hasNullableOrEmpty = false; for (const t of type.types) { - hasInstantiable || (hasInstantiable = !!(t.flags & 465829888 /* Instantiable */)); - hasNullableOrEmpty || (hasNullableOrEmpty = !!(t.flags & 98304 /* Nullable */) || isEmptyAnonymousObjectType(t)); + hasInstantiable || (hasInstantiable = !!(t.flags & 132644864 /* Instantiable */)); + hasNullableOrEmpty || (hasNullableOrEmpty = !!(t.flags & 12 /* Nullable */) || isEmptyAnonymousObjectType(t)); if (hasInstantiable && hasNullableOrEmpty) return true; } return false; } function getNormalizedTupleType(type, writing) { const elements = getElementTypes(type); - const normalizedElements = sameMap(elements, (t) => t.flags & 25165824 /* Simplifiable */ ? getSimplifiedType(t, writing) : t); + const normalizedElements = sameMap(elements, (t) => t.flags & 102760448 /* Simplifiable */ ? getSimplifiedType(t, writing) : t); return elements !== normalizedElements ? createNormalizedTupleType(type.target, normalizedElements) : type; } function checkTypeRelatedTo(source, target, relation, errorNode, headMessage, containingMessageChain, errorOutputContainer) { @@ -69550,13 +69699,13 @@ function createTypeChecker(host) { const [sourceType, targetType] = getTypeNamesForErrorDisplay(source2, target2); let generalizedSource = source2; let generalizedSourceType = sourceType; - if (!(target2.flags & 131072 /* Never */) && isLiteralType(source2) && !typeCouldHaveTopLevelSingletonTypes(target2)) { + if (!(target2.flags & 262144 /* Never */) && isLiteralType(source2) && !typeCouldHaveTopLevelSingletonTypes(target2)) { generalizedSource = getBaseTypeOfLiteralType(source2); Debug.assert(!isTypeAssignableTo(generalizedSource, target2), "generalized source shouldn't be assignable"); generalizedSourceType = getTypeNameForErrorDisplay(generalizedSource); } - const targetFlags = target2.flags & 8388608 /* IndexedAccess */ && !(source2.flags & 8388608 /* IndexedAccess */) ? target2.objectType.flags : target2.flags; - if (targetFlags & 262144 /* TypeParameter */ && target2 !== markerSuperTypeForCheck && target2 !== markerSubTypeForCheck) { + const targetFlags = target2.flags & 33554432 /* IndexedAccess */ && !(source2.flags & 33554432 /* IndexedAccess */) ? target2.objectType.flags : target2.flags; + if (targetFlags & 524288 /* TypeParameter */ && target2 !== markerSuperTypeForCheck && target2 !== markerSubTypeForCheck) { const constraint = getBaseConstraintOfType(target2); let needsOriginalSource; if (constraint && (isTypeAssignableTo(generalizedSource, constraint) || (needsOriginalSource = isTypeAssignableTo(source2, constraint)))) { @@ -69583,7 +69732,7 @@ function createTypeChecker(host) { } else if (exactOptionalPropertyTypes && getExactOptionalUnassignableProperties(source2, target2).length) { message = Diagnostics.Type_0_is_not_assignable_to_type_1_with_exactOptionalPropertyTypes_Colon_true_Consider_adding_undefined_to_the_types_of_the_target_s_properties; } else { - if (source2.flags & 128 /* StringLiteral */ && target2.flags & 1048576 /* Union */) { + if (source2.flags & 1024 /* StringLiteral */ && target2.flags & 134217728 /* Union */) { const suggestedType = getSuggestedTypeForNonexistentStringLiteralType(source2, target2); if (suggestedType) { reportError(Diagnostics.Type_0_is_not_assignable_to_type_1_Did_you_mean_2, generalizedSourceType, targetType, typeToString(suggestedType)); @@ -69630,8 +69779,8 @@ function createTypeChecker(host) { } function isRelatedTo(originalSource, originalTarget, recursionFlags = 3 /* Both */, reportErrors2 = false, headMessage2, intersectionState = 0 /* None */) { if (originalSource === originalTarget) return -1 /* True */; - if (originalSource.flags & 524288 /* Object */ && originalTarget.flags & 402784252 /* Primitive */) { - if (relation === comparableRelation && !(originalTarget.flags & 131072 /* Never */) && isSimpleTypeRelatedTo(originalTarget, originalSource, relation) || isSimpleTypeRelatedTo(originalSource, originalTarget, relation, reportErrors2 ? reportError : void 0)) { + if (originalSource.flags & 1048576 /* Object */ && originalTarget.flags & 12713980 /* Primitive */) { + if (relation === comparableRelation && !(originalTarget.flags & 262144 /* Never */) && isSimpleTypeRelatedTo(originalTarget, originalSource, relation) || isSimpleTypeRelatedTo(originalSource, originalTarget, relation, reportErrors2 ? reportError : void 0)) { return -1 /* True */; } if (reportErrors2) { @@ -69652,7 +69801,7 @@ function createTypeChecker(host) { if (source2 === target2) return -1 /* True */; if (relation === identityRelation) { if (source2.flags !== target2.flags) return 0 /* False */; - if (source2.flags & 67358815 /* Singleton */) return -1 /* True */; + if (source2.flags & 394239 /* Singleton */) return -1 /* True */; traceUnionsOrIntersectionsTooLarge(source2, target2); return recursiveTypeRelatedTo( source2, @@ -69663,13 +69812,13 @@ function createTypeChecker(host) { recursionFlags ); } - if (source2.flags & 262144 /* TypeParameter */ && getConstraintOfType(source2) === target2) { + if (source2.flags & 524288 /* TypeParameter */ && getConstraintOfType(source2) === target2) { return -1 /* True */; } - if (source2.flags & 470302716 /* DefinitelyNonNullable */ && target2.flags & 1048576 /* Union */) { + if (source2.flags & 13893600 /* DefinitelyNonNullable */ && target2.flags & 134217728 /* Union */) { const types = target2.types; - const candidate = types.length === 2 && types[0].flags & 98304 /* Nullable */ ? types[1] : types.length === 3 && types[0].flags & 98304 /* Nullable */ && types[1].flags & 98304 /* Nullable */ ? types[2] : void 0; - if (candidate && !(candidate.flags & 98304 /* Nullable */)) { + const candidate = types.length === 2 && types[0].flags & 12 /* Nullable */ ? types[1] : types.length === 3 && types[0].flags & 12 /* Nullable */ && types[1].flags & 12 /* Nullable */ ? types[2] : void 0; + if (candidate && !(candidate.flags & 12 /* Nullable */)) { target2 = getNormalizedType( candidate, /*writing*/ @@ -69678,8 +69827,8 @@ function createTypeChecker(host) { if (source2 === target2) return -1 /* True */; } } - if (relation === comparableRelation && !(target2.flags & 131072 /* Never */) && isSimpleTypeRelatedTo(target2, source2, relation) || isSimpleTypeRelatedTo(source2, target2, relation, reportErrors2 ? reportError : void 0)) return -1 /* True */; - if (source2.flags & 469499904 /* StructuredOrInstantiable */ || target2.flags & 469499904 /* StructuredOrInstantiable */) { + if (relation === comparableRelation && !(target2.flags & 262144 /* Never */) && isSimpleTypeRelatedTo(target2, source2, relation) || isSimpleTypeRelatedTo(source2, target2, relation, reportErrors2 ? reportError : void 0)) return -1 /* True */; + if (source2.flags & 536346624 /* StructuredOrInstantiable */ || target2.flags & 536346624 /* StructuredOrInstantiable */) { const isPerformingExcessPropertyChecks = !(intersectionState & 2 /* Target */) && (isObjectLiteralType2(source2) && getObjectFlags(source2) & 8192 /* FreshLiteral */); if (isPerformingExcessPropertyChecks) { if (hasExcessProperties(source2, target2, reportErrors2)) { @@ -69689,7 +69838,7 @@ function createTypeChecker(host) { return 0 /* False */; } } - const isPerformingCommonPropertyChecks = (relation !== comparableRelation || isUnitType(source2)) && !(intersectionState & 2 /* Target */) && source2.flags & (402784252 /* Primitive */ | 524288 /* Object */ | 2097152 /* Intersection */) && source2 !== globalObjectType && target2.flags & (524288 /* Object */ | 2097152 /* Intersection */) && isWeakType(target2) && (getPropertiesOfType(source2).length > 0 || typeHasCallOrConstructSignatures(source2)); + const isPerformingCommonPropertyChecks = (relation !== comparableRelation || isUnitType(source2)) && !(intersectionState & 2 /* Target */) && source2.flags & (12713980 /* Primitive */ | 1048576 /* Object */ | 268435456 /* Intersection */) && source2 !== globalObjectType && target2.flags & (1048576 /* Object */ | 268435456 /* Intersection */) && isWeakType(target2) && (getPropertiesOfType(source2).length > 0 || typeHasCallOrConstructSignatures(source2)); const isComparingJsxAttributes = !!(getObjectFlags(source2) & 2048 /* JsxAttributes */); if (isPerformingCommonPropertyChecks && !hasCommonProperties(source2, target2, isComparingJsxAttributes)) { if (reportErrors2) { @@ -69718,7 +69867,7 @@ function createTypeChecker(host) { return 0 /* False */; } traceUnionsOrIntersectionsTooLarge(source2, target2); - const skipCaching = source2.flags & 1048576 /* Union */ && source2.types.length < 4 && !(target2.flags & 1048576 /* Union */) || target2.flags & 1048576 /* Union */ && target2.types.length < 4 && !(source2.flags & 469499904 /* StructuredOrInstantiable */); + const skipCaching = source2.flags & 134217728 /* Union */ && source2.types.length < 4 && !(target2.flags & 134217728 /* Union */) || target2.flags & 134217728 /* Union */ && target2.types.length < 4 && !(source2.flags & 536346624 /* StructuredOrInstantiable */); const result2 = skipCaching ? unionOrIntersectionRelatedTo(source2, target2, reportErrors2, intersectionState) : recursiveTypeRelatedTo(source2, target2, reportErrors2, intersectionState, recursionFlags); if (result2) { return result2; @@ -69739,7 +69888,7 @@ function createTypeChecker(host) { if (maybeSuppress) { overrideNextErrorInfo--; } - if (source2.flags & 524288 /* Object */ && target2.flags & 524288 /* Object */) { + if (source2.flags & 1048576 /* Object */ && target2.flags & 1048576 /* Object */) { const currentError = errorInfo; tryElaborateArrayLikeErrors( source2, @@ -69751,11 +69900,11 @@ function createTypeChecker(host) { maybeSuppress = !!errorInfo; } } - if (source2.flags & 524288 /* Object */ && target2.flags & 402784252 /* Primitive */) { + if (source2.flags & 1048576 /* Object */ && target2.flags & 12713980 /* Primitive */) { tryElaborateErrorsForPrimitivesAndObjects(source2, target2); - } else if (source2.symbol && source2.flags & 524288 /* Object */ && globalObjectType === source2) { + } else if (source2.symbol && source2.flags & 1048576 /* Object */ && globalObjectType === source2) { reportError(Diagnostics.The_Object_type_is_assignable_to_very_few_other_types_Did_you_mean_to_use_the_any_type_instead); - } else if (getObjectFlags(source2) & 2048 /* JsxAttributes */ && target2.flags & 2097152 /* Intersection */) { + } else if (getObjectFlags(source2) & 2048 /* JsxAttributes */ && target2.flags & 268435456 /* Intersection */) { const targetTypes = target2.types; const intrinsicAttributes = getJsxType(JsxNames.IntrinsicAttributes, errorNode); const intrinsicClassAttributes = getJsxType(JsxNames.IntrinsicClassAttributes, errorNode); @@ -69780,7 +69929,7 @@ function createTypeChecker(host) { return; } reportRelationError(headMessage2, source2, target2); - if (source2.flags & 262144 /* TypeParameter */ && ((_b = (_a2 = source2.symbol) == null ? void 0 : _a2.declarations) == null ? void 0 : _b[0]) && !getConstraintOfType(source2)) { + if (source2.flags & 524288 /* TypeParameter */ && ((_b = (_a2 = source2.symbol) == null ? void 0 : _a2.declarations) == null ? void 0 : _b[0]) && !getConstraintOfType(source2)) { const syntheticParam = cloneTypeParameter(source2); syntheticParam.constraint = instantiateType(target2, makeUnaryTypeMapper(source2, syntheticParam)); if (hasNonCircularBaseConstraint(syntheticParam)) { @@ -69793,7 +69942,7 @@ function createTypeChecker(host) { if (!tracing) { return; } - if (source2.flags & 3145728 /* UnionOrIntersection */ && target2.flags & 3145728 /* UnionOrIntersection */) { + if (source2.flags & 402653184 /* UnionOrIntersection */ && target2.flags & 402653184 /* UnionOrIntersection */) { const sourceUnionOrIntersection = source2; const targetUnionOrIntersection = target2; if (sourceUnionOrIntersection.objectFlags & targetUnionOrIntersection.objectFlags & 32768 /* PrimitiveUnion */) { @@ -69817,7 +69966,7 @@ function createTypeChecker(host) { const appendPropType = (propTypes, type) => { var _a2; type = getApparentType(type); - const prop = type.flags & 3145728 /* UnionOrIntersection */ ? getPropertyOfUnionOrIntersectionType(type, name) : getPropertyOfObjectType(type, name); + const prop = type.flags & 402653184 /* UnionOrIntersection */ ? getPropertyOfUnionOrIntersectionType(type, name) : getPropertyOfObjectType(type, name); const propType = prop && getTypeOfSymbol(prop) || ((_a2 = getApplicableIndexInfoForName(type, name)) == null ? void 0 : _a2.type) || undefinedType; return append(propTypes, propType); }; @@ -69839,9 +69988,9 @@ function createTypeChecker(host) { } let reducedTarget = target2; let checkTypes; - if (target2.flags & 1048576 /* Union */) { + if (target2.flags & 134217728 /* Union */) { reducedTarget = findMatchingDiscriminantType(source2, target2, isRelatedTo) || filterPrimitivesIfContainsNonPrimitive(target2); - checkTypes = reducedTarget.flags & 1048576 /* Union */ ? reducedTarget.types : [reducedTarget]; + checkTypes = reducedTarget.flags & 134217728 /* Union */ ? reducedTarget.types : [reducedTarget]; } for (const prop of getPropertiesOfType(source2)) { if (shouldCheckAsExcessProperty(prop, source2.symbol) && !isIgnoredJsxProperty(source2, prop)) { @@ -69896,33 +70045,33 @@ function createTypeChecker(host) { return prop.valueDeclaration && container.valueDeclaration && prop.valueDeclaration.parent === container.valueDeclaration; } function unionOrIntersectionRelatedTo(source2, target2, reportErrors2, intersectionState) { - if (source2.flags & 1048576 /* Union */) { - if (target2.flags & 1048576 /* Union */) { + if (source2.flags & 134217728 /* Union */) { + if (target2.flags & 134217728 /* Union */) { const sourceOrigin = source2.origin; - if (sourceOrigin && sourceOrigin.flags & 2097152 /* Intersection */ && target2.aliasSymbol && contains(sourceOrigin.types, target2)) { + if (sourceOrigin && sourceOrigin.flags & 268435456 /* Intersection */ && target2.aliasSymbol && contains(sourceOrigin.types, target2)) { return -1 /* True */; } const targetOrigin = target2.origin; - if (targetOrigin && targetOrigin.flags & 1048576 /* Union */ && source2.aliasSymbol && contains(targetOrigin.types, source2)) { + if (targetOrigin && targetOrigin.flags & 134217728 /* Union */ && source2.aliasSymbol && contains(targetOrigin.types, source2)) { return -1 /* True */; } } - return relation === comparableRelation ? someTypeRelatedToType(source2, target2, reportErrors2 && !(source2.flags & 402784252 /* Primitive */), intersectionState) : eachTypeRelatedToType(source2, target2, reportErrors2 && !(source2.flags & 402784252 /* Primitive */), intersectionState); + return relation === comparableRelation ? someTypeRelatedToType(source2, target2, reportErrors2 && !(source2.flags & 12713980 /* Primitive */), intersectionState) : eachTypeRelatedToType(source2, target2, reportErrors2 && !(source2.flags & 12713980 /* Primitive */), intersectionState); } - if (target2.flags & 1048576 /* Union */) { - return typeRelatedToSomeType(getRegularTypeOfObjectLiteral(source2), target2, reportErrors2 && !(source2.flags & 402784252 /* Primitive */) && !(target2.flags & 402784252 /* Primitive */), intersectionState); + if (target2.flags & 134217728 /* Union */) { + return typeRelatedToSomeType(getRegularTypeOfObjectLiteral(source2), target2, reportErrors2 && !(source2.flags & 12713980 /* Primitive */) && !(target2.flags & 12713980 /* Primitive */), intersectionState); } - if (target2.flags & 2097152 /* Intersection */) { + if (target2.flags & 268435456 /* Intersection */) { return typeRelatedToEachType(source2, target2, reportErrors2, 2 /* Target */); } - if (relation === comparableRelation && target2.flags & 402784252 /* Primitive */) { - const constraints = sameMap(source2.types, (t) => t.flags & 465829888 /* Instantiable */ ? getBaseConstraintOfType(t) || unknownType : t); + if (relation === comparableRelation && target2.flags & 12713980 /* Primitive */) { + const constraints = sameMap(source2.types, (t) => t.flags & 132644864 /* Instantiable */ ? getBaseConstraintOfType(t) || unknownType : t); if (constraints !== source2.types) { source2 = getIntersectionType(constraints); - if (source2.flags & 131072 /* Never */) { + if (source2.flags & 262144 /* Never */) { return 0 /* False */; } - if (!(source2.flags & 2097152 /* Intersection */)) { + if (!(source2.flags & 268435456 /* Intersection */)) { return isRelatedTo( source2, target2, @@ -69967,13 +70116,13 @@ function createTypeChecker(host) { } function typeRelatedToSomeType(source2, target2, reportErrors2, intersectionState) { const targetTypes = target2.types; - if (target2.flags & 1048576 /* Union */) { + if (target2.flags & 134217728 /* Union */) { if (containsType(targetTypes, source2)) { return -1 /* True */; } - if (relation !== comparableRelation && getObjectFlags(target2) & 32768 /* PrimitiveUnion */ && !(source2.flags & 1024 /* EnumLiteral */) && (source2.flags & (128 /* StringLiteral */ | 512 /* BooleanLiteral */ | 2048 /* BigIntLiteral */) || (relation === subtypeRelation || relation === strictSubtypeRelation) && source2.flags & 256 /* NumberLiteral */)) { + if (relation !== comparableRelation && getObjectFlags(target2) & 32768 /* PrimitiveUnion */ && !(source2.flags & 32768 /* EnumLiteral */) && (source2.flags & (1024 /* StringLiteral */ | 8192 /* BooleanLiteral */ | 4096 /* BigIntLiteral */) || (relation === subtypeRelation || relation === strictSubtypeRelation) && source2.flags & 2048 /* NumberLiteral */)) { const alternateForm = source2 === source2.regularType ? source2.freshType : source2.regularType; - const primitive = source2.flags & 128 /* StringLiteral */ ? stringType : source2.flags & 256 /* NumberLiteral */ ? numberType : source2.flags & 2048 /* BigIntLiteral */ ? bigintType : void 0; + const primitive = source2.flags & 1024 /* StringLiteral */ ? stringType : source2.flags & 2048 /* NumberLiteral */ ? numberType : source2.flags & 4096 /* BigIntLiteral */ ? bigintType : void 0; return primitive && containsType(targetTypes, primitive) || alternateForm && containsType(targetTypes, alternateForm) ? -1 /* True */ : 0 /* False */; } const match = getMatchingUnionConstituentForType(target2, source2); @@ -70047,7 +70196,7 @@ function createTypeChecker(host) { } function someTypeRelatedToType(source2, target2, reportErrors2, intersectionState) { const sourceTypes = source2.types; - if (source2.flags & 1048576 /* Union */ && containsType(sourceTypes, target2)) { + if (source2.flags & 134217728 /* Union */ && containsType(sourceTypes, target2)) { return -1 /* True */; } const len = sourceTypes.length; @@ -70068,8 +70217,8 @@ function createTypeChecker(host) { return 0 /* False */; } function getUndefinedStrippedTargetIfNeeded(source2, target2) { - if (source2.flags & 1048576 /* Union */ && target2.flags & 1048576 /* Union */ && !(source2.types[0].flags & 32768 /* Undefined */) && target2.types[0].flags & 32768 /* Undefined */) { - return extractTypesOfKind(target2, ~32768 /* Undefined */); + if (source2.flags & 134217728 /* Union */ && target2.flags & 134217728 /* Union */ && !(source2.types[0].flags & 4 /* Undefined */) && target2.types[0].flags & 4 /* Undefined */) { + return extractTypesOfKind(target2, ~4 /* Undefined */); } return target2; } @@ -70079,7 +70228,7 @@ function createTypeChecker(host) { const undefinedStrippedTarget = getUndefinedStrippedTargetIfNeeded(source2, target2); for (let i = 0; i < sourceTypes.length; i++) { const sourceType = sourceTypes[i]; - if (undefinedStrippedTarget.flags & 1048576 /* Union */ && sourceTypes.length >= undefinedStrippedTarget.types.length && sourceTypes.length % undefinedStrippedTarget.types.length === 0) { + if (undefinedStrippedTarget.flags & 134217728 /* Union */ && sourceTypes.length >= undefinedStrippedTarget.types.length && sourceTypes.length % undefinedStrippedTarget.types.length === 0) { const related2 = isRelatedTo( sourceType, undefinedStrippedTarget.types[i % undefinedStrippedTarget.types.length], @@ -70132,35 +70281,11 @@ function createTypeChecker(host) { /*reportErrors*/ false ) : compareTypesIdentical(s, t); - } else if (variance === 1 /* Covariant */) { - related = isRelatedTo( - s, - t, - 3 /* Both */, - reportErrors2, - /*headMessage*/ - void 0, - intersectionState - ); - } else if (variance === 2 /* Contravariant */) { - related = isRelatedTo( - t, - s, - 3 /* Both */, - reportErrors2, - /*headMessage*/ - void 0, - intersectionState - ); - } else if (variance === 3 /* Bivariant */) { - related = isRelatedTo( - t, - s, - 3 /* Both */, - /*reportErrors*/ - false - ); - if (!related) { + } else { + if (inVarianceComputation && varianceFlags & 16 /* Unreliable */) { + instantiateType(s, reportUnreliableMapper); + } + if (variance === 1 /* Covariant */) { related = isRelatedTo( s, t, @@ -70170,19 +70295,8 @@ function createTypeChecker(host) { void 0, intersectionState ); - } - } else { - related = isRelatedTo( - s, - t, - 3 /* Both */, - reportErrors2, - /*headMessage*/ - void 0, - intersectionState - ); - if (related) { - related &= isRelatedTo( + } else if (variance === 2 /* Contravariant */) { + related = isRelatedTo( t, s, 3 /* Both */, @@ -70191,6 +70305,46 @@ function createTypeChecker(host) { void 0, intersectionState ); + } else if (variance === 3 /* Bivariant */) { + related = isRelatedTo( + t, + s, + 3 /* Both */, + /*reportErrors*/ + false + ); + if (!related) { + related = isRelatedTo( + s, + t, + 3 /* Both */, + reportErrors2, + /*headMessage*/ + void 0, + intersectionState + ); + } + } else { + related = isRelatedTo( + s, + t, + 3 /* Both */, + reportErrors2, + /*headMessage*/ + void 0, + intersectionState + ); + if (related) { + related &= isRelatedTo( + t, + s, + 3 /* Both */, + reportErrors2, + /*headMessage*/ + void 0, + intersectionState + ); + } } } if (!related) { @@ -70352,8 +70506,8 @@ function createTypeChecker(host) { const saveErrorInfo = captureErrorCalculationState(); let result2 = structuredTypeRelatedToWorker(source2, target2, reportErrors2, intersectionState, saveErrorInfo); if (relation !== identityRelation) { - if (!result2 && (source2.flags & 2097152 /* Intersection */ || source2.flags & 262144 /* TypeParameter */ && target2.flags & 1048576 /* Union */)) { - const constraint = getEffectiveConstraintOfIntersection(source2.flags & 2097152 /* Intersection */ ? source2.types : [source2], !!(target2.flags & 1048576 /* Union */)); + if (!result2 && (source2.flags & 268435456 /* Intersection */ || source2.flags & 524288 /* TypeParameter */ && target2.flags & 134217728 /* Union */)) { + const constraint = getEffectiveConstraintOfIntersection(source2.flags & 268435456 /* Intersection */ ? source2.types : [source2], !!(target2.flags & 134217728 /* Union */)); if (constraint && everyType(constraint, (c) => c !== source2)) { result2 = isRelatedTo( constraint, @@ -70367,7 +70521,7 @@ function createTypeChecker(host) { ); } } - if (result2 && !(intersectionState & 2 /* Target */) && target2.flags & 2097152 /* Intersection */ && !isGenericObjectType(target2) && source2.flags & (524288 /* Object */ | 2097152 /* Intersection */)) { + if (result2 && !(intersectionState & 2 /* Target */) && target2.flags & 268435456 /* Intersection */ && !isGenericObjectType(target2) && source2.flags & (1048576 /* Object */ | 268435456 /* Intersection */)) { result2 &= propertiesRelatedTo( source2, target2, @@ -70388,7 +70542,7 @@ function createTypeChecker(host) { 0 /* None */ ); } - } else if (result2 && isNonGenericObjectType(target2) && !isArrayOrTupleType(target2) && source2.flags & 2097152 /* Intersection */ && getApparentType(source2).flags & 3670016 /* StructuredType */ && !some(source2.types, (t) => t === target2 || !!(getObjectFlags(t) & 262144 /* NonInferrableType */))) { + } else if (result2 && isNonGenericObjectType(target2) && !isArrayOrTupleType(target2) && source2.flags & 268435456 /* Intersection */ && getApparentType(source2).flags & 403701760 /* StructuredType */ && !some(source2.types, (t) => t === target2 || !!(getObjectFlags(t) & 262144 /* NonInferrableType */))) { result2 &= propertiesRelatedTo( source2, target2, @@ -70411,7 +70565,7 @@ function createTypeChecker(host) { const mappedKeys = []; forEachMappedTypePropertyKeyTypeAndIndexSignatureKeyType( modifiersType, - 8576 /* StringOrNumberLiteralOrUnique */, + 19456 /* StringOrNumberLiteralOrUnique */, /*stringsOnly*/ false, (t) => void mappedKeys.push(instantiateType(nameType, appendTypeMapping(targetType.mapper, getTypeParameterFromMappedType(targetType), t))) @@ -70425,14 +70579,14 @@ function createTypeChecker(host) { let sourceFlags = source2.flags; const targetFlags = target2.flags; if (relation === identityRelation) { - if (sourceFlags & 3145728 /* UnionOrIntersection */) { + if (sourceFlags & 402653184 /* UnionOrIntersection */) { let result3 = eachTypeRelatedToSomeType(source2, target2); if (result3) { result3 &= eachTypeRelatedToSomeType(target2, source2); } return result3; } - if (sourceFlags & 4194304 /* Index */) { + if (sourceFlags & 2097152 /* Index */) { return isRelatedTo( source2.type, target2.type, @@ -70441,7 +70595,7 @@ function createTypeChecker(host) { false ); } - if (sourceFlags & 8388608 /* IndexedAccess */) { + if (sourceFlags & 33554432 /* IndexedAccess */) { if (result2 = isRelatedTo( source2.objectType, target2.objectType, @@ -70460,7 +70614,7 @@ function createTypeChecker(host) { } } } - if (sourceFlags & 16777216 /* Conditional */) { + if (sourceFlags & 67108864 /* Conditional */) { if (source2.root.isDistributive === target2.root.isDistributive) { if (result2 = isRelatedTo( source2.checkType, @@ -70497,7 +70651,7 @@ function createTypeChecker(host) { } } } - if (sourceFlags & 33554432 /* Substitution */) { + if (sourceFlags & 16777216 /* Substitution */) { if (result2 = isRelatedTo( source2.baseType, target2.baseType, @@ -70516,7 +70670,7 @@ function createTypeChecker(host) { } } } - if (sourceFlags & 134217728 /* TemplateLiteral */) { + if (sourceFlags & 4194304 /* TemplateLiteral */) { if (arrayIsEqualTo(source2.texts, target2.texts)) { const sourceTypes = source2.types; const targetTypes = target2.types; @@ -70535,7 +70689,7 @@ function createTypeChecker(host) { return result2; } } - if (sourceFlags & 268435456 /* StringMapping */) { + if (sourceFlags & 8388608 /* StringMapping */) { if (source2.symbol === target2.symbol) { return isRelatedTo( source2.type, @@ -70546,18 +70700,18 @@ function createTypeChecker(host) { ); } } - if (!(sourceFlags & 524288 /* Object */)) { + if (!(sourceFlags & 1048576 /* Object */)) { return 0 /* False */; } - } else if (sourceFlags & 3145728 /* UnionOrIntersection */ || targetFlags & 3145728 /* UnionOrIntersection */) { + } else if (sourceFlags & 402653184 /* UnionOrIntersection */ || targetFlags & 402653184 /* UnionOrIntersection */) { if (result2 = unionOrIntersectionRelatedTo(source2, target2, reportErrors2, intersectionState)) { return result2; } - if (!(sourceFlags & 465829888 /* Instantiable */ || sourceFlags & 524288 /* Object */ && targetFlags & 1048576 /* Union */ || sourceFlags & 2097152 /* Intersection */ && targetFlags & (524288 /* Object */ | 1048576 /* Union */ | 465829888 /* Instantiable */))) { + if (!(sourceFlags & 132644864 /* Instantiable */ || sourceFlags & 1048576 /* Object */ && targetFlags & 134217728 /* Union */ || sourceFlags & 268435456 /* Intersection */ && targetFlags & (1048576 /* Object */ | 134217728 /* Union */ | 132644864 /* Instantiable */))) { return 0 /* False */; } } - if (sourceFlags & (524288 /* Object */ | 16777216 /* Conditional */) && source2.aliasSymbol && source2.aliasTypeArguments && source2.aliasSymbol === target2.aliasSymbol && !(isMarkerType(source2) || isMarkerType(target2))) { + if (sourceFlags & (1048576 /* Object */ | 67108864 /* Conditional */) && source2.aliasSymbol && source2.aliasTypeArguments && source2.aliasSymbol === target2.aliasSymbol && !(isMarkerType(source2) || isMarkerType(target2))) { const variances = getAliasVariances(source2.aliasSymbol); if (variances === emptyArray) { return 1 /* Unknown */; @@ -70574,7 +70728,7 @@ function createTypeChecker(host) { if (isSingleElementGenericTupleType(source2) && !source2.target.readonly && (result2 = isRelatedTo(getTypeArguments(source2)[0], target2, 1 /* Source */)) || isSingleElementGenericTupleType(target2) && (target2.target.readonly || isMutableArrayOrTuple(getBaseConstraintOfType(source2) || source2)) && (result2 = isRelatedTo(source2, getTypeArguments(target2)[0], 2 /* Target */))) { return result2; } - if (targetFlags & 262144 /* TypeParameter */) { + if (targetFlags & 524288 /* TypeParameter */) { if (getObjectFlags(source2) & 32 /* Mapped */ && !source2.declaration.nameType && isRelatedTo(getIndexType(target2), getConstraintTypeFromMappedType(source2), 3 /* Both */)) { if (!(getMappedTypeModifiers(source2) & 4 /* IncludeOptional */)) { const templateType = getTemplateTypeFromMappedType(source2); @@ -70584,10 +70738,10 @@ function createTypeChecker(host) { } } } - if (relation === comparableRelation && sourceFlags & 262144 /* TypeParameter */) { + if (relation === comparableRelation && sourceFlags & 524288 /* TypeParameter */) { let constraint = getConstraintOfTypeParameter(source2); if (constraint) { - while (constraint && someType(constraint, (c) => !!(c.flags & 262144 /* TypeParameter */))) { + while (constraint && someType(constraint, (c) => !!(c.flags & 524288 /* TypeParameter */))) { if (result2 = isRelatedTo( constraint, target2, @@ -70602,9 +70756,9 @@ function createTypeChecker(host) { } return 0 /* False */; } - } else if (targetFlags & 4194304 /* Index */) { + } else if (targetFlags & 2097152 /* Index */) { const targetType = target2.type; - if (sourceFlags & 4194304 /* Index */) { + if (sourceFlags & 2097152 /* Index */) { if (result2 = isRelatedTo( targetType, source2.type, @@ -70640,8 +70794,8 @@ function createTypeChecker(host) { } } } - } else if (targetFlags & 8388608 /* IndexedAccess */) { - if (sourceFlags & 8388608 /* IndexedAccess */) { + } else if (targetFlags & 33554432 /* IndexedAccess */) { + if (sourceFlags & 33554432 /* IndexedAccess */) { if (result2 = isRelatedTo(source2.objectType, target2.objectType, 3 /* Both */, reportErrors2)) { result2 &= isRelatedTo(source2.indexType, target2.indexType, 3 /* Both */, reportErrors2); } @@ -70689,7 +70843,7 @@ function createTypeChecker(host) { const templateType = getTemplateTypeFromMappedType(target2); const modifiers = getMappedTypeModifiers(target2); if (!(modifiers & 8 /* ExcludeOptional */)) { - if (!keysRemapped && templateType.flags & 8388608 /* IndexedAccess */ && templateType.objectType === source2 && templateType.indexType === getTypeParameterFromMappedType(target2)) { + if (!keysRemapped && templateType.flags & 33554432 /* IndexedAccess */ && templateType.objectType === source2 && templateType.indexType === getTypeParameterFromMappedType(target2)) { return -1 /* True */; } if (!isGenericMappedType(source2)) { @@ -70697,11 +70851,11 @@ function createTypeChecker(host) { const sourceKeys = getIndexType(source2, 2 /* NoIndexSignatures */); const includeOptional = modifiers & 4 /* IncludeOptional */; const filteredByApplicability = includeOptional ? intersectTypes(targetKeys, sourceKeys) : void 0; - if (includeOptional ? !(filteredByApplicability.flags & 131072 /* Never */) : isRelatedTo(targetKeys, sourceKeys, 3 /* Both */)) { + if (includeOptional ? !(filteredByApplicability.flags & 262144 /* Never */) : isRelatedTo(targetKeys, sourceKeys, 3 /* Both */)) { const templateType2 = getTemplateTypeFromMappedType(target2); const typeParameter = getTypeParameterFromMappedType(target2); - const nonNullComponent = extractTypesOfKind(templateType2, ~98304 /* Nullable */); - if (!keysRemapped && nonNullComponent.flags & 8388608 /* IndexedAccess */ && nonNullComponent.indexType === typeParameter) { + const nonNullComponent = extractTypesOfKind(templateType2, ~12 /* Nullable */); + if (!keysRemapped && nonNullComponent.flags & 33554432 /* IndexedAccess */ && nonNullComponent.indexType === typeParameter) { if (result2 = isRelatedTo(source2, nonNullComponent.objectType, 2 /* Target */, reportErrors2)) { return result2; } @@ -70717,12 +70871,12 @@ function createTypeChecker(host) { resetErrorInfo(saveErrorInfo); } } - } else if (targetFlags & 16777216 /* Conditional */) { + } else if (targetFlags & 67108864 /* Conditional */) { if (isDeeplyNestedType(target2, targetStack, targetDepth, 10)) { return 3 /* Maybe */; } const c = target2; - if (!c.root.inferTypeParameters && !isDistributionDependent(c.root) && !(source2.flags & 16777216 /* Conditional */ && source2.root === c.root)) { + if (!c.root.inferTypeParameters && !isDistributionDependent(c.root) && !(source2.flags & 67108864 /* Conditional */ && source2.root === c.root)) { const skipTrue = !isTypeAssignableTo(getPermissiveInstantiation(c.checkType), getPermissiveInstantiation(c.extendsType)); const skipFalse = !skipTrue && isTypeAssignableTo(getRestrictiveInstantiation(c.checkType), getRestrictiveInstantiation(c.extendsType)); if (result2 = skipTrue ? -1 /* True */ : isRelatedTo( @@ -70750,8 +70904,8 @@ function createTypeChecker(host) { } } } - } else if (targetFlags & 134217728 /* TemplateLiteral */) { - if (sourceFlags & 134217728 /* TemplateLiteral */) { + } else if (targetFlags & 4194304 /* TemplateLiteral */) { + if (sourceFlags & 4194304 /* TemplateLiteral */) { if (relation === comparableRelation) { return templateLiteralTypesDefinitelyUnrelated(source2, target2) ? 0 /* False */ : -1 /* True */; } @@ -70760,15 +70914,15 @@ function createTypeChecker(host) { if (isTypeMatchedByTemplateLiteralType(source2, target2)) { return -1 /* True */; } - } else if (target2.flags & 268435456 /* StringMapping */) { - if (!(source2.flags & 268435456 /* StringMapping */)) { + } else if (target2.flags & 8388608 /* StringMapping */) { + if (!(source2.flags & 8388608 /* StringMapping */)) { if (isMemberOfStringMapping(source2, target2)) { return -1 /* True */; } } } - if (sourceFlags & 8650752 /* TypeVariable */) { - if (!(sourceFlags & 8388608 /* IndexedAccess */ && targetFlags & 8388608 /* IndexedAccess */)) { + if (sourceFlags & 34078720 /* TypeVariable */) { + if (!(sourceFlags & 33554432 /* IndexedAccess */ && targetFlags & 33554432 /* IndexedAccess */)) { const constraint = getConstraintOfType(source2) || unknownType; if (result2 = isRelatedTo( constraint, @@ -70785,7 +70939,7 @@ function createTypeChecker(host) { getTypeWithThisArgument(constraint, source2), target2, 1 /* Source */, - reportErrors2 && constraint !== unknownType && !(targetFlags & sourceFlags & 262144 /* TypeParameter */), + reportErrors2 && constraint !== unknownType && !(targetFlags & sourceFlags & 524288 /* TypeParameter */), /*headMessage*/ void 0, intersectionState @@ -70801,7 +70955,7 @@ function createTypeChecker(host) { } } } - } else if (sourceFlags & 4194304 /* Index */) { + } else if (sourceFlags & 2097152 /* Index */) { const isDeferredMappedIndex = shouldDeferIndexType(source2.type, source2.indexFlags) && getObjectFlags(source2.type) & 32 /* Mapped */; if (result2 = isRelatedTo(stringNumberSymbolType, target2, 1 /* Source */, reportErrors2 && !isDeferredMappedIndex)) { return result2; @@ -70814,15 +70968,15 @@ function createTypeChecker(host) { return result2; } } - } else if (sourceFlags & 134217728 /* TemplateLiteral */ && !(targetFlags & 524288 /* Object */)) { - if (!(targetFlags & 134217728 /* TemplateLiteral */)) { + } else if (sourceFlags & 4194304 /* TemplateLiteral */ && !(targetFlags & 1048576 /* Object */)) { + if (!(targetFlags & 4194304 /* TemplateLiteral */)) { const constraint = getBaseConstraintOfType(source2); if (constraint && constraint !== source2 && (result2 = isRelatedTo(constraint, target2, 1 /* Source */, reportErrors2))) { return result2; } } - } else if (sourceFlags & 268435456 /* StringMapping */) { - if (targetFlags & 268435456 /* StringMapping */) { + } else if (sourceFlags & 8388608 /* StringMapping */) { + if (targetFlags & 8388608 /* StringMapping */) { if (source2.symbol !== target2.symbol) { return 0 /* False */; } @@ -70835,11 +70989,11 @@ function createTypeChecker(host) { return result2; } } - } else if (sourceFlags & 16777216 /* Conditional */) { + } else if (sourceFlags & 67108864 /* Conditional */) { if (isDeeplyNestedType(source2, sourceStack, sourceDepth, 10)) { return 3 /* Maybe */; } - if (targetFlags & 16777216 /* Conditional */) { + if (targetFlags & 67108864 /* Conditional */) { const sourceParams = source2.root.inferTypeParameters; let sourceExtends = source2.extendsType; let mapper; @@ -70870,7 +71024,7 @@ function createTypeChecker(host) { return result2; } } - const distributiveConstraint = !(targetFlags & 16777216 /* Conditional */) && hasNonCircularBaseConstraint(source2) ? getConstraintOfDistributiveConditionalType(source2) : void 0; + const distributiveConstraint = !(targetFlags & 67108864 /* Conditional */) && hasNonCircularBaseConstraint(source2) ? getConstraintOfDistributiveConditionalType(source2) : void 0; if (distributiveConstraint) { resetErrorInfo(saveErrorInfo); if (result2 = isRelatedTo(distributiveConstraint, target2, 1 /* Source */, reportErrors2)) { @@ -70889,7 +71043,7 @@ function createTypeChecker(host) { } return 0 /* False */; } - const sourceIsPrimitive = !!(sourceFlags & 402784252 /* Primitive */); + const sourceIsPrimitive = !!(sourceFlags & 12713980 /* Primitive */); if (relation !== identityRelation) { source2 = getApparentType(source2); sourceFlags = source2.flags; @@ -70922,7 +71076,7 @@ function createTypeChecker(host) { } else if ((relation === subtypeRelation || relation === strictSubtypeRelation) && isEmptyObjectType(target2) && getObjectFlags(target2) & 8192 /* FreshLiteral */ && !isEmptyObjectType(source2)) { return 0 /* False */; } - if (sourceFlags & (524288 /* Object */ | 2097152 /* Intersection */) && targetFlags & 524288 /* Object */) { + if (sourceFlags & (1048576 /* Object */ | 268435456 /* Intersection */) && targetFlags & 1048576 /* Object */) { const reportStructuralErrors = reportErrors2 && errorInfo === saveErrorInfo.errorInfo && !sourceIsPrimitive; result2 = propertiesRelatedTo( source2, @@ -70949,9 +71103,9 @@ function createTypeChecker(host) { return result2; } } - if (sourceFlags & (524288 /* Object */ | 2097152 /* Intersection */) && targetFlags & 1048576 /* Union */) { - const objectOnlyTarget = extractTypesOfKind(target2, 524288 /* Object */ | 2097152 /* Intersection */ | 33554432 /* Substitution */); - if (objectOnlyTarget.flags & 1048576 /* Union */) { + if (sourceFlags & (1048576 /* Object */ | 268435456 /* Intersection */) && targetFlags & 134217728 /* Union */) { + const objectOnlyTarget = extractTypesOfKind(target2, 1048576 /* Object */ | 268435456 /* Intersection */ | 16777216 /* Substitution */); + if (objectOnlyTarget.flags & 134217728 /* Union */) { const result3 = typeRelatedToDiscriminatedType(source2, objectOnlyTarget); if (result3) { return result3; @@ -71017,7 +71171,7 @@ function createTypeChecker(host) { for (let i = 0; i < sourcePropertiesFiltered.length; i++) { const sourceProperty = sourcePropertiesFiltered[i]; const sourcePropertyType = getNonMissingTypeOfSymbol(sourceProperty); - sourceDiscriminantTypes[i] = sourcePropertyType.flags & 1048576 /* Union */ ? sourcePropertyType.types : [sourcePropertyType]; + sourceDiscriminantTypes[i] = sourcePropertyType.flags & 134217728 /* Union */ ? sourcePropertyType.types : [sourcePropertyType]; excludedProperties.add(sourceProperty.escapedName); } const discriminantCombinations = cartesianProduct(sourceDiscriminantTypes); @@ -71363,13 +71517,10 @@ function createTypeChecker(host) { if (isObjectLiteralType2(target2)) { for (const sourceProp of excludeProperties(getPropertiesOfType(source2), excludedProperties)) { if (!getPropertyOfObjectType(target2, sourceProp.escapedName)) { - const sourceType = getTypeOfSymbol(sourceProp); - if (!(sourceType.flags & 32768 /* Undefined */)) { - if (reportErrors2) { - reportError(Diagnostics.Property_0_does_not_exist_on_type_1, symbolToString(sourceProp), typeToString(target2)); - } - return 0 /* False */; + if (reportErrors2) { + reportError(Diagnostics.Property_0_does_not_exist_on_type_1, symbolToString(sourceProp), typeToString(target2)); } + return 0 /* False */; } } } @@ -71391,7 +71542,7 @@ function createTypeChecker(host) { return result2; } function propertiesIdenticalTo(source2, target2, excludedProperties) { - if (!(source2.flags & 524288 /* Object */ && target2.flags & 524288 /* Object */)) { + if (!(source2.flags & 1048576 /* Object */ && target2.flags & 1048576 /* Object */)) { return 0 /* False */; } const sourceProperties = excludeProperties(getPropertiesOfObjectType(source2), excludedProperties); @@ -71418,9 +71569,12 @@ function createTypeChecker(host) { if (relation === identityRelation) { return signaturesIdenticalTo(source2, target2, kind); } - if (target2 === anyFunctionType || source2 === anyFunctionType) { + if (source2 === anyFunctionType) { return -1 /* True */; } + if (target2 === anyFunctionType) { + return 0 /* False */; + } const sourceIsJSConstructor = source2.symbol && isJSConstructor(source2.symbol.valueDeclaration); const targetIsJSConstructor = target2.symbol && isJSConstructor(target2.symbol.valueDeclaration); const sourceSignatures = getSignaturesOfType( @@ -71587,14 +71741,14 @@ function createTypeChecker(host) { function membersRelatedToIndexInfo(source2, targetInfo, reportErrors2, intersectionState) { let result2 = -1 /* True */; const keyType = targetInfo.keyType; - const props = source2.flags & 2097152 /* Intersection */ ? getPropertiesOfUnionOrIntersectionType(source2) : getPropertiesOfObjectType(source2); + const props = source2.flags & 268435456 /* Intersection */ ? getPropertiesOfUnionOrIntersectionType(source2) : getPropertiesOfObjectType(source2); for (const prop of props) { if (isIgnoredJsxProperty(source2, prop)) { continue; } - if (isApplicableIndexType(getLiteralTypeFromProperty(prop, 8576 /* StringOrNumberLiteralOrUnique */), keyType)) { + if (isApplicableIndexType(getLiteralTypeFromProperty(prop, 19456 /* StringOrNumberLiteralOrUnique */), keyType)) { const propType = getNonMissingTypeOfSymbol(prop); - const type = exactOptionalPropertyTypes || propType.flags & 32768 /* Undefined */ || keyType === numberType || !(prop.flags & 16777216 /* Optional */) ? propType : getTypeWithFacts(propType, 524288 /* NEUndefined */); + const type = exactOptionalPropertyTypes || propType.flags & 4 /* Undefined */ || keyType === numberType || !(prop.flags & 16777216 /* Optional */) ? propType : getTypeWithFacts(propType, 524288 /* NEUndefined */); const related = isRelatedTo( type, targetInfo.type, @@ -71708,26 +71862,26 @@ function createTypeChecker(host) { } } function typeCouldHaveTopLevelSingletonTypes(type) { - if (type.flags & 16 /* Boolean */) { + if (type.flags & 256 /* Boolean */) { return false; } - if (type.flags & 3145728 /* UnionOrIntersection */) { + if (type.flags & 402653184 /* UnionOrIntersection */) { return !!forEach(type.types, typeCouldHaveTopLevelSingletonTypes); } - if (type.flags & 465829888 /* Instantiable */) { + if (type.flags & 132644864 /* Instantiable */) { const constraint = getConstraintOfType(type); if (constraint && constraint !== type) { return typeCouldHaveTopLevelSingletonTypes(constraint); } } - return isUnitType(type) || !!(type.flags & 134217728 /* TemplateLiteral */) || !!(type.flags & 268435456 /* StringMapping */); + return isUnitType(type) || !!(type.flags & 4194304 /* TemplateLiteral */) || !!(type.flags & 8388608 /* StringMapping */); } function getExactOptionalUnassignableProperties(source, target) { if (isTupleType(source) && isTupleType(target)) return emptyArray; return getPropertiesOfType(target).filter((targetProp) => isExactOptionalPropertyMismatch(getTypeOfPropertyOfType(source, targetProp.escapedName), getTypeOfSymbol(targetProp))); } function isExactOptionalPropertyMismatch(source, target) { - return !!source && !!target && maybeTypeOfKind(source, 32768 /* Undefined */) && !!containsMissingType(target); + return !!source && !!target && maybeTypeOfKind(source, 4 /* Undefined */) && !!containsMissingType(target); } function getExactOptionalProperties(type) { return getPropertiesOfType(type).filter((targetProp) => containsMissingType(getTypeOfSymbol(targetProp))); @@ -71737,7 +71891,7 @@ function createTypeChecker(host) { } function discriminateTypeByDiscriminableItems(target, discriminators, related) { const types = target.types; - const include = types.map((t) => t.flags & 402784252 /* Primitive */ ? 0 /* False */ : -1 /* True */); + const include = types.map((t) => t.flags & 12713980 /* Primitive */ || getReducedType(t).flags & 262144 /* Never */ ? 0 /* False */ : -1 /* True */); for (const [getDiscriminatingType, propertyName] of discriminators) { let matched = false; for (let i = 0; i < types.length; i++) { @@ -71759,17 +71913,17 @@ function createTypeChecker(host) { } } const filtered = contains(include, 0 /* False */) ? getUnionType(types.filter((_, i) => include[i]), 0 /* None */) : target; - return filtered.flags & 131072 /* Never */ ? target : filtered; + return filtered.flags & 262144 /* Never */ ? target : filtered; } function isWeakType(type) { - if (type.flags & 524288 /* Object */) { + if (type.flags & 1048576 /* Object */) { const resolved = resolveStructuredTypeMembers(type); return resolved.callSignatures.length === 0 && resolved.constructSignatures.length === 0 && resolved.indexInfos.length === 0 && resolved.properties.length > 0 && every(resolved.properties, (p) => !!(p.flags & 16777216 /* Optional */)); } - if (type.flags & 33554432 /* Substitution */) { + if (type.flags & 16777216 /* Substitution */) { return isWeakType(type.baseType); } - if (type.flags & 2097152 /* Intersection */) { + if (type.flags & 268435456 /* Intersection */) { return every(type.types, isWeakType); } return false; @@ -71855,20 +72009,20 @@ function createTypeChecker(host) { } function hasCovariantVoidArgument(typeArguments, variances) { for (let i = 0; i < variances.length; i++) { - if ((variances[i] & 7 /* VarianceMask */) === 1 /* Covariant */ && typeArguments[i].flags & 16384 /* Void */) { + if ((variances[i] & 7 /* VarianceMask */) === 1 /* Covariant */ && typeArguments[i].flags & 16 /* Void */) { return true; } } return false; } function isUnconstrainedTypeParameter(type) { - return type.flags & 262144 /* TypeParameter */ && !getConstraintOfTypeParameter(type); + return type.flags & 524288 /* TypeParameter */ && !getConstraintOfTypeParameter(type); } function isNonDeferredTypeReference(type) { return !!(getObjectFlags(type) & 4 /* Reference */) && !type.node; } function isTypeReferenceWithGenericArguments(type) { - return isNonDeferredTypeReference(type) && some(getTypeArguments(type), (t) => !!(t.flags & 262144 /* TypeParameter */) || isTypeReferenceWithGenericArguments(t)); + return isNonDeferredTypeReference(type) && some(getTypeArguments(type), (t) => !!(t.flags & 524288 /* TypeParameter */) || isTypeReferenceWithGenericArguments(t)); } function getGenericTypeReferenceRelationKey(source, target, postFix, ignoreConstraints) { const typeParameters = []; @@ -71879,7 +72033,7 @@ function createTypeChecker(host) { function getTypeReferenceId(type, depth = 0) { let result = "" + type.target.id; for (const t of getTypeArguments(type)) { - if (t.flags & 262144 /* TypeParameter */) { + if (t.flags & 524288 /* TypeParameter */) { if (ignoreConstraints || isUnconstrainedTypeParameter(t)) { let index = typeParameters.indexOf(t); if (index < 0) { @@ -71946,7 +72100,7 @@ function createTypeChecker(host) { if ((getObjectFlags(type) & 96 /* InstantiatedMapped */) === 96 /* InstantiatedMapped */) { type = getMappedTargetWithSymbol(type); } - if (type.flags & 2097152 /* Intersection */) { + if (type.flags & 268435456 /* Intersection */) { return some(type.types, (t) => isDeeplyNestedType(t, stack, depth, maxDepth)); } const identity2 = getRecursionIdentity(type); @@ -71969,7 +72123,7 @@ function createTypeChecker(host) { } function getMappedTargetWithSymbol(type) { let target; - while ((getObjectFlags(type) & 96 /* InstantiatedMapped */) === 96 /* InstantiatedMapped */ && (target = getModifiersTypeFromMappedType(type)) && (target.symbol || target.flags & 2097152 /* Intersection */ && some(target.types, (t) => !!t.symbol))) { + while ((getObjectFlags(type) & 96 /* InstantiatedMapped */) === 96 /* InstantiatedMapped */ && (target = getModifiersTypeFromMappedType(type)) && (target.symbol || target.flags & 268435456 /* Intersection */ && some(target.types, (t) => !!t.symbol))) { type = target; } return type; @@ -71978,13 +72132,13 @@ function createTypeChecker(host) { if ((getObjectFlags(type) & 96 /* InstantiatedMapped */) === 96 /* InstantiatedMapped */) { type = getMappedTargetWithSymbol(type); } - if (type.flags & 2097152 /* Intersection */) { + if (type.flags & 268435456 /* Intersection */) { return some(type.types, (t) => hasMatchingRecursionIdentity(t, identity2)); } return getRecursionIdentity(type) === identity2; } function getRecursionIdentity(type) { - if (type.flags & 524288 /* Object */ && !isObjectOrArrayLiteralType(type)) { + if (type.flags & 1048576 /* Object */ && !isObjectOrArrayLiteralType(type)) { if (getObjectFlags(type) & 4 /* Reference */ && type.node) { return type.node; } @@ -71995,16 +72149,16 @@ function createTypeChecker(host) { return type.target; } } - if (type.flags & 262144 /* TypeParameter */) { + if (type.flags & 524288 /* TypeParameter */) { return type.symbol; } - if (type.flags & 8388608 /* IndexedAccess */) { + if (type.flags & 33554432 /* IndexedAccess */) { do { type = type.objectType; - } while (type.flags & 8388608 /* IndexedAccess */); + } while (type.flags & 33554432 /* IndexedAccess */); return type; } - if (type.flags & 16777216 /* Conditional */) { + if (type.flags & 67108864 /* Conditional */) { return type.root; } return type; @@ -72012,7 +72166,7 @@ function createTypeChecker(host) { function isPropertyIdenticalTo(sourceProp, targetProp) { return compareProperties2(sourceProp, targetProp, compareTypesIdentical) !== 0 /* False */; } - function compareProperties2(sourceProp, targetProp, compareTypes) { + function compareProperties2(sourceProp, targetProp, compareTypes2) { if (sourceProp === targetProp) { return -1 /* True */; } @@ -72033,7 +72187,7 @@ function createTypeChecker(host) { if (isReadonlySymbol(sourceProp) !== isReadonlySymbol(targetProp)) { return 0 /* False */; } - return compareTypes(getTypeOfSymbol(sourceProp), getTypeOfSymbol(targetProp)); + return compareTypes2(getNonMissingTypeOfSymbol(sourceProp), getNonMissingTypeOfSymbol(targetProp)); } function isMatchingSignature(source, target, partialMatch) { const sourceParameterCount = getParameterCount(source); @@ -72050,7 +72204,7 @@ function createTypeChecker(host) { } return false; } - function compareSignaturesIdentical(source, target, partialMatch, ignoreThisTypes, ignoreReturnTypes, compareTypes) { + function compareSignaturesIdentical(source, target, partialMatch, ignoreThisTypes, ignoreReturnTypes, compareTypes2) { if (source === target) { return -1 /* True */; } @@ -72065,7 +72219,7 @@ function createTypeChecker(host) { for (let i = 0; i < target.typeParameters.length; i++) { const s = source.typeParameters[i]; const t = target.typeParameters[i]; - if (!(s === t || compareTypes(instantiateType(getConstraintFromTypeParameter(s), mapper) || unknownType, getConstraintFromTypeParameter(t) || unknownType) && compareTypes(instantiateType(getDefaultFromTypeParameter(s), mapper) || unknownType, getDefaultFromTypeParameter(t) || unknownType))) { + if (!(s === t || compareTypes2(instantiateType(getConstraintFromTypeParameter(s), mapper) || unknownType, getConstraintFromTypeParameter(t) || unknownType) && compareTypes2(instantiateType(getDefaultFromTypeParameter(s), mapper) || unknownType, getDefaultFromTypeParameter(t) || unknownType))) { return 0 /* False */; } } @@ -72082,7 +72236,7 @@ function createTypeChecker(host) { if (sourceThisType) { const targetThisType = getThisTypeOfSignature(target); if (targetThisType) { - const related = compareTypes(sourceThisType, targetThisType); + const related = compareTypes2(sourceThisType, targetThisType); if (!related) { return 0 /* False */; } @@ -72094,7 +72248,7 @@ function createTypeChecker(host) { for (let i = 0; i < targetLen; i++) { const s = getTypeAtPosition(source, i); const t = getTypeAtPosition(target, i); - const related = compareTypes(t, s); + const related = compareTypes2(t, s); if (!related) { return 0 /* False */; } @@ -72103,17 +72257,17 @@ function createTypeChecker(host) { if (!ignoreReturnTypes) { const sourceTypePredicate = getTypePredicateOfSignature(source); const targetTypePredicate = getTypePredicateOfSignature(target); - result &= sourceTypePredicate || targetTypePredicate ? compareTypePredicatesIdentical(sourceTypePredicate, targetTypePredicate, compareTypes) : compareTypes(getReturnTypeOfSignature(source), getReturnTypeOfSignature(target)); + result &= sourceTypePredicate || targetTypePredicate ? compareTypePredicatesIdentical(sourceTypePredicate, targetTypePredicate, compareTypes2) : compareTypes2(getReturnTypeOfSignature(source), getReturnTypeOfSignature(target)); } return result; } - function compareTypePredicatesIdentical(source, target, compareTypes) { - return !(source && target && typePredicateKindsMatch(source, target)) ? 0 /* False */ : source.type === target.type ? -1 /* True */ : source.type && target.type ? compareTypes(source.type, target.type) : 0 /* False */; + function compareTypePredicatesIdentical(source, target, compareTypes2) { + return !(source && target && typePredicateKindsMatch(source, target)) ? 0 /* False */ : source.type === target.type ? -1 /* True */ : source.type && target.type ? compareTypes2(source.type, target.type) : 0 /* False */; } function literalTypesWithSameBaseType(types) { let commonBaseType; for (const t of types) { - if (!(t.flags & 131072 /* Never */)) { + if (!(t.flags & 262144 /* Never */)) { const baseType = getBaseTypeOfLiteralType(t); commonBaseType ?? (commonBaseType = baseType); if (baseType === t || baseType !== commonBaseType) { @@ -72124,15 +72278,15 @@ function createTypeChecker(host) { return true; } function getCombinedTypeFlags(types) { - return reduceLeft(types, (flags, t) => flags | (t.flags & 1048576 /* Union */ ? getCombinedTypeFlags(t.types) : t.flags), 0); + return reduceLeft(types, (flags, t) => flags | (t.flags & 134217728 /* Union */ ? getCombinedTypeFlags(t.types) : t.flags), 0); } function getCommonSupertype(types) { if (types.length === 1) { return types[0]; } - const primaryTypes = strictNullChecks ? sameMap(types, (t) => filterType(t, (u) => !(u.flags & 98304 /* Nullable */))) : types; + const primaryTypes = strictNullChecks ? sameMap(types, (t) => filterType(t, (u) => !(u.flags & 12 /* Nullable */))) : types; const superTypeOrUnion = literalTypesWithSameBaseType(primaryTypes) ? getUnionType(primaryTypes) : getSingleCommonSupertype(primaryTypes); - return primaryTypes === types ? superTypeOrUnion : getNullableType(superTypeOrUnion, getCombinedTypeFlags(types) & 98304 /* Nullable */); + return primaryTypes === types ? superTypeOrUnion : getNullableType(superTypeOrUnion, getCombinedTypeFlags(types) & 12 /* Nullable */); } function getSingleCommonSupertype(types) { const candidate = reduceLeft(types, (s, t) => isTypeStrictSubtypeOf(s, t) ? t : s); @@ -72157,10 +72311,10 @@ function createTypeChecker(host) { return isArrayType(type) ? getTypeArguments(type)[0] : void 0; } function isArrayLikeType(type) { - return isArrayType(type) || !(type.flags & 98304 /* Nullable */) && isTypeAssignableTo(type, anyReadonlyArrayType); + return isArrayType(type) || !(type.flags & 12 /* Nullable */) && isTypeAssignableTo(type, anyReadonlyArrayType); } function isMutableArrayLikeType(type) { - return isMutableArrayOrTuple(type) || !(type.flags & (1 /* Any */ | 98304 /* Nullable */)) && isTypeAssignableTo(type, anyArrayType); + return isMutableArrayOrTuple(type) || !(type.flags & (1 /* Any */ | 12 /* Nullable */)) && isTypeAssignableTo(type, anyArrayType); } function getSingleBaseForNonAugmentingSubtype(type) { if (!(getObjectFlags(type) & 4 /* Reference */) || !(getObjectFlags(type.target) & 3 /* ClassOrInterface */)) { @@ -72200,7 +72354,7 @@ function createTypeChecker(host) { } function isTupleLikeType(type) { let lengthType; - return isTupleType(type) || !!getPropertyOfType(type, "0") || isArrayLikeType(type) && !!(lengthType = getTypeOfPropertyOfType(type, "length")) && everyType(lengthType, (t) => !!(t.flags & 256 /* NumberLiteral */)); + return isTupleType(type) || !!getPropertyOfType(type, "0") || isArrayLikeType(type) && !!(lengthType = getTypeOfPropertyOfType(type, "length")) && everyType(lengthType, (t) => !!(t.flags & 2048 /* NumberLiteral */)); } function isArrayOrTupleLikeType(type) { return isArrayLikeType(type) || isTupleLikeType(type); @@ -72216,36 +72370,36 @@ function createTypeChecker(host) { return void 0; } function isNeitherUnitTypeNorNever(type) { - return !(type.flags & (109472 /* Unit */ | 131072 /* Never */)); + return !(type.flags & (97292 /* Unit */ | 262144 /* Never */)); } function isUnitType(type) { - return !!(type.flags & 109472 /* Unit */); + return !!(type.flags & 97292 /* Unit */); } function isUnitLikeType(type) { const t = getBaseConstraintOrType(type); - return t.flags & 2097152 /* Intersection */ ? some(t.types, isUnitType) : isUnitType(t); + return t.flags & 268435456 /* Intersection */ ? some(t.types, isUnitType) : isUnitType(t); } function extractUnitType(type) { - return type.flags & 2097152 /* Intersection */ ? find(type.types, isUnitType) || type : type; + return type.flags & 268435456 /* Intersection */ ? find(type.types, isUnitType) || type : type; } function isLiteralType(type) { - return type.flags & 16 /* Boolean */ ? true : type.flags & 1048576 /* Union */ ? type.flags & 1024 /* EnumLiteral */ ? true : every(type.types, isUnitType) : isUnitType(type); + return type.flags & 256 /* Boolean */ ? true : type.flags & 134217728 /* Union */ ? type.flags & 32768 /* EnumLiteral */ ? true : every(type.types, isUnitType) : isUnitType(type); } function getBaseTypeOfLiteralType(type) { - return type.flags & 1056 /* EnumLike */ ? getBaseTypeOfEnumLikeType(type) : type.flags & (128 /* StringLiteral */ | 134217728 /* TemplateLiteral */ | 268435456 /* StringMapping */) ? stringType : type.flags & 256 /* NumberLiteral */ ? numberType : type.flags & 2048 /* BigIntLiteral */ ? bigintType : type.flags & 512 /* BooleanLiteral */ ? booleanType : type.flags & 1048576 /* Union */ ? getBaseTypeOfLiteralTypeUnion(type) : type; + return type.flags & 98304 /* EnumLike */ ? getBaseTypeOfEnumLikeType(type) : type.flags & (1024 /* StringLiteral */ | 4194304 /* TemplateLiteral */ | 8388608 /* StringMapping */) ? stringType : type.flags & 2048 /* NumberLiteral */ ? numberType : type.flags & 4096 /* BigIntLiteral */ ? bigintType : type.flags & 8192 /* BooleanLiteral */ ? booleanType : type.flags & 134217728 /* Union */ ? getBaseTypeOfLiteralTypeUnion(type) : type; } function getBaseTypeOfLiteralTypeUnion(type) { const key = `B${getTypeId(type)}`; return getCachedType(key) ?? setCachedType(key, mapType(type, getBaseTypeOfLiteralType)); } function getBaseTypeOfLiteralTypeForComparison(type) { - return type.flags & (128 /* StringLiteral */ | 134217728 /* TemplateLiteral */ | 268435456 /* StringMapping */) ? stringType : type.flags & (256 /* NumberLiteral */ | 32 /* Enum */) ? numberType : type.flags & 2048 /* BigIntLiteral */ ? bigintType : type.flags & 512 /* BooleanLiteral */ ? booleanType : type.flags & 1048576 /* Union */ ? mapType(type, getBaseTypeOfLiteralTypeForComparison) : type; + return type.flags & (1024 /* StringLiteral */ | 4194304 /* TemplateLiteral */ | 8388608 /* StringMapping */) ? stringType : type.flags & (2048 /* NumberLiteral */ | 65536 /* Enum */) ? numberType : type.flags & 4096 /* BigIntLiteral */ ? bigintType : type.flags & 8192 /* BooleanLiteral */ ? booleanType : type.flags & 134217728 /* Union */ ? mapType(type, getBaseTypeOfLiteralTypeForComparison) : type; } function getWidenedLiteralType(type) { - return type.flags & 1056 /* EnumLike */ && isFreshLiteralType(type) ? getBaseTypeOfEnumLikeType(type) : type.flags & 128 /* StringLiteral */ && isFreshLiteralType(type) ? stringType : type.flags & 256 /* NumberLiteral */ && isFreshLiteralType(type) ? numberType : type.flags & 2048 /* BigIntLiteral */ && isFreshLiteralType(type) ? bigintType : type.flags & 512 /* BooleanLiteral */ && isFreshLiteralType(type) ? booleanType : type.flags & 1048576 /* Union */ ? mapType(type, getWidenedLiteralType) : type; + return type.flags & 98304 /* EnumLike */ && isFreshLiteralType(type) ? getBaseTypeOfEnumLikeType(type) : type.flags & 1024 /* StringLiteral */ && isFreshLiteralType(type) ? stringType : type.flags & 2048 /* NumberLiteral */ && isFreshLiteralType(type) ? numberType : type.flags & 4096 /* BigIntLiteral */ && isFreshLiteralType(type) ? bigintType : type.flags & 8192 /* BooleanLiteral */ && isFreshLiteralType(type) ? booleanType : type.flags & 134217728 /* Union */ ? mapType(type, getWidenedLiteralType) : type; } function getWidenedUniqueESSymbolType(type) { - return type.flags & 8192 /* UniqueESSymbol */ ? esSymbolType : type.flags & 1048576 /* Union */ ? mapType(type, getWidenedUniqueESSymbolType) : type; + return type.flags & 16384 /* UniqueESSymbol */ ? esSymbolType : type.flags & 134217728 /* Union */ ? mapType(type, getWidenedUniqueESSymbolType) : type; } function getWidenedLiteralLikeTypeForContextualType(type, contextualType) { if (!isLiteralOfContextualType(type, contextualType)) { @@ -72322,16 +72476,16 @@ function createTypeChecker(host) { return mapType(type, getDefinitelyFalsyPartOfType); } function getDefinitelyFalsyPartOfType(type) { - return type.flags & 4 /* String */ ? emptyStringType : type.flags & 8 /* Number */ ? zeroType : type.flags & 64 /* BigInt */ ? zeroBigIntType : type === regularFalseType || type === falseType || type.flags & (16384 /* Void */ | 32768 /* Undefined */ | 65536 /* Null */ | 3 /* AnyOrUnknown */) || type.flags & 128 /* StringLiteral */ && type.value === "" || type.flags & 256 /* NumberLiteral */ && type.value === 0 || type.flags & 2048 /* BigIntLiteral */ && isZeroBigInt(type) ? type : neverType; + return type.flags & 32 /* String */ ? emptyStringType : type.flags & 64 /* Number */ ? zeroType : type.flags & 128 /* BigInt */ ? zeroBigIntType : type === regularFalseType || type === falseType || type.flags & (16 /* Void */ | 4 /* Undefined */ | 8 /* Null */ | 3 /* AnyOrUnknown */) || type.flags & 1024 /* StringLiteral */ && type.value === "" || type.flags & 2048 /* NumberLiteral */ && type.value === 0 || type.flags & 4096 /* BigIntLiteral */ && isZeroBigInt(type) ? type : neverType; } function getNullableType(type, flags) { - const missing = flags & ~type.flags & (32768 /* Undefined */ | 65536 /* Null */); - return missing === 0 ? type : missing === 32768 /* Undefined */ ? getUnionType([type, undefinedType]) : missing === 65536 /* Null */ ? getUnionType([type, nullType]) : getUnionType([type, undefinedType, nullType]); + const missing = flags & ~type.flags & (4 /* Undefined */ | 8 /* Null */); + return missing === 0 ? type : missing === 4 /* Undefined */ ? getUnionType([type, undefinedType]) : missing === 8 /* Null */ ? getUnionType([type, nullType]) : getUnionType([type, undefinedType, nullType]); } function getOptionalType(type, isProperty = false) { Debug.assert(strictNullChecks); const missingOrUndefined = isProperty ? undefinedOrMissingType : undefinedType; - return type === missingOrUndefined || type.flags & 1048576 /* Union */ && type.types[0] === missingOrUndefined ? type : getUnionType([type, missingOrUndefined]); + return type === missingOrUndefined || type.flags & 134217728 /* Union */ && type.types[0] === missingOrUndefined ? type : getUnionType([type, missingOrUndefined]); } function getGlobalNonNullableTypeInstantiation(type) { if (!deferredGlobalNonNullableTypeAlias) { @@ -72363,17 +72517,17 @@ function createTypeChecker(host) { return exactOptionalPropertyTypes && isOptional ? removeType(type, missingType) : type; } function containsMissingType(type) { - return type === missingType || !!(type.flags & 1048576 /* Union */) && type.types[0] === missingType; + return type === missingType || !!(type.flags & 134217728 /* Union */) && type.types[0] === missingType; } function removeMissingOrUndefinedType(type) { return exactOptionalPropertyTypes ? removeType(type, missingType) : getTypeWithFacts(type, 524288 /* NEUndefined */); } function isCoercibleUnderDoubleEquals(source, target) { - return (source.flags & (8 /* Number */ | 4 /* String */ | 512 /* BooleanLiteral */)) !== 0 && (target.flags & (8 /* Number */ | 4 /* String */ | 16 /* Boolean */)) !== 0; + return (source.flags & (64 /* Number */ | 32 /* String */ | 8192 /* BooleanLiteral */)) !== 0 && (target.flags & (64 /* Number */ | 32 /* String */ | 256 /* Boolean */)) !== 0; } function isObjectTypeWithInferableIndex(type) { const objectFlags = getObjectFlags(type); - return type.flags & 2097152 /* Intersection */ ? every(type.types, isObjectTypeWithInferableIndex) : !!(type.symbol && (type.symbol.flags & (4096 /* ObjectLiteral */ | 2048 /* TypeLiteral */ | 384 /* Enum */ | 512 /* ValueModule */)) !== 0 && !(type.symbol.flags & 32 /* Class */) && !typeHasCallOrConstructSignatures(type)) || !!(objectFlags & 4194304 /* ObjectRestType */) || !!(objectFlags & 1024 /* ReverseMapped */ && isObjectTypeWithInferableIndex(type.source)); + return type.flags & 268435456 /* Intersection */ ? every(type.types, isObjectTypeWithInferableIndex) : !!(type.symbol && (type.symbol.flags & (4096 /* ObjectLiteral */ | 2048 /* TypeLiteral */ | 384 /* Enum */ | 512 /* ValueModule */)) !== 0 && !(type.symbol.flags & 32 /* Class */) && !typeHasCallOrConstructSignatures(type)) || !!(objectFlags & 4194304 /* ObjectRestType */) || !!(objectFlags & 1024 /* ReverseMapped */ && isObjectTypeWithInferableIndex(type.source)); } function createSymbolWithType(source, type) { const symbol = createSymbol(source.flags, source.escapedName, getCheckFlags(source) & 8 /* Readonly */); @@ -72502,11 +72656,11 @@ function createTypeChecker(host) { return type.widened; } let result; - if (type.flags & (1 /* Any */ | 98304 /* Nullable */)) { + if (type.flags & (1 /* Any */ | 12 /* Nullable */)) { result = anyType; } else if (isObjectLiteralType2(type)) { result = getWidenedTypeOfObjectLiteral(type, context); - } else if (type.flags & 1048576 /* Union */) { + } else if (type.flags & 134217728 /* Union */) { const unionContext = context || createWideningContext( /*parent*/ void 0, @@ -72514,9 +72668,9 @@ function createTypeChecker(host) { void 0, type.types ); - const widenedTypes = sameMap(type.types, (t) => t.flags & 98304 /* Nullable */ ? t : getWidenedTypeWithContext(t, unionContext)); + const widenedTypes = sameMap(type.types, (t) => t.flags & 12 /* Nullable */ ? t : getWidenedTypeWithContext(t, unionContext)); result = getUnionType(widenedTypes, some(widenedTypes, isEmptyObjectType) ? 2 /* Subtype */ : 1 /* Literal */); - } else if (type.flags & 2097152 /* Intersection */) { + } else if (type.flags & 268435456 /* Intersection */) { result = getIntersectionType(sameMap(type.types, getWidenedType)); } else if (isArrayOrTupleType(type)) { result = createTypeReference(type.target, sameMap(getTypeArguments(type), getWidenedType)); @@ -72532,7 +72686,7 @@ function createTypeChecker(host) { var _a; let errorReported = false; if (getObjectFlags(type) & 65536 /* ContainsWideningType */) { - if (type.flags & 1048576 /* Union */) { + if (type.flags & 134217728 /* Union */) { if (some(type.types, isEmptyObjectType)) { errorReported = true; } else { @@ -72714,18 +72868,18 @@ function createTypeChecker(host) { callback(getReturnTypeOfSignature(source), targetReturnType); } } - function createInferenceContext(typeParameters, signature, flags, compareTypes) { - return createInferenceContextWorker(typeParameters.map(createInferenceInfo), signature, flags, compareTypes || compareTypesAssignable); + function createInferenceContext(typeParameters, signature, flags, compareTypes2) { + return createInferenceContextWorker(typeParameters.map(createInferenceInfo), signature, flags, compareTypes2 || compareTypesAssignable); } function cloneInferenceContext(context, extraFlags = 0) { return context && createInferenceContextWorker(map(context.inferences, cloneInferenceInfo), context.signature, context.flags | extraFlags, context.compareTypes); } - function createInferenceContextWorker(inferences, signature, flags, compareTypes) { + function createInferenceContextWorker(inferences, signature, flags, compareTypes2) { const context = { inferences, signature, flags, - compareTypes, + compareTypes: compareTypes2, mapper: reportUnmeasurableMapper, // initialize to a noop mapper so the context object is available, but the underlying object shape is right upon construction nonFixingMapper: reportUnmeasurableMapper @@ -72812,8 +72966,8 @@ function createTypeChecker(host) { if (objectFlags & 524288 /* CouldContainTypeVariablesComputed */) { return !!(objectFlags & 1048576 /* CouldContainTypeVariables */); } - const result = !!(type.flags & 465829888 /* Instantiable */ || type.flags & 524288 /* Object */ && !isNonGenericTopLevelType(type) && (objectFlags & 4 /* Reference */ && (type.node || some(getTypeArguments(type), couldContainTypeVariables)) || objectFlags & 16 /* Anonymous */ && type.symbol && type.symbol.flags & (16 /* Function */ | 8192 /* Method */ | 32 /* Class */ | 2048 /* TypeLiteral */ | 4096 /* ObjectLiteral */) && type.symbol.declarations || objectFlags & (32 /* Mapped */ | 1024 /* ReverseMapped */ | 4194304 /* ObjectRestType */ | 8388608 /* InstantiationExpressionType */)) || type.flags & 3145728 /* UnionOrIntersection */ && !(type.flags & 1024 /* EnumLiteral */) && !isNonGenericTopLevelType(type) && some(type.types, couldContainTypeVariables)); - if (type.flags & 3899393 /* ObjectFlagsType */) { + const result = !!(type.flags & 132644864 /* Instantiable */ || type.flags & 1048576 /* Object */ && !isNonGenericTopLevelType(type) && (objectFlags & 4 /* Reference */ && (type.node || some(getTypeArguments(type), couldContainTypeVariables)) || objectFlags & 16 /* Anonymous */ && type.symbol && type.symbol.flags & (16 /* Function */ | 8192 /* Method */ | 32 /* Class */ | 2048 /* TypeLiteral */ | 4096 /* ObjectLiteral */) && type.symbol.declarations || objectFlags & (32 /* Mapped */ | 1024 /* ReverseMapped */ | 4194304 /* ObjectRestType */ | 8388608 /* InstantiationExpressionType */)) || type.flags & 402653184 /* UnionOrIntersection */ && !(type.flags & 32768 /* EnumLiteral */) && !isNonGenericTopLevelType(type) && some(type.types, couldContainTypeVariables)); + if (type.flags & 403963917 /* ObjectFlagsType */) { type.objectFlags |= 524288 /* CouldContainTypeVariablesComputed */ | (result ? 1048576 /* CouldContainTypeVariables */ : 0); } return result; @@ -72826,7 +72980,7 @@ function createTypeChecker(host) { return false; } function isTypeParameterAtTopLevel(type, tp, depth = 0) { - return !!(type === tp || type.flags & 3145728 /* UnionOrIntersection */ && some(type.types, (t) => isTypeParameterAtTopLevel(t, tp, depth)) || depth < 3 && type.flags & 16777216 /* Conditional */ && (isTypeParameterAtTopLevel(getTrueTypeFromConditionalType(type), tp, depth + 1) || isTypeParameterAtTopLevel(getFalseTypeFromConditionalType(type), tp, depth + 1))); + return !!(type === tp || type.flags & 402653184 /* UnionOrIntersection */ && some(type.types, (t) => isTypeParameterAtTopLevel(t, tp, depth)) || depth < 3 && type.flags & 67108864 /* Conditional */ && (isTypeParameterAtTopLevel(getTrueTypeFromConditionalType(type), tp, depth + 1) || isTypeParameterAtTopLevel(getFalseTypeFromConditionalType(type), tp, depth + 1))); } function isTypeParameterAtTopLevelInReturnType(signature, typeParameter) { const typePredicate = getTypePredicateOfSignature(signature); @@ -72835,7 +72989,7 @@ function createTypeChecker(host) { function createEmptyObjectTypeFromStringLiteral(type) { const members = createSymbolTable(); forEachType(type, (t) => { - if (!(t.flags & 128 /* StringLiteral */)) { + if (!(t.flags & 1024 /* StringLiteral */)) { return; } const name = escapeLeadingUnderscores(t.value); @@ -72847,7 +73001,7 @@ function createTypeChecker(host) { } members.set(name, literalProp); }); - const indexInfos = type.flags & 4 /* String */ ? [createIndexInfo( + const indexInfos = type.flags & 32 /* String */ ? [createIndexInfo( stringType, emptyObjectType, /*isReadonly*/ @@ -72915,7 +73069,7 @@ function createTypeChecker(host) { const templateType = getTemplateTypeFromMappedType(target); const inference = createInferenceInfo(typeParameter); inferTypes([inference], sourceType, templateType); - return getTypeFromInference(inference) || unknownType; + return getWidenedType(getTypeFromInference(inference) || unknownType); } function inferReverseMappedType(source, target, constraint) { const cacheKey = source.id + "," + target.id + "," + constraint.id; @@ -72949,7 +73103,7 @@ function createTypeChecker(host) { yield targetProp; } else if (matchDiscriminantProperties) { const targetType = getTypeOfSymbol(targetProp); - if (targetType.flags & 109472 /* Unit */) { + if (targetType.flags & 97292 /* Unit */) { const sourceType = getTypeOfSymbol(sourceProp); if (!(sourceType.flags & 1 /* Any */ || getRegularTypeOfLiteralType(sourceType) === getRegularTypeOfLiteralType(targetType))) { yield targetProp; @@ -73012,12 +73166,12 @@ function createTypeChecker(host) { if (target.flags & 1 /* Any */) { return true; } - if (target.flags & (4 /* String */ | 134217728 /* TemplateLiteral */)) { + if (target.flags & (32 /* String */ | 4194304 /* TemplateLiteral */)) { return isTypeAssignableTo(source, target); } - if (target.flags & 268435456 /* StringMapping */) { + if (target.flags & 8388608 /* StringMapping */) { const mappingStack = []; - while (target.flags & 268435456 /* StringMapping */) { + while (target.flags & 8388608 /* StringMapping */) { mappingStack.unshift(target.symbol); target = target.type; } @@ -73027,32 +73181,32 @@ function createTypeChecker(host) { return false; } function isValidTypeForTemplateLiteralPlaceholder(source, target) { - if (target.flags & 2097152 /* Intersection */) { + if (target.flags & 268435456 /* Intersection */) { return every(target.types, (t) => t === emptyTypeLiteralType || isValidTypeForTemplateLiteralPlaceholder(source, t)); } - if (target.flags & 4 /* String */ || isTypeAssignableTo(source, target)) { + if (target.flags & 32 /* String */ || isTypeAssignableTo(source, target)) { return true; } - if (source.flags & 128 /* StringLiteral */) { + if (source.flags & 1024 /* StringLiteral */) { const value = source.value; - return !!(target.flags & 8 /* Number */ && isValidNumberString( + return !!(target.flags & 64 /* Number */ && isValidNumberString( value, /*roundTripOnly*/ false - ) || target.flags & 64 /* BigInt */ && isValidBigIntString( + ) || target.flags & 128 /* BigInt */ && isValidBigIntString( value, /*roundTripOnly*/ false - ) || target.flags & (512 /* BooleanLiteral */ | 98304 /* Nullable */) && value === target.intrinsicName || target.flags & 268435456 /* StringMapping */ && isMemberOfStringMapping(source, target) || target.flags & 134217728 /* TemplateLiteral */ && isTypeMatchedByTemplateLiteralType(source, target)); + ) || target.flags & (8192 /* BooleanLiteral */ | 12 /* Nullable */) && value === target.intrinsicName || target.flags & 8388608 /* StringMapping */ && isMemberOfStringMapping(source, target) || target.flags & 4194304 /* TemplateLiteral */ && isTypeMatchedByTemplateLiteralType(source, target)); } - if (source.flags & 134217728 /* TemplateLiteral */) { + if (source.flags & 4194304 /* TemplateLiteral */) { const texts = source.texts; return texts.length === 2 && texts[0] === "" && texts[1] === "" && isTypeAssignableTo(source.types[0], target); } return false; } function inferTypesFromTemplateLiteralType(source, target) { - return source.flags & 128 /* StringLiteral */ ? inferFromLiteralPartsToTemplateLiteral([source.value], emptyArray, target) : source.flags & 134217728 /* TemplateLiteral */ ? arrayIsEqualTo(source.texts, target.texts) ? map(source.types, (s, i) => { + return source.flags & 1024 /* StringLiteral */ ? inferFromLiteralPartsToTemplateLiteral([source.value], emptyArray, target) : source.flags & 4194304 /* TemplateLiteral */ ? arrayIsEqualTo(source.texts, target.texts) ? map(source.types, (s, i) => { return isTypeAssignableTo(getBaseConstraintOrType(s), getBaseConstraintOrType(target.types[i])) ? s : getStringLikeTypeForType(s); }) : inferFromLiteralPartsToTemplateLiteral(source.texts, source.types, target) : void 0; } @@ -73061,7 +73215,7 @@ function createTypeChecker(host) { return !!inferences && every(inferences, (r, i) => isValidTypeForTemplateLiteralPlaceholder(r, target.types[i])); } function getStringLikeTypeForType(type) { - return type.flags & (1 /* Any */ | 402653316 /* StringLike */) ? type : getTemplateLiteralType(["", ""], [type]); + return type.flags & (1 /* Any */ | 12583968 /* StringLike */) ? type : getTemplateLiteralType(["", ""], [type]); } function inferFromLiteralPartsToTemplateLiteral(sourceTexts, sourceTypes, target) { const lastSourceIndex = sourceTexts.length - 1; @@ -73143,14 +73297,14 @@ function createTypeChecker(host) { } return; } - if (source === target && source.flags & 3145728 /* UnionOrIntersection */) { + if (source === target && source.flags & 402653184 /* UnionOrIntersection */) { for (const t of source.types) { inferFromTypes(t, t); } return; } - if (target.flags & 1048576 /* Union */) { - const [tempSources, tempTargets] = inferFromMatchingTypes(source.flags & 1048576 /* Union */ ? source.types : [source], target.types, isTypeOrBaseIdenticalTo); + if (target.flags & 134217728 /* Union */) { + const [tempSources, tempTargets] = inferFromMatchingTypes(source.flags & 134217728 /* Union */ ? source.types : [source], target.types, isTypeOrBaseIdenticalTo); const [sources, targets] = inferFromMatchingTypes(tempSources, tempTargets, isTypeCloselyMatchedBy); if (targets.length === 0) { return; @@ -73161,9 +73315,9 @@ function createTypeChecker(host) { return; } source = getUnionType(sources); - } else if (target.flags & 2097152 /* Intersection */ && !every(target.types, isNonGenericObjectType)) { - if (!(source.flags & 1048576 /* Union */)) { - const [sources, targets] = inferFromMatchingTypes(source.flags & 2097152 /* Intersection */ ? source.types : [source], target.types, isTypeIdenticalTo); + } else if (target.flags & 268435456 /* Intersection */ && !every(target.types, isNonGenericObjectType)) { + if (!(source.flags & 134217728 /* Union */)) { + const [sources, targets] = inferFromMatchingTypes(source.flags & 268435456 /* Intersection */ ? source.types : [source], target.types, isTypeIdenticalTo); if (sources.length === 0 || targets.length === 0) { return; } @@ -73171,13 +73325,13 @@ function createTypeChecker(host) { target = getIntersectionType(targets); } } - if (target.flags & (8388608 /* IndexedAccess */ | 33554432 /* Substitution */)) { + if (target.flags & (33554432 /* IndexedAccess */ | 16777216 /* Substitution */)) { if (isNoInferType(target)) { return; } target = getActualTypeVariable(target); } - if (target.flags & 8650752 /* TypeVariable */) { + if (target.flags & 34078720 /* TypeVariable */) { if (isFromInferenceBlockedSource(source)) { return; } @@ -73208,7 +73362,7 @@ function createTypeChecker(host) { clearCachedInferences(inferences); } } - if (!(priority & 128 /* ReturnType */) && target.flags & 262144 /* TypeParameter */ && inference.topLevel && !isTypeParameterAtTopLevel(originalTarget, target)) { + if (!(priority & 128 /* ReturnType */) && target.flags & 524288 /* TypeParameter */ && inference.topLevel && !isTypeParameterAtTopLevel(originalTarget, target)) { inference.topLevel = false; clearCachedInferences(inferences); } @@ -73223,13 +73377,13 @@ function createTypeChecker(host) { ); if (simplified !== target) { inferFromTypes(source, simplified); - } else if (target.flags & 8388608 /* IndexedAccess */) { + } else if (target.flags & 33554432 /* IndexedAccess */) { const indexType = getSimplifiedType( target.indexType, /*writing*/ false ); - if (indexType.flags & 465829888 /* Instantiable */) { + if (indexType.flags & 132644864 /* Instantiable */) { const simplified2 = distributeIndexOverObjectType( getSimplifiedType( target.objectType, @@ -73248,45 +73402,45 @@ function createTypeChecker(host) { } if (getObjectFlags(source) & 4 /* Reference */ && getObjectFlags(target) & 4 /* Reference */ && (source.target === target.target || isArrayType(source) && isArrayType(target)) && !(source.node && target.node)) { inferFromTypeArguments(getTypeArguments(source), getTypeArguments(target), getVariances(source.target)); - } else if (source.flags & 4194304 /* Index */ && target.flags & 4194304 /* Index */) { + } else if (source.flags & 2097152 /* Index */ && target.flags & 2097152 /* Index */) { inferFromContravariantTypes(source.type, target.type); - } else if ((isLiteralType(source) || source.flags & 4 /* String */) && target.flags & 4194304 /* Index */) { + } else if ((isLiteralType(source) || source.flags & 32 /* String */) && target.flags & 2097152 /* Index */) { const empty = createEmptyObjectTypeFromStringLiteral(source); inferFromContravariantTypesWithPriority(empty, target.type, 256 /* LiteralKeyof */); - } else if (source.flags & 8388608 /* IndexedAccess */ && target.flags & 8388608 /* IndexedAccess */) { + } else if (source.flags & 33554432 /* IndexedAccess */ && target.flags & 33554432 /* IndexedAccess */) { inferFromTypes(source.objectType, target.objectType); inferFromTypes(source.indexType, target.indexType); - } else if (source.flags & 268435456 /* StringMapping */ && target.flags & 268435456 /* StringMapping */) { + } else if (source.flags & 8388608 /* StringMapping */ && target.flags & 8388608 /* StringMapping */) { if (source.symbol === target.symbol) { inferFromTypes(source.type, target.type); } - } else if (source.flags & 33554432 /* Substitution */) { + } else if (source.flags & 16777216 /* Substitution */) { inferFromTypes(source.baseType, target); inferWithPriority(getSubstitutionIntersection(source), target, 4 /* SubstituteSource */); - } else if (target.flags & 16777216 /* Conditional */) { + } else if (target.flags & 67108864 /* Conditional */) { invokeOnce(source, target, inferToConditionalType); - } else if (target.flags & 3145728 /* UnionOrIntersection */) { + } else if (target.flags & 402653184 /* UnionOrIntersection */) { inferToMultipleTypes(source, target.types, target.flags); - } else if (source.flags & 1048576 /* Union */) { + } else if (source.flags & 134217728 /* Union */) { const sourceTypes = source.types; for (const sourceType of sourceTypes) { inferFromTypes(sourceType, target); } - } else if (target.flags & 134217728 /* TemplateLiteral */) { + } else if (target.flags & 4194304 /* TemplateLiteral */) { inferToTemplateLiteralType(source, target); } else { source = getReducedType(source); if (isGenericMappedType(source) && isGenericMappedType(target)) { invokeOnce(source, target, inferFromGenericMappedTypes); } - if (!(priority & 512 /* NoConstraints */ && source.flags & (2097152 /* Intersection */ | 465829888 /* Instantiable */))) { + if (!(priority & 512 /* NoConstraints */ && source.flags & (268435456 /* Intersection */ | 132644864 /* Instantiable */))) { const apparentSource = getApparentType(source); - if (apparentSource !== source && !(apparentSource.flags & (524288 /* Object */ | 2097152 /* Intersection */))) { + if (apparentSource !== source && !(apparentSource.flags & (1048576 /* Object */ | 268435456 /* Intersection */))) { return inferFromTypes(apparentSource, target); } source = apparentSource; } - if (source.flags & (524288 /* Object */ | 2097152 /* Intersection */)) { + if (source.flags & (1048576 /* Object */ | 268435456 /* Intersection */)) { invokeOnce(source, target, inferFromObjectTypes); } } @@ -73375,7 +73529,7 @@ function createTypeChecker(host) { } } function getInferenceInfoForType(type) { - if (type.flags & 8650752 /* TypeVariable */) { + if (type.flags & 34078720 /* TypeVariable */) { for (const inference of inferences) { if (type === inference.typeParameter) { return inference; @@ -73387,7 +73541,7 @@ function createTypeChecker(host) { function getSingleTypeVariableFromIntersectionTypes(types) { let typeVariable; for (const type of types) { - const t = type.flags & 2097152 /* Intersection */ && find(type.types, (t2) => !!getInferenceInfoForType(t2)); + const t = type.flags & 268435456 /* Intersection */ && find(type.types, (t2) => !!getInferenceInfoForType(t2)); if (!t || typeVariable && t !== typeVariable) { return void 0; } @@ -73397,9 +73551,9 @@ function createTypeChecker(host) { } function inferToMultipleTypes(source, targets, targetFlags) { let typeVariableCount = 0; - if (targetFlags & 1048576 /* Union */) { + if (targetFlags & 134217728 /* Union */) { let nakedTypeVariable; - const sources = source.flags & 1048576 /* Union */ ? source.types : [source]; + const sources = source.flags & 134217728 /* Union */ ? source.types : [source]; const matched = new Array(sources.length); let inferenceCircularity = false; for (const t of targets) { @@ -73440,7 +73594,7 @@ function createTypeChecker(host) { } } } - if (targetFlags & 2097152 /* Intersection */ ? typeVariableCount === 1 : typeVariableCount > 0) { + if (targetFlags & 268435456 /* Intersection */ ? typeVariableCount === 1 : typeVariableCount > 0) { for (const t of targets) { if (getInferenceInfoForType(t)) { inferWithPriority(source, t, 1 /* NakedTypeVariable */); @@ -73449,14 +73603,14 @@ function createTypeChecker(host) { } } function inferToMappedType(source, target, constraintType) { - if (constraintType.flags & 1048576 /* Union */ || constraintType.flags & 2097152 /* Intersection */) { + if (constraintType.flags & 134217728 /* Union */ || constraintType.flags & 268435456 /* Intersection */) { let result = false; for (const type of constraintType.types) { result = inferToMappedType(source, target, type) || result; } return result; } - if (constraintType.flags & 4194304 /* Index */) { + if (constraintType.flags & 2097152 /* Index */) { const inference = getInferenceInfoForType(constraintType.type); if (inference && !inference.isFixed && !isFromInferenceBlockedSource(source)) { const inferredType = inferTypeForHomomorphicMappedType(source, target, constraintType); @@ -73470,7 +73624,7 @@ function createTypeChecker(host) { } return true; } - if (constraintType.flags & 262144 /* TypeParameter */) { + if (constraintType.flags & 524288 /* TypeParameter */) { inferWithPriority(getIndexType( source, /*indexFlags*/ @@ -73488,7 +73642,7 @@ function createTypeChecker(host) { return false; } function inferToConditionalType(source, target) { - if (source.flags & 16777216 /* Conditional */) { + if (source.flags & 67108864 /* Conditional */) { inferFromTypes(source.checkType, target.checkType); inferFromTypes(source.extendsType, target.extendsType); inferFromTypes(getTrueTypeFromConditionalType(source), getTrueTypeFromConditionalType(target)); @@ -73505,30 +73659,30 @@ function createTypeChecker(host) { for (let i = 0; i < types.length; i++) { const source2 = matches ? matches[i] : neverType; const target2 = types[i]; - if (source2.flags & 128 /* StringLiteral */ && target2.flags & 8650752 /* TypeVariable */) { + if (source2.flags & 1024 /* StringLiteral */ && target2.flags & 34078720 /* TypeVariable */) { const inferenceContext = getInferenceInfoForType(target2); const constraint = inferenceContext ? getBaseConstraintOfType(inferenceContext.typeParameter) : void 0; if (constraint && !isTypeAny(constraint)) { - const constraintTypes = constraint.flags & 1048576 /* Union */ ? constraint.types : [constraint]; + const constraintTypes = constraint.flags & 134217728 /* Union */ ? constraint.types : [constraint]; let allTypeFlags = reduceLeft(constraintTypes, (flags, t) => flags | t.flags, 0); - if (!(allTypeFlags & 4 /* String */)) { + if (!(allTypeFlags & 32 /* String */)) { const str = source2.value; - if (allTypeFlags & 296 /* NumberLike */ && !isValidNumberString( + if (allTypeFlags & 67648 /* NumberLike */ && !isValidNumberString( str, /*roundTripOnly*/ true )) { - allTypeFlags &= ~296 /* NumberLike */; + allTypeFlags &= ~67648 /* NumberLike */; } - if (allTypeFlags & 2112 /* BigIntLike */ && !isValidBigIntString( + if (allTypeFlags & 4224 /* BigIntLike */ && !isValidBigIntString( str, /*roundTripOnly*/ true )) { - allTypeFlags &= ~2112 /* BigIntLike */; + allTypeFlags &= ~4224 /* BigIntLike */; } - const matchingType = reduceLeft(constraintTypes, (left, right) => !(right.flags & allTypeFlags) ? left : left.flags & 4 /* String */ ? left : right.flags & 4 /* String */ ? source2 : left.flags & 134217728 /* TemplateLiteral */ ? left : right.flags & 134217728 /* TemplateLiteral */ && isTypeMatchedByTemplateLiteralType(source2, right) ? source2 : left.flags & 268435456 /* StringMapping */ ? left : right.flags & 268435456 /* StringMapping */ && str === applyStringMapping(right.symbol, str) ? source2 : left.flags & 128 /* StringLiteral */ ? left : right.flags & 128 /* StringLiteral */ && right.value === str ? right : left.flags & 8 /* Number */ ? left : right.flags & 8 /* Number */ ? getNumberLiteralType(+str) : left.flags & 32 /* Enum */ ? left : right.flags & 32 /* Enum */ ? getNumberLiteralType(+str) : left.flags & 256 /* NumberLiteral */ ? left : right.flags & 256 /* NumberLiteral */ && right.value === +str ? right : left.flags & 64 /* BigInt */ ? left : right.flags & 64 /* BigInt */ ? parseBigIntLiteralType(str) : left.flags & 2048 /* BigIntLiteral */ ? left : right.flags & 2048 /* BigIntLiteral */ && pseudoBigIntToString(right.value) === str ? right : left.flags & 16 /* Boolean */ ? left : right.flags & 16 /* Boolean */ ? str === "true" ? trueType : str === "false" ? falseType : booleanType : left.flags & 512 /* BooleanLiteral */ ? left : right.flags & 512 /* BooleanLiteral */ && right.intrinsicName === str ? right : left.flags & 32768 /* Undefined */ ? left : right.flags & 32768 /* Undefined */ && right.intrinsicName === str ? right : left.flags & 65536 /* Null */ ? left : right.flags & 65536 /* Null */ && right.intrinsicName === str ? right : left, neverType); - if (!(matchingType.flags & 131072 /* Never */)) { + const matchingType = reduceLeft(constraintTypes, (left, right) => !(right.flags & allTypeFlags) ? left : left.flags & 32 /* String */ ? left : right.flags & 32 /* String */ ? source2 : left.flags & 4194304 /* TemplateLiteral */ ? left : right.flags & 4194304 /* TemplateLiteral */ && isTypeMatchedByTemplateLiteralType(source2, right) ? source2 : left.flags & 8388608 /* StringMapping */ ? left : right.flags & 8388608 /* StringMapping */ && str === applyStringMapping(right.symbol, str) ? source2 : left.flags & 1024 /* StringLiteral */ ? left : right.flags & 1024 /* StringLiteral */ && right.value === str ? right : left.flags & 64 /* Number */ ? left : right.flags & 64 /* Number */ ? getNumberLiteralType(+str) : left.flags & 65536 /* Enum */ ? left : right.flags & 65536 /* Enum */ ? getNumberLiteralType(+str) : left.flags & 2048 /* NumberLiteral */ ? left : right.flags & 2048 /* NumberLiteral */ && right.value === +str ? right : left.flags & 128 /* BigInt */ ? left : right.flags & 128 /* BigInt */ ? parseBigIntLiteralType(str) : left.flags & 4096 /* BigIntLiteral */ ? left : right.flags & 4096 /* BigIntLiteral */ && pseudoBigIntToString(right.value) === str ? right : left.flags & 256 /* Boolean */ ? left : right.flags & 256 /* Boolean */ ? str === "true" ? trueType : str === "false" ? falseType : booleanType : left.flags & 8192 /* BooleanLiteral */ ? left : right.flags & 8192 /* BooleanLiteral */ && right.intrinsicName === str ? right : left.flags & 4 /* Undefined */ ? left : right.flags & 4 /* Undefined */ && right.intrinsicName === str ? right : left.flags & 8 /* Null */ ? left : right.flags & 8 /* Null */ && right.intrinsicName === str ? right : left, neverType); + if (!(matchingType.flags & 262144 /* Never */)) { inferFromTypes(matchingType, target2); continue; } @@ -73687,7 +73841,7 @@ function createTypeChecker(host) { for (const targetInfo of indexInfos) { const propTypes = []; for (const prop of getPropertiesOfType(source)) { - if (isApplicableIndexType(getLiteralTypeFromProperty(prop, 8576 /* StringOrNumberLiteralOrUnique */), targetInfo.keyType)) { + if (isApplicableIndexType(getLiteralTypeFromProperty(prop, 19456 /* StringOrNumberLiteralOrUnique */), targetInfo.keyType)) { const propType = getTypeOfSymbol(prop); propTypes.push(prop.flags & 16777216 /* Optional */ ? removeMissingOrUndefinedType(propType) : propType); } @@ -73711,14 +73865,14 @@ function createTypeChecker(host) { } } function isTypeOrBaseIdenticalTo(s, t) { - return t === missingType ? s === t : isTypeIdenticalTo(s, t) || !!(t.flags & 4 /* String */ && s.flags & 128 /* StringLiteral */ || t.flags & 8 /* Number */ && s.flags & 256 /* NumberLiteral */); + return t === missingType ? s === t : isTypeIdenticalTo(s, t) || !!(t.flags & 32 /* String */ && s.flags & 1024 /* StringLiteral */ || t.flags & 64 /* Number */ && s.flags & 2048 /* NumberLiteral */); } function isTypeCloselyMatchedBy(s, t) { - return !!(s.flags & 524288 /* Object */ && t.flags & 524288 /* Object */ && s.symbol && s.symbol === t.symbol || s.aliasSymbol && s.aliasTypeArguments && s.aliasSymbol === t.aliasSymbol); + return !!(s.flags & 1048576 /* Object */ && t.flags & 1048576 /* Object */ && s.symbol && s.symbol === t.symbol || s.aliasSymbol && s.aliasTypeArguments && s.aliasSymbol === t.aliasSymbol); } function hasPrimitiveConstraint(type) { const constraint = getConstraintOfTypeParameter(type); - return !!constraint && maybeTypeOfKind(constraint.flags & 16777216 /* Conditional */ ? getDefaultConstraintOfConditionalType(constraint) : constraint, 402784252 /* Primitive */ | 4194304 /* Index */ | 134217728 /* TemplateLiteral */ | 268435456 /* StringMapping */); + return !!constraint && maybeTypeOfKind(constraint.flags & 67108864 /* Conditional */ ? getDefaultConstraintOfConditionalType(constraint) : constraint, 12713980 /* Primitive */ | 2097152 /* Index */ | 4194304 /* TemplateLiteral */ | 8388608 /* StringMapping */); } function isObjectLiteralType2(type) { return !!(getObjectFlags(type) & 128 /* ObjectLiteral */); @@ -73756,7 +73910,7 @@ function createTypeChecker(host) { const inferredCovariantType = inference.candidates ? getCovariantInference(inference, context.signature) : void 0; const inferredContravariantType = inference.contraCandidates ? getContravariantInference(inference) : void 0; if (inferredCovariantType || inferredContravariantType) { - const preferCovariantType = inferredCovariantType && (!inferredContravariantType || !(inferredCovariantType.flags & (131072 /* Never */ | 1 /* Any */)) && some(inference.contraCandidates, (t) => isTypeAssignableTo(inferredCovariantType, t)) && every(context.inferences, (other) => other !== inference && getConstraintOfTypeParameter(other.typeParameter) !== inference.typeParameter || every(other.candidates, (t) => isTypeAssignableTo(t, inferredCovariantType)))); + const preferCovariantType = inferredCovariantType && (!inferredContravariantType || !(inferredCovariantType.flags & (262144 /* Never */ | 1 /* Any */)) && some(inference.contraCandidates, (t) => isTypeAssignableTo(inferredCovariantType, t)) && every(context.inferences, (other) => other !== inference && getConstraintOfTypeParameter(other.typeParameter) !== inference.typeParameter || every(other.candidates, (t) => isTypeAssignableTo(t, inferredCovariantType)))); inferredType = preferCovariantType ? inferredCovariantType : inferredContravariantType; fallbackType = preferCovariantType ? inferredContravariantType : inferredCovariantType; } else if (context.flags & 1 /* NoDefault */) { @@ -73774,9 +73928,17 @@ function createTypeChecker(host) { const constraint = getConstraintOfTypeParameter(inference.typeParameter); if (constraint) { const instantiatedConstraint = instantiateType(constraint, context.nonFixingMapper); - if (!inferredType || !context.compareTypes(inferredType, getTypeWithThisArgument(instantiatedConstraint, inferredType))) { - inference.inferredType = fallbackType && context.compareTypes(fallbackType, getTypeWithThisArgument(instantiatedConstraint, fallbackType)) ? fallbackType : instantiatedConstraint; + if (inferredType) { + const constraintWithThis = getTypeWithThisArgument(instantiatedConstraint, inferredType); + if (!context.compareTypes(inferredType, constraintWithThis)) { + const filteredByConstraint = inference.priority === 128 /* ReturnType */ ? filterType(inferredType, (t) => !!context.compareTypes(t, constraintWithThis)) : neverType; + inferredType = !(filteredByConstraint.flags & 262144 /* Never */) ? filteredByConstraint : void 0; + } + } + if (!inferredType) { + inferredType = fallbackType && context.compareTypes(fallbackType, getTypeWithThisArgument(instantiatedConstraint, fallbackType)) ? fallbackType : instantiatedConstraint; } + inference.inferredType = inferredType; } clearActiveMapperCaches(); } @@ -73798,19 +73960,21 @@ function createTypeChecker(host) { case "console": return Diagnostics.Cannot_find_name_0_Do_you_need_to_change_your_target_library_Try_changing_the_lib_compiler_option_to_include_dom; case "$": - return compilerOptions.types ? Diagnostics.Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_jQuery_Try_npm_i_save_dev_types_Slashjquery_and_then_add_jquery_to_the_types_field_in_your_tsconfig : Diagnostics.Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_jQuery_Try_npm_i_save_dev_types_Slashjquery; + return usesWildcardTypes(compilerOptions) ? Diagnostics.Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_jQuery_Try_npm_i_save_dev_types_Slashjquery : Diagnostics.Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_jQuery_Try_npm_i_save_dev_types_Slashjquery_and_then_add_jquery_to_the_types_field_in_your_tsconfig; + case "beforeEach": case "describe": case "suite": case "it": case "test": - return compilerOptions.types ? Diagnostics.Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_a_test_runner_Try_npm_i_save_dev_types_Slashjest_or_npm_i_save_dev_types_Slashmocha_and_then_add_jest_or_mocha_to_the_types_field_in_your_tsconfig : Diagnostics.Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_a_test_runner_Try_npm_i_save_dev_types_Slashjest_or_npm_i_save_dev_types_Slashmocha; + return usesWildcardTypes(compilerOptions) ? Diagnostics.Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_a_test_runner_Try_npm_i_save_dev_types_Slashjest_or_npm_i_save_dev_types_Slashmocha : Diagnostics.Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_a_test_runner_Try_npm_i_save_dev_types_Slashjest_or_npm_i_save_dev_types_Slashmocha_and_then_add_jest_or_mocha_to_the_types_field_in_your_tsconfig; case "process": case "require": case "Buffer": case "module": - return compilerOptions.types ? Diagnostics.Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_node_Try_npm_i_save_dev_types_Slashnode_and_then_add_node_to_the_types_field_in_your_tsconfig : Diagnostics.Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_node_Try_npm_i_save_dev_types_Slashnode; + case "NodeJS": + return usesWildcardTypes(compilerOptions) ? Diagnostics.Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_node_Try_npm_i_save_dev_types_Slashnode : Diagnostics.Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_node_Try_npm_i_save_dev_types_Slashnode_and_then_add_node_to_the_types_field_in_your_tsconfig; case "Bun": - return compilerOptions.types ? Diagnostics.Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_Bun_Try_npm_i_save_dev_types_Slashbun_and_then_add_bun_to_the_types_field_in_your_tsconfig : Diagnostics.Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_Bun_Try_npm_i_save_dev_types_Slashbun; + return usesWildcardTypes(compilerOptions) ? Diagnostics.Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_Bun_Try_npm_i_save_dev_types_Slashbun : Diagnostics.Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_Bun_Try_npm_i_save_dev_types_Slashbun_and_then_add_bun_to_the_types_field_in_your_tsconfig; case "Map": case "Set": case "Promise": @@ -73843,6 +74007,18 @@ function createTypeChecker(host) { } } } + function getCannotResolveModuleNameErrorForSpecificModule(moduleName) { + if (moduleName.kind === 11 /* StringLiteral */) { + if (nodeCoreModules.has(moduleName.text)) { + if (usesWildcardTypes(compilerOptions)) { + return Diagnostics.Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_node_Try_npm_i_save_dev_types_Slashnode; + } else { + return Diagnostics.Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_node_Try_npm_i_save_dev_types_Slashnode_and_then_add_node_to_the_types_field_in_your_tsconfig; + } + } + } + return void 0; + } function getResolvedSymbol(node) { const links = getNodeLinks(node); if (!links.resolvedSymbol) { @@ -73964,7 +74140,7 @@ function createTypeChecker(host) { return void 0; } function tryGetNameFromType(type) { - return type.flags & 8192 /* UniqueESSymbol */ ? type.escapedName : type.flags & 384 /* StringOrNumberLiteral */ ? escapeLeadingUnderscores("" + type.value) : void 0; + return type.flags & 16384 /* UniqueESSymbol */ ? type.escapedName : type.flags & 3072 /* StringOrNumberLiteral */ ? escapeLeadingUnderscores("" + type.value) : void 0; } function tryGetElementAccessExpressionName(node) { return isStringOrNumericLiteralLike(node.argumentExpression) ? escapeLeadingUnderscores(node.argumentExpression.text) : isEntityNameExpression(node.argumentExpression) ? tryGetNameFromEntityNameExpression(node.argumentExpression) : void 0; @@ -74017,7 +74193,7 @@ function createTypeChecker(host) { return false; } function isDiscriminantProperty(type, name) { - if (type && type.flags & 1048576 /* Union */) { + if (type && type.flags & 134217728 /* Union */) { const prop = getUnionOrIntersectionProperty(type, name); if (prop && getCheckFlags(prop) & 2 /* SyntheticProperty */) { if (prop.links.isDiscriminantProperty === void 0) { @@ -74045,36 +74221,34 @@ function createTypeChecker(host) { const map2 = /* @__PURE__ */ new Map(); let count = 0; for (const type of types) { - if (type.flags & (524288 /* Object */ | 2097152 /* Intersection */ | 58982400 /* InstantiableNonPrimitive */)) { + if (type.flags & (1048576 /* Object */ | 268435456 /* Intersection */ | 117964800 /* InstantiableNonPrimitive */)) { const discriminant = getTypeOfPropertyOfType(type, name); - if (discriminant) { - if (!isLiteralType(discriminant)) { - return void 0; - } - let duplicate = false; - forEachType(discriminant, (t) => { - const id = getTypeId(getRegularTypeOfLiteralType(t)); - const existing = map2.get(id); - if (!existing) { - map2.set(id, type); - } else if (existing !== unknownType) { - map2.set(id, unknownType); - duplicate = true; - } - }); - if (!duplicate) count++; + if (!discriminant || !isLiteralType(discriminant)) { + return void 0; } + let duplicate = false; + forEachType(discriminant, (t) => { + const id = getTypeId(getRegularTypeOfLiteralType(t)); + const existing = map2.get(id); + if (!existing) { + map2.set(id, type); + } else if (existing !== unknownType) { + map2.set(id, unknownType); + duplicate = true; + } + }); + if (!duplicate) count++; } } return count >= 10 && count * 2 >= types.length ? map2 : void 0; } function getKeyPropertyName(unionType) { const types = unionType.types; - if (types.length < 10 || getObjectFlags(unionType) & 32768 /* PrimitiveUnion */ || countWhere(types, (t) => !!(t.flags & (524288 /* Object */ | 58982400 /* InstantiableNonPrimitive */))) < 10) { + if (types.length < 10 || getObjectFlags(unionType) & 32768 /* PrimitiveUnion */ || countWhere(types, (t) => !!(t.flags & (1048576 /* Object */ | 117964800 /* InstantiableNonPrimitive */))) < 10) { return void 0; } if (unionType.keyPropertyName === void 0) { - const keyPropertyName = forEach(types, (t) => t.flags & (524288 /* Object */ | 58982400 /* InstantiableNonPrimitive */) ? forEach(getPropertiesOfType(t), (p) => isUnitType(getTypeOfSymbol(p)) ? p.escapedName : void 0) : void 0); + const keyPropertyName = forEach(types, (t) => t.flags & (1048576 /* Object */ | 117964800 /* InstantiableNonPrimitive */) ? forEach(getPropertiesOfType(t), (p) => isUnitType(getTypeOfSymbol(p)) ? p.escapedName : void 0) : void 0); const mapByKeyProperty = keyPropertyName && mapTypesByKeyProperty(types, keyPropertyName); unionType.keyPropertyName = mapByKeyProperty ? keyPropertyName : ""; unionType.constituentMap = mapByKeyProperty; @@ -74121,7 +74295,7 @@ function createTypeChecker(host) { return flow.id; } function typeMaybeAssignableTo(source, target) { - if (!(source.flags & 1048576 /* Union */)) { + if (!(source.flags & 134217728 /* Union */)) { return isTypeAssignableTo(source, target); } for (const t of source.types) { @@ -74135,7 +74309,7 @@ function createTypeChecker(host) { if (declaredType === assignedType) { return declaredType; } - if (assignedType.flags & 131072 /* Never */) { + if (assignedType.flags & 262144 /* Never */) { return assignedType; } const key = `A${getTypeId(declaredType)},${getTypeId(assignedType)}`; @@ -74143,7 +74317,7 @@ function createTypeChecker(host) { } function getAssignmentReducedTypeWorker(declaredType, assignedType) { const filteredType = filterType(declaredType, (t) => typeMaybeAssignableTo(assignedType, t)); - const reducedType = assignedType.flags & 512 /* BooleanLiteral */ && isFreshLiteralType(assignedType) ? mapType(filteredType, getFreshTypeOfLiteralType) : filteredType; + const reducedType = assignedType.flags & 8192 /* BooleanLiteral */ && isFreshLiteralType(assignedType) ? mapType(filteredType, getFreshTypeOfLiteralType) : filteredType; return isTypeAssignableTo(assignedType, reducedType) ? reducedType : declaredType; } function isFunctionObjectType(type) { @@ -74160,76 +74334,76 @@ function createTypeChecker(host) { return getTypeFacts(type, mask2) !== 0; } function getTypeFactsWorker(type, callerOnlyNeeds) { - if (type.flags & (2097152 /* Intersection */ | 465829888 /* Instantiable */)) { + if (type.flags & (268435456 /* Intersection */ | 132644864 /* Instantiable */)) { type = getBaseConstraintOfType(type) || unknownType; } const flags = type.flags; - if (flags & (4 /* String */ | 268435456 /* StringMapping */)) { + if (flags & (32 /* String */ | 8388608 /* StringMapping */)) { return strictNullChecks ? 16317953 /* StringStrictFacts */ : 16776705 /* StringFacts */; } - if (flags & (128 /* StringLiteral */ | 134217728 /* TemplateLiteral */)) { - const isEmpty = flags & 128 /* StringLiteral */ && type.value === ""; + if (flags & (1024 /* StringLiteral */ | 4194304 /* TemplateLiteral */)) { + const isEmpty = flags & 1024 /* StringLiteral */ && type.value === ""; return strictNullChecks ? isEmpty ? 12123649 /* EmptyStringStrictFacts */ : 7929345 /* NonEmptyStringStrictFacts */ : isEmpty ? 12582401 /* EmptyStringFacts */ : 16776705 /* NonEmptyStringFacts */; } - if (flags & (8 /* Number */ | 32 /* Enum */)) { + if (flags & (64 /* Number */ | 65536 /* Enum */)) { return strictNullChecks ? 16317698 /* NumberStrictFacts */ : 16776450 /* NumberFacts */; } - if (flags & 256 /* NumberLiteral */) { + if (flags & 2048 /* NumberLiteral */) { const isZero = type.value === 0; return strictNullChecks ? isZero ? 12123394 /* ZeroNumberStrictFacts */ : 7929090 /* NonZeroNumberStrictFacts */ : isZero ? 12582146 /* ZeroNumberFacts */ : 16776450 /* NonZeroNumberFacts */; } - if (flags & 64 /* BigInt */) { + if (flags & 128 /* BigInt */) { return strictNullChecks ? 16317188 /* BigIntStrictFacts */ : 16775940 /* BigIntFacts */; } - if (flags & 2048 /* BigIntLiteral */) { + if (flags & 4096 /* BigIntLiteral */) { const isZero = isZeroBigInt(type); return strictNullChecks ? isZero ? 12122884 /* ZeroBigIntStrictFacts */ : 7928580 /* NonZeroBigIntStrictFacts */ : isZero ? 12581636 /* ZeroBigIntFacts */ : 16775940 /* NonZeroBigIntFacts */; } - if (flags & 16 /* Boolean */) { + if (flags & 256 /* Boolean */) { return strictNullChecks ? 16316168 /* BooleanStrictFacts */ : 16774920 /* BooleanFacts */; } - if (flags & 528 /* BooleanLike */) { + if (flags & 8448 /* BooleanLike */) { return strictNullChecks ? type === falseType || type === regularFalseType ? 12121864 /* FalseStrictFacts */ : 7927560 /* TrueStrictFacts */ : type === falseType || type === regularFalseType ? 12580616 /* FalseFacts */ : 16774920 /* TrueFacts */; } - if (flags & 524288 /* Object */) { + if (flags & 1048576 /* Object */) { const possibleFacts = strictNullChecks ? 83427327 /* EmptyObjectStrictFacts */ | 7880640 /* FunctionStrictFacts */ | 7888800 /* ObjectStrictFacts */ : 83886079 /* EmptyObjectFacts */ | 16728e3 /* FunctionFacts */ | 16736160 /* ObjectFacts */; if ((callerOnlyNeeds & possibleFacts) === 0) { return 0; } return getObjectFlags(type) & 16 /* Anonymous */ && isEmptyObjectType(type) ? strictNullChecks ? 83427327 /* EmptyObjectStrictFacts */ : 83886079 /* EmptyObjectFacts */ : isFunctionObjectType(type) ? strictNullChecks ? 7880640 /* FunctionStrictFacts */ : 16728e3 /* FunctionFacts */ : strictNullChecks ? 7888800 /* ObjectStrictFacts */ : 16736160 /* ObjectFacts */; } - if (flags & 16384 /* Void */) { + if (flags & 16 /* Void */) { return 9830144 /* VoidFacts */; } - if (flags & 32768 /* Undefined */) { + if (flags & 4 /* Undefined */) { return 26607360 /* UndefinedFacts */; } - if (flags & 65536 /* Null */) { + if (flags & 8 /* Null */) { return 42917664 /* NullFacts */; } - if (flags & 12288 /* ESSymbolLike */) { + if (flags & 16896 /* ESSymbolLike */) { return strictNullChecks ? 7925520 /* SymbolStrictFacts */ : 16772880 /* SymbolFacts */; } - if (flags & 67108864 /* NonPrimitive */) { + if (flags & 131072 /* NonPrimitive */) { return strictNullChecks ? 7888800 /* ObjectStrictFacts */ : 16736160 /* ObjectFacts */; } - if (flags & 131072 /* Never */) { + if (flags & 262144 /* Never */) { return 0 /* None */; } - if (flags & 1048576 /* Union */) { + if (flags & 134217728 /* Union */) { return reduceLeft(type.types, (facts, t) => facts | getTypeFactsWorker(t, callerOnlyNeeds), 0 /* None */); } - if (flags & 2097152 /* Intersection */) { + if (flags & 268435456 /* Intersection */) { return getIntersectionTypeFacts(type, callerOnlyNeeds); } return 83886079 /* UnknownFacts */; } function getIntersectionTypeFacts(type, callerOnlyNeeds) { - const ignoreObjects = maybeTypeOfKind(type, 402784252 /* Primitive */); + const ignoreObjects = maybeTypeOfKind(type, 12713980 /* Primitive */); let oredFacts = 0 /* None */; let andedFacts = 134217727 /* All */; for (const t of type.types) { - if (!(ignoreObjects && t.flags & 524288 /* Object */)) { + if (!(ignoreObjects && t.flags & 1048576 /* Object */)) { const f = getTypeFactsWorker(t, callerOnlyNeeds); oredFacts |= f; andedFacts &= f; @@ -74416,13 +74590,13 @@ function createTypeChecker(host) { return witnesses; } function eachTypeContainedIn(source, types) { - return source.flags & 1048576 /* Union */ ? !forEach(source.types, (t) => !contains(types, t)) : contains(types, source); + return source.flags & 134217728 /* Union */ ? !forEach(source.types, (t) => !contains(types, t)) : contains(types, source); } function isTypeSubsetOf(source, target) { - return !!(source === target || source.flags & 131072 /* Never */ || target.flags & 1048576 /* Union */ && isTypeSubsetOfUnion(source, target)); + return !!(source === target || source.flags & 262144 /* Never */ || target.flags & 134217728 /* Union */ && isTypeSubsetOfUnion(source, target)); } function isTypeSubsetOfUnion(source, target) { - if (source.flags & 1048576 /* Union */) { + if (source.flags & 134217728 /* Union */) { for (const t of source.types) { if (!containsType(target.types, t)) { return false; @@ -74430,25 +74604,25 @@ function createTypeChecker(host) { } return true; } - if (source.flags & 1056 /* EnumLike */ && getBaseTypeOfEnumLikeType(source) === target) { + if (source.flags & 98304 /* EnumLike */ && getBaseTypeOfEnumLikeType(source) === target) { return true; } return containsType(target.types, source); } function forEachType(type, f) { - return type.flags & 1048576 /* Union */ ? forEach(type.types, f) : f(type); + return type.flags & 134217728 /* Union */ ? forEach(type.types, f) : f(type); } function someType(type, f) { - return type.flags & 1048576 /* Union */ ? some(type.types, f) : f(type); + return type.flags & 134217728 /* Union */ ? some(type.types, f) : f(type); } function everyType(type, f) { - return type.flags & 1048576 /* Union */ ? every(type.types, f) : f(type); + return type.flags & 134217728 /* Union */ ? every(type.types, f) : f(type); } function everyContainedType(type, f) { - return type.flags & 3145728 /* UnionOrIntersection */ ? every(type.types, f) : f(type); + return type.flags & 402653184 /* UnionOrIntersection */ ? every(type.types, f) : f(type); } function filterType(type, f) { - if (type.flags & 1048576 /* Union */) { + if (type.flags & 134217728 /* Union */) { const types = type.types; const filtered = filter(types, f); if (filtered === types) { @@ -74456,14 +74630,14 @@ function createTypeChecker(host) { } const origin = type.origin; let newOrigin; - if (origin && origin.flags & 1048576 /* Union */) { + if (origin && origin.flags & 134217728 /* Union */) { const originTypes = origin.types; - const originFiltered = filter(originTypes, (t) => !!(t.flags & 1048576 /* Union */) || f(t)); + const originFiltered = filter(originTypes, (t) => !!(t.flags & 134217728 /* Union */) || f(t)); if (originTypes.length - originFiltered.length === types.length - filtered.length) { if (originFiltered.length === 1) { return originFiltered[0]; } - newOrigin = createOriginUnionOrIntersectionType(1048576 /* Union */, originFiltered); + newOrigin = createOriginUnionOrIntersectionType(134217728 /* Union */, originFiltered); } } return getUnionTypeFromSortedList( @@ -74476,27 +74650,27 @@ function createTypeChecker(host) { newOrigin ); } - return type.flags & 131072 /* Never */ || f(type) ? type : neverType; + return type.flags & 262144 /* Never */ || f(type) ? type : neverType; } function removeType(type, targetType) { return filterType(type, (t) => t !== targetType); } function countTypes(type) { - return type.flags & 1048576 /* Union */ ? type.types.length : 1; + return type.flags & 134217728 /* Union */ ? type.types.length : 1; } function mapType(type, mapper, noReductions) { - if (type.flags & 131072 /* Never */) { + if (type.flags & 262144 /* Never */) { return type; } - if (!(type.flags & 1048576 /* Union */)) { + if (!(type.flags & 134217728 /* Union */)) { return mapper(type); } const origin = type.origin; - const types = origin && origin.flags & 1048576 /* Union */ ? origin.types : type.types; + const types = origin && origin.flags & 134217728 /* Union */ ? origin.types : type.types; let mappedTypes; let changed = false; for (const t of types) { - const mapped = t.flags & 1048576 /* Union */ ? mapType(t, mapper, noReductions) : mapper(t); + const mapped = t.flags & 134217728 /* Union */ ? mapType(t, mapper, noReductions) : mapper(t); changed || (changed = t !== mapped); if (mapped) { if (!mappedTypes) { @@ -74509,14 +74683,14 @@ function createTypeChecker(host) { return changed ? mappedTypes && getUnionType(mappedTypes, noReductions ? 0 /* None */ : 1 /* Literal */) : type; } function mapTypeWithAlias(type, mapper, aliasSymbol, aliasTypeArguments) { - return type.flags & 1048576 /* Union */ && aliasSymbol ? getUnionType(map(type.types, mapper), 1 /* Literal */, aliasSymbol, aliasTypeArguments) : mapType(type, mapper); + return type.flags & 134217728 /* Union */ && aliasSymbol ? getUnionType(map(type.types, mapper), 1 /* Literal */, aliasSymbol, aliasTypeArguments) : mapType(type, mapper); } function extractTypesOfKind(type, kind) { return filterType(type, (t) => (t.flags & kind) !== 0); } function replacePrimitivesWithLiterals(typeWithPrimitives, typeWithLiterals) { - if (maybeTypeOfKind(typeWithPrimitives, 4 /* String */ | 134217728 /* TemplateLiteral */ | 8 /* Number */ | 64 /* BigInt */) && maybeTypeOfKind(typeWithLiterals, 128 /* StringLiteral */ | 134217728 /* TemplateLiteral */ | 268435456 /* StringMapping */ | 256 /* NumberLiteral */ | 2048 /* BigIntLiteral */)) { - return mapType(typeWithPrimitives, (t) => t.flags & 4 /* String */ ? extractTypesOfKind(typeWithLiterals, 4 /* String */ | 128 /* StringLiteral */ | 134217728 /* TemplateLiteral */ | 268435456 /* StringMapping */) : isPatternLiteralType(t) && !maybeTypeOfKind(typeWithLiterals, 4 /* String */ | 134217728 /* TemplateLiteral */ | 268435456 /* StringMapping */) ? extractTypesOfKind(typeWithLiterals, 128 /* StringLiteral */) : t.flags & 8 /* Number */ ? extractTypesOfKind(typeWithLiterals, 8 /* Number */ | 256 /* NumberLiteral */) : t.flags & 64 /* BigInt */ ? extractTypesOfKind(typeWithLiterals, 64 /* BigInt */ | 2048 /* BigIntLiteral */) : t); + if (maybeTypeOfKind(typeWithPrimitives, 32 /* String */ | 4194304 /* TemplateLiteral */ | 64 /* Number */ | 128 /* BigInt */) && maybeTypeOfKind(typeWithLiterals, 1024 /* StringLiteral */ | 4194304 /* TemplateLiteral */ | 8388608 /* StringMapping */ | 2048 /* NumberLiteral */ | 4096 /* BigIntLiteral */)) { + return mapType(typeWithPrimitives, (t) => t.flags & 32 /* String */ ? extractTypesOfKind(typeWithLiterals, 32 /* String */ | 1024 /* StringLiteral */ | 4194304 /* TemplateLiteral */ | 8388608 /* StringMapping */) : isPatternLiteralType(t) && !maybeTypeOfKind(typeWithLiterals, 32 /* String */ | 4194304 /* TemplateLiteral */ | 8388608 /* StringMapping */) ? extractTypesOfKind(typeWithLiterals, 1024 /* StringLiteral */) : t.flags & 64 /* Number */ ? extractTypesOfKind(typeWithLiterals, 64 /* Number */ | 2048 /* NumberLiteral */) : t.flags & 128 /* BigInt */ ? extractTypesOfKind(typeWithLiterals, 128 /* BigInt */ | 4096 /* BigIntLiteral */) : t); } return typeWithPrimitives; } @@ -74527,7 +74701,7 @@ function createTypeChecker(host) { return flowType.flags === 0 ? flowType.type : flowType; } function createFlowType(type, incomplete) { - return incomplete ? { flags: 0, type: type.flags & 131072 /* Never */ ? silentNeverType : type } : type; + return incomplete ? { flags: 0, type: type.flags & 262144 /* Never */ ? silentNeverType : type } : type; } function createEvolvingArrayType(elementType) { const result = createObjectType(256 /* EvolvingArray */); @@ -74542,8 +74716,8 @@ function createTypeChecker(host) { return isTypeSubsetOf(elementType, evolvingArrayType.elementType) ? evolvingArrayType : getEvolvingArrayType(getUnionType([evolvingArrayType.elementType, elementType])); } function createFinalArrayType(elementType) { - return elementType.flags & 131072 /* Never */ ? autoArrayType : createArrayType( - elementType.flags & 1048576 /* Union */ ? getUnionType(elementType.types, 2 /* Subtype */) : elementType + return elementType.flags & 262144 /* Never */ ? autoArrayType : createArrayType( + elementType.flags & 134217728 /* Union */ ? getUnionType(elementType.types, 2 /* Subtype */) : elementType ); } function getFinalArrayType(evolvingArrayType) { @@ -74558,7 +74732,7 @@ function createTypeChecker(host) { function isEvolvingArrayTypeList(types) { let hasEvolvingArrayType = false; for (const t of types) { - if (!(t.flags & 131072 /* Never */)) { + if (!(t.flags & 262144 /* Never */)) { if (!(getObjectFlags(t) & 256 /* EvolvingArray */)) { return false; } @@ -74571,7 +74745,7 @@ function createTypeChecker(host) { const root = getReferenceRoot(node); const parent2 = root.parent; const isLengthPushOrUnshift = isPropertyAccessExpression(parent2) && (parent2.name.escapedText === "length" || parent2.parent.kind === 214 /* CallExpression */ && isIdentifier(parent2.name) && isPushOrUnshiftIdentifier(parent2.name)); - const isElementAssignment = parent2.kind === 213 /* ElementAccessExpression */ && parent2.expression === root && parent2.parent.kind === 227 /* BinaryExpression */ && parent2.parent.operatorToken.kind === 64 /* EqualsToken */ && parent2.parent.left === parent2 && !isAssignmentTarget(parent2.parent) && isTypeAssignableToKind(getTypeOfExpression(parent2.argumentExpression), 296 /* NumberLike */); + const isElementAssignment = parent2.kind === 213 /* ElementAccessExpression */ && parent2.expression === root && parent2.parent.kind === 227 /* BinaryExpression */ && parent2.parent.operatorToken.kind === 64 /* EqualsToken */ && parent2.parent.left === parent2 && !isAssignmentTarget(parent2.parent) && isTypeAssignableToKind(getTypeOfExpression(parent2.argumentExpression), 67648 /* NumberLike */); return isLengthPushOrUnshift || isElementAssignment; } function isDeclarationWithExplicitTypeAnnotation(node) { @@ -74681,7 +74855,7 @@ function createTypeChecker(host) { return signature === unknownSignature ? void 0 : signature; } function hasTypePredicateOrNeverReturnType(signature) { - return !!(getTypePredicateOfSignature(signature) || signature.declaration && (getReturnTypeFromAnnotation(signature.declaration) || unknownType).flags & 131072 /* Never */); + return !!(getTypePredicateOfSignature(signature) || signature.declaration && (getReturnTypeFromAnnotation(signature.declaration) || unknownType).flags & 262144 /* Never */); } function getTypePredicateArgument(predicate, callExpression) { if (predicate.kind === 1 /* Identifier */ || predicate.kind === 3 /* AssertsIdentifier */) { @@ -74744,7 +74918,7 @@ function createTypeChecker(host) { return false; } } - if (getReturnTypeOfSignature(signature).flags & 131072 /* Never */) { + if (getReturnTypeOfSignature(signature).flags & 262144 /* Never */) { return false; } } @@ -74865,7 +75039,7 @@ function createTypeChecker(host) { const evolvedType = getTypeFromFlowType(getTypeAtFlowNode(flowNode)); sharedFlowCount = sharedFlowStart; const resultType = getObjectFlags(evolvedType) & 256 /* EvolvingArray */ && isEvolvingArrayOperationTarget(reference) ? autoArrayType : finalizeEvolvingArrayType(evolvedType); - if (resultType === unreachableNeverType || reference.parent && reference.parent.kind === 236 /* NonNullExpression */ && !(resultType.flags & 131072 /* Never */) && getTypeWithFacts(resultType, 2097152 /* NEUndefinedOrNull */).flags & 131072 /* Never */) { + if (resultType === unreachableNeverType || reference.parent && reference.parent.kind === 236 /* NonNullExpression */ && !(resultType.flags & 262144 /* Never */) && getTypeWithFacts(resultType, 2097152 /* NEUndefinedOrNull */).flags & 262144 /* Never */) { return declaredType; } return resultType; @@ -74976,7 +75150,7 @@ function createTypeChecker(host) { return isTypeAssignableTo(assignedType, declaredType) ? assignedType : anyArrayType; } const t = isInCompoundLikeAssignment(node) ? getBaseTypeOfLiteralType(declaredType) : declaredType; - if (t.flags & 1048576 /* Union */) { + if (t.flags & 134217728 /* Union */) { return getAssignmentReducedType(t, getInitialOrAssignedType(flow)); } return t; @@ -75038,7 +75212,7 @@ function createTypeChecker(host) { ) : predicate.kind === 3 /* AssertsIdentifier */ && predicate.parameterIndex >= 0 && predicate.parameterIndex < flow.node.arguments.length ? narrowTypeByAssertion(type, flow.node.arguments[predicate.parameterIndex]) : type; return narrowedType === type ? flowType : createFlowType(narrowedType, isIncomplete(flowType)); } - if (getReturnTypeOfSignature(signature).flags & 131072 /* Never */) { + if (getReturnTypeOfSignature(signature).flags & 262144 /* Never */) { return unreachableNeverType; } } @@ -75059,7 +75233,7 @@ function createTypeChecker(host) { } } else { const indexType = getContextFreeTypeOfExpression(node.left.argumentExpression); - if (isTypeAssignableToKind(indexType, 296 /* NumberLike */)) { + if (isTypeAssignableToKind(indexType, 67648 /* NumberLike */)) { evolvedType2 = addEvolvingArrayElementType(evolvedType2, node.right); } } @@ -75073,7 +75247,7 @@ function createTypeChecker(host) { function getTypeAtFlowCondition(flow) { const flowType = getTypeAtFlowNode(flow.antecedent); const type = getTypeFromFlowType(flowType); - if (type.flags & 131072 /* Never */) { + if (type.flags & 262144 /* Never */) { return flowType; } const assumeTrue = (flow.flags & 32 /* TrueCondition */) !== 0; @@ -75097,9 +75271,9 @@ function createTypeChecker(host) { } else { if (strictNullChecks) { if (optionalChainContainsReference(expr, reference)) { - type = narrowTypeBySwitchOptionalChainContainment(type, flow.node, (t) => !(t.flags & (32768 /* Undefined */ | 131072 /* Never */))); + type = narrowTypeBySwitchOptionalChainContainment(type, flow.node, (t) => !(t.flags & (4 /* Undefined */ | 262144 /* Never */))); } else if (expr.kind === 222 /* TypeOfExpression */ && optionalChainContainsReference(expr.expression, reference)) { - type = narrowTypeBySwitchOptionalChainContainment(type, flow.node, (t) => !(t.flags & 131072 /* Never */ || t.flags & 128 /* StringLiteral */ && t.value === "undefined")); + type = narrowTypeBySwitchOptionalChainContainment(type, flow.node, (t) => !(t.flags & 262144 /* Never */ || t.flags & 1024 /* StringLiteral */ && t.value === "undefined")); } } const access = getDiscriminantPropertyAccess(expr, type); @@ -75135,7 +75309,7 @@ function createTypeChecker(host) { if (bypassFlow) { const flowType = getTypeAtFlowNode(bypassFlow); const type = getTypeFromFlowType(flowType); - if (!(type.flags & 131072 /* Never */) && !contains(antecedentTypes, type) && !isExhaustiveSwitchStatement(bypassFlow.node.switchStatement)) { + if (!(type.flags & 262144 /* Never */) && !contains(antecedentTypes, type) && !isExhaustiveSwitchStatement(bypassFlow.node.switchStatement)) { if (type === declaredType && declaredType === initialType) { return type; } @@ -75217,7 +75391,7 @@ function createTypeChecker(host) { return getEvolvingArrayType(getUnionType(map(types, getElementTypeOfEvolvingArrayType))); } const result = recombineUnknownType(getUnionType(sameMap(types, finalizeEvolvingArrayType), subtypeReduction)); - if (result !== declaredType && result.flags & declaredType.flags & 1048576 /* Union */ && arrayIsEqualTo(result.types, declaredType.types)) { + if (result !== declaredType && result.flags & declaredType.flags & 134217728 /* Union */ && arrayIsEqualTo(result.types, declaredType.types)) { return declaredType; } return result; @@ -75239,26 +75413,30 @@ function createTypeChecker(host) { const symbol = getResolvedSymbol(expr); if (isConstantVariable(symbol)) { const declaration = symbol.valueDeclaration; - if (isVariableDeclaration(declaration) && !declaration.type && declaration.initializer && isAccessExpression(declaration.initializer) && isMatchingReference(reference, declaration.initializer.expression)) { - return declaration.initializer; + let initializer = getCandidateVariableDeclarationInitializer(declaration); + if (initializer && isAccessExpression(initializer) && isMatchingReference(reference, initializer.expression)) { + return initializer; } if (isBindingElement(declaration) && !declaration.initializer) { - const parent2 = declaration.parent.parent; - if (isVariableDeclaration(parent2) && !parent2.type && parent2.initializer && (isIdentifier(parent2.initializer) || isAccessExpression(parent2.initializer)) && isMatchingReference(reference, parent2.initializer)) { + initializer = getCandidateVariableDeclarationInitializer(declaration.parent.parent); + if (initializer && (isIdentifier(initializer) || isAccessExpression(initializer)) && isMatchingReference(reference, initializer)) { return declaration; } } } } return void 0; + function getCandidateVariableDeclarationInitializer(node) { + return isVariableDeclaration(node) && !node.type && node.initializer ? skipParentheses(node.initializer) : void 0; + } } function getDiscriminantPropertyAccess(expr, computedType) { - if (declaredType.flags & 1048576 /* Union */ || computedType.flags & 1048576 /* Union */) { + if (declaredType.flags & 134217728 /* Union */ || computedType.flags & 134217728 /* Union */) { const access = getCandidateDiscriminantPropertyAccess(expr); if (access) { const name = getAccessedPropertyName(access); if (name) { - const type = declaredType.flags & 1048576 /* Union */ && isTypeSubsetOf(computedType, declaredType) ? declaredType : computedType; + const type = declaredType.flags & 134217728 /* Union */ && isTypeSubsetOf(computedType, declaredType) ? declaredType : computedType; if (isDiscriminantProperty(type, name)) { return access; } @@ -75273,7 +75451,7 @@ function createTypeChecker(host) { return type; } const optionalChain = isOptionalChain(access); - const removeNullable = strictNullChecks && (optionalChain || isNonNullAccess(access)) && maybeTypeOfKind(type, 98304 /* Nullable */); + const removeNullable = strictNullChecks && (optionalChain || isNonNullAccess(access)) && maybeTypeOfKind(type, 12 /* Nullable */); let propType = getTypeOfPropertyOfType(removeNullable ? getTypeWithFacts(type, 2097152 /* NEUndefinedOrNull */) : type, propName); if (!propType) { return type; @@ -75282,11 +75460,11 @@ function createTypeChecker(host) { const narrowedPropType = narrowType2(propType); return filterType(type, (t) => { const discriminantType = getTypeOfPropertyOrIndexSignatureOfType(t, propName) || unknownType; - return !(discriminantType.flags & 131072 /* Never */) && !(narrowedPropType.flags & 131072 /* Never */) && areTypesComparable(narrowedPropType, discriminantType); + return !(discriminantType.flags & 262144 /* Never */) && !(narrowedPropType.flags & 262144 /* Never */) && areTypesComparable(narrowedPropType, discriminantType); }); } function narrowTypeByDiscriminantProperty(type, access, operator, value, assumeTrue) { - if ((operator === 37 /* EqualsEqualsEqualsToken */ || operator === 38 /* ExclamationEqualsEqualsToken */) && type.flags & 1048576 /* Union */) { + if ((operator === 37 /* EqualsEqualsEqualsToken */ || operator === 38 /* ExclamationEqualsEqualsToken */) && type.flags & 134217728 /* Union */) { const keyPropertyName = getKeyPropertyName(type); if (keyPropertyName && keyPropertyName === getAccessedPropertyName(access)) { const candidate = getConstituentTypeForKeyType(type, getTypeOfExpression(value)); @@ -75298,7 +75476,7 @@ function createTypeChecker(host) { return narrowTypeByDiscriminant(type, access, (t) => narrowTypeByEquality(t, operator, value, assumeTrue)); } function narrowTypeBySwitchOnDiscriminantProperty(type, access, data) { - if (data.clauseStart < data.clauseEnd && type.flags & 1048576 /* Union */ && getKeyPropertyName(type) === getAccessedPropertyName(access)) { + if (data.clauseStart < data.clauseEnd && type.flags & 134217728 /* Union */ && getKeyPropertyName(type) === getAccessedPropertyName(access)) { const clauseTypes = getSwitchClauseTypes(data.switchStatement).slice(data.clauseStart, data.clauseEnd); const candidate = getUnionType(map(clauseTypes, (t) => getConstituentTypeForKeyType(type, t) || unknownType)); if (candidate !== unknownType) { @@ -75495,7 +75673,7 @@ function createTypeChecker(host) { } function narrowTypeByOptionalChainContainment(type, operator, value, assumeTrue) { const equalsOperator = operator === 35 /* EqualsEqualsToken */ || operator === 37 /* EqualsEqualsEqualsToken */; - const nullableFlags = operator === 35 /* EqualsEqualsToken */ || operator === 36 /* ExclamationEqualsToken */ ? 98304 /* Nullable */ : 32768 /* Undefined */; + const nullableFlags = operator === 35 /* EqualsEqualsToken */ || operator === 36 /* ExclamationEqualsToken */ ? 12 /* Nullable */ : 4 /* Undefined */; const valueType = getTypeOfExpression(value); const removeNullable = equalsOperator !== assumeTrue && everyType(valueType, (t) => !!(t.flags & nullableFlags)) || equalsOperator === assumeTrue && everyType(valueType, (t) => !(t.flags & (3 /* AnyOrUnknown */ | nullableFlags))); return removeNullable ? getAdjustedTypeWithFacts(type, 2097152 /* NEUndefinedOrNull */) : type; @@ -75509,19 +75687,19 @@ function createTypeChecker(host) { } const valueType = getTypeOfExpression(value); const doubleEquals = operator === 35 /* EqualsEqualsToken */ || operator === 36 /* ExclamationEqualsToken */; - if (valueType.flags & 98304 /* Nullable */) { + if (valueType.flags & 12 /* Nullable */) { if (!strictNullChecks) { return type; } - const facts = doubleEquals ? assumeTrue ? 262144 /* EQUndefinedOrNull */ : 2097152 /* NEUndefinedOrNull */ : valueType.flags & 65536 /* Null */ ? assumeTrue ? 131072 /* EQNull */ : 1048576 /* NENull */ : assumeTrue ? 65536 /* EQUndefined */ : 524288 /* NEUndefined */; + const facts = doubleEquals ? assumeTrue ? 262144 /* EQUndefinedOrNull */ : 2097152 /* NEUndefinedOrNull */ : valueType.flags & 8 /* Null */ ? assumeTrue ? 131072 /* EQNull */ : 1048576 /* NENull */ : assumeTrue ? 65536 /* EQUndefined */ : 524288 /* NEUndefined */; return getAdjustedTypeWithFacts(type, facts); } if (assumeTrue) { if (!doubleEquals && (type.flags & 2 /* Unknown */ || someType(type, isEmptyAnonymousObjectType))) { - if (valueType.flags & (402784252 /* Primitive */ | 67108864 /* NonPrimitive */) || isEmptyAnonymousObjectType(valueType)) { + if (valueType.flags & (12713980 /* Primitive */ | 131072 /* NonPrimitive */) || isEmptyAnonymousObjectType(valueType)) { return valueType; } - if (valueType.flags & 524288 /* Object */) { + if (valueType.flags & 1048576 /* Object */) { return nonPrimitiveType; } } @@ -75568,11 +75746,11 @@ function createTypeChecker(host) { let groundClauseTypes; for (let i = 0; i < clauseTypes.length; i += 1) { const t = clauseTypes[i]; - if (t.flags & (402784252 /* Primitive */ | 67108864 /* NonPrimitive */)) { + if (t.flags & (12713980 /* Primitive */ | 131072 /* NonPrimitive */)) { if (groundClauseTypes !== void 0) { groundClauseTypes.push(t); } - } else if (t.flags & 524288 /* Object */) { + } else if (t.flags & 1048576 /* Object */) { if (groundClauseTypes === void 0) { groundClauseTypes = clauseTypes.slice(0, i); } @@ -75584,12 +75762,12 @@ function createTypeChecker(host) { return getUnionType(groundClauseTypes === void 0 ? clauseTypes : groundClauseTypes); } const discriminantType = getUnionType(clauseTypes); - const caseType = discriminantType.flags & 131072 /* Never */ ? neverType : replacePrimitivesWithLiterals(filterType(type, (t) => areTypesComparable(discriminantType, t)), discriminantType); + const caseType = discriminantType.flags & 262144 /* Never */ ? neverType : replacePrimitivesWithLiterals(filterType(type, (t) => areTypesComparable(discriminantType, t)), discriminantType); if (!hasDefaultClause) { return caseType; } - const defaultType = filterType(type, (t) => !(isUnitLikeType(t) && contains(switchTypes, t.flags & 32768 /* Undefined */ ? undefinedType : getRegularTypeOfLiteralType(extractUnitType(t))))); - return caseType.flags & 131072 /* Never */ ? defaultType : getUnionType([caseType, defaultType]); + const defaultType = filterType(type, (t) => !(isUnitLikeType(t) && contains(switchTypes, t.flags & 4 /* Undefined */ ? undefinedType : getRegularTypeOfLiteralType(extractUnitType(t)), (t1, t2) => isUnitType(t1) && areTypesComparable(t1, t2)))); + return caseType.flags & 262144 /* Never */ ? defaultType : getUnionType([caseType, defaultType]); } function narrowTypeByTypeName(type, typeName) { switch (typeName) { @@ -75705,7 +75883,7 @@ function createTypeChecker(host) { } return filterType(type, (t) => isConstructedBy(t, candidate)); function isConstructedBy(source, target) { - if (source.flags & 524288 /* Object */ && getObjectFlags(source) & 1 /* Class */ || target.flags & 524288 /* Object */ && getObjectFlags(target) & 1 /* Class */) { + if (source.flags & 1048576 /* Object */ && getObjectFlags(source) & 1 /* Class */ || target.flags & 1048576 /* Object */ && getObjectFlags(target) & 1 /* Class */) { return source.symbol === target.symbol; } return isTypeSubtypeOf(source, target); @@ -75739,7 +75917,7 @@ function createTypeChecker(host) { return type; } const instanceType = mapType(rightType, getInstanceType); - if (isTypeAny(type) && (instanceType === globalObjectType || instanceType === globalFunctionType) || !assumeTrue && !(instanceType.flags & 524288 /* Object */ && !isEmptyAnonymousObjectType(instanceType))) { + if (isTypeAny(type) && (instanceType === globalObjectType || instanceType === globalFunctionType) || !assumeTrue && !(instanceType.flags & 1048576 /* Object */ && !isEmptyAnonymousObjectType(instanceType))) { return type; } return getNarrowedType( @@ -75762,7 +75940,7 @@ function createTypeChecker(host) { return emptyObjectType; } function getNarrowedType(type, candidate, assumeTrue, checkDerived) { - const key2 = type.flags & 1048576 /* Union */ ? `N${getTypeId(type)},${getTypeId(candidate)},${(assumeTrue ? 1 : 0) | (checkDerived ? 2 : 0)}` : void 0; + const key2 = type.flags & 134217728 /* Union */ ? `N${getTypeId(type)},${getTypeId(candidate)},${(assumeTrue ? 1 : 0) | (checkDerived ? 2 : 0)}` : void 0; return getCachedType(key2) ?? setCachedType(key2, getNarrowedTypeWorker(type, candidate, assumeTrue, checkDerived)); } function getNarrowedTypeWorker(type, candidate, assumeTrue, checkDerived) { @@ -75791,7 +75969,7 @@ function createTypeChecker(host) { return candidate; } const isRelated = checkDerived ? isTypeDerivedFrom : isTypeSubtypeOf; - const keyPropertyName = type.flags & 1048576 /* Union */ ? getKeyPropertyName(type) : void 0; + const keyPropertyName = type.flags & 134217728 /* Union */ ? getKeyPropertyName(type) : void 0; const narrowedType = mapType(candidate, (c) => { const discriminant = keyPropertyName && getTypeOfPropertyOfType(c, keyPropertyName); const matching = discriminant && getConstituentTypeForKeyType(type, discriminant); @@ -75799,9 +75977,9 @@ function createTypeChecker(host) { matching || type, checkDerived ? (t) => isTypeDerivedFrom(t, c) ? t : isTypeDerivedFrom(c, t) ? c : neverType : (t) => isTypeStrictSubtypeOf(t, c) ? t : isTypeStrictSubtypeOf(c, t) ? c : isTypeSubtypeOf(t, c) ? t : isTypeSubtypeOf(c, t) ? c : neverType ); - return directlyRelated.flags & 131072 /* Never */ ? mapType(type, (t) => maybeTypeOfKind(t, 465829888 /* Instantiable */) && isRelated(c, getBaseConstraintOfType(t) || unknownType) ? getIntersectionType([t, c]) : neverType) : directlyRelated; + return directlyRelated.flags & 262144 /* Never */ ? mapType(type, (t) => maybeTypeOfKind(t, 132644864 /* Instantiable */) && isRelated(c, getBaseConstraintOfType(t) || unknownType) ? getIntersectionType([t, c]) : neverType) : directlyRelated; }); - return !(narrowedType.flags & 131072 /* Never */) ? narrowedType : isTypeSubtypeOf(candidate, type) ? candidate : isTypeAssignableTo(type, candidate) ? type : isTypeAssignableTo(candidate, type) ? candidate : getIntersectionType([type, candidate]); + return !(narrowedType.flags & 262144 /* Never */) ? narrowedType : isTypeSubtypeOf(candidate, type) ? candidate : isTypeAssignableTo(type, candidate) ? type : isTypeAssignableTo(candidate, type) ? candidate : getIntersectionType([type, candidate]); } function narrowTypeByCallExpression(type, callExpression, assumeTrue) { if (hasMatchingArgument(callExpression, reference)) { @@ -76079,10 +76257,10 @@ function createTypeChecker(host) { return parent2.kind === 212 /* PropertyAccessExpression */ || parent2.kind === 167 /* QualifiedName */ || parent2.kind === 214 /* CallExpression */ && parent2.expression === node || parent2.kind === 215 /* NewExpression */ && parent2.expression === node || parent2.kind === 213 /* ElementAccessExpression */ && parent2.expression === node && !(someType(type, isGenericTypeWithoutNullableConstraint) && isGenericIndexType(getTypeOfExpression(parent2.argumentExpression))); } function isGenericTypeWithUnionConstraint(type) { - return type.flags & 2097152 /* Intersection */ ? some(type.types, isGenericTypeWithUnionConstraint) : !!(type.flags & 465829888 /* Instantiable */ && getBaseConstraintOrType(type).flags & (98304 /* Nullable */ | 1048576 /* Union */)); + return type.flags & 268435456 /* Intersection */ ? some(type.types, isGenericTypeWithUnionConstraint) : !!(type.flags & 132644864 /* Instantiable */ && getBaseConstraintOrType(type).flags & (12 /* Nullable */ | 134217728 /* Union */)); } function isGenericTypeWithoutNullableConstraint(type) { - return type.flags & 2097152 /* Intersection */ ? some(type.types, isGenericTypeWithoutNullableConstraint) : !!(type.flags & 465829888 /* Instantiable */ && !maybeTypeOfKind(getBaseConstraintOrType(type), 98304 /* Nullable */)); + return type.flags & 268435456 /* Intersection */ ? some(type.types, isGenericTypeWithoutNullableConstraint) : !!(type.flags & 132644864 /* Instantiable */ && !maybeTypeOfKind(getBaseConstraintOrType(type), 12 /* Nullable */)); } function hasContextualTypeWithNoGenericTypes(node, checkMode) { const contextualType = (isIdentifier(node) || isPropertyAccessExpression(node) || isElementAccessExpression(node)) && !((isJsxOpeningElement(node.parent) || isJsxSelfClosingElement(node.parent)) && node.parent.tagName === node) && (checkMode && checkMode & 32 /* RestBindingElement */ ? getContextualType2(node, 8 /* SkipBindingPatterns */) : getContextualType2( @@ -76468,7 +76646,7 @@ function createTypeChecker(host) { const parentType = getTypeForBindingElementParent(parent2, 0 /* Normal */); const parentTypeConstraint = parentType && mapType(parentType, getBaseConstraintOrType); links.flags &= ~4194304 /* InCheckIdentifier */; - if (parentTypeConstraint && parentTypeConstraint.flags & 1048576 /* Union */ && !(rootDeclaration.kind === 170 /* Parameter */ && isSomeSymbolAssigned(rootDeclaration))) { + if (parentTypeConstraint && parentTypeConstraint.flags & 134217728 /* Union */ && !(rootDeclaration.kind === 170 /* Parameter */ && isSomeSymbolAssigned(rootDeclaration))) { const pattern = declaration.parent; const narrowedType = getFlowTypeOfReference( pattern, @@ -76478,7 +76656,7 @@ function createTypeChecker(host) { void 0, location.flowNode ); - if (narrowedType.flags & 131072 /* Never */) { + if (narrowedType.flags & 262144 /* Never */) { return neverType; } return getBindingElementTypeFromParentType( @@ -76497,7 +76675,7 @@ function createTypeChecker(host) { const contextualSignature = getContextualSignature(func); if (contextualSignature && contextualSignature.parameters.length === 1 && signatureHasRestParameter(contextualSignature)) { const restType = getReducedApparentType(instantiateType(getTypeOfSymbol(contextualSignature.parameters[0]), (_a = getInferenceContext(func)) == null ? void 0 : _a.nonFixingMapper)); - if (restType.flags & 1048576 /* Union */ && everyType(restType, isTupleType) && !some(func.parameters, isSomeSymbolAssigned)) { + if (restType.flags & 134217728 /* Union */ && everyType(restType, isTupleType) && !some(func.parameters, isSomeSymbolAssigned)) { const narrowedType = getFlowTypeOfReference( func, restType, @@ -76588,7 +76766,11 @@ function createTypeChecker(host) { } checkIdentifierCalculateNodeCheckFlags(node, symbol); if (symbol === argumentsSymbol) { - if (isInPropertyInitializerOrClassStaticBlock(node)) { + if (isInPropertyInitializerOrClassStaticBlock( + node, + /*ignoreArrowFunctions*/ + true + )) { return errorType; } return getTypeOfSymbol(symbol); @@ -76644,8 +76826,8 @@ function createTypeChecker(host) { while (flowContainer !== declarationContainer && (flowContainer.kind === 219 /* FunctionExpression */ || flowContainer.kind === 220 /* ArrowFunction */ || isObjectLiteralOrClassExpressionMethodOrAccessor(flowContainer)) && (isConstantVariable(localOrExportSymbol) && type !== autoArrayType || isParameterOrMutableLocalVariable(localOrExportSymbol) && isPastLastAssignment(localOrExportSymbol, node))) { flowContainer = getControlFlowContainer(flowContainer); } - const isNeverInitialized = immediateDeclaration && isVariableDeclaration(immediateDeclaration) && !immediateDeclaration.initializer && !immediateDeclaration.exclamationToken && isMutableLocalVariableDeclaration(immediateDeclaration) && !isSymbolAssignedDefinitely(symbol); - const assumeInitialized = isParameter2 || isAlias || isOuterVariable && !isNeverInitialized || isSpreadDestructuringAssignmentTarget || isModuleExports || isSameScopedBindingElement(node, declaration) || type !== autoType && type !== autoArrayType && (!strictNullChecks || (type.flags & (3 /* AnyOrUnknown */ | 16384 /* Void */)) !== 0 || isInTypeQuery(node) || isInAmbientOrTypeNode(node) || node.parent.kind === 282 /* ExportSpecifier */) || node.parent.kind === 236 /* NonNullExpression */ || declaration.kind === 261 /* VariableDeclaration */ && declaration.exclamationToken || declaration.flags & 33554432 /* Ambient */; + const isNeverInitialized = immediateDeclaration && isVariableDeclaration(immediateDeclaration) && !isForInOrOfStatement(immediateDeclaration.parent.parent) && !immediateDeclaration.initializer && !immediateDeclaration.exclamationToken && isMutableLocalVariableDeclaration(immediateDeclaration) && !isSymbolAssignedDefinitely(symbol); + const assumeInitialized = isParameter2 || isAlias || isOuterVariable && !isNeverInitialized || isSpreadDestructuringAssignmentTarget || isModuleExports || isSameScopedBindingElement(node, declaration) || type !== autoType && type !== autoArrayType && (!strictNullChecks || (type.flags & (3 /* AnyOrUnknown */ | 16 /* Void */)) !== 0 || isInTypeQuery(node) || isInAmbientOrTypeNode(node) || node.parent.kind === 282 /* ExportSpecifier */) || node.parent.kind === 236 /* NonNullExpression */ || declaration.kind === 261 /* VariableDeclaration */ && declaration.exclamationToken || declaration.flags & 33554432 /* Ambient */; const initialType = isAutomaticTypeInNonNull ? undefinedType : assumeInitialized ? isParameter2 ? removeOptionalityFromDeclaredType(type, declaration) : type : typeIsAutomatic ? undefinedType : getOptionalType(type); const flowType = isAutomaticTypeInNonNull ? getNonNullableType(getFlowTypeOfReference(node, type, initialType, flowContainer)) : getFlowTypeOfReference(node, type, initialType, flowContainer); if (!isEvolvingArrayOperationTarget(node) && (type === autoType || type === autoArrayType)) { @@ -77068,7 +77250,7 @@ function createTypeChecker(host) { } function getThisTypeFromContextualType(type) { return mapType(type, (t) => { - return t.flags & 2097152 /* Intersection */ ? forEach(t.types, getThisTypeArgument) : getThisTypeArgument(t); + return t.flags & 268435456 /* Intersection */ ? forEach(t.types, getThisTypeArgument) : getThisTypeArgument(t); }); } function getThisTypeOfObjectLiteralFromContextualType(containingLiteral, contextualType) { @@ -77232,7 +77414,7 @@ function createTypeChecker(host) { const functionFlags = getFunctionFlags(func); if (functionFlags & 1 /* Generator */) { const isAsyncGenerator = (functionFlags & 2 /* Async */) !== 0; - if (contextualReturnType.flags & 1048576 /* Union */) { + if (contextualReturnType.flags & 134217728 /* Union */) { contextualReturnType = filterType(contextualReturnType, (type) => !!getIterationTypeOfGeneratorFunctionReturnType(1 /* Return */, type, isAsyncGenerator)); } const iterationReturnType = getIterationTypeOfGeneratorFunctionReturnType(1 /* Return */, contextualReturnType, (functionFlags & 2 /* Async */) !== 0); @@ -77265,7 +77447,7 @@ function createTypeChecker(host) { let contextualReturnType = getContextualReturnType(func, contextFlags); if (contextualReturnType) { const isAsyncGenerator = (functionFlags & 2 /* Async */) !== 0; - if (!node.asteriskToken && contextualReturnType.flags & 1048576 /* Union */) { + if (!node.asteriskToken && contextualReturnType.flags & 134217728 /* Union */) { contextualReturnType = filterType(contextualReturnType, (type) => !!getIterationTypeOfGeneratorFunctionReturnType(1 /* Return */, type, isAsyncGenerator)); } if (node.asteriskToken) { @@ -77333,7 +77515,7 @@ function createTypeChecker(host) { const functionFlags = getFunctionFlags(functionDecl); if (functionFlags & 1 /* Generator */) { return filterType(returnType2, (t) => { - return !!(t.flags & (3 /* AnyOrUnknown */ | 16384 /* Void */ | 58982400 /* InstantiableNonPrimitive */)) || checkGeneratorInstantiationAssignabilityToReturnType( + return !!(t.flags & (3 /* AnyOrUnknown */ | 16 /* Void */ | 117964800 /* InstantiableNonPrimitive */)) || checkGeneratorInstantiationAssignabilityToReturnType( t, functionFlags, /*errorNode*/ @@ -77343,7 +77525,7 @@ function createTypeChecker(host) { } if (functionFlags & 2 /* Async */) { return filterType(returnType2, (t) => { - return !!(t.flags & (3 /* AnyOrUnknown */ | 16384 /* Void */ | 58982400 /* InstantiableNonPrimitive */)) || !!getAwaitedTypeOfPromise(t); + return !!(t.flags & (3 /* AnyOrUnknown */ | 16 /* Void */ | 117964800 /* InstantiableNonPrimitive */)) || !!getAwaitedTypeOfPromise(t); }); } return returnType2; @@ -77551,11 +77733,11 @@ function createTypeChecker(host) { return !!(getCheckFlags(symbol) & 262144 /* Mapped */ && !symbol.links.type && findResolutionCycleStartIndex(symbol, 0 /* Type */) >= 0); } function isExcludedMappedPropertyName(constraint, propertyNameType) { - if (constraint.flags & 16777216 /* Conditional */) { + if (constraint.flags & 67108864 /* Conditional */) { const type = constraint; - return !!(getReducedType(getTrueTypeFromConditionalType(type)).flags & 131072 /* Never */) && getActualTypeVariable(getFalseTypeFromConditionalType(type)) === getActualTypeVariable(type.checkType) && isTypeAssignableTo(propertyNameType, type.extendsType); + return !!(getReducedType(getTrueTypeFromConditionalType(type)).flags & 262144 /* Never */) && getActualTypeVariable(getFalseTypeFromConditionalType(type)) === getActualTypeVariable(type.checkType) && isTypeAssignableTo(propertyNameType, type.extendsType); } - if (constraint.flags & 2097152 /* Intersection */) { + if (constraint.flags & 268435456 /* Intersection */) { return some(constraint.types, (t) => isExcludedMappedPropertyName(t, propertyNameType)); } return false; @@ -77564,12 +77746,12 @@ function createTypeChecker(host) { return mapType( type, (t) => { - if (t.flags & 2097152 /* Intersection */) { + if (t.flags & 268435456 /* Intersection */) { let types; let indexInfoCandidates; let ignoreIndexInfos = false; for (const constituentType of t.types) { - if (!(constituentType.flags & 524288 /* Object */)) { + if (!(constituentType.flags & 1048576 /* Object */)) { continue; } if (isGenericMappedType(constituentType) && getMappedTypeNameTypeKind(constituentType) !== 2 /* Remapping */) { @@ -77602,7 +77784,7 @@ function createTypeChecker(host) { } return getIntersectionType(types); } - if (!(t.flags & 524288 /* Object */)) { + if (!(t.flags & 1048576 /* Object */)) { return; } return isGenericMappedType(t) && getMappedTypeNameTypeKind(t) !== 2 /* Remapping */ ? getIndexedMappedTypeSubstitutedTypeOfContextualType(t, name, nameType) : getTypeOfConcretePropertyOfContextualType(t, name) ?? getTypeFromIndexInfosOfContextualType(t, name, nameType); @@ -77851,7 +78033,7 @@ function createTypeChecker(host) { concatenate( map( filter(node.properties, (p) => !!p.symbol && p.kind === 292 /* JsxAttribute */ && isDiscriminantProperty(contextualType, p.symbol.escapedName) && (!p.initializer || isPossiblyDiscriminantValue(p.initializer))), - (prop) => [!prop.initializer ? () => trueType : () => getContextFreeTypeOfExpression(prop.initializer), prop.symbol.escapedName] + (prop) => [!prop.initializer ? (() => trueType) : (() => getContextFreeTypeOfExpression(prop.initializer)), prop.symbol.escapedName] ), map( filter(getPropertiesOfType(contextualType), (s) => { @@ -77875,7 +78057,7 @@ function createTypeChecker(host) { function getApparentTypeOfContextualType(node, contextFlags) { const contextualType = isObjectLiteralMethod(node) ? getContextualTypeForObjectLiteralMethod(node, contextFlags) : getContextualType2(node, contextFlags); const instantiatedType = instantiateContextualType(contextualType, node, contextFlags); - if (instantiatedType && !(contextFlags && contextFlags & 2 /* NoConstraints */ && instantiatedType.flags & 8650752 /* TypeVariable */)) { + if (instantiatedType && !(contextFlags && contextFlags & 2 /* NoConstraints */ && instantiatedType.flags & 34078720 /* TypeVariable */)) { const apparentType = mapType( instantiatedType, // When obtaining apparent type of *contextual* type we don't want to get apparent type of mapped types. @@ -77886,30 +78068,35 @@ function createTypeChecker(host) { /*noReductions*/ true ); - return apparentType.flags & 1048576 /* Union */ && isObjectLiteralExpression(node) ? discriminateContextualTypeByObjectMembers(node, apparentType) : apparentType.flags & 1048576 /* Union */ && isJsxAttributes(node) ? discriminateContextualTypeByJSXAttributes(node, apparentType) : apparentType; + return apparentType.flags & 134217728 /* Union */ && isObjectLiteralExpression(node) ? discriminateContextualTypeByObjectMembers(node, apparentType) : apparentType.flags & 134217728 /* Union */ && isJsxAttributes(node) ? discriminateContextualTypeByJSXAttributes(node, apparentType) : apparentType; } } function instantiateContextualType(contextualType, node, contextFlags) { - if (contextualType && maybeTypeOfKind(contextualType, 465829888 /* Instantiable */)) { + if (contextualType && maybeTypeOfKind(contextualType, 132644864 /* Instantiable */)) { const inferenceContext = getInferenceContext(node); if (inferenceContext && contextFlags & 1 /* Signature */ && some(inferenceContext.inferences, hasInferenceCandidatesOrDefault)) { - return instantiateInstantiableTypes(contextualType, inferenceContext.nonFixingMapper); + const type = instantiateInstantiableTypes(contextualType, inferenceContext.nonFixingMapper); + if (!(type.flags & 3 /* AnyOrUnknown */)) { + return type; + } } if (inferenceContext == null ? void 0 : inferenceContext.returnMapper) { const type = instantiateInstantiableTypes(contextualType, inferenceContext.returnMapper); - return type.flags & 1048576 /* Union */ && containsType(type.types, regularFalseType) && containsType(type.types, regularTrueType) ? filterType(type, (t) => t !== regularFalseType && t !== regularTrueType) : type; + if (!(type.flags & 3 /* AnyOrUnknown */)) { + return type.flags & 134217728 /* Union */ && containsType(type.types, regularFalseType) && containsType(type.types, regularTrueType) ? filterType(type, (t) => t !== regularFalseType && t !== regularTrueType) : type; + } } } return contextualType; } function instantiateInstantiableTypes(type, mapper) { - if (type.flags & 465829888 /* Instantiable */) { + if (type.flags & 132644864 /* Instantiable */) { return instantiateType(type, mapper); } - if (type.flags & 1048576 /* Union */) { + if (type.flags & 134217728 /* Union */) { return getUnionType(map(type.types, (t) => instantiateInstantiableTypes(t, mapper)), 0 /* None */); } - if (type.flags & 2097152 /* Intersection */) { + if (type.flags & 268435456 /* Intersection */) { return getIntersectionType(map(type.types, (t) => instantiateInstantiableTypes(t, mapper))); } return type; @@ -78079,7 +78266,7 @@ function createTypeChecker(host) { ), getNameFromImportAttribute(node)); } function getContextualJsxElementAttributesType(node, contextFlags) { - if (isJsxOpeningElement(node) && contextFlags !== 4 /* Completions */) { + if (isJsxOpeningElement(node) && contextFlags !== 4 /* IgnoreNodeInferences */) { const index = findContextualNode( node.parent, /*includeCaches*/ @@ -78130,7 +78317,7 @@ function createTypeChecker(host) { return getOrCreateTypeFromSignature(fakeSignature); } const tagType = checkExpressionCached(context.tagName); - if (tagType.flags & 128 /* StringLiteral */) { + if (tagType.flags & 1024 /* StringLiteral */) { const result = getIntrinsicAttributesTypeFromStringLiteralType(tagType, context); if (!result) { return errorType; @@ -78266,10 +78453,10 @@ function createTypeChecker(host) { minArgCount, flags ); - result.compositeKind = 2097152 /* Intersection */; - result.compositeSignatures = concatenate(left.compositeKind === 2097152 /* Intersection */ && left.compositeSignatures || [left], [right]); + result.compositeKind = 268435456 /* Intersection */; + result.compositeSignatures = concatenate(left.compositeKind === 268435456 /* Intersection */ && left.compositeSignatures || [left], [right]); if (paramMapper) { - result.mapper = left.compositeKind === 2097152 /* Intersection */ && left.mapper && left.compositeSignatures ? combineTypeMappers(left.mapper, paramMapper) : paramMapper; + result.mapper = left.compositeKind === 268435456 /* Intersection */ && left.mapper && left.compositeSignatures ? combineTypeMappers(left.mapper, paramMapper) : paramMapper; } return result; } @@ -78304,7 +78491,7 @@ function createTypeChecker(host) { if (!type) { return void 0; } - if (!(type.flags & 1048576 /* Union */)) { + if (!(type.flags & 134217728 /* Union */)) { return getContextualCallSignature(type, node); } let signatureList; @@ -78502,7 +78689,7 @@ function createTypeChecker(host) { } } function isNumericComputedName(name) { - return isTypeAssignableToKind(checkComputedPropertyName(name), 296 /* NumberLike */); + return isTypeAssignableToKind(checkComputedPropertyName(name), 67648 /* NumberLike */); } function checkComputedPropertyName(node) { const links = getNodeLinks(node.expression); @@ -78520,7 +78707,7 @@ function createTypeChecker(host) { getNodeLinks(node.parent.parent).flags |= 32768 /* BlockScopedBindingInLoop */; } } - if (links.resolvedType.flags & 98304 /* Nullable */ || !isTypeAssignableToKind(links.resolvedType, 402653316 /* StringLike */ | 296 /* NumberLike */ | 12288 /* ESSymbolLike */) && !isTypeAssignableTo(links.resolvedType, stringNumberSymbolType)) { + if (links.resolvedType.flags & 12 /* Nullable */ || !isTypeAssignableToKind(links.resolvedType, 12583968 /* StringLike */ | 67648 /* NumberLike */ | 16896 /* ESSymbolLike */) && !isTypeAssignableTo(links.resolvedType, stringNumberSymbolType)) { error2(node, Diagnostics.A_computed_property_name_must_be_of_type_string_number_symbol_or_any); } } @@ -78534,7 +78721,7 @@ function createTypeChecker(host) { function isSymbolWithSymbolName(symbol) { var _a; const firstDecl = (_a = symbol.declarations) == null ? void 0 : _a[0]; - return isKnownSymbol(symbol) || firstDecl && isNamedDeclaration(firstDecl) && isComputedPropertyName(firstDecl.name) && isTypeAssignableToKind(checkComputedPropertyName(firstDecl.name), 4096 /* ESSymbol */); + return isKnownSymbol(symbol) || firstDecl && isNamedDeclaration(firstDecl) && isComputedPropertyName(firstDecl.name) && isTypeAssignableToKind(checkComputedPropertyName(firstDecl.name), 512 /* ESSymbol */); } function isSymbolWithComputedName(symbol) { var _a; @@ -78690,7 +78877,7 @@ function createTypeChecker(host) { Debug.assert(memberDecl.kind === 178 /* GetAccessor */ || memberDecl.kind === 179 /* SetAccessor */); checkNodeDeferred(memberDecl); } - if (computedNameType && !(computedNameType.flags & 8576 /* StringOrNumberLiteralOrUnique */)) { + if (computedNameType && !(computedNameType.flags & 19456 /* StringOrNumberLiteralOrUnique */)) { if (isTypeAssignableTo(computedNameType, stringNumberSymbolType)) { if (isTypeAssignableTo(computedNameType, numberType)) { hasComputedNumberProperty = true; @@ -78745,7 +78932,7 @@ function createTypeChecker(host) { } function isValidSpreadType(type) { const t = removeDefinitelyFalsyTypes(mapType(type, getBaseConstraintOrType)); - return !!(t.flags & (1 /* Any */ | 67108864 /* NonPrimitive */ | 524288 /* Object */ | 58982400 /* InstantiableNonPrimitive */) || t.flags & 3145728 /* UnionOrIntersection */ && every(t.types, isValidSpreadType)); + return !!(t.flags & (1 /* Any */ | 131072 /* NonPrimitive */ | 1048576 /* Object */ | 117964800 /* InstantiableNonPrimitive */) || t.flags & 402653184 /* UnionOrIntersection */ && every(t.types, isValidSpreadType)); } function checkJsxSelfClosingElementDeferred(node) { checkJsxOpeningLikeElementOrOpeningFragment(node); @@ -78916,7 +79103,7 @@ function createTypeChecker(host) { spread, createAnonymousType(attributesSymbol, childPropMap, emptyArray, emptyArray, emptyArray), attributesSymbol, - objectFlags, + objectFlags | getPropagatingFlagsOfTypes(childrenTypes), /*readonly*/ false ); @@ -78956,7 +79143,7 @@ function createTypeChecker(host) { } function checkSpreadPropOverrides(type, props, spread) { for (const right of getPropertiesOfType(type)) { - if (!(right.flags & 16777216 /* Optional */)) { + if (!(right.flags & 16777216 /* Optional */) && !(getCheckFlags(right) & 48 /* Partial */)) { const left = props.get(right.escapedName); if (left) { const diagnostic = error2(left.valueDeclaration, Diagnostics._0_is_specified_more_than_once_so_this_usage_will_be_overwritten, unescapeLeadingUnderscores(left.escapedName)); @@ -79103,9 +79290,9 @@ function createTypeChecker(host) { return getNameFromJsxElementAttributesContainer(JsxNames.ElementChildrenAttributeNameContainer, jsxNamespace); } function getUninstantiatedJsxSignaturesOfType(elementType, caller) { - if (elementType.flags & 4 /* String */) { + if (elementType.flags & 32 /* String */) { return [anySignature]; - } else if (elementType.flags & 128 /* StringLiteral */) { + } else if (elementType.flags & 1024 /* StringLiteral */) { const intrinsicType = getIntrinsicAttributesTypeFromStringLiteralType(elementType, caller); if (!intrinsicType) { error2(caller, Diagnostics.Property_0_does_not_exist_on_type_1, elementType.value, "JSX." + JsxNames.IntrinsicElements); @@ -79120,7 +79307,7 @@ function createTypeChecker(host) { if (signatures.length === 0) { signatures = getSignaturesOfType(apparentElemType, 0 /* Call */); } - if (signatures.length === 0 && apparentElemType.flags & 1048576 /* Union */) { + if (signatures.length === 0 && apparentElemType.flags & 134217728 /* Union */) { signatures = getUnionSignatures(map(apparentElemType.types, (t) => getUninstantiatedJsxSignaturesOfType(t, caller))); } return signatures; @@ -79270,15 +79457,15 @@ function createTypeChecker(host) { } } function isKnownProperty(targetType, name, isComparingJsxAttributes) { - if (targetType.flags & 524288 /* Object */) { + if (targetType.flags & 1048576 /* Object */) { if (getPropertyOfObjectType(targetType, name) || getApplicableIndexInfoForName(targetType, name) || isLateBoundName(name) && getIndexInfoOfType(targetType, stringType) || isComparingJsxAttributes && isHyphenatedJsxName(name)) { return true; } } - if (targetType.flags & 33554432 /* Substitution */) { + if (targetType.flags & 16777216 /* Substitution */) { return isKnownProperty(targetType.baseType, name, isComparingJsxAttributes); } - if (targetType.flags & 3145728 /* UnionOrIntersection */ && isExcessPropertyCheckTarget(targetType)) { + if (targetType.flags & 402653184 /* UnionOrIntersection */ && isExcessPropertyCheckTarget(targetType)) { for (const t of targetType.types) { if (isKnownProperty(t, name, isComparingJsxAttributes)) { return true; @@ -79288,7 +79475,7 @@ function createTypeChecker(host) { return false; } function isExcessPropertyCheckTarget(type) { - return !!(type.flags & 524288 /* Object */ && !(getObjectFlags(type) & 512 /* ObjectLiteralPatternWithComputedProperties */) || type.flags & 67108864 /* NonPrimitive */ || type.flags & 33554432 /* Substitution */ && isExcessPropertyCheckTarget(type.baseType) || type.flags & 1048576 /* Union */ && some(type.types, isExcessPropertyCheckTarget) || type.flags & 2097152 /* Intersection */ && every(type.types, isExcessPropertyCheckTarget)); + return !!(type.flags & 1048576 /* Object */ && !(getObjectFlags(type) & 512 /* ObjectLiteralPatternWithComputedProperties */) || type.flags & 131072 /* NonPrimitive */ || type.flags & 16777216 /* Substitution */ && isExcessPropertyCheckTarget(type.baseType) || type.flags & 134217728 /* Union */ && some(type.types, isExcessPropertyCheckTarget) || type.flags & 268435456 /* Intersection */ && every(type.types, isExcessPropertyCheckTarget)); } function checkJsxExpression(node, checkMode) { checkGrammarJsxExpression(node); @@ -79344,10 +79531,10 @@ function createTypeChecker(host) { } } if (flags & 64 /* Abstract */ && symbolHasNonMethodDeclaration(prop) && (isThisProperty(location) || isThisInitializedObjectBindingExpression(location) || isObjectBindingPattern(location.parent) && isThisInitializedDeclaration(location.parent.parent))) { - const declaringClassDeclaration = getClassLikeDeclarationOfSymbol(getParentOfSymbol(prop)); - if (declaringClassDeclaration && isNodeUsedDuringClassInitialization(location)) { + const parentSymbol = getParentOfSymbol(prop); + if (parentSymbol && parentSymbol.flags & 32 /* Class */ && isNodeUsedDuringClassInitialization(location)) { if (errorNode) { - error2(errorNode, Diagnostics.Abstract_property_0_in_class_1_cannot_be_accessed_in_the_constructor, symbolToString(prop), getTextOfIdentifierOrLiteral(declaringClassDeclaration.name)); + error2(errorNode, Diagnostics.Abstract_property_0_in_class_1_cannot_be_accessed_in_the_constructor, symbolToString(prop), symbolToString(parentSymbol)); } return false; } @@ -79385,7 +79572,7 @@ function createTypeChecker(host) { if (flags & 256 /* Static */) { return true; } - if (containingType.flags & 262144 /* TypeParameter */) { + if (containingType.flags & 524288 /* TypeParameter */) { containingType = containingType.isThisType ? getConstraintOfTypeParameter(containingType) : getBaseConstraintOfType(containingType); } if (!containingType || !hasBaseType(containingType, enclosingClass)) { @@ -79400,7 +79587,7 @@ function createTypeChecker(host) { const thisParameter = getThisParameterFromNodeContext(node); let thisType = (thisParameter == null ? void 0 : thisParameter.type) && getTypeFromTypeNode(thisParameter.type); if (thisType) { - if (thisType.flags & 262144 /* TypeParameter */) { + if (thisType.flags & 524288 /* TypeParameter */) { thisType = getConstraintOfTypeParameter(thisType); } } else { @@ -79487,7 +79674,7 @@ function createTypeChecker(host) { if (facts & 50331648 /* IsUndefinedOrNull */) { reportError(node, facts); const t = getNonNullableType(type); - return t.flags & (98304 /* Nullable */ | 131072 /* Never */) ? errorType : t; + return t.flags & (12 /* Nullable */ | 262144 /* Never */) ? errorType : t; } return type; } @@ -79496,7 +79683,7 @@ function createTypeChecker(host) { } function checkNonNullNonVoidType(type, node) { const nonNullType = checkNonNullType(type, node); - if (nonNullType.flags & 16384 /* Void */) { + if (nonNullType.flags & 16 /* Void */) { if (isEntityNameExpression(node)) { const nodeText2 = entityNameToString(node); if (isIdentifier(node) && nodeText2 === "undefined") { @@ -79787,7 +79974,7 @@ function createTypeChecker(host) { if (assignmentKind === 1 /* Definite */) { return removeMissingType(propType, !!(prop && prop.flags & 16777216 /* Optional */)); } - if (prop && !(prop.flags & (3 /* Variable */ | 4 /* Property */ | 98304 /* Accessor */)) && !(prop.flags & 8192 /* Method */ && propType.flags & 1048576 /* Union */) && !isDuplicatedCommonJSExport(prop.declarations)) { + if (prop && !(prop.flags & (3 /* Variable */ | 4 /* Property */ | 98304 /* Accessor */)) && !(prop.flags & 8192 /* Method */ && propType.flags & 134217728 /* Union */) && !isDuplicatedCommonJSExport(prop.declarations)) { return propType; } if (propType === autoType) { @@ -79850,27 +80037,14 @@ function createTypeChecker(host) { }); } function isPropertyDeclaredInAncestorClass(prop) { - if (!(prop.parent.flags & 32 /* Class */)) { - return false; - } - let classType = getTypeOfSymbol(prop.parent); - while (true) { - classType = classType.symbol && getSuperClass(classType); - if (!classType) { - return false; - } - const superProperty = getPropertyOfType(classType, prop.escapedName); - if (superProperty && superProperty.valueDeclaration) { - return true; + if (prop.parent && prop.parent.flags & 32 /* Class */) { + const baseTypes = getBaseTypes(getDeclaredTypeOfSymbol(prop.parent)); + if (baseTypes.length) { + const superProperty = getPropertyOfType(baseTypes[0], prop.escapedName); + return !!(superProperty && superProperty.valueDeclaration); } } - } - function getSuperClass(classType) { - const x = getBaseTypes(classType); - if (x.length === 0) { - return void 0; - } - return getIntersectionType(x); + return false; } function reportNonexistentProperty(propNode, containingType, isUncheckedJS) { const links = getNodeLinks(propNode); @@ -79882,7 +80056,7 @@ function createTypeChecker(host) { cache.add(key); let errorInfo; let relatedInfo; - if (!isPrivateIdentifier(propNode) && containingType.flags & 1048576 /* Union */ && !(containingType.flags & 402784252 /* Primitive */)) { + if (!isPrivateIdentifier(propNode) && containingType.flags & 134217728 /* Union */ && !(containingType.flags & 12713980 /* Primitive */)) { for (const subtype of containingType.types) { if (!getPropertyOfType(subtype, propNode.escapedText) && !getApplicableIndexInfoForName(subtype, propNode.escapedText)) { errorInfo = chainDiagnosticMessages(errorInfo, Diagnostics.Property_0_does_not_exist_on_type_1, declarationNameToString(propNode), typeToString(subtype)); @@ -79981,16 +80155,15 @@ function createTypeChecker(host) { function getSuggestionForSymbolNameLookup(symbols, name, meaning) { const symbol = getSymbol2(symbols, name, meaning); if (symbol) return symbol; - let candidates; + let candidates = arrayFrom(symbols.values()); if (symbols === globals) { const primitives = mapDefined( ["string", "number", "boolean", "object", "bigint", "symbol"], (s) => symbols.has(s.charAt(0).toUpperCase() + s.slice(1)) ? createSymbol(524288 /* TypeAlias */, s) : void 0 ); - candidates = primitives.concat(arrayFrom(symbols.values())); - } else { - candidates = arrayFrom(symbols.values()); + candidates = concatenate(primitives, candidates); } + sortSymbolsIfTSGoCompat(candidates); return getSpellingSuggestionForName(unescapeLeadingUnderscores(name), candidates, meaning); } function getSuggestedSymbolForNonexistentSymbol(location, outerName, meaning) { @@ -80009,7 +80182,7 @@ function createTypeChecker(host) { return result; } function getSuggestedSymbolForNonexistentModule(name, targetModule) { - return targetModule.exports && getSpellingSuggestionForName(idText(name), getExportsOfModuleAsArray(targetModule), 2623475 /* ModuleMember */); + return targetModule.exports && getSpellingSuggestionForName(idText(name), sortSymbolsIfTSGoCompat(getExportsOfModuleAsArray(targetModule)), 2623475 /* ModuleMember */); } function getSuggestionForNonexistentIndexSignature(objectType, expr, keyedType) { function hasProp(name) { @@ -80033,7 +80206,7 @@ function createTypeChecker(host) { return suggestion; } function getSuggestedTypeForNonexistentStringLiteralType(source, target) { - const candidates = target.types.filter((type) => !!(type.flags & 128 /* StringLiteral */)); + const candidates = target.types.filter((type) => !!(type.flags & 1024 /* StringLiteral */)); return getSpellingSuggestion(source.value, candidates, (type) => type.value); } function getSpellingSuggestionForName(name, symbols, meaning) { @@ -80265,10 +80438,10 @@ function createTypeChecker(host) { return findIndex(args, isSpreadArgument); } function acceptsVoid(t) { - return !!(t.flags & 16384 /* Void */); + return !!(t.flags & 16 /* Void */); } function acceptsVoidUndefinedUnknownOrAny(t) { - return !!(t.flags & (16384 /* Void */ | 32768 /* Undefined */ | 2 /* Unknown */ | 1 /* Any */)); + return !!(t.flags & (16 /* Void */ | 4 /* Undefined */ | 2 /* Unknown */ | 1 /* Any */)); } function hasCorrectArity(node, args, signature, signatureHelpTrailingComma = false) { if (isJsxOpeningFragment(node)) return true; @@ -80317,7 +80490,7 @@ function createTypeChecker(host) { } for (let i = argCount; i < effectiveMinimumArguments; i++) { const type = getTypeAtPosition(signature, i); - if (filterType(type, isInJSFile(node) && !strictNullChecks ? acceptsVoidUndefinedUnknownOrAny : acceptsVoid).flags & 131072 /* Never */) { + if (filterType(type, isInJSFile(node) && !strictNullChecks ? acceptsVoidUndefinedUnknownOrAny : acceptsVoid).flags & 262144 /* Never */) { return false; } } @@ -80354,7 +80527,7 @@ function createTypeChecker(host) { ); } function getSingleSignature(type, kind, allowMembers) { - if (type.flags & 524288 /* Object */) { + if (type.flags & 1048576 /* Object */) { const resolved = resolveStructuredTypeMembers(type); if (allowMembers || resolved.properties.length === 0 && resolved.indexInfos.length === 0) { if (kind === 0 /* Call */ && resolved.callSignatures.length === 1 && resolved.constructSignatures.length === 0) { @@ -80367,10 +80540,10 @@ function createTypeChecker(host) { } return void 0; } - function instantiateSignatureInContextOf(signature, contextualSignature, inferenceContext, compareTypes) { - const context = createInferenceContext(getTypeParametersForMapper(signature), signature, 0 /* None */, compareTypes); + function instantiateSignatureInContextOf(signature, contextualSignature, inferenceContext, compareTypes2) { + const context = createInferenceContext(getTypeParametersForMapper(signature), signature, 0 /* None */, compareTypes2); const restType = getEffectiveRestType(contextualSignature); - const mapper = inferenceContext && (restType && restType.flags & 262144 /* TypeParameter */ ? inferenceContext.nonFixingMapper : inferenceContext.mapper); + const mapper = inferenceContext && (restType && restType.flags & 524288 /* TypeParameter */ ? inferenceContext.nonFixingMapper : inferenceContext.mapper); const sourceSignature = mapper ? instantiateSignature(contextualSignature, mapper) : contextualSignature; applyToParameterTypes(sourceSignature, signature, (source, target) => { inferTypes(context.inferences, source, target); @@ -80423,7 +80596,7 @@ function createTypeChecker(host) { } const restType = getNonArrayRestType(signature); const argCount = restType ? Math.min(getParameterCount(signature) - 1, args.length) : args.length; - if (restType && restType.flags & 262144 /* TypeParameter */) { + if (restType && restType.flags & 524288 /* TypeParameter */) { const info = find(context.inferences, (info2) => info2.typeParameter === restType); if (info) { info.impliedArity = findIndex(args, isSpreadArgument, argCount) < 0 ? args.length - argCount : void 0; @@ -80451,7 +80624,7 @@ function createTypeChecker(host) { return getInferredTypes(context); } function getMutableArrayOrTupleType(type) { - return type.flags & 1048576 /* Union */ ? mapType(type, getMutableArrayOrTupleType) : type.flags & 1 /* Any */ || isMutableArrayOrTuple(getBaseConstraintOfType(type) || type) ? type : isTupleType(type) ? createTupleType( + return type.flags & 134217728 /* Union */ ? mapType(type, getMutableArrayOrTupleType) : type.flags & 1 /* Any */ || isMutableArrayOrTuple(getBaseConstraintOfType(type) || type) ? type : isTupleType(type) ? createTupleType( getElementTypes(type), type.target.elementFlags, /*readonly*/ @@ -80488,7 +80661,7 @@ function createTypeChecker(host) { } else { const contextualType = isTupleType(restType) ? getContextualTypeForElementExpression(restType, i - index, argCount - index) || unknownType : getIndexedAccessType(restType, getNumberLiteralType(i - index), 256 /* Contextual */); const argType = checkExpressionWithContextualType(arg, contextualType, context, checkMode); - const hasPrimitiveContextualType = inConstContext || maybeTypeOfKind(contextualType, 402784252 /* Primitive */ | 4194304 /* Index */ | 134217728 /* TemplateLiteral */ | 268435456 /* StringMapping */); + const hasPrimitiveContextualType = inConstContext || maybeTypeOfKind(contextualType, 12713980 /* Primitive */ | 2097152 /* Index */ | 4194304 /* TemplateLiteral */ | 8388608 /* StringMapping */); types.push(hasPrimitiveContextualType ? getRegularTypeOfLiteralType(argType) : getWidenedLiteralType(argType)); flags.push(1 /* Required */); } @@ -80509,11 +80682,11 @@ function createTypeChecker(host) { Debug.assert(typeParameters[i] !== void 0, "Should not call checkTypeArguments with too many type arguments"); const constraint = getConstraintOfTypeParameter(typeParameters[i]); if (constraint) { - const errorInfo = reportErrors2 && headMessage ? () => chainDiagnosticMessages( + const errorInfo = reportErrors2 && headMessage ? (() => chainDiagnosticMessages( /*details*/ void 0, Diagnostics.Type_0_does_not_satisfy_the_constraint_1 - ) : void 0; + )) : void 0; const typeArgumentHeadMessage = headMessage || Diagnostics.Type_0_does_not_satisfy_the_constraint_1; if (!mapper) { mapper = createTypeMapper(typeParameters, typeArgumentTypes); @@ -81510,7 +81683,7 @@ function createTypeChecker(host) { return !!(signature.typeParameters && isFunctionType(getReturnTypeOfSignature(signature))); } function isUntypedFunctionCall(funcType, apparentFuncType, numCallSignatures, numConstructSignatures) { - return isTypeAny(funcType) || isTypeAny(apparentFuncType) && !!(funcType.flags & 262144 /* TypeParameter */) || !numCallSignatures && !numConstructSignatures && !(apparentFuncType.flags & 1048576 /* Union */) && !(getReducedType(apparentFuncType).flags & 131072 /* Never */) && isTypeAssignableTo(funcType, globalFunctionType); + return isTypeAny(funcType) || isTypeAny(apparentFuncType) && !!(funcType.flags & 524288 /* TypeParameter */) || !numCallSignatures && !numConstructSignatures && !(apparentFuncType.flags & 134217728 /* Union */) && !(getReducedType(apparentFuncType).flags & 262144 /* Never */) && isTypeAssignableTo(funcType, globalFunctionType); } function resolveNewExpression(node, candidatesOutArray, checkMode) { let expressionType = checkNonNullExpression(node.expression); @@ -81563,7 +81736,7 @@ function createTypeChecker(host) { if (isArray(signatures)) { return some(signatures, (signature) => someSignature(signature, f)); } - return signatures.compositeKind === 1048576 /* Union */ ? some(signatures.compositeSignatures, f) : f(signatures); + return signatures.compositeKind === 134217728 /* Union */ ? some(signatures.compositeSignatures, f) : f(signatures); } function typeHasProtectedAccessibleBase(target, type) { const baseTypes = getBaseTypes(type); @@ -81571,7 +81744,7 @@ function createTypeChecker(host) { return false; } const firstBase = baseTypes[0]; - if (firstBase.flags & 2097152 /* Intersection */) { + if (firstBase.flags & 268435456 /* Intersection */) { const types = firstBase.types; const mixinFlags = findMixins(types); let i = 0; @@ -81629,7 +81802,7 @@ function createTypeChecker(host) { const isCall = kind === 0 /* Call */; const awaitedType = getAwaitedType(apparentType); const maybeMissingAwait = awaitedType && getSignaturesOfType(awaitedType, kind).length > 0; - if (apparentType.flags & 1048576 /* Union */) { + if (apparentType.flags & 134217728 /* Union */) { const types = apparentType.types; let hasSignatures2 = false; for (const constituent of types) { @@ -82093,10 +82266,10 @@ function createTypeChecker(host) { return resolveExternalModuleTypeByLiteral(node.arguments[0]); } const returnType = getReturnTypeOfSignature(signature); - if (returnType.flags & 12288 /* ESSymbolLike */ && isSymbolOrSymbolForCall(node)) { + if (returnType.flags & 16896 /* ESSymbolLike */ && isSymbolOrSymbolForCall(node)) { return getESSymbolLikeTypeForNode(walkUpParenthesizedExpressions(node.parent)); } - if (node.kind === 214 /* CallExpression */ && !node.questionDotToken && node.parent.kind === 245 /* ExpressionStatement */ && returnType.flags & 16384 /* Void */ && getTypePredicateOfSignature(signature)) { + if (node.kind === 214 /* CallExpression */ && !node.questionDotToken && node.parent.kind === 245 /* ExpressionStatement */ && returnType.flags & 16 /* Void */ && getTypePredicateOfSignature(signature)) { if (!isDottedName(node.expression)) { error2(node.expression, Diagnostics.Assertions_require_the_call_target_to_be_an_identifier_or_qualified_name); } else if (!getEffectsSignature(node)) { @@ -82186,7 +82359,7 @@ function createTypeChecker(host) { for (let i = 2; i < node.arguments.length; ++i) { checkExpressionCached(node.arguments[i]); } - if (specifierType.flags & 32768 /* Undefined */ || specifierType.flags & 65536 /* Null */ || !isTypeAssignableTo(specifierType, stringType)) { + if (specifierType.flags & 4 /* Undefined */ || specifierType.flags & 8 /* Null */ || !isTypeAssignableTo(specifierType, stringType)) { error2(specifier, Diagnostics.Dynamic_import_s_specifier_must_be_of_type_string_but_here_has_type_0, typeToString(specifierType)); } if (optionsType) { @@ -82195,7 +82368,15 @@ function createTypeChecker(host) { true ); if (importCallOptionsType !== emptyObjectType) { - checkTypeAssignableTo(optionsType, getNullableType(importCallOptionsType, 32768 /* Undefined */), node.arguments[1]); + checkTypeAssignableTo(optionsType, getNullableType(importCallOptionsType, 4 /* Undefined */), node.arguments[1]); + } + if (compilerOptions.ignoreDeprecations !== "6.0" && isObjectLiteralExpression(node.arguments[1])) { + for (const prop of node.arguments[1].properties) { + if (isPropertyAssignment(prop) && isIdentifier(prop.name) && prop.name.escapedText === "assert") { + grammarErrorOnNode(prop.name, Diagnostics.Import_assertions_have_been_replaced_by_import_attributes_Use_with_instead_of_assert); + break; + } + } } } const moduleSymbol = resolveExternalModuleName(node, specifier); @@ -82362,7 +82543,7 @@ function createTypeChecker(host) { const exprType = checkExpression(expression, checkMode); if (isConstTypeReference(type)) { if (!isValidConstAssertionArgument(expression)) { - error2(expression, Diagnostics.A_const_assertions_can_only_be_applied_to_references_to_enum_members_or_string_number_boolean_array_or_object_literals); + error2(expression, Diagnostics.A_const_assertion_can_only_be_applied_to_references_to_enum_members_or_string_number_boolean_array_or_object_literals); } return getRegularTypeOfLiteralType(exprType); } @@ -82455,7 +82636,7 @@ function createTypeChecker(host) { } return result2; function getInstantiatedTypePart(type2) { - if (type2.flags & 524288 /* Object */) { + if (type2.flags & 1048576 /* Object */) { const resolved = resolveStructuredTypeMembers(type2); const callSignatures = getInstantiatedSignatures(resolved.callSignatures); const constructSignatures = getInstantiatedSignatures(resolved.constructSignatures); @@ -82467,7 +82648,7 @@ function createTypeChecker(host) { result3.node = node; return result3; } - } else if (type2.flags & 58982400 /* InstantiableNonPrimitive */) { + } else if (type2.flags & 117964800 /* InstantiableNonPrimitive */) { const constraint = getBaseConstraintOfType(type2); if (constraint) { const instantiated = getInstantiatedTypePart(constraint); @@ -82475,9 +82656,9 @@ function createTypeChecker(host) { return instantiated; } } - } else if (type2.flags & 1048576 /* Union */) { + } else if (type2.flags & 134217728 /* Union */) { return mapType(type2, getInstantiatedType); - } else if (type2.flags & 2097152 /* Intersection */) { + } else if (type2.flags & 268435456 /* Intersection */) { return getIntersectionType(sameMap(type2.types, getInstantiatedTypePart)); } return type2; @@ -82762,7 +82943,7 @@ function createTypeChecker(host) { } for (let i = minArgumentCount - 1; i >= 0; i--) { const type = getTypeAtPosition(signature, i); - if (filterType(type, acceptsVoid).flags & 131072 /* Never */) { + if (filterType(type, acceptsVoid).flags & 262144 /* Never */) { break; } minArgumentCount = i; @@ -83214,6 +83395,9 @@ function createTypeChecker(host) { let fallbackReturnType = voidType; if (func.body.kind !== 242 /* Block */) { returnType = checkExpressionCached(func.body, checkMode && checkMode & ~8 /* SkipGenericFunctions */); + if (isConstContext(func.body)) { + returnType = getRegularTypeOfLiteralType(returnType); + } if (isAsync) { returnType = unwrapAwaitedType(checkAwaitedType( returnType, @@ -83245,7 +83429,7 @@ function createTypeChecker(host) { /*contextFlags*/ void 0 ); - const returnType2 = contextualReturnType && (unwrapReturnType(contextualReturnType, functionFlags) || voidType).flags & 32768 /* Undefined */ ? undefinedType : voidType; + const returnType2 = contextualReturnType && someType(unwrapReturnType(contextualReturnType, functionFlags) || voidType, (t) => !!(t.flags & 4 /* Undefined */)) ? undefinedType : voidType; return functionFlags & 2 /* Async */ ? createPromiseReturnType(func, returnType2) : ( // Async function returnType2 @@ -83325,7 +83509,10 @@ function createTypeChecker(host) { const nextTypes = []; const isAsync = (getFunctionFlags(func) & 2 /* Async */) !== 0; forEachYieldExpression(func.body, (yieldExpression) => { - const yieldExpressionType = yieldExpression.expression ? checkExpression(yieldExpression.expression, checkMode) : undefinedWideningType; + let yieldExpressionType = yieldExpression.expression ? checkExpression(yieldExpression.expression, checkMode && checkMode & ~8 /* SkipGenericFunctions */) : undefinedWideningType; + if (yieldExpression.expression && isConstContext(yieldExpression.expression)) { + yieldExpressionType = getRegularTypeOfLiteralType(yieldExpressionType); + } pushIfUnique(yieldTypes, getYieldedTypeOfYieldExpression(yieldExpression, yieldExpressionType, anyType, isAsync)); let nextType; if (yieldExpression.asteriskToken) { @@ -83347,9 +83534,6 @@ function createTypeChecker(host) { return { yieldTypes, nextTypes }; } function getYieldedTypeOfYieldExpression(node, expressionType, sentType, isAsync) { - if (expressionType === silentNeverType) { - return silentNeverType; - } const errorNode = node.expression || node; const yieldedType = node.asteriskToken ? checkIteratedTypeOrElementType(isAsync ? 19 /* AsyncYieldStar */ : 17 /* YieldStar */, expressionType, sentType, errorNode) : expressionType; return !isAsync ? yieldedType : getAwaitedType( @@ -83439,10 +83623,10 @@ function createTypeChecker(host) { Diagnostics.The_return_type_of_an_async_function_must_either_be_a_valid_promise_or_must_not_contain_a_callable_then_member )); } - if (type.flags & 131072 /* Never */) { + if (type.flags & 262144 /* Never */) { hasReturnOfTypeNever = true; } - pushIfUnique(aggregatedTypes, type); + pushIfUnique(aggregatedTypes, isConstContext(expr) ? getRegularTypeOfLiteralType(type) : type); } else { hasReturnWithNoExpression = true; } @@ -83494,10 +83678,10 @@ function createTypeChecker(host) { true ); const returnType = checkExpressionCached(expr); - if (!(returnType.flags & 16 /* Boolean */)) return void 0; + if (!(returnType.flags & 256 /* Boolean */)) return void 0; return forEach(func.parameters, (param, i) => { const initType = getTypeOfSymbol(param.symbol); - if (!initType || initType.flags & 16 /* Boolean */ || !isIdentifier(param.name) || isSymbolAssigned(param.symbol) || isRestParameter(param)) { + if (!initType || initType.flags & 256 /* Boolean */ || !isIdentifier(param.name) || isSymbolAssigned(param.symbol) || isRestParameter(param)) { return; } const trueType2 = checkIfExpressionRefinesParameter(func, expr, param, initType); @@ -83519,7 +83703,7 @@ function createTypeChecker(host) { if (trueType2 === initType) return void 0; const falseCondition = createFlowNode(64 /* FalseCondition */, expr, antecedent); const falseSubtype = getReducedType(getFlowTypeOfReference(param.name, initType, trueType2, func, falseCondition)); - return falseSubtype.flags & 131072 /* Never */ ? trueType2 : void 0; + return falseSubtype.flags & 262144 /* Never */ ? trueType2 : void 0; } function checkAllCodePathsInNonVoidFunctionReturnOrThrow(func, returnType) { addLazyDiagnostic(checkAllCodePathsInNonVoidFunctionReturnOrThrowDiagnostics); @@ -83527,7 +83711,7 @@ function createTypeChecker(host) { function checkAllCodePathsInNonVoidFunctionReturnOrThrowDiagnostics() { const functionFlags = getFunctionFlags(func); const type = returnType && unwrapReturnType(returnType, functionFlags); - if (type && (maybeTypeOfKind(type, 16384 /* Void */) || type.flags & (1 /* Any */ | 32768 /* Undefined */))) { + if (type && (maybeTypeOfKind(type, 16 /* Void */) || type.flags & (1 /* Any */ | 4 /* Undefined */))) { return; } if (func.kind === 174 /* MethodSignature */ || nodeIsMissing(func.body) || func.body.kind !== 242 /* Block */ || !functionHasImplicitReturn(func)) { @@ -83535,7 +83719,7 @@ function createTypeChecker(host) { } const hasExplicitReturn = func.flags & 1024 /* HasExplicitReturn */; const errorNode = getEffectiveReturnTypeNode(func) || func; - if (type && type.flags & 131072 /* Never */) { + if (type && type.flags & 262144 /* Never */) { error2(errorNode, Diagnostics.A_function_returning_never_cannot_have_a_reachable_end_point); } else if (type && !hasExplicitReturn) { error2(errorNode, Diagnostics.A_function_whose_declared_type_is_neither_undefined_void_nor_any_must_return_a_value); @@ -83615,7 +83799,7 @@ function createTypeChecker(host) { if (checkMode && checkMode & 2 /* Inferential */) { inferFromAnnotatedParametersAndReturn(signature, contextualSignature, inferenceContext); const restType = getEffectiveRestType(contextualSignature); - if (restType && restType.flags & 262144 /* TypeParameter */) { + if (restType && restType.flags & 524288 /* TypeParameter */) { instantiatedContextualSignature = instantiateSignature(contextualSignature, inferenceContext.nonFixingMapper); } } @@ -83772,7 +83956,7 @@ function createTypeChecker(host) { } function checkDeleteExpressionMustBeOptional(expr, symbol) { const type = getTypeOfSymbol(symbol); - if (strictNullChecks && !(type.flags & (3 /* AnyOrUnknown */ | 131072 /* Never */)) && !(exactOptionalPropertyTypes ? symbol.flags & 16777216 /* Optional */ : hasTypeFacts(type, 16777216 /* IsUndefined */))) { + if (strictNullChecks && !(type.flags & (3 /* AnyOrUnknown */ | 262144 /* Never */)) && !(exactOptionalPropertyTypes ? symbol.flags & 16777216 /* Optional */ : hasTypeFacts(type, 16777216 /* IsUndefined */))) { error2(expr, Diagnostics.The_operand_of_a_delete_operator_must_be_optional); } } @@ -83900,11 +84084,11 @@ function createTypeChecker(host) { case 41 /* MinusToken */: case 55 /* TildeToken */: checkNonNullType(operandType, node.operand); - if (maybeTypeOfKindConsideringBaseConstraint(operandType, 12288 /* ESSymbolLike */)) { + if (maybeTypeOfKindConsideringBaseConstraint(operandType, 16896 /* ESSymbolLike */)) { error2(node.operand, Diagnostics.The_0_operator_cannot_be_applied_to_type_symbol, tokenToString(node.operator)); } if (node.operator === 40 /* PlusToken */) { - if (maybeTypeOfKindConsideringBaseConstraint(operandType, 2112 /* BigIntLike */)) { + if (maybeTypeOfKindConsideringBaseConstraint(operandType, 4224 /* BigIntLike */)) { error2(node.operand, Diagnostics.Operator_0_cannot_be_applied_to_type_1, tokenToString(node.operator), typeToString(getBaseTypeOfLiteralType(operandType))); } return numberType; @@ -83948,8 +84132,8 @@ function createTypeChecker(host) { return getUnaryResultType(operandType); } function getUnaryResultType(operandType) { - if (maybeTypeOfKind(operandType, 2112 /* BigIntLike */)) { - return isTypeAssignableToKind(operandType, 3 /* AnyOrUnknown */) || maybeTypeOfKind(operandType, 296 /* NumberLike */) ? numberOrBigIntType : bigintType; + if (maybeTypeOfKind(operandType, 4224 /* BigIntLike */)) { + return isTypeAssignableToKind(operandType, 3 /* AnyOrUnknown */) || maybeTypeOfKind(operandType, 67648 /* NumberLike */) ? numberOrBigIntType : bigintType; } return numberType; } @@ -83964,7 +84148,7 @@ function createTypeChecker(host) { if (type.flags & kind) { return true; } - if (type.flags & 3145728 /* UnionOrIntersection */) { + if (type.flags & 402653184 /* UnionOrIntersection */) { const types = type.types; for (const t of types) { if (maybeTypeOfKind(t, kind)) { @@ -83978,13 +84162,13 @@ function createTypeChecker(host) { if (source.flags & kind) { return true; } - if (strict && source.flags & (3 /* AnyOrUnknown */ | 16384 /* Void */ | 32768 /* Undefined */ | 65536 /* Null */)) { + if (strict && source.flags & (3 /* AnyOrUnknown */ | 16 /* Void */ | 4 /* Undefined */ | 8 /* Null */)) { return false; } - return !!(kind & 296 /* NumberLike */) && isTypeAssignableTo(source, numberType) || !!(kind & 2112 /* BigIntLike */) && isTypeAssignableTo(source, bigintType) || !!(kind & 402653316 /* StringLike */) && isTypeAssignableTo(source, stringType) || !!(kind & 528 /* BooleanLike */) && isTypeAssignableTo(source, booleanType) || !!(kind & 16384 /* Void */) && isTypeAssignableTo(source, voidType) || !!(kind & 131072 /* Never */) && isTypeAssignableTo(source, neverType) || !!(kind & 65536 /* Null */) && isTypeAssignableTo(source, nullType) || !!(kind & 32768 /* Undefined */) && isTypeAssignableTo(source, undefinedType) || !!(kind & 4096 /* ESSymbol */) && isTypeAssignableTo(source, esSymbolType) || !!(kind & 67108864 /* NonPrimitive */) && isTypeAssignableTo(source, nonPrimitiveType); + return !!(kind & 67648 /* NumberLike */) && isTypeAssignableTo(source, numberType) || !!(kind & 4224 /* BigIntLike */) && isTypeAssignableTo(source, bigintType) || !!(kind & 12583968 /* StringLike */) && isTypeAssignableTo(source, stringType) || !!(kind & 8448 /* BooleanLike */) && isTypeAssignableTo(source, booleanType) || !!(kind & 16 /* Void */) && isTypeAssignableTo(source, voidType) || !!(kind & 262144 /* Never */) && isTypeAssignableTo(source, neverType) || !!(kind & 8 /* Null */) && isTypeAssignableTo(source, nullType) || !!(kind & 4 /* Undefined */) && isTypeAssignableTo(source, undefinedType) || !!(kind & 512 /* ESSymbol */) && isTypeAssignableTo(source, esSymbolType) || !!(kind & 131072 /* NonPrimitive */) && isTypeAssignableTo(source, nonPrimitiveType); } function allTypesAssignableToKind(source, kind, strict) { - return source.flags & 1048576 /* Union */ ? every(source.types, (subType) => allTypesAssignableToKind(subType, kind, strict)) : isTypeAssignableToKind(source, kind, strict); + return source.flags & 134217728 /* Union */ ? every(source.types, (subType) => allTypesAssignableToKind(subType, kind, strict)) : isTypeAssignableToKind(source, kind, strict); } function isConstEnumObjectType(type) { return !!(getObjectFlags(type) & 16 /* Anonymous */) && !!type.symbol && isConstEnumSymbol(type.symbol); @@ -83994,7 +84178,7 @@ function createTypeChecker(host) { } function getSymbolHasInstanceMethodOfObjectType(type) { const hasInstancePropertyName = getPropertyNameForKnownSymbolName("hasInstance"); - if (allTypesAssignableToKind(type, 67108864 /* NonPrimitive */)) { + if (allTypesAssignableToKind(type, 131072 /* NonPrimitive */)) { const hasInstanceProperty = getPropertyOfType(type, hasInstancePropertyName); if (hasInstanceProperty) { const hasInstancePropertyType = getTypeOfSymbol(hasInstanceProperty); @@ -84008,7 +84192,7 @@ function createTypeChecker(host) { if (leftType === silentNeverType || rightType === silentNeverType) { return silentNeverType; } - if (!isTypeAny(leftType) && allTypesAssignableToKind(leftType, 402784252 /* Primitive */)) { + if (!isTypeAny(leftType) && allTypesAssignableToKind(leftType, 12713980 /* Primitive */)) { error2(left, Diagnostics.The_left_hand_side_of_an_instanceof_expression_must_be_of_type_any_an_object_type_or_a_type_parameter); } Debug.assert(isInstanceOfExpression(left.parent)); @@ -84026,7 +84210,7 @@ function createTypeChecker(host) { return booleanType; } function hasEmptyObjectIntersection(type) { - return someType(type, (t) => t === unknownEmptyObjectType || !!(t.flags & 2097152 /* Intersection */) && isEmptyAnonymousObjectType(getBaseConstraintOrType(t))); + return someType(type, (t) => t === unknownEmptyObjectType || !!(t.flags & 268435456 /* Intersection */) && isEmptyAnonymousObjectType(getBaseConstraintOrType(t))); } function checkInExpression(left, right, leftType, rightType) { if (leftType === silentNeverType || rightType === silentNeverType) { @@ -84254,7 +84438,7 @@ function createTypeChecker(host) { } } function isTypeEqualityComparableTo(source, target) { - return (target.flags & 98304 /* Nullable */) !== 0 || isTypeComparableTo(source, target); + return (target.flags & 12 /* Nullable */) !== 0 || isTypeComparableTo(source, target); } function createCheckBinaryExpression() { const trampoline = createBinaryExpressionTrampoline(onEnter, onLeft, onOperator, onRight, onExit, foldState); @@ -84403,7 +84587,6 @@ function createTypeChecker(host) { } } checkNullishCoalesceOperandLeft(node); - checkNullishCoalesceOperandRight(node); } function checkNullishCoalesceOperandLeft(node) { const leftTarget = skipOuterExpressions(node.left, 63 /* All */); @@ -84416,21 +84599,6 @@ function createTypeChecker(host) { } } } - function checkNullishCoalesceOperandRight(node) { - const rightTarget = skipOuterExpressions(node.right, 63 /* All */); - const nullishSemantics = getSyntacticNullishnessSemantics(rightTarget); - if (isNotWithinNullishCoalesceExpression(node)) { - return; - } - if (nullishSemantics === 1 /* Always */) { - error2(rightTarget, Diagnostics.This_expression_is_always_nullish); - } else if (nullishSemantics === 2 /* Never */) { - error2(rightTarget, Diagnostics.This_expression_is_never_nullish); - } - } - function isNotWithinNullishCoalesceExpression(node) { - return !isBinaryExpression(node.parent) || node.parent.operatorToken.kind !== 61 /* QuestionQuestionToken */; - } function getSyntacticNullishnessSemantics(node) { node = skipOuterExpressions(node); switch (node.kind) { @@ -84446,15 +84614,16 @@ function createTypeChecker(host) { return 3 /* Sometimes */; case 227 /* BinaryExpression */: switch (node.operatorToken.kind) { - case 64 /* EqualsToken */: - case 61 /* QuestionQuestionToken */: - case 78 /* QuestionQuestionEqualsToken */: case 57 /* BarBarToken */: case 76 /* BarBarEqualsToken */: case 56 /* AmpersandAmpersandToken */: case 77 /* AmpersandAmpersandEqualsToken */: return 3 /* Sometimes */; + // For these operator kinds, the right operand is effectively controlling case 28 /* CommaToken */: + case 64 /* EqualsToken */: + case 61 /* QuestionQuestionToken */: + case 78 /* QuestionQuestionEqualsToken */: return getSyntacticNullishnessSemantics(node.right); } return 2 /* Never */; @@ -84515,7 +84684,7 @@ function createTypeChecker(host) { leftType = checkNonNullType(leftType, left); rightType = checkNonNullType(rightType, right); let suggestedOperator; - if (leftType.flags & 528 /* BooleanLike */ && rightType.flags & 528 /* BooleanLike */ && (suggestedOperator = getSuggestedBooleanOperator(operatorToken.kind)) !== void 0) { + if (leftType.flags & 8448 /* BooleanLike */ && rightType.flags & 8448 /* BooleanLike */ && (suggestedOperator = getSuggestedBooleanOperator(operatorToken.kind)) !== void 0) { error2(errorNode || operatorToken, Diagnostics.The_0_operator_is_not_allowed_for_boolean_types_Consider_using_1_instead, tokenToString(operatorToken.kind), tokenToString(suggestedOperator)); return numberType; } else { @@ -84535,7 +84704,7 @@ function createTypeChecker(host) { ); let resultType2; if (isTypeAssignableToKind(leftType, 3 /* AnyOrUnknown */) && isTypeAssignableToKind(rightType, 3 /* AnyOrUnknown */) || // Or, if neither could be bigint, implicit coercion results in a number result - !(maybeTypeOfKind(leftType, 2112 /* BigIntLike */) || maybeTypeOfKind(rightType, 2112 /* BigIntLike */))) { + !(maybeTypeOfKind(leftType, 4224 /* BigIntLike */) || maybeTypeOfKind(rightType, 4224 /* BigIntLike */))) { resultType2 = numberType; } else if (bothAreBigIntLike(leftType, rightType)) { switch (operator) { @@ -84587,43 +84756,43 @@ function createTypeChecker(host) { if (leftType === silentNeverType || rightType === silentNeverType) { return silentNeverType; } - if (!isTypeAssignableToKind(leftType, 402653316 /* StringLike */) && !isTypeAssignableToKind(rightType, 402653316 /* StringLike */)) { + if (!isTypeAssignableToKind(leftType, 12583968 /* StringLike */) && !isTypeAssignableToKind(rightType, 12583968 /* StringLike */)) { leftType = checkNonNullType(leftType, left); rightType = checkNonNullType(rightType, right); } let resultType; if (isTypeAssignableToKind( leftType, - 296 /* NumberLike */, + 67648 /* NumberLike */, /*strict*/ true ) && isTypeAssignableToKind( rightType, - 296 /* NumberLike */, + 67648 /* NumberLike */, /*strict*/ true )) { resultType = numberType; } else if (isTypeAssignableToKind( leftType, - 2112 /* BigIntLike */, + 4224 /* BigIntLike */, /*strict*/ true ) && isTypeAssignableToKind( rightType, - 2112 /* BigIntLike */, + 4224 /* BigIntLike */, /*strict*/ true )) { resultType = bigintType; } else if (isTypeAssignableToKind( leftType, - 402653316 /* StringLike */, + 12583968 /* StringLike */, /*strict*/ true ) || isTypeAssignableToKind( rightType, - 402653316 /* StringLike */, + 12583968 /* StringLike */, /*strict*/ true )) { @@ -84635,7 +84804,7 @@ function createTypeChecker(host) { return resultType; } if (!resultType) { - const closeEnoughKind = 296 /* NumberLike */ | 2112 /* BigIntLike */ | 402653316 /* StringLike */ | 3 /* AnyOrUnknown */; + const closeEnoughKind = 67648 /* NumberLike */ | 4224 /* BigIntLike */ | 12583968 /* StringLike */ | 3 /* AnyOrUnknown */; reportOperatorError( (left2, right2) => isTypeAssignableToKind(left2, closeEnoughKind) && isTypeAssignableToKind(right2, closeEnoughKind) ); @@ -84708,7 +84877,7 @@ function createTypeChecker(host) { const declKind = isBinaryExpression(left.parent) ? getAssignmentDeclarationKind(left.parent) : 0 /* None */; checkAssignmentDeclaration(declKind, rightType); if (isAssignmentDeclaration2(declKind)) { - if (!(rightType.flags & 524288 /* Object */) || declKind !== 2 /* ModuleExports */ && declKind !== 6 /* Prototype */ && !isEmptyObjectType(rightType) && !isFunctionObjectType(rightType) && !(getObjectFlags(rightType) & 1 /* Class */)) { + if (!(rightType.flags & 1048576 /* Object */) || declKind !== 2 /* ModuleExports */ && declKind !== 6 /* Prototype */ && !isEmptyObjectType(rightType) && !isFunctionObjectType(rightType) && !(getObjectFlags(rightType) & 1 /* Class */)) { checkAssignmentOperator(rightType); } return leftType; @@ -84732,7 +84901,7 @@ function createTypeChecker(host) { return Debug.fail(); } function bothAreBigIntLike(left2, right2) { - return isTypeAssignableToKind(left2, 2112 /* BigIntLike */) && isTypeAssignableToKind(right2, 2112 /* BigIntLike */); + return isTypeAssignableToKind(left2, 4224 /* BigIntLike */) && isTypeAssignableToKind(right2, 4224 /* BigIntLike */); } function checkAssignmentDeclaration(kind, rightType2) { if (kind === 2 /* ModuleExports */) { @@ -84762,7 +84931,7 @@ function createTypeChecker(host) { (isAccessExpression(node.right) || isIdentifier(node.right) && node.right.escapedText === "eval"); } function checkForDisallowedESSymbolOperand(operator2) { - const offendingSymbolOperand = maybeTypeOfKindConsideringBaseConstraint(leftType, 12288 /* ESSymbolLike */) ? left : maybeTypeOfKindConsideringBaseConstraint(rightType, 12288 /* ESSymbolLike */) ? right : void 0; + const offendingSymbolOperand = maybeTypeOfKindConsideringBaseConstraint(leftType, 16896 /* ESSymbolLike */) ? left : maybeTypeOfKindConsideringBaseConstraint(rightType, 16896 /* ESSymbolLike */) ? right : void 0; if (offendingSymbolOperand) { error2(offendingSymbolOperand, Diagnostics.The_0_operator_cannot_be_applied_to_type_symbol, tokenToString(operator2)); return false; @@ -84801,7 +84970,7 @@ function createTypeChecker(host) { } if (checkReferenceExpression(left, Diagnostics.The_left_hand_side_of_an_assignment_expression_must_be_a_variable_or_a_property_access, Diagnostics.The_left_hand_side_of_an_assignment_expression_may_not_be_an_optional_property_access)) { let headMessage; - if (exactOptionalPropertyTypes && isPropertyAccessExpression(left) && maybeTypeOfKind(valueType, 32768 /* Undefined */)) { + if (exactOptionalPropertyTypes && isPropertyAccessExpression(left) && maybeTypeOfKind(valueType, 4 /* Undefined */)) { const target = getTypeOfPropertyOfType(getTypeOfExpression(left.expression), left.name.escapedText); if (isExactOptionalPropertyMismatch(valueType, target)) { headMessage = Diagnostics.Type_0_is_not_assignable_to_type_1_with_exactOptionalPropertyTypes_Colon_true_Consider_adding_undefined_to_the_type_of_the_target; @@ -84926,7 +85095,7 @@ function createTypeChecker(host) { } } let returnType = getReturnTypeFromAnnotation(func); - if (returnType && returnType.flags & 1048576 /* Union */) { + if (returnType && returnType.flags & 134217728 /* Union */) { returnType = filterType(returnType, (t) => checkGeneratorInstantiationAssignabilityToReturnType( t, functionFlags, @@ -84990,7 +85159,7 @@ function createTypeChecker(host) { const types = []; for (const span of node.templateSpans) { const type = checkExpression(span.expression); - if (maybeTypeOfKindConsideringBaseConstraint(type, 12288 /* ESSymbolLike */)) { + if (maybeTypeOfKindConsideringBaseConstraint(type, 16896 /* ESSymbolLike */)) { error2(span.expression, Diagnostics.Implicit_conversion_of_a_symbol_to_a_string_will_fail_at_runtime_Consider_wrapping_this_expression_in_String); } texts.push(span.literal.text); @@ -85010,7 +85179,7 @@ function createTypeChecker(host) { return stringType; } function isTemplateLiteralContextualType(type) { - return !!(type.flags & (128 /* StringLiteral */ | 134217728 /* TemplateLiteral */) || type.flags & 58982400 /* InstantiableNonPrimitive */ && maybeTypeOfKind(getBaseConstraintOfType(type) || unknownType, 402653316 /* StringLike */)); + return !!(type.flags & (1024 /* StringLiteral */ | 4194304 /* TemplateLiteral */) || type.flags & 117964800 /* InstantiableNonPrimitive */ && maybeTypeOfKind(getBaseConstraintOfType(type) || unknownType, 12583968 /* StringLike */)); } function getContextNode2(node) { if (isJsxAttributes(node) && !isJsxSelfClosingElement(node.parent)) { @@ -85031,7 +85200,7 @@ function createTypeChecker(host) { if (inferenceContext && inferenceContext.intraExpressionInferenceSites) { inferenceContext.intraExpressionInferenceSites = void 0; } - const result = maybeTypeOfKind(type, 2944 /* Literal */) && isLiteralOfContextualType(type, instantiateContextualType( + const result = maybeTypeOfKind(type, 15360 /* Literal */) && isLiteralOfContextualType(type, instantiateContextualType( contextualType, node, /*contextFlags*/ @@ -85169,15 +85338,15 @@ function createTypeChecker(host) { } function isLiteralOfContextualType(candidateType, contextualType) { if (contextualType) { - if (contextualType.flags & 3145728 /* UnionOrIntersection */) { + if (contextualType.flags & 402653184 /* UnionOrIntersection */) { const types = contextualType.types; return some(types, (t) => isLiteralOfContextualType(candidateType, t)); } - if (contextualType.flags & 58982400 /* InstantiableNonPrimitive */) { + if (contextualType.flags & 117964800 /* InstantiableNonPrimitive */) { const constraint = getBaseConstraintOfType(contextualType) || unknownType; - return maybeTypeOfKind(constraint, 4 /* String */) && maybeTypeOfKind(candidateType, 128 /* StringLiteral */) || maybeTypeOfKind(constraint, 8 /* Number */) && maybeTypeOfKind(candidateType, 256 /* NumberLiteral */) || maybeTypeOfKind(constraint, 64 /* BigInt */) && maybeTypeOfKind(candidateType, 2048 /* BigIntLiteral */) || maybeTypeOfKind(constraint, 4096 /* ESSymbol */) && maybeTypeOfKind(candidateType, 8192 /* UniqueESSymbol */) || isLiteralOfContextualType(candidateType, constraint); + return maybeTypeOfKind(constraint, 32 /* String */) && maybeTypeOfKind(candidateType, 1024 /* StringLiteral */) || maybeTypeOfKind(constraint, 64 /* Number */) && maybeTypeOfKind(candidateType, 2048 /* NumberLiteral */) || maybeTypeOfKind(constraint, 128 /* BigInt */) && maybeTypeOfKind(candidateType, 4096 /* BigIntLiteral */) || maybeTypeOfKind(constraint, 512 /* ESSymbol */) && maybeTypeOfKind(candidateType, 16384 /* UniqueESSymbol */) || isLiteralOfContextualType(candidateType, constraint); } - return !!(contextualType.flags & (128 /* StringLiteral */ | 4194304 /* Index */ | 134217728 /* TemplateLiteral */ | 268435456 /* StringMapping */) && maybeTypeOfKind(candidateType, 128 /* StringLiteral */) || contextualType.flags & 256 /* NumberLiteral */ && maybeTypeOfKind(candidateType, 256 /* NumberLiteral */) || contextualType.flags & 2048 /* BigIntLiteral */ && maybeTypeOfKind(candidateType, 2048 /* BigIntLiteral */) || contextualType.flags & 512 /* BooleanLiteral */ && maybeTypeOfKind(candidateType, 512 /* BooleanLiteral */) || contextualType.flags & 8192 /* UniqueESSymbol */ && maybeTypeOfKind(candidateType, 8192 /* UniqueESSymbol */)); + return !!(contextualType.flags & (1024 /* StringLiteral */ | 2097152 /* Index */ | 4194304 /* TemplateLiteral */ | 8388608 /* StringMapping */) && maybeTypeOfKind(candidateType, 1024 /* StringLiteral */) || contextualType.flags & 2048 /* NumberLiteral */ && maybeTypeOfKind(candidateType, 2048 /* NumberLiteral */) || contextualType.flags & 4096 /* BigIntLiteral */ && maybeTypeOfKind(candidateType, 4096 /* BigIntLiteral */) || contextualType.flags & 8192 /* BooleanLiteral */ && maybeTypeOfKind(candidateType, 8192 /* BooleanLiteral */) || contextualType.flags & 16384 /* UniqueESSymbol */ && maybeTypeOfKind(candidateType, 16384 /* UniqueESSymbol */)); } return false; } @@ -86180,6 +86349,47 @@ function createTypeChecker(host) { } return void 0; } + function getUninstantiatedSignatures(node) { + switch (node.kind) { + case 214 /* CallExpression */: + case 171 /* Decorator */: + return getSignaturesOfType( + getTypeOfExpression(node.expression), + 0 /* Call */ + ); + case 215 /* NewExpression */: + return getSignaturesOfType( + getTypeOfExpression(node.expression), + 1 /* Construct */ + ); + case 286 /* JsxSelfClosingElement */: + case 287 /* JsxOpeningElement */: + if (isJsxIntrinsicTagName(node.tagName)) return []; + return getSignaturesOfType( + getTypeOfExpression(node.tagName), + 0 /* Call */ + ); + case 216 /* TaggedTemplateExpression */: + return getSignaturesOfType( + getTypeOfExpression(node.tag), + 0 /* Call */ + ); + case 227 /* BinaryExpression */: + case 290 /* JsxOpeningFragment */: + return []; + } + } + function getTypeParameterConstraintForPositionAcrossSignatures(signatures, position) { + const relevantTypeParameterConstraints = flatMap(signatures, (signature) => { + var _a; + const relevantTypeParameter = (_a = signature.typeParameters) == null ? void 0 : _a[position]; + if (relevantTypeParameter === void 0) return []; + const relevantConstraint = getConstraintOfTypeParameter(relevantTypeParameter); + if (relevantConstraint === void 0) return []; + return [relevantConstraint]; + }); + return getUnionType(relevantTypeParameterConstraints); + } function checkTypeReferenceNode(node) { checkGrammarTypeArguments(node, node.typeArguments); if (node.kind === 184 /* TypeReference */ && !isInJSFile(node) && !isInJSDoc(node) && node.typeArguments && node.typeName.end !== node.typeArguments.pos) { @@ -86215,12 +86425,48 @@ function createTypeChecker(host) { } } function getTypeArgumentConstraint(node) { - const typeReferenceNode = tryCast(node.parent, isTypeReferenceType); - if (!typeReferenceNode) return void 0; - const typeParameters = getTypeParametersForTypeReferenceOrImport(typeReferenceNode); - if (!typeParameters) return void 0; - const constraint = getConstraintOfTypeParameter(typeParameters[typeReferenceNode.typeArguments.indexOf(node)]); - return constraint && instantiateType(constraint, createTypeMapper(typeParameters, getEffectiveTypeArguments2(typeReferenceNode, typeParameters))); + let typeArgumentPosition; + if (hasTypeArguments(node.parent) && Array.isArray(node.parent.typeArguments)) { + typeArgumentPosition = node.parent.typeArguments.indexOf(node); + } + if (typeArgumentPosition !== void 0) { + if (isCallLikeExpression(node.parent)) { + return getTypeParameterConstraintForPositionAcrossSignatures( + getUninstantiatedSignatures(node.parent), + typeArgumentPosition + ); + } + if (isDecorator(node.parent.parent)) { + return getTypeParameterConstraintForPositionAcrossSignatures( + getUninstantiatedSignatures(node.parent.parent), + typeArgumentPosition + ); + } + if (isExpressionWithTypeArguments(node.parent) && isExpressionStatement(node.parent.parent)) { + const uninstantiatedType = checkExpression(node.parent.expression); + const callConstraint = getTypeParameterConstraintForPositionAcrossSignatures( + getSignaturesOfType(uninstantiatedType, 0 /* Call */), + typeArgumentPosition + ); + const constructConstraint = getTypeParameterConstraintForPositionAcrossSignatures( + getSignaturesOfType(uninstantiatedType, 1 /* Construct */), + typeArgumentPosition + ); + if (constructConstraint.flags & 262144 /* Never */) return callConstraint; + if (callConstraint.flags & 262144 /* Never */) return constructConstraint; + return getIntersectionType([callConstraint, constructConstraint]); + } + if (isTypeReferenceType(node.parent)) { + const typeParameters = getTypeParametersForTypeReferenceOrImport(node.parent); + if (!typeParameters) return void 0; + const relevantTypeParameter = typeParameters[typeArgumentPosition]; + const constraint = getConstraintOfTypeParameter(relevantTypeParameter); + return constraint && instantiateType( + constraint, + createTypeMapper(typeParameters, getEffectiveTypeArguments2(node.parent, typeParameters)) + ); + } + } } function checkTypeQuery(node) { getTypeFromTypeQueryNode(node); @@ -86278,14 +86524,13 @@ function createTypeChecker(host) { getTypeFromTypeNode(node); } function checkIndexedAccessIndexType(type, accessNode) { - if (!(type.flags & 8388608 /* IndexedAccess */)) { + if (!(type.flags & 33554432 /* IndexedAccess */)) { return type; } const objectType = type.objectType; const indexType = type.indexType; - const objectIndexType = isGenericMappedType(objectType) && getMappedTypeNameTypeKind(objectType) === 2 /* Remapping */ ? getIndexTypeForMappedType(objectType, 0 /* None */) : getIndexType(objectType, 0 /* None */); const hasNumberIndexInfo = !!getIndexInfoOfType(objectType, numberType); - if (everyType(indexType, (t) => isTypeAssignableTo(t, objectIndexType) || hasNumberIndexInfo && isApplicableIndexType(t, numberType))) { + if (everyType(indexType, (t) => isTypeAssignableTo(t, getIndexType(objectType, 0 /* None */)) || hasNumberIndexInfo && isApplicableIndexType(t, numberType))) { if (accessNode.kind === 213 /* ElementAccessExpression */ && isAssignmentTarget(accessNode) && getObjectFlags(objectType) & 32 /* Mapped */ && getMappedTypeModifiers(objectType) & 1 /* IncludeReadonly */) { error2(accessNode, Diagnostics.Index_signature_in_type_0_only_permits_reading, typeToString(objectType)); } @@ -86375,6 +86620,9 @@ function createTypeChecker(host) { function checkImportType(node) { checkSourceElement(node.argument); if (node.attributes) { + if (node.attributes.token !== 118 /* WithKeyword */ && compilerOptions.ignoreDeprecations !== "6.0") { + grammarErrorOnFirstToken(node.attributes, Diagnostics.Import_assertions_have_been_replaced_by_import_attributes_Use_with_instead_of_assert); + } getResolutionModeOverride(node.attributes, grammarErrorOnNode); } checkTypeReferenceOrImport(node); @@ -86712,7 +86960,7 @@ function createTypeChecker(host) { ))) { return typeAsPromise.promisedTypeOfPromise = getTypeArguments(type)[0]; } - if (allTypesAssignableToKind(getBaseConstraintOrType(type), 402784252 /* Primitive */ | 131072 /* Never */)) { + if (allTypesAssignableToKind(getBaseConstraintOrType(type), 12713980 /* Primitive */ | 262144 /* Never */)) { return void 0; } const thenFunction = getTypeOfPropertyOfType(type, "then"); @@ -86764,7 +87012,7 @@ function createTypeChecker(host) { return awaitedType || errorType; } function isThenableType(type) { - if (allTypesAssignableToKind(getBaseConstraintOrType(type), 402784252 /* Primitive */ | 131072 /* Never */)) { + if (allTypesAssignableToKind(getBaseConstraintOrType(type), 12713980 /* Primitive */ | 262144 /* Never */)) { return false; } const thenFunction = getTypeOfPropertyOfType(type, "then"); @@ -86772,7 +87020,7 @@ function createTypeChecker(host) { } function isAwaitedTypeInstantiation(type) { var _a; - if (type.flags & 16777216 /* Conditional */) { + if (type.flags & 67108864 /* Conditional */) { const awaitedSymbol = getGlobalAwaitedSymbol( /*reportErrors*/ false @@ -86782,7 +87030,7 @@ function createTypeChecker(host) { return false; } function unwrapAwaitedType(type) { - return type.flags & 1048576 /* Union */ ? mapType(type, unwrapAwaitedType) : isAwaitedTypeInstantiation(type) ? type.aliasTypeArguments[0] : type; + return type.flags & 134217728 /* Union */ ? mapType(type, unwrapAwaitedType) : isAwaitedTypeInstantiation(type) ? type.aliasTypeArguments[0] : type; } function isAwaitedTypeNeeded(type) { if (isTypeAny(type) || isAwaitedTypeInstantiation(type)) { @@ -86790,7 +87038,7 @@ function createTypeChecker(host) { } if (isGenericObjectType(type)) { const baseConstraint = getBaseConstraintOfType(type); - if (baseConstraint ? baseConstraint.flags & 3 /* AnyOrUnknown */ || isEmptyObjectType(baseConstraint) || someType(baseConstraint, isThenableType) : maybeTypeOfKind(type, 8650752 /* TypeVariable */)) { + if (baseConstraint ? baseConstraint.flags & 3 /* AnyOrUnknown */ || isEmptyObjectType(baseConstraint) || someType(baseConstraint, isThenableType) : maybeTypeOfKind(type, 34078720 /* TypeVariable */)) { return true; } } @@ -86828,7 +87076,7 @@ function createTypeChecker(host) { if (typeAsAwaitable.awaitedTypeOfType) { return typeAsAwaitable.awaitedTypeOfType; } - if (type.flags & 1048576 /* Union */) { + if (type.flags & 134217728 /* Union */) { if (awaitedTypeStack.lastIndexOf(type.id) >= 0) { if (errorNode) { error2(errorNode, Diagnostics.Type_is_referenced_directly_or_indirectly_in_the_fulfillment_callback_of_its_own_then_method); @@ -88039,7 +88287,7 @@ function createTypeChecker(host) { return; } const type = location === condExpr2 ? condType : checkExpression(location); - if (type.flags & 1024 /* EnumLiteral */ && isPropertyAccessExpression(location) && (getNodeLinks(location.expression).resolvedSymbol ?? unknownSymbol).flags & 384 /* Enum */) { + if (type.flags & 32768 /* EnumLiteral */ && isPropertyAccessExpression(location) && (getNodeLinks(location.expression).resolvedSymbol ?? unknownSymbol).flags & 384 /* Enum */) { error2(location, Diagnostics.This_condition_will_always_return_0, !!type.value ? "true" : "false"); return; } @@ -88131,7 +88379,7 @@ function createTypeChecker(host) { checkSourceElement(node.statement); } function checkTruthinessOfType(type, node) { - if (type.flags & 16384 /* Void */) { + if (type.flags & 16 /* Void */) { error2(node, Diagnostics.An_expression_of_type_void_cannot_be_tested_for_truthiness); } else { const semantics = getSyntacticTruthySemantics(node); @@ -88264,7 +88512,7 @@ function createTypeChecker(host) { ); } } - if (rightType === neverType || !isTypeAssignableToKind(rightType, 67108864 /* NonPrimitive */ | 58982400 /* InstantiableNonPrimitive */)) { + if (rightType === neverType || !isTypeAssignableToKind(rightType, 131072 /* NonPrimitive */ | 117964800 /* InstantiableNonPrimitive */)) { error2(node.expression, Diagnostics.The_right_hand_side_of_a_for_in_statement_must_be_of_type_any_an_object_type_or_a_type_parameter_but_here_has_type_0, typeToString(rightType)); } checkSourceElement(node.statement); @@ -88297,7 +88545,11 @@ function createTypeChecker(host) { } return void 0; } - const uplevelIteration = languageVersion >= 2 /* ES2015 */; + const iterableExists = getGlobalIterableType( + /*reportErrors*/ + false + ) !== emptyGenericType; + const uplevelIteration = languageVersion >= 2 /* ES2015 */ && iterableExists; const downlevelIteration = !uplevelIteration && compilerOptions.downlevelIteration; const possibleOutOfBounds = compilerOptions.noUncheckedIndexedAccess && !!(use & 128 /* PossiblyOutOfBounds */); if (uplevelIteration || downlevelIteration || allowAsyncIterables) { @@ -88317,18 +88569,18 @@ function createTypeChecker(host) { let arrayType = inputType; let hasStringConstituent = false; if (use & 4 /* AllowsStringInputFlag */) { - if (arrayType.flags & 1048576 /* Union */) { + if (arrayType.flags & 134217728 /* Union */) { const arrayTypes = inputType.types; - const filteredTypes = filter(arrayTypes, (t) => !(t.flags & 402653316 /* StringLike */)); + const filteredTypes = filter(arrayTypes, (t) => !(t.flags & 12583968 /* StringLike */)); if (filteredTypes !== arrayTypes) { arrayType = getUnionType(filteredTypes, 2 /* Subtype */); } - } else if (arrayType.flags & 402653316 /* StringLike */) { + } else if (arrayType.flags & 12583968 /* StringLike */) { arrayType = neverType; } hasStringConstituent = arrayType !== inputType; if (hasStringConstituent) { - if (arrayType.flags & 131072 /* Never */) { + if (arrayType.flags & 262144 /* Never */) { return possibleOutOfBounds ? includeUndefinedInIndexSignature(stringType) : stringType; } } @@ -88348,7 +88600,7 @@ function createTypeChecker(host) { } const arrayElementType = getIndexTypeOfType(arrayType, numberType); if (hasStringConstituent && arrayElementType) { - if (arrayElementType.flags & 402653316 /* StringLike */ && !compilerOptions.noUncheckedIndexedAccess) { + if (arrayElementType.flags & 12583968 /* StringLike */ && !compilerOptions.noUncheckedIndexedAccess) { return stringType; } return getUnionType(possibleOutOfBounds ? [arrayElementType, stringType, undefinedType] : [arrayElementType, stringType], 2 /* Subtype */); @@ -88399,7 +88651,7 @@ function createTypeChecker(host) { return iterationTypes && iterationTypes[getIterationTypesKeyFromIterationTypeKind(typeKind)]; } function createIterationTypes(yieldType = neverType, returnType = neverType, nextType = unknownType) { - if (yieldType.flags & 67359327 /* Intrinsic */ && returnType.flags & (1 /* Any */ | 131072 /* Never */ | 2 /* Unknown */ | 16384 /* Void */ | 32768 /* Undefined */) && nextType.flags & (1 /* Any */ | 131072 /* Never */ | 2 /* Unknown */ | 16384 /* Void */ | 32768 /* Undefined */)) { + if (yieldType.flags & 402431 /* Intrinsic */ && returnType.flags & (1 /* Any */ | 262144 /* Never */ | 2 /* Unknown */ | 16 /* Void */ | 4 /* Undefined */) && nextType.flags & (1 /* Any */ | 262144 /* Never */ | 2 /* Unknown */ | 16 /* Void */ | 4 /* Undefined */)) { const id = getTypeListId([yieldType, returnType, nextType]); let iterationTypes = iterationTypesCache.get(id); if (!iterationTypes) { @@ -88442,13 +88694,11 @@ function createTypeChecker(host) { } function getIterationTypesOfIterable(type, use, errorNode) { var _a, _b; - if (type === silentNeverType) { - return silentNeverIterationTypes; - } + type = getReducedType(type); if (isTypeAny(type)) { return anyIterationTypes; } - if (!(type.flags & 1048576 /* Union */)) { + if (!(type.flags & 134217728 /* Union */)) { const errorOutputContainer = errorNode ? { errors: void 0, skipLogging: true } : void 0; const iterationTypes2 = getIterationTypesOfIterableWorker(type, use, errorNode, errorOutputContainer); if (iterationTypes2 === noIterationTypes) { @@ -88515,7 +88765,7 @@ function createTypeChecker(host) { } let noCache = false; if (use & 2 /* AllowsAsyncIterablesFlag */) { - const iterationTypes = getIterationTypesOfIterableCached(type, asyncIterationTypesResolver) || getIterationTypesOfIterableFast(type, asyncIterationTypesResolver); + let iterationTypes = getIterationTypesOfIterableCached(type, asyncIterationTypesResolver) || getIterationTypesOfIterableFast(type, asyncIterationTypesResolver); if (iterationTypes) { if (iterationTypes === noIterationTypes && errorNode) { noCache = true; @@ -88523,6 +88773,10 @@ function createTypeChecker(host) { return use & 8 /* ForOfFlag */ ? getAsyncFromSyncIterationTypes(iterationTypes, errorNode) : iterationTypes; } } + iterationTypes = getIterationTypesOfIterableSlow(type, asyncIterationTypesResolver, errorNode, errorOutputContainer, noCache); + if (iterationTypes !== noIterationTypes) { + return iterationTypes; + } } if (use & 1 /* AllowsSyncIterablesFlag */) { let iterationTypes = getIterationTypesOfIterableCached(type, syncIterationTypesResolver) || getIterationTypesOfIterableFast(type, syncIterationTypesResolver); @@ -88540,15 +88794,7 @@ function createTypeChecker(host) { } } } - } - if (use & 2 /* AllowsAsyncIterablesFlag */) { - const iterationTypes = getIterationTypesOfIterableSlow(type, asyncIterationTypesResolver, errorNode, errorOutputContainer, noCache); - if (iterationTypes !== noIterationTypes) { - return iterationTypes; - } - } - if (use & 1 /* AllowsSyncIterablesFlag */) { - let iterationTypes = getIterationTypesOfIterableSlow(type, syncIterationTypesResolver, errorNode, errorOutputContainer, noCache); + iterationTypes = getIterationTypesOfIterableSlow(type, syncIterationTypesResolver, errorNode, errorOutputContainer, noCache); if (iterationTypes !== noIterationTypes) { if (use & 2 /* AllowsAsyncIterablesFlag */) { iterationTypes = getAsyncFromSyncIterationTypes(iterationTypes, errorNode); @@ -88898,7 +89144,7 @@ function createTypeChecker(host) { } function isUnwrappedReturnTypeUndefinedVoidOrAny(func, returnType) { const type = unwrapReturnType(returnType, getFunctionFlags(func)); - return !!(type && (maybeTypeOfKind(type, 16384 /* Void */) || type.flags & (1 /* Any */ | 32768 /* Undefined */))); + return !!(type && (maybeTypeOfKind(type, 16 /* Void */) || type.flags & (1 /* Any */ | 4 /* Undefined */))); } function checkReturnStatement(node) { if (checkGrammarStatementInAmbientContext(node)) { @@ -88915,7 +89161,7 @@ function createTypeChecker(host) { } const signature = getSignatureFromDeclaration(container); const returnType = getReturnTypeOfSignature(signature); - if (strictNullChecks || node.expression || returnType.flags & 131072 /* Never */) { + if (strictNullChecks || node.expression || returnType.flags & 262144 /* Never */) { const exprType = node.expression ? checkExpressionCached(node.expression) : undefinedType; if (container.kind === 179 /* SetAccessor */) { if (node.expression) { @@ -89040,6 +89286,9 @@ function createTypeChecker(host) { return false; }); } + if (node.label.flags & 1073741824 /* Unreachable */ && compilerOptions.allowUnusedLabels !== true) { + errorOrSuggestion(compilerOptions.allowUnusedLabels === false, node.label, Diagnostics.Unused_label); + } checkSourceElement(node.statement); } function checkThrowStatement(node) { @@ -89095,7 +89344,7 @@ function createTypeChecker(host) { if (!(isStaticIndex && prop.flags & 4194304 /* Prototype */)) { checkIndexConstraintForProperty(type, prop, getLiteralTypeFromProperty( prop, - 8576 /* StringOrNumberLiteralOrUnique */, + 19456 /* StringOrNumberLiteralOrUnique */, /*includeNonPublic*/ true ), getNonMissingTypeOfSymbol(prop)); @@ -89169,7 +89418,7 @@ function createTypeChecker(host) { } } function checkClassNameCollisionWithObject(name) { - if (languageVersion >= 1 /* ES5 */ && name.escapedText === "Object" && host.getEmitModuleFormatOfFile(getSourceFileOfNode(name)) < 5 /* ES2015 */) { + if (name.escapedText === "Object" && host.getEmitModuleFormatOfFile(getSourceFileOfNode(name)) < 5 /* ES2015 */) { error2(name, Diagnostics.Class_name_cannot_be_Object_when_targeting_ES5_and_above_with_module_0, ModuleKind[moduleKind]); } } @@ -89241,7 +89490,7 @@ function createTypeChecker(host) { function visit(node) { if (node.kind === 184 /* TypeReference */) { const type = getTypeFromTypeReference(node); - if (type.flags & 262144 /* TypeParameter */) { + if (type.flags & 524288 /* TypeParameter */) { for (let i = index; i < typeParameters.length; i++) { if (type.symbol === getSymbolOfDeclaration(typeParameters[i])) { error2(node, Diagnostics.Type_parameter_defaults_can_only_reference_previously_declared_type_parameters); @@ -89429,7 +89678,7 @@ function createTypeChecker(host) { } else { checkTypeAssignableTo(staticType, getTypeWithoutSignatures(staticBaseType), node.name || node, Diagnostics.Class_static_side_0_incorrectly_extends_base_class_static_side_1); } - if (baseConstructorType.flags & 8650752 /* TypeVariable */) { + if (baseConstructorType.flags & 34078720 /* TypeVariable */) { if (!isMixinConstructorType(staticType)) { error2(node.name || node, Diagnostics.A_mixin_class_must_have_a_constructor_with_a_single_rest_parameter_of_type_any); } else { @@ -89439,7 +89688,7 @@ function createTypeChecker(host) { } } } - if (!(staticBaseType.symbol && staticBaseType.symbol.flags & 32 /* Class */) && !(baseConstructorType.flags & 8650752 /* TypeVariable */)) { + if (!(staticBaseType.symbol && staticBaseType.symbol.flags & 32 /* Class */) && !(baseConstructorType.flags & 34078720 /* TypeVariable */)) { const constructors = getInstantiatedConstructorsForTypeArguments(staticBaseType, baseTypeNode.typeArguments, baseTypeNode); if (forEach(constructors, (sig) => !isJSConstructor(sig.declaration) && !isTypeIdenticalTo(getReturnTypeOfSignature(sig), baseType))) { error2(baseTypeNode.expression, Diagnostics.Base_constructors_must_all_have_the_same_return_type); @@ -90249,12 +90498,7 @@ function createTypeChecker(host) { if (isIdentifier(node.name)) { checkCollisionsForDeclarationName(node, node.name); if (!(node.flags & (32 /* Namespace */ | 2048 /* GlobalAugmentation */))) { - const sourceFile = getSourceFileOfNode(node); - const pos = getNonModifierTokenPosOfNode(node); - const span = getSpanOfTokenAtPosition(sourceFile, pos); - suggestionDiagnostics.add( - createFileDiagnostic(sourceFile, span.start, span.length, Diagnostics.A_namespace_declaration_should_not_be_declared_using_the_module_keyword_Please_use_the_namespace_keyword_instead) - ); + error2(node.name, Diagnostics.A_namespace_declaration_should_not_be_declared_using_the_module_keyword_Please_use_the_namespace_keyword_instead); } } checkExportsOnMergedDeclarations(node); @@ -90568,7 +90812,7 @@ function createTypeChecker(host) { true ); if (importAttributesType !== emptyObjectType) { - checkTypeAssignableTo(getTypeFromImportAttributes(node), getNullableType(importAttributesType, 32768 /* Undefined */), node); + checkTypeAssignableTo(getTypeFromImportAttributes(node), getNullableType(importAttributesType, 4 /* Undefined */), node); } const validForTypeAttributes = isExclusivelyTypeOnlyImportOrExport(declaration); const override = getResolutionModeOverride(node, validForTypeAttributes ? grammarErrorOnNode : void 0); @@ -90585,6 +90829,9 @@ function createTypeChecker(host) { if (102 /* Node20 */ <= moduleKind && moduleKind <= 199 /* NodeNext */ && !isImportAttributes2) { return grammarErrorOnFirstToken(node, Diagnostics.Import_assertions_have_been_replaced_by_import_attributes_Use_with_instead_of_assert); } + if (!isImportAttributes2 && compilerOptions.ignoreDeprecations !== "6.0") { + grammarErrorOnFirstToken(node, Diagnostics.Import_assertions_have_been_replaced_by_import_attributes_Use_with_instead_of_assert); + } if (declaration.moduleSpecifier && getEmitSyntaxForModuleSpecifierExpression(declaration.moduleSpecifier) === 1 /* CommonJS */) { return grammarErrorOnNode( node, @@ -90634,7 +90881,13 @@ function createTypeChecker(host) { error2(node.moduleSpecifier, Diagnostics.Importing_a_JSON_file_into_an_ECMAScript_module_requires_a_type_Colon_json_import_attribute_when_module_is_set_to_0, ModuleKind[moduleKind]); } } else if (noUncheckedSideEffectImports && !importClause) { - void resolveExternalModuleName(node, node.moduleSpecifier); + void resolveExternalModuleName( + node, + node.moduleSpecifier, + /*ignoreErrors*/ + void 0, + Diagnostics.Cannot_find_module_or_type_declarations_for_side_effect_import_of_0 + ); } } checkImportAttributes(node); @@ -90926,10 +91179,12 @@ function createTypeChecker(host) { function checkSourceElement(node) { if (node) { const saveCurrentNode = currentNode; + const saveWithinUnreachableCode = withinUnreachableCode; currentNode = node; instantiationCount = 0; checkSourceElementWorker(node); currentNode = saveCurrentNode; + withinUnreachableCode = saveWithinUnreachableCode; } } function checkSourceElementWorker(node) { @@ -90957,8 +91212,10 @@ function createTypeChecker(host) { cancellationToken.throwIfCancellationRequested(); } } - if (kind >= 244 /* FirstStatement */ && kind <= 260 /* LastStatement */ && canHaveFlowNode(node) && node.flowNode && !isReachableFlowNode(node.flowNode)) { - errorOrSuggestion(compilerOptions.allowUnreachableCode === false, node, Diagnostics.Unreachable_code_detected); + if (compilerOptions.allowUnreachableCode !== true && !withinUnreachableCode) { + if (checkSourceElementUnreachable(node)) { + withinUnreachableCode = true; + } } switch (kind) { case 169 /* TypeParameter */: @@ -91136,6 +91393,66 @@ function createTypeChecker(host) { return checkMissingDeclaration(node); } } + function checkSourceElementUnreachable(node) { + if (!isPotentiallyExecutableNode(node)) { + return false; + } + if (reportedUnreachableNodes == null ? void 0 : reportedUnreachableNodes.has(node)) { + return true; + } + if (!isSourceElementUnreachable(node)) { + return false; + } + (reportedUnreachableNodes ?? (reportedUnreachableNodes = /* @__PURE__ */ new Set())).add(node); + const sourceFile = getSourceFileOfNode(node); + let startNode2 = node; + let endNode2 = node; + const parent2 = node.parent; + if (canHaveStatements(parent2)) { + const statements = parent2.statements; + const offset = statements.indexOf(node); + if (offset >= 0) { + let first2 = offset; + for (let i = offset - 1; i >= 0; i--) { + const prevNode = statements[i]; + if (!isPotentiallyExecutableNode(prevNode) || reportedUnreachableNodes.has(prevNode) || !isSourceElementUnreachable(prevNode)) { + break; + } + first2 = i; + reportedUnreachableNodes.add(prevNode); + } + let last2 = offset; + for (let i = offset + 1; i < statements.length; i++) { + const nextNode = statements[i]; + if (!isPotentiallyExecutableNode(nextNode) || !isSourceElementUnreachable(nextNode)) { + break; + } + last2 = i; + reportedUnreachableNodes.add(nextNode); + } + startNode2 = statements[first2]; + endNode2 = statements[last2]; + } + } + const start = getTokenPosOfNode(startNode2, sourceFile); + addErrorOrSuggestion(compilerOptions.allowUnreachableCode === false, createFileDiagnostic(sourceFile, start, endNode2.end - start, Diagnostics.Unreachable_code_detected)); + return true; + } + function isSourceElementUnreachable(node) { + if (node.flags & 1073741824 /* Unreachable */) { + switch (node.kind) { + case 267 /* EnumDeclaration */: + return !isEnumConst(node) || shouldPreserveConstEnums(compilerOptions); + case 268 /* ModuleDeclaration */: + return isInstantiatedModule(node, shouldPreserveConstEnums(compilerOptions)); + default: + return true; + } + } else if (canHaveFlowNode(node) && node.flowNode) { + return !isReachableFlowNode(node.flowNode); + } + return false; + } function checkJSDocCommentWorker(node) { if (isArray(node)) { forEach(node, (tag) => { @@ -91298,6 +91615,7 @@ function createTypeChecker(host) { mark(afterMark); measure("Check", beforeMark, afterMark); (_b = tracing) == null ? void 0 : _b.pop(); + reportedUnreachableNodes = void 0; } function unusedIsError(kind, isAmbient) { if (isAmbient) { @@ -91969,7 +92287,7 @@ function createTypeChecker(host) { if (isIdentifier(node) && isPropertyAccessExpression(node.parent) && node.parent.name === node) { const keyType = getLiteralTypeFromPropertyName(node); const objectType = getTypeOfExpression(node.parent.expression); - const objectTypes = objectType.flags & 1048576 /* Union */ ? objectType.types : [objectType]; + const objectTypes = objectType.flags & 134217728 /* Union */ ? objectType.types : [objectType]; return flatMap(objectTypes, (t) => filter(getIndexInfosOfType(t), (info) => isApplicableIndexType(keyType, info.keyType))); } return void 0; @@ -92124,7 +92442,7 @@ function createTypeChecker(host) { return getStringLiteralType(name.text); case 168 /* ComputedPropertyName */: const nameType = checkComputedPropertyName(name); - return isTypeAssignableToKind(nameType, 12288 /* ESSymbolLike */) ? nameType : stringType; + return isTypeAssignableToKind(nameType, 16896 /* ESSymbolLike */) ? nameType : stringType; default: return Debug.fail("Unsupported property name."); } @@ -92140,7 +92458,11 @@ function createTypeChecker(host) { } }); } - return getNamedMembers(propsByName); + return getNamedMembers( + propsByName, + /*container*/ + void 0 + ); } function typeHasCallOrConstructSignatures(type) { return getSignaturesOfType(type, 0 /* Call */).length !== 0 || getSignaturesOfType(type, 1 /* Construct */).length !== 0; @@ -92577,7 +92899,7 @@ function createTypeChecker(host) { return void 0; } function isFunctionType(type) { - return !!(type.flags & 524288 /* Object */) && getSignaturesOfType(type, 0 /* Call */).length > 0; + return !!(type.flags & 1048576 /* Object */) && getSignaturesOfType(type, 0 /* Call */).length > 0; } function getTypeReferenceSerializationKind(typeNameIn, location) { var _a; @@ -92645,19 +92967,19 @@ function createTypeChecker(host) { return isTypeOnly ? 11 /* ObjectType */ : 0 /* Unknown */; } else if (type.flags & 3 /* AnyOrUnknown */) { return 11 /* ObjectType */; - } else if (isTypeAssignableToKind(type, 16384 /* Void */ | 98304 /* Nullable */ | 131072 /* Never */)) { + } else if (isTypeAssignableToKind(type, 16 /* Void */ | 12 /* Nullable */ | 262144 /* Never */)) { return 2 /* VoidNullableOrNeverType */; - } else if (isTypeAssignableToKind(type, 528 /* BooleanLike */)) { + } else if (isTypeAssignableToKind(type, 8448 /* BooleanLike */)) { return 6 /* BooleanType */; - } else if (isTypeAssignableToKind(type, 296 /* NumberLike */)) { + } else if (isTypeAssignableToKind(type, 67648 /* NumberLike */)) { return 3 /* NumberLikeType */; - } else if (isTypeAssignableToKind(type, 2112 /* BigIntLike */)) { + } else if (isTypeAssignableToKind(type, 4224 /* BigIntLike */)) { return 4 /* BigIntLikeType */; - } else if (isTypeAssignableToKind(type, 402653316 /* StringLike */)) { + } else if (isTypeAssignableToKind(type, 12583968 /* StringLike */)) { return 5 /* StringLikeType */; } else if (isTupleType(type)) { return 7 /* ArrayLikeType */; - } else if (isTypeAssignableToKind(type, 12288 /* ESSymbolLike */)) { + } else if (isTypeAssignableToKind(type, 16896 /* ESSymbolLike */)) { return 8 /* ESSymbolType */; } else if (isFunctionType(type)) { return 10 /* TypeWithCallSignature */; @@ -92800,7 +93122,7 @@ function createTypeChecker(host) { return false; } function literalTypeToNode(type, enclosing, tracker) { - const enumResult = type.flags & 1056 /* EnumLike */ ? nodeBuilder.symbolToExpression( + const enumResult = type.flags & 98304 /* EnumLike */ ? nodeBuilder.symbolToExpression( type.symbol, 111551 /* Value */, enclosing, @@ -93822,7 +94144,7 @@ function createTypeChecker(host) { return grammarErrorOnNode(parameter.name, Diagnostics.An_index_signature_parameter_must_have_a_type_annotation); } const type = getTypeFromTypeNode(parameter.type); - if (someType(type, (t) => !!(t.flags & 8576 /* StringOrNumberLiteralOrUnique */)) || isGenericType(type)) { + if (someType(type, (t) => !!(t.flags & 19456 /* StringOrNumberLiteralOrUnique */)) || isGenericType(type)) { return grammarErrorOnNode(parameter.name, Diagnostics.An_index_signature_parameter_type_cannot_be_a_literal_type_or_generic_type_Consider_using_a_mapped_object_type_instead); } if (!everyType(type, isValidIndexKeyType)) { @@ -94354,7 +94676,7 @@ function createTypeChecker(host) { } function isSimpleLiteralEnumReference(expr) { if ((isPropertyAccessExpression(expr) || isElementAccessExpression(expr) && isStringOrNumberLiteralExpression(expr.argumentExpression)) && isEntityNameExpression(expr.expression)) { - return !!(checkExpressionCached(expr).flags & 1056 /* EnumLike */); + return !!(checkExpressionCached(expr).flags & 98304 /* EnumLike */); } } function checkAmbientInitializer(node) { @@ -94453,6 +94775,11 @@ function createTypeChecker(host) { declarationList, blockScopeFlags === 4 /* Using */ ? Diagnostics.The_left_hand_side_of_a_for_in_statement_cannot_be_a_using_declaration : Diagnostics.The_left_hand_side_of_a_for_in_statement_cannot_be_an_await_using_declaration ); + } else if (isVariableStatement(declarationList.parent) && isCaseOrDefaultClause(declarationList.parent.parent)) { + return grammarErrorOnNode( + declarationList, + blockScopeFlags === 4 /* Using */ ? Diagnostics.using_declarations_are_not_allowed_in_case_or_default_clauses_unless_contained_within_a_block : Diagnostics.await_using_declarations_are_not_allowed_in_case_or_default_clauses_unless_contained_within_a_block + ); } if (declarationList.flags & 33554432 /* Ambient */) { return grammarErrorOnNode( @@ -94764,9 +95091,9 @@ function createTypeChecker(host) { } function findMatchingTypeReferenceOrTypeAliasReference(source, unionTarget) { const sourceObjectFlags = getObjectFlags(source); - if (sourceObjectFlags & (4 /* Reference */ | 16 /* Anonymous */) && unionTarget.flags & 1048576 /* Union */) { + if (sourceObjectFlags & (4 /* Reference */ | 16 /* Anonymous */) && unionTarget.flags & 134217728 /* Union */) { return find(unionTarget.types, (target) => { - if (target.flags & 524288 /* Object */) { + if (target.flags & 1048576 /* Object */) { const overlapObjFlags = sourceObjectFlags & getObjectFlags(target); if (overlapObjFlags & 4 /* Reference */) { return source.target === target.target; @@ -94793,15 +95120,15 @@ function createTypeChecker(host) { } function findMostOverlappyType(source, unionTarget) { let bestMatch; - if (!(source.flags & (402784252 /* Primitive */ | 406847488 /* InstantiablePrimitive */))) { + if (!(source.flags & (12713980 /* Primitive */ | 14680064 /* InstantiablePrimitive */))) { let matchingCount = 0; for (const target of unionTarget.types) { - if (!(target.flags & (402784252 /* Primitive */ | 406847488 /* InstantiablePrimitive */))) { + if (!(target.flags & (12713980 /* Primitive */ | 14680064 /* InstantiablePrimitive */))) { const overlap = getIntersectionType([getIndexType(source), getIndexType(target)]); - if (overlap.flags & 4194304 /* Index */) { + if (overlap.flags & 2097152 /* Index */) { return target; - } else if (isUnitType(overlap) || overlap.flags & 1048576 /* Union */) { - const len = overlap.flags & 1048576 /* Union */ ? countWhere(overlap.types, isUnitType) : 1; + } else if (isUnitType(overlap) || overlap.flags & 134217728 /* Union */) { + const len = overlap.flags & 134217728 /* Union */ ? countWhere(overlap.types, isUnitType) : 1; if (len >= matchingCount) { bestMatch = target; matchingCount = len; @@ -94813,16 +95140,16 @@ function createTypeChecker(host) { return bestMatch; } function filterPrimitivesIfContainsNonPrimitive(type) { - if (maybeTypeOfKind(type, 67108864 /* NonPrimitive */)) { - const result = filterType(type, (t) => !(t.flags & 402784252 /* Primitive */)); - if (!(result.flags & 131072 /* Never */)) { + if (maybeTypeOfKind(type, 131072 /* NonPrimitive */)) { + const result = filterType(type, (t) => !(t.flags & 12713980 /* Primitive */)); + if (!(result.flags & 262144 /* Never */)) { return result; } } return type; } function findMatchingDiscriminantType(source, target, isRelatedTo) { - if (target.flags & 1048576 /* Union */ && source.flags & (2097152 /* Intersection */ | 524288 /* Object */)) { + if (target.flags & 134217728 /* Union */ && source.flags & (268435456 /* Intersection */ | 1048576 /* Object */)) { const match = getMatchingUnionConstituentForType(target, source); if (match) { return match; @@ -94878,6 +95205,330 @@ function createTypeChecker(host) { Debug.assert(specifier && nodeIsSynthesized(specifier) && specifier.text === "tslib", `Expected sourceFile.imports[0] to be the synthesized tslib import`); return specifier; } + function sortSymbolsIfTSGoCompat(array) { + if (stableTypeOrdering && array) { + return array.sort(compareSymbols); + } + return array; + } + function compareSymbols(s1, s2) { + if (s1 === s2) return 0; + if (s1 === void 0) return 1; + if (s2 === void 0) return -1; + if (length(s1.declarations) !== 0 && length(s2.declarations) !== 0) { + const r2 = compareNodes(s1.declarations[0], s2.declarations[0]); + if (r2 !== 0) return r2; + } else if (length(s1.declarations) !== 0) { + return -1; + } else if (length(s2.declarations) !== 0) { + return 1; + } + const r = compareComparableValues(s1.escapedName, s2.escapedName); + if (r !== 0) return r; + return getSymbolId(s1) - getSymbolId(s2); + } + function compareNodes(n1, n2) { + if (n1 === n2) return 0; + if (n1 === void 0) return 1; + if (n2 === void 0) return -1; + const s1 = getSourceFileOfNode(n1); + const s2 = getSourceFileOfNode(n2); + if (s1 !== s2) { + const f1 = fileIndexMap.get(s1); + const f2 = fileIndexMap.get(s2); + return f1 - f2; + } + return n1.pos - n2.pos; + } + function compareTypes(t1, t2) { + if (t1 === t2) return 0; + if (t1 === void 0) return -1; + if (t2 === void 0) return 1; + let c = getSortOrderFlags(t1) - getSortOrderFlags(t2); + if (c !== 0) return c; + c = compareTypeNames(t1, t2); + if (c !== 0) return c; + if (t1.flags & (1 /* Any */ | 2 /* Unknown */ | 32 /* String */ | 64 /* Number */ | 256 /* Boolean */ | 128 /* BigInt */ | 512 /* ESSymbol */ | 16 /* Void */ | 4 /* Undefined */ | 8 /* Null */ | 262144 /* Never */ | 131072 /* NonPrimitive */)) { + } else if (t1.flags & 1048576 /* Object */) { + const c2 = compareSymbols(t1.symbol, t2.symbol); + if (c2 !== 0) return c2; + if (getObjectFlags(t1) & 4 /* Reference */ && getObjectFlags(t2) & 4 /* Reference */) { + const r1 = t1; + const r2 = t2; + if (getObjectFlags(r1.target) & 8 /* Tuple */ && getObjectFlags(r2.target) & 8 /* Tuple */) { + const c3 = compareTupleTypes(r1.target, r2.target); + if (c3 !== 0) { + return c3; + } + } + if (r1.node === void 0 && r2.node === void 0) { + const c3 = compareTypeLists(t1.resolvedTypeArguments, t2.resolvedTypeArguments); + if (c3 !== 0) { + return c3; + } + } else { + let c3 = compareNodes(r1.node, r2.node); + if (c3 !== 0) { + return c3; + } + c3 = compareTypeMappers(t1.mapper, t2.mapper); + if (c3 !== 0) { + return c3; + } + } + } else if (getObjectFlags(t1) & 4 /* Reference */) { + return -1; + } else if (getObjectFlags(t2) & 4 /* Reference */) { + return 1; + } else { + let c3 = (getObjectFlags(t1) & 142607679 /* ObjectTypeKindMask */) - (getObjectFlags(t2) & 142607679 /* ObjectTypeKindMask */); + if (c3 !== 0) { + return c3; + } + c3 = compareTypeMappers(t1.mapper, t2.mapper); + if (c3 !== 0) { + return c3; + } + } + } else if (t1.flags & 134217728 /* Union */) { + const o1 = t1.origin; + const o2 = t2.origin; + if (o1 === void 0 && o2 === void 0) { + const c2 = compareTypeLists(t1.types, t2.types); + if (c2 !== 0) { + return c2; + } + } else if (o1 === void 0) { + return 1; + } else if (o2 === void 0) { + return -1; + } else { + const c2 = compareTypes(o1, o2); + if (c2 !== 0) { + return c2; + } + } + } else if (t1.flags & 268435456 /* Intersection */) { + const c2 = compareTypeLists(t1.types, t2.types); + if (c2 !== 0) { + return c2; + } + } else if (t1.flags & (65536 /* Enum */ | 32768 /* EnumLiteral */ | 16384 /* UniqueESSymbol */)) { + const c2 = compareSymbols(t1.symbol, t2.symbol); + if (c2 !== 0) { + return c2; + } + } else if (t1.flags & 1024 /* StringLiteral */) { + const c2 = compareComparableValues(t1.value, t2.value); + if (c2 !== 0) { + return c2; + } + } else if (t1.flags & 2048 /* NumberLiteral */) { + const c2 = compareComparableValues(t1.value, t2.value); + if (c2 !== 0) { + return c2; + } + } else if (t1.flags & 8192 /* BooleanLiteral */) { + const b1 = t1.intrinsicName === "true"; + const b2 = t2.intrinsicName === "true"; + if (b1 !== b2) { + if (b1) { + return 1; + } + return -1; + } + } else if (t1.flags & 524288 /* TypeParameter */) { + const c2 = compareSymbols(t1.symbol, t2.symbol); + if (c2 !== 0) { + return c2; + } + } else if (t1.flags & 2097152 /* Index */) { + let c2 = compareTypes(t1.type, t2.type); + if (c2 !== 0) { + return c2; + } + c2 = t1.indexFlags - t2.indexFlags; + if (c2 !== 0) { + return c2; + } + } else if (t1.flags & 33554432 /* IndexedAccess */) { + let c2 = compareTypes(t1.objectType, t2.objectType); + if (c2 !== 0) { + return c2; + } + c2 = compareTypes(t1.indexType, t2.indexType); + if (c2 !== 0) { + return c2; + } + } else if (t1.flags & 67108864 /* Conditional */) { + let c2 = compareNodes(t1.root.node, t2.root.node); + if (c2 !== 0) { + return c2; + } + c2 = compareTypeMappers(t1.mapper, t2.mapper); + if (c2 !== 0) { + return c2; + } + } else if (t1.flags & 16777216 /* Substitution */) { + let c2 = compareTypes(t1.baseType, t2.baseType); + if (c2 !== 0) { + return c2; + } + c2 = compareTypes(t1.constraint, t2.constraint); + if (c2 !== 0) { + return c2; + } + } else if (t1.flags & 4194304 /* TemplateLiteral */) { + let c2 = slicesCompareString(t1.texts, t2.texts); + if (c2 !== 0) { + return c2; + } + c2 = compareTypeLists(t1.types, t2.types); + if (c2 !== 0) { + return c2; + } + } else if (t1.flags & 8388608 /* StringMapping */) { + const c2 = compareTypes(t1.type, t2.type); + if (c2 !== 0) { + return c2; + } + } + return t1.id - t2.id; + function slicesCompareString(s1, s2) { + for (let i = 0; i < s1.length; i++) { + if (i > s2.length) { + return 1; + } + const v1 = s1[i]; + const v2 = s2[i]; + const c2 = compareComparableValues(v1, v2); + if (c2 !== 0) return c2; + } + if (s1.length < s2.length) { + return -1; + } + return 0; + } + } + function getSortOrderFlags(t) { + if (t.flags & (32768 /* EnumLiteral */ | 65536 /* Enum */) && !(t.flags & 134217728 /* Union */)) { + return 65536 /* Enum */; + } + return t.flags; + } + function compareTypeNames(t1, t2) { + const s1 = getTypeNameSymbol(t1); + const s2 = getTypeNameSymbol(t2); + if (s1 === s2) { + if (t1.aliasTypeArguments !== void 0) { + return compareTypeLists(t1.aliasTypeArguments, t2.aliasTypeArguments); + } + return 0; + } + if (s1 === void 0) { + return 1; + } + if (s2 === void 0) { + return -1; + } + return compareComparableValues(s1.escapedName, s2.escapedName); + } + function getTypeNameSymbol(t) { + if (t.aliasSymbol !== void 0) { + return t.aliasSymbol; + } + if (t.flags & (524288 /* TypeParameter */ | 8388608 /* StringMapping */) || getObjectFlags(t) & (3 /* ClassOrInterface */ | 4 /* Reference */)) { + return t.symbol; + } + return void 0; + } + function compareTupleTypes(t1, t2) { + var _a; + if (t1 === t2) { + return 0; + } + if (t1.readonly !== t2.readonly) { + return t1.readonly ? 1 : -1; + } + if (t1.elementFlags.length !== t2.elementFlags.length) { + return t1.elementFlags.length - t2.elementFlags.length; + } + for (let i = 0; i < t1.elementFlags.length; i++) { + const c = t1.elementFlags[i] - t2.elementFlags[i]; + if (c !== 0) { + return c; + } + } + for (let i = 0; i < (((_a = t1.labeledElementDeclarations) == null ? void 0 : _a.length) ?? 0); i++) { + const c = compareElementLabels(t1.labeledElementDeclarations[i], t2.labeledElementDeclarations[i]); + if (c !== 0) { + return c; + } + } + return 0; + } + function compareElementLabels(n1, n2) { + if (n1 === n2) { + return 0; + } + if (n1 === void 0) { + return -1; + } + if (n2 === void 0) { + return 1; + } + return compareComparableValues(n1.name.escapedText, n2.name.escapedText); + } + function compareTypeLists(s1, s2) { + if (length(s1) !== length(s2)) { + return length(s1) - length(s2); + } + for (let i = 0; i < length(s1); i++) { + const c = compareTypes(s1[i], s2 == null ? void 0 : s2[i]); + if (c !== 0) return c; + } + return 0; + } + function compareTypeMappers(m1, m2) { + if (m1 === m2) { + return 0; + } + if (m1 === void 0) { + return 1; + } + if (m2 === void 0) { + return -1; + } + const kind1 = m1.kind; + const kind2 = m2.kind; + if (kind1 !== kind2) { + return kind1 - kind2; + } + switch (kind1) { + case 0 /* Simple */: { + const c = compareTypes(m1.source, m2.source); + if (c !== 0) { + return c; + } + return compareTypes(m1.target, m2.target); + } + case 1 /* Array */: { + const c = compareTypeLists(m1.sources, m2.sources); + if (c !== 0) { + return c; + } + return compareTypeLists(m1.targets, m2.targets); + } + case 5 /* Merged */: { + const c = compareTypeMappers(m1.mapper1, m2.mapper1); + if (c !== 0) { + return c; + } + return compareTypeMappers(m1.mapper2, m2.mapper2); + } + } + return 0; + } } function isNotAccessor(declaration) { return !isAccessor(declaration); @@ -94942,7 +95593,7 @@ function createBasicNodeBuilderModuleSpecifierResolutionHost(host) { isSourceOfProjectReferenceRedirect: (fileName) => host.isSourceOfProjectReferenceRedirect(fileName), fileExists: (fileName) => host.fileExists(fileName), getFileIncludeReasons: () => host.getFileIncludeReasons(), - readFile: host.readFile ? (fileName) => host.readFile(fileName) : void 0, + readFile: host.readFile ? ((fileName) => host.readFile(fileName)) : void 0, getDefaultResolutionModeForFile: (file) => host.getDefaultResolutionModeForFile(file), getModeForResolutionAtIndex: (file, index) => host.getModeForResolutionAtIndex(file, index), getGlobalTypingsCacheLocation: maybeBind(host, host.getGlobalTypingsCacheLocation) @@ -95001,11 +95652,11 @@ var SymbolTrackerImpl = class _SymbolTrackerImpl { this.inner.reportCyclicStructureError(); } } - reportLikelyUnsafeImportRequiredError(specifier) { + reportLikelyUnsafeImportRequiredError(specifier, symbolName2) { var _a; if ((_a = this.inner) == null ? void 0 : _a.reportLikelyUnsafeImportRequiredError) { this.onDiagnosticReported(); - this.inner.reportLikelyUnsafeImportRequiredError(specifier); + this.inner.reportLikelyUnsafeImportRequiredError(specifier, symbolName2); } } reportTruncationError() { @@ -98552,7 +99203,7 @@ function transformTypeScript(context) { } } function visitSourceFile(node) { - const alwaysStrict = getStrictOptionValue(compilerOptions, "alwaysStrict") && !(isExternalModule(node) && moduleKind >= 5 /* ES2015 */) && !isJsonSourceFile(node); + const alwaysStrict = getAlwaysStrict(compilerOptions) && !(isExternalModule(node) && moduleKind >= 5 /* ES2015 */) && !isJsonSourceFile(node); return factory2.updateSourceFile( node, visitLexicalEnvironment( @@ -98597,7 +99248,7 @@ function transformTypeScript(context) { } function visitClassDeclaration(node) { const facts = getClassFacts(node); - const promoteToIIFE = languageVersion <= 1 /* ES5 */ && !!(facts & 7 /* MayNeedImmediatelyInvokedFunctionExpression */); + const promoteToIIFE = languageVersion < 2 /* ES2015 */ && !!(facts & 7 /* MayNeedImmediatelyInvokedFunctionExpression */); if (!isClassLikeDeclarationWithTypeScriptSyntax(node) && !classOrConstructorParameterIsDecorated(legacyDecorators, node) && !isExportOfNamespace(node)) { return factory2.updateClassDeclaration( node, @@ -98732,6 +99383,9 @@ function transformTypeScript(context) { const parametersWithPropertyAssignments = constructor && filter(constructor.parameters, (p) => isParameterPropertyDeclaration(p, constructor)); if (parametersWithPropertyAssignments) { for (const parameter of parametersWithPropertyAssignments) { + if (!isIdentifier(parameter.name)) { + continue; + } const parameterProperty = factory2.createPropertyDeclaration( /*modifiers*/ void 0, @@ -103830,7 +104484,7 @@ function transformESDecorators(context) { } else { Debug.assertIsDefined(node.name, "A class declaration that is not a default export must have a name."); const iife = transformClassLike(node); - const modifierVisitorNoExport = isExport ? (node2) => isExportModifier(node2) ? void 0 : modifierVisitor(node2) : modifierVisitor; + const modifierVisitorNoExport = isExport ? ((node2) => isExportModifier(node2) ? void 0 : modifierVisitor(node2)) : modifierVisitor; const modifiers = visitNodes2(node.modifiers, modifierVisitorNoExport, isModifier); const declName = factory2.getLocalName( node, @@ -107473,8 +108127,6 @@ function transformESNext(context) { return visitForStatement(node); case 251 /* ForOfStatement */: return visitForOfStatement(node); - case 256 /* SwitchStatement */: - return visitSwitchStatement(node); default: return visitEachChild(node, visitor, context); } @@ -107638,60 +108290,6 @@ function transformESNext(context) { } return visitEachChild(node, visitor, context); } - function visitCaseOrDefaultClause(node, envBinding) { - if (getUsingKindOfStatements(node.statements) !== 0 /* None */) { - if (isCaseClause(node)) { - return factory2.updateCaseClause( - node, - visitNode(node.expression, visitor, isExpression), - transformUsingDeclarations( - node.statements, - /*start*/ - 0, - node.statements.length, - envBinding, - /*topLevelStatements*/ - void 0 - ) - ); - } else { - return factory2.updateDefaultClause( - node, - transformUsingDeclarations( - node.statements, - /*start*/ - 0, - node.statements.length, - envBinding, - /*topLevelStatements*/ - void 0 - ) - ); - } - } - return visitEachChild(node, visitor, context); - } - function visitSwitchStatement(node) { - const usingKind = getUsingKindOfCaseOrDefaultClauses(node.caseBlock.clauses); - if (usingKind) { - const envBinding = createEnvBinding(); - return createDownlevelUsingStatements( - [ - factory2.updateSwitchStatement( - node, - visitNode(node.expression, visitor, isExpression), - factory2.updateCaseBlock( - node.caseBlock, - node.caseBlock.clauses.map((clause) => visitCaseOrDefaultClause(clause, envBinding)) - ) - ) - ], - envBinding, - usingKind === 2 /* Async */ - ); - } - return visitEachChild(node, visitor, context); - } function transformUsingDeclarations(statementsIn, start, end, envBinding, topLevelStatements) { const statements = []; for (let i = start; i < end; i++) { @@ -108057,15 +108655,6 @@ function getUsingKindOfStatements(statements) { } return result; } -function getUsingKindOfCaseOrDefaultClauses(clauses) { - let result = 0 /* None */; - for (const clause of clauses) { - const usingKind = getUsingKindOfStatements(clause.statements); - if (usingKind === 2 /* Async */) return 2 /* Async */; - if (usingKind > result) result = usingKind; - } - return result; -} // src/compiler/transformers/jsx.ts function transformJsx(context) { @@ -108296,7 +108885,7 @@ function transformJsx(context) { node.children, isChild, /*location*/ - node + createRange(skipTrivia(currentSourceFile.text, node.pos), node.end) ); } function visitJsxSelfClosingElement(node, isChild) { @@ -108307,7 +108896,7 @@ function transformJsx(context) { void 0, isChild, /*location*/ - node + createRange(skipTrivia(currentSourceFile.text, node.pos), node.end) ); } function visitJsxFragment(node, isChild) { @@ -108317,7 +108906,7 @@ function transformJsx(context) { node.children, isChild, /*location*/ - node + createRange(skipTrivia(currentSourceFile.text, node.pos), node.end) ); } function convertJsxChildrenToChildrenPropObject(children) { @@ -114393,7 +114982,7 @@ function transformModule(context) { function transformCommonJSModule(node) { startLexicalEnvironment(); const statements = []; - const ensureUseStrict = getStrictOptionValue(compilerOptions, "alwaysStrict") || isExternalModule(currentSourceFile); + const ensureUseStrict = getAlwaysStrict(compilerOptions) || isExternalModule(currentSourceFile); const statementOffset = factory2.copyPrologue(node.statements, statements, ensureUseStrict && !isJsonSourceFile(node), topLevelVisitor); if (shouldEmitUnderscoreUnderscoreESModule()) { append(statements, createUnderscoreUnderscoreESModule()); @@ -116406,7 +116995,7 @@ function transformSystemModule(context) { function createSystemModuleBody(node, dependencyGroups) { const statements = []; startLexicalEnvironment(); - const ensureUseStrict = getStrictOptionValue(compilerOptions, "alwaysStrict") || isExternalModule(currentSourceFile); + const ensureUseStrict = getAlwaysStrict(compilerOptions) || isExternalModule(currentSourceFile); const statementOffset = factory2.copyPrologue(node.statements, statements, ensureUseStrict, topLevelVisitor); statements.push( factory2.createVariableStatement( @@ -118622,9 +119211,13 @@ function transformDeclarations(context) { context.addDiagnostic(createDiagnosticForNode(errorNameNode || errorFallbackNode, Diagnostics.The_inferred_type_of_0_references_an_inaccessible_1_type_A_type_annotation_is_necessary, errorDeclarationNameWithFallback(), "this")); } } - function reportLikelyUnsafeImportRequiredError(specifier) { + function reportLikelyUnsafeImportRequiredError(specifier, symbolName2) { if (errorNameNode || errorFallbackNode) { - context.addDiagnostic(createDiagnosticForNode(errorNameNode || errorFallbackNode, Diagnostics.The_inferred_type_of_0_cannot_be_named_without_a_reference_to_1_This_is_likely_not_portable_A_type_annotation_is_necessary, errorDeclarationNameWithFallback(), specifier)); + if (symbolName2) { + context.addDiagnostic(createDiagnosticForNode(errorNameNode || errorFallbackNode, Diagnostics.The_inferred_type_of_0_cannot_be_named_without_a_reference_to_2_from_1_This_is_likely_not_portable_A_type_annotation_is_necessary, errorDeclarationNameWithFallback(), specifier, symbolName2)); + } else { + context.addDiagnostic(createDiagnosticForNode(errorNameNode || errorFallbackNode, Diagnostics.The_inferred_type_of_0_cannot_be_named_without_a_reference_to_1_This_is_likely_not_portable_A_type_annotation_is_necessary, errorDeclarationNameWithFallback(), specifier)); + } } } function reportTruncationError() { @@ -118669,11 +119262,9 @@ function transformDeclarations(context) { rawReferencedFiles = []; rawTypeReferenceDirectives = []; rawLibReferenceDirectives = []; - let hasNoDefaultLib = false; const bundle = factory2.createBundle( map(node.sourceFiles, (sourceFile) => { if (sourceFile.isDeclarationFile) return void 0; - hasNoDefaultLib = hasNoDefaultLib || sourceFile.hasNoDefaultLib; currentSourceFile = sourceFile; enclosingDeclaration = sourceFile; lateMarkedStatements = void 0; @@ -118734,7 +119325,6 @@ function transformDeclarations(context) { bundle.syntheticFileReferences = getReferencedFiles(outputFilePath2); bundle.syntheticTypeReferences = getTypeReferences(); bundle.syntheticLibReferences = getLibReferences(); - bundle.hasNoDefaultLib = hasNoDefaultLib; return bundle; } needsDeclare = true; @@ -118775,7 +119365,8 @@ function transformDeclarations(context) { true, getReferencedFiles(outputFilePath), getTypeReferences(), - node.hasNoDefaultLib, + /*hasNoDefaultLib*/ + false, getLibReferences() ); function collectFileReferences(sourceFile) { @@ -119799,6 +120390,7 @@ function transformDeclarations(context) { if (isOmittedExpression(elem)) continue; if (isBindingPattern(elem.name)) { elems = concatenate(elems, walkBindingPattern(elem.name)); + continue; } elems = elems || []; elems.push(factory2.createPropertyDeclaration( @@ -120685,7 +121277,7 @@ function getCommonSourceDirectory(options, emittedFiles, currentDirectory, getCa if (options.rootDir) { commonSourceDirectory = getNormalizedAbsolutePath(options.rootDir, currentDirectory); checkSourceFilesBelongToPath == null ? void 0 : checkSourceFilesBelongToPath(options.rootDir); - } else if (options.composite && options.configFilePath) { + } else if (options.configFilePath) { commonSourceDirectory = getDirectoryPath(normalizeSlashes(options.configFilePath)); checkSourceFilesBelongToPath == null ? void 0 : checkSourceFilesBelongToPath(commonSourceDirectory); } else { @@ -120696,6 +121288,13 @@ function getCommonSourceDirectory(options, emittedFiles, currentDirectory, getCa } return commonSourceDirectory; } +function getComputedCommonSourceDirectory(emittedFiles, currentDirectory, getCanonicalFileName) { + let commonSourceDirectory = computeCommonSourceDirectoryOfFilenames(emittedFiles, currentDirectory, getCanonicalFileName); + if (commonSourceDirectory && commonSourceDirectory[commonSourceDirectory.length - 1] !== directorySeparator) { + commonSourceDirectory += directorySeparator; + } + return commonSourceDirectory; +} function getCommonSourceDirectoryOfConfig({ options, fileNames }, ignoreCase) { return getCommonSourceDirectory( options, @@ -122440,7 +123039,7 @@ function createPrinter(printerOptions = {}, handlers = {}) { increaseIndent(); } const preferNewLine = node.multiLine ? 65536 /* PreferNewLine */ : 0 /* None */; - const allowTrailingComma = currentSourceFile && currentSourceFile.languageVersion >= 1 /* ES5 */ && !isJsonSourceFile(currentSourceFile) ? 64 /* AllowTrailingComma */ : 0 /* None */; + const allowTrailingComma = currentSourceFile && !isJsonSourceFile(currentSourceFile) ? 64 /* AllowTrailingComma */ : 0 /* None */; emitList(node, node.properties, 526226 /* ObjectLiteralExpressionProperties */ | allowTrailingComma | preferNewLine); if (indentedFlag) { decreaseIndent(); @@ -123945,16 +124544,12 @@ function createPrinter(printerOptions = {}, handlers = {}) { emitSourceFileWorker(node); } function emitSyntheticTripleSlashReferencesIfNeeded(node) { - emitTripleSlashDirectives(!!node.hasNoDefaultLib, node.syntheticFileReferences || [], node.syntheticTypeReferences || [], node.syntheticLibReferences || []); + emitTripleSlashDirectives(node.syntheticFileReferences || [], node.syntheticTypeReferences || [], node.syntheticLibReferences || []); } function emitTripleSlashDirectivesIfNeeded(node) { - if (node.isDeclarationFile) emitTripleSlashDirectives(node.hasNoDefaultLib, node.referencedFiles, node.typeReferenceDirectives, node.libReferenceDirectives); + if (node.isDeclarationFile) emitTripleSlashDirectives(node.referencedFiles, node.typeReferenceDirectives, node.libReferenceDirectives); } - function emitTripleSlashDirectives(hasNoDefaultLib, files, types, libs2) { - if (hasNoDefaultLib) { - writeComment(`/// <reference no-default-lib="true"/>`); - writeLine(); - } + function emitTripleSlashDirectives(files, types, libs2) { if (currentSourceFile && currentSourceFile.moduleName) { writeComment(`/// <amd-module name="${currentSourceFile.moduleName}" />`); writeLine(); @@ -126947,7 +127542,6 @@ function createProgram(_rootNamesOrOptions, _options, _host, _oldProgram, _confi mark("beforeProgram"); const host = createProgramOptionsHost || createCompilerHost(options); const configParsingHost = parseConfigHostFromCompilerHostLike(host); - let skipDefaultLib = options.noLib; const getDefaultLibraryFileName = memoize(() => host.getDefaultLibFileName(options)); const defaultLibraryPath = host.getDefaultLibLocation ? host.getDefaultLibLocation() : getDirectoryPath(getDefaultLibraryFileName()); let skipVerifyCompilerOptions = false; @@ -127035,6 +127629,7 @@ function createProgram(_rootNamesOrOptions, _options, _host, _oldProgram, _confi let redirectTargetsMap = createMultiMap(); let usesUriStyleNodeCoreModules; const filesByName = /* @__PURE__ */ new Map(); + const libFiles = /* @__PURE__ */ new Set(); let missingFileNames = /* @__PURE__ */ new Map(); const filesByNameIgnoreCase = host.useCaseSensitiveFileNames() ? /* @__PURE__ */ new Map() : void 0; let resolvedProjectReferences; @@ -127096,8 +127691,6 @@ function createProgram(_rootNamesOrOptions, _options, _host, _oldProgram, _confi name, /*isDefaultLib*/ false, - /*ignoreNoDefaultLib*/ - false, { kind: 0 /* RootFile */, index } )); (_j = tracing) == null ? void 0 : _j.pop(); @@ -127129,15 +127722,14 @@ function createProgram(_rootNamesOrOptions, _options, _host, _oldProgram, _confi } (_n = tracing) == null ? void 0 : _n.pop(); } - if (rootNames.length && !skipDefaultLib) { + if (rootNames.length && !options.noLib) { const defaultLibraryFileName = getDefaultLibraryFileName(); if (!options.lib && defaultLibraryFileName) { + libFiles.add(toPath3(defaultLibraryFileName)); processRootFile( defaultLibraryFileName, /*isDefaultLib*/ true, - /*ignoreNoDefaultLib*/ - false, { kind: 6 /* LibFile */ } ); } else { @@ -127146,8 +127738,6 @@ function createProgram(_rootNamesOrOptions, _options, _host, _oldProgram, _confi pathForLibFile(libFileName), /*isDefaultLib*/ true, - /*ignoreNoDefaultLib*/ - false, { kind: 6 /* LibFile */, index } ); }); @@ -127658,8 +128248,6 @@ function createProgram(_rootNamesOrOptions, _options, _host, _oldProgram, _confi structureIsReused = 1 /* SafeModules */; } else if (!arrayIsEqualTo(oldSourceFile.libReferenceDirectives, newSourceFile.libReferenceDirectives, fileReferenceIsEqualTo)) { structureIsReused = 1 /* SafeModules */; - } else if (oldSourceFile.hasNoDefaultLib !== newSourceFile.hasNoDefaultLib) { - structureIsReused = 1 /* SafeModules */; } else if (!arrayIsEqualTo(oldSourceFile.referencedFiles, newSourceFile.referencedFiles, fileReferenceIsEqualTo)) { structureIsReused = 1 /* SafeModules */; } else { @@ -127730,6 +128318,9 @@ function createProgram(_rootNamesOrOptions, _options, _host, _oldProgram, _confi Debug.assert(newSourceFiles.length === oldProgram.getSourceFiles().length); for (const newSourceFile of newSourceFiles) { filesByName.set(newSourceFile.path, newSourceFile); + if (oldProgram.isSourceFileDefaultLibrary(newSourceFile)) { + libFiles.add(newSourceFile.path); + } } const oldFilesByNameMap = oldProgram.getFilesByNameMap(); oldFilesByNameMap.forEach((oldFile, path) => { @@ -127841,24 +128432,7 @@ function createProgram(_rootNamesOrOptions, _options, _host, _oldProgram, _confi return !!sourceFilesFoundSearchingNodeModules.get(file.path); } function isSourceFileDefaultLibrary(file) { - if (!file.isDeclarationFile) { - return false; - } - if (file.hasNoDefaultLib) { - return true; - } - if (options.noLib) { - return false; - } - const equalityComparer = host.useCaseSensitiveFileNames() ? equateStringsCaseSensitive : equateStringsCaseInsensitive; - if (!options.lib) { - return equalityComparer(file.fileName, getDefaultLibraryFileName()); - } else { - return some(options.lib, (libFileName) => { - const resolvedLib = resolvedLibReferences.get(libFileName); - return !!resolvedLib && equalityComparer(file.fileName, resolvedLib.actual); - }); - } + return libFiles.has(file.path); } function getTypeChecker() { return typeChecker || (typeChecker = createTypeChecker(program)); @@ -128339,11 +128913,10 @@ function createProgram(_rootNamesOrOptions, _options, _host, _oldProgram, _confi function getConfigFileParsingDiagnostics2() { return configFileParsingDiagnostics || emptyArray; } - function processRootFile(fileName, isDefaultLib, ignoreNoDefaultLib, reason) { + function processRootFile(fileName, isDefaultLib, reason) { processSourceFile( normalizePath(fileName), isDefaultLib, - ignoreNoDefaultLib, /*packageId*/ void 0, reason @@ -128508,10 +129081,10 @@ function createProgram(_rootNamesOrOptions, _options, _host, _oldProgram, _confi return sourceFileWithAddedExtension; } } - function processSourceFile(fileName, isDefaultLib, ignoreNoDefaultLib, packageId, reason) { + function processSourceFile(fileName, isDefaultLib, packageId, reason) { getSourceFileFromReferenceWorker( fileName, - (fileName2) => findSourceFile(fileName2, isDefaultLib, ignoreNoDefaultLib, reason, packageId), + (fileName2) => findSourceFile(fileName2, isDefaultLib, reason, packageId), // TODO: GH#18217 (diagnostic, ...args) => addFilePreprocessingFileExplainingDiagnostic( /*file*/ @@ -128528,8 +129101,6 @@ function createProgram(_rootNamesOrOptions, _options, _host, _oldProgram, _confi fileName, /*isDefaultLib*/ false, - /*ignoreNoDefaultLib*/ - false, /*packageId*/ void 0, reason @@ -128555,14 +129126,14 @@ function createProgram(_rootNamesOrOptions, _options, _host, _oldProgram, _confi sourceFilesFoundSearchingNodeModules.set(path, currentNodeModulesDepth > 0); return redirect; } - function findSourceFile(fileName, isDefaultLib, ignoreNoDefaultLib, reason, packageId) { + function findSourceFile(fileName, isDefaultLib, reason, packageId) { var _a2, _b2; (_a2 = tracing) == null ? void 0 : _a2.push(tracing.Phase.Program, "findSourceFile", { fileName, isDefaultLib: isDefaultLib || void 0, fileIncludeKind: FileIncludeKind[reason.kind] }); - const result = findSourceFileWorker(fileName, isDefaultLib, ignoreNoDefaultLib, reason, packageId); + const result = findSourceFileWorker(fileName, isDefaultLib, reason, packageId); (_b2 = tracing) == null ? void 0 : _b2.pop(); return result; } @@ -128572,7 +129143,7 @@ function createProgram(_rootNamesOrOptions, _options, _host, _oldProgram, _confi const setExternalModuleIndicator2 = getSetExternalModuleIndicator(options2); return typeof result === "object" ? { ...result, languageVersion, setExternalModuleIndicator: setExternalModuleIndicator2, jsDocParsingMode: host2.jsDocParsingMode } : { languageVersion, impliedNodeFormat: result, setExternalModuleIndicator: setExternalModuleIndicator2, jsDocParsingMode: host2.jsDocParsingMode }; } - function findSourceFileWorker(fileName, isDefaultLib, ignoreNoDefaultLib, reason, packageId) { + function findSourceFileWorker(fileName, isDefaultLib, reason, packageId) { var _a2, _b2; const path = toPath3(fileName); if (useSourceOfProjectReferenceRedirect) { @@ -128582,7 +129153,7 @@ function createProgram(_rootNamesOrOptions, _options, _host, _oldProgram, _confi if (realPath2 !== path) source = getRedirectFromOutput(realPath2); } if (source == null ? void 0 : source.source) { - const file2 = findSourceFile(source.source, isDefaultLib, ignoreNoDefaultLib, reason, packageId); + const file2 = findSourceFile(source.source, isDefaultLib, reason, packageId); if (file2) addFileToFilesByName( file2, path, @@ -128702,7 +129273,6 @@ function createProgram(_rootNamesOrOptions, _options, _host, _oldProgram, _confi filesByNameIgnoreCase.set(pathLowerCase, file); } } - skipDefaultLib = skipDefaultLib || file.hasNoDefaultLib && !ignoreNoDefaultLib; if (!options.noResolve) { processReferencedFiles(file, isDefaultLib); processTypeReferenceDirectives(file); @@ -128763,8 +129333,6 @@ function createProgram(_rootNamesOrOptions, _options, _host, _oldProgram, _confi processSourceFile( resolveTripleslashReference(ref.fileName, file.fileName), isDefaultLib, - /*ignoreNoDefaultLib*/ - false, /*packageId*/ void 0, { kind: 4 /* ReferenceFile */, file: file.path, index } @@ -128805,8 +129373,6 @@ function createProgram(_rootNamesOrOptions, _options, _host, _oldProgram, _confi resolvedTypeReferenceDirective.resolvedFileName, /*isDefaultLib*/ false, - /*ignoreNoDefaultLib*/ - false, resolvedTypeReferenceDirective.packageId, reason ); @@ -128826,13 +129392,14 @@ function createProgram(_rootNamesOrOptions, _options, _host, _oldProgram, _confi if (existing) return existing.actual; const result = pathForLibFileWorker(libFileName); (resolvedLibReferences ?? (resolvedLibReferences = /* @__PURE__ */ new Map())).set(libFileName, result); + libFiles.add(toPath3(result.actual)); return result.actual; } function pathForLibFileWorker(libFileName) { var _a2, _b2, _c2, _d2, _e2; const existing = resolvedLibProcessing == null ? void 0 : resolvedLibProcessing.get(libFileName); if (existing) return existing; - if (options.libReplacement === false) { + if (!options.libReplacement) { const result2 = { resolution: { resolvedModule: void 0 @@ -128884,8 +129451,6 @@ function createProgram(_rootNamesOrOptions, _options, _host, _oldProgram, _confi pathForLibFile(libFileName), /*isDefaultLib*/ true, - /*ignoreNoDefaultLib*/ - true, { kind: 7 /* LibReferenceDirective */, file: file.path, index } ); } else { @@ -128933,8 +129498,6 @@ function createProgram(_rootNamesOrOptions, _options, _host, _oldProgram, _confi resolvedFileName, /*isDefaultLib*/ false, - /*ignoreNoDefaultLib*/ - false, { kind: 3 /* Import */, file: file.path, index }, resolution.packageId ); @@ -129038,10 +129601,9 @@ function createProgram(_rootNamesOrOptions, _options, _host, _oldProgram, _confi } const getCommonSourceDirectory3 = memoize(() => getCommonSourceDirectoryOfConfig(resolvedRef.commandLine, !host.useCaseSensitiveFileNames())); commandLine.fileNames.forEach((fileName) => { - if (isDeclarationFileName(fileName)) return; const path = toPath3(fileName); let outputDts; - if (!fileExtensionIs(fileName, ".json" /* Json */)) { + if (!isDeclarationFileName(fileName) && !fileExtensionIs(fileName, ".json" /* Json */)) { if (!commandLine.options.outFile) { outputDts = getOutputDeclarationFileName(fileName, resolvedRef.commandLine, !host.useCaseSensitiveFileNames(), getCommonSourceDirectory3); mapOutputFileToResolvedRef.set(toPath3(outputDts), { resolvedRef, source: fileName }); @@ -129225,6 +129787,31 @@ function createProgram(_rootNamesOrOptions, _options, _host, _oldProgram, _confi createDiagnosticForOptionName(Diagnostics.Cannot_find_the_common_subdirectory_path_for_the_input_files, "outDir"); } } + if (!options.noEmit && !options.composite && !options.rootDir && options.configFilePath && (options.outDir || // there is --outDir specified + getEmitDeclarations(options) && options.declarationDir || // there is --declarationDir specified + options.outFile)) { + const dir = getCommonSourceDirectory2(); + const emittedFiles = mapDefined(files, (file) => !file.isDeclarationFile && sourceFileMayBeEmitted(file, program) ? file.fileName : void 0); + const dir59 = getComputedCommonSourceDirectory(emittedFiles, currentDirectory, getCanonicalFileName); + if (dir59 !== "" && getCanonicalFileName(dir) !== getCanonicalFileName(dir59)) { + createDiagnosticForOption( + /*onKey*/ + true, + options.outFile ? "outFile" : options.outDir ? "outDir" : "declarationDir", + !options.outFile && options.outDir ? "declarationDir" : void 0, + chainDiagnosticMessages( + chainDiagnosticMessages( + /*details*/ + void 0, + Diagnostics.Visit_https_Colon_Slash_Slashaka_ms_Slashts6_for_migration_information + ), + Diagnostics.The_common_source_directory_of_0_is_1_The_rootDir_setting_must_be_explicitly_set_to_this_or_another_path_to_adjust_your_output_s_file_layout, + getBaseFileName(options.configFilePath), + getRelativePathFromFile(options.configFilePath, dir59, getCanonicalFileName) + ) + ); + } + } if (options.checkJs && !getAllowJSCompilerOption(options)) { createDiagnosticForOptionName(Diagnostics.Option_0_cannot_be_specified_without_specifying_option_1, "checkJs", "allowJs"); } @@ -129277,7 +129864,7 @@ function createProgram(_rootNamesOrOptions, _options, _host, _oldProgram, _confi } } if (options.allowImportingTsExtensions && !(options.noEmit || options.emitDeclarationOnly || options.rewriteRelativeImportExtensions)) { - createOptionValueDiagnostic("allowImportingTsExtensions", Diagnostics.Option_allowImportingTsExtensions_can_only_be_used_when_either_noEmit_or_emitDeclarationOnly_is_set); + createOptionValueDiagnostic("allowImportingTsExtensions", Diagnostics.Option_allowImportingTsExtensions_can_only_be_used_when_one_of_noEmit_emitDeclarationOnly_or_rewriteRelativeImportExtensions_is_set); } const moduleResolution = getEmitModuleResolutionKind(options); if (options.resolvePackageJsonExports && !moduleResolutionSupportsPackageJsonExportsAndImports(moduleResolution)) { @@ -129289,8 +129876,8 @@ function createProgram(_rootNamesOrOptions, _options, _host, _oldProgram, _confi if (options.customConditions && !moduleResolutionSupportsPackageJsonExportsAndImports(moduleResolution)) { createDiagnosticForOptionName(Diagnostics.Option_0_can_only_be_used_when_moduleResolution_is_set_to_node16_nodenext_or_bundler, "customConditions"); } - if (moduleResolution === 100 /* Bundler */ && !emitModuleKindIsNonNodeESM(moduleKind) && moduleKind !== 200 /* Preserve */) { - createOptionValueDiagnostic("moduleResolution", Diagnostics.Option_0_can_only_be_used_when_module_is_set_to_preserve_or_to_es2015_or_later, "bundler"); + if (moduleResolution === 100 /* Bundler */ && !emitModuleKindIsNonNodeESM(moduleKind) && moduleKind !== 200 /* Preserve */ && moduleKind !== 1 /* CommonJS */) { + createOptionValueDiagnostic("moduleResolution", Diagnostics.Option_0_can_only_be_used_when_module_is_set_to_preserve_commonjs_or_es2015_or_later, "bundler"); } if (ModuleKind[moduleKind] && (100 /* Node16 */ <= moduleKind && moduleKind <= 199 /* NodeNext */) && !(3 /* Node16 */ <= moduleResolution && moduleResolution <= 99 /* NodeNext */)) { const moduleKindName = ModuleKind[moduleKind]; @@ -129337,7 +129924,7 @@ function createProgram(_rootNamesOrOptions, _options, _host, _oldProgram, _confi function getIgnoreDeprecationsVersion() { const ignoreDeprecations = options.ignoreDeprecations; if (ignoreDeprecations) { - if (ignoreDeprecations === "5.0") { + if (ignoreDeprecations === "5.0" || ignoreDeprecations === "6.0") { return new Version(ignoreDeprecations); } reportInvalidIgnoreDeprecations(); @@ -129352,32 +129939,35 @@ function createProgram(_rootNamesOrOptions, _options, _host, _oldProgram, _confi const mustBeRemoved = !(removedInVersion.compareTo(typescriptVersion) === 1 /* GreaterThan */); const canBeSilenced = !mustBeRemoved && ignoreDeprecationsVersion.compareTo(deprecatedInVersion) === -1 /* LessThan */; if (mustBeRemoved || canBeSilenced) { - fn((name, value, useInstead) => { + fn((name, value, useInstead, related) => { if (mustBeRemoved) { if (value === void 0) { - createDiagnostic(name, value, useInstead, Diagnostics.Option_0_has_been_removed_Please_remove_it_from_your_configuration, name); + createDiagnostic(name, value, useInstead, related, Diagnostics.Option_0_has_been_removed_Please_remove_it_from_your_configuration, name); } else { - createDiagnostic(name, value, useInstead, Diagnostics.Option_0_1_has_been_removed_Please_remove_it_from_your_configuration, name, value); + createDiagnostic(name, value, useInstead, related, Diagnostics.Option_0_1_has_been_removed_Please_remove_it_from_your_configuration, name, value); } } else { if (value === void 0) { - createDiagnostic(name, value, useInstead, Diagnostics.Option_0_is_deprecated_and_will_stop_functioning_in_TypeScript_1_Specify_compilerOption_ignoreDeprecations_Colon_2_to_silence_this_error, name, removedIn, deprecatedIn); + createDiagnostic(name, value, useInstead, related, Diagnostics.Option_0_is_deprecated_and_will_stop_functioning_in_TypeScript_1_Specify_compilerOption_ignoreDeprecations_Colon_2_to_silence_this_error, name, removedIn, deprecatedIn); } else { - createDiagnostic(name, value, useInstead, Diagnostics.Option_0_1_is_deprecated_and_will_stop_functioning_in_TypeScript_2_Specify_compilerOption_ignoreDeprecations_Colon_3_to_silence_this_error, name, value, removedIn, deprecatedIn); + createDiagnostic(name, value, useInstead, related, Diagnostics.Option_0_1_is_deprecated_and_will_stop_functioning_in_TypeScript_2_Specify_compilerOption_ignoreDeprecations_Colon_3_to_silence_this_error, name, value, removedIn, deprecatedIn); } } }); } } function verifyDeprecatedCompilerOptions() { - function createDiagnostic(name, value, useInstead, message, ...args) { + function createDiagnostic(name, value, useInstead, related, message, ...args) { if (useInstead) { - const details = chainDiagnosticMessages( + let details = chainDiagnosticMessages( /*details*/ void 0, Diagnostics.Use_0_instead, useInstead ); + if (related) { + details = chainDiagnosticMessages(details, related); + } const chain = chainDiagnosticMessages(details, message, ...args); createDiagnosticForOption( /*onKey*/ @@ -129388,14 +129978,22 @@ function createProgram(_rootNamesOrOptions, _options, _host, _oldProgram, _confi chain ); } else { + let details; + if (related) { + details = chainDiagnosticMessages( + /*details*/ + void 0, + related + ); + } + const chain = chainDiagnosticMessages(details, message, ...args); createDiagnosticForOption( /*onKey*/ !value, name, /*option2*/ void 0, - message, - ...args + chain ); } } @@ -129422,12 +130020,7 @@ function createProgram(_rootNamesOrOptions, _options, _host, _oldProgram, _confi createDeprecatedDiagnostic("charset"); } if (options.out) { - createDeprecatedDiagnostic( - "out", - /*value*/ - void 0, - "outFile" - ); + createDeprecatedDiagnostic("out"); } if (options.importsNotUsedAsValues) { createDeprecatedDiagnostic( @@ -129446,9 +130039,89 @@ function createProgram(_rootNamesOrOptions, _options, _host, _oldProgram, _confi ); } }); + checkDeprecations("6.0", "7.0", createDiagnostic, (createDeprecatedDiagnostic) => { + if (options.alwaysStrict === false) { + createDeprecatedDiagnostic( + "alwaysStrict", + "false", + /*useInstead*/ + void 0, + /*related*/ + void 0 + ); + } + if (options.target === 1 /* ES5 */) { + createDeprecatedDiagnostic("target", "ES5"); + } + if (options.moduleResolution === 2 /* Node10 */) { + createDeprecatedDiagnostic( + "moduleResolution", + "node10", + /*useInstead*/ + void 0, + Diagnostics.Visit_https_Colon_Slash_Slashaka_ms_Slashts6_for_migration_information + ); + } + if (options.moduleResolution === 1 /* Classic */) { + createDeprecatedDiagnostic( + "moduleResolution", + "classic", + /*useInstead*/ + void 0, + /*related*/ + void 0 + ); + } + if (options.baseUrl !== void 0) { + createDeprecatedDiagnostic( + "baseUrl", + /*value*/ + void 0, + /*useInstead*/ + void 0, + Diagnostics.Visit_https_Colon_Slash_Slashaka_ms_Slashts6_for_migration_information + ); + } + if (options.esModuleInterop === false) { + createDeprecatedDiagnostic( + "esModuleInterop", + "false", + /*useInstead*/ + void 0, + /*related*/ + void 0 + ); + } + if (options.allowSyntheticDefaultImports === false) { + createDeprecatedDiagnostic( + "allowSyntheticDefaultImports", + "false", + /*useInstead*/ + void 0, + /*related*/ + void 0 + ); + } + if (options.outFile) { + createDeprecatedDiagnostic("outFile"); + } + if (options.module === 0 /* None */ || options.module === 2 /* AMD */ || options.module === 3 /* UMD */ || options.module === 4 /* System */) { + createDeprecatedDiagnostic( + "module", + ModuleKind[options.module], + /*useInstead*/ + void 0, + /*related*/ + void 0 + ); + } + if (options.downlevelIteration !== void 0) { + createDeprecatedDiagnostic("downlevelIteration"); + } + }); } function verifyDeprecatedProjectReference(ref, parentFile, index) { - function createDiagnostic(_name, _value, _useInstead, message, ...args) { + function createDiagnostic(_name, _value, _useInstead, _related, message, ...args) { createDiagnosticForReference(parentFile, index, message, ...args); } checkDeprecations("5.0", "5.5", createDiagnostic, (createDeprecatedDiagnostic) => { @@ -130201,8 +130874,7 @@ function createProgramDiagnostics(getCompilerOptionsObjectLiteralSyntax) { reason.kind === 2 /* OutputFromProjectReference */ ? Diagnostics.File_is_output_from_referenced_project_specified_here : Diagnostics.File_is_source_from_referenced_project_specified_here ) : void 0; case 8 /* AutomaticTypeDirectiveFile */: - if (!options.types) return void 0; - configFileNode = getOptionsSyntaxByArrayElementValue(getCompilerOptionsObjectLiteralSyntax(), "types", reason.typeReference); + configFileNode = getOptionsSyntaxByArrayElementValue(getCompilerOptionsObjectLiteralSyntax(), "types", usesWildcardTypes(options) ? "*" : reason.typeReference); message = Diagnostics.File_is_entry_point_of_type_library_specified_here; break; case 6 /* LibFile */: @@ -130712,7 +131384,7 @@ function createBuilderProgramState(newProgram, oldState) { } if (canCopySemanticDiagnostics) { if (sourceFile.isDeclarationFile && !copyDeclarationFileDiagnostics) return; - if (sourceFile.hasNoDefaultLib && !copyLibFileDiagnostics) return; + if (newProgram.isSourceFileDefaultLibrary(sourceFile) && !copyLibFileDiagnostics) return; const diagnostics = oldState.semanticDiagnosticsPerFile.get(sourceFilePath); if (diagnostics) { state.semanticDiagnosticsPerFile.set( @@ -132639,7 +133311,7 @@ function createResolutionCache(resolutionHost, rootDirForResolution, logChangesW shouldRetryResolution, logChanges }) { - var _a; + var _a, _b; const path = resolutionHost.toPath(containingFile); const resolutionsInFile = perFileCache.get(path) || perFileCache.set(path, createModeAwareCache()).get(path); const resolvedModules = []; @@ -132660,7 +133332,7 @@ function createResolutionCache(resolutionHost, rootDirForResolution, logChangesW resolutionHost.onDiscoveredSymlink(); } resolutionsInFile.set(name, mode, resolution); - if (resolution !== existingResolution) { + if (resolution !== existingResolution && !((_b = resolutionHost.skipWatchingFailedLookups) == null ? void 0 : _b.call(resolutionHost, path))) { watchFailedLookupLocationsOfExternalModuleResolutions(name, resolution, path, getResolutionWithResolvedFileName, deferWatchingNonRelativeResolution); if (existingResolution) { stopWatchFailedLookupLocationOfResolution(existingResolution, path, getResolutionWithResolvedFileName); @@ -132697,8 +133369,11 @@ function createResolutionCache(resolutionHost, rootDirForResolution, logChangesW ); if (resolutionsInFile.size() !== seenNamesInFile.size()) { resolutionsInFile.forEach((resolution, name, mode) => { + var _a2; if (!seenNamesInFile.has(name, mode)) { - stopWatchFailedLookupLocationOfResolution(resolution, path, getResolutionWithResolvedFileName); + if (!((_a2 = resolutionHost.skipWatchingFailedLookups) == null ? void 0 : _a2.call(resolutionHost, path))) { + stopWatchFailedLookupLocationOfResolution(resolution, path, getResolutionWithResolvedFileName); + } resolutionsInFile.delete(name, mode); } }); @@ -133112,15 +133787,18 @@ function createResolutionCache(resolutionHost, rootDirForResolution, logChangesW }, nonRecursive ? 0 /* None */ : 1 /* Recursive */); } function removeResolutionsOfFileFromCache(cache, filePath, getResolutionWithResolvedFileName) { + var _a; const resolutions = cache.get(filePath); if (resolutions) { - resolutions.forEach( - (resolution) => stopWatchFailedLookupLocationOfResolution( - resolution, - filePath, - getResolutionWithResolvedFileName - ) - ); + if (!((_a = resolutionHost.skipWatchingFailedLookups) == null ? void 0 : _a.call(resolutionHost, filePath))) { + resolutions.forEach( + (resolution) => stopWatchFailedLookupLocationOfResolution( + resolution, + filePath, + getResolutionWithResolvedFileName + ) + ); + } cache.delete(filePath); } } @@ -133275,8 +133953,13 @@ function createResolutionCache(resolutionHost, rootDirForResolution, logChangesW }, 1 /* Recursive */) : noopFileWatcher; } function updateTypeRootsWatch() { + var _a; const options = resolutionHost.getCompilationSettings(); - if (options.types) { + if (!usesWildcardTypes(options)) { + closeTypeRootsWatch(); + return; + } + if (!isRootWatchable || ((_a = resolutionHost.skipWatchingTypeRoots) == null ? void 0 : _a.call(resolutionHost))) { closeTypeRootsWatch(); return; } @@ -133629,7 +134312,7 @@ function fileIncludeReasonToDiagnostics(program, reason, fileNameConvertor) { options.outFile ? "--outFile" : "--out" ); case 8 /* AutomaticTypeDirectiveFile */: { - const messageAndArgs = options.types ? reason.packageId ? [Diagnostics.Entry_point_of_type_library_0_specified_in_compilerOptions_with_packageId_1, reason.typeReference, packageIdToString(reason.packageId)] : [Diagnostics.Entry_point_of_type_library_0_specified_in_compilerOptions, reason.typeReference] : reason.packageId ? [Diagnostics.Entry_point_for_implicit_type_library_0_with_packageId_1, reason.typeReference, packageIdToString(reason.packageId)] : [Diagnostics.Entry_point_for_implicit_type_library_0, reason.typeReference]; + const messageAndArgs = !usesWildcardTypes(options) ? reason.packageId ? [Diagnostics.Entry_point_of_type_library_0_specified_in_compilerOptions_with_packageId_1, reason.typeReference, packageIdToString(reason.packageId)] : [Diagnostics.Entry_point_of_type_library_0_specified_in_compilerOptions, reason.typeReference] : reason.packageId ? [Diagnostics.Entry_point_for_implicit_type_library_0_with_packageId_1, reason.typeReference, packageIdToString(reason.packageId)] : [Diagnostics.Entry_point_for_implicit_type_library_0, reason.typeReference]; return chainDiagnosticMessages( /*details*/ void 0, @@ -133771,7 +134454,7 @@ var WatchType = { }; function createWatchFactory(host, options) { const watchLogLevel = host.trace ? options.extendedDiagnostics ? 2 /* Verbose */ : options.diagnostics ? 1 /* TriggerOnly */ : 0 /* None */ : 0 /* None */; - const writeLog = watchLogLevel !== 0 /* None */ ? (s) => host.trace(s) : noop; + const writeLog = watchLogLevel !== 0 /* None */ ? ((s) => host.trace(s)) : noop; const result = getWatchFactory(host, watchLogLevel, writeLog); result.writeLog = writeLog; return result; @@ -134105,7 +134788,7 @@ function createWatchProgram(host) { compilerHost.resolveTypeReferenceDirectiveReferences = resolutionCache.resolveTypeReferenceDirectiveReferences.bind(resolutionCache); } compilerHost.resolveLibrary = !host.resolveLibrary ? resolutionCache.resolveLibrary.bind(resolutionCache) : host.resolveLibrary.bind(host); - compilerHost.getModuleResolutionCache = host.resolveModuleNameLiterals || host.resolveModuleNames ? maybeBind(host, host.getModuleResolutionCache) : () => resolutionCache.getModuleResolutionCache(); + compilerHost.getModuleResolutionCache = host.resolveModuleNameLiterals || host.resolveModuleNames ? maybeBind(host, host.getModuleResolutionCache) : (() => resolutionCache.getModuleResolutionCache()); const userProvidedResolution = !!host.resolveModuleNameLiterals || !!host.resolveTypeReferenceDirectiveReferences || !!host.resolveModuleNames || !!host.resolveTypeReferenceDirectives; const customHasInvalidatedResolutions = userProvidedResolution ? maybeBind(host, host.hasInvalidatedResolutions) || returnTrue : returnFalse; const customHasInvalidLibResolutions = host.resolveLibrary ? maybeBind(host, host.hasInvalidatedLibResolutions) || returnTrue : returnFalse; @@ -136498,7 +137181,13 @@ function updateReportDiagnostic(sys2, existing, options) { ) : existing; } function defaultIsPretty(sys2) { - return !!sys2.writeOutputIsTTY && sys2.writeOutputIsTTY() && !sys2.getEnvironmentVariable("NO_COLOR"); + if (sys2.getEnvironmentVariable("NO_COLOR")) { + return false; + } + if (sys2.getEnvironmentVariable("FORCE_COLOR")) { + return true; + } + return !!sys2.writeOutputIsTTY && sys2.writeOutputIsTTY(); } function shouldBePretty(sys2, options) { if (!options || typeof options.pretty === "undefined") { @@ -136507,7 +137196,8 @@ function shouldBePretty(sys2, options) { return options.pretty; } function getOptionsForHelp(commandLine) { - return !!commandLine.options.all ? toSorted(optionDeclarations.concat(tscBuildOption), (a, b) => compareStringsCaseInsensitive(a.name, b.name)) : filter(optionDeclarations.concat(tscBuildOption), (v) => !!v.showInSimplifiedHelpView); + const helpOptions = filter(optionDeclarations.concat(tscBuildOption), (option) => option.showInHelp !== false); + return !!commandLine.options.all ? toSorted(helpOptions, (a, b) => compareStringsCaseInsensitive(a.name, b.name)) : filter(helpOptions, (v) => !!v.showInSimplifiedHelpView); } function printVersion(sys2) { sys2.write(getDiagnosticText(Diagnostics.Version_0, version) + sys2.newLine); @@ -136823,7 +137513,7 @@ function printAllHelp(sys2, compilerOptions, buildOptions, watchOptions) { output = [...output, ...generateSectionOptionsOutput( sys2, getDiagnosticText(Diagnostics.WATCH_OPTIONS), - watchOptions, + filter(watchOptions, (option) => option.showInHelp !== false), /*subCategory*/ false, getDiagnosticText(Diagnostics.Including_watch_w_will_start_watching_the_current_project_for_the_file_changes_Once_set_you_can_config_watch_mode_with_Colon) @@ -136831,7 +137521,7 @@ function printAllHelp(sys2, compilerOptions, buildOptions, watchOptions) { output = [...output, ...generateSectionOptionsOutput( sys2, getDiagnosticText(Diagnostics.BUILD_OPTIONS), - filter(buildOptions, (option) => option !== tscBuildOption), + filter(buildOptions, (option) => option !== tscBuildOption && option.showInHelp !== false), /*subCategory*/ false, formatMessage(Diagnostics.Using_build_b_will_make_tsc_behave_more_like_a_build_orchestrator_than_a_compiler_This_is_used_to_trigger_building_composite_projects_which_you_can_learn_more_about_at_0, "https://aka.ms/tsc-composite-builds") @@ -136845,7 +137535,7 @@ function printBuildHelp(sys2, buildOptions) { output = [...output, ...generateSectionOptionsOutput( sys2, getDiagnosticText(Diagnostics.BUILD_OPTIONS), - filter(buildOptions, (option) => option !== tscBuildOption), + filter(buildOptions, (option) => option !== tscBuildOption && option.showInHelp !== false), /*subCategory*/ false, formatMessage(Diagnostics.Using_build_b_will_make_tsc_behave_more_like_a_build_orchestrator_than_a_compiler_This_is_used_to_trigger_building_composite_projects_which_you_can_learn_more_about_at_0, "https://aka.ms/tsc-composite-builds") @@ -136925,18 +137615,23 @@ function executeCommandLineWorker(sys2, cb, commandLine) { return sys2.exit(1 /* DiagnosticsPresent_OutputsSkipped */); } } - } else if (commandLine.fileNames.length === 0) { + } else if (!commandLine.options.ignoreConfig || commandLine.fileNames.length === 0) { const searchPath = normalizePath(sys2.getCurrentDirectory()); configFileName = findConfigFile(searchPath, (fileName) => sys2.fileExists(fileName)); - } - if (commandLine.fileNames.length === 0 && !configFileName) { - if (commandLine.options.showConfig) { - reportDiagnostic(createCompilerDiagnostic(Diagnostics.Cannot_find_a_tsconfig_json_file_at_the_current_directory_Colon_0, normalizePath(sys2.getCurrentDirectory()))); - } else { - printVersion(sys2); - printHelp(sys2, commandLine); + if (commandLine.fileNames.length !== 0) { + if (configFileName) { + reportDiagnostic(createCompilerDiagnostic(Diagnostics.tsconfig_json_is_present_but_will_not_be_loaded_if_files_are_specified_on_commandline_Use_ignoreConfig_to_skip_this_error)); + return sys2.exit(1 /* DiagnosticsPresent_OutputsSkipped */); + } + } else if (!configFileName) { + if (commandLine.options.showConfig) { + reportDiagnostic(createCompilerDiagnostic(Diagnostics.Cannot_find_a_tsconfig_json_file_at_the_current_directory_Colon_0, normalizePath(sys2.getCurrentDirectory()))); + } else { + printVersion(sys2); + printHelp(sys2, commandLine); + } + return sys2.exit(1 /* DiagnosticsPresent_OutputsSkipped */); } - return sys2.exit(1 /* DiagnosticsPresent_OutputsSkipped */); } const currentDirectory = sys2.getCurrentDirectory(); const commandLineOptions = convertToOptionsWithAbsolutePaths( @@ -138826,7 +139521,7 @@ function discoverTypings(host, log, fileNames, projectRootPath, safeList, packag const filesToWatch = []; if (typeAcquisition.include) addInferredTypings(typeAcquisition.include, "Explicitly included types"); const exclude = typeAcquisition.exclude || []; - if (!compilerOptions.types) { + if (!compilerOptions.types || usesWildcardTypes(compilerOptions)) { const possibleSearchDirs = new Set(fileNames.map(getDirectoryPath)); possibleSearchDirs.add(projectRootPath); possibleSearchDirs.forEach((searchDir) => { @@ -140403,7 +141098,7 @@ function isInsideJsxElementOrAttribute(sourceFile, position) { if (token && token.kind === 20 /* CloseBraceToken */ && token.parent.kind === 295 /* JsxExpression */) { return true; } - if (token.kind === 31 /* LessThanSlashToken */ && token.parent.kind === 288 /* JsxClosingElement */) { + if (token.kind === 30 /* LessThanToken */ && token.parent.kind === 288 /* JsxClosingElement */) { return true; } return false; @@ -140431,7 +141126,7 @@ function isInJSXText(sourceFile, position) { function isInsideJsxElement(sourceFile, position) { function isInsideJsxElementTraversal(node) { while (node) { - if (node.kind >= 286 /* JsxSelfClosingElement */ && node.kind <= 295 /* JsxExpression */ || node.kind === 12 /* JsxText */ || node.kind === 30 /* LessThanToken */ || node.kind === 32 /* GreaterThanToken */ || node.kind === 80 /* Identifier */ || node.kind === 20 /* CloseBraceToken */ || node.kind === 19 /* OpenBraceToken */ || node.kind === 44 /* SlashToken */ || node.kind === 31 /* LessThanSlashToken */) { + if (node.kind >= 286 /* JsxSelfClosingElement */ && node.kind <= 295 /* JsxExpression */ || node.kind === 12 /* JsxText */ || node.kind === 30 /* LessThanToken */ || node.kind === 32 /* GreaterThanToken */ || node.kind === 80 /* Identifier */ || node.kind === 20 /* CloseBraceToken */ || node.kind === 19 /* OpenBraceToken */ || node.kind === 44 /* SlashToken */) { node = node.parent; } else if (node.kind === 285 /* JsxElement */) { if (position > node.getStart(sourceFile)) return true; @@ -140617,7 +141312,7 @@ function isStringOrRegularExpressionOrTemplateLiteral(kind) { return false; } function areIntersectedTypesAvoidingStringReduction(checker, t1, t2) { - return !!(t1.flags & 4 /* String */) && checker.isEmptyAnonymousObjectType(t2); + return !!(t1.flags & 32 /* String */) && checker.isEmptyAnonymousObjectType(t2); } function isStringAndEmptyAnonymousObjectIntersection(type) { if (!type.isIntersection()) { @@ -142404,7 +143099,7 @@ function forEachExternalModule(checker, allSourceFiles, excludePatterns, host, c function getIsExcluded(excludePatterns, host) { var _a; const realpathsWithSymlinks = (_a = host.getSymlinkCache) == null ? void 0 : _a.call(host).getSymlinkedDirectoriesByRealpath(); - return ({ fileName, path }) => { + return (({ fileName, path }) => { if (excludePatterns.some((p) => p.test(fileName))) return true; if ((realpathsWithSymlinks == null ? void 0 : realpathsWithSymlinks.size) && pathContainsNodeModules(fileName)) { let dir = getDirectoryPath(fileName); @@ -142421,7 +143116,7 @@ function getIsExcluded(excludePatterns, host) { ) ?? false; } return false; - }; + }); } function getIsFileExcluded(host, preferences) { if (!preferences.autoImportFileExcludePatterns) return () => false; @@ -144595,7 +145290,7 @@ function every2(s, pred, start = 0, end = s.length) { // src/services/preProcess.ts function preProcessFile(sourceText, readImportFiles = true, detectJavaScriptImports = false) { const pragmaContext = { - languageVersion: 1 /* ES5 */, + languageVersion: 12 /* LatestStandard */, // controls whether the token scanner considers unicode identifiers or not - shouldn't matter, since we're only using it for trivia pragmas: void 0, checkJsDirective: void 0, @@ -144603,7 +145298,6 @@ function preProcessFile(sourceText, readImportFiles = true, detectJavaScriptImpo typeReferenceDirectives: [], libReferenceDirectives: [], amdDependencies: [], - hasNoDefaultLib: void 0, moduleName: void 0 }; const importedFiles = []; @@ -144912,7 +145606,7 @@ function preProcessFile(sourceText, readImportFiles = true, detectJavaScriptImpo importedFiles.push(decl.ref); } } - return { referencedFiles: pragmaContext.referencedFiles, typeReferenceDirectives: pragmaContext.typeReferenceDirectives, libReferenceDirectives: pragmaContext.libReferenceDirectives, importedFiles, isLibFile: !!pragmaContext.hasNoDefaultLib, ambientExternalModules: void 0 }; + return { referencedFiles: pragmaContext.referencedFiles, typeReferenceDirectives: pragmaContext.typeReferenceDirectives, libReferenceDirectives: pragmaContext.libReferenceDirectives, importedFiles, isLibFile: false, ambientExternalModules: void 0 }; } else { let ambientModuleNames; if (ambientExternalModules) { @@ -144927,7 +145621,7 @@ function preProcessFile(sourceText, readImportFiles = true, detectJavaScriptImpo } } } - return { referencedFiles: pragmaContext.referencedFiles, typeReferenceDirectives: pragmaContext.typeReferenceDirectives, libReferenceDirectives: pragmaContext.libReferenceDirectives, importedFiles, isLibFile: !!pragmaContext.hasNoDefaultLib, ambientExternalModules: ambientModuleNames }; + return { referencedFiles: pragmaContext.referencedFiles, typeReferenceDirectives: pragmaContext.typeReferenceDirectives, libReferenceDirectives: pragmaContext.libReferenceDirectives, importedFiles, isLibFile: false, ambientExternalModules: ambientModuleNames }; } } @@ -145301,8 +145995,7 @@ function transpileDeclaration(input, transpileOptions) { true ); } -var barebonesLibContent = `/// <reference no-default-lib="true"/> -interface Boolean {} +var barebonesLibContent = `interface Boolean {} interface Function {} interface CallableFunction {} interface NewableFunction {} @@ -145349,6 +146042,7 @@ function transpileWorker(input, transpileOptions, declaration) { options.declaration = false; options.declarationMap = false; } + options.noLib = !declaration; const newLine = getNewLineCharacter(options); const compilerHost = { getSourceFile: (fileName) => fileName === normalizePath(inputFileName) ? sourceFile : fileName === normalizePath(barebonesLibName) ? barebonesLibSourceFile : void 0, @@ -145396,8 +146090,7 @@ function transpileWorker(input, transpileOptions, declaration) { } let outputText; let sourceMapText; - const inputs = declaration ? [inputFileName, barebonesLibName] : [inputFileName]; - const program = createProgram(inputs, options, compilerHost); + const program = createProgram([inputFileName], options, compilerHost); if (transpileOptions.reportDiagnostics) { addRange( /*to*/ @@ -145466,7 +146159,7 @@ __export(ts_NavigateTo_exports, { }); // src/services/navigateTo.ts -function getNavigateToItems(sourceFiles, checker, cancellationToken, searchValue, maxResultCount, excludeDtsFiles, excludeLibFiles) { +function getNavigateToItems(sourceFiles, checker, cancellationToken, searchValue, maxResultCount, excludeDtsFiles, excludeLibFiles, program) { const patternMatcher = createPatternMatcher(searchValue); if (!patternMatcher) return emptyArray; const rawItems = []; @@ -145476,26 +146169,26 @@ function getNavigateToItems(sourceFiles, checker, cancellationToken, searchValue if (excludeDtsFiles && sourceFile.isDeclarationFile) { continue; } - if (shouldExcludeFile(sourceFile, !!excludeLibFiles, singleCurrentFile)) { + if (shouldExcludeFile(sourceFile, !!excludeLibFiles, singleCurrentFile, program)) { continue; } sourceFile.getNamedDeclarations().forEach((declarations, name) => { - getItemsFromNamedDeclaration(patternMatcher, name, declarations, checker, sourceFile.fileName, !!excludeLibFiles, singleCurrentFile, rawItems); + getItemsFromNamedDeclaration(patternMatcher, name, declarations, checker, sourceFile.fileName, !!excludeLibFiles, singleCurrentFile, rawItems, program); }); } rawItems.sort(compareNavigateToItems); return (maxResultCount === void 0 ? rawItems : rawItems.slice(0, maxResultCount)).map(createNavigateToItem); } -function shouldExcludeFile(file, excludeLibFiles, singleCurrentFile) { - return file !== singleCurrentFile && excludeLibFiles && (isInsideNodeModules(file.path) || file.hasNoDefaultLib); +function shouldExcludeFile(file, excludeLibFiles, singleCurrentFile, program) { + return file !== singleCurrentFile && excludeLibFiles && (isInsideNodeModules(file.path) || program.isSourceFileDefaultLibrary(file)); } -function getItemsFromNamedDeclaration(patternMatcher, name, declarations, checker, fileName, excludeLibFiles, singleCurrentFile, rawItems) { +function getItemsFromNamedDeclaration(patternMatcher, name, declarations, checker, fileName, excludeLibFiles, singleCurrentFile, rawItems, program) { const match = patternMatcher.getMatchForLastSegmentOfPattern(name); if (!match) { return; } for (const declaration of declarations) { - if (!shouldKeepItem(declaration, checker, excludeLibFiles, singleCurrentFile)) continue; + if (!shouldKeepItem(declaration, checker, excludeLibFiles, singleCurrentFile, program)) continue; if (patternMatcher.patternContainsDots) { const fullMatch = patternMatcher.getFullMatch(getContainers(declaration), name); if (fullMatch) { @@ -145506,7 +146199,7 @@ function getItemsFromNamedDeclaration(patternMatcher, name, declarations, checke } } } -function shouldKeepItem(declaration, checker, excludeLibFiles, singleCurrentFile) { +function shouldKeepItem(declaration, checker, excludeLibFiles, singleCurrentFile, program) { var _a; switch (declaration.kind) { case 274 /* ImportClause */: @@ -145514,7 +146207,7 @@ function shouldKeepItem(declaration, checker, excludeLibFiles, singleCurrentFile case 272 /* ImportEqualsDeclaration */: const importer = checker.getSymbolAtLocation(declaration.name); const imported = checker.getAliasedSymbol(importer); - return importer.escapedName !== imported.escapedName && !((_a = imported.declarations) == null ? void 0 : _a.every((d) => shouldExcludeFile(d.getSourceFile(), excludeLibFiles, singleCurrentFile))); + return importer.escapedName !== imported.escapedName && !((_a = imported.declarations) == null ? void 0 : _a.every((d) => shouldExcludeFile(d.getSourceFile(), excludeLibFiles, singleCurrentFile, program))); default: return true; } @@ -145810,8 +146503,8 @@ function addChildrenRecursively(node) { addNodeWithRecursiveChild(node, getInteriorModule(node).body); break; case 278 /* ExportAssignment */: { - const expression2 = node.expression; - const child = isObjectLiteralExpression(expression2) || isCallExpression(expression2) ? expression2 : isArrowFunction(expression2) || isFunctionExpression(expression2) ? expression2.body : void 0; + const expression2 = skipOuterExpressions(node.expression); + const child = isObjectLiteralExpression(expression2) || isCallExpression(expression2) || isClassExpression(expression2) ? expression2 : isArrowFunction(expression2) || isFunctionExpression(expression2) ? expression2.body : void 0; if (child) { startNode(node); addChildrenRecursively(child); @@ -151107,7 +151800,7 @@ function collectReadsAndWrites(targetRange, scopes, enclosingTextRange, sourceFi const start = first(statements).getStart(); const end = last(statements).end; expressionDiagnostic = createFileDiagnostic(sourceFile, start, end - start, Messages.expressionExpected); - } else if (checker.getTypeAtLocation(expression).flags & (16384 /* Void */ | 131072 /* Never */)) { + } else if (checker.getTypeAtLocation(expression).flags & (16 /* Void */ | 262144 /* Never */)) { expressionDiagnostic = createDiagnosticForNode(expression, Messages.uselessConstantType); } for (const scope of scopes) { @@ -151873,9 +152566,7 @@ function createChildren(node, sourceFile) { }); return children; } - const languageVariant = (sourceFile == null ? void 0 : sourceFile.languageVariant) ?? 0 /* Standard */; scanner.setText((sourceFile || node.getSourceFile()).text); - scanner.setLanguageVariant(languageVariant); let pos = node.pos; const processNode = (child) => { addSyntheticNodes(children, pos, child.pos, node); @@ -151892,7 +152583,6 @@ function createChildren(node, sourceFile) { node.forEachChild(processNode, processNodes); addSyntheticNodes(children, pos, node.end, node); scanner.setText(void 0); - scanner.setLanguageVariant(0 /* Standard */); return children; } function addSyntheticNodes(nodes, pos, end, parent2) { @@ -152158,25 +152848,25 @@ var TypeObject = class { return this.checker.getDefaultFromTypeParameter(this); } isUnion() { - return !!(this.flags & 1048576 /* Union */); + return !!(this.flags & 134217728 /* Union */); } isIntersection() { - return !!(this.flags & 2097152 /* Intersection */); + return !!(this.flags & 268435456 /* Intersection */); } isUnionOrIntersection() { - return !!(this.flags & 3145728 /* UnionOrIntersection */); + return !!(this.flags & 402653184 /* UnionOrIntersection */); } isLiteral() { - return !!(this.flags & (128 /* StringLiteral */ | 256 /* NumberLiteral */ | 2048 /* BigIntLiteral */)); + return !!(this.flags & (1024 /* StringLiteral */ | 2048 /* NumberLiteral */ | 4096 /* BigIntLiteral */)); } isStringLiteral() { - return !!(this.flags & 128 /* StringLiteral */); + return !!(this.flags & 1024 /* StringLiteral */); } isNumberLiteral() { - return !!(this.flags & 256 /* NumberLiteral */); + return !!(this.flags & 2048 /* NumberLiteral */); } isTypeParameter() { - return !!(this.flags & 262144 /* TypeParameter */); + return !!(this.flags & 524288 /* TypeParameter */); } isClassOrInterface() { return !!(getObjectFlags(this) & 3 /* ClassOrInterface */); @@ -152185,7 +152875,7 @@ var TypeObject = class { return !!(getObjectFlags(this) & 1 /* Class */); } isIndexType() { - return !!(this.flags & 4194304 /* Index */); + return !!(this.flags & 2097152 /* Index */); } /** * This polyfills `referenceType.typeArguments` for API consumers @@ -152496,7 +153186,7 @@ function displayPartsToString(displayParts) { } function getDefaultCompilerOptions2() { return { - target: 1 /* ES5 */, + target: 12 /* LatestStandard */, jsx: 1 /* Preserve */ }; } @@ -153322,7 +154012,7 @@ function createLanguageService(host, documentRegistry = createDocumentRegistry(h function getNavigateToItems2(searchValue, maxResultCount, fileName, excludeDtsFiles = false, excludeLibFiles = false) { synchronizeHostData(); const sourceFiles = fileName ? [getValidSourceFile(fileName)] : program.getSourceFiles(); - return getNavigateToItems(sourceFiles, program.getTypeChecker(), cancellationToken, searchValue, maxResultCount, excludeDtsFiles, excludeLibFiles); + return getNavigateToItems(sourceFiles, program.getTypeChecker(), cancellationToken, searchValue, maxResultCount, excludeDtsFiles, excludeLibFiles, program); } function getEmitOutput(fileName, emitOnlyDtsFiles, forceDtsEmit) { synchronizeHostData(); @@ -154100,6 +154790,7 @@ function getSymbolAtLocationForQuickInfo(node, checker) { return checker.getSymbolAtLocation(node); } function getPropertySymbolsFromContextualType(node, checker, contextualType, unionSymbolOk) { + contextualType = contextualType.getNonNullableType(); const name = getNameFromPropertyName(node.name); if (!name) return emptyArray; if (!contextualType.isUnion()) { @@ -160919,7 +161610,7 @@ function getInfo10(sourceFile, tokenPos, errorCode, checker, program) { return { kind: 0 /* TypeLikeDeclaration */, token, call, modifierFlags, parentDeclaration: declaration, declSourceFile, isJSFile }; } const enumDeclaration = find(symbol.declarations, isEnumDeclaration); - if (enumDeclaration && !(leftExpressionType.flags & 1056 /* EnumLike */) && !isPrivateIdentifier(token) && !isSourceFileFromLibrary(program, enumDeclaration.getSourceFile())) { + if (enumDeclaration && !(leftExpressionType.flags & 98304 /* EnumLike */) && !isPrivateIdentifier(token) && !isSourceFileFromLibrary(program, enumDeclaration.getSourceFile())) { return { kind: 1 /* Enum */, token, parentDeclaration: enumDeclaration }; } return void 0; @@ -161095,7 +161786,7 @@ function addMethodDeclaration(context, changes, callExpression, name, modifierFl function addEnumMemberDeclaration(changes, checker, { token, parentDeclaration }) { const hasStringInitializer = some(parentDeclaration.members, (member) => { const type = checker.getTypeAtLocation(member); - return !!(type && type.flags & 402653316 /* StringLike */); + return !!(type && type.flags & 12583968 /* StringLike */); }); const sourceFile = parentDeclaration.getSourceFile(); const enumMember = factory.createEnumMember(token, hasStringInitializer ? factory.createStringLiteral(token.text) : void 0); @@ -161183,23 +161874,23 @@ function tryGetValueFromType(context, checker, importAdder, quotePreference, typ if (type.flags & 3 /* AnyOrUnknown */) { return createUndefined(); } - if (type.flags & (4 /* String */ | 134217728 /* TemplateLiteral */)) { + if (type.flags & (32 /* String */ | 4194304 /* TemplateLiteral */)) { return factory.createStringLiteral( "", /* isSingleQuote */ quotePreference === 0 /* Single */ ); } - if (type.flags & 8 /* Number */) { + if (type.flags & 64 /* Number */) { return factory.createNumericLiteral(0); } - if (type.flags & 64 /* BigInt */) { + if (type.flags & 128 /* BigInt */) { return factory.createBigIntLiteral("0n"); } - if (type.flags & 16 /* Boolean */) { + if (type.flags & 256 /* Boolean */) { return factory.createFalse(); } - if (type.flags & 1056 /* EnumLike */) { + if (type.flags & 98304 /* EnumLike */) { const enumMember = type.symbol.exports ? firstOrUndefinedIterator(type.symbol.exports.values()) : type.symbol; const symbol = type.symbol.parent && type.symbol.parent.flags & 256 /* RegularEnum */ ? type.symbol.parent : type.symbol; const name = checker.symbolToExpression( @@ -161212,29 +161903,29 @@ function tryGetValueFromType(context, checker, importAdder, quotePreference, typ ); return enumMember === void 0 || name === void 0 ? factory.createNumericLiteral(0) : factory.createPropertyAccessExpression(name, checker.symbolToString(enumMember)); } - if (type.flags & 256 /* NumberLiteral */) { + if (type.flags & 2048 /* NumberLiteral */) { return factory.createNumericLiteral(type.value); } - if (type.flags & 2048 /* BigIntLiteral */) { + if (type.flags & 4096 /* BigIntLiteral */) { return factory.createBigIntLiteral(type.value); } - if (type.flags & 128 /* StringLiteral */) { + if (type.flags & 1024 /* StringLiteral */) { return factory.createStringLiteral( type.value, /* isSingleQuote */ quotePreference === 0 /* Single */ ); } - if (type.flags & 512 /* BooleanLiteral */) { + if (type.flags & 8192 /* BooleanLiteral */) { return type === checker.getFalseType() || type === checker.getFalseType( /*fresh*/ true ) ? factory.createFalse() : factory.createTrue(); } - if (type.flags & 65536 /* Null */) { + if (type.flags & 8 /* Null */) { return factory.createNull(); } - if (type.flags & 1048576 /* Union */) { + if (type.flags & 134217728 /* Union */) { const expression = firstDefined(type.types, (t) => tryGetValueFromType(context, checker, importAdder, quotePreference, t, enclosingDeclaration)); return expression ?? createUndefined(); } @@ -161294,7 +161985,7 @@ function createUndefined() { return factory.createIdentifier("undefined"); } function isObjectLiteralType(type) { - return type.flags & 524288 /* Object */ && (getObjectFlags(type) & 128 /* ObjectLiteral */ || type.symbol && tryCast(singleOrUndefined(type.symbol.declarations), isTypeLiteralNode)); + return type.flags & 1048576 /* Object */ && (getObjectFlags(type) & 128 /* ObjectLiteral */ || type.symbol && tryCast(singleOrUndefined(type.symbol.declarations), isTypeLiteralNode)); } function getUnmatchedAttributes(checker, target, source) { const attrsType = checker.getContextualType(source.attributes); @@ -161639,6 +162330,8 @@ var errorCannotFindImplicitJsxImport = Diagnostics.This_JSX_tag_requires_the_mod var errorCodes31 = [ errorCodeCannotFindModule, Diagnostics.Could_not_find_a_declaration_file_for_module_0_1_implicitly_has_an_any_type.code, + Diagnostics.Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_node_Try_npm_i_save_dev_types_Slashnode.code, + Diagnostics.Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_node_Try_npm_i_save_dev_types_Slashnode_and_then_add_node_to_the_types_field_in_your_tsconfig.code, errorCannotFindImplicitJsxImport ]; registerCodeFix({ @@ -161689,7 +162382,13 @@ function tryGetImportedPackageName(sourceFile, pos) { } function getTypesPackageNameToInstall(packageName, host, diagCode) { var _a; - return diagCode === errorCodeCannotFindModule ? nodeCoreModules.has(packageName) ? "@types/node" : void 0 : ((_a = host.isKnownTypesPackageName) == null ? void 0 : _a.call(host, packageName)) ? getTypesPackageName(packageName) : void 0; + if (nodeCoreModules.has(packageName)) { + return "@types/node"; + } + if (diagCode !== errorCodeCannotFindModule) { + return ((_a = host.isKnownTypesPackageName) == null ? void 0 : _a.call(host, packageName)) ? getTypesPackageName(packageName) : void 0; + } + return void 0; } // src/services/codefixes/fixClassDoesntImplementInheritedAbstractMember.ts @@ -162691,7 +163390,7 @@ registerCodeFix({ const info = getInfo15(err.file, err.start, checker); if (!info) return; const { typeNode, type } = info; - const fixedType = typeNode.kind === 315 /* JSDocNullableType */ && fixId56 === fixIdNullable ? checker.getNullableType(type, 32768 /* Undefined */) : type; + const fixedType = typeNode.kind === 315 /* JSDocNullableType */ && fixId56 === fixIdNullable ? checker.getNullableType(type, 4 /* Undefined */) : type; doChange29(changes, sourceFile, typeNode, fixedType, checker); }); } @@ -162980,7 +163679,7 @@ function withContext(context, typePrintMode, cb) { } const variableDeclaration = findAncestor(targetNode, isVariableDeclaration); const type = variableDeclaration && typeChecker.getTypeAtLocation(variableDeclaration); - if (type && type.flags & 8192 /* UniqueESSymbol */) { + if (type && type.flags & 16384 /* UniqueESSymbol */) { return void 0; } if (!(isExpressionTarget || isShorthandPropertyAssignmentTarget)) return void 0; @@ -163461,7 +164160,7 @@ function withContext(context, typePrintMode, cb) { mutatedTarget: false }; function getFlags(type2) { - return (isVariableDeclaration(node) || isPropertyDeclaration(node) && hasSyntacticModifier(node, 256 /* Static */ | 8 /* Readonly */)) && type2.flags & 8192 /* UniqueESSymbol */ ? 1048576 /* AllowUniqueESSymbolType */ : 0 /* None */; + return (isVariableDeclaration(node) || isPropertyDeclaration(node) && hasSyntacticModifier(node, 256 /* Static */ | 8 /* Readonly */)) && type2.flags & 16384 /* UniqueESSymbol */ ? 1048576 /* AllowUniqueESSymbolType */ : 0 /* None */; } } function createTypeOfFromEntityNameExpression(node) { @@ -164441,7 +165140,7 @@ function inferTypeFromReferences(program, references, cancellationToken) { case 32 /* GreaterThanToken */: case 34 /* GreaterThanEqualsToken */: const operandType = checker.getTypeAtLocation(parent2.left === node ? parent2.right : parent2.left); - if (operandType.flags & 1056 /* EnumLike */) { + if (operandType.flags & 98304 /* EnumLike */) { addCandidateType(usage, operandType); } else { usage.isNumber = true; @@ -164450,11 +165149,11 @@ function inferTypeFromReferences(program, references, cancellationToken) { case 65 /* PlusEqualsToken */: case 40 /* PlusToken */: const otherOperandType = checker.getTypeAtLocation(parent2.left === node ? parent2.right : parent2.left); - if (otherOperandType.flags & 1056 /* EnumLike */) { + if (otherOperandType.flags & 98304 /* EnumLike */) { addCandidateType(usage, otherOperandType); - } else if (otherOperandType.flags & 296 /* NumberLike */) { + } else if (otherOperandType.flags & 67648 /* NumberLike */) { usage.isNumber = true; - } else if (otherOperandType.flags & 402653316 /* StringLike */) { + } else if (otherOperandType.flags & 12583968 /* StringLike */) { usage.isString = true; } else if (otherOperandType.flags & 1 /* Any */) { } else { @@ -164531,7 +165230,7 @@ function inferTypeFromReferences(program, references, cancellationToken) { const indexType = checker.getTypeAtLocation(parent2.argumentExpression); const indexUsage = createEmptyUsage(); calculateUsageOfNode(parent2, indexUsage); - if (indexType.flags & 296 /* NumberLike */) { + if (indexType.flags & 67648 /* NumberLike */) { usage.numberIndex = indexUsage; } else { usage.stringIndex = indexUsage; @@ -164569,11 +165268,11 @@ function inferTypeFromReferences(program, references, cancellationToken) { low: (t) => t === stringNumber }, { - high: (t) => !(t.flags & (1 /* Any */ | 16384 /* Void */)), - low: (t) => !!(t.flags & (1 /* Any */ | 16384 /* Void */)) + high: (t) => !(t.flags & (1 /* Any */ | 16 /* Void */)), + low: (t) => !!(t.flags & (1 /* Any */ | 16 /* Void */)) }, { - high: (t) => !(t.flags & (98304 /* Nullable */ | 1 /* Any */ | 16384 /* Void */)) && !(getObjectFlags(t) & 16 /* Anonymous */), + high: (t) => !(t.flags & (12 /* Nullable */ | 1 /* Any */ | 16 /* Void */)) && !(getObjectFlags(t) & 16 /* Anonymous */), low: (t) => !!(getObjectFlags(t) & 16 /* Anonymous */) } ]; @@ -164730,7 +165429,7 @@ function inferTypeFromReferences(program, references, cancellationToken) { function inferTypeParameters(genericType, usageType, typeParameter) { if (genericType === typeParameter) { return [usageType]; - } else if (genericType.flags & 3145728 /* UnionOrIntersection */) { + } else if (genericType.flags & 402653184 /* UnionOrIntersection */) { return flatMap(genericType.types, (t) => inferTypeParameters(t, usageType, typeParameter)); } else if (getObjectFlags(genericType) & 4 /* Reference */ && getObjectFlags(usageType) & 4 /* Reference */) { const genericArgs = checker.getTypeArguments(genericType); @@ -164813,12 +165512,12 @@ function inferTypeFromReferences(program, references, cancellationToken) { ); } function addCandidateType(usage, type) { - if (type && !(type.flags & 1 /* Any */) && !(type.flags & 131072 /* Never */)) { + if (type && !(type.flags & 1 /* Any */) && !(type.flags & 262144 /* Never */)) { (usage.candidateTypes || (usage.candidateTypes = [])).push(type); } } function addCandidateThisType(usage, type) { - if (type && !(type.flags & 1 /* Any */) && !(type.flags & 131072 /* Never */)) { + if (type && !(type.flags & 1 /* Any */) && !(type.flags & 262144 /* Never */)) { (usage.candidateThisTypes || (usage.candidateThisTypes = [])).push(type); } } @@ -165405,7 +166104,7 @@ function typeContainsTypeParameter(type) { if (type.isUnionOrIntersection()) { return type.types.some(typeContainsTypeParameter); } - return type.flags & 262144 /* TypeParameter */; + return type.flags & 524288 /* TypeParameter */; } function getArgumentTypesAndTypeParameters(checker, importAdder, instanceTypes, contextNode, scriptTarget, flags, internalFlags, tracker) { const argumentTypeNodes = []; @@ -165433,11 +166132,11 @@ function getArgumentTypesAndTypeParameters(checker, importAdder, instanceTypes, return { argumentTypeNodes, argumentTypeParameters: arrayFrom(argumentTypeParameters.entries()) }; } function isAnonymousObjectConstraintType(type) { - return type.flags & 524288 /* Object */ && type.objectFlags === 16 /* Anonymous */; + return type.flags & 1048576 /* Object */ && type.objectFlags === 16 /* Anonymous */; } function getFirstTypeParameterName(type) { var _a; - if (type.flags & (1048576 /* Union */ | 2097152 /* Intersection */)) { + if (type.flags & (134217728 /* Union */ | 268435456 /* Intersection */)) { for (const subType of type.types) { const subTypeName = getFirstTypeParameterName(subType); if (subTypeName) { @@ -165445,7 +166144,7 @@ function getFirstTypeParameterName(type) { } } } - return type.flags & 262144 /* TypeParameter */ ? (_a = type.getSymbol()) == null ? void 0 : _a.getName() : void 0; + return type.flags & 524288 /* TypeParameter */ ? (_a = type.getSymbol()) == null ? void 0 : _a.getName() : void 0; } function createDummyParameters(argCount, names, types, minArgumentCount, inJs) { const parameters = []; @@ -166072,7 +166771,7 @@ function getInitializer(checker, propertyDeclaration) { return getDefaultValueFromType(checker, checker.getTypeFromTypeNode(propertyDeclaration.type)); } function getDefaultValueFromType(checker, type) { - if (type.flags & 512 /* BooleanLiteral */) { + if (type.flags & 8192 /* BooleanLiteral */) { return type === checker.getFalseType() || type === checker.getFalseType( /*fresh*/ true @@ -166081,7 +166780,7 @@ function getDefaultValueFromType(checker, type) { return factory.createStringLiteral(type.value); } else if (type.isNumberLiteral()) { return factory.createNumericLiteral(type.value); - } else if (type.flags & 2048 /* BigIntLiteral */) { + } else if (type.flags & 4096 /* BigIntLiteral */) { return factory.createBigIntLiteral(type.value); } else if (type.isUnion()) { return firstDefined(type.types, (t) => getDefaultValueFromType(checker, t)); @@ -166705,6 +167404,7 @@ __export(ts_Completions_exports, { getCompletionEntryDetails: () => getCompletionEntryDetails, getCompletionEntrySymbol: () => getCompletionEntrySymbol, getCompletionsAtPosition: () => getCompletionsAtPosition, + getConstraintOfTypeArgumentProperty: () => getConstraintOfTypeArgumentProperty, getDefaultCommitCharacters: () => getDefaultCommitCharacters, getPropertiesForObjectExpression: () => getPropertiesForObjectExpression, moduleSpecifierResolutionCacheAttemptLimit: () => moduleSpecifierResolutionCacheAttemptLimit, @@ -166759,7 +167459,7 @@ var SymbolOriginInfoKind = /* @__PURE__ */ ((SymbolOriginInfoKind2) => { SymbolOriginInfoKind2[SymbolOriginInfoKind2["Ignore"] = 256] = "Ignore"; SymbolOriginInfoKind2[SymbolOriginInfoKind2["ComputedPropertyName"] = 512] = "ComputedPropertyName"; SymbolOriginInfoKind2[SymbolOriginInfoKind2["SymbolMemberNoExport"] = 2 /* SymbolMember */] = "SymbolMemberNoExport"; - SymbolOriginInfoKind2[SymbolOriginInfoKind2["SymbolMemberExport"] = 6] = "SymbolMemberExport"; + SymbolOriginInfoKind2[SymbolOriginInfoKind2["SymbolMemberExport"] = 34] = "SymbolMemberExport"; return SymbolOriginInfoKind2; })(SymbolOriginInfoKind || {}); function originIsThisType(origin) { @@ -166772,7 +167472,7 @@ function originIsExport(origin) { return !!(origin && origin.kind & 4 /* Export */); } function originIsResolvedExport(origin) { - return !!(origin && origin.kind === 32 /* ResolvedExport */); + return !!(origin && origin.kind & 32 /* ResolvedExport */); } function originIncludesSymbolName(origin) { return originIsExport(origin) || originIsResolvedExport(origin) || originIsComputedPropertyName(origin); @@ -167246,7 +167946,7 @@ function getJSDocParamAnnotation(paramName, initializer, dotDotDotToken, isJs, i } else { if (initializer) { const inferredType = checker.getTypeAtLocation(initializer.parent); - if (!(inferredType.flags & (1 /* Any */ | 16384 /* Void */))) { + if (!(inferredType.flags & (1 /* Any */ | 16 /* Void */))) { const sourceFile = initializer.getSourceFile(); const quotePreference = getQuotePreference(sourceFile, preferences); const builderFlags = quotePreference === 0 /* Single */ ? 268435456 /* UseSingleQuotesForStringLiteralType */ : 0 /* None */; @@ -167478,7 +168178,7 @@ function getExhaustiveCaseSnippets(caseBlock, sourceFile, preferences, options, const importAdder = ts_codefix_exports.createImportAdder(sourceFile, program, preferences, host); const elements = []; for (const type of switchType.types) { - if (type.flags & 1024 /* EnumLiteral */) { + if (type.flags & 32768 /* EnumLiteral */) { Debug.assert(type.symbol, "An enum member type should have a symbol"); Debug.assert(type.symbol.parent, "An enum member type should have a parent symbol (the enum symbol)"); const enumValue = type.symbol.valueDeclaration && checker.getConstantValue(type.symbol.valueDeclaration); @@ -167606,7 +168306,7 @@ function getJsxClosingTagCompletion(location, sourceFile) { switch (node.kind) { case 288 /* JsxClosingElement */: return true; - case 31 /* LessThanSlashToken */: + case 44 /* SlashToken */: case 32 /* GreaterThanToken */: case 80 /* Identifier */: case 212 /* PropertyAccessExpression */: @@ -167772,8 +168472,8 @@ function createCompletionEntry(symbol, sortText, replacementToken, contextToken, if (isJsxIdentifierExpected && !isRightOfOpenTag && preferences.includeCompletionsWithSnippetText && preferences.jsxAttributeCompletionStyle && preferences.jsxAttributeCompletionStyle !== "none" && !(isJsxAttribute(location.parent) && location.parent.initializer)) { let useBraces2 = preferences.jsxAttributeCompletionStyle === "braces"; const type = typeChecker.getTypeOfSymbolAtLocation(symbol, location); - if (preferences.jsxAttributeCompletionStyle === "auto" && !(type.flags & 528 /* BooleanLike */) && !(type.flags & 1048576 /* Union */ && find(type.types, (type2) => !!(type2.flags & 528 /* BooleanLike */)))) { - if (type.flags & 402653316 /* StringLike */ || type.flags & 1048576 /* Union */ && every(type.types, (type2) => !!(type2.flags & (402653316 /* StringLike */ | 32768 /* Undefined */) || isStringAndEmptyAnonymousObjectIntersection(type2)))) { + if (preferences.jsxAttributeCompletionStyle === "auto" && !(type.flags & 8448 /* BooleanLike */) && !(type.flags & 134217728 /* Union */ && find(type.types, (type2) => !!(type2.flags & 8448 /* BooleanLike */)))) { + if (type.flags & 12583968 /* StringLike */ || type.flags & 134217728 /* Union */ && every(type.types, (type2) => !!(type2.flags & (12583968 /* StringLike */ | 4 /* Undefined */) || isStringAndEmptyAnonymousObjectIntersection(type2)))) { insertText = `${escapeSnippetText(name)}=${quote(sourceFile, preferences, "$1")}`; isSnippet = true; } else { @@ -168080,8 +168780,8 @@ function createObjectLiteralMethod(symbol, enclosingDeclaration, sourceFile, pro case 173 /* PropertyDeclaration */: case 174 /* MethodSignature */: case 175 /* MethodDeclaration */: { - let effectiveType = type.flags & 1048576 /* Union */ && type.types.length < 10 ? checker.getUnionType(type.types, 2 /* Subtype */) : type; - if (effectiveType.flags & 1048576 /* Union */) { + let effectiveType = type.flags & 134217728 /* Union */ && type.types.length < 10 ? checker.getUnionType(type.types, 2 /* Subtype */) : type; + if (effectiveType.flags & 134217728 /* Union */) { const functionTypes = filter(effectiveType.types, (type2) => checker.getSignaturesOfType(type2, 0 /* Call */).length > 0); if (functionTypes.length === 1) { effectiveType = functionTypes[0]; @@ -168349,12 +169049,12 @@ function isRecommendedCompletionMatch(localSymbol, recommendedCompletion, checke return localSymbol === recommendedCompletion || !!(localSymbol.flags & 1048576 /* ExportValue */) && checker.getExportSymbolOfSymbol(localSymbol) === recommendedCompletion; } function getSourceFromOrigin(origin) { - if (originIsExport(origin)) { - return stripQuotes(origin.moduleSymbol.name); - } if (originIsResolvedExport(origin)) { return origin.moduleSpecifier; } + if (originIsExport(origin)) { + return stripQuotes(origin.moduleSymbol.name); + } if ((origin == null ? void 0 : origin.kind) === 1 /* ThisType */) { return "ThisProperty/" /* ThisProperty */; } @@ -168793,7 +169493,7 @@ function getContextualType(previousToken, position, sourceFile, checker) { return argInfo ? checker.getContextualTypeForArgumentAtIndex(argInfo.invocation, argInfo.argumentIndex) : isEqualityOperatorKind(previousToken.kind) && isBinaryExpression(parent2) && isEqualityOperatorKind(parent2.operatorToken.kind) ? ( // completion at `x ===/**/` should be for the right side checker.getTypeAtLocation(parent2.left) - ) : checker.getContextualType(previousToken, 4 /* Completions */) || checker.getContextualType(previousToken); + ) : checker.getContextualType(previousToken, 4 /* IgnoreNodeInferences */) || checker.getContextualType(previousToken); } } function getFirstSymbolInChain(symbol, enclosingDeclaration, checker) { @@ -168942,7 +169642,7 @@ function getCompletionData(program, log, sourceFile, compilerOptions, position, location = currentToken; } break; - case 31 /* LessThanSlashToken */: + case 44 /* SlashToken */: if (currentToken.parent.kind === 286 /* JsxSelfClosingElement */) { location = currentToken; } @@ -168951,7 +169651,7 @@ function getCompletionData(program, log, sourceFile, compilerOptions, position, } switch (parent2.kind) { case 288 /* JsxClosingElement */: - if (contextToken.kind === 31 /* LessThanSlashToken */) { + if (contextToken.kind === 44 /* SlashToken */) { isStartingCloseTag = true; location = contextToken; } @@ -169029,13 +169729,13 @@ function getCompletionData(program, log, sourceFile, compilerOptions, position, } } log("getCompletionData: Semantic work: " + (timestamp() - semanticStart)); - const contextualType = previousToken && getContextualType(previousToken, position, sourceFile, typeChecker); + const contextualTypeOrConstraint = previousToken && (getContextualType(previousToken, position, sourceFile, typeChecker) ?? getConstraintOfTypeArgumentProperty(previousToken, typeChecker)); const isLiteralExpected = !tryCast(previousToken, isStringLiteralLike) && !isJsxIdentifierExpected; const literals = !isLiteralExpected ? [] : mapDefined( - contextualType && (contextualType.isUnion() ? contextualType.types : [contextualType]), - (t) => t.isLiteral() && !(t.flags & 1024 /* EnumLiteral */) ? t.value : void 0 + contextualTypeOrConstraint && (contextualTypeOrConstraint.isUnion() ? contextualTypeOrConstraint.types : [contextualTypeOrConstraint]), + (t) => t.isLiteral() && !(t.flags & 32768 /* EnumLiteral */) ? t.value : void 0 ); - const recommendedCompletion = previousToken && contextualType && getRecommendedCompletion(previousToken, contextualType, typeChecker); + const recommendedCompletion = previousToken && contextualTypeOrConstraint && getRecommendedCompletion(previousToken, contextualTypeOrConstraint, typeChecker); return { kind: 0 /* Data */, symbols, @@ -169238,7 +169938,7 @@ function getCompletionData(program, log, sourceFile, compilerOptions, position, ) || {}; if (moduleSpecifier) { const origin = { - kind: getNullableSymbolOriginInfoKind(6 /* SymbolMemberExport */), + kind: getNullableSymbolOriginInfoKind(34 /* SymbolMemberExport */), moduleSymbol, isDefaultExport: false, symbolName: firstAccessibleSymbol.name, @@ -169298,7 +169998,7 @@ function getCompletionData(program, log, sourceFile, compilerOptions, position, const jsxContainer = tryGetContainingJsxElement(contextToken); const attrsType = jsxContainer && typeChecker.getContextualType(jsxContainer.attributes); if (!attrsType) return 0 /* Continue */; - const completionsType = jsxContainer && typeChecker.getContextualType(jsxContainer.attributes, 4 /* Completions */); + const completionsType = jsxContainer && typeChecker.getContextualType(jsxContainer.attributes, 4 /* IgnoreNodeInferences */); symbols = concatenate(symbols, filterJsxAttributes(getPropertiesForObjectExpression(attrsType, completionsType, jsxContainer.attributes, typeChecker), jsxContainer.attributes.properties)); setSortTextToOptionalMember(); completionKind = 3 /* MemberLike */; @@ -169442,9 +170142,6 @@ function getCompletionData(program, log, sourceFile, compilerOptions, position, return charactersFuzzyMatchInString(symbolName2, lowerCaseTokenText); }, (info, symbolName2, isFromAmbientModule, exportMapKey) => { - if (detailsEntryId && !some(info, (i) => detailsEntryId.source === stripQuotes(i.moduleSymbol.name))) { - return; - } info = filter(info, isImportableExportInfo); if (!info.length) { return; @@ -169455,6 +170152,9 @@ function getCompletionData(program, log, sourceFile, compilerOptions, position, if (result !== "skipped") { ({ exportInfo: exportInfo2 = info[0], moduleSpecifier } = result); } + if (detailsEntryId && (detailsEntryId.source !== moduleSpecifier && !some(info, (i) => detailsEntryId.source === stripQuotes(i.moduleSymbol.name)))) { + return; + } const isDefaultExport = exportInfo2.exportKind === 1 /* Default */; const symbol = isDefaultExport && getLocalSymbolForExportDefault(Debug.checkDefined(exportInfo2.symbol)) || Debug.checkDefined(exportInfo2.symbol); pushAutoImportSymbol(symbol, { @@ -169725,7 +170425,7 @@ function getCompletionData(program, log, sourceFile, compilerOptions, position, } return 0 /* Continue */; } - const completionsType = typeChecker.getContextualType(objectLikeContainer, 4 /* Completions */); + const completionsType = typeChecker.getContextualType(objectLikeContainer, 4 /* IgnoreNodeInferences */); const hasStringIndexType = (completionsType || instantiatedType).getStringIndexType(); const hasNumberIndextype = (completionsType || instantiatedType).getNumberIndexType(); isNewIdentifierLocation = !!hasStringIndexType || !!hasNumberIndextype; @@ -170444,7 +171144,7 @@ function getPropertiesForObjectExpression(contextualType, completionsType, obj, const hasCompletionsType = completionsType && completionsType !== contextualType; const promiseFilteredContextualType = checker.getUnionType( filter( - contextualType.flags & 1048576 /* Union */ ? contextualType.types : [contextualType], + contextualType.flags & 134217728 /* Union */ ? contextualType.types : [contextualType], (t) => !checker.getPromisedTypeOfPromise(t) ) ); @@ -170458,7 +171158,7 @@ function getPropertiesForObjectExpression(contextualType, completionsType, obj, } function getApparentProperties(type, node, checker) { if (!type.isUnion()) return type.getApparentProperties(); - return checker.getAllPossiblePropertiesOfTypes(filter(type.types, (memberType) => !(memberType.flags & 402784252 /* Primitive */ || checker.isArrayLikeType(memberType) || checker.isTypeInvalidDueToUnionDiscriminant(memberType, node) || checker.typeHasCallOrConstructSignatures(memberType) || memberType.isClass() && containsNonPublicProperties(memberType.getApparentProperties())))); + return checker.getAllPossiblePropertiesOfTypes(filter(type.types, (memberType) => !(memberType.flags & 12713980 /* Primitive */ || checker.isArrayLikeType(memberType) || checker.isTypeInvalidDueToUnionDiscriminant(memberType, node) || checker.typeHasCallOrConstructSignatures(memberType) || memberType.isClass() && containsNonPublicProperties(memberType.getApparentProperties())))); } function containsNonPublicProperties(props) { return some(props, (p) => !!(getDeclarationModifierFlagsFromSymbol(p) & 6 /* NonPublicAccessibilityModifier */)); @@ -170541,18 +171241,26 @@ function tryGetTypeLiteralNode(node) { } function getConstraintOfTypeArgumentProperty(node, checker) { if (!node) return void 0; - if (isTypeNode(node) && isTypeReferenceType(node.parent)) { - return checker.getTypeArgumentConstraint(node); + if (isTypeNode(node)) { + const constraint = checker.getTypeArgumentConstraint(node); + if (constraint) return constraint; } const t = getConstraintOfTypeArgumentProperty(node.parent, checker); if (!t) return void 0; switch (node.kind) { case 172 /* PropertySignature */: return checker.getTypeOfPropertyOfContextualType(t, node.symbol.escapedName); + case 59 /* ColonToken */: + if (node.parent.kind === 172 /* PropertySignature */) { + return t; + } + break; case 194 /* IntersectionType */: case 188 /* TypeLiteral */: case 193 /* UnionType */: return t; + case 23 /* OpenBracketToken */: + return checker.getElementTypeOfArrayType(t); } } function isFromObjectTypeDeclaration(node) { @@ -170572,7 +171280,7 @@ function isValidTrigger(sourceFile, triggerCharacter, contextToken, position) { case "<": return !!contextToken && contextToken.kind === 30 /* LessThanToken */ && (!isBinaryExpression(contextToken.parent) || binaryExpressionMayBeOpenTag(contextToken.parent)); case "/": - return !!contextToken && (isStringLiteralLike(contextToken) ? !!tryGetImportFromModuleSpecifier(contextToken) : contextToken.kind === 31 /* LessThanSlashToken */ && isJsxClosingElement(contextToken.parent)); + return !!contextToken && (isStringLiteralLike(contextToken) ? !!tryGetImportFromModuleSpecifier(contextToken) : contextToken.kind === 44 /* SlashToken */ && isJsxClosingElement(contextToken.parent)); case " ": return !!contextToken && isImportKeyword(contextToken) && contextToken.parent.kind === 308 /* SourceFile */; default: @@ -171014,7 +171722,15 @@ function getStringLiteralCompletionEntries(sourceFile, node, position, program, if (isObjectLiteralExpression(parent2.parent) && parent2.name === node) { return stringLiteralCompletionsForObjectLiteral(typeChecker, parent2.parent); } - return fromContextualType() || fromContextualType(0 /* None */); + if (findAncestor(parent2.parent, isCallLikeExpression)) { + const uniques2 = /* @__PURE__ */ new Set(); + const stringLiteralTypes = concatenate( + getStringLiteralTypes(typeChecker.getContextualType(node, 0 /* None */), uniques2), + getStringLiteralTypes(typeChecker.getContextualType(node, 4 /* IgnoreNodeInferences */), uniques2) + ); + return toStringLiteralCompletionsFromTypes(stringLiteralTypes); + } + return fromContextualType(0 /* None */); case 213 /* ElementAccessExpression */: { const { expression, argumentExpression } = parent2; if (node === skipParentheses(argumentExpression)) { @@ -171074,7 +171790,12 @@ function getStringLiteralCompletionEntries(sourceFile, node, position, program, } function fromUnionableLiteralType(grandParent) { switch (grandParent.kind) { + case 214 /* CallExpression */: case 234 /* ExpressionWithTypeArguments */: + case 287 /* JsxOpeningElement */: + case 286 /* JsxSelfClosingElement */: + case 215 /* NewExpression */: + case 216 /* TaggedTemplateExpression */: case 184 /* TypeReference */: { const typeArgument = findAncestor(parent2, (n) => n.parent === grandParent); if (typeArgument) { @@ -171088,6 +171809,8 @@ function getStringLiteralCompletionEntries(sourceFile, node, position, program, return void 0; } return stringLiteralCompletionsFromProperties(typeChecker.getTypeFromTypeNode(objectType)); + case 172 /* PropertySignature */: + return { kind: 2 /* Types */, types: getStringLiteralTypes(getConstraintOfTypeArgumentProperty(grandParent, typeChecker)), isNewIdentifier: false }; case 193 /* UnionType */: { const result = fromUnionableLiteralType(walkUpParentheses(grandParent.parent)); if (!result) { @@ -171103,14 +171826,13 @@ function getStringLiteralCompletionEntries(sourceFile, node, position, program, return void 0; } } - function fromContextualType(contextFlags = 4 /* Completions */) { - const types = getStringLiteralTypes(getContextualTypeFromParent(node, typeChecker, contextFlags)); - if (!types.length) { - return; - } - return { kind: 2 /* Types */, types, isNewIdentifier: false }; + function fromContextualType(contextFlags = 4 /* IgnoreNodeInferences */) { + return toStringLiteralCompletionsFromTypes(getStringLiteralTypes(getContextualTypeFromParent(node, typeChecker, contextFlags))); } } +function toStringLiteralCompletionsFromTypes(types) { + return types.length ? { kind: 2 /* Types */, types, isNewIdentifier: false } : void 0; +} function walkUpParentheses(node) { switch (node.kind) { case 197 /* ParenthesizedType */: @@ -171138,7 +171860,7 @@ function getStringLiteralCompletionsFromSignature(call, arg, argumentInfo, check type = propType; } } - isNewIdentifier = isNewIdentifier || !!(type.flags & 4 /* String */); + isNewIdentifier = isNewIdentifier || !!(type.flags & 32 /* String */); return getStringLiteralTypes(type, uniques); }); return length(types) ? { kind: 2 /* Types */, types, isNewIdentifier } : void 0; @@ -171153,7 +171875,7 @@ function stringLiteralCompletionsFromProperties(type) { function stringLiteralCompletionsForObjectLiteral(checker, objectLiteralExpression) { const contextualType = checker.getContextualType(objectLiteralExpression); if (!contextualType) return void 0; - const completionsType = checker.getContextualType(objectLiteralExpression, 4 /* Completions */); + const completionsType = checker.getContextualType(objectLiteralExpression, 4 /* IgnoreNodeInferences */); const symbols = getPropertiesForObjectExpression( contextualType, completionsType, @@ -171169,7 +171891,7 @@ function stringLiteralCompletionsForObjectLiteral(checker, objectLiteralExpressi function getStringLiteralTypes(type, uniques = /* @__PURE__ */ new Set()) { if (!type) return emptyArray; type = skipConstraint(type); - return type.isUnion() ? flatMap(type.types, (t) => getStringLiteralTypes(t, uniques)) : type.isStringLiteral() && !(type.flags & 1024 /* EnumLiteral */) && addToSeen(uniques, type.value) ? [type] : emptyArray; + return type.isUnion() ? flatMap(type.types, (t) => getStringLiteralTypes(t, uniques)) : type.isStringLiteral() && !(type.flags & 32768 /* EnumLiteral */) && addToSeen(uniques, type.value) ? [type] : emptyArray; } function nameAndKind(name, kind, extension) { return { name, kind, extension }; @@ -171545,7 +172267,7 @@ function getCompletionEntriesForNonRelativeModules(fragment, scriptPath, mode, p if (tryFileExists(host, packageFile)) { const packageJson = readJson(packageFile, host); const fragmentSubpath = components.join("/") + (components.length && hasTrailingDirectorySeparator(fragment) ? "/" : ""); - exportsOrImportsLookup( + if (exportsOrImportsLookup( packageJson.exports, fragmentSubpath, packageDirectory, @@ -171553,8 +172275,9 @@ function getCompletionEntriesForNonRelativeModules(fragment, scriptPath, mode, p true, /*isImports*/ false - ); - return; + )) { + return; + } } return nodeModulesDirectoryOrImportsLookup(ancestor); }; @@ -171565,7 +172288,7 @@ function getCompletionEntriesForNonRelativeModules(fragment, scriptPath, mode, p return arrayFrom(result.values()); function exportsOrImportsLookup(lookupTable, fragment2, baseDirectory, isExports, isImports) { if (typeof lookupTable !== "object" || lookupTable === null) { - return; + return lookupTable !== void 0; } const keys = getOwnKeys(lookupTable); const conditions = getConditions(compilerOptions, mode); @@ -171589,6 +172312,7 @@ function getCompletionEntriesForNonRelativeModules(fragment, scriptPath, mode, p }, comparePatternKeys ); + return true; } } function getPatternFromFirstMatchingCondition(target, conditions) { @@ -174446,13 +175170,29 @@ function getDefinitionFromObjectLiteralElement(typeChecker, node) { if (element) { const contextualType = element && typeChecker.getContextualType(element.parent); if (contextualType) { - return flatMap(getPropertySymbolsFromContextualType( + let properties = getPropertySymbolsFromContextualType( element, typeChecker, contextualType, /*unionSymbolOk*/ false - ), (propertySymbol) => getDefinitionFromSymbol(typeChecker, propertySymbol, node)); + ); + if (some(properties, (p) => !!(p.valueDeclaration && isObjectLiteralExpression(p.valueDeclaration.parent) && isObjectLiteralElementLike(p.valueDeclaration) && p.valueDeclaration.name === node))) { + const withoutNodeInferencesType = typeChecker.getContextualType(element.parent, 4 /* IgnoreNodeInferences */); + if (withoutNodeInferencesType) { + const withoutNodeInferencesProperties = getPropertySymbolsFromContextualType( + element, + typeChecker, + withoutNodeInferencesType, + /*unionSymbolOk*/ + false + ); + if (withoutNodeInferencesProperties.length) { + properties = withoutNodeInferencesProperties; + } + } + } + return flatMap(properties, (propertySymbol) => getDefinitionFromSymbol(typeChecker, propertySymbol, node)); } } return emptyArray; @@ -174625,7 +175365,7 @@ function getTypeDefinitionAtPosition(typeChecker, sourceFile, position) { return typeDefinitions.length ? [...getFirstTypeArgumentDefinitions(typeChecker, resolvedType, node, failedAliasResolution), ...typeDefinitions] : !(symbol.flags & 111551 /* Value */) && symbol.flags & 788968 /* Type */ ? getDefinitionFromSymbol(typeChecker, skipAlias(symbol, typeChecker), node, failedAliasResolution) : void 0; } function definitionFromType(type, checker, node, failedAliasResolution) { - return flatMap(type.isUnion() && !(type.flags & 32 /* Enum */) ? type.types : [type], (t) => t.symbol && getDefinitionFromSymbol(checker, t.symbol, node, failedAliasResolution)); + return flatMap(type.isUnion() && !(type.flags & 65536 /* Enum */) ? type.types : [type], (t) => t.symbol && getDefinitionFromSymbol(checker, t.symbol, node, failedAliasResolution)); } function tryGetReturnTypeOfFunction(symbol, type, checker) { if (type.symbol === symbol || // At `const f = () => {}`, the symbol is `f` and the type symbol is at `() => {}` @@ -175277,6 +176017,7 @@ function provideInlayHints(context) { Debug.assertNode(node2, isTypeParameterDeclaration); if (node2.modifiers) { visitDisplayPartList(node2.modifiers, " "); + parts.push({ text: " " }); } visitForDisplayParts(node2.name); if (node2.constraint) { @@ -175292,6 +176033,7 @@ function provideInlayHints(context) { Debug.assertNode(node2, isParameter); if (node2.modifiers) { visitDisplayPartList(node2.modifiers, " "); + parts.push({ text: " " }); } if (node2.dotDotDotToken) { parts.push({ text: "..." }); @@ -177345,7 +178087,7 @@ function getRenameInfoForNode(node, typeChecker, sourceFile, program, preference if (!symbol) { if (isStringLiteralLike(node)) { const type = getContextualTypeFromParentOrAncestorTypeNode(node, typeChecker); - if (type && (type.flags & 128 /* StringLiteral */ || type.flags & 1048576 /* Union */ && every(type.types, (type2) => !!(type2.flags & 128 /* StringLiteral */)))) { + if (type && (type.flags & 1024 /* StringLiteral */ || type.flags & 134217728 /* Union */ && every(type.types, (type2) => !!(type2.flags & 1024 /* StringLiteral */)))) { return getRenameInfoSuccess(node.text, node.text, "string" /* string */, "", node, sourceFile); } } else if (isLabelName(node)) { @@ -183458,6 +184200,7 @@ __export(ts_exports2, { canHaveLocals: () => canHaveLocals, canHaveModifiers: () => canHaveModifiers, canHaveModuleSpecifier: () => canHaveModuleSpecifier, + canHaveStatements: () => canHaveStatements, canHaveSymbol: () => canHaveSymbol, canIncludeBindAndCheckDiagnostics: () => canIncludeBindAndCheckDiagnostics, canJsonReportNoInputFiles: () => canJsonReportNoInputFiles, @@ -183505,6 +184248,7 @@ __export(ts_exports2, { commonOptionsWithBuild: () => commonOptionsWithBuild, compact: () => compact, compareBooleans: () => compareBooleans, + compareComparableValues: () => compareComparableValues, compareDataObjects: () => compareDataObjects, compareDiagnostics: () => compareDiagnostics, compareEmitHelpers: () => compareEmitHelpers, @@ -183850,6 +184594,7 @@ __export(ts_exports2, { getAllowImportingTsExtensions: () => getAllowImportingTsExtensions, getAllowJSCompilerOption: () => getAllowJSCompilerOption, getAllowSyntheticDefaultImports: () => getAllowSyntheticDefaultImports, + getAlwaysStrict: () => getAlwaysStrict, getAncestor: () => getAncestor, getAnyExtensionFromPath: () => getAnyExtensionFromPath, getAreDeclarationMapsEnabled: () => getAreDeclarationMapsEnabled, @@ -183879,6 +184624,7 @@ __export(ts_exports2, { getCommonSourceDirectory: () => getCommonSourceDirectory, getCommonSourceDirectoryOfConfig: () => getCommonSourceDirectoryOfConfig, getCompilerOptionValue: () => getCompilerOptionValue, + getComputedCommonSourceDirectory: () => getComputedCommonSourceDirectory, getConditions: () => getConditions, getConfigFileParsingDiagnostics: () => getConfigFileParsingDiagnostics, getConstantValue: () => getConstantValue, @@ -184088,6 +184834,7 @@ __export(ts_exports2, { getModuleInstanceState: () => getModuleInstanceState, getModuleNameStringLiteralAt: () => getModuleNameStringLiteralAt, getModuleSpecifierEndingPreference: () => getModuleSpecifierEndingPreference, + getModuleSpecifierOfBareOrAccessedRequire: () => getModuleSpecifierOfBareOrAccessedRequire, getModuleSpecifierResolverHost: () => getModuleSpecifierResolverHost, getNameForExportedSymbol: () => getNameForExportedSymbol, getNameFromImportAttribute: () => getNameFromImportAttribute, @@ -184118,7 +184865,6 @@ __export(ts_exports2, { getNonAugmentationDeclaration: () => getNonAugmentationDeclaration, getNonDecoratorTokenPosOfNode: () => getNonDecoratorTokenPosOfNode, getNonIncrementalBuildInfoRoots: () => getNonIncrementalBuildInfoRoots, - getNonModifierTokenPosOfNode: () => getNonModifierTokenPosOfNode, getNormalizedAbsolutePath: () => getNormalizedAbsolutePath, getNormalizedAbsolutePathWithoutRoot: () => getNormalizedAbsolutePathWithoutRoot, getNormalizedPathComponents: () => getNormalizedPathComponents, @@ -184849,6 +185595,7 @@ __export(ts_exports2, { isPlusToken: () => isPlusToken, isPossiblyTypeArgumentPosition: () => isPossiblyTypeArgumentPosition, isPostfixUnaryExpression: () => isPostfixUnaryExpression, + isPotentiallyExecutableNode: () => isPotentiallyExecutableNode, isPrefixUnaryExpression: () => isPrefixUnaryExpression, isPrimitiveLiteralValue: () => isPrimitiveLiteralValue, isPrivateIdentifier: () => isPrivateIdentifier, @@ -185451,9 +186198,7 @@ __export(ts_exports2, { unmangleScopedPackageName: () => unmangleScopedPackageName, unorderedRemoveItem: () => unorderedRemoveItem, unprefixedNodeCoreModules: () => unprefixedNodeCoreModules, - unreachableCodeIsError: () => unreachableCodeIsError, unsetNodeChildren: () => unsetNodeChildren, - unusedLabelIsError: () => unusedLabelIsError, unwrapInnermostStatementOfLabel: () => unwrapInnermostStatementOfLabel, unwrapParenthesizedExpression: () => unwrapParenthesizedExpression, updateErrorForNoInputFiles: () => updateErrorForNoInputFiles, @@ -185463,6 +186208,7 @@ __export(ts_exports2, { updateSharedExtendedConfigFileWatcher: () => updateSharedExtendedConfigFileWatcher, updateSourceFile: () => updateSourceFile, updateWatchingWildcardDirectories: () => updateWatchingWildcardDirectories, + usesWildcardTypes: () => usesWildcardTypes, usingSingleLineStringWriter: () => usingSingleLineStringWriter, utf16EncodeAsString: () => utf16EncodeAsString, validateLocaleAndSetLanguage: () => validateLocaleAndSetLanguage, @@ -185827,7 +186573,7 @@ var TypingsInstaller = class { } const discoverTypingsResult = ts_JsTyping_exports.discoverTypings( this.installTypingHost, - this.log.isEnabled() ? (s) => this.log.writeLine(s) : void 0, + this.log.isEnabled() ? ((s) => this.log.writeLine(s)) : void 0, req.fileNames, req.projectRootPath, this.safeList, @@ -186486,9 +187232,11 @@ var ScriptTarget11 = /* @__PURE__ */ ((ScriptTarget12) => { ScriptTarget12["ES2022"] = "es2022"; ScriptTarget12["ES2023"] = "es2023"; ScriptTarget12["ES2024"] = "es2024"; + ScriptTarget12["ES2025"] = "es2025"; ScriptTarget12["ESNext"] = "esnext"; ScriptTarget12["JSON"] = "json"; ScriptTarget12["Latest"] = "esnext" /* ESNext */; + ScriptTarget12["LatestStandard"] = "es2025" /* ES2025 */; return ScriptTarget12; })(ScriptTarget11 || {}); { @@ -187998,6 +188746,9 @@ var Project2 = class _Project { } /** @internal */ watchTypingLocations(files) { + if (this.currentDirectory === this.projectService.currentDirectory || !canWatchDirectoryOrFilePath(this.toPath(this.currentDirectory))) { + return; + } if (!files) { this.typingWatchers.isInvoked = false; return; @@ -188066,6 +188817,15 @@ var Project2 = class _Project { }); } /** @internal */ + skipWatchingFailedLookups(path) { + const info = this.projectService.getScriptInfoForPath(path); + return info == null ? void 0 : info.isDynamic; + } + /** @internal */ + skipWatchingTypeRoots() { + return isInferredProject(this) && this.currentDirectory === this.projectService.currentDirectory; + } + /** @internal */ getCurrentProgram() { return this.program; } @@ -189463,6 +190223,9 @@ function convertCompilerOptions(protocolOptions) { protocolOptions[id] = mappedValues.get(propertyValue.toLowerCase()); } }); + if (isArray(protocolOptions.lib)) { + protocolOptions.lib = protocolOptions.lib.map((libName) => libMap.get(libName) ?? libName); + } return protocolOptions; } function convertWatchOptions(protocolOptions, currentDirectory) { @@ -190039,7 +190802,7 @@ var _ProjectService = class _ProjectService { this ); const watchLogLevel = this.logger.hasLevel(3 /* verbose */) ? 2 /* Verbose */ : this.logger.loggingEnabled() ? 1 /* TriggerOnly */ : 0 /* None */; - const log = watchLogLevel !== 0 /* None */ ? (s) => this.logger.info(s) : noop; + const log = watchLogLevel !== 0 /* None */ ? ((s) => this.logger.info(s)) : noop; this.packageJsonCache = createPackageJsonCache(this); this.watchFactory = this.serverMode !== 0 /* Semantic */ ? { watchFile: returnNoopFileWatcher, @@ -190503,7 +191266,7 @@ var _ProjectService = class _ProjectService { useCaseSensitiveFileNames: this.host.useCaseSensitiveFileNames, writeLog: (s) => this.logger.info(s), toPath: (s) => this.toPath(s), - getScriptKind: configuredProjectForConfig ? (fileName) => configuredProjectForConfig.getScriptKind(fileName) : void 0 + getScriptKind: configuredProjectForConfig ? ((fileName) => configuredProjectForConfig.getScriptKind(fileName)) : void 0 })) return; if (config.updateLevel !== 2 /* Full */) config.updateLevel = 1 /* RootNamesAndUpdate */; config.projects.forEach((watchWildcardDirectories, projectCanonicalPath) => { @@ -198219,6 +198982,7 @@ if (typeof console !== "undefined") { canHaveLocals, canHaveModifiers, canHaveModuleSpecifier, + canHaveStatements, canHaveSymbol, canIncludeBindAndCheckDiagnostics, canJsonReportNoInputFiles, @@ -198266,6 +199030,7 @@ if (typeof console !== "undefined") { commonOptionsWithBuild, compact, compareBooleans, + compareComparableValues, compareDataObjects, compareDiagnostics, compareEmitHelpers, @@ -198611,6 +199376,7 @@ if (typeof console !== "undefined") { getAllowImportingTsExtensions, getAllowJSCompilerOption, getAllowSyntheticDefaultImports, + getAlwaysStrict, getAncestor, getAnyExtensionFromPath, getAreDeclarationMapsEnabled, @@ -198640,6 +199406,7 @@ if (typeof console !== "undefined") { getCommonSourceDirectory, getCommonSourceDirectoryOfConfig, getCompilerOptionValue, + getComputedCommonSourceDirectory, getConditions, getConfigFileParsingDiagnostics, getConstantValue, @@ -198849,6 +199616,7 @@ if (typeof console !== "undefined") { getModuleInstanceState, getModuleNameStringLiteralAt, getModuleSpecifierEndingPreference, + getModuleSpecifierOfBareOrAccessedRequire, getModuleSpecifierResolverHost, getNameForExportedSymbol, getNameFromImportAttribute, @@ -198879,7 +199647,6 @@ if (typeof console !== "undefined") { getNonAugmentationDeclaration, getNonDecoratorTokenPosOfNode, getNonIncrementalBuildInfoRoots, - getNonModifierTokenPosOfNode, getNormalizedAbsolutePath, getNormalizedAbsolutePathWithoutRoot, getNormalizedPathComponents, @@ -199610,6 +200377,7 @@ if (typeof console !== "undefined") { isPlusToken, isPossiblyTypeArgumentPosition, isPostfixUnaryExpression, + isPotentiallyExecutableNode, isPrefixUnaryExpression, isPrimitiveLiteralValue, isPrivateIdentifier, @@ -200212,9 +200980,7 @@ if (typeof console !== "undefined") { unmangleScopedPackageName, unorderedRemoveItem, unprefixedNodeCoreModules, - unreachableCodeIsError, unsetNodeChildren, - unusedLabelIsError, unwrapInnermostStatementOfLabel, unwrapParenthesizedExpression, updateErrorForNoInputFiles, @@ -200224,6 +200990,7 @@ if (typeof console !== "undefined") { updateSharedExtendedConfigFileWatcher, updateSourceFile, updateWatchingWildcardDirectories, + usesWildcardTypes, usingSingleLineStringWriter, utf16EncodeAsString, validateLocaleAndSetLanguage, diff --git a/packages/schematics/angular/utility/latest-versions/package.json b/packages/schematics/angular/utility/latest-versions/package.json index ea0e8e92de5a..a696fc09273c 100644 --- a/packages/schematics/angular/utility/latest-versions/package.json +++ b/packages/schematics/angular/utility/latest-versions/package.json @@ -23,7 +23,7 @@ "tailwindcss": "^4.1.12", "@tailwindcss/postcss": "^4.1.12", "tslib": "^2.3.0", - "typescript": "~5.9.2", + "typescript": "~6.0.2", "vitest": "^4.0.8", "@vitest/browser-playwright": "^4.0.8", "@vitest/browser-webdriverio": "^4.0.8", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 952115f50b4c..d6d71bddc8c3 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -33,7 +33,7 @@ importers: version: 22.0.0-next.3 '@angular/compiler-cli': specifier: 22.0.0-next.3 - version: 22.0.0-next.3(@angular/compiler@22.0.0-next.3)(typescript@6.0.1-rc) + version: 22.0.0-next.3(@angular/compiler@22.0.0-next.3)(typescript@6.0.2) '@angular/core': specifier: 22.0.0-next.3 version: 22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1) @@ -42,7 +42,7 @@ importers: version: 22.0.0-next.3(@angular/common@22.0.0-next.3(@angular/core@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@22.0.0-next.3(@angular/animations@22.0.0-next.3(@angular/core@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@22.0.0-next.3(@angular/core@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1)))(rxjs@7.8.2) '@angular/localize': specifier: 22.0.0-next.3 - version: 22.0.0-next.3(@angular/compiler-cli@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(typescript@6.0.1-rc))(@angular/compiler@22.0.0-next.3) + version: 22.0.0-next.3(@angular/compiler-cli@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(typescript@6.0.2))(@angular/compiler@22.0.0-next.3) '@angular/material': specifier: 22.0.0-next.0 version: 22.0.0-next.0(2d75345887a5a4c2bc113233c009d4e6) @@ -168,10 +168,10 @@ importers: version: 1.1.9 '@typescript-eslint/eslint-plugin': specifier: 8.57.1 - version: 8.57.1(@typescript-eslint/parser@8.57.1(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.1-rc))(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.1-rc) + version: 8.57.1(@typescript-eslint/parser@8.57.1(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2))(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2) '@typescript-eslint/parser': specifier: 8.57.1 - version: 8.57.1(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.1-rc) + version: 8.57.1(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2) ajv: specifier: 8.18.0 version: 8.18.0 @@ -192,7 +192,7 @@ importers: version: 10.1.8(eslint@10.1.0(jiti@2.6.1)) eslint-plugin-import: specifier: 2.32.0 - version: 2.32.0(@typescript-eslint/parser@8.57.1(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.1-rc))(eslint@10.1.0(jiti@2.6.1)) + version: 2.32.0(@typescript-eslint/parser@8.57.1(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2))(eslint@10.1.0(jiti@2.6.1)) express: specifier: 5.2.1 version: 5.2.1 @@ -252,7 +252,7 @@ importers: version: 3.8.1 puppeteer: specifier: 24.40.0 - version: 24.40.0(bufferutil@4.1.0)(typescript@6.0.1-rc)(utf-8-validate@6.0.6) + version: 24.40.0(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@6.0.6) quicktype-core: specifier: 23.2.6 version: 23.2.6(encoding@0.1.13) @@ -264,7 +264,7 @@ importers: version: 3.2.1 rollup-plugin-dts: specifier: 6.4.1 - version: 6.4.1(rollup@4.60.0)(typescript@6.0.1-rc) + version: 6.4.1(rollup@4.60.0)(typescript@6.0.2) rollup-plugin-sourcemaps2: specifier: 0.5.6 version: 0.5.6(@types/node@22.19.15)(rollup@4.60.0) @@ -278,8 +278,8 @@ importers: specifier: 2.8.1 version: 2.8.1 typescript: - specifier: 6.0.1-rc - version: 6.0.1-rc + specifier: 6.0.2 + version: 6.0.2 undici: specifier: 7.24.5 version: 7.24.5 @@ -321,7 +321,7 @@ importers: version: 29.0.1 ng-packagr: specifier: 22.0.0-next.0 - version: 22.0.0-next.0(@angular/compiler-cli@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(typescript@6.0.1-rc))(tslib@2.8.1)(typescript@6.0.1-rc) + version: 22.0.0-next.0(@angular/compiler-cli@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(typescript@6.0.2))(tslib@2.8.1)(typescript@6.0.2) rxjs: specifier: 7.8.2 version: 7.8.2 @@ -424,7 +424,7 @@ importers: version: 4.6.4 ng-packagr: specifier: 22.0.0-next.0 - version: 22.0.0-next.0(@angular/compiler-cli@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(typescript@6.0.1-rc))(tslib@2.8.1)(typescript@6.0.1-rc) + version: 22.0.0-next.0(@angular/compiler-cli@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(typescript@6.0.2))(tslib@2.8.1)(typescript@6.0.2) postcss: specifier: 8.5.8 version: 8.5.8 @@ -666,7 +666,7 @@ importers: version: 8.5.8 postcss-loader: specifier: 8.2.1 - version: 8.2.1(postcss@8.5.8)(typescript@6.0.1-rc)(webpack@5.105.4(esbuild@0.27.3)) + version: 8.2.1(postcss@8.5.8)(typescript@6.0.2)(webpack@5.105.4(esbuild@0.27.3)) resolve-url-loader: specifier: 5.0.0 version: 5.0.0 @@ -721,7 +721,7 @@ importers: version: 3.0.4(bufferutil@4.1.0)(utf-8-validate@6.0.6) ng-packagr: specifier: 22.0.0-next.0 - version: 22.0.0-next.0(@angular/compiler-cli@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(typescript@6.0.1-rc))(tslib@2.8.1)(typescript@6.0.1-rc) + version: 22.0.0-next.0(@angular/compiler-cli@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(typescript@6.0.2))(tslib@2.8.1)(typescript@6.0.2) undici: specifier: 7.24.5 version: 7.24.5 @@ -817,10 +817,10 @@ importers: version: 22.0.0-next.3 '@angular/compiler-cli': specifier: 22.0.0-next.3 - version: 22.0.0-next.3(@angular/compiler@22.0.0-next.3)(typescript@6.0.1-rc) + version: 22.0.0-next.3(@angular/compiler@22.0.0-next.3)(typescript@6.0.2) typescript: - specifier: 6.0.1-rc - version: 6.0.1-rc + specifier: 6.0.2 + version: 6.0.2 webpack: specifier: 5.105.4 version: 5.105.4(esbuild@0.27.3) @@ -3779,6 +3779,12 @@ packages: peerDependencies: typescript: '>=4.8.4 <6.0.0' + '@typescript-eslint/tsconfig-utils@8.57.2': + resolution: {integrity: sha512-3Lm5DSM+DCowsUOJC+YqHHnKEfFh5CoGkj5Z31NQSNF4l5wdOwqGn99wmwN/LImhfY3KJnmordBq/4+VDe2eKw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <6.0.0' + '@typescript-eslint/type-utils@8.57.1': resolution: {integrity: sha512-+Bwwm0ScukFdyoJsh2u6pp4S9ktegF98pYUU0hkphOOqdMB+1sNQhIz8y5E9+4pOioZijrkfNO/HUJVAFFfPKA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -3794,6 +3800,10 @@ packages: resolution: {integrity: sha512-S29BOBPJSFUiblEl6RzPPjJt6w25A6XsBqRVDt53tA/tlL8q7ceQNZHTjPeONt/3S7KRI4quk+yP9jK2WjBiPQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@typescript-eslint/types@8.57.2': + resolution: {integrity: sha512-/iZM6FnM4tnx9csuTxspMW4BOSegshwX5oBDznJ7S4WggL7Vczz5d2W11ecc4vRrQMQHXRSxzrCsyG5EsPPTbA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@typescript-eslint/typescript-estree@8.57.1': resolution: {integrity: sha512-ybe2hS9G6pXpqGtPli9Gx9quNV0TWLOmh58ADlmZe9DguLq0tiAKVjirSbtM1szG6+QH6rVXyU6GTLQbWnMY+g==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -8035,8 +8045,8 @@ packages: engines: {node: '>=14.17'} hasBin: true - typescript@6.0.1-rc: - resolution: {integrity: sha512-7XlzYb+p/7YxX6qSOzwB4mxVFRdAgWWkj1PgAZ+jzldeuFV6Z77vwFbNxHsUXAL/bhlWY2jCT8shLwDJR8337g==} + typescript@6.0.2: + resolution: {integrity: sha512-bGdAIrZ0wiGDo5l8c++HWtbaNCWTS4UTv7RaTH/ThVIgjkveJt83m74bBHMJkuCbslY8ixgLBVZJIOiQlQTjfQ==} engines: {node: '>=14.17'} hasBin: true @@ -8666,7 +8676,7 @@ snapshots: rxjs: 7.8.2 tslib: 2.8.1 - '@angular/compiler-cli@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(typescript@6.0.1-rc)': + '@angular/compiler-cli@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(typescript@6.0.2)': dependencies: '@angular/compiler': 22.0.0-next.3 '@babel/core': 7.29.0 @@ -8678,7 +8688,7 @@ snapshots: tslib: 2.8.1 yargs: 18.0.0 optionalDependencies: - typescript: 6.0.1-rc + typescript: 6.0.2 transitivePeerDependencies: - supports-color @@ -8703,10 +8713,10 @@ snapshots: rxjs: 7.8.2 tslib: 2.8.1 - '@angular/localize@22.0.0-next.3(@angular/compiler-cli@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(typescript@6.0.1-rc))(@angular/compiler@22.0.0-next.3)': + '@angular/localize@22.0.0-next.3(@angular/compiler-cli@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(typescript@6.0.2))(@angular/compiler@22.0.0-next.3)': dependencies: '@angular/compiler': 22.0.0-next.3 - '@angular/compiler-cli': 22.0.0-next.3(@angular/compiler@22.0.0-next.3)(typescript@6.0.1-rc) + '@angular/compiler-cli': 22.0.0-next.3(@angular/compiler@22.0.0-next.3)(typescript@6.0.2) '@babel/core': 7.29.0 '@types/babel__core': 7.20.5 tinyglobby: 0.2.15 @@ -11681,40 +11691,40 @@ snapshots: '@types/node': 22.19.15 optional: true - '@typescript-eslint/eslint-plugin@8.57.1(@typescript-eslint/parser@8.57.1(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.1-rc))(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.1-rc)': + '@typescript-eslint/eslint-plugin@8.57.1(@typescript-eslint/parser@8.57.1(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2))(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2)': dependencies: '@eslint-community/regexpp': 4.12.2 - '@typescript-eslint/parser': 8.57.1(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.1-rc) + '@typescript-eslint/parser': 8.57.1(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2) '@typescript-eslint/scope-manager': 8.57.1 - '@typescript-eslint/type-utils': 8.57.1(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.1-rc) - '@typescript-eslint/utils': 8.57.1(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.1-rc) + '@typescript-eslint/type-utils': 8.57.1(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2) + '@typescript-eslint/utils': 8.57.1(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2) '@typescript-eslint/visitor-keys': 8.57.1 eslint: 10.1.0(jiti@2.6.1) ignore: 7.0.5 natural-compare: 1.4.0 - ts-api-utils: 2.4.0(typescript@6.0.1-rc) - typescript: 6.0.1-rc + ts-api-utils: 2.4.0(typescript@6.0.2) + typescript: 6.0.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.57.1(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.1-rc)': + '@typescript-eslint/parser@8.57.1(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2)': dependencies: '@typescript-eslint/scope-manager': 8.57.1 '@typescript-eslint/types': 8.57.1 - '@typescript-eslint/typescript-estree': 8.57.1(typescript@6.0.1-rc) + '@typescript-eslint/typescript-estree': 8.57.1(typescript@6.0.2) '@typescript-eslint/visitor-keys': 8.57.1 debug: 4.4.3(supports-color@10.2.2) eslint: 10.1.0(jiti@2.6.1) - typescript: 6.0.1-rc + typescript: 6.0.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/project-service@8.57.1(typescript@6.0.1-rc)': + '@typescript-eslint/project-service@8.57.1(typescript@6.0.2)': dependencies: - '@typescript-eslint/tsconfig-utils': 8.57.1(typescript@6.0.1-rc) - '@typescript-eslint/types': 8.57.1 + '@typescript-eslint/tsconfig-utils': 8.57.2(typescript@6.0.2) + '@typescript-eslint/types': 8.57.2 debug: 4.4.3(supports-color@10.2.2) - typescript: 6.0.1-rc + typescript: 6.0.2 transitivePeerDependencies: - supports-color @@ -11723,19 +11733,23 @@ snapshots: '@typescript-eslint/types': 8.57.1 '@typescript-eslint/visitor-keys': 8.57.1 - '@typescript-eslint/tsconfig-utils@8.57.1(typescript@6.0.1-rc)': + '@typescript-eslint/tsconfig-utils@8.57.1(typescript@6.0.2)': dependencies: - typescript: 6.0.1-rc + typescript: 6.0.2 - '@typescript-eslint/type-utils@8.57.1(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.1-rc)': + '@typescript-eslint/tsconfig-utils@8.57.2(typescript@6.0.2)': + dependencies: + typescript: 6.0.2 + + '@typescript-eslint/type-utils@8.57.1(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2)': dependencies: '@typescript-eslint/types': 8.57.1 - '@typescript-eslint/typescript-estree': 8.57.1(typescript@6.0.1-rc) - '@typescript-eslint/utils': 8.57.1(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.1-rc) + '@typescript-eslint/typescript-estree': 8.57.1(typescript@6.0.2) + '@typescript-eslint/utils': 8.57.1(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2) debug: 4.4.3(supports-color@10.2.2) eslint: 10.1.0(jiti@2.6.1) - ts-api-utils: 2.4.0(typescript@6.0.1-rc) - typescript: 6.0.1-rc + ts-api-utils: 2.4.0(typescript@6.0.2) + typescript: 6.0.2 transitivePeerDependencies: - supports-color @@ -11743,29 +11757,31 @@ snapshots: '@typescript-eslint/types@8.57.1': {} - '@typescript-eslint/typescript-estree@8.57.1(typescript@6.0.1-rc)': + '@typescript-eslint/types@8.57.2': {} + + '@typescript-eslint/typescript-estree@8.57.1(typescript@6.0.2)': dependencies: - '@typescript-eslint/project-service': 8.57.1(typescript@6.0.1-rc) - '@typescript-eslint/tsconfig-utils': 8.57.1(typescript@6.0.1-rc) + '@typescript-eslint/project-service': 8.57.1(typescript@6.0.2) + '@typescript-eslint/tsconfig-utils': 8.57.1(typescript@6.0.2) '@typescript-eslint/types': 8.57.1 '@typescript-eslint/visitor-keys': 8.57.1 debug: 4.4.3(supports-color@10.2.2) minimatch: 10.2.4 semver: 7.7.4 tinyglobby: 0.2.15 - ts-api-utils: 2.4.0(typescript@6.0.1-rc) - typescript: 6.0.1-rc + ts-api-utils: 2.4.0(typescript@6.0.2) + typescript: 6.0.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.57.1(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.1-rc)': + '@typescript-eslint/utils@8.57.1(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2)': dependencies: '@eslint-community/eslint-utils': 4.9.1(eslint@10.1.0(jiti@2.6.1)) '@typescript-eslint/scope-manager': 8.57.1 '@typescript-eslint/types': 8.57.1 - '@typescript-eslint/typescript-estree': 8.57.1(typescript@6.0.1-rc) + '@typescript-eslint/typescript-estree': 8.57.1(typescript@6.0.2) eslint: 10.1.0(jiti@2.6.1) - typescript: 6.0.1-rc + typescript: 6.0.2 transitivePeerDependencies: - supports-color @@ -12845,14 +12861,14 @@ snapshots: object-assign: 4.1.1 vary: 1.1.2 - cosmiconfig@9.0.1(typescript@6.0.1-rc): + cosmiconfig@9.0.1(typescript@6.0.2): dependencies: env-paths: 2.2.1 import-fresh: 3.3.1 js-yaml: 4.1.1 parse-json: 5.2.0 optionalDependencies: - typescript: 6.0.1-rc + typescript: 6.0.2 cross-fetch@4.1.0(encoding@0.1.13): dependencies: @@ -13330,17 +13346,17 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-module-utils@2.12.1(@typescript-eslint/parser@8.57.1(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.1-rc))(eslint-import-resolver-node@0.3.9)(eslint@10.1.0(jiti@2.6.1)): + eslint-module-utils@2.12.1(@typescript-eslint/parser@8.57.1(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2))(eslint-import-resolver-node@0.3.9)(eslint@10.1.0(jiti@2.6.1)): dependencies: debug: 3.2.7 optionalDependencies: - '@typescript-eslint/parser': 8.57.1(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.1-rc) + '@typescript-eslint/parser': 8.57.1(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2) eslint: 10.1.0(jiti@2.6.1) eslint-import-resolver-node: 0.3.9 transitivePeerDependencies: - supports-color - eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.57.1(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.1-rc))(eslint@10.1.0(jiti@2.6.1)): + eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.57.1(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2))(eslint@10.1.0(jiti@2.6.1)): dependencies: '@rtsao/scc': 1.1.0 array-includes: 3.1.9 @@ -13351,7 +13367,7 @@ snapshots: doctrine: 2.1.0 eslint: 10.1.0(jiti@2.6.1) eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.57.1(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.1-rc))(eslint-import-resolver-node@0.3.9)(eslint@10.1.0(jiti@2.6.1)) + eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.57.1(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2))(eslint-import-resolver-node@0.3.9)(eslint@10.1.0(jiti@2.6.1)) hasown: 2.0.2 is-core-module: 2.16.1 is-glob: 4.0.3 @@ -13363,7 +13379,7 @@ snapshots: string.prototype.trimend: 1.0.9 tsconfig-paths: 3.15.0 optionalDependencies: - '@typescript-eslint/parser': 8.57.1(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.1-rc) + '@typescript-eslint/parser': 8.57.1(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2) transitivePeerDependencies: - eslint-import-resolver-typescript - eslint-import-resolver-webpack @@ -15086,10 +15102,10 @@ snapshots: netmask@2.0.2: {} - ng-packagr@22.0.0-next.0(@angular/compiler-cli@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(typescript@6.0.1-rc))(tslib@2.8.1)(typescript@6.0.1-rc): + ng-packagr@22.0.0-next.0(@angular/compiler-cli@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(typescript@6.0.2))(tslib@2.8.1)(typescript@6.0.2): dependencies: '@ampproject/remapping': 2.3.0 - '@angular/compiler-cli': 22.0.0-next.3(@angular/compiler@22.0.0-next.3)(typescript@6.0.1-rc) + '@angular/compiler-cli': 22.0.0-next.3(@angular/compiler@22.0.0-next.3)(typescript@6.0.2) '@rollup/plugin-json': 6.1.0(rollup@4.59.0) '@rollup/wasm-node': 4.59.0 ajv: 8.18.0 @@ -15106,12 +15122,12 @@ snapshots: ora: 9.3.0 piscina: 5.1.4 postcss: 8.5.8 - rollup-plugin-dts: 6.4.0(rollup@4.59.0)(typescript@6.0.1-rc) + rollup-plugin-dts: 6.4.0(rollup@4.59.0)(typescript@6.0.2) rxjs: 7.8.2 sass: 1.98.0 tinyglobby: 0.2.15 tslib: 2.8.1 - typescript: 6.0.1-rc + typescript: 6.0.2 optionalDependencies: rollup: 4.59.0 @@ -15548,9 +15564,9 @@ snapshots: possible-typed-array-names@1.1.0: {} - postcss-loader@8.2.1(postcss@8.5.8)(typescript@6.0.1-rc)(webpack@5.105.4(esbuild@0.27.3)): + postcss-loader@8.2.1(postcss@8.5.8)(typescript@6.0.2)(webpack@5.105.4(esbuild@0.27.3)): dependencies: - cosmiconfig: 9.0.1(typescript@6.0.1-rc) + cosmiconfig: 9.0.1(typescript@6.0.2) jiti: 2.6.1 postcss: 8.5.8 semver: 7.7.4 @@ -15703,11 +15719,11 @@ snapshots: - supports-color - utf-8-validate - puppeteer@24.40.0(bufferutil@4.1.0)(typescript@6.0.1-rc)(utf-8-validate@6.0.6): + puppeteer@24.40.0(bufferutil@4.1.0)(typescript@6.0.2)(utf-8-validate@6.0.6): dependencies: '@puppeteer/browsers': 2.13.0 chromium-bidi: 14.0.0(devtools-protocol@0.0.1581282) - cosmiconfig: 9.0.1(typescript@6.0.1-rc) + cosmiconfig: 9.0.1(typescript@6.0.2) devtools-protocol: 0.0.1581282 puppeteer-core: 24.40.0(bufferutil@4.1.0)(utf-8-validate@6.0.6) typed-query-selector: 2.12.1 @@ -15957,25 +15973,25 @@ snapshots: semver: 7.7.4 spdx-expression-validate: 2.0.0 - rollup-plugin-dts@6.4.0(rollup@4.59.0)(typescript@6.0.1-rc): + rollup-plugin-dts@6.4.0(rollup@4.59.0)(typescript@6.0.2): dependencies: '@jridgewell/remapping': 2.3.5 '@jridgewell/sourcemap-codec': 1.5.5 convert-source-map: 2.0.0 magic-string: 0.30.21 rollup: 4.59.0 - typescript: 6.0.1-rc + typescript: 6.0.2 optionalDependencies: '@babel/code-frame': 7.29.0 - rollup-plugin-dts@6.4.1(rollup@4.60.0)(typescript@6.0.1-rc): + rollup-plugin-dts@6.4.1(rollup@4.60.0)(typescript@6.0.2): dependencies: '@jridgewell/remapping': 2.3.5 '@jridgewell/sourcemap-codec': 1.5.5 convert-source-map: 2.0.0 magic-string: 0.30.21 rollup: 4.60.0 - typescript: 6.0.1-rc + typescript: 6.0.2 optionalDependencies: '@babel/code-frame': 7.29.0 @@ -16750,9 +16766,9 @@ snapshots: dependencies: tslib: 2.8.1 - ts-api-utils@2.4.0(typescript@6.0.1-rc): + ts-api-utils@2.4.0(typescript@6.0.2): dependencies: - typescript: 6.0.1-rc + typescript: 6.0.2 tsconfig-paths@3.15.0: dependencies: @@ -16850,7 +16866,7 @@ snapshots: typescript@5.9.3: {} - typescript@6.0.1-rc: {} + typescript@6.0.2: {} ua-parser-js@0.7.41: {} diff --git a/tests/e2e/assets/ssr-project-webpack/package.json b/tests/e2e/assets/ssr-project-webpack/package.json index 06d680c58fa0..a157b69db1dc 100644 --- a/tests/e2e/assets/ssr-project-webpack/package.json +++ b/tests/e2e/assets/ssr-project-webpack/package.json @@ -35,6 +35,6 @@ "@types/express": "^4.17.24", "@types/jasmine": "~4.3.0", "@types/node": "^20.17.19", - "typescript": "~5.9.2" + "typescript": "~6.0.2" } } diff --git a/tests/e2e/assets/ssr-project-webpack/tsconfig.json b/tests/e2e/assets/ssr-project-webpack/tsconfig.json index 9fbbe86694c4..5a24f418c6cf 100644 --- a/tests/e2e/assets/ssr-project-webpack/tsconfig.json +++ b/tests/e2e/assets/ssr-project-webpack/tsconfig.json @@ -10,9 +10,8 @@ "noFallthroughCasesInSwitch": true, "sourceMap": true, "declaration": false, - "downlevelIteration": true, "experimentalDecorators": true, - "moduleResolution": "node", + "moduleResolution": "node16", "importHelpers": true, "target": "ES2022", "module": "ES2022", diff --git a/tests/e2e/tests/build/ts-paths.ts b/tests/e2e/tests/build/ts-paths.ts index 76ee53e5d2b2..1461aaef2636 100644 --- a/tests/e2e/tests/build/ts-paths.ts +++ b/tests/e2e/tests/build/ts-paths.ts @@ -4,11 +4,11 @@ import { updateTsConfig } from '../../utils/project'; export default async function () { await updateTsConfig((json) => { - json['compilerOptions']['baseUrl'] = './src'; json['compilerOptions']['paths'] = { - '@shared': ['app/shared'], - '@shared/*': ['app/shared/*'], - '@root/*': ['./*'], + '@shared': ['./src/app/shared'], + '@shared/*': ['./src/app/shared/*'], + '@root/*': ['./src/*'], + 'src/*': ['./src/*'], }; }); @@ -23,17 +23,17 @@ export default async function () { await ng('build', '--configuration=development'); await updateTsConfig((json) => { - json['compilerOptions']['paths']['*'] = ['*', 'app/shared/*']; + json['compilerOptions']['paths']['*'] = ['./*', './src/app/shared/*']; }); await appendToFile( 'src/app/app.ts', ` - import { meaning } from 'app/shared/meaning'; + import { meaning } from 'src/app/shared/meaning'; import { meaning as meaning2 } from '@shared'; import { meaning as meaning3 } from '@shared/meaning'; import { meaning as meaning4 } from 'meaning'; - import { meaning as meaning5 } from 'meaning-too'; + import { meaning as meaning5 } from 'src/meaning-too'; // need to use imports otherwise they are ignored and // no error is outputted, even if baseUrl/paths don't work From 4bbd1bf532fc2d9c36650121a05eae2fb096eb09 Mon Sep 17 00:00:00 2001 From: Oscar Busk <oscar.busk@gmail.com> Date: Tue, 24 Mar 2026 17:47:09 +0100 Subject: [PATCH 171/226] fix(@angular/cli): restore console methods after logger completes --- packages/angular/cli/lib/cli/index.ts | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/packages/angular/cli/lib/cli/index.ts b/packages/angular/cli/lib/cli/index.ts index a497dc0ea243..32f1eac5bab1 100644 --- a/packages/angular/cli/lib/cli/index.ts +++ b/packages/angular/cli/lib/cli/index.ts @@ -40,6 +40,7 @@ export default async function (options: { cliArgs: string[] }) { }; const logger = new logging.IndentLogger('cli-main-logger'); const logInfo = console.log; + const logWarn = console.warn; const logError = console.error; const useColor = supportColor(); @@ -109,5 +110,11 @@ export default async function (options: { cliArgs: string[] }) { } finally { logger.complete(); await loggerFinished; + + // Restore original console methods so that late consumers + // (e.g. process.on('exit') handlers) still produce output. + console.log = console.info = logInfo; + console.warn = logWarn; + console.error = logError; } } From 5591b72147f5209162f91461243fba343468f8d8 Mon Sep 17 00:00:00 2001 From: Angular Robot <angular-robot@google.com> Date: Wed, 25 Mar 2026 10:20:01 +0000 Subject: [PATCH 172/226] build: lock file maintenance See associated pull request for more information. --- pnpm-lock.yaml | 976 ++++++++++++++++--------------------------------- 1 file changed, 318 insertions(+), 658 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index d6d71bddc8c3..a7f65f0ebf05 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -99,7 +99,7 @@ importers: version: 5.10.0(eslint@10.1.0(jiti@2.6.1)) '@tony.ganchev/eslint-plugin-header': specifier: ~3.3.1 - version: 3.3.1(eslint@10.1.0(jiti@2.6.1)) + version: 3.3.3(eslint@10.1.0(jiti@2.6.1)) '@types/babel__core': specifier: 7.20.5 version: 7.20.5 @@ -312,7 +312,7 @@ importers: version: link:../../../packages/angular/ssr '@vitest/coverage-v8': specifier: 4.1.0 - version: 4.1.0(vitest@4.1.0(@opentelemetry/api@1.9.0)(@types/node@24.12.0)(jiti@2.6.1)(jsdom@29.0.1)(less@4.6.4)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2)) + version: 4.1.0(vitest@4.1.0(@opentelemetry/api@1.9.0)(@types/node@24.12.0)(jiti@2.6.1)(jsdom@29.0.1)(less@4.6.4)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) browser-sync: specifier: 3.0.4 version: 3.0.4(bufferutil@4.1.0)(utf-8-validate@6.0.6) @@ -327,7 +327,7 @@ importers: version: 7.8.2 vitest: specifier: 4.1.0 - version: 4.1.0(@opentelemetry/api@1.9.0)(@types/node@24.12.0)(jiti@2.6.1)(jsdom@29.0.1)(less@4.6.4)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2) + version: 4.1.0(@opentelemetry/api@1.9.0)(@types/node@24.12.0)(jiti@2.6.1)(jsdom@29.0.1)(less@4.6.4)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) packages/angular/build: dependencies: @@ -351,7 +351,7 @@ importers: version: 6.0.10(@types/node@24.12.0) '@vitejs/plugin-basic-ssl': specifier: 2.2.0 - version: 2.2.0(vite@7.3.1(@types/node@24.12.0)(jiti@2.6.1)(less@4.6.4)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2)) + version: 2.2.0(vite@7.3.1(@types/node@24.12.0)(jiti@2.6.1)(less@4.6.4)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) beasties: specifier: 0.4.1 version: 0.4.1 @@ -405,7 +405,7 @@ importers: version: 0.2.15 vite: specifier: 7.3.1 - version: 7.3.1(@types/node@24.12.0)(jiti@2.6.1)(less@4.6.4)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2) + version: 7.3.1(@types/node@24.12.0)(jiti@2.6.1)(less@4.6.4)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) watchpack: specifier: 2.5.1 version: 2.5.1 @@ -433,7 +433,7 @@ importers: version: 7.8.2 vitest: specifier: 4.1.0 - version: 4.1.0(@opentelemetry/api@1.9.0)(@types/node@24.12.0)(jiti@2.6.1)(jsdom@29.0.1)(less@4.6.4)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2) + version: 4.1.0(@opentelemetry/api@1.9.0)(@types/node@24.12.0)(jiti@2.6.1)(jsdom@29.0.1)(less@4.6.4)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) optionalDependencies: lmdb: specifier: 3.5.2 @@ -1046,8 +1046,8 @@ packages: resolution: {integrity: sha512-2SZFvqMyvboVV1d15lMf7XiI3m7SDqXUuKaTymJYLN6dSGadqp+fVojqJlVoMlbZnlTmu3S0TLwLTJpvBMO1Aw==} engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0} - '@asamuzakjp/dom-selector@7.0.3': - resolution: {integrity: sha512-Q6mU0Z6bfj6YvnX2k9n0JxiIwrCFN59x/nWmYQnAqP000ruX/yV+5bp/GRcF5T8ncvfwJQ7fgfP74DlpKExILA==} + '@asamuzakjp/dom-selector@7.0.4': + resolution: {integrity: sha512-jXR6x4AcT3eIrS2fSNAwJpwirOkGcd+E7F7CP3zjdTqz9B/2huHOL8YJZBgekKwLML+u7qB/6P1LXQuMScsx0w==} engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0} '@asamuzakjp/nwsapi@2.3.9': @@ -1089,8 +1089,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0 - '@babel/helper-define-polyfill-provider@0.6.7': - resolution: {integrity: sha512-6Fqi8MtQ/PweQ9xvux65emkLQ83uB+qAVtfHkC9UodyHMIZdxNI01HjLCLUtybElp2KY2XNE0nOgyP1E1vXw9w==} + '@babel/helper-define-polyfill-provider@0.6.8': + resolution: {integrity: sha512-47UwBLPpQi1NoWzLuHNjRoHlYXMwIJoBf7MFou6viC/sIHWYygpvr0B6IAyh5sBdA2nr2LPIRww8lfaUVQINBA==} peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 @@ -1156,12 +1156,12 @@ packages: resolution: {integrity: sha512-z+PwLziMNBeSQJonizz2AGnndLsP2DeGHIxDAn+wdHOGuo4Fo1x1HBPPXeE9TAOPHNNWQKCSlA2VZyYyyibDnQ==} engines: {node: '>=6.9.0'} - '@babel/helpers@7.28.6': - resolution: {integrity: sha512-xOBvwq86HHdB7WUDTfKfT/Vuxh7gElQ+Sfti2Cy6yIWNW05P8iUslOVcZ4/sKbE+/jQaukQAdz/gf3724kYdqw==} + '@babel/helpers@7.29.2': + resolution: {integrity: sha512-HoGuUs4sCZNezVEKdVcwqmZN8GoHirLUcLaYVNBK2J0DadGtdcqgr3BCbvH8+XUo4NGjNl3VOtSjEKNzqfFgKw==} engines: {node: '>=6.9.0'} - '@babel/parser@7.29.0': - resolution: {integrity: sha512-IyDgFV5GeDUVX4YdF/3CPULtVGSXXMLh1xVIgdCgxApktqnQV0r7/8Nqthg+8YLGaAtdyIlo2qIdZrbCv4+7ww==} + '@babel/parser@7.29.2': + resolution: {integrity: sha512-4GgRzy/+fsBa72/RZVJmGKPmZu9Byn8o4MoLpmNe1m8ZfYnz5emHLQz3U4gLud6Zwl0RZIcgiLD7Uq7ySFuDLA==} engines: {node: '>=6.0.0'} hasBin: true @@ -1634,11 +1634,11 @@ packages: resolution: {integrity: sha512-dDlz3W405VMFO4w5kIP9DOmELBcvFQGmLoKSdIRstBDubKFYwaNHV1NnlzMCQpXQFGWVALmeMORAuiLx18AvZQ==} engines: {node: '>=14.17.0'} - '@emnapi/core@1.9.0': - resolution: {integrity: sha512-0DQ98G9ZQZOxfUcQn1waV2yS8aWdZ6kJMbYCJB3oUBecjWYO1fqJ+a1DRfPF3O5JEkwqwP1A9QEN/9mYm2Yd0w==} + '@emnapi/core@1.9.1': + resolution: {integrity: sha512-mukuNALVsoix/w1BJwFzwXBN/dHeejQtuVzcDsfOEsdpCumXb/E9j8w11h5S54tT1xhifGfbbSm/ICrObRb3KA==} - '@emnapi/runtime@1.9.0': - resolution: {integrity: sha512-QN75eB0IH2ywSpRpNddCRfQIhmJYBCJ1x5Lb3IscKAL8bMnVAKnRg8dCoXbHzVLLH7P38N2Z3mtulB7W0J0FKw==} + '@emnapi/runtime@1.9.1': + resolution: {integrity: sha512-VYi5+ZVLhpgK4hQ0TAjiQiZ6ol0oe4mBx7mVv7IflsiEp0OWoVsp/+f9Vc1hOhE0TtkORVrI1GvzyreqpgWtkA==} '@emnapi/wasi-threads@1.2.0': resolution: {integrity: sha512-N10dEJNSsUx41Z6pZsXU8FjPjpBEplgH24sfkmITrBED1/U2Esum9F3lfLrMjKHHjmi557zQn7kR9R+XWXu5Rg==} @@ -2070,8 +2070,8 @@ packages: '@firebase/webchannel-wrapper@1.0.5': resolution: {integrity: sha512-+uGNN7rkfn41HLO0vekTFhTxk61eKa8mTpRGLO0QSqlQdKvIoGAvLp3ppdVIWbTGYJWM6Kp0iN+PjMIOcnVqTw==} - '@gar/promise-retry@1.0.2': - resolution: {integrity: sha512-Lm/ZLhDZcBECta3TmCQSngiQykFdfw+QtI1/GYMsZd4l3nG+P8WLB16XuS7WaBGLQ+9E+cOcWQsth9cayuGt8g==} + '@gar/promise-retry@1.0.3': + resolution: {integrity: sha512-GmzA9ckNokPypTg10pgpeHNQe7ph+iIKKmhKu3Ob9ANkswreCx7R3cKmY781K8QK3AqVL3xVh9A42JvIAbkkSA==} engines: {node: ^20.17.0 || >=22.9.0} '@glideapps/ts-necessities@2.2.3': @@ -2382,50 +2382,50 @@ packages: peerDependencies: tslib: '2' - '@jsonjoy.com/fs-core@4.56.11': - resolution: {integrity: sha512-wThHjzUp01ImIjfCwhs+UnFkeGPFAymwLEkOtenHewaKe2pTP12p6r1UuwikA9NEvNf9Vlck92r8fb8n/MWM5w==} + '@jsonjoy.com/fs-core@4.57.1': + resolution: {integrity: sha512-YrEi/ZPmgc+GfdO0esBF04qv8boK9Dg9WpRQw/+vM8Qt3nnVIJWIa8HwZ/LXVZ0DB11XUROM8El/7yYTJX+WtA==} engines: {node: '>=10.0'} peerDependencies: tslib: '2' - '@jsonjoy.com/fs-fsa@4.56.11': - resolution: {integrity: sha512-ZYlF3XbMayyp97xEN8ZvYutU99PCHjM64mMZvnCseXkCJXJDVLAwlF8Q/7q/xiWQRsv3pQBj1WXHd9eEyYcaCQ==} + '@jsonjoy.com/fs-fsa@4.57.1': + resolution: {integrity: sha512-ooEPvSW/HQDivPDPZMibHGKZf/QS4WRir1czGZmXmp3MsQqLECZEpN0JobrD8iV9BzsuwdIv+PxtWX9WpPLsIA==} engines: {node: '>=10.0'} peerDependencies: tslib: '2' - '@jsonjoy.com/fs-node-builtins@4.56.11': - resolution: {integrity: sha512-CNmt3a0zMCIhniFLXtzPWuUxXFU+U+2VyQiIrgt/rRVeEJNrMQUABaRbVxR0Ouw1LyR9RjaEkPM6nYpED+y43A==} + '@jsonjoy.com/fs-node-builtins@4.57.1': + resolution: {integrity: sha512-XHkFKQ5GSH3uxm8c3ZYXVrexGdscpWKIcMWKFQpMpMJc8gA3AwOMBJXJlgpdJqmrhPyQXxaY9nbkNeYpacC0Og==} engines: {node: '>=10.0'} peerDependencies: tslib: '2' - '@jsonjoy.com/fs-node-to-fsa@4.56.11': - resolution: {integrity: sha512-5OzGdvJDgZVo+xXWEYo72u81zpOWlxlbG4d4nL+hSiW+LKlua/dldNgPrpWxtvhgyntmdFQad2UTxFyGjJAGhA==} + '@jsonjoy.com/fs-node-to-fsa@4.57.1': + resolution: {integrity: sha512-pqGHyWWzNck4jRfaGV39hkqpY5QjRUQ/nRbNT7FYbBa0xf4bDG+TE1Gt2KWZrSkrkZZDE3qZUjYMbjwSliX6pg==} engines: {node: '>=10.0'} peerDependencies: tslib: '2' - '@jsonjoy.com/fs-node-utils@4.56.11': - resolution: {integrity: sha512-JADOZFDA3wRfsuxkT0+MYc4F9hJO2PYDaY66kRTG6NqGX3+bqmKu66YFYAbII/tEmQWPZeHoClUB23rtQM9UPg==} + '@jsonjoy.com/fs-node-utils@4.57.1': + resolution: {integrity: sha512-vp+7ZzIB8v43G+GLXTS4oDUSQmhAsRz532QmmWBbdYA20s465JvwhkSFvX9cVTqRRAQg+vZ7zWDaIEh0lFe2gw==} engines: {node: '>=10.0'} peerDependencies: tslib: '2' - '@jsonjoy.com/fs-node@4.56.11': - resolution: {integrity: sha512-D65YrnP6wRuZyEWoSFnBJSr5zARVpVBGctnhie4rCsMuGXNzX7IHKaOt85/Aj7SSoG1N2+/xlNjWmkLvZ2H3Tg==} + '@jsonjoy.com/fs-node@4.57.1': + resolution: {integrity: sha512-3YaKhP8gXEKN+2O49GLNfNb5l2gbnCFHyAaybbA2JkkbQP3dpdef7WcUaHAulg/c5Dg4VncHsA3NWAUSZMR5KQ==} engines: {node: '>=10.0'} peerDependencies: tslib: '2' - '@jsonjoy.com/fs-print@4.56.11': - resolution: {integrity: sha512-rnaKRgCRIn8JGTjxhS0JPE38YM3Pj/H7SW4/tglhIPbfKEkky7dpPayNKV2qy25SZSL15oFVgH/62dMZ/z7cyA==} + '@jsonjoy.com/fs-print@4.57.1': + resolution: {integrity: sha512-Ynct7ZJmfk6qoXDOKfpovNA36ITUx8rChLmRQtW08J73VOiuNsU8PB6d/Xs7fxJC2ohWR3a5AqyjmLojfrw5yw==} engines: {node: '>=10.0'} peerDependencies: tslib: '2' - '@jsonjoy.com/fs-snapshot@4.56.11': - resolution: {integrity: sha512-IIldPX+cIRQuUol9fQzSS3hqyECxVpYMJQMqdU3dCKZFRzEl1rkIkw4P6y7Oh493sI7YdxZlKr/yWdzEWZ1wGQ==} + '@jsonjoy.com/fs-snapshot@4.57.1': + resolution: {integrity: sha512-/oG8xBNFMbDXTq9J7vepSA1kerS5vpgd3p5QZSPd+nX59uwodGJftI51gDYyHRpP57P3WCQf7LHtBYPqwUg2Bg==} engines: {node: '>=10.0'} peerDependencies: tslib: '2' @@ -3162,287 +3162,144 @@ packages: rollup: optional: true - '@rollup/rollup-android-arm-eabi@4.59.0': - resolution: {integrity: sha512-upnNBkA6ZH2VKGcBj9Fyl9IGNPULcjXRlg0LLeaioQWueH30p6IXtJEbKAgvyv+mJaMxSm1l6xwDXYjpEMiLMg==} - cpu: [arm] - os: [android] - '@rollup/rollup-android-arm-eabi@4.60.0': resolution: {integrity: sha512-WOhNW9K8bR3kf4zLxbfg6Pxu2ybOUbB2AjMDHSQx86LIF4rH4Ft7vmMwNt0loO0eonglSNy4cpD3MKXXKQu0/A==} cpu: [arm] os: [android] - '@rollup/rollup-android-arm64@4.59.0': - resolution: {integrity: sha512-hZ+Zxj3SySm4A/DylsDKZAeVg0mvi++0PYVceVyX7hemkw7OreKdCvW2oQ3T1FMZvCaQXqOTHb8qmBShoqk69Q==} - cpu: [arm64] - os: [android] - '@rollup/rollup-android-arm64@4.60.0': resolution: {integrity: sha512-u6JHLll5QKRvjciE78bQXDmqRqNs5M/3GVqZeMwvmjaNODJih/WIrJlFVEihvV0MiYFmd+ZyPr9wxOVbPAG2Iw==} cpu: [arm64] os: [android] - '@rollup/rollup-darwin-arm64@4.59.0': - resolution: {integrity: sha512-W2Psnbh1J8ZJw0xKAd8zdNgF9HRLkdWwwdWqubSVk0pUuQkoHnv7rx4GiF9rT4t5DIZGAsConRE3AxCdJ4m8rg==} - cpu: [arm64] - os: [darwin] - '@rollup/rollup-darwin-arm64@4.60.0': resolution: {integrity: sha512-qEF7CsKKzSRc20Ciu2Zw1wRrBz4g56F7r/vRwY430UPp/nt1x21Q/fpJ9N5l47WWvJlkNCPJz3QRVw008fi7yA==} cpu: [arm64] os: [darwin] - '@rollup/rollup-darwin-x64@4.59.0': - resolution: {integrity: sha512-ZW2KkwlS4lwTv7ZVsYDiARfFCnSGhzYPdiOU4IM2fDbL+QGlyAbjgSFuqNRbSthybLbIJ915UtZBtmuLrQAT/w==} - cpu: [x64] - os: [darwin] - '@rollup/rollup-darwin-x64@4.60.0': resolution: {integrity: sha512-WADYozJ4QCnXCH4wPB+3FuGmDPoFseVCUrANmA5LWwGmC6FL14BWC7pcq+FstOZv3baGX65tZ378uT6WG8ynTw==} cpu: [x64] os: [darwin] - '@rollup/rollup-freebsd-arm64@4.59.0': - resolution: {integrity: sha512-EsKaJ5ytAu9jI3lonzn3BgG8iRBjV4LxZexygcQbpiU0wU0ATxhNVEpXKfUa0pS05gTcSDMKpn3Sx+QB9RlTTA==} - cpu: [arm64] - os: [freebsd] - '@rollup/rollup-freebsd-arm64@4.60.0': resolution: {integrity: sha512-6b8wGHJlDrGeSE3aH5mGNHBjA0TTkxdoNHik5EkvPHCt351XnigA4pS7Wsj/Eo9Y8RBU6f35cjN9SYmCFBtzxw==} cpu: [arm64] os: [freebsd] - '@rollup/rollup-freebsd-x64@4.59.0': - resolution: {integrity: sha512-d3DuZi2KzTMjImrxoHIAODUZYoUUMsuUiY4SRRcJy6NJoZ6iIqWnJu9IScV9jXysyGMVuW+KNzZvBLOcpdl3Vg==} - cpu: [x64] - os: [freebsd] - '@rollup/rollup-freebsd-x64@4.60.0': resolution: {integrity: sha512-h25Ga0t4jaylMB8M/JKAyrvvfxGRjnPQIR8lnCayyzEjEOx2EJIlIiMbhpWxDRKGKF8jbNH01NnN663dH638mA==} cpu: [x64] os: [freebsd] - '@rollup/rollup-linux-arm-gnueabihf@4.59.0': - resolution: {integrity: sha512-t4ONHboXi/3E0rT6OZl1pKbl2Vgxf9vJfWgmUoCEVQVxhW6Cw/c8I6hbbu7DAvgp82RKiH7TpLwxnJeKv2pbsw==} - cpu: [arm] - os: [linux] - libc: [glibc] - '@rollup/rollup-linux-arm-gnueabihf@4.60.0': resolution: {integrity: sha512-RzeBwv0B3qtVBWtcuABtSuCzToo2IEAIQrcyB/b2zMvBWVbjo8bZDjACUpnaafaxhTw2W+imQbP2BD1usasK4g==} cpu: [arm] os: [linux] libc: [glibc] - '@rollup/rollup-linux-arm-musleabihf@4.59.0': - resolution: {integrity: sha512-CikFT7aYPA2ufMD086cVORBYGHffBo4K8MQ4uPS/ZnY54GKj36i196u8U+aDVT2LX4eSMbyHtyOh7D7Zvk2VvA==} - cpu: [arm] - os: [linux] - libc: [musl] - '@rollup/rollup-linux-arm-musleabihf@4.60.0': resolution: {integrity: sha512-Sf7zusNI2CIU1HLzuu9Tc5YGAHEZs5Lu7N1ssJG4Tkw6e0MEsN7NdjUDDfGNHy2IU+ENyWT+L2obgWiguWibWQ==} cpu: [arm] os: [linux] libc: [musl] - '@rollup/rollup-linux-arm64-gnu@4.59.0': - resolution: {integrity: sha512-jYgUGk5aLd1nUb1CtQ8E+t5JhLc9x5WdBKew9ZgAXg7DBk0ZHErLHdXM24rfX+bKrFe+Xp5YuJo54I5HFjGDAA==} - cpu: [arm64] - os: [linux] - libc: [glibc] - '@rollup/rollup-linux-arm64-gnu@4.60.0': resolution: {integrity: sha512-DX2x7CMcrJzsE91q7/O02IJQ5/aLkVtYFryqCjduJhUfGKG6yJV8hxaw8pZa93lLEpPTP/ohdN4wFz7yp/ry9A==} cpu: [arm64] os: [linux] libc: [glibc] - '@rollup/rollup-linux-arm64-musl@4.59.0': - resolution: {integrity: sha512-peZRVEdnFWZ5Bh2KeumKG9ty7aCXzzEsHShOZEFiCQlDEepP1dpUl/SrUNXNg13UmZl+gzVDPsiCwnV1uI0RUA==} - cpu: [arm64] - os: [linux] - libc: [musl] - '@rollup/rollup-linux-arm64-musl@4.60.0': resolution: {integrity: sha512-09EL+yFVbJZlhcQfShpswwRZ0Rg+z/CsSELFCnPt3iK+iqwGsI4zht3secj5vLEs957QvFFXnzAT0FFPIxSrkQ==} cpu: [arm64] os: [linux] libc: [musl] - '@rollup/rollup-linux-loong64-gnu@4.59.0': - resolution: {integrity: sha512-gbUSW/97f7+r4gHy3Jlup8zDG190AuodsWnNiXErp9mT90iCy9NKKU0Xwx5k8VlRAIV2uU9CsMnEFg/xXaOfXg==} - cpu: [loong64] - os: [linux] - libc: [glibc] - '@rollup/rollup-linux-loong64-gnu@4.60.0': resolution: {integrity: sha512-i9IcCMPr3EXm8EQg5jnja0Zyc1iFxJjZWlb4wr7U2Wx/GrddOuEafxRdMPRYVaXjgbhvqalp6np07hN1w9kAKw==} cpu: [loong64] os: [linux] libc: [glibc] - '@rollup/rollup-linux-loong64-musl@4.59.0': - resolution: {integrity: sha512-yTRONe79E+o0FWFijasoTjtzG9EBedFXJMl888NBEDCDV9I2wGbFFfJQQe63OijbFCUZqxpHz1GzpbtSFikJ4Q==} - cpu: [loong64] - os: [linux] - libc: [musl] - '@rollup/rollup-linux-loong64-musl@4.60.0': resolution: {integrity: sha512-DGzdJK9kyJ+B78MCkWeGnpXJ91tK/iKA6HwHxF4TAlPIY7GXEvMe8hBFRgdrR9Ly4qebR/7gfUs9y2IoaVEyog==} cpu: [loong64] os: [linux] libc: [musl] - '@rollup/rollup-linux-ppc64-gnu@4.59.0': - resolution: {integrity: sha512-sw1o3tfyk12k3OEpRddF68a1unZ5VCN7zoTNtSn2KndUE+ea3m3ROOKRCZxEpmT9nsGnogpFP9x6mnLTCaoLkA==} - cpu: [ppc64] - os: [linux] - libc: [glibc] - '@rollup/rollup-linux-ppc64-gnu@4.60.0': resolution: {integrity: sha512-RwpnLsqC8qbS8z1H1AxBA1H6qknR4YpPR9w2XX0vo2Sz10miu57PkNcnHVaZkbqyw/kUWfKMI73jhmfi9BRMUQ==} cpu: [ppc64] os: [linux] libc: [glibc] - '@rollup/rollup-linux-ppc64-musl@4.59.0': - resolution: {integrity: sha512-+2kLtQ4xT3AiIxkzFVFXfsmlZiG5FXYW7ZyIIvGA7Bdeuh9Z0aN4hVyXS/G1E9bTP/vqszNIN/pUKCk/BTHsKA==} - cpu: [ppc64] - os: [linux] - libc: [musl] - '@rollup/rollup-linux-ppc64-musl@4.60.0': resolution: {integrity: sha512-Z8pPf54Ly3aqtdWC3G4rFigZgNvd+qJlOE52fmko3KST9SoGfAdSRCwyoyG05q1HrrAblLbk1/PSIV+80/pxLg==} cpu: [ppc64] os: [linux] libc: [musl] - '@rollup/rollup-linux-riscv64-gnu@4.59.0': - resolution: {integrity: sha512-NDYMpsXYJJaj+I7UdwIuHHNxXZ/b/N2hR15NyH3m2qAtb/hHPA4g4SuuvrdxetTdndfj9b1WOmy73kcPRoERUg==} - cpu: [riscv64] - os: [linux] - libc: [glibc] - '@rollup/rollup-linux-riscv64-gnu@4.60.0': resolution: {integrity: sha512-3a3qQustp3COCGvnP4SvrMHnPQ9d1vzCakQVRTliaz8cIp/wULGjiGpbcqrkv0WrHTEp8bQD/B3HBjzujVWLOA==} cpu: [riscv64] os: [linux] libc: [glibc] - '@rollup/rollup-linux-riscv64-musl@4.59.0': - resolution: {integrity: sha512-nLckB8WOqHIf1bhymk+oHxvM9D3tyPndZH8i8+35p/1YiVoVswPid2yLzgX7ZJP0KQvnkhM4H6QZ5m0LzbyIAg==} - cpu: [riscv64] - os: [linux] - libc: [musl] - '@rollup/rollup-linux-riscv64-musl@4.60.0': resolution: {integrity: sha512-pjZDsVH/1VsghMJ2/kAaxt6dL0psT6ZexQVrijczOf+PeP2BUqTHYejk3l6TlPRydggINOeNRhvpLa0AYpCWSQ==} cpu: [riscv64] os: [linux] libc: [musl] - '@rollup/rollup-linux-s390x-gnu@4.59.0': - resolution: {integrity: sha512-oF87Ie3uAIvORFBpwnCvUzdeYUqi2wY6jRFWJAy1qus/udHFYIkplYRW+wo+GRUP4sKzYdmE1Y3+rY5Gc4ZO+w==} - cpu: [s390x] - os: [linux] - libc: [glibc] - '@rollup/rollup-linux-s390x-gnu@4.60.0': resolution: {integrity: sha512-3ObQs0BhvPgiUVZrN7gqCSvmFuMWvWvsjG5ayJ3Lraqv+2KhOsp+pUbigqbeWqueGIsnn+09HBw27rJ+gYK4VQ==} cpu: [s390x] os: [linux] libc: [glibc] - '@rollup/rollup-linux-x64-gnu@4.59.0': - resolution: {integrity: sha512-3AHmtQq/ppNuUspKAlvA8HtLybkDflkMuLK4DPo77DfthRb71V84/c4MlWJXixZz4uruIH4uaa07IqoAkG64fg==} - cpu: [x64] - os: [linux] - libc: [glibc] - '@rollup/rollup-linux-x64-gnu@4.60.0': resolution: {integrity: sha512-EtylprDtQPdS5rXvAayrNDYoJhIz1/vzN2fEubo3yLE7tfAw+948dO0g4M0vkTVFhKojnF+n6C8bDNe+gDRdTg==} cpu: [x64] os: [linux] libc: [glibc] - '@rollup/rollup-linux-x64-musl@4.59.0': - resolution: {integrity: sha512-2UdiwS/9cTAx7qIUZB/fWtToJwvt0Vbo0zmnYt7ED35KPg13Q0ym1g442THLC7VyI6JfYTP4PiSOWyoMdV2/xg==} - cpu: [x64] - os: [linux] - libc: [musl] - '@rollup/rollup-linux-x64-musl@4.60.0': resolution: {integrity: sha512-k09oiRCi/bHU9UVFqD17r3eJR9bn03TyKraCrlz5ULFJGdJGi7VOmm9jl44vOJvRJ6P7WuBi/s2A97LxxHGIdw==} cpu: [x64] os: [linux] libc: [musl] - '@rollup/rollup-openbsd-x64@4.59.0': - resolution: {integrity: sha512-M3bLRAVk6GOwFlPTIxVBSYKUaqfLrn8l0psKinkCFxl4lQvOSz8ZrKDz2gxcBwHFpci0B6rttydI4IpS4IS/jQ==} - cpu: [x64] - os: [openbsd] - '@rollup/rollup-openbsd-x64@4.60.0': resolution: {integrity: sha512-1o/0/pIhozoSaDJoDcec+IVLbnRtQmHwPV730+AOD29lHEEo4F5BEUB24H0OBdhbBBDwIOSuf7vgg0Ywxdfiiw==} cpu: [x64] os: [openbsd] - '@rollup/rollup-openharmony-arm64@4.59.0': - resolution: {integrity: sha512-tt9KBJqaqp5i5HUZzoafHZX8b5Q2Fe7UjYERADll83O4fGqJ49O1FsL6LpdzVFQcpwvnyd0i+K/VSwu/o/nWlA==} - cpu: [arm64] - os: [openharmony] - '@rollup/rollup-openharmony-arm64@4.60.0': resolution: {integrity: sha512-pESDkos/PDzYwtyzB5p/UoNU/8fJo68vcXM9ZW2V0kjYayj1KaaUfi1NmTUTUpMn4UhU4gTuK8gIaFO4UGuMbA==} cpu: [arm64] os: [openharmony] - '@rollup/rollup-win32-arm64-msvc@4.59.0': - resolution: {integrity: sha512-V5B6mG7OrGTwnxaNUzZTDTjDS7F75PO1ae6MJYdiMu60sq0CqN5CVeVsbhPxalupvTX8gXVSU9gq+Rx1/hvu6A==} - cpu: [arm64] - os: [win32] - '@rollup/rollup-win32-arm64-msvc@4.60.0': resolution: {integrity: sha512-hj1wFStD7B1YBeYmvY+lWXZ7ey73YGPcViMShYikqKT1GtstIKQAtfUI6yrzPjAy/O7pO0VLXGmUVWXQMaYgTQ==} cpu: [arm64] os: [win32] - '@rollup/rollup-win32-ia32-msvc@4.59.0': - resolution: {integrity: sha512-UKFMHPuM9R0iBegwzKF4y0C4J9u8C6MEJgFuXTBerMk7EJ92GFVFYBfOZaSGLu6COf7FxpQNqhNS4c4icUPqxA==} - cpu: [ia32] - os: [win32] - '@rollup/rollup-win32-ia32-msvc@4.60.0': resolution: {integrity: sha512-SyaIPFoxmUPlNDq5EHkTbiKzmSEmq/gOYFI/3HHJ8iS/v1mbugVa7dXUzcJGQfoytp9DJFLhHH4U3/eTy2Bq4w==} cpu: [ia32] os: [win32] - '@rollup/rollup-win32-x64-gnu@4.59.0': - resolution: {integrity: sha512-laBkYlSS1n2L8fSo1thDNGrCTQMmxjYY5G0WFWjFFYZkKPjsMBsgJfGf4TLxXrF6RyhI60L8TMOjBMvXiTcxeA==} - cpu: [x64] - os: [win32] - '@rollup/rollup-win32-x64-gnu@4.60.0': resolution: {integrity: sha512-RdcryEfzZr+lAr5kRm2ucN9aVlCCa2QNq4hXelZxb8GG0NJSazq44Z3PCCc8wISRuCVnGs0lQJVX5Vp6fKA+IA==} cpu: [x64] os: [win32] - '@rollup/rollup-win32-x64-msvc@4.59.0': - resolution: {integrity: sha512-2HRCml6OztYXyJXAvdDXPKcawukWY2GpR5/nxKp4iBgiO3wcoEGkAaqctIbZcNB6KlUQBIqt8VYkNSj2397EfA==} - cpu: [x64] - os: [win32] - '@rollup/rollup-win32-x64-msvc@4.60.0': resolution: {integrity: sha512-PrsWNQ8BuE00O3Xsx3ALh2Df8fAj9+cvvX9AIA6o4KpATR98c9mud4XtDWVvsEuyia5U4tVSTKygawyJkjm60w==} cpu: [x64] os: [win32] - '@rollup/wasm-node@4.59.0': - resolution: {integrity: sha512-cKB/Pe05aJWQYw3UFS79Id+KVXdExBxWful0+CSl24z3ukwOgBSy6l39XZNwfm3vCh/fpUrAAs+T7PsJ6dC8NA==} - engines: {node: '>=18.0.0', npm: '>=8.0.0'} - hasBin: true - '@rollup/wasm-node@4.60.0': resolution: {integrity: sha512-b4MyEi8S6dvHy0ZAwxO/zQPxpagdv+VZQDlTDaQJloif+axEHbjaJ+dkjN+uTs4mj8qT3nOidkGtDdNvVj7rrg==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} @@ -3455,20 +3312,20 @@ packages: resolution: {integrity: sha512-NwCl5Y0V6Di0NexvkTqdoVfmjTaQwoLM236r89KEojGmq/jMls8S+zb7yOwAPdXvbwfKDlP+lmXgAL4vKSQT+A==} engines: {node: ^20.17.0 || >=22.9.0} - '@sigstore/core@3.1.0': - resolution: {integrity: sha512-o5cw1QYhNQ9IroioJxpzexmPjfCe7gzafd2RY3qnMpxr4ZEja+Jad/U8sgFpaue6bOaF+z7RVkyKVV44FN+N8A==} + '@sigstore/core@3.2.0': + resolution: {integrity: sha512-kxHrDQ9YgfrWUSXU0cjsQGv8JykOFZQ9ErNKbFPWzk3Hgpwu8x2hHrQ9IdA8yl+j9RTLTC3sAF3Tdq1IQCP4oA==} engines: {node: ^20.17.0 || >=22.9.0} '@sigstore/protobuf-specs@0.5.0': resolution: {integrity: sha512-MM8XIwUjN2bwvCg1QvrMtbBmpcSHrkhFSCu1D11NyPvDQ25HEc4oG5/OcQfd/Tlf/OxmKWERDj0zGE23jQaMwA==} engines: {node: ^18.17.0 || >=20.5.0} - '@sigstore/sign@4.1.0': - resolution: {integrity: sha512-Vx1RmLxLGnSUqx/o5/VsCjkuN5L7y+vxEEwawvc7u+6WtX2W4GNa7b9HEjmcRWohw/d6BpATXmvOwc78m+Swdg==} + '@sigstore/sign@4.1.1': + resolution: {integrity: sha512-Hf4xglukg0XXQ2RiD5vSoLjdPe8OBUPA8XeVjUObheuDcWdYWrnH/BNmxZCzkAy68MzmNCxXLeurJvs6hcP2OQ==} engines: {node: ^20.17.0 || >=22.9.0} - '@sigstore/tuf@4.0.1': - resolution: {integrity: sha512-OPZBg8y5Vc9yZjmWCHrlWPMBqW5yd8+wFNl+thMdtcWz3vjVSoJQutF8YkrzI0SLGnkuFof4HSsWUhXrf219Lw==} + '@sigstore/tuf@4.0.2': + resolution: {integrity: sha512-TCAzTy0xzdP79EnxSjq9KQ3eaR7+FmudLC6eRKknVKZbV7ZNlGLClAAQb/HMNJ5n2OBNk2GT1tEmU0xuPr+SLQ==} engines: {node: ^20.17.0 || >=22.9.0} '@sigstore/verify@3.1.0': @@ -3503,8 +3360,8 @@ packages: resolution: {integrity: sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==} engines: {node: '>=10'} - '@tony.ganchev/eslint-plugin-header@3.3.1': - resolution: {integrity: sha512-/Fj0+DaXbBfrlXmd3wBZkB8TIwGT3N++y/oTYxRABK/gzNxjgcBjt63xBpuHCYIXmH1EwuALd6XS1fzNG4S0zg==} + '@tony.ganchev/eslint-plugin-header@3.3.3': + resolution: {integrity: sha512-neFWBw6lW5KbNDm9CUoYroczS9cxHY0+ulnRN5VMJW0hwoh/Y8XN3K17izVWY8TPLOIoDZQkr3fRkYmvCNUQEA==} peerDependencies: eslint: '>=7.7.0' @@ -3779,12 +3636,6 @@ packages: peerDependencies: typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/tsconfig-utils@8.57.2': - resolution: {integrity: sha512-3Lm5DSM+DCowsUOJC+YqHHnKEfFh5CoGkj5Z31NQSNF4l5wdOwqGn99wmwN/LImhfY3KJnmordBq/4+VDe2eKw==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/type-utils@8.57.1': resolution: {integrity: sha512-+Bwwm0ScukFdyoJsh2u6pp4S9ktegF98pYUU0hkphOOqdMB+1sNQhIz8y5E9+4pOioZijrkfNO/HUJVAFFfPKA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -3792,10 +3643,6 @@ packages: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/types@8.57.0': - resolution: {integrity: sha512-dTLI8PEXhjUC7B9Kre+u0XznO696BhXcTlOn0/6kf1fHaQW8+VjJAVHJ3eTI14ZapTxdkOmc80HblPQLaEeJdg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/types@8.57.1': resolution: {integrity: sha512-S29BOBPJSFUiblEl6RzPPjJt6w25A6XsBqRVDt53tA/tlL8q7ceQNZHTjPeONt/3S7KRI4quk+yP9jK2WjBiPQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -4243,8 +4090,8 @@ packages: webpack: optional: true - babel-plugin-polyfill-corejs2@0.4.16: - resolution: {integrity: sha512-xaVwwSfebXf0ooE11BJovZYKhFjIvQo7TsyVpETuIeH2JHv0k/T6Y5j22pPTvqYqmpkxdlPAJlyJ0tfOJAoMxw==} + babel-plugin-polyfill-corejs2@0.4.17: + resolution: {integrity: sha512-aTyf30K/rqAsNwN76zYrdtx8obu0E4KoUME29B1xj+B3WxgvWkp943vYQ+z8Mv3lw9xHXMHpvSPOBxzAkIa94w==} peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 @@ -4253,13 +4100,13 @@ packages: peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 - babel-plugin-polyfill-corejs3@0.14.1: - resolution: {integrity: sha512-ENp89vM9Pw4kv/koBb5N2f9bDZsR0hpf3BdPMOg/pkS3pwO4dzNnQZVXtBbeyAadgm865DmQG2jMMLqmZXvuCw==} + babel-plugin-polyfill-corejs3@0.14.2: + resolution: {integrity: sha512-coWpDLJ410R781Npmn/SIBZEsAetR4xVi0SxLMXPaMO4lSf1MwnkGYMtkFxew0Dn8B3/CpbpYxN0JCgg8mn67g==} peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 - babel-plugin-polyfill-regenerator@0.6.7: - resolution: {integrity: sha512-OTYbUlSwXhNgr4g6efMZgsO8//jA61P7ZbRX3iTT53VON8l+WQS8IAUEVo4a4cWknrg2W8Cj4gQhRYNCJ8GkAA==} + babel-plugin-polyfill-regenerator@0.6.8: + resolution: {integrity: sha512-M762rNHfSF1EV3SLtnCJXFoQbbIIz0OyRwnCmV0KPC7qosSfCO0QLTSuJX3ayAebubhE6oYBAYPrBA5ljowaZg==} peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 @@ -4278,8 +4125,8 @@ packages: bare-abort-controller: optional: true - bare-fs@4.5.5: - resolution: {integrity: sha512-XvwYM6VZqKoqDll8BmSww5luA5eflDzY0uEFfBJtFKe4PAAtxBjU3YIxzIBzhyaEQBy1VXEQBto4cpN5RZJw+w==} + bare-fs@4.5.6: + resolution: {integrity: sha512-1QovqDrR80Pmt5HPAsMsXTCFcDYr+NSUKW6nd6WO5v0JBmnItc/irNRzm2KOQ5oZ69P37y+AMujNyNtG+1Rggw==} engines: {bare: '>=1.16.0'} peerDependencies: bare-buffer: '*' @@ -4294,8 +4141,8 @@ packages: bare-path@3.0.0: resolution: {integrity: sha512-tyfW2cQcB5NN8Saijrhqn0Zh7AnFNsnczRcuWODH0eYAXBsJ5gVxAUuNr7tsHSC6IZ77cA0SitzT+s47kot8Mw==} - bare-stream@2.8.1: - resolution: {integrity: sha512-bSeR8RfvbRwDpD7HWZvn8M3uYNDrk7m9DQjYOFkENZlXW8Ju/MPaqUPQq5LqJ3kyjEm07siTaAQ7wBKCU59oHg==} + bare-stream@2.10.0: + resolution: {integrity: sha512-DOPZF/DDcDruKDA43cOw6e9Quq5daua7ygcAwJE/pKJsRWhgSSemi7qVNGE5kyDIxIeN1533G/zfbvWX7Wcb9w==} peerDependencies: bare-buffer: '*' bare-events: '*' @@ -4305,8 +4152,8 @@ packages: bare-events: optional: true - bare-url@2.3.2: - resolution: {integrity: sha512-ZMq4gd9ngV5aTMa5p9+UfY0b3skwhHELaDkhEHetMdX0LRkW9kzaym4oo/Eh+Ghm0CCDuMTsRIGM/ytUc1ZYmw==} + bare-url@2.4.0: + resolution: {integrity: sha512-NSTU5WN+fy/L0DDenfE8SXQna4voXuW0FHM7wH8i3/q9khUSchfPbPezO4zSFMnDGIf9YE+mt/RWhZgNRKRIXA==} base64-js@1.5.1: resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} @@ -4315,8 +4162,8 @@ packages: resolution: {integrity: sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==} engines: {node: ^4.5.0 || >= 5.9} - baseline-browser-mapping@2.10.8: - resolution: {integrity: sha512-PCLz/LXGBsNTErbtB6i5u4eLpHeMfi93aUv5duMmj6caNu6IphS4q6UevDnL36sZQv9lrP11dbPKGMaXPwMKfQ==} + baseline-browser-mapping@2.10.10: + resolution: {integrity: sha512-sUoJ3IMxx4AyRqO4MLeHlnGDkyXRoUG0/AI9fjK+vS72ekpV0yWVY7O0BVjmBcRtkNcsAO2QDZ4tdKKGoI6YaQ==} engines: {node: '>=6.0.0'} hasBin: true @@ -4438,8 +4285,8 @@ packages: resolution: {integrity: sha512-U1Z/ob71V/bXfVABvNr/Kumf5VyeQRBEm6Txb0PQ6S7V5GpBM3w4Cbqz/xPDicR5tN0uvDifng8C+5qECeGwyQ==} engines: {node: '>=6.0.0'} - cacache@20.0.3: - resolution: {integrity: sha512-3pUp4e8hv07k1QlijZu6Kn7c9+ZpWWk4j3F8N3xPuCExULobqJydKYOTj1FTq58srkJsXvO7LbGAH4C0ZU3WGw==} + cacache@20.0.4: + resolution: {integrity: sha512-M3Lab8NPYlZU2exsL3bMVvMrMqgwCnMWfdZbK28bn3pK6APT/Te/I8hjRPNu1uwORY9a1eEQoifXbKPQMfMTOA==} engines: {node: ^20.17.0 || >=22.9.0} cacheable-lookup@6.1.0: @@ -4466,8 +4313,8 @@ packages: resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} engines: {node: '>=6'} - caniuse-lite@1.0.30001779: - resolution: {integrity: sha512-U5og2PN7V4DMgF50YPNtnZJGWVLFjjsN3zb6uMT5VGYIewieDj1upwfuVNXf4Kor+89c3iCRJnSzMD5LmTvsfA==} + caniuse-lite@1.0.30001781: + resolution: {integrity: sha512-RdwNCyMsNBftLjW6w01z8bKEvT6e/5tpPVEgtn22TiLGlstHOVecsX2KHFkD5e/vRnIE4EGzpuIODb3mtswtkw==} caseless@0.12.0: resolution: {integrity: sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==} @@ -4669,8 +4516,8 @@ packages: peerDependencies: webpack: ^5.1.0 - core-js-compat@3.48.0: - resolution: {integrity: sha512-OM4cAF3D6VtH/WkLtWvyNC56EZVXsZdU3iqaMG2B4WvYrlqU831pc4UtG5yp0sE9z8Y02wVN7PjW5Zf9Gt0f1Q==} + core-js-compat@3.49.0: + resolution: {integrity: sha512-VQXt1jr9cBz03b331DFDCCP90b3fanciLkgiOoy8SBHy06gNf+vQ1A3WFLqG7I8TipYIKeYK9wxd0tUrvHcOZA==} core-util-is@1.0.2: resolution: {integrity: sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==} @@ -4958,8 +4805,8 @@ packages: engines: {node: '>=0.12.18'} hasBin: true - electron-to-chromium@1.5.313: - resolution: {integrity: sha512-QBMrTWEf00GXZmJyx2lbYD45jpI3TUFnNIzJ5BBc8piGUDwMPa1GV6HJWTZVvY/eiN3fSopl7NRbgGp9sZ9LTA==} + electron-to-chromium@1.5.322: + resolution: {integrity: sha512-vFU34OcrvMcH66T+dYC3G4nURmgfDVewMIu6Q2urXpumAPSMmzvcn04KVVV8Opikq8Vs5nUbO/8laNhNRqSzYw==} emoji-regex@10.6.0: resolution: {integrity: sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==} @@ -4999,8 +4846,8 @@ packages: resolution: {integrity: sha512-U2SN0w3OpjFRVlrc17E6TMDmH58Xl9rai1MblNjAdwWp07Kk+llmzX0hjDpQdrDGzwmvOtgM5yI+meYX6iZ2xA==} engines: {node: '>=10.2.0'} - enhanced-resolve@5.20.0: - resolution: {integrity: sha512-/ce7+jQ1PQ6rVXwe+jKEg5hW5ciicHwIQUagZkp6IufBoY3YDgdTTY1azVs0qoRgVmvsNB+rbjLJxDAeHHtwsQ==} + enhanced-resolve@5.20.1: + resolution: {integrity: sha512-Qohcme7V1inbAfvjItgw0EaxVX5q2rdVEZHRBrEQdRZTssLDGsL8Lwrznl8oQ/6kuTJONLaDcGjkNP247XEhcA==} engines: {node: '>=10.13.0'} ent@2.2.2: @@ -5032,9 +4879,6 @@ packages: resolution: {integrity: sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==} engines: {node: '>=18'} - err-code@2.0.3: - resolution: {integrity: sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==} - errno@0.1.8: resolution: {integrity: sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==} hasBin: true @@ -5377,8 +5221,8 @@ packages: resolution: {integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==} hasBin: true - flatted@3.4.1: - resolution: {integrity: sha512-IxfVbRFVlV8V/yRaGzk0UVIcsKKHMSfYw66T/u4nTwlWteQePsxe//LjudR1AMX4tZW3WFCh3Zqa/sjlqpbURQ==} + flatted@3.4.2: + resolution: {integrity: sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA==} folder-hash@4.1.2: resolution: {integrity: sha512-rjdiHw3ShVonhMZZXvD/I28boUkbJFT/RBsg5MbQQd8e61PhevIwFwmL218/AscBEsW/blH4BC4A+kFeIqHVfw==} @@ -5460,8 +5304,8 @@ packages: functions-have-names@1.2.3: resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} - gaxios@7.1.3: - resolution: {integrity: sha512-YGGyuEdVIjqxkxVH1pUTMY/XtmmsApXrCVv5EU25iX6inEPbV+VakJfLealkBtJN69AQmh1eGOdCl9Sm1UP6XQ==} + gaxios@7.1.4: + resolution: {integrity: sha512-bTIgTsM2bWn3XklZISBTQX7ZSddGW+IO3bMdGaemHZ3tbqExMENHLx6kKZ/KlejgrMtj8q7wBItt51yegqalrA==} engines: {node: '>=18'} gcp-metadata@8.1.2: @@ -5508,8 +5352,8 @@ packages: resolution: {integrity: sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==} engines: {node: '>= 0.4'} - get-tsconfig@4.13.6: - resolution: {integrity: sha512-shZT/QMiSHc/YBLxxOkMtgSid5HFoauqCE3/exfsEcwg1WkeqjG+V40yBbBrsD+jW2HDXcs28xOfcbm2jI8Ddw==} + get-tsconfig@4.13.7: + resolution: {integrity: sha512-7tN6rFgBlMgpBML5j8typ92BKFi2sFQvIdpAqLA2beia5avZDrMs0FLZiM5etShWq5irVyGcGMEA1jcDaK7A/Q==} get-uri@6.0.5: resolution: {integrity: sha512-b1O07XYq8eRuVzBNgJLstU6FYc1tS6wnMtF1I1D9lE8LxZSOGZ7LhxN54yPP6mGw5f2CkXY2BQUL9Fx41qvcIg==} @@ -5560,8 +5404,8 @@ packages: resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} engines: {node: '>= 0.4'} - google-auth-library@10.6.1: - resolution: {integrity: sha512-5awwuLrzNol+pFDmKJd0dKtZ0fPLAtoA5p7YO4ODsDu6ONJUVqbYwvv8y2ZBO5MBNp9TJXigB19710kYpBPdtA==} + google-auth-library@10.6.2: + resolution: {integrity: sha512-e27Z6EThmVNNvtYASwQxose/G57rkRuaRbQyxM2bvYLLX/GqWZ5chWq2EBoUchJbCc57eC9ArzO5wMsEmWftCw==} engines: {node: '>=18'} google-gax@5.0.6: @@ -5638,8 +5482,8 @@ packages: resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} engines: {node: '>= 0.4'} - hono@4.12.8: - resolution: {integrity: sha512-VJCEvtrezO1IAR+kqEYnxUOoStaQPGrCmX3j4wDTNOcD1uRPFpGlwQUIW8niPuvHXaTUxeOUl5MMDGrl+tmO9A==} + hono@4.12.9: + resolution: {integrity: sha512-wy3T8Zm2bsEvxKZM5w21VdHDDcwVS1yUFFY6i8UobSsKfFceT7TOwhbhfKsDyx7tYQlmRM5FLpIuYvNFyjctiA==} engines: {node: '>=16.9.0'} hosted-git-info@9.0.2: @@ -6107,8 +5951,8 @@ packages: resolution: {integrity: sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==} hasBin: true - jose@6.2.1: - resolution: {integrity: sha512-jUaKr1yrbfaImV7R2TN/b3IcZzsw38/chqMpo2XJ7i2F8AfM/lA4G1goC3JVEwg0H7UldTmSt3P68nt31W7/mw==} + jose@6.2.2: + resolution: {integrity: sha512-d7kPDd34KO/YnzaDOlikGpOurfF0ByC2sEV4cANCtdqLlTfBlw2p14O/5d/zv40gJPbIQxfES3nSx1/oYNyuZQ==} js-base64@3.7.8: resolution: {integrity: sha512-hNngCeKxIUQiEUN3GPJOkz4wF/YvdUdbNL9hsBcMQTkKzboD7T/q3OYOuuPZLUE6dBxSGpwhk5mwuDud7JVAow==} @@ -6171,8 +6015,8 @@ packages: json-stringify-safe@5.0.1: resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==} - json-with-bigint@3.5.7: - resolution: {integrity: sha512-7ei3MdAI5+fJPVnKlW77TKNKwQ5ppSzWvhPuSuINT/GYW9ZOC1eRKOuhV9yHG5aEsUPj9BBx5JIekkmoLHxZOw==} + json-with-bigint@3.5.8: + resolution: {integrity: sha512-eq/4KP6K34kwa7TcFdtvnftvHCD9KvHOGGICWwMFc4dOOKF5t4iYqnfLK8otCRCRv06FXOzGGyqE8h8ElMvvdw==} json5@1.0.2: resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} @@ -6245,8 +6089,8 @@ packages: resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} engines: {node: '>=0.10.0'} - launch-editor@2.13.1: - resolution: {integrity: sha512-lPSddlAAluRKJ7/cjRFoXUFzaX7q/YKI7yPHuEvSJVqoXvFnJov1/Ud87Aa4zULIbA9Nja4mSPK8l0z/7eV2wA==} + launch-editor@2.13.2: + resolution: {integrity: sha512-4VVDnbOpLXy/s8rdRCSXb+zfMeFR0WlJWpET1iA9CQdlZDfwyLjUuGQzXU4VeOoey6AicSAluWan7Etga6Kcmg==} less-loader@12.3.2: resolution: {integrity: sha512-uLV5c702ff2jBvO7qewpkLRzkh/I9QW07ur2NKkv8TVTrtX2lrKjEbEU/LLXAn7cgpCIBbkfyUm4qYXCQs5/+w==} @@ -6401,8 +6245,8 @@ packages: resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==} engines: {node: '>=10'} - make-fetch-happen@15.0.4: - resolution: {integrity: sha512-vM2sG+wbVeVGYcCm16mM3d5fuem9oC28n436HjsGO3LcxoTI8LNVa4rwZDn3f76+cWyT4GGJDxjTYU1I2nr6zw==} + make-fetch-happen@15.0.5: + resolution: {integrity: sha512-uCbIa8jWWmQZt4dSnEStkVC6gdakiinAm4PiGsywIkguF0eWMdcjDz0ECYhUolFU3pFLOev9VNPCEygydXnddg==} engines: {node: ^20.17.0 || >=22.9.0} math-intrinsics@1.1.0: @@ -6420,8 +6264,8 @@ packages: resolution: {integrity: sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==} engines: {node: '>= 0.8'} - memfs@4.56.11: - resolution: {integrity: sha512-/GodtwVeKVIHZKLUSr2ZdOxKBC5hHki4JNCU22DoCGPEHr5o2PD5U721zvESKyWwCfTfavFl9WZYgA13OAYK0g==} + memfs@4.57.1: + resolution: {integrity: sha512-WvzrWPwMQT+PtbX2Et64R4qXKK0fj/8pO85MrUCzymX3twwCiJCdvntW3HdhG1teLJcHDDLIKx5+c3HckWYZtQ==} peerDependencies: tslib: '2' @@ -6970,8 +6814,8 @@ packages: picocolors@1.1.1: resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} - picomatch@2.3.1: - resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + picomatch@2.3.2: + resolution: {integrity: sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==} engines: {node: '>=8.6'} picomatch@4.0.3: @@ -7011,8 +6855,8 @@ packages: resolution: {integrity: sha512-4peoBq4Wks0riS0z8741NVv+/8IiTvqnZAr8QGgtdifrtpdXbNw/FxRS1l6NFqm4EMzuS0EDqNNx4XGaz8cuyQ==} engines: {node: '>=18'} - pkijs@3.3.3: - resolution: {integrity: sha512-+KD8hJtqQMYoTuL1bbGOqxb4z+nZkTAwVdNtWwe8Tc2xNbEmdJYIYoc6Qt0uF55e6YW6KuTHw1DjQ18gMhzepw==} + pkijs@3.4.0: + resolution: {integrity: sha512-emEcLuomt2j03vxD54giVB4SxTjnsqkU692xZOZXHDVoYyypEm+b3jpiTcc+Cf+myooc+/Ly0z01jqeNHVgJGw==} engines: {node: '>=16.0.0'} pluralize@8.0.0: @@ -7118,10 +6962,6 @@ packages: resolution: {integrity: sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==} engines: {node: '>=0.4.0'} - promise-retry@2.0.1: - resolution: {integrity: sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==} - engines: {node: '>=10'} - propagate@2.0.1: resolution: {integrity: sha512-vGrhOavPSTz4QVNuBNdcNXePNdNMaO1xj9yBeH1ScQPjk/rhg9sSlCXPhMkFuaNNW/syTvYqsnbIJxMBfRbbag==} engines: {node: '>= 8'} @@ -7325,10 +7165,6 @@ packages: resolution: {integrity: sha512-JzFPAfklk1kjR1w76f0QOIhoDkNkSqW8wYKT08n9yysTmZfB+RQ2QoXoTAeOi1HD9ZipTyTAZg3c4pM/jeqgSw==} engines: {node: '>=18'} - retry@0.12.0: - resolution: {integrity: sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==} - engines: {node: '>= 4'} - retry@0.13.1: resolution: {integrity: sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==} engines: {node: '>= 4'} @@ -7358,13 +7194,6 @@ packages: resolution: {integrity: sha512-66iiym49fU6YDJW4DPEYbmUwm4emHXP048lJM9YkecADYGO4cKf0gQZ13U/IqRN00DXbKz0g7O3yOt8m4BNFew==} engines: {node: '>=18.0.0'} - rollup-plugin-dts@6.4.0: - resolution: {integrity: sha512-2i00A5UoPCoDecLEs13Eu105QegSGfrbp1sDeUj/54LKGmv6XFHDxWKC6Wsb4BobGUWYVCWWjmjAc8bXXbXH/Q==} - engines: {node: '>=16'} - peerDependencies: - rollup: ^3.29.4 || ^4 - typescript: ^4.5 || ^5.0 || ^6.0 - rollup-plugin-dts@6.4.1: resolution: {integrity: sha512-l//F3Zf7ID5GoOfLfD8kroBjQKEKpy1qfhtAdnpibFZMffPaylrg1CoDC2vGkPeTeyxUe4bVFCln2EFuL7IGGg==} engines: {node: '>=20'} @@ -7382,11 +7211,6 @@ packages: '@types/node': optional: true - rollup@4.59.0: - resolution: {integrity: sha512-2oMpl67a3zCH9H79LeMcbDhXW/UmWG/y2zuqnF2jQq5uq9TbM9TVyXvA4+t+ne2IIkBdrLpAaRQAvo7YI/Yyeg==} - engines: {node: '>=18.0.0', npm: '>=8.0.0'} - hasBin: true - rollup@4.60.0: resolution: {integrity: sha512-yqjxruMGBQJ2gG4HtjZtAfXArHomazDHoFwFFmZZl0r7Pdo7qCIXKqKHZc8yeoMgzJJ+pO6pEEHa+V7uzWlrAQ==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} @@ -7460,8 +7284,8 @@ packages: engines: {node: '>=14.0.0'} hasBin: true - sax@1.5.0: - resolution: {integrity: sha512-21IYA3Q5cQf089Z6tgaUTr7lDAyzoTPx5HRtbhsME8Udispad8dC/+sziTNugOEx54ilvatQ9YCzl4KQLPcRHA==} + sax@1.6.0: + resolution: {integrity: sha512-6R3J5M4AcbtLUdZmRv2SygeVaM7IhrLXu9BmnOGmmACak8fiUtOsYNWUS4uK7upbmHIBbLBeFeI//477BKLBzA==} engines: {node: '>=11.0.0'} saxes@6.0.0: @@ -7604,8 +7428,8 @@ packages: resolution: {integrity: sha512-uP0bpjWrjQmUt5DTHq9RuoCBdFJF10cdX9X+a368j/Ft0wmaVgxlrjvK3kjvgCODOMMOz9lcaRzxmso0bTWZ/g==} engines: {node: '>=10.0.0'} - socket.io-parser@4.2.5: - resolution: {integrity: sha512-bPMmpy/5WWKHea5Y/jYAP6k74A+hvmRCQaJuJB6I/ML5JZq/KfNieUVo/3Mh7SAqn7TyFdIo6wqYHInG1MU1bQ==} + socket.io-parser@4.2.6: + resolution: {integrity: sha512-asJqbVBDsBCJx0pTqw3WfesSY0iRX+2xzWEWzrpcH7L6fLzrhyF8WPI8UaeM4YCuDfpwA/cgsdugMsmtz8EJeg==} engines: {node: '>=10.0.0'} socket.io@4.8.3: @@ -7746,8 +7570,8 @@ packages: resolution: {integrity: sha512-KFxaM7XT+irxvdqSP1LGLgNWbYN7ay5owZ3r/8t77p+EtSUAfUgtl7be3xtqtOmGUl9K9YPO2ca8133RlTjvKw==} engines: {node: '>=8.0'} - streamx@2.23.0: - resolution: {integrity: sha512-kn+e44esVfn2Fa/O0CPFcex27fjIL6MkVae0Mm6q+E6f0hWv578YCERbv+4m02cjxvDsPKLnmxral/rR6lBMAg==} + streamx@2.25.0: + resolution: {integrity: sha512-0nQuG6jf1w+wddNEEXCF4nTg3LtufWINB5eFEN+5TNZW7KWJp6x87+JFL43vaAUPyCfH1wID+mNVyW6OHtFamg==} strict-event-emitter@0.5.1: resolution: {integrity: sha512-vMgjE/GGEPEFnhFub6pa4FmJBRBVOLpIII2hvCZ8Kzb7K0hlHo7mQv6xYrBvCL2LtAIBwFUK8wvuJgTVSQ5MFQ==} @@ -7824,8 +7648,8 @@ packages: symbol-tree@3.2.4: resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==} - tapable@2.3.0: - resolution: {integrity: sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==} + tapable@2.3.2: + resolution: {integrity: sha512-1MOpMXuhGzGL5TTCZFItxCc0AARf1EZFQkGqMm7ERKj8+Hgr5oLvJOVFcC+lRmR8hCe2S3jC4T5D7Vg/d7/fhA==} engines: {node: '>=6'} tar-fs@3.1.2: @@ -7837,8 +7661,8 @@ packages: tar-stream@3.1.8: resolution: {integrity: sha512-U6QpVRyCGHva435KoNWy9PRoi2IFYCgtEhq9nmrPPpbRacPs9IH4aJ3gbrFC8dPcXvdSZ4XXfXT5Fshbp2MtlQ==} - tar@7.5.11: - resolution: {integrity: sha512-ChjMH33/KetonMTAtpYdgUFr0tbz69Fp2v7zWxQfYZX4g5ZN2nOBXm1R2xyA+lMIKrLKIoKAwFj93jE/avX9cQ==} + tar@7.5.13: + resolution: {integrity: sha512-tOG/7GyXpFevhXVh8jOPJrmtRpOTsYqUIkVdVooZYJS/z8WhfQUX8RJILmeuJNinGAMSu1veBr4asSHFt5/hng==} engines: {node: '>=18'} teeny-request@10.1.0: @@ -7872,8 +7696,8 @@ packages: text-decoder@1.2.7: resolution: {integrity: sha512-vlLytXkeP4xvEq2otHeJfSQIRyWxo/oZGEbXrtEEF9Hnmrdly59sUbzZ/QgyWuLYHctCHxFF4tRQZNQ9k60ExQ==} - thingies@2.5.0: - resolution: {integrity: sha512-s+2Bwztg6PhWUD7XMfeYm5qliDdSiZm7M7n8KjTkIsm3l/2lgVRc2/Gx/v+ZX8lT4FMA+i8aQvhcWylldc+ZNw==} + thingies@2.6.0: + resolution: {integrity: sha512-rMHRjmlFLM1R96UYPvpmnc3LYtdFrT33JIB7L9hetGue1qAPfn1N2LJeEjxUSidu1Iku+haLZXDuEXUHNGO/lg==} engines: {node: '>=10.18'} peerDependencies: tslib: ^2 @@ -7914,15 +7738,15 @@ packages: tldts-core@6.1.86: resolution: {integrity: sha512-Je6p7pkk+KMzMv2XXKmAE3McmolOQFdxkKw0R8EYNr7sELW46JqnNeTX8ybPiQgvg1ymCoF8LXs5fzFaZvJPTA==} - tldts-core@7.0.26: - resolution: {integrity: sha512-5WJ2SqFsv4G2Dwi7ZFVRnz6b2H1od39QME1lc2y5Ew3eWiZMAeqOAfWpRP9jHvhUl881406QtZTODvjttJs+ew==} + tldts-core@7.0.27: + resolution: {integrity: sha512-YQ7uPjgWUibIK6DW5lrKujGwUKhLevU4hcGbP5O6TcIUb+oTjJYJVWPS4nZsIHrEEEG6myk/oqAJUEQmpZrHsg==} tldts@6.1.86: resolution: {integrity: sha512-WMi/OQ2axVTf/ykqCQgXiIct+mSQDFdH2fkwhPwgEwvJ1kSzZRiinb0zF2Xb8u4+OqPChmyI6MEu4EezNJz+FQ==} hasBin: true - tldts@7.0.26: - resolution: {integrity: sha512-WiGwQjr0qYdNNG8KpMKlSvpxz652lqa3Rd+/hSaDcY4Uo6SKWZq2LAF+hsAhUewTtYhXlorBKgNF3Kk8hnjGoQ==} + tldts@7.0.27: + resolution: {integrity: sha512-I4FZcVFcqCRuT0ph6dCDpPuO4Xgzvh+spkcTr1gK7peIvxWauoloVO0vuy1FQnijT63ss6AsHB6+OIM4aXHbPg==} hasBin: true tmp@0.2.5: @@ -7962,8 +7786,8 @@ packages: peerDependencies: tslib: '2' - ts-api-utils@2.4.0: - resolution: {integrity: sha512-3TaVTaAv2gTiMB35i3FiGJaRfwb3Pyn/j3m/bfAvGe8FB7CF6u+LMYqYlDh7reQf7UNvoTvdfAqHGmPGOSsPmA==} + ts-api-utils@2.5.0: + resolution: {integrity: sha512-OJ/ibxhPlqrMM0UiNHJ/0CKQkoKF243/AEmplt3qpRgkW8VG7IfOS41h7V8TjITqdByHzrjcS/2si+y4lIh8NA==} engines: {node: '>=18.12'} peerDependencies: typescript: '>=4.8.4' @@ -8067,8 +7891,8 @@ packages: resolution: {integrity: sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==} engines: {node: '>= 0.4'} - undici-types@7.24.4: - resolution: {integrity: sha512-cRaY9PagdEZoRmcwzk3tUV3SVGrVQkR6bcSilav/A0vXsfpW4Lvd0BvgRMwTEDTLLGN+QdyBTG+nnvTgJhdt6w==} + undici-types@7.24.5: + resolution: {integrity: sha512-kNh333UBSbgK35OIW7FwJTr9tTfVIG51Fm1tSVT7m8foPHfDVjsb7OIee/q/rs3bB2aV/3qOPgG5mHNWl1odiA==} undici@6.24.1: resolution: {integrity: sha512-sC+b0tB1whOCzbtlx20fx3WgCXwkW627p4EA9uM+/tNNPkSS+eSEld6pAs9nDv7WbY1UUljBMYPtu9BCOrCWKA==} @@ -8103,14 +7927,6 @@ packages: unicode-trie@2.0.0: resolution: {integrity: sha512-x7bc76x0bm4prf1VLg79uhAzKw8DVboClSN5VxJuQ+LKDOVEW9CdH+VY7SP+vX7xCYQqzzgQpFqz15zeLvAtZQ==} - unique-filename@5.0.0: - resolution: {integrity: sha512-2RaJTAvAb4owyjllTfXzFClJ7WsGxlykkPvCr9pA//LD9goVq+m4PPAeBgNodGZ7nSrntT/auWpJ6Y5IFXcfjg==} - engines: {node: ^20.17.0 || >=22.9.0} - - unique-slug@6.0.0: - resolution: {integrity: sha512-4Lup7Ezn8W3d52/xBhZBVdx323ckxa7DEvd9kPQHppTkLoJXw6ltrBCyj5pnrxj0qKDxYMJ56CoxNuFCscdTiw==} - engines: {node: ^20.17.0 || >=22.9.0} - universal-github-app-jwt@2.2.2: resolution: {integrity: sha512-dcmbeSrOdTnsjGjUfAlqNDJrhxXizjAz94ija9Qw8YkZ1uu0d+GoZzyH+Jb9tIIqvGsadUfwg+22k5aDqqwzbw==} @@ -8442,8 +8258,8 @@ packages: utf-8-validate: optional: true - ws@8.19.0: - resolution: {integrity: sha512-blAT2mjOEIi0ZzruJfIhb3nps74PRWTCz1IjglWEEpQl5XS/UNama6u2/rjFkDDouqr4L67ry+1aGIALViWjDg==} + ws@8.20.0: + resolution: {integrity: sha512-sAt8BhgNbzCtgGbt2OxmpuryO63ZoDk/sqaB/znQm94T4fCEsy/yV+7CdC1kJhOU9lboAEU7R3kquuycDoibVA==} engines: {node: '>=10.0.0'} peerDependencies: bufferutil: ^4.0.1 @@ -8500,6 +8316,11 @@ packages: engines: {node: '>= 14.6'} hasBin: true + yaml@2.8.3: + resolution: {integrity: sha512-AvbaCLOO2Otw/lW5bmh9d/WEdcDFdQp2Z2ZUH3pX9U2ihyUY0nvLv7J6TrWowklRGPYbB/IuIMfYgxaCPg5Bpg==} + engines: {node: '>= 14.6'} + hasBin: true + yargs-parser@20.2.9: resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==} engines: {node: '>=10'} @@ -8834,7 +8655,7 @@ snapshots: '@csstools/css-tokenizer': 4.0.0 lru-cache: 11.2.7 - '@asamuzakjp/dom-selector@7.0.3': + '@asamuzakjp/dom-selector@7.0.4': dependencies: '@asamuzakjp/nwsapi': 2.3.9 bidi-js: 1.0.3 @@ -8858,8 +8679,8 @@ snapshots: '@babel/generator': 7.29.1 '@babel/helper-compilation-targets': 7.28.6 '@babel/helper-module-transforms': 7.28.6(@babel/core@7.29.0) - '@babel/helpers': 7.28.6 - '@babel/parser': 7.29.0 + '@babel/helpers': 7.29.2 + '@babel/parser': 7.29.2 '@babel/template': 7.28.6 '@babel/traverse': 7.29.0 '@babel/types': 7.29.0 @@ -8874,7 +8695,7 @@ snapshots: '@babel/generator@7.29.1': dependencies: - '@babel/parser': 7.29.0 + '@babel/parser': 7.29.2 '@babel/types': 7.29.0 '@jridgewell/gen-mapping': 0.3.13 '@jridgewell/trace-mapping': 0.3.31 @@ -8912,7 +8733,7 @@ snapshots: regexpu-core: 6.4.0 semver: 6.3.1 - '@babel/helper-define-polyfill-provider@0.6.7(@babel/core@7.29.0)': + '@babel/helper-define-polyfill-provider@0.6.8(@babel/core@7.29.0)': dependencies: '@babel/core': 7.29.0 '@babel/helper-compilation-targets': 7.28.6 @@ -8997,12 +8818,12 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/helpers@7.28.6': + '@babel/helpers@7.29.2': dependencies: '@babel/template': 7.28.6 '@babel/types': 7.29.0 - '@babel/parser@7.29.0': + '@babel/parser@7.29.2': dependencies: '@babel/types': 7.29.0 @@ -9348,9 +9169,9 @@ snapshots: '@babel/core': 7.29.0 '@babel/helper-module-imports': 7.28.6 '@babel/helper-plugin-utils': 7.28.6 - babel-plugin-polyfill-corejs2: 0.4.16(@babel/core@7.29.0) + babel-plugin-polyfill-corejs2: 0.4.17(@babel/core@7.29.0) babel-plugin-polyfill-corejs3: 0.13.0(@babel/core@7.29.0) - babel-plugin-polyfill-regenerator: 0.6.7(@babel/core@7.29.0) + babel-plugin-polyfill-regenerator: 0.6.8(@babel/core@7.29.0) semver: 6.3.1 transitivePeerDependencies: - supports-color @@ -9474,10 +9295,10 @@ snapshots: '@babel/plugin-transform-unicode-regex': 7.27.1(@babel/core@7.29.0) '@babel/plugin-transform-unicode-sets-regex': 7.28.6(@babel/core@7.29.0) '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.29.0) - babel-plugin-polyfill-corejs2: 0.4.16(@babel/core@7.29.0) - babel-plugin-polyfill-corejs3: 0.14.1(@babel/core@7.29.0) - babel-plugin-polyfill-regenerator: 0.6.7(@babel/core@7.29.0) - core-js-compat: 3.48.0 + babel-plugin-polyfill-corejs2: 0.4.17(@babel/core@7.29.0) + babel-plugin-polyfill-corejs3: 0.14.2(@babel/core@7.29.0) + babel-plugin-polyfill-regenerator: 0.6.8(@babel/core@7.29.0) + core-js-compat: 3.49.0 semver: 6.3.1 transitivePeerDependencies: - supports-color @@ -9494,7 +9315,7 @@ snapshots: '@babel/template@7.28.6': dependencies: '@babel/code-frame': 7.29.0 - '@babel/parser': 7.29.0 + '@babel/parser': 7.29.2 '@babel/types': 7.29.0 '@babel/traverse@7.29.0': @@ -9502,7 +9323,7 @@ snapshots: '@babel/code-frame': 7.29.0 '@babel/generator': 7.29.1 '@babel/helper-globals': 7.28.0 - '@babel/parser': 7.29.0 + '@babel/parser': 7.29.2 '@babel/template': 7.28.6 '@babel/types': 7.29.0 debug: 4.4.3(supports-color@10.2.2) @@ -9582,13 +9403,13 @@ snapshots: '@discoveryjs/json-ext@1.0.0': {} - '@emnapi/core@1.9.0': + '@emnapi/core@1.9.1': dependencies: '@emnapi/wasi-threads': 1.2.0 tslib: 2.8.1 optional: true - '@emnapi/runtime@1.9.0': + '@emnapi/runtime@1.9.1': dependencies: tslib: 2.8.1 optional: true @@ -10050,9 +9871,7 @@ snapshots: '@firebase/webchannel-wrapper@1.0.5': {} - '@gar/promise-retry@1.0.2': - dependencies: - retry: 0.13.1 + '@gar/promise-retry@1.0.3': {} '@glideapps/ts-necessities@2.2.3': {} @@ -10063,7 +9882,7 @@ snapshots: arrify: 2.0.1 duplexify: 4.1.3 extend: 3.0.2 - google-auth-library: 10.6.1(supports-color@10.2.2) + google-auth-library: 10.6.2(supports-color@10.2.2) html-entities: 2.6.0 retry-request: 8.0.2(supports-color@10.2.2) teeny-request: 10.1.0(supports-color@10.2.2) @@ -10098,7 +9917,7 @@ snapshots: duplexify: 4.1.3 events-intercept: 2.0.0 extend: 3.0.2 - google-auth-library: 10.6.1(supports-color@10.2.2) + google-auth-library: 10.6.2(supports-color@10.2.2) google-gax: 5.0.6(supports-color@10.2.2) grpc-gcp: 1.0.1(protobufjs@7.5.4) is: 3.3.2 @@ -10117,10 +9936,10 @@ snapshots: '@google/genai@1.45.0(@modelcontextprotocol/sdk@1.27.1(zod@4.3.6))(bufferutil@4.1.0)(supports-color@10.2.2)(utf-8-validate@6.0.6)': dependencies: - google-auth-library: 10.6.1(supports-color@10.2.2) + google-auth-library: 10.6.2(supports-color@10.2.2) p-retry: 4.6.2 protobufjs: 7.5.4 - ws: 8.19.0(bufferutil@4.1.0)(utf-8-validate@6.0.6) + ws: 8.20.0(bufferutil@4.1.0)(utf-8-validate@6.0.6) optionalDependencies: '@modelcontextprotocol/sdk': 1.27.1(zod@4.3.6) transitivePeerDependencies: @@ -10155,9 +9974,9 @@ snapshots: '@harperfast/extended-iterable@1.0.3': optional: true - '@hono/node-server@1.19.11(hono@4.12.8)': + '@hono/node-server@1.19.11(hono@4.12.9)': dependencies: - hono: 4.12.8 + hono: 4.12.9 '@humanfs/core@0.19.1': {} @@ -10375,58 +10194,58 @@ snapshots: dependencies: tslib: 2.8.1 - '@jsonjoy.com/fs-core@4.56.11(tslib@2.8.1)': + '@jsonjoy.com/fs-core@4.57.1(tslib@2.8.1)': dependencies: - '@jsonjoy.com/fs-node-builtins': 4.56.11(tslib@2.8.1) - '@jsonjoy.com/fs-node-utils': 4.56.11(tslib@2.8.1) - thingies: 2.5.0(tslib@2.8.1) + '@jsonjoy.com/fs-node-builtins': 4.57.1(tslib@2.8.1) + '@jsonjoy.com/fs-node-utils': 4.57.1(tslib@2.8.1) + thingies: 2.6.0(tslib@2.8.1) tslib: 2.8.1 - '@jsonjoy.com/fs-fsa@4.56.11(tslib@2.8.1)': + '@jsonjoy.com/fs-fsa@4.57.1(tslib@2.8.1)': dependencies: - '@jsonjoy.com/fs-core': 4.56.11(tslib@2.8.1) - '@jsonjoy.com/fs-node-builtins': 4.56.11(tslib@2.8.1) - '@jsonjoy.com/fs-node-utils': 4.56.11(tslib@2.8.1) - thingies: 2.5.0(tslib@2.8.1) + '@jsonjoy.com/fs-core': 4.57.1(tslib@2.8.1) + '@jsonjoy.com/fs-node-builtins': 4.57.1(tslib@2.8.1) + '@jsonjoy.com/fs-node-utils': 4.57.1(tslib@2.8.1) + thingies: 2.6.0(tslib@2.8.1) tslib: 2.8.1 - '@jsonjoy.com/fs-node-builtins@4.56.11(tslib@2.8.1)': + '@jsonjoy.com/fs-node-builtins@4.57.1(tslib@2.8.1)': dependencies: tslib: 2.8.1 - '@jsonjoy.com/fs-node-to-fsa@4.56.11(tslib@2.8.1)': + '@jsonjoy.com/fs-node-to-fsa@4.57.1(tslib@2.8.1)': dependencies: - '@jsonjoy.com/fs-fsa': 4.56.11(tslib@2.8.1) - '@jsonjoy.com/fs-node-builtins': 4.56.11(tslib@2.8.1) - '@jsonjoy.com/fs-node-utils': 4.56.11(tslib@2.8.1) + '@jsonjoy.com/fs-fsa': 4.57.1(tslib@2.8.1) + '@jsonjoy.com/fs-node-builtins': 4.57.1(tslib@2.8.1) + '@jsonjoy.com/fs-node-utils': 4.57.1(tslib@2.8.1) tslib: 2.8.1 - '@jsonjoy.com/fs-node-utils@4.56.11(tslib@2.8.1)': + '@jsonjoy.com/fs-node-utils@4.57.1(tslib@2.8.1)': dependencies: - '@jsonjoy.com/fs-node-builtins': 4.56.11(tslib@2.8.1) + '@jsonjoy.com/fs-node-builtins': 4.57.1(tslib@2.8.1) tslib: 2.8.1 - '@jsonjoy.com/fs-node@4.56.11(tslib@2.8.1)': + '@jsonjoy.com/fs-node@4.57.1(tslib@2.8.1)': dependencies: - '@jsonjoy.com/fs-core': 4.56.11(tslib@2.8.1) - '@jsonjoy.com/fs-node-builtins': 4.56.11(tslib@2.8.1) - '@jsonjoy.com/fs-node-utils': 4.56.11(tslib@2.8.1) - '@jsonjoy.com/fs-print': 4.56.11(tslib@2.8.1) - '@jsonjoy.com/fs-snapshot': 4.56.11(tslib@2.8.1) + '@jsonjoy.com/fs-core': 4.57.1(tslib@2.8.1) + '@jsonjoy.com/fs-node-builtins': 4.57.1(tslib@2.8.1) + '@jsonjoy.com/fs-node-utils': 4.57.1(tslib@2.8.1) + '@jsonjoy.com/fs-print': 4.57.1(tslib@2.8.1) + '@jsonjoy.com/fs-snapshot': 4.57.1(tslib@2.8.1) glob-to-regex.js: 1.2.0(tslib@2.8.1) - thingies: 2.5.0(tslib@2.8.1) + thingies: 2.6.0(tslib@2.8.1) tslib: 2.8.1 - '@jsonjoy.com/fs-print@4.56.11(tslib@2.8.1)': + '@jsonjoy.com/fs-print@4.57.1(tslib@2.8.1)': dependencies: - '@jsonjoy.com/fs-node-utils': 4.56.11(tslib@2.8.1) + '@jsonjoy.com/fs-node-utils': 4.57.1(tslib@2.8.1) tree-dump: 1.1.0(tslib@2.8.1) tslib: 2.8.1 - '@jsonjoy.com/fs-snapshot@4.56.11(tslib@2.8.1)': + '@jsonjoy.com/fs-snapshot@4.57.1(tslib@2.8.1)': dependencies: '@jsonjoy.com/buffers': 17.67.0(tslib@2.8.1) - '@jsonjoy.com/fs-node-utils': 4.56.11(tslib@2.8.1) + '@jsonjoy.com/fs-node-utils': 4.57.1(tslib@2.8.1) '@jsonjoy.com/json-pack': 17.67.0(tslib@2.8.1) '@jsonjoy.com/util': 17.67.0(tslib@2.8.1) tslib: 2.8.1 @@ -10439,7 +10258,7 @@ snapshots: '@jsonjoy.com/json-pointer': 1.0.2(tslib@2.8.1) '@jsonjoy.com/util': 1.9.0(tslib@2.8.1) hyperdyperid: 1.2.0 - thingies: 2.5.0(tslib@2.8.1) + thingies: 2.6.0(tslib@2.8.1) tree-dump: 1.1.0(tslib@2.8.1) tslib: 2.8.1 @@ -10451,7 +10270,7 @@ snapshots: '@jsonjoy.com/json-pointer': 17.67.0(tslib@2.8.1) '@jsonjoy.com/util': 17.67.0(tslib@2.8.1) hyperdyperid: 1.2.0 - thingies: 2.5.0(tslib@2.8.1) + thingies: 2.6.0(tslib@2.8.1) tree-dump: 1.1.0(tslib@2.8.1) tslib: 2.8.1 @@ -10511,7 +10330,7 @@ snapshots: '@modelcontextprotocol/sdk@1.27.1(zod@4.3.6)': dependencies: - '@hono/node-server': 1.19.11(hono@4.12.8) + '@hono/node-server': 1.19.11(hono@4.12.9) ajv: 8.18.0 ajv-formats: 3.0.1(ajv@8.18.0) content-type: 1.0.5 @@ -10521,8 +10340,8 @@ snapshots: eventsource-parser: 3.0.6 express: 5.2.1 express-rate-limit: 8.3.1(express@5.2.1) - hono: 4.12.8 - jose: 6.2.1 + hono: 4.12.9 + jose: 6.2.2 json-schema-typed: 8.0.2 pkce-challenge: 5.0.1 raw-body: 3.0.2 @@ -10632,8 +10451,8 @@ snapshots: '@napi-rs/wasm-runtime@1.1.1': dependencies: - '@emnapi/core': 1.9.0 - '@emnapi/runtime': 1.9.0 + '@emnapi/core': 1.9.1 + '@emnapi/runtime': 1.9.1 '@tybys/wasm-util': 0.10.1 optional: true @@ -10667,7 +10486,7 @@ snapshots: '@npmcli/git@7.0.2': dependencies: - '@gar/promise-retry': 1.0.2 + '@gar/promise-retry': 1.0.3 '@npmcli/promise-spawn': 9.0.1 ini: 6.0.0 lru-cache: 11.2.7 @@ -10806,7 +10625,7 @@ snapshots: '@octokit/request-error': 7.1.0 '@octokit/types': 16.0.0 fast-content-type-parse: 3.0.0 - json-with-bigint: 3.5.7 + json-with-bigint: 3.5.8 universal-user-agent: 7.0.3 '@octokit/rest@22.0.1': @@ -11123,12 +10942,6 @@ snapshots: optionalDependencies: rollup: 4.60.0 - '@rollup/plugin-json@6.1.0(rollup@4.59.0)': - dependencies: - '@rollup/pluginutils': 5.3.0(rollup@4.59.0) - optionalDependencies: - rollup: 4.59.0 - '@rollup/plugin-json@6.1.0(rollup@4.60.0)': dependencies: '@rollup/pluginutils': 5.3.0(rollup@4.60.0) @@ -11145,14 +10958,6 @@ snapshots: optionalDependencies: rollup: 4.60.0 - '@rollup/pluginutils@5.3.0(rollup@4.59.0)': - dependencies: - '@types/estree': 1.0.8 - estree-walker: 2.0.2 - picomatch: 4.0.3 - optionalDependencies: - rollup: 4.59.0 - '@rollup/pluginutils@5.3.0(rollup@4.60.0)': dependencies: '@types/estree': 1.0.8 @@ -11161,162 +10966,81 @@ snapshots: optionalDependencies: rollup: 4.60.0 - '@rollup/rollup-android-arm-eabi@4.59.0': - optional: true - '@rollup/rollup-android-arm-eabi@4.60.0': optional: true - '@rollup/rollup-android-arm64@4.59.0': - optional: true - '@rollup/rollup-android-arm64@4.60.0': optional: true - '@rollup/rollup-darwin-arm64@4.59.0': - optional: true - '@rollup/rollup-darwin-arm64@4.60.0': optional: true - '@rollup/rollup-darwin-x64@4.59.0': - optional: true - '@rollup/rollup-darwin-x64@4.60.0': optional: true - '@rollup/rollup-freebsd-arm64@4.59.0': - optional: true - '@rollup/rollup-freebsd-arm64@4.60.0': optional: true - '@rollup/rollup-freebsd-x64@4.59.0': - optional: true - '@rollup/rollup-freebsd-x64@4.60.0': optional: true - '@rollup/rollup-linux-arm-gnueabihf@4.59.0': - optional: true - '@rollup/rollup-linux-arm-gnueabihf@4.60.0': optional: true - '@rollup/rollup-linux-arm-musleabihf@4.59.0': - optional: true - '@rollup/rollup-linux-arm-musleabihf@4.60.0': optional: true - '@rollup/rollup-linux-arm64-gnu@4.59.0': - optional: true - '@rollup/rollup-linux-arm64-gnu@4.60.0': optional: true - '@rollup/rollup-linux-arm64-musl@4.59.0': - optional: true - '@rollup/rollup-linux-arm64-musl@4.60.0': optional: true - '@rollup/rollup-linux-loong64-gnu@4.59.0': - optional: true - '@rollup/rollup-linux-loong64-gnu@4.60.0': optional: true - '@rollup/rollup-linux-loong64-musl@4.59.0': - optional: true - '@rollup/rollup-linux-loong64-musl@4.60.0': optional: true - '@rollup/rollup-linux-ppc64-gnu@4.59.0': - optional: true - '@rollup/rollup-linux-ppc64-gnu@4.60.0': optional: true - '@rollup/rollup-linux-ppc64-musl@4.59.0': - optional: true - '@rollup/rollup-linux-ppc64-musl@4.60.0': optional: true - '@rollup/rollup-linux-riscv64-gnu@4.59.0': - optional: true - '@rollup/rollup-linux-riscv64-gnu@4.60.0': optional: true - '@rollup/rollup-linux-riscv64-musl@4.59.0': - optional: true - '@rollup/rollup-linux-riscv64-musl@4.60.0': optional: true - '@rollup/rollup-linux-s390x-gnu@4.59.0': - optional: true - '@rollup/rollup-linux-s390x-gnu@4.60.0': optional: true - '@rollup/rollup-linux-x64-gnu@4.59.0': - optional: true - '@rollup/rollup-linux-x64-gnu@4.60.0': optional: true - '@rollup/rollup-linux-x64-musl@4.59.0': - optional: true - '@rollup/rollup-linux-x64-musl@4.60.0': optional: true - '@rollup/rollup-openbsd-x64@4.59.0': - optional: true - '@rollup/rollup-openbsd-x64@4.60.0': optional: true - '@rollup/rollup-openharmony-arm64@4.59.0': - optional: true - '@rollup/rollup-openharmony-arm64@4.60.0': optional: true - '@rollup/rollup-win32-arm64-msvc@4.59.0': - optional: true - '@rollup/rollup-win32-arm64-msvc@4.60.0': optional: true - '@rollup/rollup-win32-ia32-msvc@4.59.0': - optional: true - '@rollup/rollup-win32-ia32-msvc@4.60.0': optional: true - '@rollup/rollup-win32-x64-gnu@4.59.0': - optional: true - '@rollup/rollup-win32-x64-gnu@4.60.0': optional: true - '@rollup/rollup-win32-x64-msvc@4.59.0': - optional: true - '@rollup/rollup-win32-x64-msvc@4.60.0': optional: true - '@rollup/wasm-node@4.59.0': - dependencies: - '@types/estree': 1.0.8 - optionalDependencies: - fsevents: 2.3.3 - '@rollup/wasm-node@4.60.0': dependencies: '@types/estree': 1.0.8 @@ -11329,22 +11053,22 @@ snapshots: dependencies: '@sigstore/protobuf-specs': 0.5.0 - '@sigstore/core@3.1.0': {} + '@sigstore/core@3.2.0': {} '@sigstore/protobuf-specs@0.5.0': {} - '@sigstore/sign@4.1.0': + '@sigstore/sign@4.1.1': dependencies: + '@gar/promise-retry': 1.0.3 '@sigstore/bundle': 4.0.0 - '@sigstore/core': 3.1.0 + '@sigstore/core': 3.2.0 '@sigstore/protobuf-specs': 0.5.0 - make-fetch-happen: 15.0.4 + make-fetch-happen: 15.0.5 proc-log: 6.1.0 - promise-retry: 2.0.1 transitivePeerDependencies: - supports-color - '@sigstore/tuf@4.0.1': + '@sigstore/tuf@4.0.2': dependencies: '@sigstore/protobuf-specs': 0.5.0 tuf-js: 4.1.0 @@ -11354,7 +11078,7 @@ snapshots: '@sigstore/verify@3.1.0': dependencies: '@sigstore/bundle': 4.0.0 - '@sigstore/core': 3.1.0 + '@sigstore/core': 3.2.0 '@sigstore/protobuf-specs': 0.5.0 '@simple-libs/child-process-utils@1.0.2': @@ -11372,7 +11096,7 @@ snapshots: '@stylistic/eslint-plugin@5.10.0(eslint@10.1.0(jiti@2.6.1))': dependencies: '@eslint-community/eslint-utils': 4.9.1(eslint@10.1.0(jiti@2.6.1)) - '@typescript-eslint/types': 8.57.0 + '@typescript-eslint/types': 8.57.2 eslint: 10.1.0(jiti@2.6.1) eslint-visitor-keys: 4.2.1 espree: 10.4.0 @@ -11383,7 +11107,7 @@ snapshots: dependencies: defer-to-connect: 2.0.1 - '@tony.ganchev/eslint-plugin-header@3.3.1(eslint@10.1.0(jiti@2.6.1))': + '@tony.ganchev/eslint-plugin-header@3.3.3(eslint@10.1.0(jiti@2.6.1))': dependencies: eslint: 10.1.0(jiti@2.6.1) @@ -11405,7 +11129,7 @@ snapshots: '@types/babel__core@7.20.5': dependencies: - '@babel/parser': 7.29.0 + '@babel/parser': 7.29.2 '@babel/types': 7.29.0 '@types/babel__generator': 7.27.0 '@types/babel__template': 7.4.4 @@ -11417,7 +11141,7 @@ snapshots: '@types/babel__template@7.4.4': dependencies: - '@babel/parser': 7.29.0 + '@babel/parser': 7.29.2 '@babel/types': 7.29.0 '@types/babel__traverse@7.28.0': @@ -11573,11 +11297,11 @@ snapshots: '@types/node@22.19.15': dependencies: - undici-types: 7.24.4 + undici-types: 7.24.5 '@types/node@24.12.0': dependencies: - undici-types: 7.24.4 + undici-types: 7.24.5 '@types/npm-package-arg@6.1.4': {} @@ -11702,7 +11426,7 @@ snapshots: eslint: 10.1.0(jiti@2.6.1) ignore: 7.0.5 natural-compare: 1.4.0 - ts-api-utils: 2.4.0(typescript@6.0.2) + ts-api-utils: 2.5.0(typescript@6.0.2) typescript: 6.0.2 transitivePeerDependencies: - supports-color @@ -11721,8 +11445,8 @@ snapshots: '@typescript-eslint/project-service@8.57.1(typescript@6.0.2)': dependencies: - '@typescript-eslint/tsconfig-utils': 8.57.2(typescript@6.0.2) - '@typescript-eslint/types': 8.57.2 + '@typescript-eslint/tsconfig-utils': 8.57.1(typescript@6.0.2) + '@typescript-eslint/types': 8.57.1 debug: 4.4.3(supports-color@10.2.2) typescript: 6.0.2 transitivePeerDependencies: @@ -11737,10 +11461,6 @@ snapshots: dependencies: typescript: 6.0.2 - '@typescript-eslint/tsconfig-utils@8.57.2(typescript@6.0.2)': - dependencies: - typescript: 6.0.2 - '@typescript-eslint/type-utils@8.57.1(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2)': dependencies: '@typescript-eslint/types': 8.57.1 @@ -11748,13 +11468,11 @@ snapshots: '@typescript-eslint/utils': 8.57.1(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2) debug: 4.4.3(supports-color@10.2.2) eslint: 10.1.0(jiti@2.6.1) - ts-api-utils: 2.4.0(typescript@6.0.2) + ts-api-utils: 2.5.0(typescript@6.0.2) typescript: 6.0.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/types@8.57.0': {} - '@typescript-eslint/types@8.57.1': {} '@typescript-eslint/types@8.57.2': {} @@ -11769,7 +11487,7 @@ snapshots: minimatch: 10.2.4 semver: 7.7.4 tinyglobby: 0.2.15 - ts-api-utils: 2.4.0(typescript@6.0.2) + ts-api-utils: 2.5.0(typescript@6.0.2) typescript: 6.0.2 transitivePeerDependencies: - supports-color @@ -11947,11 +11665,11 @@ snapshots: lodash: 4.17.23 minimatch: 7.4.9 - '@vitejs/plugin-basic-ssl@2.2.0(vite@7.3.1(@types/node@24.12.0)(jiti@2.6.1)(less@4.6.4)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))': + '@vitejs/plugin-basic-ssl@2.2.0(vite@7.3.1(@types/node@24.12.0)(jiti@2.6.1)(less@4.6.4)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))': dependencies: - vite: 7.3.1(@types/node@24.12.0)(jiti@2.6.1)(less@4.6.4)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2) + vite: 7.3.1(@types/node@24.12.0)(jiti@2.6.1)(less@4.6.4)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) - '@vitest/coverage-v8@4.1.0(vitest@4.1.0(@opentelemetry/api@1.9.0)(@types/node@24.12.0)(jiti@2.6.1)(jsdom@29.0.1)(less@4.6.4)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))': + '@vitest/coverage-v8@4.1.0(vitest@4.1.0(@opentelemetry/api@1.9.0)(@types/node@24.12.0)(jiti@2.6.1)(jsdom@29.0.1)(less@4.6.4)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))': dependencies: '@bcoe/v8-coverage': 1.0.2 '@vitest/utils': 4.1.0 @@ -11963,7 +11681,7 @@ snapshots: obug: 2.1.1 std-env: 4.0.0 tinyrainbow: 3.1.0 - vitest: 4.1.0(@opentelemetry/api@1.9.0)(@types/node@24.12.0)(jiti@2.6.1)(jsdom@29.0.1)(less@4.6.4)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2) + vitest: 4.1.0(@opentelemetry/api@1.9.0)(@types/node@24.12.0)(jiti@2.6.1)(jsdom@29.0.1)(less@4.6.4)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) '@vitest/expect@4.1.0': dependencies: @@ -11974,13 +11692,13 @@ snapshots: chai: 6.2.2 tinyrainbow: 3.1.0 - '@vitest/mocker@4.1.0(vite@7.3.1(@types/node@24.12.0)(jiti@2.6.1)(less@4.6.4)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2))': + '@vitest/mocker@4.1.0(vite@7.3.1(@types/node@24.12.0)(jiti@2.6.1)(less@4.6.4)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))': dependencies: '@vitest/spy': 4.1.0 estree-walker: 3.0.3 magic-string: 0.30.21 optionalDependencies: - vite: 7.3.1(@types/node@24.12.0)(jiti@2.6.1)(less@4.6.4)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2) + vite: 7.3.1(@types/node@24.12.0)(jiti@2.6.1)(less@4.6.4)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) '@vitest/pretty-format@4.1.0': dependencies: @@ -12208,7 +11926,7 @@ snapshots: anymatch@3.1.3: dependencies: normalize-path: 3.0.0 - picomatch: 2.3.1 + picomatch: 2.3.2 apache-md5@1.1.8: {} @@ -12313,7 +12031,7 @@ snapshots: autoprefixer@10.4.27(postcss@8.5.8): dependencies: browserslist: 4.28.1 - caniuse-lite: 1.0.30001779 + caniuse-lite: 1.0.30001781 fraction.js: 5.3.4 picocolors: 1.1.1 postcss: 8.5.8 @@ -12336,11 +12054,11 @@ snapshots: optionalDependencies: webpack: 5.105.4(esbuild@0.27.3) - babel-plugin-polyfill-corejs2@0.4.16(@babel/core@7.29.0): + babel-plugin-polyfill-corejs2@0.4.17(@babel/core@7.29.0): dependencies: '@babel/compat-data': 7.29.0 '@babel/core': 7.29.0 - '@babel/helper-define-polyfill-provider': 0.6.7(@babel/core@7.29.0) + '@babel/helper-define-polyfill-provider': 0.6.8(@babel/core@7.29.0) semver: 6.3.1 transitivePeerDependencies: - supports-color @@ -12348,23 +12066,23 @@ snapshots: babel-plugin-polyfill-corejs3@0.13.0(@babel/core@7.29.0): dependencies: '@babel/core': 7.29.0 - '@babel/helper-define-polyfill-provider': 0.6.7(@babel/core@7.29.0) - core-js-compat: 3.48.0 + '@babel/helper-define-polyfill-provider': 0.6.8(@babel/core@7.29.0) + core-js-compat: 3.49.0 transitivePeerDependencies: - supports-color - babel-plugin-polyfill-corejs3@0.14.1(@babel/core@7.29.0): + babel-plugin-polyfill-corejs3@0.14.2(@babel/core@7.29.0): dependencies: '@babel/core': 7.29.0 - '@babel/helper-define-polyfill-provider': 0.6.7(@babel/core@7.29.0) - core-js-compat: 3.48.0 + '@babel/helper-define-polyfill-provider': 0.6.8(@babel/core@7.29.0) + core-js-compat: 3.49.0 transitivePeerDependencies: - supports-color - babel-plugin-polyfill-regenerator@0.6.7(@babel/core@7.29.0): + babel-plugin-polyfill-regenerator@0.6.8(@babel/core@7.29.0): dependencies: '@babel/core': 7.29.0 - '@babel/helper-define-polyfill-provider': 0.6.7(@babel/core@7.29.0) + '@babel/helper-define-polyfill-provider': 0.6.8(@babel/core@7.29.0) transitivePeerDependencies: - supports-color @@ -12374,12 +12092,12 @@ snapshots: bare-events@2.8.2: {} - bare-fs@4.5.5: + bare-fs@4.5.6: dependencies: bare-events: 2.8.2 bare-path: 3.0.0 - bare-stream: 2.8.1(bare-events@2.8.2) - bare-url: 2.3.2 + bare-stream: 2.10.0(bare-events@2.8.2) + bare-url: 2.4.0 fast-fifo: 1.3.2 transitivePeerDependencies: - bare-abort-controller @@ -12391,9 +12109,9 @@ snapshots: dependencies: bare-os: 3.8.0 - bare-stream@2.8.1(bare-events@2.8.2): + bare-stream@2.10.0(bare-events@2.8.2): dependencies: - streamx: 2.23.0 + streamx: 2.25.0 teex: 1.0.1 optionalDependencies: bare-events: 2.8.2 @@ -12401,7 +12119,7 @@ snapshots: - bare-abort-controller - react-native-b4a - bare-url@2.3.2: + bare-url@2.4.0: dependencies: bare-path: 3.0.0 @@ -12409,7 +12127,7 @@ snapshots: base64id@2.0.0: {} - baseline-browser-mapping@2.10.8: {} + baseline-browser-mapping@2.10.10: {} basic-ftp@5.2.0: {} @@ -12566,9 +12284,9 @@ snapshots: browserslist@4.28.1: dependencies: - baseline-browser-mapping: 2.10.8 - caniuse-lite: 1.0.30001779 - electron-to-chromium: 1.5.313 + baseline-browser-mapping: 2.10.10 + caniuse-lite: 1.0.30001781 + electron-to-chromium: 1.5.322 node-releases: 2.0.36 update-browserslist-db: 1.2.3(browserslist@4.28.1) @@ -12597,7 +12315,7 @@ snapshots: bytestreamjs@2.0.1: {} - cacache@20.0.3: + cacache@20.0.4: dependencies: '@npmcli/fs': 5.0.0 fs-minipass: 3.0.3 @@ -12609,7 +12327,6 @@ snapshots: minipass-pipeline: 1.2.4 p-map: 7.0.4 ssri: 13.0.1 - unique-filename: 5.0.0 cacheable-lookup@6.1.0: {} @@ -12642,7 +12359,7 @@ snapshots: callsites@3.1.0: {} - caniuse-lite@1.0.30001779: {} + caniuse-lite@1.0.30001781: {} caseless@0.12.0: {} @@ -12848,7 +12565,7 @@ snapshots: tinyglobby: 0.2.15 webpack: 5.105.4(esbuild@0.27.3) - core-js-compat@3.48.0: + core-js-compat@3.49.0: dependencies: browserslist: 4.28.1 @@ -13117,7 +12834,7 @@ snapshots: ejs@5.0.1: {} - electron-to-chromium@1.5.313: {} + electron-to-chromium@1.5.322: {} emoji-regex@10.6.0: {} @@ -13170,10 +12887,10 @@ snapshots: - supports-color - utf-8-validate - enhanced-resolve@5.20.0: + enhanced-resolve@5.20.1: dependencies: graceful-fs: 4.2.11 - tapable: 2.3.0 + tapable: 2.3.2 ent@2.2.2: dependencies: @@ -13194,8 +12911,6 @@ snapshots: environment@1.1.0: {} - err-code@2.0.3: {} - errno@0.1.8: dependencies: prr: 1.0.1 @@ -13745,12 +13460,12 @@ snapshots: flat-cache@4.0.1: dependencies: - flatted: 3.4.1 + flatted: 3.4.2 keyv: 4.5.4 flat@5.0.2: {} - flatted@3.4.1: {} + flatted@3.4.2: {} folder-hash@4.1.2(supports-color@10.2.2): dependencies: @@ -13830,18 +13545,17 @@ snapshots: functions-have-names@1.2.3: {} - gaxios@7.1.3(supports-color@10.2.2): + gaxios@7.1.4(supports-color@10.2.2): dependencies: extend: 3.0.2 https-proxy-agent: 7.0.6(supports-color@10.2.2) node-fetch: 3.3.2 - rimraf: 5.0.10 transitivePeerDependencies: - supports-color gcp-metadata@8.1.2(supports-color@10.2.2): dependencies: - gaxios: 7.1.3(supports-color@10.2.2) + gaxios: 7.1.4(supports-color@10.2.2) google-logging-utils: 1.1.3 json-bigint: 1.0.0 transitivePeerDependencies: @@ -13887,7 +13601,7 @@ snapshots: es-errors: 1.3.0 get-intrinsic: 1.3.0 - get-tsconfig@4.13.6: + get-tsconfig@4.13.7: dependencies: resolve-pkg-maps: 1.0.0 @@ -13950,11 +13664,11 @@ snapshots: define-properties: 1.2.1 gopd: 1.2.0 - google-auth-library@10.6.1(supports-color@10.2.2): + google-auth-library@10.6.2(supports-color@10.2.2): dependencies: base64-js: 1.5.1 ecdsa-sig-formatter: 1.0.11 - gaxios: 7.1.3(supports-color@10.2.2) + gaxios: 7.1.4(supports-color@10.2.2) gcp-metadata: 8.1.2(supports-color@10.2.2) google-logging-utils: 1.1.3 jws: 4.0.1 @@ -13966,7 +13680,7 @@ snapshots: '@grpc/grpc-js': 1.14.3 '@grpc/proto-loader': 0.8.0 duplexify: 4.1.3 - google-auth-library: 10.6.1(supports-color@10.2.2) + google-auth-library: 10.6.2(supports-color@10.2.2) google-logging-utils: 1.1.3 node-fetch: 3.3.2 object-hash: 3.0.0 @@ -14052,7 +13766,7 @@ snapshots: dependencies: function-bind: 1.1.2 - hono@4.12.8: {} + hono@4.12.9: {} hosted-git-info@9.0.2: dependencies: @@ -14462,7 +14176,7 @@ snapshots: istanbul-lib-instrument@5.2.1: dependencies: '@babel/core': 7.29.0 - '@babel/parser': 7.29.0 + '@babel/parser': 7.29.2 '@istanbuljs/schema': 0.1.3 istanbul-lib-coverage: 3.2.2 semver: 6.3.1 @@ -14472,7 +14186,7 @@ snapshots: istanbul-lib-instrument@6.0.3: dependencies: '@babel/core': 7.29.0 - '@babel/parser': 7.29.0 + '@babel/parser': 7.29.2 '@istanbuljs/schema': 0.1.3 istanbul-lib-coverage: 3.2.2 semver: 7.7.4 @@ -14531,7 +14245,7 @@ snapshots: jiti@2.6.1: {} - jose@6.2.1: {} + jose@6.2.2: {} js-base64@3.7.8: {} @@ -14548,7 +14262,7 @@ snapshots: jsdom@29.0.1: dependencies: '@asamuzakjp/css-color': 5.0.1 - '@asamuzakjp/dom-selector': 7.0.3 + '@asamuzakjp/dom-selector': 7.0.4 '@bramus/specificity': 2.4.2 '@csstools/css-syntax-patches-for-csstree': 1.1.1(css-tree@3.2.1) '@exodus/bytes': 1.15.0 @@ -14595,7 +14309,7 @@ snapshots: json-stringify-safe@5.0.1: {} - json-with-bigint@3.5.7: {} + json-with-bigint@3.5.8: {} json5@1.0.2: dependencies: @@ -14714,7 +14428,7 @@ snapshots: kind-of@6.0.3: {} - launch-editor@2.13.1: + launch-editor@2.13.2: dependencies: picocolors: 1.1.1 shell-quote: 1.8.3 @@ -14840,7 +14554,7 @@ snapshots: dependencies: date-format: 4.0.14 debug: 4.4.3(supports-color@10.2.2) - flatted: 3.4.1 + flatted: 3.4.2 rfdc: 1.4.1 streamroller: 3.1.5 transitivePeerDependencies: @@ -14874,7 +14588,7 @@ snapshots: magicast@0.5.2: dependencies: - '@babel/parser': 7.29.0 + '@babel/parser': 7.29.2 '@babel/types': 7.29.0 source-map-js: 1.2.1 @@ -14888,11 +14602,12 @@ snapshots: dependencies: semver: 7.7.4 - make-fetch-happen@15.0.4: + make-fetch-happen@15.0.5: dependencies: - '@gar/promise-retry': 1.0.2 + '@gar/promise-retry': 1.0.3 '@npmcli/agent': 4.0.0 - cacache: 20.0.3 + '@npmcli/redact': 4.0.0 + cacache: 20.0.4 http-cache-semantics: 4.2.0 minipass: 7.1.3 minipass-fetch: 5.0.2 @@ -14912,20 +14627,20 @@ snapshots: media-typer@1.1.0: {} - memfs@4.56.11(tslib@2.8.1): + memfs@4.57.1(tslib@2.8.1): dependencies: - '@jsonjoy.com/fs-core': 4.56.11(tslib@2.8.1) - '@jsonjoy.com/fs-fsa': 4.56.11(tslib@2.8.1) - '@jsonjoy.com/fs-node': 4.56.11(tslib@2.8.1) - '@jsonjoy.com/fs-node-builtins': 4.56.11(tslib@2.8.1) - '@jsonjoy.com/fs-node-to-fsa': 4.56.11(tslib@2.8.1) - '@jsonjoy.com/fs-node-utils': 4.56.11(tslib@2.8.1) - '@jsonjoy.com/fs-print': 4.56.11(tslib@2.8.1) - '@jsonjoy.com/fs-snapshot': 4.56.11(tslib@2.8.1) + '@jsonjoy.com/fs-core': 4.57.1(tslib@2.8.1) + '@jsonjoy.com/fs-fsa': 4.57.1(tslib@2.8.1) + '@jsonjoy.com/fs-node': 4.57.1(tslib@2.8.1) + '@jsonjoy.com/fs-node-builtins': 4.57.1(tslib@2.8.1) + '@jsonjoy.com/fs-node-to-fsa': 4.57.1(tslib@2.8.1) + '@jsonjoy.com/fs-node-utils': 4.57.1(tslib@2.8.1) + '@jsonjoy.com/fs-print': 4.57.1(tslib@2.8.1) + '@jsonjoy.com/fs-snapshot': 4.57.1(tslib@2.8.1) '@jsonjoy.com/json-pack': 1.21.0(tslib@2.8.1) '@jsonjoy.com/util': 1.9.0(tslib@2.8.1) glob-to-regex.js: 1.2.0(tslib@2.8.1) - thingies: 2.5.0(tslib@2.8.1) + thingies: 2.6.0(tslib@2.8.1) tree-dump: 1.1.0(tslib@2.8.1) tslib: 2.8.1 @@ -14944,7 +14659,7 @@ snapshots: micromatch@4.0.8: dependencies: braces: 3.0.3 - picomatch: 2.3.1 + picomatch: 2.3.2 mime-db@1.52.0: {} @@ -14973,7 +14688,7 @@ snapshots: mini-css-extract-plugin@2.10.1(webpack@5.105.4(esbuild@0.27.3)): dependencies: schema-utils: 4.3.3 - tapable: 2.3.0 + tapable: 2.3.2 webpack: 5.105.4(esbuild@0.27.3) minimalistic-assert@1.0.1: {} @@ -15089,7 +14804,7 @@ snapshots: needle@3.5.0: dependencies: iconv-lite: 0.6.3 - sax: 1.5.0 + sax: 1.6.0 optional: true negotiator@0.6.3: {} @@ -15106,8 +14821,8 @@ snapshots: dependencies: '@ampproject/remapping': 2.3.0 '@angular/compiler-cli': 22.0.0-next.3(@angular/compiler@22.0.0-next.3)(typescript@6.0.2) - '@rollup/plugin-json': 6.1.0(rollup@4.59.0) - '@rollup/wasm-node': 4.59.0 + '@rollup/plugin-json': 6.1.0(rollup@4.60.0) + '@rollup/wasm-node': 4.60.0 ajv: 8.18.0 ansi-colors: 4.1.3 browserslist: 4.28.1 @@ -15122,14 +14837,14 @@ snapshots: ora: 9.3.0 piscina: 5.1.4 postcss: 8.5.8 - rollup-plugin-dts: 6.4.0(rollup@4.59.0)(typescript@6.0.2) + rollup-plugin-dts: 6.4.1(rollup@4.60.0)(typescript@6.0.2) rxjs: 7.8.2 sass: 1.98.0 tinyglobby: 0.2.15 tslib: 2.8.1 typescript: 6.0.2 optionalDependencies: - rollup: 4.59.0 + rollup: 4.60.0 nock@14.0.11: dependencies: @@ -15177,11 +14892,11 @@ snapshots: env-paths: 2.2.1 exponential-backoff: 3.1.3 graceful-fs: 4.2.11 - make-fetch-happen: 15.0.4 + make-fetch-happen: 15.0.5 nopt: 9.0.0 proc-log: 6.1.0 semver: 7.7.4 - tar: 7.5.11 + tar: 7.5.13 tinyglobby: 0.2.15 which: 6.0.1 transitivePeerDependencies: @@ -15230,7 +14945,7 @@ snapshots: dependencies: '@npmcli/redact': 4.0.0 jsonparse: 1.3.1 - make-fetch-happen: 15.0.4 + make-fetch-happen: 15.0.5 minipass: 7.1.3 minipass-fetch: 5.0.2 minizlib: 3.1.0 @@ -15411,13 +15126,13 @@ snapshots: pacote@21.5.0: dependencies: - '@gar/promise-retry': 1.0.2 + '@gar/promise-retry': 1.0.3 '@npmcli/git': 7.0.2 '@npmcli/installed-package-contents': 4.0.0 '@npmcli/package-json': 7.0.5 '@npmcli/promise-spawn': 9.0.1 '@npmcli/run-script': 10.0.4 - cacache: 20.0.3 + cacache: 20.0.4 fs-minipass: 3.0.3 minipass: 7.1.3 npm-package-arg: 13.0.2 @@ -15427,7 +15142,7 @@ snapshots: proc-log: 6.1.0 sigstore: 4.1.0 ssri: 13.0.1 - tar: 7.5.11 + tar: 7.5.13 transitivePeerDependencies: - supports-color @@ -15502,7 +15217,7 @@ snapshots: picocolors@1.1.1: {} - picomatch@2.3.1: {} + picomatch@2.3.2: {} picomatch@4.0.3: {} @@ -15546,7 +15261,7 @@ snapshots: dependencies: find-up-simple: 1.0.1 - pkijs@3.3.3: + pkijs@3.4.0: dependencies: '@noble/hashes': 1.4.0 asn1js: 3.0.7 @@ -15633,11 +15348,6 @@ snapshots: progress@2.0.3: {} - promise-retry@2.0.1: - dependencies: - err-code: 2.0.3 - retry: 0.12.0 - propagate@2.0.1: {} proto3-json-serializer@3.0.4: @@ -15710,7 +15420,7 @@ snapshots: devtools-protocol: 0.0.1581282 typed-query-selector: 2.12.1 webdriver-bidi-protocol: 0.4.1 - ws: 8.19.0(bufferutil@4.1.0)(utf-8-validate@6.0.6) + ws: 8.20.0(bufferutil@4.1.0)(utf-8-validate@6.0.6) transitivePeerDependencies: - bare-abort-controller - bare-buffer @@ -15773,7 +15483,7 @@ snapshots: unicode-properties: 1.4.1 urijs: 1.19.11 wordwrap: 1.0.0 - yaml: 2.8.2 + yaml: 2.8.3 transitivePeerDependencies: - encoding @@ -15827,7 +15537,7 @@ snapshots: readdirp@3.6.0: dependencies: - picomatch: 2.3.1 + picomatch: 2.3.2 readdirp@4.1.2: {} @@ -15929,8 +15639,6 @@ snapshots: transitivePeerDependencies: - supports-color - retry@0.12.0: {} - retry@0.13.1: {} reusify@1.1.0: {} @@ -15973,17 +15681,6 @@ snapshots: semver: 7.7.4 spdx-expression-validate: 2.0.0 - rollup-plugin-dts@6.4.0(rollup@4.59.0)(typescript@6.0.2): - dependencies: - '@jridgewell/remapping': 2.3.5 - '@jridgewell/sourcemap-codec': 1.5.5 - convert-source-map: 2.0.0 - magic-string: 0.30.21 - rollup: 4.59.0 - typescript: 6.0.2 - optionalDependencies: - '@babel/code-frame': 7.29.0 - rollup-plugin-dts@6.4.1(rollup@4.60.0)(typescript@6.0.2): dependencies: '@jridgewell/remapping': 2.3.5 @@ -16002,37 +15699,6 @@ snapshots: optionalDependencies: '@types/node': 22.19.15 - rollup@4.59.0: - dependencies: - '@types/estree': 1.0.8 - optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.59.0 - '@rollup/rollup-android-arm64': 4.59.0 - '@rollup/rollup-darwin-arm64': 4.59.0 - '@rollup/rollup-darwin-x64': 4.59.0 - '@rollup/rollup-freebsd-arm64': 4.59.0 - '@rollup/rollup-freebsd-x64': 4.59.0 - '@rollup/rollup-linux-arm-gnueabihf': 4.59.0 - '@rollup/rollup-linux-arm-musleabihf': 4.59.0 - '@rollup/rollup-linux-arm64-gnu': 4.59.0 - '@rollup/rollup-linux-arm64-musl': 4.59.0 - '@rollup/rollup-linux-loong64-gnu': 4.59.0 - '@rollup/rollup-linux-loong64-musl': 4.59.0 - '@rollup/rollup-linux-ppc64-gnu': 4.59.0 - '@rollup/rollup-linux-ppc64-musl': 4.59.0 - '@rollup/rollup-linux-riscv64-gnu': 4.59.0 - '@rollup/rollup-linux-riscv64-musl': 4.59.0 - '@rollup/rollup-linux-s390x-gnu': 4.59.0 - '@rollup/rollup-linux-x64-gnu': 4.59.0 - '@rollup/rollup-linux-x64-musl': 4.59.0 - '@rollup/rollup-openbsd-x64': 4.59.0 - '@rollup/rollup-openharmony-arm64': 4.59.0 - '@rollup/rollup-win32-arm64-msvc': 4.59.0 - '@rollup/rollup-win32-ia32-msvc': 4.59.0 - '@rollup/rollup-win32-x64-gnu': 4.59.0 - '@rollup/rollup-win32-x64-msvc': 4.59.0 - fsevents: 2.3.3 - rollup@4.60.0: dependencies: '@types/estree': 1.0.8 @@ -16128,7 +15794,7 @@ snapshots: optionalDependencies: '@parcel/watcher': 2.5.6 - sax@1.5.0: + sax@1.6.0: optional: true saxes@6.0.0: @@ -16147,7 +15813,7 @@ snapshots: selfsigned@5.5.0: dependencies: '@peculiar/x509': 1.14.3 - pkijs: 3.3.3 + pkijs: 3.4.0 semver@5.7.2: optional: true @@ -16299,10 +15965,10 @@ snapshots: sigstore@4.1.0: dependencies: '@sigstore/bundle': 4.0.0 - '@sigstore/core': 3.1.0 + '@sigstore/core': 3.2.0 '@sigstore/protobuf-specs': 0.5.0 - '@sigstore/sign': 4.1.0 - '@sigstore/tuf': 4.0.1 + '@sigstore/sign': 4.1.1 + '@sigstore/tuf': 4.0.2 '@sigstore/verify': 3.1.0 transitivePeerDependencies: - supports-color @@ -16333,13 +15999,13 @@ snapshots: '@socket.io/component-emitter': 3.1.2 debug: 4.4.3(supports-color@10.2.2) engine.io-client: 6.6.4(bufferutil@4.1.0)(utf-8-validate@6.0.6) - socket.io-parser: 4.2.5 + socket.io-parser: 4.2.6 transitivePeerDependencies: - bufferutil - supports-color - utf-8-validate - socket.io-parser@4.2.5: + socket.io-parser@4.2.6: dependencies: '@socket.io/component-emitter': 3.1.2 debug: 4.4.3(supports-color@10.2.2) @@ -16354,7 +16020,7 @@ snapshots: debug: 4.4.3(supports-color@10.2.2) engine.io: 6.6.6(bufferutil@4.1.0)(utf-8-validate@6.0.6) socket.io-adapter: 2.5.6(bufferutil@4.1.0)(utf-8-validate@6.0.6) - socket.io-parser: 4.2.5 + socket.io-parser: 4.2.6 transitivePeerDependencies: - bufferutil - supports-color @@ -16518,7 +16184,7 @@ snapshots: transitivePeerDependencies: - supports-color - streamx@2.23.0: + streamx@2.25.0: dependencies: events-universal: 1.0.1 fast-fifo: 1.3.2 @@ -16611,14 +16277,14 @@ snapshots: symbol-tree@3.2.4: {} - tapable@2.3.0: {} + tapable@2.3.2: {} tar-fs@3.1.2: dependencies: pump: 3.0.4 tar-stream: 3.1.8 optionalDependencies: - bare-fs: 4.5.5 + bare-fs: 4.5.6 bare-path: 3.0.0 transitivePeerDependencies: - bare-abort-controller @@ -16629,7 +16295,7 @@ snapshots: dependencies: b4a: 1.8.0 fast-fifo: 1.3.2 - streamx: 2.23.0 + streamx: 2.25.0 transitivePeerDependencies: - bare-abort-controller - react-native-b4a @@ -16637,15 +16303,15 @@ snapshots: tar-stream@3.1.8: dependencies: b4a: 1.8.0 - bare-fs: 4.5.5 + bare-fs: 4.5.6 fast-fifo: 1.3.2 - streamx: 2.23.0 + streamx: 2.25.0 transitivePeerDependencies: - bare-abort-controller - bare-buffer - react-native-b4a - tar@7.5.11: + tar@7.5.13: dependencies: '@isaacs/fs-minipass': 4.0.1 chownr: 3.0.0 @@ -16664,7 +16330,7 @@ snapshots: teex@1.0.1: dependencies: - streamx: 2.23.0 + streamx: 2.25.0 transitivePeerDependencies: - bare-abort-controller - react-native-b4a @@ -16692,7 +16358,7 @@ snapshots: transitivePeerDependencies: - react-native-b4a - thingies@2.5.0(tslib@2.8.1): + thingies@2.6.0(tslib@2.8.1): dependencies: tslib: 2.8.1 @@ -16728,15 +16394,15 @@ snapshots: tldts-core@6.1.86: {} - tldts-core@7.0.26: {} + tldts-core@7.0.27: {} tldts@6.1.86: dependencies: tldts-core: 6.1.86 - tldts@7.0.26: + tldts@7.0.27: dependencies: - tldts-core: 7.0.26 + tldts-core: 7.0.27 tmp@0.2.5: {} @@ -16754,7 +16420,7 @@ snapshots: tough-cookie@6.0.1: dependencies: - tldts: 7.0.26 + tldts: 7.0.27 tr46@0.0.3: {} @@ -16766,7 +16432,7 @@ snapshots: dependencies: tslib: 2.8.1 - ts-api-utils@2.4.0(typescript@6.0.2): + ts-api-utils@2.5.0(typescript@6.0.2): dependencies: typescript: 6.0.2 @@ -16784,7 +16450,7 @@ snapshots: tsx@4.21.0: dependencies: esbuild: 0.27.3 - get-tsconfig: 4.13.6 + get-tsconfig: 4.13.7 optionalDependencies: fsevents: 2.3.3 @@ -16796,7 +16462,7 @@ snapshots: dependencies: '@tufjs/models': 4.1.0 debug: 4.4.3(supports-color@10.2.2) - make-fetch-happen: 15.0.4 + make-fetch-happen: 15.0.5 transitivePeerDependencies: - supports-color @@ -16882,7 +16548,7 @@ snapshots: has-symbols: 1.1.0 which-boxed-primitive: 1.1.1 - undici-types@7.24.4: {} + undici-types@7.24.5: {} undici@6.24.1: {} @@ -16917,14 +16583,6 @@ snapshots: pako: 0.2.9 tiny-inflate: 1.0.3 - unique-filename@5.0.0: - dependencies: - unique-slug: 6.0.0 - - unique-slug@6.0.0: - dependencies: - imurmurhash: 0.1.4 - universal-github-app-jwt@2.2.2: {} universal-user-agent@7.0.3: {} @@ -17037,13 +16695,13 @@ snapshots: core-util-is: 1.0.2 extsprintf: 1.3.0 - vite@7.3.1(@types/node@24.12.0)(jiti@2.6.1)(less@4.6.4)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2): + vite@7.3.1(@types/node@24.12.0)(jiti@2.6.1)(less@4.6.4)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3): dependencies: esbuild: 0.27.3 fdir: 6.5.0(picomatch@4.0.3) picomatch: 4.0.3 postcss: 8.5.8 - rollup: 4.59.0 + rollup: 4.60.0 tinyglobby: 0.2.15 optionalDependencies: '@types/node': 24.12.0 @@ -17053,12 +16711,12 @@ snapshots: sass: 1.98.0 terser: 5.46.1 tsx: 4.21.0 - yaml: 2.8.2 + yaml: 2.8.3 - vitest@4.1.0(@opentelemetry/api@1.9.0)(@types/node@24.12.0)(jiti@2.6.1)(jsdom@29.0.1)(less@4.6.4)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2): + vitest@4.1.0(@opentelemetry/api@1.9.0)(@types/node@24.12.0)(jiti@2.6.1)(jsdom@29.0.1)(less@4.6.4)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3): dependencies: '@vitest/expect': 4.1.0 - '@vitest/mocker': 4.1.0(vite@7.3.1(@types/node@24.12.0)(jiti@2.6.1)(less@4.6.4)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2)) + '@vitest/mocker': 4.1.0(vite@7.3.1(@types/node@24.12.0)(jiti@2.6.1)(less@4.6.4)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) '@vitest/pretty-format': 4.1.0 '@vitest/runner': 4.1.0 '@vitest/snapshot': 4.1.0 @@ -17075,7 +16733,7 @@ snapshots: tinyexec: 1.0.4 tinyglobby: 0.2.15 tinyrainbow: 3.1.0 - vite: 7.3.1(@types/node@24.12.0)(jiti@2.6.1)(less@4.6.4)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.2) + vite: 7.3.1(@types/node@24.12.0)(jiti@2.6.1)(less@4.6.4)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) why-is-node-running: 2.3.0 optionalDependencies: '@opentelemetry/api': 1.9.0 @@ -17125,7 +16783,7 @@ snapshots: webpack-dev-middleware@7.4.5(tslib@2.8.1)(webpack@5.105.4(esbuild@0.27.3)): dependencies: colorette: 2.0.20 - memfs: 4.56.11(tslib@2.8.1) + memfs: 4.57.1(tslib@2.8.1) mime-types: 3.0.2 on-finished: 2.4.1 range-parser: 1.2.1 @@ -17155,7 +16813,7 @@ snapshots: graceful-fs: 4.2.11 http-proxy-middleware: 2.0.9(@types/express@4.17.25) ipaddr.js: 2.3.0 - launch-editor: 2.13.1 + launch-editor: 2.13.2 open: 10.2.0 p-retry: 6.2.1 schema-utils: 4.3.3 @@ -17164,7 +16822,7 @@ snapshots: sockjs: 0.3.24 spdy: 4.0.2 webpack-dev-middleware: 7.4.5(tslib@2.8.1)(webpack@5.105.4(esbuild@0.27.3)) - ws: 8.19.0(bufferutil@4.1.0)(utf-8-validate@6.0.6) + ws: 8.20.0(bufferutil@4.1.0)(utf-8-validate@6.0.6) optionalDependencies: webpack: 5.105.4(esbuild@0.27.3) transitivePeerDependencies: @@ -17199,7 +16857,7 @@ snapshots: acorn-import-phases: 1.0.4(acorn@8.16.0) browserslist: 4.28.1 chrome-trace-event: 1.0.4 - enhanced-resolve: 5.20.0 + enhanced-resolve: 5.20.1 es-module-lexer: 2.0.0 eslint-scope: 5.1.1 events: 3.3.0 @@ -17210,7 +16868,7 @@ snapshots: mime-types: 2.1.35 neo-async: 2.6.2 schema-utils: 4.3.3 - tapable: 2.3.0 + tapable: 2.3.2 terser-webpack-plugin: 5.4.0(esbuild@0.27.3)(webpack@5.105.4(esbuild@0.27.3)) watchpack: 2.5.1 webpack-sources: 3.3.4 @@ -17337,7 +16995,7 @@ snapshots: bufferutil: 4.1.0 utf-8-validate: 6.0.6 - ws@8.19.0(bufferutil@4.1.0)(utf-8-validate@6.0.6): + ws@8.20.0(bufferutil@4.1.0)(utf-8-validate@6.0.6): optionalDependencies: bufferutil: 4.1.0 utf-8-validate: 6.0.6 @@ -17371,6 +17029,8 @@ snapshots: yaml@2.8.2: {} + yaml@2.8.3: {} + yargs-parser@20.2.9: {} yargs-parser@21.1.1: {} From 99079b4bb1ef716b396c4beb846052b93538483e Mon Sep 17 00:00:00 2001 From: Alan Agius <17563226+alan-agius4@users.noreply.github.com> Date: Thu, 26 Mar 2026 10:35:02 +0000 Subject: [PATCH 173/226] docs: release notes for the v21.2.4 release --- CHANGELOG.md | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 63074d7002e1..00b65777c4c3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,32 @@ +<a name="21.2.4"></a> + +# 21.2.4 (2026-03-26) + +### @angular/cli + +| Commit | Type | Description | +| --------------------------------------------------------------------------------------------------- | ---- | ---------------------------------------------- | +| [a7787d092](https://github.com/angular/angular-cli/commit/a7787d0925559fe7731034856a872708bcfb78be) | fix | restore console methods after logger completes | + +### @angular/build + +| Commit | Type | Description | +| --------------------------------------------------------------------------------------------------- | ---- | ------------------------------------------------------------------------- | +| [7170599ab](https://github.com/angular/angular-cli/commit/7170599ab237691d9208c410363ef7e4ee50db2c) | fix | deduplicate and merge coverage excludes with vitest | +| [c73f13797](https://github.com/angular/angular-cli/commit/c73f13797afe57fcc98faf6361085e1dd5afae9b) | fix | prevent reporter duplicates by explicitly overriding Vitest configuration | +| [956ccaa71](https://github.com/angular/angular-cli/commit/956ccaa71ea8a3626e4139cf7e2f26ee637feeed) | fix | remove default for unit-test coverage option | +| [36978db7e](https://github.com/angular/angular-cli/commit/36978db7e494e4e5612aa2a8384199eeca7c4c2d) | fix | warn about performance of test.exclude in vitest configuration | +| [6ec36f5be](https://github.com/angular/angular-cli/commit/6ec36f5bee05d97c10ca8d91d5746621ffb1fdb9) | fix | warn when vitest watch config conflicts with builder | + +### @angular/ssr + +| Commit | Type | Description | +| --------------------------------------------------------------------------------------------------- | ---- | ------------------------------------------------------------------- | +| [9bdf782c8](https://github.com/angular/angular-cli/commit/9bdf782c838ab5820ec905d689a62ffc3b3cabe3) | fix | apply forwarded prefix and vary header in accept-language redirects | +| [628c58672](https://github.com/angular/angular-cli/commit/628c586728748e1c367fa7e363299eb79b1566ca) | fix | support '\*' in allowedHosts and warn about security risks | + +<!-- CHANGELOG SPLIT MARKER --> + <a name="20.3.21"></a> # 20.3.21 (2026-03-19) From 738250e4562e78145633e6626818d627958a425e Mon Sep 17 00:00:00 2001 From: Alan Agius <17563226+alan-agius4@users.noreply.github.com> Date: Thu, 26 Mar 2026 10:39:29 +0000 Subject: [PATCH 174/226] release: cut the v22.0.0-next.3 release --- CHANGELOG.md | 35 +++++++++++++++++++++++++++++++++++ package.json | 2 +- 2 files changed, 36 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 00b65777c4c3..7ddf083e5128 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,38 @@ +<a name="22.0.0-next.3"></a> + +# 22.0.0-next.3 (2026-03-26) + +### @angular/cli + +| Commit | Type | Description | +| --------------------------------------------------------------------------------------------------- | ---- | ---------------------------------------------- | +| [4bbd1bf53](https://github.com/angular/angular-cli/commit/4bbd1bf532fc2d9c36650121a05eae2fb096eb09) | fix | restore console methods after logger completes | + +### @schematics/angular + +| Commit | Type | Description | +| --------------------------------------------------------------------------------------------------- | ---- | ------------------------------------------------------- | +| [f98cc82eb](https://github.com/angular/angular-cli/commit/f98cc82eb0f46986e61b4f94b57dcd36e4eaf215) | feat | rely on strict template default in generated workspaces | + +### @angular/build + +| Commit | Type | Description | +| --------------------------------------------------------------------------------------------------- | ---- | ------------------------------------------------------------------------- | +| [01bd5d064](https://github.com/angular/angular-cli/commit/01bd5d06410719f66fcabb0bfd04c809e7db12f7) | fix | deduplicate and merge coverage excludes with vitest | +| [355ebe8c5](https://github.com/angular/angular-cli/commit/355ebe8c54b58201c8080543e5e04208599f0947) | fix | prevent reporter duplicates by explicitly overriding Vitest configuration | +| [1a8376bee](https://github.com/angular/angular-cli/commit/1a8376bee9b7683b84c2ae50d08e50d5c5c7b99a) | fix | remove default for unit-test coverage option | +| [a203dcf1d](https://github.com/angular/angular-cli/commit/a203dcf1d9a6d544cbae867aa949ab0582e60a88) | fix | warn about performance of test.exclude in vitest configuration | +| [ec10eb365](https://github.com/angular/angular-cli/commit/ec10eb365261549c2181efa98a494a749444a787) | fix | warn when vitest watch config conflicts with builder | + +### @angular/ssr + +| Commit | Type | Description | +| --------------------------------------------------------------------------------------------------- | ---- | ------------------------------------------------------------------- | +| [ca6f08c6e](https://github.com/angular/angular-cli/commit/ca6f08c6e59820160f7ae496a9d8775c78ce1a58) | fix | apply forwarded prefix and vary header in accept-language redirects | +| [3b99ee140](https://github.com/angular/angular-cli/commit/3b99ee140db82c8ddae3f6e48f9fc38eca204a53) | fix | support '\*' in allowedHosts and warn about security risks | + +<!-- CHANGELOG SPLIT MARKER --> + <a name="21.2.4"></a> # 21.2.4 (2026-03-26) diff --git a/package.json b/package.json index 1958b08c024a..5ca4aae2762a 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@angular/devkit-repo", - "version": "22.0.0-next.2", + "version": "22.0.0-next.3", "private": true, "description": "Software Development Kit for Angular", "keywords": [ From bcd99f944ecb90f896040030b98f1d03692b5b6f Mon Sep 17 00:00:00 2001 From: Alan Agius <17563226+alan-agius4@users.noreply.github.com> Date: Wed, 25 Mar 2026 08:26:34 +0000 Subject: [PATCH 175/226] fix(@angular/ssr): patch Headers.forEach in cloneRequestAndPatchHeaders This commit updates the cloneRequestAndPatchHeaders function to patch the Headers.forEach method. This ensures that host headers are validated when the application iterates over request headers using forEach, preventing potential host header injection attacks during header iteration. A unit test has been added to validation_spec.ts to verify that forEach correctly triggers validation and throws an error for disallowed hosts. --- packages/angular/ssr/src/utils/validation.ts | 13 +++++++++++++ .../angular/ssr/test/utils/validation_spec.ts | 19 +++++++++++++++++++ 2 files changed, 32 insertions(+) diff --git a/packages/angular/ssr/src/utils/validation.ts b/packages/angular/ssr/src/utils/validation.ts index e359b94aac6f..83f7f2ea269e 100644 --- a/packages/angular/ssr/src/utils/validation.ts +++ b/packages/angular/ssr/src/utils/validation.ts @@ -151,6 +151,19 @@ export function cloneRequestAndPatchHeaders( }; }; + const originalForEach = headers.forEach; + // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion + (headers.forEach as typeof originalForEach) = function (callback, thisArg) { + originalForEach.call( + headers, + (value, key, parent) => { + validateHeader(key, value, allowedHosts, onError); + callback.call(thisArg, value, key, parent); + }, + thisArg, + ); + }; + // Ensure for...of loops use the new patched entries (headers[Symbol.iterator] as typeof originalEntries) = headers.entries; diff --git a/packages/angular/ssr/test/utils/validation_spec.ts b/packages/angular/ssr/test/utils/validation_spec.ts index 8fed87e83713..5c4b6e8cd121 100644 --- a/packages/angular/ssr/test/utils/validation_spec.ts +++ b/packages/angular/ssr/test/utils/validation_spec.ts @@ -341,5 +341,24 @@ describe('Validation Utils', () => { }), ); }); + + it('should validate headers when iterating with forEach()', async () => { + const req = new Request('http://example.com', { + headers: { 'host': 'evil.com' }, + }); + const { request: secured, onError } = cloneRequestAndPatchHeaders(req, allowedHosts); + + expect(() => { + secured.headers.forEach(() => { + // access the header to trigger the validation + }); + }).toThrowError('Header "host" with value "evil.com" is not allowed.'); + + await expectAsync(onError).toBeResolvedTo( + jasmine.objectContaining({ + message: jasmine.stringMatching('Header "host" with value "evil.com" is not allowed.'), + }), + ); + }); }); }); From 20fbee8a92a46af214df01062c2f75951d9851d3 Mon Sep 17 00:00:00 2001 From: Angular Robot <angular-robot@google.com> Date: Wed, 25 Mar 2026 06:24:48 +0000 Subject: [PATCH 176/226] build: update dependency node to v22.22.2 See associated pull request for more information. --- .nvmrc | 2 +- MODULE.bazel | 16 +- MODULE.bazel.lock | 562 +++++++++++++++++++++++----------------------- 3 files changed, 290 insertions(+), 290 deletions(-) diff --git a/.nvmrc b/.nvmrc index 32a2d7bd80d1..db49bb14d78e 100644 --- a/.nvmrc +++ b/.nvmrc @@ -1 +1 @@ -22.22.1 +22.22.2 diff --git a/MODULE.bazel b/MODULE.bazel index a347c132304b..fc8d9300638b 100644 --- a/MODULE.bazel +++ b/MODULE.bazel @@ -47,15 +47,15 @@ git_override( node = use_extension("@rules_nodejs//nodejs:extensions.bzl", "node") node.toolchain( node_repositories = { - "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"), + "22.22.2-darwin_arm64": ("node-v22.22.2-darwin-arm64.tar.gz", "node-v22.22.2-darwin-arm64", "db4b275b83736df67533529a18cc55de2549a8329ace6c7bcc68f8d22d3c9000"), + "22.22.2-darwin_amd64": ("node-v22.22.2-darwin-x64.tar.gz", "node-v22.22.2-darwin-x64", "12a6abb9c2902cf48a21120da13f87fde1ed1b71a13330712949e8db818708ba"), + "22.22.2-linux_arm64": ("node-v22.22.2-linux-arm64.tar.xz", "node-v22.22.2-linux-arm64", "e9e1930fd321a470e29bb68f30318bf58e3ecb4acb4f1533fb19c58328a091fe"), + "22.22.2-linux_ppc64le": ("node-v22.22.2-linux-ppc64le.tar.xz", "node-v22.22.2-linux-ppc64le", "14045b5a5030d35ca0030fb7e870bd11a651eb9b57323ebc0021e8d78ac6bac9"), + "22.22.2-linux_s390x": ("node-v22.22.2-linux-s390x.tar.xz", "node-v22.22.2-linux-s390x", "9e4a07c291b8949289c6ea8ee61b1d14666a4810feae776a8d1eb1f57e03a2fb"), + "22.22.2-linux_amd64": ("node-v22.22.2-linux-x64.tar.xz", "node-v22.22.2-linux-x64", "88fd1ce767091fd8d4a99fdb2356e98c819f93f3b1f8663853a2dee9b438068a"), + "22.22.2-windows_amd64": ("node-v22.22.2-win-x64.zip", "node-v22.22.2-win-x64", "7c93e9d92bf68c07182b471aa187e35ee6cd08ef0f24ab060dfff605fcc1c57c"), }, - node_version = "22.22.1", + node_version = "22.22.2", ) use_repo( node, diff --git a/MODULE.bazel.lock b/MODULE.bazel.lock index 953c1d821f33..e377ca75496b 100644 --- a/MODULE.bazel.lock +++ b/MODULE.bazel.lock @@ -951,7 +951,7 @@ "@@rules_nodejs+//nodejs:extensions.bzl%node": { "general": { "bzlTransitiveDigest": "4pUxCNc22K4I+6+4Nxu52Hur12tFRfa1JMsN5mdDv60=", - "usagesDigest": "X7Kxcfcdl7MhnOnNAIrP4Jopm219NlA68akZFd9dFGo=", + "usagesDigest": "w///UlcYjRDXPNn95Y2mOOunmakp+DaRy/wpjFBwaMg=", "recordedFileInputs": {}, "recordedDirentsInputs": {}, "envVariables": {}, @@ -961,46 +961,46 @@ "attributes": { "node_download_auth": {}, "node_repositories": { - "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" + "22.22.2-darwin_arm64": [ + "node-v22.22.2-darwin-arm64.tar.gz", + "node-v22.22.2-darwin-arm64", + "db4b275b83736df67533529a18cc55de2549a8329ace6c7bcc68f8d22d3c9000" + ], + "22.22.2-darwin_amd64": [ + "node-v22.22.2-darwin-x64.tar.gz", + "node-v22.22.2-darwin-x64", + "12a6abb9c2902cf48a21120da13f87fde1ed1b71a13330712949e8db818708ba" + ], + "22.22.2-linux_arm64": [ + "node-v22.22.2-linux-arm64.tar.xz", + "node-v22.22.2-linux-arm64", + "e9e1930fd321a470e29bb68f30318bf58e3ecb4acb4f1533fb19c58328a091fe" + ], + "22.22.2-linux_ppc64le": [ + "node-v22.22.2-linux-ppc64le.tar.xz", + "node-v22.22.2-linux-ppc64le", + "14045b5a5030d35ca0030fb7e870bd11a651eb9b57323ebc0021e8d78ac6bac9" + ], + "22.22.2-linux_s390x": [ + "node-v22.22.2-linux-s390x.tar.xz", + "node-v22.22.2-linux-s390x", + "9e4a07c291b8949289c6ea8ee61b1d14666a4810feae776a8d1eb1f57e03a2fb" + ], + "22.22.2-linux_amd64": [ + "node-v22.22.2-linux-x64.tar.xz", + "node-v22.22.2-linux-x64", + "88fd1ce767091fd8d4a99fdb2356e98c819f93f3b1f8663853a2dee9b438068a" + ], + "22.22.2-windows_amd64": [ + "node-v22.22.2-win-x64.zip", + "node-v22.22.2-win-x64", + "7c93e9d92bf68c07182b471aa187e35ee6cd08ef0f24ab060dfff605fcc1c57c" ] }, "node_urls": [ "https://nodejs.org/dist/v{version}/{filename}" ], - "node_version": "22.22.1", + "node_version": "22.22.2", "include_headers": false, "platform": "linux_amd64" } @@ -1010,46 +1010,46 @@ "attributes": { "node_download_auth": {}, "node_repositories": { - "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" + "22.22.2-darwin_arm64": [ + "node-v22.22.2-darwin-arm64.tar.gz", + "node-v22.22.2-darwin-arm64", + "db4b275b83736df67533529a18cc55de2549a8329ace6c7bcc68f8d22d3c9000" + ], + "22.22.2-darwin_amd64": [ + "node-v22.22.2-darwin-x64.tar.gz", + "node-v22.22.2-darwin-x64", + "12a6abb9c2902cf48a21120da13f87fde1ed1b71a13330712949e8db818708ba" + ], + "22.22.2-linux_arm64": [ + "node-v22.22.2-linux-arm64.tar.xz", + "node-v22.22.2-linux-arm64", + "e9e1930fd321a470e29bb68f30318bf58e3ecb4acb4f1533fb19c58328a091fe" + ], + "22.22.2-linux_ppc64le": [ + "node-v22.22.2-linux-ppc64le.tar.xz", + "node-v22.22.2-linux-ppc64le", + "14045b5a5030d35ca0030fb7e870bd11a651eb9b57323ebc0021e8d78ac6bac9" + ], + "22.22.2-linux_s390x": [ + "node-v22.22.2-linux-s390x.tar.xz", + "node-v22.22.2-linux-s390x", + "9e4a07c291b8949289c6ea8ee61b1d14666a4810feae776a8d1eb1f57e03a2fb" + ], + "22.22.2-linux_amd64": [ + "node-v22.22.2-linux-x64.tar.xz", + "node-v22.22.2-linux-x64", + "88fd1ce767091fd8d4a99fdb2356e98c819f93f3b1f8663853a2dee9b438068a" + ], + "22.22.2-windows_amd64": [ + "node-v22.22.2-win-x64.zip", + "node-v22.22.2-win-x64", + "7c93e9d92bf68c07182b471aa187e35ee6cd08ef0f24ab060dfff605fcc1c57c" ] }, "node_urls": [ "https://nodejs.org/dist/v{version}/{filename}" ], - "node_version": "22.22.1", + "node_version": "22.22.2", "include_headers": false, "platform": "linux_arm64" } @@ -1059,46 +1059,46 @@ "attributes": { "node_download_auth": {}, "node_repositories": { - "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" + "22.22.2-darwin_arm64": [ + "node-v22.22.2-darwin-arm64.tar.gz", + "node-v22.22.2-darwin-arm64", + "db4b275b83736df67533529a18cc55de2549a8329ace6c7bcc68f8d22d3c9000" + ], + "22.22.2-darwin_amd64": [ + "node-v22.22.2-darwin-x64.tar.gz", + "node-v22.22.2-darwin-x64", + "12a6abb9c2902cf48a21120da13f87fde1ed1b71a13330712949e8db818708ba" + ], + "22.22.2-linux_arm64": [ + "node-v22.22.2-linux-arm64.tar.xz", + "node-v22.22.2-linux-arm64", + "e9e1930fd321a470e29bb68f30318bf58e3ecb4acb4f1533fb19c58328a091fe" + ], + "22.22.2-linux_ppc64le": [ + "node-v22.22.2-linux-ppc64le.tar.xz", + "node-v22.22.2-linux-ppc64le", + "14045b5a5030d35ca0030fb7e870bd11a651eb9b57323ebc0021e8d78ac6bac9" + ], + "22.22.2-linux_s390x": [ + "node-v22.22.2-linux-s390x.tar.xz", + "node-v22.22.2-linux-s390x", + "9e4a07c291b8949289c6ea8ee61b1d14666a4810feae776a8d1eb1f57e03a2fb" + ], + "22.22.2-linux_amd64": [ + "node-v22.22.2-linux-x64.tar.xz", + "node-v22.22.2-linux-x64", + "88fd1ce767091fd8d4a99fdb2356e98c819f93f3b1f8663853a2dee9b438068a" + ], + "22.22.2-windows_amd64": [ + "node-v22.22.2-win-x64.zip", + "node-v22.22.2-win-x64", + "7c93e9d92bf68c07182b471aa187e35ee6cd08ef0f24ab060dfff605fcc1c57c" ] }, "node_urls": [ "https://nodejs.org/dist/v{version}/{filename}" ], - "node_version": "22.22.1", + "node_version": "22.22.2", "include_headers": false, "platform": "linux_s390x" } @@ -1108,46 +1108,46 @@ "attributes": { "node_download_auth": {}, "node_repositories": { - "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" + "22.22.2-darwin_arm64": [ + "node-v22.22.2-darwin-arm64.tar.gz", + "node-v22.22.2-darwin-arm64", + "db4b275b83736df67533529a18cc55de2549a8329ace6c7bcc68f8d22d3c9000" + ], + "22.22.2-darwin_amd64": [ + "node-v22.22.2-darwin-x64.tar.gz", + "node-v22.22.2-darwin-x64", + "12a6abb9c2902cf48a21120da13f87fde1ed1b71a13330712949e8db818708ba" + ], + "22.22.2-linux_arm64": [ + "node-v22.22.2-linux-arm64.tar.xz", + "node-v22.22.2-linux-arm64", + "e9e1930fd321a470e29bb68f30318bf58e3ecb4acb4f1533fb19c58328a091fe" + ], + "22.22.2-linux_ppc64le": [ + "node-v22.22.2-linux-ppc64le.tar.xz", + "node-v22.22.2-linux-ppc64le", + "14045b5a5030d35ca0030fb7e870bd11a651eb9b57323ebc0021e8d78ac6bac9" + ], + "22.22.2-linux_s390x": [ + "node-v22.22.2-linux-s390x.tar.xz", + "node-v22.22.2-linux-s390x", + "9e4a07c291b8949289c6ea8ee61b1d14666a4810feae776a8d1eb1f57e03a2fb" + ], + "22.22.2-linux_amd64": [ + "node-v22.22.2-linux-x64.tar.xz", + "node-v22.22.2-linux-x64", + "88fd1ce767091fd8d4a99fdb2356e98c819f93f3b1f8663853a2dee9b438068a" + ], + "22.22.2-windows_amd64": [ + "node-v22.22.2-win-x64.zip", + "node-v22.22.2-win-x64", + "7c93e9d92bf68c07182b471aa187e35ee6cd08ef0f24ab060dfff605fcc1c57c" ] }, "node_urls": [ "https://nodejs.org/dist/v{version}/{filename}" ], - "node_version": "22.22.1", + "node_version": "22.22.2", "include_headers": false, "platform": "linux_ppc64le" } @@ -1157,46 +1157,46 @@ "attributes": { "node_download_auth": {}, "node_repositories": { - "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" + "22.22.2-darwin_arm64": [ + "node-v22.22.2-darwin-arm64.tar.gz", + "node-v22.22.2-darwin-arm64", + "db4b275b83736df67533529a18cc55de2549a8329ace6c7bcc68f8d22d3c9000" + ], + "22.22.2-darwin_amd64": [ + "node-v22.22.2-darwin-x64.tar.gz", + "node-v22.22.2-darwin-x64", + "12a6abb9c2902cf48a21120da13f87fde1ed1b71a13330712949e8db818708ba" + ], + "22.22.2-linux_arm64": [ + "node-v22.22.2-linux-arm64.tar.xz", + "node-v22.22.2-linux-arm64", + "e9e1930fd321a470e29bb68f30318bf58e3ecb4acb4f1533fb19c58328a091fe" + ], + "22.22.2-linux_ppc64le": [ + "node-v22.22.2-linux-ppc64le.tar.xz", + "node-v22.22.2-linux-ppc64le", + "14045b5a5030d35ca0030fb7e870bd11a651eb9b57323ebc0021e8d78ac6bac9" + ], + "22.22.2-linux_s390x": [ + "node-v22.22.2-linux-s390x.tar.xz", + "node-v22.22.2-linux-s390x", + "9e4a07c291b8949289c6ea8ee61b1d14666a4810feae776a8d1eb1f57e03a2fb" + ], + "22.22.2-linux_amd64": [ + "node-v22.22.2-linux-x64.tar.xz", + "node-v22.22.2-linux-x64", + "88fd1ce767091fd8d4a99fdb2356e98c819f93f3b1f8663853a2dee9b438068a" + ], + "22.22.2-windows_amd64": [ + "node-v22.22.2-win-x64.zip", + "node-v22.22.2-win-x64", + "7c93e9d92bf68c07182b471aa187e35ee6cd08ef0f24ab060dfff605fcc1c57c" ] }, "node_urls": [ "https://nodejs.org/dist/v{version}/{filename}" ], - "node_version": "22.22.1", + "node_version": "22.22.2", "include_headers": false, "platform": "darwin_amd64" } @@ -1206,46 +1206,46 @@ "attributes": { "node_download_auth": {}, "node_repositories": { - "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" + "22.22.2-darwin_arm64": [ + "node-v22.22.2-darwin-arm64.tar.gz", + "node-v22.22.2-darwin-arm64", + "db4b275b83736df67533529a18cc55de2549a8329ace6c7bcc68f8d22d3c9000" + ], + "22.22.2-darwin_amd64": [ + "node-v22.22.2-darwin-x64.tar.gz", + "node-v22.22.2-darwin-x64", + "12a6abb9c2902cf48a21120da13f87fde1ed1b71a13330712949e8db818708ba" + ], + "22.22.2-linux_arm64": [ + "node-v22.22.2-linux-arm64.tar.xz", + "node-v22.22.2-linux-arm64", + "e9e1930fd321a470e29bb68f30318bf58e3ecb4acb4f1533fb19c58328a091fe" + ], + "22.22.2-linux_ppc64le": [ + "node-v22.22.2-linux-ppc64le.tar.xz", + "node-v22.22.2-linux-ppc64le", + "14045b5a5030d35ca0030fb7e870bd11a651eb9b57323ebc0021e8d78ac6bac9" + ], + "22.22.2-linux_s390x": [ + "node-v22.22.2-linux-s390x.tar.xz", + "node-v22.22.2-linux-s390x", + "9e4a07c291b8949289c6ea8ee61b1d14666a4810feae776a8d1eb1f57e03a2fb" + ], + "22.22.2-linux_amd64": [ + "node-v22.22.2-linux-x64.tar.xz", + "node-v22.22.2-linux-x64", + "88fd1ce767091fd8d4a99fdb2356e98c819f93f3b1f8663853a2dee9b438068a" + ], + "22.22.2-windows_amd64": [ + "node-v22.22.2-win-x64.zip", + "node-v22.22.2-win-x64", + "7c93e9d92bf68c07182b471aa187e35ee6cd08ef0f24ab060dfff605fcc1c57c" ] }, "node_urls": [ "https://nodejs.org/dist/v{version}/{filename}" ], - "node_version": "22.22.1", + "node_version": "22.22.2", "include_headers": false, "platform": "darwin_arm64" } @@ -1255,46 +1255,46 @@ "attributes": { "node_download_auth": {}, "node_repositories": { - "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" + "22.22.2-darwin_arm64": [ + "node-v22.22.2-darwin-arm64.tar.gz", + "node-v22.22.2-darwin-arm64", + "db4b275b83736df67533529a18cc55de2549a8329ace6c7bcc68f8d22d3c9000" + ], + "22.22.2-darwin_amd64": [ + "node-v22.22.2-darwin-x64.tar.gz", + "node-v22.22.2-darwin-x64", + "12a6abb9c2902cf48a21120da13f87fde1ed1b71a13330712949e8db818708ba" + ], + "22.22.2-linux_arm64": [ + "node-v22.22.2-linux-arm64.tar.xz", + "node-v22.22.2-linux-arm64", + "e9e1930fd321a470e29bb68f30318bf58e3ecb4acb4f1533fb19c58328a091fe" + ], + "22.22.2-linux_ppc64le": [ + "node-v22.22.2-linux-ppc64le.tar.xz", + "node-v22.22.2-linux-ppc64le", + "14045b5a5030d35ca0030fb7e870bd11a651eb9b57323ebc0021e8d78ac6bac9" + ], + "22.22.2-linux_s390x": [ + "node-v22.22.2-linux-s390x.tar.xz", + "node-v22.22.2-linux-s390x", + "9e4a07c291b8949289c6ea8ee61b1d14666a4810feae776a8d1eb1f57e03a2fb" + ], + "22.22.2-linux_amd64": [ + "node-v22.22.2-linux-x64.tar.xz", + "node-v22.22.2-linux-x64", + "88fd1ce767091fd8d4a99fdb2356e98c819f93f3b1f8663853a2dee9b438068a" + ], + "22.22.2-windows_amd64": [ + "node-v22.22.2-win-x64.zip", + "node-v22.22.2-win-x64", + "7c93e9d92bf68c07182b471aa187e35ee6cd08ef0f24ab060dfff605fcc1c57c" ] }, "node_urls": [ "https://nodejs.org/dist/v{version}/{filename}" ], - "node_version": "22.22.1", + "node_version": "22.22.2", "include_headers": false, "platform": "windows_amd64" } @@ -1304,46 +1304,46 @@ "attributes": { "node_download_auth": {}, "node_repositories": { - "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" + "22.22.2-darwin_arm64": [ + "node-v22.22.2-darwin-arm64.tar.gz", + "node-v22.22.2-darwin-arm64", + "db4b275b83736df67533529a18cc55de2549a8329ace6c7bcc68f8d22d3c9000" + ], + "22.22.2-darwin_amd64": [ + "node-v22.22.2-darwin-x64.tar.gz", + "node-v22.22.2-darwin-x64", + "12a6abb9c2902cf48a21120da13f87fde1ed1b71a13330712949e8db818708ba" + ], + "22.22.2-linux_arm64": [ + "node-v22.22.2-linux-arm64.tar.xz", + "node-v22.22.2-linux-arm64", + "e9e1930fd321a470e29bb68f30318bf58e3ecb4acb4f1533fb19c58328a091fe" + ], + "22.22.2-linux_ppc64le": [ + "node-v22.22.2-linux-ppc64le.tar.xz", + "node-v22.22.2-linux-ppc64le", + "14045b5a5030d35ca0030fb7e870bd11a651eb9b57323ebc0021e8d78ac6bac9" + ], + "22.22.2-linux_s390x": [ + "node-v22.22.2-linux-s390x.tar.xz", + "node-v22.22.2-linux-s390x", + "9e4a07c291b8949289c6ea8ee61b1d14666a4810feae776a8d1eb1f57e03a2fb" + ], + "22.22.2-linux_amd64": [ + "node-v22.22.2-linux-x64.tar.xz", + "node-v22.22.2-linux-x64", + "88fd1ce767091fd8d4a99fdb2356e98c819f93f3b1f8663853a2dee9b438068a" + ], + "22.22.2-windows_amd64": [ + "node-v22.22.2-win-x64.zip", + "node-v22.22.2-win-x64", + "7c93e9d92bf68c07182b471aa187e35ee6cd08ef0f24ab060dfff605fcc1c57c" ] }, "node_urls": [ "https://nodejs.org/dist/v{version}/{filename}" ], - "node_version": "22.22.1", + "node_version": "22.22.2", "include_headers": false, "platform": "windows_arm64" } From 324a598a86da658c72952b42f5a17ce69239cb1f Mon Sep 17 00:00:00 2001 From: Angular Robot <angular-robot@google.com> Date: Thu, 26 Mar 2026 06:01:08 +0000 Subject: [PATCH 177/226] build: update github/codeql-action action to v4.34.1 See associated pull request for more information. --- .github/workflows/codeql.yml | 4 ++-- .github/workflows/scorecard.yml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml index 73124eebf3c9..9c9cda1ad80d 100644 --- a/.github/workflows/codeql.yml +++ b/.github/workflows/codeql.yml @@ -23,12 +23,12 @@ jobs: with: persist-credentials: false - name: Initialize CodeQL - uses: github/codeql-action/init@b1bff81932f5cdfc8695c7752dcee935dcd061c8 # v4.33.0 + uses: github/codeql-action/init@38697555549f1db7851b81482ff19f1fa5c4fedc # v4.34.1 with: languages: javascript-typescript build-mode: none config-file: .github/codeql/config.yml - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@b1bff81932f5cdfc8695c7752dcee935dcd061c8 # v4.33.0 + uses: github/codeql-action/analyze@38697555549f1db7851b81482ff19f1fa5c4fedc # v4.34.1 with: category: '/language:javascript-typescript' diff --git a/.github/workflows/scorecard.yml b/.github/workflows/scorecard.yml index 8ffd6aa43a14..4bdd5339c5b9 100644 --- a/.github/workflows/scorecard.yml +++ b/.github/workflows/scorecard.yml @@ -46,6 +46,6 @@ jobs: # Upload the results to GitHub's code scanning dashboard. - name: 'Upload to code-scanning' - uses: github/codeql-action/upload-sarif@b1bff81932f5cdfc8695c7752dcee935dcd061c8 # v4.33.0 + uses: github/codeql-action/upload-sarif@38697555549f1db7851b81482ff19f1fa5c4fedc # v4.34.1 with: sarif_file: results.sarif From 67c391a18ac417660dd540bd54ecc3482a94eeef Mon Sep 17 00:00:00 2001 From: Angular Robot <angular-robot@google.com> Date: Thu, 26 Mar 2026 12:50:38 +0000 Subject: [PATCH 178/226] build: update cross-repo angular dependencies See associated pull request for more information. --- .../assistant-to-the-branch-manager.yml | 2 +- .github/workflows/ci.yml | 52 +-- .github/workflows/dev-infra.yml | 6 +- .github/workflows/perf.yml | 6 +- .github/workflows/pr.yml | 44 +-- MODULE.bazel | 8 +- modules/testing/builder/package.json | 2 +- package.json | 28 +- packages/angular/build/package.json | 2 +- packages/angular/ssr/package.json | 12 +- .../angular_devkit/build_angular/package.json | 2 +- packages/ngtools/webpack/package.json | 4 +- pnpm-lock.yaml | 341 ++++++++---------- tests/e2e/ng-snapshot/package.json | 32 +- 14 files changed, 252 insertions(+), 289 deletions(-) diff --git a/.github/workflows/assistant-to-the-branch-manager.yml b/.github/workflows/assistant-to-the-branch-manager.yml index 7185b5ef34cb..c624b9aa858e 100644 --- a/.github/workflows/assistant-to-the-branch-manager.yml +++ b/.github/workflows/assistant-to-the-branch-manager.yml @@ -17,6 +17,6 @@ jobs: - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 with: persist-credentials: false - - uses: angular/dev-infra/github-actions/branch-manager@9de194d77b66b6b3294e0f041e29985d2916e911 + - uses: angular/dev-infra/github-actions/branch-manager@2f6d3ae5b1db37b5165f200fb53f30b9330983e4 with: angular-robot-key: ${{ secrets.ANGULAR_ROBOT_PRIVATE_KEY }} diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index b0f5840b16ab..dfadb67edc6a 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -21,9 +21,9 @@ jobs: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@9de194d77b66b6b3294e0f041e29985d2916e911 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@2f6d3ae5b1db37b5165f200fb53f30b9330983e4 - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@9de194d77b66b6b3294e0f041e29985d2916e911 + uses: angular/dev-infra/github-actions/bazel/setup@2f6d3ae5b1db37b5165f200fb53f30b9330983e4 - name: Install node modules run: pnpm install --frozen-lockfile - name: Generate JSON schema types @@ -44,11 +44,11 @@ jobs: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@9de194d77b66b6b3294e0f041e29985d2916e911 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@2f6d3ae5b1db37b5165f200fb53f30b9330983e4 - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@9de194d77b66b6b3294e0f041e29985d2916e911 + uses: angular/dev-infra/github-actions/bazel/setup@2f6d3ae5b1db37b5165f200fb53f30b9330983e4 - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@9de194d77b66b6b3294e0f041e29985d2916e911 + uses: angular/dev-infra/github-actions/bazel/configure-remote@2f6d3ae5b1db37b5165f200fb53f30b9330983e4 with: google_credential: ${{ secrets.RBE_TRUSTED_BUILDS_USER }} - name: Install node modules @@ -61,11 +61,11 @@ jobs: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@9de194d77b66b6b3294e0f041e29985d2916e911 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@2f6d3ae5b1db37b5165f200fb53f30b9330983e4 - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@9de194d77b66b6b3294e0f041e29985d2916e911 + uses: angular/dev-infra/github-actions/bazel/setup@2f6d3ae5b1db37b5165f200fb53f30b9330983e4 - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@9de194d77b66b6b3294e0f041e29985d2916e911 + uses: angular/dev-infra/github-actions/bazel/configure-remote@2f6d3ae5b1db37b5165f200fb53f30b9330983e4 with: google_credential: ${{ secrets.RBE_TRUSTED_BUILDS_USER }} - name: Install node modules @@ -84,13 +84,13 @@ jobs: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@9de194d77b66b6b3294e0f041e29985d2916e911 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@2f6d3ae5b1db37b5165f200fb53f30b9330983e4 - name: Install node modules run: pnpm install --frozen-lockfile - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@9de194d77b66b6b3294e0f041e29985d2916e911 + uses: angular/dev-infra/github-actions/bazel/setup@2f6d3ae5b1db37b5165f200fb53f30b9330983e4 - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@9de194d77b66b6b3294e0f041e29985d2916e911 + uses: angular/dev-infra/github-actions/bazel/configure-remote@2f6d3ae5b1db37b5165f200fb53f30b9330983e4 with: google_credential: ${{ secrets.RBE_TRUSTED_BUILDS_USER }} - name: Run CLI E2E tests @@ -100,11 +100,11 @@ jobs: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@9de194d77b66b6b3294e0f041e29985d2916e911 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@2f6d3ae5b1db37b5165f200fb53f30b9330983e4 - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@9de194d77b66b6b3294e0f041e29985d2916e911 + uses: angular/dev-infra/github-actions/bazel/setup@2f6d3ae5b1db37b5165f200fb53f30b9330983e4 - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@9de194d77b66b6b3294e0f041e29985d2916e911 + uses: angular/dev-infra/github-actions/bazel/configure-remote@2f6d3ae5b1db37b5165f200fb53f30b9330983e4 with: google_credential: ${{ secrets.RBE_TRUSTED_BUILDS_USER }} - name: Install node modules @@ -137,7 +137,7 @@ jobs: runs-on: windows-2025 steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@9de194d77b66b6b3294e0f041e29985d2916e911 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@2f6d3ae5b1db37b5165f200fb53f30b9330983e4 - name: Install node modules run: pnpm install --frozen-lockfile - name: Download built Windows E2E tests @@ -164,13 +164,13 @@ jobs: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@9de194d77b66b6b3294e0f041e29985d2916e911 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@2f6d3ae5b1db37b5165f200fb53f30b9330983e4 - name: Install node modules run: pnpm install --frozen-lockfile - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@9de194d77b66b6b3294e0f041e29985d2916e911 + uses: angular/dev-infra/github-actions/bazel/setup@2f6d3ae5b1db37b5165f200fb53f30b9330983e4 - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@9de194d77b66b6b3294e0f041e29985d2916e911 + uses: angular/dev-infra/github-actions/bazel/configure-remote@2f6d3ae5b1db37b5165f200fb53f30b9330983e4 with: google_credential: ${{ secrets.RBE_TRUSTED_BUILDS_USER }} - name: Run CLI E2E tests @@ -188,13 +188,13 @@ jobs: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@9de194d77b66b6b3294e0f041e29985d2916e911 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@2f6d3ae5b1db37b5165f200fb53f30b9330983e4 - name: Install node modules run: pnpm install --frozen-lockfile - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@9de194d77b66b6b3294e0f041e29985d2916e911 + uses: angular/dev-infra/github-actions/bazel/setup@2f6d3ae5b1db37b5165f200fb53f30b9330983e4 - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@9de194d77b66b6b3294e0f041e29985d2916e911 + uses: angular/dev-infra/github-actions/bazel/configure-remote@2f6d3ae5b1db37b5165f200fb53f30b9330983e4 with: google_credential: ${{ secrets.RBE_TRUSTED_BUILDS_USER }} - name: Run CLI E2E tests @@ -208,13 +208,13 @@ jobs: SAUCE_TUNNEL_IDENTIFIER: angular-cli-${{ github.workflow }}-${{ github.run_number }} steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@9de194d77b66b6b3294e0f041e29985d2916e911 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@2f6d3ae5b1db37b5165f200fb53f30b9330983e4 - name: Install node modules run: pnpm install --frozen-lockfile - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@9de194d77b66b6b3294e0f041e29985d2916e911 + uses: angular/dev-infra/github-actions/bazel/setup@2f6d3ae5b1db37b5165f200fb53f30b9330983e4 - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@9de194d77b66b6b3294e0f041e29985d2916e911 + uses: angular/dev-infra/github-actions/bazel/configure-remote@2f6d3ae5b1db37b5165f200fb53f30b9330983e4 with: google_credential: ${{ secrets.RBE_TRUSTED_BUILDS_USER }} - name: Run E2E Browser tests @@ -244,11 +244,11 @@ jobs: CIRCLE_BRANCH: ${{ github.ref_name }} steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@9de194d77b66b6b3294e0f041e29985d2916e911 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@2f6d3ae5b1db37b5165f200fb53f30b9330983e4 - name: Install node modules run: pnpm install --frozen-lockfile - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@9de194d77b66b6b3294e0f041e29985d2916e911 + uses: angular/dev-infra/github-actions/bazel/setup@2f6d3ae5b1db37b5165f200fb53f30b9330983e4 - run: pnpm admin snapshots --verbose env: SNAPSHOT_BUILDS_GITHUB_TOKEN: ${{ secrets.SNAPSHOT_BUILDS_GITHUB_TOKEN }} diff --git a/.github/workflows/dev-infra.yml b/.github/workflows/dev-infra.yml index 2d888480ccc2..9451bdbf330f 100644 --- a/.github/workflows/dev-infra.yml +++ b/.github/workflows/dev-infra.yml @@ -15,21 +15,21 @@ jobs: if: github.event_name == 'pull_request_target' runs-on: ubuntu-latest steps: - - uses: angular/dev-infra/github-actions/labeling/pull-request@9de194d77b66b6b3294e0f041e29985d2916e911 + - uses: angular/dev-infra/github-actions/labeling/pull-request@2f6d3ae5b1db37b5165f200fb53f30b9330983e4 with: angular-robot-key: ${{ secrets.ANGULAR_ROBOT_PRIVATE_KEY }} post_approval_changes: if: github.event_name == 'pull_request_target' runs-on: ubuntu-latest steps: - - uses: angular/dev-infra/github-actions/post-approval-changes@9de194d77b66b6b3294e0f041e29985d2916e911 + - uses: angular/dev-infra/github-actions/post-approval-changes@2f6d3ae5b1db37b5165f200fb53f30b9330983e4 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@9de194d77b66b6b3294e0f041e29985d2916e911 + - uses: angular/dev-infra/github-actions/labeling/issue@2f6d3ae5b1db37b5165f200fb53f30b9330983e4 with: angular-robot-key: ${{ secrets.ANGULAR_ROBOT_PRIVATE_KEY }} google-generative-ai-key: ${{ secrets.GOOGLE_GENERATIVE_AI_KEY }} diff --git a/.github/workflows/perf.yml b/.github/workflows/perf.yml index e900eb9c6e38..7591c75d92b3 100644 --- a/.github/workflows/perf.yml +++ b/.github/workflows/perf.yml @@ -23,7 +23,7 @@ jobs: workflows: ${{ steps.workflows.outputs.workflows }} steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@9de194d77b66b6b3294e0f041e29985d2916e911 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@2f6d3ae5b1db37b5165f200fb53f30b9330983e4 - name: Install node modules run: pnpm install --frozen-lockfile - id: workflows @@ -38,9 +38,9 @@ jobs: workflow: ${{ fromJSON(needs.list.outputs.workflows) }} steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@9de194d77b66b6b3294e0f041e29985d2916e911 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@2f6d3ae5b1db37b5165f200fb53f30b9330983e4 - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@9de194d77b66b6b3294e0f041e29985d2916e911 + uses: angular/dev-infra/github-actions/bazel/setup@2f6d3ae5b1db37b5165f200fb53f30b9330983e4 - name: Install node modules run: pnpm install --frozen-lockfile # We utilize the google-github-actions/auth action to allow us to get an active credential using workflow diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml index f432be2c9863..898960b9e0ed 100644 --- a/.github/workflows/pr.yml +++ b/.github/workflows/pr.yml @@ -34,9 +34,9 @@ jobs: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@9de194d77b66b6b3294e0f041e29985d2916e911 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@2f6d3ae5b1db37b5165f200fb53f30b9330983e4 - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@9de194d77b66b6b3294e0f041e29985d2916e911 + uses: angular/dev-infra/github-actions/bazel/setup@2f6d3ae5b1db37b5165f200fb53f30b9330983e4 - name: Setup ESLint Caching uses: actions/cache@668228422ae6a00e4ad889ee87cd7109ec5666a7 # v5.0.4 with: @@ -66,17 +66,17 @@ jobs: # it has been merged. run: pnpm ng-dev format changed --check ${{ github.event.pull_request.base.sha }} - name: Check Package Licenses - uses: angular/dev-infra/github-actions/linting/licenses@9de194d77b66b6b3294e0f041e29985d2916e911 + uses: angular/dev-infra/github-actions/linting/licenses@2f6d3ae5b1db37b5165f200fb53f30b9330983e4 build: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@9de194d77b66b6b3294e0f041e29985d2916e911 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@2f6d3ae5b1db37b5165f200fb53f30b9330983e4 - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@9de194d77b66b6b3294e0f041e29985d2916e911 + uses: angular/dev-infra/github-actions/bazel/setup@2f6d3ae5b1db37b5165f200fb53f30b9330983e4 - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@9de194d77b66b6b3294e0f041e29985d2916e911 + uses: angular/dev-infra/github-actions/bazel/configure-remote@2f6d3ae5b1db37b5165f200fb53f30b9330983e4 - name: Install node modules run: pnpm install --frozen-lockfile - name: Build release targets @@ -93,11 +93,11 @@ jobs: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@9de194d77b66b6b3294e0f041e29985d2916e911 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@2f6d3ae5b1db37b5165f200fb53f30b9330983e4 - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@9de194d77b66b6b3294e0f041e29985d2916e911 + uses: angular/dev-infra/github-actions/bazel/setup@2f6d3ae5b1db37b5165f200fb53f30b9330983e4 - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@9de194d77b66b6b3294e0f041e29985d2916e911 + uses: angular/dev-infra/github-actions/bazel/configure-remote@2f6d3ae5b1db37b5165f200fb53f30b9330983e4 - name: Install node modules run: pnpm install --frozen-lockfile - name: Run module and package tests @@ -114,13 +114,13 @@ jobs: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@9de194d77b66b6b3294e0f041e29985d2916e911 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@2f6d3ae5b1db37b5165f200fb53f30b9330983e4 - name: Install node modules run: pnpm install --frozen-lockfile - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@9de194d77b66b6b3294e0f041e29985d2916e911 + uses: angular/dev-infra/github-actions/bazel/setup@2f6d3ae5b1db37b5165f200fb53f30b9330983e4 - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@9de194d77b66b6b3294e0f041e29985d2916e911 + uses: angular/dev-infra/github-actions/bazel/configure-remote@2f6d3ae5b1db37b5165f200fb53f30b9330983e4 - name: Run CLI E2E tests run: pnpm bazel test --test_env=E2E_SHARD_TOTAL=6 --test_env=E2E_SHARD_INDEX=${{ matrix.shard }} --config=e2e //tests:e2e.${{ matrix.subset }}_node${{ matrix.node }} @@ -128,11 +128,11 @@ jobs: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@9de194d77b66b6b3294e0f041e29985d2916e911 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@2f6d3ae5b1db37b5165f200fb53f30b9330983e4 - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@9de194d77b66b6b3294e0f041e29985d2916e911 + uses: angular/dev-infra/github-actions/bazel/setup@2f6d3ae5b1db37b5165f200fb53f30b9330983e4 - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@9de194d77b66b6b3294e0f041e29985d2916e911 + uses: angular/dev-infra/github-actions/bazel/configure-remote@2f6d3ae5b1db37b5165f200fb53f30b9330983e4 - name: Install node modules run: pnpm install --frozen-lockfile - name: Build E2E tests for Windows on Linux @@ -156,7 +156,7 @@ jobs: runs-on: windows-2025 steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@9de194d77b66b6b3294e0f041e29985d2916e911 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@2f6d3ae5b1db37b5165f200fb53f30b9330983e4 - name: Install node modules run: pnpm install --frozen-lockfile - name: Download built Windows E2E tests @@ -183,13 +183,13 @@ jobs: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@9de194d77b66b6b3294e0f041e29985d2916e911 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@2f6d3ae5b1db37b5165f200fb53f30b9330983e4 - name: Install node modules run: pnpm install --frozen-lockfile - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@9de194d77b66b6b3294e0f041e29985d2916e911 + uses: angular/dev-infra/github-actions/bazel/setup@2f6d3ae5b1db37b5165f200fb53f30b9330983e4 - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@9de194d77b66b6b3294e0f041e29985d2916e911 + uses: angular/dev-infra/github-actions/bazel/configure-remote@2f6d3ae5b1db37b5165f200fb53f30b9330983e4 - name: Run CLI E2E tests run: pnpm bazel test --test_env=E2E_SHARD_TOTAL=3 --test_env=E2E_SHARD_INDEX=${{ matrix.shard }} --config=e2e //tests:e2e.${{ matrix.subset }}_node${{ matrix.node }} @@ -205,12 +205,12 @@ jobs: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@9de194d77b66b6b3294e0f041e29985d2916e911 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@2f6d3ae5b1db37b5165f200fb53f30b9330983e4 - name: Install node modules run: pnpm install --frozen-lockfile - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@9de194d77b66b6b3294e0f041e29985d2916e911 + uses: angular/dev-infra/github-actions/bazel/setup@2f6d3ae5b1db37b5165f200fb53f30b9330983e4 - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@9de194d77b66b6b3294e0f041e29985d2916e911 + uses: angular/dev-infra/github-actions/bazel/configure-remote@2f6d3ae5b1db37b5165f200fb53f30b9330983e4 - name: Run CLI E2E tests run: pnpm bazel test --test_env=E2E_SHARD_TOTAL=6 --test_env=E2E_SHARD_INDEX=${{ matrix.shard }} --config=e2e //tests:e2e.snapshots.${{ matrix.subset }}_node${{ matrix.node }} diff --git a/MODULE.bazel b/MODULE.bazel index fc8d9300638b..7be5cc381d64 100644 --- a/MODULE.bazel +++ b/MODULE.bazel @@ -19,28 +19,28 @@ bazel_dep(name = "aspect_rules_jasmine", version = "2.0.4") bazel_dep(name = "rules_angular") git_override( module_name = "rules_angular", - commit = "cc27b644546c1b8f680f3e5a1000f7a127eef13b", + commit = "af626f77ad610d1a9c47ee317af88e2c8edd66a4", remote = "https://github.com/angular/rules_angular.git", ) bazel_dep(name = "devinfra") git_override( module_name = "devinfra", - commit = "9de194d77b66b6b3294e0f041e29985d2916e911", + commit = "2f6d3ae5b1db37b5165f200fb53f30b9330983e4", remote = "https://github.com/angular/dev-infra.git", ) bazel_dep(name = "rules_sass") git_override( module_name = "rules_sass", - commit = "6c5490b4da59c283f7d4a48f68615a513a352b10", + commit = "13918bec49cd183a591e3781d1d08044b4aa9f61", remote = "https://github.com/angular/rules_sass.git", ) bazel_dep(name = "rules_browsers") git_override( module_name = "rules_browsers", - commit = "79771c96882a2aa5ad8a2311e858e1c9eddf786a", + commit = "46029652792eac7bb51b6abd04503af296db70ea", remote = "https://github.com/angular/rules_browsers.git", ) diff --git a/modules/testing/builder/package.json b/modules/testing/builder/package.json index 208af538e912..e38ee5f1b927 100644 --- a/modules/testing/builder/package.json +++ b/modules/testing/builder/package.json @@ -7,7 +7,7 @@ "@vitest/coverage-v8": "4.1.0", "browser-sync": "3.0.4", "jsdom": "29.0.1", - "ng-packagr": "22.0.0-next.0", + "ng-packagr": "22.0.0-next.1", "rxjs": "7.8.2", "vitest": "4.1.0" } diff --git a/package.json b/package.json index 5ca4aae2762a..c28d3e12e0e5 100644 --- a/package.json +++ b/package.json @@ -42,20 +42,20 @@ }, "homepage": "https://github.com/angular/angular-cli", "devDependencies": { - "@angular/animations": "22.0.0-next.3", - "@angular/cdk": "22.0.0-next.0", - "@angular/common": "22.0.0-next.3", - "@angular/compiler": "22.0.0-next.3", - "@angular/compiler-cli": "22.0.0-next.3", - "@angular/core": "22.0.0-next.3", - "@angular/forms": "22.0.0-next.3", - "@angular/localize": "22.0.0-next.3", - "@angular/material": "22.0.0-next.0", - "@angular/ng-dev": "https://github.com/angular/dev-infra-private-ng-dev-builds.git#ae3393e8549a472a9fb199222eeebb387b5769e6", - "@angular/platform-browser": "22.0.0-next.3", - "@angular/platform-server": "22.0.0-next.3", - "@angular/router": "22.0.0-next.3", - "@angular/service-worker": "22.0.0-next.3", + "@angular/animations": "22.0.0-next.5", + "@angular/cdk": "22.0.0-next.2", + "@angular/common": "22.0.0-next.5", + "@angular/compiler": "22.0.0-next.5", + "@angular/compiler-cli": "22.0.0-next.5", + "@angular/core": "22.0.0-next.5", + "@angular/forms": "22.0.0-next.5", + "@angular/localize": "22.0.0-next.5", + "@angular/material": "22.0.0-next.2", + "@angular/ng-dev": "https://github.com/angular/dev-infra-private-ng-dev-builds.git#88dbc0543ffbc4df720ac87c0d413fab45ea1491", + "@angular/platform-browser": "22.0.0-next.5", + "@angular/platform-server": "22.0.0-next.5", + "@angular/router": "22.0.0-next.5", + "@angular/service-worker": "22.0.0-next.5", "@babel/core": "7.29.0", "@bazel/bazelisk": "1.28.1", "@bazel/buildifier": "8.2.1", diff --git a/packages/angular/build/package.json b/packages/angular/build/package.json index 0f1cb12de94f..c68c14ea1193 100644 --- a/packages/angular/build/package.json +++ b/packages/angular/build/package.json @@ -53,7 +53,7 @@ "@angular/ssr": "workspace:*", "jsdom": "29.0.1", "less": "4.6.4", - "ng-packagr": "22.0.0-next.0", + "ng-packagr": "22.0.0-next.1", "postcss": "8.5.8", "rxjs": "7.8.2", "vitest": "4.1.0" diff --git a/packages/angular/ssr/package.json b/packages/angular/ssr/package.json index 0d27e982bfe4..d5f32bf046c8 100644 --- a/packages/angular/ssr/package.json +++ b/packages/angular/ssr/package.json @@ -29,12 +29,12 @@ }, "devDependencies": { "@angular-devkit/schematics": "workspace:*", - "@angular/common": "22.0.0-next.3", - "@angular/compiler": "22.0.0-next.3", - "@angular/core": "22.0.0-next.3", - "@angular/platform-browser": "22.0.0-next.3", - "@angular/platform-server": "22.0.0-next.3", - "@angular/router": "22.0.0-next.3", + "@angular/common": "22.0.0-next.5", + "@angular/compiler": "22.0.0-next.5", + "@angular/core": "22.0.0-next.5", + "@angular/platform-browser": "22.0.0-next.5", + "@angular/platform-server": "22.0.0-next.5", + "@angular/router": "22.0.0-next.5", "@schematics/angular": "workspace:*", "beasties": "0.4.1" }, diff --git a/packages/angular_devkit/build_angular/package.json b/packages/angular_devkit/build_angular/package.json index f578f1fc6f2a..c837b2883ead 100644 --- a/packages/angular_devkit/build_angular/package.json +++ b/packages/angular_devkit/build_angular/package.json @@ -66,7 +66,7 @@ "devDependencies": { "@angular/ssr": "workspace:*", "browser-sync": "3.0.4", - "ng-packagr": "22.0.0-next.0", + "ng-packagr": "22.0.0-next.1", "undici": "7.24.5" }, "peerDependencies": { diff --git a/packages/ngtools/webpack/package.json b/packages/ngtools/webpack/package.json index 5cf8f0089501..8052db75c046 100644 --- a/packages/ngtools/webpack/package.json +++ b/packages/ngtools/webpack/package.json @@ -27,8 +27,8 @@ }, "devDependencies": { "@angular-devkit/core": "workspace:0.0.0-PLACEHOLDER", - "@angular/compiler": "22.0.0-next.3", - "@angular/compiler-cli": "22.0.0-next.3", + "@angular/compiler": "22.0.0-next.5", + "@angular/compiler-cli": "22.0.0-next.5", "typescript": "6.0.2", "webpack": "5.105.4" } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index a7f65f0ebf05..2fed38c67ef5 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -20,47 +20,47 @@ importers: built: true devDependencies: '@angular/animations': - specifier: 22.0.0-next.3 - version: 22.0.0-next.3(@angular/core@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1)) + specifier: 22.0.0-next.5 + version: 22.0.0-next.5(@angular/core@22.0.0-next.5(@angular/compiler@22.0.0-next.5)(rxjs@7.8.2)(zone.js@0.16.1)) '@angular/cdk': - specifier: 22.0.0-next.0 - version: 22.0.0-next.0(@angular/common@22.0.0-next.3(@angular/core@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@22.0.0-next.3(@angular/animations@22.0.0-next.3(@angular/core@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@22.0.0-next.3(@angular/core@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1)))(rxjs@7.8.2) + specifier: 22.0.0-next.2 + version: 22.0.0-next.2(@angular/common@22.0.0-next.5(@angular/core@22.0.0-next.5(@angular/compiler@22.0.0-next.5)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.5(@angular/compiler@22.0.0-next.5)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@22.0.0-next.5(@angular/animations@22.0.0-next.5(@angular/core@22.0.0-next.5(@angular/compiler@22.0.0-next.5)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@22.0.0-next.5(@angular/core@22.0.0-next.5(@angular/compiler@22.0.0-next.5)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.5(@angular/compiler@22.0.0-next.5)(rxjs@7.8.2)(zone.js@0.16.1)))(rxjs@7.8.2) '@angular/common': - specifier: 22.0.0-next.3 - version: 22.0.0-next.3(@angular/core@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2) + specifier: 22.0.0-next.5 + version: 22.0.0-next.5(@angular/core@22.0.0-next.5(@angular/compiler@22.0.0-next.5)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2) '@angular/compiler': - specifier: 22.0.0-next.3 - version: 22.0.0-next.3 + specifier: 22.0.0-next.5 + version: 22.0.0-next.5 '@angular/compiler-cli': - specifier: 22.0.0-next.3 - version: 22.0.0-next.3(@angular/compiler@22.0.0-next.3)(typescript@6.0.2) + specifier: 22.0.0-next.5 + version: 22.0.0-next.5(@angular/compiler@22.0.0-next.5)(typescript@6.0.2) '@angular/core': - specifier: 22.0.0-next.3 - version: 22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1) + specifier: 22.0.0-next.5 + version: 22.0.0-next.5(@angular/compiler@22.0.0-next.5)(rxjs@7.8.2)(zone.js@0.16.1) '@angular/forms': - specifier: 22.0.0-next.3 - version: 22.0.0-next.3(@angular/common@22.0.0-next.3(@angular/core@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@22.0.0-next.3(@angular/animations@22.0.0-next.3(@angular/core@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@22.0.0-next.3(@angular/core@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1)))(rxjs@7.8.2) + specifier: 22.0.0-next.5 + version: 22.0.0-next.5(@angular/common@22.0.0-next.5(@angular/core@22.0.0-next.5(@angular/compiler@22.0.0-next.5)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.5(@angular/compiler@22.0.0-next.5)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@22.0.0-next.5(@angular/animations@22.0.0-next.5(@angular/core@22.0.0-next.5(@angular/compiler@22.0.0-next.5)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@22.0.0-next.5(@angular/core@22.0.0-next.5(@angular/compiler@22.0.0-next.5)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.5(@angular/compiler@22.0.0-next.5)(rxjs@7.8.2)(zone.js@0.16.1)))(rxjs@7.8.2) '@angular/localize': - specifier: 22.0.0-next.3 - version: 22.0.0-next.3(@angular/compiler-cli@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(typescript@6.0.2))(@angular/compiler@22.0.0-next.3) + specifier: 22.0.0-next.5 + version: 22.0.0-next.5(@angular/compiler-cli@22.0.0-next.5(@angular/compiler@22.0.0-next.5)(typescript@6.0.2))(@angular/compiler@22.0.0-next.5) '@angular/material': - specifier: 22.0.0-next.0 - version: 22.0.0-next.0(2d75345887a5a4c2bc113233c009d4e6) + specifier: 22.0.0-next.2 + version: 22.0.0-next.2(2f6ce0790131a0100070320bdabac3a2) '@angular/ng-dev': - specifier: https://github.com/angular/dev-infra-private-ng-dev-builds.git#ae3393e8549a472a9fb199222eeebb387b5769e6 - version: https://codeload.github.com/angular/dev-infra-private-ng-dev-builds/tar.gz/ae3393e8549a472a9fb199222eeebb387b5769e6(@modelcontextprotocol/sdk@1.27.1(zod@4.3.6)) + specifier: https://github.com/angular/dev-infra-private-ng-dev-builds.git#88dbc0543ffbc4df720ac87c0d413fab45ea1491 + version: https://codeload.github.com/angular/dev-infra-private-ng-dev-builds/tar.gz/88dbc0543ffbc4df720ac87c0d413fab45ea1491(@modelcontextprotocol/sdk@1.27.1(zod@4.3.6)) '@angular/platform-browser': - specifier: 22.0.0-next.3 - version: 22.0.0-next.3(@angular/animations@22.0.0-next.3(@angular/core@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@22.0.0-next.3(@angular/core@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1)) + specifier: 22.0.0-next.5 + version: 22.0.0-next.5(@angular/animations@22.0.0-next.5(@angular/core@22.0.0-next.5(@angular/compiler@22.0.0-next.5)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@22.0.0-next.5(@angular/core@22.0.0-next.5(@angular/compiler@22.0.0-next.5)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.5(@angular/compiler@22.0.0-next.5)(rxjs@7.8.2)(zone.js@0.16.1)) '@angular/platform-server': - specifier: 22.0.0-next.3 - version: 22.0.0-next.3(@angular/common@22.0.0-next.3(@angular/core@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/compiler@22.0.0-next.3)(@angular/core@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@22.0.0-next.3(@angular/animations@22.0.0-next.3(@angular/core@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@22.0.0-next.3(@angular/core@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1)))(rxjs@7.8.2) + specifier: 22.0.0-next.5 + version: 22.0.0-next.5(@angular/common@22.0.0-next.5(@angular/core@22.0.0-next.5(@angular/compiler@22.0.0-next.5)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/compiler@22.0.0-next.5)(@angular/core@22.0.0-next.5(@angular/compiler@22.0.0-next.5)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@22.0.0-next.5(@angular/animations@22.0.0-next.5(@angular/core@22.0.0-next.5(@angular/compiler@22.0.0-next.5)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@22.0.0-next.5(@angular/core@22.0.0-next.5(@angular/compiler@22.0.0-next.5)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.5(@angular/compiler@22.0.0-next.5)(rxjs@7.8.2)(zone.js@0.16.1)))(rxjs@7.8.2) '@angular/router': - specifier: 22.0.0-next.3 - version: 22.0.0-next.3(@angular/common@22.0.0-next.3(@angular/core@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@22.0.0-next.3(@angular/animations@22.0.0-next.3(@angular/core@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@22.0.0-next.3(@angular/core@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1)))(rxjs@7.8.2) + specifier: 22.0.0-next.5 + version: 22.0.0-next.5(@angular/common@22.0.0-next.5(@angular/core@22.0.0-next.5(@angular/compiler@22.0.0-next.5)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.5(@angular/compiler@22.0.0-next.5)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@22.0.0-next.5(@angular/animations@22.0.0-next.5(@angular/core@22.0.0-next.5(@angular/compiler@22.0.0-next.5)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@22.0.0-next.5(@angular/core@22.0.0-next.5(@angular/compiler@22.0.0-next.5)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.5(@angular/compiler@22.0.0-next.5)(rxjs@7.8.2)(zone.js@0.16.1)))(rxjs@7.8.2) '@angular/service-worker': - specifier: 22.0.0-next.3 - version: 22.0.0-next.3(@angular/core@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2) + specifier: 22.0.0-next.5 + version: 22.0.0-next.5(@angular/core@22.0.0-next.5(@angular/compiler@22.0.0-next.5)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2) '@babel/core': specifier: 7.29.0 version: 7.29.0 @@ -320,8 +320,8 @@ importers: specifier: 29.0.1 version: 29.0.1 ng-packagr: - specifier: 22.0.0-next.0 - version: 22.0.0-next.0(@angular/compiler-cli@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(typescript@6.0.2))(tslib@2.8.1)(typescript@6.0.2) + specifier: 22.0.0-next.1 + version: 22.0.0-next.1(@angular/compiler-cli@22.0.0-next.5(@angular/compiler@22.0.0-next.5)(typescript@6.0.2))(tslib@2.8.1)(typescript@6.0.2) rxjs: specifier: 7.8.2 version: 7.8.2 @@ -423,8 +423,8 @@ importers: specifier: 4.6.4 version: 4.6.4 ng-packagr: - specifier: 22.0.0-next.0 - version: 22.0.0-next.0(@angular/compiler-cli@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(typescript@6.0.2))(tslib@2.8.1)(typescript@6.0.2) + specifier: 22.0.0-next.1 + version: 22.0.0-next.1(@angular/compiler-cli@22.0.0-next.5(@angular/compiler@22.0.0-next.5)(typescript@6.0.2))(tslib@2.8.1)(typescript@6.0.2) postcss: specifier: 8.5.8 version: 8.5.8 @@ -518,23 +518,23 @@ importers: specifier: workspace:* version: link:../../angular_devkit/schematics '@angular/common': - specifier: 22.0.0-next.3 - version: 22.0.0-next.3(@angular/core@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2) + specifier: 22.0.0-next.5 + version: 22.0.0-next.5(@angular/core@22.0.0-next.5(@angular/compiler@22.0.0-next.5)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2) '@angular/compiler': - specifier: 22.0.0-next.3 - version: 22.0.0-next.3 + specifier: 22.0.0-next.5 + version: 22.0.0-next.5 '@angular/core': - specifier: 22.0.0-next.3 - version: 22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1) + specifier: 22.0.0-next.5 + version: 22.0.0-next.5(@angular/compiler@22.0.0-next.5)(rxjs@7.8.2)(zone.js@0.16.1) '@angular/platform-browser': - specifier: 22.0.0-next.3 - version: 22.0.0-next.3(@angular/animations@22.0.0-next.3(@angular/core@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@22.0.0-next.3(@angular/core@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1)) + specifier: 22.0.0-next.5 + version: 22.0.0-next.5(@angular/animations@22.0.0-next.5(@angular/core@22.0.0-next.5(@angular/compiler@22.0.0-next.5)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@22.0.0-next.5(@angular/core@22.0.0-next.5(@angular/compiler@22.0.0-next.5)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.5(@angular/compiler@22.0.0-next.5)(rxjs@7.8.2)(zone.js@0.16.1)) '@angular/platform-server': - specifier: 22.0.0-next.3 - version: 22.0.0-next.3(@angular/common@22.0.0-next.3(@angular/core@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/compiler@22.0.0-next.3)(@angular/core@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@22.0.0-next.3(@angular/animations@22.0.0-next.3(@angular/core@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@22.0.0-next.3(@angular/core@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1)))(rxjs@7.8.2) + specifier: 22.0.0-next.5 + version: 22.0.0-next.5(@angular/common@22.0.0-next.5(@angular/core@22.0.0-next.5(@angular/compiler@22.0.0-next.5)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/compiler@22.0.0-next.5)(@angular/core@22.0.0-next.5(@angular/compiler@22.0.0-next.5)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@22.0.0-next.5(@angular/animations@22.0.0-next.5(@angular/core@22.0.0-next.5(@angular/compiler@22.0.0-next.5)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@22.0.0-next.5(@angular/core@22.0.0-next.5(@angular/compiler@22.0.0-next.5)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.5(@angular/compiler@22.0.0-next.5)(rxjs@7.8.2)(zone.js@0.16.1)))(rxjs@7.8.2) '@angular/router': - specifier: 22.0.0-next.3 - version: 22.0.0-next.3(@angular/common@22.0.0-next.3(@angular/core@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@22.0.0-next.3(@angular/animations@22.0.0-next.3(@angular/core@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@22.0.0-next.3(@angular/core@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1)))(rxjs@7.8.2) + specifier: 22.0.0-next.5 + version: 22.0.0-next.5(@angular/common@22.0.0-next.5(@angular/core@22.0.0-next.5(@angular/compiler@22.0.0-next.5)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.5(@angular/compiler@22.0.0-next.5)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@22.0.0-next.5(@angular/animations@22.0.0-next.5(@angular/core@22.0.0-next.5(@angular/compiler@22.0.0-next.5)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@22.0.0-next.5(@angular/core@22.0.0-next.5(@angular/compiler@22.0.0-next.5)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.5(@angular/compiler@22.0.0-next.5)(rxjs@7.8.2)(zone.js@0.16.1)))(rxjs@7.8.2) '@schematics/angular': specifier: workspace:* version: link:../../schematics/angular @@ -720,8 +720,8 @@ importers: specifier: 3.0.4 version: 3.0.4(bufferutil@4.1.0)(utf-8-validate@6.0.6) ng-packagr: - specifier: 22.0.0-next.0 - version: 22.0.0-next.0(@angular/compiler-cli@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(typescript@6.0.2))(tslib@2.8.1)(typescript@6.0.2) + specifier: 22.0.0-next.1 + version: 22.0.0-next.1(@angular/compiler-cli@22.0.0-next.5(@angular/compiler@22.0.0-next.5)(typescript@6.0.2))(tslib@2.8.1)(typescript@6.0.2) undici: specifier: 7.24.5 version: 7.24.5 @@ -813,11 +813,11 @@ importers: specifier: workspace:0.0.0-PLACEHOLDER version: link:../../angular_devkit/core '@angular/compiler': - specifier: 22.0.0-next.3 - version: 22.0.0-next.3 + specifier: 22.0.0-next.5 + version: 22.0.0-next.5 '@angular/compiler-cli': - specifier: 22.0.0-next.3 - version: 22.0.0-next.3(@angular/compiler@22.0.0-next.3)(typescript@6.0.2) + specifier: 22.0.0-next.5 + version: 22.0.0-next.5(@angular/compiler@22.0.0-next.5)(typescript@6.0.2) typescript: specifier: 6.0.2 version: 6.0.2 @@ -923,47 +923,47 @@ packages: resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} engines: {node: '>=6.0.0'} - '@angular/animations@22.0.0-next.3': - resolution: {integrity: sha512-xrlr33kLDHmcBq0VzFGVmRUgpezFaO55UkUSVdU2hgeRdFLaQ2R8tmxB3nRJRZWsTM4z2pqjl5+VFcmUtip9VQ==} + '@angular/animations@22.0.0-next.5': + resolution: {integrity: sha512-edwiwKOv1eF5NcjPpZYWOZw4sAlNzDROUEVR5+ZYA0HRXR78hXZi/cIsdipd8wdNtVZfUrB+jYQtIo/KSZCPEw==} engines: {node: ^22.22.0 || >=24.13.1} peerDependencies: - '@angular/core': 22.0.0-next.3 + '@angular/core': 22.0.0-next.5 - '@angular/cdk@22.0.0-next.0': - resolution: {integrity: sha512-ca6pMpN9tAupIyr8LDaqpVlBN9beGL91unXH95pGfsngTCWcz7mh3IYVQ2CJ24e9O+2Lp/gtLYhvzOpIUpiV3A==} + '@angular/cdk@22.0.0-next.2': + resolution: {integrity: sha512-X6dPo2s453Tpl3KTF/7cPpxehnFU4XcgdDFfhnDWqxc/CNWdNTAeFfGetFi8hWkBOftvZ6VNrL4w8u0CLOuEBg==} peerDependencies: '@angular/common': ^22.0.0-0 || ^22.1.0-0 || ^22.2.0-0 || ^22.3.0-0 || ^23.0.0-0 '@angular/core': ^22.0.0-0 || ^22.1.0-0 || ^22.2.0-0 || ^22.3.0-0 || ^23.0.0-0 '@angular/platform-browser': ^22.0.0-0 || ^22.1.0-0 || ^22.2.0-0 || ^22.3.0-0 || ^23.0.0-0 rxjs: ^6.5.3 || ^7.4.0 - '@angular/common@22.0.0-next.3': - resolution: {integrity: sha512-nbk6G9lId68X1JJ2XDLzAzeQYnMqfW+5A9k2Q98MltEGxX6By2yyKr4//Eycg4mhs8X7LTLK/kx4QxItSK161w==} + '@angular/common@22.0.0-next.5': + resolution: {integrity: sha512-6USsjumt53nacM9Zgjn/roVL4sDxJwGTnzRUGHA7X4tH+1rhJzfo2ypb70C9uu0DvKnnCTBA7GY0Uor4AVunng==} engines: {node: ^22.22.0 || >=24.13.1} peerDependencies: - '@angular/core': 22.0.0-next.3 + '@angular/core': 22.0.0-next.5 rxjs: ^6.5.3 || ^7.4.0 - '@angular/compiler-cli@22.0.0-next.3': - resolution: {integrity: sha512-li56XaAcjmPSG+WzwQXv07W1htKDo6HtZ8h4IQm+JGvYNkfcJiKJYbfZUL5ZSxEzHa/eiKoAODsLXR0lkYboyw==} + '@angular/compiler-cli@22.0.0-next.5': + resolution: {integrity: sha512-yGes0iE61I7Rmk9f/W3Oe0hLWYpqNUBxyT0PmuYekGgFocmgY+uyw9E8hyXaHVd5syWSBiuw8bprMyLSuRnRAQ==} engines: {node: ^22.22.0 || >=24.13.1} hasBin: true peerDependencies: - '@angular/compiler': 22.0.0-next.3 + '@angular/compiler': 22.0.0-next.5 typescript: '>=5.9 <6.1' peerDependenciesMeta: typescript: optional: true - '@angular/compiler@22.0.0-next.3': - resolution: {integrity: sha512-b1z3WTBk0nysyZ9RnZG7EeNiOOr+rpm7/a8KedjJz8+dEeOP6Q+MN3JN4oTvLbU/GaN//560+TAc5MuUY1AKPQ==} + '@angular/compiler@22.0.0-next.5': + resolution: {integrity: sha512-pidvCE3YOfc8BIkEI5ohmZsnfeT+NMunwccUiRuAU/42JZaM8XpdZ6LHxl/P6qYbYFhlSvctkvLeAcC13wYTzw==} engines: {node: ^22.22.0 || >=24.13.1} - '@angular/core@22.0.0-next.3': - resolution: {integrity: sha512-F0zES0ziee/f429vYuOMe/NokRrEk84IGP9Qtfc0zVoFkzcHdZbFW8o3Eg/F5WI1BxIA4YhEXg33nDN5tEA+AQ==} + '@angular/core@22.0.0-next.5': + resolution: {integrity: sha512-pBGFG3W5mCPpoafdeTY+fgYUIyoxA9kOYmLCmCCvOkQoZacBQJeNbNqHrLXrVJxX6l4EsBfRvy8sDaKe4Iwstg==} engines: {node: ^22.22.0 || >=24.13.1} peerDependencies: - '@angular/compiler': 22.0.0-next.3 + '@angular/compiler': 22.0.0-next.5 rxjs: ^6.5.3 || ^7.4.0 zone.js: ~0.15.0 || ~0.16.0 peerDependenciesMeta: @@ -972,74 +972,74 @@ packages: zone.js: optional: true - '@angular/forms@22.0.0-next.3': - resolution: {integrity: sha512-Af8viVslusUK/Jn8xJ4UGHg7nEQoTBixkzppfHBQKZNrDlMFNak1LD+QDE8AWV+mTGi7OXpoF8zNPz9hJTYs8g==} + '@angular/forms@22.0.0-next.5': + resolution: {integrity: sha512-LzhwA1n286ib5ZIJeKqY/JhQivzvno+Fu1V7iBMyHFhyZWp6nmL6YOn4y0UqMuFsQ2g0322eSdhncuhwmFvJvA==} engines: {node: ^22.22.0 || >=24.13.1} peerDependencies: - '@angular/common': 22.0.0-next.3 - '@angular/core': 22.0.0-next.3 - '@angular/platform-browser': 22.0.0-next.3 + '@angular/common': 22.0.0-next.5 + '@angular/core': 22.0.0-next.5 + '@angular/platform-browser': 22.0.0-next.5 rxjs: ^6.5.3 || ^7.4.0 - '@angular/localize@22.0.0-next.3': - resolution: {integrity: sha512-BnfYtZe6ptXZKx84NkmPOg8zDFRx+p8MAWLUq0sZmsX8Jc16FrHGBli3KDaxL0Mrs2TMtKsrBSovTm077uOmDg==} + '@angular/localize@22.0.0-next.5': + resolution: {integrity: sha512-kVuLyQzFz3S/gQibYpbldgwArYlPaznngRksEd81sDGvbN73OGP4v12wSSIWAx9FwlwN2RTEVYgmpB6MR9ZKsw==} engines: {node: ^22.22.0 || >=24.13.1} hasBin: true peerDependencies: - '@angular/compiler': 22.0.0-next.3 - '@angular/compiler-cli': 22.0.0-next.3 + '@angular/compiler': 22.0.0-next.5 + '@angular/compiler-cli': 22.0.0-next.5 - '@angular/material@22.0.0-next.0': - resolution: {integrity: sha512-kI9DRWyARS0p45zSGLqdvDRT3+QRo/kBg11ieewmx9n+o3zCI+vOqVD7wyUA9vFARDSIR5SLRTjVu2QSaGPWgQ==} + '@angular/material@22.0.0-next.2': + resolution: {integrity: sha512-HqTVJNEf2kSmHs8xQBvFbSf/m8ekMMaaBXlVy1lONLfN+Lq+RO6HxP56wF3CY4rwS8CpPr2vQo1IkWtsDH3gVg==} peerDependencies: - '@angular/cdk': 22.0.0-next.0 + '@angular/cdk': 22.0.0-next.2 '@angular/common': ^22.0.0-0 || ^22.1.0-0 || ^22.2.0-0 || ^22.3.0-0 || ^23.0.0-0 '@angular/core': ^22.0.0-0 || ^22.1.0-0 || ^22.2.0-0 || ^22.3.0-0 || ^23.0.0-0 '@angular/forms': ^22.0.0-0 || ^22.1.0-0 || ^22.2.0-0 || ^22.3.0-0 || ^23.0.0-0 '@angular/platform-browser': ^22.0.0-0 || ^22.1.0-0 || ^22.2.0-0 || ^22.3.0-0 || ^23.0.0-0 rxjs: ^6.5.3 || ^7.4.0 - '@angular/ng-dev@https://codeload.github.com/angular/dev-infra-private-ng-dev-builds/tar.gz/ae3393e8549a472a9fb199222eeebb387b5769e6': - resolution: {tarball: https://codeload.github.com/angular/dev-infra-private-ng-dev-builds/tar.gz/ae3393e8549a472a9fb199222eeebb387b5769e6} - version: 0.0.0-9de194d77b66b6b3294e0f041e29985d2916e911 + '@angular/ng-dev@https://codeload.github.com/angular/dev-infra-private-ng-dev-builds/tar.gz/88dbc0543ffbc4df720ac87c0d413fab45ea1491': + resolution: {tarball: https://codeload.github.com/angular/dev-infra-private-ng-dev-builds/tar.gz/88dbc0543ffbc4df720ac87c0d413fab45ea1491} + version: 0.0.0-b9bca459f29f61177a829e69089730415c95ccde hasBin: true - '@angular/platform-browser@22.0.0-next.3': - resolution: {integrity: sha512-9QmGhkP26km+hVxuy/2x5xHdEGRzb/SCrPrJBBWPgIQ7L3IoXzoE2ElnvlGEfgJNdWFblHN3Dpymc8m0afz0mA==} + '@angular/platform-browser@22.0.0-next.5': + resolution: {integrity: sha512-vDLAWN+HFC6KLywrnAtr/62G6B99/2xL2c/nWJR3AIGSdi4BdMk9yrq+g6vEl3sz3rX+mcHCN9ih61Ew7Ht68A==} engines: {node: ^22.22.0 || >=24.13.1} peerDependencies: - '@angular/animations': 22.0.0-next.3 - '@angular/common': 22.0.0-next.3 - '@angular/core': 22.0.0-next.3 + '@angular/animations': 22.0.0-next.5 + '@angular/common': 22.0.0-next.5 + '@angular/core': 22.0.0-next.5 peerDependenciesMeta: '@angular/animations': optional: true - '@angular/platform-server@22.0.0-next.3': - resolution: {integrity: sha512-qAeU3noQZjctQfcJXsRZ65Sn/amBcUUZdMaqFoYvWyKfHcuEbMBFBvktleilHF74YY1h04A7d5mjGgjZ6t8exw==} + '@angular/platform-server@22.0.0-next.5': + resolution: {integrity: sha512-v3CNQxySkjX7WhqeKxGghg6/Ygjv59HQQpTpPWdBOOWmQ+yzrS1crEmO94QnrbwgNBPUaKOttaX7pebvXN7Gxg==} engines: {node: ^22.22.0 || >=24.13.1} peerDependencies: - '@angular/common': 22.0.0-next.3 - '@angular/compiler': 22.0.0-next.3 - '@angular/core': 22.0.0-next.3 - '@angular/platform-browser': 22.0.0-next.3 + '@angular/common': 22.0.0-next.5 + '@angular/compiler': 22.0.0-next.5 + '@angular/core': 22.0.0-next.5 + '@angular/platform-browser': 22.0.0-next.5 rxjs: ^6.5.3 || ^7.4.0 - '@angular/router@22.0.0-next.3': - resolution: {integrity: sha512-wCM8jnGWrE3aXo6v6gV1GKRTMosNUfadcjrn/axFCzWd2o1vWUPvVnEc2gg3Pf3MEcm4ZbxrUo3hcEo/aqIClg==} + '@angular/router@22.0.0-next.5': + resolution: {integrity: sha512-CHiJuBpr2HpBtK4JqksZ30Hh4Vx/h6o7t0NB06RDhXux0Jr+Mh1RVKMkRo2zc4oP30rbooy4DheKl/EOW9ALgA==} engines: {node: ^22.22.0 || >=24.13.1} peerDependencies: - '@angular/common': 22.0.0-next.3 - '@angular/core': 22.0.0-next.3 - '@angular/platform-browser': 22.0.0-next.3 + '@angular/common': 22.0.0-next.5 + '@angular/core': 22.0.0-next.5 + '@angular/platform-browser': 22.0.0-next.5 rxjs: ^6.5.3 || ^7.4.0 - '@angular/service-worker@22.0.0-next.3': - resolution: {integrity: sha512-jn5p6pAoxjI/Rd449Kyg4MrToiggtxE5hrKhf8vZrIbEA5bdT0a+63CK+1jG1TQ4TsmgX6gi4PGVpo4nv6mB1A==} + '@angular/service-worker@22.0.0-next.5': + resolution: {integrity: sha512-leEdbpD8tnRT3i88QEe9GXVfBryls9BntMSbfURlJBdrJJrTySX2wUsuBbeBVM9kjQG5oqy8/GDFaGVMrNziug==} engines: {node: ^22.22.0 || >=24.13.1} hasBin: true peerDependencies: - '@angular/core': 22.0.0-next.3 + '@angular/core': 22.0.0-next.5 rxjs: ^6.5.3 || ^7.4.0 '@asamuzakjp/css-color@5.0.1': @@ -2105,8 +2105,8 @@ packages: resolution: {integrity: sha512-IJn+8A3QZJfe7FUtWqHVNo3xJs7KFpurCWGWCiCz3oEh+BkRymKZ1QxfAbU2yGMDzTytLGQ2IV6T2r3cuo75/w==} engines: {node: '>=18'} - '@google/genai@1.45.0': - resolution: {integrity: sha512-+sNRWhKiRibVgc4OKi7aBJJ0A7RcoVD8tGG+eFkqxAWRjASDW+ktS9lLwTDnAxZICzCVoeAdu8dYLJVTX60N9w==} + '@google/genai@1.46.0': + resolution: {integrity: sha512-ewPMN5JkKfgU5/kdco9ZhXBHDPhVqZpMQqIFQhwsHLf8kyZfx1cNpw1pHo1eV6PGEW7EhIBFi3aYZraFndAXqg==} engines: {node: '>=20.0.0'} peerDependencies: '@modelcontextprotocol/sdk': ^1.25.2 @@ -2246,15 +2246,6 @@ packages: '@types/node': optional: true - '@inquirer/prompts@8.3.0': - resolution: {integrity: sha512-JAj66kjdH/F1+B7LCigjARbwstt3SNUOSzMdjpsvwJmzunK88gJeXmcm95L9nw1KynvFVuY4SzXh/3Y0lvtgSg==} - engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} - peerDependencies: - '@types/node': '>=18' - peerDependenciesMeta: - '@types/node': - optional: true - '@inquirer/prompts@8.3.2': resolution: {integrity: sha512-yFroiSj2iiBFlm59amdTvAcQFvWS6ph5oKESls/uqPBect7rTU2GbjyZO2DqxMGuIwVA8z0P4K6ViPcd/cp+0w==} engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} @@ -2291,15 +2282,6 @@ packages: '@types/node': optional: true - '@inquirer/type@4.0.3': - resolution: {integrity: sha512-cKZN7qcXOpj1h+1eTTcGDVLaBIHNMT1Rz9JqJP5MnEJ0JhgVWllx7H/tahUp5YEK1qaByH2Itb8wLG/iScD5kw==} - engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} - peerDependencies: - '@types/node': '>=18' - peerDependenciesMeta: - '@types/node': - optional: true - '@inquirer/type@4.0.4': resolution: {integrity: sha512-PamArxO3cFJZoOzspzo6cxVlLeIftyBsZw/S9bKY5DzxqJVZgjoj1oP8d0rskKtp7sZxBycsoer1g6UeJV1BBA==} engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} @@ -6480,8 +6462,8 @@ packages: resolution: {integrity: sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==} engines: {node: '>= 0.4.0'} - ng-packagr@22.0.0-next.0: - resolution: {integrity: sha512-AHq15yteBa2u/8OQYLlbD+gaHDfKSz9wfIsCKi/3UOX1BwJXQSXDSnSSAZh0etAw21XxxXTkbEy+2uNj7Ss+Jw==} + ng-packagr@22.0.0-next.1: + resolution: {integrity: sha512-eCmMoX4U1WIv2RWCaYQBD+jEk7rmvAJWMxdLQiA/lt6hd6FwuNKZuzmaI8dT6eMXX7e4vrDrg1zhlPth6qwrBA==} engines: {node: ^22.22.0 || >=24.13.1} hasBin: true peerDependencies: @@ -8477,29 +8459,29 @@ snapshots: '@jridgewell/gen-mapping': 0.3.13 '@jridgewell/trace-mapping': 0.3.31 - '@angular/animations@22.0.0-next.3(@angular/core@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1))': + '@angular/animations@22.0.0-next.5(@angular/core@22.0.0-next.5(@angular/compiler@22.0.0-next.5)(rxjs@7.8.2)(zone.js@0.16.1))': dependencies: - '@angular/core': 22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1) + '@angular/core': 22.0.0-next.5(@angular/compiler@22.0.0-next.5)(rxjs@7.8.2)(zone.js@0.16.1) tslib: 2.8.1 - '@angular/cdk@22.0.0-next.0(@angular/common@22.0.0-next.3(@angular/core@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@22.0.0-next.3(@angular/animations@22.0.0-next.3(@angular/core@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@22.0.0-next.3(@angular/core@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1)))(rxjs@7.8.2)': + '@angular/cdk@22.0.0-next.2(@angular/common@22.0.0-next.5(@angular/core@22.0.0-next.5(@angular/compiler@22.0.0-next.5)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.5(@angular/compiler@22.0.0-next.5)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@22.0.0-next.5(@angular/animations@22.0.0-next.5(@angular/core@22.0.0-next.5(@angular/compiler@22.0.0-next.5)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@22.0.0-next.5(@angular/core@22.0.0-next.5(@angular/compiler@22.0.0-next.5)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.5(@angular/compiler@22.0.0-next.5)(rxjs@7.8.2)(zone.js@0.16.1)))(rxjs@7.8.2)': dependencies: - '@angular/common': 22.0.0-next.3(@angular/core@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2) - '@angular/core': 22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1) - '@angular/platform-browser': 22.0.0-next.3(@angular/animations@22.0.0-next.3(@angular/core@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@22.0.0-next.3(@angular/core@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1)) + '@angular/common': 22.0.0-next.5(@angular/core@22.0.0-next.5(@angular/compiler@22.0.0-next.5)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2) + '@angular/core': 22.0.0-next.5(@angular/compiler@22.0.0-next.5)(rxjs@7.8.2)(zone.js@0.16.1) + '@angular/platform-browser': 22.0.0-next.5(@angular/animations@22.0.0-next.5(@angular/core@22.0.0-next.5(@angular/compiler@22.0.0-next.5)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@22.0.0-next.5(@angular/core@22.0.0-next.5(@angular/compiler@22.0.0-next.5)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.5(@angular/compiler@22.0.0-next.5)(rxjs@7.8.2)(zone.js@0.16.1)) parse5: 8.0.0 rxjs: 7.8.2 tslib: 2.8.1 - '@angular/common@22.0.0-next.3(@angular/core@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2)': + '@angular/common@22.0.0-next.5(@angular/core@22.0.0-next.5(@angular/compiler@22.0.0-next.5)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2)': dependencies: - '@angular/core': 22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1) + '@angular/core': 22.0.0-next.5(@angular/compiler@22.0.0-next.5)(rxjs@7.8.2)(zone.js@0.16.1) rxjs: 7.8.2 tslib: 2.8.1 - '@angular/compiler-cli@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(typescript@6.0.2)': + '@angular/compiler-cli@22.0.0-next.5(@angular/compiler@22.0.0-next.5)(typescript@6.0.2)': dependencies: - '@angular/compiler': 22.0.0-next.3 + '@angular/compiler': 22.0.0-next.5 '@babel/core': 7.29.0 '@jridgewell/sourcemap-codec': 1.5.5 chokidar: 5.0.0 @@ -8513,31 +8495,31 @@ snapshots: transitivePeerDependencies: - supports-color - '@angular/compiler@22.0.0-next.3': + '@angular/compiler@22.0.0-next.5': dependencies: tslib: 2.8.1 - '@angular/core@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1)': + '@angular/core@22.0.0-next.5(@angular/compiler@22.0.0-next.5)(rxjs@7.8.2)(zone.js@0.16.1)': dependencies: rxjs: 7.8.2 tslib: 2.8.1 optionalDependencies: - '@angular/compiler': 22.0.0-next.3 + '@angular/compiler': 22.0.0-next.5 zone.js: 0.16.1 - '@angular/forms@22.0.0-next.3(@angular/common@22.0.0-next.3(@angular/core@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@22.0.0-next.3(@angular/animations@22.0.0-next.3(@angular/core@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@22.0.0-next.3(@angular/core@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1)))(rxjs@7.8.2)': + '@angular/forms@22.0.0-next.5(@angular/common@22.0.0-next.5(@angular/core@22.0.0-next.5(@angular/compiler@22.0.0-next.5)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.5(@angular/compiler@22.0.0-next.5)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@22.0.0-next.5(@angular/animations@22.0.0-next.5(@angular/core@22.0.0-next.5(@angular/compiler@22.0.0-next.5)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@22.0.0-next.5(@angular/core@22.0.0-next.5(@angular/compiler@22.0.0-next.5)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.5(@angular/compiler@22.0.0-next.5)(rxjs@7.8.2)(zone.js@0.16.1)))(rxjs@7.8.2)': dependencies: - '@angular/common': 22.0.0-next.3(@angular/core@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2) - '@angular/core': 22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1) - '@angular/platform-browser': 22.0.0-next.3(@angular/animations@22.0.0-next.3(@angular/core@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@22.0.0-next.3(@angular/core@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1)) + '@angular/common': 22.0.0-next.5(@angular/core@22.0.0-next.5(@angular/compiler@22.0.0-next.5)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2) + '@angular/core': 22.0.0-next.5(@angular/compiler@22.0.0-next.5)(rxjs@7.8.2)(zone.js@0.16.1) + '@angular/platform-browser': 22.0.0-next.5(@angular/animations@22.0.0-next.5(@angular/core@22.0.0-next.5(@angular/compiler@22.0.0-next.5)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@22.0.0-next.5(@angular/core@22.0.0-next.5(@angular/compiler@22.0.0-next.5)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.5(@angular/compiler@22.0.0-next.5)(rxjs@7.8.2)(zone.js@0.16.1)) '@standard-schema/spec': 1.1.0 rxjs: 7.8.2 tslib: 2.8.1 - '@angular/localize@22.0.0-next.3(@angular/compiler-cli@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(typescript@6.0.2))(@angular/compiler@22.0.0-next.3)': + '@angular/localize@22.0.0-next.5(@angular/compiler-cli@22.0.0-next.5(@angular/compiler@22.0.0-next.5)(typescript@6.0.2))(@angular/compiler@22.0.0-next.5)': dependencies: - '@angular/compiler': 22.0.0-next.3 - '@angular/compiler-cli': 22.0.0-next.3(@angular/compiler@22.0.0-next.3)(typescript@6.0.2) + '@angular/compiler': 22.0.0-next.5 + '@angular/compiler-cli': 22.0.0-next.5(@angular/compiler@22.0.0-next.5)(typescript@6.0.2) '@babel/core': 7.29.0 '@types/babel__core': 7.20.5 tinyglobby: 0.2.15 @@ -8545,24 +8527,24 @@ snapshots: transitivePeerDependencies: - supports-color - '@angular/material@22.0.0-next.0(2d75345887a5a4c2bc113233c009d4e6)': + '@angular/material@22.0.0-next.2(2f6ce0790131a0100070320bdabac3a2)': dependencies: - '@angular/cdk': 22.0.0-next.0(@angular/common@22.0.0-next.3(@angular/core@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@22.0.0-next.3(@angular/animations@22.0.0-next.3(@angular/core@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@22.0.0-next.3(@angular/core@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1)))(rxjs@7.8.2) - '@angular/common': 22.0.0-next.3(@angular/core@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2) - '@angular/core': 22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1) - '@angular/forms': 22.0.0-next.3(@angular/common@22.0.0-next.3(@angular/core@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@22.0.0-next.3(@angular/animations@22.0.0-next.3(@angular/core@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@22.0.0-next.3(@angular/core@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1)))(rxjs@7.8.2) - '@angular/platform-browser': 22.0.0-next.3(@angular/animations@22.0.0-next.3(@angular/core@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@22.0.0-next.3(@angular/core@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1)) + '@angular/cdk': 22.0.0-next.2(@angular/common@22.0.0-next.5(@angular/core@22.0.0-next.5(@angular/compiler@22.0.0-next.5)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.5(@angular/compiler@22.0.0-next.5)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@22.0.0-next.5(@angular/animations@22.0.0-next.5(@angular/core@22.0.0-next.5(@angular/compiler@22.0.0-next.5)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@22.0.0-next.5(@angular/core@22.0.0-next.5(@angular/compiler@22.0.0-next.5)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.5(@angular/compiler@22.0.0-next.5)(rxjs@7.8.2)(zone.js@0.16.1)))(rxjs@7.8.2) + '@angular/common': 22.0.0-next.5(@angular/core@22.0.0-next.5(@angular/compiler@22.0.0-next.5)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2) + '@angular/core': 22.0.0-next.5(@angular/compiler@22.0.0-next.5)(rxjs@7.8.2)(zone.js@0.16.1) + '@angular/forms': 22.0.0-next.5(@angular/common@22.0.0-next.5(@angular/core@22.0.0-next.5(@angular/compiler@22.0.0-next.5)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.5(@angular/compiler@22.0.0-next.5)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@22.0.0-next.5(@angular/animations@22.0.0-next.5(@angular/core@22.0.0-next.5(@angular/compiler@22.0.0-next.5)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@22.0.0-next.5(@angular/core@22.0.0-next.5(@angular/compiler@22.0.0-next.5)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.5(@angular/compiler@22.0.0-next.5)(rxjs@7.8.2)(zone.js@0.16.1)))(rxjs@7.8.2) + '@angular/platform-browser': 22.0.0-next.5(@angular/animations@22.0.0-next.5(@angular/core@22.0.0-next.5(@angular/compiler@22.0.0-next.5)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@22.0.0-next.5(@angular/core@22.0.0-next.5(@angular/compiler@22.0.0-next.5)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.5(@angular/compiler@22.0.0-next.5)(rxjs@7.8.2)(zone.js@0.16.1)) rxjs: 7.8.2 tslib: 2.8.1 - '@angular/ng-dev@https://codeload.github.com/angular/dev-infra-private-ng-dev-builds/tar.gz/ae3393e8549a472a9fb199222eeebb387b5769e6(@modelcontextprotocol/sdk@1.27.1(zod@4.3.6))': + '@angular/ng-dev@https://codeload.github.com/angular/dev-infra-private-ng-dev-builds/tar.gz/88dbc0543ffbc4df720ac87c0d413fab45ea1491(@modelcontextprotocol/sdk@1.27.1(zod@4.3.6))': dependencies: '@actions/core': 3.0.0 '@conventional-changelog/git-client': 2.6.0(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.3.0) '@google-cloud/spanner': 8.0.0(supports-color@10.2.2) - '@google/genai': 1.45.0(@modelcontextprotocol/sdk@1.27.1(zod@4.3.6))(bufferutil@4.1.0)(supports-color@10.2.2)(utf-8-validate@6.0.6) - '@inquirer/prompts': 8.3.0(@types/node@24.12.0) - '@inquirer/type': 4.0.3(@types/node@24.12.0) + '@google/genai': 1.46.0(@modelcontextprotocol/sdk@1.27.1(zod@4.3.6))(bufferutil@4.1.0)(supports-color@10.2.2)(utf-8-validate@6.0.6) + '@inquirer/prompts': 8.3.2(@types/node@24.12.0) + '@inquirer/type': 4.0.4(@types/node@24.12.0) '@octokit/auth-app': 8.2.0 '@octokit/core': 7.0.6 '@octokit/graphql': 9.0.3 @@ -8615,35 +8597,35 @@ snapshots: - '@modelcontextprotocol/sdk' - '@react-native-async-storage/async-storage' - '@angular/platform-browser@22.0.0-next.3(@angular/animations@22.0.0-next.3(@angular/core@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@22.0.0-next.3(@angular/core@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1))': + '@angular/platform-browser@22.0.0-next.5(@angular/animations@22.0.0-next.5(@angular/core@22.0.0-next.5(@angular/compiler@22.0.0-next.5)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@22.0.0-next.5(@angular/core@22.0.0-next.5(@angular/compiler@22.0.0-next.5)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.5(@angular/compiler@22.0.0-next.5)(rxjs@7.8.2)(zone.js@0.16.1))': dependencies: - '@angular/common': 22.0.0-next.3(@angular/core@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2) - '@angular/core': 22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1) + '@angular/common': 22.0.0-next.5(@angular/core@22.0.0-next.5(@angular/compiler@22.0.0-next.5)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2) + '@angular/core': 22.0.0-next.5(@angular/compiler@22.0.0-next.5)(rxjs@7.8.2)(zone.js@0.16.1) tslib: 2.8.1 optionalDependencies: - '@angular/animations': 22.0.0-next.3(@angular/core@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1)) + '@angular/animations': 22.0.0-next.5(@angular/core@22.0.0-next.5(@angular/compiler@22.0.0-next.5)(rxjs@7.8.2)(zone.js@0.16.1)) - '@angular/platform-server@22.0.0-next.3(@angular/common@22.0.0-next.3(@angular/core@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/compiler@22.0.0-next.3)(@angular/core@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@22.0.0-next.3(@angular/animations@22.0.0-next.3(@angular/core@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@22.0.0-next.3(@angular/core@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1)))(rxjs@7.8.2)': + '@angular/platform-server@22.0.0-next.5(@angular/common@22.0.0-next.5(@angular/core@22.0.0-next.5(@angular/compiler@22.0.0-next.5)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/compiler@22.0.0-next.5)(@angular/core@22.0.0-next.5(@angular/compiler@22.0.0-next.5)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@22.0.0-next.5(@angular/animations@22.0.0-next.5(@angular/core@22.0.0-next.5(@angular/compiler@22.0.0-next.5)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@22.0.0-next.5(@angular/core@22.0.0-next.5(@angular/compiler@22.0.0-next.5)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.5(@angular/compiler@22.0.0-next.5)(rxjs@7.8.2)(zone.js@0.16.1)))(rxjs@7.8.2)': dependencies: - '@angular/common': 22.0.0-next.3(@angular/core@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2) - '@angular/compiler': 22.0.0-next.3 - '@angular/core': 22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1) - '@angular/platform-browser': 22.0.0-next.3(@angular/animations@22.0.0-next.3(@angular/core@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@22.0.0-next.3(@angular/core@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1)) + '@angular/common': 22.0.0-next.5(@angular/core@22.0.0-next.5(@angular/compiler@22.0.0-next.5)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2) + '@angular/compiler': 22.0.0-next.5 + '@angular/core': 22.0.0-next.5(@angular/compiler@22.0.0-next.5)(rxjs@7.8.2)(zone.js@0.16.1) + '@angular/platform-browser': 22.0.0-next.5(@angular/animations@22.0.0-next.5(@angular/core@22.0.0-next.5(@angular/compiler@22.0.0-next.5)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@22.0.0-next.5(@angular/core@22.0.0-next.5(@angular/compiler@22.0.0-next.5)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.5(@angular/compiler@22.0.0-next.5)(rxjs@7.8.2)(zone.js@0.16.1)) rxjs: 7.8.2 tslib: 2.8.1 xhr2: 0.2.1 - '@angular/router@22.0.0-next.3(@angular/common@22.0.0-next.3(@angular/core@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@22.0.0-next.3(@angular/animations@22.0.0-next.3(@angular/core@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@22.0.0-next.3(@angular/core@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1)))(rxjs@7.8.2)': + '@angular/router@22.0.0-next.5(@angular/common@22.0.0-next.5(@angular/core@22.0.0-next.5(@angular/compiler@22.0.0-next.5)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.5(@angular/compiler@22.0.0-next.5)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@22.0.0-next.5(@angular/animations@22.0.0-next.5(@angular/core@22.0.0-next.5(@angular/compiler@22.0.0-next.5)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@22.0.0-next.5(@angular/core@22.0.0-next.5(@angular/compiler@22.0.0-next.5)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.5(@angular/compiler@22.0.0-next.5)(rxjs@7.8.2)(zone.js@0.16.1)))(rxjs@7.8.2)': dependencies: - '@angular/common': 22.0.0-next.3(@angular/core@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2) - '@angular/core': 22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1) - '@angular/platform-browser': 22.0.0-next.3(@angular/animations@22.0.0-next.3(@angular/core@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@22.0.0-next.3(@angular/core@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1)) + '@angular/common': 22.0.0-next.5(@angular/core@22.0.0-next.5(@angular/compiler@22.0.0-next.5)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2) + '@angular/core': 22.0.0-next.5(@angular/compiler@22.0.0-next.5)(rxjs@7.8.2)(zone.js@0.16.1) + '@angular/platform-browser': 22.0.0-next.5(@angular/animations@22.0.0-next.5(@angular/core@22.0.0-next.5(@angular/compiler@22.0.0-next.5)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@22.0.0-next.5(@angular/core@22.0.0-next.5(@angular/compiler@22.0.0-next.5)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.5(@angular/compiler@22.0.0-next.5)(rxjs@7.8.2)(zone.js@0.16.1)) rxjs: 7.8.2 tslib: 2.8.1 - '@angular/service-worker@22.0.0-next.3(@angular/core@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2)': + '@angular/service-worker@22.0.0-next.5(@angular/core@22.0.0-next.5(@angular/compiler@22.0.0-next.5)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2)': dependencies: - '@angular/core': 22.0.0-next.3(@angular/compiler@22.0.0-next.3)(rxjs@7.8.2)(zone.js@0.16.1) + '@angular/core': 22.0.0-next.5(@angular/compiler@22.0.0-next.5)(rxjs@7.8.2)(zone.js@0.16.1) rxjs: 7.8.2 tslib: 2.8.1 @@ -9934,7 +9916,7 @@ snapshots: transitivePeerDependencies: - supports-color - '@google/genai@1.45.0(@modelcontextprotocol/sdk@1.27.1(zod@4.3.6))(bufferutil@4.1.0)(supports-color@10.2.2)(utf-8-validate@6.0.6)': + '@google/genai@1.46.0(@modelcontextprotocol/sdk@1.27.1(zod@4.3.6))(bufferutil@4.1.0)(supports-color@10.2.2)(utf-8-validate@6.0.6)': dependencies: google-auth-library: 10.6.2(supports-color@10.2.2) p-retry: 4.6.2 @@ -10065,21 +10047,6 @@ snapshots: optionalDependencies: '@types/node': 24.12.0 - '@inquirer/prompts@8.3.0(@types/node@24.12.0)': - dependencies: - '@inquirer/checkbox': 5.1.2(@types/node@24.12.0) - '@inquirer/confirm': 6.0.10(@types/node@24.12.0) - '@inquirer/editor': 5.0.10(@types/node@24.12.0) - '@inquirer/expand': 5.0.10(@types/node@24.12.0) - '@inquirer/input': 5.0.10(@types/node@24.12.0) - '@inquirer/number': 4.0.10(@types/node@24.12.0) - '@inquirer/password': 5.0.10(@types/node@24.12.0) - '@inquirer/rawlist': 5.2.6(@types/node@24.12.0) - '@inquirer/search': 4.1.6(@types/node@24.12.0) - '@inquirer/select': 5.1.2(@types/node@24.12.0) - optionalDependencies: - '@types/node': 24.12.0 - '@inquirer/prompts@8.3.2(@types/node@24.12.0)': dependencies: '@inquirer/checkbox': 5.1.2(@types/node@24.12.0) @@ -10119,10 +10086,6 @@ snapshots: optionalDependencies: '@types/node': 24.12.0 - '@inquirer/type@4.0.3(@types/node@24.12.0)': - optionalDependencies: - '@types/node': 24.12.0 - '@inquirer/type@4.0.4(@types/node@24.12.0)': optionalDependencies: '@types/node': 24.12.0 @@ -14817,10 +14780,10 @@ snapshots: netmask@2.0.2: {} - ng-packagr@22.0.0-next.0(@angular/compiler-cli@22.0.0-next.3(@angular/compiler@22.0.0-next.3)(typescript@6.0.2))(tslib@2.8.1)(typescript@6.0.2): + ng-packagr@22.0.0-next.1(@angular/compiler-cli@22.0.0-next.5(@angular/compiler@22.0.0-next.5)(typescript@6.0.2))(tslib@2.8.1)(typescript@6.0.2): dependencies: '@ampproject/remapping': 2.3.0 - '@angular/compiler-cli': 22.0.0-next.3(@angular/compiler@22.0.0-next.3)(typescript@6.0.2) + '@angular/compiler-cli': 22.0.0-next.5(@angular/compiler@22.0.0-next.5)(typescript@6.0.2) '@rollup/plugin-json': 6.1.0(rollup@4.60.0) '@rollup/wasm-node': 4.60.0 ajv: 8.18.0 diff --git a/tests/e2e/ng-snapshot/package.json b/tests/e2e/ng-snapshot/package.json index e70cd8b0322f..ed8e0877a73e 100644 --- a/tests/e2e/ng-snapshot/package.json +++ b/tests/e2e/ng-snapshot/package.json @@ -2,21 +2,21 @@ "description": "snapshot versions of Angular for e2e testing", "private": true, "dependencies": { - "@angular/animations": "github:angular/animations-builds#258921fb85e069f55d1e8e885ee0996795ff1d6c", - "@angular/cdk": "github:angular/cdk-builds#31d61d82940bc415359502be54af9d1bf41cd51d", - "@angular/common": "github:angular/common-builds#3089c5f552c223bb4042b77803a1839135af2cfb", - "@angular/compiler": "github:angular/compiler-builds#fd30be17bf48408c0c69c69ceba6d069c1b09706", - "@angular/compiler-cli": "github:angular/compiler-cli-builds#876ef8f7536abde91a74cc122551e7f465319b76", - "@angular/core": "github:angular/core-builds#1da8e3dd9f61d4b576e5dbf933729c9b5f0d4a66", - "@angular/forms": "github:angular/forms-builds#dd01546e26789ccb379a63787cd7748c381fab4a", - "@angular/language-service": "github:angular/language-service-builds#dd51f3ccb3a764459412010194c47b072ae3daeb", - "@angular/localize": "github:angular/localize-builds#8c7a6a4ba2b4694ce9a13ebe1276fbc49acae545", - "@angular/material": "github:angular/material-builds#e307643479de20868e65d2fc50d83dfd64707023", - "@angular/material-moment-adapter": "github:angular/material-moment-adapter-builds#915c34b096cde2c7938dc03848467a9063f03935", - "@angular/platform-browser": "github:angular/platform-browser-builds#f233500075dfeb87e348f5f39088b9db119f550b", - "@angular/platform-browser-dynamic": "github:angular/platform-browser-dynamic-builds#35aa512837c24f70e26b8ed412bdaf03fb87b18a", - "@angular/platform-server": "github:angular/platform-server-builds#3de2069df22ff869671ec68760ee6015fbe209c7", - "@angular/router": "github:angular/router-builds#ecfb555cc807c99ad375dcca171622cc9cf82904", - "@angular/service-worker": "github:angular/service-worker-builds#60efd8593b3ea0149d4aba31a3c8c1df30e8f3df" + "@angular/animations": "github:angular/animations-builds#fca59aea2bead974374a1b5800f532cfd3f2ecc0", + "@angular/cdk": "github:angular/cdk-builds#6cf91c6dd1c56619c0d1df392029684e14103d7d", + "@angular/common": "github:angular/common-builds#9c800da56b742551eef29a21201f2d8e8496bec3", + "@angular/compiler": "github:angular/compiler-builds#7c79f6b7ee7cf9ad6add42ec72186622564c18be", + "@angular/compiler-cli": "github:angular/compiler-cli-builds#c5673873bab181032307291275952232914e3faf", + "@angular/core": "github:angular/core-builds#e90d9c7d25fd74c9717ac2eaa9fcf33bae8805b1", + "@angular/forms": "github:angular/forms-builds#66b7dbe8fe027593b834944ce9415774aa56bf62", + "@angular/language-service": "github:angular/language-service-builds#3aafaf910ad1e934e9985d5e3e688dfef5aabb6b", + "@angular/localize": "github:angular/localize-builds#ca752c3af377b331dbfc20306d67fc5dc514f09f", + "@angular/material": "github:angular/material-builds#c3cc27c4fc2fae694f0b85dbcd9369790cb529ba", + "@angular/material-moment-adapter": "github:angular/material-moment-adapter-builds#b47fc22ebf27a26c2ead5d0120f99213b12bc570", + "@angular/platform-browser": "github:angular/platform-browser-builds#45c2943503401d4dbf92472c5c757671867bd387", + "@angular/platform-browser-dynamic": "github:angular/platform-browser-dynamic-builds#1cf30eca24c03a1c090fbf33863fb45c14069ef2", + "@angular/platform-server": "github:angular/platform-server-builds#059eeec744711c747055dfe9089c028829563bee", + "@angular/router": "github:angular/router-builds#d4732ab6174bad7bc487196075b55d07a58bfadd", + "@angular/service-worker": "github:angular/service-worker-builds#ce86459b459e380464016f23da7a4a1ec0dca6d8" } } From 2320ba87c4cd967d8995d7e8f9ea1cf6b54cb5ee Mon Sep 17 00:00:00 2001 From: hawkgs <hawk.dvp@gmail.com> Date: Fri, 20 Mar 2026 16:48:50 +0200 Subject: [PATCH 179/226] build: add @bazel/ibazel as a dev dependency Add `@bazel/ibazel` as a dev dependency to the workspace root. --- package.json | 1 + pnpm-lock.yaml | 32 ++++++++++++++++---------------- 2 files changed, 17 insertions(+), 16 deletions(-) diff --git a/package.json b/package.json index c28d3e12e0e5..77e432b42455 100644 --- a/package.json +++ b/package.json @@ -59,6 +59,7 @@ "@babel/core": "7.29.0", "@bazel/bazelisk": "1.28.1", "@bazel/buildifier": "8.2.1", + "@bazel/ibazel": "^0.28.0", "@eslint/compat": "2.0.3", "@eslint/eslintrc": "3.3.5", "@eslint/js": "10.0.1", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 2fed38c67ef5..fb2523d8a77c 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -70,6 +70,9 @@ importers: '@bazel/buildifier': specifier: 8.2.1 version: 8.2.1 + '@bazel/ibazel': + specifier: ^0.28.0 + version: 0.28.0 '@eslint/compat': specifier: 2.0.3 version: 2.0.3(eslint@10.1.0(jiti@2.6.1)) @@ -312,7 +315,7 @@ importers: version: link:../../../packages/angular/ssr '@vitest/coverage-v8': specifier: 4.1.0 - version: 4.1.0(vitest@4.1.0(@opentelemetry/api@1.9.0)(@types/node@24.12.0)(jiti@2.6.1)(jsdom@29.0.1)(less@4.6.4)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) + version: 4.1.0(vitest@4.1.0(@opentelemetry/api@1.9.0)(@types/node@24.12.0)(jsdom@29.0.1)(vite@7.3.1(@types/node@24.12.0)(jiti@2.6.1)(less@4.6.4)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))) browser-sync: specifier: 3.0.4 version: 3.0.4(bufferutil@4.1.0)(utf-8-validate@6.0.6) @@ -327,7 +330,7 @@ importers: version: 7.8.2 vitest: specifier: 4.1.0 - version: 4.1.0(@opentelemetry/api@1.9.0)(@types/node@24.12.0)(jiti@2.6.1)(jsdom@29.0.1)(less@4.6.4)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) + version: 4.1.0(@opentelemetry/api@1.9.0)(@types/node@24.12.0)(jsdom@29.0.1)(vite@7.3.1(@types/node@24.12.0)(jiti@2.6.1)(less@4.6.4)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) packages/angular/build: dependencies: @@ -433,7 +436,7 @@ importers: version: 7.8.2 vitest: specifier: 4.1.0 - version: 4.1.0(@opentelemetry/api@1.9.0)(@types/node@24.12.0)(jiti@2.6.1)(jsdom@29.0.1)(less@4.6.4)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) + version: 4.1.0(@opentelemetry/api@1.9.0)(@types/node@24.12.0)(jsdom@29.0.1)(vite@7.3.1(@types/node@24.12.0)(jiti@2.6.1)(less@4.6.4)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) optionalDependencies: lmdb: specifier: 3.5.2 @@ -1566,6 +1569,10 @@ packages: resolution: {integrity: sha512-eZ/Aq+2r4PcJa6LbPCT6ffgIJfTU/gYilqIzoX2OLM4nNkbQC6tTMPZNn7aHHjhGPxbNLv41zm4Xqt1olCLgXw==} hasBin: true + '@bazel/ibazel@0.28.0': + resolution: {integrity: sha512-8WV3Uulai7afTG0OLo7Kf72actI0N6WK4a89i0kClO0WVlY2DguKyBPR/Xs//Sn/U4c4V93b0HS1ufUv3aTxbA==} + hasBin: true + '@bcoe/v8-coverage@1.0.2': resolution: {integrity: sha512-6zABk/ECA/QYSCQ1NGiVwwbQerUCZ+TQbp64Q3AgmfNvurHH0j8TtXa1qbShXA6qqkpAj4V5W8pP6mLe1mcMqA==} engines: {node: '>=18'} @@ -8040,6 +8047,7 @@ packages: '@vitest/ui': 4.1.0 happy-dom: '*' jsdom: '*' + vite: ^6.0.0 || ^7.0.0 || ^8.0.0-0 peerDependenciesMeta: '@edge-runtime/vm': optional: true @@ -9321,6 +9329,8 @@ snapshots: '@bazel/buildifier@8.2.1': {} + '@bazel/ibazel@0.28.0': {} + '@bcoe/v8-coverage@1.0.2': {} '@bramus/specificity@2.4.2': @@ -11632,7 +11642,7 @@ snapshots: dependencies: vite: 7.3.1(@types/node@24.12.0)(jiti@2.6.1)(less@4.6.4)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) - '@vitest/coverage-v8@4.1.0(vitest@4.1.0(@opentelemetry/api@1.9.0)(@types/node@24.12.0)(jiti@2.6.1)(jsdom@29.0.1)(less@4.6.4)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))': + '@vitest/coverage-v8@4.1.0(vitest@4.1.0(@opentelemetry/api@1.9.0)(@types/node@24.12.0)(jsdom@29.0.1)(vite@7.3.1(@types/node@24.12.0)(jiti@2.6.1)(less@4.6.4)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)))': dependencies: '@bcoe/v8-coverage': 1.0.2 '@vitest/utils': 4.1.0 @@ -11644,7 +11654,7 @@ snapshots: obug: 2.1.1 std-env: 4.0.0 tinyrainbow: 3.1.0 - vitest: 4.1.0(@opentelemetry/api@1.9.0)(@types/node@24.12.0)(jiti@2.6.1)(jsdom@29.0.1)(less@4.6.4)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) + vitest: 4.1.0(@opentelemetry/api@1.9.0)(@types/node@24.12.0)(jsdom@29.0.1)(vite@7.3.1(@types/node@24.12.0)(jiti@2.6.1)(less@4.6.4)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) '@vitest/expect@4.1.0': dependencies: @@ -16676,7 +16686,7 @@ snapshots: tsx: 4.21.0 yaml: 2.8.3 - vitest@4.1.0(@opentelemetry/api@1.9.0)(@types/node@24.12.0)(jiti@2.6.1)(jsdom@29.0.1)(less@4.6.4)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3): + vitest@4.1.0(@opentelemetry/api@1.9.0)(@types/node@24.12.0)(jsdom@29.0.1)(vite@7.3.1(@types/node@24.12.0)(jiti@2.6.1)(less@4.6.4)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)): dependencies: '@vitest/expect': 4.1.0 '@vitest/mocker': 4.1.0(vite@7.3.1(@types/node@24.12.0)(jiti@2.6.1)(less@4.6.4)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) @@ -16703,17 +16713,7 @@ snapshots: '@types/node': 24.12.0 jsdom: 29.0.1 transitivePeerDependencies: - - jiti - - less - - lightningcss - msw - - sass - - sass-embedded - - stylus - - sugarss - - terser - - tsx - - yaml void-elements@2.0.1: {} From a712a821734d89aa3cd8cf123d97df7061cd0be0 Mon Sep 17 00:00:00 2001 From: Alan Agius <17563226+alan-agius4@users.noreply.github.com> Date: Thu, 26 Mar 2026 14:30:40 +0000 Subject: [PATCH 180/226] test: use eager change detection in fake-async test component The `AppComponent` template used within the `fake-async_spec.ts` files is updated to use `ChangeDetectionStrategy.Eager`. This ensures that change detection is triggered immediately as expected for these specific behavior tests. --- .../build/src/builders/karma/tests/behavior/fake-async_spec.ts | 3 ++- .../src/builders/karma/tests/behavior/fake-async_spec.ts | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/packages/angular/build/src/builders/karma/tests/behavior/fake-async_spec.ts b/packages/angular/build/src/builders/karma/tests/behavior/fake-async_spec.ts index 16da8daf2f55..12f43e47cce5 100644 --- a/packages/angular/build/src/builders/karma/tests/behavior/fake-async_spec.ts +++ b/packages/angular/build/src/builders/karma/tests/behavior/fake-async_spec.ts @@ -18,12 +18,13 @@ describeKarmaBuilder(execute, KARMA_BUILDER_INFO, (harness, setupTarget) => { it('loads zone.js/testing at the right time', async () => { await harness.writeFiles({ './src/app/app.component.ts': ` - import { Component } from '@angular/core'; + import { ChangeDetectionStrategy, Component } from '@angular/core'; @Component({ selector: 'app-root', standalone: false, template: '<button (click)="changeMessage()" class="change">{{ message }}</button>', + changeDetection: ChangeDetectionStrategy.Eager }) export class AppComponent { message = 'Initial'; diff --git a/packages/angular_devkit/build_angular/src/builders/karma/tests/behavior/fake-async_spec.ts b/packages/angular_devkit/build_angular/src/builders/karma/tests/behavior/fake-async_spec.ts index 16da8daf2f55..12f43e47cce5 100644 --- a/packages/angular_devkit/build_angular/src/builders/karma/tests/behavior/fake-async_spec.ts +++ b/packages/angular_devkit/build_angular/src/builders/karma/tests/behavior/fake-async_spec.ts @@ -18,12 +18,13 @@ describeKarmaBuilder(execute, KARMA_BUILDER_INFO, (harness, setupTarget) => { it('loads zone.js/testing at the right time', async () => { await harness.writeFiles({ './src/app/app.component.ts': ` - import { Component } from '@angular/core'; + import { ChangeDetectionStrategy, Component } from '@angular/core'; @Component({ selector: 'app-root', standalone: false, template: '<button (click)="changeMessage()" class="change">{{ message }}</button>', + changeDetection: ChangeDetectionStrategy.Eager }) export class AppComponent { message = 'Initial'; From e7e434ca3d78a8369b592bf870c9466962f77c94 Mon Sep 17 00:00:00 2001 From: Alan Agius <17563226+alan-agius4@users.noreply.github.com> Date: Thu, 26 Mar 2026 10:54:23 +0000 Subject: [PATCH 181/226] fix(@angular/ssr): allow underscores in host validation The VALID_HOST_REGEX has been updated to include the underscore character. This ensures that hostnames containing underscores (e.g., in some internal or development environments) are correctly validated instead of being rejected. Closes #32835 --- packages/angular/ssr/src/utils/validation.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/angular/ssr/src/utils/validation.ts b/packages/angular/ssr/src/utils/validation.ts index 83f7f2ea269e..e8af64ed9943 100644 --- a/packages/angular/ssr/src/utils/validation.ts +++ b/packages/angular/ssr/src/utils/validation.ts @@ -24,7 +24,7 @@ const VALID_PROTO_REGEX = /^https?$/i; /** * Regular expression to validate that the host is a valid hostname. */ -const VALID_HOST_REGEX = /^[a-z0-9.:-]+$/i; +const VALID_HOST_REGEX = /^[a-z0-9_.-]+(:[0-9]+)?$/i; /** * Regular expression to validate that the prefix is valid. From 87d99e98b178c8f7d5e944a346faf70c51bdfcef Mon Sep 17 00:00:00 2001 From: Alon Mishne <amishne@users.noreply.github.com> Date: Thu, 26 Mar 2026 15:02:23 -0700 Subject: [PATCH 182/226] feat(@angular/cli): support custom port in MCP devserver start tool --- packages/angular/cli/src/commands/mcp/host.ts | 17 +++++++++++ .../cli/src/commands/mcp/testing/mock-host.ts | 1 + .../src/commands/mcp/testing/test-utils.ts | 3 ++ .../mcp/tools/devserver/devserver-start.ts | 29 ++++++++++++++++--- .../mcp/tools/devserver/devserver_spec.ts | 25 ++++++++++++++++ 5 files changed, 71 insertions(+), 4 deletions(-) diff --git a/packages/angular/cli/src/commands/mcp/host.ts b/packages/angular/cli/src/commands/mcp/host.ts index 1ff0bb9724b3..94ac449fe356 100644 --- a/packages/angular/cli/src/commands/mcp/host.ts +++ b/packages/angular/cli/src/commands/mcp/host.ts @@ -118,6 +118,11 @@ export interface Host { * Finds an available TCP port on the system. */ getAvailablePort(): Promise<number>; + + /** + * Checks whether a TCP port is available on the system. + */ + isPortAvailable(port: number): Promise<boolean>; } /** @@ -236,4 +241,16 @@ export const LocalWorkspaceHost: Host = { }); }); }, + + isPortAvailable(port: number): Promise<boolean> { + return new Promise((resolve) => { + const server = createServer(); + server.once('error', () => resolve(false)); + server.listen(port, () => { + server.close(() => { + resolve(true); + }); + }); + }); + }, }; diff --git a/packages/angular/cli/src/commands/mcp/testing/mock-host.ts b/packages/angular/cli/src/commands/mcp/testing/mock-host.ts index 29f41c24e101..ce2e5177ffab 100644 --- a/packages/angular/cli/src/commands/mcp/testing/mock-host.ts +++ b/packages/angular/cli/src/commands/mcp/testing/mock-host.ts @@ -21,4 +21,5 @@ export class MockHost implements Host { resolveModule = jasmine.createSpy('resolveRequest').and.returnValue('/dev/null'); spawn = jasmine.createSpy('spawn'); getAvailablePort = jasmine.createSpy('getAvailablePort'); + isPortAvailable = jasmine.createSpy('isPortAvailable').and.resolveTo(true); } diff --git a/packages/angular/cli/src/commands/mcp/testing/test-utils.ts b/packages/angular/cli/src/commands/mcp/testing/test-utils.ts index 7afcd695dd7d..1bdf2ef416a5 100644 --- a/packages/angular/cli/src/commands/mcp/testing/test-utils.ts +++ b/packages/angular/cli/src/commands/mcp/testing/test-utils.ts @@ -27,6 +27,9 @@ export function createMockHost(): MockHost { getAvailablePort: jasmine .createSpy<Host['getAvailablePort']>('getAvailablePort') .and.resolveTo(0), + isPortAvailable: jasmine + .createSpy<Host['isPortAvailable']>('isPortAvailable') + .and.resolveTo(true), } as unknown as MockHost; } diff --git a/packages/angular/cli/src/commands/mcp/tools/devserver/devserver-start.ts b/packages/angular/cli/src/commands/mcp/tools/devserver/devserver-start.ts index 272bf6800300..f5f413cfad30 100644 --- a/packages/angular/cli/src/commands/mcp/tools/devserver/devserver-start.ts +++ b/packages/angular/cli/src/commands/mcp/tools/devserver/devserver-start.ts @@ -15,6 +15,13 @@ import { type McpToolContext, type McpToolDeclaration, declareTool } from '../to const devserverStartToolInputSchema = z.object({ ...workspaceAndProjectOptions, + port: z + .number() + .optional() + .describe( + 'The port number to run the server on. If not provided, a random available port will be chosen. ' + + 'It is recommended to reuse port numbers across calls within the same workspace to maintain consistency.', + ), }); export type DevserverStartToolInput = z.infer<typeof devserverStartToolInputSchema>; @@ -53,7 +60,17 @@ export async function startDevserver(input: DevserverStartToolInput, context: Mc }); } - const port = await context.host.getAvailablePort(); + let port: number; + if (input.port) { + if (!(await context.host.isPortAvailable(input.port))) { + throw new Error( + `Port ${input.port} is unavailable. Try calling this tool again without the 'port' parameter to auto-assign a free port.`, + ); + } + port = input.port; + } else { + port = await context.host.getAvailablePort(); + } devserver = new LocalDevserver({ host: context.host, @@ -87,14 +104,18 @@ the first build completes. background. * **Get Initial Build Logs:** Once a dev server has started, use the "devserver.wait_for_build" tool to ensure it's alive. If there are any build errors, "devserver.wait_for_build" would provide them back and you can give them to the user or rely on them to propose a fix. -* **Get Updated Build Logs:** Important: as long as a devserver is alive (i.e. "devserver.stop" wasn't called), after every time you make a - change to the workspace, re-run "devserver.wait_for_build" to see whether the change was successfully built and wait for the devserver to - be updated. +* **Get Updated Build Logs:** Important: as long as a devserver is alive (i.e. "devserver.stop" wasn't called), after every time you + make a change to the workspace, re-run "devserver.wait_for_build" to see whether the change was successfully built and wait for the + devserver to be updated. </Use Cases> <Operational Notes> * This tool manages development servers by itself. It maintains at most a single dev server instance for each project in the monorepo. * This is an asynchronous operation. Subsequent commands can be ran while the server is active. * Use 'devserver.stop' to gracefully shut down the server and access the full log output. +* **Keeping the Server Alive**: It is often better to keep the server alive between tool calls if you expect the user to request more + changes or run more tests, as it saves time on restarts and maintains the file watcher state. You must still call + 'devserver.wait_for_build' after every change to see whether the change was successfully built and be sure that that app was updated. +* **Consistent Ports**: If making multiple calls, it is recommended to reuse the port you got from the first call for subsequent ones. </Operational Notes> `, isReadOnly: true, diff --git a/packages/angular/cli/src/commands/mcp/tools/devserver/devserver_spec.ts b/packages/angular/cli/src/commands/mcp/tools/devserver/devserver_spec.ts index 93c6b367cb70..52a66902e2ef 100644 --- a/packages/angular/cli/src/commands/mcp/tools/devserver/devserver_spec.ts +++ b/packages/angular/cli/src/commands/mcp/tools/devserver/devserver_spec.ts @@ -64,6 +64,31 @@ describe('Serve Tools', () => { expect(mockProcess.kill).toHaveBeenCalled(); }); + it('should use the provided port number', async () => { + const startResult = await startDevserver({ port: 54321 }, mockContext); + expect(startResult.structuredContent.message).toBe( + `Development server for project 'my-app' started and watching for workspace changes.`, + ); + expect(mockHost.spawn).toHaveBeenCalledWith('ng', ['serve', 'my-app', '--port=54321'], { + stdio: 'pipe', + cwd: '/test', + }); + expect(mockHost.getAvailablePort).not.toHaveBeenCalled(); + }); + + it('should throw an error if the provided port is taken', async () => { + mockHost.isPortAvailable.and.resolveTo(false); + + try { + await startDevserver({ port: 55555 }, mockContext); + fail('Should have thrown an error'); + } catch (e) { + expect((e as Error).message).toContain( + "Port 55555 is unavailable. Try calling this tool again without the 'port' parameter to auto-assign a free port.", + ); + } + }); + it('should wait for a build to complete', async () => { await startDevserver({}, mockContext); From 18ec02a8eba5652267db7b9f07311ef940bbd84b Mon Sep 17 00:00:00 2001 From: Alan Agius <17563226+alan-agius4@users.noreply.github.com> Date: Fri, 27 Mar 2026 07:45:57 +0000 Subject: [PATCH 183/226] docs: release notes for the v19.2.23 release --- CHANGELOG.md | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7ddf083e5128..f6ea5d3a1f18 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,33 @@ +<a name="19.2.23"></a> + +# 19.2.23 (2026-03-27) + +### @angular/cli + +| Commit | Type | Description | +| --------------------------------------------------------------------------------------------------- | ---- | ------------------------- | +| [67cfbe32f](https://github.com/angular/angular-cli/commit/67cfbe32ff013d7c9763253c8ccd383d8ee2416c) | fix | update picomatch to 4.0.4 | + +### @angular-devkit/build-angular + +| Commit | Type | Description | +| --------------------------------------------------------------------------------------------------- | ---- | ------------------------- | +| [771b979e7](https://github.com/angular/angular-cli/commit/771b979e78af079242bea607470b3ad3b6162659) | fix | update picomatch to 4.0.4 | + +### @angular-devkit/core + +| Commit | Type | Description | +| --------------------------------------------------------------------------------------------------- | ---- | ------------------------- | +| [de2da4874](https://github.com/angular/angular-cli/commit/de2da4874026bb47d08de828b6b4b44fd7d9a3c4) | fix | update picomatch to 4.0.4 | + +### @angular/build + +| Commit | Type | Description | +| --------------------------------------------------------------------------------------------------- | ---- | ------------------------- | +| [27a9ce4a7](https://github.com/angular/angular-cli/commit/27a9ce4a7446db0533e4a7ef64301eeccc5e21e1) | fix | update picomatch to 4.0.4 | + +<!-- CHANGELOG SPLIT MARKER --> + <a name="22.0.0-next.3"></a> # 22.0.0-next.3 (2026-03-26) @@ -2753,6 +2783,7 @@ - Protractor is no longer supported. Protractor was marked end-of-life in August 2023 (see https://protractortest.org/). Projects still relying on Protractor should consider migrating to another E2E testing framework, several support solid migration paths from Protractor. + - https://angular.dev/tools/cli/end-to-end - https://blog.angular.dev/the-state-of-end-to-end-testing-with-angular-d175f751cb9c @@ -6387,6 +6418,7 @@ Alan Agius, Charles Lyding and Doug Parker ### @angular/cli - Several changes to the `ng analytics` command syntax. + - `ng analytics project <setting>` has been replaced with `ng analytics <setting>` - `ng analytics <setting>` has been replaced with `ng analytics <setting> --global` @@ -6416,6 +6448,7 @@ Alan Agius, Charles Lyding and Doug Parker - `browser` and `karma` builders `script` and `styles` options input files extensions are now validated. Valid extensions for `scripts` are: + - `.js` - `.cjs` - `.mjs` @@ -6424,6 +6457,7 @@ Alan Agius, Charles Lyding and Doug Parker - `.mjsx` Valid extensions for `styles` are: + - `.css` - `.less` - `.sass` From 9b51362d07337f511c751ef7c431516a7eabcf8b Mon Sep 17 00:00:00 2001 From: Alan Agius <17563226+alan-agius4@users.noreply.github.com> Date: Fri, 27 Mar 2026 07:50:06 +0000 Subject: [PATCH 184/226] docs: release notes for the v20.3.22 release --- CHANGELOG.md | 28 ++++++++++++++++++++++++---- 1 file changed, 24 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f6ea5d3a1f18..e12afe8babf3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,27 @@ +<a name="20.3.22"></a> + +# 20.3.22 (2026-03-27) + +### @angular-devkit/build-angular + +| Commit | Type | Description | +| --------------------------------------------------------------------------------------------------- | ---- | ------------------------- | +| [5978eeeff](https://github.com/angular/angular-cli/commit/5978eeeff63cd62f1515d949eaad0b5e6f7c44cd) | fix | update picomatch to 4.0.4 | + +### @angular-devkit/core + +| Commit | Type | Description | +| --------------------------------------------------------------------------------------------------- | ---- | ------------------------- | +| [6e9b92612](https://github.com/angular/angular-cli/commit/6e9b926129a9dd79f01d47b7446411b8963ffb62) | fix | update picomatch to 4.0.4 | + +### @angular/build + +| Commit | Type | Description | +| --------------------------------------------------------------------------------------------------- | ---- | ------------------------- | +| [6f209c26d](https://github.com/angular/angular-cli/commit/6f209c26dc5a454acd1cd76f25240c26978fa827) | fix | update picomatch to 4.0.4 | + +<!-- CHANGELOG SPLIT MARKER --> + <a name="19.2.23"></a> # 19.2.23 (2026-03-27) @@ -2783,7 +2807,6 @@ - Protractor is no longer supported. Protractor was marked end-of-life in August 2023 (see https://protractortest.org/). Projects still relying on Protractor should consider migrating to another E2E testing framework, several support solid migration paths from Protractor. - - https://angular.dev/tools/cli/end-to-end - https://blog.angular.dev/the-state-of-end-to-end-testing-with-angular-d175f751cb9c @@ -6418,7 +6441,6 @@ Alan Agius, Charles Lyding and Doug Parker ### @angular/cli - Several changes to the `ng analytics` command syntax. - - `ng analytics project <setting>` has been replaced with `ng analytics <setting>` - `ng analytics <setting>` has been replaced with `ng analytics <setting> --global` @@ -6448,7 +6470,6 @@ Alan Agius, Charles Lyding and Doug Parker - `browser` and `karma` builders `script` and `styles` options input files extensions are now validated. Valid extensions for `scripts` are: - - `.js` - `.cjs` - `.mjs` @@ -6457,7 +6478,6 @@ Alan Agius, Charles Lyding and Doug Parker - `.mjsx` Valid extensions for `styles` are: - - `.css` - `.less` - `.sass` From a3f629a245045475a936287d0e36c0ba51a85220 Mon Sep 17 00:00:00 2001 From: Alan Agius <17563226+alan-agius4@users.noreply.github.com> Date: Fri, 27 Mar 2026 07:55:18 +0000 Subject: [PATCH 185/226] docs: release notes for the v21.2.5 release --- CHANGELOG.md | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index e12afe8babf3..2eff6a259035 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,22 @@ +<a name="21.2.5"></a> + +# 21.2.5 (2026-03-27) + +### @angular/cli + +| Commit | Type | Description | +| --------------------------------------------------------------------------------------------------- | ---- | ----------------------------------------------- | +| [cadf9b201](https://github.com/angular/angular-cli/commit/cadf9b201bd1055a6e3cc016eb01e0196b028080) | feat | support custom port in MCP devserver start tool | + +### @angular/ssr + +| Commit | Type | Description | +| --------------------------------------------------------------------------------------------------- | ---- | ---------------------------------------------------- | +| [bbc255419](https://github.com/angular/angular-cli/commit/bbc255419b346e5152391b47f310922f86e9e383) | fix | allow underscores in host validation | +| [b1fe66a7f](https://github.com/angular/angular-cli/commit/b1fe66a7f8650ce021b4070394bc31848fc64ca5) | fix | patch Headers.forEach in cloneRequestAndPatchHeaders | + +<!-- CHANGELOG SPLIT MARKER --> + <a name="20.3.22"></a> # 20.3.22 (2026-03-27) From f1ed0257abad0f5772647911d0a2683e3e6b3eb8 Mon Sep 17 00:00:00 2001 From: Venkatesan <68438061+VenkatKwest@users.noreply.github.com> Date: Wed, 4 Mar 2026 16:13:03 +0530 Subject: [PATCH 186/226] refactor(@angular-devkit/schematics): remove shell usage in git spawn to prevent command injection Git is a native executable on Windows and does not require shell: true. Switch to array-based spawn and separate the -m flag from the commit message to prevent command injection via crafted commit messages. --- .../angular_devkit/schematics/tasks/repo-init/executor.ts | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/packages/angular_devkit/schematics/tasks/repo-init/executor.ts b/packages/angular_devkit/schematics/tasks/repo-init/executor.ts index 97b2b12a3619..607e1bfc5cba 100644 --- a/packages/angular_devkit/schematics/tasks/repo-init/executor.ts +++ b/packages/angular_devkit/schematics/tasks/repo-init/executor.ts @@ -29,7 +29,6 @@ export default function ( const errorStream = ignoreErrorStream ? 'ignore' : process.stderr; const spawnOptions: SpawnOptions = { stdio: [process.stdin, outputStream, errorStream], - shell: true, cwd: path.join(rootDirectory, options.workingDirectory || ''), env: { ...process.env, @@ -41,7 +40,7 @@ export default function ( }; return new Promise<void>((resolve, reject) => { - spawn(`git ${args.join(' ')}`, spawnOptions).on('close', (code: number) => { + spawn('git', args, spawnOptions).on('close', (code: number) => { if (code === 0) { resolve(); } else { @@ -82,7 +81,7 @@ export default function ( if (options.commit) { const message = options.message || 'initial commit'; - await execute(['commit', `-m "${message}"`]); + await execute(['commit', '-m', message]); } context.logger.info('Successfully initialized git.'); From e558117b748ee5837324d49466108d21db596b2e Mon Sep 17 00:00:00 2001 From: Charles Lyding <19598772+clydin@users.noreply.github.com> Date: Fri, 27 Mar 2026 10:36:19 -0400 Subject: [PATCH 187/226] fix(@angular/build): ensure Vitest mock patching is executed only once Wrap the Vitest mocking overrides in a global guard to prevent repeated execution in shared environments or watch mode runs. --- .../unit-test/runners/vitest/build-options.ts | 53 ++++++++++--------- 1 file changed, 29 insertions(+), 24 deletions(-) diff --git a/packages/angular/build/src/builders/unit-test/runners/vitest/build-options.ts b/packages/angular/build/src/builders/unit-test/runners/vitest/build-options.ts index 3f75d2038453..4207e9b6225f 100644 --- a/packages/angular/build/src/builders/unit-test/runners/vitest/build-options.ts +++ b/packages/angular/build/src/builders/unit-test/runners/vitest/build-options.ts @@ -187,31 +187,36 @@ export async function getVitestBuildOptions( const mockPatchContents = ` import { vi } from 'vitest'; - const error = new Error( - 'The "vi.mock" and related methods are not supported for relative imports with the Angular unit-test system. ' + - 'Please use Angular TestBed for mocking dependencies.' - ); - - // Store original implementations - const { mock, doMock, importMock, unmock, doUnmock } = vi; - - function patch(original) { - return (path, ...args) => { - // Check if the path is a string and starts with a character that indicates a relative path. - if (typeof path === 'string' && /^[./]/.test(path)) { - throw error; - } - - // Call the original function for non-relative paths. - return original(path, ...args); - }; + const ANGULAR_VITEST_MOCK_PATCH = Symbol.for('@angular/cli/vitest-mock-patch'); + if (!globalThis[ANGULAR_VITEST_MOCK_PATCH]) { + globalThis[ANGULAR_VITEST_MOCK_PATCH] = true; + + const error = new Error( + 'The "vi.mock" and related methods are not supported for relative imports with the Angular unit-test system. ' + + 'Please use Angular TestBed for mocking dependencies.' + ); + + // Store original implementations + const { mock, doMock, importMock, unmock, doUnmock } = vi; + + function patch(original) { + return (path, ...args) => { + // Check if the path is a string and starts with a character that indicates a relative path. + if (typeof path === 'string' && /^[./]/.test(path)) { + throw error; + } + + // Call the original function for non-relative paths. + return original(path, ...args); + }; + } + + vi.mock = patch(mock); + vi.doMock = patch(doMock); + vi.importMock = patch(importMock); + vi.unmock = patch(unmock); + vi.doUnmock = patch(doUnmock); } - - vi.mock = patch(mock); - vi.doMock = patch(doMock); - vi.importMock = patch(importMock); - vi.unmock = patch(unmock); - vi.doUnmock = patch(doUnmock); `; return { From 81e4faae7699e2ed1eb8f4656dc115ca9c20f416 Mon Sep 17 00:00:00 2001 From: Maruthan G <maruthang4@gmail.com> Date: Fri, 27 Mar 2026 15:18:59 +0530 Subject: [PATCH 188/226] fix(@angular/build): preserve error stack traces during prerendering Reorder the nullish coalescing chain from `err.message ?? err.stack` to `err.stack ?? err.message` so that the full stack trace is preserved when available. Since `err.message` is almost always defined on Error objects, the previous order meant `err.stack` was never reached. Also add `assertIsError(err)` and consistent `err.code` inclusion across all three error-handling locations for improved type safety and debugging. Fixes #32503 --- .../build/src/utils/server-rendering/prerender.ts | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/packages/angular/build/src/utils/server-rendering/prerender.ts b/packages/angular/build/src/utils/server-rendering/prerender.ts index f0e822eb3de9..1033a7575f88 100644 --- a/packages/angular/build/src/utils/server-rendering/prerender.ts +++ b/packages/angular/build/src/utils/server-rendering/prerender.ts @@ -116,8 +116,12 @@ export async function prerenderPages( sourcemap, outputMode, ).catch((err) => { + assertIsError(err); + return { - errors: [`An error occurred while extracting routes.\n\n${err.message ?? err.stack ?? err}`], + errors: [ + `An error occurred while extracting routes.\n\n${err.stack ?? err.message ?? err.code ?? err}`, + ], serializedRouteTree: [], appShellRoute: undefined, }; @@ -265,8 +269,9 @@ async function renderPages( } }) .catch((err) => { + assertIsError(err); errors.push( - `An error occurred while prerendering route '${route}'.\n\n${err.message ?? err.stack ?? err.code ?? err}`, + `An error occurred while prerendering route '${route}'.\n\n${err.stack ?? err.message ?? err.code ?? err}`, ); void renderWorker.destroy(); }); @@ -371,7 +376,7 @@ async function getAllRoutes( return { errors: [ - `An error occurred while extracting routes.\n\n${err.message ?? err.stack ?? err.code ?? err}`, + `An error occurred while extracting routes.\n\n${err.stack ?? err.message ?? err.code ?? err}`, ], serializedRouteTree: [], }; From 21d8aa4747573132476c3a0a4b7ea1f6405a71ef Mon Sep 17 00:00:00 2001 From: Charles Lyding <19598772+clydin@users.noreply.github.com> Date: Fri, 27 Mar 2026 14:50:15 -0400 Subject: [PATCH 189/226] fix(@angular/build): ensure transitive SCSS partial errors are tracked in watch mode When stylesheet bundling fails due to an error in a SCSS partial, we now ensure that `referencedFiles` are still passed to the `FileReferenceTracker`. This prevents the dependency between the component and the error file from being lost, allowing the component to be correctly rebuilt when the error is fixed. --- .../behavior/rebuild-component_styles_spec.ts | 80 +++++++++++++++++++ .../tools/esbuild/angular/compiler-plugin.ts | 9 +++ 2 files changed, 89 insertions(+) diff --git a/packages/angular/build/src/builders/application/tests/behavior/rebuild-component_styles_spec.ts b/packages/angular/build/src/builders/application/tests/behavior/rebuild-component_styles_spec.ts index 26ae35a8221f..08b683439684 100644 --- a/packages/angular/build/src/builders/application/tests/behavior/rebuild-component_styles_spec.ts +++ b/packages/angular/build/src/builders/application/tests/behavior/rebuild-component_styles_spec.ts @@ -58,5 +58,85 @@ describeBuilder(buildApplication, APPLICATION_BUILDER_INFO, (harness) => { ]); }); } + + it('rebuilds component after error on rebuild from transitive import', async () => { + harness.useTarget('build', { + ...BASE_OPTIONS, + watch: true, + }); + + await harness.modifyFile('src/app/app.component.ts', (content) => + content.replace('app.component.css', 'app.component.scss'), + ); + await harness.writeFile('src/app/app.component.scss', "@import './a';"); + await harness.writeFile('src/app/a.scss', '$primary: aqua;\\nh1 { color: $primary; }'); + + await harness.executeWithCases([ + async ({ result }) => { + expect(result?.success).toBe(true); + + harness.expectFile('dist/browser/main.js').content.toContain('color: aqua'); + + // Introduce a syntax error + await harness.writeFile( + 'src/app/a.scss', + 'invalid-invalid-invalid\\nh1 { color: $primary; }', + ); + }, + async ({ result }) => { + expect(result?.success).toBe(false); + + // Fix the syntax error + await harness.writeFile('src/app/a.scss', '$primary: blue;\\nh1 { color: $primary; }'); + }, + ({ result }) => { + expect(result?.success).toBe(true); + + harness.expectFile('dist/browser/main.js').content.toContain('color: blue'); + }, + ]); + }); + + it('rebuilds component after error on rebuild from deep transitive import with partials', async () => { + harness.useTarget('build', { + ...BASE_OPTIONS, + watch: true, + }); + + await harness.modifyFile('src/app/app.component.ts', (content) => + content.replace('app.component.css', 'app.component.scss'), + ); + await harness.writeFile('src/app/app.component.scss', "@import './intermediary';"); + await harness.writeFile('src/app/_intermediary.scss', "@import './partial';"); + await harness.writeFile('src/app/_partial.scss', '$primary: aqua;\\nh1 { color: $primary; }'); + + await harness.executeWithCases([ + async ({ result }) => { + expect(result?.success).toBe(true); + + harness.expectFile('dist/browser/main.js').content.toContain('color: aqua'); + + // Introduce a syntax error deeply + await harness.writeFile( + 'src/app/_partial.scss', + 'invalid-invalid-invalid\\nh1 { color: $primary; }', + ); + }, + async ({ result }) => { + expect(result?.success).toBe(false); + + // Fix the syntax error deeply + await harness.writeFile( + 'src/app/_partial.scss', + '$primary: blue;\\nh1 { color: $primary; }', + ); + }, + ({ result }) => { + expect(result?.success).toBe(true); + + harness.expectFile('dist/browser/main.js').content.toContain('color: blue'); + }, + ]); + }); }); }); diff --git a/packages/angular/build/src/tools/esbuild/angular/compiler-plugin.ts b/packages/angular/build/src/tools/esbuild/angular/compiler-plugin.ts index af4dcaea01fb..1bcb8c40500a 100644 --- a/packages/angular/build/src/tools/esbuild/angular/compiler-plugin.ts +++ b/packages/angular/build/src/tools/esbuild/angular/compiler-plugin.ts @@ -220,10 +220,19 @@ export function createCompilerPlugin( if (stylesheetResult.errors) { (result.errors ??= []).push(...stylesheetResult.errors); + const { referencedFiles } = stylesheetResult; + if (referencedFiles) { + referencedFileTracker.add(containingFile, referencedFiles); + if (stylesheetFile) { + referencedFileTracker.add(stylesheetFile, referencedFiles); + } + } + return ''; } const { contents, outputFiles, metafile, referencedFiles } = stylesheetResult; + additionalResults.set(resultSource, { outputFiles, metafile, From 6ce4170c0037fa01807f60e6f4e3177e1af06362 Mon Sep 17 00:00:00 2001 From: Charles Lyding <19598772+clydin@users.noreply.github.com> Date: Fri, 27 Mar 2026 15:07:48 -0400 Subject: [PATCH 190/226] refactor(@angular/cli): deduplicate search roots for MCP projects tool Sorting by length ensures parent directories are processed before children, filtering out overlapping search trees. --- .../cli/src/commands/mcp/tools/projects.ts | 27 +++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/packages/angular/cli/src/commands/mcp/tools/projects.ts b/packages/angular/cli/src/commands/mcp/tools/projects.ts index 8c6eb5d332f6..7a41581e8605 100644 --- a/packages/angular/cli/src/commands/mcp/tools/projects.ts +++ b/packages/angular/cli/src/commands/mcp/tools/projects.ts @@ -544,6 +544,31 @@ async function processConfigFile( } } +/** + * Deduplicates overlapping search roots (e.g., if one is a child of another). + * Sorting by length ensures parent directories are processed before children. + * @param roots A list of normalized absolute paths used as search roots. + * @returns A deduplicated list of search roots. + */ +function deduplicateSearchRoots(roots: string[]): string[] { + const sortedRoots = [...roots].sort((a, b) => a.length - b.length); + const deduplicated: string[] = []; + + for (const root of sortedRoots) { + const isSubdirectory = deduplicated.some((existing) => { + const rel = relative(existing, root); + + return rel === '' || (!rel.startsWith('..') && !isAbsolute(rel)); + }); + + if (!isSubdirectory) { + deduplicated.push(root); + } + } + + return deduplicated; +} + async function createListProjectsHandler({ server }: McpToolContext) { return async () => { const workspaces: WorkspaceData[] = []; @@ -562,6 +587,8 @@ async function createListProjectsHandler({ server }: McpToolContext) { searchRoots = [process.cwd()]; } + searchRoots = deduplicateSearchRoots(searchRoots); + // Pre-resolve allowed roots to handle their own symlinks or normalizations. // We ignore failures here; if a root is broken, we simply won't match against it. const realAllowedRoots = searchRoots From 4815a5417c7a0135fb66149c2e4c1008e21e3a26 Mon Sep 17 00:00:00 2001 From: Charles Lyding <19598772+clydin@users.noreply.github.com> Date: Fri, 27 Mar 2026 12:55:11 -0400 Subject: [PATCH 191/226] fix(@angular/cli): fix sourceRoot resolution for MCP projects tool Ensure that project.sourceRoot is used directly as it is already relative to the workspace root, preventing duplicated path prefixes for sub-projects. --- .../cli/src/commands/mcp/tools/projects.ts | 2 +- .../mcp/projects-sourceroot-resolution.ts | 47 +++++++++++++++++++ 2 files changed, 48 insertions(+), 1 deletion(-) create mode 100644 tests/e2e/tests/mcp/projects-sourceroot-resolution.ts diff --git a/packages/angular/cli/src/commands/mcp/tools/projects.ts b/packages/angular/cli/src/commands/mcp/tools/projects.ts index 7a41581e8605..49c0bd19f839 100644 --- a/packages/angular/cli/src/commands/mcp/tools/projects.ts +++ b/packages/angular/cli/src/commands/mcp/tools/projects.ts @@ -467,7 +467,7 @@ async function loadAndParseWorkspace( const projects = []; const workspaceRoot = dirname(configFile); for (const [name, project] of ws.projects.entries()) { - const sourceRoot = posix.join(project.root, project.sourceRoot ?? 'src'); + const sourceRoot = project.sourceRoot ?? posix.join(project.root, 'src'); const fullSourceRoot = join(workspaceRoot, sourceRoot); const unitTestFramework = getUnitTestFramework(project.targets.get('test')); const styleLanguage = await getProjectStyleLanguage(project, ws, fullSourceRoot); diff --git a/tests/e2e/tests/mcp/projects-sourceroot-resolution.ts b/tests/e2e/tests/mcp/projects-sourceroot-resolution.ts new file mode 100644 index 000000000000..01ebb8c1ca05 --- /dev/null +++ b/tests/e2e/tests/mcp/projects-sourceroot-resolution.ts @@ -0,0 +1,47 @@ +import { exec, ProcessOutput, silentNpm } from '../../utils/process'; +import { updateJsonFile } from '../../utils/project'; +import assert from 'node:assert/strict'; + +const MCP_INSPECTOR_PACKAGE_NAME = '@modelcontextprotocol/inspector-cli'; +const MCP_INSPECTOR_PACKAGE_VERSION = '0.16.2'; +const MCP_INSPECTOR_COMMAND_NAME = 'mcp-inspector-cli'; + +async function runInspector(...args: string[]): Promise<ProcessOutput> { + return exec(MCP_INSPECTOR_COMMAND_NAME, '--cli', 'npx', '--no', '@angular/cli', 'mcp', ...args); +} + +export default async function () { + await silentNpm( + 'install', + '--ignore-scripts', + '-g', + `${MCP_INSPECTOR_PACKAGE_NAME}@${MCP_INSPECTOR_PACKAGE_VERSION}`, + ); + + try { + // 1. Add a sample project with a non-root path to angular.json + await updateJsonFile('angular.json', (workspaceJson) => { + workspaceJson.projects ??= {}; + workspaceJson.projects['sample-lib'] = { + root: 'projects/sample-lib', + sourceRoot: 'projects/sample-lib/src', + projectType: 'library', + }; + }); + + // 2. Call list_projects + const { stdout } = await runInspector('--method', 'tools/call', '--tool-name', 'list_projects'); + + // 3. Verify output + assert.match(stdout, /"name": "sample-lib"/); + // Assert that sourceRoot is NOT duplicated + assert.match(stdout, /"sourceRoot": "projects\/sample-lib\/src"/); + assert.doesNotMatch(stdout, /"sourceRoot": "projects\/sample-lib\/projects\/sample-lib\/src"/); + } finally { + // 4. Cleanup angular.json + await updateJsonFile('angular.json', (workspaceJson) => { + delete workspaceJson.projects['sample-lib']; + }); + await silentNpm('uninstall', '-g', MCP_INSPECTOR_PACKAGE_NAME); + } +} From a68d57af25ea4175527e752b1deaa125a6aaa1b1 Mon Sep 17 00:00:00 2001 From: Charles Lyding <19598772+clydin@users.noreply.github.com> Date: Fri, 27 Mar 2026 11:02:52 -0400 Subject: [PATCH 192/226] refactor(@angular/build): cleanup Vitest build options utilities Extract zone testing strategy resolution to a separate function and reduce complexity of template literals. --- .../unit-test/runners/vitest/build-options.ts | 99 ++++++++++++++----- 1 file changed, 73 insertions(+), 26 deletions(-) diff --git a/packages/angular/build/src/builders/unit-test/runners/vitest/build-options.ts b/packages/angular/build/src/builders/unit-test/runners/vitest/build-options.ts index 4207e9b6225f..482878c520ca 100644 --- a/packages/angular/build/src/builders/unit-test/runners/vitest/build-options.ts +++ b/packages/angular/build/src/builders/unit-test/runners/vitest/build-options.ts @@ -6,6 +6,11 @@ * found in the LICENSE file at https://angular.dev/license */ +/** + * @fileoverview + * Provides Vitest-specific build options and virtual file contents for Angular unit testing. + */ + import { createRequire } from 'node:module'; import path from 'node:path'; import { toPosixPath } from '../../../../utils/path'; @@ -15,6 +20,15 @@ import { NormalizedUnitTestBuilderOptions } from '../../options'; import { findTests, getTestEntrypoints } from '../../test-discovery'; import { RunnerOptions } from '../api'; +/** + * Creates the virtual file contents to initialize the Angular testing environment (TestBed). + * + * @param providersFile Optional path to a file that exports default providers. + * @param projectSourceRoot The root directory of the project source. + * @param teardown Whether to configure TestBed to destroy after each test. + * @param zoneTestingStrategy How zone.js should be loaded during initialization. + * @returns The string content of the virtual initialization file. + */ function createTestBedInitVirtualFile( providersFile: string | undefined, projectSourceRoot: string, @@ -29,6 +43,17 @@ function createTestBedInitVirtualFile( providersImport = `import providers from './${importPath}';`; } + let zoneTestingSnippet = ''; + if (zoneTestingStrategy === 'static') { + zoneTestingSnippet = `import 'zone.js/testing';`; + } else if (zoneTestingStrategy === 'dynamic') { + zoneTestingSnippet = `if (typeof Zone !== 'undefined') { + // 'zone.js/testing' is used to initialize the ZoneJS testing environment. + // It must be imported dynamically to avoid a static dependency on 'zone.js'. + await import('zone.js/testing'); + }`; + } + return ` // Initialize the Angular testing environment import { NgModule, provideZoneChangeDetection } from '@angular/core'; @@ -37,18 +62,7 @@ function createTestBedInitVirtualFile( import { afterEach, beforeEach } from 'vitest'; ${providersImport} - ${ - zoneTestingStrategy === 'static' - ? `import 'zone.js/testing';` - : zoneTestingStrategy === 'dynamic' - ? ` - if (typeof Zone !== 'undefined') { - // 'zone.js/testing' is used to initialize the ZoneJS testing environment. - // It must be imported dynamically to avoid a static dependency on 'zone.js'. - await import('zone.js/testing'); - }` - : '' - } + ${zoneTestingSnippet} // The beforeEach and afterEach hooks are registered outside the globalThis guard. // This ensures that the hooks are always applied, even in non-isolated browser environments. @@ -81,6 +95,13 @@ function createTestBedInitVirtualFile( `; } +/** + * Adjusts output hashing settings for testing purposes. For example, ensuring media + * is continued to be hashed to avoid overwriting assets, but turning off JavaScript hashing. + * + * @param hashing The original OutputHashing configuration. + * @returns The adjusted OutputHashing configuration. + */ function adjustOutputHashing(hashing?: OutputHashing): OutputHashing { switch (hashing) { case OutputHashing.All: @@ -92,6 +113,45 @@ function adjustOutputHashing(hashing?: OutputHashing): OutputHashing { } } +/** + * Resolves the Zone.js testing strategy by inspecting polyfills and resolving zone.js package. + * + * @param buildOptions The partial application builder options. + * @param projectSourceRoot The root directory of the project source. + * @returns The resolved zone testing strategy ('none', 'static', 'dynamic'). + */ +function getZoneTestingStrategy( + buildOptions: Partial<ApplicationBuilderInternalOptions>, + projectSourceRoot: string, +): 'none' | 'static' | 'dynamic' { + if (buildOptions.polyfills?.includes('zone.js/testing')) { + return 'none'; + } + + if (buildOptions.polyfills?.includes('zone.js')) { + return 'static'; + } + + try { + const projectRequire = createRequire(path.join(projectSourceRoot, 'package.json')); + projectRequire.resolve('zone.js'); + + return 'dynamic'; + } catch { + return 'none'; + } +} + +/** + * Generates options and virtual files for the Vitest test runner. + * + * Discovers specs matchers, creates entry points, decides polyfills strategy, and orchestrates + * internal ApplicationBuilder options. + * + * @param options The normalized unit test builder options. + * @param baseBuildOptions The base build config to derive testing config from. + * @returns An async RunnerOptions configuration. + */ export async function getVitestBuildOptions( options: NormalizedUnitTestBuilderOptions, baseBuildOptions: Partial<ApplicationBuilderInternalOptions>, @@ -162,20 +222,7 @@ export async function getVitestBuildOptions( }; // Inject the zone.js testing polyfill if Zone.js is installed. - let zoneTestingStrategy: 'none' | 'static' | 'dynamic'; - if (buildOptions.polyfills?.includes('zone.js/testing')) { - zoneTestingStrategy = 'none'; - } else if (buildOptions.polyfills?.includes('zone.js')) { - zoneTestingStrategy = 'static'; - } else { - try { - const projectRequire = createRequire(path.join(projectSourceRoot, 'package.json')); - projectRequire.resolve('zone.js'); - zoneTestingStrategy = 'dynamic'; - } catch { - zoneTestingStrategy = 'none'; - } - } + const zoneTestingStrategy = getZoneTestingStrategy(buildOptions, projectSourceRoot); const testBedInitContents = createTestBedInitVirtualFile( providersFile, From 934e44b0524c8fb5c229efadd06b789f5a5226ba Mon Sep 17 00:00:00 2001 From: Angular Robot <angular-robot@google.com> Date: Fri, 27 Mar 2026 14:52:35 +0000 Subject: [PATCH 193/226] build: update all non-major dependencies See associated pull request for more information. Closes #32838 as a pr takeover --- modules/testing/builder/package.json | 4 +- package.json | 6 +- packages/angular/build/package.json | 8 +- packages/angular/cli/package.json | 4 +- .../angular_devkit/build_angular/package.json | 6 +- packages/angular_devkit/core/package.json | 2 +- pnpm-lock.yaml | 705 +++++++++--------- 7 files changed, 372 insertions(+), 363 deletions(-) diff --git a/modules/testing/builder/package.json b/modules/testing/builder/package.json index e38ee5f1b927..77d9ac942495 100644 --- a/modules/testing/builder/package.json +++ b/modules/testing/builder/package.json @@ -4,11 +4,11 @@ "@angular-devkit/build-angular": "workspace:*", "@angular-devkit/core": "workspace:*", "@angular/ssr": "workspace:*", - "@vitest/coverage-v8": "4.1.0", + "@vitest/coverage-v8": "4.1.2", "browser-sync": "3.0.4", "jsdom": "29.0.1", "ng-packagr": "22.0.0-next.1", "rxjs": "7.8.2", - "vitest": "4.1.0" + "vitest": "4.1.2" } } diff --git a/package.json b/package.json index 77e432b42455..e88eec108834 100644 --- a/package.json +++ b/package.json @@ -92,8 +92,8 @@ "@types/yargs": "^17.0.20", "@types/yargs-parser": "^21.0.0", "@types/yarnpkg__lockfile": "^1.1.5", - "@typescript-eslint/eslint-plugin": "8.57.1", - "@typescript-eslint/parser": "8.57.1", + "@typescript-eslint/eslint-plugin": "8.57.2", + "@typescript-eslint/parser": "8.57.2", "ajv": "8.18.0", "buffer": "6.0.3", "esbuild": "0.27.3", @@ -130,7 +130,7 @@ "source-map-support": "0.5.21", "tslib": "2.8.1", "typescript": "6.0.2", - "undici": "7.24.5", + "undici": "7.24.6", "unenv": "^1.10.0", "verdaccio": "6.3.2", "verdaccio-auth-memory": "^10.0.0", diff --git a/packages/angular/build/package.json b/packages/angular/build/package.json index c68c14ea1193..68f134b63cf8 100644 --- a/packages/angular/build/package.json +++ b/packages/angular/build/package.json @@ -24,7 +24,7 @@ "@babel/helper-annotate-as-pure": "7.27.3", "@babel/helper-split-export-declaration": "7.24.7", "@inquirer/confirm": "6.0.10", - "@vitejs/plugin-basic-ssl": "2.2.0", + "@vitejs/plugin-basic-ssl": "2.3.0", "beasties": "0.4.1", "browserslist": "^4.26.0", "esbuild": "0.27.3", @@ -35,9 +35,9 @@ "magic-string": "0.30.21", "mrmime": "2.0.1", "parse5-html-rewriting-stream": "8.0.0", - "picomatch": "4.0.3", + "picomatch": "4.0.4", "piscina": "5.1.4", - "rolldown": "1.0.0-rc.10", + "rolldown": "1.0.0-rc.12", "sass": "1.98.0", "semver": "7.7.4", "source-map-support": "0.5.21", @@ -56,7 +56,7 @@ "ng-packagr": "22.0.0-next.1", "postcss": "8.5.8", "rxjs": "7.8.2", - "vitest": "4.1.0" + "vitest": "4.1.2" }, "peerDependencies": { "@angular/compiler": "0.0.0-ANGULAR-FW-PEER-DEP", diff --git a/packages/angular/cli/package.json b/packages/angular/cli/package.json index 6b74742ae8e3..246b046bf853 100644 --- a/packages/angular/cli/package.json +++ b/packages/angular/cli/package.json @@ -27,10 +27,10 @@ "@angular-devkit/schematics": "workspace:0.0.0-PLACEHOLDER", "@inquirer/prompts": "8.3.2", "@listr2/prompt-adapter-inquirer": "4.2.2", - "@modelcontextprotocol/sdk": "1.27.1", + "@modelcontextprotocol/sdk": "1.28.0", "@schematics/angular": "workspace:0.0.0-PLACEHOLDER", "@yarnpkg/lockfile": "1.1.0", - "algoliasearch": "5.49.2", + "algoliasearch": "5.50.0", "ini": "6.0.0", "jsonc-parser": "3.3.1", "listr2": "10.2.1", diff --git a/packages/angular_devkit/build_angular/package.json b/packages/angular_devkit/build_angular/package.json index c837b2883ead..61b75326fe39 100644 --- a/packages/angular_devkit/build_angular/package.json +++ b/packages/angular_devkit/build_angular/package.json @@ -37,10 +37,10 @@ "less-loader": "12.3.2", "license-webpack-plugin": "4.0.2", "loader-utils": "3.3.1", - "mini-css-extract-plugin": "2.10.1", + "mini-css-extract-plugin": "2.10.2", "open": "11.0.0", "ora": "9.3.0", - "picomatch": "4.0.3", + "picomatch": "4.0.4", "piscina": "5.1.4", "postcss": "8.5.8", "postcss-loader": "8.2.1", @@ -67,7 +67,7 @@ "@angular/ssr": "workspace:*", "browser-sync": "3.0.4", "ng-packagr": "22.0.0-next.1", - "undici": "7.24.5" + "undici": "7.24.6" }, "peerDependencies": { "@angular/compiler-cli": "0.0.0-ANGULAR-FW-PEER-DEP", diff --git a/packages/angular_devkit/core/package.json b/packages/angular_devkit/core/package.json index df7555968b65..fe4a5a13032a 100644 --- a/packages/angular_devkit/core/package.json +++ b/packages/angular_devkit/core/package.json @@ -28,7 +28,7 @@ "ajv": "8.18.0", "ajv-formats": "3.0.1", "jsonc-parser": "3.3.1", - "picomatch": "4.0.3", + "picomatch": "4.0.4", "rxjs": "7.8.2", "source-map": "0.7.6" }, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index fb2523d8a77c..cbbaf83c0449 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -48,7 +48,7 @@ importers: version: 22.0.0-next.2(2f6ce0790131a0100070320bdabac3a2) '@angular/ng-dev': specifier: https://github.com/angular/dev-infra-private-ng-dev-builds.git#88dbc0543ffbc4df720ac87c0d413fab45ea1491 - version: https://codeload.github.com/angular/dev-infra-private-ng-dev-builds/tar.gz/88dbc0543ffbc4df720ac87c0d413fab45ea1491(@modelcontextprotocol/sdk@1.27.1(zod@4.3.6)) + version: https://codeload.github.com/angular/dev-infra-private-ng-dev-builds/tar.gz/88dbc0543ffbc4df720ac87c0d413fab45ea1491(@modelcontextprotocol/sdk@1.28.0(zod@4.3.6)) '@angular/platform-browser': specifier: 22.0.0-next.5 version: 22.0.0-next.5(@angular/animations@22.0.0-next.5(@angular/core@22.0.0-next.5(@angular/compiler@22.0.0-next.5)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@22.0.0-next.5(@angular/core@22.0.0-next.5(@angular/compiler@22.0.0-next.5)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.5(@angular/compiler@22.0.0-next.5)(rxjs@7.8.2)(zone.js@0.16.1)) @@ -170,11 +170,11 @@ importers: specifier: ^1.1.5 version: 1.1.9 '@typescript-eslint/eslint-plugin': - specifier: 8.57.1 - version: 8.57.1(@typescript-eslint/parser@8.57.1(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2))(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2) + specifier: 8.57.2 + version: 8.57.2(@typescript-eslint/parser@8.57.2(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2))(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2) '@typescript-eslint/parser': - specifier: 8.57.1 - version: 8.57.1(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2) + specifier: 8.57.2 + version: 8.57.2(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2) ajv: specifier: 8.18.0 version: 8.18.0 @@ -195,7 +195,7 @@ importers: version: 10.1.8(eslint@10.1.0(jiti@2.6.1)) eslint-plugin-import: specifier: 2.32.0 - version: 2.32.0(@typescript-eslint/parser@8.57.1(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2))(eslint@10.1.0(jiti@2.6.1)) + version: 2.32.0(@typescript-eslint/parser@8.57.2(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2))(eslint@10.1.0(jiti@2.6.1)) express: specifier: 5.2.1 version: 5.2.1 @@ -284,8 +284,8 @@ importers: specifier: 6.0.2 version: 6.0.2 undici: - specifier: 7.24.5 - version: 7.24.5 + specifier: 7.24.6 + version: 7.24.6 unenv: specifier: ^1.10.0 version: 1.10.0 @@ -314,8 +314,8 @@ importers: specifier: workspace:* version: link:../../../packages/angular/ssr '@vitest/coverage-v8': - specifier: 4.1.0 - version: 4.1.0(vitest@4.1.0(@opentelemetry/api@1.9.0)(@types/node@24.12.0)(jsdom@29.0.1)(vite@7.3.1(@types/node@24.12.0)(jiti@2.6.1)(less@4.6.4)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))) + specifier: 4.1.2 + version: 4.1.2(vitest@4.1.2(@opentelemetry/api@1.9.0)(@types/node@24.12.0)(jiti@2.6.1)(jsdom@29.0.1)(less@4.6.4)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) browser-sync: specifier: 3.0.4 version: 3.0.4(bufferutil@4.1.0)(utf-8-validate@6.0.6) @@ -329,8 +329,8 @@ importers: specifier: 7.8.2 version: 7.8.2 vitest: - specifier: 4.1.0 - version: 4.1.0(@opentelemetry/api@1.9.0)(@types/node@24.12.0)(jsdom@29.0.1)(vite@7.3.1(@types/node@24.12.0)(jiti@2.6.1)(less@4.6.4)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) + specifier: 4.1.2 + version: 4.1.2(@opentelemetry/api@1.9.0)(@types/node@24.12.0)(jiti@2.6.1)(jsdom@29.0.1)(less@4.6.4)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) packages/angular/build: dependencies: @@ -353,8 +353,8 @@ importers: specifier: 6.0.10 version: 6.0.10(@types/node@24.12.0) '@vitejs/plugin-basic-ssl': - specifier: 2.2.0 - version: 2.2.0(vite@7.3.1(@types/node@24.12.0)(jiti@2.6.1)(less@4.6.4)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) + specifier: 2.3.0 + version: 2.3.0(vite@7.3.1(@types/node@24.12.0)(jiti@2.6.1)(less@4.6.4)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) beasties: specifier: 0.4.1 version: 0.4.1 @@ -386,14 +386,14 @@ importers: specifier: 8.0.0 version: 8.0.0 picomatch: - specifier: 4.0.3 - version: 4.0.3 + specifier: 4.0.4 + version: 4.0.4 piscina: specifier: 5.1.4 version: 5.1.4 rolldown: - specifier: 1.0.0-rc.10 - version: 1.0.0-rc.10 + specifier: 1.0.0-rc.12 + version: 1.0.0-rc.12 sass: specifier: 1.98.0 version: 1.98.0 @@ -435,8 +435,8 @@ importers: specifier: 7.8.2 version: 7.8.2 vitest: - specifier: 4.1.0 - version: 4.1.0(@opentelemetry/api@1.9.0)(@types/node@24.12.0)(jsdom@29.0.1)(vite@7.3.1(@types/node@24.12.0)(jiti@2.6.1)(less@4.6.4)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) + specifier: 4.1.2 + version: 4.1.2(@opentelemetry/api@1.9.0)(@types/node@24.12.0)(jiti@2.6.1)(jsdom@29.0.1)(less@4.6.4)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) optionalDependencies: lmdb: specifier: 3.5.2 @@ -460,8 +460,8 @@ importers: specifier: 4.2.2 version: 4.2.2(@inquirer/prompts@8.3.2(@types/node@24.12.0))(@types/node@24.12.0)(listr2@10.2.1) '@modelcontextprotocol/sdk': - specifier: 1.27.1 - version: 1.27.1(zod@4.3.6) + specifier: 1.28.0 + version: 1.28.0(zod@4.3.6) '@schematics/angular': specifier: workspace:0.0.0-PLACEHOLDER version: link:../../schematics/angular @@ -469,8 +469,8 @@ importers: specifier: 1.1.0 version: 1.1.0 algoliasearch: - specifier: 5.49.2 - version: 5.49.2 + specifier: 5.50.0 + version: 5.50.0 ini: specifier: 6.0.0 version: 6.0.0 @@ -650,8 +650,8 @@ importers: specifier: 3.3.1 version: 3.3.1 mini-css-extract-plugin: - specifier: 2.10.1 - version: 2.10.1(webpack@5.105.4(esbuild@0.27.3)) + specifier: 2.10.2 + version: 2.10.2(webpack@5.105.4(esbuild@0.27.3)) open: specifier: 11.0.0 version: 11.0.0 @@ -659,8 +659,8 @@ importers: specifier: 9.3.0 version: 9.3.0 picomatch: - specifier: 4.0.3 - version: 4.0.3 + specifier: 4.0.4 + version: 4.0.4 piscina: specifier: 5.1.4 version: 5.1.4 @@ -726,8 +726,8 @@ importers: specifier: 22.0.0-next.1 version: 22.0.0-next.1(@angular/compiler-cli@22.0.0-next.5(@angular/compiler@22.0.0-next.5)(typescript@6.0.2))(tslib@2.8.1)(typescript@6.0.2) undici: - specifier: 7.24.5 - version: 7.24.5 + specifier: 7.24.6 + version: 7.24.6 optionalDependencies: esbuild: specifier: 0.27.3 @@ -767,8 +767,8 @@ importers: specifier: 3.3.1 version: 3.3.1 picomatch: - specifier: 4.0.3 - version: 4.0.3 + specifier: 4.0.4 + version: 4.0.4 rxjs: specifier: 7.8.2 version: 7.8.2 @@ -866,60 +866,60 @@ packages: '@actions/io@3.0.2': resolution: {integrity: sha512-nRBchcMM+QK1pdjO7/idu86rbJI5YHUKCvKs0KxnSYbVe3F51UfGxuZX4Qy/fWlp6l7gWFwIkrOzN+oUK03kfw==} - '@algolia/abtesting@1.15.2': - resolution: {integrity: sha512-rF7vRVE61E0QORw8e2NNdnttcl3jmFMWS9B4hhdga12COe+lMa26bQLfcBn/Nbp9/AF/8gXdaRCPsVns3CnjsA==} + '@algolia/abtesting@1.16.0': + resolution: {integrity: sha512-alHFZ68/i9qLC/muEB07VQ9r7cB8AvCcGX6dVQi2PNHhc/ZQRmmFAv8KK1ay4UiseGSFr7f0nXBKsZ/jRg7e4g==} engines: {node: '>= 14.0.0'} - '@algolia/client-abtesting@5.49.2': - resolution: {integrity: sha512-XyvKCm0RRmovMI/ChaAVjTwpZhXdbgt3iZofK914HeEHLqD1MUFFVLz7M0+Ou7F56UkHXwRbpHwb9xBDNopprQ==} + '@algolia/client-abtesting@5.50.0': + resolution: {integrity: sha512-mfgUdLQNxOAvCZUGzPQxjahEWEPuQkKlV0ZtGmePOa9ZxIQZlk31vRBNbM6ScU8jTH41SCYE77G/lCifDr1SVw==} engines: {node: '>= 14.0.0'} - '@algolia/client-analytics@5.49.2': - resolution: {integrity: sha512-jq/3qvtmj3NijZlhq7A1B0Cl41GfaBpjJxcwukGsYds6aMSCWrEAJ9pUqw/C9B3hAmILYKl7Ljz3N9SFvekD3Q==} + '@algolia/client-analytics@5.50.0': + resolution: {integrity: sha512-5mjokeKYyPaP3Q8IYJEnutI+O4dW/Ixxx5IgsSxT04pCfGqPXxTOH311hTQxyNpcGGEOGrMv8n8Z+UMTPamioQ==} engines: {node: '>= 14.0.0'} - '@algolia/client-common@5.49.2': - resolution: {integrity: sha512-bn0biLequn3epobCfjUqCxlIlurLr4RHu7RaE4trgN+RDcUq6HCVC3/yqq1hwbNYpVtulnTOJzcaxYlSr1fnuw==} + '@algolia/client-common@5.50.0': + resolution: {integrity: sha512-emtOvR6dl3rX3sBJXXbofMNHU1qMQqQSWu319RMrNL5BWoBqyiq7y0Zn6cjJm7aGHV/Qbf+KCCYeWNKEMPI3BQ==} engines: {node: '>= 14.0.0'} - '@algolia/client-insights@5.49.2': - resolution: {integrity: sha512-z14wfFs1T3eeYbCArC8pvntAWsPo9f6hnUGoj8IoRUJTwgJiiySECkm8bmmV47/x0oGHfsVn3kBdjMX0yq0sNA==} + '@algolia/client-insights@5.50.0': + resolution: {integrity: sha512-IerGH2/hcj/6bwkpQg/HHRqmlGN1XwygQWythAk0gZFBrghs9danJaYuSS3ShzLSVoIVth4jY5GDPX9Lbw5cgg==} engines: {node: '>= 14.0.0'} - '@algolia/client-personalization@5.49.2': - resolution: {integrity: sha512-GpRf7yuuAX93+Qt0JGEJZwgtL0MFdjFO9n7dn8s2pA9mTjzl0Sc5+uTk1VPbIAuf7xhCP9Mve+URGb6J+EYxgA==} + '@algolia/client-personalization@5.50.0': + resolution: {integrity: sha512-3idPJeXn5L0MmgP9jk9JJqblrQ/SguN93dNK9z9gfgyupBhHnJMOEjrRYcVgTIfvG13Y04wO+Q0FxE2Ut8PVbA==} engines: {node: '>= 14.0.0'} - '@algolia/client-query-suggestions@5.49.2': - resolution: {integrity: sha512-HZwApmNkp0DiAjZcLYdQLddcG4Agb88OkojiAHGgcm5DVXobT5uSZ9lmyrbw/tmQBJwgu2CNw4zTyXoIB7YbPA==} + '@algolia/client-query-suggestions@5.50.0': + resolution: {integrity: sha512-q7qRoWrQK1a8m5EFQEmPlo7+pg9mVQ8X5jsChtChERre0uS2pdYEDixBBl0ydBSGkdGbLUDufcACIhH/077E4g==} engines: {node: '>= 14.0.0'} - '@algolia/client-search@5.49.2': - resolution: {integrity: sha512-y1IOpG6OSmTpGg/CT0YBb/EAhR2nsC18QWp9Jy8HO9iGySpcwaTvs5kHa17daP3BMTwWyaX9/1tDTDQshZzXdg==} + '@algolia/client-search@5.50.0': + resolution: {integrity: sha512-Jc360x4yqb3eEg4OY4KEIdGePBxZogivKI+OGIU8aLXgAYPTECvzeOBc90312yHA1hr3AeRlAFl0rIc8lQaIrQ==} engines: {node: '>= 14.0.0'} - '@algolia/ingestion@1.49.2': - resolution: {integrity: sha512-YYJRjaZ2bqk923HxE4um7j/Cm3/xoSkF2HC2ZweOF8cXL3sqnlndSUYmCaxHFjNPWLaSHk2IfssX6J/tdKTULw==} + '@algolia/ingestion@1.50.0': + resolution: {integrity: sha512-OS3/Viao+NPpyBbEY3tf6hLewppG+UclD+9i0ju56mq2DrdMJFCkEky6Sk9S5VPcbLzxzg3BqBX6u9Q35w19aQ==} engines: {node: '>= 14.0.0'} - '@algolia/monitoring@1.49.2': - resolution: {integrity: sha512-9WgH+Dha39EQQyGKCHlGYnxW/7W19DIrEbCEbnzwAMpGAv1yTWCHMPXHxYa+LcL3eCp2V/5idD1zHNlIKmHRHg==} + '@algolia/monitoring@1.50.0': + resolution: {integrity: sha512-/znwgSiGufpbJVIoDmeQaHtTq+OMdDawFRbMSJVv+12n79hW+qdQXS8/Uu3BD3yn0BzgVFJEvrsHrCsInZKdhw==} engines: {node: '>= 14.0.0'} - '@algolia/recommend@5.49.2': - resolution: {integrity: sha512-K7Gp5u+JtVYgaVpBxF5rGiM+Ia8SsMdcAJMTDV93rwh00DKNllC19o1g+PwrDjDvyXNrnTEbofzbTs2GLfFyKA==} + '@algolia/recommend@5.50.0': + resolution: {integrity: sha512-dHjUfu4jfjdQiKDpCpAnM7LP5yfG0oNShtfpF5rMCel6/4HIoqJ4DC4h5GKDzgrvJYtgAhblo0AYBmOM00T+lQ==} engines: {node: '>= 14.0.0'} - '@algolia/requester-browser-xhr@5.49.2': - resolution: {integrity: sha512-3UhYCcWX6fbtN8ABcxZlhaQEwXFh3CsFtARyyadQShHMPe3mJV9Wel4FpJTa+seugRkbezFz0tt6aPTZSYTBuA==} + '@algolia/requester-browser-xhr@5.50.0': + resolution: {integrity: sha512-bffIbUljAWnh/Ctu5uScORajuUavqmZ0ACYd1fQQeSSYA9NNN83ynO26pSc2dZRXpSK0fkc1//qSSFXMKGu+aw==} engines: {node: '>= 14.0.0'} - '@algolia/requester-fetch@5.49.2': - resolution: {integrity: sha512-G94VKSGbsr+WjsDDOBe5QDQ82QYgxvpxRGJfCHZBnYKYsy/jv9qGIDb93biza+LJWizQBUtDj7bZzp3QZyzhPQ==} + '@algolia/requester-fetch@5.50.0': + resolution: {integrity: sha512-y0EwNvPGvkM+yTAqqO6Gpt9wVGm3CLDtpLvNEiB3VGvN3WzfkjZGtLUsG/ru2kVJIIU7QcV0puuYgEpBeFxcJg==} engines: {node: '>= 14.0.0'} - '@algolia/requester-node-http@5.49.2': - resolution: {integrity: sha512-UuihBGHafG/ENsrcTGAn5rsOffrCIRuHMOsD85fZGLEY92ate+BMTUqxz60dv5zerh8ZumN4bRm8eW2z9L11jA==} + '@algolia/requester-node-http@5.50.0': + resolution: {integrity: sha512-xpwefe4fCOWnZgXCbkGpqQY6jgBSCf2hmgnySbyzZIccrv3SoashHKGPE4x6vVG+gdHrGciMTAcDo9HOZwH22Q==} engines: {node: '>= 14.0.0'} '@ampproject/remapping@2.3.0': @@ -2500,8 +2500,8 @@ packages: cpu: [x64] os: [win32] - '@modelcontextprotocol/sdk@1.27.1': - resolution: {integrity: sha512-sr6GbP+4edBwFndLbM60gf07z0FQ79gaExpnsjMGePXqFcSSb7t6iscpjk9DhFhwd+mTEQrzNafGP8/iGGFYaA==} + '@modelcontextprotocol/sdk@1.28.0': + resolution: {integrity: sha512-gmloF+i+flI8ouQK7MWW4mOwuMh4RePBuPFAEPC6+pdqyWOUMDOixb6qZ69owLJpz6XmyllCouc4t8YWO+E2Nw==} engines: {node: '>=18'} peerDependencies: '@cfworker/json-schema': ^4.1.1 @@ -2821,8 +2821,8 @@ packages: resolution: {integrity: sha512-cifvXDhcqMwwTlTK04GBNeIe7yyo28Mfby85QXFe1Yk8nmi36Ab/5UQwptOx84SsoGNRg+EVSjwzfSZMy6pmlw==} engines: {node: '>=14'} - '@oxc-project/types@0.120.0': - resolution: {integrity: sha512-k1YNu55DuvAip/MGE1FTsIuU3FUCn6v/ujG9V7Nq5Df/kX2CWb13hhwD0lmJGMGqE+bE1MXvv9SZVnMzEXlWcg==} + '@oxc-project/types@0.122.0': + resolution: {integrity: sha512-oLAl5kBpV4w69UtFZ9xqcmTi+GENWOcPF7FCrczTiBbmC0ibXxCwyvZGbO39rCVEuLGAZM84DH0pUIyyv/YJzA==} '@parcel/watcher-android-arm64@2.5.6': resolution: {integrity: sha512-YQxSS34tPF/6ZG7r/Ih9xy+kP/WwediEUsqmtf0cuCV5TPPKw/PQHRhueUo6JdeFJaqV3pyjm0GdYjZotbRt/A==} @@ -3008,103 +3008,103 @@ packages: engines: {node: '>=18'} hasBin: true - '@rolldown/binding-android-arm64@1.0.0-rc.10': - resolution: {integrity: sha512-jOHxwXhxmFKuXztiu1ORieJeTbx5vrTkcOkkkn2d35726+iwhrY1w/+nYY/AGgF12thg33qC3R1LMBF5tHTZHg==} + '@rolldown/binding-android-arm64@1.0.0-rc.12': + resolution: {integrity: sha512-pv1y2Fv0JybcykuiiD3qBOBdz6RteYojRFY1d+b95WVuzx211CRh+ytI/+9iVyWQ6koTh5dawe4S/yRfOFjgaA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [android] - '@rolldown/binding-darwin-arm64@1.0.0-rc.10': - resolution: {integrity: sha512-gED05Teg/vtTZbIJBc4VNMAxAFDUPkuO/rAIyyxZjTj1a1/s6z5TII/5yMGZ0uLRCifEtwUQn8OlYzuYc0m70w==} + '@rolldown/binding-darwin-arm64@1.0.0-rc.12': + resolution: {integrity: sha512-cFYr6zTG/3PXXF3pUO+umXxt1wkRK/0AYT8lDwuqvRC+LuKYWSAQAQZjCWDQpAH172ZV6ieYrNnFzVVcnSflAg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [darwin] - '@rolldown/binding-darwin-x64@1.0.0-rc.10': - resolution: {integrity: sha512-rI15NcM1mA48lqrIxVkHfAqcyFLcQwyXWThy+BQ5+mkKKPvSO26ir+ZDp36AgYoYVkqvMcdS8zOE6SeBsR9e8A==} + '@rolldown/binding-darwin-x64@1.0.0-rc.12': + resolution: {integrity: sha512-ZCsYknnHzeXYps0lGBz8JrF37GpE9bFVefrlmDrAQhOEi4IOIlcoU1+FwHEtyXGx2VkYAvhu7dyBf75EJQffBw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [darwin] - '@rolldown/binding-freebsd-x64@1.0.0-rc.10': - resolution: {integrity: sha512-XZRXHdTa+4ME1MuDVp021+doQ+z6Ei4CCFmNc5/sKbqb8YmkiJdj8QKlV3rCI0AJtAeSB5n0WGPuJWNL9p/L2w==} + '@rolldown/binding-freebsd-x64@1.0.0-rc.12': + resolution: {integrity: sha512-dMLeprcVsyJsKolRXyoTH3NL6qtsT0Y2xeuEA8WQJquWFXkEC4bcu1rLZZSnZRMtAqwtrF/Ib9Ddtpa/Gkge9Q==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [freebsd] - '@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.10': - resolution: {integrity: sha512-R0SQMRluISSLzFE20sPWYHVmJdDQnRyc/FzSCN72BqQmh2SOZUFG+N3/vBZpR4C6WpEUVYJLrYUXaj43sJsNLA==} + '@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.12': + resolution: {integrity: sha512-YqWjAgGC/9M1lz3GR1r1rP79nMgo3mQiiA+Hfo+pvKFK1fAJ1bCi0ZQVh8noOqNacuY1qIcfyVfP6HoyBRZ85Q==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [linux] - '@rolldown/binding-linux-arm64-gnu@1.0.0-rc.10': - resolution: {integrity: sha512-Y1reMrV/o+cwpduYhJuOE3OMKx32RMYCidf14y+HssARRmhDuWXJ4yVguDg2R/8SyyGNo+auzz64LnPK9Hq6jg==} + '@rolldown/binding-linux-arm64-gnu@1.0.0-rc.12': + resolution: {integrity: sha512-/I5AS4cIroLpslsmzXfwbe5OmWvSsrFuEw3mwvbQ1kDxJ822hFHIx+vsN/TAzNVyepI/j/GSzrtCIwQPeKCLIg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] libc: [glibc] - '@rolldown/binding-linux-arm64-musl@1.0.0-rc.10': - resolution: {integrity: sha512-vELN+HNb2IzuzSBUOD4NHmP9yrGwl1DVM29wlQvx1OLSclL0NgVWnVDKl/8tEks79EFek/kebQKnNJkIAA4W2g==} + '@rolldown/binding-linux-arm64-musl@1.0.0-rc.12': + resolution: {integrity: sha512-V6/wZztnBqlx5hJQqNWwFdxIKN0m38p8Jas+VoSfgH54HSj9tKTt1dZvG6JRHcjh6D7TvrJPWFGaY9UBVOaWPw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] libc: [musl] - '@rolldown/binding-linux-ppc64-gnu@1.0.0-rc.10': - resolution: {integrity: sha512-ZqrufYTgzxbHwpqOjzSsb0UV/aV2TFIY5rP8HdsiPTv/CuAgCRjM6s9cYFwQ4CNH+hf9Y4erHW1GjZuZ7WoI7w==} + '@rolldown/binding-linux-ppc64-gnu@1.0.0-rc.12': + resolution: {integrity: sha512-AP3E9BpcUYliZCxa3w5Kwj9OtEVDYK6sVoUzy4vTOJsjPOgdaJZKFmN4oOlX0Wp0RPV2ETfmIra9x1xuayFB7g==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [ppc64] os: [linux] libc: [glibc] - '@rolldown/binding-linux-s390x-gnu@1.0.0-rc.10': - resolution: {integrity: sha512-gSlmVS1FZJSRicA6IyjoRoKAFK7IIHBs7xJuHRSmjImqk3mPPWbR7RhbnfH2G6bcmMEllCt2vQ/7u9e6bBnByg==} + '@rolldown/binding-linux-s390x-gnu@1.0.0-rc.12': + resolution: {integrity: sha512-nWwpvUSPkoFmZo0kQazZYOrT7J5DGOJ/+QHHzjvNlooDZED8oH82Yg67HvehPPLAg5fUff7TfWFHQS8IV1n3og==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [s390x] os: [linux] libc: [glibc] - '@rolldown/binding-linux-x64-gnu@1.0.0-rc.10': - resolution: {integrity: sha512-eOCKUpluKgfObT2pHjztnaWEIbUabWzk3qPZ5PuacuPmr4+JtQG4k2vGTY0H15edaTnicgU428XW/IH6AimcQw==} + '@rolldown/binding-linux-x64-gnu@1.0.0-rc.12': + resolution: {integrity: sha512-RNrafz5bcwRy+O9e6P8Z/OCAJW/A+qtBczIqVYwTs14pf4iV1/+eKEjdOUta93q2TsT/FI0XYDP3TCky38LMAg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] libc: [glibc] - '@rolldown/binding-linux-x64-musl@1.0.0-rc.10': - resolution: {integrity: sha512-Xdf2jQbfQowJnLcgYfD/m0Uu0Qj5OdxKallD78/IPPfzaiaI4KRAwZzHcKQ4ig1gtg1SuzC7jovNiM2TzQsBXA==} + '@rolldown/binding-linux-x64-musl@1.0.0-rc.12': + resolution: {integrity: sha512-Jpw/0iwoKWx3LJ2rc1yjFrj+T7iHZn2JDg1Yny1ma0luviFS4mhAIcd1LFNxK3EYu3DHWCps0ydXQ5i/rrJ2ig==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] libc: [musl] - '@rolldown/binding-openharmony-arm64@1.0.0-rc.10': - resolution: {integrity: sha512-o1hYe8hLi1EY6jgPFyxQgQ1wcycX+qz8eEbVmot2hFkgUzPxy9+kF0u0NIQBeDq+Mko47AkaFFaChcvZa9UX9Q==} + '@rolldown/binding-openharmony-arm64@1.0.0-rc.12': + resolution: {integrity: sha512-vRugONE4yMfVn0+7lUKdKvN4D5YusEiPilaoO2sgUWpCvrncvWgPMzK00ZFFJuiPgLwgFNP5eSiUlv2tfc+lpA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [openharmony] - '@rolldown/binding-wasm32-wasi@1.0.0-rc.10': - resolution: {integrity: sha512-Ugv9o7qYJudqQO5Y5y2N2SOo6S4WiqiNOpuQyoPInnhVzCY+wi/GHltcLHypG9DEUYMB0iTB/huJrpadiAcNcA==} + '@rolldown/binding-wasm32-wasi@1.0.0-rc.12': + resolution: {integrity: sha512-ykGiLr/6kkiHc0XnBfmFJuCjr5ZYKKofkx+chJWDjitX+KsJuAmrzWhwyOMSHzPhzOHOy7u9HlFoa5MoAOJ/Zg==} engines: {node: '>=14.0.0'} cpu: [wasm32] - '@rolldown/binding-win32-arm64-msvc@1.0.0-rc.10': - resolution: {integrity: sha512-7UODQb4fQUNT/vmgDZBl3XOBAIOutP5R3O/rkxg0aLfEGQ4opbCgU5vOw/scPe4xOqBwL9fw7/RP1vAMZ6QlAQ==} + '@rolldown/binding-win32-arm64-msvc@1.0.0-rc.12': + resolution: {integrity: sha512-5eOND4duWkwx1AzCxadcOrNeighiLwMInEADT0YM7xeEOOFcovWZCq8dadXgcRHSf3Ulh1kFo/qvzoFiCLOL1Q==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [win32] - '@rolldown/binding-win32-x64-msvc@1.0.0-rc.10': - resolution: {integrity: sha512-PYxKHMVHOb5NJuDL53vBUl1VwUjymDcYI6rzpIni0C9+9mTiJedvUxSk7/RPp7OOAm3v+EjgMu9bIy3N6b408w==} + '@rolldown/binding-win32-x64-msvc@1.0.0-rc.12': + resolution: {integrity: sha512-PyqoipaswDLAZtot351MLhrlrh6lcZPo2LSYE+VDxbVk24LVKAGOuE4hb8xZQmrPAuEtTZW8E6D2zc5EUZX4Lw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [win32] - '@rolldown/pluginutils@1.0.0-rc.10': - resolution: {integrity: sha512-UkVDEFk1w3mveXeKgaTuYfKWtPbvgck1dT8TUG3bnccrH0XtLTuAyfCoks4Q/M5ZGToSVJTIQYCzy2g/atAOeg==} + '@rolldown/pluginutils@1.0.0-rc.12': + resolution: {integrity: sha512-HHMwmarRKvoFsJorqYlFeFRzXZqCt2ETQlEDOb9aqssrnVBB1/+xgTGtuTrIk5vzLNX1MjMtTf7W9z3tsSbrxw==} '@rollup/plugin-alias@6.0.0': resolution: {integrity: sha512-tPCzJOtS7uuVZd+xPhoy5W4vThe6KWXNmsFCNktaAh5RTqcLiSfT4huPQIXkgJ6YCOjJHvecOAzQxLFhPxKr+g==} @@ -3594,67 +3594,63 @@ packages: '@types/yauzl@2.10.3': resolution: {integrity: sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==} - '@typescript-eslint/eslint-plugin@8.57.1': - resolution: {integrity: sha512-Gn3aqnvNl4NGc6x3/Bqk1AOn0thyTU9bqDRhiRnUWezgvr2OnhYCWCgC8zXXRVqBsIL1pSDt7T9nJUe0oM0kDQ==} + '@typescript-eslint/eslint-plugin@8.57.2': + resolution: {integrity: sha512-NZZgp0Fm2IkD+La5PR81sd+g+8oS6JwJje+aRWsDocxHkjyRw0J5L5ZTlN3LI1LlOcGL7ph3eaIUmTXMIjLk0w==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - '@typescript-eslint/parser': ^8.57.1 + '@typescript-eslint/parser': ^8.57.2 eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/parser@8.57.1': - resolution: {integrity: sha512-k4eNDan0EIMTT/dUKc/g+rsJ6wcHYhNPdY19VoX/EOtaAG8DLtKCykhrUnuHPYvinn5jhAPgD2Qw9hXBwrahsw==} + '@typescript-eslint/parser@8.57.2': + resolution: {integrity: sha512-30ScMRHIAD33JJQkgfGW1t8CURZtjc2JpTrq5n2HFhOefbAhb7ucc7xJwdWcrEtqUIYJ73Nybpsggii6GtAHjA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/project-service@8.57.1': - resolution: {integrity: sha512-vx1F37BRO1OftsYlmG9xay1TqnjNVlqALymwWVuYTdo18XuKxtBpCj1QlzNIEHlvlB27osvXFWptYiEWsVdYsg==} + '@typescript-eslint/project-service@8.57.2': + resolution: {integrity: sha512-FuH0wipFywXRTHf+bTTjNyuNQQsQC3qh/dYzaM4I4W0jrCqjCVuUh99+xd9KamUfmCGPvbO8NDngo/vsnNVqgw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/scope-manager@8.57.1': - resolution: {integrity: sha512-hs/QcpCwlwT2L5S+3fT6gp0PabyGk4Q0Rv2doJXA0435/OpnSR3VRgvrp8Xdoc3UAYSg9cyUjTeFXZEPg/3OKg==} + '@typescript-eslint/scope-manager@8.57.2': + resolution: {integrity: sha512-snZKH+W4WbWkrBqj4gUNRIGb/jipDW3qMqVJ4C9rzdFc+wLwruxk+2a5D+uoFcKPAqyqEnSb4l2ULuZf95eSkw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/tsconfig-utils@8.57.1': - resolution: {integrity: sha512-0lgOZB8cl19fHO4eI46YUx2EceQqhgkPSuCGLlGi79L2jwYY1cxeYc1Nae8Aw1xjgW3PKVDLlr3YJ6Bxx8HkWg==} + '@typescript-eslint/tsconfig-utils@8.57.2': + resolution: {integrity: sha512-3Lm5DSM+DCowsUOJC+YqHHnKEfFh5CoGkj5Z31NQSNF4l5wdOwqGn99wmwN/LImhfY3KJnmordBq/4+VDe2eKw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/type-utils@8.57.1': - resolution: {integrity: sha512-+Bwwm0ScukFdyoJsh2u6pp4S9ktegF98pYUU0hkphOOqdMB+1sNQhIz8y5E9+4pOioZijrkfNO/HUJVAFFfPKA==} + '@typescript-eslint/type-utils@8.57.2': + resolution: {integrity: sha512-Co6ZCShm6kIbAM/s+oYVpKFfW7LBc6FXoPXjTRQ449PPNBY8U0KZXuevz5IFuuUj2H9ss40atTaf9dlGLzbWZg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/types@8.57.1': - resolution: {integrity: sha512-S29BOBPJSFUiblEl6RzPPjJt6w25A6XsBqRVDt53tA/tlL8q7ceQNZHTjPeONt/3S7KRI4quk+yP9jK2WjBiPQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/types@8.57.2': resolution: {integrity: sha512-/iZM6FnM4tnx9csuTxspMW4BOSegshwX5oBDznJ7S4WggL7Vczz5d2W11ecc4vRrQMQHXRSxzrCsyG5EsPPTbA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/typescript-estree@8.57.1': - resolution: {integrity: sha512-ybe2hS9G6pXpqGtPli9Gx9quNV0TWLOmh58ADlmZe9DguLq0tiAKVjirSbtM1szG6+QH6rVXyU6GTLQbWnMY+g==} + '@typescript-eslint/typescript-estree@8.57.2': + resolution: {integrity: sha512-2MKM+I6g8tJxfSmFKOnHv2t8Sk3T6rF20A1Puk0svLK+uVapDZB/4pfAeB7nE83uAZrU6OxW+HmOd5wHVdXwXA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/utils@8.57.1': - resolution: {integrity: sha512-XUNSJ/lEVFttPMMoDVA2r2bwrl8/oPx8cURtczkSEswY5T3AeLmCy+EKWQNdL4u0MmAHOjcWrqJp2cdvgjn8dQ==} + '@typescript-eslint/utils@8.57.2': + resolution: {integrity: sha512-krRIbvPK1ju1WBKIefiX+bngPs+odIQUtR7kymzPfo1POVw3jlF+nLkmexdSSd4UCbDcQn+wMBATOOmpBbqgKg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/visitor-keys@8.57.1': - resolution: {integrity: sha512-YWnmJkXbofiz9KbnbbwuA2rpGkFPLbAIetcCNO6mJ8gdhdZ/v7WDXsoGFAJuM6ikUFKTlSQnjWnVO4ux+UzS6A==} + '@typescript-eslint/visitor-keys@8.57.2': + resolution: {integrity: sha512-zhahknjobV2FiD6Ee9iLbS7OV9zi10rG26odsQdfBO/hjSzUQbkIYgda+iNKK1zNiW2ey+Lf8MU5btN17V3dUw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@verdaccio/auth@8.0.0-next-8.33': @@ -3736,49 +3732,49 @@ packages: resolution: {integrity: sha512-WLE8qTBgzuZPa+gq/nKPWtF4MTMayaeOD3Qy6yfChxNvFXY+6yPFkS0QocXL7CdB2A+w+ylgTOOzKr0tWvyTpQ==} engines: {node: '>=18'} - '@vitejs/plugin-basic-ssl@2.2.0': - resolution: {integrity: sha512-nmyQ1HGRkfUxjsv3jw0+hMhEdZdrtkvMTdkzRUaRWfiO6PCWw2V2Pz3gldCq96Tn9S8htcgdTxw/gmbLLEbfYw==} + '@vitejs/plugin-basic-ssl@2.3.0': + resolution: {integrity: sha512-bdyo8rB3NnQbikdMpHaML9Z1OZPBu6fFOBo+OtxsBlvMJtysWskmBcnbIDhUqgC8tcxNv/a+BcV5U+2nQMm1OQ==} engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} peerDependencies: vite: ^6.0.0 || ^7.0.0 || ^8.0.0 - '@vitest/coverage-v8@4.1.0': - resolution: {integrity: sha512-nDWulKeik2bL2Va/Wl4x7DLuTKAXa906iRFooIRPR+huHkcvp9QDkPQ2RJdmjOFrqOqvNfoSQLF68deE3xC3CQ==} + '@vitest/coverage-v8@4.1.2': + resolution: {integrity: sha512-sPK//PHO+kAkScb8XITeB1bf7fsk85Km7+rt4eeuRR3VS1/crD47cmV5wicisJmjNdfeokTZwjMk4Mj2d58Mgg==} peerDependencies: - '@vitest/browser': 4.1.0 - vitest: 4.1.0 + '@vitest/browser': 4.1.2 + vitest: 4.1.2 peerDependenciesMeta: '@vitest/browser': optional: true - '@vitest/expect@4.1.0': - resolution: {integrity: sha512-EIxG7k4wlWweuCLG9Y5InKFwpMEOyrMb6ZJ1ihYu02LVj/bzUwn2VMU+13PinsjRW75XnITeFrQBMH5+dLvCDA==} + '@vitest/expect@4.1.2': + resolution: {integrity: sha512-gbu+7B0YgUJ2nkdsRJrFFW6X7NTP44WlhiclHniUhxADQJH5Szt9mZ9hWnJPJ8YwOK5zUOSSlSvyzRf0u1DSBQ==} - '@vitest/mocker@4.1.0': - resolution: {integrity: sha512-evxREh+Hork43+Y4IOhTo+h5lGmVRyjqI739Rz4RlUPqwrkFFDF6EMvOOYjTx4E8Tl6gyCLRL8Mu7Ry12a13Tw==} + '@vitest/mocker@4.1.2': + resolution: {integrity: sha512-Ize4iQtEALHDttPRCmN+FKqOl2vxTiNUhzobQFFt/BM1lRUTG7zRCLOykG/6Vo4E4hnUdfVLo5/eqKPukcWW7Q==} peerDependencies: msw: ^2.4.9 - vite: ^6.0.0 || ^7.0.0 || ^8.0.0-0 + vite: ^6.0.0 || ^7.0.0 || ^8.0.0 peerDependenciesMeta: msw: optional: true vite: optional: true - '@vitest/pretty-format@4.1.0': - resolution: {integrity: sha512-3RZLZlh88Ib0J7NQTRATfc/3ZPOnSUn2uDBUoGNn5T36+bALixmzphN26OUD3LRXWkJu4H0s5vvUeqBiw+kS0A==} + '@vitest/pretty-format@4.1.2': + resolution: {integrity: sha512-dwQga8aejqeuB+TvXCMzSQemvV9hNEtDDpgUKDzOmNQayl2OG241PSWeJwKRH3CiC+sESrmoFd49rfnq7T4RnA==} - '@vitest/runner@4.1.0': - resolution: {integrity: sha512-Duvx2OzQ7d6OjchL+trw+aSrb9idh7pnNfxrklo14p3zmNL4qPCDeIJAK+eBKYjkIwG96Bc6vYuxhqDXQOWpoQ==} + '@vitest/runner@4.1.2': + resolution: {integrity: sha512-Gr+FQan34CdiYAwpGJmQG8PgkyFVmARK8/xSijia3eTFgVfpcpztWLuP6FttGNfPLJhaZVP/euvujeNYar36OQ==} - '@vitest/snapshot@4.1.0': - resolution: {integrity: sha512-0Vy9euT1kgsnj1CHttwi9i9o+4rRLEaPRSOJ5gyv579GJkNpgJK+B4HSv/rAWixx2wdAFci1X4CEPjiu2bXIMg==} + '@vitest/snapshot@4.1.2': + resolution: {integrity: sha512-g7yfUmxYS4mNxk31qbOYsSt2F4m1E02LFqO53Xpzg3zKMhLAPZAjjfyl9e6z7HrW6LvUdTwAQR3HHfLjpko16A==} - '@vitest/spy@4.1.0': - resolution: {integrity: sha512-pz77k+PgNpyMDv2FV6qmk5ZVau6c3R8HC8v342T2xlFxQKTrSeYw9waIJG8KgV9fFwAtTu4ceRzMivPTH6wSxw==} + '@vitest/spy@4.1.2': + resolution: {integrity: sha512-DU4fBnbVCJGNBwVA6xSToNXrkZNSiw59H8tcuUspVMsBDBST4nfvsPsEHDHGtWRRnqBERBQu7TrTKskmjqTXKA==} - '@vitest/utils@4.1.0': - resolution: {integrity: sha512-XfPXT6a8TZY3dcGY8EdwsBulFCIw+BeeX0RZn2x/BtiY/75YGh8FeWGG8QISN/WhaqSrE2OrlDgtF8q5uhOTmw==} + '@vitest/utils@4.1.2': + resolution: {integrity: sha512-xw2/TiX82lQHA06cgbqRKFb5lCAy3axQ4H4SoUFhUsg+wztiet+co86IAMDtF6Vm1hc7J6j09oh/rgDn+JdKIQ==} '@webassemblyjs/ast@1.14.1': resolution: {integrity: sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==} @@ -3915,8 +3911,8 @@ packages: ajv@8.18.0: resolution: {integrity: sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==} - algoliasearch@5.49.2: - resolution: {integrity: sha512-1K0wtDaRONwfhL4h8bbJ9qTjmY6rhGgRvvagXkMBsAOMNr+3Q2SffHECh9DIuNVrMA1JwA0zCwhyepgBZVakng==} + algoliasearch@5.50.0: + resolution: {integrity: sha512-yE5I83Q2s8euVou8Y3feXK08wyZInJWLYXgWO6Xti9jBUEZAGUahyeQ7wSZWkifLWVnQVKEz5RAmBlXG5nqxog==} engines: {node: '>= 14.0.0'} ansi-colors@4.1.3: @@ -6327,8 +6323,8 @@ packages: resolution: {integrity: sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==} engines: {node: '>=10'} - mini-css-extract-plugin@2.10.1: - resolution: {integrity: sha512-k7G3Y5QOegl380tXmZ68foBRRjE9Ljavx835ObdvmZjQ639izvZD8CS7BkWw1qKPPzHsGL/JDhl0uyU1zc2rJw==} + mini-css-extract-plugin@2.10.2: + resolution: {integrity: sha512-AOSS0IdEB95ayVkxn5oGzNQwqAi2J0Jb/kKm43t7H73s8+f5873g0yuj0PNvK4dO75mu5DHg4nlgp4k6Kga8eg==} engines: {node: '>= 12.13.0'} peerDependencies: webpack: ^5.0.0 @@ -6807,8 +6803,8 @@ packages: resolution: {integrity: sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==} engines: {node: '>=8.6'} - picomatch@4.0.3: - resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==} + picomatch@4.0.4: + resolution: {integrity: sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==} engines: {node: '>=12'} pify@3.0.0: @@ -7174,8 +7170,8 @@ packages: resolution: {integrity: sha512-l0OE8wL34P4nJH/H2ffoaniAokM2qSmrtXHmlpvYr5AVVX8msAyW0l8NVJFDxlSK4u3Uh/f41cQheDVdnYijwQ==} hasBin: true - rolldown@1.0.0-rc.10: - resolution: {integrity: sha512-q7j6vvarRFmKpgJUT8HCAUljkgzEp4LAhPlJUvQhA5LA1SUL36s5QCysMutErzL3EbNOZOkoziSx9iZC4FddKA==} + rolldown@1.0.0-rc.12: + resolution: {integrity: sha512-yP4USLIMYrwpPHEFB5JGH1uxhcslv6/hL0OyvTuY+3qlOSJvZ7ntYnoWpehBxufkgN0cvXxppuTu5hHa/zPh+A==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true @@ -7891,6 +7887,10 @@ packages: resolution: {integrity: sha512-3IWdCpjgxp15CbJnsi/Y9TCDE7HWVN19j1hmzVhoAkY/+CJx449tVxT5wZc1Gwg8J+P0LWvzlBzxYRnHJ+1i7Q==} engines: {node: '>=20.18.1'} + undici@7.24.6: + resolution: {integrity: sha512-Xi4agocCbRzt0yYMZGMA6ApD7gvtUFaxm4ZmeacWI4cZxaF6C+8I8QfofC20NAePiB/IcvZmzkJ7XPa471AEtA==} + engines: {node: '>=20.18.1'} + unenv@1.10.0: resolution: {integrity: sha512-wY5bskBQFL9n3Eca5XnhH6KbUo/tfvkwm9OpcdCvLaeA7piBNbavbOKJySEwQ1V0RH6HvNlSAFRTpvTqgKRQXQ==} @@ -8033,21 +8033,20 @@ packages: yaml: optional: true - vitest@4.1.0: - resolution: {integrity: sha512-YbDrMF9jM2Lqc++2530UourxZHmkKLxrs4+mYhEwqWS97WJ7wOYEkcr+QfRgJ3PW9wz3odRijLZjHEaRLTNbqw==} + vitest@4.1.2: + resolution: {integrity: sha512-xjR1dMTVHlFLh98JE3i/f/WePqJsah4A0FK9cc8Ehp9Udk0AZk6ccpIZhh1qJ/yxVWRZ+Q54ocnD8TXmkhspGg==} engines: {node: ^20.0.0 || ^22.0.0 || >=24.0.0} hasBin: true peerDependencies: '@edge-runtime/vm': '*' '@opentelemetry/api': ^1.9.0 '@types/node': ^20.0.0 || ^22.0.0 || >=24.0.0 - '@vitest/browser-playwright': 4.1.0 - '@vitest/browser-preview': 4.1.0 - '@vitest/browser-webdriverio': 4.1.0 - '@vitest/ui': 4.1.0 + '@vitest/browser-playwright': 4.1.2 + '@vitest/browser-preview': 4.1.2 + '@vitest/browser-webdriverio': 4.1.2 + '@vitest/ui': 4.1.2 happy-dom: '*' jsdom: '*' - vite: ^6.0.0 || ^7.0.0 || ^8.0.0-0 peerDependenciesMeta: '@edge-runtime/vm': optional: true @@ -8378,89 +8377,89 @@ snapshots: '@actions/io@3.0.2': {} - '@algolia/abtesting@1.15.2': + '@algolia/abtesting@1.16.0': dependencies: - '@algolia/client-common': 5.49.2 - '@algolia/requester-browser-xhr': 5.49.2 - '@algolia/requester-fetch': 5.49.2 - '@algolia/requester-node-http': 5.49.2 + '@algolia/client-common': 5.50.0 + '@algolia/requester-browser-xhr': 5.50.0 + '@algolia/requester-fetch': 5.50.0 + '@algolia/requester-node-http': 5.50.0 - '@algolia/client-abtesting@5.49.2': + '@algolia/client-abtesting@5.50.0': dependencies: - '@algolia/client-common': 5.49.2 - '@algolia/requester-browser-xhr': 5.49.2 - '@algolia/requester-fetch': 5.49.2 - '@algolia/requester-node-http': 5.49.2 + '@algolia/client-common': 5.50.0 + '@algolia/requester-browser-xhr': 5.50.0 + '@algolia/requester-fetch': 5.50.0 + '@algolia/requester-node-http': 5.50.0 - '@algolia/client-analytics@5.49.2': + '@algolia/client-analytics@5.50.0': dependencies: - '@algolia/client-common': 5.49.2 - '@algolia/requester-browser-xhr': 5.49.2 - '@algolia/requester-fetch': 5.49.2 - '@algolia/requester-node-http': 5.49.2 + '@algolia/client-common': 5.50.0 + '@algolia/requester-browser-xhr': 5.50.0 + '@algolia/requester-fetch': 5.50.0 + '@algolia/requester-node-http': 5.50.0 - '@algolia/client-common@5.49.2': {} + '@algolia/client-common@5.50.0': {} - '@algolia/client-insights@5.49.2': + '@algolia/client-insights@5.50.0': dependencies: - '@algolia/client-common': 5.49.2 - '@algolia/requester-browser-xhr': 5.49.2 - '@algolia/requester-fetch': 5.49.2 - '@algolia/requester-node-http': 5.49.2 + '@algolia/client-common': 5.50.0 + '@algolia/requester-browser-xhr': 5.50.0 + '@algolia/requester-fetch': 5.50.0 + '@algolia/requester-node-http': 5.50.0 - '@algolia/client-personalization@5.49.2': + '@algolia/client-personalization@5.50.0': dependencies: - '@algolia/client-common': 5.49.2 - '@algolia/requester-browser-xhr': 5.49.2 - '@algolia/requester-fetch': 5.49.2 - '@algolia/requester-node-http': 5.49.2 + '@algolia/client-common': 5.50.0 + '@algolia/requester-browser-xhr': 5.50.0 + '@algolia/requester-fetch': 5.50.0 + '@algolia/requester-node-http': 5.50.0 - '@algolia/client-query-suggestions@5.49.2': + '@algolia/client-query-suggestions@5.50.0': dependencies: - '@algolia/client-common': 5.49.2 - '@algolia/requester-browser-xhr': 5.49.2 - '@algolia/requester-fetch': 5.49.2 - '@algolia/requester-node-http': 5.49.2 + '@algolia/client-common': 5.50.0 + '@algolia/requester-browser-xhr': 5.50.0 + '@algolia/requester-fetch': 5.50.0 + '@algolia/requester-node-http': 5.50.0 - '@algolia/client-search@5.49.2': + '@algolia/client-search@5.50.0': dependencies: - '@algolia/client-common': 5.49.2 - '@algolia/requester-browser-xhr': 5.49.2 - '@algolia/requester-fetch': 5.49.2 - '@algolia/requester-node-http': 5.49.2 + '@algolia/client-common': 5.50.0 + '@algolia/requester-browser-xhr': 5.50.0 + '@algolia/requester-fetch': 5.50.0 + '@algolia/requester-node-http': 5.50.0 - '@algolia/ingestion@1.49.2': + '@algolia/ingestion@1.50.0': dependencies: - '@algolia/client-common': 5.49.2 - '@algolia/requester-browser-xhr': 5.49.2 - '@algolia/requester-fetch': 5.49.2 - '@algolia/requester-node-http': 5.49.2 + '@algolia/client-common': 5.50.0 + '@algolia/requester-browser-xhr': 5.50.0 + '@algolia/requester-fetch': 5.50.0 + '@algolia/requester-node-http': 5.50.0 - '@algolia/monitoring@1.49.2': + '@algolia/monitoring@1.50.0': dependencies: - '@algolia/client-common': 5.49.2 - '@algolia/requester-browser-xhr': 5.49.2 - '@algolia/requester-fetch': 5.49.2 - '@algolia/requester-node-http': 5.49.2 + '@algolia/client-common': 5.50.0 + '@algolia/requester-browser-xhr': 5.50.0 + '@algolia/requester-fetch': 5.50.0 + '@algolia/requester-node-http': 5.50.0 - '@algolia/recommend@5.49.2': + '@algolia/recommend@5.50.0': dependencies: - '@algolia/client-common': 5.49.2 - '@algolia/requester-browser-xhr': 5.49.2 - '@algolia/requester-fetch': 5.49.2 - '@algolia/requester-node-http': 5.49.2 + '@algolia/client-common': 5.50.0 + '@algolia/requester-browser-xhr': 5.50.0 + '@algolia/requester-fetch': 5.50.0 + '@algolia/requester-node-http': 5.50.0 - '@algolia/requester-browser-xhr@5.49.2': + '@algolia/requester-browser-xhr@5.50.0': dependencies: - '@algolia/client-common': 5.49.2 + '@algolia/client-common': 5.50.0 - '@algolia/requester-fetch@5.49.2': + '@algolia/requester-fetch@5.50.0': dependencies: - '@algolia/client-common': 5.49.2 + '@algolia/client-common': 5.50.0 - '@algolia/requester-node-http@5.49.2': + '@algolia/requester-node-http@5.50.0': dependencies: - '@algolia/client-common': 5.49.2 + '@algolia/client-common': 5.50.0 '@ampproject/remapping@2.3.0': dependencies: @@ -8545,12 +8544,12 @@ snapshots: rxjs: 7.8.2 tslib: 2.8.1 - '@angular/ng-dev@https://codeload.github.com/angular/dev-infra-private-ng-dev-builds/tar.gz/88dbc0543ffbc4df720ac87c0d413fab45ea1491(@modelcontextprotocol/sdk@1.27.1(zod@4.3.6))': + '@angular/ng-dev@https://codeload.github.com/angular/dev-infra-private-ng-dev-builds/tar.gz/88dbc0543ffbc4df720ac87c0d413fab45ea1491(@modelcontextprotocol/sdk@1.28.0(zod@4.3.6))': dependencies: '@actions/core': 3.0.0 '@conventional-changelog/git-client': 2.6.0(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.3.0) '@google-cloud/spanner': 8.0.0(supports-color@10.2.2) - '@google/genai': 1.46.0(@modelcontextprotocol/sdk@1.27.1(zod@4.3.6))(bufferutil@4.1.0)(supports-color@10.2.2)(utf-8-validate@6.0.6) + '@google/genai': 1.46.0(@modelcontextprotocol/sdk@1.28.0(zod@4.3.6))(bufferutil@4.1.0)(supports-color@10.2.2)(utf-8-validate@6.0.6) '@inquirer/prompts': 8.3.2(@types/node@24.12.0) '@inquirer/type': 4.0.4(@types/node@24.12.0) '@octokit/auth-app': 8.2.0 @@ -9926,14 +9925,14 @@ snapshots: transitivePeerDependencies: - supports-color - '@google/genai@1.46.0(@modelcontextprotocol/sdk@1.27.1(zod@4.3.6))(bufferutil@4.1.0)(supports-color@10.2.2)(utf-8-validate@6.0.6)': + '@google/genai@1.46.0(@modelcontextprotocol/sdk@1.28.0(zod@4.3.6))(bufferutil@4.1.0)(supports-color@10.2.2)(utf-8-validate@6.0.6)': dependencies: google-auth-library: 10.6.2(supports-color@10.2.2) p-retry: 4.6.2 protobufjs: 7.5.4 ws: 8.20.0(bufferutil@4.1.0)(utf-8-validate@6.0.6) optionalDependencies: - '@modelcontextprotocol/sdk': 1.27.1(zod@4.3.6) + '@modelcontextprotocol/sdk': 1.28.0(zod@4.3.6) transitivePeerDependencies: - bufferutil - supports-color @@ -10301,7 +10300,7 @@ snapshots: '@lmdb/lmdb-win32-x64@3.5.2': optional: true - '@modelcontextprotocol/sdk@1.27.1(zod@4.3.6)': + '@modelcontextprotocol/sdk@1.28.0(zod@4.3.6)': dependencies: '@hono/node-server': 1.19.11(hono@4.12.9) ajv: 8.18.0 @@ -10634,7 +10633,7 @@ snapshots: '@opentelemetry/semantic-conventions@1.40.0': {} - '@oxc-project/types@0.120.0': {} + '@oxc-project/types@0.122.0': {} '@parcel/watcher-android-arm64@2.5.6': optional: true @@ -10680,7 +10679,7 @@ snapshots: detect-libc: 2.1.2 is-glob: 4.0.3 node-addon-api: 7.1.1 - picomatch: 4.0.3 + picomatch: 4.0.4 optionalDependencies: '@parcel/watcher-android-arm64': 2.5.6 '@parcel/watcher-darwin-arm64': 2.5.6 @@ -10850,54 +10849,54 @@ snapshots: - react-native-b4a - supports-color - '@rolldown/binding-android-arm64@1.0.0-rc.10': + '@rolldown/binding-android-arm64@1.0.0-rc.12': optional: true - '@rolldown/binding-darwin-arm64@1.0.0-rc.10': + '@rolldown/binding-darwin-arm64@1.0.0-rc.12': optional: true - '@rolldown/binding-darwin-x64@1.0.0-rc.10': + '@rolldown/binding-darwin-x64@1.0.0-rc.12': optional: true - '@rolldown/binding-freebsd-x64@1.0.0-rc.10': + '@rolldown/binding-freebsd-x64@1.0.0-rc.12': optional: true - '@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.10': + '@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.12': optional: true - '@rolldown/binding-linux-arm64-gnu@1.0.0-rc.10': + '@rolldown/binding-linux-arm64-gnu@1.0.0-rc.12': optional: true - '@rolldown/binding-linux-arm64-musl@1.0.0-rc.10': + '@rolldown/binding-linux-arm64-musl@1.0.0-rc.12': optional: true - '@rolldown/binding-linux-ppc64-gnu@1.0.0-rc.10': + '@rolldown/binding-linux-ppc64-gnu@1.0.0-rc.12': optional: true - '@rolldown/binding-linux-s390x-gnu@1.0.0-rc.10': + '@rolldown/binding-linux-s390x-gnu@1.0.0-rc.12': optional: true - '@rolldown/binding-linux-x64-gnu@1.0.0-rc.10': + '@rolldown/binding-linux-x64-gnu@1.0.0-rc.12': optional: true - '@rolldown/binding-linux-x64-musl@1.0.0-rc.10': + '@rolldown/binding-linux-x64-musl@1.0.0-rc.12': optional: true - '@rolldown/binding-openharmony-arm64@1.0.0-rc.10': + '@rolldown/binding-openharmony-arm64@1.0.0-rc.12': optional: true - '@rolldown/binding-wasm32-wasi@1.0.0-rc.10': + '@rolldown/binding-wasm32-wasi@1.0.0-rc.12': dependencies: '@napi-rs/wasm-runtime': 1.1.1 optional: true - '@rolldown/binding-win32-arm64-msvc@1.0.0-rc.10': + '@rolldown/binding-win32-arm64-msvc@1.0.0-rc.12': optional: true - '@rolldown/binding-win32-x64-msvc@1.0.0-rc.10': + '@rolldown/binding-win32-x64-msvc@1.0.0-rc.12': optional: true - '@rolldown/pluginutils@1.0.0-rc.10': {} + '@rolldown/pluginutils@1.0.0-rc.12': {} '@rollup/plugin-alias@6.0.0(rollup@4.60.0)': optionalDependencies: @@ -10908,10 +10907,10 @@ snapshots: '@rollup/pluginutils': 5.3.0(rollup@4.60.0) commondir: 1.0.1 estree-walker: 2.0.2 - fdir: 6.5.0(picomatch@4.0.3) + fdir: 6.5.0(picomatch@4.0.4) is-reference: 1.2.1 magic-string: 0.30.21 - picomatch: 4.0.3 + picomatch: 4.0.4 optionalDependencies: rollup: 4.60.0 @@ -10935,7 +10934,7 @@ snapshots: dependencies: '@types/estree': 1.0.8 estree-walker: 2.0.2 - picomatch: 4.0.3 + picomatch: 4.0.4 optionalDependencies: rollup: 4.60.0 @@ -11074,7 +11073,7 @@ snapshots: eslint-visitor-keys: 4.2.1 espree: 10.4.0 estraverse: 5.3.0 - picomatch: 4.0.3 + picomatch: 4.0.4 '@szmarczak/http-timer@4.0.6': dependencies: @@ -11388,14 +11387,14 @@ snapshots: '@types/node': 22.19.15 optional: true - '@typescript-eslint/eslint-plugin@8.57.1(@typescript-eslint/parser@8.57.1(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2))(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2)': + '@typescript-eslint/eslint-plugin@8.57.2(@typescript-eslint/parser@8.57.2(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2))(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2)': dependencies: '@eslint-community/regexpp': 4.12.2 - '@typescript-eslint/parser': 8.57.1(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2) - '@typescript-eslint/scope-manager': 8.57.1 - '@typescript-eslint/type-utils': 8.57.1(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2) - '@typescript-eslint/utils': 8.57.1(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2) - '@typescript-eslint/visitor-keys': 8.57.1 + '@typescript-eslint/parser': 8.57.2(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2) + '@typescript-eslint/scope-manager': 8.57.2 + '@typescript-eslint/type-utils': 8.57.2(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2) + '@typescript-eslint/utils': 8.57.2(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2) + '@typescript-eslint/visitor-keys': 8.57.2 eslint: 10.1.0(jiti@2.6.1) ignore: 7.0.5 natural-compare: 1.4.0 @@ -11404,41 +11403,41 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.57.1(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2)': + '@typescript-eslint/parser@8.57.2(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2)': dependencies: - '@typescript-eslint/scope-manager': 8.57.1 - '@typescript-eslint/types': 8.57.1 - '@typescript-eslint/typescript-estree': 8.57.1(typescript@6.0.2) - '@typescript-eslint/visitor-keys': 8.57.1 + '@typescript-eslint/scope-manager': 8.57.2 + '@typescript-eslint/types': 8.57.2 + '@typescript-eslint/typescript-estree': 8.57.2(typescript@6.0.2) + '@typescript-eslint/visitor-keys': 8.57.2 debug: 4.4.3(supports-color@10.2.2) eslint: 10.1.0(jiti@2.6.1) typescript: 6.0.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/project-service@8.57.1(typescript@6.0.2)': + '@typescript-eslint/project-service@8.57.2(typescript@6.0.2)': dependencies: - '@typescript-eslint/tsconfig-utils': 8.57.1(typescript@6.0.2) - '@typescript-eslint/types': 8.57.1 + '@typescript-eslint/tsconfig-utils': 8.57.2(typescript@6.0.2) + '@typescript-eslint/types': 8.57.2 debug: 4.4.3(supports-color@10.2.2) typescript: 6.0.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/scope-manager@8.57.1': + '@typescript-eslint/scope-manager@8.57.2': dependencies: - '@typescript-eslint/types': 8.57.1 - '@typescript-eslint/visitor-keys': 8.57.1 + '@typescript-eslint/types': 8.57.2 + '@typescript-eslint/visitor-keys': 8.57.2 - '@typescript-eslint/tsconfig-utils@8.57.1(typescript@6.0.2)': + '@typescript-eslint/tsconfig-utils@8.57.2(typescript@6.0.2)': dependencies: typescript: 6.0.2 - '@typescript-eslint/type-utils@8.57.1(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2)': + '@typescript-eslint/type-utils@8.57.2(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2)': dependencies: - '@typescript-eslint/types': 8.57.1 - '@typescript-eslint/typescript-estree': 8.57.1(typescript@6.0.2) - '@typescript-eslint/utils': 8.57.1(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2) + '@typescript-eslint/types': 8.57.2 + '@typescript-eslint/typescript-estree': 8.57.2(typescript@6.0.2) + '@typescript-eslint/utils': 8.57.2(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2) debug: 4.4.3(supports-color@10.2.2) eslint: 10.1.0(jiti@2.6.1) ts-api-utils: 2.5.0(typescript@6.0.2) @@ -11446,16 +11445,14 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/types@8.57.1': {} - '@typescript-eslint/types@8.57.2': {} - '@typescript-eslint/typescript-estree@8.57.1(typescript@6.0.2)': + '@typescript-eslint/typescript-estree@8.57.2(typescript@6.0.2)': dependencies: - '@typescript-eslint/project-service': 8.57.1(typescript@6.0.2) - '@typescript-eslint/tsconfig-utils': 8.57.1(typescript@6.0.2) - '@typescript-eslint/types': 8.57.1 - '@typescript-eslint/visitor-keys': 8.57.1 + '@typescript-eslint/project-service': 8.57.2(typescript@6.0.2) + '@typescript-eslint/tsconfig-utils': 8.57.2(typescript@6.0.2) + '@typescript-eslint/types': 8.57.2 + '@typescript-eslint/visitor-keys': 8.57.2 debug: 4.4.3(supports-color@10.2.2) minimatch: 10.2.4 semver: 7.7.4 @@ -11465,20 +11462,20 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.57.1(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2)': + '@typescript-eslint/utils@8.57.2(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2)': dependencies: '@eslint-community/eslint-utils': 4.9.1(eslint@10.1.0(jiti@2.6.1)) - '@typescript-eslint/scope-manager': 8.57.1 - '@typescript-eslint/types': 8.57.1 - '@typescript-eslint/typescript-estree': 8.57.1(typescript@6.0.2) + '@typescript-eslint/scope-manager': 8.57.2 + '@typescript-eslint/types': 8.57.2 + '@typescript-eslint/typescript-estree': 8.57.2(typescript@6.0.2) eslint: 10.1.0(jiti@2.6.1) typescript: 6.0.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/visitor-keys@8.57.1': + '@typescript-eslint/visitor-keys@8.57.2': dependencies: - '@typescript-eslint/types': 8.57.1 + '@typescript-eslint/types': 8.57.2 eslint-visitor-keys: 5.0.1 '@verdaccio/auth@8.0.0-next-8.33': @@ -11638,14 +11635,14 @@ snapshots: lodash: 4.17.23 minimatch: 7.4.9 - '@vitejs/plugin-basic-ssl@2.2.0(vite@7.3.1(@types/node@24.12.0)(jiti@2.6.1)(less@4.6.4)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))': + '@vitejs/plugin-basic-ssl@2.3.0(vite@7.3.1(@types/node@24.12.0)(jiti@2.6.1)(less@4.6.4)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))': dependencies: vite: 7.3.1(@types/node@24.12.0)(jiti@2.6.1)(less@4.6.4)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) - '@vitest/coverage-v8@4.1.0(vitest@4.1.0(@opentelemetry/api@1.9.0)(@types/node@24.12.0)(jsdom@29.0.1)(vite@7.3.1(@types/node@24.12.0)(jiti@2.6.1)(less@4.6.4)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)))': + '@vitest/coverage-v8@4.1.2(vitest@4.1.2(@opentelemetry/api@1.9.0)(@types/node@24.12.0)(jiti@2.6.1)(jsdom@29.0.1)(less@4.6.4)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))': dependencies: '@bcoe/v8-coverage': 1.0.2 - '@vitest/utils': 4.1.0 + '@vitest/utils': 4.1.2 ast-v8-to-istanbul: 1.0.0 istanbul-lib-coverage: 3.2.2 istanbul-lib-report: 3.0.1 @@ -11654,46 +11651,46 @@ snapshots: obug: 2.1.1 std-env: 4.0.0 tinyrainbow: 3.1.0 - vitest: 4.1.0(@opentelemetry/api@1.9.0)(@types/node@24.12.0)(jsdom@29.0.1)(vite@7.3.1(@types/node@24.12.0)(jiti@2.6.1)(less@4.6.4)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) + vitest: 4.1.2(@opentelemetry/api@1.9.0)(@types/node@24.12.0)(jiti@2.6.1)(jsdom@29.0.1)(less@4.6.4)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) - '@vitest/expect@4.1.0': + '@vitest/expect@4.1.2': dependencies: '@standard-schema/spec': 1.1.0 '@types/chai': 5.2.3 - '@vitest/spy': 4.1.0 - '@vitest/utils': 4.1.0 + '@vitest/spy': 4.1.2 + '@vitest/utils': 4.1.2 chai: 6.2.2 tinyrainbow: 3.1.0 - '@vitest/mocker@4.1.0(vite@7.3.1(@types/node@24.12.0)(jiti@2.6.1)(less@4.6.4)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))': + '@vitest/mocker@4.1.2(vite@7.3.1(@types/node@24.12.0)(jiti@2.6.1)(less@4.6.4)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))': dependencies: - '@vitest/spy': 4.1.0 + '@vitest/spy': 4.1.2 estree-walker: 3.0.3 magic-string: 0.30.21 optionalDependencies: vite: 7.3.1(@types/node@24.12.0)(jiti@2.6.1)(less@4.6.4)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) - '@vitest/pretty-format@4.1.0': + '@vitest/pretty-format@4.1.2': dependencies: tinyrainbow: 3.1.0 - '@vitest/runner@4.1.0': + '@vitest/runner@4.1.2': dependencies: - '@vitest/utils': 4.1.0 + '@vitest/utils': 4.1.2 pathe: 2.0.3 - '@vitest/snapshot@4.1.0': + '@vitest/snapshot@4.1.2': dependencies: - '@vitest/pretty-format': 4.1.0 - '@vitest/utils': 4.1.0 + '@vitest/pretty-format': 4.1.2 + '@vitest/utils': 4.1.2 magic-string: 0.30.21 pathe: 2.0.3 - '@vitest/spy@4.1.0': {} + '@vitest/spy@4.1.2': {} - '@vitest/utils@4.1.0': + '@vitest/utils@4.1.2': dependencies: - '@vitest/pretty-format': 4.1.0 + '@vitest/pretty-format': 4.1.2 convert-source-map: 2.0.0 tinyrainbow: 3.1.0 @@ -11861,22 +11858,22 @@ snapshots: json-schema-traverse: 1.0.0 require-from-string: 2.0.2 - algoliasearch@5.49.2: - dependencies: - '@algolia/abtesting': 1.15.2 - '@algolia/client-abtesting': 5.49.2 - '@algolia/client-analytics': 5.49.2 - '@algolia/client-common': 5.49.2 - '@algolia/client-insights': 5.49.2 - '@algolia/client-personalization': 5.49.2 - '@algolia/client-query-suggestions': 5.49.2 - '@algolia/client-search': 5.49.2 - '@algolia/ingestion': 1.49.2 - '@algolia/monitoring': 1.49.2 - '@algolia/recommend': 5.49.2 - '@algolia/requester-browser-xhr': 5.49.2 - '@algolia/requester-fetch': 5.49.2 - '@algolia/requester-node-http': 5.49.2 + algoliasearch@5.50.0: + dependencies: + '@algolia/abtesting': 1.16.0 + '@algolia/client-abtesting': 5.50.0 + '@algolia/client-analytics': 5.50.0 + '@algolia/client-common': 5.50.0 + '@algolia/client-insights': 5.50.0 + '@algolia/client-personalization': 5.50.0 + '@algolia/client-query-suggestions': 5.50.0 + '@algolia/client-search': 5.50.0 + '@algolia/ingestion': 1.50.0 + '@algolia/monitoring': 1.50.0 + '@algolia/recommend': 5.50.0 + '@algolia/requester-browser-xhr': 5.50.0 + '@algolia/requester-fetch': 5.50.0 + '@algolia/requester-node-http': 5.50.0 ansi-colors@4.1.3: {} @@ -13034,17 +13031,17 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-module-utils@2.12.1(@typescript-eslint/parser@8.57.1(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2))(eslint-import-resolver-node@0.3.9)(eslint@10.1.0(jiti@2.6.1)): + eslint-module-utils@2.12.1(@typescript-eslint/parser@8.57.2(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2))(eslint-import-resolver-node@0.3.9)(eslint@10.1.0(jiti@2.6.1)): dependencies: debug: 3.2.7 optionalDependencies: - '@typescript-eslint/parser': 8.57.1(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2) + '@typescript-eslint/parser': 8.57.2(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2) eslint: 10.1.0(jiti@2.6.1) eslint-import-resolver-node: 0.3.9 transitivePeerDependencies: - supports-color - eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.57.1(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2))(eslint@10.1.0(jiti@2.6.1)): + eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.57.2(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2))(eslint@10.1.0(jiti@2.6.1)): dependencies: '@rtsao/scc': 1.1.0 array-includes: 3.1.9 @@ -13055,7 +13052,7 @@ snapshots: doctrine: 2.1.0 eslint: 10.1.0(jiti@2.6.1) eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.57.1(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2))(eslint-import-resolver-node@0.3.9)(eslint@10.1.0(jiti@2.6.1)) + eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.57.2(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2))(eslint-import-resolver-node@0.3.9)(eslint@10.1.0(jiti@2.6.1)) hasown: 2.0.2 is-core-module: 2.16.1 is-glob: 4.0.3 @@ -13067,7 +13064,7 @@ snapshots: string.prototype.trimend: 1.0.9 tsconfig-paths: 3.15.0 optionalDependencies: - '@typescript-eslint/parser': 8.57.1(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2) + '@typescript-eslint/parser': 8.57.2(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2) transitivePeerDependencies: - eslint-import-resolver-typescript - eslint-import-resolver-webpack @@ -13322,9 +13319,9 @@ snapshots: dependencies: pend: 1.2.0 - fdir@6.5.0(picomatch@4.0.3): + fdir@6.5.0(picomatch@4.0.4): optionalDependencies: - picomatch: 4.0.3 + picomatch: 4.0.4 fetch-blob@3.2.0: dependencies: @@ -14658,7 +14655,7 @@ snapshots: mimic-response@3.1.0: {} - mini-css-extract-plugin@2.10.1(webpack@5.105.4(esbuild@0.27.3)): + mini-css-extract-plugin@2.10.2(webpack@5.105.4(esbuild@0.27.3)): dependencies: schema-utils: 4.3.3 tapable: 2.3.2 @@ -15192,7 +15189,7 @@ snapshots: picomatch@2.3.2: {} - picomatch@4.0.3: {} + picomatch@4.0.4: {} pify@3.0.0: {} @@ -15626,26 +15623,26 @@ snapshots: dependencies: glob: 10.5.0 - rolldown@1.0.0-rc.10: + rolldown@1.0.0-rc.12: dependencies: - '@oxc-project/types': 0.120.0 - '@rolldown/pluginutils': 1.0.0-rc.10 + '@oxc-project/types': 0.122.0 + '@rolldown/pluginutils': 1.0.0-rc.12 optionalDependencies: - '@rolldown/binding-android-arm64': 1.0.0-rc.10 - '@rolldown/binding-darwin-arm64': 1.0.0-rc.10 - '@rolldown/binding-darwin-x64': 1.0.0-rc.10 - '@rolldown/binding-freebsd-x64': 1.0.0-rc.10 - '@rolldown/binding-linux-arm-gnueabihf': 1.0.0-rc.10 - '@rolldown/binding-linux-arm64-gnu': 1.0.0-rc.10 - '@rolldown/binding-linux-arm64-musl': 1.0.0-rc.10 - '@rolldown/binding-linux-ppc64-gnu': 1.0.0-rc.10 - '@rolldown/binding-linux-s390x-gnu': 1.0.0-rc.10 - '@rolldown/binding-linux-x64-gnu': 1.0.0-rc.10 - '@rolldown/binding-linux-x64-musl': 1.0.0-rc.10 - '@rolldown/binding-openharmony-arm64': 1.0.0-rc.10 - '@rolldown/binding-wasm32-wasi': 1.0.0-rc.10 - '@rolldown/binding-win32-arm64-msvc': 1.0.0-rc.10 - '@rolldown/binding-win32-x64-msvc': 1.0.0-rc.10 + '@rolldown/binding-android-arm64': 1.0.0-rc.12 + '@rolldown/binding-darwin-arm64': 1.0.0-rc.12 + '@rolldown/binding-darwin-x64': 1.0.0-rc.12 + '@rolldown/binding-freebsd-x64': 1.0.0-rc.12 + '@rolldown/binding-linux-arm-gnueabihf': 1.0.0-rc.12 + '@rolldown/binding-linux-arm64-gnu': 1.0.0-rc.12 + '@rolldown/binding-linux-arm64-musl': 1.0.0-rc.12 + '@rolldown/binding-linux-ppc64-gnu': 1.0.0-rc.12 + '@rolldown/binding-linux-s390x-gnu': 1.0.0-rc.12 + '@rolldown/binding-linux-x64-gnu': 1.0.0-rc.12 + '@rolldown/binding-linux-x64-musl': 1.0.0-rc.12 + '@rolldown/binding-openharmony-arm64': 1.0.0-rc.12 + '@rolldown/binding-wasm32-wasi': 1.0.0-rc.12 + '@rolldown/binding-win32-arm64-msvc': 1.0.0-rc.12 + '@rolldown/binding-win32-x64-msvc': 1.0.0-rc.12 rollup-license-plugin@3.2.1: dependencies: @@ -16360,8 +16357,8 @@ snapshots: tinyglobby@0.2.15: dependencies: - fdir: 6.5.0(picomatch@4.0.3) - picomatch: 4.0.3 + fdir: 6.5.0(picomatch@4.0.4) + picomatch: 4.0.4 tinyrainbow@3.1.0: {} @@ -16527,6 +16524,8 @@ snapshots: undici@7.24.5: {} + undici@7.24.6: {} + unenv@1.10.0: dependencies: consola: 3.4.2 @@ -16671,8 +16670,8 @@ snapshots: vite@7.3.1(@types/node@24.12.0)(jiti@2.6.1)(less@4.6.4)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3): dependencies: esbuild: 0.27.3 - fdir: 6.5.0(picomatch@4.0.3) - picomatch: 4.0.3 + fdir: 6.5.0(picomatch@4.0.4) + picomatch: 4.0.4 postcss: 8.5.8 rollup: 4.60.0 tinyglobby: 0.2.15 @@ -16686,21 +16685,21 @@ snapshots: tsx: 4.21.0 yaml: 2.8.3 - vitest@4.1.0(@opentelemetry/api@1.9.0)(@types/node@24.12.0)(jsdom@29.0.1)(vite@7.3.1(@types/node@24.12.0)(jiti@2.6.1)(less@4.6.4)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)): + vitest@4.1.2(@opentelemetry/api@1.9.0)(@types/node@24.12.0)(jiti@2.6.1)(jsdom@29.0.1)(less@4.6.4)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3): dependencies: - '@vitest/expect': 4.1.0 - '@vitest/mocker': 4.1.0(vite@7.3.1(@types/node@24.12.0)(jiti@2.6.1)(less@4.6.4)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) - '@vitest/pretty-format': 4.1.0 - '@vitest/runner': 4.1.0 - '@vitest/snapshot': 4.1.0 - '@vitest/spy': 4.1.0 - '@vitest/utils': 4.1.0 + '@vitest/expect': 4.1.2 + '@vitest/mocker': 4.1.2(vite@7.3.1(@types/node@24.12.0)(jiti@2.6.1)(less@4.6.4)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) + '@vitest/pretty-format': 4.1.2 + '@vitest/runner': 4.1.2 + '@vitest/snapshot': 4.1.2 + '@vitest/spy': 4.1.2 + '@vitest/utils': 4.1.2 es-module-lexer: 2.0.0 expect-type: 1.3.0 magic-string: 0.30.21 obug: 2.1.1 pathe: 2.0.3 - picomatch: 4.0.3 + picomatch: 4.0.4 std-env: 4.0.0 tinybench: 2.9.0 tinyexec: 1.0.4 @@ -16713,7 +16712,17 @@ snapshots: '@types/node': 24.12.0 jsdom: 29.0.1 transitivePeerDependencies: + - jiti + - less + - lightningcss - msw + - sass + - sass-embedded + - stylus + - sugarss + - terser + - tsx + - yaml void-elements@2.0.1: {} From 2f7d2084228a7c2dec98e5fcbae49e6e04710c9e Mon Sep 17 00:00:00 2001 From: Alan Agius <17563226+alan-agius4@users.noreply.github.com> Date: Mon, 30 Mar 2026 11:01:47 +0000 Subject: [PATCH 194/226] build: add @vitest/coverage-v8 as a peer dependency extension for vitest Fixes an issue where running Vitest tests with coverage in a strict pnpm/Bazel environment fails because @vitest/coverage-v8 cannot be found by the vitest execution. See: https://github.com/vitest-dev/vitest/pull/10025 --- package.json | 5 +++++ pnpm-lock.yaml | 16 +++++++++------- 2 files changed, 14 insertions(+), 7 deletions(-) diff --git a/package.json b/package.json index e88eec108834..3403ca7b5f7a 100644 --- a/package.json +++ b/package.json @@ -156,6 +156,11 @@ "peerDependencies": { "protobufjs": "*" } + }, + "vitest": { + "peerDependencies": { + "@vitest/coverage-v8": "*" + } } } }, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index cbbaf83c0449..b4f89355f360 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -8,7 +8,7 @@ overrides: undici-types: ^7.16.0 '@angular/build': workspace:* -packageExtensionsChecksum: sha256-3L73Fw32UVtE6x5BJxJPBtQtH/mgsr31grNpdhHP1IY= +packageExtensionsChecksum: sha256-V29Z7ZDJEQFju55ZS5zQ23Kb0736+P+eGNolWn/T274= importers: @@ -315,7 +315,7 @@ importers: version: link:../../../packages/angular/ssr '@vitest/coverage-v8': specifier: 4.1.2 - version: 4.1.2(vitest@4.1.2(@opentelemetry/api@1.9.0)(@types/node@24.12.0)(jiti@2.6.1)(jsdom@29.0.1)(less@4.6.4)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) + version: 4.1.2(vitest@4.1.2) browser-sync: specifier: 3.0.4 version: 3.0.4(bufferutil@4.1.0)(utf-8-validate@6.0.6) @@ -330,7 +330,7 @@ importers: version: 7.8.2 vitest: specifier: 4.1.2 - version: 4.1.2(@opentelemetry/api@1.9.0)(@types/node@24.12.0)(jiti@2.6.1)(jsdom@29.0.1)(less@4.6.4)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) + version: 4.1.2(@opentelemetry/api@1.9.0)(@types/node@24.12.0)(@vitest/coverage-v8@4.1.2)(jiti@2.6.1)(jsdom@29.0.1)(less@4.6.4)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) packages/angular/build: dependencies: @@ -436,7 +436,7 @@ importers: version: 7.8.2 vitest: specifier: 4.1.2 - version: 4.1.2(@opentelemetry/api@1.9.0)(@types/node@24.12.0)(jiti@2.6.1)(jsdom@29.0.1)(less@4.6.4)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) + version: 4.1.2(@opentelemetry/api@1.9.0)(@types/node@24.12.0)(@vitest/coverage-v8@4.1.2)(jiti@2.6.1)(jsdom@29.0.1)(less@4.6.4)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) optionalDependencies: lmdb: specifier: 3.5.2 @@ -8044,6 +8044,7 @@ packages: '@vitest/browser-playwright': 4.1.2 '@vitest/browser-preview': 4.1.2 '@vitest/browser-webdriverio': 4.1.2 + '@vitest/coverage-v8': '*' '@vitest/ui': 4.1.2 happy-dom: '*' jsdom: '*' @@ -11639,7 +11640,7 @@ snapshots: dependencies: vite: 7.3.1(@types/node@24.12.0)(jiti@2.6.1)(less@4.6.4)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) - '@vitest/coverage-v8@4.1.2(vitest@4.1.2(@opentelemetry/api@1.9.0)(@types/node@24.12.0)(jiti@2.6.1)(jsdom@29.0.1)(less@4.6.4)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))': + '@vitest/coverage-v8@4.1.2(vitest@4.1.2)': dependencies: '@bcoe/v8-coverage': 1.0.2 '@vitest/utils': 4.1.2 @@ -11651,7 +11652,7 @@ snapshots: obug: 2.1.1 std-env: 4.0.0 tinyrainbow: 3.1.0 - vitest: 4.1.2(@opentelemetry/api@1.9.0)(@types/node@24.12.0)(jiti@2.6.1)(jsdom@29.0.1)(less@4.6.4)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) + vitest: 4.1.2(@opentelemetry/api@1.9.0)(@types/node@24.12.0)(@vitest/coverage-v8@4.1.2)(jiti@2.6.1)(jsdom@29.0.1)(less@4.6.4)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) '@vitest/expect@4.1.2': dependencies: @@ -16685,8 +16686,9 @@ snapshots: tsx: 4.21.0 yaml: 2.8.3 - vitest@4.1.2(@opentelemetry/api@1.9.0)(@types/node@24.12.0)(jiti@2.6.1)(jsdom@29.0.1)(less@4.6.4)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3): + vitest@4.1.2(@opentelemetry/api@1.9.0)(@types/node@24.12.0)(@vitest/coverage-v8@4.1.2)(jiti@2.6.1)(jsdom@29.0.1)(less@4.6.4)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3): dependencies: + '@vitest/coverage-v8': 4.1.2(vitest@4.1.2) '@vitest/expect': 4.1.2 '@vitest/mocker': 4.1.2(vite@7.3.1(@types/node@24.12.0)(jiti@2.6.1)(less@4.6.4)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) '@vitest/pretty-format': 4.1.2 From c0094be74a951b41e24b6b42e69fef64515f1431 Mon Sep 17 00:00:00 2001 From: Angular Robot <angular-robot@google.com> Date: Fri, 27 Mar 2026 06:00:42 +0000 Subject: [PATCH 195/226] build: update pnpm to v10.33.0 See associated pull request for more information. --- MODULE.bazel | 4 ++-- package.json | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/MODULE.bazel b/MODULE.bazel index 7be5cc381d64..927c66952e7b 100644 --- a/MODULE.bazel +++ b/MODULE.bazel @@ -117,8 +117,8 @@ use_repo( pnpm = use_extension("@aspect_rules_js//npm:extensions.bzl", "pnpm") pnpm.pnpm( name = "pnpm", - pnpm_version = "10.32.1", - pnpm_version_integrity = "sha512-pwaTjw6JrBRWtlY+q07fHR+vM2jRGR/FxZeQ6W3JGORFarLmfWE94QQ9LoyB+HMD5rQNT/7KnfFe8a1Wc0jyvg==", + pnpm_version = "10.33.0", + pnpm_version_integrity = "sha512-EFaLtKavtYyes2MNqQzJUWQXq+vT+rvmc58K55VyjaFJHp21pUTHatjrdXD1xLs9bGN7LLQb/c20f6gjyGSTGQ==", ) use_repo(pnpm, "pnpm") diff --git a/package.json b/package.json index 3403ca7b5f7a..33da88c7a27c 100644 --- a/package.json +++ b/package.json @@ -28,12 +28,12 @@ "type": "git", "url": "git+https://github.com/angular/angular-cli.git" }, - "packageManager": "pnpm@10.32.1", + "packageManager": "pnpm@10.33.0", "engines": { "node": "^22.22.0 || >=24.13.1", "npm": "Please use pnpm instead of NPM to install dependencies", "yarn": "Please use pnpm instead of Yarn to install dependencies", - "pnpm": "10.32.1" + "pnpm": "10.33.0" }, "author": "Angular Authors", "license": "MIT", From 685ebae8798bb286848beef82acfcd8d93178ea9 Mon Sep 17 00:00:00 2001 From: Angular Robot <angular-robot@google.com> Date: Mon, 30 Mar 2026 10:39:53 +0000 Subject: [PATCH 196/226] build: update cross-repo angular dependencies See associated pull request for more information. --- .../assistant-to-the-branch-manager.yml | 2 +- .github/workflows/ci.yml | 52 +++++++++---------- .github/workflows/dev-infra.yml | 6 +-- .github/workflows/perf.yml | 6 +-- .github/workflows/pr.yml | 44 ++++++++-------- MODULE.bazel | 4 +- tests/e2e/ng-snapshot/package.json | 32 ++++++------ 7 files changed, 73 insertions(+), 73 deletions(-) diff --git a/.github/workflows/assistant-to-the-branch-manager.yml b/.github/workflows/assistant-to-the-branch-manager.yml index c624b9aa858e..d32cd27e86d8 100644 --- a/.github/workflows/assistant-to-the-branch-manager.yml +++ b/.github/workflows/assistant-to-the-branch-manager.yml @@ -17,6 +17,6 @@ jobs: - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 with: persist-credentials: false - - uses: angular/dev-infra/github-actions/branch-manager@2f6d3ae5b1db37b5165f200fb53f30b9330983e4 + - uses: angular/dev-infra/github-actions/branch-manager@55af1f65dbeb0fe6a3de1d1134bd0dd8bc5e60cc with: angular-robot-key: ${{ secrets.ANGULAR_ROBOT_PRIVATE_KEY }} diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index dfadb67edc6a..911141332c9d 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -21,9 +21,9 @@ jobs: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@2f6d3ae5b1db37b5165f200fb53f30b9330983e4 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@55af1f65dbeb0fe6a3de1d1134bd0dd8bc5e60cc - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@2f6d3ae5b1db37b5165f200fb53f30b9330983e4 + uses: angular/dev-infra/github-actions/bazel/setup@55af1f65dbeb0fe6a3de1d1134bd0dd8bc5e60cc - name: Install node modules run: pnpm install --frozen-lockfile - name: Generate JSON schema types @@ -44,11 +44,11 @@ jobs: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@2f6d3ae5b1db37b5165f200fb53f30b9330983e4 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@55af1f65dbeb0fe6a3de1d1134bd0dd8bc5e60cc - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@2f6d3ae5b1db37b5165f200fb53f30b9330983e4 + uses: angular/dev-infra/github-actions/bazel/setup@55af1f65dbeb0fe6a3de1d1134bd0dd8bc5e60cc - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@2f6d3ae5b1db37b5165f200fb53f30b9330983e4 + uses: angular/dev-infra/github-actions/bazel/configure-remote@55af1f65dbeb0fe6a3de1d1134bd0dd8bc5e60cc with: google_credential: ${{ secrets.RBE_TRUSTED_BUILDS_USER }} - name: Install node modules @@ -61,11 +61,11 @@ jobs: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@2f6d3ae5b1db37b5165f200fb53f30b9330983e4 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@55af1f65dbeb0fe6a3de1d1134bd0dd8bc5e60cc - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@2f6d3ae5b1db37b5165f200fb53f30b9330983e4 + uses: angular/dev-infra/github-actions/bazel/setup@55af1f65dbeb0fe6a3de1d1134bd0dd8bc5e60cc - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@2f6d3ae5b1db37b5165f200fb53f30b9330983e4 + uses: angular/dev-infra/github-actions/bazel/configure-remote@55af1f65dbeb0fe6a3de1d1134bd0dd8bc5e60cc with: google_credential: ${{ secrets.RBE_TRUSTED_BUILDS_USER }} - name: Install node modules @@ -84,13 +84,13 @@ jobs: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@2f6d3ae5b1db37b5165f200fb53f30b9330983e4 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@55af1f65dbeb0fe6a3de1d1134bd0dd8bc5e60cc - name: Install node modules run: pnpm install --frozen-lockfile - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@2f6d3ae5b1db37b5165f200fb53f30b9330983e4 + uses: angular/dev-infra/github-actions/bazel/setup@55af1f65dbeb0fe6a3de1d1134bd0dd8bc5e60cc - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@2f6d3ae5b1db37b5165f200fb53f30b9330983e4 + uses: angular/dev-infra/github-actions/bazel/configure-remote@55af1f65dbeb0fe6a3de1d1134bd0dd8bc5e60cc with: google_credential: ${{ secrets.RBE_TRUSTED_BUILDS_USER }} - name: Run CLI E2E tests @@ -100,11 +100,11 @@ jobs: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@2f6d3ae5b1db37b5165f200fb53f30b9330983e4 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@55af1f65dbeb0fe6a3de1d1134bd0dd8bc5e60cc - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@2f6d3ae5b1db37b5165f200fb53f30b9330983e4 + uses: angular/dev-infra/github-actions/bazel/setup@55af1f65dbeb0fe6a3de1d1134bd0dd8bc5e60cc - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@2f6d3ae5b1db37b5165f200fb53f30b9330983e4 + uses: angular/dev-infra/github-actions/bazel/configure-remote@55af1f65dbeb0fe6a3de1d1134bd0dd8bc5e60cc with: google_credential: ${{ secrets.RBE_TRUSTED_BUILDS_USER }} - name: Install node modules @@ -137,7 +137,7 @@ jobs: runs-on: windows-2025 steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@2f6d3ae5b1db37b5165f200fb53f30b9330983e4 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@55af1f65dbeb0fe6a3de1d1134bd0dd8bc5e60cc - name: Install node modules run: pnpm install --frozen-lockfile - name: Download built Windows E2E tests @@ -164,13 +164,13 @@ jobs: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@2f6d3ae5b1db37b5165f200fb53f30b9330983e4 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@55af1f65dbeb0fe6a3de1d1134bd0dd8bc5e60cc - name: Install node modules run: pnpm install --frozen-lockfile - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@2f6d3ae5b1db37b5165f200fb53f30b9330983e4 + uses: angular/dev-infra/github-actions/bazel/setup@55af1f65dbeb0fe6a3de1d1134bd0dd8bc5e60cc - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@2f6d3ae5b1db37b5165f200fb53f30b9330983e4 + uses: angular/dev-infra/github-actions/bazel/configure-remote@55af1f65dbeb0fe6a3de1d1134bd0dd8bc5e60cc with: google_credential: ${{ secrets.RBE_TRUSTED_BUILDS_USER }} - name: Run CLI E2E tests @@ -188,13 +188,13 @@ jobs: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@2f6d3ae5b1db37b5165f200fb53f30b9330983e4 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@55af1f65dbeb0fe6a3de1d1134bd0dd8bc5e60cc - name: Install node modules run: pnpm install --frozen-lockfile - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@2f6d3ae5b1db37b5165f200fb53f30b9330983e4 + uses: angular/dev-infra/github-actions/bazel/setup@55af1f65dbeb0fe6a3de1d1134bd0dd8bc5e60cc - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@2f6d3ae5b1db37b5165f200fb53f30b9330983e4 + uses: angular/dev-infra/github-actions/bazel/configure-remote@55af1f65dbeb0fe6a3de1d1134bd0dd8bc5e60cc with: google_credential: ${{ secrets.RBE_TRUSTED_BUILDS_USER }} - name: Run CLI E2E tests @@ -208,13 +208,13 @@ jobs: SAUCE_TUNNEL_IDENTIFIER: angular-cli-${{ github.workflow }}-${{ github.run_number }} steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@2f6d3ae5b1db37b5165f200fb53f30b9330983e4 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@55af1f65dbeb0fe6a3de1d1134bd0dd8bc5e60cc - name: Install node modules run: pnpm install --frozen-lockfile - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@2f6d3ae5b1db37b5165f200fb53f30b9330983e4 + uses: angular/dev-infra/github-actions/bazel/setup@55af1f65dbeb0fe6a3de1d1134bd0dd8bc5e60cc - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@2f6d3ae5b1db37b5165f200fb53f30b9330983e4 + uses: angular/dev-infra/github-actions/bazel/configure-remote@55af1f65dbeb0fe6a3de1d1134bd0dd8bc5e60cc with: google_credential: ${{ secrets.RBE_TRUSTED_BUILDS_USER }} - name: Run E2E Browser tests @@ -244,11 +244,11 @@ jobs: CIRCLE_BRANCH: ${{ github.ref_name }} steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@2f6d3ae5b1db37b5165f200fb53f30b9330983e4 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@55af1f65dbeb0fe6a3de1d1134bd0dd8bc5e60cc - name: Install node modules run: pnpm install --frozen-lockfile - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@2f6d3ae5b1db37b5165f200fb53f30b9330983e4 + uses: angular/dev-infra/github-actions/bazel/setup@55af1f65dbeb0fe6a3de1d1134bd0dd8bc5e60cc - run: pnpm admin snapshots --verbose env: SNAPSHOT_BUILDS_GITHUB_TOKEN: ${{ secrets.SNAPSHOT_BUILDS_GITHUB_TOKEN }} diff --git a/.github/workflows/dev-infra.yml b/.github/workflows/dev-infra.yml index 9451bdbf330f..e2931fd90072 100644 --- a/.github/workflows/dev-infra.yml +++ b/.github/workflows/dev-infra.yml @@ -15,21 +15,21 @@ jobs: if: github.event_name == 'pull_request_target' runs-on: ubuntu-latest steps: - - uses: angular/dev-infra/github-actions/labeling/pull-request@2f6d3ae5b1db37b5165f200fb53f30b9330983e4 + - uses: angular/dev-infra/github-actions/labeling/pull-request@55af1f65dbeb0fe6a3de1d1134bd0dd8bc5e60cc with: angular-robot-key: ${{ secrets.ANGULAR_ROBOT_PRIVATE_KEY }} post_approval_changes: if: github.event_name == 'pull_request_target' runs-on: ubuntu-latest steps: - - uses: angular/dev-infra/github-actions/post-approval-changes@2f6d3ae5b1db37b5165f200fb53f30b9330983e4 + - uses: angular/dev-infra/github-actions/post-approval-changes@55af1f65dbeb0fe6a3de1d1134bd0dd8bc5e60cc 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@2f6d3ae5b1db37b5165f200fb53f30b9330983e4 + - uses: angular/dev-infra/github-actions/labeling/issue@55af1f65dbeb0fe6a3de1d1134bd0dd8bc5e60cc with: angular-robot-key: ${{ secrets.ANGULAR_ROBOT_PRIVATE_KEY }} google-generative-ai-key: ${{ secrets.GOOGLE_GENERATIVE_AI_KEY }} diff --git a/.github/workflows/perf.yml b/.github/workflows/perf.yml index 7591c75d92b3..b1671b229d8a 100644 --- a/.github/workflows/perf.yml +++ b/.github/workflows/perf.yml @@ -23,7 +23,7 @@ jobs: workflows: ${{ steps.workflows.outputs.workflows }} steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@2f6d3ae5b1db37b5165f200fb53f30b9330983e4 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@55af1f65dbeb0fe6a3de1d1134bd0dd8bc5e60cc - name: Install node modules run: pnpm install --frozen-lockfile - id: workflows @@ -38,9 +38,9 @@ jobs: workflow: ${{ fromJSON(needs.list.outputs.workflows) }} steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@2f6d3ae5b1db37b5165f200fb53f30b9330983e4 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@55af1f65dbeb0fe6a3de1d1134bd0dd8bc5e60cc - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@2f6d3ae5b1db37b5165f200fb53f30b9330983e4 + uses: angular/dev-infra/github-actions/bazel/setup@55af1f65dbeb0fe6a3de1d1134bd0dd8bc5e60cc - name: Install node modules run: pnpm install --frozen-lockfile # We utilize the google-github-actions/auth action to allow us to get an active credential using workflow diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml index 898960b9e0ed..79512cad71eb 100644 --- a/.github/workflows/pr.yml +++ b/.github/workflows/pr.yml @@ -34,9 +34,9 @@ jobs: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@2f6d3ae5b1db37b5165f200fb53f30b9330983e4 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@55af1f65dbeb0fe6a3de1d1134bd0dd8bc5e60cc - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@2f6d3ae5b1db37b5165f200fb53f30b9330983e4 + uses: angular/dev-infra/github-actions/bazel/setup@55af1f65dbeb0fe6a3de1d1134bd0dd8bc5e60cc - name: Setup ESLint Caching uses: actions/cache@668228422ae6a00e4ad889ee87cd7109ec5666a7 # v5.0.4 with: @@ -66,17 +66,17 @@ jobs: # it has been merged. run: pnpm ng-dev format changed --check ${{ github.event.pull_request.base.sha }} - name: Check Package Licenses - uses: angular/dev-infra/github-actions/linting/licenses@2f6d3ae5b1db37b5165f200fb53f30b9330983e4 + uses: angular/dev-infra/github-actions/linting/licenses@55af1f65dbeb0fe6a3de1d1134bd0dd8bc5e60cc build: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@2f6d3ae5b1db37b5165f200fb53f30b9330983e4 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@55af1f65dbeb0fe6a3de1d1134bd0dd8bc5e60cc - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@2f6d3ae5b1db37b5165f200fb53f30b9330983e4 + uses: angular/dev-infra/github-actions/bazel/setup@55af1f65dbeb0fe6a3de1d1134bd0dd8bc5e60cc - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@2f6d3ae5b1db37b5165f200fb53f30b9330983e4 + uses: angular/dev-infra/github-actions/bazel/configure-remote@55af1f65dbeb0fe6a3de1d1134bd0dd8bc5e60cc - name: Install node modules run: pnpm install --frozen-lockfile - name: Build release targets @@ -93,11 +93,11 @@ jobs: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@2f6d3ae5b1db37b5165f200fb53f30b9330983e4 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@55af1f65dbeb0fe6a3de1d1134bd0dd8bc5e60cc - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@2f6d3ae5b1db37b5165f200fb53f30b9330983e4 + uses: angular/dev-infra/github-actions/bazel/setup@55af1f65dbeb0fe6a3de1d1134bd0dd8bc5e60cc - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@2f6d3ae5b1db37b5165f200fb53f30b9330983e4 + uses: angular/dev-infra/github-actions/bazel/configure-remote@55af1f65dbeb0fe6a3de1d1134bd0dd8bc5e60cc - name: Install node modules run: pnpm install --frozen-lockfile - name: Run module and package tests @@ -114,13 +114,13 @@ jobs: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@2f6d3ae5b1db37b5165f200fb53f30b9330983e4 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@55af1f65dbeb0fe6a3de1d1134bd0dd8bc5e60cc - name: Install node modules run: pnpm install --frozen-lockfile - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@2f6d3ae5b1db37b5165f200fb53f30b9330983e4 + uses: angular/dev-infra/github-actions/bazel/setup@55af1f65dbeb0fe6a3de1d1134bd0dd8bc5e60cc - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@2f6d3ae5b1db37b5165f200fb53f30b9330983e4 + uses: angular/dev-infra/github-actions/bazel/configure-remote@55af1f65dbeb0fe6a3de1d1134bd0dd8bc5e60cc - name: Run CLI E2E tests run: pnpm bazel test --test_env=E2E_SHARD_TOTAL=6 --test_env=E2E_SHARD_INDEX=${{ matrix.shard }} --config=e2e //tests:e2e.${{ matrix.subset }}_node${{ matrix.node }} @@ -128,11 +128,11 @@ jobs: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@2f6d3ae5b1db37b5165f200fb53f30b9330983e4 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@55af1f65dbeb0fe6a3de1d1134bd0dd8bc5e60cc - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@2f6d3ae5b1db37b5165f200fb53f30b9330983e4 + uses: angular/dev-infra/github-actions/bazel/setup@55af1f65dbeb0fe6a3de1d1134bd0dd8bc5e60cc - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@2f6d3ae5b1db37b5165f200fb53f30b9330983e4 + uses: angular/dev-infra/github-actions/bazel/configure-remote@55af1f65dbeb0fe6a3de1d1134bd0dd8bc5e60cc - name: Install node modules run: pnpm install --frozen-lockfile - name: Build E2E tests for Windows on Linux @@ -156,7 +156,7 @@ jobs: runs-on: windows-2025 steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@2f6d3ae5b1db37b5165f200fb53f30b9330983e4 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@55af1f65dbeb0fe6a3de1d1134bd0dd8bc5e60cc - name: Install node modules run: pnpm install --frozen-lockfile - name: Download built Windows E2E tests @@ -183,13 +183,13 @@ jobs: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@2f6d3ae5b1db37b5165f200fb53f30b9330983e4 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@55af1f65dbeb0fe6a3de1d1134bd0dd8bc5e60cc - name: Install node modules run: pnpm install --frozen-lockfile - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@2f6d3ae5b1db37b5165f200fb53f30b9330983e4 + uses: angular/dev-infra/github-actions/bazel/setup@55af1f65dbeb0fe6a3de1d1134bd0dd8bc5e60cc - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@2f6d3ae5b1db37b5165f200fb53f30b9330983e4 + uses: angular/dev-infra/github-actions/bazel/configure-remote@55af1f65dbeb0fe6a3de1d1134bd0dd8bc5e60cc - name: Run CLI E2E tests run: pnpm bazel test --test_env=E2E_SHARD_TOTAL=3 --test_env=E2E_SHARD_INDEX=${{ matrix.shard }} --config=e2e //tests:e2e.${{ matrix.subset }}_node${{ matrix.node }} @@ -205,12 +205,12 @@ jobs: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@2f6d3ae5b1db37b5165f200fb53f30b9330983e4 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@55af1f65dbeb0fe6a3de1d1134bd0dd8bc5e60cc - name: Install node modules run: pnpm install --frozen-lockfile - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@2f6d3ae5b1db37b5165f200fb53f30b9330983e4 + uses: angular/dev-infra/github-actions/bazel/setup@55af1f65dbeb0fe6a3de1d1134bd0dd8bc5e60cc - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@2f6d3ae5b1db37b5165f200fb53f30b9330983e4 + uses: angular/dev-infra/github-actions/bazel/configure-remote@55af1f65dbeb0fe6a3de1d1134bd0dd8bc5e60cc - name: Run CLI E2E tests run: pnpm bazel test --test_env=E2E_SHARD_TOTAL=6 --test_env=E2E_SHARD_INDEX=${{ matrix.shard }} --config=e2e //tests:e2e.snapshots.${{ matrix.subset }}_node${{ matrix.node }} diff --git a/MODULE.bazel b/MODULE.bazel index 927c66952e7b..81e2d9464997 100644 --- a/MODULE.bazel +++ b/MODULE.bazel @@ -19,14 +19,14 @@ bazel_dep(name = "aspect_rules_jasmine", version = "2.0.4") bazel_dep(name = "rules_angular") git_override( module_name = "rules_angular", - commit = "af626f77ad610d1a9c47ee317af88e2c8edd66a4", + commit = "19a4a8fb4d6f035b5506ca21bbbd309ab5f5e729", remote = "https://github.com/angular/rules_angular.git", ) bazel_dep(name = "devinfra") git_override( module_name = "devinfra", - commit = "2f6d3ae5b1db37b5165f200fb53f30b9330983e4", + commit = "55af1f65dbeb0fe6a3de1d1134bd0dd8bc5e60cc", remote = "https://github.com/angular/dev-infra.git", ) diff --git a/tests/e2e/ng-snapshot/package.json b/tests/e2e/ng-snapshot/package.json index ed8e0877a73e..2801ab623bff 100644 --- a/tests/e2e/ng-snapshot/package.json +++ b/tests/e2e/ng-snapshot/package.json @@ -2,21 +2,21 @@ "description": "snapshot versions of Angular for e2e testing", "private": true, "dependencies": { - "@angular/animations": "github:angular/animations-builds#fca59aea2bead974374a1b5800f532cfd3f2ecc0", - "@angular/cdk": "github:angular/cdk-builds#6cf91c6dd1c56619c0d1df392029684e14103d7d", - "@angular/common": "github:angular/common-builds#9c800da56b742551eef29a21201f2d8e8496bec3", - "@angular/compiler": "github:angular/compiler-builds#7c79f6b7ee7cf9ad6add42ec72186622564c18be", - "@angular/compiler-cli": "github:angular/compiler-cli-builds#c5673873bab181032307291275952232914e3faf", - "@angular/core": "github:angular/core-builds#e90d9c7d25fd74c9717ac2eaa9fcf33bae8805b1", - "@angular/forms": "github:angular/forms-builds#66b7dbe8fe027593b834944ce9415774aa56bf62", - "@angular/language-service": "github:angular/language-service-builds#3aafaf910ad1e934e9985d5e3e688dfef5aabb6b", - "@angular/localize": "github:angular/localize-builds#ca752c3af377b331dbfc20306d67fc5dc514f09f", - "@angular/material": "github:angular/material-builds#c3cc27c4fc2fae694f0b85dbcd9369790cb529ba", - "@angular/material-moment-adapter": "github:angular/material-moment-adapter-builds#b47fc22ebf27a26c2ead5d0120f99213b12bc570", - "@angular/platform-browser": "github:angular/platform-browser-builds#45c2943503401d4dbf92472c5c757671867bd387", - "@angular/platform-browser-dynamic": "github:angular/platform-browser-dynamic-builds#1cf30eca24c03a1c090fbf33863fb45c14069ef2", - "@angular/platform-server": "github:angular/platform-server-builds#059eeec744711c747055dfe9089c028829563bee", - "@angular/router": "github:angular/router-builds#d4732ab6174bad7bc487196075b55d07a58bfadd", - "@angular/service-worker": "github:angular/service-worker-builds#ce86459b459e380464016f23da7a4a1ec0dca6d8" + "@angular/animations": "github:angular/animations-builds#cf1be3c0c0d73273c1be4061ff9da36c91b29e87", + "@angular/cdk": "github:angular/cdk-builds#111b5dda18c848fd93fe53119e4ac89ceb70c51c", + "@angular/common": "github:angular/common-builds#06d6877c59a6693553685eb5b020d2280361e3f2", + "@angular/compiler": "github:angular/compiler-builds#40ed5a5ca522f3f4812de8a25651ca56f620f37c", + "@angular/compiler-cli": "github:angular/compiler-cli-builds#a3bb528b2ec947cbbe801af09a7c7af1d84b8b4b", + "@angular/core": "github:angular/core-builds#f20cc173cf66cea31765c23eff4330bd37406e8f", + "@angular/forms": "github:angular/forms-builds#6b0cd21d8c9d82aca59387557b91189eb65c83bd", + "@angular/language-service": "github:angular/language-service-builds#f2007731f4e0cfcb5301e6fce5396146a6b71ded", + "@angular/localize": "github:angular/localize-builds#febc675c661ccadb0e82556e82e1ef8b7476a38b", + "@angular/material": "github:angular/material-builds#713d145fa7c5ff70c64f305fa54a78b5b5253387", + "@angular/material-moment-adapter": "github:angular/material-moment-adapter-builds#6ab7ed3a245c47184034e03d6b18b7d7ff2478cb", + "@angular/platform-browser": "github:angular/platform-browser-builds#95befc9e69ffcdc117c52b8993ad57331bba593d", + "@angular/platform-browser-dynamic": "github:angular/platform-browser-dynamic-builds#ab7183f40e71027e03b7458e992683dd5323b383", + "@angular/platform-server": "github:angular/platform-server-builds#a9feaa5244a3ca6898343967f3979efb103fb794", + "@angular/router": "github:angular/router-builds#9a98bcb55b5208ad7f8e20e4a25b509d86c21c3a", + "@angular/service-worker": "github:angular/service-worker-builds#07865dbf8dbd2750fea05019e735ec9b04b8ff75" } } From a5ab23e4cf9e8e44b23e8a3536c2f19374e7c967 Mon Sep 17 00:00:00 2001 From: Angular Robot <angular-robot@google.com> Date: Thu, 26 Mar 2026 15:30:38 +0000 Subject: [PATCH 197/226] build: update dependency webpack-dev-middleware to v8 See associated pull request for more information. Closes #32816 as a pr takeover --- .../angular_devkit/build_angular/package.json | 2 +- .../src/builders/karma/browser_builder.ts | 4 +- .../webpack/plugins/karma/karma-context.html | 14 +++--- .../webpack/plugins/karma/karma-debug.html | 14 +++--- .../src/tools/webpack/plugins/karma/karma.ts | 47 +++++++++---------- pnpm-lock.yaml | 25 +++++++++- tests/e2e/tests/test/test-sourcemap.ts | 2 +- 7 files changed, 63 insertions(+), 45 deletions(-) diff --git a/packages/angular_devkit/build_angular/package.json b/packages/angular_devkit/build_angular/package.json index 61b75326fe39..945108770a32 100644 --- a/packages/angular_devkit/build_angular/package.json +++ b/packages/angular_devkit/build_angular/package.json @@ -55,7 +55,7 @@ "tinyglobby": "0.2.15", "tslib": "2.8.1", "webpack": "5.105.4", - "webpack-dev-middleware": "7.4.5", + "webpack-dev-middleware": "8.0.2", "webpack-dev-server": "5.2.3", "webpack-merge": "6.0.1", "webpack-subresource-integrity": "5.1.0" diff --git a/packages/angular_devkit/build_angular/src/builders/karma/browser_builder.ts b/packages/angular_devkit/build_angular/src/builders/karma/browser_builder.ts index e9997b67ea0d..82217779dce7 100644 --- a/packages/angular_devkit/build_angular/src/builders/karma/browser_builder.ts +++ b/packages/angular_devkit/build_angular/src/builders/karma/browser_builder.ts @@ -77,10 +77,8 @@ export function execute( }), ); - const KARMA_APPLICATION_PATH = '_karma_webpack_'; webpackConfig.output ??= {}; - webpackConfig.output.path = `/${KARMA_APPLICATION_PATH}/`; - webpackConfig.output.publicPath = `/${KARMA_APPLICATION_PATH}/`; + webpackConfig.output.path = '/'; if (karmaOptions.singleRun) { webpackConfig.plugins.unshift({ diff --git a/packages/angular_devkit/build_angular/src/tools/webpack/plugins/karma/karma-context.html b/packages/angular_devkit/build_angular/src/tools/webpack/plugins/karma/karma-context.html index 64139997b25a..4babe49f7de8 100644 --- a/packages/angular_devkit/build_angular/src/tools/webpack/plugins/karma/karma-context.html +++ b/packages/angular_devkit/build_angular/src/tools/webpack/plugins/karma/karma-context.html @@ -1,4 +1,4 @@ -<!DOCTYPE html> +<!doctype html> <!-- This is the execution context. Loaded within the iframe. @@ -9,7 +9,7 @@ <title> - + - - + + %SCRIPTS% - - - + + + diff --git a/packages/angular_devkit/build_angular/src/tools/webpack/plugins/karma/karma-debug.html b/packages/angular_devkit/build_angular/src/tools/webpack/plugins/karma/karma-debug.html index f348daf64352..dc58d8e6ee60 100644 --- a/packages/angular_devkit/build_angular/src/tools/webpack/plugins/karma/karma-debug.html +++ b/packages/angular_devkit/build_angular/src/tools/webpack/plugins/karma/karma-debug.html @@ -1,4 +1,4 @@ - + %SCRIPTS% - - - + + + diff --git a/packages/angular_devkit/build_angular/src/tools/webpack/plugins/karma/karma.ts b/packages/angular_devkit/build_angular/src/tools/webpack/plugins/karma/karma.ts index dd1336b5e22d..07aac6f8b9d2 100644 --- a/packages/angular_devkit/build_angular/src/tools/webpack/plugins/karma/karma.ts +++ b/packages/angular_devkit/build_angular/src/tools/webpack/plugins/karma/karma.ts @@ -18,8 +18,6 @@ import { logging } from '@angular-devkit/core'; import { BuildOptions } from '../../../../utils/build-options'; import { normalizeSourceMaps } from '../../../../utils/index'; -const KARMA_APPLICATION_PATH = '_karma_webpack_'; - let webpackMiddleware: webpackDevMiddleware.API; const init: any = (config: any, emitter: any) => { @@ -65,7 +63,6 @@ const init: any = (config: any, emitter: any) => { const webpackMiddlewareConfig = { // Hide webpack output because its noisy. stats: false, - publicPath: `/${KARMA_APPLICATION_PATH}/`, }; config.webpackMiddleware = { ...webpackMiddlewareConfig, ...config.webpackMiddleware }; @@ -147,7 +144,7 @@ const sourceMapReporter: any = function (this: any, baseReporterDecorator: any, baseReporterDecorator(this); muteDuplicateReporterLogging(this, config); - const urlRegexp = /http:\/\/localhost:\d+\/_karma_webpack_\/(webpack:\/)?/gi; + const urlRegexp = /http:\/\/localhost:\d+\/(webpack:\/)?/gi; this.onSpecComplete = function (_browser: any, result: any) { if (!result.success) { @@ -164,6 +161,17 @@ const sourceMapReporter: any = function (this: any, baseReporterDecorator: any, sourceMapReporter.$inject = ['baseReporterDecorator', 'config']; +/** + * List of files that are always served by the webpack server. + */ +const alwaysServe: ReadonlySet = new Set([ + '/runtime.js', + '/polyfills.js', + '/scripts.js', + '/styles.css', + '/vendor.js', +]); + // When a request is not found in the karma server, try looking for it from the webpack server root. function fallbackMiddleware() { return function ( @@ -171,28 +179,19 @@ function fallbackMiddleware() { response: ServerResponse, next: (err?: unknown) => void, ) { - if (webpackMiddleware) { - if (request.url && !new RegExp(`\\/${KARMA_APPLICATION_PATH}\\/.*`).test(request.url)) { - request.url = '/' + KARMA_APPLICATION_PATH + request.url; - } - webpackMiddleware(request, response, () => { - const alwaysServe = [ - `/${KARMA_APPLICATION_PATH}/runtime.js`, - `/${KARMA_APPLICATION_PATH}/polyfills.js`, - `/${KARMA_APPLICATION_PATH}/scripts.js`, - `/${KARMA_APPLICATION_PATH}/styles.css`, - `/${KARMA_APPLICATION_PATH}/vendor.js`, - ]; - if (request.url && alwaysServe.includes(request.url)) { - response.statusCode = 200; - response.end(); - } else { - next(); - } - }); - } else { + if (!webpackMiddleware) { next(); + return; } + + webpackMiddleware(request, response, () => { + if (request.url && alwaysServe.has(request.url)) { + response.statusCode = 200; + response.end(); + } else { + next(); + } + }); }; } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index b4f89355f360..73c6dcd74d1a 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -704,8 +704,8 @@ importers: specifier: 5.105.4 version: 5.105.4(esbuild@0.27.3) webpack-dev-middleware: - specifier: 7.4.5 - version: 7.4.5(tslib@2.8.1)(webpack@5.105.4(esbuild@0.27.3)) + specifier: 8.0.2 + version: 8.0.2(tslib@2.8.1)(webpack@5.105.4(esbuild@0.27.3)) webpack-dev-server: specifier: 5.2.3 version: 5.2.3(bufferutil@4.1.0)(tslib@2.8.1)(utf-8-validate@6.0.6)(webpack@5.105.4(esbuild@0.27.3)) @@ -8112,6 +8112,15 @@ packages: webpack: optional: true + webpack-dev-middleware@8.0.2: + resolution: {integrity: sha512-MCBgoI025uJEcIYDT+R3mXUnhZA/GAxqwngADOwmHxMhQUgDztGow6AmyeEfI8L9KG2pDVg2kU6vjFnbCBH5Pg==} + engines: {node: '>= 20.9.0'} + peerDependencies: + webpack: ^5.101.0 + peerDependenciesMeta: + webpack: + optional: true + webpack-dev-server@5.2.3: resolution: {integrity: sha512-9Gyu2F7+bg4Vv+pjbovuYDhHX+mqdqITykfzdM9UyKqKHlsE5aAjRhR+oOEfXW5vBeu8tarzlJFIZva4ZjAdrQ==} engines: {node: '>= 18.12.0'} @@ -16767,6 +16776,18 @@ snapshots: transitivePeerDependencies: - tslib + webpack-dev-middleware@8.0.2(tslib@2.8.1)(webpack@5.105.4(esbuild@0.27.3)): + dependencies: + memfs: 4.57.1(tslib@2.8.1) + mime-types: 3.0.2 + on-finished: 2.4.1 + range-parser: 1.2.1 + schema-utils: 4.3.3 + optionalDependencies: + webpack: 5.105.4(esbuild@0.27.3) + transitivePeerDependencies: + - tslib + webpack-dev-server@5.2.3(bufferutil@4.1.0)(tslib@2.8.1)(utf-8-validate@6.0.6)(webpack@5.105.4(esbuild@0.27.3)): dependencies: '@types/bonjour': 3.5.13 diff --git a/tests/e2e/tests/test/test-sourcemap.ts b/tests/e2e/tests/test/test-sourcemap.ts index 6c1cf16cd7b3..5d4e668c54b6 100644 --- a/tests/e2e/tests/test/test-sourcemap.ts +++ b/tests/e2e/tests/test/test-sourcemap.ts @@ -32,7 +32,7 @@ export default async function () { } catch (error) { assertIsError(error); assert.match(error.message, /\(src\/app\/app\.spec\.ts:3:27/); - assert.doesNotMatch(error.message, /_karma_webpack_/); + assert.doesNotMatch(error.message, /webpack/); } // when sourcemaps are 'off' the stacktrace won't point to the spec.ts file. From 54c96c8dc02f090984e31f550e84c646829fe66b Mon Sep 17 00:00:00 2001 From: Charles Lyding <19598772+clydin@users.noreply.github.com> Date: Mon, 30 Mar 2026 11:00:27 -0400 Subject: [PATCH 198/226] build: safeguard terminal styling in devkit admin script Prior to this change, if an unhandled promise rejection or error occurred that lacked a `stack` property, the `console.error` wrapper in `devkit-admin.mts` would receive `undefined`. Attempting to pass `undefined` to Node`s `util.styleText` caused an unexpected `ERR_INVALID_ARG_TYPE` crash instead of printing the original error. This commit updates the `console.warn` and `console.error` overrides to ensure they only apply `styleText` to strings. It also updates the top-level try-catch block to fallback to the original error object if `err.stack` is undefined, preventing silent suppression. --- scripts/devkit-admin.mts | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/scripts/devkit-admin.mts b/scripts/devkit-admin.mts index 0a17df9f45a1..7d8522547100 100644 --- a/scripts/devkit-admin.mts +++ b/scripts/devkit-admin.mts @@ -33,12 +33,16 @@ process.chdir(path.join(scriptDir, '..')); const originalConsole = { ...console }; console.warn = function (...args) { - const [m, ...rest] = args; - originalConsole.warn(styleText(['yellow'], m), ...rest); + if (typeof args[0] === 'string') { + args[0] = styleText(['yellow'], args[0]); + } + originalConsole.warn(...args); }; console.error = function (...args) { - const [m, ...rest] = args; - originalConsole.error(styleText(['red'], m), ...rest); + if (typeof args[0] === 'string') { + args[0] = styleText(['red'], args[0]); + } + originalConsole.error(...args); }; try { @@ -47,6 +51,6 @@ try { process.exitCode = typeof exitCode === 'number' ? exitCode : 0; // eslint-disable-next-line @typescript-eslint/no-explicit-any } catch (err: any) { - console.error(err.stack); + console.error(err.stack ?? err); process.exitCode = 99; } From 8dd341e21b8f44e8e2bf3f322cced8ff6e861098 Mon Sep 17 00:00:00 2001 From: Charles Lyding <19598772+clydin@users.noreply.github.com> Date: Mon, 30 Mar 2026 12:18:52 -0400 Subject: [PATCH 199/226] fix(@angular/build): scope CHROME_BIN executable path to individual playwright instances Previously, if CHROME_BIN was set in the environment and a user ran tests targeting the Playwright provider, the path was applied to the global Playwright launch options. This caused tests to crash if a user requested non-Chromium browsers (like Firefox) alongside Chromium, because Playwright would incorrectly attempt to launch the Chrome binary for the Firefox instance. This commit updates the browser configuration to map instances before providers are initialized, and selectively injects `launchOptions: { executablePath: process.env.CHROME_BIN }` at the individual instance level for chrome and chromium only. This restores parity where users can maintain CHROME_BIN variables while safely invoking alternative browsers. --- .../runners/vitest/browser-provider.ts | 33 +++++--- .../runners/vitest/browser-provider_spec.ts | 76 +++++++++++++++++-- 2 files changed, 94 insertions(+), 15 deletions(-) diff --git a/packages/angular/build/src/builders/unit-test/runners/vitest/browser-provider.ts b/packages/angular/build/src/builders/unit-test/runners/vitest/browser-provider.ts index 503f551c15cb..1ccbc1018aa9 100644 --- a/packages/angular/build/src/builders/unit-test/runners/vitest/browser-provider.ts +++ b/packages/angular/build/src/builders/unit-test/runners/vitest/browser-provider.ts @@ -37,7 +37,13 @@ function findBrowserProvider( return undefined; } -function normalizeBrowserName(browserName: string): { browser: string; headless: boolean } { +export interface BrowserInstanceConfiguration { + browser: string; + headless: boolean; + provider?: import('vitest/node').BrowserProviderOption; +} + +function normalizeBrowserName(browserName: string): BrowserInstanceConfiguration { // Normalize browser names to match Vitest's expectations for headless but also supports karma's names // e.g., 'ChromeHeadless' -> 'chrome', 'FirefoxHeadless' -> 'firefox' // and 'Chrome' -> 'chrome', 'Firefox' -> 'firefox'. @@ -79,6 +85,8 @@ export async function setupBrowserConfiguration( ); } + const instances = browsers.map(normalizeBrowserName); + let provider: import('vitest/node').BrowserProviderOption | undefined; if (providerName) { const providerPackage = `@vitest/browser-${providerName}`; @@ -90,17 +98,25 @@ export async function setupBrowserConfiguration( if (typeof providerFactory === 'function') { if (providerName === 'playwright') { const executablePath = process.env['CHROME_BIN']; - provider = providerFactory({ - launchOptions: executablePath - ? { - executablePath, - } - : undefined, + const baseOptions = { contextOptions: { // Enables `prefer-color-scheme` for Vitest browser instead of `light` colorScheme: null, }, - }); + }; + + provider = providerFactory(baseOptions); + + if (executablePath) { + for (const instance of instances) { + if (instance.browser === 'chrome' || instance.browser === 'chromium') { + instance.provider = providerFactory({ + ...baseOptions, + launchOptions: { executablePath }, + }); + } + } + } } else { provider = providerFactory(); } @@ -133,7 +149,6 @@ export async function setupBrowserConfiguration( } const isCI = !!process.env['CI']; - const instances = browsers.map(normalizeBrowserName); const messages: string[] = []; if (providerName === 'preview') { diff --git a/packages/angular/build/src/builders/unit-test/runners/vitest/browser-provider_spec.ts b/packages/angular/build/src/builders/unit-test/runners/vitest/browser-provider_spec.ts index 66f7254593b0..f6b32d54a5a5 100644 --- a/packages/angular/build/src/builders/unit-test/runners/vitest/browser-provider_spec.ts +++ b/packages/angular/build/src/builders/unit-test/runners/vitest/browser-provider_spec.ts @@ -47,8 +47,8 @@ describe('setupBrowserConfiguration', () => { expect(browser?.enabled).toBeTrue(); expect(browser?.instances).toEqual([ - { browser: 'chrome', headless: true }, - { browser: 'firefox', headless: false }, + jasmine.objectContaining({ browser: 'chrome', headless: true }), + jasmine.objectContaining({ browser: 'firefox', headless: false }), ]); }); @@ -66,8 +66,8 @@ describe('setupBrowserConfiguration', () => { ); expect(browser?.instances).toEqual([ - { browser: 'chrome', headless: true }, - { browser: 'firefox', headless: true }, + jasmine.objectContaining({ browser: 'chrome', headless: true }), + jasmine.objectContaining({ browser: 'firefox', headless: true }), ]); } finally { if (originalCI === undefined) { @@ -196,8 +196,8 @@ describe('setupBrowserConfiguration', () => { ); expect(browser?.instances).toEqual([ - { browser: 'chrome', headless: true }, - { browser: 'firefox', headless: true }, + jasmine.objectContaining({ browser: 'chrome', headless: true }), + jasmine.objectContaining({ browser: 'firefox', headless: true }), ]); expect(messages).toEqual([]); }); @@ -215,4 +215,68 @@ describe('setupBrowserConfiguration', () => { 'The "headless" option is unnecessary as all browsers are already configured to run in headless mode.', ]); }); + + describe('CHROME_BIN usage', () => { + let originalChromeBin: string | undefined; + + beforeEach(() => { + originalChromeBin = process.env['CHROME_BIN']; + process.env['CHROME_BIN'] = '/custom/path/to/chrome'; + }); + + afterEach(() => { + if (originalChromeBin === undefined) { + delete process.env['CHROME_BIN']; + } else { + process.env['CHROME_BIN'] = originalChromeBin; + } + }); + + it('should set executablePath on the individual chrome instance', async () => { + const { browser } = await setupBrowserConfiguration( + ['ChromeHeadless', 'Chromium'], + undefined, + false, + workspaceRoot, + undefined, + ); + + // Verify the global provider does NOT have executablePath + // eslint-disable-next-line @typescript-eslint/no-explicit-any + expect((browser?.provider as any)?.options?.launchOptions?.executablePath).toBeUndefined(); + + // Verify the individual instances have executablePath + expect( + // eslint-disable-next-line @typescript-eslint/no-explicit-any + (browser?.instances?.[0]?.provider as any)?.options?.launchOptions?.executablePath, + ).toBe('/custom/path/to/chrome'); + expect( + // eslint-disable-next-line @typescript-eslint/no-explicit-any + (browser?.instances?.[1]?.provider as any)?.options?.launchOptions?.executablePath, + ).toBe('/custom/path/to/chrome'); + }); + + it('should set executablePath for chrome instances but not for others when mixed browsers are requested', async () => { + const { browser } = await setupBrowserConfiguration( + ['ChromeHeadless', 'Firefox'], + undefined, + false, + workspaceRoot, + undefined, + ); + + // Verify the global provider does NOT have executablePath + // eslint-disable-next-line @typescript-eslint/no-explicit-any + expect((browser?.provider as any)?.options?.launchOptions?.executablePath).toBeUndefined(); + + // Verify chrome gets it + expect( + // eslint-disable-next-line @typescript-eslint/no-explicit-any + (browser?.instances?.[0]?.provider as any)?.options?.launchOptions?.executablePath, + ).toBe('/custom/path/to/chrome'); + + // Verify firefox does not + expect(browser?.instances?.[1]?.provider).toBeUndefined(); + }); + }); }); From 3663f80f0738052cc569e87cfeafbdebbd8fc07a Mon Sep 17 00:00:00 2001 From: Charles Lyding <19598772+clydin@users.noreply.github.com> Date: Mon, 30 Mar 2026 14:59:50 -0400 Subject: [PATCH 200/226] refactor(@angular/build): extract headless configuration logic into helper function This extracts the verbose headless property mutation logic from the monolithic setupBrowserConfiguration function into a standalone applyHeadlessConfiguration helper function to improve maintainability and readability. --- .../runners/vitest/browser-provider.ts | 99 +++++++++++++------ .../runners/vitest/browser-provider_spec.ts | 40 +++++++- 2 files changed, 107 insertions(+), 32 deletions(-) diff --git a/packages/angular/build/src/builders/unit-test/runners/vitest/browser-provider.ts b/packages/angular/build/src/builders/unit-test/runners/vitest/browser-provider.ts index 1ccbc1018aa9..0ca80f4fa60f 100644 --- a/packages/angular/build/src/builders/unit-test/runners/vitest/browser-provider.ts +++ b/packages/angular/build/src/builders/unit-test/runners/vitest/browser-provider.ts @@ -7,7 +7,11 @@ */ import { createRequire } from 'node:module'; -import type { BrowserBuiltinProvider, BrowserConfigOptions } from 'vitest/node'; +import type { + BrowserBuiltinProvider, + BrowserConfigOptions, + BrowserProviderOption, +} from 'vitest/node'; import { assertIsError } from '../../../../utils/error'; export interface BrowserConfiguration { @@ -40,7 +44,7 @@ function findBrowserProvider( export interface BrowserInstanceConfiguration { browser: string; headless: boolean; - provider?: import('vitest/node').BrowserProviderOption; + provider?: BrowserProviderOption; } function normalizeBrowserName(browserName: string): BrowserInstanceConfiguration { @@ -56,6 +60,67 @@ function normalizeBrowserName(browserName: string): BrowserInstanceConfiguration }; } +/** + * Mutates the provided browser instances to apply standard headless execution + * constraints based on the chosen provider, user options, and CI environment presence. + * + * @param instances The normalized browser instances to mutate. + * @param providerName The identifier for the chosen Vitest browser provider. + * @param headless The user-provided headless configuration option. + * @param isCI Whether the current environment is running in CI. + * @returns An array of informational messages generated during evaluation. + */ +export function applyHeadlessConfiguration( + instances: BrowserInstanceConfiguration[], + providerName: BrowserBuiltinProvider | undefined, + headless: boolean | undefined, + isCI: boolean, +): string[] { + const messages: string[] = []; + + if (providerName === 'preview') { + instances.forEach((instance) => { + // Preview mode only supports headed execution + instance.headless = false; + }); + + if (headless) { + messages.push('The "headless" option is ignored when using the "preview" provider.'); + } + } else if (headless !== undefined) { + if (headless) { + const allHeadlessByDefault = isCI || instances.every((i) => i.headless); + if (allHeadlessByDefault) { + messages.push( + 'The "headless" option is unnecessary as all browsers are already configured to run in headless mode.', + ); + } + } + + instances.forEach((instance) => { + instance.headless = headless; + }); + } else if (isCI) { + instances.forEach((instance) => { + instance.headless = true; + }); + } + + return messages; +} + +/** + * Resolves and configures the Vitest browser provider for the unit test builder. + * Dynamically discovers and imports the necessary provider (Playwright, WebdriverIO, or Preview), + * maps the requested browser instances, and applies environment-specific execution logic. + * + * @param browsers An array of requested browser names (e.g., 'chrome', 'firefox'). + * @param headless User-provided configuration for headless execution. + * @param debug Whether the builder is running in watch or debug mode. + * @param projectSourceRoot The root directory of the project being tested for resolving installed packages. + * @param viewport Optional viewport dimensions to apply to the launched browser instances. + * @returns A fully resolved Vitest browser configuration object alongside any generated warning or error messages. + */ export async function setupBrowserConfiguration( browsers: string[] | undefined, headless: boolean | undefined, @@ -149,35 +214,7 @@ export async function setupBrowserConfiguration( } const isCI = !!process.env['CI']; - const messages: string[] = []; - - if (providerName === 'preview') { - instances.forEach((instance) => { - // Preview mode only supports headed execution - instance.headless = false; - }); - - if (headless) { - messages.push('The "headless" option is ignored when using the "preview" provider.'); - } - } else if (headless !== undefined) { - if (headless) { - const allHeadlessByDefault = isCI || instances.every((i) => i.headless); - if (allHeadlessByDefault) { - messages.push( - 'The "headless" option is unnecessary as all browsers are already configured to run in headless mode.', - ); - } - } - - instances.forEach((instance) => { - instance.headless = headless; - }); - } else if (isCI) { - instances.forEach((instance) => { - instance.headless = true; - }); - } + const messages = applyHeadlessConfiguration(instances, providerName, headless, isCI); const browser = { enabled: true, diff --git a/packages/angular/build/src/builders/unit-test/runners/vitest/browser-provider_spec.ts b/packages/angular/build/src/builders/unit-test/runners/vitest/browser-provider_spec.ts index f6b32d54a5a5..0dd0778420bd 100644 --- a/packages/angular/build/src/builders/unit-test/runners/vitest/browser-provider_spec.ts +++ b/packages/angular/build/src/builders/unit-test/runners/vitest/browser-provider_spec.ts @@ -9,7 +9,7 @@ import { mkdir, mkdtemp, rm, writeFile } from 'node:fs/promises'; import { tmpdir } from 'node:os'; import { join } from 'node:path'; -import { setupBrowserConfiguration } from './browser-provider'; +import { applyHeadlessConfiguration, setupBrowserConfiguration } from './browser-provider'; describe('setupBrowserConfiguration', () => { let workspaceRoot: string; @@ -279,4 +279,42 @@ describe('setupBrowserConfiguration', () => { expect(browser?.instances?.[1]?.provider).toBeUndefined(); }); }); + + describe('applyHeadlessConfiguration', () => { + it('should set headless false and issue warning when using preview provider with headless true', () => { + const instances = [{ browser: 'chrome', headless: true }]; + const messages = applyHeadlessConfiguration(instances, 'preview', true, false); + + expect(instances[0].headless).toBeFalse(); + expect(messages).toEqual([ + 'The "headless" option is ignored when using the "preview" provider.', + ]); + }); + + it('should force headless mode when headless option is true', () => { + const instances = [{ browser: 'chrome', headless: false }]; + const messages = applyHeadlessConfiguration(instances, 'playwright', true, false); + + expect(instances[0].headless).toBeTrue(); + expect(messages).toEqual([]); + }); + + it('should return information message when headless option is redundant', () => { + const instances = [{ browser: 'chrome', headless: true }]; + const messages = applyHeadlessConfiguration(instances, 'playwright', true, false); + + expect(instances[0].headless).toBeTrue(); + expect(messages).toEqual([ + 'The "headless" option is unnecessary as all browsers are already configured to run in headless mode.', + ]); + }); + + it('should force headless mode in CI environment when headless is undefined', () => { + const instances = [{ browser: 'chrome', headless: false }]; + const messages = applyHeadlessConfiguration(instances, 'playwright', undefined, true); + + expect(instances[0].headless).toBeTrue(); + expect(messages).toEqual([]); + }); + }); }); From 96c675bf65a2a1f0681c6aa1f32c77d120b701f8 Mon Sep 17 00:00:00 2001 From: Alan Agius <17563226+alan-agius4@users.noreply.github.com> Date: Wed, 1 Apr 2026 13:09:22 +0000 Subject: [PATCH 201/226] docs: release notes for the v21.2.6 release --- CHANGELOG.md | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2eff6a259035..894cc1e72d9d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,24 @@ + + +# 21.2.6 (2026-04-01) + +### @angular/cli + +| Commit | Type | Description | +| --------------------------------------------------------------------------------------------------- | ---- | ----------------------------------------------- | +| [ea14f28cc](https://github.com/angular/angular-cli/commit/ea14f28ccfc6e5534eaef516bf1bfbe21582da04) | fix | fix sourceRoot resolution for MCP projects tool | + +### @angular/build + +| Commit | Type | Description | +| --------------------------------------------------------------------------------------------------- | ---- | ------------------------------------------------------------------- | +| [9136eb376](https://github.com/angular/angular-cli/commit/9136eb37630d6315891b3c881cd0ba4037c3254c) | fix | ensure transitive SCSS partial errors are tracked in watch mode | +| [8186faa11](https://github.com/angular/angular-cli/commit/8186faa117803ffb6ac8e2c4cd6ab7873502308d) | fix | ensure Vitest mock patching is executed only once | +| [107d1a9e2](https://github.com/angular/angular-cli/commit/107d1a9e26fc59c7878254e563758818866f0f6e) | fix | preserve error stack traces during prerendering | +| [b7f457253](https://github.com/angular/angular-cli/commit/b7f4572533675729e87532bdc23509feb2f3a28d) | fix | scope CHROME_BIN executable path to individual playwright instances | + + + # 21.2.5 (2026-03-27) From 636ddee450d6948d2105368dea4969cb54fca9da Mon Sep 17 00:00:00 2001 From: Angular Robot Date: Wed, 1 Apr 2026 12:19:24 +0000 Subject: [PATCH 202/226] build: update cross-repo angular dependencies See associated pull request for more information. --- .../assistant-to-the-branch-manager.yml | 2 +- .github/workflows/ci.yml | 52 +- .github/workflows/dev-infra.yml | 6 +- .github/workflows/perf.yml | 6 +- .github/workflows/pr.yml | 44 +- MODULE.bazel | 6 +- MODULE.bazel.lock | 2 +- package.json | 2 +- pnpm-lock.yaml | 484 +++++++++--------- tests/e2e/ng-snapshot/package.json | 32 +- 10 files changed, 315 insertions(+), 321 deletions(-) diff --git a/.github/workflows/assistant-to-the-branch-manager.yml b/.github/workflows/assistant-to-the-branch-manager.yml index d32cd27e86d8..efde5bc5d875 100644 --- a/.github/workflows/assistant-to-the-branch-manager.yml +++ b/.github/workflows/assistant-to-the-branch-manager.yml @@ -17,6 +17,6 @@ jobs: - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 with: persist-credentials: false - - uses: angular/dev-infra/github-actions/branch-manager@55af1f65dbeb0fe6a3de1d1134bd0dd8bc5e60cc + - uses: angular/dev-infra/github-actions/branch-manager@616a50d0b747031b7ea052733adf3771fa6cace9 with: angular-robot-key: ${{ secrets.ANGULAR_ROBOT_PRIVATE_KEY }} diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 911141332c9d..8bfb5819b802 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -21,9 +21,9 @@ jobs: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@55af1f65dbeb0fe6a3de1d1134bd0dd8bc5e60cc + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@616a50d0b747031b7ea052733adf3771fa6cace9 - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@55af1f65dbeb0fe6a3de1d1134bd0dd8bc5e60cc + uses: angular/dev-infra/github-actions/bazel/setup@616a50d0b747031b7ea052733adf3771fa6cace9 - name: Install node modules run: pnpm install --frozen-lockfile - name: Generate JSON schema types @@ -44,11 +44,11 @@ jobs: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@55af1f65dbeb0fe6a3de1d1134bd0dd8bc5e60cc + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@616a50d0b747031b7ea052733adf3771fa6cace9 - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@55af1f65dbeb0fe6a3de1d1134bd0dd8bc5e60cc + uses: angular/dev-infra/github-actions/bazel/setup@616a50d0b747031b7ea052733adf3771fa6cace9 - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@55af1f65dbeb0fe6a3de1d1134bd0dd8bc5e60cc + uses: angular/dev-infra/github-actions/bazel/configure-remote@616a50d0b747031b7ea052733adf3771fa6cace9 with: google_credential: ${{ secrets.RBE_TRUSTED_BUILDS_USER }} - name: Install node modules @@ -61,11 +61,11 @@ jobs: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@55af1f65dbeb0fe6a3de1d1134bd0dd8bc5e60cc + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@616a50d0b747031b7ea052733adf3771fa6cace9 - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@55af1f65dbeb0fe6a3de1d1134bd0dd8bc5e60cc + uses: angular/dev-infra/github-actions/bazel/setup@616a50d0b747031b7ea052733adf3771fa6cace9 - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@55af1f65dbeb0fe6a3de1d1134bd0dd8bc5e60cc + uses: angular/dev-infra/github-actions/bazel/configure-remote@616a50d0b747031b7ea052733adf3771fa6cace9 with: google_credential: ${{ secrets.RBE_TRUSTED_BUILDS_USER }} - name: Install node modules @@ -84,13 +84,13 @@ jobs: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@55af1f65dbeb0fe6a3de1d1134bd0dd8bc5e60cc + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@616a50d0b747031b7ea052733adf3771fa6cace9 - name: Install node modules run: pnpm install --frozen-lockfile - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@55af1f65dbeb0fe6a3de1d1134bd0dd8bc5e60cc + uses: angular/dev-infra/github-actions/bazel/setup@616a50d0b747031b7ea052733adf3771fa6cace9 - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@55af1f65dbeb0fe6a3de1d1134bd0dd8bc5e60cc + uses: angular/dev-infra/github-actions/bazel/configure-remote@616a50d0b747031b7ea052733adf3771fa6cace9 with: google_credential: ${{ secrets.RBE_TRUSTED_BUILDS_USER }} - name: Run CLI E2E tests @@ -100,11 +100,11 @@ jobs: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@55af1f65dbeb0fe6a3de1d1134bd0dd8bc5e60cc + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@616a50d0b747031b7ea052733adf3771fa6cace9 - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@55af1f65dbeb0fe6a3de1d1134bd0dd8bc5e60cc + uses: angular/dev-infra/github-actions/bazel/setup@616a50d0b747031b7ea052733adf3771fa6cace9 - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@55af1f65dbeb0fe6a3de1d1134bd0dd8bc5e60cc + uses: angular/dev-infra/github-actions/bazel/configure-remote@616a50d0b747031b7ea052733adf3771fa6cace9 with: google_credential: ${{ secrets.RBE_TRUSTED_BUILDS_USER }} - name: Install node modules @@ -137,7 +137,7 @@ jobs: runs-on: windows-2025 steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@55af1f65dbeb0fe6a3de1d1134bd0dd8bc5e60cc + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@616a50d0b747031b7ea052733adf3771fa6cace9 - name: Install node modules run: pnpm install --frozen-lockfile - name: Download built Windows E2E tests @@ -164,13 +164,13 @@ jobs: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@55af1f65dbeb0fe6a3de1d1134bd0dd8bc5e60cc + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@616a50d0b747031b7ea052733adf3771fa6cace9 - name: Install node modules run: pnpm install --frozen-lockfile - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@55af1f65dbeb0fe6a3de1d1134bd0dd8bc5e60cc + uses: angular/dev-infra/github-actions/bazel/setup@616a50d0b747031b7ea052733adf3771fa6cace9 - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@55af1f65dbeb0fe6a3de1d1134bd0dd8bc5e60cc + uses: angular/dev-infra/github-actions/bazel/configure-remote@616a50d0b747031b7ea052733adf3771fa6cace9 with: google_credential: ${{ secrets.RBE_TRUSTED_BUILDS_USER }} - name: Run CLI E2E tests @@ -188,13 +188,13 @@ jobs: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@55af1f65dbeb0fe6a3de1d1134bd0dd8bc5e60cc + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@616a50d0b747031b7ea052733adf3771fa6cace9 - name: Install node modules run: pnpm install --frozen-lockfile - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@55af1f65dbeb0fe6a3de1d1134bd0dd8bc5e60cc + uses: angular/dev-infra/github-actions/bazel/setup@616a50d0b747031b7ea052733adf3771fa6cace9 - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@55af1f65dbeb0fe6a3de1d1134bd0dd8bc5e60cc + uses: angular/dev-infra/github-actions/bazel/configure-remote@616a50d0b747031b7ea052733adf3771fa6cace9 with: google_credential: ${{ secrets.RBE_TRUSTED_BUILDS_USER }} - name: Run CLI E2E tests @@ -208,13 +208,13 @@ jobs: SAUCE_TUNNEL_IDENTIFIER: angular-cli-${{ github.workflow }}-${{ github.run_number }} steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@55af1f65dbeb0fe6a3de1d1134bd0dd8bc5e60cc + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@616a50d0b747031b7ea052733adf3771fa6cace9 - name: Install node modules run: pnpm install --frozen-lockfile - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@55af1f65dbeb0fe6a3de1d1134bd0dd8bc5e60cc + uses: angular/dev-infra/github-actions/bazel/setup@616a50d0b747031b7ea052733adf3771fa6cace9 - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@55af1f65dbeb0fe6a3de1d1134bd0dd8bc5e60cc + uses: angular/dev-infra/github-actions/bazel/configure-remote@616a50d0b747031b7ea052733adf3771fa6cace9 with: google_credential: ${{ secrets.RBE_TRUSTED_BUILDS_USER }} - name: Run E2E Browser tests @@ -244,11 +244,11 @@ jobs: CIRCLE_BRANCH: ${{ github.ref_name }} steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@55af1f65dbeb0fe6a3de1d1134bd0dd8bc5e60cc + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@616a50d0b747031b7ea052733adf3771fa6cace9 - name: Install node modules run: pnpm install --frozen-lockfile - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@55af1f65dbeb0fe6a3de1d1134bd0dd8bc5e60cc + uses: angular/dev-infra/github-actions/bazel/setup@616a50d0b747031b7ea052733adf3771fa6cace9 - run: pnpm admin snapshots --verbose env: SNAPSHOT_BUILDS_GITHUB_TOKEN: ${{ secrets.SNAPSHOT_BUILDS_GITHUB_TOKEN }} diff --git a/.github/workflows/dev-infra.yml b/.github/workflows/dev-infra.yml index e2931fd90072..bf29d1e38ae4 100644 --- a/.github/workflows/dev-infra.yml +++ b/.github/workflows/dev-infra.yml @@ -15,21 +15,21 @@ jobs: if: github.event_name == 'pull_request_target' runs-on: ubuntu-latest steps: - - uses: angular/dev-infra/github-actions/labeling/pull-request@55af1f65dbeb0fe6a3de1d1134bd0dd8bc5e60cc + - uses: angular/dev-infra/github-actions/labeling/pull-request@616a50d0b747031b7ea052733adf3771fa6cace9 with: angular-robot-key: ${{ secrets.ANGULAR_ROBOT_PRIVATE_KEY }} post_approval_changes: if: github.event_name == 'pull_request_target' runs-on: ubuntu-latest steps: - - uses: angular/dev-infra/github-actions/post-approval-changes@55af1f65dbeb0fe6a3de1d1134bd0dd8bc5e60cc + - uses: angular/dev-infra/github-actions/post-approval-changes@616a50d0b747031b7ea052733adf3771fa6cace9 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@55af1f65dbeb0fe6a3de1d1134bd0dd8bc5e60cc + - uses: angular/dev-infra/github-actions/labeling/issue@616a50d0b747031b7ea052733adf3771fa6cace9 with: angular-robot-key: ${{ secrets.ANGULAR_ROBOT_PRIVATE_KEY }} google-generative-ai-key: ${{ secrets.GOOGLE_GENERATIVE_AI_KEY }} diff --git a/.github/workflows/perf.yml b/.github/workflows/perf.yml index b1671b229d8a..675676394863 100644 --- a/.github/workflows/perf.yml +++ b/.github/workflows/perf.yml @@ -23,7 +23,7 @@ jobs: workflows: ${{ steps.workflows.outputs.workflows }} steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@55af1f65dbeb0fe6a3de1d1134bd0dd8bc5e60cc + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@616a50d0b747031b7ea052733adf3771fa6cace9 - name: Install node modules run: pnpm install --frozen-lockfile - id: workflows @@ -38,9 +38,9 @@ jobs: workflow: ${{ fromJSON(needs.list.outputs.workflows) }} steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@55af1f65dbeb0fe6a3de1d1134bd0dd8bc5e60cc + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@616a50d0b747031b7ea052733adf3771fa6cace9 - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@55af1f65dbeb0fe6a3de1d1134bd0dd8bc5e60cc + uses: angular/dev-infra/github-actions/bazel/setup@616a50d0b747031b7ea052733adf3771fa6cace9 - name: Install node modules run: pnpm install --frozen-lockfile # We utilize the google-github-actions/auth action to allow us to get an active credential using workflow diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml index 79512cad71eb..046a712df616 100644 --- a/.github/workflows/pr.yml +++ b/.github/workflows/pr.yml @@ -34,9 +34,9 @@ jobs: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@55af1f65dbeb0fe6a3de1d1134bd0dd8bc5e60cc + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@616a50d0b747031b7ea052733adf3771fa6cace9 - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@55af1f65dbeb0fe6a3de1d1134bd0dd8bc5e60cc + uses: angular/dev-infra/github-actions/bazel/setup@616a50d0b747031b7ea052733adf3771fa6cace9 - name: Setup ESLint Caching uses: actions/cache@668228422ae6a00e4ad889ee87cd7109ec5666a7 # v5.0.4 with: @@ -66,17 +66,17 @@ jobs: # it has been merged. run: pnpm ng-dev format changed --check ${{ github.event.pull_request.base.sha }} - name: Check Package Licenses - uses: angular/dev-infra/github-actions/linting/licenses@55af1f65dbeb0fe6a3de1d1134bd0dd8bc5e60cc + uses: angular/dev-infra/github-actions/linting/licenses@616a50d0b747031b7ea052733adf3771fa6cace9 build: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@55af1f65dbeb0fe6a3de1d1134bd0dd8bc5e60cc + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@616a50d0b747031b7ea052733adf3771fa6cace9 - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@55af1f65dbeb0fe6a3de1d1134bd0dd8bc5e60cc + uses: angular/dev-infra/github-actions/bazel/setup@616a50d0b747031b7ea052733adf3771fa6cace9 - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@55af1f65dbeb0fe6a3de1d1134bd0dd8bc5e60cc + uses: angular/dev-infra/github-actions/bazel/configure-remote@616a50d0b747031b7ea052733adf3771fa6cace9 - name: Install node modules run: pnpm install --frozen-lockfile - name: Build release targets @@ -93,11 +93,11 @@ jobs: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@55af1f65dbeb0fe6a3de1d1134bd0dd8bc5e60cc + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@616a50d0b747031b7ea052733adf3771fa6cace9 - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@55af1f65dbeb0fe6a3de1d1134bd0dd8bc5e60cc + uses: angular/dev-infra/github-actions/bazel/setup@616a50d0b747031b7ea052733adf3771fa6cace9 - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@55af1f65dbeb0fe6a3de1d1134bd0dd8bc5e60cc + uses: angular/dev-infra/github-actions/bazel/configure-remote@616a50d0b747031b7ea052733adf3771fa6cace9 - name: Install node modules run: pnpm install --frozen-lockfile - name: Run module and package tests @@ -114,13 +114,13 @@ jobs: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@55af1f65dbeb0fe6a3de1d1134bd0dd8bc5e60cc + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@616a50d0b747031b7ea052733adf3771fa6cace9 - name: Install node modules run: pnpm install --frozen-lockfile - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@55af1f65dbeb0fe6a3de1d1134bd0dd8bc5e60cc + uses: angular/dev-infra/github-actions/bazel/setup@616a50d0b747031b7ea052733adf3771fa6cace9 - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@55af1f65dbeb0fe6a3de1d1134bd0dd8bc5e60cc + uses: angular/dev-infra/github-actions/bazel/configure-remote@616a50d0b747031b7ea052733adf3771fa6cace9 - name: Run CLI E2E tests run: pnpm bazel test --test_env=E2E_SHARD_TOTAL=6 --test_env=E2E_SHARD_INDEX=${{ matrix.shard }} --config=e2e //tests:e2e.${{ matrix.subset }}_node${{ matrix.node }} @@ -128,11 +128,11 @@ jobs: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@55af1f65dbeb0fe6a3de1d1134bd0dd8bc5e60cc + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@616a50d0b747031b7ea052733adf3771fa6cace9 - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@55af1f65dbeb0fe6a3de1d1134bd0dd8bc5e60cc + uses: angular/dev-infra/github-actions/bazel/setup@616a50d0b747031b7ea052733adf3771fa6cace9 - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@55af1f65dbeb0fe6a3de1d1134bd0dd8bc5e60cc + uses: angular/dev-infra/github-actions/bazel/configure-remote@616a50d0b747031b7ea052733adf3771fa6cace9 - name: Install node modules run: pnpm install --frozen-lockfile - name: Build E2E tests for Windows on Linux @@ -156,7 +156,7 @@ jobs: runs-on: windows-2025 steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@55af1f65dbeb0fe6a3de1d1134bd0dd8bc5e60cc + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@616a50d0b747031b7ea052733adf3771fa6cace9 - name: Install node modules run: pnpm install --frozen-lockfile - name: Download built Windows E2E tests @@ -183,13 +183,13 @@ jobs: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@55af1f65dbeb0fe6a3de1d1134bd0dd8bc5e60cc + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@616a50d0b747031b7ea052733adf3771fa6cace9 - name: Install node modules run: pnpm install --frozen-lockfile - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@55af1f65dbeb0fe6a3de1d1134bd0dd8bc5e60cc + uses: angular/dev-infra/github-actions/bazel/setup@616a50d0b747031b7ea052733adf3771fa6cace9 - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@55af1f65dbeb0fe6a3de1d1134bd0dd8bc5e60cc + uses: angular/dev-infra/github-actions/bazel/configure-remote@616a50d0b747031b7ea052733adf3771fa6cace9 - name: Run CLI E2E tests run: pnpm bazel test --test_env=E2E_SHARD_TOTAL=3 --test_env=E2E_SHARD_INDEX=${{ matrix.shard }} --config=e2e //tests:e2e.${{ matrix.subset }}_node${{ matrix.node }} @@ -205,12 +205,12 @@ jobs: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@55af1f65dbeb0fe6a3de1d1134bd0dd8bc5e60cc + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@616a50d0b747031b7ea052733adf3771fa6cace9 - name: Install node modules run: pnpm install --frozen-lockfile - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@55af1f65dbeb0fe6a3de1d1134bd0dd8bc5e60cc + uses: angular/dev-infra/github-actions/bazel/setup@616a50d0b747031b7ea052733adf3771fa6cace9 - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@55af1f65dbeb0fe6a3de1d1134bd0dd8bc5e60cc + uses: angular/dev-infra/github-actions/bazel/configure-remote@616a50d0b747031b7ea052733adf3771fa6cace9 - name: Run CLI E2E tests run: pnpm bazel test --test_env=E2E_SHARD_TOTAL=6 --test_env=E2E_SHARD_INDEX=${{ matrix.shard }} --config=e2e //tests:e2e.snapshots.${{ matrix.subset }}_node${{ matrix.node }} diff --git a/MODULE.bazel b/MODULE.bazel index 81e2d9464997..9b3e2bed517b 100644 --- a/MODULE.bazel +++ b/MODULE.bazel @@ -19,14 +19,14 @@ bazel_dep(name = "aspect_rules_jasmine", version = "2.0.4") bazel_dep(name = "rules_angular") git_override( module_name = "rules_angular", - commit = "19a4a8fb4d6f035b5506ca21bbbd309ab5f5e729", + commit = "32ce54318d9ec5d84269d4acecbc39944cd8b5e7", remote = "https://github.com/angular/rules_angular.git", ) bazel_dep(name = "devinfra") git_override( module_name = "devinfra", - commit = "55af1f65dbeb0fe6a3de1d1134bd0dd8bc5e60cc", + commit = "616a50d0b747031b7ea052733adf3771fa6cace9", remote = "https://github.com/angular/dev-infra.git", ) @@ -40,7 +40,7 @@ git_override( bazel_dep(name = "rules_browsers") git_override( module_name = "rules_browsers", - commit = "46029652792eac7bb51b6abd04503af296db70ea", + commit = "afdc95c1ce8ed9ff0cb94f829b7fc988c43dd783", remote = "https://github.com/angular/rules_browsers.git", ) diff --git a/MODULE.bazel.lock b/MODULE.bazel.lock index e377ca75496b..59025318b553 100644 --- a/MODULE.bazel.lock +++ b/MODULE.bazel.lock @@ -951,7 +951,7 @@ "@@rules_nodejs+//nodejs:extensions.bzl%node": { "general": { "bzlTransitiveDigest": "4pUxCNc22K4I+6+4Nxu52Hur12tFRfa1JMsN5mdDv60=", - "usagesDigest": "w///UlcYjRDXPNn95Y2mOOunmakp+DaRy/wpjFBwaMg=", + "usagesDigest": "Y6U29CqmYKc6K0sgS/ygHdxb40MzJPS7jcDCXXExPZw=", "recordedFileInputs": {}, "recordedDirentsInputs": {}, "envVariables": {}, diff --git a/package.json b/package.json index 33da88c7a27c..f4ab46767984 100644 --- a/package.json +++ b/package.json @@ -51,7 +51,7 @@ "@angular/forms": "22.0.0-next.5", "@angular/localize": "22.0.0-next.5", "@angular/material": "22.0.0-next.2", - "@angular/ng-dev": "https://github.com/angular/dev-infra-private-ng-dev-builds.git#88dbc0543ffbc4df720ac87c0d413fab45ea1491", + "@angular/ng-dev": "https://github.com/angular/dev-infra-private-ng-dev-builds.git#cdbe118e59f59b1ee00ff77a5ccf8c5328248d03", "@angular/platform-browser": "22.0.0-next.5", "@angular/platform-server": "22.0.0-next.5", "@angular/router": "22.0.0-next.5", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 73c6dcd74d1a..059778cc987b 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -47,8 +47,8 @@ importers: specifier: 22.0.0-next.2 version: 22.0.0-next.2(2f6ce0790131a0100070320bdabac3a2) '@angular/ng-dev': - specifier: https://github.com/angular/dev-infra-private-ng-dev-builds.git#88dbc0543ffbc4df720ac87c0d413fab45ea1491 - version: https://codeload.github.com/angular/dev-infra-private-ng-dev-builds/tar.gz/88dbc0543ffbc4df720ac87c0d413fab45ea1491(@modelcontextprotocol/sdk@1.28.0(zod@4.3.6)) + specifier: https://github.com/angular/dev-infra-private-ng-dev-builds.git#cdbe118e59f59b1ee00ff77a5ccf8c5328248d03 + version: https://codeload.github.com/angular/dev-infra-private-ng-dev-builds/tar.gz/cdbe118e59f59b1ee00ff77a5ccf8c5328248d03(@modelcontextprotocol/sdk@1.28.0(zod@4.3.6)) '@angular/platform-browser': specifier: 22.0.0-next.5 version: 22.0.0-next.5(@angular/animations@22.0.0-next.5(@angular/core@22.0.0-next.5(@angular/compiler@22.0.0-next.5)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@22.0.0-next.5(@angular/core@22.0.0-next.5(@angular/compiler@22.0.0-next.5)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.5(@angular/compiler@22.0.0-next.5)(rxjs@7.8.2)(zone.js@0.16.1)) @@ -1002,9 +1002,9 @@ packages: '@angular/platform-browser': ^22.0.0-0 || ^22.1.0-0 || ^22.2.0-0 || ^22.3.0-0 || ^23.0.0-0 rxjs: ^6.5.3 || ^7.4.0 - '@angular/ng-dev@https://codeload.github.com/angular/dev-infra-private-ng-dev-builds/tar.gz/88dbc0543ffbc4df720ac87c0d413fab45ea1491': - resolution: {tarball: https://codeload.github.com/angular/dev-infra-private-ng-dev-builds/tar.gz/88dbc0543ffbc4df720ac87c0d413fab45ea1491} - version: 0.0.0-b9bca459f29f61177a829e69089730415c95ccde + '@angular/ng-dev@https://codeload.github.com/angular/dev-infra-private-ng-dev-builds/tar.gz/cdbe118e59f59b1ee00ff77a5ccf8c5328248d03': + resolution: {tarball: https://codeload.github.com/angular/dev-infra-private-ng-dev-builds/tar.gz/cdbe118e59f59b1ee00ff77a5ccf8c5328248d03} + version: 0.0.0-d69b99aeae90df28c37c57176a69995b3b60df1b hasBin: true '@angular/platform-browser@22.0.0-next.5': @@ -1867,28 +1867,28 @@ packages: '@noble/hashes': optional: true - '@firebase/ai@2.9.0': - resolution: {integrity: sha512-NPvBBuvdGo9x3esnABAucFYmqbBmXvyTMimBq2PCuLZbdANZoHzGlx7vfzbwNDaEtCBq4RGGNMliLIv6bZ+PtA==} + '@firebase/ai@2.10.0': + resolution: {integrity: sha512-1lI6HomyoO/8RSJb6ItyHLpHnB2z27m5F4aX/Vpi1nhwWoxdNjkq+6UQOykHyCE0KairojOE5qQ20i1tnF0nNA==} engines: {node: '>=20.0.0'} peerDependencies: '@firebase/app': 0.x '@firebase/app-types': 0.x - '@firebase/analytics-compat@0.2.26': - resolution: {integrity: sha512-0j2ruLOoVSwwcXAF53AMoniJKnkwiTjGVfic5LDzqiRkR13vb5j6TXMeix787zbLeQtN/m1883Yv1TxI0gItbA==} + '@firebase/analytics-compat@0.2.27': + resolution: {integrity: sha512-ZObpYpAxL6JfgH7GnvlDD0sbzGZ0o4nijV8skatV9ZX49hJtCYbFqaEcPYptT94rgX1KUoKEderC7/fa7hybtw==} peerDependencies: '@firebase/app-compat': 0.x '@firebase/analytics-types@0.8.3': resolution: {integrity: sha512-VrIp/d8iq2g501qO46uGz3hjbDb8xzYMrbu8Tp0ovzIzrvJZ2fvmj649gTjge/b7cCCcjT0H37g1gVtlNhnkbg==} - '@firebase/analytics@0.10.20': - resolution: {integrity: sha512-adGTNVUWH5q66tI/OQuKLSN6mamPpfYhj0radlH2xt+3eL6NFPtXoOs+ulvs+UsmK27vNFx5FjRDfWk+TyduHg==} + '@firebase/analytics@0.10.21': + resolution: {integrity: sha512-j2y2q65BlgLGB5Pwjhv/Jopw2X/TBTzvAtI5z/DSp56U4wBj7LfhBfzbdCtFPges+Wz0g55GdoawXibOH5jGng==} peerDependencies: '@firebase/app': 0.x - '@firebase/app-check-compat@0.4.1': - resolution: {integrity: sha512-yjSvSl5B1u4CirnxhzirN1uiTRCRfx+/qtfbyeyI+8Cx8Cw1RWAIO/OqytPSVwLYbJJ1vEC3EHfxazRaMoWKaA==} + '@firebase/app-check-compat@0.4.2': + resolution: {integrity: sha512-M91NhxqbSkI0ChkJWy69blC+rPr6HEgaeRllddSaU1pQ/7IiegeCQM9pPDIgvWnwnBSzKhUHpe6ro/jhJ+cvzw==} engines: {node: '>=20.0.0'} peerDependencies: '@firebase/app-compat': 0.x @@ -1899,25 +1899,25 @@ packages: '@firebase/app-check-types@0.5.3': resolution: {integrity: sha512-hyl5rKSj0QmwPdsAxrI5x1otDlByQ7bvNvVt8G/XPO2CSwE++rmSVf3VEhaeOR4J8ZFaF0Z0NDSmLejPweZ3ng==} - '@firebase/app-check@0.11.1': - resolution: {integrity: sha512-gmKfwQ2k8aUQlOyRshc+fOQLq0OwUmibIZvpuY1RDNu2ho0aTMlwxOuEiJeYOs7AxzhSx7gnXPFNsXCFbnvXUQ==} + '@firebase/app-check@0.11.2': + resolution: {integrity: sha512-jcXQVMHAQ5AEKzVD5C7s5fmAYeFOuN6lAJeNTgZK2B9aLnofWaJt8u1A8Idm8gpsBBYSaY3cVyeH5SWMOVPBLQ==} engines: {node: '>=20.0.0'} peerDependencies: '@firebase/app': 0.x - '@firebase/app-compat@0.5.9': - resolution: {integrity: sha512-e5LzqjO69/N2z7XcJeuMzIp4wWnW696dQeaHAUpQvGk89gIWHAIvG6W+mA3UotGW6jBoqdppEJ9DnuwbcBByug==} + '@firebase/app-compat@0.5.10': + resolution: {integrity: sha512-tFmBuZL0/v1h6eyKRgWI58ucft6dEJmAi9nhPUXoAW4ZbPSTlnsh31AuEwUoRTz+wwRk9gmgss9GZV05ZM9Kug==} engines: {node: '>=20.0.0'} '@firebase/app-types@0.9.3': resolution: {integrity: sha512-kRVpIl4vVGJ4baogMDINbyrIOtOxqhkZQg4jTq3l8Lw6WSk0xfpEYzezFu+Kl4ve4fbPl79dvwRtaFqAC/ucCw==} - '@firebase/app@0.14.9': - resolution: {integrity: sha512-3gtUX0e584MYkKBQMgSECMvE1Dwzg+eONefDQ0wxVSe5YMBsZwdN5pL7UapwWBlV8+i8QCztF9TP947tEjZAGA==} + '@firebase/app@0.14.10': + resolution: {integrity: sha512-PlPhdtjgWUra+LImQTnXOUqUa/jcufZhizdR93ZjlQSS3ahCtDTG6pJw7j0OwFal18DQjICXfeVNsUUrcNisfA==} engines: {node: '>=20.0.0'} - '@firebase/auth-compat@0.6.3': - resolution: {integrity: sha512-nHOkupcYuGVxI1AJJ/OBhLPaRokbP14Gq4nkkoVvf1yvuREEWqdnrYB/CdsSnPxHMAnn5wJIKngxBF9jNX7s/Q==} + '@firebase/auth-compat@0.6.4': + resolution: {integrity: sha512-2pj8m/hnqXvMLfC0Mk+fORVTM5DQPkS6l8JpMgtoAWGVgCmYnoWdFMaNWtKbmCxBEyvMA3FlnCJyzrUSMWTfuA==} engines: {node: '>=20.0.0'} peerDependencies: '@firebase/app-compat': 0.x @@ -1931,8 +1931,8 @@ packages: '@firebase/app-types': 0.x '@firebase/util': 1.x - '@firebase/auth@1.12.1': - resolution: {integrity: sha512-nXKj7d5bMBlnq6XpcQQpmnSVwEeHBkoVbY/+Wk0P1ebLSICoH4XPtvKOFlXKfIHmcS84mLQ99fk3njlDGKSDtw==} + '@firebase/auth@1.12.2': + resolution: {integrity: sha512-CZJL8V10Vzibs+pDTXdQF+hot1IigIoqF4a4lA/qr5Deo1srcefiyIfgg28B67Lk7IxZhwfJMuI+1bu2xBmV0A==} engines: {node: '>=20.0.0'} peerDependencies: '@firebase/app': 0.x @@ -1941,28 +1941,28 @@ packages: '@react-native-async-storage/async-storage': optional: true - '@firebase/component@0.7.1': - resolution: {integrity: sha512-mFzsm7CLHR60o08S23iLUY8m/i6kLpOK87wdEFPLhdlCahaxKmWOwSVGiWoENYSmFJJoDhrR3gKSCxz7ENdIww==} + '@firebase/component@0.7.2': + resolution: {integrity: sha512-iyVDGc6Vjx7Rm0cAdccLH/NG6fADsgJak/XW9IA2lPf8AjIlsemOpFGKczYyPHxm4rnKdR8z6sK4+KEC7NwmEg==} engines: {node: '>=20.0.0'} - '@firebase/data-connect@0.4.0': - resolution: {integrity: sha512-vLXM6WHNIR3VtEeYNUb/5GTsUOyl3Of4iWNZHBe1i9f88sYFnxybJNWVBjvJ7flhCyF8UdxGpzWcUnv6F5vGfg==} + '@firebase/data-connect@0.5.0': + resolution: {integrity: sha512-G3GYHpWNJJ95502RQLApzw0jaG3pScHl+J/2MdxIuB51xtHnkRL6KvIAP3fFF1drUewWJHOnDA1U+q4Evf3KSw==} peerDependencies: '@firebase/app': 0.x - '@firebase/database-compat@2.1.1': - resolution: {integrity: sha512-heAEVZ9Z8c8PnBUcmGh91JHX0cXcVa1yESW/xkLuwaX7idRFyLiN8sl73KXpR8ZArGoPXVQDanBnk6SQiekRCQ==} + '@firebase/database-compat@2.1.2': + resolution: {integrity: sha512-j4A6IhVZbgxAzT6gJJC2PfOxYCK9SrDrUO7nTM4EscTYtKkAkzsbKoCnDdjFapQfnsncvPWjqVTr/0PffUwg3g==} engines: {node: '>=20.0.0'} - '@firebase/database-types@1.0.17': - resolution: {integrity: sha512-4eWaM5fW3qEIHjGzfi3cf0Jpqi1xQsAdT6rSDE1RZPrWu8oGjgrq6ybMjobtyHQFgwGCykBm4YM89qDzc+uG/w==} + '@firebase/database-types@1.0.18': + resolution: {integrity: sha512-yOY8IC2go9lfbVDMiy2ATun4EB2AFwocPaQADwMN/RHRUAZSM4rlAV7PGbWPSG/YhkJ2A9xQAiAENgSua9G5Fg==} - '@firebase/database@1.1.1': - resolution: {integrity: sha512-LwIXe8+mVHY5LBPulWECOOIEXDiatyECp/BOlu0gOhe+WOcKjWHROaCbLlkFTgHMY7RHr5MOxkLP/tltWAH3dA==} + '@firebase/database@1.1.2': + resolution: {integrity: sha512-lP96CMjMPy/+d1d9qaaHjHHdzdwvEOuyyLq9ehX89e2XMKwS1jHNzYBO+42bdSumuj5ukPbmnFtViZu8YOMT+w==} engines: {node: '>=20.0.0'} - '@firebase/firestore-compat@0.4.6': - resolution: {integrity: sha512-NgVyR4hHHN2FvSNQOtbgBOuVsEdD/in30d9FKbEvvITiAChrBN2nBstmhfjI4EOTnHaP8zigwvkNYFI9yKGAkQ==} + '@firebase/firestore-compat@0.4.7': + resolution: {integrity: sha512-Et4XxtGnjp0Q9tmaEMETnY5GHJ8gQ9+RN6sSTT4ETWKmym2d6gIjarw0rCQcx+7BrWVYLEIOAXSXysl0b3xnUA==} engines: {node: '>=20.0.0'} peerDependencies: '@firebase/app-compat': 0.x @@ -1973,14 +1973,14 @@ packages: '@firebase/app-types': 0.x '@firebase/util': 1.x - '@firebase/firestore@4.12.0': - resolution: {integrity: sha512-PM47OyiiAAoAMB8kkq4Je14mTciaRoAPDd3ng3Ckqz9i2TX9D9LfxIRcNzP/OxzNV4uBKRq6lXoOggkJBQR3Gw==} + '@firebase/firestore@4.13.0': + resolution: {integrity: sha512-7i4cVNJXTMim7/P7UsNim0DwyLPk4QQ3y1oSNzv4l0ykJOKYCiFMOuEeUxUYvrReXDJxWHrT/4XMeVQm+13rRw==} engines: {node: '>=20.0.0'} peerDependencies: '@firebase/app': 0.x - '@firebase/functions-compat@0.4.2': - resolution: {integrity: sha512-YNxgnezvZDkqxqXa6cT7/oTeD4WXbxgIP7qZp4LFnathQv5o2omM6EoIhXiT9Ie5AoQDcIhG9Y3/dj+DFJGaGQ==} + '@firebase/functions-compat@0.4.3': + resolution: {integrity: sha512-BxkEwWgx1of0tKaao/r2VR6WBLk/RAiyztatiONPrPE8gkitFkOnOCxf8i9cUyA5hX5RGt5H30uNn25Q6QNEmQ==} engines: {node: '>=20.0.0'} peerDependencies: '@firebase/app-compat': 0.x @@ -1988,14 +1988,14 @@ packages: '@firebase/functions-types@0.6.3': resolution: {integrity: sha512-EZoDKQLUHFKNx6VLipQwrSMh01A1SaL3Wg6Hpi//x6/fJ6Ee4hrAeswK99I5Ht8roiniKHw4iO0B1Oxj5I4plg==} - '@firebase/functions@0.13.2': - resolution: {integrity: sha512-tHduUD+DeokM3NB1QbHCvEMoL16e8Z8JSkmuVA4ROoJKPxHn8ibnecHPO2e3nVCJR1D9OjuKvxz4gksfq92/ZQ==} + '@firebase/functions@0.13.3': + resolution: {integrity: sha512-csO7ckK3SSs+NUZW1nms9EK7ckHe/1QOjiP8uAkCYa7ND18s44vjE9g3KxEeIUpyEPqZaX1EhJuFyZjHigAcYw==} engines: {node: '>=20.0.0'} peerDependencies: '@firebase/app': 0.x - '@firebase/installations-compat@0.2.20': - resolution: {integrity: sha512-9C9pL/DIEGucmoPj8PlZTnztbX3nhNj5RTYVpUM7wQq/UlHywaYv99969JU/WHLvi9ptzIogXYS9d1eZ6XFe9g==} + '@firebase/installations-compat@0.2.21': + resolution: {integrity: sha512-zahIUkaVKbR8zmTeBHkdfaVl6JGWlhVoSjF7CVH33nFqD3SlPEpEEegn2GNT5iAfsVdtlCyJJ9GW4YKjq+RJKQ==} peerDependencies: '@firebase/app-compat': 0.x @@ -2004,8 +2004,8 @@ packages: peerDependencies: '@firebase/app-types': 0.x - '@firebase/installations@0.6.20': - resolution: {integrity: sha512-LOzvR7XHPbhS0YB5ANXhqXB5qZlntPpwU/4KFwhSNpXNsGk/sBQ9g5hepi0y0/MfenJLe2v7t644iGOOElQaHQ==} + '@firebase/installations@0.6.21': + resolution: {integrity: sha512-xGFGTeICJZ5vhrmmDukeczIcFULFXybojML2+QSDFoKj5A7zbGN7KzFGSKNhDkIxpjzsYG9IleJyUebuAcmqWA==} peerDependencies: '@firebase/app': 0.x @@ -2013,47 +2013,47 @@ packages: resolution: {integrity: sha512-cGskaAvkrnh42b3BA3doDWeBmuHFO/Mx5A83rbRDYakPjO9bJtRL3dX7javzc2Rr/JHZf4HlterTW2lUkfeN4g==} engines: {node: '>=20.0.0'} - '@firebase/messaging-compat@0.2.24': - resolution: {integrity: sha512-wXH8FrKbJvFuFe6v98TBhAtvgknxKIZtGM/wCVsfpOGmaAE80bD8tBxztl+uochjnFb9plihkd6mC4y7sZXSpA==} + '@firebase/messaging-compat@0.2.25': + resolution: {integrity: sha512-eoOQqGLtRlseTdiemTN44LlHZpltK5gnhq8XVUuLgtIOG+odtDzrz2UoTpcJWSzaJQVxNLb/x9f39tHdDM4N4w==} peerDependencies: '@firebase/app-compat': 0.x '@firebase/messaging-interop-types@0.2.3': resolution: {integrity: sha512-xfzFaJpzcmtDjycpDeCUj0Ge10ATFi/VHVIvEEjDNc3hodVBQADZ7BWQU7CuFpjSHE+eLuBI13z5F/9xOoGX8Q==} - '@firebase/messaging@0.12.24': - resolution: {integrity: sha512-UtKoubegAhHyehcB7iQjvQ8OVITThPbbWk3g2/2ze42PrQr6oe6OmCElYQkBrE5RDCeMTNucXejbdulrQ2XwVg==} + '@firebase/messaging@0.12.25': + resolution: {integrity: sha512-7RhDwoDHlOK1/ou0/LeubxmjcngsTjDdrY/ssg2vwAVpUuVAhQzQvuCAOYxcX5wNC1zCgQ54AP1vdngBwbCmOQ==} peerDependencies: '@firebase/app': 0.x - '@firebase/performance-compat@0.2.23': - resolution: {integrity: sha512-c7qOAGBUAOpIuUlHu1axWcrCVtIYKPMhH0lMnoCDWnPwn1HcPuPUBVTWETbC7UWw71RMJF8DpirfWXzMWJQfgA==} + '@firebase/performance-compat@0.2.24': + resolution: {integrity: sha512-YRlejH8wLt7ThWao+HXoKUHUrZKGYq+otxkPS+8nuE5PeN1cBXX7NAJl9ueuUkBwMIrnKdnDqL/voHXxDAAt3g==} peerDependencies: '@firebase/app-compat': 0.x '@firebase/performance-types@0.2.3': resolution: {integrity: sha512-IgkyTz6QZVPAq8GSkLYJvwSLr3LS9+V6vNPQr0x4YozZJiLF5jYixj0amDtATf1X0EtYHqoPO48a9ija8GocxQ==} - '@firebase/performance@0.7.10': - resolution: {integrity: sha512-8nRFld+Ntzp5cLKzZuG9g+kBaSn8Ks9dmn87UQGNFDygbmR6ebd8WawauEXiJjMj1n70ypkvAOdE+lzeyfXtGA==} + '@firebase/performance@0.7.11': + resolution: {integrity: sha512-V3uAhrz7IYJuji+OgT3qYTGKxpek/TViXti9OSsUJ4AexZ3jQjYH5Yrn7JvBxk8MGiSLsC872hh+BxQiPZsm7g==} peerDependencies: '@firebase/app': 0.x - '@firebase/remote-config-compat@0.2.22': - resolution: {integrity: sha512-uW/eNKKtRBot2gnCC5mnoy5Voo2wMzZuQ7dwqqGHU176fO9zFgMwKiRzk+aaC99NLrFk1KOmr0ZVheD+zdJmjQ==} + '@firebase/remote-config-compat@0.2.23': + resolution: {integrity: sha512-4+KqRRHEUUmKT6tFmnpWATOsaFfmSuBs1jXH8JzVtMLEYqq/WS9IDM92OdefFDSrAA2xGd0WN004z8mKeIIscw==} peerDependencies: '@firebase/app-compat': 0.x '@firebase/remote-config-types@0.5.0': resolution: {integrity: sha512-vI3bqLoF14L/GchtgayMiFpZJF+Ao3uR8WCde0XpYNkSokDpAKca2DxvcfeZv7lZUqkUwQPL2wD83d3vQ4vvrg==} - '@firebase/remote-config@0.8.1': - resolution: {integrity: sha512-L86TReBnPiiJOWd7k9iaiE9f7rHtMpjAoYN0fH2ey2ZRzsOChHV0s5sYf1+IIUYzplzsE46pjlmAUNkRRKwHSQ==} + '@firebase/remote-config@0.8.2': + resolution: {integrity: sha512-5EXqOThV4upjK9D38d/qOSVwOqRhemlaOFk9vCkMNNALeIlwr+4pLjtLNo4qoY8etQmU/1q4aIATE9N8PFqg0g==} peerDependencies: '@firebase/app': 0.x - '@firebase/storage-compat@0.4.1': - resolution: {integrity: sha512-bgl3FHHfXAmBgzIK/Fps6Xyv2HiAQlSTov07CBL+RGGhrC5YIk4lruS8JVIC+UkujRdYvnf8cpQFGn2RCilJ/A==} + '@firebase/storage-compat@0.4.2': + resolution: {integrity: sha512-R+aB38wxCH5zjIO/xu9KznI7fgiPuZAG98uVm1NcidHyyupGgIDLKigGmRGBZMnxibe/m2oxNKoZpfEbUX2aQQ==} engines: {node: '>=20.0.0'} peerDependencies: '@firebase/app-compat': 0.x @@ -2064,14 +2064,14 @@ packages: '@firebase/app-types': 0.x '@firebase/util': 1.x - '@firebase/storage@0.14.1': - resolution: {integrity: sha512-uIpYgBBsv1vIET+5xV20XT7wwqV+H4GFp6PBzfmLUcEgguS4SWNFof56Z3uOC2lNDh0KDda1UflYq2VwD9Nefw==} + '@firebase/storage@0.14.2': + resolution: {integrity: sha512-o/culaTeJ8GRpKXRJov21rux/n9dRaSOWLebyatFP2sqEdCxQPjVA1H9Z2fzYwQxMIU0JVmC7SPPmU11v7L6vQ==} engines: {node: '>=20.0.0'} peerDependencies: '@firebase/app': 0.x - '@firebase/util@1.14.0': - resolution: {integrity: sha512-/gnejm7MKkVIXnSJGpc9L2CvvvzJvtDPeAEq5jAwgVlf/PeNxot+THx/bpD20wQ8uL5sz0xqgXy1nisOYMU+mw==} + '@firebase/util@1.15.0': + resolution: {integrity: sha512-AmWf3cHAOMbrCPG4xdPKQaj5iHnyYfyLKZxwz+Xf55bqKbpAmcYifB4jQinT2W9XhDRHISOoPyBOariJpCG6FA==} engines: {node: '>=20.0.0'} '@firebase/webchannel-wrapper@1.0.5': @@ -2112,8 +2112,8 @@ packages: resolution: {integrity: sha512-IJn+8A3QZJfe7FUtWqHVNo3xJs7KFpurCWGWCiCz3oEh+BkRymKZ1QxfAbU2yGMDzTytLGQ2IV6T2r3cuo75/w==} engines: {node: '>=18'} - '@google/genai@1.46.0': - resolution: {integrity: sha512-ewPMN5JkKfgU5/kdco9ZhXBHDPhVqZpMQqIFQhwsHLf8kyZfx1cNpw1pHo1eV6PGEW7EhIBFi3aYZraFndAXqg==} + '@google/genai@1.47.0': + resolution: {integrity: sha512-0VV7AaXm5rQu3oRHNZNEubRAOL2lv5u+YA72eWnDwcOx3B1jFRbvtgL4drRHlocRHOnludvr3xmbQGbR+/RQAQ==} engines: {node: '>=20.0.0'} peerDependencies: '@modelcontextprotocol/sdk': ^1.25.2 @@ -3824,6 +3824,7 @@ packages: '@xmldom/xmldom@0.8.11': resolution: {integrity: sha512-cQzWCtO6C8TQiYl1ruKNn2U6Ao4o4WBBcbL61yJl84x+j5sOWWFU9X7DpND8XZG3daDppSsigMdfAIl2upQBRw==} engines: {node: '>=10.0.0'} + deprecated: this version has critical issues, please update to the latest version '@xtuc/ieee754@1.2.0': resolution: {integrity: sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==} @@ -4469,8 +4470,8 @@ packages: resolution: {integrity: sha512-tQMagCOC59EVgNZcC5zl7XqO30Wki9i9J3acbUvkaosCT6JX3EeFwJD7Qqp4MCikRnzS18WXV3BLIQ66ytu6+Q==} engines: {node: '>=18'} - conventional-commits-parser@6.3.0: - resolution: {integrity: sha512-RfOq/Cqy9xV9bOA8N+ZH6DlrDR+5S3Mi0B5kACEjESpE+AviIpAptx9a9cFpWCCvgRtWT+0BbUw+e1BZfts9jg==} + conventional-commits-parser@6.4.0: + resolution: {integrity: sha512-tvRg7FIBNlyPzjdG8wWRlPHQJJHI7DylhtRGeU9Lq+JuoPh5BKpPRX83ZdLrvXuOSu5Eo/e7SzOQhU4Hd2Miuw==} engines: {node: '>=18'} hasBin: true @@ -5195,8 +5196,8 @@ packages: resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} engines: {node: '>=10'} - firebase@12.10.0: - resolution: {integrity: sha512-tAjHnEirksqWpa+NKDUSUMjulOnsTcsPC1X1rQ+gwPtjlhJS572na91CwaBXQJHXharIrfj7sw/okDkXOsphjA==} + firebase@12.11.0: + resolution: {integrity: sha512-W9f3Y+cgQYgF9gvCGxt0upec8zwAtiQVcHuU8MfzUIgVU/9fRQWtu48Geiv1lsigtBz9QHML++Km9xAKO5GB5Q==} flat-cache@4.0.1: resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} @@ -8310,11 +8311,6 @@ packages: resolution: {integrity: sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==} engines: {node: '>=18'} - yaml@2.8.2: - resolution: {integrity: sha512-mplynKqc1C2hTVYxd0PU2xQAc22TI1vShAYGksCCfxbn/dFwnHTNi1bvYsBTkhdUNtGIf5xNOg938rrSSYvS9A==} - engines: {node: '>= 14.6'} - hasBin: true - yaml@2.8.3: resolution: {integrity: sha512-AvbaCLOO2Otw/lW5bmh9d/WEdcDFdQp2Z2ZUH3pX9U2ihyUY0nvLv7J6TrWowklRGPYbB/IuIMfYgxaCPg5Bpg==} engines: {node: '>= 14.6'} @@ -8554,12 +8550,12 @@ snapshots: rxjs: 7.8.2 tslib: 2.8.1 - '@angular/ng-dev@https://codeload.github.com/angular/dev-infra-private-ng-dev-builds/tar.gz/88dbc0543ffbc4df720ac87c0d413fab45ea1491(@modelcontextprotocol/sdk@1.28.0(zod@4.3.6))': + '@angular/ng-dev@https://codeload.github.com/angular/dev-infra-private-ng-dev-builds/tar.gz/cdbe118e59f59b1ee00ff77a5ccf8c5328248d03(@modelcontextprotocol/sdk@1.28.0(zod@4.3.6))': dependencies: '@actions/core': 3.0.0 - '@conventional-changelog/git-client': 2.6.0(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.3.0) + '@conventional-changelog/git-client': 2.6.0(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.4.0) '@google-cloud/spanner': 8.0.0(supports-color@10.2.2) - '@google/genai': 1.46.0(@modelcontextprotocol/sdk@1.28.0(zod@4.3.6))(bufferutil@4.1.0)(supports-color@10.2.2)(utf-8-validate@6.0.6) + '@google/genai': 1.47.0(@modelcontextprotocol/sdk@1.28.0(zod@4.3.6))(bufferutil@4.1.0)(supports-color@10.2.2)(utf-8-validate@6.0.6) '@inquirer/prompts': 8.3.2(@types/node@24.12.0) '@inquirer/type': 4.0.4(@types/node@24.12.0) '@octokit/auth-app': 8.2.0 @@ -8587,11 +8583,11 @@ snapshots: bufferutil: 4.1.0 cli-progress: 3.12.0 conventional-commits-filter: 5.0.0 - conventional-commits-parser: 6.3.0 + conventional-commits-parser: 6.4.0 ejs: 5.0.1 encoding: 0.1.13 fast-glob: 3.3.3 - firebase: 12.10.0 + firebase: 12.11.0 folder-hash: 4.1.2(supports-color@10.2.2) jasmine: 6.1.0 jasmine-core: 6.1.0 @@ -8607,7 +8603,7 @@ snapshots: typescript: 5.9.3 utf-8-validate: 6.0.6 which: 6.0.1 - yaml: 2.8.2 + yaml: 2.8.3 yargs: 18.0.0 zod: 4.3.6 transitivePeerDependencies: @@ -9348,14 +9344,14 @@ snapshots: '@colors/colors@1.5.0': {} - '@conventional-changelog/git-client@2.6.0(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.3.0)': + '@conventional-changelog/git-client@2.6.0(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.4.0)': dependencies: '@simple-libs/child-process-utils': 1.0.2 '@simple-libs/stream-utils': 1.2.0 semver: 7.7.4 optionalDependencies: conventional-commits-filter: 5.0.0 - conventional-commits-parser: 6.3.0 + conventional-commits-parser: 6.4.0 '@csstools/color-helpers@6.0.2': {} @@ -9554,46 +9550,46 @@ snapshots: '@exodus/bytes@1.15.0': {} - '@firebase/ai@2.9.0(@firebase/app-types@0.9.3)(@firebase/app@0.14.9)': + '@firebase/ai@2.10.0(@firebase/app-types@0.9.3)(@firebase/app@0.14.10)': dependencies: - '@firebase/app': 0.14.9 + '@firebase/app': 0.14.10 '@firebase/app-check-interop-types': 0.3.3 '@firebase/app-types': 0.9.3 - '@firebase/component': 0.7.1 + '@firebase/component': 0.7.2 '@firebase/logger': 0.5.0 - '@firebase/util': 1.14.0 + '@firebase/util': 1.15.0 tslib: 2.8.1 - '@firebase/analytics-compat@0.2.26(@firebase/app-compat@0.5.9)(@firebase/app@0.14.9)': + '@firebase/analytics-compat@0.2.27(@firebase/app-compat@0.5.10)(@firebase/app@0.14.10)': dependencies: - '@firebase/analytics': 0.10.20(@firebase/app@0.14.9) + '@firebase/analytics': 0.10.21(@firebase/app@0.14.10) '@firebase/analytics-types': 0.8.3 - '@firebase/app-compat': 0.5.9 - '@firebase/component': 0.7.1 - '@firebase/util': 1.14.0 + '@firebase/app-compat': 0.5.10 + '@firebase/component': 0.7.2 + '@firebase/util': 1.15.0 tslib: 2.8.1 transitivePeerDependencies: - '@firebase/app' '@firebase/analytics-types@0.8.3': {} - '@firebase/analytics@0.10.20(@firebase/app@0.14.9)': + '@firebase/analytics@0.10.21(@firebase/app@0.14.10)': dependencies: - '@firebase/app': 0.14.9 - '@firebase/component': 0.7.1 - '@firebase/installations': 0.6.20(@firebase/app@0.14.9) + '@firebase/app': 0.14.10 + '@firebase/component': 0.7.2 + '@firebase/installations': 0.6.21(@firebase/app@0.14.10) '@firebase/logger': 0.5.0 - '@firebase/util': 1.14.0 + '@firebase/util': 1.15.0 tslib: 2.8.1 - '@firebase/app-check-compat@0.4.1(@firebase/app-compat@0.5.9)(@firebase/app@0.14.9)': + '@firebase/app-check-compat@0.4.2(@firebase/app-compat@0.5.10)(@firebase/app@0.14.10)': dependencies: - '@firebase/app-check': 0.11.1(@firebase/app@0.14.9) + '@firebase/app-check': 0.11.2(@firebase/app@0.14.10) '@firebase/app-check-types': 0.5.3 - '@firebase/app-compat': 0.5.9 - '@firebase/component': 0.7.1 + '@firebase/app-compat': 0.5.10 + '@firebase/component': 0.7.2 '@firebase/logger': 0.5.0 - '@firebase/util': 1.14.0 + '@firebase/util': 1.15.0 tslib: 2.8.1 transitivePeerDependencies: - '@firebase/app' @@ -9602,39 +9598,39 @@ snapshots: '@firebase/app-check-types@0.5.3': {} - '@firebase/app-check@0.11.1(@firebase/app@0.14.9)': + '@firebase/app-check@0.11.2(@firebase/app@0.14.10)': dependencies: - '@firebase/app': 0.14.9 - '@firebase/component': 0.7.1 + '@firebase/app': 0.14.10 + '@firebase/component': 0.7.2 '@firebase/logger': 0.5.0 - '@firebase/util': 1.14.0 + '@firebase/util': 1.15.0 tslib: 2.8.1 - '@firebase/app-compat@0.5.9': + '@firebase/app-compat@0.5.10': dependencies: - '@firebase/app': 0.14.9 - '@firebase/component': 0.7.1 + '@firebase/app': 0.14.10 + '@firebase/component': 0.7.2 '@firebase/logger': 0.5.0 - '@firebase/util': 1.14.0 + '@firebase/util': 1.15.0 tslib: 2.8.1 '@firebase/app-types@0.9.3': {} - '@firebase/app@0.14.9': + '@firebase/app@0.14.10': dependencies: - '@firebase/component': 0.7.1 + '@firebase/component': 0.7.2 '@firebase/logger': 0.5.0 - '@firebase/util': 1.14.0 + '@firebase/util': 1.15.0 idb: 7.1.1 tslib: 2.8.1 - '@firebase/auth-compat@0.6.3(@firebase/app-compat@0.5.9)(@firebase/app-types@0.9.3)(@firebase/app@0.14.9)': + '@firebase/auth-compat@0.6.4(@firebase/app-compat@0.5.10)(@firebase/app-types@0.9.3)(@firebase/app@0.14.10)': dependencies: - '@firebase/app-compat': 0.5.9 - '@firebase/auth': 1.12.1(@firebase/app@0.14.9) - '@firebase/auth-types': 0.13.0(@firebase/app-types@0.9.3)(@firebase/util@1.14.0) - '@firebase/component': 0.7.1 - '@firebase/util': 1.14.0 + '@firebase/app-compat': 0.5.10 + '@firebase/auth': 1.12.2(@firebase/app@0.14.10) + '@firebase/auth-types': 0.13.0(@firebase/app-types@0.9.3)(@firebase/util@1.15.0) + '@firebase/component': 0.7.2 + '@firebase/util': 1.15.0 tslib: 2.8.1 transitivePeerDependencies: - '@firebase/app' @@ -9643,115 +9639,115 @@ snapshots: '@firebase/auth-interop-types@0.2.4': {} - '@firebase/auth-types@0.13.0(@firebase/app-types@0.9.3)(@firebase/util@1.14.0)': + '@firebase/auth-types@0.13.0(@firebase/app-types@0.9.3)(@firebase/util@1.15.0)': dependencies: '@firebase/app-types': 0.9.3 - '@firebase/util': 1.14.0 + '@firebase/util': 1.15.0 - '@firebase/auth@1.12.1(@firebase/app@0.14.9)': + '@firebase/auth@1.12.2(@firebase/app@0.14.10)': dependencies: - '@firebase/app': 0.14.9 - '@firebase/component': 0.7.1 + '@firebase/app': 0.14.10 + '@firebase/component': 0.7.2 '@firebase/logger': 0.5.0 - '@firebase/util': 1.14.0 + '@firebase/util': 1.15.0 tslib: 2.8.1 - '@firebase/component@0.7.1': + '@firebase/component@0.7.2': dependencies: - '@firebase/util': 1.14.0 + '@firebase/util': 1.15.0 tslib: 2.8.1 - '@firebase/data-connect@0.4.0(@firebase/app@0.14.9)': + '@firebase/data-connect@0.5.0(@firebase/app@0.14.10)': dependencies: - '@firebase/app': 0.14.9 + '@firebase/app': 0.14.10 '@firebase/auth-interop-types': 0.2.4 - '@firebase/component': 0.7.1 + '@firebase/component': 0.7.2 '@firebase/logger': 0.5.0 - '@firebase/util': 1.14.0 + '@firebase/util': 1.15.0 tslib: 2.8.1 - '@firebase/database-compat@2.1.1': + '@firebase/database-compat@2.1.2': dependencies: - '@firebase/component': 0.7.1 - '@firebase/database': 1.1.1 - '@firebase/database-types': 1.0.17 + '@firebase/component': 0.7.2 + '@firebase/database': 1.1.2 + '@firebase/database-types': 1.0.18 '@firebase/logger': 0.5.0 - '@firebase/util': 1.14.0 + '@firebase/util': 1.15.0 tslib: 2.8.1 - '@firebase/database-types@1.0.17': + '@firebase/database-types@1.0.18': dependencies: '@firebase/app-types': 0.9.3 - '@firebase/util': 1.14.0 + '@firebase/util': 1.15.0 - '@firebase/database@1.1.1': + '@firebase/database@1.1.2': dependencies: '@firebase/app-check-interop-types': 0.3.3 '@firebase/auth-interop-types': 0.2.4 - '@firebase/component': 0.7.1 + '@firebase/component': 0.7.2 '@firebase/logger': 0.5.0 - '@firebase/util': 1.14.0 + '@firebase/util': 1.15.0 faye-websocket: 0.11.4 tslib: 2.8.1 - '@firebase/firestore-compat@0.4.6(@firebase/app-compat@0.5.9)(@firebase/app-types@0.9.3)(@firebase/app@0.14.9)': + '@firebase/firestore-compat@0.4.7(@firebase/app-compat@0.5.10)(@firebase/app-types@0.9.3)(@firebase/app@0.14.10)': dependencies: - '@firebase/app-compat': 0.5.9 - '@firebase/component': 0.7.1 - '@firebase/firestore': 4.12.0(@firebase/app@0.14.9) - '@firebase/firestore-types': 3.0.3(@firebase/app-types@0.9.3)(@firebase/util@1.14.0) - '@firebase/util': 1.14.0 + '@firebase/app-compat': 0.5.10 + '@firebase/component': 0.7.2 + '@firebase/firestore': 4.13.0(@firebase/app@0.14.10) + '@firebase/firestore-types': 3.0.3(@firebase/app-types@0.9.3)(@firebase/util@1.15.0) + '@firebase/util': 1.15.0 tslib: 2.8.1 transitivePeerDependencies: - '@firebase/app' - '@firebase/app-types' - '@firebase/firestore-types@3.0.3(@firebase/app-types@0.9.3)(@firebase/util@1.14.0)': + '@firebase/firestore-types@3.0.3(@firebase/app-types@0.9.3)(@firebase/util@1.15.0)': dependencies: '@firebase/app-types': 0.9.3 - '@firebase/util': 1.14.0 + '@firebase/util': 1.15.0 - '@firebase/firestore@4.12.0(@firebase/app@0.14.9)': + '@firebase/firestore@4.13.0(@firebase/app@0.14.10)': dependencies: - '@firebase/app': 0.14.9 - '@firebase/component': 0.7.1 + '@firebase/app': 0.14.10 + '@firebase/component': 0.7.2 '@firebase/logger': 0.5.0 - '@firebase/util': 1.14.0 + '@firebase/util': 1.15.0 '@firebase/webchannel-wrapper': 1.0.5 '@grpc/grpc-js': 1.9.15 '@grpc/proto-loader': 0.7.15 tslib: 2.8.1 - '@firebase/functions-compat@0.4.2(@firebase/app-compat@0.5.9)(@firebase/app@0.14.9)': + '@firebase/functions-compat@0.4.3(@firebase/app-compat@0.5.10)(@firebase/app@0.14.10)': dependencies: - '@firebase/app-compat': 0.5.9 - '@firebase/component': 0.7.1 - '@firebase/functions': 0.13.2(@firebase/app@0.14.9) + '@firebase/app-compat': 0.5.10 + '@firebase/component': 0.7.2 + '@firebase/functions': 0.13.3(@firebase/app@0.14.10) '@firebase/functions-types': 0.6.3 - '@firebase/util': 1.14.0 + '@firebase/util': 1.15.0 tslib: 2.8.1 transitivePeerDependencies: - '@firebase/app' '@firebase/functions-types@0.6.3': {} - '@firebase/functions@0.13.2(@firebase/app@0.14.9)': + '@firebase/functions@0.13.3(@firebase/app@0.14.10)': dependencies: - '@firebase/app': 0.14.9 + '@firebase/app': 0.14.10 '@firebase/app-check-interop-types': 0.3.3 '@firebase/auth-interop-types': 0.2.4 - '@firebase/component': 0.7.1 + '@firebase/component': 0.7.2 '@firebase/messaging-interop-types': 0.2.3 - '@firebase/util': 1.14.0 + '@firebase/util': 1.15.0 tslib: 2.8.1 - '@firebase/installations-compat@0.2.20(@firebase/app-compat@0.5.9)(@firebase/app-types@0.9.3)(@firebase/app@0.14.9)': + '@firebase/installations-compat@0.2.21(@firebase/app-compat@0.5.10)(@firebase/app-types@0.9.3)(@firebase/app@0.14.10)': dependencies: - '@firebase/app-compat': 0.5.9 - '@firebase/component': 0.7.1 - '@firebase/installations': 0.6.20(@firebase/app@0.14.9) + '@firebase/app-compat': 0.5.10 + '@firebase/component': 0.7.2 + '@firebase/installations': 0.6.21(@firebase/app@0.14.10) '@firebase/installations-types': 0.5.3(@firebase/app-types@0.9.3) - '@firebase/util': 1.14.0 + '@firebase/util': 1.15.0 tslib: 2.8.1 transitivePeerDependencies: - '@firebase/app' @@ -9761,11 +9757,11 @@ snapshots: dependencies: '@firebase/app-types': 0.9.3 - '@firebase/installations@0.6.20(@firebase/app@0.14.9)': + '@firebase/installations@0.6.21(@firebase/app@0.14.10)': dependencies: - '@firebase/app': 0.14.9 - '@firebase/component': 0.7.1 - '@firebase/util': 1.14.0 + '@firebase/app': 0.14.10 + '@firebase/component': 0.7.2 + '@firebase/util': 1.15.0 idb: 7.1.1 tslib: 2.8.1 @@ -9773,100 +9769,100 @@ snapshots: dependencies: tslib: 2.8.1 - '@firebase/messaging-compat@0.2.24(@firebase/app-compat@0.5.9)(@firebase/app@0.14.9)': + '@firebase/messaging-compat@0.2.25(@firebase/app-compat@0.5.10)(@firebase/app@0.14.10)': dependencies: - '@firebase/app-compat': 0.5.9 - '@firebase/component': 0.7.1 - '@firebase/messaging': 0.12.24(@firebase/app@0.14.9) - '@firebase/util': 1.14.0 + '@firebase/app-compat': 0.5.10 + '@firebase/component': 0.7.2 + '@firebase/messaging': 0.12.25(@firebase/app@0.14.10) + '@firebase/util': 1.15.0 tslib: 2.8.1 transitivePeerDependencies: - '@firebase/app' '@firebase/messaging-interop-types@0.2.3': {} - '@firebase/messaging@0.12.24(@firebase/app@0.14.9)': + '@firebase/messaging@0.12.25(@firebase/app@0.14.10)': dependencies: - '@firebase/app': 0.14.9 - '@firebase/component': 0.7.1 - '@firebase/installations': 0.6.20(@firebase/app@0.14.9) + '@firebase/app': 0.14.10 + '@firebase/component': 0.7.2 + '@firebase/installations': 0.6.21(@firebase/app@0.14.10) '@firebase/messaging-interop-types': 0.2.3 - '@firebase/util': 1.14.0 + '@firebase/util': 1.15.0 idb: 7.1.1 tslib: 2.8.1 - '@firebase/performance-compat@0.2.23(@firebase/app-compat@0.5.9)(@firebase/app@0.14.9)': + '@firebase/performance-compat@0.2.24(@firebase/app-compat@0.5.10)(@firebase/app@0.14.10)': dependencies: - '@firebase/app-compat': 0.5.9 - '@firebase/component': 0.7.1 + '@firebase/app-compat': 0.5.10 + '@firebase/component': 0.7.2 '@firebase/logger': 0.5.0 - '@firebase/performance': 0.7.10(@firebase/app@0.14.9) + '@firebase/performance': 0.7.11(@firebase/app@0.14.10) '@firebase/performance-types': 0.2.3 - '@firebase/util': 1.14.0 + '@firebase/util': 1.15.0 tslib: 2.8.1 transitivePeerDependencies: - '@firebase/app' '@firebase/performance-types@0.2.3': {} - '@firebase/performance@0.7.10(@firebase/app@0.14.9)': + '@firebase/performance@0.7.11(@firebase/app@0.14.10)': dependencies: - '@firebase/app': 0.14.9 - '@firebase/component': 0.7.1 - '@firebase/installations': 0.6.20(@firebase/app@0.14.9) + '@firebase/app': 0.14.10 + '@firebase/component': 0.7.2 + '@firebase/installations': 0.6.21(@firebase/app@0.14.10) '@firebase/logger': 0.5.0 - '@firebase/util': 1.14.0 + '@firebase/util': 1.15.0 tslib: 2.8.1 web-vitals: 4.2.4 - '@firebase/remote-config-compat@0.2.22(@firebase/app-compat@0.5.9)(@firebase/app@0.14.9)': + '@firebase/remote-config-compat@0.2.23(@firebase/app-compat@0.5.10)(@firebase/app@0.14.10)': dependencies: - '@firebase/app-compat': 0.5.9 - '@firebase/component': 0.7.1 + '@firebase/app-compat': 0.5.10 + '@firebase/component': 0.7.2 '@firebase/logger': 0.5.0 - '@firebase/remote-config': 0.8.1(@firebase/app@0.14.9) + '@firebase/remote-config': 0.8.2(@firebase/app@0.14.10) '@firebase/remote-config-types': 0.5.0 - '@firebase/util': 1.14.0 + '@firebase/util': 1.15.0 tslib: 2.8.1 transitivePeerDependencies: - '@firebase/app' '@firebase/remote-config-types@0.5.0': {} - '@firebase/remote-config@0.8.1(@firebase/app@0.14.9)': + '@firebase/remote-config@0.8.2(@firebase/app@0.14.10)': dependencies: - '@firebase/app': 0.14.9 - '@firebase/component': 0.7.1 - '@firebase/installations': 0.6.20(@firebase/app@0.14.9) + '@firebase/app': 0.14.10 + '@firebase/component': 0.7.2 + '@firebase/installations': 0.6.21(@firebase/app@0.14.10) '@firebase/logger': 0.5.0 - '@firebase/util': 1.14.0 + '@firebase/util': 1.15.0 tslib: 2.8.1 - '@firebase/storage-compat@0.4.1(@firebase/app-compat@0.5.9)(@firebase/app-types@0.9.3)(@firebase/app@0.14.9)': + '@firebase/storage-compat@0.4.2(@firebase/app-compat@0.5.10)(@firebase/app-types@0.9.3)(@firebase/app@0.14.10)': dependencies: - '@firebase/app-compat': 0.5.9 - '@firebase/component': 0.7.1 - '@firebase/storage': 0.14.1(@firebase/app@0.14.9) - '@firebase/storage-types': 0.8.3(@firebase/app-types@0.9.3)(@firebase/util@1.14.0) - '@firebase/util': 1.14.0 + '@firebase/app-compat': 0.5.10 + '@firebase/component': 0.7.2 + '@firebase/storage': 0.14.2(@firebase/app@0.14.10) + '@firebase/storage-types': 0.8.3(@firebase/app-types@0.9.3)(@firebase/util@1.15.0) + '@firebase/util': 1.15.0 tslib: 2.8.1 transitivePeerDependencies: - '@firebase/app' - '@firebase/app-types' - '@firebase/storage-types@0.8.3(@firebase/app-types@0.9.3)(@firebase/util@1.14.0)': + '@firebase/storage-types@0.8.3(@firebase/app-types@0.9.3)(@firebase/util@1.15.0)': dependencies: '@firebase/app-types': 0.9.3 - '@firebase/util': 1.14.0 + '@firebase/util': 1.15.0 - '@firebase/storage@0.14.1(@firebase/app@0.14.9)': + '@firebase/storage@0.14.2(@firebase/app@0.14.10)': dependencies: - '@firebase/app': 0.14.9 - '@firebase/component': 0.7.1 - '@firebase/util': 1.14.0 + '@firebase/app': 0.14.10 + '@firebase/component': 0.7.2 + '@firebase/util': 1.15.0 tslib: 2.8.1 - '@firebase/util@1.14.0': + '@firebase/util@1.15.0': dependencies: tslib: 2.8.1 @@ -9935,7 +9931,7 @@ snapshots: transitivePeerDependencies: - supports-color - '@google/genai@1.46.0(@modelcontextprotocol/sdk@1.28.0(zod@4.3.6))(bufferutil@4.1.0)(supports-color@10.2.2)(utf-8-validate@6.0.6)': + '@google/genai@1.47.0(@modelcontextprotocol/sdk@1.28.0(zod@4.3.6))(bufferutil@4.1.0)(supports-color@10.2.2)(utf-8-validate@6.0.6)': dependencies: google-auth-library: 10.6.2(supports-color@10.2.2) p-retry: 4.6.2 @@ -12517,7 +12513,7 @@ snapshots: conventional-commits-filter@5.0.0: {} - conventional-commits-parser@6.3.0: + conventional-commits-parser@6.4.0: dependencies: '@simple-libs/stream-utils': 1.2.0 meow: 13.2.0 @@ -13405,36 +13401,36 @@ snapshots: locate-path: 6.0.0 path-exists: 4.0.0 - firebase@12.10.0: + firebase@12.11.0: dependencies: - '@firebase/ai': 2.9.0(@firebase/app-types@0.9.3)(@firebase/app@0.14.9) - '@firebase/analytics': 0.10.20(@firebase/app@0.14.9) - '@firebase/analytics-compat': 0.2.26(@firebase/app-compat@0.5.9)(@firebase/app@0.14.9) - '@firebase/app': 0.14.9 - '@firebase/app-check': 0.11.1(@firebase/app@0.14.9) - '@firebase/app-check-compat': 0.4.1(@firebase/app-compat@0.5.9)(@firebase/app@0.14.9) - '@firebase/app-compat': 0.5.9 + '@firebase/ai': 2.10.0(@firebase/app-types@0.9.3)(@firebase/app@0.14.10) + '@firebase/analytics': 0.10.21(@firebase/app@0.14.10) + '@firebase/analytics-compat': 0.2.27(@firebase/app-compat@0.5.10)(@firebase/app@0.14.10) + '@firebase/app': 0.14.10 + '@firebase/app-check': 0.11.2(@firebase/app@0.14.10) + '@firebase/app-check-compat': 0.4.2(@firebase/app-compat@0.5.10)(@firebase/app@0.14.10) + '@firebase/app-compat': 0.5.10 '@firebase/app-types': 0.9.3 - '@firebase/auth': 1.12.1(@firebase/app@0.14.9) - '@firebase/auth-compat': 0.6.3(@firebase/app-compat@0.5.9)(@firebase/app-types@0.9.3)(@firebase/app@0.14.9) - '@firebase/data-connect': 0.4.0(@firebase/app@0.14.9) - '@firebase/database': 1.1.1 - '@firebase/database-compat': 2.1.1 - '@firebase/firestore': 4.12.0(@firebase/app@0.14.9) - '@firebase/firestore-compat': 0.4.6(@firebase/app-compat@0.5.9)(@firebase/app-types@0.9.3)(@firebase/app@0.14.9) - '@firebase/functions': 0.13.2(@firebase/app@0.14.9) - '@firebase/functions-compat': 0.4.2(@firebase/app-compat@0.5.9)(@firebase/app@0.14.9) - '@firebase/installations': 0.6.20(@firebase/app@0.14.9) - '@firebase/installations-compat': 0.2.20(@firebase/app-compat@0.5.9)(@firebase/app-types@0.9.3)(@firebase/app@0.14.9) - '@firebase/messaging': 0.12.24(@firebase/app@0.14.9) - '@firebase/messaging-compat': 0.2.24(@firebase/app-compat@0.5.9)(@firebase/app@0.14.9) - '@firebase/performance': 0.7.10(@firebase/app@0.14.9) - '@firebase/performance-compat': 0.2.23(@firebase/app-compat@0.5.9)(@firebase/app@0.14.9) - '@firebase/remote-config': 0.8.1(@firebase/app@0.14.9) - '@firebase/remote-config-compat': 0.2.22(@firebase/app-compat@0.5.9)(@firebase/app@0.14.9) - '@firebase/storage': 0.14.1(@firebase/app@0.14.9) - '@firebase/storage-compat': 0.4.1(@firebase/app-compat@0.5.9)(@firebase/app-types@0.9.3)(@firebase/app@0.14.9) - '@firebase/util': 1.14.0 + '@firebase/auth': 1.12.2(@firebase/app@0.14.10) + '@firebase/auth-compat': 0.6.4(@firebase/app-compat@0.5.10)(@firebase/app-types@0.9.3)(@firebase/app@0.14.10) + '@firebase/data-connect': 0.5.0(@firebase/app@0.14.10) + '@firebase/database': 1.1.2 + '@firebase/database-compat': 2.1.2 + '@firebase/firestore': 4.13.0(@firebase/app@0.14.10) + '@firebase/firestore-compat': 0.4.7(@firebase/app-compat@0.5.10)(@firebase/app-types@0.9.3)(@firebase/app@0.14.10) + '@firebase/functions': 0.13.3(@firebase/app@0.14.10) + '@firebase/functions-compat': 0.4.3(@firebase/app-compat@0.5.10)(@firebase/app@0.14.10) + '@firebase/installations': 0.6.21(@firebase/app@0.14.10) + '@firebase/installations-compat': 0.2.21(@firebase/app-compat@0.5.10)(@firebase/app-types@0.9.3)(@firebase/app@0.14.10) + '@firebase/messaging': 0.12.25(@firebase/app@0.14.10) + '@firebase/messaging-compat': 0.2.25(@firebase/app-compat@0.5.10)(@firebase/app@0.14.10) + '@firebase/performance': 0.7.11(@firebase/app@0.14.10) + '@firebase/performance-compat': 0.2.24(@firebase/app-compat@0.5.10)(@firebase/app@0.14.10) + '@firebase/remote-config': 0.8.2(@firebase/app@0.14.10) + '@firebase/remote-config-compat': 0.2.23(@firebase/app-compat@0.5.10)(@firebase/app@0.14.10) + '@firebase/storage': 0.14.2(@firebase/app@0.14.10) + '@firebase/storage-compat': 0.4.2(@firebase/app-compat@0.5.10)(@firebase/app-types@0.9.3)(@firebase/app@0.14.10) + '@firebase/util': 1.15.0 transitivePeerDependencies: - '@react-native-async-storage/async-storage' @@ -17022,8 +17018,6 @@ snapshots: yallist@5.0.0: {} - yaml@2.8.2: {} - yaml@2.8.3: {} yargs-parser@20.2.9: {} diff --git a/tests/e2e/ng-snapshot/package.json b/tests/e2e/ng-snapshot/package.json index 2801ab623bff..449ef9251b81 100644 --- a/tests/e2e/ng-snapshot/package.json +++ b/tests/e2e/ng-snapshot/package.json @@ -2,21 +2,21 @@ "description": "snapshot versions of Angular for e2e testing", "private": true, "dependencies": { - "@angular/animations": "github:angular/animations-builds#cf1be3c0c0d73273c1be4061ff9da36c91b29e87", - "@angular/cdk": "github:angular/cdk-builds#111b5dda18c848fd93fe53119e4ac89ceb70c51c", - "@angular/common": "github:angular/common-builds#06d6877c59a6693553685eb5b020d2280361e3f2", - "@angular/compiler": "github:angular/compiler-builds#40ed5a5ca522f3f4812de8a25651ca56f620f37c", - "@angular/compiler-cli": "github:angular/compiler-cli-builds#a3bb528b2ec947cbbe801af09a7c7af1d84b8b4b", - "@angular/core": "github:angular/core-builds#f20cc173cf66cea31765c23eff4330bd37406e8f", - "@angular/forms": "github:angular/forms-builds#6b0cd21d8c9d82aca59387557b91189eb65c83bd", - "@angular/language-service": "github:angular/language-service-builds#f2007731f4e0cfcb5301e6fce5396146a6b71ded", - "@angular/localize": "github:angular/localize-builds#febc675c661ccadb0e82556e82e1ef8b7476a38b", - "@angular/material": "github:angular/material-builds#713d145fa7c5ff70c64f305fa54a78b5b5253387", - "@angular/material-moment-adapter": "github:angular/material-moment-adapter-builds#6ab7ed3a245c47184034e03d6b18b7d7ff2478cb", - "@angular/platform-browser": "github:angular/platform-browser-builds#95befc9e69ffcdc117c52b8993ad57331bba593d", - "@angular/platform-browser-dynamic": "github:angular/platform-browser-dynamic-builds#ab7183f40e71027e03b7458e992683dd5323b383", - "@angular/platform-server": "github:angular/platform-server-builds#a9feaa5244a3ca6898343967f3979efb103fb794", - "@angular/router": "github:angular/router-builds#9a98bcb55b5208ad7f8e20e4a25b509d86c21c3a", - "@angular/service-worker": "github:angular/service-worker-builds#07865dbf8dbd2750fea05019e735ec9b04b8ff75" + "@angular/animations": "github:angular/animations-builds#78f5b07aa81809624738b3e0905b5ee58ed224cd", + "@angular/cdk": "github:angular/cdk-builds#2200299cdc1929a0948614220bcced1e8817cd63", + "@angular/common": "github:angular/common-builds#b7cc603eb69721539e39885b2ee8a2ccdc1a7edd", + "@angular/compiler": "github:angular/compiler-builds#550f342f0a294f1d49841ddda8587731afa971c0", + "@angular/compiler-cli": "github:angular/compiler-cli-builds#cb25a8cbb9c4177b91b796bdfa5ded37e100d151", + "@angular/core": "github:angular/core-builds#5f682b0343bd5960f1242234b0a83d7e343c6b53", + "@angular/forms": "github:angular/forms-builds#2e61fc46841406f54817cc9c3d841211ea2dd9c5", + "@angular/language-service": "github:angular/language-service-builds#b41881d56352df21e88b72f3c34afe1448a03bfe", + "@angular/localize": "github:angular/localize-builds#f9436b3535a415720126f7573e4117e803adda44", + "@angular/material": "github:angular/material-builds#a162deacfbf67b31728ec2e717cb24a9cba2f5c4", + "@angular/material-moment-adapter": "github:angular/material-moment-adapter-builds#2c6929a61bd9a0e9d550c062925c40052d7919cb", + "@angular/platform-browser": "github:angular/platform-browser-builds#09a62f5c5fbc5ee90b39f8b3c82694c76e659062", + "@angular/platform-browser-dynamic": "github:angular/platform-browser-dynamic-builds#cacb47f942e671ae357af400a9bfac557a4fd8b8", + "@angular/platform-server": "github:angular/platform-server-builds#72b297f8d749a88aed72bff97ac35c5febc10ef8", + "@angular/router": "github:angular/router-builds#f56cafe22b3005a22505313edc5ab6b39532a953", + "@angular/service-worker": "github:angular/service-worker-builds#2ddf016fa7e1e852c98277e337b4add7559ccc8f" } } From 62e06f667177831a2b616bcd9a22b20f263e581b Mon Sep 17 00:00:00 2001 From: Angular Robot Date: Tue, 31 Mar 2026 08:18:27 +0000 Subject: [PATCH 203/226] build: lock file maintenance See associated pull request for more information. --- pnpm-lock.yaml | 314 +++++++++++++++++++++---------------------------- 1 file changed, 137 insertions(+), 177 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 059778cc987b..fcffea3de988 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -102,7 +102,7 @@ importers: version: 5.10.0(eslint@10.1.0(jiti@2.6.1)) '@tony.ganchev/eslint-plugin-header': specifier: ~3.3.1 - version: 3.3.3(eslint@10.1.0(jiti@2.6.1)) + version: 3.3.4(eslint@10.1.0(jiti@2.6.1)) '@types/babel__core': specifier: 7.20.5 version: 7.20.5 @@ -330,7 +330,7 @@ importers: version: 7.8.2 vitest: specifier: 4.1.2 - version: 4.1.2(@opentelemetry/api@1.9.0)(@types/node@24.12.0)(@vitest/coverage-v8@4.1.2)(jiti@2.6.1)(jsdom@29.0.1)(less@4.6.4)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) + version: 4.1.2(@opentelemetry/api@1.9.1)(@types/node@24.12.0)(@vitest/coverage-v8@4.1.2)(jiti@2.6.1)(jsdom@29.0.1)(less@4.6.4)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) packages/angular/build: dependencies: @@ -436,7 +436,7 @@ importers: version: 7.8.2 vitest: specifier: 4.1.2 - version: 4.1.2(@opentelemetry/api@1.9.0)(@types/node@24.12.0)(@vitest/coverage-v8@4.1.2)(jiti@2.6.1)(jsdom@29.0.1)(less@4.6.4)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) + version: 4.1.2(@opentelemetry/api@1.9.1)(@types/node@24.12.0)(@vitest/coverage-v8@4.1.2)(jiti@2.6.1)(jsdom@29.0.1)(less@4.6.4)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) optionalDependencies: lmdb: specifier: 3.5.2 @@ -1045,8 +1045,8 @@ packages: '@angular/core': 22.0.0-next.5 rxjs: ^6.5.3 || ^7.4.0 - '@asamuzakjp/css-color@5.0.1': - resolution: {integrity: sha512-2SZFvqMyvboVV1d15lMf7XiI3m7SDqXUuKaTymJYLN6dSGadqp+fVojqJlVoMlbZnlTmu3S0TLwLTJpvBMO1Aw==} + '@asamuzakjp/css-color@5.1.1': + resolution: {integrity: sha512-iGWN8E45Ws0XWx3D44Q1t6vX2LqhCKcwfmwBYCDsFrYFS6m4q/Ks61L2veETaLv+ckDC6+dTETJoaAAb7VjLiw==} engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0} '@asamuzakjp/dom-selector@7.0.4': @@ -1621,8 +1621,8 @@ packages: peerDependencies: '@csstools/css-tokenizer': ^4.0.0 - '@csstools/css-syntax-patches-for-csstree@1.1.1': - resolution: {integrity: sha512-BvqN0AMWNAnLk9G8jnUT77D+mUbY/H2b3uDTvg2isJkHaOufUE2R3AOwxWo7VBQKT1lOdwdvorddo2B/lk64+w==} + '@csstools/css-syntax-patches-for-csstree@1.1.2': + resolution: {integrity: sha512-5GkLzz4prTIpoyeUiIu3iV6CSG3Plo7xRVOFPKI7FVEJ3mZ0A8SwK0XU3Gl7xAkiQ+mDyam+NNp875/C5y+jSA==} peerDependencies: css-tree: ^3.2.1 peerDependenciesMeta: @@ -1641,15 +1641,6 @@ packages: resolution: {integrity: sha512-dDlz3W405VMFO4w5kIP9DOmELBcvFQGmLoKSdIRstBDubKFYwaNHV1NnlzMCQpXQFGWVALmeMORAuiLx18AvZQ==} engines: {node: '>=14.17.0'} - '@emnapi/core@1.9.1': - resolution: {integrity: sha512-mukuNALVsoix/w1BJwFzwXBN/dHeejQtuVzcDsfOEsdpCumXb/E9j8w11h5S54tT1xhifGfbbSm/ICrObRb3KA==} - - '@emnapi/runtime@1.9.1': - resolution: {integrity: sha512-VYi5+ZVLhpgK4hQ0TAjiQiZ6ol0oe4mBx7mVv7IflsiEp0OWoVsp/+f9Vc1hOhE0TtkORVrI1GvzyreqpgWtkA==} - - '@emnapi/wasi-threads@1.2.0': - resolution: {integrity: sha512-N10dEJNSsUx41Z6pZsXU8FjPjpBEplgH24sfkmITrBED1/U2Esum9F3lfLrMjKHHjmi557zQn7kR9R+XWXu5Rg==} - '@esbuild/aix-ppc64@0.27.3': resolution: {integrity: sha512-9fJMTNFTWZMh5qwrBItuziu834eOCUcEqymSH7pY+zoMVEZg3gcPuBNxH1EvfVYe9h0x/Ptw8KBzv7qxb7l8dg==} engines: {node: '>=18'} @@ -2657,8 +2648,11 @@ packages: resolution: {integrity: sha512-xJIPs+bYuc9ASBl+cvGsKbGrJmS6fAKaSZCnT0lhahT5rhA2VVy9/EcIgd2JhtEuFOJNx7UHNn/qiTPTY4nrQw==} engines: {node: '>= 10'} - '@napi-rs/wasm-runtime@1.1.1': - resolution: {integrity: sha512-p64ah1M1ld8xjWv3qbvFwHiFVWrq1yFvV4f7w+mzaqiR4IlSgkqhcRdHwsGgomwzBH51sRY4NEowLxnaBjcW/A==} + '@napi-rs/wasm-runtime@1.1.2': + resolution: {integrity: sha512-sNXv5oLJ7ob93xkZ1XnxisYhGYXfaG9f65/ZgYuAu3qt7b3NadcOEhLvx28hv31PgX8SZJRYrAIPQilQmFpLVw==} + peerDependencies: + '@emnapi/core': ^1.7.1 + '@emnapi/runtime': ^1.7.1 '@noble/hashes@1.4.0': resolution: {integrity: sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==} @@ -2801,18 +2795,18 @@ packages: '@open-draft/until@2.1.0': resolution: {integrity: sha512-U69T3ItWHvLwGg5eJ0n3I62nWuE6ilHlmz7zM0npLBRvPRd7e6NYmg54vvRtP5mZG7kZqZCFVdsTWo7BPtBujg==} - '@opentelemetry/api@1.9.0': - resolution: {integrity: sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg==} + '@opentelemetry/api@1.9.1': + resolution: {integrity: sha512-gLyJlPHPZYdAk1JENA9LeHejZe1Ti77/pTeFm/nMXmQH/HFZlcS/O2XJB+L8fkbrNSqhdtlvjBVjxwUYanNH5Q==} engines: {node: '>=8.0.0'} - '@opentelemetry/context-async-hooks@2.6.0': - resolution: {integrity: sha512-L8UyDwqpTcbkIK5cgwDRDYDoEhQoj8wp8BwsO19w3LB1Z41yEQm2VJyNfAi9DrLP/YTqXqWpKHyZfR9/tFYo1Q==} + '@opentelemetry/context-async-hooks@2.6.1': + resolution: {integrity: sha512-XHzhwRNkBpeP8Fs/qjGrAf9r9PRv67wkJQ/7ZPaBQQ68DYlTBBx5MF9LvPx7mhuXcDessKK2b+DcxqwpgkcivQ==} engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: '@opentelemetry/api': '>=1.0.0 <1.10.0' - '@opentelemetry/core@2.6.0': - resolution: {integrity: sha512-HLM1v2cbZ4TgYN6KEOj+Bbj8rAKriOdkF9Ed3tG25FoprSiQl7kYc+RRT6fUZGOvx0oMi5U67GoFdT+XUn8zEg==} + '@opentelemetry/core@2.6.1': + resolution: {integrity: sha512-8xHSGWpJP9wBxgBpnqGL0R3PbdWQndL1Qp50qrg71+B28zK5OQmUgcDKLJgzyAAV38t4tOyLMGDD60LneR5W8g==} engines: {node: ^18.19.0 || >=20.6.0} peerDependencies: '@opentelemetry/api': '>=1.0.0 <1.10.0' @@ -3349,15 +3343,11 @@ packages: resolution: {integrity: sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==} engines: {node: '>=10'} - '@tony.ganchev/eslint-plugin-header@3.3.3': - resolution: {integrity: sha512-neFWBw6lW5KbNDm9CUoYroczS9cxHY0+ulnRN5VMJW0hwoh/Y8XN3K17izVWY8TPLOIoDZQkr3fRkYmvCNUQEA==} + '@tony.ganchev/eslint-plugin-header@3.3.4': + resolution: {integrity: sha512-w6RqKLUO4Bvi8pdFJnNUl1o5bux3/i9ZaC+TIY593d+ad15InN8qe9rpqnzyL7Guk9i/vIc4ztlyw9todgKGPw==} peerDependencies: eslint: '>=7.7.0' - '@tootallnate/once@2.0.0': - resolution: {integrity: sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==} - engines: {node: '>= 10'} - '@tootallnate/quickjs-emscripten@0.23.0': resolution: {integrity: sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA==} @@ -3821,8 +3811,8 @@ packages: '@webassemblyjs/wast-printer@1.14.1': resolution: {integrity: sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw==} - '@xmldom/xmldom@0.8.11': - resolution: {integrity: sha512-cQzWCtO6C8TQiYl1ruKNn2U6Ao4o4WBBcbL61yJl84x+j5sOWWFU9X7DpND8XZG3daDppSsigMdfAIl2upQBRw==} + '@xmldom/xmldom@0.8.12': + resolution: {integrity: sha512-9k/gHF6n/pAi/9tqr3m3aqkuiNosYTurLLUtc7xQ9sxB/wm7WPygCv8GYa6mS0fLJEHhqMC1ATYhz++U/lRHqg==} engines: {node: '>=10.0.0'} deprecated: this version has critical issues, please update to the latest version @@ -4120,19 +4110,22 @@ packages: bare-buffer: optional: true - bare-os@3.8.0: - resolution: {integrity: sha512-Dc9/SlwfxkXIGYhvMQNUtKaXCaGkZYGcd1vuNUUADVqzu4/vQfvnMkYYOUnt2VwQ2AqKr/8qAVFRtwETljgeFg==} + bare-os@3.8.4: + resolution: {integrity: sha512-4JboWUl7/2LhgU536tjUszzaVC8/WEWKtyX5crayvlN71ih8+O2SdvBhotQeDsuhhmPZmLCrPBJEcwVPhI/kkQ==} engines: {bare: '>=1.14.0'} bare-path@3.0.0: resolution: {integrity: sha512-tyfW2cQcB5NN8Saijrhqn0Zh7AnFNsnczRcuWODH0eYAXBsJ5gVxAUuNr7tsHSC6IZ77cA0SitzT+s47kot8Mw==} - bare-stream@2.10.0: - resolution: {integrity: sha512-DOPZF/DDcDruKDA43cOw6e9Quq5daua7ygcAwJE/pKJsRWhgSSemi7qVNGE5kyDIxIeN1533G/zfbvWX7Wcb9w==} + bare-stream@2.11.0: + resolution: {integrity: sha512-Y/+iQ49fL3rIn6w/AVxI/2+BRrpmzJvdWt5Jv8Za6Ngqc6V227c+pYjYYgLdpR3MwQ9ObVXD0ZrqoBztakM0rw==} peerDependencies: + bare-abort-controller: '*' bare-buffer: '*' bare-events: '*' peerDependenciesMeta: + bare-abort-controller: + optional: true bare-buffer: optional: true bare-events: @@ -4148,8 +4141,8 @@ packages: resolution: {integrity: sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==} engines: {node: ^4.5.0 || >= 5.9} - baseline-browser-mapping@2.10.10: - resolution: {integrity: sha512-sUoJ3IMxx4AyRqO4MLeHlnGDkyXRoUG0/AI9fjK+vS72ekpV0yWVY7O0BVjmBcRtkNcsAO2QDZ4tdKKGoI6YaQ==} + baseline-browser-mapping@2.10.12: + resolution: {integrity: sha512-qyq26DxfY4awP2gIRXhhLWfwzwI+N5Nxk6iQi8EFizIaWIjqicQTE4sLnZZVdeKPRcVNoJOkkpfzoIYuvCKaIQ==} engines: {node: '>=6.0.0'} hasBin: true @@ -4203,14 +4196,14 @@ packages: boolbase@1.0.0: resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} - brace-expansion@1.1.12: - resolution: {integrity: sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==} + brace-expansion@1.1.13: + resolution: {integrity: sha512-9ZLprWS6EENmhEOpjCYW2c8VkmOvckIJZfkr7rBW6dObmfgJ/L1GpSYW5Hpo9lDz4D1+n0Ckz8rU7FwHDQiG/w==} - brace-expansion@2.0.2: - resolution: {integrity: sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==} + brace-expansion@2.0.3: + resolution: {integrity: sha512-MCV/fYJEbqx68aE58kv2cA/kiky1G8vux3OR6/jbS+jIMe/6fJWa0DTzJU7dqijOWYwHi1t29FlfYI9uytqlpA==} - brace-expansion@5.0.4: - resolution: {integrity: sha512-h+DEnpVvxmfVefa4jFbCf5HdH5YMDXRsmKflpf1pILZWRFlTbJpxeU55nJl4Smt5HQaGzg1o6RHFPJaOqnmBDg==} + brace-expansion@5.0.5: + resolution: {integrity: sha512-VZznLgtwhn+Mact9tfiwx64fA9erHH/MCXEUfB/0bX/6Fz6ny5EGTXYltMocqg4xFAQZtnO3DHWWXi8RiuN7cQ==} engines: {node: 18 || 20 || >=22} braces@3.0.3: @@ -4299,8 +4292,8 @@ packages: resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} engines: {node: '>=6'} - caniuse-lite@1.0.30001781: - resolution: {integrity: sha512-RdwNCyMsNBftLjW6w01z8bKEvT6e/5tpPVEgtn22TiLGlstHOVecsX2KHFkD5e/vRnIE4EGzpuIODb3mtswtkw==} + caniuse-lite@1.0.30001782: + resolution: {integrity: sha512-dZcaJLJeDMh4rELYFw1tvSn1bhZWYFOt468FcbHHxx/Z/dFidd1I6ciyFdi3iwfQCyOjqo9upF6lGQYtMiJWxw==} caseless@0.12.0: resolution: {integrity: sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==} @@ -4791,8 +4784,8 @@ packages: engines: {node: '>=0.12.18'} hasBin: true - electron-to-chromium@1.5.322: - resolution: {integrity: sha512-vFU34OcrvMcH66T+dYC3G4nURmgfDVewMIu6Q2urXpumAPSMmzvcn04KVVV8Opikq8Vs5nUbO/8laNhNRqSzYw==} + electron-to-chromium@1.5.328: + resolution: {integrity: sha512-QNQ5l45DzYytThO21403XN3FvK0hOkWDG8viNf6jqS42msJ8I4tGDSpBCgvDRRPnkffafiwAym2X2eHeGD2V0w==} emoji-regex@10.6.0: resolution: {integrity: sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==} @@ -5419,8 +5412,8 @@ packages: peerDependencies: graphql: ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 - graphql@16.13.1: - resolution: {integrity: sha512-gGgrVCoDKlIZ8fIqXBBb0pPKqDgki0Z/FSKNiQzSGj2uEYHr1tq5wmBegGwJx6QB5S5cM0khSBpi/JFHMCvsmQ==} + graphql@16.13.2: + resolution: {integrity: sha512-5bJ+nf/UCpAjHM8i06fl7eLyVC9iuNAjm9qzkiu2ZGhM0VscSvS6WDPfAwkdkBuoXGM9FJSbKl6wylMwP9Ktig==} engines: {node: ^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0} grpc-gcp@1.0.1: @@ -5513,10 +5506,6 @@ packages: http-parser-js@0.5.10: resolution: {integrity: sha512-Pysuw9XpUq5dVc/2SMHpuTY01RFl8fttgcyunjL7eEMhGM3cI4eOmiCycJDVCo/7O7ClfQD3SaI6ftDzqOXYMA==} - http-proxy-agent@5.0.0: - resolution: {integrity: sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==} - engines: {node: '>= 6'} - http-proxy-agent@7.0.2: resolution: {integrity: sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==} engines: {node: '>= 14'} @@ -6363,8 +6352,8 @@ packages: resolution: {integrity: sha512-2d0q2a8eCi2IRg/IGubCNRJoYbA1+YPXAzQVRFmB45gdGZafyivnZ5YSEfo3JikbjGxOdntGFvBQGqaSMXlAFQ==} engines: {node: ^20.17.0 || >=22.9.0} - minipass-flush@1.0.5: - resolution: {integrity: sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==} + minipass-flush@1.0.7: + resolution: {integrity: sha512-TbqTz9cUwWyHS2Dy89P3ocAGUGxKjjLuR9z8w4WUTGAVgEj17/4nhgo2Du56i0Fm3Pm30g4iA8Lcqctc76jCzA==} engines: {node: '>= 8'} minipass-pipeline@1.2.4: @@ -6776,11 +6765,11 @@ packages: resolution: {integrity: sha512-3O/iVVsJAPsOnpwWIeD+d6z/7PmqApyQePUtCndjatj/9I5LylHvt5qluFaBT3I5h3r1ejfR056c+FCv+NnNXg==} engines: {node: 18 || 20 || >=22} - path-to-regexp@0.1.12: - resolution: {integrity: sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==} + path-to-regexp@0.1.13: + resolution: {integrity: sha512-A/AGNMFN3c8bOlvV9RreMdrv7jsmF9XIfDeCd87+I8RNg6s78BhJxMu69NEMHBSJFxKidViTEdruRwEk/WIKqA==} - path-to-regexp@8.3.0: - resolution: {integrity: sha512-7jdwVIRtsP8MYpdXSwOS0YdD0Du+qOoF/AEPIt88PcCFrZCzx41oxku1jD88hZBwbNUIEfpqvuhjFaMAqMTWnA==} + path-to-regexp@8.4.0: + resolution: {integrity: sha512-PuseHIvAnz3bjrM2rGJtSgo1zjgxapTLZ7x2pjhzWwlp4SJQgK3f3iZIQwkpEnBaKz6seKBADpM4B4ySkuYypg==} pathe@1.1.2: resolution: {integrity: sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==} @@ -7315,8 +7304,8 @@ packages: resolution: {integrity: sha512-1gnZf7DFcoIcajTjTwjwuDjzuz4PPcY2StKPlsGAQ1+YH20IRVrBaXSWmdjowTJ6u8Rc01PoYOGHXfP1mYcZNQ==} engines: {node: '>= 18'} - serialize-javascript@7.0.4: - resolution: {integrity: sha512-DuGdB+Po43Q5Jxwpzt1lhyFSYKryqoNjQSA9M92tyw0lyHIOur+XCalOUe0KTJpyqzT8+fQ5A0Jf7vCx/NKmIg==} + serialize-javascript@7.0.5: + resolution: {integrity: sha512-F4LcB0UqUl1zErq+1nYEEzSHJnIwb3AF2XWB94b+afhrekOUijwooAYqFyRbjYkm2PAKBabx6oYv/xDxNi8IBw==} engines: {node: '>=20.0.0'} serve-index@1.9.2: @@ -7651,8 +7640,8 @@ packages: resolution: {integrity: sha512-tOG/7GyXpFevhXVh8jOPJrmtRpOTsYqUIkVdVooZYJS/z8WhfQUX8RJILmeuJNinGAMSu1veBr4asSHFt5/hng==} engines: {node: '>=18'} - teeny-request@10.1.0: - resolution: {integrity: sha512-3ZnLvgWF29jikg1sAQ1g0o+lr5JX6sVgYvfUJazn7ZjJroDBUTWp44/+cFVX0bULjv4vci+rBD+oGVAkWqhUbw==} + teeny-request@10.1.2: + resolution: {integrity: sha512-Xj0ZAQ0CeuQn6UxCDPLbFRlgcSTUEyO3+wiepr2grjIjyL/lMMs1Z4OwXn8kLvn/V1OuaEP0UY7Na6UDNNsYrQ==} engines: {node: '>=18'} teex@1.0.1: @@ -7877,17 +7866,13 @@ packages: resolution: {integrity: sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==} engines: {node: '>= 0.4'} - undici-types@7.24.5: - resolution: {integrity: sha512-kNh333UBSbgK35OIW7FwJTr9tTfVIG51Fm1tSVT7m8foPHfDVjsb7OIee/q/rs3bB2aV/3qOPgG5mHNWl1odiA==} + undici-types@7.24.6: + resolution: {integrity: sha512-WRNW+sJgj5OBN4/0JpHFqtqzhpbnV0GuB+OozA9gCL7a993SmU+1JBZCzLNxYsbMfIeDL+lTsphD5jN5N+n0zg==} undici@6.24.1: resolution: {integrity: sha512-sC+b0tB1whOCzbtlx20fx3WgCXwkW627p4EA9uM+/tNNPkSS+eSEld6pAs9nDv7WbY1UUljBMYPtu9BCOrCWKA==} engines: {node: '>=18.17'} - undici@7.24.5: - resolution: {integrity: sha512-3IWdCpjgxp15CbJnsi/Y9TCDE7HWVN19j1hmzVhoAkY/+CJx449tVxT5wZc1Gwg8J+P0LWvzlBzxYRnHJ+1i7Q==} - engines: {node: '>=20.18.1'} - undici@7.24.6: resolution: {integrity: sha512-Xi4agocCbRzt0yYMZGMA6ApD7gvtUFaxm4ZmeacWI4cZxaF6C+8I8QfofC20NAePiB/IcvZmzkJ7XPa471AEtA==} engines: {node: '>=20.18.1'} @@ -8351,10 +8336,10 @@ packages: resolution: {integrity: sha512-CzhO+pFNo8ajLM2d2IW/R93ipy99LWjtwblvC1RsoSUMZgyLbYFr221TnSNT7GjGdYui6P459mw9JH/g/zW2ug==} engines: {node: '>=18'} - zod-to-json-schema@3.25.1: - resolution: {integrity: sha512-pM/SU9d3YAggzi6MtR4h7ruuQlqKtad8e9S0fmxcMi+ueAK5Korys/aWcV9LIIHTVbj01NdzxcnXSN+O74ZIVA==} + zod-to-json-schema@3.25.2: + resolution: {integrity: sha512-O/PgfnpT1xKSDeQYSCfRI5Gy3hPf91mKVDuYLUHZJMiDFptvP41MSnWofm8dnCm0256ZNfZIM7DSzuSMAFnjHA==} peerDependencies: - zod: ^3.25 || ^4 + zod: ^3.25.28 || ^4 zod@3.25.76: resolution: {integrity: sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==} @@ -8642,7 +8627,7 @@ snapshots: rxjs: 7.8.2 tslib: 2.8.1 - '@asamuzakjp/css-color@5.0.1': + '@asamuzakjp/css-color@5.1.1': dependencies: '@csstools/css-calc': 3.1.1(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) '@csstools/css-color-parser': 4.0.2(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) @@ -9371,7 +9356,7 @@ snapshots: dependencies: '@csstools/css-tokenizer': 4.0.0 - '@csstools/css-syntax-patches-for-csstree@1.1.1(css-tree@3.2.1)': + '@csstools/css-syntax-patches-for-csstree@1.1.2(css-tree@3.2.1)': optionalDependencies: css-tree: 3.2.1 @@ -9400,22 +9385,6 @@ snapshots: '@discoveryjs/json-ext@1.0.0': {} - '@emnapi/core@1.9.1': - dependencies: - '@emnapi/wasi-threads': 1.2.0 - tslib: 2.8.1 - optional: true - - '@emnapi/runtime@1.9.1': - dependencies: - tslib: 2.8.1 - optional: true - - '@emnapi/wasi-threads@1.2.0': - dependencies: - tslib: 2.8.1 - optional: true - '@esbuild/aix-ppc64@0.27.3': optional: true @@ -9882,7 +9851,7 @@ snapshots: google-auth-library: 10.6.2(supports-color@10.2.2) html-entities: 2.6.0 retry-request: 8.0.2(supports-color@10.2.2) - teeny-request: 10.1.0(supports-color@10.2.2) + teeny-request: 10.1.2(supports-color@10.2.2) transitivePeerDependencies: - supports-color @@ -9903,9 +9872,9 @@ snapshots: '@google-cloud/projectify': 5.0.0 '@google-cloud/promisify': 5.0.0 '@grpc/proto-loader': 0.7.15 - '@opentelemetry/api': 1.9.0 - '@opentelemetry/context-async-hooks': 2.6.0(@opentelemetry/api@1.9.0) - '@opentelemetry/core': 2.6.0(@opentelemetry/api@1.9.0) + '@opentelemetry/api': 1.9.1 + '@opentelemetry/context-async-hooks': 2.6.1(@opentelemetry/api@1.9.1) + '@opentelemetry/core': 2.6.1(@opentelemetry/api@1.9.1) '@opentelemetry/semantic-conventions': 1.40.0 '@types/big.js': 6.2.2 '@types/stack-trace': 0.0.33 @@ -9926,7 +9895,7 @@ snapshots: split-array-stream: 2.0.0 stack-trace: 0.0.10 stream-events: 1.0.5 - teeny-request: 10.1.0(supports-color@10.2.2) + teeny-request: 10.1.2(supports-color@10.2.2) through2: 4.0.2 transitivePeerDependencies: - supports-color @@ -10324,7 +10293,7 @@ snapshots: pkce-challenge: 5.0.1 raw-body: 3.0.2 zod: 4.3.6 - zod-to-json-schema: 3.25.1(zod@4.3.6) + zod-to-json-schema: 3.25.2(zod@4.3.6) transitivePeerDependencies: - supports-color @@ -10427,10 +10396,8 @@ snapshots: '@napi-rs/nice-win32-x64-msvc': 1.1.1 optional: true - '@napi-rs/wasm-runtime@1.1.1': + '@napi-rs/wasm-runtime@1.1.2': dependencies: - '@emnapi/core': 1.9.1 - '@emnapi/runtime': 1.9.1 '@tybys/wasm-util': 0.10.1 optional: true @@ -10451,7 +10418,7 @@ snapshots: '@npmcli/agent@4.0.0': dependencies: agent-base: 7.1.4 - http-proxy-agent: 7.0.2 + http-proxy-agent: 7.0.2(supports-color@10.2.2) https-proxy-agent: 7.0.6(supports-color@10.2.2) lru-cache: 11.2.7 socks-proxy-agent: 8.0.5 @@ -10559,8 +10526,8 @@ snapshots: '@octokit/graphql-schema@15.26.1': dependencies: - graphql: 16.13.1 - graphql-tag: 2.12.6(graphql@16.13.1) + graphql: 16.13.2 + graphql-tag: 2.12.6(graphql@16.13.2) '@octokit/graphql@9.0.3': dependencies: @@ -10626,15 +10593,15 @@ snapshots: '@open-draft/until@2.1.0': {} - '@opentelemetry/api@1.9.0': {} + '@opentelemetry/api@1.9.1': {} - '@opentelemetry/context-async-hooks@2.6.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/context-async-hooks@2.6.1(@opentelemetry/api@1.9.1)': dependencies: - '@opentelemetry/api': 1.9.0 + '@opentelemetry/api': 1.9.1 - '@opentelemetry/core@2.6.0(@opentelemetry/api@1.9.0)': + '@opentelemetry/core@2.6.1(@opentelemetry/api@1.9.1)': dependencies: - '@opentelemetry/api': 1.9.0 + '@opentelemetry/api': 1.9.1 '@opentelemetry/semantic-conventions': 1.40.0 '@opentelemetry/semantic-conventions@1.40.0': {} @@ -10893,7 +10860,10 @@ snapshots: '@rolldown/binding-wasm32-wasi@1.0.0-rc.12': dependencies: - '@napi-rs/wasm-runtime': 1.1.1 + '@napi-rs/wasm-runtime': 1.1.2 + transitivePeerDependencies: + - '@emnapi/core' + - '@emnapi/runtime' optional: true '@rolldown/binding-win32-arm64-msvc@1.0.0-rc.12': @@ -11085,12 +11055,10 @@ snapshots: dependencies: defer-to-connect: 2.0.1 - '@tony.ganchev/eslint-plugin-header@3.3.3(eslint@10.1.0(jiti@2.6.1))': + '@tony.ganchev/eslint-plugin-header@3.3.4(eslint@10.1.0(jiti@2.6.1))': dependencies: eslint: 10.1.0(jiti@2.6.1) - '@tootallnate/once@2.0.0': {} - '@tootallnate/quickjs-emscripten@0.23.0': {} '@tufjs/canonical-json@2.0.0': {} @@ -11275,11 +11243,11 @@ snapshots: '@types/node@22.19.15': dependencies: - undici-types: 7.24.5 + undici-types: 7.24.6 '@types/node@24.12.0': dependencies: - undici-types: 7.24.5 + undici-types: 7.24.6 '@types/npm-package-arg@6.1.4': {} @@ -11657,7 +11625,7 @@ snapshots: obug: 2.1.1 std-env: 4.0.0 tinyrainbow: 3.1.0 - vitest: 4.1.2(@opentelemetry/api@1.9.0)(@types/node@24.12.0)(@vitest/coverage-v8@4.1.2)(jiti@2.6.1)(jsdom@29.0.1)(less@4.6.4)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) + vitest: 4.1.2(@opentelemetry/api@1.9.1)(@types/node@24.12.0)(@vitest/coverage-v8@4.1.2)(jiti@2.6.1)(jsdom@29.0.1)(less@4.6.4)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) '@vitest/expect@4.1.2': dependencies: @@ -11776,7 +11744,7 @@ snapshots: '@webassemblyjs/ast': 1.14.1 '@xtuc/long': 4.2.2 - '@xmldom/xmldom@0.8.11': {} + '@xmldom/xmldom@0.8.12': {} '@xtuc/ieee754@1.2.0': {} @@ -11820,7 +11788,7 @@ snapshots: loader-utils: 2.0.4 regex-parser: 2.3.1 - agent-base@6.0.2(supports-color@10.2.2): + agent-base@6.0.2: dependencies: debug: 4.4.3(supports-color@10.2.2) transitivePeerDependencies: @@ -12007,7 +11975,7 @@ snapshots: autoprefixer@10.4.27(postcss@8.5.8): dependencies: browserslist: 4.28.1 - caniuse-lite: 1.0.30001781 + caniuse-lite: 1.0.30001782 fraction.js: 5.3.4 picocolors: 1.1.1 postcss: 8.5.8 @@ -12072,27 +12040,26 @@ snapshots: dependencies: bare-events: 2.8.2 bare-path: 3.0.0 - bare-stream: 2.10.0(bare-events@2.8.2) + bare-stream: 2.11.0(bare-events@2.8.2) bare-url: 2.4.0 fast-fifo: 1.3.2 transitivePeerDependencies: - bare-abort-controller - react-native-b4a - bare-os@3.8.0: {} + bare-os@3.8.4: {} bare-path@3.0.0: dependencies: - bare-os: 3.8.0 + bare-os: 3.8.4 - bare-stream@2.10.0(bare-events@2.8.2): + bare-stream@2.11.0(bare-events@2.8.2): dependencies: streamx: 2.25.0 teex: 1.0.1 optionalDependencies: bare-events: 2.8.2 transitivePeerDependencies: - - bare-abort-controller - react-native-b4a bare-url@2.4.0: @@ -12103,7 +12070,7 @@ snapshots: base64id@2.0.0: {} - baseline-browser-mapping@2.10.10: {} + baseline-browser-mapping@2.10.12: {} basic-ftp@5.2.0: {} @@ -12179,16 +12146,16 @@ snapshots: boolbase@1.0.0: {} - brace-expansion@1.1.12: + brace-expansion@1.1.13: dependencies: balanced-match: 1.0.2 concat-map: 0.0.1 - brace-expansion@2.0.2: + brace-expansion@2.0.3: dependencies: balanced-match: 1.0.2 - brace-expansion@5.0.4: + brace-expansion@5.0.5: dependencies: balanced-match: 4.0.4 @@ -12260,9 +12227,9 @@ snapshots: browserslist@4.28.1: dependencies: - baseline-browser-mapping: 2.10.10 - caniuse-lite: 1.0.30001781 - electron-to-chromium: 1.5.322 + baseline-browser-mapping: 2.10.12 + caniuse-lite: 1.0.30001782 + electron-to-chromium: 1.5.328 node-releases: 2.0.36 update-browserslist-db: 1.2.3(browserslist@4.28.1) @@ -12299,7 +12266,7 @@ snapshots: lru-cache: 11.2.7 minipass: 7.1.3 minipass-collect: 2.0.1 - minipass-flush: 1.0.5 + minipass-flush: 1.0.7 minipass-pipeline: 1.2.4 p-map: 7.0.4 ssri: 13.0.1 @@ -12335,7 +12302,7 @@ snapshots: callsites@3.1.0: {} - caniuse-lite@1.0.30001781: {} + caniuse-lite@1.0.30001782: {} caseless@0.12.0: {} @@ -12537,7 +12504,7 @@ snapshots: glob-parent: 6.0.2 normalize-path: 3.0.0 schema-utils: 4.3.3 - serialize-javascript: 7.0.4 + serialize-javascript: 7.0.5 tinyglobby: 0.2.15 webpack: 5.105.4(esbuild@0.27.3) @@ -12810,7 +12777,7 @@ snapshots: ejs@5.0.1: {} - electron-to-chromium@1.5.322: {} + electron-to-chromium@1.5.328: {} emoji-regex@10.6.0: {} @@ -13221,7 +13188,7 @@ snapshots: methods: 1.1.2 on-finished: 2.4.1 parseurl: 1.3.3 - path-to-regexp: 0.1.12 + path-to-regexp: 0.1.13 proxy-addr: 2.0.7 qs: 6.14.2 range-parser: 1.2.1 @@ -13688,12 +13655,12 @@ snapshots: graceful-fs@4.2.11: {} - graphql-tag@2.12.6(graphql@16.13.1): + graphql-tag@2.12.6(graphql@16.13.2): dependencies: - graphql: 16.13.1 + graphql: 16.13.2 tslib: 2.8.1 - graphql@16.13.1: {} + graphql@16.13.2: {} grpc-gcp@1.0.1(protobufjs@7.5.4): dependencies: @@ -13802,15 +13769,7 @@ snapshots: http-parser-js@0.5.10: {} - http-proxy-agent@5.0.0(supports-color@10.2.2): - dependencies: - '@tootallnate/once': 2.0.0 - agent-base: 6.0.2(supports-color@10.2.2) - debug: 4.4.3(supports-color@10.2.2) - transitivePeerDependencies: - - supports-color - - http-proxy-agent@7.0.2: + http-proxy-agent@7.0.2(supports-color@10.2.2): dependencies: agent-base: 7.1.4 debug: 4.4.3(supports-color@10.2.2) @@ -13861,9 +13820,9 @@ snapshots: quick-lru: 5.1.1 resolve-alpn: 1.2.1 - https-proxy-agent@5.0.1(supports-color@10.2.2): + https-proxy-agent@5.0.1: dependencies: - agent-base: 6.0.2(supports-color@10.2.2) + agent-base: 6.0.2 debug: 4.4.3(supports-color@10.2.2) transitivePeerDependencies: - supports-color @@ -14200,7 +14159,7 @@ snapshots: jasmine-reporters@2.5.2: dependencies: - '@xmldom/xmldom': 0.8.11 + '@xmldom/xmldom': 0.8.12 mkdirp: 1.0.4 jasmine-spec-reporter@7.0.0: @@ -14237,10 +14196,10 @@ snapshots: jsdom@29.0.1: dependencies: - '@asamuzakjp/css-color': 5.0.1 + '@asamuzakjp/css-color': 5.1.1 '@asamuzakjp/dom-selector': 7.0.4 '@bramus/specificity': 2.4.2 - '@csstools/css-syntax-patches-for-csstree': 1.1.1(css-tree@3.2.1) + '@csstools/css-syntax-patches-for-csstree': 1.1.2(css-tree@3.2.1) '@exodus/bytes': 1.15.0 css-tree: 3.2.1 data-urls: 7.0.0 @@ -14252,7 +14211,7 @@ snapshots: saxes: 6.0.0 symbol-tree: 3.2.4 tough-cookie: 6.0.1 - undici: 7.24.5 + undici: 7.24.6 w3c-xmlserializer: 5.0.0 webidl-conversions: 8.0.1 whatwg-mimetype: 5.0.0 @@ -14587,7 +14546,7 @@ snapshots: http-cache-semantics: 4.2.0 minipass: 7.1.3 minipass-fetch: 5.0.2 - minipass-flush: 1.0.5 + minipass-flush: 1.0.7 minipass-pipeline: 1.2.4 negotiator: 1.0.0 proc-log: 6.1.0 @@ -14671,23 +14630,23 @@ snapshots: minimatch@10.2.4: dependencies: - brace-expansion: 5.0.4 + brace-expansion: 5.0.5 minimatch@3.1.5: dependencies: - brace-expansion: 1.1.12 + brace-expansion: 1.1.13 minimatch@7.4.6: dependencies: - brace-expansion: 2.0.2 + brace-expansion: 2.0.3 minimatch@7.4.9: dependencies: - brace-expansion: 2.0.2 + brace-expansion: 2.0.3 minimatch@9.0.9: dependencies: - brace-expansion: 2.0.2 + brace-expansion: 2.0.3 minimist@1.2.8: {} @@ -14703,7 +14662,7 @@ snapshots: optionalDependencies: iconv-lite: 0.7.2 - minipass-flush@1.0.5: + minipass-flush@1.0.7: dependencies: minipass: 3.3.6 @@ -15086,7 +15045,7 @@ snapshots: agent-base: 7.1.4 debug: 4.4.3(supports-color@10.2.2) get-uri: 6.0.5 - http-proxy-agent: 7.0.2 + http-proxy-agent: 7.0.2(supports-color@10.2.2) https-proxy-agent: 7.0.6(supports-color@10.2.2) pac-resolver: 7.0.1 socks-proxy-agent: 8.0.5 @@ -15173,9 +15132,9 @@ snapshots: lru-cache: 11.2.7 minipass: 7.1.3 - path-to-regexp@0.1.12: {} + path-to-regexp@0.1.13: {} - path-to-regexp@8.3.0: {} + path-to-regexp@8.4.0: {} pathe@1.1.2: {} @@ -15354,7 +15313,7 @@ snapshots: dependencies: agent-base: 7.1.4 debug: 4.4.3(supports-color@10.2.2) - http-proxy-agent: 7.0.2 + http-proxy-agent: 7.0.2(supports-color@10.2.2) https-proxy-agent: 7.0.6(supports-color@10.2.2) lru-cache: 7.18.3 pac-proxy-agent: 7.2.0 @@ -15611,7 +15570,7 @@ snapshots: retry-request@8.0.2(supports-color@10.2.2): dependencies: extend: 3.0.2 - teeny-request: 10.1.0(supports-color@10.2.2) + teeny-request: 10.1.2(supports-color@10.2.2) transitivePeerDependencies: - supports-color @@ -15649,6 +15608,9 @@ snapshots: '@rolldown/binding-wasm32-wasi': 1.0.0-rc.12 '@rolldown/binding-win32-arm64-msvc': 1.0.0-rc.12 '@rolldown/binding-win32-x64-msvc': 1.0.0-rc.12 + transitivePeerDependencies: + - '@emnapi/core' + - '@emnapi/runtime' rollup-license-plugin@3.2.1: dependencies: @@ -15712,7 +15674,7 @@ snapshots: depd: 2.0.0 is-promise: 4.0.0 parseurl: 1.3.3 - path-to-regexp: 8.3.0 + path-to-regexp: 8.4.0 transitivePeerDependencies: - supports-color @@ -15834,7 +15796,7 @@ snapshots: transitivePeerDependencies: - supports-color - serialize-javascript@7.0.4: {} + serialize-javascript@7.0.5: {} serve-index@1.9.2: dependencies: @@ -16295,10 +16257,10 @@ snapshots: minizlib: 3.1.0 yallist: 5.0.0 - teeny-request@10.1.0(supports-color@10.2.2): + teeny-request@10.1.2(supports-color@10.2.2): dependencies: - http-proxy-agent: 5.0.0(supports-color@10.2.2) - https-proxy-agent: 5.0.1(supports-color@10.2.2) + http-proxy-agent: 7.0.2(supports-color@10.2.2) + https-proxy-agent: 7.0.6(supports-color@10.2.2) node-fetch: 3.3.2 stream-events: 1.0.5 transitivePeerDependencies: @@ -16524,12 +16486,10 @@ snapshots: has-symbols: 1.1.0 which-boxed-primitive: 1.1.1 - undici-types@7.24.5: {} + undici-types@7.24.6: {} undici@6.24.1: {} - undici@7.24.5: {} - undici@7.24.6: {} unenv@1.10.0: @@ -16604,7 +16564,7 @@ snapshots: '@verdaccio/config': 8.0.0-next-8.33 '@verdaccio/core': 8.0.0-next-8.33 express: 4.22.1 - https-proxy-agent: 5.0.1(supports-color@10.2.2) + https-proxy-agent: 5.0.1 node-fetch: 2.6.7(encoding@0.1.13) transitivePeerDependencies: - encoding @@ -16691,7 +16651,7 @@ snapshots: tsx: 4.21.0 yaml: 2.8.3 - vitest@4.1.2(@opentelemetry/api@1.9.0)(@types/node@24.12.0)(@vitest/coverage-v8@4.1.2)(jiti@2.6.1)(jsdom@29.0.1)(less@4.6.4)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3): + vitest@4.1.2(@opentelemetry/api@1.9.1)(@types/node@24.12.0)(@vitest/coverage-v8@4.1.2)(jiti@2.6.1)(jsdom@29.0.1)(less@4.6.4)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3): dependencies: '@vitest/coverage-v8': 4.1.2(vitest@4.1.2) '@vitest/expect': 4.1.2 @@ -16715,7 +16675,7 @@ snapshots: vite: 7.3.1(@types/node@24.12.0)(jiti@2.6.1)(less@4.6.4)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) why-is-node-running: 2.3.0 optionalDependencies: - '@opentelemetry/api': 1.9.0 + '@opentelemetry/api': 1.9.1 '@types/node': 24.12.0 jsdom: 29.0.1 transitivePeerDependencies: @@ -17064,7 +17024,7 @@ snapshots: yoctocolors@2.1.2: {} - zod-to-json-schema@3.25.1(zod@4.3.6): + zod-to-json-schema@3.25.2(zod@4.3.6): dependencies: zod: 4.3.6 From 7fbc715bf728e6e08035f4bae663bead1e5b0e4c Mon Sep 17 00:00:00 2001 From: Alan Agius <17563226+alan-agius4@users.noreply.github.com> Date: Wed, 1 Apr 2026 13:13:18 +0000 Subject: [PATCH 204/226] release: cut the v22.0.0-next.4 release --- CHANGELOG.md | 29 +++++++++++++++++++++++++++++ package.json | 2 +- 2 files changed, 30 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 894cc1e72d9d..f9d046c94468 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,32 @@ + + +# 22.0.0-next.4 (2026-04-01) + +### @angular/cli + +| Commit | Type | Description | +| --------------------------------------------------------------------------------------------------- | ---- | ----------------------------------------------- | +| [87d99e98b](https://github.com/angular/angular-cli/commit/87d99e98b178c8f7d5e944a346faf70c51bdfcef) | feat | support custom port in MCP devserver start tool | +| [4815a5417](https://github.com/angular/angular-cli/commit/4815a5417c7a0135fb66149c2e4c1008e21e3a26) | fix | fix sourceRoot resolution for MCP projects tool | + +### @angular/build + +| Commit | Type | Description | +| --------------------------------------------------------------------------------------------------- | ---- | ------------------------------------------------------------------- | +| [21d8aa474](https://github.com/angular/angular-cli/commit/21d8aa4747573132476c3a0a4b7ea1f6405a71ef) | fix | ensure transitive SCSS partial errors are tracked in watch mode | +| [e558117b7](https://github.com/angular/angular-cli/commit/e558117b748ee5837324d49466108d21db596b2e) | fix | ensure Vitest mock patching is executed only once | +| [81e4faae7](https://github.com/angular/angular-cli/commit/81e4faae7699e2ed1eb8f4656dc115ca9c20f416) | fix | preserve error stack traces during prerendering | +| [8dd341e21](https://github.com/angular/angular-cli/commit/8dd341e21b8f44e8e2bf3f322cced8ff6e861098) | fix | scope CHROME_BIN executable path to individual playwright instances | + +### @angular/ssr + +| Commit | Type | Description | +| --------------------------------------------------------------------------------------------------- | ---- | ---------------------------------------------------- | +| [e7e434ca3](https://github.com/angular/angular-cli/commit/e7e434ca3d78a8369b592bf870c9466962f77c94) | fix | allow underscores in host validation | +| [bcd99f944](https://github.com/angular/angular-cli/commit/bcd99f944ecb90f896040030b98f1d03692b5b6f) | fix | patch Headers.forEach in cloneRequestAndPatchHeaders | + + + # 21.2.6 (2026-04-01) diff --git a/package.json b/package.json index f4ab46767984..71aadd192661 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@angular/devkit-repo", - "version": "22.0.0-next.3", + "version": "22.0.0-next.4", "private": true, "description": "Software Development Kit for Angular", "keywords": [ From ab3bec43fe13fd39668292b64cb03f8e712fa60e Mon Sep 17 00:00:00 2001 From: Angular Robot Date: Thu, 2 Apr 2026 06:38:43 +0000 Subject: [PATCH 205/226] build: update dependency aspect_rules_ts to v3.8.8 See associated pull request for more information. --- MODULE.bazel | 2 +- MODULE.bazel.lock | 9 +++++---- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/MODULE.bazel b/MODULE.bazel index 9b3e2bed517b..e6a04dad51b7 100644 --- a/MODULE.bazel +++ b/MODULE.bazel @@ -8,7 +8,7 @@ bazel_dep(name = "platforms", version = "1.0.0") bazel_dep(name = "yq.bzl", version = "0.3.5") bazel_dep(name = "rules_nodejs", version = "6.7.3") bazel_dep(name = "aspect_rules_js", version = "3.0.3") -bazel_dep(name = "aspect_rules_ts", version = "3.8.7") +bazel_dep(name = "aspect_rules_ts", version = "3.8.8") bazel_dep(name = "rules_pkg", version = "1.2.0") bazel_dep(name = "rules_cc", version = "0.2.17") bazel_dep(name = "jq.bzl", version = "0.6.1") diff --git a/MODULE.bazel.lock b/MODULE.bazel.lock index 59025318b553..4208ee7f289e 100644 --- a/MODULE.bazel.lock +++ b/MODULE.bazel.lock @@ -26,7 +26,8 @@ "https://bcr.bazel.build/modules/aspect_rules_js/3.0.3/MODULE.bazel": "28a30e8fc33bf64a67835d64d124f6e05a7d59648dcb27b110fb3502f761e503", "https://bcr.bazel.build/modules/aspect_rules_js/3.0.3/source.json": "bb8fff9a304452e1042af9522ad1d54d6f1d1fdf71c5127deadb6fd156654193", "https://bcr.bazel.build/modules/aspect_rules_ts/3.8.7/MODULE.bazel": "830f8a53bb9f1139c24006a90ddc0230481326d69fa847eb00daf8eaae118724", - "https://bcr.bazel.build/modules/aspect_rules_ts/3.8.7/source.json": "95549d64e28f3e4e3648cc037cefdac01ec3b0f58fced2409c286784e82ad0f0", + "https://bcr.bazel.build/modules/aspect_rules_ts/3.8.8/MODULE.bazel": "b52b929a948438665809d49af610f58d1b14f63d6d21ab748f47b6050be4c1f6", + "https://bcr.bazel.build/modules/aspect_rules_ts/3.8.8/source.json": "5414530b761a45ab7ca6c49f0a2a9cf8dc0da772f5037cf05ca18aaa64bb1b19", "https://bcr.bazel.build/modules/aspect_tools_telemetry/0.2.6/MODULE.bazel": "cafb8781ad591bc57cc765dca5fefab08cf9f65af363d162b79d49205c7f8af7", "https://bcr.bazel.build/modules/aspect_tools_telemetry/0.2.8/MODULE.bazel": "aa975a83e72bcaac62ee61ab12b788ea324a1d05c4aab28aadb202f647881679", "https://bcr.bazel.build/modules/aspect_tools_telemetry/0.3.3/MODULE.bazel": "37c764292861c2f70314efa9846bb6dbb44fc0308903b3285da6528305450183", @@ -426,7 +427,7 @@ }, "@@aspect_rules_ts+//ts:extensions.bzl%ext": { "general": { - "bzlTransitiveDigest": "GbfZLeEI0W26fAQ89dUljyLGSAkzkr3CkF+VDQ0IFlI=", + "bzlTransitiveDigest": "dhTbv9E6UfT1WJmmu3ORRPO6AKFJvgBjBxu+BO+u1RY=", "usagesDigest": "M9vJ1ahjqDb8ONBLGfZdvp4Vq1o4Y6Xjfv/ZY7PlnYo=", "recordedFileInputs": {}, "recordedDirentsInputs": {}, @@ -490,7 +491,7 @@ "@@aspect_tools_telemetry+//:extension.bzl%telemetry": { "general": { "bzlTransitiveDigest": "cl5A2O84vDL6Tt+Qga8FCj1DUDGqn+e7ly5rZ+4xvcc=", - "usagesDigest": "Htk4MyL4d05V7Kpv8OWMQ8y+7IkUx9BOmnhlLXYMO80=", + "usagesDigest": "0S2z9G3E1NIz6vCXk9IbRcO5LIckEcYVMSzRj2sEML8=", "recordedFileInputs": {}, "recordedDirentsInputs": {}, "envVariables": {}, @@ -500,7 +501,7 @@ "attributes": { "deps": { "aspect_rules_js": "3.0.3", - "aspect_rules_ts": "3.8.7", + "aspect_rules_ts": "3.8.8", "aspect_rules_esbuild": "0.25.1", "aspect_rules_jasmine": "2.0.4", "aspect_tools_telemetry": "0.3.3" From b91a6c49aafaae9204b8d7a22107c5423ba21ca3 Mon Sep 17 00:00:00 2001 From: Angular Robot Date: Thu, 2 Apr 2026 07:32:08 +0000 Subject: [PATCH 206/226] build: update github/codeql-action action to v4.35.1 See associated pull request for more information. --- .github/workflows/codeql.yml | 4 ++-- .github/workflows/scorecard.yml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml index 9c9cda1ad80d..2f8871e567c0 100644 --- a/.github/workflows/codeql.yml +++ b/.github/workflows/codeql.yml @@ -23,12 +23,12 @@ jobs: with: persist-credentials: false - name: Initialize CodeQL - uses: github/codeql-action/init@38697555549f1db7851b81482ff19f1fa5c4fedc # v4.34.1 + uses: github/codeql-action/init@c10b8064de6f491fea524254123dbe5e09572f13 # v4.35.1 with: languages: javascript-typescript build-mode: none config-file: .github/codeql/config.yml - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@38697555549f1db7851b81482ff19f1fa5c4fedc # v4.34.1 + uses: github/codeql-action/analyze@c10b8064de6f491fea524254123dbe5e09572f13 # v4.35.1 with: category: '/language:javascript-typescript' diff --git a/.github/workflows/scorecard.yml b/.github/workflows/scorecard.yml index 4bdd5339c5b9..10f1a668575e 100644 --- a/.github/workflows/scorecard.yml +++ b/.github/workflows/scorecard.yml @@ -46,6 +46,6 @@ jobs: # Upload the results to GitHub's code scanning dashboard. - name: 'Upload to code-scanning' - uses: github/codeql-action/upload-sarif@38697555549f1db7851b81482ff19f1fa5c4fedc # v4.34.1 + uses: github/codeql-action/upload-sarif@c10b8064de6f491fea524254123dbe5e09572f13 # v4.35.1 with: sarif_file: results.sarif From 617dd4ecccef4418ad381f1ea50d85d338a28ec0 Mon Sep 17 00:00:00 2001 From: Alan Agius <17563226+alan-agius4@users.noreply.github.com> Date: Tue, 7 Apr 2026 07:33:28 +0000 Subject: [PATCH 207/226] ci: re-enable renovate for esbuild packages The upstream regression issue has been addressed, allowing dependency updates for esbuild and esbuild-wasm to resume. --- renovate.json | 1 - 1 file changed, 1 deletion(-) diff --git a/renovate.json b/renovate.json index 765ab674bcbe..6b91ffcea750 100644 --- a/renovate.json +++ b/renovate.json @@ -2,7 +2,6 @@ "$schema": "https://docs.renovatebot.com/renovate-schema.json", "baseBranchPatterns": ["main", "21.2.x"], "extends": ["github>angular/dev-infra//renovate-presets/default.json5"], - "ignoreDeps": ["esbuild", "esbuild-wasm"], "ignorePaths": ["tests/e2e/assets/**", "tests/schematics/update/packages/**"], "packageRules": [ { From 470e1f937492e73971dea9c39af83368caf74e42 Mon Sep 17 00:00:00 2001 From: Charles Lyding <19598772+clydin@users.noreply.github.com> Date: Fri, 3 Apr 2026 10:00:10 -0400 Subject: [PATCH 208/226] fix(@schematics/angular): add istanbul-lib-instrument to application/library generator dependencies Update addTestRunnerDependencies to include istanbul-lib-instrument when generating new applications or libraries with the Karma test runner. --- packages/schematics/angular/utility/dependencies.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/schematics/angular/utility/dependencies.ts b/packages/schematics/angular/utility/dependencies.ts index b90ba8796975..0bd61807c390 100644 --- a/packages/schematics/angular/utility/dependencies.ts +++ b/packages/schematics/angular/utility/dependencies.ts @@ -97,6 +97,7 @@ export function addTestRunnerDependencies( 'karma-jasmine-html-reporter', 'jasmine-core', '@types/jasmine', + 'istanbul-lib-instrument', ]; return dependencies.map((name) => From 3007f46b7e077227b17d8bb1090edd2f8ff19ae3 Mon Sep 17 00:00:00 2001 From: Charles Lyding <19598772+clydin@users.noreply.github.com> Date: Fri, 3 Apr 2026 09:40:02 -0400 Subject: [PATCH 209/226] feat(@angular/build): move istanbul-lib-instrument to optional peer dependency Move `istanbul-lib-instrument` from dependencies to optional peer dependencies. This helps reduce the transitive dependency count for new projects. BREAKING CHANGE: `istanbul-lib-instrument` is now an optional peer dependency. Projects using karma with code coverage enabled will need to ensure that istanbul-lib-instrument is installed. Note: `ng update` will automatically add this dependency during the update process. --- modules/testing/builder/BUILD.bazel | 1 + modules/testing/builder/package.json | 1 + packages/angular/build/package.json | 6 +++- .../tools/babel/plugins/add-code-coverage.ts | 6 ++-- .../esbuild/javascript-transformer-worker.ts | 28 +++++++++++++++++-- pnpm-lock.yaml | 9 ++++-- 6 files changed, 43 insertions(+), 8 deletions(-) diff --git a/modules/testing/builder/BUILD.bazel b/modules/testing/builder/BUILD.bazel index 4fa8b7ee723b..45c39358c29c 100644 --- a/modules/testing/builder/BUILD.bazel +++ b/modules/testing/builder/BUILD.bazel @@ -21,6 +21,7 @@ ts_project( # resolvable in the test project. ":node_modules/@angular/ssr", ":node_modules/browser-sync", + ":node_modules/istanbul-lib-instrument", ":node_modules/jsdom", ":node_modules/ng-packagr", ":node_modules/vitest", diff --git a/modules/testing/builder/package.json b/modules/testing/builder/package.json index 77d9ac942495..5ba604719d42 100644 --- a/modules/testing/builder/package.json +++ b/modules/testing/builder/package.json @@ -6,6 +6,7 @@ "@angular/ssr": "workspace:*", "@vitest/coverage-v8": "4.1.2", "browser-sync": "3.0.4", + "istanbul-lib-instrument": "6.0.3", "jsdom": "29.0.1", "ng-packagr": "22.0.0-next.1", "rxjs": "7.8.2", diff --git a/packages/angular/build/package.json b/packages/angular/build/package.json index 68f134b63cf8..1541f7bd63cb 100644 --- a/packages/angular/build/package.json +++ b/packages/angular/build/package.json @@ -29,7 +29,6 @@ "browserslist": "^4.26.0", "esbuild": "0.27.3", "https-proxy-agent": "8.0.0", - "istanbul-lib-instrument": "6.0.3", "jsonc-parser": "3.3.1", "listr2": "10.2.1", "magic-string": "0.30.21", @@ -51,6 +50,7 @@ "devDependencies": { "@angular-devkit/core": "workspace:*", "@angular/ssr": "workspace:*", + "istanbul-lib-instrument": "6.0.3", "jsdom": "29.0.1", "less": "4.6.4", "ng-packagr": "22.0.0-next.1", @@ -67,6 +67,7 @@ "@angular/platform-server": "0.0.0-ANGULAR-FW-PEER-DEP", "@angular/service-worker": "0.0.0-ANGULAR-FW-PEER-DEP", "@angular/ssr": "^0.0.0-PLACEHOLDER", + "istanbul-lib-instrument": "^6.0.0", "karma": "^6.4.0", "less": "^4.2.0", "ng-packagr": "0.0.0-NG-PACKAGR-PEER-DEP", @@ -95,6 +96,9 @@ "@angular/ssr": { "optional": true }, + "istanbul-lib-instrument": { + "optional": true + }, "karma": { "optional": true }, diff --git a/packages/angular/build/src/tools/babel/plugins/add-code-coverage.ts b/packages/angular/build/src/tools/babel/plugins/add-code-coverage.ts index efa95870f698..7917c412b15d 100644 --- a/packages/angular/build/src/tools/babel/plugins/add-code-coverage.ts +++ b/packages/angular/build/src/tools/babel/plugins/add-code-coverage.ts @@ -7,7 +7,7 @@ */ import { NodePath, PluginObj, types } from '@babel/core'; -import { Visitor, programVisitor } from 'istanbul-lib-instrument'; +import type { Visitor } from 'istanbul-lib-instrument'; import assert from 'node:assert'; /** @@ -15,7 +15,9 @@ import assert from 'node:assert'; * * @returns A babel plugin object instance. */ -export default function (): PluginObj { +export default function ( + programVisitor: typeof import('istanbul-lib-instrument').programVisitor, +): PluginObj { const visitors = new WeakMap(); return { diff --git a/packages/angular/build/src/tools/esbuild/javascript-transformer-worker.ts b/packages/angular/build/src/tools/esbuild/javascript-transformer-worker.ts index 7d86009b773f..dfb7cfb2087f 100644 --- a/packages/angular/build/src/tools/esbuild/javascript-transformer-worker.ts +++ b/packages/angular/build/src/tools/esbuild/javascript-transformer-worker.ts @@ -8,6 +8,7 @@ import { type PluginItem, transformAsync } from '@babel/core'; import fs from 'node:fs'; +import { createRequire } from 'node:module'; import path from 'node:path'; import Piscina from 'piscina'; @@ -66,8 +67,31 @@ async function transformWithBabel( const plugins: PluginItem[] = []; if (options.instrumentForCoverage) { - const { default: coveragePlugin } = await import('../babel/plugins/add-code-coverage.js'); - plugins.push(coveragePlugin); + try { + let resolvedPath = 'istanbul-lib-instrument'; + try { + const requireFn = createRequire(filename); + resolvedPath = requireFn.resolve('istanbul-lib-instrument'); + } catch { + // Fallback to pool worker import traversal + } + + const istanbul = await import(resolvedPath); + const programVisitor = istanbul.programVisitor ?? istanbul.default?.programVisitor; + + if (!programVisitor) { + throw new Error('programVisitor is not available in istanbul-lib-instrument.'); + } + + const { default: coveragePluginFactory } = + await import('../babel/plugins/add-code-coverage.js'); + plugins.push(coveragePluginFactory(programVisitor)); + } catch (error) { + throw new Error( + `The 'istanbul-lib-instrument' package is required for code coverage but was not found. Please install the package.`, + { cause: error }, + ); + } } if (shouldLink) { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index fcffea3de988..0df0d73ff002 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -319,6 +319,9 @@ importers: browser-sync: specifier: 3.0.4 version: 3.0.4(bufferutil@4.1.0)(utf-8-validate@6.0.6) + istanbul-lib-instrument: + specifier: 6.0.3 + version: 6.0.3 jsdom: specifier: 29.0.1 version: 29.0.1 @@ -367,9 +370,6 @@ importers: https-proxy-agent: specifier: 8.0.0 version: 8.0.0 - istanbul-lib-instrument: - specifier: 6.0.3 - version: 6.0.3 jsonc-parser: specifier: 3.3.1 version: 3.3.1 @@ -419,6 +419,9 @@ importers: '@angular/ssr': specifier: workspace:* version: link:../ssr + istanbul-lib-instrument: + specifier: 6.0.3 + version: 6.0.3 jsdom: specifier: 29.0.1 version: 29.0.1 From 43505066e2350ca875051bb0f9991da8003c9247 Mon Sep 17 00:00:00 2001 From: Charles Lyding <19598772+clydin@users.noreply.github.com> Date: Fri, 3 Apr 2026 09:56:31 -0400 Subject: [PATCH 210/226] feat(@schematics/angular): add migration to add istanbul-lib-instrument Add a new schematic migration to automatically add istanbul-lib-instrument to devDependencies for projects that use Karma. Covered builders: - @angular-devkit/build-angular:karma - @angular/build:karma - @angular/build:unit-test (when runner is 'karma') --- .../add-istanbul-instrumenter/migration.ts | 52 +++++++++ .../migration_spec.ts | 103 ++++++++++++++++++ .../migrations/migration-collection.json | 5 + .../utility/latest-versions/package.json | 1 + 4 files changed, 161 insertions(+) create mode 100644 packages/schematics/angular/migrations/add-istanbul-instrumenter/migration.ts create mode 100644 packages/schematics/angular/migrations/add-istanbul-instrumenter/migration_spec.ts diff --git a/packages/schematics/angular/migrations/add-istanbul-instrumenter/migration.ts b/packages/schematics/angular/migrations/add-istanbul-instrumenter/migration.ts new file mode 100644 index 000000000000..d3ccb16facd3 --- /dev/null +++ b/packages/schematics/angular/migrations/add-istanbul-instrumenter/migration.ts @@ -0,0 +1,52 @@ +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.dev/license + */ + +import { Rule } from '@angular-devkit/schematics'; +import { DependencyType, ExistingBehavior, addDependency } from '../../utility/dependency'; +import { latestVersions } from '../../utility/latest-versions'; +import { allTargetOptions, getWorkspace } from '../../utility/workspace'; +import { Builders } from '../../utility/workspace-models'; + +export default function (): Rule { + return async (tree) => { + const workspace = await getWorkspace(tree); + let needInstrumenter = false; + + for (const [, project] of workspace.projects) { + for (const [, target] of project.targets) { + if (target.builder === Builders.Karma || target.builder === Builders.BuildKarma) { + needInstrumenter = true; + break; + } + + if (target.builder === Builders.BuildUnitTest) { + for (const [, options] of allTargetOptions(target)) { + if (options['runner'] === 'karma') { + needInstrumenter = true; + break; + } + } + } + + if (needInstrumenter) { + break; + } + } + if (needInstrumenter) { + break; + } + } + + if (needInstrumenter) { + return addDependency('istanbul-lib-instrument', latestVersions['istanbul-lib-instrument'], { + type: DependencyType.Dev, + existing: ExistingBehavior.Skip, + }); + } + }; +} diff --git a/packages/schematics/angular/migrations/add-istanbul-instrumenter/migration_spec.ts b/packages/schematics/angular/migrations/add-istanbul-instrumenter/migration_spec.ts new file mode 100644 index 000000000000..e9d855b29b9f --- /dev/null +++ b/packages/schematics/angular/migrations/add-istanbul-instrumenter/migration_spec.ts @@ -0,0 +1,103 @@ +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.dev/license + */ + +/* eslint-disable @typescript-eslint/no-explicit-any */ + +import { EmptyTree } from '@angular-devkit/schematics'; +import { SchematicTestRunner, UnitTestTree } from '@angular-devkit/schematics/testing'; + +describe('Migration to add istanbul-lib-instrument', () => { + const schematicRunner = new SchematicTestRunner( + 'migrations', + require.resolve('../migration-collection.json'), + ); + + let tree: UnitTestTree; + beforeEach(() => { + tree = new UnitTestTree(new EmptyTree()); + tree.create( + '/package.json', + JSON.stringify({ + devDependencies: {}, + }), + ); + }); + + function createWorkspace(builder: string, options?: any, configurations?: any) { + tree.create( + '/angular.json', + JSON.stringify({ + version: 1, + projects: { + app: { + root: '', + targets: { + test: { + builder, + options, + configurations, + }, + }, + }, + }, + }), + ); + } + + async function expectDependency(defined: boolean) { + const newTree = await schematicRunner.runSchematic('add-istanbul-instrumenter', {}, tree); + const { devDependencies } = newTree.readJson('/package.json') as any; + if (defined) { + expect(devDependencies['istanbul-lib-instrument']).toBeDefined(); + } else { + expect(devDependencies['istanbul-lib-instrument']).toBeUndefined(); + } + } + + it('should add istanbul-lib-instrument for @angular-devkit/build-angular:karma', async () => { + createWorkspace('@angular-devkit/build-angular:karma'); + + await expectDependency(true); + }); + + it('should add istanbul-lib-instrument for @angular/build:karma', async () => { + createWorkspace('@angular/build:karma'); + + await expectDependency(true); + }); + + it('should add istanbul-lib-instrument for @angular/build:unit-test with runner: karma', async () => { + createWorkspace('@angular/build:unit-test', { runner: 'karma' }); + + await expectDependency(true); + }); + + it('should add istanbul-lib-instrument if runner: karma is in configuration', async () => { + createWorkspace('@angular/build:unit-test', undefined, { ci: { runner: 'karma' } }); + + await expectDependency(true); + }); + + it('should NOT add istanbul-lib-instrument for @angular/build:unit-test with runner: vitest', async () => { + createWorkspace('@angular/build:unit-test', { runner: 'vitest' }); + + await expectDependency(false); + }); + + it('should NOT add istanbul-lib-instrument for @angular/build:unit-test with no runner specified (default vitest)', async () => { + createWorkspace('@angular/build:unit-test', {}); + + await expectDependency(false); + }); + + it('should NOT add istanbul-lib-instrument if no karma builder is used', async () => { + createWorkspace('@angular-devkit/build-angular:browser'); + + await expectDependency(false); + }); +}); diff --git a/packages/schematics/angular/migrations/migration-collection.json b/packages/schematics/angular/migrations/migration-collection.json index 3745792eb6cc..209f8519ef6f 100644 --- a/packages/schematics/angular/migrations/migration-collection.json +++ b/packages/schematics/angular/migrations/migration-collection.json @@ -1,6 +1,11 @@ { "encapsulation": false, "schematics": { + "add-istanbul-instrumenter": { + "version": "22.0.0", + "factory": "./add-istanbul-instrumenter/migration", + "description": "Add istanbul-lib-instrument to devDependencies if Karma unit testing is used." + }, "use-application-builder": { "version": "22.0.0", "factory": "./use-application-builder/migration", diff --git a/packages/schematics/angular/utility/latest-versions/package.json b/packages/schematics/angular/utility/latest-versions/package.json index a696fc09273c..c1b0dd2cd519 100644 --- a/packages/schematics/angular/utility/latest-versions/package.json +++ b/packages/schematics/angular/utility/latest-versions/package.json @@ -8,6 +8,7 @@ "@types/node": "^20.17.19", "browser-sync": "^3.0.0", "express": "^5.1.0", + "istanbul-lib-instrument": "^6.0.3", "jasmine-core": "~6.1.0", "jasmine-spec-reporter": "~7.0.0", "karma-chrome-launcher": "~3.2.0", From 422c8183ea3596660475491b9630df34276c468e Mon Sep 17 00:00:00 2001 From: Charles Lyding <19598772+clydin@users.noreply.github.com> Date: Thu, 2 Apr 2026 10:18:17 -0400 Subject: [PATCH 211/226] fix(@angular/cli): handle missing package manager during analytics initialization Wrap getVersion() call in try-catch to prevent a crash during analytics setup when the package manager is not available. --- .../cli/src/command-builder/command-module.ts | 21 +++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/packages/angular/cli/src/command-builder/command-module.ts b/packages/angular/cli/src/command-builder/command-module.ts index e5cc6f70473a..b0d15d70d0b2 100644 --- a/packages/angular/cli/src/command-builder/command-module.ts +++ b/packages/angular/cli/src/command-builder/command-module.ts @@ -153,12 +153,21 @@ export abstract class CommandModule implements CommandModuleI ['version', 'update', 'analytics'].includes(this.commandName), ); - return userId - ? new AnalyticsCollector(this.context.logger, userId, { - name: this.context.packageManager.name, - version: await this.context.packageManager.getVersion(), - }) - : undefined; + if (!userId) { + return undefined; + } + + let version: string | undefined; + try { + version = await this.context.packageManager.getVersion(); + } catch { + // Ignore errors if the package manager is not available. + } + + return new AnalyticsCollector(this.context.logger, userId, { + name: this.context.packageManager.name, + version, + }); } /** From be60a63b7b8fdea26bfd3329ce54d321334db2d2 Mon Sep 17 00:00:00 2001 From: Charles Lyding <19598772+clydin@users.noreply.github.com> Date: Fri, 3 Apr 2026 17:13:41 -0400 Subject: [PATCH 212/226] feat(@schematics/angular): add migrate-karma-to-vitest update migration Migrate projects using the Karma unit-test builder to the new @angular/build:unit-test builder with Vitest. This migration automatically updates target builders, translates builder options (such as coverage and browsers format), moves custom build options to dedicated configurations to prevent loss of custom settings, cleans up default configuration files, and installs required Vitest runner packages. --- .../migrate-karma-to-vitest/constants.ts | 44 +++ .../karma-processor.ts | 167 ++++++++ .../migrate-karma-to-vitest/migration.ts | 294 ++++++++++++++ .../migrate-karma-to-vitest/migration_spec.ts | 363 ++++++++++++++++++ .../migrations/migration-collection.json | 6 + .../utility/latest-versions/package.json | 1 + 6 files changed, 875 insertions(+) create mode 100644 packages/schematics/angular/migrations/migrate-karma-to-vitest/constants.ts create mode 100644 packages/schematics/angular/migrations/migrate-karma-to-vitest/karma-processor.ts create mode 100644 packages/schematics/angular/migrations/migrate-karma-to-vitest/migration.ts create mode 100644 packages/schematics/angular/migrations/migrate-karma-to-vitest/migration_spec.ts diff --git a/packages/schematics/angular/migrations/migrate-karma-to-vitest/constants.ts b/packages/schematics/angular/migrations/migrate-karma-to-vitest/constants.ts new file mode 100644 index 000000000000..dbf38fcbba7c --- /dev/null +++ b/packages/schematics/angular/migrations/migrate-karma-to-vitest/constants.ts @@ -0,0 +1,44 @@ +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.dev/license + */ + +export const SUPPORTED_REPORTERS = new Set([ + 'default', + 'verbose', + 'dots', + 'json', + 'junit', + 'tap', + 'tap-flat', + 'html', +]); + +export const SUPPORTED_COVERAGE_REPORTERS = new Set([ + 'html', + 'lcov', + 'lcovonly', + 'text', + 'text-summary', + 'cobertura', + 'json', + 'json-summary', +]); + +export const BUILD_OPTIONS_KEYS = [ + 'assets', + 'styles', + 'scripts', + 'polyfills', + 'inlineStyleLanguage', + 'stylePreprocessorOptions', + 'externalDependencies', + 'loader', + 'define', + 'fileReplacements', + 'webWorkerTsConfig', + 'aot', +]; diff --git a/packages/schematics/angular/migrations/migrate-karma-to-vitest/karma-processor.ts b/packages/schematics/angular/migrations/migrate-karma-to-vitest/karma-processor.ts new file mode 100644 index 000000000000..9fc773470c52 --- /dev/null +++ b/packages/schematics/angular/migrations/migrate-karma-to-vitest/karma-processor.ts @@ -0,0 +1,167 @@ +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.dev/license + */ + +import type { json } from '@angular-devkit/core'; +import { SchematicContext, Tree } from '@angular-devkit/schematics'; +import { KarmaConfigAnalysis, analyzeKarmaConfig } from '../karma/karma-config-analyzer'; +import { compareKarmaConfigToDefault, hasDifferences } from '../karma/karma-config-comparer'; +import { SUPPORTED_COVERAGE_REPORTERS, SUPPORTED_REPORTERS } from './constants'; + +function extractReporters( + analysis: KarmaConfigAnalysis, + options: Record, + projectName: string, + context: SchematicContext, +): void { + const reporters = analysis.settings.get('reporters'); + if (Array.isArray(reporters)) { + const mappedReporters: string[] = []; + for (const r of reporters) { + if (typeof r === 'string') { + if (r === 'progress') { + mappedReporters.push('default'); + } else if (r === 'kjhtml') { + context.logger.warn( + `Project "${projectName}" uses the "kjhtml" reporter. ` + + `This has not been automatically mapped. ` + + `For an interactive test UI in Vitest, consider setting the "ui" option to true in your test target options ` + + `and installing "@vitest/ui".`, + ); + } else if (SUPPORTED_REPORTERS.has(r)) { + mappedReporters.push(r); + } else { + context.logger.warn( + `Project "${projectName}" uses a custom Karma reporter "${r}". ` + + `This reporter cannot be automatically mapped to Vitest. ` + + `Please check the Vitest documentation for equivalent reporters.`, + ); + } + } else { + context.logger.warn( + `Project "${projectName}" has a non-string reporter in Karma config. ` + + `This cannot be automatically mapped to Vitest.`, + ); + } + } + if (mappedReporters.length > 0) { + options['reporters'] = [...new Set(mappedReporters)]; + } + } +} + +function extractCoverageSettings( + analysis: KarmaConfigAnalysis, + options: Record, + projectName: string, + context: SchematicContext, +): void { + const coverageReporter = analysis.settings.get('coverageReporter'); + if (typeof coverageReporter !== 'object' || coverageReporter === null) { + return; + } + + // Extract coverage reporters + const covReporters = (coverageReporter as Record)['reporters']; + if (Array.isArray(covReporters)) { + const mappedCovReporters: string[] = []; + for (const r of covReporters) { + let type: string | undefined; + if (typeof r === 'object' && r !== null && 'type' in r) { + if (typeof r['type'] === 'string') { + type = r['type']; + } + } else if (typeof r === 'string') { + type = r; + } + + if (type) { + if (SUPPORTED_COVERAGE_REPORTERS.has(type)) { + mappedCovReporters.push(type); + } else { + context.logger.warn( + `Project "${projectName}" uses a custom coverage reporter "${type}". ` + + `This reporter cannot be automatically mapped to Vitest. ` + + `Please check the Vitest documentation for equivalent coverage reporters.`, + ); + } + } + } + if (mappedCovReporters.length > 0) { + options['coverageReporters'] = [...new Set(mappedCovReporters)]; + } + } + + // Extract coverage thresholds + const check = (coverageReporter as Record)['check']; + if (typeof check === 'object' && check !== null) { + const global = (check as Record)['global']; + if (typeof global === 'object' && global !== null) { + const thresholds: Record = {}; + const keys = ['statements', 'branches', 'functions', 'lines']; + for (const key of keys) { + const value = (global as Record)[key]; + if (typeof value === 'number') { + thresholds[key] = value; + } + } + if (Object.keys(thresholds).length > 0) { + options['coverageThresholds'] = { + ...thresholds, + perFile: false, + }; + } + } + } +} + +export async function processKarmaConfig( + karmaConfig: string, + options: Record, + projectName: string, + context: SchematicContext, + tree: Tree, + removableKarmaConfigs: Map, + needDevkitPlugin: boolean, + manualMigrationFiles: string[], +): Promise { + if (tree.exists(karmaConfig)) { + const content = tree.readText(karmaConfig); + const analysis = analyzeKarmaConfig(content); + + extractReporters(analysis, options, projectName, context); + extractCoverageSettings(analysis, options, projectName, context); + + let isRemovable = removableKarmaConfigs.get(karmaConfig); + if (isRemovable === undefined) { + if (analysis.hasUnsupportedValues) { + isRemovable = false; + } else { + const diff = await compareKarmaConfigToDefault( + analysis, + projectName, + karmaConfig, + needDevkitPlugin, + ); + isRemovable = !hasDifferences(diff) && diff.isReliable; + } + removableKarmaConfigs.set(karmaConfig, isRemovable); + } + + if (isRemovable) { + tree.delete(karmaConfig); + } else { + context.logger.warn( + `Project "${projectName}" uses a custom Karma configuration file "${karmaConfig}". ` + + `Tests have been migrated to use Vitest, but you may need to manually migrate custom settings ` + + `from this Karma config to a Vitest config (e.g. vitest.config.ts).`, + ); + manualMigrationFiles.push(karmaConfig); + } + } + delete options['karmaConfig']; +} diff --git a/packages/schematics/angular/migrations/migrate-karma-to-vitest/migration.ts b/packages/schematics/angular/migrations/migrate-karma-to-vitest/migration.ts new file mode 100644 index 000000000000..dbf169ec22e5 --- /dev/null +++ b/packages/schematics/angular/migrations/migrate-karma-to-vitest/migration.ts @@ -0,0 +1,294 @@ +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.dev/license + */ + +import type { json } from '@angular-devkit/core'; +import { Rule, SchematicContext, Tree, chain } from '@angular-devkit/schematics'; +import { isDeepStrictEqual } from 'util'; +import { DependencyType, ExistingBehavior, addDependency } from '../../utility/dependency'; +import { latestVersions } from '../../utility/latest-versions'; +import { TargetDefinition, allTargetOptions, updateWorkspace } from '../../utility/workspace'; +import { Builders } from '../../utility/workspace-models'; +import { BUILD_OPTIONS_KEYS } from './constants'; +import { processKarmaConfig } from './karma-processor'; + +async function processTestTargetOptions( + testTarget: TargetDefinition, + projectName: string, + context: SchematicContext, + tree: Tree, + removableKarmaConfigs: Map, + customBuildOptions: Record>, + needDevkitPlugin: boolean, + manualMigrationFiles: string[], +): Promise { + let needsCoverage = false; + for (const [configName, options] of allTargetOptions(testTarget, false)) { + const configKey = configName || ''; + if (!customBuildOptions[configKey]) { + // Match Karma behavior where AOT was disabled by default + customBuildOptions[configKey] = { + aot: false, + optimization: false, + extractLicenses: false, + }; + } + + // Collect custom build options + for (const key of BUILD_OPTIONS_KEYS) { + if (options[key] !== undefined) { + customBuildOptions[configKey][key] = options[key]; + delete options[key]; + } + } + + // Map Karma options to Unit-Test options + if (options['codeCoverage'] !== undefined) { + options['coverage'] = options['codeCoverage']; + delete options['codeCoverage']; + } + + if (options['codeCoverageExclude'] !== undefined) { + options['coverageExclude'] = options['codeCoverageExclude']; + delete options['codeCoverageExclude']; + } + + if (options['coverage'] === true || options['coverageExclude'] !== undefined) { + needsCoverage = true; + } + + if (options['sourceMap'] !== undefined) { + context.logger.info( + `Project "${projectName}" has "sourceMap" set for tests. ` + + `In unit-test builder with Vitest, source maps are always enabled. The option has been removed.`, + ); + delete options['sourceMap']; + } + + // Convert browser list to array format if it is a comma-separated string + const browsers = options['browsers']; + if (typeof browsers === 'string') { + options['browsers'] = browsers.split(',').map((b) => b.trim()); + } else if (browsers === false) { + options['browsers'] = []; + } + + const updatedBrowsers = options['browsers']; + if (Array.isArray(updatedBrowsers) && updatedBrowsers.length > 0) { + context.logger.info( + `Project "${projectName}" has browsers configured for tests. ` + + `To run tests in a browser with Vitest, you will need to install either ` + + `"@vitest/browser-playwright" or "@vitest/browser-webdriverio" depending on your preference.`, + ); + } + + // Check if the karma configuration file can be safely removed and extract settings + const karmaConfig = options['karmaConfig']; + if (typeof karmaConfig === 'string') { + await processKarmaConfig( + karmaConfig, + options, + projectName, + context, + tree, + removableKarmaConfigs, + needDevkitPlugin, + manualMigrationFiles, + ); + } + + // Map the main entry file to the setupFiles of the unit-test builder + const mainFile = options['main']; + if (typeof mainFile === 'string') { + options['setupFiles'] = [mainFile]; + + context.logger.info( + `Project "${projectName}" uses a "main" entry file for tests: "${mainFile}". ` + + `This has been mapped to the unit-test builder "setupFiles" array. ` + + `Please ensure you remove any TestBed.initTestEnvironment calls from this file ` + + `as the builder now handles test environment initialization automatically.`, + ); + } + delete options['main']; + } + + return needsCoverage; +} + +function updateProjects(tree: Tree, context: SchematicContext): Rule { + return updateWorkspace(async (workspace) => { + let needsCoverage = false; + const removableKarmaConfigs = new Map(); + const migratedProjects: string[] = []; + const skippedNonApplications: string[] = []; + const skippedMissingAppBuilder: string[] = []; + const manualMigrationFiles: string[] = []; + + for (const [projectName, project] of workspace.projects) { + // Restrict to application types for now + if (project.extensions.projectType !== 'application') { + skippedNonApplications.push(projectName); + continue; + } + + // Check if build target uses the new application builder + const buildTarget = project.targets.get('build'); + if (!buildTarget || buildTarget.builder !== '@angular/build:application') { + context.logger.info( + `Project "${projectName}" cannot be migrated to Vitest yet. ` + + `The project must first be migrated to use the "@angular/build:application" builder.`, + ); + skippedMissingAppBuilder.push(projectName); + continue; + } + + // Find the test target to migrate + const testTarget = project.targets.get('test'); + if (!testTarget) { + continue; + } + + let isKarma = false; + let needDevkitPlugin = false; + // Check if target uses Karma builders + switch (testTarget.builder) { + case Builders.Karma: + isKarma = true; + needDevkitPlugin = true; + break; + case Builders.BuildKarma: + isKarma = true; + break; + } + + if (!isKarma) { + continue; + } + + // Store custom build options to move to a new build configuration if needed + const customBuildOptions: Record> = {}; + + const projectNeedsCoverage = await processTestTargetOptions( + testTarget, + projectName, + context, + tree, + removableKarmaConfigs, + customBuildOptions, + needDevkitPlugin, + manualMigrationFiles, + ); + + if (projectNeedsCoverage) { + needsCoverage = true; + } + + // If we have custom build options, create testing configurations + const baseOptions = buildTarget.options || {}; + + for (const [configKey, configOptions] of Object.entries(customBuildOptions)) { + const finalConfig: Record = {}; + + // Omit options that already have the same value in the base build options. + // Using isDeepStrictEqual for a deep comparison of arrays and objects. + for (const [key, value] of Object.entries(configOptions)) { + if (!isDeepStrictEqual(value, baseOptions[key])) { + finalConfig[key] = value; + } + } + + if (Object.keys(finalConfig).length > 0) { + buildTarget.configurations ??= {}; + const configurations = buildTarget.configurations; + + let configName = configKey ? `testing-${configKey}` : 'testing'; + if (configurations[configName]) { + let counter = 1; + while (configurations[`${configName}-${counter}`]) { + counter++; + } + configName = `${configName}-${counter}`; + } + + configurations[configName] = finalConfig; + + if (configKey === '') { + testTarget.options ??= {}; + testTarget.options['buildTarget'] = `:build:${configName}`; + } else { + testTarget.configurations ??= {}; + testTarget.configurations[configKey] ??= {}; + testTarget.configurations[configKey]['buildTarget'] = `:build:${configName}`; + } + } + } + + // Update builder + testTarget.builder = '@angular/build:unit-test'; + testTarget.options ??= {}; + testTarget.options['runner'] = 'vitest'; + + migratedProjects.push(projectName); + } + + // Log summary + context.logger.info('\n--- Karma to Vitest Migration Summary ---'); + context.logger.info(`Projects migrated: ${migratedProjects.length}`); + if (migratedProjects.length > 0) { + context.logger.info(` - ${migratedProjects.join(', ')}`); + } + context.logger.info(`Projects skipped (non-applications): ${skippedNonApplications.length}`); + if (skippedNonApplications.length > 0) { + context.logger.info(` - ${skippedNonApplications.join(', ')}`); + } + context.logger.info( + `Projects skipped (missing application builder): ${skippedMissingAppBuilder.length}`, + ); + if (skippedMissingAppBuilder.length > 0) { + context.logger.info(` - ${skippedMissingAppBuilder.join(', ')}`); + } + + const uniqueManualFiles = [...new Set(manualMigrationFiles)]; + if (uniqueManualFiles.length > 0) { + context.logger.warn(`\nThe following Karma configuration files require manual migration:`); + for (const file of uniqueManualFiles) { + context.logger.warn(` - ${file}`); + } + } + if (migratedProjects.length > 0) { + context.logger.info( + `\nNote: To refactor your test files from Jasmine to Vitest, consider running the following command:` + + `\n ng g @schematics/angular:refactor-jasmine-vitest `, + ); + } + context.logger.info('-----------------------------------------\n'); + + if (migratedProjects.length > 0) { + const rules = [ + addDependency('vitest', latestVersions['vitest'], { + type: DependencyType.Dev, + existing: ExistingBehavior.Skip, + }), + ]; + + if (needsCoverage) { + rules.push( + addDependency('@vitest/coverage-v8', latestVersions['@vitest/coverage-v8'], { + type: DependencyType.Dev, + existing: ExistingBehavior.Skip, + }), + ); + } + + return chain(rules); + } + }); +} + +export default function (): Rule { + return updateProjects; +} diff --git a/packages/schematics/angular/migrations/migrate-karma-to-vitest/migration_spec.ts b/packages/schematics/angular/migrations/migrate-karma-to-vitest/migration_spec.ts new file mode 100644 index 000000000000..e206002ab665 --- /dev/null +++ b/packages/schematics/angular/migrations/migrate-karma-to-vitest/migration_spec.ts @@ -0,0 +1,363 @@ +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.dev/license + */ + +/* eslint-disable @typescript-eslint/no-explicit-any */ + +import { EmptyTree } from '@angular-devkit/schematics'; +import { SchematicTestRunner, UnitTestTree } from '@angular-devkit/schematics/testing'; +import { latestVersions } from '../../utility/latest-versions'; + +describe('Migration from Karma to Vitest unit-test builder', () => { + const schematicRunner = new SchematicTestRunner( + 'migrations', + require.resolve('../migration-collection.json'), + ); + + let tree: UnitTestTree; + beforeEach(() => { + tree = new UnitTestTree(new EmptyTree()); + tree.create( + '/package.json', + JSON.stringify({ + devDependencies: { + '@angular/build': latestVersions.AngularBuild, + }, + }), + ); + tree.create( + '/angular.json', + JSON.stringify({ + version: 1, + projects: { + app: { + root: '', + sourceRoot: 'src', + projectType: 'application', + targets: { + build: { + builder: '@angular/build:application', + options: { + tsConfig: 'tsconfig.app.json', + }, + }, + test: { + builder: '@angular/build:karma', + options: { + tsConfig: 'tsconfig.spec.json', + karmaConfig: 'karma.conf.js', + }, + }, + }, + }, + }, + }), + ); + }); + + it('should migrate standard karma builder to unit-test builder', async () => { + const newTree = await schematicRunner.runSchematic('migrate-karma-to-vitest', {}, tree); + const { projects } = newTree.readJson('/angular.json') as any; + + expect(projects.app.targets.test.builder).toBe('@angular/build:unit-test'); + expect(projects.app.targets.test.options.runner).toBe('vitest'); + expect(projects.app.targets.test.options.karmaConfig).toBeUndefined(); + }); + + it('should map codeCoverage to coverage', async () => { + const { projects } = tree.readJson('/angular.json') as any; + projects.app.targets.test.options.codeCoverage = true; + tree.overwrite('/angular.json', JSON.stringify({ version: 1, projects })); + + const newTree = await schematicRunner.runSchematic('migrate-karma-to-vitest', {}, tree); + const { projects: newProjects } = newTree.readJson('/angular.json') as any; + + expect(newProjects.app.targets.test.options.coverage).toBeTrue(); + expect(newProjects.app.targets.test.options.codeCoverage).toBeUndefined(); + }); + + it('should map browsers string to array', async () => { + const { projects } = tree.readJson('/angular.json') as any; + projects.app.targets.test.options.browsers = 'Chrome,Firefox'; + tree.overwrite('/angular.json', JSON.stringify({ version: 1, projects })); + + const newTree = await schematicRunner.runSchematic('migrate-karma-to-vitest', {}, tree); + const { projects: newProjects } = newTree.readJson('/angular.json') as any; + + expect(newProjects.app.targets.test.options.browsers).toEqual(['Chrome', 'Firefox']); + }); + + it('should move custom build options to testing configuration', async () => { + const { projects } = tree.readJson('/angular.json') as any; + projects.app.targets.test.options.assets = ['src/test.assets']; + tree.overwrite('/angular.json', JSON.stringify({ version: 1, projects })); + + const newTree = await schematicRunner.runSchematic('migrate-karma-to-vitest', {}, tree); + const { projects: newProjects } = newTree.readJson('/angular.json') as any; + + expect(newProjects.app.targets.build.configurations.testing.assets).toEqual([ + 'src/test.assets', + ]); + expect(newProjects.app.targets.build.configurations.testing.aot).toBeFalse(); + expect(newProjects.app.targets.build.configurations.testing.optimization).toBeFalse(); + expect(newProjects.app.targets.build.configurations.testing.extractLicenses).toBeFalse(); + expect(newProjects.app.targets.test.options.assets).toBeUndefined(); + expect(newProjects.app.targets.test.options.buildTarget).toBe(':build:testing'); + }); + + it('should move custom build options per configuration to testing configurations', async () => { + const { projects } = tree.readJson('/angular.json') as any; + projects.app.targets.test.configurations = { + ci: { + assets: ['src/ci.assets'], + }, + }; + tree.overwrite('/angular.json', JSON.stringify({ version: 1, projects })); + + const newTree = await schematicRunner.runSchematic('migrate-karma-to-vitest', {}, tree); + const { projects: newProjects } = newTree.readJson('/angular.json') as any; + + expect(newProjects.app.targets.build.configurations['testing-ci'].assets).toEqual([ + 'src/ci.assets', + ]); + expect(newProjects.app.targets.test.configurations.ci.buildTarget).toBe(':build:testing-ci'); + expect(newProjects.app.targets.test.configurations.ci.assets).toBeUndefined(); + }); + + it('should omit testing configuration if options match base build options', async () => { + const { projects } = tree.readJson('/angular.json') as any; + projects.app.targets.build.options.aot = false; + projects.app.targets.build.options.optimization = false; + projects.app.targets.build.options.extractLicenses = false; + tree.overwrite('/angular.json', JSON.stringify({ version: 1, projects })); + + const newTree = await schematicRunner.runSchematic('migrate-karma-to-vitest', {}, tree); + const { projects: newProjects } = newTree.readJson('/angular.json') as any; + + expect(newProjects.app.targets.build.configurations?.testing).toBeUndefined(); + expect(newProjects.app.targets.test.options.buildTarget).toBeUndefined(); + }); + + it('should skip migration for library projects', async () => { + const { projects } = tree.readJson('/angular.json') as any; + projects.app.projectType = 'library'; + tree.overwrite('/angular.json', JSON.stringify({ version: 1, projects })); + + const newTree = await schematicRunner.runSchematic('migrate-karma-to-vitest', {}, tree); + const { projects: newProjects } = newTree.readJson('/angular.json') as any; + + expect(newProjects.app.targets.test.builder).toBe('@angular/build:karma'); + }); + + it('should skip migration if build target is not @angular/build:application', async () => { + const { projects } = tree.readJson('/angular.json') as any; + projects.app.targets.build.builder = '@angular-devkit/build-angular:browser'; + tree.overwrite('/angular.json', JSON.stringify({ version: 1, projects })); + + const newTree = await schematicRunner.runSchematic('migrate-karma-to-vitest', {}, tree); + const { projects: newProjects } = newTree.readJson('/angular.json') as any; + + expect(newProjects.app.targets.test.builder).toBe('@angular/build:karma'); + }); + + it('should map reporters from karma config', async () => { + tree.create( + 'karma.conf.js', + ` +module.exports = function (config) { + config.set({ + reporters: ['progress', 'dots', 'kjhtml', 'custom'], + }); +}; +`, + ); + + const newTree = await schematicRunner.runSchematic('migrate-karma-to-vitest', {}, tree); + const { projects } = newTree.readJson('/angular.json') as any; + + expect(projects.app.targets.test.options.reporters).toEqual(['default', 'dots']); + }); + + it('should map coverage reporters from karma config', async () => { + tree.create( + 'karma.conf.js', + ` +module.exports = function (config) { + config.set({ + coverageReporter: { + reporters: [ + { type: 'html' }, + { type: 'text-summary' }, + 'lcov' + ] + }, + }); +}; +`, + ); + + const newTree = await schematicRunner.runSchematic('migrate-karma-to-vitest', {}, tree); + const { projects } = newTree.readJson('/angular.json') as any; + + expect(projects.app.targets.test.options.coverageReporters).toEqual([ + 'html', + 'text-summary', + 'lcov', + ]); + }); + + it('should map coverage thresholds from karma config', async () => { + tree.create( + 'karma.conf.js', + ` +module.exports = function (config) { + config.set({ + coverageReporter: { + check: { + global: { + statements: 80, + branches: 70, + functions: 60, + lines: 50 + } + } + }, + }); +}; +`, + ); + + const newTree = await schematicRunner.runSchematic('migrate-karma-to-vitest', {}, tree); + const { projects } = newTree.readJson('/angular.json') as any; + + expect(projects.app.targets.test.options.coverageThresholds).toEqual({ + statements: 80, + branches: 70, + functions: 60, + lines: 50, + perFile: false, + }); + }); + + it('should restrict and deduplicate coverage reporters from karma config', async () => { + tree.create( + 'karma.conf.js', + ` +module.exports = function (config) { + config.set({ + coverageReporter: { + reporters: [ + { type: 'html' }, + { type: 'text-summary' }, + { type: 'custom' }, + 'html', + 'lcov' + ] + }, + }); +}; +`, + ); + + const newTree = await schematicRunner.runSchematic('migrate-karma-to-vitest', {}, tree); + const { projects } = newTree.readJson('/angular.json') as any; + + expect(projects.app.targets.test.options.coverageReporters).toEqual([ + 'html', + 'text-summary', + 'lcov', + ]); + }); + + it('should add vitest dependency', async () => { + const newTree = await schematicRunner.runSchematic('migrate-karma-to-vitest', {}, tree); + const { devDependencies } = newTree.readJson('/package.json') as any; + + expect(devDependencies.vitest).toBe(latestVersions['vitest']); + }); + + it('should delete default karma.conf.js', async () => { + const { projects } = tree.readJson('/angular.json') as any; + projects.app.targets.test.builder = '@angular-devkit/build-angular:karma'; + tree.overwrite('/angular.json', JSON.stringify({ version: 1, projects })); + + const DEFAULT_KARMA_CONFIG = ` +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('karma-coverage'), + require('@angular-devkit/build-angular/plugins/karma') + ], + client: { + jasmine: {}, + }, + jasmineHtmlReporter: { + suppressAll: true + }, + coverageReporter: { + dir: require('path').join(__dirname, './coverage/app'), + subdir: '.', + reporters: [ + { type: 'html' }, + { type: 'text-summary' } + ] + }, + reporters: ['progress', 'kjhtml'], + browsers: ['Chrome'], + restartOnFileChange: true + }); +}; +`; + tree.create('karma.conf.js', DEFAULT_KARMA_CONFIG); + + const newTree = await schematicRunner.runSchematic('migrate-karma-to-vitest', {}, tree); + expect(newTree.exists('karma.conf.js')).toBeFalse(); + }); + it('should shift main compilation entry file directly into setupFiles array', async () => { + const { projects } = tree.readJson('/angular.json') as any; + projects.app.targets.test.options.main = 'src/test.ts'; + tree.overwrite('/angular.json', JSON.stringify({ version: 1, projects })); + + const newTree = await schematicRunner.runSchematic('migrate-karma-to-vitest', {}, tree); + const { projects: newProjects } = newTree.readJson('/angular.json') as any; + + expect(newProjects.app.targets.test.options.setupFiles).toEqual(['src/test.ts']); + expect(newProjects.app.targets.test.options.main).toBeUndefined(); + }); + it('should generate unique testing configuration name preventing collision overwrites', async () => { + const { projects } = tree.readJson('/angular.json') as any; + projects.app.targets.build.configurations = { + testing: { assets: [] }, + 'testing-1': { assets: [] }, + }; + projects.app.targets.test.options.assets = ['src/test.assets']; + tree.overwrite('/angular.json', JSON.stringify({ version: 1, projects })); + + const newTree = await schematicRunner.runSchematic('migrate-karma-to-vitest', {}, tree); + const { projects: newProjects } = newTree.readJson('/angular.json') as any; + + expect(newProjects.app.targets.build.configurations['testing-2'].assets).toEqual([ + 'src/test.assets', + ]); + expect(newProjects.app.targets.test.options.buildTarget).toBe(':build:testing-2'); + }); + it('should inject @vitest/coverage-v8 whenever coverage presence is detected', async () => { + const { projects } = tree.readJson('/angular.json') as any; + projects.app.targets.test.options.codeCoverage = true; + tree.overwrite('/angular.json', JSON.stringify({ version: 1, projects })); + + const newTree = await schematicRunner.runSchematic('migrate-karma-to-vitest', {}, tree); + const { devDependencies } = newTree.readJson('/package.json') as any; + + expect(devDependencies['@vitest/coverage-v8']).toBe(latestVersions['@vitest/coverage-v8']); + }); +}); diff --git a/packages/schematics/angular/migrations/migration-collection.json b/packages/schematics/angular/migrations/migration-collection.json index 209f8519ef6f..fd5dc71aea15 100644 --- a/packages/schematics/angular/migrations/migration-collection.json +++ b/packages/schematics/angular/migrations/migration-collection.json @@ -19,6 +19,12 @@ "factory": "./karma/migration", "description": "Remove any karma configuration files that only contain the default content. The default configuration is automatically available without a specific project file." }, + "migrate-karma-to-vitest": { + "version": "22.0.0", + "factory": "./migrate-karma-to-vitest/migration", + "description": "Migrate projects using legacy Karma unit-test builder to the new unit-test builder with Vitest.", + "optional": true + }, "update-workspace-config": { "version": "22.0.0", "factory": "./update-workspace-config/migration", diff --git a/packages/schematics/angular/utility/latest-versions/package.json b/packages/schematics/angular/utility/latest-versions/package.json index c1b0dd2cd519..b0846597edcc 100644 --- a/packages/schematics/angular/utility/latest-versions/package.json +++ b/packages/schematics/angular/utility/latest-versions/package.json @@ -26,6 +26,7 @@ "tslib": "^2.3.0", "typescript": "~6.0.2", "vitest": "^4.0.8", + "@vitest/coverage-v8": "^4.0.8", "@vitest/browser-playwright": "^4.0.8", "@vitest/browser-webdriverio": "^4.0.8", "@vitest/browser-preview": "^4.0.8", From 503570508b33c2b345b538384d09c36b17bb4f84 Mon Sep 17 00:00:00 2001 From: Angular Robot Date: Tue, 7 Apr 2026 13:34:14 +0000 Subject: [PATCH 213/226] build: update dependency https-proxy-agent to v9 See associated pull request for more information. --- packages/angular/build/package.json | 2 +- pnpm-lock.yaml | 22 +++++++++++----------- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/packages/angular/build/package.json b/packages/angular/build/package.json index 1541f7bd63cb..b0d4a1197d74 100644 --- a/packages/angular/build/package.json +++ b/packages/angular/build/package.json @@ -28,7 +28,7 @@ "beasties": "0.4.1", "browserslist": "^4.26.0", "esbuild": "0.27.3", - "https-proxy-agent": "8.0.0", + "https-proxy-agent": "9.0.0", "jsonc-parser": "3.3.1", "listr2": "10.2.1", "magic-string": "0.30.21", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 0df0d73ff002..1dc589ea1b9a 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -368,8 +368,8 @@ importers: specifier: 0.27.3 version: 0.27.3 https-proxy-agent: - specifier: 8.0.0 - version: 8.0.0 + specifier: 9.0.0 + version: 9.0.0 jsonc-parser: specifier: 3.3.1 version: 3.3.1 @@ -3876,9 +3876,9 @@ packages: resolution: {integrity: sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==} engines: {node: '>= 14'} - agent-base@8.0.0: - resolution: {integrity: sha512-QT8i0hCz6C/KQ+KTAbSNwCHDGdmUJl2tp2ZpNlGSWCfhUNVbYG2WLE3MdZGBAgXPV4GAvjGMxo+C1hroyxmZEg==} - engines: {node: '>= 14'} + agent-base@9.0.0: + resolution: {integrity: sha512-TQf59BsZnytt8GdJKLPfUZ54g/iaUL2OWDSFCCvMOhsHduDQxO8xC4PNeyIkVcA5KwL2phPSv0douC0fgWzmnA==} + engines: {node: '>= 20'} ajv-formats@2.1.1: resolution: {integrity: sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==} @@ -5549,9 +5549,9 @@ packages: resolution: {integrity: sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==} engines: {node: '>= 14'} - https-proxy-agent@8.0.0: - resolution: {integrity: sha512-YYeW+iCnAS3xhvj2dvVoWgsbca3RfQy/IlaNHHOtDmU0jMqPI9euIq3Y9BJETdxk16h9NHHCKqp/KB9nIMStCQ==} - engines: {node: '>= 14'} + https-proxy-agent@9.0.0: + resolution: {integrity: sha512-/MVmHp58WkOypgFhCLk4fzpPcFQvTJ/e6LBI7irpIO2HfxUbpmYoHF+KzipzJpxxzJu7aJNWQ0xojJ/dzV2G5g==} + engines: {node: '>= 20'} husky@9.1.7: resolution: {integrity: sha512-5gs5ytaNjBrh5Ow3zrvdUUY+0VxIuWVL4i9irt6friV+BqdCfmV11CQTWMiBYWHbXhco+J1kHfTOUkePhCDvMA==} @@ -11799,7 +11799,7 @@ snapshots: agent-base@7.1.4: {} - agent-base@8.0.0: {} + agent-base@9.0.0: {} ajv-formats@2.1.1: dependencies: @@ -13837,9 +13837,9 @@ snapshots: transitivePeerDependencies: - supports-color - https-proxy-agent@8.0.0: + https-proxy-agent@9.0.0: dependencies: - agent-base: 8.0.0 + agent-base: 9.0.0 debug: 4.4.3(supports-color@10.2.2) transitivePeerDependencies: - supports-color From 829bdc61dd77231bb13f01efd052811661fe4f48 Mon Sep 17 00:00:00 2001 From: Charles Lyding <19598772+clydin@users.noreply.github.com> Date: Wed, 1 Apr 2026 18:08:39 -0400 Subject: [PATCH 214/226] fix(@angular/build): preserve coverage ignore comments in development When script optimization is disabled, set esbuild `legalComments` to 'inline' to prevent it from moving ignore comments to the end of the file. This ensures that coverage tools (like Istanbul and V8) can find the comments in place and correctly associate them with the code they are supposed to ignore. --- .../angular/build/src/tools/esbuild/application-code-bundle.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/angular/build/src/tools/esbuild/application-code-bundle.ts b/packages/angular/build/src/tools/esbuild/application-code-bundle.ts index c3f542e1bdfb..39e9c3c674e7 100644 --- a/packages/angular/build/src/tools/esbuild/application-code-bundle.ts +++ b/packages/angular/build/src/tools/esbuild/application-code-bundle.ts @@ -626,7 +626,7 @@ function getEsBuildCommonOptions(options: NormalizedApplicationBuildOptions): Bu conditions, resolveExtensions: ['.ts', '.tsx', '.mjs', '.js', '.cjs'], metafile: true, - legalComments: options.extractLicenses ? 'none' : 'eof', + legalComments: options.extractLicenses ? 'none' : (optimizationOptions.scripts ? 'eof' : 'inline'), logLevel: options.verbose && !jsonLogs ? 'debug' : 'silent', minifyIdentifiers: optimizationOptions.scripts && allowMangle, minifySyntax: optimizationOptions.scripts, From eef8d0ebe25d803012e71a8990ba8f5a3754f0a5 Mon Sep 17 00:00:00 2001 From: Charles Lyding <19598772+clydin@users.noreply.github.com> Date: Mon, 30 Mar 2026 18:15:34 -0400 Subject: [PATCH 215/226] test(@angular/build): verify coverage ignore comments are preserved during compilation The underlying Vitest coverage engine depends on specific developer comments like `/* istanbul ignore next */` or `/* v8 ignore next */` being present in the executing code to accurately isolate unmeasured blocks. This commit adds strict behavioral tests to assert that the Angular CLI's in-memory compilation pipeline (via esbuild) properly preserves these structural comments and forwards them reliably to Vitest's coverage processing engine. --- .../behavior/coverage-ignore-comments_spec.ts | 237 ++++++++++++++++++ .../tools/esbuild/application-code-bundle.ts | 6 +- 2 files changed, 242 insertions(+), 1 deletion(-) create mode 100644 packages/angular/build/src/builders/unit-test/tests/behavior/coverage-ignore-comments_spec.ts diff --git a/packages/angular/build/src/builders/unit-test/tests/behavior/coverage-ignore-comments_spec.ts b/packages/angular/build/src/builders/unit-test/tests/behavior/coverage-ignore-comments_spec.ts new file mode 100644 index 000000000000..2c680ac08cf0 --- /dev/null +++ b/packages/angular/build/src/builders/unit-test/tests/behavior/coverage-ignore-comments_spec.ts @@ -0,0 +1,237 @@ +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.dev/license + */ + +import { execute } from '../../index'; +import { + BASE_OPTIONS, + UNIT_TEST_BUILDER_INFO, + describeBuilder, + setupApplicationTarget, +} from '../setup'; + +describeBuilder(execute, UNIT_TEST_BUILDER_INFO, (harness) => { + describe('Behavior: "coverage ignore comments"', () => { + beforeEach(async () => { + setupApplicationTarget(harness, { extractLicenses: false, optimization: false }); + }); + + function getSpecContent(extraTest = '') { + return ` +import { TestBed } from '@angular/core/testing'; +import { AppComponent } from './app.component'; + +describe('AppComponent', () => { + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [AppComponent], + }).compileComponents(); + }); + + it('should create the app', () => { + const fixture = TestBed.createComponent(AppComponent); + const app = fixture.componentInstance; + expect(app).toBeTruthy(); + }); + + it('should render title', async () => { + const fixture = TestBed.createComponent(AppComponent); + await fixture.whenStable(); + const compiled = fixture.nativeElement as HTMLElement; + expect(compiled.querySelector('h1')?.textContent).toContain('hello'); + }); + + ${extraTest} +}); +`; + } + + async function assertNoUncoveredStatements(contextMessage: string) { + const { result } = await harness.executeOnce(); + expect(result?.success).toBeTrue(); + harness.expectFile('coverage/test/coverage-final.json').toExist(); + + const coverageMap = JSON.parse(harness.readFile('coverage/test/coverage-final.json')); + const appComponentPath = Object.keys(coverageMap).find((p) => p.includes('app.component.ts')); + expect(appComponentPath).toBeDefined(); + + const appComponentCoverage = coverageMap[appComponentPath as string]; + + const statementCounts = Object.values(appComponentCoverage.s); + const hasUncoveredStatements = statementCounts.some((count) => count === 0); + expect(hasUncoveredStatements).withContext(contextMessage).toBeFalse(); + } + + for (const type of ['istanbul', 'v8']) { + it(`should respect ${type} ignore next comments when computing coverage`, async () => { + harness.useTarget('test', { + ...BASE_OPTIONS, + coverage: true, + // eslint-disable-next-line @typescript-eslint/no-explicit-any + coverageReporters: ['json'] as any, + }); + + await harness.writeFile( + 'src/app/app.component.ts', + ` + import { Component } from '@angular/core'; + + @Component({ + selector: 'app-root', + template: '

hello

', + standalone: true, + }) + export class AppComponent { + title = 'app'; + + /* ${type} ignore next */ + untestedFunction() { + return false; + } + } + `, + ); + + await harness.writeFile('src/app/app.component.spec.ts', getSpecContent()); + + await assertNoUncoveredStatements( + 'There should be no uncovered statements as the uncalled function was ignored', + ); + }); + + it(`should respect ${type} ignore if comments when computing coverage`, async () => { + harness.useTarget('test', { + ...BASE_OPTIONS, + coverage: true, + // eslint-disable-next-line @typescript-eslint/no-explicit-any + coverageReporters: ['json'] as any, + }); + + await harness.writeFile( + 'src/app/app.component.ts', + ` + import { Component } from '@angular/core'; + + @Component({ + selector: 'app-root', + template: '

hello

', + standalone: true, + }) + export class AppComponent { + checkValue(val: boolean) { + /* ${type} ignore if -- @preserve */ + if (val) { + return true; + } + return false; + } + } + `, + ); + + await harness.writeFile( + 'src/app/app.component.spec.ts', + getSpecContent(` + it('should exercise the function but not the if block', () => { + const fixture = TestBed.createComponent(AppComponent); + const app = fixture.componentInstance; + app.checkValue(false); + }); + `), + ); + + await assertNoUncoveredStatements( + 'There should be no uncovered statements as the uncalled branch was ignored', + ); + }); + + it(`should respect ${type} ignore else comments when computing coverage`, async () => { + harness.useTarget('test', { + ...BASE_OPTIONS, + coverage: true, + // eslint-disable-next-line @typescript-eslint/no-explicit-any + coverageReporters: ['json'] as any, + }); + + await harness.writeFile( + 'src/app/app.component.ts', + ` + import { Component } from '@angular/core'; + + @Component({ + selector: 'app-root', + template: '

hello

', + standalone: true, + }) + export class AppComponent { + checkValue(val: boolean) { + /* ${type} ignore else -- @preserve */ + if (val) { + return true; + } else { + return false; + } + } + } + `, + ); + + await harness.writeFile( + 'src/app/app.component.spec.ts', + getSpecContent(` + it('should exercise the function but not the else block', () => { + const fixture = TestBed.createComponent(AppComponent); + const app = fixture.componentInstance; + app.checkValue(true); + }); + `), + ); + + await assertNoUncoveredStatements( + 'There should be no uncovered statements as the uncalled else branch was ignored', + ); + }); + } + + it('should respect v8 ignore start/stop comments when computing coverage', async () => { + harness.useTarget('test', { + ...BASE_OPTIONS, + coverage: true, + // eslint-disable-next-line @typescript-eslint/no-explicit-any + coverageReporters: ['json'] as any, + }); + + await harness.writeFile( + 'src/app/app.component.ts', + ` + import { Component } from '@angular/core'; + + @Component({ + selector: 'app-root', + template: '

hello

', + standalone: true, + }) + export class AppComponent { + title = 'app'; + + /* v8 ignore start */ + untestedFunction() { + return false; + } + /* v8 ignore stop */ + } + `, + ); + + await harness.writeFile('src/app/app.component.spec.ts', getSpecContent()); + + await assertNoUncoveredStatements( + 'There should be no uncovered statements as the uncalled function was ignored', + ); + }); + }); +}); diff --git a/packages/angular/build/src/tools/esbuild/application-code-bundle.ts b/packages/angular/build/src/tools/esbuild/application-code-bundle.ts index 39e9c3c674e7..d11e1b6fb63c 100644 --- a/packages/angular/build/src/tools/esbuild/application-code-bundle.ts +++ b/packages/angular/build/src/tools/esbuild/application-code-bundle.ts @@ -626,7 +626,11 @@ function getEsBuildCommonOptions(options: NormalizedApplicationBuildOptions): Bu conditions, resolveExtensions: ['.ts', '.tsx', '.mjs', '.js', '.cjs'], metafile: true, - legalComments: options.extractLicenses ? 'none' : (optimizationOptions.scripts ? 'eof' : 'inline'), + legalComments: options.extractLicenses + ? 'none' + : optimizationOptions.scripts + ? 'eof' + : 'inline', logLevel: options.verbose && !jsonLogs ? 'debug' : 'silent', minifyIdentifiers: optimizationOptions.scripts && allowMangle, minifySyntax: optimizationOptions.scripts, From a4666ad9f5cd35d33f8c979e34c04bbb7a431e40 Mon Sep 17 00:00:00 2001 From: Angular Robot Date: Tue, 7 Apr 2026 18:49:16 +0000 Subject: [PATCH 216/226] build: update cross-repo angular dependencies See associated pull request for more information. --- .../assistant-to-the-branch-manager.yml | 2 +- .github/workflows/ci.yml | 52 +-- .github/workflows/dev-infra.yml | 6 +- .github/workflows/perf.yml | 6 +- .github/workflows/pr.yml | 44 +-- MODULE.bazel | 8 +- MODULE.bazel.lock | 7 +- package.json | 28 +- packages/angular/ssr/package.json | 12 +- packages/ngtools/webpack/package.json | 4 +- pnpm-lock.yaml | 302 +++++++++--------- tests/e2e/ng-snapshot/package.json | 32 +- 12 files changed, 255 insertions(+), 248 deletions(-) diff --git a/.github/workflows/assistant-to-the-branch-manager.yml b/.github/workflows/assistant-to-the-branch-manager.yml index efde5bc5d875..b51ed0f34edc 100644 --- a/.github/workflows/assistant-to-the-branch-manager.yml +++ b/.github/workflows/assistant-to-the-branch-manager.yml @@ -17,6 +17,6 @@ jobs: - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 with: persist-credentials: false - - uses: angular/dev-infra/github-actions/branch-manager@616a50d0b747031b7ea052733adf3771fa6cace9 + - uses: angular/dev-infra/github-actions/branch-manager@acb5aee837b1e7324967d8a31c74093a51eccd97 with: angular-robot-key: ${{ secrets.ANGULAR_ROBOT_PRIVATE_KEY }} diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 8bfb5819b802..0023e3d6650f 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -21,9 +21,9 @@ jobs: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@616a50d0b747031b7ea052733adf3771fa6cace9 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@acb5aee837b1e7324967d8a31c74093a51eccd97 - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@616a50d0b747031b7ea052733adf3771fa6cace9 + uses: angular/dev-infra/github-actions/bazel/setup@acb5aee837b1e7324967d8a31c74093a51eccd97 - name: Install node modules run: pnpm install --frozen-lockfile - name: Generate JSON schema types @@ -44,11 +44,11 @@ jobs: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@616a50d0b747031b7ea052733adf3771fa6cace9 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@acb5aee837b1e7324967d8a31c74093a51eccd97 - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@616a50d0b747031b7ea052733adf3771fa6cace9 + uses: angular/dev-infra/github-actions/bazel/setup@acb5aee837b1e7324967d8a31c74093a51eccd97 - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@616a50d0b747031b7ea052733adf3771fa6cace9 + uses: angular/dev-infra/github-actions/bazel/configure-remote@acb5aee837b1e7324967d8a31c74093a51eccd97 with: google_credential: ${{ secrets.RBE_TRUSTED_BUILDS_USER }} - name: Install node modules @@ -61,11 +61,11 @@ jobs: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@616a50d0b747031b7ea052733adf3771fa6cace9 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@acb5aee837b1e7324967d8a31c74093a51eccd97 - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@616a50d0b747031b7ea052733adf3771fa6cace9 + uses: angular/dev-infra/github-actions/bazel/setup@acb5aee837b1e7324967d8a31c74093a51eccd97 - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@616a50d0b747031b7ea052733adf3771fa6cace9 + uses: angular/dev-infra/github-actions/bazel/configure-remote@acb5aee837b1e7324967d8a31c74093a51eccd97 with: google_credential: ${{ secrets.RBE_TRUSTED_BUILDS_USER }} - name: Install node modules @@ -84,13 +84,13 @@ jobs: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@616a50d0b747031b7ea052733adf3771fa6cace9 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@acb5aee837b1e7324967d8a31c74093a51eccd97 - name: Install node modules run: pnpm install --frozen-lockfile - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@616a50d0b747031b7ea052733adf3771fa6cace9 + uses: angular/dev-infra/github-actions/bazel/setup@acb5aee837b1e7324967d8a31c74093a51eccd97 - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@616a50d0b747031b7ea052733adf3771fa6cace9 + uses: angular/dev-infra/github-actions/bazel/configure-remote@acb5aee837b1e7324967d8a31c74093a51eccd97 with: google_credential: ${{ secrets.RBE_TRUSTED_BUILDS_USER }} - name: Run CLI E2E tests @@ -100,11 +100,11 @@ jobs: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@616a50d0b747031b7ea052733adf3771fa6cace9 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@acb5aee837b1e7324967d8a31c74093a51eccd97 - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@616a50d0b747031b7ea052733adf3771fa6cace9 + uses: angular/dev-infra/github-actions/bazel/setup@acb5aee837b1e7324967d8a31c74093a51eccd97 - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@616a50d0b747031b7ea052733adf3771fa6cace9 + uses: angular/dev-infra/github-actions/bazel/configure-remote@acb5aee837b1e7324967d8a31c74093a51eccd97 with: google_credential: ${{ secrets.RBE_TRUSTED_BUILDS_USER }} - name: Install node modules @@ -137,7 +137,7 @@ jobs: runs-on: windows-2025 steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@616a50d0b747031b7ea052733adf3771fa6cace9 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@acb5aee837b1e7324967d8a31c74093a51eccd97 - name: Install node modules run: pnpm install --frozen-lockfile - name: Download built Windows E2E tests @@ -164,13 +164,13 @@ jobs: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@616a50d0b747031b7ea052733adf3771fa6cace9 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@acb5aee837b1e7324967d8a31c74093a51eccd97 - name: Install node modules run: pnpm install --frozen-lockfile - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@616a50d0b747031b7ea052733adf3771fa6cace9 + uses: angular/dev-infra/github-actions/bazel/setup@acb5aee837b1e7324967d8a31c74093a51eccd97 - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@616a50d0b747031b7ea052733adf3771fa6cace9 + uses: angular/dev-infra/github-actions/bazel/configure-remote@acb5aee837b1e7324967d8a31c74093a51eccd97 with: google_credential: ${{ secrets.RBE_TRUSTED_BUILDS_USER }} - name: Run CLI E2E tests @@ -188,13 +188,13 @@ jobs: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@616a50d0b747031b7ea052733adf3771fa6cace9 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@acb5aee837b1e7324967d8a31c74093a51eccd97 - name: Install node modules run: pnpm install --frozen-lockfile - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@616a50d0b747031b7ea052733adf3771fa6cace9 + uses: angular/dev-infra/github-actions/bazel/setup@acb5aee837b1e7324967d8a31c74093a51eccd97 - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@616a50d0b747031b7ea052733adf3771fa6cace9 + uses: angular/dev-infra/github-actions/bazel/configure-remote@acb5aee837b1e7324967d8a31c74093a51eccd97 with: google_credential: ${{ secrets.RBE_TRUSTED_BUILDS_USER }} - name: Run CLI E2E tests @@ -208,13 +208,13 @@ jobs: SAUCE_TUNNEL_IDENTIFIER: angular-cli-${{ github.workflow }}-${{ github.run_number }} steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@616a50d0b747031b7ea052733adf3771fa6cace9 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@acb5aee837b1e7324967d8a31c74093a51eccd97 - name: Install node modules run: pnpm install --frozen-lockfile - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@616a50d0b747031b7ea052733adf3771fa6cace9 + uses: angular/dev-infra/github-actions/bazel/setup@acb5aee837b1e7324967d8a31c74093a51eccd97 - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@616a50d0b747031b7ea052733adf3771fa6cace9 + uses: angular/dev-infra/github-actions/bazel/configure-remote@acb5aee837b1e7324967d8a31c74093a51eccd97 with: google_credential: ${{ secrets.RBE_TRUSTED_BUILDS_USER }} - name: Run E2E Browser tests @@ -244,11 +244,11 @@ jobs: CIRCLE_BRANCH: ${{ github.ref_name }} steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@616a50d0b747031b7ea052733adf3771fa6cace9 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@acb5aee837b1e7324967d8a31c74093a51eccd97 - name: Install node modules run: pnpm install --frozen-lockfile - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@616a50d0b747031b7ea052733adf3771fa6cace9 + uses: angular/dev-infra/github-actions/bazel/setup@acb5aee837b1e7324967d8a31c74093a51eccd97 - run: pnpm admin snapshots --verbose env: SNAPSHOT_BUILDS_GITHUB_TOKEN: ${{ secrets.SNAPSHOT_BUILDS_GITHUB_TOKEN }} diff --git a/.github/workflows/dev-infra.yml b/.github/workflows/dev-infra.yml index bf29d1e38ae4..e589e99b0be4 100644 --- a/.github/workflows/dev-infra.yml +++ b/.github/workflows/dev-infra.yml @@ -15,21 +15,21 @@ jobs: if: github.event_name == 'pull_request_target' runs-on: ubuntu-latest steps: - - uses: angular/dev-infra/github-actions/labeling/pull-request@616a50d0b747031b7ea052733adf3771fa6cace9 + - uses: angular/dev-infra/github-actions/labeling/pull-request@acb5aee837b1e7324967d8a31c74093a51eccd97 with: angular-robot-key: ${{ secrets.ANGULAR_ROBOT_PRIVATE_KEY }} post_approval_changes: if: github.event_name == 'pull_request_target' runs-on: ubuntu-latest steps: - - uses: angular/dev-infra/github-actions/post-approval-changes@616a50d0b747031b7ea052733adf3771fa6cace9 + - uses: angular/dev-infra/github-actions/post-approval-changes@acb5aee837b1e7324967d8a31c74093a51eccd97 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@616a50d0b747031b7ea052733adf3771fa6cace9 + - uses: angular/dev-infra/github-actions/labeling/issue@acb5aee837b1e7324967d8a31c74093a51eccd97 with: angular-robot-key: ${{ secrets.ANGULAR_ROBOT_PRIVATE_KEY }} google-generative-ai-key: ${{ secrets.GOOGLE_GENERATIVE_AI_KEY }} diff --git a/.github/workflows/perf.yml b/.github/workflows/perf.yml index 675676394863..b53286d2c660 100644 --- a/.github/workflows/perf.yml +++ b/.github/workflows/perf.yml @@ -23,7 +23,7 @@ jobs: workflows: ${{ steps.workflows.outputs.workflows }} steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@616a50d0b747031b7ea052733adf3771fa6cace9 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@acb5aee837b1e7324967d8a31c74093a51eccd97 - name: Install node modules run: pnpm install --frozen-lockfile - id: workflows @@ -38,9 +38,9 @@ jobs: workflow: ${{ fromJSON(needs.list.outputs.workflows) }} steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@616a50d0b747031b7ea052733adf3771fa6cace9 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@acb5aee837b1e7324967d8a31c74093a51eccd97 - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@616a50d0b747031b7ea052733adf3771fa6cace9 + uses: angular/dev-infra/github-actions/bazel/setup@acb5aee837b1e7324967d8a31c74093a51eccd97 - name: Install node modules run: pnpm install --frozen-lockfile # We utilize the google-github-actions/auth action to allow us to get an active credential using workflow diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml index 046a712df616..6204bc0636e9 100644 --- a/.github/workflows/pr.yml +++ b/.github/workflows/pr.yml @@ -34,9 +34,9 @@ jobs: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@616a50d0b747031b7ea052733adf3771fa6cace9 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@acb5aee837b1e7324967d8a31c74093a51eccd97 - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@616a50d0b747031b7ea052733adf3771fa6cace9 + uses: angular/dev-infra/github-actions/bazel/setup@acb5aee837b1e7324967d8a31c74093a51eccd97 - name: Setup ESLint Caching uses: actions/cache@668228422ae6a00e4ad889ee87cd7109ec5666a7 # v5.0.4 with: @@ -66,17 +66,17 @@ jobs: # it has been merged. run: pnpm ng-dev format changed --check ${{ github.event.pull_request.base.sha }} - name: Check Package Licenses - uses: angular/dev-infra/github-actions/linting/licenses@616a50d0b747031b7ea052733adf3771fa6cace9 + uses: angular/dev-infra/github-actions/linting/licenses@acb5aee837b1e7324967d8a31c74093a51eccd97 build: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@616a50d0b747031b7ea052733adf3771fa6cace9 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@acb5aee837b1e7324967d8a31c74093a51eccd97 - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@616a50d0b747031b7ea052733adf3771fa6cace9 + uses: angular/dev-infra/github-actions/bazel/setup@acb5aee837b1e7324967d8a31c74093a51eccd97 - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@616a50d0b747031b7ea052733adf3771fa6cace9 + uses: angular/dev-infra/github-actions/bazel/configure-remote@acb5aee837b1e7324967d8a31c74093a51eccd97 - name: Install node modules run: pnpm install --frozen-lockfile - name: Build release targets @@ -93,11 +93,11 @@ jobs: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@616a50d0b747031b7ea052733adf3771fa6cace9 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@acb5aee837b1e7324967d8a31c74093a51eccd97 - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@616a50d0b747031b7ea052733adf3771fa6cace9 + uses: angular/dev-infra/github-actions/bazel/setup@acb5aee837b1e7324967d8a31c74093a51eccd97 - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@616a50d0b747031b7ea052733adf3771fa6cace9 + uses: angular/dev-infra/github-actions/bazel/configure-remote@acb5aee837b1e7324967d8a31c74093a51eccd97 - name: Install node modules run: pnpm install --frozen-lockfile - name: Run module and package tests @@ -114,13 +114,13 @@ jobs: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@616a50d0b747031b7ea052733adf3771fa6cace9 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@acb5aee837b1e7324967d8a31c74093a51eccd97 - name: Install node modules run: pnpm install --frozen-lockfile - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@616a50d0b747031b7ea052733adf3771fa6cace9 + uses: angular/dev-infra/github-actions/bazel/setup@acb5aee837b1e7324967d8a31c74093a51eccd97 - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@616a50d0b747031b7ea052733adf3771fa6cace9 + uses: angular/dev-infra/github-actions/bazel/configure-remote@acb5aee837b1e7324967d8a31c74093a51eccd97 - name: Run CLI E2E tests run: pnpm bazel test --test_env=E2E_SHARD_TOTAL=6 --test_env=E2E_SHARD_INDEX=${{ matrix.shard }} --config=e2e //tests:e2e.${{ matrix.subset }}_node${{ matrix.node }} @@ -128,11 +128,11 @@ jobs: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@616a50d0b747031b7ea052733adf3771fa6cace9 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@acb5aee837b1e7324967d8a31c74093a51eccd97 - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@616a50d0b747031b7ea052733adf3771fa6cace9 + uses: angular/dev-infra/github-actions/bazel/setup@acb5aee837b1e7324967d8a31c74093a51eccd97 - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@616a50d0b747031b7ea052733adf3771fa6cace9 + uses: angular/dev-infra/github-actions/bazel/configure-remote@acb5aee837b1e7324967d8a31c74093a51eccd97 - name: Install node modules run: pnpm install --frozen-lockfile - name: Build E2E tests for Windows on Linux @@ -156,7 +156,7 @@ jobs: runs-on: windows-2025 steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@616a50d0b747031b7ea052733adf3771fa6cace9 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@acb5aee837b1e7324967d8a31c74093a51eccd97 - name: Install node modules run: pnpm install --frozen-lockfile - name: Download built Windows E2E tests @@ -183,13 +183,13 @@ jobs: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@616a50d0b747031b7ea052733adf3771fa6cace9 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@acb5aee837b1e7324967d8a31c74093a51eccd97 - name: Install node modules run: pnpm install --frozen-lockfile - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@616a50d0b747031b7ea052733adf3771fa6cace9 + uses: angular/dev-infra/github-actions/bazel/setup@acb5aee837b1e7324967d8a31c74093a51eccd97 - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@616a50d0b747031b7ea052733adf3771fa6cace9 + uses: angular/dev-infra/github-actions/bazel/configure-remote@acb5aee837b1e7324967d8a31c74093a51eccd97 - name: Run CLI E2E tests run: pnpm bazel test --test_env=E2E_SHARD_TOTAL=3 --test_env=E2E_SHARD_INDEX=${{ matrix.shard }} --config=e2e //tests:e2e.${{ matrix.subset }}_node${{ matrix.node }} @@ -205,12 +205,12 @@ jobs: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@616a50d0b747031b7ea052733adf3771fa6cace9 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@acb5aee837b1e7324967d8a31c74093a51eccd97 - name: Install node modules run: pnpm install --frozen-lockfile - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@616a50d0b747031b7ea052733adf3771fa6cace9 + uses: angular/dev-infra/github-actions/bazel/setup@acb5aee837b1e7324967d8a31c74093a51eccd97 - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@616a50d0b747031b7ea052733adf3771fa6cace9 + uses: angular/dev-infra/github-actions/bazel/configure-remote@acb5aee837b1e7324967d8a31c74093a51eccd97 - name: Run CLI E2E tests run: pnpm bazel test --test_env=E2E_SHARD_TOTAL=6 --test_env=E2E_SHARD_INDEX=${{ matrix.shard }} --config=e2e //tests:e2e.snapshots.${{ matrix.subset }}_node${{ matrix.node }} diff --git a/MODULE.bazel b/MODULE.bazel index e6a04dad51b7..7b9d585446df 100644 --- a/MODULE.bazel +++ b/MODULE.bazel @@ -19,28 +19,28 @@ bazel_dep(name = "aspect_rules_jasmine", version = "2.0.4") bazel_dep(name = "rules_angular") git_override( module_name = "rules_angular", - commit = "32ce54318d9ec5d84269d4acecbc39944cd8b5e7", + commit = "6c36180c2efebc6526ef0e6a55a6d738c7de6909", remote = "https://github.com/angular/rules_angular.git", ) bazel_dep(name = "devinfra") git_override( module_name = "devinfra", - commit = "616a50d0b747031b7ea052733adf3771fa6cace9", + commit = "acb5aee837b1e7324967d8a31c74093a51eccd97", remote = "https://github.com/angular/dev-infra.git", ) bazel_dep(name = "rules_sass") git_override( module_name = "rules_sass", - commit = "13918bec49cd183a591e3781d1d08044b4aa9f61", + commit = "b5ddaa8e77509bcce35158ad20009636d3da4fbc", remote = "https://github.com/angular/rules_sass.git", ) bazel_dep(name = "rules_browsers") git_override( module_name = "rules_browsers", - commit = "afdc95c1ce8ed9ff0cb94f829b7fc988c43dd783", + commit = "652b57c41218be318f33fc92032696f53d3aa0ef", remote = "https://github.com/angular/rules_browsers.git", ) diff --git a/MODULE.bazel.lock b/MODULE.bazel.lock index 4208ee7f289e..00e91c977301 100644 --- a/MODULE.bazel.lock +++ b/MODULE.bazel.lock @@ -25,7 +25,6 @@ "https://bcr.bazel.build/modules/aspect_rules_js/2.0.0/MODULE.bazel": "b45b507574aa60a92796e3e13c195cd5744b3b8aff516a9c0cb5ae6a048161c5", "https://bcr.bazel.build/modules/aspect_rules_js/3.0.3/MODULE.bazel": "28a30e8fc33bf64a67835d64d124f6e05a7d59648dcb27b110fb3502f761e503", "https://bcr.bazel.build/modules/aspect_rules_js/3.0.3/source.json": "bb8fff9a304452e1042af9522ad1d54d6f1d1fdf71c5127deadb6fd156654193", - "https://bcr.bazel.build/modules/aspect_rules_ts/3.8.7/MODULE.bazel": "830f8a53bb9f1139c24006a90ddc0230481326d69fa847eb00daf8eaae118724", "https://bcr.bazel.build/modules/aspect_rules_ts/3.8.8/MODULE.bazel": "b52b929a948438665809d49af610f58d1b14f63d6d21ab748f47b6050be4c1f6", "https://bcr.bazel.build/modules/aspect_rules_ts/3.8.8/source.json": "5414530b761a45ab7ca6c49f0a2a9cf8dc0da772f5037cf05ca18aaa64bb1b19", "https://bcr.bazel.build/modules/aspect_tools_telemetry/0.2.6/MODULE.bazel": "cafb8781ad591bc57cc765dca5fefab08cf9f65af363d162b79d49205c7f8af7", @@ -192,11 +191,11 @@ "https://bcr.bazel.build/modules/stardoc/0.7.1/MODULE.bazel": "3548faea4ee5dda5580f9af150e79d0f6aea934fc60c1cc50f4efdd9420759e7", "https://bcr.bazel.build/modules/stardoc/0.7.2/MODULE.bazel": "fc152419aa2ea0f51c29583fab1e8c99ddefd5b3778421845606ee628629e0e5", "https://bcr.bazel.build/modules/stardoc/0.7.2/source.json": "58b029e5e901d6802967754adf0a9056747e8176f017cfe3607c0851f4d42216", + "https://bcr.bazel.build/modules/tar.bzl/0.10.1/MODULE.bazel": "bf5fda5b5ccef8c3c4a5f4886144377386e0baa382972f257acb42dcf40ea908", + "https://bcr.bazel.build/modules/tar.bzl/0.10.1/source.json": "3f1beb35acf53c270a9de493cdc775a985551d7069cfcf24e136b42f683bbb10", "https://bcr.bazel.build/modules/tar.bzl/0.2.1/MODULE.bazel": "52d1c00a80a8cc67acbd01649e83d8dd6a9dc426a6c0b754a04fe8c219c76468", "https://bcr.bazel.build/modules/tar.bzl/0.5.1/MODULE.bazel": "7c2eb3dcfc53b0f3d6f9acdfd911ca803eaf92aadf54f8ca6e4c1f3aee288351", "https://bcr.bazel.build/modules/tar.bzl/0.6.0/MODULE.bazel": "a3584b4edcfafcabd9b0ef9819808f05b372957bbdff41601429d5fd0aac2e7c", - "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", "https://bcr.bazel.build/modules/yq.bzl/0.1.1/MODULE.bazel": "9039681f9bcb8958ee2c87ffc74bdafba9f4369096a2b5634b88abc0eaefa072", "https://bcr.bazel.build/modules/yq.bzl/0.3.2/MODULE.bazel": "0384efa70e8033d842ea73aa4b7199fa099709e236a7264345c03937166670b6", @@ -212,7 +211,7 @@ "moduleExtensions": { "@@aspect_rules_esbuild+//esbuild:extensions.bzl%esbuild": { "general": { - "bzlTransitiveDigest": "GnYkDpVOnWnYv+xwyhEi0qjk3Lvp4Wei30PeSIQF5vM=", + "bzlTransitiveDigest": "QxNkTCcD6yURsbqznKyC/WCjCyhHZbEipGXl2UQjjzY=", "usagesDigest": "6We6zwGoawD9YXqMI0KPaxEKJTnamXBsuOekhFS2D40=", "recordedFileInputs": {}, "recordedDirentsInputs": {}, diff --git a/package.json b/package.json index 71aadd192661..ebedfe08912c 100644 --- a/package.json +++ b/package.json @@ -42,20 +42,20 @@ }, "homepage": "https://github.com/angular/angular-cli", "devDependencies": { - "@angular/animations": "22.0.0-next.5", - "@angular/cdk": "22.0.0-next.2", - "@angular/common": "22.0.0-next.5", - "@angular/compiler": "22.0.0-next.5", - "@angular/compiler-cli": "22.0.0-next.5", - "@angular/core": "22.0.0-next.5", - "@angular/forms": "22.0.0-next.5", - "@angular/localize": "22.0.0-next.5", - "@angular/material": "22.0.0-next.2", - "@angular/ng-dev": "https://github.com/angular/dev-infra-private-ng-dev-builds.git#cdbe118e59f59b1ee00ff77a5ccf8c5328248d03", - "@angular/platform-browser": "22.0.0-next.5", - "@angular/platform-server": "22.0.0-next.5", - "@angular/router": "22.0.0-next.5", - "@angular/service-worker": "22.0.0-next.5", + "@angular/animations": "22.0.0-next.6", + "@angular/cdk": "22.0.0-next.3", + "@angular/common": "22.0.0-next.6", + "@angular/compiler": "22.0.0-next.6", + "@angular/compiler-cli": "22.0.0-next.6", + "@angular/core": "22.0.0-next.6", + "@angular/forms": "22.0.0-next.6", + "@angular/localize": "22.0.0-next.6", + "@angular/material": "22.0.0-next.3", + "@angular/ng-dev": "https://github.com/angular/dev-infra-private-ng-dev-builds.git#6ad9d06fa01e41fdf5262093ddd37667fffbf17b", + "@angular/platform-browser": "22.0.0-next.6", + "@angular/platform-server": "22.0.0-next.6", + "@angular/router": "22.0.0-next.6", + "@angular/service-worker": "22.0.0-next.6", "@babel/core": "7.29.0", "@bazel/bazelisk": "1.28.1", "@bazel/buildifier": "8.2.1", diff --git a/packages/angular/ssr/package.json b/packages/angular/ssr/package.json index d5f32bf046c8..7d841721dcae 100644 --- a/packages/angular/ssr/package.json +++ b/packages/angular/ssr/package.json @@ -29,12 +29,12 @@ }, "devDependencies": { "@angular-devkit/schematics": "workspace:*", - "@angular/common": "22.0.0-next.5", - "@angular/compiler": "22.0.0-next.5", - "@angular/core": "22.0.0-next.5", - "@angular/platform-browser": "22.0.0-next.5", - "@angular/platform-server": "22.0.0-next.5", - "@angular/router": "22.0.0-next.5", + "@angular/common": "22.0.0-next.6", + "@angular/compiler": "22.0.0-next.6", + "@angular/core": "22.0.0-next.6", + "@angular/platform-browser": "22.0.0-next.6", + "@angular/platform-server": "22.0.0-next.6", + "@angular/router": "22.0.0-next.6", "@schematics/angular": "workspace:*", "beasties": "0.4.1" }, diff --git a/packages/ngtools/webpack/package.json b/packages/ngtools/webpack/package.json index 8052db75c046..4bb8e257421d 100644 --- a/packages/ngtools/webpack/package.json +++ b/packages/ngtools/webpack/package.json @@ -27,8 +27,8 @@ }, "devDependencies": { "@angular-devkit/core": "workspace:0.0.0-PLACEHOLDER", - "@angular/compiler": "22.0.0-next.5", - "@angular/compiler-cli": "22.0.0-next.5", + "@angular/compiler": "22.0.0-next.6", + "@angular/compiler-cli": "22.0.0-next.6", "typescript": "6.0.2", "webpack": "5.105.4" } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 1dc589ea1b9a..4680a5f4da9c 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -20,47 +20,47 @@ importers: built: true devDependencies: '@angular/animations': - specifier: 22.0.0-next.5 - version: 22.0.0-next.5(@angular/core@22.0.0-next.5(@angular/compiler@22.0.0-next.5)(rxjs@7.8.2)(zone.js@0.16.1)) + specifier: 22.0.0-next.6 + version: 22.0.0-next.6(@angular/core@22.0.0-next.6(@angular/compiler@22.0.0-next.6)(rxjs@7.8.2)(zone.js@0.16.1)) '@angular/cdk': - specifier: 22.0.0-next.2 - version: 22.0.0-next.2(@angular/common@22.0.0-next.5(@angular/core@22.0.0-next.5(@angular/compiler@22.0.0-next.5)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.5(@angular/compiler@22.0.0-next.5)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@22.0.0-next.5(@angular/animations@22.0.0-next.5(@angular/core@22.0.0-next.5(@angular/compiler@22.0.0-next.5)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@22.0.0-next.5(@angular/core@22.0.0-next.5(@angular/compiler@22.0.0-next.5)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.5(@angular/compiler@22.0.0-next.5)(rxjs@7.8.2)(zone.js@0.16.1)))(rxjs@7.8.2) + specifier: 22.0.0-next.3 + version: 22.0.0-next.3(@angular/common@22.0.0-next.6(@angular/core@22.0.0-next.6(@angular/compiler@22.0.0-next.6)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.6(@angular/compiler@22.0.0-next.6)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@22.0.0-next.6(@angular/animations@22.0.0-next.6(@angular/core@22.0.0-next.6(@angular/compiler@22.0.0-next.6)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@22.0.0-next.6(@angular/core@22.0.0-next.6(@angular/compiler@22.0.0-next.6)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.6(@angular/compiler@22.0.0-next.6)(rxjs@7.8.2)(zone.js@0.16.1)))(rxjs@7.8.2) '@angular/common': - specifier: 22.0.0-next.5 - version: 22.0.0-next.5(@angular/core@22.0.0-next.5(@angular/compiler@22.0.0-next.5)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2) + specifier: 22.0.0-next.6 + version: 22.0.0-next.6(@angular/core@22.0.0-next.6(@angular/compiler@22.0.0-next.6)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2) '@angular/compiler': - specifier: 22.0.0-next.5 - version: 22.0.0-next.5 + specifier: 22.0.0-next.6 + version: 22.0.0-next.6 '@angular/compiler-cli': - specifier: 22.0.0-next.5 - version: 22.0.0-next.5(@angular/compiler@22.0.0-next.5)(typescript@6.0.2) + specifier: 22.0.0-next.6 + version: 22.0.0-next.6(@angular/compiler@22.0.0-next.6)(typescript@6.0.2) '@angular/core': - specifier: 22.0.0-next.5 - version: 22.0.0-next.5(@angular/compiler@22.0.0-next.5)(rxjs@7.8.2)(zone.js@0.16.1) + specifier: 22.0.0-next.6 + version: 22.0.0-next.6(@angular/compiler@22.0.0-next.6)(rxjs@7.8.2)(zone.js@0.16.1) '@angular/forms': - specifier: 22.0.0-next.5 - version: 22.0.0-next.5(@angular/common@22.0.0-next.5(@angular/core@22.0.0-next.5(@angular/compiler@22.0.0-next.5)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.5(@angular/compiler@22.0.0-next.5)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@22.0.0-next.5(@angular/animations@22.0.0-next.5(@angular/core@22.0.0-next.5(@angular/compiler@22.0.0-next.5)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@22.0.0-next.5(@angular/core@22.0.0-next.5(@angular/compiler@22.0.0-next.5)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.5(@angular/compiler@22.0.0-next.5)(rxjs@7.8.2)(zone.js@0.16.1)))(rxjs@7.8.2) + specifier: 22.0.0-next.6 + version: 22.0.0-next.6(@angular/common@22.0.0-next.6(@angular/core@22.0.0-next.6(@angular/compiler@22.0.0-next.6)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.6(@angular/compiler@22.0.0-next.6)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@22.0.0-next.6(@angular/animations@22.0.0-next.6(@angular/core@22.0.0-next.6(@angular/compiler@22.0.0-next.6)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@22.0.0-next.6(@angular/core@22.0.0-next.6(@angular/compiler@22.0.0-next.6)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.6(@angular/compiler@22.0.0-next.6)(rxjs@7.8.2)(zone.js@0.16.1)))(rxjs@7.8.2) '@angular/localize': - specifier: 22.0.0-next.5 - version: 22.0.0-next.5(@angular/compiler-cli@22.0.0-next.5(@angular/compiler@22.0.0-next.5)(typescript@6.0.2))(@angular/compiler@22.0.0-next.5) + specifier: 22.0.0-next.6 + version: 22.0.0-next.6(@angular/compiler-cli@22.0.0-next.6(@angular/compiler@22.0.0-next.6)(typescript@6.0.2))(@angular/compiler@22.0.0-next.6) '@angular/material': - specifier: 22.0.0-next.2 - version: 22.0.0-next.2(2f6ce0790131a0100070320bdabac3a2) + specifier: 22.0.0-next.3 + version: 22.0.0-next.3(2e9636f7d8dd68137b51ac62db842fa5) '@angular/ng-dev': - specifier: https://github.com/angular/dev-infra-private-ng-dev-builds.git#cdbe118e59f59b1ee00ff77a5ccf8c5328248d03 - version: https://codeload.github.com/angular/dev-infra-private-ng-dev-builds/tar.gz/cdbe118e59f59b1ee00ff77a5ccf8c5328248d03(@modelcontextprotocol/sdk@1.28.0(zod@4.3.6)) + specifier: https://github.com/angular/dev-infra-private-ng-dev-builds.git#6ad9d06fa01e41fdf5262093ddd37667fffbf17b + version: https://codeload.github.com/angular/dev-infra-private-ng-dev-builds/tar.gz/6ad9d06fa01e41fdf5262093ddd37667fffbf17b(@modelcontextprotocol/sdk@1.28.0(zod@4.3.6)) '@angular/platform-browser': - specifier: 22.0.0-next.5 - version: 22.0.0-next.5(@angular/animations@22.0.0-next.5(@angular/core@22.0.0-next.5(@angular/compiler@22.0.0-next.5)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@22.0.0-next.5(@angular/core@22.0.0-next.5(@angular/compiler@22.0.0-next.5)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.5(@angular/compiler@22.0.0-next.5)(rxjs@7.8.2)(zone.js@0.16.1)) + specifier: 22.0.0-next.6 + version: 22.0.0-next.6(@angular/animations@22.0.0-next.6(@angular/core@22.0.0-next.6(@angular/compiler@22.0.0-next.6)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@22.0.0-next.6(@angular/core@22.0.0-next.6(@angular/compiler@22.0.0-next.6)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.6(@angular/compiler@22.0.0-next.6)(rxjs@7.8.2)(zone.js@0.16.1)) '@angular/platform-server': - specifier: 22.0.0-next.5 - version: 22.0.0-next.5(@angular/common@22.0.0-next.5(@angular/core@22.0.0-next.5(@angular/compiler@22.0.0-next.5)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/compiler@22.0.0-next.5)(@angular/core@22.0.0-next.5(@angular/compiler@22.0.0-next.5)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@22.0.0-next.5(@angular/animations@22.0.0-next.5(@angular/core@22.0.0-next.5(@angular/compiler@22.0.0-next.5)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@22.0.0-next.5(@angular/core@22.0.0-next.5(@angular/compiler@22.0.0-next.5)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.5(@angular/compiler@22.0.0-next.5)(rxjs@7.8.2)(zone.js@0.16.1)))(rxjs@7.8.2) + specifier: 22.0.0-next.6 + version: 22.0.0-next.6(@angular/common@22.0.0-next.6(@angular/core@22.0.0-next.6(@angular/compiler@22.0.0-next.6)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/compiler@22.0.0-next.6)(@angular/core@22.0.0-next.6(@angular/compiler@22.0.0-next.6)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@22.0.0-next.6(@angular/animations@22.0.0-next.6(@angular/core@22.0.0-next.6(@angular/compiler@22.0.0-next.6)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@22.0.0-next.6(@angular/core@22.0.0-next.6(@angular/compiler@22.0.0-next.6)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.6(@angular/compiler@22.0.0-next.6)(rxjs@7.8.2)(zone.js@0.16.1)))(rxjs@7.8.2) '@angular/router': - specifier: 22.0.0-next.5 - version: 22.0.0-next.5(@angular/common@22.0.0-next.5(@angular/core@22.0.0-next.5(@angular/compiler@22.0.0-next.5)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.5(@angular/compiler@22.0.0-next.5)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@22.0.0-next.5(@angular/animations@22.0.0-next.5(@angular/core@22.0.0-next.5(@angular/compiler@22.0.0-next.5)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@22.0.0-next.5(@angular/core@22.0.0-next.5(@angular/compiler@22.0.0-next.5)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.5(@angular/compiler@22.0.0-next.5)(rxjs@7.8.2)(zone.js@0.16.1)))(rxjs@7.8.2) + specifier: 22.0.0-next.6 + version: 22.0.0-next.6(@angular/common@22.0.0-next.6(@angular/core@22.0.0-next.6(@angular/compiler@22.0.0-next.6)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.6(@angular/compiler@22.0.0-next.6)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@22.0.0-next.6(@angular/animations@22.0.0-next.6(@angular/core@22.0.0-next.6(@angular/compiler@22.0.0-next.6)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@22.0.0-next.6(@angular/core@22.0.0-next.6(@angular/compiler@22.0.0-next.6)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.6(@angular/compiler@22.0.0-next.6)(rxjs@7.8.2)(zone.js@0.16.1)))(rxjs@7.8.2) '@angular/service-worker': - specifier: 22.0.0-next.5 - version: 22.0.0-next.5(@angular/core@22.0.0-next.5(@angular/compiler@22.0.0-next.5)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2) + specifier: 22.0.0-next.6 + version: 22.0.0-next.6(@angular/core@22.0.0-next.6(@angular/compiler@22.0.0-next.6)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2) '@babel/core': specifier: 7.29.0 version: 7.29.0 @@ -327,7 +327,7 @@ importers: version: 29.0.1 ng-packagr: specifier: 22.0.0-next.1 - version: 22.0.0-next.1(@angular/compiler-cli@22.0.0-next.5(@angular/compiler@22.0.0-next.5)(typescript@6.0.2))(tslib@2.8.1)(typescript@6.0.2) + version: 22.0.0-next.1(@angular/compiler-cli@22.0.0-next.6(@angular/compiler@22.0.0-next.6)(typescript@6.0.2))(tslib@2.8.1)(typescript@6.0.2) rxjs: specifier: 7.8.2 version: 7.8.2 @@ -430,7 +430,7 @@ importers: version: 4.6.4 ng-packagr: specifier: 22.0.0-next.1 - version: 22.0.0-next.1(@angular/compiler-cli@22.0.0-next.5(@angular/compiler@22.0.0-next.5)(typescript@6.0.2))(tslib@2.8.1)(typescript@6.0.2) + version: 22.0.0-next.1(@angular/compiler-cli@22.0.0-next.6(@angular/compiler@22.0.0-next.6)(typescript@6.0.2))(tslib@2.8.1)(typescript@6.0.2) postcss: specifier: 8.5.8 version: 8.5.8 @@ -524,23 +524,23 @@ importers: specifier: workspace:* version: link:../../angular_devkit/schematics '@angular/common': - specifier: 22.0.0-next.5 - version: 22.0.0-next.5(@angular/core@22.0.0-next.5(@angular/compiler@22.0.0-next.5)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2) + specifier: 22.0.0-next.6 + version: 22.0.0-next.6(@angular/core@22.0.0-next.6(@angular/compiler@22.0.0-next.6)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2) '@angular/compiler': - specifier: 22.0.0-next.5 - version: 22.0.0-next.5 + specifier: 22.0.0-next.6 + version: 22.0.0-next.6 '@angular/core': - specifier: 22.0.0-next.5 - version: 22.0.0-next.5(@angular/compiler@22.0.0-next.5)(rxjs@7.8.2)(zone.js@0.16.1) + specifier: 22.0.0-next.6 + version: 22.0.0-next.6(@angular/compiler@22.0.0-next.6)(rxjs@7.8.2)(zone.js@0.16.1) '@angular/platform-browser': - specifier: 22.0.0-next.5 - version: 22.0.0-next.5(@angular/animations@22.0.0-next.5(@angular/core@22.0.0-next.5(@angular/compiler@22.0.0-next.5)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@22.0.0-next.5(@angular/core@22.0.0-next.5(@angular/compiler@22.0.0-next.5)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.5(@angular/compiler@22.0.0-next.5)(rxjs@7.8.2)(zone.js@0.16.1)) + specifier: 22.0.0-next.6 + version: 22.0.0-next.6(@angular/animations@22.0.0-next.6(@angular/core@22.0.0-next.6(@angular/compiler@22.0.0-next.6)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@22.0.0-next.6(@angular/core@22.0.0-next.6(@angular/compiler@22.0.0-next.6)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.6(@angular/compiler@22.0.0-next.6)(rxjs@7.8.2)(zone.js@0.16.1)) '@angular/platform-server': - specifier: 22.0.0-next.5 - version: 22.0.0-next.5(@angular/common@22.0.0-next.5(@angular/core@22.0.0-next.5(@angular/compiler@22.0.0-next.5)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/compiler@22.0.0-next.5)(@angular/core@22.0.0-next.5(@angular/compiler@22.0.0-next.5)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@22.0.0-next.5(@angular/animations@22.0.0-next.5(@angular/core@22.0.0-next.5(@angular/compiler@22.0.0-next.5)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@22.0.0-next.5(@angular/core@22.0.0-next.5(@angular/compiler@22.0.0-next.5)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.5(@angular/compiler@22.0.0-next.5)(rxjs@7.8.2)(zone.js@0.16.1)))(rxjs@7.8.2) + specifier: 22.0.0-next.6 + version: 22.0.0-next.6(@angular/common@22.0.0-next.6(@angular/core@22.0.0-next.6(@angular/compiler@22.0.0-next.6)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/compiler@22.0.0-next.6)(@angular/core@22.0.0-next.6(@angular/compiler@22.0.0-next.6)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@22.0.0-next.6(@angular/animations@22.0.0-next.6(@angular/core@22.0.0-next.6(@angular/compiler@22.0.0-next.6)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@22.0.0-next.6(@angular/core@22.0.0-next.6(@angular/compiler@22.0.0-next.6)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.6(@angular/compiler@22.0.0-next.6)(rxjs@7.8.2)(zone.js@0.16.1)))(rxjs@7.8.2) '@angular/router': - specifier: 22.0.0-next.5 - version: 22.0.0-next.5(@angular/common@22.0.0-next.5(@angular/core@22.0.0-next.5(@angular/compiler@22.0.0-next.5)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.5(@angular/compiler@22.0.0-next.5)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@22.0.0-next.5(@angular/animations@22.0.0-next.5(@angular/core@22.0.0-next.5(@angular/compiler@22.0.0-next.5)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@22.0.0-next.5(@angular/core@22.0.0-next.5(@angular/compiler@22.0.0-next.5)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.5(@angular/compiler@22.0.0-next.5)(rxjs@7.8.2)(zone.js@0.16.1)))(rxjs@7.8.2) + specifier: 22.0.0-next.6 + version: 22.0.0-next.6(@angular/common@22.0.0-next.6(@angular/core@22.0.0-next.6(@angular/compiler@22.0.0-next.6)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.6(@angular/compiler@22.0.0-next.6)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@22.0.0-next.6(@angular/animations@22.0.0-next.6(@angular/core@22.0.0-next.6(@angular/compiler@22.0.0-next.6)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@22.0.0-next.6(@angular/core@22.0.0-next.6(@angular/compiler@22.0.0-next.6)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.6(@angular/compiler@22.0.0-next.6)(rxjs@7.8.2)(zone.js@0.16.1)))(rxjs@7.8.2) '@schematics/angular': specifier: workspace:* version: link:../../schematics/angular @@ -727,7 +727,7 @@ importers: version: 3.0.4(bufferutil@4.1.0)(utf-8-validate@6.0.6) ng-packagr: specifier: 22.0.0-next.1 - version: 22.0.0-next.1(@angular/compiler-cli@22.0.0-next.5(@angular/compiler@22.0.0-next.5)(typescript@6.0.2))(tslib@2.8.1)(typescript@6.0.2) + version: 22.0.0-next.1(@angular/compiler-cli@22.0.0-next.6(@angular/compiler@22.0.0-next.6)(typescript@6.0.2))(tslib@2.8.1)(typescript@6.0.2) undici: specifier: 7.24.6 version: 7.24.6 @@ -819,11 +819,11 @@ importers: specifier: workspace:0.0.0-PLACEHOLDER version: link:../../angular_devkit/core '@angular/compiler': - specifier: 22.0.0-next.5 - version: 22.0.0-next.5 + specifier: 22.0.0-next.6 + version: 22.0.0-next.6 '@angular/compiler-cli': - specifier: 22.0.0-next.5 - version: 22.0.0-next.5(@angular/compiler@22.0.0-next.5)(typescript@6.0.2) + specifier: 22.0.0-next.6 + version: 22.0.0-next.6(@angular/compiler@22.0.0-next.6)(typescript@6.0.2) typescript: specifier: 6.0.2 version: 6.0.2 @@ -929,47 +929,47 @@ packages: resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} engines: {node: '>=6.0.0'} - '@angular/animations@22.0.0-next.5': - resolution: {integrity: sha512-edwiwKOv1eF5NcjPpZYWOZw4sAlNzDROUEVR5+ZYA0HRXR78hXZi/cIsdipd8wdNtVZfUrB+jYQtIo/KSZCPEw==} + '@angular/animations@22.0.0-next.6': + resolution: {integrity: sha512-QfoRrMrHh/3+JJBvmXBM0UfBxTvcGO/CBPH450RNktmqnaFKwsPyXTE+fA0S3xkhV0rCCQH5WVKNaBE18RsFvw==} engines: {node: ^22.22.0 || >=24.13.1} peerDependencies: - '@angular/core': 22.0.0-next.5 + '@angular/core': 22.0.0-next.6 - '@angular/cdk@22.0.0-next.2': - resolution: {integrity: sha512-X6dPo2s453Tpl3KTF/7cPpxehnFU4XcgdDFfhnDWqxc/CNWdNTAeFfGetFi8hWkBOftvZ6VNrL4w8u0CLOuEBg==} + '@angular/cdk@22.0.0-next.3': + resolution: {integrity: sha512-dQrSUW9jR5cISKoA0iewbLWFMFNYvg4w32DZZvz/lv2mvRoHKcPv6wyc7K2egB4qLjEp/FV/bs3icNFZ+6a9qw==} peerDependencies: '@angular/common': ^22.0.0-0 || ^22.1.0-0 || ^22.2.0-0 || ^22.3.0-0 || ^23.0.0-0 '@angular/core': ^22.0.0-0 || ^22.1.0-0 || ^22.2.0-0 || ^22.3.0-0 || ^23.0.0-0 '@angular/platform-browser': ^22.0.0-0 || ^22.1.0-0 || ^22.2.0-0 || ^22.3.0-0 || ^23.0.0-0 rxjs: ^6.5.3 || ^7.4.0 - '@angular/common@22.0.0-next.5': - resolution: {integrity: sha512-6USsjumt53nacM9Zgjn/roVL4sDxJwGTnzRUGHA7X4tH+1rhJzfo2ypb70C9uu0DvKnnCTBA7GY0Uor4AVunng==} + '@angular/common@22.0.0-next.6': + resolution: {integrity: sha512-LIP+K7uqUxHc2W83hKCuvChuwsvxsy3aGDjGL2RdkG9ejOl8D4mIhVfWSDl1/EGtet+9URmJeaUK66DRyltVlg==} engines: {node: ^22.22.0 || >=24.13.1} peerDependencies: - '@angular/core': 22.0.0-next.5 + '@angular/core': 22.0.0-next.6 rxjs: ^6.5.3 || ^7.4.0 - '@angular/compiler-cli@22.0.0-next.5': - resolution: {integrity: sha512-yGes0iE61I7Rmk9f/W3Oe0hLWYpqNUBxyT0PmuYekGgFocmgY+uyw9E8hyXaHVd5syWSBiuw8bprMyLSuRnRAQ==} + '@angular/compiler-cli@22.0.0-next.6': + resolution: {integrity: sha512-S66R3kNBvbNm6QUeR4HoXq3kXt29YcIM5LJ+ucp2P/eUktEtzoUF+2g0ad1vDPG7tvis16ey1+ohLOJog/GrGA==} engines: {node: ^22.22.0 || >=24.13.1} hasBin: true peerDependencies: - '@angular/compiler': 22.0.0-next.5 + '@angular/compiler': 22.0.0-next.6 typescript: '>=5.9 <6.1' peerDependenciesMeta: typescript: optional: true - '@angular/compiler@22.0.0-next.5': - resolution: {integrity: sha512-pidvCE3YOfc8BIkEI5ohmZsnfeT+NMunwccUiRuAU/42JZaM8XpdZ6LHxl/P6qYbYFhlSvctkvLeAcC13wYTzw==} + '@angular/compiler@22.0.0-next.6': + resolution: {integrity: sha512-LfHwtfEBPM/AV8+nJx4YREJJun52t0k6Hc8rf6djvBELW5QHwm9Qttgre/edHFlOSiTdw8sWN0jVfQ+5ocTKqw==} engines: {node: ^22.22.0 || >=24.13.1} - '@angular/core@22.0.0-next.5': - resolution: {integrity: sha512-pBGFG3W5mCPpoafdeTY+fgYUIyoxA9kOYmLCmCCvOkQoZacBQJeNbNqHrLXrVJxX6l4EsBfRvy8sDaKe4Iwstg==} + '@angular/core@22.0.0-next.6': + resolution: {integrity: sha512-eoWQfKMRftk+tYtbi8zBpQCmdnIn+4mJTD+/8x86gYKVMZWKvCkFFCTN87hfu0ry9505/eybdi/o2c8W9UZS7Q==} engines: {node: ^22.22.0 || >=24.13.1} peerDependencies: - '@angular/compiler': 22.0.0-next.5 + '@angular/compiler': 22.0.0-next.6 rxjs: ^6.5.3 || ^7.4.0 zone.js: ~0.15.0 || ~0.16.0 peerDependenciesMeta: @@ -978,74 +978,74 @@ packages: zone.js: optional: true - '@angular/forms@22.0.0-next.5': - resolution: {integrity: sha512-LzhwA1n286ib5ZIJeKqY/JhQivzvno+Fu1V7iBMyHFhyZWp6nmL6YOn4y0UqMuFsQ2g0322eSdhncuhwmFvJvA==} + '@angular/forms@22.0.0-next.6': + resolution: {integrity: sha512-xykgAkiNZ8H3J0VMGPo3dTmKs/Epydnh4FK0Yojh/oxKa9lMPx9vxftS5J5Wgah57/CMtZ1ndhN/xukQxzCTgQ==} engines: {node: ^22.22.0 || >=24.13.1} peerDependencies: - '@angular/common': 22.0.0-next.5 - '@angular/core': 22.0.0-next.5 - '@angular/platform-browser': 22.0.0-next.5 + '@angular/common': 22.0.0-next.6 + '@angular/core': 22.0.0-next.6 + '@angular/platform-browser': 22.0.0-next.6 rxjs: ^6.5.3 || ^7.4.0 - '@angular/localize@22.0.0-next.5': - resolution: {integrity: sha512-kVuLyQzFz3S/gQibYpbldgwArYlPaznngRksEd81sDGvbN73OGP4v12wSSIWAx9FwlwN2RTEVYgmpB6MR9ZKsw==} + '@angular/localize@22.0.0-next.6': + resolution: {integrity: sha512-ICUJZCCKU1yf88f4zmFZQfYnvMRX1lufOFgR7CLMPrfSuU0lvPyhlJbI+/0/SA1sBvDjaH3t6Z5SX0XVT/Beeg==} engines: {node: ^22.22.0 || >=24.13.1} hasBin: true peerDependencies: - '@angular/compiler': 22.0.0-next.5 - '@angular/compiler-cli': 22.0.0-next.5 + '@angular/compiler': 22.0.0-next.6 + '@angular/compiler-cli': 22.0.0-next.6 - '@angular/material@22.0.0-next.2': - resolution: {integrity: sha512-HqTVJNEf2kSmHs8xQBvFbSf/m8ekMMaaBXlVy1lONLfN+Lq+RO6HxP56wF3CY4rwS8CpPr2vQo1IkWtsDH3gVg==} + '@angular/material@22.0.0-next.3': + resolution: {integrity: sha512-w52poT7V/JaSb/MhWXcD6VSNcA4e3CwlHlz3R+qnqs8yCF+9YsD4xCmlChycXbTNVS9sl+CWus8WGxhdn5HccA==} peerDependencies: - '@angular/cdk': 22.0.0-next.2 + '@angular/cdk': 22.0.0-next.3 '@angular/common': ^22.0.0-0 || ^22.1.0-0 || ^22.2.0-0 || ^22.3.0-0 || ^23.0.0-0 '@angular/core': ^22.0.0-0 || ^22.1.0-0 || ^22.2.0-0 || ^22.3.0-0 || ^23.0.0-0 '@angular/forms': ^22.0.0-0 || ^22.1.0-0 || ^22.2.0-0 || ^22.3.0-0 || ^23.0.0-0 '@angular/platform-browser': ^22.0.0-0 || ^22.1.0-0 || ^22.2.0-0 || ^22.3.0-0 || ^23.0.0-0 rxjs: ^6.5.3 || ^7.4.0 - '@angular/ng-dev@https://codeload.github.com/angular/dev-infra-private-ng-dev-builds/tar.gz/cdbe118e59f59b1ee00ff77a5ccf8c5328248d03': - resolution: {tarball: https://codeload.github.com/angular/dev-infra-private-ng-dev-builds/tar.gz/cdbe118e59f59b1ee00ff77a5ccf8c5328248d03} - version: 0.0.0-d69b99aeae90df28c37c57176a69995b3b60df1b + '@angular/ng-dev@https://codeload.github.com/angular/dev-infra-private-ng-dev-builds/tar.gz/6ad9d06fa01e41fdf5262093ddd37667fffbf17b': + resolution: {tarball: https://codeload.github.com/angular/dev-infra-private-ng-dev-builds/tar.gz/6ad9d06fa01e41fdf5262093ddd37667fffbf17b} + version: 0.0.0-ef76470f93f00da7e3cdc737d8280d29b9c9b2f2 hasBin: true - '@angular/platform-browser@22.0.0-next.5': - resolution: {integrity: sha512-vDLAWN+HFC6KLywrnAtr/62G6B99/2xL2c/nWJR3AIGSdi4BdMk9yrq+g6vEl3sz3rX+mcHCN9ih61Ew7Ht68A==} + '@angular/platform-browser@22.0.0-next.6': + resolution: {integrity: sha512-45tSzemNZLxXEz2+wWlYE3kFZl2eD4WQ0nYNVx+grzK3U9h9GOSN/YxvrBm/q9cnZD2x+O9RQDyj+9/Vq3a5mw==} engines: {node: ^22.22.0 || >=24.13.1} peerDependencies: - '@angular/animations': 22.0.0-next.5 - '@angular/common': 22.0.0-next.5 - '@angular/core': 22.0.0-next.5 + '@angular/animations': 22.0.0-next.6 + '@angular/common': 22.0.0-next.6 + '@angular/core': 22.0.0-next.6 peerDependenciesMeta: '@angular/animations': optional: true - '@angular/platform-server@22.0.0-next.5': - resolution: {integrity: sha512-v3CNQxySkjX7WhqeKxGghg6/Ygjv59HQQpTpPWdBOOWmQ+yzrS1crEmO94QnrbwgNBPUaKOttaX7pebvXN7Gxg==} + '@angular/platform-server@22.0.0-next.6': + resolution: {integrity: sha512-rbK9/8G0Ftc3I3IoHoV+KiMq+QLx8k29PTpnm49QttvI8T/Mw6aQ2pW1coH+rJPDtJNwN7Z7lccACYA3vzPyCw==} engines: {node: ^22.22.0 || >=24.13.1} peerDependencies: - '@angular/common': 22.0.0-next.5 - '@angular/compiler': 22.0.0-next.5 - '@angular/core': 22.0.0-next.5 - '@angular/platform-browser': 22.0.0-next.5 + '@angular/common': 22.0.0-next.6 + '@angular/compiler': 22.0.0-next.6 + '@angular/core': 22.0.0-next.6 + '@angular/platform-browser': 22.0.0-next.6 rxjs: ^6.5.3 || ^7.4.0 - '@angular/router@22.0.0-next.5': - resolution: {integrity: sha512-CHiJuBpr2HpBtK4JqksZ30Hh4Vx/h6o7t0NB06RDhXux0Jr+Mh1RVKMkRo2zc4oP30rbooy4DheKl/EOW9ALgA==} + '@angular/router@22.0.0-next.6': + resolution: {integrity: sha512-RwwNT2HCiIMzaNRCs1uwcvvC3/Uvkih9A3jLbIU4+uHbi0st4DHQVtRY1zBKsAtpXarxdK7ykHUA32HbC11l9A==} engines: {node: ^22.22.0 || >=24.13.1} peerDependencies: - '@angular/common': 22.0.0-next.5 - '@angular/core': 22.0.0-next.5 - '@angular/platform-browser': 22.0.0-next.5 + '@angular/common': 22.0.0-next.6 + '@angular/core': 22.0.0-next.6 + '@angular/platform-browser': 22.0.0-next.6 rxjs: ^6.5.3 || ^7.4.0 - '@angular/service-worker@22.0.0-next.5': - resolution: {integrity: sha512-leEdbpD8tnRT3i88QEe9GXVfBryls9BntMSbfURlJBdrJJrTySX2wUsuBbeBVM9kjQG5oqy8/GDFaGVMrNziug==} + '@angular/service-worker@22.0.0-next.6': + resolution: {integrity: sha512-qRgDs8TVd6jbu3Ctnit2ZuzWWVr+gCbeK9mo7OOWtPQAIX0Xe53MnXPTFrr3xxdO8AtTlJ0k2FYhoHaH4LPkZA==} engines: {node: ^22.22.0 || >=24.13.1} hasBin: true peerDependencies: - '@angular/core': 22.0.0-next.5 + '@angular/core': 22.0.0-next.6 rxjs: ^6.5.3 || ^7.4.0 '@asamuzakjp/css-color@5.1.1': @@ -2106,8 +2106,8 @@ packages: resolution: {integrity: sha512-IJn+8A3QZJfe7FUtWqHVNo3xJs7KFpurCWGWCiCz3oEh+BkRymKZ1QxfAbU2yGMDzTytLGQ2IV6T2r3cuo75/w==} engines: {node: '>=18'} - '@google/genai@1.47.0': - resolution: {integrity: sha512-0VV7AaXm5rQu3oRHNZNEubRAOL2lv5u+YA72eWnDwcOx3B1jFRbvtgL4drRHlocRHOnludvr3xmbQGbR+/RQAQ==} + '@google/genai@1.48.0': + resolution: {integrity: sha512-plonYK4ML2PrxsRD9SeqmFt76eREWkQdPCglOA6aYDzL1AAbE+7PUnT54SvpWGfws13L0AZEqGSpL7+1IPnTxQ==} engines: {node: '>=20.0.0'} peerDependencies: '@modelcontextprotocol/sdk': ^1.25.2 @@ -6329,6 +6329,10 @@ packages: resolution: {integrity: sha512-oRjTw/97aTBN0RHbYCdtF1MQfvusSIBQM0IZEgzl6426+8jSC0nF1a/GmnVLpfB9yyr6g6FTqWqiZVbxrtaCIg==} engines: {node: 18 || 20 || >=22} + minimatch@10.2.5: + resolution: {integrity: sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==} + engines: {node: 18 || 20 || >=22} + minimatch@3.1.5: resolution: {integrity: sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==} @@ -8460,29 +8464,29 @@ snapshots: '@jridgewell/gen-mapping': 0.3.13 '@jridgewell/trace-mapping': 0.3.31 - '@angular/animations@22.0.0-next.5(@angular/core@22.0.0-next.5(@angular/compiler@22.0.0-next.5)(rxjs@7.8.2)(zone.js@0.16.1))': + '@angular/animations@22.0.0-next.6(@angular/core@22.0.0-next.6(@angular/compiler@22.0.0-next.6)(rxjs@7.8.2)(zone.js@0.16.1))': dependencies: - '@angular/core': 22.0.0-next.5(@angular/compiler@22.0.0-next.5)(rxjs@7.8.2)(zone.js@0.16.1) + '@angular/core': 22.0.0-next.6(@angular/compiler@22.0.0-next.6)(rxjs@7.8.2)(zone.js@0.16.1) tslib: 2.8.1 - '@angular/cdk@22.0.0-next.2(@angular/common@22.0.0-next.5(@angular/core@22.0.0-next.5(@angular/compiler@22.0.0-next.5)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.5(@angular/compiler@22.0.0-next.5)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@22.0.0-next.5(@angular/animations@22.0.0-next.5(@angular/core@22.0.0-next.5(@angular/compiler@22.0.0-next.5)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@22.0.0-next.5(@angular/core@22.0.0-next.5(@angular/compiler@22.0.0-next.5)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.5(@angular/compiler@22.0.0-next.5)(rxjs@7.8.2)(zone.js@0.16.1)))(rxjs@7.8.2)': + '@angular/cdk@22.0.0-next.3(@angular/common@22.0.0-next.6(@angular/core@22.0.0-next.6(@angular/compiler@22.0.0-next.6)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.6(@angular/compiler@22.0.0-next.6)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@22.0.0-next.6(@angular/animations@22.0.0-next.6(@angular/core@22.0.0-next.6(@angular/compiler@22.0.0-next.6)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@22.0.0-next.6(@angular/core@22.0.0-next.6(@angular/compiler@22.0.0-next.6)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.6(@angular/compiler@22.0.0-next.6)(rxjs@7.8.2)(zone.js@0.16.1)))(rxjs@7.8.2)': dependencies: - '@angular/common': 22.0.0-next.5(@angular/core@22.0.0-next.5(@angular/compiler@22.0.0-next.5)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2) - '@angular/core': 22.0.0-next.5(@angular/compiler@22.0.0-next.5)(rxjs@7.8.2)(zone.js@0.16.1) - '@angular/platform-browser': 22.0.0-next.5(@angular/animations@22.0.0-next.5(@angular/core@22.0.0-next.5(@angular/compiler@22.0.0-next.5)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@22.0.0-next.5(@angular/core@22.0.0-next.5(@angular/compiler@22.0.0-next.5)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.5(@angular/compiler@22.0.0-next.5)(rxjs@7.8.2)(zone.js@0.16.1)) + '@angular/common': 22.0.0-next.6(@angular/core@22.0.0-next.6(@angular/compiler@22.0.0-next.6)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2) + '@angular/core': 22.0.0-next.6(@angular/compiler@22.0.0-next.6)(rxjs@7.8.2)(zone.js@0.16.1) + '@angular/platform-browser': 22.0.0-next.6(@angular/animations@22.0.0-next.6(@angular/core@22.0.0-next.6(@angular/compiler@22.0.0-next.6)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@22.0.0-next.6(@angular/core@22.0.0-next.6(@angular/compiler@22.0.0-next.6)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.6(@angular/compiler@22.0.0-next.6)(rxjs@7.8.2)(zone.js@0.16.1)) parse5: 8.0.0 rxjs: 7.8.2 tslib: 2.8.1 - '@angular/common@22.0.0-next.5(@angular/core@22.0.0-next.5(@angular/compiler@22.0.0-next.5)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2)': + '@angular/common@22.0.0-next.6(@angular/core@22.0.0-next.6(@angular/compiler@22.0.0-next.6)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2)': dependencies: - '@angular/core': 22.0.0-next.5(@angular/compiler@22.0.0-next.5)(rxjs@7.8.2)(zone.js@0.16.1) + '@angular/core': 22.0.0-next.6(@angular/compiler@22.0.0-next.6)(rxjs@7.8.2)(zone.js@0.16.1) rxjs: 7.8.2 tslib: 2.8.1 - '@angular/compiler-cli@22.0.0-next.5(@angular/compiler@22.0.0-next.5)(typescript@6.0.2)': + '@angular/compiler-cli@22.0.0-next.6(@angular/compiler@22.0.0-next.6)(typescript@6.0.2)': dependencies: - '@angular/compiler': 22.0.0-next.5 + '@angular/compiler': 22.0.0-next.6 '@babel/core': 7.29.0 '@jridgewell/sourcemap-codec': 1.5.5 chokidar: 5.0.0 @@ -8496,31 +8500,31 @@ snapshots: transitivePeerDependencies: - supports-color - '@angular/compiler@22.0.0-next.5': + '@angular/compiler@22.0.0-next.6': dependencies: tslib: 2.8.1 - '@angular/core@22.0.0-next.5(@angular/compiler@22.0.0-next.5)(rxjs@7.8.2)(zone.js@0.16.1)': + '@angular/core@22.0.0-next.6(@angular/compiler@22.0.0-next.6)(rxjs@7.8.2)(zone.js@0.16.1)': dependencies: rxjs: 7.8.2 tslib: 2.8.1 optionalDependencies: - '@angular/compiler': 22.0.0-next.5 + '@angular/compiler': 22.0.0-next.6 zone.js: 0.16.1 - '@angular/forms@22.0.0-next.5(@angular/common@22.0.0-next.5(@angular/core@22.0.0-next.5(@angular/compiler@22.0.0-next.5)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.5(@angular/compiler@22.0.0-next.5)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@22.0.0-next.5(@angular/animations@22.0.0-next.5(@angular/core@22.0.0-next.5(@angular/compiler@22.0.0-next.5)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@22.0.0-next.5(@angular/core@22.0.0-next.5(@angular/compiler@22.0.0-next.5)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.5(@angular/compiler@22.0.0-next.5)(rxjs@7.8.2)(zone.js@0.16.1)))(rxjs@7.8.2)': + '@angular/forms@22.0.0-next.6(@angular/common@22.0.0-next.6(@angular/core@22.0.0-next.6(@angular/compiler@22.0.0-next.6)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.6(@angular/compiler@22.0.0-next.6)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@22.0.0-next.6(@angular/animations@22.0.0-next.6(@angular/core@22.0.0-next.6(@angular/compiler@22.0.0-next.6)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@22.0.0-next.6(@angular/core@22.0.0-next.6(@angular/compiler@22.0.0-next.6)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.6(@angular/compiler@22.0.0-next.6)(rxjs@7.8.2)(zone.js@0.16.1)))(rxjs@7.8.2)': dependencies: - '@angular/common': 22.0.0-next.5(@angular/core@22.0.0-next.5(@angular/compiler@22.0.0-next.5)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2) - '@angular/core': 22.0.0-next.5(@angular/compiler@22.0.0-next.5)(rxjs@7.8.2)(zone.js@0.16.1) - '@angular/platform-browser': 22.0.0-next.5(@angular/animations@22.0.0-next.5(@angular/core@22.0.0-next.5(@angular/compiler@22.0.0-next.5)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@22.0.0-next.5(@angular/core@22.0.0-next.5(@angular/compiler@22.0.0-next.5)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.5(@angular/compiler@22.0.0-next.5)(rxjs@7.8.2)(zone.js@0.16.1)) + '@angular/common': 22.0.0-next.6(@angular/core@22.0.0-next.6(@angular/compiler@22.0.0-next.6)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2) + '@angular/core': 22.0.0-next.6(@angular/compiler@22.0.0-next.6)(rxjs@7.8.2)(zone.js@0.16.1) + '@angular/platform-browser': 22.0.0-next.6(@angular/animations@22.0.0-next.6(@angular/core@22.0.0-next.6(@angular/compiler@22.0.0-next.6)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@22.0.0-next.6(@angular/core@22.0.0-next.6(@angular/compiler@22.0.0-next.6)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.6(@angular/compiler@22.0.0-next.6)(rxjs@7.8.2)(zone.js@0.16.1)) '@standard-schema/spec': 1.1.0 rxjs: 7.8.2 tslib: 2.8.1 - '@angular/localize@22.0.0-next.5(@angular/compiler-cli@22.0.0-next.5(@angular/compiler@22.0.0-next.5)(typescript@6.0.2))(@angular/compiler@22.0.0-next.5)': + '@angular/localize@22.0.0-next.6(@angular/compiler-cli@22.0.0-next.6(@angular/compiler@22.0.0-next.6)(typescript@6.0.2))(@angular/compiler@22.0.0-next.6)': dependencies: - '@angular/compiler': 22.0.0-next.5 - '@angular/compiler-cli': 22.0.0-next.5(@angular/compiler@22.0.0-next.5)(typescript@6.0.2) + '@angular/compiler': 22.0.0-next.6 + '@angular/compiler-cli': 22.0.0-next.6(@angular/compiler@22.0.0-next.6)(typescript@6.0.2) '@babel/core': 7.29.0 '@types/babel__core': 7.20.5 tinyglobby: 0.2.15 @@ -8528,22 +8532,22 @@ snapshots: transitivePeerDependencies: - supports-color - '@angular/material@22.0.0-next.2(2f6ce0790131a0100070320bdabac3a2)': + '@angular/material@22.0.0-next.3(2e9636f7d8dd68137b51ac62db842fa5)': dependencies: - '@angular/cdk': 22.0.0-next.2(@angular/common@22.0.0-next.5(@angular/core@22.0.0-next.5(@angular/compiler@22.0.0-next.5)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.5(@angular/compiler@22.0.0-next.5)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@22.0.0-next.5(@angular/animations@22.0.0-next.5(@angular/core@22.0.0-next.5(@angular/compiler@22.0.0-next.5)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@22.0.0-next.5(@angular/core@22.0.0-next.5(@angular/compiler@22.0.0-next.5)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.5(@angular/compiler@22.0.0-next.5)(rxjs@7.8.2)(zone.js@0.16.1)))(rxjs@7.8.2) - '@angular/common': 22.0.0-next.5(@angular/core@22.0.0-next.5(@angular/compiler@22.0.0-next.5)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2) - '@angular/core': 22.0.0-next.5(@angular/compiler@22.0.0-next.5)(rxjs@7.8.2)(zone.js@0.16.1) - '@angular/forms': 22.0.0-next.5(@angular/common@22.0.0-next.5(@angular/core@22.0.0-next.5(@angular/compiler@22.0.0-next.5)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.5(@angular/compiler@22.0.0-next.5)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@22.0.0-next.5(@angular/animations@22.0.0-next.5(@angular/core@22.0.0-next.5(@angular/compiler@22.0.0-next.5)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@22.0.0-next.5(@angular/core@22.0.0-next.5(@angular/compiler@22.0.0-next.5)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.5(@angular/compiler@22.0.0-next.5)(rxjs@7.8.2)(zone.js@0.16.1)))(rxjs@7.8.2) - '@angular/platform-browser': 22.0.0-next.5(@angular/animations@22.0.0-next.5(@angular/core@22.0.0-next.5(@angular/compiler@22.0.0-next.5)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@22.0.0-next.5(@angular/core@22.0.0-next.5(@angular/compiler@22.0.0-next.5)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.5(@angular/compiler@22.0.0-next.5)(rxjs@7.8.2)(zone.js@0.16.1)) + '@angular/cdk': 22.0.0-next.3(@angular/common@22.0.0-next.6(@angular/core@22.0.0-next.6(@angular/compiler@22.0.0-next.6)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.6(@angular/compiler@22.0.0-next.6)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@22.0.0-next.6(@angular/animations@22.0.0-next.6(@angular/core@22.0.0-next.6(@angular/compiler@22.0.0-next.6)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@22.0.0-next.6(@angular/core@22.0.0-next.6(@angular/compiler@22.0.0-next.6)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.6(@angular/compiler@22.0.0-next.6)(rxjs@7.8.2)(zone.js@0.16.1)))(rxjs@7.8.2) + '@angular/common': 22.0.0-next.6(@angular/core@22.0.0-next.6(@angular/compiler@22.0.0-next.6)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2) + '@angular/core': 22.0.0-next.6(@angular/compiler@22.0.0-next.6)(rxjs@7.8.2)(zone.js@0.16.1) + '@angular/forms': 22.0.0-next.6(@angular/common@22.0.0-next.6(@angular/core@22.0.0-next.6(@angular/compiler@22.0.0-next.6)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.6(@angular/compiler@22.0.0-next.6)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@22.0.0-next.6(@angular/animations@22.0.0-next.6(@angular/core@22.0.0-next.6(@angular/compiler@22.0.0-next.6)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@22.0.0-next.6(@angular/core@22.0.0-next.6(@angular/compiler@22.0.0-next.6)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.6(@angular/compiler@22.0.0-next.6)(rxjs@7.8.2)(zone.js@0.16.1)))(rxjs@7.8.2) + '@angular/platform-browser': 22.0.0-next.6(@angular/animations@22.0.0-next.6(@angular/core@22.0.0-next.6(@angular/compiler@22.0.0-next.6)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@22.0.0-next.6(@angular/core@22.0.0-next.6(@angular/compiler@22.0.0-next.6)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.6(@angular/compiler@22.0.0-next.6)(rxjs@7.8.2)(zone.js@0.16.1)) rxjs: 7.8.2 tslib: 2.8.1 - '@angular/ng-dev@https://codeload.github.com/angular/dev-infra-private-ng-dev-builds/tar.gz/cdbe118e59f59b1ee00ff77a5ccf8c5328248d03(@modelcontextprotocol/sdk@1.28.0(zod@4.3.6))': + '@angular/ng-dev@https://codeload.github.com/angular/dev-infra-private-ng-dev-builds/tar.gz/6ad9d06fa01e41fdf5262093ddd37667fffbf17b(@modelcontextprotocol/sdk@1.28.0(zod@4.3.6))': dependencies: '@actions/core': 3.0.0 '@conventional-changelog/git-client': 2.6.0(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.4.0) '@google-cloud/spanner': 8.0.0(supports-color@10.2.2) - '@google/genai': 1.47.0(@modelcontextprotocol/sdk@1.28.0(zod@4.3.6))(bufferutil@4.1.0)(supports-color@10.2.2)(utf-8-validate@6.0.6) + '@google/genai': 1.48.0(@modelcontextprotocol/sdk@1.28.0(zod@4.3.6))(bufferutil@4.1.0)(supports-color@10.2.2)(utf-8-validate@6.0.6) '@inquirer/prompts': 8.3.2(@types/node@24.12.0) '@inquirer/type': 4.0.4(@types/node@24.12.0) '@octokit/auth-app': 8.2.0 @@ -8581,7 +8585,7 @@ snapshots: jasmine-core: 6.1.0 jasmine-reporters: 2.5.2 jsonc-parser: 3.3.1 - minimatch: 10.2.4 + minimatch: 10.2.5 multimatch: 8.0.0 nock: 14.0.11 semver: 7.7.4 @@ -8598,35 +8602,35 @@ snapshots: - '@modelcontextprotocol/sdk' - '@react-native-async-storage/async-storage' - '@angular/platform-browser@22.0.0-next.5(@angular/animations@22.0.0-next.5(@angular/core@22.0.0-next.5(@angular/compiler@22.0.0-next.5)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@22.0.0-next.5(@angular/core@22.0.0-next.5(@angular/compiler@22.0.0-next.5)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.5(@angular/compiler@22.0.0-next.5)(rxjs@7.8.2)(zone.js@0.16.1))': + '@angular/platform-browser@22.0.0-next.6(@angular/animations@22.0.0-next.6(@angular/core@22.0.0-next.6(@angular/compiler@22.0.0-next.6)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@22.0.0-next.6(@angular/core@22.0.0-next.6(@angular/compiler@22.0.0-next.6)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.6(@angular/compiler@22.0.0-next.6)(rxjs@7.8.2)(zone.js@0.16.1))': dependencies: - '@angular/common': 22.0.0-next.5(@angular/core@22.0.0-next.5(@angular/compiler@22.0.0-next.5)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2) - '@angular/core': 22.0.0-next.5(@angular/compiler@22.0.0-next.5)(rxjs@7.8.2)(zone.js@0.16.1) + '@angular/common': 22.0.0-next.6(@angular/core@22.0.0-next.6(@angular/compiler@22.0.0-next.6)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2) + '@angular/core': 22.0.0-next.6(@angular/compiler@22.0.0-next.6)(rxjs@7.8.2)(zone.js@0.16.1) tslib: 2.8.1 optionalDependencies: - '@angular/animations': 22.0.0-next.5(@angular/core@22.0.0-next.5(@angular/compiler@22.0.0-next.5)(rxjs@7.8.2)(zone.js@0.16.1)) + '@angular/animations': 22.0.0-next.6(@angular/core@22.0.0-next.6(@angular/compiler@22.0.0-next.6)(rxjs@7.8.2)(zone.js@0.16.1)) - '@angular/platform-server@22.0.0-next.5(@angular/common@22.0.0-next.5(@angular/core@22.0.0-next.5(@angular/compiler@22.0.0-next.5)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/compiler@22.0.0-next.5)(@angular/core@22.0.0-next.5(@angular/compiler@22.0.0-next.5)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@22.0.0-next.5(@angular/animations@22.0.0-next.5(@angular/core@22.0.0-next.5(@angular/compiler@22.0.0-next.5)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@22.0.0-next.5(@angular/core@22.0.0-next.5(@angular/compiler@22.0.0-next.5)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.5(@angular/compiler@22.0.0-next.5)(rxjs@7.8.2)(zone.js@0.16.1)))(rxjs@7.8.2)': + '@angular/platform-server@22.0.0-next.6(@angular/common@22.0.0-next.6(@angular/core@22.0.0-next.6(@angular/compiler@22.0.0-next.6)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/compiler@22.0.0-next.6)(@angular/core@22.0.0-next.6(@angular/compiler@22.0.0-next.6)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@22.0.0-next.6(@angular/animations@22.0.0-next.6(@angular/core@22.0.0-next.6(@angular/compiler@22.0.0-next.6)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@22.0.0-next.6(@angular/core@22.0.0-next.6(@angular/compiler@22.0.0-next.6)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.6(@angular/compiler@22.0.0-next.6)(rxjs@7.8.2)(zone.js@0.16.1)))(rxjs@7.8.2)': dependencies: - '@angular/common': 22.0.0-next.5(@angular/core@22.0.0-next.5(@angular/compiler@22.0.0-next.5)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2) - '@angular/compiler': 22.0.0-next.5 - '@angular/core': 22.0.0-next.5(@angular/compiler@22.0.0-next.5)(rxjs@7.8.2)(zone.js@0.16.1) - '@angular/platform-browser': 22.0.0-next.5(@angular/animations@22.0.0-next.5(@angular/core@22.0.0-next.5(@angular/compiler@22.0.0-next.5)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@22.0.0-next.5(@angular/core@22.0.0-next.5(@angular/compiler@22.0.0-next.5)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.5(@angular/compiler@22.0.0-next.5)(rxjs@7.8.2)(zone.js@0.16.1)) + '@angular/common': 22.0.0-next.6(@angular/core@22.0.0-next.6(@angular/compiler@22.0.0-next.6)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2) + '@angular/compiler': 22.0.0-next.6 + '@angular/core': 22.0.0-next.6(@angular/compiler@22.0.0-next.6)(rxjs@7.8.2)(zone.js@0.16.1) + '@angular/platform-browser': 22.0.0-next.6(@angular/animations@22.0.0-next.6(@angular/core@22.0.0-next.6(@angular/compiler@22.0.0-next.6)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@22.0.0-next.6(@angular/core@22.0.0-next.6(@angular/compiler@22.0.0-next.6)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.6(@angular/compiler@22.0.0-next.6)(rxjs@7.8.2)(zone.js@0.16.1)) rxjs: 7.8.2 tslib: 2.8.1 xhr2: 0.2.1 - '@angular/router@22.0.0-next.5(@angular/common@22.0.0-next.5(@angular/core@22.0.0-next.5(@angular/compiler@22.0.0-next.5)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.5(@angular/compiler@22.0.0-next.5)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@22.0.0-next.5(@angular/animations@22.0.0-next.5(@angular/core@22.0.0-next.5(@angular/compiler@22.0.0-next.5)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@22.0.0-next.5(@angular/core@22.0.0-next.5(@angular/compiler@22.0.0-next.5)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.5(@angular/compiler@22.0.0-next.5)(rxjs@7.8.2)(zone.js@0.16.1)))(rxjs@7.8.2)': + '@angular/router@22.0.0-next.6(@angular/common@22.0.0-next.6(@angular/core@22.0.0-next.6(@angular/compiler@22.0.0-next.6)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.6(@angular/compiler@22.0.0-next.6)(rxjs@7.8.2)(zone.js@0.16.1))(@angular/platform-browser@22.0.0-next.6(@angular/animations@22.0.0-next.6(@angular/core@22.0.0-next.6(@angular/compiler@22.0.0-next.6)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@22.0.0-next.6(@angular/core@22.0.0-next.6(@angular/compiler@22.0.0-next.6)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.6(@angular/compiler@22.0.0-next.6)(rxjs@7.8.2)(zone.js@0.16.1)))(rxjs@7.8.2)': dependencies: - '@angular/common': 22.0.0-next.5(@angular/core@22.0.0-next.5(@angular/compiler@22.0.0-next.5)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2) - '@angular/core': 22.0.0-next.5(@angular/compiler@22.0.0-next.5)(rxjs@7.8.2)(zone.js@0.16.1) - '@angular/platform-browser': 22.0.0-next.5(@angular/animations@22.0.0-next.5(@angular/core@22.0.0-next.5(@angular/compiler@22.0.0-next.5)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@22.0.0-next.5(@angular/core@22.0.0-next.5(@angular/compiler@22.0.0-next.5)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.5(@angular/compiler@22.0.0-next.5)(rxjs@7.8.2)(zone.js@0.16.1)) + '@angular/common': 22.0.0-next.6(@angular/core@22.0.0-next.6(@angular/compiler@22.0.0-next.6)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2) + '@angular/core': 22.0.0-next.6(@angular/compiler@22.0.0-next.6)(rxjs@7.8.2)(zone.js@0.16.1) + '@angular/platform-browser': 22.0.0-next.6(@angular/animations@22.0.0-next.6(@angular/core@22.0.0-next.6(@angular/compiler@22.0.0-next.6)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@22.0.0-next.6(@angular/core@22.0.0-next.6(@angular/compiler@22.0.0-next.6)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.6(@angular/compiler@22.0.0-next.6)(rxjs@7.8.2)(zone.js@0.16.1)) rxjs: 7.8.2 tslib: 2.8.1 - '@angular/service-worker@22.0.0-next.5(@angular/core@22.0.0-next.5(@angular/compiler@22.0.0-next.5)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2)': + '@angular/service-worker@22.0.0-next.6(@angular/core@22.0.0-next.6(@angular/compiler@22.0.0-next.6)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2)': dependencies: - '@angular/core': 22.0.0-next.5(@angular/compiler@22.0.0-next.5)(rxjs@7.8.2)(zone.js@0.16.1) + '@angular/core': 22.0.0-next.6(@angular/compiler@22.0.0-next.6)(rxjs@7.8.2)(zone.js@0.16.1) rxjs: 7.8.2 tslib: 2.8.1 @@ -9903,7 +9907,7 @@ snapshots: transitivePeerDependencies: - supports-color - '@google/genai@1.47.0(@modelcontextprotocol/sdk@1.28.0(zod@4.3.6))(bufferutil@4.1.0)(supports-color@10.2.2)(utf-8-validate@6.0.6)': + '@google/genai@1.48.0(@modelcontextprotocol/sdk@1.28.0(zod@4.3.6))(bufferutil@4.1.0)(supports-color@10.2.2)(utf-8-validate@6.0.6)': dependencies: google-auth-library: 10.6.2(supports-color@10.2.2) p-retry: 4.6.2 @@ -14635,6 +14639,10 @@ snapshots: dependencies: brace-expansion: 5.0.5 + minimatch@10.2.5: + dependencies: + brace-expansion: 5.0.5 + minimatch@3.1.5: dependencies: brace-expansion: 1.1.13 @@ -14731,7 +14739,7 @@ snapshots: dependencies: array-differ: 4.0.0 array-union: 3.0.1 - minimatch: 10.2.4 + minimatch: 10.2.5 mute-stream@3.0.0: {} @@ -14755,10 +14763,10 @@ snapshots: netmask@2.0.2: {} - ng-packagr@22.0.0-next.1(@angular/compiler-cli@22.0.0-next.5(@angular/compiler@22.0.0-next.5)(typescript@6.0.2))(tslib@2.8.1)(typescript@6.0.2): + ng-packagr@22.0.0-next.1(@angular/compiler-cli@22.0.0-next.6(@angular/compiler@22.0.0-next.6)(typescript@6.0.2))(tslib@2.8.1)(typescript@6.0.2): dependencies: '@ampproject/remapping': 2.3.0 - '@angular/compiler-cli': 22.0.0-next.5(@angular/compiler@22.0.0-next.5)(typescript@6.0.2) + '@angular/compiler-cli': 22.0.0-next.6(@angular/compiler@22.0.0-next.6)(typescript@6.0.2) '@rollup/plugin-json': 6.1.0(rollup@4.60.0) '@rollup/wasm-node': 4.60.0 ajv: 8.18.0 diff --git a/tests/e2e/ng-snapshot/package.json b/tests/e2e/ng-snapshot/package.json index 449ef9251b81..ef8a9ba49137 100644 --- a/tests/e2e/ng-snapshot/package.json +++ b/tests/e2e/ng-snapshot/package.json @@ -2,21 +2,21 @@ "description": "snapshot versions of Angular for e2e testing", "private": true, "dependencies": { - "@angular/animations": "github:angular/animations-builds#78f5b07aa81809624738b3e0905b5ee58ed224cd", - "@angular/cdk": "github:angular/cdk-builds#2200299cdc1929a0948614220bcced1e8817cd63", - "@angular/common": "github:angular/common-builds#b7cc603eb69721539e39885b2ee8a2ccdc1a7edd", - "@angular/compiler": "github:angular/compiler-builds#550f342f0a294f1d49841ddda8587731afa971c0", - "@angular/compiler-cli": "github:angular/compiler-cli-builds#cb25a8cbb9c4177b91b796bdfa5ded37e100d151", - "@angular/core": "github:angular/core-builds#5f682b0343bd5960f1242234b0a83d7e343c6b53", - "@angular/forms": "github:angular/forms-builds#2e61fc46841406f54817cc9c3d841211ea2dd9c5", - "@angular/language-service": "github:angular/language-service-builds#b41881d56352df21e88b72f3c34afe1448a03bfe", - "@angular/localize": "github:angular/localize-builds#f9436b3535a415720126f7573e4117e803adda44", - "@angular/material": "github:angular/material-builds#a162deacfbf67b31728ec2e717cb24a9cba2f5c4", - "@angular/material-moment-adapter": "github:angular/material-moment-adapter-builds#2c6929a61bd9a0e9d550c062925c40052d7919cb", - "@angular/platform-browser": "github:angular/platform-browser-builds#09a62f5c5fbc5ee90b39f8b3c82694c76e659062", - "@angular/platform-browser-dynamic": "github:angular/platform-browser-dynamic-builds#cacb47f942e671ae357af400a9bfac557a4fd8b8", - "@angular/platform-server": "github:angular/platform-server-builds#72b297f8d749a88aed72bff97ac35c5febc10ef8", - "@angular/router": "github:angular/router-builds#f56cafe22b3005a22505313edc5ab6b39532a953", - "@angular/service-worker": "github:angular/service-worker-builds#2ddf016fa7e1e852c98277e337b4add7559ccc8f" + "@angular/animations": "github:angular/animations-builds#19721b4d4d5bebe6e1d4111667f96fe0cf158c54", + "@angular/cdk": "github:angular/cdk-builds#cebd4fb52989b094cbd8a09c7066f122bbdb414d", + "@angular/common": "github:angular/common-builds#423475b7af1dc1d0ee34ba891fb51c33321653c7", + "@angular/compiler": "github:angular/compiler-builds#26f1227a6d6de072c773a55c1265c7a01c376a93", + "@angular/compiler-cli": "github:angular/compiler-cli-builds#317cbd99244bbeca9b1f9adf7519f2195f77b7eb", + "@angular/core": "github:angular/core-builds#90ca995a80b08432e89c35f7bd6338055f2175b1", + "@angular/forms": "github:angular/forms-builds#b240d76e977da6b6429907fe39af2b765c9e0ea4", + "@angular/language-service": "github:angular/language-service-builds#35feb90926708443ab2969e7a84fcae4d0582bbf", + "@angular/localize": "github:angular/localize-builds#178b3dea37cb8168a8d1185262e240f144c4eb25", + "@angular/material": "github:angular/material-builds#b48994a944ee2b02c280ff063078333749583bcd", + "@angular/material-moment-adapter": "github:angular/material-moment-adapter-builds#7c67d4ea11c343eef33ac8a80df0bd3347e21d62", + "@angular/platform-browser": "github:angular/platform-browser-builds#ed69feebecc46b1eb7d83ee223ec5b6d066a0f57", + "@angular/platform-browser-dynamic": "github:angular/platform-browser-dynamic-builds#833c662d7f1a0d266dd6c39e428223f3b7a98be8", + "@angular/platform-server": "github:angular/platform-server-builds#19ad5e890cef716d729035ac36f95aeffe5267ee", + "@angular/router": "github:angular/router-builds#c82d1262600fd8d168d2b3a5991e141887b8fda0", + "@angular/service-worker": "github:angular/service-worker-builds#e32acb1be1c8ee4a4b65817e653751d199951b9e" } } From feafdbdea63ef7975eda55607d1af5a9fb7ef740 Mon Sep 17 00:00:00 2001 From: Alan Agius Date: Wed, 8 Apr 2026 18:12:27 +0200 Subject: [PATCH 217/226] docs: add spam policy and saved reply Introduces a new spam policy in CONTRIBUTING.md limiting community contributors to no more than 3 open PRs simultaneously to better manage team resources and triage efforts. Also adds a corresponding saved reply for closing excessive issues/PRs. --- .github/SAVED_REPLIES.md | 10 ++++++++++ CONTRIBUTING.md | 5 ++++- docs/DEVELOPER.md | 2 +- scripts/templates/contributing.ejs | 5 ++++- scripts/validate.mts | 2 +- 5 files changed, 20 insertions(+), 4 deletions(-) diff --git a/.github/SAVED_REPLIES.md b/.github/SAVED_REPLIES.md index 1237bc279e11..dfce61802c0e 100644 --- a/.github/SAVED_REPLIES.md +++ b/.github/SAVED_REPLIES.md @@ -99,3 +99,13 @@ I'd like to remind everyone that **you only have reproducible installs if you us **It is your responsibility as a library consumer to use lockfiles**. No one wants to do a release with bugs but it sometimes happens, and the best we can do is to fix it as fast as possible with a new release. When you have a couple of thousand total dependencies it is only a matter of time until one of them has a bad release. ``` + +## Angular CLI: Spam (v1) + +``` +Woah, looks like you've opened a lot of issues/PRs recently. While we appreciate contributions from the community, triaging and reviewing a large influx of content in a short time period takes time away from other ongoing projects. As a result, we're closing these issues/PRs to maintain the team's focus. + +Note that this is not necessarily a rejection of the goals or direction of any of these contributions in particular, so much as a reflection of the team's current capacity and priorities. + +You are welcome to open a smaller subset of issues/PRs in accordance with [our policy](https://github.com/angular/angular/blob/main/contributing-docs/spam.md) focused on the most important and impactful contributions and we will do our best to prioritize a response as soon as possible. +``` diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index e3b2d4fe1bb2..8b57f53f5584 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -12,7 +12,7 @@ to follow: - [Coding Rules](#rules) - [Commit Message Guidelines](#commit) - [Signing the CLA](#cla) - - [Updating the Public API](#public-api) + - [Spam Policy](#spam-policy) ## Code of Conduct Help us keep Angular open and inclusive. Please read and follow our [Code of Conduct][coc]. @@ -289,6 +289,9 @@ changes to be accepted, the CLA must be signed. It's a quick process, we promise * For corporations we'll need you to [print, sign and one of scan+email, fax or mail the form][corporate-cla]. +## Spam Policy + +See [Spam Policy](https://github.com/angular/angular/blob/main/contributing-docs/spam.md) for details. [coc]: https://github.com/angular/code-of-conduct/blob/main/CODE_OF_CONDUCT.md [commit-message-format]: https://docs.google.com/document/d/1QrDFcIiPjSLDn3EL15IJygNPiHORgU1_OOAqWjiDU5Y/edit# diff --git a/docs/DEVELOPER.md b/docs/DEVELOPER.md index 075ddbcf9ca3..35b07adf1e89 100644 --- a/docs/DEVELOPER.md +++ b/docs/DEVELOPER.md @@ -168,7 +168,7 @@ Adding a package to this repository means running two separate commands: 1. `schematics devkit:package PACKAGE_NAME`. This will update the `.monorepo` file, and create the base files for the new package (package.json, src/index, etc). -1. `devkit-admin templates`. This will update the README and all other template files that might +1. `pnpm admin templates`. This will update the README and all other template files that might have changed when adding a new package. For private packages, you will need to add a `"private": true` key to your package.json manually. diff --git a/scripts/templates/contributing.ejs b/scripts/templates/contributing.ejs index d0eb7a59cee2..9b5fefd4ae46 100644 --- a/scripts/templates/contributing.ejs +++ b/scripts/templates/contributing.ejs @@ -12,7 +12,7 @@ to follow: - [Coding Rules](#rules) - [Commit Message Guidelines](#commit) - [Signing the CLA](#cla) - - [Updating the Public API](#public-api) + - [Spam Policy](#spam-policy) ## Code of Conduct Help us keep Angular open and inclusive. Please read and follow our [Code of Conduct][coc]. @@ -280,6 +280,9 @@ changes to be accepted, the CLA must be signed. It's a quick process, we promise * For corporations we'll need you to [print, sign and one of scan+email, fax or mail the form][corporate-cla]. +## Spam Policy + +See [Spam Policy](https://github.com/angular/angular/blob/main/contributing-docs/spam.md) for details. [coc]: https://github.com/angular/code-of-conduct/blob/main/CODE_OF_CONDUCT.md [commit-message-format]: https://docs.google.com/document/d/1QrDFcIiPjSLDn3EL15IJygNPiHORgU1_OOAqWjiDU5Y/edit# diff --git a/scripts/validate.mts b/scripts/validate.mts index 70d0f27a31d1..a62ffa16f682 100644 --- a/scripts/validate.mts +++ b/scripts/validate.mts @@ -27,7 +27,7 @@ export default async function (options: { verbose: boolean }) { await templates(); if (execSync(`git status --porcelain`).toString()) { console.error( - 'Running templates updated files... Please run "devkit-admin templates" before submitting a PR.', + 'Running templates updated files... Please run "pnpm admin templates" before submitting a PR.', ); if (!options.verbose) { process.exit(2); From 6ced3dabff73d33fd52addab70262d72816dceb5 Mon Sep 17 00:00:00 2001 From: Angular Robot Date: Wed, 8 Apr 2026 15:31:48 +0000 Subject: [PATCH 218/226] build: update cross-repo angular dependencies See associated pull request for more information. --- .../assistant-to-the-branch-manager.yml | 2 +- .github/workflows/ci.yml | 52 +++++++++---------- .github/workflows/dev-infra.yml | 6 +-- .github/workflows/perf.yml | 6 +-- .github/workflows/pr.yml | 44 ++++++++-------- MODULE.bazel | 2 +- package.json | 2 +- pnpm-lock.yaml | 14 ++--- tests/e2e/ng-snapshot/package.json | 26 +++++----- 9 files changed, 77 insertions(+), 77 deletions(-) diff --git a/.github/workflows/assistant-to-the-branch-manager.yml b/.github/workflows/assistant-to-the-branch-manager.yml index b51ed0f34edc..87519e50b728 100644 --- a/.github/workflows/assistant-to-the-branch-manager.yml +++ b/.github/workflows/assistant-to-the-branch-manager.yml @@ -17,6 +17,6 @@ jobs: - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 with: persist-credentials: false - - uses: angular/dev-infra/github-actions/branch-manager@acb5aee837b1e7324967d8a31c74093a51eccd97 + - uses: angular/dev-infra/github-actions/branch-manager@ba726e7bca0b08b125ccc6f93c233749e1213c17 with: angular-robot-key: ${{ secrets.ANGULAR_ROBOT_PRIVATE_KEY }} diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 0023e3d6650f..1617dbb0d061 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -21,9 +21,9 @@ jobs: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@acb5aee837b1e7324967d8a31c74093a51eccd97 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@ba726e7bca0b08b125ccc6f93c233749e1213c17 - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@acb5aee837b1e7324967d8a31c74093a51eccd97 + uses: angular/dev-infra/github-actions/bazel/setup@ba726e7bca0b08b125ccc6f93c233749e1213c17 - name: Install node modules run: pnpm install --frozen-lockfile - name: Generate JSON schema types @@ -44,11 +44,11 @@ jobs: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@acb5aee837b1e7324967d8a31c74093a51eccd97 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@ba726e7bca0b08b125ccc6f93c233749e1213c17 - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@acb5aee837b1e7324967d8a31c74093a51eccd97 + uses: angular/dev-infra/github-actions/bazel/setup@ba726e7bca0b08b125ccc6f93c233749e1213c17 - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@acb5aee837b1e7324967d8a31c74093a51eccd97 + uses: angular/dev-infra/github-actions/bazel/configure-remote@ba726e7bca0b08b125ccc6f93c233749e1213c17 with: google_credential: ${{ secrets.RBE_TRUSTED_BUILDS_USER }} - name: Install node modules @@ -61,11 +61,11 @@ jobs: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@acb5aee837b1e7324967d8a31c74093a51eccd97 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@ba726e7bca0b08b125ccc6f93c233749e1213c17 - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@acb5aee837b1e7324967d8a31c74093a51eccd97 + uses: angular/dev-infra/github-actions/bazel/setup@ba726e7bca0b08b125ccc6f93c233749e1213c17 - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@acb5aee837b1e7324967d8a31c74093a51eccd97 + uses: angular/dev-infra/github-actions/bazel/configure-remote@ba726e7bca0b08b125ccc6f93c233749e1213c17 with: google_credential: ${{ secrets.RBE_TRUSTED_BUILDS_USER }} - name: Install node modules @@ -84,13 +84,13 @@ jobs: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@acb5aee837b1e7324967d8a31c74093a51eccd97 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@ba726e7bca0b08b125ccc6f93c233749e1213c17 - name: Install node modules run: pnpm install --frozen-lockfile - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@acb5aee837b1e7324967d8a31c74093a51eccd97 + uses: angular/dev-infra/github-actions/bazel/setup@ba726e7bca0b08b125ccc6f93c233749e1213c17 - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@acb5aee837b1e7324967d8a31c74093a51eccd97 + uses: angular/dev-infra/github-actions/bazel/configure-remote@ba726e7bca0b08b125ccc6f93c233749e1213c17 with: google_credential: ${{ secrets.RBE_TRUSTED_BUILDS_USER }} - name: Run CLI E2E tests @@ -100,11 +100,11 @@ jobs: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@acb5aee837b1e7324967d8a31c74093a51eccd97 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@ba726e7bca0b08b125ccc6f93c233749e1213c17 - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@acb5aee837b1e7324967d8a31c74093a51eccd97 + uses: angular/dev-infra/github-actions/bazel/setup@ba726e7bca0b08b125ccc6f93c233749e1213c17 - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@acb5aee837b1e7324967d8a31c74093a51eccd97 + uses: angular/dev-infra/github-actions/bazel/configure-remote@ba726e7bca0b08b125ccc6f93c233749e1213c17 with: google_credential: ${{ secrets.RBE_TRUSTED_BUILDS_USER }} - name: Install node modules @@ -137,7 +137,7 @@ jobs: runs-on: windows-2025 steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@acb5aee837b1e7324967d8a31c74093a51eccd97 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@ba726e7bca0b08b125ccc6f93c233749e1213c17 - name: Install node modules run: pnpm install --frozen-lockfile - name: Download built Windows E2E tests @@ -164,13 +164,13 @@ jobs: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@acb5aee837b1e7324967d8a31c74093a51eccd97 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@ba726e7bca0b08b125ccc6f93c233749e1213c17 - name: Install node modules run: pnpm install --frozen-lockfile - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@acb5aee837b1e7324967d8a31c74093a51eccd97 + uses: angular/dev-infra/github-actions/bazel/setup@ba726e7bca0b08b125ccc6f93c233749e1213c17 - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@acb5aee837b1e7324967d8a31c74093a51eccd97 + uses: angular/dev-infra/github-actions/bazel/configure-remote@ba726e7bca0b08b125ccc6f93c233749e1213c17 with: google_credential: ${{ secrets.RBE_TRUSTED_BUILDS_USER }} - name: Run CLI E2E tests @@ -188,13 +188,13 @@ jobs: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@acb5aee837b1e7324967d8a31c74093a51eccd97 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@ba726e7bca0b08b125ccc6f93c233749e1213c17 - name: Install node modules run: pnpm install --frozen-lockfile - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@acb5aee837b1e7324967d8a31c74093a51eccd97 + uses: angular/dev-infra/github-actions/bazel/setup@ba726e7bca0b08b125ccc6f93c233749e1213c17 - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@acb5aee837b1e7324967d8a31c74093a51eccd97 + uses: angular/dev-infra/github-actions/bazel/configure-remote@ba726e7bca0b08b125ccc6f93c233749e1213c17 with: google_credential: ${{ secrets.RBE_TRUSTED_BUILDS_USER }} - name: Run CLI E2E tests @@ -208,13 +208,13 @@ jobs: SAUCE_TUNNEL_IDENTIFIER: angular-cli-${{ github.workflow }}-${{ github.run_number }} steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@acb5aee837b1e7324967d8a31c74093a51eccd97 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@ba726e7bca0b08b125ccc6f93c233749e1213c17 - name: Install node modules run: pnpm install --frozen-lockfile - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@acb5aee837b1e7324967d8a31c74093a51eccd97 + uses: angular/dev-infra/github-actions/bazel/setup@ba726e7bca0b08b125ccc6f93c233749e1213c17 - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@acb5aee837b1e7324967d8a31c74093a51eccd97 + uses: angular/dev-infra/github-actions/bazel/configure-remote@ba726e7bca0b08b125ccc6f93c233749e1213c17 with: google_credential: ${{ secrets.RBE_TRUSTED_BUILDS_USER }} - name: Run E2E Browser tests @@ -244,11 +244,11 @@ jobs: CIRCLE_BRANCH: ${{ github.ref_name }} steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@acb5aee837b1e7324967d8a31c74093a51eccd97 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@ba726e7bca0b08b125ccc6f93c233749e1213c17 - name: Install node modules run: pnpm install --frozen-lockfile - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@acb5aee837b1e7324967d8a31c74093a51eccd97 + uses: angular/dev-infra/github-actions/bazel/setup@ba726e7bca0b08b125ccc6f93c233749e1213c17 - run: pnpm admin snapshots --verbose env: SNAPSHOT_BUILDS_GITHUB_TOKEN: ${{ secrets.SNAPSHOT_BUILDS_GITHUB_TOKEN }} diff --git a/.github/workflows/dev-infra.yml b/.github/workflows/dev-infra.yml index e589e99b0be4..8336a6ba0f4d 100644 --- a/.github/workflows/dev-infra.yml +++ b/.github/workflows/dev-infra.yml @@ -15,21 +15,21 @@ jobs: if: github.event_name == 'pull_request_target' runs-on: ubuntu-latest steps: - - uses: angular/dev-infra/github-actions/labeling/pull-request@acb5aee837b1e7324967d8a31c74093a51eccd97 + - uses: angular/dev-infra/github-actions/labeling/pull-request@ba726e7bca0b08b125ccc6f93c233749e1213c17 with: angular-robot-key: ${{ secrets.ANGULAR_ROBOT_PRIVATE_KEY }} post_approval_changes: if: github.event_name == 'pull_request_target' runs-on: ubuntu-latest steps: - - uses: angular/dev-infra/github-actions/post-approval-changes@acb5aee837b1e7324967d8a31c74093a51eccd97 + - uses: angular/dev-infra/github-actions/post-approval-changes@ba726e7bca0b08b125ccc6f93c233749e1213c17 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@acb5aee837b1e7324967d8a31c74093a51eccd97 + - uses: angular/dev-infra/github-actions/labeling/issue@ba726e7bca0b08b125ccc6f93c233749e1213c17 with: angular-robot-key: ${{ secrets.ANGULAR_ROBOT_PRIVATE_KEY }} google-generative-ai-key: ${{ secrets.GOOGLE_GENERATIVE_AI_KEY }} diff --git a/.github/workflows/perf.yml b/.github/workflows/perf.yml index b53286d2c660..dac67ebcbe7f 100644 --- a/.github/workflows/perf.yml +++ b/.github/workflows/perf.yml @@ -23,7 +23,7 @@ jobs: workflows: ${{ steps.workflows.outputs.workflows }} steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@acb5aee837b1e7324967d8a31c74093a51eccd97 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@ba726e7bca0b08b125ccc6f93c233749e1213c17 - name: Install node modules run: pnpm install --frozen-lockfile - id: workflows @@ -38,9 +38,9 @@ jobs: workflow: ${{ fromJSON(needs.list.outputs.workflows) }} steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@acb5aee837b1e7324967d8a31c74093a51eccd97 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@ba726e7bca0b08b125ccc6f93c233749e1213c17 - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@acb5aee837b1e7324967d8a31c74093a51eccd97 + uses: angular/dev-infra/github-actions/bazel/setup@ba726e7bca0b08b125ccc6f93c233749e1213c17 - name: Install node modules run: pnpm install --frozen-lockfile # We utilize the google-github-actions/auth action to allow us to get an active credential using workflow diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml index 6204bc0636e9..1015afa28ef7 100644 --- a/.github/workflows/pr.yml +++ b/.github/workflows/pr.yml @@ -34,9 +34,9 @@ jobs: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@acb5aee837b1e7324967d8a31c74093a51eccd97 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@ba726e7bca0b08b125ccc6f93c233749e1213c17 - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@acb5aee837b1e7324967d8a31c74093a51eccd97 + uses: angular/dev-infra/github-actions/bazel/setup@ba726e7bca0b08b125ccc6f93c233749e1213c17 - name: Setup ESLint Caching uses: actions/cache@668228422ae6a00e4ad889ee87cd7109ec5666a7 # v5.0.4 with: @@ -66,17 +66,17 @@ jobs: # it has been merged. run: pnpm ng-dev format changed --check ${{ github.event.pull_request.base.sha }} - name: Check Package Licenses - uses: angular/dev-infra/github-actions/linting/licenses@acb5aee837b1e7324967d8a31c74093a51eccd97 + uses: angular/dev-infra/github-actions/linting/licenses@ba726e7bca0b08b125ccc6f93c233749e1213c17 build: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@acb5aee837b1e7324967d8a31c74093a51eccd97 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@ba726e7bca0b08b125ccc6f93c233749e1213c17 - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@acb5aee837b1e7324967d8a31c74093a51eccd97 + uses: angular/dev-infra/github-actions/bazel/setup@ba726e7bca0b08b125ccc6f93c233749e1213c17 - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@acb5aee837b1e7324967d8a31c74093a51eccd97 + uses: angular/dev-infra/github-actions/bazel/configure-remote@ba726e7bca0b08b125ccc6f93c233749e1213c17 - name: Install node modules run: pnpm install --frozen-lockfile - name: Build release targets @@ -93,11 +93,11 @@ jobs: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@acb5aee837b1e7324967d8a31c74093a51eccd97 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@ba726e7bca0b08b125ccc6f93c233749e1213c17 - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@acb5aee837b1e7324967d8a31c74093a51eccd97 + uses: angular/dev-infra/github-actions/bazel/setup@ba726e7bca0b08b125ccc6f93c233749e1213c17 - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@acb5aee837b1e7324967d8a31c74093a51eccd97 + uses: angular/dev-infra/github-actions/bazel/configure-remote@ba726e7bca0b08b125ccc6f93c233749e1213c17 - name: Install node modules run: pnpm install --frozen-lockfile - name: Run module and package tests @@ -114,13 +114,13 @@ jobs: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@acb5aee837b1e7324967d8a31c74093a51eccd97 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@ba726e7bca0b08b125ccc6f93c233749e1213c17 - name: Install node modules run: pnpm install --frozen-lockfile - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@acb5aee837b1e7324967d8a31c74093a51eccd97 + uses: angular/dev-infra/github-actions/bazel/setup@ba726e7bca0b08b125ccc6f93c233749e1213c17 - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@acb5aee837b1e7324967d8a31c74093a51eccd97 + uses: angular/dev-infra/github-actions/bazel/configure-remote@ba726e7bca0b08b125ccc6f93c233749e1213c17 - name: Run CLI E2E tests run: pnpm bazel test --test_env=E2E_SHARD_TOTAL=6 --test_env=E2E_SHARD_INDEX=${{ matrix.shard }} --config=e2e //tests:e2e.${{ matrix.subset }}_node${{ matrix.node }} @@ -128,11 +128,11 @@ jobs: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@acb5aee837b1e7324967d8a31c74093a51eccd97 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@ba726e7bca0b08b125ccc6f93c233749e1213c17 - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@acb5aee837b1e7324967d8a31c74093a51eccd97 + uses: angular/dev-infra/github-actions/bazel/setup@ba726e7bca0b08b125ccc6f93c233749e1213c17 - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@acb5aee837b1e7324967d8a31c74093a51eccd97 + uses: angular/dev-infra/github-actions/bazel/configure-remote@ba726e7bca0b08b125ccc6f93c233749e1213c17 - name: Install node modules run: pnpm install --frozen-lockfile - name: Build E2E tests for Windows on Linux @@ -156,7 +156,7 @@ jobs: runs-on: windows-2025 steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@acb5aee837b1e7324967d8a31c74093a51eccd97 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@ba726e7bca0b08b125ccc6f93c233749e1213c17 - name: Install node modules run: pnpm install --frozen-lockfile - name: Download built Windows E2E tests @@ -183,13 +183,13 @@ jobs: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@acb5aee837b1e7324967d8a31c74093a51eccd97 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@ba726e7bca0b08b125ccc6f93c233749e1213c17 - name: Install node modules run: pnpm install --frozen-lockfile - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@acb5aee837b1e7324967d8a31c74093a51eccd97 + uses: angular/dev-infra/github-actions/bazel/setup@ba726e7bca0b08b125ccc6f93c233749e1213c17 - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@acb5aee837b1e7324967d8a31c74093a51eccd97 + uses: angular/dev-infra/github-actions/bazel/configure-remote@ba726e7bca0b08b125ccc6f93c233749e1213c17 - name: Run CLI E2E tests run: pnpm bazel test --test_env=E2E_SHARD_TOTAL=3 --test_env=E2E_SHARD_INDEX=${{ matrix.shard }} --config=e2e //tests:e2e.${{ matrix.subset }}_node${{ matrix.node }} @@ -205,12 +205,12 @@ jobs: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@acb5aee837b1e7324967d8a31c74093a51eccd97 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@ba726e7bca0b08b125ccc6f93c233749e1213c17 - name: Install node modules run: pnpm install --frozen-lockfile - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@acb5aee837b1e7324967d8a31c74093a51eccd97 + uses: angular/dev-infra/github-actions/bazel/setup@ba726e7bca0b08b125ccc6f93c233749e1213c17 - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@acb5aee837b1e7324967d8a31c74093a51eccd97 + uses: angular/dev-infra/github-actions/bazel/configure-remote@ba726e7bca0b08b125ccc6f93c233749e1213c17 - name: Run CLI E2E tests run: pnpm bazel test --test_env=E2E_SHARD_TOTAL=6 --test_env=E2E_SHARD_INDEX=${{ matrix.shard }} --config=e2e //tests:e2e.snapshots.${{ matrix.subset }}_node${{ matrix.node }} diff --git a/MODULE.bazel b/MODULE.bazel index 7b9d585446df..034b10ad3e91 100644 --- a/MODULE.bazel +++ b/MODULE.bazel @@ -26,7 +26,7 @@ git_override( bazel_dep(name = "devinfra") git_override( module_name = "devinfra", - commit = "acb5aee837b1e7324967d8a31c74093a51eccd97", + commit = "ba726e7bca0b08b125ccc6f93c233749e1213c17", remote = "https://github.com/angular/dev-infra.git", ) diff --git a/package.json b/package.json index ebedfe08912c..0828b48b0641 100644 --- a/package.json +++ b/package.json @@ -51,7 +51,7 @@ "@angular/forms": "22.0.0-next.6", "@angular/localize": "22.0.0-next.6", "@angular/material": "22.0.0-next.3", - "@angular/ng-dev": "https://github.com/angular/dev-infra-private-ng-dev-builds.git#6ad9d06fa01e41fdf5262093ddd37667fffbf17b", + "@angular/ng-dev": "https://github.com/angular/dev-infra-private-ng-dev-builds.git#1c95e84f330960eea28b5e3ed9b7a6a21b2c605b", "@angular/platform-browser": "22.0.0-next.6", "@angular/platform-server": "22.0.0-next.6", "@angular/router": "22.0.0-next.6", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 4680a5f4da9c..0ca7f08de9de 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -47,8 +47,8 @@ importers: specifier: 22.0.0-next.3 version: 22.0.0-next.3(2e9636f7d8dd68137b51ac62db842fa5) '@angular/ng-dev': - specifier: https://github.com/angular/dev-infra-private-ng-dev-builds.git#6ad9d06fa01e41fdf5262093ddd37667fffbf17b - version: https://codeload.github.com/angular/dev-infra-private-ng-dev-builds/tar.gz/6ad9d06fa01e41fdf5262093ddd37667fffbf17b(@modelcontextprotocol/sdk@1.28.0(zod@4.3.6)) + specifier: https://github.com/angular/dev-infra-private-ng-dev-builds.git#1c95e84f330960eea28b5e3ed9b7a6a21b2c605b + version: https://codeload.github.com/angular/dev-infra-private-ng-dev-builds/tar.gz/1c95e84f330960eea28b5e3ed9b7a6a21b2c605b(@modelcontextprotocol/sdk@1.28.0(zod@4.3.6)) '@angular/platform-browser': specifier: 22.0.0-next.6 version: 22.0.0-next.6(@angular/animations@22.0.0-next.6(@angular/core@22.0.0-next.6(@angular/compiler@22.0.0-next.6)(rxjs@7.8.2)(zone.js@0.16.1)))(@angular/common@22.0.0-next.6(@angular/core@22.0.0-next.6(@angular/compiler@22.0.0-next.6)(rxjs@7.8.2)(zone.js@0.16.1))(rxjs@7.8.2))(@angular/core@22.0.0-next.6(@angular/compiler@22.0.0-next.6)(rxjs@7.8.2)(zone.js@0.16.1)) @@ -1005,9 +1005,9 @@ packages: '@angular/platform-browser': ^22.0.0-0 || ^22.1.0-0 || ^22.2.0-0 || ^22.3.0-0 || ^23.0.0-0 rxjs: ^6.5.3 || ^7.4.0 - '@angular/ng-dev@https://codeload.github.com/angular/dev-infra-private-ng-dev-builds/tar.gz/6ad9d06fa01e41fdf5262093ddd37667fffbf17b': - resolution: {tarball: https://codeload.github.com/angular/dev-infra-private-ng-dev-builds/tar.gz/6ad9d06fa01e41fdf5262093ddd37667fffbf17b} - version: 0.0.0-ef76470f93f00da7e3cdc737d8280d29b9c9b2f2 + '@angular/ng-dev@https://codeload.github.com/angular/dev-infra-private-ng-dev-builds/tar.gz/1c95e84f330960eea28b5e3ed9b7a6a21b2c605b': + resolution: {tarball: https://codeload.github.com/angular/dev-infra-private-ng-dev-builds/tar.gz/1c95e84f330960eea28b5e3ed9b7a6a21b2c605b} + version: 0.0.0-ba726e7bca0b08b125ccc6f93c233749e1213c17 hasBin: true '@angular/platform-browser@22.0.0-next.6': @@ -8542,7 +8542,7 @@ snapshots: rxjs: 7.8.2 tslib: 2.8.1 - '@angular/ng-dev@https://codeload.github.com/angular/dev-infra-private-ng-dev-builds/tar.gz/6ad9d06fa01e41fdf5262093ddd37667fffbf17b(@modelcontextprotocol/sdk@1.28.0(zod@4.3.6))': + '@angular/ng-dev@https://codeload.github.com/angular/dev-infra-private-ng-dev-builds/tar.gz/1c95e84f330960eea28b5e3ed9b7a6a21b2c605b(@modelcontextprotocol/sdk@1.28.0(zod@4.3.6))': dependencies: '@actions/core': 3.0.0 '@conventional-changelog/git-client': 2.6.0(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.4.0) @@ -11073,7 +11073,7 @@ snapshots: '@tufjs/models@4.1.0': dependencies: '@tufjs/canonical-json': 2.0.0 - minimatch: 10.2.4 + minimatch: 10.2.5 '@tybys/wasm-util@0.10.1': dependencies: diff --git a/tests/e2e/ng-snapshot/package.json b/tests/e2e/ng-snapshot/package.json index ef8a9ba49137..45fc68c371a1 100644 --- a/tests/e2e/ng-snapshot/package.json +++ b/tests/e2e/ng-snapshot/package.json @@ -2,21 +2,21 @@ "description": "snapshot versions of Angular for e2e testing", "private": true, "dependencies": { - "@angular/animations": "github:angular/animations-builds#19721b4d4d5bebe6e1d4111667f96fe0cf158c54", + "@angular/animations": "github:angular/animations-builds#846fa4e5df3be559bab7a1dde61c79357dad1e7b", "@angular/cdk": "github:angular/cdk-builds#cebd4fb52989b094cbd8a09c7066f122bbdb414d", - "@angular/common": "github:angular/common-builds#423475b7af1dc1d0ee34ba891fb51c33321653c7", - "@angular/compiler": "github:angular/compiler-builds#26f1227a6d6de072c773a55c1265c7a01c376a93", - "@angular/compiler-cli": "github:angular/compiler-cli-builds#317cbd99244bbeca9b1f9adf7519f2195f77b7eb", - "@angular/core": "github:angular/core-builds#90ca995a80b08432e89c35f7bd6338055f2175b1", - "@angular/forms": "github:angular/forms-builds#b240d76e977da6b6429907fe39af2b765c9e0ea4", - "@angular/language-service": "github:angular/language-service-builds#35feb90926708443ab2969e7a84fcae4d0582bbf", - "@angular/localize": "github:angular/localize-builds#178b3dea37cb8168a8d1185262e240f144c4eb25", + "@angular/common": "github:angular/common-builds#dd62b28298ab0cae7194875a22c1f7572e93368f", + "@angular/compiler": "github:angular/compiler-builds#49daebd5c3980f47d6709364745beb29ea8311b0", + "@angular/compiler-cli": "github:angular/compiler-cli-builds#96202a5e38519f9690f6777d79eb4e7c7300b103", + "@angular/core": "github:angular/core-builds#527aa6c8f7ba845e19d18e1b6bebdbc86745c13c", + "@angular/forms": "github:angular/forms-builds#62cf153ea76ff928b2aee9ecf8413a5311399fe9", + "@angular/language-service": "github:angular/language-service-builds#7dbbdcab2f9d4f669f806cb552bd37b2b3ee43d9", + "@angular/localize": "github:angular/localize-builds#d2be2d564e173ed50c7093d6b8318fbf468cac4b", "@angular/material": "github:angular/material-builds#b48994a944ee2b02c280ff063078333749583bcd", "@angular/material-moment-adapter": "github:angular/material-moment-adapter-builds#7c67d4ea11c343eef33ac8a80df0bd3347e21d62", - "@angular/platform-browser": "github:angular/platform-browser-builds#ed69feebecc46b1eb7d83ee223ec5b6d066a0f57", - "@angular/platform-browser-dynamic": "github:angular/platform-browser-dynamic-builds#833c662d7f1a0d266dd6c39e428223f3b7a98be8", - "@angular/platform-server": "github:angular/platform-server-builds#19ad5e890cef716d729035ac36f95aeffe5267ee", - "@angular/router": "github:angular/router-builds#c82d1262600fd8d168d2b3a5991e141887b8fda0", - "@angular/service-worker": "github:angular/service-worker-builds#e32acb1be1c8ee4a4b65817e653751d199951b9e" + "@angular/platform-browser": "github:angular/platform-browser-builds#2c77aa905f8cd656bf9ad440e2d4b873a0eb52de", + "@angular/platform-browser-dynamic": "github:angular/platform-browser-dynamic-builds#85cca39bf8f16852d3743aa4bb6693018569cda4", + "@angular/platform-server": "github:angular/platform-server-builds#7d788147af4553bf01ae1ef935f64c22f162ab8b", + "@angular/router": "github:angular/router-builds#b0f500845388441750934c548d22ad2e13d65c87", + "@angular/service-worker": "github:angular/service-worker-builds#842dd6d94f1e53b82a9a7810c1e9b48d682653f8" } } From e2f95fc19a648f3da84b58ace91283d0fa422cc1 Mon Sep 17 00:00:00 2001 From: Maruthan G Date: Fri, 27 Mar 2026 15:21:46 +0530 Subject: [PATCH 219/226] fix(@angular/build): show clear error when styleUrl points to a TypeScript file Reject TypeScript files (.ts, .tsx, .mts, .cts) used as component resources in the Angular compiler host. Previously this caused confusing downstream errors (e.g., rxjs-related). Now the file is treated as not found, producing a clear 'Could not find stylesheet file' message. Fixes #32193 --- .../behavior/component-stylesheets_spec.ts | 19 ++++++++++++++++ .../build/src/tools/angular/angular-host.ts | 22 +++++++++++-------- 2 files changed, 32 insertions(+), 9 deletions(-) diff --git a/packages/angular/build/src/builders/application/tests/behavior/component-stylesheets_spec.ts b/packages/angular/build/src/builders/application/tests/behavior/component-stylesheets_spec.ts index ddae750a64a4..0fb1fb22c9fa 100644 --- a/packages/angular/build/src/builders/application/tests/behavior/component-stylesheets_spec.ts +++ b/packages/angular/build/src/builders/application/tests/behavior/component-stylesheets_spec.ts @@ -64,6 +64,25 @@ describeBuilder(buildApplication, APPLICATION_BUILDER_INFO, (harness) => { ); }); + it('should generate an error when a styleUrl points to a TypeScript file', async () => { + await harness.modifyFile('src/app/app.component.ts', (content) => { + return content.replace('./app.component.css', './app.component.ts'); + }); + + harness.useTarget('build', { + ...BASE_OPTIONS, + }); + + const { result, logs } = await harness.executeOnce({ outputLogsOnFailure: false }); + expect(result?.success).toBeFalse(); + expect(logs).toContain( + jasmine.objectContaining({ + level: 'error', + message: jasmine.stringContaining(`Could not find stylesheet file './app.component.ts'`), + }), + ); + }); + it('should generate an error for a missing stylesheet with JIT', async () => { await harness.modifyFile('src/app/app.component.ts', (content) => { return content.replace('./app.component.css', './not-present.css'); diff --git a/packages/angular/build/src/tools/angular/angular-host.ts b/packages/angular/build/src/tools/angular/angular-host.ts index e98ebf49f3eb..874d66fe2b41 100644 --- a/packages/angular/build/src/tools/angular/angular-host.ts +++ b/packages/angular/build/src/tools/angular/angular-host.ts @@ -212,6 +212,12 @@ export function createAngularCompilerHost( return null; } + // Reject TypeScript files used as component resources (e.g., styleUrl pointing to a .ts file). + // Processing a TypeScript file as a stylesheet or template causes confusing downstream errors. + if (hasTypeScriptExtension(resolvedPath)) { + return null; + } + // All resource names that have template file extensions are assumed to be templates // TODO: Update compiler to provide the resource type to avoid extension matching here. if (!hostOptions.externalStylesheets || hasTemplateExtension(resolvedPath)) { @@ -255,15 +261,13 @@ export function createAngularCompilerHost( return host; } -function hasTemplateExtension(file: string): boolean { - const extension = nodePath.extname(file).toLowerCase(); +const TEMPLATE_EXTENSIONS: ReadonlySet = new Set(['.htm', '.html', '.svg']); +const TYPESCRIPT_EXTENSIONS: ReadonlySet = new Set(['.ts', '.tsx', '.mts', '.cts']); - switch (extension) { - case '.htm': - case '.html': - case '.svg': - return true; - } +function hasTemplateExtension(file: string): boolean { + return TEMPLATE_EXTENSIONS.has(nodePath.extname(file).toLowerCase()); +} - return false; +function hasTypeScriptExtension(file: string): boolean { + return TYPESCRIPT_EXTENSIONS.has(nodePath.extname(file).toLowerCase()); } From 06dc0954e0c4812177c98b088f7cc4bcddfe0da2 Mon Sep 17 00:00:00 2001 From: cexbrayat Date: Wed, 8 Apr 2026 16:02:44 +0200 Subject: [PATCH 220/226] refactor(@schematics/angular): remove empty constructor from directive template Align directive template with the component template cleanup done in 301b5669a724261d53444d5172334966903078c0. --- .../files/__name@dasherize__.__type@dasherize__.ts.template | 3 --- 1 file changed, 3 deletions(-) diff --git a/packages/schematics/angular/directive/files/__name@dasherize__.__type@dasherize__.ts.template b/packages/schematics/angular/directive/files/__name@dasherize__.__type@dasherize__.ts.template index 624b3cafbec1..eff23c7e350a 100644 --- a/packages/schematics/angular/directive/files/__name@dasherize__.__type@dasherize__.ts.template +++ b/packages/schematics/angular/directive/files/__name@dasherize__.__type@dasherize__.ts.template @@ -5,7 +5,4 @@ import { Directive } from '@angular/core'; standalone: false,<%}%> }) export class <%= classifiedName %> { - - constructor() { } - } From 7927a9718affae7c787718bfe8b1d7b7630c60a4 Mon Sep 17 00:00:00 2001 From: Angular Robot Date: Wed, 8 Apr 2026 16:52:15 +0000 Subject: [PATCH 221/226] build: lock file maintenance See associated pull request for more information. --- pnpm-lock.yaml | 627 ++++++++++++++++++++++++++----------------------- 1 file changed, 338 insertions(+), 289 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 0ca7f08de9de..6060ae0515ee 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -141,7 +141,7 @@ importers: version: 4.17.24 '@types/node': specifier: ^22.12.0 - version: 22.19.15 + version: 22.19.17 '@types/npm-package-arg': specifier: ^6.1.0 version: 6.1.4 @@ -150,7 +150,7 @@ importers: version: 11.1.8 '@types/picomatch': specifier: ^4.0.0 - version: 4.0.2 + version: 4.0.3 '@types/progress': specifier: ^2.0.3 version: 2.0.7 @@ -246,7 +246,7 @@ importers: version: 1.4.0 lodash: specifier: ^4.17.21 - version: 4.17.23 + version: 4.18.1 magic-string: specifier: 0.30.21 version: 0.30.21 @@ -270,7 +270,7 @@ importers: version: 6.4.1(rollup@4.60.0)(typescript@6.0.2) rollup-plugin-sourcemaps2: specifier: 0.5.6 - version: 0.5.6(@types/node@22.19.15)(rollup@4.60.0) + version: 0.5.6(@types/node@22.19.17)(rollup@4.60.0) semver: specifier: 7.7.4 version: 7.7.4 @@ -363,7 +363,7 @@ importers: version: 0.4.1 browserslist: specifier: ^4.26.0 - version: 4.28.1 + version: 4.28.2 esbuild: specifier: 0.27.3 version: 0.27.3 @@ -618,7 +618,7 @@ importers: version: 10.1.1(@babel/core@7.29.0)(webpack@5.105.4(esbuild@0.27.3)) browserslist: specifier: ^4.26.0 - version: 4.28.1 + version: 4.28.2 copy-webpack-plugin: specifier: 14.0.0 version: 14.0.0(webpack@5.105.4(esbuild@0.27.3)) @@ -1048,12 +1048,12 @@ packages: '@angular/core': 22.0.0-next.6 rxjs: ^6.5.3 || ^7.4.0 - '@asamuzakjp/css-color@5.1.1': - resolution: {integrity: sha512-iGWN8E45Ws0XWx3D44Q1t6vX2LqhCKcwfmwBYCDsFrYFS6m4q/Ks61L2veETaLv+ckDC6+dTETJoaAAb7VjLiw==} + '@asamuzakjp/css-color@5.1.6': + resolution: {integrity: sha512-BXWCh8dHs9GOfpo/fWGDJtDmleta2VePN9rn6WQt3GjEbxzutVF4t0x2pmH+7dbMCLtuv3MlwqRsAuxlzFXqFg==} engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0} - '@asamuzakjp/dom-selector@7.0.4': - resolution: {integrity: sha512-jXR6x4AcT3eIrS2fSNAwJpwirOkGcd+E7F7CP3zjdTqz9B/2huHOL8YJZBgekKwLML+u7qB/6P1LXQuMScsx0w==} + '@asamuzakjp/dom-selector@7.0.8': + resolution: {integrity: sha512-erMO6FgtM02dC24NGm0xufMzWz5OF0wXKR7BpvGD973bq/GbmR8/DbxNZbj0YevQ5hlToJaWSVK/G9/NDgGEVw==} engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0} '@asamuzakjp/nwsapi@2.3.9': @@ -1819,16 +1819,16 @@ packages: eslint: optional: true - '@eslint/config-array@0.23.3': - resolution: {integrity: sha512-j+eEWmB6YYLwcNOdlwQ6L2OsptI/LO6lNBuLIqe5R7RetD658HLoF+Mn7LzYmAWWNNzdC6cqP+L6r8ujeYXWLw==} + '@eslint/config-array@0.23.4': + resolution: {integrity: sha512-lf19F24LSMfF8weXvW5QEtnLqW70u7kgit5e9PSx0MsHAFclGd1T9ynvWEMDT1w5J4Qt54tomGeAhdoAku1Xow==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} - '@eslint/config-helpers@0.5.3': - resolution: {integrity: sha512-lzGN0onllOZCGroKJmRwY6QcEHxbjBw1gwB8SgRSqK8YbbtEXMvKynsXc3553ckIEBxsbMBU7oOZXKIPGZNeZw==} + '@eslint/config-helpers@0.5.4': + resolution: {integrity: sha512-jJhqiY3wPMlWWO3370M86CPJ7pt8GmEwSLglMfQhjXal07RCvhmU0as4IuUEW5SJeunfItiEetHmSxCCe9lDBg==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} - '@eslint/core@1.1.1': - resolution: {integrity: sha512-QUPblTtE51/7/Zhfv8BDwO0qkkzQL7P/aWWbqcf4xWLEYn1oKjdO0gglQBB4GAsu7u6wjijbCmzsUTy6mnk6oQ==} + '@eslint/core@1.2.0': + resolution: {integrity: sha512-8FTGbNzTvmSlc4cZBaShkC6YvFMG0riksYWRFKXztqVdXaQbcZLXlFbSpC05s70sGEsXAw0qwhx69JiW7hQS7A==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} '@eslint/eslintrc@3.3.5': @@ -1844,8 +1844,8 @@ packages: eslint: optional: true - '@eslint/object-schema@3.0.3': - resolution: {integrity: sha512-iM869Pugn9Nsxbh/YHRqYiqd23AmIbxJOcpUMOuWCVNdoQJ5ZtwL6h3t0bcZzJUlC3Dq9jCFCESBZnX0GTv7iQ==} + '@eslint/object-schema@3.0.4': + resolution: {integrity: sha512-55lO/7+Yp0ISKRP0PsPtNTeNGapXaO085aELZmWCVc5SH3jfrqpuU6YgOdIxMS99ZHkQN1cXKE+cdIqwww9ptw==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} '@eslint/plugin-kit@0.6.1': @@ -2136,8 +2136,8 @@ packages: '@harperfast/extended-iterable@1.0.3': resolution: {integrity: sha512-sSAYhQca3rDWtQUHSAPeO7axFIUJOI6hn1gjRC5APVE1a90tuyT8f5WIgRsFhhWA7htNkju2veB9eWL6YHi/Lw==} - '@hono/node-server@1.19.11': - resolution: {integrity: sha512-dr8/3zEaB+p0D2n/IUrlPF1HZm586qgJNXK1a9fhg/PzdtkK7Ksd5l312tJX2yBuALqDYBlG20QEbayqPyxn+g==} + '@hono/node-server@1.19.13': + resolution: {integrity: sha512-TsQLe4i2gvoTtrHje625ngThGBySOgSK3Xo2XRYOdqGN1teR8+I7vchQC46uLJi8OF62YTYA3AhSpumtkhsaKQ==} engines: {node: '>=18.14.1'} peerDependencies: hono: ^4 @@ -2158,12 +2158,12 @@ packages: resolution: {integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==} engines: {node: '>=18.18'} - '@inquirer/ansi@2.0.4': - resolution: {integrity: sha512-DpcZrQObd7S0R/U3bFdkcT5ebRwbTTC4D3tCc1vsJizmgPLxNJBo+AAFmrZwe8zk30P2QzgzGWZ3Q9uJwWuhIg==} + '@inquirer/ansi@2.0.5': + resolution: {integrity: sha512-doc2sWgJpbFQ64UflSVd17ibMGDuxO1yKgOgLMwavzESnXjFWJqUeG8saYosqKpHp4kWiM5x1nXvEjbpx90gzw==} engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} - '@inquirer/checkbox@5.1.2': - resolution: {integrity: sha512-PubpMPO2nJgMufkoB3P2wwxNXEMUXnBIKi/ACzDUYfaoPuM7gSTmuxJeMscoLVEsR4qqrCMf5p0SiYGWnVJ8kw==} + '@inquirer/checkbox@5.1.3': + resolution: {integrity: sha512-+G7I8CT+EHv/hasNfUl3P37DVoMoZfpA+2FXmM54dA8MxYle1YqucxbacxHalw1iAFSdKNEDTGNV7F+j1Ldqcg==} engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} peerDependencies: '@types/node': '>=18' @@ -2180,8 +2180,8 @@ packages: '@types/node': optional: true - '@inquirer/core@11.1.7': - resolution: {integrity: sha512-1BiBNDk9btIwYIzNZpkikIHXWeNzNncJePPqwDyVMhXhD1ebqbpn1mKGctpoqAbzywZfdG0O4tvmsGIcOevAPQ==} + '@inquirer/core@11.1.8': + resolution: {integrity: sha512-/u+yJk2pOKNDOh1ZgdUH2RQaRx6OOH4I0uwL95qPvTFTIL38YBsuSC4r1yXBB3Q6JvNqFFc202gk0Ew79rrcjA==} engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} peerDependencies: '@types/node': '>=18' @@ -2189,8 +2189,8 @@ packages: '@types/node': optional: true - '@inquirer/editor@5.0.10': - resolution: {integrity: sha512-VJx4XyaKea7t8hEApTw5dxeIyMtWXre2OiyJcICCRZI4hkoHsMoCnl/KbUnJJExLbH9csLLHMVR144ZhFE1CwA==} + '@inquirer/editor@5.1.0': + resolution: {integrity: sha512-6wlkYl65Qfayy48gPCfU4D7li6KCAGN79mLXa/tYHZH99OfZ820yY+HA+DgE88r8YwwgeuY6PQgNqMeK6LuMmw==} engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} peerDependencies: '@types/node': '>=18' @@ -2198,8 +2198,8 @@ packages: '@types/node': optional: true - '@inquirer/expand@5.0.10': - resolution: {integrity: sha512-fC0UHJPXsTRvY2fObiwuQYaAnHrp3aDqfwKUJSdfpgv18QUG054ezGbaRNStk/BKD5IPijeMKWej8VV8O5Q/eQ==} + '@inquirer/expand@5.0.12': + resolution: {integrity: sha512-vOfrB33b7YIZfDauXS8vNNz2Z86FozTZLIt7e+7/dCaPJ1RXZsHCuI9TlcERzEUq57vkM+UdnBgxP0rFd23JYQ==} engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} peerDependencies: '@types/node': '>=18' @@ -2207,8 +2207,8 @@ packages: '@types/node': optional: true - '@inquirer/external-editor@2.0.4': - resolution: {integrity: sha512-Prenuv9C1PHj2Itx0BcAOVBTonz02Hc2Nd2DbU67PdGUaqn0nPCnV34oDyyoaZHnmfRxkpuhh/u51ThkrO+RdA==} + '@inquirer/external-editor@3.0.0': + resolution: {integrity: sha512-lDSwMgg+M5rq6JKBYaJwSX6T9e/HK2qqZ1oxmOwn4AQoJE5D+7TumsxLGC02PWS//rkIVqbZv3XA3ejsc9FYvg==} engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} peerDependencies: '@types/node': '>=18' @@ -2216,12 +2216,12 @@ packages: '@types/node': optional: true - '@inquirer/figures@2.0.4': - resolution: {integrity: sha512-eLBsjlS7rPS3WEhmOmh1znQ5IsQrxWzxWDxO51e4urv+iVrSnIHbq4zqJIOiyNdYLa+BVjwOtdetcQx1lWPpiQ==} + '@inquirer/figures@2.0.5': + resolution: {integrity: sha512-NsSs4kzfm12lNetHwAn3GEuH317IzpwrMCbOuMIVytpjnJ90YYHNwdRgYGuKmVxwuIqSgqk3M5qqQt1cDk0tGQ==} engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} - '@inquirer/input@5.0.10': - resolution: {integrity: sha512-nvZ6qEVeX/zVtZ1dY2hTGDQpVGD3R7MYPLODPgKO8Y+RAqxkrP3i/3NwF3fZpLdaMiNuK0z2NaYIx9tPwiSegQ==} + '@inquirer/input@5.0.11': + resolution: {integrity: sha512-twUWidn4ocPO8qi6fRM7tNWt7W1FOnOZqQ+/+PsfLUacMR5rFLDPK9ql0nBPwxi0oELbo8T5NhRs8B2+qQEqFQ==} engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} peerDependencies: '@types/node': '>=18' @@ -2229,8 +2229,8 @@ packages: '@types/node': optional: true - '@inquirer/number@4.0.10': - resolution: {integrity: sha512-Ht8OQstxiS3APMGjHV0aYAjRAysidWdwurWEo2i8yI5xbhOBWqizT0+MU1S2GCcuhIBg+3SgWVjEoXgfhY+XaA==} + '@inquirer/number@4.0.11': + resolution: {integrity: sha512-Vscmim9TCksQsfjPtka/JwPUcbLhqWYrgfPf1cHrCm24X/F2joFwnageD50yMKsaX14oNGOyKf/RNXAFkNjWpA==} engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} peerDependencies: '@types/node': '>=18' @@ -2238,8 +2238,8 @@ packages: '@types/node': optional: true - '@inquirer/password@5.0.10': - resolution: {integrity: sha512-QbNyvIE8q2GTqKLYSsA8ATG+eETo+m31DSR0+AU7x3d2FhaTWzqQek80dj3JGTo743kQc6mhBR0erMjYw5jQ0A==} + '@inquirer/password@5.0.11': + resolution: {integrity: sha512-9KZFeRaNHIcejtPb0wN4ddFc7EvobVoAFa049eS3LrDZFxI8O7xUXiITEOinBzkZFAIwY5V4yzQae/QfO9cbbg==} engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} peerDependencies: '@types/node': '>=18' @@ -2256,8 +2256,8 @@ packages: '@types/node': optional: true - '@inquirer/rawlist@5.2.6': - resolution: {integrity: sha512-jfw0MLJ5TilNsa9zlJ6nmRM0ZFVZhhTICt4/6CU2Dv1ndY7l3sqqo1gIYZyMMDw0LvE1u1nzJNisfHEhJIxq5w==} + '@inquirer/rawlist@5.2.7': + resolution: {integrity: sha512-AqRMiD9+uE1lskDPrdqHwrV/EUmxKEBLX44SR7uxK3vD2413AmVfE5EQaPeNzYf5Pq5SitHJDYUFVF0poIr09w==} engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} peerDependencies: '@types/node': '>=18' @@ -2265,8 +2265,8 @@ packages: '@types/node': optional: true - '@inquirer/search@4.1.6': - resolution: {integrity: sha512-3/6kTRae98hhDevENScy7cdFEuURnSpM3JbBNg8yfXLw88HgTOl+neUuy/l9W0No5NzGsLVydhBzTIxZP7yChQ==} + '@inquirer/search@4.1.7': + resolution: {integrity: sha512-1y7+0N65AWk5RdlXH/Kn13txf3IjIQ7OEfhCEkDTU+h5wKMLq8DUF3P6z+/kLSxDGDtQT1dRBWEUC3o/VvImsQ==} engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} peerDependencies: '@types/node': '>=18' @@ -2274,8 +2274,8 @@ packages: '@types/node': optional: true - '@inquirer/select@5.1.2': - resolution: {integrity: sha512-kTK8YIkHV+f02y7bWCh7E0u2/11lul5WepVTclr3UMBtBr05PgcZNWfMa7FY57ihpQFQH/spLMHTcr0rXy50tA==} + '@inquirer/select@5.1.3': + resolution: {integrity: sha512-zYyqWgGQi3NhBcNq4Isc5rB3oEdQEh1Q/EcAnOW0FK4MpnXWkvSBYgA4cYrTM4A9UB573omouZbnL9JJ74Mq3A==} engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} peerDependencies: '@types/node': '>=18' @@ -2292,6 +2292,15 @@ packages: '@types/node': optional: true + '@inquirer/type@4.0.5': + resolution: {integrity: sha512-aetVUNeKNc/VriqXlw1NRSW0zhMBB0W4bNbWRJgzRl/3d0QNDQFfk0GO5SDdtjMZVg6o8ZKEiadd7SCCzoOn5Q==} + engines: {node: '>=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + '@isaacs/cliui@8.0.2': resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} engines: {node: '>=12'} @@ -3302,8 +3311,8 @@ packages: resolution: {integrity: sha512-kxHrDQ9YgfrWUSXU0cjsQGv8JykOFZQ9ErNKbFPWzk3Hgpwu8x2hHrQ9IdA8yl+j9RTLTC3sAF3Tdq1IQCP4oA==} engines: {node: ^20.17.0 || >=22.9.0} - '@sigstore/protobuf-specs@0.5.0': - resolution: {integrity: sha512-MM8XIwUjN2bwvCg1QvrMtbBmpcSHrkhFSCu1D11NyPvDQ25HEc4oG5/OcQfd/Tlf/OxmKWERDj0zGE23jQaMwA==} + '@sigstore/protobuf-specs@0.5.1': + resolution: {integrity: sha512-/ScWUhhoFasJsSRGTVBwId1loQjjnjAfE4djL6ZhrXRpNCmPTnUKF5Jokd58ILseOMjzET3UrMOtJPS9sYeI0g==} engines: {node: ^18.17.0 || >=20.5.0} '@sigstore/sign@4.1.1': @@ -3488,8 +3497,8 @@ packages: '@types/node-fetch@2.6.13': resolution: {integrity: sha512-QGpRVpzSaUs30JBSGPjOg4Uveu384erbHBoT1zeONvyCfwQxIkUshLAOqN/k9EjGviPRmWTTe6aH2qySWKTVSw==} - '@types/node@22.19.15': - resolution: {integrity: sha512-F0R/h2+dsy5wJAUe3tAU6oqa2qbWY5TpNfL/RGmo1y38hiyO1w3x2jPtt76wmuaJI4DQnOBu21cNXQ2STIUUWg==} + '@types/node@22.19.17': + resolution: {integrity: sha512-wGdMcf+vPYM6jikpS/qhg6WiqSV/OhG+jeeHT/KlVqxYfD40iYJf9/AE1uQxVWFvU7MipKRkRv8NSHiCGgPr8Q==} '@types/node@24.12.0': resolution: {integrity: sha512-GYDxsZi3ChgmckRT9HPU0WEhKLP08ev/Yfcq2AstjrDASOYCSXeyjDsHg4v5t4jOj7cyDX3vmprafKlWIG9MXQ==} @@ -3509,8 +3518,8 @@ packages: '@types/parse-glob@3.0.32': resolution: {integrity: sha512-n4xmml2WKR12XeQprN8L/sfiVPa8FHS3k+fxp4kSr/PA2GsGUgFND+bvISJxM0y5QdvzNEGjEVU3eIrcKks/pA==} - '@types/picomatch@4.0.2': - resolution: {integrity: sha512-qHHxQ+P9PysNEGbALT8f8YOSHW0KJu6l2xU8DYY0fu/EmGxXdVnuTLvFUvBgPJMSqXq29SYHveejeAha+4AYgA==} + '@types/picomatch@4.0.3': + resolution: {integrity: sha512-iG0T6+nYJ9FAPmx9SsUlnwcq1ZVRuCXcVEvWnntoPlrOpwtSTKNDC9uVAxTsC3PUvJ+99n4RpAcNgBbHX3JSnQ==} '@types/progress@2.0.7': resolution: {integrity: sha512-iadjw02vte8qWx7U0YM++EybBha2CQLPGu9iJ97whVgJUT5Zq9MjAPYUnbfRI2Kpehimf1QjFJYxD0t8nqzu5w==} @@ -3629,6 +3638,10 @@ packages: resolution: {integrity: sha512-/iZM6FnM4tnx9csuTxspMW4BOSegshwX5oBDznJ7S4WggL7Vczz5d2W11ecc4vRrQMQHXRSxzrCsyG5EsPPTbA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@typescript-eslint/types@8.58.0': + resolution: {integrity: sha512-O9CjxypDT89fbHxRfETNoAnHj/i6IpRK0CvbVN3qibxlLdo5p5hcLmUuCCrHMpxiWSwKyI8mCP7qRNYuOJ0Uww==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@typescript-eslint/typescript-estree@8.57.2': resolution: {integrity: sha512-2MKM+I6g8tJxfSmFKOnHv2t8Sk3T6rF20A1Puk0svLK+uVapDZB/4pfAeB7nE83uAZrU6OxW+HmOd5wHVdXwXA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -3817,7 +3830,6 @@ packages: '@xmldom/xmldom@0.8.12': resolution: {integrity: sha512-9k/gHF6n/pAi/9tqr3m3aqkuiNosYTurLLUtc7xQ9sxB/wm7WPygCv8GYa6mS0fLJEHhqMC1ATYhz++U/lRHqg==} engines: {node: '>=10.0.0'} - deprecated: this version has critical issues, please update to the latest version '@xtuc/ieee754@1.2.0': resolution: {integrity: sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==} @@ -4104,8 +4116,8 @@ packages: bare-abort-controller: optional: true - bare-fs@4.5.6: - resolution: {integrity: sha512-1QovqDrR80Pmt5HPAsMsXTCFcDYr+NSUKW6nd6WO5v0JBmnItc/irNRzm2KOQ5oZ69P37y+AMujNyNtG+1Rggw==} + bare-fs@4.6.0: + resolution: {integrity: sha512-2YkS7NuiJceSEbyEOdSNLE9tsGd+f4+f7C+Nik/MCk27SYdwIMPT/yRKvg++FZhQXgk0KWJKJyXX9RhVV0RGqA==} engines: {bare: '>=1.16.0'} peerDependencies: bare-buffer: '*' @@ -4113,15 +4125,15 @@ packages: bare-buffer: optional: true - bare-os@3.8.4: - resolution: {integrity: sha512-4JboWUl7/2LhgU536tjUszzaVC8/WEWKtyX5crayvlN71ih8+O2SdvBhotQeDsuhhmPZmLCrPBJEcwVPhI/kkQ==} + bare-os@3.8.7: + resolution: {integrity: sha512-G4Gr1UsGeEy2qtDTZwL7JFLo2wapUarz7iTMcYcMFdS89AIQuBoyjgXZz0Utv7uHs3xA9LckhVbeBi8lEQrC+w==} engines: {bare: '>=1.14.0'} bare-path@3.0.0: resolution: {integrity: sha512-tyfW2cQcB5NN8Saijrhqn0Zh7AnFNsnczRcuWODH0eYAXBsJ5gVxAUuNr7tsHSC6IZ77cA0SitzT+s47kot8Mw==} - bare-stream@2.11.0: - resolution: {integrity: sha512-Y/+iQ49fL3rIn6w/AVxI/2+BRrpmzJvdWt5Jv8Za6Ngqc6V227c+pYjYYgLdpR3MwQ9ObVXD0ZrqoBztakM0rw==} + bare-stream@2.12.0: + resolution: {integrity: sha512-w28i8lkBgREV3rPXGbgK+BO66q+ZpKqRWrZLiCdmmUlLPrQ45CzkvRhN+7lnv00Gpi2zy5naRxnUFAxCECDm9g==} peerDependencies: bare-abort-controller: '*' bare-buffer: '*' @@ -4144,8 +4156,8 @@ packages: resolution: {integrity: sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==} engines: {node: ^4.5.0 || >= 5.9} - baseline-browser-mapping@2.10.12: - resolution: {integrity: sha512-qyq26DxfY4awP2gIRXhhLWfwzwI+N5Nxk6iQi8EFizIaWIjqicQTE4sLnZZVdeKPRcVNoJOkkpfzoIYuvCKaIQ==} + baseline-browser-mapping@2.10.16: + resolution: {integrity: sha512-Lyf3aK28zpsD1yQMiiHD4RvVb6UdMoo8xzG2XzFIfR9luPzOpcBlAsT/qfB1XWS1bxWT+UtE4WmQgsp297FYOA==} engines: {node: '>=6.0.0'} hasBin: true @@ -4231,8 +4243,8 @@ packages: browserify-zlib@0.1.4: resolution: {integrity: sha512-19OEpq7vWgsH6WkvkBJQDFvJS1uPcbFOQ4v9CU839dO+ZZXUZO6XpE6hNCqvlIIj+4fZvRiJ6DsAQ382GwiyTQ==} - browserslist@4.28.1: - resolution: {integrity: sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==} + browserslist@4.28.2: + resolution: {integrity: sha512-48xSriZYYg+8qXna9kwqjIVzuQxi+KYWp2+5nCYnYKPTr0LvD89Jqk2Or5ogxz0NUMfIjhh2lIUX/LyX9B4oIg==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true @@ -4295,8 +4307,8 @@ packages: resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} engines: {node: '>=6'} - caniuse-lite@1.0.30001782: - resolution: {integrity: sha512-dZcaJLJeDMh4rELYFw1tvSn1bhZWYFOt468FcbHHxx/Z/dFidd1I6ciyFdi3iwfQCyOjqo9upF6lGQYtMiJWxw==} + caniuse-lite@1.0.30001786: + resolution: {integrity: sha512-4oxTZEvqmLLrERwxO76yfKM7acZo310U+v4kqexI2TL1DkkUEMT8UijrxxcnVdxR3qkVf5awGRX+4Z6aPHVKrA==} caseless@0.12.0: resolution: {integrity: sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==} @@ -4683,8 +4695,8 @@ packages: resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} engines: {node: '>= 0.4'} - defu@6.1.4: - resolution: {integrity: sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==} + defu@6.1.7: + resolution: {integrity: sha512-7z22QmUWiQ/2d0KkdYmANbRUVABpZ9SNYyH5vx6PZ+nE5bcC0l7uFvEfHlyld/HcGBFTL536ClDt3DEcSlEJAQ==} degenerator@5.0.1: resolution: {integrity: sha512-TllpMR/t0M5sqCXfj85i4XaAzxmS5tVA16dqvdkMwGmzI+dXLXnw3J+3Vdv7VKw+ThlTMboK6i9rnZ6Nntj5CQ==} @@ -4787,8 +4799,8 @@ packages: engines: {node: '>=0.12.18'} hasBin: true - electron-to-chromium@1.5.328: - resolution: {integrity: sha512-QNQ5l45DzYytThO21403XN3FvK0hOkWDG8viNf6jqS42msJ8I4tGDSpBCgvDRRPnkffafiwAym2X2eHeGD2V0w==} + electron-to-chromium@1.5.332: + resolution: {integrity: sha512-7OOtytmh/rINMLwaFTbcMVvYXO3AUm029X0LcyfYk0B557RlPkdpTpnH9+htMlfu5dKwOmT0+Zs2Aw+lnn6TeQ==} emoji-regex@10.6.0: resolution: {integrity: sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==} @@ -4931,8 +4943,8 @@ packages: peerDependencies: eslint: '>=7.0.0' - eslint-import-resolver-node@0.3.9: - resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==} + eslint-import-resolver-node@0.3.10: + resolution: {integrity: sha512-tRrKqFyCaKict5hOd244sL6EQFNycnMQnBe+j8uqGNXYzsImGbGUU4ibtoaBmv5FLwJwcFJNeg1GeVjQfbMrDQ==} eslint-module-utils@2.12.1: resolution: {integrity: sha512-L8jSWTze7K2mTg0vos/RuLRS5soomksDPoJLXIslC7c8Wmut3bx7CPpJijDcBZtxQ5lrbUdM+s0OlNbz0DCDNw==} @@ -5076,8 +5088,8 @@ packages: express-rate-limit@5.5.1: resolution: {integrity: sha512-MTjE2eIbHv5DyfuFz4zLYWxpqVhEhkTiwFGuB74Q9CSou2WHO52nlE5y3Zlg6SIsiYUIPj6ifFxnkPz6O3sIUg==} - express-rate-limit@8.3.1: - resolution: {integrity: sha512-D1dKN+cmyPWuvB+G2SREQDzPY1agpBIcTa9sJxOPMCNeH3gwzhqJRDWCXW3gg0y//+LQ/8j52JbMROWyrKdMdw==} + express-rate-limit@8.3.2: + resolution: {integrity: sha512-77VmFeJkO0/rvimEDuUC5H30oqUC4EyOhyGccfqoLebB0oiEYfM7nwPrsDsBL1gsTpwfzX8SFy2MT3TDyRq+bg==} engines: {node: '>= 16'} peerDependencies: express: '>= 4.11' @@ -5464,8 +5476,8 @@ packages: resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} engines: {node: '>= 0.4'} - hono@4.12.9: - resolution: {integrity: sha512-wy3T8Zm2bsEvxKZM5w21VdHDDcwVS1yUFFY6i8UobSsKfFceT7TOwhbhfKsDyx7tYQlmRM5FLpIuYvNFyjctiA==} + hono@4.12.12: + resolution: {integrity: sha512-p1JfQMKaceuCbpJKAPKVqyqviZdS0eUxH9v82oWo1kb9xjQ5wA6iP3FNVAPDFlz5/p7d45lO+BpSk1tuSZMF4Q==} engines: {node: '>=16.9.0'} hosted-git-info@9.0.2: @@ -6172,6 +6184,9 @@ packages: lodash@4.17.23: resolution: {integrity: sha512-LgVTMpQtIopCi79SJeDiP0TfWi5CNEc/L/aRdTh3yIvmZXTnheWpKjSZhnvMl8iXbC1tFg9gdHHDMLoV7CnG+w==} + lodash@4.18.1: + resolution: {integrity: sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q==} + log-symbols@7.0.1: resolution: {integrity: sha512-ja1E3yCr9i/0hmBVaM0bfwDjnGy8I/s6PP4DFp+yP+a+mrHO4Rm7DtmnqROTUkHIkqffC84YY7AeqX6oFk0WFg==} engines: {node: '>=18'} @@ -6198,8 +6213,8 @@ packages: lru-cache@10.4.3: resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} - lru-cache@11.2.7: - resolution: {integrity: sha512-aY/R+aEsRelme17KGQa/1ZSIpLpNYYrhcrepKTZgE+W3WM16YMCaPwOHLHsmopZHELU0Ojin1lPVxKR0MihncA==} + lru-cache@11.3.2: + resolution: {integrity: sha512-wgWa6FWQ3QRRJbIjbsldRJZxdxYngT/dO0I5Ynmlnin8qy7tC6xYzbcJjtN4wHLXtkbVwHzk0C+OejVw1XM+DQ==} engines: {node: 20 || >=22} lru-cache@5.1.1: @@ -6325,10 +6340,6 @@ packages: minimalistic-assert@1.0.1: resolution: {integrity: sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==} - minimatch@10.2.4: - resolution: {integrity: sha512-oRjTw/97aTBN0RHbYCdtF1MQfvusSIBQM0IZEgzl6426+8jSC0nF1a/GmnVLpfB9yyr6g6FTqWqiZVbxrtaCIg==} - engines: {node: 18 || 20 || >=22} - minimatch@10.2.5: resolution: {integrity: sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==} engines: {node: 18 || 20 || >=22} @@ -6458,8 +6469,8 @@ packages: neo-async@2.6.2: resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} - netmask@2.0.2: - resolution: {integrity: sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==} + netmask@2.1.0: + resolution: {integrity: sha512-z9sZrk6wyf8/NDKKqe+Tyl58XtgkYrV4kgt1O8xrzYvpl1LvPacPo0imMLHfpStk3kgCIq1ksJ2bmJn9hue2lQ==} engines: {node: '>= 0.4.0'} ng-packagr@22.0.0-next.1: @@ -6490,6 +6501,10 @@ packages: engines: {node: '>=10.5.0'} deprecated: Use your platform's native DOMException instead + node-exports-info@1.6.0: + resolution: {integrity: sha512-pyFS63ptit/P5WqUkt+UUfe+4oevH+bFeIiPPdfb0pFeYEu/1ELnJu5l+5EcTKYL5M7zaAa7S8ddywgXypqKCw==} + engines: {node: '>= 0.4'} + node-fetch-native@1.6.7: resolution: {integrity: sha512-g9yhqoedzIUm0nTnTqAQvueMPVOuIY16bqgAJJC8XOOubYFNwz6IER9qs0Gq2Xd0+CecCKFjtdDTMA4u4xG06Q==} @@ -6528,8 +6543,8 @@ packages: engines: {node: ^20.17.0 || >=22.9.0} hasBin: true - node-releases@2.0.36: - resolution: {integrity: sha512-TdC8FSgHz8Mwtw9g5L4gR/Sh9XhSP/0DEkQxfEFXOpiul5IiHgHan2VhYYb6agDSfp4KuvltmGApc8HMgUrIkA==} + node-releases@2.0.37: + resolution: {integrity: sha512-1h5gKZCF+pO/o3Iqt5Jp7wc9rH3eJJ0+nh/CIoiRwjRxde/hAHyLPXYN4V3CqKAbiZPSeJFSWHmJsbkicta0Eg==} nopt@9.0.0: resolution: {integrity: sha512-Zhq3a+yFKrYwSBluL4H9XP3m3y5uvQkB/09CwDruCiRmR/UJYnn9W4R48ry0uGC70aeTPKLynBtscP9efFFcPw==} @@ -6595,6 +6610,10 @@ packages: resolution: {integrity: sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==} engines: {node: '>= 0.4'} + object.entries@1.1.9: + resolution: {integrity: sha512-8u/hfXFRBD1O0hPUjioLhoWFHRmt6tKA4/vZPyckBr18l1KE9uHrFaFaUi8MDRTpi4uak2goyPTSNJLXX2k2Hw==} + engines: {node: '>= 0.4'} + object.fromentries@2.0.8: resolution: {integrity: sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==} engines: {node: '>= 0.4'} @@ -6775,8 +6794,8 @@ packages: path-to-regexp@0.1.13: resolution: {integrity: sha512-A/AGNMFN3c8bOlvV9RreMdrv7jsmF9XIfDeCd87+I8RNg6s78BhJxMu69NEMHBSJFxKidViTEdruRwEk/WIKqA==} - path-to-regexp@8.4.0: - resolution: {integrity: sha512-PuseHIvAnz3bjrM2rGJtSgo1zjgxapTLZ7x2pjhzWwlp4SJQgK3f3iZIQwkpEnBaKz6seKBADpM4B4ySkuYypg==} + path-to-regexp@8.4.2: + resolution: {integrity: sha512-qRcuIdP69NPm4qbACK+aDogI5CBDMi1jKe0ry5rSQJz8JVLsC7jV8XpiJjGRLLol3N+R5ihGYcrPLTno6pAdBA==} pathe@1.1.2: resolution: {integrity: sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==} @@ -7098,8 +7117,8 @@ packages: regjsgen@0.8.0: resolution: {integrity: sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q==} - regjsparser@0.13.0: - resolution: {integrity: sha512-NZQZdC5wOE/H3UT28fVGL+ikOZcEzfMGk/c3iN9UGxzWHMa1op7274oyiUVrAG4B2EuFhus8SvkaYnhvW92p9Q==} + regjsparser@0.13.1: + resolution: {integrity: sha512-dLsljMd9sqwRkby8zhO1gSg3PnJIBFid8f4CQj/sXx+7cKx+E7u0PKhZ+U4wmhx7EfmtvnA318oVaIkAB1lRJw==} hasBin: true require-directory@2.1.1: @@ -7132,6 +7151,11 @@ packages: engines: {node: '>= 0.4'} hasBin: true + resolve@2.0.0-next.6: + resolution: {integrity: sha512-3JmVl5hMGtJ3kMmB3zi3DL25KfkCEyy3Tw7Gmw7z5w8M9WlwoPFnIvwChzu1+cF3iaK3sp18hhPz8ANeimdJfA==} + engines: {node: '>= 0.4'} + hasBin: true + resp-modifier@6.0.2: resolution: {integrity: sha512-U1+0kWC/+4ncRFYqQWTx/3qkfE6a4B/h3XXgmXypfa0SPZ3t7cbbaFk297PjQS/yov24R18h6OZe6iZwj3NSLw==} engines: {node: '>= 0.8.0'} @@ -7705,8 +7729,8 @@ packages: tinybench@2.9.0: resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==} - tinyexec@1.0.4: - resolution: {integrity: sha512-u9r3uZC0bdpGOXtlxUIdwf9pkmvhqJdrVCH9fapQtgy/OeTTMZ1nqH7agtvEfmGui6e1XxjcdrlxvxJvc3sMqw==} + tinyexec@1.1.1: + resolution: {integrity: sha512-VKS/ZaQhhkKFMANmAOhhXVoIfBXblQxGX1myCQ2faQrfmobMftXeJPcZGp0gS07ocvGJWDLZGyOZDadDBqYIJg==} engines: {node: '>=18'} tinyglobby@0.2.15: @@ -7720,15 +7744,15 @@ packages: tldts-core@6.1.86: resolution: {integrity: sha512-Je6p7pkk+KMzMv2XXKmAE3McmolOQFdxkKw0R8EYNr7sELW46JqnNeTX8ybPiQgvg1ymCoF8LXs5fzFaZvJPTA==} - tldts-core@7.0.27: - resolution: {integrity: sha512-YQ7uPjgWUibIK6DW5lrKujGwUKhLevU4hcGbP5O6TcIUb+oTjJYJVWPS4nZsIHrEEEG6myk/oqAJUEQmpZrHsg==} + tldts-core@7.0.28: + resolution: {integrity: sha512-7W5Efjhsc3chVdFhqtaU0KtK32J37Zcr9RKtID54nG+tIpcY79CQK/veYPODxtD/LJ4Lue66jvrQzIX2Z2/pUQ==} tldts@6.1.86: resolution: {integrity: sha512-WMi/OQ2axVTf/ykqCQgXiIct+mSQDFdH2fkwhPwgEwvJ1kSzZRiinb0zF2Xb8u4+OqPChmyI6MEu4EezNJz+FQ==} hasBin: true - tldts@7.0.27: - resolution: {integrity: sha512-I4FZcVFcqCRuT0ph6dCDpPuO4Xgzvh+spkcTr1gK7peIvxWauoloVO0vuy1FQnijT63ss6AsHB6+OIM4aXHbPg==} + tldts@7.0.28: + resolution: {integrity: sha512-+Zg3vWhRUv8B1maGSTFdev9mjoo8Etn2Ayfs4cnjlD3CsGkxXX4QyW3j2WJ0wdjYcYmy7Lx2RDsZMhgCWafKIw==} hasBin: true tmp@0.2.5: @@ -7873,8 +7897,8 @@ packages: resolution: {integrity: sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==} engines: {node: '>= 0.4'} - undici-types@7.24.6: - resolution: {integrity: sha512-WRNW+sJgj5OBN4/0JpHFqtqzhpbnV0GuB+OozA9gCL7a993SmU+1JBZCzLNxYsbMfIeDL+lTsphD5jN5N+n0zg==} + undici-types@7.24.7: + resolution: {integrity: sha512-XA+gOBkzYD3C74sZowtCLTpgtaCdqZhqCvR6y9LXvrKTt/IVU6bz49T4D+BPi475scshCCkb0IklJRw6T1ZlgQ==} undici@6.24.1: resolution: {integrity: sha512-sC+b0tB1whOCzbtlx20fx3WgCXwkW627p4EA9uM+/tNNPkSS+eSEld6pAs9nDv7WbY1UUljBMYPtu9BCOrCWKA==} @@ -8634,21 +8658,19 @@ snapshots: rxjs: 7.8.2 tslib: 2.8.1 - '@asamuzakjp/css-color@5.1.1': + '@asamuzakjp/css-color@5.1.6': dependencies: '@csstools/css-calc': 3.1.1(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) '@csstools/css-color-parser': 4.0.2(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0) '@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0) '@csstools/css-tokenizer': 4.0.0 - lru-cache: 11.2.7 - '@asamuzakjp/dom-selector@7.0.4': + '@asamuzakjp/dom-selector@7.0.8': dependencies: '@asamuzakjp/nwsapi': 2.3.9 bidi-js: 1.0.3 css-tree: 3.2.1 is-potential-custom-element-name: 1.0.1 - lru-cache: 11.2.7 '@asamuzakjp/nwsapi@2.3.9': {} @@ -8696,7 +8718,7 @@ snapshots: dependencies: '@babel/compat-data': 7.29.0 '@babel/helper-validator-option': 7.27.1 - browserslist: 4.28.1 + browserslist: 4.28.2 lru-cache: 5.1.1 semver: 6.3.1 @@ -9479,23 +9501,23 @@ snapshots: '@eslint/compat@2.0.3(eslint@10.1.0(jiti@2.6.1))': dependencies: - '@eslint/core': 1.1.1 + '@eslint/core': 1.2.0 optionalDependencies: eslint: 10.1.0(jiti@2.6.1) - '@eslint/config-array@0.23.3': + '@eslint/config-array@0.23.4': dependencies: - '@eslint/object-schema': 3.0.3 + '@eslint/object-schema': 3.0.4 debug: 4.4.3(supports-color@10.2.2) - minimatch: 10.2.4 + minimatch: 10.2.5 transitivePeerDependencies: - supports-color - '@eslint/config-helpers@0.5.3': + '@eslint/config-helpers@0.5.4': dependencies: - '@eslint/core': 1.1.1 + '@eslint/core': 1.2.0 - '@eslint/core@1.1.1': + '@eslint/core@1.2.0': dependencies: '@types/json-schema': 7.0.15 @@ -9517,11 +9539,11 @@ snapshots: optionalDependencies: eslint: 10.1.0(jiti@2.6.1) - '@eslint/object-schema@3.0.3': {} + '@eslint/object-schema@3.0.4': {} '@eslint/plugin-kit@0.6.1': dependencies: - '@eslint/core': 1.1.1 + '@eslint/core': 1.2.0 levn: 0.4.1 '@exodus/bytes@1.15.0': {} @@ -9928,7 +9950,7 @@ snapshots: '@grpc/grpc-js@1.9.15': dependencies: '@grpc/proto-loader': 0.7.15 - '@types/node': 22.19.15 + '@types/node': 22.19.17 '@grpc/proto-loader@0.7.15': dependencies: @@ -9947,9 +9969,9 @@ snapshots: '@harperfast/extended-iterable@1.0.3': optional: true - '@hono/node-server@1.19.11(hono@4.12.9)': + '@hono/node-server@1.19.13(hono@4.12.12)': dependencies: - hono: 4.12.9 + hono: 4.12.12 '@humanfs/core@0.19.1': {} @@ -9962,29 +9984,29 @@ snapshots: '@humanwhocodes/retry@0.4.3': {} - '@inquirer/ansi@2.0.4': {} + '@inquirer/ansi@2.0.5': {} - '@inquirer/checkbox@5.1.2(@types/node@24.12.0)': + '@inquirer/checkbox@5.1.3(@types/node@24.12.0)': dependencies: - '@inquirer/ansi': 2.0.4 - '@inquirer/core': 11.1.7(@types/node@24.12.0) - '@inquirer/figures': 2.0.4 - '@inquirer/type': 4.0.4(@types/node@24.12.0) + '@inquirer/ansi': 2.0.5 + '@inquirer/core': 11.1.8(@types/node@24.12.0) + '@inquirer/figures': 2.0.5 + '@inquirer/type': 4.0.5(@types/node@24.12.0) optionalDependencies: '@types/node': 24.12.0 '@inquirer/confirm@6.0.10(@types/node@24.12.0)': dependencies: - '@inquirer/core': 11.1.7(@types/node@24.12.0) - '@inquirer/type': 4.0.4(@types/node@24.12.0) + '@inquirer/core': 11.1.8(@types/node@24.12.0) + '@inquirer/type': 4.0.5(@types/node@24.12.0) optionalDependencies: '@types/node': 24.12.0 - '@inquirer/core@11.1.7(@types/node@24.12.0)': + '@inquirer/core@11.1.8(@types/node@24.12.0)': dependencies: - '@inquirer/ansi': 2.0.4 - '@inquirer/figures': 2.0.4 - '@inquirer/type': 4.0.4(@types/node@24.12.0) + '@inquirer/ansi': 2.0.5 + '@inquirer/figures': 2.0.5 + '@inquirer/type': 4.0.5(@types/node@24.12.0) cli-width: 4.1.0 fast-wrap-ansi: 0.2.0 mute-stream: 3.0.0 @@ -9992,88 +10014,88 @@ snapshots: optionalDependencies: '@types/node': 24.12.0 - '@inquirer/editor@5.0.10(@types/node@24.12.0)': + '@inquirer/editor@5.1.0(@types/node@24.12.0)': dependencies: - '@inquirer/core': 11.1.7(@types/node@24.12.0) - '@inquirer/external-editor': 2.0.4(@types/node@24.12.0) - '@inquirer/type': 4.0.4(@types/node@24.12.0) + '@inquirer/core': 11.1.8(@types/node@24.12.0) + '@inquirer/external-editor': 3.0.0(@types/node@24.12.0) + '@inquirer/type': 4.0.5(@types/node@24.12.0) optionalDependencies: '@types/node': 24.12.0 - '@inquirer/expand@5.0.10(@types/node@24.12.0)': + '@inquirer/expand@5.0.12(@types/node@24.12.0)': dependencies: - '@inquirer/core': 11.1.7(@types/node@24.12.0) - '@inquirer/type': 4.0.4(@types/node@24.12.0) + '@inquirer/core': 11.1.8(@types/node@24.12.0) + '@inquirer/type': 4.0.5(@types/node@24.12.0) optionalDependencies: '@types/node': 24.12.0 - '@inquirer/external-editor@2.0.4(@types/node@24.12.0)': + '@inquirer/external-editor@3.0.0(@types/node@24.12.0)': dependencies: chardet: 2.1.1 iconv-lite: 0.7.2 optionalDependencies: '@types/node': 24.12.0 - '@inquirer/figures@2.0.4': {} + '@inquirer/figures@2.0.5': {} - '@inquirer/input@5.0.10(@types/node@24.12.0)': + '@inquirer/input@5.0.11(@types/node@24.12.0)': dependencies: - '@inquirer/core': 11.1.7(@types/node@24.12.0) - '@inquirer/type': 4.0.4(@types/node@24.12.0) + '@inquirer/core': 11.1.8(@types/node@24.12.0) + '@inquirer/type': 4.0.5(@types/node@24.12.0) optionalDependencies: '@types/node': 24.12.0 - '@inquirer/number@4.0.10(@types/node@24.12.0)': + '@inquirer/number@4.0.11(@types/node@24.12.0)': dependencies: - '@inquirer/core': 11.1.7(@types/node@24.12.0) - '@inquirer/type': 4.0.4(@types/node@24.12.0) + '@inquirer/core': 11.1.8(@types/node@24.12.0) + '@inquirer/type': 4.0.5(@types/node@24.12.0) optionalDependencies: '@types/node': 24.12.0 - '@inquirer/password@5.0.10(@types/node@24.12.0)': + '@inquirer/password@5.0.11(@types/node@24.12.0)': dependencies: - '@inquirer/ansi': 2.0.4 - '@inquirer/core': 11.1.7(@types/node@24.12.0) - '@inquirer/type': 4.0.4(@types/node@24.12.0) + '@inquirer/ansi': 2.0.5 + '@inquirer/core': 11.1.8(@types/node@24.12.0) + '@inquirer/type': 4.0.5(@types/node@24.12.0) optionalDependencies: '@types/node': 24.12.0 '@inquirer/prompts@8.3.2(@types/node@24.12.0)': dependencies: - '@inquirer/checkbox': 5.1.2(@types/node@24.12.0) + '@inquirer/checkbox': 5.1.3(@types/node@24.12.0) '@inquirer/confirm': 6.0.10(@types/node@24.12.0) - '@inquirer/editor': 5.0.10(@types/node@24.12.0) - '@inquirer/expand': 5.0.10(@types/node@24.12.0) - '@inquirer/input': 5.0.10(@types/node@24.12.0) - '@inquirer/number': 4.0.10(@types/node@24.12.0) - '@inquirer/password': 5.0.10(@types/node@24.12.0) - '@inquirer/rawlist': 5.2.6(@types/node@24.12.0) - '@inquirer/search': 4.1.6(@types/node@24.12.0) - '@inquirer/select': 5.1.2(@types/node@24.12.0) + '@inquirer/editor': 5.1.0(@types/node@24.12.0) + '@inquirer/expand': 5.0.12(@types/node@24.12.0) + '@inquirer/input': 5.0.11(@types/node@24.12.0) + '@inquirer/number': 4.0.11(@types/node@24.12.0) + '@inquirer/password': 5.0.11(@types/node@24.12.0) + '@inquirer/rawlist': 5.2.7(@types/node@24.12.0) + '@inquirer/search': 4.1.7(@types/node@24.12.0) + '@inquirer/select': 5.1.3(@types/node@24.12.0) optionalDependencies: '@types/node': 24.12.0 - '@inquirer/rawlist@5.2.6(@types/node@24.12.0)': + '@inquirer/rawlist@5.2.7(@types/node@24.12.0)': dependencies: - '@inquirer/core': 11.1.7(@types/node@24.12.0) - '@inquirer/type': 4.0.4(@types/node@24.12.0) + '@inquirer/core': 11.1.8(@types/node@24.12.0) + '@inquirer/type': 4.0.5(@types/node@24.12.0) optionalDependencies: '@types/node': 24.12.0 - '@inquirer/search@4.1.6(@types/node@24.12.0)': + '@inquirer/search@4.1.7(@types/node@24.12.0)': dependencies: - '@inquirer/core': 11.1.7(@types/node@24.12.0) - '@inquirer/figures': 2.0.4 - '@inquirer/type': 4.0.4(@types/node@24.12.0) + '@inquirer/core': 11.1.8(@types/node@24.12.0) + '@inquirer/figures': 2.0.5 + '@inquirer/type': 4.0.5(@types/node@24.12.0) optionalDependencies: '@types/node': 24.12.0 - '@inquirer/select@5.1.2(@types/node@24.12.0)': + '@inquirer/select@5.1.3(@types/node@24.12.0)': dependencies: - '@inquirer/ansi': 2.0.4 - '@inquirer/core': 11.1.7(@types/node@24.12.0) - '@inquirer/figures': 2.0.4 - '@inquirer/type': 4.0.4(@types/node@24.12.0) + '@inquirer/ansi': 2.0.5 + '@inquirer/core': 11.1.8(@types/node@24.12.0) + '@inquirer/figures': 2.0.5 + '@inquirer/type': 4.0.5(@types/node@24.12.0) optionalDependencies: '@types/node': 24.12.0 @@ -10081,6 +10103,10 @@ snapshots: optionalDependencies: '@types/node': 24.12.0 + '@inquirer/type@4.0.5(@types/node@24.12.0)': + optionalDependencies: + '@types/node': 24.12.0 + '@isaacs/cliui@8.0.2': dependencies: string-width: 5.1.2 @@ -10256,7 +10282,7 @@ snapshots: '@listr2/prompt-adapter-inquirer@4.2.2(@inquirer/prompts@8.3.2(@types/node@24.12.0))(@types/node@24.12.0)(listr2@10.2.1)': dependencies: '@inquirer/prompts': 8.3.2(@types/node@24.12.0) - '@inquirer/type': 4.0.4(@types/node@24.12.0) + '@inquirer/type': 4.0.5(@types/node@24.12.0) listr2: 10.2.1 transitivePeerDependencies: - '@types/node' @@ -10284,7 +10310,7 @@ snapshots: '@modelcontextprotocol/sdk@1.28.0(zod@4.3.6)': dependencies: - '@hono/node-server': 1.19.11(hono@4.12.9) + '@hono/node-server': 1.19.13(hono@4.12.12) ajv: 8.18.0 ajv-formats: 3.0.1(ajv@8.18.0) content-type: 1.0.5 @@ -10293,8 +10319,8 @@ snapshots: eventsource: 3.0.7 eventsource-parser: 3.0.6 express: 5.2.1 - express-rate-limit: 8.3.1(express@5.2.1) - hono: 4.12.9 + express-rate-limit: 8.3.2(express@5.2.1) + hono: 4.12.12 jose: 6.2.2 json-schema-typed: 8.0.2 pkce-challenge: 5.0.1 @@ -10427,7 +10453,7 @@ snapshots: agent-base: 7.1.4 http-proxy-agent: 7.0.2(supports-color@10.2.2) https-proxy-agent: 7.0.6(supports-color@10.2.2) - lru-cache: 11.2.7 + lru-cache: 11.3.2 socks-proxy-agent: 8.0.5 transitivePeerDependencies: - supports-color @@ -10441,7 +10467,7 @@ snapshots: '@gar/promise-retry': 1.0.3 '@npmcli/promise-spawn': 9.0.1 ini: 6.0.0 - lru-cache: 11.2.7 + lru-cache: 11.3.2 npm-pick-manifest: 11.0.3 proc-log: 6.1.0 semver: 7.7.4 @@ -11006,18 +11032,18 @@ snapshots: '@sigstore/bundle@4.0.0': dependencies: - '@sigstore/protobuf-specs': 0.5.0 + '@sigstore/protobuf-specs': 0.5.1 '@sigstore/core@3.2.0': {} - '@sigstore/protobuf-specs@0.5.0': {} + '@sigstore/protobuf-specs@0.5.1': {} '@sigstore/sign@4.1.1': dependencies: '@gar/promise-retry': 1.0.3 '@sigstore/bundle': 4.0.0 '@sigstore/core': 3.2.0 - '@sigstore/protobuf-specs': 0.5.0 + '@sigstore/protobuf-specs': 0.5.1 make-fetch-happen: 15.0.5 proc-log: 6.1.0 transitivePeerDependencies: @@ -11025,7 +11051,7 @@ snapshots: '@sigstore/tuf@4.0.2': dependencies: - '@sigstore/protobuf-specs': 0.5.0 + '@sigstore/protobuf-specs': 0.5.1 tuf-js: 4.1.0 transitivePeerDependencies: - supports-color @@ -11034,7 +11060,7 @@ snapshots: dependencies: '@sigstore/bundle': 4.0.0 '@sigstore/core': 3.2.0 - '@sigstore/protobuf-specs': 0.5.0 + '@sigstore/protobuf-specs': 0.5.1 '@simple-libs/child-process-utils@1.0.2': dependencies: @@ -11051,7 +11077,7 @@ snapshots: '@stylistic/eslint-plugin@5.10.0(eslint@10.1.0(jiti@2.6.1))': dependencies: '@eslint-community/eslint-utils': 4.9.1(eslint@10.1.0(jiti@2.6.1)) - '@typescript-eslint/types': 8.57.2 + '@typescript-eslint/types': 8.58.0 eslint: 10.1.0(jiti@2.6.1) eslint-visitor-keys: 4.2.1 espree: 10.4.0 @@ -11106,16 +11132,16 @@ snapshots: '@types/body-parser@1.19.6': dependencies: '@types/connect': 3.4.38 - '@types/node': 22.19.15 + '@types/node': 22.19.17 '@types/bonjour@3.5.13': dependencies: - '@types/node': 22.19.15 + '@types/node': 22.19.17 '@types/browser-sync@2.29.1': dependencies: '@types/micromatch': 2.3.35 - '@types/node': 22.19.15 + '@types/node': 22.19.17 '@types/serve-static': 2.2.0 chokidar: 3.6.0 @@ -11126,26 +11152,26 @@ snapshots: '@types/cli-progress@3.11.6': dependencies: - '@types/node': 22.19.15 + '@types/node': 22.19.17 '@types/connect-history-api-fallback@1.5.4': dependencies: '@types/express-serve-static-core': 4.19.8 - '@types/node': 22.19.15 + '@types/node': 22.19.17 '@types/connect@3.4.38': dependencies: - '@types/node': 22.19.15 + '@types/node': 22.19.17 '@types/cors@2.8.19': dependencies: - '@types/node': 22.19.15 + '@types/node': 22.19.17 '@types/deep-eql@4.0.2': {} '@types/duplexify@3.6.5': dependencies: - '@types/node': 22.19.15 + '@types/node': 22.19.17 '@types/ejs@3.1.5': {} @@ -11167,14 +11193,14 @@ snapshots: '@types/express-serve-static-core@4.19.8': dependencies: - '@types/node': 22.19.15 + '@types/node': 22.19.17 '@types/qs': 6.15.0 '@types/range-parser': 1.2.7 '@types/send': 1.2.1 '@types/express-serve-static-core@5.1.1': dependencies: - '@types/node': 22.19.15 + '@types/node': 22.19.17 '@types/qs': 6.15.0 '@types/range-parser': 1.2.7 '@types/send': 1.2.1 @@ -11196,13 +11222,13 @@ snapshots: '@types/graceful-fs@4.1.9': dependencies: - '@types/node': 22.19.15 + '@types/node': 22.19.17 '@types/http-errors@2.0.5': {} '@types/http-proxy@1.17.17': dependencies: - '@types/node': 22.19.15 + '@types/node': 22.19.17 '@types/ini@4.1.1': {} @@ -11218,7 +11244,7 @@ snapshots: '@types/karma@6.3.9': dependencies: - '@types/node': 22.19.15 + '@types/node': 22.19.17 log4js: 6.9.1 transitivePeerDependencies: - supports-color @@ -11227,7 +11253,7 @@ snapshots: '@types/loader-utils@3.0.0(esbuild@0.27.3)': dependencies: - '@types/node': 22.19.15 + '@types/node': 22.19.17 webpack: 5.105.4(esbuild@0.27.3) transitivePeerDependencies: - '@swc/core' @@ -11245,22 +11271,22 @@ snapshots: '@types/node-fetch@2.6.13': dependencies: - '@types/node': 22.19.15 + '@types/node': 22.19.17 form-data: 4.0.5 - '@types/node@22.19.15': + '@types/node@22.19.17': dependencies: - undici-types: 7.24.6 + undici-types: 7.24.7 '@types/node@24.12.0': dependencies: - undici-types: 7.24.6 + undici-types: 7.24.7 '@types/npm-package-arg@6.1.4': {} '@types/npm-registry-fetch@8.0.9': dependencies: - '@types/node': 22.19.15 + '@types/node': 22.19.17 '@types/node-fetch': 2.6.13 '@types/npm-package-arg': 6.1.4 '@types/npmlog': 7.0.0 @@ -11268,27 +11294,27 @@ snapshots: '@types/npmlog@7.0.0': dependencies: - '@types/node': 22.19.15 + '@types/node': 22.19.17 '@types/pacote@11.1.8': dependencies: - '@types/node': 22.19.15 + '@types/node': 22.19.17 '@types/npm-registry-fetch': 8.0.9 '@types/npmlog': 7.0.0 '@types/ssri': 7.1.5 '@types/parse-glob@3.0.32': {} - '@types/picomatch@4.0.2': {} + '@types/picomatch@4.0.3': {} '@types/progress@2.0.7': dependencies: - '@types/node': 22.19.15 + '@types/node': 22.19.17 '@types/pumpify@1.4.5': dependencies: '@types/duplexify': 3.6.5 - '@types/node': 22.19.15 + '@types/node': 22.19.17 '@types/qs@6.15.0': {} @@ -11298,7 +11324,7 @@ snapshots: '@types/responselike@1.0.0': dependencies: - '@types/node': 22.19.15 + '@types/node': 22.19.17 '@types/retry@0.12.0': {} @@ -11309,11 +11335,11 @@ snapshots: '@types/send@0.17.6': dependencies: '@types/mime': 1.3.5 - '@types/node': 22.19.15 + '@types/node': 22.19.17 '@types/send@1.2.1': dependencies: - '@types/node': 22.19.15 + '@types/node': 22.19.17 '@types/serve-index@1.9.4': dependencies: @@ -11322,38 +11348,38 @@ snapshots: '@types/serve-static@1.15.10': dependencies: '@types/http-errors': 2.0.5 - '@types/node': 22.19.15 + '@types/node': 22.19.17 '@types/send': 0.17.6 '@types/serve-static@2.2.0': dependencies: '@types/http-errors': 2.0.5 - '@types/node': 22.19.15 + '@types/node': 22.19.17 '@types/sockjs@0.3.36': dependencies: - '@types/node': 22.19.15 + '@types/node': 22.19.17 '@types/ssri@7.1.5': dependencies: - '@types/node': 22.19.15 + '@types/node': 22.19.17 '@types/stack-trace@0.0.33': {} '@types/tar-stream@3.1.4': dependencies: - '@types/node': 22.19.15 + '@types/node': 22.19.17 '@types/watchpack@2.4.5': dependencies: '@types/graceful-fs': 4.1.9 - '@types/node': 22.19.15 + '@types/node': 22.19.17 '@types/which@3.0.4': {} '@types/ws@8.18.1': dependencies: - '@types/node': 22.19.15 + '@types/node': 22.19.17 '@types/yargs-parser@21.0.3': {} @@ -11365,7 +11391,7 @@ snapshots: '@types/yauzl@2.10.3': dependencies: - '@types/node': 22.19.15 + '@types/node': 22.19.17 optional: true '@typescript-eslint/eslint-plugin@8.57.2(@typescript-eslint/parser@8.57.2(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2))(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2)': @@ -11428,6 +11454,8 @@ snapshots: '@typescript-eslint/types@8.57.2': {} + '@typescript-eslint/types@8.58.0': {} + '@typescript-eslint/typescript-estree@8.57.2(typescript@6.0.2)': dependencies: '@typescript-eslint/project-service': 8.57.2(typescript@6.0.2) @@ -11435,7 +11463,7 @@ snapshots: '@typescript-eslint/types': 8.57.2 '@typescript-eslint/visitor-keys': 8.57.2 debug: 4.4.3(supports-color@10.2.2) - minimatch: 10.2.4 + minimatch: 10.2.5 semver: 7.7.4 tinyglobby: 0.2.15 ts-api-utils: 2.5.0(typescript@6.0.2) @@ -11971,7 +11999,7 @@ snapshots: async@2.6.4: dependencies: - lodash: 4.17.23 + lodash: 4.18.1 async@3.2.6: {} @@ -11981,8 +12009,8 @@ snapshots: autoprefixer@10.4.27(postcss@8.5.8): dependencies: - browserslist: 4.28.1 - caniuse-lite: 1.0.30001782 + browserslist: 4.28.2 + caniuse-lite: 1.0.30001786 fraction.js: 5.3.4 picocolors: 1.1.1 postcss: 8.5.8 @@ -12043,24 +12071,24 @@ snapshots: bare-events@2.8.2: {} - bare-fs@4.5.6: + bare-fs@4.6.0: dependencies: bare-events: 2.8.2 bare-path: 3.0.0 - bare-stream: 2.11.0(bare-events@2.8.2) + bare-stream: 2.12.0(bare-events@2.8.2) bare-url: 2.4.0 fast-fifo: 1.3.2 transitivePeerDependencies: - bare-abort-controller - react-native-b4a - bare-os@3.8.4: {} + bare-os@3.8.7: {} bare-path@3.0.0: dependencies: - bare-os: 3.8.4 + bare-os: 3.8.7 - bare-stream@2.11.0(bare-events@2.8.2): + bare-stream@2.12.0(bare-events@2.8.2): dependencies: streamx: 2.25.0 teex: 1.0.1 @@ -12077,7 +12105,7 @@ snapshots: base64id@2.0.0: {} - baseline-browser-mapping@2.10.12: {} + baseline-browser-mapping@2.10.16: {} basic-ftp@5.2.0: {} @@ -12232,13 +12260,13 @@ snapshots: dependencies: pako: 0.2.9 - browserslist@4.28.1: + browserslist@4.28.2: dependencies: - baseline-browser-mapping: 2.10.12 - caniuse-lite: 1.0.30001782 - electron-to-chromium: 1.5.328 - node-releases: 2.0.36 - update-browserslist-db: 1.2.3(browserslist@4.28.1) + baseline-browser-mapping: 2.10.16 + caniuse-lite: 1.0.30001786 + electron-to-chromium: 1.5.332 + node-releases: 2.0.37 + update-browserslist-db: 1.2.3(browserslist@4.28.2) bs-recipes@1.3.4: {} @@ -12270,7 +12298,7 @@ snapshots: '@npmcli/fs': 5.0.0 fs-minipass: 3.0.3 glob: 13.0.6 - lru-cache: 11.2.7 + lru-cache: 11.3.2 minipass: 7.1.3 minipass-collect: 2.0.1 minipass-flush: 1.0.7 @@ -12309,7 +12337,7 @@ snapshots: callsites@3.1.0: {} - caniuse-lite@1.0.30001782: {} + caniuse-lite@1.0.30001786: {} caseless@0.12.0: {} @@ -12517,7 +12545,7 @@ snapshots: core-js-compat@3.49.0: dependencies: - browserslist: 4.28.1 + browserslist: 4.28.2 core-util-is@1.0.2: {} @@ -12679,7 +12707,7 @@ snapshots: has-property-descriptors: 1.0.2 object-keys: 1.1.1 - defu@6.1.4: {} + defu@6.1.7: {} degenerator@5.0.1: dependencies: @@ -12765,7 +12793,7 @@ snapshots: easy-extender@2.3.4: dependencies: - lodash: 4.17.23 + lodash: 4.18.1 eazy-logger@4.1.0: dependencies: @@ -12784,7 +12812,7 @@ snapshots: ejs@5.0.1: {} - electron-to-chromium@1.5.328: {} + electron-to-chromium@1.5.332: {} emoji-regex@10.6.0: {} @@ -12823,7 +12851,7 @@ snapshots: engine.io@6.6.6(bufferutil@4.1.0)(utf-8-validate@6.0.6): dependencies: '@types/cors': 2.8.19 - '@types/node': 22.19.15 + '@types/node': 22.19.17 '@types/ws': 8.18.1 accepts: 1.3.8 base64id: 2.0.0 @@ -13003,21 +13031,21 @@ snapshots: dependencies: eslint: 10.1.0(jiti@2.6.1) - eslint-import-resolver-node@0.3.9: + eslint-import-resolver-node@0.3.10: dependencies: debug: 3.2.7 is-core-module: 2.16.1 - resolve: 1.22.11 + resolve: 2.0.0-next.6 transitivePeerDependencies: - supports-color - eslint-module-utils@2.12.1(@typescript-eslint/parser@8.57.2(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2))(eslint-import-resolver-node@0.3.9)(eslint@10.1.0(jiti@2.6.1)): + eslint-module-utils@2.12.1(@typescript-eslint/parser@8.57.2(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2))(eslint-import-resolver-node@0.3.10)(eslint@10.1.0(jiti@2.6.1)): dependencies: debug: 3.2.7 optionalDependencies: '@typescript-eslint/parser': 8.57.2(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2) eslint: 10.1.0(jiti@2.6.1) - eslint-import-resolver-node: 0.3.9 + eslint-import-resolver-node: 0.3.10 transitivePeerDependencies: - supports-color @@ -13031,8 +13059,8 @@ snapshots: debug: 3.2.7 doctrine: 2.1.0 eslint: 10.1.0(jiti@2.6.1) - eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.57.2(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2))(eslint-import-resolver-node@0.3.9)(eslint@10.1.0(jiti@2.6.1)) + eslint-import-resolver-node: 0.3.10 + eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.57.2(eslint@10.1.0(jiti@2.6.1))(typescript@6.0.2))(eslint-import-resolver-node@0.3.10)(eslint@10.1.0(jiti@2.6.1)) hasown: 2.0.2 is-core-module: 2.16.1 is-glob: 4.0.3 @@ -13072,9 +13100,9 @@ snapshots: dependencies: '@eslint-community/eslint-utils': 4.9.1(eslint@10.1.0(jiti@2.6.1)) '@eslint-community/regexpp': 4.12.2 - '@eslint/config-array': 0.23.3 - '@eslint/config-helpers': 0.5.3 - '@eslint/core': 1.1.1 + '@eslint/config-array': 0.23.4 + '@eslint/config-helpers': 0.5.4 + '@eslint/core': 1.2.0 '@eslint/plugin-kit': 0.6.1 '@humanfs/node': 0.16.7 '@humanwhocodes/module-importer': 1.0.1 @@ -13097,7 +13125,7 @@ snapshots: imurmurhash: 0.1.4 is-glob: 4.0.3 json-stable-stringify-without-jsonify: 1.0.1 - minimatch: 10.2.4 + minimatch: 10.2.5 natural-compare: 1.4.0 optionator: 0.9.4 optionalDependencies: @@ -13169,7 +13197,7 @@ snapshots: express-rate-limit@5.5.1: {} - express-rate-limit@8.3.1(express@5.2.1): + express-rate-limit@8.3.2(express@5.2.1): dependencies: express: 5.2.1 ip-address: 10.1.0 @@ -13592,7 +13620,7 @@ snapshots: glob@13.0.6: dependencies: - minimatch: 10.2.4 + minimatch: 10.2.5 minipass: 7.1.3 path-scurry: 2.0.2 @@ -13716,11 +13744,11 @@ snapshots: dependencies: function-bind: 1.1.2 - hono@4.12.9: {} + hono@4.12.12: {} hosted-git-info@9.0.2: dependencies: - lru-cache: 11.2.7 + lru-cache: 11.3.2 hpack.js@2.1.6: dependencies: @@ -13874,7 +13902,7 @@ snapshots: ignore-walk@8.0.0: dependencies: - minimatch: 10.2.4 + minimatch: 10.2.5 ignore@5.3.2: {} @@ -14181,7 +14209,7 @@ snapshots: jest-worker@27.5.1: dependencies: - '@types/node': 22.19.15 + '@types/node': 22.19.17 merge-stream: 2.0.0 supports-color: 8.1.1 @@ -14203,8 +14231,8 @@ snapshots: jsdom@29.0.1: dependencies: - '@asamuzakjp/css-color': 5.1.1 - '@asamuzakjp/dom-selector': 7.0.4 + '@asamuzakjp/css-color': 5.1.6 + '@asamuzakjp/dom-selector': 7.0.8 '@bramus/specificity': 2.4.2 '@csstools/css-syntax-patches-for-csstree': 1.1.2(css-tree@3.2.1) '@exodus/bytes': 1.15.0 @@ -14213,7 +14241,7 @@ snapshots: decimal.js: 10.6.0 html-encoding-sniffer: 6.0.0 is-potential-custom-element-name: 1.0.1 - lru-cache: 11.2.7 + lru-cache: 11.3.2 parse5: 8.0.0 saxes: 6.0.0 symbol-tree: 3.2.4 @@ -14345,7 +14373,7 @@ snapshots: graceful-fs: 4.2.11 http-proxy: 1.18.1(debug@4.4.3) isbinaryfile: 4.0.10 - lodash: 4.17.23 + lodash: 4.18.1 log4js: 6.9.1 mime: 2.6.0 minimatch: 3.1.5 @@ -14479,6 +14507,8 @@ snapshots: lodash@4.17.23: {} + lodash@4.18.1: {} + log-symbols@7.0.1: dependencies: is-unicode-supported: 2.1.0 @@ -14508,7 +14538,7 @@ snapshots: dependencies: graceful-fs: 4.2.11 is-promise: 2.2.2 - lodash: 4.17.23 + lodash: 4.18.1 pify: 3.0.0 steno: 0.4.4 @@ -14516,7 +14546,7 @@ snapshots: lru-cache@10.4.3: {} - lru-cache@11.2.7: {} + lru-cache@11.3.2: {} lru-cache@5.1.1: dependencies: @@ -14635,10 +14665,6 @@ snapshots: minimalistic-assert@1.0.1: {} - minimatch@10.2.4: - dependencies: - brace-expansion: 5.0.5 - minimatch@10.2.5: dependencies: brace-expansion: 5.0.5 @@ -14761,7 +14787,7 @@ snapshots: neo-async@2.6.2: {} - netmask@2.0.2: {} + netmask@2.1.0: {} ng-packagr@22.0.0-next.1(@angular/compiler-cli@22.0.0-next.6(@angular/compiler@22.0.0-next.6)(typescript@6.0.2))(tslib@2.8.1)(typescript@6.0.2): dependencies: @@ -14771,7 +14797,7 @@ snapshots: '@rollup/wasm-node': 4.60.0 ajv: 8.18.0 ansi-colors: 4.1.3 - browserslist: 4.28.1 + browserslist: 4.28.2 chokidar: 5.0.0 commander: 14.0.3 dependency-graph: 1.0.0 @@ -14806,6 +14832,13 @@ snapshots: node-domexception@1.0.0: {} + node-exports-info@1.6.0: + dependencies: + array.prototype.flatmap: 1.3.3 + es-errors: 1.3.0 + object.entries: 1.1.9 + semver: 6.3.1 + node-fetch-native@1.6.7: {} node-fetch@2.6.7(encoding@0.1.13): @@ -14848,7 +14881,7 @@ snapshots: transitivePeerDependencies: - supports-color - node-releases@2.0.36: {} + node-releases@2.0.37: {} nopt@9.0.0: dependencies: @@ -14921,6 +14954,13 @@ snapshots: has-symbols: 1.1.0 object-keys: 1.1.1 + object.entries@1.1.9: + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.4 + define-properties: 1.2.1 + es-object-atoms: 1.1.1 + object.fromentries@2.0.8: dependencies: call-bind: 1.0.8 @@ -15066,7 +15106,7 @@ snapshots: pac-resolver@7.0.1: dependencies: degenerator: 5.0.1 - netmask: 2.0.2 + netmask: 2.1.0 package-json-from-dist@1.0.1: {} @@ -15140,12 +15180,12 @@ snapshots: path-scurry@2.0.2: dependencies: - lru-cache: 11.2.7 + lru-cache: 11.3.2 minipass: 7.1.3 path-to-regexp@0.1.13: {} - path-to-regexp@8.4.0: {} + path-to-regexp@8.4.2: {} pathe@1.1.2: {} @@ -15312,7 +15352,7 @@ snapshots: '@protobufjs/path': 1.1.2 '@protobufjs/pool': 1.1.0 '@protobufjs/utf8': 1.1.0 - '@types/node': 22.19.15 + '@types/node': 22.19.17 long: 5.3.2 proxy-addr@2.0.7: @@ -15422,7 +15462,7 @@ snapshots: cross-fetch: 4.1.0(encoding@0.1.13) is-url: 1.2.4 js-base64: 3.7.8 - lodash: 4.17.23 + lodash: 4.18.1 pako: 1.0.11 pluralize: 8.0.0 readable-stream: 4.5.2 @@ -15526,13 +15566,13 @@ snapshots: regenerate: 1.4.2 regenerate-unicode-properties: 10.2.2 regjsgen: 0.8.0 - regjsparser: 0.13.0 + regjsparser: 0.13.1 unicode-match-property-ecmascript: 2.0.0 unicode-match-property-value-ecmascript: 2.2.1 regjsgen@0.8.0: {} - regjsparser@0.13.0: + regjsparser@0.13.1: dependencies: jsesc: 3.1.0 @@ -15562,6 +15602,15 @@ snapshots: path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 + resolve@2.0.0-next.6: + dependencies: + es-errors: 1.3.0 + is-core-module: 2.16.1 + node-exports-info: 1.6.0 + object-keys: 1.1.1 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 + resp-modifier@6.0.2: dependencies: debug: 2.6.9 @@ -15641,12 +15690,12 @@ snapshots: optionalDependencies: '@babel/code-frame': 7.29.0 - rollup-plugin-sourcemaps2@0.5.6(@types/node@22.19.15)(rollup@4.60.0): + rollup-plugin-sourcemaps2@0.5.6(@types/node@22.19.17)(rollup@4.60.0): dependencies: '@rollup/pluginutils': 5.3.0(rollup@4.60.0) rollup: 4.60.0 optionalDependencies: - '@types/node': 22.19.15 + '@types/node': 22.19.17 rollup@4.60.0: dependencies: @@ -15685,7 +15734,7 @@ snapshots: depd: 2.0.0 is-promise: 4.0.0 parseurl: 1.3.3 - path-to-regexp: 8.4.0 + path-to-regexp: 8.4.2 transitivePeerDependencies: - supports-color @@ -15915,7 +15964,7 @@ snapshots: dependencies: '@sigstore/bundle': 4.0.0 '@sigstore/core': 3.2.0 - '@sigstore/protobuf-specs': 0.5.0 + '@sigstore/protobuf-specs': 0.5.1 '@sigstore/sign': 4.1.1 '@sigstore/tuf': 4.0.2 '@sigstore/verify': 3.1.0 @@ -16233,7 +16282,7 @@ snapshots: pump: 3.0.4 tar-stream: 3.1.8 optionalDependencies: - bare-fs: 4.5.6 + bare-fs: 4.6.0 bare-path: 3.0.0 transitivePeerDependencies: - bare-abort-controller @@ -16252,7 +16301,7 @@ snapshots: tar-stream@3.1.8: dependencies: b4a: 1.8.0 - bare-fs: 4.5.6 + bare-fs: 4.6.0 fast-fifo: 1.3.2 streamx: 2.25.0 transitivePeerDependencies: @@ -16332,7 +16381,7 @@ snapshots: tinybench@2.9.0: {} - tinyexec@1.0.4: {} + tinyexec@1.1.1: {} tinyglobby@0.2.15: dependencies: @@ -16343,15 +16392,15 @@ snapshots: tldts-core@6.1.86: {} - tldts-core@7.0.27: {} + tldts-core@7.0.28: {} tldts@6.1.86: dependencies: tldts-core: 6.1.86 - tldts@7.0.27: + tldts@7.0.28: dependencies: - tldts-core: 7.0.27 + tldts-core: 7.0.28 tmp@0.2.5: {} @@ -16369,7 +16418,7 @@ snapshots: tough-cookie@6.0.1: dependencies: - tldts: 7.0.27 + tldts: 7.0.28 tr46@0.0.3: {} @@ -16497,7 +16546,7 @@ snapshots: has-symbols: 1.1.0 which-boxed-primitive: 1.1.1 - undici-types@7.24.6: {} + undici-types@7.24.7: {} undici@6.24.1: {} @@ -16506,7 +16555,7 @@ snapshots: unenv@1.10.0: dependencies: consola: 3.4.2 - defu: 6.1.4 + defu: 6.1.7 mime: 3.0.0 node-fetch-native: 1.6.7 pathe: 1.1.2 @@ -16542,9 +16591,9 @@ snapshots: unpipe@1.0.0: {} - update-browserslist-db@1.2.3(browserslist@4.28.1): + update-browserslist-db@1.2.3(browserslist@4.28.2): dependencies: - browserslist: 4.28.1 + browserslist: 4.28.2 escalade: 3.2.0 picocolors: 1.1.1 @@ -16680,7 +16729,7 @@ snapshots: picomatch: 4.0.4 std-env: 4.0.0 tinybench: 2.9.0 - tinyexec: 1.0.4 + tinyexec: 1.1.1 tinyglobby: 0.2.15 tinyrainbow: 3.1.0 vite: 7.3.1(@types/node@24.12.0)(jiti@2.6.1)(less@4.6.4)(sass@1.98.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3) @@ -16817,7 +16866,7 @@ snapshots: '@webassemblyjs/wasm-parser': 1.14.1 acorn: 8.16.0 acorn-import-phases: 1.0.4(acorn@8.16.0) - browserslist: 4.28.1 + browserslist: 4.28.2 chrome-trace-event: 1.0.4 enhanced-resolve: 5.20.1 es-module-lexer: 2.0.0 From 84e951bfc2a71f6e4d24c1c661f77980795768d8 Mon Sep 17 00:00:00 2001 From: Angular Robot Date: Wed, 8 Apr 2026 16:50:33 +0000 Subject: [PATCH 222/226] build: update cross-repo angular dependencies See associated pull request for more information. --- tests/e2e/ng-snapshot/package.json | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/tests/e2e/ng-snapshot/package.json b/tests/e2e/ng-snapshot/package.json index 45fc68c371a1..f7b496e28753 100644 --- a/tests/e2e/ng-snapshot/package.json +++ b/tests/e2e/ng-snapshot/package.json @@ -2,21 +2,21 @@ "description": "snapshot versions of Angular for e2e testing", "private": true, "dependencies": { - "@angular/animations": "github:angular/animations-builds#846fa4e5df3be559bab7a1dde61c79357dad1e7b", + "@angular/animations": "github:angular/animations-builds#20802edfe055db681304d56e5188a0fadae28dce", "@angular/cdk": "github:angular/cdk-builds#cebd4fb52989b094cbd8a09c7066f122bbdb414d", - "@angular/common": "github:angular/common-builds#dd62b28298ab0cae7194875a22c1f7572e93368f", - "@angular/compiler": "github:angular/compiler-builds#49daebd5c3980f47d6709364745beb29ea8311b0", - "@angular/compiler-cli": "github:angular/compiler-cli-builds#96202a5e38519f9690f6777d79eb4e7c7300b103", - "@angular/core": "github:angular/core-builds#527aa6c8f7ba845e19d18e1b6bebdbc86745c13c", - "@angular/forms": "github:angular/forms-builds#62cf153ea76ff928b2aee9ecf8413a5311399fe9", - "@angular/language-service": "github:angular/language-service-builds#7dbbdcab2f9d4f669f806cb552bd37b2b3ee43d9", - "@angular/localize": "github:angular/localize-builds#d2be2d564e173ed50c7093d6b8318fbf468cac4b", + "@angular/common": "github:angular/common-builds#7ac27fc48206d910a3ca4b9d0a6eadf8cbbd2d50", + "@angular/compiler": "github:angular/compiler-builds#f9c5c4608313140fee47486b67c5dee51a805286", + "@angular/compiler-cli": "github:angular/compiler-cli-builds#d41b6f7aaaaf9549202611f1ca67093e7375ff80", + "@angular/core": "github:angular/core-builds#2a8277d272d34748ad1c13ecd57596872ddb79ce", + "@angular/forms": "github:angular/forms-builds#616341d5b4f3d502a718006223ff73eafc6c4c3b", + "@angular/language-service": "github:angular/language-service-builds#90856cae8e70b5b40bf94435f8f806e076f01502", + "@angular/localize": "github:angular/localize-builds#3bdb99046a344d23d4e65e79d2e0c3ec73a1220d", "@angular/material": "github:angular/material-builds#b48994a944ee2b02c280ff063078333749583bcd", "@angular/material-moment-adapter": "github:angular/material-moment-adapter-builds#7c67d4ea11c343eef33ac8a80df0bd3347e21d62", - "@angular/platform-browser": "github:angular/platform-browser-builds#2c77aa905f8cd656bf9ad440e2d4b873a0eb52de", - "@angular/platform-browser-dynamic": "github:angular/platform-browser-dynamic-builds#85cca39bf8f16852d3743aa4bb6693018569cda4", - "@angular/platform-server": "github:angular/platform-server-builds#7d788147af4553bf01ae1ef935f64c22f162ab8b", - "@angular/router": "github:angular/router-builds#b0f500845388441750934c548d22ad2e13d65c87", + "@angular/platform-browser": "github:angular/platform-browser-builds#c2b5db3c833cb22f6dbafb7938c98c823f94b3aa", + "@angular/platform-browser-dynamic": "github:angular/platform-browser-dynamic-builds#2d64e1c5c30fd55b6916668f9ca2338d951aa6bb", + "@angular/platform-server": "github:angular/platform-server-builds#d9053173496151a0c8daacf4db4da5a973831662", + "@angular/router": "github:angular/router-builds#3c273a7758199c1c5285a987e9a4d9982a20cf36", "@angular/service-worker": "github:angular/service-worker-builds#842dd6d94f1e53b82a9a7810c1e9b48d682653f8" } } From f4f52329372dcdd1173e005f2b038ce96da2901b Mon Sep 17 00:00:00 2001 From: Doug Parker Date: Wed, 8 Apr 2026 11:44:57 -0700 Subject: [PATCH 223/226] docs: release notes for the v21.2.7 release --- CHANGELOG.md | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index f9d046c94468..91301fe67711 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,22 @@ + + +# 21.2.7 (2026-04-08) + +### @angular/cli + +| Commit | Type | Description | +| --------------------------------------------------------------------------------------------------- | ---- | -------------------------------------------------------------- | +| [971041aa1](https://github.com/angular/angular-cli/commit/971041aa11e4546772e4677b77ceec2ad1374496) | fix | handle missing package manager during analytics initialization | + +### @angular/build + +| Commit | Type | Description | +| --------------------------------------------------------------------------------------------------- | ---- | ---------------------------------------------------------- | +| [365cce81d](https://github.com/angular/angular-cli/commit/365cce81dde91463d4f0049a69feaed018902585) | fix | preserve coverage ignore comments in development | +| [9f74660c3](https://github.com/angular/angular-cli/commit/9f74660c3688bb1f0d6a7608a136a30dbfe4d7e9) | fix | show clear error when styleUrl points to a TypeScript file | + + + # 22.0.0-next.4 (2026-04-01) From 3601c7510a9b38abd38f1d9c1806a023637f52e3 Mon Sep 17 00:00:00 2001 From: Doug Parker Date: Wed, 8 Apr 2026 11:51:38 -0700 Subject: [PATCH 224/226] release: cut the v22.0.0-next.5 release --- CHANGELOG.md | 35 +++++++++++++++++++++++++++++++++++ package.json | 2 +- 2 files changed, 36 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 91301fe67711..1f7c1033b434 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,38 @@ + + +# 22.0.0-next.5 (2026-04-08) + +## Breaking Changes + +### @angular/build + +- `istanbul-lib-instrument` is now an optional peer dependency. + Projects using karma with code coverage enabled will need to ensure that istanbul-lib-instrument is installed. Note: `ng update` will automatically add this dependency during the update process. + +### @schematics/angular + +| Commit | Type | Description | +| --------------------------------------------------------------------------------------------------- | ---- | ------------------------------------------------------------------------- | +| [be60a63b7](https://github.com/angular/angular-cli/commit/be60a63b7b8fdea26bfd3329ce54d321334db2d2) | feat | add migrate-karma-to-vitest update migration | +| [43505066e](https://github.com/angular/angular-cli/commit/43505066e2350ca875051bb0f9991da8003c9247) | feat | add migration to add istanbul-lib-instrument | +| [470e1f937](https://github.com/angular/angular-cli/commit/470e1f937492e73971dea9c39af83368caf74e42) | fix | add istanbul-lib-instrument to application/library generator dependencies | + +### @angular/cli + +| Commit | Type | Description | +| --------------------------------------------------------------------------------------------------- | ---- | -------------------------------------------------------------- | +| [422c8183e](https://github.com/angular/angular-cli/commit/422c8183ea3596660475491b9630df34276c468e) | fix | handle missing package manager during analytics initialization | + +### @angular/build + +| Commit | Type | Description | +| --------------------------------------------------------------------------------------------------- | ---- | ---------------------------------------------------------- | +| [3007f46b7](https://github.com/angular/angular-cli/commit/3007f46b7e077227b17d8bb1090edd2f8ff19ae3) | feat | move istanbul-lib-instrument to optional peer dependency | +| [829bdc61d](https://github.com/angular/angular-cli/commit/829bdc61dd77231bb13f01efd052811661fe4f48) | fix | preserve coverage ignore comments in development | +| [e2f95fc19](https://github.com/angular/angular-cli/commit/e2f95fc19a648f3da84b58ace91283d0fa422cc1) | fix | show clear error when styleUrl points to a TypeScript file | + + + # 21.2.7 (2026-04-08) diff --git a/package.json b/package.json index 0828b48b0641..36467b1a21f9 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@angular/devkit-repo", - "version": "22.0.0-next.4", + "version": "22.0.0-next.5", "private": true, "description": "Software Development Kit for Angular", "keywords": [ From c30452389d565c9c85920be9811764cdca1309e0 Mon Sep 17 00:00:00 2001 From: Doug Parker Date: Wed, 8 Apr 2026 14:34:29 -0700 Subject: [PATCH 225/226] docs: release notes for the v19.2.24 release --- CHANGELOG.md | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1f7c1033b434..8ba864479779 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -52,6 +52,18 @@ + + +# 19.2.24 (2026-04-08) + +### @angular/build + +| Commit | Type | Description | +| --------------------------------------------------------------------------------------------------- | ---- | ---------------------- | +| [f4595d599](https://github.com/angular/angular-cli/commit/f4595d599001713ae978865d7f84e33e5a9a077a) | fix | update vite to `6.4.2` | + + + # 22.0.0-next.4 (2026-04-01) @@ -2930,6 +2942,7 @@ - Protractor is no longer supported. Protractor was marked end-of-life in August 2023 (see https://protractortest.org/). Projects still relying on Protractor should consider migrating to another E2E testing framework, several support solid migration paths from Protractor. + - https://angular.dev/tools/cli/end-to-end - https://blog.angular.dev/the-state-of-end-to-end-testing-with-angular-d175f751cb9c @@ -6564,6 +6577,7 @@ Alan Agius, Charles Lyding and Doug Parker ### @angular/cli - Several changes to the `ng analytics` command syntax. + - `ng analytics project ` has been replaced with `ng analytics ` - `ng analytics ` has been replaced with `ng analytics --global` @@ -6593,6 +6607,7 @@ Alan Agius, Charles Lyding and Doug Parker - `browser` and `karma` builders `script` and `styles` options input files extensions are now validated. Valid extensions for `scripts` are: + - `.js` - `.cjs` - `.mjs` @@ -6601,6 +6616,7 @@ Alan Agius, Charles Lyding and Doug Parker - `.mjsx` Valid extensions for `styles` are: + - `.css` - `.less` - `.sass` From 94aa77cb71d6567218dfbdee0492abc7a057cc77 Mon Sep 17 00:00:00 2001 From: Doug Parker Date: Wed, 8 Apr 2026 16:24:43 -0700 Subject: [PATCH 226/226] docs: release notes for the v20.3.23 release --- CHANGELOG.md | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8ba864479779..f3779f5da66c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -52,6 +52,18 @@ + + +# 20.3.23 (2026-04-08) + +### @angular/build + +| Commit | Type | Description | +| --------------------------------------------------------------------------------------------------- | ---- | ---------------------- | +| [ccab02ba0](https://github.com/angular/angular-cli/commit/ccab02ba0413f25464a6e4cb5871716b221013b7) | fix | update vite to `7.3.2` | + + + # 19.2.24 (2026-04-08) @@ -2942,7 +2954,6 @@ - Protractor is no longer supported. Protractor was marked end-of-life in August 2023 (see https://protractortest.org/). Projects still relying on Protractor should consider migrating to another E2E testing framework, several support solid migration paths from Protractor. - - https://angular.dev/tools/cli/end-to-end - https://blog.angular.dev/the-state-of-end-to-end-testing-with-angular-d175f751cb9c @@ -6577,7 +6588,6 @@ Alan Agius, Charles Lyding and Doug Parker ### @angular/cli - Several changes to the `ng analytics` command syntax. - - `ng analytics project ` has been replaced with `ng analytics ` - `ng analytics ` has been replaced with `ng analytics --global` @@ -6607,7 +6617,6 @@ Alan Agius, Charles Lyding and Doug Parker - `browser` and `karma` builders `script` and `styles` options input files extensions are now validated. Valid extensions for `scripts` are: - - `.js` - `.cjs` - `.mjs` @@ -6616,7 +6625,6 @@ Alan Agius, Charles Lyding and Doug Parker - `.mjsx` Valid extensions for `styles` are: - - `.css` - `.less` - `.sass`