@nx/angular 21.1.2 → 21.2.0-beta.2

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 (271) hide show
  1. package/README.md +4 -4
  2. package/fesm2022/nx-angular-mf.mjs +10 -3
  3. package/fesm2022/nx-angular-mf.mjs.map +1 -1
  4. package/fesm2022/nx-angular.mjs.map +1 -1
  5. package/index.d.ts +2 -1
  6. package/mf/index.d.ts +71 -1
  7. package/migrations.json +106 -0
  8. package/ng-package.json +0 -1
  9. package/package.json +28 -16
  10. package/plugins/component-testing.js +8 -3
  11. package/src/builders/dev-server/dev-server.impl.js +4 -7
  12. package/src/builders/dev-server/lib/normalize-options.js +0 -6
  13. package/src/builders/dev-server/lib/validate-options.js +0 -4
  14. package/src/builders/dev-server/schema.d.ts +3 -15
  15. package/src/builders/dev-server/schema.json +3 -9
  16. package/src/builders/webpack-browser/webpack-browser.impl.js +2 -0
  17. package/src/builders/webpack-server/webpack-server.impl.d.ts +3 -1
  18. package/src/builders/webpack-server/webpack-server.impl.js +2 -0
  19. package/src/executors/application/application.impl.d.ts +2 -2
  20. package/src/executors/application/application.impl.js +11 -6
  21. package/src/executors/application/schema.d.ts +1 -1
  22. package/src/executors/application/schema.json +21 -10
  23. package/src/executors/application/utils/normalize-options.js +8 -1
  24. package/src/executors/application/utils/validate-options.js +10 -40
  25. package/src/executors/extract-i18n/extract-i18n.impl.js +6 -14
  26. package/src/executors/extract-i18n/schema.d.ts +1 -6
  27. package/src/executors/extract-i18n/schema.json +5 -0
  28. package/src/executors/extract-i18n/utils/validate-options.d.ts +2 -0
  29. package/src/executors/extract-i18n/utils/validate-options.js +13 -0
  30. package/src/executors/module-federation-dev-server/lib/normalize-options.js +1 -7
  31. package/src/executors/module-federation-dev-server/schema.d.ts +3 -15
  32. package/src/executors/module-federation-dev-server/schema.json +2 -15
  33. package/src/executors/module-federation-ssr-dev-server/module-federation-ssr-dev-server.impl.js +10 -8
  34. package/src/executors/ng-packagr-lite/ng-packagr-adjustments/ng-package/entry-point/entry-point.d.ts +6 -3
  35. package/src/executors/ng-packagr-lite/ng-packagr-adjustments/ng-package/entry-point/entry-point.js +46 -8
  36. package/src/executors/ng-packagr-lite/ng-packagr-adjustments/ng-package/entry-point/write-bundles.di.d.ts +1 -1
  37. package/src/executors/ng-packagr-lite/ng-packagr-adjustments/ng-package/entry-point/write-bundles.di.js +3 -3
  38. package/src/executors/ng-packagr-lite/ng-packagr-adjustments/ng-package/entry-point/write-bundles.transform.d.ts +2 -2
  39. package/src/executors/ng-packagr-lite/ng-packagr-adjustments/ng-package/entry-point/write-bundles.transform.js +36 -7
  40. package/src/executors/ng-packagr-lite/schema.json +2 -3
  41. package/src/executors/package/package.impl.js +1 -5
  42. package/src/executors/package/schema.d.ts +3 -1
  43. package/src/executors/package/schema.json +2 -3
  44. package/src/executors/utilities/builder-package.d.ts +1 -0
  45. package/src/executors/utilities/builder-package.js +11 -0
  46. package/src/executors/utilities/esbuild-extensions.d.ts +2 -1
  47. package/src/executors/utilities/ng-packagr/package-imports.d.ts +3 -1
  48. package/src/executors/utilities/ng-packagr/package-imports.js +2 -2
  49. package/src/executors/utilities/ng-packagr/pre-v19/stylesheet-processor.d.ts +2 -24
  50. package/src/executors/utilities/ng-packagr/pre-v19/stylesheet-processor.js +40 -107
  51. package/src/executors/utilities/ng-packagr/stylesheet-processor.di.js +4 -8
  52. package/src/executors/utilities/ng-packagr/v19+/stylesheet-processor.d.ts +1 -1
  53. package/src/executors/utilities/ng-packagr/v19+/stylesheet-processor.js +18 -11
  54. package/src/generators/add-linting/add-linting.js +8 -0
  55. package/src/generators/application/application.js +22 -8
  56. package/src/generators/application/files/base/tsconfig.app.json__tpl__ +10 -1
  57. package/src/generators/application/files/base/tsconfig.json__tpl__ +7 -8
  58. package/src/generators/application/files/ng-module/src/app/app__componentFileSuffix__.spec.ts__tpl__ +28 -0
  59. package/src/generators/application/files/ng-module/src/app/{app.component.ts__tpl__ → app__componentFileSuffix__.ts__tpl__} +4 -4
  60. package/src/generators/application/files/ng-module/src/app/app__moduleTypeSeparator__module.ts__tpl__ +17 -0
  61. package/src/generators/application/files/ng-module/src/main.ts__tpl__ +11 -3
  62. package/src/generators/application/files/nx-welcome/claimed/ng-module/src/app/{nx-welcome.component.ts__tpl__ → nx-welcome__componentFileSuffix__.ts__tpl__} +1 -1
  63. package/src/generators/application/files/nx-welcome/claimed/standalone/src/app/{nx-welcome.component.ts__tpl__ → nx-welcome__componentFileSuffix__.ts__tpl__} +1 -1
  64. package/src/generators/application/files/nx-welcome/not-configured/ng-module/src/app/{nx-welcome.component.ts__tpl__ → nx-welcome__componentFileSuffix__.ts__tpl__} +1 -1
  65. package/src/generators/application/files/nx-welcome/not-configured/standalone/src/app/{nx-welcome.component.ts__tpl__ → nx-welcome__componentFileSuffix__.ts__tpl__} +1 -1
  66. package/src/generators/application/files/nx-welcome/unclaimed/ng-module/src/app/{nx-welcome.component.ts__tpl__ → nx-welcome__componentFileSuffix__.ts__tpl__} +1 -1
  67. package/src/generators/application/files/nx-welcome/unclaimed/standalone/src/app/{nx-welcome.component.ts__tpl__ → nx-welcome__componentFileSuffix__.ts__tpl__} +1 -1
  68. package/src/generators/application/files/standalone-components/src/app/app.config.ts__tpl__ +6 -2
  69. package/src/generators/application/files/standalone-components/src/app/app__componentFileSuffix__.spec.ts__tpl__ +27 -0
  70. package/src/generators/application/files/standalone-components/src/app/{app.component.ts__tpl__ → app__componentFileSuffix__.ts__tpl__} +6 -6
  71. package/src/generators/application/files/standalone-components/src/main.ts__tpl__ +2 -2
  72. package/src/generators/application/lib/create-files.d.ts +1 -1
  73. package/src/generators/application/lib/create-files.js +18 -19
  74. package/src/generators/application/lib/create-project.d.ts +1 -1
  75. package/src/generators/application/lib/create-project.js +119 -26
  76. package/src/generators/application/lib/enable-strict-type-checking.js +4 -2
  77. package/src/generators/application/lib/index.d.ts +1 -2
  78. package/src/generators/application/lib/index.js +1 -2
  79. package/src/generators/application/lib/set-generator-defaults.js +1 -0
  80. package/src/generators/application/lib/{update-editor-tsconfig.d.ts → update-tsconfig-files.d.ts} +1 -1
  81. package/src/generators/application/lib/update-tsconfig-files.js +93 -0
  82. package/src/generators/application/schema.json +1 -1
  83. package/src/generators/component/component.js +13 -2
  84. package/src/generators/component/files/__fileName__.ts__tpl__ +1 -1
  85. package/src/generators/component/lib/component.js +11 -1
  86. package/src/generators/component/lib/module.d.ts +7 -2
  87. package/src/generators/component/lib/module.js +7 -5
  88. package/src/generators/component/lib/normalize-options.js +7 -3
  89. package/src/generators/component/schema.d.ts +1 -0
  90. package/src/generators/component/schema.json +6 -2
  91. package/src/generators/convert-to-application-executor/convert-to-application-executor.js +37 -24
  92. package/src/generators/convert-to-rspack/convert-to-rspack.d.ts +1 -1
  93. package/src/generators/convert-to-rspack/convert-to-rspack.js +173 -28
  94. package/src/generators/convert-to-rspack/lib/get-custom-webpack-config.js +1 -1
  95. package/src/generators/directive/directive.js +1 -1
  96. package/src/generators/directive/lib/normalize-options.js +7 -2
  97. package/src/generators/directive/schema.d.ts +1 -0
  98. package/src/generators/directive/schema.json +10 -2
  99. package/src/generators/host/host.js +21 -1
  100. package/src/generators/host/schema.d.ts +1 -0
  101. package/src/generators/host/schema.json +7 -1
  102. package/src/generators/init/init.js +1 -1
  103. package/src/generators/library/files/base/tsconfig.json__tpl__ +5 -5
  104. package/src/generators/library/files/ng-module/src/index.ts__tpl__ +1 -1
  105. package/src/generators/library/files/standalone-components/src/lib/lib.routes.ts__tpl__ +2 -2
  106. package/src/generators/library/lib/add-standalone-component.js +1 -0
  107. package/src/generators/library/lib/create-files.js +10 -3
  108. package/src/generators/library/lib/normalize-options.d.ts +3 -3
  109. package/src/generators/library/lib/normalize-options.js +6 -1
  110. package/src/generators/library/lib/normalized-schema.d.ts +2 -0
  111. package/src/generators/library/lib/set-generator-defaults.js +1 -0
  112. package/src/generators/library/lib/update-tsconfig-files.d.ts +3 -0
  113. package/src/generators/library/lib/update-tsconfig-files.js +98 -0
  114. package/src/generators/library/library.js +19 -33
  115. package/src/generators/library-secondary-entry-point/files/src/index.ts__tmpl__ +1 -1
  116. package/src/generators/library-secondary-entry-point/lib/add-files.js +2 -1
  117. package/src/generators/library-secondary-entry-point/lib/normalize-options.d.ts +2 -2
  118. package/src/generators/library-secondary-entry-point/lib/normalize-options.js +3 -0
  119. package/src/generators/library-secondary-entry-point/schema.d.ts +1 -0
  120. package/src/generators/move/lib/update-module-name.js +17 -10
  121. package/src/generators/move/lib/update-secondary-entry-points.js +0 -3
  122. package/src/generators/ng-add/migrators/builders/angular-devkit-karma.migrator.js +1 -1
  123. package/src/generators/ng-add/migrators/projects/app.migrator.js +43 -8
  124. package/src/generators/ngrx/schema.json +3 -3
  125. package/src/generators/ngrx-root-store/lib/normalize-options.js +9 -2
  126. package/src/generators/pipe/lib/normalize-options.js +4 -0
  127. package/src/generators/pipe/pipe.js +1 -1
  128. package/src/generators/pipe/schema.d.ts +1 -0
  129. package/src/generators/pipe/schema.json +11 -2
  130. package/src/generators/remote/files/standalone/src/bootstrap.server.ts__tmpl__ +4 -4
  131. package/src/generators/remote/lib/update-ssr-setup.js +5 -0
  132. package/src/generators/remote/remote.js +23 -0
  133. package/src/generators/remote/schema.d.ts +1 -0
  134. package/src/generators/remote/schema.json +7 -1
  135. package/src/generators/scam/lib/convert-component-to-scam.js +1 -3
  136. package/src/generators/scam/lib/normalize-options.js +11 -3
  137. package/src/generators/scam/schema.d.ts +1 -0
  138. package/src/generators/scam/schema.json +1 -2
  139. package/src/generators/scam-directive/lib/convert-directive-to-scam.js +1 -3
  140. package/src/generators/scam-directive/lib/normalize-options.js +11 -2
  141. package/src/generators/scam-directive/schema.d.ts +2 -0
  142. package/src/generators/scam-directive/schema.json +10 -2
  143. package/src/generators/scam-pipe/lib/convert-pipe-to-scam.js +1 -3
  144. package/src/generators/scam-pipe/lib/normalize-options.js +8 -0
  145. package/src/generators/scam-pipe/schema.d.ts +2 -0
  146. package/src/generators/scam-pipe/schema.json +5 -0
  147. package/src/generators/setup-mf/files/entry-module-files/{entry.module.ts__tmpl__ → __entryModuleFileName__.ts__tmpl__} +4 -4
  148. package/src/generators/setup-mf/files/entry-module-files/entry.routes.ts__tmpl__ +2 -2
  149. package/src/generators/setup-mf/files/entry-module-files/{entry.component.ts__tmpl__ → entry__componentFileSuffix__.ts__tmpl__} +1 -1
  150. package/src/generators/setup-mf/files/host-files/__appFileName__.spec.ts__tmpl__ +43 -0
  151. package/src/generators/setup-mf/files/standalone-entry-component-files/entry.routes.ts__tmpl__ +2 -2
  152. package/src/generators/setup-mf/files/standalone-entry-component-files/{entry.component.ts__tmpl__ → entry__componentFileSuffix__.ts__tmpl__} +3 -3
  153. package/src/generators/setup-mf/files/ts-webpack/module-federation.config.ts__tmpl__ +1 -1
  154. package/src/generators/setup-mf/files/ts-webpack/tsconfig.lint.json__tmpl__ +1 -1
  155. package/src/generators/setup-mf/files/webpack/module-federation.config.js__tmpl__ +1 -1
  156. package/src/generators/setup-mf/lib/add-remote-entry.d.ts +2 -2
  157. package/src/generators/setup-mf/lib/add-remote-entry.js +9 -3
  158. package/src/generators/setup-mf/lib/add-remote-to-host.js +11 -1
  159. package/src/generators/setup-mf/lib/fix-bootstrap.d.ts +2 -2
  160. package/src/generators/setup-mf/lib/fix-bootstrap.js +4 -4
  161. package/src/generators/setup-mf/lib/generate-config.d.ts +2 -2
  162. package/src/generators/setup-mf/lib/generate-config.js +1 -0
  163. package/src/generators/setup-mf/lib/normalize-options.d.ts +1 -1
  164. package/src/generators/setup-mf/lib/normalize-options.js +13 -0
  165. package/src/generators/setup-mf/lib/remove-dead-code-from-remote.d.ts +2 -2
  166. package/src/generators/setup-mf/lib/remove-dead-code-from-remote.js +18 -14
  167. package/src/generators/setup-mf/lib/setup-host-if-dynamic.js +1 -5
  168. package/src/generators/setup-mf/lib/setup-tspath-for-remote.d.ts +2 -2
  169. package/src/generators/setup-mf/lib/setup-tspath-for-remote.js +1 -1
  170. package/src/generators/setup-mf/lib/update-host-app-routes.d.ts +2 -2
  171. package/src/generators/setup-mf/lib/update-host-app-routes.js +12 -9
  172. package/src/generators/setup-mf/lib/update-tsconfig.d.ts +2 -2
  173. package/src/generators/setup-mf/lib/update-tsconfig.js +5 -5
  174. package/src/generators/setup-mf/schema.d.ts +7 -0
  175. package/src/generators/setup-mf/setup-mf.d.ts +2 -2
  176. package/src/generators/setup-mf/setup-mf.js +16 -6
  177. package/src/generators/setup-ssr/files/v20+/application-builder/ngmodule-src/__main__ +1 -0
  178. package/src/generators/setup-ssr/files/v20+/application-builder/ngmodule-src/app/__rootModuleFileName__ +12 -0
  179. package/src/generators/setup-ssr/files/v20+/application-builder/ngmodule-src/app/app.routes.server.ts__tpl__ +8 -0
  180. package/src/generators/setup-ssr/files/v20+/application-builder/server/__serverFileName__ +66 -0
  181. package/src/generators/setup-ssr/files/v20+/application-builder/standalone-src/__main__ +7 -0
  182. package/src/generators/setup-ssr/files/v20+/application-builder/standalone-src/app/app.config.server.ts__tpl__ +12 -0
  183. package/src/generators/setup-ssr/files/v20+/application-builder/standalone-src/app/app.routes.server.ts__tpl__ +8 -0
  184. package/src/generators/setup-ssr/files/v20+/server-builder/ngmodule-src/__main__ +1 -0
  185. package/src/generators/setup-ssr/files/v20+/server-builder/ngmodule-src/app/__rootModuleFileName__ +14 -0
  186. package/src/generators/setup-ssr/files/v20+/server-builder/root/tsconfig.server.json.template +18 -0
  187. package/src/generators/setup-ssr/files/v20+/server-builder/server/__serverFileName__ +69 -0
  188. package/src/generators/setup-ssr/files/v20+/server-builder/standalone-src/__main__ +7 -0
  189. package/src/generators/setup-ssr/files/v20+/server-builder/standalone-src/app/app.config.server.ts.template +11 -0
  190. package/src/generators/setup-ssr/lib/add-dependencies.js +11 -8
  191. package/src/generators/setup-ssr/lib/add-hydration.js +10 -3
  192. package/src/generators/setup-ssr/lib/add-server-file.js +7 -2
  193. package/src/generators/setup-ssr/lib/generate-files.js +17 -4
  194. package/src/generators/setup-ssr/lib/generate-server-ts-config.js +32 -6
  195. package/src/generators/setup-ssr/lib/normalize-options.js +5 -3
  196. package/src/generators/setup-ssr/lib/update-project-config.js +5 -0
  197. package/src/generators/setup-ssr/lib/validate-options.js +2 -2
  198. package/src/generators/setup-ssr/schema.d.ts +1 -0
  199. package/src/generators/setup-ssr/schema.json +1 -1
  200. package/src/generators/utils/add-jest.js +6 -1
  201. package/src/generators/utils/app-components-info.d.ts +9 -0
  202. package/src/generators/utils/app-components-info.js +39 -0
  203. package/src/generators/utils/artifact-types.d.ts +3 -0
  204. package/src/generators/utils/artifact-types.js +33 -0
  205. package/src/generators/utils/assert-mf-utils.d.ts +1 -0
  206. package/src/generators/utils/assert-mf-utils.js +11 -0
  207. package/src/generators/utils/ensure-angular-dependencies.js +6 -3
  208. package/src/generators/utils/export-scam.d.ts +1 -0
  209. package/src/generators/utils/export-scam.js +1 -2
  210. package/src/generators/utils/find-module.js +18 -13
  211. package/src/generators/utils/storybook-ast/component-info.js +40 -24
  212. package/src/generators/utils/storybook-ast/module-info.d.ts +1 -1
  213. package/src/generators/utils/storybook-ast/module-info.js +3 -8
  214. package/src/generators/utils/testing.js +28 -28
  215. package/src/generators/utils/version-utils.js +2 -2
  216. package/src/generators/web-worker/lib/add-snippet.js +3 -3
  217. package/src/migrations/update-21-2-0/migrate-provide-server-rendering-import.d.ts +2 -0
  218. package/src/migrations/update-21-2-0/migrate-provide-server-rendering-import.js +110 -0
  219. package/src/migrations/update-21-2-0/replace-provide-server-routing.d.ts +2 -0
  220. package/src/migrations/update-21-2-0/replace-provide-server-routing.js +103 -0
  221. package/src/migrations/update-21-2-0/set-generator-defaults-for-previous-style-guide.d.ts +2 -0
  222. package/src/migrations/update-21-2-0/set-generator-defaults-for-previous-style-guide.js +47 -0
  223. package/src/migrations/update-21-2-0/update-angular-cli.d.ts +3 -0
  224. package/src/migrations/update-21-2-0/update-angular-cli.js +23 -0
  225. package/src/migrations/update-21-2-0/update-module-resolution.d.ts +2 -0
  226. package/src/migrations/update-21-2-0/update-module-resolution.js +45 -0
  227. package/src/plugins/plugin.js +22 -13
  228. package/src/utils/backward-compatible-versions.d.ts +2 -2
  229. package/src/utils/backward-compatible-versions.js +22 -19
  230. package/src/utils/nx-devkit/ast-utils.js +17 -3
  231. package/src/utils/nx-devkit/testing.js +9 -9
  232. package/src/utils/targets.d.ts +2 -1
  233. package/src/utils/targets.js +6 -0
  234. package/src/utils/versions.d.ts +4 -3
  235. package/src/utils/versions.js +5 -4
  236. package/mf/mf.d.ts +0 -69
  237. package/src/generators/application/files/base-pre18/src/favicon.ico +0 -0
  238. package/src/generators/application/files/ng-module/src/app/app.component.spec.ts__tpl__ +0 -29
  239. package/src/generators/application/files/ng-module/src/app/app.module.ts__tpl__ +0 -17
  240. package/src/generators/application/files/standalone-components/src/app/app.component.__style__ +0 -0
  241. package/src/generators/application/files/standalone-components/src/app/app.component.spec.ts__tpl__ +0 -28
  242. package/src/generators/application/lib/set-app-strict-default.d.ts +0 -2
  243. package/src/generators/application/lib/set-app-strict-default.js +0 -13
  244. package/src/generators/application/lib/update-editor-tsconfig.js +0 -21
  245. package/src/generators/library/lib/enable-strict-type-checking.d.ts +0 -7
  246. package/src/generators/library/lib/enable-strict-type-checking.js +0 -47
  247. package/src/generators/library/lib/update-tsconfig.d.ts +0 -3
  248. package/src/generators/library/lib/update-tsconfig.js +0 -36
  249. package/src/generators/setup-mf/files/host-files/app.component.spec.ts__tmpl__ +0 -47
  250. /package/src/generators/application/files/{base-18+ → base}/public/favicon.ico +0 -0
  251. /package/src/generators/application/files/{base-pre18/src/assets/.gitkeep__tpl__ → ng-module/src/app/app__componentFileSuffix__.__style__} +0 -0
  252. /package/src/generators/application/files/ng-module/src/app/{app.component.html__tpl__ → app__componentFileSuffix__.html__tpl__} +0 -0
  253. /package/src/generators/application/files/{ng-module/src/app/app.component.__style__ → standalone-components/src/app/app__componentFileSuffix__.__style__} +0 -0
  254. /package/src/generators/application/files/standalone-components/src/app/{app.component.html__tpl__ → app__componentFileSuffix__.html__tpl__} +0 -0
  255. /package/src/generators/component/files/{__fileName__.html__tpl__ → __fileName____ngext__.html__tpl__} +0 -0
  256. /package/src/generators/library/files/ng-module/src/lib/{__libFileName__.module.ts__tpl__ → __libFileName____moduleTypeSeparator__module.ts__tpl__} +0 -0
  257. /package/src/generators/library-secondary-entry-point/files/src/lib/{__fileName__.module.ts__tmpl__ → __fileName____moduleTypeSeparator__module.ts__tmpl__} +0 -0
  258. /package/src/generators/setup-ssr/files/{v19+ → v19}/application-builder/ngmodule-src/__main__ +0 -0
  259. /package/src/generators/setup-ssr/files/{v19+ → v19}/application-builder/ngmodule-src/app/__rootModuleFileName__ +0 -0
  260. /package/src/generators/setup-ssr/files/{v19+ → v19}/application-builder/ngmodule-src/app/app.routes.server.ts__tpl__ +0 -0
  261. /package/src/generators/setup-ssr/files/{v19+ → v19}/application-builder/server/__serverFileName__ +0 -0
  262. /package/src/generators/setup-ssr/files/{v19+ → v19}/application-builder/standalone-src/__main__ +0 -0
  263. /package/src/generators/setup-ssr/files/{v19+ → v19}/application-builder/standalone-src/app/app.config.server.ts__tpl__ +0 -0
  264. /package/src/generators/setup-ssr/files/{v19+ → v19}/application-builder/standalone-src/app/app.routes.server.ts__tpl__ +0 -0
  265. /package/src/generators/setup-ssr/files/{v19+ → v19}/application-builder-common-engine/server/__serverFileName__ +0 -0
  266. /package/src/generators/setup-ssr/files/{v19+ → v19}/server-builder/ngmodule-src/__main__ +0 -0
  267. /package/src/generators/setup-ssr/files/{v19+ → v19}/server-builder/ngmodule-src/app/__rootModuleFileName__ +0 -0
  268. /package/src/generators/setup-ssr/files/{v19+ → v19}/server-builder/root/tsconfig.server.json.template +0 -0
  269. /package/src/generators/setup-ssr/files/{v19+ → v19}/server-builder/server/__serverFileName__ +0 -0
  270. /package/src/generators/setup-ssr/files/{v19+ → v19}/server-builder/standalone-src/__main__ +0 -0
  271. /package/src/generators/setup-ssr/files/{v19+ → v19}/server-builder/standalone-src/app/app.config.server.ts.template +0 -0
@@ -0,0 +1,7 @@
1
+ import { bootstrapApplication } from '@angular/platform-browser';
2
+ import { <%= appSymbolName %> } from './app/<%= appFileName %>';
3
+ import { config } from './app/app.config.server';
4
+
5
+ const bootstrap = () => bootstrapApplication(<%= appSymbolName %>, config);
6
+
7
+ export default bootstrap;
@@ -0,0 +1,12 @@
1
+ import { mergeApplicationConfig, ApplicationConfig } from '@angular/core';
2
+ import { provideServerRendering, withRoutes } from '@angular/ssr';
3
+ import { appConfig } from './app.config';
4
+ import { serverRoutes } from './app.routes.server';
5
+
6
+ const serverConfig: ApplicationConfig = {
7
+ providers: [
8
+ provideServerRendering(withRoutes(serverRoutes))
9
+ ]
10
+ };
11
+
12
+ export const config = mergeApplicationConfig(appConfig, serverConfig);
@@ -0,0 +1,8 @@
1
+ import { RenderMode, ServerRoute } from '@angular/ssr';
2
+
3
+ export const serverRoutes: ServerRoute[] = [
4
+ {
5
+ path: '**',
6
+ renderMode: RenderMode.Prerender
7
+ }
8
+ ];
@@ -0,0 +1 @@
1
+ export { <%= rootModuleClassName %> as default } from './app/<%= rootModuleFileName.slice(0, -3) %>';
@@ -0,0 +1,14 @@
1
+ import { NgModule } from '@angular/core';
2
+ import { ServerModule } from '@angular/platform-server';
3
+
4
+ import { AppModule } from './app<%= moduleTypeSeparator %>module';
5
+ import { <%= appSymbolName %> } from './<%= appFileName %>';
6
+
7
+ @NgModule({
8
+ imports: [
9
+ AppModule,
10
+ ServerModule,
11
+ ],
12
+ bootstrap: [<%= appSymbolName %>],
13
+ })
14
+ export class <%= rootModuleClassName %> {}
@@ -0,0 +1,18 @@
1
+ /* To learn more about Typescript configuration file: https://www.typescriptlang.org/docs/handbook/tsconfig-json.html. */
2
+ /* To learn more about Angular compiler options: https://angular.dev/reference/configs/angular-compiler-options. */
3
+ {
4
+ "extends": "./tsconfig.app.json",
5
+ "compilerOptions": {
6
+ "outDir": "<%= rootOffset %>out-tsc/server",
7
+ "module": "commonjs",
8
+ "moduleResolution": "node10",
9
+ "types": [
10
+ "node"<% if (hasLocalizePackage) { %>,
11
+ "@angular/localize"<% } %>
12
+ ]
13
+ },
14
+ "files": [
15
+ "src/<%= main %>",
16
+ "src/server.ts"
17
+ ]
18
+ }
@@ -0,0 +1,69 @@
1
+ import 'zone.js/node';
2
+
3
+ import { APP_BASE_HREF } from '@angular/common';
4
+ import { CommonEngine } from '@angular/ssr/node';
5
+ import * as express from 'express';
6
+ import { existsSync } from 'node:fs';
7
+ import { join } from 'node:path';
8
+ import <% if (standalone) { %>bootstrap<% } else { %><%= rootModuleClassName %><% } %> from './<%= main.slice(0, -3) %>';
9
+
10
+ // The Express app is exported so that it can be used by serverless Functions.
11
+ export function app(): express.Express {
12
+ const server = express();
13
+ const distFolder = join(process.cwd(), '<%= browserDistDirectory %>');
14
+ const indexHtml = existsSync(join(distFolder, 'index.original.html'))
15
+ ? join(distFolder, 'index.original.html')
16
+ : join(distFolder, 'index.html');
17
+
18
+ const commonEngine = new CommonEngine();
19
+
20
+ server.set('view engine', 'html');
21
+ server.set('views', distFolder);
22
+
23
+ // Example Express Rest API endpoints
24
+ // server.get('/api/**', (req, res) => { });
25
+ // Serve static files from /browser
26
+ server.get('*.*', express.static(distFolder, {
27
+ maxAge: '1y'
28
+ }));
29
+
30
+ // All regular routes use the Angular engine
31
+ server.get('*', (req, res, next) => {
32
+ const { protocol, originalUrl, baseUrl, headers } = req;
33
+
34
+ commonEngine
35
+ .render({
36
+ bootstrap<% if (!standalone) { %>: <%= rootModuleClassName %><% } %>,
37
+ documentFilePath: indexHtml,
38
+ url: `${protocol}://${headers.host}${originalUrl}`,
39
+ publicPath: distFolder,
40
+ providers: [{ provide: APP_BASE_HREF, useValue: baseUrl }],
41
+ })
42
+ .then((html) => res.send(html))
43
+ .catch((err) => next(err));
44
+ });
45
+
46
+ return server;
47
+ }
48
+
49
+ function run(): void {
50
+ const port = process.env['PORT'] || <%= serverPort %>;
51
+
52
+ // Start up the Node server
53
+ const server = app();
54
+ server.listen(port, () => {
55
+ console.log(`Node Express server listening on http://localhost:${port}`);
56
+ });
57
+ }
58
+
59
+ // Webpack will replace 'require' with '__webpack_require__'
60
+ // '__non_webpack_require__' is a proxy to Node 'require'
61
+ // The below code is to ensure that the server is run only when not requiring the bundle.
62
+ declare const __non_webpack_require__: NodeRequire;
63
+ const mainModule = __non_webpack_require__.main;
64
+ const moduleFilename = mainModule && mainModule.filename || '';
65
+ if (moduleFilename === __filename || moduleFilename.includes('iisnode')) {
66
+ run();
67
+ }
68
+
69
+ export default <% if (standalone) { %>bootstrap<% } else { %><%= rootModuleClassName %><% } %>;
@@ -0,0 +1,7 @@
1
+ import { bootstrapApplication } from '@angular/platform-browser';
2
+ import { <%= appSymbolName %> } from './app/<%= appFileName %>';
3
+ import { config } from './app/app.config.server';
4
+
5
+ const bootstrap = () => bootstrapApplication(<%= appSymbolName %>, config);
6
+
7
+ export default bootstrap;
@@ -0,0 +1,11 @@
1
+ import { mergeApplicationConfig, ApplicationConfig } from '@angular/core';
2
+ import { provideServerRendering } from '@angular/ssr';
3
+ import { appConfig } from './app.config';
4
+
5
+ const serverConfig: ApplicationConfig = {
6
+ providers: [
7
+ provideServerRendering()
8
+ ]
9
+ };
10
+
11
+ export const config = mergeApplicationConfig(appConfig, serverConfig);
@@ -2,24 +2,27 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.addDependencies = addDependencies;
4
4
  const devkit_1 = require("@nx/devkit");
5
- const semver_1 = require("semver");
6
5
  const version_utils_1 = require("../../utils/version-utils");
7
6
  function addDependencies(tree, isUsingApplicationBuilder) {
8
7
  const pkgVersions = (0, version_utils_1.versions)(tree);
9
- const { version: angularVersion } = (0, version_utils_1.getInstalledAngularVersionInfo)(tree);
10
8
  const dependencies = {
11
- '@angular/platform-server': (0, version_utils_1.getInstalledPackageVersionInfo)(tree, '@angular/platform-server')
12
- ?.version ?? pkgVersions.angularVersion,
9
+ '@angular/platform-server': (0, version_utils_1.getInstalledPackageVersion)(tree, '@angular/platform-server') ??
10
+ pkgVersions.angularVersion,
13
11
  express: pkgVersions.expressVersion,
14
12
  };
15
13
  const devDependencies = {
16
14
  '@types/express': pkgVersions.typesExpressVersion,
17
15
  };
18
- dependencies['@angular/ssr'] =
19
- (0, version_utils_1.getInstalledPackageVersionInfo)(tree, '@angular-devkit/build-angular')
20
- ?.version ?? pkgVersions.angularDevkitVersion;
21
- if (!isUsingApplicationBuilder && (0, semver_1.gte)(angularVersion, '17.1.0')) {
16
+ const angularDevkitVersion = (0, version_utils_1.getInstalledAngularDevkitVersion)(tree) ?? pkgVersions.angularDevkitVersion;
17
+ dependencies['@angular/ssr'] = angularDevkitVersion;
18
+ if (!isUsingApplicationBuilder) {
22
19
  devDependencies['browser-sync'] = pkgVersions.browserSyncVersion;
23
20
  }
21
+ else {
22
+ const { major: angularMajorVersion } = (0, version_utils_1.getInstalledAngularVersionInfo)(tree);
23
+ if (angularMajorVersion >= 20) {
24
+ dependencies['@angular-devkit/build-angular'] = angularDevkitVersion;
25
+ }
26
+ }
24
27
  (0, devkit_1.addDependenciesToPackageJson)(tree, dependencies, devDependencies);
25
28
  }
@@ -14,9 +14,16 @@ function addHydration(tree, options) {
14
14
  tsModule = (0, ensure_typescript_1.ensureTypescript)();
15
15
  tsquery = require('@phenomnomnominal/tsquery').tsquery;
16
16
  }
17
- const pathToClientConfigFile = options.standalone
18
- ? (0, devkit_1.joinPathFragments)(projectConfig.sourceRoot, 'app/app.config.ts')
19
- : (0, devkit_1.joinPathFragments)(projectConfig.sourceRoot, 'app/app.module.ts');
17
+ let pathToClientConfigFile;
18
+ if (options.standalone) {
19
+ pathToClientConfigFile = (0, devkit_1.joinPathFragments)(projectConfig.sourceRoot, 'app/app.config.ts');
20
+ }
21
+ else {
22
+ pathToClientConfigFile = (0, devkit_1.joinPathFragments)(projectConfig.sourceRoot, 'app/app.module.ts');
23
+ if (!tree.exists(pathToClientConfigFile)) {
24
+ pathToClientConfigFile = (0, devkit_1.joinPathFragments)(projectConfig.sourceRoot, 'app/app-module.ts');
25
+ }
26
+ }
20
27
  const sourceText = tree.read(pathToClientConfigFile, 'utf-8');
21
28
  let sourceFile = tsModule.createSourceFile(pathToClientConfigFile, sourceText, tsModule.ScriptTarget.Latest, true);
22
29
  const provideClientHydrationCallExpression = tsquery(sourceFile, 'ObjectLiteralExpression PropertyAssignment:has(Identifier[name=providers]) ArrayLiteralExpression CallExpression:has(Identifier[name=provideClientHydration])')[0];
@@ -14,8 +14,13 @@ function addServerFile(tree, options) {
14
14
  const { major: angularMajorVersion } = (0, version_utils_1.getInstalledAngularVersionInfo)(tree);
15
15
  const baseFilesPath = (0, path_1.join)(__dirname, '..', 'files');
16
16
  let pathToFiles;
17
- if (angularMajorVersion >= 19) {
18
- pathToFiles = (0, path_1.join)(baseFilesPath, 'v19+', options.isUsingApplicationBuilder
17
+ if (angularMajorVersion >= 20) {
18
+ pathToFiles = (0, path_1.join)(baseFilesPath, 'v20+', options.isUsingApplicationBuilder
19
+ ? 'application-builder'
20
+ : 'server-builder', 'server');
21
+ }
22
+ else if (angularMajorVersion === 19) {
23
+ pathToFiles = (0, path_1.join)(baseFilesPath, 'v19', options.isUsingApplicationBuilder
19
24
  ? 'application-builder' +
20
25
  (options.serverRouting ? '' : '-common-engine')
21
26
  : 'server-builder', 'server');
@@ -3,8 +3,10 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.generateSSRFiles = generateSSRFiles;
4
4
  const devkit_1 = require("@nx/devkit");
5
5
  const path_1 = require("path");
6
- const version_utils_1 = require("../../utils/version-utils");
7
6
  const semver_1 = require("semver");
7
+ const app_components_info_1 = require("../../utils/app-components-info");
8
+ const artifact_types_1 = require("../../utils/artifact-types");
9
+ const version_utils_1 = require("../../utils/version-utils");
8
10
  function generateSSRFiles(tree, options) {
9
11
  const project = (0, devkit_1.readProjectConfiguration)(tree, options.project);
10
12
  if (project.targets.server ||
@@ -16,8 +18,13 @@ function generateSSRFiles(tree, options) {
16
18
  const { major: angularMajorVersion } = (0, version_utils_1.getInstalledAngularVersionInfo)(tree);
17
19
  const baseFilesPath = (0, path_1.join)(__dirname, '..', 'files');
18
20
  let pathToFiles;
19
- if (angularMajorVersion >= 19) {
20
- pathToFiles = (0, path_1.join)(baseFilesPath, 'v19+', options.isUsingApplicationBuilder
21
+ if (angularMajorVersion >= 20) {
22
+ pathToFiles = (0, path_1.join)(baseFilesPath, 'v20+', options.isUsingApplicationBuilder
23
+ ? 'application-builder'
24
+ : 'server-builder', options.standalone ? 'standalone-src' : 'ngmodule-src');
25
+ }
26
+ else if (angularMajorVersion === 19) {
27
+ pathToFiles = (0, path_1.join)(baseFilesPath, 'v19', options.isUsingApplicationBuilder
21
28
  ? 'application-builder'
22
29
  : 'server-builder', options.standalone ? 'standalone-src' : 'ngmodule-src');
23
30
  }
@@ -29,14 +36,20 @@ function generateSSRFiles(tree, options) {
29
36
  const cleanedSsrVersion = ssrVersion
30
37
  ? (0, semver_1.clean)(ssrVersion) ?? (0, semver_1.coerce)(ssrVersion).version
31
38
  : null;
39
+ const componentType = (0, artifact_types_1.getComponentType)(tree);
40
+ const appComponentInfo = (0, app_components_info_1.getAppComponentInfo)(tree, componentType ? `.${componentType}` : '', project);
41
+ const moduleTypeSeparator = (0, artifact_types_1.getModuleTypeSeparator)(tree);
32
42
  (0, devkit_1.generateFiles)(tree, pathToFiles, sourceRoot, {
33
43
  ...options,
34
44
  provideServerRoutingFn: !cleanedSsrVersion || (0, semver_1.gte)(cleanedSsrVersion, '19.2.0')
35
45
  ? 'provideServerRouting'
36
46
  : 'provideServerRoutesConfig',
47
+ appFileName: appComponentInfo.extensionlessFileName,
48
+ appSymbolName: appComponentInfo.symbolName,
49
+ moduleTypeSeparator,
37
50
  tpl: '',
38
51
  });
39
- if (angularMajorVersion >= 19 && !options.serverRouting) {
52
+ if (angularMajorVersion === 19 && !options.serverRouting) {
40
53
  tree.delete((0, devkit_1.joinPathFragments)(sourceRoot, 'app/app.routes.server.ts'));
41
54
  }
42
55
  }
@@ -9,6 +9,14 @@ function setServerTsConfigOptionsForApplicationBuilder(tree, options) {
9
9
  const { targets } = (0, devkit_1.readProjectConfiguration)(tree, options.project);
10
10
  const tsConfigPath = targets.build.options.tsConfig;
11
11
  (0, devkit_1.updateJson)(tree, tsConfigPath, (json) => {
12
+ json.compilerOptions ??= {};
13
+ const types = new Set(json.compilerOptions.types ?? []);
14
+ types.add('node');
15
+ json.compilerOptions.types = Array.from(types);
16
+ if (json.include?.includes('src/**/*.ts')) {
17
+ // server file is already included, no need to add it
18
+ return json;
19
+ }
12
20
  const { major: angularMajorVersion } = (0, version_utils_1.getInstalledAngularVersionInfo)(tree);
13
21
  const files = new Set(json.files ?? []);
14
22
  files.add((0, devkit_1.joinPathFragments)('src', options.main));
@@ -19,10 +27,6 @@ function setServerTsConfigOptionsForApplicationBuilder(tree, options) {
19
27
  files.add((0, devkit_1.joinPathFragments)(options.serverFileName));
20
28
  }
21
29
  json.files = Array.from(files);
22
- json.compilerOptions ??= {};
23
- const types = new Set(json.compilerOptions.types ?? []);
24
- types.add('node');
25
- json.compilerOptions.types = Array.from(types);
26
30
  return json;
27
31
  });
28
32
  }
@@ -34,8 +38,11 @@ function generateTsConfigServerJsonForBrowserBuilder(tree, options) {
34
38
  !!packageJson.devDependencies?.['@angular/localize'];
35
39
  const baseFilesPath = (0, path_1.join)(__dirname, '..', 'files');
36
40
  let pathToFiles;
37
- if (angularMajorVersion >= 19) {
38
- pathToFiles = (0, path_1.join)(baseFilesPath, 'v19+', 'server-builder', 'root');
41
+ if (angularMajorVersion >= 20) {
42
+ pathToFiles = (0, path_1.join)(baseFilesPath, 'v20+', 'server-builder', 'root');
43
+ }
44
+ else if (angularMajorVersion === 19) {
45
+ pathToFiles = (0, path_1.join)(baseFilesPath, 'v19', 'server-builder', 'root');
39
46
  }
40
47
  else {
41
48
  pathToFiles = (0, path_1.join)(baseFilesPath, 'pre-v19', 'root');
@@ -46,4 +53,23 @@ function generateTsConfigServerJsonForBrowserBuilder(tree, options) {
46
53
  hasLocalizePackage,
47
54
  tpl: '',
48
55
  });
56
+ (0, devkit_1.updateJson)(tree, (0, devkit_1.joinPathFragments)(project.root, 'tsconfig.json'), (json) => {
57
+ json.references ??= [];
58
+ json.references.push({
59
+ path: (0, devkit_1.joinPathFragments)(project.root, 'tsconfig.server.json'),
60
+ });
61
+ return json;
62
+ });
63
+ if (angularMajorVersion >= 20) {
64
+ (0, devkit_1.updateJson)(tree, options.buildTargetTsConfigPath, (json) => {
65
+ const exclude = new Set(json.exclude ?? []);
66
+ exclude.add(`src/${options.main}`);
67
+ exclude.add(`src/${options.serverFileName}`);
68
+ if (options.standalone) {
69
+ exclude.add('src/app/app.config.server.ts');
70
+ }
71
+ json.exclude = Array.from(exclude);
72
+ return json;
73
+ });
74
+ }
49
75
  }
@@ -6,13 +6,13 @@ const prompt_1 = require("@nx/devkit/src/generators/prompt");
6
6
  const ast_utils_1 = require("../../../utils/nx-devkit/ast-utils");
7
7
  const version_utils_1 = require("../../utils/version-utils");
8
8
  async function normalizeOptions(tree, options) {
9
- const { targets } = (0, devkit_1.readProjectConfiguration)(tree, options.project);
9
+ const { targets, root } = (0, devkit_1.readProjectConfiguration)(tree, options.project);
10
10
  const isUsingApplicationBuilder = targets.build.executor === '@angular-devkit/build-angular:application' ||
11
11
  targets.build.executor === '@angular/build:application' ||
12
12
  targets.build.executor === '@nx/angular:application';
13
13
  if (options.serverRouting === undefined && isUsingApplicationBuilder) {
14
14
  const { major: angularMajorVersion } = (0, version_utils_1.getInstalledAngularVersionInfo)(tree);
15
- if (angularMajorVersion >= 19) {
15
+ if (angularMajorVersion === 19) {
16
16
  options.serverRouting = await (0, prompt_1.promptWhenInteractive)({
17
17
  type: 'confirm',
18
18
  name: 'serverRouting',
@@ -21,7 +21,7 @@ async function normalizeOptions(tree, options) {
21
21
  }, { serverRouting: false }).then(({ serverRouting }) => serverRouting);
22
22
  }
23
23
  else {
24
- options.serverRouting = false;
24
+ options.serverRouting = angularMajorVersion >= 20;
25
25
  }
26
26
  }
27
27
  else if (options.serverRouting !== undefined &&
@@ -42,5 +42,7 @@ async function normalizeOptions(tree, options) {
42
42
  hydration: options.hydration ?? true,
43
43
  serverRouting: options.serverRouting,
44
44
  isUsingApplicationBuilder,
45
+ buildTargetTsConfigPath: targets.build.options?.tsConfig ??
46
+ (0, devkit_1.joinPathFragments)(root, 'tsconfig.app.json'),
45
47
  };
46
48
  }
@@ -21,6 +21,11 @@ function updateProjectConfigForApplicationBuilder(tree, options) {
21
21
  }
22
22
  else {
23
23
  outputPath = outputPath.base;
24
+ if (buildTarget.outputs && buildTarget.outputs.length > 0) {
25
+ buildTarget.outputs = buildTarget.outputs.map((output) => output === '{options.outputPath.base}'
26
+ ? '{options.outputPath}'
27
+ : output);
28
+ }
24
29
  }
25
30
  }
26
31
  const { major: angularMajorVersion } = (0, version_utils_1.getInstalledAngularVersionInfo)(tree);
@@ -8,8 +8,8 @@ function validateOptions(tree, options) {
8
8
  validateProject(tree, options.project);
9
9
  validateBuildTarget(tree, options.project);
10
10
  const { major: angularMajorVersion, version: angularVersion } = (0, version_utils_1.getInstalledAngularVersionInfo)(tree);
11
- if (angularMajorVersion < 19 && options.serverRouting) {
12
- throw new Error(`The "serverRouting" option is only supported in Angular versions >= 19.0.0. You are using Angular ${angularVersion}.`);
11
+ if (angularMajorVersion !== 19 && options.serverRouting !== undefined) {
12
+ throw new Error(`The "serverRouting" option is only supported in Angular versions 19.x.x. You are using Angular ${angularVersion}.`);
13
13
  }
14
14
  }
15
15
  function validateProject(tree, project) {
@@ -15,4 +15,5 @@ export interface Schema {
15
15
 
16
16
  export interface NormalizedGeneratorOptions extends Schema {
17
17
  isUsingApplicationBuilder: boolean;
18
+ buildTargetTsConfigPath: string;
18
19
  }
@@ -53,7 +53,7 @@
53
53
  "default": true
54
54
  },
55
55
  "serverRouting": {
56
- "description": "Creates a server application using the Server Routing and App Engine APIs (Developer Preview). _Note: this is only supported in Angular versions >= 19.0.0_.",
56
+ "description": "Creates a server application using the Server Routing and App Engine APIs for application using the `application` builder (Developer Preview). _Note: this is only supported in Angular versions 19.x.x_. From Angular 20 onwards, SSR will always enable server routing when using the `application` builder.",
57
57
  "type": "boolean"
58
58
  },
59
59
  "skipFormat": {
@@ -3,10 +3,15 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.addJest = addJest;
4
4
  const devkit_1 = require("@nx/devkit");
5
5
  const versions_1 = require("../../utils/versions");
6
+ const version_utils_1 = require("./version-utils");
6
7
  async function addJest(tree, options) {
7
8
  if (!options.skipPackageJson) {
8
9
  process.env.npm_config_legacy_peer_deps ??= 'true';
9
- (0, devkit_1.addDependenciesToPackageJson)(tree, {}, { 'jest-preset-angular': versions_1.jestPresetAngularVersion }, undefined, true);
10
+ const pkgVersions = (0, version_utils_1.versions)(tree);
11
+ (0, devkit_1.addDependenciesToPackageJson)(tree, {
12
+ // TODO(leo): jest-preset-angular still needs this until https://github.com/thymikee/jest-preset-angular/pull/3079 is merged
13
+ '@angular/platform-browser-dynamic': pkgVersions.angularVersion,
14
+ }, { 'jest-preset-angular': pkgVersions.jestPresetAngularVersion }, undefined, true);
10
15
  }
11
16
  const { configurationGenerator } = (0, devkit_1.ensurePackage)('@nx/jest', versions_1.nxVersion);
12
17
  await configurationGenerator(tree, {
@@ -0,0 +1,9 @@
1
+ import { type ProjectConfiguration, type Tree } from '@nx/devkit';
2
+ export type ComponentMetadata = {
3
+ fileName: string;
4
+ extensionlessFileName: string;
5
+ path: string;
6
+ symbolName: string;
7
+ };
8
+ export declare function getAppComponentInfo(tree: Tree, componentFileSuffix: string, project: ProjectConfiguration): ComponentMetadata;
9
+ export declare function getNxWelcomeComponentInfo(tree: Tree, componentFileSuffix: string, project: ProjectConfiguration): ComponentMetadata;
@@ -0,0 +1,39 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getAppComponentInfo = getAppComponentInfo;
4
+ exports.getNxWelcomeComponentInfo = getNxWelcomeComponentInfo;
5
+ const devkit_1 = require("@nx/devkit");
6
+ const node_path_1 = require("node:path");
7
+ const version_utils_1 = require("./version-utils");
8
+ function getAppComponentInfo(tree, componentFileSuffix, project) {
9
+ return getComponentInfo(tree, 'app', componentFileSuffix, project);
10
+ }
11
+ function getNxWelcomeComponentInfo(tree, componentFileSuffix, project) {
12
+ return getComponentInfo(tree, 'nx-welcome', componentFileSuffix, project);
13
+ }
14
+ // TODO(leo): follow this up and improve it by using static analysis
15
+ function getComponentInfo(tree, component, componentFileSuffix, project) {
16
+ let componentPath = (0, devkit_1.joinPathFragments)(project.sourceRoot, `app/${component}.component.ts`);
17
+ if (!tree.exists(componentPath)) {
18
+ componentPath = (0, devkit_1.joinPathFragments)(project.sourceRoot, `app/${component}.ts`);
19
+ }
20
+ if (!tree.exists(componentPath)) {
21
+ if (componentFileSuffix) {
22
+ componentPath = (0, devkit_1.joinPathFragments)(project.sourceRoot, `app/${component}${componentFileSuffix}.ts`);
23
+ }
24
+ }
25
+ if (!tree.exists(componentPath)) {
26
+ const { major: angularMajorVersion } = (0, version_utils_1.getInstalledAngularVersionInfo)(tree);
27
+ componentPath = (0, devkit_1.joinPathFragments)(project.sourceRoot, angularMajorVersion >= 20
28
+ ? `app/${component}.ts`
29
+ : `app/${component}.component.ts`);
30
+ }
31
+ const fileName = (0, node_path_1.basename)(componentPath);
32
+ const extensionlessFileName = fileName.slice(0, -3);
33
+ return {
34
+ fileName,
35
+ extensionlessFileName,
36
+ path: componentPath,
37
+ symbolName: (0, devkit_1.names)(extensionlessFileName).className,
38
+ };
39
+ }
@@ -0,0 +1,3 @@
1
+ import { type Tree } from '@nx/devkit';
2
+ export declare function getComponentType(tree: Tree): string | undefined;
3
+ export declare function getModuleTypeSeparator(tree: Tree): '-' | '.';
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getComponentType = getComponentType;
4
+ exports.getModuleTypeSeparator = getModuleTypeSeparator;
5
+ const devkit_1 = require("@nx/devkit");
6
+ const version_utils_1 = require("./version-utils");
7
+ function getComponentType(tree) {
8
+ const nxJson = (0, devkit_1.readNxJson)(tree);
9
+ let componentType = nxJson.generators?.['@nx/angular:component']?.type ??
10
+ nxJson.generators?.['@nx/angular']?.component?.type;
11
+ if (!componentType) {
12
+ const { major: angularMajorVersion } = (0, version_utils_1.getInstalledAngularVersionInfo)(tree);
13
+ if (angularMajorVersion < 20) {
14
+ componentType = 'component';
15
+ }
16
+ }
17
+ return componentType;
18
+ }
19
+ function getModuleTypeSeparator(tree) {
20
+ const nxJson = (0, devkit_1.readNxJson)(tree);
21
+ // We don't have a "module" generator but the @nx/angular collection extends
22
+ // from the @schematics/angular collection so the "module" generator is
23
+ // available there. We check for a generator default for each collection.
24
+ let typeSeparator = nxJson.generators?.['@nx/angular:module']?.typeSeparator ??
25
+ nxJson.generators?.['@nx/angular']?.module?.typeSeparator ??
26
+ nxJson.generators?.['@schematics/angular:module']?.typeSeparator ??
27
+ nxJson.generators?.['@schematics/angular']?.module?.typeSeparator;
28
+ if (!typeSeparator) {
29
+ const { major: angularMajorVersion } = (0, version_utils_1.getInstalledAngularVersionInfo)(tree);
30
+ typeSeparator = angularMajorVersion >= 20 ? '-' : '.';
31
+ }
32
+ return typeSeparator;
33
+ }
@@ -0,0 +1 @@
1
+ export declare function assertRspackIsCSR(bundler: 'webpack' | 'rspack', ssr: boolean, serverRouting: boolean): void;
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.assertRspackIsCSR = assertRspackIsCSR;
4
+ function assertRspackIsCSR(bundler, ssr, serverRouting) {
5
+ if (bundler === 'rspack' && serverRouting) {
6
+ throw new Error('Server Routing is not currently supported for Angular Rspack Module Federation. Please use webpack instead.');
7
+ }
8
+ if (bundler === 'rspack' && ssr) {
9
+ throw new Error('SSR is not currently supported for Angular Rspack Module Federation. Please use webpack instead.');
10
+ }
11
+ }
@@ -24,13 +24,12 @@ function ensureAngularDependencies(tree) {
24
24
  dependencies['@angular/core'] = angularVersion;
25
25
  dependencies['@angular/forms'] = angularVersion;
26
26
  dependencies['@angular/platform-browser'] = angularVersion;
27
- dependencies['@angular/platform-browser-dynamic'] = angularVersion;
28
27
  dependencies['@angular/router'] = angularVersion;
29
28
  dependencies.rxjs = rxjsVersion;
30
29
  dependencies.tslib = tsLibVersion;
31
30
  dependencies['zone.js'] = zoneJsVersion;
32
31
  }
33
- const installedAngularDevkitVersion = (0, version_utils_1.getInstalledPackageVersion)(tree, '@angular-devkit/build-angular');
32
+ const installedAngularDevkitVersion = (0, version_utils_1.getInstalledAngularDevkitVersion)(tree);
34
33
  if (!installedAngularDevkitVersion) {
35
34
  /**
36
35
  * If `@angular-devkit/build-angular` is already installed, we assume the workspace
@@ -43,8 +42,12 @@ function ensureAngularDependencies(tree) {
43
42
  }
44
43
  // Ensure the `@nx/angular` peer dependencies are always installed.
45
44
  const angularDevkitVersion = installedAngularDevkitVersion ?? pkgVersions.angularDevkitVersion;
46
- devDependencies['@angular-devkit/build-angular'] = angularDevkitVersion;
47
45
  devDependencies['@angular-devkit/schematics'] = angularDevkitVersion;
48
46
  devDependencies['@schematics/angular'] = angularDevkitVersion;
47
+ const { major: angularMajorVersion } = (0, version_utils_1.getInstalledAngularVersionInfo)(tree);
48
+ if (angularMajorVersion < 20) {
49
+ devDependencies['@angular/build'] = angularDevkitVersion;
50
+ devDependencies['@angular-devkit/build-angular'] = angularDevkitVersion;
51
+ }
49
52
  return (0, devkit_1.addDependenciesToPackageJson)(tree, dependencies, devDependencies, undefined, true);
50
53
  }
@@ -4,6 +4,7 @@ export type GenerationOptions = {
4
4
  filePath: string;
5
5
  name: string;
6
6
  projectName: string;
7
+ modulePath: string;
7
8
  export?: boolean;
8
9
  inlineScam?: boolean;
9
10
  };
@@ -27,8 +27,7 @@ function exportScam(tree, options) {
27
27
  let updatedEntryPointContent = (0, devkit_1.stripIndents) `${entryPointContent}
28
28
  export * from '${relativePathFromEntryPoint}';`;
29
29
  if (!options.inlineScam) {
30
- const moduleFilePath = (0, devkit_1.joinPathFragments)(options.directory, `${(0, devkit_1.names)(options.name).fileName}.module.ts`);
31
- const relativePathFromModule = (0, path_1.getRelativeImportToFile)(entryPointPath, moduleFilePath);
30
+ const relativePathFromModule = (0, path_1.getRelativeImportToFile)(entryPointPath, options.modulePath);
32
31
  updatedEntryPointContent = (0, devkit_1.stripIndents) `${updatedEntryPointContent}
33
32
  export * from '${relativePathFromModule}';`;
34
33
  }