@module-federation/node 2.1.0-canary.6 → 2.1.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.
Files changed (76) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +191 -0
  3. package/dist/jest.config.js.map +1 -0
  4. package/dist/package.json +78 -0
  5. package/dist/src/filesystem/stratagies.d.ts +18 -0
  6. package/{src → dist/src}/filesystem/stratagies.js +22 -9
  7. package/dist/src/filesystem/stratagies.js.map +1 -0
  8. package/{src → dist/src}/index.d.ts +0 -2
  9. package/{src → dist/src}/index.js +1 -5
  10. package/dist/src/index.js.map +1 -0
  11. package/{src → dist/src}/plugins/AutomaticPublicPathPlugin.d.ts +1 -1
  12. package/{src → dist/src}/plugins/AutomaticPublicPathPlugin.js +3 -3
  13. package/dist/src/plugins/AutomaticPublicPathPlugin.js.map +1 -0
  14. package/dist/src/plugins/ChunkCorrelationPlugin.js.map +1 -0
  15. package/{src → dist/src}/plugins/CommonJsChunkLoadingPlugin.js +24 -23
  16. package/dist/src/plugins/CommonJsChunkLoadingPlugin.js.map +1 -0
  17. package/{src → dist/src}/plugins/DynamicFilesystemChunkLoadingRuntimeModule.d.ts +1 -1
  18. package/{src → dist/src}/plugins/DynamicFilesystemChunkLoadingRuntimeModule.js +28 -56
  19. package/dist/src/plugins/DynamicFilesystemChunkLoadingRuntimeModule.js.map +1 -0
  20. package/dist/src/plugins/EntryChunkTrackerPlugin.d.ts +13 -0
  21. package/dist/src/plugins/EntryChunkTrackerPlugin.js +41 -0
  22. package/dist/src/plugins/EntryChunkTrackerPlugin.js.map +1 -0
  23. package/{src → dist/src}/plugins/NodeFederationPlugin.d.ts +0 -20
  24. package/dist/src/plugins/NodeFederationPlugin.js +79 -0
  25. package/dist/src/plugins/NodeFederationPlugin.js.map +1 -0
  26. package/{src → dist/src}/plugins/RemotePublicPathRuntimeModule.d.ts +1 -1
  27. package/dist/src/plugins/RemotePublicPathRuntimeModule.js +132 -0
  28. package/dist/src/plugins/RemotePublicPathRuntimeModule.js.map +1 -0
  29. package/{src → dist/src}/plugins/StreamingTargetPlugin.d.ts +2 -2
  30. package/{src → dist/src}/plugins/StreamingTargetPlugin.js.map +1 -1
  31. package/{src → dist/src}/plugins/UniversalFederationPlugin.d.ts +1 -0
  32. package/{src → dist/src}/plugins/UniversalFederationPlugin.js +7 -3
  33. package/dist/src/plugins/UniversalFederationPlugin.js.map +1 -0
  34. package/{src → dist/src}/plugins/webpackChunkUtilities.d.ts +1 -1
  35. package/{src → dist/src}/plugins/webpackChunkUtilities.js +70 -89
  36. package/dist/src/plugins/webpackChunkUtilities.js.map +1 -0
  37. package/dist/src/types/index.js.map +1 -0
  38. package/{src → dist/src}/utils/flush-chunks.d.ts +2 -1
  39. package/{src → dist/src}/utils/flush-chunks.js +43 -33
  40. package/dist/src/utils/flush-chunks.js.map +1 -0
  41. package/{src → dist/src}/utils/hot-reload.d.ts +3 -3
  42. package/{src → dist/src}/utils/hot-reload.js +59 -17
  43. package/dist/src/utils/hot-reload.js.map +1 -0
  44. package/dist/src/utils/index.js.map +1 -0
  45. package/package.json +22 -18
  46. package/jest.config.js.map +0 -1
  47. package/src/filesystem/stratagies.d.ts +0 -11
  48. package/src/filesystem/stratagies.js.map +0 -1
  49. package/src/index.js.map +0 -1
  50. package/src/plugins/AutomaticPublicPathPlugin.js.map +0 -1
  51. package/src/plugins/ChunkCorrelationPlugin.js.map +0 -1
  52. package/src/plugins/CommonJsChunkLoadingPlugin.js.map +0 -1
  53. package/src/plugins/DynamicFilesystemChunkLoadingRuntimeModule.js.map +0 -1
  54. package/src/plugins/NodeContainerPlugin.d.ts +0 -57
  55. package/src/plugins/NodeContainerPlugin.js +0 -105
  56. package/src/plugins/NodeContainerPlugin.js.map +0 -1
  57. package/src/plugins/NodeFederationPlugin.js +0 -127
  58. package/src/plugins/NodeFederationPlugin.js.map +0 -1
  59. package/src/plugins/RemotePublicPathRuntimeModule.js +0 -109
  60. package/src/plugins/RemotePublicPathRuntimeModule.js.map +0 -1
  61. package/src/plugins/UniversalFederationPlugin.js.map +0 -1
  62. package/src/plugins/webpackChunkUtilities.js.map +0 -1
  63. package/src/types/index.js.map +0 -1
  64. package/src/utils/flush-chunks.js.map +0 -1
  65. package/src/utils/hot-reload.js.map +0 -1
  66. package/src/utils/index.js.map +0 -1
  67. package/{jest.config.d.ts → dist/jest.config.d.ts} +0 -0
  68. package/{jest.config.js → dist/jest.config.js} +0 -0
  69. package/{src → dist/src}/plugins/ChunkCorrelationPlugin.d.ts +6 -6
  70. /package/{src → dist/src}/plugins/ChunkCorrelationPlugin.js +0 -0
  71. /package/{src → dist/src}/plugins/CommonJsChunkLoadingPlugin.d.ts +0 -0
  72. /package/{src → dist/src}/plugins/StreamingTargetPlugin.js +0 -0
  73. /package/{src → dist/src}/types/index.d.ts +0 -0
  74. /package/{src → dist/src}/types/index.js +0 -0
  75. /package/{src → dist/src}/utils/index.d.ts +0 -0
  76. /package/{src → dist/src}/utils/index.js +0 -0
@@ -1,7 +1,8 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.generateExternalInstallChunkCode = exports.generateInstallChunk = exports.generateLoadScript = exports.handleOnChunkLoad = exports.generateHmrManifestCode = exports.generateLoadingCode = exports.getInitialChunkIds = exports.generateHmrCode = void 0;
4
- const webpack_1 = require("webpack");
4
+ const normalize_webpack_path_1 = require("@module-federation/sdk/normalize-webpack-path");
5
+ const { RuntimeGlobals, Template } = require((0, normalize_webpack_path_1.normalizeWebpackPath)('webpack'));
5
6
  /**
6
7
  * Generates the hot module replacement (HMR) code.
7
8
  * @param {boolean} withHmr - Flag indicating whether HMR is enabled.
@@ -12,17 +13,17 @@ function generateHmrCode(withHmr, rootOutputDir) {
12
13
  if (!withHmr) {
13
14
  return '// no HMR';
14
15
  }
15
- return webpack_1.Template.asString([
16
+ return Template.asString([
16
17
  // Function to load updated chunk
17
18
  'function loadUpdateChunk(chunkId, updatedModulesList) {',
18
- webpack_1.Template.indent([
19
+ Template.indent([
19
20
  'return new Promise(function(resolve, reject) {',
20
- webpack_1.Template.indent([
21
+ Template.indent([
21
22
  // Construct filename for the updated chunk
22
- `var filename = require('path').join(__dirname, ${JSON.stringify(rootOutputDir)} + ${webpack_1.RuntimeGlobals.getChunkUpdateScriptFilename}(chunkId));`,
23
+ `var filename = require('path').join(__dirname, ${JSON.stringify(rootOutputDir)} + ${RuntimeGlobals.getChunkUpdateScriptFilename}(chunkId));`,
23
24
  // Read the updated chunk file
24
25
  "require('fs').readFile(filename, 'utf-8', function(err, content) {",
25
- webpack_1.Template.indent([
26
+ Template.indent([
26
27
  'if(err) return reject(err);',
27
28
  'var update = {};',
28
29
  // Execute the updated chunk in the current context
@@ -32,9 +33,9 @@ function generateHmrCode(withHmr, rootOutputDir) {
32
33
  'var runtime = update.runtime;',
33
34
  // Iterate over the updated modules
34
35
  'for(var moduleId in updatedModules) {',
35
- webpack_1.Template.indent([
36
- `if(${webpack_1.RuntimeGlobals.hasOwnProperty}(updatedModules, moduleId)) {`,
37
- webpack_1.Template.indent([
36
+ Template.indent([
37
+ `if(${RuntimeGlobals.hasOwnProperty}(updatedModules, moduleId)) {`,
38
+ Template.indent([
38
39
  `currentUpdate[moduleId] = updatedModules[moduleId];`,
39
40
  'if(updatedModulesList) updatedModulesList.push(moduleId);',
40
41
  ]),
@@ -51,19 +52,19 @@ function generateHmrCode(withHmr, rootOutputDir) {
51
52
  '}',
52
53
  '',
53
54
  // Replace placeholders in the HMR runtime code
54
- webpack_1.Template.getFunctionContent(
55
+ Template.getFunctionContent(
55
56
  // eslint-disable-next-line @typescript-eslint/no-var-requires
56
57
  require('webpack/lib/hmr/JavascriptHotModuleReplacement.runtime.js'))
57
58
  .replace(/\$key\$/g, 'readFileVm')
58
59
  .replace(/\$installedChunks\$/g, 'installedChunks')
59
60
  .replace(/\$loadUpdateChunk\$/g, 'loadUpdateChunk')
60
- .replace(/\$moduleCache\$/g, webpack_1.RuntimeGlobals.moduleCache)
61
- .replace(/\$moduleFactories\$/g, webpack_1.RuntimeGlobals.moduleFactories)
62
- .replace(/\$ensureChunkHandlers\$/g, webpack_1.RuntimeGlobals.ensureChunkHandlers)
63
- .replace(/\$hasOwnProperty\$/g, webpack_1.RuntimeGlobals.hasOwnProperty)
64
- .replace(/\$hmrModuleData\$/g, webpack_1.RuntimeGlobals.hmrModuleData)
65
- .replace(/\$hmrDownloadUpdateHandlers\$/g, webpack_1.RuntimeGlobals.hmrDownloadUpdateHandlers)
66
- .replace(/\$hmrInvalidateModuleHandlers\$/g, webpack_1.RuntimeGlobals.hmrInvalidateModuleHandlers),
61
+ .replace(/\$moduleCache\$/g, RuntimeGlobals.moduleCache)
62
+ .replace(/\$moduleFactories\$/g, RuntimeGlobals.moduleFactories)
63
+ .replace(/\$ensureChunkHandlers\$/g, RuntimeGlobals.ensureChunkHandlers)
64
+ .replace(/\$hasOwnProperty\$/g, RuntimeGlobals.hasOwnProperty)
65
+ .replace(/\$hmrModuleData\$/g, RuntimeGlobals.hmrModuleData)
66
+ .replace(/\$hmrDownloadUpdateHandlers\$/g, RuntimeGlobals.hmrDownloadUpdateHandlers)
67
+ .replace(/\$hmrInvalidateModuleHandlers\$/g, RuntimeGlobals.hmrInvalidateModuleHandlers),
67
68
  ]);
68
69
  }
69
70
  exports.generateHmrCode = generateHmrCode;
@@ -109,53 +110,49 @@ function generateLoadingCode(withLoading, fn, hasJsMatcher, rootOutputDir, remot
109
110
  if (!withLoading) {
110
111
  return '// no chunk loading';
111
112
  }
112
- return webpack_1.Template.asString([
113
+ return Template.asString([
113
114
  '// Dynamic filesystem chunk loading for javascript',
114
115
  `${fn}.readFileVm = function(chunkId, promises) {`,
115
116
  hasJsMatcher !== false
116
- ? webpack_1.Template.indent([
117
+ ? Template.indent([
117
118
  'var installedChunkData = installedChunks[chunkId];',
118
119
  'if(installedChunkData !== 0) { // 0 means "already installed".',
119
- webpack_1.Template.indent([
120
+ Template.indent([
120
121
  '// array of [resolve, reject, promise] means "currently loading"',
121
122
  'if(installedChunkData) {',
122
- webpack_1.Template.indent(['promises.push(installedChunkData[2]);']),
123
+ Template.indent(['promises.push(installedChunkData[2]);']),
123
124
  '} else {',
124
- webpack_1.Template.indent([
125
+ Template.indent([
125
126
  hasJsMatcher === true
126
127
  ? 'if(true) { // all chunks have JS'
127
128
  : `if(${hasJsMatcher('chunkId')}) {`,
128
- webpack_1.Template.indent([
129
+ Template.indent([
129
130
  '// load the chunk and return promise to it',
130
131
  'var promise = new Promise(async function(resolve, reject) {',
131
- webpack_1.Template.indent([
132
+ Template.indent([
132
133
  'installedChunkData = installedChunks[chunkId] = [resolve, reject];',
133
134
  'function installChunkCallback(error,chunk){',
134
- webpack_1.Template.indent([
135
+ Template.indent([
135
136
  'if(error) return reject(error);',
136
137
  'installChunk(chunk);',
137
138
  ]),
138
139
  '}',
139
140
  'var fs = typeof process !== "undefined" ? require(\'fs\') : false;',
140
- `var filename = typeof process !== "undefined" ? require('path').join(__dirname, ${JSON.stringify(rootOutputDir)} + ${webpack_1.RuntimeGlobals.getChunkScriptFilename}(chunkId)) : false;`,
141
+ `var filename = typeof process !== "undefined" ? require('path').join(__dirname, ${JSON.stringify(rootOutputDir)} + ${RuntimeGlobals.getChunkScriptFilename}(chunkId)) : false;`,
141
142
  'if(fs && fs.existsSync(filename)) {',
142
- webpack_1.Template.indent([
143
+ Template.indent([
143
144
  `loadChunkStrategy('filesystem', chunkId, ${JSON.stringify(rootOutputDir)}, remotes, installChunkCallback);`,
144
145
  ]),
145
146
  '} else { ',
146
- webpack_1.Template.indent([
147
+ Template.indent([
147
148
  `var remotes = ${JSON.stringify(Object.values(remotes).reduce((acc, remote) => {
148
149
  const [global, url] = remote.split('@');
149
150
  acc[global] = url;
150
151
  return acc;
151
152
  }, {}))};`,
152
- `var requestedRemote = globalThis.__remote_scope__[${JSON.stringify(name)}]`,
153
- "if(typeof requestedRemote === 'function'){",
154
- webpack_1.Template.indent('requestedRemote = await requestedRemote()'),
155
- '}',
156
- `var chunkName = ${webpack_1.RuntimeGlobals.getChunkScriptFilename}(chunkId);`,
153
+ `var chunkName = ${RuntimeGlobals.getChunkScriptFilename}(chunkId);`,
157
154
  "const loadingStrategy = typeof process !== 'undefined' ? 'http-vm' : 'http-eval';",
158
- `loadChunkStrategy(loadingStrategy, chunkName,${JSON.stringify(name)}, globalThis.__remote_scope__,installChunkCallback);`,
155
+ `loadChunkStrategy(loadingStrategy, chunkName,${RuntimeGlobals.require}.federation.initOptions.name, ${RuntimeGlobals.require}.federation.initOptions.remotes, installChunkCallback);`,
159
156
  ]),
160
157
  '}',
161
158
  ]),
@@ -168,7 +165,7 @@ function generateLoadingCode(withLoading, fn, hasJsMatcher, rootOutputDir, remot
168
165
  ]),
169
166
  '}',
170
167
  ])
171
- : webpack_1.Template.indent(['installedChunks[chunkId] = 0;']),
168
+ : Template.indent(['installedChunks[chunkId] = 0;']),
172
169
  '};',
173
170
  ]);
174
171
  }
@@ -183,16 +180,16 @@ function generateHmrManifestCode(withHmrManifest, rootOutputDir) {
183
180
  if (!withHmrManifest) {
184
181
  return '// no HMR manifest';
185
182
  }
186
- return webpack_1.Template.asString([
187
- `${webpack_1.RuntimeGlobals.hmrDownloadManifest} = function() {`,
188
- webpack_1.Template.indent([
183
+ return Template.asString([
184
+ `${RuntimeGlobals.hmrDownloadManifest} = function() {`,
185
+ Template.indent([
189
186
  'return new Promise(function(resolve, reject) {',
190
- webpack_1.Template.indent([
191
- `var filename = require('path').join(__dirname, ${JSON.stringify(rootOutputDir)} + ${webpack_1.RuntimeGlobals.getUpdateManifestFilename}());`,
187
+ Template.indent([
188
+ `var filename = require('path').join(__dirname, ${JSON.stringify(rootOutputDir)} + ${RuntimeGlobals.getUpdateManifestFilename}());`,
192
189
  "require('fs').readFile(filename, 'utf-8', function(err, content) {",
193
- webpack_1.Template.indent([
190
+ Template.indent([
194
191
  'if(err) {',
195
- webpack_1.Template.indent([
192
+ Template.indent([
196
193
  'if(err.code === "ENOENT") return resolve();',
197
194
  'return reject(err);',
198
195
  ]),
@@ -216,7 +213,7 @@ exports.generateHmrManifestCode = generateHmrManifestCode;
216
213
  */
217
214
  function handleOnChunkLoad(withOnChunkLoad, runtimeTemplate) {
218
215
  if (withOnChunkLoad) {
219
- return `${webpack_1.RuntimeGlobals.onChunksLoaded}.readFileVm = ${runtimeTemplate.returningFunction('installedChunks[chunkId] === 0', 'chunkId')};`;
216
+ return `${RuntimeGlobals.onChunksLoaded}.readFileVm = ${runtimeTemplate.returningFunction('installedChunks[chunkId] === 0', 'chunkId')};`;
220
217
  }
221
218
  else {
222
219
  return '// no on chunks loaded';
@@ -230,53 +227,37 @@ exports.handleOnChunkLoad = handleOnChunkLoad;
230
227
  * @returns {string} - The generated load script.
231
228
  */
232
229
  function generateLoadScript(runtimeTemplate) {
233
- return webpack_1.Template.asString([
230
+ return Template.asString([
234
231
  '// load script equivalent for server side',
235
- `${webpack_1.RuntimeGlobals.loadScript} = ${runtimeTemplate.basicFunction('url,callback,chunkId', [
236
- webpack_1.Template.indent([
232
+ `${RuntimeGlobals.loadScript} = ${runtimeTemplate.basicFunction('url, callback, chunkId', [
233
+ Template.indent([
237
234
  `async function executeLoad(url, callback, name) {
238
235
  if (!name) {
239
236
  throw new Error('__webpack_require__.l name is required for ' + url);
240
237
  }
241
- var remoteName = name;
242
- if(name.includes('__remote_scope__')) {
243
- remoteName = name.split('__remote_scope__.')[1]
238
+ const usesInternalRef = name.startsWith('__webpack_require__')
239
+ if (usesInternalRef) {
240
+ const regex = /__webpack_require__\\.federation\\.instance\\.moduleCache\\.get\\(([^)]+)\\)/;
241
+ const match = name.match(regex);
242
+ if (match) {
243
+ name = match[1].replace(/["']/g, '');
244
+ }
244
245
  }
245
- if (typeof globalThis.__remote_scope__[remoteName] !== 'undefined') return callback(globalThis.__remote_scope__[remoteName]);
246
- globalThis.__remote_scope__._config[remoteName] = url;
247
246
  try {
248
- const scriptContent = await (globalThis.webpackChunkLoad || globalThis.fetch || require("node-fetch"))(url).then(res => res.text());
249
- let remote;
250
- if (typeof process !== 'undefined') {
251
- const vm = require('vm');
252
- const m = require('module');
253
- const remoteCapsule = vm.runInThisContext(m.wrap(scriptContent), 'node-federation-loader-' + name + '.vm')
254
- const exp = {};
255
- remote = {exports:{}};
256
- remoteCapsule(exp,require,remote,'node-federation-loader-' + name + '.vm',__dirname);
257
- remote = remote.exports || remote;
258
- } else {
259
- remote = eval('let module = {};' + scriptContent + '\\nmodule.exports')
260
- }
261
- globalThis.__remote_scope__[remoteName] = remote[remoteName] || remote;
262
- globalThis.__remote_scope__._config[remoteName] = url;
263
- callback(globalThis.__remote_scope__[remoteName])
264
- } catch (e) {
265
- e.target = {src: url};
266
- globalThis.__remote_scope__[remoteName] = {
267
- get: function() {
268
- return function() {
269
- return ()=>null
270
- }
271
- },
272
- init: function() {},
273
- fake: true
247
+ const federation = ${RuntimeGlobals.require}.federation;
248
+ const res = await ${RuntimeGlobals.require}.federation.runtime.loadScriptNode(url, { attrs: {} });
249
+ const enhancedRemote = federation.instance.initRawContainer(name, url, res);
250
+ // use normal global assignment
251
+ if(!usesInternalRef && !globalThis[name]) {
252
+ globalThis[name] = enhancedRemote
274
253
  }
275
- console.log(e);
276
- callback(e);
254
+ callback(enhancedRemote);
255
+ } catch (error) {
256
+ callback(error);
277
257
  }
258
+
278
259
  }`,
279
- `executeLoad(url,callback,chunkId)`,
260
+ `executeLoad(url, callback, chunkId);`,
280
261
  ]),
281
262
  ])}`,
282
263
  ]);
@@ -286,24 +267,24 @@ function generateInstallChunk(runtimeTemplate, withOnChunkLoad) {
286
267
  return `var installChunk = ${runtimeTemplate.basicFunction('chunk', [
287
268
  'var moreModules = chunk.modules, chunkIds = chunk.ids, runtime = chunk.runtime;',
288
269
  'for(var moduleId in moreModules) {',
289
- webpack_1.Template.indent([
290
- `if(${webpack_1.RuntimeGlobals.hasOwnProperty}(moreModules, moduleId)) {`,
291
- webpack_1.Template.indent([
292
- `${webpack_1.RuntimeGlobals.moduleFactories}[moduleId] = moreModules[moduleId];`,
270
+ Template.indent([
271
+ `if(${RuntimeGlobals.hasOwnProperty}(moreModules, moduleId)) {`,
272
+ Template.indent([
273
+ `${RuntimeGlobals.moduleFactories}[moduleId] = moreModules[moduleId];`,
293
274
  ]),
294
275
  '}',
295
276
  ]),
296
277
  '}',
297
278
  'if(runtime) runtime(__webpack_require__);',
298
279
  'for(var i = 0; i < chunkIds.length; i++) {',
299
- webpack_1.Template.indent([
280
+ Template.indent([
300
281
  'if(installedChunks[chunkIds[i]]) {',
301
- webpack_1.Template.indent(['installedChunks[chunkIds[i]][0]();']),
282
+ Template.indent(['installedChunks[chunkIds[i]][0]();']),
302
283
  '}',
303
284
  'installedChunks[chunkIds[i]] = 0;',
304
285
  ]),
305
286
  '}',
306
- withOnChunkLoad ? `${webpack_1.RuntimeGlobals.onChunksLoaded}();` : '',
287
+ withOnChunkLoad ? `${RuntimeGlobals.onChunksLoaded}();` : '',
307
288
  ])};`;
308
289
  }
309
290
  exports.generateInstallChunk = generateInstallChunk;
@@ -311,9 +292,9 @@ function generateExternalInstallChunkCode(withExternalInstallChunk, debug) {
311
292
  if (!withExternalInstallChunk) {
312
293
  return '// no external install chunk';
313
294
  }
314
- return webpack_1.Template.asString([
295
+ return Template.asString([
315
296
  'module.exports = __webpack_require__;',
316
- `${webpack_1.RuntimeGlobals.externalInstallChunk} = function(){`,
297
+ `${RuntimeGlobals.externalInstallChunk} = function(){`,
317
298
  debug
318
299
  ? `console.debug('node: webpack installing to install chunk id:', arguments['0'].id);`
319
300
  : '',
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webpackChunkUtilities.js","sourceRoot":"","sources":["../../../src/plugins/webpackChunkUtilities.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/types/index.ts"],"names":[],"mappings":""}
@@ -2,7 +2,8 @@
2
2
  * Initialize usedChunks and share it globally.
3
3
  * @type {Set}
4
4
  */
5
- export declare const usedChunks: Set<string>;
5
+ export declare const usedChunks: any;
6
+ export declare const getAllKnownRemotes: () => {};
6
7
  /**
7
8
  * Flush the chunks and return a deduplicated array of chunks.
8
9
  * @returns {Promise<Array>} A promise that resolves to an array of deduplicated chunks.
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  /* eslint-disable no-undef */
3
3
  Object.defineProperty(exports, "__esModule", { value: true });
4
- exports.flushChunks = exports.usedChunks = void 0;
4
+ exports.flushChunks = exports.getAllKnownRemotes = exports.usedChunks = void 0;
5
5
  // @ts-ignore
6
6
  if (!globalThis.usedChunks) {
7
7
  // @ts-ignore
@@ -19,12 +19,36 @@ exports.usedChunks = globalThis.usedChunks;
19
19
  */
20
20
  const loadHostStats = () => {
21
21
  try {
22
+ //@ts-ignore
22
23
  return __non_webpack_require__('../federated-stats.json');
23
24
  }
24
25
  catch (e) {
25
26
  return {};
26
27
  }
27
28
  };
29
+ const getAllKnownRemotes = function () {
30
+ // Attempt to access the global federation controller safely
31
+ const federationController = new Function('return globalThis')()
32
+ .__FEDERATION__;
33
+ if (!federationController || !federationController.__INSTANCES__) {
34
+ // If the federation controller or instances are not defined, return an empty object
35
+ return {};
36
+ }
37
+ var collected = {};
38
+ // Use a for...of loop to iterate over all federation instances
39
+ for (const instance of federationController.__INSTANCES__) {
40
+ // Use another for...of loop to iterate over the module cache Map entries
41
+ for (const [key, cacheModule] of instance.moduleCache) {
42
+ // Check if the cacheModule has remoteInfo and use it to collect remote names
43
+ if (cacheModule.remoteInfo) {
44
+ //@ts-ignore
45
+ collected[cacheModule.remoteInfo.name] = cacheModule.remoteInfo;
46
+ }
47
+ }
48
+ }
49
+ return collected;
50
+ };
51
+ exports.getAllKnownRemotes = getAllKnownRemotes;
28
52
  /**
29
53
  * Create a shareMap based on the loaded modules.
30
54
  * @returns {object} shareMap - An object containing the shareMap data.
@@ -66,66 +90,53 @@ const createShareMap = () => {
66
90
  */
67
91
  // @ts-ignore
68
92
  const processChunk = async (chunk, shareMap, hostStats) => {
69
- // Create a set to store the chunks
70
93
  const chunks = new Set();
71
- // Split the chunk string into remote and request
72
- const [remote, request] = chunk.split('->');
73
- // If the remote is not defined in the global config, return
74
- if (!globalThis.__remote_scope__._config[remote]) {
75
- console.error(`flush chunks:`, `Remote ${remote} is not defined in the global config`);
94
+ const [remote, req] = chunk.split('/');
95
+ const request = './' + req;
96
+ const knownRemotes = (0, exports.getAllKnownRemotes)();
97
+ //@ts-ignore
98
+ if (!knownRemotes[remote]) {
99
+ console.error(`flush chunks: Remote ${remote} is not defined in the global config`);
76
100
  return;
77
101
  }
78
102
  try {
79
- // Extract the remote name from the URL
80
103
  //@ts-ignore
81
- const remoteName = new URL(globalThis.__remote_scope__._config[remote]).pathname
104
+ const remoteName = new URL(knownRemotes[remote].entry).pathname
82
105
  .split('/')
83
106
  .pop();
84
- // Construct the stats file URL from the remote config
85
- const statsFile = globalThis.__remote_scope__._config[remote]
107
+ //@ts-ignore
108
+ const statsFile = knownRemotes[remote].entry
86
109
  .replace(remoteName, 'federated-stats.json')
87
110
  .replace('ssr', 'chunks');
88
111
  let stats = {};
89
112
  try {
90
- // Fetch the remote config and stats file
91
113
  stats = await fetch(statsFile).then((res) => res.json());
92
114
  }
93
115
  catch (e) {
94
116
  console.error('flush error', e);
95
117
  }
96
- // Add the main chunk to the chunks set
97
- //TODO: ensure host doesnt embed its own remote in ssr, this causes crash
98
- // chunks.add(
99
- // global.__remote_scope__._config[remote].replace('ssr', 'chunks')
100
- // );
101
- // Extract the prefix from the remote config
102
- const [prefix] = globalThis.__remote_scope__._config[remote].split('static/');
103
- // Process federated modules from the stats object
104
- // @ts-ignore
118
+ //@ts-ignore
119
+ const [prefix] = knownRemotes[remote].entry.split('static/');
120
+ //@ts-ignore
105
121
  if (stats.federatedModules) {
106
- // @ts-ignore
122
+ //@ts-ignore
107
123
  stats.federatedModules.forEach((modules) => {
108
- // Process exposed modules
109
124
  if (modules.exposes?.[request]) {
110
- // @ts-ignore
125
+ //@ts-ignore
111
126
  modules.exposes[request].forEach((chunk) => {
112
127
  chunks.add([prefix, chunk].join(''));
113
- //TODO: reimplement this
114
128
  Object.values(chunk).forEach((chunk) => {
115
- // Add files to the chunks set
116
- // @ts-ignore
129
+ //@ts-ignore
117
130
  if (chunk.files) {
118
- // @ts-ignore
131
+ //@ts-ignore
119
132
  chunk.files.forEach((file) => {
120
133
  chunks.add(prefix + file);
121
134
  });
122
135
  }
123
- // Process required modules
124
- // @ts-ignore
136
+ //@ts-ignore
125
137
  if (chunk.requiredModules) {
126
- // @ts-ignore
138
+ //@ts-ignore
127
139
  chunk.requiredModules.forEach((module) => {
128
- // Check if the module is in the shareMap
129
140
  if (shareMap[module]) {
130
141
  // If the module is from the host, log the host stats
131
142
  }
@@ -136,7 +147,6 @@ const processChunk = async (chunk, shareMap, hostStats) => {
136
147
  }
137
148
  });
138
149
  }
139
- // Return the array of chunks
140
150
  return Array.from(chunks);
141
151
  }
142
152
  catch (e) {
@@ -0,0 +1 @@
1
+ {"version":3,"file":"flush-chunks.js","sourceRoot":"","sources":["../../../src/utils/flush-chunks.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,7 @@
1
- export declare const performReload: (shouldReload: any) => boolean;
1
+ export declare const performReload: (shouldReload: any) => Promise<boolean>;
2
2
  export declare const checkUnreachableRemote: (remoteScope: any) => boolean;
3
3
  export declare const checkMedusaConfigChange: (remoteScope: any, fetchModule: any) => boolean;
4
4
  export declare const checkFakeRemote: (remoteScope: any) => boolean;
5
- export declare const fetchRemote: (remoteScope: any, fetchModule: any) => Promise<any[]>;
6
- export declare const revalidate: (remoteScope?: any, fetchModule?: any) => Promise<boolean>;
5
+ export declare const fetchRemote: (remoteScope: any, fetchModule: any) => Promise<boolean>;
6
+ export declare const revalidate: (fetchModule?: any, force?: boolean) => Promise<boolean>;
7
7
  export declare function getFetchModule(): any;
@@ -4,27 +4,56 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.getFetchModule = exports.revalidate = exports.fetchRemote = exports.checkFakeRemote = exports.checkMedusaConfigChange = exports.checkUnreachableRemote = exports.performReload = void 0;
7
+ const flush_chunks_1 = require("./flush-chunks");
7
8
  const hashmap = {};
8
9
  const crypto_1 = __importDefault(require("crypto"));
9
- const requireCacheRegex = /(remote|runtime|server|hot-reload|react-loadable-manifest)/;
10
- const performReload = (shouldReload) => {
10
+ const requireCacheRegex = /(remote|server|hot-reload|react-loadable-manifest|runtime|styled-jsx)/;
11
+ const performReload = async (shouldReload) => {
11
12
  if (!shouldReload) {
12
13
  return false;
13
14
  }
15
+ const remotesFromAPI = (0, flush_chunks_1.getAllKnownRemotes)();
14
16
  let req;
17
+ //@ts-ignore
15
18
  if (typeof __non_webpack_require__ === 'undefined') {
16
19
  req = require;
17
20
  }
18
21
  else {
22
+ //@ts-ignore
19
23
  req = __non_webpack_require__;
20
24
  }
25
+ const gs = new Function('return globalThis')();
26
+ const entries = Array.from(gs.entryChunkCache || []);
27
+ if (!gs.entryChunkCache) {
28
+ Object.keys(req.cache).forEach((key) => {
29
+ //delete req.cache[key];
30
+ if (requireCacheRegex.test(key)) {
31
+ delete req.cache[key];
32
+ }
33
+ });
34
+ }
35
+ else {
36
+ gs.entryChunkCache.clear();
37
+ }
21
38
  //@ts-ignore
22
- globalThis.__remote_scope__ = {};
23
- Object.keys(req.cache).forEach((key) => {
24
- if (requireCacheRegex.test(key)) {
25
- delete req.cache[key];
39
+ __webpack_require__.federation.instance.moduleCache.clear();
40
+ gs.__GLOBAL_LOADING_REMOTE_ENTRY__ = {};
41
+ //@ts-ignore
42
+ gs.__FEDERATION__.__INSTANCES__.map((i) => {
43
+ i.moduleCache.clear();
44
+ if (gs[i.name]) {
45
+ delete gs[i.name];
26
46
  }
27
47
  });
48
+ gs.__FEDERATION__.__INSTANCES__ = [];
49
+ for (const entry of entries) {
50
+ //@ts-ignore
51
+ delete __non_webpack_require__.cache[entry];
52
+ }
53
+ //reload entries again
54
+ for (const entry of entries) {
55
+ await __non_webpack_require__(entry);
56
+ }
28
57
  return true;
29
58
  };
30
59
  exports.performReload = performReload;
@@ -78,9 +107,11 @@ const checkFakeRemote = (remoteScope) => {
78
107
  exports.checkFakeRemote = checkFakeRemote;
79
108
  const fetchRemote = (remoteScope, fetchModule) => {
80
109
  const fetches = [];
81
- for (const property in remoteScope._config) {
110
+ let needReload = false;
111
+ for (const property in remoteScope) {
82
112
  const name = property;
83
- const url = remoteScope._config[property];
113
+ const container = remoteScope[property];
114
+ const url = container.entry;
84
115
  const fetcher = fetchModule(url)
85
116
  .then((re) => {
86
117
  if (!re.ok) {
@@ -93,6 +124,7 @@ const fetchRemote = (remoteScope, fetchModule) => {
93
124
  if (hashmap[name]) {
94
125
  if (hashmap[name] !== hash) {
95
126
  hashmap[name] = hash;
127
+ needReload = true;
96
128
  console.log(name, 'hash is different - must hot reload server');
97
129
  return true;
98
130
  }
@@ -106,23 +138,31 @@ const fetchRemote = (remoteScope, fetchModule) => {
106
138
  });
107
139
  fetches.push(fetcher);
108
140
  }
109
- return Promise.all(fetches);
141
+ return Promise.all(fetches).then(() => {
142
+ return needReload;
143
+ });
110
144
  };
111
145
  exports.fetchRemote = fetchRemote;
112
146
  //@ts-ignore
113
- const revalidate = (remoteScope = globalThis.__remote_scope__ || {}, fetchModule = getFetchModule() || (() => { })) => {
147
+ const revalidate = async (fetchModule = getFetchModule() || (() => { }), force = false) => {
148
+ const remotesFromAPI = (0, flush_chunks_1.getAllKnownRemotes)();
149
+ //@ts-ignore
114
150
  return new Promise((res) => {
115
- if ((0, exports.checkUnreachableRemote)(remoteScope)) {
116
- res(true);
151
+ if (force) {
152
+ if (Object.keys(hashmap).length !== 0) {
153
+ res(true);
154
+ return;
155
+ }
117
156
  }
118
- // @ts-ignore
119
- if ((0, exports.checkMedusaConfigChange)(remoteScope, fetchModule)) {
157
+ if ((0, exports.checkMedusaConfigChange)(remotesFromAPI, fetchModule)) {
120
158
  res(true);
121
159
  }
122
- if ((0, exports.checkFakeRemote)(remoteScope)) {
160
+ if ((0, exports.checkFakeRemote)(remotesFromAPI)) {
123
161
  res(true);
124
162
  }
125
- (0, exports.fetchRemote)(remoteScope, fetchModule).then(() => res(false));
163
+ (0, exports.fetchRemote)(remotesFromAPI, fetchModule).then((val) => {
164
+ res(val);
165
+ });
126
166
  }).then((shouldReload) => {
127
167
  return (0, exports.performReload)(shouldReload);
128
168
  });
@@ -130,7 +170,9 @@ const revalidate = (remoteScope = globalThis.__remote_scope__ || {}, fetchModule
130
170
  exports.revalidate = revalidate;
131
171
  function getFetchModule() {
132
172
  //@ts-ignore
133
- const loadedModule = globalThis.webpackChunkLoad || global.webpackChunkLoad || global.fetch;
173
+ const loadedModule =
174
+ //@ts-ignore
175
+ globalThis.webpackChunkLoad || global.webpackChunkLoad || global.fetch;
134
176
  if (loadedModule) {
135
177
  return loadedModule;
136
178
  }
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hot-reload.js","sourceRoot":"","sources":["../../../src/utils/hot-reload.ts"],"names":[],"mappings":";;;;;;AAAA,iDAAoD;AAEpD,MAAM,OAAO,GAAG,EAA4B,CAAC;AAC7C,oDAA4B;AAE5B,MAAM,iBAAiB,GACrB,uEAAuE,CAAC;AAEnE,MAAM,aAAa,GAAG,KAAK,EAAE,YAAiB,EAAE,EAAE;IACvD,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,OAAO,KAAK,CAAC;IACf,CAAC;IACD,MAAM,cAAc,GAAG,IAAA,iCAAkB,GAAE,CAAC;IAE5C,IAAI,GAAgB,CAAC;IACrB,YAAY;IACZ,IAAI,OAAO,uBAAuB,KAAK,WAAW,EAAE,CAAC;QACnD,GAAG,GAAG,OAAO,CAAC;IAChB,CAAC;SAAM,CAAC;QACN,YAAY;QACZ,GAAG,GAAG,uBAAsC,CAAC;IAC/C,CAAC;IAED,MAAM,EAAE,GAAG,IAAI,QAAQ,CAAC,mBAAmB,CAAC,EAAE,CAAC;IAC/C,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,eAAe,IAAI,EAAE,CAAC,CAAC;IAErD,IAAI,CAAC,EAAE,CAAC,eAAe,EAAE,CAAC;QACxB,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;YACrC,wBAAwB;YACxB,IAAI,iBAAiB,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;gBAChC,OAAO,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YACxB,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;SAAM,CAAC;QACN,EAAE,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC;IAC7B,CAAC;IAED,YAAY;IACZ,mBAAmB,CAAC,UAAU,CAAC,QAAQ,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC;IAC5D,EAAE,CAAC,+BAA+B,GAAG,EAAE,CAAC;IACxC,YAAY;IACZ,EAAE,CAAC,cAAc,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;QACxC,CAAC,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC;QACtB,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;YACf,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QACpB,CAAC;IACH,CAAC,CAAC,CAAC;IACH,EAAE,CAAC,cAAc,CAAC,aAAa,GAAG,EAAE,CAAC;IAErC,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,YAAY;QACZ,OAAO,uBAAuB,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAC9C,CAAC;IAED,sBAAsB;IACtB,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,MAAM,uBAAuB,CAAC,KAAK,CAAC,CAAC;IACvC,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AApDW,QAAA,aAAa,iBAoDxB;AAEK,MAAM,sBAAsB,GAAG,CAAC,WAAgB,EAAE,EAAE;IACzD,KAAK,MAAM,QAAQ,IAAI,WAAW,CAAC,OAAO,EAAE,CAAC;QAC3C,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC3B,OAAO,CAAC,KAAK,CACX,0BAA0B,EAC1B,QAAQ,EACR,0BAA0B,CAC3B,CAAC;YACF,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC,CAAC;AAZW,QAAA,sBAAsB,0BAYjC;AAEK,MAAM,uBAAuB,GAAG,CAAC,WAAgB,EAAE,WAAgB,EAAE,EAAE;IAC5E,YAAY;IACZ,IAAI,WAAW,CAAC,OAAO,EAAE,CAAC;QACxB,YAAY;QACZ,KAAK,MAAM,QAAQ,IAAI,WAAW,CAAC,OAAO,EAAE,CAAC;YAC3C,WAAW,CAAC,QAAQ,CAAC;iBAClB,IAAI,CAAC,CAAC,GAAa,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;iBACnC,IAAI,CAAC,CAAC,cAAmB,EAAkB,EAAE;gBAC5C,IACE,cAAc,CAAC,OAAO;oBACtB,YAAY;oBACZ,WAAW,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC,OAAO,EACtC,CAAC;oBACD,OAAO,CAAC,GAAG,CACT,uBAAuB,EACvB,QAAQ,EACR,0BAA0B,CAC3B,CAAC;oBACF,IAAA,qBAAa,EAAC,IAAI,CAAC,CAAC;oBACpB,OAAO,IAAI,CAAC;gBACd,CAAC;YACH,CAAC,CAAC,CAAC;QACP,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC,CAAC;AAzBW,QAAA,uBAAuB,2BAyBlC;AAEK,MAAM,eAAe,GAAG,CAAC,WAAgB,EAAE,EAAE;IAClD,KAAK,MAAM,QAAQ,IAAI,WAAW,CAAC,OAAO,EAAE,CAAC;QAC3C,IAAI,MAAM,GAAG,WAAW,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QAE3C,MAAM,aAAa,GAAG,KAAK,IAAI,EAAE;YAC/B,MAAM,GAAG,MAAM,MAAM,EAAE,CAAC;QAC1B,CAAC,CAAC;QAEF,IAAI,OAAO,MAAM,KAAK,UAAU,EAAE,CAAC;YACjC,aAAa,EAAE,CAAC;QAClB,CAAC;QAED,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;YAChB,OAAO,CAAC,GAAG,CAAC,mBAAmB,EAAE,QAAQ,EAAE,0BAA0B,CAAC,CAAC;YACvE,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC,CAAC;AAlBW,QAAA,eAAe,mBAkB1B;AAEK,MAAM,WAAW,GAAG,CAAC,WAAgB,EAAE,WAAgB,EAAE,EAAE;IAChE,MAAM,OAAO,GAAG,EAAE,CAAC;IACnB,IAAI,UAAU,GAAG,KAAK,CAAC;IACvB,KAAK,MAAM,QAAQ,IAAI,WAAW,EAAE,CAAC;QACnC,MAAM,IAAI,GAAG,QAAQ,CAAC;QACtB,MAAM,SAAS,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC;QACxC,MAAM,GAAG,GAAG,SAAS,CAAC,KAAK,CAAC;QAC5B,MAAM,OAAO,GAAG,WAAW,CAAC,GAAG,CAAC;aAC7B,IAAI,CAAC,CAAC,EAAY,EAAE,EAAE;YACrB,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;gBACX,MAAM,IAAI,KAAK,CACb,iCACE,EAAE,CAAC,MACL,mBAAmB,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,EAAE,CACpD,CAAC;YACJ,CAAC;YACD,OAAO,EAAE,CAAC,IAAI,EAAE,CAAC;QACnB,CAAC,CAAC;aACD,IAAI,CAAC,CAAC,QAAgB,EAAkB,EAAE;YACzC,MAAM,IAAI,GAAG,gBAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACrE,IAAI,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;gBAClB,IAAI,OAAO,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;oBAC3B,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;oBACrB,UAAU,GAAG,IAAI,CAAC;oBAClB,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,4CAA4C,CAAC,CAAC;oBAChE,OAAO,IAAI,CAAC;gBACd,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;YACvB,CAAC;QACH,CAAC,CAAC;aACD,KAAK,CAAC,CAAC,CAAQ,EAAE,EAAE;YAClB,OAAO,CAAC,KAAK,CACX,QAAQ,EACR,IAAI,EACJ,GAAG,EACH,iCAAiC,EACjC,CAAC,CACF,CAAC;QACJ,CAAC,CAAC,CAAC;QAEL,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACxB,CAAC;IACD,OAAO,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE;QACpC,OAAO,UAAU,CAAC;IACpB,CAAC,CAAC,CAAC;AACL,CAAC,CAAC;AA9CW,QAAA,WAAW,eA8CtB;AACF,YAAY;AACL,MAAM,UAAU,GAAG,KAAK,EAC7B,cAAmB,cAAc,EAAE,IAAI,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,EACjD,QAAiB,KAAK,EACtB,EAAE;IACF,MAAM,cAAc,GAAG,IAAA,iCAAkB,GAAE,CAAC;IAC5C,YAAY;IACZ,OAAO,IAAI,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;QACzB,IAAI,KAAK,EAAE,CAAC;YACV,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACtC,GAAG,CAAC,IAAI,CAAC,CAAC;gBACV,OAAO;YACT,CAAC;QACH,CAAC;QACD,IAAI,IAAA,+BAAuB,EAAC,cAAc,EAAE,WAAW,CAAC,EAAE,CAAC;YACzD,GAAG,CAAC,IAAI,CAAC,CAAC;QACZ,CAAC;QAED,IAAI,IAAA,uBAAe,EAAC,cAAc,CAAC,EAAE,CAAC;YACpC,GAAG,CAAC,IAAI,CAAC,CAAC;QACZ,CAAC;QAED,IAAA,mBAAW,EAAC,cAAc,EAAE,WAAW,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE;YACpD,GAAG,CAAC,GAAG,CAAC,CAAC;QACX,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,YAAY,EAAE,EAAE;QACvB,OAAO,IAAA,qBAAa,EAAC,YAAY,CAAC,CAAC;IACrC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC;AA3BW,QAAA,UAAU,cA2BrB;AAEF,SAAgB,cAAc;IAC5B,YAAY;IACZ,MAAM,YAAY;IAChB,YAAY;IACZ,UAAU,CAAC,gBAAgB,IAAI,MAAM,CAAC,gBAAgB,IAAI,MAAM,CAAC,KAAK,CAAC;IACzE,IAAI,YAAY,EAAE,CAAC;QACjB,OAAO,YAAY,CAAC;IACtB,CAAC;IACD,8DAA8D;IAC9D,MAAM,SAAS,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;IACxC,OAAO,SAAS,CAAC,OAAO,IAAI,SAAS,CAAC;AACxC,CAAC;AAXD,wCAWC"}