@nx/angular 17.1.0-beta.0 → 17.1.0-beta.3
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.mjs +1 -1
- package/migrations.json +135 -0
- package/ng-package.json +0 -1
- package/package.json +15 -20
- package/src/builders/module-federation-dev-server/module-federation-dev-server.impl.d.ts +1 -1
- package/src/builders/module-federation-dev-server/module-federation-dev-server.impl.js +112 -60
- package/src/builders/module-federation-dev-server/schema.d.ts +23 -7
- package/src/builders/module-federation-dev-server/schema.json +13 -3
- package/src/builders/module-federation-dev-ssr/module-federation-dev-ssr.impl.d.ts +1 -1
- package/src/builders/module-federation-dev-ssr/module-federation-dev-ssr.impl.js +13 -8
- package/src/builders/webpack-browser/schema.json +7 -7
- package/src/builders/webpack-browser/webpack-browser.impl.js +0 -2
- package/src/builders/webpack-dev-server/lib/normalize-options.d.ts +2 -2
- package/src/builders/webpack-dev-server/lib/normalize-options.js +11 -5
- package/src/builders/webpack-dev-server/schema.d.ts +22 -7
- package/src/builders/webpack-dev-server/schema.json +9 -3
- package/src/builders/webpack-dev-server/webpack-dev-server.impl.js +24 -13
- package/src/builders/webpack-server/schema.d.ts +0 -1
- package/src/builders/webpack-server/schema.json +1 -13
- package/src/builders/webpack-server/validate-options.js +0 -7
- package/src/builders/webpack-server/webpack-server.impl.js +0 -8
- package/src/executors/browser-esbuild/browser-esbuild.impl.js +0 -2
- package/src/executors/browser-esbuild/schema.json +5 -4
- package/src/executors/ng-packagr-lite/ng-packagr-adjustments/ng-package/entry-point/write-package.transform.js +20 -12
- package/src/executors/ng-packagr-lite/ng-packagr-adjustments/ngc/compile-source-files.js +10 -1
- package/src/executors/ng-packagr-lite/ng-packagr-adjustments/styles/stylesheet-processor.js +0 -13
- package/src/executors/package/ng-packagr-adjustments/ngc/compile-source-files.js +10 -1
- package/src/executors/package/ng-packagr-adjustments/styles/stylesheet-processor.js +0 -13
- package/src/executors/utilities/ng-compiler-cli.d.ts +15 -0
- package/src/executors/utilities/ng-compiler-cli.js +28 -0
- package/src/generators/application/application.js +7 -17
- package/src/generators/application/files/base/tsconfig.app.json__tpl__ +1 -1
- package/src/generators/application/files/base/tsconfig.json__tpl__ +3 -2
- package/src/generators/application/files/ng-module/src/app/app.module.ts__tpl__ +1 -1
- package/src/generators/application/files/ng-module/src/app/nx-welcome.component.ts__tpl__ +2 -2
- package/src/generators/application/files/ng-module/src/main.ts__tpl__ +2 -8
- package/src/generators/application/files/standalone-components/src/app/app.config.ts__tpl__ +2 -2
- package/src/generators/application/files/standalone-components/src/app/nx-welcome.component.ts__tpl__ +2 -2
- package/src/generators/application/lib/add-e2e.js +7 -1
- package/src/generators/application/lib/add-unit-test-runner.js +11 -1
- package/src/generators/application/lib/create-files.js +10 -5
- package/src/generators/application/lib/create-project.js +46 -38
- package/src/generators/application/lib/normalize-options.d.ts +1 -1
- package/src/generators/application/lib/normalize-options.js +14 -3
- package/src/generators/application/lib/normalized-schema.d.ts +2 -0
- package/src/generators/application/schema.d.ts +1 -0
- package/src/generators/application/schema.json +13 -6
- package/src/generators/component/component.js +0 -1
- package/src/generators/component/lib/index.d.ts +0 -1
- package/src/generators/component/lib/index.js +0 -1
- package/src/generators/component/lib/normalize-options.js +1 -0
- package/src/generators/component/schema.json +2 -2
- package/src/generators/directive/directive.js +0 -1
- package/src/generators/directive/lib/index.d.ts +0 -1
- package/src/generators/directive/lib/index.js +0 -1
- package/src/generators/directive/lib/normalize-options.js +1 -0
- package/src/generators/directive/schema.json +2 -2
- package/src/generators/federate-module/federate-module.js +1 -0
- package/src/generators/federate-module/lib/add-remote.d.ts +1 -1
- package/src/generators/federate-module/lib/add-remote.js +2 -11
- package/src/generators/federate-module/schema.json +9 -9
- package/src/generators/host/files/common/v17+/src/main.server.ts__tmpl__ +67 -0
- package/src/generators/host/host.js +5 -9
- package/src/generators/host/lib/index.d.ts +1 -1
- package/src/generators/host/lib/index.js +1 -1
- package/src/generators/host/lib/update-ssr-setup.d.ts +3 -0
- package/src/generators/host/lib/{add-ssr.js → update-ssr-setup.js} +8 -14
- package/src/generators/host/schema.json +2 -2
- package/src/generators/library/lib/normalize-options.js +1 -0
- package/src/generators/library/library.js +10 -6
- package/src/generators/library/schema.json +12 -12
- package/src/generators/ng-add/migrators/projects/app.migrator.js +50 -7
- package/src/generators/ngrx/lib/generate-files.js +1 -10
- package/src/generators/ngrx/lib/validate-options.js +0 -23
- package/src/generators/ngrx/schema.json +2 -2
- package/src/generators/ngrx-feature-store/lib/generate-files.js +1 -12
- package/src/generators/ngrx-feature-store/lib/validate-options.js +0 -22
- package/src/generators/ngrx-feature-store/schema.json +2 -2
- package/src/generators/ngrx-root-store/lib/normalize-options.js +1 -1
- package/src/generators/ngrx-root-store/lib/validate-options.js +0 -15
- package/src/generators/ngrx-root-store/schema.json +1 -1
- package/src/generators/pipe/lib/index.d.ts +0 -1
- package/src/generators/pipe/lib/index.js +0 -1
- package/src/generators/pipe/lib/normalize-options.js +1 -0
- package/src/generators/pipe/pipe.js +0 -1
- package/src/generators/pipe/schema.json +2 -2
- package/src/generators/remote/files/common/v17+/src/main.server.ts__tmpl__ +74 -0
- package/src/generators/remote/lib/index.d.ts +1 -1
- package/src/generators/remote/lib/index.js +1 -1
- package/src/generators/remote/lib/{add-ssr.d.ts → update-ssr-setup.d.ts} +1 -1
- package/src/generators/remote/lib/{add-ssr.js → update-ssr-setup.js} +9 -13
- package/src/generators/remote/remote.js +4 -9
- package/src/generators/remote/schema.json +2 -2
- package/src/generators/scam-to-standalone/scam-to-standalone.js +0 -7
- package/src/generators/scam-to-standalone/schema.json +1 -1
- package/src/generators/setup-mf/lib/add-remote-entry.js +2 -11
- package/src/generators/setup-mf/lib/fix-bootstrap.js +3 -12
- package/src/generators/setup-mf/lib/index.d.ts +1 -1
- package/src/generators/setup-mf/lib/index.js +1 -1
- package/src/generators/setup-mf/lib/normalize-options.js +1 -0
- package/src/generators/{component/lib/validate-options.d.ts → setup-mf/lib/update-tsconfig.d.ts} +1 -1
- package/src/generators/setup-mf/lib/update-tsconfig.js +19 -0
- package/src/generators/setup-mf/schema.json +2 -2
- package/src/generators/setup-mf/setup-mf.js +1 -7
- package/src/generators/setup-ssr/files/server/application-builder/__serverFileName__ +54 -0
- package/src/generators/setup-ssr/files/{ngmodule/base → server/server-builder/pre-v17}/__serverFileName__ +3 -4
- package/src/generators/setup-ssr/files/{standalone → server/server-builder/v17+}/__serverFileName__ +25 -16
- package/src/generators/setup-ssr/lib/add-dependencies.d.ts +2 -0
- package/src/generators/setup-ssr/lib/add-dependencies.js +32 -0
- package/src/generators/setup-ssr/lib/generate-files.d.ts +1 -1
- package/src/generators/setup-ssr/lib/generate-files.js +10 -13
- package/src/generators/setup-ssr/lib/generate-server-ts-config.d.ts +4 -0
- package/src/generators/setup-ssr/lib/generate-server-ts-config.js +26 -0
- package/src/generators/setup-ssr/lib/index.d.ts +3 -0
- package/src/generators/setup-ssr/lib/index.js +3 -0
- package/src/generators/setup-ssr/lib/normalize-options.js +7 -1
- package/src/generators/setup-ssr/lib/set-router-initial-navigation.d.ts +3 -0
- package/src/generators/setup-ssr/lib/set-router-initial-navigation.js +93 -0
- package/src/generators/setup-ssr/lib/update-project-config.d.ts +2 -1
- package/src/generators/setup-ssr/lib/update-project-config.js +24 -6
- package/src/generators/setup-ssr/lib/validate-options.js +15 -2
- package/src/generators/setup-ssr/schema.json +3 -3
- package/src/generators/setup-ssr/setup-ssr.js +16 -12
- package/src/generators/utils/create-ts-config.d.ts +1 -0
- package/src/generators/utils/create-ts-config.js +2 -3
- package/src/generators/utils/project.js +4 -4
- package/src/generators/utils/testing.js +12 -0
- package/src/generators/utils/validations.d.ts +0 -1
- package/src/generators/utils/validations.js +1 -14
- package/src/generators/utils/version-utils.js +2 -2
- package/src/migrations/update-17-1-0/browser-target-to-build-target.d.ts +3 -0
- package/src/migrations/update-17-1-0/browser-target-to-build-target.js +50 -0
- package/src/migrations/update-17-1-0/replace-nguniversal-builders.d.ts +2 -0
- package/src/migrations/update-17-1-0/replace-nguniversal-builders.js +75 -0
- package/src/migrations/update-17-1-0/replace-nguniversal-engines.d.ts +2 -0
- package/src/migrations/update-17-1-0/replace-nguniversal-engines.js +185 -0
- package/src/migrations/update-17-1-0/stub-performance-mark-in-jest-test-setup.d.ts +2 -0
- package/src/migrations/update-17-1-0/stub-performance-mark-in-jest-test-setup.js +63 -0
- package/src/migrations/update-17-1-0/update-angular-cli.d.ts +3 -0
- package/src/migrations/update-17-1-0/update-angular-cli.js +23 -0
- package/src/utils/backward-compatible-versions.d.ts +1 -1
- package/src/utils/backward-compatible-versions.js +18 -18
- package/src/utils/nx-devkit/ast-utils.js +4 -2
- package/src/utils/versions.d.ts +6 -6
- package/src/utils/versions.js +6 -6
- package/src/builders/webpack-browser/validate-options.d.ts +0 -2
- package/src/builders/webpack-browser/validate-options.js +0 -40
- package/src/executors/browser-esbuild/lib/validate-options.d.ts +0 -2
- package/src/executors/browser-esbuild/lib/validate-options.js +0 -40
- package/src/generators/application/files/tsconfig.editor.json__tpl__ +0 -5
- package/src/generators/application/files/v14/.browserlistrc__tpl__ +0 -16
- package/src/generators/application/files/v14/src/environments/environment.prod.ts__tpl__ +0 -3
- package/src/generators/application/files/v14/src/environments/environment.ts__tpl__ +0 -16
- package/src/generators/application/files/v14/src/polyfills.ts__tpl__ +0 -53
- package/src/generators/component/lib/validate-options.js +0 -8
- package/src/generators/directive/lib/validate-options.d.ts +0 -3
- package/src/generators/directive/lib/validate-options.js +0 -8
- package/src/generators/host/lib/add-ssr.d.ts +0 -3
- package/src/generators/ngrx/files/no-inject/__directory__/__fileName__.effects.ts__tmpl__ +0 -22
- package/src/generators/ngrx/files/no-inject/__directory__/__fileName__.facade.ts__tmpl__ +0 -27
- package/src/generators/ngrx-feature-store/files/no-inject/__directory__/__fileName__.effects.ts__tmpl__ +0 -22
- package/src/generators/ngrx-feature-store/files/no-inject/__directory__/__fileName__.facade.ts__tmpl__ +0 -27
- package/src/generators/pipe/lib/validate-options.d.ts +0 -3
- package/src/generators/pipe/lib/validate-options.js +0 -8
- package/src/generators/setup-mf/lib/set-tsconfig-target.d.ts +0 -3
- package/src/generators/setup-mf/lib/set-tsconfig-target.js +0 -16
- package/src/generators/setup-ssr/files/ngmodule/v14/src/__main__ +0 -11
- /package/src/generators/host/files/common/{src → pre-v17/src}/main.server.ts__tmpl__ +0 -0
- /package/src/generators/ngrx/files/{base/__directory__ → __directory__}/__fileName__.actions.ts__tmpl__ +0 -0
- /package/src/generators/ngrx/files/{base/__directory__ → __directory__}/__fileName__.effects.spec.ts__tmpl__ +0 -0
- /package/src/generators/ngrx/files/{base/__directory__ → __directory__}/__fileName__.effects.ts__tmpl__ +0 -0
- /package/src/generators/ngrx/files/{base/__directory__ → __directory__}/__fileName__.facade.spec.ts__tmpl__ +0 -0
- /package/src/generators/ngrx/files/{base/__directory__ → __directory__}/__fileName__.facade.ts__tmpl__ +0 -0
- /package/src/generators/ngrx/files/{base/__directory__ → __directory__}/__fileName__.models.ts__tmpl__ +0 -0
- /package/src/generators/ngrx/files/{base/__directory__ → __directory__}/__fileName__.reducer.spec.ts__tmpl__ +0 -0
- /package/src/generators/ngrx/files/{base/__directory__ → __directory__}/__fileName__.reducer.ts__tmpl__ +0 -0
- /package/src/generators/ngrx/files/{base/__directory__ → __directory__}/__fileName__.selectors.spec.ts__tmpl__ +0 -0
- /package/src/generators/ngrx/files/{base/__directory__ → __directory__}/__fileName__.selectors.ts__tmpl__ +0 -0
- /package/src/generators/ngrx-feature-store/files/{base/__directory__ → __directory__}/__fileName__.actions.ts__tmpl__ +0 -0
- /package/src/generators/ngrx-feature-store/files/{base/__directory__ → __directory__}/__fileName__.effects.spec.ts__tmpl__ +0 -0
- /package/src/generators/ngrx-feature-store/files/{base/__directory__ → __directory__}/__fileName__.effects.ts__tmpl__ +0 -0
- /package/src/generators/ngrx-feature-store/files/{base/__directory__ → __directory__}/__fileName__.facade.spec.ts__tmpl__ +0 -0
- /package/src/generators/ngrx-feature-store/files/{base/__directory__ → __directory__}/__fileName__.facade.ts__tmpl__ +0 -0
- /package/src/generators/ngrx-feature-store/files/{base/__directory__ → __directory__}/__fileName__.models.ts__tmpl__ +0 -0
- /package/src/generators/ngrx-feature-store/files/{base/__directory__ → __directory__}/__fileName__.reducer.spec.ts__tmpl__ +0 -0
- /package/src/generators/ngrx-feature-store/files/{base/__directory__ → __directory__}/__fileName__.reducer.ts__tmpl__ +0 -0
- /package/src/generators/ngrx-feature-store/files/{base/__directory__ → __directory__}/__fileName__.selectors.spec.ts__tmpl__ +0 -0
- /package/src/generators/ngrx-feature-store/files/{base/__directory__ → __directory__}/__fileName__.selectors.ts__tmpl__ +0 -0
- /package/src/generators/remote/files/common/{src → pre-v17/src}/main.server.ts__tmpl__ +0 -0
- /package/src/generators/setup-ssr/files/{base → root}/tsconfig.server.json__tpl__ +0 -0
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import 'zone.js/node';
|
|
2
|
+
|
|
3
|
+
import { APP_BASE_HREF } from '@angular/common';
|
|
4
|
+
import { CommonEngine } from '@angular/ssr';
|
|
5
|
+
import * as express from 'express';
|
|
6
|
+
import * as cors from 'cors';
|
|
7
|
+
import { existsSync } from 'node:fs';
|
|
8
|
+
import { join } from 'node:path';
|
|
9
|
+
import<% if(standalone) { %> bootstrap <% } else { %> { AppServerModule } <% } %>from './bootstrap.server';
|
|
10
|
+
|
|
11
|
+
// The Express app is exported so that it can be used by serverless Functions.
|
|
12
|
+
export function app(): express.Express {
|
|
13
|
+
const server = express();
|
|
14
|
+
const browserBundles = join(process.cwd(), '<%= browserBundleOutput %>');
|
|
15
|
+
const serverBundles = join(process.cwd(), '<%= serverBundleOutput %>');
|
|
16
|
+
const indexHtml = existsSync(join(browserBundles, 'index.original.html'))
|
|
17
|
+
? join(browserBundles, 'index.original.html')
|
|
18
|
+
: join(browserBundles, 'index.html');
|
|
19
|
+
|
|
20
|
+
server.use(cors());
|
|
21
|
+
|
|
22
|
+
const commonEngine = new CommonEngine();
|
|
23
|
+
|
|
24
|
+
server.set('view engine', 'html');
|
|
25
|
+
server.set('views', browserBundles);
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
// Example Express Rest API endpoints
|
|
29
|
+
// server.get('/api/**', (req, res) => { });
|
|
30
|
+
// Serve static files from /browser
|
|
31
|
+
server.use('/', express.static(browserBundles, { maxAge: '1y' }));
|
|
32
|
+
// Serve static files from /server
|
|
33
|
+
server.use('/server', express.static(serverBundles, { maxAge: '1y' }));
|
|
34
|
+
|
|
35
|
+
// All regular routes use the Angular engine
|
|
36
|
+
server.get('*', (req, res, next) => {
|
|
37
|
+
const { protocol, originalUrl, baseUrl, headers } = req;
|
|
38
|
+
|
|
39
|
+
commonEngine
|
|
40
|
+
.render({
|
|
41
|
+
bootstrap<% if (!standalone) { %>: AppServerModule<% } %>,
|
|
42
|
+
documentFilePath: indexHtml,
|
|
43
|
+
url: `${protocol}://${headers.host}${originalUrl}`,
|
|
44
|
+
publicPath: browserBundles,
|
|
45
|
+
providers: [{ provide: APP_BASE_HREF, useValue: baseUrl }],
|
|
46
|
+
})
|
|
47
|
+
.then((html) => res.send(html))
|
|
48
|
+
.catch((err) => next(err));
|
|
49
|
+
});
|
|
50
|
+
|
|
51
|
+
return server;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
function run(): void {
|
|
55
|
+
const port = process.env['PORT'] || 4000;
|
|
56
|
+
|
|
57
|
+
// Start up the Node server
|
|
58
|
+
const server = app();
|
|
59
|
+
server.listen(port, () => {
|
|
60
|
+
console.log(`Node Express server listening on http://localhost:${port}`);
|
|
61
|
+
|
|
62
|
+
/**
|
|
63
|
+
* DO NOT REMOVE IF USING @nx/angular:module-federation-dev-ssr executor
|
|
64
|
+
* to serve your Host application with this Remote application.
|
|
65
|
+
* This message allows Nx to determine when the Remote is ready to be
|
|
66
|
+
* consumed by the Host.
|
|
67
|
+
*/
|
|
68
|
+
process.send && process.send('nx.server.ready');
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
run();
|
|
73
|
+
|
|
74
|
+
export default <% if (standalone) { %>bootstrap<% } else { %>AppServerModule<% } %>;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export * from './find-next-available-port';
|
|
2
|
-
export * from './
|
|
2
|
+
export * from './update-ssr-setup';
|
|
@@ -2,4 +2,4 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
const tslib_1 = require("tslib");
|
|
4
4
|
tslib_1.__exportStar(require("./find-next-available-port"), exports);
|
|
5
|
-
tslib_1.__exportStar(require("./
|
|
5
|
+
tslib_1.__exportStar(require("./update-ssr-setup"), exports);
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { Tree } from '@nx/devkit';
|
|
2
|
-
export declare function
|
|
2
|
+
export declare function updateSsrSetup(tree: Tree, { appName, port, standalone, typescriptConfiguration, }: {
|
|
3
3
|
appName: string;
|
|
4
4
|
port: number;
|
|
5
5
|
standalone: boolean;
|
|
@@ -1,20 +1,18 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.updateSsrSetup = void 0;
|
|
4
4
|
const devkit_1 = require("@nx/devkit");
|
|
5
|
-
const
|
|
5
|
+
const path_1 = require("path");
|
|
6
6
|
const versions_1 = require("../../../utils/versions");
|
|
7
|
-
|
|
7
|
+
const version_utils_1 = require("../../utils/version-utils");
|
|
8
|
+
async function updateSsrSetup(tree, { appName, port, standalone, typescriptConfiguration, }) {
|
|
8
9
|
let project = (0, devkit_1.readProjectConfiguration)(tree, appName);
|
|
9
|
-
await (0, setup_ssr_1.default)(tree, {
|
|
10
|
-
project: appName,
|
|
11
|
-
standalone,
|
|
12
|
-
});
|
|
13
10
|
tree.rename((0, devkit_1.joinPathFragments)(project.sourceRoot, 'main.server.ts'), (0, devkit_1.joinPathFragments)(project.sourceRoot, 'bootstrap.server.ts'));
|
|
14
11
|
tree.write((0, devkit_1.joinPathFragments)(project.root, 'server.ts'), "import('./src/main.server');");
|
|
15
|
-
const browserBundleOutput =
|
|
16
|
-
const serverBundleOutput =
|
|
17
|
-
|
|
12
|
+
const browserBundleOutput = project.targets.build.options.outputPath;
|
|
13
|
+
const serverBundleOutput = project.targets.build.options.outputPath.replace(/\/browser$/, '/server');
|
|
14
|
+
const { major: angularMajorVersion } = (0, version_utils_1.getInstalledAngularVersionInfo)(tree);
|
|
15
|
+
(0, devkit_1.generateFiles)(tree, (0, path_1.join)(__dirname, '../files/common', angularMajorVersion >= 17 ? 'v17+' : 'pre-v17'), project.root, {
|
|
18
16
|
appName,
|
|
19
17
|
browserBundleOutput,
|
|
20
18
|
serverBundleOutput,
|
|
@@ -52,12 +50,10 @@ async function addSsr(tree, { appName, port, standalone, typescriptConfiguration
|
|
|
52
50
|
(0, devkit_1.updateProjectConfiguration)(tree, appName, project);
|
|
53
51
|
const installTask = (0, devkit_1.addDependenciesToPackageJson)(tree, {
|
|
54
52
|
cors: versions_1.corsVersion,
|
|
55
|
-
express: versions_1.expressVersion,
|
|
56
53
|
'@module-federation/node': versions_1.moduleFederationNodeVersion,
|
|
57
54
|
}, {
|
|
58
55
|
'@types/cors': versions_1.typesCorsVersion,
|
|
59
|
-
'@types/express': versions_1.typesExpressVersion,
|
|
60
56
|
});
|
|
61
57
|
return installTask;
|
|
62
58
|
}
|
|
63
|
-
exports.
|
|
59
|
+
exports.updateSsrSetup = updateSsrSetup;
|
|
@@ -3,11 +3,9 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.remoteInternal = exports.remote = void 0;
|
|
4
4
|
const devkit_1 = require("@nx/devkit");
|
|
5
5
|
const project_name_and_root_utils_1 = require("@nx/devkit/src/generators/project-name-and-root-utils");
|
|
6
|
-
const semver_1 = require("semver");
|
|
7
6
|
const test_runners_1 = require("../../utils/test-runners");
|
|
8
7
|
const application_1 = require("../application/application");
|
|
9
8
|
const setup_mf_1 = require("../setup-mf/setup-mf");
|
|
10
|
-
const version_utils_1 = require("../utils/version-utils");
|
|
11
9
|
const lib_1 = require("./lib");
|
|
12
10
|
const versions_1 = require("@nx/js/src/utils/versions");
|
|
13
11
|
async function remote(tree, options) {
|
|
@@ -18,12 +16,8 @@ async function remote(tree, options) {
|
|
|
18
16
|
}
|
|
19
17
|
exports.remote = remote;
|
|
20
18
|
async function remoteInternal(tree, schema) {
|
|
21
|
-
const installedAngularVersionInfo = (0, version_utils_1.getInstalledAngularVersionInfo)(tree);
|
|
22
|
-
if ((0, semver_1.lt)(installedAngularVersionInfo.version, '14.1.0') && schema.standalone) {
|
|
23
|
-
throw new Error((0, devkit_1.stripIndents) `The "standalone" option is only supported in Angular >= 14.1.0. You are currently using ${installedAngularVersionInfo.version}.
|
|
24
|
-
You can resolve this error by removing the "standalone" option or by migrating to Angular 14.1.0.`);
|
|
25
|
-
}
|
|
26
19
|
const { typescriptConfiguration = true, ...options } = schema;
|
|
20
|
+
options.standalone = options.standalone ?? true;
|
|
27
21
|
const projects = (0, devkit_1.getProjects)(tree);
|
|
28
22
|
if (options.host && !projects.has(options.host)) {
|
|
29
23
|
throw new Error(`The name of the application to be used as the host app does not exist. (${options.host})`);
|
|
@@ -39,10 +33,11 @@ async function remoteInternal(tree, schema) {
|
|
|
39
33
|
const port = options.port ?? (0, lib_1.findNextAvailablePort)(tree);
|
|
40
34
|
const appInstallTask = await (0, application_1.applicationGenerator)(tree, {
|
|
41
35
|
...options,
|
|
42
|
-
standalone: options.standalone
|
|
36
|
+
standalone: options.standalone,
|
|
43
37
|
routing: true,
|
|
44
38
|
port,
|
|
45
39
|
skipFormat: true,
|
|
40
|
+
bundler: 'webpack',
|
|
46
41
|
});
|
|
47
42
|
const skipE2E = !options.e2eTestRunner || options.e2eTestRunner === test_runners_1.E2eTestRunner.None;
|
|
48
43
|
await (0, setup_mf_1.setupMf)(tree, {
|
|
@@ -64,7 +59,7 @@ async function remoteInternal(tree, schema) {
|
|
|
64
59
|
});
|
|
65
60
|
let installTasks = [appInstallTask, installSwcHelpersTask];
|
|
66
61
|
if (options.ssr) {
|
|
67
|
-
let ssrInstallTask = await (0, lib_1.
|
|
62
|
+
let ssrInstallTask = await (0, lib_1.updateSsrSetup)(tree, {
|
|
68
63
|
appName: remoteProjectName,
|
|
69
64
|
port,
|
|
70
65
|
typescriptConfiguration,
|
|
@@ -158,9 +158,9 @@
|
|
|
158
158
|
"x-priority": "internal"
|
|
159
159
|
},
|
|
160
160
|
"standalone": {
|
|
161
|
-
"description": "Whether to generate a remote application with standalone components.
|
|
161
|
+
"description": "Whether to generate a remote application with standalone components.",
|
|
162
162
|
"type": "boolean",
|
|
163
|
-
"default":
|
|
163
|
+
"default": true
|
|
164
164
|
},
|
|
165
165
|
"ssr": {
|
|
166
166
|
"description": "Whether to configure SSR for the remote application to be consumed by a host application using SSR.",
|
|
@@ -3,14 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.scamToStandalone = void 0;
|
|
4
4
|
const devkit_1 = require("@nx/devkit");
|
|
5
5
|
const lib_1 = require("./lib");
|
|
6
|
-
const version_utils_1 = require("../utils/version-utils");
|
|
7
|
-
const semver_1 = require("semver");
|
|
8
6
|
async function scamToStandalone(tree, { component, project: projectName, skipFormat }) {
|
|
9
|
-
const installedAngularVersionInfo = (0, version_utils_1.getInstalledAngularVersionInfo)(tree);
|
|
10
|
-
if ((0, semver_1.lt)(installedAngularVersionInfo.version, '14.1.0')) {
|
|
11
|
-
throw new Error((0, devkit_1.stripIndents) `This generator is only supported with Angular >= 14.1.0. You are currently using ${installedAngularVersionInfo.version}.
|
|
12
|
-
You can resolve this error by migrating to Angular 14.1.0.`);
|
|
13
|
-
}
|
|
14
7
|
const projects = (0, devkit_1.getProjects)(tree);
|
|
15
8
|
let project = (0, lib_1.getTargetProject)(projectName, projects);
|
|
16
9
|
const normalizedComponentPath = (0, devkit_1.joinPathFragments)(project.root, component);
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"$id": "GeneratorAngularScamToStandalone",
|
|
4
4
|
"cli": "nx",
|
|
5
5
|
"title": "Convert an Inline SCAM to Standalone Component",
|
|
6
|
-
"description": "Convert an Inline SCAM to a Standalone Component.
|
|
6
|
+
"description": "Convert an Inline SCAM to a Standalone Component.",
|
|
7
7
|
"type": "object",
|
|
8
8
|
"properties": {
|
|
9
9
|
"component": {
|
|
@@ -15,17 +15,8 @@ function addRemoteEntry(tree, { appName, routing, prefix, standalone }, appRoot)
|
|
|
15
15
|
if (standalone && routing) {
|
|
16
16
|
(0, route_utils_1.addRoute)(tree, (0, devkit_1.joinPathFragments)(appRoot, 'src/app/app.routes.ts'), `{path: '', loadChildren: () => import('./remote-entry/entry.routes').then(m => m.remoteRoutes)}`);
|
|
17
17
|
}
|
|
18
|
-
else {
|
|
19
|
-
|
|
20
|
-
(0, route_utils_1.addRoute)(tree, (0, devkit_1.joinPathFragments)(appRoot, 'src/app/app.routes.ts'), `{path: '', loadChildren: () => import('./remote-entry/entry.module').then(m => m.RemoteEntryModule)}`);
|
|
21
|
-
}
|
|
22
|
-
tree.write(`${appRoot}/src/app/app.module.ts`, `/*
|
|
23
|
-
* This RemoteEntryModule is imported here to allow TS to find the Module during
|
|
24
|
-
* compilation, allowing it to be included in the built bundle. This is required
|
|
25
|
-
* for the Module Federation Plugin to expose the Module correctly.
|
|
26
|
-
* */
|
|
27
|
-
import { RemoteEntryModule } from './remote-entry/entry.module';
|
|
28
|
-
${tree.read(`${appRoot}/src/app/app.module.ts`, 'utf-8')}`);
|
|
18
|
+
else if (routing) {
|
|
19
|
+
(0, route_utils_1.addRoute)(tree, (0, devkit_1.joinPathFragments)(appRoot, 'src/app/app.routes.ts'), `{path: '', loadChildren: () => import('./remote-entry/entry.module').then(m => m.RemoteEntryModule)}`);
|
|
29
20
|
}
|
|
30
21
|
}
|
|
31
22
|
exports.addRemoteEntry = addRemoteEntry;
|
|
@@ -2,13 +2,11 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.fixBootstrap = void 0;
|
|
4
4
|
const devkit_1 = require("@nx/devkit");
|
|
5
|
-
const version_utils_1 = require("../../utils/version-utils");
|
|
6
5
|
function fixBootstrap(tree, appRoot, options) {
|
|
7
6
|
const mainFilePath = (0, devkit_1.joinPathFragments)(appRoot, 'src/main.ts');
|
|
8
7
|
const bootstrapCode = tree.read(mainFilePath, 'utf-8');
|
|
9
|
-
const installedAngularMajor = (0, version_utils_1.getInstalledAngularMajorVersion)(tree);
|
|
10
8
|
if (options.standalone && options.mfType === 'remote') {
|
|
11
|
-
tree.write(`${appRoot}/src/bootstrap.ts`, standaloneBootstrapCode(
|
|
9
|
+
tree.write(`${appRoot}/src/bootstrap.ts`, standaloneBootstrapCode());
|
|
12
10
|
}
|
|
13
11
|
else {
|
|
14
12
|
tree.write((0, devkit_1.joinPathFragments)(appRoot, 'src/bootstrap.ts'), bootstrapCode);
|
|
@@ -25,17 +23,10 @@ function fixBootstrap(tree, appRoot, options) {
|
|
|
25
23
|
: bootstrapImportCode);
|
|
26
24
|
}
|
|
27
25
|
exports.fixBootstrap = fixBootstrap;
|
|
28
|
-
const standaloneBootstrapCode = (
|
|
26
|
+
const standaloneBootstrapCode = () => `import {bootstrapApplication} from "@angular/platform-browser";
|
|
29
27
|
import {appConfig} from './app/app.config';
|
|
30
28
|
import {RemoteEntryComponent} from './app/remote-entry/entry.component';
|
|
31
|
-
|
|
32
|
-
? `import {enableProdMode} from '@angular/core';
|
|
33
|
-
import {environment} from './environments/environment';
|
|
34
|
-
if(environment.production) {
|
|
35
|
-
enableProdMode();
|
|
36
|
-
}
|
|
37
|
-
`
|
|
38
|
-
: ``}
|
|
29
|
+
|
|
39
30
|
bootstrapApplication(RemoteEntryComponent, appConfig).catch((err) =>
|
|
40
31
|
console.error(err)
|
|
41
32
|
);`;
|
|
@@ -6,7 +6,7 @@ export * from './fix-bootstrap';
|
|
|
6
6
|
export * from './generate-config';
|
|
7
7
|
export * from './get-remotes-with-ports';
|
|
8
8
|
export * from './normalize-options';
|
|
9
|
-
export * from './
|
|
9
|
+
export * from './update-tsconfig';
|
|
10
10
|
export * from './setup-host-if-dynamic';
|
|
11
11
|
export * from './setup-serve-target';
|
|
12
12
|
export * from './update-host-app-routes';
|
|
@@ -9,7 +9,7 @@ tslib_1.__exportStar(require("./fix-bootstrap"), exports);
|
|
|
9
9
|
tslib_1.__exportStar(require("./generate-config"), exports);
|
|
10
10
|
tslib_1.__exportStar(require("./get-remotes-with-ports"), exports);
|
|
11
11
|
tslib_1.__exportStar(require("./normalize-options"), exports);
|
|
12
|
-
tslib_1.__exportStar(require("./
|
|
12
|
+
tslib_1.__exportStar(require("./update-tsconfig"), exports);
|
|
13
13
|
tslib_1.__exportStar(require("./setup-host-if-dynamic"), exports);
|
|
14
14
|
tslib_1.__exportStar(require("./setup-serve-target"), exports);
|
|
15
15
|
tslib_1.__exportStar(require("./update-host-app-routes"), exports);
|
|
@@ -8,6 +8,7 @@ function normalizeOptions(tree, options) {
|
|
|
8
8
|
typescriptConfiguration: options.typescriptConfiguration ?? true,
|
|
9
9
|
federationType: options.federationType ?? 'static',
|
|
10
10
|
prefix: options.prefix ?? (0, project_1.getProjectPrefix)(tree, options.appName),
|
|
11
|
+
standalone: options.standalone ?? true,
|
|
11
12
|
};
|
|
12
13
|
}
|
|
13
14
|
exports.normalizeOptions = normalizeOptions;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.updateTsConfig = void 0;
|
|
4
|
+
const devkit_1 = require("@nx/devkit");
|
|
5
|
+
function updateTsConfig(tree, schema) {
|
|
6
|
+
const { root } = (0, devkit_1.readProjectConfiguration)(tree, schema.appName);
|
|
7
|
+
(0, devkit_1.updateJson)(tree, (0, devkit_1.joinPathFragments)(root, `tsconfig.app.json`), (json) => {
|
|
8
|
+
json.compilerOptions ??= {};
|
|
9
|
+
json.compilerOptions.target = 'ES2020';
|
|
10
|
+
if (schema.mfType === 'remote') {
|
|
11
|
+
json.files ??= [];
|
|
12
|
+
json.files.push(schema.standalone
|
|
13
|
+
? 'src/app/remote-entry/entry.routes.ts'
|
|
14
|
+
: 'src/app/remote-entry/entry.module.ts');
|
|
15
|
+
}
|
|
16
|
+
return json;
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
exports.updateTsConfig = updateTsConfig;
|
|
@@ -71,8 +71,8 @@
|
|
|
71
71
|
},
|
|
72
72
|
"standalone": {
|
|
73
73
|
"type": "boolean",
|
|
74
|
-
"description": "Whether the application is a standalone application.
|
|
75
|
-
"default":
|
|
74
|
+
"description": "Whether the application is a standalone application.",
|
|
75
|
+
"default": true
|
|
76
76
|
},
|
|
77
77
|
"typescriptConfiguration": {
|
|
78
78
|
"type": "boolean",
|
|
@@ -3,14 +3,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.setupMf = void 0;
|
|
4
4
|
const devkit_1 = require("@nx/devkit");
|
|
5
5
|
const lib_1 = require("./lib");
|
|
6
|
-
const version_utils_1 = require("../utils/version-utils");
|
|
7
6
|
const versions_1 = require("../../utils/versions");
|
|
8
|
-
const semver_1 = require("semver");
|
|
9
7
|
async function setupMf(tree, rawOptions) {
|
|
10
|
-
const installedAngularInfo = (0, version_utils_1.getInstalledAngularVersionInfo)(tree);
|
|
11
|
-
if ((0, semver_1.lt)(installedAngularInfo.version, '14.1.0') && rawOptions.standalone) {
|
|
12
|
-
throw new Error(`The --standalone flag is not supported in your current version of Angular (${installedAngularInfo.version}). Please update to a version of Angular that supports Standalone Components (>= 14.1.0).`);
|
|
13
|
-
}
|
|
14
8
|
const options = (0, lib_1.normalizeOptions)(tree, rawOptions);
|
|
15
9
|
const projectConfig = (0, devkit_1.readProjectConfiguration)(tree, options.appName);
|
|
16
10
|
let installTask = () => { };
|
|
@@ -24,7 +18,7 @@ async function setupMf(tree, rawOptions) {
|
|
|
24
18
|
const remotesWithPorts = (0, lib_1.getRemotesWithPorts)(tree, options);
|
|
25
19
|
(0, lib_1.generateWebpackConfig)(tree, options, projectConfig.root, remotesWithPorts);
|
|
26
20
|
(0, lib_1.changeBuildTarget)(tree, options);
|
|
27
|
-
(0, lib_1.
|
|
21
|
+
(0, lib_1.updateTsConfig)(tree, options);
|
|
28
22
|
(0, lib_1.setupServeTarget)(tree, options);
|
|
29
23
|
(0, lib_1.fixBootstrap)(tree, projectConfig.root, options);
|
|
30
24
|
if (options.mfType === 'host') {
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { APP_BASE_HREF } from '@angular/common';
|
|
2
|
+
import { CommonEngine } from '@angular/ssr';
|
|
3
|
+
import express from 'express';
|
|
4
|
+
import { fileURLToPath } from 'node:url';
|
|
5
|
+
import { dirname, join, resolve } from 'node:path';
|
|
6
|
+
import <% if (standalone) { %>bootstrap<% } else { %>{ <%= rootModuleClassName %> }<% } %> from './src/<%= main.slice(0, -3) %>';
|
|
7
|
+
|
|
8
|
+
// The Express app is exported so that it can be used by serverless Functions.
|
|
9
|
+
export function app(): express.Express {
|
|
10
|
+
const server = express();
|
|
11
|
+
const serverDistFolder = dirname(fileURLToPath(import.meta.url));
|
|
12
|
+
const browserDistFolder = resolve(serverDistFolder, '../browser');
|
|
13
|
+
const indexHtml = join(serverDistFolder, 'index.server.html');
|
|
14
|
+
|
|
15
|
+
const commonEngine = new CommonEngine();
|
|
16
|
+
|
|
17
|
+
server.set('view engine', 'html');
|
|
18
|
+
server.set('views', browserDistFolder);
|
|
19
|
+
|
|
20
|
+
// Example Express Rest API endpoints
|
|
21
|
+
// server.get('/api/**', (req, res) => { });
|
|
22
|
+
// Serve static files from /browser
|
|
23
|
+
server.get('*.*', express.static(browserDistFolder, {
|
|
24
|
+
maxAge: '1y'
|
|
25
|
+
}));
|
|
26
|
+
|
|
27
|
+
// All regular routes use the Angular engine
|
|
28
|
+
server.get('*', (req, res, next) => {
|
|
29
|
+
const { protocol, originalUrl, baseUrl, headers } = req;
|
|
30
|
+
|
|
31
|
+
commonEngine
|
|
32
|
+
.render({
|
|
33
|
+
bootstrap<% if (!standalone) { %>: <%= rootModuleClassName %><% } %>,
|
|
34
|
+
documentFilePath: indexHtml,
|
|
35
|
+
url: `${protocol}://${headers.host}${originalUrl}`,
|
|
36
|
+
publicPath: browserDistFolder,
|
|
37
|
+
providers: [{ provide: APP_BASE_HREF, useValue: baseUrl }],
|
|
38
|
+
})
|
|
39
|
+
.then((html) => res.send(html))
|
|
40
|
+
.catch((err) => next(err));
|
|
41
|
+
});
|
|
42
|
+
|
|
43
|
+
return server;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
function run(): void {
|
|
47
|
+
const port = process.env['PORT'] || <%= serverPort %>;
|
|
48
|
+
|
|
49
|
+
// Start up the Node server
|
|
50
|
+
const server = app();
|
|
51
|
+
server.listen(port, () => {
|
|
52
|
+
console.log(`Node Express server listening on http://localhost:${port}`);
|
|
53
|
+
});
|
|
54
|
+
}
|
|
@@ -5,8 +5,7 @@ import {ngExpressEngine} from '@nguniversal/express-engine';
|
|
|
5
5
|
import * as express from 'express';
|
|
6
6
|
import {existsSync} from 'fs';
|
|
7
7
|
import {join} from 'path';
|
|
8
|
-
|
|
9
|
-
import {<%= rootModuleClassName %>} from './src/<%= main.slice(0, -3) %>';
|
|
8
|
+
import <% if (standalone) { %>bootstrap<% } else { %>{ <%= rootModuleClassName %> }<% } %> from './src/<%= main.slice(0, -3) %>';
|
|
10
9
|
|
|
11
10
|
// The Express app is exported so that it can be used by serverless Functions.
|
|
12
11
|
export function app(): express.Express {
|
|
@@ -16,7 +15,7 @@ export function app(): express.Express {
|
|
|
16
15
|
|
|
17
16
|
// Our Universal express-engine (found @ https://github.com/angular/universal/tree/main/modules/express-engine)
|
|
18
17
|
server.engine('html', ngExpressEngine({
|
|
19
|
-
bootstrap
|
|
18
|
+
bootstrap<% if (!standalone) { %>: <%= rootModuleClassName %><% } %>,
|
|
20
19
|
}));
|
|
21
20
|
|
|
22
21
|
server.set('view engine', 'html');
|
|
@@ -57,4 +56,4 @@ if (moduleFilename === __filename || moduleFilename.includes('iisnode')) {
|
|
|
57
56
|
run();
|
|
58
57
|
}
|
|
59
58
|
|
|
60
|
-
export
|
|
59
|
+
export <% if (standalone) { %>default bootstrap<% } else { %>* from './src/<%= main.slice(0, -3) %>'<% } %>;
|
package/src/generators/setup-ssr/files/{standalone → server/server-builder/v17+}/__serverFileName__
RENAMED
|
@@ -1,23 +1,21 @@
|
|
|
1
|
-
import 'zone.js/
|
|
1
|
+
import 'zone.js/node';
|
|
2
2
|
|
|
3
|
-
import {APP_BASE_HREF} from '@angular/common';
|
|
4
|
-
import {
|
|
3
|
+
import { APP_BASE_HREF } from '@angular/common';
|
|
4
|
+
import { CommonEngine } from '@angular/ssr';
|
|
5
5
|
import * as express from 'express';
|
|
6
|
-
import {existsSync} from 'fs';
|
|
7
|
-
import {join} from 'path';
|
|
8
|
-
|
|
9
|
-
import bootstrap from './src/<%= main.slice(0, -3) %>';
|
|
6
|
+
import { existsSync } from 'node:fs';
|
|
7
|
+
import { join } from 'node:path';
|
|
8
|
+
import <% if (standalone) { %>bootstrap<% } else { %>{ <%= rootModuleClassName %> }<% } %> from './src/<%= main.slice(0, -3) %>';
|
|
10
9
|
|
|
11
10
|
// The Express app is exported so that it can be used by serverless Functions.
|
|
12
11
|
export function app(): express.Express {
|
|
13
12
|
const server = express();
|
|
14
13
|
const distFolder = join(process.cwd(), '<%= browserBundleOutputPath %>');
|
|
15
|
-
const indexHtml = existsSync(join(distFolder, 'index.original.html'))
|
|
14
|
+
const indexHtml = existsSync(join(distFolder, 'index.original.html'))
|
|
15
|
+
? join(distFolder, 'index.original.html')
|
|
16
|
+
: join(distFolder, 'index.html');
|
|
16
17
|
|
|
17
|
-
|
|
18
|
-
server.engine('html', ngExpressEngine({
|
|
19
|
-
bootstrap
|
|
20
|
-
}));
|
|
18
|
+
const commonEngine = new CommonEngine();
|
|
21
19
|
|
|
22
20
|
server.set('view engine', 'html');
|
|
23
21
|
server.set('views', distFolder);
|
|
@@ -29,9 +27,20 @@ export function app(): express.Express {
|
|
|
29
27
|
maxAge: '1y'
|
|
30
28
|
}));
|
|
31
29
|
|
|
32
|
-
// All regular routes use the
|
|
33
|
-
server.get('*', (req, res) => {
|
|
34
|
-
|
|
30
|
+
// All regular routes use the Angular engine
|
|
31
|
+
server.get('*', (req, res, next) => {
|
|
32
|
+
const { protocol, originalUrl, baseUrl, headers } = req;
|
|
33
|
+
|
|
34
|
+
commonEngine
|
|
35
|
+
.render({
|
|
36
|
+
bootstrap<% if (!standalone) { %>: <%= rootModuleClassName %><% } %>,
|
|
37
|
+
documentFilePath: indexHtml,
|
|
38
|
+
url: `${protocol}://${headers.host}${originalUrl}`,
|
|
39
|
+
publicPath: distFolder,
|
|
40
|
+
providers: [{ provide: APP_BASE_HREF, useValue: baseUrl }],
|
|
41
|
+
})
|
|
42
|
+
.then((html) => res.send(html))
|
|
43
|
+
.catch((err) => next(err));
|
|
35
44
|
});
|
|
36
45
|
|
|
37
46
|
return server;
|
|
@@ -57,4 +66,4 @@ if (moduleFilename === __filename || moduleFilename.includes('iisnode')) {
|
|
|
57
66
|
run();
|
|
58
67
|
}
|
|
59
68
|
|
|
60
|
-
export default bootstrap
|
|
69
|
+
export default <% if (standalone) { %>bootstrap<% } else { %><%= rootModuleClassName %><% } %>;
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.addDependencies = void 0;
|
|
4
|
+
const devkit_1 = require("@nx/devkit");
|
|
5
|
+
const version_utils_1 = require("../../utils/version-utils");
|
|
6
|
+
function addDependencies(tree) {
|
|
7
|
+
const pkgVersions = (0, version_utils_1.versions)(tree);
|
|
8
|
+
const { major: angularMajorVersion } = (0, version_utils_1.getInstalledAngularVersionInfo)(tree);
|
|
9
|
+
const dependencies = {
|
|
10
|
+
'@angular/platform-server': (0, version_utils_1.getInstalledPackageVersionInfo)(tree, '@angular/platform-server')
|
|
11
|
+
?.version ?? pkgVersions.angularVersion,
|
|
12
|
+
express: pkgVersions.expressVersion,
|
|
13
|
+
};
|
|
14
|
+
const devDependencies = {
|
|
15
|
+
'@types/express': pkgVersions.typesExpressVersion,
|
|
16
|
+
};
|
|
17
|
+
if (angularMajorVersion >= 17) {
|
|
18
|
+
dependencies['@angular/ssr'] =
|
|
19
|
+
(0, version_utils_1.getInstalledPackageVersionInfo)(tree, '@angular-devkit/build-angular')
|
|
20
|
+
?.version ?? pkgVersions.angularDevkitVersion;
|
|
21
|
+
}
|
|
22
|
+
else {
|
|
23
|
+
dependencies['@nguniversal/express-engine'] =
|
|
24
|
+
(0, version_utils_1.getInstalledPackageVersionInfo)(tree, '@nguniversal/express-engine')
|
|
25
|
+
?.version ?? pkgVersions.ngUniversalVersion;
|
|
26
|
+
devDependencies['@nguniversal/builders'] =
|
|
27
|
+
(0, version_utils_1.getInstalledPackageVersionInfo)(tree, '@nguniversal/builders')?.version ??
|
|
28
|
+
pkgVersions.ngUniversalVersion;
|
|
29
|
+
}
|
|
30
|
+
(0, devkit_1.addDependenciesToPackageJson)(tree, dependencies, devDependencies);
|
|
31
|
+
}
|
|
32
|
+
exports.addDependencies = addDependencies;
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import type { Tree } from '@nx/devkit';
|
|
2
2
|
import type { Schema } from '../schema';
|
|
3
|
-
export declare function generateSSRFiles(tree: Tree, schema: Schema): void;
|
|
3
|
+
export declare function generateSSRFiles(tree: Tree, schema: Schema, isUsingApplicationBuilder: boolean): void;
|
|
@@ -4,28 +4,25 @@ exports.generateSSRFiles = void 0;
|
|
|
4
4
|
const devkit_1 = require("@nx/devkit");
|
|
5
5
|
const semver_1 = require("semver");
|
|
6
6
|
const version_utils_1 = require("../../utils/version-utils");
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
const
|
|
10
|
-
const
|
|
11
|
-
const browserBundleOutputPath = projectConfig.targets.build.options.outputPath;
|
|
7
|
+
function generateSSRFiles(tree, schema, isUsingApplicationBuilder) {
|
|
8
|
+
const { root: projectRoot, targets } = (0, devkit_1.readProjectConfiguration)(tree, schema.project);
|
|
9
|
+
const baseOutputPath = targets.build.options.outputPath;
|
|
10
|
+
const browserBundleOutputPath = (0, devkit_1.joinPathFragments)(baseOutputPath, 'browser');
|
|
12
11
|
const pathToFiles = (0, devkit_1.joinPathFragments)(__dirname, '..', 'files');
|
|
13
|
-
|
|
14
|
-
...schema,
|
|
15
|
-
tpl: '',
|
|
16
|
-
});
|
|
12
|
+
const { version: angularVersion, major: angularMajorVersion } = (0, version_utils_1.getInstalledAngularVersionInfo)(tree);
|
|
17
13
|
if (schema.standalone) {
|
|
18
14
|
(0, devkit_1.generateFiles)(tree, (0, devkit_1.joinPathFragments)(pathToFiles, 'standalone'), projectRoot, { ...schema, browserBundleOutputPath, tpl: '' });
|
|
19
15
|
}
|
|
20
16
|
else {
|
|
21
17
|
(0, devkit_1.generateFiles)(tree, (0, devkit_1.joinPathFragments)(pathToFiles, 'ngmodule', 'base'), projectRoot, { ...schema, browserBundleOutputPath, tpl: '' });
|
|
22
|
-
const { major: angularMajorVersion, version: angularVersion } = (0, version_utils_1.getInstalledAngularVersionInfo)(tree);
|
|
23
|
-
if (angularMajorVersion < 15) {
|
|
24
|
-
(0, devkit_1.generateFiles)(tree, (0, devkit_1.joinPathFragments)(pathToFiles, 'ngmodule', 'v14'), projectRoot, { ...schema, browserBundleOutputPath, tpl: '' });
|
|
25
|
-
}
|
|
26
18
|
if ((0, semver_1.lt)(angularVersion, '15.2.0')) {
|
|
27
19
|
(0, devkit_1.generateFiles)(tree, (0, devkit_1.joinPathFragments)(pathToFiles, 'ngmodule', 'pre-v15-2'), projectRoot, { ...schema, browserBundleOutputPath, tpl: '' });
|
|
28
20
|
}
|
|
29
21
|
}
|
|
22
|
+
(0, devkit_1.generateFiles)(tree, (0, devkit_1.joinPathFragments)(pathToFiles, 'server', ...(isUsingApplicationBuilder
|
|
23
|
+
? ['application-builder']
|
|
24
|
+
: angularMajorVersion >= 17
|
|
25
|
+
? ['server-builder', 'v17+']
|
|
26
|
+
: ['server-builder', 'pre-v17'])), projectRoot, { ...schema, browserBundleOutputPath, tpl: '' });
|
|
30
27
|
}
|
|
31
28
|
exports.generateSSRFiles = generateSSRFiles;
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { type Tree } from '@nx/devkit';
|
|
2
|
+
import type { Schema } from '../schema';
|
|
3
|
+
export declare function setServerTsConfigOptionsForApplicationBuilder(tree: Tree, options: Schema): void;
|
|
4
|
+
export declare function generateTsConfigServerJsonForBrowserBuilder(tree: Tree, options: Schema): void;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.generateTsConfigServerJsonForBrowserBuilder = exports.setServerTsConfigOptionsForApplicationBuilder = void 0;
|
|
4
|
+
const devkit_1 = require("@nx/devkit");
|
|
5
|
+
const path_1 = require("path");
|
|
6
|
+
function setServerTsConfigOptionsForApplicationBuilder(tree, options) {
|
|
7
|
+
const { targets } = (0, devkit_1.readProjectConfiguration)(tree, options.project);
|
|
8
|
+
const tsConfigPath = targets.build.options.tsConfig;
|
|
9
|
+
(0, devkit_1.updateJson)(tree, tsConfigPath, (json) => {
|
|
10
|
+
json.files ??= [];
|
|
11
|
+
json.files.push((0, devkit_1.joinPathFragments)('src', options.main), (0, devkit_1.joinPathFragments)(options.serverFileName));
|
|
12
|
+
json.compilerOptions ??= {};
|
|
13
|
+
json.compilerOptions.types ??= [];
|
|
14
|
+
json.compilerOptions.types.push('node');
|
|
15
|
+
return json;
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
exports.setServerTsConfigOptionsForApplicationBuilder = setServerTsConfigOptionsForApplicationBuilder;
|
|
19
|
+
function generateTsConfigServerJsonForBrowserBuilder(tree, options) {
|
|
20
|
+
const { root } = (0, devkit_1.readProjectConfiguration)(tree, options.project);
|
|
21
|
+
(0, devkit_1.generateFiles)(tree, (0, path_1.join)(__dirname, '..', 'files', 'root'), root, {
|
|
22
|
+
...options,
|
|
23
|
+
tpl: '',
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
exports.generateTsConfigServerJsonForBrowserBuilder = generateTsConfigServerJsonForBrowserBuilder;
|