From d37f5085e4e91903aac52da1d9ba4c15134db80b Mon Sep 17 00:00:00 2001 From: Paul Gschwendtner Date: Wed, 7 May 2025 06:50:28 +0000 Subject: [PATCH] build: migrate symbol-extractor to `ts_project` (#61209) Migrates the symbol-extractor code to `ts_project`. PR Close #61209 --- WORKSPACE | 2 +- packages/BUILD.bazel | 6 +-- tools/BUILD.bazel | 16 +++++++ tools/bazel/ts_project_interop.bzl | 3 +- tools/defaults2.bzl | 4 +- tools/symbol-extractor/BUILD.bazel | 22 +++++----- tools/symbol-extractor/index.bzl | 15 ++++--- tools/symbol-extractor/symbol_extractor.ts | 2 + .../symbol-extractor/symbol_extractor_spec.ts | 2 +- .../symbol_extractor_spec/BUILD.bazel | 13 ++---- .../symbol_extractor_spec/tsconfig.json | 9 ++++ tools/tsconfig-test.json | 9 ++-- tools/tsconfig.json | 42 ++++--------------- 13 files changed, 69 insertions(+), 76 deletions(-) create mode 100644 tools/symbol-extractor/symbol_extractor_spec/tsconfig.json diff --git a/WORKSPACE b/WORKSPACE index bf5344de691..59ec50aa87b 100644 --- a/WORKSPACE +++ b/WORKSPACE @@ -258,7 +258,7 @@ setup_dependencies_2() git_repository( name = "rules_angular", - commit = "f47fe935fecac02f02fe1337274207f00146a765", + commit = "e35da7371d02d0c8d165c518d532d66be7afb8a6", remote = "https://github.com/devversion/rules_angular.git", ) diff --git a/packages/BUILD.bazel b/packages/BUILD.bazel index befd74ca1e9..29eb21ecd43 100644 --- a/packages/BUILD.bazel +++ b/packages/BUILD.bazel @@ -35,7 +35,7 @@ ts_config( ) rules_js_tsconfig( - name = "build-tsconfig", + name = "tsconfig_build", src = "tsconfig-build.json", deps = [ "//:node_modules/tslib", @@ -43,10 +43,10 @@ rules_js_tsconfig( ) rules_js_tsconfig( - name = "test-tsconfig", + name = "tsconfig_test", src = "tsconfig-test.json", deps = [ - ":build-tsconfig", + ":tsconfig_build", "//:node_modules/@types/jasmine", ], ) diff --git a/tools/BUILD.bazel b/tools/BUILD.bazel index d8bd18ae752..ce366b5cdcb 100644 --- a/tools/BUILD.bazel +++ b/tools/BUILD.bazel @@ -1,3 +1,4 @@ +load("@aspect_rules_ts//ts:defs.bzl", rules_js_tsconfig = "ts_config") load("//tools:defaults.bzl", "ts_config") package(default_visibility = ["//visibility:public"]) @@ -13,6 +14,21 @@ ts_config( deps = ["tsconfig.json"], ) +rules_js_tsconfig( + name = "tsconfig_build", + src = "tsconfig.json", + deps = ["//:node_modules/@types/node"], +) + +rules_js_tsconfig( + name = "tsconfig_test", + src = "tsconfig-test.json", + deps = [ + ":tsconfig_build", + "//:node_modules/@types/jasmine", + ], +) + platform( name = "rbe_ubuntu1604-angular", parents = ["@rbe_ubuntu1604_angular//config:platform"], diff --git a/tools/bazel/ts_project_interop.bzl b/tools/bazel/ts_project_interop.bzl index f9c7552fb26..ac64ed0adf1 100644 --- a/tools/bazel/ts_project_interop.bzl +++ b/tools/bazel/ts_project_interop.bzl @@ -106,7 +106,8 @@ def ts_project( tsconfig = None, testonly = False, visibility = None, - ignore_strict_deps = False, + # TODO: Enable this for all `ts_project` targets at end of migration. + ignore_strict_deps = True, enable_runtime_rnjs_interop = True, rule_impl = _ts_project, **kwargs): diff --git a/tools/defaults2.bzl b/tools/defaults2.bzl index fdc86c74bb2..138f2337b3d 100644 --- a/tools/defaults2.bzl +++ b/tools/defaults2.bzl @@ -11,7 +11,7 @@ def ts_project( module_name = kwargs.pop("module_name", compute_module_name(testonly)) if tsconfig == None and native.package_name().startswith("packages"): - tsconfig = "//packages:test-tsconfig" if testonly else "//packages:build-tsconfig" + tsconfig = "//packages:tsconfig_test" if testonly else "//packages:tsconfig_build" _ts_project( name, @@ -31,7 +31,7 @@ def ng_project( module_name = kwargs.pop("module_name", compute_module_name(testonly)) if tsconfig == None and native.package_name().startswith("packages"): - tsconfig = "//packages:test-tsconfig" if testonly else "//packages:build-tsconfig" + tsconfig = "//packages:tsconfig_test" if testonly else "//packages:tsconfig_build" _ts_project( name, source_map = source_map, diff --git a/tools/symbol-extractor/BUILD.bazel b/tools/symbol-extractor/BUILD.bazel index c85fab64807..ca07e5d3981 100644 --- a/tools/symbol-extractor/BUILD.bazel +++ b/tools/symbol-extractor/BUILD.bazel @@ -1,8 +1,9 @@ -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 = "lib", testonly = True, srcs = glob( @@ -12,25 +13,26 @@ ts_library( "**/*_spec", ], ), + tsconfig = "//tools:tsconfig_build", deps = [ - "//packages:types", - "@npm//@bazel/runfiles", - "@npm//typescript", + "//:node_modules/@bazel/runfiles", + "//:node_modules/@types/jasmine", + "//:node_modules/typescript", ], ) -ts_library( +ts_project( name = "test_lib", testonly = 1, srcs = glob( ["**/*_spec.ts"], exclude = ["symbol_extractor_spec/**"], ), + tsconfig = "//tools:tsconfig_test", deps = [ - ":lib", - "//packages:types", - "@npm//@bazel/runfiles", - "@npm//typescript", + ":lib_rjs", + "//:node_modules/@bazel/runfiles", + "//:node_modules/typescript", ], ) diff --git a/tools/symbol-extractor/index.bzl b/tools/symbol-extractor/index.bzl index af761d7fc25..9da4b2f5107 100644 --- a/tools/symbol-extractor/index.bzl +++ b/tools/symbol-extractor/index.bzl @@ -3,7 +3,7 @@ # Use of this source code is governed by an MIT-style license that can be # found in the LICENSE file at https://angular.dev/license -load("//tools:defaults.bzl", "nodejs_binary", "nodejs_test") +load("@aspect_rules_js//js:defs.bzl", "js_binary", "js_test") """ This test verifies that a set of top level symbols from a javascript file match a gold file. @@ -13,27 +13,26 @@ def js_expected_symbol_test(name, src, golden, data = [], **kwargs): """This test verifies that a set of top level symbols from a javascript file match a gold file. """ all_data = data + [ - Label("//tools/symbol-extractor:lib"), - Label("@npm//typescript"), + Label("//tools/symbol-extractor:lib_rjs"), src, golden, ] - entry_point = "//tools/symbol-extractor:cli.ts" + entry_point = "//tools/symbol-extractor:cli.js" - nodejs_test( + js_test( name = name, data = all_data, entry_point = entry_point, tags = kwargs.pop("tags", []) + ["symbol_extractor"], - templated_args = ["$(rootpath %s)" % src, "$(rootpath %s)" % golden], + fixed_args = ["$(rootpath %s)" % src, "$(rootpath %s)" % golden], **kwargs ) - nodejs_binary( + js_binary( name = name + ".accept", testonly = True, data = all_data, entry_point = entry_point, - templated_args = ["$(rootpath %s)" % src, "$(rootpath %s)" % golden, "--accept"], + fixed_args = ["$(rootpath %s)" % src, "$(rootpath %s)" % golden, "--accept"], **kwargs ) diff --git a/tools/symbol-extractor/symbol_extractor.ts b/tools/symbol-extractor/symbol_extractor.ts index f44bb9b9d2c..f9266f8f5ce 100644 --- a/tools/symbol-extractor/symbol_extractor.ts +++ b/tools/symbol-extractor/symbol_extractor.ts @@ -6,6 +6,8 @@ * found in the LICENSE file at https://angular.dev/license */ +/// + import ts from 'typescript'; export class SymbolExtractor { diff --git a/tools/symbol-extractor/symbol_extractor_spec.ts b/tools/symbol-extractor/symbol_extractor_spec.ts index 621af63213c..955270fba8b 100644 --- a/tools/symbol-extractor/symbol_extractor_spec.ts +++ b/tools/symbol-extractor/symbol_extractor_spec.ts @@ -49,7 +49,7 @@ describe('scenarios', () => { it('should properly capture classes in TypeScript ES2015 class output', () => { const jsFileContent = fs.readFileSync( runfiles.resolve( - 'angular/tools/symbol-extractor/symbol_extractor_spec/es2015_class_output.mjs', + 'angular/tools/symbol-extractor/symbol_extractor_spec/es2015_class_output.js', ), 'utf8', ); diff --git a/tools/symbol-extractor/symbol_extractor_spec/BUILD.bazel b/tools/symbol-extractor/symbol_extractor_spec/BUILD.bazel index 220b271b772..0640b52a36d 100644 --- a/tools/symbol-extractor/symbol_extractor_spec/BUILD.bazel +++ b/tools/symbol-extractor/symbol_extractor_spec/BUILD.bazel @@ -1,16 +1,11 @@ -load("//tools:defaults.bzl", "ts_library") +load("//tools:defaults2.bzl", "ts_project") package(default_visibility = ["//visibility:public"]) -ts_library( - name = "es2015_class_output_lib", - srcs = ["es2015_class_output.ts"], -) - -filegroup( +ts_project( name = "es2015_class_output", - srcs = [":es2015_class_output_lib"], - output_group = "es6_sources", + srcs = ["es2015_class_output.ts"], + tsconfig = "tsconfig.json", ) filegroup( diff --git a/tools/symbol-extractor/symbol_extractor_spec/tsconfig.json b/tools/symbol-extractor/symbol_extractor_spec/tsconfig.json new file mode 100644 index 00000000000..c12cbba737a --- /dev/null +++ b/tools/symbol-extractor/symbol_extractor_spec/tsconfig.json @@ -0,0 +1,9 @@ +{ + "compilerOptions": { + "strict": true, + "module": "ESNext", + "target": "ES2022", + "sourceMap": true, + "declaration": true + } +} diff --git a/tools/tsconfig-test.json b/tools/tsconfig-test.json index 597fbd2909c..d022089a551 100644 --- a/tools/tsconfig-test.json +++ b/tools/tsconfig-test.json @@ -1,9 +1,6 @@ { "extends": "./tsconfig.json", "compilerOptions": { - "types": [ - "node", - "jasmine" - ] - }, -} \ No newline at end of file + "types": ["node", "jasmine"] + } +} diff --git a/tools/tsconfig.json b/tools/tsconfig.json index b234e0e3f4a..9b6ba59e1b4 100644 --- a/tools/tsconfig.json +++ b/tools/tsconfig.json @@ -1,40 +1,12 @@ { - // This tsconfig is only used by IDEs, no actual builds. "compilerOptions": { - "baseUrl": ".", - "declaration": true, - "emitDecoratorMetadata": true, - "experimentalDecorators": true, - "module": "commonjs", - "esModuleInterop": true, - "moduleResolution": "node", - "outDir": "../dist/tools/", - "noImplicitAny": true, - "noFallthroughCasesInSwitch": true, - "paths": { - "@angular/*": ["../packages/*"] - }, - "rootDirs": [".", ".."], - "sourceMap": true, - "inlineSources": true, - "lib": [ - "es6", - "dom" - ], - "target": "es5", + "strict": true, "skipLibCheck": true, - "types": [ - "node" - ] - }, - "exclude": [ - "testing", - "node_modules", - "typings-test", - "public_api_guard", - "docs" - ], - "bazelOptions": { - "suppressTsconfigOverrideWarnings": true + "declaration": true, + "esModuleInterop": true, + "sourceMap": true, + "module": "CommonJS", + "moduleResolution": "node10", + "types": ["node"] } }