@depup/angular-devkit__build-angular 21.2.2-depup.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 (385) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +46 -0
  3. package/builders.json +76 -0
  4. package/changes.json +70 -0
  5. package/index.d.ts +8 -0
  6. package/index.js +25 -0
  7. package/index.js.map +1 -0
  8. package/package.json +229 -0
  9. package/plugins/karma.d.ts +7 -0
  10. package/plugins/karma.js +10 -0
  11. package/plugins/karma.js.map +1 -0
  12. package/src/builders/app-shell/index.d.ts +11 -0
  13. package/src/builders/app-shell/index.js +193 -0
  14. package/src/builders/app-shell/index.js.map +1 -0
  15. package/src/builders/app-shell/render-worker.d.ts +36 -0
  16. package/src/builders/app-shell/render-worker.js +115 -0
  17. package/src/builders/app-shell/render-worker.js.map +1 -0
  18. package/src/builders/app-shell/schema.d.ts +36 -0
  19. package/src/builders/app-shell/schema.js +5 -0
  20. package/src/builders/app-shell/schema.js.map +1 -0
  21. package/src/builders/app-shell/schema.json +37 -0
  22. package/src/builders/browser/index.d.ts +42 -0
  23. package/src/builders/browser/index.js +342 -0
  24. package/src/builders/browser/index.js.map +1 -0
  25. package/src/builders/browser/schema.d.ts +441 -0
  26. package/src/builders/browser/schema.js +65 -0
  27. package/src/builders/browser/schema.js.map +1 -0
  28. package/src/builders/browser/schema.json +548 -0
  29. package/src/builders/browser-esbuild/index.d.ts +28 -0
  30. package/src/builders/browser-esbuild/index.js +53 -0
  31. package/src/builders/browser-esbuild/index.js.map +1 -0
  32. package/src/builders/browser-esbuild/schema.d.ts +431 -0
  33. package/src/builders/browser-esbuild/schema.js +59 -0
  34. package/src/builders/browser-esbuild/schema.js.map +1 -0
  35. package/src/builders/browser-esbuild/schema.json +541 -0
  36. package/src/builders/dev-server/builder.d.ts +44 -0
  37. package/src/builders/dev-server/builder.js +160 -0
  38. package/src/builders/dev-server/builder.js.map +1 -0
  39. package/src/builders/dev-server/index.d.ts +14 -0
  40. package/src/builders/dev-server/index.js +16 -0
  41. package/src/builders/dev-server/index.js.map +1 -0
  42. package/src/builders/dev-server/options.d.ts +52 -0
  43. package/src/builders/dev-server/options.js +116 -0
  44. package/src/builders/dev-server/options.js.map +1 -0
  45. package/src/builders/dev-server/schema.d.ts +118 -0
  46. package/src/builders/dev-server/schema.js +5 -0
  47. package/src/builders/dev-server/schema.js.map +1 -0
  48. package/src/builders/dev-server/schema.json +135 -0
  49. package/src/builders/dev-server/webpack-server.d.ts +35 -0
  50. package/src/builders/dev-server/webpack-server.js +296 -0
  51. package/src/builders/dev-server/webpack-server.js.map +1 -0
  52. package/src/builders/extract-i18n/application-extraction.d.ts +17 -0
  53. package/src/builders/extract-i18n/application-extraction.js +136 -0
  54. package/src/builders/extract-i18n/application-extraction.js.map +1 -0
  55. package/src/builders/extract-i18n/builder.d.ts +17 -0
  56. package/src/builders/extract-i18n/builder.js +178 -0
  57. package/src/builders/extract-i18n/builder.js.map +1 -0
  58. package/src/builders/extract-i18n/empty-loader.d.ts +8 -0
  59. package/src/builders/extract-i18n/empty-loader.js +14 -0
  60. package/src/builders/extract-i18n/empty-loader.js.map +1 -0
  61. package/src/builders/extract-i18n/index.d.ts +12 -0
  62. package/src/builders/extract-i18n/index.js +15 -0
  63. package/src/builders/extract-i18n/index.js.map +1 -0
  64. package/src/builders/extract-i18n/ivy-extract-loader.d.ts +13 -0
  65. package/src/builders/extract-i18n/ivy-extract-loader.js +131 -0
  66. package/src/builders/extract-i18n/ivy-extract-loader.js.map +1 -0
  67. package/src/builders/extract-i18n/options.d.ts +33 -0
  68. package/src/builders/extract-i18n/options.js +86 -0
  69. package/src/builders/extract-i18n/options.js.map +1 -0
  70. package/src/builders/extract-i18n/schema.d.ts +53 -0
  71. package/src/builders/extract-i18n/schema.js +30 -0
  72. package/src/builders/extract-i18n/schema.js.map +1 -0
  73. package/src/builders/extract-i18n/schema.json +38 -0
  74. package/src/builders/extract-i18n/webpack-extraction.d.ts +21 -0
  75. package/src/builders/extract-i18n/webpack-extraction.js +99 -0
  76. package/src/builders/extract-i18n/webpack-extraction.js.map +1 -0
  77. package/src/builders/jest/index.d.ts +11 -0
  78. package/src/builders/jest/index.js +213 -0
  79. package/src/builders/jest/index.js.map +1 -0
  80. package/src/builders/jest/init-test-bed.mjs +24 -0
  81. package/src/builders/jest/jest-global.mjs +19 -0
  82. package/src/builders/jest/jest.config.mjs +11 -0
  83. package/src/builders/jest/options.d.ts +21 -0
  84. package/src/builders/jest/options.js +25 -0
  85. package/src/builders/jest/options.js.map +1 -0
  86. package/src/builders/jest/schema.d.ts +26 -0
  87. package/src/builders/jest/schema.js +5 -0
  88. package/src/builders/jest/schema.js.map +1 -0
  89. package/src/builders/jest/schema.json +44 -0
  90. package/src/builders/karma/browser_builder.d.ts +20 -0
  91. package/src/builders/karma/browser_builder.js +195 -0
  92. package/src/builders/karma/browser_builder.js.map +1 -0
  93. package/src/builders/karma/find-tests-plugin.d.ts +20 -0
  94. package/src/builders/karma/find-tests-plugin.js +59 -0
  95. package/src/builders/karma/find-tests-plugin.js.map +1 -0
  96. package/src/builders/karma/index.d.ts +26 -0
  97. package/src/builders/karma/index.js +183 -0
  98. package/src/builders/karma/index.js.map +1 -0
  99. package/src/builders/karma/schema.d.ts +218 -0
  100. package/src/builders/karma/schema.js +26 -0
  101. package/src/builders/karma/schema.js.map +1 -0
  102. package/src/builders/karma/schema.json +324 -0
  103. package/src/builders/ng-packagr/index.d.ts +17 -0
  104. package/src/builders/ng-packagr/index.js +80 -0
  105. package/src/builders/ng-packagr/index.js.map +1 -0
  106. package/src/builders/ng-packagr/schema.d.ts +21 -0
  107. package/src/builders/ng-packagr/schema.js +5 -0
  108. package/src/builders/ng-packagr/schema.js.map +1 -0
  109. package/src/builders/ng-packagr/schema.json +27 -0
  110. package/src/builders/prerender/index.d.ts +19 -0
  111. package/src/builders/prerender/index.js +242 -0
  112. package/src/builders/prerender/index.js.map +1 -0
  113. package/src/builders/prerender/render-worker.d.ts +30 -0
  114. package/src/builders/prerender/render-worker.js +141 -0
  115. package/src/builders/prerender/render-worker.js.map +1 -0
  116. package/src/builders/prerender/routes-extractor-worker.d.ts +20 -0
  117. package/src/builders/prerender/routes-extractor-worker.js +84 -0
  118. package/src/builders/prerender/routes-extractor-worker.js.map +1 -0
  119. package/src/builders/prerender/schema.d.ts +24 -0
  120. package/src/builders/prerender/schema.js +5 -0
  121. package/src/builders/prerender/schema.js.map +1 -0
  122. package/src/builders/prerender/schema.json +39 -0
  123. package/src/builders/protractor/index.d.ts +16 -0
  124. package/src/builders/protractor/index.js +177 -0
  125. package/src/builders/protractor/index.js.map +1 -0
  126. package/src/builders/protractor/schema.d.ts +47 -0
  127. package/src/builders/protractor/schema.js +5 -0
  128. package/src/builders/protractor/schema.js.map +1 -0
  129. package/src/builders/protractor/schema.json +58 -0
  130. package/src/builders/protractor-error/index.d.ts +10 -0
  131. package/src/builders/protractor-error/index.js +15 -0
  132. package/src/builders/protractor-error/index.js.map +1 -0
  133. package/src/builders/server/index.d.ts +32 -0
  134. package/src/builders/server/index.js +223 -0
  135. package/src/builders/server/index.js.map +1 -0
  136. package/src/builders/server/platform-server-exports-loader.d.ts +16 -0
  137. package/src/builders/server/platform-server-exports-loader.js +35 -0
  138. package/src/builders/server/platform-server-exports-loader.js.map +1 -0
  139. package/src/builders/server/schema.d.ts +229 -0
  140. package/src/builders/server/schema.js +37 -0
  141. package/src/builders/server/schema.js.map +1 -0
  142. package/src/builders/server/schema.json +301 -0
  143. package/src/builders/ssr-dev-server/index.d.ts +23 -0
  144. package/src/builders/ssr-dev-server/index.js +316 -0
  145. package/src/builders/ssr-dev-server/index.js.map +1 -0
  146. package/src/builders/ssr-dev-server/schema.d.ts +64 -0
  147. package/src/builders/ssr-dev-server/schema.js +5 -0
  148. package/src/builders/ssr-dev-server/schema.js.map +1 -0
  149. package/src/builders/ssr-dev-server/schema.json +75 -0
  150. package/src/builders/ssr-dev-server/utils.d.ts +15 -0
  151. package/src/builders/ssr-dev-server/utils.js +74 -0
  152. package/src/builders/ssr-dev-server/utils.js.map +1 -0
  153. package/src/builders/web-test-runner/builder-status-warnings.d.ts +11 -0
  154. package/src/builders/web-test-runner/builder-status-warnings.js +46 -0
  155. package/src/builders/web-test-runner/builder-status-warnings.js.map +1 -0
  156. package/src/builders/web-test-runner/index.d.ts +10 -0
  157. package/src/builders/web-test-runner/index.js +162 -0
  158. package/src/builders/web-test-runner/index.js.map +1 -0
  159. package/src/builders/web-test-runner/jasmine_runner.js +91 -0
  160. package/src/builders/web-test-runner/options.d.ts +24 -0
  161. package/src/builders/web-test-runner/options.js +26 -0
  162. package/src/builders/web-test-runner/options.js.map +1 -0
  163. package/src/builders/web-test-runner/schema.d.ts +192 -0
  164. package/src/builders/web-test-runner/schema.js +16 -0
  165. package/src/builders/web-test-runner/schema.js.map +1 -0
  166. package/src/builders/web-test-runner/schema.json +297 -0
  167. package/src/builders/web-test-runner/test_page.html +40 -0
  168. package/src/builders/web-test-runner/write-test-files.d.ts +9 -0
  169. package/src/builders/web-test-runner/write-test-files.js +42 -0
  170. package/src/builders/web-test-runner/write-test-files.js.map +1 -0
  171. package/src/index.d.ts +30 -0
  172. package/src/index.js +55 -0
  173. package/src/index.js.map +1 -0
  174. package/src/tools/babel/babel-loader.d.ts +34 -0
  175. package/src/tools/babel/plugins/add-code-coverage.d.ts +14 -0
  176. package/src/tools/babel/plugins/add-code-coverage.js +45 -0
  177. package/src/tools/babel/plugins/add-code-coverage.js.map +1 -0
  178. package/src/tools/babel/plugins/types.d.ts +20 -0
  179. package/src/tools/babel/presets/application.d.ts +50 -0
  180. package/src/tools/babel/presets/application.js +189 -0
  181. package/src/tools/babel/presets/application.js.map +1 -0
  182. package/src/tools/babel/webpack-loader.d.ts +18 -0
  183. package/src/tools/babel/webpack-loader.js +201 -0
  184. package/src/tools/babel/webpack-loader.js.map +1 -0
  185. package/src/tools/webpack/configs/common.d.ts +10 -0
  186. package/src/tools/webpack/configs/common.js +433 -0
  187. package/src/tools/webpack/configs/common.js.map +1 -0
  188. package/src/tools/webpack/configs/dev-server.d.ts +16 -0
  189. package/src/tools/webpack/configs/dev-server.js +313 -0
  190. package/src/tools/webpack/configs/dev-server.js.map +1 -0
  191. package/src/tools/webpack/configs/index.d.ts +10 -0
  192. package/src/tools/webpack/configs/index.js +27 -0
  193. package/src/tools/webpack/configs/index.js.map +1 -0
  194. package/src/tools/webpack/configs/styles.d.ts +10 -0
  195. package/src/tools/webpack/configs/styles.js +384 -0
  196. package/src/tools/webpack/configs/styles.js.map +1 -0
  197. package/src/tools/webpack/plugins/any-component-style-budget-checker.d.ts +18 -0
  198. package/src/tools/webpack/plugins/any-component-style-budget-checker.js +100 -0
  199. package/src/tools/webpack/plugins/any-component-style-budget-checker.js.map +1 -0
  200. package/src/tools/webpack/plugins/builder-watch-plugin.d.ts +23 -0
  201. package/src/tools/webpack/plugins/builder-watch-plugin.js +102 -0
  202. package/src/tools/webpack/plugins/builder-watch-plugin.js.map +1 -0
  203. package/src/tools/webpack/plugins/common-js-usage-warn-plugin.d.ts +21 -0
  204. package/src/tools/webpack/plugins/common-js-usage-warn-plugin.js +126 -0
  205. package/src/tools/webpack/plugins/common-js-usage-warn-plugin.js.map +1 -0
  206. package/src/tools/webpack/plugins/css-optimizer-plugin.d.ts +35 -0
  207. package/src/tools/webpack/plugins/css-optimizer-plugin.js +124 -0
  208. package/src/tools/webpack/plugins/css-optimizer-plugin.js.map +1 -0
  209. package/src/tools/webpack/plugins/dedupe-module-resolve-plugin.d.ts +29 -0
  210. package/src/tools/webpack/plugins/dedupe-module-resolve-plugin.js +76 -0
  211. package/src/tools/webpack/plugins/dedupe-module-resolve-plugin.js.map +1 -0
  212. package/src/tools/webpack/plugins/devtools-ignore-plugin.d.ts +16 -0
  213. package/src/tools/webpack/plugins/devtools-ignore-plugin.js +57 -0
  214. package/src/tools/webpack/plugins/devtools-ignore-plugin.js.map +1 -0
  215. package/src/tools/webpack/plugins/esbuild-executor.d.ts +46 -0
  216. package/src/tools/webpack/plugins/esbuild-executor.js +134 -0
  217. package/src/tools/webpack/plugins/esbuild-executor.js.map +1 -0
  218. package/src/tools/webpack/plugins/hmr/hmr-accept.d.ts +8 -0
  219. package/src/tools/webpack/plugins/hmr/hmr-accept.js +185 -0
  220. package/src/tools/webpack/plugins/hmr/hmr-accept.js.map +1 -0
  221. package/src/tools/webpack/plugins/hmr/hmr-loader.d.ts +9 -0
  222. package/src/tools/webpack/plugins/hmr/hmr-loader.js +25 -0
  223. package/src/tools/webpack/plugins/hmr/hmr-loader.js.map +1 -0
  224. package/src/tools/webpack/plugins/index-html-webpack-plugin.d.ts +20 -0
  225. package/src/tools/webpack/plugins/index-html-webpack-plugin.js +88 -0
  226. package/src/tools/webpack/plugins/index-html-webpack-plugin.js.map +1 -0
  227. package/src/tools/webpack/plugins/index.d.ts +16 -0
  228. package/src/tools/webpack/plugins/index.js +33 -0
  229. package/src/tools/webpack/plugins/index.js.map +1 -0
  230. package/src/tools/webpack/plugins/javascript-optimizer-plugin.d.ts +59 -0
  231. package/src/tools/webpack/plugins/javascript-optimizer-plugin.js +168 -0
  232. package/src/tools/webpack/plugins/javascript-optimizer-plugin.js.map +1 -0
  233. package/src/tools/webpack/plugins/javascript-optimizer-worker.d.ts +91 -0
  234. package/src/tools/webpack/plugins/javascript-optimizer-worker.js +135 -0
  235. package/src/tools/webpack/plugins/javascript-optimizer-worker.js.map +1 -0
  236. package/src/tools/webpack/plugins/json-stats-plugin.d.ts +13 -0
  237. package/src/tools/webpack/plugins/json-stats-plugin.js +71 -0
  238. package/src/tools/webpack/plugins/json-stats-plugin.js.map +1 -0
  239. package/src/tools/webpack/plugins/karma/karma-context.html +44 -0
  240. package/src/tools/webpack/plugins/karma/karma-debug.html +46 -0
  241. package/src/tools/webpack/plugins/karma/karma.d.ts +8 -0
  242. package/src/tools/webpack/plugins/karma/karma.js +196 -0
  243. package/src/tools/webpack/plugins/karma/karma.js.map +1 -0
  244. package/src/tools/webpack/plugins/named-chunks-plugin.d.ts +17 -0
  245. package/src/tools/webpack/plugins/named-chunks-plugin.js +59 -0
  246. package/src/tools/webpack/plugins/named-chunks-plugin.js.map +1 -0
  247. package/src/tools/webpack/plugins/occurrences-plugin.d.ts +18 -0
  248. package/src/tools/webpack/plugins/occurrences-plugin.js +81 -0
  249. package/src/tools/webpack/plugins/occurrences-plugin.js.map +1 -0
  250. package/src/tools/webpack/plugins/postcss-cli-resources.d.ts +21 -0
  251. package/src/tools/webpack/plugins/postcss-cli-resources.js +189 -0
  252. package/src/tools/webpack/plugins/postcss-cli-resources.js.map +1 -0
  253. package/src/tools/webpack/plugins/progress-plugin.d.ts +11 -0
  254. package/src/tools/webpack/plugins/progress-plugin.js +39 -0
  255. package/src/tools/webpack/plugins/progress-plugin.js.map +1 -0
  256. package/src/tools/webpack/plugins/remove-hash-plugin.d.ts +18 -0
  257. package/src/tools/webpack/plugins/remove-hash-plugin.js +32 -0
  258. package/src/tools/webpack/plugins/remove-hash-plugin.js.map +1 -0
  259. package/src/tools/webpack/plugins/scripts-webpack-plugin.d.ts +24 -0
  260. package/src/tools/webpack/plugins/scripts-webpack-plugin.js +196 -0
  261. package/src/tools/webpack/plugins/scripts-webpack-plugin.js.map +1 -0
  262. package/src/tools/webpack/plugins/service-worker-plugin.d.ts +19 -0
  263. package/src/tools/webpack/plugins/service-worker-plugin.js +47 -0
  264. package/src/tools/webpack/plugins/service-worker-plugin.js.map +1 -0
  265. package/src/tools/webpack/plugins/styles-webpack-plugin.d.ts +19 -0
  266. package/src/tools/webpack/plugins/styles-webpack-plugin.js +74 -0
  267. package/src/tools/webpack/plugins/styles-webpack-plugin.js.map +1 -0
  268. package/src/tools/webpack/plugins/suppress-entry-chunks-webpack-plugin.d.ts +14 -0
  269. package/src/tools/webpack/plugins/suppress-entry-chunks-webpack-plugin.js +52 -0
  270. package/src/tools/webpack/plugins/suppress-entry-chunks-webpack-plugin.js.map +1 -0
  271. package/src/tools/webpack/plugins/transfer-size-plugin.d.ts +12 -0
  272. package/src/tools/webpack/plugins/transfer-size-plugin.js +50 -0
  273. package/src/tools/webpack/plugins/transfer-size-plugin.js.map +1 -0
  274. package/src/tools/webpack/plugins/typescript.d.ts +10 -0
  275. package/src/tools/webpack/plugins/typescript.js +53 -0
  276. package/src/tools/webpack/plugins/typescript.js.map +1 -0
  277. package/src/tools/webpack/plugins/watch-files-logs-plugin.d.ts +11 -0
  278. package/src/tools/webpack/plugins/watch-files-logs-plugin.js +28 -0
  279. package/src/tools/webpack/plugins/watch-files-logs-plugin.js.map +1 -0
  280. package/src/tools/webpack/utils/async-chunks.d.ts +16 -0
  281. package/src/tools/webpack/utils/async-chunks.js +45 -0
  282. package/src/tools/webpack/utils/async-chunks.js.map +1 -0
  283. package/src/tools/webpack/utils/helpers.d.ts +43 -0
  284. package/src/tools/webpack/utils/helpers.js +301 -0
  285. package/src/tools/webpack/utils/helpers.js.map +1 -0
  286. package/src/tools/webpack/utils/stats.d.ts +32 -0
  287. package/src/tools/webpack/utils/stats.js +301 -0
  288. package/src/tools/webpack/utils/stats.js.map +1 -0
  289. package/src/transforms.d.ts +8 -0
  290. package/src/transforms.js +10 -0
  291. package/src/transforms.js.map +1 -0
  292. package/src/utils/action-executor.d.ts +35 -0
  293. package/src/utils/action-executor.js +61 -0
  294. package/src/utils/action-executor.js.map +1 -0
  295. package/src/utils/build-options.d.ts +75 -0
  296. package/src/utils/build-options.js +10 -0
  297. package/src/utils/build-options.js.map +1 -0
  298. package/src/utils/bundle-inline-options.d.ts +15 -0
  299. package/src/utils/bundle-inline-options.js +10 -0
  300. package/src/utils/bundle-inline-options.js.map +1 -0
  301. package/src/utils/color.d.ts +10 -0
  302. package/src/utils/color.js +74 -0
  303. package/src/utils/color.js.map +1 -0
  304. package/src/utils/copy-assets.d.ts +18 -0
  305. package/src/utils/copy-assets.js +51 -0
  306. package/src/utils/copy-assets.js.map +1 -0
  307. package/src/utils/default-progress.d.ts +8 -0
  308. package/src/utils/default-progress.js +17 -0
  309. package/src/utils/default-progress.js.map +1 -0
  310. package/src/utils/environment-options.d.ts +16 -0
  311. package/src/utils/environment-options.js +83 -0
  312. package/src/utils/environment-options.js.map +1 -0
  313. package/src/utils/error.d.ts +10 -0
  314. package/src/utils/error.js +21 -0
  315. package/src/utils/error.js.map +1 -0
  316. package/src/utils/i18n-inlining.d.ts +11 -0
  317. package/src/utils/i18n-inlining.js +131 -0
  318. package/src/utils/i18n-inlining.js.map +1 -0
  319. package/src/utils/i18n-webpack.d.ts +16 -0
  320. package/src/utils/i18n-webpack.js +108 -0
  321. package/src/utils/i18n-webpack.js.map +1 -0
  322. package/src/utils/index.d.ts +16 -0
  323. package/src/utils/index.js +36 -0
  324. package/src/utils/index.js.map +1 -0
  325. package/src/utils/load-esm.d.ts +20 -0
  326. package/src/utils/load-esm.js +31 -0
  327. package/src/utils/load-esm.js.map +1 -0
  328. package/src/utils/normalize-asset-patterns.d.ts +14 -0
  329. package/src/utils/normalize-asset-patterns.js +107 -0
  330. package/src/utils/normalize-asset-patterns.js.map +1 -0
  331. package/src/utils/normalize-builder-schema.d.ts +23 -0
  332. package/src/utils/normalize-builder-schema.js +44 -0
  333. package/src/utils/normalize-builder-schema.js.map +1 -0
  334. package/src/utils/normalize-cache.d.ts +16 -0
  335. package/src/utils/normalize-cache.js +44 -0
  336. package/src/utils/normalize-cache.js.map +1 -0
  337. package/src/utils/normalize-file-replacements.d.ts +16 -0
  338. package/src/utils/normalize-file-replacements.js +87 -0
  339. package/src/utils/normalize-file-replacements.js.map +1 -0
  340. package/src/utils/normalize-optimization.d.ts +13 -0
  341. package/src/utils/normalize-optimization.js +40 -0
  342. package/src/utils/normalize-optimization.js.map +1 -0
  343. package/src/utils/normalize-polyfills.d.ts +8 -0
  344. package/src/utils/normalize-polyfills.js +24 -0
  345. package/src/utils/normalize-polyfills.js.map +1 -0
  346. package/src/utils/normalize-source-maps.d.ts +9 -0
  347. package/src/utils/normalize-source-maps.js +23 -0
  348. package/src/utils/normalize-source-maps.js.map +1 -0
  349. package/src/utils/output-paths.d.ts +9 -0
  350. package/src/utils/output-paths.js +27 -0
  351. package/src/utils/output-paths.js.map +1 -0
  352. package/src/utils/package-chunk-sort.d.ts +14 -0
  353. package/src/utils/package-chunk-sort.js +35 -0
  354. package/src/utils/package-chunk-sort.js.map +1 -0
  355. package/src/utils/package-version.d.ts +8 -0
  356. package/src/utils/package-version.js +12 -0
  357. package/src/utils/package-version.js.map +1 -0
  358. package/src/utils/process-bundle.d.ts +22 -0
  359. package/src/utils/process-bundle.js +315 -0
  360. package/src/utils/process-bundle.js.map +1 -0
  361. package/src/utils/read-tsconfig.d.ts +16 -0
  362. package/src/utils/read-tsconfig.js +61 -0
  363. package/src/utils/read-tsconfig.js.map +1 -0
  364. package/src/utils/run-module-as-observable-fork.d.ts +10 -0
  365. package/src/utils/run-module-as-observable-fork.js +78 -0
  366. package/src/utils/run-module-as-observable-fork.js.map +1 -0
  367. package/src/utils/run-module-worker.js +18 -0
  368. package/src/utils/spinner.d.ts +20 -0
  369. package/src/utils/spinner.js +56 -0
  370. package/src/utils/spinner.js.map +1 -0
  371. package/src/utils/test-files.d.ts +18 -0
  372. package/src/utils/test-files.js +32 -0
  373. package/src/utils/test-files.js.map +1 -0
  374. package/src/utils/tty.d.ts +8 -0
  375. package/src/utils/tty.js +23 -0
  376. package/src/utils/tty.js.map +1 -0
  377. package/src/utils/url.d.ts +8 -0
  378. package/src/utils/url.js +18 -0
  379. package/src/utils/url.js.map +1 -0
  380. package/src/utils/webpack-browser-config.d.ts +29 -0
  381. package/src/utils/webpack-browser-config.js +161 -0
  382. package/src/utils/webpack-browser-config.js.map +1 -0
  383. package/src/utils/webpack-diagnostics.d.ts +10 -0
  384. package/src/utils/webpack-diagnostics.js +18 -0
  385. package/src/utils/webpack-diagnostics.js.map +1 -0
@@ -0,0 +1,195 @@
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.dev/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 () {
26
+ var ownKeys = function(o) {
27
+ ownKeys = Object.getOwnPropertyNames || function (o) {
28
+ var ar = [];
29
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
30
+ return ar;
31
+ };
32
+ return ownKeys(o);
33
+ };
34
+ return function (mod) {
35
+ if (mod && mod.__esModule) return mod;
36
+ var result = {};
37
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
38
+ __setModuleDefault(result, mod);
39
+ return result;
40
+ };
41
+ })();
42
+ var __importDefault = (this && this.__importDefault) || function (mod) {
43
+ return (mod && mod.__esModule) ? mod : { "default": mod };
44
+ };
45
+ Object.defineProperty(exports, "__esModule", { value: true });
46
+ exports.execute = execute;
47
+ const private_1 = require("@angular/build/private");
48
+ const path = __importStar(require("node:path"));
49
+ const webpack_1 = __importDefault(require("webpack"));
50
+ const configs_1 = require("../../tools/webpack/configs");
51
+ const webpack_browser_config_1 = require("../../utils/webpack-browser-config");
52
+ const schema_1 = require("../browser/schema");
53
+ const find_tests_plugin_1 = require("./find-tests-plugin");
54
+ function execute(options, context, karmaOptions, transforms = {}) {
55
+ let karmaServer;
56
+ let isCancelled = false;
57
+ return new ReadableStream({
58
+ async start(controller) {
59
+ const [karma, webpackConfig] = await initializeBrowser(options, context, transforms.webpackConfiguration);
60
+ if (isCancelled) {
61
+ return;
62
+ }
63
+ const projectName = context.target?.project;
64
+ if (!projectName) {
65
+ throw new Error(`The 'karma' builder requires a target to be specified.`);
66
+ }
67
+ const projectMetadata = await context.getProjectMetadata(projectName);
68
+ const sourceRoot = (projectMetadata.sourceRoot ?? projectMetadata.root ?? '');
69
+ if (!options.main) {
70
+ webpackConfig.entry ??= {};
71
+ if (typeof webpackConfig.entry === 'object' && !Array.isArray(webpackConfig.entry)) {
72
+ if (Array.isArray(webpackConfig.entry['main'])) {
73
+ webpackConfig.entry['main'].push(getBuiltInMainFile());
74
+ }
75
+ else {
76
+ webpackConfig.entry['main'] = [getBuiltInMainFile()];
77
+ }
78
+ }
79
+ }
80
+ webpackConfig.plugins ??= [];
81
+ webpackConfig.plugins.push(new find_tests_plugin_1.FindTestsPlugin({
82
+ include: options.include,
83
+ exclude: options.exclude,
84
+ workspaceRoot: context.workspaceRoot,
85
+ projectSourceRoot: path.join(context.workspaceRoot, sourceRoot),
86
+ }));
87
+ const KARMA_APPLICATION_PATH = '_karma_webpack_';
88
+ webpackConfig.output ??= {};
89
+ webpackConfig.output.path = `/${KARMA_APPLICATION_PATH}/`;
90
+ webpackConfig.output.publicPath = `/${KARMA_APPLICATION_PATH}/`;
91
+ if (karmaOptions.singleRun) {
92
+ webpackConfig.plugins.unshift({
93
+ apply: (compiler) => {
94
+ compiler.hooks.afterEnvironment.tap('karma', () => {
95
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
96
+ compiler.watchFileSystem = { watch: () => { } };
97
+ });
98
+ },
99
+ });
100
+ }
101
+ // Remove the watch option to avoid the [DEP_WEBPACK_WATCH_WITHOUT_CALLBACK] warning.
102
+ // The compiler is initialized in watch mode by webpack-dev-middleware.
103
+ delete webpackConfig.watch;
104
+ const compiler = (0, webpack_1.default)(webpackConfig);
105
+ karmaOptions.buildWebpack = {
106
+ options,
107
+ compiler,
108
+ logger: context.logger,
109
+ };
110
+ const parsedKarmaConfig = await karma.config.parseConfig(options.karmaConfig && path.resolve(context.workspaceRoot, options.karmaConfig), transforms.karmaOptions ? transforms.karmaOptions(karmaOptions) : karmaOptions, { promiseConfig: true, throwErrors: true });
111
+ if (isCancelled) {
112
+ return;
113
+ }
114
+ const enqueue = (value) => {
115
+ try {
116
+ controller.enqueue(value);
117
+ }
118
+ catch {
119
+ // Controller is already closed
120
+ }
121
+ };
122
+ const close = () => {
123
+ try {
124
+ controller.close();
125
+ }
126
+ catch {
127
+ // Controller is already closed
128
+ }
129
+ };
130
+ // Close the stream once the Karma server returns.
131
+ karmaServer = new karma.Server(parsedKarmaConfig, (exitCode) => {
132
+ enqueue({ success: exitCode === 0 });
133
+ close();
134
+ });
135
+ karmaServer.on('run_complete', (_, results) => {
136
+ enqueue({ success: results.exitCode === 0 });
137
+ });
138
+ await karmaServer.start();
139
+ },
140
+ async cancel() {
141
+ isCancelled = true;
142
+ await karmaServer?.stop();
143
+ },
144
+ });
145
+ }
146
+ async function initializeBrowser(options, context, webpackConfigurationTransformer) {
147
+ // Purge old build disk cache.
148
+ await (0, private_1.purgeStaleBuildCache)(context);
149
+ const karma = await Promise.resolve().then(() => __importStar(require('karma')));
150
+ const { config } = await (0, webpack_browser_config_1.generateBrowserWebpackConfigFromContext)(
151
+ // only two properties are missing:
152
+ // * `outputPath` which is fixed for tests
153
+ // * `budgets` which might be incorrect due to extra dev libs
154
+ {
155
+ ...options,
156
+ outputPath: '',
157
+ budgets: undefined,
158
+ optimization: false,
159
+ buildOptimizer: false,
160
+ aot: options.aot,
161
+ vendorChunk: true,
162
+ namedChunks: true,
163
+ extractLicenses: false,
164
+ outputHashing: schema_1.OutputHashing.None,
165
+ // The webpack tier owns the watch behavior so we want to force it in the config.
166
+ // When not in watch mode, webpack-dev-middleware will call `compiler.watch` anyway.
167
+ // https://github.com/webpack/webpack-dev-middleware/blob/698c9ae5e9bb9a013985add6189ff21c1a1ec185/src/index.js#L65
168
+ // https://github.com/webpack/webpack/blob/cde1b73e12eb8a77eb9ba42e7920c9ec5d29c2c9/lib/Compiler.js#L379-L388
169
+ watch: true,
170
+ }, context, (wco) => [(0, configs_1.getCommonConfig)(wco), (0, configs_1.getStylesConfig)(wco)]);
171
+ return [karma, (await webpackConfigurationTransformer?.(config)) ?? config];
172
+ }
173
+ function getBuiltInMainFile() {
174
+ const content = Buffer.from(`
175
+ import { provideZoneChangeDetection, ɵcompileNgModuleDefs as compileNgModuleDefs } from '@angular/core';
176
+ import { getTestBed } from '@angular/core/testing';
177
+ import { BrowserTestingModule, platformBrowserTesting } from '@angular/platform-browser/testing';
178
+
179
+ const providers = [];
180
+ if (typeof window.Zone !== 'undefined') {
181
+ providers.push(provideZoneChangeDetection());
182
+ }
183
+
184
+ export class TestModule {}
185
+ compileNgModuleDefs(TestModule, {providers});
186
+
187
+ // Initialize the Angular testing environment.
188
+ getTestBed().initTestEnvironment([BrowserTestingModule, TestModule], platformBrowserTesting(), {
189
+ errorOnUnknownElements: true,
190
+ errorOnUnknownProperties: true
191
+ });
192
+ `).toString('base64');
193
+ return `ng-virtual-main.js!=!data:text/javascript;base64,${content}`;
194
+ }
195
+ //# sourceMappingURL=browser_builder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"browser_builder.js","sourceRoot":"","sources":["browser_builder.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * @license
3
+ * Copyright Google LLC All Rights Reserved.
4
+ *
5
+ * Use of this source code is governed by an MIT-style license that can be
6
+ * found in the LICENSE file at https://angular.dev/license
7
+ */
8
+ import type { Compiler } from 'webpack';
9
+ export interface FindTestsPluginOptions {
10
+ include?: string[];
11
+ exclude?: string[];
12
+ workspaceRoot: string;
13
+ projectSourceRoot: string;
14
+ }
15
+ export declare class FindTestsPlugin {
16
+ private options;
17
+ private compilation;
18
+ constructor(options: FindTestsPluginOptions);
19
+ apply(compiler: Compiler): void;
20
+ }
@@ -0,0 +1,59 @@
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.dev/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.FindTestsPlugin = void 0;
14
+ const private_1 = require("@angular/build/private");
15
+ const mini_css_extract_plugin_1 = require("mini-css-extract-plugin");
16
+ const node_assert_1 = __importDefault(require("node:assert"));
17
+ /**
18
+ * The name of the plugin provided to Webpack when tapping Webpack compiler hooks.
19
+ */
20
+ const PLUGIN_NAME = 'angular-find-tests-plugin';
21
+ class FindTestsPlugin {
22
+ options;
23
+ compilation;
24
+ constructor(options) {
25
+ this.options = options;
26
+ }
27
+ apply(compiler) {
28
+ const { include = ['**/*.spec.ts'], exclude = [], projectSourceRoot, workspaceRoot, } = this.options;
29
+ const webpackOptions = compiler.options;
30
+ const entry = typeof webpackOptions.entry === 'function' ? webpackOptions.entry() : webpackOptions.entry;
31
+ let originalImport;
32
+ // Add tests files are part of the entry-point.
33
+ webpackOptions.entry = async () => {
34
+ const specFiles = await (0, private_1.findTests)(include, exclude, workspaceRoot, projectSourceRoot);
35
+ const entrypoints = await entry;
36
+ const entrypoint = entrypoints['main'];
37
+ if (!entrypoint.import) {
38
+ throw new Error(`Cannot find 'main' entrypoint.`);
39
+ }
40
+ if (specFiles.length) {
41
+ originalImport ??= entrypoint.import;
42
+ entrypoint.import = [...originalImport, ...specFiles];
43
+ }
44
+ else {
45
+ (0, node_assert_1.default)(this.compilation, 'Compilation cannot be undefined.');
46
+ this.compilation
47
+ .getLogger(mini_css_extract_plugin_1.pluginName)
48
+ .error(`Specified patterns: "${include.join(', ')}" did not match any spec files.`);
49
+ }
50
+ return entrypoints;
51
+ };
52
+ compiler.hooks.thisCompilation.tap(PLUGIN_NAME, (compilation) => {
53
+ this.compilation = compilation;
54
+ compilation.contextDependencies.add(projectSourceRoot);
55
+ });
56
+ }
57
+ }
58
+ exports.FindTestsPlugin = FindTestsPlugin;
59
+ //# sourceMappingURL=find-tests-plugin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"find-tests-plugin.js","sourceRoot":"","sources":["find-tests-plugin.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;;;;;AAEH,oDAAmD;AACnD,qEAAqD;AACrD,8DAAiC;AAGjC;;GAEG;AACH,MAAM,WAAW,GAAG,2BAA2B,CAAC;AAShD,MAAa,eAAe;IAGN;IAFZ,WAAW,CAA0B;IAE7C,YAAoB,OAA+B;QAA/B,YAAO,GAAP,OAAO,CAAwB;IAAG,CAAC;IAEvD,KAAK,CAAC,QAAkB;QACtB,MAAM,EACJ,OAAO,GAAG,CAAC,cAAc,CAAC,EAC1B,OAAO,GAAG,EAAE,EACZ,iBAAiB,EACjB,aAAa,GACd,GAAG,IAAI,CAAC,OAAO,CAAC;QACjB,MAAM,cAAc,GAAG,QAAQ,CAAC,OAAO,CAAC;QACxC,MAAM,KAAK,GACT,OAAO,cAAc,CAAC,KAAK,KAAK,UAAU,CAAC,CAAC,CAAC,cAAc,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,cAAc,CAAC,KAAK,CAAC;QAE7F,IAAI,cAAoC,CAAC;QAEzC,+CAA+C;QAC/C,cAAc,CAAC,KAAK,GAAG,KAAK,IAAI,EAAE;YAChC,MAAM,SAAS,GAAG,MAAM,IAAA,mBAAS,EAAC,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,iBAAiB,CAAC,CAAC;YACtF,MAAM,WAAW,GAAG,MAAM,KAAK,CAAC;YAChC,MAAM,UAAU,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC;YACvC,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC;gBACvB,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;YACpD,CAAC;YAED,IAAI,SAAS,CAAC,MAAM,EAAE,CAAC;gBACrB,cAAc,KAAK,UAAU,CAAC,MAAM,CAAC;gBACrC,UAAU,CAAC,MAAM,GAAG,CAAC,GAAG,cAAc,EAAE,GAAG,SAAS,CAAC,CAAC;YACxD,CAAC;iBAAM,CAAC;gBACN,IAAA,qBAAM,EAAC,IAAI,CAAC,WAAW,EAAE,kCAAkC,CAAC,CAAC;gBAC7D,IAAI,CAAC,WAAW;qBACb,SAAS,CAAC,oCAAU,CAAC;qBACrB,KAAK,CAAC,wBAAwB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC;YACxF,CAAC;YAED,OAAO,WAAW,CAAC;QACrB,CAAC,CAAC;QAEF,QAAQ,CAAC,KAAK,CAAC,eAAe,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,WAAW,EAAE,EAAE;YAC9D,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;YAC/B,WAAW,CAAC,mBAAmB,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;QACzD,CAAC,CAAC,CAAC;IACL,CAAC;CACF;AA7CD,0CA6CC"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * @license
3
+ * Copyright Google LLC All Rights Reserved.
4
+ *
5
+ * Use of this source code is governed by an MIT-style license that can be
6
+ * found in the LICENSE file at https://angular.dev/license
7
+ */
8
+ import { BuilderContext, BuilderOutput } from '@angular-devkit/architect';
9
+ import type { ConfigOptions } from 'karma';
10
+ import { Configuration } from 'webpack';
11
+ import { ExecutionTransformer } from '../../transforms';
12
+ import { Schema as KarmaBuilderOptions } from './schema';
13
+ export type KarmaConfigOptions = ConfigOptions & {
14
+ buildWebpack?: unknown;
15
+ configFile?: string;
16
+ };
17
+ /**
18
+ * @experimental Direct usage of this function is considered experimental.
19
+ */
20
+ export declare function execute(options: KarmaBuilderOptions, context: BuilderContext, transforms?: {
21
+ webpackConfiguration?: ExecutionTransformer<Configuration>;
22
+ karmaOptions?: (options: KarmaConfigOptions) => KarmaConfigOptions;
23
+ }): AsyncIterable<BuilderOutput>;
24
+ export type { KarmaBuilderOptions };
25
+ declare const _default: import("@angular-devkit/architect").Builder<KarmaBuilderOptions & import("@angular-devkit/core").JsonObject>;
26
+ export default _default;
@@ -0,0 +1,183 @@
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.dev/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 () {
26
+ var ownKeys = function(o) {
27
+ ownKeys = Object.getOwnPropertyNames || function (o) {
28
+ var ar = [];
29
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
30
+ return ar;
31
+ };
32
+ return ownKeys(o);
33
+ };
34
+ return function (mod) {
35
+ if (mod && mod.__esModule) return mod;
36
+ var result = {};
37
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
38
+ __setModuleDefault(result, mod);
39
+ return result;
40
+ };
41
+ })();
42
+ Object.defineProperty(exports, "__esModule", { value: true });
43
+ exports.execute = execute;
44
+ const private_1 = require("@angular/build/private");
45
+ const architect_1 = require("@angular-devkit/architect");
46
+ const core_1 = require("@angular-devkit/core");
47
+ const node_module_1 = require("node:module");
48
+ const path = __importStar(require("node:path"));
49
+ const utils_1 = require("../../utils");
50
+ const schema_1 = require("./schema");
51
+ /**
52
+ * @experimental Direct usage of this function is considered experimental.
53
+ */
54
+ async function* execute(options, context, transforms = {}) {
55
+ // Check Angular version.
56
+ (0, private_1.assertCompatibleAngularVersion)(context.workspaceRoot);
57
+ if (await checkForEsbuild(options, context)) {
58
+ if (transforms.webpackConfiguration) {
59
+ context.logger.warn(`This build is using the application builder but transforms.webpackConfiguration was provided. The transform will be ignored.`);
60
+ }
61
+ if (options.fileReplacements) {
62
+ options.fileReplacements = (0, utils_1.normalizeFileReplacements)(options.fileReplacements, './');
63
+ }
64
+ if (typeof options.polyfills === 'string') {
65
+ options.polyfills = [options.polyfills];
66
+ }
67
+ const { executeKarmaBuilder } = await Promise.resolve().then(() => __importStar(require('@angular/build')));
68
+ yield* executeKarmaBuilder(options, context, transforms);
69
+ }
70
+ else {
71
+ const karmaOptions = getBaseKarmaOptions(options, context);
72
+ const { execute } = await Promise.resolve().then(() => __importStar(require('./browser_builder')));
73
+ yield* execute(options, context, karmaOptions, transforms);
74
+ }
75
+ }
76
+ function getBaseKarmaOptions(options, context) {
77
+ let singleRun;
78
+ if (options.watch !== undefined) {
79
+ singleRun = !options.watch;
80
+ }
81
+ // Determine project name from builder context target
82
+ const projectName = context.target?.project;
83
+ if (!projectName) {
84
+ throw new Error(`The 'karma' builder requires a target to be specified.`);
85
+ }
86
+ const karmaOptions = options.karmaConfig
87
+ ? {}
88
+ : getBuiltInKarmaConfig(context.workspaceRoot, projectName);
89
+ karmaOptions.singleRun = singleRun;
90
+ // Workaround https://github.com/angular/angular-cli/issues/28271, by clearing context by default
91
+ // for single run executions. Not clearing context for multi-run (watched) builds allows the
92
+ // Jasmine Spec Runner to be visible in the browser after test execution.
93
+ karmaOptions.client ??= {};
94
+ karmaOptions.client.clearContext ??= singleRun ?? false; // `singleRun` defaults to `false` per Karma docs.
95
+ // Convert browsers from a string to an array
96
+ if (typeof options.browsers === 'string' && options.browsers) {
97
+ karmaOptions.browsers = options.browsers.split(',');
98
+ }
99
+ else if (options.browsers === false) {
100
+ karmaOptions.browsers = [];
101
+ }
102
+ if (options.reporters) {
103
+ // Split along commas to make it more natural, and remove empty strings.
104
+ const reporters = options.reporters
105
+ .reduce((acc, curr) => acc.concat(curr.split(',')), [])
106
+ .filter((x) => !!x);
107
+ if (reporters.length > 0) {
108
+ karmaOptions.reporters = reporters;
109
+ }
110
+ }
111
+ return karmaOptions;
112
+ }
113
+ function getBuiltInKarmaConfig(workspaceRoot, projectName) {
114
+ let coverageFolderName = projectName.charAt(0) === '@' ? projectName.slice(1) : projectName;
115
+ if (/[A-Z]/.test(coverageFolderName)) {
116
+ coverageFolderName = core_1.strings.dasherize(coverageFolderName);
117
+ }
118
+ const workspaceRootRequire = (0, node_module_1.createRequire)(workspaceRoot + '/');
119
+ // Any changes to the config here need to be synced to: packages/schematics/angular/config/files/karma.conf.js.template
120
+ return {
121
+ basePath: '',
122
+ frameworks: ['jasmine', '@angular-devkit/build-angular'],
123
+ plugins: [
124
+ 'karma-jasmine',
125
+ 'karma-chrome-launcher',
126
+ 'karma-jasmine-html-reporter',
127
+ 'karma-coverage',
128
+ '@angular-devkit/build-angular/plugins/karma',
129
+ ].map((p) => workspaceRootRequire(p)),
130
+ jasmineHtmlReporter: {
131
+ suppressAll: true, // removes the duplicated traces
132
+ },
133
+ coverageReporter: {
134
+ dir: path.join(workspaceRoot, 'coverage', coverageFolderName),
135
+ subdir: '.',
136
+ reporters: [{ type: 'html' }, { type: 'text-summary' }],
137
+ },
138
+ reporters: ['progress', 'kjhtml'],
139
+ browsers: ['Chrome'],
140
+ customLaunchers: {
141
+ // Chrome configured to run in a bazel sandbox.
142
+ // Disable the use of the gpu and `/dev/shm` because it causes Chrome to
143
+ // crash on some environments.
144
+ // See:
145
+ // https://github.com/puppeteer/puppeteer/blob/v1.0.0/docs/troubleshooting.md#tips
146
+ // https://stackoverflow.com/questions/50642308/webdriverexception-unknown-error-devtoolsactiveport-file-doesnt-exist-while-t
147
+ ChromeHeadlessNoSandbox: {
148
+ base: 'ChromeHeadless',
149
+ flags: ['--no-sandbox', '--headless', '--disable-gpu', '--disable-dev-shm-usage'],
150
+ },
151
+ },
152
+ restartOnFileChange: true,
153
+ };
154
+ }
155
+ exports.default = (0, architect_1.createBuilder)(execute);
156
+ async function checkForEsbuild(options, context) {
157
+ if (options.builderMode !== schema_1.BuilderMode.Detect) {
158
+ return options.builderMode === schema_1.BuilderMode.Application;
159
+ }
160
+ // Look up the current project's build target using a development configuration.
161
+ const buildTargetSpecifier = `::development`;
162
+ const buildTarget = (0, architect_1.targetFromTargetString)(buildTargetSpecifier, context.target?.project, 'build');
163
+ try {
164
+ const developmentBuilderName = await context.getBuilderNameForTarget(buildTarget);
165
+ return isEsbuildBased(developmentBuilderName);
166
+ }
167
+ catch (e) {
168
+ if (!(e instanceof Error) || e.message !== 'Project target does not exist.') {
169
+ throw e;
170
+ }
171
+ // If we can't find a development builder, we can't use 'detect'.
172
+ throw new Error('Failed to detect the builder used by the application. Please set builderMode explicitly.');
173
+ }
174
+ }
175
+ function isEsbuildBased(builderName) {
176
+ if (builderName === '@angular/build:application' ||
177
+ builderName === '@angular-devkit/build-angular:application' ||
178
+ builderName === '@angular-devkit/build-angular:browser-esbuild') {
179
+ return true;
180
+ }
181
+ return false;
182
+ }
183
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":"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"}