@nx/angular 21.1.2 → 21.2.0-beta.2
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 +4 -4
- package/fesm2022/nx-angular-mf.mjs +10 -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 +36 -7
- 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__ +7 -8
- 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 +93 -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.d.ts +1 -1
- package/src/generators/convert-to-rspack/convert-to-rspack.js +173 -28
- 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 +98 -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
@@ -0,0 +1,43 @@
|
|
1
|
+
import { fakeAsync, TestBed, tick } from '@angular/core/testing';
|
2
|
+
import { <%= appSymbolName %> } from './<%= appFileName %>';
|
3
|
+
import { <%= nxWelcomeSymbolName %> } from './<%= nxWelcomeFileName %>';
|
4
|
+
import { Router, RouterModule } from '@angular/router';
|
5
|
+
|
6
|
+
describe('<%= appSymbolName %>', () => {
|
7
|
+
beforeEach(async () => {
|
8
|
+
await TestBed.configureTestingModule({
|
9
|
+
imports: [
|
10
|
+
RouterModule.forRoot([
|
11
|
+
{ path: '', component: <%= nxWelcomeSymbolName %> },
|
12
|
+
]),<% if (standalone) { %>
|
13
|
+
<%= appSymbolName %>,
|
14
|
+
<%= nxWelcomeSymbolName %>,<% } %>
|
15
|
+
],<% if (!standalone) { %>
|
16
|
+
declarations: [<%= appSymbolName %>, <%= nxWelcomeSymbolName %>],<% } %>
|
17
|
+
}).compileComponents();
|
18
|
+
});
|
19
|
+
|
20
|
+
it('should create the app', () => {
|
21
|
+
const fixture = TestBed.createComponent(<%= appSymbolName %>);
|
22
|
+
const app = fixture.componentInstance;
|
23
|
+
expect(app).toBeTruthy();
|
24
|
+
});
|
25
|
+
|
26
|
+
it(`should have as title '<%= appName %>'`, () => {
|
27
|
+
const fixture = TestBed.createComponent(<%= appSymbolName %>);
|
28
|
+
const app = fixture.componentInstance;
|
29
|
+
expect(app.title).toEqual('<%= appName %>');
|
30
|
+
});
|
31
|
+
|
32
|
+
it('should render title', fakeAsync(() => {
|
33
|
+
const fixture = TestBed.createComponent(<%= appSymbolName %>);
|
34
|
+
const router = TestBed.inject(Router);
|
35
|
+
fixture.ngZone?.run(() => router.navigate(['']));
|
36
|
+
tick();
|
37
|
+
fixture.detectChanges();
|
38
|
+
const compiled = fixture.nativeElement as HTMLElement;
|
39
|
+
expect(compiled.querySelector('h1')?.textContent).toContain(
|
40
|
+
'Welcome <%= appName %>'
|
41
|
+
);
|
42
|
+
}));
|
43
|
+
});
|
package/src/generators/setup-mf/files/standalone-entry-component-files/entry.routes.ts__tmpl__
CHANGED
@@ -1,4 +1,4 @@
|
|
1
1
|
import { Route } from '@angular/router';
|
2
|
-
import {
|
2
|
+
import { RemoteEntry<%= componentType %> } from './entry<%= componentFileSuffix %>';
|
3
3
|
|
4
|
-
export const remoteRoutes: Route[] = [{ path: '', component:
|
4
|
+
export const remoteRoutes: Route[] = [{ path: '', component: RemoteEntry<%= componentType %> }];
|
@@ -1,13 +1,13 @@
|
|
1
1
|
import { Component } from '@angular/core';
|
2
2
|
import { CommonModule } from '@angular/common';
|
3
|
-
import {
|
3
|
+
import { <%= nxWelcomeSymbolName %> } from './<%= nxWelcomeFileName %>';
|
4
4
|
|
5
5
|
@Component({<% if (setStandaloneTrue) { %>
|
6
6
|
standalone: true,<% } %>
|
7
|
-
imports: [CommonModule,
|
7
|
+
imports: [CommonModule, <%= nxWelcomeSymbolName %>],<% if (prefix) { %>
|
8
8
|
selector: '<%= prefix %>-<%= appName %>-entry',
|
9
9
|
template: `<<%= prefix %>-nx-welcome></<%= prefix %>-nx-welcome>`<% } else { %>
|
10
10
|
selector: '<%= appName %>-entry',
|
11
11
|
template: `<nx-welcome></nx-welcome>`<% } %>
|
12
12
|
})
|
13
|
-
export class
|
13
|
+
export class RemoteEntry<%= componentType %> {}
|
@@ -17,7 +17,7 @@ const config: ModuleFederationConfig = {
|
|
17
17
|
remotes: [<% if (federationType === 'static') { remotes.forEach(function(remote) { %>'<%= remote.remoteName %>',<% }); } %>]<% } %><% if(type === 'remote') { %>
|
18
18
|
exposes: {<% if(standalone) { %>
|
19
19
|
'./Routes': '<%= projectRoot %>/src/app/remote-entry/entry.routes.ts',<% } else { %>
|
20
|
-
'./Module': '<%= projectRoot %>/src/app/remote-entry
|
20
|
+
'./Module': '<%= projectRoot %>/src/app/remote-entry/<%= entryModuleFileName %>.ts',<% } %>
|
21
21
|
},<% } %>
|
22
22
|
};
|
23
23
|
|
@@ -5,7 +5,7 @@
|
|
5
5
|
},
|
6
6
|
"include": [
|
7
7
|
"src/main.ts",
|
8
|
-
<% if(type === "remote") { %> "src/remote-entry/<% if(standalone) { %>entry.routes.ts"
|
8
|
+
<% if(type === "remote") { %> "src/remote-entry/<% if(standalone) { %>entry.routes.ts",<% } else { %><%= entryModuleFileName %>.ts",<% } } %>
|
9
9
|
"webpack.config.ts",
|
10
10
|
"webpack.prod.config.ts"
|
11
11
|
]
|
@@ -18,6 +18,6 @@ module.exports = {
|
|
18
18
|
remotes: [<% if (federationType === 'static') { remotes.forEach(function(remote) { %>'<%= remote.remoteName %>',<% }); } %>]<% } %><% if(type === 'remote') { %>
|
19
19
|
exposes: {<% if(standalone) { %>
|
20
20
|
'./Routes': '<%= projectRoot %>/src/app/remote-entry/entry.routes.ts',<% } else { %>
|
21
|
-
'./Module': '<%= projectRoot %>/src/app/remote-entry
|
21
|
+
'./Module': '<%= projectRoot %>/src/app/remote-entry/<%= entryModuleFileName %>.ts',<% } %>
|
22
22
|
},<% } %>
|
23
23
|
};
|
@@ -1,3 +1,3 @@
|
|
1
1
|
import type { Tree } from '@nx/devkit';
|
2
|
-
import type {
|
3
|
-
export declare function addRemoteEntry(tree: Tree,
|
2
|
+
import type { NormalizedOptions } from '../schema';
|
3
|
+
export declare function addRemoteEntry(tree: Tree, options: NormalizedOptions, appRoot: string): void;
|
@@ -4,8 +4,9 @@ exports.addRemoteEntry = addRemoteEntry;
|
|
4
4
|
const devkit_1 = require("@nx/devkit");
|
5
5
|
const route_utils_1 = require("../../../utils/nx-devkit/route-utils");
|
6
6
|
const version_utils_1 = require("../../utils/version-utils");
|
7
|
-
function addRemoteEntry(tree,
|
7
|
+
function addRemoteEntry(tree, options, appRoot) {
|
8
8
|
const { major: angularMajorVersion } = (0, version_utils_1.getInstalledAngularVersionInfo)(tree);
|
9
|
+
const { appName, routing, prefix, standalone, componentType, componentFileSuffix, nxWelcomeComponentInfo, entryModuleFileName, } = options;
|
9
10
|
(0, devkit_1.generateFiles)(tree, standalone
|
10
11
|
? (0, devkit_1.joinPathFragments)(__dirname, '../files/standalone-entry-component-files')
|
11
12
|
: (0, devkit_1.joinPathFragments)(__dirname, '../files/entry-module-files'), `${appRoot}/src/app/remote-entry`, {
|
@@ -13,14 +14,19 @@ function addRemoteEntry(tree, { appName, routing, prefix, standalone }, appRoot)
|
|
13
14
|
appName,
|
14
15
|
routing,
|
15
16
|
prefix,
|
16
|
-
// Angular v19 or higher defaults to true, while
|
17
|
+
// Angular v19 or higher defaults to true, while lower versions default to false
|
17
18
|
setStandaloneFalse: angularMajorVersion >= 19,
|
18
19
|
setStandaloneTrue: angularMajorVersion < 19,
|
20
|
+
componentType,
|
21
|
+
componentFileSuffix,
|
22
|
+
entryModuleFileName,
|
23
|
+
nxWelcomeFileName: nxWelcomeComponentInfo.extensionlessFileName,
|
24
|
+
nxWelcomeSymbolName: nxWelcomeComponentInfo.symbolName,
|
19
25
|
});
|
20
26
|
if (standalone && routing) {
|
21
27
|
(0, route_utils_1.addRoute)(tree, (0, devkit_1.joinPathFragments)(appRoot, 'src/app/app.routes.ts'), `{path: '', loadChildren: () => import('./remote-entry/entry.routes').then(m => m.remoteRoutes)}`);
|
22
28
|
}
|
23
29
|
else if (routing) {
|
24
|
-
(0, route_utils_1.addRoute)(tree, (0, devkit_1.joinPathFragments)(appRoot, 'src/app/app.routes.ts'), `{ path: '', loadChildren: () => import('./remote-entry
|
30
|
+
(0, route_utils_1.addRoute)(tree, (0, devkit_1.joinPathFragments)(appRoot, 'src/app/app.routes.ts'), `{ path: '', loadChildren: () => import('./remote-entry/${entryModuleFileName}').then(m => m.RemoteEntryModule) }`);
|
25
31
|
}
|
26
32
|
}
|
@@ -105,7 +105,17 @@ function addLazyLoadedRouteToHostAppModule(tree, options, hostFederationType) {
|
|
105
105
|
path: '${options.appName}',
|
106
106
|
loadChildren: () => ${routeToAdd}.then(m => m!.${exportedRemote})
|
107
107
|
}`);
|
108
|
-
|
108
|
+
let pathToAppComponentTemplate = (0, devkit_1.joinPathFragments)(hostAppConfig.sourceRoot, 'app/app.component.html');
|
109
|
+
const candidatePaths = [
|
110
|
+
pathToAppComponentTemplate,
|
111
|
+
(0, devkit_1.joinPathFragments)(hostAppConfig.sourceRoot, 'app/app.html'),
|
112
|
+
];
|
113
|
+
for (const path of candidatePaths) {
|
114
|
+
if (tree.exists(path)) {
|
115
|
+
pathToAppComponentTemplate = path;
|
116
|
+
break;
|
117
|
+
}
|
118
|
+
}
|
109
119
|
const appComponent = tree.read(pathToAppComponentTemplate, 'utf-8');
|
110
120
|
if (appComponent.includes(`<ul class="remote-menu">`) &&
|
111
121
|
appComponent.includes('</ul>')) {
|
@@ -1,3 +1,3 @@
|
|
1
1
|
import { type Tree } from '@nx/devkit';
|
2
|
-
import type {
|
3
|
-
export declare function fixBootstrap(tree: Tree, appRoot: string, options:
|
2
|
+
import type { NormalizedOptions } from '../schema';
|
3
|
+
export declare function fixBootstrap(tree: Tree, appRoot: string, options: NormalizedOptions): void;
|
@@ -6,7 +6,7 @@ function fixBootstrap(tree, appRoot, options) {
|
|
6
6
|
const mainFilePath = (0, devkit_1.joinPathFragments)(appRoot, 'src/main.ts');
|
7
7
|
const bootstrapCode = tree.read(mainFilePath, 'utf-8');
|
8
8
|
if (options.standalone && options.mfType === 'remote') {
|
9
|
-
tree.write(`${appRoot}/src/bootstrap.ts`, standaloneBootstrapCode());
|
9
|
+
tree.write(`${appRoot}/src/bootstrap.ts`, standaloneBootstrapCode(options.componentType, options.componentFileSuffix));
|
10
10
|
}
|
11
11
|
else {
|
12
12
|
tree.write((0, devkit_1.joinPathFragments)(appRoot, 'src/bootstrap.ts'), bootstrapCode);
|
@@ -30,11 +30,11 @@ fetch('${manifestPath}')
|
|
30
30
|
tree.write(mainFilePath, fetchMFManifestCode);
|
31
31
|
}
|
32
32
|
}
|
33
|
-
const standaloneBootstrapCode = () => `import { bootstrapApplication } from '@angular/platform-browser';
|
33
|
+
const standaloneBootstrapCode = (componentType, componentFileSuffix) => `import { bootstrapApplication } from '@angular/platform-browser';
|
34
34
|
import { appConfig } from './app/app.config';
|
35
|
-
import {
|
35
|
+
import { RemoteEntry${componentType} } from './app/remote-entry/entry${componentFileSuffix}';
|
36
36
|
|
37
|
-
bootstrapApplication(
|
37
|
+
bootstrapApplication(RemoteEntry${componentType}, appConfig).catch((err) =>
|
38
38
|
console.error(err)
|
39
39
|
);
|
40
40
|
`;
|
@@ -1,6 +1,6 @@
|
|
1
1
|
import type { Tree } from '@nx/devkit';
|
2
|
-
import type {
|
3
|
-
export declare function generateWebpackConfig(tree: Tree, options:
|
2
|
+
import type { NormalizedOptions } from '../schema';
|
3
|
+
export declare function generateWebpackConfig(tree: Tree, options: NormalizedOptions, appRoot: string, remotesWithPorts: {
|
4
4
|
remoteName: string;
|
5
5
|
port: number;
|
6
6
|
}[]): void;
|
@@ -23,6 +23,7 @@ function generateWebpackConfig(tree, options, appRoot, remotesWithPorts) {
|
|
23
23
|
remotes: remotesWithPorts ?? [],
|
24
24
|
projectRoot: appRoot,
|
25
25
|
standalone: options.standalone,
|
26
|
+
entryModuleFileName: options.entryModuleFileName,
|
26
27
|
});
|
27
28
|
if (!options.setParserOptionsProject) {
|
28
29
|
tree.delete((0, devkit_1.joinPathFragments)(appRoot, 'tsconfig.lint.json'));
|
@@ -1,13 +1,26 @@
|
|
1
1
|
"use strict";
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
3
3
|
exports.normalizeOptions = normalizeOptions;
|
4
|
+
const devkit_1 = require("@nx/devkit");
|
5
|
+
const app_components_info_1 = require("../../utils/app-components-info");
|
6
|
+
const artifact_types_1 = require("../../utils/artifact-types");
|
4
7
|
const project_1 = require("../../utils/project");
|
5
8
|
function normalizeOptions(tree, options) {
|
9
|
+
const componentType = (0, artifact_types_1.getComponentType)(tree);
|
10
|
+
const componentFileSuffix = componentType ? `.${componentType}` : '';
|
11
|
+
const moduleTypeSeparator = (0, artifact_types_1.getModuleTypeSeparator)(tree);
|
12
|
+
const entryModuleFileName = `entry${moduleTypeSeparator}module`;
|
13
|
+
const project = (0, devkit_1.readProjectConfiguration)(tree, options.appName);
|
6
14
|
return {
|
7
15
|
...options,
|
8
16
|
typescriptConfiguration: options.typescriptConfiguration ?? true,
|
9
17
|
federationType: options.federationType ?? 'static',
|
10
18
|
prefix: options.prefix ?? (0, project_1.getProjectPrefix)(tree, options.appName) ?? 'app',
|
11
19
|
standalone: options.standalone ?? true,
|
20
|
+
componentType: componentType ? (0, devkit_1.names)(componentType).className : '',
|
21
|
+
componentFileSuffix,
|
22
|
+
entryModuleFileName,
|
23
|
+
appComponentInfo: (0, app_components_info_1.getAppComponentInfo)(tree, componentFileSuffix, project),
|
24
|
+
nxWelcomeComponentInfo: (0, app_components_info_1.getNxWelcomeComponentInfo)(tree, componentFileSuffix, project),
|
12
25
|
};
|
13
26
|
}
|
@@ -1,3 +1,3 @@
|
|
1
1
|
import type { Tree } from '@nx/devkit';
|
2
|
-
import {
|
3
|
-
export declare function removeDeadCodeFromRemote(tree: Tree, options:
|
2
|
+
import type { NormalizedOptions } from '../schema';
|
3
|
+
export declare function removeDeadCodeFromRemote(tree: Tree, options: NormalizedOptions): void;
|
@@ -5,46 +5,50 @@ const devkit_1 = require("@nx/devkit");
|
|
5
5
|
function removeDeadCodeFromRemote(tree, options) {
|
6
6
|
const projectName = options.appName;
|
7
7
|
const project = (0, devkit_1.readProjectConfiguration)(tree, projectName);
|
8
|
+
const { appComponentInfo, nxWelcomeComponentInfo, entryModuleFileName } = options;
|
8
9
|
['css', 'less', 'scss', 'sass'].forEach((style) => {
|
9
|
-
const pathToComponentStyle = (0, devkit_1.joinPathFragments)(project.sourceRoot, `app
|
10
|
+
const pathToComponentStyle = (0, devkit_1.joinPathFragments)(project.sourceRoot, `app/${appComponentInfo.extensionlessFileName}.${style}`);
|
10
11
|
if (tree.exists(pathToComponentStyle)) {
|
11
12
|
tree.delete(pathToComponentStyle);
|
12
13
|
}
|
13
14
|
});
|
14
|
-
tree.rename(
|
15
|
-
tree.delete((0, devkit_1.joinPathFragments)(project.sourceRoot,
|
16
|
-
tree.delete((0, devkit_1.joinPathFragments)(project.sourceRoot,
|
17
|
-
const pathToAppComponent = (0, devkit_1.joinPathFragments)(project.sourceRoot, 'app/app.component.ts');
|
15
|
+
tree.rename(nxWelcomeComponentInfo.path, (0, devkit_1.joinPathFragments)(project.sourceRoot, `app/remote-entry/${nxWelcomeComponentInfo.fileName}`));
|
16
|
+
tree.delete((0, devkit_1.joinPathFragments)(project.sourceRoot, `app/${appComponentInfo.extensionlessFileName}.spec.ts`));
|
17
|
+
tree.delete((0, devkit_1.joinPathFragments)(project.sourceRoot, `app/${appComponentInfo.extensionlessFileName}.html`));
|
18
18
|
if (!options.standalone) {
|
19
|
-
const componentContents = tree.read(
|
19
|
+
const componentContents = tree.read(appComponentInfo.path, 'utf-8');
|
20
20
|
const isInlineTemplate = !componentContents.includes('templateUrl');
|
21
21
|
const component = componentContents.split(isInlineTemplate ? 'template' : 'templateUrl')[0] +
|
22
22
|
`template: '<router-outlet></router-outlet>'
|
23
23
|
|
24
24
|
})
|
25
|
-
export class
|
26
|
-
tree.write(
|
27
|
-
|
25
|
+
export class ${appComponentInfo.symbolName} {}`;
|
26
|
+
tree.write(appComponentInfo.path, component);
|
27
|
+
let modulePath = (0, devkit_1.joinPathFragments)(project.sourceRoot, 'app/app.module.ts');
|
28
|
+
if (!tree.exists(modulePath)) {
|
29
|
+
modulePath = (0, devkit_1.joinPathFragments)(project.sourceRoot, 'app/app-module.ts');
|
30
|
+
}
|
31
|
+
tree.write(modulePath, `import { NgModule } from '@angular/core';
|
28
32
|
import { BrowserModule } from '@angular/platform-browser';
|
29
33
|
import { RouterModule } from '@angular/router';
|
30
|
-
import {
|
34
|
+
import { ${appComponentInfo.symbolName} } from './${appComponentInfo.extensionlessFileName}';
|
31
35
|
|
32
36
|
@NgModule({
|
33
|
-
declarations: [
|
37
|
+
declarations: [${appComponentInfo.symbolName}],
|
34
38
|
imports: [
|
35
39
|
BrowserModule,
|
36
40
|
RouterModule.forRoot([{
|
37
41
|
path: '',
|
38
|
-
loadChildren: () => import('./remote-entry
|
42
|
+
loadChildren: () => import('./remote-entry/${entryModuleFileName}').then(m => m.RemoteEntryModule)
|
39
43
|
}], { initialNavigation: 'enabledBlocking' }),
|
40
44
|
],
|
41
45
|
providers: [],
|
42
|
-
bootstrap: [
|
46
|
+
bootstrap: [${appComponentInfo.symbolName}],
|
43
47
|
})
|
44
48
|
export class AppModule {}`);
|
45
49
|
}
|
46
50
|
else {
|
47
|
-
tree.delete(
|
51
|
+
tree.delete(appComponentInfo.path);
|
48
52
|
const pathToIndexHtml = project.targets.build.options.index;
|
49
53
|
const indexContents = tree.read(pathToIndexHtml, 'utf-8');
|
50
54
|
const rootSelectorRegex = new RegExp(`${options.prefix || 'app'}-root`, 'ig');
|
@@ -2,16 +2,12 @@
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
3
3
|
exports.setupHostIfDynamic = setupHostIfDynamic;
|
4
4
|
const devkit_1 = require("@nx/devkit");
|
5
|
-
const version_utils_1 = require("../../utils/version-utils");
|
6
5
|
function setupHostIfDynamic(tree, options) {
|
7
6
|
if (options.federationType === 'static') {
|
8
7
|
return;
|
9
8
|
}
|
10
|
-
const { major: angularMajorVersion } = (0, version_utils_1.getInstalledAngularVersionInfo)(tree);
|
11
9
|
const project = (0, devkit_1.readProjectConfiguration)(tree, options.appName);
|
12
|
-
const pathToMFManifest =
|
13
|
-
? (0, devkit_1.joinPathFragments)(project.root, 'public/module-federation.manifest.json')
|
14
|
-
: (0, devkit_1.joinPathFragments)(project.sourceRoot, 'assets/module-federation.manifest.json');
|
10
|
+
const pathToMFManifest = (0, devkit_1.joinPathFragments)(project.root, 'public/module-federation.manifest.json');
|
15
11
|
if (!tree.exists(pathToMFManifest)) {
|
16
12
|
tree.write(pathToMFManifest, '{}');
|
17
13
|
}
|
@@ -1,3 +1,3 @@
|
|
1
1
|
import type { Tree } from '@nx/devkit';
|
2
|
-
import type {
|
3
|
-
export declare function setupTspathForRemote(tree: Tree, options:
|
2
|
+
import type { NormalizedOptions } from '../schema';
|
3
|
+
export declare function setupTspathForRemote(tree: Tree, options: NormalizedOptions): void;
|
@@ -7,7 +7,7 @@ function setupTspathForRemote(tree, options) {
|
|
7
7
|
const project = (0, devkit_1.readProjectConfiguration)(tree, options.appName);
|
8
8
|
const exportPath = options.standalone
|
9
9
|
? `./src/app/remote-entry/entry.routes.ts`
|
10
|
-
: `./src/app/remote-entry
|
10
|
+
: `./src/app/remote-entry/${options.entryModuleFileName}.ts`;
|
11
11
|
const exportName = options.standalone ? 'Routes' : 'Module';
|
12
12
|
(0, js_1.addTsConfigPath)(tree, `${options.appName.replace(/-/g, '_')}/${exportName}`, [
|
13
13
|
(0, devkit_1.joinPathFragments)(project.root, exportPath),
|
@@ -1,3 +1,3 @@
|
|
1
1
|
import { type Tree } from '@nx/devkit';
|
2
|
-
import type {
|
3
|
-
export declare function updateHostAppRoutes(tree: Tree, options:
|
2
|
+
import type { NormalizedOptions } from '../schema';
|
3
|
+
export declare function updateHostAppRoutes(tree: Tree, options: NormalizedOptions): void;
|
@@ -3,31 +3,34 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.updateHostAppRoutes = updateHostAppRoutes;
|
4
4
|
const devkit_1 = require("@nx/devkit");
|
5
5
|
const route_utils_1 = require("../../../utils/nx-devkit/route-utils");
|
6
|
-
const version_utils_1 = require("../../utils/version-utils");
|
7
6
|
function updateHostAppRoutes(tree, options) {
|
8
7
|
const { sourceRoot } = (0, devkit_1.readProjectConfiguration)(tree, options.appName);
|
9
|
-
|
8
|
+
const { appComponentInfo, nxWelcomeComponentInfo } = options;
|
9
|
+
tree.write((0, devkit_1.joinPathFragments)(sourceRoot, 'app', `${appComponentInfo.extensionlessFileName}.html`), `<ul class="remote-menu">
|
10
10
|
<li><a routerLink="/">Home</a></li>
|
11
11
|
</ul>
|
12
12
|
<router-outlet></router-outlet>
|
13
13
|
`);
|
14
14
|
let pathToHostRootRoutingFile = (0, devkit_1.joinPathFragments)(sourceRoot, 'app/app.routes.ts');
|
15
|
-
|
16
|
-
if (!hostRootRoutingFile) {
|
15
|
+
if (!tree.exists(pathToHostRootRoutingFile)) {
|
17
16
|
pathToHostRootRoutingFile = (0, devkit_1.joinPathFragments)(sourceRoot, 'app/app-routing.module.ts');
|
18
|
-
|
17
|
+
}
|
18
|
+
if (!tree.exists(pathToHostRootRoutingFile)) {
|
19
|
+
pathToHostRootRoutingFile = (0, devkit_1.joinPathFragments)(sourceRoot, 'app/app-routing-module.ts');
|
19
20
|
}
|
20
21
|
(0, route_utils_1.addRoute)(tree, pathToHostRootRoutingFile, `{
|
21
22
|
path: '',
|
22
|
-
component:
|
23
|
+
component: ${nxWelcomeComponentInfo.symbolName}
|
23
24
|
}`);
|
24
|
-
tree.write(pathToHostRootRoutingFile, `import {
|
25
|
+
tree.write(pathToHostRootRoutingFile, `import { ${nxWelcomeComponentInfo.symbolName} } from './${nxWelcomeComponentInfo.extensionlessFileName}';
|
25
26
|
${tree.read(pathToHostRootRoutingFile, 'utf-8')}`);
|
26
|
-
const { major: angularMajorVersion } = (0, version_utils_1.getInstalledAngularVersionInfo)(tree);
|
27
27
|
(0, devkit_1.generateFiles)(tree, (0, devkit_1.joinPathFragments)(__dirname, '../files/host-files'), (0, devkit_1.joinPathFragments)(sourceRoot, 'app'), {
|
28
28
|
appName: options.appName,
|
29
29
|
standalone: options.standalone,
|
30
|
-
|
30
|
+
appFileName: appComponentInfo.extensionlessFileName,
|
31
|
+
appSymbolName: appComponentInfo.symbolName,
|
32
|
+
nxWelcomeFileName: nxWelcomeComponentInfo.extensionlessFileName,
|
33
|
+
nxWelcomeSymbolName: nxWelcomeComponentInfo.symbolName,
|
31
34
|
tmpl: '',
|
32
35
|
});
|
33
36
|
}
|
@@ -1,3 +1,3 @@
|
|
1
1
|
import type { Tree } from '@nx/devkit';
|
2
|
-
import type {
|
3
|
-
export declare function updateTsConfig(tree: Tree,
|
2
|
+
import type { NormalizedOptions } from '../schema';
|
3
|
+
export declare function updateTsConfig(tree: Tree, options: NormalizedOptions): void;
|
@@ -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);
|