@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,282 @@
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.StylesheetPluginFactory = void 0;
37
+ const fast_glob_1 = __importDefault(require("fast-glob"));
38
+ const node_assert_1 = __importDefault(require("node:assert"));
39
+ const promises_1 = require("node:fs/promises");
40
+ const node_path_1 = require("node:path");
41
+ const load_result_cache_1 = require("../load-result-cache");
42
+ /**
43
+ * The lazy-loaded instance of the postcss stylesheet postprocessor.
44
+ * It is only imported and initialized if postcss is needed.
45
+ */
46
+ let postcss;
47
+ /**
48
+ * An array of keywords that indicate Tailwind CSS processing is required for a stylesheet.
49
+ *
50
+ * Based on https://tailwindcss.com/docs/functions-and-directives
51
+ */
52
+ const TAILWIND_KEYWORDS = [
53
+ '@tailwind',
54
+ '@layer',
55
+ '@apply',
56
+ '@config',
57
+ 'theme(',
58
+ 'screen(',
59
+ '@screen', // Undocumented in version 3, see: https://github.com/tailwindlabs/tailwindcss/discussions/7516.
60
+ ];
61
+ /**
62
+ * Cached postcss instances that can be re-used between various StylesheetPluginFactory instances.
63
+ */
64
+ const postcssProcessor = new Map();
65
+ class StylesheetPluginFactory {
66
+ options;
67
+ cache;
68
+ postcssProcessor;
69
+ constructor(options, cache) {
70
+ this.options = options;
71
+ this.cache = cache;
72
+ }
73
+ create(language) {
74
+ // Return a noop plugin if no load actions are required
75
+ if (!language.process &&
76
+ !this.options.postcssConfiguration &&
77
+ !this.options.tailwindConfiguration) {
78
+ return {
79
+ name: 'angular-' + language.name,
80
+ setup() { },
81
+ };
82
+ }
83
+ const { cache, options } = this;
84
+ const setupPostcss = async () => {
85
+ // Return already created processor if present
86
+ if (this.postcssProcessor) {
87
+ return this.postcssProcessor;
88
+ }
89
+ if (options.postcssConfiguration) {
90
+ const postCssInstanceKey = JSON.stringify(options.postcssConfiguration);
91
+ this.postcssProcessor = postcssProcessor.get(postCssInstanceKey)?.deref();
92
+ if (!this.postcssProcessor) {
93
+ postcss ??= (await Promise.resolve().then(() => __importStar(require('postcss')))).default;
94
+ this.postcssProcessor = postcss();
95
+ for (const [pluginName, pluginOptions] of options.postcssConfiguration.plugins) {
96
+ const { default: plugin } = await Promise.resolve(`${pluginName}`).then(s => __importStar(require(s)));
97
+ if (typeof plugin !== 'function' || plugin.postcss !== true) {
98
+ throw new Error(`Attempted to load invalid Postcss plugin: "${pluginName}"`);
99
+ }
100
+ this.postcssProcessor.use(plugin(pluginOptions));
101
+ }
102
+ postcssProcessor.set(postCssInstanceKey, new WeakRef(this.postcssProcessor));
103
+ }
104
+ }
105
+ else if (options.tailwindConfiguration) {
106
+ const { package: tailwindPackage, file: config } = options.tailwindConfiguration;
107
+ const postCssInstanceKey = tailwindPackage + ':' + config;
108
+ this.postcssProcessor = postcssProcessor.get(postCssInstanceKey)?.deref();
109
+ if (!this.postcssProcessor) {
110
+ postcss ??= (await Promise.resolve().then(() => __importStar(require('postcss')))).default;
111
+ const tailwind = await Promise.resolve(`${tailwindPackage}`).then(s => __importStar(require(s)));
112
+ this.postcssProcessor = postcss().use(tailwind.default({ config }));
113
+ postcssProcessor.set(postCssInstanceKey, new WeakRef(this.postcssProcessor));
114
+ }
115
+ }
116
+ return this.postcssProcessor;
117
+ };
118
+ return {
119
+ name: 'angular-' + language.name,
120
+ async setup(build) {
121
+ // Setup postcss if needed
122
+ const postcssProcessor = await setupPostcss();
123
+ // Add a load callback to support inline Component styles
124
+ build.onLoad({ filter: language.componentFilter, namespace: 'angular:styles/component' }, (0, load_result_cache_1.createCachedLoad)(cache, (args) => {
125
+ const data = options.inlineComponentData?.[args.path];
126
+ (0, node_assert_1.default)(typeof data === 'string', `component style name should always be found [${args.path}]`);
127
+ const [format, , filename] = args.path.split(';', 3);
128
+ return processStylesheet(language, data, filename, format, options, build, postcssProcessor);
129
+ }));
130
+ // Add a load callback to support files from disk
131
+ build.onLoad({ filter: language.fileFilter }, (0, load_result_cache_1.createCachedLoad)(cache, async (args) => {
132
+ const data = await (0, promises_1.readFile)(args.path, 'utf-8');
133
+ return processStylesheet(language, data, args.path, (0, node_path_1.extname)(args.path).toLowerCase().slice(1), options, build, postcssProcessor);
134
+ }));
135
+ },
136
+ };
137
+ }
138
+ }
139
+ exports.StylesheetPluginFactory = StylesheetPluginFactory;
140
+ async function processStylesheet(language, data, filename, format, options, build, postcssProcessor) {
141
+ let result;
142
+ // Process the input data if the language requires preprocessing
143
+ if (language.process) {
144
+ result = await language.process(data, filename, format, options, build);
145
+ }
146
+ else {
147
+ result = {
148
+ contents: data,
149
+ loader: 'css',
150
+ watchFiles: [filename],
151
+ };
152
+ }
153
+ // Return early if there are no contents to further process or there are errors
154
+ if (!result.contents || result.errors?.length) {
155
+ return result;
156
+ }
157
+ // Only use postcss if Tailwind processing is required or custom postcss is present.
158
+ if (postcssProcessor && (options.postcssConfiguration || hasTailwindKeywords(result.contents))) {
159
+ const postcssResult = await compileString(typeof result.contents === 'string'
160
+ ? result.contents
161
+ : Buffer.from(result.contents).toString('utf-8'), filename, postcssProcessor, options);
162
+ // Merge results
163
+ if (postcssResult.errors?.length) {
164
+ delete result.contents;
165
+ }
166
+ if (result.warnings && postcssResult.warnings) {
167
+ postcssResult.warnings.unshift(...result.warnings);
168
+ }
169
+ if (result.watchFiles && postcssResult.watchFiles) {
170
+ postcssResult.watchFiles.unshift(...result.watchFiles);
171
+ }
172
+ if (result.watchDirs && postcssResult.watchDirs) {
173
+ postcssResult.watchDirs.unshift(...result.watchDirs);
174
+ }
175
+ result = {
176
+ ...result,
177
+ ...postcssResult,
178
+ };
179
+ }
180
+ return result;
181
+ }
182
+ /**
183
+ * Searches the provided contents for keywords that indicate Tailwind is used
184
+ * within a stylesheet.
185
+ * @param contents A string or Uint8Array containing UTF-8 text.
186
+ * @returns True, if the contents contains tailwind keywords; False, otherwise.
187
+ */
188
+ function hasTailwindKeywords(contents) {
189
+ // TODO: use better search algorithm for keywords
190
+ if (typeof contents === 'string') {
191
+ return TAILWIND_KEYWORDS.some((keyword) => contents.includes(keyword));
192
+ }
193
+ // Contents is a Uint8Array
194
+ const data = contents instanceof Buffer ? contents : Buffer.from(contents);
195
+ return TAILWIND_KEYWORDS.some((keyword) => data.includes(keyword));
196
+ }
197
+ /**
198
+ * Compiles the provided CSS stylesheet data using a provided postcss processor and provides an
199
+ * esbuild load result that can be used directly by an esbuild Plugin.
200
+ * @param data The stylesheet content to process.
201
+ * @param filename The name of the file that contains the data.
202
+ * @param postcssProcessor A postcss processor instance to use.
203
+ * @param options The plugin options to control the processing.
204
+ * @returns An esbuild OnLoaderResult object with the processed content, warnings, and/or errors.
205
+ */
206
+ async function compileString(data, filename, postcssProcessor, options) {
207
+ try {
208
+ const postcssResult = await postcssProcessor.process(data, {
209
+ from: filename,
210
+ to: filename,
211
+ map: options.sourcemap && {
212
+ inline: true,
213
+ sourcesContent: true,
214
+ },
215
+ });
216
+ const loadResult = {
217
+ contents: postcssResult.css,
218
+ loader: 'css',
219
+ };
220
+ const rawWarnings = postcssResult.warnings();
221
+ if (rawWarnings.length > 0) {
222
+ const lineMappings = new Map();
223
+ loadResult.warnings = rawWarnings.map((warning) => {
224
+ const file = warning.node.source?.input.file;
225
+ if (file === undefined) {
226
+ return { text: warning.text };
227
+ }
228
+ let lines = lineMappings.get(file);
229
+ if (lines === undefined) {
230
+ lines = warning.node.source?.input.css.split(/\r?\n/);
231
+ lineMappings.set(file, lines ?? null);
232
+ }
233
+ return {
234
+ text: warning.text,
235
+ location: {
236
+ file,
237
+ line: warning.line,
238
+ column: warning.column - 1,
239
+ lineText: lines?.[warning.line - 1],
240
+ },
241
+ };
242
+ });
243
+ }
244
+ for (const resultMessage of postcssResult.messages) {
245
+ if (resultMessage.type === 'dependency' && typeof resultMessage['file'] === 'string') {
246
+ loadResult.watchFiles ??= [];
247
+ loadResult.watchFiles.push(resultMessage['file']);
248
+ }
249
+ else if (resultMessage.type === 'dir-dependency' &&
250
+ typeof resultMessage['dir'] === 'string' &&
251
+ typeof resultMessage['glob'] === 'string') {
252
+ loadResult.watchFiles ??= [];
253
+ const dependencies = await (0, fast_glob_1.default)(resultMessage['glob'], {
254
+ absolute: true,
255
+ cwd: resultMessage['dir'],
256
+ });
257
+ loadResult.watchFiles.push(...dependencies);
258
+ }
259
+ }
260
+ return loadResult;
261
+ }
262
+ catch (error) {
263
+ postcss ??= (await Promise.resolve().then(() => __importStar(require('postcss')))).default;
264
+ if (error instanceof postcss.CssSyntaxError) {
265
+ const lines = error.source?.split(/\r?\n/);
266
+ return {
267
+ errors: [
268
+ {
269
+ text: error.reason,
270
+ location: {
271
+ file: error.file,
272
+ line: error.line,
273
+ column: error.column && error.column - 1,
274
+ lineText: error.line === undefined ? undefined : lines?.[error.line - 1],
275
+ },
276
+ },
277
+ ],
278
+ };
279
+ }
280
+ throw error;
281
+ }
282
+ }
@@ -0,0 +1,49 @@
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 { BuilderContext } from '@angular-devkit/architect';
9
+ import { BuildOptions, Metafile, OutputFile } from 'esbuild';
10
+ import { NormalizedApplicationBuildOptions, NormalizedOutputOptions } from '../../builders/application/options';
11
+ import { BudgetCalculatorResult } from '../../utils/bundle-calculator';
12
+ import { BuildOutputFile, BuildOutputFileType, InitialFileRecord } from './bundler-context';
13
+ import { BuildOutputAsset, ExecutionResult } from './bundler-execution-result';
14
+ export declare function logBuildStats(metafile: Metafile, initial: Map<string, InitialFileRecord>, budgetFailures: BudgetCalculatorResult[] | undefined, colors: boolean, changedFiles?: Set<string>, estimatedTransferSizes?: Map<string, number>, ssrOutputEnabled?: boolean, verbose?: boolean): string;
15
+ export declare function calculateEstimatedTransferSizes(outputFiles: OutputFile[]): Promise<Map<string, number>>;
16
+ export declare function withSpinner<T>(text: string, action: () => T | Promise<T>): Promise<T>;
17
+ export declare function withNoProgress<T>(text: string, action: () => T | Promise<T>): Promise<T>;
18
+ /**
19
+ * Generates a syntax feature object map for Angular applications based on a list of targets.
20
+ * A full set of feature names can be found here: https://esbuild.github.io/api/#supported
21
+ * @param target An array of browser/engine targets in the format accepted by the esbuild `target` option.
22
+ * @param nativeAsyncAwait Indicate whether to support native async/await.
23
+ * @returns An object that can be used with the esbuild build `supported` option.
24
+ */
25
+ export declare function getFeatureSupport(target: string[], nativeAsyncAwait: boolean): BuildOptions['supported'];
26
+ export declare function writeResultFiles(outputFiles: BuildOutputFile[], assetFiles: BuildOutputAsset[] | undefined, { base, browser, server }: NormalizedOutputOptions): Promise<void>;
27
+ export declare function emitFilesToDisk<T = BuildOutputAsset | BuildOutputFile>(files: T[], writeFileCallback: (file: T) => Promise<void>): Promise<void>;
28
+ export declare function createOutputFileFromText(path: string, text: string, type: BuildOutputFileType): BuildOutputFile;
29
+ export declare function createOutputFileFromData(path: string, data: Uint8Array, type: BuildOutputFileType): BuildOutputFile;
30
+ export declare function convertOutputFile(file: OutputFile, type: BuildOutputFileType): BuildOutputFile;
31
+ /**
32
+ * Transform browserlists result to esbuild target.
33
+ * @see https://esbuild.github.io/api/#target
34
+ */
35
+ export declare function transformSupportedBrowsersToTargets(supportedBrowsers: string[]): string[];
36
+ /**
37
+ * Transform supported Node.js versions to esbuild target.
38
+ * @see https://esbuild.github.io/api/#target
39
+ */
40
+ export declare function getSupportedNodeTargets(): string[];
41
+ export declare function createJsonBuildManifest(result: ExecutionResult, normalizedOptions: NormalizedApplicationBuildOptions): Promise<string>;
42
+ export declare function logMessages(logger: BuilderContext['logger'], executionResult: ExecutionResult, color?: boolean, jsonLogs?: boolean): Promise<void>;
43
+ /**
44
+ * Ascertain whether the application operates without `zone.js`, we currently rely on the polyfills setting to determine its status.
45
+ * If a file with an extension is provided or if `zone.js` is included in the polyfills, the application is deemed as not zoneless.
46
+ * @param polyfills An array of polyfills
47
+ * @returns true, when the application is considered as zoneless.
48
+ */
49
+ export declare function isZonelessApp(polyfills: string[] | undefined): boolean;