@nx/angular 21.2.0-canary.20250523-560a53e → 21.2.0-canary.20250527-4a94841
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 +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 +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/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/schema.json +1 -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/schema.json +1 -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/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 +20 -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 +3 -3
- package/src/utils/versions.js +3 -3
- 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,66 @@
|
|
1
|
+
import {
|
2
|
+
AngularNodeAppEngine,
|
3
|
+
createNodeRequestHandler,
|
4
|
+
isMainModule,
|
5
|
+
writeResponseToNodeResponse,
|
6
|
+
} from '@angular/ssr/node';
|
7
|
+
import express from 'express';
|
8
|
+
import { dirname, resolve } from 'node:path';
|
9
|
+
import { fileURLToPath } from 'node:url';
|
10
|
+
|
11
|
+
const serverDistFolder = dirname(fileURLToPath(import.meta.url));
|
12
|
+
const browserDistFolder = resolve(serverDistFolder, '../<%= browserDistDirectory %>');
|
13
|
+
|
14
|
+
const app = express();
|
15
|
+
const angularApp = new AngularNodeAppEngine();
|
16
|
+
|
17
|
+
/**
|
18
|
+
* Example Express Rest API endpoints can be defined here.
|
19
|
+
* Uncomment and define endpoints as necessary.
|
20
|
+
*
|
21
|
+
* Example:
|
22
|
+
* ```ts
|
23
|
+
* app.get('/api/**', (req, res) => {
|
24
|
+
* // Handle API request
|
25
|
+
* });
|
26
|
+
* ```
|
27
|
+
*/
|
28
|
+
|
29
|
+
/**
|
30
|
+
* Serve static files from /<%= browserDistDirectory %>
|
31
|
+
*/
|
32
|
+
app.use(
|
33
|
+
express.static(browserDistFolder, {
|
34
|
+
maxAge: '1y',
|
35
|
+
index: false,
|
36
|
+
redirect: false,
|
37
|
+
})
|
38
|
+
);
|
39
|
+
|
40
|
+
/**
|
41
|
+
* Handle all other requests by rendering the Angular application.
|
42
|
+
*/
|
43
|
+
app.use('/**', (req, res, next) => {
|
44
|
+
angularApp
|
45
|
+
.handle(req)
|
46
|
+
.then((response) =>
|
47
|
+
response ? writeResponseToNodeResponse(response, res) : next()
|
48
|
+
)
|
49
|
+
.catch(next);
|
50
|
+
});
|
51
|
+
|
52
|
+
/**
|
53
|
+
* Start the server if this module is the main entry point.
|
54
|
+
* The server listens on the port defined by the `PORT` environment variable, or defaults to <%= serverPort %>.
|
55
|
+
*/
|
56
|
+
if (isMainModule(import.meta.url)) {
|
57
|
+
const port = process.env['PORT'] || <%= serverPort %>;
|
58
|
+
app.listen(port, () => {
|
59
|
+
console.log(`Node Express server listening on http://localhost:${port}`);
|
60
|
+
});
|
61
|
+
}
|
62
|
+
|
63
|
+
/**
|
64
|
+
* Request handler used by the Angular CLI (for dev-server and during build) or Firebase Cloud Functions.
|
65
|
+
*/
|
66
|
+
export const reqHandler = createNodeRequestHandler(app);
|
@@ -0,0 +1,7 @@
|
|
1
|
+
import { bootstrapApplication } from '@angular/platform-browser';
|
2
|
+
import { <%= appSymbolName %> } from './app/<%= appFileName %>';
|
3
|
+
import { config } from './app/app.config.server';
|
4
|
+
|
5
|
+
const bootstrap = () => bootstrapApplication(<%= appSymbolName %>, config);
|
6
|
+
|
7
|
+
export default bootstrap;
|
@@ -0,0 +1,12 @@
|
|
1
|
+
import { mergeApplicationConfig, ApplicationConfig } from '@angular/core';
|
2
|
+
import { provideServerRendering, withRoutes } from '@angular/ssr';
|
3
|
+
import { appConfig } from './app.config';
|
4
|
+
import { serverRoutes } from './app.routes.server';
|
5
|
+
|
6
|
+
const serverConfig: ApplicationConfig = {
|
7
|
+
providers: [
|
8
|
+
provideServerRendering(withRoutes(serverRoutes))
|
9
|
+
]
|
10
|
+
};
|
11
|
+
|
12
|
+
export const config = mergeApplicationConfig(appConfig, serverConfig);
|
@@ -0,0 +1 @@
|
|
1
|
+
export { <%= rootModuleClassName %> as default } from './app/<%= rootModuleFileName.slice(0, -3) %>';
|
package/src/generators/setup-ssr/files/v20+/server-builder/ngmodule-src/app/__rootModuleFileName__
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
import { NgModule } from '@angular/core';
|
2
|
+
import { ServerModule } from '@angular/platform-server';
|
3
|
+
|
4
|
+
import { AppModule } from './app<%= moduleTypeSeparator %>module';
|
5
|
+
import { <%= appSymbolName %> } from './<%= appFileName %>';
|
6
|
+
|
7
|
+
@NgModule({
|
8
|
+
imports: [
|
9
|
+
AppModule,
|
10
|
+
ServerModule,
|
11
|
+
],
|
12
|
+
bootstrap: [<%= appSymbolName %>],
|
13
|
+
})
|
14
|
+
export class <%= rootModuleClassName %> {}
|
@@ -0,0 +1,18 @@
|
|
1
|
+
/* To learn more about Typescript configuration file: https://www.typescriptlang.org/docs/handbook/tsconfig-json.html. */
|
2
|
+
/* To learn more about Angular compiler options: https://angular.dev/reference/configs/angular-compiler-options. */
|
3
|
+
{
|
4
|
+
"extends": "./tsconfig.app.json",
|
5
|
+
"compilerOptions": {
|
6
|
+
"outDir": "<%= rootOffset %>out-tsc/server",
|
7
|
+
"module": "commonjs",
|
8
|
+
"moduleResolution": "node10",
|
9
|
+
"types": [
|
10
|
+
"node"<% if (hasLocalizePackage) { %>,
|
11
|
+
"@angular/localize"<% } %>
|
12
|
+
]
|
13
|
+
},
|
14
|
+
"files": [
|
15
|
+
"src/<%= main %>",
|
16
|
+
"src/server.ts"
|
17
|
+
]
|
18
|
+
}
|
@@ -0,0 +1,69 @@
|
|
1
|
+
import 'zone.js/node';
|
2
|
+
|
3
|
+
import { APP_BASE_HREF } from '@angular/common';
|
4
|
+
import { CommonEngine } from '@angular/ssr/node';
|
5
|
+
import * as express from 'express';
|
6
|
+
import { existsSync } from 'node:fs';
|
7
|
+
import { join } from 'node:path';
|
8
|
+
import <% if (standalone) { %>bootstrap<% } else { %><%= rootModuleClassName %><% } %> from './<%= main.slice(0, -3) %>';
|
9
|
+
|
10
|
+
// The Express app is exported so that it can be used by serverless Functions.
|
11
|
+
export function app(): express.Express {
|
12
|
+
const server = express();
|
13
|
+
const distFolder = join(process.cwd(), '<%= browserDistDirectory %>');
|
14
|
+
const indexHtml = existsSync(join(distFolder, 'index.original.html'))
|
15
|
+
? join(distFolder, 'index.original.html')
|
16
|
+
: join(distFolder, 'index.html');
|
17
|
+
|
18
|
+
const commonEngine = new CommonEngine();
|
19
|
+
|
20
|
+
server.set('view engine', 'html');
|
21
|
+
server.set('views', distFolder);
|
22
|
+
|
23
|
+
// Example Express Rest API endpoints
|
24
|
+
// server.get('/api/**', (req, res) => { });
|
25
|
+
// Serve static files from /browser
|
26
|
+
server.get('*.*', express.static(distFolder, {
|
27
|
+
maxAge: '1y'
|
28
|
+
}));
|
29
|
+
|
30
|
+
// All regular routes use the Angular engine
|
31
|
+
server.get('*', (req, res, next) => {
|
32
|
+
const { protocol, originalUrl, baseUrl, headers } = req;
|
33
|
+
|
34
|
+
commonEngine
|
35
|
+
.render({
|
36
|
+
bootstrap<% if (!standalone) { %>: <%= rootModuleClassName %><% } %>,
|
37
|
+
documentFilePath: indexHtml,
|
38
|
+
url: `${protocol}://${headers.host}${originalUrl}`,
|
39
|
+
publicPath: distFolder,
|
40
|
+
providers: [{ provide: APP_BASE_HREF, useValue: baseUrl }],
|
41
|
+
})
|
42
|
+
.then((html) => res.send(html))
|
43
|
+
.catch((err) => next(err));
|
44
|
+
});
|
45
|
+
|
46
|
+
return server;
|
47
|
+
}
|
48
|
+
|
49
|
+
function run(): void {
|
50
|
+
const port = process.env['PORT'] || <%= serverPort %>;
|
51
|
+
|
52
|
+
// Start up the Node server
|
53
|
+
const server = app();
|
54
|
+
server.listen(port, () => {
|
55
|
+
console.log(`Node Express server listening on http://localhost:${port}`);
|
56
|
+
});
|
57
|
+
}
|
58
|
+
|
59
|
+
// Webpack will replace 'require' with '__webpack_require__'
|
60
|
+
// '__non_webpack_require__' is a proxy to Node 'require'
|
61
|
+
// The below code is to ensure that the server is run only when not requiring the bundle.
|
62
|
+
declare const __non_webpack_require__: NodeRequire;
|
63
|
+
const mainModule = __non_webpack_require__.main;
|
64
|
+
const moduleFilename = mainModule && mainModule.filename || '';
|
65
|
+
if (moduleFilename === __filename || moduleFilename.includes('iisnode')) {
|
66
|
+
run();
|
67
|
+
}
|
68
|
+
|
69
|
+
export default <% if (standalone) { %>bootstrap<% } else { %><%= rootModuleClassName %><% } %>;
|
@@ -0,0 +1,7 @@
|
|
1
|
+
import { bootstrapApplication } from '@angular/platform-browser';
|
2
|
+
import { <%= appSymbolName %> } from './app/<%= appFileName %>';
|
3
|
+
import { config } from './app/app.config.server';
|
4
|
+
|
5
|
+
const bootstrap = () => bootstrapApplication(<%= appSymbolName %>, config);
|
6
|
+
|
7
|
+
export default bootstrap;
|
@@ -0,0 +1,11 @@
|
|
1
|
+
import { mergeApplicationConfig, ApplicationConfig } from '@angular/core';
|
2
|
+
import { provideServerRendering } from '@angular/ssr';
|
3
|
+
import { appConfig } from './app.config';
|
4
|
+
|
5
|
+
const serverConfig: ApplicationConfig = {
|
6
|
+
providers: [
|
7
|
+
provideServerRendering()
|
8
|
+
]
|
9
|
+
};
|
10
|
+
|
11
|
+
export const config = mergeApplicationConfig(appConfig, serverConfig);
|
@@ -2,24 +2,27 @@
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
3
3
|
exports.addDependencies = addDependencies;
|
4
4
|
const devkit_1 = require("@nx/devkit");
|
5
|
-
const semver_1 = require("semver");
|
6
5
|
const version_utils_1 = require("../../utils/version-utils");
|
7
6
|
function addDependencies(tree, isUsingApplicationBuilder) {
|
8
7
|
const pkgVersions = (0, version_utils_1.versions)(tree);
|
9
|
-
const { version: angularVersion } = (0, version_utils_1.getInstalledAngularVersionInfo)(tree);
|
10
8
|
const dependencies = {
|
11
|
-
'@angular/platform-server': (0, version_utils_1.
|
12
|
-
|
9
|
+
'@angular/platform-server': (0, version_utils_1.getInstalledPackageVersion)(tree, '@angular/platform-server') ??
|
10
|
+
pkgVersions.angularVersion,
|
13
11
|
express: pkgVersions.expressVersion,
|
14
12
|
};
|
15
13
|
const devDependencies = {
|
16
14
|
'@types/express': pkgVersions.typesExpressVersion,
|
17
15
|
};
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
if (!isUsingApplicationBuilder && (0, semver_1.gte)(angularVersion, '17.1.0')) {
|
16
|
+
const angularDevkitVersion = (0, version_utils_1.getInstalledAngularDevkitVersion)(tree) ?? pkgVersions.angularDevkitVersion;
|
17
|
+
dependencies['@angular/ssr'] = angularDevkitVersion;
|
18
|
+
if (!isUsingApplicationBuilder) {
|
22
19
|
devDependencies['browser-sync'] = pkgVersions.browserSyncVersion;
|
23
20
|
}
|
21
|
+
else {
|
22
|
+
const { major: angularMajorVersion } = (0, version_utils_1.getInstalledAngularVersionInfo)(tree);
|
23
|
+
if (angularMajorVersion >= 20) {
|
24
|
+
dependencies['@angular-devkit/build-angular'] = angularDevkitVersion;
|
25
|
+
}
|
26
|
+
}
|
24
27
|
(0, devkit_1.addDependenciesToPackageJson)(tree, dependencies, devDependencies);
|
25
28
|
}
|
@@ -14,9 +14,16 @@ function addHydration(tree, options) {
|
|
14
14
|
tsModule = (0, ensure_typescript_1.ensureTypescript)();
|
15
15
|
tsquery = require('@phenomnomnominal/tsquery').tsquery;
|
16
16
|
}
|
17
|
-
|
18
|
-
|
19
|
-
|
17
|
+
let pathToClientConfigFile;
|
18
|
+
if (options.standalone) {
|
19
|
+
pathToClientConfigFile = (0, devkit_1.joinPathFragments)(projectConfig.sourceRoot, 'app/app.config.ts');
|
20
|
+
}
|
21
|
+
else {
|
22
|
+
pathToClientConfigFile = (0, devkit_1.joinPathFragments)(projectConfig.sourceRoot, 'app/app.module.ts');
|
23
|
+
if (!tree.exists(pathToClientConfigFile)) {
|
24
|
+
pathToClientConfigFile = (0, devkit_1.joinPathFragments)(projectConfig.sourceRoot, 'app/app-module.ts');
|
25
|
+
}
|
26
|
+
}
|
20
27
|
const sourceText = tree.read(pathToClientConfigFile, 'utf-8');
|
21
28
|
let sourceFile = tsModule.createSourceFile(pathToClientConfigFile, sourceText, tsModule.ScriptTarget.Latest, true);
|
22
29
|
const provideClientHydrationCallExpression = tsquery(sourceFile, 'ObjectLiteralExpression PropertyAssignment:has(Identifier[name=providers]) ArrayLiteralExpression CallExpression:has(Identifier[name=provideClientHydration])')[0];
|
@@ -14,8 +14,13 @@ function addServerFile(tree, options) {
|
|
14
14
|
const { major: angularMajorVersion } = (0, version_utils_1.getInstalledAngularVersionInfo)(tree);
|
15
15
|
const baseFilesPath = (0, path_1.join)(__dirname, '..', 'files');
|
16
16
|
let pathToFiles;
|
17
|
-
if (angularMajorVersion >=
|
18
|
-
pathToFiles = (0, path_1.join)(baseFilesPath, '
|
17
|
+
if (angularMajorVersion >= 20) {
|
18
|
+
pathToFiles = (0, path_1.join)(baseFilesPath, 'v20+', options.isUsingApplicationBuilder
|
19
|
+
? 'application-builder'
|
20
|
+
: 'server-builder', 'server');
|
21
|
+
}
|
22
|
+
else if (angularMajorVersion === 19) {
|
23
|
+
pathToFiles = (0, path_1.join)(baseFilesPath, 'v19', options.isUsingApplicationBuilder
|
19
24
|
? 'application-builder' +
|
20
25
|
(options.serverRouting ? '' : '-common-engine')
|
21
26
|
: 'server-builder', 'server');
|
@@ -3,8 +3,10 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.generateSSRFiles = generateSSRFiles;
|
4
4
|
const devkit_1 = require("@nx/devkit");
|
5
5
|
const path_1 = require("path");
|
6
|
-
const version_utils_1 = require("../../utils/version-utils");
|
7
6
|
const semver_1 = require("semver");
|
7
|
+
const app_components_info_1 = require("../../utils/app-components-info");
|
8
|
+
const artifact_types_1 = require("../../utils/artifact-types");
|
9
|
+
const version_utils_1 = require("../../utils/version-utils");
|
8
10
|
function generateSSRFiles(tree, options) {
|
9
11
|
const project = (0, devkit_1.readProjectConfiguration)(tree, options.project);
|
10
12
|
if (project.targets.server ||
|
@@ -16,8 +18,13 @@ function generateSSRFiles(tree, options) {
|
|
16
18
|
const { major: angularMajorVersion } = (0, version_utils_1.getInstalledAngularVersionInfo)(tree);
|
17
19
|
const baseFilesPath = (0, path_1.join)(__dirname, '..', 'files');
|
18
20
|
let pathToFiles;
|
19
|
-
if (angularMajorVersion >=
|
20
|
-
pathToFiles = (0, path_1.join)(baseFilesPath, '
|
21
|
+
if (angularMajorVersion >= 20) {
|
22
|
+
pathToFiles = (0, path_1.join)(baseFilesPath, 'v20+', options.isUsingApplicationBuilder
|
23
|
+
? 'application-builder'
|
24
|
+
: 'server-builder', options.standalone ? 'standalone-src' : 'ngmodule-src');
|
25
|
+
}
|
26
|
+
else if (angularMajorVersion === 19) {
|
27
|
+
pathToFiles = (0, path_1.join)(baseFilesPath, 'v19', options.isUsingApplicationBuilder
|
21
28
|
? 'application-builder'
|
22
29
|
: 'server-builder', options.standalone ? 'standalone-src' : 'ngmodule-src');
|
23
30
|
}
|
@@ -29,14 +36,20 @@ function generateSSRFiles(tree, options) {
|
|
29
36
|
const cleanedSsrVersion = ssrVersion
|
30
37
|
? (0, semver_1.clean)(ssrVersion) ?? (0, semver_1.coerce)(ssrVersion).version
|
31
38
|
: null;
|
39
|
+
const componentType = (0, artifact_types_1.getComponentType)(tree);
|
40
|
+
const appComponentInfo = (0, app_components_info_1.getAppComponentInfo)(tree, componentType ? `.${componentType}` : '', project);
|
41
|
+
const moduleTypeSeparator = (0, artifact_types_1.getModuleTypeSeparator)(tree);
|
32
42
|
(0, devkit_1.generateFiles)(tree, pathToFiles, sourceRoot, {
|
33
43
|
...options,
|
34
44
|
provideServerRoutingFn: !cleanedSsrVersion || (0, semver_1.gte)(cleanedSsrVersion, '19.2.0')
|
35
45
|
? 'provideServerRouting'
|
36
46
|
: 'provideServerRoutesConfig',
|
47
|
+
appFileName: appComponentInfo.extensionlessFileName,
|
48
|
+
appSymbolName: appComponentInfo.symbolName,
|
49
|
+
moduleTypeSeparator,
|
37
50
|
tpl: '',
|
38
51
|
});
|
39
|
-
if (angularMajorVersion
|
52
|
+
if (angularMajorVersion === 19 && !options.serverRouting) {
|
40
53
|
tree.delete((0, devkit_1.joinPathFragments)(sourceRoot, 'app/app.routes.server.ts'));
|
41
54
|
}
|
42
55
|
}
|
@@ -9,6 +9,14 @@ function setServerTsConfigOptionsForApplicationBuilder(tree, options) {
|
|
9
9
|
const { targets } = (0, devkit_1.readProjectConfiguration)(tree, options.project);
|
10
10
|
const tsConfigPath = targets.build.options.tsConfig;
|
11
11
|
(0, devkit_1.updateJson)(tree, tsConfigPath, (json) => {
|
12
|
+
json.compilerOptions ??= {};
|
13
|
+
const types = new Set(json.compilerOptions.types ?? []);
|
14
|
+
types.add('node');
|
15
|
+
json.compilerOptions.types = Array.from(types);
|
16
|
+
if (json.include?.includes('src/**/*.ts')) {
|
17
|
+
// server file is already included, no need to add it
|
18
|
+
return json;
|
19
|
+
}
|
12
20
|
const { major: angularMajorVersion } = (0, version_utils_1.getInstalledAngularVersionInfo)(tree);
|
13
21
|
const files = new Set(json.files ?? []);
|
14
22
|
files.add((0, devkit_1.joinPathFragments)('src', options.main));
|
@@ -19,10 +27,6 @@ function setServerTsConfigOptionsForApplicationBuilder(tree, options) {
|
|
19
27
|
files.add((0, devkit_1.joinPathFragments)(options.serverFileName));
|
20
28
|
}
|
21
29
|
json.files = Array.from(files);
|
22
|
-
json.compilerOptions ??= {};
|
23
|
-
const types = new Set(json.compilerOptions.types ?? []);
|
24
|
-
types.add('node');
|
25
|
-
json.compilerOptions.types = Array.from(types);
|
26
30
|
return json;
|
27
31
|
});
|
28
32
|
}
|
@@ -34,8 +38,11 @@ function generateTsConfigServerJsonForBrowserBuilder(tree, options) {
|
|
34
38
|
!!packageJson.devDependencies?.['@angular/localize'];
|
35
39
|
const baseFilesPath = (0, path_1.join)(__dirname, '..', 'files');
|
36
40
|
let pathToFiles;
|
37
|
-
if (angularMajorVersion >=
|
38
|
-
pathToFiles = (0, path_1.join)(baseFilesPath, '
|
41
|
+
if (angularMajorVersion >= 20) {
|
42
|
+
pathToFiles = (0, path_1.join)(baseFilesPath, 'v20+', 'server-builder', 'root');
|
43
|
+
}
|
44
|
+
else if (angularMajorVersion === 19) {
|
45
|
+
pathToFiles = (0, path_1.join)(baseFilesPath, 'v19', 'server-builder', 'root');
|
39
46
|
}
|
40
47
|
else {
|
41
48
|
pathToFiles = (0, path_1.join)(baseFilesPath, 'pre-v19', 'root');
|
@@ -46,4 +53,23 @@ function generateTsConfigServerJsonForBrowserBuilder(tree, options) {
|
|
46
53
|
hasLocalizePackage,
|
47
54
|
tpl: '',
|
48
55
|
});
|
56
|
+
(0, devkit_1.updateJson)(tree, (0, devkit_1.joinPathFragments)(project.root, 'tsconfig.json'), (json) => {
|
57
|
+
json.references ??= [];
|
58
|
+
json.references.push({
|
59
|
+
path: (0, devkit_1.joinPathFragments)(project.root, 'tsconfig.server.json'),
|
60
|
+
});
|
61
|
+
return json;
|
62
|
+
});
|
63
|
+
if (angularMajorVersion >= 20) {
|
64
|
+
(0, devkit_1.updateJson)(tree, options.buildTargetTsConfigPath, (json) => {
|
65
|
+
const exclude = new Set(json.exclude ?? []);
|
66
|
+
exclude.add(`src/${options.main}`);
|
67
|
+
exclude.add(`src/${options.serverFileName}`);
|
68
|
+
if (options.standalone) {
|
69
|
+
exclude.add('src/app/app.config.server.ts');
|
70
|
+
}
|
71
|
+
json.exclude = Array.from(exclude);
|
72
|
+
return json;
|
73
|
+
});
|
74
|
+
}
|
49
75
|
}
|
@@ -6,13 +6,13 @@ const prompt_1 = require("@nx/devkit/src/generators/prompt");
|
|
6
6
|
const ast_utils_1 = require("../../../utils/nx-devkit/ast-utils");
|
7
7
|
const version_utils_1 = require("../../utils/version-utils");
|
8
8
|
async function normalizeOptions(tree, options) {
|
9
|
-
const { targets } = (0, devkit_1.readProjectConfiguration)(tree, options.project);
|
9
|
+
const { targets, root } = (0, devkit_1.readProjectConfiguration)(tree, options.project);
|
10
10
|
const isUsingApplicationBuilder = targets.build.executor === '@angular-devkit/build-angular:application' ||
|
11
11
|
targets.build.executor === '@angular/build:application' ||
|
12
12
|
targets.build.executor === '@nx/angular:application';
|
13
13
|
if (options.serverRouting === undefined && isUsingApplicationBuilder) {
|
14
14
|
const { major: angularMajorVersion } = (0, version_utils_1.getInstalledAngularVersionInfo)(tree);
|
15
|
-
if (angularMajorVersion
|
15
|
+
if (angularMajorVersion === 19) {
|
16
16
|
options.serverRouting = await (0, prompt_1.promptWhenInteractive)({
|
17
17
|
type: 'confirm',
|
18
18
|
name: 'serverRouting',
|
@@ -21,7 +21,7 @@ async function normalizeOptions(tree, options) {
|
|
21
21
|
}, { serverRouting: false }).then(({ serverRouting }) => serverRouting);
|
22
22
|
}
|
23
23
|
else {
|
24
|
-
options.serverRouting =
|
24
|
+
options.serverRouting = angularMajorVersion >= 20;
|
25
25
|
}
|
26
26
|
}
|
27
27
|
else if (options.serverRouting !== undefined &&
|
@@ -42,5 +42,7 @@ async function normalizeOptions(tree, options) {
|
|
42
42
|
hydration: options.hydration ?? true,
|
43
43
|
serverRouting: options.serverRouting,
|
44
44
|
isUsingApplicationBuilder,
|
45
|
+
buildTargetTsConfigPath: targets.build.options?.tsConfig ??
|
46
|
+
(0, devkit_1.joinPathFragments)(root, 'tsconfig.app.json'),
|
45
47
|
};
|
46
48
|
}
|
@@ -21,6 +21,11 @@ function updateProjectConfigForApplicationBuilder(tree, options) {
|
|
21
21
|
}
|
22
22
|
else {
|
23
23
|
outputPath = outputPath.base;
|
24
|
+
if (buildTarget.outputs && buildTarget.outputs.length > 0) {
|
25
|
+
buildTarget.outputs = buildTarget.outputs.map((output) => output === '{options.outputPath.base}'
|
26
|
+
? '{options.outputPath}'
|
27
|
+
: output);
|
28
|
+
}
|
24
29
|
}
|
25
30
|
}
|
26
31
|
const { major: angularMajorVersion } = (0, version_utils_1.getInstalledAngularVersionInfo)(tree);
|
@@ -8,8 +8,8 @@ function validateOptions(tree, options) {
|
|
8
8
|
validateProject(tree, options.project);
|
9
9
|
validateBuildTarget(tree, options.project);
|
10
10
|
const { major: angularMajorVersion, version: angularVersion } = (0, version_utils_1.getInstalledAngularVersionInfo)(tree);
|
11
|
-
if (angularMajorVersion
|
12
|
-
throw new Error(`The "serverRouting" option is only supported in Angular versions
|
11
|
+
if (angularMajorVersion !== 19 && options.serverRouting !== undefined) {
|
12
|
+
throw new Error(`The "serverRouting" option is only supported in Angular versions 19.x.x. You are using Angular ${angularVersion}.`);
|
13
13
|
}
|
14
14
|
}
|
15
15
|
function validateProject(tree, project) {
|
@@ -53,7 +53,7 @@
|
|
53
53
|
"default": true
|
54
54
|
},
|
55
55
|
"serverRouting": {
|
56
|
-
"description": "Creates a server application using the Server Routing and App Engine APIs (Developer Preview). _Note: this is only supported in Angular versions
|
56
|
+
"description": "Creates a server application using the Server Routing and App Engine APIs for application using the `application` builder (Developer Preview). _Note: this is only supported in Angular versions 19.x.x_. From Angular 20 onwards, SSR will always enable server routing when using the `application` builder.",
|
57
57
|
"type": "boolean"
|
58
58
|
},
|
59
59
|
"skipFormat": {
|
@@ -3,10 +3,15 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.addJest = addJest;
|
4
4
|
const devkit_1 = require("@nx/devkit");
|
5
5
|
const versions_1 = require("../../utils/versions");
|
6
|
+
const version_utils_1 = require("./version-utils");
|
6
7
|
async function addJest(tree, options) {
|
7
8
|
if (!options.skipPackageJson) {
|
8
9
|
process.env.npm_config_legacy_peer_deps ??= 'true';
|
9
|
-
(0,
|
10
|
+
const pkgVersions = (0, version_utils_1.versions)(tree);
|
11
|
+
(0, devkit_1.addDependenciesToPackageJson)(tree, {
|
12
|
+
// TODO(leo): jest-preset-angular still needs this until https://github.com/thymikee/jest-preset-angular/pull/3079 is merged
|
13
|
+
'@angular/platform-browser-dynamic': pkgVersions.angularVersion,
|
14
|
+
}, { 'jest-preset-angular': pkgVersions.jestPresetAngularVersion }, undefined, true);
|
10
15
|
}
|
11
16
|
const { configurationGenerator } = (0, devkit_1.ensurePackage)('@nx/jest', versions_1.nxVersion);
|
12
17
|
await configurationGenerator(tree, {
|
@@ -0,0 +1,9 @@
|
|
1
|
+
import { type ProjectConfiguration, type Tree } from '@nx/devkit';
|
2
|
+
export type ComponentMetadata = {
|
3
|
+
fileName: string;
|
4
|
+
extensionlessFileName: string;
|
5
|
+
path: string;
|
6
|
+
symbolName: string;
|
7
|
+
};
|
8
|
+
export declare function getAppComponentInfo(tree: Tree, componentFileSuffix: string, project: ProjectConfiguration): ComponentMetadata;
|
9
|
+
export declare function getNxWelcomeComponentInfo(tree: Tree, componentFileSuffix: string, project: ProjectConfiguration): ComponentMetadata;
|
@@ -0,0 +1,39 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.getAppComponentInfo = getAppComponentInfo;
|
4
|
+
exports.getNxWelcomeComponentInfo = getNxWelcomeComponentInfo;
|
5
|
+
const devkit_1 = require("@nx/devkit");
|
6
|
+
const node_path_1 = require("node:path");
|
7
|
+
const version_utils_1 = require("./version-utils");
|
8
|
+
function getAppComponentInfo(tree, componentFileSuffix, project) {
|
9
|
+
return getComponentInfo(tree, 'app', componentFileSuffix, project);
|
10
|
+
}
|
11
|
+
function getNxWelcomeComponentInfo(tree, componentFileSuffix, project) {
|
12
|
+
return getComponentInfo(tree, 'nx-welcome', componentFileSuffix, project);
|
13
|
+
}
|
14
|
+
// TODO(leo): follow this up and improve it by using static analysis
|
15
|
+
function getComponentInfo(tree, component, componentFileSuffix, project) {
|
16
|
+
let componentPath = (0, devkit_1.joinPathFragments)(project.sourceRoot, `app/${component}.component.ts`);
|
17
|
+
if (!tree.exists(componentPath)) {
|
18
|
+
componentPath = (0, devkit_1.joinPathFragments)(project.sourceRoot, `app/${component}.ts`);
|
19
|
+
}
|
20
|
+
if (!tree.exists(componentPath)) {
|
21
|
+
if (componentFileSuffix) {
|
22
|
+
componentPath = (0, devkit_1.joinPathFragments)(project.sourceRoot, `app/${component}${componentFileSuffix}.ts`);
|
23
|
+
}
|
24
|
+
}
|
25
|
+
if (!tree.exists(componentPath)) {
|
26
|
+
const { major: angularMajorVersion } = (0, version_utils_1.getInstalledAngularVersionInfo)(tree);
|
27
|
+
componentPath = (0, devkit_1.joinPathFragments)(project.sourceRoot, angularMajorVersion >= 20
|
28
|
+
? `app/${component}.ts`
|
29
|
+
: `app/${component}.component.ts`);
|
30
|
+
}
|
31
|
+
const fileName = (0, node_path_1.basename)(componentPath);
|
32
|
+
const extensionlessFileName = fileName.slice(0, -3);
|
33
|
+
return {
|
34
|
+
fileName,
|
35
|
+
extensionlessFileName,
|
36
|
+
path: componentPath,
|
37
|
+
symbolName: (0, devkit_1.names)(extensionlessFileName).className,
|
38
|
+
};
|
39
|
+
}
|
@@ -0,0 +1,33 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.getComponentType = getComponentType;
|
4
|
+
exports.getModuleTypeSeparator = getModuleTypeSeparator;
|
5
|
+
const devkit_1 = require("@nx/devkit");
|
6
|
+
const version_utils_1 = require("./version-utils");
|
7
|
+
function getComponentType(tree) {
|
8
|
+
const nxJson = (0, devkit_1.readNxJson)(tree);
|
9
|
+
let componentType = nxJson.generators?.['@nx/angular:component']?.type ??
|
10
|
+
nxJson.generators?.['@nx/angular']?.component?.type;
|
11
|
+
if (!componentType) {
|
12
|
+
const { major: angularMajorVersion } = (0, version_utils_1.getInstalledAngularVersionInfo)(tree);
|
13
|
+
if (angularMajorVersion < 20) {
|
14
|
+
componentType = 'component';
|
15
|
+
}
|
16
|
+
}
|
17
|
+
return componentType;
|
18
|
+
}
|
19
|
+
function getModuleTypeSeparator(tree) {
|
20
|
+
const nxJson = (0, devkit_1.readNxJson)(tree);
|
21
|
+
// We don't have a "module" generator but the @nx/angular collection extends
|
22
|
+
// from the @schematics/angular collection so the "module" generator is
|
23
|
+
// available there. We check for a generator default for each collection.
|
24
|
+
let typeSeparator = nxJson.generators?.['@nx/angular:module']?.typeSeparator ??
|
25
|
+
nxJson.generators?.['@nx/angular']?.module?.typeSeparator ??
|
26
|
+
nxJson.generators?.['@schematics/angular:module']?.typeSeparator ??
|
27
|
+
nxJson.generators?.['@schematics/angular']?.module?.typeSeparator;
|
28
|
+
if (!typeSeparator) {
|
29
|
+
const { major: angularMajorVersion } = (0, version_utils_1.getInstalledAngularVersionInfo)(tree);
|
30
|
+
typeSeparator = angularMajorVersion >= 20 ? '-' : '.';
|
31
|
+
}
|
32
|
+
return typeSeparator;
|
33
|
+
}
|
@@ -24,13 +24,12 @@ function ensureAngularDependencies(tree) {
|
|
24
24
|
dependencies['@angular/core'] = angularVersion;
|
25
25
|
dependencies['@angular/forms'] = angularVersion;
|
26
26
|
dependencies['@angular/platform-browser'] = angularVersion;
|
27
|
-
dependencies['@angular/platform-browser-dynamic'] = angularVersion;
|
28
27
|
dependencies['@angular/router'] = angularVersion;
|
29
28
|
dependencies.rxjs = rxjsVersion;
|
30
29
|
dependencies.tslib = tsLibVersion;
|
31
30
|
dependencies['zone.js'] = zoneJsVersion;
|
32
31
|
}
|
33
|
-
const installedAngularDevkitVersion = (0, version_utils_1.
|
32
|
+
const installedAngularDevkitVersion = (0, version_utils_1.getInstalledAngularDevkitVersion)(tree);
|
34
33
|
if (!installedAngularDevkitVersion) {
|
35
34
|
/**
|
36
35
|
* If `@angular-devkit/build-angular` is already installed, we assume the workspace
|
@@ -43,8 +42,12 @@ function ensureAngularDependencies(tree) {
|
|
43
42
|
}
|
44
43
|
// Ensure the `@nx/angular` peer dependencies are always installed.
|
45
44
|
const angularDevkitVersion = installedAngularDevkitVersion ?? pkgVersions.angularDevkitVersion;
|
46
|
-
devDependencies['@angular-devkit/build-angular'] = angularDevkitVersion;
|
47
45
|
devDependencies['@angular-devkit/schematics'] = angularDevkitVersion;
|
48
46
|
devDependencies['@schematics/angular'] = angularDevkitVersion;
|
47
|
+
const { major: angularMajorVersion } = (0, version_utils_1.getInstalledAngularVersionInfo)(tree);
|
48
|
+
if (angularMajorVersion < 20) {
|
49
|
+
devDependencies['@angular/build'] = angularDevkitVersion;
|
50
|
+
devDependencies['@angular-devkit/build-angular'] = angularDevkitVersion;
|
51
|
+
}
|
49
52
|
return (0, devkit_1.addDependenciesToPackageJson)(tree, dependencies, devDependencies, undefined, true);
|
50
53
|
}
|