@module-federation/node 0.13.1 → 0.14.1-beta.0

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/CHANGELOG.md CHANGED
@@ -2,6 +2,56 @@
2
2
 
3
3
  This file was generated using [@jscutlery/semver](https://github.com/jscutlery/semver).
4
4
 
5
+ ## [0.14.1-beta.0](https://github.com/module-federation/nextjs-mf/compare/node-0.14.0...node-0.14.1-beta.0) (2023-04-28)
6
+
7
+
8
+ ### Features
9
+
10
+ * Improve module chunk connections ([#802](https://github.com/module-federation/nextjs-mf/issues/802)) ([ce0bd7b](https://github.com/module-federation/nextjs-mf/commit/ce0bd7b16e080f712e6db0bdcd3955a8167c274f)), closes [#803](https://github.com/module-federation/nextjs-mf/issues/803) [#808](https://github.com/module-federation/nextjs-mf/issues/808) [#811](https://github.com/module-federation/nextjs-mf/issues/811)
11
+ * release to npm with next tag to not ruine latest one ([#763](https://github.com/module-federation/nextjs-mf/issues/763)) ([f2d199b](https://github.com/module-federation/nextjs-mf/commit/f2d199b3b3fbbd428514b1ce1f139efc82f7fff0))
12
+
13
+
14
+
15
+ ## [0.13.1](https://github.com/module-federation/nextjs-mf/compare/node-0.13.1-beta.0...node-0.13.1) (2023-04-19)
16
+
17
+
18
+
19
+ ## [0.13.1-beta.0](https://github.com/module-federation/nextjs-mf/compare/node-0.13.0...node-0.13.1-beta.0) (2023-04-19)
20
+
21
+
22
+ ### Bug Fixes
23
+
24
+ * use container proxy on script VM instead of host resolver point ([2929d0f](https://github.com/module-federation/nextjs-mf/commit/2929d0f64d4b8edf268af5ca83f807a02b121861))
25
+ * get delegates working ([#527](https://github.com/module-federation/nextjs-mf/issues/527)) ([7655568](https://github.com/module-federation/nextjs-mf/commit/7655568fcef8dbfda40573deb5d3d029c101074c))
26
+ * improved asset pipeline ([63928b2](https://github.com/module-federation/nextjs-mf/commit/63928b28150c2c4e3adb9e14fb7aa54f5cf1578d))
27
+ * peer dependencies metadata ([d3a2ed0](https://github.com/module-federation/nextjs-mf/commit/d3a2ed0e378b59afdeb632d1e2e0290f05cbca19))
28
+ * solve externalization ([49f52e5](https://github.com/module-federation/nextjs-mf/commit/49f52e53ddddc990d31e6aa510d67dc0552a9d9a))
29
+ * use EntryPlugin for injection of remotes ([e522c5a](https://github.com/module-federation/nextjs-mf/commit/e522c5ad2b7adcbd6c39f9c5fdb7a3e418277b7a))
30
+
31
+
32
+ ### Features
33
+
34
+ * delegate module support ([5061d3d](https://github.com/module-federation/nextjs-mf/commit/5061d3d64d7d83dbb25b4ef2378d434545186cb1))
35
+ * chunk flushing in delegates ([5e2375f](https://github.com/module-federation/nextjs-mf/commit/5e2375f598437803105ac4bc2237f6b652554d00))
36
+ * delegate module support ([8dd154c](https://github.com/module-federation/nextjs-mf/commit/8dd154c261b34183b12250ce204904cd3e085658))
37
+ * delegate module support ([d242163](https://github.com/module-federation/nextjs-mf/commit/d24216324183bfec5c7ba672ba6da05679f67809))
38
+ * delegates part two ([1be2686](https://github.com/module-federation/nextjs-mf/commit/1be2686624798a7df9f447b48279294985b3f592))
39
+ * improve chunk correlation ([22d8afc](https://github.com/module-federation/nextjs-mf/commit/22d8afccff101044fcdeba390656950dbc6eafed))
40
+ * new chunk flushing system for exposed modules ([97a75d8](https://github.com/module-federation/nextjs-mf/commit/97a75d8702f2ddc5e12cff2ac4d24aca1df6f990))
41
+ * prepare for v7 ([7bc4b3b](https://github.com/module-federation/nextjs-mf/commit/7bc4b3bd44e0926a52d6a9cbe56f0c4d7bb700ae))
42
+
43
+
44
+ ### BREAKING CHANGES
45
+
46
+ * safety breaking change note
47
+ BREAKING_CHANGE: safety breaking change note
48
+
49
+
50
+
51
+ # [0.14.0](https://github.com/module-federation/nextjs-mf/compare/node-0.13.0...node-0.14.0) (2023-04-19)
52
+
53
+
54
+
5
55
  ## [0.13.1](https://github.com/module-federation/nextjs-mf/compare/node-0.13.1-beta.0...node-0.13.1) (2023-04-19)
6
56
 
7
57
  ### Dependency Updates
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "public": true,
3
3
  "name": "@module-federation/node",
4
- "version": "0.13.1",
4
+ "version": "0.14.1-beta.0",
5
5
  "type": "commonjs",
6
6
  "main": "src/index.js",
7
7
  "exports": {
@@ -33,8 +33,9 @@
33
33
  "license": "MIT",
34
34
  "dependencies": {
35
35
  "encoding": "0.1.13",
36
- "node-fetch": "2.6.7",
37
- "@module-federation/utilities": "1.5.1"
36
+ "node-fetch": "2.6.9",
37
+ "@module-federation/utilities": "1.7.1",
38
+ "webpack-sources": "3.2.3"
38
39
  },
39
40
  "peerDependencies": {
40
41
  "next": "^12||^13",
@@ -1,2 +1,6 @@
1
- export const usedChunks: Set<string>;
1
+ /**
2
+ * Initialize usedChunks and share it globally.
3
+ * @type {Set}
4
+ */
5
+ export const usedChunks: Set<any>;
2
6
  export function flushChunks(): Promise<any[]>;
@@ -1,97 +1,139 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.flushChunks = exports.usedChunks = void 0;
4
+ /* eslint-disable no-undef */
5
+ /**
6
+ * Initialize usedChunks and share it globally.
7
+ * @type {Set}
8
+ */
4
9
  exports.usedChunks = global.usedChunks || new Set();
5
10
  global.usedChunks = exports.usedChunks;
6
- const flushChunks = async () => {
7
- let hostStats = {};
11
+ /**
12
+ * Load hostStats from the JSON file.
13
+ * @returns {object} hostStats - An object containing host stats data.
14
+ */
15
+ const loadHostStats = () => {
8
16
  try {
9
- hostStats = __non_webpack_require__('../host-stats.json');
17
+ return __non_webpack_require__('../federated-stats.json');
10
18
  }
11
19
  catch (e) {
20
+ return {};
12
21
  }
13
- let shareMap = {};
22
+ };
23
+ /**
24
+ * Create a shareMap based on the loaded modules.
25
+ * @returns {object} shareMap - An object containing the shareMap data.
26
+ */
27
+ const createShareMap = () => {
28
+ // Check if __webpack_share_scopes__ is defined and has a default property
14
29
  if (__webpack_share_scopes__?.default) {
15
- shareMap = Object.keys(__webpack_share_scopes__.default).reduce((acc, key) => {
16
- const loadedModules = Object.values(__webpack_share_scopes__.default[key]).filter((sharedModule) => {
17
- return sharedModule.loaded;
18
- }).map((sharedModule) => {
19
- return sharedModule.from;
20
- });
30
+ // Reduce the keys of the default property to create the share map
31
+ return Object.keys(__webpack_share_scopes__.default).reduce((acc, key) => {
32
+ // Get the loaded modules for the current key
33
+ const loadedModules = Object.values(__webpack_share_scopes__.default[key])
34
+ // Filter out the modules that are not loaded
35
+ .filter((sharedModule) => sharedModule.loaded)
36
+ // Map the filtered modules to their 'from' properties
37
+ .map((sharedModule) => sharedModule.from);
38
+ // If there are any loaded modules, add them to the accumulator object
21
39
  if (loadedModules.length > 0) {
22
40
  acc[key] = loadedModules;
23
41
  }
42
+ // Return the accumulator object for the next iteration
24
43
  return acc;
25
44
  }, {});
26
45
  }
27
- const allFlushed = await Promise.all(Array.from(exports.usedChunks).map(async (chunk) => {
28
- const chunks = new Set();
29
- const [remote, request] = chunk.split('->');
30
- if (!global.__remote_scope__._config[remote]) {
31
- return;
32
- }
33
- // fetch the json file
46
+ // If __webpack_share_scopes__ is not defined or doesn't have a default property, return an empty object
47
+ return {};
48
+ };
49
+ /**
50
+ * Process a single chunk and return an array of updated chunks.
51
+ * @param {string} chunk - A chunk string containing remote and request data.
52
+ * @param {object} shareMap - An object containing the shareMap data.
53
+ * @param {object} hostStats - An object containing host stats data.
54
+ * @returns {Promise<Array>} A promise that resolves to an array of updated chunks.
55
+ */
56
+ const processChunk = async (chunk, shareMap, hostStats) => {
57
+ // Create a set to store the chunks
58
+ const chunks = new Set();
59
+ // Split the chunk string into remote and request
60
+ const [remote, request] = chunk.split('->');
61
+ // If the remote is not defined in the global config, return
62
+ if (!global.__remote_scope__._config[remote]) {
63
+ return;
64
+ }
65
+ try {
66
+ // Extract the remote name from the URL
67
+ const remoteName = new URL(global.__remote_scope__._config[remote]).pathname
68
+ .split('/')
69
+ .pop();
70
+ // Construct the stats file URL from the remote config
71
+ const statsFile = global.__remote_scope__._config[remote]
72
+ .replace(remoteName, 'federated-stats.json')
73
+ .replace('ssr', 'chunks');
74
+ let stats = {};
34
75
  try {
35
- const remoteName = new URL(global.__remote_scope__._config[remote]).pathname.split('/').pop();
36
- const statsFile = global.__remote_scope__._config[remote].replace(remoteName, 'federated-stats.json').replace('ssr', 'chunks');
37
- let stats = {};
38
- try {
39
- await fetch(global.__remote_scope__._config[remote]);
40
- stats = await fetch(statsFile).then((res) => res.json());
41
- }
42
- catch (e) {
43
- console.error("flush errer", e);
44
- }
45
- chunks.add(global.__remote_scope__._config[remote].replace('ssr', 'chunks'));
46
- const [prefix] = global.__remote_scope__._config[remote].split('static/');
47
- if (stats.federatedModules) {
48
- // console.log(shareMap)
49
- stats.federatedModules.forEach((modules) => {
50
- if (modules.exposes?.[request]) {
51
- modules.exposes[request].forEach((chunk) => {
52
- Object.values(chunk).forEach((chunk) => {
53
- if (chunk.files)
54
- chunk.files.forEach((file) => {
55
- console.log('adding', prefix + file);
56
- chunks.add(prefix + file);
57
- });
58
- if (chunk.requiredModules) {
59
- console.log('chunk.requiredModules', request, chunk.requiredModules);
60
- chunk.requiredModules.forEach((module) => {
61
- console.log('shareMap[module]', module, shareMap[module]);
62
- if (shareMap[module]) {
63
- if (shareMap[module][0].startsWith('host__')) {
64
- console.log('host', hostStats);
65
- }
66
- console.log('shareMap[module]', module, shareMap[module]);
67
- // shareMap[module].forEach((file) => {
68
- // chunks.add(prefix + file)
69
- // })
70
- }
71
- });
72
- }
73
- });
74
- });
75
- }
76
- // todo: come back to this later
77
- // if(modules.sharedModules?.[0]) {
78
- // const sharedModules = modules.sharedModules.find((sharedModule) => {
79
- // return sharedModule.provides.find((provide) => {return provide.shareKey === request})
80
- // });
81
- // sharedModules.chunks.forEach((chunk) => {
82
- // chunks.add(prefix + chunk);
83
- // });
84
- // }
85
- });
86
- }
87
- return Array.from(chunks);
76
+ // Fetch the remote config and stats file
77
+ await fetch(global.__remote_scope__._config[remote]);
78
+ stats = await fetch(statsFile).then((res) => res.json());
88
79
  }
89
80
  catch (e) {
90
- console.log(e);
81
+ console.error('flush error', e);
82
+ }
83
+ // Add the main chunk to the chunks set
84
+ chunks.add(global.__remote_scope__._config[remote].replace('ssr', 'chunks'));
85
+ // Extract the prefix from the remote config
86
+ const [prefix] = global.__remote_scope__._config[remote].split('static/');
87
+ // Process federated modules from the stats object
88
+ if (stats.federatedModules) {
89
+ stats.federatedModules.forEach((modules) => {
90
+ // Process exposed modules
91
+ if (modules.exposes?.[request]) {
92
+ modules.exposes[request].forEach((chunk) => {
93
+ Object.values(chunk).forEach((chunk) => {
94
+ // Add files to the chunks set
95
+ if (chunk.files) {
96
+ chunk.files.forEach((file) => {
97
+ chunks.add(prefix + file);
98
+ });
99
+ }
100
+ // Process required modules
101
+ if (chunk.requiredModules) {
102
+ chunk.requiredModules.forEach((module) => {
103
+ // Check if the module is in the shareMap
104
+ if (shareMap[module]) {
105
+ // If the module is from the host, log the host stats
106
+ if (shareMap[module][0].startsWith('host__')) {
107
+ console.log('host', hostStats);
108
+ }
109
+ }
110
+ });
111
+ }
112
+ });
113
+ });
114
+ }
115
+ });
91
116
  }
92
- }));
117
+ // Return the array of chunks
118
+ return Array.from(chunks);
119
+ }
120
+ catch (e) {
121
+ console.log(e);
122
+ }
123
+ };
124
+ /**
125
+ * Flush the chunks and return a deduplicated array of chunks.
126
+ * @returns {Promise<Array>} A promise that resolves to an array of deduplicated chunks.
127
+ */
128
+ const flushChunks = async () => {
129
+ const hostStats = loadHostStats();
130
+ const shareMap = createShareMap();
131
+ const allFlushed = await Promise.all(Array.from(exports.usedChunks).map(async (chunk) => processChunk(chunk, shareMap, hostStats)));
132
+ // Deduplicate the chunks array
93
133
  const dedupe = Array.from(new Set([...allFlushed.flat()]));
134
+ // Clear usedChunks
94
135
  exports.usedChunks.clear();
136
+ // Filter out any undefined or null values
95
137
  return dedupe.filter(Boolean);
96
138
  };
97
139
  exports.flushChunks = flushChunks;
@@ -1 +1 @@
1
- {"version":3,"file":"flush-chunks.js","sourceRoot":"","sources":["../../../../../packages/node/src/utils/flush-chunks.js"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"flush-chunks.js","sourceRoot":"","sources":["../../../../../packages/node/src/utils/flush-chunks.js"],"names":[],"mappings":"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"}