@angular-devkit/build-angular 16.1.0-next.2 → 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 (256) hide show
  1. package/package.json +23 -23
  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/schema.js +6 -6
  6. package/src/builders/browser-esbuild/index.js +28 -390
  7. package/src/builders/browser-esbuild/options.js +2 -2
  8. package/src/builders/browser-esbuild/schema.js +6 -6
  9. package/src/builders/dev-server/load-proxy-config.d.ts +1 -6
  10. package/src/builders/dev-server/load-proxy-config.js +52 -13
  11. package/src/builders/dev-server/vite-server.js +3 -6
  12. package/src/builders/dev-server/webpack-server.d.ts +1 -1
  13. package/src/builders/dev-server/webpack-server.js +6 -6
  14. package/src/builders/extract-i18n/index.js +3 -3
  15. package/src/builders/extract-i18n/schema.js +2 -2
  16. package/src/builders/karma/index.js +2 -2
  17. package/src/builders/karma/schema.js +2 -2
  18. package/src/builders/server/index.js +4 -4
  19. package/src/builders/server/schema.js +4 -4
  20. package/src/tools/babel/plugins/adjust-static-class-members.js +354 -0
  21. package/src/tools/babel/plugins/adjust-typescript-enums.js +124 -0
  22. package/src/tools/babel/plugins/elide-angular-metadata.js +68 -0
  23. package/src/tools/babel/plugins/pure-toplevel-functions.js +91 -0
  24. package/src/tools/babel/presets/application.js +197 -0
  25. package/src/{babel → tools/babel}/webpack-loader.d.ts +1 -1
  26. package/src/tools/babel/webpack-loader.js +189 -0
  27. package/src/tools/esbuild/angular/angular-compilation.js +51 -0
  28. package/src/tools/esbuild/angular/angular-host.js +60 -0
  29. package/src/tools/esbuild/angular/aot-compilation.js +208 -0
  30. package/src/tools/esbuild/angular/compiler-plugin.js +314 -0
  31. package/src/tools/esbuild/angular/diagnostics.js +75 -0
  32. package/src/tools/esbuild/angular/jit-compilation.js +106 -0
  33. package/src/tools/esbuild/angular/jit-plugin-callbacks.js +113 -0
  34. package/src/tools/esbuild/angular/jit-resource-transformer.js +185 -0
  35. package/src/tools/esbuild/angular/uri.js +75 -0
  36. package/src/tools/esbuild/application-code-bundle.d.ts +11 -0
  37. package/src/tools/esbuild/application-code-bundle.js +111 -0
  38. package/src/{builders/browser-esbuild/esbuild.d.ts → tools/esbuild/bundler-context.d.ts} +10 -15
  39. package/src/tools/esbuild/bundler-context.js +194 -0
  40. package/src/tools/esbuild/bundler-execution-result.d.ts +44 -0
  41. package/src/tools/esbuild/bundler-execution-result.js +53 -0
  42. package/src/tools/esbuild/commonjs-checker.js +141 -0
  43. package/src/tools/esbuild/external-packages-plugin.d.ts +17 -0
  44. package/src/tools/esbuild/external-packages-plugin.js +49 -0
  45. package/src/{builders/browser-esbuild → tools/esbuild}/global-scripts.d.ts +1 -1
  46. package/src/tools/esbuild/global-scripts.js +139 -0
  47. package/src/{builders/browser-esbuild → tools/esbuild}/global-styles.d.ts +1 -1
  48. package/src/tools/esbuild/global-styles.js +67 -0
  49. package/src/tools/esbuild/index-html-generator.d.ts +12 -0
  50. package/src/tools/esbuild/index-html-generator.js +70 -0
  51. package/src/tools/esbuild/javascript-transformer-worker.js +76 -0
  52. package/src/tools/esbuild/javascript-transformer.js +108 -0
  53. package/src/tools/esbuild/license-extractor.js +159 -0
  54. package/src/tools/esbuild/load-result-cache.js +69 -0
  55. package/src/tools/esbuild/profiling.js +79 -0
  56. package/src/tools/esbuild/sourcemap-ignorelist-plugin.js +74 -0
  57. package/src/tools/esbuild/stylesheets/bundle-options.js +159 -0
  58. package/src/tools/esbuild/stylesheets/css-language.js +16 -0
  59. package/src/tools/esbuild/stylesheets/css-resource-plugin.js +88 -0
  60. package/src/tools/esbuild/stylesheets/less-language.js +127 -0
  61. package/src/tools/esbuild/stylesheets/sass-language.js +169 -0
  62. package/src/tools/esbuild/stylesheets/stylesheet-plugin-factory.js +218 -0
  63. package/src/tools/esbuild/utils.d.ts +30 -0
  64. package/src/tools/esbuild/utils.js +192 -0
  65. package/src/tools/esbuild/virtual-module-plugin.d.ts +28 -0
  66. package/src/tools/esbuild/virtual-module-plugin.js +43 -0
  67. package/src/tools/esbuild/watcher.js +105 -0
  68. package/src/tools/sass/rebasing-importer.js +445 -0
  69. package/src/tools/sass/sass-service-legacy.js +176 -0
  70. package/src/tools/sass/sass-service.js +214 -0
  71. package/src/tools/sass/worker-legacy.js +44 -0
  72. package/src/tools/sass/worker.js +158 -0
  73. package/src/{webpack → tools/webpack}/configs/common.d.ts +1 -1
  74. package/src/tools/webpack/configs/common.js +421 -0
  75. package/src/{webpack → tools/webpack}/configs/dev-server.d.ts +1 -1
  76. package/src/tools/webpack/configs/dev-server.js +304 -0
  77. package/src/{webpack → tools/webpack}/configs/index.js +1 -1
  78. package/src/{webpack → tools/webpack}/configs/styles.d.ts +1 -1
  79. package/src/tools/webpack/configs/styles.js +396 -0
  80. package/src/{webpack → tools/webpack}/plugins/any-component-style-budget-checker.d.ts +1 -1
  81. package/src/tools/webpack/plugins/any-component-style-budget-checker.js +92 -0
  82. package/src/tools/webpack/plugins/builder-watch-plugin.js +99 -0
  83. package/src/tools/webpack/plugins/common-js-usage-warn-plugin.js +121 -0
  84. package/src/tools/webpack/plugins/css-optimizer-plugin.js +123 -0
  85. package/src/tools/webpack/plugins/dedupe-module-resolve-plugin.js +75 -0
  86. package/src/tools/webpack/plugins/devtools-ignore-plugin.js +57 -0
  87. package/src/tools/webpack/plugins/esbuild-executor.js +121 -0
  88. package/src/tools/webpack/plugins/hmr/hmr-accept.js +185 -0
  89. package/src/tools/webpack/plugins/hmr/hmr-loader.js +25 -0
  90. package/src/{webpack → tools/webpack}/plugins/index-html-webpack-plugin.d.ts +1 -1
  91. package/src/tools/webpack/plugins/index-html-webpack-plugin.js +85 -0
  92. package/src/{webpack → tools/webpack}/plugins/index.js +1 -1
  93. package/src/tools/webpack/plugins/javascript-optimizer-plugin.js +166 -0
  94. package/src/tools/webpack/plugins/javascript-optimizer-worker.js +140 -0
  95. package/src/tools/webpack/plugins/json-stats-plugin.js +61 -0
  96. package/src/tools/webpack/plugins/karma/karma.js +270 -0
  97. package/src/tools/webpack/plugins/named-chunks-plugin.js +59 -0
  98. package/src/tools/webpack/plugins/occurrences-plugin.js +80 -0
  99. package/src/tools/webpack/plugins/postcss-cli-resources.js +176 -0
  100. package/src/tools/webpack/plugins/progress-plugin.js +39 -0
  101. package/src/tools/webpack/plugins/remove-hash-plugin.js +31 -0
  102. package/src/tools/webpack/plugins/scripts-webpack-plugin.js +180 -0
  103. package/src/tools/webpack/plugins/service-worker-plugin.js +46 -0
  104. package/src/tools/webpack/plugins/styles-webpack-plugin.js +73 -0
  105. package/src/tools/webpack/plugins/suppress-entry-chunks-webpack-plugin.js +52 -0
  106. package/src/tools/webpack/plugins/transfer-size-plugin.js +50 -0
  107. package/src/{webpack → tools/webpack}/plugins/typescript.d.ts +1 -1
  108. package/src/tools/webpack/plugins/typescript.js +51 -0
  109. package/src/tools/webpack/plugins/watch-files-logs-plugin.js +28 -0
  110. package/src/tools/webpack/utils/async-chunks.js +46 -0
  111. package/src/{webpack → tools/webpack}/utils/helpers.d.ts +2 -2
  112. package/src/tools/webpack/utils/helpers.js +293 -0
  113. package/src/{webpack → tools/webpack}/utils/stats.d.ts +2 -2
  114. package/src/tools/webpack/utils/stats.js +443 -0
  115. package/src/utils/bundle-calculator.js +3 -3
  116. package/src/utils/index-file/augment-index-html.d.ts +5 -1
  117. package/src/utils/index-file/augment-index-html.js +29 -3
  118. package/src/utils/index-file/index-html-generator.d.ts +5 -0
  119. package/src/utils/index-file/index-html-generator.js +3 -2
  120. package/src/utils/normalize-asset-patterns.d.ts +1 -1
  121. package/src/utils/normalize-asset-patterns.js +1 -1
  122. package/src/utils/normalize-file-replacements.d.ts +1 -1
  123. package/src/utils/normalize-file-replacements.js +1 -1
  124. package/src/utils/package-chunk-sort.js +2 -2
  125. package/src/utils/webpack-browser-config.js +2 -2
  126. package/src/babel/plugins/adjust-static-class-members.js +0 -354
  127. package/src/babel/plugins/adjust-typescript-enums.js +0 -124
  128. package/src/babel/plugins/elide-angular-metadata.js +0 -68
  129. package/src/babel/plugins/pure-toplevel-functions.js +0 -91
  130. package/src/babel/presets/application.js +0 -197
  131. package/src/babel/webpack-loader.js +0 -189
  132. package/src/builders/browser-esbuild/angular/angular-compilation.js +0 -51
  133. package/src/builders/browser-esbuild/angular/angular-host.js +0 -60
  134. package/src/builders/browser-esbuild/angular/aot-compilation.js +0 -208
  135. package/src/builders/browser-esbuild/angular/compiler-plugin.js +0 -314
  136. package/src/builders/browser-esbuild/angular/diagnostics.js +0 -75
  137. package/src/builders/browser-esbuild/angular/jit-compilation.js +0 -106
  138. package/src/builders/browser-esbuild/angular/jit-plugin-callbacks.js +0 -113
  139. package/src/builders/browser-esbuild/angular/jit-resource-transformer.js +0 -185
  140. package/src/builders/browser-esbuild/angular/uri.js +0 -75
  141. package/src/builders/browser-esbuild/commonjs-checker.js +0 -141
  142. package/src/builders/browser-esbuild/esbuild.js +0 -178
  143. package/src/builders/browser-esbuild/global-scripts.js +0 -155
  144. package/src/builders/browser-esbuild/global-styles.js +0 -76
  145. package/src/builders/browser-esbuild/javascript-transformer-worker.js +0 -76
  146. package/src/builders/browser-esbuild/javascript-transformer.js +0 -108
  147. package/src/builders/browser-esbuild/license-extractor.js +0 -159
  148. package/src/builders/browser-esbuild/load-result-cache.js +0 -69
  149. package/src/builders/browser-esbuild/profiling.js +0 -79
  150. package/src/builders/browser-esbuild/sourcemap-ignorelist-plugin.js +0 -74
  151. package/src/builders/browser-esbuild/stylesheets/bundle-options.js +0 -159
  152. package/src/builders/browser-esbuild/stylesheets/css-language.js +0 -16
  153. package/src/builders/browser-esbuild/stylesheets/css-resource-plugin.js +0 -88
  154. package/src/builders/browser-esbuild/stylesheets/less-language.js +0 -127
  155. package/src/builders/browser-esbuild/stylesheets/sass-language.js +0 -169
  156. package/src/builders/browser-esbuild/stylesheets/stylesheet-plugin-factory.js +0 -218
  157. package/src/builders/browser-esbuild/watcher.js +0 -105
  158. package/src/sass/rebasing-importer.js +0 -445
  159. package/src/sass/sass-service-legacy.js +0 -176
  160. package/src/sass/sass-service.js +0 -214
  161. package/src/sass/worker-legacy.js +0 -44
  162. package/src/sass/worker.js +0 -158
  163. package/src/webpack/configs/common.js +0 -421
  164. package/src/webpack/configs/dev-server.js +0 -304
  165. package/src/webpack/configs/styles.js +0 -396
  166. package/src/webpack/plugins/any-component-style-budget-checker.js +0 -92
  167. package/src/webpack/plugins/builder-watch-plugin.js +0 -99
  168. package/src/webpack/plugins/common-js-usage-warn-plugin.js +0 -121
  169. package/src/webpack/plugins/css-optimizer-plugin.js +0 -123
  170. package/src/webpack/plugins/dedupe-module-resolve-plugin.js +0 -75
  171. package/src/webpack/plugins/devtools-ignore-plugin.js +0 -57
  172. package/src/webpack/plugins/esbuild-executor.js +0 -121
  173. package/src/webpack/plugins/hmr/hmr-accept.js +0 -185
  174. package/src/webpack/plugins/hmr/hmr-loader.js +0 -25
  175. package/src/webpack/plugins/index-html-webpack-plugin.js +0 -85
  176. package/src/webpack/plugins/javascript-optimizer-plugin.js +0 -166
  177. package/src/webpack/plugins/javascript-optimizer-worker.js +0 -140
  178. package/src/webpack/plugins/json-stats-plugin.js +0 -61
  179. package/src/webpack/plugins/karma/karma.js +0 -270
  180. package/src/webpack/plugins/named-chunks-plugin.js +0 -59
  181. package/src/webpack/plugins/occurrences-plugin.js +0 -80
  182. package/src/webpack/plugins/postcss-cli-resources.js +0 -176
  183. package/src/webpack/plugins/progress-plugin.js +0 -39
  184. package/src/webpack/plugins/remove-hash-plugin.js +0 -31
  185. package/src/webpack/plugins/scripts-webpack-plugin.js +0 -180
  186. package/src/webpack/plugins/service-worker-plugin.js +0 -46
  187. package/src/webpack/plugins/styles-webpack-plugin.js +0 -73
  188. package/src/webpack/plugins/suppress-entry-chunks-webpack-plugin.js +0 -52
  189. package/src/webpack/plugins/transfer-size-plugin.js +0 -50
  190. package/src/webpack/plugins/typescript.js +0 -51
  191. package/src/webpack/plugins/watch-files-logs-plugin.js +0 -28
  192. package/src/webpack/utils/async-chunks.js +0 -46
  193. package/src/webpack/utils/helpers.js +0 -293
  194. package/src/webpack/utils/stats.js +0 -443
  195. /package/src/{babel → tools/babel}/babel-loader.d.ts +0 -0
  196. /package/src/{babel → tools/babel}/plugins/adjust-static-class-members.d.ts +0 -0
  197. /package/src/{babel → tools/babel}/plugins/adjust-typescript-enums.d.ts +0 -0
  198. /package/src/{babel → tools/babel}/plugins/elide-angular-metadata.d.ts +0 -0
  199. /package/src/{babel → tools/babel}/plugins/pure-toplevel-functions.d.ts +0 -0
  200. /package/src/{babel → tools/babel}/presets/application.d.ts +0 -0
  201. /package/src/{builders/browser-esbuild → tools/esbuild}/angular/angular-compilation.d.ts +0 -0
  202. /package/src/{builders/browser-esbuild → tools/esbuild}/angular/angular-host.d.ts +0 -0
  203. /package/src/{builders/browser-esbuild → tools/esbuild}/angular/aot-compilation.d.ts +0 -0
  204. /package/src/{builders/browser-esbuild → tools/esbuild}/angular/compiler-plugin.d.ts +0 -0
  205. /package/src/{builders/browser-esbuild → tools/esbuild}/angular/diagnostics.d.ts +0 -0
  206. /package/src/{builders/browser-esbuild → tools/esbuild}/angular/jit-compilation.d.ts +0 -0
  207. /package/src/{builders/browser-esbuild → tools/esbuild}/angular/jit-plugin-callbacks.d.ts +0 -0
  208. /package/src/{builders/browser-esbuild → tools/esbuild}/angular/jit-resource-transformer.d.ts +0 -0
  209. /package/src/{builders/browser-esbuild → tools/esbuild}/angular/uri.d.ts +0 -0
  210. /package/src/{builders/browser-esbuild → tools/esbuild}/commonjs-checker.d.ts +0 -0
  211. /package/src/{builders/browser-esbuild → tools/esbuild}/javascript-transformer-worker.d.ts +0 -0
  212. /package/src/{builders/browser-esbuild → tools/esbuild}/javascript-transformer.d.ts +0 -0
  213. /package/src/{builders/browser-esbuild → tools/esbuild}/license-extractor.d.ts +0 -0
  214. /package/src/{builders/browser-esbuild → tools/esbuild}/load-result-cache.d.ts +0 -0
  215. /package/src/{builders/browser-esbuild → tools/esbuild}/profiling.d.ts +0 -0
  216. /package/src/{builders/browser-esbuild → tools/esbuild}/sourcemap-ignorelist-plugin.d.ts +0 -0
  217. /package/src/{builders/browser-esbuild → tools/esbuild}/stylesheets/bundle-options.d.ts +0 -0
  218. /package/src/{builders/browser-esbuild → tools/esbuild}/stylesheets/css-language.d.ts +0 -0
  219. /package/src/{builders/browser-esbuild → tools/esbuild}/stylesheets/css-resource-plugin.d.ts +0 -0
  220. /package/src/{builders/browser-esbuild → tools/esbuild}/stylesheets/less-language.d.ts +0 -0
  221. /package/src/{builders/browser-esbuild → tools/esbuild}/stylesheets/sass-language.d.ts +0 -0
  222. /package/src/{builders/browser-esbuild → tools/esbuild}/stylesheets/stylesheet-plugin-factory.d.ts +0 -0
  223. /package/src/{builders/browser-esbuild → tools/esbuild}/watcher.d.ts +0 -0
  224. /package/src/{sass → tools/sass}/rebasing-importer.d.ts +0 -0
  225. /package/src/{sass → tools/sass}/sass-service-legacy.d.ts +0 -0
  226. /package/src/{sass → tools/sass}/sass-service.d.ts +0 -0
  227. /package/src/{sass → tools/sass}/worker-legacy.d.ts +0 -0
  228. /package/src/{sass → tools/sass}/worker.d.ts +0 -0
  229. /package/src/{webpack → tools/webpack}/configs/index.d.ts +0 -0
  230. /package/src/{webpack → tools/webpack}/plugins/builder-watch-plugin.d.ts +0 -0
  231. /package/src/{webpack → tools/webpack}/plugins/common-js-usage-warn-plugin.d.ts +0 -0
  232. /package/src/{webpack → tools/webpack}/plugins/css-optimizer-plugin.d.ts +0 -0
  233. /package/src/{webpack → tools/webpack}/plugins/dedupe-module-resolve-plugin.d.ts +0 -0
  234. /package/src/{webpack → tools/webpack}/plugins/devtools-ignore-plugin.d.ts +0 -0
  235. /package/src/{webpack → tools/webpack}/plugins/esbuild-executor.d.ts +0 -0
  236. /package/src/{webpack → tools/webpack}/plugins/hmr/hmr-accept.d.ts +0 -0
  237. /package/src/{webpack → tools/webpack}/plugins/hmr/hmr-loader.d.ts +0 -0
  238. /package/src/{webpack → tools/webpack}/plugins/index.d.ts +0 -0
  239. /package/src/{webpack → tools/webpack}/plugins/javascript-optimizer-plugin.d.ts +0 -0
  240. /package/src/{webpack → tools/webpack}/plugins/javascript-optimizer-worker.d.ts +0 -0
  241. /package/src/{webpack → tools/webpack}/plugins/json-stats-plugin.d.ts +0 -0
  242. /package/src/{webpack → tools/webpack}/plugins/karma/karma-context.html +0 -0
  243. /package/src/{webpack → tools/webpack}/plugins/karma/karma-debug.html +0 -0
  244. /package/src/{webpack → tools/webpack}/plugins/karma/karma.d.ts +0 -0
  245. /package/src/{webpack → tools/webpack}/plugins/named-chunks-plugin.d.ts +0 -0
  246. /package/src/{webpack → tools/webpack}/plugins/occurrences-plugin.d.ts +0 -0
  247. /package/src/{webpack → tools/webpack}/plugins/postcss-cli-resources.d.ts +0 -0
  248. /package/src/{webpack → tools/webpack}/plugins/progress-plugin.d.ts +0 -0
  249. /package/src/{webpack → tools/webpack}/plugins/remove-hash-plugin.d.ts +0 -0
  250. /package/src/{webpack → tools/webpack}/plugins/scripts-webpack-plugin.d.ts +0 -0
  251. /package/src/{webpack → tools/webpack}/plugins/service-worker-plugin.d.ts +0 -0
  252. /package/src/{webpack → tools/webpack}/plugins/styles-webpack-plugin.d.ts +0 -0
  253. /package/src/{webpack → tools/webpack}/plugins/suppress-entry-chunks-webpack-plugin.d.ts +0 -0
  254. /package/src/{webpack → tools/webpack}/plugins/transfer-size-plugin.d.ts +0 -0
  255. /package/src/{webpack → tools/webpack}/plugins/watch-files-logs-plugin.d.ts +0 -0
  256. /package/src/{webpack → tools/webpack}/utils/async-chunks.d.ts +0 -0
@@ -1,314 +0,0 @@
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.createCompilerPlugin = exports.SourceFileCache = void 0;
37
- const promises_1 = require("node:fs/promises");
38
- const node_os_1 = require("node:os");
39
- const path = __importStar(require("node:path"));
40
- const node_url_1 = require("node:url");
41
- const typescript_1 = __importDefault(require("typescript"));
42
- const environment_options_1 = require("../../../utils/environment-options");
43
- const javascript_transformer_1 = require("../javascript-transformer");
44
- const load_result_cache_1 = require("../load-result-cache");
45
- const profiling_1 = require("../profiling");
46
- const bundle_options_1 = require("../stylesheets/bundle-options");
47
- const angular_compilation_1 = require("./angular-compilation");
48
- const aot_compilation_1 = require("./aot-compilation");
49
- const diagnostics_1 = require("./diagnostics");
50
- const jit_compilation_1 = require("./jit-compilation");
51
- const jit_plugin_callbacks_1 = require("./jit-plugin-callbacks");
52
- const USING_WINDOWS = (0, node_os_1.platform)() === 'win32';
53
- const WINDOWS_SEP_REGEXP = new RegExp(`\\${path.win32.sep}`, 'g');
54
- class SourceFileCache extends Map {
55
- constructor(persistentCachePath) {
56
- super();
57
- this.persistentCachePath = persistentCachePath;
58
- this.modifiedFiles = new Set();
59
- this.babelFileCache = new Map();
60
- this.typeScriptFileCache = new Map();
61
- this.loadResultCache = new load_result_cache_1.MemoryLoadResultCache();
62
- }
63
- invalidate(files) {
64
- this.modifiedFiles.clear();
65
- for (let file of files) {
66
- this.babelFileCache.delete(file);
67
- this.typeScriptFileCache.delete((0, node_url_1.pathToFileURL)(file).href);
68
- this.loadResultCache.invalidate(file);
69
- // Normalize separators to allow matching TypeScript Host paths
70
- if (USING_WINDOWS) {
71
- file = file.replace(WINDOWS_SEP_REGEXP, path.posix.sep);
72
- }
73
- this.delete(file);
74
- this.modifiedFiles.add(file);
75
- }
76
- }
77
- }
78
- exports.SourceFileCache = SourceFileCache;
79
- // eslint-disable-next-line max-lines-per-function
80
- function createCompilerPlugin(pluginOptions, styleOptions) {
81
- return {
82
- name: 'angular-compiler',
83
- // eslint-disable-next-line max-lines-per-function
84
- async setup(build) {
85
- var _a;
86
- let setupWarnings = [];
87
- const preserveSymlinks = build.initialOptions.preserveSymlinks;
88
- let tsconfigPath = pluginOptions.tsconfig;
89
- if (!preserveSymlinks) {
90
- // Use the real path of the tsconfig if not preserving symlinks.
91
- // This ensures the TS source file paths are based on the real path of the configuration.
92
- try {
93
- tsconfigPath = await (0, promises_1.realpath)(tsconfigPath);
94
- }
95
- catch { }
96
- }
97
- // Initialize a worker pool for JavaScript transformations
98
- const javascriptTransformer = new javascript_transformer_1.JavaScriptTransformer(pluginOptions, environment_options_1.maxWorkers);
99
- // Setup defines based on the values provided by the Angular compiler-cli
100
- const { GLOBAL_DEFS_FOR_TERSER_WITH_AOT } = await angular_compilation_1.AngularCompilation.loadCompilerCli();
101
- (_a = build.initialOptions).define ?? (_a.define = {});
102
- for (const [key, value] of Object.entries(GLOBAL_DEFS_FOR_TERSER_WITH_AOT)) {
103
- if (key in build.initialOptions.define) {
104
- // Skip keys that have been manually provided
105
- continue;
106
- }
107
- if (key === 'ngDevMode') {
108
- // ngDevMode is already set based on the builder's script optimization option
109
- continue;
110
- }
111
- // esbuild requires values to be a string (actual strings need to be quoted).
112
- // In this case, all provided values are booleans.
113
- build.initialOptions.define[key] = value.toString();
114
- }
115
- // The in-memory cache of TypeScript file outputs will be used during the build in `onLoad` callbacks for TS files.
116
- // A string value indicates direct TS/NG output and a Uint8Array indicates fully transformed code.
117
- const typeScriptFileCache = pluginOptions.sourceFileCache?.typeScriptFileCache ??
118
- new Map();
119
- // The stylesheet resources from component stylesheets that will be added to the build results output files
120
- let stylesheetResourceFiles = [];
121
- let stylesheetMetafiles;
122
- // Create new reusable compilation for the appropriate mode based on the `jit` plugin option
123
- const compilation = pluginOptions.jit
124
- ? new jit_compilation_1.JitCompilation()
125
- : new aot_compilation_1.AotCompilation();
126
- // Determines if TypeScript should process JavaScript files based on tsconfig `allowJs` option
127
- let shouldTsIgnoreJs = true;
128
- build.onStart(async () => {
129
- const result = {
130
- warnings: setupWarnings,
131
- };
132
- // Reset debug performance tracking
133
- (0, profiling_1.resetCumulativeDurations)();
134
- // Reset stylesheet resource output files
135
- stylesheetResourceFiles = [];
136
- stylesheetMetafiles = [];
137
- // Create Angular compiler host options
138
- const hostOptions = {
139
- fileReplacements: pluginOptions.fileReplacements,
140
- modifiedFiles: pluginOptions.sourceFileCache?.modifiedFiles,
141
- sourceFileCache: pluginOptions.sourceFileCache,
142
- async transformStylesheet(data, containingFile, stylesheetFile) {
143
- // Stylesheet file only exists for external stylesheets
144
- const filename = stylesheetFile ?? containingFile;
145
- const stylesheetResult = await (0, bundle_options_1.bundleComponentStylesheet)(styleOptions.inlineStyleLanguage, data, filename, !stylesheetFile, styleOptions, pluginOptions.loadResultCache);
146
- const { contents, resourceFiles, errors, warnings } = stylesheetResult;
147
- if (errors) {
148
- (result.errors ?? (result.errors = [])).push(...errors);
149
- }
150
- (result.warnings ?? (result.warnings = [])).push(...warnings);
151
- stylesheetResourceFiles.push(...resourceFiles);
152
- if (stylesheetResult.metafile) {
153
- stylesheetMetafiles.push(stylesheetResult.metafile);
154
- }
155
- return contents;
156
- },
157
- };
158
- // Initialize the Angular compilation for the current build.
159
- // In watch mode, previous build state will be reused.
160
- const { compilerOptions: { allowJs }, referencedFiles, } = await compilation.initialize(tsconfigPath, hostOptions, (compilerOptions) => {
161
- if (compilerOptions.target === undefined ||
162
- compilerOptions.target < typescript_1.default.ScriptTarget.ES2022) {
163
- // If 'useDefineForClassFields' is already defined in the users project leave the value as is.
164
- // Otherwise fallback to false due to https://github.com/microsoft/TypeScript/issues/45995
165
- // which breaks the deprecated `@Effects` NGRX decorator and potentially other existing code as well.
166
- compilerOptions.target = typescript_1.default.ScriptTarget.ES2022;
167
- compilerOptions.useDefineForClassFields ?? (compilerOptions.useDefineForClassFields = false);
168
- // Only add the warning on the initial build
169
- setupWarnings?.push({
170
- text: 'TypeScript compiler options "target" and "useDefineForClassFields" are set to "ES2022" and ' +
171
- '"false" respectively by the Angular CLI.',
172
- location: { file: pluginOptions.tsconfig },
173
- notes: [
174
- {
175
- text: 'To control ECMA version and features use the Browerslist configuration. ' +
176
- 'For more information, see https://angular.io/guide/build#configuring-browser-compatibility',
177
- },
178
- ],
179
- });
180
- }
181
- // Enable incremental compilation by default if caching is enabled
182
- if (pluginOptions.sourceFileCache?.persistentCachePath) {
183
- compilerOptions.incremental ?? (compilerOptions.incremental = true);
184
- // Set the build info file location to the configured cache directory
185
- compilerOptions.tsBuildInfoFile = path.join(pluginOptions.sourceFileCache?.persistentCachePath, '.tsbuildinfo');
186
- }
187
- else {
188
- compilerOptions.incremental = false;
189
- }
190
- return {
191
- ...compilerOptions,
192
- noEmitOnError: false,
193
- inlineSources: pluginOptions.sourcemap,
194
- inlineSourceMap: pluginOptions.sourcemap,
195
- mapRoot: undefined,
196
- sourceRoot: undefined,
197
- preserveSymlinks,
198
- };
199
- });
200
- shouldTsIgnoreJs = !allowJs;
201
- (0, profiling_1.profileSync)('NG_DIAGNOSTICS_TOTAL', () => {
202
- for (const diagnostic of compilation.collectDiagnostics()) {
203
- const message = (0, diagnostics_1.convertTypeScriptDiagnostic)(diagnostic);
204
- if (diagnostic.category === typescript_1.default.DiagnosticCategory.Error) {
205
- (result.errors ?? (result.errors = [])).push(message);
206
- }
207
- else {
208
- (result.warnings ?? (result.warnings = [])).push(message);
209
- }
210
- }
211
- });
212
- // Update TypeScript file output cache for all affected files
213
- (0, profiling_1.profileSync)('NG_EMIT_TS', () => {
214
- for (const { filename, contents } of compilation.emitAffectedFiles()) {
215
- typeScriptFileCache.set((0, node_url_1.pathToFileURL)(filename).href, contents);
216
- }
217
- });
218
- // Store referenced files for updated file watching if enabled
219
- if (pluginOptions.sourceFileCache) {
220
- pluginOptions.sourceFileCache.referencedFiles = referencedFiles;
221
- }
222
- // Reset the setup warnings so that they are only shown during the first build.
223
- setupWarnings = undefined;
224
- return result;
225
- });
226
- build.onLoad({ filter: /\.[cm]?[jt]sx?$/ }, async (args) => {
227
- const request = pluginOptions.fileReplacements?.[args.path] ?? args.path;
228
- // Skip TS load attempt if JS TypeScript compilation not enabled and file is JS
229
- if (shouldTsIgnoreJs && /\.[cm]?js$/.test(request)) {
230
- return undefined;
231
- }
232
- // The filename is currently used as a cache key. Since the cache is memory only,
233
- // the options cannot change and do not need to be represented in the key. If the
234
- // cache is later stored to disk, then the options that affect transform output
235
- // would need to be added to the key as well as a check for any change of content.
236
- let contents = typeScriptFileCache.get((0, node_url_1.pathToFileURL)(request).href);
237
- if (contents === undefined) {
238
- // No TS result indicates the file is not part of the TypeScript program.
239
- // If allowJs is enabled and the file is JS then defer to the next load hook.
240
- if (!shouldTsIgnoreJs && /\.[cm]?js$/.test(request)) {
241
- return undefined;
242
- }
243
- // Otherwise return an error
244
- return {
245
- errors: [
246
- createMissingFileError(request, args.path, build.initialOptions.absWorkingDir ?? ''),
247
- ],
248
- };
249
- }
250
- else if (typeof contents === 'string') {
251
- // A string indicates untransformed output from the TS/NG compiler
252
- contents = await javascriptTransformer.transformData(request, contents, true /* skipLinker */);
253
- // Store as the returned Uint8Array to allow caching the fully transformed code
254
- typeScriptFileCache.set((0, node_url_1.pathToFileURL)(request).href, contents);
255
- }
256
- return {
257
- contents,
258
- loader: 'js',
259
- };
260
- });
261
- build.onLoad({ filter: /\.[cm]?js$/ }, (args) => (0, profiling_1.profileAsync)('NG_EMIT_JS*', async () => {
262
- // The filename is currently used as a cache key. Since the cache is memory only,
263
- // the options cannot change and do not need to be represented in the key. If the
264
- // cache is later stored to disk, then the options that affect transform output
265
- // would need to be added to the key as well as a check for any change of content.
266
- let contents = pluginOptions.sourceFileCache?.babelFileCache.get(args.path);
267
- if (contents === undefined) {
268
- contents = await javascriptTransformer.transformFile(args.path, pluginOptions.jit);
269
- pluginOptions.sourceFileCache?.babelFileCache.set(args.path, contents);
270
- }
271
- return {
272
- contents,
273
- loader: 'js',
274
- };
275
- }, true));
276
- // Setup bundling of component templates and stylesheets when in JIT mode
277
- if (pluginOptions.jit) {
278
- (0, jit_plugin_callbacks_1.setupJitPluginCallbacks)(build, styleOptions, stylesheetResourceFiles, pluginOptions.loadResultCache);
279
- }
280
- build.onEnd((result) => {
281
- // Add any component stylesheet resource files to the output files
282
- if (stylesheetResourceFiles.length) {
283
- result.outputFiles?.push(...stylesheetResourceFiles);
284
- }
285
- // Combine component stylesheet metafiles with main metafile
286
- if (result.metafile && stylesheetMetafiles.length) {
287
- for (const metafile of stylesheetMetafiles) {
288
- result.metafile.inputs = { ...result.metafile.inputs, ...metafile.inputs };
289
- result.metafile.outputs = { ...result.metafile.outputs, ...metafile.outputs };
290
- }
291
- }
292
- (0, profiling_1.logCumulativeDurations)();
293
- });
294
- },
295
- };
296
- }
297
- exports.createCompilerPlugin = createCompilerPlugin;
298
- function createMissingFileError(request, original, root) {
299
- const error = {
300
- text: `File '${path.relative(root, request)}' is missing from the TypeScript compilation.`,
301
- notes: [
302
- {
303
- text: `Ensure the file is part of the TypeScript program via the 'files' or 'include' property.`,
304
- },
305
- ],
306
- };
307
- if (request !== original) {
308
- error.notes.push({
309
- text: `File is requested from a file replacement of '${path.relative(root, original)}'.`,
310
- });
311
- }
312
- return error;
313
- }
314
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcGlsZXItcGx1Z2luLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvYW5ndWxhcl9kZXZraXQvYnVpbGRfYW5ndWxhci9zcmMvYnVpbGRlcnMvYnJvd3Nlci1lc2J1aWxkL2FuZ3VsYXIvY29tcGlsZXItcGx1Z2luLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7O0dBTUc7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBVUgsK0NBQTRDO0FBQzVDLHFDQUFtQztBQUNuQyxnREFBa0M7QUFDbEMsdUNBQXlDO0FBQ3pDLDREQUE0QjtBQUM1Qiw0RUFBZ0U7QUFDaEUsc0VBQWtFO0FBQ2xFLDREQUE4RTtBQUM5RSw0Q0FLc0I7QUFDdEIsa0VBQW1HO0FBQ25HLCtEQUEyRDtBQUUzRCx1REFBbUQ7QUFDbkQsK0NBQTREO0FBQzVELHVEQUFtRDtBQUNuRCxpRUFBaUU7QUFFakUsTUFBTSxhQUFhLEdBQUcsSUFBQSxrQkFBUSxHQUFFLEtBQUssT0FBTyxDQUFDO0FBQzdDLE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxNQUFNLENBQUMsS0FBSyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBRWxFLE1BQWEsZUFBZ0IsU0FBUSxHQUEwQjtJQVE3RCxZQUFxQixtQkFBNEI7UUFDL0MsS0FBSyxFQUFFLENBQUM7UUFEVyx3QkFBbUIsR0FBbkIsbUJBQW1CLENBQVM7UUFQeEMsa0JBQWEsR0FBRyxJQUFJLEdBQUcsRUFBVSxDQUFDO1FBQ2xDLG1CQUFjLEdBQUcsSUFBSSxHQUFHLEVBQXNCLENBQUM7UUFDL0Msd0JBQW1CLEdBQUcsSUFBSSxHQUFHLEVBQStCLENBQUM7UUFDN0Qsb0JBQWUsR0FBRyxJQUFJLHlDQUFxQixFQUFFLENBQUM7SUFNdkQsQ0FBQztJQUVELFVBQVUsQ0FBQyxLQUF1QjtRQUNoQyxJQUFJLENBQUMs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QUFDLENBQUMsQ0FBQztRQUNMLENBQUM7S0FDRixDQUFDO0FBQ0osQ0FBQztBQTNSRCxvREEyUkM7QUFFRCxTQUFTLHNCQUFzQixDQUFDLE9BQWUsRUFBRSxRQUFnQixFQUFFLElBQVk7SUFDN0UsTUFBTSxLQUFLLEdBQUc7UUFDWixJQUFJLEVBQUUsU0FBUyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsK0NBQStDO1FBQzFGLEtBQUssRUFBRTtZQUNMO2dCQUNFLElBQUksRUFBRSwwRkFBMEY7YUFDakc7U0FDRjtLQUNGLENBQUM7SUFFRixJQUFJLE9BQU8sS0FBSyxRQUFRLEVBQUU7UUFDeEIsS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUM7WUFDZixJQUFJLEVBQUUsaURBQWlELElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxJQUFJO1NBQ3pGLENBQUMsQ0FBQztLQUNKO0lBRUQsT0FBTyxLQUFLLENBQUM7QUFDZixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbmltcG9ydCB0eXBlIHtcbiAgTWV0YWZpbGUsXG4gIE9uU3RhcnRSZXN1bHQsXG4gIE91dHB1dEZpbGUsXG4gIFBhcnRpYWxNZXNzYWdlLFxuICBQbHVnaW4sXG4gIFBsdWdpbkJ1aWxkLFxufSBmcm9tICdlc2J1aWxkJztcbmltcG9ydCB7IHJlYWxwYXRoIH0gZnJvbSAnbm9kZTpmcy9wcm9taXNlcyc7XG5pbXBvcnQgeyBwbGF0Zm9ybSB9IGZyb20gJ25vZGU6b3MnO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdub2RlOnBhdGgnO1xuaW1wb3J0IHsgcGF0aFRvRmlsZVVSTCB9IGZyb20gJ25vZGU6dXJsJztcbmltcG9ydCB0cyBmcm9tICd0eXBlc2NyaXB0JztcbmltcG9ydCB7IG1heFdvcmtlcnMgfSBmcm9tICcuLi8uLi8uLi91dGlscy9lbnZpcm9ubWVudC1vcHRpb25zJztcbmltcG9ydCB7IEphdmFTY3JpcHRUcmFuc2Zvcm1lciB9IGZyb20gJy4uL2phdmFzY3JpcHQtdHJhbnNmb3JtZXInO1xuaW1wb3J0IHsgTG9hZFJlc3VsdENhY2hlLCBNZW1vcnlMb2FkUmVzdWx0Q2FjaGUgfSBmcm9tICcuLi9sb2FkLXJlc3VsdC1jYWNoZSc7XG5pbXBvcnQge1xuICBsb2dDdW11bGF0aXZlRHVyYXRpb25zLFxuICBwcm9maWxlQXN5bmMsXG4gIHByb2ZpbGVTeW5jLFxuICByZXNldEN1bXVsYXRpdmVEdXJhdGlvbnMsXG59IGZyb20gJy4uL3Byb2ZpbGluZyc7XG5pbXBvcnQgeyBCdW5kbGVTdHlsZXNoZWV0T3B0aW9ucywgYnVuZGxlQ29tcG9uZW50U3R5bGVzaGVldCB9IGZyb20gJy4uL3N0eWxlc2hlZXRzL2J1bmRsZS1vcHRpb25zJztcbmltcG9ydCB7IEFuZ3VsYXJDb21waWxhdGlvbiB9IGZyb20gJy4vYW5ndWxhci1jb21waWxhdGlvbic7XG5pbXBvcnQgeyBBbmd1bGFySG9zdE9wdGlvbnMgfSBmcm9tICcuL2FuZ3VsYXItaG9zdCc7XG5pbXBvcnQgeyBBb3RDb21waWxhdGlvbiB9IGZyb20gJy4vYW90LWNvbXBpbGF0aW9uJztcbmltcG9ydCB7IGNvbnZlcnRUeXBlU2NyaXB0RGlhZ25vc3RpYyB9IGZyb20gJy4vZGlhZ25vc3RpY3MnO1xuaW1wb3J0IHsgSml0Q29tcGlsYXRpb24gfSBmcm9tICcuL2ppdC1jb21waWxhdGlvbic7XG5pbXBvcnQgeyBzZXR1cEppdFBsdWdpbkNhbGxiYWNrcyB9IGZyb20gJy4vaml0LXBsdWdpbi1jYWxsYmFja3MnO1xuXG5jb25zdCBVU0lOR19XSU5ET1dTID0gcGxhdGZvcm0oKSA9PT0gJ3dpbjMyJztcbmNvbnN0IFdJTkRPV1NfU0VQX1JFR0VYUCA9IG5ldyBSZWdFeHAoYFxcXFwke3BhdGgud2luMzIuc2VwfWAsICdnJyk7XG5cbmV4cG9ydCBjbGFzcyBTb3VyY2VGaWxlQ2FjaGUgZXh0ZW5kcyBNYXA8c3RyaW5nLCB0cy5Tb3VyY2VGaWxlPiB7XG4gIHJlYWRvbmx5IG1vZGlmaWVkRmlsZXMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgcmVhZG9ubHkgYmFiZWxGaWxlQ2FjaGUgPSBuZXcgTWFwPHN0cmluZywgVWludDhBcnJheT4oKTtcbiAgcmVhZG9ubHkgdHlwZVNjcmlwdEZpbGVDYWNoZSA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmcgfCBVaW50OEFycmF5PigpO1xuICByZWFkb25seSBsb2FkUmVzdWx0Q2FjaGUgPSBuZXcgTWVtb3J5TG9hZFJlc3VsdENhY2hlKCk7XG5cbiAgcmVmZXJlbmNlZEZpbGVzPzogcmVhZG9ubHkgc3RyaW5nW107XG5cbiAgY29uc3RydWN0b3IocmVhZG9ubHkgcGVyc2lzdGVudENhY2hlUGF0aD86IHN0cmluZykge1xuICAgIHN1cGVyKCk7XG4gIH1cblxuICBpbnZhbGlkYXRlKGZpbGVzOiBJdGVyYWJsZTxzdHJpbmc+KTogdm9pZCB7XG4gICAgdGhpcy5tb2RpZmllZEZpbGVzLmNsZWFyKCk7XG4gICAgZm9yIChsZXQgZmlsZSBvZiBmaWxlcykge1xuICAgICAgdGhpcy5iYWJlbEZpbGVDYWNoZS5kZWxldGUoZmlsZSk7XG4gICAgICB0aGlzLnR5cGVTY3JpcHRGaWxlQ2FjaGUuZGVsZXRlKHBhdGhUb0ZpbGVVUkwoZmlsZSkuaHJlZik7XG4gICAgICB0aGlzLmxvYWRSZXN1bHRDYWNoZS5pbnZhbGlkYXRlKGZpbGUpO1xuXG4gICAgICAvLyBOb3JtYWxpemUgc2VwYXJhdG9ycyB0byBhbGxvdyBtYXRjaGluZyBUeXBlU2NyaXB0IEhvc3QgcGF0aHNcbiAgICAgIGlmIChVU0lOR19XSU5ET1dTKSB7XG4gICAgICAgIGZpbGUgPSBmaWxlLnJlcGxhY2UoV0lORE9XU19TRVBfUkVHRVhQLCBwYXRoLnBvc2l4LnNlcCk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuZGVsZXRlKGZpbGUpO1xuICAgICAgdGhpcy5tb2RpZmllZEZpbGVzLmFkZChmaWxlKTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBDb21waWxlclBsdWdpbk9wdGlvbnMge1xuICBzb3VyY2VtYXA6IGJvb2xlYW47XG4gIHRzY29uZmlnOiBzdHJpbmc7XG4gIGppdD86IGJvb2xlYW47XG4gIGFkdmFuY2VkT3B0aW1pemF0aW9ucz86IGJvb2xlYW47XG4gIHRoaXJkUGFydHlTb3VyY2VtYXBzPzogYm9vbGVhbjtcbiAgZmlsZVJlcGxhY2VtZW50cz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gIHNvdXJjZUZpbGVDYWNoZT86IFNvdXJjZUZpbGVDYWNoZTtcbiAgbG9hZFJlc3VsdENhY2hlPzogTG9hZFJlc3VsdENhY2hlO1xufVxuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbWF4LWxpbmVzLXBlci1mdW5jdGlvblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUNvbXBpbGVyUGx1Z2luKFxuICBwbHVnaW5PcHRpb25zOiBDb21waWxlclBsdWdpbk9wdGlvbnMsXG4gIHN0eWxlT3B0aW9uczogQnVuZGxlU3R5bGVzaGVldE9wdGlvbnMgJiB7IGlubGluZVN0eWxlTGFuZ3VhZ2U6IHN0cmluZyB9LFxuKTogUGx1Z2luIHtcbiAgcmV0dXJuIHtcbiAgICBuYW1lOiAnYW5ndWxhci1jb21waWxlcicsXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG1heC1saW5lcy1wZXItZnVuY3Rpb25cbiAgICBhc3luYyBzZXR1cChidWlsZDogUGx1Z2luQnVpbGQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgIGxldCBzZXR1cFdhcm5pbmdzOiBQYXJ0aWFsTWVzc2FnZVtdIHwgdW5kZWZpbmVkID0gW107XG5cbiAgICAgIGNvbnN0IHByZXNlcnZlU3ltbGlua3MgPSBidWlsZC5pbml0aWFsT3B0aW9ucy5wcmVzZXJ2ZVN5bWxpbmtzO1xuICAgICAgbGV0IHRzY29uZmlnUGF0aCA9IHBsdWdpbk9wdGlvbnMudHNjb25maWc7XG4gICAgICBpZiAoIXByZXNlcnZlU3ltbGlua3MpIHtcbiAgICAgICAgLy8gVXNlIHRoZSByZWFsIHBhdGggb2YgdGhlIHRzY29uZmlnIGlmIG5vdCBwcmVzZXJ2aW5nIHN5bWxpbmtzLlxuICAgICAgICAvLyBUaGlzIGVuc3VyZXMgdGhlIFRTIHNvdXJjZSBmaWxlIHBhdGhzIGFyZSBiYXNlZCBvbiB0aGUgcmVhbCBwYXRoIG9mIHRoZSBjb25maWd1cmF0aW9uLlxuICAgICAgICB0cnkge1xuICAgICAgICAgIHRzY29uZmlnUGF0aCA9IGF3YWl0IHJlYWxwYXRoKHRzY29uZmlnUGF0aCk7XG4gICAgICAgIH0gY2F0Y2gge31cbiAgICAgIH1cblxuICAgICAgLy8gSW5pdGlhbGl6ZSBhIHdvcmtlciBwb29sIGZvciBKYXZhU2NyaXB0IHRyYW5zZm9ybWF0aW9uc1xuICAgICAgY29uc3QgamF2YXNjcmlwdFRyYW5zZm9ybWVyID0gbmV3IEphdmFTY3JpcHRUcmFuc2Zvcm1lcihwbHVnaW5PcHRpb25zLCBtYXhXb3JrZXJzKTtcblxuICAgICAgLy8gU2V0dXAgZGVmaW5lcyBiYXNlZCBvbiB0aGUgdmFsdWVzIHByb3ZpZGVkIGJ5IHRoZSBBbmd1bGFyIGNvbXBpbGVyLWNsaVxuICAgICAgY29uc3QgeyBHTE9CQUxfREVGU19GT1JfVEVSU0VSX1dJVEhfQU9UIH0gPSBhd2FpdCBBbmd1bGFyQ29tcGlsYXRpb24ubG9hZENvbXBpbGVyQ2xpKCk7XG4gICAgICBidWlsZC5pbml0aWFsT3B0aW9ucy5kZWZpbmUgPz89IHt9O1xuICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoR0xPQkFMX0RFRlNfRk9SX1RFUlNFUl9XSVRIX0FPVCkpIHtcbiAgICAgICAgaWYgKGtleSBpbiBidWlsZC5pbml0aWFsT3B0aW9ucy5kZWZpbmUpIHtcbiAgICAgICAgICAvLyBTa2lwIGtleXMgdGhhdCBoYXZlIGJlZW4gbWFudWFsbHkgcHJvdmlkZWRcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoa2V5ID09PSAnbmdEZXZNb2RlJykge1xuICAgICAgICAgIC8vIG5nRGV2TW9kZSBpcyBhbHJlYWR5IHNldCBiYXNlZCBvbiB0aGUgYnVpbGRlcidzIHNjcmlwdCBvcHRpbWl6YXRpb24gb3B0aW9uXG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgLy8gZXNidWlsZCByZXF1aXJlcyB2YWx1ZXMgdG8gYmUgYSBzdHJpbmcgKGFjdHVhbCBzdHJpbmdzIG5lZWQgdG8gYmUgcXVvdGVkKS5cbiAgICAgICAgLy8gSW4gdGhpcyBjYXNlLCBhbGwgcHJvdmlkZWQgdmFsdWVzIGFyZSBib29sZWFucy5cbiAgICAgICAgYnVpbGQuaW5pdGlhbE9wdGlvbnMuZGVmaW5lW2tleV0gPSB2YWx1ZS50b1N0cmluZygpO1xuICAgICAgfVxuXG4gICAgICAvLyBUaGUgaW4tbWVtb3J5IGNhY2hlIG9mIFR5cGVTY3JpcHQgZmlsZSBvdXRwdXRzIHdpbGwgYmUgdXNlZCBkdXJpbmcgdGhlIGJ1aWxkIGluIGBvbkxvYWRgIGNhbGxiYWNrcyBmb3IgVFMgZmlsZXMuXG4gICAgICAvLyBBIHN0cmluZyB2YWx1ZSBpbmRpY2F0ZXMgZGlyZWN0IFRTL05HIG91dHB1dCBhbmQgYSBVaW50OEFycmF5IGluZGljYXRlcyBmdWxseSB0cmFuc2Zvcm1lZCBjb2RlLlxuICAgICAgY29uc3QgdHlwZVNjcmlwdEZpbGVDYWNoZSA9XG4gICAgICAgIHBsdWdpbk9wdGlvbnMuc291cmNlRmlsZUNhY2hlPy50eXBlU2NyaXB0RmlsZUNhY2hlID8/XG4gICAgICAgIG5ldyBNYXA8c3RyaW5nLCBzdHJpbmcgfCBVaW50OEFycmF5PigpO1xuXG4gICAgICAvLyBUaGUgc3R5bGVzaGVldCByZXNvdXJjZXMgZnJvbSBjb21wb25lbnQgc3R5bGVzaGVldHMgdGhhdCB3aWxsIGJlIGFkZGVkIHRvIHRoZSBidWlsZCByZXN1bHRzIG91dHB1dCBmaWxlc1xuICAgICAgbGV0IHN0eWxlc2hlZXRSZXNvdXJjZUZpbGVzOiBPdXRwdXRGaWxlW10gPSBbXTtcbiAgICAgIGxldCBzdHlsZXNoZWV0TWV0YWZpbGVzOiBNZXRhZmlsZVtdO1xuXG4gICAgICAvLyBDcmVhdGUgbmV3IHJldXNhYmxlIGNvbXBpbGF0aW9uIGZvciB0aGUgYXBwcm9wcmlhdGUgbW9kZSBiYXNlZCBvbiB0aGUgYGppdGAgcGx1Z2luIG9wdGlvblxuICAgICAgY29uc3QgY29tcGlsYXRpb246IEFuZ3VsYXJDb21waWxhdGlvbiA9IHBsdWdpbk9wdGlvbnMuaml0XG4gICAgICAgID8gbmV3IEppdENvbXBpbGF0aW9uKClcbiAgICAgICAgOiBuZXcgQW90Q29tcGlsYXRpb24oKTtcblxuICAgICAgLy8gRGV0ZXJtaW5lcyBpZiBUeXBlU2NyaXB0IHNob3VsZCBwcm9jZXNzIEphdmFTY3JpcHQgZmlsZXMgYmFzZWQgb24gdHNjb25maWcgYGFsbG93SnNgIG9wdGlvblxuICAgICAgbGV0IHNob3VsZFRzSWdub3JlSnMgPSB0cnVlO1xuXG4gICAgICBidWlsZC5vblN0YXJ0KGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0OiBPblN0YXJ0UmVzdWx0ID0ge1xuICAgICAgICAgIHdhcm5pbmdzOiBzZXR1cFdhcm5pbmdzLFxuICAgICAgICB9O1xuXG4gICAgICAgIC8vIFJlc2V0IGRlYnVnIHBlcmZvcm1hbmNlIHRyYWNraW5nXG4gICAgICAgIHJlc2V0Q3VtdWxhdGl2ZUR1cmF0aW9ucygpO1xuXG4gICAgICAgIC8vIFJlc2V0IHN0eWxlc2hlZXQgcmVzb3VyY2Ugb3V0cHV0IGZpbGVzXG4gICAgICAgIHN0eWxlc2hlZXRSZXNvdXJjZUZpbGVzID0gW107XG4gICAgICAgIHN0eWxlc2hlZXRNZXRhZmlsZXMgPSBbXTtcblxuICAgICAgICAvLyBDcmVhdGUgQW5ndWxhciBjb21waWxlciBob3N0IG9wdGlvbnNcbiAgICAgICAgY29uc3QgaG9zdE9wdGlvbnM6IEFuZ3VsYXJIb3N0T3B0aW9ucyA9IHtcbiAgICAgICAgICBmaWxlUmVwbGFjZW1lbnRzOiBwbHVnaW5PcHRpb25zLmZpbGVSZXBsYWNlbWVudHMsXG4gICAgICAgICAgbW9kaWZpZWRGaWxlczogcGx1Z2luT3B0aW9ucy5zb3VyY2VGaWxlQ2FjaGU/Lm1vZGlmaWVkRmlsZXMsXG4gICAgICAgICAgc291cmNlRmlsZUNhY2hlOiBwbHVnaW5PcHRpb25zLnNvdXJjZUZpbGVDYWNoZSxcbiAgICAgICAgICBhc3luYyB0cmFuc2Zvcm1TdHlsZXNoZWV0KGRhdGEsIGNvbnRhaW5pbmdGaWxlLCBzdHlsZXNoZWV0RmlsZSkge1xuICAgICAgICAgICAgLy8gU3R5bGVzaGVldCBmaWxlIG9ubHkgZXhpc3RzIGZvciBleHRlcm5hbCBzdHlsZXNoZWV0c1xuICAgICAgICAgICAgY29uc3QgZmlsZW5hbWUgPSBzdHlsZXNoZWV0RmlsZSA/PyBjb250YWluaW5nRmlsZTtcblxuICAgICAgICAgICAgY29uc3Qgc3R5bGVzaGVldFJlc3VsdCA9IGF3YWl0IGJ1bmRsZUNvbXBvbmVudFN0eWxlc2hlZXQoXG4gICAgICAgICAgICAgIHN0eWxlT3B0aW9ucy5pbmxpbmVTdHlsZUxhbmd1YWdlLFxuICAgICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAgICBmaWxlbmFtZSxcbiAgICAgICAgICAgICAgIXN0eWxlc2hlZXRGaWxlLFxuICAgICAgICAgICAgICBzdHlsZU9wdGlvbnMsXG4gICAgICAgICAgICAgIHBsdWdpbk9wdGlvbnMubG9hZFJlc3VsdENhY2hlLFxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgY29uc3QgeyBjb250ZW50cywgcmVzb3VyY2VGaWxlcywgZXJyb3JzLCB3YXJuaW5ncyB9ID0gc3R5bGVzaGVldFJlc3VsdDtcbiAgICAgICAgICAgIGlmIChlcnJvcnMpIHtcbiAgICAgICAgICAgICAgKHJlc3VsdC5lcnJvcnMgPz89IFtdKS5wdXNoKC4uLmVycm9ycyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAocmVzdWx0Lndhcm5pbmdzID8/PSBbXSkucHVzaCguLi53YXJuaW5ncyk7XG4gICAgICAgICAgICBzdHlsZXNoZWV0UmVzb3VyY2VGaWxlcy5wdXNoKC4uLnJlc291cmNlRmlsZXMpO1xuICAgICAgICAgICAgaWYgKHN0eWxlc2hlZXRSZXN1bHQubWV0YWZpbGUpIHtcbiAgICAgICAgICAgICAgc3R5bGVzaGVldE1ldGFmaWxlcy5wdXNoKHN0eWxlc2hlZXRSZXN1bHQubWV0YWZpbGUpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gY29udGVudHM7XG4gICAgICAgICAgfSxcbiAgICAgICAgfTtcblxuICAgICAgICAvLyBJbml0aWFsaXplIHRoZSBBbmd1bGFyIGNvbXBpbGF0aW9uIGZvciB0aGUgY3VycmVudCBidWlsZC5cbiAgICAgICAgLy8gSW4gd2F0Y2ggbW9kZSwgcHJldmlvdXMgYnVpbGQgc3RhdGUgd2lsbCBiZSByZXVzZWQuXG4gICAgICAgIGNvbnN0IHtcbiAgICAgICAgICBjb21waWxlck9wdGlvbnM6IHsgYWxsb3dKcyB9LFxuICAgICAgICAgIHJlZmVyZW5jZWRGaWxlcyxcbiAgICAgICAgfSA9IGF3YWl0IGNvbXBpbGF0aW9uLmluaXRpYWxpemUodHNjb25maWdQYXRoLCBob3N0T3B0aW9ucywgKGNvbXBpbGVyT3B0aW9ucykgPT4ge1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIGNvbXBpbGVyT3B0aW9ucy50YXJnZXQgPT09IHVuZGVmaW5lZCB8fFxuICAgICAgICAgICAgY29tcGlsZXJPcHRpb25zLnRhcmdldCA8IHRzLlNjcmlwdFRhcmdldC5FUzIwMjJcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIC8vIElmICd1c2VEZWZpbmVGb3JDbGFzc0ZpZWxkcycgaXMgYWxyZWFkeSBkZWZpbmVkIGluIHRoZSB1c2VycyBwcm9qZWN0IGxlYXZlIHRoZSB2YWx1ZSBhcyBpcy5cbiAgICAgICAgICAgIC8vIE90aGVyd2lzZSBmYWxsYmFjayB0byBmYWxzZSBkdWUgdG8gaHR0cHM6Ly9naXRodWIuY29tL21pY3Jvc29mdC9UeXBlU2NyaXB0L2lzc3Vlcy80NTk5NVxuICAgICAgICAgICAgLy8gd2hpY2ggYnJlYWtzIHRoZSBkZXByZWNhdGVkIGBARWZmZWN0c2AgTkdSWCBkZWNvcmF0b3IgYW5kIHBvdGVudGlhbGx5IG90aGVyIGV4aXN0aW5nIGNvZGUgYXMgd2VsbC5cbiAgICAgICAgICAgIGNvbXBpbGVyT3B0aW9ucy50YXJnZXQgPSB0cy5TY3JpcHRUYXJnZXQuRVMyMDIyO1xuICAgICAgICAgICAgY29tcGlsZXJPcHRpb25zLnVzZURlZmluZUZvckNsYXNzRmllbGRzID8/PSBmYWxzZTtcblxuICAgICAgICAgICAgLy8gT25seSBhZGQgdGhlIHdhcm5pbmcgb24gdGhlIGluaXRpYWwgYnVpbGRcbiAgICAgICAgICAgIHNldHVwV2FybmluZ3M/LnB1c2goe1xuICAgICAgICAgICAgICB0ZXh0OlxuICAgICAgICAgICAgICAgICdUeXBlU2NyaXB0IGNvbXBpbGVyIG9wdGlvbnMgXCJ0YXJnZXRcIiBhbmQgXCJ1c2VEZWZpbmVGb3JDbGFzc0ZpZWxkc1wiIGFyZSBzZXQgdG8gXCJFUzIwMjJcIiBhbmQgJyArXG4gICAgICAgICAgICAgICAgJ1wiZmFsc2VcIiByZXNwZWN0aXZlbHkgYnkgdGhlIEFuZ3VsYXIgQ0xJLicsXG4gICAgICAgICAgICAgIGxvY2F0aW9uOiB7IGZpbGU6IHBsdWdpbk9wdGlvbnMudHNjb25maWcgfSxcbiAgICAgICAgICAgICAgbm90ZXM6IFtcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICB0ZXh0OlxuICAgICAgICAgICAgICAgICAgICAnVG8gY29udHJvbCBFQ01BIHZlcnNpb24gYW5kIGZlYXR1cmVzIHVzZSB0aGUgQnJvd2Vyc2xpc3QgY29uZmlndXJhdGlvbi4gJyArXG4gICAgICAgICAgICAgICAgICAgICdGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIGh0dHBzOi8vYW5ndWxhci5pby9ndWlkZS9idWlsZCNjb25maWd1cmluZy1icm93c2VyLWNvbXBhdGliaWxpdHknLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBFbmFibGUgaW5jcmVtZW50YWwgY29tcGlsYXRpb24gYnkgZGVmYXVsdCBpZiBjYWNoaW5nIGlzIGVuYWJsZWRcbiAgICAgICAgICBpZiAocGx1Z2luT3B0aW9ucy5zb3VyY2VGaWxlQ2FjaGU/LnBlcnNpc3RlbnRDYWNoZVBhdGgpIHtcbiAgICAgICAgICAgIGNvbXBpbGVyT3B0aW9ucy5pbmNyZW1lbnRhbCA/Pz0gdHJ1ZTtcbiAgICAgICAgICAgIC8vIFNldCB0aGUgYnVpbGQgaW5mbyBmaWxlIGxvY2F0aW9uIHRvIHRoZSBjb25maWd1cmVkIGNhY2hlIGRpcmVjdG9yeVxuICAgICAgICAgICAgY29tcGlsZXJPcHRpb25zLnRzQnVpbGRJbmZvRmlsZSA9IHBhdGguam9pbihcbiAgICAgICAgICAgICAgcGx1Z2luT3B0aW9ucy5zb3VyY2VGaWxlQ2FjaGU/LnBlcnNpc3RlbnRDYWNoZVBhdGgsXG4gICAgICAgICAgICAgICcudHNidWlsZGluZm8nLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29tcGlsZXJPcHRpb25zLmluY3JlbWVudGFsID0gZmFsc2U7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIC4uLmNvbXBpbGVyT3B0aW9ucyxcbiAgICAgICAgICAgIG5vRW1pdE9uRXJyb3I6IGZhbHNlLFxuICAgICAgICAgICAgaW5saW5lU291cmNlczogcGx1Z2luT3B0aW9ucy5zb3VyY2VtYXAsXG4gICAgICAgICAgICBpbmxpbmVTb3VyY2VNYXA6IHBsdWdpbk9wdGlvbnMuc291cmNlbWFwLFxuICAgICAgICAgICAgbWFwUm9vdDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgc291cmNlUm9vdDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgcHJlc2VydmVTeW1saW5rcyxcbiAgICAgICAgICB9O1xuICAgICAgICB9KTtcbiAgICAgICAgc2hvdWxkVHNJZ25vcmVKcyA9ICFhbGxvd0pzO1xuXG4gICAgICAgIHByb2ZpbGVTeW5jKCdOR19ESUFHTk9TVElDU19UT1RBTCcsICgpID0+IHtcbiAgICAgICAgICBmb3IgKGNvbnN0IGRpYWdub3N0aWMgb2YgY29tcGlsYXRpb24uY29sbGVjdERpYWdub3N0aWNzKCkpIHtcbiAgICAgICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBjb252ZXJ0VHlwZVNjcmlwdERpYWdub3N0aWMoZGlhZ25vc3RpYyk7XG4gICAgICAgICAgICBpZiAoZGlhZ25vc3RpYy5jYXRlZ29yeSA9PT0gdHMuRGlhZ25vc3RpY0NhdGVnb3J5LkVycm9yKSB7XG4gICAgICAgICAgICAgIChyZXN1bHQuZXJyb3JzID8/PSBbXSkucHVzaChtZXNzYWdlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIChyZXN1bHQud2FybmluZ3MgPz89IFtdKS5wdXNoKG1lc3NhZ2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gVXBkYXRlIFR5cGVTY3JpcHQgZmlsZSBvdXRwdXQgY2FjaGUgZm9yIGFsbCBhZmZlY3RlZCBmaWxlc1xuICAgICAgICBwcm9maWxlU3luYygnTkdfRU1JVF9UUycsICgpID0+IHtcbiAgICAgICAgICBmb3IgKGNvbnN0IHsgZmlsZW5hbWUsIGNvbnRlbnRzIH0gb2YgY29tcGlsYXRpb24uZW1pdEFmZmVjdGVkRmlsZXMoKSkge1xuICAgICAgICAgICAgdHlwZVNjcmlwdEZpbGVDYWNoZS5zZXQocGF0aFRvRmlsZVVSTChmaWxlbmFtZSkuaHJlZiwgY29udGVudHMpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gU3RvcmUgcmVmZXJlbmNlZCBmaWxlcyBmb3IgdXBkYXRlZCBmaWxlIHdhdGNoaW5nIGlmIGVuYWJsZWRcbiAgICAgICAgaWYgKHBsdWdpbk9wdGlvbnMuc291cmNlRmlsZUNhY2hlKSB7XG4gICAgICAgICAgcGx1Z2luT3B0aW9ucy5zb3VyY2VGaWxlQ2FjaGUucmVmZXJlbmNlZEZpbGVzID0gcmVmZXJlbmNlZEZpbGVzO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gUmVzZXQgdGhlIHNldHVwIHdhcm5pbmdzIHNvIHRoYXQgdGhleSBhcmUgb25seSBzaG93biBkdXJpbmcgdGhlIGZpcnN0IGJ1aWxkLlxuICAgICAgICBzZXR1cFdhcm5pbmdzID0gdW5kZWZpbmVkO1xuXG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9KTtcblxuICAgICAgYnVpbGQub25Mb2FkKHsgZmlsdGVyOiAvXFwuW2NtXT9banRdc3g/JC8gfSwgYXN5bmMgKGFyZ3MpID0+IHtcbiAgICAgICAgY29uc3QgcmVxdWVzdCA9IHBsdWdpbk9wdGlvbnMuZmlsZVJlcGxhY2VtZW50cz8uW2FyZ3MucGF0aF0gPz8gYXJncy5wYXRoO1xuXG4gICAgICAgIC8vIFNraXAgVFMgbG9hZCBhdHRlbXB0IGlmIEpTIFR5cGVTY3JpcHQgY29tcGlsYXRpb24gbm90IGVuYWJsZWQgYW5kIGZpbGUgaXMgSlNcbiAgICAgICAgaWYgKHNob3VsZFRzSWdub3JlSnMgJiYgL1xcLltjbV0/anMkLy50ZXN0KHJlcXVlc3QpKSB7XG4gICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFRoZSBmaWxlbmFtZSBpcyBjdXJyZW50bHkgdXNlZCBhcyBhIGNhY2hlIGtleS4gU2luY2UgdGhlIGNhY2hlIGlzIG1lbW9yeSBvbmx5LFxuICAgICAgICAvLyB0aGUgb3B0aW9ucyBjYW5ub3QgY2hhbmdlIGFuZCBkbyBub3QgbmVlZCB0byBiZSByZXByZXNlbnRlZCBpbiB0aGUga2V5LiBJZiB0aGVcbiAgICAgICAgLy8gY2FjaGUgaXMgbGF0ZXIgc3RvcmVkIHRvIGRpc2ssIHRoZW4gdGhlIG9wdGlvbnMgdGhhdCBhZmZlY3QgdHJhbnNmb3JtIG91dHB1dFxuICAgICAgICAvLyB3b3VsZCBuZWVkIHRvIGJlIGFkZGVkIHRvIHRoZSBrZXkgYXMgd2VsbCBhcyBhIGNoZWNrIGZvciBhbnkgY2hhbmdlIG9mIGNvbnRlbnQuXG4gICAgICAgIGxldCBjb250ZW50cyA9IHR5cGVTY3JpcHRGaWxlQ2FjaGUuZ2V0KHBhdGhUb0ZpbGVVUkwocmVxdWVzdCkuaHJlZik7XG5cbiAgICAgICAgaWYgKGNvbnRlbnRzID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAvLyBObyBUUyByZXN1bHQgaW5kaWNhdGVzIHRoZSBmaWxlIGlzIG5vdCBwYXJ0IG9mIHRoZSBUeXBlU2NyaXB0IHByb2dyYW0uXG4gICAgICAgICAgLy8gSWYgYWxsb3dKcyBpcyBlbmFibGVkIGFuZCB0aGUgZmlsZSBpcyBKUyB0aGVuIGRlZmVyIHRvIHRoZSBuZXh0IGxvYWQgaG9vay5cbiAgICAgICAgICBpZiAoIXNob3VsZFRzSWdub3JlSnMgJiYgL1xcLltjbV0/anMkLy50ZXN0KHJlcXVlc3QpKSB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIE90aGVyd2lzZSByZXR1cm4gYW4gZXJyb3JcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZXJyb3JzOiBbXG4gICAgICAgICAgICAgIGNyZWF0ZU1pc3NpbmdGaWxlRXJyb3IocmVxdWVzdCwgYXJncy5wYXRoLCBidWlsZC5pbml0aWFsT3B0aW9ucy5hYnNXb3JraW5nRGlyID8/ICcnKSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgY29udGVudHMgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgLy8gQSBzdHJpbmcgaW5kaWNhdGVzIHVudHJhbnNmb3JtZWQgb3V0cHV0IGZyb20gdGhlIFRTL05HIGNvbXBpbGVyXG4gICAgICAgICAgY29udGVudHMgPSBhd2FpdCBqYXZhc2NyaXB0VHJhbnNmb3JtZXIudHJhbnNmb3JtRGF0YShcbiAgICAgICAgICAgIHJlcXVlc3QsXG4gICAgICAgICAgICBjb250ZW50cyxcbiAgICAgICAgICAgIHRydWUgLyogc2tpcExpbmtlciAqLyxcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgLy8gU3RvcmUgYXMgdGhlIHJldHVybmVkIFVpbnQ4QXJyYXkgdG8gYWxsb3cgY2FjaGluZyB0aGUgZnVsbHkgdHJhbnNmb3JtZWQgY29kZVxuICAgICAgICAgIHR5cGVTY3JpcHRGaWxlQ2FjaGUuc2V0KHBhdGhUb0ZpbGVVUkwocmVxdWVzdCkuaHJlZiwgY29udGVudHMpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBjb250ZW50cyxcbiAgICAgICAgICBsb2FkZXI6ICdqcycsXG4gICAgICAgIH07XG4gICAgICB9KTtcblxuICAgICAgYnVpbGQub25Mb2FkKHsgZmlsdGVyOiAvXFwuW2NtXT9qcyQvIH0sIChhcmdzKSA9PlxuICAgICAgICBwcm9maWxlQXN5bmMoXG4gICAgICAgICAgJ05HX0VNSVRfSlMqJyxcbiAgICAgICAgICBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICAvLyBUaGUgZmlsZW5hbWUgaXMgY3VycmVudGx5IHVzZWQgYXMgYSBjYWNoZSBrZXkuIFNpbmNlIHRoZSBjYWNoZSBpcyBtZW1vcnkgb25seSxcbiAgICAgICAgICAgIC8vIHRoZSBvcHRpb25zIGNhbm5vdCBjaGFuZ2UgYW5kIGRvIG5vdCBuZWVkIHRvIGJlIHJlcHJlc2VudGVkIGluIHRoZSBrZXkuIElmIHRoZVxuICAgICAgICAgICAgLy8gY2FjaGUgaXMgbGF0ZXIgc3RvcmVkIHRvIGRpc2ssIHRoZW4gdGhlIG9wdGlvbnMgdGhhdCBhZmZlY3QgdHJhbnNmb3JtIG91dHB1dFxuICAgICAgICAgICAgLy8gd291bGQgbmVlZCB0byBiZSBhZGRlZCB0byB0aGUga2V5IGFzIHdlbGwgYXMgYSBjaGVjayBmb3IgYW55IGNoYW5nZSBvZiBjb250ZW50LlxuICAgICAgICAgICAgbGV0IGNvbnRlbnRzID0gcGx1Z2luT3B0aW9ucy5zb3VyY2VGaWxlQ2FjaGU/LmJhYmVsRmlsZUNhY2hlLmdldChhcmdzLnBhdGgpO1xuICAgICAgICAgICAgaWYgKGNvbnRlbnRzID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgY29udGVudHMgPSBhd2FpdCBqYXZhc2NyaXB0VHJhbnNmb3JtZXIudHJhbnNmb3JtRmlsZShhcmdzLnBhdGgsIHBsdWdpbk9wdGlvbnMuaml0KTtcbiAgICAgICAgICAgICAgcGx1Z2luT3B0aW9ucy5zb3VyY2VGaWxlQ2FjaGU/LmJhYmVsRmlsZUNhY2hlLnNldChhcmdzLnBhdGgsIGNvbnRlbnRzKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgY29udGVudHMsXG4gICAgICAgICAgICAgIGxvYWRlcjogJ2pzJyxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfSxcbiAgICAgICAgICB0cnVlLFxuICAgICAgICApLFxuICAgICAgKTtcblxuICAgICAgLy8gU2V0dXAgYnVuZGxpbmcgb2YgY29tcG9uZW50IHRlbXBsYXRlcyBhbmQgc3R5bGVzaGVldHMgd2hlbiBpbiBKSVQgbW9kZVxuICAgICAgaWYgKHBsdWdpbk9wdGlvbnMuaml0KSB7XG4gICAgICAgIHNldHVwSml0UGx1Z2luQ2FsbGJhY2tzKFxuICAgICAgICAgIGJ1aWxkLFxuICAgICAgICAgIHN0eWxlT3B0aW9ucyxcbiAgICAgICAgICBzdHlsZXNoZWV0UmVzb3VyY2VGaWxlcyxcbiAgICAgICAgICBwbHVnaW5PcHRpb25zLmxvYWRSZXN1bHRDYWNoZSxcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgYnVpbGQub25FbmQoKHJlc3VsdCkgPT4ge1xuICAgICAgICAvLyBBZGQgYW55IGNvbXBvbmVudCBzdHlsZXNoZWV0IHJlc291cmNlIGZpbGVzIHRvIHRoZSBvdXRwdXQgZmlsZXNcbiAgICAgICAgaWYgKHN0eWxlc2hlZXRSZXNvdXJjZUZpbGVzLmxlbmd0aCkge1xuICAgICAgICAgIHJlc3VsdC5vdXRwdXRGaWxlcz8ucHVzaCguLi5zdHlsZXNoZWV0UmVzb3VyY2VGaWxlcyk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBDb21iaW5lIGNvbXBvbmVudCBzdHlsZXNoZWV0IG1ldGFmaWxlcyB3aXRoIG1haW4gbWV0YWZpbGVcbiAgICAgICAgaWYgKHJlc3VsdC5tZXRhZmlsZSAmJiBzdHlsZXNoZWV0TWV0YWZpbGVzLmxlbmd0aCkge1xuICAgICAgICAgIGZvciAoY29uc3QgbWV0YWZpbGUgb2Ygc3R5bGVzaGVldE1ldGFmaWxlcykge1xuICAgICAgICAgICAgcmVzdWx0Lm1ldGFmaWxlLmlucHV0cyA9IHsgLi4ucmVzdWx0Lm1ldGFmaWxlLmlucHV0cywgLi4ubWV0YWZpbGUuaW5wdXRzIH07XG4gICAgICAgICAgICByZXN1bHQubWV0YWZpbGUub3V0cHV0cyA9IHsgLi4ucmVzdWx0Lm1ldGFmaWxlLm91dHB1dHMsIC4uLm1ldGFmaWxlLm91dHB1dHMgfTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBsb2dDdW11bGF0aXZlRHVyYXRpb25zKCk7XG4gICAgICB9KTtcbiAgICB9LFxuICB9O1xufVxuXG5mdW5jdGlvbiBjcmVhdGVNaXNzaW5nRmlsZUVycm9yKHJlcXVlc3Q6IHN0cmluZywgb3JpZ2luYWw6IHN0cmluZywgcm9vdDogc3RyaW5nKTogUGFydGlhbE1lc3NhZ2Uge1xuICBjb25zdCBlcnJvciA9IHtcbiAgICB0ZXh0OiBgRmlsZSAnJHtwYXRoLnJlbGF0aXZlKHJvb3QsIHJlcXVlc3QpfScgaXMgbWlzc2luZyBmcm9tIHRoZSBUeXBlU2NyaXB0IGNvbXBpbGF0aW9uLmAsXG4gICAgbm90ZXM6IFtcbiAgICAgIHtcbiAgICAgICAgdGV4dDogYEVuc3VyZSB0aGUgZmlsZSBpcyBwYXJ0IG9mIHRoZSBUeXBlU2NyaXB0IHByb2dyYW0gdmlhIHRoZSAnZmlsZXMnIG9yICdpbmNsdWRlJyBwcm9wZXJ0eS5gLFxuICAgICAgfSxcbiAgICBdLFxuICB9O1xuXG4gIGlmIChyZXF1ZXN0ICE9PSBvcmlnaW5hbCkge1xuICAgIGVycm9yLm5vdGVzLnB1c2goe1xuICAgICAgdGV4dDogYEZpbGUgaXMgcmVxdWVzdGVkIGZyb20gYSBmaWxlIHJlcGxhY2VtZW50IG9mICcke3BhdGgucmVsYXRpdmUocm9vdCwgb3JpZ2luYWwpfScuYCxcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBlcnJvcjtcbn1cbiJdfQ==
@@ -1,75 +0,0 @@
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.convertTypeScriptDiagnostic = void 0;
11
- const node_os_1 = require("node:os");
12
- const typescript_1 = require("typescript");
13
- /**
14
- * Converts TypeScript Diagnostic related information into an esbuild compatible note object.
15
- * Related information is a subset of a full TypeScript Diagnostic and also used for diagnostic
16
- * notes associated with the main Diagnostic.
17
- * @param info The TypeScript diagnostic relative information to convert.
18
- * @returns An esbuild diagnostic message as a PartialMessage object
19
- */
20
- function convertTypeScriptDiagnosticInfo(info, textPrefix) {
21
- const newLine = (0, node_os_1.platform)() === 'win32' ? '\r\n' : '\n';
22
- let text = (0, typescript_1.flattenDiagnosticMessageText)(info.messageText, newLine);
23
- if (textPrefix) {
24
- text = textPrefix + text;
25
- }
26
- const note = { text };
27
- if (info.file) {
28
- note.location = {
29
- file: info.file.fileName,
30
- length: info.length,
31
- };
32
- // Calculate the line/column location and extract the full line text that has the diagnostic
33
- if (info.start) {
34
- const { line, character } = (0, typescript_1.getLineAndCharacterOfPosition)(info.file, info.start);
35
- note.location.line = line + 1;
36
- note.location.column = character;
37
- // The start position for the slice is the first character of the error line
38
- const lineStartPosition = (0, typescript_1.getPositionOfLineAndCharacter)(info.file, line, 0);
39
- // The end position for the slice is the first character of the next line or the length of
40
- // the entire file if the line is the last line of the file (getPositionOfLineAndCharacter
41
- // will error if a nonexistent line is passed).
42
- const { line: lastLineOfFile } = (0, typescript_1.getLineAndCharacterOfPosition)(info.file, info.file.text.length - 1);
43
- const lineEndPosition = line < lastLineOfFile
44
- ? (0, typescript_1.getPositionOfLineAndCharacter)(info.file, line + 1, 0)
45
- : info.file.text.length;
46
- note.location.lineText = info.file.text.slice(lineStartPosition, lineEndPosition).trimEnd();
47
- }
48
- }
49
- return note;
50
- }
51
- /**
52
- * Converts a TypeScript Diagnostic message into an esbuild compatible message object.
53
- * @param diagnostic The TypeScript diagnostic to convert.
54
- * @returns An esbuild diagnostic message as a PartialMessage object
55
- */
56
- function convertTypeScriptDiagnostic(diagnostic) {
57
- let codePrefix = 'TS';
58
- let code = `${diagnostic.code}`;
59
- if (diagnostic.source === 'ngtsc') {
60
- codePrefix = 'NG';
61
- // Remove `-99` Angular prefix from diagnostic code
62
- code = code.slice(3);
63
- }
64
- const message = {
65
- ...convertTypeScriptDiagnosticInfo(diagnostic, `${codePrefix}${code}: `),
66
- // Store original diagnostic for reference if needed downstream
67
- detail: diagnostic,
68
- };
69
- if (diagnostic.relatedInformation?.length) {
70
- message.notes = diagnostic.relatedInformation.map((info) => convertTypeScriptDiagnosticInfo(info));
71
- }
72
- return message;
73
- }
74
- exports.convertTypeScriptDiagnostic = convertTypeScriptDiagnostic;
75
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlhZ25vc3RpY3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9hbmd1bGFyX2RldmtpdC9idWlsZF9hbmd1bGFyL3NyYy9idWlsZGVycy9icm93c2VyLWVzYnVpbGQvYW5ndWxhci9kaWFnbm9zdGljcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7OztHQU1HOzs7QUFHSCxxQ0FBbUM7QUFDbkMsMkNBTW9CO0FBRXBCOzs7Ozs7R0FNRztBQUNILFNBQVMsK0JBQStCLENBQ3RDLElBQWtDLEVBQ2xDLFVBQW1CO0lBRW5CLE1BQU0sT0FBTyxHQUFHLElBQUEsa0JBQVEsR0FBRSxLQUFLLE9BQU8sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDdkQsSUFBSSxJQUFJLEdBQUcsSUFBQSx5Q0FBNEIsRUFBQyxJQUFJLENBQUMsV0FBVyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ25FLElBQUksVUFBVSxFQUFFO1FBQ2QsSUFBSSxHQUFHLFVBQVUsR0FBRyxJQUFJLENBQUM7S0FDMUI7SUFFRCxNQUFNLElBQUksR0FBZ0IsRUFBRSxJQUFJLEVBQUUsQ0FBQztJQUVuQyxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUU7UUFDYixJQUFJLENBQUMsUUFBUSxHQUFHO1lBQ2QsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUTtZQUN4QixNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU07U0FDcEIsQ0FBQztRQUVGLDRGQUE0RjtRQUM1RixJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUU7WUFDZCxNQUFNLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxHQUFHLElBQUEsMENBQTZCLEVBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDakYsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQztZQUM5QixJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxTQUFTLENBQUM7WUFFakMsNEVBQTRFO1lBQzVFLE1BQU0saUJBQWlCLEdBQUcsSUFBQSwwQ0FBNkIsRUFBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztZQUU1RSwwRkFBMEY7WUFDMUYsMEZBQTBGO1lBQzFGLCtDQUErQztZQUMvQyxNQUFNLEVBQUUsSUFBSSxFQUFFLGNBQWMsRUFBRSxHQUFHLElBQUEsMENBQTZCLEVBQzVELElBQUksQ0FBQyxJQUFJLEVBQ1QsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FDMUIsQ0FBQztZQUNGLE1BQU0sZUFBZSxHQUNuQixJQUFJLEdBQUcsY0FBYztnQkFDbkIsQ0FBQyxDQUFDLElBQUEsMENBQTZCLEVBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDdkQsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQztZQUU1QixJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsaUJBQWlCLEVBQUUsZUFBZSxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUM7U0FDN0Y7S0FDRjtJQUVELE9BQU8sSUFBSSxDQUFDO0FBQ2QsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxTQUFnQiwyQkFBMkIsQ0FBQyxVQUFzQjtJQUNoRSxJQUFJLFVBQVUsR0FBRyxJQUFJLENBQUM7SUFDdEIsSUFBSSxJQUFJLEdBQUcsR0FBRyxVQUFVLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDaEMsSUFBSSxVQUFVLENBQUMsTUFBTSxLQUFLLE9BQU8sRUFBRTtRQUNqQyxVQUFVLEdBQUcsSUFBSSxDQUFDO1FBQ2xCLG1EQUFtRDtRQUNuRCxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUN0QjtJQUVELE1BQU0sT0FBTyxHQUFtQjtRQUM5QixHQUFHLCtCQUErQixDQUFDLFVBQVUsRUFBRSxHQUFHLFVBQVUsR0FBRyxJQUFJLElBQUksQ0FBQztRQUN4RSwrREFBK0Q7UUFDL0QsTUFBTSxFQUFFLFVBQVU7S0FDbkIsQ0FBQztJQUVGLElBQUksVUFBVSxDQUFDLGtCQUFrQixFQUFFLE1BQU0sRUFBRTtRQUN6QyxPQUFPLENBQUMsS0FBSyxHQUFHLFVBQVUsQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUN6RCwrQkFBK0IsQ0FBQyxJQUFJLENBQUMsQ0FDdEMsQ0FBQztLQUNIO0lBRUQsT0FBTyxPQUFPLENBQUM7QUFDakIsQ0FBQztBQXRCRCxrRUFzQkMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBQYXJ0aWFsTWVzc2FnZSwgUGFydGlhbE5vdGUgfSBmcm9tICdlc2J1aWxkJztcbmltcG9ydCB7IHBsYXRmb3JtIH0gZnJvbSAnbm9kZTpvcyc7XG5pbXBvcnQge1xuICBEaWFnbm9zdGljLFxuICBEaWFnbm9zdGljUmVsYXRlZEluZm9ybWF0aW9uLFxuICBmbGF0dGVuRGlhZ25vc3RpY01lc3NhZ2VUZXh0LFxuICBnZXRMaW5lQW5kQ2hhcmFjdGVyT2ZQb3NpdGlvbixcbiAgZ2V0UG9zaXRpb25PZkxpbmVBbmRDaGFyYWN0ZXIsXG59IGZyb20gJ3R5cGVzY3JpcHQnO1xuXG4vKipcbiAqIENvbnZlcnRzIFR5cGVTY3JpcHQgRGlhZ25vc3RpYyByZWxhdGVkIGluZm9ybWF0aW9uIGludG8gYW4gZXNidWlsZCBjb21wYXRpYmxlIG5vdGUgb2JqZWN0LlxuICogUmVsYXRlZCBpbmZvcm1hdGlvbiBpcyBhIHN1YnNldCBvZiBhIGZ1bGwgVHlwZVNjcmlwdCBEaWFnbm9zdGljIGFuZCBhbHNvIHVzZWQgZm9yIGRpYWdub3N0aWNcbiAqIG5vdGVzIGFzc29jaWF0ZWQgd2l0aCB0aGUgbWFpbiBEaWFnbm9zdGljLlxuICogQHBhcmFtIGluZm8gVGhlIFR5cGVTY3JpcHQgZGlhZ25vc3RpYyByZWxhdGl2ZSBpbmZvcm1hdGlvbiB0byBjb252ZXJ0LlxuICogQHJldHVybnMgQW4gZXNidWlsZCBkaWFnbm9zdGljIG1lc3NhZ2UgYXMgYSBQYXJ0aWFsTWVzc2FnZSBvYmplY3RcbiAqL1xuZnVuY3Rpb24gY29udmVydFR5cGVTY3JpcHREaWFnbm9zdGljSW5mbyhcbiAgaW5mbzogRGlhZ25vc3RpY1JlbGF0ZWRJbmZvcm1hdGlvbixcbiAgdGV4dFByZWZpeD86IHN0cmluZyxcbik6IFBhcnRpYWxOb3RlIHtcbiAgY29uc3QgbmV3TGluZSA9IHBsYXRmb3JtKCkgPT09ICd3aW4zMicgPyAnXFxyXFxuJyA6ICdcXG4nO1xuICBsZXQgdGV4dCA9IGZsYXR0ZW5EaWFnbm9zdGljTWVzc2FnZVRleHQoaW5mby5tZXNzYWdlVGV4dCwgbmV3TGluZSk7XG4gIGlmICh0ZXh0UHJlZml4KSB7XG4gICAgdGV4dCA9IHRleHRQcmVmaXggKyB0ZXh0O1xuICB9XG5cbiAgY29uc3Qgbm90ZTogUGFydGlhbE5vdGUgPSB7IHRleHQgfTtcblxuICBpZiAoaW5mby5maWxlKSB7XG4gICAgbm90ZS5sb2NhdGlvbiA9IHtcbiAgICAgIGZpbGU6IGluZm8uZmlsZS5maWxlTmFtZSxcbiAgICAgIGxlbmd0aDogaW5mby5sZW5ndGgsXG4gICAgfTtcblxuICAgIC8vIENhbGN1bGF0ZSB0aGUgbGluZS9jb2x1bW4gbG9jYXRpb24gYW5kIGV4dHJhY3QgdGhlIGZ1bGwgbGluZSB0ZXh0IHRoYXQgaGFzIHRoZSBkaWFnbm9zdGljXG4gICAgaWYgKGluZm8uc3RhcnQpIHtcbiAgICAgIGNvbnN0IHsgbGluZSwgY2hhcmFjdGVyIH0gPSBnZXRMaW5lQW5kQ2hhcmFjdGVyT2ZQb3NpdGlvbihpbmZvLmZpbGUsIGluZm8uc3RhcnQpO1xuICAgICAgbm90ZS5sb2NhdGlvbi5saW5lID0gbGluZSArIDE7XG4gICAgICBub3RlLmxvY2F0aW9uLmNvbHVtbiA9IGNoYXJhY3RlcjtcblxuICAgICAgLy8gVGhlIHN0YXJ0IHBvc2l0aW9uIGZvciB0aGUgc2xpY2UgaXMgdGhlIGZpcnN0IGNoYXJhY3RlciBvZiB0aGUgZXJyb3IgbGluZVxuICAgICAgY29uc3QgbGluZVN0YXJ0UG9zaXRpb24gPSBnZXRQb3NpdGlvbk9mTGluZUFuZENoYXJhY3RlcihpbmZvLmZpbGUsIGxpbmUsIDApO1xuXG4gICAgICAvLyBUaGUgZW5kIHBvc2l0aW9uIGZvciB0aGUgc2xpY2UgaXMgdGhlIGZpcnN0IGNoYXJhY3RlciBvZiB0aGUgbmV4dCBsaW5lIG9yIHRoZSBsZW5ndGggb2ZcbiAgICAgIC8vIHRoZSBlbnRpcmUgZmlsZSBpZiB0aGUgbGluZSBpcyB0aGUgbGFzdCBsaW5lIG9mIHRoZSBmaWxlIChnZXRQb3NpdGlvbk9mTGluZUFuZENoYXJhY3RlclxuICAgICAgLy8gd2lsbCBlcnJvciBpZiBhIG5vbmV4aXN0ZW50IGxpbmUgaXMgcGFzc2VkKS5cbiAgICAgIGNvbnN0IHsgbGluZTogbGFzdExpbmVPZkZpbGUgfSA9IGdldExpbmVBbmRDaGFyYWN0ZXJPZlBvc2l0aW9uKFxuICAgICAgICBpbmZvLmZpbGUsXG4gICAgICAgIGluZm8uZmlsZS50ZXh0Lmxlbmd0aCAtIDEsXG4gICAgICApO1xuICAgICAgY29uc3QgbGluZUVuZFBvc2l0aW9uID1cbiAgICAgICAgbGluZSA8IGxhc3RMaW5lT2ZGaWxlXG4gICAgICAgICAgPyBnZXRQb3NpdGlvbk9mTGluZUFuZENoYXJhY3RlcihpbmZvLmZpbGUsIGxpbmUgKyAxLCAwKVxuICAgICAgICAgIDogaW5mby5maWxlLnRleHQubGVuZ3RoO1xuXG4gICAgICBub3RlLmxvY2F0aW9uLmxpbmVUZXh0ID0gaW5mby5maWxlLnRleHQuc2xpY2UobGluZVN0YXJ0UG9zaXRpb24sIGxpbmVFbmRQb3NpdGlvbikudHJpbUVuZCgpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBub3RlO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGEgVHlwZVNjcmlwdCBEaWFnbm9zdGljIG1lc3NhZ2UgaW50byBhbiBlc2J1aWxkIGNvbXBhdGlibGUgbWVzc2FnZSBvYmplY3QuXG4gKiBAcGFyYW0gZGlhZ25vc3RpYyBUaGUgVHlwZVNjcmlwdCBkaWFnbm9zdGljIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyBBbiBlc2J1aWxkIGRpYWdub3N0aWMgbWVzc2FnZSBhcyBhIFBhcnRpYWxNZXNzYWdlIG9iamVjdFxuICovXG5leHBvcnQgZnVuY3Rpb24gY29udmVydFR5cGVTY3JpcHREaWFnbm9zdGljKGRpYWdub3N0aWM6IERpYWdub3N0aWMpOiBQYXJ0aWFsTWVzc2FnZSB7XG4gIGxldCBjb2RlUHJlZml4ID0gJ1RTJztcbiAgbGV0IGNvZGUgPSBgJHtkaWFnbm9zdGljLmNvZGV9YDtcbiAgaWYgKGRpYWdub3N0aWMuc291cmNlID09PSAnbmd0c2MnKSB7XG4gICAgY29kZVByZWZpeCA9ICdORyc7XG4gICAgLy8gUmVtb3ZlIGAtOTlgIEFuZ3VsYXIgcHJlZml4IGZyb20gZGlhZ25vc3RpYyBjb2RlXG4gICAgY29kZSA9IGNvZGUuc2xpY2UoMyk7XG4gIH1cblxuICBjb25zdCBtZXNzYWdlOiBQYXJ0aWFsTWVzc2FnZSA9IHtcbiAgICAuLi5jb252ZXJ0VHlwZVNjcmlwdERpYWdub3N0aWNJbmZvKGRpYWdub3N0aWMsIGAke2NvZGVQcmVmaXh9JHtjb2RlfTogYCksXG4gICAgLy8gU3RvcmUgb3JpZ2luYWwgZGlhZ25vc3RpYyBmb3IgcmVmZXJlbmNlIGlmIG5lZWRlZCBkb3duc3RyZWFtXG4gICAgZGV0YWlsOiBkaWFnbm9zdGljLFxuICB9O1xuXG4gIGlmIChkaWFnbm9zdGljLnJlbGF0ZWRJbmZvcm1hdGlvbj8ubGVuZ3RoKSB7XG4gICAgbWVzc2FnZS5ub3RlcyA9IGRpYWdub3N0aWMucmVsYXRlZEluZm9ybWF0aW9uLm1hcCgoaW5mbykgPT5cbiAgICAgIGNvbnZlcnRUeXBlU2NyaXB0RGlhZ25vc3RpY0luZm8oaW5mbyksXG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiBtZXNzYWdlO1xufVxuIl19
@@ -1,106 +0,0 @@
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 __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
15
- if (kind === "m") throw new TypeError("Private method is not writable");
16
- if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
17
- if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
18
- return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
19
- };
20
- var __importDefault = (this && this.__importDefault) || function (mod) {
21
- return (mod && mod.__esModule) ? mod : { "default": mod };
22
- };
23
- var _JitCompilation_state;
24
- Object.defineProperty(exports, "__esModule", { value: true });
25
- exports.JitCompilation = void 0;
26
- const node_assert_1 = __importDefault(require("node:assert"));
27
- const typescript_1 = __importDefault(require("typescript"));
28
- const profiling_1 = require("../profiling");
29
- const angular_compilation_1 = require("./angular-compilation");
30
- const angular_host_1 = require("./angular-host");
31
- const jit_resource_transformer_1 = require("./jit-resource-transformer");
32
- class JitCompilationState {
33
- constructor(compilerHost, typeScriptProgram, constructorParametersDownlevelTransform, replaceResourcesTransform) {
34
- this.compilerHost = compilerHost;
35
- this.typeScriptProgram = typeScriptProgram;
36
- this.constructorParametersDownlevelTransform = constructorParametersDownlevelTransform;
37
- this.replaceResourcesTransform = replaceResourcesTransform;
38
- }
39
- }
40
- class JitCompilation extends angular_compilation_1.AngularCompilation {
41
- constructor() {
42
- super(...arguments);
43
- _JitCompilation_state.set(this, void 0);
44
- }
45
- async initialize(tsconfig, hostOptions, compilerOptionsTransformer) {
46
- // Dynamically load the Angular compiler CLI package
47
- const { constructorParametersDownlevelTransform } = await angular_compilation_1.AngularCompilation.loadCompilerCli();
48
- // Load the compiler configuration and transform as needed
49
- const { options: originalCompilerOptions, rootNames, errors: configurationDiagnostics, } = await this.loadConfiguration(tsconfig);
50
- const compilerOptions = compilerOptionsTransformer?.(originalCompilerOptions) ?? originalCompilerOptions;
51
- // Create Angular compiler host
52
- const host = (0, angular_host_1.createAngularCompilerHost)(compilerOptions, hostOptions);
53
- // Create the TypeScript Program
54
- const typeScriptProgram = (0, profiling_1.profileSync)('TS_CREATE_PROGRAM', () => typescript_1.default.createEmitAndSemanticDiagnosticsBuilderProgram(rootNames, compilerOptions, host, __classPrivateFieldGet(this, _JitCompilation_state, "f")?.typeScriptProgram ?? typescript_1.default.readBuilderProgram(compilerOptions, host), configurationDiagnostics));
55
- const affectedFiles = (0, profiling_1.profileSync)('TS_FIND_AFFECTED', () => findAffectedFiles(typeScriptProgram));
56
- __classPrivateFieldSet(this, _JitCompilation_state, new JitCompilationState(host, typeScriptProgram, constructorParametersDownlevelTransform(typeScriptProgram.getProgram()), (0, jit_resource_transformer_1.createJitResourceTransformer)(() => typeScriptProgram.getProgram().getTypeChecker())), "f");
57
- const referencedFiles = typeScriptProgram
58
- .getSourceFiles()
59
- .map((sourceFile) => sourceFile.fileName);
60
- return { affectedFiles, compilerOptions, referencedFiles };
61
- }
62
- *collectDiagnostics() {
63
- (0, node_assert_1.default)(__classPrivateFieldGet(this, _JitCompilation_state, "f"), 'Compilation must be initialized prior to collecting diagnostics.');
64
- const { typeScriptProgram } = __classPrivateFieldGet(this, _JitCompilation_state, "f");
65
- // Collect program level diagnostics
66
- yield* typeScriptProgram.getConfigFileParsingDiagnostics();
67
- yield* typeScriptProgram.getOptionsDiagnostics();
68
- yield* typeScriptProgram.getGlobalDiagnostics();
69
- yield* (0, profiling_1.profileSync)('NG_DIAGNOSTICS_SYNTACTIC', () => typeScriptProgram.getSyntacticDiagnostics());
70
- yield* (0, profiling_1.profileSync)('NG_DIAGNOSTICS_SEMANTIC', () => typeScriptProgram.getSemanticDiagnostics());
71
- }
72
- emitAffectedFiles() {
73
- (0, node_assert_1.default)(__classPrivateFieldGet(this, _JitCompilation_state, "f"), 'Compilation must be initialized prior to emitting files.');
74
- const { compilerHost, typeScriptProgram, constructorParametersDownlevelTransform, replaceResourcesTransform, } = __classPrivateFieldGet(this, _JitCompilation_state, "f");
75
- const buildInfoFilename = typeScriptProgram.getCompilerOptions().tsBuildInfoFile ?? '.tsbuildinfo';
76
- const emittedFiles = [];
77
- const writeFileCallback = (filename, contents, _a, _b, sourceFiles) => {
78
- if (!sourceFiles?.length && filename.endsWith(buildInfoFilename)) {
79
- // Save builder info contents to specified location
80
- compilerHost.writeFile(filename, contents, false);
81
- return;
82
- }
83
- (0, node_assert_1.default)(sourceFiles?.length === 1, 'Invalid TypeScript program emit for ' + filename);
84
- emittedFiles.push({ filename: sourceFiles[0].fileName, contents });
85
- };
86
- const transformers = {
87
- before: [replaceResourcesTransform, constructorParametersDownlevelTransform],
88
- };
89
- // TypeScript will loop until there are no more affected files in the program
90
- while (typeScriptProgram.emitNextAffectedFile(writeFileCallback, undefined, undefined, transformers)) {
91
- /* empty */
92
- }
93
- return emittedFiles;
94
- }
95
- }
96
- exports.JitCompilation = JitCompilation;
97
- _JitCompilation_state = new WeakMap();
98
- function findAffectedFiles(builder) {
99
- const affectedFiles = new Set();
100
- let result;
101
- while ((result = builder.getSemanticDiagnosticsOfNextAffectedFile())) {
102
- affectedFiles.add(result.affected);
103
- }
104
- return affectedFiles;
105
- }
106
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaml0LWNvbXBpbGF0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvYW5ndWxhcl9kZXZraXQvYnVpbGRfYW5ndWxhci9zcmMvYnVpbGRlcnMvYnJvd3Nlci1lc2J1aWxkL2FuZ3VsYXIvaml0LWNvbXBpbGF0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7O0dBTUc7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUdILDhEQUFpQztBQUNqQyw0REFBNEI7QUFDNUIsNENBQTJDO0FBQzNDLCtEQUEyRTtBQUMzRSxpREFBK0U7QUFDL0UseUVBQTBFO0FBRTFFLE1BQU0sbUJBQW1CO0lBQ3ZCLFlBQ2tCLFlBQTZCLEVBQzdCLGlCQUE4RCxFQUM5RCx1Q0FBNkUsRUFDN0UseUJBQStEO1FBSC9ELGlCQUFZLEdBQVosWUFBWSxDQUFpQjtRQUM3QixzQkFBaUIsR0FBakIsaUJBQWlCLENBQTZDO1FBQzlELDRDQUF1QyxHQUF2Qyx1Q0FBdUMsQ0FBc0M7UUFDN0UsOEJBQXlCLEdBQXpCLHlCQUF5QixDQUFzQztJQUM5RSxDQUFDO0NBQ0w7QUFFRCxNQUFhLGNBQWUsU0FBUSx3Q0FBa0I7SUFBdEQ7O1FBQ0Usd0NBQTZCO0lBMEcvQixDQUFDO0lBeEdDLEtBQUssQ0FBQyxVQUFVLENBQ2QsUUFBZ0IsRUFDaEIsV0FBK0IsRUFDL0IsMEJBQXdGO1FBTXhGLG9EQUFvRDtRQUNwRCxNQUFNLEVBQUUsdUNBQXVDLEVBQUUsR0FBRyxNQUFNLHdDQUFrQixDQUFDLGVBQWUsRUFBRSxDQUFDO1FBRS9GLDBEQUEwRDtRQUMxRCxNQUFNLEVBQ0osT0FBTyxFQUFFLHVCQUF1QixFQUNoQyxTQUFTLEVBQ1QsTUFBTSxFQUFFLHdCQUF3QixHQUNqQyxHQUFHLE1BQU0sSUFBSSxDQUFDLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzNDLE1BQU0sZUFBZSxHQUNuQiwwQkFBMEIsRUFB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LFFBQVEsRUFBRSxLQUFLLENBQUMsQ0FBQztnQkFFbEQsT0FBTzthQUNSO1lBRUQsSUFBQSxxQkFBTSxFQUFDLFdBQVcsRUFBRSxNQUFNLEtBQUssQ0FBQyxFQUFFLHNDQUFzQyxHQUFHLFFBQVEsQ0FBQyxDQUFDO1lBRXJGLFlBQVksQ0FBQyxJQUFJLENBQUMsRUFBRSxRQUFRLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDO1FBQ3JFLENBQUMsQ0FBQztRQUNGLE1BQU0sWUFBWSxHQUFHO1lBQ25CLE1BQU0sRUFBRSxDQUFDLHlCQUF5QixFQUFFLHVDQUF1QyxDQUFDO1NBQzdFLENBQUM7UUFFRiw2RUFBNkU7UUFDN0UsT0FDRSxpQkFBaUIsQ0FBQyxvQkFBb0IsQ0FBQyxpQkFBaUIsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFlBQVksQ0FBQyxFQUM3RjtZQUNBLFdBQVc7U0FDWjtRQUVELE9BQU8sWUFBWSxDQUFDO0lBQ3RCLENBQUM7Q0FDRjtBQTNHRCx3Q0EyR0M7O0FBRUQsU0FBUyxpQkFBaUIsQ0FDeEIsT0FBb0Q7SUFFcEQsTUFBTSxhQUFhLEdBQUcsSUFBSSxHQUFHLEVBQWlCLENBQUM7SUFFL0MsSUFBSSxNQUFNLENBQUM7SUFDWCxPQUFPLENBQUMsTUFBTSxHQUFHLE9BQU8sQ0FBQyx3Q0FBd0MsRUFBRSxDQUFDLEVBQUU7UUFDcEUsYUFBYSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsUUFBeUIsQ0FBQyxDQUFDO0tBQ3JEO0lBRUQsT0FBTyxhQUFhLENBQUM7QUFDdkIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG5pbXBvcnQgdHlwZSBuZyBmcm9tICdAYW5ndWxhci9jb21waWxlci1jbGknO1xuaW1wb3J0IGFzc2VydCBmcm9tICdub2RlOmFzc2VydCc7XG5pbXBvcnQgdHMgZnJvbSAndHlwZXNjcmlwdCc7XG5pbXBvcnQgeyBwcm9maWxlU3luYyB9IGZyb20gJy4uL3Byb2ZpbGluZyc7XG5pbXBvcnQgeyBBbmd1bGFyQ29tcGlsYXRpb24sIEVtaXRGaWxlUmVzdWx0IH0gZnJvbSAnLi9hbmd1bGFyLWNvbXBpbGF0aW9uJztcbmltcG9ydCB7IEFuZ3VsYXJIb3N0T3B0aW9ucywgY3JlYXRlQW5ndWxhckNvbXBpbGVySG9zdCB9IGZyb20gJy4vYW5ndWxhci1ob3N0JztcbmltcG9ydCB7IGNyZWF0ZUppdFJlc291cmNlVHJhbnNmb3JtZXIgfSBmcm9tICcuL2ppdC1yZXNvdXJjZS10cmFuc2Zvcm1lcic7XG5cbmNsYXNzIEppdENvbXBpbGF0aW9uU3RhdGUge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgcmVhZG9ubHkgY29tcGlsZXJIb3N0OiBuZy5Db21waWxlckhvc3QsXG4gICAgcHVibGljIHJlYWRvbmx5IHR5cGVTY3JpcHRQcm9ncmFtOiB0cy5FbWl0QW5kU2VtYW50aWNEaWFnbm9zdGljc0J1aWxkZXJQcm9ncmFtLFxuICAgIHB1YmxpYyByZWFkb25seSBjb25zdHJ1Y3RvclBhcmFtZXRlcnNEb3dubGV2ZWxUcmFuc2Zvcm06IHRzLlRyYW5zZm9ybWVyRmFjdG9yeTx0cy5Tb3VyY2VGaWxlPixcbiAgICBwdWJsaWMgcmVhZG9ubHkgcmVwbGFjZVJlc291cmNlc1RyYW5zZm9ybTogdHMuVHJhbnNmb3JtZXJGYWN0b3J5PHRzLlNvdXJjZUZpbGU+LFxuICApIHt9XG59XG5cbmV4cG9ydCBjbGFzcyBKaXRDb21waWxhdGlvbiBleHRlbmRzIEFuZ3VsYXJDb21waWxhdGlvbiB7XG4gICNzdGF0ZT86IEppdENvbXBpbGF0aW9uU3RhdGU7XG5cbiAgYXN5bmMgaW5pdGlhbGl6ZShcbiAgICB0c2NvbmZpZzogc3RyaW5nLFxuICAgIGhvc3RPcHRpb25zOiBBbmd1bGFySG9zdE9wdGlvbnMsXG4gICAgY29tcGlsZXJPcHRpb25zVHJhbnNmb3JtZXI/OiAoY29tcGlsZXJPcHRpb25zOiBuZy5Db21waWxlck9wdGlvbnMpID0+IG5nLkNvbXBpbGVyT3B0aW9ucyxcbiAgKTogUHJvbWlzZTx7XG4gICAgYWZmZWN0ZWRGaWxlczogUmVhZG9ubHlTZXQ8dHMuU291cmNlRmlsZT47XG4gICAgY29tcGlsZXJPcHRpb25zOiBuZy5Db21waWxlck9wdGlvbnM7XG4gICAgcmVmZXJlbmNlZEZpbGVzOiByZWFkb25seSBzdHJpbmdbXTtcbiAgfT4ge1xuICAgIC8vIER5bmFtaWNhbGx5IGxvYWQgdGhlIEFuZ3VsYXIgY29tcGlsZXIgQ0xJIHBhY2thZ2VcbiAgICBjb25zdCB7IGNvbnN0cnVjdG9yUGFyYW1ldGVyc0Rvd25sZXZlbFRyYW5zZm9ybSB9ID0gYXdhaXQgQW5ndWxhckNvbXBpbGF0aW9uLmxvYWRDb21waWxlckNsaSgpO1xuXG4gICAgLy8gTG9hZCB0aGUgY29tcGlsZXIgY29uZmlndXJhdGlvbiBhbmQgdHJhbnNmb3JtIGFzIG5lZWRlZFxuICAgIGNvbnN0IHtcbiAgICAgIG9wdGlvbnM6IG9yaWdpbmFsQ29tcGlsZXJPcHRpb25zLFxuICAgICAgcm9vdE5hbWVzLFxuICAgICAgZXJyb3JzOiBjb25maWd1cmF0aW9uRGlhZ25vc3RpY3MsXG4gICAgfSA9IGF3YWl0IHRoaXMubG9hZENvbmZpZ3VyYXRpb24odHNjb25maWcpO1xuICAgIGNvbnN0IGNvbXBpbGVyT3B0aW9ucyA9XG4gICAgICBjb21waWxlck9wdGlvbnNUcmFuc2Zvcm1lcj8uKG9yaWdpbmFsQ29tcGlsZXJPcHRpb25zKSA/PyBvcmlnaW5hbENvbXBpbGVyT3B0aW9ucztcblxuICAgIC8vIENyZWF0ZSBBbmd1bGFyIGNvbXBpbGVyIGhvc3RcbiAgICBjb25zdCBob3N0ID0gY3JlYXRlQW5ndWxhckNvbXBpbGVySG9zdChjb21waWxlck9wdGlvbnMsIGhvc3RPcHRpb25zKTtcblxuICAgIC8vIENyZWF0ZSB0aGUgVHlwZVNjcmlwdCBQcm9ncmFtXG4gICAgY29uc3QgdHlwZVNjcmlwdFByb2dyYW0gPSBwcm9maWxlU3luYygnVFNfQ1JFQVRFX1BST0dSQU0nLCAoKSA9PlxuICAgICAgdHMuY3JlYXRlRW1pdEFuZFNlbWFudGljRGlhZ25vc3RpY3NCdWlsZGVyUHJvZ3JhbShcbiAgICAgICAgcm9vdE5hbWVzLFxuICAgICAgICBjb21waWxlck9wdGlvbnMsXG4gICAgICAgIGhvc3QsXG4gICAgICAgIHRoaXMuI3N0YXRlPy50eXBlU2NyaXB0UHJvZ3JhbSA/PyB0cy5yZWFkQnVpbGRlclByb2dyYW0oY29tcGlsZXJPcHRpb25zLCBob3N0KSxcbiAgICAgICAgY29uZmlndXJhdGlvbkRpYWdub3N0aWNzLFxuICAgICAgKSxcbiAgICApO1xuXG4gICAgY29uc3QgYWZmZWN0ZWRGaWxlcyA9IHByb2ZpbGVTeW5jKCdUU19GSU5EX0FGRkVDVEVEJywgKCkgPT5cbiAgICAgIGZpbmRBZmZlY3RlZEZpbGVzKHR5cGVTY3JpcHRQcm9ncmFtKSxcbiAgICApO1xuXG4gICAgdGhpcy4jc3RhdGUgPSBuZXcgSml0Q29tcGlsYXRpb25TdGF0ZShcbiAgICAgIGhvc3QsXG4gICAgICB0eXBlU2NyaXB0UHJvZ3JhbSxcbiAgICAgIGNvbnN0cnVjdG9yUGFyYW1ldGVyc0Rvd25sZXZlbFRyYW5zZm9ybSh0eXBlU2NyaXB0UHJvZ3JhbS5nZXRQcm9ncmFtKCkpLFxuICAgICAgY3JlYXRlSml0UmVzb3VyY2VUcmFuc2Zvcm1lcigoKSA9PiB0eXBlU2NyaXB0UHJvZ3JhbS5nZXRQcm9ncmFtKCkuZ2V0VHlwZUNoZWNrZXIoKSksXG4gICAgKTtcblxuICAgIGNvbnN0IHJlZmVyZW5jZWRGaWxlcyA9IHR5cGVTY3JpcHRQcm9ncmFtXG4gICAgICAuZ2V0U291cmNlRmlsZXMoKVxuICAgICAgLm1hcCgoc291cmNlRmlsZSkgPT4gc291cmNlRmlsZS5maWxlTmFtZSk7XG5cbiAgICByZXR1cm4geyBhZmZlY3RlZEZpbGVzLCBjb21waWxlck9wdGlvbnMsIHJlZmVyZW5jZWRGaWxlcyB9O1xuICB9XG5cbiAgKmNvbGxlY3REaWFnbm9zdGljcygpOiBJdGVyYWJsZTx0cy5EaWFnbm9zdGljPiB7XG4gICAgYXNzZXJ0KHRoaXMuI3N0YXRlLCAnQ29tcGlsYXRpb24gbXVzdCBiZSBpbml0aWFsaXplZCBwcmlvciB0byBjb2xsZWN0aW5nIGRpYWdub3N0aWNzLicpO1xuICAgIGNvbnN0IHsgdHlwZVNjcmlwdFByb2dyYW0gfSA9IHRoaXMuI3N0YXRlO1xuXG4gICAgLy8gQ29sbGVjdCBwcm9ncmFtIGxldmVsIGRpYWdub3N0aWNzXG4gICAgeWllbGQqIHR5cGVTY3JpcHRQcm9ncmFtLmdldENvbmZpZ0ZpbGVQYXJzaW5nRGlhZ25vc3RpY3MoKTtcbiAgICB5aWVsZCogdHlwZVNjcmlwdFByb2dyYW0uZ2V0T3B0aW9uc0RpYWdub3N0aWNzKCk7XG4gICAgeWllbGQqIHR5cGVTY3JpcHRQcm9ncmFtLmdldEdsb2JhbERpYWdub3N0aWNzKCk7XG4gICAgeWllbGQqIHByb2ZpbGVTeW5jKCdOR19ESUFHTk9TVElDU19TWU5UQUNUSUMnLCAoKSA9PlxuICAgICAgdHlwZVNjcmlwdFByb2dyYW0uZ2V0U3ludGFjdGljRGlhZ25vc3RpY3MoKSxcbiAgICApO1xuICAgIHlpZWxkKiBwcm9maWxlU3luYygnTkdfRElBR05PU1RJQ1NfU0VNQU5USUMnLCAoKSA9PiB0eXBlU2NyaXB0UHJvZ3JhbS5nZXRTZW1hbnRpY0RpYWdub3N0aWNzKCkpO1xuICB9XG5cbiAgZW1pdEFmZmVjdGVkRmlsZXMoKTogSXRlcmFibGU8RW1pdEZpbGVSZXN1bHQ+IHtcbiAgICBhc3NlcnQodGhpcy4jc3RhdGUsICdDb21waWxhdGlvbiBtdXN0IGJlIGluaXRpYWxpemVkIHByaW9yIHRvIGVtaXR0aW5nIGZpbGVzLicpO1xuICAgIGNvbnN0IHtcbiAgICAgIGNvbXBpbGVySG9zdCxcbiAgICAgIHR5cGVTY3JpcHRQcm9ncmFtLFxuICAgICAgY29uc3RydWN0b3JQYXJhbWV0ZXJzRG93bmxldmVsVHJhbnNmb3JtLFxuICAgICAgcmVwbGFjZVJlc291cmNlc1RyYW5zZm9ybSxcbiAgICB9ID0gdGhpcy4jc3RhdGU7XG4gICAgY29uc3QgYnVpbGRJbmZvRmlsZW5hbWUgPVxuICAgICAgdHlwZVNjcmlwdFByb2dyYW0uZ2V0Q29tcGlsZXJPcHRpb25zKCkudHNCdWlsZEluZm9GaWxlID8/ICcudHNidWlsZGluZm8nO1xuXG4gICAgY29uc3QgZW1pdHRlZEZpbGVzOiBFbWl0RmlsZVJlc3VsdFtdID0gW107XG4gICAgY29uc3Qgd3JpdGVGaWxlQ2FsbGJhY2s6IHRzLldyaXRlRmlsZUNhbGxiYWNrID0gKGZpbGVuYW1lLCBjb250ZW50cywgX2EsIF9iLCBzb3VyY2VGaWxlcykgPT4ge1xuICAgICAgaWYgKCFzb3VyY2VGaWxlcz8ubGVuZ3RoICYmIGZpbGVuYW1lLmVuZHNXaXRoKGJ1aWxkSW5mb0ZpbGVuYW1lKSkge1xuICAgICAgICAvLyBTYXZlIGJ1aWxkZXIgaW5mbyBjb250ZW50cyB0byBzcGVjaWZpZWQgbG9jYXRpb25cbiAgICAgICAgY29tcGlsZXJIb3N0LndyaXRlRmlsZShmaWxlbmFtZSwgY29udGVudHMsIGZhbHNlKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGFzc2VydChzb3VyY2VGaWxlcz8ubGVuZ3RoID09PSAxLCAnSW52YWxpZCBUeXBlU2NyaXB0IHByb2dyYW0gZW1pdCBmb3IgJyArIGZpbGVuYW1lKTtcblxuICAgICAgZW1pdHRlZEZpbGVzLnB1c2goeyBmaWxlbmFtZTogc291cmNlRmlsZXNbMF0uZmlsZU5hbWUsIGNvbnRlbnRzIH0pO1xuICAgIH07XG4gICAgY29uc3QgdHJhbnNmb3JtZXJzID0ge1xuICAgICAgYmVmb3JlOiBbcmVwbGFjZVJlc291cmNlc1RyYW5zZm9ybSwgY29uc3RydWN0b3JQYXJhbWV0ZXJzRG93bmxldmVsVHJhbnNmb3JtXSxcbiAgICB9O1xuXG4gICAgLy8gVHlwZVNjcmlwdCB3aWxsIGxvb3AgdW50aWwgdGhlcmUgYXJlIG5vIG1vcmUgYWZmZWN0ZWQgZmlsZXMgaW4gdGhlIHByb2dyYW1cbiAgICB3aGlsZSAoXG4gICAgICB0eXBlU2NyaXB0UHJvZ3JhbS5lbWl0TmV4dEFmZmVjdGVkRmlsZSh3cml0ZUZpbGVDYWxsYmFjaywgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHRyYW5zZm9ybWVycylcbiAgICApIHtcbiAgICAgIC8qIGVtcHR5ICovXG4gICAgfVxuXG4gICAgcmV0dXJuIGVtaXR0ZWRGaWxlcztcbiAgfVxufVxuXG5mdW5jdGlvbiBmaW5kQWZmZWN0ZWRGaWxlcyhcbiAgYnVpbGRlcjogdHMuRW1pdEFuZFNlbWFudGljRGlhZ25vc3RpY3NCdWlsZGVyUHJvZ3JhbSxcbik6IFNldDx0cy5Tb3VyY2VGaWxlPiB7XG4gIGNvbnN0IGFmZmVjdGVkRmlsZXMgPSBuZXcgU2V0PHRzLlNvdXJjZUZpbGU+KCk7XG5cbiAgbGV0IHJlc3VsdDtcbiAgd2hpbGUgKChyZXN1bHQgPSBidWlsZGVyLmdldFNlbWFudGljRGlhZ25vc3RpY3NPZk5leHRBZmZlY3RlZEZpbGUoKSkpIHtcbiAgICBhZmZlY3RlZEZpbGVzLmFkZChyZXN1bHQuYWZmZWN0ZWQgYXMgdHMuU291cmNlRmlsZSk7XG4gIH1cblxuICByZXR1cm4gYWZmZWN0ZWRGaWxlcztcbn1cbiJdfQ==