@nx/angular 20.2.0-canary.20241130-ec5a5e6 → 20.2.0-canary.20241204-75b2080

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 (229) hide show
  1. package/executors.json +1 -1
  2. package/fesm2022/nx-angular-mf.mjs.map +1 -1
  3. package/fesm2022/nx-angular-testing.mjs.map +1 -1
  4. package/fesm2022/nx-angular.mjs.map +1 -1
  5. package/generators.json +1 -1
  6. package/migrations.json +160 -1
  7. package/package.json +12 -19
  8. package/src/builders/dev-server/lib/normalize-options.js +3 -0
  9. package/src/builders/dev-server/lib/validate-options.js +1 -9
  10. package/src/builders/dev-server/schema.json +3 -4
  11. package/src/executors/application/application.impl.d.ts +1 -1
  12. package/src/executors/application/application.impl.js +4 -1
  13. package/src/executors/application/schema.json +78 -6
  14. package/src/executors/application/utils/normalize-options.d.ts +2 -0
  15. package/src/executors/application/utils/normalize-options.js +33 -0
  16. package/src/executors/application/utils/validate-options.js +18 -4
  17. package/src/executors/browser-esbuild/browser-esbuild.impl.d.ts +1 -1
  18. package/src/executors/browser-esbuild/browser-esbuild.impl.js +0 -9
  19. package/src/executors/browser-esbuild/schema.json +1 -1
  20. package/src/executors/delegate-build/delegate-build.impl.d.ts +1 -1
  21. package/src/executors/module-federation-dev-server/lib/index.d.ts +0 -2
  22. package/src/executors/module-federation-dev-server/lib/index.js +0 -2
  23. package/src/executors/module-federation-dev-server/lib/normalize-options.js +1 -0
  24. package/src/executors/module-federation-dev-server/lib/start-dev-remotes.d.ts +1 -1
  25. package/src/executors/module-federation-dev-server/module-federation-dev-server.impl.d.ts +1 -1
  26. package/src/executors/module-federation-dev-server/module-federation-dev-server.impl.js +2 -26
  27. package/src/executors/module-federation-dev-server/schema.d.ts +1 -0
  28. package/src/executors/module-federation-ssr-dev-server/lib/normalize-options.d.ts +2 -2
  29. package/src/executors/module-federation-ssr-dev-server/lib/normalize-options.js +1 -0
  30. package/src/executors/module-federation-ssr-dev-server/lib/start-dev-remotes.d.ts +1 -1
  31. package/src/executors/module-federation-ssr-dev-server/module-federation-ssr-dev-server.impl.d.ts +1 -1
  32. package/src/executors/module-federation-ssr-dev-server/module-federation-ssr-dev-server.impl.js +7 -33
  33. package/src/executors/module-federation-ssr-dev-server/schema.d.ts +8 -14
  34. package/src/executors/ng-packagr-lite/ng-packagr-adjustments/ng-packagr.d.ts +1 -2
  35. package/src/executors/ng-packagr-lite/ng-packagr-adjustments/ng-packagr.js +11 -20
  36. package/src/executors/ng-packagr-lite/ng-packagr-lite.impl.d.ts +1 -1
  37. package/src/executors/ng-packagr-lite/ng-packagr-lite.impl.js +1 -1
  38. package/src/executors/ng-packagr-lite/schema.json +0 -8
  39. package/src/executors/package/ng-packagr-adjustments/ng-packagr.d.ts +1 -2
  40. package/src/executors/package/ng-packagr-adjustments/ng-packagr.js +4 -21
  41. package/src/executors/package/package.impl.d.ts +2 -2
  42. package/src/executors/package/package.impl.js +1 -1
  43. package/src/executors/package/schema.d.ts +1 -3
  44. package/src/executors/package/schema.json +0 -10
  45. package/src/executors/utilities/ng-packagr/{stylesheet-processor.js → pre-v19/stylesheet-processor.js} +2 -2
  46. package/src/executors/utilities/ng-packagr/stylesheet-processor.di.js +11 -5
  47. package/src/executors/utilities/ng-packagr/tailwindcss.d.ts +0 -6
  48. package/src/executors/utilities/ng-packagr/tailwindcss.js +0 -32
  49. package/src/executors/utilities/ng-packagr/v19+/stylesheet-processor.d.ts +23 -0
  50. package/src/executors/utilities/ng-packagr/v19+/stylesheet-processor.js +93 -0
  51. package/src/generators/application/application.js +1 -0
  52. package/src/generators/application/files/ng-module/src/app/app.component.ts__tpl__ +4 -5
  53. package/src/generators/application/files/nx-welcome/claimed/ng-module/src/app/nx-welcome.component.ts__tpl__ +2 -1
  54. package/src/generators/application/files/nx-welcome/claimed/standalone/src/app/nx-welcome.component.ts__tpl__ +2 -2
  55. package/src/generators/application/files/nx-welcome/not-configured/ng-module/src/app/nx-welcome.component.ts__tpl__ +2 -1
  56. package/src/generators/application/files/nx-welcome/not-configured/standalone/src/app/nx-welcome.component.ts__tpl__ +2 -2
  57. package/src/generators/application/files/nx-welcome/unclaimed/ng-module/src/app/nx-welcome.component.ts__tpl__ +2 -1
  58. package/src/generators/application/files/nx-welcome/unclaimed/standalone/src/app/nx-welcome.component.ts__tpl__ +2 -2
  59. package/src/generators/application/files/standalone-components/src/app/app.component.ts__tpl__ +4 -6
  60. package/src/generators/application/lib/add-serve-static-target.d.ts +1 -1
  61. package/src/generators/application/lib/add-serve-static-target.js +1 -3
  62. package/src/generators/application/lib/create-files.js +4 -1
  63. package/src/generators/application/lib/create-project.js +24 -31
  64. package/src/generators/application/lib/normalize-options.js +1 -6
  65. package/src/generators/application/schema.d.ts +1 -0
  66. package/src/generators/application/schema.json +7 -2
  67. package/src/generators/component/component.js +4 -0
  68. package/src/generators/component/files/__fileName__.spec.ts__tpl__ +1 -1
  69. package/src/generators/component/files/__fileName__.ts__tpl__ +5 -13
  70. package/src/generators/component/lib/normalize-options.js +2 -0
  71. package/src/generators/component/schema.d.ts +1 -0
  72. package/src/generators/component/schema.json +5 -0
  73. package/src/generators/convert-to-application-executor/convert-to-application-executor.js +1 -4
  74. package/src/generators/convert-to-application-executor/schema.json +1 -1
  75. package/src/generators/directive/directive.js +5 -0
  76. package/src/generators/directive/files/__fileName__.ts__tpl__ +2 -2
  77. package/src/generators/directive/lib/normalize-options.js +3 -1
  78. package/src/generators/host/files/common/{v17+/src → src}/main.server.ts__tmpl__ +1 -1
  79. package/src/generators/host/lib/update-ssr-setup.js +2 -1
  80. package/src/generators/host/schema.d.ts +1 -0
  81. package/src/generators/host/schema.json +4 -0
  82. package/src/generators/pipe/files/__fileName__.ts__tpl__ +2 -2
  83. package/src/generators/pipe/lib/normalize-options.js +3 -1
  84. package/src/generators/pipe/pipe.js +5 -0
  85. package/src/generators/remote/files/common/{v17+/src → src}/main.server.ts__tmpl__ +1 -1
  86. package/src/generators/remote/lib/update-ssr-setup.js +2 -1
  87. package/src/generators/remote/schema.d.ts +1 -0
  88. package/src/generators/remote/schema.json +4 -0
  89. package/src/generators/scam/lib/normalize-options.js +3 -1
  90. package/src/generators/scam-directive/lib/normalize-options.js +3 -1
  91. package/src/generators/scam-pipe/lib/normalize-options.js +3 -1
  92. package/src/generators/scam-to-standalone/lib/convert-scam-to-standalone.d.ts +1 -1
  93. package/src/generators/scam-to-standalone/lib/convert-scam-to-standalone.js +5 -4
  94. package/src/generators/setup-mf/files/entry-module-files/entry.component.ts__tmpl__ +2 -1
  95. package/src/generators/setup-mf/files/standalone-entry-component-files/entry.component.ts__tmpl__ +2 -2
  96. package/src/generators/setup-mf/lib/add-remote-entry.js +5 -0
  97. package/src/generators/setup-ssr/files/{server → pre-v19/server}/application-builder/__serverFileName__ +1 -1
  98. package/src/generators/setup-ssr/files/{server/server-builder/v17+ → pre-v19/server/server-builder}/__serverFileName__ +1 -1
  99. package/src/generators/setup-ssr/files/v19+/application-builder/ngmodule-src/__main__ +1 -0
  100. package/src/generators/setup-ssr/files/v19+/application-builder/ngmodule-src/app/__rootModuleFileName__ +13 -0
  101. package/src/generators/setup-ssr/files/v19+/application-builder/ngmodule-src/app/app.routes.server.ts__tpl__ +8 -0
  102. package/src/generators/setup-ssr/files/v19+/application-builder/server/__serverFileName__ +66 -0
  103. package/src/generators/setup-ssr/files/v19+/application-builder/standalone-src/__main__ +7 -0
  104. package/src/generators/setup-ssr/files/v19+/application-builder/standalone-src/app/app.config.server.ts__tpl__ +14 -0
  105. package/src/generators/setup-ssr/files/v19+/application-builder/standalone-src/app/app.routes.server.ts__tpl__ +8 -0
  106. package/src/generators/setup-ssr/files/v19+/application-builder-common-engine/server/__serverFileName__ +65 -0
  107. package/src/generators/setup-ssr/files/v19+/server-builder/ngmodule-src/__main__ +1 -0
  108. package/src/generators/setup-ssr/files/v19+/server-builder/ngmodule-src/app/__rootModuleFileName__ +14 -0
  109. package/src/generators/setup-ssr/files/v19+/server-builder/root/tsconfig.server.json.template +16 -0
  110. package/src/generators/setup-ssr/files/{server/server-builder/pre-v17 → v19+/server-builder/server}/__serverFileName__ +25 -15
  111. package/src/generators/setup-ssr/files/v19+/server-builder/standalone-src/__main__ +7 -0
  112. package/src/generators/setup-ssr/files/v19+/server-builder/standalone-src/app/app.config.server.ts.template +11 -0
  113. package/src/generators/setup-ssr/lib/add-dependencies.js +6 -17
  114. package/src/generators/setup-ssr/lib/add-hydration.d.ts +2 -2
  115. package/src/generators/setup-ssr/lib/add-hydration.js +10 -2
  116. package/src/generators/setup-ssr/lib/add-server-file.d.ts +2 -2
  117. package/src/generators/setup-ssr/lib/add-server-file.js +24 -10
  118. package/src/generators/setup-ssr/lib/generate-files.d.ts +2 -2
  119. package/src/generators/setup-ssr/lib/generate-files.js +20 -8
  120. package/src/generators/setup-ssr/lib/generate-server-ts-config.d.ts +3 -3
  121. package/src/generators/setup-ssr/lib/generate-server-ts-config.js +24 -3
  122. package/src/generators/setup-ssr/lib/normalize-options.d.ts +3 -14
  123. package/src/generators/setup-ssr/lib/normalize-options.js +23 -6
  124. package/src/generators/setup-ssr/lib/set-router-initial-navigation.d.ts +2 -2
  125. package/src/generators/setup-ssr/lib/update-project-config.d.ts +3 -3
  126. package/src/generators/setup-ssr/lib/update-project-config.js +36 -24
  127. package/src/generators/setup-ssr/lib/validate-options.js +5 -0
  128. package/src/generators/setup-ssr/schema.d.ts +5 -0
  129. package/src/generators/setup-ssr/schema.json +6 -8
  130. package/src/generators/setup-ssr/setup-ssr.js +6 -11
  131. package/src/generators/setup-tailwind/lib/index.d.ts +1 -1
  132. package/src/generators/setup-tailwind/lib/index.js +1 -1
  133. package/src/generators/setup-tailwind/lib/update-application-styles.js +1 -1
  134. package/src/generators/setup-tailwind/lib/validate-build-target.d.ts +3 -0
  135. package/src/generators/setup-tailwind/lib/{add-tailwind-config-path-to-project.js → validate-build-target.js} +4 -15
  136. package/src/generators/setup-tailwind/setup-tailwind.js +4 -1
  137. package/src/generators/utils/add-jest.js +4 -8
  138. package/src/generators/utils/storybook-ast/component-info.js +12 -2
  139. package/src/generators/utils/validations.d.ts +1 -0
  140. package/src/generators/utils/validations.js +10 -0
  141. package/src/generators/utils/version-utils.js +2 -2
  142. package/src/migrations/update-20-2-0/add-localize-polyfill-to-targets.d.ts +3 -0
  143. package/src/migrations/update-20-2-0/add-localize-polyfill-to-targets.js +48 -0
  144. package/src/migrations/update-20-2-0/disable-angular-eslint-prefer-standalone.d.ts +2 -0
  145. package/src/migrations/update-20-2-0/disable-angular-eslint-prefer-standalone.js +55 -0
  146. package/src/migrations/update-20-2-0/update-angular-cli.d.ts +3 -0
  147. package/src/migrations/update-20-2-0/update-angular-cli.js +23 -0
  148. package/src/migrations/update-20-2-0/update-angular-ssr-imports-to-use-node-entry-point.d.ts +2 -0
  149. package/src/migrations/update-20-2-0/update-angular-ssr-imports-to-use-node-entry-point.js +55 -0
  150. package/src/utils/backward-compatible-versions.d.ts +4 -4
  151. package/src/utils/backward-compatible-versions.js +20 -19
  152. package/src/utils/nx-devkit/ast-utils.d.ts +10 -1
  153. package/src/utils/nx-devkit/ast-utils.js +32 -9
  154. package/src/utils/versions.d.ts +7 -7
  155. package/src/utils/versions.js +7 -7
  156. package/esm2022/index.mjs +0 -2
  157. package/esm2022/mf/index.mjs +0 -2
  158. package/esm2022/mf/mf.mjs +0 -116
  159. package/esm2022/mf/nx-angular-mf.mjs +0 -5
  160. package/esm2022/nx-angular.mjs +0 -5
  161. package/esm2022/src/runtime/nx/data-persistence.mjs +0 -349
  162. package/esm2022/testing/index.mjs +0 -2
  163. package/esm2022/testing/nx-angular-testing.mjs +0 -5
  164. package/esm2022/testing/src/testing-utils.mjs +0 -38
  165. package/src/executors/module-federation-dev-server/lib/build-static-remotes.d.ts +0 -4
  166. package/src/executors/module-federation-dev-server/lib/build-static-remotes.js +0 -65
  167. package/src/executors/module-federation-dev-server/lib/start-static-remotes-file-server.d.ts +0 -9
  168. package/src/executors/module-federation-dev-server/lib/start-static-remotes-file-server.js +0 -51
  169. package/src/executors/module-federation-ssr-dev-server/lib/build-static-remotes.d.ts +0 -4
  170. package/src/executors/module-federation-ssr-dev-server/lib/build-static-remotes.js +0 -65
  171. package/src/executors/module-federation-ssr-dev-server/lib/start-static-remotes.d.ts +0 -4
  172. package/src/executors/module-federation-ssr-dev-server/lib/start-static-remotes.js +0 -41
  173. package/src/executors/ng-packagr-lite/ng-packagr-adjustments/pre-v17/ng-package/entry-point/compile-ngc.di.d.ts +0 -14
  174. package/src/executors/ng-packagr-lite/ng-packagr-adjustments/pre-v17/ng-package/entry-point/compile-ngc.di.js +0 -27
  175. package/src/executors/ng-packagr-lite/ng-packagr-adjustments/pre-v17/ng-package/entry-point/compile-ngc.transform.d.ts +0 -12
  176. package/src/executors/ng-packagr-lite/ng-packagr-adjustments/pre-v17/ng-package/entry-point/compile-ngc.transform.js +0 -53
  177. package/src/executors/ng-packagr-lite/ng-packagr-adjustments/pre-v17/ng-package/entry-point/entry-point.di.d.ts +0 -15
  178. package/src/executors/ng-packagr-lite/ng-packagr-adjustments/pre-v17/ng-package/entry-point/entry-point.di.js +0 -28
  179. package/src/executors/ng-packagr-lite/ng-packagr-adjustments/pre-v17/ng-package/entry-point/entry-point.transform.d.ts +0 -30
  180. package/src/executors/ng-packagr-lite/ng-packagr-adjustments/pre-v17/ng-package/entry-point/entry-point.transform.js +0 -52
  181. package/src/executors/ng-packagr-lite/ng-packagr-adjustments/pre-v17/ng-package/entry-point/write-package.di.d.ts +0 -12
  182. package/src/executors/ng-packagr-lite/ng-packagr-adjustments/pre-v17/ng-package/entry-point/write-package.di.js +0 -20
  183. package/src/executors/ng-packagr-lite/ng-packagr-adjustments/pre-v17/ng-package/entry-point/write-package.transform.d.ts +0 -9
  184. package/src/executors/ng-packagr-lite/ng-packagr-adjustments/pre-v17/ng-package/entry-point/write-package.transform.js +0 -320
  185. package/src/executors/ng-packagr-lite/ng-packagr-adjustments/pre-v17/ng-package/options.di.d.ts +0 -14
  186. package/src/executors/ng-packagr-lite/ng-packagr-adjustments/pre-v17/ng-package/options.di.js +0 -35
  187. package/src/executors/ng-packagr-lite/ng-packagr-adjustments/pre-v17/ng-package/package.di.d.ts +0 -14
  188. package/src/executors/ng-packagr-lite/ng-packagr-adjustments/pre-v17/ng-package/package.di.js +0 -37
  189. package/src/executors/ng-packagr-lite/ng-packagr-adjustments/pre-v17/ngc/compile-source-files.d.ts +0 -12
  190. package/src/executors/ng-packagr-lite/ng-packagr-adjustments/pre-v17/ngc/compile-source-files.js +0 -178
  191. package/src/executors/ng-packagr-lite/ng-packagr-adjustments/pre-v17/styles/stylesheet-processor.d.ts +0 -42
  192. package/src/executors/ng-packagr-lite/ng-packagr-adjustments/pre-v17/styles/stylesheet-processor.di.d.ts +0 -10
  193. package/src/executors/ng-packagr-lite/ng-packagr-adjustments/pre-v17/styles/stylesheet-processor.di.js +0 -17
  194. package/src/executors/ng-packagr-lite/ng-packagr-adjustments/pre-v17/styles/stylesheet-processor.js +0 -201
  195. package/src/executors/package/ng-packagr-adjustments/ng-package/entry-point/compile-ngc.di.d.ts +0 -14
  196. package/src/executors/package/ng-packagr-adjustments/ng-package/entry-point/compile-ngc.di.js +0 -26
  197. package/src/executors/package/ng-packagr-adjustments/ng-package/entry-point/compile-ngc.transform.d.ts +0 -12
  198. package/src/executors/package/ng-packagr-adjustments/ng-package/entry-point/compile-ngc.transform.js +0 -71
  199. package/src/executors/package/ng-packagr-adjustments/ng-package/entry-point/entry-point.di.d.ts +0 -13
  200. package/src/executors/package/ng-packagr-adjustments/ng-package/entry-point/entry-point.di.js +0 -32
  201. package/src/executors/package/ng-packagr-adjustments/ng-package/options.di.d.ts +0 -14
  202. package/src/executors/package/ng-packagr-adjustments/ng-package/options.di.js +0 -35
  203. package/src/executors/package/ng-packagr-adjustments/ng-package/package.di.d.ts +0 -14
  204. package/src/executors/package/ng-packagr-adjustments/ng-package/package.di.js +0 -37
  205. package/src/executors/package/ng-packagr-adjustments/ngc/compile-source-files.d.ts +0 -13
  206. package/src/executors/package/ng-packagr-adjustments/ngc/compile-source-files.js +0 -183
  207. package/src/executors/package/ng-packagr-adjustments/styles/stylesheet-processor.d.ts +0 -36
  208. package/src/executors/package/ng-packagr-adjustments/styles/stylesheet-processor.di.d.ts +0 -10
  209. package/src/executors/package/ng-packagr-adjustments/styles/stylesheet-processor.di.js +0 -17
  210. package/src/executors/package/ng-packagr-adjustments/styles/stylesheet-processor.js +0 -194
  211. package/src/executors/package/ng-packagr-adjustments/utils/ng-compiler-cli.d.ts +0 -1
  212. package/src/executors/package/ng-packagr-adjustments/utils/ng-compiler-cli.js +0 -9
  213. package/src/generators/host/files/common/pre-v17/src/main.server.ts__tmpl__ +0 -66
  214. package/src/generators/remote/files/common/pre-v17/src/main.server.ts__tmpl__ +0 -72
  215. package/src/generators/setup-tailwind/lib/add-tailwind-config-path-to-project.d.ts +0 -3
  216. /package/src/executors/ng-packagr-lite/ng-packagr-adjustments/{v17+ → pre-v19}/ng-package/entry-point/write-bundles.di.d.ts +0 -0
  217. /package/src/executors/ng-packagr-lite/ng-packagr-adjustments/{v17+ → pre-v19}/ng-package/entry-point/write-bundles.di.js +0 -0
  218. /package/src/executors/ng-packagr-lite/ng-packagr-adjustments/{v17+ → pre-v19}/ng-package/entry-point/write-bundles.transform.d.ts +0 -0
  219. /package/src/executors/ng-packagr-lite/ng-packagr-adjustments/{v17+ → pre-v19}/ng-package/entry-point/write-bundles.transform.js +0 -0
  220. /package/src/executors/ng-packagr-lite/ng-packagr-adjustments/{v17+ → pre-v19}/ng-package/entry-point/write-package.di.d.ts +0 -0
  221. /package/src/executors/ng-packagr-lite/ng-packagr-adjustments/{v17+ → pre-v19}/ng-package/entry-point/write-package.di.js +0 -0
  222. /package/src/executors/ng-packagr-lite/ng-packagr-adjustments/{v17+ → pre-v19}/ng-package/entry-point/write-package.transform.d.ts +0 -0
  223. /package/src/executors/ng-packagr-lite/ng-packagr-adjustments/{v17+ → pre-v19}/ng-package/entry-point/write-package.transform.js +0 -0
  224. /package/src/executors/utilities/ng-packagr/{stylesheet-processor.d.ts → pre-v19/stylesheet-processor.d.ts} +0 -0
  225. /package/src/generators/setup-ssr/files/{ngmodule/src → pre-v19/ngmodule-src}/__main__ +0 -0
  226. /package/src/generators/setup-ssr/files/{ngmodule/src → pre-v19/ngmodule-src}/app/__rootModuleFileName__ +0 -0
  227. /package/src/generators/setup-ssr/files/{root → pre-v19/root}/tsconfig.server.json__tpl__ +0 -0
  228. /package/src/generators/setup-ssr/files/{standalone/src → pre-v19/standalone-src}/__main__ +0 -0
  229. /package/src/generators/setup-ssr/files/{standalone/src → pre-v19/standalone-src}/app/app.config.server.ts__tpl__ +0 -0
@@ -0,0 +1,16 @@
1
+ /* To learn more about Typescript configuration file: https://www.typescriptlang.org/docs/handbook/tsconfig-json.html. */
2
+ /* To learn more about Angular compiler options: https://angular.dev/reference/configs/angular-compiler-options. */
3
+ {
4
+ "extends": "./tsconfig.app.json",
5
+ "compilerOptions": {
6
+ "outDir": "<%= rootOffset %>out-tsc/server",
7
+ "types": [
8
+ "node"<% if (hasLocalizePackage) { %>,
9
+ "@angular/localize"<% } %>
10
+ ]
11
+ },
12
+ "files": [
13
+ "src/<%= main %>",
14
+ "src/server.ts"
15
+ ]
16
+ }
@@ -1,22 +1,21 @@
1
- import 'zone.js/dist/zone-node';
1
+ import 'zone.js/node';
2
2
 
3
3
  import { APP_BASE_HREF } from '@angular/common';
4
- import { ngExpressEngine } from '@nguniversal/express-engine';
4
+ import { CommonEngine } from '@angular/ssr/node';
5
5
  import * as express from 'express';
6
- import { existsSync } from 'fs';
7
- import { join } from 'path';
8
- import <% if (standalone) { %>bootstrap<% } else { %><%= rootModuleClassName %><% } %> from './src/<%= main.slice(0, -3) %>';
6
+ import { existsSync } from 'node:fs';
7
+ import { join } from 'node:path';
8
+ import <% if (standalone) { %>bootstrap<% } else { %><%= rootModuleClassName %><% } %> from './<%= main.slice(0, -3) %>';
9
9
 
10
10
  // The Express app is exported so that it can be used by serverless Functions.
11
11
  export function app(): express.Express {
12
12
  const server = express();
13
- const distFolder = join(process.cwd(), '<%= browserBundleOutputPath %>');
14
- const indexHtml = existsSync(join(distFolder, 'index.original.html')) ? 'index.original.html' : 'index';
13
+ const distFolder = join(process.cwd(), '<%= browserDistDirectory %>');
14
+ const indexHtml = existsSync(join(distFolder, 'index.original.html'))
15
+ ? join(distFolder, 'index.original.html')
16
+ : join(distFolder, 'index.html');
15
17
 
16
- // Our Universal express-engine (found @ https://github.com/angular/universal/tree/main/modules/express-engine)
17
- server.engine('html', ngExpressEngine({
18
- bootstrap<% if (!standalone) { %>: <%= rootModuleClassName %><% } %>,
19
- }));
18
+ const commonEngine = new CommonEngine();
20
19
 
21
20
  server.set('view engine', 'html');
22
21
  server.set('views', distFolder);
@@ -28,9 +27,20 @@ export function app(): express.Express {
28
27
  maxAge: '1y'
29
28
  }));
30
29
 
31
- // All regular routes use the Universal engine
32
- server.get('*', (req, res) => {
33
- res.render(indexHtml, { req, providers: [{ provide: APP_BASE_HREF, useValue: req.baseUrl }] });
30
+ // All regular routes use the Angular engine
31
+ server.get('*', (req, res, next) => {
32
+ const { protocol, originalUrl, baseUrl, headers } = req;
33
+
34
+ commonEngine
35
+ .render({
36
+ bootstrap<% if (!standalone) { %>: <%= rootModuleClassName %><% } %>,
37
+ documentFilePath: indexHtml,
38
+ url: `${protocol}://${headers.host}${originalUrl}`,
39
+ publicPath: distFolder,
40
+ providers: [{ provide: APP_BASE_HREF, useValue: baseUrl }],
41
+ })
42
+ .then((html) => res.send(html))
43
+ .catch((err) => next(err));
34
44
  });
35
45
 
36
46
  return server;
@@ -56,4 +66,4 @@ if (moduleFilename === __filename || moduleFilename.includes('iisnode')) {
56
66
  run();
57
67
  }
58
68
 
59
- export <% if (standalone) { %>default bootstrap<% } else { %>* from './src/<%= main.slice(0, -3) %>'<% } %>;
69
+ export default <% if (standalone) { %>bootstrap<% } else { %><%= rootModuleClassName %><% } %>;
@@ -0,0 +1,7 @@
1
+ import { bootstrapApplication } from '@angular/platform-browser';
2
+ import { AppComponent } from './app/app.component';
3
+ import { config } from './app/app.config.server';
4
+
5
+ const bootstrap = () => bootstrapApplication(AppComponent, config);
6
+
7
+ export default bootstrap;
@@ -0,0 +1,11 @@
1
+ import { mergeApplicationConfig, ApplicationConfig } from '@angular/core';
2
+ import { provideServerRendering } from '@angular/platform-server';
3
+ import { appConfig } from './app.config';
4
+
5
+ const serverConfig: ApplicationConfig = {
6
+ providers: [
7
+ provideServerRendering()
8
+ ]
9
+ };
10
+
11
+ export const config = mergeApplicationConfig(appConfig, serverConfig);
@@ -6,7 +6,7 @@ const semver_1 = require("semver");
6
6
  const version_utils_1 = require("../../utils/version-utils");
7
7
  function addDependencies(tree, isUsingApplicationBuilder) {
8
8
  const pkgVersions = (0, version_utils_1.versions)(tree);
9
- const { major: angularMajorVersion, version: angularVersion } = (0, version_utils_1.getInstalledAngularVersionInfo)(tree);
9
+ const { version: angularVersion } = (0, version_utils_1.getInstalledAngularVersionInfo)(tree);
10
10
  const dependencies = {
11
11
  '@angular/platform-server': (0, version_utils_1.getInstalledPackageVersionInfo)(tree, '@angular/platform-server')
12
12
  ?.version ?? pkgVersions.angularVersion,
@@ -15,22 +15,11 @@ function addDependencies(tree, isUsingApplicationBuilder) {
15
15
  const devDependencies = {
16
16
  '@types/express': pkgVersions.typesExpressVersion,
17
17
  };
18
- if (angularMajorVersion >= 17) {
19
- dependencies['@angular/ssr'] =
20
- (0, version_utils_1.getInstalledPackageVersionInfo)(tree, '@angular-devkit/build-angular')
21
- ?.version ?? pkgVersions.angularDevkitVersion;
22
- if (!isUsingApplicationBuilder && (0, semver_1.gte)(angularVersion, '17.1.0')) {
23
- devDependencies['browser-sync'] = pkgVersions.browserSyncVersion;
24
- }
25
- }
26
- else {
27
- dependencies['@nguniversal/express-engine'] =
28
- (0, version_utils_1.getInstalledPackageVersionInfo)(tree, '@nguniversal/express-engine')
29
- ?.version ??
30
- pkgVersions.ngUniversalVersion;
31
- devDependencies['@nguniversal/builders'] =
32
- (0, version_utils_1.getInstalledPackageVersionInfo)(tree, '@nguniversal/builders')?.version ??
33
- pkgVersions.ngUniversalVersion;
18
+ dependencies['@angular/ssr'] =
19
+ (0, version_utils_1.getInstalledPackageVersionInfo)(tree, '@angular-devkit/build-angular')
20
+ ?.version ?? pkgVersions.angularDevkitVersion;
21
+ if (!isUsingApplicationBuilder && (0, semver_1.gte)(angularVersion, '17.1.0')) {
22
+ devDependencies['browser-sync'] = pkgVersions.browserSyncVersion;
34
23
  }
35
24
  (0, devkit_1.addDependenciesToPackageJson)(tree, dependencies, devDependencies);
36
25
  }
@@ -1,3 +1,3 @@
1
1
  import { type Tree } from '@nx/devkit';
2
- import { type Schema } from '../schema';
3
- export declare function addHydration(tree: Tree, options: Schema): void;
2
+ import type { NormalizedGeneratorOptions } from '../schema';
3
+ export declare function addHydration(tree: Tree, options: NormalizedGeneratorOptions): void;
@@ -5,6 +5,7 @@ const devkit_1 = require("@nx/devkit");
5
5
  const js_1 = require("@nx/js");
6
6
  const ensure_typescript_1 = require("@nx/js/src/utils/typescript/ensure-typescript");
7
7
  const ast_utils_1 = require("../../../utils/nx-devkit/ast-utils");
8
+ const version_utils_1 = require("../../utils/version-utils");
8
9
  let tsModule;
9
10
  let tsquery;
10
11
  function addHydration(tree, options) {
@@ -25,11 +26,18 @@ function addHydration(tree, options) {
25
26
  const addImport = (source, symbolName, packageName, filePath, isDefault = false) => {
26
27
  return (0, js_1.insertImport)(tree, source, filePath, symbolName, packageName, isDefault);
27
28
  };
29
+ const { major: angularMajorVersion } = (0, version_utils_1.getInstalledAngularVersionInfo)(tree);
28
30
  sourceFile = addImport(sourceFile, 'provideClientHydration', '@angular/platform-browser', pathToClientConfigFile);
31
+ if (angularMajorVersion >= 19) {
32
+ sourceFile = addImport(sourceFile, 'withEventReplay', '@angular/platform-browser', pathToClientConfigFile);
33
+ }
34
+ const provider = angularMajorVersion >= 19
35
+ ? 'provideClientHydration(withEventReplay())'
36
+ : 'provideClientHydration()';
29
37
  if (options.standalone) {
30
- (0, ast_utils_1.addProviderToAppConfig)(tree, pathToClientConfigFile, 'provideClientHydration()');
38
+ (0, ast_utils_1.addProviderToAppConfig)(tree, pathToClientConfigFile, provider);
31
39
  }
32
40
  else {
33
- (0, ast_utils_1.addProviderToModule)(tree, sourceFile, pathToClientConfigFile, 'provideClientHydration()');
41
+ (0, ast_utils_1.addProviderToModule)(tree, sourceFile, pathToClientConfigFile, provider);
34
42
  }
35
43
  }
@@ -1,3 +1,3 @@
1
1
  import type { Tree } from '@nx/devkit';
2
- import type { Schema } from '../schema';
3
- export declare function addServerFile(tree: Tree, schema: Schema, isUsingApplicationBuilder: boolean): void;
2
+ import type { NormalizedGeneratorOptions } from '../schema';
3
+ export declare function addServerFile(tree: Tree, options: NormalizedGeneratorOptions): void;
@@ -2,21 +2,35 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.addServerFile = addServerFile;
4
4
  const devkit_1 = require("@nx/devkit");
5
+ const path_1 = require("path");
5
6
  const version_utils_1 = require("../../utils/version-utils");
6
7
  const constants_1 = require("./constants");
7
- function addServerFile(tree, schema, isUsingApplicationBuilder) {
8
- const { root: projectRoot, targets } = (0, devkit_1.readProjectConfiguration)(tree, schema.project);
9
- const { outputPath } = targets.build.options;
10
- const browserBundleOutputPath = isUsingApplicationBuilder
8
+ function addServerFile(tree, options) {
9
+ const project = (0, devkit_1.readProjectConfiguration)(tree, options.project);
10
+ const { outputPath } = project.targets.build.options;
11
+ const browserDistDirectory = options.isUsingApplicationBuilder
11
12
  ? getApplicationBuilderBrowserOutputPath(outputPath)
12
13
  : outputPath;
13
- const pathToFiles = (0, devkit_1.joinPathFragments)(__dirname, '..', 'files');
14
14
  const { major: angularMajorVersion } = (0, version_utils_1.getInstalledAngularVersionInfo)(tree);
15
- (0, devkit_1.generateFiles)(tree, (0, devkit_1.joinPathFragments)(pathToFiles, 'server', ...(isUsingApplicationBuilder
16
- ? ['application-builder']
17
- : angularMajorVersion >= 17
18
- ? ['server-builder', 'v17+']
19
- : ['server-builder', 'pre-v17'])), projectRoot, { ...schema, browserBundleOutputPath, tpl: '' });
15
+ const baseFilesPath = (0, path_1.join)(__dirname, '..', 'files');
16
+ let pathToFiles;
17
+ if (angularMajorVersion >= 19) {
18
+ pathToFiles = (0, path_1.join)(baseFilesPath, 'v19+', options.isUsingApplicationBuilder
19
+ ? 'application-builder' +
20
+ (options.serverRouting ? '' : '-common-engine')
21
+ : 'server-builder', 'server');
22
+ }
23
+ else {
24
+ pathToFiles = (0, path_1.join)(baseFilesPath, 'pre-v19', 'server', options.isUsingApplicationBuilder
25
+ ? 'application-builder'
26
+ : 'server-builder');
27
+ }
28
+ const sourceRoot = project.sourceRoot ?? (0, devkit_1.joinPathFragments)(project.root, 'src');
29
+ (0, devkit_1.generateFiles)(tree, pathToFiles, angularMajorVersion >= 19 ? sourceRoot : project.root, {
30
+ ...options,
31
+ browserDistDirectory,
32
+ tpl: '',
33
+ });
20
34
  }
21
35
  function getApplicationBuilderBrowserOutputPath(outputPath) {
22
36
  if (outputPath) {
@@ -1,3 +1,3 @@
1
1
  import type { Tree } from '@nx/devkit';
2
- import type { Schema } from '../schema';
3
- export declare function generateSSRFiles(tree: Tree, schema: Schema, isUsingApplicationBuilder: boolean): void;
2
+ import type { NormalizedGeneratorOptions } from '../schema';
3
+ export declare function generateSSRFiles(tree: Tree, options: NormalizedGeneratorOptions): void;
@@ -2,18 +2,30 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.generateSSRFiles = generateSSRFiles;
4
4
  const devkit_1 = require("@nx/devkit");
5
- function generateSSRFiles(tree, schema, isUsingApplicationBuilder) {
6
- const { root: projectRoot, targets } = (0, devkit_1.readProjectConfiguration)(tree, schema.project);
7
- if (targets.server ||
8
- (isUsingApplicationBuilder && targets.build.options?.server !== undefined)) {
5
+ const path_1 = require("path");
6
+ const version_utils_1 = require("../../utils/version-utils");
7
+ function generateSSRFiles(tree, options) {
8
+ const project = (0, devkit_1.readProjectConfiguration)(tree, options.project);
9
+ if (project.targets.server ||
10
+ (options.isUsingApplicationBuilder &&
11
+ project.targets.build.options?.server !== undefined)) {
9
12
  // server has already been added
10
13
  return;
11
14
  }
12
- const pathToFiles = (0, devkit_1.joinPathFragments)(__dirname, '..', 'files');
13
- if (schema.standalone) {
14
- (0, devkit_1.generateFiles)(tree, (0, devkit_1.joinPathFragments)(pathToFiles, 'standalone'), projectRoot, { ...schema, tpl: '' });
15
+ const { major: angularMajorVersion } = (0, version_utils_1.getInstalledAngularVersionInfo)(tree);
16
+ const baseFilesPath = (0, path_1.join)(__dirname, '..', 'files');
17
+ let pathToFiles;
18
+ if (angularMajorVersion >= 19) {
19
+ pathToFiles = (0, path_1.join)(baseFilesPath, 'v19+', options.isUsingApplicationBuilder
20
+ ? 'application-builder'
21
+ : 'server-builder', options.standalone ? 'standalone-src' : 'ngmodule-src');
15
22
  }
16
23
  else {
17
- (0, devkit_1.generateFiles)(tree, (0, devkit_1.joinPathFragments)(pathToFiles, 'ngmodule'), projectRoot, { ...schema, tpl: '' });
24
+ pathToFiles = (0, path_1.join)(baseFilesPath, 'pre-v19', options.standalone ? 'standalone-src' : 'ngmodule-src');
25
+ }
26
+ const sourceRoot = project.sourceRoot ?? (0, devkit_1.joinPathFragments)(project.root, 'src');
27
+ (0, devkit_1.generateFiles)(tree, pathToFiles, sourceRoot, { ...options, tpl: '' });
28
+ if (angularMajorVersion >= 19 && !options.serverRouting) {
29
+ tree.delete((0, devkit_1.joinPathFragments)(sourceRoot, 'app/app.routes.server.ts'));
18
30
  }
19
31
  }
@@ -1,4 +1,4 @@
1
1
  import { type Tree } from '@nx/devkit';
2
- import type { Schema } from '../schema';
3
- export declare function setServerTsConfigOptionsForApplicationBuilder(tree: Tree, options: Schema): void;
4
- export declare function generateTsConfigServerJsonForBrowserBuilder(tree: Tree, options: Schema): void;
2
+ import type { NormalizedGeneratorOptions } from '../schema';
3
+ export declare function setServerTsConfigOptionsForApplicationBuilder(tree: Tree, options: NormalizedGeneratorOptions): void;
4
+ export declare function generateTsConfigServerJsonForBrowserBuilder(tree: Tree, options: NormalizedGeneratorOptions): void;
@@ -4,13 +4,20 @@ exports.setServerTsConfigOptionsForApplicationBuilder = setServerTsConfigOptions
4
4
  exports.generateTsConfigServerJsonForBrowserBuilder = generateTsConfigServerJsonForBrowserBuilder;
5
5
  const devkit_1 = require("@nx/devkit");
6
6
  const path_1 = require("path");
7
+ const version_utils_1 = require("../../utils/version-utils");
7
8
  function setServerTsConfigOptionsForApplicationBuilder(tree, options) {
8
9
  const { targets } = (0, devkit_1.readProjectConfiguration)(tree, options.project);
9
10
  const tsConfigPath = targets.build.options.tsConfig;
10
11
  (0, devkit_1.updateJson)(tree, tsConfigPath, (json) => {
12
+ const { major: angularMajorVersion } = (0, version_utils_1.getInstalledAngularVersionInfo)(tree);
11
13
  const files = new Set(json.files ?? []);
12
14
  files.add((0, devkit_1.joinPathFragments)('src', options.main));
13
- files.add((0, devkit_1.joinPathFragments)(options.serverFileName));
15
+ if (angularMajorVersion >= 19) {
16
+ files.add((0, devkit_1.joinPathFragments)('src', options.serverFileName));
17
+ }
18
+ else {
19
+ files.add((0, devkit_1.joinPathFragments)(options.serverFileName));
20
+ }
14
21
  json.files = Array.from(files);
15
22
  json.compilerOptions ??= {};
16
23
  const types = new Set(json.compilerOptions.types ?? []);
@@ -20,9 +27,23 @@ function setServerTsConfigOptionsForApplicationBuilder(tree, options) {
20
27
  });
21
28
  }
22
29
  function generateTsConfigServerJsonForBrowserBuilder(tree, options) {
23
- const { root } = (0, devkit_1.readProjectConfiguration)(tree, options.project);
24
- (0, devkit_1.generateFiles)(tree, (0, path_1.join)(__dirname, '..', 'files', 'root'), root, {
30
+ const project = (0, devkit_1.readProjectConfiguration)(tree, options.project);
31
+ const { major: angularMajorVersion } = (0, version_utils_1.getInstalledAngularVersionInfo)(tree);
32
+ const packageJson = (0, devkit_1.readJson)(tree, 'package.json');
33
+ const hasLocalizePackage = !!packageJson.dependencies?.['@angular/localize'] ||
34
+ !!packageJson.devDependencies?.['@angular/localize'];
35
+ const baseFilesPath = (0, path_1.join)(__dirname, '..', 'files');
36
+ let pathToFiles;
37
+ if (angularMajorVersion >= 19) {
38
+ pathToFiles = (0, path_1.join)(baseFilesPath, 'v19+', 'server-builder', 'root');
39
+ }
40
+ else {
41
+ pathToFiles = (0, path_1.join)(baseFilesPath, 'pre-v19', 'root');
42
+ }
43
+ (0, devkit_1.generateFiles)(tree, pathToFiles, project.root, {
25
44
  ...options,
45
+ rootOffset: (0, devkit_1.offsetFromRoot)(project.root),
46
+ hasLocalizePackage,
26
47
  tpl: '',
27
48
  });
28
49
  }
@@ -1,14 +1,3 @@
1
- import type { Tree } from '@nx/devkit';
2
- import type { Schema } from '../schema';
3
- export declare function normalizeOptions(tree: Tree, options: Schema): {
4
- project: string;
5
- appId: string;
6
- main: string;
7
- serverFileName: string;
8
- serverPort: number;
9
- rootModuleFileName: string;
10
- rootModuleClassName: string;
11
- skipFormat: boolean;
12
- standalone: boolean;
13
- hydration: boolean;
14
- };
1
+ import { type Tree } from '@nx/devkit';
2
+ import type { NormalizedGeneratorOptions, Schema } from '../schema';
3
+ export declare function normalizeOptions(tree: Tree, options: Schema): Promise<NormalizedGeneratorOptions>;
@@ -1,15 +1,30 @@
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 prompt_1 = require("@nx/devkit/src/generators/prompt");
4
6
  const ast_utils_1 = require("../../../utils/nx-devkit/ast-utils");
5
7
  const version_utils_1 = require("../../utils/version-utils");
6
- function normalizeOptions(tree, options) {
7
- const isStandaloneApp = (0, ast_utils_1.isNgStandaloneApp)(tree, options.project);
8
- let hydration = options.hydration;
9
- if (hydration === undefined) {
8
+ async function normalizeOptions(tree, options) {
9
+ const { targets } = (0, devkit_1.readProjectConfiguration)(tree, options.project);
10
+ const isUsingApplicationBuilder = targets.build.executor === '@angular-devkit/build-angular:application' ||
11
+ targets.build.executor === '@angular/build:application' ||
12
+ targets.build.executor === '@nx/angular:application';
13
+ if (options.serverRouting === undefined && isUsingApplicationBuilder) {
10
14
  const { major: angularMajorVersion } = (0, version_utils_1.getInstalledAngularVersionInfo)(tree);
11
- hydration = angularMajorVersion >= 17;
15
+ if (angularMajorVersion >= 19) {
16
+ options.serverRouting = await (0, prompt_1.promptWhenInteractive)({
17
+ type: 'confirm',
18
+ name: 'serverRouting',
19
+ message: 'Would you like to use the Server Routing and App Engine APIs (Developer Preview) for this server application?',
20
+ initial: false,
21
+ }, { serverRouting: false }).then(({ serverRouting }) => serverRouting);
22
+ }
23
+ else {
24
+ options.serverRouting = false;
25
+ }
12
26
  }
27
+ const isStandaloneApp = (0, ast_utils_1.isNgStandaloneApp)(tree, options.project);
13
28
  return {
14
29
  project: options.project,
15
30
  appId: options.appId ?? 'serverApp',
@@ -20,6 +35,8 @@ function normalizeOptions(tree, options) {
20
35
  rootModuleClassName: options.rootModuleClassName ?? 'AppServerModule',
21
36
  skipFormat: options.skipFormat ?? false,
22
37
  standalone: options.standalone ?? isStandaloneApp,
23
- hydration,
38
+ hydration: options.hydration ?? true,
39
+ serverRouting: options.serverRouting,
40
+ isUsingApplicationBuilder,
24
41
  };
25
42
  }
@@ -1,3 +1,3 @@
1
1
  import { type Tree } from '@nx/devkit';
2
- import type { Schema } from '../schema';
3
- export declare function setRouterInitialNavigation(tree: Tree, options: Schema): void;
2
+ import type { NormalizedGeneratorOptions } from '../schema';
3
+ export declare function setRouterInitialNavigation(tree: Tree, options: NormalizedGeneratorOptions): void;
@@ -1,4 +1,4 @@
1
1
  import type { Tree } from '@nx/devkit';
2
- import type { Schema } from '../schema';
3
- export declare function updateProjectConfigForApplicationBuilder(tree: Tree, options: Schema): void;
4
- export declare function updateProjectConfigForBrowserBuilder(tree: Tree, schema: Schema): void;
2
+ import type { NormalizedGeneratorOptions } from '../schema';
3
+ export declare function updateProjectConfigForApplicationBuilder(tree: Tree, options: NormalizedGeneratorOptions): void;
4
+ export declare function updateProjectConfigForBrowserBuilder(tree: Tree, options: NormalizedGeneratorOptions): void;
@@ -23,17 +23,32 @@ function updateProjectConfigForApplicationBuilder(tree, options) {
23
23
  outputPath = outputPath.base;
24
24
  }
25
25
  }
26
+ const { major: angularMajorVersion } = (0, version_utils_1.getInstalledAngularVersionInfo)(tree);
27
+ const sourceRoot = project.sourceRoot ?? (0, devkit_1.joinPathFragments)(project.root, 'src');
26
28
  buildTarget.options ??= {};
27
29
  buildTarget.options.outputPath = outputPath;
28
- buildTarget.options.server = (0, devkit_1.joinPathFragments)(project.sourceRoot ?? (0, devkit_1.joinPathFragments)(project.root, 'src'), options.main);
29
- buildTarget.options.prerender = true;
30
- buildTarget.options.ssr = {
31
- entry: (0, devkit_1.joinPathFragments)(project.root, options.serverFileName),
32
- };
30
+ buildTarget.options.server = (0, devkit_1.joinPathFragments)(sourceRoot, options.main);
31
+ if (angularMajorVersion >= 19) {
32
+ buildTarget.options.ssr = {
33
+ entry: (0, devkit_1.joinPathFragments)(sourceRoot, options.serverFileName),
34
+ };
35
+ if (options.serverRouting) {
36
+ buildTarget.options.outputMode = 'server';
37
+ }
38
+ else {
39
+ buildTarget.options.prerender = true;
40
+ }
41
+ }
42
+ else {
43
+ buildTarget.options.prerender = true;
44
+ buildTarget.options.ssr = {
45
+ entry: (0, devkit_1.joinPathFragments)(project.root, options.serverFileName),
46
+ };
47
+ }
33
48
  (0, devkit_1.updateProjectConfiguration)(tree, options.project, project);
34
49
  }
35
- function updateProjectConfigForBrowserBuilder(tree, schema) {
36
- const projectConfig = (0, devkit_1.readProjectConfiguration)(tree, schema.project);
50
+ function updateProjectConfigForBrowserBuilder(tree, options) {
51
+ const projectConfig = (0, devkit_1.readProjectConfiguration)(tree, options.project);
37
52
  const buildTarget = projectConfig.targets.build;
38
53
  const baseOutputPath = buildTarget.options.outputPath;
39
54
  buildTarget.options.outputPath = (0, devkit_1.joinPathFragments)(baseOutputPath, 'browser');
@@ -44,6 +59,8 @@ function updateProjectConfigForBrowserBuilder(tree, schema) {
44
59
  configurations[key] = getServerOptions(options);
45
60
  }
46
61
  }
62
+ const { major: angularMajorVersion } = (0, version_utils_1.getInstalledAngularVersionInfo)(tree);
63
+ const sourceRoot = projectConfig.sourceRoot ?? (0, devkit_1.joinPathFragments)(projectConfig.root, 'src');
47
64
  projectConfig.targets.server = {
48
65
  dependsOn: ['build'],
49
66
  executor: buildTarget.executor.startsWith('@angular-devkit/build-angular:')
@@ -51,50 +68,45 @@ function updateProjectConfigForBrowserBuilder(tree, schema) {
51
68
  : '@nx/angular:webpack-server',
52
69
  options: {
53
70
  outputPath: (0, devkit_1.joinPathFragments)(baseOutputPath, 'server'),
54
- main: (0, devkit_1.joinPathFragments)(projectConfig.root, schema.serverFileName),
71
+ main: (0, devkit_1.joinPathFragments)(angularMajorVersion >= 19 ? sourceRoot : projectConfig.root, options.serverFileName),
55
72
  tsConfig: (0, devkit_1.joinPathFragments)(projectConfig.root, 'tsconfig.server.json'),
56
73
  ...(buildTarget.options ? getServerOptions(buildTarget.options) : {}),
57
74
  },
58
75
  configurations,
59
76
  defaultConfiguration: 'production',
60
77
  };
61
- const { major: angularMajorVersion } = (0, version_utils_1.getInstalledAngularVersionInfo)(tree);
62
78
  projectConfig.targets['serve-ssr'] = {
63
- executor: angularMajorVersion >= 17
64
- ? '@angular-devkit/build-angular:ssr-dev-server'
65
- : '@nguniversal/builders:ssr-dev-server',
79
+ executor: '@angular-devkit/build-angular:ssr-dev-server',
66
80
  configurations: {
67
81
  development: {
68
- browserTarget: `${schema.project}:build:development`,
69
- serverTarget: `${schema.project}:server:development`,
82
+ browserTarget: `${options.project}:build:development`,
83
+ serverTarget: `${options.project}:server:development`,
70
84
  },
71
85
  production: {
72
- browserTarget: `${schema.project}:build:production`,
73
- serverTarget: `${schema.project}:server:production`,
86
+ browserTarget: `${options.project}:build:production`,
87
+ serverTarget: `${options.project}:server:production`,
74
88
  },
75
89
  },
76
90
  defaultConfiguration: 'development',
77
91
  };
78
92
  projectConfig.targets.prerender = {
79
- executor: angularMajorVersion >= 17
80
- ? '@angular-devkit/build-angular:prerender'
81
- : '@nguniversal/builders:prerender',
93
+ executor: '@angular-devkit/build-angular:prerender',
82
94
  options: {
83
95
  routes: ['/'],
84
96
  },
85
97
  configurations: {
86
98
  development: {
87
- browserTarget: `${schema.project}:build:development`,
88
- serverTarget: `${schema.project}:server:development`,
99
+ browserTarget: `${options.project}:build:development`,
100
+ serverTarget: `${options.project}:server:development`,
89
101
  },
90
102
  production: {
91
- browserTarget: `${schema.project}:build:production`,
92
- serverTarget: `${schema.project}:server:production`,
103
+ browserTarget: `${options.project}:build:production`,
104
+ serverTarget: `${options.project}:server:production`,
93
105
  },
94
106
  },
95
107
  defaultConfiguration: 'production',
96
108
  };
97
- (0, devkit_1.updateProjectConfiguration)(tree, schema.project, projectConfig);
109
+ (0, devkit_1.updateProjectConfiguration)(tree, options.project, projectConfig);
98
110
  const nxJson = (0, devkit_1.readNxJson)(tree);
99
111
  if (nxJson.tasksRunnerOptions?.default?.options?.cacheableOperations &&
100
112
  !nxJson.tasksRunnerOptions.default.options.cacheableOperations.includes('server')) {
@@ -3,9 +3,14 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.validateOptions = validateOptions;
4
4
  const devkit_1 = require("@nx/devkit");
5
5
  const validations_1 = require("../../utils/validations");
6
+ const version_utils_1 = require("../../utils/version-utils");
6
7
  function validateOptions(tree, options) {
7
8
  validateProject(tree, options.project);
8
9
  validateBuildTarget(tree, options.project);
10
+ const { major: angularMajorVersion, version: angularVersion } = (0, version_utils_1.getInstalledAngularVersionInfo)(tree);
11
+ if (angularMajorVersion < 19 && options.serverRouting) {
12
+ throw new Error(`The "serverRouting" option is only supported in Angular versions >= 19.0.0. You are using Angular ${angularVersion}.`);
13
+ }
9
14
  }
10
15
  function validateProject(tree, project) {
11
16
  (0, validations_1.validateProject)(tree, project);
@@ -8,6 +8,11 @@ export interface Schema {
8
8
  rootModuleClassName?: string;
9
9
  standalone?: boolean;
10
10
  hydration?: boolean;
11
+ serverRouting?: boolean;
11
12
  skipFormat?: boolean;
12
13
  skipPackageJson?: boolean;
13
14
  }
15
+
16
+ export interface NormalizedGeneratorOptions extends Schema {
17
+ isUsingApplicationBuilder: boolean;
18
+ }
@@ -16,13 +16,6 @@
16
16
  "x-prompt": "What app would you like to generate an Angular Universal configuration for?",
17
17
  "x-dropdown": "projects"
18
18
  },
19
- "appId": {
20
- "type": "string",
21
- "format": "html-selector",
22
- "description": "The `appId` to use with `withServerTransition`.",
23
- "default": "serverApp",
24
- "x-deprecated": "This is deprecated and ignored since Angular 16 and not supported since Angular 17."
25
- },
26
19
  "main": {
27
20
  "type": "string",
28
21
  "format": "path",
@@ -56,7 +49,12 @@
56
49
  },
57
50
  "hydration": {
58
51
  "type": "boolean",
59
- "description": "Set up Hydration for the SSR application. It defaults to `true` for Angular versions >= 17.0.0. Otherwise, it defaults to `false`."
52
+ "description": "Set up Hydration for the SSR application.",
53
+ "default": true
54
+ },
55
+ "serverRouting": {
56
+ "description": "Creates a server application using the Server Routing and App Engine APIs (Developer Preview). _Note: this is only supported in Angular versions >= 19.0.0_.",
57
+ "type": "boolean"
60
58
  },
61
59
  "skipFormat": {
62
60
  "type": "boolean",
@@ -2,26 +2,21 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.setupSsr = setupSsr;
4
4
  const devkit_1 = require("@nx/devkit");
5
- const version_utils_1 = require("../utils/version-utils");
6
5
  const lib_1 = require("./lib");
7
6
  async function setupSsr(tree, schema) {
8
7
  (0, lib_1.validateOptions)(tree, schema);
9
- const options = (0, lib_1.normalizeOptions)(tree, schema);
10
- const { targets } = (0, devkit_1.readProjectConfiguration)(tree, options.project);
11
- const isUsingApplicationBuilder = targets.build.executor === '@angular-devkit/build-angular:application' ||
12
- targets.build.executor === '@nx/angular:application';
8
+ const options = await (0, lib_1.normalizeOptions)(tree, schema);
13
9
  if (!schema.skipPackageJson) {
14
- (0, lib_1.addDependencies)(tree, isUsingApplicationBuilder);
10
+ (0, lib_1.addDependencies)(tree, options.isUsingApplicationBuilder);
15
11
  }
16
- (0, lib_1.generateSSRFiles)(tree, options, isUsingApplicationBuilder);
12
+ (0, lib_1.generateSSRFiles)(tree, options);
17
13
  if (options.hydration) {
18
14
  (0, lib_1.addHydration)(tree, options);
19
15
  }
20
- const { major: angularMajorVersion } = (0, version_utils_1.getInstalledAngularVersionInfo)(tree);
21
- if (angularMajorVersion < 17 || !options.hydration) {
16
+ if (!options.hydration) {
22
17
  (0, lib_1.setRouterInitialNavigation)(tree, options);
23
18
  }
24
- if (isUsingApplicationBuilder) {
19
+ if (options.isUsingApplicationBuilder) {
25
20
  (0, lib_1.updateProjectConfigForApplicationBuilder)(tree, options);
26
21
  (0, lib_1.setServerTsConfigOptionsForApplicationBuilder)(tree, options);
27
22
  }
@@ -29,7 +24,7 @@ async function setupSsr(tree, schema) {
29
24
  (0, lib_1.updateProjectConfigForBrowserBuilder)(tree, options);
30
25
  (0, lib_1.generateTsConfigServerJsonForBrowserBuilder)(tree, options);
31
26
  }
32
- (0, lib_1.addServerFile)(tree, options, isUsingApplicationBuilder);
27
+ (0, lib_1.addServerFile)(tree, options);
33
28
  if (!options.skipFormat) {
34
29
  await (0, devkit_1.formatFiles)(tree);
35
30
  }