build: consolidate domino bundling in platform-server

Move the domino bundling logic and related shims into a centralized third_party directory within packages/platform-server. This avoids duplication of the bundling logic and ensures consistent shimming across the platform-server package and its entry points.

Following a conversation with OSS licensing, this change also includes the domino LICENSE file in the generated npm package to comply with licensing requirements for bundled third-party code.

```
├── fesm2022
│   ├── init.mjs
│   ├── init.mjs.map
│   ├── platform-server.mjs
│   ├── platform-server.mjs.map
│   ├── _server-chunk.mjs
│   ├── _server-chunk.mjs.map
│   ├── testing.mjs
│   └── testing.mjs.map
├── LICENSE
├── package.json
├── README.md
├── third_party
│   └── domino
│       ├── bundled-domino.d.ts
│       ├── bundled-domino.mjs
│       ├── bundled-domino.mjs.map
│       └── LICENSE
└── types
    ├── init.d.ts
    ├── platform-server.d.ts
    └── testing.d.ts
```
This commit is contained in:
Alan Agius
2026-03-25 10:44:00 +00:00
committed by Leon Senft
parent eecfa4c909
commit b40d11eec4
17 changed files with 84 additions and 89 deletions
-1
View File
@@ -61,7 +61,6 @@ ts_project(
"//packages/common",
"//packages/compiler",
"//packages/platform-server",
"//packages/platform-server:bundled_domino_lib",
],
)
+10 -32
View File
@@ -1,5 +1,3 @@
load("@aspect_rules_js//js:defs.bzl", "js_library")
load("@npm//:rollup/package_json.bzl", rollup = "bin")
load("//tools:defaults.bzl", "api_golden_test_npm_package", "generate_api_docs", "ng_package", "ng_project", "tsec_test")
package(default_visibility = ["//visibility:public"])
@@ -11,10 +9,8 @@ ng_project(
"*.ts",
"src/**/*.ts",
],
exclude = ["src/bundled-domino.d.ts"],
),
deps = [
":bundled_domino_lib",
"//:node_modules/@types/node",
"//:node_modules/rxjs",
"//:node_modules/xhr2",
@@ -22,34 +18,7 @@ ng_project(
"//packages/common/http",
"//packages/core",
"//packages/platform-browser",
],
)
rollup.rollup(
name = "bundled_domino",
srcs = [
"//:node_modules/@rollup/plugin-commonjs",
"//:node_modules/domino",
],
outs = [
"src/bundled-domino.mjs",
],
args = [
"--format=esm",
"--plugin=@rollup/plugin-commonjs",
"--input=node_modules/domino/lib/index.js",
"--sourcemap=false",
"--file=packages/platform-server/src/bundled-domino.mjs",
],
progress_message = "Bundling domino",
silent_on_success = True,
)
js_library(
name = "bundled_domino_lib",
srcs = [
"src/bundled-domino.d.ts",
":bundled_domino",
"//packages/platform-server/third_party/domino:bundled_domino_lib",
],
)
@@ -65,11 +34,20 @@ ng_package(
],
externals = [
"xhr2",
"../../third_party/domino/bundled-domino",
"../third_party/domino/bundled-domino",
],
nested_packages = [
"//packages/platform-server/third_party/domino:bundled_domino_lib",
],
package = "@angular/platform-server",
side_effect_entry_points = [
"@angular/platform-server/init",
],
substitutions = {
# Needed for the FESM files.
"\\./(.+)/third_party/domino/bundled-domino": "../third_party/domino/bundled-domino.mjs",
},
tags = [
"release-with-framework",
],
+1 -31
View File
@@ -1,5 +1,3 @@
load("@aspect_rules_js//js:defs.bzl", "js_library")
load("@npm//:rollup/package_json.bzl", rollup = "bin")
load("//tools:defaults.bzl", "ng_project", "tsec_test")
package(default_visibility = ["//visibility:public"])
@@ -14,35 +12,7 @@ ng_project(
exclude = ["src/bundled-domino.d.ts"],
),
deps = [
":bundled_domino_lib",
],
)
rollup.rollup(
name = "bundled_domino",
srcs = [
"//:node_modules/@rollup/plugin-commonjs",
"//:node_modules/domino",
],
outs = [
"src/bundled-domino.mjs",
],
args = [
"--format=esm",
"--plugin=@rollup/plugin-commonjs",
"--input=node_modules/domino/lib/index.js",
"--sourcemap=false",
"--file=packages/platform-server/init/src/bundled-domino.mjs",
],
progress_message = "Bundling domino",
silent_on_success = True,
)
js_library(
name = "bundled_domino_lib",
srcs = [
"src/bundled-domino.d.ts",
":bundled_domino",
"//packages/platform-server/third_party/domino:bundled_domino_lib",
],
)
+1 -1
View File
@@ -6,7 +6,7 @@
* found in the LICENSE file at https://angular.dev/license
*/
import domino from './bundled-domino';
import domino from '../../third_party/domino/bundled-domino';
/**
* Apply the necessary shims to make DOM globals (such as `Element`, `HTMLElement`, etc.) available
@@ -6,7 +6,7 @@ ts_project(
srcs = glob(["**/*.ts"]),
deps = [
"//packages/platform-server/init",
"//packages/platform-server/init:bundled_domino_lib",
"//packages/platform-server/third_party/domino:bundled_domino_lib",
],
)
@@ -5,7 +5,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
*/
import domino from '../src/bundled-domino';
import domino from '../../third_party/domino/bundled-domino';
import {applyShims} from '../src/shims';
describe('applyShims()', () => {
-11
View File
@@ -1,11 +0,0 @@
/**
* @license
* Copyright Google LLC All Rights Reserved.
*
* 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
*/
import domino from 'domino';
export default domino;
@@ -9,7 +9,7 @@
import {ɵsetRootDomAdapter as setRootDomAdapter} from '@angular/common';
import {ɵBrowserDomAdapter as BrowserDomAdapter} from '@angular/platform-browser';
import domino from './bundled-domino';
import domino from '../third_party/domino/bundled-domino';
export function setDomTypes() {
// Make all Domino types available in the global env.
+1 -1
View File
@@ -43,7 +43,7 @@ ts_project(
"//packages/platform-browser",
"//packages/platform-browser/animations",
"//packages/platform-server",
"//packages/platform-server:bundled_domino_lib",
"//packages/platform-server/third_party/domino:bundled_domino_lib",
"//packages/private/testing",
"//packages/router",
],
@@ -20,7 +20,7 @@ import {
import {BrowserModule, withEventReplay, withIncrementalHydration} from '@angular/platform-browser';
import {renderModule, ServerModule} from '../index';
import {getHydrationInfoFromTransferState, ssr} from './hydration_utils';
import domino from '../src/bundled-domino';
import domino from '../third_party/domino/bundled-domino';
describe('transfer_state', () => {
const defaultExpectedOutput =
+53
View File
@@ -0,0 +1,53 @@
load("@aspect_rules_js//js:defs.bzl", "js_library")
load("@npm//:rollup/package_json.bzl", rollup = "bin")
package(default_visibility = ["//visibility:private"])
rollup.rollup(
name = "bundled_domino",
srcs = [
"//:node_modules/@rollup/plugin-commonjs",
"//:node_modules/domino",
],
outs = [
"bundled-domino.mjs",
"bundled-domino.mjs.map",
],
args = [
"--format=esm",
"--plugin=@rollup/plugin-commonjs",
"--input=node_modules/domino/lib/index.js",
"--sourcemap=true",
"--file=packages/platform-server/third_party/domino/bundled-domino.mjs",
],
progress_message = "Bundling domino",
silent_on_success = True,
)
genrule(
name = "bundled_domino_license",
srcs = [
"//:node_modules/domino/dir",
],
outs = ["LICENSE"],
cmd = """
cp "$(location //:node_modules/domino/dir)/LICENSE" $@
""",
)
js_library(
name = "bundled_domino_lib",
srcs = [
"bundled-domino.d.ts",
":bundled_domino",
":bundled_domino_license",
],
visibility = [
"//packages/platform-server:__subpackages__",
"//packages/private/testing:__pkg__",
"//tools/testing:__pkg__",
],
deps = [
"//:node_modules/domino",
],
)
@@ -6,6 +6,11 @@
* found in the LICENSE file at https://angular.dev/license
*/
declare module 'domino' {
export const impl: any;
}
import domino from 'domino';
export default domino;
+1 -1
View File
@@ -18,6 +18,6 @@ ng_project(
"//packages/core",
"//packages/core/testing",
"//packages/platform-browser",
"//packages/platform-server:bundled_domino_lib",
"//packages/platform-server/third_party/domino:bundled_domino_lib",
],
)
+4 -3
View File
@@ -95,19 +95,20 @@ let savedRequestAnimationFrame: ((callback: FrameRequestCallback) => number) | u
let savedNode: typeof Node | undefined = undefined;
let requestAnimationFrameCount = 0;
let domino:
| (typeof import('../../../platform-server/src/bundled-domino'))['default']
| (typeof import('../../../platform-server/third_party/domino/bundled-domino'))['default']
| null
| undefined = undefined;
async function loadDominoOrNull(): Promise<
(typeof import('../../../platform-server/src/bundled-domino'))['default'] | null
(typeof import('../../../platform-server/third_party/domino/bundled-domino'))['default'] | null
> {
if (domino !== undefined) {
return domino;
}
try {
return (domino = (await import('../../../platform-server/src/bundled-domino')).default);
return (domino = (await import('../../../platform-server/third_party/domino/bundled-domino'))
.default);
} catch {
return (domino = null);
}
+2 -2
View File
@@ -50,8 +50,8 @@ ts_project(
"//packages/core",
"//packages/core/testing",
"//packages/platform-server",
"//packages/platform-server:bundled_domino_lib",
"//packages/platform-server/testing",
"//packages/platform-server/third_party/domino:bundled_domino_lib",
],
)
@@ -66,8 +66,8 @@ ts_project(
"//packages/compiler",
"//packages/core/testing",
"//packages/platform-server",
"//packages/platform-server:bundled_domino_lib",
"//packages/platform-server/testing",
"//packages/platform-server/third_party/domino:bundled_domino_lib",
],
)
+1 -1
View File
@@ -19,7 +19,7 @@ import {NgModule, provideZonelessChangeDetection} from '@angular/core';
import {TestBed} from '@angular/core/testing';
import {ServerTestingModule, platformServerTesting} from '@angular/platform-server/testing';
import {ɵDominoAdapter as DominoAdapter} from '@angular/platform-server';
import domino from '../../packages/platform-server/src/bundled-domino';
import domino from '../../packages/platform-server/third_party/domino/bundled-domino';
@NgModule({
providers: [provideZonelessChangeDetection()],
+1 -1
View File
@@ -16,7 +16,7 @@ import {TestBed} from '@angular/core/testing';
import {NgModule, provideZonelessChangeDetection} from '@angular/core';
import {ServerTestingModule, platformServerTesting} from '@angular/platform-server/testing';
import {ɵDominoAdapter as DominoAdapter} from '@angular/platform-server';
import domino from '../../packages/platform-server/src/bundled-domino';
import domino from '../../packages/platform-server/third_party/domino/bundled-domino';
@NgModule({
providers: [provideZonelessChangeDetection()],