@nx/angular 0.0.0-pr-30715-a5f5e3b → 0.0.0-pr-31313-387cdca
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/fesm2022/nx-angular-mf.mjs.map +1 -1
- package/fesm2022/nx-angular.mjs.map +1 -1
- package/index.d.ts +1 -2
- package/mf/index.d.ts +1 -71
- package/mf/mf.d.ts +69 -0
- package/migrations.json +0 -98
- package/package.json +16 -25
- package/plugins/component-testing.js +3 -8
- package/src/builders/dev-server/dev-server.impl.js +7 -4
- package/src/builders/dev-server/lib/normalize-options.js +6 -0
- package/src/builders/dev-server/lib/validate-options.js +4 -0
- package/src/builders/dev-server/schema.d.ts +15 -3
- package/src/builders/dev-server/schema.json +9 -3
- package/src/builders/webpack-browser/webpack-browser.impl.js +0 -2
- package/src/builders/webpack-server/webpack-server.impl.d.ts +1 -3
- package/src/builders/webpack-server/webpack-server.impl.js +0 -2
- package/src/executors/application/application.impl.d.ts +2 -2
- package/src/executors/application/application.impl.js +6 -11
- package/src/executors/application/schema.d.ts +1 -1
- package/src/executors/application/schema.json +10 -21
- package/src/executors/application/utils/normalize-options.js +1 -8
- package/src/executors/application/utils/validate-options.js +40 -10
- package/src/executors/extract-i18n/extract-i18n.impl.js +14 -6
- package/src/executors/extract-i18n/schema.d.ts +6 -1
- package/src/executors/module-federation-dev-server/lib/normalize-options.js +7 -1
- package/src/executors/module-federation-dev-server/schema.d.ts +15 -3
- package/src/executors/module-federation-dev-server/schema.json +15 -2
- package/src/executors/module-federation-ssr-dev-server/module-federation-ssr-dev-server.impl.js +8 -10
- package/src/executors/ng-packagr-lite/ng-packagr-adjustments/ng-package/entry-point/entry-point.d.ts +3 -6
- package/src/executors/ng-packagr-lite/ng-packagr-adjustments/ng-package/entry-point/entry-point.js +8 -46
- 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 +6 -22
- package/src/executors/ng-packagr-lite/schema.json +3 -2
- package/src/executors/package/package.impl.js +5 -1
- package/src/executors/package/schema.d.ts +1 -3
- package/src/executors/package/schema.json +3 -2
- package/src/executors/utilities/esbuild-extensions.d.ts +1 -2
- package/src/executors/utilities/ng-packagr/package-imports.d.ts +1 -3
- package/src/executors/utilities/ng-packagr/package-imports.js +2 -2
- package/src/executors/utilities/ng-packagr/pre-v19/stylesheet-processor.d.ts +24 -1
- package/src/executors/utilities/ng-packagr/pre-v19/stylesheet-processor.js +105 -12
- package/src/executors/utilities/ng-packagr/stylesheet-processor.di.js +8 -4
- package/src/executors/utilities/ng-packagr/v19+/stylesheet-processor.d.ts +1 -1
- package/src/executors/utilities/ng-packagr/v19+/stylesheet-processor.js +11 -18
- package/src/generators/add-linting/add-linting.js +0 -8
- package/src/generators/application/application.js +1 -21
- 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__ +29 -0
- package/src/generators/application/files/ng-module/src/app/{app__componentFileSuffix__.ts__tpl__ → app.component.ts__tpl__} +3 -3
- package/src/generators/application/files/ng-module/src/app/app.module.ts__tpl__ +17 -0
- package/src/generators/application/files/ng-module/src/main.ts__tpl__ +3 -11
- package/src/generators/application/files/nx-welcome/claimed/ng-module/src/app/{nx-welcome__componentFileSuffix__.ts__tpl__ → nx-welcome.component.ts__tpl__} +1 -1
- package/src/generators/application/files/nx-welcome/claimed/standalone/src/app/{nx-welcome__componentFileSuffix__.ts__tpl__ → nx-welcome.component.ts__tpl__} +1 -1
- package/src/generators/application/files/nx-welcome/not-configured/ng-module/src/app/{nx-welcome__componentFileSuffix__.ts__tpl__ → nx-welcome.component.ts__tpl__} +1 -1
- package/src/generators/application/files/nx-welcome/not-configured/standalone/src/app/{nx-welcome__componentFileSuffix__.ts__tpl__ → nx-welcome.component.ts__tpl__} +1 -1
- package/src/generators/application/files/nx-welcome/unclaimed/ng-module/src/app/{nx-welcome__componentFileSuffix__.ts__tpl__ → nx-welcome.component.ts__tpl__} +1 -1
- package/src/generators/application/files/nx-welcome/unclaimed/standalone/src/app/{nx-welcome__componentFileSuffix__.ts__tpl__ → nx-welcome.component.ts__tpl__} +1 -1
- 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__ +28 -0
- package/src/generators/application/files/standalone-components/src/app/{app__componentFileSuffix__.ts__tpl__ → app.component.ts__tpl__} +5 -5
- package/src/generators/application/files/standalone-components/src/app/app.config.ts__tpl__ +2 -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 +14 -15
- package/src/generators/application/lib/create-project.d.ts +1 -1
- package/src/generators/application/lib/create-project.js +26 -119
- package/src/generators/application/lib/enable-strict-type-checking.js +0 -3
- package/src/generators/application/schema.json +1 -1
- package/src/generators/component/component.js +2 -13
- package/src/generators/component/files/__fileName__.ts__tpl__ +1 -1
- package/src/generators/component/lib/component.js +1 -11
- package/src/generators/component/lib/module.d.ts +2 -7
- package/src/generators/component/lib/module.js +5 -7
- package/src/generators/component/lib/normalize-options.js +3 -7
- package/src/generators/component/schema.d.ts +0 -1
- package/src/generators/component/schema.json +2 -6
- package/src/generators/convert-to-application-executor/convert-to-application-executor.js +22 -19
- 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 +2 -7
- package/src/generators/directive/schema.d.ts +0 -1
- package/src/generators/directive/schema.json +2 -10
- 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/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 +0 -1
- package/src/generators/library/lib/create-files.js +1 -10
- package/src/generators/library/lib/enable-strict-type-checking.d.ts +1 -1
- package/src/generators/library/lib/enable-strict-type-checking.js +0 -3
- package/src/generators/library/lib/normalize-options.d.ts +3 -3
- package/src/generators/library/lib/normalize-options.js +1 -6
- package/src/generators/library/lib/normalized-schema.d.ts +0 -2
- 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 +1 -2
- 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 +0 -3
- package/src/generators/library-secondary-entry-point/schema.d.ts +0 -1
- package/src/generators/move/lib/update-module-name.js +10 -17
- package/src/generators/move/lib/update-secondary-entry-points.js +3 -0
- package/src/generators/ng-add/migrators/builders/angular-devkit-karma.migrator.js +1 -1
- package/src/generators/ng-add/migrators/projects/app.migrator.js +8 -43
- package/src/generators/ngrx/schema.json +3 -3
- package/src/generators/ngrx-root-store/lib/normalize-options.js +2 -9
- package/src/generators/pipe/lib/normalize-options.js +0 -4
- package/src/generators/pipe/pipe.js +1 -1
- package/src/generators/pipe/schema.d.ts +0 -1
- package/src/generators/pipe/schema.json +2 -11
- package/src/generators/remote/files/standalone/src/bootstrap.server.ts__tmpl__ +4 -4
- package/src/generators/remote/lib/update-ssr-setup.js +0 -5
- 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 +3 -1
- package/src/generators/scam/lib/normalize-options.js +3 -11
- package/src/generators/scam/schema.d.ts +0 -1
- package/src/generators/scam/schema.json +2 -1
- package/src/generators/scam-directive/lib/convert-directive-to-scam.js +3 -1
- package/src/generators/scam-directive/lib/normalize-options.js +2 -11
- package/src/generators/scam-directive/schema.d.ts +0 -2
- package/src/generators/scam-directive/schema.json +2 -10
- package/src/generators/scam-pipe/lib/convert-pipe-to-scam.js +3 -1
- package/src/generators/scam-pipe/lib/normalize-options.js +0 -8
- package/src/generators/scam-pipe/schema.d.ts +0 -2
- package/src/generators/scam-pipe/schema.json +0 -5
- package/src/generators/setup-mf/files/entry-module-files/{entry__componentFileSuffix__.ts__tmpl__ → entry.component.ts__tmpl__} +1 -1
- package/src/generators/setup-mf/files/entry-module-files/{__entryModuleFileName__.ts__tmpl__ → entry.module.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/host-files/app.component.spec.ts__tmpl__ +47 -0
- package/src/generators/setup-mf/files/standalone-entry-component-files/{entry__componentFileSuffix__.ts__tmpl__ → entry.component.ts__tmpl__} +3 -3
- package/src/generators/setup-mf/files/standalone-entry-component-files/entry.routes.ts__tmpl__ +2 -2
- 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 +3 -9
- package/src/generators/setup-mf/lib/add-remote-to-host.js +1 -11
- 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 +0 -1
- package/src/generators/setup-mf/lib/normalize-options.d.ts +1 -1
- package/src/generators/setup-mf/lib/normalize-options.js +0 -13
- 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 +14 -18
- package/src/generators/setup-mf/lib/setup-host-if-dynamic.js +5 -1
- 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 +9 -12
- 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 +0 -7
- package/src/generators/setup-ssr/lib/add-dependencies.js +7 -4
- package/src/generators/setup-ssr/lib/add-hydration.js +3 -10
- package/src/generators/setup-ssr/lib/add-server-file.js +2 -7
- package/src/generators/setup-ssr/lib/generate-files.js +4 -17
- package/src/generators/setup-ssr/lib/generate-server-ts-config.js +2 -5
- package/src/generators/setup-ssr/lib/normalize-options.js +2 -2
- package/src/generators/setup-ssr/lib/update-project-config.js +0 -5
- package/src/generators/setup-ssr/lib/validate-options.js +2 -2
- package/src/generators/setup-ssr/schema.json +1 -1
- package/src/generators/utils/add-jest.js +1 -6
- 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 +3 -6
- package/src/generators/utils/export-scam.d.ts +0 -1
- package/src/generators/utils/export-scam.js +2 -1
- package/src/generators/utils/find-module.js +13 -18
- package/src/generators/utils/storybook-ast/component-info.js +24 -40
- package/src/generators/utils/storybook-ast/module-info.d.ts +1 -1
- package/src/generators/utils/storybook-ast/module-info.js +8 -3
- 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/plugins/plugin.js +13 -22
- package/src/utils/backward-compatible-versions.d.ts +2 -2
- package/src/utils/backward-compatible-versions.js +21 -20
- package/src/utils/nx-devkit/ast-utils.js +3 -17
- package/src/utils/nx-devkit/testing.js +9 -9
- package/src/utils/versions.d.ts +4 -3
- package/src/utils/versions.js +5 -4
- package/src/executors/utilities/builder-package.d.ts +0 -1
- package/src/executors/utilities/builder-package.js +0 -11
- package/src/generators/application/files/ng-module/src/app/app__componentFileSuffix__.spec.ts__tpl__ +0 -28
- package/src/generators/application/files/ng-module/src/app/app__moduleTypeSeparator__module.ts__tpl__ +0 -17
- package/src/generators/application/files/standalone-components/src/app/app__componentFileSuffix__.spec.ts__tpl__ +0 -27
- package/src/generators/setup-mf/files/host-files/__appFileName__.spec.ts__tmpl__ +0 -43
- package/src/generators/setup-ssr/files/v20+/application-builder/ngmodule-src/__main__ +0 -1
- package/src/generators/setup-ssr/files/v20+/application-builder/ngmodule-src/app/__rootModuleFileName__ +0 -12
- package/src/generators/setup-ssr/files/v20+/application-builder/ngmodule-src/app/app.routes.server.ts__tpl__ +0 -8
- package/src/generators/setup-ssr/files/v20+/application-builder/server/__serverFileName__ +0 -66
- package/src/generators/setup-ssr/files/v20+/application-builder/standalone-src/__main__ +0 -7
- package/src/generators/setup-ssr/files/v20+/application-builder/standalone-src/app/app.config.server.ts__tpl__ +0 -12
- package/src/generators/setup-ssr/files/v20+/application-builder/standalone-src/app/app.routes.server.ts__tpl__ +0 -8
- package/src/generators/setup-ssr/files/v20+/server-builder/ngmodule-src/__main__ +0 -1
- package/src/generators/setup-ssr/files/v20+/server-builder/ngmodule-src/app/__rootModuleFileName__ +0 -14
- package/src/generators/setup-ssr/files/v20+/server-builder/root/tsconfig.server.json.template +0 -16
- package/src/generators/setup-ssr/files/v20+/server-builder/server/__serverFileName__ +0 -69
- package/src/generators/setup-ssr/files/v20+/server-builder/standalone-src/__main__ +0 -7
- package/src/generators/setup-ssr/files/v20+/server-builder/standalone-src/app/app.config.server.ts.template +0 -11
- package/src/generators/utils/app-components-info.d.ts +0 -9
- package/src/generators/utils/app-components-info.js +0 -39
- package/src/generators/utils/artifact-types.d.ts +0 -3
- package/src/generators/utils/artifact-types.js +0 -33
- package/src/migrations/update-21-2-0/migrate-provide-server-rendering-import.d.ts +0 -2
- package/src/migrations/update-21-2-0/migrate-provide-server-rendering-import.js +0 -110
- package/src/migrations/update-21-2-0/replace-provide-server-routing.d.ts +0 -2
- package/src/migrations/update-21-2-0/replace-provide-server-routing.js +0 -103
- package/src/migrations/update-21-2-0/set-generator-defaults-for-previous-style-guide.d.ts +0 -2
- package/src/migrations/update-21-2-0/set-generator-defaults-for-previous-style-guide.js +0 -47
- package/src/migrations/update-21-2-0/update-angular-cli.d.ts +0 -3
- package/src/migrations/update-21-2-0/update-angular-cli.js +0 -23
- /package/src/generators/application/files/{base → base-18+}/public/favicon.ico +0 -0
- /package/src/generators/application/files/{ng-module/src/app/app__componentFileSuffix__.__style__ → base-pre18/src/assets/.gitkeep__tpl__} +0 -0
- /package/src/generators/application/files/{standalone-components/src/app/app__componentFileSuffix__.__style__ → ng-module/src/app/app.component.__style__} +0 -0
- /package/src/generators/application/files/ng-module/src/app/{app__componentFileSuffix__.html__tpl__ → app.component.html__tpl__} +0 -0
- /package/src/generators/application/files/standalone-components/src/app/{app__componentFileSuffix__.html__tpl__ → app.component.html__tpl__} +0 -0
- /package/src/generators/component/files/{__fileName____ngext__.html__tpl__ → __fileName__.html__tpl__} +0 -0
- /package/src/generators/library/files/ng-module/src/lib/{__libFileName____moduleTypeSeparator__module.ts__tpl__ → __libFileName__.module.ts__tpl__} +0 -0
- /package/src/generators/library-secondary-entry-point/files/src/lib/{__fileName____moduleTypeSeparator__module.ts__tmpl__ → __fileName__.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,11 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.assertBuilderPackageIsInstalled = assertBuilderPackageIsInstalled;
|
|
4
|
-
function assertBuilderPackageIsInstalled(packageName) {
|
|
5
|
-
try {
|
|
6
|
-
require(packageName);
|
|
7
|
-
}
|
|
8
|
-
catch {
|
|
9
|
-
throw new Error(`The required package ${packageName} is not installed. Please make sure it is installed and try again.`);
|
|
10
|
-
}
|
|
11
|
-
}
|
package/src/generators/application/files/ng-module/src/app/app__componentFileSuffix__.spec.ts__tpl__
DELETED
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
import { TestBed } from '@angular/core/testing';
|
|
2
|
-
import { App<%= componentType %> } from './app<%= componentFileSuffix %>';<% if(!minimal) { %>
|
|
3
|
-
import { NxWelcome<%= componentType %> } from './nx-welcome<%= componentFileSuffix %>';<% } %><% if(routing) { %>
|
|
4
|
-
import { RouterModule } from '@angular/router';<% } %>
|
|
5
|
-
|
|
6
|
-
describe('App<%= componentType %>', () => {
|
|
7
|
-
beforeEach(async () => {
|
|
8
|
-
await TestBed.configureTestingModule({
|
|
9
|
-
imports: [<% if(routing) { %>RouterModule.forRoot([])<% } %>],
|
|
10
|
-
declarations: [App<%= componentType %><% if(!minimal) { %>, NxWelcome<%= componentType %><% } %>]
|
|
11
|
-
}).compileComponents();
|
|
12
|
-
});
|
|
13
|
-
|
|
14
|
-
it('should render title', () => {
|
|
15
|
-
const fixture = TestBed.createComponent(App<%= componentType %>);
|
|
16
|
-
fixture.detectChanges();
|
|
17
|
-
const compiled = fixture.nativeElement as HTMLElement;
|
|
18
|
-
expect(compiled.querySelector('h1')?.textContent).toContain(
|
|
19
|
-
'Welcome <%= appName %>'
|
|
20
|
-
);
|
|
21
|
-
});<% if(!minimal) { %>
|
|
22
|
-
|
|
23
|
-
it(`should have as title '<%= appName %>'`, () => {
|
|
24
|
-
const fixture = TestBed.createComponent(App<%= componentType %>);
|
|
25
|
-
const app = fixture.componentInstance;
|
|
26
|
-
expect(app.title).toEqual('<%= appName %>');
|
|
27
|
-
});<% } %>
|
|
28
|
-
});
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
import { NgModule<% if (provideGlobalErrorListener) { %>, provideBrowserGlobalErrorListeners<% } %> } from '@angular/core';
|
|
2
|
-
import { BrowserModule } from '@angular/platform-browser';<% if(routing) { %>
|
|
3
|
-
import { RouterModule } from '@angular/router';<% } %>
|
|
4
|
-
import { App<%= componentType %> } from './app<%= componentFileSuffix %>';<% if(routing) { %>
|
|
5
|
-
import { appRoutes } from './app.routes';<% } %><% if(!minimal) { %>
|
|
6
|
-
import { NxWelcome<%= componentType %> } from './nx-welcome<%= componentFileSuffix %>';<% } %>
|
|
7
|
-
|
|
8
|
-
@NgModule({
|
|
9
|
-
declarations: [App<%= componentType %><% if(!minimal) { %>, NxWelcome<%= componentType %><% } %>],
|
|
10
|
-
imports: [
|
|
11
|
-
BrowserModule,<% if(routing) { %>
|
|
12
|
-
RouterModule.forRoot(appRoutes),<% } %>
|
|
13
|
-
],
|
|
14
|
-
providers: [<% if (provideGlobalErrorListener) { %>provideBrowserGlobalErrorListeners()<% } %>],
|
|
15
|
-
bootstrap: [App<%= componentType %>],
|
|
16
|
-
})
|
|
17
|
-
export class AppModule {}
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
import { TestBed } from '@angular/core/testing';
|
|
2
|
-
import { App<%= componentType %> } from './app<%= componentFileSuffix %>';<% if(!minimal) { %>
|
|
3
|
-
import { NxWelcome<%= componentType %> } from './nx-welcome<%= componentFileSuffix %>';<% } %><% if(routing) { %>
|
|
4
|
-
import { RouterModule } from '@angular/router';<% } %>
|
|
5
|
-
|
|
6
|
-
describe('App<%= componentType %>', () => {
|
|
7
|
-
beforeEach(async () => {
|
|
8
|
-
await TestBed.configureTestingModule({
|
|
9
|
-
imports: [App<%= componentType %><% if(!minimal) { %>, NxWelcome<%= componentType %><% } %><% if(routing) { %>, RouterModule.forRoot([])<% } %>],
|
|
10
|
-
}).compileComponents();
|
|
11
|
-
});
|
|
12
|
-
|
|
13
|
-
it('should render title', () => {
|
|
14
|
-
const fixture = TestBed.createComponent(App<%= componentType %>);
|
|
15
|
-
fixture.detectChanges();
|
|
16
|
-
const compiled = fixture.nativeElement as HTMLElement;
|
|
17
|
-
expect(compiled.querySelector('h1')?.textContent).toContain(
|
|
18
|
-
'Welcome <%= appName %>'
|
|
19
|
-
);
|
|
20
|
-
});<% if(!minimal) { %>
|
|
21
|
-
|
|
22
|
-
it(`should have as title '<%= appName %>'`, () => {
|
|
23
|
-
const fixture = TestBed.createComponent(App<%= componentType %>);
|
|
24
|
-
const app = fixture.componentInstance;
|
|
25
|
-
expect(app.title).toEqual('<%= appName %>');
|
|
26
|
-
});<% } %>
|
|
27
|
-
});
|
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
import { fakeAsync, TestBed, tick } from '@angular/core/testing';
|
|
2
|
-
import { <%= appSymbolName %> } from './<%= appFileName %>';
|
|
3
|
-
import { <%= nxWelcomeSymbolName %> } from './<%= nxWelcomeFileName %>';
|
|
4
|
-
import { Router, RouterModule } from '@angular/router';
|
|
5
|
-
|
|
6
|
-
describe('<%= appSymbolName %>', () => {
|
|
7
|
-
beforeEach(async () => {
|
|
8
|
-
await TestBed.configureTestingModule({
|
|
9
|
-
imports: [
|
|
10
|
-
RouterModule.forRoot([
|
|
11
|
-
{ path: '', component: <%= nxWelcomeSymbolName %> },
|
|
12
|
-
]),<% if (standalone) { %>
|
|
13
|
-
<%= appSymbolName %>,
|
|
14
|
-
<%= nxWelcomeSymbolName %>,<% } %>
|
|
15
|
-
],<% if (!standalone) { %>
|
|
16
|
-
declarations: [<%= appSymbolName %>, <%= nxWelcomeSymbolName %>],<% } %>
|
|
17
|
-
}).compileComponents();
|
|
18
|
-
});
|
|
19
|
-
|
|
20
|
-
it('should create the app', () => {
|
|
21
|
-
const fixture = TestBed.createComponent(<%= appSymbolName %>);
|
|
22
|
-
const app = fixture.componentInstance;
|
|
23
|
-
expect(app).toBeTruthy();
|
|
24
|
-
});
|
|
25
|
-
|
|
26
|
-
it(`should have as title '<%= appName %>'`, () => {
|
|
27
|
-
const fixture = TestBed.createComponent(<%= appSymbolName %>);
|
|
28
|
-
const app = fixture.componentInstance;
|
|
29
|
-
expect(app.title).toEqual('<%= appName %>');
|
|
30
|
-
});
|
|
31
|
-
|
|
32
|
-
it('should render title', fakeAsync(() => {
|
|
33
|
-
const fixture = TestBed.createComponent(<%= appSymbolName %>);
|
|
34
|
-
const router = TestBed.inject(Router);
|
|
35
|
-
fixture.ngZone?.run(() => router.navigate(['']));
|
|
36
|
-
tick();
|
|
37
|
-
fixture.detectChanges();
|
|
38
|
-
const compiled = fixture.nativeElement as HTMLElement;
|
|
39
|
-
expect(compiled.querySelector('h1')?.textContent).toContain(
|
|
40
|
-
'Welcome <%= appName %>'
|
|
41
|
-
);
|
|
42
|
-
}));
|
|
43
|
-
});
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export { <%= rootModuleClassName %> as default } from './app/<%= rootModuleFileName.slice(0, -3) %>';
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import { NgModule } from '@angular/core';
|
|
2
|
-
import { provideServerRendering, withRoutes } from '@angular/ssr';
|
|
3
|
-
import { <%= appSymbolName %> } from './<%= appFileName %>';
|
|
4
|
-
import { AppModule } from './app<%= moduleTypeSeparator %>module';
|
|
5
|
-
import { serverRoutes } from './app.routes.server';
|
|
6
|
-
|
|
7
|
-
@NgModule({
|
|
8
|
-
imports: [AppModule],
|
|
9
|
-
providers: [provideServerRendering(withRoutes(serverRoutes))],
|
|
10
|
-
bootstrap: [<%= appSymbolName %>],
|
|
11
|
-
})
|
|
12
|
-
export class <%= rootModuleClassName %> {}
|
|
@@ -1,66 +0,0 @@
|
|
|
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);
|
|
@@ -1,7 +0,0 @@
|
|
|
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;
|
|
@@ -1,12 +0,0 @@
|
|
|
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);
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export { <%= rootModuleClassName %> as default } from './app/<%= rootModuleFileName.slice(0, -3) %>';
|
package/src/generators/setup-ssr/files/v20+/server-builder/ngmodule-src/app/__rootModuleFileName__
DELETED
|
@@ -1,14 +0,0 @@
|
|
|
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 %> {}
|
package/src/generators/setup-ssr/files/v20+/server-builder/root/tsconfig.server.json.template
DELETED
|
@@ -1,16 +0,0 @@
|
|
|
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
|
-
"types": [
|
|
8
|
-
"node"<% if (hasLocalizePackage) { %>,
|
|
9
|
-
"@angular/localize"<% } %>
|
|
10
|
-
]
|
|
11
|
-
},
|
|
12
|
-
"files": [
|
|
13
|
-
"src/<%= main %>",
|
|
14
|
-
"src/server.ts"
|
|
15
|
-
]
|
|
16
|
-
}
|
|
@@ -1,69 +0,0 @@
|
|
|
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 %><% } %>;
|
|
@@ -1,7 +0,0 @@
|
|
|
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;
|
|
@@ -1,11 +0,0 @@
|
|
|
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);
|
|
@@ -1,9 +0,0 @@
|
|
|
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;
|
|
@@ -1,39 +0,0 @@
|
|
|
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
|
-
}
|
|
@@ -1,33 +0,0 @@
|
|
|
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
|
-
}
|
|
@@ -1,110 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.default = default_1;
|
|
4
|
-
const tslib_1 = require("tslib");
|
|
5
|
-
const devkit_1 = require("@nx/devkit");
|
|
6
|
-
const ts = tslib_1.__importStar(require("typescript"));
|
|
7
|
-
const file_change_recorder_1 = require("../../utils/file-change-recorder");
|
|
8
|
-
const versions_1 = require("../../utils/versions");
|
|
9
|
-
const projects_1 = require("../utils/projects");
|
|
10
|
-
async function default_1(tree) {
|
|
11
|
-
const projects = await (0, projects_1.getProjectsFilteredByDependencies)(tree, [
|
|
12
|
-
'npm:@angular/platform-server',
|
|
13
|
-
]);
|
|
14
|
-
if (!projects.length) {
|
|
15
|
-
return;
|
|
16
|
-
}
|
|
17
|
-
let isSsrInstalled = false;
|
|
18
|
-
for (const { project } of projects) {
|
|
19
|
-
(0, devkit_1.visitNotIgnoredFiles)(tree, project.root, (file) => {
|
|
20
|
-
if (!file.endsWith('.ts') || file.endsWith('.d.ts')) {
|
|
21
|
-
return;
|
|
22
|
-
}
|
|
23
|
-
const shouldInstallSsr = processFile(tree, file);
|
|
24
|
-
if (shouldInstallSsr && !isSsrInstalled) {
|
|
25
|
-
isSsrInstalled = true;
|
|
26
|
-
(0, devkit_1.addDependenciesToPackageJson)(tree, { '@angular/ssr': versions_1.angularDevkitVersion }, {}, undefined, true);
|
|
27
|
-
}
|
|
28
|
-
});
|
|
29
|
-
}
|
|
30
|
-
await (0, devkit_1.formatFiles)(tree);
|
|
31
|
-
}
|
|
32
|
-
function processFile(tree, filePath) {
|
|
33
|
-
const content = tree.read(filePath, 'utf-8');
|
|
34
|
-
if (!content.includes('provideServerRendering') ||
|
|
35
|
-
!content.includes('@angular/platform-server')) {
|
|
36
|
-
return false;
|
|
37
|
-
}
|
|
38
|
-
const sourceFile = ts.createSourceFile(filePath, content, ts.ScriptTarget.Latest, true);
|
|
39
|
-
let platformServerHasProvideServerRendering = false;
|
|
40
|
-
let platformServerImportNode;
|
|
41
|
-
let ssrImportNode;
|
|
42
|
-
const platformServerImports = new Set();
|
|
43
|
-
sourceFile.forEachChild((node) => {
|
|
44
|
-
if (!ts.isImportDeclaration(node)) {
|
|
45
|
-
return;
|
|
46
|
-
}
|
|
47
|
-
const moduleSpecifier = node.moduleSpecifier.getText(sourceFile);
|
|
48
|
-
if (moduleSpecifier.includes('@angular/platform-server')) {
|
|
49
|
-
platformServerImportNode = node;
|
|
50
|
-
const importClause = node.importClause;
|
|
51
|
-
if (importClause &&
|
|
52
|
-
importClause.namedBindings &&
|
|
53
|
-
ts.isNamedImports(importClause.namedBindings)) {
|
|
54
|
-
const namedImports = importClause.namedBindings.elements.map((e) => e.getText(sourceFile));
|
|
55
|
-
namedImports.forEach((importName) => {
|
|
56
|
-
if (importName === 'provideServerRendering') {
|
|
57
|
-
platformServerHasProvideServerRendering = true;
|
|
58
|
-
}
|
|
59
|
-
else {
|
|
60
|
-
platformServerImports.add(importName);
|
|
61
|
-
}
|
|
62
|
-
});
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
else if (moduleSpecifier.includes('@angular/ssr')) {
|
|
66
|
-
ssrImportNode = node;
|
|
67
|
-
}
|
|
68
|
-
});
|
|
69
|
-
if (!platformServerHasProvideServerRendering) {
|
|
70
|
-
return;
|
|
71
|
-
}
|
|
72
|
-
const recorder = new file_change_recorder_1.FileChangeRecorder(tree, filePath);
|
|
73
|
-
const printer = ts.createPrinter({
|
|
74
|
-
newLine: ts.NewLineKind.LineFeed,
|
|
75
|
-
});
|
|
76
|
-
if (ssrImportNode?.importClause?.namedBindings &&
|
|
77
|
-
ts.isNamedImports(ssrImportNode.importClause.namedBindings)) {
|
|
78
|
-
const namedBindingsNode = ssrImportNode.importClause
|
|
79
|
-
.namedBindings;
|
|
80
|
-
const updatedNamedBindingsNode = ts.factory.updateNamedImports(namedBindingsNode, [
|
|
81
|
-
...namedBindingsNode.elements,
|
|
82
|
-
ts.factory.createImportSpecifier(false, undefined, ts.factory.createIdentifier('provideServerRendering')),
|
|
83
|
-
]);
|
|
84
|
-
recorder.replace(namedBindingsNode, printer.printNode(ts.EmitHint.Unspecified, updatedNamedBindingsNode, sourceFile));
|
|
85
|
-
}
|
|
86
|
-
else {
|
|
87
|
-
/**
|
|
88
|
-
* Add a new import statement with the needed named import in case it
|
|
89
|
-
* doesn't exist yet or it doesn't have named imports.
|
|
90
|
-
*
|
|
91
|
-
* It would be quite uncommon to have an import from @angular/ssr without
|
|
92
|
-
* named imports, but if that's the case, we'll just add an extra import
|
|
93
|
-
* statement with the needed named import.
|
|
94
|
-
*/
|
|
95
|
-
recorder.insertLeft(0, `import { provideServerRendering } from '@angular/ssr';\n`);
|
|
96
|
-
}
|
|
97
|
-
if (platformServerImports.size > 0) {
|
|
98
|
-
// we only collected platform server imports because there were named
|
|
99
|
-
// imports, so we can safely use the type
|
|
100
|
-
const namedBindingsNode = platformServerImportNode.importClause
|
|
101
|
-
.namedBindings;
|
|
102
|
-
const updatedNamedBindingsNode = ts.factory.updateNamedImports(namedBindingsNode, namedBindingsNode.elements.filter((e) => platformServerImports.has(e.getText(sourceFile))));
|
|
103
|
-
recorder.replace(namedBindingsNode, printer.printNode(ts.EmitHint.Unspecified, updatedNamedBindingsNode, sourceFile));
|
|
104
|
-
}
|
|
105
|
-
else {
|
|
106
|
-
recorder.remove(platformServerImportNode.getFullStart(), platformServerImportNode.getEnd());
|
|
107
|
-
}
|
|
108
|
-
recorder.applyChanges();
|
|
109
|
-
return true;
|
|
110
|
-
}
|