@module-federation/runtime 0.0.0-next-20240115064607 → 0.0.0-next-20240117121934

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.
@@ -1,4 +1,4 @@
1
- import { l as getRegisteredShare, t as getGlobalShareScope, G as Global, F as nativeGlobal, H as resetFederationGlobalInfo, A as getGlobalFederationInstance, C as setGlobalFederationInstance, B as getGlobalFederationConstructor, z as setGlobalFederationConstructor, m as getInfoWithoutType, r as getGlobalSnapshot, I as getTargetSnapshotInfoByModuleInfo, p as getGlobalSnapshotInfoByModuleInfo, q as setGlobalSnapshotInfoByModuleInfo, J as addGlobalSnapshot, c as getRemoteEntryExports, E as registerGlobalPlugins, g as getGlobalHostPlugins, n as getPreloaded, o as setPreloaded } from './share.esm.js';
1
+ import { l as getRegisteredShare, u as getGlobalShareScope, G as Global, H as nativeGlobal, I as resetFederationGlobalInfo, B as getGlobalFederationInstance, E as setGlobalFederationInstance, C as getGlobalFederationConstructor, A as setGlobalFederationConstructor, m as getInfoWithoutType, t as getGlobalSnapshot, J as getTargetSnapshotInfoByModuleInfo, p as getGlobalSnapshotInfoByModuleInfo, r as setGlobalSnapshotInfoByModuleInfo, q as addGlobalSnapshot, c as getRemoteEntryExports, F as registerGlobalPlugins, g as getGlobalHostPlugins, n as getPreloaded, o as setPreloaded } from './share.esm.js';
2
2
 
3
3
  const ShareUtils = {
4
4
  getRegisteredShare,
package/dist/index.cjs.js CHANGED
@@ -674,9 +674,9 @@ function splitId(id) {
674
674
  }
675
675
  }
676
676
  // Traverse all nodes in moduleInfo and traverse the entire snapshot
677
- function traverseModuleInfo(globalSnapshot, remoteInfo, traverse, isRoot, memo = {}, remoteSnapshot, getModuleInfoHook) {
677
+ function traverseModuleInfo(globalSnapshot, remoteInfo, traverse, isRoot, memo = {}, remoteSnapshot) {
678
678
  const id = share.getFMId(remoteInfo);
679
- const { value: snapshotValue } = share.getInfoWithoutType(globalSnapshot, id, getModuleInfoHook);
679
+ const { value: snapshotValue } = share.getInfoWithoutType(globalSnapshot, id);
680
680
  const effectiveRemoteSnapshot = remoteSnapshot || snapshotValue;
681
681
  if (effectiveRemoteSnapshot && !sdk.isManifestProvider(effectiveRemoteSnapshot)) {
682
682
  traverse(effectiveRemoteSnapshot, remoteInfo, isRoot);
@@ -692,7 +692,7 @@ function traverseModuleInfo(globalSnapshot, remoteInfo, traverse, isRoot, memo =
692
692
  traverseModuleInfo(globalSnapshot, {
693
693
  name: subRemoteInfo.name,
694
694
  version: remoteValue.matchedVersion
695
- }, traverse, false, memo, undefined, getModuleInfoHook);
695
+ }, traverse, false, memo, undefined);
696
696
  }
697
697
  }
698
698
  }
@@ -792,16 +792,7 @@ function generatePreloadAssets(origin, preloadOptions, remote, globalSnapshot, r
792
792
  share.setPreloaded(exposeFullPath);
793
793
  }
794
794
  }
795
- }, true, memo, remoteSnapshot, (target, key)=>{
796
- const res = origin.loaderHook.lifecycle.getModuleInfo.emit({
797
- target,
798
- key
799
- });
800
- if (res && !(res instanceof Promise)) {
801
- return res;
802
- }
803
- return;
804
- });
795
+ }, true, memo, remoteSnapshot);
805
796
  if (remoteSnapshot.shared) {
806
797
  remoteSnapshot.shared.forEach((shared)=>{
807
798
  var _options_shared;
@@ -894,37 +885,27 @@ class SnapshotHandler {
894
885
  // eslint-disable-next-line max-lines-per-function
895
886
  async loadRemoteSnapshotInfo(moduleInfo) {
896
887
  const { options } = this.HostInstance;
897
- const hostSnapshot = share.getGlobalSnapshotInfoByModuleInfo({
898
- name: this.HostInstance.options.name,
899
- version: this.HostInstance.options.version
900
- }, {
901
- getModuleInfoHook: (target, key)=>{
902
- const res = this.HostInstance.loaderHook.lifecycle.getModuleInfo.emit({
903
- target,
904
- key
905
- });
906
- if (res && !(res instanceof Promise)) {
907
- return res;
908
- }
909
- return;
910
- }
911
- });
912
888
  await this.hooks.lifecycle.beforeLoadRemoteSnapshot.emit({
913
889
  options,
914
890
  moduleInfo
915
891
  });
892
+ let hostSnapshot = share.getGlobalSnapshotInfoByModuleInfo({
893
+ name: this.HostInstance.options.name,
894
+ version: this.HostInstance.options.version
895
+ });
896
+ if (!hostSnapshot) {
897
+ hostSnapshot = {
898
+ version: this.HostInstance.options.version || '',
899
+ remoteEntry: '',
900
+ remotesInfo: {}
901
+ };
902
+ share.addGlobalSnapshot({
903
+ [this.HostInstance.options.name]: hostSnapshot
904
+ });
905
+ }
916
906
  // In dynamic loadRemote scenarios, incomplete remotesInfo delivery may occur. In such cases, the remotesInfo in the host needs to be completed in the snapshot at runtime.
917
907
  // This ensures the snapshot's integrity and helps the chrome plugin correctly identify all producer modules, ensuring that proxyable producer modules will not be missing.
918
- if (hostSnapshot && 'remotesInfo' in hostSnapshot && !share.getInfoWithoutType(hostSnapshot.remotesInfo, moduleInfo.name, (target, key)=>{
919
- const res = this.HostInstance.loaderHook.lifecycle.getModuleInfo.emit({
920
- target,
921
- key
922
- });
923
- if (res && !(res instanceof Promise)) {
924
- return res;
925
- }
926
- return;
927
- }).value) {
908
+ if (hostSnapshot && 'remotesInfo' in hostSnapshot && !share.getInfoWithoutType(hostSnapshot.remotesInfo, moduleInfo.name).value) {
928
909
  if ('version' in moduleInfo || 'entry' in moduleInfo) {
929
910
  hostSnapshot.remotesInfo = _extends$1({}, hostSnapshot == null ? void 0 : hostSnapshot.remotesInfo, {
930
911
  [moduleInfo.name]: {
@@ -993,29 +974,9 @@ class SnapshotHandler {
993
974
  const hostGlobalSnapshot = share.getGlobalSnapshotInfoByModuleInfo({
994
975
  name: this.HostInstance.options.name,
995
976
  version: this.HostInstance.options.version
996
- }, {
997
- getModuleInfoHook: (target, key)=>{
998
- const res = this.HostInstance.loaderHook.lifecycle.getModuleInfo.emit({
999
- target,
1000
- key
1001
- });
1002
- if (res && !(res instanceof Promise)) {
1003
- return res;
1004
- }
1005
- return;
1006
- }
1007
977
  });
1008
978
  // get remote detail info from global
1009
- const globalRemoteInfo = hostGlobalSnapshot && 'remotesInfo' in hostGlobalSnapshot && hostGlobalSnapshot.remotesInfo && share.getInfoWithoutType(hostGlobalSnapshot.remotesInfo, moduleInfo.name, (target, key)=>{
1010
- const res = this.HostInstance.loaderHook.lifecycle.getModuleInfo.emit({
1011
- target,
1012
- key
1013
- });
1014
- if (res && !(res instanceof Promise)) {
1015
- return res;
1016
- }
1017
- return;
1018
- }).value;
979
+ const globalRemoteInfo = hostGlobalSnapshot && 'remotesInfo' in hostGlobalSnapshot && hostGlobalSnapshot.remotesInfo && share.getInfoWithoutType(hostGlobalSnapshot.remotesInfo, moduleInfo.name).value;
1019
980
  if (globalRemoteInfo && globalRemoteInfo.matchedVersion) {
1020
981
  return {
1021
982
  hostGlobalSnapshot,
@@ -1023,17 +984,6 @@ class SnapshotHandler {
1023
984
  remoteSnapshot: share.getGlobalSnapshotInfoByModuleInfo({
1024
985
  name: moduleInfo.name,
1025
986
  version: globalRemoteInfo.matchedVersion
1026
- }, {
1027
- getModuleInfoHook: (target, key)=>{
1028
- const res = this.HostInstance.loaderHook.lifecycle.getModuleInfo.emit({
1029
- target,
1030
- key
1031
- });
1032
- if (res && !(res instanceof Promise)) {
1033
- return res;
1034
- }
1035
- return;
1036
- }
1037
987
  })
1038
988
  };
1039
989
  }
@@ -1043,17 +993,6 @@ class SnapshotHandler {
1043
993
  remoteSnapshot: share.getGlobalSnapshotInfoByModuleInfo({
1044
994
  name: moduleInfo.name,
1045
995
  version: 'version' in moduleInfo ? moduleInfo.version : undefined
1046
- }, {
1047
- getModuleInfoHook: (target, key)=>{
1048
- const res = this.HostInstance.loaderHook.lifecycle.getModuleInfo.emit({
1049
- target,
1050
- key
1051
- });
1052
- if (res && !(res instanceof Promise)) {
1053
- return res;
1054
- }
1055
- return;
1056
- }
1057
996
  })
1058
997
  };
1059
998
  }
@@ -1518,7 +1457,7 @@ class FederationHost {
1518
1457
  }
1519
1458
  // Set the remote entry to a complete path
1520
1459
  if ('entry' in remote) {
1521
- if (share.isBrowserEnv() && !remote.entry.startsWith('http')) {
1460
+ if (share.isBrowserEnv()) {
1522
1461
  remote.entry = new URL(remote.entry, window.location.origin).href;
1523
1462
  }
1524
1463
  }
package/dist/index.esm.js CHANGED
@@ -1,5 +1,5 @@
1
- import { g as getGlobalHostPlugins, D as DEFAULT_REMOTE_TYPE, a as DEFAULT_SCOPE, b as globalLoading, c as getRemoteEntryExports, d as assert, s as safeToString, e as getFMId, i as isObject, f as error, w as warn, h as isPlainObject, j as isRemoteInfoWithEntry, k as isPureRemoteEntry, l as getRegisteredShare, m as getInfoWithoutType, n as getPreloaded, o as setPreloaded, p as getGlobalSnapshotInfoByModuleInfo, q as setGlobalSnapshotInfoByModuleInfo, r as getGlobalSnapshot, G as Global, t as getGlobalShareScope, u as formatShareConfigs, v as isBrowserEnv, x as getBuilderId, y as addUniqueItem, z as setGlobalFederationConstructor, A as getGlobalFederationInstance, B as getGlobalFederationConstructor, C as setGlobalFederationInstance } from './share.esm.js';
2
- export { E as registerGlobalPlugins } from './share.esm.js';
1
+ import { g as getGlobalHostPlugins, D as DEFAULT_REMOTE_TYPE, a as DEFAULT_SCOPE, b as globalLoading, c as getRemoteEntryExports, d as assert, s as safeToString, e as getFMId, i as isObject, f as error, w as warn, h as isPlainObject, j as isRemoteInfoWithEntry, k as isPureRemoteEntry, l as getRegisteredShare, m as getInfoWithoutType, n as getPreloaded, o as setPreloaded, p as getGlobalSnapshotInfoByModuleInfo, q as addGlobalSnapshot, r as setGlobalSnapshotInfoByModuleInfo, t as getGlobalSnapshot, G as Global, u as getGlobalShareScope, v as formatShareConfigs, x as isBrowserEnv, y as getBuilderId, z as addUniqueItem, A as setGlobalFederationConstructor, B as getGlobalFederationInstance, C as getGlobalFederationConstructor, E as setGlobalFederationInstance } from './share.esm.js';
2
+ export { F as registerGlobalPlugins } from './share.esm.js';
3
3
  import { composeKeyWithSeparator, loadScriptNode, loadScript, createScript, getResourceUrl, isManifestProvider, generateSnapshotFromManifest } from '@module-federation/sdk';
4
4
  export { loadScript } from '@module-federation/sdk';
5
5
 
@@ -672,9 +672,9 @@ function splitId(id) {
672
672
  }
673
673
  }
674
674
  // Traverse all nodes in moduleInfo and traverse the entire snapshot
675
- function traverseModuleInfo(globalSnapshot, remoteInfo, traverse, isRoot, memo = {}, remoteSnapshot, getModuleInfoHook) {
675
+ function traverseModuleInfo(globalSnapshot, remoteInfo, traverse, isRoot, memo = {}, remoteSnapshot) {
676
676
  const id = getFMId(remoteInfo);
677
- const { value: snapshotValue } = getInfoWithoutType(globalSnapshot, id, getModuleInfoHook);
677
+ const { value: snapshotValue } = getInfoWithoutType(globalSnapshot, id);
678
678
  const effectiveRemoteSnapshot = remoteSnapshot || snapshotValue;
679
679
  if (effectiveRemoteSnapshot && !isManifestProvider(effectiveRemoteSnapshot)) {
680
680
  traverse(effectiveRemoteSnapshot, remoteInfo, isRoot);
@@ -690,7 +690,7 @@ function traverseModuleInfo(globalSnapshot, remoteInfo, traverse, isRoot, memo =
690
690
  traverseModuleInfo(globalSnapshot, {
691
691
  name: subRemoteInfo.name,
692
692
  version: remoteValue.matchedVersion
693
- }, traverse, false, memo, undefined, getModuleInfoHook);
693
+ }, traverse, false, memo, undefined);
694
694
  }
695
695
  }
696
696
  }
@@ -790,16 +790,7 @@ function generatePreloadAssets(origin, preloadOptions, remote, globalSnapshot, r
790
790
  setPreloaded(exposeFullPath);
791
791
  }
792
792
  }
793
- }, true, memo, remoteSnapshot, (target, key)=>{
794
- const res = origin.loaderHook.lifecycle.getModuleInfo.emit({
795
- target,
796
- key
797
- });
798
- if (res && !(res instanceof Promise)) {
799
- return res;
800
- }
801
- return;
802
- });
793
+ }, true, memo, remoteSnapshot);
803
794
  if (remoteSnapshot.shared) {
804
795
  remoteSnapshot.shared.forEach((shared)=>{
805
796
  var _options_shared;
@@ -892,37 +883,27 @@ class SnapshotHandler {
892
883
  // eslint-disable-next-line max-lines-per-function
893
884
  async loadRemoteSnapshotInfo(moduleInfo) {
894
885
  const { options } = this.HostInstance;
895
- const hostSnapshot = getGlobalSnapshotInfoByModuleInfo({
896
- name: this.HostInstance.options.name,
897
- version: this.HostInstance.options.version
898
- }, {
899
- getModuleInfoHook: (target, key)=>{
900
- const res = this.HostInstance.loaderHook.lifecycle.getModuleInfo.emit({
901
- target,
902
- key
903
- });
904
- if (res && !(res instanceof Promise)) {
905
- return res;
906
- }
907
- return;
908
- }
909
- });
910
886
  await this.hooks.lifecycle.beforeLoadRemoteSnapshot.emit({
911
887
  options,
912
888
  moduleInfo
913
889
  });
890
+ let hostSnapshot = getGlobalSnapshotInfoByModuleInfo({
891
+ name: this.HostInstance.options.name,
892
+ version: this.HostInstance.options.version
893
+ });
894
+ if (!hostSnapshot) {
895
+ hostSnapshot = {
896
+ version: this.HostInstance.options.version || '',
897
+ remoteEntry: '',
898
+ remotesInfo: {}
899
+ };
900
+ addGlobalSnapshot({
901
+ [this.HostInstance.options.name]: hostSnapshot
902
+ });
903
+ }
914
904
  // In dynamic loadRemote scenarios, incomplete remotesInfo delivery may occur. In such cases, the remotesInfo in the host needs to be completed in the snapshot at runtime.
915
905
  // This ensures the snapshot's integrity and helps the chrome plugin correctly identify all producer modules, ensuring that proxyable producer modules will not be missing.
916
- if (hostSnapshot && 'remotesInfo' in hostSnapshot && !getInfoWithoutType(hostSnapshot.remotesInfo, moduleInfo.name, (target, key)=>{
917
- const res = this.HostInstance.loaderHook.lifecycle.getModuleInfo.emit({
918
- target,
919
- key
920
- });
921
- if (res && !(res instanceof Promise)) {
922
- return res;
923
- }
924
- return;
925
- }).value) {
906
+ if (hostSnapshot && 'remotesInfo' in hostSnapshot && !getInfoWithoutType(hostSnapshot.remotesInfo, moduleInfo.name).value) {
926
907
  if ('version' in moduleInfo || 'entry' in moduleInfo) {
927
908
  hostSnapshot.remotesInfo = _extends$1({}, hostSnapshot == null ? void 0 : hostSnapshot.remotesInfo, {
928
909
  [moduleInfo.name]: {
@@ -991,29 +972,9 @@ class SnapshotHandler {
991
972
  const hostGlobalSnapshot = getGlobalSnapshotInfoByModuleInfo({
992
973
  name: this.HostInstance.options.name,
993
974
  version: this.HostInstance.options.version
994
- }, {
995
- getModuleInfoHook: (target, key)=>{
996
- const res = this.HostInstance.loaderHook.lifecycle.getModuleInfo.emit({
997
- target,
998
- key
999
- });
1000
- if (res && !(res instanceof Promise)) {
1001
- return res;
1002
- }
1003
- return;
1004
- }
1005
975
  });
1006
976
  // get remote detail info from global
1007
- const globalRemoteInfo = hostGlobalSnapshot && 'remotesInfo' in hostGlobalSnapshot && hostGlobalSnapshot.remotesInfo && getInfoWithoutType(hostGlobalSnapshot.remotesInfo, moduleInfo.name, (target, key)=>{
1008
- const res = this.HostInstance.loaderHook.lifecycle.getModuleInfo.emit({
1009
- target,
1010
- key
1011
- });
1012
- if (res && !(res instanceof Promise)) {
1013
- return res;
1014
- }
1015
- return;
1016
- }).value;
977
+ const globalRemoteInfo = hostGlobalSnapshot && 'remotesInfo' in hostGlobalSnapshot && hostGlobalSnapshot.remotesInfo && getInfoWithoutType(hostGlobalSnapshot.remotesInfo, moduleInfo.name).value;
1017
978
  if (globalRemoteInfo && globalRemoteInfo.matchedVersion) {
1018
979
  return {
1019
980
  hostGlobalSnapshot,
@@ -1021,17 +982,6 @@ class SnapshotHandler {
1021
982
  remoteSnapshot: getGlobalSnapshotInfoByModuleInfo({
1022
983
  name: moduleInfo.name,
1023
984
  version: globalRemoteInfo.matchedVersion
1024
- }, {
1025
- getModuleInfoHook: (target, key)=>{
1026
- const res = this.HostInstance.loaderHook.lifecycle.getModuleInfo.emit({
1027
- target,
1028
- key
1029
- });
1030
- if (res && !(res instanceof Promise)) {
1031
- return res;
1032
- }
1033
- return;
1034
- }
1035
985
  })
1036
986
  };
1037
987
  }
@@ -1041,17 +991,6 @@ class SnapshotHandler {
1041
991
  remoteSnapshot: getGlobalSnapshotInfoByModuleInfo({
1042
992
  name: moduleInfo.name,
1043
993
  version: 'version' in moduleInfo ? moduleInfo.version : undefined
1044
- }, {
1045
- getModuleInfoHook: (target, key)=>{
1046
- const res = this.HostInstance.loaderHook.lifecycle.getModuleInfo.emit({
1047
- target,
1048
- key
1049
- });
1050
- if (res && !(res instanceof Promise)) {
1051
- return res;
1052
- }
1053
- return;
1054
- }
1055
994
  })
1056
995
  };
1057
996
  }
@@ -1516,7 +1455,7 @@ class FederationHost {
1516
1455
  }
1517
1456
  // Set the remote entry to a complete path
1518
1457
  if ('entry' in remote) {
1519
- if (isBrowserEnv() && !remote.entry.startsWith('http')) {
1458
+ if (isBrowserEnv()) {
1520
1459
  remote.entry = new URL(remote.entry, window.location.origin).href;
1521
1460
  }
1522
1461
  }
package/dist/share.cjs.js CHANGED
@@ -168,29 +168,48 @@ function setGlobalFederationInstance(FederationInstance) {
168
168
  function getGlobalFederationConstructor() {
169
169
  return globalThis.__FEDERATION__.__DEBUG_CONSTRUCTOR__;
170
170
  }
171
- function setGlobalFederationConstructor(FederationConstructor) {
172
- if (isDebugMode()) {
171
+ function setGlobalFederationConstructor(FederationConstructor, isDebug = isDebugMode()) {
172
+ if (isDebug) {
173
173
  globalThis.__FEDERATION__.__DEBUG_CONSTRUCTOR__ = FederationConstructor;
174
174
  globalThis.__FEDERATION__.__DEBUG_CONSTRUCTOR_VERSION__ = "0.0.8";
175
175
  }
176
176
  }
177
177
  // eslint-disable-next-line @typescript-eslint/ban-types
178
- function getInfoWithoutType(target, key, getModuleInfoHook) {
179
- let res = {
180
- value: target[key],
181
- key: key
182
- };
183
- if (getModuleInfoHook) {
184
- const hookRes = getModuleInfoHook(target, key);
185
- res = hookRes || res;
178
+ function getInfoWithoutType(target, key) {
179
+ if (typeof key === 'string') {
180
+ const keyRes = target[key];
181
+ if (keyRes) {
182
+ return {
183
+ value: target[key],
184
+ key: key
185
+ };
186
+ } else {
187
+ const targetKeys = Object.keys(target);
188
+ for (let targetKey of targetKeys){
189
+ const [targetTypeOrName, _] = targetKey.split(':');
190
+ const nKey = `${targetTypeOrName}:${key}`;
191
+ const typeWithKeyRes = target[nKey];
192
+ if (typeWithKeyRes) {
193
+ return {
194
+ value: typeWithKeyRes,
195
+ key: nKey
196
+ };
197
+ }
198
+ }
199
+ return {
200
+ value: undefined,
201
+ key: key
202
+ };
203
+ }
204
+ } else {
205
+ throw new Error('key must be string');
186
206
  }
187
- return res;
188
207
  }
189
208
  const getGlobalSnapshot = ()=>nativeGlobal.__FEDERATION__.moduleInfo;
190
- const getTargetSnapshotInfoByModuleInfo = (moduleInfo, snapshot, getModuleInfoHook)=>{
209
+ const getTargetSnapshotInfoByModuleInfo = (moduleInfo, snapshot)=>{
191
210
  // Check if the remote is included in the hostSnapshot
192
211
  const moduleKey = getFMId(moduleInfo);
193
- const getModuleInfo = getInfoWithoutType(snapshot, moduleKey, getModuleInfoHook).value;
212
+ const getModuleInfo = getInfoWithoutType(snapshot, moduleKey).value;
194
213
  // The remoteSnapshot might not include a version
195
214
  if (getModuleInfo && !getModuleInfo.version && 'version' in moduleInfo && moduleInfo['version']) {
196
215
  getModuleInfo.version = moduleInfo['version'];
@@ -204,14 +223,14 @@ const getTargetSnapshotInfoByModuleInfo = (moduleInfo, snapshot, getModuleInfoHo
204
223
  "version"
205
224
  ]);
206
225
  const moduleKeyWithoutVersion = getFMId(resModuleInfo);
207
- const getModuleInfoWithoutVersion = getInfoWithoutType(nativeGlobal.__FEDERATION__.moduleInfo, moduleKeyWithoutVersion, getModuleInfoHook).value;
226
+ const getModuleInfoWithoutVersion = getInfoWithoutType(nativeGlobal.__FEDERATION__.moduleInfo, moduleKeyWithoutVersion).value;
208
227
  if ((getModuleInfoWithoutVersion == null ? void 0 : getModuleInfoWithoutVersion.version) === version) {
209
228
  return getModuleInfoWithoutVersion;
210
229
  }
211
230
  }
212
231
  return;
213
232
  };
214
- const getGlobalSnapshotInfoByModuleInfo = (moduleInfo, extraOptions)=>getTargetSnapshotInfoByModuleInfo(moduleInfo, nativeGlobal.__FEDERATION__.moduleInfo, extraOptions == null ? void 0 : extraOptions.getModuleInfoHook);
233
+ const getGlobalSnapshotInfoByModuleInfo = (moduleInfo)=>getTargetSnapshotInfoByModuleInfo(moduleInfo, nativeGlobal.__FEDERATION__.moduleInfo);
215
234
  const setGlobalSnapshotInfoByModuleInfo = (remoteInfo, moduleDetailInfo)=>{
216
235
  const moduleKey = getFMId(remoteInfo);
217
236
  nativeGlobal.__FEDERATION__.moduleInfo[moduleKey] = moduleDetailInfo;
@@ -683,27 +702,24 @@ const findVersion = (shareScopeMap, scope, pkgName, cb)=>{
683
702
  return prev;
684
703
  }, 0);
685
704
  };
686
- const isLoaded = (shared)=>{
687
- return Boolean(shared.loaded) || typeof shared.lib === 'function';
688
- };
689
705
  function findSingletonVersionOrderByVersion(shareScopeMap, scope, pkgName) {
690
706
  const versions = shareScopeMap[scope][pkgName];
691
707
  const callback = function(prev, cur) {
692
- return !isLoaded(versions[prev]) && versionLt(prev, cur);
708
+ return !versions[prev].loaded && versionLt(prev, cur);
693
709
  };
694
710
  return findVersion(shareScopeMap, scope, pkgName, callback);
695
711
  }
696
712
  function findSingletonVersionOrderByLoaded(shareScopeMap, scope, pkgName) {
697
713
  const versions = shareScopeMap[scope][pkgName];
698
714
  const callback = function(prev, cur) {
699
- if (isLoaded(versions[cur])) {
700
- if (isLoaded(versions[prev])) {
715
+ if (versions[cur].loaded) {
716
+ if (versions[prev].loaded) {
701
717
  return Boolean(versionLt(prev, cur));
702
718
  } else {
703
719
  return true;
704
720
  }
705
721
  }
706
- if (isLoaded(versions[prev])) {
722
+ if (versions[prev].loaded) {
707
723
  return false;
708
724
  }
709
725
  return versionLt(prev, cur);
package/dist/share.esm.js CHANGED
@@ -166,29 +166,48 @@ function setGlobalFederationInstance(FederationInstance) {
166
166
  function getGlobalFederationConstructor() {
167
167
  return globalThis.__FEDERATION__.__DEBUG_CONSTRUCTOR__;
168
168
  }
169
- function setGlobalFederationConstructor(FederationConstructor) {
170
- if (isDebugMode()) {
169
+ function setGlobalFederationConstructor(FederationConstructor, isDebug = isDebugMode()) {
170
+ if (isDebug) {
171
171
  globalThis.__FEDERATION__.__DEBUG_CONSTRUCTOR__ = FederationConstructor;
172
172
  globalThis.__FEDERATION__.__DEBUG_CONSTRUCTOR_VERSION__ = "0.0.8";
173
173
  }
174
174
  }
175
175
  // eslint-disable-next-line @typescript-eslint/ban-types
176
- function getInfoWithoutType(target, key, getModuleInfoHook) {
177
- let res = {
178
- value: target[key],
179
- key: key
180
- };
181
- if (getModuleInfoHook) {
182
- const hookRes = getModuleInfoHook(target, key);
183
- res = hookRes || res;
176
+ function getInfoWithoutType(target, key) {
177
+ if (typeof key === 'string') {
178
+ const keyRes = target[key];
179
+ if (keyRes) {
180
+ return {
181
+ value: target[key],
182
+ key: key
183
+ };
184
+ } else {
185
+ const targetKeys = Object.keys(target);
186
+ for (let targetKey of targetKeys){
187
+ const [targetTypeOrName, _] = targetKey.split(':');
188
+ const nKey = `${targetTypeOrName}:${key}`;
189
+ const typeWithKeyRes = target[nKey];
190
+ if (typeWithKeyRes) {
191
+ return {
192
+ value: typeWithKeyRes,
193
+ key: nKey
194
+ };
195
+ }
196
+ }
197
+ return {
198
+ value: undefined,
199
+ key: key
200
+ };
201
+ }
202
+ } else {
203
+ throw new Error('key must be string');
184
204
  }
185
- return res;
186
205
  }
187
206
  const getGlobalSnapshot = ()=>nativeGlobal.__FEDERATION__.moduleInfo;
188
- const getTargetSnapshotInfoByModuleInfo = (moduleInfo, snapshot, getModuleInfoHook)=>{
207
+ const getTargetSnapshotInfoByModuleInfo = (moduleInfo, snapshot)=>{
189
208
  // Check if the remote is included in the hostSnapshot
190
209
  const moduleKey = getFMId(moduleInfo);
191
- const getModuleInfo = getInfoWithoutType(snapshot, moduleKey, getModuleInfoHook).value;
210
+ const getModuleInfo = getInfoWithoutType(snapshot, moduleKey).value;
192
211
  // The remoteSnapshot might not include a version
193
212
  if (getModuleInfo && !getModuleInfo.version && 'version' in moduleInfo && moduleInfo['version']) {
194
213
  getModuleInfo.version = moduleInfo['version'];
@@ -202,14 +221,14 @@ const getTargetSnapshotInfoByModuleInfo = (moduleInfo, snapshot, getModuleInfoHo
202
221
  "version"
203
222
  ]);
204
223
  const moduleKeyWithoutVersion = getFMId(resModuleInfo);
205
- const getModuleInfoWithoutVersion = getInfoWithoutType(nativeGlobal.__FEDERATION__.moduleInfo, moduleKeyWithoutVersion, getModuleInfoHook).value;
224
+ const getModuleInfoWithoutVersion = getInfoWithoutType(nativeGlobal.__FEDERATION__.moduleInfo, moduleKeyWithoutVersion).value;
206
225
  if ((getModuleInfoWithoutVersion == null ? void 0 : getModuleInfoWithoutVersion.version) === version) {
207
226
  return getModuleInfoWithoutVersion;
208
227
  }
209
228
  }
210
229
  return;
211
230
  };
212
- const getGlobalSnapshotInfoByModuleInfo = (moduleInfo, extraOptions)=>getTargetSnapshotInfoByModuleInfo(moduleInfo, nativeGlobal.__FEDERATION__.moduleInfo, extraOptions == null ? void 0 : extraOptions.getModuleInfoHook);
231
+ const getGlobalSnapshotInfoByModuleInfo = (moduleInfo)=>getTargetSnapshotInfoByModuleInfo(moduleInfo, nativeGlobal.__FEDERATION__.moduleInfo);
213
232
  const setGlobalSnapshotInfoByModuleInfo = (remoteInfo, moduleDetailInfo)=>{
214
233
  const moduleKey = getFMId(remoteInfo);
215
234
  nativeGlobal.__FEDERATION__.moduleInfo[moduleKey] = moduleDetailInfo;
@@ -681,27 +700,24 @@ const findVersion = (shareScopeMap, scope, pkgName, cb)=>{
681
700
  return prev;
682
701
  }, 0);
683
702
  };
684
- const isLoaded = (shared)=>{
685
- return Boolean(shared.loaded) || typeof shared.lib === 'function';
686
- };
687
703
  function findSingletonVersionOrderByVersion(shareScopeMap, scope, pkgName) {
688
704
  const versions = shareScopeMap[scope][pkgName];
689
705
  const callback = function(prev, cur) {
690
- return !isLoaded(versions[prev]) && versionLt(prev, cur);
706
+ return !versions[prev].loaded && versionLt(prev, cur);
691
707
  };
692
708
  return findVersion(shareScopeMap, scope, pkgName, callback);
693
709
  }
694
710
  function findSingletonVersionOrderByLoaded(shareScopeMap, scope, pkgName) {
695
711
  const versions = shareScopeMap[scope][pkgName];
696
712
  const callback = function(prev, cur) {
697
- if (isLoaded(versions[cur])) {
698
- if (isLoaded(versions[prev])) {
713
+ if (versions[cur].loaded) {
714
+ if (versions[prev].loaded) {
699
715
  return Boolean(versionLt(prev, cur));
700
716
  } else {
701
717
  return true;
702
718
  }
703
719
  }
704
- if (isLoaded(versions[prev])) {
720
+ if (versions[prev].loaded) {
705
721
  return false;
706
722
  }
707
723
  return versionLt(prev, cur);
@@ -770,4 +786,4 @@ function getGlobalShareScope() {
770
786
  return Global.__FEDERATION__.__SHARE__;
771
787
  }
772
788
 
773
- export { getGlobalFederationInstance as A, getGlobalFederationConstructor as B, setGlobalFederationInstance as C, DEFAULT_REMOTE_TYPE as D, registerGlobalPlugins as E, nativeGlobal as F, Global as G, resetFederationGlobalInfo as H, getTargetSnapshotInfoByModuleInfo as I, addGlobalSnapshot as J, DEFAULT_SCOPE as a, globalLoading as b, getRemoteEntryExports as c, assert as d, getFMId as e, error as f, getGlobalHostPlugins as g, isPlainObject as h, isObject as i, isRemoteInfoWithEntry as j, isPureRemoteEntry as k, getRegisteredShare as l, getInfoWithoutType as m, getPreloaded as n, setPreloaded as o, getGlobalSnapshotInfoByModuleInfo as p, setGlobalSnapshotInfoByModuleInfo as q, getGlobalSnapshot as r, safeToString as s, getGlobalShareScope as t, formatShareConfigs as u, isBrowserEnv as v, warn as w, getBuilderId as x, addUniqueItem as y, setGlobalFederationConstructor as z };
789
+ export { setGlobalFederationConstructor as A, getGlobalFederationInstance as B, getGlobalFederationConstructor as C, DEFAULT_REMOTE_TYPE as D, setGlobalFederationInstance as E, registerGlobalPlugins as F, Global as G, nativeGlobal as H, resetFederationGlobalInfo as I, getTargetSnapshotInfoByModuleInfo as J, DEFAULT_SCOPE as a, globalLoading as b, getRemoteEntryExports as c, assert as d, getFMId as e, error as f, getGlobalHostPlugins as g, isPlainObject as h, isObject as i, isRemoteInfoWithEntry as j, isPureRemoteEntry as k, getRegisteredShare as l, getInfoWithoutType as m, getPreloaded as n, setPreloaded as o, getGlobalSnapshotInfoByModuleInfo as p, addGlobalSnapshot as q, setGlobalSnapshotInfoByModuleInfo as r, safeToString as s, getGlobalSnapshot as t, getGlobalShareScope as u, formatShareConfigs as v, warn as w, isBrowserEnv as x, getBuilderId as y, addUniqueItem as z };
@@ -23,25 +23,14 @@ export declare function resetFederationGlobalInfo(): void;
23
23
  export declare function getGlobalFederationInstance(name: string, version: string | undefined): FederationHost | undefined;
24
24
  export declare function setGlobalFederationInstance(FederationInstance: FederationHost): void;
25
25
  export declare function getGlobalFederationConstructor(): typeof FederationHost | undefined;
26
- export declare function setGlobalFederationConstructor(FederationConstructor: typeof FederationHost): void;
27
- export declare function getInfoWithoutType<T extends object>(target: T, key: keyof T, getModuleInfoHook?: (target: any, key: string | number | symbol) => {
28
- value: any | undefined;
29
- key: string;
30
- } | void): {
26
+ export declare function setGlobalFederationConstructor(FederationConstructor: typeof FederationHost | undefined, isDebug?: boolean): void;
27
+ export declare function getInfoWithoutType<T extends object>(target: T, key: keyof T): {
31
28
  value: T[keyof T] | undefined;
32
29
  key: string;
33
30
  };
34
31
  export declare const getGlobalSnapshot: () => GlobalModuleInfo;
35
- export declare const getTargetSnapshotInfoByModuleInfo: (moduleInfo: Optional<Remote, 'alias'>, snapshot: GlobalModuleInfo, getModuleInfoHook?: ((target: any, key: string | number | symbol) => void | {
36
- value: any | undefined;
37
- key: string;
38
- }) | undefined) => GlobalModuleInfo[string] | undefined;
39
- export declare const getGlobalSnapshotInfoByModuleInfo: (moduleInfo: Optional<Remote, 'alias'>, extraOptions?: {
40
- getModuleInfoHook?: ((target: any, key: string | number | symbol) => void | {
41
- value: any | undefined;
42
- key: string;
43
- }) | undefined;
44
- } | undefined) => GlobalModuleInfo[string] | undefined;
32
+ export declare const getTargetSnapshotInfoByModuleInfo: (moduleInfo: Optional<Remote, 'alias'>, snapshot: GlobalModuleInfo) => GlobalModuleInfo[string] | undefined;
33
+ export declare const getGlobalSnapshotInfoByModuleInfo: (moduleInfo: Optional<Remote, 'alias'>) => GlobalModuleInfo[string] | undefined;
45
34
  export declare const setGlobalSnapshotInfoByModuleInfo: (remoteInfo: Remote, moduleDetailInfo: GlobalModuleInfo[string]) => GlobalModuleInfo;
46
35
  export declare const addGlobalSnapshot: (moduleInfos: GlobalModuleInfo) => (() => void);
47
36
  export declare const getRemoteEntryExports: (name: string, globalName: string | undefined) => {
@@ -38,12 +38,12 @@ type SharedBaseArgs = {
38
38
  deps?: Array<string>;
39
39
  strategy?: 'version-first' | 'loaded-first';
40
40
  };
41
+ export type SharedGetter = (() => () => Module) | (() => Promise<() => Module>);
41
42
  export type ShareArgs = (SharedBaseArgs & {
42
- get: () => () => Module | Promise<() => Module>;
43
+ get: SharedGetter;
43
44
  }) | (SharedBaseArgs & {
44
45
  lib: () => Module;
45
46
  });
46
- export type SharedGetter = () => () => Promise<() => Module> | Module;
47
47
  export type Shared = {
48
48
  version: string;
49
49
  get: SharedGetter;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@module-federation/runtime",
3
- "version": "0.0.0-next-20240115064607",
3
+ "version": "0.0.0-next-20240117121934",
4
4
  "author": "zhouxiao <codingzx@gmail.com>",
5
5
  "main": "./dist/index.cjs",
6
6
  "module": "./dist/index.esm.js",
@@ -45,6 +45,6 @@
45
45
  }
46
46
  },
47
47
  "dependencies": {
48
- "@module-federation/sdk": "0.0.0-next-20240115064607"
48
+ "@module-federation/sdk": "0.0.0-next-20240117121934"
49
49
  }
50
50
  }