diff --git a/WORKSPACE b/WORKSPACE index ae3c80b53c7c..429e255ad806 100644 --- a/WORKSPACE +++ b/WORKSPACE @@ -288,3 +288,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 0bbeb8ae145a..e406fb592349 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 fda39dc6b2e9..29ab6bbdaf3c 100644 --- a/package.json +++ b/package.json @@ -179,7 +179,9 @@ "resolve-url-loader": "5.0.0", "rollup": "4.34.8", "rollup-license-plugin": "~3.0.1", + "rollup-plugin-dts": "6.2.1", "rollup-plugin-sourcemaps": "^0.6.0", + "rollup-plugin-sourcemaps2": "0.5.0", "rxjs": "7.8.1", "sass": "1.85.0", "sass-loader": "16.0.5", diff --git a/packages/angular/ssr/BUILD.bazel b/packages/angular/ssr/BUILD.bazel index fbe46237d063..5daa61839675 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 67164e942e43..e64c760942d4 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:defaults2.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 560ea33937e4..3d41c277c814 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -413,9 +413,15 @@ 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.34.8)(typescript@5.8.1-rc) rollup-plugin-sourcemaps: specifier: ^0.6.0 version: 0.6.3(@types/node@18.19.76)(rollup@4.34.8) + rollup-plugin-sourcemaps2: + specifier: 0.5.0 + version: 0.5.0(@types/node@18.19.76)(rollup@4.34.8) rxjs: specifier: 7.8.1 version: 7.8.1 @@ -7139,6 +7145,23 @@ packages: resolution: {integrity: sha512-68LWDlUKxqLO4Si3Extca4X7P99tU7s0KLnVUzN6h6SDihGAWYMQ0q73XLnHbUmG0IFgvC0AzuYvbogceQ9Hcw==} engines: {node: '>=18.0.0'} + rollup-plugin-dts@6.2.1: + resolution: {integrity: sha512-sR3CxYUl7i2CHa0O7bA45mCrgADyAQ0tVtGSqi3yvH28M+eg1+g5d7kQ9hLvEz5dorK3XVsH5L2jwHLQf72DzA==} + engines: {node: '>=16'} + peerDependencies: + rollup: ^3.29.4 || ^4 + typescript: 5.8.1-rc + + 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-plugin-sourcemaps@0.6.3: resolution: {integrity: sha512-paFu+nT1xvuO1tPFYXGe+XnQvg4Hjqv/eIhG8i5EspfYYPBKL57X7iVbfv55aNVASg3dzWvES9dmWsL2KhfByw==} engines: {node: '>=10.0.0'} @@ -15572,6 +15595,21 @@ snapshots: node-fetch: 3.3.2 spdx-expression-validate: 2.0.0 + rollup-plugin-dts@6.2.1(rollup@4.34.8)(typescript@5.8.1-rc): + dependencies: + magic-string: 0.30.17 + rollup: 4.34.8 + typescript: 5.8.1-rc + optionalDependencies: + '@babel/code-frame': 7.26.2 + + rollup-plugin-sourcemaps2@0.5.0(@types/node@18.19.76)(rollup@4.34.8): + dependencies: + '@rollup/pluginutils': 5.1.4(rollup@4.34.8) + rollup: 4.34.8 + optionalDependencies: + '@types/node': 18.19.76 + rollup-plugin-sourcemaps@0.6.3(@types/node@18.19.76)(rollup@4.34.8): dependencies: '@rollup/pluginutils': 3.1.0(rollup@4.34.8) 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/defaults2.bzl b/tools/defaults2.bzl index 31af54a7644a..ecd71071d42b 100644 --- a/tools/defaults2.bzl +++ b/tools/defaults2.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, }