@module-federation/runtime 1.0.0-canary.4 → 1.0.1-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/index.cjs.js CHANGED
@@ -3,19 +3,8 @@
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
5
  var share = require('./share.cjs.js');
6
+ var sdk = require('@module-federation/sdk');
6
7
 
7
- // Function to get the URL of a resource
8
- function getResourceUrl(module, sourceUrl) {
9
- if ('getPublicPath' in module) {
10
- const publicPath = new Function(module.getPublicPath)();
11
- return `${publicPath}${sourceUrl}`;
12
- } else if ('publicPath' in module) {
13
- return `${module.publicPath}${sourceUrl}`;
14
- } else {
15
- console.warn('Unable to retrieve resource URL. If in debug mode, this warning can be disregarded.', module, sourceUrl);
16
- return '';
17
- }
18
- }
19
8
  // Function to match a remote with its name and expose
20
9
  // id: pkgName(@federation/app1) + expose(button) = @federation/app1/button
21
10
  // id: alias(app1) + expose(button) = app1/button
@@ -80,75 +69,6 @@ function matchRemote(remotes, nameOrAlias) {
80
69
  return;
81
70
  }
82
71
 
83
- function createScript(url, cb, attrs, createScriptHook) {
84
- // Retrieve the existing script element by its src attribute
85
- let script = null;
86
- let needAttach = true;
87
- const scripts = document.getElementsByTagName('script');
88
- for(let i = 0; i < scripts.length; i++){
89
- const s = scripts[i];
90
- const scriptSrc = s.getAttribute('src');
91
- if (scriptSrc && share.isStaticResourcesEqual(scriptSrc, url)) {
92
- script = s;
93
- needAttach = false;
94
- break;
95
- }
96
- }
97
- if (!script) {
98
- script = document.createElement('script');
99
- script.type = 'text/javascript';
100
- script.src = url;
101
- if (createScriptHook) {
102
- const createScriptRes = createScriptHook(url);
103
- if (createScriptRes instanceof HTMLScriptElement) {
104
- script = createScriptRes;
105
- }
106
- }
107
- }
108
- if (attrs) {
109
- Object.keys(attrs).forEach((name)=>{
110
- if (script) {
111
- if (name === 'async' || name === 'defer') {
112
- script[name] = attrs[name];
113
- } else {
114
- script.setAttribute(name, attrs[name]);
115
- }
116
- }
117
- });
118
- }
119
- const onScriptComplete = (prev, // eslint-disable-next-line @typescript-eslint/no-explicit-any
120
- event)=>{
121
- // Prevent memory leaks in IE.
122
- if (script) {
123
- script.onerror = null;
124
- script.onload = null;
125
- share.safeWrapper(()=>{
126
- (script == null ? void 0 : script.parentNode) && script.parentNode.removeChild(script);
127
- });
128
- if (prev) {
129
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
130
- const res = prev(event);
131
- cb();
132
- return res;
133
- }
134
- }
135
- cb();
136
- };
137
- script.onerror = onScriptComplete.bind(null, script.onerror);
138
- script.onload = onScriptComplete.bind(null, script.onload);
139
- return {
140
- script,
141
- needAttach
142
- };
143
- }
144
- function loadScript(url, info) {
145
- const { attrs, createScriptHook } = info;
146
- return new Promise((resolve, _reject)=>{
147
- const { script, needAttach } = createScript(url, resolve, attrs, createScriptHook);
148
- needAttach && document.getElementsByTagName('head')[0].appendChild(script);
149
- });
150
- }
151
-
152
72
  function registerPlugins(plugins, hookInstances) {
153
73
  const globalPlugins = share.getGlobalHostPlugins();
154
74
  // Incorporate global plugins
@@ -168,347 +88,20 @@ function registerPlugins(plugins, hookInstances) {
168
88
  }
169
89
  }
170
90
 
171
- function _instanceof(left, right) {
172
- if (right != null && typeof Symbol !== "undefined" && right[Symbol.hasInstance]) {
173
- return !!right[Symbol.hasInstance](left);
174
- } else {
175
- return left instanceof right;
176
- }
177
- }
178
- function _define_property$2(obj, key, value) {
179
- if (key in obj) {
180
- Object.defineProperty(obj, key, {
181
- value: value,
182
- enumerable: true,
183
- configurable: true,
184
- writable: true
185
- });
186
- } else {
187
- obj[key] = value;
188
- }
189
- return obj;
190
- }
191
- var MANIFEST_EXT = ".json";
192
- var BROWSER_LOG_KEY = "''";
193
- var BROWSER_LOG_VALUE = "1";
194
- var NameTransformSymbol = {
195
- AT: "@",
196
- HYPHEN: "-",
197
- SLASH: "/"
198
- };
199
- var _obj;
200
- var NameTransformMap = (_obj = {}, _define_property$2(_obj, NameTransformSymbol.AT, "scope_"), _define_property$2(_obj, NameTransformSymbol.HYPHEN, "_"), _define_property$2(_obj, NameTransformSymbol.SLASH, "__"), _obj);
201
- var _obj1;
202
- (_obj1 = {}, _define_property$2(_obj1, NameTransformMap[NameTransformSymbol.AT], NameTransformSymbol.AT), _define_property$2(_obj1, NameTransformMap[NameTransformSymbol.HYPHEN], NameTransformSymbol.HYPHEN), _define_property$2(_obj1, NameTransformMap[NameTransformSymbol.SLASH], NameTransformSymbol.SLASH), _obj1);
203
- var SEPARATOR = ":";
204
- function isBrowserEnv() {
205
- return typeof window !== "undefined";
206
- }
207
- function isDebugMode() {
208
- if (typeof process !== "undefined" && process.env && process.env["''"]) {
209
- return Boolean(process.env["''"]);
210
- }
211
- return Boolean('');
212
- }
213
- function _array_like_to_array$1(arr, len) {
214
- if (len == null || len > arr.length) len = arr.length;
215
- for(var i = 0, arr2 = new Array(len); i < len; i++)arr2[i] = arr[i];
216
- return arr2;
217
- }
218
- function _array_without_holes(arr) {
219
- if (Array.isArray(arr)) return _array_like_to_array$1(arr);
220
- }
221
- function _class_call_check(instance, Constructor) {
222
- if (!_instanceof(instance, Constructor)) {
223
- throw new TypeError("Cannot call a class as a function");
224
- }
225
- }
226
- function _defineProperties(target, props) {
227
- for(var i = 0; i < props.length; i++){
228
- var descriptor = props[i];
229
- descriptor.enumerable = descriptor.enumerable || false;
230
- descriptor.configurable = true;
231
- if ("value" in descriptor) descriptor.writable = true;
232
- Object.defineProperty(target, descriptor.key, descriptor);
233
- }
234
- }
235
- function _create_class(Constructor, protoProps, staticProps) {
236
- if (protoProps) _defineProperties(Constructor.prototype, protoProps);
237
- if (staticProps) _defineProperties(Constructor, staticProps);
238
- return Constructor;
239
- }
240
- function _define_property$1(obj, key, value) {
241
- if (key in obj) {
242
- Object.defineProperty(obj, key, {
243
- value: value,
244
- enumerable: true,
245
- configurable: true,
246
- writable: true
247
- });
248
- } else {
249
- obj[key] = value;
250
- }
251
- return obj;
252
- }
253
- function _iterable_to_array$1(iter) {
254
- if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter);
255
- }
256
- function _non_iterable_spread() {
257
- throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
258
- }
259
- function _to_consumable_array(arr) {
260
- return _array_without_holes(arr) || _iterable_to_array$1(arr) || _unsupported_iterable_to_array$1(arr) || _non_iterable_spread();
261
- }
262
- function _unsupported_iterable_to_array$1(o, minLen) {
263
- if (!o) return;
264
- if (typeof o === "string") return _array_like_to_array$1(o, minLen);
265
- var n = Object.prototype.toString.call(o).slice(8, -1);
266
- if (n === "Object" && o.constructor) n = o.constructor.name;
267
- if (n === "Map" || n === "Set") return Array.from(n);
268
- if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _array_like_to_array$1(o, minLen);
269
- }
270
- function safeToString(info) {
271
- try {
272
- return JSON.stringify(info, null, 2);
273
- } catch (e) {
274
- return "";
275
- }
276
- }
277
- var DEBUG_LOG = "[ FEDERATION DEBUG ]";
278
- var Logger = /*#__PURE__*/ function() {
279
- function Logger(identifier) {
280
- _class_call_check(this, Logger);
281
- _define_property$1(this, "enable", false);
282
- _define_property$1(this, "identifier", void 0);
283
- this.identifier = identifier || DEBUG_LOG;
284
- if (isBrowserEnv() && localStorage.getItem(BROWSER_LOG_KEY) === BROWSER_LOG_VALUE) {
285
- this.enable = true;
286
- } else if (isDebugMode()) {
287
- this.enable = true;
288
- }
289
- }
290
- _create_class(Logger, [
291
- {
292
- key: "info",
293
- value: function info(msg, info) {
294
- if (this.enable) {
295
- var argsToString = safeToString(info) || "";
296
- if (isBrowserEnv()) {
297
- console.info("%c ".concat(this.identifier, ": ").concat(msg, " ").concat(argsToString), "color:#3300CC");
298
- } else {
299
- console.info("\x1b[34m%s", "".concat(this.identifier, ": ").concat(msg, " ").concat(argsToString ? "\n".concat(argsToString) : ""));
300
- }
91
+ function _extends$5() {
92
+ _extends$5 = Object.assign || function(target) {
93
+ for(var i = 1; i < arguments.length; i++){
94
+ var source = arguments[i];
95
+ for(var key in source){
96
+ if (Object.prototype.hasOwnProperty.call(source, key)) {
97
+ target[key] = source[key];
301
98
  }
302
99
  }
303
- },
304
- {
305
- key: "logOriginalInfo",
306
- value: function logOriginalInfo() {
307
- for(var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++){
308
- args[_key] = arguments[_key];
309
- }
310
- if (this.enable) {
311
- if (isBrowserEnv()) {
312
- var _console;
313
- console.info("%c ".concat(this.identifier, ": OriginalInfo"), "color:#3300CC");
314
- (_console = console).log.apply(_console, _to_consumable_array(args));
315
- } else {
316
- var _console1;
317
- console.info("%c ".concat(this.identifier, ": OriginalInfo"), "color:#3300CC");
318
- (_console1 = console).log.apply(_console1, _to_consumable_array(args));
319
- }
320
- }
321
- }
322
- }
323
- ]);
324
- return Logger;
325
- }();
326
- new Logger();
327
- var composeKeyWithSeparator = function composeKeyWithSeparator() {
328
- for(var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++){
329
- args[_key] = arguments[_key];
330
- }
331
- if (!args.length) {
332
- return "";
333
- }
334
- return args.reduce(function(sum, cur) {
335
- if (!cur) {
336
- return sum;
337
- }
338
- if (!sum) {
339
- return cur;
340
- }
341
- return "".concat(sum).concat(SEPARATOR).concat(cur);
342
- }, "");
343
- };
344
- function _define_property(obj, key, value) {
345
- if (key in obj) {
346
- Object.defineProperty(obj, key, {
347
- value: value,
348
- enumerable: true,
349
- configurable: true,
350
- writable: true
351
- });
352
- } else {
353
- obj[key] = value;
354
- }
355
- return obj;
356
- }
357
- function _object_spread(target) {
358
- for(var i = 1; i < arguments.length; i++){
359
- var source = arguments[i] != null ? arguments[i] : {};
360
- var ownKeys = Object.keys(source);
361
- if (typeof Object.getOwnPropertySymbols === "function") {
362
- ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function(sym) {
363
- return Object.getOwnPropertyDescriptor(source, sym).enumerable;
364
- }));
365
- }
366
- ownKeys.forEach(function(key) {
367
- _define_property(target, key, source[key]);
368
- });
369
- }
370
- return target;
371
- }
372
- function ownKeys(object, enumerableOnly) {
373
- var keys = Object.keys(object);
374
- if (Object.getOwnPropertySymbols) {
375
- var symbols = Object.getOwnPropertySymbols(object);
376
- if (enumerableOnly) {
377
- symbols = symbols.filter(function(sym) {
378
- return Object.getOwnPropertyDescriptor(object, sym).enumerable;
379
- });
380
- }
381
- keys.push.apply(keys, symbols);
382
- }
383
- return keys;
384
- }
385
- function _object_spread_props(target, source) {
386
- source = source != null ? source : {};
387
- if (Object.getOwnPropertyDescriptors) {
388
- Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));
389
- } else {
390
- ownKeys(Object(source)).forEach(function(key) {
391
- Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));
392
- });
393
- }
394
- return target;
395
- }
396
- var simpleJoinRemoteEntry = function simpleJoinRemoteEntry(rPath, rName) {
397
- if (!rPath) {
398
- return rName;
399
- }
400
- var transformPath = function transformPath(str) {
401
- if (str === ".") {
402
- return "";
403
- }
404
- if (str.startsWith("./")) {
405
- return str.replace("./", "");
406
- }
407
- if (str.startsWith("/")) {
408
- var strWithoutSlash = str.slice(1);
409
- if (strWithoutSlash.endsWith("/")) {
410
- return strWithoutSlash.slice(0, -1);
411
- }
412
- return strWithoutSlash;
413
100
  }
414
- return str;
101
+ return target;
415
102
  };
416
- var transformedPath = transformPath(rPath);
417
- if (!transformedPath) {
418
- return rName;
419
- }
420
- if (transformedPath.endsWith("/")) {
421
- return "".concat(transformedPath).concat(rName);
422
- }
423
- return "".concat(transformedPath, "/").concat(rName);
424
- };
425
- // Priority: overrides > remotes
426
- // eslint-disable-next-line max-lines-per-function
427
- function generateSnapshotFromManifest(manifest) {
428
- var options = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {};
429
- 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;
430
- var remoteSnapshot;
431
- var getPublicPath = function getPublicPath() {
432
- if ("publicPath" in manifest.metaData) {
433
- return manifest.metaData.publicPath;
434
- } else {
435
- return manifest.metaData.getPublicPath;
436
- }
437
- };
438
- var overridesKeys = Object.keys(overrides);
439
- var remotesInfo = {};
440
- // If remotes are not provided, only the remotes in the manifest will be read
441
- if (!Object.keys(remotes).length) {
442
- var _manifest_remotes;
443
- remotesInfo = ((_manifest_remotes = manifest.remotes) === null || _manifest_remotes === void 0 ? void 0 : _manifest_remotes.reduce(function(res, next) {
444
- var matchedVersion;
445
- var name = next.federationContainerName;
446
- // overrides have higher priority
447
- if (overridesKeys.includes(name)) {
448
- matchedVersion = overrides[name];
449
- } else {
450
- if ("version" in next) {
451
- matchedVersion = next.version;
452
- } else {
453
- matchedVersion = next.entry;
454
- }
455
- }
456
- res[name] = {
457
- matchedVersion: matchedVersion
458
- };
459
- return res;
460
- }, {})) || {};
461
- }
462
- // If remotes (deploy scenario) are specified, they need to be traversed again
463
- Object.keys(remotes).forEach(function(key) {
464
- return remotesInfo[key] = {
465
- // overrides will override dependencies
466
- matchedVersion: overridesKeys.includes(key) ? overrides[key] : remotes[key]
467
- };
468
- });
469
- 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;
470
- var exposes = manifest.exposes;
471
- var basicRemoteSnapshot = {
472
- version: version ? version : "",
473
- buildVersion: buildVersion,
474
- globalName: globalName,
475
- remoteEntry: simpleJoinRemoteEntry(remoteEntryPath, remoteEntryName),
476
- remoteEntryType: remoteEntryType,
477
- remoteTypes: simpleJoinRemoteEntry(remoteTypes.path, remoteTypes.name),
478
- remotesInfo: remotesInfo,
479
- shared: manifest === null || manifest === void 0 ? void 0 : manifest.shared.map(function(item) {
480
- return {
481
- assets: item.assets,
482
- sharedName: item.name
483
- };
484
- }),
485
- modules: exposes === null || exposes === void 0 ? void 0 : exposes.map(function(expose) {
486
- return {
487
- moduleName: expose.name,
488
- modulePath: expose.path,
489
- assets: expose.assets
490
- };
491
- })
492
- };
493
- if ("publicPath" in manifest.metaData) {
494
- remoteSnapshot = _object_spread_props(_object_spread({}, basicRemoteSnapshot), {
495
- publicPath: getPublicPath()
496
- });
497
- } else {
498
- remoteSnapshot = _object_spread_props(_object_spread({}, basicRemoteSnapshot), {
499
- getPublicPath: getPublicPath()
500
- });
501
- }
502
- return remoteSnapshot;
503
- }
504
- function isManifestProvider(moduleInfo) {
505
- if ("remoteEntry" in moduleInfo && moduleInfo.remoteEntry.endsWith(MANIFEST_EXT)) {
506
- return true;
507
- } else {
508
- return false;
509
- }
103
+ return _extends$5.apply(this, arguments);
510
104
  }
511
-
512
105
  async function loadEsmEntry({ entry, remoteEntryExports }) {
513
106
  return new Promise((resolve, reject)=>{
514
107
  try {
@@ -528,7 +121,7 @@ async function loadEntryScript({ name, globalName, entry, createScriptHook }) {
528
121
  if (remoteEntryExports) {
529
122
  return remoteEntryExports;
530
123
  }
531
- return loadScript(entry, {
124
+ return sdk.loadScript(entry, {
532
125
  attrs: {},
533
126
  createScriptHook
534
127
  }).then(()=>{
@@ -544,7 +137,7 @@ async function loadEntryScript({ name, globalName, entry, createScriptHook }) {
544
137
  }
545
138
  async function getRemoteEntry({ remoteEntryExports, remoteInfo, createScriptHook }) {
546
139
  const { entry, name, type, entryGlobalName } = remoteInfo;
547
- const uniqueKey = composeKeyWithSeparator(name, entry);
140
+ const uniqueKey = sdk.composeKeyWithSeparator(name, entry);
548
141
  if (remoteEntryExports) {
549
142
  return remoteEntryExports;
550
143
  }
@@ -566,7 +159,7 @@ async function getRemoteEntry({ remoteEntryExports, remoteInfo, createScriptHook
566
159
  return share.globalLoading[uniqueKey];
567
160
  }
568
161
  function getRemoteInfo(remote) {
569
- return share._extends({}, remote, {
162
+ return _extends$5({}, remote, {
570
163
  entry: 'entry' in remote ? remote.entry : '',
571
164
  type: remote.type || share.DEFAULT_REMOTE_TYPE,
572
165
  entryGlobalName: remote.entryGlobalName || remote.name,
@@ -574,6 +167,20 @@ function getRemoteInfo(remote) {
574
167
  });
575
168
  }
576
169
 
170
+ function _extends$4() {
171
+ _extends$4 = Object.assign || function(target) {
172
+ for(var i = 1; i < arguments.length; i++){
173
+ var source = arguments[i];
174
+ for(var key in source){
175
+ if (Object.prototype.hasOwnProperty.call(source, key)) {
176
+ target[key] = source[key];
177
+ }
178
+ }
179
+ }
180
+ return target;
181
+ };
182
+ return _extends$4.apply(this, arguments);
183
+ }
577
184
  let Module = class Module {
578
185
  async getEntry() {
579
186
  if (this.remoteEntryExports) {
@@ -618,9 +225,9 @@ let Module = class Module {
618
225
  region: this.hostInfo.region
619
226
  };
620
227
  remoteEntryExports.init(shareScope, [], remoteEntryInitOptions);
621
- const federationInstance = share.Global.__FEDERATION__.__INSTANCES__.find((i)=>i.options.id === composeKeyWithSeparator(this.remoteInfo.name, this.remoteInfo.buildVersion));
228
+ const federationInstance = share.Global.__FEDERATION__.__INSTANCES__.find((i)=>i.options.id === sdk.composeKeyWithSeparator(this.remoteInfo.name, this.remoteInfo.buildVersion));
622
229
  if (federationInstance) {
623
- federationInstance.initOptions(share._extends({}, remoteEntryInitOptions, {
230
+ federationInstance.initOptions(_extends$4({}, remoteEntryInitOptions, {
624
231
  remotes: [],
625
232
  name: this.remoteInfo.name
626
233
  }));
@@ -836,11 +443,26 @@ class PluginSystem {
836
443
  }
837
444
  }
838
445
 
446
+ function _extends$3() {
447
+ _extends$3 = Object.assign || function(target) {
448
+ for(var i = 1; i < arguments.length; i++){
449
+ var source = arguments[i];
450
+ for(var key in source){
451
+ if (Object.prototype.hasOwnProperty.call(source, key)) {
452
+ target[key] = source[key];
453
+ }
454
+ }
455
+ }
456
+ return target;
457
+ };
458
+ return _extends$3.apply(this, arguments);
459
+ }
839
460
  function defaultPreloadArgs(preloadConfig) {
840
- return share._extends({
461
+ return _extends$3({
841
462
  resourceCategory: 'sync',
842
463
  share: true,
843
- depsRemote: true
464
+ depsRemote: true,
465
+ prefetchInterface: false
844
466
  }, preloadConfig);
845
467
  }
846
468
  function formatPreloadArgs(remotes, preloadArgs) {
@@ -916,7 +538,7 @@ function preloadAssets(remoteInfo, host, assets) {
916
538
  });
917
539
  document.head.appendChild(fragment);
918
540
  jsAssetsWithoutEntry.forEach((jsUrl)=>{
919
- const { script: scriptEl } = createScript(jsUrl, ()=>{
541
+ const { script: scriptEl } = sdk.createScript(jsUrl, ()=>{
920
542
  // noop
921
543
  }, {}, (url)=>{
922
544
  const res = host.loaderHook.lifecycle.createScript.emit({
@@ -932,12 +554,26 @@ function preloadAssets(remoteInfo, host, assets) {
932
554
  }
933
555
  }
934
556
 
557
+ function _extends$2() {
558
+ _extends$2 = Object.assign || function(target) {
559
+ for(var i = 1; i < arguments.length; i++){
560
+ var source = arguments[i];
561
+ for(var key in source){
562
+ if (Object.prototype.hasOwnProperty.call(source, key)) {
563
+ target[key] = source[key];
564
+ }
565
+ }
566
+ }
567
+ return target;
568
+ };
569
+ return _extends$2.apply(this, arguments);
570
+ }
935
571
  function assignRemoteInfo(remoteInfo, remoteSnapshot) {
936
572
  if (!('remoteEntry' in remoteSnapshot) || !remoteSnapshot.remoteEntry) {
937
573
  share.error(`The attribute remoteEntry of ${name} must not be undefined.`);
938
574
  }
939
575
  const { remoteEntry } = remoteSnapshot;
940
- const entryUrl = getResourceUrl(remoteSnapshot, remoteEntry);
576
+ const entryUrl = sdk.getResourceUrl(remoteSnapshot, remoteEntry);
941
577
  remoteInfo.type = remoteSnapshot.remoteEntryType;
942
578
  remoteInfo.entryGlobalName = remoteSnapshot.globalName;
943
579
  remoteInfo.entry = entryUrl;
@@ -976,6 +612,9 @@ function snapshotPlugin() {
976
612
  if (assets) {
977
613
  preloadAssets(remoteInfo, origin, assets);
978
614
  }
615
+ return _extends$2({}, args, {
616
+ remoteSnapshot
617
+ });
979
618
  }
980
619
  return args;
981
620
  }
@@ -1008,7 +647,7 @@ function traverseModuleInfo(globalSnapshot, remoteInfo, traverse, isRoot, memo =
1008
647
  const id = share.getFMId(remoteInfo);
1009
648
  const { value: snapshotValue } = share.getInfoWithoutType(globalSnapshot, id, getModuleInfoHook);
1010
649
  const effectiveRemoteSnapshot = remoteSnapshot || snapshotValue;
1011
- if (effectiveRemoteSnapshot && !isManifestProvider(effectiveRemoteSnapshot)) {
650
+ if (effectiveRemoteSnapshot && !sdk.isManifestProvider(effectiveRemoteSnapshot)) {
1012
651
  traverse(effectiveRemoteSnapshot, remoteInfo, isRoot);
1013
652
  if (effectiveRemoteSnapshot.remotesInfo) {
1014
653
  const remoteKeys = Object.keys(effectiveRemoteSnapshot.remotesInfo);
@@ -1061,7 +700,7 @@ function generatePreloadAssets(origin, preloadOptions, remote, globalSnapshot, r
1061
700
  return;
1062
701
  }
1063
702
  }
1064
- const remoteEntryUrl = getResourceUrl(moduleInfoSnapshot, 'remoteEntry' in moduleInfoSnapshot ? moduleInfoSnapshot.remoteEntry : '');
703
+ const remoteEntryUrl = sdk.getResourceUrl(moduleInfoSnapshot, 'remoteEntry' in moduleInfoSnapshot ? moduleInfoSnapshot.remoteEntry : '');
1065
704
  if (remoteEntryUrl) {
1066
705
  entryAssets.push({
1067
706
  name: remoteInfo.name,
@@ -1088,7 +727,7 @@ function generatePreloadAssets(origin, preloadOptions, remote, globalSnapshot, r
1088
727
  }, []);
1089
728
  }
1090
729
  function handleAssets(assets) {
1091
- const assetsRes = assets.map((asset)=>getResourceUrl(moduleInfoSnapshot, asset));
730
+ const assetsRes = assets.map((asset)=>sdk.getResourceUrl(moduleInfoSnapshot, asset));
1092
731
  if (preloadConfig.filter) {
1093
732
  return assetsRes.filter(preloadConfig.filter);
1094
733
  }
@@ -1099,6 +738,12 @@ function generatePreloadAssets(origin, preloadOptions, remote, globalSnapshot, r
1099
738
  for(let index = 0; index < assetsLength; index++){
1100
739
  const assetsInfo = moduleAssetsInfo[index];
1101
740
  const exposeFullPath = `${remoteInfo.name}/${assetsInfo.moduleName}`;
741
+ origin.hooks.lifecycle.handlePreloadModule.emit({
742
+ id: assetsInfo.moduleName === '.' ? remoteInfo.name : exposeFullPath,
743
+ name: remoteInfo.name,
744
+ remoteSnapshot: moduleInfoSnapshot,
745
+ preloadConfig
746
+ });
1102
747
  const preloaded = share.getPreloaded(exposeFullPath);
1103
748
  if (preloaded) {
1104
749
  continue;
@@ -1185,6 +830,20 @@ const generatePreloadAssetsPlugin = function() {
1185
830
  };
1186
831
  };
1187
832
 
833
+ function _extends$1() {
834
+ _extends$1 = Object.assign || function(target) {
835
+ for(var i = 1; i < arguments.length; i++){
836
+ var source = arguments[i];
837
+ for(var key in source){
838
+ if (Object.prototype.hasOwnProperty.call(source, key)) {
839
+ target[key] = source[key];
840
+ }
841
+ }
842
+ }
843
+ return target;
844
+ };
845
+ return _extends$1.apply(this, arguments);
846
+ }
1188
847
  class SnapshotHandler {
1189
848
  async loadSnapshot(moduleInfo) {
1190
849
  const { options } = this.HostInstance;
@@ -1236,7 +895,7 @@ class SnapshotHandler {
1236
895
  return;
1237
896
  }).value) {
1238
897
  if ('version' in moduleInfo || 'entry' in moduleInfo) {
1239
- hostSnapshot.remotesInfo = share._extends({}, hostSnapshot == null ? void 0 : hostSnapshot.remotesInfo, {
898
+ hostSnapshot.remotesInfo = _extends$1({}, hostSnapshot == null ? void 0 : hostSnapshot.remotesInfo, {
1240
899
  [moduleInfo.name]: {
1241
900
  matchedVersion: 'version' in moduleInfo ? moduleInfo.version : moduleInfo.entry
1242
901
  }
@@ -1253,10 +912,10 @@ class SnapshotHandler {
1253
912
  });
1254
913
  // global snapshot includes manifest or module info includes manifest
1255
914
  if (globalRemoteSnapshot) {
1256
- if (isManifestProvider(globalRemoteSnapshot)) {
915
+ if (sdk.isManifestProvider(globalRemoteSnapshot)) {
1257
916
  const moduleSnapshot = await this.getManifestJson(globalRemoteSnapshot.remoteEntry, moduleInfo, {});
1258
917
  // eslint-disable-next-line @typescript-eslint/no-shadow
1259
- const globalSnapshotRes = share.setGlobalSnapshotInfoByModuleInfo(share._extends({}, moduleInfo), moduleSnapshot);
918
+ const globalSnapshotRes = share.setGlobalSnapshotInfoByModuleInfo(_extends$1({}, moduleInfo), moduleSnapshot);
1260
919
  return {
1261
920
  remoteSnapshot: moduleSnapshot,
1262
921
  globalSnapshot: globalSnapshotRes
@@ -1387,7 +1046,7 @@ class SnapshotHandler {
1387
1046
  };
1388
1047
  const asyncLoadProcess = async ()=>{
1389
1048
  const manifestJson = await getManifest();
1390
- const remoteSnapshot = generateSnapshotFromManifest(manifestJson, {
1049
+ const remoteSnapshot = sdk.generateSnapshotFromManifest(manifestJson, {
1391
1050
  version: manifestUrl
1392
1051
  });
1393
1052
  const { remoteSnapshot: remoteSnapshotRes } = await this.hooks.lifecycle.loadRemoteSnapshot.emit({
@@ -1418,6 +1077,32 @@ class SnapshotHandler {
1418
1077
  }
1419
1078
  }
1420
1079
 
1080
+ function _extends() {
1081
+ _extends = Object.assign || function(target) {
1082
+ for(var i = 1; i < arguments.length; i++){
1083
+ var source = arguments[i];
1084
+ for(var key in source){
1085
+ if (Object.prototype.hasOwnProperty.call(source, key)) {
1086
+ target[key] = source[key];
1087
+ }
1088
+ }
1089
+ }
1090
+ return target;
1091
+ };
1092
+ return _extends.apply(this, arguments);
1093
+ }
1094
+ function _object_without_properties_loose(source, excluded) {
1095
+ if (source == null) return {};
1096
+ var target = {};
1097
+ var sourceKeys = Object.keys(source);
1098
+ var key, i;
1099
+ for(i = 0; i < sourceKeys.length; i++){
1100
+ key = sourceKeys[i];
1101
+ if (excluded.indexOf(key) >= 0) continue;
1102
+ target[key] = source[key];
1103
+ }
1104
+ return target;
1105
+ }
1421
1106
  class FederationHost {
1422
1107
  initOptions(userOptions) {
1423
1108
  this.registerPlugins(userOptions.plugins);
@@ -1559,13 +1244,15 @@ class FederationHost {
1559
1244
  const remoteSplitInfo = matchRemoteWithNameAndExpose(this.options.remotes, idRes);
1560
1245
  share.assert(remoteSplitInfo, `
1561
1246
  Unable to locate ${idRes} in ${this.options.name}. Potential reasons for failure include:\n
1562
- 1. ${idRes} was not included in the 'remotes' parameter of ${this.options.name}.\n
1247
+ 1. ${idRes} was not included in the 'remotes' parameter of ${this.options.name || 'the host'}.\n
1563
1248
  2. ${idRes} could not be found in the 'remotes' of ${this.options.name} with either 'name' or 'alias' attributes.
1564
- 3. The 'beforeLoadRemote' hook was provided but did not return the correct 'remoteInfo' when attempting to load ${idRes}.
1249
+ 3. ${idRes} is not online, injected, or loaded.
1250
+ 4. ${idRes} cannot be accessed on the expected.
1251
+ 5. The 'beforeLoadRemote' hook was provided but did not return the correct 'remoteInfo' when attempting to load ${idRes}.
1565
1252
  `);
1566
1253
  const { remote: rawRemote } = remoteSplitInfo;
1567
1254
  const remoteInfo = getRemoteInfo(rawRemote);
1568
- const matchInfo = await this.hooks.lifecycle.loadRemoteMatch.emit(share._extends({
1255
+ const matchInfo = await this.hooks.lifecycle.loadRemoteMatch.emit(_extends({
1569
1256
  id: idRes
1570
1257
  }, remoteSplitInfo, {
1571
1258
  options: this.options,
@@ -1712,7 +1399,7 @@ class FederationHost {
1712
1399
  }
1713
1400
  formatOptions(globalOptions, userOptions) {
1714
1401
  const formatShareOptions = share.formatShareConfigs(userOptions.shared || {}, userOptions.name);
1715
- const shared = share._extends({}, globalOptions.shared, formatShareOptions);
1402
+ const shared = _extends({}, globalOptions.shared, formatShareOptions);
1716
1403
  const { userOptions: userOptionsRes, options: globalOptionsRes } = this.hooks.lifecycle.beforeInit.emit({
1717
1404
  origin: this,
1718
1405
  userOptions,
@@ -1773,7 +1460,7 @@ class FederationHost {
1773
1460
  }
1774
1461
  });
1775
1462
  }
1776
- const optionsRes = share._extends({}, globalOptions, userOptions, {
1463
+ const optionsRes = _extends({}, globalOptions, userOptions, {
1777
1464
  plugins,
1778
1465
  remotes,
1779
1466
  shared
@@ -1793,7 +1480,7 @@ class FederationHost {
1793
1480
  }
1794
1481
  setShared({ pkgName, shared, from, lib, loading, loaded, get }) {
1795
1482
  const target = share.getGlobalShareScope();
1796
- const { version, scope = 'default' } = shared, shareInfo = share._object_without_properties_loose(shared, [
1483
+ const { version, scope = 'default' } = shared, shareInfo = _object_without_properties_loose(shared, [
1797
1484
  "version",
1798
1485
  "scope"
1799
1486
  ]);
@@ -1817,7 +1504,7 @@ class FederationHost {
1817
1504
  })} has been registered`);
1818
1505
  return;
1819
1506
  }
1820
- target[sc][pkgName][version] = share._extends({
1507
+ target[sc][pkgName][version] = _extends({
1821
1508
  version,
1822
1509
  scope: [
1823
1510
  'default'
@@ -1839,6 +1526,7 @@ class FederationHost {
1839
1526
  beforeLoadRemote: new AsyncWaterfallHook('beforeLoadRemote'),
1840
1527
  loadRemoteMatch: new AsyncWaterfallHook('loadRemoteMatch'),
1841
1528
  loadRemote: new AsyncHook('loadRemote'),
1529
+ handlePreloadModule: new SyncHook('handlePreloadModule'),
1842
1530
  errorLoadRemote: new AsyncHook('errorLoadRemote'),
1843
1531
  beforeLoadShare: new AsyncWaterfallHook('beforeLoadShare'),
1844
1532
  loadShare: new AsyncHook(),
@@ -1846,7 +1534,7 @@ class FederationHost {
1846
1534
  generatePreloadAssets: new AsyncHook('generatePreloadAssets'),
1847
1535
  afterPreloadRemote: new AsyncHook()
1848
1536
  });
1849
- this.version = '1.0.0-canary.3';
1537
+ this.version = '1.0.0-canary.1';
1850
1538
  this.moduleCache = new Map();
1851
1539
  this.loaderHook = new PluginSystem({
1852
1540
  // FIXME: may not be suitable
@@ -1921,7 +1609,6 @@ exports.registerGlobalPlugins = share.registerGlobalPlugins;
1921
1609
  exports.FederationHost = FederationHost;
1922
1610
  exports.init = init;
1923
1611
  exports.loadRemote = loadRemote;
1924
- exports.loadScript = loadScript;
1925
1612
  exports.loadShare = loadShare;
1926
1613
  exports.loadShareSync = loadShareSync;
1927
1614
  exports.preloadRemote = preloadRemote;