diff --git a/WORKSPACE b/WORKSPACE index 9754913f609a..beb30ceb35fa 100644 --- a/WORKSPACE +++ b/WORKSPACE @@ -274,3 +274,24 @@ esbuild_register_toolchains( name = "esbuild", esbuild_version = LATEST_ESBUILD_VERSION, ) + +git_repository( + name = "rules_angular", + commit = "bc8e690770319b8780761f797773bfd47f47dfdc", + remote = "https://github.com/devversion/rules_angular.git", +) + +load("@rules_angular//setup:step_1.bzl", "rules_angular_step1") + +rules_angular_step1() + +load("@rules_angular//setup:step_2.bzl", "rules_angular_step2") + +rules_angular_step2() + +load("@rules_angular//setup:step_3.bzl", "rules_angular_step3") + +rules_angular_step3( + angular_compiler_cli = "//:node_modules/@angular/compiler-cli", + typescript = "//:node_modules/typescript", +) diff --git a/goldens/public-api/angular/ssr/node/index.api.md b/goldens/public-api/angular/ssr/node/index.api.md index 89636c08e835..0f30fa7e99c5 100644 --- a/goldens/public-api/angular/ssr/node/index.api.md +++ b/goldens/public-api/angular/ssr/node/index.api.md @@ -5,10 +5,10 @@ ```ts import { ApplicationRef } from '@angular/core'; -import type { Http2ServerRequest } from 'node:http2'; -import type { Http2ServerResponse } from 'node:http2'; -import type { IncomingMessage } from 'node:http'; -import type { ServerResponse } from 'node:http'; +import { Http2ServerRequest } from 'node:http2'; +import { Http2ServerResponse } from 'node:http2'; +import { IncomingMessage } from 'node:http'; +import { ServerResponse } from 'node:http'; import { StaticProvider } from '@angular/core'; import { Type } from '@angular/core'; diff --git a/package.json b/package.json index a021ac154926..b7c366725a4a 100644 --- a/package.json +++ b/package.json @@ -125,6 +125,9 @@ "listr2": "8.3.2", "lodash": "^4.17.21", "npm": "^11.0.0", + "magic-string": "0.30.17", + "rollup-plugin-dts": "6.2.1", + "rollup-plugin-sourcemaps2": "0.5.0", "prettier": "^3.0.0", "protractor": "~7.0.0", "puppeteer": "18.2.1", diff --git a/packages/angular/ssr/BUILD.bazel b/packages/angular/ssr/BUILD.bazel index b479e4c86bc3..0f50ec8b25a6 100644 --- a/packages/angular/ssr/BUILD.bazel +++ b/packages/angular/ssr/BUILD.bazel @@ -1,4 +1,3 @@ -load("@aspect_rules_js//npm:defs.bzl", "npm_package") load("@devinfra//bazel/api-golden:index_rjs.bzl", "api_golden_test_npm_package") load("@npm2//:defs.bzl", "npm_link_all_packages") load("@rules_pkg//:pkg.bzl", "pkg_tar") @@ -40,8 +39,7 @@ ts_project( ) ng_package( - name = "angular_package", - package_name = "@angular/ssr", + name = "npm_package", srcs = [ ":package.json", "//packages/angular/ssr/third_party/beasties:beasties_bundled", @@ -53,10 +51,21 @@ ng_package( ], nested_packages = [ "//packages/angular/ssr/schematics:pkg", + # Included directly as the generated types reference the types file in this location. + "//packages/angular/ssr/third_party/beasties:beasties_dts", ], + package = "@angular/ssr", + rollup_runtime_deps = [ + "//:node_modules/@rollup/plugin-commonjs", + "//:node_modules/@rollup/plugin-node-resolve", + "//:node_modules/magic-string", + "//:node_modules/rollup-plugin-dts", + "//:node_modules/rollup-plugin-sourcemaps2", + ], + tags = ["release-package"], deps = [ - ":ssr_legacy", - "//packages/angular/ssr/node:node_legacy", + ":ssr", + "//packages/angular/ssr/node", ], ) @@ -69,16 +78,6 @@ pkg_tar( tags = ["manual"], ) -# TODO: Replace when `ng_package` creates a valid `rules_js`-compliant npm package. -npm_package( - name = "npm_package", - srcs = [":angular_package"], - replace_prefixes = { - "angular_package/": "", - }, - tags = ["release-package"], -) - alias( name = "pkg", actual = ":npm_package", diff --git a/packages/angular/ssr/schematics/BUILD.bazel b/packages/angular/ssr/schematics/BUILD.bazel index c8a93411b2f7..2b322cdef026 100644 --- a/packages/angular/ssr/schematics/BUILD.bazel +++ b/packages/angular/ssr/schematics/BUILD.bazel @@ -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("@aspect_rules_js//npm:defs.bzl", "npm_package") +load("@aspect_rules_js//js:defs.bzl", "js_library") load("//tools:defaults.bzl", "jasmine_test", "ts_project") load("//tools:ts_json_schema.bzl", "ts_json_schema") @@ -91,8 +91,8 @@ jasmine_test( ], ) -# This package is intended to be combined into the main @angular/ssr package as a dep. -npm_package( +# This target is used as nested_package in the main @angular/ssr package as a dep. +js_library( name = "pkg", srcs = [ "package.json", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 16f5bad192f8..8734460d1955 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -248,6 +248,9 @@ importers: lodash: specifier: ^4.17.21 version: 4.17.21 + magic-string: + specifier: 0.30.17 + version: 0.30.17 npm: specifier: ^11.0.0 version: 11.3.0 @@ -269,6 +272,12 @@ importers: rollup-license-plugin: specifier: ~3.0.1 version: 3.0.2 + rollup-plugin-dts: + specifier: 6.2.1 + version: 6.2.1(rollup@4.40.0)(typescript@5.8.3) + rollup-plugin-sourcemaps2: + specifier: 0.5.0 + version: 0.5.0(@types/node@20.17.30)(rollup@4.40.0) semver: specifier: 7.7.1 version: 7.7.1 @@ -6551,7 +6560,6 @@ packages: engines: {node: '>=0.6.0', teleport: '>=0.2.0'} deprecated: |- You or someone you depend on is using Q, the JavaScript Promise library that gave JavaScript developers strong feelings about promises. They can almost certainly migrate to the native JavaScript promise now. Thank you literally everyone for joining me in this bet against the odds. Be excellent to each other. - (For a CapTP with native promises, see @endo/eventual-send and @endo/captp) qjobs@1.2.0: @@ -6751,6 +6759,16 @@ packages: rollup: ^3.29.4 || ^4 typescript: 5.8.3 + rollup-plugin-sourcemaps2@0.5.0: + resolution: {integrity: sha512-ozRq2fRuJYkA2cRT1CxaWNovtdBbrlXMK/vKIm5Q7rLUHx4jF21jZu1plO+VNOWPDAn+q1CaIAWKQL5QGej6Bw==} + engines: {node: '>=18.0.0'} + peerDependencies: + '@types/node': '>=18.0.0' + rollup: '>=4' + peerDependenciesMeta: + '@types/node': + optional: true + rollup@4.40.0: resolution: {integrity: sha512-Noe455xmA96nnqH5piFtLobsGbCij7Tu+tb3c1vYjNbTkfzGqXqQXG3wJaYXkRZuQ0vEYN4bhwg7QnIrqB5B+w==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} @@ -14652,6 +14670,13 @@ snapshots: optionalDependencies: '@babel/code-frame': 7.26.2 + rollup-plugin-sourcemaps2@0.5.0(@types/node@20.17.30)(rollup@4.40.0): + dependencies: + '@rollup/pluginutils': 5.1.4(rollup@4.40.0) + rollup: 4.40.0 + optionalDependencies: + '@types/node': 20.17.30 + rollup@4.40.0: dependencies: '@types/estree': 1.0.7 diff --git a/tools/bazel/npm_package.bzl b/tools/bazel/npm_package.bzl index fc912f3d125d..0a76bfe1bb73 100644 --- a/tools/bazel/npm_package.bzl +++ b/tools/bazel/npm_package.bzl @@ -63,8 +63,8 @@ def npm_package( out = "substituted_with_snapshot_repos/package.json", ) - nostamp_subs = dict(substitutions["rjs"]["nostamp"], **extra_substitutions) - stamp_subs = dict(substitutions["rjs"]["stamp"], **extra_substitutions) + nostamp_subs = dict(substitutions["nostamp"], **extra_substitutions) + stamp_subs = dict(substitutions["stamp"], **extra_substitutions) expand_template( name = "final_package_json", diff --git a/tools/defaults.bzl b/tools/defaults.bzl index 31af54a7644a..ecd71071d42b 100644 --- a/tools/defaults.bzl +++ b/tools/defaults.bzl @@ -1,7 +1,7 @@ load("@aspect_bazel_lib//lib:copy_to_bin.bzl", _copy_to_bin = "copy_to_bin") load("@aspect_rules_jasmine//jasmine:defs.bzl", _jasmine_test = "jasmine_test") load("@aspect_rules_js//js:defs.bzl", _js_binary = "js_binary") -load("@npm//@angular/bazel:index.bzl", _ng_package = "ng_package") +load("@rules_angular//src/ng_package:index.bzl", _ng_package = "ng_package") load("//tools:interop.bzl", _ts_project = "ts_project") load("//tools:substitutions.bzl", "substitutions") load("//tools/bazel:npm_package.bzl", _npm_package = "npm_package") @@ -23,8 +23,8 @@ def ng_package(deps = [], **kwargs): deps = deps, license = "//:LICENSE", substitutions = select({ - "//:stamp": substitutions["legacy"]["stamp"], - "//conditions:default": substitutions["legacy"]["nostamp"], + "//:stamp": substitutions["stamp"], + "//conditions:default": substitutions["nostamp"], }), **kwargs ) diff --git a/tools/substitutions.bzl b/tools/substitutions.bzl index ab0dfb46e0a9..098b511b1d6e 100644 --- a/tools/substitutions.bzl +++ b/tools/substitutions.bzl @@ -2,8 +2,8 @@ load("//:constants.bzl", "ANGULAR_FW_PEER_DEP", "ANGULAR_FW_VERSION", "NG_PACKAG _stamp_substitutions = { # Version of the local package being built, generated via the `--workspace_status_command` flag. - "0.0.0-PLACEHOLDER": "{STABLE_PROJECT_VERSION}", - "0.0.0-EXPERIMENTAL-PLACEHOLDER": "{STABLE_PROJECT_EXPERIMENTAL_VERSION}", + "0.0.0-PLACEHOLDER": "{{STABLE_PROJECT_VERSION}}", + "0.0.0-EXPERIMENTAL-PLACEHOLDER": "{{STABLE_PROJECT_EXPERIMENTAL_VERSION}}", # --- "BUILD_SCM_HASH-PLACEHOLDER": "{BUILD_SCM_ABBREV_HASH}", "0.0.0-ENGINES-NODE": RELEASE_ENGINES_NODE, @@ -22,21 +22,7 @@ _no_stamp_substitutions = dict(_stamp_substitutions, **{ "0.0.0-EXPERIMENTAL-PLACEHOLDER": "0.0.0", }) -def _adjust_substitutions_for_rules_js(subs): - result = {} - for key, value in subs.items(): - # in `rules_js`, or `expand_template` from `bazel-lib`, stamp variables - # can only be retrieved via `{{X}}` syntax. - result[key] = value.replace("{", "{{").replace("}", "}}") - return result - substitutions = { - "legacy": { - "stamp": _stamp_substitutions, - "nostamp": _no_stamp_substitutions, - }, - "rjs": { - "stamp": _adjust_substitutions_for_rules_js(_stamp_substitutions), - "nostamp": _adjust_substitutions_for_rules_js(_no_stamp_substitutions), - }, + "stamp": _stamp_substitutions, + "nostamp": _no_stamp_substitutions, }