@nx/angular 19.7.0-canary.20240904-f39b995 → 19.7.0-canary.20240906-a3c2db8

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/migrations.json CHANGED
@@ -2122,6 +2122,19 @@
2122
2122
  "alwaysAddToPackageJson": false
2123
2123
  }
2124
2124
  }
2125
+ },
2126
+ "19.7.0": {
2127
+ "version": "19.7.0-beta.0",
2128
+ "packages": {
2129
+ "@module-federation/enhanced": {
2130
+ "version": "~0.6.0",
2131
+ "alwaysAddToPackageJson": false
2132
+ },
2133
+ "@module-federation/node": {
2134
+ "version": "~2.5.0",
2135
+ "alwaysAddToPackageJson": false
2136
+ }
2137
+ }
2125
2138
  }
2126
2139
  }
2127
2140
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nx/angular",
3
- "version": "19.7.0-canary.20240904-f39b995",
3
+ "version": "19.7.0-canary.20240906-a3c2db8",
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": {
@@ -78,15 +78,15 @@
78
78
  "tslib": "^2.3.0",
79
79
  "webpack-merge": "^5.8.0",
80
80
  "webpack": "^5.88.0",
81
- "@module-federation/enhanced": "~0.2.3",
82
- "@nx/devkit": "19.7.0-canary.20240904-f39b995",
83
- "@nx/js": "19.7.0-canary.20240904-f39b995",
84
- "@nx/eslint": "19.7.0-canary.20240904-f39b995",
85
- "@nx/webpack": "19.7.0-canary.20240904-f39b995",
86
- "@nx/web": "19.7.0-canary.20240904-f39b995",
87
- "@nx/workspace": "19.7.0-canary.20240904-f39b995",
81
+ "@module-federation/enhanced": "~0.6.0",
82
+ "@nx/devkit": "19.7.0-canary.20240906-a3c2db8",
83
+ "@nx/js": "19.7.0-canary.20240906-a3c2db8",
84
+ "@nx/eslint": "19.7.0-canary.20240906-a3c2db8",
85
+ "@nx/webpack": "19.7.0-canary.20240906-a3c2db8",
86
+ "@nx/web": "19.7.0-canary.20240906-a3c2db8",
87
+ "@nx/workspace": "19.7.0-canary.20240906-a3c2db8",
88
88
  "piscina": "^4.4.0",
89
- "@nrwl/angular": "19.7.0-canary.20240904-f39b995"
89
+ "@nrwl/angular": "19.7.0-canary.20240906-a3c2db8"
90
90
  },
91
91
  "peerDependencies": {
92
92
  "@angular-devkit/build-angular": ">= 16.0.0 < 19.0.0",
@@ -33,9 +33,7 @@ function buildServerAppWithCustomWebpackConfiguration(options, context, pathToWe
33
33
  // Therefore, if the build is an MF Server build, remove the auto-includes from
34
34
  // the base webpack config from Angular
35
35
  let mergedConfig = await (0, webpack_1.mergeCustomWebpackConfig)(baseWebpackConfig, pathToWebpackConfig, options, context.target);
36
- if (mergedConfig.plugins
37
- .map((p) => p.constructor.name)
38
- .includes('UniversalFederationPlugin')) {
36
+ if (mergedConfig.target === 'async-node') {
39
37
  mergedConfig.entry.main = mergedConfig.entry.main.filter((m) => !m.startsWith('@angular/platform-server/init'));
40
38
  mergedConfig.module.rules = mergedConfig.module.rules.filter((m) => !m.loader
41
39
  ? true
@@ -1,9 +1,4 @@
1
1
  import { type ExecutorContext } from '@nx/devkit';
2
2
  import { type Schema } from '../schema';
3
3
  import type { StaticRemotesConfig } from '@nx/webpack/src/utils/module-federation/parse-static-remotes-config';
4
- export declare function startStaticRemotes(ssrStaticRemotesConfig: StaticRemotesConfig, context: ExecutorContext, options: Schema): AsyncGenerator<{
5
- success: boolean;
6
- baseUrl: string;
7
- }, {
8
- success: boolean;
9
- }, unknown>;
4
+ export declare function startStaticRemotes(ssrStaticRemotesConfig: StaticRemotesConfig, context: ExecutorContext, options: Schema): AsyncIterable<unknown>;
@@ -6,9 +6,13 @@ const devkit_1 = require("@nx/devkit");
6
6
  const file_server_impl_1 = tslib_1.__importDefault(require("@nx/web/src/executors/file-server/file-server.impl"));
7
7
  const path_1 = require("path");
8
8
  const fs_1 = require("fs");
9
+ const async_iterable_1 = require("@nx/devkit/src/utils/async-iterable");
9
10
  function startStaticRemotes(ssrStaticRemotesConfig, context, options) {
10
11
  if (ssrStaticRemotesConfig.remotes.length === 0) {
11
- return;
12
+ return (0, async_iterable_1.createAsyncIterable)(({ next, done }) => {
13
+ next({ success: true });
14
+ done();
15
+ });
12
16
  }
13
17
  // The directories are usually generated with /browser and /server suffixes so we need to copy them to a common directory
14
18
  const commonOutputDirectory = (0, path_1.join)(devkit_1.workspaceRoot, 'tmp/static-remotes');
@@ -1,4 +1,4 @@
1
1
  import { type ExecutorContext } from '@nx/devkit';
2
2
  import type { Schema } from './schema';
3
- export declare function moduleFederationSsrDevServerExecutor(schema: Schema, context: ExecutorContext): AsyncGenerator<any, any, undefined>;
3
+ export declare function moduleFederationSsrDevServerExecutor(schema: Schema, context: ExecutorContext): AsyncGenerator<unknown, any, undefined>;
4
4
  export default moduleFederationSsrDevServerExecutor;
@@ -74,7 +74,7 @@ async function* moduleFederationSsrDevServerExecutor(schema, context) {
74
74
  ...v,
75
75
  baseUrl: undefined,
76
76
  }));
77
- return yield* (0, async_iterable_1.combineAsyncIterables)(removeBaseUrlEmission(currIter), ...devRemotes.map(removeBaseUrlEmission), ...(staticRemotes ? [removeBaseUrlEmission(staticRemotes)] : []), (0, async_iterable_1.createAsyncIterable)(async ({ next, done }) => {
77
+ const combined = (0, async_iterable_1.combineAsyncIterables)(removeBaseUrlEmission(staticRemotes), ...(devRemotes ? devRemotes.map(removeBaseUrlEmission) : []), (0, async_iterable_1.createAsyncIterable)(async ({ next, done }) => {
78
78
  if (!options.isInitialHost) {
79
79
  done();
80
80
  return;
@@ -94,6 +94,7 @@ async function* moduleFederationSsrDevServerExecutor(schema, context) {
94
94
  retryDelay: 2500,
95
95
  host: 'localhost',
96
96
  })));
97
+ next({ success: true, baseUrl: `http://localhost:${options.port}` });
97
98
  }
98
99
  catch (error) {
99
100
  throw new Error(`Failed to start remotes. Check above for any errors.`, {
@@ -104,5 +105,15 @@ async function* moduleFederationSsrDevServerExecutor(schema, context) {
104
105
  done();
105
106
  }
106
107
  }));
108
+ let refs = 2 + (devRemotes?.length ?? 0);
109
+ for await (const result of combined) {
110
+ if (result.success === false)
111
+ throw new Error('Remotes failed to start');
112
+ if (result.success)
113
+ refs--;
114
+ if (refs === 0)
115
+ break;
116
+ }
117
+ return yield* currIter;
107
118
  }
108
119
  exports.default = moduleFederationSsrDevServerExecutor;
@@ -22,6 +22,7 @@ function addMfEnvToTargetDefaultInputs(tree) {
22
22
  }
23
23
  if (!mfEnvVarExists) {
24
24
  nxJson.targetDefaults[webpackExecutor].inputs.push({ env: mfEnvVar });
25
- (0, devkit_1.updateNxJson)(tree, nxJson);
26
25
  }
26
+ nxJson.targetDefaults[webpackExecutor].cache = true;
27
+ (0, devkit_1.updateNxJson)(tree, nxJson);
27
28
  }
@@ -12,7 +12,7 @@ async function withModuleFederationForSSR(options, configOverride) {
12
12
  return (config) => {
13
13
  const updatedConfig = {
14
14
  ...(config ?? {}),
15
- target: false,
15
+ target: 'async-node',
16
16
  output: {
17
17
  ...(config.output ?? {}),
18
18
  uniqueName: options.name,
@@ -30,7 +30,7 @@ async function withModuleFederationForSSR(options, configOverride) {
30
30
  },
31
31
  plugins: [
32
32
  ...(config.plugins ?? []),
33
- new (require('@module-federation/node').UniversalFederationPlugin)({
33
+ new (require('@module-federation/enhanced').ModuleFederationPlugin)({
34
34
  name: options.name,
35
35
  filename: 'remoteEntry.js',
36
36
  exposes: options.exposes,
@@ -38,10 +38,6 @@ async function withModuleFederationForSSR(options, configOverride) {
38
38
  shared: {
39
39
  ...sharedDependencies,
40
40
  },
41
- library: {
42
- type: 'commonjs-module',
43
- },
44
- isServer: true,
45
41
  /**
46
42
  * Apply user-defined config override
47
43
  */
@@ -50,9 +46,14 @@ async function withModuleFederationForSSR(options, configOverride) {
50
46
  !options.disableNxRuntimeLibraryControlPlugin
51
47
  ? [
52
48
  ...(configOverride?.runtimePlugins ?? []),
49
+ require.resolve('@module-federation/node/runtimePlugin'),
53
50
  require.resolve('@nx/webpack/src/utils/module-federation/plugins/runtime-library-control.plugin.js'),
54
51
  ]
55
- : configOverride?.runtimePlugins,
52
+ : [
53
+ ...(configOverride?.runtimePlugins ?? []),
54
+ require.resolve('@module-federation/node/runtimePlugin'),
55
+ ],
56
+ virtualRuntimeEntry: true,
56
57
  }, {}),
57
58
  sharedLibraries.getReplacementPlugin(),
58
59
  ],
@@ -55,6 +55,7 @@ async function withModuleFederation(options, configOverride) {
55
55
  require.resolve('@nx/webpack/src/utils/module-federation/plugins/runtime-library-control.plugin.js'),
56
56
  ]
57
57
  : configOverride?.runtimePlugins,
58
+ virtualRuntimeEntry: true,
58
59
  }),
59
60
  sharedLibraries.getReplacementPlugin(),
60
61
  ],
@@ -12,8 +12,8 @@ export declare const typesCorsVersion = "~2.8.5";
12
12
  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
- export declare const moduleFederationNodeVersion = "~2.4.0";
16
- export declare const moduleFederationEnhancedVersion = "~0.2.3";
15
+ export declare const moduleFederationNodeVersion = "~2.5.0";
16
+ export declare const moduleFederationEnhancedVersion = "~0.6.0";
17
17
  export declare const angularEslintVersion = "^18.0.1";
18
18
  export declare const typescriptEslintVersion = "^7.16.0";
19
19
  export declare const tailwindVersion = "^3.0.2";
@@ -15,8 +15,8 @@ exports.typesCorsVersion = '~2.8.5';
15
15
  exports.expressVersion = '~4.18.2';
16
16
  exports.typesExpressVersion = '4.17.14';
17
17
  exports.browserSyncVersion = '^3.0.0';
18
- exports.moduleFederationNodeVersion = '~2.4.0';
19
- exports.moduleFederationEnhancedVersion = '~0.2.3';
18
+ exports.moduleFederationNodeVersion = '~2.5.0';
19
+ exports.moduleFederationEnhancedVersion = '~0.6.0';
20
20
  exports.angularEslintVersion = '^18.0.1';
21
21
  exports.typescriptEslintVersion = '^7.16.0';
22
22
  exports.tailwindVersion = '^3.0.2';