@nx/angular 17.0.3 → 17.0.4
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/LICENSE +1 -1
- package/README.md +9 -4
- package/esm2022/mf/mf.mjs +1 -1
- package/esm2022/src/runtime/nx/data-persistence.mjs +1 -1
- package/executors.d.ts +9 -2
- package/executors.js +7 -2
- package/executors.json +19 -9
- package/fesm2022/nx-angular-mf.mjs.map +1 -1
- package/fesm2022/nx-angular.mjs.map +1 -1
- package/generators.d.ts +1 -1
- package/generators.js +3 -1
- package/generators.json +7 -2
- package/migrations.json +451 -0
- package/ng-package.json +2 -2
- package/package.json +20 -26
- package/plugins/component-testing.d.ts +1 -26
- package/plugins/component-testing.js +15 -4
- package/src/builders/dev-server/dev-server.impl.d.ts +4 -0
- package/src/builders/dev-server/dev-server.impl.js +160 -0
- package/src/builders/{webpack-dev-server → dev-server}/lib/index.d.ts +1 -0
- package/src/builders/{webpack-dev-server → dev-server}/lib/index.js +1 -0
- package/src/builders/dev-server/lib/normalize-options.d.ts +2 -0
- package/src/builders/dev-server/lib/normalize-options.js +20 -0
- package/src/builders/dev-server/lib/validate-options.d.ts +2 -0
- package/src/builders/dev-server/lib/validate-options.js +22 -0
- package/src/builders/dev-server/schema.d.ts +39 -0
- package/src/builders/{webpack-dev-server → dev-server}/schema.json +42 -5
- package/src/builders/module-federation-dev-ssr/module-federation-dev-ssr.impl.d.ts +1 -1
- package/src/builders/module-federation-dev-ssr/module-federation-dev-ssr.impl.js +15 -9
- package/src/builders/utilities/module-federation.js +1 -1
- package/src/builders/webpack-browser/schema.d.ts +6 -2
- package/src/builders/webpack-browser/schema.json +15 -15
- package/src/builders/webpack-browser/webpack-browser.impl.js +8 -6
- package/src/builders/webpack-server/schema.d.ts +0 -1
- package/src/builders/webpack-server/schema.json +7 -20
- package/src/builders/webpack-server/validate-options.js +0 -7
- package/src/builders/webpack-server/webpack-server.impl.js +4 -9
- package/src/executors/application/application.impl.d.ts +3 -0
- package/src/executors/application/application.impl.js +37 -0
- package/src/executors/application/schema.d.ts +8 -0
- package/src/executors/application/schema.json +682 -0
- package/src/executors/application/utils/validate-options.d.ts +2 -0
- package/src/executors/application/utils/validate-options.js +52 -0
- package/src/executors/browser-esbuild/browser-esbuild.impl.d.ts +2 -3
- package/src/executors/browser-esbuild/browser-esbuild.impl.js +15 -8
- package/src/executors/browser-esbuild/schema.d.ts +3 -1
- package/src/executors/browser-esbuild/schema.json +38 -8
- package/src/executors/extract-i18n/extract-i18n.impl.d.ts +3 -0
- package/src/executors/extract-i18n/extract-i18n.impl.js +43 -0
- package/src/executors/extract-i18n/schema.d.ts +8 -0
- package/src/executors/extract-i18n/schema.json +45 -0
- package/src/executors/module-federation-dev-server/lib/build-static-remotes.d.ts +4 -0
- package/src/executors/module-federation-dev-server/lib/build-static-remotes.js +56 -0
- package/src/executors/module-federation-dev-server/lib/index.d.ts +5 -0
- package/src/executors/module-federation-dev-server/lib/index.js +8 -0
- package/src/executors/module-federation-dev-server/lib/normalize-options.d.ts +2 -0
- package/src/executors/module-federation-dev-server/lib/normalize-options.js +23 -0
- package/src/executors/module-federation-dev-server/lib/parse-static-remotes-config.d.ts +11 -0
- package/src/executors/module-federation-dev-server/lib/parse-static-remotes-config.js +18 -0
- package/src/executors/module-federation-dev-server/lib/start-dev-remotes.d.ts +9 -0
- package/src/executors/module-federation-dev-server/lib/start-dev-remotes.js +29 -0
- package/src/executors/module-federation-dev-server/lib/start-static-remotes-file-server.d.ts +9 -0
- package/src/executors/module-federation-dev-server/lib/start-static-remotes-file-server.js +46 -0
- package/src/executors/module-federation-dev-server/module-federation-dev-server.impl.d.ts +4 -0
- package/src/executors/module-federation-dev-server/module-federation-dev-server.impl.js +115 -0
- package/src/{builders → executors}/module-federation-dev-server/schema.d.ts +25 -7
- package/src/{builders → executors}/module-federation-dev-server/schema.json +31 -6
- package/src/executors/ng-packagr-lite/ng-packagr-adjustments/ng-packagr.d.ts +3 -0
- package/src/executors/ng-packagr-lite/ng-packagr-adjustments/ng-packagr.js +34 -0
- package/src/executors/ng-packagr-lite/ng-packagr-adjustments/{ng-package → pre-v17/ng-package}/entry-point/compile-ngc.transform.js +6 -4
- package/src/executors/ng-packagr-lite/ng-packagr-adjustments/{ng-package → pre-v17/ng-package}/entry-point/write-package.transform.js +25 -13
- package/src/executors/ng-packagr-lite/ng-packagr-adjustments/{ngc → pre-v17/ngc}/compile-source-files.d.ts +1 -2
- package/src/executors/ng-packagr-lite/ng-packagr-adjustments/{ngc → pre-v17/ngc}/compile-source-files.js +14 -9
- package/src/executors/ng-packagr-lite/ng-packagr-adjustments/{styles → pre-v17/styles}/stylesheet-processor.d.ts +5 -10
- package/src/executors/ng-packagr-lite/ng-packagr-adjustments/{styles → pre-v17/styles}/stylesheet-processor.js +39 -86
- package/src/executors/ng-packagr-lite/ng-packagr-adjustments/v17+/ng-package/entry-point/write-bundles.di.d.ts +2 -0
- package/src/executors/ng-packagr-lite/ng-packagr-adjustments/v17+/ng-package/entry-point/write-bundles.di.js +12 -0
- package/src/executors/ng-packagr-lite/ng-packagr-adjustments/v17+/ng-package/entry-point/write-bundles.transform.d.ts +8 -0
- package/src/executors/ng-packagr-lite/ng-packagr-adjustments/v17+/ng-package/entry-point/write-bundles.transform.js +12 -0
- package/src/executors/ng-packagr-lite/ng-packagr-adjustments/v17+/ng-package/entry-point/write-package.di.d.ts +8 -0
- package/src/executors/ng-packagr-lite/ng-packagr-adjustments/v17+/ng-package/entry-point/write-package.di.js +18 -0
- package/src/executors/ng-packagr-lite/ng-packagr-adjustments/v17+/ng-package/entry-point/write-package.transform.d.ts +8 -0
- package/src/executors/ng-packagr-lite/ng-packagr-adjustments/v17+/ng-package/entry-point/write-package.transform.js +285 -0
- package/src/executors/ng-packagr-lite/ng-packagr-lite.impl.js +5 -17
- package/src/executors/ng-packagr-lite/schema.json +1 -1
- package/src/executors/package/ng-packagr-adjustments/ng-package/entry-point/compile-ngc.transform.js +5 -3
- package/src/executors/package/ng-packagr-adjustments/ng-packagr.d.ts +3 -0
- package/src/executors/package/ng-packagr-adjustments/ng-packagr.js +28 -0
- package/src/executors/package/ng-packagr-adjustments/ngc/compile-source-files.d.ts +1 -1
- package/src/executors/package/ng-packagr-adjustments/ngc/compile-source-files.js +13 -6
- package/src/executors/package/ng-packagr-adjustments/styles/stylesheet-processor.d.ts +5 -10
- package/src/executors/package/ng-packagr-adjustments/styles/stylesheet-processor.js +39 -86
- package/src/executors/package/package.impl.d.ts +1 -1
- package/src/executors/package/package.impl.js +5 -15
- package/src/executors/package/schema.json +3 -3
- package/src/executors/utilities/buildable-libs.d.ts +6 -0
- package/src/executors/{browser-esbuild/lib → utilities}/buildable-libs.js +3 -4
- package/src/executors/utilities/esbuild-extensions.d.ts +10 -0
- package/src/executors/utilities/esbuild-extensions.js +50 -0
- package/src/executors/utilities/module-loader.d.ts +15 -0
- package/src/executors/utilities/module-loader.js +52 -0
- package/src/executors/utilities/ng-compiler-cli.d.ts +1 -0
- package/src/executors/utilities/ng-compiler-cli.js +8 -0
- package/src/executors/utilities/ng-packagr/stylesheet-processor.d.ts +49 -0
- package/src/executors/utilities/ng-packagr/stylesheet-processor.di.d.ts +2 -0
- package/src/executors/utilities/ng-packagr/stylesheet-processor.di.js +16 -0
- package/src/executors/utilities/ng-packagr/stylesheet-processor.js +209 -0
- package/src/executors/utilities/ng-packagr/tailwindcss.d.ts +7 -0
- package/src/executors/utilities/{tailwindcss.js → ng-packagr/tailwindcss.js} +5 -22
- package/src/executors/utilities/patch-builder-context.d.ts +3 -0
- package/src/executors/utilities/patch-builder-context.js +41 -0
- package/src/executors/utilities/typescript.js +1 -1
- package/src/generators/add-linting/add-linting.d.ts +1 -1
- package/src/generators/add-linting/add-linting.js +9 -15
- package/src/generators/add-linting/lib/add-angular-eslint-dependencies.d.ts +2 -2
- package/src/generators/add-linting/lib/add-angular-eslint-dependencies.js +9 -5
- package/src/generators/add-linting/lib/buildable-project.d.ts +2 -0
- package/src/generators/add-linting/lib/buildable-project.js +9 -0
- package/src/generators/add-linting/lib/create-eslint-configuration.d.ts +2 -2
- package/src/generators/add-linting/schema.json +1 -1
- package/src/generators/application/application.js +19 -17
- package/src/generators/application/files/base/tsconfig.app.json__tpl__ +1 -1
- package/src/generators/application/files/base/tsconfig.json__tpl__ +6 -2
- package/src/generators/application/files/ng-module/src/app/app.component.spec.ts__tpl__ +3 -1
- package/src/generators/application/files/ng-module/src/app/app.component.ts__tpl__ +4 -2
- package/src/generators/application/files/ng-module/src/app/app.module.ts__tpl__ +1 -1
- package/src/generators/application/files/ng-module/src/app/nx-welcome.component.ts__tpl__ +53 -14
- package/src/generators/application/files/ng-module/src/main.ts__tpl__ +2 -8
- package/src/generators/application/files/standalone-components/src/app/app.component.spec.ts__tpl__ +6 -4
- package/src/generators/application/files/standalone-components/src/app/app.component.ts__tpl__ +4 -2
- package/src/generators/application/files/standalone-components/src/app/app.config.ts__tpl__ +3 -3
- package/src/generators/application/files/standalone-components/src/app/nx-welcome.component.ts__tpl__ +53 -14
- package/src/generators/application/files/standalone-components/src/main.ts__tpl__ +4 -8
- package/src/generators/application/lib/add-e2e.js +22 -8
- package/src/generators/application/lib/add-unit-test-runner.js +5 -20
- package/src/generators/application/lib/create-files.js +14 -10
- package/src/generators/application/lib/create-project.d.ts +1 -1
- package/src/generators/application/lib/create-project.js +48 -38
- package/src/generators/application/lib/index.d.ts +1 -0
- package/src/generators/application/lib/index.js +1 -0
- package/src/generators/application/lib/normalize-options.d.ts +1 -1
- package/src/generators/application/lib/normalize-options.js +28 -6
- package/src/generators/application/lib/normalized-schema.d.ts +5 -0
- package/src/generators/application/lib/set-generator-defaults.d.ts +3 -0
- package/src/generators/application/lib/set-generator-defaults.js +17 -0
- package/src/generators/application/lib/update-editor-tsconfig.d.ts +1 -1
- package/src/generators/application/lib/update-editor-tsconfig.js +11 -14
- package/src/generators/application/schema.d.ts +1 -0
- package/src/generators/application/schema.json +18 -10
- package/src/generators/component/component.js +4 -1
- package/src/generators/component/files/__fileName__.spec.ts__tpl__ +2 -3
- package/src/generators/component/files/__fileName__.ts__tpl__ +8 -2
- package/src/generators/component/lib/component.js +1 -1
- package/src/generators/component/lib/index.d.ts +1 -1
- package/src/generators/component/lib/index.js +1 -1
- package/src/generators/component/lib/normalize-options.js +3 -2
- package/src/generators/component/lib/set-generator-defaults.d.ts +3 -0
- package/src/generators/component/lib/set-generator-defaults.js +14 -0
- package/src/generators/component/schema.d.ts +3 -3
- package/src/generators/component/schema.json +4 -4
- package/src/generators/component-cypress-spec/files/__componentFileName__.__fileExt__ +13 -8
- package/src/generators/component-cypress-spec/schema.json +1 -1
- package/src/generators/component-story/files/__componentFileName__.stories.ts__tmpl__ +2 -2
- package/src/generators/component-test/component-test.d.ts +1 -1
- package/src/generators/component-test/component-test.js +8 -3
- package/src/generators/component-test/files/__componentFileName__.cy.ts__tpl__ +9 -11
- package/src/generators/component-test/schema.json +1 -1
- package/src/generators/convert-to-application-executor/convert-to-application-executor.d.ts +4 -0
- package/src/generators/convert-to-application-executor/convert-to-application-executor.js +242 -0
- package/src/generators/convert-to-application-executor/schema.d.ts +4 -0
- package/src/generators/convert-to-application-executor/schema.json +26 -0
- package/src/generators/convert-to-with-mf/convert-to-with-mf.js +3 -1
- package/src/generators/convert-to-with-mf/lib/write-new-webpack-config.js +3 -2
- package/src/generators/convert-to-with-mf/schema.d.ts +1 -0
- package/src/generators/convert-to-with-mf/schema.json +6 -0
- package/src/generators/cypress-component-configuration/cypress-component-configuration.d.ts +2 -1
- package/src/generators/cypress-component-configuration/cypress-component-configuration.js +43 -24
- package/src/generators/directive/directive.js +0 -1
- package/src/generators/directive/files/__fileName__.ts__tpl__ +1 -3
- package/src/generators/directive/lib/index.d.ts +0 -1
- package/src/generators/directive/lib/index.js +0 -1
- package/src/generators/directive/lib/normalize-options.js +3 -1
- package/src/generators/directive/schema.d.ts +3 -3
- package/src/generators/directive/schema.json +4 -4
- package/src/generators/federate-module/federate-module.js +1 -0
- package/src/generators/federate-module/lib/add-remote.d.ts +1 -1
- package/src/generators/federate-module/lib/add-remote.js +2 -11
- package/src/generators/federate-module/schema.json +3 -3
- package/src/generators/host/files/common/v17+/src/main.server.ts__tmpl__ +67 -0
- package/src/generators/host/files/ts/webpack.server.config.ts__tmpl__ +2 -2
- package/src/generators/host/host.js +8 -9
- package/src/generators/host/lib/index.d.ts +1 -1
- package/src/generators/host/lib/index.js +1 -1
- package/src/generators/host/lib/update-ssr-setup.d.ts +3 -0
- package/src/generators/host/lib/{add-ssr.js → update-ssr-setup.js} +8 -14
- package/src/generators/host/schema.json +6 -6
- package/src/generators/init/init.d.ts +2 -2
- package/src/generators/init/init.js +19 -137
- package/src/generators/init/schema.d.ts +1 -9
- package/src/generators/init/schema.json +8 -59
- package/src/generators/library/files/ng-module/src/lib/lib.routes.ts__tpl__ +1 -1
- package/src/generators/library/files/standalone-components/src/lib/lib.routes.ts__tpl__ +1 -1
- package/src/generators/library/lib/add-load-children.js +2 -2
- package/src/generators/library/lib/add-project.js +24 -22
- package/src/generators/library/lib/add-standalone-component.d.ts +2 -2
- package/src/generators/library/lib/add-standalone-component.js +5 -4
- package/src/generators/library/lib/normalize-options.js +2 -5
- package/src/generators/library/lib/set-generator-defaults.d.ts +3 -0
- package/src/generators/library/lib/set-generator-defaults.js +15 -0
- package/src/generators/library/lib/update-tsconfig.js +3 -3
- package/src/generators/library/library.js +15 -27
- package/src/generators/library/schema.d.ts +1 -0
- package/src/generators/library/schema.json +13 -13
- package/src/generators/library-secondary-entry-point/files/src/index.ts__tmpl__ +1 -5
- package/src/generators/library-secondary-entry-point/lib/index.d.ts +0 -1
- package/src/generators/library-secondary-entry-point/lib/index.js +0 -1
- package/src/generators/library-secondary-entry-point/library-secondary-entry-point.js +3 -2
- package/src/generators/library-secondary-entry-point/schema.d.ts +1 -0
- package/src/generators/library-secondary-entry-point/schema.json +9 -3
- package/src/generators/move/schema.json +1 -1
- package/src/generators/ng-add/migrate-from-angular-cli.js +1 -1
- package/src/generators/ng-add/migrators/projects/app.migrator.js +50 -7
- package/src/generators/ng-add/migrators/projects/e2e.migrator.js +31 -23
- package/src/generators/ng-add/ng-add.js +1 -8
- package/src/generators/ng-add/schema.json +1 -1
- package/src/generators/ng-add/utilities/workspace.d.ts +1 -1
- package/src/generators/ng-add/utilities/workspace.js +9 -16
- package/src/generators/ngrx/files/{base/__directory__ → __directory__}/__fileName__.models.ts__tmpl__ +1 -1
- package/src/generators/ngrx/files/{base/__directory__ → __directory__}/__fileName__.selectors.spec.ts__tmpl__ +1 -1
- package/src/generators/ngrx/lib/generate-files.js +1 -10
- package/src/generators/ngrx/lib/validate-options.js +0 -23
- package/src/generators/ngrx/schema.json +3 -3
- package/src/generators/ngrx-feature-store/files/{base/__directory__ → __directory__}/__fileName__.models.ts__tmpl__ +1 -1
- package/src/generators/ngrx-feature-store/files/{base/__directory__ → __directory__}/__fileName__.selectors.spec.ts__tmpl__ +1 -1
- package/src/generators/ngrx-feature-store/lib/generate-files.js +1 -12
- package/src/generators/ngrx-feature-store/lib/validate-options.js +0 -22
- package/src/generators/ngrx-feature-store/schema.json +3 -3
- package/src/generators/ngrx-root-store/lib/normalize-options.js +1 -1
- package/src/generators/ngrx-root-store/lib/validate-options.js +0 -15
- package/src/generators/ngrx-root-store/schema.json +2 -2
- package/src/generators/pipe/files/__fileName__.ts__tpl__ +0 -2
- package/src/generators/pipe/lib/index.d.ts +0 -1
- package/src/generators/pipe/lib/index.js +0 -1
- package/src/generators/pipe/lib/normalize-options.js +1 -0
- package/src/generators/pipe/pipe.js +0 -1
- package/src/generators/pipe/schema.d.ts +3 -3
- package/src/generators/pipe/schema.json +4 -4
- package/src/generators/remote/files/base-ts/webpack.server.config.ts__tmpl__ +2 -2
- package/src/generators/remote/files/common/{src → pre-v17/src}/main.server.ts__tmpl__ +1 -3
- package/src/generators/remote/files/common/v17+/src/main.server.ts__tmpl__ +73 -0
- package/src/generators/remote/lib/index.d.ts +1 -1
- package/src/generators/remote/lib/index.js +1 -1
- package/src/generators/remote/lib/{add-ssr.d.ts → update-ssr-setup.d.ts} +1 -1
- package/src/generators/remote/lib/{add-ssr.js → update-ssr-setup.js} +9 -13
- package/src/generators/remote/remote.js +7 -9
- package/src/generators/remote/schema.json +6 -6
- package/src/generators/scam/lib/convert-component-to-scam.js +2 -1
- package/src/generators/scam/schema.d.ts +3 -3
- package/src/generators/scam/schema.json +2 -2
- package/src/generators/scam-directive/lib/convert-directive-to-scam.js +2 -1
- package/src/generators/scam-directive/scam-directive.js +3 -1
- package/src/generators/scam-directive/schema.d.ts +4 -3
- package/src/generators/scam-directive/schema.json +8 -2
- package/src/generators/scam-pipe/lib/convert-pipe-to-scam.js +2 -1
- package/src/generators/scam-pipe/scam-pipe.js +3 -1
- package/src/generators/scam-pipe/schema.d.ts +4 -3
- package/src/generators/scam-pipe/schema.json +8 -2
- package/src/generators/scam-to-standalone/scam-to-standalone.js +0 -7
- package/src/generators/scam-to-standalone/schema.json +2 -2
- package/src/generators/setup-mf/files/host-files/app.component.spec.ts__tmpl__ +3 -1
- package/src/generators/setup-mf/files/ts-webpack/module-federation.config.ts__tmpl__ +12 -0
- package/src/generators/setup-mf/files/ts-webpack/tsconfig.lint.json__tmpl__ +12 -0
- package/src/generators/setup-mf/files/ts-webpack/webpack.config.ts__tmpl__ +1 -1
- package/src/generators/setup-mf/files/ts-webpack/webpack.prod.config.ts__tmpl__ +12 -12
- package/src/generators/setup-mf/files/webpack/module-federation.config.js__tmpl__ +13 -1
- package/src/generators/setup-mf/lib/add-cypress-workaround.js +14 -4
- package/src/generators/setup-mf/lib/add-remote-entry.js +2 -11
- package/src/generators/setup-mf/lib/add-remote-to-host.js +1 -1
- package/src/generators/setup-mf/lib/fix-bootstrap.js +10 -18
- package/src/generators/setup-mf/lib/generate-config.js +3 -0
- package/src/generators/setup-mf/lib/index.d.ts +1 -1
- package/src/generators/setup-mf/lib/index.js +1 -1
- package/src/generators/setup-mf/lib/normalize-options.js +2 -1
- package/src/generators/setup-mf/lib/remove-dead-code-from-remote.js +10 -10
- package/src/generators/setup-mf/lib/setup-serve-target.js +1 -1
- package/src/generators/setup-mf/lib/update-host-app-routes.js +2 -2
- package/src/generators/{pipe/lib/validate-options.d.ts → setup-mf/lib/update-tsconfig.d.ts} +1 -1
- package/src/generators/setup-mf/lib/update-tsconfig.js +19 -0
- package/src/generators/setup-mf/schema.d.ts +1 -0
- package/src/generators/setup-mf/schema.json +8 -3
- package/src/generators/setup-mf/setup-mf.js +1 -7
- package/src/generators/setup-ssr/files/ngmodule/base/src/__main__ +1 -1
- package/src/generators/setup-ssr/files/server/application-builder/__serverFileName__ +56 -0
- package/src/generators/setup-ssr/files/{ngmodule/base → server/server-builder/pre-v17}/__serverFileName__ +7 -8
- package/src/generators/setup-ssr/files/{standalone → server/server-builder/v17+}/__serverFileName__ +25 -16
- package/src/generators/setup-ssr/lib/add-dependencies.d.ts +2 -0
- package/src/generators/setup-ssr/lib/add-dependencies.js +36 -0
- package/src/generators/setup-ssr/lib/add-hydration.js +11 -5
- package/src/generators/setup-ssr/lib/add-server-file.d.ts +3 -0
- package/src/generators/setup-ssr/lib/add-server-file.js +31 -0
- package/src/generators/setup-ssr/lib/constants.d.ts +3 -0
- package/src/generators/setup-ssr/lib/constants.js +6 -0
- package/src/generators/setup-ssr/lib/generate-files.d.ts +1 -1
- package/src/generators/setup-ssr/lib/generate-files.js +11 -16
- package/src/generators/setup-ssr/lib/generate-server-ts-config.d.ts +4 -0
- package/src/generators/setup-ssr/lib/generate-server-ts-config.js +29 -0
- package/src/generators/setup-ssr/lib/index.d.ts +4 -0
- package/src/generators/setup-ssr/lib/index.js +4 -0
- package/src/generators/setup-ssr/lib/normalize-options.js +7 -1
- package/src/generators/setup-ssr/lib/set-router-initial-navigation.d.ts +3 -0
- package/src/generators/setup-ssr/lib/set-router-initial-navigation.js +93 -0
- package/src/generators/setup-ssr/lib/update-project-config.d.ts +2 -1
- package/src/generators/setup-ssr/lib/update-project-config.js +46 -13
- package/src/generators/setup-ssr/lib/validate-options.js +15 -2
- package/src/generators/setup-ssr/schema.json +4 -4
- package/src/generators/setup-ssr/setup-ssr.js +18 -12
- package/src/generators/setup-tailwind/schema.json +1 -1
- package/src/generators/stories/schema.json +1 -1
- package/src/generators/stories/stories.js +2 -2
- package/src/generators/storybook-configuration/lib/generate-stories.js +6 -4
- package/src/generators/storybook-configuration/lib/generate-storybook-configuration.js +3 -1
- package/src/generators/storybook-configuration/schema.d.ts +1 -1
- package/src/generators/storybook-configuration/schema.json +7 -7
- package/src/generators/storybook-configuration/storybook-configuration.js +8 -5
- package/src/generators/utils/add-jest.d.ts +8 -0
- package/src/generators/utils/add-jest.js +36 -0
- package/src/generators/utils/add-mf-env-to-inputs.d.ts +2 -0
- package/src/generators/utils/add-mf-env-to-inputs.js +27 -0
- package/src/generators/utils/dependencies.js +1 -2
- package/src/generators/utils/ensure-angular-dependencies.d.ts +2 -0
- package/src/generators/utils/ensure-angular-dependencies.js +35 -0
- package/src/generators/utils/export-scam.js +2 -2
- package/src/generators/utils/project.d.ts +0 -1
- package/src/generators/utils/project.js +2 -29
- package/src/generators/utils/selector.d.ts +2 -2
- package/src/generators/utils/selector.js +11 -4
- package/src/generators/utils/testing.js +24 -1
- package/src/generators/utils/update-app-editor-tsconfig-excluded-files.d.ts +2 -0
- package/src/generators/utils/update-app-editor-tsconfig-excluded-files.js +23 -0
- package/src/generators/utils/update-project-root-tsconfig.d.ts +3 -0
- package/src/generators/utils/update-project-root-tsconfig.js +26 -0
- package/src/generators/utils/validations.d.ts +0 -1
- package/src/generators/utils/validations.js +1 -14
- package/src/generators/utils/version-utils.d.ts +2 -2
- package/src/generators/utils/version-utils.js +3 -3
- package/src/migrations/update-17-1-0/browser-target-to-build-target.d.ts +3 -0
- package/src/migrations/update-17-1-0/browser-target-to-build-target.js +50 -0
- package/src/migrations/update-17-1-0/replace-nguniversal-builders.d.ts +2 -0
- package/src/migrations/update-17-1-0/replace-nguniversal-builders.js +75 -0
- package/src/migrations/update-17-1-0/replace-nguniversal-engines.d.ts +2 -0
- package/src/migrations/update-17-1-0/replace-nguniversal-engines.js +183 -0
- package/src/migrations/update-17-1-0/update-angular-cli.d.ts +3 -0
- package/src/migrations/update-17-1-0/update-angular-cli.js +23 -0
- package/src/migrations/update-17-1-0/update-zone-js-deep-import.d.ts +2 -0
- package/src/migrations/update-17-1-0/update-zone-js-deep-import.js +37 -0
- package/src/migrations/update-17-2-0/rename-webpack-dev-server.d.ts +2 -0
- package/src/migrations/update-17-2-0/rename-webpack-dev-server.js +40 -0
- package/src/migrations/update-17-3-0/add-autoprefixer-dependency.d.ts +2 -0
- package/src/migrations/update-17-3-0/add-autoprefixer-dependency.js +26 -0
- package/src/migrations/update-17-3-0/add-browser-sync-dependency.d.ts +2 -0
- package/src/migrations/update-17-3-0/add-browser-sync-dependency.js +26 -0
- package/src/migrations/update-17-3-0/update-angular-cli.d.ts +3 -0
- package/src/migrations/update-17-3-0/update-angular-cli.js +23 -0
- package/src/migrations/update-18-0-0/add-mf-env-var-to-target-defaults.d.ts +2 -0
- package/src/migrations/update-18-0-0/add-mf-env-var-to-target-defaults.js +26 -0
- package/src/migrations/update-18-1-0/update-angular-cli.d.ts +3 -0
- package/src/migrations/update-18-1-0/update-angular-cli.js +23 -0
- package/src/migrations/update-18-1-1/fix-target-defaults-inputs.d.ts +2 -0
- package/src/migrations/update-18-1-1/fix-target-defaults-inputs.js +53 -0
- package/src/migrations/update-18-2-0/update-angular-cli.d.ts +3 -0
- package/src/migrations/update-18-2-0/update-angular-cli.js +23 -0
- package/src/utils/backward-compatible-versions.d.ts +6 -4
- package/src/utils/backward-compatible-versions.js +20 -22
- package/src/utils/{public-api.d.ts → index.d.ts} +5 -0
- package/src/utils/{public-api.js → index.js} +5 -0
- package/src/utils/mf/utils.js +7 -0
- package/src/utils/mf/with-module-federation-ssr.js +3 -0
- package/src/utils/mf/with-module-federation.js +3 -0
- package/src/utils/nx-devkit/ast-utils.js +4 -2
- package/src/utils/nx-devkit/testing.js +27 -31
- package/src/utils/targets.d.ts +2 -0
- package/src/utils/targets.js +17 -0
- package/src/utils/version-utils.d.ts +3 -3
- package/src/utils/versions.d.ts +9 -11
- package/src/utils/versions.js +10 -12
- package/src/builders/module-federation-dev-server/module-federation-dev-server.impl.d.ts +0 -5
- package/src/builders/module-federation-dev-server/module-federation-dev-server.impl.js +0 -136
- package/src/builders/webpack-browser/validate-options.d.ts +0 -2
- package/src/builders/webpack-browser/validate-options.js +0 -40
- package/src/builders/webpack-dev-server/lib/normalize-options.d.ts +0 -2
- package/src/builders/webpack-dev-server/lib/normalize-options.js +0 -14
- package/src/builders/webpack-dev-server/schema.d.ts +0 -21
- package/src/builders/webpack-dev-server/webpack-dev-server.impl.d.ts +0 -4
- package/src/builders/webpack-dev-server/webpack-dev-server.impl.js +0 -105
- package/src/executors/browser-esbuild/lib/buildable-libs.d.ts +0 -9
- package/src/executors/browser-esbuild/lib/validate-options.d.ts +0 -2
- package/src/executors/browser-esbuild/lib/validate-options.js +0 -40
- package/src/executors/ng-packagr-lite/ng-packagr-adjustments/ts/cache-compiler-host.d.ts +0 -16
- package/src/executors/ng-packagr-lite/ng-packagr-adjustments/ts/cache-compiler-host.js +0 -175
- package/src/executors/package/ng-packagr-adjustments/ts/cache-compiler-host.d.ts +0 -15
- package/src/executors/package/ng-packagr-adjustments/ts/cache-compiler-host.js +0 -197
- package/src/executors/utilities/tailwindcss.d.ts +0 -7
- package/src/generators/application/files/tsconfig.editor.json__tpl__ +0 -5
- package/src/generators/application/files/v14/.browserlistrc__tpl__ +0 -16
- package/src/generators/application/files/v14/src/environments/environment.prod.ts__tpl__ +0 -3
- package/src/generators/application/files/v14/src/environments/environment.ts__tpl__ +0 -16
- package/src/generators/application/files/v14/src/polyfills.ts__tpl__ +0 -53
- package/src/generators/component/lib/validate-options.d.ts +0 -3
- package/src/generators/component/lib/validate-options.js +0 -8
- package/src/generators/directive/lib/validate-options.d.ts +0 -3
- package/src/generators/directive/lib/validate-options.js +0 -8
- package/src/generators/host/lib/add-ssr.d.ts +0 -3
- package/src/generators/library-secondary-entry-point/lib/update-linting-file-patterns.d.ts +0 -3
- package/src/generators/library-secondary-entry-point/lib/update-linting-file-patterns.js +0 -15
- package/src/generators/ngrx/files/no-inject/__directory__/__fileName__.effects.ts__tmpl__ +0 -22
- package/src/generators/ngrx/files/no-inject/__directory__/__fileName__.facade.ts__tmpl__ +0 -27
- package/src/generators/ngrx-feature-store/files/no-inject/__directory__/__fileName__.effects.ts__tmpl__ +0 -22
- package/src/generators/ngrx-feature-store/files/no-inject/__directory__/__fileName__.facade.ts__tmpl__ +0 -27
- package/src/generators/pipe/lib/validate-options.js +0 -8
- package/src/generators/setup-mf/lib/set-tsconfig-target.d.ts +0 -3
- package/src/generators/setup-mf/lib/set-tsconfig-target.js +0 -16
- package/src/generators/setup-ssr/files/ngmodule/v14/src/__main__ +0 -11
- package/src/generators/utils/create-ts-config.d.ts +0 -8
- package/src/generators/utils/create-ts-config.js +0 -35
- /package/src/executors/ng-packagr-lite/ng-packagr-adjustments/{ng-package → pre-v17/ng-package}/entry-point/compile-ngc.di.d.ts +0 -0
- /package/src/executors/ng-packagr-lite/ng-packagr-adjustments/{ng-package → pre-v17/ng-package}/entry-point/compile-ngc.di.js +0 -0
- /package/src/executors/ng-packagr-lite/ng-packagr-adjustments/{ng-package → pre-v17/ng-package}/entry-point/compile-ngc.transform.d.ts +0 -0
- /package/src/executors/ng-packagr-lite/ng-packagr-adjustments/{ng-package → pre-v17/ng-package}/entry-point/entry-point.di.d.ts +0 -0
- /package/src/executors/ng-packagr-lite/ng-packagr-adjustments/{ng-package → pre-v17/ng-package}/entry-point/entry-point.di.js +0 -0
- /package/src/executors/ng-packagr-lite/ng-packagr-adjustments/{ng-package → pre-v17/ng-package}/entry-point/entry-point.transform.d.ts +0 -0
- /package/src/executors/ng-packagr-lite/ng-packagr-adjustments/{ng-package → pre-v17/ng-package}/entry-point/entry-point.transform.js +0 -0
- /package/src/executors/ng-packagr-lite/ng-packagr-adjustments/{ng-package → pre-v17/ng-package}/entry-point/write-package.di.d.ts +0 -0
- /package/src/executors/ng-packagr-lite/ng-packagr-adjustments/{ng-package → pre-v17/ng-package}/entry-point/write-package.di.js +0 -0
- /package/src/executors/ng-packagr-lite/ng-packagr-adjustments/{ng-package → pre-v17/ng-package}/entry-point/write-package.transform.d.ts +0 -0
- /package/src/executors/ng-packagr-lite/ng-packagr-adjustments/{ng-package → pre-v17/ng-package}/options.di.d.ts +0 -0
- /package/src/executors/ng-packagr-lite/ng-packagr-adjustments/{ng-package → pre-v17/ng-package}/options.di.js +0 -0
- /package/src/executors/ng-packagr-lite/ng-packagr-adjustments/{ng-package → pre-v17/ng-package}/package.di.d.ts +0 -0
- /package/src/executors/ng-packagr-lite/ng-packagr-adjustments/{ng-package → pre-v17/ng-package}/package.di.js +0 -0
- /package/src/executors/ng-packagr-lite/ng-packagr-adjustments/{styles → pre-v17/styles}/stylesheet-processor.di.d.ts +0 -0
- /package/src/executors/ng-packagr-lite/ng-packagr-adjustments/{styles → pre-v17/styles}/stylesheet-processor.di.js +0 -0
- /package/src/generators/host/files/common/{src → pre-v17/src}/main.server.ts__tmpl__ +0 -0
- /package/src/generators/ngrx/files/{base/__directory__ → __directory__}/__fileName__.actions.ts__tmpl__ +0 -0
- /package/src/generators/ngrx/files/{base/__directory__ → __directory__}/__fileName__.effects.spec.ts__tmpl__ +0 -0
- /package/src/generators/ngrx/files/{base/__directory__ → __directory__}/__fileName__.effects.ts__tmpl__ +0 -0
- /package/src/generators/ngrx/files/{base/__directory__ → __directory__}/__fileName__.facade.spec.ts__tmpl__ +0 -0
- /package/src/generators/ngrx/files/{base/__directory__ → __directory__}/__fileName__.facade.ts__tmpl__ +0 -0
- /package/src/generators/ngrx/files/{base/__directory__ → __directory__}/__fileName__.reducer.spec.ts__tmpl__ +0 -0
- /package/src/generators/ngrx/files/{base/__directory__ → __directory__}/__fileName__.reducer.ts__tmpl__ +0 -0
- /package/src/generators/ngrx/files/{base/__directory__ → __directory__}/__fileName__.selectors.ts__tmpl__ +0 -0
- /package/src/generators/ngrx-feature-store/files/{base/__directory__ → __directory__}/__fileName__.actions.ts__tmpl__ +0 -0
- /package/src/generators/ngrx-feature-store/files/{base/__directory__ → __directory__}/__fileName__.effects.spec.ts__tmpl__ +0 -0
- /package/src/generators/ngrx-feature-store/files/{base/__directory__ → __directory__}/__fileName__.effects.ts__tmpl__ +0 -0
- /package/src/generators/ngrx-feature-store/files/{base/__directory__ → __directory__}/__fileName__.facade.spec.ts__tmpl__ +0 -0
- /package/src/generators/ngrx-feature-store/files/{base/__directory__ → __directory__}/__fileName__.facade.ts__tmpl__ +0 -0
- /package/src/generators/ngrx-feature-store/files/{base/__directory__ → __directory__}/__fileName__.reducer.spec.ts__tmpl__ +0 -0
- /package/src/generators/ngrx-feature-store/files/{base/__directory__ → __directory__}/__fileName__.reducer.ts__tmpl__ +0 -0
- /package/src/generators/ngrx-feature-store/files/{base/__directory__ → __directory__}/__fileName__.selectors.ts__tmpl__ +0 -0
- /package/src/generators/setup-ssr/files/{base → root}/tsconfig.server.json__tpl__ +0 -0
|
@@ -15,7 +15,7 @@ function updateHostAppRoutes(tree, options) {
|
|
|
15
15
|
? options.remotes.reduce((routes, remote) => `${routes}\n<li><a routerLink='${remote}'>${(0, devkit_1.names)(remote).className}</a></li>`, '')
|
|
16
16
|
: '';
|
|
17
17
|
tree.write((0, devkit_1.joinPathFragments)(sourceRoot, 'app/app.component.html'), `<ul class="remote-menu">
|
|
18
|
-
<li><a routerLink=
|
|
18
|
+
<li><a routerLink="/">Home</a></li>${remoteRoutes}
|
|
19
19
|
</ul>
|
|
20
20
|
<router-outlet></router-outlet>
|
|
21
21
|
`);
|
|
@@ -31,7 +31,7 @@ function updateHostAppRoutes(tree, options) {
|
|
|
31
31
|
component: NxWelcomeComponent
|
|
32
32
|
}`);
|
|
33
33
|
tree.write(pathToHostRootRoutingFile, `import { NxWelcomeComponent } from './nx-welcome.component';
|
|
34
|
-
|
|
34
|
+
${tree.read(pathToHostRootRoutingFile, 'utf-8')}`);
|
|
35
35
|
(0, devkit_1.generateFiles)(tree, (0, devkit_1.joinPathFragments)(__dirname, '../files/host-files'), (0, devkit_1.joinPathFragments)(sourceRoot, 'app'), {
|
|
36
36
|
appName: options.appName,
|
|
37
37
|
standalone: options.standalone,
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.updateTsConfig = void 0;
|
|
4
|
+
const devkit_1 = require("@nx/devkit");
|
|
5
|
+
function updateTsConfig(tree, schema) {
|
|
6
|
+
const { root } = (0, devkit_1.readProjectConfiguration)(tree, schema.appName);
|
|
7
|
+
(0, devkit_1.updateJson)(tree, (0, devkit_1.joinPathFragments)(root, `tsconfig.app.json`), (json) => {
|
|
8
|
+
json.compilerOptions ??= {};
|
|
9
|
+
json.compilerOptions.target = 'ES2020';
|
|
10
|
+
if (schema.mfType === 'remote') {
|
|
11
|
+
json.files ??= [];
|
|
12
|
+
json.files.push(schema.standalone
|
|
13
|
+
? 'src/app/remote-entry/entry.routes.ts'
|
|
14
|
+
: 'src/app/remote-entry/entry.module.ts');
|
|
15
|
+
}
|
|
16
|
+
return json;
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
exports.updateTsConfig = updateTsConfig;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
{
|
|
2
|
-
"$schema": "
|
|
2
|
+
"$schema": "https://json-schema.org/schema",
|
|
3
3
|
"$id": "GeneratorAngularMFSetup",
|
|
4
4
|
"cli": "nx",
|
|
5
5
|
"title": "Generate Module Federation Setup for Angular App",
|
|
@@ -71,13 +71,18 @@
|
|
|
71
71
|
},
|
|
72
72
|
"standalone": {
|
|
73
73
|
"type": "boolean",
|
|
74
|
-
"description": "Whether the application is a standalone application.
|
|
75
|
-
"default":
|
|
74
|
+
"description": "Whether the application is a standalone application.",
|
|
75
|
+
"default": true
|
|
76
76
|
},
|
|
77
77
|
"typescriptConfiguration": {
|
|
78
78
|
"type": "boolean",
|
|
79
79
|
"description": "Whether the module federation configuration and webpack configuration files should use TS.",
|
|
80
80
|
"default": true
|
|
81
|
+
},
|
|
82
|
+
"setParserOptionsProject": {
|
|
83
|
+
"type": "boolean",
|
|
84
|
+
"description": "Whether or not to configure the ESLint `parserOptions.project` option. We do not do this by default for lint performance reasons.",
|
|
85
|
+
"default": false
|
|
81
86
|
}
|
|
82
87
|
},
|
|
83
88
|
"required": ["appName", "mfType"],
|
|
@@ -3,14 +3,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.setupMf = void 0;
|
|
4
4
|
const devkit_1 = require("@nx/devkit");
|
|
5
5
|
const lib_1 = require("./lib");
|
|
6
|
-
const version_utils_1 = require("../utils/version-utils");
|
|
7
6
|
const versions_1 = require("../../utils/versions");
|
|
8
|
-
const semver_1 = require("semver");
|
|
9
7
|
async function setupMf(tree, rawOptions) {
|
|
10
|
-
const installedAngularInfo = (0, version_utils_1.getInstalledAngularVersionInfo)(tree);
|
|
11
|
-
if ((0, semver_1.lt)(installedAngularInfo.version, '14.1.0') && rawOptions.standalone) {
|
|
12
|
-
throw new Error(`The --standalone flag is not supported in your current version of Angular (${installedAngularInfo.version}). Please update to a version of Angular that supports Standalone Components (>= 14.1.0).`);
|
|
13
|
-
}
|
|
14
8
|
const options = (0, lib_1.normalizeOptions)(tree, rawOptions);
|
|
15
9
|
const projectConfig = (0, devkit_1.readProjectConfiguration)(tree, options.appName);
|
|
16
10
|
let installTask = () => { };
|
|
@@ -24,7 +18,7 @@ async function setupMf(tree, rawOptions) {
|
|
|
24
18
|
const remotesWithPorts = (0, lib_1.getRemotesWithPorts)(tree, options);
|
|
25
19
|
(0, lib_1.generateWebpackConfig)(tree, options, projectConfig.root, remotesWithPorts);
|
|
26
20
|
(0, lib_1.changeBuildTarget)(tree, options);
|
|
27
|
-
(0, lib_1.
|
|
21
|
+
(0, lib_1.updateTsConfig)(tree, options);
|
|
28
22
|
(0, lib_1.setupServeTarget)(tree, options);
|
|
29
23
|
(0, lib_1.fixBootstrap)(tree, projectConfig.root, options);
|
|
30
24
|
if (options.mfType === 'host') {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export { <%= rootModuleClassName %> } from './app/<%= rootModuleFileName.slice(0, -3) %>';
|
|
1
|
+
export { <%= rootModuleClassName %> as default } from './app/<%= rootModuleFileName.slice(0, -3) %>';
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { APP_BASE_HREF } from '@angular/common';
|
|
2
|
+
import { CommonEngine } from '@angular/ssr';
|
|
3
|
+
import express from 'express';
|
|
4
|
+
import { fileURLToPath } from 'node:url';
|
|
5
|
+
import { dirname, join, resolve } from 'node:path';
|
|
6
|
+
import <% if (standalone) { %>bootstrap<% } else { %><%= rootModuleClassName %><% } %> from './src/<%= main.slice(0, -3) %>';
|
|
7
|
+
|
|
8
|
+
// The Express app is exported so that it can be used by serverless Functions.
|
|
9
|
+
export function app(): express.Express {
|
|
10
|
+
const server = express();
|
|
11
|
+
const serverDistFolder = dirname(fileURLToPath(import.meta.url));
|
|
12
|
+
const browserDistFolder = resolve(serverDistFolder, '../<%= browserBundleOutputPath %>');
|
|
13
|
+
const indexHtml = join(serverDistFolder, 'index.server.html');
|
|
14
|
+
|
|
15
|
+
const commonEngine = new CommonEngine();
|
|
16
|
+
|
|
17
|
+
server.set('view engine', 'html');
|
|
18
|
+
server.set('views', browserDistFolder);
|
|
19
|
+
|
|
20
|
+
// Example Express Rest API endpoints
|
|
21
|
+
// server.get('/api/**', (req, res) => { });
|
|
22
|
+
// Serve static files from /browser
|
|
23
|
+
server.get('*.*', express.static(browserDistFolder, {
|
|
24
|
+
maxAge: '1y'
|
|
25
|
+
}));
|
|
26
|
+
|
|
27
|
+
// All regular routes use the Angular engine
|
|
28
|
+
server.get('*', (req, res, next) => {
|
|
29
|
+
const { protocol, originalUrl, baseUrl, headers } = req;
|
|
30
|
+
|
|
31
|
+
commonEngine
|
|
32
|
+
.render({
|
|
33
|
+
bootstrap<% if (!standalone) { %>: <%= rootModuleClassName %><% } %>,
|
|
34
|
+
documentFilePath: indexHtml,
|
|
35
|
+
url: `${protocol}://${headers.host}${originalUrl}`,
|
|
36
|
+
publicPath: browserDistFolder,
|
|
37
|
+
providers: [{ provide: APP_BASE_HREF, useValue: baseUrl }],
|
|
38
|
+
})
|
|
39
|
+
.then((html) => res.send(html))
|
|
40
|
+
.catch((err) => next(err));
|
|
41
|
+
});
|
|
42
|
+
|
|
43
|
+
return server;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
function run(): void {
|
|
47
|
+
const port = process.env['PORT'] || <%= serverPort %>;
|
|
48
|
+
|
|
49
|
+
// Start up the Node server
|
|
50
|
+
const server = app();
|
|
51
|
+
server.listen(port, () => {
|
|
52
|
+
console.log(`Node Express server listening on http://localhost:${port}`);
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
run();
|
|
@@ -1,12 +1,11 @@
|
|
|
1
1
|
import 'zone.js/dist/zone-node';
|
|
2
2
|
|
|
3
|
-
import {APP_BASE_HREF} from '@angular/common';
|
|
4
|
-
import {ngExpressEngine} from '@nguniversal/express-engine';
|
|
3
|
+
import { APP_BASE_HREF } from '@angular/common';
|
|
4
|
+
import { ngExpressEngine } from '@nguniversal/express-engine';
|
|
5
5
|
import * as express from 'express';
|
|
6
|
-
import {existsSync} from 'fs';
|
|
7
|
-
import {join} from 'path';
|
|
8
|
-
|
|
9
|
-
import {<%= rootModuleClassName %>} from './src/<%= main.slice(0, -3) %>';
|
|
6
|
+
import { existsSync } from 'fs';
|
|
7
|
+
import { join } from 'path';
|
|
8
|
+
import <% if (standalone) { %>bootstrap<% } else { %><%= rootModuleClassName %><% } %> from './src/<%= main.slice(0, -3) %>';
|
|
10
9
|
|
|
11
10
|
// The Express app is exported so that it can be used by serverless Functions.
|
|
12
11
|
export function app(): express.Express {
|
|
@@ -16,7 +15,7 @@ export function app(): express.Express {
|
|
|
16
15
|
|
|
17
16
|
// Our Universal express-engine (found @ https://github.com/angular/universal/tree/main/modules/express-engine)
|
|
18
17
|
server.engine('html', ngExpressEngine({
|
|
19
|
-
bootstrap
|
|
18
|
+
bootstrap<% if (!standalone) { %>: <%= rootModuleClassName %><% } %>,
|
|
20
19
|
}));
|
|
21
20
|
|
|
22
21
|
server.set('view engine', 'html');
|
|
@@ -57,4 +56,4 @@ if (moduleFilename === __filename || moduleFilename.includes('iisnode')) {
|
|
|
57
56
|
run();
|
|
58
57
|
}
|
|
59
58
|
|
|
60
|
-
export
|
|
59
|
+
export <% if (standalone) { %>default bootstrap<% } else { %>* from './src/<%= main.slice(0, -3) %>'<% } %>;
|
package/src/generators/setup-ssr/files/{standalone → server/server-builder/v17+}/__serverFileName__
RENAMED
|
@@ -1,23 +1,21 @@
|
|
|
1
|
-
import 'zone.js/
|
|
1
|
+
import 'zone.js/node';
|
|
2
2
|
|
|
3
|
-
import {APP_BASE_HREF} from '@angular/common';
|
|
4
|
-
import {
|
|
3
|
+
import { APP_BASE_HREF } from '@angular/common';
|
|
4
|
+
import { CommonEngine } from '@angular/ssr';
|
|
5
5
|
import * as express from 'express';
|
|
6
|
-
import {existsSync} from 'fs';
|
|
7
|
-
import {join} from 'path';
|
|
8
|
-
|
|
9
|
-
import bootstrap 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 './src/<%= main.slice(0, -3) %>';
|
|
10
9
|
|
|
11
10
|
// The Express app is exported so that it can be used by serverless Functions.
|
|
12
11
|
export function app(): express.Express {
|
|
13
12
|
const server = express();
|
|
14
13
|
const distFolder = join(process.cwd(), '<%= browserBundleOutputPath %>');
|
|
15
|
-
const indexHtml = existsSync(join(distFolder, 'index.original.html'))
|
|
14
|
+
const indexHtml = existsSync(join(distFolder, 'index.original.html'))
|
|
15
|
+
? join(distFolder, 'index.original.html')
|
|
16
|
+
: join(distFolder, 'index.html');
|
|
16
17
|
|
|
17
|
-
|
|
18
|
-
server.engine('html', ngExpressEngine({
|
|
19
|
-
bootstrap
|
|
20
|
-
}));
|
|
18
|
+
const commonEngine = new CommonEngine();
|
|
21
19
|
|
|
22
20
|
server.set('view engine', 'html');
|
|
23
21
|
server.set('views', distFolder);
|
|
@@ -29,9 +27,20 @@ export function app(): express.Express {
|
|
|
29
27
|
maxAge: '1y'
|
|
30
28
|
}));
|
|
31
29
|
|
|
32
|
-
// All regular routes use the
|
|
33
|
-
server.get('*', (req, res) => {
|
|
34
|
-
|
|
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));
|
|
35
44
|
});
|
|
36
45
|
|
|
37
46
|
return server;
|
|
@@ -57,4 +66,4 @@ if (moduleFilename === __filename || moduleFilename.includes('iisnode')) {
|
|
|
57
66
|
run();
|
|
58
67
|
}
|
|
59
68
|
|
|
60
|
-
export default bootstrap
|
|
69
|
+
export default <% if (standalone) { %>bootstrap<% } else { %><%= rootModuleClassName %><% } %>;
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.addDependencies = void 0;
|
|
4
|
+
const devkit_1 = require("@nx/devkit");
|
|
5
|
+
const semver_1 = require("semver");
|
|
6
|
+
const version_utils_1 = require("../../utils/version-utils");
|
|
7
|
+
function addDependencies(tree, isUsingApplicationBuilder) {
|
|
8
|
+
const pkgVersions = (0, version_utils_1.versions)(tree);
|
|
9
|
+
const { major: angularMajorVersion, version: angularVersion } = (0, version_utils_1.getInstalledAngularVersionInfo)(tree);
|
|
10
|
+
const dependencies = {
|
|
11
|
+
'@angular/platform-server': (0, version_utils_1.getInstalledPackageVersionInfo)(tree, '@angular/platform-server')
|
|
12
|
+
?.version ?? pkgVersions.angularVersion,
|
|
13
|
+
express: pkgVersions.expressVersion,
|
|
14
|
+
};
|
|
15
|
+
const devDependencies = {
|
|
16
|
+
'@types/express': pkgVersions.typesExpressVersion,
|
|
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 ?? pkgVersions.ngUniversalVersion;
|
|
30
|
+
devDependencies['@nguniversal/builders'] =
|
|
31
|
+
(0, version_utils_1.getInstalledPackageVersionInfo)(tree, '@nguniversal/builders')?.version ??
|
|
32
|
+
pkgVersions.ngUniversalVersion;
|
|
33
|
+
}
|
|
34
|
+
(0, devkit_1.addDependenciesToPackageJson)(tree, dependencies, devDependencies);
|
|
35
|
+
}
|
|
36
|
+
exports.addDependencies = addDependencies;
|
|
@@ -2,23 +2,29 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.addHydration = void 0;
|
|
4
4
|
const devkit_1 = require("@nx/devkit");
|
|
5
|
-
const ast_utils_1 = require("../../../utils/nx-devkit/ast-utils");
|
|
6
|
-
const ensure_typescript_1 = require("@nx/js/src/utils/typescript/ensure-typescript");
|
|
7
5
|
const js_1 = require("@nx/js");
|
|
6
|
+
const ensure_typescript_1 = require("@nx/js/src/utils/typescript/ensure-typescript");
|
|
7
|
+
const ast_utils_1 = require("../../../utils/nx-devkit/ast-utils");
|
|
8
8
|
let tsModule;
|
|
9
|
+
let tsquery;
|
|
9
10
|
function addHydration(tree, options) {
|
|
10
11
|
const projectConfig = (0, devkit_1.readProjectConfiguration)(tree, options.project);
|
|
11
12
|
if (!tsModule) {
|
|
12
13
|
tsModule = (0, ensure_typescript_1.ensureTypescript)();
|
|
14
|
+
tsquery = require('@phenomnomnominal/tsquery').tsquery;
|
|
13
15
|
}
|
|
14
|
-
const addImport = (source, symbolName, packageName, filePath, isDefault = false) => {
|
|
15
|
-
return (0, js_1.insertImport)(tree, source, filePath, symbolName, packageName, isDefault);
|
|
16
|
-
};
|
|
17
16
|
const pathToClientConfigFile = options.standalone
|
|
18
17
|
? (0, devkit_1.joinPathFragments)(projectConfig.sourceRoot, 'app/app.config.ts')
|
|
19
18
|
: (0, devkit_1.joinPathFragments)(projectConfig.sourceRoot, 'app/app.module.ts');
|
|
20
19
|
const sourceText = tree.read(pathToClientConfigFile, 'utf-8');
|
|
21
20
|
let sourceFile = tsModule.createSourceFile(pathToClientConfigFile, sourceText, tsModule.ScriptTarget.Latest, true);
|
|
21
|
+
const provideClientHydrationCallExpression = tsquery(sourceFile, 'ObjectLiteralExpression PropertyAssignment:has(Identifier[name=providers]) ArrayLiteralExpression CallExpression:has(Identifier[name=provideClientHydration])')[0];
|
|
22
|
+
if (provideClientHydrationCallExpression) {
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
const addImport = (source, symbolName, packageName, filePath, isDefault = false) => {
|
|
26
|
+
return (0, js_1.insertImport)(tree, source, filePath, symbolName, packageName, isDefault);
|
|
27
|
+
};
|
|
22
28
|
sourceFile = addImport(sourceFile, 'provideClientHydration', '@angular/platform-browser', pathToClientConfigFile);
|
|
23
29
|
if (options.standalone) {
|
|
24
30
|
(0, ast_utils_1.addProviderToAppConfig)(tree, pathToClientConfigFile, 'provideClientHydration()');
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.addServerFile = void 0;
|
|
4
|
+
const devkit_1 = require("@nx/devkit");
|
|
5
|
+
const version_utils_1 = require("../../utils/version-utils");
|
|
6
|
+
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
|
|
11
|
+
? getApplicationBuilderBrowserOutputPath(outputPath)
|
|
12
|
+
: outputPath;
|
|
13
|
+
const pathToFiles = (0, devkit_1.joinPathFragments)(__dirname, '..', 'files');
|
|
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: '' });
|
|
20
|
+
}
|
|
21
|
+
exports.addServerFile = addServerFile;
|
|
22
|
+
function getApplicationBuilderBrowserOutputPath(outputPath) {
|
|
23
|
+
if (outputPath) {
|
|
24
|
+
if (typeof outputPath === 'string') {
|
|
25
|
+
// when `outputPath` is a string, it's the base path, so we return the default browser path
|
|
26
|
+
return constants_1.DEFAULT_BROWSER_DIR;
|
|
27
|
+
}
|
|
28
|
+
return outputPath.browser ?? constants_1.DEFAULT_BROWSER_DIR;
|
|
29
|
+
}
|
|
30
|
+
return constants_1.DEFAULT_BROWSER_DIR;
|
|
31
|
+
}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DEFAULT_SERVER_DIR = exports.DEFAULT_MEDIA_DIR = exports.DEFAULT_BROWSER_DIR = void 0;
|
|
4
|
+
exports.DEFAULT_BROWSER_DIR = 'browser';
|
|
5
|
+
exports.DEFAULT_MEDIA_DIR = 'media';
|
|
6
|
+
exports.DEFAULT_SERVER_DIR = 'server';
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import type { Tree } from '@nx/devkit';
|
|
2
2
|
import type { Schema } from '../schema';
|
|
3
|
-
export declare function generateSSRFiles(tree: Tree, schema: Schema): void;
|
|
3
|
+
export declare function generateSSRFiles(tree: Tree, schema: Schema, isUsingApplicationBuilder: boolean): void;
|
|
@@ -4,27 +4,22 @@ exports.generateSSRFiles = void 0;
|
|
|
4
4
|
const devkit_1 = require("@nx/devkit");
|
|
5
5
|
const semver_1 = require("semver");
|
|
6
6
|
const version_utils_1 = require("../../utils/version-utils");
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
7
|
+
function generateSSRFiles(tree, schema, isUsingApplicationBuilder) {
|
|
8
|
+
const { root: projectRoot, targets } = (0, devkit_1.readProjectConfiguration)(tree, schema.project);
|
|
9
|
+
if (targets.server ||
|
|
10
|
+
(isUsingApplicationBuilder && targets.build.options?.server !== undefined)) {
|
|
11
|
+
// server has already been added
|
|
12
|
+
return;
|
|
13
|
+
}
|
|
12
14
|
const pathToFiles = (0, devkit_1.joinPathFragments)(__dirname, '..', 'files');
|
|
13
|
-
|
|
14
|
-
...schema,
|
|
15
|
-
tpl: '',
|
|
16
|
-
});
|
|
15
|
+
const { version: angularVersion } = (0, version_utils_1.getInstalledAngularVersionInfo)(tree);
|
|
17
16
|
if (schema.standalone) {
|
|
18
|
-
(0, devkit_1.generateFiles)(tree, (0, devkit_1.joinPathFragments)(pathToFiles, 'standalone'), projectRoot, { ...schema,
|
|
17
|
+
(0, devkit_1.generateFiles)(tree, (0, devkit_1.joinPathFragments)(pathToFiles, 'standalone'), projectRoot, { ...schema, tpl: '' });
|
|
19
18
|
}
|
|
20
19
|
else {
|
|
21
|
-
(0, devkit_1.generateFiles)(tree, (0, devkit_1.joinPathFragments)(pathToFiles, 'ngmodule', 'base'), projectRoot, { ...schema,
|
|
22
|
-
const { major: angularMajorVersion, version: angularVersion } = (0, version_utils_1.getInstalledAngularVersionInfo)(tree);
|
|
23
|
-
if (angularMajorVersion < 15) {
|
|
24
|
-
(0, devkit_1.generateFiles)(tree, (0, devkit_1.joinPathFragments)(pathToFiles, 'ngmodule', 'v14'), projectRoot, { ...schema, browserBundleOutputPath, tpl: '' });
|
|
25
|
-
}
|
|
20
|
+
(0, devkit_1.generateFiles)(tree, (0, devkit_1.joinPathFragments)(pathToFiles, 'ngmodule', 'base'), projectRoot, { ...schema, tpl: '' });
|
|
26
21
|
if ((0, semver_1.lt)(angularVersion, '15.2.0')) {
|
|
27
|
-
(0, devkit_1.generateFiles)(tree, (0, devkit_1.joinPathFragments)(pathToFiles, 'ngmodule', 'pre-v15-2'), projectRoot, { ...schema,
|
|
22
|
+
(0, devkit_1.generateFiles)(tree, (0, devkit_1.joinPathFragments)(pathToFiles, 'ngmodule', 'pre-v15-2'), projectRoot, { ...schema, tpl: '' });
|
|
28
23
|
}
|
|
29
24
|
}
|
|
30
25
|
}
|
|
@@ -0,0 +1,4 @@
|
|
|
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;
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.generateTsConfigServerJsonForBrowserBuilder = exports.setServerTsConfigOptionsForApplicationBuilder = void 0;
|
|
4
|
+
const devkit_1 = require("@nx/devkit");
|
|
5
|
+
const path_1 = require("path");
|
|
6
|
+
function setServerTsConfigOptionsForApplicationBuilder(tree, options) {
|
|
7
|
+
const { targets } = (0, devkit_1.readProjectConfiguration)(tree, options.project);
|
|
8
|
+
const tsConfigPath = targets.build.options.tsConfig;
|
|
9
|
+
(0, devkit_1.updateJson)(tree, tsConfigPath, (json) => {
|
|
10
|
+
const files = new Set(json.files ?? []);
|
|
11
|
+
files.add((0, devkit_1.joinPathFragments)('src', options.main));
|
|
12
|
+
files.add((0, devkit_1.joinPathFragments)(options.serverFileName));
|
|
13
|
+
json.files = Array.from(files);
|
|
14
|
+
json.compilerOptions ??= {};
|
|
15
|
+
const types = new Set(json.compilerOptions.types ?? []);
|
|
16
|
+
types.add('node');
|
|
17
|
+
json.compilerOptions.types = Array.from(types);
|
|
18
|
+
return json;
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
exports.setServerTsConfigOptionsForApplicationBuilder = setServerTsConfigOptionsForApplicationBuilder;
|
|
22
|
+
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, {
|
|
25
|
+
...options,
|
|
26
|
+
tpl: '',
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
exports.generateTsConfigServerJsonForBrowserBuilder = generateTsConfigServerJsonForBrowserBuilder;
|
|
@@ -1,6 +1,10 @@
|
|
|
1
|
+
export * from './add-dependencies';
|
|
2
|
+
export * from './add-server-file';
|
|
1
3
|
export * from './generate-files';
|
|
4
|
+
export * from './generate-server-ts-config';
|
|
2
5
|
export * from './normalize-options';
|
|
3
6
|
export * from './update-app-module';
|
|
4
7
|
export * from './update-project-config';
|
|
5
8
|
export * from './validate-options';
|
|
6
9
|
export * from './add-hydration';
|
|
10
|
+
export * from './set-router-initial-navigation';
|
|
@@ -1,9 +1,13 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
const tslib_1 = require("tslib");
|
|
4
|
+
tslib_1.__exportStar(require("./add-dependencies"), exports);
|
|
5
|
+
tslib_1.__exportStar(require("./add-server-file"), exports);
|
|
4
6
|
tslib_1.__exportStar(require("./generate-files"), exports);
|
|
7
|
+
tslib_1.__exportStar(require("./generate-server-ts-config"), exports);
|
|
5
8
|
tslib_1.__exportStar(require("./normalize-options"), exports);
|
|
6
9
|
tslib_1.__exportStar(require("./update-app-module"), exports);
|
|
7
10
|
tslib_1.__exportStar(require("./update-project-config"), exports);
|
|
8
11
|
tslib_1.__exportStar(require("./validate-options"), exports);
|
|
9
12
|
tslib_1.__exportStar(require("./add-hydration"), exports);
|
|
13
|
+
tslib_1.__exportStar(require("./set-router-initial-navigation"), exports);
|
|
@@ -2,8 +2,14 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.normalizeOptions = void 0;
|
|
4
4
|
const ast_utils_1 = require("../../../utils/nx-devkit/ast-utils");
|
|
5
|
+
const version_utils_1 = require("../../utils/version-utils");
|
|
5
6
|
function normalizeOptions(tree, options) {
|
|
6
7
|
const isStandaloneApp = (0, ast_utils_1.isNgStandaloneApp)(tree, options.project);
|
|
8
|
+
let hydration = options.hydration;
|
|
9
|
+
if (hydration === undefined) {
|
|
10
|
+
const { major: angularMajorVersion } = (0, version_utils_1.getInstalledAngularVersionInfo)(tree);
|
|
11
|
+
hydration = angularMajorVersion >= 17;
|
|
12
|
+
}
|
|
7
13
|
return {
|
|
8
14
|
project: options.project,
|
|
9
15
|
appId: options.appId ?? 'serverApp',
|
|
@@ -14,7 +20,7 @@ function normalizeOptions(tree, options) {
|
|
|
14
20
|
rootModuleClassName: options.rootModuleClassName ?? 'AppServerModule',
|
|
15
21
|
skipFormat: options.skipFormat ?? false,
|
|
16
22
|
standalone: options.standalone ?? isStandaloneApp,
|
|
17
|
-
hydration
|
|
23
|
+
hydration,
|
|
18
24
|
};
|
|
19
25
|
}
|
|
20
26
|
exports.normalizeOptions = normalizeOptions;
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.setRouterInitialNavigation = void 0;
|
|
4
|
+
const devkit_1 = require("@nx/devkit");
|
|
5
|
+
const js_1 = require("@nx/js");
|
|
6
|
+
const tsquery_1 = require("@phenomnomnominal/tsquery");
|
|
7
|
+
const typescript_1 = require("typescript");
|
|
8
|
+
function setRouterInitialNavigation(tree, options) {
|
|
9
|
+
const printer = (0, typescript_1.createPrinter)();
|
|
10
|
+
const project = (0, devkit_1.readProjectConfiguration)(tree, options.project);
|
|
11
|
+
(0, devkit_1.visitNotIgnoredFiles)(tree, project.root, (filePath) => {
|
|
12
|
+
// we are only interested in .ts files
|
|
13
|
+
if (!filePath.endsWith('.ts')) {
|
|
14
|
+
return;
|
|
15
|
+
}
|
|
16
|
+
if (options.standalone) {
|
|
17
|
+
processFileWithStandaloneSetup(tree, filePath, printer);
|
|
18
|
+
}
|
|
19
|
+
else {
|
|
20
|
+
processFileWithNgModuleSetup(tree, filePath, printer);
|
|
21
|
+
}
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
exports.setRouterInitialNavigation = setRouterInitialNavigation;
|
|
25
|
+
function processFileWithStandaloneSetup(tree, filePath, printer) {
|
|
26
|
+
let content = tree.read(filePath, 'utf-8');
|
|
27
|
+
let sourceFile = tsquery_1.tsquery.ast(content);
|
|
28
|
+
const provideRouterCallExpression = getProvideRouterCallExpression(sourceFile);
|
|
29
|
+
if (!provideRouterCallExpression) {
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
if (provideRouterCallExpression.arguments.some((arg) => (0, typescript_1.isCallExpression)(arg) &&
|
|
33
|
+
(0, typescript_1.isIdentifier)(arg.expression) &&
|
|
34
|
+
arg.expression.text === 'withEnabledBlockingInitialNavigation')) {
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
37
|
+
const updatedProvideRouterCallExpression = printer.printNode(typescript_1.EmitHint.Unspecified, updateProvideRouterCallExpression(provideRouterCallExpression), sourceFile);
|
|
38
|
+
content = `${content.slice(0, provideRouterCallExpression.getStart())}${updatedProvideRouterCallExpression}${content.slice(provideRouterCallExpression.getEnd())}`;
|
|
39
|
+
tree.write(filePath, content);
|
|
40
|
+
sourceFile = tsquery_1.tsquery.ast(content);
|
|
41
|
+
sourceFile = (0, js_1.insertImport)(tree, sourceFile, filePath, 'withEnabledBlockingInitialNavigation', '@angular/router');
|
|
42
|
+
const withDisabledInitialNavigationImportNode = (0, tsquery_1.tsquery)(sourceFile, 'ImportDeclaration ImportSpecifier:has(Identifier[name=withDisabledInitialNavigation])')[0];
|
|
43
|
+
if (!withDisabledInitialNavigationImportNode) {
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
const hasTrailingComma = withDisabledInitialNavigationImportNode.parent.elements.hasTrailingComma;
|
|
47
|
+
content = tree.read(filePath, 'utf-8');
|
|
48
|
+
tree.write(filePath, `${content.slice(0, withDisabledInitialNavigationImportNode.getStart())}${content.slice(withDisabledInitialNavigationImportNode.getEnd() +
|
|
49
|
+
(hasTrailingComma ? 1 : 0))}`);
|
|
50
|
+
}
|
|
51
|
+
function updateProvideRouterCallExpression(node) {
|
|
52
|
+
const filteredArgs = node.arguments.filter((arg) => !((0, typescript_1.isCallExpression)(arg) &&
|
|
53
|
+
(0, typescript_1.isIdentifier)(arg.expression) &&
|
|
54
|
+
arg.expression.text === 'withDisabledInitialNavigation'));
|
|
55
|
+
const initialNavigationFeatureArg = typescript_1.factory.createCallExpression(typescript_1.factory.createIdentifier('withEnabledBlockingInitialNavigation'), [], []);
|
|
56
|
+
return typescript_1.factory.updateCallExpression(node, node.expression, node.typeArguments, [...filteredArgs, initialNavigationFeatureArg]);
|
|
57
|
+
}
|
|
58
|
+
function processFileWithNgModuleSetup(tree, filePath, printer) {
|
|
59
|
+
const content = tree.read(filePath, 'utf-8');
|
|
60
|
+
const sourceFile = tsquery_1.tsquery.ast(content);
|
|
61
|
+
const routerModuleForRootCallExpression = getRouterModuleForRootCallExpression(sourceFile);
|
|
62
|
+
if (!routerModuleForRootCallExpression) {
|
|
63
|
+
return;
|
|
64
|
+
}
|
|
65
|
+
const updatedRouterModuleForRootCallExpression = printer.printNode(typescript_1.EmitHint.Unspecified, updateRouterModuleForRootCallExpression(routerModuleForRootCallExpression), sourceFile);
|
|
66
|
+
tree.write(filePath, `${content.slice(0, routerModuleForRootCallExpression.getStart())}${updatedRouterModuleForRootCallExpression}${content.slice(routerModuleForRootCallExpression.getEnd())}`);
|
|
67
|
+
}
|
|
68
|
+
function updateRouterModuleForRootCallExpression(node) {
|
|
69
|
+
const existingOptions = node.arguments[1];
|
|
70
|
+
const existingProperties = existingOptions?.properties
|
|
71
|
+
? typescript_1.factory.createNodeArray(existingOptions.properties.filter((exp) => !((0, typescript_1.isPropertyAssignment)(exp) &&
|
|
72
|
+
(0, typescript_1.isIdentifier)(exp.name) &&
|
|
73
|
+
exp.name.text === 'initialNavigation')))
|
|
74
|
+
: typescript_1.factory.createNodeArray();
|
|
75
|
+
const enabledLiteral = typescript_1.factory.createStringLiteral('enabledBlocking', true);
|
|
76
|
+
const initialNavigationProperty = typescript_1.factory.createPropertyAssignment('initialNavigation', enabledLiteral);
|
|
77
|
+
const routerOptions = existingOptions
|
|
78
|
+
? typescript_1.factory.updateObjectLiteralExpression(existingOptions, typescript_1.factory.createNodeArray([
|
|
79
|
+
...existingProperties,
|
|
80
|
+
initialNavigationProperty,
|
|
81
|
+
]))
|
|
82
|
+
: typescript_1.factory.createObjectLiteralExpression(typescript_1.factory.createNodeArray([initialNavigationProperty]));
|
|
83
|
+
const args = [node.arguments[0], routerOptions];
|
|
84
|
+
return typescript_1.factory.createCallExpression(node.expression, node.typeArguments, args);
|
|
85
|
+
}
|
|
86
|
+
function getProvideRouterCallExpression(sourceFile) {
|
|
87
|
+
const routerModuleForRootCalls = (0, tsquery_1.tsquery)(sourceFile, 'PropertyAssignment:has(Identifier[name=providers]) > ArrayLiteralExpression CallExpression:has(Identifier[name=provideRouter])', { visitAllChildren: true });
|
|
88
|
+
return routerModuleForRootCalls.length ? routerModuleForRootCalls[0] : null;
|
|
89
|
+
}
|
|
90
|
+
function getRouterModuleForRootCallExpression(sourceFile) {
|
|
91
|
+
const routerModuleForRootCalls = (0, tsquery_1.tsquery)(sourceFile, 'Decorator > CallExpression:has(Identifier[name=NgModule]) PropertyAssignment:has(Identifier[name=imports]) > ArrayLiteralExpression CallExpression:has(Identifier[name=forRoot])', { visitAllChildren: true });
|
|
92
|
+
return routerModuleForRootCalls.length ? routerModuleForRootCalls[0] : null;
|
|
93
|
+
}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
1
|
import type { Tree } from '@nx/devkit';
|
|
2
2
|
import type { Schema } from '../schema';
|
|
3
|
-
export declare function
|
|
3
|
+
export declare function updateProjectConfigForApplicationBuilder(tree: Tree, options: Schema): void;
|
|
4
|
+
export declare function updateProjectConfigForBrowserBuilder(tree: Tree, schema: Schema): void;
|