From 9701047b9f41175a498b8bb35563e2ed277b83e1 Mon Sep 17 00:00:00 2001 From: Andrew Scott Date: Fri, 23 May 2025 09:26:48 -0700 Subject: [PATCH 01/12] test(common): Add circular deps test to 19.2.x (#61651) adds circular deps test for http client to 19.2.x branch PR Close #61651 --- packages/common/http/test/provider_spec.ts | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/packages/common/http/test/provider_spec.ts b/packages/common/http/test/provider_spec.ts index d0679c7057bc..b456ec36b987 100644 --- a/packages/common/http/test/provider_spec.ts +++ b/packages/common/http/test/provider_spec.ts @@ -26,6 +26,7 @@ import { ApplicationRef, createEnvironmentInjector, EnvironmentInjector, + ErrorHandler, inject, InjectionToken, PLATFORM_ID, @@ -67,6 +68,27 @@ describe('without provideHttpClientTesting', () => { await Promise.resolve(); expect(stable).toBe(true); }); + + it('can use an ErrorHandler that injects HttpClient', () => { + // This test ensures there is no circular dependency: + TestBed.configureTestingModule({ + providers: [ + provideHttpClient( + withFetch(), + withInterceptors([() => from(Promise.resolve(new HttpResponse()))]), + ), + { + provide: ErrorHandler, + useClass: class extends ErrorHandler { + client = inject(HttpClient); + override handleError(error: any): void {} + }, + }, + ], + }); + + expect(() => TestBed.inject(ApplicationRef)).not.toThrow(); + }); }); describe('provideHttpClient', () => { From e818a009a1c3ca94c56dce083c510f444c558ed5 Mon Sep 17 00:00:00 2001 From: Alan Agius <17563226+alan-agius4@users.noreply.github.com> Date: Fri, 23 May 2025 06:27:29 +0000 Subject: [PATCH 02/12] build: exclude esbuild metadata files from distributable packages (#61636) Prevents esbuild generated metadata files from being included in build artifacts. This reduces package size and avoids shipping unnecessary internal build data. PR Close #61636 --- packages/compiler-cli/BUILD.bazel | 1 + packages/localize/schematics/ng-add/BUILD.bazel | 2 ++ packages/localize/tools/BUILD.bazel | 1 + packages/service-worker/cli/BUILD.bazel | 1 + 4 files changed, 5 insertions(+) diff --git a/packages/compiler-cli/BUILD.bazel b/packages/compiler-cli/BUILD.bazel index a6fd545d7741..f206bba50b2b 100644 --- a/packages/compiler-cli/BUILD.bazel +++ b/packages/compiler-cli/BUILD.bazel @@ -68,6 +68,7 @@ esbuild( "yargs", ], format = "esm", + metafile = False, platform = "node", splitting = True, target = "node12", diff --git a/packages/localize/schematics/ng-add/BUILD.bazel b/packages/localize/schematics/ng-add/BUILD.bazel index eef44f1d76c9..33dda23f722a 100644 --- a/packages/localize/schematics/ng-add/BUILD.bazel +++ b/packages/localize/schematics/ng-add/BUILD.bazel @@ -25,7 +25,9 @@ esbuild( "@schematics/*", ], format = "cjs", + metafile = False, platform = "node", + target = "node20", deps = [":ng-add"], ) diff --git a/packages/localize/tools/BUILD.bazel b/packages/localize/tools/BUILD.bazel index 4a127f112142..ebe8ba7cc4eb 100644 --- a/packages/localize/tools/BUILD.bazel +++ b/packages/localize/tools/BUILD.bazel @@ -47,6 +47,7 @@ esbuild( "fast-glob", ], format = "esm", + metafile = False, platform = "node", splitting = True, target = "node12", diff --git a/packages/service-worker/cli/BUILD.bazel b/packages/service-worker/cli/BUILD.bazel index 87d901080ac4..98338f23af42 100644 --- a/packages/service-worker/cli/BUILD.bazel +++ b/packages/service-worker/cli/BUILD.bazel @@ -26,6 +26,7 @@ esbuild( "@angular/service-worker", ], format = "esm", + metafile = False, platform = "node", target = "node12", deps = [ From 428f3c470663d6913b765d5b4d7109109535ee4e Mon Sep 17 00:00:00 2001 From: Alan Agius <17563226+alan-agius4@users.noreply.github.com> Date: Fri, 23 May 2025 06:30:29 +0000 Subject: [PATCH 03/12] build: disable esbuild metadata file generation (#61636) Disables creation of the esbuild meta.json file, which is not utilized in the build process. This streamlines the output and avoids generating unused artifacts. PR Close #61636 --- .github/actions/deploy-docs-site/BUILD.bazel | 1 + adev/shared-docs/pipeline/BUILD.bazel | 8 ++++++++ adev/shared-docs/pipeline/api-gen/extraction/BUILD.bazel | 1 + adev/shared-docs/pipeline/api-gen/manifest/BUILD.bazel | 1 + adev/shared-docs/pipeline/api-gen/rendering/BUILD.bazel | 1 + tools/saucelabs-daemon/launcher/BUILD.bazel | 1 + 6 files changed, 13 insertions(+) diff --git a/.github/actions/deploy-docs-site/BUILD.bazel b/.github/actions/deploy-docs-site/BUILD.bazel index 2606a1bc3145..483dd48f0d29 100644 --- a/.github/actions/deploy-docs-site/BUILD.bazel +++ b/.github/actions/deploy-docs-site/BUILD.bazel @@ -14,6 +14,7 @@ esbuild_checked_in( external = [ "undici", ], + metafile = False, platform = "node", target = "node20", deps = [ diff --git a/adev/shared-docs/pipeline/BUILD.bazel b/adev/shared-docs/pipeline/BUILD.bazel index b65c77a61182..c3a81274393e 100644 --- a/adev/shared-docs/pipeline/BUILD.bazel +++ b/adev/shared-docs/pipeline/BUILD.bazel @@ -19,6 +19,7 @@ esbuild_esm_bundle( "jsdom", "playwright-core", ], + metafile = False, output = "guides.mjs", platform = "node", target = "es2022", @@ -38,6 +39,7 @@ esbuild_esm_bundle( external = [ "jsdom", ], + metafile = False, output = "guides-no-mermaid.mjs", platform = "node", target = "es2022", @@ -52,6 +54,7 @@ esbuild_esm_bundle( entry_point = "//adev/shared-docs/pipeline/examples/stackblitz:index.mts", # JSDOM should not be bundled because it has workers and dynamic imports. external = ["jsdom"], + metafile = False, output = "stackblitz.mjs", platform = "node", target = "es2022", @@ -67,6 +70,7 @@ esbuild_esm_bundle( external = [ "typescript", ], + metafile = False, output = "previews.mjs", platform = "node", target = "es2022", @@ -80,6 +84,7 @@ esbuild_esm_bundle( esbuild_esm_bundle( name = "zip-bundle", entry_point = "//adev/shared-docs/pipeline/examples/zip:index.mts", + metafile = False, output = "zip.mjs", platform = "node", target = "es2022", @@ -92,6 +97,7 @@ esbuild_esm_bundle( esbuild_esm_bundle( name = "playground-bundle", entry_point = "//adev/shared-docs/pipeline/tutorials:playground.mts", + metafile = False, output = "playground.mjs", platform = "node", target = "es2022", @@ -104,6 +110,7 @@ esbuild_esm_bundle( esbuild_esm_bundle( name = "tutorial-bundle", entry_point = "//adev/shared-docs/pipeline/tutorials:tutorial.mts", + metafile = False, output = "tutorial.mjs", platform = "node", target = "es2022", @@ -116,6 +123,7 @@ esbuild_esm_bundle( esbuild_esm_bundle( name = "navigation-bundle", entry_point = "//adev/shared-docs/pipeline/navigation:index.mts", + metafile = False, output = "navigation.mjs", platform = "node", target = "es2022", diff --git a/adev/shared-docs/pipeline/api-gen/extraction/BUILD.bazel b/adev/shared-docs/pipeline/api-gen/extraction/BUILD.bazel index 9bfc2a7ee770..03a82ed4bb77 100644 --- a/adev/shared-docs/pipeline/api-gen/extraction/BUILD.bazel +++ b/adev/shared-docs/pipeline/api-gen/extraction/BUILD.bazel @@ -11,6 +11,7 @@ esbuild_esm_bundle( "@angular/compiler-cli", "typescript", ], + metafile = False, output = "bin.mjs", platform = "node", target = "es2022", diff --git a/adev/shared-docs/pipeline/api-gen/manifest/BUILD.bazel b/adev/shared-docs/pipeline/api-gen/manifest/BUILD.bazel index d6f9c62837d8..68e5bccbd197 100644 --- a/adev/shared-docs/pipeline/api-gen/manifest/BUILD.bazel +++ b/adev/shared-docs/pipeline/api-gen/manifest/BUILD.bazel @@ -10,6 +10,7 @@ esbuild_esm_bundle( external = [ "@angular/compiler-cli", ], + metafile = False, output = "bin.mjs", platform = "node", target = "es2022", diff --git a/adev/shared-docs/pipeline/api-gen/rendering/BUILD.bazel b/adev/shared-docs/pipeline/api-gen/rendering/BUILD.bazel index a587f4e86000..a88abc2d8240 100644 --- a/adev/shared-docs/pipeline/api-gen/rendering/BUILD.bazel +++ b/adev/shared-docs/pipeline/api-gen/rendering/BUILD.bazel @@ -7,6 +7,7 @@ package(default_visibility = ["//adev/shared-docs/pipeline/api-gen:__subpackages esbuild_esm_bundle( name = "bin", entry_point = ":index.mts", + metafile = False, output = "bin.mjs", platform = "node", target = "es2022", diff --git a/tools/saucelabs-daemon/launcher/BUILD.bazel b/tools/saucelabs-daemon/launcher/BUILD.bazel index dda2e14a0369..f18389f049b5 100644 --- a/tools/saucelabs-daemon/launcher/BUILD.bazel +++ b/tools/saucelabs-daemon/launcher/BUILD.bazel @@ -20,6 +20,7 @@ esbuild( name = "launcher_cjs", entry_point = "index.ts", format = "cjs", + metafile = False, output = "index.cjs", platform = "node", deps = [":launcher"], From c40b0103471f1473e30e24e0ccf2e785e6879e5a Mon Sep 17 00:00:00 2001 From: Alan Agius <17563226+alan-agius4@users.noreply.github.com> Date: Mon, 26 May 2025 07:23:39 +0000 Subject: [PATCH 04/12] ci: remove sync angular-robot forked repository workflow (#61675) Renovate now supports syncing of non-default base branches, making this workflow obsolete. PR Close #61675 --- .../sync-angular-robot-forked-repo.yml | 46 ------------------- 1 file changed, 46 deletions(-) delete mode 100644 .github/workflows/sync-angular-robot-forked-repo.yml diff --git a/.github/workflows/sync-angular-robot-forked-repo.yml b/.github/workflows/sync-angular-robot-forked-repo.yml deleted file mode 100644 index f117b5945688..000000000000 --- a/.github/workflows/sync-angular-robot-forked-repo.yml +++ /dev/null @@ -1,46 +0,0 @@ -# This workflow addresses a limitation with Renovate's behavior in fork mode. -# Renovate does not automatically sync non-default branches in forked repositories. - -name: Sync angular-robot Forked Repository -on: - workflow_dispatch: - inputs: {} - push: - branches: - # We do no run this on the default branch (main), as this is done by Renovate. - - '[0-9]+.[0-9]+.x' - -permissions: - contents: read - -jobs: - sync_to_upstream: - runs-on: ubuntu-latest - # Prevents multiple concurrent runs of this workflow for the same branch - concurrency: - group: ${{ github.workflow }}-${{ github.ref }} - cancel-in-progress: true - - steps: - - name: Checkout the repository - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - with: - ref: ${{ github.ref }} # Checks out the branch that triggered the push - fetch-depth: 100 - persist-credentials: false - - - name: Push to angular-robot upstream remote - run: | - CURRENT_BRANCH="${{ github.ref_name }}" - UPSTREAM_TOKEN="${{ secrets.ANGULAR_ROBOT_ACCESS_TOKEN }}" - UPSTREAM_OWNER="angular-robot" - UPSTREAM_REPO="angular" - UPSTREAM_URL="https://x-access-token:${UPSTREAM_TOKEN}@github.com/${UPSTREAM_OWNER}/${UPSTREAM_REPO}.git" - - # The UPSTREAM_TOKEN is automatically masked by GitHub Actions for security. - echo "Adding upstream remote: $UPSTREAM_URL" - git remote add upstream "$UPSTREAM_URL" - git remote -v - - echo "Pushing $CURRENT_BRANCH from origin to $UPSTREAM_OWNER upstream..." - git push upstream "$CURRENT_BRANCH" From 6957808bbbdc9e8995d941272f31f5536505da32 Mon Sep 17 00:00:00 2001 From: Jonathan Meier Date: Thu, 22 May 2025 17:24:39 +0000 Subject: [PATCH 05/12] refactor(compiler-cli): remove hardcoded config for unused standalone imports rule enablement (#61622) The hardcoded config was introduced because suppressing the diagnostic via `extendedDiagnostics` in the TS config was unreliable in google3. This has since been fixed and the workaround is no longer needed. PR Close #61622 --- .../src/ngtsc/validation/src/config.ts | 13 ------------- .../validation/src/source_file_validator.ts | 17 +++++++---------- 2 files changed, 7 insertions(+), 23 deletions(-) delete mode 100644 packages/compiler-cli/src/ngtsc/validation/src/config.ts diff --git a/packages/compiler-cli/src/ngtsc/validation/src/config.ts b/packages/compiler-cli/src/ngtsc/validation/src/config.ts deleted file mode 100644 index 69db0959a57d..000000000000 --- a/packages/compiler-cli/src/ngtsc/validation/src/config.ts +++ /dev/null @@ -1,13 +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 - */ - -/** - * Whether the rule to check for unused standalone imports is enabled. - * Used to disable it conditionally in internal builds. - */ -export const UNUSED_STANDALONE_IMPORTS_RULE_ENABLED = true; diff --git a/packages/compiler-cli/src/ngtsc/validation/src/source_file_validator.ts b/packages/compiler-cli/src/ngtsc/validation/src/source_file_validator.ts index ad339f960fe1..b41421bc2020 100644 --- a/packages/compiler-cli/src/ngtsc/validation/src/source_file_validator.ts +++ b/packages/compiler-cli/src/ngtsc/validation/src/source_file_validator.ts @@ -15,7 +15,6 @@ import {SourceFileValidatorRule} from './rules/api'; import {InitializerApiUsageRule} from './rules/initializer_api_usage_rule'; import {UnusedStandaloneImportsRule} from './rules/unused_standalone_imports_rule'; import {TemplateTypeChecker, TypeCheckingConfig} from '../../typecheck/api'; -import {UNUSED_STANDALONE_IMPORTS_RULE_ENABLED} from './config'; /** * Validates that TypeScript files match a specific set of rules set by the Angular compiler. @@ -31,15 +30,13 @@ export class SourceFileValidator { ) { this.rules = [new InitializerApiUsageRule(reflector, importedSymbolsTracker)]; - if (UNUSED_STANDALONE_IMPORTS_RULE_ENABLED) { - this.rules.push( - new UnusedStandaloneImportsRule( - templateTypeChecker, - typeCheckingConfig, - importedSymbolsTracker, - ), - ); - } + this.rules.push( + new UnusedStandaloneImportsRule( + templateTypeChecker, + typeCheckingConfig, + importedSymbolsTracker, + ), + ); } /** From 61c731a21baa5cb7340c59ddfc85dfcbd1758dae Mon Sep 17 00:00:00 2001 From: Joey Perrott Date: Fri, 23 May 2025 17:27:09 +0000 Subject: [PATCH 06/12] build: update tools directory to use rules_js for building (#61658) Use ts_project for building the tools directory targets PR Close #61658 --- tools/defaults2.bzl | 3 ++ tools/saucelabs-daemon/BUILD.bazel | 4 +-- .../background-service/BUILD.bazel | 19 +++++++----- .../background-service/saucelabs-daemon.ts | 1 - tools/saucelabs-daemon/launcher/BUILD.bazel | 7 +++-- tools/testing/BUILD.bazel | 31 ++++++++++--------- ...r_tests.init.ts => browser_tests.init.mts} | 2 +- tools/testing/{fail.spec.js => fail.spec.mjs} | 0 ...init.ts => node_no_angular_tests.init.mts} | 0 ...node_tests.init.ts => node_tests.init.mts} | 9 ++---- ...zone_base_setup.ts => zone_base_setup.mts} | 2 ++ tools/tsconfig.json | 11 +++++-- 12 files changed, 50 insertions(+), 39 deletions(-) rename tools/testing/{browser_tests.init.ts => browser_tests.init.mts} (95%) rename tools/testing/{fail.spec.js => fail.spec.mjs} (100%) rename tools/testing/{node_no_angular_tests.init.ts => node_no_angular_tests.init.mts} (100%) rename tools/testing/{node_tests.init.ts => node_tests.init.mts} (78%) rename tools/testing/{zone_base_setup.ts => zone_base_setup.mts} (96%) diff --git a/tools/defaults2.bzl b/tools/defaults2.bzl index 0657da33c0e6..8c5167ef189c 100644 --- a/tools/defaults2.bzl +++ b/tools/defaults2.bzl @@ -34,6 +34,9 @@ def _determine_tsconfig(testonly): if native.package_name().startswith("packages"): return "//packages:tsconfig_test" if testonly else "//packages:tsconfig_build" + if native.package_name().startswith("tools"): + return "//tools:tsconfig_test" if testonly else "//tools:tsconfig_build" + fail("Failing... a tsconfig value must be provided.") def ts_project( diff --git a/tools/saucelabs-daemon/BUILD.bazel b/tools/saucelabs-daemon/BUILD.bazel index 1e8817ca543e..340b77d2b147 100644 --- a/tools/saucelabs-daemon/BUILD.bazel +++ b/tools/saucelabs-daemon/BUILD.bazel @@ -1,8 +1,8 @@ -load("//tools:defaults.bzl", "ts_library") +load("//tools:defaults2.bzl", "ts_project") package(default_visibility = ["//visibility:public"]) -ts_library( +ts_project( name = "saucelabs-daemon", srcs = [ "browser.ts", diff --git a/tools/saucelabs-daemon/background-service/BUILD.bazel b/tools/saucelabs-daemon/background-service/BUILD.bazel index c877cbc36c15..ef518937abd8 100644 --- a/tools/saucelabs-daemon/background-service/BUILD.bazel +++ b/tools/saucelabs-daemon/background-service/BUILD.bazel @@ -1,17 +1,20 @@ -load("//tools:defaults.bzl", "nodejs_binary", "ts_library") +load("//tools:defaults.bzl", "nodejs_binary") +load("//tools:defaults2.bzl", "ts_project") package(default_visibility = ["//visibility:public"]) -ts_library( +ts_project( name = "background-service_lib", srcs = glob(["*.ts"]), - deps = [ + interop_deps = [ "//:browser-providers", "//tools/saucelabs-daemon", - "@npm//@types/node", - "@npm//@types/selenium-webdriver4", - "@npm//chalk", - "@npm//selenium-webdriver4", + ], + deps = [ + "//:node_modules/@types/node", + "//:node_modules/@types/selenium-webdriver4", + "//:node_modules/chalk", + "//:node_modules/selenium-webdriver4", ], ) @@ -21,7 +24,7 @@ nodejs_binary( ":background-service_lib", "//:sauce_connect", ], - entry_point = ":cli.ts", + entry_point = ":cli.js", templated_args = [ "$(rootpath //:sauce_connect)", ], diff --git a/tools/saucelabs-daemon/background-service/saucelabs-daemon.ts b/tools/saucelabs-daemon/background-service/saucelabs-daemon.ts index 06172fa83fe4..199d8e4dbce3 100644 --- a/tools/saucelabs-daemon/background-service/saucelabs-daemon.ts +++ b/tools/saucelabs-daemon/background-service/saucelabs-daemon.ts @@ -11,7 +11,6 @@ import {Builder, WebDriver} from 'selenium-webdriver4'; import {Browser, getUniqueId} from '../browser'; -import {IpcServer} from './ipc'; import {openSauceConnectTunnel} from './sauce-connect-tunnel'; const defaultCapabilities = { diff --git a/tools/saucelabs-daemon/launcher/BUILD.bazel b/tools/saucelabs-daemon/launcher/BUILD.bazel index f18389f049b5..c7abfc45c973 100644 --- a/tools/saucelabs-daemon/launcher/BUILD.bazel +++ b/tools/saucelabs-daemon/launcher/BUILD.bazel @@ -1,14 +1,15 @@ -load("//tools:defaults.bzl", "esbuild", "ts_library") +load("//tools:defaults.bzl", "esbuild") +load("//tools:defaults2.bzl", "ts_project") package(default_visibility = ["//visibility:public"]) -ts_library( +ts_project( name = "launcher", srcs = [ "index.ts", "launcher.ts", ], - deps = [ + interop_deps = [ "//tools/saucelabs-daemon", "@npm//@types/node", ], diff --git a/tools/testing/BUILD.bazel b/tools/testing/BUILD.bazel index 9f8dc8a79db5..63f20610d9eb 100644 --- a/tools/testing/BUILD.bazel +++ b/tools/testing/BUILD.bazel @@ -1,22 +1,23 @@ -load("//tools:defaults.bzl", "jasmine_node_test", "ts_library") +load("//tools:defaults.bzl", "jasmine_node_test") +load("//tools:defaults2.bzl", "ts_project") package(default_visibility = ["//visibility:public"]) -ts_library( +ts_project( name = "zone_base_setup_lib", testonly = 1, - srcs = ["zone_base_setup.ts"], - deps = [ + srcs = ["zone_base_setup.mts"], + interop_deps = [ "//packages/zone.js/lib", "@npm//reflect-metadata", ], ) -ts_library( +ts_project( name = "browser", testonly = 1, - srcs = ["browser_tests.init.ts"], - deps = [ + srcs = ["browser_tests.init.mts"], + interop_deps = [ ":zone_base_setup_lib", "//packages/compiler", "//packages/core/testing", @@ -26,11 +27,11 @@ ts_library( ], ) -ts_library( +ts_project( name = "node", testonly = 1, - srcs = ["node_tests.init.ts"], - deps = [ + srcs = ["node_tests.init.mts"], + interop_deps = [ ":zone_base_setup_lib", "//packages/compiler", "//packages/core/testing", @@ -41,11 +42,11 @@ ts_library( ], ) -ts_library( +ts_project( name = "node_no_angular", testonly = 1, - srcs = ["node_no_angular_tests.init.ts"], - deps = [ + srcs = ["node_no_angular_tests.init.mts"], + interop_deps = [ "//packages:types", ], ) @@ -57,7 +58,7 @@ ts_library( # of a potential regression. jasmine_node_test( name = "fail_test", - srcs = ["fail.spec.js"], + srcs = ["fail.spec.mjs"], # While we force the termination of the process with an exitCode of 55 in fail.spec.js. Jasmine force it to 4. # see: https://github.com/jasmine/jasmine-npm/blob/eea8b26efe29176ecbb26ce3f1c4990f8bede685/lib/jasmine.js#L213 expected_exit_code = 4, @@ -71,7 +72,7 @@ jasmine_node_test( # of a potential regression. jasmine_node_test( name = "fail_bootstrap_test", - srcs = ["fail.spec.js"], + srcs = ["fail.spec.mjs"], bootstrap = ["//tools/testing:node"], data = ["//packages:package_json"], # While we force the termination of the process with an exitCode of 55 in fail.spec.js. Jasmine force it to 4. diff --git a/tools/testing/browser_tests.init.ts b/tools/testing/browser_tests.init.mts similarity index 95% rename from tools/testing/browser_tests.init.ts rename to tools/testing/browser_tests.init.mts index 74c877737f3d..fa8b78577c85 100644 --- a/tools/testing/browser_tests.init.ts +++ b/tools/testing/browser_tests.init.mts @@ -7,7 +7,7 @@ */ import 'zone.js/lib/browser/rollup-main'; -import './zone_base_setup'; +import './zone_base_setup.mjs'; import '@angular/compiler'; // For JIT mode. Must be in front of any other @angular/* imports. import {TestBed} from '@angular/core/testing'; diff --git a/tools/testing/fail.spec.js b/tools/testing/fail.spec.mjs similarity index 100% rename from tools/testing/fail.spec.js rename to tools/testing/fail.spec.mjs diff --git a/tools/testing/node_no_angular_tests.init.ts b/tools/testing/node_no_angular_tests.init.mts similarity index 100% rename from tools/testing/node_no_angular_tests.init.ts rename to tools/testing/node_no_angular_tests.init.mts diff --git a/tools/testing/node_tests.init.ts b/tools/testing/node_tests.init.mts similarity index 78% rename from tools/testing/node_tests.init.ts rename to tools/testing/node_tests.init.mts index 5c8216d00e66..59854421a2af 100644 --- a/tools/testing/node_tests.init.ts +++ b/tools/testing/node_tests.init.mts @@ -7,7 +7,7 @@ */ import 'zone.js/lib/node/rollup-main'; -import './zone_base_setup'; +import './zone_base_setup.mjs'; (global as any).isNode = true; (global as any).isBrowser = false; @@ -15,11 +15,8 @@ import './zone_base_setup'; import '@angular/compiler'; // For JIT mode. Must be in front of any other @angular/* imports. // Init TestBed import {TestBed} from '@angular/core/testing'; -import { - ServerTestingModule, - platformServerTesting, -} from '@angular/platform-server/testing/src/server'; -import {DominoAdapter} from '@angular/platform-server/src/domino_adapter'; +import {ServerTestingModule, platformServerTesting} from '@angular/platform-server/testing'; +import {ɵDominoAdapter as DominoAdapter} from '@angular/platform-server'; import domino from '../../packages/platform-server/src/bundled-domino'; TestBed.initTestEnvironment(ServerTestingModule, platformServerTesting()); diff --git a/tools/testing/zone_base_setup.ts b/tools/testing/zone_base_setup.mts similarity index 96% rename from tools/testing/zone_base_setup.ts rename to tools/testing/zone_base_setup.mts index 7899b559d2dd..b1ee6ed49365 100644 --- a/tools/testing/zone_base_setup.ts +++ b/tools/testing/zone_base_setup.mts @@ -8,6 +8,8 @@ import 'reflect-metadata'; +import {} from 'zone.js'; + import {patchLongStackTrace} from 'zone.js/lib/zone-spec/long-stack-trace'; import {patchTaskTracking} from 'zone.js/lib/zone-spec/task-tracking'; import {patchProxyZoneSpec} from 'zone.js/lib/zone-spec/proxy'; diff --git a/tools/tsconfig.json b/tools/tsconfig.json index 875ddffe9a7b..819870461a41 100644 --- a/tools/tsconfig.json +++ b/tools/tsconfig.json @@ -5,8 +5,13 @@ "declaration": true, "esModuleInterop": true, "sourceMap": true, - "module": "NodeNext", - "moduleResolution": "nodenext", - "types": ["node"] + "module": "esnext", + "moduleResolution": "node", + "types": ["node"], + "paths": { + "zone.js": ["../packages/zone.js/lib/zone"], + "zone.js/*": ["../packages/zone.js/*"], + "@angular/*": ["../packages/*/index"], + } } } From 12e2302a0425f3a2b09cb00d743cbdb099a5eb31 Mon Sep 17 00:00:00 2001 From: Joey Perrott Date: Fri, 23 May 2025 13:46:27 +0000 Subject: [PATCH 07/12] build: update common's locales to use rules_js (#61630) Use ts_project to build the common locales PR Close #61630 --- .../test/ng_package/common_package.spec.ts | 6 ++--- packages/common/locales/BUILD.bazel | 5 ++-- .../locales/generate-locales-tool/BUILD.bazel | 25 +++++++++++++------ .../generate-locales-tool/bin/BUILD.bazel | 12 +++++---- .../generate-locales-tool/tsconfig.json | 6 +++++ packages/common/package.json | 2 +- tools/defaults2.bzl | 3 +++ 7 files changed, 40 insertions(+), 19 deletions(-) create mode 100644 packages/common/locales/generate-locales-tool/tsconfig.json diff --git a/packages/bazel/test/ng_package/common_package.spec.ts b/packages/bazel/test/ng_package/common_package.spec.ts index 9b2389637828..5abd29d9df00 100644 --- a/packages/bazel/test/ng_package/common_package.spec.ts +++ b/packages/bazel/test/ng_package/common_package.spec.ts @@ -23,12 +23,12 @@ describe('@angular/common ng_package', () => { it('/locales', () => { const files = shx.ls('locales').stdout.split('\n'); expect(files.some((n) => n.endsWith('.d.ts'))).toBe(true, `.d.ts files don't exist`); - expect(files.some((n) => n.endsWith('.mjs'))).toBe(true, `.mjs files don't exist`); + expect(files.some((n) => n.endsWith('.js'))).toBe(true, `.js files don't exist`); }); it('/locales/extra', () => { const files = shx.ls('locales/extra').stdout.split('\n'); expect(files.some((n) => n.endsWith('.d.ts'))).toBe(true, `.d.ts files don't exist`); - expect(files.some((n) => n.endsWith('.mjs'))).toBe(true, `.mjs files don't exist`); + expect(files.some((n) => n.endsWith('.js'))).toBe(true, `.js files don't exist`); }); }); @@ -98,7 +98,7 @@ describe('@angular/common ng_package', () => { typings: `./index.d.ts`, exports: matchesObjectWithOrder({ './locales/global/*': {default: './locales/global/*.js'}, - './locales/*': {types: './locales/*.d.ts', default: './locales/*.mjs'}, + './locales/*': {types: './locales/*.d.ts', default: './locales/*.js'}, './package.json': {default: './package.json'}, '.': { types: './index.d.ts', diff --git a/packages/common/locales/BUILD.bazel b/packages/common/locales/BUILD.bazel index 8a32cece759d..fda0be6c176c 100644 --- a/packages/common/locales/BUILD.bazel +++ b/packages/common/locales/BUILD.bazel @@ -1,6 +1,7 @@ load("@build_bazel_rules_nodejs//:index.bzl", "generated_file_test") load("//packages/common/locales:index.bzl", "LOCALES", "generate_all_locale_files", "generate_closure_locale_file") -load("//tools:defaults.bzl", "pkg_npm", "ts_library") +load("//tools:defaults.bzl", "pkg_npm") +load("//tools:defaults2.bzl", "ts_project") package(default_visibility = ["//visibility:public"]) @@ -23,7 +24,7 @@ generate_all_locale_files( name = "locale_files", ) -ts_library( +ts_project( name = "locales", # TODO(devversion): Remove glob for checked-in legacy locale files that haven't been # removed in the past (when CLDR has been updated). These can be removed in a major. diff --git a/packages/common/locales/generate-locales-tool/BUILD.bazel b/packages/common/locales/generate-locales-tool/BUILD.bazel index 28bc4e0cb96d..173b9fb2202e 100644 --- a/packages/common/locales/generate-locales-tool/BUILD.bazel +++ b/packages/common/locales/generate-locales-tool/BUILD.bazel @@ -1,16 +1,25 @@ -load("//tools:defaults.bzl", "ts_library") +load("//tools:defaults2.bzl", "ts_config", "ts_project") package(default_visibility = ["//visibility:public"]) -ts_library( +ts_config( + name = "tsconfig_build", + src = "tsconfig.json", + deps = [ + "//:node_modules/@types/node", + "//packages:tsconfig_build", + ], +) + +ts_project( name = "generate-locales-tool", srcs = glob(["*.ts"]), deps = [ - "@npm//@bazel/runfiles", - "@npm//@types/cldrjs", - "@npm//@types/node", - "@npm//cldr", - "@npm//cldrjs", - "@npm//fast-glob", + "//:node_modules/@bazel/runfiles", + "//:node_modules/@types/cldrjs", + "//:node_modules/@types/node", + "//:node_modules/cldr", + "//:node_modules/cldrjs", + "//:node_modules/fast-glob", ], ) diff --git a/packages/common/locales/generate-locales-tool/bin/BUILD.bazel b/packages/common/locales/generate-locales-tool/bin/BUILD.bazel index 26b56b5b8b57..7cb349dc7f0f 100644 --- a/packages/common/locales/generate-locales-tool/bin/BUILD.bazel +++ b/packages/common/locales/generate-locales-tool/bin/BUILD.bazel @@ -1,4 +1,5 @@ -load("//tools:defaults.bzl", "nodejs_binary", "ts_library") +load("//tools:defaults.bzl", "nodejs_binary") +load("//tools:defaults2.bzl", "ts_project") package(default_visibility = ["//visibility:public"]) @@ -9,12 +10,12 @@ BIN_ENTRYPOINTS = [ "write-locale-files-to-dist", ] -ts_library( +ts_project( name = "bin", srcs = glob(["*.ts"]), deps = [ - "//packages/common/locales/generate-locales-tool", - "@npm//@types/node", + "//:node_modules/@types/node", + "//packages/common/locales/generate-locales-tool:generate-locales-tool_rjs", ], ) @@ -22,8 +23,9 @@ ts_library( name = entrypoint, data = [ ":bin", + "//packages:package_json", "@cldr_json_data//:all_json", "@cldr_xml_data//:all_xml", ], - entry_point = ":%s.ts" % entrypoint, + entry_point = ":%s.js" % entrypoint, ) for entrypoint in BIN_ENTRYPOINTS] diff --git a/packages/common/locales/generate-locales-tool/tsconfig.json b/packages/common/locales/generate-locales-tool/tsconfig.json new file mode 100644 index 000000000000..5837e29941f6 --- /dev/null +++ b/packages/common/locales/generate-locales-tool/tsconfig.json @@ -0,0 +1,6 @@ +{ + "extends": "../../../tsconfig-build.json", + "compilerOptions": { + "types": ["node"], + } +} \ No newline at end of file diff --git a/packages/common/package.json b/packages/common/package.json index db86e76f4ff2..23769f580c0f 100644 --- a/packages/common/package.json +++ b/packages/common/package.json @@ -17,7 +17,7 @@ }, "./locales/*": { "types": "./locales/*.d.ts", - "default": "./locales/*.mjs" + "default": "./locales/*.js" } }, "peerDependencies": { diff --git a/tools/defaults2.bzl b/tools/defaults2.bzl index 8c5167ef189c..43573845a001 100644 --- a/tools/defaults2.bzl +++ b/tools/defaults2.bzl @@ -31,6 +31,9 @@ def _determine_tsconfig(testonly): if native.package_name().startswith("packages/localize"): return "//packages:tsconfig_test" if testonly else "//packages/localize:tsconfig_build" + if native.package_name().startswith("packages/common/locales/generate-locales-tool"): + return "//packages:tsconfig_test" if testonly else "//packages/common/locales/generate-locales-tool:tsconfig_build" + if native.package_name().startswith("packages"): return "//packages:tsconfig_test" if testonly else "//packages:tsconfig_build" From 24bab55f0c89c4fe6037780fd7b2e8c8aa5429b2 Mon Sep 17 00:00:00 2001 From: Matthieu Riegler Date: Thu, 22 May 2025 05:50:56 +0200 Subject: [PATCH 08/12] fix(compiler): lexer support for template literals in object literals (#61601) This commit fixes a shortcoming of the lexer with template literals fixes #61572 PR Close #61601 --- packages/compiler/src/expression_parser/lexer.ts | 12 +++++------- .../compiler/test/expression_parser/lexer_spec.ts | 14 ++++++++++++++ .../compiler/test/expression_parser/parser_spec.ts | 7 +++++++ 3 files changed, 26 insertions(+), 7 deletions(-) diff --git a/packages/compiler/src/expression_parser/lexer.ts b/packages/compiler/src/expression_parser/lexer.ts index 83de92c6694f..034c198ecc6f 100644 --- a/packages/compiler/src/expression_parser/lexer.ts +++ b/packages/compiler/src/expression_parser/lexer.ts @@ -202,8 +202,7 @@ class _Scanner { private readonly length: number; private peek = 0; private index = -1; - private literalInterpolationDepth = 0; - private braceDepth = 0; + private braceStack: ('interpolation' | 'expression')[] = []; constructor(private readonly input: string) { this.length = input.length; @@ -330,7 +329,7 @@ class _Scanner { } private scanOpenBrace(start: number, code: number): Token { - this.braceDepth++; + this.braceStack.push('expression'); this.advance(); return newCharacterToken(start, this.index, code); } @@ -338,13 +337,12 @@ class _Scanner { private scanCloseBrace(start: number, code: number): Token { this.advance(); - if (this.braceDepth === 0 && this.literalInterpolationDepth > 0) { - this.literalInterpolationDepth--; + const currentBrace = this.braceStack.pop(); + if (currentBrace === 'interpolation') { this.tokens.push(newOperatorToken(start, this.index, '}')); return this.scanTemplateLiteralPart(this.index); } - this.braceDepth--; return newCharacterToken(start, this.index, code); } @@ -501,7 +499,7 @@ class _Scanner { // @ts-expect-error if (this.peek === chars.$LBRACE) { - this.literalInterpolationDepth++; + this.braceStack.push('interpolation'); this.tokens.push( new StringToken( start, diff --git a/packages/compiler/test/expression_parser/lexer_spec.ts b/packages/compiler/test/expression_parser/lexer_spec.ts index 829dd675ef1c..03a8041f5b63 100644 --- a/packages/compiler/test/expression_parser/lexer_spec.ts +++ b/packages/compiler/test/expression_parser/lexer_spec.ts @@ -567,6 +567,20 @@ describe('lexer', () => { expectStringToken(tokens[8], 29, 33, '!!!', StringTokenKind.TemplateLiteralEnd); }); + it('should tokenize a template literal in an literal object value', () => { + const tokens: Token[] = lex('{foo: `${name}`}'); + expect(tokens.length).toBe(9); + expectCharacterToken(tokens[0], 0, 1, '{'); + expectIdentifierToken(tokens[1], 1, 4, 'foo'); + expectCharacterToken(tokens[2], 4, 5, ':'); + expectStringToken(tokens[3], 6, 7, '', StringTokenKind.TemplateLiteralPart); + expectOperatorToken(tokens[4], 7, 9, '${'); + expectIdentifierToken(tokens[5], 9, 13, 'name'); + expectOperatorToken(tokens[6], 13, 14, '}'); + expectStringToken(tokens[7], 14, 15, '', StringTokenKind.TemplateLiteralEnd); + expectCharacterToken(tokens[8], 15, 16, '}'); + }); + it('should produce an error if a template literal is not terminated', () => { expectErrorToken( lex('`hello')[0], diff --git a/packages/compiler/test/expression_parser/parser_spec.ts b/packages/compiler/test/expression_parser/parser_spec.ts index 988086aa6dc9..c6971369e798 100644 --- a/packages/compiler/test/expression_parser/parser_spec.ts +++ b/packages/compiler/test/expression_parser/parser_spec.ts @@ -439,6 +439,13 @@ describe('parser', () => { checkBinding('`hello ${(name | capitalize)}!!!`'); }); + it('should parse template literals in objects literals', () => { + checkBinding('{"a": `${name}`}'); + checkBinding('{"a": `hello ${name}!`}'); + checkBinding('{"a": `hello ${`hello ${`hello`}`}!`}'); + checkBinding('{"a": `hello ${{"b": `hello`}}`}'); + }); + it('should report error if interpolation is empty', () => { expectBindingError( '`hello ${}`', From 9e1cd4966202d89c7310ab84c50b2c4231a0213e Mon Sep 17 00:00:00 2001 From: Kristiyan Kostadinov Date: Mon, 26 May 2025 09:19:41 +0200 Subject: [PATCH 09/12] fix(migrations): preserve comments when removing unused imports (#61674) Updates the unused imports schematic to preserve comments inside the array. THis is necessary for some internal use cases. PR Close #61674 --- .../cleanup-unused-imports/BUILD.bazel | 1 + .../unused_imports_migration.ts | 75 ++++++++++++++----- .../cleanup_unused_imports_migration_spec.ts | 74 ++++++++++++++++++ 3 files changed, 133 insertions(+), 17 deletions(-) diff --git a/packages/core/schematics/ng-generate/cleanup-unused-imports/BUILD.bazel b/packages/core/schematics/ng-generate/cleanup-unused-imports/BUILD.bazel index a254ad17d2ce..0e3ee1923c25 100644 --- a/packages/core/schematics/ng-generate/cleanup-unused-imports/BUILD.bazel +++ b/packages/core/schematics/ng-generate/cleanup-unused-imports/BUILD.bazel @@ -21,6 +21,7 @@ ts_project( "//packages/compiler-cli/src/ngtsc/core:api", "//packages/core/schematics/utils", "//packages/core/schematics/utils/tsurge", + "//packages/core/schematics/utils/tsurge/helpers/ast", "//packages/core/schematics/utils/tsurge/helpers/angular_devkit", ], deps = [ diff --git a/packages/core/schematics/ng-generate/cleanup-unused-imports/unused_imports_migration.ts b/packages/core/schematics/ng-generate/cleanup-unused-imports/unused_imports_migration.ts index 9f6ec5a18aaf..1bbdd76ea50c 100644 --- a/packages/core/schematics/ng-generate/cleanup-unused-imports/unused_imports_migration.ts +++ b/packages/core/schematics/ng-generate/cleanup-unused-imports/unused_imports_migration.ts @@ -18,9 +18,10 @@ import { TsurgeFunnelMigration, } from '../../utils/tsurge'; import {ErrorCode, FileSystem, ngErrorCode} from '@angular/compiler-cli'; -import {DiagnosticCategoryLabel, NgCompilerOptions} from '@angular/compiler-cli/src/ngtsc/core/api'; +import {DiagnosticCategoryLabel} from '@angular/compiler-cli/src/ngtsc/core/api'; import {ImportManager} from '@angular/compiler-cli/private/migrations'; import {applyImportManagerChanges} from '../../utils/tsurge/helpers/apply_import_manager'; +import {getLeadingLineWhitespaceOfNode} from '../../utils/tsurge/helpers/ast/leading_space'; /** Data produced by the migration for each compilation unit. */ export interface CompilationUnitData { @@ -286,6 +287,7 @@ export class UnusedImportsMigration extends TsurgeFunnelMigration< const {fullRemovals, partialRemovals, allRemovedIdentifiers} = removalLocations; const {importedSymbols, identifierCounts} = usages; const importManager = new ImportManager(); + const sourceText = sourceFile.getFullText(); // Replace full arrays with empty ones. This allows preserves more of the user's formatting. fullRemovals.forEach((node) => { @@ -302,22 +304,15 @@ export class UnusedImportsMigration extends TsurgeFunnelMigration< }); // Filter out the unused identifiers from an array. - partialRemovals.forEach((toRemove, node) => { - const newNode = ts.factory.updateArrayLiteralExpression( - node, - node.elements.filter((el) => !toRemove.has(el)), - ); - - replacements.push( - new Replacement( - projectFile(sourceFile, info), - new TextUpdate({ - position: node.getStart(), - end: node.getEnd(), - toInsert: this.printer.printNode(ts.EmitHint.Unspecified, newNode, sourceFile), - }), - ), - ); + partialRemovals.forEach((toRemove, parent) => { + toRemove.forEach((node) => { + replacements.push( + new Replacement( + projectFile(sourceFile, info), + getArrayElementRemovalUpdate(node, parent, sourceText), + ), + ); + }); }); // Attempt to clean up unused import declarations. Note that this isn't foolproof, because we @@ -339,3 +334,49 @@ export class UnusedImportsMigration extends TsurgeFunnelMigration< applyImportManagerChanges(importManager, replacements, [sourceFile], info); } } + +/** Generates a `TextUpdate` for the removal of an array element. */ +function getArrayElementRemovalUpdate( + node: ts.Expression, + parent: ts.ArrayLiteralExpression, + sourceText: string, +): TextUpdate { + let position = node.getStart(); + let end = node.getEnd(); + let toInsert = ''; + const whitespaceOrLineFeed = /\s/; + + // Usually the way we'd remove the nodes would be to recreate the `parent` while excluding + // the nodes that should be removed. The problem with this is that it'll strip out comments + // inside the array which can have special meaning internally. We work around it by removing + // only the node's own offsets. This comes with another problem in that it won't remove the commas + // that separate array elements which in turn can look weird if left in place (e.g. + // `[One, Two, Three, Four]` can turn into `[One,,Four]`). To account for them, we start with the + // node's end offset and then expand it to include trailing commas, whitespace and line breaks. + for (let i = end; i < sourceText.length; i++) { + if (sourceText[i] === ',' || whitespaceOrLineFeed.test(sourceText[i])) { + end++; + } else { + break; + } + } + + // If we're removing the last element in the array, adjust the starting offset so that + // it includes the previous comma on the same line. This avoids turning something like + // `[One, Two, Three]` into `[One,]`. We only do this within the same like, because + // trailing comma at the end of the line is fine. + if (parent.elements[parent.elements.length - 1] === node) { + for (let i = position - 1; i >= 0; i--) { + if (sourceText[i] === ',' || sourceText[i] === ' ') { + position--; + } else { + break; + } + } + + // Replace the node with its leading whitespace to preserve the formatting. + toInsert = getLeadingLineWhitespaceOfNode(node); + } + + return new TextUpdate({position, end, toInsert}); +} diff --git a/packages/core/schematics/test/cleanup_unused_imports_migration_spec.ts b/packages/core/schematics/test/cleanup_unused_imports_migration_spec.ts index 0ac3649c7cf8..eb1309266e7c 100644 --- a/packages/core/schematics/test/cleanup_unused_imports_migration_spec.ts +++ b/packages/core/schematics/test/cleanup_unused_imports_migration_spec.ts @@ -287,4 +287,78 @@ describe('cleanup unused imports schematic', () => { `), ); }); + + it('should preserve comments when removing unused imports', async () => { + writeFile( + 'comp.ts', + ` + import {Component} from '@angular/core'; + import {One, Two, Three} from './directives'; + + @Component({ + imports: [ + // Start + Three, + One, + Two, + // End + ], + template: '
', + }) + export class Comp {} + `, + ); + + await runMigration(); + + expect(logs.pop()).toBe('Removed 2 imports in 1 file'); + expect(stripWhitespace(tree.readContent('comp.ts'))).toBe( + stripWhitespace(` + import {Component} from '@angular/core'; + import {One} from './directives'; + + @Component({ + imports: [ + // Start + One, + // End + ], + template: '
', + }) + export class Comp {} + `), + ); + }); + + it('should preserve inline comments and strip trailing comma when removing imports from same line', async () => { + writeFile( + 'comp.ts', + ` + import {Component} from '@angular/core'; + import {One, Two, Three} from './directives'; + + @Component({ + imports: [/* Start */ Three, One, Two /* End */], + template: '
', + }) + export class Comp {} + `, + ); + + await runMigration(); + + expect(logs.pop()).toBe('Removed 2 imports in 1 file'); + expect(stripWhitespace(tree.readContent('comp.ts'))).toBe( + stripWhitespace(` + import {Component} from '@angular/core'; + import {One} from './directives'; + + @Component({ + imports: [/* Start */ One /* End */], + template: '
', + }) + export class Comp {} + `), + ); + }); }); From 6fea9c88cc4a9614686c837b8dfbb26df35bd2b8 Mon Sep 17 00:00:00 2001 From: Joey Perrott Date: Fri, 23 May 2025 16:25:04 +0000 Subject: [PATCH 10/12] build: migrate examples to use rules_js (#61652) Migrate examples to use ng_project and ts_project for building PR Close #61652 --- packages/examples/BUILD.bazel | 30 ++++++++++- packages/examples/common/BUILD.bazel | 31 ++++++----- packages/examples/core/BUILD.bazel | 35 ++++++------ .../ts/contentChild/content_child_example.ts | 2 +- .../core/di/ts/forward_ref/BUILD.bazel | 8 +-- packages/examples/core/testing/ts/BUILD.bazel | 10 ++-- packages/examples/forms/BUILD.bazel | 31 ++++++----- .../examples/platform-browser/BUILD.bazel | 10 ++-- packages/examples/router/BUILD.bazel | 12 +++-- .../router/activated-route/BUILD.bazel | 17 +++--- packages/examples/router/testing/BUILD.bazel | 15 +++--- .../examples/service-worker/push/BUILD.bazel | 27 ++++++---- .../registration-options/BUILD.bazel | 27 ++++++---- packages/examples/test-utils/BUILD.bazel | 6 +-- packages/examples/testing/BUILD.bazel | 10 ++-- packages/examples/tsconfig-e2e.json | 2 +- packages/examples/tsconfig-test.json | 6 +++ packages/examples/tsconfig.json | 3 ++ packages/examples/upgrade/BUILD.bazel | 24 ++++++++- packages/examples/upgrade/tsconfig-build.json | 7 --- packages/examples/upgrade/tsconfig-e2e.json | 7 +++ packages/examples/upgrade/tsconfig.json | 14 +++++ packages/examples/upgrade/upgrade_example.bzl | 53 +++++++++++++------ tools/defaults2.bzl | 3 ++ 24 files changed, 259 insertions(+), 131 deletions(-) create mode 100644 packages/examples/tsconfig-test.json create mode 100644 packages/examples/tsconfig.json delete mode 100644 packages/examples/upgrade/tsconfig-build.json create mode 100644 packages/examples/upgrade/tsconfig-e2e.json create mode 100644 packages/examples/upgrade/tsconfig.json diff --git a/packages/examples/BUILD.bazel b/packages/examples/BUILD.bazel index 431b64beea55..626a45e20f52 100644 --- a/packages/examples/BUILD.bazel +++ b/packages/examples/BUILD.bazel @@ -1,10 +1,38 @@ +load("//tools:defaults2.bzl", "ts_config") + package(default_visibility = ["//visibility:public"]) exports_files([ "index.html", - "tsconfig-e2e.json", ]) +ts_config( + name = "tsconfig_build", + src = "tsconfig.json", + deps = [ + "//packages:tsconfig_build", + ], +) + +ts_config( + name = "tsconfig_test", + src = "tsconfig-test.json", + deps = [ + ":tsconfig_build", + "//:node_modules/@types/jasmine", + ], +) + +ts_config( + name = "tsconfig_e2e", + src = "tsconfig-e2e.json", + deps = [ + ":tsconfig_test", + "//:node_modules/@types/jasminewd2", + "//:node_modules/@types/node", + ], +) + filegroup( name = "files_for_docgen", srcs = [ diff --git a/packages/examples/common/BUILD.bazel b/packages/examples/common/BUILD.bazel index c2b1a8c647c5..877ccc6c62f3 100644 --- a/packages/examples/common/BUILD.bazel +++ b/packages/examples/common/BUILD.bazel @@ -1,34 +1,39 @@ -load("//tools:defaults.bzl", "esbuild", "http_server", "ng_module", "protractor_web_test_suite", "ts_library") +load("//tools:defaults.bzl", "esbuild", "http_server", "protractor_web_test_suite") +load("//tools:defaults2.bzl", "ng_project", "ts_project") package(default_visibility = ["//visibility:public"]) -ng_module( +ng_project( name = "common_examples", srcs = glob( ["**/*.ts"], exclude = ["**/*_spec.ts"], ), - deps = [ - "//packages/common", - "//packages/core", + interop_deps = [ "//packages/platform-browser", "//packages/platform-browser-dynamic", - "//packages/router", "//packages/zone.js/lib", - "@npm//rxjs", + ], + deps = [ + "//:node_modules/rxjs", + "//packages/common:common_rjs", + "//packages/core:core_rjs", + "//packages/router:router_rjs", ], ) -ts_library( +ts_project( name = "common_tests_lib", testonly = True, srcs = glob(["**/*_spec.ts"]), - tsconfig = "//packages/examples:tsconfig-e2e.json", - deps = [ - "//packages/examples/test-utils", + interop_deps = [ "//packages/private/testing", - "@npm//@types/jasminewd2", - "@npm//protractor", + ], + tsconfig = "//packages/examples:tsconfig_e2e", + deps = [ + "//:node_modules/@types/jasminewd2", + "//:node_modules/protractor", + "//packages/examples/test-utils:test-utils_rjs", ], ) diff --git a/packages/examples/core/BUILD.bazel b/packages/examples/core/BUILD.bazel index eaf9f890783a..11bc3d8d1b6e 100644 --- a/packages/examples/core/BUILD.bazel +++ b/packages/examples/core/BUILD.bazel @@ -1,8 +1,9 @@ -load("//tools:defaults.bzl", "esbuild", "http_server", "jasmine_node_test", "ng_module", "protractor_web_test_suite", "ts_library") +load("//tools:defaults.bzl", "esbuild", "http_server", "jasmine_node_test", "protractor_web_test_suite") +load("//tools:defaults2.bzl", "ng_project", "ts_project") package(default_visibility = ["//visibility:public"]) -ng_module( +ng_project( name = "core_examples", srcs = glob( ["**/*.ts"], @@ -11,20 +12,22 @@ ng_module( "**/*_howto.ts", ], ), - deps = [ - "//packages/animations", - "//packages/core", - "//packages/forms", + interop_deps = [ "//packages/platform-browser", "//packages/platform-browser-dynamic", "//packages/platform-browser/animations", - "//packages/router", "//packages/zone.js/lib", - "@npm//rxjs", + ], + deps = [ + "//:node_modules/rxjs", + "//packages/animations:animations_rjs", + "//packages/core:core_rjs", + "//packages/forms:forms_rjs", + "//packages/router:router_rjs", ], ) -ts_library( +ts_project( name = "core_tests_lib", testonly = True, srcs = glob( @@ -32,20 +35,20 @@ ts_library( exclude = ["**/e2e_test/*"], ), deps = [ - "//packages/core", - "//packages/core/testing", + "//packages/core:core_rjs", + "//packages/core/testing:testing_rjs", ], ) -ts_library( +ts_project( name = "core_e2e_tests_lib", testonly = True, srcs = glob(["**/e2e_test/*_spec.ts"]), - tsconfig = "//packages/examples:tsconfig-e2e.json", + tsconfig = "//packages/examples:tsconfig_e2e", deps = [ - "//packages/examples/test-utils", - "@npm//@types/jasminewd2", - "@npm//protractor", + "//:node_modules/@types/jasminewd2", + "//:node_modules/protractor", + "//packages/examples/test-utils:test-utils_rjs", ], ) diff --git a/packages/examples/core/di/ts/contentChild/content_child_example.ts b/packages/examples/core/di/ts/contentChild/content_child_example.ts index e2d01c9263fb..cdb0249a08c2 100644 --- a/packages/examples/core/di/ts/contentChild/content_child_example.ts +++ b/packages/examples/core/di/ts/contentChild/content_child_example.ts @@ -19,7 +19,7 @@ export class Pane { @Component({ selector: 'tab', - template: `
pane: {{ pane?.id }}
`, + template: `
pane: {{ pane.id }}
`, standalone: false, }) export class Tab { diff --git a/packages/examples/core/di/ts/forward_ref/BUILD.bazel b/packages/examples/core/di/ts/forward_ref/BUILD.bazel index 335dbb63b79c..fd778ff5c53e 100644 --- a/packages/examples/core/di/ts/forward_ref/BUILD.bazel +++ b/packages/examples/core/di/ts/forward_ref/BUILD.bazel @@ -1,19 +1,19 @@ -load("//tools:defaults.bzl", "ng_module") +load("//tools:defaults2.bzl", "ng_project") package(default_visibility = ["//visibility:public"]) -# Note: The `forward_ref` example tests are built through this `ng_module` sub-target. +# Note: The `forward_ref` example tests are built through this `ng_project` sub-target. # This is done so that DI decorator/type metadata is processed manually by the compiler # ahead of time. We cannot rely on the official TypeScript decorator downlevel emit (for JIT), # as the output is not compatible with `forwardRef` and ES2015+. More details here: # https://github.com/angular/angular/commit/323651bd38909b0f4226bcb6c8f5abafa91cf9d9. # https://github.com/microsoft/TypeScript/issues/27519. -ng_module( +ng_project( name = "forward_ref_tests_lib", testonly = True, srcs = ["forward_ref_spec.ts"], visibility = ["//packages/examples/core:__pkg__"], - deps = ["//packages/core"], + deps = ["//packages/core:core_rjs"], ) filegroup( diff --git a/packages/examples/core/testing/ts/BUILD.bazel b/packages/examples/core/testing/ts/BUILD.bazel index 885756eb09d7..d32cda81a756 100644 --- a/packages/examples/core/testing/ts/BUILD.bazel +++ b/packages/examples/core/testing/ts/BUILD.bazel @@ -1,17 +1,17 @@ -load("//tools:defaults.bzl", "jasmine_node_test", "ts_library") +load("//tools:defaults.bzl", "jasmine_node_test") +load("//tools:defaults2.bzl", "ts_project") package(default_visibility = ["//visibility:public"]) -ts_library( +ts_project( name = "fake_async_lib", + testonly = True, srcs = [ "example_spec.ts", "fake_async.ts", ], - deps = [ + interop_deps = [ "//packages/core/testing", - "@npm//@types/jasmine", - "@npm//@types/node", ], ) diff --git a/packages/examples/forms/BUILD.bazel b/packages/examples/forms/BUILD.bazel index e56085266223..650904cf3ed5 100644 --- a/packages/examples/forms/BUILD.bazel +++ b/packages/examples/forms/BUILD.bazel @@ -1,34 +1,39 @@ -load("//tools:defaults.bzl", "esbuild", "http_server", "ng_module", "protractor_web_test_suite", "ts_library") +load("//tools:defaults.bzl", "esbuild", "http_server", "protractor_web_test_suite") +load("//tools:defaults2.bzl", "ng_project", "ts_project") package(default_visibility = ["//visibility:public"]) -ng_module( +ng_project( name = "forms_examples", srcs = glob( ["**/*.ts"], exclude = ["**/*_spec.ts"], ), - deps = [ - "//packages/core", - "//packages/forms", + interop_deps = [ "//packages/platform-browser", "//packages/platform-browser-dynamic", - "//packages/router", "//packages/zone.js/lib", - "@npm//rxjs", + ], + deps = [ + "//:node_modules/rxjs", + "//packages/core:core_rjs", + "//packages/forms:forms_rjs", + "//packages/router:router_rjs", ], ) -ts_library( +ts_project( name = "forms_e2e_tests_lib", testonly = True, srcs = glob(["**/e2e_test/*_spec.ts"]), - tsconfig = "//packages/examples:tsconfig-e2e.json", - deps = [ - "//packages/examples/test-utils", + interop_deps = [ "//packages/private/testing", - "@npm//@types/jasminewd2", - "@npm//protractor", + ], + tsconfig = "//packages/examples:tsconfig_e2e", + deps = [ + "//:node_modules/@types/jasminewd2", + "//:node_modules/protractor", + "//packages/examples/test-utils:test-utils_rjs", ], ) diff --git a/packages/examples/platform-browser/BUILD.bazel b/packages/examples/platform-browser/BUILD.bazel index f594500164f8..67df18392fa8 100644 --- a/packages/examples/platform-browser/BUILD.bazel +++ b/packages/examples/platform-browser/BUILD.bazel @@ -1,16 +1,18 @@ -load("//tools:defaults.bzl", "ng_module") +load("//tools:defaults2.bzl", "ng_project") package(default_visibility = ["//visibility:public"]) -ng_module( +ng_project( name = "platform_browser_examples", srcs = glob(["**/*.ts"]), - deps = [ + interop_deps = [ "//packages/compiler", - "//packages/core", "//packages/platform-browser", "//packages/platform-browser-dynamic", ], + deps = [ + "//packages/core:core_rjs", + ], ) filegroup( diff --git a/packages/examples/router/BUILD.bazel b/packages/examples/router/BUILD.bazel index 9df62d556b03..b65750368d0b 100644 --- a/packages/examples/router/BUILD.bazel +++ b/packages/examples/router/BUILD.bazel @@ -1,16 +1,18 @@ -load("//tools:defaults.bzl", "ng_module") +load("//tools:defaults2.bzl", "ng_project") package(default_visibility = ["//visibility:public"]) -ng_module( +ng_project( name = "router", srcs = glob( ["**/*.ts"], ), - deps = [ - "//packages/core", + interop_deps = [ "//packages/platform-browser", - "//packages/router", + ], + deps = [ + "//packages/core:core_rjs", + "//packages/router:router_rjs", ], ) diff --git a/packages/examples/router/activated-route/BUILD.bazel b/packages/examples/router/activated-route/BUILD.bazel index 84c44956acb0..d1a3d3718952 100644 --- a/packages/examples/router/activated-route/BUILD.bazel +++ b/packages/examples/router/activated-route/BUILD.bazel @@ -1,19 +1,22 @@ -load("//tools:defaults.bzl", "esbuild", "http_server", "ng_module") +load("//tools:defaults.bzl", "esbuild", "http_server") +load("//tools:defaults2.bzl", "ng_project") package(default_visibility = ["//visibility:public"]) -ng_module( +ng_project( name = "router_activated_route_examples", srcs = glob( ["**/*.ts"], ), - deps = [ - "//packages/core", - "//packages/platform-browser", + interop_deps = [ "//packages/platform-browser-dynamic", - "//packages/router", "//packages/zone.js/lib", - "@npm//rxjs", + "//packages/platform-browser", + ], + deps = [ + "//:node_modules/rxjs", + "//packages/core:core_rjs", + "//packages/router:router_rjs", ], ) diff --git a/packages/examples/router/testing/BUILD.bazel b/packages/examples/router/testing/BUILD.bazel index bbaf09459fdb..12a738521e33 100644 --- a/packages/examples/router/testing/BUILD.bazel +++ b/packages/examples/router/testing/BUILD.bazel @@ -1,17 +1,18 @@ -load("//tools:defaults.bzl", "jasmine_node_test", "karma_web_test_suite", "ts_library") +load("//tools:defaults.bzl", "jasmine_node_test", "karma_web_test_suite") +load("//tools:defaults2.bzl", "ts_project") package(default_visibility = ["//visibility:public"]) -ts_library( +ts_project( name = "test_lib", testonly = True, srcs = glob(["**/*.spec.ts"]), deps = [ - "//packages/common", - "//packages/core", - "//packages/core/testing", - "//packages/router", - "//packages/router/testing", + "//packages/common:common_rjs", + "//packages/core:core_rjs", + "//packages/core/testing:testing_rjs", + "//packages/router:router_rjs", + "//packages/router/testing:testing_rjs", ], ) diff --git a/packages/examples/service-worker/push/BUILD.bazel b/packages/examples/service-worker/push/BUILD.bazel index fc6ff49c9e32..802d8a68ab71 100644 --- a/packages/examples/service-worker/push/BUILD.bazel +++ b/packages/examples/service-worker/push/BUILD.bazel @@ -1,32 +1,37 @@ -load("//tools:defaults.bzl", "esbuild", "http_server", "ng_module", "protractor_web_test_suite", "ts_library") +load("//tools:defaults.bzl", "esbuild", "http_server", "protractor_web_test_suite") +load("//tools:defaults2.bzl", "ng_project", "ts_project") package(default_visibility = ["//visibility:public"]) -ng_module( +ng_project( name = "sw_push_examples", srcs = glob( ["**/*.ts"], exclude = ["**/*_spec.ts"], ), - deps = [ - "//packages/core", + interop_deps = [ "//packages/platform-browser", "//packages/platform-browser-dynamic", - "//packages/service-worker", "//packages/zone.js/lib", ], + deps = [ + "//packages/core:core_rjs", + "//packages/service-worker:service-worker_rjs", + ], ) -ts_library( +ts_project( name = "sw_push_e2e_tests_lib", testonly = True, srcs = glob(["**/e2e_test/*_spec.ts"]), - tsconfig = "//packages/examples:tsconfig-e2e.json", - deps = [ - "//packages/examples/test-utils", + interop_deps = [ "//packages/private/testing", - "@npm//@types/jasminewd2", - "@npm//protractor", + ], + tsconfig = "//packages/examples:tsconfig_e2e", + deps = [ + "//:node_modules/@types/jasminewd2", + "//:node_modules/protractor", + "//packages/examples/test-utils:test-utils_rjs", ], ) diff --git a/packages/examples/service-worker/registration-options/BUILD.bazel b/packages/examples/service-worker/registration-options/BUILD.bazel index b08650809dde..5d1a3a647505 100644 --- a/packages/examples/service-worker/registration-options/BUILD.bazel +++ b/packages/examples/service-worker/registration-options/BUILD.bazel @@ -1,32 +1,37 @@ -load("//tools:defaults.bzl", "esbuild", "http_server", "ng_module", "protractor_web_test_suite", "ts_library") +load("//tools:defaults.bzl", "esbuild", "http_server", "protractor_web_test_suite") +load("//tools:defaults2.bzl", "ng_project", "ts_project") package(default_visibility = ["//visibility:public"]) -ng_module( +ng_project( name = "sw_registration_options_examples", srcs = glob( ["**/*.ts"], exclude = ["**/*_spec.ts"], ), - deps = [ - "//packages/core", + interop_deps = [ "//packages/platform-browser", "//packages/platform-browser-dynamic", - "//packages/service-worker", "//packages/zone.js/lib", ], + deps = [ + "//packages/core:core_rjs", + "//packages/service-worker:service-worker_rjs", + ], ) -ts_library( +ts_project( name = "sw_registration_options_e2e_tests_lib", testonly = True, srcs = glob(["**/e2e_test/*_spec.ts"]), - tsconfig = "//packages/examples:tsconfig-e2e.json", - deps = [ - "//packages/examples/test-utils", + interop_deps = [ "//packages/private/testing", - "@npm//@types/jasminewd2", - "@npm//protractor", + ], + tsconfig = "//packages/examples:tsconfig_e2e", + deps = [ + "//:node_modules/@types/jasminewd2", + "//:node_modules/protractor", + "//packages/examples/test-utils:test-utils_rjs", ], ) diff --git a/packages/examples/test-utils/BUILD.bazel b/packages/examples/test-utils/BUILD.bazel index 60f587804f72..65619a36f998 100644 --- a/packages/examples/test-utils/BUILD.bazel +++ b/packages/examples/test-utils/BUILD.bazel @@ -1,12 +1,12 @@ -load("//tools:defaults.bzl", "ts_library") +load("//tools:defaults2.bzl", "ts_project") package(default_visibility = ["//visibility:public"]) -ts_library( +ts_project( name = "test-utils", srcs = ["index.ts"], deps = [ - "@npm//@types/selenium-webdriver", + "//:node_modules/@types/selenium-webdriver", ], ) diff --git a/packages/examples/testing/BUILD.bazel b/packages/examples/testing/BUILD.bazel index bd4962516108..2aac6c0afd69 100644 --- a/packages/examples/testing/BUILD.bazel +++ b/packages/examples/testing/BUILD.bazel @@ -1,14 +1,14 @@ -load("//tools:defaults.bzl", "ts_library") +load("//tools:defaults2.bzl", "ts_project") package(default_visibility = ["//visibility:public"]) -ts_library( +ts_project( name = "testing_examples", + testonly = True, srcs = glob(["**/*.ts"]), - tsconfig = "//packages:tsconfig-test", deps = [ - "@npm//@types/jasmine", - "@npm//@types/node", + "//:node_modules/@types/jasmine", + "//:node_modules/@types/node", ], ) diff --git a/packages/examples/tsconfig-e2e.json b/packages/examples/tsconfig-e2e.json index ed38112bb4ae..7727251c9a79 100644 --- a/packages/examples/tsconfig-e2e.json +++ b/packages/examples/tsconfig-e2e.json @@ -1,6 +1,6 @@ { + "extends": "./tsconfig-test.json", "compilerOptions": { - "lib": ["es2015"], "types": ["node", "jasminewd2"] } } diff --git a/packages/examples/tsconfig-test.json b/packages/examples/tsconfig-test.json new file mode 100644 index 000000000000..e30ea2978842 --- /dev/null +++ b/packages/examples/tsconfig-test.json @@ -0,0 +1,6 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "types": ["jasmine"] + } +} \ No newline at end of file diff --git a/packages/examples/tsconfig.json b/packages/examples/tsconfig.json new file mode 100644 index 000000000000..328f728abfe0 --- /dev/null +++ b/packages/examples/tsconfig.json @@ -0,0 +1,3 @@ +{ + "extends": "../tsconfig-build.json" +} \ No newline at end of file diff --git a/packages/examples/upgrade/BUILD.bazel b/packages/examples/upgrade/BUILD.bazel index af3d16a31b04..fe94f510bb7a 100644 --- a/packages/examples/upgrade/BUILD.bazel +++ b/packages/examples/upgrade/BUILD.bazel @@ -1,7 +1,29 @@ +load("//tools:defaults2.bzl", "ts_config") + package(default_visibility = ["//visibility:public"]) exports_files([ - "tsconfig-build.json", + "tsconfig.json", "start-server.js", "index.html", ]) + +ts_config( + name = "tsconfig_build", + src = "tsconfig.json", + deps = [ + "//:node_modules/@types/angular", + "//:node_modules/@types/jasmine", + "//:node_modules/tslib", + ], +) + +ts_config( + name = "tsconfig_e2e", + src = "tsconfig-e2e.json", + deps = [ + ":tsconfig_build", + "//:node_modules/@types/jasminewd2", + "//:node_modules/@types/node", + ], +) diff --git a/packages/examples/upgrade/tsconfig-build.json b/packages/examples/upgrade/tsconfig-build.json deleted file mode 100644 index eb79d48482c3..000000000000 --- a/packages/examples/upgrade/tsconfig-build.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "compilerOptions": { - "importHelpers": true, - "lib": ["dom", "es2015"], - "types": ["angular"] - } -} diff --git a/packages/examples/upgrade/tsconfig-e2e.json b/packages/examples/upgrade/tsconfig-e2e.json new file mode 100644 index 000000000000..0b30dff819bb --- /dev/null +++ b/packages/examples/upgrade/tsconfig-e2e.json @@ -0,0 +1,7 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "lib": ["es2015"], + "types": ["node", "jasminewd2"] + } +} \ No newline at end of file diff --git a/packages/examples/upgrade/tsconfig.json b/packages/examples/upgrade/tsconfig.json new file mode 100644 index 000000000000..2f58826b7b2f --- /dev/null +++ b/packages/examples/upgrade/tsconfig.json @@ -0,0 +1,14 @@ +{ + "compilerOptions": { + "lib": ["dom", "es2015"], + "types": ["angular", "jasmine"], + "declaration": true, + "sourceMap": true, + "paths": { + "@angular/*": ["../../*/index"], + }, + "experimentalDecorators": true, + "target": "es2015", + "moduleResolution": "node", + } +} diff --git a/packages/examples/upgrade/upgrade_example.bzl b/packages/examples/upgrade/upgrade_example.bzl index 33934a3ecce7..35598a80fc83 100644 --- a/packages/examples/upgrade/upgrade_example.bzl +++ b/packages/examples/upgrade/upgrade_example.bzl @@ -1,4 +1,5 @@ -load("//tools:defaults.bzl", "esbuild", "http_server", "ng_module", "protractor_web_test_suite", "ts_library") +load("//tools:defaults.bzl", "esbuild", "http_server", "protractor_web_test_suite") +load("//tools:defaults2.bzl", "ng_project", "ts_project") """ Macro that can be used to create the Bazel targets for an "upgrade" example. Since the @@ -8,33 +9,53 @@ load("//tools:defaults.bzl", "esbuild", "http_server", "ng_module", "protractor_ """ def create_upgrade_example_targets(name, srcs, e2e_srcs, entry_point, assets = []): - ng_module( + #ng_module( + # name = "%s_sources" % name, + # srcs = srcs, + # deps = [ + # "@npm//@types/angular", + # "@npm//@types/jasmine", + # "//packages/core", + # "//packages/platform-browser", + # "//packages/upgrade/static", + # "//packages/core/testing", + # "//packages/upgrade/static/testing", + # ], + # tsconfig = "//packages/examples/upgrade:tsconfig.json", + #) + + ng_project( name = "%s_sources" % name, srcs = srcs, - deps = [ - "@npm//@types/angular", - "@npm//@types/jasmine", - "//packages/core", + interop_deps = [ "//packages/platform-browser", "//packages/platform-browser-dynamic", - "//packages/upgrade/static", - "//packages/core/testing", - "//packages/upgrade/static/testing", ], - tsconfig = "//packages/examples/upgrade:tsconfig-build.json", + deps = [ + "//:node_modules/@types/angular", + "//:node_modules/@types/jasmine", + "//:node_modules/tslib", + "//packages/core:core_rjs", + "//packages/core/testing:testing_rjs", + "//packages/upgrade/static:static_rjs", + "//packages/upgrade/static/testing:testing_rjs", + ], + tsconfig = "//packages/examples/upgrade:tsconfig_build", ) - ts_library( + ts_project( name = "%s_e2e_lib" % name, srcs = e2e_srcs, testonly = True, - deps = [ - "@npm//@types/jasminewd2", - "@npm//protractor", - "//packages/examples/test-utils", + interop_deps = [ "//packages/private/testing", ], - tsconfig = "//packages/examples:tsconfig-e2e.json", + deps = [ + "//:node_modules/@types/jasminewd2", + "//:node_modules/protractor", + "//packages/examples/test-utils:test-utils_rjs", + ], + tsconfig = "//packages/examples/upgrade:tsconfig_e2e", ) esbuild( diff --git a/tools/defaults2.bzl b/tools/defaults2.bzl index 43573845a001..a78eeda92080 100644 --- a/tools/defaults2.bzl +++ b/tools/defaults2.bzl @@ -34,6 +34,9 @@ def _determine_tsconfig(testonly): if native.package_name().startswith("packages/common/locales/generate-locales-tool"): return "//packages:tsconfig_test" if testonly else "//packages/common/locales/generate-locales-tool:tsconfig_build" + if native.package_name().startswith("packages/examples"): + return "//packages/examples:tsconfig_test" if testonly else "//packages/examples:tsconfig_build" + if native.package_name().startswith("packages"): return "//packages:tsconfig_test" if testonly else "//packages:tsconfig_build" From 73d3e001d2a2fa3218d769c0834c12a762d86882 Mon Sep 17 00:00:00 2001 From: Kristiyan Kostadinov Date: Mon, 26 May 2025 13:27:26 +0200 Subject: [PATCH 11/12] build: fix failing test (#61683) Fixes a failing test in the unused imports migration. PR Close #61683 --- .../schematics/test/cleanup_unused_imports_migration_spec.ts | 2 -- 1 file changed, 2 deletions(-) diff --git a/packages/core/schematics/test/cleanup_unused_imports_migration_spec.ts b/packages/core/schematics/test/cleanup_unused_imports_migration_spec.ts index eb1309266e7c..d5788a84eb9a 100644 --- a/packages/core/schematics/test/cleanup_unused_imports_migration_spec.ts +++ b/packages/core/schematics/test/cleanup_unused_imports_migration_spec.ts @@ -311,7 +311,6 @@ describe('cleanup unused imports schematic', () => { await runMigration(); - expect(logs.pop()).toBe('Removed 2 imports in 1 file'); expect(stripWhitespace(tree.readContent('comp.ts'))).toBe( stripWhitespace(` import {Component} from '@angular/core'; @@ -347,7 +346,6 @@ describe('cleanup unused imports schematic', () => { await runMigration(); - expect(logs.pop()).toBe('Removed 2 imports in 1 file'); expect(stripWhitespace(tree.readContent('comp.ts'))).toBe( stripWhitespace(` import {Component} from '@angular/core'; From cb1b1675c7a21558c1059440d9d965b7cc840bfd Mon Sep 17 00:00:00 2001 From: Andrew Scott Date: Wed, 28 May 2025 06:27:16 -0700 Subject: [PATCH 12/12] release: cut the v19.2.14 release --- .../npm_translate_lock_MzA5NzUwNzMx | 4 +- CHANGELOG.md | 13 ++ package.json | 2 +- pnpm-lock.yaml | 160 +++++++++--------- 4 files changed, 96 insertions(+), 83 deletions(-) diff --git a/.aspect/rules/external_repository_action_cache/npm_translate_lock_MzA5NzUwNzMx b/.aspect/rules/external_repository_action_cache/npm_translate_lock_MzA5NzUwNzMx index 4699a45380ba..384e2ecf129c 100755 --- a/.aspect/rules/external_repository_action_cache/npm_translate_lock_MzA5NzUwNzMx +++ b/.aspect/rules/external_repository_action_cache/npm_translate_lock_MzA5NzUwNzMx @@ -2,10 +2,10 @@ # Input hashes for repository rule npm_translate_lock(name = "npm2", pnpm_lock = "@//:pnpm-lock.yaml"). # This file should be checked into version control along with the pnpm-lock.yaml file. .npmrc=-203833057 -package.json=-288306371 +package.json=-1892818434 packages/compiler-cli/package.json=-1396217149 packages/compiler/package.json=499550843 -pnpm-lock.yaml=1743522818 +pnpm-lock.yaml=-1041360686 pnpm-workspace.yaml=353334404 tools/bazel/rules_angular_store/package.json=-239561259 yarn.lock=1636150847 diff --git a/CHANGELOG.md b/CHANGELOG.md index 33ebe904c7e6..bcb4b7fe2518 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,16 @@ + +# 19.2.14 (2025-05-28) +### compiler +| Commit | Type | Description | +| -- | -- | -- | +| [24bab55f0c](https://github.com/angular/angular/commit/24bab55f0c89c4fe6037780fd7b2e8c8aa5429b2) | fix | lexer support for template literals in object literals ([#61601](https://github.com/angular/angular/pull/61601)) | +### migrations +| Commit | Type | Description | +| -- | -- | -- | +| [9e1cd49662](https://github.com/angular/angular/commit/9e1cd4966202d89c7310ab84c50b2c4231a0213e) | fix | preserve comments when removing unused imports ([#61674](https://github.com/angular/angular/pull/61674)) | + + + # 19.2.13 (2025-05-23) ### common diff --git a/package.json b/package.json index ee5910e69636..574d37865ae9 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "angular-srcs", - "version": "19.2.13", + "version": "19.2.14", "private": true, "description": "Angular - a web framework for modern web apps", "homepage": "https://github.com/angular/angular", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index efc0d38e4152..101592bb126a 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -16,7 +16,7 @@ importers: dependencies: '@angular-devkit/build-angular': specifier: 19.2.0-next.2 - version: 19.2.0-next.2(@angular/compiler-cli@19.2.12)(@angular/compiler@19.2.12)(@angular/ssr@19.2.0-next.2)(@types/node@18.19.84)(chokidar@4.0.3)(karma@6.4.4)(protractor@7.0.0)(tsx@4.19.3)(typescript@5.8.2)(vite@6.1.0) + version: 19.2.0-next.2(@angular/compiler-cli@19.2.13)(@angular/compiler@19.2.13)(@angular/ssr@19.2.0-next.2)(@types/node@18.19.84)(chokidar@4.0.3)(karma@6.4.4)(protractor@7.0.0)(tsx@4.19.3)(typescript@5.8.2)(vite@6.1.0) '@angular-devkit/core': specifier: 19.2.0-next.2 version: 19.2.0-next.2(chokidar@4.0.3) @@ -25,19 +25,19 @@ importers: version: 19.2.0-next.2(chokidar@4.0.3) '@angular/build': specifier: 19.2.0-next.2 - version: 19.2.0-next.2(@angular/compiler-cli@19.2.12)(@angular/compiler@19.2.12)(@angular/ssr@19.2.0-next.2)(@types/node@18.19.84)(chokidar@4.0.3)(less@4.2.2)(postcss@8.5.2)(terser@5.39.0)(tsx@4.19.3)(typescript@5.8.2) + version: 19.2.0-next.2(@angular/compiler-cli@19.2.13)(@angular/compiler@19.2.13)(@angular/ssr@19.2.0-next.2)(@types/node@18.19.84)(chokidar@4.0.3)(less@4.2.2)(postcss@8.5.2)(terser@5.39.0)(tsx@4.19.3)(typescript@5.8.2) '@angular/cdk': specifier: 19.2.0-next.4 - version: 19.2.0-next.4(@angular/common@19.2.12)(@angular/core@19.2.11)(rxjs@7.8.2) + version: 19.2.0-next.4(@angular/common@19.2.13)(@angular/core@19.2.11)(rxjs@7.8.2) '@angular/cli': specifier: 19.2.0-next.2 version: 19.2.0-next.2(@types/node@18.19.84)(chokidar@4.0.3) '@angular/material': specifier: 19.2.0-next.4 - version: 19.2.0-next.4(@angular/cdk@19.2.0-next.4)(@angular/common@19.2.12)(@angular/core@19.2.11)(@angular/forms@19.2.12)(@angular/platform-browser@19.2.12)(rxjs@7.8.2) + version: 19.2.0-next.4(@angular/cdk@19.2.0-next.4)(@angular/common@19.2.13)(@angular/core@19.2.11)(@angular/forms@19.2.13)(@angular/platform-browser@19.2.13)(rxjs@7.8.2) '@angular/ssr': specifier: 19.2.0-next.2 - version: 19.2.0-next.2(@angular/common@19.2.12)(@angular/core@19.2.11)(@angular/router@19.2.12) + version: 19.2.0-next.2(@angular/common@19.2.13)(@angular/core@19.2.11)(@angular/router@19.2.13) '@babel/cli': specifier: 7.26.4 version: 7.26.4(@babel/core@7.26.9) @@ -250,10 +250,10 @@ importers: version: 2.0.1 ngx-flamegraph: specifier: 0.0.12 - version: 0.0.12(@angular/common@19.2.12)(@angular/core@19.2.11) + version: 0.0.12(@angular/common@19.2.13)(@angular/core@19.2.11) ngx-progressbar: specifier: ^14.0.0 - version: 14.0.0(@angular/cdk@19.2.0-next.4)(@angular/common@19.2.12)(@angular/core@19.2.11)(rxjs@7.8.2) + version: 14.0.0(@angular/cdk@19.2.0-next.4)(@angular/common@19.2.13)(@angular/core@19.2.11)(rxjs@7.8.2) open-in-idx: specifier: ^0.1.1 version: 0.1.1 @@ -347,10 +347,10 @@ importers: version: 0.1902.0-next.2(chokidar@4.0.3) '@angular/animations': specifier: ^19.2.0-next - version: 19.2.11(@angular/common@19.2.12)(@angular/core@19.2.11) + version: 19.2.11(@angular/common@19.2.13)(@angular/core@19.2.11) '@angular/build-tooling': specifier: https://github.com/angular/dev-infra-private-build-tooling-builds.git#5db176c0f3211663830fd3ff4064c1dff0eaccb4 - version: github.com/angular/dev-infra-private-build-tooling-builds/5db176c0f3211663830fd3ff4064c1dff0eaccb4(@angular/compiler-cli@19.2.12)(@angular/compiler@19.2.12)(@angular/ssr@19.2.0-next.2)(chokidar@4.0.3)(karma-chrome-launcher@3.2.0)(karma-firefox-launcher@2.1.3)(karma-jasmine@5.1.0)(karma-junit-reporter@2.0.1)(karma-requirejs@1.1.0)(karma-sourcemap-loader@0.4.0)(karma@6.4.4)(less@4.2.2)(postcss@8.5.2)(rxjs@7.8.2)(terser@5.39.0)(tsx@4.19.3) + version: github.com/angular/dev-infra-private-build-tooling-builds/5db176c0f3211663830fd3ff4064c1dff0eaccb4(@angular/compiler-cli@19.2.13)(@angular/compiler@19.2.13)(@angular/ssr@19.2.0-next.2)(chokidar@4.0.3)(karma-chrome-launcher@3.2.0)(karma-firefox-launcher@2.1.3)(karma-jasmine@5.1.0)(karma-junit-reporter@2.0.1)(karma-requirejs@1.1.0)(karma-sourcemap-loader@0.4.0)(karma@6.4.4)(less@4.2.2)(postcss@8.5.2)(rxjs@7.8.2)(terser@5.39.0)(tsx@4.19.3) '@angular/core': specifier: ^19.2.0-next version: 19.2.11(rxjs@7.8.2) @@ -452,7 +452,7 @@ importers: version: 0.5.16 angular-split: specifier: ^19.0.0 - version: 19.0.0(@angular/common@19.2.12)(@angular/core@19.2.11)(rxjs@7.8.2) + version: 19.0.0(@angular/common@19.2.13)(@angular/core@19.2.11)(rxjs@7.8.2) check-side-effects: specifier: 0.0.23 version: 0.0.23 @@ -800,7 +800,7 @@ packages: transitivePeerDependencies: - chokidar - /@angular-devkit/build-angular@19.2.0-next.2(@angular/compiler-cli@19.2.12)(@angular/compiler@19.2.12)(@angular/ssr@19.2.0-next.2)(@types/node@18.19.84)(chokidar@4.0.3)(karma@6.4.4)(protractor@7.0.0)(tsx@4.19.3)(typescript@5.8.2)(vite@6.1.0): + /@angular-devkit/build-angular@19.2.0-next.2(@angular/compiler-cli@19.2.13)(@angular/compiler@19.2.13)(@angular/ssr@19.2.0-next.2)(@types/node@18.19.84)(chokidar@4.0.3)(karma@6.4.4)(protractor@7.0.0)(tsx@4.19.3)(typescript@5.8.2)(vite@6.1.0): resolution: {integrity: sha512-o3/X02x4p9pCVaPB4uoc2VUL2s2YvGW58jfSHRhwtiLVoIgpnbyHyyhtIdO8rLRr09Pk1fLUvXVY4/d6hjXt1Q==, tarball: https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-19.2.0-next.2.tgz} engines: {node: ^18.19.1 || ^20.11.1 || >=22.0.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} peerDependencies: @@ -848,9 +848,9 @@ packages: '@angular-devkit/architect': 0.1902.0-next.2(chokidar@4.0.3) '@angular-devkit/build-webpack': 0.1902.0-next.2(chokidar@4.0.3)(webpack-dev-server@5.2.0)(webpack@5.97.1) '@angular-devkit/core': 19.2.0-next.2(chokidar@4.0.3) - '@angular/build': 19.2.0-next.2(@angular/compiler-cli@19.2.12)(@angular/compiler@19.2.12)(@angular/ssr@19.2.0-next.2)(@types/node@18.19.84)(chokidar@4.0.3)(less@4.2.2)(postcss@8.5.2)(terser@5.38.2)(tsx@4.19.3)(typescript@5.8.2) - '@angular/compiler-cli': 19.2.12(@angular/compiler@19.2.12)(typescript@5.8.2) - '@angular/ssr': 19.2.0-next.2(@angular/common@19.2.12)(@angular/core@19.2.11)(@angular/router@19.2.12) + '@angular/build': 19.2.0-next.2(@angular/compiler-cli@19.2.13)(@angular/compiler@19.2.13)(@angular/ssr@19.2.0-next.2)(@types/node@18.19.84)(chokidar@4.0.3)(less@4.2.2)(postcss@8.5.2)(terser@5.38.2)(tsx@4.19.3)(typescript@5.8.2) + '@angular/compiler-cli': 19.2.13(@angular/compiler@19.2.13)(typescript@5.8.2) + '@angular/ssr': 19.2.0-next.2(@angular/common@19.2.13)(@angular/core@19.2.11)(@angular/router@19.2.13) '@babel/core': 7.26.8 '@babel/generator': 7.26.8 '@babel/helper-annotate-as-pure': 7.25.9 @@ -861,7 +861,7 @@ packages: '@babel/preset-env': 7.26.8(@babel/core@7.26.8) '@babel/runtime': 7.26.7 '@discoveryjs/json-ext': 0.6.3 - '@ngtools/webpack': 19.2.0-next.2(@angular/compiler-cli@19.2.12)(typescript@5.8.2)(webpack@5.97.1) + '@ngtools/webpack': 19.2.0-next.2(@angular/compiler-cli@19.2.13)(typescript@5.8.2)(webpack@5.97.1) '@vitejs/plugin-basic-ssl': 1.2.0(vite@6.1.0) ansi-colors: 4.1.3 autoprefixer: 10.4.20(postcss@8.5.2) @@ -1004,14 +1004,14 @@ packages: - chokidar dev: false - /@angular/animations@19.2.11(@angular/common@19.2.12)(@angular/core@19.2.11): + /@angular/animations@19.2.11(@angular/common@19.2.13)(@angular/core@19.2.11): resolution: {integrity: sha512-NR33bZVho7EgTc1fmCnmkwc2/U266n311Wfvk7VVtz+0Q9WliNdDLBon654V8IWSKvlqKXyU3W+fp0VjH/FvSw==, tarball: https://registry.npmjs.org/@angular/animations/-/animations-19.2.11.tgz} engines: {node: ^18.19.1 || ^20.11.1 || >=22.0.0} peerDependencies: '@angular/common': 19.2.11 '@angular/core': 19.2.11 dependencies: - '@angular/common': 19.2.12(@angular/core@19.2.11)(rxjs@7.8.2) + '@angular/common': 19.2.13(@angular/core@19.2.11)(rxjs@7.8.2) '@angular/core': 19.2.11(rxjs@7.8.2) tslib: 2.8.1 @@ -1025,7 +1025,7 @@ packages: - zone.js dev: true - /@angular/build@19.1.0-rc.0(@angular/compiler-cli@19.2.12)(@angular/compiler@19.2.12)(@angular/ssr@19.2.0-next.2)(@types/node@18.19.84)(chokidar@4.0.3)(less@4.2.2)(postcss@8.5.2)(terser@5.39.0)(tsx@4.19.3)(typescript@5.7.3): + /@angular/build@19.1.0-rc.0(@angular/compiler-cli@19.2.13)(@angular/compiler@19.2.13)(@angular/ssr@19.2.0-next.2)(@types/node@18.19.84)(chokidar@4.0.3)(less@4.2.2)(postcss@8.5.2)(terser@5.39.0)(tsx@4.19.3)(typescript@5.7.3): resolution: {integrity: sha512-ALl+MVMYBF+E7HyAQ+1MtE6sNIOAX0o2Sfs0wdIQfM2unRl6jPsz/Ker4BjnNQIK4wRCcstyzBv5mZBDulfFIQ==, tarball: https://registry.npmjs.org/@angular/build/-/build-19.1.0-rc.0.tgz} engines: {node: ^18.19.1 || ^20.11.1 || >=22.0.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} peerDependencies: @@ -1060,9 +1060,9 @@ packages: dependencies: '@ampproject/remapping': 2.3.0 '@angular-devkit/architect': 0.1901.0-rc.0(chokidar@4.0.3) - '@angular/compiler': 19.2.12 - '@angular/compiler-cli': 19.2.12(@angular/compiler@19.2.12)(typescript@5.8.2) - '@angular/ssr': 19.2.0-next.2(@angular/common@19.2.12)(@angular/core@19.2.11)(@angular/router@19.2.12) + '@angular/compiler': 19.2.13 + '@angular/compiler-cli': 19.2.13(@angular/compiler@19.2.13)(typescript@5.8.2) + '@angular/ssr': 19.2.0-next.2(@angular/common@19.2.13)(@angular/core@19.2.11)(@angular/router@19.2.13) '@babel/core': 7.26.0 '@babel/helper-annotate-as-pure': 7.25.9 '@babel/helper-split-export-declaration': 7.24.7 @@ -1105,7 +1105,7 @@ packages: - yaml dev: true - /@angular/build@19.2.0-next.2(@angular/compiler-cli@19.2.12)(@angular/compiler@19.2.12)(@angular/ssr@19.2.0-next.2)(@types/node@18.19.84)(chokidar@4.0.3)(less@4.2.2)(postcss@8.5.2)(terser@5.38.2)(tsx@4.19.3)(typescript@5.8.2): + /@angular/build@19.2.0-next.2(@angular/compiler-cli@19.2.13)(@angular/compiler@19.2.13)(@angular/ssr@19.2.0-next.2)(@types/node@18.19.84)(chokidar@4.0.3)(less@4.2.2)(postcss@8.5.2)(terser@5.38.2)(tsx@4.19.3)(typescript@5.8.2): resolution: {integrity: sha512-FmpJla0+M+BE1bQbHIKbl5wKrHsSg6JTIl+kiW/kW4GKKZsS4FJkg56UhyI7+bjuId9s3wptpdMIFpRDaDytRg==, tarball: https://registry.npmjs.org/@angular/build/-/build-19.2.0-next.2.tgz} engines: {node: ^18.19.1 || ^20.11.1 || >=22.0.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} peerDependencies: @@ -1140,9 +1140,9 @@ packages: dependencies: '@ampproject/remapping': 2.3.0 '@angular-devkit/architect': 0.1902.0-next.2(chokidar@4.0.3) - '@angular/compiler': 19.2.12 - '@angular/compiler-cli': 19.2.12(@angular/compiler@19.2.12)(typescript@5.8.2) - '@angular/ssr': 19.2.0-next.2(@angular/common@19.2.12)(@angular/core@19.2.11)(@angular/router@19.2.12) + '@angular/compiler': 19.2.13 + '@angular/compiler-cli': 19.2.13(@angular/compiler@19.2.13)(typescript@5.8.2) + '@angular/ssr': 19.2.0-next.2(@angular/common@19.2.13)(@angular/core@19.2.11)(@angular/router@19.2.13) '@babel/core': 7.26.8 '@babel/helper-annotate-as-pure': 7.25.9 '@babel/helper-split-export-declaration': 7.24.7 @@ -1185,7 +1185,7 @@ packages: - yaml dev: false - /@angular/build@19.2.0-next.2(@angular/compiler-cli@19.2.12)(@angular/compiler@19.2.12)(@angular/ssr@19.2.0-next.2)(@types/node@18.19.84)(chokidar@4.0.3)(less@4.2.2)(postcss@8.5.2)(terser@5.39.0)(tsx@4.19.3)(typescript@5.8.2): + /@angular/build@19.2.0-next.2(@angular/compiler-cli@19.2.13)(@angular/compiler@19.2.13)(@angular/ssr@19.2.0-next.2)(@types/node@18.19.84)(chokidar@4.0.3)(less@4.2.2)(postcss@8.5.2)(terser@5.39.0)(tsx@4.19.3)(typescript@5.8.2): resolution: {integrity: sha512-FmpJla0+M+BE1bQbHIKbl5wKrHsSg6JTIl+kiW/kW4GKKZsS4FJkg56UhyI7+bjuId9s3wptpdMIFpRDaDytRg==, tarball: https://registry.npmjs.org/@angular/build/-/build-19.2.0-next.2.tgz} engines: {node: ^18.19.1 || ^20.11.1 || >=22.0.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} peerDependencies: @@ -1220,9 +1220,9 @@ packages: dependencies: '@ampproject/remapping': 2.3.0 '@angular-devkit/architect': 0.1902.0-next.2(chokidar@4.0.3) - '@angular/compiler': 19.2.12 - '@angular/compiler-cli': 19.2.12(@angular/compiler@19.2.12)(typescript@5.8.2) - '@angular/ssr': 19.2.0-next.2(@angular/common@19.2.12)(@angular/core@19.2.11)(@angular/router@19.2.12) + '@angular/compiler': 19.2.13 + '@angular/compiler-cli': 19.2.13(@angular/compiler@19.2.13)(typescript@5.8.2) + '@angular/ssr': 19.2.0-next.2(@angular/common@19.2.13)(@angular/core@19.2.11)(@angular/router@19.2.13) '@babel/core': 7.26.8 '@babel/helper-annotate-as-pure': 7.25.9 '@babel/helper-split-export-declaration': 7.24.7 @@ -1265,14 +1265,14 @@ packages: - yaml dev: false - /@angular/cdk@19.2.0-next.4(@angular/common@19.2.12)(@angular/core@19.2.11)(rxjs@7.8.2): + /@angular/cdk@19.2.0-next.4(@angular/common@19.2.13)(@angular/core@19.2.11)(rxjs@7.8.2): resolution: {integrity: sha512-fmmwokyT2IGLRGzQEj2j4EoQBNdML+QYKyH3J3KlGN7i3p3G63uitzrvz5sEAdsXnpebxemhAs9aPW+HPhsvew==, tarball: https://registry.npmjs.org/@angular/cdk/-/cdk-19.2.0-next.4.tgz} peerDependencies: '@angular/common': ^19.0.0-0 || ^19.1.0-0 || ^19.2.0-0 || ^19.3.0-0 || ^20.0.0-0 '@angular/core': ^19.0.0-0 || ^19.1.0-0 || ^19.2.0-0 || ^19.3.0-0 || ^20.0.0-0 rxjs: ^6.5.3 || ^7.4.0 dependencies: - '@angular/common': 19.2.12(@angular/core@19.2.11)(rxjs@7.8.2) + '@angular/common': 19.2.13(@angular/core@19.2.11)(rxjs@7.8.2) '@angular/core': 19.2.11(rxjs@7.8.2) rxjs: 7.8.2 tslib: 2.8.1 @@ -1308,26 +1308,26 @@ packages: - supports-color dev: false - /@angular/common@19.2.12(@angular/core@19.2.11)(rxjs@7.8.2): - resolution: {integrity: sha512-oE2KLvU+YUyq2pUPS8nBWxkPGj29JzslaFcS9vQgvuKZgBTIwAgKm8QHBsitiZ0V+kX8Agwnl5YSdxdtuV2gQQ==, tarball: https://registry.npmjs.org/@angular/common/-/common-19.2.12.tgz} + /@angular/common@19.2.13(@angular/core@19.2.11)(rxjs@7.8.2): + resolution: {integrity: sha512-k7I4bLH+bgI02VL81MaL0NcZPfVl153KAiARwk+ZlkmQjMnWlmsAHQ6054SWoNEXwP855ATR6YYDVqJh8TZaqw==, tarball: https://registry.npmjs.org/@angular/common/-/common-19.2.13.tgz} engines: {node: ^18.19.1 || ^20.11.1 || >=22.0.0} peerDependencies: - '@angular/core': 19.2.12 + '@angular/core': 19.2.13 rxjs: ^6.5.3 || ^7.4.0 dependencies: '@angular/core': 19.2.11(rxjs@7.8.2) rxjs: 7.8.2 tslib: 2.8.1 - /@angular/compiler-cli@19.2.12(@angular/compiler@19.2.12)(typescript@5.8.2): - resolution: {integrity: sha512-w8XMBF9ifuQoL5+1dLTdiTGKHV5mwXVrQyfQufmlBUYkmMU0qVcx7OoabHkwols0LGhYY/vcoxWgM5eyUSF41A==, tarball: https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-19.2.12.tgz} + /@angular/compiler-cli@19.2.13(@angular/compiler@19.2.13)(typescript@5.8.2): + resolution: {integrity: sha512-SSuzKMcktvd6VexivDwhP7ctQBD6yyoo5E91I7Frn5nrvYNM+TIyYcXmJ4dgby5/GrPZGfm2sWl3ARr2vbCgtA==, tarball: https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-19.2.13.tgz} engines: {node: ^18.19.1 || ^20.11.1 || >=22.0.0} hasBin: true peerDependencies: - '@angular/compiler': 19.2.12 + '@angular/compiler': 19.2.13 typescript: '>=5.5 <5.9' dependencies: - '@angular/compiler': 19.2.12 + '@angular/compiler': 19.2.13 '@babel/core': 7.26.9 '@jridgewell/sourcemap-codec': 1.5.0 chokidar: 4.0.3 @@ -1340,8 +1340,8 @@ packages: transitivePeerDependencies: - supports-color - /@angular/compiler@19.2.12: - resolution: {integrity: sha512-OXfnkrtPQ1n64zWv3I0Zhk4U+Xtsbc7Utc15vqc+9sYewFjH0Fdb7bsNZ31+unpn+icWlYELtGINh+ld/rqKQQ==, tarball: https://registry.npmjs.org/@angular/compiler/-/compiler-19.2.12.tgz} + /@angular/compiler@19.2.13: + resolution: {integrity: sha512-xAj1peVrQtb65NsULmz8ocH4QZ4ESG5YiiVzJ0tLz8t280xY+QhJiM6C0+jaCVHLXvZp0c7GEzsYjL6x1HmabQ==, tarball: https://registry.npmjs.org/@angular/compiler/-/compiler-19.2.13.tgz} engines: {node: ^18.19.1 || ^20.11.1 || >=22.0.0} dependencies: tslib: 2.8.1 @@ -1367,23 +1367,23 @@ packages: rxjs: 7.8.2 tslib: 2.8.1 - /@angular/forms@19.2.12(@angular/common@19.2.12)(@angular/core@19.2.11)(@angular/platform-browser@19.2.12)(rxjs@7.8.2): - resolution: {integrity: sha512-hHJ+YoofahQvGlKvKxgj2vdGwP/D6RYoDtD/MLj41ZIIok4dmk9Rlty1pa3/FfluFK+tHX+CEYqfB+oShtPeaQ==, tarball: https://registry.npmjs.org/@angular/forms/-/forms-19.2.12.tgz} + /@angular/forms@19.2.13(@angular/common@19.2.13)(@angular/core@19.2.11)(@angular/platform-browser@19.2.13)(rxjs@7.8.2): + resolution: {integrity: sha512-g46KQFrBJhmknczlGEYvWVsPhk7ZI8WOuWkzWEl81Lf3ojEVA/OF8w4VwKZL7wOMKRxOUhuYq6tNPm8tBjtryw==, tarball: https://registry.npmjs.org/@angular/forms/-/forms-19.2.13.tgz} engines: {node: ^18.19.1 || ^20.11.1 || >=22.0.0} peerDependencies: - '@angular/common': 19.2.12 - '@angular/core': 19.2.12 - '@angular/platform-browser': 19.2.12 + '@angular/common': 19.2.13 + '@angular/core': 19.2.13 + '@angular/platform-browser': 19.2.13 rxjs: ^6.5.3 || ^7.4.0 dependencies: - '@angular/common': 19.2.12(@angular/core@19.2.11)(rxjs@7.8.2) + '@angular/common': 19.2.13(@angular/core@19.2.11)(rxjs@7.8.2) '@angular/core': 19.2.11(rxjs@7.8.2) - '@angular/platform-browser': 19.2.12(@angular/animations@19.2.11)(@angular/common@19.2.12)(@angular/core@19.2.11) + '@angular/platform-browser': 19.2.13(@angular/animations@19.2.11)(@angular/common@19.2.13)(@angular/core@19.2.11) rxjs: 7.8.2 tslib: 2.8.1 dev: false - /@angular/material@19.2.0-next.4(@angular/cdk@19.2.0-next.4)(@angular/common@19.2.12)(@angular/core@19.2.11)(@angular/forms@19.2.12)(@angular/platform-browser@19.2.12)(rxjs@7.8.2): + /@angular/material@19.2.0-next.4(@angular/cdk@19.2.0-next.4)(@angular/common@19.2.13)(@angular/core@19.2.11)(@angular/forms@19.2.13)(@angular/platform-browser@19.2.13)(rxjs@7.8.2): resolution: {integrity: sha512-darSa77CFdlVFax88GLNJWstHJp8j5qUo/kbQwUNsN0ltigS4o7eaczBA9ukekoSpXSgijq6y2VfnkkYi8hCZQ==, tarball: https://registry.npmjs.org/@angular/material/-/material-19.2.0-next.4.tgz} peerDependencies: '@angular/cdk': 19.2.0-next.4 @@ -1393,47 +1393,47 @@ packages: '@angular/platform-browser': ^19.0.0-0 || ^19.1.0-0 || ^19.2.0-0 || ^19.3.0-0 || ^20.0.0-0 rxjs: ^6.5.3 || ^7.4.0 dependencies: - '@angular/cdk': 19.2.0-next.4(@angular/common@19.2.12)(@angular/core@19.2.11)(rxjs@7.8.2) - '@angular/common': 19.2.12(@angular/core@19.2.11)(rxjs@7.8.2) + '@angular/cdk': 19.2.0-next.4(@angular/common@19.2.13)(@angular/core@19.2.11)(rxjs@7.8.2) + '@angular/common': 19.2.13(@angular/core@19.2.11)(rxjs@7.8.2) '@angular/core': 19.2.11(rxjs@7.8.2) - '@angular/forms': 19.2.12(@angular/common@19.2.12)(@angular/core@19.2.11)(@angular/platform-browser@19.2.12)(rxjs@7.8.2) - '@angular/platform-browser': 19.2.12(@angular/animations@19.2.11)(@angular/common@19.2.12)(@angular/core@19.2.11) + '@angular/forms': 19.2.13(@angular/common@19.2.13)(@angular/core@19.2.11)(@angular/platform-browser@19.2.13)(rxjs@7.8.2) + '@angular/platform-browser': 19.2.13(@angular/animations@19.2.11)(@angular/common@19.2.13)(@angular/core@19.2.11) rxjs: 7.8.2 tslib: 2.8.1 dev: false - /@angular/platform-browser@19.2.12(@angular/animations@19.2.11)(@angular/common@19.2.12)(@angular/core@19.2.11): - resolution: {integrity: sha512-R1LF7zvO2CxcJGn8tvpZQPH773iLDMVEGMZc2pRsQoehqgRmos2qjdML4DgVFF1Ismu9TxEtBfIzOiHCSOg2Zg==, tarball: https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-19.2.12.tgz} + /@angular/platform-browser@19.2.13(@angular/animations@19.2.11)(@angular/common@19.2.13)(@angular/core@19.2.11): + resolution: {integrity: sha512-YeuRfGbo8qFepoAUoubk/1079wOown5Qgr9eAhgCXxoXb2rt87xbJF3YCSSim38SP3kK1rJQqP+Sr8n7ef+n5Q==, tarball: https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-19.2.13.tgz} engines: {node: ^18.19.1 || ^20.11.1 || >=22.0.0} peerDependencies: - '@angular/animations': 19.2.12 - '@angular/common': 19.2.12 - '@angular/core': 19.2.12 + '@angular/animations': 19.2.13 + '@angular/common': 19.2.13 + '@angular/core': 19.2.13 peerDependenciesMeta: '@angular/animations': optional: true dependencies: - '@angular/animations': 19.2.11(@angular/common@19.2.12)(@angular/core@19.2.11) - '@angular/common': 19.2.12(@angular/core@19.2.11)(rxjs@7.8.2) + '@angular/animations': 19.2.11(@angular/common@19.2.13)(@angular/core@19.2.11) + '@angular/common': 19.2.13(@angular/core@19.2.11)(rxjs@7.8.2) '@angular/core': 19.2.11(rxjs@7.8.2) tslib: 2.8.1 - /@angular/router@19.2.12(@angular/common@19.2.12)(@angular/core@19.2.11)(@angular/platform-browser@19.2.12)(rxjs@7.8.2): - resolution: {integrity: sha512-T2VM8QjKukLnPVyWe4EavSIsBmt91wGVTP7AK8rpWNdMXhVjn8m4iPJGT2Ne0Bqh4kTmISOPZPDEA6A6Q78NvQ==, tarball: https://registry.npmjs.org/@angular/router/-/router-19.2.12.tgz} + /@angular/router@19.2.13(@angular/common@19.2.13)(@angular/core@19.2.11)(@angular/platform-browser@19.2.13)(rxjs@7.8.2): + resolution: {integrity: sha512-BZObWQtGkDv2WHyLVRRecGbLwalbI8kOXKaVgN5dqP4z/t5bpzYXZixPO9e0E1Ff0+m4tQalhTc84j8X7XZuTw==, tarball: https://registry.npmjs.org/@angular/router/-/router-19.2.13.tgz} engines: {node: ^18.19.1 || ^20.11.1 || >=22.0.0} peerDependencies: - '@angular/common': 19.2.12 - '@angular/core': 19.2.12 - '@angular/platform-browser': 19.2.12 + '@angular/common': 19.2.13 + '@angular/core': 19.2.13 + '@angular/platform-browser': 19.2.13 rxjs: ^6.5.3 || ^7.4.0 dependencies: - '@angular/common': 19.2.12(@angular/core@19.2.11)(rxjs@7.8.2) + '@angular/common': 19.2.13(@angular/core@19.2.11)(rxjs@7.8.2) '@angular/core': 19.2.11(rxjs@7.8.2) - '@angular/platform-browser': 19.2.12(@angular/animations@19.2.11)(@angular/common@19.2.12)(@angular/core@19.2.11) + '@angular/platform-browser': 19.2.13(@angular/animations@19.2.11)(@angular/common@19.2.13)(@angular/core@19.2.11) rxjs: 7.8.2 tslib: 2.8.1 - /@angular/ssr@19.2.0-next.2(@angular/common@19.2.12)(@angular/core@19.2.11)(@angular/router@19.2.12): + /@angular/ssr@19.2.0-next.2(@angular/common@19.2.13)(@angular/core@19.2.11)(@angular/router@19.2.13): resolution: {integrity: sha512-JN5Utru8xJRpCF+ArG3CCgzlCYgbnB2XUV4J6uO56KgdqK5OeCOCcsuJYBHu+ifaF4ecb74JdXWm0VgB/HQKXA==, tarball: https://registry.npmjs.org/@angular/ssr/-/ssr-19.2.0-next.2.tgz} peerDependencies: '@angular/common': ^19.0.0 || ^19.2.0-next.0 @@ -1444,9 +1444,9 @@ packages: '@angular/platform-server': optional: true dependencies: - '@angular/common': 19.2.12(@angular/core@19.2.11)(rxjs@7.8.2) + '@angular/common': 19.2.13(@angular/core@19.2.11)(rxjs@7.8.2) '@angular/core': 19.2.11(rxjs@7.8.2) - '@angular/router': 19.2.12(@angular/common@19.2.12)(@angular/core@19.2.11)(@angular/platform-browser@19.2.12)(rxjs@7.8.2) + '@angular/router': 19.2.13(@angular/common@19.2.13)(@angular/core@19.2.11)(@angular/platform-browser@19.2.13)(rxjs@7.8.2) tslib: 2.8.1 /@antfu/install-pkg@1.0.0: @@ -4653,7 +4653,7 @@ packages: '@napi-rs/nice-win32-x64-msvc': 1.0.1 optional: true - /@ngtools/webpack@19.2.0-next.2(@angular/compiler-cli@19.2.12)(typescript@5.8.2)(webpack@5.97.1): + /@ngtools/webpack@19.2.0-next.2(@angular/compiler-cli@19.2.13)(typescript@5.8.2)(webpack@5.97.1): resolution: {integrity: sha512-YxtR1+YiXjOmaunOIt3CpmEQunV42pbG5pYd/l6Pjqg/83MHxO8h2ax51By/LIzKm6P1qKsGTEtyZBanG7JgGQ==, tarball: https://registry.npmjs.org/@ngtools/webpack/-/webpack-19.2.0-next.2.tgz} engines: {node: ^18.19.1 || ^20.11.1 || >=22.0.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} peerDependencies: @@ -4661,7 +4661,7 @@ packages: typescript: '>=5.5 <5.8' webpack: ^5.54.0 dependencies: - '@angular/compiler-cli': 19.2.12(@angular/compiler@19.2.12)(typescript@5.8.2) + '@angular/compiler-cli': 19.2.13(@angular/compiler@19.2.13)(typescript@5.8.2) typescript: 5.8.2 webpack: 5.97.1(esbuild@0.25.0) dev: false @@ -7179,14 +7179,14 @@ packages: resolution: {integrity: sha512-vqsT6zwu80cZ8RY7qRQBZuy6Fq5X7/N5hkV9LzNT0c8b546rw4ErGK6muW1u2JnDKYa7+jJuaGM702bWir4HGw==, tarball: https://registry.npmjs.org/angular-mocks/-/angular-mocks-1.8.3.tgz} dev: false - /angular-split@19.0.0(@angular/common@19.2.12)(@angular/core@19.2.11)(rxjs@7.8.2): + /angular-split@19.0.0(@angular/common@19.2.13)(@angular/core@19.2.11)(rxjs@7.8.2): resolution: {integrity: sha512-vQqXWLcCimFmInu2lpGKIfS9FtYBgKmoWenPjeYkHSRdWmb7HLGlQoNPj1oALrwdhIWFPdySgp0BIXDe2IAepQ==, tarball: https://registry.npmjs.org/angular-split/-/angular-split-19.0.0.tgz} peerDependencies: '@angular/common': '>=19.0.0' '@angular/core': '>=19.0.0' rxjs: '>=7.0.0' dependencies: - '@angular/common': 19.2.12(@angular/core@19.2.11)(rxjs@7.8.2) + '@angular/common': 19.2.13(@angular/core@19.2.11)(rxjs@7.8.2) '@angular/core': 19.2.11(rxjs@7.8.2) rxjs: 7.8.2 tslib: 2.8.1 @@ -14329,18 +14329,18 @@ packages: engines: {node: '>= 0.4.0'} dev: true - /ngx-flamegraph@0.0.12(@angular/common@19.2.12)(@angular/core@19.2.11): + /ngx-flamegraph@0.0.12(@angular/common@19.2.13)(@angular/core@19.2.11): resolution: {integrity: sha512-YoxrqlL36Bg5Ca9fu10kuSUmaWHAvx7jkxINF4/4cXn9bBPRfu78FqnZ5LIULC0+iScZcSDSWDAnUdn8H7+wGw==, tarball: https://registry.npmjs.org/ngx-flamegraph/-/ngx-flamegraph-0.0.12.tgz} peerDependencies: '@angular/common': ^9.0.0 '@angular/core': ^9.0.0 dependencies: - '@angular/common': 19.2.12(@angular/core@19.2.11)(rxjs@7.8.2) + '@angular/common': 19.2.13(@angular/core@19.2.11)(rxjs@7.8.2) '@angular/core': 19.2.11(rxjs@7.8.2) tslib: 2.8.1 dev: false - /ngx-progressbar@14.0.0(@angular/cdk@19.2.0-next.4)(@angular/common@19.2.12)(@angular/core@19.2.11)(rxjs@7.8.2): + /ngx-progressbar@14.0.0(@angular/cdk@19.2.0-next.4)(@angular/common@19.2.13)(@angular/core@19.2.11)(rxjs@7.8.2): resolution: {integrity: sha512-tDj7h5F2aSI4/XaJjs50FnELVe6qFqyz3vVq22acacd3oDW2EyJB4c+IYaxMf5972OdTw0WL4n6UwQ3dqC+gCA==, tarball: https://registry.npmjs.org/ngx-progressbar/-/ngx-progressbar-14.0.0.tgz} peerDependencies: '@angular/cdk': '>=17.3.0' @@ -14348,8 +14348,8 @@ packages: '@angular/core': '>=17.3.0' rxjs: '>=7.0.0' dependencies: - '@angular/cdk': 19.2.0-next.4(@angular/common@19.2.12)(@angular/core@19.2.11)(rxjs@7.8.2) - '@angular/common': 19.2.12(@angular/core@19.2.11)(rxjs@7.8.2) + '@angular/cdk': 19.2.0-next.4(@angular/common@19.2.13)(@angular/core@19.2.11)(rxjs@7.8.2) + '@angular/common': 19.2.13(@angular/core@19.2.11)(rxjs@7.8.2) '@angular/core': 19.2.11(rxjs@7.8.2) rxjs: 7.8.2 tslib: 2.8.1 @@ -19777,14 +19777,14 @@ packages: resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==, tarball: https://registry.npmjs.org/zwitch/-/zwitch-2.0.4.tgz} dev: true - github.com/angular/dev-infra-private-build-tooling-builds/5db176c0f3211663830fd3ff4064c1dff0eaccb4(@angular/compiler-cli@19.2.12)(@angular/compiler@19.2.12)(@angular/ssr@19.2.0-next.2)(chokidar@4.0.3)(karma-chrome-launcher@3.2.0)(karma-firefox-launcher@2.1.3)(karma-jasmine@5.1.0)(karma-junit-reporter@2.0.1)(karma-requirejs@1.1.0)(karma-sourcemap-loader@0.4.0)(karma@6.4.4)(less@4.2.2)(postcss@8.5.2)(rxjs@7.8.2)(terser@5.39.0)(tsx@4.19.3): + github.com/angular/dev-infra-private-build-tooling-builds/5db176c0f3211663830fd3ff4064c1dff0eaccb4(@angular/compiler-cli@19.2.13)(@angular/compiler@19.2.13)(@angular/ssr@19.2.0-next.2)(chokidar@4.0.3)(karma-chrome-launcher@3.2.0)(karma-firefox-launcher@2.1.3)(karma-jasmine@5.1.0)(karma-junit-reporter@2.0.1)(karma-requirejs@1.1.0)(karma-sourcemap-loader@0.4.0)(karma@6.4.4)(less@4.2.2)(postcss@8.5.2)(rxjs@7.8.2)(terser@5.39.0)(tsx@4.19.3): resolution: {tarball: https://codeload.github.com/angular/dev-infra-private-build-tooling-builds/tar.gz/5db176c0f3211663830fd3ff4064c1dff0eaccb4} id: github.com/angular/dev-infra-private-build-tooling-builds/5db176c0f3211663830fd3ff4064c1dff0eaccb4 name: '@angular/build-tooling' version: 0.0.0-d44be7e28087c3499d70dda9859d51c1cd3fe1bf dependencies: '@angular/benchpress': 0.3.0(rxjs@7.8.2) - '@angular/build': 19.1.0-rc.0(@angular/compiler-cli@19.2.12)(@angular/compiler@19.2.12)(@angular/ssr@19.2.0-next.2)(@types/node@18.19.84)(chokidar@4.0.3)(less@4.2.2)(postcss@8.5.2)(terser@5.39.0)(tsx@4.19.3)(typescript@5.7.3) + '@angular/build': 19.1.0-rc.0(@angular/compiler-cli@19.2.13)(@angular/compiler@19.2.13)(@angular/ssr@19.2.0-next.2)(@types/node@18.19.84)(chokidar@4.0.3)(less@4.2.2)(postcss@8.5.2)(terser@5.39.0)(tsx@4.19.3)(typescript@5.7.3) '@babel/core': 7.26.10 '@babel/plugin-proposal-async-generator-functions': 7.20.7(@babel/core@7.26.10) '@bazel/buildifier': 6.3.3