@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,20 @@
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 ng from '@angular/compiler-cli';
9
+ import type ts from 'typescript';
10
+ import { AngularHostOptions } from '../angular-host';
11
+ import { AngularCompilation } from './angular-compilation';
12
+ export declare class NoopCompilation extends AngularCompilation {
13
+ initialize(tsconfig: string, hostOptions: AngularHostOptions, compilerOptionsTransformer?: (compilerOptions: ng.CompilerOptions) => ng.CompilerOptions): Promise<{
14
+ affectedFiles: ReadonlySet<ts.SourceFile>;
15
+ compilerOptions: ng.CompilerOptions;
16
+ referencedFiles: readonly string[];
17
+ }>;
18
+ collectDiagnostics(): never;
19
+ emitAffectedFiles(): never;
20
+ }
@@ -0,0 +1,26 @@
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
+ exports.NoopCompilation = void 0;
11
+ const angular_compilation_1 = require("./angular-compilation");
12
+ class NoopCompilation extends angular_compilation_1.AngularCompilation {
13
+ async initialize(tsconfig, hostOptions, compilerOptionsTransformer) {
14
+ // Load the compiler configuration and transform as needed
15
+ const { options: originalCompilerOptions } = await this.loadConfiguration(tsconfig);
16
+ const compilerOptions = compilerOptionsTransformer?.(originalCompilerOptions) ?? originalCompilerOptions;
17
+ return { affectedFiles: new Set(), compilerOptions, referencedFiles: [] };
18
+ }
19
+ collectDiagnostics() {
20
+ throw new Error('Not available when using noop compilation.');
21
+ }
22
+ emitAffectedFiles() {
23
+ throw new Error('Not available when using noop compilation.');
24
+ }
25
+ }
26
+ exports.NoopCompilation = NoopCompilation;
@@ -0,0 +1,42 @@
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 { CompilerOptions } from '@angular/compiler-cli';
9
+ import type { PartialMessage } from 'esbuild';
10
+ import type { SourceFile } from 'typescript';
11
+ import type { AngularHostOptions } from '../angular-host';
12
+ import { AngularCompilation, DiagnosticModes, EmitFileResult } from './angular-compilation';
13
+ /**
14
+ * An Angular compilation which uses a Node.js Worker thread to load and execute
15
+ * the TypeScript and Angular compilers. This allows for longer synchronous actions
16
+ * such as semantic and template diagnostics to be calculated in parallel to the
17
+ * other aspects of the application bundling process. The worker thread also has
18
+ * a separate memory pool which significantly reduces the need for adjusting the
19
+ * main Node.js CLI process memory settings with large application code sizes.
20
+ */
21
+ export declare class ParallelCompilation extends AngularCompilation {
22
+ #private;
23
+ readonly jit: boolean;
24
+ constructor(jit: boolean);
25
+ initialize(tsconfig: string, hostOptions: AngularHostOptions, compilerOptionsTransformer?: ((compilerOptions: CompilerOptions) => CompilerOptions) | undefined): Promise<{
26
+ affectedFiles: ReadonlySet<SourceFile>;
27
+ compilerOptions: CompilerOptions;
28
+ referencedFiles: readonly string[];
29
+ }>;
30
+ /**
31
+ * This is not needed with this compilation type since the worker will already send a response
32
+ * with the serializable esbuild compatible diagnostics.
33
+ */
34
+ protected collectDiagnostics(): never;
35
+ diagnoseFiles(modes?: DiagnosticModes): Promise<{
36
+ errors?: PartialMessage[];
37
+ warnings?: PartialMessage[];
38
+ }>;
39
+ emitAffectedFiles(): Promise<Iterable<EmitFileResult>>;
40
+ update(files: Set<string>): Promise<void>;
41
+ close(): Promise<void>;
42
+ }
@@ -0,0 +1,123 @@
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.ParallelCompilation = void 0;
14
+ const node_module_1 = require("node:module");
15
+ const node_worker_threads_1 = require("node:worker_threads");
16
+ const piscina_1 = __importDefault(require("piscina"));
17
+ const angular_compilation_1 = require("./angular-compilation");
18
+ /**
19
+ * An Angular compilation which uses a Node.js Worker thread to load and execute
20
+ * the TypeScript and Angular compilers. This allows for longer synchronous actions
21
+ * such as semantic and template diagnostics to be calculated in parallel to the
22
+ * other aspects of the application bundling process. The worker thread also has
23
+ * a separate memory pool which significantly reduces the need for adjusting the
24
+ * main Node.js CLI process memory settings with large application code sizes.
25
+ */
26
+ class ParallelCompilation extends angular_compilation_1.AngularCompilation {
27
+ jit;
28
+ #worker;
29
+ constructor(jit) {
30
+ super();
31
+ this.jit = jit;
32
+ // TODO: Convert to import.meta usage during ESM transition
33
+ const localRequire = (0, node_module_1.createRequire)(__filename);
34
+ this.#worker = new piscina_1.default({
35
+ minThreads: 1,
36
+ maxThreads: 1,
37
+ idleTimeout: Infinity,
38
+ // Web containers do not support transferable objects with receiveOnMessagePort which
39
+ // is used when the Atomics based wait loop is enable.
40
+ useAtomics: !process.versions.webcontainer,
41
+ filename: localRequire.resolve('./parallel-worker'),
42
+ recordTiming: false,
43
+ });
44
+ }
45
+ initialize(tsconfig, hostOptions, compilerOptionsTransformer) {
46
+ const stylesheetChannel = new node_worker_threads_1.MessageChannel();
47
+ // The request identifier is required because Angular can issue multiple concurrent requests
48
+ stylesheetChannel.port1.on('message', ({ requestId, data, containingFile, stylesheetFile }) => {
49
+ hostOptions
50
+ .transformStylesheet(data, containingFile, stylesheetFile)
51
+ .then((value) => stylesheetChannel.port1.postMessage({ requestId, value }))
52
+ .catch((error) => stylesheetChannel.port1.postMessage({ requestId, error }));
53
+ });
54
+ // The web worker processing is a synchronous operation and uses shared memory combined with
55
+ // the Atomics API to block execution here until a response is received.
56
+ const webWorkerChannel = new node_worker_threads_1.MessageChannel();
57
+ const webWorkerSignal = new Int32Array(new SharedArrayBuffer(4));
58
+ webWorkerChannel.port1.on('message', ({ workerFile, containingFile }) => {
59
+ try {
60
+ const workerCodeFile = hostOptions.processWebWorker(workerFile, containingFile);
61
+ webWorkerChannel.port1.postMessage({ workerCodeFile });
62
+ }
63
+ catch (error) {
64
+ webWorkerChannel.port1.postMessage({ error });
65
+ }
66
+ finally {
67
+ Atomics.store(webWorkerSignal, 0, 1);
68
+ Atomics.notify(webWorkerSignal, 0);
69
+ }
70
+ });
71
+ // The compiler options transformation is a synchronous operation and uses shared memory combined
72
+ // with the Atomics API to block execution here until a response is received.
73
+ const optionsChannel = new node_worker_threads_1.MessageChannel();
74
+ const optionsSignal = new Int32Array(new SharedArrayBuffer(4));
75
+ optionsChannel.port1.on('message', (compilerOptions) => {
76
+ try {
77
+ const transformedOptions = compilerOptionsTransformer?.(compilerOptions) ?? compilerOptions;
78
+ optionsChannel.port1.postMessage({ transformedOptions });
79
+ }
80
+ catch (error) {
81
+ webWorkerChannel.port1.postMessage({ error });
82
+ }
83
+ finally {
84
+ Atomics.store(optionsSignal, 0, 1);
85
+ Atomics.notify(optionsSignal, 0);
86
+ }
87
+ });
88
+ // Execute the initialize function in the worker thread
89
+ return this.#worker.run({
90
+ fileReplacements: hostOptions.fileReplacements,
91
+ tsconfig,
92
+ jit: this.jit,
93
+ stylesheetPort: stylesheetChannel.port2,
94
+ optionsPort: optionsChannel.port2,
95
+ optionsSignal,
96
+ webWorkerPort: webWorkerChannel.port2,
97
+ webWorkerSignal,
98
+ }, {
99
+ name: 'initialize',
100
+ transferList: [stylesheetChannel.port2, optionsChannel.port2, webWorkerChannel.port2],
101
+ });
102
+ }
103
+ /**
104
+ * This is not needed with this compilation type since the worker will already send a response
105
+ * with the serializable esbuild compatible diagnostics.
106
+ */
107
+ collectDiagnostics() {
108
+ throw new Error('Not implemented in ParallelCompilation.');
109
+ }
110
+ diagnoseFiles(modes = angular_compilation_1.DiagnosticModes.All) {
111
+ return this.#worker.run(modes, { name: 'diagnose' });
112
+ }
113
+ emitAffectedFiles() {
114
+ return this.#worker.run(undefined, { name: 'emit' });
115
+ }
116
+ update(files) {
117
+ return this.#worker.run(files, { name: 'update' });
118
+ }
119
+ close() {
120
+ return this.#worker.destroy();
121
+ }
122
+ }
123
+ exports.ParallelCompilation = ParallelCompilation;
@@ -0,0 +1,33 @@
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
+ import type { PartialMessage } from 'esbuild';
10
+ import { type MessagePort } from 'node:worker_threads';
11
+ import type { DiagnosticModes } from './angular-compilation';
12
+ export interface InitRequest {
13
+ jit: boolean;
14
+ tsconfig: string;
15
+ fileReplacements?: Record<string, string>;
16
+ stylesheetPort: MessagePort;
17
+ optionsPort: MessagePort;
18
+ optionsSignal: Int32Array;
19
+ webWorkerPort: MessagePort;
20
+ webWorkerSignal: Int32Array;
21
+ }
22
+ export declare function initialize(request: InitRequest): Promise<{
23
+ referencedFiles: readonly string[];
24
+ compilerOptions: {
25
+ allowJs: boolean | undefined;
26
+ };
27
+ }>;
28
+ export declare function diagnose(modes: DiagnosticModes): Promise<{
29
+ errors?: PartialMessage[];
30
+ warnings?: PartialMessage[];
31
+ }>;
32
+ export declare function emit(): Promise<import("./angular-compilation").EmitFileResult[]>;
33
+ export declare function update(files: Set<string>): void;
@@ -0,0 +1,90 @@
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.update = exports.emit = exports.diagnose = exports.initialize = void 0;
14
+ const node_assert_1 = __importDefault(require("node:assert"));
15
+ const node_crypto_1 = require("node:crypto");
16
+ const node_worker_threads_1 = require("node:worker_threads");
17
+ const source_file_cache_1 = require("../source-file-cache");
18
+ const aot_compilation_1 = require("./aot-compilation");
19
+ const jit_compilation_1 = require("./jit-compilation");
20
+ let compilation;
21
+ const sourceFileCache = new source_file_cache_1.SourceFileCache();
22
+ async function initialize(request) {
23
+ compilation ??= request.jit ? new jit_compilation_1.JitCompilation() : new aot_compilation_1.AotCompilation();
24
+ const stylesheetRequests = new Map();
25
+ request.stylesheetPort.on('message', ({ requestId, value, error }) => {
26
+ if (error) {
27
+ stylesheetRequests.get(requestId)?.[1](error);
28
+ }
29
+ else {
30
+ stylesheetRequests.get(requestId)?.[0](value);
31
+ }
32
+ });
33
+ const { compilerOptions, referencedFiles } = await compilation.initialize(request.tsconfig, {
34
+ fileReplacements: request.fileReplacements,
35
+ sourceFileCache,
36
+ modifiedFiles: sourceFileCache.modifiedFiles,
37
+ transformStylesheet(data, containingFile, stylesheetFile) {
38
+ const requestId = (0, node_crypto_1.randomUUID)();
39
+ const resultPromise = new Promise((resolve, reject) => stylesheetRequests.set(requestId, [resolve, reject]));
40
+ request.stylesheetPort.postMessage({
41
+ requestId,
42
+ data,
43
+ containingFile,
44
+ stylesheetFile,
45
+ });
46
+ return resultPromise;
47
+ },
48
+ processWebWorker(workerFile, containingFile) {
49
+ Atomics.store(request.webWorkerSignal, 0, 0);
50
+ request.webWorkerPort.postMessage({ workerFile, containingFile });
51
+ Atomics.wait(request.webWorkerSignal, 0, 0);
52
+ const result = (0, node_worker_threads_1.receiveMessageOnPort)(request.webWorkerPort)?.message;
53
+ if (result?.error) {
54
+ throw result.error;
55
+ }
56
+ return result?.workerCodeFile ?? workerFile;
57
+ },
58
+ }, (compilerOptions) => {
59
+ Atomics.store(request.optionsSignal, 0, 0);
60
+ request.optionsPort.postMessage(compilerOptions);
61
+ Atomics.wait(request.optionsSignal, 0, 0);
62
+ const result = (0, node_worker_threads_1.receiveMessageOnPort)(request.optionsPort)?.message;
63
+ if (result?.error) {
64
+ throw result.error;
65
+ }
66
+ return result?.transformedOptions ?? compilerOptions;
67
+ });
68
+ return {
69
+ referencedFiles,
70
+ // TODO: Expand? `allowJs` is the only field needed currently.
71
+ compilerOptions: { allowJs: compilerOptions.allowJs },
72
+ };
73
+ }
74
+ exports.initialize = initialize;
75
+ async function diagnose(modes) {
76
+ (0, node_assert_1.default)(compilation);
77
+ const diagnostics = await compilation.diagnoseFiles(modes);
78
+ return diagnostics;
79
+ }
80
+ exports.diagnose = diagnose;
81
+ async function emit() {
82
+ (0, node_assert_1.default)(compilation);
83
+ const files = await compilation.emitAffectedFiles();
84
+ return [...files];
85
+ }
86
+ exports.emit = emit;
87
+ function update(files) {
88
+ sourceFileCache.invalidate(files);
89
+ }
90
+ exports.update = update;
@@ -0,0 +1,15 @@
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
+ export declare class SharedTSCompilationState {
9
+ #private;
10
+ get waitUntilReady(): Promise<boolean>;
11
+ markAsReady(hasErrors: boolean): void;
12
+ markAsInProgress(): void;
13
+ dispose(): void;
14
+ }
15
+ export declare function getSharedCompilationState(): SharedTSCompilationState;
@@ -0,0 +1,44 @@
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
+ exports.getSharedCompilationState = exports.SharedTSCompilationState = void 0;
11
+ class SharedTSCompilationState {
12
+ #pendingCompilation = true;
13
+ #resolveCompilationReady;
14
+ #compilationReadyPromise;
15
+ #hasErrors = true;
16
+ get waitUntilReady() {
17
+ if (!this.#pendingCompilation) {
18
+ return Promise.resolve(this.#hasErrors);
19
+ }
20
+ this.#compilationReadyPromise ??= new Promise((resolve) => {
21
+ this.#resolveCompilationReady = resolve;
22
+ });
23
+ return this.#compilationReadyPromise;
24
+ }
25
+ markAsReady(hasErrors) {
26
+ this.#hasErrors = hasErrors;
27
+ this.#resolveCompilationReady?.(hasErrors);
28
+ this.#compilationReadyPromise = undefined;
29
+ this.#pendingCompilation = false;
30
+ }
31
+ markAsInProgress() {
32
+ this.#pendingCompilation = true;
33
+ }
34
+ dispose() {
35
+ this.markAsReady(true);
36
+ globalSharedCompilationState = undefined;
37
+ }
38
+ }
39
+ exports.SharedTSCompilationState = SharedTSCompilationState;
40
+ let globalSharedCompilationState;
41
+ function getSharedCompilationState() {
42
+ return (globalSharedCompilationState ??= new SharedTSCompilationState());
43
+ }
44
+ exports.getSharedCompilationState = getSharedCompilationState;
@@ -0,0 +1,27 @@
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 { Plugin } from 'esbuild';
9
+ import { LoadResultCache } from '../load-result-cache';
10
+ import { BundleStylesheetOptions } from '../stylesheets/bundle-options';
11
+ import { SourceFileCache } from './source-file-cache';
12
+ export interface CompilerPluginOptions {
13
+ sourcemap: boolean;
14
+ tsconfig: string;
15
+ jit?: boolean;
16
+ /** Skip TypeScript compilation setup. This is useful to re-use the TypeScript compilation from another plugin. */
17
+ noopTypeScriptCompilation?: boolean;
18
+ advancedOptimizations?: boolean;
19
+ thirdPartySourcemaps?: boolean;
20
+ fileReplacements?: Record<string, string>;
21
+ sourceFileCache?: SourceFileCache;
22
+ loadResultCache?: LoadResultCache;
23
+ incremental: boolean;
24
+ }
25
+ export declare function createCompilerPlugin(pluginOptions: CompilerPluginOptions, styleOptions: BundleStylesheetOptions & {
26
+ inlineStyleLanguage: string;
27
+ }): Plugin;