@module-federation/runtime 0.0.0-next-20240529095100 → 0.0.0-next-20240529103203
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/dist/helpers.esm.js +1 -1
- package/dist/index.cjs.js +91 -71
- package/dist/index.esm.js +96 -77
- package/dist/package.json +1 -1
- package/dist/share.cjs.js +24 -1
- package/dist/share.esm.js +24 -2
- package/dist/src/index.d.ts +1 -0
- package/dist/src/plugins/snapshot/SnapshotHandler.d.ts +5 -1
- package/dist/src/remote/index.d.ts +4 -0
- package/dist/src/utils/tool.d.ts +6 -1
- package/package.json +2 -2
package/dist/helpers.esm.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { q as getRegisteredShare, A as getGlobalShareScope, G as Global, K as nativeGlobal, L as resetFederationGlobalInfo, F as getGlobalFederationInstance, I as setGlobalFederationInstance, H as getGlobalFederationConstructor, E as setGlobalFederationConstructor, n as getInfoWithoutType, x as getGlobalSnapshot, M as getTargetSnapshotInfoByModuleInfo, t as getGlobalSnapshotInfoByModuleInfo, v as setGlobalSnapshotInfoByModuleInfo, u as addGlobalSnapshot, c as getRemoteEntryExports, J as registerGlobalPlugins, g as getGlobalHostPlugins, o as getPreloaded, p as setPreloaded } from './share.esm.js';
|
|
2
2
|
|
|
3
3
|
const ShareUtils = {
|
|
4
4
|
getRegisteredShare,
|
package/dist/index.cjs.js
CHANGED
|
@@ -142,7 +142,7 @@ async function loadEntryScript({ name, globalName, entry, createScriptHook }) {
|
|
|
142
142
|
`);
|
|
143
143
|
return entryExports;
|
|
144
144
|
}).catch((e)=>{
|
|
145
|
-
|
|
145
|
+
throw e;
|
|
146
146
|
});
|
|
147
147
|
}
|
|
148
148
|
return sdk.loadScript(entry, {
|
|
@@ -158,7 +158,7 @@ async function loadEntryScript({ name, globalName, entry, createScriptHook }) {
|
|
|
158
158
|
`);
|
|
159
159
|
return entryExports;
|
|
160
160
|
}).catch((e)=>{
|
|
161
|
-
|
|
161
|
+
throw e;
|
|
162
162
|
});
|
|
163
163
|
}
|
|
164
164
|
function getRemoteEntryUniqueKey(remoteInfo) {
|
|
@@ -638,13 +638,16 @@ function _extends$4() {
|
|
|
638
638
|
return _extends$4.apply(this, arguments);
|
|
639
639
|
}
|
|
640
640
|
function assignRemoteInfo(remoteInfo, remoteSnapshot) {
|
|
641
|
-
|
|
642
|
-
|
|
641
|
+
const remoteEntryInfo = share.getRemoteEntryInfoFromSnapshot(remoteSnapshot);
|
|
642
|
+
if (!remoteEntryInfo.url) {
|
|
643
|
+
share.error(`The attribute remoteEntry of ${remoteInfo.name} must not be undefined.`);
|
|
643
644
|
}
|
|
644
|
-
|
|
645
|
-
|
|
646
|
-
|
|
647
|
-
|
|
645
|
+
let entryUrl = sdk.getResourceUrl(remoteSnapshot, remoteEntryInfo.url);
|
|
646
|
+
if (!share.isBrowserEnv() && !entryUrl.startsWith('http')) {
|
|
647
|
+
entryUrl = `https:${entryUrl}`;
|
|
648
|
+
}
|
|
649
|
+
remoteInfo.type = remoteEntryInfo.type;
|
|
650
|
+
remoteInfo.entryGlobalName = remoteEntryInfo.globalName;
|
|
648
651
|
remoteInfo.entry = entryUrl;
|
|
649
652
|
remoteInfo.version = remoteSnapshot.version;
|
|
650
653
|
remoteInfo.buildVersion = remoteSnapshot.buildVersion;
|
|
@@ -769,7 +772,7 @@ function generatePreloadAssets(origin, preloadOptions, remote, globalSnapshot, r
|
|
|
769
772
|
return;
|
|
770
773
|
}
|
|
771
774
|
}
|
|
772
|
-
const remoteEntryUrl = sdk.getResourceUrl(moduleInfoSnapshot,
|
|
775
|
+
const remoteEntryUrl = sdk.getResourceUrl(moduleInfoSnapshot, share.getRemoteEntryInfoFromSnapshot(moduleInfoSnapshot).url);
|
|
773
776
|
if (remoteEntryUrl) {
|
|
774
777
|
entryAssets.push({
|
|
775
778
|
name: remoteInfo.name,
|
|
@@ -975,12 +978,13 @@ class SnapshotHandler {
|
|
|
975
978
|
// global snapshot includes manifest or module info includes manifest
|
|
976
979
|
if (globalRemoteSnapshot) {
|
|
977
980
|
if (sdk.isManifestProvider(globalRemoteSnapshot)) {
|
|
978
|
-
const
|
|
981
|
+
const remoteEntry = share.isBrowserEnv() ? globalRemoteSnapshot.remoteEntry : globalRemoteSnapshot.ssrRemoteEntry || globalRemoteSnapshot.remoteEntry || '';
|
|
982
|
+
const moduleSnapshot = await this.getManifestJson(remoteEntry, moduleInfo, {});
|
|
979
983
|
// eslint-disable-next-line @typescript-eslint/no-shadow
|
|
980
984
|
const globalSnapshotRes = share.setGlobalSnapshotInfoByModuleInfo(_extends$3({}, moduleInfo, {
|
|
981
985
|
// The global remote may be overridden
|
|
982
986
|
// Therefore, set the snapshot key to the global address of the actual request
|
|
983
|
-
entry:
|
|
987
|
+
entry: remoteEntry
|
|
984
988
|
}), moduleSnapshot);
|
|
985
989
|
return {
|
|
986
990
|
remoteSnapshot: moduleSnapshot,
|
|
@@ -1512,6 +1516,10 @@ class RemoteHandler {
|
|
|
1512
1516
|
moduleInstance: module,
|
|
1513
1517
|
origin: host
|
|
1514
1518
|
});
|
|
1519
|
+
this.idToRemoteMap[id] = {
|
|
1520
|
+
name: remote.name,
|
|
1521
|
+
expose
|
|
1522
|
+
};
|
|
1515
1523
|
if (typeof moduleWrapper === 'function') {
|
|
1516
1524
|
return moduleWrapper;
|
|
1517
1525
|
}
|
|
@@ -1670,49 +1678,61 @@ class RemoteHandler {
|
|
|
1670
1678
|
}
|
|
1671
1679
|
}
|
|
1672
1680
|
removeRemote(remote) {
|
|
1673
|
-
|
|
1674
|
-
|
|
1675
|
-
|
|
1676
|
-
|
|
1677
|
-
|
|
1678
|
-
|
|
1679
|
-
const loadedModule = host.moduleCache.get(remote.name);
|
|
1680
|
-
if (loadedModule) {
|
|
1681
|
-
var _Object_getOwnPropertyDescriptor;
|
|
1682
|
-
const remoteInfo = loadedModule.remoteInfo;
|
|
1683
|
-
const key = remoteInfo.entryGlobalName;
|
|
1684
|
-
if (globalThis[key] && ((_Object_getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor(globalThis, key)) == null ? void 0 : _Object_getOwnPropertyDescriptor.configurable)) {
|
|
1685
|
-
delete globalThis[key];
|
|
1686
|
-
}
|
|
1687
|
-
const remoteEntryUniqueKey = getRemoteEntryUniqueKey(loadedModule.remoteInfo);
|
|
1688
|
-
if (share.globalLoading[remoteEntryUniqueKey]) {
|
|
1689
|
-
delete share.globalLoading[remoteEntryUniqueKey];
|
|
1681
|
+
try {
|
|
1682
|
+
const { host } = this;
|
|
1683
|
+
const { name } = remote;
|
|
1684
|
+
const remoteIndex = host.options.remotes.findIndex((item)=>item.name === name);
|
|
1685
|
+
if (remoteIndex !== -1) {
|
|
1686
|
+
host.options.remotes.splice(remoteIndex, 1);
|
|
1690
1687
|
}
|
|
1691
|
-
|
|
1692
|
-
|
|
1693
|
-
|
|
1694
|
-
|
|
1695
|
-
|
|
1696
|
-
|
|
1697
|
-
return ins.name === remoteInsId;
|
|
1688
|
+
const loadedModule = host.moduleCache.get(remote.name);
|
|
1689
|
+
if (loadedModule) {
|
|
1690
|
+
const remoteInfo = loadedModule.remoteInfo;
|
|
1691
|
+
const key = remoteInfo.entryGlobalName;
|
|
1692
|
+
if (globalThis[key]) {
|
|
1693
|
+
delete globalThis[key];
|
|
1698
1694
|
}
|
|
1699
|
-
|
|
1700
|
-
|
|
1701
|
-
|
|
1702
|
-
|
|
1703
|
-
|
|
1704
|
-
|
|
1705
|
-
|
|
1706
|
-
|
|
1707
|
-
|
|
1708
|
-
|
|
1709
|
-
|
|
1710
|
-
|
|
1711
|
-
|
|
1712
|
-
|
|
1713
|
-
|
|
1714
|
-
|
|
1715
|
-
|
|
1695
|
+
const remoteEntryUniqueKey = getRemoteEntryUniqueKey(loadedModule.remoteInfo);
|
|
1696
|
+
if (share.globalLoading[remoteEntryUniqueKey]) {
|
|
1697
|
+
delete share.globalLoading[remoteEntryUniqueKey];
|
|
1698
|
+
}
|
|
1699
|
+
host.snapshotHandler.manifestCache.delete(remoteInfo.entry);
|
|
1700
|
+
// delete un loaded shared and instance
|
|
1701
|
+
let remoteInsId = remoteInfo.buildVersion ? sdk.composeKeyWithSeparator(remoteInfo.name, remoteInfo.buildVersion) : remoteInfo.name;
|
|
1702
|
+
const remoteInsIndex = globalThis.__FEDERATION__.__INSTANCES__.findIndex((ins)=>{
|
|
1703
|
+
if (remoteInfo.buildVersion) {
|
|
1704
|
+
return ins.options.id === remoteInsId;
|
|
1705
|
+
} else {
|
|
1706
|
+
return ins.name === remoteInsId;
|
|
1707
|
+
}
|
|
1708
|
+
});
|
|
1709
|
+
if (remoteInsIndex !== -1) {
|
|
1710
|
+
const remoteIns = globalThis.__FEDERATION__.__INSTANCES__[remoteInsIndex];
|
|
1711
|
+
remoteInsId = remoteIns.options.id || remoteInsId;
|
|
1712
|
+
const globalShareScopeMap = share.getGlobalShareScope();
|
|
1713
|
+
let isAllSharedNotUsed = true;
|
|
1714
|
+
const needDeleteKeys = [];
|
|
1715
|
+
Object.keys(globalShareScopeMap).forEach((instId)=>{
|
|
1716
|
+
const shareScopeMap = globalShareScopeMap[instId];
|
|
1717
|
+
shareScopeMap && Object.keys(shareScopeMap).forEach((shareScope)=>{
|
|
1718
|
+
const shareScopeVal = shareScopeMap[shareScope];
|
|
1719
|
+
shareScopeVal && Object.keys(shareScopeVal).forEach((shareName)=>{
|
|
1720
|
+
const sharedPkgs = shareScopeVal[shareName];
|
|
1721
|
+
sharedPkgs && Object.keys(sharedPkgs).forEach((shareVersion)=>{
|
|
1722
|
+
const shared = sharedPkgs[shareVersion];
|
|
1723
|
+
if (shared && typeof shared === 'object' && shared.from === remoteInfo.name) {
|
|
1724
|
+
if (shared.loaded || shared.loading) {
|
|
1725
|
+
shared.useIn = shared.useIn.filter((usedHostName)=>usedHostName !== remoteInfo.name);
|
|
1726
|
+
if (shared.useIn.length) {
|
|
1727
|
+
isAllSharedNotUsed = false;
|
|
1728
|
+
} else {
|
|
1729
|
+
needDeleteKeys.push([
|
|
1730
|
+
instId,
|
|
1731
|
+
shareScope,
|
|
1732
|
+
shareName,
|
|
1733
|
+
shareVersion
|
|
1734
|
+
]);
|
|
1735
|
+
}
|
|
1716
1736
|
} else {
|
|
1717
1737
|
needDeleteKeys.push([
|
|
1718
1738
|
instId,
|
|
@@ -1721,30 +1741,25 @@ class RemoteHandler {
|
|
|
1721
1741
|
shareVersion
|
|
1722
1742
|
]);
|
|
1723
1743
|
}
|
|
1724
|
-
} else {
|
|
1725
|
-
needDeleteKeys.push([
|
|
1726
|
-
instId,
|
|
1727
|
-
shareScope,
|
|
1728
|
-
shareName,
|
|
1729
|
-
shareVersion
|
|
1730
|
-
]);
|
|
1731
1744
|
}
|
|
1732
|
-
}
|
|
1745
|
+
});
|
|
1733
1746
|
});
|
|
1734
1747
|
});
|
|
1735
1748
|
});
|
|
1736
|
-
|
|
1737
|
-
|
|
1738
|
-
|
|
1739
|
-
|
|
1749
|
+
if (isAllSharedNotUsed) {
|
|
1750
|
+
remoteIns.shareScopeMap = {};
|
|
1751
|
+
delete globalShareScopeMap[remoteInsId];
|
|
1752
|
+
}
|
|
1753
|
+
needDeleteKeys.forEach(([insId, shareScope, shareName, shareVersion])=>{
|
|
1754
|
+
var _globalShareScopeMap_insId_shareScope_shareName, _globalShareScopeMap_insId_shareScope, _globalShareScopeMap_insId;
|
|
1755
|
+
(_globalShareScopeMap_insId = globalShareScopeMap[insId]) == null ? true : (_globalShareScopeMap_insId_shareScope = _globalShareScopeMap_insId[shareScope]) == null ? true : (_globalShareScopeMap_insId_shareScope_shareName = _globalShareScopeMap_insId_shareScope[shareName]) == null ? true : delete _globalShareScopeMap_insId_shareScope_shareName[shareVersion];
|
|
1756
|
+
});
|
|
1757
|
+
globalThis.__FEDERATION__.__INSTANCES__.splice(remoteInsIndex, 1);
|
|
1740
1758
|
}
|
|
1741
|
-
|
|
1742
|
-
var _globalShareScopeMap_insId_shareScope_shareName, _globalShareScopeMap_insId_shareScope, _globalShareScopeMap_insId;
|
|
1743
|
-
(_globalShareScopeMap_insId = globalShareScopeMap[insId]) == null ? true : (_globalShareScopeMap_insId_shareScope = _globalShareScopeMap_insId[shareScope]) == null ? true : (_globalShareScopeMap_insId_shareScope_shareName = _globalShareScopeMap_insId_shareScope[shareName]) == null ? true : delete _globalShareScopeMap_insId_shareScope_shareName[shareVersion];
|
|
1744
|
-
});
|
|
1745
|
-
globalThis.__FEDERATION__.__INSTANCES__.splice(remoteInsIndex, 1);
|
|
1759
|
+
host.moduleCache.delete(remote.name);
|
|
1746
1760
|
}
|
|
1747
|
-
|
|
1761
|
+
} catch (err) {
|
|
1762
|
+
console.log('removeRemote fail: ', err);
|
|
1748
1763
|
}
|
|
1749
1764
|
}
|
|
1750
1765
|
constructor(host){
|
|
@@ -1759,6 +1774,7 @@ class RemoteHandler {
|
|
|
1759
1774
|
afterPreloadRemote: new AsyncHook()
|
|
1760
1775
|
});
|
|
1761
1776
|
this.host = host;
|
|
1777
|
+
this.idToRemoteMap = {};
|
|
1762
1778
|
}
|
|
1763
1779
|
}
|
|
1764
1780
|
|
|
@@ -1881,7 +1897,7 @@ class FederationHost {
|
|
|
1881
1897
|
// maybe will change, temporarily for internal use only
|
|
1882
1898
|
initContainer: new AsyncWaterfallHook('initContainer')
|
|
1883
1899
|
});
|
|
1884
|
-
this.version = "0.1.
|
|
1900
|
+
this.version = "0.1.15";
|
|
1885
1901
|
this.moduleCache = new Map();
|
|
1886
1902
|
this.loaderHook = new PluginSystem({
|
|
1887
1903
|
// FIXME: may not be suitable , not open to the public yet
|
|
@@ -1970,6 +1986,9 @@ function registerPlugins(...args) {
|
|
|
1970
1986
|
// eslint-disable-next-line prefer-spread
|
|
1971
1987
|
return FederationInstance.registerPlugins.apply(FederationInstance, args);
|
|
1972
1988
|
}
|
|
1989
|
+
function getInstance() {
|
|
1990
|
+
return FederationInstance;
|
|
1991
|
+
}
|
|
1973
1992
|
// Inject for debug
|
|
1974
1993
|
share.setGlobalFederationConstructor(FederationHost);
|
|
1975
1994
|
|
|
@@ -1983,6 +2002,7 @@ Object.defineProperty(exports, 'loadScriptNode', {
|
|
|
1983
2002
|
get: function () { return sdk.loadScriptNode; }
|
|
1984
2003
|
});
|
|
1985
2004
|
exports.FederationHost = FederationHost;
|
|
2005
|
+
exports.getInstance = getInstance;
|
|
1986
2006
|
exports.getRemoteEntry = getRemoteEntry;
|
|
1987
2007
|
exports.getRemoteInfo = getRemoteInfo;
|
|
1988
2008
|
exports.init = init;
|
package/dist/index.esm.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { g as getGlobalHostPlugins, a as globalLoading, D as DEFAULT_REMOTE_TYPE, b as DEFAULT_SCOPE, 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
|
|
2
|
-
export {
|
|
3
|
-
import { loadScriptNode, loadScript, composeKeyWithSeparator, createLink, getResourceUrl, isManifestProvider, generateSnapshotFromManifest, warn as warn$1, isBrowserEnv } from '@module-federation/sdk';
|
|
1
|
+
import { g as getGlobalHostPlugins, a as globalLoading, D as DEFAULT_REMOTE_TYPE, b as DEFAULT_SCOPE, 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 getRemoteEntryInfoFromSnapshot, m as isBrowserEnv, n as getInfoWithoutType, o as getPreloaded, p as setPreloaded, q as getRegisteredShare, r as arrayOptions, t as getGlobalSnapshotInfoByModuleInfo, u as addGlobalSnapshot, v as setGlobalSnapshotInfoByModuleInfo, x as getGlobalSnapshot, G as Global, y as formatShareConfigs, z as getTargetSharedOptions, A as getGlobalShareScope, B as addUniqueItem, C as getBuilderId, E as setGlobalFederationConstructor, F as getGlobalFederationInstance, H as getGlobalFederationConstructor, I as setGlobalFederationInstance } from './share.esm.js';
|
|
2
|
+
export { J as registerGlobalPlugins } from './share.esm.js';
|
|
3
|
+
import { loadScriptNode, loadScript, composeKeyWithSeparator, createLink, getResourceUrl, isManifestProvider, generateSnapshotFromManifest, warn as warn$1, isBrowserEnv as isBrowserEnv$1 } from '@module-federation/sdk';
|
|
4
4
|
export { loadScript, loadScriptNode } from '@module-federation/sdk';
|
|
5
5
|
|
|
6
6
|
// Function to match a remote with its name and expose
|
|
@@ -140,7 +140,7 @@ async function loadEntryScript({ name, globalName, entry, createScriptHook }) {
|
|
|
140
140
|
`);
|
|
141
141
|
return entryExports;
|
|
142
142
|
}).catch((e)=>{
|
|
143
|
-
|
|
143
|
+
throw e;
|
|
144
144
|
});
|
|
145
145
|
}
|
|
146
146
|
return loadScript(entry, {
|
|
@@ -156,7 +156,7 @@ async function loadEntryScript({ name, globalName, entry, createScriptHook }) {
|
|
|
156
156
|
`);
|
|
157
157
|
return entryExports;
|
|
158
158
|
}).catch((e)=>{
|
|
159
|
-
|
|
159
|
+
throw e;
|
|
160
160
|
});
|
|
161
161
|
}
|
|
162
162
|
function getRemoteEntryUniqueKey(remoteInfo) {
|
|
@@ -636,13 +636,16 @@ function _extends$4() {
|
|
|
636
636
|
return _extends$4.apply(this, arguments);
|
|
637
637
|
}
|
|
638
638
|
function assignRemoteInfo(remoteInfo, remoteSnapshot) {
|
|
639
|
-
|
|
640
|
-
|
|
639
|
+
const remoteEntryInfo = getRemoteEntryInfoFromSnapshot(remoteSnapshot);
|
|
640
|
+
if (!remoteEntryInfo.url) {
|
|
641
|
+
error(`The attribute remoteEntry of ${remoteInfo.name} must not be undefined.`);
|
|
641
642
|
}
|
|
642
|
-
|
|
643
|
-
|
|
644
|
-
|
|
645
|
-
|
|
643
|
+
let entryUrl = getResourceUrl(remoteSnapshot, remoteEntryInfo.url);
|
|
644
|
+
if (!isBrowserEnv() && !entryUrl.startsWith('http')) {
|
|
645
|
+
entryUrl = `https:${entryUrl}`;
|
|
646
|
+
}
|
|
647
|
+
remoteInfo.type = remoteEntryInfo.type;
|
|
648
|
+
remoteInfo.entryGlobalName = remoteEntryInfo.globalName;
|
|
646
649
|
remoteInfo.entry = entryUrl;
|
|
647
650
|
remoteInfo.version = remoteSnapshot.version;
|
|
648
651
|
remoteInfo.buildVersion = remoteSnapshot.buildVersion;
|
|
@@ -767,7 +770,7 @@ function generatePreloadAssets(origin, preloadOptions, remote, globalSnapshot, r
|
|
|
767
770
|
return;
|
|
768
771
|
}
|
|
769
772
|
}
|
|
770
|
-
const remoteEntryUrl = getResourceUrl(moduleInfoSnapshot,
|
|
773
|
+
const remoteEntryUrl = getResourceUrl(moduleInfoSnapshot, getRemoteEntryInfoFromSnapshot(moduleInfoSnapshot).url);
|
|
771
774
|
if (remoteEntryUrl) {
|
|
772
775
|
entryAssets.push({
|
|
773
776
|
name: remoteInfo.name,
|
|
@@ -973,12 +976,13 @@ class SnapshotHandler {
|
|
|
973
976
|
// global snapshot includes manifest or module info includes manifest
|
|
974
977
|
if (globalRemoteSnapshot) {
|
|
975
978
|
if (isManifestProvider(globalRemoteSnapshot)) {
|
|
976
|
-
const
|
|
979
|
+
const remoteEntry = isBrowserEnv() ? globalRemoteSnapshot.remoteEntry : globalRemoteSnapshot.ssrRemoteEntry || globalRemoteSnapshot.remoteEntry || '';
|
|
980
|
+
const moduleSnapshot = await this.getManifestJson(remoteEntry, moduleInfo, {});
|
|
977
981
|
// eslint-disable-next-line @typescript-eslint/no-shadow
|
|
978
982
|
const globalSnapshotRes = setGlobalSnapshotInfoByModuleInfo(_extends$3({}, moduleInfo, {
|
|
979
983
|
// The global remote may be overridden
|
|
980
984
|
// Therefore, set the snapshot key to the global address of the actual request
|
|
981
|
-
entry:
|
|
985
|
+
entry: remoteEntry
|
|
982
986
|
}), moduleSnapshot);
|
|
983
987
|
return {
|
|
984
988
|
remoteSnapshot: moduleSnapshot,
|
|
@@ -1510,6 +1514,10 @@ class RemoteHandler {
|
|
|
1510
1514
|
moduleInstance: module,
|
|
1511
1515
|
origin: host
|
|
1512
1516
|
});
|
|
1517
|
+
this.idToRemoteMap[id] = {
|
|
1518
|
+
name: remote.name,
|
|
1519
|
+
expose
|
|
1520
|
+
};
|
|
1513
1521
|
if (typeof moduleWrapper === 'function') {
|
|
1514
1522
|
return moduleWrapper;
|
|
1515
1523
|
}
|
|
@@ -1638,7 +1646,7 @@ class RemoteHandler {
|
|
|
1638
1646
|
}
|
|
1639
1647
|
// Set the remote entry to a complete path
|
|
1640
1648
|
if ('entry' in remote) {
|
|
1641
|
-
if (isBrowserEnv() && !remote.entry.startsWith('http')) {
|
|
1649
|
+
if (isBrowserEnv$1() && !remote.entry.startsWith('http')) {
|
|
1642
1650
|
remote.entry = new URL(remote.entry, window.location.origin).href;
|
|
1643
1651
|
}
|
|
1644
1652
|
}
|
|
@@ -1668,49 +1676,61 @@ class RemoteHandler {
|
|
|
1668
1676
|
}
|
|
1669
1677
|
}
|
|
1670
1678
|
removeRemote(remote) {
|
|
1671
|
-
|
|
1672
|
-
|
|
1673
|
-
|
|
1674
|
-
|
|
1675
|
-
|
|
1676
|
-
|
|
1677
|
-
const loadedModule = host.moduleCache.get(remote.name);
|
|
1678
|
-
if (loadedModule) {
|
|
1679
|
-
var _Object_getOwnPropertyDescriptor;
|
|
1680
|
-
const remoteInfo = loadedModule.remoteInfo;
|
|
1681
|
-
const key = remoteInfo.entryGlobalName;
|
|
1682
|
-
if (globalThis[key] && ((_Object_getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor(globalThis, key)) == null ? void 0 : _Object_getOwnPropertyDescriptor.configurable)) {
|
|
1683
|
-
delete globalThis[key];
|
|
1684
|
-
}
|
|
1685
|
-
const remoteEntryUniqueKey = getRemoteEntryUniqueKey(loadedModule.remoteInfo);
|
|
1686
|
-
if (globalLoading[remoteEntryUniqueKey]) {
|
|
1687
|
-
delete globalLoading[remoteEntryUniqueKey];
|
|
1679
|
+
try {
|
|
1680
|
+
const { host } = this;
|
|
1681
|
+
const { name } = remote;
|
|
1682
|
+
const remoteIndex = host.options.remotes.findIndex((item)=>item.name === name);
|
|
1683
|
+
if (remoteIndex !== -1) {
|
|
1684
|
+
host.options.remotes.splice(remoteIndex, 1);
|
|
1688
1685
|
}
|
|
1689
|
-
|
|
1690
|
-
|
|
1691
|
-
|
|
1692
|
-
|
|
1693
|
-
|
|
1694
|
-
|
|
1695
|
-
return ins.name === remoteInsId;
|
|
1686
|
+
const loadedModule = host.moduleCache.get(remote.name);
|
|
1687
|
+
if (loadedModule) {
|
|
1688
|
+
const remoteInfo = loadedModule.remoteInfo;
|
|
1689
|
+
const key = remoteInfo.entryGlobalName;
|
|
1690
|
+
if (globalThis[key]) {
|
|
1691
|
+
delete globalThis[key];
|
|
1696
1692
|
}
|
|
1697
|
-
|
|
1698
|
-
|
|
1699
|
-
|
|
1700
|
-
|
|
1701
|
-
|
|
1702
|
-
|
|
1703
|
-
|
|
1704
|
-
|
|
1705
|
-
|
|
1706
|
-
|
|
1707
|
-
|
|
1708
|
-
|
|
1709
|
-
|
|
1710
|
-
|
|
1711
|
-
|
|
1712
|
-
|
|
1713
|
-
|
|
1693
|
+
const remoteEntryUniqueKey = getRemoteEntryUniqueKey(loadedModule.remoteInfo);
|
|
1694
|
+
if (globalLoading[remoteEntryUniqueKey]) {
|
|
1695
|
+
delete globalLoading[remoteEntryUniqueKey];
|
|
1696
|
+
}
|
|
1697
|
+
host.snapshotHandler.manifestCache.delete(remoteInfo.entry);
|
|
1698
|
+
// delete un loaded shared and instance
|
|
1699
|
+
let remoteInsId = remoteInfo.buildVersion ? composeKeyWithSeparator(remoteInfo.name, remoteInfo.buildVersion) : remoteInfo.name;
|
|
1700
|
+
const remoteInsIndex = globalThis.__FEDERATION__.__INSTANCES__.findIndex((ins)=>{
|
|
1701
|
+
if (remoteInfo.buildVersion) {
|
|
1702
|
+
return ins.options.id === remoteInsId;
|
|
1703
|
+
} else {
|
|
1704
|
+
return ins.name === remoteInsId;
|
|
1705
|
+
}
|
|
1706
|
+
});
|
|
1707
|
+
if (remoteInsIndex !== -1) {
|
|
1708
|
+
const remoteIns = globalThis.__FEDERATION__.__INSTANCES__[remoteInsIndex];
|
|
1709
|
+
remoteInsId = remoteIns.options.id || remoteInsId;
|
|
1710
|
+
const globalShareScopeMap = getGlobalShareScope();
|
|
1711
|
+
let isAllSharedNotUsed = true;
|
|
1712
|
+
const needDeleteKeys = [];
|
|
1713
|
+
Object.keys(globalShareScopeMap).forEach((instId)=>{
|
|
1714
|
+
const shareScopeMap = globalShareScopeMap[instId];
|
|
1715
|
+
shareScopeMap && Object.keys(shareScopeMap).forEach((shareScope)=>{
|
|
1716
|
+
const shareScopeVal = shareScopeMap[shareScope];
|
|
1717
|
+
shareScopeVal && Object.keys(shareScopeVal).forEach((shareName)=>{
|
|
1718
|
+
const sharedPkgs = shareScopeVal[shareName];
|
|
1719
|
+
sharedPkgs && Object.keys(sharedPkgs).forEach((shareVersion)=>{
|
|
1720
|
+
const shared = sharedPkgs[shareVersion];
|
|
1721
|
+
if (shared && typeof shared === 'object' && shared.from === remoteInfo.name) {
|
|
1722
|
+
if (shared.loaded || shared.loading) {
|
|
1723
|
+
shared.useIn = shared.useIn.filter((usedHostName)=>usedHostName !== remoteInfo.name);
|
|
1724
|
+
if (shared.useIn.length) {
|
|
1725
|
+
isAllSharedNotUsed = false;
|
|
1726
|
+
} else {
|
|
1727
|
+
needDeleteKeys.push([
|
|
1728
|
+
instId,
|
|
1729
|
+
shareScope,
|
|
1730
|
+
shareName,
|
|
1731
|
+
shareVersion
|
|
1732
|
+
]);
|
|
1733
|
+
}
|
|
1714
1734
|
} else {
|
|
1715
1735
|
needDeleteKeys.push([
|
|
1716
1736
|
instId,
|
|
@@ -1719,30 +1739,25 @@ class RemoteHandler {
|
|
|
1719
1739
|
shareVersion
|
|
1720
1740
|
]);
|
|
1721
1741
|
}
|
|
1722
|
-
} else {
|
|
1723
|
-
needDeleteKeys.push([
|
|
1724
|
-
instId,
|
|
1725
|
-
shareScope,
|
|
1726
|
-
shareName,
|
|
1727
|
-
shareVersion
|
|
1728
|
-
]);
|
|
1729
1742
|
}
|
|
1730
|
-
}
|
|
1743
|
+
});
|
|
1731
1744
|
});
|
|
1732
1745
|
});
|
|
1733
1746
|
});
|
|
1734
|
-
|
|
1735
|
-
|
|
1736
|
-
|
|
1737
|
-
|
|
1747
|
+
if (isAllSharedNotUsed) {
|
|
1748
|
+
remoteIns.shareScopeMap = {};
|
|
1749
|
+
delete globalShareScopeMap[remoteInsId];
|
|
1750
|
+
}
|
|
1751
|
+
needDeleteKeys.forEach(([insId, shareScope, shareName, shareVersion])=>{
|
|
1752
|
+
var _globalShareScopeMap_insId_shareScope_shareName, _globalShareScopeMap_insId_shareScope, _globalShareScopeMap_insId;
|
|
1753
|
+
(_globalShareScopeMap_insId = globalShareScopeMap[insId]) == null ? true : (_globalShareScopeMap_insId_shareScope = _globalShareScopeMap_insId[shareScope]) == null ? true : (_globalShareScopeMap_insId_shareScope_shareName = _globalShareScopeMap_insId_shareScope[shareName]) == null ? true : delete _globalShareScopeMap_insId_shareScope_shareName[shareVersion];
|
|
1754
|
+
});
|
|
1755
|
+
globalThis.__FEDERATION__.__INSTANCES__.splice(remoteInsIndex, 1);
|
|
1738
1756
|
}
|
|
1739
|
-
|
|
1740
|
-
var _globalShareScopeMap_insId_shareScope_shareName, _globalShareScopeMap_insId_shareScope, _globalShareScopeMap_insId;
|
|
1741
|
-
(_globalShareScopeMap_insId = globalShareScopeMap[insId]) == null ? true : (_globalShareScopeMap_insId_shareScope = _globalShareScopeMap_insId[shareScope]) == null ? true : (_globalShareScopeMap_insId_shareScope_shareName = _globalShareScopeMap_insId_shareScope[shareName]) == null ? true : delete _globalShareScopeMap_insId_shareScope_shareName[shareVersion];
|
|
1742
|
-
});
|
|
1743
|
-
globalThis.__FEDERATION__.__INSTANCES__.splice(remoteInsIndex, 1);
|
|
1757
|
+
host.moduleCache.delete(remote.name);
|
|
1744
1758
|
}
|
|
1745
|
-
|
|
1759
|
+
} catch (err) {
|
|
1760
|
+
console.log('removeRemote fail: ', err);
|
|
1746
1761
|
}
|
|
1747
1762
|
}
|
|
1748
1763
|
constructor(host){
|
|
@@ -1757,6 +1772,7 @@ class RemoteHandler {
|
|
|
1757
1772
|
afterPreloadRemote: new AsyncHook()
|
|
1758
1773
|
});
|
|
1759
1774
|
this.host = host;
|
|
1775
|
+
this.idToRemoteMap = {};
|
|
1760
1776
|
}
|
|
1761
1777
|
}
|
|
1762
1778
|
|
|
@@ -1879,7 +1895,7 @@ class FederationHost {
|
|
|
1879
1895
|
// maybe will change, temporarily for internal use only
|
|
1880
1896
|
initContainer: new AsyncWaterfallHook('initContainer')
|
|
1881
1897
|
});
|
|
1882
|
-
this.version = "0.1.
|
|
1898
|
+
this.version = "0.1.15";
|
|
1883
1899
|
this.moduleCache = new Map();
|
|
1884
1900
|
this.loaderHook = new PluginSystem({
|
|
1885
1901
|
// FIXME: may not be suitable , not open to the public yet
|
|
@@ -1900,7 +1916,7 @@ class FederationHost {
|
|
|
1900
1916
|
],
|
|
1901
1917
|
remotes: [],
|
|
1902
1918
|
shared: {},
|
|
1903
|
-
inBrowser: isBrowserEnv
|
|
1919
|
+
inBrowser: isBrowserEnv()
|
|
1904
1920
|
};
|
|
1905
1921
|
this.name = userOptions.name;
|
|
1906
1922
|
this.options = defaultOptions;
|
|
@@ -1968,7 +1984,10 @@ function registerPlugins(...args) {
|
|
|
1968
1984
|
// eslint-disable-next-line prefer-spread
|
|
1969
1985
|
return FederationInstance.registerPlugins.apply(FederationInstance, args);
|
|
1970
1986
|
}
|
|
1987
|
+
function getInstance() {
|
|
1988
|
+
return FederationInstance;
|
|
1989
|
+
}
|
|
1971
1990
|
// Inject for debug
|
|
1972
1991
|
setGlobalFederationConstructor(FederationHost);
|
|
1973
1992
|
|
|
1974
|
-
export { FederationHost, getRemoteEntry, getRemoteInfo, init, loadRemote, loadShare, loadShareSync, preloadRemote, registerPlugins, registerRemotes };
|
|
1993
|
+
export { FederationHost, getInstance, getRemoteEntry, getRemoteInfo, init, loadRemote, loadShare, loadShareSync, preloadRemote, registerPlugins, registerRemotes };
|
package/dist/package.json
CHANGED
package/dist/share.cjs.js
CHANGED
|
@@ -76,6 +76,28 @@ function arrayOptions(options) {
|
|
|
76
76
|
options
|
|
77
77
|
];
|
|
78
78
|
}
|
|
79
|
+
function getRemoteEntryInfoFromSnapshot(snapshot) {
|
|
80
|
+
const defaultRemoteEntryInfo = {
|
|
81
|
+
url: '',
|
|
82
|
+
type: 'global',
|
|
83
|
+
globalName: ''
|
|
84
|
+
};
|
|
85
|
+
if (isBrowserEnv()) {
|
|
86
|
+
return 'remoteEntry' in snapshot ? {
|
|
87
|
+
url: snapshot.remoteEntry,
|
|
88
|
+
type: snapshot.remoteEntryType,
|
|
89
|
+
globalName: snapshot.globalName
|
|
90
|
+
} : defaultRemoteEntryInfo;
|
|
91
|
+
}
|
|
92
|
+
if ('ssrRemoteEntry' in snapshot) {
|
|
93
|
+
return {
|
|
94
|
+
url: snapshot.ssrRemoteEntry || defaultRemoteEntryInfo.url,
|
|
95
|
+
type: snapshot.ssrRemoteEntryType || defaultRemoteEntryInfo.type,
|
|
96
|
+
globalName: snapshot.globalName
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
return defaultRemoteEntryInfo;
|
|
100
|
+
}
|
|
79
101
|
|
|
80
102
|
function _extends$1() {
|
|
81
103
|
_extends$1 = Object.assign || function(target) {
|
|
@@ -190,7 +212,7 @@ function getGlobalFederationConstructor() {
|
|
|
190
212
|
function setGlobalFederationConstructor(FederationConstructor, isDebug = isDebugMode()) {
|
|
191
213
|
if (isDebug) {
|
|
192
214
|
globalThis.__FEDERATION__.__DEBUG_CONSTRUCTOR__ = FederationConstructor;
|
|
193
|
-
globalThis.__FEDERATION__.__DEBUG_CONSTRUCTOR_VERSION__ = "0.1.
|
|
215
|
+
globalThis.__FEDERATION__.__DEBUG_CONSTRUCTOR_VERSION__ = "0.1.15";
|
|
194
216
|
}
|
|
195
217
|
}
|
|
196
218
|
// eslint-disable-next-line @typescript-eslint/ban-types
|
|
@@ -893,6 +915,7 @@ exports.getInfoWithoutType = getInfoWithoutType;
|
|
|
893
915
|
exports.getPreloaded = getPreloaded;
|
|
894
916
|
exports.getRegisteredShare = getRegisteredShare;
|
|
895
917
|
exports.getRemoteEntryExports = getRemoteEntryExports;
|
|
918
|
+
exports.getRemoteEntryInfoFromSnapshot = getRemoteEntryInfoFromSnapshot;
|
|
896
919
|
exports.getTargetSharedOptions = getTargetSharedOptions;
|
|
897
920
|
exports.getTargetSnapshotInfoByModuleInfo = getTargetSnapshotInfoByModuleInfo;
|
|
898
921
|
exports.globalLoading = globalLoading;
|
package/dist/share.esm.js
CHANGED
|
@@ -74,6 +74,28 @@ function arrayOptions(options) {
|
|
|
74
74
|
options
|
|
75
75
|
];
|
|
76
76
|
}
|
|
77
|
+
function getRemoteEntryInfoFromSnapshot(snapshot) {
|
|
78
|
+
const defaultRemoteEntryInfo = {
|
|
79
|
+
url: '',
|
|
80
|
+
type: 'global',
|
|
81
|
+
globalName: ''
|
|
82
|
+
};
|
|
83
|
+
if (isBrowserEnv()) {
|
|
84
|
+
return 'remoteEntry' in snapshot ? {
|
|
85
|
+
url: snapshot.remoteEntry,
|
|
86
|
+
type: snapshot.remoteEntryType,
|
|
87
|
+
globalName: snapshot.globalName
|
|
88
|
+
} : defaultRemoteEntryInfo;
|
|
89
|
+
}
|
|
90
|
+
if ('ssrRemoteEntry' in snapshot) {
|
|
91
|
+
return {
|
|
92
|
+
url: snapshot.ssrRemoteEntry || defaultRemoteEntryInfo.url,
|
|
93
|
+
type: snapshot.ssrRemoteEntryType || defaultRemoteEntryInfo.type,
|
|
94
|
+
globalName: snapshot.globalName
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
return defaultRemoteEntryInfo;
|
|
98
|
+
}
|
|
77
99
|
|
|
78
100
|
function _extends$1() {
|
|
79
101
|
_extends$1 = Object.assign || function(target) {
|
|
@@ -188,7 +210,7 @@ function getGlobalFederationConstructor() {
|
|
|
188
210
|
function setGlobalFederationConstructor(FederationConstructor, isDebug = isDebugMode()) {
|
|
189
211
|
if (isDebug) {
|
|
190
212
|
globalThis.__FEDERATION__.__DEBUG_CONSTRUCTOR__ = FederationConstructor;
|
|
191
|
-
globalThis.__FEDERATION__.__DEBUG_CONSTRUCTOR_VERSION__ = "0.1.
|
|
213
|
+
globalThis.__FEDERATION__.__DEBUG_CONSTRUCTOR_VERSION__ = "0.1.15";
|
|
192
214
|
}
|
|
193
215
|
}
|
|
194
216
|
// eslint-disable-next-line @typescript-eslint/ban-types
|
|
@@ -870,4 +892,4 @@ function getTargetSharedOptions(options) {
|
|
|
870
892
|
return Object.assign({}, resolver(shareInfos[pkgName]), extraOptions == null ? void 0 : extraOptions.customShareInfo);
|
|
871
893
|
}
|
|
872
894
|
|
|
873
|
-
export {
|
|
895
|
+
export { getGlobalShareScope as A, addUniqueItem as B, getBuilderId as C, DEFAULT_REMOTE_TYPE as D, setGlobalFederationConstructor as E, getGlobalFederationInstance as F, Global as G, getGlobalFederationConstructor as H, setGlobalFederationInstance as I, registerGlobalPlugins as J, nativeGlobal as K, resetFederationGlobalInfo as L, getTargetSnapshotInfoByModuleInfo as M, globalLoading as a, DEFAULT_SCOPE 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, getRemoteEntryInfoFromSnapshot as l, isBrowserEnv as m, getInfoWithoutType as n, getPreloaded as o, setPreloaded as p, getRegisteredShare as q, arrayOptions as r, safeToString as s, getGlobalSnapshotInfoByModuleInfo as t, addGlobalSnapshot as u, setGlobalSnapshotInfoByModuleInfo as v, warn as w, getGlobalSnapshot as x, formatShareConfigs as y, getTargetSharedOptions as z };
|
package/dist/src/index.d.ts
CHANGED
|
@@ -13,3 +13,4 @@ export declare function loadShareSync<T>(...args: Parameters<FederationHost['loa
|
|
|
13
13
|
export declare function preloadRemote(...args: Parameters<FederationHost['preloadRemote']>): ReturnType<FederationHost['preloadRemote']>;
|
|
14
14
|
export declare function registerRemotes(...args: Parameters<FederationHost['registerRemotes']>): ReturnType<FederationHost['registerRemotes']>;
|
|
15
15
|
export declare function registerPlugins(...args: Parameters<FederationHost['registerPlugins']>): ReturnType<FederationHost['registerRemotes']>;
|
|
16
|
+
export declare function getInstance(): FederationHost | null;
|
|
@@ -39,6 +39,10 @@ export declare class SnapshotHandler {
|
|
|
39
39
|
remoteSnapshot: ModuleInfo;
|
|
40
40
|
globalSnapshot: GlobalModuleInfo;
|
|
41
41
|
}> | never;
|
|
42
|
-
|
|
42
|
+
getGlobalRemoteInfo(moduleInfo: Remote): {
|
|
43
|
+
hostGlobalSnapshot: ModuleInfo | undefined;
|
|
44
|
+
globalSnapshot: ReturnType<typeof getGlobalSnapshot>;
|
|
45
|
+
remoteSnapshot: GlobalModuleInfo[string] | undefined;
|
|
46
|
+
};
|
|
43
47
|
private getManifestJson;
|
|
44
48
|
}
|
|
@@ -15,6 +15,10 @@ export interface LoadRemoteMatch {
|
|
|
15
15
|
}
|
|
16
16
|
export declare class RemoteHandler {
|
|
17
17
|
host: FederationHost;
|
|
18
|
+
idToRemoteMap: Record<string, {
|
|
19
|
+
name: string;
|
|
20
|
+
expose: string;
|
|
21
|
+
}>;
|
|
18
22
|
hooks: PluginSystem<{
|
|
19
23
|
beforeRequest: AsyncWaterfallHook<{
|
|
20
24
|
id: string;
|
package/dist/src/utils/tool.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { RemoteWithEntry } from '@module-federation/sdk';
|
|
1
|
+
import type { RemoteWithEntry, ModuleInfo, RemoteEntryType } from '@module-federation/sdk';
|
|
2
2
|
import { Remote, RemoteInfoOptionalVersion } from '../type';
|
|
3
3
|
export declare function addUniqueItem(arr: Array<string>, item: string): Array<string>;
|
|
4
4
|
export declare function getFMId(remoteInfo: RemoteInfoOptionalVersion | RemoteWithEntry): string;
|
|
@@ -11,3 +11,8 @@ export declare const objectToString: () => string;
|
|
|
11
11
|
export declare function isPlainObject(val: any): val is object;
|
|
12
12
|
export declare function isStaticResourcesEqual(url1: string, url2: string): boolean;
|
|
13
13
|
export declare function arrayOptions<T>(options: T | Array<T>): Array<T>;
|
|
14
|
+
export declare function getRemoteEntryInfoFromSnapshot(snapshot: ModuleInfo): {
|
|
15
|
+
url: string;
|
|
16
|
+
type: RemoteEntryType;
|
|
17
|
+
globalName: string;
|
|
18
|
+
};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@module-federation/runtime",
|
|
3
|
-
"version": "0.0.0-next-
|
|
3
|
+
"version": "0.0.0-next-20240529103203",
|
|
4
4
|
"author": "zhouxiao <codingzx@gmail.com>",
|
|
5
5
|
"main": "./dist/index.cjs.js",
|
|
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-
|
|
48
|
+
"@module-federation/sdk": "0.0.0-next-20240529103203"
|
|
49
49
|
}
|
|
50
50
|
}
|