@nx/angular 21.1.2 → 21.2.0-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -3
- package/fesm2022/nx-angular-mf.mjs.map +1 -1
- package/fesm2022/nx-angular.mjs.map +1 -1
- package/index.d.ts +2 -1
- package/mf/index.d.ts +71 -1
- package/migrations.json +106 -0
- package/ng-package.json +0 -1
- package/package.json +28 -16
- package/plugins/component-testing.js +8 -3
- package/src/builders/dev-server/dev-server.impl.js +4 -7
- package/src/builders/dev-server/lib/normalize-options.js +0 -6
- package/src/builders/dev-server/lib/validate-options.js +0 -4
- package/src/builders/dev-server/schema.d.ts +3 -15
- package/src/builders/dev-server/schema.json +3 -9
- package/src/builders/webpack-browser/webpack-browser.impl.js +2 -0
- package/src/builders/webpack-server/webpack-server.impl.d.ts +3 -1
- package/src/builders/webpack-server/webpack-server.impl.js +2 -0
- package/src/executors/application/application.impl.d.ts +2 -2
- package/src/executors/application/application.impl.js +11 -6
- package/src/executors/application/schema.d.ts +1 -1
- package/src/executors/application/schema.json +21 -10
- package/src/executors/application/utils/normalize-options.js +8 -1
- package/src/executors/application/utils/validate-options.js +10 -40
- package/src/executors/extract-i18n/extract-i18n.impl.js +6 -14
- package/src/executors/extract-i18n/schema.d.ts +1 -6
- package/src/executors/extract-i18n/schema.json +5 -0
- package/src/executors/extract-i18n/utils/validate-options.d.ts +2 -0
- package/src/executors/extract-i18n/utils/validate-options.js +13 -0
- package/src/executors/module-federation-dev-server/lib/normalize-options.js +1 -7
- package/src/executors/module-federation-dev-server/schema.d.ts +3 -15
- package/src/executors/module-federation-dev-server/schema.json +2 -15
- package/src/executors/module-federation-ssr-dev-server/module-federation-ssr-dev-server.impl.js +10 -8
- package/src/executors/ng-packagr-lite/ng-packagr-adjustments/ng-package/entry-point/entry-point.d.ts +6 -3
- package/src/executors/ng-packagr-lite/ng-packagr-adjustments/ng-package/entry-point/entry-point.js +46 -8
- package/src/executors/ng-packagr-lite/ng-packagr-adjustments/ng-package/entry-point/write-bundles.di.d.ts +1 -1
- package/src/executors/ng-packagr-lite/ng-packagr-adjustments/ng-package/entry-point/write-bundles.di.js +3 -3
- package/src/executors/ng-packagr-lite/ng-packagr-adjustments/ng-package/entry-point/write-bundles.transform.d.ts +2 -2
- package/src/executors/ng-packagr-lite/ng-packagr-adjustments/ng-package/entry-point/write-bundles.transform.js +22 -6
- package/src/executors/ng-packagr-lite/schema.json +2 -3
- package/src/executors/package/package.impl.js +1 -5
- package/src/executors/package/schema.d.ts +3 -1
- package/src/executors/package/schema.json +2 -3
- package/src/executors/utilities/builder-package.d.ts +1 -0
- package/src/executors/utilities/builder-package.js +11 -0
- package/src/executors/utilities/esbuild-extensions.d.ts +2 -1
- package/src/executors/utilities/ng-packagr/package-imports.d.ts +3 -1
- package/src/executors/utilities/ng-packagr/package-imports.js +2 -2
- package/src/executors/utilities/ng-packagr/pre-v19/stylesheet-processor.d.ts +2 -24
- package/src/executors/utilities/ng-packagr/pre-v19/stylesheet-processor.js +40 -107
- package/src/executors/utilities/ng-packagr/stylesheet-processor.di.js +4 -8
- package/src/executors/utilities/ng-packagr/v19+/stylesheet-processor.d.ts +1 -1
- package/src/executors/utilities/ng-packagr/v19+/stylesheet-processor.js +18 -11
- package/src/generators/add-linting/add-linting.js +8 -0
- package/src/generators/application/application.js +22 -8
- package/src/generators/application/files/base/tsconfig.app.json__tpl__ +10 -1
- package/src/generators/application/files/base/tsconfig.json__tpl__ +5 -6
- package/src/generators/application/files/ng-module/src/app/app__componentFileSuffix__.spec.ts__tpl__ +28 -0
- package/src/generators/application/files/ng-module/src/app/{app.component.ts__tpl__ → app__componentFileSuffix__.ts__tpl__} +4 -4
- package/src/generators/application/files/ng-module/src/app/app__moduleTypeSeparator__module.ts__tpl__ +17 -0
- package/src/generators/application/files/ng-module/src/main.ts__tpl__ +11 -3
- package/src/generators/application/files/nx-welcome/claimed/ng-module/src/app/{nx-welcome.component.ts__tpl__ → nx-welcome__componentFileSuffix__.ts__tpl__} +1 -1
- package/src/generators/application/files/nx-welcome/claimed/standalone/src/app/{nx-welcome.component.ts__tpl__ → nx-welcome__componentFileSuffix__.ts__tpl__} +1 -1
- package/src/generators/application/files/nx-welcome/not-configured/ng-module/src/app/{nx-welcome.component.ts__tpl__ → nx-welcome__componentFileSuffix__.ts__tpl__} +1 -1
- package/src/generators/application/files/nx-welcome/not-configured/standalone/src/app/{nx-welcome.component.ts__tpl__ → nx-welcome__componentFileSuffix__.ts__tpl__} +1 -1
- package/src/generators/application/files/nx-welcome/unclaimed/ng-module/src/app/{nx-welcome.component.ts__tpl__ → nx-welcome__componentFileSuffix__.ts__tpl__} +1 -1
- package/src/generators/application/files/nx-welcome/unclaimed/standalone/src/app/{nx-welcome.component.ts__tpl__ → nx-welcome__componentFileSuffix__.ts__tpl__} +1 -1
- package/src/generators/application/files/standalone-components/src/app/app.config.ts__tpl__ +6 -2
- package/src/generators/application/files/standalone-components/src/app/app__componentFileSuffix__.spec.ts__tpl__ +27 -0
- package/src/generators/application/files/standalone-components/src/app/{app.component.ts__tpl__ → app__componentFileSuffix__.ts__tpl__} +6 -6
- package/src/generators/application/files/standalone-components/src/main.ts__tpl__ +2 -2
- package/src/generators/application/lib/create-files.d.ts +1 -1
- package/src/generators/application/lib/create-files.js +18 -19
- package/src/generators/application/lib/create-project.d.ts +1 -1
- package/src/generators/application/lib/create-project.js +119 -26
- package/src/generators/application/lib/enable-strict-type-checking.js +4 -2
- package/src/generators/application/lib/index.d.ts +1 -2
- package/src/generators/application/lib/index.js +1 -2
- package/src/generators/application/lib/set-generator-defaults.js +1 -0
- package/src/generators/application/lib/{update-editor-tsconfig.d.ts → update-tsconfig-files.d.ts} +1 -1
- package/src/generators/application/lib/update-tsconfig-files.js +76 -0
- package/src/generators/application/schema.json +1 -1
- package/src/generators/component/component.js +13 -2
- package/src/generators/component/files/__fileName__.ts__tpl__ +1 -1
- package/src/generators/component/lib/component.js +11 -1
- package/src/generators/component/lib/module.d.ts +7 -2
- package/src/generators/component/lib/module.js +7 -5
- package/src/generators/component/lib/normalize-options.js +7 -3
- package/src/generators/component/schema.d.ts +1 -0
- package/src/generators/component/schema.json +6 -2
- package/src/generators/convert-to-application-executor/convert-to-application-executor.js +37 -24
- package/src/generators/convert-to-rspack/convert-to-rspack.js +2 -6
- package/src/generators/convert-to-rspack/lib/get-custom-webpack-config.js +1 -1
- package/src/generators/directive/directive.js +1 -1
- package/src/generators/directive/lib/normalize-options.js +7 -2
- package/src/generators/directive/schema.d.ts +1 -0
- package/src/generators/directive/schema.json +10 -2
- package/src/generators/host/host.js +21 -1
- package/src/generators/host/schema.d.ts +1 -0
- package/src/generators/host/schema.json +7 -1
- package/src/generators/init/init.js +1 -1
- package/src/generators/library/files/base/tsconfig.json__tpl__ +5 -5
- package/src/generators/library/files/ng-module/src/index.ts__tpl__ +1 -1
- package/src/generators/library/files/standalone-components/src/lib/lib.routes.ts__tpl__ +2 -2
- package/src/generators/library/lib/add-standalone-component.js +1 -0
- package/src/generators/library/lib/create-files.js +10 -3
- package/src/generators/library/lib/normalize-options.d.ts +3 -3
- package/src/generators/library/lib/normalize-options.js +6 -1
- package/src/generators/library/lib/normalized-schema.d.ts +2 -0
- package/src/generators/library/lib/set-generator-defaults.js +1 -0
- package/src/generators/library/lib/update-tsconfig-files.d.ts +3 -0
- package/src/generators/library/lib/update-tsconfig-files.js +85 -0
- package/src/generators/library/library.js +19 -33
- package/src/generators/library-secondary-entry-point/files/src/index.ts__tmpl__ +1 -1
- package/src/generators/library-secondary-entry-point/lib/add-files.js +2 -1
- package/src/generators/library-secondary-entry-point/lib/normalize-options.d.ts +2 -2
- package/src/generators/library-secondary-entry-point/lib/normalize-options.js +3 -0
- package/src/generators/library-secondary-entry-point/schema.d.ts +1 -0
- package/src/generators/move/lib/update-module-name.js +17 -10
- package/src/generators/move/lib/update-secondary-entry-points.js +0 -3
- package/src/generators/ng-add/migrators/builders/angular-devkit-karma.migrator.js +1 -1
- package/src/generators/ng-add/migrators/projects/app.migrator.js +43 -8
- package/src/generators/ngrx/schema.json +3 -3
- package/src/generators/ngrx-root-store/lib/normalize-options.js +9 -2
- package/src/generators/pipe/lib/normalize-options.js +4 -0
- package/src/generators/pipe/pipe.js +1 -1
- package/src/generators/pipe/schema.d.ts +1 -0
- package/src/generators/pipe/schema.json +11 -2
- package/src/generators/remote/files/standalone/src/bootstrap.server.ts__tmpl__ +4 -4
- package/src/generators/remote/lib/update-ssr-setup.js +5 -0
- package/src/generators/remote/remote.js +23 -0
- package/src/generators/remote/schema.d.ts +1 -0
- package/src/generators/remote/schema.json +7 -1
- package/src/generators/scam/lib/convert-component-to-scam.js +1 -3
- package/src/generators/scam/lib/normalize-options.js +11 -3
- package/src/generators/scam/schema.d.ts +1 -0
- package/src/generators/scam/schema.json +1 -2
- package/src/generators/scam-directive/lib/convert-directive-to-scam.js +1 -3
- package/src/generators/scam-directive/lib/normalize-options.js +11 -2
- package/src/generators/scam-directive/schema.d.ts +2 -0
- package/src/generators/scam-directive/schema.json +10 -2
- package/src/generators/scam-pipe/lib/convert-pipe-to-scam.js +1 -3
- package/src/generators/scam-pipe/lib/normalize-options.js +8 -0
- package/src/generators/scam-pipe/schema.d.ts +2 -0
- package/src/generators/scam-pipe/schema.json +5 -0
- package/src/generators/setup-mf/files/entry-module-files/{entry.module.ts__tmpl__ → __entryModuleFileName__.ts__tmpl__} +4 -4
- package/src/generators/setup-mf/files/entry-module-files/entry.routes.ts__tmpl__ +2 -2
- package/src/generators/setup-mf/files/entry-module-files/{entry.component.ts__tmpl__ → entry__componentFileSuffix__.ts__tmpl__} +1 -1
- package/src/generators/setup-mf/files/host-files/__appFileName__.spec.ts__tmpl__ +43 -0
- package/src/generators/setup-mf/files/standalone-entry-component-files/entry.routes.ts__tmpl__ +2 -2
- package/src/generators/setup-mf/files/standalone-entry-component-files/{entry.component.ts__tmpl__ → entry__componentFileSuffix__.ts__tmpl__} +3 -3
- package/src/generators/setup-mf/files/ts-webpack/module-federation.config.ts__tmpl__ +1 -1
- package/src/generators/setup-mf/files/ts-webpack/tsconfig.lint.json__tmpl__ +1 -1
- package/src/generators/setup-mf/files/webpack/module-federation.config.js__tmpl__ +1 -1
- package/src/generators/setup-mf/lib/add-remote-entry.d.ts +2 -2
- package/src/generators/setup-mf/lib/add-remote-entry.js +9 -3
- package/src/generators/setup-mf/lib/add-remote-to-host.js +11 -1
- package/src/generators/setup-mf/lib/fix-bootstrap.d.ts +2 -2
- package/src/generators/setup-mf/lib/fix-bootstrap.js +4 -4
- package/src/generators/setup-mf/lib/generate-config.d.ts +2 -2
- package/src/generators/setup-mf/lib/generate-config.js +1 -0
- package/src/generators/setup-mf/lib/normalize-options.d.ts +1 -1
- package/src/generators/setup-mf/lib/normalize-options.js +13 -0
- package/src/generators/setup-mf/lib/remove-dead-code-from-remote.d.ts +2 -2
- package/src/generators/setup-mf/lib/remove-dead-code-from-remote.js +18 -14
- package/src/generators/setup-mf/lib/setup-host-if-dynamic.js +1 -5
- package/src/generators/setup-mf/lib/setup-tspath-for-remote.d.ts +2 -2
- package/src/generators/setup-mf/lib/setup-tspath-for-remote.js +1 -1
- package/src/generators/setup-mf/lib/update-host-app-routes.d.ts +2 -2
- package/src/generators/setup-mf/lib/update-host-app-routes.js +12 -9
- package/src/generators/setup-mf/lib/update-tsconfig.d.ts +2 -2
- package/src/generators/setup-mf/lib/update-tsconfig.js +5 -5
- package/src/generators/setup-mf/schema.d.ts +7 -0
- package/src/generators/setup-mf/setup-mf.d.ts +2 -2
- package/src/generators/setup-mf/setup-mf.js +16 -6
- package/src/generators/setup-ssr/files/v20+/application-builder/ngmodule-src/__main__ +1 -0
- package/src/generators/setup-ssr/files/v20+/application-builder/ngmodule-src/app/__rootModuleFileName__ +12 -0
- package/src/generators/setup-ssr/files/v20+/application-builder/ngmodule-src/app/app.routes.server.ts__tpl__ +8 -0
- package/src/generators/setup-ssr/files/v20+/application-builder/server/__serverFileName__ +66 -0
- package/src/generators/setup-ssr/files/v20+/application-builder/standalone-src/__main__ +7 -0
- package/src/generators/setup-ssr/files/v20+/application-builder/standalone-src/app/app.config.server.ts__tpl__ +12 -0
- package/src/generators/setup-ssr/files/v20+/application-builder/standalone-src/app/app.routes.server.ts__tpl__ +8 -0
- package/src/generators/setup-ssr/files/v20+/server-builder/ngmodule-src/__main__ +1 -0
- package/src/generators/setup-ssr/files/v20+/server-builder/ngmodule-src/app/__rootModuleFileName__ +14 -0
- package/src/generators/setup-ssr/files/v20+/server-builder/root/tsconfig.server.json.template +18 -0
- package/src/generators/setup-ssr/files/v20+/server-builder/server/__serverFileName__ +69 -0
- package/src/generators/setup-ssr/files/v20+/server-builder/standalone-src/__main__ +7 -0
- package/src/generators/setup-ssr/files/v20+/server-builder/standalone-src/app/app.config.server.ts.template +11 -0
- package/src/generators/setup-ssr/lib/add-dependencies.js +11 -8
- package/src/generators/setup-ssr/lib/add-hydration.js +10 -3
- package/src/generators/setup-ssr/lib/add-server-file.js +7 -2
- package/src/generators/setup-ssr/lib/generate-files.js +17 -4
- package/src/generators/setup-ssr/lib/generate-server-ts-config.js +32 -6
- package/src/generators/setup-ssr/lib/normalize-options.js +5 -3
- package/src/generators/setup-ssr/lib/update-project-config.js +5 -0
- package/src/generators/setup-ssr/lib/validate-options.js +2 -2
- package/src/generators/setup-ssr/schema.d.ts +1 -0
- package/src/generators/setup-ssr/schema.json +1 -1
- package/src/generators/utils/add-jest.js +6 -1
- package/src/generators/utils/app-components-info.d.ts +9 -0
- package/src/generators/utils/app-components-info.js +39 -0
- package/src/generators/utils/artifact-types.d.ts +3 -0
- package/src/generators/utils/artifact-types.js +33 -0
- package/src/generators/utils/assert-mf-utils.d.ts +1 -0
- package/src/generators/utils/assert-mf-utils.js +11 -0
- package/src/generators/utils/ensure-angular-dependencies.js +6 -3
- package/src/generators/utils/export-scam.d.ts +1 -0
- package/src/generators/utils/export-scam.js +1 -2
- package/src/generators/utils/find-module.js +18 -13
- package/src/generators/utils/storybook-ast/component-info.js +40 -24
- package/src/generators/utils/storybook-ast/module-info.d.ts +1 -1
- package/src/generators/utils/storybook-ast/module-info.js +3 -8
- package/src/generators/utils/testing.js +28 -28
- package/src/generators/utils/version-utils.js +2 -2
- package/src/generators/web-worker/lib/add-snippet.js +3 -3
- package/src/migrations/update-21-2-0/migrate-provide-server-rendering-import.d.ts +2 -0
- package/src/migrations/update-21-2-0/migrate-provide-server-rendering-import.js +110 -0
- package/src/migrations/update-21-2-0/replace-provide-server-routing.d.ts +2 -0
- package/src/migrations/update-21-2-0/replace-provide-server-routing.js +103 -0
- package/src/migrations/update-21-2-0/set-generator-defaults-for-previous-style-guide.d.ts +2 -0
- package/src/migrations/update-21-2-0/set-generator-defaults-for-previous-style-guide.js +47 -0
- package/src/migrations/update-21-2-0/update-angular-cli.d.ts +3 -0
- package/src/migrations/update-21-2-0/update-angular-cli.js +23 -0
- package/src/migrations/update-21-2-0/update-module-resolution.d.ts +2 -0
- package/src/migrations/update-21-2-0/update-module-resolution.js +45 -0
- package/src/plugins/plugin.js +22 -13
- package/src/utils/backward-compatible-versions.d.ts +2 -2
- package/src/utils/backward-compatible-versions.js +22 -19
- package/src/utils/nx-devkit/ast-utils.js +17 -3
- package/src/utils/nx-devkit/testing.js +9 -9
- package/src/utils/targets.d.ts +2 -1
- package/src/utils/targets.js +6 -0
- package/src/utils/versions.d.ts +4 -3
- package/src/utils/versions.js +5 -4
- package/mf/mf.d.ts +0 -69
- package/src/generators/application/files/base-pre18/src/favicon.ico +0 -0
- package/src/generators/application/files/ng-module/src/app/app.component.spec.ts__tpl__ +0 -29
- package/src/generators/application/files/ng-module/src/app/app.module.ts__tpl__ +0 -17
- package/src/generators/application/files/standalone-components/src/app/app.component.__style__ +0 -0
- package/src/generators/application/files/standalone-components/src/app/app.component.spec.ts__tpl__ +0 -28
- package/src/generators/application/lib/set-app-strict-default.d.ts +0 -2
- package/src/generators/application/lib/set-app-strict-default.js +0 -13
- package/src/generators/application/lib/update-editor-tsconfig.js +0 -21
- package/src/generators/library/lib/enable-strict-type-checking.d.ts +0 -7
- package/src/generators/library/lib/enable-strict-type-checking.js +0 -47
- package/src/generators/library/lib/update-tsconfig.d.ts +0 -3
- package/src/generators/library/lib/update-tsconfig.js +0 -36
- package/src/generators/setup-mf/files/host-files/app.component.spec.ts__tmpl__ +0 -47
- /package/src/generators/application/files/{base-18+ → base}/public/favicon.ico +0 -0
- /package/src/generators/application/files/{base-pre18/src/assets/.gitkeep__tpl__ → ng-module/src/app/app__componentFileSuffix__.__style__} +0 -0
- /package/src/generators/application/files/ng-module/src/app/{app.component.html__tpl__ → app__componentFileSuffix__.html__tpl__} +0 -0
- /package/src/generators/application/files/{ng-module/src/app/app.component.__style__ → standalone-components/src/app/app__componentFileSuffix__.__style__} +0 -0
- /package/src/generators/application/files/standalone-components/src/app/{app.component.html__tpl__ → app__componentFileSuffix__.html__tpl__} +0 -0
- /package/src/generators/component/files/{__fileName__.html__tpl__ → __fileName____ngext__.html__tpl__} +0 -0
- /package/src/generators/library/files/ng-module/src/lib/{__libFileName__.module.ts__tpl__ → __libFileName____moduleTypeSeparator__module.ts__tpl__} +0 -0
- /package/src/generators/library-secondary-entry-point/files/src/lib/{__fileName__.module.ts__tmpl__ → __fileName____moduleTypeSeparator__module.ts__tmpl__} +0 -0
- /package/src/generators/setup-ssr/files/{v19+ → v19}/application-builder/ngmodule-src/__main__ +0 -0
- /package/src/generators/setup-ssr/files/{v19+ → v19}/application-builder/ngmodule-src/app/__rootModuleFileName__ +0 -0
- /package/src/generators/setup-ssr/files/{v19+ → v19}/application-builder/ngmodule-src/app/app.routes.server.ts__tpl__ +0 -0
- /package/src/generators/setup-ssr/files/{v19+ → v19}/application-builder/server/__serverFileName__ +0 -0
- /package/src/generators/setup-ssr/files/{v19+ → v19}/application-builder/standalone-src/__main__ +0 -0
- /package/src/generators/setup-ssr/files/{v19+ → v19}/application-builder/standalone-src/app/app.config.server.ts__tpl__ +0 -0
- /package/src/generators/setup-ssr/files/{v19+ → v19}/application-builder/standalone-src/app/app.routes.server.ts__tpl__ +0 -0
- /package/src/generators/setup-ssr/files/{v19+ → v19}/application-builder-common-engine/server/__serverFileName__ +0 -0
- /package/src/generators/setup-ssr/files/{v19+ → v19}/server-builder/ngmodule-src/__main__ +0 -0
- /package/src/generators/setup-ssr/files/{v19+ → v19}/server-builder/ngmodule-src/app/__rootModuleFileName__ +0 -0
- /package/src/generators/setup-ssr/files/{v19+ → v19}/server-builder/root/tsconfig.server.json.template +0 -0
- /package/src/generators/setup-ssr/files/{v19+ → v19}/server-builder/server/__serverFileName__ +0 -0
- /package/src/generators/setup-ssr/files/{v19+ → v19}/server-builder/standalone-src/__main__ +0 -0
- /package/src/generators/setup-ssr/files/{v19+ → v19}/server-builder/standalone-src/app/app.config.server.ts.template +0 -0
@@ -1,7 +1,7 @@
|
|
1
1
|
import { bootstrapApplication } from '@angular/platform-browser';
|
2
2
|
import { appConfig } from './app/app.config';
|
3
|
-
import {
|
3
|
+
import { App<%= componentType %> } from './app/app<%= componentFileSuffix %>';
|
4
4
|
|
5
|
-
bootstrapApplication(
|
5
|
+
bootstrapApplication(App<%= componentType %>, appConfig).catch((err) =>
|
6
6
|
console.error(err)
|
7
7
|
);
|
@@ -3,16 +3,14 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.createFiles = createFiles;
|
4
4
|
const devkit_1 = require("@nx/devkit");
|
5
5
|
const js_1 = require("@nx/js");
|
6
|
-
const
|
6
|
+
const onboarding_1 = require("nx/src/nx-cloud/utilities/onboarding");
|
7
7
|
const test_runners_1 = require("../../../utils/test-runners");
|
8
|
+
const artifact_types_1 = require("../../utils/artifact-types");
|
8
9
|
const selector_1 = require("../../utils/selector");
|
9
10
|
const update_project_root_tsconfig_1 = require("../../utils/update-project-root-tsconfig");
|
10
11
|
const version_utils_1 = require("../../utils/version-utils");
|
11
|
-
const onboarding_1 = require("nx/src/nx-cloud/utilities/onboarding");
|
12
12
|
async function createFiles(tree, options, rootOffset) {
|
13
|
-
const { major: angularMajorVersion
|
14
|
-
const isUsingApplicationBuilder = options.bundler === 'esbuild';
|
15
|
-
const disableModernClassFieldsBehavior = (0, semver_1.lt)(angularVersion, '18.1.0-rc.0');
|
13
|
+
const { major: angularMajorVersion } = (0, version_utils_1.getInstalledAngularVersionInfo)(tree);
|
16
14
|
const rootSelector = `${options.prefix}-root`;
|
17
15
|
(0, selector_1.validateHtmlSelector)(rootSelector);
|
18
16
|
const nxWelcomeSelector = `${options.prefix}-nx-welcome`;
|
@@ -20,6 +18,9 @@ async function createFiles(tree, options, rootOffset) {
|
|
20
18
|
const onBoardingStatus = await (0, onboarding_1.createNxCloudOnboardingURLForWelcomeApp)(tree, options.nxCloudToken);
|
21
19
|
const connectCloudUrl = onBoardingStatus === 'unclaimed' &&
|
22
20
|
(await (0, onboarding_1.getNxCloudAppOnBoardingUrl)(options.nxCloudToken));
|
21
|
+
const componentType = (0, artifact_types_1.getComponentType)(tree);
|
22
|
+
const componentFileSuffix = componentType ? `.${componentType}` : '';
|
23
|
+
const moduleTypeSeparator = (0, artifact_types_1.getModuleTypeSeparator)(tree);
|
23
24
|
const substitutions = {
|
24
25
|
rootSelector,
|
25
26
|
appName: options.name,
|
@@ -34,13 +35,14 @@ async function createFiles(tree, options, rootOffset) {
|
|
34
35
|
rootTsConfig: (0, devkit_1.joinPathFragments)(rootOffset, (0, js_1.getRootTsConfigFileName)(tree)),
|
35
36
|
angularMajorVersion,
|
36
37
|
rootOffset,
|
37
|
-
|
38
|
-
disableModernClassFieldsBehavior,
|
39
|
-
useEventCoalescing: angularMajorVersion >= 18,
|
40
|
-
useRouterTestingModule: angularMajorVersion < 18,
|
41
|
-
// Angular v19 or higher defaults to true, while v18 or lower defaults to false
|
38
|
+
// Angular v19 or higher defaults to true, while lower versions default to false
|
42
39
|
setStandaloneFalse: angularMajorVersion >= 19,
|
43
40
|
setStandaloneTrue: angularMajorVersion < 19,
|
41
|
+
provideGlobalErrorListener: angularMajorVersion >= 20,
|
42
|
+
usePlatformBrowserDynamic: angularMajorVersion < 20,
|
43
|
+
componentType: componentType ? (0, devkit_1.names)(componentType).className : '',
|
44
|
+
componentFileSuffix,
|
45
|
+
moduleTypeSeparator,
|
44
46
|
connectCloudUrl,
|
45
47
|
tutorialUrl: options.standalone
|
46
48
|
? 'https://nx.dev/getting-started/tutorials/angular-standalone-tutorial?utm_source=nx-project'
|
@@ -49,11 +51,8 @@ async function createFiles(tree, options, rootOffset) {
|
|
49
51
|
};
|
50
52
|
const angularAppType = options.standalone ? 'standalone' : 'ng-module';
|
51
53
|
(0, devkit_1.generateFiles)(tree, (0, devkit_1.joinPathFragments)(__dirname, '../files/base'), options.appProjectRoot, substitutions);
|
52
|
-
if (angularMajorVersion >=
|
53
|
-
|
54
|
-
}
|
55
|
-
else {
|
56
|
-
(0, devkit_1.generateFiles)(tree, (0, devkit_1.joinPathFragments)(__dirname, '../files/base-pre18'), options.appProjectRoot, substitutions);
|
54
|
+
if (angularMajorVersion >= 20) {
|
55
|
+
tree.delete((0, devkit_1.joinPathFragments)(options.appProjectRoot, 'tsconfig.editor.json'));
|
57
56
|
}
|
58
57
|
if (options.standalone) {
|
59
58
|
(0, devkit_1.generateFiles)(tree, (0, devkit_1.joinPathFragments)(__dirname, '../files/standalone-components'), options.appProjectRoot, substitutions);
|
@@ -67,15 +66,15 @@ async function createFiles(tree, options, rootOffset) {
|
|
67
66
|
tree.delete((0, devkit_1.joinPathFragments)(options.appProjectRoot, '/src/app/app.routes.ts'));
|
68
67
|
}
|
69
68
|
if (options.skipTests || options.unitTestRunner === test_runners_1.UnitTestRunner.None) {
|
70
|
-
tree.delete((0, devkit_1.joinPathFragments)(options.appProjectRoot,
|
69
|
+
tree.delete((0, devkit_1.joinPathFragments)(options.appProjectRoot, `src/app/app${componentFileSuffix}.spec.ts`));
|
71
70
|
}
|
72
71
|
if (options.inlineTemplate) {
|
73
|
-
tree.delete((0, devkit_1.joinPathFragments)(options.appProjectRoot,
|
72
|
+
tree.delete((0, devkit_1.joinPathFragments)(options.appProjectRoot, `src/app/app${componentFileSuffix}.html`));
|
74
73
|
}
|
75
74
|
if (options.inlineStyle) {
|
76
|
-
tree.delete((0, devkit_1.joinPathFragments)(options.appProjectRoot,
|
75
|
+
tree.delete((0, devkit_1.joinPathFragments)(options.appProjectRoot, `src/app/app${componentFileSuffix}.${options.style}`));
|
77
76
|
}
|
78
77
|
if (options.minimal) {
|
79
|
-
tree.delete((0, devkit_1.joinPathFragments)(options.appProjectRoot,
|
78
|
+
tree.delete((0, devkit_1.joinPathFragments)(options.appProjectRoot, `src/app/nx-welcome${componentFileSuffix}.ts`));
|
80
79
|
}
|
81
80
|
}
|
@@ -2,14 +2,117 @@
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
3
3
|
exports.createProject = createProject;
|
4
4
|
const devkit_1 = require("@nx/devkit");
|
5
|
-
const version_utils_1 = require("../../utils/version-utils");
|
6
5
|
const target_defaults_utils_1 = require("@nx/devkit/src/generators/target-defaults-utils");
|
6
|
+
const version_utils_1 = require("../../utils/version-utils");
|
7
7
|
function createProject(tree, options) {
|
8
|
+
let project;
|
9
|
+
if (options.bundler === 'esbuild') {
|
10
|
+
project = createProjectForEsbuild(tree, options);
|
11
|
+
}
|
12
|
+
else {
|
13
|
+
project = createProjectForWebpack(tree, options);
|
14
|
+
}
|
15
|
+
(0, devkit_1.addProjectConfiguration)(tree, options.name, project);
|
16
|
+
}
|
17
|
+
function createProjectForEsbuild(tree, options) {
|
8
18
|
const { major: angularMajorVersion } = (0, version_utils_1.getInstalledAngularVersionInfo)(tree);
|
9
|
-
const buildExecutor =
|
10
|
-
? '@angular
|
19
|
+
const buildExecutor = angularMajorVersion >= 20
|
20
|
+
? '@angular/build:application'
|
11
21
|
: '@angular-devkit/build-angular:application';
|
12
|
-
|
22
|
+
(0, target_defaults_utils_1.addBuildTargetDefaults)(tree, buildExecutor);
|
23
|
+
let budgets = undefined;
|
24
|
+
if (options.strict) {
|
25
|
+
budgets = [
|
26
|
+
{ type: 'initial', maximumWarning: '500kb', maximumError: '1mb' },
|
27
|
+
{
|
28
|
+
type: 'anyComponentStyle',
|
29
|
+
maximumWarning: '4kb',
|
30
|
+
maximumError: '8kb',
|
31
|
+
},
|
32
|
+
];
|
33
|
+
}
|
34
|
+
else {
|
35
|
+
budgets = [
|
36
|
+
{ type: 'initial', maximumWarning: '2mb', maximumError: '5mb' },
|
37
|
+
{
|
38
|
+
type: 'anyComponentStyle',
|
39
|
+
maximumWarning: '6kb',
|
40
|
+
maximumError: '10kb',
|
41
|
+
},
|
42
|
+
];
|
43
|
+
}
|
44
|
+
const inlineStyleLanguage = options?.style !== 'css' ? options.style : undefined;
|
45
|
+
const project = {
|
46
|
+
name: options.name,
|
47
|
+
projectType: 'application',
|
48
|
+
prefix: options.prefix,
|
49
|
+
root: options.appProjectRoot,
|
50
|
+
sourceRoot: options.appProjectSourceRoot,
|
51
|
+
tags: options.parsedTags,
|
52
|
+
targets: {
|
53
|
+
build: {
|
54
|
+
executor: buildExecutor,
|
55
|
+
outputs: ['{options.outputPath}'],
|
56
|
+
options: {
|
57
|
+
outputPath: options.outputPath,
|
58
|
+
index: angularMajorVersion >= 20
|
59
|
+
? undefined
|
60
|
+
: `${options.appProjectSourceRoot}/index.html`,
|
61
|
+
browser: `${options.appProjectSourceRoot}/main.ts`,
|
62
|
+
polyfills: ['zone.js'],
|
63
|
+
tsConfig: (0, devkit_1.joinPathFragments)(options.appProjectRoot, 'tsconfig.app.json'),
|
64
|
+
inlineStyleLanguage,
|
65
|
+
assets: [
|
66
|
+
{
|
67
|
+
glob: '**/*',
|
68
|
+
input: (0, devkit_1.joinPathFragments)(options.appProjectRoot, 'public'),
|
69
|
+
},
|
70
|
+
],
|
71
|
+
styles: [`${options.appProjectSourceRoot}/styles.${options.style}`],
|
72
|
+
},
|
73
|
+
configurations: {
|
74
|
+
production: {
|
75
|
+
budgets,
|
76
|
+
outputHashing: 'all',
|
77
|
+
},
|
78
|
+
development: {
|
79
|
+
optimization: false,
|
80
|
+
extractLicenses: false,
|
81
|
+
sourceMap: true,
|
82
|
+
},
|
83
|
+
},
|
84
|
+
defaultConfiguration: 'production',
|
85
|
+
},
|
86
|
+
serve: {
|
87
|
+
continuous: true,
|
88
|
+
executor: angularMajorVersion >= 20
|
89
|
+
? '@angular/build:dev-server'
|
90
|
+
: '@angular-devkit/build-angular:dev-server',
|
91
|
+
options: options.port ? { port: options.port } : undefined,
|
92
|
+
configurations: {
|
93
|
+
production: {
|
94
|
+
buildTarget: `${options.name}:build:production`,
|
95
|
+
},
|
96
|
+
development: {
|
97
|
+
buildTarget: `${options.name}:build:development`,
|
98
|
+
},
|
99
|
+
},
|
100
|
+
defaultConfiguration: 'development',
|
101
|
+
},
|
102
|
+
'extract-i18n': {
|
103
|
+
executor: angularMajorVersion >= 20
|
104
|
+
? '@angular/build:extract-i18n'
|
105
|
+
: '@angular-devkit/build-angular:extract-i18n',
|
106
|
+
options: {
|
107
|
+
buildTarget: `${options.name}:build`,
|
108
|
+
},
|
109
|
+
},
|
110
|
+
},
|
111
|
+
};
|
112
|
+
return project;
|
113
|
+
}
|
114
|
+
function createProjectForWebpack(tree, options) {
|
115
|
+
const buildExecutor = '@angular-devkit/build-angular:browser';
|
13
116
|
(0, target_defaults_utils_1.addBuildTargetDefaults)(tree, buildExecutor);
|
14
117
|
let budgets = undefined;
|
15
118
|
if (options.strict) {
|
@@ -47,23 +150,17 @@ function createProject(tree, options) {
|
|
47
150
|
options: {
|
48
151
|
outputPath: options.outputPath,
|
49
152
|
index: `${options.appProjectSourceRoot}/index.html`,
|
50
|
-
|
153
|
+
main: `${options.appProjectSourceRoot}/main.ts`,
|
51
154
|
polyfills: ['zone.js'],
|
52
155
|
tsConfig: (0, devkit_1.joinPathFragments)(options.appProjectRoot, 'tsconfig.app.json'),
|
53
156
|
inlineStyleLanguage,
|
54
|
-
assets:
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
]
|
61
|
-
: [
|
62
|
-
`${options.appProjectSourceRoot}/favicon.ico`,
|
63
|
-
`${options.appProjectSourceRoot}/assets`,
|
64
|
-
],
|
157
|
+
assets: [
|
158
|
+
{
|
159
|
+
glob: '**/*',
|
160
|
+
input: (0, devkit_1.joinPathFragments)(options.appProjectRoot, 'public'),
|
161
|
+
},
|
162
|
+
],
|
65
163
|
styles: [`${options.appProjectSourceRoot}/styles.${options.style}`],
|
66
|
-
scripts: [],
|
67
164
|
},
|
68
165
|
configurations: {
|
69
166
|
production: {
|
@@ -71,12 +168,12 @@ function createProject(tree, options) {
|
|
71
168
|
outputHashing: 'all',
|
72
169
|
},
|
73
170
|
development: {
|
74
|
-
buildOptimizer:
|
171
|
+
buildOptimizer: false,
|
75
172
|
optimization: false,
|
76
|
-
vendorChunk:
|
173
|
+
vendorChunk: true,
|
77
174
|
extractLicenses: false,
|
78
175
|
sourceMap: true,
|
79
|
-
namedChunks:
|
176
|
+
namedChunks: true,
|
80
177
|
},
|
81
178
|
},
|
82
179
|
defaultConfiguration: 'production',
|
@@ -84,11 +181,7 @@ function createProject(tree, options) {
|
|
84
181
|
serve: {
|
85
182
|
continuous: true,
|
86
183
|
executor: '@angular-devkit/build-angular:dev-server',
|
87
|
-
options: options.port
|
88
|
-
? {
|
89
|
-
port: options.port,
|
90
|
-
}
|
91
|
-
: undefined,
|
184
|
+
options: options.port ? { port: options.port } : undefined,
|
92
185
|
configurations: {
|
93
186
|
production: {
|
94
187
|
buildTarget: `${options.name}:build:production`,
|
@@ -107,5 +200,5 @@ function createProject(tree, options) {
|
|
107
200
|
},
|
108
201
|
},
|
109
202
|
};
|
110
|
-
|
203
|
+
return project;
|
111
204
|
}
|
@@ -2,10 +2,10 @@
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
3
3
|
exports.enableStrictTypeChecking = enableStrictTypeChecking;
|
4
4
|
const devkit_1 = require("@nx/devkit");
|
5
|
+
const version_utils_1 = require("../../utils/version-utils");
|
5
6
|
function enableStrictTypeChecking(host, options) {
|
6
7
|
// This matches the settings defined by the Angular CLI https://angular.io/guide/strict-mode
|
7
8
|
const compilerOptions = {
|
8
|
-
forceConsistentCasingInFileNames: true,
|
9
9
|
strict: true,
|
10
10
|
noImplicitOverride: true,
|
11
11
|
noPropertyAccessFromIndexSignature: true,
|
@@ -14,12 +14,14 @@ function enableStrictTypeChecking(host, options) {
|
|
14
14
|
};
|
15
15
|
const appTsConfigPath = `${options.appProjectRoot}/tsconfig.json`;
|
16
16
|
if (host.exists(appTsConfigPath)) {
|
17
|
+
const { major: angularMajorVersion } = (0, version_utils_1.getInstalledAngularVersionInfo)(host);
|
17
18
|
(0, devkit_1.updateJson)(host, appTsConfigPath, (json) => {
|
18
19
|
json.compilerOptions = { ...json.compilerOptions, ...compilerOptions };
|
19
20
|
json.angularCompilerOptions = {
|
20
|
-
|
21
|
+
...json.angularCompilerOptions,
|
21
22
|
strictInjectionParameters: true,
|
22
23
|
strictInputAccessModifiers: true,
|
24
|
+
typeCheckHostBindings: angularMajorVersion >= 20 ? true : undefined,
|
23
25
|
strictTemplates: true,
|
24
26
|
};
|
25
27
|
return json;
|
@@ -7,7 +7,6 @@ export * from './create-project';
|
|
7
7
|
export * from './enable-strict-type-checking';
|
8
8
|
export * from './normalize-options';
|
9
9
|
export * from './normalized-schema';
|
10
|
-
export * from './set-app-strict-default';
|
11
10
|
export * from './set-generator-defaults';
|
12
|
-
export * from './update-
|
11
|
+
export * from './update-tsconfig-files';
|
13
12
|
export * from './add-serve-static-target';
|
@@ -10,7 +10,6 @@ tslib_1.__exportStar(require("./create-project"), exports);
|
|
10
10
|
tslib_1.__exportStar(require("./enable-strict-type-checking"), exports);
|
11
11
|
tslib_1.__exportStar(require("./normalize-options"), exports);
|
12
12
|
tslib_1.__exportStar(require("./normalized-schema"), exports);
|
13
|
-
tslib_1.__exportStar(require("./set-app-strict-default"), exports);
|
14
13
|
tslib_1.__exportStar(require("./set-generator-defaults"), exports);
|
15
|
-
tslib_1.__exportStar(require("./update-
|
14
|
+
tslib_1.__exportStar(require("./update-tsconfig-files"), exports);
|
16
15
|
tslib_1.__exportStar(require("./add-serve-static-target"), exports);
|
@@ -10,6 +10,7 @@ function setGeneratorDefaults(tree, options) {
|
|
10
10
|
linter: options.linter,
|
11
11
|
style: options.style,
|
12
12
|
unitTestRunner: options.unitTestRunner,
|
13
|
+
strict: !options.strict ? false : undefined,
|
13
14
|
...(nxJson.generators['@nx/angular:application'] || {}),
|
14
15
|
};
|
15
16
|
(0, devkit_1.updateNxJson)(tree, nxJson);
|
package/src/generators/application/lib/{update-editor-tsconfig.d.ts → update-tsconfig-files.d.ts}
RENAMED
@@ -1,3 +1,3 @@
|
|
1
1
|
import { type Tree } from '@nx/devkit';
|
2
2
|
import type { NormalizedSchema } from './normalized-schema';
|
3
|
-
export declare function
|
3
|
+
export declare function updateTsconfigFiles(tree: Tree, options: NormalizedSchema): void;
|
@@ -0,0 +1,76 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.updateTsconfigFiles = updateTsconfigFiles;
|
4
|
+
const devkit_1 = require("@nx/devkit");
|
5
|
+
const js_1 = require("@nx/js");
|
6
|
+
const configuration_1 = require("@nx/js/src/utils/typescript/configuration");
|
7
|
+
const semver_1 = require("semver");
|
8
|
+
const ensure_typescript_1 = require("@nx/js/src/utils/typescript/ensure-typescript");
|
9
|
+
const update_app_editor_tsconfig_excluded_files_1 = require("../../utils/update-app-editor-tsconfig-excluded-files");
|
10
|
+
const version_utils_1 = require("../../utils/version-utils");
|
11
|
+
const enable_strict_type_checking_1 = require("./enable-strict-type-checking");
|
12
|
+
function updateTsconfigFiles(tree, options) {
|
13
|
+
(0, enable_strict_type_checking_1.enableStrictTypeChecking)(tree, options);
|
14
|
+
updateEditorTsConfig(tree, options);
|
15
|
+
const compilerOptions = {
|
16
|
+
skipLibCheck: true,
|
17
|
+
experimentalDecorators: true,
|
18
|
+
importHelpers: true,
|
19
|
+
target: 'es2022',
|
20
|
+
moduleResolution: 'bundler',
|
21
|
+
};
|
22
|
+
const rootTsConfigPath = (0, js_1.getRootTsConfigFileName)(tree);
|
23
|
+
const { major: angularMajorVersion, version: angularVersion } = (0, version_utils_1.getInstalledAngularVersionInfo)(tree);
|
24
|
+
if ((0, semver_1.lt)(angularVersion, '18.1.0')) {
|
25
|
+
compilerOptions.useDefineForClassFields = false;
|
26
|
+
}
|
27
|
+
if ((0, semver_1.gte)(angularVersion, '18.2.0')) {
|
28
|
+
compilerOptions.isolatedModules = true;
|
29
|
+
}
|
30
|
+
if ((0, semver_1.gte)(angularVersion, '19.1.0')) {
|
31
|
+
// Angular started warning about emitDecoratorMetadata and isolatedModules
|
32
|
+
// in v19.1.0. If enabled in the root tsconfig, we need to disable it.
|
33
|
+
if (shouldDisableEmitDecoratorMetadata(tree, rootTsConfigPath)) {
|
34
|
+
compilerOptions.emitDecoratorMetadata = false;
|
35
|
+
}
|
36
|
+
}
|
37
|
+
if (angularMajorVersion >= 20) {
|
38
|
+
compilerOptions.module = 'preserve';
|
39
|
+
}
|
40
|
+
else {
|
41
|
+
compilerOptions.module = 'es2022';
|
42
|
+
if (options.bundler === 'esbuild') {
|
43
|
+
compilerOptions.esModuleInterop = true;
|
44
|
+
}
|
45
|
+
}
|
46
|
+
(0, devkit_1.updateJson)(tree, `${options.appProjectRoot}/tsconfig.json`, (json) => {
|
47
|
+
json.compilerOptions = {
|
48
|
+
...json.compilerOptions,
|
49
|
+
...compilerOptions,
|
50
|
+
};
|
51
|
+
json.compilerOptions = (0, configuration_1.getNeededCompilerOptionOverrides)(tree, json.compilerOptions, rootTsConfigPath);
|
52
|
+
return json;
|
53
|
+
});
|
54
|
+
}
|
55
|
+
function updateEditorTsConfig(tree, options) {
|
56
|
+
const appTsConfig = (0, devkit_1.readJson)(tree, (0, devkit_1.joinPathFragments)(options.appProjectRoot, 'tsconfig.app.json'));
|
57
|
+
const types = appTsConfig?.compilerOptions?.types ?? [];
|
58
|
+
if (types?.length) {
|
59
|
+
(0, devkit_1.updateJson)(tree, (0, devkit_1.joinPathFragments)(options.appProjectRoot, 'tsconfig.editor.json'), (json) => {
|
60
|
+
json.compilerOptions ??= {};
|
61
|
+
json.compilerOptions.types = Array.from(new Set(types));
|
62
|
+
return json;
|
63
|
+
});
|
64
|
+
}
|
65
|
+
const project = (0, devkit_1.readProjectConfiguration)(tree, options.name);
|
66
|
+
(0, update_app_editor_tsconfig_excluded_files_1.updateAppEditorTsConfigExcludedFiles)(tree, project);
|
67
|
+
}
|
68
|
+
function shouldDisableEmitDecoratorMetadata(tree, tsConfigPath) {
|
69
|
+
const ts = (0, ensure_typescript_1.ensureTypescript)();
|
70
|
+
const tsSysFromTree = {
|
71
|
+
...ts.sys,
|
72
|
+
readFile: (path) => tree.read(path, 'utf-8'),
|
73
|
+
};
|
74
|
+
const parsed = ts.parseJsonConfigFileContent(ts.readConfigFile(tsConfigPath, tsSysFromTree.readFile).config, tsSysFromTree, tree.root);
|
75
|
+
return parsed.options.emitDecoratorMetadata === true;
|
76
|
+
}
|
@@ -177,7 +177,7 @@
|
|
177
177
|
"default": false
|
178
178
|
},
|
179
179
|
"serverRouting": {
|
180
|
-
"description": "Creates a server application using the Server Routing and App Engine APIs (Developer Preview). _Note: this is only supported in Angular versions
|
180
|
+
"description": "Creates a server application using the Server Routing and App Engine APIs for application using the `application` builder (Developer Preview). _Note: this is only supported in Angular versions 19.x.x_. From Angular 20 onwards, SSR will always enable server routing when using the `application` builder.",
|
181
181
|
"type": "boolean"
|
182
182
|
}
|
183
183
|
},
|
@@ -22,10 +22,11 @@ async function componentGenerator(tree, rawOptions) {
|
|
22
22
|
viewEncapsulation: options.viewEncapsulation,
|
23
23
|
displayBlock: options.displayBlock,
|
24
24
|
selector: options.selector,
|
25
|
-
// Angular v19 or higher defaults to true, while
|
25
|
+
// Angular v19 or higher defaults to true, while lower versions default to false
|
26
26
|
setStandalone: (angularMajorVersion >= 19 && !options.standalone) ||
|
27
27
|
(angularMajorVersion < 19 && options.standalone),
|
28
28
|
angularMajorVersion,
|
29
|
+
ngext: options.ngHtml ? '.ng' : '',
|
29
30
|
tpl: '',
|
30
31
|
});
|
31
32
|
if (options.skipTests) {
|
@@ -41,7 +42,17 @@ async function componentGenerator(tree, rawOptions) {
|
|
41
42
|
tree.delete(pathToStyleFile);
|
42
43
|
}
|
43
44
|
if (!options.skipImport && !options.standalone) {
|
44
|
-
|
45
|
+
let modulePath;
|
46
|
+
try {
|
47
|
+
modulePath = (0, lib_1.findModuleFromOptions)(tree, options, options.projectRoot);
|
48
|
+
}
|
49
|
+
catch (e) {
|
50
|
+
modulePath = (0, lib_1.findModuleFromOptions)(tree, {
|
51
|
+
...options,
|
52
|
+
moduleExt: '-module.ts',
|
53
|
+
routingModuleExt: '-routing-module.ts',
|
54
|
+
}, options.projectRoot);
|
55
|
+
}
|
45
56
|
(0, utils_1.addToNgModule)(tree, options.directory, modulePath, options.name, options.symbolName, options.fileName, 'declarations', true, options.export);
|
46
57
|
}
|
47
58
|
(0, lib_1.exportComponentInEntryPoint)(tree, options);
|
@@ -6,7 +6,7 @@ import { CommonModule } from '@angular/common';<% } %>
|
|
6
6
|
standalone: <%= standalone %>,<% } %><% if(standalone) { %>
|
7
7
|
imports: [CommonModule],<%}%><% if(inlineTemplate) { %>
|
8
8
|
template: `<p><%= name %> works!</p>`<% } else { %>
|
9
|
-
templateUrl: './<%= fileName %>.html'<% } if(inlineStyle) { %>,
|
9
|
+
templateUrl: './<%= fileName %><%= ngext %>.html'<% } if(inlineStyle) { %>,
|
10
10
|
styles: `<% if(displayBlock){ %>
|
11
11
|
:host {
|
12
12
|
display: block;
|
@@ -21,7 +21,17 @@ function exportComponentInEntryPoint(tree, schema) {
|
|
21
21
|
return;
|
22
22
|
}
|
23
23
|
if (!schema.standalone) {
|
24
|
-
|
24
|
+
let modulePath;
|
25
|
+
try {
|
26
|
+
modulePath = (0, module_1.findModuleFromOptions)(tree, schema, root);
|
27
|
+
}
|
28
|
+
catch (e) {
|
29
|
+
modulePath = (0, module_1.findModuleFromOptions)(tree, {
|
30
|
+
...schema,
|
31
|
+
moduleExt: '-module.ts',
|
32
|
+
routingModuleExt: '-routing-module.ts',
|
33
|
+
}, root);
|
34
|
+
}
|
25
35
|
if (!shouldExportInEntryPoint(tree, entryPointPath, modulePath)) {
|
26
36
|
return;
|
27
37
|
}
|
@@ -1,3 +1,8 @@
|
|
1
1
|
import type { Tree } from '@nx/devkit';
|
2
|
-
|
3
|
-
|
2
|
+
export type ModuleOptions = {
|
3
|
+
directory: string;
|
4
|
+
module?: string;
|
5
|
+
moduleExt?: string;
|
6
|
+
routingModuleExt?: string;
|
7
|
+
};
|
8
|
+
export declare function findModuleFromOptions(tree: Tree, options: ModuleOptions, projectRoot: string): string;
|
@@ -5,11 +5,13 @@ const devkit_1 = require("@nx/devkit");
|
|
5
5
|
const path_1 = require("path");
|
6
6
|
// Adapted from https://github.com/angular/angular-cli/blob/732aab5fa7e63618c89dfbbb6f78753f706d7014/packages/schematics/angular/utility/find-module.ts#L29
|
7
7
|
// to match the logic from the Angular CLI component schematic.
|
8
|
-
const
|
9
|
-
const
|
8
|
+
const MODULE_EXT = '.module.ts';
|
9
|
+
const ROUTING_MODULE_EXT = '-routing.module.ts';
|
10
10
|
function findModuleFromOptions(tree, options, projectRoot) {
|
11
|
+
const moduleExt = options.moduleExt || MODULE_EXT;
|
12
|
+
const routingModuleExt = options.routingModuleExt || ROUTING_MODULE_EXT;
|
11
13
|
if (!options.module) {
|
12
|
-
return (0, devkit_1.normalizePath)(findModule(tree, options.directory, projectRoot));
|
14
|
+
return (0, devkit_1.normalizePath)(findModule(tree, options.directory, projectRoot, moduleExt, routingModuleExt));
|
13
15
|
}
|
14
16
|
else {
|
15
17
|
const modulePath = (0, devkit_1.joinPathFragments)(options.directory, options.module);
|
@@ -32,7 +34,7 @@ function findModuleFromOptions(tree, options, projectRoot) {
|
|
32
34
|
`${moduleBaseName}${moduleExt}`,
|
33
35
|
].map((x) => (0, devkit_1.joinPathFragments)(c, x));
|
34
36
|
for (const sc of candidateFiles) {
|
35
|
-
if (tree.isFile(sc)) {
|
37
|
+
if (tree.isFile(sc) && tree.read(sc, 'utf-8').includes('@NgModule')) {
|
36
38
|
return (0, devkit_1.normalizePath)(sc);
|
37
39
|
}
|
38
40
|
}
|
@@ -41,7 +43,7 @@ function findModuleFromOptions(tree, options, projectRoot) {
|
|
41
43
|
`Looked in the following directories:\n ${candidatesDirs.join('\n ')}`);
|
42
44
|
}
|
43
45
|
}
|
44
|
-
function findModule(tree, generateDir, projectRoot) {
|
46
|
+
function findModule(tree, generateDir, projectRoot, moduleExt = MODULE_EXT, routingModuleExt = ROUTING_MODULE_EXT) {
|
45
47
|
let dir = generateDir;
|
46
48
|
const projectRootParent = (0, path_1.dirname)(projectRoot);
|
47
49
|
while (dir !== projectRootParent) {
|
@@ -5,12 +5,16 @@ const devkit_1 = require("@nx/devkit");
|
|
5
5
|
const artifact_name_and_directory_utils_1 = require("@nx/devkit/src/generators/artifact-name-and-directory-utils");
|
6
6
|
const selector_1 = require("../../utils/selector");
|
7
7
|
const validations_1 = require("../../utils/validations");
|
8
|
+
const version_utils_1 = require("../../utils/version-utils");
|
8
9
|
async function normalizeOptions(tree, options) {
|
9
|
-
|
10
|
+
const { major: angularMajorVersion } = (0, version_utils_1.getInstalledAngularVersionInfo)(tree);
|
11
|
+
if (angularMajorVersion < 20) {
|
12
|
+
options.type ??= 'component';
|
13
|
+
}
|
10
14
|
const { artifactName: name, directory, fileName, filePath, project: projectName, } = await (0, artifact_name_and_directory_utils_1.determineArtifactNameAndDirectoryOptions)(tree, {
|
11
15
|
name: options.name,
|
12
16
|
path: options.path,
|
13
|
-
suffix: options.type
|
17
|
+
suffix: options.type,
|
14
18
|
allowedFileExtensions: ['ts'],
|
15
19
|
fileExtension: 'ts',
|
16
20
|
});
|
@@ -18,7 +22,7 @@ async function normalizeOptions(tree, options) {
|
|
18
22
|
throw new Error(`The component name '${name}' cannot contain a slash as it must be a valid JS symbol. Please use a different name.`);
|
19
23
|
}
|
20
24
|
const { className } = (0, devkit_1.names)(name);
|
21
|
-
const
|
25
|
+
const suffixClassName = options.type ? (0, devkit_1.names)(options.type).className : '';
|
22
26
|
const symbolName = `${className}${suffixClassName}`;
|
23
27
|
(0, validations_1.validateClassName)(symbolName);
|
24
28
|
const { prefix, root, sourceRoot } = (0, devkit_1.readProjectConfiguration)(tree, projectName);
|
@@ -95,8 +95,7 @@
|
|
95
95
|
},
|
96
96
|
"type": {
|
97
97
|
"type": "string",
|
98
|
-
"description": "
|
99
|
-
"default": "component"
|
98
|
+
"description": "Append a custom type to the component's filename. It defaults to 'component' for Angular versions below v20. For Angular v20 and above, no type is appended unless specified."
|
100
99
|
},
|
101
100
|
"export": {
|
102
101
|
"type": "boolean",
|
@@ -109,6 +108,11 @@
|
|
109
108
|
"default": false,
|
110
109
|
"description": "Use default export for the component instead of a named export."
|
111
110
|
},
|
111
|
+
"ngHtml": {
|
112
|
+
"type": "boolean",
|
113
|
+
"default": false,
|
114
|
+
"description": "Generate component template files with an '.ng.html' file extension instead of '.html'."
|
115
|
+
},
|
112
116
|
"skipFormat": {
|
113
117
|
"description": "Skip formatting files.",
|
114
118
|
"type": "boolean",
|