@nx/angular 19.6.0-canary.20240813-c72ba9b → 19.6.0-rc.0
Sign up to get free protection for your applications and to get access to all the features.
- package/esm2022/src/runtime/nx/data-persistence.mjs +9 -4
- package/esm2022/testing/src/testing-utils.mjs +5 -3
- package/executors.d.ts +1 -1
- package/executors.js +1 -1
- package/executors.json +5 -5
- package/fesm2022/nx-angular-testing.mjs +4 -2
- package/fesm2022/nx-angular-testing.mjs.map +1 -1
- package/fesm2022/nx-angular.mjs +8 -3
- package/fesm2022/nx-angular.mjs.map +1 -1
- package/migrations.json +76 -0
- package/package.json +8 -8
- package/src/executors/module-federation-ssr-dev-server/lib/build-static-remotes.d.ts +4 -0
- package/src/executors/module-federation-ssr-dev-server/lib/build-static-remotes.js +65 -0
- package/src/executors/module-federation-ssr-dev-server/lib/normalize-options.d.ts +2 -0
- package/src/executors/module-federation-ssr-dev-server/lib/normalize-options.js +19 -0
- package/src/executors/module-federation-ssr-dev-server/lib/start-dev-remotes.d.ts +5 -0
- package/src/executors/module-federation-ssr-dev-server/lib/start-dev-remotes.js +30 -0
- package/src/executors/module-federation-ssr-dev-server/lib/start-static-remotes.d.ts +9 -0
- package/src/executors/module-federation-ssr-dev-server/lib/start-static-remotes.js +37 -0
- package/src/executors/module-federation-ssr-dev-server/module-federation-ssr-dev-server.impl.d.ts +4 -0
- package/src/executors/module-federation-ssr-dev-server/module-federation-ssr-dev-server.impl.js +101 -0
- package/src/{builders/module-federation-dev-ssr → executors/module-federation-ssr-dev-server}/schema.d.ts +7 -1
- package/src/{builders/module-federation-dev-ssr → executors/module-federation-ssr-dev-server}/schema.json +34 -2
- package/src/executors/utilities/esbuild-extensions.d.ts +2 -1
- package/src/generators/component-cypress-spec/schema.json +2 -1
- package/src/generators/host/files/js/webpack.server.config.js__tmpl__ +6 -1
- package/src/generators/host/files/ts/webpack.server.config.ts__tmpl__ +6 -1
- package/src/generators/ng-add/migrators/projects/e2e.migrator.js +1 -1
- package/src/generators/ng-add/migrators/projects/project.migrator.d.ts +2 -0
- package/src/generators/ng-add/migrators/projects/project.migrator.js +38 -1
- package/src/generators/remote/files/base/webpack.server.config.js__tmpl__ +7 -1
- package/src/generators/remote/files/base-ts/webpack.server.config.ts__tmpl__ +6 -1
- package/src/generators/setup-mf/files/ts-webpack/webpack.config.ts__tmpl__ +6 -1
- package/src/generators/setup-mf/files/ts-webpack/webpack.prod.config.ts__tmpl__ +6 -1
- package/src/generators/setup-mf/files/webpack/webpack.config.js__tmpl__ +7 -1
- package/src/generators/setup-mf/files/webpack/webpack.prod.config.js__tmpl__ +7 -1
- package/src/generators/stories/schema.json +4 -2
- package/src/migrations/update-19-6-0/turn-off-dts-by-default.d.ts +2 -0
- package/src/migrations/update-19-6-0/turn-off-dts-by-default.js +56 -0
- package/src/migrations/update-19-6-0/update-angular-cli.d.ts +3 -0
- package/src/migrations/update-19-6-0/update-angular-cli.js +23 -0
- package/src/runtime/nx/data-persistence.d.ts +8 -3
- package/src/utils/versions.d.ts +3 -3
- package/src/utils/versions.js +3 -3
- package/testing/src/testing-utils.d.ts +4 -2
- package/src/builders/module-federation-dev-ssr/module-federation-dev-ssr.impl.d.ts +0 -4
- package/src/builders/module-federation-dev-ssr/module-federation-dev-ssr.impl.js +0 -103
@@ -0,0 +1,56 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.default = default_1;
|
4
|
+
const devkit_1 = require("@nx/devkit");
|
5
|
+
const minimatch_1 = require("minimatch");
|
6
|
+
const tsquery_1 = require("@phenomnomnominal/tsquery");
|
7
|
+
async function default_1(tree) {
|
8
|
+
(0, devkit_1.visitNotIgnoredFiles)(tree, '', (path) => {
|
9
|
+
const webpackConfigGlob = '**/webpack*.config*.{js,ts,mjs,cjs}';
|
10
|
+
const result = (0, minimatch_1.minimatch)(path, webpackConfigGlob);
|
11
|
+
if (!result) {
|
12
|
+
return;
|
13
|
+
}
|
14
|
+
let webpackConfigContents = tree.read(path, 'utf-8');
|
15
|
+
if (!/withModuleFederationSSR|withModuleFederation/.test(webpackConfigContents)) {
|
16
|
+
return;
|
17
|
+
}
|
18
|
+
const WITH_MODULE_FEDERATION_SELECTOR = 'CallExpression:has(Identifier[name=withModuleFederation]),CallExpression:has(Identifier[name=withModuleFederationForSSR])';
|
19
|
+
const EXISTING_MF_OVERRIDES_SELECTOR = 'ObjectLiteralExpression';
|
20
|
+
const ast = tsquery_1.tsquery.ast(webpackConfigContents);
|
21
|
+
const withModuleFederationNodes = (0, tsquery_1.tsquery)(ast, WITH_MODULE_FEDERATION_SELECTOR, { visitAllChildren: true });
|
22
|
+
if (!withModuleFederationNodes.length) {
|
23
|
+
return;
|
24
|
+
}
|
25
|
+
const withModuleFederationNode = withModuleFederationNodes[0];
|
26
|
+
const existingOverridesNodes = (0, tsquery_1.tsquery)(withModuleFederationNode, EXISTING_MF_OVERRIDES_SELECTOR, { visitAllChildren: true });
|
27
|
+
if (!existingOverridesNodes.length) {
|
28
|
+
// doesn't exist, add it
|
29
|
+
webpackConfigContents = `${webpackConfigContents.slice(0, withModuleFederationNode.getEnd() - 1)},${JSON.stringify({ dts: false })}${webpackConfigContents.slice(withModuleFederationNode.getEnd() - 1)}`;
|
30
|
+
}
|
31
|
+
else {
|
32
|
+
let existingOverrideNode;
|
33
|
+
for (const node of existingOverridesNodes) {
|
34
|
+
if (!existingOverrideNode) {
|
35
|
+
existingOverrideNode = node;
|
36
|
+
}
|
37
|
+
if (existingOverrideNode.getText().includes(node.getText())) {
|
38
|
+
continue;
|
39
|
+
}
|
40
|
+
existingOverrideNode = node;
|
41
|
+
}
|
42
|
+
const DTS_PROPERTY_SELECTOR = 'PropertyAssignment > Identifier[name=dts]';
|
43
|
+
const dtsPropertyNode = (0, tsquery_1.tsquery)(existingOverrideNode, DTS_PROPERTY_SELECTOR);
|
44
|
+
if (dtsPropertyNode.length) {
|
45
|
+
// dts already exists, do nothing
|
46
|
+
return;
|
47
|
+
}
|
48
|
+
const newOverrides = `{ dts: false, ${existingOverrideNode
|
49
|
+
.getText()
|
50
|
+
.slice(1)}`;
|
51
|
+
webpackConfigContents = `${webpackConfigContents.slice(0, existingOverrideNode.getStart())}${newOverrides}${webpackConfigContents.slice(existingOverrideNode.getEnd())}`;
|
52
|
+
}
|
53
|
+
tree.write(path, webpackConfigContents);
|
54
|
+
});
|
55
|
+
await (0, devkit_1.formatFiles)(tree);
|
56
|
+
}
|
@@ -0,0 +1,23 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.angularCliVersion = void 0;
|
4
|
+
exports.default = default_1;
|
5
|
+
const devkit_1 = require("@nx/devkit");
|
6
|
+
exports.angularCliVersion = '~18.2.0';
|
7
|
+
async function default_1(tree) {
|
8
|
+
let shouldFormat = false;
|
9
|
+
(0, devkit_1.updateJson)(tree, 'package.json', (json) => {
|
10
|
+
if (json.devDependencies?.['@angular/cli']) {
|
11
|
+
json.devDependencies['@angular/cli'] = exports.angularCliVersion;
|
12
|
+
shouldFormat = true;
|
13
|
+
}
|
14
|
+
else if (json.dependencies?.['@angular/cli']) {
|
15
|
+
json.dependencies['@angular/cli'] = exports.angularCliVersion;
|
16
|
+
shouldFormat = true;
|
17
|
+
}
|
18
|
+
return json;
|
19
|
+
});
|
20
|
+
if (shouldFormat) {
|
21
|
+
await (0, devkit_1.formatFiles)(tree);
|
22
|
+
}
|
23
|
+
}
|
@@ -24,7 +24,6 @@ export type ActionOrActionWithState<T, A> = ActionOrActionWithStates<[T], A>;
|
|
24
24
|
export type ActionStatesStream<T extends Array<unknown>, A> = Observable<ActionOrActionWithStates<T, A>>;
|
25
25
|
export type ActionStateStream<T, A> = Observable<ActionOrActionWithStates<[T], A>>;
|
26
26
|
/**
|
27
|
-
*
|
28
27
|
* @whatItDoes Handles pessimistic updates (updating the server first).
|
29
28
|
*
|
30
29
|
* Updating the server, when implemented naively, suffers from race conditions and poor error handling.
|
@@ -79,10 +78,11 @@ export type ActionStateStream<T, A> = Observable<ActionOrActionWithStates<[T], A
|
|
79
78
|
* ```
|
80
79
|
*
|
81
80
|
* @param opts
|
81
|
+
*
|
82
|
+
* @deprecated This will be removed in Nx v21. Import `pessimisticUpdate` from `@ngrx/router-store/data-persistence` instead.
|
82
83
|
*/
|
83
84
|
export declare function pessimisticUpdate<T extends Array<unknown>, A extends Action>(opts: PessimisticUpdateOpts<T, A>): (source: ActionStatesStream<T, A>) => Observable<Action>;
|
84
85
|
/**
|
85
|
-
*
|
86
86
|
* @whatItDoes Handles optimistic updates (updating the client first).
|
87
87
|
*
|
88
88
|
* It runs all fetches in order, which removes race conditions and forces the developer to handle errors.
|
@@ -138,10 +138,11 @@ export declare function pessimisticUpdate<T extends Array<unknown>, A extends Ac
|
|
138
138
|
* ```
|
139
139
|
*
|
140
140
|
* @param opts
|
141
|
+
*
|
142
|
+
* @deprecated This will be removed in Nx v21. Import `optimisticUpdate` from `@ngrx/router-store/data-persistence` instead.
|
141
143
|
*/
|
142
144
|
export declare function optimisticUpdate<T extends Array<unknown>, A extends Action>(opts: OptimisticUpdateOpts<T, A>): (source: ActionStatesStream<T, A>) => Observable<Action>;
|
143
145
|
/**
|
144
|
-
*
|
145
146
|
* @whatItDoes Handles data fetching.
|
146
147
|
*
|
147
148
|
* Data fetching implemented naively suffers from race conditions and poor error handling.
|
@@ -217,6 +218,8 @@ export declare function optimisticUpdate<T extends Array<unknown>, A extends Act
|
|
217
218
|
* In addition, if there are multiple requests for Todo 1 scheduled, it will only run the last one.
|
218
219
|
*
|
219
220
|
* @param opts
|
221
|
+
*
|
222
|
+
* @deprecated This will be removed in Nx v21. Import `fetch` from `@ngrx/router-store/data-persistence` instead.
|
220
223
|
*/
|
221
224
|
export declare function fetch<T extends Array<unknown>, A extends Action>(opts: FetchOpts<T, A>): (source: ActionStatesStream<T, A>) => Observable<Action>;
|
222
225
|
/**
|
@@ -267,5 +270,7 @@ export declare function fetch<T extends Array<unknown>, A extends Action>(opts:
|
|
267
270
|
*
|
268
271
|
* @param component
|
269
272
|
* @param opts
|
273
|
+
*
|
274
|
+
* @deprecated This will be removed in Nx v21. Import `navigation` from `@ngrx/router-store/data-persistence` instead.
|
270
275
|
*/
|
271
276
|
export declare function navigation<T extends Array<unknown>, A extends Action>(component: Type<any>, opts: HandleNavigationOpts<T>): (source: ActionStatesStream<T, A>) => Observable<Action<string>>;
|
package/src/utils/versions.d.ts
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
export declare const nxVersion: any;
|
2
|
-
export declare const angularVersion = "~18.
|
3
|
-
export declare const angularDevkitVersion = "~18.
|
4
|
-
export declare const ngPackagrVersion = "~18.
|
2
|
+
export declare const angularVersion = "~18.2.0";
|
3
|
+
export declare const angularDevkitVersion = "~18.2.0";
|
4
|
+
export declare const ngPackagrVersion = "~18.2.0";
|
5
5
|
export declare const ngrxVersion = "^18.0.1";
|
6
6
|
export declare const rxjsVersion = "~7.8.0";
|
7
7
|
export declare const zoneJsVersion = "~0.14.3";
|
package/src/utils/versions.js
CHANGED
@@ -2,9 +2,9 @@
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
3
3
|
exports.jsoncEslintParserVersion = exports.jasmineMarblesVersion = exports.typesNodeVersion = exports.jestPresetAngularVersion = exports.tsNodeVersion = exports.autoprefixerVersion = exports.postcssUrlVersion = exports.postcssVersion = exports.tailwindVersion = exports.typescriptEslintVersion = exports.angularEslintVersion = exports.moduleFederationEnhancedVersion = exports.moduleFederationNodeVersion = exports.browserSyncVersion = exports.typesExpressVersion = exports.expressVersion = exports.typesCorsVersion = exports.corsVersion = exports.tsLibVersion = exports.angularJsVersion = exports.zoneJsVersion = exports.rxjsVersion = exports.ngrxVersion = exports.ngPackagrVersion = exports.angularDevkitVersion = exports.angularVersion = exports.nxVersion = void 0;
|
4
4
|
exports.nxVersion = require('../../package.json').version;
|
5
|
-
exports.angularVersion = '~18.
|
6
|
-
exports.angularDevkitVersion = '~18.
|
7
|
-
exports.ngPackagrVersion = '~18.
|
5
|
+
exports.angularVersion = '~18.2.0';
|
6
|
+
exports.angularDevkitVersion = '~18.2.0';
|
7
|
+
exports.ngPackagrVersion = '~18.2.0';
|
8
8
|
exports.ngrxVersion = '^18.0.1';
|
9
9
|
exports.rxjsVersion = '~7.8.0';
|
10
10
|
exports.zoneJsVersion = '~0.14.3';
|
@@ -1,6 +1,7 @@
|
|
1
1
|
import type { Observable } from 'rxjs';
|
2
2
|
/**
|
3
|
-
* @deprecated This will be removed in
|
3
|
+
* @deprecated This will be removed in Nx v21. If using RxJS 7, use `firstValueFrom(obs$.pipe(toArray()))`
|
4
|
+
* or `lastValueFrom(obs$.pipe(toArray()))`. If using RxJS 6, use `obs$.pipe(toArray()).toPromise()`.
|
4
5
|
*
|
5
6
|
* @whatItDoes reads all the values from an observable and returns a promise
|
6
7
|
* with an array of all values. This should be used in combination with async/await.
|
@@ -15,7 +16,8 @@ import type { Observable } from 'rxjs';
|
|
15
16
|
*/
|
16
17
|
export declare function readAll<T>(o: Observable<T>): Promise<T[]>;
|
17
18
|
/**
|
18
|
-
* @deprecated This will be removed in
|
19
|
+
* @deprecated This will be removed in Nx v21. Since RxJS 7, use `firstValueFrom(obs$)`. If using RxJS 6,
|
20
|
+
* use `obs$.pipe(first()).toPromise()`.
|
19
21
|
*
|
20
22
|
* @whatItDoes reads the first value from an observable and returns a promise
|
21
23
|
* with it. This should be used in combination with async/await.
|
@@ -1,4 +0,0 @@
|
|
1
|
-
import type { Schema } from './schema';
|
2
|
-
export declare function executeModuleFederationDevSSRBuilder(schema: Schema, context: import('@angular-devkit/architect').BuilderContext): import("rxjs").Observable<unknown>;
|
3
|
-
declare const _default: any;
|
4
|
-
export default _default;
|
@@ -1,103 +0,0 @@
|
|
1
|
-
"use strict";
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
-
exports.executeModuleFederationDevSSRBuilder = executeModuleFederationDevSSRBuilder;
|
4
|
-
const devkit_1 = require("@nx/devkit");
|
5
|
-
const child_process_1 = require("child_process");
|
6
|
-
const fs_1 = require("fs");
|
7
|
-
const ngcli_adapter_1 = require("nx/src/adapter/ngcli-adapter");
|
8
|
-
const executor_utils_1 = require("nx/src/command-line/run/executor-utils");
|
9
|
-
const project_graph_1 = require("nx/src/project-graph/project-graph");
|
10
|
-
const path_1 = require("path");
|
11
|
-
const rxjs_1 = require("rxjs");
|
12
|
-
const operators_1 = require("rxjs/operators");
|
13
|
-
const angular_version_utils_1 = require("../../executors/utilities/angular-version-utils");
|
14
|
-
const module_federation_1 = require("../utilities/module-federation");
|
15
|
-
function executeModuleFederationDevSSRBuilder(schema, context) {
|
16
|
-
const { ...options } = schema;
|
17
|
-
const projectGraph = (0, devkit_1.readCachedProjectGraph)();
|
18
|
-
const { projects: workspaceProjects } = (0, project_graph_1.readProjectsConfigurationFromProjectGraph)(projectGraph);
|
19
|
-
const project = workspaceProjects[context.target.project];
|
20
|
-
let pathToManifestFile;
|
21
|
-
if (options.pathToManifestFile) {
|
22
|
-
const userPathToManifestFile = (0, path_1.join)(context.workspaceRoot, options.pathToManifestFile);
|
23
|
-
if (!(0, fs_1.existsSync)(userPathToManifestFile)) {
|
24
|
-
throw new Error(`The provided Module Federation manifest file path does not exist. Please check the file exists at "${userPathToManifestFile}".`);
|
25
|
-
}
|
26
|
-
else if ((0, path_1.extname)(options.pathToManifestFile) !== '.json') {
|
27
|
-
throw new Error(`The Module Federation manifest file must be a JSON. Please ensure the file at ${userPathToManifestFile} is a JSON.`);
|
28
|
-
}
|
29
|
-
pathToManifestFile = userPathToManifestFile;
|
30
|
-
}
|
31
|
-
else {
|
32
|
-
pathToManifestFile = (0, module_federation_1.getDynamicMfManifestFile)(project, context.workspaceRoot);
|
33
|
-
}
|
34
|
-
const devServeRemotes = !options.devRemotes
|
35
|
-
? []
|
36
|
-
: Array.isArray(options.devRemotes)
|
37
|
-
? options.devRemotes
|
38
|
-
: [options.devRemotes];
|
39
|
-
// Set NX_MF_DEV_REMOTES for the Nx Runtime Library Control Plugin
|
40
|
-
process.env.NX_MF_DEV_REMOTES = JSON.stringify(devServeRemotes);
|
41
|
-
(0, module_federation_1.validateDevRemotes)({ devRemotes: devServeRemotes }, workspaceProjects);
|
42
|
-
const remotesToSkip = new Set(options.skipRemotes ?? []);
|
43
|
-
const staticRemotes = (0, module_federation_1.getStaticRemotes)(project, context, workspaceProjects, remotesToSkip);
|
44
|
-
const dynamicRemotes = (0, module_federation_1.getDynamicRemotes)(project, context, workspaceProjects, remotesToSkip, pathToManifestFile);
|
45
|
-
const remotes = [...staticRemotes, ...dynamicRemotes];
|
46
|
-
const remoteProcessPromises = [];
|
47
|
-
for (const remote of remotes) {
|
48
|
-
const isDev = devServeRemotes.includes(remote);
|
49
|
-
const target = isDev ? 'serve-ssr' : 'static-server';
|
50
|
-
if (!workspaceProjects[remote].targets?.[target]) {
|
51
|
-
throw new Error(`Could not find "${target}" target in "${remote}" project.`);
|
52
|
-
}
|
53
|
-
else if (!workspaceProjects[remote].targets?.[target].executor) {
|
54
|
-
throw new Error(`Could not find executor for "${target}" target in "${remote}" project.`);
|
55
|
-
}
|
56
|
-
const runOptions = {};
|
57
|
-
if (options.verbose) {
|
58
|
-
const [collection, executor] = workspaceProjects[remote].targets[target].executor.split(':');
|
59
|
-
const { schema } = (0, executor_utils_1.getExecutorInformation)(collection, executor, devkit_1.workspaceRoot, workspaceProjects);
|
60
|
-
if (schema.additionalProperties || 'verbose' in schema.properties) {
|
61
|
-
runOptions.verbose = options.verbose;
|
62
|
-
}
|
63
|
-
}
|
64
|
-
const remotePromise = new Promise((res, rej) => {
|
65
|
-
if (target === 'static-server') {
|
66
|
-
const remoteProject = workspaceProjects[remote];
|
67
|
-
const remoteServerOutput = (0, path_1.join)(devkit_1.workspaceRoot, remoteProject.targets.server.options.outputPath, 'main.js');
|
68
|
-
const pm = (0, devkit_1.getPackageManagerCommand)();
|
69
|
-
(0, child_process_1.execSync)(`${pm.exec} nx run ${remote}:server${context.target.configuration
|
70
|
-
? `:${context.target.configuration}`
|
71
|
-
: ''}`, { stdio: 'inherit' });
|
72
|
-
const child = (0, child_process_1.fork)(remoteServerOutput, {
|
73
|
-
env: { PORT: remoteProject.targets['serve-ssr'].options.port },
|
74
|
-
});
|
75
|
-
child.on('message', (msg) => {
|
76
|
-
if (msg === 'nx.server.ready') {
|
77
|
-
res();
|
78
|
-
}
|
79
|
-
});
|
80
|
-
}
|
81
|
-
if (target === 'serve-ssr') {
|
82
|
-
(0, ngcli_adapter_1.scheduleTarget)(context.workspaceRoot, {
|
83
|
-
project: remote,
|
84
|
-
target,
|
85
|
-
configuration: context.target.configuration,
|
86
|
-
runOptions,
|
87
|
-
projects: workspaceProjects,
|
88
|
-
}, options.verbose).then((obs) => obs
|
89
|
-
.pipe((0, operators_1.tap)((result) => {
|
90
|
-
result.success && res();
|
91
|
-
}))
|
92
|
-
.toPromise());
|
93
|
-
}
|
94
|
-
});
|
95
|
-
remoteProcessPromises.push(remotePromise);
|
96
|
-
}
|
97
|
-
const { major: angularMajorVersion } = (0, angular_version_utils_1.getInstalledAngularVersionInfo)();
|
98
|
-
const { executeSSRDevServerBuilder } = angularMajorVersion >= 17
|
99
|
-
? require('@angular-devkit/build-angular')
|
100
|
-
: require('@nguniversal/builders');
|
101
|
-
return (0, rxjs_1.from)(Promise.all(remoteProcessPromises)).pipe((0, operators_1.switchMap)(() => executeSSRDevServerBuilder(options, context)));
|
102
|
-
}
|
103
|
-
exports.default = require('@angular-devkit/architect').createBuilder(executeModuleFederationDevSSRBuilder);
|