@module-federation/runtime-core 0.16.0 → 0.17.0
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/index.cjs.cjs +219 -218
- package/dist/index.esm.js +220 -219
- package/dist/src/core.d.ts +7 -6
- package/dist/src/global.d.ts +10 -10
- package/dist/src/helpers.d.ts +7 -0
- package/dist/src/index.d.ts +2 -2
- package/dist/src/module/index.d.ts +3 -3
- package/dist/src/plugins/generate-preload-assets.d.ts +4 -4
- package/dist/src/plugins/snapshot/SnapshotHandler.d.ts +6 -6
- package/dist/src/plugins/snapshot/index.d.ts +2 -2
- package/dist/src/remote/index.d.ts +14 -14
- package/dist/src/shared/index.d.ts +6 -6
- package/dist/src/type/config.d.ts +2 -2
- package/dist/src/type/plugin.d.ts +4 -3
- package/dist/src/utils/hooks/pluginSystem.d.ts +3 -2
- package/dist/src/utils/load.d.ts +2 -2
- package/dist/src/utils/plugin.d.ts +2 -3
- package/dist/src/utils/preload.d.ts +2 -2
- package/package.json +3 -3
package/dist/index.esm.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { _ as _extends, a as _object_without_properties_loose } from './polyfills.esm.js';
|
|
2
|
-
import { createLogger, isBrowserEnv, isReactNativeEnv, isDebugMode, composeKeyWithSeparator, loadScriptNode, loadScript,
|
|
2
|
+
import { createLogger, isBrowserEnv, isReactNativeEnv, isDebugMode, composeKeyWithSeparator, loadScriptNode, loadScript, createLink, createScript, safeToString, getResourceUrl, isManifestProvider, generateSnapshotFromManifest, warn as warn$1 } from '@module-federation/sdk';
|
|
3
3
|
export { loadScript, loadScriptNode } from '@module-federation/sdk';
|
|
4
4
|
import { getShortErrorMsg, RUNTIME_008, runtimeDescMap, RUNTIME_001, RUNTIME_002, RUNTIME_007, RUNTIME_003, RUNTIME_005, RUNTIME_006, RUNTIME_004 } from '@module-federation/error-codes';
|
|
5
5
|
|
|
@@ -195,7 +195,7 @@ function getGlobalFederationConstructor() {
|
|
|
195
195
|
function setGlobalFederationConstructor(FederationConstructor, isDebug = isDebugMode()) {
|
|
196
196
|
if (isDebug) {
|
|
197
197
|
CurrentGlobal.__FEDERATION__.__DEBUG_CONSTRUCTOR__ = FederationConstructor;
|
|
198
|
-
CurrentGlobal.__FEDERATION__.__DEBUG_CONSTRUCTOR_VERSION__ = "0.
|
|
198
|
+
CurrentGlobal.__FEDERATION__.__DEBUG_CONSTRUCTOR_VERSION__ = "0.17.0";
|
|
199
199
|
}
|
|
200
200
|
}
|
|
201
201
|
// eslint-disable-next-line @typescript-eslint/ban-types
|
|
@@ -942,34 +942,6 @@ function getTargetSharedOptions(options) {
|
|
|
942
942
|
return Object.assign({}, resolver(shareInfos[pkgName]), extraOptions == null ? void 0 : extraOptions.customShareInfo);
|
|
943
943
|
}
|
|
944
944
|
|
|
945
|
-
const ShareUtils = {
|
|
946
|
-
getRegisteredShare,
|
|
947
|
-
getGlobalShareScope
|
|
948
|
-
};
|
|
949
|
-
const GlobalUtils = {
|
|
950
|
-
Global,
|
|
951
|
-
nativeGlobal,
|
|
952
|
-
resetFederationGlobalInfo,
|
|
953
|
-
setGlobalFederationInstance,
|
|
954
|
-
getGlobalFederationConstructor,
|
|
955
|
-
setGlobalFederationConstructor,
|
|
956
|
-
getInfoWithoutType,
|
|
957
|
-
getGlobalSnapshot,
|
|
958
|
-
getTargetSnapshotInfoByModuleInfo,
|
|
959
|
-
getGlobalSnapshotInfoByModuleInfo,
|
|
960
|
-
setGlobalSnapshotInfoByModuleInfo,
|
|
961
|
-
addGlobalSnapshot,
|
|
962
|
-
getRemoteEntryExports,
|
|
963
|
-
registerGlobalPlugins,
|
|
964
|
-
getGlobalHostPlugins,
|
|
965
|
-
getPreloaded,
|
|
966
|
-
setPreloaded
|
|
967
|
-
};
|
|
968
|
-
var helpers = {
|
|
969
|
-
global: GlobalUtils,
|
|
970
|
-
share: ShareUtils
|
|
971
|
-
};
|
|
972
|
-
|
|
973
945
|
function getBuilderId() {
|
|
974
946
|
//@ts-ignore
|
|
975
947
|
return typeof FEDERATION_BUILD_IDENTIFIER !== 'undefined' ? FEDERATION_BUILD_IDENTIFIER : '';
|
|
@@ -1039,8 +1011,16 @@ function matchRemote(remotes, nameOrAlias) {
|
|
|
1039
1011
|
return;
|
|
1040
1012
|
}
|
|
1041
1013
|
|
|
1042
|
-
function registerPlugins(plugins,
|
|
1014
|
+
function registerPlugins(plugins, instance) {
|
|
1043
1015
|
const globalPlugins = getGlobalHostPlugins();
|
|
1016
|
+
const hookInstances = [
|
|
1017
|
+
instance.hooks,
|
|
1018
|
+
instance.remoteHandler.hooks,
|
|
1019
|
+
instance.sharedHandler.hooks,
|
|
1020
|
+
instance.snapshotHandler.hooks,
|
|
1021
|
+
instance.loaderHook,
|
|
1022
|
+
instance.bridgeHook
|
|
1023
|
+
];
|
|
1044
1024
|
// Incorporate global plugins
|
|
1045
1025
|
if (globalPlugins.length > 0) {
|
|
1046
1026
|
globalPlugins.forEach((plugin)=>{
|
|
@@ -1052,7 +1032,7 @@ function registerPlugins(plugins, hookInstances) {
|
|
|
1052
1032
|
if (plugins && plugins.length > 0) {
|
|
1053
1033
|
plugins.forEach((plugin)=>{
|
|
1054
1034
|
hookInstances.forEach((hookInstance)=>{
|
|
1055
|
-
hookInstance.applyPlugin(plugin);
|
|
1035
|
+
hookInstance.applyPlugin(plugin, instance);
|
|
1056
1036
|
});
|
|
1057
1037
|
});
|
|
1058
1038
|
}
|
|
@@ -1239,6 +1219,202 @@ function getRemoteInfo(remote) {
|
|
|
1239
1219
|
});
|
|
1240
1220
|
}
|
|
1241
1221
|
|
|
1222
|
+
function defaultPreloadArgs(preloadConfig) {
|
|
1223
|
+
return _extends({
|
|
1224
|
+
resourceCategory: 'sync',
|
|
1225
|
+
share: true,
|
|
1226
|
+
depsRemote: true,
|
|
1227
|
+
prefetchInterface: false
|
|
1228
|
+
}, preloadConfig);
|
|
1229
|
+
}
|
|
1230
|
+
function formatPreloadArgs(remotes, preloadArgs) {
|
|
1231
|
+
return preloadArgs.map((args)=>{
|
|
1232
|
+
const remoteInfo = matchRemote(remotes, args.nameOrAlias);
|
|
1233
|
+
assert(remoteInfo, `Unable to preload ${args.nameOrAlias} as it is not included in ${!remoteInfo && safeToString({
|
|
1234
|
+
remoteInfo,
|
|
1235
|
+
remotes
|
|
1236
|
+
})}`);
|
|
1237
|
+
return {
|
|
1238
|
+
remote: remoteInfo,
|
|
1239
|
+
preloadConfig: defaultPreloadArgs(args)
|
|
1240
|
+
};
|
|
1241
|
+
});
|
|
1242
|
+
}
|
|
1243
|
+
function normalizePreloadExposes(exposes) {
|
|
1244
|
+
if (!exposes) {
|
|
1245
|
+
return [];
|
|
1246
|
+
}
|
|
1247
|
+
return exposes.map((expose)=>{
|
|
1248
|
+
if (expose === '.') {
|
|
1249
|
+
return expose;
|
|
1250
|
+
}
|
|
1251
|
+
if (expose.startsWith('./')) {
|
|
1252
|
+
return expose.replace('./', '');
|
|
1253
|
+
}
|
|
1254
|
+
return expose;
|
|
1255
|
+
});
|
|
1256
|
+
}
|
|
1257
|
+
function preloadAssets(remoteInfo, host, assets, // It is used to distinguish preload from load remote parallel loading
|
|
1258
|
+
useLinkPreload = true) {
|
|
1259
|
+
const { cssAssets, jsAssetsWithoutEntry, entryAssets } = assets;
|
|
1260
|
+
if (host.options.inBrowser) {
|
|
1261
|
+
entryAssets.forEach((asset)=>{
|
|
1262
|
+
const { moduleInfo } = asset;
|
|
1263
|
+
const module = host.moduleCache.get(remoteInfo.name);
|
|
1264
|
+
if (module) {
|
|
1265
|
+
getRemoteEntry({
|
|
1266
|
+
origin: host,
|
|
1267
|
+
remoteInfo: moduleInfo,
|
|
1268
|
+
remoteEntryExports: module.remoteEntryExports
|
|
1269
|
+
});
|
|
1270
|
+
} else {
|
|
1271
|
+
getRemoteEntry({
|
|
1272
|
+
origin: host,
|
|
1273
|
+
remoteInfo: moduleInfo,
|
|
1274
|
+
remoteEntryExports: undefined
|
|
1275
|
+
});
|
|
1276
|
+
}
|
|
1277
|
+
});
|
|
1278
|
+
if (useLinkPreload) {
|
|
1279
|
+
const defaultAttrs = {
|
|
1280
|
+
rel: 'preload',
|
|
1281
|
+
as: 'style'
|
|
1282
|
+
};
|
|
1283
|
+
cssAssets.forEach((cssUrl)=>{
|
|
1284
|
+
const { link: cssEl, needAttach } = createLink({
|
|
1285
|
+
url: cssUrl,
|
|
1286
|
+
cb: ()=>{
|
|
1287
|
+
// noop
|
|
1288
|
+
},
|
|
1289
|
+
attrs: defaultAttrs,
|
|
1290
|
+
createLinkHook: (url, attrs)=>{
|
|
1291
|
+
const res = host.loaderHook.lifecycle.createLink.emit({
|
|
1292
|
+
url,
|
|
1293
|
+
attrs
|
|
1294
|
+
});
|
|
1295
|
+
if (res instanceof HTMLLinkElement) {
|
|
1296
|
+
return res;
|
|
1297
|
+
}
|
|
1298
|
+
return;
|
|
1299
|
+
}
|
|
1300
|
+
});
|
|
1301
|
+
needAttach && document.head.appendChild(cssEl);
|
|
1302
|
+
});
|
|
1303
|
+
} else {
|
|
1304
|
+
const defaultAttrs = {
|
|
1305
|
+
rel: 'stylesheet',
|
|
1306
|
+
type: 'text/css'
|
|
1307
|
+
};
|
|
1308
|
+
cssAssets.forEach((cssUrl)=>{
|
|
1309
|
+
const { link: cssEl, needAttach } = createLink({
|
|
1310
|
+
url: cssUrl,
|
|
1311
|
+
cb: ()=>{
|
|
1312
|
+
// noop
|
|
1313
|
+
},
|
|
1314
|
+
attrs: defaultAttrs,
|
|
1315
|
+
createLinkHook: (url, attrs)=>{
|
|
1316
|
+
const res = host.loaderHook.lifecycle.createLink.emit({
|
|
1317
|
+
url,
|
|
1318
|
+
attrs
|
|
1319
|
+
});
|
|
1320
|
+
if (res instanceof HTMLLinkElement) {
|
|
1321
|
+
return res;
|
|
1322
|
+
}
|
|
1323
|
+
return;
|
|
1324
|
+
},
|
|
1325
|
+
needDeleteLink: false
|
|
1326
|
+
});
|
|
1327
|
+
needAttach && document.head.appendChild(cssEl);
|
|
1328
|
+
});
|
|
1329
|
+
}
|
|
1330
|
+
if (useLinkPreload) {
|
|
1331
|
+
const defaultAttrs = {
|
|
1332
|
+
rel: 'preload',
|
|
1333
|
+
as: 'script'
|
|
1334
|
+
};
|
|
1335
|
+
jsAssetsWithoutEntry.forEach((jsUrl)=>{
|
|
1336
|
+
const { link: linkEl, needAttach } = createLink({
|
|
1337
|
+
url: jsUrl,
|
|
1338
|
+
cb: ()=>{
|
|
1339
|
+
// noop
|
|
1340
|
+
},
|
|
1341
|
+
attrs: defaultAttrs,
|
|
1342
|
+
createLinkHook: (url, attrs)=>{
|
|
1343
|
+
const res = host.loaderHook.lifecycle.createLink.emit({
|
|
1344
|
+
url,
|
|
1345
|
+
attrs
|
|
1346
|
+
});
|
|
1347
|
+
if (res instanceof HTMLLinkElement) {
|
|
1348
|
+
return res;
|
|
1349
|
+
}
|
|
1350
|
+
return;
|
|
1351
|
+
}
|
|
1352
|
+
});
|
|
1353
|
+
needAttach && document.head.appendChild(linkEl);
|
|
1354
|
+
});
|
|
1355
|
+
} else {
|
|
1356
|
+
const defaultAttrs = {
|
|
1357
|
+
fetchpriority: 'high',
|
|
1358
|
+
type: (remoteInfo == null ? void 0 : remoteInfo.type) === 'module' ? 'module' : 'text/javascript'
|
|
1359
|
+
};
|
|
1360
|
+
jsAssetsWithoutEntry.forEach((jsUrl)=>{
|
|
1361
|
+
const { script: scriptEl, needAttach } = createScript({
|
|
1362
|
+
url: jsUrl,
|
|
1363
|
+
cb: ()=>{
|
|
1364
|
+
// noop
|
|
1365
|
+
},
|
|
1366
|
+
attrs: defaultAttrs,
|
|
1367
|
+
createScriptHook: (url, attrs)=>{
|
|
1368
|
+
const res = host.loaderHook.lifecycle.createScript.emit({
|
|
1369
|
+
url,
|
|
1370
|
+
attrs
|
|
1371
|
+
});
|
|
1372
|
+
if (res instanceof HTMLScriptElement) {
|
|
1373
|
+
return res;
|
|
1374
|
+
}
|
|
1375
|
+
return;
|
|
1376
|
+
},
|
|
1377
|
+
needDeleteScript: true
|
|
1378
|
+
});
|
|
1379
|
+
needAttach && document.head.appendChild(scriptEl);
|
|
1380
|
+
});
|
|
1381
|
+
}
|
|
1382
|
+
}
|
|
1383
|
+
}
|
|
1384
|
+
|
|
1385
|
+
const ShareUtils = {
|
|
1386
|
+
getRegisteredShare,
|
|
1387
|
+
getGlobalShareScope
|
|
1388
|
+
};
|
|
1389
|
+
const GlobalUtils = {
|
|
1390
|
+
Global,
|
|
1391
|
+
nativeGlobal,
|
|
1392
|
+
resetFederationGlobalInfo,
|
|
1393
|
+
setGlobalFederationInstance,
|
|
1394
|
+
getGlobalFederationConstructor,
|
|
1395
|
+
setGlobalFederationConstructor,
|
|
1396
|
+
getInfoWithoutType,
|
|
1397
|
+
getGlobalSnapshot,
|
|
1398
|
+
getTargetSnapshotInfoByModuleInfo,
|
|
1399
|
+
getGlobalSnapshotInfoByModuleInfo,
|
|
1400
|
+
setGlobalSnapshotInfoByModuleInfo,
|
|
1401
|
+
addGlobalSnapshot,
|
|
1402
|
+
getRemoteEntryExports,
|
|
1403
|
+
registerGlobalPlugins,
|
|
1404
|
+
getGlobalHostPlugins,
|
|
1405
|
+
getPreloaded,
|
|
1406
|
+
setPreloaded
|
|
1407
|
+
};
|
|
1408
|
+
var helpers = {
|
|
1409
|
+
global: GlobalUtils,
|
|
1410
|
+
share: ShareUtils,
|
|
1411
|
+
utils: {
|
|
1412
|
+
matchRemoteWithNameAndExpose,
|
|
1413
|
+
preloadAssets,
|
|
1414
|
+
getRemoteInfo
|
|
1415
|
+
}
|
|
1416
|
+
};
|
|
1417
|
+
|
|
1242
1418
|
let Module = class Module {
|
|
1243
1419
|
async getEntry() {
|
|
1244
1420
|
if (this.remoteEntryExports) {
|
|
@@ -1519,13 +1695,14 @@ class AsyncWaterfallHook extends SyncHook {
|
|
|
1519
1695
|
}
|
|
1520
1696
|
|
|
1521
1697
|
class PluginSystem {
|
|
1522
|
-
applyPlugin(plugin) {
|
|
1698
|
+
applyPlugin(plugin, instance) {
|
|
1523
1699
|
assert(isPlainObject(plugin), 'Plugin configuration is invalid.');
|
|
1524
1700
|
// The plugin's name is mandatory and must be unique
|
|
1525
1701
|
const pluginName = plugin.name;
|
|
1526
1702
|
assert(pluginName, 'A name must be provided by the plugin.');
|
|
1527
1703
|
if (!this.registerPlugins[pluginName]) {
|
|
1528
1704
|
this.registerPlugins[pluginName] = plugin;
|
|
1705
|
+
plugin.apply == null ? void 0 : plugin.apply.call(plugin, instance);
|
|
1529
1706
|
Object.keys(this.lifecycle).forEach((key)=>{
|
|
1530
1707
|
const pluginLife = plugin[key];
|
|
1531
1708
|
if (pluginLife) {
|
|
@@ -1544,17 +1721,6 @@ class PluginSystem {
|
|
|
1544
1721
|
}
|
|
1545
1722
|
});
|
|
1546
1723
|
}
|
|
1547
|
-
// eslint-disable-next-line @typescript-eslint/no-shadow
|
|
1548
|
-
inherit({ lifecycle, registerPlugins }) {
|
|
1549
|
-
Object.keys(lifecycle).forEach((hookName)=>{
|
|
1550
|
-
assert(!this.lifecycle[hookName], `The hook "${hookName}" has a conflict and cannot be inherited.`);
|
|
1551
|
-
this.lifecycle[hookName] = lifecycle[hookName];
|
|
1552
|
-
});
|
|
1553
|
-
Object.keys(registerPlugins).forEach((pluginName)=>{
|
|
1554
|
-
assert(!this.registerPlugins[pluginName], `The plugin "${pluginName}" has a conflict and cannot be inherited.`);
|
|
1555
|
-
this.applyPlugin(registerPlugins[pluginName]);
|
|
1556
|
-
});
|
|
1557
|
-
}
|
|
1558
1724
|
constructor(lifecycle){
|
|
1559
1725
|
this.registerPlugins = {};
|
|
1560
1726
|
this.lifecycle = lifecycle;
|
|
@@ -1562,169 +1728,6 @@ class PluginSystem {
|
|
|
1562
1728
|
}
|
|
1563
1729
|
}
|
|
1564
1730
|
|
|
1565
|
-
function defaultPreloadArgs(preloadConfig) {
|
|
1566
|
-
return _extends({
|
|
1567
|
-
resourceCategory: 'sync',
|
|
1568
|
-
share: true,
|
|
1569
|
-
depsRemote: true,
|
|
1570
|
-
prefetchInterface: false
|
|
1571
|
-
}, preloadConfig);
|
|
1572
|
-
}
|
|
1573
|
-
function formatPreloadArgs(remotes, preloadArgs) {
|
|
1574
|
-
return preloadArgs.map((args)=>{
|
|
1575
|
-
const remoteInfo = matchRemote(remotes, args.nameOrAlias);
|
|
1576
|
-
assert(remoteInfo, `Unable to preload ${args.nameOrAlias} as it is not included in ${!remoteInfo && safeToString({
|
|
1577
|
-
remoteInfo,
|
|
1578
|
-
remotes
|
|
1579
|
-
})}`);
|
|
1580
|
-
return {
|
|
1581
|
-
remote: remoteInfo,
|
|
1582
|
-
preloadConfig: defaultPreloadArgs(args)
|
|
1583
|
-
};
|
|
1584
|
-
});
|
|
1585
|
-
}
|
|
1586
|
-
function normalizePreloadExposes(exposes) {
|
|
1587
|
-
if (!exposes) {
|
|
1588
|
-
return [];
|
|
1589
|
-
}
|
|
1590
|
-
return exposes.map((expose)=>{
|
|
1591
|
-
if (expose === '.') {
|
|
1592
|
-
return expose;
|
|
1593
|
-
}
|
|
1594
|
-
if (expose.startsWith('./')) {
|
|
1595
|
-
return expose.replace('./', '');
|
|
1596
|
-
}
|
|
1597
|
-
return expose;
|
|
1598
|
-
});
|
|
1599
|
-
}
|
|
1600
|
-
function preloadAssets(remoteInfo, host, assets, // It is used to distinguish preload from load remote parallel loading
|
|
1601
|
-
useLinkPreload = true) {
|
|
1602
|
-
const { cssAssets, jsAssetsWithoutEntry, entryAssets } = assets;
|
|
1603
|
-
if (host.options.inBrowser) {
|
|
1604
|
-
entryAssets.forEach((asset)=>{
|
|
1605
|
-
const { moduleInfo } = asset;
|
|
1606
|
-
const module = host.moduleCache.get(remoteInfo.name);
|
|
1607
|
-
if (module) {
|
|
1608
|
-
getRemoteEntry({
|
|
1609
|
-
origin: host,
|
|
1610
|
-
remoteInfo: moduleInfo,
|
|
1611
|
-
remoteEntryExports: module.remoteEntryExports
|
|
1612
|
-
});
|
|
1613
|
-
} else {
|
|
1614
|
-
getRemoteEntry({
|
|
1615
|
-
origin: host,
|
|
1616
|
-
remoteInfo: moduleInfo,
|
|
1617
|
-
remoteEntryExports: undefined
|
|
1618
|
-
});
|
|
1619
|
-
}
|
|
1620
|
-
});
|
|
1621
|
-
if (useLinkPreload) {
|
|
1622
|
-
const defaultAttrs = {
|
|
1623
|
-
rel: 'preload',
|
|
1624
|
-
as: 'style'
|
|
1625
|
-
};
|
|
1626
|
-
cssAssets.forEach((cssUrl)=>{
|
|
1627
|
-
const { link: cssEl, needAttach } = createLink({
|
|
1628
|
-
url: cssUrl,
|
|
1629
|
-
cb: ()=>{
|
|
1630
|
-
// noop
|
|
1631
|
-
},
|
|
1632
|
-
attrs: defaultAttrs,
|
|
1633
|
-
createLinkHook: (url, attrs)=>{
|
|
1634
|
-
const res = host.loaderHook.lifecycle.createLink.emit({
|
|
1635
|
-
url,
|
|
1636
|
-
attrs
|
|
1637
|
-
});
|
|
1638
|
-
if (res instanceof HTMLLinkElement) {
|
|
1639
|
-
return res;
|
|
1640
|
-
}
|
|
1641
|
-
return;
|
|
1642
|
-
}
|
|
1643
|
-
});
|
|
1644
|
-
needAttach && document.head.appendChild(cssEl);
|
|
1645
|
-
});
|
|
1646
|
-
} else {
|
|
1647
|
-
const defaultAttrs = {
|
|
1648
|
-
rel: 'stylesheet',
|
|
1649
|
-
type: 'text/css'
|
|
1650
|
-
};
|
|
1651
|
-
cssAssets.forEach((cssUrl)=>{
|
|
1652
|
-
const { link: cssEl, needAttach } = createLink({
|
|
1653
|
-
url: cssUrl,
|
|
1654
|
-
cb: ()=>{
|
|
1655
|
-
// noop
|
|
1656
|
-
},
|
|
1657
|
-
attrs: defaultAttrs,
|
|
1658
|
-
createLinkHook: (url, attrs)=>{
|
|
1659
|
-
const res = host.loaderHook.lifecycle.createLink.emit({
|
|
1660
|
-
url,
|
|
1661
|
-
attrs
|
|
1662
|
-
});
|
|
1663
|
-
if (res instanceof HTMLLinkElement) {
|
|
1664
|
-
return res;
|
|
1665
|
-
}
|
|
1666
|
-
return;
|
|
1667
|
-
},
|
|
1668
|
-
needDeleteLink: false
|
|
1669
|
-
});
|
|
1670
|
-
needAttach && document.head.appendChild(cssEl);
|
|
1671
|
-
});
|
|
1672
|
-
}
|
|
1673
|
-
if (useLinkPreload) {
|
|
1674
|
-
const defaultAttrs = {
|
|
1675
|
-
rel: 'preload',
|
|
1676
|
-
as: 'script'
|
|
1677
|
-
};
|
|
1678
|
-
jsAssetsWithoutEntry.forEach((jsUrl)=>{
|
|
1679
|
-
const { link: linkEl, needAttach } = createLink({
|
|
1680
|
-
url: jsUrl,
|
|
1681
|
-
cb: ()=>{
|
|
1682
|
-
// noop
|
|
1683
|
-
},
|
|
1684
|
-
attrs: defaultAttrs,
|
|
1685
|
-
createLinkHook: (url, attrs)=>{
|
|
1686
|
-
const res = host.loaderHook.lifecycle.createLink.emit({
|
|
1687
|
-
url,
|
|
1688
|
-
attrs
|
|
1689
|
-
});
|
|
1690
|
-
if (res instanceof HTMLLinkElement) {
|
|
1691
|
-
return res;
|
|
1692
|
-
}
|
|
1693
|
-
return;
|
|
1694
|
-
}
|
|
1695
|
-
});
|
|
1696
|
-
needAttach && document.head.appendChild(linkEl);
|
|
1697
|
-
});
|
|
1698
|
-
} else {
|
|
1699
|
-
const defaultAttrs = {
|
|
1700
|
-
fetchpriority: 'high',
|
|
1701
|
-
type: (remoteInfo == null ? void 0 : remoteInfo.type) === 'module' ? 'module' : 'text/javascript'
|
|
1702
|
-
};
|
|
1703
|
-
jsAssetsWithoutEntry.forEach((jsUrl)=>{
|
|
1704
|
-
const { script: scriptEl, needAttach } = createScript({
|
|
1705
|
-
url: jsUrl,
|
|
1706
|
-
cb: ()=>{
|
|
1707
|
-
// noop
|
|
1708
|
-
},
|
|
1709
|
-
attrs: defaultAttrs,
|
|
1710
|
-
createScriptHook: (url, attrs)=>{
|
|
1711
|
-
const res = host.loaderHook.lifecycle.createScript.emit({
|
|
1712
|
-
url,
|
|
1713
|
-
attrs
|
|
1714
|
-
});
|
|
1715
|
-
if (res instanceof HTMLScriptElement) {
|
|
1716
|
-
return res;
|
|
1717
|
-
}
|
|
1718
|
-
return;
|
|
1719
|
-
},
|
|
1720
|
-
needDeleteScript: true
|
|
1721
|
-
});
|
|
1722
|
-
needAttach && document.head.appendChild(scriptEl);
|
|
1723
|
-
});
|
|
1724
|
-
}
|
|
1725
|
-
}
|
|
1726
|
-
}
|
|
1727
|
-
|
|
1728
1731
|
function assignRemoteInfo(remoteInfo, remoteSnapshot) {
|
|
1729
1732
|
const remoteEntryInfo = getRemoteEntryInfoFromSnapshot(remoteSnapshot);
|
|
1730
1733
|
if (!remoteEntryInfo.url) {
|
|
@@ -1930,7 +1933,7 @@ function generatePreloadAssets(origin, preloadOptions, remote, globalSnapshot, r
|
|
|
1930
1933
|
}
|
|
1931
1934
|
}
|
|
1932
1935
|
}, true, memo, remoteSnapshot);
|
|
1933
|
-
if (remoteSnapshot.shared) {
|
|
1936
|
+
if (remoteSnapshot.shared && remoteSnapshot.shared.length > 0) {
|
|
1934
1937
|
const collectSharedAssets = (shareInfo, snapshotShared)=>{
|
|
1935
1938
|
const registeredShared = getRegisteredShare(origin.shareScopeMap, snapshotShared.sharedName, shareInfo, origin.sharedHandler.hooks.lifecycle.resolveShare);
|
|
1936
1939
|
// If the global share does not exist, or the lib function does not exist, it means that the shared has not been loaded yet and can be preloaded.
|
|
@@ -2917,7 +2920,7 @@ class RemoteHandler {
|
|
|
2917
2920
|
}
|
|
2918
2921
|
|
|
2919
2922
|
const USE_SNAPSHOT = typeof FEDERATION_OPTIMIZE_NO_SNAPSHOT_PLUGIN === 'boolean' ? !FEDERATION_OPTIMIZE_NO_SNAPSHOT_PLUGIN : true; // Default to true (use snapshot) when not explicitly defined
|
|
2920
|
-
class
|
|
2923
|
+
class ModuleFederation {
|
|
2921
2924
|
initOptions(userOptions) {
|
|
2922
2925
|
this.registerPlugins(userOptions.plugins);
|
|
2923
2926
|
const options = this.formatOptions(this.options, userOptions);
|
|
@@ -2994,14 +2997,7 @@ class FederationHost {
|
|
|
2994
2997
|
return optionsRes;
|
|
2995
2998
|
}
|
|
2996
2999
|
registerPlugins(plugins) {
|
|
2997
|
-
const pluginRes = registerPlugins(plugins,
|
|
2998
|
-
this.hooks,
|
|
2999
|
-
this.remoteHandler.hooks,
|
|
3000
|
-
this.sharedHandler.hooks,
|
|
3001
|
-
this.snapshotHandler.hooks,
|
|
3002
|
-
this.loaderHook,
|
|
3003
|
-
this.bridgeHook
|
|
3004
|
-
]);
|
|
3000
|
+
const pluginRes = registerPlugins(plugins, this);
|
|
3005
3001
|
// Merge plugin
|
|
3006
3002
|
this.options.plugins = this.options.plugins.reduce((res, plugin)=>{
|
|
3007
3003
|
if (!plugin) return res;
|
|
@@ -3014,6 +3010,11 @@ class FederationHost {
|
|
|
3014
3010
|
registerRemotes(remotes, options) {
|
|
3015
3011
|
return this.remoteHandler.registerRemotes(remotes, options);
|
|
3016
3012
|
}
|
|
3013
|
+
registerShared(shared) {
|
|
3014
|
+
this.sharedHandler.registerShared(this.options, _extends({}, this.options, {
|
|
3015
|
+
shared
|
|
3016
|
+
}));
|
|
3017
|
+
}
|
|
3017
3018
|
constructor(userOptions){
|
|
3018
3019
|
this.hooks = new PluginSystem({
|
|
3019
3020
|
beforeInit: new SyncWaterfallHook('beforeInit'),
|
|
@@ -3023,7 +3024,7 @@ class FederationHost {
|
|
|
3023
3024
|
// maybe will change, temporarily for internal use only
|
|
3024
3025
|
initContainer: new AsyncWaterfallHook('initContainer')
|
|
3025
3026
|
});
|
|
3026
|
-
this.version = "0.
|
|
3027
|
+
this.version = "0.17.0";
|
|
3027
3028
|
this.moduleCache = new Map();
|
|
3028
3029
|
this.loaderHook = new PluginSystem({
|
|
3029
3030
|
// FIXME: may not be suitable , not open to the public yet
|
|
@@ -3072,4 +3073,4 @@ var index = /*#__PURE__*/Object.freeze({
|
|
|
3072
3073
|
__proto__: null
|
|
3073
3074
|
});
|
|
3074
3075
|
|
|
3075
|
-
export { CurrentGlobal,
|
|
3076
|
+
export { CurrentGlobal, Global, Module, ModuleFederation, addGlobalSnapshot, assert, getGlobalFederationConstructor, getGlobalSnapshot, getInfoWithoutType, getRegisteredShare, getRemoteEntry, getRemoteInfo, helpers, isStaticResourcesEqual, matchRemoteWithNameAndExpose, registerGlobalPlugins, resetFederationGlobalInfo, safeWrapper, satisfy, setGlobalFederationConstructor, setGlobalFederationInstance, index as types };
|
package/dist/src/core.d.ts
CHANGED
|
@@ -6,25 +6,25 @@ import { AsyncHook, AsyncWaterfallHook, PluginSystem, SyncHook, SyncWaterfallHoo
|
|
|
6
6
|
import { SnapshotHandler } from './plugins/snapshot/SnapshotHandler';
|
|
7
7
|
import { SharedHandler } from './shared';
|
|
8
8
|
import { RemoteHandler } from './remote';
|
|
9
|
-
export declare class
|
|
9
|
+
export declare class ModuleFederation {
|
|
10
10
|
options: Options;
|
|
11
11
|
hooks: PluginSystem<{
|
|
12
12
|
beforeInit: SyncWaterfallHook<{
|
|
13
13
|
userOptions: UserOptions;
|
|
14
14
|
options: Options;
|
|
15
|
-
origin:
|
|
15
|
+
origin: ModuleFederation;
|
|
16
16
|
shareInfo: ShareInfos;
|
|
17
17
|
}>;
|
|
18
18
|
init: SyncHook<[{
|
|
19
19
|
options: Options;
|
|
20
|
-
origin:
|
|
20
|
+
origin: ModuleFederation;
|
|
21
21
|
}], void>;
|
|
22
22
|
beforeInitContainer: AsyncWaterfallHook<{
|
|
23
23
|
shareScope: ShareScopeMap[string];
|
|
24
24
|
initScope: InitScope;
|
|
25
25
|
remoteEntryInitOptions: RemoteEntryInitOptions;
|
|
26
26
|
remoteInfo: RemoteInfo;
|
|
27
|
-
origin:
|
|
27
|
+
origin: ModuleFederation;
|
|
28
28
|
}>;
|
|
29
29
|
initContainer: AsyncWaterfallHook<{
|
|
30
30
|
shareScope: ShareScopeMap[string];
|
|
@@ -32,7 +32,7 @@ export declare class FederationHost {
|
|
|
32
32
|
remoteEntryInitOptions: RemoteEntryInitOptions;
|
|
33
33
|
remoteInfo: RemoteInfo;
|
|
34
34
|
remoteEntryExports: RemoteEntryExports;
|
|
35
|
-
origin:
|
|
35
|
+
origin: ModuleFederation;
|
|
36
36
|
id: string;
|
|
37
37
|
remoteSnapshot?: ModuleInfo;
|
|
38
38
|
}>;
|
|
@@ -63,7 +63,7 @@ export declare class FederationHost {
|
|
|
63
63
|
fetch: AsyncHook<[string, RequestInit], false | void | Promise<Response>>;
|
|
64
64
|
loadEntryError: AsyncHook<[{
|
|
65
65
|
getRemoteEntry: typeof getRemoteEntry;
|
|
66
|
-
origin:
|
|
66
|
+
origin: ModuleFederation;
|
|
67
67
|
remoteInfo: RemoteInfo;
|
|
68
68
|
remoteEntryExports?: RemoteEntryExports | undefined;
|
|
69
69
|
globalLoading: Record<string, Promise<void | RemoteEntryExports> | undefined>;
|
|
@@ -111,4 +111,5 @@ export declare class FederationHost {
|
|
|
111
111
|
registerRemotes(remotes: Remote[], options?: {
|
|
112
112
|
force?: boolean;
|
|
113
113
|
}): void;
|
|
114
|
+
registerShared(shared: UserOptions['shared']): void;
|
|
114
115
|
}
|
package/dist/src/global.d.ts
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { ModuleFederation } from './core';
|
|
2
2
|
import { RemoteEntryExports, GlobalShareScopeMap, Remote, Optional } from './type';
|
|
3
3
|
import { GlobalModuleInfo, ModuleInfo } from '@module-federation/sdk';
|
|
4
|
-
import {
|
|
4
|
+
import { ModuleFederationRuntimePlugin } from './type/plugin';
|
|
5
5
|
export interface Federation {
|
|
6
|
-
__GLOBAL_PLUGIN__: Array<
|
|
6
|
+
__GLOBAL_PLUGIN__: Array<ModuleFederationRuntimePlugin>;
|
|
7
7
|
__DEBUG_CONSTRUCTOR_VERSION__?: string;
|
|
8
8
|
moduleInfo: GlobalModuleInfo;
|
|
9
|
-
__DEBUG_CONSTRUCTOR__?: typeof
|
|
10
|
-
__INSTANCES__: Array<
|
|
9
|
+
__DEBUG_CONSTRUCTOR__?: typeof ModuleFederation;
|
|
10
|
+
__INSTANCES__: Array<ModuleFederation>;
|
|
11
11
|
__SHARE__: GlobalShareScopeMap;
|
|
12
12
|
__MANIFEST_LOADING__: Record<string, Promise<ModuleInfo>>;
|
|
13
13
|
__PRELOADED_MAP__: Map<string, boolean>;
|
|
@@ -20,9 +20,9 @@ declare global {
|
|
|
20
20
|
}
|
|
21
21
|
export declare const globalLoading: Record<string, Promise<void | RemoteEntryExports> | undefined>;
|
|
22
22
|
export declare function resetFederationGlobalInfo(): void;
|
|
23
|
-
export declare function setGlobalFederationInstance(FederationInstance:
|
|
24
|
-
export declare function getGlobalFederationConstructor(): typeof
|
|
25
|
-
export declare function setGlobalFederationConstructor(FederationConstructor: typeof
|
|
23
|
+
export declare function setGlobalFederationInstance(FederationInstance: ModuleFederation): void;
|
|
24
|
+
export declare function getGlobalFederationConstructor(): typeof ModuleFederation | undefined;
|
|
25
|
+
export declare function setGlobalFederationConstructor(FederationConstructor: typeof ModuleFederation | undefined, isDebug?: boolean): void;
|
|
26
26
|
export declare function getInfoWithoutType<T extends object>(target: T, key: keyof T): {
|
|
27
27
|
value: T[keyof T] | undefined;
|
|
28
28
|
key: string;
|
|
@@ -36,7 +36,7 @@ export declare const getRemoteEntryExports: (name: string, globalName: string |
|
|
|
36
36
|
remoteEntryKey: string;
|
|
37
37
|
entryExports: RemoteEntryExports | undefined;
|
|
38
38
|
};
|
|
39
|
-
export declare const registerGlobalPlugins: (plugins: Array<
|
|
40
|
-
export declare const getGlobalHostPlugins: () => Array<
|
|
39
|
+
export declare const registerGlobalPlugins: (plugins: Array<ModuleFederationRuntimePlugin>) => void;
|
|
40
|
+
export declare const getGlobalHostPlugins: () => Array<ModuleFederationRuntimePlugin>;
|
|
41
41
|
export declare const getPreloaded: (id: string) => boolean | undefined;
|
|
42
42
|
export declare const setPreloaded: (id: string) => Map<string, boolean>;
|
package/dist/src/helpers.d.ts
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import { resetFederationGlobalInfo, setGlobalFederationInstance, getGlobalFederationConstructor, setGlobalFederationConstructor, getInfoWithoutType, getGlobalSnapshot, getTargetSnapshotInfoByModuleInfo, getGlobalSnapshotInfoByModuleInfo, setGlobalSnapshotInfoByModuleInfo, addGlobalSnapshot, getRemoteEntryExports, registerGlobalPlugins, getGlobalHostPlugins, getPreloaded, setPreloaded, Global } from './global';
|
|
2
2
|
import { getRegisteredShare, getGlobalShareScope } from './utils/share';
|
|
3
|
+
import { getRemoteInfo, matchRemoteWithNameAndExpose } from './utils';
|
|
4
|
+
import { preloadAssets } from './utils/preload';
|
|
3
5
|
interface IShareUtils {
|
|
4
6
|
getRegisteredShare: typeof getRegisteredShare;
|
|
5
7
|
getGlobalShareScope: typeof getGlobalShareScope;
|
|
@@ -26,6 +28,11 @@ interface IGlobalUtils {
|
|
|
26
28
|
declare const _default: {
|
|
27
29
|
global: IGlobalUtils;
|
|
28
30
|
share: IShareUtils;
|
|
31
|
+
utils: {
|
|
32
|
+
matchRemoteWithNameAndExpose: typeof matchRemoteWithNameAndExpose;
|
|
33
|
+
preloadAssets: typeof preloadAssets;
|
|
34
|
+
getRemoteInfo: typeof getRemoteInfo;
|
|
35
|
+
};
|
|
29
36
|
};
|
|
30
37
|
export default _default;
|
|
31
38
|
export type { IGlobalUtils, IShareUtils };
|
package/dist/src/index.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import helpers, { type IGlobalUtils, type IShareUtils } from './helpers';
|
|
2
|
-
export {
|
|
2
|
+
export { ModuleFederation } from './core';
|
|
3
3
|
export { type Federation, CurrentGlobal, Global, getGlobalFederationConstructor, setGlobalFederationInstance, setGlobalFederationConstructor, resetFederationGlobalInfo, addGlobalSnapshot, getGlobalSnapshot, getInfoWithoutType, } from './global';
|
|
4
|
-
export type { UserOptions,
|
|
4
|
+
export type { UserOptions, ModuleFederationRuntimePlugin } from './type';
|
|
5
5
|
export { assert } from './utils/logger';
|
|
6
6
|
export { registerGlobalPlugins } from './global';
|
|
7
7
|
export { getRemoteEntry, getRemoteInfo, isStaticResourcesEqual, matchRemoteWithNameAndExpose, safeWrapper, } from './utils';
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { ModuleInfo } from '@module-federation/sdk';
|
|
2
|
-
import {
|
|
2
|
+
import { ModuleFederation } from '../core';
|
|
3
3
|
import { RemoteEntryExports, RemoteInfo } from '../type';
|
|
4
4
|
export type ModuleOptions = ConstructorParameters<typeof Module>[0];
|
|
5
5
|
declare class Module {
|
|
@@ -7,10 +7,10 @@ declare class Module {
|
|
|
7
7
|
inited: boolean;
|
|
8
8
|
remoteEntryExports?: RemoteEntryExports;
|
|
9
9
|
lib: RemoteEntryExports | undefined;
|
|
10
|
-
host:
|
|
10
|
+
host: ModuleFederation;
|
|
11
11
|
constructor({ remoteInfo, host, }: {
|
|
12
12
|
remoteInfo: RemoteInfo;
|
|
13
|
-
host:
|
|
13
|
+
host: ModuleFederation;
|
|
14
14
|
});
|
|
15
15
|
getEntry(): Promise<RemoteEntryExports>;
|
|
16
16
|
get(id: string, expose: string, options?: {
|