@nx/angular 20.0.8 → 20.1.0-beta.0
Sign up to get free protection for your applications and to get access to all the features.
- package/esm2022/mf/mf.mjs +65 -1
- package/fesm2022/nx-angular-mf.mjs +64 -0
- package/fesm2022/nx-angular-mf.mjs.map +1 -1
- package/mf/mf.d.ts +64 -0
- package/package.json +8 -8
- package/src/generators/application/files/ng-module/src/app/app.component.html__tpl__ +8 -1
- package/src/generators/application/files/standalone-components/src/app/app.component.html__tpl__ +8 -1
- package/src/generators/application/lib/add-unit-test-runner.js +18 -7
- package/src/generators/application/schema.json +2 -1
- package/src/generators/component/files/__fileName__.__style__ +1 -1
- package/src/generators/component-story/files/__componentFileName__.stories.ts__tmpl__ +4 -4
- package/src/generators/federate-module/schema.json +2 -1
- package/src/generators/host/schema.json +2 -1
- package/src/generators/library/files/base/README.md__tpl__ +2 -2
- package/src/generators/library/library.js +19 -7
- package/src/generators/library/schema.json +2 -1
- package/src/generators/remote/schema.json +2 -1
- package/src/generators/setup-mf/lib/add-remote-to-host.js +21 -8
- package/src/generators/setup-mf/lib/fix-bootstrap.js +3 -2
- package/src/generators/setup-mf/setup-mf.js +3 -2
- package/src/generators/utils/add-jest.js +4 -4
- package/src/generators/utils/add-vitest.d.ts +8 -0
- package/src/generators/utils/add-vitest.js +49 -0
- package/src/utils/backward-compatible-versions.d.ts +2 -2
- package/src/utils/test-runners.d.ts +2 -1
- package/src/utils/test-runners.js +1 -0
- package/src/utils/versions.d.ts +2 -1
- package/src/utils/versions.js +3 -2
package/esm2022/mf/mf.mjs
CHANGED
@@ -1,17 +1,81 @@
|
|
1
1
|
let resolveRemoteUrl;
|
2
|
+
/**
|
3
|
+
* @deprecated Use Runtime Helpers from '@module-federation/enhanced/runtime' instead. This will be removed in Nx 22.
|
4
|
+
*/
|
2
5
|
export function setRemoteUrlResolver(_resolveRemoteUrl) {
|
3
6
|
resolveRemoteUrl = _resolveRemoteUrl;
|
4
7
|
}
|
5
8
|
let remoteUrlDefinitions;
|
9
|
+
/**
|
10
|
+
* @deprecated Use init() from '@module-federation/enhanced/runtime' instead. This will be removed in Nx 22.
|
11
|
+
* If you have a remote app called `my-remote-app` and you want to use the `http://localhost:4201/mf-manifest.json` as the remote url, you should change it from:
|
12
|
+
* ```ts
|
13
|
+
* import { setRemoteDefinitions } from '@nx/angular/mf';
|
14
|
+
*
|
15
|
+
* setRemoteDefinitions({
|
16
|
+
* 'my-remote-app': 'http://localhost:4201/mf-manifest.json'
|
17
|
+
* });
|
18
|
+
* ```
|
19
|
+
* to use init():
|
20
|
+
* ```ts
|
21
|
+
* import { init } from '@module-federation/enhanced/runtime';
|
22
|
+
*
|
23
|
+
* init({
|
24
|
+
* name: 'host',
|
25
|
+
* remotes: [{
|
26
|
+
* name: 'my-remote-app',
|
27
|
+
* entry: 'http://localhost:4201/mf-manifest.json'
|
28
|
+
* }]
|
29
|
+
* });
|
30
|
+
* ```
|
31
|
+
*/
|
6
32
|
export function setRemoteDefinitions(definitions) {
|
7
33
|
remoteUrlDefinitions = definitions;
|
8
34
|
}
|
35
|
+
/**
|
36
|
+
* @deprecated Use registerRemotes() from '@module-federation/enhanced/runtime' instead. This will be removed in Nx 22.
|
37
|
+
* If you set a remote app with `setRemoteDefinition` such as:
|
38
|
+
* ```ts
|
39
|
+
* import { setRemoteDefinition } from '@nx/angular/mf';
|
40
|
+
*
|
41
|
+
* setRemoteDefinition(
|
42
|
+
* 'my-remote-app',
|
43
|
+
* 'http://localhost:4201/mf-manifest.json'
|
44
|
+
* );
|
45
|
+
* ```
|
46
|
+
* change it to use registerRemotes():
|
47
|
+
* ```ts
|
48
|
+
* import { registerRemotes } from '@module-federation/enhanced/runtime';
|
49
|
+
*
|
50
|
+
* registerRemotes([
|
51
|
+
* {
|
52
|
+
* name: 'my-remote-app',
|
53
|
+
* entry: 'http://localhost:4201/mf-manifest.json'
|
54
|
+
* }
|
55
|
+
* ]);
|
56
|
+
* ```
|
57
|
+
*/
|
9
58
|
export function setRemoteDefinition(remoteName, remoteUrl) {
|
10
59
|
remoteUrlDefinitions ??= {};
|
11
60
|
remoteUrlDefinitions[remoteName] = remoteUrl;
|
12
61
|
}
|
13
62
|
let remoteModuleMap = new Map();
|
14
63
|
let remoteContainerMap = new Map();
|
64
|
+
/**
|
65
|
+
* @deprecated Use loadRemote() from '@module-federation/enhanced/runtime' instead. This will be removed in Nx 22.
|
66
|
+
* If you set a load a remote with `loadRemoteModule` such as:
|
67
|
+
* ```ts
|
68
|
+
* import { loadRemoteModule } from '@nx/angular/mf';
|
69
|
+
*
|
70
|
+
* loadRemoteModule('my-remote-app', './Module').then(m => m.RemoteEntryModule);
|
71
|
+
* ```
|
72
|
+
* change it to use loadRemote():
|
73
|
+
* ```ts
|
74
|
+
* import { loadRemote } from '@module-federation/enhanced/runtime';
|
75
|
+
*
|
76
|
+
* loadRemote<typeof import('my-remote-app/Module')>('my-remote-app/Module').then(m => m.RemoteEntryModule);
|
77
|
+
* ```
|
78
|
+
*/
|
15
79
|
export async function loadRemoteModule(remoteName, moduleName) {
|
16
80
|
const remoteModuleKey = `${remoteName}:${moduleName}`;
|
17
81
|
if (remoteModuleMap.has(remoteModuleKey)) {
|
@@ -49,4 +113,4 @@ async function loadRemoteContainer(remoteName) {
|
|
49
113
|
remoteContainerMap.set(remoteName, container);
|
50
114
|
return container;
|
51
115
|
}
|
52
|
-
//# sourceMappingURL=data:application/json;base64,
|
116
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWYuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9hbmd1bGFyL21mL21mLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQU9BLElBQUksZ0JBQTBDLENBQUM7QUFFL0M7O0dBRUc7QUFDSCxNQUFNLFVBQVUsb0JBQW9CLENBQ2xDLGlCQUEyQztJQUUzQyxnQkFBZ0IsR0FBRyxpQkFBaUIsQ0FBQztBQUN2QyxDQUFDO0FBRUQsSUFBSSxvQkFBNEMsQ0FBQztBQUVqRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXNCRztBQUNILE1BQU0sVUFBVSxvQkFBb0IsQ0FBQyxXQUFtQztJQUN0RSxvQkFBb0IsR0FBRyxXQUFXLENBQUM7QUFDckMsQ0FBQztBQUVEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBc0JHO0FBQ0gsTUFBTSxVQUFVLG1CQUFtQixDQUFDLFVBQWtCLEVBQUUsU0FBaUI7SUFDdkUsb0JBQW9CLEtBQUssRUFBRSxDQUFDO0lBQzVCLG9CQUFvQixDQUFDLFVBQVUsQ0FBQyxHQUFHLFNBQVMsQ0FBQztBQUMvQyxDQUFDO0FBRUQsSUFBSSxlQUFlLEdBQUcsSUFBSSxHQUFHLEVBQW1CLENBQUM7QUFDakQsSUFBSSxrQkFBa0IsR0FBRyxJQUFJLEdBQUcsRUFBbUIsQ0FBQztBQUVwRDs7Ozs7Ozs7Ozs7Ozs7R0FjRztBQUNILE1BQU0sQ0FBQyxLQUFLLFVBQVUsZ0JBQWdCLENBQUMsVUFBa0IsRUFBRSxVQUFrQjtJQUMzRSxNQUFNLGVBQWUsR0FBRyxHQUFHLFVBQVUsSUFBSSxVQUFVLEVBQUUsQ0FBQztJQUN0RCxJQUFJLGVBQWUsQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLEVBQUUsQ0FBQztRQUN6QyxPQUFPLGVBQWUsQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLENBQUM7SUFDOUMsQ0FBQztJQUVELE1BQU0sU0FBUyxHQUFHLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUM7UUFDbEQsQ0FBQyxDQUFDLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUM7UUFDcEMsQ0FBQyxDQUFDLE1BQU0sbUJBQW1CLENBQUMsVUFBVSxDQUFDLENBQUM7SUFFMUMsTUFBTSxPQUFPLEdBQUcsTUFBTSxTQUFTLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ2hELE1BQU0sTUFBTSxHQUFHLE9BQU8sRUFBRSxDQUFDO0lBRXpCLGVBQWUsQ0FBQyxHQUFHLENBQUMsZUFBZSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBRTdDLE9BQU8sTUFBTSxDQUFDO0FBQ2hCLENBQUM7QUFFRCxTQUFTLFVBQVUsQ0FBQyxHQUFXO0lBQzdCLE9BQU8sTUFBTSxDQUFDLHdCQUF3QixDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzlDLENBQUM7QUFFRCxJQUFJLDBCQUEwQixHQUFHLEtBQUssQ0FBQztBQUV2QyxLQUFLLFVBQVUsbUJBQW1CLENBQUMsVUFBa0I7SUFDbkQsSUFBSSxDQUFDLGdCQUFnQixJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztRQUMvQyxNQUFNLElBQUksS0FBSyxDQUNiLGtIQUFrSCxDQUNuSCxDQUFDO0lBQ0osQ0FBQztJQUVELElBQUksQ0FBQywwQkFBMEIsRUFBRSxDQUFDO1FBQ2hDLDBCQUEwQixHQUFHLElBQUksQ0FBQztRQUNsQyxNQUFNLHdCQUF3QixDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQzVDLENBQUM7SUFFRCxNQUFNLFNBQVMsR0FBRyxvQkFBb0I7UUFDcEMsQ0FBQyxDQUFDLG9CQUFvQixDQUFDLFVBQVUsQ0FBQztRQUNsQyxDQUFDLENBQUMsTUFBTSxnQkFBZ0IsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUV2QyxJQUFJLFlBQVksR0FBRyxTQUFTLENBQUM7SUFDN0IsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDOUQsWUFBWSxHQUFHLEdBQUcsU0FBUyxHQUN6QixTQUFTLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQ2pDLGlCQUFpQixDQUFDO0lBQ3BCLENBQUM7SUFFRCxNQUFNLFNBQVMsR0FBRyxNQUFNLFVBQVUsQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUNqRCxNQUFNLFNBQVMsQ0FBQyxJQUFJLENBQUMsd0JBQXdCLENBQUMsT0FBTyxDQUFDLENBQUM7SUFFdkQsa0JBQWtCLENBQUMsR0FBRyxDQUFDLFVBQVUsRUFBRSxTQUFTLENBQUMsQ0FBQztJQUM5QyxPQUFPLFNBQVMsQ0FBQztBQUNuQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHR5cGUgUmVzb2x2ZVJlbW90ZVVybEZ1bmN0aW9uID0gKFxuICByZW1vdGVOYW1lOiBzdHJpbmdcbikgPT4gc3RyaW5nIHwgUHJvbWlzZTxzdHJpbmc+O1xuXG5kZWNsYXJlIGNvbnN0IF9fd2VicGFja19pbml0X3NoYXJpbmdfXzogKHNjb3BlOiAnZGVmYXVsdCcpID0+IFByb21pc2U8dm9pZD47XG5kZWNsYXJlIGNvbnN0IF9fd2VicGFja19zaGFyZV9zY29wZXNfXzogeyBkZWZhdWx0OiB1bmtub3duIH07XG5cbmxldCByZXNvbHZlUmVtb3RlVXJsOiBSZXNvbHZlUmVtb3RlVXJsRnVuY3Rpb247XG5cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIFJ1bnRpbWUgSGVscGVycyBmcm9tICdAbW9kdWxlLWZlZGVyYXRpb24vZW5oYW5jZWQvcnVudGltZScgaW5zdGVhZC4gVGhpcyB3aWxsIGJlIHJlbW92ZWQgaW4gTnggMjIuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRSZW1vdGVVcmxSZXNvbHZlcihcbiAgX3Jlc29sdmVSZW1vdGVVcmw6IFJlc29sdmVSZW1vdGVVcmxGdW5jdGlvblxuKSB7XG4gIHJlc29sdmVSZW1vdGVVcmwgPSBfcmVzb2x2ZVJlbW90ZVVybDtcbn1cblxubGV0IHJlbW90ZVVybERlZmluaXRpb25zOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuXG4vKipcbiAqIEBkZXByZWNhdGVkIFVzZSBpbml0KCkgZnJvbSAnQG1vZHVsZS1mZWRlcmF0aW9uL2VuaGFuY2VkL3J1bnRpbWUnIGluc3RlYWQuIFRoaXMgd2lsbCBiZSByZW1vdmVkIGluIE54IDIyLlxuICogSWYgeW91IGhhdmUgYSByZW1vdGUgYXBwIGNhbGxlZCBgbXktcmVtb3RlLWFwcGAgYW5kIHlvdSB3YW50IHRvIHVzZSB0aGUgYGh0dHA6Ly9sb2NhbGhvc3Q6NDIwMS9tZi1tYW5pZmVzdC5qc29uYCBhcyB0aGUgcmVtb3RlIHVybCwgeW91IHNob3VsZCBjaGFuZ2UgaXQgZnJvbTpcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyBzZXRSZW1vdGVEZWZpbml0aW9ucyB9IGZyb20gJ0BueC9hbmd1bGFyL21mJztcbiAqXG4gKiBzZXRSZW1vdGVEZWZpbml0aW9ucyh7XG4gKiAgICdteS1yZW1vdGUtYXBwJzogJ2h0dHA6Ly9sb2NhbGhvc3Q6NDIwMS9tZi1tYW5pZmVzdC5qc29uJ1xuICogfSk7XG4gKiBgYGBcbiAqIHRvIHVzZSBpbml0KCk6XG4gKiBgYGB0c1xuICogaW1wb3J0IHsgaW5pdCB9IGZyb20gJ0Btb2R1bGUtZmVkZXJhdGlvbi9lbmhhbmNlZC9ydW50aW1lJztcbiAqXG4gKiBpbml0KHtcbiAqICAgbmFtZTogJ2hvc3QnLFxuICogICByZW1vdGVzOiBbe1xuICogICAgIG5hbWU6ICdteS1yZW1vdGUtYXBwJyxcbiAqICAgICBlbnRyeTogJ2h0dHA6Ly9sb2NhbGhvc3Q6NDIwMS9tZi1tYW5pZmVzdC5qc29uJ1xuICogICB9XVxuICogfSk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldFJlbW90ZURlZmluaXRpb25zKGRlZmluaXRpb25zOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+KSB7XG4gIHJlbW90ZVVybERlZmluaXRpb25zID0gZGVmaW5pdGlvbnM7XG59XG5cbi8qKlxuICogQGRlcHJlY2F0ZWQgVXNlIHJlZ2lzdGVyUmVtb3RlcygpIGZyb20gJ0Btb2R1bGUtZmVkZXJhdGlvbi9lbmhhbmNlZC9ydW50aW1lJyBpbnN0ZWFkLiBUaGlzIHdpbGwgYmUgcmVtb3ZlZCBpbiBOeCAyMi5cbiAqIElmIHlvdSBzZXQgYSByZW1vdGUgYXBwIHdpdGggYHNldFJlbW90ZURlZmluaXRpb25gIHN1Y2ggYXM6XG4gKiBgYGB0c1xuICogaW1wb3J0IHsgc2V0UmVtb3RlRGVmaW5pdGlvbiB9IGZyb20gJ0BueC9hbmd1bGFyL21mJztcbiAqXG4gKiBzZXRSZW1vdGVEZWZpbml0aW9uKFxuICogICAnbXktcmVtb3RlLWFwcCcsXG4gKiAgICdodHRwOi8vbG9jYWxob3N0OjQyMDEvbWYtbWFuaWZlc3QuanNvbidcbiAqICk7XG4gKiBgYGBcbiAqIGNoYW5nZSBpdCB0byB1c2UgcmVnaXN0ZXJSZW1vdGVzKCk6XG4gKiBgYGB0c1xuICogaW1wb3J0IHsgcmVnaXN0ZXJSZW1vdGVzIH0gZnJvbSAnQG1vZHVsZS1mZWRlcmF0aW9uL2VuaGFuY2VkL3J1bnRpbWUnO1xuICpcbiAqIHJlZ2lzdGVyUmVtb3RlcyhbXG4gKiAge1xuICogICAgIG5hbWU6ICdteS1yZW1vdGUtYXBwJyxcbiAqICAgICBlbnRyeTogJ2h0dHA6Ly9sb2NhbGhvc3Q6NDIwMS9tZi1tYW5pZmVzdC5qc29uJ1xuICogICB9XG4gKiBdKTtcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0UmVtb3RlRGVmaW5pdGlvbihyZW1vdGVOYW1lOiBzdHJpbmcsIHJlbW90ZVVybDogc3RyaW5nKSB7XG4gIHJlbW90ZVVybERlZmluaXRpb25zID8/PSB7fTtcbiAgcmVtb3RlVXJsRGVmaW5pdGlvbnNbcmVtb3RlTmFtZV0gPSByZW1vdGVVcmw7XG59XG5cbmxldCByZW1vdGVNb2R1bGVNYXAgPSBuZXcgTWFwPHN0cmluZywgdW5rbm93bj4oKTtcbmxldCByZW1vdGVDb250YWluZXJNYXAgPSBuZXcgTWFwPHN0cmluZywgdW5rbm93bj4oKTtcblxuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2UgbG9hZFJlbW90ZSgpIGZyb20gJ0Btb2R1bGUtZmVkZXJhdGlvbi9lbmhhbmNlZC9ydW50aW1lJyBpbnN0ZWFkLiBUaGlzIHdpbGwgYmUgcmVtb3ZlZCBpbiBOeCAyMi5cbiAqIElmIHlvdSBzZXQgYSBsb2FkIGEgcmVtb3RlIHdpdGggYGxvYWRSZW1vdGVNb2R1bGVgIHN1Y2ggYXM6XG4gKiBgYGB0c1xuICogaW1wb3J0IHsgbG9hZFJlbW90ZU1vZHVsZSB9IGZyb20gJ0BueC9hbmd1bGFyL21mJztcbiAqXG4gKiBsb2FkUmVtb3RlTW9kdWxlKCdteS1yZW1vdGUtYXBwJywgJy4vTW9kdWxlJykudGhlbihtID0+IG0uUmVtb3RlRW50cnlNb2R1bGUpO1xuICogYGBgXG4gKiBjaGFuZ2UgaXQgdG8gdXNlIGxvYWRSZW1vdGUoKTpcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyBsb2FkUmVtb3RlIH0gZnJvbSAnQG1vZHVsZS1mZWRlcmF0aW9uL2VuaGFuY2VkL3J1bnRpbWUnO1xuICpcbiAqIGxvYWRSZW1vdGU8dHlwZW9mIGltcG9ydCgnbXktcmVtb3RlLWFwcC9Nb2R1bGUnKT4oJ215LXJlbW90ZS1hcHAvTW9kdWxlJykudGhlbihtID0+IG0uUmVtb3RlRW50cnlNb2R1bGUpO1xuICogYGBgXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBsb2FkUmVtb3RlTW9kdWxlKHJlbW90ZU5hbWU6IHN0cmluZywgbW9kdWxlTmFtZTogc3RyaW5nKSB7XG4gIGNvbnN0IHJlbW90ZU1vZHVsZUtleSA9IGAke3JlbW90ZU5hbWV9OiR7bW9kdWxlTmFtZX1gO1xuICBpZiAocmVtb3RlTW9kdWxlTWFwLmhhcyhyZW1vdGVNb2R1bGVLZXkpKSB7XG4gICAgcmV0dXJuIHJlbW90ZU1vZHVsZU1hcC5nZXQocmVtb3RlTW9kdWxlS2V5KTtcbiAgfVxuXG4gIGNvbnN0IGNvbnRhaW5lciA9IHJlbW90ZUNvbnRhaW5lck1hcC5oYXMocmVtb3RlTmFtZSlcbiAgICA/IHJlbW90ZUNvbnRhaW5lck1hcC5nZXQocmVtb3RlTmFtZSlcbiAgICA6IGF3YWl0IGxvYWRSZW1vdGVDb250YWluZXIocmVtb3RlTmFtZSk7XG5cbiAgY29uc3QgZmFjdG9yeSA9IGF3YWl0IGNvbnRhaW5lci5nZXQobW9kdWxlTmFtZSk7XG4gIGNvbnN0IE1vZHVsZSA9IGZhY3RvcnkoKTtcblxuICByZW1vdGVNb2R1bGVNYXAuc2V0KHJlbW90ZU1vZHVsZUtleSwgTW9kdWxlKTtcblxuICByZXR1cm4gTW9kdWxlO1xufVxuXG5mdW5jdGlvbiBsb2FkTW9kdWxlKHVybDogc3RyaW5nKSB7XG4gIHJldHVybiBpbXBvcnQoLyogd2VicGFja0lnbm9yZTp0cnVlICovIHVybCk7XG59XG5cbmxldCBpbml0aWFsU2hhcmluZ1Njb3BlQ3JlYXRlZCA9IGZhbHNlO1xuXG5hc3luYyBmdW5jdGlvbiBsb2FkUmVtb3RlQ29udGFpbmVyKHJlbW90ZU5hbWU6IHN0cmluZykge1xuICBpZiAoIXJlc29sdmVSZW1vdGVVcmwgJiYgIXJlbW90ZVVybERlZmluaXRpb25zKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgJ0NhbGwgc2V0UmVtb3RlRGVmaW5pdGlvbnMgb3Igc2V0UmVtb3RlVXJsUmVzb2x2ZXIgdG8gYWxsb3cgRHluYW1pYyBGZWRlcmF0aW9uIHRvIGZpbmQgdGhlIHJlbW90ZSBhcHBzIGNvcnJlY3RseS4nXG4gICAgKTtcbiAgfVxuXG4gIGlmICghaW5pdGlhbFNoYXJpbmdTY29wZUNyZWF0ZWQpIHtcbiAgICBpbml0aWFsU2hhcmluZ1Njb3BlQ3JlYXRlZCA9IHRydWU7XG4gICAgYXdhaXQgX193ZWJwYWNrX2luaXRfc2hhcmluZ19fKCdkZWZhdWx0Jyk7XG4gIH1cblxuICBjb25zdCByZW1vdGVVcmwgPSByZW1vdGVVcmxEZWZpbml0aW9uc1xuICAgID8gcmVtb3RlVXJsRGVmaW5pdGlvbnNbcmVtb3RlTmFtZV1cbiAgICA6IGF3YWl0IHJlc29sdmVSZW1vdGVVcmwocmVtb3RlTmFtZSk7XG5cbiAgbGV0IGNvbnRhaW5lclVybCA9IHJlbW90ZVVybDtcbiAgaWYgKCFyZW1vdGVVcmwuZW5kc1dpdGgoJy5tanMnKSAmJiAhcmVtb3RlVXJsLmVuZHNXaXRoKCcuanMnKSkge1xuICAgIGNvbnRhaW5lclVybCA9IGAke3JlbW90ZVVybH0ke1xuICAgICAgcmVtb3RlVXJsLmVuZHNXaXRoKCcvJykgPyAnJyA6ICcvJ1xuICAgIH1yZW1vdGVFbnRyeS5tanNgO1xuICB9XG5cbiAgY29uc3QgY29udGFpbmVyID0gYXdhaXQgbG9hZE1vZHVsZShjb250YWluZXJVcmwpO1xuICBhd2FpdCBjb250YWluZXIuaW5pdChfX3dlYnBhY2tfc2hhcmVfc2NvcGVzX18uZGVmYXVsdCk7XG5cbiAgcmVtb3RlQ29udGFpbmVyTWFwLnNldChyZW1vdGVOYW1lLCBjb250YWluZXIpO1xuICByZXR1cm4gY29udGFpbmVyO1xufVxuIl19
|
@@ -1,17 +1,81 @@
|
|
1
1
|
let resolveRemoteUrl;
|
2
|
+
/**
|
3
|
+
* @deprecated Use Runtime Helpers from '@module-federation/enhanced/runtime' instead. This will be removed in Nx 22.
|
4
|
+
*/
|
2
5
|
function setRemoteUrlResolver(_resolveRemoteUrl) {
|
3
6
|
resolveRemoteUrl = _resolveRemoteUrl;
|
4
7
|
}
|
5
8
|
let remoteUrlDefinitions;
|
9
|
+
/**
|
10
|
+
* @deprecated Use init() from '@module-federation/enhanced/runtime' instead. This will be removed in Nx 22.
|
11
|
+
* If you have a remote app called `my-remote-app` and you want to use the `http://localhost:4201/mf-manifest.json` as the remote url, you should change it from:
|
12
|
+
* ```ts
|
13
|
+
* import { setRemoteDefinitions } from '@nx/angular/mf';
|
14
|
+
*
|
15
|
+
* setRemoteDefinitions({
|
16
|
+
* 'my-remote-app': 'http://localhost:4201/mf-manifest.json'
|
17
|
+
* });
|
18
|
+
* ```
|
19
|
+
* to use init():
|
20
|
+
* ```ts
|
21
|
+
* import { init } from '@module-federation/enhanced/runtime';
|
22
|
+
*
|
23
|
+
* init({
|
24
|
+
* name: 'host',
|
25
|
+
* remotes: [{
|
26
|
+
* name: 'my-remote-app',
|
27
|
+
* entry: 'http://localhost:4201/mf-manifest.json'
|
28
|
+
* }]
|
29
|
+
* });
|
30
|
+
* ```
|
31
|
+
*/
|
6
32
|
function setRemoteDefinitions(definitions) {
|
7
33
|
remoteUrlDefinitions = definitions;
|
8
34
|
}
|
35
|
+
/**
|
36
|
+
* @deprecated Use registerRemotes() from '@module-federation/enhanced/runtime' instead. This will be removed in Nx 22.
|
37
|
+
* If you set a remote app with `setRemoteDefinition` such as:
|
38
|
+
* ```ts
|
39
|
+
* import { setRemoteDefinition } from '@nx/angular/mf';
|
40
|
+
*
|
41
|
+
* setRemoteDefinition(
|
42
|
+
* 'my-remote-app',
|
43
|
+
* 'http://localhost:4201/mf-manifest.json'
|
44
|
+
* );
|
45
|
+
* ```
|
46
|
+
* change it to use registerRemotes():
|
47
|
+
* ```ts
|
48
|
+
* import { registerRemotes } from '@module-federation/enhanced/runtime';
|
49
|
+
*
|
50
|
+
* registerRemotes([
|
51
|
+
* {
|
52
|
+
* name: 'my-remote-app',
|
53
|
+
* entry: 'http://localhost:4201/mf-manifest.json'
|
54
|
+
* }
|
55
|
+
* ]);
|
56
|
+
* ```
|
57
|
+
*/
|
9
58
|
function setRemoteDefinition(remoteName, remoteUrl) {
|
10
59
|
remoteUrlDefinitions ??= {};
|
11
60
|
remoteUrlDefinitions[remoteName] = remoteUrl;
|
12
61
|
}
|
13
62
|
let remoteModuleMap = new Map();
|
14
63
|
let remoteContainerMap = new Map();
|
64
|
+
/**
|
65
|
+
* @deprecated Use loadRemote() from '@module-federation/enhanced/runtime' instead. This will be removed in Nx 22.
|
66
|
+
* If you set a load a remote with `loadRemoteModule` such as:
|
67
|
+
* ```ts
|
68
|
+
* import { loadRemoteModule } from '@nx/angular/mf';
|
69
|
+
*
|
70
|
+
* loadRemoteModule('my-remote-app', './Module').then(m => m.RemoteEntryModule);
|
71
|
+
* ```
|
72
|
+
* change it to use loadRemote():
|
73
|
+
* ```ts
|
74
|
+
* import { loadRemote } from '@module-federation/enhanced/runtime';
|
75
|
+
*
|
76
|
+
* loadRemote<typeof import('my-remote-app/Module')>('my-remote-app/Module').then(m => m.RemoteEntryModule);
|
77
|
+
* ```
|
78
|
+
*/
|
15
79
|
async function loadRemoteModule(remoteName, moduleName) {
|
16
80
|
const remoteModuleKey = `${remoteName}:${moduleName}`;
|
17
81
|
if (remoteModuleMap.has(remoteModuleKey)) {
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"nx-angular-mf.mjs","sources":["../../../../packages/angular/mf/mf.ts","../../../../packages/angular/mf/nx-angular-mf.ts"],"sourcesContent":["export type ResolveRemoteUrlFunction = (\n remoteName: string\n) => string | Promise<string>;\n\ndeclare const __webpack_init_sharing__: (scope: 'default') => Promise<void>;\ndeclare const __webpack_share_scopes__: { default: unknown };\n\nlet resolveRemoteUrl: ResolveRemoteUrlFunction;\n\nexport function setRemoteUrlResolver(\n _resolveRemoteUrl: ResolveRemoteUrlFunction\n) {\n resolveRemoteUrl = _resolveRemoteUrl;\n}\n\nlet remoteUrlDefinitions: Record<string, string>;\n\nexport function setRemoteDefinitions(definitions: Record<string, string>) {\n remoteUrlDefinitions = definitions;\n}\n\nexport function setRemoteDefinition(remoteName: string, remoteUrl: string) {\n remoteUrlDefinitions ??= {};\n remoteUrlDefinitions[remoteName] = remoteUrl;\n}\n\nlet remoteModuleMap = new Map<string, unknown>();\nlet remoteContainerMap = new Map<string, unknown>();\n\nexport async function loadRemoteModule(remoteName: string, moduleName: string) {\n const remoteModuleKey = `${remoteName}:${moduleName}`;\n if (remoteModuleMap.has(remoteModuleKey)) {\n return remoteModuleMap.get(remoteModuleKey);\n }\n\n const container = remoteContainerMap.has(remoteName)\n ? remoteContainerMap.get(remoteName)\n : await loadRemoteContainer(remoteName);\n\n const factory = await container.get(moduleName);\n const Module = factory();\n\n remoteModuleMap.set(remoteModuleKey, Module);\n\n return Module;\n}\n\nfunction loadModule(url: string) {\n return import(/* webpackIgnore:true */ url);\n}\n\nlet initialSharingScopeCreated = false;\n\nasync function loadRemoteContainer(remoteName: string) {\n if (!resolveRemoteUrl && !remoteUrlDefinitions) {\n throw new Error(\n 'Call setRemoteDefinitions or setRemoteUrlResolver to allow Dynamic Federation to find the remote apps correctly.'\n );\n }\n\n if (!initialSharingScopeCreated) {\n initialSharingScopeCreated = true;\n await __webpack_init_sharing__('default');\n }\n\n const remoteUrl = remoteUrlDefinitions\n ? remoteUrlDefinitions[remoteName]\n : await resolveRemoteUrl(remoteName);\n\n let containerUrl = remoteUrl;\n if (!remoteUrl.endsWith('.mjs') && !remoteUrl.endsWith('.js')) {\n containerUrl = `${remoteUrl}${\n remoteUrl.endsWith('/') ? '' : '/'\n }remoteEntry.mjs`;\n }\n\n const container = await loadModule(containerUrl);\n await container.init(__webpack_share_scopes__.default);\n\n remoteContainerMap.set(remoteName, container);\n return container;\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"AAOA,IAAI,gBAA0C,CAAC;
|
1
|
+
{"version":3,"file":"nx-angular-mf.mjs","sources":["../../../../packages/angular/mf/mf.ts","../../../../packages/angular/mf/nx-angular-mf.ts"],"sourcesContent":["export type ResolveRemoteUrlFunction = (\n remoteName: string\n) => string | Promise<string>;\n\ndeclare const __webpack_init_sharing__: (scope: 'default') => Promise<void>;\ndeclare const __webpack_share_scopes__: { default: unknown };\n\nlet resolveRemoteUrl: ResolveRemoteUrlFunction;\n\n/**\n * @deprecated Use Runtime Helpers from '@module-federation/enhanced/runtime' instead. This will be removed in Nx 22.\n */\nexport function setRemoteUrlResolver(\n _resolveRemoteUrl: ResolveRemoteUrlFunction\n) {\n resolveRemoteUrl = _resolveRemoteUrl;\n}\n\nlet remoteUrlDefinitions: Record<string, string>;\n\n/**\n * @deprecated Use init() from '@module-federation/enhanced/runtime' instead. This will be removed in Nx 22.\n * If you have a remote app called `my-remote-app` and you want to use the `http://localhost:4201/mf-manifest.json` as the remote url, you should change it from:\n * ```ts\n * import { setRemoteDefinitions } from '@nx/angular/mf';\n *\n * setRemoteDefinitions({\n * 'my-remote-app': 'http://localhost:4201/mf-manifest.json'\n * });\n * ```\n * to use init():\n * ```ts\n * import { init } from '@module-federation/enhanced/runtime';\n *\n * init({\n * name: 'host',\n * remotes: [{\n * name: 'my-remote-app',\n * entry: 'http://localhost:4201/mf-manifest.json'\n * }]\n * });\n * ```\n */\nexport function setRemoteDefinitions(definitions: Record<string, string>) {\n remoteUrlDefinitions = definitions;\n}\n\n/**\n * @deprecated Use registerRemotes() from '@module-federation/enhanced/runtime' instead. This will be removed in Nx 22.\n * If you set a remote app with `setRemoteDefinition` such as:\n * ```ts\n * import { setRemoteDefinition } from '@nx/angular/mf';\n *\n * setRemoteDefinition(\n * 'my-remote-app',\n * 'http://localhost:4201/mf-manifest.json'\n * );\n * ```\n * change it to use registerRemotes():\n * ```ts\n * import { registerRemotes } from '@module-federation/enhanced/runtime';\n *\n * registerRemotes([\n * {\n * name: 'my-remote-app',\n * entry: 'http://localhost:4201/mf-manifest.json'\n * }\n * ]);\n * ```\n */\nexport function setRemoteDefinition(remoteName: string, remoteUrl: string) {\n remoteUrlDefinitions ??= {};\n remoteUrlDefinitions[remoteName] = remoteUrl;\n}\n\nlet remoteModuleMap = new Map<string, unknown>();\nlet remoteContainerMap = new Map<string, unknown>();\n\n/**\n * @deprecated Use loadRemote() from '@module-federation/enhanced/runtime' instead. This will be removed in Nx 22.\n * If you set a load a remote with `loadRemoteModule` such as:\n * ```ts\n * import { loadRemoteModule } from '@nx/angular/mf';\n *\n * loadRemoteModule('my-remote-app', './Module').then(m => m.RemoteEntryModule);\n * ```\n * change it to use loadRemote():\n * ```ts\n * import { loadRemote } from '@module-federation/enhanced/runtime';\n *\n * loadRemote<typeof import('my-remote-app/Module')>('my-remote-app/Module').then(m => m.RemoteEntryModule);\n * ```\n */\nexport async function loadRemoteModule(remoteName: string, moduleName: string) {\n const remoteModuleKey = `${remoteName}:${moduleName}`;\n if (remoteModuleMap.has(remoteModuleKey)) {\n return remoteModuleMap.get(remoteModuleKey);\n }\n\n const container = remoteContainerMap.has(remoteName)\n ? remoteContainerMap.get(remoteName)\n : await loadRemoteContainer(remoteName);\n\n const factory = await container.get(moduleName);\n const Module = factory();\n\n remoteModuleMap.set(remoteModuleKey, Module);\n\n return Module;\n}\n\nfunction loadModule(url: string) {\n return import(/* webpackIgnore:true */ url);\n}\n\nlet initialSharingScopeCreated = false;\n\nasync function loadRemoteContainer(remoteName: string) {\n if (!resolveRemoteUrl && !remoteUrlDefinitions) {\n throw new Error(\n 'Call setRemoteDefinitions or setRemoteUrlResolver to allow Dynamic Federation to find the remote apps correctly.'\n );\n }\n\n if (!initialSharingScopeCreated) {\n initialSharingScopeCreated = true;\n await __webpack_init_sharing__('default');\n }\n\n const remoteUrl = remoteUrlDefinitions\n ? remoteUrlDefinitions[remoteName]\n : await resolveRemoteUrl(remoteName);\n\n let containerUrl = remoteUrl;\n if (!remoteUrl.endsWith('.mjs') && !remoteUrl.endsWith('.js')) {\n containerUrl = `${remoteUrl}${\n remoteUrl.endsWith('/') ? '' : '/'\n }remoteEntry.mjs`;\n }\n\n const container = await loadModule(containerUrl);\n await container.init(__webpack_share_scopes__.default);\n\n remoteContainerMap.set(remoteName, container);\n return container;\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"AAOA,IAAI,gBAA0C,CAAC;AAE/C;;AAEG;AACG,SAAU,oBAAoB,CAClC,iBAA2C,EAAA;IAE3C,gBAAgB,GAAG,iBAAiB,CAAC;AACvC,CAAC;AAED,IAAI,oBAA4C,CAAC;AAEjD;;;;;;;;;;;;;;;;;;;;;;AAsBG;AACG,SAAU,oBAAoB,CAAC,WAAmC,EAAA;IACtE,oBAAoB,GAAG,WAAW,CAAC;AACrC,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;AAsBG;AACa,SAAA,mBAAmB,CAAC,UAAkB,EAAE,SAAiB,EAAA;IACvE,oBAAoB,KAAK,EAAE,CAAC;AAC5B,IAAA,oBAAoB,CAAC,UAAU,CAAC,GAAG,SAAS,CAAC;AAC/C,CAAC;AAED,IAAI,eAAe,GAAG,IAAI,GAAG,EAAmB,CAAC;AACjD,IAAI,kBAAkB,GAAG,IAAI,GAAG,EAAmB,CAAC;AAEpD;;;;;;;;;;;;;;AAcG;AACI,eAAe,gBAAgB,CAAC,UAAkB,EAAE,UAAkB,EAAA;AAC3E,IAAA,MAAM,eAAe,GAAG,CAAA,EAAG,UAAU,CAAI,CAAA,EAAA,UAAU,EAAE,CAAC;AACtD,IAAA,IAAI,eAAe,CAAC,GAAG,CAAC,eAAe,CAAC,EAAE;AACxC,QAAA,OAAO,eAAe,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;KAC7C;AAED,IAAA,MAAM,SAAS,GAAG,kBAAkB,CAAC,GAAG,CAAC,UAAU,CAAC;AAClD,UAAE,kBAAkB,CAAC,GAAG,CAAC,UAAU,CAAC;AACpC,UAAE,MAAM,mBAAmB,CAAC,UAAU,CAAC,CAAC;IAE1C,MAAM,OAAO,GAAG,MAAM,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;AAChD,IAAA,MAAM,MAAM,GAAG,OAAO,EAAE,CAAC;AAEzB,IAAA,eAAe,CAAC,GAAG,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC;AAE7C,IAAA,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,UAAU,CAAC,GAAW,EAAA;AAC7B,IAAA,OAAO,gCAAgC,GAAG,CAAC,CAAC;AAC9C,CAAC;AAED,IAAI,0BAA0B,GAAG,KAAK,CAAC;AAEvC,eAAe,mBAAmB,CAAC,UAAkB,EAAA;AACnD,IAAA,IAAI,CAAC,gBAAgB,IAAI,CAAC,oBAAoB,EAAE;AAC9C,QAAA,MAAM,IAAI,KAAK,CACb,kHAAkH,CACnH,CAAC;KACH;IAED,IAAI,CAAC,0BAA0B,EAAE;QAC/B,0BAA0B,GAAG,IAAI,CAAC;AAClC,QAAA,MAAM,wBAAwB,CAAC,SAAS,CAAC,CAAC;KAC3C;IAED,MAAM,SAAS,GAAG,oBAAoB;AACpC,UAAE,oBAAoB,CAAC,UAAU,CAAC;AAClC,UAAE,MAAM,gBAAgB,CAAC,UAAU,CAAC,CAAC;IAEvC,IAAI,YAAY,GAAG,SAAS,CAAC;AAC7B,IAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;AAC7D,QAAA,YAAY,GAAG,CAAG,EAAA,SAAS,GACzB,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,GACjC,iBAAiB,CAAC;KACnB;AAED,IAAA,MAAM,SAAS,GAAG,MAAM,UAAU,CAAC,YAAY,CAAC,CAAC;IACjD,MAAM,SAAS,CAAC,IAAI,CAAC,wBAAwB,CAAC,OAAO,CAAC,CAAC;AAEvD,IAAA,kBAAkB,CAAC,GAAG,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;AAC9C,IAAA,OAAO,SAAS,CAAC;AACnB;;ACjJA;;AAEG;;;;"}
|
package/mf/mf.d.ts
CHANGED
@@ -1,5 +1,69 @@
|
|
1
1
|
export type ResolveRemoteUrlFunction = (remoteName: string) => string | Promise<string>;
|
2
|
+
/**
|
3
|
+
* @deprecated Use Runtime Helpers from '@module-federation/enhanced/runtime' instead. This will be removed in Nx 22.
|
4
|
+
*/
|
2
5
|
export declare function setRemoteUrlResolver(_resolveRemoteUrl: ResolveRemoteUrlFunction): void;
|
6
|
+
/**
|
7
|
+
* @deprecated Use init() from '@module-federation/enhanced/runtime' instead. This will be removed in Nx 22.
|
8
|
+
* If you have a remote app called `my-remote-app` and you want to use the `http://localhost:4201/mf-manifest.json` as the remote url, you should change it from:
|
9
|
+
* ```ts
|
10
|
+
* import { setRemoteDefinitions } from '@nx/angular/mf';
|
11
|
+
*
|
12
|
+
* setRemoteDefinitions({
|
13
|
+
* 'my-remote-app': 'http://localhost:4201/mf-manifest.json'
|
14
|
+
* });
|
15
|
+
* ```
|
16
|
+
* to use init():
|
17
|
+
* ```ts
|
18
|
+
* import { init } from '@module-federation/enhanced/runtime';
|
19
|
+
*
|
20
|
+
* init({
|
21
|
+
* name: 'host',
|
22
|
+
* remotes: [{
|
23
|
+
* name: 'my-remote-app',
|
24
|
+
* entry: 'http://localhost:4201/mf-manifest.json'
|
25
|
+
* }]
|
26
|
+
* });
|
27
|
+
* ```
|
28
|
+
*/
|
3
29
|
export declare function setRemoteDefinitions(definitions: Record<string, string>): void;
|
30
|
+
/**
|
31
|
+
* @deprecated Use registerRemotes() from '@module-federation/enhanced/runtime' instead. This will be removed in Nx 22.
|
32
|
+
* If you set a remote app with `setRemoteDefinition` such as:
|
33
|
+
* ```ts
|
34
|
+
* import { setRemoteDefinition } from '@nx/angular/mf';
|
35
|
+
*
|
36
|
+
* setRemoteDefinition(
|
37
|
+
* 'my-remote-app',
|
38
|
+
* 'http://localhost:4201/mf-manifest.json'
|
39
|
+
* );
|
40
|
+
* ```
|
41
|
+
* change it to use registerRemotes():
|
42
|
+
* ```ts
|
43
|
+
* import { registerRemotes } from '@module-federation/enhanced/runtime';
|
44
|
+
*
|
45
|
+
* registerRemotes([
|
46
|
+
* {
|
47
|
+
* name: 'my-remote-app',
|
48
|
+
* entry: 'http://localhost:4201/mf-manifest.json'
|
49
|
+
* }
|
50
|
+
* ]);
|
51
|
+
* ```
|
52
|
+
*/
|
4
53
|
export declare function setRemoteDefinition(remoteName: string, remoteUrl: string): void;
|
54
|
+
/**
|
55
|
+
* @deprecated Use loadRemote() from '@module-federation/enhanced/runtime' instead. This will be removed in Nx 22.
|
56
|
+
* If you set a load a remote with `loadRemoteModule` such as:
|
57
|
+
* ```ts
|
58
|
+
* import { loadRemoteModule } from '@nx/angular/mf';
|
59
|
+
*
|
60
|
+
* loadRemoteModule('my-remote-app', './Module').then(m => m.RemoteEntryModule);
|
61
|
+
* ```
|
62
|
+
* change it to use loadRemote():
|
63
|
+
* ```ts
|
64
|
+
* import { loadRemote } from '@module-federation/enhanced/runtime';
|
65
|
+
*
|
66
|
+
* loadRemote<typeof import('my-remote-app/Module')>('my-remote-app/Module').then(m => m.RemoteEntryModule);
|
67
|
+
* ```
|
68
|
+
*/
|
5
69
|
export declare function loadRemoteModule(remoteName: string, moduleName: string): Promise<any>;
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "@nx/angular",
|
3
|
-
"version": "20.0.
|
3
|
+
"version": "20.1.0-beta.0",
|
4
4
|
"private": false,
|
5
5
|
"description": "The Nx Plugin for Angular contains executors, generators, and utilities for managing Angular applications and libraries within an Nx workspace. It provides: \n\n- Integration with libraries such as Storybook, Jest, ESLint, Tailwind CSS, Playwright and Cypress. \n\n- Generators to help scaffold code quickly (like: Micro Frontends, Libraries, both internal to your codebase and publishable to npm) \n\n- Single Component Application Modules (SCAMs) \n\n- NgRx helpers. \n\n- Utilities for automatic workspace refactoring.",
|
6
6
|
"repository": {
|
@@ -79,13 +79,13 @@
|
|
79
79
|
"tslib": "^2.3.0",
|
80
80
|
"webpack-merge": "^5.8.0",
|
81
81
|
"webpack": "^5.88.0",
|
82
|
-
"@module-federation/enhanced": "0.6.
|
83
|
-
"@nx/devkit": "20.0.
|
84
|
-
"@nx/js": "20.0.
|
85
|
-
"@nx/eslint": "20.0.
|
86
|
-
"@nx/webpack": "20.0.
|
87
|
-
"@nx/web": "20.0.
|
88
|
-
"@nx/workspace": "20.0.
|
82
|
+
"@module-federation/enhanced": "0.6.9",
|
83
|
+
"@nx/devkit": "20.1.0-beta.0",
|
84
|
+
"@nx/js": "20.1.0-beta.0",
|
85
|
+
"@nx/eslint": "20.1.0-beta.0",
|
86
|
+
"@nx/webpack": "20.1.0-beta.0",
|
87
|
+
"@nx/web": "20.1.0-beta.0",
|
88
|
+
"@nx/workspace": "20.1.0-beta.0",
|
89
89
|
"piscina": "^4.4.0"
|
90
90
|
},
|
91
91
|
"peerDependencies": {
|
@@ -1 +1,8 @@
|
|
1
|
-
<% if(minimal) {
|
1
|
+
<%_ if(minimal) { _%>
|
2
|
+
<h1>Welcome <%= appName %></h1>
|
3
|
+
<%_ } else { _%>
|
4
|
+
<<%= nxWelcomeSelector %>></<%= nxWelcomeSelector %>>
|
5
|
+
<%_ } _%>
|
6
|
+
<%_ if(routing) { _%>
|
7
|
+
<router-outlet></router-outlet>
|
8
|
+
<%_ } _%>
|
package/src/generators/application/files/standalone-components/src/app/app.component.html__tpl__
CHANGED
@@ -1 +1,8 @@
|
|
1
|
-
<% if(minimal) {
|
1
|
+
<%_ if(minimal) { _%>
|
2
|
+
<h1>Welcome <%= appName %></h1>
|
3
|
+
<%_ } else { _%>
|
4
|
+
<<%= nxWelcomeSelector %>></<%= nxWelcomeSelector %>>
|
5
|
+
<%_ } _%>
|
6
|
+
<%_ if(routing) { _%>
|
7
|
+
<router-outlet></router-outlet>
|
8
|
+
<%_ } _%>
|
@@ -3,13 +3,24 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.addUnitTestRunner = addUnitTestRunner;
|
4
4
|
const test_runners_1 = require("../../../utils/test-runners");
|
5
5
|
const add_jest_1 = require("../../utils/add-jest");
|
6
|
+
const add_vitest_1 = require("../../utils/add-vitest");
|
6
7
|
async function addUnitTestRunner(host, options) {
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
8
|
+
switch (options.unitTestRunner) {
|
9
|
+
case test_runners_1.UnitTestRunner.Jest:
|
10
|
+
await (0, add_jest_1.addJest)(host, {
|
11
|
+
name: options.name,
|
12
|
+
projectRoot: options.appProjectRoot,
|
13
|
+
skipPackageJson: options.skipPackageJson,
|
14
|
+
strict: options.strict,
|
15
|
+
});
|
16
|
+
break;
|
17
|
+
case test_runners_1.UnitTestRunner.Vitest:
|
18
|
+
await (0, add_vitest_1.addVitest)(host, {
|
19
|
+
name: options.name,
|
20
|
+
projectRoot: options.appProjectRoot,
|
21
|
+
skipPackageJson: options.skipPackageJson,
|
22
|
+
strict: options.strict,
|
23
|
+
});
|
24
|
+
break;
|
14
25
|
}
|
15
26
|
}
|
@@ -99,8 +99,9 @@
|
|
99
99
|
},
|
100
100
|
"unitTestRunner": {
|
101
101
|
"type": "string",
|
102
|
-
"enum": ["jest", "none"],
|
102
|
+
"enum": ["jest", "vitest", "none"],
|
103
103
|
"description": "Test runner to use for unit tests.",
|
104
|
+
"x-prompt": "Which unit test runner would you like to use?",
|
104
105
|
"default": "jest"
|
105
106
|
},
|
106
107
|
"e2eTestRunner": {
|
@@ -1,9 +1,9 @@
|
|
1
1
|
import type { Meta, StoryObj } from '@storybook/angular';
|
2
2
|
import { <%=componentName%> } from './<%=componentFileName%>';
|
3
|
-
<% if ( interactionTests ) { %>
|
3
|
+
<%_ if ( interactionTests ) { _%>
|
4
4
|
import { within } from '@storybook/testing-library';
|
5
5
|
import { expect } from '@storybook/jest';
|
6
|
-
<% } %>
|
6
|
+
<%_ } _%>
|
7
7
|
|
8
8
|
const meta: Meta<<%= componentName %>> = {
|
9
9
|
component: <%= componentName %>,
|
@@ -18,7 +18,7 @@ export const Primary: Story = {
|
|
18
18
|
},
|
19
19
|
};
|
20
20
|
|
21
|
-
<% if ( interactionTests ) { %>
|
21
|
+
<%_ if ( interactionTests ) { _%>
|
22
22
|
export const Heading: Story = {
|
23
23
|
args: {<% for (let prop of props) { %>
|
24
24
|
<%= prop.name %>: <%- prop.defaultValue %>,<% } %>
|
@@ -28,4 +28,4 @@ export const Heading: Story = {
|
|
28
28
|
expect(canvas.getByText(/<%=componentNameSimple%> works!/gi)).toBeTruthy();
|
29
29
|
},
|
30
30
|
};
|
31
|
-
<% } %>
|
31
|
+
<%_ } _%>
|
@@ -51,8 +51,9 @@
|
|
51
51
|
},
|
52
52
|
"unitTestRunner": {
|
53
53
|
"type": "string",
|
54
|
-
"enum": ["jest", "none"],
|
54
|
+
"enum": ["jest", "vitest", "none"],
|
55
55
|
"description": "Test runner to use for unit tests of the remote if it needs to be created.",
|
56
|
+
"x-prompt": "Which unit test runner would you like to use?",
|
56
57
|
"default": "jest"
|
57
58
|
},
|
58
59
|
"e2eTestRunner": {
|
@@ -108,8 +108,9 @@
|
|
108
108
|
},
|
109
109
|
"unitTestRunner": {
|
110
110
|
"type": "string",
|
111
|
-
"enum": ["jest", "none"],
|
111
|
+
"enum": ["jest", "vitest", "none"],
|
112
112
|
"description": "Test runner to use for unit tests.",
|
113
|
+
"x-prompt": "Which unit test runner would you like to use?",
|
113
114
|
"default": "jest"
|
114
115
|
},
|
115
116
|
"e2eTestRunner": {
|
@@ -22,6 +22,8 @@ const add_jest_1 = require("../utils/add-jest");
|
|
22
22
|
const set_generator_defaults_1 = require("./lib/set-generator-defaults");
|
23
23
|
const ensure_angular_dependencies_1 = require("../utils/ensure-angular-dependencies");
|
24
24
|
const log_show_project_command_1 = require("@nx/devkit/src/utils/log-show-project-command");
|
25
|
+
const test_runners_1 = require("../../utils/test-runners");
|
26
|
+
const add_vitest_1 = require("../utils/add-vitest");
|
25
27
|
const ts_solution_setup_1 = require("@nx/js/src/utils/typescript/ts-solution-setup");
|
26
28
|
async function libraryGenerator(tree, schema) {
|
27
29
|
(0, ts_solution_setup_1.assertNotUsingTsSolutionSetup)(tree, 'angular', 'library');
|
@@ -87,13 +89,23 @@ async function libraryGenerator(tree, schema) {
|
|
87
89
|
};
|
88
90
|
}
|
89
91
|
async function addUnitTestRunner(host, options) {
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
92
|
+
switch (options.unitTestRunner) {
|
93
|
+
case test_runners_1.UnitTestRunner.Jest:
|
94
|
+
await (0, add_jest_1.addJest)(host, {
|
95
|
+
name: options.name,
|
96
|
+
projectRoot: options.projectRoot,
|
97
|
+
skipPackageJson: options.skipPackageJson,
|
98
|
+
strict: options.strict,
|
99
|
+
});
|
100
|
+
break;
|
101
|
+
case test_runners_1.UnitTestRunner.Vitest:
|
102
|
+
await (0, add_vitest_1.addVitest)(host, {
|
103
|
+
name: options.name,
|
104
|
+
projectRoot: options.projectRoot,
|
105
|
+
skipPackageJson: options.skipPackageJson,
|
106
|
+
strict: options.strict,
|
107
|
+
});
|
108
|
+
break;
|
97
109
|
}
|
98
110
|
}
|
99
111
|
function updateNpmScopeIfBuildableOrPublishable(host, options) {
|
@@ -88,8 +88,9 @@
|
|
88
88
|
},
|
89
89
|
"unitTestRunner": {
|
90
90
|
"type": "string",
|
91
|
-
"enum": ["jest", "none"],
|
91
|
+
"enum": ["jest", "vitest", "none"],
|
92
92
|
"description": "Test runner to use for unit tests.",
|
93
|
+
"x-prompt": "Which unit test runner would you like to use?",
|
93
94
|
"default": "jest"
|
94
95
|
},
|
95
96
|
"importPath": {
|
@@ -102,8 +102,9 @@
|
|
102
102
|
},
|
103
103
|
"unitTestRunner": {
|
104
104
|
"type": "string",
|
105
|
-
"enum": ["jest", "none"],
|
105
|
+
"enum": ["jest", "vitest", "none"],
|
106
106
|
"description": "Test runner to use for unit tests.",
|
107
|
+
"x-prompt": "Which unit test runner would you like to use?",
|
107
108
|
"default": "jest"
|
108
109
|
},
|
109
110
|
"e2eTestRunner": {
|
@@ -25,7 +25,7 @@ function addRemoteToHost(tree, options) {
|
|
25
25
|
addRemoteToStaticHost(tree, options, hostProject, isHostUsingTypescriptConfig);
|
26
26
|
}
|
27
27
|
else if (hostFederationType === 'dynamic') {
|
28
|
-
addRemoteToDynamicHost(tree, options, pathToMFManifest);
|
28
|
+
addRemoteToDynamicHost(tree, options, pathToMFManifest, hostProject.sourceRoot);
|
29
29
|
}
|
30
30
|
addLazyLoadedRouteToHostAppModule(tree, options, hostFederationType);
|
31
31
|
}
|
@@ -58,15 +58,18 @@ function addRemoteToStaticHost(tree, options, hostProject, isHostUsingTypescript
|
|
58
58
|
const updatedConfig = `${hostMFConfig.slice(0, endOfPropertiesPos)}${isCommaNeeded ? ',' : ''}'${options.appName}',${hostMFConfig.slice(endOfPropertiesPos)}`;
|
59
59
|
tree.write(hostMFConfigPath, updatedConfig);
|
60
60
|
}
|
61
|
-
function addRemoteToDynamicHost(tree, options, pathToMfManifest) {
|
61
|
+
function addRemoteToDynamicHost(tree, options, pathToMfManifest, hostSourceRoot) {
|
62
|
+
// TODO(Colum): Remove for Nx 22
|
63
|
+
const usingLegacyDynamicFederation = tree
|
64
|
+
.read(`${hostSourceRoot}/main.ts`, 'utf-8')
|
65
|
+
.includes('setRemoteDefinitions(');
|
62
66
|
(0, devkit_1.updateJson)(tree, pathToMfManifest, (manifest) => {
|
63
67
|
return {
|
64
68
|
...manifest,
|
65
|
-
[options.appName]: `http://localhost:${options.port}`,
|
69
|
+
[options.appName]: `http://localhost:${options.port}${usingLegacyDynamicFederation ? '' : '/mf-manifest.json'}`,
|
66
70
|
};
|
67
71
|
});
|
68
72
|
}
|
69
|
-
// TODO(colum): future work: allow dev to pass to path to routing module
|
70
73
|
function addLazyLoadedRouteToHostAppModule(tree, options, hostFederationType) {
|
71
74
|
if (!tsModule) {
|
72
75
|
tsModule = (0, ensure_typescript_1.ensureTypescript)();
|
@@ -78,19 +81,29 @@ function addLazyLoadedRouteToHostAppModule(tree, options, hostFederationType) {
|
|
78
81
|
}
|
79
82
|
const hostRootRoutingFile = tree.read(pathToHostRootRouting, 'utf-8');
|
80
83
|
let sourceFile = tsModule.createSourceFile(pathToHostRootRouting, hostRootRoutingFile, tsModule.ScriptTarget.Latest, true);
|
84
|
+
// TODO(Colum): Remove for Nx 22
|
85
|
+
const usingLegacyDynamicFederation = hostFederationType === 'dynamic' &&
|
86
|
+
tree
|
87
|
+
.read(`${hostAppConfig.sourceRoot}/main.ts`, 'utf-8')
|
88
|
+
.includes('setRemoteDefinitions(');
|
81
89
|
if (hostFederationType === 'dynamic') {
|
82
|
-
sourceFile = (0, js_1.insertImport)(tree, sourceFile, pathToHostRootRouting, 'loadRemoteModule'
|
90
|
+
sourceFile = (0, js_1.insertImport)(tree, sourceFile, pathToHostRootRouting, usingLegacyDynamicFederation ? 'loadRemoteModule' : 'loadRemote', usingLegacyDynamicFederation
|
91
|
+
? '@nx/angular/mf'
|
92
|
+
: '@module-federation/enhanced/runtime');
|
83
93
|
}
|
84
94
|
const routePathName = options.standalone ? 'Routes' : 'Module';
|
85
95
|
const exportedRemote = options.standalone
|
86
96
|
? 'remoteRoutes'
|
87
97
|
: 'RemoteEntryModule';
|
98
|
+
const remoteModulePath = `${options.appName.replace(/-/g, '_')}/${routePathName}`;
|
88
99
|
const routeToAdd = hostFederationType === 'dynamic'
|
89
|
-
?
|
90
|
-
|
100
|
+
? usingLegacyDynamicFederation
|
101
|
+
? `loadRemoteModule('${options.appName.replace(/-/g, '_')}', './${routePathName}')`
|
102
|
+
: `loadRemote<typeof import('${remoteModulePath}')>('${remoteModulePath}')`
|
103
|
+
: `import('${remoteModulePath}')`;
|
91
104
|
(0, route_utils_1.addRoute)(tree, pathToHostRootRouting, `{
|
92
105
|
path: '${options.appName}',
|
93
|
-
loadChildren: () => ${routeToAdd}.then(m => m
|
106
|
+
loadChildren: () => ${routeToAdd}.then(m => m!.${exportedRemote})
|
94
107
|
}`);
|
95
108
|
const pathToAppComponentTemplate = (0, devkit_1.joinPathFragments)(hostAppConfig.sourceRoot, 'app/app.component.html');
|
96
109
|
const appComponent = tree.read(pathToAppComponentTemplate, 'utf-8');
|
@@ -20,11 +20,12 @@ function fixBootstrap(tree, appRoot, options) {
|
|
20
20
|
if (tree.exists((0, devkit_1.joinPathFragments)(appRoot, 'public/module-federation.manifest.json'))) {
|
21
21
|
manifestPath = '/module-federation.manifest.json';
|
22
22
|
}
|
23
|
-
const fetchMFManifestCode = `import {
|
23
|
+
const fetchMFManifestCode = `import { init } from '@module-federation/enhanced/runtime';
|
24
24
|
|
25
25
|
fetch('${manifestPath}')
|
26
26
|
.then((res) => res.json())
|
27
|
-
.then(
|
27
|
+
.then((remotes: Record<string, string>) => Object.entries(remotes).map(([name, entry]) => ({ name,entry})))
|
28
|
+
.then(remotes => init({name: '${options.appName}', remotes}))
|
28
29
|
.then(() => ${bootstrapImportCode});`;
|
29
30
|
tree.write(mainFilePath, fetchMFManifestCode);
|
30
31
|
}
|
@@ -19,10 +19,11 @@ async function setupMf(tree, rawOptions) {
|
|
19
19
|
(0, lib_1.removeDeadCodeFromRemote)(tree, options);
|
20
20
|
(0, lib_1.setupTspathForRemote)(tree, options);
|
21
21
|
if (!options.skipPackageJson) {
|
22
|
-
installTask = (0, devkit_1.addDependenciesToPackageJson)(tree, {
|
22
|
+
installTask = (0, devkit_1.addDependenciesToPackageJson)(tree, {
|
23
|
+
'@module-federation/enhanced': versions_1.moduleFederationEnhancedVersion,
|
24
|
+
}, {
|
23
25
|
'@nx/web': versions_1.nxVersion,
|
24
26
|
'@nx/webpack': versions_1.nxVersion,
|
25
|
-
'@module-federation/enhanced': versions_1.moduleFederationEnhancedVersion,
|
26
27
|
});
|
27
28
|
}
|
28
29
|
}
|
@@ -24,10 +24,10 @@ async function addJest(tree, options) {
|
|
24
24
|
const contents = tree.read(setupFile, 'utf-8');
|
25
25
|
tree.write(setupFile, `// @ts-expect-error https://thymikee.github.io/jest-preset-angular/docs/getting-started/test-environment
|
26
26
|
globalThis.ngJest = {
|
27
|
-
testEnvironmentOptions: {
|
28
|
-
|
29
|
-
|
30
|
-
},
|
27
|
+
testEnvironmentOptions: {
|
28
|
+
errorOnUnknownElements: true,
|
29
|
+
errorOnUnknownProperties: true,
|
30
|
+
},
|
31
31
|
};
|
32
32
|
${contents}`);
|
33
33
|
}
|
@@ -0,0 +1,49 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.addVitest = addVitest;
|
4
|
+
const devkit_1 = require("@nx/devkit");
|
5
|
+
const versions_1 = require("../../utils/versions");
|
6
|
+
async function addVitest(tree, options) {
|
7
|
+
if (!options.skipPackageJson) {
|
8
|
+
(0, devkit_1.addDependenciesToPackageJson)(tree, {}, {
|
9
|
+
'@analogjs/vitest-angular': versions_1.analogVitestAngular,
|
10
|
+
'@analogjs/vite-plugin-angular': versions_1.analogVitestAngular,
|
11
|
+
}, undefined, true);
|
12
|
+
}
|
13
|
+
const { createOrEditViteConfig, vitestGenerator } = (0, devkit_1.ensurePackage)('@nx/vite', versions_1.nxVersion);
|
14
|
+
const relativeTestSetupPath = (0, devkit_1.joinPathFragments)('src', 'test-setup.ts');
|
15
|
+
const setupFile = (0, devkit_1.joinPathFragments)(options.projectRoot, relativeTestSetupPath);
|
16
|
+
if (!tree.exists(setupFile)) {
|
17
|
+
tree.write(setupFile, `import '@analogjs/vitest-angular/setup-zone';
|
18
|
+
|
19
|
+
import {
|
20
|
+
BrowserDynamicTestingModule,
|
21
|
+
platformBrowserDynamicTesting,
|
22
|
+
} from '@angular/platform-browser-dynamic/testing';
|
23
|
+
import { getTestBed } from '@angular/core/testing';
|
24
|
+
|
25
|
+
getTestBed().initTestEnvironment(
|
26
|
+
BrowserDynamicTestingModule,
|
27
|
+
platformBrowserDynamicTesting()
|
28
|
+
);
|
29
|
+
`);
|
30
|
+
await vitestGenerator(tree, {
|
31
|
+
project: options.name,
|
32
|
+
uiFramework: 'none',
|
33
|
+
skipViteConfig: true,
|
34
|
+
testEnvironment: 'jsdom',
|
35
|
+
coverageProvider: 'v8',
|
36
|
+
addPlugin: false,
|
37
|
+
});
|
38
|
+
createOrEditViteConfig(tree, {
|
39
|
+
project: options.name,
|
40
|
+
includeLib: false,
|
41
|
+
includeVitest: true,
|
42
|
+
inSourceTests: false,
|
43
|
+
imports: [`import angular from '@analogjs/vite-plugin-angular'`],
|
44
|
+
plugins: ['angular()'],
|
45
|
+
setupFile: relativeTestSetupPath,
|
46
|
+
useEsmExtension: true,
|
47
|
+
}, true);
|
48
|
+
}
|
49
|
+
}
|
@@ -4,8 +4,8 @@ type LatestPackageVersionNames = Exclude<keyof typeof latestVersions, 'nxVersion
|
|
4
4
|
type CompatPackageVersionNames = LatestPackageVersionNames | 'ngUniversalVersion';
|
5
5
|
export type PackageVersionNames = LatestPackageVersionNames | CompatPackageVersionNames;
|
6
6
|
export type VersionMap = {
|
7
|
-
angularV16: Record<Exclude<CompatPackageVersionNames, 'typescriptEslintVersion'>, string>;
|
8
|
-
angularV17: Record<Exclude<CompatPackageVersionNames, 'ngUniversalVersion' | 'typescriptEslintVersion'>, string>;
|
7
|
+
angularV16: Record<Exclude<CompatPackageVersionNames, 'analogVitestAngular' | 'typescriptEslintVersion'>, string>;
|
8
|
+
angularV17: Record<Exclude<CompatPackageVersionNames, 'analogVitestAngular' | 'ngUniversalVersion' | 'typescriptEslintVersion'>, string>;
|
9
9
|
};
|
10
10
|
export type PackageLatestVersions = Record<LatestPackageVersionNames, string>;
|
11
11
|
export type PackageCompatVersions = VersionMap[SupportedVersions];
|
@@ -5,6 +5,7 @@ var UnitTestRunner;
|
|
5
5
|
(function (UnitTestRunner) {
|
6
6
|
UnitTestRunner["Jest"] = "jest";
|
7
7
|
UnitTestRunner["None"] = "none";
|
8
|
+
UnitTestRunner["Vitest"] = "vitest";
|
8
9
|
})(UnitTestRunner || (exports.UnitTestRunner = UnitTestRunner = {}));
|
9
10
|
var E2eTestRunner;
|
10
11
|
(function (E2eTestRunner) {
|
package/src/utils/versions.d.ts
CHANGED
@@ -13,7 +13,7 @@ export declare const expressVersion = "~4.18.2";
|
|
13
13
|
export declare const typesExpressVersion = "4.17.14";
|
14
14
|
export declare const browserSyncVersion = "^3.0.0";
|
15
15
|
export declare const moduleFederationNodeVersion = "~2.5.0";
|
16
|
-
export declare const moduleFederationEnhancedVersion = "0.6.
|
16
|
+
export declare const moduleFederationEnhancedVersion = "0.6.9";
|
17
17
|
export declare const angularEslintVersion = "^18.3.0";
|
18
18
|
export declare const typescriptEslintVersion = "^7.16.0";
|
19
19
|
export declare const tailwindVersion = "^3.0.2";
|
@@ -24,4 +24,5 @@ export declare const tsNodeVersion = "10.9.1";
|
|
24
24
|
export declare const jestPresetAngularVersion = "~14.1.0";
|
25
25
|
export declare const typesNodeVersion = "18.16.9";
|
26
26
|
export declare const jasmineMarblesVersion = "^0.9.2";
|
27
|
+
export declare const analogVitestAngular = "~1.9.1";
|
27
28
|
export declare const jsoncEslintParserVersion = "^2.1.0";
|
package/src/utils/versions.js
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
"use strict";
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
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;
|
3
|
+
exports.jsoncEslintParserVersion = exports.analogVitestAngular = 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
5
|
exports.angularVersion = '~18.2.0';
|
6
6
|
exports.angularDevkitVersion = '~18.2.0';
|
@@ -16,7 +16,7 @@ exports.expressVersion = '~4.18.2';
|
|
16
16
|
exports.typesExpressVersion = '4.17.14';
|
17
17
|
exports.browserSyncVersion = '^3.0.0';
|
18
18
|
exports.moduleFederationNodeVersion = '~2.5.0';
|
19
|
-
exports.moduleFederationEnhancedVersion = '0.6.
|
19
|
+
exports.moduleFederationEnhancedVersion = '0.6.9';
|
20
20
|
exports.angularEslintVersion = '^18.3.0';
|
21
21
|
exports.typescriptEslintVersion = '^7.16.0';
|
22
22
|
exports.tailwindVersion = '^3.0.2';
|
@@ -27,4 +27,5 @@ exports.tsNodeVersion = '10.9.1';
|
|
27
27
|
exports.jestPresetAngularVersion = '~14.1.0';
|
28
28
|
exports.typesNodeVersion = '18.16.9';
|
29
29
|
exports.jasmineMarblesVersion = '^0.9.2';
|
30
|
+
exports.analogVitestAngular = '~1.9.1';
|
30
31
|
exports.jsoncEslintParserVersion = '^2.1.0';
|