@angular/build 21.0.0-next.1 → 21.0.0-next.10

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 (424) hide show
  1. package/index.js +1 -0
  2. package/index.js.map +1 -0
  3. package/package.json +18 -18
  4. package/private/index.js +1 -0
  5. package/private/index.js.map +1 -0
  6. package/src/builders/application/build-action.js +1 -0
  7. package/src/builders/application/build-action.js.map +1 -0
  8. package/src/builders/application/chunk-optimizer.js +1 -0
  9. package/src/builders/application/chunk-optimizer.js.map +1 -0
  10. package/src/builders/application/execute-build.js +1 -0
  11. package/src/builders/application/execute-build.js.map +1 -0
  12. package/src/builders/application/execute-post-bundle.js +1 -0
  13. package/src/builders/application/execute-post-bundle.js.map +1 -0
  14. package/src/builders/application/i18n.js +1 -0
  15. package/src/builders/application/i18n.js.map +1 -0
  16. package/src/builders/application/index.js +42 -1
  17. package/src/builders/application/index.js.map +1 -0
  18. package/src/builders/application/options.d.ts +4 -1
  19. package/src/builders/application/options.js +1 -0
  20. package/src/builders/application/options.js.map +1 -0
  21. package/src/builders/application/results.js +1 -0
  22. package/src/builders/application/results.js.map +1 -0
  23. package/src/builders/application/schema.d.ts +14 -1
  24. package/src/builders/application/schema.js +7 -0
  25. package/src/builders/application/schema.js.map +1 -0
  26. package/src/builders/application/schema.json +2 -2
  27. package/src/builders/application/setup-bundling.js +1 -0
  28. package/src/builders/application/setup-bundling.js.map +1 -0
  29. package/src/builders/dev-server/builder.js +1 -0
  30. package/src/builders/dev-server/builder.js.map +1 -0
  31. package/src/builders/dev-server/index.js +1 -0
  32. package/src/builders/dev-server/index.js.map +1 -0
  33. package/src/builders/dev-server/internal.js +1 -0
  34. package/src/builders/dev-server/internal.js.map +1 -0
  35. package/src/builders/dev-server/options.d.ts +3 -0
  36. package/src/builders/dev-server/options.js +3 -1
  37. package/src/builders/dev-server/options.js.map +1 -0
  38. package/src/builders/dev-server/output.js +1 -0
  39. package/src/builders/dev-server/output.js.map +1 -0
  40. package/src/builders/dev-server/schema.d.ts +9 -0
  41. package/src/builders/dev-server/schema.js +1 -0
  42. package/src/builders/dev-server/schema.js.map +1 -0
  43. package/src/builders/dev-server/schema.json +7 -0
  44. package/src/builders/dev-server/vite/hmr.js +1 -0
  45. package/src/builders/dev-server/vite/hmr.js.map +1 -0
  46. package/src/builders/dev-server/vite/index.js +14 -5
  47. package/src/builders/dev-server/vite/index.js.map +1 -0
  48. package/src/builders/dev-server/vite/server.js +2 -4
  49. package/src/builders/dev-server/vite/server.js.map +1 -0
  50. package/src/builders/dev-server/vite/utils.js +1 -0
  51. package/src/builders/dev-server/vite/utils.js.map +1 -0
  52. package/src/builders/extract-i18n/application-extraction.js +1 -0
  53. package/src/builders/extract-i18n/application-extraction.js.map +1 -0
  54. package/src/builders/extract-i18n/builder.js +2 -3
  55. package/src/builders/extract-i18n/builder.js.map +1 -0
  56. package/src/builders/extract-i18n/index.js +1 -0
  57. package/src/builders/extract-i18n/index.js.map +1 -0
  58. package/src/builders/extract-i18n/options.js +1 -0
  59. package/src/builders/extract-i18n/options.js.map +1 -0
  60. package/src/builders/extract-i18n/schema.js +1 -0
  61. package/src/builders/extract-i18n/schema.js.map +1 -0
  62. package/src/builders/karma/application_builder.d.ts +0 -2
  63. package/src/builders/karma/application_builder.js +52 -352
  64. package/src/builders/karma/application_builder.js.map +1 -0
  65. package/src/builders/karma/assets-middleware.d.ts +26 -0
  66. package/src/builders/karma/assets-middleware.js +66 -0
  67. package/src/builders/karma/assets-middleware.js.map +1 -0
  68. package/src/builders/karma/coverage.d.ts +9 -0
  69. package/src/builders/karma/coverage.js +32 -0
  70. package/src/builders/karma/coverage.js.map +1 -0
  71. package/src/builders/karma/find-tests.d.ts +1 -8
  72. package/src/builders/karma/find-tests.js +7 -102
  73. package/src/builders/karma/find-tests.js.map +1 -0
  74. package/src/builders/karma/index.js +1 -0
  75. package/src/builders/karma/index.js.map +1 -0
  76. package/src/builders/karma/karma-config.d.ts +11 -0
  77. package/src/builders/karma/karma-config.js +80 -0
  78. package/src/builders/karma/karma-config.js.map +1 -0
  79. package/src/builders/karma/options.js +1 -0
  80. package/src/builders/karma/options.js.map +1 -0
  81. package/src/builders/karma/polyfills-plugin.d.ts +13 -0
  82. package/src/builders/karma/polyfills-plugin.js +75 -0
  83. package/src/builders/karma/polyfills-plugin.js.map +1 -0
  84. package/src/builders/karma/progress-reporter.d.ts +17 -0
  85. package/src/builders/karma/progress-reporter.js +76 -0
  86. package/src/builders/karma/progress-reporter.js.map +1 -0
  87. package/src/builders/karma/schema.js +1 -0
  88. package/src/builders/karma/schema.js.map +1 -0
  89. package/src/builders/karma/utils.d.ts +17 -0
  90. package/src/builders/karma/utils.js +67 -0
  91. package/src/builders/karma/utils.js.map +1 -0
  92. package/src/builders/ng-packagr/builder.js +1 -0
  93. package/src/builders/ng-packagr/builder.js.map +1 -0
  94. package/src/builders/ng-packagr/index.js +1 -0
  95. package/src/builders/ng-packagr/index.js.map +1 -0
  96. package/src/builders/ng-packagr/schema.js +1 -0
  97. package/src/builders/ng-packagr/schema.js.map +1 -0
  98. package/src/builders/unit-test/builder.js +158 -44
  99. package/src/builders/unit-test/builder.js.map +1 -0
  100. package/src/builders/unit-test/index.js +1 -0
  101. package/src/builders/unit-test/index.js.map +1 -0
  102. package/src/builders/unit-test/options.d.ts +25 -6
  103. package/src/builders/unit-test/options.js +61 -13
  104. package/src/builders/unit-test/options.js.map +1 -0
  105. package/src/builders/unit-test/runners/api.d.ts +19 -1
  106. package/src/builders/unit-test/runners/api.js +1 -0
  107. package/src/builders/unit-test/runners/api.js.map +1 -0
  108. package/src/builders/unit-test/runners/dependency-checker.d.ts +43 -0
  109. package/src/builders/unit-test/runners/dependency-checker.js +83 -0
  110. package/src/builders/unit-test/runners/dependency-checker.js.map +1 -0
  111. package/src/builders/unit-test/runners/karma/executor.js +72 -5
  112. package/src/builders/unit-test/runners/karma/executor.js.map +1 -0
  113. package/src/builders/unit-test/runners/karma/index.js +18 -0
  114. package/src/builders/unit-test/runners/karma/index.js.map +1 -0
  115. package/src/builders/unit-test/runners/vitest/browser-provider.d.ts +8 -3
  116. package/src/builders/unit-test/runners/vitest/browser-provider.js +71 -17
  117. package/src/builders/unit-test/runners/vitest/browser-provider.js.map +1 -0
  118. package/src/builders/unit-test/runners/vitest/build-options.js +48 -9
  119. package/src/builders/unit-test/runners/vitest/build-options.js.map +1 -0
  120. package/src/builders/unit-test/runners/vitest/configuration.d.ts +15 -0
  121. package/src/builders/unit-test/runners/vitest/configuration.js +57 -0
  122. package/src/builders/unit-test/runners/vitest/configuration.js.map +1 -0
  123. package/src/builders/unit-test/runners/vitest/executor.d.ts +6 -4
  124. package/src/builders/unit-test/runners/vitest/executor.js +169 -115
  125. package/src/builders/unit-test/runners/vitest/executor.js.map +1 -0
  126. package/src/builders/unit-test/runners/vitest/index.js +25 -2
  127. package/src/builders/unit-test/runners/vitest/index.js.map +1 -0
  128. package/src/builders/unit-test/runners/vitest/plugins.d.ts +23 -0
  129. package/src/builders/unit-test/runners/vitest/plugins.js +141 -0
  130. package/src/builders/unit-test/runners/vitest/plugins.js.map +1 -0
  131. package/src/builders/unit-test/schema.d.ts +163 -39
  132. package/src/builders/unit-test/schema.js +14 -13
  133. package/src/builders/unit-test/schema.js.map +1 -0
  134. package/src/builders/unit-test/schema.json +186 -40
  135. package/src/builders/unit-test/test-discovery.d.ts +29 -1
  136. package/src/builders/unit-test/test-discovery.js +215 -5
  137. package/src/builders/unit-test/test-discovery.js.map +1 -0
  138. package/src/index.js +1 -0
  139. package/src/index.js.map +1 -0
  140. package/src/private.js +1 -0
  141. package/src/private.js.map +1 -0
  142. package/src/tools/angular/angular-host.js +1 -0
  143. package/src/tools/angular/angular-host.js.map +1 -0
  144. package/src/tools/angular/compilation/angular-compilation.js +2 -5
  145. package/src/tools/angular/compilation/angular-compilation.js.map +1 -0
  146. package/src/tools/angular/compilation/aot-compilation.js +1 -0
  147. package/src/tools/angular/compilation/aot-compilation.js.map +1 -0
  148. package/src/tools/angular/compilation/factory.js +1 -0
  149. package/src/tools/angular/compilation/factory.js.map +1 -0
  150. package/src/tools/angular/compilation/hmr-candidates.js +1 -0
  151. package/src/tools/angular/compilation/hmr-candidates.js.map +1 -0
  152. package/src/tools/angular/compilation/index.js +1 -0
  153. package/src/tools/angular/compilation/index.js.map +1 -0
  154. package/src/tools/angular/compilation/jit-compilation.js +35 -2
  155. package/src/tools/angular/compilation/jit-compilation.js.map +1 -0
  156. package/src/tools/angular/compilation/noop-compilation.js +1 -0
  157. package/src/tools/angular/compilation/noop-compilation.js.map +1 -0
  158. package/src/tools/angular/compilation/parallel-compilation.js +1 -0
  159. package/src/tools/angular/compilation/parallel-compilation.js.map +1 -0
  160. package/src/tools/angular/compilation/parallel-worker.js +1 -0
  161. package/src/tools/angular/compilation/parallel-worker.js.map +1 -0
  162. package/src/tools/angular/transformers/jit-bootstrap-transformer.js +2 -1
  163. package/src/tools/angular/transformers/jit-bootstrap-transformer.js.map +1 -0
  164. package/src/tools/angular/transformers/jit-resource-transformer.js +2 -1
  165. package/src/tools/angular/transformers/jit-resource-transformer.js.map +1 -0
  166. package/src/tools/angular/transformers/lazy-routes-transformer.js +1 -0
  167. package/src/tools/angular/transformers/lazy-routes-transformer.js.map +1 -0
  168. package/src/tools/angular/transformers/web-worker-transformer.js +1 -0
  169. package/src/tools/angular/transformers/web-worker-transformer.js.map +1 -0
  170. package/src/tools/angular/uri.js +1 -0
  171. package/src/tools/angular/uri.js.map +1 -0
  172. package/src/tools/babel/plugins/add-code-coverage.js +1 -0
  173. package/src/tools/babel/plugins/add-code-coverage.js.map +1 -0
  174. package/src/tools/babel/plugins/adjust-static-class-members.js +1 -0
  175. package/src/tools/babel/plugins/adjust-static-class-members.js.map +1 -0
  176. package/src/tools/babel/plugins/adjust-typescript-enums.js +1 -0
  177. package/src/tools/babel/plugins/adjust-typescript-enums.js.map +1 -0
  178. package/src/tools/babel/plugins/elide-angular-metadata.js +1 -0
  179. package/src/tools/babel/plugins/elide-angular-metadata.js.map +1 -0
  180. package/src/tools/babel/plugins/index.js +1 -0
  181. package/src/tools/babel/plugins/index.js.map +1 -0
  182. package/src/tools/babel/plugins/pure-toplevel-functions.d.ts +0 -1
  183. package/src/tools/babel/plugins/pure-toplevel-functions.js +22 -5
  184. package/src/tools/babel/plugins/pure-toplevel-functions.js.map +1 -0
  185. package/src/tools/esbuild/angular/compilation-state.js +1 -0
  186. package/src/tools/esbuild/angular/compilation-state.js.map +1 -0
  187. package/src/tools/esbuild/angular/compiler-plugin.js +39 -14
  188. package/src/tools/esbuild/angular/compiler-plugin.js.map +1 -0
  189. package/src/tools/esbuild/angular/component-stylesheets.js +1 -0
  190. package/src/tools/esbuild/angular/component-stylesheets.js.map +1 -0
  191. package/src/tools/esbuild/angular/diagnostics.js +1 -0
  192. package/src/tools/esbuild/angular/diagnostics.js.map +1 -0
  193. package/src/tools/esbuild/angular/file-reference-tracker.js +1 -0
  194. package/src/tools/esbuild/angular/file-reference-tracker.js.map +1 -0
  195. package/src/tools/esbuild/angular/jit-plugin-callbacks.js +1 -0
  196. package/src/tools/esbuild/angular/jit-plugin-callbacks.js.map +1 -0
  197. package/src/tools/esbuild/angular/rewrite-bazel-paths.js +1 -0
  198. package/src/tools/esbuild/angular/rewrite-bazel-paths.js.map +1 -0
  199. package/src/tools/esbuild/angular/source-file-cache.js +1 -0
  200. package/src/tools/esbuild/angular/source-file-cache.js.map +1 -0
  201. package/src/tools/esbuild/angular-localize-init-warning-plugin.js +1 -0
  202. package/src/tools/esbuild/angular-localize-init-warning-plugin.js.map +1 -0
  203. package/src/tools/esbuild/application-code-bundle.js +2 -1
  204. package/src/tools/esbuild/application-code-bundle.js.map +1 -0
  205. package/src/tools/esbuild/budget-stats.js +1 -0
  206. package/src/tools/esbuild/budget-stats.js.map +1 -0
  207. package/src/tools/esbuild/bundler-context.js +1 -0
  208. package/src/tools/esbuild/bundler-context.js.map +1 -0
  209. package/src/tools/esbuild/bundler-execution-result.js +1 -0
  210. package/src/tools/esbuild/bundler-execution-result.js.map +1 -0
  211. package/src/tools/esbuild/cache.js +1 -0
  212. package/src/tools/esbuild/cache.js.map +1 -0
  213. package/src/tools/esbuild/commonjs-checker.js +1 -0
  214. package/src/tools/esbuild/commonjs-checker.js.map +1 -0
  215. package/src/tools/esbuild/compiler-plugin-options.js +1 -0
  216. package/src/tools/esbuild/compiler-plugin-options.js.map +1 -0
  217. package/src/tools/esbuild/external-packages-plugin.js +1 -0
  218. package/src/tools/esbuild/external-packages-plugin.js.map +1 -0
  219. package/src/tools/esbuild/global-scripts.js +1 -0
  220. package/src/tools/esbuild/global-scripts.js.map +1 -0
  221. package/src/tools/esbuild/global-styles.js +1 -0
  222. package/src/tools/esbuild/global-styles.js.map +1 -0
  223. package/src/tools/esbuild/i18n-inliner-worker.js +35 -2
  224. package/src/tools/esbuild/i18n-inliner-worker.js.map +1 -0
  225. package/src/tools/esbuild/i18n-inliner.js +1 -0
  226. package/src/tools/esbuild/i18n-inliner.js.map +1 -0
  227. package/src/tools/esbuild/i18n-locale-plugin.js +34 -15
  228. package/src/tools/esbuild/i18n-locale-plugin.js.map +1 -0
  229. package/src/tools/esbuild/index-html-generator.js +1 -0
  230. package/src/tools/esbuild/index-html-generator.js.map +1 -0
  231. package/src/tools/esbuild/javascript-transformer-worker.js +5 -10
  232. package/src/tools/esbuild/javascript-transformer-worker.js.map +1 -0
  233. package/src/tools/esbuild/javascript-transformer.js +1 -0
  234. package/src/tools/esbuild/javascript-transformer.js.map +1 -0
  235. package/src/tools/esbuild/license-extractor.js +1 -0
  236. package/src/tools/esbuild/license-extractor.js.map +1 -0
  237. package/src/tools/esbuild/lmdb-cache-store.js +1 -0
  238. package/src/tools/esbuild/lmdb-cache-store.js.map +1 -0
  239. package/src/tools/esbuild/load-result-cache.js +1 -0
  240. package/src/tools/esbuild/load-result-cache.js.map +1 -0
  241. package/src/tools/esbuild/loader-import-attribute-plugin.js +1 -0
  242. package/src/tools/esbuild/loader-import-attribute-plugin.js.map +1 -0
  243. package/src/tools/esbuild/profiling.js +1 -0
  244. package/src/tools/esbuild/profiling.js.map +1 -0
  245. package/src/tools/esbuild/rxjs-esm-resolution-plugin.js +1 -0
  246. package/src/tools/esbuild/rxjs-esm-resolution-plugin.js.map +1 -0
  247. package/src/tools/esbuild/server-bundle-metadata-plugin.js +1 -0
  248. package/src/tools/esbuild/server-bundle-metadata-plugin.js.map +1 -0
  249. package/src/tools/esbuild/sourcemap-ignorelist-plugin.js +1 -0
  250. package/src/tools/esbuild/sourcemap-ignorelist-plugin.js.map +1 -0
  251. package/src/tools/esbuild/stylesheets/bundle-options.d.ts +4 -1
  252. package/src/tools/esbuild/stylesheets/bundle-options.js +1 -0
  253. package/src/tools/esbuild/stylesheets/bundle-options.js.map +1 -0
  254. package/src/tools/esbuild/stylesheets/css-inline-fonts-plugin.js +1 -0
  255. package/src/tools/esbuild/stylesheets/css-inline-fonts-plugin.js.map +1 -0
  256. package/src/tools/esbuild/stylesheets/css-language.js +1 -0
  257. package/src/tools/esbuild/stylesheets/css-language.js.map +1 -0
  258. package/src/tools/esbuild/stylesheets/css-resource-plugin.js +1 -0
  259. package/src/tools/esbuild/stylesheets/css-resource-plugin.js.map +1 -0
  260. package/src/tools/esbuild/stylesheets/less-language.js +3 -26
  261. package/src/tools/esbuild/stylesheets/less-language.js.map +1 -0
  262. package/src/tools/esbuild/stylesheets/sass-language.js +1 -0
  263. package/src/tools/esbuild/stylesheets/sass-language.js.map +1 -0
  264. package/src/tools/esbuild/stylesheets/stylesheet-plugin-factory.d.ts +4 -1
  265. package/src/tools/esbuild/stylesheets/stylesheet-plugin-factory.js +8 -3
  266. package/src/tools/esbuild/stylesheets/stylesheet-plugin-factory.js.map +1 -0
  267. package/src/tools/esbuild/utils.js +1 -0
  268. package/src/tools/esbuild/utils.js.map +1 -0
  269. package/src/tools/esbuild/virtual-module-plugin.js +1 -0
  270. package/src/tools/esbuild/virtual-module-plugin.js.map +1 -0
  271. package/src/tools/esbuild/wasm-plugin.js +1 -0
  272. package/src/tools/esbuild/wasm-plugin.js.map +1 -0
  273. package/src/tools/esbuild/watcher.js +1 -0
  274. package/src/tools/esbuild/watcher.js.map +1 -0
  275. package/src/tools/sass/lexer.js +1 -0
  276. package/src/tools/sass/lexer.js.map +1 -0
  277. package/src/tools/sass/rebasing-importer.js +1 -0
  278. package/src/tools/sass/rebasing-importer.js.map +1 -0
  279. package/src/tools/sass/sass-service.js +1 -0
  280. package/src/tools/sass/sass-service.js.map +1 -0
  281. package/src/tools/sass/worker.js +1 -0
  282. package/src/tools/sass/worker.js.map +1 -0
  283. package/src/tools/vite/middlewares/assets-middleware.d.ts +2 -0
  284. package/src/tools/vite/middlewares/assets-middleware.js +32 -0
  285. package/src/tools/vite/middlewares/assets-middleware.js.map +1 -0
  286. package/src/tools/vite/middlewares/chrome-devtools-middleware.js +1 -0
  287. package/src/tools/vite/middlewares/chrome-devtools-middleware.js.map +1 -0
  288. package/src/tools/vite/middlewares/component-middleware.js +1 -0
  289. package/src/tools/vite/middlewares/component-middleware.js.map +1 -0
  290. package/src/tools/vite/middlewares/headers-middleware.js +1 -0
  291. package/src/tools/vite/middlewares/headers-middleware.js.map +1 -0
  292. package/src/tools/vite/middlewares/html-fallback-middleware.js +1 -0
  293. package/src/tools/vite/middlewares/html-fallback-middleware.js.map +1 -0
  294. package/src/tools/vite/middlewares/index-html-middleware.js +1 -0
  295. package/src/tools/vite/middlewares/index-html-middleware.js.map +1 -0
  296. package/src/tools/vite/middlewares/index.js +1 -0
  297. package/src/tools/vite/middlewares/index.js.map +1 -0
  298. package/src/tools/vite/middlewares/ssr-middleware.js +42 -5
  299. package/src/tools/vite/middlewares/ssr-middleware.js.map +1 -0
  300. package/src/tools/vite/plugins/angular-memory-plugin.js +35 -2
  301. package/src/tools/vite/plugins/angular-memory-plugin.js.map +1 -0
  302. package/src/tools/vite/plugins/id-prefix-plugin.js +1 -0
  303. package/src/tools/vite/plugins/id-prefix-plugin.js.map +1 -0
  304. package/src/tools/vite/plugins/index.d.ts +0 -1
  305. package/src/tools/vite/plugins/index.js +2 -3
  306. package/src/tools/vite/plugins/index.js.map +1 -0
  307. package/src/tools/vite/plugins/setup-middlewares-plugin.js +35 -2
  308. package/src/tools/vite/plugins/setup-middlewares-plugin.js.map +1 -0
  309. package/src/tools/vite/plugins/ssr-transform-plugin.js +35 -2
  310. package/src/tools/vite/plugins/ssr-transform-plugin.js.map +1 -0
  311. package/src/tools/vite/utils.js +1 -0
  312. package/src/tools/vite/utils.js.map +1 -0
  313. package/src/utils/bundle-calculator.js +1 -0
  314. package/src/utils/bundle-calculator.js.map +1 -0
  315. package/src/utils/check-port.js +1 -0
  316. package/src/utils/check-port.js.map +1 -0
  317. package/src/utils/color.js +1 -0
  318. package/src/utils/color.js.map +1 -0
  319. package/src/utils/delete-output-dir.js +1 -0
  320. package/src/utils/delete-output-dir.js.map +1 -0
  321. package/src/utils/environment-options.d.ts +1 -0
  322. package/src/utils/environment-options.js +7 -1
  323. package/src/utils/environment-options.js.map +1 -0
  324. package/src/utils/error.js +1 -0
  325. package/src/utils/error.js.map +1 -0
  326. package/src/utils/format-bytes.js +1 -0
  327. package/src/utils/format-bytes.js.map +1 -0
  328. package/src/utils/i18n-options.js +1 -0
  329. package/src/utils/i18n-options.js.map +1 -0
  330. package/src/utils/index-file/add-event-dispatch-contract.js +1 -0
  331. package/src/utils/index-file/add-event-dispatch-contract.js.map +1 -0
  332. package/src/utils/index-file/augment-index-html.js +35 -2
  333. package/src/utils/index-file/augment-index-html.js.map +1 -0
  334. package/src/utils/index-file/auto-csp.js +1 -0
  335. package/src/utils/index-file/auto-csp.js.map +1 -0
  336. package/src/utils/index-file/html-rewriting-stream.js +35 -2
  337. package/src/utils/index-file/html-rewriting-stream.js.map +1 -0
  338. package/src/utils/index-file/index-html-generator.js +1 -0
  339. package/src/utils/index-file/index-html-generator.js.map +1 -0
  340. package/src/utils/index-file/inline-critical-css.js +1 -0
  341. package/src/utils/index-file/inline-critical-css.js.map +1 -0
  342. package/src/utils/index-file/inline-fonts.js +1 -0
  343. package/src/utils/index-file/inline-fonts.js.map +1 -0
  344. package/src/utils/index-file/ngcm-attribute.js +1 -0
  345. package/src/utils/index-file/ngcm-attribute.js.map +1 -0
  346. package/src/utils/index-file/nonce.js +1 -0
  347. package/src/utils/index-file/nonce.js.map +1 -0
  348. package/src/utils/index-file/valid-self-closing-tags.js +1 -0
  349. package/src/utils/index-file/valid-self-closing-tags.js.map +1 -0
  350. package/src/utils/index.js +1 -0
  351. package/src/utils/index.js.map +1 -0
  352. package/src/utils/load-esm.js +1 -0
  353. package/src/utils/load-esm.js.map +1 -0
  354. package/src/utils/load-proxy-config.js +8 -21
  355. package/src/utils/load-proxy-config.js.map +1 -0
  356. package/src/utils/load-translations.js +2 -2
  357. package/src/utils/load-translations.js.map +1 -0
  358. package/src/utils/normalize-asset-patterns.js +1 -0
  359. package/src/utils/normalize-asset-patterns.js.map +1 -0
  360. package/src/utils/normalize-cache.js +2 -1
  361. package/src/utils/normalize-cache.js.map +1 -0
  362. package/src/utils/normalize-optimization.js +1 -0
  363. package/src/utils/normalize-optimization.js.map +1 -0
  364. package/src/utils/normalize-source-maps.js +1 -0
  365. package/src/utils/normalize-source-maps.js.map +1 -0
  366. package/src/utils/path.js +1 -0
  367. package/src/utils/path.js.map +1 -0
  368. package/src/utils/postcss-configuration.d.ts +4 -1
  369. package/src/utils/postcss-configuration.js +3 -2
  370. package/src/utils/postcss-configuration.js.map +1 -0
  371. package/src/utils/project-metadata.js +1 -0
  372. package/src/utils/project-metadata.js.map +1 -0
  373. package/src/utils/purge-cache.js +1 -0
  374. package/src/utils/purge-cache.js.map +1 -0
  375. package/src/utils/resolve-assets.js +1 -0
  376. package/src/utils/resolve-assets.js.map +1 -0
  377. package/src/utils/server-rendering/esm-in-memory-loader/loader-hooks.js +3 -13
  378. package/src/utils/server-rendering/esm-in-memory-loader/loader-hooks.js.map +1 -0
  379. package/src/utils/server-rendering/esm-in-memory-loader/register-hooks.js +1 -0
  380. package/src/utils/server-rendering/esm-in-memory-loader/register-hooks.js.map +1 -0
  381. package/src/utils/server-rendering/esm-in-memory-loader/utils.js +1 -0
  382. package/src/utils/server-rendering/esm-in-memory-loader/utils.js.map +1 -0
  383. package/src/utils/server-rendering/fetch-patch.js +1 -0
  384. package/src/utils/server-rendering/fetch-patch.js.map +1 -0
  385. package/src/utils/server-rendering/launch-server.js +37 -2
  386. package/src/utils/server-rendering/launch-server.js.map +1 -0
  387. package/src/utils/server-rendering/load-esm-from-memory.d.ts +2 -1
  388. package/src/utils/server-rendering/load-esm-from-memory.js +1 -0
  389. package/src/utils/server-rendering/load-esm-from-memory.js.map +1 -0
  390. package/src/utils/server-rendering/manifest.js +1 -0
  391. package/src/utils/server-rendering/manifest.js.map +1 -0
  392. package/src/utils/server-rendering/models.js +1 -0
  393. package/src/utils/server-rendering/models.js.map +1 -0
  394. package/src/utils/server-rendering/prerender.js +3 -25
  395. package/src/utils/server-rendering/prerender.js.map +1 -0
  396. package/src/utils/server-rendering/render-worker.js +43 -1
  397. package/src/utils/server-rendering/render-worker.js.map +1 -0
  398. package/src/utils/server-rendering/routes-extractor-worker.js +37 -0
  399. package/src/utils/server-rendering/routes-extractor-worker.js.map +1 -0
  400. package/src/utils/server-rendering/utils.d.ts +11 -1
  401. package/src/utils/server-rendering/utils.js +26 -0
  402. package/src/utils/server-rendering/utils.js.map +1 -0
  403. package/src/utils/service-worker.d.ts +1 -1
  404. package/src/utils/service-worker.js +4 -6
  405. package/src/utils/service-worker.js.map +1 -0
  406. package/src/utils/stats-table.js +1 -0
  407. package/src/utils/stats-table.js.map +1 -0
  408. package/src/utils/supported-browsers.js +8 -3
  409. package/src/utils/supported-browsers.js.map +1 -0
  410. package/src/utils/test-files.d.ts +17 -0
  411. package/src/utils/test-files.js +83 -0
  412. package/src/utils/test-files.js.map +1 -0
  413. package/src/utils/tty.js +1 -0
  414. package/src/utils/tty.js.map +1 -0
  415. package/src/utils/url.js +1 -0
  416. package/src/utils/url.js.map +1 -0
  417. package/src/utils/version.js +1 -0
  418. package/src/utils/version.js.map +1 -0
  419. package/src/utils/worker-pool.js +1 -0
  420. package/src/utils/worker-pool.js.map +1 -0
  421. package/.browserslistrc +0 -7
  422. package/src/tools/vite/plugins/i18n-locale-plugin.d.ts +0 -14
  423. package/src/tools/vite/plugins/i18n-locale-plugin.js +0 -54
  424. package/src/typings.d.ts +0 -19
@@ -98,11 +98,16 @@ Object.defineProperty(exports, "__esModule", { value: true });
98
98
  exports.execute = execute;
99
99
  const architect_1 = require("@angular-devkit/architect");
100
100
  const node_assert_1 = __importDefault(require("node:assert"));
101
+ const promises_1 = require("node:fs/promises");
102
+ const node_path_1 = __importDefault(require("node:path"));
101
103
  const virtual_module_plugin_1 = require("../../tools/esbuild/virtual-module-plugin");
102
104
  const error_1 = require("../../utils/error");
105
+ const test_files_1 = require("../../utils/test-files");
103
106
  const application_1 = require("../application");
104
107
  const results_1 = require("../application/results");
105
108
  const options_1 = require("./options");
109
+ const dependency_checker_1 = require("./runners/dependency-checker");
110
+ const test_discovery_1 = require("./test-discovery");
106
111
  async function loadTestRunner(runnerName) {
107
112
  // Harden against directory traversal
108
113
  if (!/^[a-zA-Z0-9-]+$/.test(runnerName)) {
@@ -148,7 +153,8 @@ function prepareBuildExtensions(virtualFiles, projectSourceRoot, extensions) {
148
153
  }
149
154
  return extensions;
150
155
  }
151
- async function* runBuildAndTest(executor, applicationBuildOptions, context, extensions) {
156
+ async function* runBuildAndTest(executor, applicationBuildOptions, context, dumpDirectory, extensions) {
157
+ let consecutiveErrorCount = 0;
152
158
  for await (const buildResult of (0, application_1.buildApplicationInternal)(applicationBuildOptions, context, extensions)) {
153
159
  if (buildResult.kind === results_1.ResultKind.Failure) {
154
160
  yield { success: false };
@@ -159,65 +165,173 @@ async function* runBuildAndTest(executor, applicationBuildOptions, context, exte
159
165
  node_assert_1.default.fail('A full and/or incremental build result is required from the application builder.');
160
166
  }
161
167
  (0, node_assert_1.default)(buildResult.files, 'Builder did not provide result files.');
168
+ if (dumpDirectory) {
169
+ if (buildResult.kind === results_1.ResultKind.Full) {
170
+ // Full build, so clean the directory
171
+ await (0, promises_1.rm)(dumpDirectory, { recursive: true, force: true });
172
+ }
173
+ else {
174
+ // Incremental build, so delete removed files
175
+ for (const file of buildResult.removed) {
176
+ await (0, promises_1.rm)(node_path_1.default.join(dumpDirectory, file.path), { force: true });
177
+ }
178
+ }
179
+ await (0, test_files_1.writeTestFiles)(buildResult.files, dumpDirectory);
180
+ context.logger.info(`Build output files successfully dumped to '${dumpDirectory}'.`);
181
+ }
162
182
  // Pass the build artifacts to the executor
163
- yield* executor.execute(buildResult);
183
+ try {
184
+ yield* executor.execute(buildResult);
185
+ // Successful execution resets the failure counter
186
+ consecutiveErrorCount = 0;
187
+ }
188
+ catch (e) {
189
+ (0, error_1.assertIsError)(e);
190
+ context.logger.error(`An exception occurred during test execution:\n${e.stack ?? e.message}`);
191
+ yield { success: false };
192
+ consecutiveErrorCount++;
193
+ }
194
+ if (consecutiveErrorCount >= 3) {
195
+ context.logger.error('Test runner process has failed multiple times in a row. Please fix the configuration and restart the process.');
196
+ return;
197
+ }
164
198
  }
165
199
  }
166
200
  /**
167
201
  * @experimental Direct usage of this function is considered experimental.
168
202
  */
169
203
  async function* execute(options, context, extensions) {
170
- const env_1 = { stack: [], error: void 0, hasError: false };
204
+ // Determine project name from builder context target
205
+ const projectName = context.target?.project;
206
+ if (!projectName) {
207
+ context.logger.error(`The builder requires a target to be specified.`);
208
+ return;
209
+ }
210
+ // Initialize the test runner and normalize options
211
+ let runner;
212
+ let normalizedOptions;
171
213
  try {
172
- // Determine project name from builder context target
173
- const projectName = context.target?.project;
174
- if (!projectName) {
175
- context.logger.error(`The builder requires a target to be specified.`);
176
- return;
214
+ normalizedOptions = await (0, options_1.normalizeOptions)(context, projectName, options);
215
+ runner = await loadTestRunner(normalizedOptions.runnerName);
216
+ await runner.validateDependencies?.(normalizedOptions);
217
+ }
218
+ catch (e) {
219
+ (0, error_1.assertIsError)(e);
220
+ if (e instanceof dependency_checker_1.MissingDependenciesError) {
221
+ context.logger.error(e.message);
177
222
  }
178
- context.logger.warn(`NOTE: The "unit-test" builder is currently EXPERIMENTAL and not ready for production use.`);
179
- const normalizedOptions = await (0, options_1.normalizeOptions)(context, projectName, options);
180
- const runner = await loadTestRunner(normalizedOptions.runnerName);
181
- const executor = __addDisposableResource(env_1, await runner.createExecutor(context, normalizedOptions), true);
182
- if (runner.isStandalone) {
183
- yield* executor.execute({
184
- kind: results_1.ResultKind.Full,
185
- files: {},
186
- });
187
- return;
223
+ else {
224
+ context.logger.error(`An exception occurred during initialization of the test runner:\n${e.stack ?? e.message}`);
188
225
  }
189
- // Get base build options from the buildTarget
190
- let buildTargetOptions;
226
+ yield { success: false };
227
+ return;
228
+ }
229
+ if (normalizedOptions.listTests) {
230
+ const testFiles = await (0, test_discovery_1.findTests)(normalizedOptions.include, normalizedOptions.exclude ?? [], normalizedOptions.workspaceRoot, normalizedOptions.projectSourceRoot);
231
+ context.logger.info('Discovered test files:');
232
+ for (const file of testFiles) {
233
+ context.logger.info(` ${node_path_1.default.relative(normalizedOptions.workspaceRoot, file)}`);
234
+ }
235
+ yield { success: true };
236
+ return;
237
+ }
238
+ if (runner.isStandalone) {
191
239
  try {
192
- buildTargetOptions = (await context.validateOptions(await context.getTargetOptions(normalizedOptions.buildTarget), await context.getBuilderNameForTarget(normalizedOptions.buildTarget)));
240
+ const env_1 = { stack: [], error: void 0, hasError: false };
241
+ try {
242
+ const executor = __addDisposableResource(env_1, await runner.createExecutor(context, normalizedOptions, undefined), true);
243
+ yield* executor.execute({
244
+ kind: results_1.ResultKind.Full,
245
+ files: {},
246
+ });
247
+ }
248
+ catch (e_1) {
249
+ env_1.error = e_1;
250
+ env_1.hasError = true;
251
+ }
252
+ finally {
253
+ const result_1 = __disposeResources(env_1);
254
+ if (result_1)
255
+ await result_1;
256
+ }
193
257
  }
194
258
  catch (e) {
195
259
  (0, error_1.assertIsError)(e);
196
- context.logger.error(`Could not load build target options for "${(0, architect_1.targetStringFromTarget)(normalizedOptions.buildTarget)}".\n` +
197
- `Please check your 'angular.json' configuration.\n` +
198
- `Error: ${e.message}`);
199
- return;
260
+ context.logger.error(`An exception occurred during standalone test execution:\n${e.stack ?? e.message}`);
261
+ yield { success: false };
200
262
  }
201
- // Get runner-specific build options from the hook
202
- const { buildOptions: runnerBuildOptions, virtualFiles } = await runner.getBuildOptions(normalizedOptions, buildTargetOptions);
203
- const finalExtensions = prepareBuildExtensions(virtualFiles, normalizedOptions.projectSourceRoot, extensions);
204
- // Prepare and run the application build
205
- const applicationBuildOptions = {
206
- ...buildTargetOptions,
207
- ...runnerBuildOptions,
208
- watch: normalizedOptions.watch,
209
- tsConfig: normalizedOptions.tsConfig,
210
- progress: normalizedOptions.buildProgress ?? buildTargetOptions.progress,
211
- };
212
- yield* runBuildAndTest(executor, applicationBuildOptions, context, finalExtensions);
263
+ return;
264
+ }
265
+ // Get base build options from the buildTarget
266
+ let buildTargetOptions;
267
+ try {
268
+ const builderName = await context.getBuilderNameForTarget(normalizedOptions.buildTarget);
269
+ if (builderName !== '@angular/build:application' &&
270
+ // TODO: Add comprehensive support for ng-packagr.
271
+ builderName !== '@angular/build:ng-packagr') {
272
+ context.logger.warn(`The 'buildTarget' is configured to use '${builderName}', which is not supported. ` +
273
+ `The 'unit-test' builder is designed to work with '@angular/build:application'. ` +
274
+ 'Unexpected behavior or build failures may occur.');
275
+ }
276
+ buildTargetOptions = (await context.validateOptions(await context.getTargetOptions(normalizedOptions.buildTarget), builderName));
277
+ }
278
+ catch (e) {
279
+ (0, error_1.assertIsError)(e);
280
+ context.logger.error(`Could not load build target options for "${(0, architect_1.targetStringFromTarget)(normalizedOptions.buildTarget)}".\n` +
281
+ `Please check your 'angular.json' configuration.\n` +
282
+ `Error: ${e.message}`);
283
+ yield { success: false };
284
+ return;
213
285
  }
214
- catch (e_1) {
215
- env_1.error = e_1;
216
- env_1.hasError = true;
286
+ // Get runner-specific build options
287
+ let runnerBuildOptions;
288
+ let virtualFiles;
289
+ let testEntryPointMappings;
290
+ try {
291
+ ({
292
+ buildOptions: runnerBuildOptions,
293
+ virtualFiles,
294
+ testEntryPointMappings,
295
+ } = await runner.getBuildOptions(normalizedOptions, buildTargetOptions));
217
296
  }
218
- finally {
219
- const result_1 = __disposeResources(env_1);
220
- if (result_1)
221
- await result_1;
297
+ catch (e) {
298
+ (0, error_1.assertIsError)(e);
299
+ context.logger.error(`An exception occurred while getting runner-specific build options:\n${e.stack ?? e.message}`);
300
+ yield { success: false };
301
+ return;
302
+ }
303
+ try {
304
+ const env_2 = { stack: [], error: void 0, hasError: false };
305
+ try {
306
+ const executor = __addDisposableResource(env_2, await runner.createExecutor(context, normalizedOptions, testEntryPointMappings), true);
307
+ const finalExtensions = prepareBuildExtensions(virtualFiles, normalizedOptions.projectSourceRoot, extensions);
308
+ // Prepare and run the application build
309
+ const applicationBuildOptions = {
310
+ ...buildTargetOptions,
311
+ ...runnerBuildOptions,
312
+ watch: normalizedOptions.watch,
313
+ progress: normalizedOptions.buildProgress ?? buildTargetOptions.progress,
314
+ ...(normalizedOptions.tsConfig ? { tsConfig: normalizedOptions.tsConfig } : {}),
315
+ };
316
+ const dumpDirectory = normalizedOptions.dumpVirtualFiles
317
+ ? node_path_1.default.join(normalizedOptions.cacheOptions.path, 'unit-test', 'output-files')
318
+ : undefined;
319
+ yield* runBuildAndTest(executor, applicationBuildOptions, context, dumpDirectory, finalExtensions);
320
+ }
321
+ catch (e_2) {
322
+ env_2.error = e_2;
323
+ env_2.hasError = true;
324
+ }
325
+ finally {
326
+ const result_2 = __disposeResources(env_2);
327
+ if (result_2)
328
+ await result_2;
329
+ }
330
+ }
331
+ catch (e) {
332
+ (0, error_1.assertIsError)(e);
333
+ context.logger.error(`An exception occurred while creating the test executor:\n${e.stack ?? e.message}`);
334
+ yield { success: false };
222
335
  }
223
336
  }
337
+ //# sourceMappingURL=builder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"builder.js","sourceRoot":"","sources":["builder.ts"],"names":[],"mappings":"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"}
@@ -13,3 +13,4 @@ const builder_1 = require("./builder");
13
13
  Object.defineProperty(exports, "execute", { enumerable: true, get: function () { return builder_1.execute; } });
14
14
  const builder = (0, architect_1.createBuilder)(builder_1.execute);
15
15
  exports.default = builder;
16
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;;AAEH,yDAAwE;AACxE,uCAAiE;AAE3B,wFAFA,iBAAO,OAEA;AAE7C,MAAM,OAAO,GAAoC,IAAA,yBAAa,EAAC,iBAAO,CAAC,CAAC;AAExE,kBAAe,OAAO,CAAC"}
@@ -15,19 +15,38 @@ export declare function normalizeOptions(context: BuilderContext, projectName: s
15
15
  cacheOptions: import("../../utils/normalize-cache").NormalizedCachedOptions;
16
16
  buildTarget: import("@angular-devkit/architect").Target;
17
17
  include: string[];
18
- exclude: string[];
19
- runnerName: import("./schema").Runner;
20
- codeCoverage: {
18
+ exclude: string[] | undefined;
19
+ filter: string | undefined;
20
+ runnerName: string;
21
+ coverage: {
22
+ enabled: boolean | undefined;
21
23
  exclude: string[] | undefined;
24
+ include: string[] | undefined;
22
25
  reporters: [string, Record<string, unknown>][] | undefined;
23
- } | undefined;
24
- tsConfig: string;
26
+ thresholds: import("./schema").CoverageThresholds | undefined;
27
+ watermarks: {
28
+ statements?: [number, number];
29
+ branches?: [number, number];
30
+ functions?: [number, number];
31
+ lines?: [number, number];
32
+ };
33
+ };
34
+ tsConfig: string | undefined;
25
35
  buildProgress: boolean | undefined;
26
- reporters: string[] | undefined;
36
+ reporters: [string, Record<string, unknown>][] | undefined;
37
+ outputFile: string | undefined;
27
38
  browsers: string[] | undefined;
39
+ browserViewport: {
40
+ width: number;
41
+ height: number;
42
+ } | undefined;
28
43
  watch: boolean;
29
44
  debug: boolean;
45
+ ui: boolean;
30
46
  providersFile: string | undefined;
31
47
  setupFiles: string[];
48
+ dumpVirtualFiles: boolean | undefined;
49
+ listTests: boolean | undefined;
50
+ runnerConfig: string | boolean | undefined;
32
51
  }>;
33
52
  export declare function injectTestingPolyfills(polyfills?: string[]): string[];
@@ -13,10 +13,25 @@ Object.defineProperty(exports, "__esModule", { value: true });
13
13
  exports.normalizeOptions = normalizeOptions;
14
14
  exports.injectTestingPolyfills = injectTestingPolyfills;
15
15
  const architect_1 = require("@angular-devkit/architect");
16
+ const node_fs_1 = require("node:fs");
16
17
  const node_path_1 = __importDefault(require("node:path"));
17
18
  const normalize_cache_1 = require("../../utils/normalize-cache");
18
19
  const project_metadata_1 = require("../../utils/project-metadata");
19
20
  const tty_1 = require("../../utils/tty");
21
+ async function exists(path) {
22
+ try {
23
+ await node_fs_1.promises.access(path, node_fs_1.constants.F_OK);
24
+ return true;
25
+ }
26
+ catch {
27
+ return false;
28
+ }
29
+ }
30
+ function normalizeReporterOption(reporters) {
31
+ return reporters?.map((entry) => typeof entry === 'string'
32
+ ? [entry, {}]
33
+ : entry);
34
+ }
20
35
  async function normalizeOptions(context, projectName, options) {
21
36
  // Setup base paths based on workspace root and project information
22
37
  const workspaceRoot = context.workspaceRoot;
@@ -28,7 +43,30 @@ async function normalizeOptions(context, projectName, options) {
28
43
  // Target specifier defaults to the current project's build target using a development configuration
29
44
  const buildTargetSpecifier = options.buildTarget ?? `::development`;
30
45
  const buildTarget = (0, architect_1.targetFromTargetString)(buildTargetSpecifier, projectName, 'build');
31
- const { tsConfig, runner, reporters, browsers, progress } = options;
46
+ const { runner, browsers, progress, filter, browserViewport, ui, runnerConfig } = options;
47
+ if (ui && runner !== 'vitest') {
48
+ throw new Error('The "ui" option is only available for the "vitest" runner.');
49
+ }
50
+ const [width, height] = browserViewport?.split('x').map(Number) ?? [];
51
+ let tsConfig = options.tsConfig;
52
+ if (tsConfig) {
53
+ const fullTsConfigPath = node_path_1.default.join(workspaceRoot, tsConfig);
54
+ if (!(await exists(fullTsConfigPath))) {
55
+ throw new Error(`The specified tsConfig file '${tsConfig}' does not exist.`);
56
+ }
57
+ }
58
+ else {
59
+ const tsconfigSpecPath = node_path_1.default.join(projectRoot, 'tsconfig.spec.json');
60
+ if (await exists(tsconfigSpecPath)) {
61
+ // The application builder expects a path relative to the workspace root.
62
+ tsConfig = node_path_1.default.relative(workspaceRoot, tsconfigSpecPath);
63
+ }
64
+ }
65
+ let watch = options.watch ?? (0, tty_1.isTTY)();
66
+ if (options.ui && options.watch === false) {
67
+ context.logger.warn(`The '--ui' option requires watch mode. The '--no-watch' flag will be ignored.`);
68
+ watch = true;
69
+ }
32
70
  return {
33
71
  // Project/workspace information
34
72
  workspaceRoot,
@@ -38,28 +76,38 @@ async function normalizeOptions(context, projectName, options) {
38
76
  // Target/configuration specified options
39
77
  buildTarget,
40
78
  include: options.include ?? ['**/*.spec.ts'],
41
- exclude: options.exclude ?? [],
42
- runnerName: runner,
43
- codeCoverage: options.codeCoverage
44
- ? {
45
- exclude: options.codeCoverageExclude,
46
- reporters: options.codeCoverageReporters?.map((entry) => typeof entry === 'string'
47
- ? [entry, {}]
48
- : entry),
49
- }
50
- : undefined,
79
+ exclude: options.exclude,
80
+ filter,
81
+ runnerName: runner ?? 'vitest',
82
+ coverage: {
83
+ enabled: options.coverage,
84
+ exclude: options.coverageExclude,
85
+ include: options.coverageInclude,
86
+ reporters: normalizeReporterOption(options.coverageReporters),
87
+ thresholds: options.coverageThresholds,
88
+ // The schema generation tool doesn't support tuple types for items, but the schema validation
89
+ // does ensure that the array has exactly two numbers.
90
+ watermarks: options.coverageWatermarks,
91
+ },
51
92
  tsConfig,
52
93
  buildProgress: progress,
53
- reporters,
94
+ reporters: normalizeReporterOption(options.reporters),
95
+ outputFile: options.outputFile,
54
96
  browsers,
55
- watch: options.watch ?? (0, tty_1.isTTY)(),
97
+ browserViewport: width && height ? { width, height } : undefined,
98
+ watch,
56
99
  debug: options.debug ?? false,
100
+ ui: options.ui ?? false,
57
101
  providersFile: options.providersFile && node_path_1.default.join(workspaceRoot, options.providersFile),
58
102
  setupFiles: options.setupFiles
59
103
  ? options.setupFiles.map((setupFile) => node_path_1.default.join(workspaceRoot, setupFile))
60
104
  : [],
105
+ dumpVirtualFiles: options.dumpVirtualFiles,
106
+ listTests: options.listTests,
107
+ runnerConfig: typeof runnerConfig === 'string' ? node_path_1.default.join(workspaceRoot, runnerConfig) : runnerConfig,
61
108
  };
62
109
  }
63
110
  function injectTestingPolyfills(polyfills = []) {
64
111
  return polyfills.includes('zone.js') ? [...polyfills, 'zone.js/testing'] : polyfills;
65
112
  }
113
+ //# sourceMappingURL=options.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"options.js","sourceRoot":"","sources":["options.ts"],"names":[],"mappings":"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"}
@@ -9,9 +9,25 @@ import type { BuilderContext, BuilderOutput } from '@angular-devkit/architect';
9
9
  import type { ApplicationBuilderInternalOptions } from '../../application/options';
10
10
  import type { FullResult, IncrementalResult } from '../../application/results';
11
11
  import type { NormalizedUnitTestBuilderOptions } from '../options';
12
+ /**
13
+ * Represents the options for a test runner.
14
+ */
12
15
  export interface RunnerOptions {
16
+ /**
17
+ * Partial options for the application builder.
18
+ * These will be merged with the options from the build target.
19
+ */
13
20
  buildOptions: Partial<ApplicationBuilderInternalOptions>;
21
+ /**
22
+ * A record of virtual files to be added to the build.
23
+ * The key is the file path and the value is the file content.
24
+ */
14
25
  virtualFiles?: Record<string, string>;
26
+ /**
27
+ * A map of test entry points to their corresponding test files.
28
+ * This is used to avoid re-discovering the test files in the executor.
29
+ */
30
+ testEntryPointMappings?: Map<string, string>;
15
31
  }
16
32
  /**
17
33
  * Represents a stateful test execution session.
@@ -34,6 +50,7 @@ export interface TestExecutor {
34
50
  export interface TestRunner {
35
51
  readonly name: string;
36
52
  readonly isStandalone?: boolean;
53
+ validateDependencies?(options: NormalizedUnitTestBuilderOptions): void | Promise<void>;
37
54
  getBuildOptions(options: NormalizedUnitTestBuilderOptions, baseBuildOptions: Partial<ApplicationBuilderInternalOptions>): RunnerOptions | Promise<RunnerOptions>;
38
55
  /**
39
56
  * Creates a stateful executor for a test session.
@@ -41,7 +58,8 @@ export interface TestRunner {
41
58
  *
42
59
  * @param context The Architect builder context.
43
60
  * @param options The normalized unit test options.
61
+ * @param testEntryPointMappings A map of test entry points to their corresponding test files.
44
62
  * @returns A TestExecutor instance that will handle the test runs.
45
63
  */
46
- createExecutor(context: BuilderContext, options: NormalizedUnitTestBuilderOptions): Promise<TestExecutor>;
64
+ createExecutor(context: BuilderContext, options: NormalizedUnitTestBuilderOptions, testEntryPointMappings: Map<string, string> | undefined): Promise<TestExecutor>;
47
65
  }
@@ -7,3 +7,4 @@
7
7
  * found in the LICENSE file at https://angular.dev/license
8
8
  */
9
9
  Object.defineProperty(exports, "__esModule", { value: true });
10
+ //# sourceMappingURL=api.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api.js","sourceRoot":"","sources":["api.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG"}
@@ -0,0 +1,43 @@
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
+ /**
9
+ * A custom error class to represent missing dependency errors.
10
+ * This is used to avoid printing a stack trace for this expected error.
11
+ */
12
+ export declare class MissingDependenciesError extends Error {
13
+ constructor(message: string);
14
+ }
15
+ export declare class DependencyChecker {
16
+ private readonly resolver;
17
+ private readonly missingDependencies;
18
+ constructor(projectSourceRoot: string);
19
+ /**
20
+ * Checks if a package is installed.
21
+ * @param packageName The name of the package to check.
22
+ * @returns True if the package is found, false otherwise.
23
+ */
24
+ private isInstalled;
25
+ /**
26
+ * Verifies that a package is installed and adds it to a list of missing
27
+ * dependencies if it is not.
28
+ * @param packageName The name of the package to check.
29
+ */
30
+ check(packageName: string): void;
31
+ /**
32
+ * Verifies that at least one of a list of packages is installed. If none are
33
+ * installed, a custom error message is added to the list of errors.
34
+ * @param packageNames An array of package names to check.
35
+ * @param customErrorMessage The error message to use if none of the packages are found.
36
+ */
37
+ checkAny(packageNames: string[], customErrorMessage: string): void;
38
+ /**
39
+ * Throws a `MissingDependenciesError` if any dependencies were found to be missing.
40
+ * The error message is a formatted list of all missing packages.
41
+ */
42
+ report(): void;
43
+ }
@@ -0,0 +1,83 @@
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
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.DependencyChecker = exports.MissingDependenciesError = void 0;
11
+ const node_module_1 = require("node:module");
12
+ /**
13
+ * A custom error class to represent missing dependency errors.
14
+ * This is used to avoid printing a stack trace for this expected error.
15
+ */
16
+ class MissingDependenciesError extends Error {
17
+ constructor(message) {
18
+ super(message);
19
+ this.name = 'MissingDependenciesError';
20
+ }
21
+ }
22
+ exports.MissingDependenciesError = MissingDependenciesError;
23
+ class DependencyChecker {
24
+ resolver;
25
+ missingDependencies = new Set();
26
+ constructor(projectSourceRoot) {
27
+ this.resolver = (0, node_module_1.createRequire)(projectSourceRoot + '/').resolve;
28
+ }
29
+ /**
30
+ * Checks if a package is installed.
31
+ * @param packageName The name of the package to check.
32
+ * @returns True if the package is found, false otherwise.
33
+ */
34
+ isInstalled(packageName) {
35
+ try {
36
+ this.resolver(packageName);
37
+ return true;
38
+ }
39
+ catch {
40
+ return false;
41
+ }
42
+ }
43
+ /**
44
+ * Verifies that a package is installed and adds it to a list of missing
45
+ * dependencies if it is not.
46
+ * @param packageName The name of the package to check.
47
+ */
48
+ check(packageName) {
49
+ if (!this.isInstalled(packageName)) {
50
+ this.missingDependencies.add(packageName);
51
+ }
52
+ }
53
+ /**
54
+ * Verifies that at least one of a list of packages is installed. If none are
55
+ * installed, a custom error message is added to the list of errors.
56
+ * @param packageNames An array of package names to check.
57
+ * @param customErrorMessage The error message to use if none of the packages are found.
58
+ */
59
+ checkAny(packageNames, customErrorMessage) {
60
+ if (packageNames.every((name) => !this.isInstalled(name))) {
61
+ // This is a custom error, so we add it directly.
62
+ // Using a Set avoids duplicate custom messages.
63
+ this.missingDependencies.add(customErrorMessage);
64
+ }
65
+ }
66
+ /**
67
+ * Throws a `MissingDependenciesError` if any dependencies were found to be missing.
68
+ * The error message is a formatted list of all missing packages.
69
+ */
70
+ report() {
71
+ if (this.missingDependencies.size === 0) {
72
+ return;
73
+ }
74
+ let message = 'The following packages are required but were not found:\n';
75
+ for (const name of this.missingDependencies) {
76
+ message += ` - ${name}\n`;
77
+ }
78
+ message += 'Please install the missing packages and rerun the test command.';
79
+ throw new MissingDependenciesError(message);
80
+ }
81
+ }
82
+ exports.DependencyChecker = DependencyChecker;
83
+ //# sourceMappingURL=dependency-checker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dependency-checker.js","sourceRoot":"","sources":["dependency-checker.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;;AAEH,6CAA4C;AAE5C;;;GAGG;AACH,MAAa,wBAAyB,SAAQ,KAAK;IACjD,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,0BAA0B,CAAC;IACzC,CAAC;CACF;AALD,4DAKC;AAID,MAAa,iBAAiB;IACX,QAAQ,CAAW;IACnB,mBAAmB,GAAG,IAAI,GAAG,EAAU,CAAC;IAEzD,YAAY,iBAAyB;QACnC,IAAI,CAAC,QAAQ,GAAG,IAAA,2BAAa,EAAC,iBAAiB,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC;IACjE,CAAC;IAED;;;;OAIG;IACK,WAAW,CAAC,WAAmB;QACrC,IAAI,CAAC;YACH,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;YAE3B,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,WAAmB;QACvB,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,EAAE,CAAC;YACnC,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QAC5C,CAAC;IACH,CAAC;IAED;;;;;OAKG;IACH,QAAQ,CAAC,YAAsB,EAAE,kBAA0B;QACzD,IAAI,YAAY,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;YAC1D,iDAAiD;YACjD,gDAAgD;YAChD,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;QACnD,CAAC;IACH,CAAC;IAED;;;OAGG;IACH,MAAM;QACJ,IAAI,IAAI,CAAC,mBAAmB,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;YACxC,OAAO;QACT,CAAC;QAED,IAAI,OAAO,GAAG,2DAA2D,CAAC;QAC1E,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,mBAAmB,EAAE,CAAC;YAC5C,OAAO,IAAI,OAAO,IAAI,IAAI,CAAC;QAC7B,CAAC;QACD,OAAO,IAAI,iEAAiE,CAAC;QAE7E,MAAM,IAAI,wBAAwB,CAAC,OAAO,CAAC,CAAC;IAC9C,CAAC;CACF;AAjED,8CAiEC"}