@module-federation/sdk 1.0.0-canary.3 → 1.1.0-canary.1

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/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2023-present zhanghang(2heal1)
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1 @@
1
+ exports._default = require('./index.cjs.js').default;
package/index.cjs.js CHANGED
@@ -209,6 +209,7 @@ function _unsupported_iterable_to_array(o, minLen) {
209
209
  if (n === "Map" || n === "Set") return Array.from(n);
210
210
  if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _array_like_to_array(o, minLen);
211
211
  }
212
+ var LOG_CATEGORY = "[ Federation Runtime ]";
212
213
  // entry: name:version version : 1.0.0 | ^1.2.3
213
214
  // entry: name:entry entry: https://localhost:9000/federation-manifest.json
214
215
  var parseEntry = function(str, devVerOrUrl) {
@@ -218,7 +219,7 @@ var parseEntry = function(str, devVerOrUrl) {
218
219
  var isEntry = function(s) {
219
220
  return s.startsWith("http") || s.endsWith(MANIFEST_EXT);
220
221
  };
221
- // startWith type
222
+ // Check if the string starts with a type
222
223
  if (strSplit.length >= 2) {
223
224
  var _strSplit = _to_array(strSplit), name = _strSplit[0], versionOrEntryArr = _strSplit.slice(1);
224
225
  var versionOrEntry = devVersionOrUrl || versionOrEntryArr.join(SEPARATOR);
@@ -228,7 +229,7 @@ var parseEntry = function(str, devVerOrUrl) {
228
229
  entry: versionOrEntry
229
230
  };
230
231
  } else {
231
- // version rule
232
+ // Apply version rule
232
233
  // devVersionOrUrl => inputVersion => defaultVersion
233
234
  return {
234
235
  name: name,
@@ -299,7 +300,7 @@ var generateExposeFilename = function(exposeName, withExt) {
299
300
  }
300
301
  var expose = exposeName;
301
302
  if (expose === ".") {
302
- expose = "defautl_export";
303
+ expose = "default_export";
303
304
  }
304
305
  if (expose.startsWith("./")) {
305
306
  expose = expose.replace("./", "");
@@ -312,6 +313,29 @@ var generateShareFilename = function(pkgName, withExt) {
312
313
  }
313
314
  return encodeName(pkgName, "__federation_shared_", withExt);
314
315
  };
316
+ var getResourceUrl = function(module, sourceUrl) {
317
+ if ("getPublicPath" in module) {
318
+ var publicPath = new Function(module.getPublicPath)();
319
+ return "".concat(publicPath).concat(sourceUrl);
320
+ } else if ("publicPath" in module) {
321
+ return "".concat(module.publicPath).concat(sourceUrl);
322
+ } else {
323
+ console.warn("Can not get resource url, if in debug mode, please ignore", module, sourceUrl);
324
+ return "";
325
+ }
326
+ };
327
+ // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types
328
+ var assert = function(condition, msg) {
329
+ if (!condition) {
330
+ error(msg);
331
+ }
332
+ };
333
+ var error = function(msg) {
334
+ throw new Error("".concat(LOG_CATEGORY, ": ").concat(msg));
335
+ };
336
+ var warn = function(msg) {
337
+ console.warn("".concat(LOG_CATEGORY, ": ").concat(msg));
338
+ };
315
339
 
316
340
  function _define_property(obj, key, value) {
317
341
  if (key in obj) {
@@ -394,10 +418,11 @@ var simpleJoinRemoteEntry = function(rPath, rName) {
394
418
  }
395
419
  return "".concat(transformedPath, "/").concat(rName);
396
420
  };
397
- // 优先级:overrides > remotes
421
+ // Priority: overrides > remotes
398
422
  // eslint-disable-next-line max-lines-per-function
399
423
  function generateSnapshotFromManifest(manifest) {
400
424
  var options = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {};
425
+ var _manifest_metaData;
401
426
  var _options_remotes = options.remotes, remotes = _options_remotes === void 0 ? {} : _options_remotes, _options_overrides = options.overrides, overrides = _options_overrides === void 0 ? {} : _options_overrides, version = options.version;
402
427
  var remoteSnapshot;
403
428
  var getPublicPath = function() {
@@ -409,13 +434,13 @@ function generateSnapshotFromManifest(manifest) {
409
434
  };
410
435
  var overridesKeys = Object.keys(overrides);
411
436
  var remotesInfo = {};
412
- // If remotes are not passed, only the remotes in the manifest will be read
437
+ // If remotes are not provided, only the remotes in the manifest will be read
413
438
  if (!Object.keys(remotes).length) {
414
439
  var _manifest_remotes;
415
440
  remotesInfo = ((_manifest_remotes = manifest.remotes) === null || _manifest_remotes === void 0 ? void 0 : _manifest_remotes.reduce(function(res, next) {
416
441
  var matchedVersion;
417
442
  var name = next.federationContainerName;
418
- // overrides has hight priority
443
+ // overrides have higher priority
419
444
  if (overridesKeys.includes(name)) {
420
445
  matchedVersion = overrides[name];
421
446
  } else {
@@ -431,14 +456,14 @@ function generateSnapshotFromManifest(manifest) {
431
456
  return res;
432
457
  }, {})) || {};
433
458
  }
434
- // If remotes (deploy scenario) are specified, you need to traverse it again
459
+ // If remotes (deploy scenario) are specified, they need to be traversed again
435
460
  Object.keys(remotes).forEach(function(key) {
436
461
  return remotesInfo[key] = {
437
462
  // overrides will override dependencies
438
463
  matchedVersion: overridesKeys.includes(key) ? overrides[key] : remotes[key]
439
464
  };
440
465
  });
441
- var _manifest_metaData = manifest.metaData, _manifest_metaData_remoteEntry = _manifest_metaData.remoteEntry, remoteEntryPath = _manifest_metaData_remoteEntry.path, remoteEntryName = _manifest_metaData_remoteEntry.name, remoteEntryType = _manifest_metaData_remoteEntry.type, remoteTypes = _manifest_metaData.types, buildVersion = _manifest_metaData.buildInfo.buildVersion, globalName = _manifest_metaData.globalName;
466
+ var _manifest_metaData1 = manifest.metaData, _manifest_metaData_remoteEntry = _manifest_metaData1.remoteEntry, remoteEntryPath = _manifest_metaData_remoteEntry.path, remoteEntryName = _manifest_metaData_remoteEntry.name, remoteEntryType = _manifest_metaData_remoteEntry.type, remoteTypes = _manifest_metaData1.types, buildVersion = _manifest_metaData1.buildInfo.buildVersion, globalName = _manifest_metaData1.globalName;
442
467
  var exposes = manifest.exposes;
443
468
  var basicRemoteSnapshot = {
444
469
  version: version ? version : "",
@@ -462,6 +487,13 @@ function generateSnapshotFromManifest(manifest) {
462
487
  };
463
488
  })
464
489
  };
490
+ if ((_manifest_metaData = manifest.metaData) === null || _manifest_metaData === void 0 ? void 0 : _manifest_metaData.prefetchEntry) {
491
+ var _manifest_metaData_prefetchEntry = manifest.metaData.prefetchEntry, path = _manifest_metaData_prefetchEntry.path, name = _manifest_metaData_prefetchEntry.name, type = _manifest_metaData_prefetchEntry.type;
492
+ basicRemoteSnapshot = _object_spread_props(_object_spread({}, basicRemoteSnapshot), {
493
+ prefetchEntry: simpleJoinRemoteEntry(path, name),
494
+ prefetchEntryType: type
495
+ });
496
+ }
465
497
  if ("publicPath" in manifest.metaData) {
466
498
  remoteSnapshot = _object_spread_props(_object_spread({}, basicRemoteSnapshot), {
467
499
  publicPath: getPublicPath()
@@ -481,6 +513,255 @@ function isManifestProvider(moduleInfo) {
481
513
  }
482
514
  }
483
515
 
516
+ function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {
517
+ try {
518
+ var info = gen[key](arg);
519
+ var value = info.value;
520
+ } catch (error) {
521
+ reject(error);
522
+ return;
523
+ }
524
+ if (info.done) {
525
+ resolve(value);
526
+ } else {
527
+ Promise.resolve(value).then(_next, _throw);
528
+ }
529
+ }
530
+ function _async_to_generator(fn) {
531
+ return function() {
532
+ var self = this, args = arguments;
533
+ return new Promise(function(resolve, reject) {
534
+ var gen = fn.apply(self, args);
535
+ function _next(value) {
536
+ asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value);
537
+ }
538
+ function _throw(err) {
539
+ asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err);
540
+ }
541
+ _next(undefined);
542
+ });
543
+ };
544
+ }
545
+ function _instanceof(left, right) {
546
+ if (right != null && typeof Symbol !== "undefined" && right[Symbol.hasInstance]) {
547
+ return !!right[Symbol.hasInstance](left);
548
+ } else {
549
+ return left instanceof right;
550
+ }
551
+ }
552
+ function _ts_generator(thisArg, body) {
553
+ var f, y, t, g, _ = {
554
+ label: 0,
555
+ sent: function() {
556
+ if (t[0] & 1) throw t[1];
557
+ return t[1];
558
+ },
559
+ trys: [],
560
+ ops: []
561
+ };
562
+ return g = {
563
+ next: verb(0),
564
+ "throw": verb(1),
565
+ "return": verb(2)
566
+ }, typeof Symbol === "function" && (g[Symbol.iterator] = function() {
567
+ return this;
568
+ }), g;
569
+ function verb(n) {
570
+ return function(v) {
571
+ return step([
572
+ n,
573
+ v
574
+ ]);
575
+ };
576
+ }
577
+ function step(op) {
578
+ if (f) throw new TypeError("Generator is already executing.");
579
+ while(_)try {
580
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
581
+ if (y = 0, t) op = [
582
+ op[0] & 2,
583
+ t.value
584
+ ];
585
+ switch(op[0]){
586
+ case 0:
587
+ case 1:
588
+ t = op;
589
+ break;
590
+ case 4:
591
+ _.label++;
592
+ return {
593
+ value: op[1],
594
+ done: false
595
+ };
596
+ case 5:
597
+ _.label++;
598
+ y = op[1];
599
+ op = [
600
+ 0
601
+ ];
602
+ continue;
603
+ case 7:
604
+ op = _.ops.pop();
605
+ _.trys.pop();
606
+ continue;
607
+ default:
608
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) {
609
+ _ = 0;
610
+ continue;
611
+ }
612
+ if (op[0] === 3 && (!t || op[1] > t[0] && op[1] < t[3])) {
613
+ _.label = op[1];
614
+ break;
615
+ }
616
+ if (op[0] === 6 && _.label < t[1]) {
617
+ _.label = t[1];
618
+ t = op;
619
+ break;
620
+ }
621
+ if (t && _.label < t[2]) {
622
+ _.label = t[2];
623
+ _.ops.push(op);
624
+ break;
625
+ }
626
+ if (t[2]) _.ops.pop();
627
+ _.trys.pop();
628
+ continue;
629
+ }
630
+ op = body.call(thisArg, _);
631
+ } catch (e) {
632
+ op = [
633
+ 6,
634
+ e
635
+ ];
636
+ y = 0;
637
+ } finally{
638
+ f = t = 0;
639
+ }
640
+ if (op[0] & 5) throw op[1];
641
+ return {
642
+ value: op[0] ? op[1] : void 0,
643
+ done: true
644
+ };
645
+ }
646
+ }
647
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
648
+ function safeWrapper(callback, disableWarn) {
649
+ return _safeWrapper.apply(this, arguments);
650
+ }
651
+ function _safeWrapper() {
652
+ _safeWrapper = _async_to_generator(function(callback, disableWarn) {
653
+ var res, e;
654
+ return _ts_generator(this, function(_state) {
655
+ switch(_state.label){
656
+ case 0:
657
+ _state.trys.push([
658
+ 0,
659
+ 2,
660
+ ,
661
+ 3
662
+ ]);
663
+ return [
664
+ 4,
665
+ callback()
666
+ ];
667
+ case 1:
668
+ res = _state.sent();
669
+ return [
670
+ 2,
671
+ res
672
+ ];
673
+ case 2:
674
+ e = _state.sent();
675
+ !disableWarn && warn(e);
676
+ return [
677
+ 2
678
+ ];
679
+ case 3:
680
+ return [
681
+ 2
682
+ ];
683
+ }
684
+ });
685
+ });
686
+ return _safeWrapper.apply(this, arguments);
687
+ }
688
+ function isStaticResourcesEqual(url1, url2) {
689
+ var REG_EXP = /^(https?:)?\/\//i;
690
+ // Transform url1 and url2 into relative paths
691
+ var relativeUrl1 = url1.replace(REG_EXP, "").replace(/\/$/, "");
692
+ var relativeUrl2 = url2.replace(REG_EXP, "").replace(/\/$/, "");
693
+ // Check if the relative paths are identical
694
+ return relativeUrl1 === relativeUrl2;
695
+ }
696
+ function createScript(url, cb, attrs, createScriptHook) {
697
+ // Retrieve the existing script element by its src attribute
698
+ var script = null;
699
+ var needAttach = true;
700
+ var scripts = document.getElementsByTagName("script");
701
+ for(var i = 0; i < scripts.length; i++){
702
+ var s = scripts[i];
703
+ var scriptSrc = s.getAttribute("src");
704
+ if (scriptSrc && isStaticResourcesEqual(scriptSrc, url)) {
705
+ script = s;
706
+ needAttach = false;
707
+ break;
708
+ }
709
+ }
710
+ if (!script) {
711
+ script = document.createElement("script");
712
+ script.type = "text/javascript";
713
+ script.src = url;
714
+ if (createScriptHook) {
715
+ var createScriptRes = createScriptHook(url);
716
+ if (_instanceof(createScriptRes, HTMLScriptElement)) {
717
+ script = createScriptRes;
718
+ }
719
+ }
720
+ }
721
+ if (attrs) {
722
+ Object.keys(attrs).forEach(function(name) {
723
+ if (script) {
724
+ if (name === "async" || name === "defer") {
725
+ script[name] = attrs[name];
726
+ } else {
727
+ script.setAttribute(name, attrs[name]);
728
+ }
729
+ }
730
+ });
731
+ }
732
+ var onScriptComplete = function(prev, // eslint-disable-next-line @typescript-eslint/no-explicit-any
733
+ event) {
734
+ // Prevent memory leaks in IE.
735
+ if (script) {
736
+ script.onerror = null;
737
+ script.onload = null;
738
+ safeWrapper(function() {
739
+ (script === null || script === void 0 ? void 0 : script.parentNode) && script.parentNode.removeChild(script);
740
+ });
741
+ if (prev) {
742
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
743
+ var res = prev(event);
744
+ cb();
745
+ return res;
746
+ }
747
+ }
748
+ cb();
749
+ };
750
+ script.onerror = onScriptComplete.bind(null, script.onerror);
751
+ script.onload = onScriptComplete.bind(null, script.onload);
752
+ return {
753
+ script: script,
754
+ needAttach: needAttach
755
+ };
756
+ }
757
+ function loadScript(url, info) {
758
+ var attrs = info.attrs, createScriptHook = info.createScriptHook;
759
+ return new Promise(function(resolve, _reject) {
760
+ var _createScript = createScript(url, resolve, attrs, createScriptHook), script = _createScript.script, needAttach = _createScript.needAttach;
761
+ needAttach && document.getElementsByTagName("head")[0].appendChild(script);
762
+ });
763
+ }
764
+
484
765
  exports.BROWSER_LOG_KEY = BROWSER_LOG_KEY;
485
766
  exports.BROWSER_LOG_VALUE = BROWSER_LOG_VALUE;
486
767
  exports.EncodedNameTransformMap = EncodedNameTransformMap;
@@ -490,15 +771,23 @@ exports.MANIFEST_EXT = MANIFEST_EXT;
490
771
  exports.NameTransformMap = NameTransformMap;
491
772
  exports.NameTransformSymbol = NameTransformSymbol;
492
773
  exports.SEPARATOR = SEPARATOR;
774
+ exports.assert = assert;
493
775
  exports.composeKeyWithSeparator = composeKeyWithSeparator;
776
+ exports.createScript = createScript;
494
777
  exports.decodeName = decodeName;
495
778
  exports.encodeName = encodeName;
779
+ exports.error = error;
496
780
  exports.generateExposeFilename = generateExposeFilename;
497
781
  exports.generateShareFilename = generateShareFilename;
498
782
  exports.generateSnapshotFromManifest = generateSnapshotFromManifest;
499
783
  exports.getProcessEnv = getProcessEnv;
784
+ exports.getResourceUrl = getResourceUrl;
500
785
  exports.isBrowserEnv = isBrowserEnv;
501
786
  exports.isDebugMode = isDebugMode;
502
787
  exports.isManifestProvider = isManifestProvider;
788
+ exports.isStaticResourcesEqual = isStaticResourcesEqual;
789
+ exports.loadScript = loadScript;
503
790
  exports.logger = logger;
504
791
  exports.parseEntry = parseEntry;
792
+ exports.safeWrapper = safeWrapper;
793
+ exports.warn = warn;
package/index.cjs.mjs ADDED
@@ -0,0 +1,2 @@
1
+ export * from './index.cjs.js';
2
+ export { _default as default } from './index.cjs.default.js';
package/index.esm.js CHANGED
@@ -205,6 +205,7 @@ function _unsupported_iterable_to_array(o, minLen) {
205
205
  if (n === "Map" || n === "Set") return Array.from(n);
206
206
  if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _array_like_to_array(o, minLen);
207
207
  }
208
+ var LOG_CATEGORY = "[ Federation Runtime ]";
208
209
  // entry: name:version version : 1.0.0 | ^1.2.3
209
210
  // entry: name:entry entry: https://localhost:9000/federation-manifest.json
210
211
  var parseEntry = function(str, devVerOrUrl) {
@@ -214,7 +215,7 @@ var parseEntry = function(str, devVerOrUrl) {
214
215
  var isEntry = function(s) {
215
216
  return s.startsWith("http") || s.endsWith(MANIFEST_EXT);
216
217
  };
217
- // startWith type
218
+ // Check if the string starts with a type
218
219
  if (strSplit.length >= 2) {
219
220
  var _strSplit = _to_array(strSplit), name = _strSplit[0], versionOrEntryArr = _strSplit.slice(1);
220
221
  var versionOrEntry = devVersionOrUrl || versionOrEntryArr.join(SEPARATOR);
@@ -224,7 +225,7 @@ var parseEntry = function(str, devVerOrUrl) {
224
225
  entry: versionOrEntry
225
226
  };
226
227
  } else {
227
- // version rule
228
+ // Apply version rule
228
229
  // devVersionOrUrl => inputVersion => defaultVersion
229
230
  return {
230
231
  name: name,
@@ -295,7 +296,7 @@ var generateExposeFilename = function(exposeName, withExt) {
295
296
  }
296
297
  var expose = exposeName;
297
298
  if (expose === ".") {
298
- expose = "defautl_export";
299
+ expose = "default_export";
299
300
  }
300
301
  if (expose.startsWith("./")) {
301
302
  expose = expose.replace("./", "");
@@ -308,6 +309,29 @@ var generateShareFilename = function(pkgName, withExt) {
308
309
  }
309
310
  return encodeName(pkgName, "__federation_shared_", withExt);
310
311
  };
312
+ var getResourceUrl = function(module, sourceUrl) {
313
+ if ("getPublicPath" in module) {
314
+ var publicPath = new Function(module.getPublicPath)();
315
+ return "".concat(publicPath).concat(sourceUrl);
316
+ } else if ("publicPath" in module) {
317
+ return "".concat(module.publicPath).concat(sourceUrl);
318
+ } else {
319
+ console.warn("Can not get resource url, if in debug mode, please ignore", module, sourceUrl);
320
+ return "";
321
+ }
322
+ };
323
+ // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types
324
+ var assert = function(condition, msg) {
325
+ if (!condition) {
326
+ error(msg);
327
+ }
328
+ };
329
+ var error = function(msg) {
330
+ throw new Error("".concat(LOG_CATEGORY, ": ").concat(msg));
331
+ };
332
+ var warn = function(msg) {
333
+ console.warn("".concat(LOG_CATEGORY, ": ").concat(msg));
334
+ };
311
335
 
312
336
  function _define_property(obj, key, value) {
313
337
  if (key in obj) {
@@ -390,10 +414,11 @@ var simpleJoinRemoteEntry = function(rPath, rName) {
390
414
  }
391
415
  return "".concat(transformedPath, "/").concat(rName);
392
416
  };
393
- // 优先级:overrides > remotes
417
+ // Priority: overrides > remotes
394
418
  // eslint-disable-next-line max-lines-per-function
395
419
  function generateSnapshotFromManifest(manifest) {
396
420
  var options = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {};
421
+ var _manifest_metaData;
397
422
  var _options_remotes = options.remotes, remotes = _options_remotes === void 0 ? {} : _options_remotes, _options_overrides = options.overrides, overrides = _options_overrides === void 0 ? {} : _options_overrides, version = options.version;
398
423
  var remoteSnapshot;
399
424
  var getPublicPath = function() {
@@ -405,13 +430,13 @@ function generateSnapshotFromManifest(manifest) {
405
430
  };
406
431
  var overridesKeys = Object.keys(overrides);
407
432
  var remotesInfo = {};
408
- // If remotes are not passed, only the remotes in the manifest will be read
433
+ // If remotes are not provided, only the remotes in the manifest will be read
409
434
  if (!Object.keys(remotes).length) {
410
435
  var _manifest_remotes;
411
436
  remotesInfo = ((_manifest_remotes = manifest.remotes) === null || _manifest_remotes === void 0 ? void 0 : _manifest_remotes.reduce(function(res, next) {
412
437
  var matchedVersion;
413
438
  var name = next.federationContainerName;
414
- // overrides has hight priority
439
+ // overrides have higher priority
415
440
  if (overridesKeys.includes(name)) {
416
441
  matchedVersion = overrides[name];
417
442
  } else {
@@ -427,14 +452,14 @@ function generateSnapshotFromManifest(manifest) {
427
452
  return res;
428
453
  }, {})) || {};
429
454
  }
430
- // If remotes (deploy scenario) are specified, you need to traverse it again
455
+ // If remotes (deploy scenario) are specified, they need to be traversed again
431
456
  Object.keys(remotes).forEach(function(key) {
432
457
  return remotesInfo[key] = {
433
458
  // overrides will override dependencies
434
459
  matchedVersion: overridesKeys.includes(key) ? overrides[key] : remotes[key]
435
460
  };
436
461
  });
437
- var _manifest_metaData = manifest.metaData, _manifest_metaData_remoteEntry = _manifest_metaData.remoteEntry, remoteEntryPath = _manifest_metaData_remoteEntry.path, remoteEntryName = _manifest_metaData_remoteEntry.name, remoteEntryType = _manifest_metaData_remoteEntry.type, remoteTypes = _manifest_metaData.types, buildVersion = _manifest_metaData.buildInfo.buildVersion, globalName = _manifest_metaData.globalName;
462
+ var _manifest_metaData1 = manifest.metaData, _manifest_metaData_remoteEntry = _manifest_metaData1.remoteEntry, remoteEntryPath = _manifest_metaData_remoteEntry.path, remoteEntryName = _manifest_metaData_remoteEntry.name, remoteEntryType = _manifest_metaData_remoteEntry.type, remoteTypes = _manifest_metaData1.types, buildVersion = _manifest_metaData1.buildInfo.buildVersion, globalName = _manifest_metaData1.globalName;
438
463
  var exposes = manifest.exposes;
439
464
  var basicRemoteSnapshot = {
440
465
  version: version ? version : "",
@@ -458,6 +483,13 @@ function generateSnapshotFromManifest(manifest) {
458
483
  };
459
484
  })
460
485
  };
486
+ if ((_manifest_metaData = manifest.metaData) === null || _manifest_metaData === void 0 ? void 0 : _manifest_metaData.prefetchEntry) {
487
+ var _manifest_metaData_prefetchEntry = manifest.metaData.prefetchEntry, path = _manifest_metaData_prefetchEntry.path, name = _manifest_metaData_prefetchEntry.name, type = _manifest_metaData_prefetchEntry.type;
488
+ basicRemoteSnapshot = _object_spread_props(_object_spread({}, basicRemoteSnapshot), {
489
+ prefetchEntry: simpleJoinRemoteEntry(path, name),
490
+ prefetchEntryType: type
491
+ });
492
+ }
461
493
  if ("publicPath" in manifest.metaData) {
462
494
  remoteSnapshot = _object_spread_props(_object_spread({}, basicRemoteSnapshot), {
463
495
  publicPath: getPublicPath()
@@ -477,4 +509,253 @@ function isManifestProvider(moduleInfo) {
477
509
  }
478
510
  }
479
511
 
480
- export { BROWSER_LOG_KEY, BROWSER_LOG_VALUE, EncodedNameTransformMap, FederationModuleManifest, Logger, MANIFEST_EXT, NameTransformMap, NameTransformSymbol, SEPARATOR, composeKeyWithSeparator, decodeName, encodeName, generateExposeFilename, generateShareFilename, generateSnapshotFromManifest, getProcessEnv, isBrowserEnv, isDebugMode, isManifestProvider, logger, parseEntry };
512
+ function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {
513
+ try {
514
+ var info = gen[key](arg);
515
+ var value = info.value;
516
+ } catch (error) {
517
+ reject(error);
518
+ return;
519
+ }
520
+ if (info.done) {
521
+ resolve(value);
522
+ } else {
523
+ Promise.resolve(value).then(_next, _throw);
524
+ }
525
+ }
526
+ function _async_to_generator(fn) {
527
+ return function() {
528
+ var self = this, args = arguments;
529
+ return new Promise(function(resolve, reject) {
530
+ var gen = fn.apply(self, args);
531
+ function _next(value) {
532
+ asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value);
533
+ }
534
+ function _throw(err) {
535
+ asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err);
536
+ }
537
+ _next(undefined);
538
+ });
539
+ };
540
+ }
541
+ function _instanceof(left, right) {
542
+ if (right != null && typeof Symbol !== "undefined" && right[Symbol.hasInstance]) {
543
+ return !!right[Symbol.hasInstance](left);
544
+ } else {
545
+ return left instanceof right;
546
+ }
547
+ }
548
+ function _ts_generator(thisArg, body) {
549
+ var f, y, t, g, _ = {
550
+ label: 0,
551
+ sent: function() {
552
+ if (t[0] & 1) throw t[1];
553
+ return t[1];
554
+ },
555
+ trys: [],
556
+ ops: []
557
+ };
558
+ return g = {
559
+ next: verb(0),
560
+ "throw": verb(1),
561
+ "return": verb(2)
562
+ }, typeof Symbol === "function" && (g[Symbol.iterator] = function() {
563
+ return this;
564
+ }), g;
565
+ function verb(n) {
566
+ return function(v) {
567
+ return step([
568
+ n,
569
+ v
570
+ ]);
571
+ };
572
+ }
573
+ function step(op) {
574
+ if (f) throw new TypeError("Generator is already executing.");
575
+ while(_)try {
576
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
577
+ if (y = 0, t) op = [
578
+ op[0] & 2,
579
+ t.value
580
+ ];
581
+ switch(op[0]){
582
+ case 0:
583
+ case 1:
584
+ t = op;
585
+ break;
586
+ case 4:
587
+ _.label++;
588
+ return {
589
+ value: op[1],
590
+ done: false
591
+ };
592
+ case 5:
593
+ _.label++;
594
+ y = op[1];
595
+ op = [
596
+ 0
597
+ ];
598
+ continue;
599
+ case 7:
600
+ op = _.ops.pop();
601
+ _.trys.pop();
602
+ continue;
603
+ default:
604
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) {
605
+ _ = 0;
606
+ continue;
607
+ }
608
+ if (op[0] === 3 && (!t || op[1] > t[0] && op[1] < t[3])) {
609
+ _.label = op[1];
610
+ break;
611
+ }
612
+ if (op[0] === 6 && _.label < t[1]) {
613
+ _.label = t[1];
614
+ t = op;
615
+ break;
616
+ }
617
+ if (t && _.label < t[2]) {
618
+ _.label = t[2];
619
+ _.ops.push(op);
620
+ break;
621
+ }
622
+ if (t[2]) _.ops.pop();
623
+ _.trys.pop();
624
+ continue;
625
+ }
626
+ op = body.call(thisArg, _);
627
+ } catch (e) {
628
+ op = [
629
+ 6,
630
+ e
631
+ ];
632
+ y = 0;
633
+ } finally{
634
+ f = t = 0;
635
+ }
636
+ if (op[0] & 5) throw op[1];
637
+ return {
638
+ value: op[0] ? op[1] : void 0,
639
+ done: true
640
+ };
641
+ }
642
+ }
643
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
644
+ function safeWrapper(callback, disableWarn) {
645
+ return _safeWrapper.apply(this, arguments);
646
+ }
647
+ function _safeWrapper() {
648
+ _safeWrapper = _async_to_generator(function(callback, disableWarn) {
649
+ var res, e;
650
+ return _ts_generator(this, function(_state) {
651
+ switch(_state.label){
652
+ case 0:
653
+ _state.trys.push([
654
+ 0,
655
+ 2,
656
+ ,
657
+ 3
658
+ ]);
659
+ return [
660
+ 4,
661
+ callback()
662
+ ];
663
+ case 1:
664
+ res = _state.sent();
665
+ return [
666
+ 2,
667
+ res
668
+ ];
669
+ case 2:
670
+ e = _state.sent();
671
+ !disableWarn && warn(e);
672
+ return [
673
+ 2
674
+ ];
675
+ case 3:
676
+ return [
677
+ 2
678
+ ];
679
+ }
680
+ });
681
+ });
682
+ return _safeWrapper.apply(this, arguments);
683
+ }
684
+ function isStaticResourcesEqual(url1, url2) {
685
+ var REG_EXP = /^(https?:)?\/\//i;
686
+ // Transform url1 and url2 into relative paths
687
+ var relativeUrl1 = url1.replace(REG_EXP, "").replace(/\/$/, "");
688
+ var relativeUrl2 = url2.replace(REG_EXP, "").replace(/\/$/, "");
689
+ // Check if the relative paths are identical
690
+ return relativeUrl1 === relativeUrl2;
691
+ }
692
+ function createScript(url, cb, attrs, createScriptHook) {
693
+ // Retrieve the existing script element by its src attribute
694
+ var script = null;
695
+ var needAttach = true;
696
+ var scripts = document.getElementsByTagName("script");
697
+ for(var i = 0; i < scripts.length; i++){
698
+ var s = scripts[i];
699
+ var scriptSrc = s.getAttribute("src");
700
+ if (scriptSrc && isStaticResourcesEqual(scriptSrc, url)) {
701
+ script = s;
702
+ needAttach = false;
703
+ break;
704
+ }
705
+ }
706
+ if (!script) {
707
+ script = document.createElement("script");
708
+ script.type = "text/javascript";
709
+ script.src = url;
710
+ if (createScriptHook) {
711
+ var createScriptRes = createScriptHook(url);
712
+ if (_instanceof(createScriptRes, HTMLScriptElement)) {
713
+ script = createScriptRes;
714
+ }
715
+ }
716
+ }
717
+ if (attrs) {
718
+ Object.keys(attrs).forEach(function(name) {
719
+ if (script) {
720
+ if (name === "async" || name === "defer") {
721
+ script[name] = attrs[name];
722
+ } else {
723
+ script.setAttribute(name, attrs[name]);
724
+ }
725
+ }
726
+ });
727
+ }
728
+ var onScriptComplete = function(prev, // eslint-disable-next-line @typescript-eslint/no-explicit-any
729
+ event) {
730
+ // Prevent memory leaks in IE.
731
+ if (script) {
732
+ script.onerror = null;
733
+ script.onload = null;
734
+ safeWrapper(function() {
735
+ (script === null || script === void 0 ? void 0 : script.parentNode) && script.parentNode.removeChild(script);
736
+ });
737
+ if (prev) {
738
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
739
+ var res = prev(event);
740
+ cb();
741
+ return res;
742
+ }
743
+ }
744
+ cb();
745
+ };
746
+ script.onerror = onScriptComplete.bind(null, script.onerror);
747
+ script.onload = onScriptComplete.bind(null, script.onload);
748
+ return {
749
+ script: script,
750
+ needAttach: needAttach
751
+ };
752
+ }
753
+ function loadScript(url, info) {
754
+ var attrs = info.attrs, createScriptHook = info.createScriptHook;
755
+ return new Promise(function(resolve, _reject) {
756
+ var _createScript = createScript(url, resolve, attrs, createScriptHook), script = _createScript.script, needAttach = _createScript.needAttach;
757
+ needAttach && document.getElementsByTagName("head")[0].appendChild(script);
758
+ });
759
+ }
760
+
761
+ export { BROWSER_LOG_KEY, BROWSER_LOG_VALUE, EncodedNameTransformMap, FederationModuleManifest, Logger, MANIFEST_EXT, NameTransformMap, NameTransformSymbol, SEPARATOR, assert, composeKeyWithSeparator, createScript, decodeName, encodeName, error, generateExposeFilename, generateShareFilename, generateSnapshotFromManifest, getProcessEnv, getResourceUrl, isBrowserEnv, isDebugMode, isManifestProvider, isStaticResourcesEqual, loadScript, logger, parseEntry, safeWrapper, warn };
@@ -0,0 +1 @@
1
+ export * from "./src/normalize-webpack-path";
@@ -0,0 +1 @@
1
+ exports._default = require('./normalize-webpack-path.cjs.js').default;
@@ -0,0 +1,42 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var path = require('path');
6
+
7
+ function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
8
+
9
+ var path__default = /*#__PURE__*/_interopDefaultLegacy(path);
10
+
11
+ function getWebpackPath(compiler) {
12
+ try {
13
+ // @ts-ignore just throw err
14
+ compiler.webpack();
15
+ return "";
16
+ } catch (err) {
17
+ var _err_stack;
18
+ var trace = ((_err_stack = err.stack) === null || _err_stack === void 0 ? void 0 : _err_stack.split("\n")) || [];
19
+ var webpackErrLocation = trace.find(function(item) {
20
+ return item.includes("at webpack");
21
+ }) || "";
22
+ var webpackLocationWithDetail = webpackErrLocation.replace(/[^\(\)]+/, "").slice(1, -1);
23
+ var webpackPath = webpackLocationWithDetail.split(":").slice(0, -2)[0];
24
+ return require.resolve("webpack", {
25
+ paths: [
26
+ webpackPath
27
+ ]
28
+ });
29
+ }
30
+ }
31
+ var normalizeWebpackPath = function(fullPath) {
32
+ if (fullPath === "webpack") {
33
+ return process.env["FEDERATION_WEBPACK_PATH"] || fullPath;
34
+ }
35
+ if (process.env["FEDERATION_WEBPACK_PATH"]) {
36
+ return path__default["default"].resolve(process.env["FEDERATION_WEBPACK_PATH"], fullPath.replace("webpack", "../../"));
37
+ }
38
+ return fullPath;
39
+ };
40
+
41
+ exports.getWebpackPath = getWebpackPath;
42
+ exports.normalizeWebpackPath = normalizeWebpackPath;
@@ -0,0 +1,2 @@
1
+ export * from './normalize-webpack-path.cjs.js';
2
+ export { _default as default } from './normalize-webpack-path.cjs.default.js';
@@ -0,0 +1,33 @@
1
+ import path from 'path';
2
+
3
+ function getWebpackPath(compiler) {
4
+ try {
5
+ // @ts-ignore just throw err
6
+ compiler.webpack();
7
+ return "";
8
+ } catch (err) {
9
+ var _err_stack;
10
+ var trace = ((_err_stack = err.stack) === null || _err_stack === void 0 ? void 0 : _err_stack.split("\n")) || [];
11
+ var webpackErrLocation = trace.find(function(item) {
12
+ return item.includes("at webpack");
13
+ }) || "";
14
+ var webpackLocationWithDetail = webpackErrLocation.replace(/[^\(\)]+/, "").slice(1, -1);
15
+ var webpackPath = webpackLocationWithDetail.split(":").slice(0, -2)[0];
16
+ return require.resolve("webpack", {
17
+ paths: [
18
+ webpackPath
19
+ ]
20
+ });
21
+ }
22
+ }
23
+ var normalizeWebpackPath = function(fullPath) {
24
+ if (fullPath === "webpack") {
25
+ return process.env["FEDERATION_WEBPACK_PATH"] || fullPath;
26
+ }
27
+ if (process.env["FEDERATION_WEBPACK_PATH"]) {
28
+ return path.resolve(process.env["FEDERATION_WEBPACK_PATH"], fullPath.replace("webpack", "../../"));
29
+ }
30
+ return fullPath;
31
+ };
32
+
33
+ export { getWebpackPath, normalizeWebpackPath };
package/package.json CHANGED
@@ -1,6 +1,7 @@
1
1
  {
2
2
  "name": "@module-federation/sdk",
3
- "version": "1.0.0-canary.3",
3
+ "version": "1.1.0-canary.1",
4
+ "license": "MIT",
4
5
  "description": "A sdk for support module federation",
5
6
  "keywords": [
6
7
  "Module Federation",
@@ -13,5 +14,18 @@
13
14
  "sideEffects": false,
14
15
  "main": "./index.cjs.js",
15
16
  "module": "./index.esm.js",
16
- "types": "./index.cjs.d.ts"
17
+ "types": "./index.cjs.d.ts",
18
+ "exports": {
19
+ "./package.json": "./package.json",
20
+ ".": {
21
+ "module": "./index.esm.js",
22
+ "import": "./index.cjs.mjs",
23
+ "default": "./index.cjs.js"
24
+ },
25
+ "./normalize-webpack-path": {
26
+ "module": "./normalize-webpack-path.esm.js",
27
+ "import": "./normalize-webpack-path.cjs.mjs",
28
+ "default": "./normalize-webpack-path.cjs.js"
29
+ }
30
+ }
17
31
  }
package/src/dom.d.ts ADDED
@@ -0,0 +1,10 @@
1
+ export declare function safeWrapper<T extends (...args: Array<any>) => any>(callback: T, disableWarn?: boolean): Promise<ReturnType<T> | undefined>;
2
+ export declare function isStaticResourcesEqual(url1: string, url2: string): boolean;
3
+ export declare function createScript(url: string, cb: (value: void | PromiseLike<void>) => void, attrs?: Record<string, any>, createScriptHook?: (url: string) => HTMLScriptElement | void): {
4
+ script: HTMLScriptElement;
5
+ needAttach: boolean;
6
+ };
7
+ export declare function loadScript(url: string, info: {
8
+ attrs?: Record<string, any>;
9
+ createScriptHook?: (url: string) => HTMLScriptElement | void;
10
+ }): Promise<void>;
package/src/index.d.ts CHANGED
@@ -4,3 +4,4 @@ export * from './utils';
4
4
  export { generateSnapshotFromManifest, isManifestProvider, } from './generateSnapshotFromManifest';
5
5
  export * from './logger';
6
6
  export * from './env';
7
+ export * from './dom';
@@ -0,0 +1,3 @@
1
+ import type webpack from 'webpack';
2
+ export declare function getWebpackPath(compiler: webpack.Compiler): string;
3
+ export declare const normalizeWebpackPath: (fullPath: string) => string;
@@ -27,6 +27,8 @@ export interface BasicProviderModuleInfo extends BasicModuleInfo {
27
27
  modulePath?: string;
28
28
  assets: StatsAssets;
29
29
  }>;
30
+ prefetchEntry?: string;
31
+ prefetchEntryType?: RemoteEntryType;
30
32
  }
31
33
  interface BasicProviderModuleInfoWithPublicPath extends BasicProviderModuleInfo {
32
34
  publicPath: string;
@@ -14,6 +14,7 @@ export interface BasicStatsMetaData {
14
14
  globalName: string;
15
15
  buildInfo: StatsBuildInfo;
16
16
  remoteEntry: ResourceInfo;
17
+ prefetchEntry: ResourceInfo;
17
18
  types: Omit<ResourceInfo, 'type'>;
18
19
  }
19
20
  type StatsMetaDataWithGetPublicPath<T = BasicStatsMetaData> = T & {
package/src/utils.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { RemoteEntryInfo } from './types';
1
+ import { RemoteEntryInfo, ModuleInfo } from './types';
2
2
  import { Logger } from './logger';
3
3
  declare const parseEntry: (str: string, devVerOrUrl?: string) => RemoteEntryInfo;
4
4
  declare global {
@@ -10,4 +10,8 @@ declare const encodeName: (name: string, prefix?: string, withExt?: boolean) =>
10
10
  declare const decodeName: (name: string, prefix?: string, withExt?: boolean) => string;
11
11
  declare const generateExposeFilename: (exposeName: string, withExt: boolean) => string;
12
12
  declare const generateShareFilename: (pkgName: string, withExt: boolean) => string;
13
- export { parseEntry, logger, decodeName, encodeName, composeKeyWithSeparator, generateExposeFilename, generateShareFilename, };
13
+ declare const getResourceUrl: (module: ModuleInfo, sourceUrl: string) => string;
14
+ declare const assert: (condition: any, msg: string) => asserts condition;
15
+ declare const error: (msg: string | Error | unknown) => never;
16
+ declare const warn: (msg: Parameters<typeof console.warn>[0]) => void;
17
+ export { parseEntry, logger, decodeName, encodeName, composeKeyWithSeparator, generateExposeFilename, generateShareFilename, getResourceUrl, assert, error, warn, };