@module-federation/runtime
Advanced tools
Comparing version 0.0.0-next-20231229091919 to 0.0.0-next-20231230034830
@@ -6,3 +6,3 @@ 'use strict'; | ||
const ShareUtils = { | ||
getGlobalShare: share.getGlobalShare, | ||
getRegisteredShare: share.getRegisteredShare, | ||
getGlobalShareScope: share.getGlobalShareScope | ||
@@ -9,0 +9,0 @@ }; |
@@ -1,5 +0,5 @@ | ||
import { l as getGlobalShare, x as getGlobalShareScope, F as nativeGlobal, H as resetFederationGlobalInfo, A as getGlobalFederationInstance, C as setGlobalFederationInstance, B as getGlobalFederationConstructor, z as setGlobalFederationConstructor, m as getInfoWithoutType, r as getGlobalSnapshot, I as getTargetSnapshotInfoByModuleInfo, p as getGlobalSnapshotInfoByModuleInfo, q as setGlobalSnapshotInfoByModuleInfo, J as addGlobalSnapshot, c as getRemoteEntryExports, E as registerGlobalPlugins, g as getGlobalHostPlugins, n as getPreloaded, o as setPreloaded } from './share.esm.js'; | ||
import { l as getRegisteredShare, t as getGlobalShareScope, F as nativeGlobal, H as resetFederationGlobalInfo, A as getGlobalFederationInstance, C as setGlobalFederationInstance, B as getGlobalFederationConstructor, z as setGlobalFederationConstructor, m as getInfoWithoutType, r as getGlobalSnapshot, I as getTargetSnapshotInfoByModuleInfo, p as getGlobalSnapshotInfoByModuleInfo, q as setGlobalSnapshotInfoByModuleInfo, J as addGlobalSnapshot, c as getRemoteEntryExports, E as registerGlobalPlugins, g as getGlobalHostPlugins, n as getPreloaded, o as setPreloaded } from './share.esm.js'; | ||
const ShareUtils = { | ||
getGlobalShare, | ||
getRegisteredShare, | ||
getGlobalShareScope | ||
@@ -6,0 +6,0 @@ }; |
{ | ||
"name": "@module-federation/runtime", | ||
"version": "0.0.4", | ||
"version": "0.0.5", | ||
"author": "zhouxiao <codingzx@gmail.com>", | ||
@@ -42,4 +42,4 @@ "main": "./index.cjs.js", | ||
], | ||
"type": [ | ||
"./dist/type.cjs.d.ts" | ||
"types": [ | ||
"./dist/types.cjs.d.ts" | ||
] | ||
@@ -46,0 +46,0 @@ } |
'use strict'; | ||
function getBuilderId() { | ||
//@ts-ignore | ||
return typeof FEDERATION_BUILD_IDENTIFIER !== 'undefined' ? FEDERATION_BUILD_IDENTIFIER : ''; | ||
@@ -91,67 +92,57 @@ } | ||
} | ||
var _nativeGlobal___FEDERATION__, _nativeGlobal___FEDERATION__1, _nativeGlobal___FEDERATION__2, _nativeGlobal___FEDERATION__3, _nativeGlobal___FEDERATION__4, _nativeGlobal___FEDERATION__5; | ||
// export const nativeGlobal: typeof global = new Function('return this')(); | ||
const nativeGlobal = new Function('return this')(); | ||
const Global = nativeGlobal; | ||
function definePropertyGlobalVal(target, key, val) { | ||
Object.defineProperty(target, key, { | ||
value: val, | ||
configurable: false, | ||
writable: true | ||
}); | ||
} | ||
function includeOwnProperty(target, key) { | ||
return Object.hasOwnProperty.call(target, key); | ||
} | ||
// This section is to prevent encapsulation by certain microfrontend frameworks. Due to reuse policies, sandbox escapes. | ||
// The sandbox in the microfrontend does not replicate the value of 'configurable'. | ||
// If there is no loading content on the global object, this section defines the loading object. | ||
if (!includeOwnProperty(globalThis, '__GLOBAL_LOADING_REMOTE_ENTRY__')) { | ||
definePropertyGlobalVal(globalThis, '__GLOBAL_LOADING_REMOTE_ENTRY__', {}); | ||
if (!Object.hasOwnProperty.call(globalThis, '__GLOBAL_LOADING_REMOTE_ENTRY__')) { | ||
Object.defineProperty(globalThis, '__GLOBAL_LOADING_REMOTE_ENTRY__', { | ||
value: {}, | ||
configurable: false | ||
}); | ||
} | ||
const globalLoading = globalThis.__GLOBAL_LOADING_REMOTE_ENTRY__; | ||
function setGlobalDefaultVal(target) { | ||
var _target___FEDERATION__, _target___FEDERATION__1, _target___FEDERATION__2, _target___FEDERATION__3, _target___FEDERATION__4, _target___FEDERATION__5, _target___FEDERATION__6; | ||
if (includeOwnProperty(target, '__VMOK__') && !includeOwnProperty(target, '__FEDERATION__')) { | ||
definePropertyGlobalVal(target, '__FEDERATION__', target.__VMOK__); | ||
// | ||
if (nativeGlobal.__VMOK__) { | ||
nativeGlobal.__FEDERATION__ = nativeGlobal.__VMOK__; | ||
} else if (!nativeGlobal.__FEDERATION__) { | ||
nativeGlobal.__FEDERATION__ = { | ||
__GLOBAL_PLUGIN__: [], | ||
__INSTANCES__: [], | ||
moduleInfo: {}, | ||
__SHARE__: {}, | ||
__MANIFEST_LOADING__: {}, | ||
__PRELOADED_MAP__: new Map() | ||
}; | ||
nativeGlobal.__VMOK__ = nativeGlobal.__FEDERATION__; | ||
} | ||
var ___GLOBAL_PLUGIN__; | ||
(___GLOBAL_PLUGIN__ = (_nativeGlobal___FEDERATION__ = nativeGlobal.__FEDERATION__).__GLOBAL_PLUGIN__) != null ? ___GLOBAL_PLUGIN__ : _nativeGlobal___FEDERATION__.__GLOBAL_PLUGIN__ = []; | ||
var ___INSTANCES__; | ||
(___INSTANCES__ = (_nativeGlobal___FEDERATION__1 = nativeGlobal.__FEDERATION__).__INSTANCES__) != null ? ___INSTANCES__ : _nativeGlobal___FEDERATION__1.__INSTANCES__ = []; | ||
var _moduleInfo; | ||
(_moduleInfo = (_nativeGlobal___FEDERATION__2 = nativeGlobal.__FEDERATION__).moduleInfo) != null ? _moduleInfo : _nativeGlobal___FEDERATION__2.moduleInfo = {}; | ||
var ___SHARE__; | ||
(___SHARE__ = (_nativeGlobal___FEDERATION__3 = nativeGlobal.__FEDERATION__).__SHARE__) != null ? ___SHARE__ : _nativeGlobal___FEDERATION__3.__SHARE__ = {}; | ||
var ___MANIFEST_LOADING__; | ||
(___MANIFEST_LOADING__ = (_nativeGlobal___FEDERATION__4 = nativeGlobal.__FEDERATION__).__MANIFEST_LOADING__) != null ? ___MANIFEST_LOADING__ : _nativeGlobal___FEDERATION__4.__MANIFEST_LOADING__ = {}; | ||
var ___PRELOADED_MAP__; | ||
(___PRELOADED_MAP__ = (_nativeGlobal___FEDERATION__5 = nativeGlobal.__FEDERATION__).__PRELOADED_MAP__) != null ? ___PRELOADED_MAP__ : _nativeGlobal___FEDERATION__5.__PRELOADED_MAP__ = new Map(); | ||
const Global = { | ||
get __FEDERATION__ () { | ||
const globalThisVal = new Function('return globalThis')(); | ||
return globalThisVal.__FEDERATION__; | ||
} | ||
if (!includeOwnProperty(target, '__FEDERATION__')) { | ||
definePropertyGlobalVal(target, '__FEDERATION__', { | ||
__GLOBAL_PLUGIN__: [], | ||
__INSTANCES__: [], | ||
moduleInfo: {}, | ||
__SHARE__: {}, | ||
__MANIFEST_LOADING__: {}, | ||
__SHARE_SCOPE_LOADING__: {}, | ||
__PRELOADED_MAP__: new Map() | ||
}); | ||
definePropertyGlobalVal(target, '__VMOK__', target.__FEDERATION__); | ||
} | ||
var ___GLOBAL_PLUGIN__; | ||
(___GLOBAL_PLUGIN__ = (_target___FEDERATION__ = target.__FEDERATION__).__GLOBAL_PLUGIN__) != null ? ___GLOBAL_PLUGIN__ : _target___FEDERATION__.__GLOBAL_PLUGIN__ = []; | ||
var ___INSTANCES__; | ||
(___INSTANCES__ = (_target___FEDERATION__1 = target.__FEDERATION__).__INSTANCES__) != null ? ___INSTANCES__ : _target___FEDERATION__1.__INSTANCES__ = []; | ||
var _moduleInfo; | ||
(_moduleInfo = (_target___FEDERATION__2 = target.__FEDERATION__).moduleInfo) != null ? _moduleInfo : _target___FEDERATION__2.moduleInfo = {}; | ||
var ___SHARE__; | ||
(___SHARE__ = (_target___FEDERATION__3 = target.__FEDERATION__).__SHARE__) != null ? ___SHARE__ : _target___FEDERATION__3.__SHARE__ = {}; | ||
var ___MANIFEST_LOADING__; | ||
(___MANIFEST_LOADING__ = (_target___FEDERATION__4 = target.__FEDERATION__).__MANIFEST_LOADING__) != null ? ___MANIFEST_LOADING__ : _target___FEDERATION__4.__MANIFEST_LOADING__ = {}; | ||
var ___SHARE_SCOPE_LOADING__; | ||
(___SHARE_SCOPE_LOADING__ = (_target___FEDERATION__5 = target.__FEDERATION__).__SHARE_SCOPE_LOADING__) != null ? ___SHARE_SCOPE_LOADING__ : _target___FEDERATION__5.__SHARE_SCOPE_LOADING__ = {}; | ||
var ___PRELOADED_MAP__; | ||
(___PRELOADED_MAP__ = (_target___FEDERATION__6 = target.__FEDERATION__).__PRELOADED_MAP__) != null ? ___PRELOADED_MAP__ : _target___FEDERATION__6.__PRELOADED_MAP__ = new Map(); | ||
} | ||
setGlobalDefaultVal(globalThis); | ||
setGlobalDefaultVal(nativeGlobal); | ||
}; | ||
function resetFederationGlobalInfo() { | ||
globalThis.__FEDERATION__.__GLOBAL_PLUGIN__ = []; | ||
globalThis.__FEDERATION__.__INSTANCES__ = []; | ||
globalThis.__FEDERATION__.moduleInfo = {}; | ||
globalThis.__FEDERATION__.__SHARE__ = {}; | ||
globalThis.__FEDERATION__.__MANIFEST_LOADING__ = {}; | ||
globalThis.__FEDERATION__.__SHARE_SCOPE_LOADING__ = {}; | ||
nativeGlobal.__FEDERATION__.__GLOBAL_PLUGIN__ = []; | ||
nativeGlobal.__FEDERATION__.__INSTANCES__ = []; | ||
nativeGlobal.__FEDERATION__.moduleInfo = {}; | ||
nativeGlobal.__FEDERATION__.__SHARE__ = {}; | ||
nativeGlobal.__FEDERATION__.__MANIFEST_LOADING__ = {}; | ||
} | ||
function getGlobalFederationInstance(name, version) { | ||
const buildId = getBuilderId(); | ||
return globalThis.__FEDERATION__.__INSTANCES__.find((GMInstance)=>{ | ||
return Global.__FEDERATION__.__INSTANCES__.find((GMInstance)=>{ | ||
if (buildId && GMInstance.options.id === getBuilderId()) { | ||
@@ -170,11 +161,11 @@ return true; | ||
function setGlobalFederationInstance(FederationInstance) { | ||
globalThis.__FEDERATION__.__INSTANCES__.push(FederationInstance); | ||
Global.__FEDERATION__.__INSTANCES__.push(FederationInstance); | ||
} | ||
function getGlobalFederationConstructor() { | ||
return globalThis.__FEDERATION__.__DEBUG_CONSTRUCTOR__; | ||
return Global.__FEDERATION__.__DEBUG_CONSTRUCTOR__; | ||
} | ||
function setGlobalFederationConstructor(FederationConstructor) { | ||
if (isDebugMode()) { | ||
globalThis.__FEDERATION__.__DEBUG_CONSTRUCTOR__ = FederationConstructor; | ||
globalThis.__FEDERATION__.__DEBUG_CONSTRUCTOR_VERSION__ = '0.0.4'; | ||
Global.__FEDERATION__.__DEBUG_CONSTRUCTOR__ = FederationConstructor; | ||
Global.__FEDERATION__.__DEBUG_CONSTRUCTOR_VERSION__ = '0.0.5'; | ||
} | ||
@@ -194,3 +185,3 @@ } | ||
} | ||
const getGlobalSnapshot = ()=>nativeGlobal.__FEDERATION__.moduleInfo; | ||
const getGlobalSnapshot = ()=>Global.__FEDERATION__.moduleInfo; | ||
const getTargetSnapshotInfoByModuleInfo = (moduleInfo, snapshot, getModuleInfoHook)=>{ | ||
@@ -213,3 +204,3 @@ // Check if the remote is included in the hostSnapshot | ||
const moduleKeyWithoutVersion = getFMId(resModuleInfo); | ||
const getModuleInfoWithoutVersion = getInfoWithoutType(nativeGlobal.__FEDERATION__.moduleInfo, moduleKeyWithoutVersion, getModuleInfoHook).value; | ||
const getModuleInfoWithoutVersion = getInfoWithoutType(Global.__FEDERATION__.moduleInfo, moduleKeyWithoutVersion, getModuleInfoHook).value; | ||
if ((getModuleInfoWithoutVersion == null ? void 0 : getModuleInfoWithoutVersion.version) === version) { | ||
@@ -221,14 +212,14 @@ return getModuleInfoWithoutVersion; | ||
}; | ||
const getGlobalSnapshotInfoByModuleInfo = (moduleInfo, extraOptions)=>getTargetSnapshotInfoByModuleInfo(moduleInfo, nativeGlobal.__FEDERATION__.moduleInfo, extraOptions == null ? void 0 : extraOptions.getModuleInfoHook); | ||
const getGlobalSnapshotInfoByModuleInfo = (moduleInfo, extraOptions)=>getTargetSnapshotInfoByModuleInfo(moduleInfo, Global.__FEDERATION__.moduleInfo, extraOptions == null ? void 0 : extraOptions.getModuleInfoHook); | ||
const setGlobalSnapshotInfoByModuleInfo = (remoteInfo, moduleDetailInfo)=>{ | ||
const moduleKey = getFMId(remoteInfo); | ||
nativeGlobal.__FEDERATION__.moduleInfo[moduleKey] = moduleDetailInfo; | ||
return nativeGlobal.__FEDERATION__.moduleInfo; | ||
Global.__FEDERATION__.moduleInfo[moduleKey] = moduleDetailInfo; | ||
return Global.__FEDERATION__.moduleInfo; | ||
}; | ||
const addGlobalSnapshot = (moduleInfos)=>{ | ||
nativeGlobal.__FEDERATION__.moduleInfo = _extends$1({}, nativeGlobal.__FEDERATION__.moduleInfo, moduleInfos); | ||
Global.__FEDERATION__.moduleInfo = _extends$1({}, Global.__FEDERATION__.moduleInfo, moduleInfos); | ||
return ()=>{ | ||
const keys = Object.keys(moduleInfos); | ||
for (const key of keys){ | ||
delete nativeGlobal.__FEDERATION__.moduleInfo[key]; | ||
delete Global.__FEDERATION__.moduleInfo[key]; | ||
} | ||
@@ -250,3 +241,3 @@ }; | ||
const registerGlobalPlugins = (plugins)=>{ | ||
const { __GLOBAL_PLUGIN__ } = nativeGlobal.__FEDERATION__; | ||
const { __GLOBAL_PLUGIN__ } = Global.__FEDERATION__; | ||
plugins.forEach((plugin)=>{ | ||
@@ -260,5 +251,5 @@ if (__GLOBAL_PLUGIN__.findIndex((p)=>p.name === plugin.name) === -1) { | ||
}; | ||
const getGlobalHostPlugins = ()=>nativeGlobal.__FEDERATION__.__GLOBAL_PLUGIN__; | ||
const getPreloaded = (id)=>globalThis.__FEDERATION__.__PRELOADED_MAP__.get(id); | ||
const setPreloaded = (id)=>globalThis.__FEDERATION__.__PRELOADED_MAP__.set(id, true); | ||
const getGlobalHostPlugins = ()=>Global.__FEDERATION__.__GLOBAL_PLUGIN__; | ||
const getPreloaded = (id)=>Global.__FEDERATION__.__PRELOADED_MAP__.get(id); | ||
const setPreloaded = (id)=>Global.__FEDERATION__.__PRELOADED_MAP__.set(id, true); | ||
@@ -633,10 +624,12 @@ const DEFAULT_SCOPE = 'default'; | ||
from, | ||
shareConfig: { | ||
loading: null | ||
}, shareArgs, { | ||
shareConfig: _extends({ | ||
requiredVersion: `^${shareArgs.version}`, | ||
singleton: false, | ||
eager: false | ||
}, | ||
loading: null | ||
}, shareArgs, { | ||
eager: false, | ||
strictVersion: false | ||
}, shareArgs.shareConfig), | ||
get, | ||
loaded: 'lib' in shareArgs ? true : undefined, | ||
scope: Array.isArray(shareArgs.scope) ? shareArgs.scope : [ | ||
@@ -658,3 +651,15 @@ 'default' | ||
function versionLt(a, b) { | ||
if (satisfy(a, `<=${b}`)) { | ||
const transformInvalidVersion = (version)=>{ | ||
const isNumberVersion = !Number.isNaN(Number(version)); | ||
if (isNumberVersion) { | ||
const splitArr = version.split('.'); | ||
let validVersion = version; | ||
for(let i = 0; i < 3 - splitArr.length; i++){ | ||
validVersion += '.0'; | ||
} | ||
return validVersion; | ||
} | ||
return version; | ||
}; | ||
if (satisfy(transformInvalidVersion(a), `<=${transformInvalidVersion(b)}`)) { | ||
return true; | ||
@@ -665,5 +670,4 @@ } else { | ||
} | ||
const findVersion = (scope, pkgName, cb)=>{ | ||
const globalShares = Global.__FEDERATION__.__SHARE__; | ||
const versions = globalShares[scope][pkgName]; | ||
const findVersion = (shareScopeMap, scope, pkgName, cb)=>{ | ||
const versions = shareScopeMap[scope][pkgName]; | ||
const callback = cb || function(prev, cur) { | ||
@@ -679,16 +683,18 @@ return versionLt(prev, cur); | ||
} | ||
// default version is '0' https://github.com/webpack/webpack/blob/main/lib/sharing/ProvideSharedModule.js#L136 | ||
if (prev === '0') { | ||
return cur; | ||
} | ||
return prev; | ||
}, 0); | ||
}; | ||
function findSingletonVersionOrderByVersion(scope, pkgName) { | ||
const globalShares = Global.__FEDERATION__.__SHARE__; | ||
const versions = globalShares[scope][pkgName]; | ||
function findSingletonVersionOrderByVersion(shareScopeMap, scope, pkgName) { | ||
const versions = shareScopeMap[scope][pkgName]; | ||
const callback = function(prev, cur) { | ||
return !versions[prev].loaded && versionLt(prev, cur); | ||
}; | ||
return findVersion(scope, pkgName, callback); | ||
return findVersion(shareScopeMap, scope, pkgName, callback); | ||
} | ||
function findSingletonVersionOrderByLoaded(scope, pkgName) { | ||
const globalShares = Global.__FEDERATION__.__SHARE__; | ||
const versions = globalShares[scope][pkgName]; | ||
function findSingletonVersionOrderByLoaded(shareScopeMap, scope, pkgName) { | ||
const versions = shareScopeMap[scope][pkgName]; | ||
const callback = function(prev, cur) { | ||
@@ -707,8 +713,16 @@ if (versions[cur].loaded) { | ||
}; | ||
return findVersion(scope, pkgName, callback); | ||
return findVersion(shareScopeMap, scope, pkgName, callback); | ||
} | ||
function getFindShareFunction(strategy) { | ||
if (strategy === 'loaded-first') { | ||
return findSingletonVersionOrderByLoaded; | ||
} | ||
return findSingletonVersionOrderByVersion; | ||
} | ||
// Details about shared resources | ||
// TODO: Implement strictVersion for alignment with module federation. | ||
function getGlobalShare(pkgName, shareInfo) { | ||
const globalShares = Global.__FEDERATION__.__SHARE__; | ||
function getRegisteredShare(localShareScopeMap, pkgName, shareInfo, resolveShare) { | ||
if (!localShareScopeMap) { | ||
return; | ||
} | ||
const { shareConfig, scope = DEFAULT_SCOPE, strategy } = shareInfo; | ||
@@ -719,30 +733,39 @@ const scopes = Array.isArray(scope) ? scope : [ | ||
for (const sc of scopes){ | ||
if (shareConfig && globalShares[sc] && globalShares[sc][pkgName]) { | ||
if (shareConfig && localShareScopeMap[sc] && localShareScopeMap[sc][pkgName]) { | ||
const { requiredVersion } = shareConfig; | ||
// eslint-disable-next-line max-depth | ||
if (shareConfig.singleton) { | ||
const singletonVersion = strategy === 'loaded-first' ? findSingletonVersionOrderByLoaded(sc, pkgName) : findSingletonVersionOrderByVersion(sc, pkgName); | ||
// eslint-disable-next-line max-depth | ||
if (typeof requiredVersion === 'string' && !satisfy(singletonVersion, requiredVersion)) { | ||
warn(`Version ${singletonVersion} from ${singletonVersion && globalShares[sc][pkgName][singletonVersion].from} of shared singleton module ${pkgName} does not satisfy the requirement of ${shareInfo.from} which needs ${requiredVersion})`); | ||
} | ||
return globalShares[sc][pkgName][singletonVersion]; | ||
} else { | ||
const maxVersion = findSingletonVersionOrderByLoaded(sc, pkgName); | ||
// eslint-disable-next-line max-depth | ||
if (requiredVersion === false || requiredVersion === '*') { | ||
return globalShares[sc][pkgName][maxVersion]; | ||
} | ||
// eslint-disable-next-line max-depth | ||
if (satisfy(maxVersion, requiredVersion)) { | ||
return globalShares[sc][pkgName][maxVersion]; | ||
} | ||
// eslint-disable-next-line max-depth | ||
for (const [versionKey, versionValue] of Object.entries(globalShares[sc][pkgName])){ | ||
// eslint-disable-next-line max-depth | ||
if (satisfy(versionKey, requiredVersion)) { | ||
return versionValue; | ||
const findShareFunction = getFindShareFunction(strategy); | ||
const maxOrSingletonVersion = findShareFunction(localShareScopeMap, sc, pkgName); | ||
//@ts-ignore | ||
const defaultResolver = ()=>{ | ||
if (shareConfig.singleton) { | ||
if (typeof requiredVersion === 'string' && !satisfy(maxOrSingletonVersion, requiredVersion)) { | ||
const msg = `Version ${maxOrSingletonVersion} from ${maxOrSingletonVersion && localShareScopeMap[sc][pkgName][maxOrSingletonVersion].from} of shared singleton module ${pkgName} does not satisfy the requirement of ${shareInfo.from} which needs ${requiredVersion})`; | ||
if (shareConfig.strictVersion) { | ||
error(msg); | ||
} else { | ||
warn(msg); | ||
} | ||
} | ||
return localShareScopeMap[sc][pkgName][maxOrSingletonVersion]; | ||
} else { | ||
if (requiredVersion === false || requiredVersion === '*') { | ||
return localShareScopeMap[sc][pkgName][maxOrSingletonVersion]; | ||
} | ||
for (const [versionKey, versionValue] of Object.entries(localShareScopeMap[sc][pkgName])){ | ||
if (satisfy(versionKey, requiredVersion)) { | ||
return versionValue; | ||
} | ||
} | ||
} | ||
} | ||
}; | ||
const params = { | ||
shareScopeMap: localShareScopeMap, | ||
scope: sc, | ||
pkgName, | ||
version: maxOrSingletonVersion, | ||
GlobalFederation: Global.__FEDERATION__, | ||
resolver: defaultResolver | ||
}; | ||
const resolveShared = resolveShare.emit(params) || params; | ||
return resolveShared.resolver(); | ||
} | ||
@@ -768,3 +791,2 @@ } | ||
exports.getGlobalHostPlugins = getGlobalHostPlugins; | ||
exports.getGlobalShare = getGlobalShare; | ||
exports.getGlobalShareScope = getGlobalShareScope; | ||
@@ -775,2 +797,3 @@ exports.getGlobalSnapshot = getGlobalSnapshot; | ||
exports.getPreloaded = getPreloaded; | ||
exports.getRegisteredShare = getRegisteredShare; | ||
exports.getRemoteEntryExports = getRemoteEntryExports; | ||
@@ -777,0 +800,0 @@ exports.getTargetSnapshotInfoByModuleInfo = getTargetSnapshotInfoByModuleInfo; |
function getBuilderId() { | ||
//@ts-ignore | ||
return typeof FEDERATION_BUILD_IDENTIFIER !== 'undefined' ? FEDERATION_BUILD_IDENTIFIER : ''; | ||
@@ -89,67 +90,57 @@ } | ||
} | ||
var _nativeGlobal___FEDERATION__, _nativeGlobal___FEDERATION__1, _nativeGlobal___FEDERATION__2, _nativeGlobal___FEDERATION__3, _nativeGlobal___FEDERATION__4, _nativeGlobal___FEDERATION__5; | ||
// export const nativeGlobal: typeof global = new Function('return this')(); | ||
const nativeGlobal = new Function('return this')(); | ||
const Global = nativeGlobal; | ||
function definePropertyGlobalVal(target, key, val) { | ||
Object.defineProperty(target, key, { | ||
value: val, | ||
configurable: false, | ||
writable: true | ||
}); | ||
} | ||
function includeOwnProperty(target, key) { | ||
return Object.hasOwnProperty.call(target, key); | ||
} | ||
// This section is to prevent encapsulation by certain microfrontend frameworks. Due to reuse policies, sandbox escapes. | ||
// The sandbox in the microfrontend does not replicate the value of 'configurable'. | ||
// If there is no loading content on the global object, this section defines the loading object. | ||
if (!includeOwnProperty(globalThis, '__GLOBAL_LOADING_REMOTE_ENTRY__')) { | ||
definePropertyGlobalVal(globalThis, '__GLOBAL_LOADING_REMOTE_ENTRY__', {}); | ||
if (!Object.hasOwnProperty.call(globalThis, '__GLOBAL_LOADING_REMOTE_ENTRY__')) { | ||
Object.defineProperty(globalThis, '__GLOBAL_LOADING_REMOTE_ENTRY__', { | ||
value: {}, | ||
configurable: false | ||
}); | ||
} | ||
const globalLoading = globalThis.__GLOBAL_LOADING_REMOTE_ENTRY__; | ||
function setGlobalDefaultVal(target) { | ||
var _target___FEDERATION__, _target___FEDERATION__1, _target___FEDERATION__2, _target___FEDERATION__3, _target___FEDERATION__4, _target___FEDERATION__5, _target___FEDERATION__6; | ||
if (includeOwnProperty(target, '__VMOK__') && !includeOwnProperty(target, '__FEDERATION__')) { | ||
definePropertyGlobalVal(target, '__FEDERATION__', target.__VMOK__); | ||
// | ||
if (nativeGlobal.__VMOK__) { | ||
nativeGlobal.__FEDERATION__ = nativeGlobal.__VMOK__; | ||
} else if (!nativeGlobal.__FEDERATION__) { | ||
nativeGlobal.__FEDERATION__ = { | ||
__GLOBAL_PLUGIN__: [], | ||
__INSTANCES__: [], | ||
moduleInfo: {}, | ||
__SHARE__: {}, | ||
__MANIFEST_LOADING__: {}, | ||
__PRELOADED_MAP__: new Map() | ||
}; | ||
nativeGlobal.__VMOK__ = nativeGlobal.__FEDERATION__; | ||
} | ||
var ___GLOBAL_PLUGIN__; | ||
(___GLOBAL_PLUGIN__ = (_nativeGlobal___FEDERATION__ = nativeGlobal.__FEDERATION__).__GLOBAL_PLUGIN__) != null ? ___GLOBAL_PLUGIN__ : _nativeGlobal___FEDERATION__.__GLOBAL_PLUGIN__ = []; | ||
var ___INSTANCES__; | ||
(___INSTANCES__ = (_nativeGlobal___FEDERATION__1 = nativeGlobal.__FEDERATION__).__INSTANCES__) != null ? ___INSTANCES__ : _nativeGlobal___FEDERATION__1.__INSTANCES__ = []; | ||
var _moduleInfo; | ||
(_moduleInfo = (_nativeGlobal___FEDERATION__2 = nativeGlobal.__FEDERATION__).moduleInfo) != null ? _moduleInfo : _nativeGlobal___FEDERATION__2.moduleInfo = {}; | ||
var ___SHARE__; | ||
(___SHARE__ = (_nativeGlobal___FEDERATION__3 = nativeGlobal.__FEDERATION__).__SHARE__) != null ? ___SHARE__ : _nativeGlobal___FEDERATION__3.__SHARE__ = {}; | ||
var ___MANIFEST_LOADING__; | ||
(___MANIFEST_LOADING__ = (_nativeGlobal___FEDERATION__4 = nativeGlobal.__FEDERATION__).__MANIFEST_LOADING__) != null ? ___MANIFEST_LOADING__ : _nativeGlobal___FEDERATION__4.__MANIFEST_LOADING__ = {}; | ||
var ___PRELOADED_MAP__; | ||
(___PRELOADED_MAP__ = (_nativeGlobal___FEDERATION__5 = nativeGlobal.__FEDERATION__).__PRELOADED_MAP__) != null ? ___PRELOADED_MAP__ : _nativeGlobal___FEDERATION__5.__PRELOADED_MAP__ = new Map(); | ||
const Global = { | ||
get __FEDERATION__ () { | ||
const globalThisVal = new Function('return globalThis')(); | ||
return globalThisVal.__FEDERATION__; | ||
} | ||
if (!includeOwnProperty(target, '__FEDERATION__')) { | ||
definePropertyGlobalVal(target, '__FEDERATION__', { | ||
__GLOBAL_PLUGIN__: [], | ||
__INSTANCES__: [], | ||
moduleInfo: {}, | ||
__SHARE__: {}, | ||
__MANIFEST_LOADING__: {}, | ||
__SHARE_SCOPE_LOADING__: {}, | ||
__PRELOADED_MAP__: new Map() | ||
}); | ||
definePropertyGlobalVal(target, '__VMOK__', target.__FEDERATION__); | ||
} | ||
var ___GLOBAL_PLUGIN__; | ||
(___GLOBAL_PLUGIN__ = (_target___FEDERATION__ = target.__FEDERATION__).__GLOBAL_PLUGIN__) != null ? ___GLOBAL_PLUGIN__ : _target___FEDERATION__.__GLOBAL_PLUGIN__ = []; | ||
var ___INSTANCES__; | ||
(___INSTANCES__ = (_target___FEDERATION__1 = target.__FEDERATION__).__INSTANCES__) != null ? ___INSTANCES__ : _target___FEDERATION__1.__INSTANCES__ = []; | ||
var _moduleInfo; | ||
(_moduleInfo = (_target___FEDERATION__2 = target.__FEDERATION__).moduleInfo) != null ? _moduleInfo : _target___FEDERATION__2.moduleInfo = {}; | ||
var ___SHARE__; | ||
(___SHARE__ = (_target___FEDERATION__3 = target.__FEDERATION__).__SHARE__) != null ? ___SHARE__ : _target___FEDERATION__3.__SHARE__ = {}; | ||
var ___MANIFEST_LOADING__; | ||
(___MANIFEST_LOADING__ = (_target___FEDERATION__4 = target.__FEDERATION__).__MANIFEST_LOADING__) != null ? ___MANIFEST_LOADING__ : _target___FEDERATION__4.__MANIFEST_LOADING__ = {}; | ||
var ___SHARE_SCOPE_LOADING__; | ||
(___SHARE_SCOPE_LOADING__ = (_target___FEDERATION__5 = target.__FEDERATION__).__SHARE_SCOPE_LOADING__) != null ? ___SHARE_SCOPE_LOADING__ : _target___FEDERATION__5.__SHARE_SCOPE_LOADING__ = {}; | ||
var ___PRELOADED_MAP__; | ||
(___PRELOADED_MAP__ = (_target___FEDERATION__6 = target.__FEDERATION__).__PRELOADED_MAP__) != null ? ___PRELOADED_MAP__ : _target___FEDERATION__6.__PRELOADED_MAP__ = new Map(); | ||
} | ||
setGlobalDefaultVal(globalThis); | ||
setGlobalDefaultVal(nativeGlobal); | ||
}; | ||
function resetFederationGlobalInfo() { | ||
globalThis.__FEDERATION__.__GLOBAL_PLUGIN__ = []; | ||
globalThis.__FEDERATION__.__INSTANCES__ = []; | ||
globalThis.__FEDERATION__.moduleInfo = {}; | ||
globalThis.__FEDERATION__.__SHARE__ = {}; | ||
globalThis.__FEDERATION__.__MANIFEST_LOADING__ = {}; | ||
globalThis.__FEDERATION__.__SHARE_SCOPE_LOADING__ = {}; | ||
nativeGlobal.__FEDERATION__.__GLOBAL_PLUGIN__ = []; | ||
nativeGlobal.__FEDERATION__.__INSTANCES__ = []; | ||
nativeGlobal.__FEDERATION__.moduleInfo = {}; | ||
nativeGlobal.__FEDERATION__.__SHARE__ = {}; | ||
nativeGlobal.__FEDERATION__.__MANIFEST_LOADING__ = {}; | ||
} | ||
function getGlobalFederationInstance(name, version) { | ||
const buildId = getBuilderId(); | ||
return globalThis.__FEDERATION__.__INSTANCES__.find((GMInstance)=>{ | ||
return Global.__FEDERATION__.__INSTANCES__.find((GMInstance)=>{ | ||
if (buildId && GMInstance.options.id === getBuilderId()) { | ||
@@ -168,11 +159,11 @@ return true; | ||
function setGlobalFederationInstance(FederationInstance) { | ||
globalThis.__FEDERATION__.__INSTANCES__.push(FederationInstance); | ||
Global.__FEDERATION__.__INSTANCES__.push(FederationInstance); | ||
} | ||
function getGlobalFederationConstructor() { | ||
return globalThis.__FEDERATION__.__DEBUG_CONSTRUCTOR__; | ||
return Global.__FEDERATION__.__DEBUG_CONSTRUCTOR__; | ||
} | ||
function setGlobalFederationConstructor(FederationConstructor) { | ||
if (isDebugMode()) { | ||
globalThis.__FEDERATION__.__DEBUG_CONSTRUCTOR__ = FederationConstructor; | ||
globalThis.__FEDERATION__.__DEBUG_CONSTRUCTOR_VERSION__ = '0.0.4'; | ||
Global.__FEDERATION__.__DEBUG_CONSTRUCTOR__ = FederationConstructor; | ||
Global.__FEDERATION__.__DEBUG_CONSTRUCTOR_VERSION__ = '0.0.5'; | ||
} | ||
@@ -192,3 +183,3 @@ } | ||
} | ||
const getGlobalSnapshot = ()=>nativeGlobal.__FEDERATION__.moduleInfo; | ||
const getGlobalSnapshot = ()=>Global.__FEDERATION__.moduleInfo; | ||
const getTargetSnapshotInfoByModuleInfo = (moduleInfo, snapshot, getModuleInfoHook)=>{ | ||
@@ -211,3 +202,3 @@ // Check if the remote is included in the hostSnapshot | ||
const moduleKeyWithoutVersion = getFMId(resModuleInfo); | ||
const getModuleInfoWithoutVersion = getInfoWithoutType(nativeGlobal.__FEDERATION__.moduleInfo, moduleKeyWithoutVersion, getModuleInfoHook).value; | ||
const getModuleInfoWithoutVersion = getInfoWithoutType(Global.__FEDERATION__.moduleInfo, moduleKeyWithoutVersion, getModuleInfoHook).value; | ||
if ((getModuleInfoWithoutVersion == null ? void 0 : getModuleInfoWithoutVersion.version) === version) { | ||
@@ -219,14 +210,14 @@ return getModuleInfoWithoutVersion; | ||
}; | ||
const getGlobalSnapshotInfoByModuleInfo = (moduleInfo, extraOptions)=>getTargetSnapshotInfoByModuleInfo(moduleInfo, nativeGlobal.__FEDERATION__.moduleInfo, extraOptions == null ? void 0 : extraOptions.getModuleInfoHook); | ||
const getGlobalSnapshotInfoByModuleInfo = (moduleInfo, extraOptions)=>getTargetSnapshotInfoByModuleInfo(moduleInfo, Global.__FEDERATION__.moduleInfo, extraOptions == null ? void 0 : extraOptions.getModuleInfoHook); | ||
const setGlobalSnapshotInfoByModuleInfo = (remoteInfo, moduleDetailInfo)=>{ | ||
const moduleKey = getFMId(remoteInfo); | ||
nativeGlobal.__FEDERATION__.moduleInfo[moduleKey] = moduleDetailInfo; | ||
return nativeGlobal.__FEDERATION__.moduleInfo; | ||
Global.__FEDERATION__.moduleInfo[moduleKey] = moduleDetailInfo; | ||
return Global.__FEDERATION__.moduleInfo; | ||
}; | ||
const addGlobalSnapshot = (moduleInfos)=>{ | ||
nativeGlobal.__FEDERATION__.moduleInfo = _extends$1({}, nativeGlobal.__FEDERATION__.moduleInfo, moduleInfos); | ||
Global.__FEDERATION__.moduleInfo = _extends$1({}, Global.__FEDERATION__.moduleInfo, moduleInfos); | ||
return ()=>{ | ||
const keys = Object.keys(moduleInfos); | ||
for (const key of keys){ | ||
delete nativeGlobal.__FEDERATION__.moduleInfo[key]; | ||
delete Global.__FEDERATION__.moduleInfo[key]; | ||
} | ||
@@ -248,3 +239,3 @@ }; | ||
const registerGlobalPlugins = (plugins)=>{ | ||
const { __GLOBAL_PLUGIN__ } = nativeGlobal.__FEDERATION__; | ||
const { __GLOBAL_PLUGIN__ } = Global.__FEDERATION__; | ||
plugins.forEach((plugin)=>{ | ||
@@ -258,5 +249,5 @@ if (__GLOBAL_PLUGIN__.findIndex((p)=>p.name === plugin.name) === -1) { | ||
}; | ||
const getGlobalHostPlugins = ()=>nativeGlobal.__FEDERATION__.__GLOBAL_PLUGIN__; | ||
const getPreloaded = (id)=>globalThis.__FEDERATION__.__PRELOADED_MAP__.get(id); | ||
const setPreloaded = (id)=>globalThis.__FEDERATION__.__PRELOADED_MAP__.set(id, true); | ||
const getGlobalHostPlugins = ()=>Global.__FEDERATION__.__GLOBAL_PLUGIN__; | ||
const getPreloaded = (id)=>Global.__FEDERATION__.__PRELOADED_MAP__.get(id); | ||
const setPreloaded = (id)=>Global.__FEDERATION__.__PRELOADED_MAP__.set(id, true); | ||
@@ -631,10 +622,12 @@ const DEFAULT_SCOPE = 'default'; | ||
from, | ||
shareConfig: { | ||
loading: null | ||
}, shareArgs, { | ||
shareConfig: _extends({ | ||
requiredVersion: `^${shareArgs.version}`, | ||
singleton: false, | ||
eager: false | ||
}, | ||
loading: null | ||
}, shareArgs, { | ||
eager: false, | ||
strictVersion: false | ||
}, shareArgs.shareConfig), | ||
get, | ||
loaded: 'lib' in shareArgs ? true : undefined, | ||
scope: Array.isArray(shareArgs.scope) ? shareArgs.scope : [ | ||
@@ -656,3 +649,15 @@ 'default' | ||
function versionLt(a, b) { | ||
if (satisfy(a, `<=${b}`)) { | ||
const transformInvalidVersion = (version)=>{ | ||
const isNumberVersion = !Number.isNaN(Number(version)); | ||
if (isNumberVersion) { | ||
const splitArr = version.split('.'); | ||
let validVersion = version; | ||
for(let i = 0; i < 3 - splitArr.length; i++){ | ||
validVersion += '.0'; | ||
} | ||
return validVersion; | ||
} | ||
return version; | ||
}; | ||
if (satisfy(transformInvalidVersion(a), `<=${transformInvalidVersion(b)}`)) { | ||
return true; | ||
@@ -663,5 +668,4 @@ } else { | ||
} | ||
const findVersion = (scope, pkgName, cb)=>{ | ||
const globalShares = Global.__FEDERATION__.__SHARE__; | ||
const versions = globalShares[scope][pkgName]; | ||
const findVersion = (shareScopeMap, scope, pkgName, cb)=>{ | ||
const versions = shareScopeMap[scope][pkgName]; | ||
const callback = cb || function(prev, cur) { | ||
@@ -677,16 +681,18 @@ return versionLt(prev, cur); | ||
} | ||
// default version is '0' https://github.com/webpack/webpack/blob/main/lib/sharing/ProvideSharedModule.js#L136 | ||
if (prev === '0') { | ||
return cur; | ||
} | ||
return prev; | ||
}, 0); | ||
}; | ||
function findSingletonVersionOrderByVersion(scope, pkgName) { | ||
const globalShares = Global.__FEDERATION__.__SHARE__; | ||
const versions = globalShares[scope][pkgName]; | ||
function findSingletonVersionOrderByVersion(shareScopeMap, scope, pkgName) { | ||
const versions = shareScopeMap[scope][pkgName]; | ||
const callback = function(prev, cur) { | ||
return !versions[prev].loaded && versionLt(prev, cur); | ||
}; | ||
return findVersion(scope, pkgName, callback); | ||
return findVersion(shareScopeMap, scope, pkgName, callback); | ||
} | ||
function findSingletonVersionOrderByLoaded(scope, pkgName) { | ||
const globalShares = Global.__FEDERATION__.__SHARE__; | ||
const versions = globalShares[scope][pkgName]; | ||
function findSingletonVersionOrderByLoaded(shareScopeMap, scope, pkgName) { | ||
const versions = shareScopeMap[scope][pkgName]; | ||
const callback = function(prev, cur) { | ||
@@ -705,8 +711,16 @@ if (versions[cur].loaded) { | ||
}; | ||
return findVersion(scope, pkgName, callback); | ||
return findVersion(shareScopeMap, scope, pkgName, callback); | ||
} | ||
function getFindShareFunction(strategy) { | ||
if (strategy === 'loaded-first') { | ||
return findSingletonVersionOrderByLoaded; | ||
} | ||
return findSingletonVersionOrderByVersion; | ||
} | ||
// Details about shared resources | ||
// TODO: Implement strictVersion for alignment with module federation. | ||
function getGlobalShare(pkgName, shareInfo) { | ||
const globalShares = Global.__FEDERATION__.__SHARE__; | ||
function getRegisteredShare(localShareScopeMap, pkgName, shareInfo, resolveShare) { | ||
if (!localShareScopeMap) { | ||
return; | ||
} | ||
const { shareConfig, scope = DEFAULT_SCOPE, strategy } = shareInfo; | ||
@@ -717,30 +731,39 @@ const scopes = Array.isArray(scope) ? scope : [ | ||
for (const sc of scopes){ | ||
if (shareConfig && globalShares[sc] && globalShares[sc][pkgName]) { | ||
if (shareConfig && localShareScopeMap[sc] && localShareScopeMap[sc][pkgName]) { | ||
const { requiredVersion } = shareConfig; | ||
// eslint-disable-next-line max-depth | ||
if (shareConfig.singleton) { | ||
const singletonVersion = strategy === 'loaded-first' ? findSingletonVersionOrderByLoaded(sc, pkgName) : findSingletonVersionOrderByVersion(sc, pkgName); | ||
// eslint-disable-next-line max-depth | ||
if (typeof requiredVersion === 'string' && !satisfy(singletonVersion, requiredVersion)) { | ||
warn(`Version ${singletonVersion} from ${singletonVersion && globalShares[sc][pkgName][singletonVersion].from} of shared singleton module ${pkgName} does not satisfy the requirement of ${shareInfo.from} which needs ${requiredVersion})`); | ||
} | ||
return globalShares[sc][pkgName][singletonVersion]; | ||
} else { | ||
const maxVersion = findSingletonVersionOrderByLoaded(sc, pkgName); | ||
// eslint-disable-next-line max-depth | ||
if (requiredVersion === false || requiredVersion === '*') { | ||
return globalShares[sc][pkgName][maxVersion]; | ||
} | ||
// eslint-disable-next-line max-depth | ||
if (satisfy(maxVersion, requiredVersion)) { | ||
return globalShares[sc][pkgName][maxVersion]; | ||
} | ||
// eslint-disable-next-line max-depth | ||
for (const [versionKey, versionValue] of Object.entries(globalShares[sc][pkgName])){ | ||
// eslint-disable-next-line max-depth | ||
if (satisfy(versionKey, requiredVersion)) { | ||
return versionValue; | ||
const findShareFunction = getFindShareFunction(strategy); | ||
const maxOrSingletonVersion = findShareFunction(localShareScopeMap, sc, pkgName); | ||
//@ts-ignore | ||
const defaultResolver = ()=>{ | ||
if (shareConfig.singleton) { | ||
if (typeof requiredVersion === 'string' && !satisfy(maxOrSingletonVersion, requiredVersion)) { | ||
const msg = `Version ${maxOrSingletonVersion} from ${maxOrSingletonVersion && localShareScopeMap[sc][pkgName][maxOrSingletonVersion].from} of shared singleton module ${pkgName} does not satisfy the requirement of ${shareInfo.from} which needs ${requiredVersion})`; | ||
if (shareConfig.strictVersion) { | ||
error(msg); | ||
} else { | ||
warn(msg); | ||
} | ||
} | ||
return localShareScopeMap[sc][pkgName][maxOrSingletonVersion]; | ||
} else { | ||
if (requiredVersion === false || requiredVersion === '*') { | ||
return localShareScopeMap[sc][pkgName][maxOrSingletonVersion]; | ||
} | ||
for (const [versionKey, versionValue] of Object.entries(localShareScopeMap[sc][pkgName])){ | ||
if (satisfy(versionKey, requiredVersion)) { | ||
return versionValue; | ||
} | ||
} | ||
} | ||
} | ||
}; | ||
const params = { | ||
shareScopeMap: localShareScopeMap, | ||
scope: sc, | ||
pkgName, | ||
version: maxOrSingletonVersion, | ||
GlobalFederation: Global.__FEDERATION__, | ||
resolver: defaultResolver | ||
}; | ||
const resolveShared = resolveShare.emit(params) || params; | ||
return resolveShared.resolver(); | ||
} | ||
@@ -753,2 +776,2 @@ } | ||
export { getGlobalFederationInstance as A, getGlobalFederationConstructor as B, setGlobalFederationInstance as C, DEFAULT_REMOTE_TYPE as D, registerGlobalPlugins as E, nativeGlobal as F, Global as G, resetFederationGlobalInfo as H, getTargetSnapshotInfoByModuleInfo as I, addGlobalSnapshot as J, DEFAULT_SCOPE as a, globalLoading as b, getRemoteEntryExports as c, assert as d, getFMId as e, error as f, getGlobalHostPlugins as g, isPlainObject as h, isObject as i, isRemoteInfoWithEntry as j, isPureRemoteEntry as k, getGlobalShare as l, getInfoWithoutType as m, getPreloaded as n, setPreloaded as o, getGlobalSnapshotInfoByModuleInfo as p, setGlobalSnapshotInfoByModuleInfo as q, getGlobalSnapshot as r, safeToString as s, addUniqueItem as t, formatShareConfigs as u, isBrowserEnv as v, warn as w, getGlobalShareScope as x, getBuilderId as y, setGlobalFederationConstructor as z }; | ||
export { getGlobalFederationInstance as A, getGlobalFederationConstructor as B, setGlobalFederationInstance as C, DEFAULT_REMOTE_TYPE as D, registerGlobalPlugins as E, nativeGlobal as F, Global as G, resetFederationGlobalInfo as H, getTargetSnapshotInfoByModuleInfo as I, addGlobalSnapshot as J, DEFAULT_SCOPE as a, globalLoading as b, getRemoteEntryExports as c, assert as d, getFMId as e, error as f, getGlobalHostPlugins as g, isPlainObject as h, isObject as i, isRemoteInfoWithEntry as j, isPureRemoteEntry as k, getRegisteredShare as l, getInfoWithoutType as m, getPreloaded as n, setPreloaded as o, getGlobalSnapshotInfoByModuleInfo as p, setGlobalSnapshotInfoByModuleInfo as q, getGlobalSnapshot as r, safeToString as s, getGlobalShareScope as t, addUniqueItem as u, formatShareConfigs as v, warn as w, isBrowserEnv as x, getBuilderId as y, setGlobalFederationConstructor as z }; |
import type { ModuleInfo, GlobalModuleInfo } from '@module-federation/sdk'; | ||
import { Options, PreloadAssets, PreloadOptions, PreloadRemoteArgs, Remote, Shared, ShareInfos, UserOptions, RemoteInfo } from './type'; | ||
import { Options, PreloadAssets, PreloadOptions, PreloadRemoteArgs, Remote, Shared, ShareInfos, UserOptions, RemoteInfo, ShareScopeMap } from './type'; | ||
import { Module, ModuleOptions } from './module'; | ||
import { AsyncHook, AsyncWaterfallHook, PluginSystem, SyncHook, SyncWaterfallHook } from './utils/hooks'; | ||
import { Federation } from './global'; | ||
import { SnapshotHandler } from './plugins/snapshot/SnapshotHandler'; | ||
@@ -55,2 +56,4 @@ interface LoadRemoteMatch { | ||
error: unknown; | ||
from: 'build' | 'runtime'; | ||
origin: FederationHost; | ||
}], void>; | ||
@@ -64,2 +67,10 @@ beforeLoadShare: AsyncWaterfallHook<{ | ||
loadShare: AsyncHook<[FederationHost, string, ShareInfos], false | void | Promise<false | void>>; | ||
resolveShare: SyncWaterfallHook<{ | ||
shareScopeMap: ShareScopeMap; | ||
scope: string; | ||
pkgName: string; | ||
version: string; | ||
GlobalFederation: Federation; | ||
resolver: () => Shared | undefined; | ||
}>; | ||
beforePreloadRemote: AsyncHook<{ | ||
@@ -84,2 +95,3 @@ preloadOps: Array<PreloadRemoteArgs>; | ||
}>; | ||
releaseNumber: string; | ||
version: string; | ||
@@ -89,2 +101,3 @@ name: string; | ||
snapshotHandler: SnapshotHandler; | ||
shareScopeMap: ShareScopeMap; | ||
loaderHook: PluginSystem<{ | ||
@@ -103,6 +116,4 @@ getModuleInfo: SyncHook<[{ | ||
}>; | ||
loadingShare: { | ||
[key: string]: Promise<any>; | ||
}; | ||
constructor(userOptions: UserOptions); | ||
private _setGlobalShareScopeMap; | ||
initOptions(userOptions: UserOptions): Options; | ||
@@ -114,2 +125,3 @@ loadShare<T>(pkgName: string, customShareInfo?: Partial<Shared>): Promise<false | (() => T | undefined)>; | ||
loadFactory?: boolean; | ||
from: 'build' | 'runtime'; | ||
}): Promise<T | null>; | ||
@@ -122,3 +134,4 @@ preloadRemote(preloadOptions: Array<PreloadRemoteArgs>): Promise<void>; | ||
*/ | ||
initializeSharing(shareScopeName?: string): boolean | Promise<boolean>; | ||
initializeSharing(shareScopeName?: string, strategy?: Shared['strategy']): Array<Promise<void>>; | ||
initShareScopeMap(scopeName: string, shareScope: ShareScopeMap[string]): void; | ||
private formatOptions; | ||
@@ -125,0 +138,0 @@ private registerPlugins; |
/// <reference types="node" /> | ||
import { FederationHost } from './core'; | ||
import { RemoteEntryExports, GlobalShareScope, Remote, Optional } from './type'; | ||
import { RemoteEntryExports, GlobalShareScopeMap, Remote, Optional } from './type'; | ||
import { GlobalModuleInfo, ModuleInfo } from '@module-federation/sdk'; | ||
@@ -12,9 +12,7 @@ import { FederationRuntimePlugin } from './type/plugin'; | ||
__INSTANCES__: Array<FederationHost>; | ||
__SHARE__: GlobalShareScope; | ||
__SHARE__: GlobalShareScopeMap; | ||
__MANIFEST_LOADING__: Record<string, Promise<ModuleInfo>>; | ||
__SHARE_SCOPE_LOADING__: Record<string, boolean | Promise<boolean>>; | ||
__PRELOADED_MAP__: Map<string, boolean>; | ||
} | ||
export declare const nativeGlobal: typeof global; | ||
export declare const Global: typeof globalThis; | ||
declare global { | ||
@@ -24,2 +22,5 @@ var __FEDERATION__: Federation, __VMOK__: Federation, __GLOBAL_LOADING_REMOTE_ENTRY__: Record<string, undefined | Promise<RemoteEntryExports | void>>; | ||
export declare const globalLoading: Record<string, Promise<void | RemoteEntryExports> | undefined>; | ||
export declare const Global: { | ||
readonly __FEDERATION__: Federation; | ||
}; | ||
export declare function resetFederationGlobalInfo(): void; | ||
@@ -26,0 +27,0 @@ export declare function getGlobalFederationInstance(name: string, version: string | undefined): FederationHost | undefined; |
/// <reference types="node" /> | ||
import { resetFederationGlobalInfo, getGlobalFederationInstance, setGlobalFederationInstance, getGlobalFederationConstructor, setGlobalFederationConstructor, getInfoWithoutType, getGlobalSnapshot, getTargetSnapshotInfoByModuleInfo, getGlobalSnapshotInfoByModuleInfo, setGlobalSnapshotInfoByModuleInfo, addGlobalSnapshot, getRemoteEntryExports, registerGlobalPlugins, getGlobalHostPlugins, getPreloaded, setPreloaded } from './global'; | ||
import { getGlobalShare, getGlobalShareScope } from './utils/share'; | ||
import { getRegisteredShare, getGlobalShareScope } from './utils/share'; | ||
interface IShareUtils { | ||
getGlobalShare: typeof getGlobalShare; | ||
getRegisteredShare: typeof getRegisteredShare; | ||
getGlobalShareScope: typeof getGlobalShareScope; | ||
@@ -7,0 +7,0 @@ } |
@@ -5,2 +5,3 @@ import { FederationHost } from './core'; | ||
export { registerGlobalPlugins } from './global'; | ||
export { loadScript } from '@module-federation/sdk'; | ||
export type { Federation } from './global'; | ||
@@ -7,0 +8,0 @@ export declare function init(options: UserOptions): FederationHost; |
import { FederationHost } from '../core'; | ||
import { RemoteEntryExports, Options, Remote, ShareInfos, RemoteInfo } from '../type'; | ||
import { RemoteEntryExports, Options, Remote, ShareInfos, RemoteInfo, ShareScopeMap } from '../type'; | ||
export type ModuleOptions = ConstructorParameters<typeof Module>[0]; | ||
@@ -13,3 +13,4 @@ type HostInfo = Remote; | ||
loaderHook: FederationHost['loaderHook']; | ||
constructor({ hostInfo, remoteInfo, shared, loaderHook, }: { | ||
shareScopeMap: ShareScopeMap; | ||
constructor({ hostInfo, remoteInfo, shared, loaderHook, shareScopeMap, }: { | ||
hostInfo: HostInfo; | ||
@@ -20,2 +21,3 @@ remoteInfo: RemoteInfo; | ||
loaderHook: FederationHost['loaderHook']; | ||
shareScopeMap: ShareScopeMap; | ||
}); | ||
@@ -22,0 +24,0 @@ getEntry(): Promise<RemoteEntryExports>; |
@@ -32,2 +32,3 @@ import type { RemoteWithEntry, RemoteWithVersion, Module, RemoteEntryType } from '@module-federation/sdk'; | ||
eager?: boolean; | ||
strictVersion?: boolean; | ||
} | ||
@@ -61,3 +62,3 @@ type SharedBaseArgs = { | ||
}; | ||
export type GlobalShareScope = { | ||
export type ShareScopeMap = { | ||
[scope: string]: { | ||
@@ -69,2 +70,5 @@ [pkgName: string]: { | ||
}; | ||
export type GlobalShareScopeMap = { | ||
[instanceName: string]: ShareScopeMap; | ||
}; | ||
export type ShareInfos = { | ||
@@ -95,4 +99,4 @@ [pkgName: string]: Shared; | ||
get: (id: string) => () => Promise<Module>; | ||
init: (shareScope: GlobalShareScope[string], initScope?: Array<Record<string, never>>, remoteEntryInitOPtions?: RemoteEntryInitOptions) => void; | ||
init: (shareScope: ShareScopeMap[string], initScope?: Array<Record<string, any>>, remoteEntryInitOPtions?: RemoteEntryInitOptions) => void; | ||
}; | ||
export {}; |
@@ -12,5 +12,5 @@ export type Plugin<T extends Record<string, any>> = { | ||
constructor(lifecycle: T); | ||
usePlugin(plugin: Plugin<T>): void; | ||
applyPlugin(plugin: Plugin<T>): void; | ||
removePlugin(pluginName: string): void; | ||
inherit<T extends PluginSystem<any>>({ lifecycle, registerPlugins, }: T): void; | ||
} |
@@ -1,2 +0,4 @@ | ||
import { GlobalShareScope, Shared, ShareArgs, ShareInfos } from '../type'; | ||
import { Federation } from '../global'; | ||
import { GlobalShareScopeMap, Shared, ShareArgs, ShareInfos, ShareScopeMap } from '../type'; | ||
import { SyncWaterfallHook } from './hooks'; | ||
export declare function formatShare(shareArgs: ShareArgs, from: string): Shared; | ||
@@ -6,3 +8,10 @@ export declare function formatShareConfigs(shareArgs: { | ||
}, from: string): ShareInfos; | ||
export declare function getGlobalShare(pkgName: string, shareInfo: ShareInfos[keyof ShareInfos]): Shared | void; | ||
export declare function getGlobalShareScope(): GlobalShareScope; | ||
export declare function getRegisteredShare(localShareScopeMap: ShareScopeMap, pkgName: string, shareInfo: ShareInfos[keyof ShareInfos], resolveShare: SyncWaterfallHook<{ | ||
shareScopeMap: ShareScopeMap; | ||
scope: string; | ||
pkgName: string; | ||
version: string; | ||
GlobalFederation: Federation; | ||
resolver: () => Shared | undefined; | ||
}>): Shared | void; | ||
export declare function getGlobalShareScope(): GlobalShareScopeMap; |
{ | ||
"name": "@module-federation/runtime", | ||
"version": "0.0.0-next-20231229091919", | ||
"version": "0.0.0-next-20231230034830", | ||
"author": "zhouxiao <codingzx@gmail.com>", | ||
@@ -42,4 +42,4 @@ "main": "./dist/index.cjs", | ||
], | ||
"type": [ | ||
"./dist/type.cjs.d.ts" | ||
"types": [ | ||
"./dist/types.cjs.d.ts" | ||
] | ||
@@ -49,4 +49,4 @@ } | ||
"dependencies": { | ||
"@module-federation/sdk": "0.0.0-next-20231229091919" | ||
"@module-federation/sdk": "0.0.0-next-20231230034830" | ||
} | ||
} |
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
247532
5613
+ Added@module-federation/sdk@0.0.0-next-20231230034830(transitive)
- Removed@module-federation/sdk@0.0.0-next-20231229091919(transitive)