@angular-devkit/build-angular 16.1.0-rc.0 → 16.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (250) hide show
  1. package/package.json +21 -21
  2. package/plugins/karma.js +2 -2
  3. package/src/builders/browser/index.d.ts +1 -1
  4. package/src/builders/browser/index.js +5 -5
  5. package/src/builders/browser-esbuild/index.js +27 -376
  6. package/src/builders/browser-esbuild/options.js +2 -2
  7. package/src/builders/dev-server/load-proxy-config.d.ts +1 -6
  8. package/src/builders/dev-server/load-proxy-config.js +52 -13
  9. package/src/builders/dev-server/vite-server.js +3 -6
  10. package/src/builders/dev-server/webpack-server.d.ts +1 -1
  11. package/src/builders/dev-server/webpack-server.js +6 -6
  12. package/src/builders/extract-i18n/index.js +3 -3
  13. package/src/builders/karma/index.js +2 -2
  14. package/src/builders/server/index.js +4 -4
  15. package/src/tools/babel/plugins/adjust-static-class-members.js +354 -0
  16. package/src/tools/babel/plugins/adjust-typescript-enums.js +124 -0
  17. package/src/tools/babel/plugins/elide-angular-metadata.js +68 -0
  18. package/src/tools/babel/plugins/pure-toplevel-functions.js +91 -0
  19. package/src/tools/babel/presets/application.js +197 -0
  20. package/src/{babel → tools/babel}/webpack-loader.d.ts +1 -1
  21. package/src/tools/babel/webpack-loader.js +189 -0
  22. package/src/tools/esbuild/angular/angular-compilation.js +51 -0
  23. package/src/tools/esbuild/angular/angular-host.js +60 -0
  24. package/src/tools/esbuild/angular/aot-compilation.js +208 -0
  25. package/src/tools/esbuild/angular/compiler-plugin.js +314 -0
  26. package/src/tools/esbuild/angular/diagnostics.js +75 -0
  27. package/src/tools/esbuild/angular/jit-compilation.js +106 -0
  28. package/src/tools/esbuild/angular/jit-plugin-callbacks.js +113 -0
  29. package/src/tools/esbuild/angular/jit-resource-transformer.js +185 -0
  30. package/src/tools/esbuild/angular/uri.js +75 -0
  31. package/src/tools/esbuild/application-code-bundle.d.ts +11 -0
  32. package/src/tools/esbuild/application-code-bundle.js +111 -0
  33. package/src/{builders/browser-esbuild/esbuild.d.ts → tools/esbuild/bundler-context.d.ts} +1 -12
  34. package/src/tools/esbuild/bundler-context.js +194 -0
  35. package/src/tools/esbuild/bundler-execution-result.d.ts +44 -0
  36. package/src/tools/esbuild/bundler-execution-result.js +53 -0
  37. package/src/tools/esbuild/commonjs-checker.js +141 -0
  38. package/src/tools/esbuild/external-packages-plugin.d.ts +17 -0
  39. package/src/tools/esbuild/external-packages-plugin.js +49 -0
  40. package/src/{builders/browser-esbuild → tools/esbuild}/global-scripts.d.ts +1 -1
  41. package/src/tools/esbuild/global-scripts.js +139 -0
  42. package/src/{builders/browser-esbuild → tools/esbuild}/global-styles.d.ts +1 -1
  43. package/src/tools/esbuild/global-styles.js +67 -0
  44. package/src/tools/esbuild/index-html-generator.d.ts +12 -0
  45. package/src/tools/esbuild/index-html-generator.js +70 -0
  46. package/src/tools/esbuild/javascript-transformer-worker.js +76 -0
  47. package/src/tools/esbuild/javascript-transformer.js +108 -0
  48. package/src/tools/esbuild/license-extractor.js +159 -0
  49. package/src/tools/esbuild/load-result-cache.js +69 -0
  50. package/src/tools/esbuild/profiling.js +79 -0
  51. package/src/tools/esbuild/sourcemap-ignorelist-plugin.js +74 -0
  52. package/src/tools/esbuild/stylesheets/bundle-options.js +159 -0
  53. package/src/tools/esbuild/stylesheets/css-language.js +16 -0
  54. package/src/tools/esbuild/stylesheets/css-resource-plugin.js +88 -0
  55. package/src/tools/esbuild/stylesheets/less-language.js +127 -0
  56. package/src/tools/esbuild/stylesheets/sass-language.js +169 -0
  57. package/src/tools/esbuild/stylesheets/stylesheet-plugin-factory.js +218 -0
  58. package/src/tools/esbuild/utils.d.ts +30 -0
  59. package/src/tools/esbuild/utils.js +192 -0
  60. package/src/tools/esbuild/virtual-module-plugin.js +43 -0
  61. package/src/tools/esbuild/watcher.js +105 -0
  62. package/src/tools/sass/rebasing-importer.js +445 -0
  63. package/src/tools/sass/sass-service-legacy.js +176 -0
  64. package/src/tools/sass/sass-service.js +214 -0
  65. package/src/tools/sass/worker-legacy.js +44 -0
  66. package/src/tools/sass/worker.js +158 -0
  67. package/src/{webpack → tools/webpack}/configs/common.d.ts +1 -1
  68. package/src/tools/webpack/configs/common.js +421 -0
  69. package/src/{webpack → tools/webpack}/configs/dev-server.d.ts +1 -1
  70. package/src/tools/webpack/configs/dev-server.js +304 -0
  71. package/src/{webpack → tools/webpack}/configs/index.js +1 -1
  72. package/src/{webpack → tools/webpack}/configs/styles.d.ts +1 -1
  73. package/src/tools/webpack/configs/styles.js +396 -0
  74. package/src/{webpack → tools/webpack}/plugins/any-component-style-budget-checker.d.ts +1 -1
  75. package/src/tools/webpack/plugins/any-component-style-budget-checker.js +92 -0
  76. package/src/tools/webpack/plugins/builder-watch-plugin.js +99 -0
  77. package/src/tools/webpack/plugins/common-js-usage-warn-plugin.js +121 -0
  78. package/src/tools/webpack/plugins/css-optimizer-plugin.js +123 -0
  79. package/src/tools/webpack/plugins/dedupe-module-resolve-plugin.js +75 -0
  80. package/src/tools/webpack/plugins/devtools-ignore-plugin.js +57 -0
  81. package/src/tools/webpack/plugins/esbuild-executor.js +121 -0
  82. package/src/tools/webpack/plugins/hmr/hmr-accept.js +185 -0
  83. package/src/tools/webpack/plugins/hmr/hmr-loader.js +25 -0
  84. package/src/{webpack → tools/webpack}/plugins/index-html-webpack-plugin.d.ts +1 -1
  85. package/src/tools/webpack/plugins/index-html-webpack-plugin.js +85 -0
  86. package/src/{webpack → tools/webpack}/plugins/index.js +1 -1
  87. package/src/tools/webpack/plugins/javascript-optimizer-plugin.js +166 -0
  88. package/src/tools/webpack/plugins/javascript-optimizer-worker.js +140 -0
  89. package/src/tools/webpack/plugins/json-stats-plugin.js +61 -0
  90. package/src/tools/webpack/plugins/karma/karma.js +270 -0
  91. package/src/tools/webpack/plugins/named-chunks-plugin.js +59 -0
  92. package/src/tools/webpack/plugins/occurrences-plugin.js +80 -0
  93. package/src/tools/webpack/plugins/postcss-cli-resources.js +176 -0
  94. package/src/tools/webpack/plugins/progress-plugin.js +39 -0
  95. package/src/tools/webpack/plugins/remove-hash-plugin.js +31 -0
  96. package/src/tools/webpack/plugins/scripts-webpack-plugin.js +180 -0
  97. package/src/tools/webpack/plugins/service-worker-plugin.js +46 -0
  98. package/src/tools/webpack/plugins/styles-webpack-plugin.js +73 -0
  99. package/src/tools/webpack/plugins/suppress-entry-chunks-webpack-plugin.js +52 -0
  100. package/src/tools/webpack/plugins/transfer-size-plugin.js +50 -0
  101. package/src/{webpack → tools/webpack}/plugins/typescript.d.ts +1 -1
  102. package/src/tools/webpack/plugins/typescript.js +51 -0
  103. package/src/tools/webpack/plugins/watch-files-logs-plugin.js +28 -0
  104. package/src/tools/webpack/utils/async-chunks.js +46 -0
  105. package/src/{webpack → tools/webpack}/utils/helpers.d.ts +2 -2
  106. package/src/tools/webpack/utils/helpers.js +293 -0
  107. package/src/{webpack → tools/webpack}/utils/stats.d.ts +2 -2
  108. package/src/tools/webpack/utils/stats.js +443 -0
  109. package/src/utils/bundle-calculator.js +2 -2
  110. package/src/utils/index-file/augment-index-html.d.ts +1 -1
  111. package/src/utils/index-file/augment-index-html.js +1 -1
  112. package/src/utils/normalize-asset-patterns.d.ts +1 -1
  113. package/src/utils/normalize-asset-patterns.js +1 -1
  114. package/src/utils/normalize-file-replacements.d.ts +1 -1
  115. package/src/utils/normalize-file-replacements.js +1 -1
  116. package/src/utils/package-chunk-sort.js +2 -2
  117. package/src/utils/webpack-browser-config.js +2 -2
  118. package/src/babel/plugins/adjust-static-class-members.js +0 -354
  119. package/src/babel/plugins/adjust-typescript-enums.js +0 -124
  120. package/src/babel/plugins/elide-angular-metadata.js +0 -68
  121. package/src/babel/plugins/pure-toplevel-functions.js +0 -91
  122. package/src/babel/presets/application.js +0 -197
  123. package/src/babel/webpack-loader.js +0 -189
  124. package/src/builders/browser-esbuild/angular/angular-compilation.js +0 -51
  125. package/src/builders/browser-esbuild/angular/angular-host.js +0 -60
  126. package/src/builders/browser-esbuild/angular/aot-compilation.js +0 -208
  127. package/src/builders/browser-esbuild/angular/compiler-plugin.js +0 -314
  128. package/src/builders/browser-esbuild/angular/diagnostics.js +0 -75
  129. package/src/builders/browser-esbuild/angular/jit-compilation.js +0 -106
  130. package/src/builders/browser-esbuild/angular/jit-plugin-callbacks.js +0 -113
  131. package/src/builders/browser-esbuild/angular/jit-resource-transformer.js +0 -185
  132. package/src/builders/browser-esbuild/angular/uri.js +0 -75
  133. package/src/builders/browser-esbuild/commonjs-checker.js +0 -141
  134. package/src/builders/browser-esbuild/esbuild.js +0 -206
  135. package/src/builders/browser-esbuild/global-scripts.js +0 -139
  136. package/src/builders/browser-esbuild/global-styles.js +0 -67
  137. package/src/builders/browser-esbuild/javascript-transformer-worker.js +0 -76
  138. package/src/builders/browser-esbuild/javascript-transformer.js +0 -108
  139. package/src/builders/browser-esbuild/license-extractor.js +0 -159
  140. package/src/builders/browser-esbuild/load-result-cache.js +0 -69
  141. package/src/builders/browser-esbuild/profiling.js +0 -79
  142. package/src/builders/browser-esbuild/sourcemap-ignorelist-plugin.js +0 -74
  143. package/src/builders/browser-esbuild/stylesheets/bundle-options.js +0 -159
  144. package/src/builders/browser-esbuild/stylesheets/css-language.js +0 -16
  145. package/src/builders/browser-esbuild/stylesheets/css-resource-plugin.js +0 -88
  146. package/src/builders/browser-esbuild/stylesheets/less-language.js +0 -127
  147. package/src/builders/browser-esbuild/stylesheets/sass-language.js +0 -169
  148. package/src/builders/browser-esbuild/stylesheets/stylesheet-plugin-factory.js +0 -218
  149. package/src/builders/browser-esbuild/virtual-module-plugin.js +0 -43
  150. package/src/builders/browser-esbuild/watcher.js +0 -105
  151. package/src/sass/rebasing-importer.js +0 -445
  152. package/src/sass/sass-service-legacy.js +0 -176
  153. package/src/sass/sass-service.js +0 -214
  154. package/src/sass/worker-legacy.js +0 -44
  155. package/src/sass/worker.js +0 -158
  156. package/src/webpack/configs/common.js +0 -421
  157. package/src/webpack/configs/dev-server.js +0 -304
  158. package/src/webpack/configs/styles.js +0 -396
  159. package/src/webpack/plugins/any-component-style-budget-checker.js +0 -92
  160. package/src/webpack/plugins/builder-watch-plugin.js +0 -99
  161. package/src/webpack/plugins/common-js-usage-warn-plugin.js +0 -121
  162. package/src/webpack/plugins/css-optimizer-plugin.js +0 -123
  163. package/src/webpack/plugins/dedupe-module-resolve-plugin.js +0 -75
  164. package/src/webpack/plugins/devtools-ignore-plugin.js +0 -57
  165. package/src/webpack/plugins/esbuild-executor.js +0 -121
  166. package/src/webpack/plugins/hmr/hmr-accept.js +0 -185
  167. package/src/webpack/plugins/hmr/hmr-loader.js +0 -25
  168. package/src/webpack/plugins/index-html-webpack-plugin.js +0 -85
  169. package/src/webpack/plugins/javascript-optimizer-plugin.js +0 -166
  170. package/src/webpack/plugins/javascript-optimizer-worker.js +0 -140
  171. package/src/webpack/plugins/json-stats-plugin.js +0 -61
  172. package/src/webpack/plugins/karma/karma.js +0 -270
  173. package/src/webpack/plugins/named-chunks-plugin.js +0 -59
  174. package/src/webpack/plugins/occurrences-plugin.js +0 -80
  175. package/src/webpack/plugins/postcss-cli-resources.js +0 -176
  176. package/src/webpack/plugins/progress-plugin.js +0 -39
  177. package/src/webpack/plugins/remove-hash-plugin.js +0 -31
  178. package/src/webpack/plugins/scripts-webpack-plugin.js +0 -180
  179. package/src/webpack/plugins/service-worker-plugin.js +0 -46
  180. package/src/webpack/plugins/styles-webpack-plugin.js +0 -73
  181. package/src/webpack/plugins/suppress-entry-chunks-webpack-plugin.js +0 -52
  182. package/src/webpack/plugins/transfer-size-plugin.js +0 -50
  183. package/src/webpack/plugins/typescript.js +0 -51
  184. package/src/webpack/plugins/watch-files-logs-plugin.js +0 -28
  185. package/src/webpack/utils/async-chunks.js +0 -46
  186. package/src/webpack/utils/helpers.js +0 -293
  187. package/src/webpack/utils/stats.js +0 -443
  188. /package/src/{babel → tools/babel}/babel-loader.d.ts +0 -0
  189. /package/src/{babel → tools/babel}/plugins/adjust-static-class-members.d.ts +0 -0
  190. /package/src/{babel → tools/babel}/plugins/adjust-typescript-enums.d.ts +0 -0
  191. /package/src/{babel → tools/babel}/plugins/elide-angular-metadata.d.ts +0 -0
  192. /package/src/{babel → tools/babel}/plugins/pure-toplevel-functions.d.ts +0 -0
  193. /package/src/{babel → tools/babel}/presets/application.d.ts +0 -0
  194. /package/src/{builders/browser-esbuild → tools/esbuild}/angular/angular-compilation.d.ts +0 -0
  195. /package/src/{builders/browser-esbuild → tools/esbuild}/angular/angular-host.d.ts +0 -0
  196. /package/src/{builders/browser-esbuild → tools/esbuild}/angular/aot-compilation.d.ts +0 -0
  197. /package/src/{builders/browser-esbuild → tools/esbuild}/angular/compiler-plugin.d.ts +0 -0
  198. /package/src/{builders/browser-esbuild → tools/esbuild}/angular/diagnostics.d.ts +0 -0
  199. /package/src/{builders/browser-esbuild → tools/esbuild}/angular/jit-compilation.d.ts +0 -0
  200. /package/src/{builders/browser-esbuild → tools/esbuild}/angular/jit-plugin-callbacks.d.ts +0 -0
  201. /package/src/{builders/browser-esbuild → tools/esbuild}/angular/jit-resource-transformer.d.ts +0 -0
  202. /package/src/{builders/browser-esbuild → tools/esbuild}/angular/uri.d.ts +0 -0
  203. /package/src/{builders/browser-esbuild → tools/esbuild}/commonjs-checker.d.ts +0 -0
  204. /package/src/{builders/browser-esbuild → tools/esbuild}/javascript-transformer-worker.d.ts +0 -0
  205. /package/src/{builders/browser-esbuild → tools/esbuild}/javascript-transformer.d.ts +0 -0
  206. /package/src/{builders/browser-esbuild → tools/esbuild}/license-extractor.d.ts +0 -0
  207. /package/src/{builders/browser-esbuild → tools/esbuild}/load-result-cache.d.ts +0 -0
  208. /package/src/{builders/browser-esbuild → tools/esbuild}/profiling.d.ts +0 -0
  209. /package/src/{builders/browser-esbuild → tools/esbuild}/sourcemap-ignorelist-plugin.d.ts +0 -0
  210. /package/src/{builders/browser-esbuild → tools/esbuild}/stylesheets/bundle-options.d.ts +0 -0
  211. /package/src/{builders/browser-esbuild → tools/esbuild}/stylesheets/css-language.d.ts +0 -0
  212. /package/src/{builders/browser-esbuild → tools/esbuild}/stylesheets/css-resource-plugin.d.ts +0 -0
  213. /package/src/{builders/browser-esbuild → tools/esbuild}/stylesheets/less-language.d.ts +0 -0
  214. /package/src/{builders/browser-esbuild → tools/esbuild}/stylesheets/sass-language.d.ts +0 -0
  215. /package/src/{builders/browser-esbuild → tools/esbuild}/stylesheets/stylesheet-plugin-factory.d.ts +0 -0
  216. /package/src/{builders/browser-esbuild → tools/esbuild}/virtual-module-plugin.d.ts +0 -0
  217. /package/src/{builders/browser-esbuild → tools/esbuild}/watcher.d.ts +0 -0
  218. /package/src/{sass → tools/sass}/rebasing-importer.d.ts +0 -0
  219. /package/src/{sass → tools/sass}/sass-service-legacy.d.ts +0 -0
  220. /package/src/{sass → tools/sass}/sass-service.d.ts +0 -0
  221. /package/src/{sass → tools/sass}/worker-legacy.d.ts +0 -0
  222. /package/src/{sass → tools/sass}/worker.d.ts +0 -0
  223. /package/src/{webpack → tools/webpack}/configs/index.d.ts +0 -0
  224. /package/src/{webpack → tools/webpack}/plugins/builder-watch-plugin.d.ts +0 -0
  225. /package/src/{webpack → tools/webpack}/plugins/common-js-usage-warn-plugin.d.ts +0 -0
  226. /package/src/{webpack → tools/webpack}/plugins/css-optimizer-plugin.d.ts +0 -0
  227. /package/src/{webpack → tools/webpack}/plugins/dedupe-module-resolve-plugin.d.ts +0 -0
  228. /package/src/{webpack → tools/webpack}/plugins/devtools-ignore-plugin.d.ts +0 -0
  229. /package/src/{webpack → tools/webpack}/plugins/esbuild-executor.d.ts +0 -0
  230. /package/src/{webpack → tools/webpack}/plugins/hmr/hmr-accept.d.ts +0 -0
  231. /package/src/{webpack → tools/webpack}/plugins/hmr/hmr-loader.d.ts +0 -0
  232. /package/src/{webpack → tools/webpack}/plugins/index.d.ts +0 -0
  233. /package/src/{webpack → tools/webpack}/plugins/javascript-optimizer-plugin.d.ts +0 -0
  234. /package/src/{webpack → tools/webpack}/plugins/javascript-optimizer-worker.d.ts +0 -0
  235. /package/src/{webpack → tools/webpack}/plugins/json-stats-plugin.d.ts +0 -0
  236. /package/src/{webpack → tools/webpack}/plugins/karma/karma-context.html +0 -0
  237. /package/src/{webpack → tools/webpack}/plugins/karma/karma-debug.html +0 -0
  238. /package/src/{webpack → tools/webpack}/plugins/karma/karma.d.ts +0 -0
  239. /package/src/{webpack → tools/webpack}/plugins/named-chunks-plugin.d.ts +0 -0
  240. /package/src/{webpack → tools/webpack}/plugins/occurrences-plugin.d.ts +0 -0
  241. /package/src/{webpack → tools/webpack}/plugins/postcss-cli-resources.d.ts +0 -0
  242. /package/src/{webpack → tools/webpack}/plugins/progress-plugin.d.ts +0 -0
  243. /package/src/{webpack → tools/webpack}/plugins/remove-hash-plugin.d.ts +0 -0
  244. /package/src/{webpack → tools/webpack}/plugins/scripts-webpack-plugin.d.ts +0 -0
  245. /package/src/{webpack → tools/webpack}/plugins/service-worker-plugin.d.ts +0 -0
  246. /package/src/{webpack → tools/webpack}/plugins/styles-webpack-plugin.d.ts +0 -0
  247. /package/src/{webpack → tools/webpack}/plugins/suppress-entry-chunks-webpack-plugin.d.ts +0 -0
  248. /package/src/{webpack → tools/webpack}/plugins/transfer-size-plugin.d.ts +0 -0
  249. /package/src/{webpack → tools/webpack}/plugins/watch-files-logs-plugin.d.ts +0 -0
  250. /package/src/{webpack → tools/webpack}/utils/async-chunks.d.ts +0 -0
@@ -0,0 +1,159 @@
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.extractLicenses = void 0;
14
+ const promises_1 = require("node:fs/promises");
15
+ const node_path_1 = __importDefault(require("node:path"));
16
+ /**
17
+ * The path segment used to signify that a file is part of a package.
18
+ */
19
+ const NODE_MODULE_SEGMENT = 'node_modules';
20
+ /**
21
+ * String constant for the NPM recommended custom license wording.
22
+ *
23
+ * See: https://docs.npmjs.com/cli/v9/configuring-npm/package-json#license
24
+ *
25
+ * Example:
26
+ * ```
27
+ * {
28
+ * "license" : "SEE LICENSE IN <filename>"
29
+ * }
30
+ * ```
31
+ */
32
+ const CUSTOM_LICENSE_TEXT = 'SEE LICENSE IN ';
33
+ /**
34
+ * A list of commonly named license files found within packages.
35
+ */
36
+ const LICENSE_FILES = ['LICENSE', 'LICENSE.txt', 'LICENSE.md'];
37
+ /**
38
+ * Header text that will be added to the top of the output license extraction file.
39
+ */
40
+ const EXTRACTION_FILE_HEADER = '';
41
+ /**
42
+ * The package entry separator to use within the output license extraction file.
43
+ */
44
+ const EXTRACTION_FILE_SEPARATOR = '-'.repeat(80) + '\n';
45
+ /**
46
+ * Extracts license information for each node module package included in the output
47
+ * files of the built code. This includes JavaScript and CSS output files. The esbuild
48
+ * metafile generated during the bundling steps is used as the source of information
49
+ * regarding what input files where included and where they are located. A path segment
50
+ * of `node_modules` is used to indicate that a file belongs to a package and its license
51
+ * should be include in the output licenses file.
52
+ *
53
+ * The package name and license field are extracted from the `package.json` file for the
54
+ * package. If a license file (e.g., `LICENSE`) is present in the root of the package, it
55
+ * will also be included in the output licenses file.
56
+ *
57
+ * @param metafile An esbuild metafile object.
58
+ * @param rootDirectory The root directory of the workspace.
59
+ * @returns A string containing the content of the output licenses file.
60
+ */
61
+ async function extractLicenses(metafile, rootDirectory) {
62
+ let extractedLicenseContent = `${EXTRACTION_FILE_HEADER}\n${EXTRACTION_FILE_SEPARATOR}`;
63
+ const seenPaths = new Set();
64
+ const seenPackages = new Set();
65
+ for (const entry of Object.values(metafile.outputs)) {
66
+ for (const [inputPath, { bytesInOutput }] of Object.entries(entry.inputs)) {
67
+ // Skip if not included in output
68
+ if (bytesInOutput <= 0) {
69
+ continue;
70
+ }
71
+ // Skip already processed paths
72
+ if (seenPaths.has(inputPath)) {
73
+ continue;
74
+ }
75
+ seenPaths.add(inputPath);
76
+ // Skip non-package paths
77
+ if (!inputPath.includes(NODE_MODULE_SEGMENT)) {
78
+ continue;
79
+ }
80
+ // Extract the package name from the path
81
+ let baseDirectory = node_path_1.default.join(rootDirectory, inputPath);
82
+ let nameOrScope, nameOrFile;
83
+ let found = false;
84
+ while (baseDirectory !== node_path_1.default.dirname(baseDirectory)) {
85
+ const segment = node_path_1.default.basename(baseDirectory);
86
+ if (segment === NODE_MODULE_SEGMENT) {
87
+ found = true;
88
+ break;
89
+ }
90
+ nameOrFile = nameOrScope;
91
+ nameOrScope = segment;
92
+ baseDirectory = node_path_1.default.dirname(baseDirectory);
93
+ }
94
+ // Skip non-package path edge cases that are not caught in the includes check above
95
+ if (!found || !nameOrScope) {
96
+ continue;
97
+ }
98
+ const packageName = nameOrScope.startsWith('@')
99
+ ? `${nameOrScope}/${nameOrFile}`
100
+ : nameOrScope;
101
+ const packageDirectory = node_path_1.default.join(baseDirectory, packageName);
102
+ // Load the package's metadata to find the package's name, version, and license type
103
+ const packageJsonPath = node_path_1.default.join(packageDirectory, 'package.json');
104
+ let packageJson;
105
+ try {
106
+ packageJson = JSON.parse(await (0, promises_1.readFile)(packageJsonPath, 'utf-8'));
107
+ }
108
+ catch {
109
+ // Invalid package
110
+ continue;
111
+ }
112
+ // Skip already processed packages
113
+ const packageId = `${packageName}@${packageJson.version}`;
114
+ if (seenPackages.has(packageId)) {
115
+ continue;
116
+ }
117
+ seenPackages.add(packageId);
118
+ // Attempt to find license text inside package
119
+ let licenseText = '';
120
+ if (typeof packageJson.license === 'string' &&
121
+ packageJson.license.toLowerCase().startsWith(CUSTOM_LICENSE_TEXT)) {
122
+ // Attempt to load the package's custom license
123
+ let customLicensePath;
124
+ const customLicenseFile = node_path_1.default.normalize(packageJson.license.slice(CUSTOM_LICENSE_TEXT.length + 1).trim());
125
+ if (customLicenseFile.startsWith('..') || node_path_1.default.isAbsolute(customLicenseFile)) {
126
+ // Path is attempting to access files outside of the package
127
+ // TODO: Issue warning?
128
+ }
129
+ else {
130
+ customLicensePath = node_path_1.default.join(packageDirectory, customLicenseFile);
131
+ try {
132
+ licenseText = await (0, promises_1.readFile)(customLicensePath, 'utf-8');
133
+ break;
134
+ }
135
+ catch { }
136
+ }
137
+ }
138
+ else {
139
+ // Search for a license file within the root of the package
140
+ for (const potentialLicense of LICENSE_FILES) {
141
+ const packageLicensePath = node_path_1.default.join(packageDirectory, potentialLicense);
142
+ try {
143
+ licenseText = await (0, promises_1.readFile)(packageLicensePath, 'utf-8');
144
+ break;
145
+ }
146
+ catch { }
147
+ }
148
+ }
149
+ // Generate the package's license entry in the output content
150
+ extractedLicenseContent += `Package: ${packageJson.name}\n`;
151
+ extractedLicenseContent += `License: ${JSON.stringify(packageJson.license, null, 2)}\n`;
152
+ extractedLicenseContent += `\n${licenseText}\n`;
153
+ extractedLicenseContent += EXTRACTION_FILE_SEPARATOR;
154
+ }
155
+ }
156
+ return extractedLicenseContent;
157
+ }
158
+ exports.extractLicenses = extractLicenses;
159
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGljZW5zZS1leHRyYWN0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9hbmd1bGFyX2RldmtpdC9idWlsZF9hbmd1bGFyL3NyYy90b29scy9lc2J1aWxkL2xpY2Vuc2UtZXh0cmFjdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7O0dBTUc7Ozs7OztBQUdILCtDQUE0QztBQUM1QywwREFBNkI7QUFFN0I7O0dBRUc7QUFDSCxNQUFNLG1CQUFtQixHQUFHLGNBQWMsQ0FBQztBQUUzQzs7Ozs7Ozs7Ozs7R0FXRztBQUNILE1BQU0sbUJBQW1CLEdBQUcsaUJBQWlCLENBQUM7QUFFOUM7O0dBRUc7QUFDSCxNQUFNLGFBQWEsR0FBRyxDQUFDLFNBQVMsRUFBRSxhQUFhLEVBQUUsWUFBWSxDQUFDLENBQUM7QUFFL0Q7O0dBRUc7QUFDSCxNQUFNLHNCQUFzQixHQUFHLEVBQUUsQ0FBQztBQUVsQzs7R0FFRztBQUNILE1BQU0seUJBQXlCLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUM7QUFFeEQ7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBQ0ksS0FBSyxVQUFVLGVBQWUsQ0FBQyxRQUFrQixFQUFFLGFBQXFCO0lBQzdFLElBQUksdUJBQXVCLEdBQUcsR0FBRyxzQkFBc0IsS0FBSyx5QkFBeUIsRUFBRSxDQUFDO0lBRXhGLE1BQU0sU0FBUyxHQUFHLElBQUksR0FBRyxFQUFVLENBQUM7SUFDcEMsTUFBTSxZQUFZLEdBQUcsSUFBSSxHQUFHLEVBQVUsQ0FBQztJQUV2QyxLQUFLLE1BQU0sS0FBSyxJQUFJLE1BQU0sQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFFO1FBQ25ELEtBQUssTUFBTSxDQUFDLFNBQVMsRUFBRSxFQUFFLGFBQWEsRUFBRSxDQUFDLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENB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QkFBaUIsQ0FBQyxFQUFFO29CQUM1RSw0REFBNEQ7b0JBQzVELHVCQUF1QjtpQkFDeEI7cUJBQU07b0JBQ0wsaUJBQWlCLEdBQUcsbUJBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsaUJBQWlCLENBQUMsQ0FBQztvQkFDbkUsSUFBSTt3QkFDRixXQUFXLEdBQUcsTUFBTSxJQUFBLG1CQUFRLEVBQUMsaUJBQWlCLEVBQUUsT0FBTyxDQUFDLENBQUM7d0JBQ3pELE1BQU07cUJBQ1A7b0JBQUMsTUFBTSxHQUFFO2lCQUNYO2FBQ0Y7aUJBQU07Z0JBQ0wsMkRBQTJEO2dCQUMzRCxLQUFLLE1BQU0sZ0JBQWdCLElBQUksYUFBYSxFQUFFO29CQUM1QyxNQUFNLGtCQUFrQixHQUFHLG1CQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLGdCQUFnQixDQUFDLENBQUM7b0JBQ3pFLElBQUk7d0JBQ0YsV0FBVyxHQUFHLE1BQU0sSUFBQSxtQkFBUSxFQUFDLGtCQUFrQixFQUFFLE9BQU8sQ0FBQyxDQUFDO3dCQUMxRCxNQUFNO3FCQUNQO29CQUFDLE1BQU0sR0FBRTtpQkFDWDthQUNGO1lBRUQsNkRBQTZEO1lBQzdELHVCQUF1QixJQUFJLFlBQVksV0FBVyxDQUFDLElBQUksSUFBSSxDQUFDO1lBQzVELHVCQUF1QixJQUFJLFlBQVksSUFBSSxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDO1lBQ3hGLHVCQUF1QixJQUFJLEtBQUssV0FBVyxJQUFJLENBQUM7WUFDaEQsdUJBQXVCLElBQUkseUJBQXlCLENBQUM7U0FDdEQ7S0FDRjtJQUVELE9BQU8sdUJBQXVCLENBQUM7QUFDakMsQ0FBQztBQWpIRCwwQ0FpSEMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBNZXRhZmlsZSB9IGZyb20gJ2VzYnVpbGQnO1xuaW1wb3J0IHsgcmVhZEZpbGUgfSBmcm9tICdub2RlOmZzL3Byb21pc2VzJztcbmltcG9ydCBwYXRoIGZyb20gJ25vZGU6cGF0aCc7XG5cbi8qKlxuICogVGhlIHBhdGggc2VnbWVudCB1c2VkIHRvIHNpZ25pZnkgdGhhdCBhIGZpbGUgaXMgcGFydCBvZiBhIHBhY2thZ2UuXG4gKi9cbmNvbnN0IE5PREVfTU9EVUxFX1NFR01FTlQgPSAnbm9kZV9tb2R1bGVzJztcblxuLyoqXG4gKiBTdHJpbmcgY29uc3RhbnQgZm9yIHRoZSBOUE0gcmVjb21tZW5kZWQgY3VzdG9tIGxpY2Vuc2Ugd29yZGluZy5cbiAqXG4gKiBTZWU6IGh0dHBzOi8vZG9jcy5ucG1qcy5jb20vY2xpL3Y5L2NvbmZpZ3VyaW5nLW5wbS9wYWNrYWdlLWpzb24jbGljZW5zZVxuICpcbiAqIEV4YW1wbGU6XG4gKiBgYGBcbiAqIHtcbiAqICAgXCJsaWNlbnNlXCIgOiBcIlNFRSBMSUNFTlNFIElOIDxmaWxlbmFtZT5cIlxuICogfVxuICogYGBgXG4gKi9cbmNvbnN0IENVU1RPTV9MSUNFTlNFX1RFWFQgPSAnU0VFIExJQ0VOU0UgSU4gJztcblxuLyoqXG4gKiBBIGxpc3Qgb2YgY29tbW9ubHkgbmFtZWQgbGljZW5zZSBmaWxlcyBmb3VuZCB3aXRoaW4gcGFja2FnZXMuXG4gKi9cbmNvbnN0IExJQ0VOU0VfRklMRVMgPSBbJ0xJQ0VOU0UnLCAnTElDRU5TRS50eHQnLCAnTElDRU5TRS5tZCddO1xuXG4vKipcbiAqIEhlYWRlciB0ZXh0IHRoYXQgd2lsbCBiZSBhZGRlZCB0byB0aGUgdG9wIG9mIHRoZSBvdXRwdXQgbGljZW5zZSBleHRyYWN0aW9uIGZpbGUuXG4gKi9cbmNvbnN0IEVYVFJBQ1RJT05fRklMRV9IRUFERVIgPSAnJztcblxuLyoqXG4gKiBUaGUgcGFja2FnZSBlbnRyeSBzZXBhcmF0b3IgdG8gdXNlIHdpdGhpbiB0aGUgb3V0cHV0IGxpY2Vuc2UgZXh0cmFjdGlvbiBmaWxlLlxuICovXG5jb25zdCBFWFRSQUNUSU9OX0ZJTEVfU0VQQVJBVE9SID0gJy0nLnJlcGVhdCg4MCkgKyAnXFxuJztcblxuLyoqXG4gKiBFeHRyYWN0cyBsaWNlbnNlIGluZm9ybWF0aW9uIGZvciBlYWNoIG5vZGUgbW9kdWxlIHBhY2thZ2UgaW5jbHVkZWQgaW4gdGhlIG91dHB1dFxuICogZmlsZXMgb2YgdGhlIGJ1aWx0IGNvZGUuIFRoaXMgaW5jbHVkZXMgSmF2YVNjcmlwdCBhbmQgQ1NTIG91dHB1dCBmaWxlcy4gVGhlIGVzYnVpbGRcbiAqIG1ldGFmaWxlIGdlbmVyYXRlZCBkdXJpbmcgdGhlIGJ1bmRsaW5nIHN0ZXBzIGlzIHVzZWQgYXMgdGhlIHNvdXJjZSBvZiBpbmZvcm1hdGlvblxuICogcmVnYXJkaW5nIHdoYXQgaW5wdXQgZmlsZXMgd2hlcmUgaW5jbHVkZWQgYW5kIHdoZXJlIHRoZXkgYXJlIGxvY2F0ZWQuIEEgcGF0aCBzZWdtZW50XG4gKiBvZiBgbm9kZV9tb2R1bGVzYCBpcyB1c2VkIHRvIGluZGljYXRlIHRoYXQgYSBmaWxlIGJlbG9uZ3MgdG8gYSBwYWNrYWdlIGFuZCBpdHMgbGljZW5zZVxuICogc2hvdWxkIGJlIGluY2x1ZGUgaW4gdGhlIG91dHB1dCBsaWNlbnNlcyBmaWxlLlxuICpcbiAqIFRoZSBwYWNrYWdlIG5hbWUgYW5kIGxpY2Vuc2UgZmllbGQgYXJlIGV4dHJhY3RlZCBmcm9tIHRoZSBgcGFja2FnZS5qc29uYCBmaWxlIGZvciB0aGVcbiAqIHBhY2thZ2UuIElmIGEgbGljZW5zZSBmaWxlIChlLmcuLCBgTElDRU5TRWApIGlzIHByZXNlbnQgaW4gdGhlIHJvb3Qgb2YgdGhlIHBhY2thZ2UsIGl0XG4gKiB3aWxsIGFsc28gYmUgaW5jbHVkZWQgaW4gdGhlIG91dHB1dCBsaWNlbnNlcyBmaWxlLlxuICpcbiAqIEBwYXJhbSBtZXRhZmlsZSBBbiBlc2J1aWxkIG1ldGFmaWxlIG9iamVjdC5cbiAqIEBwYXJhbSByb290RGlyZWN0b3J5IFRoZSByb290IGRpcmVjdG9yeSBvZiB0aGUgd29ya3NwYWNlLlxuICogQHJldHVybnMgQSBzdHJpbmcgY29udGFpbmluZyB0aGUgY29udGVudCBvZiB0aGUgb3V0cHV0IGxpY2Vuc2VzIGZpbGUuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBleHRyYWN0TGljZW5zZXMobWV0YWZpbGU6IE1ldGFmaWxlLCByb290RGlyZWN0b3J5OiBzdHJpbmcpIHtcbiAgbGV0IGV4dHJhY3RlZExpY2Vuc2VDb250ZW50ID0gYCR7RVhUUkFDVElPTl9GSUxFX0hFQURFUn1cXG4ke0VYVFJBQ1RJT05fRklMRV9TRVBBUkFUT1J9YDtcblxuICBjb25zdCBzZWVuUGF0aHMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgY29uc3Qgc2VlblBhY2thZ2VzID0gbmV3IFNldDxzdHJpbmc+KCk7XG5cbiAgZm9yIChjb25zdCBlbnRyeSBvZiBPYmplY3QudmFsdWVzKG1ldGFmaWxlLm91dHB1dHMpKSB7XG4gICAgZm9yIChjb25zdCBbaW5wdXRQYXRoLCB7IGJ5dGVzSW5PdXRwdXQgfV0gb2YgT2JqZWN0LmVudHJpZXMoZW50cnkuaW5wdXRzKSkge1xuICAgICAgLy8gU2tpcCBpZiBub3QgaW5jbHVkZWQgaW4gb3V0cHV0XG4gICAgICBpZiAoYnl0ZXNJbk91dHB1dCA8PSAwKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICAvLyBTa2lwIGFscmVhZHkgcHJvY2Vzc2VkIHBhdGhzXG4gICAgICBpZiAoc2VlblBhdGhzLmhhcyhpbnB1dFBhdGgpKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgc2VlblBhdGhzLmFkZChpbnB1dFBhdGgpO1xuXG4gICAgICAvLyBTa2lwIG5vbi1wYWNrYWdlIHBhdGhzXG4gICAgICBpZiAoIWlucHV0UGF0aC5pbmNsdWRlcyhOT0RFX01PRFVMRV9TRUdNRU5UKSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgLy8gRXh0cmFjdCB0aGUgcGFja2FnZSBuYW1lIGZyb20gdGhlIHBhdGhcbiAgICAgIGxldCBiYXNlRGlyZWN0b3J5ID0gcGF0aC5qb2luKHJvb3REaXJlY3RvcnksIGlucHV0UGF0aCk7XG4gICAgICBsZXQgbmFtZU9yU2NvcGUsIG5hbWVPckZpbGU7XG4gICAgICBsZXQgZm91bmQgPSBmYWxzZTtcbiAgICAgIHdoaWxlIChiYXNlRGlyZWN0b3J5ICE9PSBwYXRoLmRpcm5hbWUoYmFzZURpcmVjdG9yeSkpIHtcbiAgICAgICAgY29uc3Qgc2VnbWVudCA9IHBhdGguYmFzZW5hbWUoYmFzZURpcmVjdG9yeSk7XG4gICAgICAgIGlmIChzZWdtZW50ID09PSBOT0RFX01PRFVMRV9TRUdNRU5UKSB7XG4gICAgICAgICAgZm91bmQgPSB0cnVlO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgbmFtZU9yRmlsZSA9IG5hbWVPclNjb3BlO1xuICAgICAgICBuYW1lT3JTY29wZSA9IHNlZ21lbnQ7XG4gICAgICAgIGJhc2VEaXJlY3RvcnkgPSBwYXRoLmRpcm5hbWUoYmFzZURpcmVjdG9yeSk7XG4gICAgICB9XG5cbiAgICAgIC8vIFNraXAgbm9uLXBhY2thZ2UgcGF0aCBlZGdlIGNhc2VzIHRoYXQgYXJlIG5vdCBjYXVnaHQgaW4gdGhlIGluY2x1ZGVzIGNoZWNrIGFib3ZlXG4gICAgICBpZiAoIWZvdW5kIHx8ICFuYW1lT3JTY29wZSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgcGFja2FnZU5hbWUgPSBuYW1lT3JTY29wZS5zdGFydHNXaXRoKCdAJylcbiAgICAgICAgPyBgJHtuYW1lT3JTY29wZX0vJHtuYW1lT3JGaWxlfWBcbiAgICAgICAgOiBuYW1lT3JTY29wZTtcbiAgICAgIGNvbnN0IHBhY2thZ2VEaXJlY3RvcnkgPSBwYXRoLmpvaW4oYmFzZURpcmVjdG9yeSwgcGFja2FnZU5hbWUpO1xuXG4gICAgICAvLyBMb2FkIHRoZSBwYWNrYWdlJ3MgbWV0YWRhdGEgdG8gZmluZCB0aGUgcGFja2FnZSdzIG5hbWUsIHZlcnNpb24sIGFuZCBsaWNlbnNlIHR5cGVcbiAgICAgIGNvbnN0IHBhY2thZ2VKc29uUGF0aCA9IHBhdGguam9pbihwYWNrYWdlRGlyZWN0b3J5LCAncGFja2FnZS5qc29uJyk7XG4gICAgICBsZXQgcGFja2FnZUpzb247XG4gICAgICB0cnkge1xuICAgICAgICBwYWNrYWdlSnNvbiA9IEpTT04ucGFyc2UoYXdhaXQgcmVhZEZpbGUocGFja2FnZUpzb25QYXRoLCAndXRmLTgnKSkgYXMge1xuICAgICAgICAgIG5hbWU6IHN0cmluZztcbiAgICAgICAgICB2ZXJzaW9uOiBzdHJpbmc7XG4gICAgICAgICAgLy8gVGhlIG9iamVjdCBmb3JtIGlzIGRlcHJlY2F0ZWQgYW5kIHNob3VsZCBvbmx5IGJlIHByZXNlbnQgaW4gb2xkIHBhY2thZ2VzXG4gICAgICAgICAgbGljZW5zZT86IHN0cmluZyB8IHsgdHlwZTogc3RyaW5nIH07XG4gICAgICAgIH07XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgLy8gSW52YWxpZCBwYWNrYWdlXG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICAvLyBTa2lwIGFscmVhZHkgcHJvY2Vzc2VkIHBhY2thZ2VzXG4gICAgICBjb25zdCBwYWNrYWdlSWQgPSBgJHtwYWNrYWdlTmFtZX1AJHtwYWNrYWdlSnNvbi52ZXJzaW9ufWA7XG4gICAgICBpZiAoc2VlblBhY2thZ2VzLmhhcyhwYWNrYWdlSWQpKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgc2VlblBhY2thZ2VzLmFkZChwYWNrYWdlSWQpO1xuXG4gICAgICAvLyBBdHRlbXB0IHRvIGZpbmQgbGljZW5zZSB0ZXh0IGluc2lkZSBwYWNrYWdlXG4gICAgICBsZXQgbGljZW5zZVRleHQgPSAnJztcbiAgICAgIGlmIChcbiAgICAgICAgdHlwZW9mIHBhY2thZ2VKc29uLmxpY2Vuc2UgPT09ICdzdHJpbmcnICYmXG4gICAgICAgIHBhY2thZ2VKc29uLmxpY2Vuc2UudG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKENVU1RPTV9MSUNFTlNFX1RFWFQpXG4gICAgICApIHtcbiAgICAgICAgLy8gQXR0ZW1wdCB0byBsb2FkIHRoZSBwYWNrYWdlJ3MgY3VzdG9tIGxpY2Vuc2VcbiAgICAgICAgbGV0IGN1c3RvbUxpY2Vuc2VQYXRoO1xuICAgICAgICBjb25zdCBjdXN0b21MaWNlbnNlRmlsZSA9IHBhdGgubm9ybWFsaXplKFxuICAgICAgICAgIHBhY2thZ2VKc29uLmxpY2Vuc2Uuc2xpY2UoQ1VTVE9NX0xJQ0VOU0VfVEVYVC5sZW5ndGggKyAxKS50cmltKCksXG4gICAgICAgICk7XG4gICAgICAgIGlmIChjdXN0b21MaWNlbnNlRmlsZS5zdGFydHNXaXRoKCcuLicpIHx8IHBhdGguaXNBYnNvbHV0ZShjdXN0b21MaWNlbnNlRmlsZSkpIHtcbiAgICAgICAgICAvLyBQYXRoIGlzIGF0dGVtcHRpbmcgdG8gYWNjZXNzIGZpbGVzIG91dHNpZGUgb2YgdGhlIHBhY2thZ2VcbiAgICAgICAgICAvLyBUT0RPOiBJc3N1ZSB3YXJuaW5nP1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGN1c3RvbUxpY2Vuc2VQYXRoID0gcGF0aC5qb2luKHBhY2thZ2VEaXJlY3RvcnksIGN1c3RvbUxpY2Vuc2VGaWxlKTtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgbGljZW5zZVRleHQgPSBhd2FpdCByZWFkRmlsZShjdXN0b21MaWNlbnNlUGF0aCwgJ3V0Zi04Jyk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9IGNhdGNoIHt9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFNlYXJjaCBmb3IgYSBsaWNlbnNlIGZpbGUgd2l0aGluIHRoZSByb290IG9mIHRoZSBwYWNrYWdlXG4gICAgICAgIGZvciAoY29uc3QgcG90ZW50aWFsTGljZW5zZSBvZiBMSUNFTlNFX0ZJTEVTKSB7XG4gICAgICAgICAgY29uc3QgcGFja2FnZUxpY2Vuc2VQYXRoID0gcGF0aC5qb2luKHBhY2thZ2VEaXJlY3RvcnksIHBvdGVudGlhbExpY2Vuc2UpO1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBsaWNlbnNlVGV4dCA9IGF3YWl0IHJlYWRGaWxlKHBhY2thZ2VMaWNlbnNlUGF0aCwgJ3V0Zi04Jyk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9IGNhdGNoIHt9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gR2VuZXJhdGUgdGhlIHBhY2thZ2UncyBsaWNlbnNlIGVudHJ5IGluIHRoZSBvdXRwdXQgY29udGVudFxuICAgICAgZXh0cmFjdGVkTGljZW5zZUNvbnRlbnQgKz0gYFBhY2thZ2U6ICR7cGFja2FnZUpzb24ubmFtZX1cXG5gO1xuICAgICAgZXh0cmFjdGVkTGljZW5zZUNvbnRlbnQgKz0gYExpY2Vuc2U6ICR7SlNPTi5zdHJpbmdpZnkocGFja2FnZUpzb24ubGljZW5zZSwgbnVsbCwgMil9XFxuYDtcbiAgICAgIGV4dHJhY3RlZExpY2Vuc2VDb250ZW50ICs9IGBcXG4ke2xpY2Vuc2VUZXh0fVxcbmA7XG4gICAgICBleHRyYWN0ZWRMaWNlbnNlQ29udGVudCArPSBFWFRSQUNUSU9OX0ZJTEVfU0VQQVJBVE9SO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBleHRyYWN0ZWRMaWNlbnNlQ29udGVudDtcbn1cbiJdfQ==
@@ -0,0 +1,69 @@
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 __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
10
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
11
+ if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
12
+ return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
13
+ };
14
+ var _MemoryLoadResultCache_loadResults, _MemoryLoadResultCache_fileDependencies;
15
+ Object.defineProperty(exports, "__esModule", { value: true });
16
+ exports.MemoryLoadResultCache = exports.createCachedLoad = void 0;
17
+ function createCachedLoad(cache, callback) {
18
+ if (cache === undefined) {
19
+ return callback;
20
+ }
21
+ return async (args) => {
22
+ const loadCacheKey = `${args.namespace}:${args.path}`;
23
+ let result = cache.get(loadCacheKey);
24
+ if (result === undefined) {
25
+ result = await callback(args);
26
+ // Do not cache null or undefined or results with errors
27
+ if (result && result.errors === undefined) {
28
+ await cache.put(loadCacheKey, result);
29
+ }
30
+ }
31
+ return result;
32
+ };
33
+ }
34
+ exports.createCachedLoad = createCachedLoad;
35
+ class MemoryLoadResultCache {
36
+ constructor() {
37
+ _MemoryLoadResultCache_loadResults.set(this, new Map());
38
+ _MemoryLoadResultCache_fileDependencies.set(this, new Map());
39
+ }
40
+ get(path) {
41
+ return __classPrivateFieldGet(this, _MemoryLoadResultCache_loadResults, "f").get(path);
42
+ }
43
+ async put(path, result) {
44
+ __classPrivateFieldGet(this, _MemoryLoadResultCache_loadResults, "f").set(path, result);
45
+ if (result.watchFiles) {
46
+ for (const watchFile of result.watchFiles) {
47
+ let affected = __classPrivateFieldGet(this, _MemoryLoadResultCache_fileDependencies, "f").get(watchFile);
48
+ if (affected === undefined) {
49
+ affected = new Set();
50
+ __classPrivateFieldGet(this, _MemoryLoadResultCache_fileDependencies, "f").set(watchFile, affected);
51
+ }
52
+ affected.add(path);
53
+ }
54
+ }
55
+ }
56
+ invalidate(path) {
57
+ const affected = __classPrivateFieldGet(this, _MemoryLoadResultCache_fileDependencies, "f").get(path);
58
+ let found = false;
59
+ if (affected) {
60
+ affected.forEach((a) => (found || (found = __classPrivateFieldGet(this, _MemoryLoadResultCache_loadResults, "f").delete(a))));
61
+ __classPrivateFieldGet(this, _MemoryLoadResultCache_fileDependencies, "f").delete(path);
62
+ }
63
+ found || (found = __classPrivateFieldGet(this, _MemoryLoadResultCache_loadResults, "f").delete(path));
64
+ return found;
65
+ }
66
+ }
67
+ exports.MemoryLoadResultCache = MemoryLoadResultCache;
68
+ _MemoryLoadResultCache_loadResults = new WeakMap(), _MemoryLoadResultCache_fileDependencies = new WeakMap();
69
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9hZC1yZXN1bHQtY2FjaGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9hbmd1bGFyX2RldmtpdC9idWlsZF9hbmd1bGFyL3NyYy90b29scy9lc2J1aWxkL2xvYWQtcmVzdWx0LWNhY2hlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7O0dBTUc7Ozs7Ozs7OztBQVNILFNBQWdCLGdCQUFnQixDQUM5QixLQUFrQyxFQUNsQyxRQUE4QztJQUU5QyxJQUFJLEtBQUssS0FBSyxTQUFTLEVBQUU7UUFDdkIsT0FBTyxRQUFRLENBQUM7S0FDakI7SUFFRCxPQUFPLEtBQUssRUFBRSxJQUFJLEVBQUUsRUFBRTtRQUNwQixNQUFNLFlBQVksR0FBRyxHQUFHLElBQUksQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3RELElBQUksTUFBTSxHQUFvQyxLQUFLLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBRXRFLElBQUksTUFBTSxLQUFLLFNBQVMsRUFBRTtZQUN4QixNQUFNLEdBQUcsTUFBTSxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7WUFFOUIsd0RBQXdEO1lBQ3hELElBQUksTUFBTSxJQUFJLE1BQU0sQ0FBQyxNQUFNLEtBQUssU0FBUyxFQUFFO2dCQUN6QyxNQUFNLEtBQUssQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLE1BQU0sQ0FBQyxDQUFDO2FBQ3ZDO1NBQ0Y7UUFFRCxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDLENBQUM7QUFDSixDQUFDO0FBdkJELDRDQXVCQztBQUVELE1BQWEscUJBQXFCO0lBQWxDO1FBQ0UsNkNBQWUsSUFBSSxHQUFHLEVBQXdCLEVBQUM7UUFDL0Msa0RBQW9CLElBQUksR0FBRyxFQUF1QixFQUFDO0lBaUNyRCxDQUFDO0lBL0JDLEdBQUcsQ0FBQyxJQUFZO1FBQ2QsT0FBTyx1QkFBQSxJQUFJLDBDQUFhLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3JDLENBQUM7SUFFRCxLQUFLLENBQUMsR0FBRyxDQUFDLElBQVksRUFBRSxNQUFvQjtRQUMxQyx1QkFBQSxJQUFJLDBDQUFhLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztRQUNwQyxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUU7WUFDckIsS0FBSyxNQUFNLFNBQVMsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFO2dCQUN6QyxJQUFJLFFBQVEsR0FBRyx1QkFBQSxJQUFJLCtDQUFrQixDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQztnQkFDckQsSUFBSSxRQUFRLEtBQUssU0FBUyxFQUFFO29CQUMxQixRQUFRLEdBQUcsSUFBSSxHQUFHLEVBQUUsQ0FBQztvQkFDckIsdUJBQUEsSUFBSSwrQ0FBa0IsQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLFFBQVEsQ0FBQyxDQUFDO2lCQUNqRDtnQkFDRCxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO2FBQ3BCO1NBQ0Y7SUFDSCxDQUFDO0lBRUQsVUFBVSxDQUFDLElBQVk7UUFDckIsTUFBTSxRQUFRLEdBQUcsdUJBQUEsSUFBSSwrQ0FBa0IsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbEQsSUFBSSxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBRWxCLElBQUksUUFBUSxFQUFFO1lBQ1osUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLEtBQUwsS0FBSyxHQUFLLHVCQUFBLElBQUksMENBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDO1lBQ2pFLHVCQUFBLElBQUksK0NBQWtCLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ3JDO1FBRUQsS0FBSyxLQUFMLEtBQUssR0FBSyx1QkFBQSxJQUFJLDBDQUFhLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFDO1FBRXpDLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztDQUNGO0FBbkNELHNEQW1DQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG5pbXBvcnQgdHlwZSB7IE9uTG9hZFJlc3VsdCwgUGx1Z2luQnVpbGQgfSBmcm9tICdlc2J1aWxkJztcblxuZXhwb3J0IGludGVyZmFjZSBMb2FkUmVzdWx0Q2FjaGUge1xuICBnZXQocGF0aDogc3RyaW5nKTogT25Mb2FkUmVzdWx0IHwgdW5kZWZpbmVkO1xuICBwdXQocGF0aDogc3RyaW5nLCByZXN1bHQ6IE9uTG9hZFJlc3VsdCk6IFByb21pc2U8dm9pZD47XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVDYWNoZWRMb2FkKFxuICBjYWNoZTogTG9hZFJlc3VsdENhY2hlIHwgdW5kZWZpbmVkLFxuICBjYWxsYmFjazogUGFyYW1ldGVyczxQbHVnaW5CdWlsZFsnb25Mb2FkJ10+WzFdLFxuKTogUGFyYW1ldGVyczxQbHVnaW5CdWlsZFsnb25Mb2FkJ10+WzFdIHtcbiAgaWYgKGNhY2hlID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gY2FsbGJhY2s7XG4gIH1cblxuICByZXR1cm4gYXN5bmMgKGFyZ3MpID0+IHtcbiAgICBjb25zdCBsb2FkQ2FjaGVLZXkgPSBgJHthcmdzLm5hbWVzcGFjZX06JHthcmdzLnBhdGh9YDtcbiAgICBsZXQgcmVzdWx0OiBPbkxvYWRSZXN1bHQgfCBudWxsIHwgdW5kZWZpbmVkID0gY2FjaGUuZ2V0KGxvYWRDYWNoZUtleSk7XG5cbiAgICBpZiAocmVzdWx0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJlc3VsdCA9IGF3YWl0IGNhbGxiYWNrKGFyZ3MpO1xuXG4gICAgICAvLyBEbyBub3QgY2FjaGUgbnVsbCBvciB1bmRlZmluZWQgb3IgcmVzdWx0cyB3aXRoIGVycm9yc1xuICAgICAgaWYgKHJlc3VsdCAmJiByZXN1bHQuZXJyb3JzID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgYXdhaXQgY2FjaGUucHV0KGxvYWRDYWNoZUtleSwgcmVzdWx0KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xufVxuXG5leHBvcnQgY2xhc3MgTWVtb3J5TG9hZFJlc3VsdENhY2hlIGltcGxlbWVudHMgTG9hZFJlc3VsdENhY2hlIHtcbiAgI2xvYWRSZXN1bHRzID0gbmV3IE1hcDxzdHJpbmcsIE9uTG9hZFJlc3VsdD4oKTtcbiAgI2ZpbGVEZXBlbmRlbmNpZXMgPSBuZXcgTWFwPHN0cmluZywgU2V0PHN0cmluZz4+KCk7XG5cbiAgZ2V0KHBhdGg6IHN0cmluZyk6IE9uTG9hZFJlc3VsdCB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuI2xvYWRSZXN1bHRzLmdldChwYXRoKTtcbiAgfVxuXG4gIGFzeW5jIHB1dChwYXRoOiBzdHJpbmcsIHJlc3VsdDogT25Mb2FkUmVzdWx0KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy4jbG9hZFJlc3VsdHMuc2V0KHBhdGgsIHJlc3VsdCk7XG4gICAgaWYgKHJlc3VsdC53YXRjaEZpbGVzKSB7XG4gICAgICBmb3IgKGNvbnN0IHdhdGNoRmlsZSBvZiByZXN1bHQud2F0Y2hGaWxlcykge1xuICAgICAgICBsZXQgYWZmZWN0ZWQgPSB0aGlzLiNmaWxlRGVwZW5kZW5jaWVzLmdldCh3YXRjaEZpbGUpO1xuICAgICAgICBpZiAoYWZmZWN0ZWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGFmZmVjdGVkID0gbmV3IFNldCgpO1xuICAgICAgICAgIHRoaXMuI2ZpbGVEZXBlbmRlbmNpZXMuc2V0KHdhdGNoRmlsZSwgYWZmZWN0ZWQpO1xuICAgICAgICB9XG4gICAgICAgIGFmZmVjdGVkLmFkZChwYXRoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpbnZhbGlkYXRlKHBhdGg6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGFmZmVjdGVkID0gdGhpcy4jZmlsZURlcGVuZGVuY2llcy5nZXQocGF0aCk7XG4gICAgbGV0IGZvdW5kID0gZmFsc2U7XG5cbiAgICBpZiAoYWZmZWN0ZWQpIHtcbiAgICAgIGFmZmVjdGVkLmZvckVhY2goKGEpID0+IChmb3VuZCB8fD0gdGhpcy4jbG9hZFJlc3VsdHMuZGVsZXRlKGEpKSk7XG4gICAgICB0aGlzLiNmaWxlRGVwZW5kZW5jaWVzLmRlbGV0ZShwYXRoKTtcbiAgICB9XG5cbiAgICBmb3VuZCB8fD0gdGhpcy4jbG9hZFJlc3VsdHMuZGVsZXRlKHBhdGgpO1xuXG4gICAgcmV0dXJuIGZvdW5kO1xuICB9XG59XG4iXX0=
@@ -0,0 +1,79 @@
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.profileSync = exports.profileAsync = exports.logCumulativeDurations = exports.resetCumulativeDurations = void 0;
11
+ const environment_options_1 = require("../../utils/environment-options");
12
+ let cumulativeDurations;
13
+ function resetCumulativeDurations() {
14
+ cumulativeDurations?.clear();
15
+ }
16
+ exports.resetCumulativeDurations = resetCumulativeDurations;
17
+ function logCumulativeDurations() {
18
+ if (!environment_options_1.debugPerformance || !cumulativeDurations) {
19
+ return;
20
+ }
21
+ for (const [name, durations] of cumulativeDurations) {
22
+ let total = 0;
23
+ let min;
24
+ let max;
25
+ for (const duration of durations) {
26
+ total += duration;
27
+ if (min === undefined || duration < min) {
28
+ min = duration;
29
+ }
30
+ if (max === undefined || duration > max) {
31
+ max = duration;
32
+ }
33
+ }
34
+ const average = total / durations.length;
35
+ // eslint-disable-next-line no-console
36
+ console.log(`DURATION[${name}]: ${total.toFixed(9)}s [count: ${durations.length}; avg: ${average.toFixed(9)}s; min: ${min?.toFixed(9)}s; max: ${max?.toFixed(9)}s]`);
37
+ }
38
+ }
39
+ exports.logCumulativeDurations = logCumulativeDurations;
40
+ function recordDuration(name, startTime, cumulative) {
41
+ const duration = Number(process.hrtime.bigint() - startTime) / 10 ** 9;
42
+ if (cumulative) {
43
+ cumulativeDurations ?? (cumulativeDurations = new Map());
44
+ const durations = cumulativeDurations.get(name) ?? [];
45
+ durations.push(duration);
46
+ cumulativeDurations.set(name, durations);
47
+ }
48
+ else {
49
+ // eslint-disable-next-line no-console
50
+ console.log(`DURATION[${name}]: ${duration.toFixed(9)}s`);
51
+ }
52
+ }
53
+ async function profileAsync(name, action, cumulative) {
54
+ if (!environment_options_1.debugPerformance) {
55
+ return action();
56
+ }
57
+ const startTime = process.hrtime.bigint();
58
+ try {
59
+ return await action();
60
+ }
61
+ finally {
62
+ recordDuration(name, startTime, cumulative);
63
+ }
64
+ }
65
+ exports.profileAsync = profileAsync;
66
+ function profileSync(name, action, cumulative) {
67
+ if (!environment_options_1.debugPerformance) {
68
+ return action();
69
+ }
70
+ const startTime = process.hrtime.bigint();
71
+ try {
72
+ return action();
73
+ }
74
+ finally {
75
+ recordDuration(name, startTime, cumulative);
76
+ }
77
+ }
78
+ exports.profileSync = profileSync;
79
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZmlsaW5nLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvYW5ndWxhcl9kZXZraXQvYnVpbGRfYW5ndWxhci9zcmMvdG9vbHMvZXNidWlsZC9wcm9maWxpbmcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7R0FNRzs7O0FBRUgseUVBQW1FO0FBRW5FLElBQUksbUJBQXNELENBQUM7QUFFM0QsU0FBZ0Isd0JBQXdCO0lBQ3RDLG1CQUFtQixFQUFFLEtBQUssRUFBRSxDQUFDO0FBQy9CLENBQUM7QUFGRCw0REFFQztBQUVELFNBQWdCLHNCQUFzQjtJQUNwQyxJQUFJLENBQUMsc0NBQWdCLElBQUksQ0FBQyxtQkFBbUIsRUFBRTtRQUM3QyxPQUFPO0tBQ1I7SUFFRCxLQUFLLE1BQU0sQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLElBQUksbUJBQW1CLEVBQUU7UUFDbkQsSUFBSSxLQUFLLEdBQUcsQ0FBQyxDQUFDO1FBQ2QsSUFBSSxHQUFHLENBQUM7UUFDUixJQUFJLEdBQUcsQ0FBQztRQUNSLEtBQUssTUFBTSxRQUFRLElBQUksU0FBUyxFQUFFO1lBQ2hDLEtBQUssSUFBSSxRQUFRLENBQUM7WUFDbEIsSUFBSSxHQUFHLEtBQUssU0FBUyxJQUFJLFFBQVEsR0FBRyxHQUFHLEVBQUU7Z0JBQ3ZDLEdBQUcsR0FBRyxRQUFRLENBQUM7YUFDaEI7WUFDRCxJQUFJLEdBQUcsS0FBSyxTQUFTLElBQUksUUFBUSxHQUFHLEdBQUcsRUFBRTtnQkFDdkMsR0FBRyxHQUFHLFFBQVEsQ0FBQzthQUNoQjtTQUNGO1FBQ0QsTUFBTSxPQUFPLEdBQUcsS0FBSyxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUM7UUFDekMsc0NBQXNDO1FBQ3RDLE9BQU8sQ0FBQyxHQUFHLENBQ1QsWUFBWSxJQUFJLE1BQU0sS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsYUFBYSxTQUFTLENBQUMsTUFBTSxVQUFVLE9BQU8sQ0FBQyxPQUFPLENBQzFGLENBQUMsQ0FDRixXQUFXLEdBQUcsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUMxRCxDQUFDO0tBQ0g7QUFDSCxDQUFDO0FBMUJELHdEQTBCQztBQUVELFNBQVMsY0FBYyxDQUFDLElBQVksRUFBRSxTQUFpQixFQUFFLFVBQW9CO0lBQzNFLE1BQU0sUUFBUSxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxHQUFHLFNBQVMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDdkUsSUFBSSxVQUFVLEVBQUU7UUFDZCxtQkFBbUIsS0FBbkIsbUJBQW1CLEdBQUssSUFBSSxHQUFHLEVBQW9CLEVBQUM7UUFDcEQsTUFBTSxTQUFTLEdBQUcsbUJBQW1CLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUN0RCxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3pCLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLENBQUM7S0FDMUM7U0FBTTtRQUNMLHNDQUFzQztRQUN0QyxPQUFPLENBQUMsR0FBRyxDQUFDLFlBQVksSUFBSSxNQUFNLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0tBQzNEO0FBQ0gsQ0FBQztBQUVNLEtBQUssVUFBVSxZQUFZLENBQ2hDLElBQVksRUFDWixNQUF3QixFQUN4QixVQUFvQjtJQUVwQixJQUFJLENBQUMsc0NBQWdCLEVBQUU7UUFDckIsT0FBTyxNQUFNLEVBQUUsQ0FBQztLQUNqQjtJQUVELE1BQU0sU0FBUyxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUM7SUFDMUMsSUFBSTtRQUNGLE9BQU8sTUFBTSxNQUFNLEVBQUUsQ0FBQztLQUN2QjtZQUFTO1FBQ1IsY0FBYyxDQUFDLElBQUksRUFBRSxTQUFTLEVBQUUsVUFBVSxDQUFDLENBQUM7S0FDN0M7QUFDSCxDQUFDO0FBZkQsb0NBZUM7QUFFRCxTQUFnQixXQUFXLENBQUksSUFBWSxFQUFFLE1BQWUsRUFBRSxVQUFvQjtJQUNoRixJQUFJLENBQUMsc0NBQWdCLEVBQUU7UUFDckIsT0FBTyxNQUFNLEVBQUUsQ0FBQztLQUNqQjtJQUVELE1BQU0sU0FBUyxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUM7SUFDMUMsSUFBSTtRQUNGLE9BQU8sTUFBTSxFQUFFLENBQUM7S0FDakI7WUFBUztRQUNSLGNBQWMsQ0FBQyxJQUFJLEVBQUUsU0FBUyxFQUFFLFVBQVUsQ0FBQyxDQUFDO0tBQzdDO0FBQ0gsQ0FBQztBQVhELGtDQVdDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbmltcG9ydCB7IGRlYnVnUGVyZm9ybWFuY2UgfSBmcm9tICcuLi8uLi91dGlscy9lbnZpcm9ubWVudC1vcHRpb25zJztcblxubGV0IGN1bXVsYXRpdmVEdXJhdGlvbnM6IE1hcDxzdHJpbmcsIG51bWJlcltdPiB8IHVuZGVmaW5lZDtcblxuZXhwb3J0IGZ1bmN0aW9uIHJlc2V0Q3VtdWxhdGl2ZUR1cmF0aW9ucygpOiB2b2lkIHtcbiAgY3VtdWxhdGl2ZUR1cmF0aW9ucz8uY2xlYXIoKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxvZ0N1bXVsYXRpdmVEdXJhdGlvbnMoKTogdm9pZCB7XG4gIGlmICghZGVidWdQZXJmb3JtYW5jZSB8fCAhY3VtdWxhdGl2ZUR1cmF0aW9ucykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGZvciAoY29uc3QgW25hbWUsIGR1cmF0aW9uc10gb2YgY3VtdWxhdGl2ZUR1cmF0aW9ucykge1xuICAgIGxldCB0b3RhbCA9IDA7XG4gICAgbGV0IG1pbjtcbiAgICBsZXQgbWF4O1xuICAgIGZvciAoY29uc3QgZHVyYXRpb24gb2YgZHVyYXRpb25zKSB7XG4gICAgICB0b3RhbCArPSBkdXJhdGlvbjtcbiAgICAgIGlmIChtaW4gPT09IHVuZGVmaW5lZCB8fCBkdXJhdGlvbiA8IG1pbikge1xuICAgICAgICBtaW4gPSBkdXJhdGlvbjtcbiAgICAgIH1cbiAgICAgIGlmIChtYXggPT09IHVuZGVmaW5lZCB8fCBkdXJhdGlvbiA+IG1heCkge1xuICAgICAgICBtYXggPSBkdXJhdGlvbjtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgYXZlcmFnZSA9IHRvdGFsIC8gZHVyYXRpb25zLmxlbmd0aDtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgIGNvbnNvbGUubG9nKFxuICAgICAgYERVUkFUSU9OWyR7bmFtZX1dOiAke3RvdGFsLnRvRml4ZWQoOSl9cyBbY291bnQ6ICR7ZHVyYXRpb25zLmxlbmd0aH07IGF2ZzogJHthdmVyYWdlLnRvRml4ZWQoXG4gICAgICAgIDksXG4gICAgICApfXM7IG1pbjogJHttaW4/LnRvRml4ZWQoOSl9czsgbWF4OiAke21heD8udG9GaXhlZCg5KX1zXWAsXG4gICAgKTtcbiAgfVxufVxuXG5mdW5jdGlvbiByZWNvcmREdXJhdGlvbihuYW1lOiBzdHJpbmcsIHN0YXJ0VGltZTogYmlnaW50LCBjdW11bGF0aXZlPzogYm9vbGVhbik6IHZvaWQge1xuICBjb25zdCBkdXJhdGlvbiA9IE51bWJlcihwcm9jZXNzLmhydGltZS5iaWdpbnQoKSAtIHN0YXJ0VGltZSkgLyAxMCAqKiA5O1xuICBpZiAoY3VtdWxhdGl2ZSkge1xuICAgIGN1bXVsYXRpdmVEdXJhdGlvbnMgPz89IG5ldyBNYXA8c3RyaW5nLCBudW1iZXJbXT4oKTtcbiAgICBjb25zdCBkdXJhdGlvbnMgPSBjdW11bGF0aXZlRHVyYXRpb25zLmdldChuYW1lKSA/PyBbXTtcbiAgICBkdXJhdGlvbnMucHVzaChkdXJhdGlvbik7XG4gICAgY3VtdWxhdGl2ZUR1cmF0aW9ucy5zZXQobmFtZSwgZHVyYXRpb25zKTtcbiAgfSBlbHNlIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgIGNvbnNvbGUubG9nKGBEVVJBVElPTlske25hbWV9XTogJHtkdXJhdGlvbi50b0ZpeGVkKDkpfXNgKTtcbiAgfVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcHJvZmlsZUFzeW5jPFQ+KFxuICBuYW1lOiBzdHJpbmcsXG4gIGFjdGlvbjogKCkgPT4gUHJvbWlzZTxUPixcbiAgY3VtdWxhdGl2ZT86IGJvb2xlYW4sXG4pOiBQcm9taXNlPFQ+IHtcbiAgaWYgKCFkZWJ1Z1BlcmZvcm1hbmNlKSB7XG4gICAgcmV0dXJuIGFjdGlvbigpO1xuICB9XG5cbiAgY29uc3Qgc3RhcnRUaW1lID0gcHJvY2Vzcy5ocnRpbWUuYmlnaW50KCk7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGF3YWl0IGFjdGlvbigpO1xuICB9IGZpbmFsbHkge1xuICAgIHJlY29yZER1cmF0aW9uKG5hbWUsIHN0YXJ0VGltZSwgY3VtdWxhdGl2ZSk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb2ZpbGVTeW5jPFQ+KG5hbWU6IHN0cmluZywgYWN0aW9uOiAoKSA9PiBULCBjdW11bGF0aXZlPzogYm9vbGVhbik6IFQge1xuICBpZiAoIWRlYnVnUGVyZm9ybWFuY2UpIHtcbiAgICByZXR1cm4gYWN0aW9uKCk7XG4gIH1cblxuICBjb25zdCBzdGFydFRpbWUgPSBwcm9jZXNzLmhydGltZS5iaWdpbnQoKTtcbiAgdHJ5IHtcbiAgICByZXR1cm4gYWN0aW9uKCk7XG4gIH0gZmluYWxseSB7XG4gICAgcmVjb3JkRHVyYXRpb24obmFtZSwgc3RhcnRUaW1lLCBjdW11bGF0aXZlKTtcbiAgfVxufVxuIl19
@@ -0,0 +1,74 @@
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.createSourcemapIngorelistPlugin = void 0;
11
+ /**
12
+ * The field identifier for the sourcemap Chrome Devtools ignore list extension.
13
+ *
14
+ * Following the naming conventions from https://sourcemaps.info/spec.html#h.ghqpj1ytqjbm
15
+ */
16
+ const IGNORE_LIST_ID = 'x_google_ignoreList';
17
+ /**
18
+ * The UTF-8 bytes for the node modules check text used to avoid unnecessary parsing
19
+ * of a full source map if not present in the source map data.
20
+ */
21
+ const NODE_MODULE_BYTES = Buffer.from('node_modules/', 'utf-8');
22
+ /**
23
+ * Creates an esbuild plugin that updates generated sourcemaps to include the Chrome
24
+ * DevTools ignore list extension. All source files that originate from a node modules
25
+ * directory are added to the ignore list by this plugin.
26
+ *
27
+ * For more information, see https://developer.chrome.com/articles/x-google-ignore-list/
28
+ * @returns An esbuild plugin.
29
+ */
30
+ function createSourcemapIngorelistPlugin() {
31
+ return {
32
+ name: 'angular-sourcemap-ignorelist',
33
+ setup(build) {
34
+ if (!build.initialOptions.sourcemap) {
35
+ return;
36
+ }
37
+ build.onEnd((result) => {
38
+ if (!result.outputFiles) {
39
+ return;
40
+ }
41
+ for (const file of result.outputFiles) {
42
+ // Only process sourcemap files
43
+ if (!file.path.endsWith('.map')) {
44
+ continue;
45
+ }
46
+ // Create a Buffer object that shares the memory of the output file contents
47
+ const contents = Buffer.from(file.contents.buffer, file.contents.byteOffset, file.contents.byteLength);
48
+ // Avoid parsing sourcemaps that have no node modules references
49
+ if (!contents.includes(NODE_MODULE_BYTES)) {
50
+ continue;
51
+ }
52
+ const map = JSON.parse(contents.toString('utf-8'));
53
+ const ignoreList = [];
54
+ // Check and store the index of each source originating from a node modules directory
55
+ for (let index = 0; index < map.sources.length; ++index) {
56
+ const location = map.sources[index].indexOf('node_modules/');
57
+ if (location === 0 || (location > 0 && map.sources[index][location - 1] === '/')) {
58
+ ignoreList.push(index);
59
+ }
60
+ }
61
+ // Avoid regenerating the source map if nothing changed
62
+ if (ignoreList.length === 0) {
63
+ continue;
64
+ }
65
+ // Update the sourcemap in the output file
66
+ map[IGNORE_LIST_ID] = ignoreList;
67
+ file.contents = Buffer.from(JSON.stringify(map), 'utf-8');
68
+ }
69
+ });
70
+ },
71
+ };
72
+ }
73
+ exports.createSourcemapIngorelistPlugin = createSourcemapIngorelistPlugin;
74
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic291cmNlbWFwLWlnbm9yZWxpc3QtcGx1Z2luLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvYW5ndWxhcl9kZXZraXQvYnVpbGRfYW5ndWxhci9zcmMvdG9vbHMvZXNidWlsZC9zb3VyY2VtYXAtaWdub3JlbGlzdC1wbHVnaW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7R0FNRzs7O0FBSUg7Ozs7R0FJRztBQUNILE1BQU0sY0FBYyxHQUFHLHFCQUFxQixDQUFDO0FBRTdDOzs7R0FHRztBQUNILE1BQU0saUJBQWlCLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFVaEU7Ozs7Ozs7R0FPRztBQUNILFNBQWdCLCtCQUErQjtJQUM3QyxPQUFPO1FBQ0wsSUFBSSxFQUFFLDhCQUE4QjtRQUNwQyxLQUFLLENBQUMsS0FBSztZQUNULElBQUksQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLFNBQVMsRUFBRTtnQkFDbkMsT0FBTzthQUNSO1lBRUQsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO2dCQUNyQixJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsRUFBRTtvQkFDdkIsT0FBTztpQkFDUjtnQkFFRCxLQUFLLE1BQU0sSUFBSSxJQUFJLE1BQU0sQ0FBQyxXQUFXLEVBQUU7b0JBQ3JDLCtCQUErQjtvQkFDL0IsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUFFO3dCQUMvQixTQUFTO3FCQUNWO29CQUVELDRFQUE0RTtvQkFDNUUsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FDMUIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQ3BCLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxFQUN4QixJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FDekIsQ0FBQztvQkFFRixnRUFBZ0U7b0JBQ2hFLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLGlCQUFpQixDQUFDLEVBQUU7d0JBQ3pDLFNBQVM7cUJBQ1Y7b0JBRUQsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFjLENBQUM7b0JBQ2hFLE1BQU0sVUFBVSxHQUFHLEVBQUUsQ0FBQztvQkFFdEIscUZBQXFGO29CQUNyRixLQUFLLElBQUksS0FBSyxHQUFHLENBQUMsRUFBRSxLQUFLLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsRUFBRSxLQUFLLEVBQUU7d0JBQ3ZELE1BQU0sUUFBUSxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxDQUFDO3dCQUM3RCxJQUFJLFFBQVEsS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxFQUFFOzRCQUNoRixVQUFVLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO3lCQUN4QjtxQkFDRjtvQkFFRCx1REFBdUQ7b0JBQ3ZELElBQUksVUFBVSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7d0JBQzNCLFNBQVM7cUJBQ1Y7b0JBRUQsMENBQTBDO29CQUMxQyxHQUFHLENBQUMsY0FBYyxDQUFDLEdBQUcsVUFBVSxDQUFDO29CQUNqQyxJQUFJLENBQUMsUUFBUSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQztpQkFDM0Q7WUFDSCxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUM7S0FDRixDQUFDO0FBQ0osQ0FBQztBQXRERCwwRUFzREMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBQbHVnaW4gfSBmcm9tICdlc2J1aWxkJztcblxuLyoqXG4gKiBUaGUgZmllbGQgaWRlbnRpZmllciBmb3IgdGhlIHNvdXJjZW1hcCBDaHJvbWUgRGV2dG9vbHMgaWdub3JlIGxpc3QgZXh0ZW5zaW9uLlxuICpcbiAqIEZvbGxvd2luZyB0aGUgbmFtaW5nIGNvbnZlbnRpb25zIGZyb20gaHR0cHM6Ly9zb3VyY2VtYXBzLmluZm8vc3BlYy5odG1sI2guZ2hxcGoxeXRxamJtXG4gKi9cbmNvbnN0IElHTk9SRV9MSVNUX0lEID0gJ3hfZ29vZ2xlX2lnbm9yZUxpc3QnO1xuXG4vKipcbiAqIFRoZSBVVEYtOCBieXRlcyBmb3IgdGhlIG5vZGUgbW9kdWxlcyBjaGVjayB0ZXh0IHVzZWQgdG8gYXZvaWQgdW5uZWNlc3NhcnkgcGFyc2luZ1xuICogb2YgYSBmdWxsIHNvdXJjZSBtYXAgaWYgbm90IHByZXNlbnQgaW4gdGhlIHNvdXJjZSBtYXAgZGF0YS5cbiAqL1xuY29uc3QgTk9ERV9NT0RVTEVfQllURVMgPSBCdWZmZXIuZnJvbSgnbm9kZV9tb2R1bGVzLycsICd1dGYtOCcpO1xuXG4vKipcbiAqIE1pbmltYWwgc291cmNlbWFwIG9iamVjdCByZXF1aXJlZCB0byBjcmVhdGUgdGhlIGlnbm9yZSBsaXN0LlxuICovXG5pbnRlcmZhY2UgU291cmNlTWFwIHtcbiAgc291cmNlczogc3RyaW5nW107XG4gIFtJR05PUkVfTElTVF9JRF0/OiBudW1iZXJbXTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGFuIGVzYnVpbGQgcGx1Z2luIHRoYXQgdXBkYXRlcyBnZW5lcmF0ZWQgc291cmNlbWFwcyB0byBpbmNsdWRlIHRoZSBDaHJvbWVcbiAqIERldlRvb2xzIGlnbm9yZSBsaXN0IGV4dGVuc2lvbi4gQWxsIHNvdXJjZSBmaWxlcyB0aGF0IG9yaWdpbmF0ZSBmcm9tIGEgbm9kZSBtb2R1bGVzXG4gKiBkaXJlY3RvcnkgYXJlIGFkZGVkIHRvIHRoZSBpZ25vcmUgbGlzdCBieSB0aGlzIHBsdWdpbi5cbiAqXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLmNocm9tZS5jb20vYXJ0aWNsZXMveC1nb29nbGUtaWdub3JlLWxpc3QvXG4gKiBAcmV0dXJucyBBbiBlc2J1aWxkIHBsdWdpbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVNvdXJjZW1hcEluZ29yZWxpc3RQbHVnaW4oKTogUGx1Z2luIHtcbiAgcmV0dXJuIHtcbiAgICBuYW1lOiAnYW5ndWxhci1zb3VyY2VtYXAtaWdub3JlbGlzdCcsXG4gICAgc2V0dXAoYnVpbGQpOiB2b2lkIHtcbiAgICAgIGlmICghYnVpbGQuaW5pdGlhbE9wdGlvbnMuc291cmNlbWFwKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgYnVpbGQub25FbmQoKHJlc3VsdCkgPT4ge1xuICAgICAgICBpZiAoIXJlc3VsdC5vdXRwdXRGaWxlcykge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoY29uc3QgZmlsZSBvZiByZXN1bHQub3V0cHV0RmlsZXMpIHtcbiAgICAgICAgICAvLyBPbmx5IHByb2Nlc3Mgc291cmNlbWFwIGZpbGVzXG4gICAgICAgICAgaWYgKCFmaWxlLnBhdGguZW5kc1dpdGgoJy5tYXAnKSkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gQ3JlYXRlIGEgQnVmZmVyIG9iamVjdCB0aGF0IHNoYXJlcyB0aGUgbWVtb3J5IG9mIHRoZSBvdXRwdXQgZmlsZSBjb250ZW50c1xuICAgICAgICAgIGNvbnN0IGNvbnRlbnRzID0gQnVmZmVyLmZyb20oXG4gICAgICAgICAgICBmaWxlLmNvbnRlbnRzLmJ1ZmZlcixcbiAgICAgICAgICAgIGZpbGUuY29udGVudHMuYnl0ZU9mZnNldCxcbiAgICAgICAgICAgIGZpbGUuY29udGVudHMuYnl0ZUxlbmd0aCxcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgLy8gQXZvaWQgcGFyc2luZyBzb3VyY2VtYXBzIHRoYXQgaGF2ZSBubyBub2RlIG1vZHVsZXMgcmVmZXJlbmNlc1xuICAgICAgICAgIGlmICghY29udGVudHMuaW5jbHVkZXMoTk9ERV9NT0RVTEVfQllURVMpKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBtYXAgPSBKU09OLnBhcnNlKGNvbnRlbnRzLnRvU3RyaW5nKCd1dGYtOCcpKSBhcyBTb3VyY2VNYXA7XG4gICAgICAgICAgY29uc3QgaWdub3JlTGlzdCA9IFtdO1xuXG4gICAgICAgICAgLy8gQ2hlY2sgYW5kIHN0b3JlIHRoZSBpbmRleCBvZiBlYWNoIHNvdXJjZSBvcmlnaW5hdGluZyBmcm9tIGEgbm9kZSBtb2R1bGVzIGRpcmVjdG9yeVxuICAgICAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBtYXAuc291cmNlcy5sZW5ndGg7ICsraW5kZXgpIHtcbiAgICAgICAgICAgIGNvbnN0IGxvY2F0aW9uID0gbWFwLnNvdXJjZXNbaW5kZXhdLmluZGV4T2YoJ25vZGVfbW9kdWxlcy8nKTtcbiAgICAgICAgICAgIGlmIChsb2NhdGlvbiA9PT0gMCB8fCAobG9jYXRpb24gPiAwICYmIG1hcC5zb3VyY2VzW2luZGV4XVtsb2NhdGlvbiAtIDFdID09PSAnLycpKSB7XG4gICAgICAgICAgICAgIGlnbm9yZUxpc3QucHVzaChpbmRleCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gQXZvaWQgcmVnZW5lcmF0aW5nIHRoZSBzb3VyY2UgbWFwIGlmIG5vdGhpbmcgY2hhbmdlZFxuICAgICAgICAgIGlmIChpZ25vcmVMaXN0Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gVXBkYXRlIHRoZSBzb3VyY2VtYXAgaW4gdGhlIG91dHB1dCBmaWxlXG4gICAgICAgICAgbWFwW0lHTk9SRV9MSVNUX0lEXSA9IGlnbm9yZUxpc3Q7XG4gICAgICAgICAgZmlsZS5jb250ZW50cyA9IEJ1ZmZlci5mcm9tKEpTT04uc3RyaW5naWZ5KG1hcCksICd1dGYtOCcpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9LFxuICB9O1xufVxuIl19
@@ -0,0 +1,159 @@
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.bundleComponentStylesheet = exports.createStylesheetBundleOptions = void 0;
14
+ const node_crypto_1 = require("node:crypto");
15
+ const node_path_1 = __importDefault(require("node:path"));
16
+ const bundler_context_1 = require("../bundler-context");
17
+ const css_language_1 = require("./css-language");
18
+ const css_resource_plugin_1 = require("./css-resource-plugin");
19
+ const less_language_1 = require("./less-language");
20
+ const sass_language_1 = require("./sass-language");
21
+ const stylesheet_plugin_factory_1 = require("./stylesheet-plugin-factory");
22
+ /**
23
+ * A counter for component styles used to generate unique build-time identifiers for each stylesheet.
24
+ */
25
+ let componentStyleCounter = 0;
26
+ function createStylesheetBundleOptions(options, cache, inlineComponentData) {
27
+ // Ensure preprocessor include paths are absolute based on the workspace root
28
+ const includePaths = options.includePaths?.map((includePath) => node_path_1.default.resolve(options.workspaceRoot, includePath));
29
+ const pluginFactory = new stylesheet_plugin_factory_1.StylesheetPluginFactory({
30
+ sourcemap: !!options.sourcemap,
31
+ includePaths,
32
+ inlineComponentData,
33
+ browsers: options.browsers,
34
+ tailwindConfiguration: options.tailwindConfiguration,
35
+ }, cache);
36
+ return {
37
+ absWorkingDir: options.workspaceRoot,
38
+ bundle: true,
39
+ entryNames: options.outputNames?.bundles,
40
+ assetNames: options.outputNames?.media,
41
+ logLevel: 'silent',
42
+ minify: options.optimization,
43
+ metafile: true,
44
+ sourcemap: options.sourcemap,
45
+ outdir: options.workspaceRoot,
46
+ write: false,
47
+ platform: 'browser',
48
+ target: options.target,
49
+ preserveSymlinks: options.preserveSymlinks,
50
+ external: options.externalDependencies,
51
+ conditions: ['style', 'sass'],
52
+ mainFields: ['style', 'sass'],
53
+ plugins: [
54
+ pluginFactory.create(sass_language_1.SassStylesheetLanguage),
55
+ pluginFactory.create(less_language_1.LessStylesheetLanguage),
56
+ pluginFactory.create(css_language_1.CssStylesheetLanguage),
57
+ (0, css_resource_plugin_1.createCssResourcePlugin)(cache),
58
+ ],
59
+ };
60
+ }
61
+ exports.createStylesheetBundleOptions = createStylesheetBundleOptions;
62
+ /**
63
+ * Bundles a component stylesheet. The stylesheet can be either an inline stylesheet that
64
+ * is contained within the Component's metadata definition or an external file referenced
65
+ * from the Component's metadata definition.
66
+ *
67
+ * @param identifier A unique string identifier for the component stylesheet.
68
+ * @param language The language of the stylesheet such as `css` or `scss`.
69
+ * @param data The string content of the stylesheet.
70
+ * @param filename The filename representing the source of the stylesheet content.
71
+ * @param inline If true, the stylesheet source is within the component metadata;
72
+ * if false, the source is a stylesheet file.
73
+ * @param options An object containing the stylesheet bundling options.
74
+ * @returns An object containing the output of the bundling operation.
75
+ */
76
+ async function bundleComponentStylesheet(language, data, filename, inline, options, cache) {
77
+ const namespace = 'angular:styles/component';
78
+ // Use a hash of the inline stylesheet content to ensure a consistent identifier. External stylesheets will resolve
79
+ // to the actual stylesheet file path.
80
+ // TODO: Consider xxhash instead for hashing
81
+ const id = inline ? (0, node_crypto_1.createHash)('sha256').update(data).digest('hex') : componentStyleCounter++;
82
+ const entry = [language, id, filename].join(';');
83
+ const buildOptions = createStylesheetBundleOptions(options, cache, { [entry]: data });
84
+ buildOptions.entryPoints = [`${namespace};${entry}`];
85
+ buildOptions.plugins.push({
86
+ name: 'angular-component-styles',
87
+ setup(build) {
88
+ build.onResolve({ filter: /^angular:styles\/component;/ }, (args) => {
89
+ if (args.kind !== 'entry-point') {
90
+ return null;
91
+ }
92
+ if (inline) {
93
+ return {
94
+ path: entry,
95
+ namespace,
96
+ };
97
+ }
98
+ else {
99
+ return {
100
+ path: filename,
101
+ };
102
+ }
103
+ });
104
+ build.onLoad({ filter: /^css;/, namespace }, async () => {
105
+ return {
106
+ contents: data,
107
+ loader: 'css',
108
+ resolveDir: node_path_1.default.dirname(filename),
109
+ };
110
+ });
111
+ },
112
+ });
113
+ // Execute esbuild
114
+ const context = new bundler_context_1.BundlerContext(options.workspaceRoot, false, buildOptions);
115
+ const result = await context.bundle();
116
+ // Extract the result of the bundling from the output files
117
+ let contents = '';
118
+ let map;
119
+ let outputPath;
120
+ const resourceFiles = [];
121
+ if (!result.errors) {
122
+ for (const outputFile of result.outputFiles) {
123
+ const filename = node_path_1.default.basename(outputFile.path);
124
+ if (filename.endsWith('.css')) {
125
+ outputPath = outputFile.path;
126
+ contents = outputFile.text;
127
+ }
128
+ else if (filename.endsWith('.css.map')) {
129
+ map = outputFile.text;
130
+ }
131
+ else {
132
+ // The output files could also contain resources (images/fonts/etc.) that were referenced
133
+ resourceFiles.push(outputFile);
134
+ }
135
+ }
136
+ }
137
+ let metafile;
138
+ if (!result.errors) {
139
+ metafile = result.metafile;
140
+ // Remove entryPoint fields from outputs to prevent the internal component styles from being
141
+ // treated as initial files. Also mark the entry as a component resource for stat reporting.
142
+ Object.values(metafile.outputs).forEach((output) => {
143
+ delete output.entryPoint;
144
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
145
+ output['ng-component'] = true;
146
+ });
147
+ }
148
+ return {
149
+ errors: result.errors,
150
+ warnings: result.warnings,
151
+ contents,
152
+ map,
153
+ path: outputPath,
154
+ resourceFiles,
155
+ metafile,
156
+ };
157
+ }
158
+ exports.bundleComponentStylesheet = bundleComponentStylesheet;
159
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVuZGxlLW9wdGlvbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9hbmd1bGFyX2RldmtpdC9idWlsZF9hbmd1bGFyL3NyYy90b29scy9lc2J1aWxkL3N0eWxlc2hlZXRzL2J1bmRsZS1vcHRpb25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7O0dBTUc7Ozs7OztBQUdILDZDQUF5QztBQUN6QywwREFBNkI7QUFDN0Isd0RBQW9EO0FBRXBELGlEQUF1RDtBQUN2RCwrREFBZ0U7QUFDaEUsbURBQXlEO0FBQ3pELG1EQUF5RDtBQUN6RCwyRUFBc0U7QUFFdEU7O0dBRUc7QUFDSCxJQUFJLHFCQUFxQixHQUFHLENBQUMsQ0FBQztBQWU5QixTQUFnQiw2QkFBNkIsQ0FDM0MsT0FBZ0MsRUFDaEMsS0FBdUIsRUFDdkIsbUJBQTRDO0lBRTVDLDZFQUE2RTtJQUM3RSxNQUFNLFlBQVksR0FBRyxPQUFPLENBQUMsWUFBWSxFQUFFLEdBQUcsQ0FBQyxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQzdELG1CQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxhQUFhLEVBQUUsV0FBVyxDQUFDLENBQ2pELENBQUM7SUFFRixNQUFNLGFBQWEsR0FBRyxJQUFJLG1EQUF1QixDQUMvQztRQUNFLFNBQVMsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLFNBQVM7UUFDOUIsWUFBWTtRQUNaLG1CQUFtQjtRQUNuQixRQUFRLEVBQUUsT0FBTyxDQUFDLFFBQVE7UUFDMUIscUJBQXFCLEVBQUUsT0FBTyxDQUFDLHFCQUFxQjtLQUNyRCxFQUNELEtBQUssQ0FDTixDQUFDO0lBRUYsT0FBTztRQUNMLGFBQWEsRUFBRSxPQUFPLENBQUMsYUFBYTtRQUNwQyxNQUFNLEVBQUUsSUFBSTtRQUNaLFVBQVUsRUFBRSxPQUFPLENBQUMsV0FBVyxFQUFFLE9BQU87UUFDeEMsVUFBVSxFQUFFLE9BQU8s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QyxVQUFVLENBQUM7WUFDekIsOERBQThEO1lBQzdELE1BQWMsQ0FBQyxjQUFjLENBQUMsR0FBRyxJQUFJLENBQUM7UUFDekMsQ0FBQyxDQUFDLENBQUM7S0FDSjtJQUVELE9BQU87UUFDTCxNQUFNLEVBQUUsTUFBTSxDQUFDLE1BQU07UUFDckIsUUFBUSxFQUFFLE1BQU0sQ0FBQyxRQUFRO1FBQ3pCLFFBQVE7UUFDUixHQUFHO1FBQ0gsSUFBSSxFQUFFLFVBQVU7UUFDaEIsYUFBYTtRQUNiLFFBQVE7S0FDVCxDQUFDO0FBQ0osQ0FBQztBQTNGRCw4REEyRkMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBCdWlsZE9wdGlvbnMsIE91dHB1dEZpbGUgfSBmcm9tICdlc2J1aWxkJztcbmltcG9ydCB7IGNyZWF0ZUhhc2ggfSBmcm9tICdub2RlOmNyeXB0byc7XG5pbXBvcnQgcGF0aCBmcm9tICdub2RlOnBhdGgnO1xuaW1wb3J0IHsgQnVuZGxlckNvbnRleHQgfSBmcm9tICcuLi9idW5kbGVyLWNvbnRleHQnO1xuaW1wb3J0IHsgTG9hZFJlc3VsdENhY2hlIH0gZnJvbSAnLi4vbG9hZC1yZXN1bHQtY2FjaGUnO1xuaW1wb3J0IHsgQ3NzU3R5bGVzaGVldExhbmd1YWdlIH0gZnJvbSAnLi9jc3MtbGFuZ3VhZ2UnO1xuaW1wb3J0IHsgY3JlYXRlQ3NzUmVzb3VyY2VQbHVnaW4gfSBmcm9tICcuL2Nzcy1yZXNvdXJjZS1wbHVnaW4nO1xuaW1wb3J0IHsgTGVzc1N0eWxlc2hlZXRMYW5ndWFnZSB9IGZyb20gJy4vbGVzcy1sYW5ndWFnZSc7XG5pbXBvcnQgeyBTYXNzU3R5bGVzaGVldExhbmd1YWdlIH0gZnJvbSAnLi9zYXNzLWxhbmd1YWdlJztcbmltcG9ydCB7IFN0eWxlc2hlZXRQbHVnaW5GYWN0b3J5IH0gZnJvbSAnLi9zdHlsZXNoZWV0LXBsdWdpbi1mYWN0b3J5JztcblxuLyoqXG4gKiBBIGNvdW50ZXIgZm9yIGNvbXBvbmVudCBzdHlsZXMgdXNlZCB0byBnZW5lcmF0ZSB1bmlxdWUgYnVpbGQtdGltZSBpZGVudGlmaWVycyBmb3IgZWFjaCBzdHlsZXNoZWV0LlxuICovXG5sZXQgY29tcG9uZW50U3R5bGVDb3VudGVyID0gMDtcblxuZXhwb3J0IGludGVyZmFjZSBCdW5kbGVTdHlsZXNoZWV0T3B0aW9ucyB7XG4gIHdvcmtzcGFjZVJvb3Q6IHN0cmluZztcbiAgb3B0aW1pemF0aW9uOiBib29sZWFuO1xuICBwcmVzZXJ2ZVN5bWxpbmtzPzogYm9vbGVhbjtcbiAgc291cmNlbWFwOiBib29sZWFuIHwgJ2V4dGVybmFsJyB8ICdpbmxpbmUnO1xuICBvdXRwdXROYW1lcz86IHsgYnVuZGxlcz86IHN0cmluZzsgbWVkaWE/OiBzdHJpbmcgfTtcbiAgaW5jbHVkZVBhdGhzPzogc3RyaW5nW107XG4gIGV4dGVybmFsRGVwZW5kZW5jaWVzPzogc3RyaW5nW107XG4gIHRhcmdldDogc3RyaW5nW107XG4gIGJyb3dzZXJzOiBzdHJpbmdbXTtcbiAgdGFpbHdpbmRDb25maWd1cmF0aW9uPzogeyBmaWxlOiBzdHJpbmc7IHBhY2thZ2U6IHN0cmluZyB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlU3R5bGVzaGVldEJ1bmRsZU9wdGlvbnMoXG4gIG9wdGlvbnM6IEJ1bmRsZVN0eWxlc2hlZXRPcHRpb25zLFxuICBjYWNoZT86IExvYWRSZXN1bHRDYWNoZSxcbiAgaW5saW5lQ29tcG9uZW50RGF0YT86IFJlY29yZDxzdHJpbmcsIHN0cmluZz4sXG4pOiBCdWlsZE9wdGlvbnMgJiB7IHBsdWdpbnM6IE5vbk51bGxhYmxlPEJ1aWxkT3B0aW9uc1sncGx1Z2lucyddPiB9IHtcbiAgLy8gRW5zdXJlIHByZXByb2Nlc3NvciBpbmNsdWRlIHBhdGhzIGFyZSBhYnNvbHV0ZSBiYXNlZCBvbiB0aGUgd29ya3NwYWNlIHJvb3RcbiAgY29uc3QgaW5jbHVkZVBhdGhzID0gb3B0aW9ucy5pbmNsdWRlUGF0aHM/Lm1hcCgoaW5jbHVkZVBhdGgpID0+XG4gICAgcGF0aC5yZXNvbHZlKG9wdGlvbnMud29ya3NwYWNlUm9vdCwgaW5jbHVkZVBhdGgpLFxuICApO1xuXG4gIGNvbnN0IHBsdWdpbkZhY3RvcnkgPSBuZXcgU3R5bGVzaGVldFBsdWdpbkZhY3RvcnkoXG4gICAge1xuICAgICAgc291cmNlbWFwOiAhIW9wdGlvbnMuc291cmNlbWFwLFxuICAgICAgaW5jbHVkZVBhdGhzLFxuICAgICAgaW5saW5lQ29tcG9uZW50RGF0YSxcbiAgICAgIGJyb3dzZXJzOiBvcHRpb25zLmJyb3dzZXJzLFxuICAgICAgdGFpbHdpbmRDb25maWd1cmF0aW9uOiBvcHRpb25zLnRhaWx3aW5kQ29uZmlndXJhdGlvbixcbiAgICB9LFxuICAgIGNhY2hlLFxuICApO1xuXG4gIHJldHVybiB7XG4gICAgYWJzV29ya2luZ0Rpcjogb3B0aW9ucy53b3Jrc3BhY2VSb290LFxuICAgIGJ1bmRsZTogdHJ1ZSxcbiAgICBlbnRyeU5hbWVzOiBvcHRpb25zLm91dHB1dE5hbWVzPy5idW5kbGVzLFxuICAgIGFzc2V0TmFtZXM6IG9wdGlvbnMub3V0cHV0TmFtZXM/Lm1lZGlhLFxuICAgIGxvZ0xldmVsOiAnc2lsZW50JyxcbiAgICBtaW5pZnk6IG9wdGlvbnMub3B0aW1pemF0aW9uLFxuICAgIG1ldGFmaWxlOiB0cnVlLFxuICAgIHNvdXJjZW1hcDogb3B0aW9ucy5zb3VyY2VtYXAsXG4gICAgb3V0ZGlyOiBvcHRpb25zLndvcmtzcGFjZVJvb3QsXG4gICAgd3JpdGU6IGZhbHNlLFxuICAgIHBsYXRmb3JtOiAnYnJvd3NlcicsXG4gICAgdGFyZ2V0OiBvcHRpb25zLnRhcmdldCxcbiAgICBwcmVzZXJ2ZVN5bWxpbmtzOiBvcHRpb25zLnByZXNlcnZlU3ltbGlua3MsXG4gICAgZXh0ZXJuYWw6IG9wdGlvbnMuZXh0ZXJuYWxEZXBlbmRlbmNpZXMsXG4gICAgY29uZGl0aW9uczogWydzdHlsZScsICdzYXNzJ10sXG4gICAgbWFpbkZpZWxkczogWydzdHlsZScsICdzYXNzJ10sXG4gICAgcGx1Z2luczogW1xuICAgICAgcGx1Z2luRmFjdG9yeS5jcmVhdGUoU2Fzc1N0eWxlc2hlZXRMYW5ndWFnZSksXG4gICAgICBwbHVnaW5GYWN0b3J5LmNyZWF0ZShMZXNzU3R5bGVzaGVldExhbmd1YWdlKSxcbiAgICAgIHBsdWdpbkZhY3RvcnkuY3JlYXRlKENzc1N0eWxlc2hlZXRMYW5ndWFnZSksXG4gICAgICBjcmVhdGVDc3NSZXNvdXJjZVBsdWdpbihjYWNoZSksXG4gICAgXSxcbiAgfTtcbn1cblxuLyoqXG4gKiBCdW5kbGVzIGEgY29tcG9uZW50IHN0eWxlc2hlZXQuIFRoZSBzdHlsZXNoZWV0IGNhbiBiZSBlaXRoZXIgYW4gaW5saW5lIHN0eWxlc2hlZXQgdGhhdFxuICogaXMgY29udGFpbmVkIHdpdGhpbiB0aGUgQ29tcG9uZW50J3MgbWV0YWRhdGEgZGVmaW5pdGlvbiBvciBhbiBleHRlcm5hbCBmaWxlIHJlZmVyZW5jZWRcbiAqIGZyb20gdGhlIENvbXBvbmVudCdzIG1ldGFkYXRhIGRlZmluaXRpb24uXG4gKlxuICogQHBhcmFtIGlkZW50aWZpZXIgQSB1bmlxdWUgc3RyaW5nIGlkZW50aWZpZXIgZm9yIHRoZSBjb21wb25lbnQgc3R5bGVzaGVldC5cbiAqIEBwYXJhbSBsYW5ndWFnZSBUaGUgbGFuZ3VhZ2Ugb2YgdGhlIHN0eWxlc2hlZXQgc3VjaCBhcyBgY3NzYCBvciBgc2Nzc2AuXG4gKiBAcGFyYW0gZGF0YSBUaGUgc3RyaW5nIGNvbnRlbnQgb2YgdGhlIHN0eWxlc2hlZXQuXG4gKiBAcGFyYW0gZmlsZW5hbWUgVGhlIGZpbGVuYW1lIHJlcHJlc2VudGluZyB0aGUgc291cmNlIG9mIHRoZSBzdHlsZXNoZWV0IGNvbnRlbnQuXG4gKiBAcGFyYW0gaW5saW5lIElmIHRydWUsIHRoZSBzdHlsZXNoZWV0IHNvdXJjZSBpcyB3aXRoaW4gdGhlIGNvbXBvbmVudCBtZXRhZGF0YTtcbiAqIGlmIGZhbHNlLCB0aGUgc291cmNlIGlzIGEgc3R5bGVzaGVldCBmaWxlLlxuICogQHBhcmFtIG9wdGlvbnMgQW4gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIHN0eWxlc2hlZXQgYnVuZGxpbmcgb3B0aW9ucy5cbiAqIEByZXR1cm5zIEFuIG9iamVjdCBjb250YWluaW5nIHRoZSBvdXRwdXQgb2YgdGhlIGJ1bmRsaW5nIG9wZXJhdGlvbi5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGJ1bmRsZUNvbXBvbmVudFN0eWxlc2hlZXQoXG4gIGxhbmd1YWdlOiBzdHJpbmcsXG4gIGRhdGE6IHN0cmluZyxcbiAgZmlsZW5hbWU6IHN0cmluZyxcbiAgaW5saW5lOiBib29sZWFuLFxuICBvcHRpb25zOiBCdW5kbGVTdHlsZXNoZWV0T3B0aW9ucyxcbiAgY2FjaGU/OiBMb2FkUmVzdWx0Q2FjaGUsXG4pIHtcbiAgY29uc3QgbmFtZXNwYWNlID0gJ2FuZ3VsYXI6c3R5bGVzL2NvbXBvbmVudCc7XG4gIC8vIFVzZSBhIGhhc2ggb2YgdGhlIGlubGluZSBzdHlsZXNoZWV0IGNvbnRlbnQgdG8gZW5zdXJlIGEgY29uc2lzdGVudCBpZGVudGlmaWVyLiBFeHRlcm5hbCBzdHlsZXNoZWV0cyB3aWxsIHJlc29sdmVcbiAgLy8gdG8gdGhlIGFjdHVhbCBzdHlsZXNoZWV0IGZpbGUgcGF0aC5cbiAgLy8gVE9ETzogQ29uc2lkZXIgeHhoYXNoIGluc3RlYWQgZm9yIGhhc2hpbmdcbiAgY29uc3QgaWQgPSBpbmxpbmUgPyBjcmVhdGVIYXNoKCdzaGEyNTYnKS51cGRhdGUoZGF0YSkuZGlnZXN0KCdoZXgnKSA6IGNvbXBvbmVudFN0eWxlQ291bnRlcisrO1xuICBjb25zdCBlbnRyeSA9IFtsYW5ndWFnZSwgaWQsIGZpbGVuYW1lXS5qb2luKCc7Jyk7XG5cbiAgY29uc3QgYnVpbGRPcHRpb25zID0gY3JlYXRlU3R5bGVzaGVldEJ1bmRsZU9wdGlvbnMob3B0aW9ucywgY2FjaGUsIHsgW2VudHJ5XTogZGF0YSB9KTtcbiAgYnVpbGRPcHRpb25zLmVudHJ5UG9pbnRzID0gW2Ake25hbWVzcGFjZX07JHtlbnRyeX1gXTtcbiAgYnVpbGRPcHRpb25zLnBsdWdpbnMucHVzaCh7XG4gICAgbmFtZTogJ2FuZ3VsYXItY29tcG9uZW50LXN0eWxlcycsXG4gICAgc2V0dXAoYnVpbGQpIHtcbiAgICAgIGJ1aWxkLm9uUmVzb2x2ZSh7IGZpbHRlcjogL15hbmd1bGFyOnN0eWxlc1xcL2NvbXBvbmVudDsvIH0sIChhcmdzKSA9PiB7XG4gICAgICAgIGlmIChhcmdzLmtpbmQgIT09ICdlbnRyeS1wb2ludCcpIHtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpbmxpbmUpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcGF0aDogZW50cnksXG4gICAgICAgICAgICBuYW1lc3BhY2UsXG4gICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcGF0aDogZmlsZW5hbWUsXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBidWlsZC5vbkxvYWQoeyBmaWx0ZXI6IC9eY3NzOy8sIG5hbWVzcGFjZSB9LCBhc3luYyAoKSA9PiB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgY29udGVudHM6IGRhdGEsXG4gICAgICAgICAgbG9hZGVyOiAnY3NzJyxcbiAgICAgICAgICByZXNvbHZlRGlyOiBwYXRoLmRpcm5hbWUoZmlsZW5hbWUpLFxuICAgICAgICB9O1xuICAgICAgfSk7XG4gICAgfSxcbiAgfSk7XG5cbiAgLy8gRXhlY3V0ZSBlc2J1aWxkXG4gIGNvbnN0IGNvbnRleHQgPSBuZXcgQnVuZGxlckNvbnRleHQob3B0aW9ucy53b3Jrc3BhY2VSb290LCBmYWxzZSwgYnVpbGRPcHRpb25zKTtcbiAgY29uc3QgcmVzdWx0ID0gYXdhaXQgY29udGV4dC5idW5kbGUoKTtcblxuICAvLyBFeHRyYWN0IHRoZSByZXN1bHQgb2YgdGhlIGJ1bmRsaW5nIGZyb20gdGhlIG91dHB1dCBmaWxlc1xuICBsZXQgY29udGVudHMgPSAnJztcbiAgbGV0IG1hcDtcbiAgbGV0IG91dHB1dFBhdGg7XG4gIGNvbnN0IHJlc291cmNlRmlsZXM6IE91dHB1dEZpbGVbXSA9IFtdO1xuICBpZiAoIXJlc3VsdC5lcnJvcnMpIHtcbiAgICBmb3IgKGNvbnN0IG91dHB1dEZpbGUgb2YgcmVzdWx0Lm91dHB1dEZpbGVzKSB7XG4gICAgICBjb25zdCBmaWxlbmFtZSA9IHBhdGguYmFzZW5hbWUob3V0cHV0RmlsZS5wYXRoKTtcbiAgICAgIGlmIChmaWxlbmFtZS5lbmRzV2l0aCgnLmNzcycpKSB7XG4gICAgICAgIG91dHB1dFBhdGggPSBvdXRwdXRGaWxlLnBhdGg7XG4gICAgICAgIGNvbnRlbnRzID0gb3V0cHV0RmlsZS50ZXh0O1xuICAgICAgfSBlbHNlIGlmIChmaWxlbmFtZS5lbmRzV2l0aCgnLmNzcy5tYXAnKSkge1xuICAgICAgICBtYXAgPSBvdXRwdXRGaWxlLnRleHQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBUaGUgb3V0cHV0IGZpbGVzIGNvdWxkIGFsc28gY29udGFpbiByZXNvdXJjZXMgKGltYWdlcy9mb250cy9ldGMuKSB0aGF0IHdlcmUgcmVmZXJlbmNlZFxuICAgICAgICByZXNvdXJjZUZpbGVzLnB1c2gob3V0cHV0RmlsZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgbGV0IG1ldGFmaWxlO1xuICBpZiAoIXJlc3VsdC5lcnJvcnMpIHtcbiAgICBtZXRhZmlsZSA9IHJlc3VsdC5tZXRhZmlsZTtcbiAgICAvLyBSZW1vdmUgZW50cnlQb2ludCBmaWVsZHMgZnJvbSBvdXRwdXRzIHRvIHByZXZlbnQgdGhlIGludGVybmFsIGNvbXBvbmVudCBzdHlsZXMgZnJvbSBiZWluZ1xuICAgIC8vIHRyZWF0ZWQgYXMgaW5pdGlhbCBmaWxlcy4gQWxzbyBtYXJrIHRoZSBlbnRyeSBhcyBhIGNvbXBvbmVudCByZXNvdXJjZSBmb3Igc3RhdCByZXBvcnRpbmcuXG4gICAgT2JqZWN0LnZhbHVlcyhtZXRhZmlsZS5vdXRwdXRzKS5mb3JFYWNoKChvdXRwdXQpID0+IHtcbiAgICAgIGRlbGV0ZSBvdXRwdXQuZW50cnlQb2ludDtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgICAob3V0cHV0IGFzIGFueSlbJ25nLWNvbXBvbmVudCddID0gdHJ1ZTtcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgZXJyb3JzOiByZXN1bHQuZXJyb3JzLFxuICAgIHdhcm5pbmdzOiByZXN1bHQud2FybmluZ3MsXG4gICAgY29udGVudHMsXG4gICAgbWFwLFxuICAgIHBhdGg6IG91dHB1dFBhdGgsXG4gICAgcmVzb3VyY2VGaWxlcyxcbiAgICBtZXRhZmlsZSxcbiAgfTtcbn1cbiJdfQ==
@@ -0,0 +1,16 @@
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.CssStylesheetLanguage = void 0;
11
+ exports.CssStylesheetLanguage = Object.freeze({
12
+ name: 'css',
13
+ componentFilter: /^css;/,
14
+ fileFilter: /\.css$/,
15
+ });
16
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3NzLWxhbmd1YWdlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvYW5ndWxhcl9kZXZraXQvYnVpbGRfYW5ndWxhci9zcmMvdG9vbHMvZXNidWlsZC9zdHlsZXNoZWV0cy9jc3MtbGFuZ3VhZ2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7R0FNRzs7O0FBSVUsUUFBQSxxQkFBcUIsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFxQjtJQUNyRSxJQUFJLEVBQUUsS0FBSztJQUNYLGVBQWUsRUFBRSxPQUFPO0lBQ3hCLFVBQVUsRUFBRSxRQUFRO0NBQ3JCLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG5pbXBvcnQgeyBTdHlsZXNoZWV0TGFuZ3VhZ2UgfSBmcm9tICcuL3N0eWxlc2hlZXQtcGx1Z2luLWZhY3RvcnknO1xuXG5leHBvcnQgY29uc3QgQ3NzU3R5bGVzaGVldExhbmd1YWdlID0gT2JqZWN0LmZyZWV6ZTxTdHlsZXNoZWV0TGFuZ3VhZ2U+KHtcbiAgbmFtZTogJ2NzcycsXG4gIGNvbXBvbmVudEZpbHRlcjogL15jc3M7LyxcbiAgZmlsZUZpbHRlcjogL1xcLmNzcyQvLFxufSk7XG4iXX0=