From 7dad7dfecd58f24439e6718efd3f802b6591de15 Mon Sep 17 00:00:00 2001 From: Paul Gschwendtner Date: Tue, 6 Jul 2021 15:45:55 +0200 Subject: [PATCH] build: update to rules_nodejs v4.0.0-beta.0 (#42813) Updates the Bazel NodeJS rules to v4.0.0-beta.0. This is necessary so that the Angular components repo can update, and it's generally good to stay as up-to-date as possible with the Bazel rules as it's easy to fall behind, and updating early allows us to discover issues affecting our tooling earlier (where they are easier to address due to e.g. potential breaking change policy). PR Close #42813 --- WORKSPACE | 4 +- dev-infra/BUILD.bazel | 8 +-- .../benchmark/driver-utilities/BUILD.bazel | 5 +- dev-infra/caretaker/BUILD.bazel | 5 +- dev-infra/commit-message/BUILD.bazel | 5 +- dev-infra/defaults.bzl | 67 +++++++++++++++++++ dev-infra/format/BUILD.bazel | 3 +- dev-infra/index.bzl | 31 +-------- dev-infra/misc/BUILD.bazel | 3 +- dev-infra/ngbot/BUILD.bazel | 3 +- dev-infra/pr/BUILD.bazel | 3 +- .../pr/check-target-branches/BUILD.bazel | 3 +- dev-infra/pr/checkout/BUILD.bazel | 3 +- dev-infra/pr/common/BUILD.bazel | 3 +- .../pr/discover-new-conflicts/BUILD.bazel | 3 +- dev-infra/pr/merge/BUILD.bazel | 5 +- dev-infra/pr/rebase/BUILD.bazel | 3 +- dev-infra/pullapprove/BUILD.bazel | 4 +- dev-infra/release/BUILD.bazel | 3 +- dev-infra/release/build/BUILD.bazel | 4 +- dev-infra/release/config/BUILD.bazel | 3 +- dev-infra/release/info/BUILD.bazel | 3 +- dev-infra/release/notes/BUILD.bazel | 3 +- dev-infra/release/publish/BUILD.bazel | 3 +- dev-infra/release/publish/test/BUILD.bazel | 4 +- dev-infra/release/set-dist-tag/BUILD.bazel | 4 +- dev-infra/release/versioning/BUILD.bazel | 3 +- .../ts-circular-dependencies/BUILD.bazel | 3 +- dev-infra/utils/BUILD.bazel | 4 +- dev-infra/utils/testing/BUILD.bazel | 3 +- package.json | 16 ++--- .../test/ng_package/example_package.golden | 4 -- .../src/ngtsc/testing/fake_common/BUILD.bazel | 4 +- .../src/ngtsc/testing/fake_core/BUILD.bazel | 4 +- .../partial/partial_compliance_goldens.bzl | 2 +- packages/localize/src/tools/BUILD.bazel | 4 +- tools/defaults.bzl | 55 ++++++++++++++- tools/ts-api-guardian/BUILD.bazel | 1 + yarn.lock | 64 +++++++++--------- 39 files changed, 206 insertions(+), 149 deletions(-) create mode 100644 dev-infra/defaults.bzl diff --git a/WORKSPACE b/WORKSPACE index ac6f85950ec..3a28dcbdde3 100644 --- a/WORKSPACE +++ b/WORKSPACE @@ -8,8 +8,8 @@ load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive") # Fetch rules_nodejs so we can install our npm dependencies http_archive( name = "build_bazel_rules_nodejs", - sha256 = "0fa2d443571c9e02fcb7363a74ae591bdcce2dd76af8677a95965edf329d778a", - urls = ["https://github.com/bazelbuild/rules_nodejs/releases/download/3.6.0/rules_nodejs-3.6.0.tar.gz"], + sha256 = "5c40083120eadec50a3497084f99bc75a85400ea727e82e0b2f422720573130f", + urls = ["https://github.com/bazelbuild/rules_nodejs/releases/download/4.0.0-beta.0/rules_nodejs-4.0.0-beta.0.tar.gz"], ) # Check the rules_nodejs version and download npm dependencies diff --git a/dev-infra/BUILD.bazel b/dev-infra/BUILD.bazel index db10ba96d31..bb88f641820 100644 --- a/dev-infra/BUILD.bazel +++ b/dev-infra/BUILD.bazel @@ -1,7 +1,6 @@ # BEGIN-INTERNAL load("@build_bazel_rules_nodejs//:index.bzl", "pkg_npm") -load("@npm//@bazel/typescript:index.bzl", "ts_library") -load("//dev-infra:index.bzl", "ng_dev_rolled_up_generated_file") +load("//dev-infra:defaults.bzl", "ng_dev_rolled_up_generated_file", "ts_library") # END-INTERNAL exports_files(["tsconfig.json"]) @@ -12,7 +11,6 @@ ts_library( srcs = [ "cli.ts", ], - module_name = "@angular/dev-infra-private", deps = [ "//dev-infra/caretaker", "//dev-infra/commit-message", @@ -47,6 +45,7 @@ genrule( pkg_npm( name = "npm_package", srcs = [ + # Main bazel entry-point for the shared `dev-infra` package. "index.bzl", "BUILD.bazel", # Some tools within `dev-infra` which are shipped as Bazel rules might @@ -60,12 +59,13 @@ pkg_npm( # substitutions to replace these in the published version of dev-infra. "//dev-infra/": "@npm//@angular/dev-infra-private/", "//dev-infra:": "@npm//@angular/dev-infra-private:", + + # Substitutions needed for `//dev-infra/benchmark`: "//packages/benchpress": "@npm//@angular/benchpress", "//packages/bazel": "@npm//@angular/bazel", "//packages/zone.js/bundles:zone.umd.js": "@npm//zone.js", "//packages/core": "@npm//@angular/core", "//packages/platform-browser": "@npm//@angular/platform-browser", - # This substitution is particularly verbose because we need to make sure # that only things available via Angular Bazel are imported from # tools/defaults.bzl. diff --git a/dev-infra/benchmark/driver-utilities/BUILD.bazel b/dev-infra/benchmark/driver-utilities/BUILD.bazel index 1117bd50570..fd575c92b3e 100644 --- a/dev-infra/benchmark/driver-utilities/BUILD.bazel +++ b/dev-infra/benchmark/driver-utilities/BUILD.bazel @@ -1,11 +1,10 @@ -package(default_visibility = ["//visibility:public"]) +load("//dev-infra:defaults.bzl", "ts_library") -load("@npm//@bazel/typescript:index.bzl", "ts_library") +package(default_visibility = ["//visibility:public"]) ts_library( name = "driver-utilities", srcs = glob(["*.ts"]), - module_name = "@angular/dev-infra-private/benchmark/driver-utilities", tsconfig = "//dev-infra/benchmark/component_benchmark:tsconfig-e2e.json", deps = [ "//packages/benchpress", diff --git a/dev-infra/caretaker/BUILD.bazel b/dev-infra/caretaker/BUILD.bazel index 7de91c849fc..d39384ad450 100644 --- a/dev-infra/caretaker/BUILD.bazel +++ b/dev-infra/caretaker/BUILD.bazel @@ -1,5 +1,4 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_library") -load("//tools:defaults.bzl", "jasmine_node_test") +load("//dev-infra:defaults.bzl", "jasmine_node_test", "ts_library") ts_library( name = "caretaker", @@ -7,7 +6,6 @@ ts_library( ["**/*.ts"], exclude = ["**/*.spec.ts"], ), - module_name = "@angular/dev-infra-private/caretaker", visibility = ["//dev-infra:__subpackages__"], deps = [ "//dev-infra/release/versioning", @@ -41,7 +39,6 @@ ts_library( jasmine_node_test( name = "test", - bootstrap = ["//tools/testing:node_no_angular_es5"], deps = [ ":test_lib", ], diff --git a/dev-infra/commit-message/BUILD.bazel b/dev-infra/commit-message/BUILD.bazel index 3b4dddaa3d6..bbdc0cd5ba4 100644 --- a/dev-infra/commit-message/BUILD.bazel +++ b/dev-infra/commit-message/BUILD.bazel @@ -1,5 +1,4 @@ -load("//tools:defaults.bzl", "jasmine_node_test") -load("@npm//@bazel/typescript:index.bzl", "ts_library") +load("//dev-infra:defaults.bzl", "jasmine_node_test", "ts_library") ts_library( name = "commit-message", @@ -7,7 +6,6 @@ ts_library( ["**/*.ts"], exclude = ["**/*.spec.ts"], ), - module_name = "@angular/dev-infra-private/commit-message", visibility = ["//dev-infra:__subpackages__"], deps = [ "//dev-infra/utils", @@ -41,7 +39,6 @@ ts_library( jasmine_node_test( name = "test", - bootstrap = ["//tools/testing:node_no_angular_es5"], deps = [ ":test_lib", ], diff --git a/dev-infra/defaults.bzl b/dev-infra/defaults.bzl new file mode 100644 index 00000000000..b7f4ad2a084 --- /dev/null +++ b/dev-infra/defaults.bzl @@ -0,0 +1,67 @@ +""" + Defaults for the `//dev-infra` Bazel package. These are different than + the defaults in `//tools:defaults.bzl` which are specific to the package + structure as seen within `/packages/`. +""" + +load("@build_bazel_rules_nodejs//:index.bzl", "generated_file_test") +load("@npm//@bazel/jasmine:index.bzl", _jasmine_node_test = "jasmine_node_test") +load("@npm//@bazel/typescript:index.bzl", _ts_library = "ts_library") +load("@npm//@bazel/rollup:index.bzl", "rollup_bundle") + +NPM_PACKAGE_NAME = "@angular/dev-infra-private" + +def _compute_module_name(): + current_pkg = native.package_name() + + if current_pkg == "dev-infra": + return NPM_PACKAGE_NAME + + # For deep targets within `//dev-infra` construct the module name in a way that matches + # the structure within the NPM package (i.e. simply appending the actual package path) + return "%s/%s" % (NPM_PACKAGE_NAME, current_pkg[len("dev-infra/"):]) + +def ts_library(name, **kwargs): + _ts_library( + name = name, + # If no `module_name` is set, compute a module name based on the current Bazel + # package. The module names should match the NPM package structure so that the NPM + # package can be used properly. Note that we disallow any custom `module_name` for + # `//dev-infra` as this usually signifies a mistake we want to raise awareness for. + module_name = _compute_module_name(), + # We use the module name as package name, so that the target can be resolved within + # NodeJS executions, by activating the Bazel NodeJS linker. + # See: https://github.com/bazelbuild/rules_nodejs/pull/2799. + package_name = _compute_module_name(), + **kwargs + ) + +def jasmine_node_test(**kwargs): + _jasmine_node_test(**kwargs) + +# This file continues to serve as indicator for `rules_nodejs` and instructs it to preserve the +# content output in the NPM install workspace. This allows consumers to use rules and targets from +# within Bazel. e.g. by using `@npm//@angular/dev-infra-private/<..>`. +# See: https://github.com/bazelbuild/rules_nodejs/commit/4f508b1a0be1f5444e9c13b0439e649449792fef. + +def ng_dev_rolled_up_generated_file(name, entry_point, deps = [], rollup_args = []): + """Rollup and generated file test macro. + + This provides a single macro to create a rollup bundled script and a generated file + test for the created script to ensure it stays up to date in the repository. + """ + rollup_bundle( + name = "%s_bundle" % name, + args = rollup_args, + entry_point = entry_point, + format = "cjs", + silent = True, + sourcemap = "false", + deps = deps, + ) + + generated_file_test( + name = name, + src = "%s.js" % name, + generated = "%s_bundle" % name, + ) diff --git a/dev-infra/format/BUILD.bazel b/dev-infra/format/BUILD.bazel index 255e8d7535e..c280f06d514 100644 --- a/dev-infra/format/BUILD.bazel +++ b/dev-infra/format/BUILD.bazel @@ -1,11 +1,10 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_library") +load("//dev-infra:defaults.bzl", "ts_library") ts_library( name = "format", srcs = glob([ "**/*.ts", ]), - module_name = "@angular/dev-infra-private/format", visibility = ["//dev-infra:__subpackages__"], deps = [ "//dev-infra/utils", diff --git a/dev-infra/index.bzl b/dev-infra/index.bzl index 34867f09945..cd495e8552c 100644 --- a/dev-infra/index.bzl +++ b/dev-infra/index.bzl @@ -3,32 +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.io/license -load("@build_bazel_rules_nodejs//:index.bzl", "generated_file_test") -load("@npm//@bazel/rollup:index.bzl", "rollup_bundle") - -# This file continues to serve as indicator for `rules_nodejs` and instructs it preserve the -# content output in the NPM install workspace. This allows consumers to use rules and targets from -# within Bazel. e.g. by using `@npm//@angular/dev-infra-private/<..>`. +# File is currently empty but serves as indicator for `rules_nodejs` and instructs it to +# preserve the content output in the NPM install workspace. This allows consumers to use +# rules and targets from within Bazel. e.g. by using `@npm//@angular/dev-infra-private/<..>`. # See: https://github.com/bazelbuild/rules_nodejs/commit/4f508b1a0be1f5444e9c13b0439e649449792fef. - -def ng_dev_rolled_up_generated_file(name, entry_point, deps = [], rollup_args = []): - """Rollup and generated file test macro. - - This provides a single macro to create a rollup bundled script and a generated file test for the - created script to ensure it stays up to date in the repository. - """ - rollup_bundle( - name = "%s_bundle" % name, - args = rollup_args, - entry_point = entry_point, - format = "cjs", - silent = True, - sourcemap = "false", - deps = deps, - ) - - generated_file_test( - name = name, - src = "%s.js" % name, - generated = "%s_bundle" % name, - ) diff --git a/dev-infra/misc/BUILD.bazel b/dev-infra/misc/BUILD.bazel index 5e538b23f29..49c38e15615 100644 --- a/dev-infra/misc/BUILD.bazel +++ b/dev-infra/misc/BUILD.bazel @@ -1,9 +1,8 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_library") +load("//dev-infra:defaults.bzl", "ts_library") ts_library( name = "misc", srcs = glob(["**/*.ts"]), - module_name = "@angular/dev-infra-private/misc/", visibility = ["//dev-infra:__subpackages__"], deps = [ "//dev-infra/release/build", diff --git a/dev-infra/ngbot/BUILD.bazel b/dev-infra/ngbot/BUILD.bazel index 08e72e9962d..a22ccaa646f 100644 --- a/dev-infra/ngbot/BUILD.bazel +++ b/dev-infra/ngbot/BUILD.bazel @@ -1,4 +1,4 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_library") +load("//dev-infra:defaults.bzl", "ts_library") ts_library( name = "ngbot", @@ -6,7 +6,6 @@ ts_library( "cli.ts", "verify.ts", ], - module_name = "@angular/dev-infra-private/ngbot", visibility = ["//dev-infra:__subpackages__"], deps = [ "//dev-infra/utils", diff --git a/dev-infra/pr/BUILD.bazel b/dev-infra/pr/BUILD.bazel index 00a0cee6544..fd55fd837ee 100644 --- a/dev-infra/pr/BUILD.bazel +++ b/dev-infra/pr/BUILD.bazel @@ -1,9 +1,8 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_library") +load("//dev-infra:defaults.bzl", "ts_library") ts_library( name = "pr", srcs = ["cli.ts"], - module_name = "@angular/dev-infra-private/pr", visibility = ["//dev-infra:__subpackages__"], deps = [ "//dev-infra/pr/check-target-branches", diff --git a/dev-infra/pr/check-target-branches/BUILD.bazel b/dev-infra/pr/check-target-branches/BUILD.bazel index 4250f863170..7b33c529be9 100644 --- a/dev-infra/pr/check-target-branches/BUILD.bazel +++ b/dev-infra/pr/check-target-branches/BUILD.bazel @@ -1,9 +1,8 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_library") +load("//dev-infra:defaults.bzl", "ts_library") ts_library( name = "check-target-branches", srcs = glob(["*.ts"]), - module_name = "@angular/dev-infra-private/pr/check-target-branches", visibility = ["//dev-infra:__subpackages__"], deps = [ "//dev-infra/pr/merge", diff --git a/dev-infra/pr/checkout/BUILD.bazel b/dev-infra/pr/checkout/BUILD.bazel index e7a729c10f0..a1a2b3e3e24 100644 --- a/dev-infra/pr/checkout/BUILD.bazel +++ b/dev-infra/pr/checkout/BUILD.bazel @@ -1,9 +1,8 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_library") +load("//dev-infra:defaults.bzl", "ts_library") ts_library( name = "checkout", srcs = glob(["*.ts"]), - module_name = "@angular/dev-infra-private/pr/checkout", visibility = ["//dev-infra:__subpackages__"], deps = [ "//dev-infra/pr/common", diff --git a/dev-infra/pr/common/BUILD.bazel b/dev-infra/pr/common/BUILD.bazel index 496961b8050..36c43925dff 100644 --- a/dev-infra/pr/common/BUILD.bazel +++ b/dev-infra/pr/common/BUILD.bazel @@ -1,9 +1,8 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_library") +load("//dev-infra:defaults.bzl", "ts_library") ts_library( name = "common", srcs = glob(["*.ts"]), - module_name = "@angular/dev-infra-private/pr/common", visibility = ["//dev-infra:__subpackages__"], deps = [ "//dev-infra/utils", diff --git a/dev-infra/pr/discover-new-conflicts/BUILD.bazel b/dev-infra/pr/discover-new-conflicts/BUILD.bazel index c625ad7aede..3ea331122bf 100644 --- a/dev-infra/pr/discover-new-conflicts/BUILD.bazel +++ b/dev-infra/pr/discover-new-conflicts/BUILD.bazel @@ -1,4 +1,4 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_library") +load("//dev-infra:defaults.bzl", "ts_library") ts_library( name = "discover-new-conflicts", @@ -6,7 +6,6 @@ ts_library( "cli.ts", "index.ts", ], - module_name = "@angular/dev-infra-private/pr/discover-new-conflicts", visibility = ["//dev-infra:__subpackages__"], deps = [ "//dev-infra/utils", diff --git a/dev-infra/pr/merge/BUILD.bazel b/dev-infra/pr/merge/BUILD.bazel index 8a8c21badae..e1d94a8c6a4 100644 --- a/dev-infra/pr/merge/BUILD.bazel +++ b/dev-infra/pr/merge/BUILD.bazel @@ -1,5 +1,4 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_library") -load("//tools:defaults.bzl", "jasmine_node_test") +load("//dev-infra:defaults.bzl", "jasmine_node_test", "ts_library") ts_library( name = "merge", @@ -7,7 +6,7 @@ ts_library( ["**/*.ts"], exclude = ["**/*.spec.ts"], ), - module_name = "@angular/dev-infra-private/pr/merge", + # prodmode target must be set to es5 as the Ora class, which is extended is not a proper # prototyped object. prodmode_target = "es5", diff --git a/dev-infra/pr/rebase/BUILD.bazel b/dev-infra/pr/rebase/BUILD.bazel index 13089d1cbfb..9d1d58a2dba 100644 --- a/dev-infra/pr/rebase/BUILD.bazel +++ b/dev-infra/pr/rebase/BUILD.bazel @@ -1,4 +1,4 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_library") +load("//dev-infra:defaults.bzl", "ts_library") ts_library( name = "rebase", @@ -6,7 +6,6 @@ ts_library( "cli.ts", "index.ts", ], - module_name = "@angular/dev-infra-private/pr/rebase", visibility = ["//dev-infra:__subpackages__"], deps = [ "//dev-infra/commit-message", diff --git a/dev-infra/pullapprove/BUILD.bazel b/dev-infra/pullapprove/BUILD.bazel index 8d452677495..94bda2d5099 100644 --- a/dev-infra/pullapprove/BUILD.bazel +++ b/dev-infra/pullapprove/BUILD.bazel @@ -1,5 +1,4 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_library") -load("//tools:defaults.bzl", "jasmine_node_test") +load("//dev-infra:defaults.bzl", "jasmine_node_test", "ts_library") ts_library( name = "pullapprove", @@ -13,7 +12,6 @@ ts_library( "utils.ts", "verify.ts", ], - module_name = "@angular/dev-infra-private/pullapprove", visibility = ["//dev-infra:__subpackages__"], deps = [ "//dev-infra/utils", diff --git a/dev-infra/release/BUILD.bazel b/dev-infra/release/BUILD.bazel index 9dc9d941b49..0c7b8842563 100644 --- a/dev-infra/release/BUILD.bazel +++ b/dev-infra/release/BUILD.bazel @@ -1,11 +1,10 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_library") +load("//dev-infra:defaults.bzl", "ts_library") ts_library( name = "release", srcs = glob([ "**/*.ts", ]), - module_name = "@angular/dev-infra-private/release", visibility = ["//dev-infra:__subpackages__"], deps = [ "//dev-infra/release/build", diff --git a/dev-infra/release/build/BUILD.bazel b/dev-infra/release/build/BUILD.bazel index 75136639abd..de0198f8b45 100644 --- a/dev-infra/release/build/BUILD.bazel +++ b/dev-infra/release/build/BUILD.bazel @@ -1,5 +1,4 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_library") -load("//tools:defaults.bzl", "jasmine_node_test") +load("//dev-infra:defaults.bzl", "jasmine_node_test", "ts_library") exports_files([ "build-worker.ts", @@ -13,7 +12,6 @@ ts_library( ], exclude = ["*.spec.ts"], ), - module_name = "@angular/dev-infra-private/release/build", visibility = ["//dev-infra:__subpackages__"], deps = [ "//dev-infra/release/config", diff --git a/dev-infra/release/config/BUILD.bazel b/dev-infra/release/config/BUILD.bazel index 186db7f542f..c8170c2acab 100644 --- a/dev-infra/release/config/BUILD.bazel +++ b/dev-infra/release/config/BUILD.bazel @@ -1,11 +1,10 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_library") +load("//dev-infra:defaults.bzl", "ts_library") ts_library( name = "config", srcs = glob([ "**/*.ts", ]), - module_name = "@angular/dev-infra-private/release/config", visibility = ["//dev-infra:__subpackages__"], deps = [ "//dev-infra/utils", diff --git a/dev-infra/release/info/BUILD.bazel b/dev-infra/release/info/BUILD.bazel index 193ef598b72..62b6cdf6fa4 100644 --- a/dev-infra/release/info/BUILD.bazel +++ b/dev-infra/release/info/BUILD.bazel @@ -1,9 +1,8 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_library") +load("//dev-infra:defaults.bzl", "ts_library") ts_library( name = "info", srcs = ["cli.ts"], - module_name = "@angular/dev-infra-private/release/info", visibility = ["//dev-infra:__subpackages__"], deps = [ "//dev-infra/release/config", diff --git a/dev-infra/release/notes/BUILD.bazel b/dev-infra/release/notes/BUILD.bazel index 89bf53e15ea..7fabae8cc6b 100644 --- a/dev-infra/release/notes/BUILD.bazel +++ b/dev-infra/release/notes/BUILD.bazel @@ -1,11 +1,10 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_library") +load("//dev-infra:defaults.bzl", "ts_library") ts_library( name = "notes", srcs = glob([ "**/*.ts", ]), - module_name = "@angular/dev-infra-private/release/notes", visibility = ["//dev-infra:__subpackages__"], deps = [ "//dev-infra/commit-message", diff --git a/dev-infra/release/publish/BUILD.bazel b/dev-infra/release/publish/BUILD.bazel index 8a42cff6846..ec03dfbdf7b 100644 --- a/dev-infra/release/publish/BUILD.bazel +++ b/dev-infra/release/publish/BUILD.bazel @@ -1,11 +1,10 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_library") +load("//dev-infra:defaults.bzl", "ts_library") ts_library( name = "publish", srcs = glob([ "**/*.ts", ]), - module_name = "@angular/dev-infra-private/release/publish", visibility = ["//dev-infra:__subpackages__"], deps = [ "//dev-infra/commit-message", diff --git a/dev-infra/release/publish/test/BUILD.bazel b/dev-infra/release/publish/test/BUILD.bazel index 377a65cc751..b27935084d9 100644 --- a/dev-infra/release/publish/test/BUILD.bazel +++ b/dev-infra/release/publish/test/BUILD.bazel @@ -1,12 +1,10 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_library") -load("//tools:defaults.bzl", "jasmine_node_test") +load("//dev-infra:defaults.bzl", "jasmine_node_test", "ts_library") ts_library( name = "test_lib", srcs = glob([ "**/*.ts", ]), - module_name = "@angular/dev-infra-private/release/test", deps = [ "//dev-infra/commit-message", "//dev-infra/release/config", diff --git a/dev-infra/release/set-dist-tag/BUILD.bazel b/dev-infra/release/set-dist-tag/BUILD.bazel index 24ffebb76d1..3e2f49d3fcf 100644 --- a/dev-infra/release/set-dist-tag/BUILD.bazel +++ b/dev-infra/release/set-dist-tag/BUILD.bazel @@ -1,5 +1,4 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_library") -load("//tools:defaults.bzl", "jasmine_node_test") +load("//dev-infra:defaults.bzl", "jasmine_node_test", "ts_library") ts_library( name = "set-dist-tag", @@ -9,7 +8,6 @@ ts_library( ], exclude = ["*.spec.ts"], ), - module_name = "@angular/dev-infra-private/release/set-dist-tag", visibility = ["//dev-infra:__subpackages__"], deps = [ "//dev-infra/release/config", diff --git a/dev-infra/release/versioning/BUILD.bazel b/dev-infra/release/versioning/BUILD.bazel index 94e6011ade9..7a486a5d8f3 100644 --- a/dev-infra/release/versioning/BUILD.bazel +++ b/dev-infra/release/versioning/BUILD.bazel @@ -1,11 +1,10 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_library") +load("//dev-infra:defaults.bzl", "ts_library") ts_library( name = "versioning", srcs = glob([ "**/*.ts", ]), - module_name = "@angular/dev-infra-private/release/versioning", visibility = ["//dev-infra:__subpackages__"], deps = [ "//dev-infra/release/config", diff --git a/dev-infra/ts-circular-dependencies/BUILD.bazel b/dev-infra/ts-circular-dependencies/BUILD.bazel index ff8b0ae5506..13fbc819e06 100644 --- a/dev-infra/ts-circular-dependencies/BUILD.bazel +++ b/dev-infra/ts-circular-dependencies/BUILD.bazel @@ -1,9 +1,8 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_library") +load("//dev-infra:defaults.bzl", "ts_library") ts_library( name = "ts-circular-dependencies", srcs = glob(["*.ts"]), - module_name = "@angular/dev-infra-private/ts-circular-dependencies", visibility = ["//dev-infra:__subpackages__"], deps = [ "//dev-infra/utils", diff --git a/dev-infra/utils/BUILD.bazel b/dev-infra/utils/BUILD.bazel index d998538530c..09c4f9954bb 100644 --- a/dev-infra/utils/BUILD.bazel +++ b/dev-infra/utils/BUILD.bazel @@ -1,4 +1,4 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_library") +load("//dev-infra:defaults.bzl", "ts_library") ts_library( name = "utils", @@ -6,7 +6,7 @@ ts_library( "*.ts", "git/*.ts", ]), - module_name = "@angular/dev-infra-private/utils", + # prodmode target must be set to es5 as the Octokit class, which is extended is not a proper # prototyped object. prodmode_target = "es5", diff --git a/dev-infra/utils/testing/BUILD.bazel b/dev-infra/utils/testing/BUILD.bazel index 0962e94d695..160d4391971 100644 --- a/dev-infra/utils/testing/BUILD.bazel +++ b/dev-infra/utils/testing/BUILD.bazel @@ -1,9 +1,8 @@ -load("@npm//@bazel/typescript:index.bzl", "ts_library") +load("//dev-infra:defaults.bzl", "ts_library") ts_library( name = "testing", srcs = glob(["*.ts"]), - module_name = "@angular/dev-infra-private/utils/testing", visibility = ["//dev-infra:__subpackages__"], deps = [ "//dev-infra/utils", diff --git a/package.json b/package.json index 2c09dfd6e9e..28ac8efda94 100644 --- a/package.json +++ b/package.json @@ -54,14 +54,14 @@ "@babel/template": "7.8.6", "@babel/traverse": "7.8.6", "@babel/types": "7.8.6", - "@bazel/concatjs": "3.6.0", - "@bazel/jasmine": "3.6.0", - "@bazel/protractor": "3.6.0", - "@bazel/rollup": "3.6.0", - "@bazel/runfiles": "3.6.0", - "@bazel/terser": "3.6.0", - "@bazel/typescript": "3.6.0", - "@microsoft/api-extractor": "7.17.1", + "@bazel/concatjs": "4.0.0-beta.0", + "@bazel/jasmine": "4.0.0-beta.0", + "@bazel/protractor": "4.0.0-beta.0", + "@bazel/rollup": "4.0.0-beta.0", + "@bazel/runfiles": "4.0.0-beta.0", + "@bazel/terser": "4.0.0-beta.0", + "@bazel/typescript": "4.0.0-beta.0", + "@microsoft/api-extractor": "7.18.1", "@octokit/rest": "^18.6.2", "@octokit/core": "^3.5.1", "@octokit/plugin-rest-endpoint-methods": "^5.3.3", diff --git a/packages/bazel/test/ng_package/example_package.golden b/packages/bazel/test/ng_package/example_package.golden index a51b82efbf3..07c3d883065 100644 --- a/packages/bazel/test/ng_package/example_package.golden +++ b/packages/bazel/test/ng_package/example_package.golden @@ -86,7 +86,6 @@ License: MIT */ - export declare class A11yModule { } @@ -601,7 +600,6 @@ export const a = 1; */ - export declare class MyModule { } @@ -805,7 +803,6 @@ export { MyModule }; * License: MIT */ - export declare class MyService { secondService: ɵangular_packages_bazel_test_ng_package_example_imports_imports_a; constructor(secondService: ɵangular_packages_bazel_test_ng_package_example_imports_imports_a); @@ -887,7 +884,6 @@ export * from './imports/imports'; * License: MIT */ - export declare const a = 1; diff --git a/packages/compiler-cli/src/ngtsc/testing/fake_common/BUILD.bazel b/packages/compiler-cli/src/ngtsc/testing/fake_common/BUILD.bazel index a6a4a1bd63f..23b98820f0a 100644 --- a/packages/compiler-cli/src/ngtsc/testing/fake_common/BUILD.bazel +++ b/packages/compiler-cli/src/ngtsc/testing/fake_common/BUILD.bazel @@ -1,7 +1,7 @@ -package(default_visibility = ["//visibility:public"]) - load("//tools:defaults.bzl", "ng_package", "ts_library") +package(default_visibility = ["//visibility:public"]) + ts_library( name = "fake_common", srcs = [ diff --git a/packages/compiler-cli/src/ngtsc/testing/fake_core/BUILD.bazel b/packages/compiler-cli/src/ngtsc/testing/fake_core/BUILD.bazel index 5688e31a4e3..18a4907a680 100644 --- a/packages/compiler-cli/src/ngtsc/testing/fake_core/BUILD.bazel +++ b/packages/compiler-cli/src/ngtsc/testing/fake_core/BUILD.bazel @@ -1,7 +1,7 @@ -package(default_visibility = ["//visibility:public"]) - load("//tools:defaults.bzl", "ng_package", "ts_library") +package(default_visibility = ["//visibility:public"]) + ts_library( name = "fake_core", srcs = [ diff --git a/packages/compiler-cli/test/compliance/partial/partial_compliance_goldens.bzl b/packages/compiler-cli/test/compliance/partial/partial_compliance_goldens.bzl index 8fe2fb41af7..bdbce87d4d2 100644 --- a/packages/compiler-cli/test/compliance/partial/partial_compliance_goldens.bzl +++ b/packages/compiler-cli/test/compliance/partial/partial_compliance_goldens.bzl @@ -49,7 +49,7 @@ def partial_compliance_golden(filePath): stdout = "%s/this_file_should_not_be_committed" % path, link_workspace_root = True, visibility = [":__pkg__"], - data = data, + data = [], ) generated_file_test( diff --git a/packages/localize/src/tools/BUILD.bazel b/packages/localize/src/tools/BUILD.bazel index 19fd9c6e92c..2a2f7ded97f 100644 --- a/packages/localize/src/tools/BUILD.bazel +++ b/packages/localize/src/tools/BUILD.bazel @@ -1,7 +1,7 @@ -package(default_visibility = ["//visibility:public"]) - load("//tools:defaults.bzl", "pkg_npm", "ts_config", "ts_library") +package(default_visibility = ["//visibility:public"]) + ts_config( name = "tsconfig", src = "tsconfig-build.json", diff --git a/tools/defaults.bzl b/tools/defaults.bzl index 6d1afc08f04..96a34a5b27a 100644 --- a/tools/defaults.bzl +++ b/tools/defaults.bzl @@ -95,7 +95,7 @@ def ts_devserver(**kwargs): ts_config = _ts_config -def ts_library(name, tsconfig = None, testonly = False, deps = [], module_name = None, **kwargs): +def ts_library(name, tsconfig = None, testonly = False, deps = [], module_name = None, package_name = None, **kwargs): """Default values for ts_library""" deps = deps + ["@npm//tslib"] if testonly: @@ -109,12 +109,22 @@ def ts_library(name, tsconfig = None, testonly = False, deps = [], module_name = if not module_name: module_name = _default_module_name(testonly) + # If no `package_name` is explicitly set, we use the default module name as package + # name, so that the target can be resolved within NodeJS executions, by activating + # the Bazel NodeJS linker. See: https://github.com/bazelbuild/rules_nodejs/pull/2799. + if not package_name: + package_name = _default_module_name(testonly) + _ts_library( name = name, tsconfig = tsconfig, testonly = testonly, deps = deps, + # `module_name` is used for AMD module names within emitted JavaScript files. module_name = module_name, + # `package_name` can be set to allow for the Bazel NodeJS linker to run. This + # allows for resolution of the given target within the `node_modules/`. + package_name = package_name, **kwargs ) @@ -129,7 +139,7 @@ def ts_library(name, tsconfig = None, testonly = False, deps = [], module_name = output_group = "es5_sources", ) -def ng_module(name, tsconfig = None, entry_point = None, testonly = False, deps = [], module_name = None, bundle_dts = True, **kwargs): +def ng_module(name, tsconfig = None, entry_point = None, testonly = False, deps = [], module_name = None, package_name = None, bundle_dts = True, **kwargs): """Default values for ng_module""" deps = deps + ["@npm//tslib"] if testonly: @@ -142,6 +152,13 @@ def ng_module(name, tsconfig = None, entry_point = None, testonly = False, deps if not module_name: module_name = _default_module_name(testonly) + + # If no `package_name` is explicitly set, we use the default module name as package + # name, so that the target can be resolved within NodeJS executions, by activating + # the Bazel NodeJS linker. See: https://github.com/bazelbuild/rules_nodejs/pull/2799. + if not package_name: + package_name = _default_module_name(testonly) + if not entry_point: entry_point = "public_api.ts" _ng_module( @@ -155,7 +172,11 @@ def ng_module(name, tsconfig = None, entry_point = None, testonly = False, deps compiler = _INTERNAL_NG_MODULE_COMPILER, api_extractor = _INTERNAL_NG_MODULE_API_EXTRACTOR, ng_xi18n = _INTERNAL_NG_MODULE_XI18N, + # `module_name` is used for AMD module names within emitted JavaScript files. module_name = module_name, + # `package_name` can be set to allow for the Bazel NodeJS linker to run. This + # allows for resolution of the given target within the `node_modules/`. + package_name = package_name, perf_flag = "//packages/compiler-cli:ng_perf", **kwargs ) @@ -182,6 +203,21 @@ def ng_package(name, readme_md = None, license_banner = None, deps = [], **kwarg _ng_package( name = name, deps = deps, + # We never set a `package_name` for NPM packages, neither do we enable validation. + # This is necessary because the source targets of the NPM packages all have + # package names set and setting a similar `package_name` on the NPM package would + # result in duplicate linker mappings that will conflict. e.g. consider the following + # scenario: We have a `ts_library` for `@angular/core`. We will configure a package + # name for the target so that it can be resolved in NodeJS executions from `node_modules`. + # If we'd also set a `package_name` for the associated `pkg_npm` target, there would be + # two mappings for `@angular/core` and the linker will complain. For a better development + # experience, we want the mapping to resolve to the direct outputs of the `ts_library` + # instead of requiring tests and other targets to assemble the NPM package first. + # TODO(devversion): consider removing this if `rules_nodejs` allows for duplicate + # linker mappings where transitive-determined mappings are skipped on conflicts. + # https://github.com/bazelbuild/rules_nodejs/issues/2810. + package_name = None, + validate = False, readme_md = readme_md, license_banner = license_banner, substitutions = select({ @@ -234,6 +270,21 @@ def pkg_npm(name, **kwargs): _pkg_npm( name = name, + # We never set a `package_name` for NPM packages, neither do we enable validation. + # This is necessary because the source targets of the NPM packages all have + # package names set and setting a similar `package_name` on the NPM package would + # result in duplicate linker mappings that will conflict. e.g. consider the following + # scenario: We have a `ts_library` for `@angular/core`. We will configure a package + # name for the target so that it can be resolved in NodeJS executions from `node_modules`. + # If we'd also set a `package_name` for the associated `pkg_npm` target, there would be + # two mappings for `@angular/core` and the linker will complain. For a better development + # experience, we want the mapping to resolve to the direct outputs of the `ts_library` + # instead of requiring tests and other targets to assemble the NPM package first. + # TODO(devversion): consider removing this if `rules_nodejs` allows for duplicate + # linker mappings where transitive-determined mappings are skipped on conflicts. + # https://github.com/bazelbuild/rules_nodejs/issues/2810. + package_name = None, + validate = False, substitutions = select({ "//:stamp": stamped_substitutions, "//conditions:default": substitutions, diff --git a/tools/ts-api-guardian/BUILD.bazel b/tools/ts-api-guardian/BUILD.bazel index 5518699aee4..d408c31f5d8 100644 --- a/tools/ts-api-guardian/BUILD.bazel +++ b/tools/ts-api-guardian/BUILD.bazel @@ -31,6 +31,7 @@ genrule( pkg_npm( name = "ts-api-guardian", + package_name = "ts-api-guardian", srcs = [ "BUILD.bazel", "README.md", diff --git a/yarn.lock b/yarn.lock index 7a0df97ef2b..bafca1993d1 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1008,10 +1008,10 @@ resolved "https://registry.yarnpkg.com/@bazel/buildifier/-/buildifier-4.0.1.tgz#52cfbad5cbb86e9183a29dde2370cd465730ea0d" integrity sha512-BTmtvJbeeEVrqRApI1gr5hvPgYcHLpdGJ5EXNXEWO692ztMPSj5fB/dH0xUlaW45jn6LimYx8ymqTMhj3538og== -"@bazel/concatjs@3.6.0": - version "3.6.0" - resolved "https://registry.yarnpkg.com/@bazel/concatjs/-/concatjs-3.6.0.tgz#1cd6f8dd3b2a812c86ca3a79f3ea00ca042c342e" - integrity sha512-DttRkpCXJnJtibZV0vhRSWZKJpwKCK7eL+uohCyPx7Xjxkzr0cSVQMGCisFv+A/PNA+/O0Wl4PZs9j1/Ml+DoQ== +"@bazel/concatjs@4.0.0-beta.0": + version "4.0.0-beta.0" + resolved "https://registry.yarnpkg.com/@bazel/concatjs/-/concatjs-4.0.0-beta.0.tgz#f1dddefe2cefc543ec61f06c5bc28c908bfb4569" + integrity sha512-azGMcLwOIEEbTHm0ORCsSMZ5yBIQaRWlWMN3b7M5uD6C646EaiM7b2wx8CkOJlyZrZOLEajjvePvN7lqkPM1Cg== dependencies: protobufjs "6.8.8" source-map-support "0.5.9" @@ -1022,38 +1022,38 @@ resolved "https://registry.yarnpkg.com/@bazel/ibazel/-/ibazel-0.15.10.tgz#cf0cff1aec6d8e7bb23e1fc618d09fbd39b7a13f" integrity sha512-0v+OwCQ6fsGFa50r6MXWbUkSGuWOoZ22K4pMSdtWiL5LKFIE4kfmMmtQS+M7/ICNwk2EIYob+NRreyi/DGUz5A== -"@bazel/jasmine@3.6.0": - version "3.6.0" - resolved "https://registry.yarnpkg.com/@bazel/jasmine/-/jasmine-3.6.0.tgz#900018a228ec0d5132e341fd170448f8d7a97654" - integrity sha512-YTtpwORXlhn5cAPyRfFfOkBZ8ctE1PFKnQQGix0AUNyMuqUSKIjrXsmEba+iBwPZ8xyB7uQbJV0G4K0nOLu0eg== +"@bazel/jasmine@4.0.0-beta.0": + version "4.0.0-beta.0" + resolved "https://registry.yarnpkg.com/@bazel/jasmine/-/jasmine-4.0.0-beta.0.tgz#575e9cd88932b19c54447fba43cbd62e14ff3022" + integrity sha512-VYEAaHCi8ot0aSMKbIio6usJZqvINd7LzrrGoChGAGwMgGEpTfMGdprwdlrQPKD6/GbLkVtkCcsViG92ynXhdQ== dependencies: c8 "~7.5.0" jasmine-reporters "~2.4.0" -"@bazel/protractor@3.6.0": - version "3.6.0" - resolved "https://registry.yarnpkg.com/@bazel/protractor/-/protractor-3.6.0.tgz#d1b5d5614139bc5b959a728c8fb721655b1c65a9" - integrity sha512-IjnGBBprONEsoG1yw7EnRMn0zYuJ6bbwyMNREXVdJDSR5+o/rQCC6ian5QW0sen8ImnFGPCo/ZzDfV98q1oTqw== +"@bazel/protractor@4.0.0-beta.0": + version "4.0.0-beta.0" + resolved "https://registry.yarnpkg.com/@bazel/protractor/-/protractor-4.0.0-beta.0.tgz#fcabfd5c32005fcb93b80f83bcf99058bcf07d4f" + integrity sha512-cIlqzPEXu3zFhFR+5Vqo5D/qLkOEY/gZ1xc74/V/CVAlbkCZsWJ18gDE1bhca9t1Mj41igDqwlvXUndxdQjNtw== -"@bazel/rollup@3.6.0": - version "3.6.0" - resolved "https://registry.yarnpkg.com/@bazel/rollup/-/rollup-3.6.0.tgz#880fcfa7a7c6031ff6c5da814d35ae48e62df406" - integrity sha512-hl8ZjfSH5/KFR/557OGodNtJDUXz8ymXWxr6aKYZFL4o9pIMTzfGtYBTOF5Jebph9WohJ4f94RyJhVJm4AXTsg== +"@bazel/rollup@4.0.0-beta.0": + version "4.0.0-beta.0" + resolved "https://registry.yarnpkg.com/@bazel/rollup/-/rollup-4.0.0-beta.0.tgz#ec4bc88f401bd555d43c55c34183cda4f004ae96" + integrity sha512-CAl5+iNuVgFA52zOFmoQvY9LpjEf/hPiw/PRPXR0JrXy83xk+Nxnrv7UKvP4Jmux+K24uDf+ZOIr62rGzMHVhA== -"@bazel/runfiles@3.6.0": - version "3.6.0" - resolved "https://registry.yarnpkg.com/@bazel/runfiles/-/runfiles-3.6.0.tgz#154d1d663db3e129de1954d56c1fede5a2ca0e11" - integrity sha512-b0Wq4agrfVY8kmtTHCmUsSTd5/5YurvBjzfJA1AAxO9uL+VzNmDyYaE+K5PDvYkGn/ZskYA4tipmjvDd6E0WbA== +"@bazel/runfiles@4.0.0-beta.0": + version "4.0.0-beta.0" + resolved "https://registry.yarnpkg.com/@bazel/runfiles/-/runfiles-4.0.0-beta.0.tgz#e62679d80cf9fcd84996e5f3ae4bedc33ed1a993" + integrity sha512-pFdanyvI0wf2WtdQXUmcTZw7OJ83uj2bxF3rOskx45wewBRAlQZkm2q2A6WEffSfdf2WaBlk5u/x2kqK2nyG7w== -"@bazel/terser@3.6.0": - version "3.6.0" - resolved "https://registry.yarnpkg.com/@bazel/terser/-/terser-3.6.0.tgz#4420772b6ea8ea93d966460a9a18bbc788618939" - integrity sha512-VOLFtKp1UwtP+mdm9IFSB9sUg74gbea/N70qEQZgTbJXN4lCE08E/dSL4PKwx3nWteNe6Xis7gZHJbzBHniMRg== +"@bazel/terser@4.0.0-beta.0": + version "4.0.0-beta.0" + resolved "https://registry.yarnpkg.com/@bazel/terser/-/terser-4.0.0-beta.0.tgz#2ca1c59e1e109e2f3b0c561b534730a035844a26" + integrity sha512-qGDLsmg2ekEojDHrTEiPJd0bdqbCPT2/YImsZhg1swpLEFnFCLCUNVnESt62Wd6bKonzvQeFo8zpKaCK326e4g== -"@bazel/typescript@3.6.0": - version "3.6.0" - resolved "https://registry.yarnpkg.com/@bazel/typescript/-/typescript-3.6.0.tgz#4dda2e39505cde4a190f51118fbb82ea0e80fde6" - integrity sha512-cO58iHmSxM4mRHJLLbb3FfoJJxv0pMiVGFLORoiUy/EhLtyYGZ1e7ntf4GxEovwK/E4h/awjSUlQkzPThcukTg== +"@bazel/typescript@4.0.0-beta.0": + version "4.0.0-beta.0" + resolved "https://registry.yarnpkg.com/@bazel/typescript/-/typescript-4.0.0-beta.0.tgz#daf2fb0d0bdcd3df331d4320463b1a4beca6031c" + integrity sha512-dfI3QLQ5bLyK3BIrrwxuH9cLbMHuku0UZH7nwjHjXwQX70O0MSGN6yXx2Vrqatj2iw/UfHX/akPuhGlNqrDFRw== dependencies: protobufjs "6.8.8" semver "5.6.0" @@ -1176,10 +1176,10 @@ "@microsoft/tsdoc-config" "~0.15.2" "@rushstack/node-core-library" "3.39.0" -"@microsoft/api-extractor@7.17.1": - version "7.17.1" - resolved "https://registry.yarnpkg.com/@microsoft/api-extractor/-/api-extractor-7.17.1.tgz#df6b7aa7cadcb35e2483048ebe5dbaf7af932446" - integrity sha512-NqdN627QoDdDtvfqEoX+Z6WbF2yid5URUZVYefC9KuisgwrsfvbSj5QwzOZlMYcufoafTq9jfeVyFAXr4PqGig== +"@microsoft/api-extractor@7.18.1": + version "7.18.1" + resolved "https://registry.yarnpkg.com/@microsoft/api-extractor/-/api-extractor-7.18.1.tgz#61b39f972b646261dd49f2de9f5d448aa6497e7a" + integrity sha512-qljUF2Q0zAx1vJrjKkJVGN7OVbsXki+Pji99jywyl6L/FK3YZ7PpstUJYE6uBcLPy6rhNPWPAsHNTMpG/kHIsg== dependencies: "@microsoft/api-extractor-model" "7.13.3" "@microsoft/tsdoc" "0.13.2"