@angular/build 18.0.0-next.3

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.
Files changed (253) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +5 -0
  3. package/builders.json +14 -0
  4. package/package.json +87 -0
  5. package/src/builders/application/build-action.d.ts +33 -0
  6. package/src/builders/application/build-action.js +183 -0
  7. package/src/builders/application/execute-build.d.ts +11 -0
  8. package/src/builders/application/execute-build.js +125 -0
  9. package/src/builders/application/execute-post-bundle.d.ts +25 -0
  10. package/src/builders/application/execute-post-bundle.js +93 -0
  11. package/src/builders/application/i18n.d.ts +29 -0
  12. package/src/builders/application/i18n.js +128 -0
  13. package/src/builders/application/index.d.ts +57 -0
  14. package/src/builders/application/index.js +121 -0
  15. package/src/builders/application/options.d.ts +149 -0
  16. package/src/builders/application/options.js +369 -0
  17. package/src/builders/application/schema.d.ts +512 -0
  18. package/src/builders/application/schema.js +58 -0
  19. package/src/builders/application/schema.json +635 -0
  20. package/src/builders/application/setup-bundling.d.ts +19 -0
  21. package/src/builders/application/setup-bundling.js +71 -0
  22. package/src/builders/dev-server/builder.d.ts +32 -0
  23. package/src/builders/dev-server/builder.js +70 -0
  24. package/src/builders/dev-server/index.d.ts +14 -0
  25. package/src/builders/dev-server/index.js +15 -0
  26. package/src/builders/dev-server/internal.d.ts +19 -0
  27. package/src/builders/dev-server/internal.js +29 -0
  28. package/src/builders/dev-server/options.d.ts +47 -0
  29. package/src/builders/dev-server/options.js +65 -0
  30. package/src/builders/dev-server/output.d.ts +16 -0
  31. package/src/builders/dev-server/output.js +9 -0
  32. package/src/builders/dev-server/schema.d.ts +118 -0
  33. package/src/builders/dev-server/schema.js +4 -0
  34. package/src/builders/dev-server/schema.json +131 -0
  35. package/src/builders/dev-server/vite-server.d.ts +31 -0
  36. package/src/builders/dev-server/vite-server.js +504 -0
  37. package/src/index.d.ts +11 -0
  38. package/src/index.js +16 -0
  39. package/src/private.d.ts +35 -0
  40. package/src/private.js +70 -0
  41. package/src/tools/babel/plugins/adjust-static-class-members.d.ts +26 -0
  42. package/src/tools/babel/plugins/adjust-static-class-members.js +351 -0
  43. package/src/tools/babel/plugins/adjust-typescript-enums.d.ts +22 -0
  44. package/src/tools/babel/plugins/adjust-typescript-enums.js +113 -0
  45. package/src/tools/babel/plugins/elide-angular-metadata.d.ts +22 -0
  46. package/src/tools/babel/plugins/elide-angular-metadata.js +110 -0
  47. package/src/tools/babel/plugins/index.d.ts +11 -0
  48. package/src/tools/babel/plugins/index.js +21 -0
  49. package/src/tools/babel/plugins/pure-toplevel-functions.d.ts +15 -0
  50. package/src/tools/babel/plugins/pure-toplevel-functions.js +90 -0
  51. package/src/tools/babel/typings.d.ts +21 -0
  52. package/src/tools/esbuild/angular/angular-host.d.ts +26 -0
  53. package/src/tools/esbuild/angular/angular-host.js +134 -0
  54. package/src/tools/esbuild/angular/compilation/angular-compilation.d.ts +42 -0
  55. package/src/tools/esbuild/angular/compilation/angular-compilation.js +94 -0
  56. package/src/tools/esbuild/angular/compilation/aot-compilation.d.ts +21 -0
  57. package/src/tools/esbuild/angular/compilation/aot-compilation.js +224 -0
  58. package/src/tools/esbuild/angular/compilation/factory.d.ts +16 -0
  59. package/src/tools/esbuild/angular/compilation/factory.js +56 -0
  60. package/src/tools/esbuild/angular/compilation/index.d.ts +10 -0
  61. package/src/tools/esbuild/angular/compilation/index.js +17 -0
  62. package/src/tools/esbuild/angular/compilation/jit-bootstrap-transformer.d.ts +10 -0
  63. package/src/tools/esbuild/angular/compilation/jit-bootstrap-transformer.js +182 -0
  64. package/src/tools/esbuild/angular/compilation/jit-compilation.d.ts +21 -0
  65. package/src/tools/esbuild/angular/compilation/jit-compilation.js +106 -0
  66. package/src/tools/esbuild/angular/compilation/noop-compilation.d.ts +20 -0
  67. package/src/tools/esbuild/angular/compilation/noop-compilation.js +26 -0
  68. package/src/tools/esbuild/angular/compilation/parallel-compilation.d.ts +42 -0
  69. package/src/tools/esbuild/angular/compilation/parallel-compilation.js +123 -0
  70. package/src/tools/esbuild/angular/compilation/parallel-worker.d.ts +33 -0
  71. package/src/tools/esbuild/angular/compilation/parallel-worker.js +90 -0
  72. package/src/tools/esbuild/angular/compilation-state.d.ts +15 -0
  73. package/src/tools/esbuild/angular/compilation-state.js +44 -0
  74. package/src/tools/esbuild/angular/compiler-plugin.d.ts +27 -0
  75. package/src/tools/esbuild/angular/compiler-plugin.js +441 -0
  76. package/src/tools/esbuild/angular/component-stylesheets.d.ts +44 -0
  77. package/src/tools/esbuild/angular/component-stylesheets.js +150 -0
  78. package/src/tools/esbuild/angular/diagnostics.d.ts +15 -0
  79. package/src/tools/esbuild/angular/diagnostics.js +69 -0
  80. package/src/tools/esbuild/angular/file-reference-tracker.d.ts +17 -0
  81. package/src/tools/esbuild/angular/file-reference-tracker.js +57 -0
  82. package/src/tools/esbuild/angular/jit-plugin-callbacks.d.ts +23 -0
  83. package/src/tools/esbuild/angular/jit-plugin-callbacks.js +117 -0
  84. package/src/tools/esbuild/angular/jit-resource-transformer.d.ts +17 -0
  85. package/src/tools/esbuild/angular/jit-resource-transformer.js +186 -0
  86. package/src/tools/esbuild/angular/source-file-cache.d.ts +18 -0
  87. package/src/tools/esbuild/angular/source-file-cache.js +65 -0
  88. package/src/tools/esbuild/angular/uri.d.ts +54 -0
  89. package/src/tools/esbuild/angular/uri.js +74 -0
  90. package/src/tools/esbuild/angular/web-worker-transformer.d.ts +17 -0
  91. package/src/tools/esbuild/angular/web-worker-transformer.js +94 -0
  92. package/src/tools/esbuild/application-code-bundle.d.ts +20 -0
  93. package/src/tools/esbuild/application-code-bundle.js +368 -0
  94. package/src/tools/esbuild/budget-stats.d.ts +19 -0
  95. package/src/tools/esbuild/budget-stats.js +59 -0
  96. package/src/tools/esbuild/bundler-context.d.ts +75 -0
  97. package/src/tools/esbuild/bundler-context.js +366 -0
  98. package/src/tools/esbuild/bundler-execution-result.d.ts +71 -0
  99. package/src/tools/esbuild/bundler-execution-result.js +131 -0
  100. package/src/tools/esbuild/cache.d.ts +88 -0
  101. package/src/tools/esbuild/cache.js +92 -0
  102. package/src/tools/esbuild/commonjs-checker.d.ts +28 -0
  103. package/src/tools/esbuild/commonjs-checker.js +151 -0
  104. package/src/tools/esbuild/compiler-plugin-options.d.ts +16 -0
  105. package/src/tools/esbuild/compiler-plugin-options.js +49 -0
  106. package/src/tools/esbuild/external-packages-plugin.d.ts +18 -0
  107. package/src/tools/esbuild/external-packages-plugin.js +70 -0
  108. package/src/tools/esbuild/global-scripts.d.ts +16 -0
  109. package/src/tools/esbuild/global-scripts.js +142 -0
  110. package/src/tools/esbuild/global-styles.d.ts +10 -0
  111. package/src/tools/esbuild/global-styles.js +74 -0
  112. package/src/tools/esbuild/i18n-inliner-worker.d.ts +42 -0
  113. package/src/tools/esbuild/i18n-inliner-worker.js +136 -0
  114. package/src/tools/esbuild/i18n-inliner.d.ts +44 -0
  115. package/src/tools/esbuild/i18n-inliner.js +150 -0
  116. package/src/tools/esbuild/i18n-locale-plugin.d.ts +22 -0
  117. package/src/tools/esbuild/i18n-locale-plugin.js +120 -0
  118. package/src/tools/esbuild/index-html-generator.d.ts +15 -0
  119. package/src/tools/esbuild/index-html-generator.js +81 -0
  120. package/src/tools/esbuild/javascript-transformer-worker.d.ts +19 -0
  121. package/src/tools/esbuild/javascript-transformer-worker.js +154 -0
  122. package/src/tools/esbuild/javascript-transformer.d.ts +54 -0
  123. package/src/tools/esbuild/javascript-transformer.js +147 -0
  124. package/src/tools/esbuild/license-extractor.d.ts +25 -0
  125. package/src/tools/esbuild/license-extractor.js +158 -0
  126. package/src/tools/esbuild/load-result-cache.d.ts +21 -0
  127. package/src/tools/esbuild/load-result-cache.js +75 -0
  128. package/src/tools/esbuild/profiling.d.ts +11 -0
  129. package/src/tools/esbuild/profiling.js +78 -0
  130. package/src/tools/esbuild/rxjs-esm-resolution-plugin.d.ts +18 -0
  131. package/src/tools/esbuild/rxjs-esm-resolution-plugin.js +44 -0
  132. package/src/tools/esbuild/sourcemap-ignorelist-plugin.d.ts +17 -0
  133. package/src/tools/esbuild/sourcemap-ignorelist-plugin.js +73 -0
  134. package/src/tools/esbuild/stylesheets/bundle-options.d.ts +35 -0
  135. package/src/tools/esbuild/stylesheets/bundle-options.js +64 -0
  136. package/src/tools/esbuild/stylesheets/css-inline-fonts-plugin.d.ts +25 -0
  137. package/src/tools/esbuild/stylesheets/css-inline-fonts-plugin.js +57 -0
  138. package/src/tools/esbuild/stylesheets/css-language.d.ts +9 -0
  139. package/src/tools/esbuild/stylesheets/css-language.js +15 -0
  140. package/src/tools/esbuild/stylesheets/css-resource-plugin.d.ts +18 -0
  141. package/src/tools/esbuild/stylesheets/css-resource-plugin.js +114 -0
  142. package/src/tools/esbuild/stylesheets/less-language.d.ts +9 -0
  143. package/src/tools/esbuild/stylesheets/less-language.js +155 -0
  144. package/src/tools/esbuild/stylesheets/sass-language.d.ts +10 -0
  145. package/src/tools/esbuild/stylesheets/sass-language.js +185 -0
  146. package/src/tools/esbuild/stylesheets/stylesheet-plugin-factory.d.ts +58 -0
  147. package/src/tools/esbuild/stylesheets/stylesheet-plugin-factory.js +282 -0
  148. package/src/tools/esbuild/utils.d.ts +49 -0
  149. package/src/tools/esbuild/utils.js +392 -0
  150. package/src/tools/esbuild/virtual-module-plugin.d.ts +33 -0
  151. package/src/tools/esbuild/virtual-module-plugin.js +43 -0
  152. package/src/tools/esbuild/watcher.d.ts +25 -0
  153. package/src/tools/esbuild/watcher.js +118 -0
  154. package/src/tools/sass/lexer.d.ts +18 -0
  155. package/src/tools/sass/lexer.js +161 -0
  156. package/src/tools/sass/rebasing-importer.d.ts +101 -0
  157. package/src/tools/sass/rebasing-importer.js +334 -0
  158. package/src/tools/sass/sass-service.d.ts +72 -0
  159. package/src/tools/sass/sass-service.js +213 -0
  160. package/src/tools/sass/worker.d.ts +8 -0
  161. package/src/tools/sass/worker.js +192 -0
  162. package/src/tools/vite/angular-memory-plugin.d.ts +24 -0
  163. package/src/tools/vite/angular-memory-plugin.js +268 -0
  164. package/src/tools/vite/i18n-locale-plugin.d.ts +18 -0
  165. package/src/tools/vite/i18n-locale-plugin.js +55 -0
  166. package/src/utils/bundle-calculator.d.ts +44 -0
  167. package/src/utils/bundle-calculator.js +303 -0
  168. package/src/utils/check-port.d.ts +8 -0
  169. package/src/utils/check-port.js +58 -0
  170. package/src/utils/color.d.ts +10 -0
  171. package/src/utils/color.js +63 -0
  172. package/src/utils/delete-output-dir.d.ts +11 -0
  173. package/src/utils/delete-output-dir.js +46 -0
  174. package/src/utils/environment-options.d.ts +16 -0
  175. package/src/utils/environment-options.js +79 -0
  176. package/src/utils/error.d.ts +10 -0
  177. package/src/utils/error.js +21 -0
  178. package/src/utils/format-bytes.d.ts +8 -0
  179. package/src/utils/format-bytes.js +22 -0
  180. package/src/utils/i18n-options.d.ts +33 -0
  181. package/src/utils/i18n-options.js +161 -0
  182. package/src/utils/index-file/add-event-dispatch-contract.d.ts +8 -0
  183. package/src/utils/index-file/add-event-dispatch-contract.js +28 -0
  184. package/src/utils/index-file/augment-index-html.d.ts +40 -0
  185. package/src/utils/index-file/augment-index-html.js +239 -0
  186. package/src/utils/index-file/html-rewriting-stream.d.ts +11 -0
  187. package/src/utils/index-file/html-rewriting-stream.js +28 -0
  188. package/src/utils/index-file/index-html-generator.d.ts +57 -0
  189. package/src/utils/index-file/index-html-generator.js +135 -0
  190. package/src/utils/index-file/inline-critical-css.d.ts +24 -0
  191. package/src/utils/index-file/inline-critical-css.js +179 -0
  192. package/src/utils/index-file/inline-fonts.d.ts +23 -0
  193. package/src/utils/index-file/inline-fonts.js +267 -0
  194. package/src/utils/index-file/nonce.d.ts +12 -0
  195. package/src/utils/index-file/nonce.js +55 -0
  196. package/src/utils/index-file/style-nonce.d.ts +12 -0
  197. package/src/utils/index-file/style-nonce.js +55 -0
  198. package/src/utils/index.d.ts +11 -0
  199. package/src/utils/index.js +27 -0
  200. package/src/utils/load-esm.d.ts +20 -0
  201. package/src/utils/load-esm.js +31 -0
  202. package/src/utils/load-proxy-config.d.ts +8 -0
  203. package/src/utils/load-proxy-config.js +189 -0
  204. package/src/utils/load-translations.d.ts +16 -0
  205. package/src/utils/load-translations.js +84 -0
  206. package/src/utils/normalize-asset-patterns.d.ts +14 -0
  207. package/src/utils/normalize-asset-patterns.js +96 -0
  208. package/src/utils/normalize-cache.d.ts +16 -0
  209. package/src/utils/normalize-cache.js +44 -0
  210. package/src/utils/normalize-optimization.d.ts +13 -0
  211. package/src/utils/normalize-optimization.js +42 -0
  212. package/src/utils/normalize-source-maps.d.ts +9 -0
  213. package/src/utils/normalize-source-maps.js +23 -0
  214. package/src/utils/postcss-configuration.d.ts +17 -0
  215. package/src/utils/postcss-configuration.js +86 -0
  216. package/src/utils/purge-cache.d.ts +10 -0
  217. package/src/utils/purge-cache.js +40 -0
  218. package/src/utils/resolve-assets.d.ts +18 -0
  219. package/src/utils/resolve-assets.js +35 -0
  220. package/src/utils/routes-extractor/extractor.d.ts +15 -0
  221. package/src/utils/routes-extractor/extractor.js +97 -0
  222. package/src/utils/server-rendering/esm-in-memory-loader/loader-hooks.d.ts +18 -0
  223. package/src/utils/server-rendering/esm-in-memory-loader/loader-hooks.js +129 -0
  224. package/src/utils/server-rendering/esm-in-memory-loader/register-hooks.d.ts +8 -0
  225. package/src/utils/server-rendering/esm-in-memory-loader/register-hooks.js +13 -0
  226. package/src/utils/server-rendering/fetch-patch.d.ts +8 -0
  227. package/src/utils/server-rendering/fetch-patch.js +66 -0
  228. package/src/utils/server-rendering/load-esm-from-memory.d.ts +10 -0
  229. package/src/utils/server-rendering/load-esm-from-memory.js +26 -0
  230. package/src/utils/server-rendering/main-bundle-exports.d.ts +27 -0
  231. package/src/utils/server-rendering/main-bundle-exports.js +9 -0
  232. package/src/utils/server-rendering/prerender.d.ts +23 -0
  233. package/src/utils/server-rendering/prerender.js +192 -0
  234. package/src/utils/server-rendering/render-page.d.ts +26 -0
  235. package/src/utils/server-rendering/render-page.js +110 -0
  236. package/src/utils/server-rendering/render-worker.d.ts +22 -0
  237. package/src/utils/server-rendering/render-worker.js +30 -0
  238. package/src/utils/server-rendering/routes-extractor-worker.d.ts +21 -0
  239. package/src/utils/server-rendering/routes-extractor-worker.js +53 -0
  240. package/src/utils/service-worker.d.ts +25 -0
  241. package/src/utils/service-worker.js +211 -0
  242. package/src/utils/spinner.d.ts +20 -0
  243. package/src/utils/spinner.js +55 -0
  244. package/src/utils/stats-table.d.ts +20 -0
  245. package/src/utils/stats-table.js +205 -0
  246. package/src/utils/supported-browsers.d.ts +10 -0
  247. package/src/utils/supported-browsers.js +42 -0
  248. package/src/utils/tty.d.ts +8 -0
  249. package/src/utils/tty.js +23 -0
  250. package/src/utils/url.d.ts +8 -0
  251. package/src/utils/url.js +18 -0
  252. package/src/utils/version.d.ts +8 -0
  253. package/src/utils/version.js +59 -0
@@ -0,0 +1,192 @@
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.io/license
8
+ */
9
+ var __importDefault = (this && this.__importDefault) || function (mod) {
10
+ return (mod && mod.__esModule) ? mod : { "default": mod };
11
+ };
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ exports.prerenderPages = void 0;
14
+ const promises_1 = require("node:fs/promises");
15
+ const node_path_1 = require("node:path");
16
+ const node_url_1 = require("node:url");
17
+ const piscina_1 = __importDefault(require("piscina"));
18
+ const bundler_context_1 = require("../../tools/esbuild/bundler-context");
19
+ async function prerenderPages(workspaceRoot, appShellOptions = {}, prerenderOptions = {}, outputFiles, assets, document, sourcemap = false, inlineCriticalCss = false, maxThreads = 1, verbose = false) {
20
+ const outputFilesForWorker = {};
21
+ const serverBundlesSourceMaps = new Map();
22
+ const warnings = [];
23
+ const errors = [];
24
+ for (const { text, path, type } of outputFiles) {
25
+ const fileExt = (0, node_path_1.extname)(path);
26
+ if (type === bundler_context_1.BuildOutputFileType.Server && fileExt === '.map') {
27
+ serverBundlesSourceMaps.set(path.slice(0, -4), text);
28
+ }
29
+ else if (type === bundler_context_1.BuildOutputFileType.Server || // Contains the server runnable application code
30
+ (type === bundler_context_1.BuildOutputFileType.Browser && fileExt === '.css') // Global styles for critical CSS inlining.
31
+ ) {
32
+ outputFilesForWorker[path] = text;
33
+ }
34
+ }
35
+ // Inline sourcemap into JS file. This is needed to make Node.js resolve sourcemaps
36
+ // when using `--enable-source-maps` when using in memory files.
37
+ for (const [filePath, map] of serverBundlesSourceMaps) {
38
+ const jsContent = outputFilesForWorker[filePath];
39
+ if (jsContent) {
40
+ outputFilesForWorker[filePath] =
41
+ jsContent +
42
+ `\n//# sourceMappingURL=` +
43
+ `data:application/json;base64,${Buffer.from(map).toString('base64')}`;
44
+ }
45
+ }
46
+ serverBundlesSourceMaps.clear();
47
+ const assetsReversed = {};
48
+ for (const { source, destination } of assets) {
49
+ assetsReversed[addLeadingSlash(destination.replace(/\\/g, node_path_1.posix.sep))] = source;
50
+ }
51
+ // Get routes to prerender
52
+ const { routes: allRoutes, warnings: routesWarnings } = await getAllRoutes(workspaceRoot, outputFilesForWorker, assetsReversed, document, appShellOptions, prerenderOptions, sourcemap, verbose);
53
+ if (routesWarnings?.length) {
54
+ warnings.push(...routesWarnings);
55
+ }
56
+ if (allRoutes.size < 1) {
57
+ return {
58
+ errors,
59
+ warnings,
60
+ output: {},
61
+ prerenderedRoutes: allRoutes,
62
+ };
63
+ }
64
+ // Render routes
65
+ const { warnings: renderingWarnings, errors: renderingErrors, output, } = await renderPages(sourcemap, allRoutes, maxThreads, workspaceRoot, outputFilesForWorker, assetsReversed, inlineCriticalCss, document, appShellOptions);
66
+ errors.push(...renderingErrors);
67
+ warnings.push(...renderingWarnings);
68
+ return {
69
+ errors,
70
+ warnings,
71
+ output,
72
+ prerenderedRoutes: allRoutes,
73
+ };
74
+ }
75
+ exports.prerenderPages = prerenderPages;
76
+ class RoutesSet extends Set {
77
+ add(value) {
78
+ return super.add(addLeadingSlash(value));
79
+ }
80
+ }
81
+ async function renderPages(sourcemap, allRoutes, maxThreads, workspaceRoot, outputFilesForWorker, assetFilesForWorker, inlineCriticalCss, document, appShellOptions) {
82
+ const output = {};
83
+ const warnings = [];
84
+ const errors = [];
85
+ const workerExecArgv = [
86
+ '--import',
87
+ // Loader cannot be an absolute path on Windows.
88
+ (0, node_url_1.pathToFileURL)((0, node_path_1.join)(__dirname, 'esm-in-memory-loader/register-hooks.js')).href,
89
+ ];
90
+ if (sourcemap) {
91
+ workerExecArgv.push('--enable-source-maps');
92
+ }
93
+ const renderWorker = new piscina_1.default({
94
+ filename: require.resolve('./render-worker'),
95
+ maxThreads: Math.min(allRoutes.size, maxThreads),
96
+ workerData: {
97
+ workspaceRoot,
98
+ outputFiles: outputFilesForWorker,
99
+ assetFiles: assetFilesForWorker,
100
+ inlineCriticalCss,
101
+ document,
102
+ },
103
+ execArgv: workerExecArgv,
104
+ recordTiming: false,
105
+ });
106
+ try {
107
+ const renderingPromises = [];
108
+ const appShellRoute = appShellOptions.route && addLeadingSlash(appShellOptions.route);
109
+ for (const route of allRoutes) {
110
+ const isAppShellRoute = appShellRoute === route;
111
+ const serverContext = isAppShellRoute ? 'app-shell' : 'ssg';
112
+ const render = renderWorker.run({ route, serverContext });
113
+ const renderResult = render.then(({ content, warnings, errors }) => {
114
+ if (content !== undefined) {
115
+ const outPath = isAppShellRoute
116
+ ? 'index.html'
117
+ : node_path_1.posix.join(removeLeadingSlash(route), 'index.html');
118
+ output[outPath] = content;
119
+ }
120
+ if (warnings) {
121
+ warnings.push(...warnings);
122
+ }
123
+ if (errors) {
124
+ errors.push(...errors);
125
+ }
126
+ });
127
+ renderingPromises.push(renderResult);
128
+ }
129
+ await Promise.all(renderingPromises);
130
+ }
131
+ finally {
132
+ void renderWorker.destroy();
133
+ }
134
+ return {
135
+ errors,
136
+ warnings,
137
+ output,
138
+ };
139
+ }
140
+ async function getAllRoutes(workspaceRoot, outputFilesForWorker, assetFilesForWorker, document, appShellOptions, prerenderOptions, sourcemap, verbose) {
141
+ const { routesFile, discoverRoutes } = prerenderOptions;
142
+ const routes = new RoutesSet();
143
+ const { route: appShellRoute } = appShellOptions;
144
+ if (appShellRoute !== undefined) {
145
+ routes.add(appShellRoute);
146
+ }
147
+ if (routesFile) {
148
+ const routesFromFile = (await (0, promises_1.readFile)(routesFile, 'utf8')).split(/\r?\n/);
149
+ for (const route of routesFromFile) {
150
+ routes.add(route.trim());
151
+ }
152
+ }
153
+ if (!discoverRoutes) {
154
+ return { routes };
155
+ }
156
+ const workerExecArgv = [
157
+ '--import',
158
+ // Loader cannot be an absolute path on Windows.
159
+ (0, node_url_1.pathToFileURL)((0, node_path_1.join)(__dirname, 'esm-in-memory-loader/register-hooks.js')).href,
160
+ ];
161
+ if (sourcemap) {
162
+ workerExecArgv.push('--enable-source-maps');
163
+ }
164
+ const renderWorker = new piscina_1.default({
165
+ filename: require.resolve('./routes-extractor-worker'),
166
+ maxThreads: 1,
167
+ workerData: {
168
+ workspaceRoot,
169
+ outputFiles: outputFilesForWorker,
170
+ assetFiles: assetFilesForWorker,
171
+ document,
172
+ verbose,
173
+ },
174
+ execArgv: workerExecArgv,
175
+ recordTiming: false,
176
+ });
177
+ const { routes: extractedRoutes, warnings } = await renderWorker
178
+ .run({})
179
+ .finally(() => {
180
+ void renderWorker.destroy();
181
+ });
182
+ for (const route of extractedRoutes) {
183
+ routes.add(route);
184
+ }
185
+ return { routes, warnings };
186
+ }
187
+ function addLeadingSlash(value) {
188
+ return value.charAt(0) === '/' ? value : '/' + value;
189
+ }
190
+ function removeLeadingSlash(value) {
191
+ return value.charAt(0) === '/' ? value.slice(1) : value;
192
+ }
@@ -0,0 +1,26 @@
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.io/license
7
+ */
8
+ import { MainServerBundleExports, RenderUtilsServerBundleExports } from './main-bundle-exports';
9
+ export interface RenderOptions {
10
+ route: string;
11
+ serverContext: ServerContext;
12
+ outputFiles: Record<string, string>;
13
+ document: string;
14
+ inlineCriticalCss?: boolean;
15
+ loadBundle?: ((path: './main.server.mjs') => Promise<MainServerBundleExports>) & ((path: './render-utils.server.mjs') => Promise<RenderUtilsServerBundleExports>);
16
+ }
17
+ export interface RenderResult {
18
+ errors?: string[];
19
+ warnings?: string[];
20
+ content?: string;
21
+ }
22
+ export type ServerContext = 'app-shell' | 'ssg' | 'ssr';
23
+ /**
24
+ * Renders each route in routes and writes them to <outputPath>/<route>/index.html.
25
+ */
26
+ export declare function renderPage({ route, serverContext, document, inlineCriticalCss, outputFiles, loadBundle, }: RenderOptions): Promise<RenderResult>;
@@ -0,0 +1,110 @@
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.io/license
8
+ */
9
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ var desc = Object.getOwnPropertyDescriptor(m, k);
12
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
13
+ desc = { enumerable: true, get: function() { return m[k]; } };
14
+ }
15
+ Object.defineProperty(o, k2, desc);
16
+ }) : (function(o, m, k, k2) {
17
+ if (k2 === undefined) k2 = k;
18
+ o[k2] = m[k];
19
+ }));
20
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
21
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
22
+ }) : function(o, v) {
23
+ o["default"] = v;
24
+ });
25
+ var __importStar = (this && this.__importStar) || function (mod) {
26
+ if (mod && mod.__esModule) return mod;
27
+ var result = {};
28
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
29
+ __setModuleDefault(result, mod);
30
+ return result;
31
+ };
32
+ var __importDefault = (this && this.__importDefault) || function (mod) {
33
+ return (mod && mod.__esModule) ? mod : { "default": mod };
34
+ };
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.renderPage = void 0;
37
+ const node_assert_1 = __importDefault(require("node:assert"));
38
+ const node_path_1 = require("node:path");
39
+ const load_esm_from_memory_1 = require("./load-esm-from-memory");
40
+ /**
41
+ * Renders each route in routes and writes them to <outputPath>/<route>/index.html.
42
+ */
43
+ async function renderPage({ route, serverContext, document, inlineCriticalCss, outputFiles, loadBundle = load_esm_from_memory_1.loadEsmModuleFromMemory, }) {
44
+ const { default: bootstrapAppFnOrModule } = await loadBundle('./main.server.mjs');
45
+ const { ɵSERVER_CONTEXT, renderModule, renderApplication, ɵresetCompiledComponents, ɵConsole } = await loadBundle('./render-utils.server.mjs');
46
+ // Need to clean up GENERATED_COMP_IDS map in `@angular/core`.
47
+ // Otherwise an incorrect component ID generation collision detected warning will be displayed in development.
48
+ // See: https://github.com/angular/angular-cli/issues/25924
49
+ ɵresetCompiledComponents?.();
50
+ const platformProviders = [
51
+ {
52
+ provide: ɵSERVER_CONTEXT,
53
+ useValue: serverContext,
54
+ },
55
+ {
56
+ provide: ɵConsole,
57
+ /** An Angular Console Provider that does not print a set of predefined logs. */
58
+ useFactory: () => {
59
+ class Console extends ɵConsole {
60
+ ignoredLogs = new Set(['Angular is running in development mode.']);
61
+ log(message) {
62
+ if (!this.ignoredLogs.has(message)) {
63
+ super.log(message);
64
+ }
65
+ }
66
+ }
67
+ return new Console();
68
+ },
69
+ },
70
+ ];
71
+ let html;
72
+ (0, node_assert_1.default)(bootstrapAppFnOrModule, 'The file "./main.server.mjs" does not have a default export for an AppServerModule or a bootstrapping function.');
73
+ if (isBootstrapFn(bootstrapAppFnOrModule)) {
74
+ html = await renderApplication(bootstrapAppFnOrModule, {
75
+ document,
76
+ url: route,
77
+ platformProviders,
78
+ });
79
+ }
80
+ else {
81
+ html = await renderModule(bootstrapAppFnOrModule, {
82
+ document,
83
+ url: route,
84
+ extraProviders: platformProviders,
85
+ });
86
+ }
87
+ if (inlineCriticalCss) {
88
+ const { InlineCriticalCssProcessor } = await Promise.resolve().then(() => __importStar(require('../../utils/index-file/inline-critical-css')));
89
+ const inlineCriticalCssProcessor = new InlineCriticalCssProcessor({
90
+ minify: false, // CSS has already been minified during the build.
91
+ readAsset: async (filePath) => {
92
+ filePath = (0, node_path_1.basename)(filePath);
93
+ const content = outputFiles[filePath];
94
+ if (content === undefined) {
95
+ throw new Error(`Output file does not exist: ${filePath}`);
96
+ }
97
+ return content;
98
+ },
99
+ });
100
+ return inlineCriticalCssProcessor.process(html, { outputPath: '' });
101
+ }
102
+ return {
103
+ content: html,
104
+ };
105
+ }
106
+ exports.renderPage = renderPage;
107
+ function isBootstrapFn(value) {
108
+ // We can differentiate between a module and a bootstrap function by reading compiler-generated `ɵmod` static property:
109
+ return typeof value === 'function' && !('ɵmod' in value);
110
+ }
@@ -0,0 +1,22 @@
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.io/license
7
+ */
8
+ import type { ESMInMemoryFileLoaderWorkerData } from './esm-in-memory-loader/loader-hooks';
9
+ import { RenderResult, ServerContext } from './render-page';
10
+ export interface RenderWorkerData extends ESMInMemoryFileLoaderWorkerData {
11
+ document: string;
12
+ inlineCriticalCss?: boolean;
13
+ assetFiles: Record</** Destination */ string, /** Source */ string>;
14
+ }
15
+ export interface RenderOptions {
16
+ route: string;
17
+ serverContext: ServerContext;
18
+ }
19
+ /** Renders an application based on a provided options. */
20
+ declare function render(options: RenderOptions): Promise<RenderResult>;
21
+ declare const _default: typeof render;
22
+ export default _default;
@@ -0,0 +1,30 @@
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.io/license
8
+ */
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ const node_worker_threads_1 = require("node:worker_threads");
11
+ const fetch_patch_1 = require("./fetch-patch");
12
+ const render_page_1 = require("./render-page");
13
+ /**
14
+ * This is passed as workerData when setting up the worker via the `piscina` package.
15
+ */
16
+ const { outputFiles, document, inlineCriticalCss } = node_worker_threads_1.workerData;
17
+ /** Renders an application based on a provided options. */
18
+ function render(options) {
19
+ return (0, render_page_1.renderPage)({
20
+ ...options,
21
+ outputFiles,
22
+ document,
23
+ inlineCriticalCss,
24
+ });
25
+ }
26
+ function initialize() {
27
+ (0, fetch_patch_1.patchFetchToLoadInMemoryAssets)();
28
+ return render;
29
+ }
30
+ exports.default = initialize();
@@ -0,0 +1,21 @@
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.io/license
7
+ */
8
+ import type { ESMInMemoryFileLoaderWorkerData } from './esm-in-memory-loader/loader-hooks';
9
+ export interface RoutesExtractorWorkerData extends ESMInMemoryFileLoaderWorkerData {
10
+ document: string;
11
+ verbose: boolean;
12
+ assetFiles: Record</** Destination */ string, /** Source */ string>;
13
+ }
14
+ export interface RoutersExtractorWorkerResult {
15
+ routes: string[];
16
+ warnings?: string[];
17
+ }
18
+ /** Renders an application based on a provided options. */
19
+ declare function extractRoutes(): Promise<RoutersExtractorWorkerResult>;
20
+ declare const _default: typeof extractRoutes;
21
+ export default _default;
@@ -0,0 +1,53 @@
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.io/license
8
+ */
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ const node_worker_threads_1 = require("node:worker_threads");
11
+ const fetch_patch_1 = require("./fetch-patch");
12
+ const load_esm_from_memory_1 = require("./load-esm-from-memory");
13
+ /**
14
+ * This is passed as workerData when setting up the worker via the `piscina` package.
15
+ */
16
+ const { document, verbose } = node_worker_threads_1.workerData;
17
+ /** Renders an application based on a provided options. */
18
+ async function extractRoutes() {
19
+ const { extractRoutes } = await (0, load_esm_from_memory_1.loadEsmModuleFromMemory)('./render-utils.server.mjs');
20
+ const { default: bootstrapAppFnOrModule } = await (0, load_esm_from_memory_1.loadEsmModuleFromMemory)('./main.server.mjs');
21
+ const skippedRedirects = [];
22
+ const skippedOthers = [];
23
+ const routes = [];
24
+ for await (const { route, success, redirect } of extractRoutes(bootstrapAppFnOrModule, document)) {
25
+ if (success) {
26
+ routes.push(route);
27
+ continue;
28
+ }
29
+ if (redirect) {
30
+ skippedRedirects.push(route);
31
+ }
32
+ else {
33
+ skippedOthers.push(route);
34
+ }
35
+ }
36
+ if (!verbose) {
37
+ return { routes };
38
+ }
39
+ let warnings;
40
+ if (skippedOthers.length) {
41
+ (warnings ??= []).push('The following routes were skipped from prerendering because they contain routes with dynamic parameters:\n' +
42
+ skippedOthers.join('\n'));
43
+ }
44
+ if (skippedRedirects.length) {
45
+ (warnings ??= []).push('The following routes were skipped from prerendering because they contain redirects:\n', skippedRedirects.join('\n'));
46
+ }
47
+ return { routes, warnings };
48
+ }
49
+ function initialize() {
50
+ (0, fetch_patch_1.patchFetchToLoadInMemoryAssets)();
51
+ return extractRoutes;
52
+ }
53
+ exports.default = initialize();
@@ -0,0 +1,25 @@
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.io/license
7
+ */
8
+ /// <reference types="node" />
9
+ /// <reference types="node" />
10
+ import type { Config, Filesystem } from '@angular/service-worker/config';
11
+ import { promises as fsPromises } from 'node:fs';
12
+ import { BuildOutputFile } from '../tools/esbuild/bundler-context';
13
+ import { BuildOutputAsset } from '../tools/esbuild/bundler-execution-result';
14
+ export declare function augmentAppWithServiceWorker(appRoot: string, workspaceRoot: string, outputPath: string, baseHref: string, ngswConfigPath?: string, inputputFileSystem?: typeof fsPromises, outputFileSystem?: typeof fsPromises): Promise<void>;
15
+ export declare function augmentAppWithServiceWorkerEsbuild(workspaceRoot: string, configPath: string, baseHref: string, indexHtml: string | undefined, outputFiles: BuildOutputFile[], assetFiles: BuildOutputAsset[]): Promise<{
16
+ manifest: string;
17
+ assetFiles: BuildOutputAsset[];
18
+ }>;
19
+ export declare function augmentAppWithServiceWorkerCore(config: Config, serviceWorkerFilesystem: Filesystem, baseHref: string): Promise<{
20
+ manifest: string;
21
+ assetFiles: {
22
+ source: string;
23
+ destination: string;
24
+ }[];
25
+ }>;