@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
|
@@ -742,9 +742,9 @@ import { Component, ViewEncapsulation } from '@angular/core';
|
|
|
742
742
|
Add UI library
|
|
743
743
|
</summary>
|
|
744
744
|
<pre><span># Generate UI lib</span>
|
|
745
|
-
nx g
|
|
745
|
+
nx g @nx/angular:lib ui
|
|
746
746
|
<span># Add a component</span>
|
|
747
|
-
nx g
|
|
747
|
+
nx g @nx/angular:component button --project ui</pre>
|
|
748
748
|
</details>
|
|
749
749
|
<details>
|
|
750
750
|
<summary>
|
|
@@ -1,11 +1,5 @@
|
|
|
1
|
-
import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'
|
|
2
|
-
import {
|
|
3
|
-
import { AppModule } from './app/app.module';<% if(installedAngularInfo.major === 14) { %>
|
|
4
|
-
import { environment } from './environments/environment';
|
|
5
|
-
|
|
6
|
-
if(environment.production) {
|
|
7
|
-
enableProdMode();
|
|
8
|
-
}<% } %>
|
|
1
|
+
import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
|
|
2
|
+
import { AppModule } from './app/app.module';
|
|
9
3
|
|
|
10
4
|
platformBrowserDynamic()
|
|
11
5
|
.bootstrapModule(AppModule)
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { ApplicationConfig } from <% if (installedAngularInfo.major >= 16) { %>'@angular/core';<% } else { %>'@angular/platform-browser';<% } %><% if (routing) { %>
|
|
2
|
-
import { provideRouter
|
|
2
|
+
import { provideRouter } from '@angular/router';
|
|
3
3
|
import { appRoutes } from './app.routes';<% } %>
|
|
4
4
|
|
|
5
5
|
export const appConfig: ApplicationConfig = {
|
|
6
|
-
providers: [<% if (routing) { %>provideRouter(appRoutes
|
|
6
|
+
providers: [<% if (routing) { %>provideRouter(appRoutes) <% } %>]
|
|
7
7
|
};
|
|
@@ -745,9 +745,9 @@ import { CommonModule } from '@angular/common';
|
|
|
745
745
|
Add UI library
|
|
746
746
|
</summary>
|
|
747
747
|
<pre><span># Generate UI lib</span>
|
|
748
|
-
nx g
|
|
748
|
+
nx g @nx/angular:lib ui
|
|
749
749
|
<span># Add a component</span>
|
|
750
|
-
nx g
|
|
750
|
+
nx g @nx/angular:component button --project ui</pre>
|
|
751
751
|
</details>
|
|
752
752
|
<details>
|
|
753
753
|
<summary>
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.addE2e = void 0;
|
|
4
|
+
const cypress_1 = require("@nx/cypress");
|
|
4
5
|
const devkit_1 = require("@nx/devkit");
|
|
5
6
|
const versions_1 = require("../../../utils/versions");
|
|
6
|
-
const
|
|
7
|
+
const version_utils_1 = require("../../utils/version-utils");
|
|
7
8
|
async function addE2e(tree, options) {
|
|
8
9
|
if (options.e2eTestRunner === 'cypress') {
|
|
9
10
|
// TODO: This can call `@nx/web:static-config` generator when ready
|
|
@@ -52,12 +53,17 @@ async function addE2e(tree, options) {
|
|
|
52
53
|
exports.addE2e = addE2e;
|
|
53
54
|
function addFileServerTarget(tree, options, targetName) {
|
|
54
55
|
(0, devkit_1.addDependenciesToPackageJson)(tree, {}, { '@nx/web': versions_1.nxVersion });
|
|
56
|
+
const { major: angularMajorVersion } = (0, version_utils_1.getInstalledAngularVersionInfo)(tree);
|
|
57
|
+
const isUsingApplicationBuilder = angularMajorVersion >= 17 && options.bundler === 'esbuild';
|
|
55
58
|
const projectConfig = (0, devkit_1.readProjectConfiguration)(tree, options.name);
|
|
56
59
|
projectConfig.targets[targetName] = {
|
|
57
60
|
executor: '@nx/web:file-server',
|
|
58
61
|
options: {
|
|
59
62
|
buildTarget: `${options.name}:build`,
|
|
60
63
|
port: options.port,
|
|
64
|
+
staticFilePath: isUsingApplicationBuilder
|
|
65
|
+
? (0, devkit_1.joinPathFragments)(options.outputPath, 'browser')
|
|
66
|
+
: undefined,
|
|
61
67
|
},
|
|
62
68
|
};
|
|
63
69
|
(0, devkit_1.updateProjectConfiguration)(tree, options.name, projectConfig);
|
|
@@ -4,6 +4,7 @@ exports.addUnitTestRunner = void 0;
|
|
|
4
4
|
const devkit_1 = require("@nx/devkit");
|
|
5
5
|
const jest_1 = require("@nx/jest");
|
|
6
6
|
const test_runners_1 = require("../../../utils/test-runners");
|
|
7
|
+
const version_utils_1 = require("../../utils/version-utils");
|
|
7
8
|
async function addUnitTestRunner(host, options) {
|
|
8
9
|
if (options.unitTestRunner === test_runners_1.UnitTestRunner.Jest) {
|
|
9
10
|
await (0, jest_1.configurationGenerator)(host, {
|
|
@@ -15,6 +16,7 @@ async function addUnitTestRunner(host, options) {
|
|
|
15
16
|
skipFormat: true,
|
|
16
17
|
});
|
|
17
18
|
const setupFile = (0, devkit_1.joinPathFragments)(options.appProjectRoot, 'src', 'test-setup.ts');
|
|
19
|
+
const { major: angularMajorVersion } = (0, version_utils_1.getInstalledAngularVersionInfo)(host);
|
|
18
20
|
if (options.strict && host.exists(setupFile)) {
|
|
19
21
|
const contents = host.read(setupFile, 'utf-8');
|
|
20
22
|
host.write(setupFile, `// @ts-expect-error https://thymikee.github.io/jest-preset-angular/docs/getting-started/test-environment
|
|
@@ -24,7 +26,15 @@ globalThis.ngJest = {
|
|
|
24
26
|
errorOnUnknownProperties: true,
|
|
25
27
|
},
|
|
26
28
|
};
|
|
27
|
-
${contents}
|
|
29
|
+
${contents}${angularMajorVersion >= 17
|
|
30
|
+
? `
|
|
31
|
+
/**
|
|
32
|
+
* Angular uses performance.mark() which is not supported by jsdom. Stub it out
|
|
33
|
+
* to avoid errors.
|
|
34
|
+
*/
|
|
35
|
+
global.performance.mark = jest.fn();
|
|
36
|
+
`
|
|
37
|
+
: ''}`);
|
|
28
38
|
}
|
|
29
39
|
}
|
|
30
40
|
}
|
|
@@ -8,6 +8,7 @@ const test_runners_1 = require("../../../utils/test-runners");
|
|
|
8
8
|
const version_utils_1 = require("../../utils/version-utils");
|
|
9
9
|
async function createFiles(tree, options, rootOffset) {
|
|
10
10
|
const installedAngularInfo = (0, version_utils_1.getInstalledAngularVersionInfo)(tree);
|
|
11
|
+
const isUsingApplicationBuilder = installedAngularInfo.major >= 17 && options.bundler === 'esbuild';
|
|
11
12
|
const substitutions = {
|
|
12
13
|
rootSelector: `${options.prefix}-root`,
|
|
13
14
|
appName: options.name,
|
|
@@ -22,19 +23,23 @@ async function createFiles(tree, options, rootOffset) {
|
|
|
22
23
|
rootTsConfig: (0, devkit_1.joinPathFragments)(rootOffset, (0, js_1.getRootTsConfigFileName)(tree)),
|
|
23
24
|
installedAngularInfo,
|
|
24
25
|
rootOffset,
|
|
26
|
+
isUsingApplicationBuilder,
|
|
25
27
|
tpl: '',
|
|
26
28
|
};
|
|
27
29
|
(0, devkit_1.generateFiles)(tree, (0, devkit_1.joinPathFragments)(__dirname, '../files/base'), options.appProjectRoot, substitutions);
|
|
28
|
-
if (installedAngularInfo.major === 14) {
|
|
29
|
-
(0, devkit_1.generateFiles)(tree, (0, devkit_1.joinPathFragments)(__dirname, '../files/v14'), options.appProjectRoot, substitutions);
|
|
30
|
-
}
|
|
31
30
|
if (options.standalone) {
|
|
32
31
|
(0, devkit_1.generateFiles)(tree, (0, devkit_1.joinPathFragments)(__dirname, '../files/standalone-components'), options.appProjectRoot, substitutions);
|
|
33
32
|
}
|
|
34
33
|
else {
|
|
35
|
-
|
|
34
|
+
(0, devkit_1.generateFiles)(tree, (0, devkit_1.joinPathFragments)(__dirname, '../files/ng-module'), options.appProjectRoot, substitutions);
|
|
36
35
|
}
|
|
37
|
-
(0, create_ts_config_1.createTsConfig)(tree, options.appProjectRoot, 'app',
|
|
36
|
+
(0, create_ts_config_1.createTsConfig)(tree, options.appProjectRoot, 'app', {
|
|
37
|
+
bundler: options.bundler,
|
|
38
|
+
rootProject: options.rootProject,
|
|
39
|
+
strict: options.strict,
|
|
40
|
+
style: options.style,
|
|
41
|
+
esModuleInterop: isUsingApplicationBuilder,
|
|
42
|
+
}, (0, js_1.getRelativePathToRootTsConfig)(tree, options.appProjectRoot));
|
|
38
43
|
if (!options.routing) {
|
|
39
44
|
tree.delete((0, devkit_1.joinPathFragments)(options.appProjectRoot, '/src/app/app.routes.ts'));
|
|
40
45
|
}
|
|
@@ -4,64 +4,72 @@ exports.createProject = void 0;
|
|
|
4
4
|
const devkit_1 = require("@nx/devkit");
|
|
5
5
|
const version_utils_1 = require("../../utils/version-utils");
|
|
6
6
|
function createProject(tree, options) {
|
|
7
|
-
const
|
|
7
|
+
const { major: angularMajorVersion } = (0, version_utils_1.getInstalledAngularVersionInfo)(tree);
|
|
8
8
|
const buildExecutor = options.bundler === 'webpack'
|
|
9
9
|
? '@angular-devkit/build-angular:browser'
|
|
10
|
-
:
|
|
10
|
+
: angularMajorVersion >= 17
|
|
11
|
+
? '@angular-devkit/build-angular:application'
|
|
12
|
+
: '@angular-devkit/build-angular:browser-esbuild';
|
|
13
|
+
const buildTargetOptionName = angularMajorVersion >= 17 ? 'buildTarget' : 'browserTarget';
|
|
14
|
+
const buildMainOptionName = angularMajorVersion >= 17 && options.bundler === 'esbuild'
|
|
15
|
+
? 'browser'
|
|
16
|
+
: 'main';
|
|
17
|
+
let budgets = undefined;
|
|
18
|
+
if (options.bundler === 'webpack' || angularMajorVersion >= 17) {
|
|
19
|
+
if (options.strict) {
|
|
20
|
+
budgets = [
|
|
21
|
+
{ type: 'initial', maximumWarning: '500kb', maximumError: '1mb' },
|
|
22
|
+
{
|
|
23
|
+
type: 'anyComponentStyle',
|
|
24
|
+
maximumWarning: '2kb',
|
|
25
|
+
maximumError: '4kb',
|
|
26
|
+
},
|
|
27
|
+
];
|
|
28
|
+
}
|
|
29
|
+
else {
|
|
30
|
+
budgets = [
|
|
31
|
+
{ type: 'initial', maximumWarning: '2mb', maximumError: '5mb' },
|
|
32
|
+
{
|
|
33
|
+
type: 'anyComponentStyle',
|
|
34
|
+
maximumWarning: '6kb',
|
|
35
|
+
maximumError: '10kb',
|
|
36
|
+
},
|
|
37
|
+
];
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
const inlineStyleLanguage = options?.style !== 'css' ? options.style : undefined;
|
|
11
41
|
const project = {
|
|
12
42
|
name: options.name,
|
|
13
43
|
projectType: 'application',
|
|
14
44
|
prefix: options.prefix,
|
|
15
45
|
root: options.appProjectRoot,
|
|
16
|
-
sourceRoot:
|
|
46
|
+
sourceRoot: options.appProjectSourceRoot,
|
|
17
47
|
tags: options.parsedTags,
|
|
18
48
|
targets: {
|
|
19
49
|
build: {
|
|
20
50
|
executor: buildExecutor,
|
|
21
51
|
outputs: ['{options.outputPath}'],
|
|
22
52
|
options: {
|
|
23
|
-
outputPath:
|
|
24
|
-
index: `${options.
|
|
25
|
-
|
|
26
|
-
polyfills:
|
|
27
|
-
? `${options.appProjectRoot}/src/polyfills.ts`
|
|
28
|
-
: ['zone.js'],
|
|
53
|
+
outputPath: options.outputPath,
|
|
54
|
+
index: `${options.appProjectSourceRoot}/index.html`,
|
|
55
|
+
[buildMainOptionName]: `${options.appProjectSourceRoot}/main.ts`,
|
|
56
|
+
polyfills: ['zone.js'],
|
|
29
57
|
tsConfig: `${options.appProjectRoot}/tsconfig.app.json`,
|
|
58
|
+
inlineStyleLanguage,
|
|
30
59
|
assets: [
|
|
31
|
-
`${options.
|
|
32
|
-
`${options.
|
|
60
|
+
`${options.appProjectSourceRoot}/favicon.ico`,
|
|
61
|
+
`${options.appProjectSourceRoot}/assets`,
|
|
33
62
|
],
|
|
34
|
-
styles: [`${options.
|
|
63
|
+
styles: [`${options.appProjectSourceRoot}/styles.${options.style}`],
|
|
35
64
|
scripts: [],
|
|
36
65
|
},
|
|
37
66
|
configurations: {
|
|
38
67
|
production: {
|
|
39
|
-
budgets
|
|
40
|
-
? [
|
|
41
|
-
{
|
|
42
|
-
type: 'initial',
|
|
43
|
-
maximumWarning: '500kb',
|
|
44
|
-
maximumError: '1mb',
|
|
45
|
-
},
|
|
46
|
-
{
|
|
47
|
-
type: 'anyComponentStyle',
|
|
48
|
-
maximumWarning: '2kb',
|
|
49
|
-
maximumError: '4kb',
|
|
50
|
-
},
|
|
51
|
-
]
|
|
52
|
-
: undefined,
|
|
53
|
-
fileReplacements: installedAngularInfo.major === 14
|
|
54
|
-
? [
|
|
55
|
-
{
|
|
56
|
-
replace: `${options.appProjectRoot}/src/environments/environment.ts`,
|
|
57
|
-
with: `${options.appProjectRoot}/src/environments/environment.prod.ts`,
|
|
58
|
-
},
|
|
59
|
-
]
|
|
60
|
-
: undefined,
|
|
68
|
+
budgets,
|
|
61
69
|
outputHashing: 'all',
|
|
62
70
|
},
|
|
63
71
|
development: {
|
|
64
|
-
buildOptimizer: false,
|
|
72
|
+
buildOptimizer: options.bundler === 'webpack' ? false : undefined,
|
|
65
73
|
optimization: false,
|
|
66
74
|
vendorChunk: options.bundler === 'webpack' ? true : undefined,
|
|
67
75
|
extractLicenses: false,
|
|
@@ -80,10 +88,10 @@ function createProject(tree, options) {
|
|
|
80
88
|
: undefined,
|
|
81
89
|
configurations: {
|
|
82
90
|
production: {
|
|
83
|
-
|
|
91
|
+
[buildTargetOptionName]: `${options.name}:build:production`,
|
|
84
92
|
},
|
|
85
93
|
development: {
|
|
86
|
-
|
|
94
|
+
[buildTargetOptionName]: `${options.name}:build:development`,
|
|
87
95
|
},
|
|
88
96
|
},
|
|
89
97
|
defaultConfiguration: 'development',
|
|
@@ -91,7 +99,7 @@ function createProject(tree, options) {
|
|
|
91
99
|
'extract-i18n': {
|
|
92
100
|
executor: '@angular-devkit/build-angular:extract-i18n',
|
|
93
101
|
options: {
|
|
94
|
-
|
|
102
|
+
[buildTargetOptionName]: `${options.name}:build`,
|
|
95
103
|
},
|
|
96
104
|
},
|
|
97
105
|
},
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Tree } from '@nx/devkit';
|
|
1
|
+
import { type Tree } from '@nx/devkit';
|
|
2
2
|
import type { Schema } from '../schema';
|
|
3
3
|
import type { NormalizedSchema } from './normalized-schema';
|
|
4
4
|
export declare function normalizeOptions(host: Tree, options: Partial<Schema>): Promise<NormalizedSchema>;
|
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.normalizeOptions = void 0;
|
|
4
|
+
const devkit_1 = require("@nx/devkit");
|
|
4
5
|
const project_name_and_root_utils_1 = require("@nx/devkit/src/generators/project-name-and-root-utils");
|
|
5
|
-
const get_npm_scope_1 = require("@nx/js/src/utils/package-json/get-npm-scope");
|
|
6
6
|
const eslint_1 = require("@nx/eslint");
|
|
7
|
+
const get_npm_scope_1 = require("@nx/js/src/utils/package-json/get-npm-scope");
|
|
7
8
|
const test_runners_1 = require("../../../utils/test-runners");
|
|
8
9
|
const project_1 = require("../../utils/project");
|
|
10
|
+
const version_utils_1 = require("../../utils/version-utils");
|
|
9
11
|
async function normalizeOptions(host, options) {
|
|
10
12
|
const { projectName: appProjectName, projectRoot: appProjectRoot, projectNameAndRootFormat, } = await (0, project_name_and_root_utils_1.determineProjectNameAndRootOptions)(host, {
|
|
11
13
|
name: options.name,
|
|
@@ -23,10 +25,15 @@ async function normalizeOptions(host, options) {
|
|
|
23
25
|
? options.tags.split(',').map((s) => s.trim())
|
|
24
26
|
: [];
|
|
25
27
|
const prefix = (0, project_1.normalizeNewProjectPrefix)(options.prefix, (0, get_npm_scope_1.getNpmScope)(host), 'app');
|
|
28
|
+
let bundler = options.bundler;
|
|
29
|
+
if (!bundler) {
|
|
30
|
+
const { major: angularMajorVersion } = (0, version_utils_1.getInstalledAngularVersionInfo)(host);
|
|
31
|
+
bundler = angularMajorVersion >= 17 ? 'esbuild' : 'webpack';
|
|
32
|
+
}
|
|
26
33
|
// Set defaults and then overwrite with user options
|
|
27
34
|
return {
|
|
28
35
|
style: 'css',
|
|
29
|
-
routing:
|
|
36
|
+
routing: true,
|
|
30
37
|
inlineStyle: false,
|
|
31
38
|
inlineTemplate: false,
|
|
32
39
|
skipTests: options.unitTestRunner === test_runners_1.UnitTestRunner.None,
|
|
@@ -35,14 +42,18 @@ async function normalizeOptions(host, options) {
|
|
|
35
42
|
e2eTestRunner: test_runners_1.E2eTestRunner.Cypress,
|
|
36
43
|
linter: eslint_1.Linter.EsLint,
|
|
37
44
|
strict: true,
|
|
38
|
-
|
|
45
|
+
standalone: true,
|
|
39
46
|
...options,
|
|
40
47
|
prefix,
|
|
41
48
|
name: appProjectName,
|
|
42
49
|
appProjectRoot,
|
|
50
|
+
appProjectSourceRoot: `${appProjectRoot}/src`,
|
|
43
51
|
e2eProjectRoot,
|
|
44
52
|
e2eProjectName,
|
|
45
53
|
parsedTags,
|
|
54
|
+
bundler,
|
|
55
|
+
outputPath: (0, devkit_1.joinPathFragments)('dist', !options.rootProject ? appProjectRoot : appProjectName),
|
|
56
|
+
ssr: options.ssr ?? false,
|
|
46
57
|
};
|
|
47
58
|
}
|
|
48
59
|
exports.normalizeOptions = normalizeOptions;
|
|
@@ -7,7 +7,9 @@ export interface NormalizedSchema extends Schema {
|
|
|
7
7
|
e2eTestRunner: E2eTestRunner;
|
|
8
8
|
prefix: string;
|
|
9
9
|
appProjectRoot: string;
|
|
10
|
+
appProjectSourceRoot: string;
|
|
10
11
|
e2eProjectName: string;
|
|
11
12
|
e2eProjectRoot: string;
|
|
12
13
|
parsedTags: string[];
|
|
14
|
+
outputPath: string;
|
|
13
15
|
}
|
|
@@ -56,9 +56,8 @@
|
|
|
56
56
|
},
|
|
57
57
|
"routing": {
|
|
58
58
|
"type": "boolean",
|
|
59
|
-
"description": "
|
|
60
|
-
"default":
|
|
61
|
-
"x-prompt": "Would you like to configure routing for this application?",
|
|
59
|
+
"description": "Enable routing for the application.",
|
|
60
|
+
"default": true,
|
|
62
61
|
"x-priority": "important"
|
|
63
62
|
},
|
|
64
63
|
"inlineStyle": {
|
|
@@ -155,8 +154,9 @@
|
|
|
155
154
|
"default": false
|
|
156
155
|
},
|
|
157
156
|
"standalone": {
|
|
158
|
-
"description": "Generate an application that is setup to use standalone components.
|
|
157
|
+
"description": "Generate an application that is setup to use standalone components.",
|
|
159
158
|
"type": "boolean",
|
|
159
|
+
"default": true,
|
|
160
160
|
"x-priority": "important"
|
|
161
161
|
},
|
|
162
162
|
"rootProject": {
|
|
@@ -172,10 +172,17 @@
|
|
|
172
172
|
"default": false
|
|
173
173
|
},
|
|
174
174
|
"bundler": {
|
|
175
|
-
"description": "Bundler to use to build the application.",
|
|
175
|
+
"description": "Bundler to use to build the application. It defaults to `esbuild` for Angular versions >= 17.0.0. Otherwise, it defaults to `webpack`. _Note: The `esbuild` bundler is only considered stable from Angular v17._",
|
|
176
176
|
"type": "string",
|
|
177
177
|
"enum": ["webpack", "esbuild"],
|
|
178
|
-
"
|
|
178
|
+
"x-prompt": "Which bundler do you want to use to build the application?",
|
|
179
|
+
"x-priority": "important"
|
|
180
|
+
},
|
|
181
|
+
"ssr": {
|
|
182
|
+
"description": "Creates an application with Server-Side Rendering (SSR) and Static Site Generation (SSG/Prerendering) enabled.",
|
|
183
|
+
"type": "boolean",
|
|
184
|
+
"x-prompt": "Do you want to enable Server-Side Rendering (SSR) and Static Site Generation (SSG/Prerendering)?",
|
|
185
|
+
"default": false
|
|
179
186
|
}
|
|
180
187
|
},
|
|
181
188
|
"additionalProperties": false,
|
|
@@ -12,7 +12,6 @@ async function componentGenerator(tree, rawOptions) {
|
|
|
12
12
|
}
|
|
13
13
|
exports.componentGenerator = componentGenerator;
|
|
14
14
|
async function componentGeneratorInternal(tree, rawOptions) {
|
|
15
|
-
(0, lib_1.validateOptions)(tree, rawOptions);
|
|
16
15
|
const options = await (0, lib_1.normalizeOptions)(tree, rawOptions);
|
|
17
16
|
(0, devkit_1.generateFiles)(tree, (0, devkit_1.joinPathFragments)(__dirname, 'files'), options.directory, {
|
|
18
17
|
name: options.name,
|
|
@@ -60,9 +60,9 @@
|
|
|
60
60
|
"alias": "t"
|
|
61
61
|
},
|
|
62
62
|
"standalone": {
|
|
63
|
-
"description": "Whether the generated component is standalone.
|
|
63
|
+
"description": "Whether the generated component is standalone.",
|
|
64
64
|
"type": "boolean",
|
|
65
|
-
"default":
|
|
65
|
+
"default": true,
|
|
66
66
|
"x-priority": "important"
|
|
67
67
|
},
|
|
68
68
|
"viewEncapsulation": {
|
|
@@ -5,7 +5,6 @@ const devkit_1 = require("@nx/devkit");
|
|
|
5
5
|
const utils_1 = require("../utils");
|
|
6
6
|
const lib_1 = require("./lib");
|
|
7
7
|
async function directiveGenerator(tree, schema) {
|
|
8
|
-
(0, lib_1.validateOptions)(tree, schema);
|
|
9
8
|
const options = await (0, lib_1.normalizeOptions)(tree, schema);
|
|
10
9
|
(0, devkit_1.generateFiles)(tree, (0, devkit_1.joinPathFragments)(__dirname, 'files'), options.directory, {
|
|
11
10
|
selector: options.selector,
|
|
@@ -66,9 +66,9 @@
|
|
|
66
66
|
"description": "The HTML selector to use for this directive."
|
|
67
67
|
},
|
|
68
68
|
"standalone": {
|
|
69
|
-
"description": "Whether the generated directive is standalone.
|
|
69
|
+
"description": "Whether the generated directive is standalone.",
|
|
70
70
|
"type": "boolean",
|
|
71
|
-
"default":
|
|
71
|
+
"default": true
|
|
72
72
|
},
|
|
73
73
|
"flat": {
|
|
74
74
|
"type": "boolean",
|
|
@@ -9,6 +9,7 @@ async function federateModuleGenerator(tree, schema) {
|
|
|
9
9
|
|
|
10
10
|
Path: ${schema.path}`);
|
|
11
11
|
}
|
|
12
|
+
schema.standalone = schema.standalone ?? true;
|
|
12
13
|
const { tasks, projectRoot, remoteName } = await (0, lib_1.addRemote)(tree, schema);
|
|
13
14
|
(0, lib_1.addFileToRemoteTsconfig)(tree, remoteName, schema.path);
|
|
14
15
|
(0, lib_1.addPathToExposes)(tree, {
|
|
@@ -1,24 +1,15 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.addRemote = void 0;
|
|
4
|
-
const devkit_1 = require("@nx/devkit");
|
|
5
4
|
const project_name_and_root_utils_1 = require("@nx/devkit/src/generators/project-name-and-root-utils");
|
|
6
|
-
const semver_1 = require("semver");
|
|
7
|
-
const check_remote_exists_1 = require("./check-remote-exists");
|
|
8
|
-
const version_utils_1 = require("../../utils/version-utils");
|
|
9
|
-
const remote_1 = require("../../remote/remote");
|
|
10
5
|
const test_runners_1 = require("../../../utils/test-runners");
|
|
6
|
+
const remote_1 = require("../../remote/remote");
|
|
7
|
+
const check_remote_exists_1 = require("./check-remote-exists");
|
|
11
8
|
async function addRemote(tree, schema) {
|
|
12
9
|
const tasks = [];
|
|
13
10
|
const remote = (0, check_remote_exists_1.getRemoteIfExists)(tree, schema.remote);
|
|
14
11
|
let projectRoot, remoteName;
|
|
15
12
|
if (!remote) {
|
|
16
|
-
const installedAngularVersionInfo = (0, version_utils_1.getInstalledAngularVersionInfo)(tree);
|
|
17
|
-
if ((0, semver_1.lt)(installedAngularVersionInfo.version, '14.1.0') &&
|
|
18
|
-
schema.standalone) {
|
|
19
|
-
throw new Error((0, devkit_1.stripIndents) `The "standalone" option is only supported in Angular >= 14.1.0. You are currently using ${installedAngularVersionInfo.version}.
|
|
20
|
-
You can resolve this error by removing the "standalone" option or by migrating to Angular 14.1.0.`);
|
|
21
|
-
}
|
|
22
13
|
const remoteGeneratorCallback = await (0, remote_1.default)(tree, {
|
|
23
14
|
name: schema.remote,
|
|
24
15
|
directory: schema.remoteDirectory,
|
|
@@ -12,22 +12,22 @@
|
|
|
12
12
|
],
|
|
13
13
|
"type": "object",
|
|
14
14
|
"properties": {
|
|
15
|
-
"
|
|
16
|
-
"description": "The name of the module.",
|
|
15
|
+
"path": {
|
|
17
16
|
"type": "string",
|
|
18
17
|
"$default": {
|
|
19
18
|
"$source": "argv",
|
|
20
19
|
"index": 0
|
|
21
20
|
},
|
|
21
|
+
"description": "The path to locate the federated module.",
|
|
22
|
+
"x-prompt": "What is the path to the module to be federated?"
|
|
23
|
+
},
|
|
24
|
+
"name": {
|
|
25
|
+
"description": "The name of the module.",
|
|
26
|
+
"type": "string",
|
|
22
27
|
"x-prompt": "What name would you like to use for the module?",
|
|
23
28
|
"pattern": "^[a-zA-Z][^:]*$",
|
|
24
29
|
"x-priority": "important"
|
|
25
30
|
},
|
|
26
|
-
"path": {
|
|
27
|
-
"type": "string",
|
|
28
|
-
"description": "The path to locate the federated module.",
|
|
29
|
-
"x-prompt": "What is the path to the module to be federated?"
|
|
30
|
-
},
|
|
31
31
|
"remote": {
|
|
32
32
|
"type": "string",
|
|
33
33
|
"description": "The name of the remote.",
|
|
@@ -67,9 +67,9 @@
|
|
|
67
67
|
"default": "cypress"
|
|
68
68
|
},
|
|
69
69
|
"standalone": {
|
|
70
|
-
"description": "Whether to generate the remote application with standalone components if it needs to be created.
|
|
70
|
+
"description": "Whether to generate the remote application with standalone components if it needs to be created.",
|
|
71
71
|
"type": "boolean",
|
|
72
|
-
"default":
|
|
72
|
+
"default": true
|
|
73
73
|
},
|
|
74
74
|
"host": {
|
|
75
75
|
"type": "string",
|
|
@@ -0,0 +1,67 @@
|
|
|
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 distFolder = join(process.cwd(), '<%= browserBundleOutput %>');
|
|
15
|
+
const indexHtml = existsSync(join(distFolder, 'index.original.html'))
|
|
16
|
+
? join(distFolder, 'index.original.html')
|
|
17
|
+
: join(distFolder, 'index.html');
|
|
18
|
+
|
|
19
|
+
server.use(cors());
|
|
20
|
+
|
|
21
|
+
const commonEngine = new CommonEngine();
|
|
22
|
+
|
|
23
|
+
server.set('view engine', 'html');
|
|
24
|
+
server.set('views', distFolder);
|
|
25
|
+
|
|
26
|
+
// Example Express Rest API endpoints
|
|
27
|
+
// server.get('/api/**', (req, res) => { });
|
|
28
|
+
// Serve static files from /browser
|
|
29
|
+
server.get(
|
|
30
|
+
'*.*',
|
|
31
|
+
express.static(distFolder, {
|
|
32
|
+
maxAge: '1y',
|
|
33
|
+
})
|
|
34
|
+
);
|
|
35
|
+
|
|
36
|
+
// All regular routes use the Angular engine
|
|
37
|
+
server.get('*', (req, res, next) => {
|
|
38
|
+
const { protocol, originalUrl, baseUrl, headers } = req;
|
|
39
|
+
|
|
40
|
+
commonEngine
|
|
41
|
+
.render({
|
|
42
|
+
bootstrap<% if (!standalone) { %>: AppServerModule<% } %>,
|
|
43
|
+
documentFilePath: indexHtml,
|
|
44
|
+
url: `${protocol}://${headers.host}${originalUrl}`,
|
|
45
|
+
publicPath: distFolder,
|
|
46
|
+
providers: [{ provide: APP_BASE_HREF, useValue: baseUrl }],
|
|
47
|
+
})
|
|
48
|
+
.then((html) => res.send(html))
|
|
49
|
+
.catch((err) => next(err));
|
|
50
|
+
});
|
|
51
|
+
|
|
52
|
+
return server;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
function run(): void {
|
|
56
|
+
const port = process.env['PORT'] || 4000;
|
|
57
|
+
|
|
58
|
+
// Start up the Node server
|
|
59
|
+
const server = app();
|
|
60
|
+
server.listen(port, () => {
|
|
61
|
+
console.log(`Node Express server listening on http://localhost:${port}`);
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
run();
|
|
66
|
+
|
|
67
|
+
export default <% if (standalone) { %>bootstrap<% } else { %>AppServerModule<% } %>;
|