@module-federation/runtime 0.0.0-next-20240528203231 → 0.0.0-next-20240529032552
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 +89 -70
- package/dist/index.esm.js +94 -76
- package/dist/share.cjs.js +23 -0
- package/dist/share.esm.js +23 -1
- 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,60 @@ 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
|
-
let
|
|
1705
|
-
const
|
|
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
|
+
// delete un loaded shared and instance
|
|
1700
|
+
let remoteInsId = remoteInfo.buildVersion ? sdk.composeKeyWithSeparator(remoteInfo.name, remoteInfo.buildVersion) : remoteInfo.name;
|
|
1701
|
+
const remoteInsIndex = globalThis.__FEDERATION__.__INSTANCES__.findIndex((ins)=>{
|
|
1702
|
+
if (remoteInfo.buildVersion) {
|
|
1703
|
+
return ins.options.id === remoteInsId;
|
|
1704
|
+
} else {
|
|
1705
|
+
return ins.name === remoteInsId;
|
|
1706
|
+
}
|
|
1707
|
+
});
|
|
1708
|
+
if (remoteInsIndex !== -1) {
|
|
1709
|
+
const remoteIns = globalThis.__FEDERATION__.__INSTANCES__[remoteInsIndex];
|
|
1710
|
+
remoteInsId = remoteIns.options.id || remoteInsId;
|
|
1711
|
+
const globalShareScopeMap = share.getGlobalShareScope();
|
|
1712
|
+
let isAllSharedNotUsed = true;
|
|
1713
|
+
const needDeleteKeys = [];
|
|
1714
|
+
Object.keys(globalShareScopeMap).forEach((instId)=>{
|
|
1715
|
+
const shareScopeMap = globalShareScopeMap[instId];
|
|
1716
|
+
shareScopeMap && Object.keys(shareScopeMap).forEach((shareScope)=>{
|
|
1717
|
+
const shareScopeVal = shareScopeMap[shareScope];
|
|
1718
|
+
shareScopeVal && Object.keys(shareScopeVal).forEach((shareName)=>{
|
|
1719
|
+
const sharedPkgs = shareScopeVal[shareName];
|
|
1720
|
+
sharedPkgs && Object.keys(sharedPkgs).forEach((shareVersion)=>{
|
|
1721
|
+
const shared = sharedPkgs[shareVersion];
|
|
1722
|
+
if (shared && typeof shared === 'object' && shared.from === remoteInfo.name) {
|
|
1723
|
+
if (shared.loaded || shared.loading) {
|
|
1724
|
+
shared.useIn = shared.useIn.filter((usedHostName)=>usedHostName !== remoteInfo.name);
|
|
1725
|
+
if (shared.useIn.length) {
|
|
1726
|
+
isAllSharedNotUsed = false;
|
|
1727
|
+
} else {
|
|
1728
|
+
needDeleteKeys.push([
|
|
1729
|
+
instId,
|
|
1730
|
+
shareScope,
|
|
1731
|
+
shareName,
|
|
1732
|
+
shareVersion
|
|
1733
|
+
]);
|
|
1734
|
+
}
|
|
1716
1735
|
} else {
|
|
1717
1736
|
needDeleteKeys.push([
|
|
1718
1737
|
instId,
|
|
@@ -1721,30 +1740,25 @@ class RemoteHandler {
|
|
|
1721
1740
|
shareVersion
|
|
1722
1741
|
]);
|
|
1723
1742
|
}
|
|
1724
|
-
} else {
|
|
1725
|
-
needDeleteKeys.push([
|
|
1726
|
-
instId,
|
|
1727
|
-
shareScope,
|
|
1728
|
-
shareName,
|
|
1729
|
-
shareVersion
|
|
1730
|
-
]);
|
|
1731
1743
|
}
|
|
1732
|
-
}
|
|
1744
|
+
});
|
|
1733
1745
|
});
|
|
1734
1746
|
});
|
|
1735
1747
|
});
|
|
1736
|
-
|
|
1737
|
-
|
|
1738
|
-
|
|
1739
|
-
|
|
1748
|
+
if (isAllSharedNotUsed) {
|
|
1749
|
+
remoteIns.shareScopeMap = {};
|
|
1750
|
+
delete globalShareScopeMap[remoteInsId];
|
|
1751
|
+
}
|
|
1752
|
+
needDeleteKeys.forEach(([insId, shareScope, shareName, shareVersion])=>{
|
|
1753
|
+
var _globalShareScopeMap_insId_shareScope_shareName, _globalShareScopeMap_insId_shareScope, _globalShareScopeMap_insId;
|
|
1754
|
+
(_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];
|
|
1755
|
+
});
|
|
1756
|
+
globalThis.__FEDERATION__.__INSTANCES__.splice(remoteInsIndex, 1);
|
|
1740
1757
|
}
|
|
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);
|
|
1758
|
+
host.moduleCache.delete(remote.name);
|
|
1746
1759
|
}
|
|
1747
|
-
|
|
1760
|
+
} catch (err) {
|
|
1761
|
+
console.log('removeRemote fail: ', err);
|
|
1748
1762
|
}
|
|
1749
1763
|
}
|
|
1750
1764
|
constructor(host){
|
|
@@ -1759,6 +1773,7 @@ class RemoteHandler {
|
|
|
1759
1773
|
afterPreloadRemote: new AsyncHook()
|
|
1760
1774
|
});
|
|
1761
1775
|
this.host = host;
|
|
1776
|
+
this.idToRemoteMap = {};
|
|
1762
1777
|
}
|
|
1763
1778
|
}
|
|
1764
1779
|
|
|
@@ -1970,6 +1985,9 @@ function registerPlugins(...args) {
|
|
|
1970
1985
|
// eslint-disable-next-line prefer-spread
|
|
1971
1986
|
return FederationInstance.registerPlugins.apply(FederationInstance, args);
|
|
1972
1987
|
}
|
|
1988
|
+
function getInstance() {
|
|
1989
|
+
return FederationInstance;
|
|
1990
|
+
}
|
|
1973
1991
|
// Inject for debug
|
|
1974
1992
|
share.setGlobalFederationConstructor(FederationHost);
|
|
1975
1993
|
|
|
@@ -1983,6 +2001,7 @@ Object.defineProperty(exports, 'loadScriptNode', {
|
|
|
1983
2001
|
get: function () { return sdk.loadScriptNode; }
|
|
1984
2002
|
});
|
|
1985
2003
|
exports.FederationHost = FederationHost;
|
|
2004
|
+
exports.getInstance = getInstance;
|
|
1986
2005
|
exports.getRemoteEntry = getRemoteEntry;
|
|
1987
2006
|
exports.getRemoteInfo = getRemoteInfo;
|
|
1988
2007
|
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,60 @@ 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
|
-
let
|
|
1703
|
-
const
|
|
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
|
+
// delete un loaded shared and instance
|
|
1698
|
+
let remoteInsId = remoteInfo.buildVersion ? composeKeyWithSeparator(remoteInfo.name, remoteInfo.buildVersion) : remoteInfo.name;
|
|
1699
|
+
const remoteInsIndex = globalThis.__FEDERATION__.__INSTANCES__.findIndex((ins)=>{
|
|
1700
|
+
if (remoteInfo.buildVersion) {
|
|
1701
|
+
return ins.options.id === remoteInsId;
|
|
1702
|
+
} else {
|
|
1703
|
+
return ins.name === remoteInsId;
|
|
1704
|
+
}
|
|
1705
|
+
});
|
|
1706
|
+
if (remoteInsIndex !== -1) {
|
|
1707
|
+
const remoteIns = globalThis.__FEDERATION__.__INSTANCES__[remoteInsIndex];
|
|
1708
|
+
remoteInsId = remoteIns.options.id || remoteInsId;
|
|
1709
|
+
const globalShareScopeMap = getGlobalShareScope();
|
|
1710
|
+
let isAllSharedNotUsed = true;
|
|
1711
|
+
const needDeleteKeys = [];
|
|
1712
|
+
Object.keys(globalShareScopeMap).forEach((instId)=>{
|
|
1713
|
+
const shareScopeMap = globalShareScopeMap[instId];
|
|
1714
|
+
shareScopeMap && Object.keys(shareScopeMap).forEach((shareScope)=>{
|
|
1715
|
+
const shareScopeVal = shareScopeMap[shareScope];
|
|
1716
|
+
shareScopeVal && Object.keys(shareScopeVal).forEach((shareName)=>{
|
|
1717
|
+
const sharedPkgs = shareScopeVal[shareName];
|
|
1718
|
+
sharedPkgs && Object.keys(sharedPkgs).forEach((shareVersion)=>{
|
|
1719
|
+
const shared = sharedPkgs[shareVersion];
|
|
1720
|
+
if (shared && typeof shared === 'object' && shared.from === remoteInfo.name) {
|
|
1721
|
+
if (shared.loaded || shared.loading) {
|
|
1722
|
+
shared.useIn = shared.useIn.filter((usedHostName)=>usedHostName !== remoteInfo.name);
|
|
1723
|
+
if (shared.useIn.length) {
|
|
1724
|
+
isAllSharedNotUsed = false;
|
|
1725
|
+
} else {
|
|
1726
|
+
needDeleteKeys.push([
|
|
1727
|
+
instId,
|
|
1728
|
+
shareScope,
|
|
1729
|
+
shareName,
|
|
1730
|
+
shareVersion
|
|
1731
|
+
]);
|
|
1732
|
+
}
|
|
1714
1733
|
} else {
|
|
1715
1734
|
needDeleteKeys.push([
|
|
1716
1735
|
instId,
|
|
@@ -1719,30 +1738,25 @@ class RemoteHandler {
|
|
|
1719
1738
|
shareVersion
|
|
1720
1739
|
]);
|
|
1721
1740
|
}
|
|
1722
|
-
} else {
|
|
1723
|
-
needDeleteKeys.push([
|
|
1724
|
-
instId,
|
|
1725
|
-
shareScope,
|
|
1726
|
-
shareName,
|
|
1727
|
-
shareVersion
|
|
1728
|
-
]);
|
|
1729
1741
|
}
|
|
1730
|
-
}
|
|
1742
|
+
});
|
|
1731
1743
|
});
|
|
1732
1744
|
});
|
|
1733
1745
|
});
|
|
1734
|
-
|
|
1735
|
-
|
|
1736
|
-
|
|
1737
|
-
|
|
1746
|
+
if (isAllSharedNotUsed) {
|
|
1747
|
+
remoteIns.shareScopeMap = {};
|
|
1748
|
+
delete globalShareScopeMap[remoteInsId];
|
|
1749
|
+
}
|
|
1750
|
+
needDeleteKeys.forEach(([insId, shareScope, shareName, shareVersion])=>{
|
|
1751
|
+
var _globalShareScopeMap_insId_shareScope_shareName, _globalShareScopeMap_insId_shareScope, _globalShareScopeMap_insId;
|
|
1752
|
+
(_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];
|
|
1753
|
+
});
|
|
1754
|
+
globalThis.__FEDERATION__.__INSTANCES__.splice(remoteInsIndex, 1);
|
|
1738
1755
|
}
|
|
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);
|
|
1756
|
+
host.moduleCache.delete(remote.name);
|
|
1744
1757
|
}
|
|
1745
|
-
|
|
1758
|
+
} catch (err) {
|
|
1759
|
+
console.log('removeRemote fail: ', err);
|
|
1746
1760
|
}
|
|
1747
1761
|
}
|
|
1748
1762
|
constructor(host){
|
|
@@ -1757,6 +1771,7 @@ class RemoteHandler {
|
|
|
1757
1771
|
afterPreloadRemote: new AsyncHook()
|
|
1758
1772
|
});
|
|
1759
1773
|
this.host = host;
|
|
1774
|
+
this.idToRemoteMap = {};
|
|
1760
1775
|
}
|
|
1761
1776
|
}
|
|
1762
1777
|
|
|
@@ -1900,7 +1915,7 @@ class FederationHost {
|
|
|
1900
1915
|
],
|
|
1901
1916
|
remotes: [],
|
|
1902
1917
|
shared: {},
|
|
1903
|
-
inBrowser: isBrowserEnv
|
|
1918
|
+
inBrowser: isBrowserEnv()
|
|
1904
1919
|
};
|
|
1905
1920
|
this.name = userOptions.name;
|
|
1906
1921
|
this.options = defaultOptions;
|
|
@@ -1968,7 +1983,10 @@ function registerPlugins(...args) {
|
|
|
1968
1983
|
// eslint-disable-next-line prefer-spread
|
|
1969
1984
|
return FederationInstance.registerPlugins.apply(FederationInstance, args);
|
|
1970
1985
|
}
|
|
1986
|
+
function getInstance() {
|
|
1987
|
+
return FederationInstance;
|
|
1988
|
+
}
|
|
1971
1989
|
// Inject for debug
|
|
1972
1990
|
setGlobalFederationConstructor(FederationHost);
|
|
1973
1991
|
|
|
1974
|
-
export { FederationHost, getRemoteEntry, getRemoteInfo, init, loadRemote, loadShare, loadShareSync, preloadRemote, registerPlugins, registerRemotes };
|
|
1992
|
+
export { FederationHost, getInstance, getRemoteEntry, getRemoteInfo, init, loadRemote, loadShare, loadShareSync, preloadRemote, registerPlugins, registerRemotes };
|
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) {
|
|
@@ -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) {
|
|
@@ -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-20240529032552",
|
|
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-20240529032552"
|
|
49
49
|
}
|
|
50
50
|
}
|