diff --git a/tools/defaults.bzl b/tools/defaults.bzl index c5577c24927..b0549c382a5 100644 --- a/tools/defaults.bzl +++ b/tools/defaults.bzl @@ -12,7 +12,6 @@ load("@npm//typescript:index.bzl", "tsc") load("//packages/bazel:index.bzl", _ng_module = "ng_module", _ng_package = "ng_package") load("@npm//@angular/dev-infra-private/bazel/benchmark/ng_rollup_bundle:ng_rollup_bundle.bzl", _ng_rollup_bundle = "ng_rollup_bundle") load("//tools:ng_benchmark.bzl", _ng_benchmark = "ng_benchmark") -load("//tools:tsec.bzl", _get_forwarded_target_name = "get_forwarded_target_name", _ts_library_forwarded = "ts_library_forwarded") load("@npm//@angular/dev-infra-private/bazel/api-golden:index.bzl", _api_golden_test = "api_golden_test", _api_golden_test_npm_package = "api_golden_test_npm_package") load("@npm//@angular/dev-infra-private/bazel:extract_js_module_output.bzl", "extract_js_module_output") @@ -129,16 +128,6 @@ def ts_library(name, tsconfig = None, testonly = False, deps = [], module_name = **kwargs ) - # Forward `srcs` and `deps` to an implicitly create rule so that - # `tsec_test` can get those arguments from its `target` argument. - _ts_library_forwarded( - name = _get_forwarded_target_name(name), - testonly = True, - srcs = kwargs.get("srcs", []), - deps = deps, - tags = ["tsec"], - ) - # Select the es5 .js output of the ts_library for use in downstream boostrap targets # with `output_group = "es5_sources"`. This exposes an internal detail of ts_library # that is not ideal. @@ -192,16 +181,6 @@ def ng_module(name, tsconfig = None, entry_point = None, testonly = False, deps **kwargs ) - # Forward `srcs` and `deps` to an implicitly create rule so that - # `tsec_test` can get those arguments from its `target` argument. - _ts_library_forwarded( - name = _get_forwarded_target_name(name), - testonly = True, - srcs = kwargs.get("srcs", []), - deps = deps, - tags = ["tsec"], - ) - def ng_package(name, readme_md = None, license_banner = None, deps = [], **kwargs): """Default values for ng_package""" if not readme_md: diff --git a/tools/tsec.bzl b/tools/tsec.bzl index fb72ed1275c..a4c36212e0c 100644 --- a/tools/tsec.bzl +++ b/tools/tsec.bzl @@ -60,24 +60,14 @@ tsec_config = rule( TsLibInfo = provider(fields = ["srcs", "deps"]) -def _ts_library_forwarded_impl(ctx): +def _capture_tsec_deps_aspect_impl(target, ctx): """Forward `srcs` and `deps` of `ts_library` and `ng_module` macros to `_tsec_test`.""" - return [TsLibInfo(srcs = ctx.attr.srcs, deps = ctx.attr.deps)] + return [TsLibInfo(srcs = ctx.rule.attr.srcs, deps = ctx.rule.attr.deps)] -ts_library_forwarded = rule( - implementation = _ts_library_forwarded_impl, - attrs = { - "srcs": attr.label_list(allow_files = [".ts", ".tsx"]), - "deps": attr.label_list(), - }, - doc = """A rule-in-the-middle to forward `srcs` and `deps` to _src_and_deps, to avoid repeating these arguments in tsec_test. - -Should only be used by the `ts_library` and `ng_module` macros in tools/default.bzel.""", +_capture_tsec_deps_aspect = aspect( + implementation = _capture_tsec_deps_aspect_impl, ) -def get_forwarded_target_name(name): - return "%s_forwarded" % name - def _all_transitive_deps_impl(ctx): files = [] @@ -90,10 +80,10 @@ def _all_transitive_deps_impl(ctx): files.append(tsec_tsconfig_info.exemption) files.extend(tsec_tsconfig_info.deps) - if TsLibInfo not in ctx.attr.forwarded_ts_target: - fail("`target` must be a ts_library_forwarded target") + if TsLibInfo not in ctx.attr.ts_target: + fail("`target` must be a ts_library or ng_module target") - ts_target_info = ctx.attr.forwarded_ts_target[TsLibInfo] + ts_target_info = ctx.attr.ts_target[TsLibInfo] for s in ts_target_info.srcs: if hasattr(s, "files"): files.extend(s.files.to_list()) @@ -110,7 +100,7 @@ _all_transitive_deps = rule( implementation = _all_transitive_deps_impl, attrs = { "tsconfig": attr.label(), - "forwarded_ts_target": attr.label(), + "ts_target": attr.label(aspects = [_capture_tsec_deps_aspect]), }, doc = """Expand all transitive dependencies needed to run `_tsec_test`.""", ) @@ -131,7 +121,7 @@ def tsec_test(name, target, tsconfig): name = all_transitive_deps_name, testonly = True, tsconfig = tsconfig, - forwarded_ts_target = get_forwarded_target_name(target), + ts_target = target, tags = ["tsec"], )