@nx/angular 0.0.0-pr-30715-a5f5e3b → 0.0.0-pr-31313-387cdca

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 (240) hide show
  1. package/fesm2022/nx-angular-mf.mjs.map +1 -1
  2. package/fesm2022/nx-angular.mjs.map +1 -1
  3. package/index.d.ts +1 -2
  4. package/mf/index.d.ts +1 -71
  5. package/mf/mf.d.ts +69 -0
  6. package/migrations.json +0 -98
  7. package/package.json +16 -25
  8. package/plugins/component-testing.js +3 -8
  9. package/src/builders/dev-server/dev-server.impl.js +7 -4
  10. package/src/builders/dev-server/lib/normalize-options.js +6 -0
  11. package/src/builders/dev-server/lib/validate-options.js +4 -0
  12. package/src/builders/dev-server/schema.d.ts +15 -3
  13. package/src/builders/dev-server/schema.json +9 -3
  14. package/src/builders/webpack-browser/webpack-browser.impl.js +0 -2
  15. package/src/builders/webpack-server/webpack-server.impl.d.ts +1 -3
  16. package/src/builders/webpack-server/webpack-server.impl.js +0 -2
  17. package/src/executors/application/application.impl.d.ts +2 -2
  18. package/src/executors/application/application.impl.js +6 -11
  19. package/src/executors/application/schema.d.ts +1 -1
  20. package/src/executors/application/schema.json +10 -21
  21. package/src/executors/application/utils/normalize-options.js +1 -8
  22. package/src/executors/application/utils/validate-options.js +40 -10
  23. package/src/executors/extract-i18n/extract-i18n.impl.js +14 -6
  24. package/src/executors/extract-i18n/schema.d.ts +6 -1
  25. package/src/executors/module-federation-dev-server/lib/normalize-options.js +7 -1
  26. package/src/executors/module-federation-dev-server/schema.d.ts +15 -3
  27. package/src/executors/module-federation-dev-server/schema.json +15 -2
  28. package/src/executors/module-federation-ssr-dev-server/module-federation-ssr-dev-server.impl.js +8 -10
  29. package/src/executors/ng-packagr-lite/ng-packagr-adjustments/ng-package/entry-point/entry-point.d.ts +3 -6
  30. package/src/executors/ng-packagr-lite/ng-packagr-adjustments/ng-package/entry-point/entry-point.js +8 -46
  31. package/src/executors/ng-packagr-lite/ng-packagr-adjustments/ng-package/entry-point/write-bundles.di.d.ts +1 -1
  32. package/src/executors/ng-packagr-lite/ng-packagr-adjustments/ng-package/entry-point/write-bundles.di.js +3 -3
  33. package/src/executors/ng-packagr-lite/ng-packagr-adjustments/ng-package/entry-point/write-bundles.transform.d.ts +2 -2
  34. package/src/executors/ng-packagr-lite/ng-packagr-adjustments/ng-package/entry-point/write-bundles.transform.js +6 -22
  35. package/src/executors/ng-packagr-lite/schema.json +3 -2
  36. package/src/executors/package/package.impl.js +5 -1
  37. package/src/executors/package/schema.d.ts +1 -3
  38. package/src/executors/package/schema.json +3 -2
  39. package/src/executors/utilities/esbuild-extensions.d.ts +1 -2
  40. package/src/executors/utilities/ng-packagr/package-imports.d.ts +1 -3
  41. package/src/executors/utilities/ng-packagr/package-imports.js +2 -2
  42. package/src/executors/utilities/ng-packagr/pre-v19/stylesheet-processor.d.ts +24 -1
  43. package/src/executors/utilities/ng-packagr/pre-v19/stylesheet-processor.js +105 -12
  44. package/src/executors/utilities/ng-packagr/stylesheet-processor.di.js +8 -4
  45. package/src/executors/utilities/ng-packagr/v19+/stylesheet-processor.d.ts +1 -1
  46. package/src/executors/utilities/ng-packagr/v19+/stylesheet-processor.js +11 -18
  47. package/src/generators/add-linting/add-linting.js +0 -8
  48. package/src/generators/application/application.js +1 -21
  49. package/src/generators/application/files/base-pre18/src/favicon.ico +0 -0
  50. package/src/generators/application/files/ng-module/src/app/app.component.spec.ts__tpl__ +29 -0
  51. package/src/generators/application/files/ng-module/src/app/{app__componentFileSuffix__.ts__tpl__ → app.component.ts__tpl__} +3 -3
  52. package/src/generators/application/files/ng-module/src/app/app.module.ts__tpl__ +17 -0
  53. package/src/generators/application/files/ng-module/src/main.ts__tpl__ +3 -11
  54. package/src/generators/application/files/nx-welcome/claimed/ng-module/src/app/{nx-welcome__componentFileSuffix__.ts__tpl__ → nx-welcome.component.ts__tpl__} +1 -1
  55. package/src/generators/application/files/nx-welcome/claimed/standalone/src/app/{nx-welcome__componentFileSuffix__.ts__tpl__ → nx-welcome.component.ts__tpl__} +1 -1
  56. package/src/generators/application/files/nx-welcome/not-configured/ng-module/src/app/{nx-welcome__componentFileSuffix__.ts__tpl__ → nx-welcome.component.ts__tpl__} +1 -1
  57. package/src/generators/application/files/nx-welcome/not-configured/standalone/src/app/{nx-welcome__componentFileSuffix__.ts__tpl__ → nx-welcome.component.ts__tpl__} +1 -1
  58. package/src/generators/application/files/nx-welcome/unclaimed/ng-module/src/app/{nx-welcome__componentFileSuffix__.ts__tpl__ → nx-welcome.component.ts__tpl__} +1 -1
  59. package/src/generators/application/files/nx-welcome/unclaimed/standalone/src/app/{nx-welcome__componentFileSuffix__.ts__tpl__ → nx-welcome.component.ts__tpl__} +1 -1
  60. package/src/generators/application/files/standalone-components/src/app/app.component.__style__ +0 -0
  61. package/src/generators/application/files/standalone-components/src/app/app.component.spec.ts__tpl__ +28 -0
  62. package/src/generators/application/files/standalone-components/src/app/{app__componentFileSuffix__.ts__tpl__ → app.component.ts__tpl__} +5 -5
  63. package/src/generators/application/files/standalone-components/src/app/app.config.ts__tpl__ +2 -6
  64. package/src/generators/application/files/standalone-components/src/main.ts__tpl__ +2 -2
  65. package/src/generators/application/lib/create-files.d.ts +1 -1
  66. package/src/generators/application/lib/create-files.js +14 -15
  67. package/src/generators/application/lib/create-project.d.ts +1 -1
  68. package/src/generators/application/lib/create-project.js +26 -119
  69. package/src/generators/application/lib/enable-strict-type-checking.js +0 -3
  70. package/src/generators/application/schema.json +1 -1
  71. package/src/generators/component/component.js +2 -13
  72. package/src/generators/component/files/__fileName__.ts__tpl__ +1 -1
  73. package/src/generators/component/lib/component.js +1 -11
  74. package/src/generators/component/lib/module.d.ts +2 -7
  75. package/src/generators/component/lib/module.js +5 -7
  76. package/src/generators/component/lib/normalize-options.js +3 -7
  77. package/src/generators/component/schema.d.ts +0 -1
  78. package/src/generators/component/schema.json +2 -6
  79. package/src/generators/convert-to-application-executor/convert-to-application-executor.js +22 -19
  80. package/src/generators/convert-to-rspack/convert-to-rspack.js +2 -6
  81. package/src/generators/convert-to-rspack/lib/get-custom-webpack-config.js +1 -1
  82. package/src/generators/directive/directive.js +1 -1
  83. package/src/generators/directive/lib/normalize-options.js +2 -7
  84. package/src/generators/directive/schema.d.ts +0 -1
  85. package/src/generators/directive/schema.json +2 -10
  86. package/src/generators/host/host.js +21 -1
  87. package/src/generators/host/schema.d.ts +1 -0
  88. package/src/generators/host/schema.json +7 -1
  89. package/src/generators/init/init.js +1 -1
  90. package/src/generators/library/files/ng-module/src/index.ts__tpl__ +1 -1
  91. package/src/generators/library/files/standalone-components/src/lib/lib.routes.ts__tpl__ +2 -2
  92. package/src/generators/library/lib/add-standalone-component.js +0 -1
  93. package/src/generators/library/lib/create-files.js +1 -10
  94. package/src/generators/library/lib/enable-strict-type-checking.d.ts +1 -1
  95. package/src/generators/library/lib/enable-strict-type-checking.js +0 -3
  96. package/src/generators/library/lib/normalize-options.d.ts +3 -3
  97. package/src/generators/library/lib/normalize-options.js +1 -6
  98. package/src/generators/library/lib/normalized-schema.d.ts +0 -2
  99. package/src/generators/library-secondary-entry-point/files/src/index.ts__tmpl__ +1 -1
  100. package/src/generators/library-secondary-entry-point/lib/add-files.js +1 -2
  101. package/src/generators/library-secondary-entry-point/lib/normalize-options.d.ts +2 -2
  102. package/src/generators/library-secondary-entry-point/lib/normalize-options.js +0 -3
  103. package/src/generators/library-secondary-entry-point/schema.d.ts +0 -1
  104. package/src/generators/move/lib/update-module-name.js +10 -17
  105. package/src/generators/move/lib/update-secondary-entry-points.js +3 -0
  106. package/src/generators/ng-add/migrators/builders/angular-devkit-karma.migrator.js +1 -1
  107. package/src/generators/ng-add/migrators/projects/app.migrator.js +8 -43
  108. package/src/generators/ngrx/schema.json +3 -3
  109. package/src/generators/ngrx-root-store/lib/normalize-options.js +2 -9
  110. package/src/generators/pipe/lib/normalize-options.js +0 -4
  111. package/src/generators/pipe/pipe.js +1 -1
  112. package/src/generators/pipe/schema.d.ts +0 -1
  113. package/src/generators/pipe/schema.json +2 -11
  114. package/src/generators/remote/files/standalone/src/bootstrap.server.ts__tmpl__ +4 -4
  115. package/src/generators/remote/lib/update-ssr-setup.js +0 -5
  116. package/src/generators/remote/remote.js +23 -0
  117. package/src/generators/remote/schema.d.ts +1 -0
  118. package/src/generators/remote/schema.json +7 -1
  119. package/src/generators/scam/lib/convert-component-to-scam.js +3 -1
  120. package/src/generators/scam/lib/normalize-options.js +3 -11
  121. package/src/generators/scam/schema.d.ts +0 -1
  122. package/src/generators/scam/schema.json +2 -1
  123. package/src/generators/scam-directive/lib/convert-directive-to-scam.js +3 -1
  124. package/src/generators/scam-directive/lib/normalize-options.js +2 -11
  125. package/src/generators/scam-directive/schema.d.ts +0 -2
  126. package/src/generators/scam-directive/schema.json +2 -10
  127. package/src/generators/scam-pipe/lib/convert-pipe-to-scam.js +3 -1
  128. package/src/generators/scam-pipe/lib/normalize-options.js +0 -8
  129. package/src/generators/scam-pipe/schema.d.ts +0 -2
  130. package/src/generators/scam-pipe/schema.json +0 -5
  131. package/src/generators/setup-mf/files/entry-module-files/{entry__componentFileSuffix__.ts__tmpl__ → entry.component.ts__tmpl__} +1 -1
  132. package/src/generators/setup-mf/files/entry-module-files/{__entryModuleFileName__.ts__tmpl__ → entry.module.ts__tmpl__} +4 -4
  133. package/src/generators/setup-mf/files/entry-module-files/entry.routes.ts__tmpl__ +2 -2
  134. package/src/generators/setup-mf/files/host-files/app.component.spec.ts__tmpl__ +47 -0
  135. package/src/generators/setup-mf/files/standalone-entry-component-files/{entry__componentFileSuffix__.ts__tmpl__ → entry.component.ts__tmpl__} +3 -3
  136. package/src/generators/setup-mf/files/standalone-entry-component-files/entry.routes.ts__tmpl__ +2 -2
  137. package/src/generators/setup-mf/files/ts-webpack/module-federation.config.ts__tmpl__ +1 -1
  138. package/src/generators/setup-mf/files/ts-webpack/tsconfig.lint.json__tmpl__ +1 -1
  139. package/src/generators/setup-mf/files/webpack/module-federation.config.js__tmpl__ +1 -1
  140. package/src/generators/setup-mf/lib/add-remote-entry.d.ts +2 -2
  141. package/src/generators/setup-mf/lib/add-remote-entry.js +3 -9
  142. package/src/generators/setup-mf/lib/add-remote-to-host.js +1 -11
  143. package/src/generators/setup-mf/lib/fix-bootstrap.d.ts +2 -2
  144. package/src/generators/setup-mf/lib/fix-bootstrap.js +4 -4
  145. package/src/generators/setup-mf/lib/generate-config.d.ts +2 -2
  146. package/src/generators/setup-mf/lib/generate-config.js +0 -1
  147. package/src/generators/setup-mf/lib/normalize-options.d.ts +1 -1
  148. package/src/generators/setup-mf/lib/normalize-options.js +0 -13
  149. package/src/generators/setup-mf/lib/remove-dead-code-from-remote.d.ts +2 -2
  150. package/src/generators/setup-mf/lib/remove-dead-code-from-remote.js +14 -18
  151. package/src/generators/setup-mf/lib/setup-host-if-dynamic.js +5 -1
  152. package/src/generators/setup-mf/lib/setup-tspath-for-remote.d.ts +2 -2
  153. package/src/generators/setup-mf/lib/setup-tspath-for-remote.js +1 -1
  154. package/src/generators/setup-mf/lib/update-host-app-routes.d.ts +2 -2
  155. package/src/generators/setup-mf/lib/update-host-app-routes.js +9 -12
  156. package/src/generators/setup-mf/lib/update-tsconfig.d.ts +2 -2
  157. package/src/generators/setup-mf/lib/update-tsconfig.js +5 -5
  158. package/src/generators/setup-mf/schema.d.ts +0 -7
  159. package/src/generators/setup-ssr/lib/add-dependencies.js +7 -4
  160. package/src/generators/setup-ssr/lib/add-hydration.js +3 -10
  161. package/src/generators/setup-ssr/lib/add-server-file.js +2 -7
  162. package/src/generators/setup-ssr/lib/generate-files.js +4 -17
  163. package/src/generators/setup-ssr/lib/generate-server-ts-config.js +2 -5
  164. package/src/generators/setup-ssr/lib/normalize-options.js +2 -2
  165. package/src/generators/setup-ssr/lib/update-project-config.js +0 -5
  166. package/src/generators/setup-ssr/lib/validate-options.js +2 -2
  167. package/src/generators/setup-ssr/schema.json +1 -1
  168. package/src/generators/utils/add-jest.js +1 -6
  169. package/src/generators/utils/assert-mf-utils.d.ts +1 -0
  170. package/src/generators/utils/assert-mf-utils.js +11 -0
  171. package/src/generators/utils/ensure-angular-dependencies.js +3 -6
  172. package/src/generators/utils/export-scam.d.ts +0 -1
  173. package/src/generators/utils/export-scam.js +2 -1
  174. package/src/generators/utils/find-module.js +13 -18
  175. package/src/generators/utils/storybook-ast/component-info.js +24 -40
  176. package/src/generators/utils/storybook-ast/module-info.d.ts +1 -1
  177. package/src/generators/utils/storybook-ast/module-info.js +8 -3
  178. package/src/generators/utils/testing.js +28 -28
  179. package/src/generators/utils/version-utils.js +2 -2
  180. package/src/generators/web-worker/lib/add-snippet.js +3 -3
  181. package/src/plugins/plugin.js +13 -22
  182. package/src/utils/backward-compatible-versions.d.ts +2 -2
  183. package/src/utils/backward-compatible-versions.js +21 -20
  184. package/src/utils/nx-devkit/ast-utils.js +3 -17
  185. package/src/utils/nx-devkit/testing.js +9 -9
  186. package/src/utils/versions.d.ts +4 -3
  187. package/src/utils/versions.js +5 -4
  188. package/src/executors/utilities/builder-package.d.ts +0 -1
  189. package/src/executors/utilities/builder-package.js +0 -11
  190. package/src/generators/application/files/ng-module/src/app/app__componentFileSuffix__.spec.ts__tpl__ +0 -28
  191. package/src/generators/application/files/ng-module/src/app/app__moduleTypeSeparator__module.ts__tpl__ +0 -17
  192. package/src/generators/application/files/standalone-components/src/app/app__componentFileSuffix__.spec.ts__tpl__ +0 -27
  193. package/src/generators/setup-mf/files/host-files/__appFileName__.spec.ts__tmpl__ +0 -43
  194. package/src/generators/setup-ssr/files/v20+/application-builder/ngmodule-src/__main__ +0 -1
  195. package/src/generators/setup-ssr/files/v20+/application-builder/ngmodule-src/app/__rootModuleFileName__ +0 -12
  196. package/src/generators/setup-ssr/files/v20+/application-builder/ngmodule-src/app/app.routes.server.ts__tpl__ +0 -8
  197. package/src/generators/setup-ssr/files/v20+/application-builder/server/__serverFileName__ +0 -66
  198. package/src/generators/setup-ssr/files/v20+/application-builder/standalone-src/__main__ +0 -7
  199. package/src/generators/setup-ssr/files/v20+/application-builder/standalone-src/app/app.config.server.ts__tpl__ +0 -12
  200. package/src/generators/setup-ssr/files/v20+/application-builder/standalone-src/app/app.routes.server.ts__tpl__ +0 -8
  201. package/src/generators/setup-ssr/files/v20+/server-builder/ngmodule-src/__main__ +0 -1
  202. package/src/generators/setup-ssr/files/v20+/server-builder/ngmodule-src/app/__rootModuleFileName__ +0 -14
  203. package/src/generators/setup-ssr/files/v20+/server-builder/root/tsconfig.server.json.template +0 -16
  204. package/src/generators/setup-ssr/files/v20+/server-builder/server/__serverFileName__ +0 -69
  205. package/src/generators/setup-ssr/files/v20+/server-builder/standalone-src/__main__ +0 -7
  206. package/src/generators/setup-ssr/files/v20+/server-builder/standalone-src/app/app.config.server.ts.template +0 -11
  207. package/src/generators/utils/app-components-info.d.ts +0 -9
  208. package/src/generators/utils/app-components-info.js +0 -39
  209. package/src/generators/utils/artifact-types.d.ts +0 -3
  210. package/src/generators/utils/artifact-types.js +0 -33
  211. package/src/migrations/update-21-2-0/migrate-provide-server-rendering-import.d.ts +0 -2
  212. package/src/migrations/update-21-2-0/migrate-provide-server-rendering-import.js +0 -110
  213. package/src/migrations/update-21-2-0/replace-provide-server-routing.d.ts +0 -2
  214. package/src/migrations/update-21-2-0/replace-provide-server-routing.js +0 -103
  215. package/src/migrations/update-21-2-0/set-generator-defaults-for-previous-style-guide.d.ts +0 -2
  216. package/src/migrations/update-21-2-0/set-generator-defaults-for-previous-style-guide.js +0 -47
  217. package/src/migrations/update-21-2-0/update-angular-cli.d.ts +0 -3
  218. package/src/migrations/update-21-2-0/update-angular-cli.js +0 -23
  219. /package/src/generators/application/files/{base → base-18+}/public/favicon.ico +0 -0
  220. /package/src/generators/application/files/{ng-module/src/app/app__componentFileSuffix__.__style__ → base-pre18/src/assets/.gitkeep__tpl__} +0 -0
  221. /package/src/generators/application/files/{standalone-components/src/app/app__componentFileSuffix__.__style__ → ng-module/src/app/app.component.__style__} +0 -0
  222. /package/src/generators/application/files/ng-module/src/app/{app__componentFileSuffix__.html__tpl__ → app.component.html__tpl__} +0 -0
  223. /package/src/generators/application/files/standalone-components/src/app/{app__componentFileSuffix__.html__tpl__ → app.component.html__tpl__} +0 -0
  224. /package/src/generators/component/files/{__fileName____ngext__.html__tpl__ → __fileName__.html__tpl__} +0 -0
  225. /package/src/generators/library/files/ng-module/src/lib/{__libFileName____moduleTypeSeparator__module.ts__tpl__ → __libFileName__.module.ts__tpl__} +0 -0
  226. /package/src/generators/library-secondary-entry-point/files/src/lib/{__fileName____moduleTypeSeparator__module.ts__tmpl__ → __fileName__.module.ts__tmpl__} +0 -0
  227. /package/src/generators/setup-ssr/files/{v19 → v19+}/application-builder/ngmodule-src/__main__ +0 -0
  228. /package/src/generators/setup-ssr/files/{v19 → v19+}/application-builder/ngmodule-src/app/__rootModuleFileName__ +0 -0
  229. /package/src/generators/setup-ssr/files/{v19 → v19+}/application-builder/ngmodule-src/app/app.routes.server.ts__tpl__ +0 -0
  230. /package/src/generators/setup-ssr/files/{v19 → v19+}/application-builder/server/__serverFileName__ +0 -0
  231. /package/src/generators/setup-ssr/files/{v19 → v19+}/application-builder/standalone-src/__main__ +0 -0
  232. /package/src/generators/setup-ssr/files/{v19 → v19+}/application-builder/standalone-src/app/app.config.server.ts__tpl__ +0 -0
  233. /package/src/generators/setup-ssr/files/{v19 → v19+}/application-builder/standalone-src/app/app.routes.server.ts__tpl__ +0 -0
  234. /package/src/generators/setup-ssr/files/{v19 → v19+}/application-builder-common-engine/server/__serverFileName__ +0 -0
  235. /package/src/generators/setup-ssr/files/{v19 → v19+}/server-builder/ngmodule-src/__main__ +0 -0
  236. /package/src/generators/setup-ssr/files/{v19 → v19+}/server-builder/ngmodule-src/app/__rootModuleFileName__ +0 -0
  237. /package/src/generators/setup-ssr/files/{v19 → v19+}/server-builder/root/tsconfig.server.json.template +0 -0
  238. /package/src/generators/setup-ssr/files/{v19 → v19+}/server-builder/server/__serverFileName__ +0 -0
  239. /package/src/generators/setup-ssr/files/{v19 → v19+}/server-builder/standalone-src/__main__ +0 -0
  240. /package/src/generators/setup-ssr/files/{v19 → v19+}/server-builder/standalone-src/app/app.config.server.ts.template +0 -0
@@ -1,11 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.assertBuilderPackageIsInstalled = assertBuilderPackageIsInstalled;
4
- function assertBuilderPackageIsInstalled(packageName) {
5
- try {
6
- require(packageName);
7
- }
8
- catch {
9
- throw new Error(`The required package ${packageName} is not installed. Please make sure it is installed and try again.`);
10
- }
11
- }
@@ -1,28 +0,0 @@
1
- import { TestBed } from '@angular/core/testing';
2
- import { App<%= componentType %> } from './app<%= componentFileSuffix %>';<% if(!minimal) { %>
3
- import { NxWelcome<%= componentType %> } from './nx-welcome<%= componentFileSuffix %>';<% } %><% if(routing) { %>
4
- import { RouterModule } from '@angular/router';<% } %>
5
-
6
- describe('App<%= componentType %>', () => {
7
- beforeEach(async () => {
8
- await TestBed.configureTestingModule({
9
- imports: [<% if(routing) { %>RouterModule.forRoot([])<% } %>],
10
- declarations: [App<%= componentType %><% if(!minimal) { %>, NxWelcome<%= componentType %><% } %>]
11
- }).compileComponents();
12
- });
13
-
14
- it('should render title', () => {
15
- const fixture = TestBed.createComponent(App<%= componentType %>);
16
- fixture.detectChanges();
17
- const compiled = fixture.nativeElement as HTMLElement;
18
- expect(compiled.querySelector('h1')?.textContent).toContain(
19
- 'Welcome <%= appName %>'
20
- );
21
- });<% if(!minimal) { %>
22
-
23
- it(`should have as title '<%= appName %>'`, () => {
24
- const fixture = TestBed.createComponent(App<%= componentType %>);
25
- const app = fixture.componentInstance;
26
- expect(app.title).toEqual('<%= appName %>');
27
- });<% } %>
28
- });
@@ -1,17 +0,0 @@
1
- import { NgModule<% if (provideGlobalErrorListener) { %>, provideBrowserGlobalErrorListeners<% } %> } from '@angular/core';
2
- import { BrowserModule } from '@angular/platform-browser';<% if(routing) { %>
3
- import { RouterModule } from '@angular/router';<% } %>
4
- import { App<%= componentType %> } from './app<%= componentFileSuffix %>';<% if(routing) { %>
5
- import { appRoutes } from './app.routes';<% } %><% if(!minimal) { %>
6
- import { NxWelcome<%= componentType %> } from './nx-welcome<%= componentFileSuffix %>';<% } %>
7
-
8
- @NgModule({
9
- declarations: [App<%= componentType %><% if(!minimal) { %>, NxWelcome<%= componentType %><% } %>],
10
- imports: [
11
- BrowserModule,<% if(routing) { %>
12
- RouterModule.forRoot(appRoutes),<% } %>
13
- ],
14
- providers: [<% if (provideGlobalErrorListener) { %>provideBrowserGlobalErrorListeners()<% } %>],
15
- bootstrap: [App<%= componentType %>],
16
- })
17
- export class AppModule {}
@@ -1,27 +0,0 @@
1
- import { TestBed } from '@angular/core/testing';
2
- import { App<%= componentType %> } from './app<%= componentFileSuffix %>';<% if(!minimal) { %>
3
- import { NxWelcome<%= componentType %> } from './nx-welcome<%= componentFileSuffix %>';<% } %><% if(routing) { %>
4
- import { RouterModule } from '@angular/router';<% } %>
5
-
6
- describe('App<%= componentType %>', () => {
7
- beforeEach(async () => {
8
- await TestBed.configureTestingModule({
9
- imports: [App<%= componentType %><% if(!minimal) { %>, NxWelcome<%= componentType %><% } %><% if(routing) { %>, RouterModule.forRoot([])<% } %>],
10
- }).compileComponents();
11
- });
12
-
13
- it('should render title', () => {
14
- const fixture = TestBed.createComponent(App<%= componentType %>);
15
- fixture.detectChanges();
16
- const compiled = fixture.nativeElement as HTMLElement;
17
- expect(compiled.querySelector('h1')?.textContent).toContain(
18
- 'Welcome <%= appName %>'
19
- );
20
- });<% if(!minimal) { %>
21
-
22
- it(`should have as title '<%= appName %>'`, () => {
23
- const fixture = TestBed.createComponent(App<%= componentType %>);
24
- const app = fixture.componentInstance;
25
- expect(app.title).toEqual('<%= appName %>');
26
- });<% } %>
27
- });
@@ -1,43 +0,0 @@
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 +0,0 @@
1
- export { <%= rootModuleClassName %> as default } from './app/<%= rootModuleFileName.slice(0, -3) %>';
@@ -1,12 +0,0 @@
1
- import { NgModule } from '@angular/core';
2
- import { provideServerRendering, withRoutes } from '@angular/ssr';
3
- import { <%= appSymbolName %> } from './<%= appFileName %>';
4
- import { AppModule } from './app<%= moduleTypeSeparator %>module';
5
- import { serverRoutes } from './app.routes.server';
6
-
7
- @NgModule({
8
- imports: [AppModule],
9
- providers: [provideServerRendering(withRoutes(serverRoutes))],
10
- bootstrap: [<%= appSymbolName %>],
11
- })
12
- export class <%= rootModuleClassName %> {}
@@ -1,8 +0,0 @@
1
- import { RenderMode, ServerRoute } from '@angular/ssr';
2
-
3
- export const serverRoutes: ServerRoute[] = [
4
- {
5
- path: '**',
6
- renderMode: RenderMode.Prerender
7
- }
8
- ];
@@ -1,66 +0,0 @@
1
- import {
2
- AngularNodeAppEngine,
3
- createNodeRequestHandler,
4
- isMainModule,
5
- writeResponseToNodeResponse,
6
- } from '@angular/ssr/node';
7
- import express from 'express';
8
- import { dirname, resolve } from 'node:path';
9
- import { fileURLToPath } from 'node:url';
10
-
11
- const serverDistFolder = dirname(fileURLToPath(import.meta.url));
12
- const browserDistFolder = resolve(serverDistFolder, '../<%= browserDistDirectory %>');
13
-
14
- const app = express();
15
- const angularApp = new AngularNodeAppEngine();
16
-
17
- /**
18
- * Example Express Rest API endpoints can be defined here.
19
- * Uncomment and define endpoints as necessary.
20
- *
21
- * Example:
22
- * ```ts
23
- * app.get('/api/**', (req, res) => {
24
- * // Handle API request
25
- * });
26
- * ```
27
- */
28
-
29
- /**
30
- * Serve static files from /<%= browserDistDirectory %>
31
- */
32
- app.use(
33
- express.static(browserDistFolder, {
34
- maxAge: '1y',
35
- index: false,
36
- redirect: false,
37
- })
38
- );
39
-
40
- /**
41
- * Handle all other requests by rendering the Angular application.
42
- */
43
- app.use('/**', (req, res, next) => {
44
- angularApp
45
- .handle(req)
46
- .then((response) =>
47
- response ? writeResponseToNodeResponse(response, res) : next()
48
- )
49
- .catch(next);
50
- });
51
-
52
- /**
53
- * Start the server if this module is the main entry point.
54
- * The server listens on the port defined by the `PORT` environment variable, or defaults to <%= serverPort %>.
55
- */
56
- if (isMainModule(import.meta.url)) {
57
- const port = process.env['PORT'] || <%= serverPort %>;
58
- app.listen(port, () => {
59
- console.log(`Node Express server listening on http://localhost:${port}`);
60
- });
61
- }
62
-
63
- /**
64
- * Request handler used by the Angular CLI (for dev-server and during build) or Firebase Cloud Functions.
65
- */
66
- export const reqHandler = createNodeRequestHandler(app);
@@ -1,7 +0,0 @@
1
- import { bootstrapApplication } from '@angular/platform-browser';
2
- import { <%= appSymbolName %> } from './app/<%= appFileName %>';
3
- import { config } from './app/app.config.server';
4
-
5
- const bootstrap = () => bootstrapApplication(<%= appSymbolName %>, config);
6
-
7
- export default bootstrap;
@@ -1,12 +0,0 @@
1
- import { mergeApplicationConfig, ApplicationConfig } from '@angular/core';
2
- import { provideServerRendering, withRoutes } from '@angular/ssr';
3
- import { appConfig } from './app.config';
4
- import { serverRoutes } from './app.routes.server';
5
-
6
- const serverConfig: ApplicationConfig = {
7
- providers: [
8
- provideServerRendering(withRoutes(serverRoutes))
9
- ]
10
- };
11
-
12
- export const config = mergeApplicationConfig(appConfig, serverConfig);
@@ -1,8 +0,0 @@
1
- import { RenderMode, ServerRoute } from '@angular/ssr';
2
-
3
- export const serverRoutes: ServerRoute[] = [
4
- {
5
- path: '**',
6
- renderMode: RenderMode.Prerender
7
- }
8
- ];
@@ -1 +0,0 @@
1
- export { <%= rootModuleClassName %> as default } from './app/<%= rootModuleFileName.slice(0, -3) %>';
@@ -1,14 +0,0 @@
1
- import { NgModule } from '@angular/core';
2
- import { ServerModule } from '@angular/platform-server';
3
-
4
- import { AppModule } from './app<%= moduleTypeSeparator %>module';
5
- import { <%= appSymbolName %> } from './<%= appFileName %>';
6
-
7
- @NgModule({
8
- imports: [
9
- AppModule,
10
- ServerModule,
11
- ],
12
- bootstrap: [<%= appSymbolName %>],
13
- })
14
- export class <%= rootModuleClassName %> {}
@@ -1,16 +0,0 @@
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,69 +0,0 @@
1
- import 'zone.js/node';
2
-
3
- import { APP_BASE_HREF } from '@angular/common';
4
- import { CommonEngine } from '@angular/ssr/node';
5
- import * as express from 'express';
6
- import { existsSync } from 'node:fs';
7
- import { join } from 'node:path';
8
- import <% if (standalone) { %>bootstrap<% } else { %><%= rootModuleClassName %><% } %> from './<%= main.slice(0, -3) %>';
9
-
10
- // The Express app is exported so that it can be used by serverless Functions.
11
- export function app(): express.Express {
12
- const server = express();
13
- const distFolder = join(process.cwd(), '<%= browserDistDirectory %>');
14
- const indexHtml = existsSync(join(distFolder, 'index.original.html'))
15
- ? join(distFolder, 'index.original.html')
16
- : join(distFolder, 'index.html');
17
-
18
- const commonEngine = new CommonEngine();
19
-
20
- server.set('view engine', 'html');
21
- server.set('views', distFolder);
22
-
23
- // Example Express Rest API endpoints
24
- // server.get('/api/**', (req, res) => { });
25
- // Serve static files from /browser
26
- server.get('*.*', express.static(distFolder, {
27
- maxAge: '1y'
28
- }));
29
-
30
- // All regular routes use the Angular engine
31
- server.get('*', (req, res, next) => {
32
- const { protocol, originalUrl, baseUrl, headers } = req;
33
-
34
- commonEngine
35
- .render({
36
- bootstrap<% if (!standalone) { %>: <%= rootModuleClassName %><% } %>,
37
- documentFilePath: indexHtml,
38
- url: `${protocol}://${headers.host}${originalUrl}`,
39
- publicPath: distFolder,
40
- providers: [{ provide: APP_BASE_HREF, useValue: baseUrl }],
41
- })
42
- .then((html) => res.send(html))
43
- .catch((err) => next(err));
44
- });
45
-
46
- return server;
47
- }
48
-
49
- function run(): void {
50
- const port = process.env['PORT'] || <%= serverPort %>;
51
-
52
- // Start up the Node server
53
- const server = app();
54
- server.listen(port, () => {
55
- console.log(`Node Express server listening on http://localhost:${port}`);
56
- });
57
- }
58
-
59
- // Webpack will replace 'require' with '__webpack_require__'
60
- // '__non_webpack_require__' is a proxy to Node 'require'
61
- // The below code is to ensure that the server is run only when not requiring the bundle.
62
- declare const __non_webpack_require__: NodeRequire;
63
- const mainModule = __non_webpack_require__.main;
64
- const moduleFilename = mainModule && mainModule.filename || '';
65
- if (moduleFilename === __filename || moduleFilename.includes('iisnode')) {
66
- run();
67
- }
68
-
69
- export default <% if (standalone) { %>bootstrap<% } else { %><%= rootModuleClassName %><% } %>;
@@ -1,7 +0,0 @@
1
- import { bootstrapApplication } from '@angular/platform-browser';
2
- import { <%= appSymbolName %> } from './app/<%= appFileName %>';
3
- import { config } from './app/app.config.server';
4
-
5
- const bootstrap = () => bootstrapApplication(<%= appSymbolName %>, config);
6
-
7
- export default bootstrap;
@@ -1,11 +0,0 @@
1
- import { mergeApplicationConfig, ApplicationConfig } from '@angular/core';
2
- import { provideServerRendering } from '@angular/ssr';
3
- import { appConfig } from './app.config';
4
-
5
- const serverConfig: ApplicationConfig = {
6
- providers: [
7
- provideServerRendering()
8
- ]
9
- };
10
-
11
- export const config = mergeApplicationConfig(appConfig, serverConfig);
@@ -1,9 +0,0 @@
1
- import { type ProjectConfiguration, type Tree } from '@nx/devkit';
2
- export type ComponentMetadata = {
3
- fileName: string;
4
- extensionlessFileName: string;
5
- path: string;
6
- symbolName: string;
7
- };
8
- export declare function getAppComponentInfo(tree: Tree, componentFileSuffix: string, project: ProjectConfiguration): ComponentMetadata;
9
- export declare function getNxWelcomeComponentInfo(tree: Tree, componentFileSuffix: string, project: ProjectConfiguration): ComponentMetadata;
@@ -1,39 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getAppComponentInfo = getAppComponentInfo;
4
- exports.getNxWelcomeComponentInfo = getNxWelcomeComponentInfo;
5
- const devkit_1 = require("@nx/devkit");
6
- const node_path_1 = require("node:path");
7
- const version_utils_1 = require("./version-utils");
8
- function getAppComponentInfo(tree, componentFileSuffix, project) {
9
- return getComponentInfo(tree, 'app', componentFileSuffix, project);
10
- }
11
- function getNxWelcomeComponentInfo(tree, componentFileSuffix, project) {
12
- return getComponentInfo(tree, 'nx-welcome', componentFileSuffix, project);
13
- }
14
- // TODO(leo): follow this up and improve it by using static analysis
15
- function getComponentInfo(tree, component, componentFileSuffix, project) {
16
- let componentPath = (0, devkit_1.joinPathFragments)(project.sourceRoot, `app/${component}.component.ts`);
17
- if (!tree.exists(componentPath)) {
18
- componentPath = (0, devkit_1.joinPathFragments)(project.sourceRoot, `app/${component}.ts`);
19
- }
20
- if (!tree.exists(componentPath)) {
21
- if (componentFileSuffix) {
22
- componentPath = (0, devkit_1.joinPathFragments)(project.sourceRoot, `app/${component}${componentFileSuffix}.ts`);
23
- }
24
- }
25
- if (!tree.exists(componentPath)) {
26
- const { major: angularMajorVersion } = (0, version_utils_1.getInstalledAngularVersionInfo)(tree);
27
- componentPath = (0, devkit_1.joinPathFragments)(project.sourceRoot, angularMajorVersion >= 20
28
- ? `app/${component}.ts`
29
- : `app/${component}.component.ts`);
30
- }
31
- const fileName = (0, node_path_1.basename)(componentPath);
32
- const extensionlessFileName = fileName.slice(0, -3);
33
- return {
34
- fileName,
35
- extensionlessFileName,
36
- path: componentPath,
37
- symbolName: (0, devkit_1.names)(extensionlessFileName).className,
38
- };
39
- }
@@ -1,3 +0,0 @@
1
- import { type Tree } from '@nx/devkit';
2
- export declare function getComponentType(tree: Tree): string | undefined;
3
- export declare function getModuleTypeSeparator(tree: Tree): '-' | '.';
@@ -1,33 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getComponentType = getComponentType;
4
- exports.getModuleTypeSeparator = getModuleTypeSeparator;
5
- const devkit_1 = require("@nx/devkit");
6
- const version_utils_1 = require("./version-utils");
7
- function getComponentType(tree) {
8
- const nxJson = (0, devkit_1.readNxJson)(tree);
9
- let componentType = nxJson.generators?.['@nx/angular:component']?.type ??
10
- nxJson.generators?.['@nx/angular']?.component?.type;
11
- if (!componentType) {
12
- const { major: angularMajorVersion } = (0, version_utils_1.getInstalledAngularVersionInfo)(tree);
13
- if (angularMajorVersion < 20) {
14
- componentType = 'component';
15
- }
16
- }
17
- return componentType;
18
- }
19
- function getModuleTypeSeparator(tree) {
20
- const nxJson = (0, devkit_1.readNxJson)(tree);
21
- // We don't have a "module" generator but the @nx/angular collection extends
22
- // from the @schematics/angular collection so the "module" generator is
23
- // available there. We check for a generator default for each collection.
24
- let typeSeparator = nxJson.generators?.['@nx/angular:module']?.typeSeparator ??
25
- nxJson.generators?.['@nx/angular']?.module?.typeSeparator ??
26
- nxJson.generators?.['@schematics/angular:module']?.typeSeparator ??
27
- nxJson.generators?.['@schematics/angular']?.module?.typeSeparator;
28
- if (!typeSeparator) {
29
- const { major: angularMajorVersion } = (0, version_utils_1.getInstalledAngularVersionInfo)(tree);
30
- typeSeparator = angularMajorVersion >= 20 ? '-' : '.';
31
- }
32
- return typeSeparator;
33
- }
@@ -1,2 +0,0 @@
1
- import { type Tree } from '@nx/devkit';
2
- export default function (tree: Tree): Promise<void>;
@@ -1,110 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.default = default_1;
4
- const tslib_1 = require("tslib");
5
- const devkit_1 = require("@nx/devkit");
6
- const ts = tslib_1.__importStar(require("typescript"));
7
- const file_change_recorder_1 = require("../../utils/file-change-recorder");
8
- const versions_1 = require("../../utils/versions");
9
- const projects_1 = require("../utils/projects");
10
- async function default_1(tree) {
11
- const projects = await (0, projects_1.getProjectsFilteredByDependencies)(tree, [
12
- 'npm:@angular/platform-server',
13
- ]);
14
- if (!projects.length) {
15
- return;
16
- }
17
- let isSsrInstalled = false;
18
- for (const { project } of projects) {
19
- (0, devkit_1.visitNotIgnoredFiles)(tree, project.root, (file) => {
20
- if (!file.endsWith('.ts') || file.endsWith('.d.ts')) {
21
- return;
22
- }
23
- const shouldInstallSsr = processFile(tree, file);
24
- if (shouldInstallSsr && !isSsrInstalled) {
25
- isSsrInstalled = true;
26
- (0, devkit_1.addDependenciesToPackageJson)(tree, { '@angular/ssr': versions_1.angularDevkitVersion }, {}, undefined, true);
27
- }
28
- });
29
- }
30
- await (0, devkit_1.formatFiles)(tree);
31
- }
32
- function processFile(tree, filePath) {
33
- const content = tree.read(filePath, 'utf-8');
34
- if (!content.includes('provideServerRendering') ||
35
- !content.includes('@angular/platform-server')) {
36
- return false;
37
- }
38
- const sourceFile = ts.createSourceFile(filePath, content, ts.ScriptTarget.Latest, true);
39
- let platformServerHasProvideServerRendering = false;
40
- let platformServerImportNode;
41
- let ssrImportNode;
42
- const platformServerImports = new Set();
43
- sourceFile.forEachChild((node) => {
44
- if (!ts.isImportDeclaration(node)) {
45
- return;
46
- }
47
- const moduleSpecifier = node.moduleSpecifier.getText(sourceFile);
48
- if (moduleSpecifier.includes('@angular/platform-server')) {
49
- platformServerImportNode = node;
50
- const importClause = node.importClause;
51
- if (importClause &&
52
- importClause.namedBindings &&
53
- ts.isNamedImports(importClause.namedBindings)) {
54
- const namedImports = importClause.namedBindings.elements.map((e) => e.getText(sourceFile));
55
- namedImports.forEach((importName) => {
56
- if (importName === 'provideServerRendering') {
57
- platformServerHasProvideServerRendering = true;
58
- }
59
- else {
60
- platformServerImports.add(importName);
61
- }
62
- });
63
- }
64
- }
65
- else if (moduleSpecifier.includes('@angular/ssr')) {
66
- ssrImportNode = node;
67
- }
68
- });
69
- if (!platformServerHasProvideServerRendering) {
70
- return;
71
- }
72
- const recorder = new file_change_recorder_1.FileChangeRecorder(tree, filePath);
73
- const printer = ts.createPrinter({
74
- newLine: ts.NewLineKind.LineFeed,
75
- });
76
- if (ssrImportNode?.importClause?.namedBindings &&
77
- ts.isNamedImports(ssrImportNode.importClause.namedBindings)) {
78
- const namedBindingsNode = ssrImportNode.importClause
79
- .namedBindings;
80
- const updatedNamedBindingsNode = ts.factory.updateNamedImports(namedBindingsNode, [
81
- ...namedBindingsNode.elements,
82
- ts.factory.createImportSpecifier(false, undefined, ts.factory.createIdentifier('provideServerRendering')),
83
- ]);
84
- recorder.replace(namedBindingsNode, printer.printNode(ts.EmitHint.Unspecified, updatedNamedBindingsNode, sourceFile));
85
- }
86
- else {
87
- /**
88
- * Add a new import statement with the needed named import in case it
89
- * doesn't exist yet or it doesn't have named imports.
90
- *
91
- * It would be quite uncommon to have an import from @angular/ssr without
92
- * named imports, but if that's the case, we'll just add an extra import
93
- * statement with the needed named import.
94
- */
95
- recorder.insertLeft(0, `import { provideServerRendering } from '@angular/ssr';\n`);
96
- }
97
- if (platformServerImports.size > 0) {
98
- // we only collected platform server imports because there were named
99
- // imports, so we can safely use the type
100
- const namedBindingsNode = platformServerImportNode.importClause
101
- .namedBindings;
102
- const updatedNamedBindingsNode = ts.factory.updateNamedImports(namedBindingsNode, namedBindingsNode.elements.filter((e) => platformServerImports.has(e.getText(sourceFile))));
103
- recorder.replace(namedBindingsNode, printer.printNode(ts.EmitHint.Unspecified, updatedNamedBindingsNode, sourceFile));
104
- }
105
- else {
106
- recorder.remove(platformServerImportNode.getFullStart(), platformServerImportNode.getEnd());
107
- }
108
- recorder.applyChanges();
109
- return true;
110
- }
@@ -1,2 +0,0 @@
1
- import { type Tree } from '@nx/devkit';
2
- export default function (tree: Tree): Promise<void>;