From f8d22a9ba4e426f14f9c7fd608e1ad752cd44eb5 Mon Sep 17 00:00:00 2001 From: Paul Gschwendtner Date: Fri, 27 Dec 2024 14:40:13 +0000 Subject: [PATCH] fix(bazel): allow `ng_package` to work with `rules_js` dependencies (#59316) Currently the module mapping aspect fails when it transitively discovers a node module target managed by `rules_js`. That is because the targets don't have a `deps` attribute as part of their rule definition. PR Close #59316 --- packages/bazel/src/ng_package/ng_package.bzl | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/packages/bazel/src/ng_package/ng_package.bzl b/packages/bazel/src/ng_package/ng_package.bzl index 455f71ad748..0cdabc3c477 100644 --- a/packages/bazel/src/ng_package/ng_package.bzl +++ b/packages/bazel/src/ng_package/ng_package.bzl @@ -37,13 +37,18 @@ _NG_PACKAGE_MODULE_MAPPINGS_ATTR = "ng_package_module_mappings" def _ng_package_module_mappings_aspect_impl(target, ctx): mappings = dict() - for dep in ctx.rule.attr.deps: - if hasattr(dep, _NG_PACKAGE_MODULE_MAPPINGS_ATTR): - for k, v in getattr(dep, _NG_PACKAGE_MODULE_MAPPINGS_ATTR).items(): - if k in mappings and mappings[k] != v: - fail(("duplicate module mapping at %s: %s maps to both %s and %s" % - (target.label, k, mappings[k], v)), "deps") - mappings[k] = v + + # Note: the target might not have `deps`. e.g. + # in `rules_js`, node module targets don't have such attribute. + if hasattr(ctx.rule.attr, "deps"): + for dep in ctx.rule.attr.deps: + if hasattr(dep, _NG_PACKAGE_MODULE_MAPPINGS_ATTR): + for k, v in getattr(dep, _NG_PACKAGE_MODULE_MAPPINGS_ATTR).items(): + if k in mappings and mappings[k] != v: + fail(("duplicate module mapping at %s: %s maps to both %s and %s" % + (target.label, k, mappings[k], v)), "deps") + mappings[k] = v + if ((hasattr(ctx.rule.attr, "module_name") and ctx.rule.attr.module_name) or (hasattr(ctx.rule.attr, "module_root") and ctx.rule.attr.module_root)): mn = ctx.rule.attr.module_name