@nx/angular 21.1.1 → 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,19 +3,27 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.normalizeOptions = normalizeOptions;
4
4
  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
+ const artifact_types_1 = require("../../utils/artifact-types");
6
7
  const validations_1 = require("../../utils/validations");
8
+ const version_utils_1 = require("../../utils/version-utils");
7
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
+ }
8
14
  const { artifactName: name, directory, fileName, filePath, project: projectName, } = await (0, artifact_name_and_directory_utils_1.determineArtifactNameAndDirectoryOptions)(tree, {
9
15
  name: options.name,
10
16
  path: options.path,
11
- suffix: 'directive',
17
+ suffix: options.type,
12
18
  allowedFileExtensions: ['ts'],
13
19
  fileExtension: 'ts',
14
20
  });
15
21
  const { className } = (0, devkit_1.names)(name);
16
- const { className: suffixClassName } = (0, devkit_1.names)('directive');
22
+ const suffixClassName = options.type ? (0, devkit_1.names)(options.type).className : '';
17
23
  const symbolName = `${className}${suffixClassName}`;
18
24
  (0, validations_1.validateClassName)(symbolName);
25
+ const moduleTypeSeparator = (0, artifact_types_1.getModuleTypeSeparator)(tree);
26
+ const modulePath = (0, devkit_1.joinPathFragments)(directory, `${name}${moduleTypeSeparator}module.ts`);
19
27
  return {
20
28
  ...options,
21
29
  export: options.export ?? true,
@@ -26,5 +34,6 @@ async function normalizeOptions(tree, options) {
26
34
  name,
27
35
  symbolName,
28
36
  projectName,
37
+ modulePath,
29
38
  };
30
39
  }
@@ -6,6 +6,7 @@ export interface Schema {
6
6
  prefix?: string;
7
7
  selector?: string;
8
8
  export?: boolean;
9
+ type?: string;
9
10
  skipFormat?: boolean;
10
11
  }
11
12
 
@@ -18,4 +19,5 @@ export interface NormalizedSchema extends Schema {
18
19
  inlineScam: boolean;
19
20
  symbolName: string;
20
21
  projectName: string;
22
+ modulePath: string;
21
23
  }
@@ -10,11 +10,15 @@
10
10
  "command": "nx g @nx/angular:scam-directive mylib/src/lib/foo.directive.ts"
11
11
  },
12
12
  {
13
- "description": "Generate a directive without providing the file extension. It results in the directive `FooDirective` at `mylib/src/lib/foo.directive.ts`",
13
+ "description": "Generate a directive without providing the file extension. It results in the directive `Foo` at `mylib/src/lib/foo.ts`",
14
14
  "command": "nx g @nx/angular:scam-directive mylib/src/lib/foo"
15
15
  },
16
16
  {
17
- "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`",
17
+ "description": "Generate a directive with a given type/suffix. It results in the directive `FooDirective` at `mylib/src/lib/foo.directive.ts`",
18
+ "command": "nx g @nx/angular:scam-directive mylib/src/lib/foo --type=directive"
19
+ },
20
+ {
21
+ "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`",
18
22
  "command": "nx g @nx/angular:scam-directive mylib/src/lib/foo --name=custom"
19
23
  }
20
24
  ],
@@ -70,6 +74,10 @@
70
74
  "default": true,
71
75
  "x-priority": "important"
72
76
  },
77
+ "type": {
78
+ "type": "string",
79
+ "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."
80
+ },
73
81
  "skipFormat": {
74
82
  "description": "Skip formatting files.",
75
83
  "type": "boolean",
@@ -1,7 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.convertPipeToScam = convertPipeToScam;
4
- const devkit_1 = require("@nx/devkit");
5
4
  const js_1 = require("@nx/js");
6
5
  const ensure_typescript_1 = require("@nx/js/src/utils/typescript/ensure-typescript");
7
6
  let tsModule;
@@ -22,8 +21,7 @@ function convertPipeToScam(tree, options) {
22
21
  tree.write(options.filePath, updatedPipeSource);
23
22
  return;
24
23
  }
25
- const scamFilePath = (0, devkit_1.joinPathFragments)(options.directory, `${options.name}.module.ts`);
26
- tree.write(scamFilePath, getModuleFileContent(options.symbolName, options.fileName));
24
+ tree.write(options.modulePath, getModuleFileContent(options.symbolName, options.fileName));
27
25
  }
28
26
  function getModuleFileContent(pipeClassName, pipeFileName) {
29
27
  return `import { NgModule } from '@angular/core';
@@ -3,12 +3,17 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.normalizeOptions = normalizeOptions;
4
4
  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
+ const artifact_types_1 = require("../../utils/artifact-types");
6
7
  const validations_1 = require("../../utils/validations");
8
+ const version_utils_1 = require("../../utils/version-utils");
7
9
  async function normalizeOptions(tree, options) {
10
+ const { major: angularMajorVersion } = (0, version_utils_1.getInstalledAngularVersionInfo)(tree);
11
+ options.typeSeparator ??= angularMajorVersion < 20 ? '.' : '-';
8
12
  const { artifactName: name, directory, fileName, filePath, project: projectName, } = await (0, artifact_name_and_directory_utils_1.determineArtifactNameAndDirectoryOptions)(tree, {
9
13
  name: options.name,
10
14
  path: options.path,
11
15
  suffix: 'pipe',
16
+ suffixSeparator: options.typeSeparator,
12
17
  allowedFileExtensions: ['ts'],
13
18
  fileExtension: 'ts',
14
19
  });
@@ -16,6 +21,8 @@ async function normalizeOptions(tree, options) {
16
21
  const { className: suffixClassName } = (0, devkit_1.names)('pipe');
17
22
  const symbolName = `${className}${suffixClassName}`;
18
23
  (0, validations_1.validateClassName)(symbolName);
24
+ const moduleTypeSeparator = (0, artifact_types_1.getModuleTypeSeparator)(tree);
25
+ const modulePath = (0, devkit_1.joinPathFragments)(directory, `${name}${moduleTypeSeparator}module.ts`);
19
26
  return {
20
27
  ...options,
21
28
  export: options.export ?? true,
@@ -26,5 +33,6 @@ async function normalizeOptions(tree, options) {
26
33
  name,
27
34
  symbolName,
28
35
  projectName,
36
+ modulePath,
29
37
  };
30
38
  }
@@ -4,6 +4,7 @@ export interface Schema {
4
4
  skipTests?: boolean;
5
5
  inlineScam?: boolean;
6
6
  export?: boolean;
7
+ typeSeparator?: string;
7
8
  skipFormat?: boolean;
8
9
  }
9
10
 
@@ -16,4 +17,5 @@ export interface NormalizedSchema extends Schema {
16
17
  inlineScam: boolean;
17
18
  projectName: string;
18
19
  symbolName: string;
20
+ modulePath: string;
19
21
  }
@@ -51,6 +51,11 @@
51
51
  "default": true,
52
52
  "x-priority": "important"
53
53
  },
54
+ "typeSeparator": {
55
+ "type": "string",
56
+ "enum": ["-", "."],
57
+ "description": "The separator character to use before the type within the generated file's name. For example, if you set the option to `.`, the file will be named `example.pipe.ts`. It defaults to '-' for Angular v20+. For versions below v20, it defaults to '.'."
58
+ },
54
59
  "skipFormat": {
55
60
  "description": "Skip formatting files.",
56
61
  "type": "boolean",
@@ -2,17 +2,17 @@ import { NgModule } from '@angular/core';
2
2
  import { CommonModule } from '@angular/common';<% if(routing) { %>
3
3
  import { RouterModule } from '@angular/router';<% } %>
4
4
 
5
- import { RemoteEntryComponent } from './entry.component';
6
- import { NxWelcomeComponent } from './nx-welcome.component';<% if(routing) { %>
5
+ import { RemoteEntry<%= componentType %> } from './entry<%= componentFileSuffix %>';
6
+ import { <%= nxWelcomeSymbolName %> } from './<%= nxWelcomeFileName %>';<% if(routing) { %>
7
7
  import { remoteRoutes } from './entry.routes';<% } %>
8
8
 
9
9
  @NgModule({
10
- declarations: [RemoteEntryComponent, NxWelcomeComponent],
10
+ declarations: [RemoteEntry<%= componentType %>, <%= nxWelcomeSymbolName %>],
11
11
  imports: [
12
12
  CommonModule,<% if(routing) { %>
13
13
  RouterModule.forChild(remoteRoutes),<% } %>
14
14
  ],
15
15
  providers: [],<% if(!routing) { %>
16
- exports: [RemoteEntryComponent],<% } %>
16
+ exports: [RemoteEntry<%= componentType %>],<% } %>
17
17
  })
18
18
  export class RemoteEntryModule {}
@@ -1,4 +1,4 @@
1
1
  import { Route } from '@angular/router';
2
- import { RemoteEntryComponent } from './entry.component';
2
+ import { RemoteEntry<%= componentType %> } from './entry<%= componentFileSuffix %>';
3
3
 
4
- export const remoteRoutes: Route[] = [{ path: '', component: RemoteEntryComponent }];
4
+ export const remoteRoutes: Route[] = [{ path: '', component: RemoteEntry<%= componentType %> }];
@@ -7,4 +7,4 @@ import { Component } from '@angular/core';
7
7
  selector: '<%= appName %>-entry',
8
8
  template: `<nx-welcome></nx-welcome>`<% } %>
9
9
  })
10
- export class RemoteEntryComponent {}
10
+ export class RemoteEntry<%= componentType %> {}
@@ -0,0 +1,43 @@
1
+ import { fakeAsync, TestBed, tick } from '@angular/core/testing';
2
+ import { <%= appSymbolName %> } from './<%= appFileName %>';
3
+ import { <%= nxWelcomeSymbolName %> } from './<%= nxWelcomeFileName %>';
4
+ import { Router, RouterModule } from '@angular/router';
5
+
6
+ describe('<%= appSymbolName %>', () => {
7
+ beforeEach(async () => {
8
+ await TestBed.configureTestingModule({
9
+ imports: [
10
+ RouterModule.forRoot([
11
+ { path: '', component: <%= nxWelcomeSymbolName %> },
12
+ ]),<% if (standalone) { %>
13
+ <%= appSymbolName %>,
14
+ <%= nxWelcomeSymbolName %>,<% } %>
15
+ ],<% if (!standalone) { %>
16
+ declarations: [<%= appSymbolName %>, <%= nxWelcomeSymbolName %>],<% } %>
17
+ }).compileComponents();
18
+ });
19
+
20
+ it('should create the app', () => {
21
+ const fixture = TestBed.createComponent(<%= appSymbolName %>);
22
+ const app = fixture.componentInstance;
23
+ expect(app).toBeTruthy();
24
+ });
25
+
26
+ it(`should have as title '<%= appName %>'`, () => {
27
+ const fixture = TestBed.createComponent(<%= appSymbolName %>);
28
+ const app = fixture.componentInstance;
29
+ expect(app.title).toEqual('<%= appName %>');
30
+ });
31
+
32
+ it('should render title', fakeAsync(() => {
33
+ const fixture = TestBed.createComponent(<%= appSymbolName %>);
34
+ const router = TestBed.inject(Router);
35
+ fixture.ngZone?.run(() => router.navigate(['']));
36
+ tick();
37
+ fixture.detectChanges();
38
+ const compiled = fixture.nativeElement as HTMLElement;
39
+ expect(compiled.querySelector('h1')?.textContent).toContain(
40
+ 'Welcome <%= appName %>'
41
+ );
42
+ }));
43
+ });
@@ -1,4 +1,4 @@
1
1
  import { Route } from '@angular/router';
2
- import { RemoteEntryComponent } from './entry.component';
2
+ import { RemoteEntry<%= componentType %> } from './entry<%= componentFileSuffix %>';
3
3
 
4
- export const remoteRoutes: Route[] = [{ path: '', component: RemoteEntryComponent }];
4
+ export const remoteRoutes: Route[] = [{ path: '', component: RemoteEntry<%= componentType %> }];
@@ -1,13 +1,13 @@
1
1
  import { Component } from '@angular/core';
2
2
  import { CommonModule } from '@angular/common';
3
- import { NxWelcomeComponent } from './nx-welcome.component';
3
+ import { <%= nxWelcomeSymbolName %> } from './<%= nxWelcomeFileName %>';
4
4
 
5
5
  @Component({<% if (setStandaloneTrue) { %>
6
6
  standalone: true,<% } %>
7
- imports: [CommonModule, NxWelcomeComponent],<% if (prefix) { %>
7
+ imports: [CommonModule, <%= nxWelcomeSymbolName %>],<% if (prefix) { %>
8
8
  selector: '<%= prefix %>-<%= appName %>-entry',
9
9
  template: `<<%= prefix %>-nx-welcome></<%= prefix %>-nx-welcome>`<% } else { %>
10
10
  selector: '<%= appName %>-entry',
11
11
  template: `<nx-welcome></nx-welcome>`<% } %>
12
12
  })
13
- export class RemoteEntryComponent {}
13
+ export class RemoteEntry<%= componentType %> {}
@@ -17,7 +17,7 @@ const config: ModuleFederationConfig = {
17
17
  remotes: [<% if (federationType === 'static') { remotes.forEach(function(remote) { %>'<%= remote.remoteName %>',<% }); } %>]<% } %><% if(type === 'remote') { %>
18
18
  exposes: {<% if(standalone) { %>
19
19
  './Routes': '<%= projectRoot %>/src/app/remote-entry/entry.routes.ts',<% } else { %>
20
- './Module': '<%= projectRoot %>/src/app/remote-entry/entry.module.ts',<% } %>
20
+ './Module': '<%= projectRoot %>/src/app/remote-entry/<%= entryModuleFileName %>.ts',<% } %>
21
21
  },<% } %>
22
22
  };
23
23
 
@@ -5,7 +5,7 @@
5
5
  },
6
6
  "include": [
7
7
  "src/main.ts",
8
- <% if(type === "remote") { %> "src/remote-entry/<% if(standalone) { %>entry.routes.ts", <% } else { %> entry.module.ts", <% } } %>
8
+ <% if(type === "remote") { %> "src/remote-entry/<% if(standalone) { %>entry.routes.ts",<% } else { %><%= entryModuleFileName %>.ts",<% } } %>
9
9
  "webpack.config.ts",
10
10
  "webpack.prod.config.ts"
11
11
  ]
@@ -18,6 +18,6 @@ module.exports = {
18
18
  remotes: [<% if (federationType === 'static') { remotes.forEach(function(remote) { %>'<%= remote.remoteName %>',<% }); } %>]<% } %><% if(type === 'remote') { %>
19
19
  exposes: {<% if(standalone) { %>
20
20
  './Routes': '<%= projectRoot %>/src/app/remote-entry/entry.routes.ts',<% } else { %>
21
- './Module': '<%= projectRoot %>/src/app/remote-entry/entry.module.ts',<% } %>
21
+ './Module': '<%= projectRoot %>/src/app/remote-entry/<%= entryModuleFileName %>.ts',<% } %>
22
22
  },<% } %>
23
23
  };
@@ -1,3 +1,3 @@
1
1
  import type { Tree } from '@nx/devkit';
2
- import type { Schema } from '../schema';
3
- export declare function addRemoteEntry(tree: Tree, { appName, routing, prefix, standalone }: Schema, appRoot: string): void;
2
+ import type { NormalizedOptions } from '../schema';
3
+ export declare function addRemoteEntry(tree: Tree, options: NormalizedOptions, appRoot: string): void;
@@ -4,8 +4,9 @@ exports.addRemoteEntry = addRemoteEntry;
4
4
  const devkit_1 = require("@nx/devkit");
5
5
  const route_utils_1 = require("../../../utils/nx-devkit/route-utils");
6
6
  const version_utils_1 = require("../../utils/version-utils");
7
- function addRemoteEntry(tree, { appName, routing, prefix, standalone }, appRoot) {
7
+ function addRemoteEntry(tree, options, appRoot) {
8
8
  const { major: angularMajorVersion } = (0, version_utils_1.getInstalledAngularVersionInfo)(tree);
9
+ const { appName, routing, prefix, standalone, componentType, componentFileSuffix, nxWelcomeComponentInfo, entryModuleFileName, } = options;
9
10
  (0, devkit_1.generateFiles)(tree, standalone
10
11
  ? (0, devkit_1.joinPathFragments)(__dirname, '../files/standalone-entry-component-files')
11
12
  : (0, devkit_1.joinPathFragments)(__dirname, '../files/entry-module-files'), `${appRoot}/src/app/remote-entry`, {
@@ -13,14 +14,19 @@ function addRemoteEntry(tree, { appName, routing, prefix, standalone }, appRoot)
13
14
  appName,
14
15
  routing,
15
16
  prefix,
16
- // Angular v19 or higher defaults to true, while v18 or lower defaults to false
17
+ // Angular v19 or higher defaults to true, while lower versions default to false
17
18
  setStandaloneFalse: angularMajorVersion >= 19,
18
19
  setStandaloneTrue: angularMajorVersion < 19,
20
+ componentType,
21
+ componentFileSuffix,
22
+ entryModuleFileName,
23
+ nxWelcomeFileName: nxWelcomeComponentInfo.extensionlessFileName,
24
+ nxWelcomeSymbolName: nxWelcomeComponentInfo.symbolName,
19
25
  });
20
26
  if (standalone && routing) {
21
27
  (0, route_utils_1.addRoute)(tree, (0, devkit_1.joinPathFragments)(appRoot, 'src/app/app.routes.ts'), `{path: '', loadChildren: () => import('./remote-entry/entry.routes').then(m => m.remoteRoutes)}`);
22
28
  }
23
29
  else if (routing) {
24
- (0, route_utils_1.addRoute)(tree, (0, devkit_1.joinPathFragments)(appRoot, 'src/app/app.routes.ts'), `{ path: '', loadChildren: () => import('./remote-entry/entry.module').then(m => m.RemoteEntryModule) }`);
30
+ (0, route_utils_1.addRoute)(tree, (0, devkit_1.joinPathFragments)(appRoot, 'src/app/app.routes.ts'), `{ path: '', loadChildren: () => import('./remote-entry/${entryModuleFileName}').then(m => m.RemoteEntryModule) }`);
25
31
  }
26
32
  }
@@ -105,7 +105,17 @@ function addLazyLoadedRouteToHostAppModule(tree, options, hostFederationType) {
105
105
  path: '${options.appName}',
106
106
  loadChildren: () => ${routeToAdd}.then(m => m!.${exportedRemote})
107
107
  }`);
108
- const pathToAppComponentTemplate = (0, devkit_1.joinPathFragments)(hostAppConfig.sourceRoot, 'app/app.component.html');
108
+ let pathToAppComponentTemplate = (0, devkit_1.joinPathFragments)(hostAppConfig.sourceRoot, 'app/app.component.html');
109
+ const candidatePaths = [
110
+ pathToAppComponentTemplate,
111
+ (0, devkit_1.joinPathFragments)(hostAppConfig.sourceRoot, 'app/app.html'),
112
+ ];
113
+ for (const path of candidatePaths) {
114
+ if (tree.exists(path)) {
115
+ pathToAppComponentTemplate = path;
116
+ break;
117
+ }
118
+ }
109
119
  const appComponent = tree.read(pathToAppComponentTemplate, 'utf-8');
110
120
  if (appComponent.includes(`<ul class="remote-menu">`) &&
111
121
  appComponent.includes('</ul>')) {
@@ -1,3 +1,3 @@
1
1
  import { type Tree } from '@nx/devkit';
2
- import type { Schema } from '../schema';
3
- export declare function fixBootstrap(tree: Tree, appRoot: string, options: Schema): void;
2
+ import type { NormalizedOptions } from '../schema';
3
+ export declare function fixBootstrap(tree: Tree, appRoot: string, options: NormalizedOptions): void;
@@ -6,7 +6,7 @@ function fixBootstrap(tree, appRoot, options) {
6
6
  const mainFilePath = (0, devkit_1.joinPathFragments)(appRoot, 'src/main.ts');
7
7
  const bootstrapCode = tree.read(mainFilePath, 'utf-8');
8
8
  if (options.standalone && options.mfType === 'remote') {
9
- tree.write(`${appRoot}/src/bootstrap.ts`, standaloneBootstrapCode());
9
+ tree.write(`${appRoot}/src/bootstrap.ts`, standaloneBootstrapCode(options.componentType, options.componentFileSuffix));
10
10
  }
11
11
  else {
12
12
  tree.write((0, devkit_1.joinPathFragments)(appRoot, 'src/bootstrap.ts'), bootstrapCode);
@@ -30,11 +30,11 @@ fetch('${manifestPath}')
30
30
  tree.write(mainFilePath, fetchMFManifestCode);
31
31
  }
32
32
  }
33
- const standaloneBootstrapCode = () => `import { bootstrapApplication } from '@angular/platform-browser';
33
+ const standaloneBootstrapCode = (componentType, componentFileSuffix) => `import { bootstrapApplication } from '@angular/platform-browser';
34
34
  import { appConfig } from './app/app.config';
35
- import { RemoteEntryComponent } from './app/remote-entry/entry.component';
35
+ import { RemoteEntry${componentType} } from './app/remote-entry/entry${componentFileSuffix}';
36
36
 
37
- bootstrapApplication(RemoteEntryComponent, appConfig).catch((err) =>
37
+ bootstrapApplication(RemoteEntry${componentType}, appConfig).catch((err) =>
38
38
  console.error(err)
39
39
  );
40
40
  `;
@@ -1,6 +1,6 @@
1
1
  import type { Tree } from '@nx/devkit';
2
- import type { Schema } from '../schema';
3
- export declare function generateWebpackConfig(tree: Tree, options: Schema, appRoot: string, remotesWithPorts: {
2
+ import type { NormalizedOptions } from '../schema';
3
+ export declare function generateWebpackConfig(tree: Tree, options: NormalizedOptions, appRoot: string, remotesWithPorts: {
4
4
  remoteName: string;
5
5
  port: number;
6
6
  }[]): void;
@@ -23,6 +23,7 @@ function generateWebpackConfig(tree, options, appRoot, remotesWithPorts) {
23
23
  remotes: remotesWithPorts ?? [],
24
24
  projectRoot: appRoot,
25
25
  standalone: options.standalone,
26
+ entryModuleFileName: options.entryModuleFileName,
26
27
  });
27
28
  if (!options.setParserOptionsProject) {
28
29
  tree.delete((0, devkit_1.joinPathFragments)(appRoot, 'tsconfig.lint.json'));
@@ -1,3 +1,3 @@
1
- import type { Tree } from '@nx/devkit';
1
+ import { type Tree } from '@nx/devkit';
2
2
  import type { NormalizedOptions, Schema } from '../schema';
3
3
  export declare function normalizeOptions(tree: Tree, options: Schema): NormalizedOptions;
@@ -1,13 +1,26 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.normalizeOptions = normalizeOptions;
4
+ const devkit_1 = require("@nx/devkit");
5
+ const app_components_info_1 = require("../../utils/app-components-info");
6
+ const artifact_types_1 = require("../../utils/artifact-types");
4
7
  const project_1 = require("../../utils/project");
5
8
  function normalizeOptions(tree, options) {
9
+ const componentType = (0, artifact_types_1.getComponentType)(tree);
10
+ const componentFileSuffix = componentType ? `.${componentType}` : '';
11
+ const moduleTypeSeparator = (0, artifact_types_1.getModuleTypeSeparator)(tree);
12
+ const entryModuleFileName = `entry${moduleTypeSeparator}module`;
13
+ const project = (0, devkit_1.readProjectConfiguration)(tree, options.appName);
6
14
  return {
7
15
  ...options,
8
16
  typescriptConfiguration: options.typescriptConfiguration ?? true,
9
17
  federationType: options.federationType ?? 'static',
10
18
  prefix: options.prefix ?? (0, project_1.getProjectPrefix)(tree, options.appName) ?? 'app',
11
19
  standalone: options.standalone ?? true,
20
+ componentType: componentType ? (0, devkit_1.names)(componentType).className : '',
21
+ componentFileSuffix,
22
+ entryModuleFileName,
23
+ appComponentInfo: (0, app_components_info_1.getAppComponentInfo)(tree, componentFileSuffix, project),
24
+ nxWelcomeComponentInfo: (0, app_components_info_1.getNxWelcomeComponentInfo)(tree, componentFileSuffix, project),
12
25
  };
13
26
  }
@@ -1,3 +1,3 @@
1
1
  import type { Tree } from '@nx/devkit';
2
- import { Schema } from '../schema';
3
- export declare function removeDeadCodeFromRemote(tree: Tree, options: Schema): void;
2
+ import type { NormalizedOptions } from '../schema';
3
+ export declare function removeDeadCodeFromRemote(tree: Tree, options: NormalizedOptions): void;
@@ -5,46 +5,50 @@ const devkit_1 = require("@nx/devkit");
5
5
  function removeDeadCodeFromRemote(tree, options) {
6
6
  const projectName = options.appName;
7
7
  const project = (0, devkit_1.readProjectConfiguration)(tree, projectName);
8
+ const { appComponentInfo, nxWelcomeComponentInfo, entryModuleFileName } = options;
8
9
  ['css', 'less', 'scss', 'sass'].forEach((style) => {
9
- const pathToComponentStyle = (0, devkit_1.joinPathFragments)(project.sourceRoot, `app/app.component.${style}`);
10
+ const pathToComponentStyle = (0, devkit_1.joinPathFragments)(project.sourceRoot, `app/${appComponentInfo.extensionlessFileName}.${style}`);
10
11
  if (tree.exists(pathToComponentStyle)) {
11
12
  tree.delete(pathToComponentStyle);
12
13
  }
13
14
  });
14
- tree.rename((0, devkit_1.joinPathFragments)(project.sourceRoot, 'app/nx-welcome.component.ts'), (0, devkit_1.joinPathFragments)(project.sourceRoot, 'app/remote-entry/nx-welcome.component.ts'));
15
- tree.delete((0, devkit_1.joinPathFragments)(project.sourceRoot, 'app/app.component.spec.ts'));
16
- tree.delete((0, devkit_1.joinPathFragments)(project.sourceRoot, 'app/app.component.html'));
17
- const pathToAppComponent = (0, devkit_1.joinPathFragments)(project.sourceRoot, 'app/app.component.ts');
15
+ tree.rename(nxWelcomeComponentInfo.path, (0, devkit_1.joinPathFragments)(project.sourceRoot, `app/remote-entry/${nxWelcomeComponentInfo.fileName}`));
16
+ tree.delete((0, devkit_1.joinPathFragments)(project.sourceRoot, `app/${appComponentInfo.extensionlessFileName}.spec.ts`));
17
+ tree.delete((0, devkit_1.joinPathFragments)(project.sourceRoot, `app/${appComponentInfo.extensionlessFileName}.html`));
18
18
  if (!options.standalone) {
19
- const componentContents = tree.read(pathToAppComponent, 'utf-8');
19
+ const componentContents = tree.read(appComponentInfo.path, 'utf-8');
20
20
  const isInlineTemplate = !componentContents.includes('templateUrl');
21
21
  const component = componentContents.split(isInlineTemplate ? 'template' : 'templateUrl')[0] +
22
22
  `template: '<router-outlet></router-outlet>'
23
23
 
24
24
  })
25
- export class AppComponent {}`;
26
- tree.write(pathToAppComponent, component);
27
- tree.write((0, devkit_1.joinPathFragments)(project.sourceRoot, 'app/app.module.ts'), `import { NgModule } from '@angular/core';
25
+ export class ${appComponentInfo.symbolName} {}`;
26
+ tree.write(appComponentInfo.path, component);
27
+ let modulePath = (0, devkit_1.joinPathFragments)(project.sourceRoot, 'app/app.module.ts');
28
+ if (!tree.exists(modulePath)) {
29
+ modulePath = (0, devkit_1.joinPathFragments)(project.sourceRoot, 'app/app-module.ts');
30
+ }
31
+ tree.write(modulePath, `import { NgModule } from '@angular/core';
28
32
  import { BrowserModule } from '@angular/platform-browser';
29
33
  import { RouterModule } from '@angular/router';
30
- import { AppComponent } from './app.component';
34
+ import { ${appComponentInfo.symbolName} } from './${appComponentInfo.extensionlessFileName}';
31
35
 
32
36
  @NgModule({
33
- declarations: [AppComponent],
37
+ declarations: [${appComponentInfo.symbolName}],
34
38
  imports: [
35
39
  BrowserModule,
36
40
  RouterModule.forRoot([{
37
41
  path: '',
38
- loadChildren: () => import('./remote-entry/entry.module').then(m => m.RemoteEntryModule)
42
+ loadChildren: () => import('./remote-entry/${entryModuleFileName}').then(m => m.RemoteEntryModule)
39
43
  }], { initialNavigation: 'enabledBlocking' }),
40
44
  ],
41
45
  providers: [],
42
- bootstrap: [AppComponent],
46
+ bootstrap: [${appComponentInfo.symbolName}],
43
47
  })
44
48
  export class AppModule {}`);
45
49
  }
46
50
  else {
47
- tree.delete(pathToAppComponent);
51
+ tree.delete(appComponentInfo.path);
48
52
  const pathToIndexHtml = project.targets.build.options.index;
49
53
  const indexContents = tree.read(pathToIndexHtml, 'utf-8');
50
54
  const rootSelectorRegex = new RegExp(`${options.prefix || 'app'}-root`, 'ig');
@@ -2,16 +2,12 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.setupHostIfDynamic = setupHostIfDynamic;
4
4
  const devkit_1 = require("@nx/devkit");
5
- const version_utils_1 = require("../../utils/version-utils");
6
5
  function setupHostIfDynamic(tree, options) {
7
6
  if (options.federationType === 'static') {
8
7
  return;
9
8
  }
10
- const { major: angularMajorVersion } = (0, version_utils_1.getInstalledAngularVersionInfo)(tree);
11
9
  const project = (0, devkit_1.readProjectConfiguration)(tree, options.appName);
12
- const pathToMFManifest = angularMajorVersion >= 18
13
- ? (0, devkit_1.joinPathFragments)(project.root, 'public/module-federation.manifest.json')
14
- : (0, devkit_1.joinPathFragments)(project.sourceRoot, 'assets/module-federation.manifest.json');
10
+ const pathToMFManifest = (0, devkit_1.joinPathFragments)(project.root, 'public/module-federation.manifest.json');
15
11
  if (!tree.exists(pathToMFManifest)) {
16
12
  tree.write(pathToMFManifest, '{}');
17
13
  }
@@ -1,3 +1,3 @@
1
1
  import type { Tree } from '@nx/devkit';
2
- import type { Schema } from '../schema';
3
- export declare function setupTspathForRemote(tree: Tree, options: Schema): void;
2
+ import type { NormalizedOptions } from '../schema';
3
+ export declare function setupTspathForRemote(tree: Tree, options: NormalizedOptions): void;
@@ -7,7 +7,7 @@ function setupTspathForRemote(tree, options) {
7
7
  const project = (0, devkit_1.readProjectConfiguration)(tree, options.appName);
8
8
  const exportPath = options.standalone
9
9
  ? `./src/app/remote-entry/entry.routes.ts`
10
- : `./src/app/remote-entry/entry.module.ts`;
10
+ : `./src/app/remote-entry/${options.entryModuleFileName}.ts`;
11
11
  const exportName = options.standalone ? 'Routes' : 'Module';
12
12
  (0, js_1.addTsConfigPath)(tree, `${options.appName.replace(/-/g, '_')}/${exportName}`, [
13
13
  (0, devkit_1.joinPathFragments)(project.root, exportPath),
@@ -1,3 +1,3 @@
1
1
  import { type Tree } from '@nx/devkit';
2
- import type { Schema } from '../schema';
3
- export declare function updateHostAppRoutes(tree: Tree, options: Schema): void;
2
+ import type { NormalizedOptions } from '../schema';
3
+ export declare function updateHostAppRoutes(tree: Tree, options: NormalizedOptions): void;
@@ -3,31 +3,34 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.updateHostAppRoutes = updateHostAppRoutes;
4
4
  const devkit_1 = require("@nx/devkit");
5
5
  const route_utils_1 = require("../../../utils/nx-devkit/route-utils");
6
- const version_utils_1 = require("../../utils/version-utils");
7
6
  function updateHostAppRoutes(tree, options) {
8
7
  const { sourceRoot } = (0, devkit_1.readProjectConfiguration)(tree, options.appName);
9
- tree.write((0, devkit_1.joinPathFragments)(sourceRoot, 'app/app.component.html'), `<ul class="remote-menu">
8
+ const { appComponentInfo, nxWelcomeComponentInfo } = options;
9
+ tree.write((0, devkit_1.joinPathFragments)(sourceRoot, 'app', `${appComponentInfo.extensionlessFileName}.html`), `<ul class="remote-menu">
10
10
  <li><a routerLink="/">Home</a></li>
11
11
  </ul>
12
12
  <router-outlet></router-outlet>
13
13
  `);
14
14
  let pathToHostRootRoutingFile = (0, devkit_1.joinPathFragments)(sourceRoot, 'app/app.routes.ts');
15
- let hostRootRoutingFile = tree.read(pathToHostRootRoutingFile, 'utf-8');
16
- if (!hostRootRoutingFile) {
15
+ if (!tree.exists(pathToHostRootRoutingFile)) {
17
16
  pathToHostRootRoutingFile = (0, devkit_1.joinPathFragments)(sourceRoot, 'app/app-routing.module.ts');
18
- hostRootRoutingFile = tree.read(pathToHostRootRoutingFile, 'utf-8');
17
+ }
18
+ if (!tree.exists(pathToHostRootRoutingFile)) {
19
+ pathToHostRootRoutingFile = (0, devkit_1.joinPathFragments)(sourceRoot, 'app/app-routing-module.ts');
19
20
  }
20
21
  (0, route_utils_1.addRoute)(tree, pathToHostRootRoutingFile, `{
21
22
  path: '',
22
- component: NxWelcomeComponent
23
+ component: ${nxWelcomeComponentInfo.symbolName}
23
24
  }`);
24
- tree.write(pathToHostRootRoutingFile, `import { NxWelcomeComponent } from './nx-welcome.component';
25
+ tree.write(pathToHostRootRoutingFile, `import { ${nxWelcomeComponentInfo.symbolName} } from './${nxWelcomeComponentInfo.extensionlessFileName}';
25
26
  ${tree.read(pathToHostRootRoutingFile, 'utf-8')}`);
26
- const { major: angularMajorVersion } = (0, version_utils_1.getInstalledAngularVersionInfo)(tree);
27
27
  (0, devkit_1.generateFiles)(tree, (0, devkit_1.joinPathFragments)(__dirname, '../files/host-files'), (0, devkit_1.joinPathFragments)(sourceRoot, 'app'), {
28
28
  appName: options.appName,
29
29
  standalone: options.standalone,
30
- useRouterTestingModule: angularMajorVersion < 18,
30
+ appFileName: appComponentInfo.extensionlessFileName,
31
+ appSymbolName: appComponentInfo.symbolName,
32
+ nxWelcomeFileName: nxWelcomeComponentInfo.extensionlessFileName,
33
+ nxWelcomeSymbolName: nxWelcomeComponentInfo.symbolName,
31
34
  tmpl: '',
32
35
  });
33
36
  }
@@ -1,3 +1,3 @@
1
1
  import type { Tree } from '@nx/devkit';
2
- import type { Schema } from '../schema';
3
- export declare function updateTsConfig(tree: Tree, schema: Schema): void;
2
+ import type { NormalizedOptions } from '../schema';
3
+ export declare function updateTsConfig(tree: Tree, options: NormalizedOptions): void;