@nx/angular 21.1.2 → 21.2.0-beta.1

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 (269) hide show
  1. package/README.md +3 -3
  2. package/fesm2022/nx-angular-mf.mjs.map +1 -1
  3. package/fesm2022/nx-angular.mjs.map +1 -1
  4. package/index.d.ts +2 -1
  5. package/mf/index.d.ts +71 -1
  6. package/migrations.json +106 -0
  7. package/ng-package.json +0 -1
  8. package/package.json +28 -16
  9. package/plugins/component-testing.js +8 -3
  10. package/src/builders/dev-server/dev-server.impl.js +4 -7
  11. package/src/builders/dev-server/lib/normalize-options.js +0 -6
  12. package/src/builders/dev-server/lib/validate-options.js +0 -4
  13. package/src/builders/dev-server/schema.d.ts +3 -15
  14. package/src/builders/dev-server/schema.json +3 -9
  15. package/src/builders/webpack-browser/webpack-browser.impl.js +2 -0
  16. package/src/builders/webpack-server/webpack-server.impl.d.ts +3 -1
  17. package/src/builders/webpack-server/webpack-server.impl.js +2 -0
  18. package/src/executors/application/application.impl.d.ts +2 -2
  19. package/src/executors/application/application.impl.js +11 -6
  20. package/src/executors/application/schema.d.ts +1 -1
  21. package/src/executors/application/schema.json +21 -10
  22. package/src/executors/application/utils/normalize-options.js +8 -1
  23. package/src/executors/application/utils/validate-options.js +10 -40
  24. package/src/executors/extract-i18n/extract-i18n.impl.js +6 -14
  25. package/src/executors/extract-i18n/schema.d.ts +1 -6
  26. package/src/executors/extract-i18n/schema.json +5 -0
  27. package/src/executors/extract-i18n/utils/validate-options.d.ts +2 -0
  28. package/src/executors/extract-i18n/utils/validate-options.js +13 -0
  29. package/src/executors/module-federation-dev-server/lib/normalize-options.js +1 -7
  30. package/src/executors/module-federation-dev-server/schema.d.ts +3 -15
  31. package/src/executors/module-federation-dev-server/schema.json +2 -15
  32. package/src/executors/module-federation-ssr-dev-server/module-federation-ssr-dev-server.impl.js +10 -8
  33. package/src/executors/ng-packagr-lite/ng-packagr-adjustments/ng-package/entry-point/entry-point.d.ts +6 -3
  34. package/src/executors/ng-packagr-lite/ng-packagr-adjustments/ng-package/entry-point/entry-point.js +46 -8
  35. package/src/executors/ng-packagr-lite/ng-packagr-adjustments/ng-package/entry-point/write-bundles.di.d.ts +1 -1
  36. package/src/executors/ng-packagr-lite/ng-packagr-adjustments/ng-package/entry-point/write-bundles.di.js +3 -3
  37. package/src/executors/ng-packagr-lite/ng-packagr-adjustments/ng-package/entry-point/write-bundles.transform.d.ts +2 -2
  38. package/src/executors/ng-packagr-lite/ng-packagr-adjustments/ng-package/entry-point/write-bundles.transform.js +22 -6
  39. package/src/executors/ng-packagr-lite/schema.json +2 -3
  40. package/src/executors/package/package.impl.js +1 -5
  41. package/src/executors/package/schema.d.ts +3 -1
  42. package/src/executors/package/schema.json +2 -3
  43. package/src/executors/utilities/builder-package.d.ts +1 -0
  44. package/src/executors/utilities/builder-package.js +11 -0
  45. package/src/executors/utilities/esbuild-extensions.d.ts +2 -1
  46. package/src/executors/utilities/ng-packagr/package-imports.d.ts +3 -1
  47. package/src/executors/utilities/ng-packagr/package-imports.js +2 -2
  48. package/src/executors/utilities/ng-packagr/pre-v19/stylesheet-processor.d.ts +2 -24
  49. package/src/executors/utilities/ng-packagr/pre-v19/stylesheet-processor.js +40 -107
  50. package/src/executors/utilities/ng-packagr/stylesheet-processor.di.js +4 -8
  51. package/src/executors/utilities/ng-packagr/v19+/stylesheet-processor.d.ts +1 -1
  52. package/src/executors/utilities/ng-packagr/v19+/stylesheet-processor.js +18 -11
  53. package/src/generators/add-linting/add-linting.js +8 -0
  54. package/src/generators/application/application.js +22 -8
  55. package/src/generators/application/files/base/tsconfig.app.json__tpl__ +10 -1
  56. package/src/generators/application/files/base/tsconfig.json__tpl__ +5 -6
  57. package/src/generators/application/files/ng-module/src/app/app__componentFileSuffix__.spec.ts__tpl__ +28 -0
  58. package/src/generators/application/files/ng-module/src/app/{app.component.ts__tpl__ → app__componentFileSuffix__.ts__tpl__} +4 -4
  59. package/src/generators/application/files/ng-module/src/app/app__moduleTypeSeparator__module.ts__tpl__ +17 -0
  60. package/src/generators/application/files/ng-module/src/main.ts__tpl__ +11 -3
  61. package/src/generators/application/files/nx-welcome/claimed/ng-module/src/app/{nx-welcome.component.ts__tpl__ → nx-welcome__componentFileSuffix__.ts__tpl__} +1 -1
  62. package/src/generators/application/files/nx-welcome/claimed/standalone/src/app/{nx-welcome.component.ts__tpl__ → nx-welcome__componentFileSuffix__.ts__tpl__} +1 -1
  63. 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
  64. package/src/generators/application/files/nx-welcome/not-configured/standalone/src/app/{nx-welcome.component.ts__tpl__ → nx-welcome__componentFileSuffix__.ts__tpl__} +1 -1
  65. package/src/generators/application/files/nx-welcome/unclaimed/ng-module/src/app/{nx-welcome.component.ts__tpl__ → nx-welcome__componentFileSuffix__.ts__tpl__} +1 -1
  66. package/src/generators/application/files/nx-welcome/unclaimed/standalone/src/app/{nx-welcome.component.ts__tpl__ → nx-welcome__componentFileSuffix__.ts__tpl__} +1 -1
  67. package/src/generators/application/files/standalone-components/src/app/app.config.ts__tpl__ +6 -2
  68. package/src/generators/application/files/standalone-components/src/app/app__componentFileSuffix__.spec.ts__tpl__ +27 -0
  69. package/src/generators/application/files/standalone-components/src/app/{app.component.ts__tpl__ → app__componentFileSuffix__.ts__tpl__} +6 -6
  70. package/src/generators/application/files/standalone-components/src/main.ts__tpl__ +2 -2
  71. package/src/generators/application/lib/create-files.d.ts +1 -1
  72. package/src/generators/application/lib/create-files.js +18 -19
  73. package/src/generators/application/lib/create-project.d.ts +1 -1
  74. package/src/generators/application/lib/create-project.js +119 -26
  75. package/src/generators/application/lib/enable-strict-type-checking.js +4 -2
  76. package/src/generators/application/lib/index.d.ts +1 -2
  77. package/src/generators/application/lib/index.js +1 -2
  78. package/src/generators/application/lib/set-generator-defaults.js +1 -0
  79. package/src/generators/application/lib/{update-editor-tsconfig.d.ts → update-tsconfig-files.d.ts} +1 -1
  80. package/src/generators/application/lib/update-tsconfig-files.js +76 -0
  81. package/src/generators/application/schema.json +1 -1
  82. package/src/generators/component/component.js +13 -2
  83. package/src/generators/component/files/__fileName__.ts__tpl__ +1 -1
  84. package/src/generators/component/lib/component.js +11 -1
  85. package/src/generators/component/lib/module.d.ts +7 -2
  86. package/src/generators/component/lib/module.js +7 -5
  87. package/src/generators/component/lib/normalize-options.js +7 -3
  88. package/src/generators/component/schema.d.ts +1 -0
  89. package/src/generators/component/schema.json +6 -2
  90. package/src/generators/convert-to-application-executor/convert-to-application-executor.js +37 -24
  91. package/src/generators/convert-to-rspack/convert-to-rspack.js +2 -6
  92. package/src/generators/convert-to-rspack/lib/get-custom-webpack-config.js +1 -1
  93. package/src/generators/directive/directive.js +1 -1
  94. package/src/generators/directive/lib/normalize-options.js +7 -2
  95. package/src/generators/directive/schema.d.ts +1 -0
  96. package/src/generators/directive/schema.json +10 -2
  97. package/src/generators/host/host.js +21 -1
  98. package/src/generators/host/schema.d.ts +1 -0
  99. package/src/generators/host/schema.json +7 -1
  100. package/src/generators/init/init.js +1 -1
  101. package/src/generators/library/files/base/tsconfig.json__tpl__ +5 -5
  102. package/src/generators/library/files/ng-module/src/index.ts__tpl__ +1 -1
  103. package/src/generators/library/files/standalone-components/src/lib/lib.routes.ts__tpl__ +2 -2
  104. package/src/generators/library/lib/add-standalone-component.js +1 -0
  105. package/src/generators/library/lib/create-files.js +10 -3
  106. package/src/generators/library/lib/normalize-options.d.ts +3 -3
  107. package/src/generators/library/lib/normalize-options.js +6 -1
  108. package/src/generators/library/lib/normalized-schema.d.ts +2 -0
  109. package/src/generators/library/lib/set-generator-defaults.js +1 -0
  110. package/src/generators/library/lib/update-tsconfig-files.d.ts +3 -0
  111. package/src/generators/library/lib/update-tsconfig-files.js +85 -0
  112. package/src/generators/library/library.js +19 -33
  113. package/src/generators/library-secondary-entry-point/files/src/index.ts__tmpl__ +1 -1
  114. package/src/generators/library-secondary-entry-point/lib/add-files.js +2 -1
  115. package/src/generators/library-secondary-entry-point/lib/normalize-options.d.ts +2 -2
  116. package/src/generators/library-secondary-entry-point/lib/normalize-options.js +3 -0
  117. package/src/generators/library-secondary-entry-point/schema.d.ts +1 -0
  118. package/src/generators/move/lib/update-module-name.js +17 -10
  119. package/src/generators/move/lib/update-secondary-entry-points.js +0 -3
  120. package/src/generators/ng-add/migrators/builders/angular-devkit-karma.migrator.js +1 -1
  121. package/src/generators/ng-add/migrators/projects/app.migrator.js +43 -8
  122. package/src/generators/ngrx/schema.json +3 -3
  123. package/src/generators/ngrx-root-store/lib/normalize-options.js +9 -2
  124. package/src/generators/pipe/lib/normalize-options.js +4 -0
  125. package/src/generators/pipe/pipe.js +1 -1
  126. package/src/generators/pipe/schema.d.ts +1 -0
  127. package/src/generators/pipe/schema.json +11 -2
  128. package/src/generators/remote/files/standalone/src/bootstrap.server.ts__tmpl__ +4 -4
  129. package/src/generators/remote/lib/update-ssr-setup.js +5 -0
  130. package/src/generators/remote/remote.js +23 -0
  131. package/src/generators/remote/schema.d.ts +1 -0
  132. package/src/generators/remote/schema.json +7 -1
  133. package/src/generators/scam/lib/convert-component-to-scam.js +1 -3
  134. package/src/generators/scam/lib/normalize-options.js +11 -3
  135. package/src/generators/scam/schema.d.ts +1 -0
  136. package/src/generators/scam/schema.json +1 -2
  137. package/src/generators/scam-directive/lib/convert-directive-to-scam.js +1 -3
  138. package/src/generators/scam-directive/lib/normalize-options.js +11 -2
  139. package/src/generators/scam-directive/schema.d.ts +2 -0
  140. package/src/generators/scam-directive/schema.json +10 -2
  141. package/src/generators/scam-pipe/lib/convert-pipe-to-scam.js +1 -3
  142. package/src/generators/scam-pipe/lib/normalize-options.js +8 -0
  143. package/src/generators/scam-pipe/schema.d.ts +2 -0
  144. package/src/generators/scam-pipe/schema.json +5 -0
  145. package/src/generators/setup-mf/files/entry-module-files/{entry.module.ts__tmpl__ → __entryModuleFileName__.ts__tmpl__} +4 -4
  146. package/src/generators/setup-mf/files/entry-module-files/entry.routes.ts__tmpl__ +2 -2
  147. package/src/generators/setup-mf/files/entry-module-files/{entry.component.ts__tmpl__ → entry__componentFileSuffix__.ts__tmpl__} +1 -1
  148. package/src/generators/setup-mf/files/host-files/__appFileName__.spec.ts__tmpl__ +43 -0
  149. package/src/generators/setup-mf/files/standalone-entry-component-files/entry.routes.ts__tmpl__ +2 -2
  150. package/src/generators/setup-mf/files/standalone-entry-component-files/{entry.component.ts__tmpl__ → entry__componentFileSuffix__.ts__tmpl__} +3 -3
  151. package/src/generators/setup-mf/files/ts-webpack/module-federation.config.ts__tmpl__ +1 -1
  152. package/src/generators/setup-mf/files/ts-webpack/tsconfig.lint.json__tmpl__ +1 -1
  153. package/src/generators/setup-mf/files/webpack/module-federation.config.js__tmpl__ +1 -1
  154. package/src/generators/setup-mf/lib/add-remote-entry.d.ts +2 -2
  155. package/src/generators/setup-mf/lib/add-remote-entry.js +9 -3
  156. package/src/generators/setup-mf/lib/add-remote-to-host.js +11 -1
  157. package/src/generators/setup-mf/lib/fix-bootstrap.d.ts +2 -2
  158. package/src/generators/setup-mf/lib/fix-bootstrap.js +4 -4
  159. package/src/generators/setup-mf/lib/generate-config.d.ts +2 -2
  160. package/src/generators/setup-mf/lib/generate-config.js +1 -0
  161. package/src/generators/setup-mf/lib/normalize-options.d.ts +1 -1
  162. package/src/generators/setup-mf/lib/normalize-options.js +13 -0
  163. package/src/generators/setup-mf/lib/remove-dead-code-from-remote.d.ts +2 -2
  164. package/src/generators/setup-mf/lib/remove-dead-code-from-remote.js +18 -14
  165. package/src/generators/setup-mf/lib/setup-host-if-dynamic.js +1 -5
  166. package/src/generators/setup-mf/lib/setup-tspath-for-remote.d.ts +2 -2
  167. package/src/generators/setup-mf/lib/setup-tspath-for-remote.js +1 -1
  168. package/src/generators/setup-mf/lib/update-host-app-routes.d.ts +2 -2
  169. package/src/generators/setup-mf/lib/update-host-app-routes.js +12 -9
  170. package/src/generators/setup-mf/lib/update-tsconfig.d.ts +2 -2
  171. package/src/generators/setup-mf/lib/update-tsconfig.js +5 -5
  172. package/src/generators/setup-mf/schema.d.ts +7 -0
  173. package/src/generators/setup-mf/setup-mf.d.ts +2 -2
  174. package/src/generators/setup-mf/setup-mf.js +16 -6
  175. package/src/generators/setup-ssr/files/v20+/application-builder/ngmodule-src/__main__ +1 -0
  176. package/src/generators/setup-ssr/files/v20+/application-builder/ngmodule-src/app/__rootModuleFileName__ +12 -0
  177. package/src/generators/setup-ssr/files/v20+/application-builder/ngmodule-src/app/app.routes.server.ts__tpl__ +8 -0
  178. package/src/generators/setup-ssr/files/v20+/application-builder/server/__serverFileName__ +66 -0
  179. package/src/generators/setup-ssr/files/v20+/application-builder/standalone-src/__main__ +7 -0
  180. package/src/generators/setup-ssr/files/v20+/application-builder/standalone-src/app/app.config.server.ts__tpl__ +12 -0
  181. package/src/generators/setup-ssr/files/v20+/application-builder/standalone-src/app/app.routes.server.ts__tpl__ +8 -0
  182. package/src/generators/setup-ssr/files/v20+/server-builder/ngmodule-src/__main__ +1 -0
  183. package/src/generators/setup-ssr/files/v20+/server-builder/ngmodule-src/app/__rootModuleFileName__ +14 -0
  184. package/src/generators/setup-ssr/files/v20+/server-builder/root/tsconfig.server.json.template +18 -0
  185. package/src/generators/setup-ssr/files/v20+/server-builder/server/__serverFileName__ +69 -0
  186. package/src/generators/setup-ssr/files/v20+/server-builder/standalone-src/__main__ +7 -0
  187. package/src/generators/setup-ssr/files/v20+/server-builder/standalone-src/app/app.config.server.ts.template +11 -0
  188. package/src/generators/setup-ssr/lib/add-dependencies.js +11 -8
  189. package/src/generators/setup-ssr/lib/add-hydration.js +10 -3
  190. package/src/generators/setup-ssr/lib/add-server-file.js +7 -2
  191. package/src/generators/setup-ssr/lib/generate-files.js +17 -4
  192. package/src/generators/setup-ssr/lib/generate-server-ts-config.js +32 -6
  193. package/src/generators/setup-ssr/lib/normalize-options.js +5 -3
  194. package/src/generators/setup-ssr/lib/update-project-config.js +5 -0
  195. package/src/generators/setup-ssr/lib/validate-options.js +2 -2
  196. package/src/generators/setup-ssr/schema.d.ts +1 -0
  197. package/src/generators/setup-ssr/schema.json +1 -1
  198. package/src/generators/utils/add-jest.js +6 -1
  199. package/src/generators/utils/app-components-info.d.ts +9 -0
  200. package/src/generators/utils/app-components-info.js +39 -0
  201. package/src/generators/utils/artifact-types.d.ts +3 -0
  202. package/src/generators/utils/artifact-types.js +33 -0
  203. package/src/generators/utils/assert-mf-utils.d.ts +1 -0
  204. package/src/generators/utils/assert-mf-utils.js +11 -0
  205. package/src/generators/utils/ensure-angular-dependencies.js +6 -3
  206. package/src/generators/utils/export-scam.d.ts +1 -0
  207. package/src/generators/utils/export-scam.js +1 -2
  208. package/src/generators/utils/find-module.js +18 -13
  209. package/src/generators/utils/storybook-ast/component-info.js +40 -24
  210. package/src/generators/utils/storybook-ast/module-info.d.ts +1 -1
  211. package/src/generators/utils/storybook-ast/module-info.js +3 -8
  212. package/src/generators/utils/testing.js +28 -28
  213. package/src/generators/utils/version-utils.js +2 -2
  214. package/src/generators/web-worker/lib/add-snippet.js +3 -3
  215. package/src/migrations/update-21-2-0/migrate-provide-server-rendering-import.d.ts +2 -0
  216. package/src/migrations/update-21-2-0/migrate-provide-server-rendering-import.js +110 -0
  217. package/src/migrations/update-21-2-0/replace-provide-server-routing.d.ts +2 -0
  218. package/src/migrations/update-21-2-0/replace-provide-server-routing.js +103 -0
  219. package/src/migrations/update-21-2-0/set-generator-defaults-for-previous-style-guide.d.ts +2 -0
  220. package/src/migrations/update-21-2-0/set-generator-defaults-for-previous-style-guide.js +47 -0
  221. package/src/migrations/update-21-2-0/update-angular-cli.d.ts +3 -0
  222. package/src/migrations/update-21-2-0/update-angular-cli.js +23 -0
  223. package/src/migrations/update-21-2-0/update-module-resolution.d.ts +2 -0
  224. package/src/migrations/update-21-2-0/update-module-resolution.js +45 -0
  225. package/src/plugins/plugin.js +22 -13
  226. package/src/utils/backward-compatible-versions.d.ts +2 -2
  227. package/src/utils/backward-compatible-versions.js +22 -19
  228. package/src/utils/nx-devkit/ast-utils.js +17 -3
  229. package/src/utils/nx-devkit/testing.js +9 -9
  230. package/src/utils/targets.d.ts +2 -1
  231. package/src/utils/targets.js +6 -0
  232. package/src/utils/versions.d.ts +4 -3
  233. package/src/utils/versions.js +5 -4
  234. package/mf/mf.d.ts +0 -69
  235. package/src/generators/application/files/base-pre18/src/favicon.ico +0 -0
  236. package/src/generators/application/files/ng-module/src/app/app.component.spec.ts__tpl__ +0 -29
  237. package/src/generators/application/files/ng-module/src/app/app.module.ts__tpl__ +0 -17
  238. package/src/generators/application/files/standalone-components/src/app/app.component.__style__ +0 -0
  239. package/src/generators/application/files/standalone-components/src/app/app.component.spec.ts__tpl__ +0 -28
  240. package/src/generators/application/lib/set-app-strict-default.d.ts +0 -2
  241. package/src/generators/application/lib/set-app-strict-default.js +0 -13
  242. package/src/generators/application/lib/update-editor-tsconfig.js +0 -21
  243. package/src/generators/library/lib/enable-strict-type-checking.d.ts +0 -7
  244. package/src/generators/library/lib/enable-strict-type-checking.js +0 -47
  245. package/src/generators/library/lib/update-tsconfig.d.ts +0 -3
  246. package/src/generators/library/lib/update-tsconfig.js +0 -36
  247. package/src/generators/setup-mf/files/host-files/app.component.spec.ts__tmpl__ +0 -47
  248. /package/src/generators/application/files/{base-18+ → base}/public/favicon.ico +0 -0
  249. /package/src/generators/application/files/{base-pre18/src/assets/.gitkeep__tpl__ → ng-module/src/app/app__componentFileSuffix__.__style__} +0 -0
  250. /package/src/generators/application/files/ng-module/src/app/{app.component.html__tpl__ → app__componentFileSuffix__.html__tpl__} +0 -0
  251. /package/src/generators/application/files/{ng-module/src/app/app.component.__style__ → standalone-components/src/app/app__componentFileSuffix__.__style__} +0 -0
  252. /package/src/generators/application/files/standalone-components/src/app/{app.component.html__tpl__ → app__componentFileSuffix__.html__tpl__} +0 -0
  253. /package/src/generators/component/files/{__fileName__.html__tpl__ → __fileName____ngext__.html__tpl__} +0 -0
  254. /package/src/generators/library/files/ng-module/src/lib/{__libFileName__.module.ts__tpl__ → __libFileName____moduleTypeSeparator__module.ts__tpl__} +0 -0
  255. /package/src/generators/library-secondary-entry-point/files/src/lib/{__fileName__.module.ts__tmpl__ → __fileName____moduleTypeSeparator__module.ts__tmpl__} +0 -0
  256. /package/src/generators/setup-ssr/files/{v19+ → v19}/application-builder/ngmodule-src/__main__ +0 -0
  257. /package/src/generators/setup-ssr/files/{v19+ → v19}/application-builder/ngmodule-src/app/__rootModuleFileName__ +0 -0
  258. /package/src/generators/setup-ssr/files/{v19+ → v19}/application-builder/ngmodule-src/app/app.routes.server.ts__tpl__ +0 -0
  259. /package/src/generators/setup-ssr/files/{v19+ → v19}/application-builder/server/__serverFileName__ +0 -0
  260. /package/src/generators/setup-ssr/files/{v19+ → v19}/application-builder/standalone-src/__main__ +0 -0
  261. /package/src/generators/setup-ssr/files/{v19+ → v19}/application-builder/standalone-src/app/app.config.server.ts__tpl__ +0 -0
  262. /package/src/generators/setup-ssr/files/{v19+ → v19}/application-builder/standalone-src/app/app.routes.server.ts__tpl__ +0 -0
  263. /package/src/generators/setup-ssr/files/{v19+ → v19}/application-builder-common-engine/server/__serverFileName__ +0 -0
  264. /package/src/generators/setup-ssr/files/{v19+ → v19}/server-builder/ngmodule-src/__main__ +0 -0
  265. /package/src/generators/setup-ssr/files/{v19+ → v19}/server-builder/ngmodule-src/app/__rootModuleFileName__ +0 -0
  266. /package/src/generators/setup-ssr/files/{v19+ → v19}/server-builder/root/tsconfig.server.json.template +0 -0
  267. /package/src/generators/setup-ssr/files/{v19+ → v19}/server-builder/server/__serverFileName__ +0 -0
  268. /package/src/generators/setup-ssr/files/{v19+ → v19}/server-builder/standalone-src/__main__ +0 -0
  269. /package/src/generators/setup-ssr/files/{v19+ → v19}/server-builder/standalone-src/app/app.config.server.ts.template +0 -0
@@ -3,7 +3,6 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.convertToApplicationExecutor = convertToApplicationExecutor;
4
4
  const devkit_1 = require("@nx/devkit");
5
5
  const posix_1 = require("node:path/posix");
6
- const semver_1 = require("semver");
7
6
  const targets_1 = require("../../utils/targets");
8
7
  const setup_ssr_1 = require("../setup-ssr/setup-ssr");
9
8
  const validations_1 = require("../utils/validations");
@@ -26,17 +25,16 @@ const redundantExecutors = new Set([
26
25
  '@nx/angular:webpack-server',
27
26
  ]);
28
27
  async function convertToApplicationExecutor(tree, options) {
29
- const { version: angularVersion } = (0, version_utils_1.getInstalledAngularVersionInfo)(tree);
30
28
  let didAnySucceed = false;
31
29
  if (options.project) {
32
30
  (0, validations_1.validateProject)(tree, options.project);
33
- didAnySucceed = await convertProjectTargets(tree, options.project, angularVersion, true);
31
+ didAnySucceed = await convertProjectTargets(tree, options.project, true);
34
32
  }
35
33
  else {
36
34
  const projects = (0, devkit_1.getProjects)(tree);
37
35
  for (const [projectName] of projects) {
38
36
  devkit_1.logger.info(`Converting project "${projectName}"...`);
39
- const success = await convertProjectTargets(tree, projectName, angularVersion);
37
+ const success = await convertProjectTargets(tree, projectName);
40
38
  if (success) {
41
39
  devkit_1.logger.info(`Project "${projectName}" converted successfully.`);
42
40
  }
@@ -52,7 +50,7 @@ async function convertToApplicationExecutor(tree, options) {
52
50
  }
53
51
  return didAnySucceed ? () => (0, devkit_1.installPackagesTask)(tree) : () => { };
54
52
  }
55
- async function convertProjectTargets(tree, projectName, angularVersion, isProvidedProject = false) {
53
+ async function convertProjectTargets(tree, projectName, isProvidedProject = false) {
56
54
  function warnIfProvided(message) {
57
55
  if (isProvidedProject) {
58
56
  devkit_1.logger.warn(message);
@@ -63,7 +61,7 @@ async function convertProjectTargets(tree, projectName, angularVersion, isProvid
63
61
  warnIfProvided(`The provided project "${projectName}" is not an application. Skipping conversion.`);
64
62
  return false;
65
63
  }
66
- const { buildTargetName, serverTargetName } = getTargetsToConvert(project.targets, angularVersion);
64
+ const { buildTargetName, serverTargetName } = getTargetsToConvert(project.targets);
67
65
  if (!buildTargetName) {
68
66
  warnIfProvided(`The provided project "${projectName}" does not have any targets using on of the ` +
69
67
  `'@angular-devkit/build-angular:browser', '@angular-devkit/build-angular:browser-esbuild', ` +
@@ -71,12 +69,20 @@ async function convertProjectTargets(tree, projectName, angularVersion, isProvid
71
69
  return false;
72
70
  }
73
71
  const useNxExecutor = project.targets[buildTargetName].executor.startsWith('@nx/angular:');
74
- const newExecutor = useNxExecutor
75
- ? '@nx/angular:application'
76
- : '@angular-devkit/build-angular:application';
72
+ let newExecutor;
73
+ if (useNxExecutor) {
74
+ newExecutor = '@nx/angular:application';
75
+ }
76
+ else {
77
+ const { major: angularMajorVersion } = (0, version_utils_1.getInstalledAngularVersionInfo)(tree);
78
+ newExecutor =
79
+ angularMajorVersion >= 20
80
+ ? '@angular/build:application'
81
+ : '@angular-devkit/build-angular:application';
82
+ }
77
83
  const buildTarget = project.targets[buildTargetName];
78
84
  buildTarget.executor = newExecutor;
79
- if ((0, semver_1.gte)(angularVersion, '17.1.0') && buildTarget.outputs) {
85
+ if (buildTarget.outputs) {
80
86
  buildTarget.outputs = buildTarget.outputs.map((output) => output === '{options.outputPath}' ? '{options.outputPath.base}' : output);
81
87
  }
82
88
  for (const [, options] of (0, targets_1.allTargetOptions)(buildTarget)) {
@@ -94,10 +100,7 @@ async function convertProjectTargets(tree, projectName, angularVersion, isProvid
94
100
  options['polyfills'] = [options['polyfills']];
95
101
  }
96
102
  let outputPath = options['outputPath'];
97
- if ((0, semver_1.lt)(angularVersion, '17.1.0')) {
98
- options['outputPath'] = outputPath?.replace(/\/browser\/?$/, '');
99
- }
100
- else if (typeof outputPath === 'string') {
103
+ if (typeof outputPath === 'string') {
101
104
  if (!/\/browser\/?$/.test(outputPath)) {
102
105
  devkit_1.logger.warn(`The output location of the browser build has been updated from "${outputPath}" to ` +
103
106
  `"${(0, posix_1.join)(outputPath, 'browser')}". ` +
@@ -121,9 +124,6 @@ async function convertProjectTargets(tree, projectName, angularVersion, isProvid
121
124
  }
122
125
  }
123
126
  // Delete removed options
124
- if ((0, semver_1.lt)(angularVersion, '17.3.0')) {
125
- delete options['deployUrl'];
126
- }
127
127
  delete options['vendorChunk'];
128
128
  delete options['commonChunk'];
129
129
  delete options['resourcesOutputPath'];
@@ -145,18 +145,34 @@ async function convertProjectTargets(tree, projectName, angularVersion, isProvid
145
145
  }
146
146
  const browserTsConfigJson = (0, devkit_1.readJson)(tree, browserTsConfigPath);
147
147
  const serverTsConfigJson = (0, devkit_1.readJson)(tree, serverTsConfigPath);
148
+ const serverFiles = ['src/main.server.ts', 'src/server.ts'];
149
+ if (tree.exists((0, posix_1.join)(project.root, 'src/app/app.config.server.ts'))) {
150
+ serverFiles.push('src/app/app.config.server.ts');
151
+ }
148
152
  const files = new Set([
149
153
  ...(browserTsConfigJson.files ?? []),
150
154
  ...(serverTsConfigJson.files ?? []),
151
155
  ]);
152
- // Server file will be added later by the setup-ssr generator
156
+ // Server files will be added later if needed by the setup-ssr generator
153
157
  files.delete('server.ts');
154
- browserTsConfigJson.files = Array.from(files);
158
+ files.delete('src/server.ts');
159
+ files.delete('src/main.server.ts');
160
+ if (files.size) {
161
+ browserTsConfigJson.files = Array.from(files);
162
+ }
163
+ else if (browserTsConfigJson.files) {
164
+ delete browserTsConfigJson.files;
165
+ }
155
166
  browserTsConfigJson.compilerOptions ?? {};
156
167
  browserTsConfigJson.compilerOptions.types = Array.from(new Set([
157
168
  ...(browserTsConfigJson.compilerOptions.types ?? []),
158
169
  ...(serverTsConfigJson.compilerOptions?.types ?? []),
159
170
  ]));
171
+ if (browserTsConfigJson.exclude?.length) {
172
+ const normalizeExclude = (exclude) => exclude.startsWith('./') ? exclude.slice(2) : exclude;
173
+ browserTsConfigJson.exclude = browserTsConfigJson.exclude.filter((exclude) => !serverFiles.includes(normalizeExclude(exclude)));
174
+ }
175
+ (0, devkit_1.writeJson)(tree, browserTsConfigPath, browserTsConfigJson);
160
176
  // Delete server tsconfig
161
177
  tree.delete(serverTsConfigPath);
162
178
  }
@@ -189,11 +205,12 @@ async function convertProjectTargets(tree, projectName, angularVersion, isProvid
189
205
  (0, devkit_1.updateProjectConfiguration)(tree, projectName, project);
190
206
  return true;
191
207
  }
192
- function getTargetsToConvert(targets, angularVersion) {
208
+ function getTargetsToConvert(targets) {
193
209
  let buildTargetName;
194
210
  let serverTargetName;
195
211
  for (const target of Object.keys(targets)) {
196
212
  if (targets[target].executor === '@nx/angular:application' ||
213
+ targets[target].executor === '@angular/build:application' ||
197
214
  targets[target].executor === '@angular-devkit/build-angular:application') {
198
215
  devkit_1.logger.warn('The project is already using the application builder. Skipping conversion.');
199
216
  return {};
@@ -201,10 +218,6 @@ function getTargetsToConvert(targets, angularVersion) {
201
218
  // build target
202
219
  if (executorsToConvert.has(targets[target].executor)) {
203
220
  for (const [, options] of (0, targets_1.allTargetOptions)(targets[target])) {
204
- if ((0, semver_1.lt)(angularVersion, '17.3.0') && options.deployUrl) {
205
- devkit_1.logger.warn(`The project is using the "deployUrl" option which is not available in the application builder. Skipping conversion.`);
206
- return {};
207
- }
208
221
  if (options.customWebpackConfig) {
209
222
  devkit_1.logger.warn(`The project is using a custom webpack configuration which is not supported by the esbuild-based application executor. Skipping conversion.`);
210
223
  return {};
@@ -27,12 +27,7 @@ const RENAMED_OPTIONS = {
27
27
  ngswConfigPath: 'serviceWorker',
28
28
  };
29
29
  const DEFAULT_PORT = 4200;
30
- const REMOVED_OPTIONS = [
31
- 'buildOptimizer',
32
- 'buildTarget',
33
- 'browserTarget',
34
- 'publicHost',
35
- ];
30
+ const REMOVED_OPTIONS = ['buildOptimizer', 'buildTarget', 'browserTarget'];
36
31
  function normalizeFromProjectRoot(tree, path, projectRoot) {
37
32
  if (projectRoot === '.') {
38
33
  if (!path.startsWith('./')) {
@@ -349,6 +344,7 @@ async function convertToRspack(tree, schema) {
349
344
  if (!schema.skipInstall) {
350
345
  const installTask = (0, devkit_1.addDependenciesToPackageJson)(tree, {}, {
351
346
  '@nx/angular-rspack': versions_1.angularRspackVersion,
347
+ 'webpack-merge': versions_1.webpackMergeVersion,
352
348
  'ts-node': versions_1.tsNodeVersion,
353
349
  });
354
350
  tasks.push(installTask);
@@ -30,7 +30,7 @@ function convertWebpackConfigToUseNxModuleFederationPlugin(webpackConfigContents
30
30
  const withModuleFederationImportNodes = (0, tsquery_1.tsquery)(ast, 'ImportDeclaration:has(StringLiteral[value=@nx/module-federation/angular])');
31
31
  if (withModuleFederationImportNodes.length > 0) {
32
32
  const withModuleFederationImportNode = withModuleFederationImportNodes[0];
33
- newWebpackConfigContents = `${webpackConfigContents.slice(0, withModuleFederationImportNode.getStart())}import { NxModuleFederationPlugin, NxModuleFederationDevServerPlugin } from '@nx/module-federation/rspack';${webpackConfigContents.slice(withModuleFederationImportNode.getEnd())}`;
33
+ newWebpackConfigContents = `${webpackConfigContents.slice(0, withModuleFederationImportNode.getStart())}import { NxModuleFederationPlugin, NxModuleFederationDevServerPlugin } from '@nx/module-federation/angular';${webpackConfigContents.slice(withModuleFederationImportNode.getEnd())}`;
34
34
  ast = tsquery_1.tsquery.ast(newWebpackConfigContents);
35
35
  const exportedWithModuleFederationNodes = (0, tsquery_1.tsquery)(ast, 'ExportAssignment:has(CallExpression > Identifier[name=withModuleFederation])');
36
36
  if (exportedWithModuleFederationNodes.length > 0) {
@@ -13,7 +13,7 @@ async function directiveGenerator(tree, schema) {
13
13
  symbolName: options.symbolName,
14
14
  fileName: options.fileName,
15
15
  standalone: options.standalone,
16
- // Angular v19 or higher defaults to true, while v18 or lower defaults to false
16
+ // Angular v19 or higher defaults to true, while lower versions default to false
17
17
  setStandalone: (angularMajorVersion >= 19 && !options.standalone) ||
18
18
  (angularMajorVersion < 19 && options.standalone),
19
19
  tpl: '',
@@ -5,16 +5,21 @@ const devkit_1 = require("@nx/devkit");
5
5
  const artifact_name_and_directory_utils_1 = require("@nx/devkit/src/generators/artifact-name-and-directory-utils");
6
6
  const selector_1 = require("../../utils/selector");
7
7
  const validations_1 = require("../../utils/validations");
8
+ const version_utils_1 = require("../../utils/version-utils");
8
9
  async function normalizeOptions(tree, options) {
10
+ const { major: angularMajorVersion } = (0, version_utils_1.getInstalledAngularVersionInfo)(tree);
11
+ if (angularMajorVersion < 20) {
12
+ options.type ??= 'directive';
13
+ }
9
14
  const { artifactName: name, directory, fileName, filePath, project: projectName, } = await (0, artifact_name_and_directory_utils_1.determineArtifactNameAndDirectoryOptions)(tree, {
10
15
  name: options.name,
11
16
  path: options.path,
12
- suffix: 'directive',
17
+ suffix: options.type,
13
18
  allowedFileExtensions: ['ts'],
14
19
  fileExtension: 'ts',
15
20
  });
16
21
  const { className } = (0, devkit_1.names)(name);
17
- const { className: suffixClassName } = (0, devkit_1.names)('directive');
22
+ const suffixClassName = options.type ? (0, devkit_1.names)(options.type).className : '';
18
23
  const symbolName = `${className}${suffixClassName}`;
19
24
  (0, validations_1.validateClassName)(symbolName);
20
25
  const { prefix } = (0, devkit_1.readProjectConfiguration)(tree, projectName);
@@ -8,6 +8,7 @@ export interface Schema {
8
8
  standalone?: boolean;
9
9
  module?: string;
10
10
  export?: boolean;
11
+ type?: string;
11
12
  skipFormat?: boolean;
12
13
  }
13
14
 
@@ -12,11 +12,15 @@
12
12
  "command": "nx g @nx/angular:directive mylib/src/lib/foo.directive.ts"
13
13
  },
14
14
  {
15
- "description": "Generate a directive without providing the file extension. It results in the directive `FooDirective` at `mylib/src/lib/foo.directive.ts`",
15
+ "description": "Generate a directive without providing the file extension. It results in the directive `Foo` at `mylib/src/lib/foo.ts`",
16
16
  "command": "nx g @nx/angular:directive mylib/src/lib/foo"
17
17
  },
18
18
  {
19
- "description": "Generate a directive with the exported symbol different from the file name. It results in the directive `CustomDirective` at `mylib/src/lib/foo.directive.ts`",
19
+ "description": "Generate a directive with a given type/suffix. It results in the directive `FooDirective` at `mylib/src/lib/foo.directive.ts`",
20
+ "command": "nx g @nx/angular:directive mylib/src/lib/foo --type=directive"
21
+ },
22
+ {
23
+ "description": "Generate a directive with the exported symbol different from the file name. It results in the directive `Custom` at `mylib/src/lib/foo.ts`",
20
24
  "command": "nx g @nx/angular:directive mylib/src/lib/foo --name=custom"
21
25
  }
22
26
  ],
@@ -78,6 +82,10 @@
78
82
  "default": false,
79
83
  "description": "The declaring NgModule exports this directive."
80
84
  },
85
+ "type": {
86
+ "type": "string",
87
+ "description": "Append a custom type to the directive's filename. It defaults to 'directive' for Angular versions below v20. For Angular v20 and above, no type is appended unless specified."
88
+ },
81
89
  "skipFormat": {
82
90
  "type": "boolean",
83
91
  "default": false,
@@ -12,8 +12,14 @@ const remote_1 = tslib_1.__importDefault(require("../remote/remote"));
12
12
  const setup_mf_1 = require("../setup-mf/setup-mf");
13
13
  const add_mf_env_to_inputs_1 = require("../utils/add-mf-env-to-inputs");
14
14
  const lib_1 = require("./lib");
15
+ const assert_mf_utils_1 = require("../utils/assert-mf-utils");
16
+ const convert_to_rspack_1 = tslib_1.__importDefault(require("../convert-to-rspack/convert-to-rspack"));
15
17
  async function host(tree, schema) {
16
18
  (0, ts_solution_setup_1.assertNotUsingTsSolutionSetup)(tree, 'angular', 'host');
19
+ // TODO: Replace with Rspack when confidence is high enough
20
+ schema.bundler ??= 'webpack';
21
+ const isRspack = schema.bundler === 'rspack';
22
+ (0, assert_mf_utils_1.assertRspackIsCSR)(schema.bundler, schema.ssr ?? false, schema.serverRouting ?? false);
17
23
  const { typescriptConfiguration = true, ...options } = schema;
18
24
  options.standalone = options.standalone ?? true;
19
25
  const projects = (0, devkit_1.getProjects)(tree);
@@ -75,7 +81,8 @@ async function host(tree, schema) {
75
81
  let ssrInstallTask = await (0, lib_1.updateSsrSetup)(tree, options, hostProjectName, typescriptConfiguration);
76
82
  installTasks.push(ssrInstallTask);
77
83
  }
78
- for (const remote of remotesToGenerate) {
84
+ for (let i = 0; i < remotesToGenerate.length; i++) {
85
+ const remote = remotesToGenerate[i];
79
86
  const remoteDirectory = options.directory
80
87
  ? (0, devkit_1.joinPathFragments)(options.directory, '..', remote)
81
88
  : appRoot === '.'
@@ -86,12 +93,25 @@ async function host(tree, schema) {
86
93
  name: remote,
87
94
  directory: remoteDirectory,
88
95
  host: hostProjectName,
96
+ port: isRspack ? 4200 + i + 1 : undefined,
89
97
  skipFormat: true,
90
98
  standalone: options.standalone,
91
99
  typescriptConfiguration,
92
100
  });
93
101
  }
94
102
  (0, add_mf_env_to_inputs_1.addMfEnvToTargetDefaultInputs)(tree);
103
+ if (isRspack) {
104
+ await (0, convert_to_rspack_1.default)(tree, {
105
+ project: hostProjectName,
106
+ skipInstall: options.skipPackageJson,
107
+ skipFormat: true,
108
+ });
109
+ }
110
+ const project = (0, devkit_1.readProjectConfiguration)(tree, hostProjectName);
111
+ project.targets.serve ??= {};
112
+ project.targets.serve.options ??= {};
113
+ project.targets.serve.options.port = 4200;
114
+ (0, devkit_1.updateProjectConfiguration)(tree, hostProjectName, project);
95
115
  if (!options.skipFormat) {
96
116
  await (0, devkit_1.formatFiles)(tree);
97
117
  }
@@ -5,6 +5,7 @@ import type { Styles } from '../utils/types';
5
5
  export interface Schema {
6
6
  directory: string;
7
7
  name?: string;
8
+ bundler?: 'webpack' | 'rspack';
8
9
  remotes?: string[];
9
10
  dynamic?: boolean;
10
11
  setParserOptionsProject?: boolean;
@@ -37,6 +37,12 @@
37
37
  "x-priority": "important",
38
38
  "alias": "producers"
39
39
  },
40
+ "bundler": {
41
+ "type": "string",
42
+ "description": "The bundler to use for the host application.",
43
+ "default": "webpack",
44
+ "enum": ["webpack", "rspack"]
45
+ },
40
46
  "dynamic": {
41
47
  "type": "boolean",
42
48
  "description": "Should the host application use dynamic federation?",
@@ -172,7 +178,7 @@
172
178
  "x-priority": "important"
173
179
  },
174
180
  "serverRouting": {
175
- "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_.",
181
+ "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.",
176
182
  "type": "boolean"
177
183
  },
178
184
  "typescriptConfiguration": {
@@ -29,7 +29,7 @@ function installAngularDevkitCoreIfMissing(tree, options) {
29
29
  const packageVersion = (0, version_utils_1.getInstalledPackageVersion)(tree, '@angular-devkit/core');
30
30
  if (!packageVersion) {
31
31
  const pkgVersions = (0, version_utils_1.versions)(tree);
32
- const devkitVersion = (0, version_utils_1.getInstalledPackageVersion)(tree, '@angular-devkit/build-angular') ??
32
+ const devkitVersion = (0, version_utils_1.getInstalledAngularDevkitVersion)(tree) ??
33
33
  pkgVersions.angularDevkitVersion;
34
34
  try {
35
35
  (0, devkit_1.ensurePackage)('@angular-devkit/core', devkitVersion);
@@ -1,7 +1,8 @@
1
1
  {
2
- "compilerOptions": {
3
- "target": "es2022"<% if (disableModernClassFieldsBehavior) { %>,
4
- "useDefineForClassFields": false<% } %>
2
+ "extends": "<%= rootTsConfig %>",
3
+ "compilerOptions": {},
4
+ "angularCompilerOptions": {
5
+ "enableI18nLegacyMessageIdFormat": false
5
6
  },
6
7
  "files": [],
7
8
  "include": [],
@@ -9,6 +10,5 @@
9
10
  {
10
11
  "path": "./tsconfig.lib.json"
11
12
  }
12
- ],
13
- "extends": "<%= rootTsConfig %>"
13
+ ]
14
14
  }
@@ -1,2 +1,2 @@
1
- <% if (!skipModule) { %>export * from './lib/<%= libFileName %>.module';<% } %><% if(routing) { %>
1
+ <% if (!skipModule) { %>export * from './lib/<%= libFileName %><%= moduleTypeSeparator %>module';<% } %><% if(routing) { %>
2
2
  export * from './lib/lib.routes';<% } %>
@@ -1,6 +1,6 @@
1
1
  import { Route } from '@angular/router';
2
- import { <%= libClassName %>Component } from './<%= pathToComponent %>.component';
2
+ import { <%= libClassName %><%= componentType %> } from './<%= pathToComponent %><%= componentFileSuffix %>';
3
3
 
4
4
  export const <%= libPropertyName %>Routes: Route[] = [
5
- { path: '', component: <%= libClassName %>Component }
5
+ { path: '', component: <%= libClassName %><%= componentType %> }
6
6
  ];
@@ -14,6 +14,7 @@ async function addStandaloneComponent(tree, { libraryOptions, componentOptions }
14
14
  : `${componentOptions.name}/${componentOptions.name}`),
15
15
  standalone: true,
16
16
  export: true,
17
+ type: componentOptions.type,
17
18
  skipFormat: true,
18
19
  });
19
20
  if (libraryOptions.routing) {
@@ -14,7 +14,12 @@ function createFiles(tree, options, project) {
14
14
  : (0, devkit_1.joinPathFragments)(options.libraryOptions.fileName, options.libraryOptions.fileName);
15
15
  const version = (0, version_utils_1.getInstalledAngularVersion)(tree);
16
16
  const { major, minor } = (0, semver_1.parse)(version);
17
- const disableModernClassFieldsBehavior = (0, semver_1.lt)(version, '18.1.0-rc.0');
17
+ const componentType = options.componentOptions.type
18
+ ? (0, devkit_1.names)(options.componentOptions.type).className
19
+ : '';
20
+ const componentFileSuffix = options.componentOptions.type
21
+ ? `.${options.componentOptions.type}`
22
+ : '';
18
23
  const substitutions = {
19
24
  libName: options.libraryOptions.name,
20
25
  libFileName: options.libraryOptions.fileName,
@@ -29,7 +34,9 @@ function createFiles(tree, options, project) {
29
34
  importPath: options.libraryOptions.importPath,
30
35
  rootOffset,
31
36
  angularPeerDepVersion: `^${major}.${minor}.0`,
32
- disableModernClassFieldsBehavior,
37
+ componentType,
38
+ componentFileSuffix,
39
+ moduleTypeSeparator: options.libraryOptions.moduleTypeSeparator,
33
40
  tpl: '',
34
41
  };
35
42
  (0, devkit_1.generateFiles)(tree, (0, devkit_1.joinPathFragments)(__dirname, '../files/base'), options.libraryOptions.projectRoot, substitutions);
@@ -39,7 +46,7 @@ function createFiles(tree, options, project) {
39
46
  else {
40
47
  (0, devkit_1.generateFiles)(tree, (0, devkit_1.joinPathFragments)(__dirname, '../files/ng-module'), options.libraryOptions.projectRoot, substitutions);
41
48
  if (options.libraryOptions.skipModule) {
42
- tree.delete((0, devkit_1.joinPathFragments)(project.sourceRoot, `lib/${options.libraryOptions.fileName}.module.ts`));
49
+ tree.delete(options.libraryOptions.modulePath);
43
50
  }
44
51
  }
45
52
  if (!options.libraryOptions.routing) {
@@ -1,4 +1,4 @@
1
- import { Tree } from '@nx/devkit';
2
- import { Schema } from '../schema';
3
- import { NormalizedSchema } from './normalized-schema';
1
+ import { type Tree } from '@nx/devkit';
2
+ import type { Schema } from '../schema';
3
+ import type { NormalizedSchema } from './normalized-schema';
4
4
  export declare function normalizeOptions(host: Tree, schema: Schema): Promise<NormalizedSchema>;
@@ -4,6 +4,7 @@ exports.normalizeOptions = normalizeOptions;
4
4
  const devkit_1 = require("@nx/devkit");
5
5
  const project_name_and_root_utils_1 = require("@nx/devkit/src/generators/project-name-and-root-utils");
6
6
  const test_runners_1 = require("../../../utils/test-runners");
7
+ const artifact_types_1 = require("../../utils/artifact-types");
7
8
  async function normalizeOptions(host, schema) {
8
9
  schema.standalone = schema.standalone ?? true;
9
10
  // Create a schema with populated default values
@@ -35,7 +36,8 @@ async function normalizeOptions(host, schema) {
35
36
  const parsedTags = options.tags
36
37
  ? options.tags.split(',').map((s) => s.trim())
37
38
  : [];
38
- const modulePath = `${projectRoot}/src/lib/${fileName}.module.ts`;
39
+ const moduleTypeSeparator = (0, artifact_types_1.getModuleTypeSeparator)(host);
40
+ const modulePath = `${projectRoot}/src/lib/${fileName}${moduleTypeSeparator}module.ts`;
39
41
  const ngCliSchematicLibRoot = projectName;
40
42
  const allNormalizedOptions = {
41
43
  ...options,
@@ -53,8 +55,10 @@ async function normalizeOptions(host, schema) {
53
55
  ngCliSchematicLibRoot,
54
56
  skipTests: options.unitTestRunner === 'none' ? true : options.skipTests,
55
57
  standaloneComponentName: `${(0, devkit_1.names)(projectNames.projectSimpleName).className}Component`,
58
+ moduleTypeSeparator,
56
59
  };
57
60
  const { displayBlock, inlineStyle, inlineTemplate, viewEncapsulation, changeDetection, style, skipTests, selector, skipSelector, flat, ...libraryOptions } = allNormalizedOptions;
61
+ const componentType = (0, artifact_types_1.getComponentType)(host);
58
62
  return {
59
63
  libraryOptions,
60
64
  componentOptions: {
@@ -70,6 +74,7 @@ async function normalizeOptions(host, schema) {
70
74
  selector,
71
75
  skipSelector,
72
76
  flat,
77
+ type: componentType,
73
78
  },
74
79
  };
75
80
  }
@@ -36,6 +36,7 @@ export interface NormalizedSchema {
36
36
  parsedTags: string[];
37
37
  ngCliSchematicLibRoot: string;
38
38
  standaloneComponentName: string;
39
+ moduleTypeSeparator: '-' | '.';
39
40
  };
40
41
  componentOptions: {
41
42
  name: string;
@@ -50,5 +51,6 @@ export interface NormalizedSchema {
50
51
  selector?: string;
51
52
  skipSelector?: boolean;
52
53
  flat?: boolean;
54
+ type?: string;
53
55
  };
54
56
  }
@@ -8,6 +8,7 @@ function setGeneratorDefaults(tree, options) {
8
8
  nxJson.generators['@nx/angular:library'] = {
9
9
  linter: options.libraryOptions.linter,
10
10
  unitTestRunner: options.libraryOptions.unitTestRunner,
11
+ strict: !options.libraryOptions.strict ? false : undefined,
11
12
  ...(nxJson.generators['@nx/angular:library'] || {}),
12
13
  };
13
14
  (0, devkit_1.updateNxJson)(tree, nxJson);
@@ -0,0 +1,3 @@
1
+ import { type Tree } from '@nx/devkit';
2
+ import type { NormalizedSchema } from './normalized-schema';
3
+ export declare function updateTsConfigFiles(tree: Tree, options: NormalizedSchema['libraryOptions']): void;
@@ -0,0 +1,85 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.updateTsConfigFiles = updateTsConfigFiles;
4
+ const devkit_1 = require("@nx/devkit");
5
+ const js_1 = require("@nx/js");
6
+ const configuration_1 = require("@nx/js/src/utils/typescript/configuration");
7
+ const semver_1 = require("semver");
8
+ const update_project_root_tsconfig_1 = require("../../utils/update-project-root-tsconfig");
9
+ const version_utils_1 = require("../../utils/version-utils");
10
+ function updateTsConfigFiles(tree, options) {
11
+ (0, js_1.extractTsConfigBase)(tree);
12
+ updateProjectConfig(tree, options);
13
+ updateProjectIvyConfig(tree, options);
14
+ (0, js_1.addTsConfigPath)(tree, options.importPath, [
15
+ (0, devkit_1.joinPathFragments)(options.projectRoot, './src', 'index.ts'),
16
+ ]);
17
+ const compilerOptions = {
18
+ skipLibCheck: true,
19
+ experimentalDecorators: true,
20
+ importHelpers: true,
21
+ target: 'es2022',
22
+ ...(options.strict
23
+ ? {
24
+ strict: true,
25
+ noImplicitOverride: true,
26
+ noPropertyAccessFromIndexSignature: true,
27
+ noImplicitReturns: true,
28
+ noFallthroughCasesInSwitch: true,
29
+ }
30
+ : {}),
31
+ };
32
+ const { major: angularMajorVersion, version: angularVersion } = (0, version_utils_1.getInstalledAngularVersionInfo)(tree);
33
+ if ((0, semver_1.lt)(angularVersion, '18.1.0')) {
34
+ compilerOptions.useDefineForClassFields = false;
35
+ }
36
+ if (angularMajorVersion >= 20) {
37
+ compilerOptions.module = 'preserve';
38
+ }
39
+ else {
40
+ compilerOptions.moduleResolution = 'bundler';
41
+ compilerOptions.module = 'es2022';
42
+ }
43
+ (0, devkit_1.updateJson)(tree, `${options.projectRoot}/tsconfig.json`, (json) => {
44
+ json.compilerOptions = {
45
+ ...json.compilerOptions,
46
+ ...compilerOptions,
47
+ };
48
+ json.compilerOptions = (0, configuration_1.getNeededCompilerOptionOverrides)(tree, json.compilerOptions, (0, js_1.getRootTsConfigFileName)(tree));
49
+ if (options.strict) {
50
+ json.angularCompilerOptions = {
51
+ ...json.angularCompilerOptions,
52
+ strictInjectionParameters: true,
53
+ strictInputAccessModifiers: true,
54
+ typeCheckHostBindings: angularMajorVersion >= 20 ? true : undefined,
55
+ strictTemplates: true,
56
+ };
57
+ }
58
+ return json;
59
+ });
60
+ }
61
+ function updateProjectConfig(host, options) {
62
+ (0, devkit_1.updateJson)(host, `${options.projectRoot}/tsconfig.lib.json`, (json) => {
63
+ json.include = ['src/**/*.ts'];
64
+ json.exclude = [
65
+ ...new Set([
66
+ ...(json.exclude || []),
67
+ 'jest.config.ts',
68
+ 'src/**/*.test.ts',
69
+ 'src/**/*.spec.ts',
70
+ ]),
71
+ ];
72
+ return json;
73
+ });
74
+ // tsconfig.json
75
+ (0, update_project_root_tsconfig_1.updateProjectRootTsConfig)(host, options.projectRoot, (0, js_1.getRelativePathToRootTsConfig)(host, options.projectRoot));
76
+ }
77
+ function updateProjectIvyConfig(host, options) {
78
+ if (options.buildable || options.publishable) {
79
+ return (0, devkit_1.updateJson)(host, `${options.projectRoot}/tsconfig.lib.prod.json`, (json) => {
80
+ json.angularCompilerOptions['compilationMode'] =
81
+ options.compilationMode === 'full' ? undefined : 'partial';
82
+ return json;
83
+ });
84
+ }
85
+ }