@nx/angular 21.1.1 → 21.2.0-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -3
- package/fesm2022/nx-angular-mf.mjs.map +1 -1
- package/fesm2022/nx-angular.mjs.map +1 -1
- package/index.d.ts +2 -1
- package/mf/index.d.ts +71 -1
- package/migrations.json +106 -0
- package/ng-package.json +0 -1
- package/package.json +28 -16
- package/plugins/component-testing.js +8 -3
- package/src/builders/dev-server/dev-server.impl.js +4 -7
- package/src/builders/dev-server/lib/normalize-options.js +0 -6
- package/src/builders/dev-server/lib/validate-options.js +0 -4
- package/src/builders/dev-server/schema.d.ts +3 -15
- package/src/builders/dev-server/schema.json +3 -9
- package/src/builders/webpack-browser/webpack-browser.impl.js +2 -0
- package/src/builders/webpack-server/webpack-server.impl.d.ts +3 -1
- package/src/builders/webpack-server/webpack-server.impl.js +2 -0
- package/src/executors/application/application.impl.d.ts +2 -2
- package/src/executors/application/application.impl.js +11 -6
- package/src/executors/application/schema.d.ts +1 -1
- package/src/executors/application/schema.json +21 -10
- package/src/executors/application/utils/normalize-options.js +8 -1
- package/src/executors/application/utils/validate-options.js +10 -40
- package/src/executors/extract-i18n/extract-i18n.impl.js +6 -14
- package/src/executors/extract-i18n/schema.d.ts +1 -6
- package/src/executors/extract-i18n/schema.json +5 -0
- package/src/executors/extract-i18n/utils/validate-options.d.ts +2 -0
- package/src/executors/extract-i18n/utils/validate-options.js +13 -0
- package/src/executors/module-federation-dev-server/lib/normalize-options.js +1 -7
- package/src/executors/module-federation-dev-server/schema.d.ts +3 -15
- package/src/executors/module-federation-dev-server/schema.json +2 -15
- package/src/executors/module-federation-ssr-dev-server/module-federation-ssr-dev-server.impl.js +10 -8
- package/src/executors/ng-packagr-lite/ng-packagr-adjustments/ng-package/entry-point/entry-point.d.ts +6 -3
- package/src/executors/ng-packagr-lite/ng-packagr-adjustments/ng-package/entry-point/entry-point.js +46 -8
- package/src/executors/ng-packagr-lite/ng-packagr-adjustments/ng-package/entry-point/write-bundles.di.d.ts +1 -1
- package/src/executors/ng-packagr-lite/ng-packagr-adjustments/ng-package/entry-point/write-bundles.di.js +3 -3
- package/src/executors/ng-packagr-lite/ng-packagr-adjustments/ng-package/entry-point/write-bundles.transform.d.ts +2 -2
- package/src/executors/ng-packagr-lite/ng-packagr-adjustments/ng-package/entry-point/write-bundles.transform.js +22 -6
- package/src/executors/ng-packagr-lite/schema.json +2 -3
- package/src/executors/package/package.impl.js +1 -5
- package/src/executors/package/schema.d.ts +3 -1
- package/src/executors/package/schema.json +2 -3
- package/src/executors/utilities/builder-package.d.ts +1 -0
- package/src/executors/utilities/builder-package.js +11 -0
- package/src/executors/utilities/esbuild-extensions.d.ts +2 -1
- package/src/executors/utilities/ng-packagr/package-imports.d.ts +3 -1
- package/src/executors/utilities/ng-packagr/package-imports.js +2 -2
- package/src/executors/utilities/ng-packagr/pre-v19/stylesheet-processor.d.ts +2 -24
- package/src/executors/utilities/ng-packagr/pre-v19/stylesheet-processor.js +40 -107
- package/src/executors/utilities/ng-packagr/stylesheet-processor.di.js +4 -8
- package/src/executors/utilities/ng-packagr/v19+/stylesheet-processor.d.ts +1 -1
- package/src/executors/utilities/ng-packagr/v19+/stylesheet-processor.js +18 -11
- package/src/generators/add-linting/add-linting.js +8 -0
- package/src/generators/application/application.js +22 -8
- package/src/generators/application/files/base/tsconfig.app.json__tpl__ +10 -1
- package/src/generators/application/files/base/tsconfig.json__tpl__ +5 -6
- package/src/generators/application/files/ng-module/src/app/app__componentFileSuffix__.spec.ts__tpl__ +28 -0
- package/src/generators/application/files/ng-module/src/app/{app.component.ts__tpl__ → app__componentFileSuffix__.ts__tpl__} +4 -4
- package/src/generators/application/files/ng-module/src/app/app__moduleTypeSeparator__module.ts__tpl__ +17 -0
- package/src/generators/application/files/ng-module/src/main.ts__tpl__ +11 -3
- package/src/generators/application/files/nx-welcome/claimed/ng-module/src/app/{nx-welcome.component.ts__tpl__ → nx-welcome__componentFileSuffix__.ts__tpl__} +1 -1
- package/src/generators/application/files/nx-welcome/claimed/standalone/src/app/{nx-welcome.component.ts__tpl__ → nx-welcome__componentFileSuffix__.ts__tpl__} +1 -1
- package/src/generators/application/files/nx-welcome/not-configured/ng-module/src/app/{nx-welcome.component.ts__tpl__ → nx-welcome__componentFileSuffix__.ts__tpl__} +1 -1
- package/src/generators/application/files/nx-welcome/not-configured/standalone/src/app/{nx-welcome.component.ts__tpl__ → nx-welcome__componentFileSuffix__.ts__tpl__} +1 -1
- package/src/generators/application/files/nx-welcome/unclaimed/ng-module/src/app/{nx-welcome.component.ts__tpl__ → nx-welcome__componentFileSuffix__.ts__tpl__} +1 -1
- package/src/generators/application/files/nx-welcome/unclaimed/standalone/src/app/{nx-welcome.component.ts__tpl__ → nx-welcome__componentFileSuffix__.ts__tpl__} +1 -1
- package/src/generators/application/files/standalone-components/src/app/app.config.ts__tpl__ +6 -2
- package/src/generators/application/files/standalone-components/src/app/app__componentFileSuffix__.spec.ts__tpl__ +27 -0
- package/src/generators/application/files/standalone-components/src/app/{app.component.ts__tpl__ → app__componentFileSuffix__.ts__tpl__} +6 -6
- package/src/generators/application/files/standalone-components/src/main.ts__tpl__ +2 -2
- package/src/generators/application/lib/create-files.d.ts +1 -1
- package/src/generators/application/lib/create-files.js +18 -19
- package/src/generators/application/lib/create-project.d.ts +1 -1
- package/src/generators/application/lib/create-project.js +119 -26
- package/src/generators/application/lib/enable-strict-type-checking.js +4 -2
- package/src/generators/application/lib/index.d.ts +1 -2
- package/src/generators/application/lib/index.js +1 -2
- package/src/generators/application/lib/set-generator-defaults.js +1 -0
- package/src/generators/application/lib/{update-editor-tsconfig.d.ts → update-tsconfig-files.d.ts} +1 -1
- package/src/generators/application/lib/update-tsconfig-files.js +76 -0
- package/src/generators/application/schema.json +1 -1
- package/src/generators/component/component.js +13 -2
- package/src/generators/component/files/__fileName__.ts__tpl__ +1 -1
- package/src/generators/component/lib/component.js +11 -1
- package/src/generators/component/lib/module.d.ts +7 -2
- package/src/generators/component/lib/module.js +7 -5
- package/src/generators/component/lib/normalize-options.js +7 -3
- package/src/generators/component/schema.d.ts +1 -0
- package/src/generators/component/schema.json +6 -2
- package/src/generators/convert-to-application-executor/convert-to-application-executor.js +37 -24
- package/src/generators/convert-to-rspack/convert-to-rspack.js +2 -6
- package/src/generators/convert-to-rspack/lib/get-custom-webpack-config.js +1 -1
- package/src/generators/directive/directive.js +1 -1
- package/src/generators/directive/lib/normalize-options.js +7 -2
- package/src/generators/directive/schema.d.ts +1 -0
- package/src/generators/directive/schema.json +10 -2
- package/src/generators/host/host.js +21 -1
- package/src/generators/host/schema.d.ts +1 -0
- package/src/generators/host/schema.json +7 -1
- package/src/generators/init/init.js +1 -1
- package/src/generators/library/files/base/tsconfig.json__tpl__ +5 -5
- package/src/generators/library/files/ng-module/src/index.ts__tpl__ +1 -1
- package/src/generators/library/files/standalone-components/src/lib/lib.routes.ts__tpl__ +2 -2
- package/src/generators/library/lib/add-standalone-component.js +1 -0
- package/src/generators/library/lib/create-files.js +10 -3
- package/src/generators/library/lib/normalize-options.d.ts +3 -3
- package/src/generators/library/lib/normalize-options.js +6 -1
- package/src/generators/library/lib/normalized-schema.d.ts +2 -0
- package/src/generators/library/lib/set-generator-defaults.js +1 -0
- package/src/generators/library/lib/update-tsconfig-files.d.ts +3 -0
- package/src/generators/library/lib/update-tsconfig-files.js +85 -0
- package/src/generators/library/library.js +19 -33
- package/src/generators/library-secondary-entry-point/files/src/index.ts__tmpl__ +1 -1
- package/src/generators/library-secondary-entry-point/lib/add-files.js +2 -1
- package/src/generators/library-secondary-entry-point/lib/normalize-options.d.ts +2 -2
- package/src/generators/library-secondary-entry-point/lib/normalize-options.js +3 -0
- package/src/generators/library-secondary-entry-point/schema.d.ts +1 -0
- package/src/generators/move/lib/update-module-name.js +17 -10
- package/src/generators/move/lib/update-secondary-entry-points.js +0 -3
- package/src/generators/ng-add/migrators/builders/angular-devkit-karma.migrator.js +1 -1
- package/src/generators/ng-add/migrators/projects/app.migrator.js +43 -8
- package/src/generators/ngrx/schema.json +3 -3
- package/src/generators/ngrx-root-store/lib/normalize-options.js +9 -2
- package/src/generators/pipe/lib/normalize-options.js +4 -0
- package/src/generators/pipe/pipe.js +1 -1
- package/src/generators/pipe/schema.d.ts +1 -0
- package/src/generators/pipe/schema.json +11 -2
- package/src/generators/remote/files/standalone/src/bootstrap.server.ts__tmpl__ +4 -4
- package/src/generators/remote/lib/update-ssr-setup.js +5 -0
- package/src/generators/remote/remote.js +23 -0
- package/src/generators/remote/schema.d.ts +1 -0
- package/src/generators/remote/schema.json +7 -1
- package/src/generators/scam/lib/convert-component-to-scam.js +1 -3
- package/src/generators/scam/lib/normalize-options.js +11 -3
- package/src/generators/scam/schema.d.ts +1 -0
- package/src/generators/scam/schema.json +1 -2
- package/src/generators/scam-directive/lib/convert-directive-to-scam.js +1 -3
- package/src/generators/scam-directive/lib/normalize-options.js +11 -2
- package/src/generators/scam-directive/schema.d.ts +2 -0
- package/src/generators/scam-directive/schema.json +10 -2
- package/src/generators/scam-pipe/lib/convert-pipe-to-scam.js +1 -3
- package/src/generators/scam-pipe/lib/normalize-options.js +8 -0
- package/src/generators/scam-pipe/schema.d.ts +2 -0
- package/src/generators/scam-pipe/schema.json +5 -0
- package/src/generators/setup-mf/files/entry-module-files/{entry.module.ts__tmpl__ → __entryModuleFileName__.ts__tmpl__} +4 -4
- package/src/generators/setup-mf/files/entry-module-files/entry.routes.ts__tmpl__ +2 -2
- package/src/generators/setup-mf/files/entry-module-files/{entry.component.ts__tmpl__ → entry__componentFileSuffix__.ts__tmpl__} +1 -1
- package/src/generators/setup-mf/files/host-files/__appFileName__.spec.ts__tmpl__ +43 -0
- package/src/generators/setup-mf/files/standalone-entry-component-files/entry.routes.ts__tmpl__ +2 -2
- package/src/generators/setup-mf/files/standalone-entry-component-files/{entry.component.ts__tmpl__ → entry__componentFileSuffix__.ts__tmpl__} +3 -3
- package/src/generators/setup-mf/files/ts-webpack/module-federation.config.ts__tmpl__ +1 -1
- package/src/generators/setup-mf/files/ts-webpack/tsconfig.lint.json__tmpl__ +1 -1
- package/src/generators/setup-mf/files/webpack/module-federation.config.js__tmpl__ +1 -1
- package/src/generators/setup-mf/lib/add-remote-entry.d.ts +2 -2
- package/src/generators/setup-mf/lib/add-remote-entry.js +9 -3
- package/src/generators/setup-mf/lib/add-remote-to-host.js +11 -1
- package/src/generators/setup-mf/lib/fix-bootstrap.d.ts +2 -2
- package/src/generators/setup-mf/lib/fix-bootstrap.js +4 -4
- package/src/generators/setup-mf/lib/generate-config.d.ts +2 -2
- package/src/generators/setup-mf/lib/generate-config.js +1 -0
- package/src/generators/setup-mf/lib/normalize-options.d.ts +1 -1
- package/src/generators/setup-mf/lib/normalize-options.js +13 -0
- package/src/generators/setup-mf/lib/remove-dead-code-from-remote.d.ts +2 -2
- package/src/generators/setup-mf/lib/remove-dead-code-from-remote.js +18 -14
- package/src/generators/setup-mf/lib/setup-host-if-dynamic.js +1 -5
- package/src/generators/setup-mf/lib/setup-tspath-for-remote.d.ts +2 -2
- package/src/generators/setup-mf/lib/setup-tspath-for-remote.js +1 -1
- package/src/generators/setup-mf/lib/update-host-app-routes.d.ts +2 -2
- package/src/generators/setup-mf/lib/update-host-app-routes.js +12 -9
- package/src/generators/setup-mf/lib/update-tsconfig.d.ts +2 -2
- package/src/generators/setup-mf/lib/update-tsconfig.js +5 -5
- package/src/generators/setup-mf/schema.d.ts +7 -0
- package/src/generators/setup-mf/setup-mf.d.ts +2 -2
- package/src/generators/setup-mf/setup-mf.js +16 -6
- package/src/generators/setup-ssr/files/v20+/application-builder/ngmodule-src/__main__ +1 -0
- package/src/generators/setup-ssr/files/v20+/application-builder/ngmodule-src/app/__rootModuleFileName__ +12 -0
- package/src/generators/setup-ssr/files/v20+/application-builder/ngmodule-src/app/app.routes.server.ts__tpl__ +8 -0
- package/src/generators/setup-ssr/files/v20+/application-builder/server/__serverFileName__ +66 -0
- package/src/generators/setup-ssr/files/v20+/application-builder/standalone-src/__main__ +7 -0
- package/src/generators/setup-ssr/files/v20+/application-builder/standalone-src/app/app.config.server.ts__tpl__ +12 -0
- package/src/generators/setup-ssr/files/v20+/application-builder/standalone-src/app/app.routes.server.ts__tpl__ +8 -0
- package/src/generators/setup-ssr/files/v20+/server-builder/ngmodule-src/__main__ +1 -0
- package/src/generators/setup-ssr/files/v20+/server-builder/ngmodule-src/app/__rootModuleFileName__ +14 -0
- package/src/generators/setup-ssr/files/v20+/server-builder/root/tsconfig.server.json.template +18 -0
- package/src/generators/setup-ssr/files/v20+/server-builder/server/__serverFileName__ +69 -0
- package/src/generators/setup-ssr/files/v20+/server-builder/standalone-src/__main__ +7 -0
- package/src/generators/setup-ssr/files/v20+/server-builder/standalone-src/app/app.config.server.ts.template +11 -0
- package/src/generators/setup-ssr/lib/add-dependencies.js +11 -8
- package/src/generators/setup-ssr/lib/add-hydration.js +10 -3
- package/src/generators/setup-ssr/lib/add-server-file.js +7 -2
- package/src/generators/setup-ssr/lib/generate-files.js +17 -4
- package/src/generators/setup-ssr/lib/generate-server-ts-config.js +32 -6
- package/src/generators/setup-ssr/lib/normalize-options.js +5 -3
- package/src/generators/setup-ssr/lib/update-project-config.js +5 -0
- package/src/generators/setup-ssr/lib/validate-options.js +2 -2
- package/src/generators/setup-ssr/schema.d.ts +1 -0
- package/src/generators/setup-ssr/schema.json +1 -1
- package/src/generators/utils/add-jest.js +6 -1
- package/src/generators/utils/app-components-info.d.ts +9 -0
- package/src/generators/utils/app-components-info.js +39 -0
- package/src/generators/utils/artifact-types.d.ts +3 -0
- package/src/generators/utils/artifact-types.js +33 -0
- package/src/generators/utils/assert-mf-utils.d.ts +1 -0
- package/src/generators/utils/assert-mf-utils.js +11 -0
- package/src/generators/utils/ensure-angular-dependencies.js +6 -3
- package/src/generators/utils/export-scam.d.ts +1 -0
- package/src/generators/utils/export-scam.js +1 -2
- package/src/generators/utils/find-module.js +18 -13
- package/src/generators/utils/storybook-ast/component-info.js +40 -24
- package/src/generators/utils/storybook-ast/module-info.d.ts +1 -1
- package/src/generators/utils/storybook-ast/module-info.js +3 -8
- package/src/generators/utils/testing.js +28 -28
- package/src/generators/utils/version-utils.js +2 -2
- package/src/generators/web-worker/lib/add-snippet.js +3 -3
- package/src/migrations/update-21-2-0/migrate-provide-server-rendering-import.d.ts +2 -0
- package/src/migrations/update-21-2-0/migrate-provide-server-rendering-import.js +110 -0
- package/src/migrations/update-21-2-0/replace-provide-server-routing.d.ts +2 -0
- package/src/migrations/update-21-2-0/replace-provide-server-routing.js +103 -0
- package/src/migrations/update-21-2-0/set-generator-defaults-for-previous-style-guide.d.ts +2 -0
- package/src/migrations/update-21-2-0/set-generator-defaults-for-previous-style-guide.js +47 -0
- package/src/migrations/update-21-2-0/update-angular-cli.d.ts +3 -0
- package/src/migrations/update-21-2-0/update-angular-cli.js +23 -0
- package/src/migrations/update-21-2-0/update-module-resolution.d.ts +2 -0
- package/src/migrations/update-21-2-0/update-module-resolution.js +45 -0
- package/src/plugins/plugin.js +22 -13
- package/src/utils/backward-compatible-versions.d.ts +2 -2
- package/src/utils/backward-compatible-versions.js +22 -19
- package/src/utils/nx-devkit/ast-utils.js +17 -3
- package/src/utils/nx-devkit/testing.js +9 -9
- package/src/utils/targets.d.ts +2 -1
- package/src/utils/targets.js +6 -0
- package/src/utils/versions.d.ts +4 -3
- package/src/utils/versions.js +5 -4
- package/mf/mf.d.ts +0 -69
- package/src/generators/application/files/base-pre18/src/favicon.ico +0 -0
- package/src/generators/application/files/ng-module/src/app/app.component.spec.ts__tpl__ +0 -29
- package/src/generators/application/files/ng-module/src/app/app.module.ts__tpl__ +0 -17
- package/src/generators/application/files/standalone-components/src/app/app.component.__style__ +0 -0
- package/src/generators/application/files/standalone-components/src/app/app.component.spec.ts__tpl__ +0 -28
- package/src/generators/application/lib/set-app-strict-default.d.ts +0 -2
- package/src/generators/application/lib/set-app-strict-default.js +0 -13
- package/src/generators/application/lib/update-editor-tsconfig.js +0 -21
- package/src/generators/library/lib/enable-strict-type-checking.d.ts +0 -7
- package/src/generators/library/lib/enable-strict-type-checking.js +0 -47
- package/src/generators/library/lib/update-tsconfig.d.ts +0 -3
- package/src/generators/library/lib/update-tsconfig.js +0 -36
- package/src/generators/setup-mf/files/host-files/app.component.spec.ts__tmpl__ +0 -47
- /package/src/generators/application/files/{base-18+ → base}/public/favicon.ico +0 -0
- /package/src/generators/application/files/{base-pre18/src/assets/.gitkeep__tpl__ → ng-module/src/app/app__componentFileSuffix__.__style__} +0 -0
- /package/src/generators/application/files/ng-module/src/app/{app.component.html__tpl__ → app__componentFileSuffix__.html__tpl__} +0 -0
- /package/src/generators/application/files/{ng-module/src/app/app.component.__style__ → standalone-components/src/app/app__componentFileSuffix__.__style__} +0 -0
- /package/src/generators/application/files/standalone-components/src/app/{app.component.html__tpl__ → app__componentFileSuffix__.html__tpl__} +0 -0
- /package/src/generators/component/files/{__fileName__.html__tpl__ → __fileName____ngext__.html__tpl__} +0 -0
- /package/src/generators/library/files/ng-module/src/lib/{__libFileName__.module.ts__tpl__ → __libFileName____moduleTypeSeparator__module.ts__tpl__} +0 -0
- /package/src/generators/library-secondary-entry-point/files/src/lib/{__fileName__.module.ts__tmpl__ → __fileName____moduleTypeSeparator__module.ts__tmpl__} +0 -0
- /package/src/generators/setup-ssr/files/{v19+ → v19}/application-builder/ngmodule-src/__main__ +0 -0
- /package/src/generators/setup-ssr/files/{v19+ → v19}/application-builder/ngmodule-src/app/__rootModuleFileName__ +0 -0
- /package/src/generators/setup-ssr/files/{v19+ → v19}/application-builder/ngmodule-src/app/app.routes.server.ts__tpl__ +0 -0
- /package/src/generators/setup-ssr/files/{v19+ → v19}/application-builder/server/__serverFileName__ +0 -0
- /package/src/generators/setup-ssr/files/{v19+ → v19}/application-builder/standalone-src/__main__ +0 -0
- /package/src/generators/setup-ssr/files/{v19+ → v19}/application-builder/standalone-src/app/app.config.server.ts__tpl__ +0 -0
- /package/src/generators/setup-ssr/files/{v19+ → v19}/application-builder/standalone-src/app/app.routes.server.ts__tpl__ +0 -0
- /package/src/generators/setup-ssr/files/{v19+ → v19}/application-builder-common-engine/server/__serverFileName__ +0 -0
- /package/src/generators/setup-ssr/files/{v19+ → v19}/server-builder/ngmodule-src/__main__ +0 -0
- /package/src/generators/setup-ssr/files/{v19+ → v19}/server-builder/ngmodule-src/app/__rootModuleFileName__ +0 -0
- /package/src/generators/setup-ssr/files/{v19+ → v19}/server-builder/root/tsconfig.server.json.template +0 -0
- /package/src/generators/setup-ssr/files/{v19+ → v19}/server-builder/server/__serverFileName__ +0 -0
- /package/src/generators/setup-ssr/files/{v19+ → v19}/server-builder/standalone-src/__main__ +0 -0
- /package/src/generators/setup-ssr/files/{v19+ → v19}/server-builder/standalone-src/app/app.config.server.ts.template +0 -0
@@ -2,16 +2,16 @@
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
3
3
|
exports.updateTsConfig = updateTsConfig;
|
4
4
|
const devkit_1 = require("@nx/devkit");
|
5
|
-
function updateTsConfig(tree,
|
6
|
-
const { root } = (0, devkit_1.readProjectConfiguration)(tree,
|
5
|
+
function updateTsConfig(tree, options) {
|
6
|
+
const { root } = (0, devkit_1.readProjectConfiguration)(tree, options.appName);
|
7
7
|
(0, devkit_1.updateJson)(tree, (0, devkit_1.joinPathFragments)(root, `tsconfig.app.json`), (json) => {
|
8
8
|
json.compilerOptions ??= {};
|
9
9
|
json.compilerOptions.target = 'ES2020';
|
10
|
-
if (
|
10
|
+
if (options.mfType === 'remote') {
|
11
11
|
json.files ??= [];
|
12
|
-
json.files.push(
|
12
|
+
json.files.push(options.standalone
|
13
13
|
? 'src/app/remote-entry/entry.routes.ts'
|
14
|
-
:
|
14
|
+
: `src/app/remote-entry/${options.entryModuleFileName}.ts`);
|
15
15
|
}
|
16
16
|
return json;
|
17
17
|
});
|
@@ -1,3 +1,5 @@
|
|
1
|
+
import type { ComponentMetadata } from '../utils/app-components-info';
|
2
|
+
|
1
3
|
type FederationType = 'static' | 'dynamic';
|
2
4
|
|
3
5
|
export interface Schema {
|
@@ -21,4 +23,9 @@ export interface Schema {
|
|
21
23
|
export interface NormalizedOptions extends Schema {
|
22
24
|
federationType: FederationType;
|
23
25
|
prefix: string | undefined;
|
26
|
+
componentType: string;
|
27
|
+
componentFileSuffix: string;
|
28
|
+
entryModuleFileName: string;
|
29
|
+
appComponentInfo: ComponentMetadata;
|
30
|
+
nxWelcomeComponentInfo: ComponentMetadata;
|
24
31
|
}
|
@@ -1,4 +1,4 @@
|
|
1
|
-
import { type Tree } from '@nx/devkit';
|
1
|
+
import { type GeneratorCallback, type Tree } from '@nx/devkit';
|
2
2
|
import type { Schema } from './schema';
|
3
|
-
export declare function setupMf(tree: Tree, rawOptions: Schema): Promise<
|
3
|
+
export declare function setupMf(tree: Tree, rawOptions: Schema): Promise<GeneratorCallback>;
|
4
4
|
export default setupMf;
|
@@ -3,11 +3,12 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.setupMf = setupMf;
|
4
4
|
const devkit_1 = require("@nx/devkit");
|
5
5
|
const versions_1 = require("../../utils/versions");
|
6
|
+
const version_utils_1 = require("../utils/version-utils");
|
6
7
|
const lib_1 = require("./lib");
|
7
8
|
async function setupMf(tree, rawOptions) {
|
8
9
|
const options = (0, lib_1.normalizeOptions)(tree, rawOptions);
|
9
10
|
const projectConfig = (0, devkit_1.readProjectConfiguration)(tree, options.appName);
|
10
|
-
|
11
|
+
const tasks = [];
|
11
12
|
if (options.mfType === 'remote') {
|
12
13
|
(0, lib_1.addRemoteToHost)(tree, {
|
13
14
|
appName: options.appName,
|
@@ -19,13 +20,13 @@ async function setupMf(tree, rawOptions) {
|
|
19
20
|
(0, lib_1.removeDeadCodeFromRemote)(tree, options);
|
20
21
|
(0, lib_1.setupTspathForRemote)(tree, options);
|
21
22
|
if (!options.skipPackageJson) {
|
22
|
-
|
23
|
+
tasks.push((0, devkit_1.addDependenciesToPackageJson)(tree, {
|
23
24
|
'@module-federation/enhanced': versions_1.moduleFederationEnhancedVersion,
|
24
25
|
}, {
|
25
26
|
'@nx/web': versions_1.nxVersion,
|
26
27
|
'@nx/webpack': versions_1.nxVersion,
|
27
28
|
'@nx/module-federation': versions_1.nxVersion,
|
28
|
-
});
|
29
|
+
}));
|
29
30
|
}
|
30
31
|
}
|
31
32
|
const remotesWithPorts = (0, lib_1.getRemotesWithPorts)(tree, options);
|
@@ -45,11 +46,11 @@ async function setupMf(tree, rawOptions) {
|
|
45
46
|
});
|
46
47
|
}
|
47
48
|
if (!options.skipPackageJson) {
|
48
|
-
|
49
|
+
tasks.push((0, devkit_1.addDependenciesToPackageJson)(tree, {}, {
|
49
50
|
'@nx/webpack': versions_1.nxVersion,
|
50
51
|
'@module-federation/enhanced': versions_1.moduleFederationEnhancedVersion,
|
51
52
|
'@nx/module-federation': versions_1.nxVersion,
|
52
|
-
});
|
53
|
+
}));
|
53
54
|
}
|
54
55
|
}
|
55
56
|
(0, lib_1.fixBootstrap)(tree, projectConfig.root, options);
|
@@ -64,10 +65,19 @@ async function setupMf(tree, rawOptions) {
|
|
64
65
|
if (!options.skipE2E) {
|
65
66
|
(0, lib_1.addCypressOnErrorWorkaround)(tree, options);
|
66
67
|
}
|
68
|
+
if (!options.skipPackageJson) {
|
69
|
+
const { major: angularMajorVersion } = (0, version_utils_1.getInstalledAngularVersionInfo)(tree);
|
70
|
+
if (angularMajorVersion >= 20) {
|
71
|
+
const angularDevkitVersion = (0, version_utils_1.getInstalledAngularDevkitVersion)(tree) ??
|
72
|
+
(0, version_utils_1.versions)(tree).angularDevkitVersion;
|
73
|
+
// the executors used by MF require @angular-devkit/build-angular
|
74
|
+
tasks.push((0, devkit_1.addDependenciesToPackageJson)(tree, {}, { '@angular-devkit/build-angular': angularDevkitVersion }, undefined, true));
|
75
|
+
}
|
76
|
+
}
|
67
77
|
// format files
|
68
78
|
if (!options.skipFormat) {
|
69
79
|
await (0, devkit_1.formatFiles)(tree);
|
70
80
|
}
|
71
|
-
return
|
81
|
+
return (0, devkit_1.runTasksInSerial)(...tasks);
|
72
82
|
}
|
73
83
|
exports.default = setupMf;
|
@@ -0,0 +1 @@
|
|
1
|
+
export { <%= rootModuleClassName %> as default } from './app/<%= rootModuleFileName.slice(0, -3) %>';
|
@@ -0,0 +1,12 @@
|
|
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 %> {}
|
@@ -0,0 +1,66 @@
|
|
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);
|
@@ -0,0 +1,7 @@
|
|
1
|
+
import { bootstrapApplication } from '@angular/platform-browser';
|
2
|
+
import { <%= appSymbolName %> } from './app/<%= appFileName %>';
|
3
|
+
import { config } from './app/app.config.server';
|
4
|
+
|
5
|
+
const bootstrap = () => bootstrapApplication(<%= appSymbolName %>, config);
|
6
|
+
|
7
|
+
export default bootstrap;
|
@@ -0,0 +1,12 @@
|
|
1
|
+
import { mergeApplicationConfig, ApplicationConfig } from '@angular/core';
|
2
|
+
import { provideServerRendering, withRoutes } from '@angular/ssr';
|
3
|
+
import { appConfig } from './app.config';
|
4
|
+
import { serverRoutes } from './app.routes.server';
|
5
|
+
|
6
|
+
const serverConfig: ApplicationConfig = {
|
7
|
+
providers: [
|
8
|
+
provideServerRendering(withRoutes(serverRoutes))
|
9
|
+
]
|
10
|
+
};
|
11
|
+
|
12
|
+
export const config = mergeApplicationConfig(appConfig, serverConfig);
|
@@ -0,0 +1 @@
|
|
1
|
+
export { <%= rootModuleClassName %> as default } from './app/<%= rootModuleFileName.slice(0, -3) %>';
|
package/src/generators/setup-ssr/files/v20+/server-builder/ngmodule-src/app/__rootModuleFileName__
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
import { NgModule } from '@angular/core';
|
2
|
+
import { ServerModule } from '@angular/platform-server';
|
3
|
+
|
4
|
+
import { AppModule } from './app<%= moduleTypeSeparator %>module';
|
5
|
+
import { <%= appSymbolName %> } from './<%= appFileName %>';
|
6
|
+
|
7
|
+
@NgModule({
|
8
|
+
imports: [
|
9
|
+
AppModule,
|
10
|
+
ServerModule,
|
11
|
+
],
|
12
|
+
bootstrap: [<%= appSymbolName %>],
|
13
|
+
})
|
14
|
+
export class <%= rootModuleClassName %> {}
|
@@ -0,0 +1,18 @@
|
|
1
|
+
/* To learn more about Typescript configuration file: https://www.typescriptlang.org/docs/handbook/tsconfig-json.html. */
|
2
|
+
/* To learn more about Angular compiler options: https://angular.dev/reference/configs/angular-compiler-options. */
|
3
|
+
{
|
4
|
+
"extends": "./tsconfig.app.json",
|
5
|
+
"compilerOptions": {
|
6
|
+
"outDir": "<%= rootOffset %>out-tsc/server",
|
7
|
+
"module": "commonjs",
|
8
|
+
"moduleResolution": "node10",
|
9
|
+
"types": [
|
10
|
+
"node"<% if (hasLocalizePackage) { %>,
|
11
|
+
"@angular/localize"<% } %>
|
12
|
+
]
|
13
|
+
},
|
14
|
+
"files": [
|
15
|
+
"src/<%= main %>",
|
16
|
+
"src/server.ts"
|
17
|
+
]
|
18
|
+
}
|
@@ -0,0 +1,69 @@
|
|
1
|
+
import 'zone.js/node';
|
2
|
+
|
3
|
+
import { APP_BASE_HREF } from '@angular/common';
|
4
|
+
import { CommonEngine } from '@angular/ssr/node';
|
5
|
+
import * as express from 'express';
|
6
|
+
import { existsSync } from 'node:fs';
|
7
|
+
import { join } from 'node:path';
|
8
|
+
import <% if (standalone) { %>bootstrap<% } else { %><%= rootModuleClassName %><% } %> from './<%= main.slice(0, -3) %>';
|
9
|
+
|
10
|
+
// The Express app is exported so that it can be used by serverless Functions.
|
11
|
+
export function app(): express.Express {
|
12
|
+
const server = express();
|
13
|
+
const distFolder = join(process.cwd(), '<%= browserDistDirectory %>');
|
14
|
+
const indexHtml = existsSync(join(distFolder, 'index.original.html'))
|
15
|
+
? join(distFolder, 'index.original.html')
|
16
|
+
: join(distFolder, 'index.html');
|
17
|
+
|
18
|
+
const commonEngine = new CommonEngine();
|
19
|
+
|
20
|
+
server.set('view engine', 'html');
|
21
|
+
server.set('views', distFolder);
|
22
|
+
|
23
|
+
// Example Express Rest API endpoints
|
24
|
+
// server.get('/api/**', (req, res) => { });
|
25
|
+
// Serve static files from /browser
|
26
|
+
server.get('*.*', express.static(distFolder, {
|
27
|
+
maxAge: '1y'
|
28
|
+
}));
|
29
|
+
|
30
|
+
// All regular routes use the Angular engine
|
31
|
+
server.get('*', (req, res, next) => {
|
32
|
+
const { protocol, originalUrl, baseUrl, headers } = req;
|
33
|
+
|
34
|
+
commonEngine
|
35
|
+
.render({
|
36
|
+
bootstrap<% if (!standalone) { %>: <%= rootModuleClassName %><% } %>,
|
37
|
+
documentFilePath: indexHtml,
|
38
|
+
url: `${protocol}://${headers.host}${originalUrl}`,
|
39
|
+
publicPath: distFolder,
|
40
|
+
providers: [{ provide: APP_BASE_HREF, useValue: baseUrl }],
|
41
|
+
})
|
42
|
+
.then((html) => res.send(html))
|
43
|
+
.catch((err) => next(err));
|
44
|
+
});
|
45
|
+
|
46
|
+
return server;
|
47
|
+
}
|
48
|
+
|
49
|
+
function run(): void {
|
50
|
+
const port = process.env['PORT'] || <%= serverPort %>;
|
51
|
+
|
52
|
+
// Start up the Node server
|
53
|
+
const server = app();
|
54
|
+
server.listen(port, () => {
|
55
|
+
console.log(`Node Express server listening on http://localhost:${port}`);
|
56
|
+
});
|
57
|
+
}
|
58
|
+
|
59
|
+
// Webpack will replace 'require' with '__webpack_require__'
|
60
|
+
// '__non_webpack_require__' is a proxy to Node 'require'
|
61
|
+
// The below code is to ensure that the server is run only when not requiring the bundle.
|
62
|
+
declare const __non_webpack_require__: NodeRequire;
|
63
|
+
const mainModule = __non_webpack_require__.main;
|
64
|
+
const moduleFilename = mainModule && mainModule.filename || '';
|
65
|
+
if (moduleFilename === __filename || moduleFilename.includes('iisnode')) {
|
66
|
+
run();
|
67
|
+
}
|
68
|
+
|
69
|
+
export default <% if (standalone) { %>bootstrap<% } else { %><%= rootModuleClassName %><% } %>;
|
@@ -0,0 +1,7 @@
|
|
1
|
+
import { bootstrapApplication } from '@angular/platform-browser';
|
2
|
+
import { <%= appSymbolName %> } from './app/<%= appFileName %>';
|
3
|
+
import { config } from './app/app.config.server';
|
4
|
+
|
5
|
+
const bootstrap = () => bootstrapApplication(<%= appSymbolName %>, config);
|
6
|
+
|
7
|
+
export default bootstrap;
|
@@ -0,0 +1,11 @@
|
|
1
|
+
import { mergeApplicationConfig, ApplicationConfig } from '@angular/core';
|
2
|
+
import { provideServerRendering } from '@angular/ssr';
|
3
|
+
import { appConfig } from './app.config';
|
4
|
+
|
5
|
+
const serverConfig: ApplicationConfig = {
|
6
|
+
providers: [
|
7
|
+
provideServerRendering()
|
8
|
+
]
|
9
|
+
};
|
10
|
+
|
11
|
+
export const config = mergeApplicationConfig(appConfig, serverConfig);
|
@@ -2,24 +2,27 @@
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
3
3
|
exports.addDependencies = addDependencies;
|
4
4
|
const devkit_1 = require("@nx/devkit");
|
5
|
-
const semver_1 = require("semver");
|
6
5
|
const version_utils_1 = require("../../utils/version-utils");
|
7
6
|
function addDependencies(tree, isUsingApplicationBuilder) {
|
8
7
|
const pkgVersions = (0, version_utils_1.versions)(tree);
|
9
|
-
const { version: angularVersion } = (0, version_utils_1.getInstalledAngularVersionInfo)(tree);
|
10
8
|
const dependencies = {
|
11
|
-
'@angular/platform-server': (0, version_utils_1.
|
12
|
-
|
9
|
+
'@angular/platform-server': (0, version_utils_1.getInstalledPackageVersion)(tree, '@angular/platform-server') ??
|
10
|
+
pkgVersions.angularVersion,
|
13
11
|
express: pkgVersions.expressVersion,
|
14
12
|
};
|
15
13
|
const devDependencies = {
|
16
14
|
'@types/express': pkgVersions.typesExpressVersion,
|
17
15
|
};
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
if (!isUsingApplicationBuilder && (0, semver_1.gte)(angularVersion, '17.1.0')) {
|
16
|
+
const angularDevkitVersion = (0, version_utils_1.getInstalledAngularDevkitVersion)(tree) ?? pkgVersions.angularDevkitVersion;
|
17
|
+
dependencies['@angular/ssr'] = angularDevkitVersion;
|
18
|
+
if (!isUsingApplicationBuilder) {
|
22
19
|
devDependencies['browser-sync'] = pkgVersions.browserSyncVersion;
|
23
20
|
}
|
21
|
+
else {
|
22
|
+
const { major: angularMajorVersion } = (0, version_utils_1.getInstalledAngularVersionInfo)(tree);
|
23
|
+
if (angularMajorVersion >= 20) {
|
24
|
+
dependencies['@angular-devkit/build-angular'] = angularDevkitVersion;
|
25
|
+
}
|
26
|
+
}
|
24
27
|
(0, devkit_1.addDependenciesToPackageJson)(tree, dependencies, devDependencies);
|
25
28
|
}
|
@@ -14,9 +14,16 @@ function addHydration(tree, options) {
|
|
14
14
|
tsModule = (0, ensure_typescript_1.ensureTypescript)();
|
15
15
|
tsquery = require('@phenomnomnominal/tsquery').tsquery;
|
16
16
|
}
|
17
|
-
|
18
|
-
|
19
|
-
|
17
|
+
let pathToClientConfigFile;
|
18
|
+
if (options.standalone) {
|
19
|
+
pathToClientConfigFile = (0, devkit_1.joinPathFragments)(projectConfig.sourceRoot, 'app/app.config.ts');
|
20
|
+
}
|
21
|
+
else {
|
22
|
+
pathToClientConfigFile = (0, devkit_1.joinPathFragments)(projectConfig.sourceRoot, 'app/app.module.ts');
|
23
|
+
if (!tree.exists(pathToClientConfigFile)) {
|
24
|
+
pathToClientConfigFile = (0, devkit_1.joinPathFragments)(projectConfig.sourceRoot, 'app/app-module.ts');
|
25
|
+
}
|
26
|
+
}
|
20
27
|
const sourceText = tree.read(pathToClientConfigFile, 'utf-8');
|
21
28
|
let sourceFile = tsModule.createSourceFile(pathToClientConfigFile, sourceText, tsModule.ScriptTarget.Latest, true);
|
22
29
|
const provideClientHydrationCallExpression = tsquery(sourceFile, 'ObjectLiteralExpression PropertyAssignment:has(Identifier[name=providers]) ArrayLiteralExpression CallExpression:has(Identifier[name=provideClientHydration])')[0];
|
@@ -14,8 +14,13 @@ function addServerFile(tree, options) {
|
|
14
14
|
const { major: angularMajorVersion } = (0, version_utils_1.getInstalledAngularVersionInfo)(tree);
|
15
15
|
const baseFilesPath = (0, path_1.join)(__dirname, '..', 'files');
|
16
16
|
let pathToFiles;
|
17
|
-
if (angularMajorVersion >=
|
18
|
-
pathToFiles = (0, path_1.join)(baseFilesPath, '
|
17
|
+
if (angularMajorVersion >= 20) {
|
18
|
+
pathToFiles = (0, path_1.join)(baseFilesPath, 'v20+', options.isUsingApplicationBuilder
|
19
|
+
? 'application-builder'
|
20
|
+
: 'server-builder', 'server');
|
21
|
+
}
|
22
|
+
else if (angularMajorVersion === 19) {
|
23
|
+
pathToFiles = (0, path_1.join)(baseFilesPath, 'v19', options.isUsingApplicationBuilder
|
19
24
|
? 'application-builder' +
|
20
25
|
(options.serverRouting ? '' : '-common-engine')
|
21
26
|
: 'server-builder', 'server');
|
@@ -3,8 +3,10 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.generateSSRFiles = generateSSRFiles;
|
4
4
|
const devkit_1 = require("@nx/devkit");
|
5
5
|
const path_1 = require("path");
|
6
|
-
const version_utils_1 = require("../../utils/version-utils");
|
7
6
|
const semver_1 = require("semver");
|
7
|
+
const app_components_info_1 = require("../../utils/app-components-info");
|
8
|
+
const artifact_types_1 = require("../../utils/artifact-types");
|
9
|
+
const version_utils_1 = require("../../utils/version-utils");
|
8
10
|
function generateSSRFiles(tree, options) {
|
9
11
|
const project = (0, devkit_1.readProjectConfiguration)(tree, options.project);
|
10
12
|
if (project.targets.server ||
|
@@ -16,8 +18,13 @@ function generateSSRFiles(tree, options) {
|
|
16
18
|
const { major: angularMajorVersion } = (0, version_utils_1.getInstalledAngularVersionInfo)(tree);
|
17
19
|
const baseFilesPath = (0, path_1.join)(__dirname, '..', 'files');
|
18
20
|
let pathToFiles;
|
19
|
-
if (angularMajorVersion >=
|
20
|
-
pathToFiles = (0, path_1.join)(baseFilesPath, '
|
21
|
+
if (angularMajorVersion >= 20) {
|
22
|
+
pathToFiles = (0, path_1.join)(baseFilesPath, 'v20+', options.isUsingApplicationBuilder
|
23
|
+
? 'application-builder'
|
24
|
+
: 'server-builder', options.standalone ? 'standalone-src' : 'ngmodule-src');
|
25
|
+
}
|
26
|
+
else if (angularMajorVersion === 19) {
|
27
|
+
pathToFiles = (0, path_1.join)(baseFilesPath, 'v19', options.isUsingApplicationBuilder
|
21
28
|
? 'application-builder'
|
22
29
|
: 'server-builder', options.standalone ? 'standalone-src' : 'ngmodule-src');
|
23
30
|
}
|
@@ -29,14 +36,20 @@ function generateSSRFiles(tree, options) {
|
|
29
36
|
const cleanedSsrVersion = ssrVersion
|
30
37
|
? (0, semver_1.clean)(ssrVersion) ?? (0, semver_1.coerce)(ssrVersion).version
|
31
38
|
: null;
|
39
|
+
const componentType = (0, artifact_types_1.getComponentType)(tree);
|
40
|
+
const appComponentInfo = (0, app_components_info_1.getAppComponentInfo)(tree, componentType ? `.${componentType}` : '', project);
|
41
|
+
const moduleTypeSeparator = (0, artifact_types_1.getModuleTypeSeparator)(tree);
|
32
42
|
(0, devkit_1.generateFiles)(tree, pathToFiles, sourceRoot, {
|
33
43
|
...options,
|
34
44
|
provideServerRoutingFn: !cleanedSsrVersion || (0, semver_1.gte)(cleanedSsrVersion, '19.2.0')
|
35
45
|
? 'provideServerRouting'
|
36
46
|
: 'provideServerRoutesConfig',
|
47
|
+
appFileName: appComponentInfo.extensionlessFileName,
|
48
|
+
appSymbolName: appComponentInfo.symbolName,
|
49
|
+
moduleTypeSeparator,
|
37
50
|
tpl: '',
|
38
51
|
});
|
39
|
-
if (angularMajorVersion
|
52
|
+
if (angularMajorVersion === 19 && !options.serverRouting) {
|
40
53
|
tree.delete((0, devkit_1.joinPathFragments)(sourceRoot, 'app/app.routes.server.ts'));
|
41
54
|
}
|
42
55
|
}
|
@@ -9,6 +9,14 @@ function setServerTsConfigOptionsForApplicationBuilder(tree, options) {
|
|
9
9
|
const { targets } = (0, devkit_1.readProjectConfiguration)(tree, options.project);
|
10
10
|
const tsConfigPath = targets.build.options.tsConfig;
|
11
11
|
(0, devkit_1.updateJson)(tree, tsConfigPath, (json) => {
|
12
|
+
json.compilerOptions ??= {};
|
13
|
+
const types = new Set(json.compilerOptions.types ?? []);
|
14
|
+
types.add('node');
|
15
|
+
json.compilerOptions.types = Array.from(types);
|
16
|
+
if (json.include?.includes('src/**/*.ts')) {
|
17
|
+
// server file is already included, no need to add it
|
18
|
+
return json;
|
19
|
+
}
|
12
20
|
const { major: angularMajorVersion } = (0, version_utils_1.getInstalledAngularVersionInfo)(tree);
|
13
21
|
const files = new Set(json.files ?? []);
|
14
22
|
files.add((0, devkit_1.joinPathFragments)('src', options.main));
|
@@ -19,10 +27,6 @@ function setServerTsConfigOptionsForApplicationBuilder(tree, options) {
|
|
19
27
|
files.add((0, devkit_1.joinPathFragments)(options.serverFileName));
|
20
28
|
}
|
21
29
|
json.files = Array.from(files);
|
22
|
-
json.compilerOptions ??= {};
|
23
|
-
const types = new Set(json.compilerOptions.types ?? []);
|
24
|
-
types.add('node');
|
25
|
-
json.compilerOptions.types = Array.from(types);
|
26
30
|
return json;
|
27
31
|
});
|
28
32
|
}
|
@@ -34,8 +38,11 @@ function generateTsConfigServerJsonForBrowserBuilder(tree, options) {
|
|
34
38
|
!!packageJson.devDependencies?.['@angular/localize'];
|
35
39
|
const baseFilesPath = (0, path_1.join)(__dirname, '..', 'files');
|
36
40
|
let pathToFiles;
|
37
|
-
if (angularMajorVersion >=
|
38
|
-
pathToFiles = (0, path_1.join)(baseFilesPath, '
|
41
|
+
if (angularMajorVersion >= 20) {
|
42
|
+
pathToFiles = (0, path_1.join)(baseFilesPath, 'v20+', 'server-builder', 'root');
|
43
|
+
}
|
44
|
+
else if (angularMajorVersion === 19) {
|
45
|
+
pathToFiles = (0, path_1.join)(baseFilesPath, 'v19', 'server-builder', 'root');
|
39
46
|
}
|
40
47
|
else {
|
41
48
|
pathToFiles = (0, path_1.join)(baseFilesPath, 'pre-v19', 'root');
|
@@ -46,4 +53,23 @@ function generateTsConfigServerJsonForBrowserBuilder(tree, options) {
|
|
46
53
|
hasLocalizePackage,
|
47
54
|
tpl: '',
|
48
55
|
});
|
56
|
+
(0, devkit_1.updateJson)(tree, (0, devkit_1.joinPathFragments)(project.root, 'tsconfig.json'), (json) => {
|
57
|
+
json.references ??= [];
|
58
|
+
json.references.push({
|
59
|
+
path: (0, devkit_1.joinPathFragments)(project.root, 'tsconfig.server.json'),
|
60
|
+
});
|
61
|
+
return json;
|
62
|
+
});
|
63
|
+
if (angularMajorVersion >= 20) {
|
64
|
+
(0, devkit_1.updateJson)(tree, options.buildTargetTsConfigPath, (json) => {
|
65
|
+
const exclude = new Set(json.exclude ?? []);
|
66
|
+
exclude.add(`src/${options.main}`);
|
67
|
+
exclude.add(`src/${options.serverFileName}`);
|
68
|
+
if (options.standalone) {
|
69
|
+
exclude.add('src/app/app.config.server.ts');
|
70
|
+
}
|
71
|
+
json.exclude = Array.from(exclude);
|
72
|
+
return json;
|
73
|
+
});
|
74
|
+
}
|
49
75
|
}
|
@@ -6,13 +6,13 @@ const prompt_1 = require("@nx/devkit/src/generators/prompt");
|
|
6
6
|
const ast_utils_1 = require("../../../utils/nx-devkit/ast-utils");
|
7
7
|
const version_utils_1 = require("../../utils/version-utils");
|
8
8
|
async function normalizeOptions(tree, options) {
|
9
|
-
const { targets } = (0, devkit_1.readProjectConfiguration)(tree, options.project);
|
9
|
+
const { targets, root } = (0, devkit_1.readProjectConfiguration)(tree, options.project);
|
10
10
|
const isUsingApplicationBuilder = targets.build.executor === '@angular-devkit/build-angular:application' ||
|
11
11
|
targets.build.executor === '@angular/build:application' ||
|
12
12
|
targets.build.executor === '@nx/angular:application';
|
13
13
|
if (options.serverRouting === undefined && isUsingApplicationBuilder) {
|
14
14
|
const { major: angularMajorVersion } = (0, version_utils_1.getInstalledAngularVersionInfo)(tree);
|
15
|
-
if (angularMajorVersion
|
15
|
+
if (angularMajorVersion === 19) {
|
16
16
|
options.serverRouting = await (0, prompt_1.promptWhenInteractive)({
|
17
17
|
type: 'confirm',
|
18
18
|
name: 'serverRouting',
|
@@ -21,7 +21,7 @@ async function normalizeOptions(tree, options) {
|
|
21
21
|
}, { serverRouting: false }).then(({ serverRouting }) => serverRouting);
|
22
22
|
}
|
23
23
|
else {
|
24
|
-
options.serverRouting =
|
24
|
+
options.serverRouting = angularMajorVersion >= 20;
|
25
25
|
}
|
26
26
|
}
|
27
27
|
else if (options.serverRouting !== undefined &&
|
@@ -42,5 +42,7 @@ async function normalizeOptions(tree, options) {
|
|
42
42
|
hydration: options.hydration ?? true,
|
43
43
|
serverRouting: options.serverRouting,
|
44
44
|
isUsingApplicationBuilder,
|
45
|
+
buildTargetTsConfigPath: targets.build.options?.tsConfig ??
|
46
|
+
(0, devkit_1.joinPathFragments)(root, 'tsconfig.app.json'),
|
45
47
|
};
|
46
48
|
}
|
@@ -21,6 +21,11 @@ function updateProjectConfigForApplicationBuilder(tree, options) {
|
|
21
21
|
}
|
22
22
|
else {
|
23
23
|
outputPath = outputPath.base;
|
24
|
+
if (buildTarget.outputs && buildTarget.outputs.length > 0) {
|
25
|
+
buildTarget.outputs = buildTarget.outputs.map((output) => output === '{options.outputPath.base}'
|
26
|
+
? '{options.outputPath}'
|
27
|
+
: output);
|
28
|
+
}
|
24
29
|
}
|
25
30
|
}
|
26
31
|
const { major: angularMajorVersion } = (0, version_utils_1.getInstalledAngularVersionInfo)(tree);
|
@@ -8,8 +8,8 @@ function validateOptions(tree, options) {
|
|
8
8
|
validateProject(tree, options.project);
|
9
9
|
validateBuildTarget(tree, options.project);
|
10
10
|
const { major: angularMajorVersion, version: angularVersion } = (0, version_utils_1.getInstalledAngularVersionInfo)(tree);
|
11
|
-
if (angularMajorVersion
|
12
|
-
throw new Error(`The "serverRouting" option is only supported in Angular versions
|
11
|
+
if (angularMajorVersion !== 19 && options.serverRouting !== undefined) {
|
12
|
+
throw new Error(`The "serverRouting" option is only supported in Angular versions 19.x.x. You are using Angular ${angularVersion}.`);
|
13
13
|
}
|
14
14
|
}
|
15
15
|
function validateProject(tree, project) {
|
@@ -53,7 +53,7 @@
|
|
53
53
|
"default": true
|
54
54
|
},
|
55
55
|
"serverRouting": {
|
56
|
-
"description": "Creates a server application using the Server Routing and App Engine APIs (Developer Preview). _Note: this is only supported in Angular versions
|
56
|
+
"description": "Creates a server application using the Server Routing and App Engine APIs for application using the `application` builder (Developer Preview). _Note: this is only supported in Angular versions 19.x.x_. From Angular 20 onwards, SSR will always enable server routing when using the `application` builder.",
|
57
57
|
"type": "boolean"
|
58
58
|
},
|
59
59
|
"skipFormat": {
|