Skip to content

Commit 26ca25e

Browse files
committed
build: add ng_package interop for rules_js pnpm linking
In order to be able to pnpm-link first-party packages that are using `ng_package`, we technically already need our new `ng_package` rule. That rule is still WIP, so this interop layer allows for the same with the old `ng_package` rule
1 parent 38b91e7 commit 26ca25e

File tree

11 files changed

+56
-1
lines changed

11 files changed

+56
-1
lines changed

src/cdk-experimental/BUILD.bazel

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ ts_project(
1616

1717
ng_package(
1818
name = "npm_package",
19+
package_name = "@angular/cdk-experimental",
1920
srcs = ["package.json"],
2021
tags = ["release-package"],
2122
deps = [get_legacy_label(t) for t in CDK_EXPERIMENTAL_TARGETS],

src/cdk/BUILD.bazel

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ sass_library(
5151
# Creates the @angular/cdk package published to npm.
5252
ng_package(
5353
name = "npm_package",
54+
package_name = "@angular/cdk",
5455
srcs = [
5556
"package.json",
5657
":sass_lib",

src/google-maps/BUILD.bazel

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ ng_project(
3535
# Creates the @angular/google-maps package published to npm
3636
ng_package(
3737
name = "npm_package",
38+
package_name = "@angular/google-maps",
3839
srcs = ["package.json"],
3940
nested_packages = ["//src/google-maps/schematics:npm_package"],
4041
tags = ["release-package"],

src/material-date-fns-adapter/BUILD.bazel

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ ng_web_test_suite(
4141

4242
ng_package(
4343
name = "npm_package",
44+
package_name = "@angular/material-date-fns-adapter",
4445
srcs = ["package.json"],
4546
nested_packages = ["//src/material-date-fns-adapter/schematics:npm_package"],
4647
tags = ["release-package"],

src/material-experimental/BUILD.bazel

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ sass_library(
3434

3535
ng_package(
3636
name = "npm_package",
37+
package_name = "@angular/material-experimental",
3738
srcs = [
3839
"package.json",
3940
":sass_lib",

src/material-luxon-adapter/BUILD.bazel

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ ng_web_test_suite(
4343

4444
ng_package(
4545
name = "npm_package",
46+
package_name = "@angular/material-luxon-adapter",
4647
srcs = ["package.json"],
4748
nested_packages = ["//src/material-luxon-adapter/schematics:npm_package"],
4849
tags = ["release-package"],

src/material-moment-adapter/BUILD.bazel

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ ng_web_test_suite(
4242

4343
ng_package(
4444
name = "npm_package",
45+
package_name = "@angular/material-moment-adapter",
4546
srcs = ["package.json"],
4647
nested_packages = ["//src/material-moment-adapter/schematics:npm_package"],
4748
tags = ["release-package"],

src/material/BUILD.bazel

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ sass_library(
4040
# Creates the @angular/material package published to npm.
4141
ng_package(
4242
name = "npm_package",
43+
package_name = "@angular/material",
4344
srcs = [
4445
"package.json",
4546
":sass_lib",

src/youtube-player/BUILD.bazel

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ sass_binary(
5454

5555
ng_package(
5656
name = "npm_package",
57+
package_name = "@angular/youtube-player",
5758
srcs = ["package.json"],
5859
nested_packages = ["//src/youtube-player/schematics:npm_package"],
5960
tags = ["release-package"],

tools/bazel/ng_package_interop.bzl

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
load("@aspect_rules_js//npm:providers.bzl", "NpmPackageInfo")
2+
load("@aspect_rules_js//js:libs.bzl", "js_lib_helpers")
3+
4+
def _ng_package_interop_impl(ctx):
5+
# forward all npm_package_store_infos
6+
npm_package_store_infos = js_lib_helpers.gather_npm_package_store_infos(
7+
targets = ctx.attr.interop_deps,
8+
)
9+
10+
return [
11+
NpmPackageInfo(
12+
package = ctx.attr.package_name,
13+
version = "0.0.0",
14+
src = ctx.files.src[0],
15+
npm_package_store_infos = npm_package_store_infos,
16+
),
17+
]
18+
19+
ng_package_interop = rule(
20+
implementation = _ng_package_interop_impl,
21+
doc = """
22+
Rule that makes `ng_package` rule output usable with `rules_js`. E.g.
23+
for pnpm workspace linking of such first-party packages.
24+
""",
25+
attrs = {
26+
"package_name": attr.string(mandatory = True),
27+
"src": attr.label(mandatory = True),
28+
"interop_deps": attr.label_list(mandatory = True),
29+
},
30+
)

tools/defaults.bzl

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ load("//tools/markdown-to-html:index.bzl", _markdown_to_html = "markdown_to_html
1818
load("//tools/extract-tokens:index.bzl", _extract_tokens = "extract_tokens")
1919
load("//tools/angular:index.bzl", "LINKER_PROCESSED_FW_PACKAGES")
2020
load("//tools/bazel:legacy_target.bzl", "get_legacy_label")
21+
load("//tools/bazel:ng_package_interop.bzl", "ng_package_interop")
2122

2223
npmPackageSubstitutions = select({
2324
"//tools:stamp": NPM_PACKAGE_SUBSTITUTIONS,
@@ -46,7 +47,15 @@ def sass_library(**kwargs):
4647
def npm_sass_library(**kwargs):
4748
_npm_sass_library(**kwargs)
4849

49-
def ng_package(name, srcs = [], deps = [], externals = PKG_EXTERNALS, readme_md = None, visibility = None, **kwargs):
50+
def ng_package(
51+
name,
52+
package_name,
53+
srcs = [],
54+
deps = [],
55+
externals = PKG_EXTERNALS,
56+
readme_md = None,
57+
visibility = None,
58+
**kwargs):
5059
# If no readme file has been specified explicitly, use the default readme for
5160
# release packages from "src/README.md".
5261
if not readme_md:
@@ -95,6 +104,13 @@ def ng_package(name, srcs = [], deps = [], externals = PKG_EXTERNALS, readme_md
95104
visibility = visibility,
96105
)
97106

107+
ng_package_interop(
108+
name = "pkg",
109+
src = ":%s" % name,
110+
interop_deps = [d.replace("_legacy", "") for d in deps],
111+
package_name = package_name,
112+
)
113+
98114
def pkg_npm(name, visibility = None, **kwargs):
99115
_pkg_npm(
100116
name = name,

0 commit comments

Comments
 (0)