@angular/build 19.0.0-next.8 → 19.0.0-rc.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +5 -5
- package/package.json +22 -19
- package/src/builders/application/build-action.js +9 -9
- package/src/builders/application/chunk-optimizer.js +1 -4
- package/src/builders/application/execute-build.js +34 -6
- package/src/builders/application/execute-post-bundle.js +9 -1
- package/src/builders/application/index.d.ts +0 -16
- package/src/builders/application/index.js +15 -10
- package/src/builders/application/options.d.ts +11 -1
- package/src/builders/application/options.js +17 -10
- package/src/builders/application/results.d.ts +5 -3
- package/src/builders/application/schema.d.ts +86 -0
- package/src/builders/application/schema.js +19 -1
- package/src/builders/application/schema.json +73 -4
- package/src/builders/application/setup-bundling.d.ts +3 -1
- package/src/builders/application/setup-bundling.js +33 -6
- package/src/builders/dev-server/vite-server.d.ts +2 -2
- package/src/builders/dev-server/vite-server.js +46 -16
- package/src/index.d.ts +1 -0
- package/src/tools/angular/angular-host.d.ts +1 -1
- package/src/tools/angular/angular-host.js +1 -4
- package/src/tools/angular/compilation/angular-compilation.d.ts +1 -0
- package/src/tools/angular/compilation/aot-compilation.d.ts +1 -0
- package/src/tools/angular/compilation/aot-compilation.js +39 -0
- package/src/tools/angular/compilation/parallel-compilation.js +2 -2
- package/src/tools/angular/compilation/parallel-worker.d.ts +1 -0
- package/src/tools/angular/compilation/parallel-worker.js +5 -2
- package/src/tools/babel/plugins/add-code-coverage.d.ts +14 -0
- package/src/tools/babel/plugins/add-code-coverage.js +44 -0
- package/src/tools/babel/plugins/types.d.ts +20 -0
- package/src/tools/esbuild/angular/compiler-plugin.d.ts +3 -4
- package/src/tools/esbuild/angular/compiler-plugin.js +55 -34
- package/src/tools/esbuild/angular/component-stylesheets.d.ts +17 -18
- package/src/tools/esbuild/angular/component-stylesheets.js +63 -38
- package/src/tools/esbuild/angular/jit-plugin-callbacks.d.ts +1 -1
- package/src/tools/esbuild/angular/jit-plugin-callbacks.js +11 -3
- package/src/tools/esbuild/application-code-bundle.d.ts +5 -4
- package/src/tools/esbuild/application-code-bundle.js +66 -41
- package/src/tools/esbuild/bundler-context.d.ts +2 -1
- package/src/tools/esbuild/bundler-context.js +10 -12
- package/src/tools/esbuild/bundler-execution-result.d.ts +5 -2
- package/src/tools/esbuild/bundler-execution-result.js +5 -1
- package/src/tools/esbuild/commonjs-checker.js +2 -2
- package/src/tools/esbuild/compiler-plugin-options.d.ts +1 -4
- package/src/tools/esbuild/compiler-plugin-options.js +14 -36
- package/src/tools/esbuild/global-scripts.js +1 -1
- package/src/tools/esbuild/global-styles.js +4 -1
- package/src/tools/esbuild/index-html-generator.js +8 -0
- package/src/tools/esbuild/javascript-transformer-worker.d.ts +1 -0
- package/src/tools/esbuild/javascript-transformer-worker.js +5 -1
- package/src/tools/esbuild/javascript-transformer.d.ts +2 -2
- package/src/tools/esbuild/javascript-transformer.js +7 -3
- package/src/tools/esbuild/server-bundle-metadata-plugin.d.ts +22 -0
- package/src/tools/esbuild/server-bundle-metadata-plugin.js +36 -0
- package/src/tools/esbuild/stylesheets/bundle-options.d.ts +2 -0
- package/src/tools/esbuild/stylesheets/bundle-options.js +2 -1
- package/src/tools/esbuild/stylesheets/sass-language.js +4 -0
- package/src/tools/esbuild/stylesheets/stylesheet-plugin-factory.d.ts +9 -0
- package/src/tools/esbuild/utils.js +13 -31
- package/src/tools/sass/worker.js +19 -0
- package/src/tools/vite/middlewares/assets-middleware.d.ts +1 -1
- package/src/tools/vite/middlewares/assets-middleware.js +19 -3
- package/src/tools/vite/middlewares/component-middleware.d.ts +9 -0
- package/src/tools/vite/middlewares/component-middleware.js +33 -0
- package/src/tools/vite/middlewares/index.d.ts +1 -0
- package/src/tools/vite/middlewares/index.js +3 -1
- package/src/tools/vite/middlewares/ssr-middleware.js +13 -12
- package/src/tools/vite/plugins/setup-middlewares-plugin.d.ts +2 -1
- package/src/tools/vite/plugins/setup-middlewares-plugin.js +2 -1
- package/src/tools/vite/utils.d.ts +1 -0
- package/src/typings.d.ts +1 -1
- package/src/utils/environment-options.js +1 -1
- package/src/utils/index-file/auto-csp.d.ts +23 -0
- package/src/utils/index-file/auto-csp.js +283 -0
- package/src/utils/index-file/html-rewriting-stream.d.ts +5 -1
- package/src/utils/index-file/index-html-generator.d.ts +4 -0
- package/src/utils/index-file/index-html-generator.js +16 -0
- package/src/utils/index-file/inline-critical-css.js +17 -18
- package/src/utils/index-file/ngcm-attribute.d.ts +15 -0
- package/src/utils/index-file/ngcm-attribute.js +37 -0
- package/src/utils/index-file/valid-self-closing-tags.js +27 -0
- package/src/utils/normalize-cache.js +1 -1
- package/src/utils/server-rendering/fetch-patch.d.ts +1 -1
- package/src/utils/server-rendering/fetch-patch.js +2 -2
- package/src/utils/server-rendering/launch-server.d.ts +14 -0
- package/src/utils/server-rendering/launch-server.js +63 -0
- package/src/utils/server-rendering/load-esm-from-memory.d.ts +7 -0
- package/src/utils/server-rendering/manifest.d.ts +1 -1
- package/src/utils/server-rendering/manifest.js +4 -13
- package/src/utils/server-rendering/prerender.js +10 -6
- package/src/utils/server-rendering/render-worker.d.ts +4 -1
- package/src/utils/server-rendering/render-worker.js +13 -3
- package/src/utils/server-rendering/routes-extractor-worker.d.ts +5 -4
- package/src/utils/server-rendering/routes-extractor-worker.js +14 -4
- package/src/utils/server-rendering/utils.d.ts +11 -0
- package/src/utils/server-rendering/utils.js +17 -0
- package/src/utils/supported-browsers.js +1 -0
|
@@ -15,5 +15,12 @@ interface MainServerBundleExports {
|
|
|
15
15
|
ɵextractRoutesAndCreateRouteTree: typeof ɵextractRoutesAndCreateRouteTree;
|
|
16
16
|
ɵgetOrCreateAngularServerApp: typeof ɵgetOrCreateAngularServerApp;
|
|
17
17
|
}
|
|
18
|
+
/**
|
|
19
|
+
* Represents the exports available from the server bundle.
|
|
20
|
+
*/
|
|
21
|
+
interface ServerBundleExports {
|
|
22
|
+
reqHandler?: unknown;
|
|
23
|
+
}
|
|
18
24
|
export declare function loadEsmModuleFromMemory(path: './main.server.mjs'): Promise<MainServerBundleExports>;
|
|
25
|
+
export declare function loadEsmModuleFromMemory(path: './server.mjs'): Promise<ServerBundleExports>;
|
|
19
26
|
export {};
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
*/
|
|
8
8
|
import { NormalizedApplicationBuildOptions } from '../../builders/application/options';
|
|
9
9
|
import type { BuildOutputFile } from '../../tools/esbuild/bundler-context';
|
|
10
|
-
import { PrerenderedRoutesRecord } from '../../tools/esbuild/bundler-execution-result';
|
|
10
|
+
import type { PrerenderedRoutesRecord } from '../../tools/esbuild/bundler-execution-result';
|
|
11
11
|
export declare const SERVER_APP_MANIFEST_FILENAME = "angular-app-manifest.mjs";
|
|
12
12
|
export declare const SERVER_APP_ENGINE_MANIFEST_FILENAME = "angular-app-engine-manifest.mjs";
|
|
13
13
|
/**
|
|
@@ -18,18 +18,9 @@ const MAIN_SERVER_OUTPUT_FILENAME = 'main.server.mjs';
|
|
|
18
18
|
* A mapping of unsafe characters to their escaped Unicode equivalents.
|
|
19
19
|
*/
|
|
20
20
|
const UNSAFE_CHAR_MAP = {
|
|
21
|
-
'
|
|
22
|
-
'
|
|
23
|
-
'/': '\\u002F',
|
|
21
|
+
'`': '\\`',
|
|
22
|
+
'$': '\\$',
|
|
24
23
|
'\\': '\\\\',
|
|
25
|
-
'\b': '\\b',
|
|
26
|
-
'\f': '\\f',
|
|
27
|
-
'\n': '\\n',
|
|
28
|
-
'\r': '\\r',
|
|
29
|
-
'\t': '\\t',
|
|
30
|
-
'\0': '\\0',
|
|
31
|
-
'\u2028': '\\u2028',
|
|
32
|
-
'\u2029': '\\u2029',
|
|
33
24
|
};
|
|
34
25
|
/**
|
|
35
26
|
* Escapes unsafe characters in a given string by replacing them with
|
|
@@ -39,7 +30,7 @@ const UNSAFE_CHAR_MAP = {
|
|
|
39
30
|
* @returns The escaped string where unsafe characters are replaced.
|
|
40
31
|
*/
|
|
41
32
|
function escapeUnsafeChars(str) {
|
|
42
|
-
return str.replace(/[
|
|
33
|
+
return str.replace(/[$`\\]/g, (c) => UNSAFE_CHAR_MAP[c]);
|
|
43
34
|
}
|
|
44
35
|
/**
|
|
45
36
|
* Generates the server manifest for the App Engine environment.
|
|
@@ -119,7 +110,7 @@ function generateAngularServerAppManifest(additionalHtmlOutputFiles, outputFiles
|
|
|
119
110
|
if (file.path === options_1.INDEX_HTML_SERVER ||
|
|
120
111
|
file.path === options_1.INDEX_HTML_CSR ||
|
|
121
112
|
(inlineCriticalCss && file.path.endsWith('.css'))) {
|
|
122
|
-
serverAssetsContent.push(`['${file.path}', async () =>
|
|
113
|
+
serverAssetsContent.push(`['${file.path}', async () => \`${escapeUnsafeChars(file.text)}\`]`);
|
|
123
114
|
}
|
|
124
115
|
}
|
|
125
116
|
const manifestContent = `
|
|
@@ -92,7 +92,7 @@ async function prerenderPages(workspaceRoot, baseHref, appShellOptions, prerende
|
|
|
92
92
|
};
|
|
93
93
|
}
|
|
94
94
|
// Render routes
|
|
95
|
-
const { errors: renderingErrors, output } = await renderPages(baseHref, sourcemap, serializableRouteTreeNodeForPrerender, maxThreads, workspaceRoot, outputFilesForWorker, assetsReversed, appShellOptions);
|
|
95
|
+
const { errors: renderingErrors, output } = await renderPages(baseHref, sourcemap, serializableRouteTreeNodeForPrerender, maxThreads, workspaceRoot, outputFilesForWorker, assetsReversed, appShellOptions, outputMode);
|
|
96
96
|
errors.push(...renderingErrors);
|
|
97
97
|
return {
|
|
98
98
|
errors,
|
|
@@ -101,7 +101,7 @@ async function prerenderPages(workspaceRoot, baseHref, appShellOptions, prerende
|
|
|
101
101
|
serializableRouteTreeNode,
|
|
102
102
|
};
|
|
103
103
|
}
|
|
104
|
-
async function renderPages(baseHref, sourcemap, serializableRouteTreeNode, maxThreads, workspaceRoot, outputFilesForWorker, assetFilesForWorker, appShellOptions) {
|
|
104
|
+
async function renderPages(baseHref, sourcemap, serializableRouteTreeNode, maxThreads, workspaceRoot, outputFilesForWorker, assetFilesForWorker, appShellOptions, outputMode) {
|
|
105
105
|
const output = {};
|
|
106
106
|
const errors = [];
|
|
107
107
|
const workerExecArgv = [
|
|
@@ -119,6 +119,8 @@ async function renderPages(baseHref, sourcemap, serializableRouteTreeNode, maxTh
|
|
|
119
119
|
workspaceRoot,
|
|
120
120
|
outputFiles: outputFilesForWorker,
|
|
121
121
|
assetFiles: assetFilesForWorker,
|
|
122
|
+
outputMode,
|
|
123
|
+
hasSsrEntry: !!outputFilesForWorker['server.mjs'],
|
|
122
124
|
},
|
|
123
125
|
execArgv: workerExecArgv,
|
|
124
126
|
});
|
|
@@ -194,19 +196,21 @@ async function getAllRoutes(workspaceRoot, baseHref, outputFilesForWorker, asset
|
|
|
194
196
|
workspaceRoot,
|
|
195
197
|
outputFiles: outputFilesForWorker,
|
|
196
198
|
assetFiles: assetFilesForWorker,
|
|
199
|
+
outputMode,
|
|
200
|
+
hasSsrEntry: !!outputFilesForWorker['server.mjs'],
|
|
197
201
|
},
|
|
198
202
|
execArgv: workerExecArgv,
|
|
199
203
|
});
|
|
200
204
|
try {
|
|
201
|
-
const { serializedRouteTree, errors } = await renderWorker.run({
|
|
202
|
-
outputMode,
|
|
203
|
-
});
|
|
205
|
+
const { serializedRouteTree, errors } = await renderWorker.run({});
|
|
204
206
|
return { errors, serializedRouteTree: [...routes, ...serializedRouteTree] };
|
|
205
207
|
}
|
|
206
208
|
catch (err) {
|
|
207
209
|
(0, error_1.assertIsError)(err);
|
|
208
210
|
return {
|
|
209
|
-
errors: [
|
|
211
|
+
errors: [
|
|
212
|
+
`An error occurred while extracting routes.\n\n${err.stack ?? err.message ?? err.code ?? err}`,
|
|
213
|
+
],
|
|
210
214
|
serializedRouteTree: [],
|
|
211
215
|
};
|
|
212
216
|
}
|
|
@@ -5,9 +5,12 @@
|
|
|
5
5
|
* Use of this source code is governed by an MIT-style license that can be
|
|
6
6
|
* found in the LICENSE file at https://angular.dev/license
|
|
7
7
|
*/
|
|
8
|
+
import type { OutputMode } from '../../builders/application/schema';
|
|
8
9
|
import type { ESMInMemoryFileLoaderWorkerData } from './esm-in-memory-loader/loader-hooks';
|
|
9
10
|
export interface RenderWorkerData extends ESMInMemoryFileLoaderWorkerData {
|
|
10
11
|
assetFiles: Record</** Destination */ string, /** Source */ string>;
|
|
12
|
+
outputMode: OutputMode | undefined;
|
|
13
|
+
hasSsrEntry: boolean;
|
|
11
14
|
}
|
|
12
15
|
export interface RenderOptions {
|
|
13
16
|
url: string;
|
|
@@ -16,5 +19,5 @@ export interface RenderOptions {
|
|
|
16
19
|
* Renders each route in routes and writes them to <outputPath>/<route>/index.html.
|
|
17
20
|
*/
|
|
18
21
|
declare function renderPage({ url }: RenderOptions): Promise<string | null>;
|
|
19
|
-
declare const _default: typeof renderPage
|
|
22
|
+
declare const _default: Promise<typeof renderPage>;
|
|
20
23
|
export default _default;
|
|
@@ -7,19 +7,29 @@
|
|
|
7
7
|
* found in the LICENSE file at https://angular.dev/license
|
|
8
8
|
*/
|
|
9
9
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
const worker_threads_1 = require("worker_threads");
|
|
10
11
|
const fetch_patch_1 = require("./fetch-patch");
|
|
12
|
+
const launch_server_1 = require("./launch-server");
|
|
11
13
|
const load_esm_from_memory_1 = require("./load-esm-from-memory");
|
|
14
|
+
/**
|
|
15
|
+
* This is passed as workerData when setting up the worker via the `piscina` package.
|
|
16
|
+
*/
|
|
17
|
+
const { outputMode, hasSsrEntry } = worker_threads_1.workerData;
|
|
18
|
+
let serverURL = launch_server_1.DEFAULT_URL;
|
|
12
19
|
/**
|
|
13
20
|
* Renders each route in routes and writes them to <outputPath>/<route>/index.html.
|
|
14
21
|
*/
|
|
15
22
|
async function renderPage({ url }) {
|
|
16
23
|
const { ɵgetOrCreateAngularServerApp: getOrCreateAngularServerApp } = await (0, load_esm_from_memory_1.loadEsmModuleFromMemory)('./main.server.mjs');
|
|
17
24
|
const angularServerApp = getOrCreateAngularServerApp();
|
|
18
|
-
const response = await angularServerApp.renderStatic(new URL(url,
|
|
25
|
+
const response = await angularServerApp.renderStatic(new URL(url, serverURL), AbortSignal.timeout(30_000));
|
|
19
26
|
return response ? response.text() : null;
|
|
20
27
|
}
|
|
21
|
-
function initialize() {
|
|
22
|
-
(
|
|
28
|
+
async function initialize() {
|
|
29
|
+
if (outputMode !== undefined && hasSsrEntry) {
|
|
30
|
+
serverURL = await (0, launch_server_1.launchServer)();
|
|
31
|
+
}
|
|
32
|
+
(0, fetch_patch_1.patchFetchToLoadInMemoryAssets)(serverURL);
|
|
23
33
|
return renderPage;
|
|
24
34
|
}
|
|
25
35
|
exports.default = initialize();
|
|
@@ -6,11 +6,12 @@
|
|
|
6
6
|
* found in the LICENSE file at https://angular.dev/license
|
|
7
7
|
*/
|
|
8
8
|
import { OutputMode } from '../../builders/application/schema';
|
|
9
|
+
import { ESMInMemoryFileLoaderWorkerData } from './esm-in-memory-loader/loader-hooks';
|
|
9
10
|
import { RoutersExtractorWorkerResult } from './models';
|
|
10
|
-
export interface
|
|
11
|
-
outputMode
|
|
11
|
+
export interface ExtractRoutesWorkerData extends ESMInMemoryFileLoaderWorkerData {
|
|
12
|
+
outputMode: OutputMode | undefined;
|
|
12
13
|
}
|
|
13
14
|
/** Renders an application based on a provided options. */
|
|
14
|
-
declare function extractRoutes(
|
|
15
|
-
declare const _default: typeof extractRoutes
|
|
15
|
+
declare function extractRoutes(): Promise<RoutersExtractorWorkerResult>;
|
|
16
|
+
declare const _default: Promise<typeof extractRoutes>;
|
|
16
17
|
export default _default;
|
|
@@ -7,20 +7,30 @@
|
|
|
7
7
|
* found in the LICENSE file at https://angular.dev/license
|
|
8
8
|
*/
|
|
9
9
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
const worker_threads_1 = require("worker_threads");
|
|
10
11
|
const schema_1 = require("../../builders/application/schema");
|
|
11
12
|
const fetch_patch_1 = require("./fetch-patch");
|
|
13
|
+
const launch_server_1 = require("./launch-server");
|
|
12
14
|
const load_esm_from_memory_1 = require("./load-esm-from-memory");
|
|
15
|
+
/**
|
|
16
|
+
* This is passed as workerData when setting up the worker via the `piscina` package.
|
|
17
|
+
*/
|
|
18
|
+
const { outputMode, hasSsrEntry } = worker_threads_1.workerData;
|
|
19
|
+
let serverURL = launch_server_1.DEFAULT_URL;
|
|
13
20
|
/** Renders an application based on a provided options. */
|
|
14
|
-
async function extractRoutes(
|
|
21
|
+
async function extractRoutes() {
|
|
15
22
|
const { ɵextractRoutesAndCreateRouteTree: extractRoutesAndCreateRouteTree } = await (0, load_esm_from_memory_1.loadEsmModuleFromMemory)('./main.server.mjs');
|
|
16
|
-
const { routeTree, errors } = await extractRoutesAndCreateRouteTree(
|
|
23
|
+
const { routeTree, errors } = await extractRoutesAndCreateRouteTree(serverURL, undefined /** manifest */, true /** invokeGetPrerenderParams */, outputMode === schema_1.OutputMode.Server /** includePrerenderFallbackRoutes */);
|
|
17
24
|
return {
|
|
18
25
|
errors,
|
|
19
26
|
serializedRouteTree: routeTree.toObject(),
|
|
20
27
|
};
|
|
21
28
|
}
|
|
22
|
-
function initialize() {
|
|
23
|
-
(
|
|
29
|
+
async function initialize() {
|
|
30
|
+
if (outputMode !== undefined && hasSsrEntry) {
|
|
31
|
+
serverURL = await (0, launch_server_1.launchServer)();
|
|
32
|
+
}
|
|
33
|
+
(0, fetch_patch_1.patchFetchToLoadInMemoryAssets)(serverURL);
|
|
24
34
|
return extractRoutes;
|
|
25
35
|
}
|
|
26
36
|
exports.default = initialize();
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright Google LLC All Rights Reserved.
|
|
4
|
+
*
|
|
5
|
+
* Use of this source code is governed by an MIT-style license that can be
|
|
6
|
+
* found in the LICENSE file at https://angular.dev/license
|
|
7
|
+
*/
|
|
8
|
+
import type { createRequestHandler } from '@angular/ssr';
|
|
9
|
+
import type { createNodeRequestHandler } from '@angular/ssr/node';
|
|
10
|
+
export declare function isSsrNodeRequestHandler(value: unknown): value is ReturnType<typeof createNodeRequestHandler>;
|
|
11
|
+
export declare function isSsrRequestHandler(value: unknown): value is ReturnType<typeof createRequestHandler>;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* @license
|
|
4
|
+
* Copyright Google LLC All Rights Reserved.
|
|
5
|
+
*
|
|
6
|
+
* Use of this source code is governed by an MIT-style license that can be
|
|
7
|
+
* found in the LICENSE file at https://angular.dev/license
|
|
8
|
+
*/
|
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
exports.isSsrNodeRequestHandler = isSsrNodeRequestHandler;
|
|
11
|
+
exports.isSsrRequestHandler = isSsrRequestHandler;
|
|
12
|
+
function isSsrNodeRequestHandler(value) {
|
|
13
|
+
return typeof value === 'function' && '__ng_node_request_handler__' in value;
|
|
14
|
+
}
|
|
15
|
+
function isSsrRequestHandler(value) {
|
|
16
|
+
return typeof value === 'function' && '__ng_request_handler__' in value;
|
|
17
|
+
}
|