@module-federation/runtime-core 0.0.0-fix-4748-shared-fallback-versions-20260604072020 → 0.0.0-fix-runtime-core-set-shared-lib-20260819111025
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/core.cjs +15 -22
- package/dist/core.cjs.map +1 -1
- package/dist/core.js +12 -19
- package/dist/core.js.map +1 -1
- package/dist/global.cjs +17 -2
- package/dist/global.cjs.map +1 -1
- package/dist/global.d.ts +1 -0
- package/dist/global.js +16 -3
- package/dist/global.js.map +1 -1
- package/dist/index.cjs +3 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.js +3 -1
- package/dist/index.js.map +1 -1
- package/dist/plugins/snapshot/disabled.cjs +13 -0
- package/dist/plugins/snapshot/disabled.cjs.map +1 -0
- package/dist/plugins/snapshot/disabled.js +13 -0
- package/dist/plugins/snapshot/disabled.js.map +1 -0
- package/dist/plugins/snapshot/index.cjs +31 -21
- package/dist/plugins/snapshot/index.cjs.map +1 -1
- package/dist/plugins/snapshot/index.js +31 -21
- package/dist/plugins/snapshot/index.js.map +1 -1
- package/dist/remote/disabled.cjs +38 -0
- package/dist/remote/disabled.cjs.map +1 -0
- package/dist/remote/disabled.js +37 -0
- package/dist/remote/disabled.js.map +1 -0
- package/dist/remote/index.cjs +26 -10
- package/dist/remote/index.cjs.map +1 -1
- package/dist/remote/index.d.ts +1 -0
- package/dist/remote/index.js +26 -10
- package/dist/remote/index.js.map +1 -1
- package/dist/shared/disabled.cjs +33 -0
- package/dist/shared/disabled.cjs.map +1 -0
- package/dist/shared/disabled.js +33 -0
- package/dist/shared/disabled.js.map +1 -0
- package/dist/shared/index.cjs +1 -0
- package/dist/shared/index.cjs.map +1 -1
- package/dist/shared/index.js +1 -0
- package/dist/shared/index.js.map +1 -1
- package/dist/type/preload.d.ts +5 -0
- package/dist/utils/hooks/pluginSystem.d.ts +1 -1
- package/dist/utils/index.js +1 -1
- package/dist/utils/load.cjs +53 -25
- package/dist/utils/load.cjs.map +1 -1
- package/dist/utils/load.js +53 -26
- package/dist/utils/load.js.map +1 -1
- package/dist/utils/preload.cjs +39 -30
- package/dist/utils/preload.cjs.map +1 -1
- package/dist/utils/preload.d.ts +1 -1
- package/dist/utils/preload.js +40 -31
- package/dist/utils/preload.js.map +1 -1
- package/package.json +4 -4
package/dist/core.cjs
CHANGED
|
@@ -3,25 +3,28 @@ const require_constant = require('./constant.cjs');
|
|
|
3
3
|
const require_share = require('./utils/share.cjs');
|
|
4
4
|
const require_env = require('./utils/env.cjs');
|
|
5
5
|
const require_plugin = require('./utils/plugin.cjs');
|
|
6
|
-
const require_load = require('./utils/load.cjs');
|
|
7
6
|
require('./utils/index.cjs');
|
|
8
|
-
const require_index$1 = require('./module/index.cjs');
|
|
9
7
|
const require_syncHook = require('./utils/hooks/syncHook.cjs');
|
|
10
8
|
const require_asyncHook = require('./utils/hooks/asyncHook.cjs');
|
|
11
9
|
const require_syncWaterfallHook = require('./utils/hooks/syncWaterfallHook.cjs');
|
|
12
10
|
const require_asyncWaterfallHooks = require('./utils/hooks/asyncWaterfallHooks.cjs');
|
|
13
11
|
const require_pluginSystem = require('./utils/hooks/pluginSystem.cjs');
|
|
14
12
|
require('./utils/hooks/index.cjs');
|
|
15
|
-
const
|
|
13
|
+
const require_disabled = require('./remote/disabled.cjs');
|
|
14
|
+
const require_index$2 = require('./plugins/snapshot/index.cjs');
|
|
16
15
|
const require_generate_preload_assets = require('./plugins/generate-preload-assets.cjs');
|
|
17
16
|
const require_SnapshotHandler = require('./plugins/snapshot/SnapshotHandler.cjs');
|
|
18
|
-
const
|
|
19
|
-
const require_index$
|
|
17
|
+
const require_disabled$1 = require('./plugins/snapshot/disabled.cjs');
|
|
18
|
+
const require_index$3 = require('./shared/index.cjs');
|
|
19
|
+
const require_disabled$2 = require('./shared/disabled.cjs');
|
|
20
|
+
const require_index$4 = require('./remote/index.cjs');
|
|
20
21
|
let _module_federation_sdk = require("@module-federation/sdk");
|
|
21
22
|
let _module_federation_error_codes = require("@module-federation/error-codes");
|
|
22
23
|
|
|
23
24
|
//#region src/core.ts
|
|
24
25
|
const USE_SNAPSHOT = typeof FEDERATION_OPTIMIZE_NO_SNAPSHOT_PLUGIN === "boolean" ? !FEDERATION_OPTIMIZE_NO_SNAPSHOT_PLUGIN : true;
|
|
26
|
+
const USE_REMOTE = typeof FEDERATION_OPTIMIZE_NO_REMOTE === "boolean" ? !FEDERATION_OPTIMIZE_NO_REMOTE : true;
|
|
27
|
+
const USE_SHARED = typeof FEDERATION_OPTIMIZE_NO_SHARED === "boolean" ? !FEDERATION_OPTIMIZE_NO_SHARED : true;
|
|
25
28
|
var ModuleFederation = class {
|
|
26
29
|
constructor(userOptions) {
|
|
27
30
|
this.hooks = new require_pluginSystem.PluginSystem({
|
|
@@ -30,7 +33,7 @@ var ModuleFederation = class {
|
|
|
30
33
|
beforeInitContainer: new require_asyncWaterfallHooks.AsyncWaterfallHook("beforeInitContainer"),
|
|
31
34
|
initContainer: new require_asyncWaterfallHooks.AsyncWaterfallHook("initContainer")
|
|
32
35
|
});
|
|
33
|
-
this.version = "0.0.0-fix-
|
|
36
|
+
this.version = "0.0.0-fix-runtime-core-set-shared-lib-20260819111025";
|
|
34
37
|
this.moduleCache = /* @__PURE__ */ new Map();
|
|
35
38
|
this.loaderHook = new require_pluginSystem.PluginSystem({
|
|
36
39
|
getModuleInfo: new require_syncHook.SyncHook(),
|
|
@@ -53,7 +56,7 @@ var ModuleFederation = class {
|
|
|
53
56
|
beforeBridgeDestroy: new require_syncHook.SyncHook(),
|
|
54
57
|
afterBridgeDestroy: new require_syncHook.SyncHook()
|
|
55
58
|
});
|
|
56
|
-
const plugins = USE_SNAPSHOT ? [require_index$
|
|
59
|
+
const plugins = USE_REMOTE && USE_SNAPSHOT ? [require_index$2.snapshotPlugin(), require_generate_preload_assets.generatePreloadAssetsPlugin()] : [];
|
|
57
60
|
const defaultOptions = {
|
|
58
61
|
id: require_env.getBuilderId(),
|
|
59
62
|
name: userOptions.name,
|
|
@@ -64,9 +67,9 @@ var ModuleFederation = class {
|
|
|
64
67
|
};
|
|
65
68
|
this.name = userOptions.name;
|
|
66
69
|
this.options = defaultOptions;
|
|
67
|
-
this.snapshotHandler = new require_SnapshotHandler.SnapshotHandler(this);
|
|
68
|
-
this.sharedHandler = new require_index$
|
|
69
|
-
this.remoteHandler = new require_index$
|
|
70
|
+
this.snapshotHandler = USE_REMOTE ? new require_SnapshotHandler.SnapshotHandler(this) : new require_disabled$1.DisabledSnapshotHandler();
|
|
71
|
+
this.sharedHandler = USE_SHARED ? new require_index$3.SharedHandler(this) : new require_disabled$2.DisabledSharedHandler();
|
|
72
|
+
this.remoteHandler = USE_REMOTE ? new require_index$4.RemoteHandler(this) : new require_disabled.DisabledRemoteHandler();
|
|
70
73
|
this.shareScopeMap = this.sharedHandler.shareScopeMap;
|
|
71
74
|
this.registerPlugins([...defaultOptions.plugins, ...userOptions.plugins || []]);
|
|
72
75
|
this.options = this.formatOptions(defaultOptions, userOptions);
|
|
@@ -88,17 +91,7 @@ var ModuleFederation = class {
|
|
|
88
91
|
return this.sharedHandler.initializeSharing(shareScopeName, extraOptions);
|
|
89
92
|
}
|
|
90
93
|
initRawContainer(name, url, container) {
|
|
91
|
-
|
|
92
|
-
name,
|
|
93
|
-
entry: url
|
|
94
|
-
});
|
|
95
|
-
const module = new require_index$1.Module({
|
|
96
|
-
host: this,
|
|
97
|
-
remoteInfo
|
|
98
|
-
});
|
|
99
|
-
module.remoteEntryExports = container;
|
|
100
|
-
this.moduleCache.set(name, module);
|
|
101
|
-
return module;
|
|
94
|
+
return this.remoteHandler.initRawContainer(name, url, container);
|
|
102
95
|
}
|
|
103
96
|
async loadRemote(id, options) {
|
|
104
97
|
return this.remoteHandler.loadRemote(id, options);
|
|
@@ -110,7 +103,7 @@ var ModuleFederation = class {
|
|
|
110
103
|
this.sharedHandler.initShareScopeMap(scopeName, shareScope, extraOptions);
|
|
111
104
|
}
|
|
112
105
|
formatOptions(globalOptions, userOptions) {
|
|
113
|
-
const
|
|
106
|
+
const shared = USE_SHARED ? require_share.formatShareConfigs(globalOptions, userOptions).allShareInfos : {};
|
|
114
107
|
const { userOptions: userOptionsRes, options: globalOptionsRes } = this.hooks.lifecycle.beforeInit.emit({
|
|
115
108
|
origin: this,
|
|
116
109
|
userOptions,
|
package/dist/core.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"core.cjs","names":["PluginSystem","SyncWaterfallHook","SyncHook","AsyncWaterfallHook","AsyncHook","snapshotPlugin","generatePreloadAssetsPlugin","getBuilderId","isBrowserEnvValue","SnapshotHandler","SharedHandler","RemoteHandler","RUNTIME_010","runtimeDescMap","DEFAULT_SCOPE","getRemoteInfo","Module","formatShareConfigs","registerPlugins"],"sources":["../src/core.ts"],"sourcesContent":["import { isBrowserEnvValue } from '@module-federation/sdk';\nimport type {\n CreateLinkHookReturnDom,\n CreateScriptHookReturn,\n GlobalModuleInfo,\n ModuleInfo,\n} from '@module-federation/sdk';\nimport {\n Options,\n PreloadRemoteArgs,\n RemoteEntryExports,\n Remote,\n Shared,\n ShareInfos,\n UserOptions,\n RemoteInfo,\n ShareScopeMap,\n InitScope,\n RemoteEntryInitOptions,\n CallFrom,\n ResourceLoadContext,\n} from './type';\nimport { getBuilderId, registerPlugins, getRemoteEntry, error } from './utils';\nimport {\n getShortErrorMsg,\n RUNTIME_010,\n runtimeDescMap,\n} from '@module-federation/error-codes';\nimport { Module, type RemoteModuleFactory } from './module';\nimport {\n AsyncHook,\n AsyncWaterfallHook,\n PluginSystem,\n SyncHook,\n SyncWaterfallHook,\n} from './utils/hooks';\nimport { generatePreloadAssetsPlugin } from './plugins/generate-preload-assets';\nimport { snapshotPlugin } from './plugins/snapshot';\nimport { getRemoteInfo } from './utils/load';\nimport { DEFAULT_SCOPE } from './constant';\nimport { SnapshotHandler } from './plugins/snapshot/SnapshotHandler';\nimport { SharedHandler } from './shared';\nimport { RemoteHandler } from './remote';\nimport { formatShareConfigs } from './utils/share';\n\n// Declare the global constant that will be defined by DefinePlugin\n// Default to true if not defined (e.g., when runtime-core is used outside of webpack)\n// so that snapshot functionality is included by default.\ndeclare const FEDERATION_OPTIMIZE_NO_SNAPSHOT_PLUGIN: boolean;\nconst USE_SNAPSHOT =\n typeof FEDERATION_OPTIMIZE_NO_SNAPSHOT_PLUGIN === 'boolean'\n ? !FEDERATION_OPTIMIZE_NO_SNAPSHOT_PLUGIN\n : true; // Default to true (use snapshot) when not explicitly defined\n\nexport class ModuleFederation {\n options: Options;\n hooks = new PluginSystem({\n beforeInit: new SyncWaterfallHook<{\n userOptions: UserOptions;\n options: Options;\n origin: ModuleFederation;\n /**\n * @deprecated shareInfo will be removed soon, please use userOptions directly!\n */\n shareInfo: ShareInfos;\n }>('beforeInit'),\n init: new SyncHook<\n [\n {\n options: Options;\n origin: ModuleFederation;\n },\n ],\n void\n >(),\n // maybe will change, temporarily for internal use only\n beforeInitContainer: new AsyncWaterfallHook<{\n shareScope: ShareScopeMap[string];\n initScope: InitScope;\n remoteEntryInitOptions: RemoteEntryInitOptions;\n remoteInfo: RemoteInfo;\n origin: ModuleFederation;\n }>('beforeInitContainer'),\n // maybe will change, temporarily for internal use only\n initContainer: new AsyncWaterfallHook<{\n shareScope: ShareScopeMap[string];\n initScope: InitScope;\n remoteEntryInitOptions: RemoteEntryInitOptions;\n remoteInfo: RemoteInfo;\n remoteEntryExports: RemoteEntryExports;\n origin: ModuleFederation;\n id?: string;\n remoteSnapshot?: ModuleInfo;\n }>('initContainer'),\n });\n version: string = __VERSION__;\n name: string;\n moduleCache: Map<string, Module> = new Map();\n snapshotHandler: SnapshotHandler;\n sharedHandler: SharedHandler;\n remoteHandler: RemoteHandler;\n shareScopeMap: ShareScopeMap;\n loaderHook = new PluginSystem({\n // FIXME: may not be suitable , not open to the public yet\n getModuleInfo: new SyncHook<\n [\n {\n target: Record<string, any>;\n key: any;\n },\n ],\n { value: any | undefined; key: string } | void\n >(),\n createScript: new SyncHook<\n [\n {\n url: string;\n attrs?: Record<string, any>;\n /**\n * The producer(remote) info bound to this resource.\n * Only present when the loader is invoked in a remote-related context\n * (e.g. preloadRemote / loading remoteEntry).\n */\n remoteInfo?: RemoteInfo;\n resourceContext?: ResourceLoadContext;\n },\n ],\n CreateScriptHookReturn\n >(),\n createLink: new SyncHook<\n [\n {\n url: string;\n attrs?: Record<string, any>;\n /**\n * The producer(remote) info bound to this resource.\n * Only present when the loader is invoked in a remote-related context\n * (e.g. preloadRemote / loading remoteEntry).\n */\n remoteInfo?: RemoteInfo;\n resourceContext?: ResourceLoadContext;\n },\n ],\n CreateLinkHookReturnDom\n >(),\n fetch: new AsyncHook<\n [string, RequestInit, RemoteInfo?, ResourceLoadContext?],\n Promise<Response> | void | false\n >(),\n loadEntryError: new AsyncHook<\n [\n {\n getRemoteEntry: typeof getRemoteEntry;\n origin: ModuleFederation;\n remoteInfo: RemoteInfo;\n remoteEntryExports?: RemoteEntryExports | undefined;\n globalLoading: Record<\n string,\n Promise<void | RemoteEntryExports> | undefined\n >;\n uniqueKey: string;\n },\n ],\n Promise<Promise<RemoteEntryExports | undefined> | undefined>\n >(),\n afterLoadEntry: new AsyncHook<\n [\n {\n origin: ModuleFederation;\n remoteInfo: RemoteInfo;\n remoteEntryExports?: RemoteEntryExports | false | void;\n error?: unknown;\n recovered?: boolean;\n },\n ],\n void\n >('afterLoadEntry'),\n beforeInitRemote: new AsyncHook<\n [\n {\n id?: string;\n remoteInfo: RemoteInfo;\n remoteSnapshot?: ModuleInfo;\n origin: ModuleFederation;\n },\n ],\n void\n >('beforeInitRemote'),\n afterInitRemote: new AsyncHook<\n [\n {\n id?: string;\n remoteInfo: RemoteInfo;\n remoteSnapshot?: ModuleInfo;\n remoteEntryExports?: RemoteEntryExports;\n error?: unknown;\n cached?: boolean;\n origin: ModuleFederation;\n },\n ],\n void\n >('afterInitRemote'),\n beforeGetExpose: new AsyncHook<\n [\n {\n id: string;\n expose: string;\n moduleInfo: RemoteInfo;\n remoteEntryExports: RemoteEntryExports;\n origin: ModuleFederation;\n },\n ],\n void\n >('beforeGetExpose'),\n afterGetExpose: new AsyncHook<\n [\n {\n id: string;\n expose: string;\n moduleInfo: RemoteInfo;\n remoteEntryExports: RemoteEntryExports;\n moduleFactory?: RemoteModuleFactory;\n error?: unknown;\n origin: ModuleFederation;\n },\n ],\n void\n >('afterGetExpose'),\n beforeExecuteFactory: new AsyncHook<\n [\n {\n id: string;\n expose: string;\n moduleInfo: RemoteInfo;\n loadFactory: boolean;\n origin: ModuleFederation;\n },\n ],\n void\n >('beforeExecuteFactory'),\n afterExecuteFactory: new AsyncHook<\n [\n {\n id: string;\n expose: string;\n moduleInfo: RemoteInfo;\n loadFactory: boolean;\n exposeModule?: unknown;\n error?: unknown;\n origin: ModuleFederation;\n },\n ],\n void\n >('afterExecuteFactory'),\n getModuleFactory: new AsyncHook<\n [\n {\n remoteEntryExports: RemoteEntryExports;\n expose: string;\n moduleInfo: RemoteInfo;\n },\n ],\n RemoteModuleFactory | Promise<RemoteModuleFactory | undefined> | undefined\n >(),\n });\n bridgeHook = new PluginSystem({\n beforeBridgeRender: new SyncHook<\n [Record<string, any>],\n void | Record<string, any>\n >(),\n afterBridgeRender: new SyncHook<\n [Record<string, any>],\n void | Record<string, any>\n >(),\n beforeBridgeDestroy: new SyncHook<\n [Record<string, any>],\n void | Record<string, any>\n >(),\n afterBridgeDestroy: new SyncHook<\n [Record<string, any>],\n void | Record<string, any>\n >(),\n });\n moduleInfo?: GlobalModuleInfo[string];\n\n constructor(userOptions: UserOptions) {\n const plugins = USE_SNAPSHOT\n ? [snapshotPlugin(), generatePreloadAssetsPlugin()]\n : [];\n // TODO: Validate the details of the options\n // Initialize options with default values\n const defaultOptions: Options = {\n id: getBuilderId(),\n name: userOptions.name,\n plugins,\n remotes: [],\n shared: {},\n inBrowser: isBrowserEnvValue,\n };\n\n this.name = userOptions.name;\n this.options = defaultOptions;\n this.snapshotHandler = new SnapshotHandler(this);\n this.sharedHandler = new SharedHandler(this);\n this.remoteHandler = new RemoteHandler(this);\n this.shareScopeMap = this.sharedHandler.shareScopeMap;\n this.registerPlugins([\n ...defaultOptions.plugins,\n ...(userOptions.plugins || []),\n ]);\n this.options = this.formatOptions(defaultOptions, userOptions);\n }\n\n initOptions(userOptions: UserOptions): Options {\n if (userOptions.name && userOptions.name !== this.options.name) {\n error(getShortErrorMsg(RUNTIME_010, runtimeDescMap));\n }\n this.registerPlugins(userOptions.plugins);\n const options = this.formatOptions(this.options, userOptions);\n\n this.options = options;\n\n return options;\n }\n\n async loadShare<T>(\n pkgName: string,\n extraOptions?: {\n customShareInfo?: Partial<Shared>;\n resolver?: (sharedOptions: ShareInfos[string]) => Shared;\n },\n ): Promise<false | (() => T | undefined)> {\n return this.sharedHandler.loadShare(pkgName, extraOptions);\n }\n\n // The lib function will only be available if the shared set by eager or runtime init is set or the shared is successfully loaded.\n // 1. If the loaded shared already exists globally, then it will be reused\n // 2. If lib exists in local shared, it will be used directly\n // 3. If the local get returns something other than Promise, then it will be used directly\n loadShareSync<T>(\n pkgName: string,\n extraOptions?: {\n customShareInfo?: Partial<Shared>;\n from?: 'build' | 'runtime';\n resolver?: (sharedOptions: ShareInfos[string]) => Shared;\n },\n ): () => T | never {\n return this.sharedHandler.loadShareSync(pkgName, extraOptions);\n }\n\n initializeSharing(\n shareScopeName = DEFAULT_SCOPE,\n extraOptions?: {\n initScope?: InitScope;\n from?: CallFrom;\n strategy?: Shared['strategy'];\n },\n ): Array<Promise<void>> {\n return this.sharedHandler.initializeSharing(shareScopeName, extraOptions);\n }\n\n initRawContainer(\n name: string,\n url: string,\n container: RemoteEntryExports,\n ): Module {\n const remoteInfo = getRemoteInfo({ name, entry: url });\n const module = new Module({ host: this, remoteInfo });\n\n module.remoteEntryExports = container;\n this.moduleCache.set(name, module);\n\n return module;\n }\n\n // eslint-disable-next-line max-lines-per-function\n // eslint-disable-next-line @typescript-eslint/member-ordering\n async loadRemote<T>(\n id: string,\n options?: { loadFactory?: boolean; from: CallFrom },\n ): Promise<T | null> {\n return this.remoteHandler.loadRemote(id, options);\n }\n\n // eslint-disable-next-line @typescript-eslint/member-ordering\n async preloadRemote(preloadOptions: Array<PreloadRemoteArgs>): Promise<void> {\n return this.remoteHandler.preloadRemote(preloadOptions);\n }\n\n initShareScopeMap(\n scopeName: string,\n shareScope: ShareScopeMap[string],\n extraOptions: { hostShareScopeMap?: ShareScopeMap } = {},\n ): void {\n this.sharedHandler.initShareScopeMap(scopeName, shareScope, extraOptions);\n }\n\n formatOptions(globalOptions: Options, userOptions: UserOptions): Options {\n const { allShareInfos: shared } = formatShareConfigs(\n globalOptions,\n userOptions,\n );\n const { userOptions: userOptionsRes, options: globalOptionsRes } =\n this.hooks.lifecycle.beforeInit.emit({\n origin: this,\n userOptions,\n options: globalOptions,\n shareInfo: shared,\n });\n\n const remotes = this.remoteHandler.formatAndRegisterRemote(\n globalOptionsRes,\n userOptionsRes,\n );\n\n const { allShareInfos } = this.sharedHandler.registerShared(\n globalOptionsRes,\n userOptionsRes,\n );\n\n const plugins = [...globalOptionsRes.plugins];\n\n if (userOptionsRes.plugins) {\n userOptionsRes.plugins.forEach((plugin) => {\n if (!plugins.includes(plugin)) {\n plugins.push(plugin);\n }\n });\n }\n\n const optionsRes: Options = {\n ...globalOptions,\n ...userOptions,\n plugins,\n remotes,\n shared: allShareInfos,\n id: userOptionsRes.id || globalOptions.id,\n };\n\n this.hooks.lifecycle.init.emit({\n origin: this,\n options: optionsRes,\n });\n return optionsRes;\n }\n\n registerPlugins(plugins: UserOptions['plugins']) {\n const pluginRes = registerPlugins(plugins, this);\n // Merge plugin\n this.options.plugins = this.options.plugins.reduce((res, plugin) => {\n if (!plugin) return res;\n if (res && !res.find((item) => item.name === plugin.name)) {\n res.push(plugin);\n }\n return res;\n }, pluginRes || []);\n }\n registerRemotes(remotes: Remote[], options?: { force?: boolean }): void {\n return this.remoteHandler.registerRemotes(remotes, options);\n }\n\n registerShared(shared: UserOptions['shared']) {\n this.sharedHandler.registerShared(this.options, {\n ...this.options,\n shared,\n });\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"core.cjs","names":["PluginSystem","SyncWaterfallHook","SyncHook","AsyncWaterfallHook","AsyncHook","snapshotPlugin","generatePreloadAssetsPlugin","getBuilderId","isBrowserEnvValue","SnapshotHandler","DisabledSnapshotHandler","SharedHandler","DisabledSharedHandler","RemoteHandler","DisabledRemoteHandler","RUNTIME_010","runtimeDescMap","DEFAULT_SCOPE","formatShareConfigs","registerPlugins"],"sources":["../src/core.ts"],"sourcesContent":["import { isBrowserEnvValue } from '@module-federation/sdk';\nimport type {\n CreateLinkHookReturnDom,\n CreateScriptHookReturn,\n GlobalModuleInfo,\n ModuleInfo,\n} from '@module-federation/sdk';\nimport {\n Options,\n PreloadRemoteArgs,\n RemoteEntryExports,\n Remote,\n Shared,\n ShareInfos,\n UserOptions,\n RemoteInfo,\n ShareScopeMap,\n InitScope,\n RemoteEntryInitOptions,\n CallFrom,\n ResourceLoadContext,\n} from './type';\nimport { getBuilderId, registerPlugins, getRemoteEntry, error } from './utils';\nimport {\n getShortErrorMsg,\n RUNTIME_010,\n runtimeDescMap,\n} from '@module-federation/error-codes';\nimport type { Module, RemoteModuleFactory } from './module';\nimport {\n AsyncHook,\n AsyncWaterfallHook,\n PluginSystem,\n SyncHook,\n SyncWaterfallHook,\n} from './utils/hooks';\nimport { generatePreloadAssetsPlugin } from './plugins/generate-preload-assets';\nimport { snapshotPlugin } from './plugins/snapshot';\nimport { DEFAULT_SCOPE } from './constant';\nimport { SnapshotHandler } from './plugins/snapshot/SnapshotHandler';\nimport { DisabledSnapshotHandler } from './plugins/snapshot/disabled';\nimport { SharedHandler } from './shared';\nimport { DisabledSharedHandler } from './shared/disabled';\nimport { RemoteHandler } from './remote';\nimport { DisabledRemoteHandler } from './remote/disabled';\nimport { formatShareConfigs } from './utils/share';\n\n// Declare the global constant that will be defined by DefinePlugin\n// Default to true if not defined (e.g., when runtime-core is used outside of webpack)\n// so that snapshot functionality is included by default.\ndeclare const FEDERATION_OPTIMIZE_NO_SNAPSHOT_PLUGIN: boolean;\ndeclare const FEDERATION_OPTIMIZE_NO_REMOTE: boolean;\ndeclare const FEDERATION_OPTIMIZE_NO_SHARED: boolean;\nconst USE_SNAPSHOT =\n typeof FEDERATION_OPTIMIZE_NO_SNAPSHOT_PLUGIN === 'boolean'\n ? !FEDERATION_OPTIMIZE_NO_SNAPSHOT_PLUGIN\n : true; // Default to true (use snapshot) when not explicitly defined\nconst USE_REMOTE =\n typeof FEDERATION_OPTIMIZE_NO_REMOTE === 'boolean'\n ? !FEDERATION_OPTIMIZE_NO_REMOTE\n : true;\nconst USE_SHARED =\n typeof FEDERATION_OPTIMIZE_NO_SHARED === 'boolean'\n ? !FEDERATION_OPTIMIZE_NO_SHARED\n : true;\n\nexport class ModuleFederation {\n options: Options;\n hooks = new PluginSystem({\n beforeInit: new SyncWaterfallHook<{\n userOptions: UserOptions;\n options: Options;\n origin: ModuleFederation;\n /**\n * @deprecated shareInfo will be removed soon, please use userOptions directly!\n */\n shareInfo: ShareInfos;\n }>('beforeInit'),\n init: new SyncHook<\n [\n {\n options: Options;\n origin: ModuleFederation;\n },\n ],\n void\n >(),\n // maybe will change, temporarily for internal use only\n beforeInitContainer: new AsyncWaterfallHook<{\n shareScope: ShareScopeMap[string];\n initScope: InitScope;\n remoteEntryInitOptions: RemoteEntryInitOptions;\n remoteInfo: RemoteInfo;\n origin: ModuleFederation;\n }>('beforeInitContainer'),\n // maybe will change, temporarily for internal use only\n initContainer: new AsyncWaterfallHook<{\n shareScope: ShareScopeMap[string];\n initScope: InitScope;\n remoteEntryInitOptions: RemoteEntryInitOptions;\n remoteInfo: RemoteInfo;\n remoteEntryExports: RemoteEntryExports;\n origin: ModuleFederation;\n id?: string;\n remoteSnapshot?: ModuleInfo;\n }>('initContainer'),\n });\n version: string = __VERSION__;\n name: string;\n moduleCache: Map<string, Module> = new Map();\n snapshotHandler: SnapshotHandler;\n sharedHandler: SharedHandler;\n remoteHandler: RemoteHandler;\n shareScopeMap: ShareScopeMap;\n loaderHook = new PluginSystem({\n // FIXME: may not be suitable , not open to the public yet\n getModuleInfo: new SyncHook<\n [\n {\n target: Record<string, any>;\n key: any;\n },\n ],\n { value: any | undefined; key: string } | void\n >(),\n createScript: new SyncHook<\n [\n {\n url: string;\n attrs?: Record<string, any>;\n /**\n * The producer(remote) info bound to this resource.\n * Only present when the loader is invoked in a remote-related context\n * (e.g. preloadRemote / loading remoteEntry).\n */\n remoteInfo?: RemoteInfo;\n resourceContext?: ResourceLoadContext;\n },\n ],\n CreateScriptHookReturn\n >(),\n createLink: new SyncHook<\n [\n {\n url: string;\n attrs?: Record<string, any>;\n /**\n * The producer(remote) info bound to this resource.\n * Only present when the loader is invoked in a remote-related context\n * (e.g. preloadRemote / loading remoteEntry).\n */\n remoteInfo?: RemoteInfo;\n resourceContext?: ResourceLoadContext;\n },\n ],\n CreateLinkHookReturnDom\n >(),\n fetch: new AsyncHook<\n [string, RequestInit, RemoteInfo?, ResourceLoadContext?],\n Promise<Response> | void | false\n >(),\n loadEntryError: new AsyncHook<\n [\n {\n getRemoteEntry: typeof getRemoteEntry;\n origin: ModuleFederation;\n remoteInfo: RemoteInfo;\n remoteEntryExports?: RemoteEntryExports | undefined;\n globalLoading: Record<\n string,\n Promise<void | RemoteEntryExports> | undefined\n >;\n uniqueKey: string;\n },\n ],\n Promise<Promise<RemoteEntryExports | undefined> | undefined>\n >(),\n afterLoadEntry: new AsyncHook<\n [\n {\n origin: ModuleFederation;\n remoteInfo: RemoteInfo;\n remoteEntryExports?: RemoteEntryExports | false | void;\n error?: unknown;\n recovered?: boolean;\n },\n ],\n void\n >('afterLoadEntry'),\n beforeInitRemote: new AsyncHook<\n [\n {\n id?: string;\n remoteInfo: RemoteInfo;\n remoteSnapshot?: ModuleInfo;\n origin: ModuleFederation;\n },\n ],\n void\n >('beforeInitRemote'),\n afterInitRemote: new AsyncHook<\n [\n {\n id?: string;\n remoteInfo: RemoteInfo;\n remoteSnapshot?: ModuleInfo;\n remoteEntryExports?: RemoteEntryExports;\n error?: unknown;\n cached?: boolean;\n origin: ModuleFederation;\n },\n ],\n void\n >('afterInitRemote'),\n beforeGetExpose: new AsyncHook<\n [\n {\n id: string;\n expose: string;\n moduleInfo: RemoteInfo;\n remoteEntryExports: RemoteEntryExports;\n origin: ModuleFederation;\n },\n ],\n void\n >('beforeGetExpose'),\n afterGetExpose: new AsyncHook<\n [\n {\n id: string;\n expose: string;\n moduleInfo: RemoteInfo;\n remoteEntryExports: RemoteEntryExports;\n moduleFactory?: RemoteModuleFactory;\n error?: unknown;\n origin: ModuleFederation;\n },\n ],\n void\n >('afterGetExpose'),\n beforeExecuteFactory: new AsyncHook<\n [\n {\n id: string;\n expose: string;\n moduleInfo: RemoteInfo;\n loadFactory: boolean;\n origin: ModuleFederation;\n },\n ],\n void\n >('beforeExecuteFactory'),\n afterExecuteFactory: new AsyncHook<\n [\n {\n id: string;\n expose: string;\n moduleInfo: RemoteInfo;\n loadFactory: boolean;\n exposeModule?: unknown;\n error?: unknown;\n origin: ModuleFederation;\n },\n ],\n void\n >('afterExecuteFactory'),\n getModuleFactory: new AsyncHook<\n [\n {\n remoteEntryExports: RemoteEntryExports;\n expose: string;\n moduleInfo: RemoteInfo;\n },\n ],\n RemoteModuleFactory | Promise<RemoteModuleFactory | undefined> | undefined\n >(),\n });\n bridgeHook = new PluginSystem({\n beforeBridgeRender: new SyncHook<\n [Record<string, any>],\n void | Record<string, any>\n >(),\n afterBridgeRender: new SyncHook<\n [Record<string, any>],\n void | Record<string, any>\n >(),\n beforeBridgeDestroy: new SyncHook<\n [Record<string, any>],\n void | Record<string, any>\n >(),\n afterBridgeDestroy: new SyncHook<\n [Record<string, any>],\n void | Record<string, any>\n >(),\n });\n moduleInfo?: GlobalModuleInfo[string];\n\n constructor(userOptions: UserOptions) {\n const plugins =\n USE_REMOTE && USE_SNAPSHOT\n ? [snapshotPlugin(), generatePreloadAssetsPlugin()]\n : [];\n // TODO: Validate the details of the options\n // Initialize options with default values\n const defaultOptions: Options = {\n id: getBuilderId(),\n name: userOptions.name,\n plugins,\n remotes: [],\n shared: {},\n inBrowser: isBrowserEnvValue,\n };\n\n this.name = userOptions.name;\n this.options = defaultOptions;\n this.snapshotHandler = (\n USE_REMOTE ? new SnapshotHandler(this) : new DisabledSnapshotHandler()\n ) as SnapshotHandler;\n this.sharedHandler = (\n USE_SHARED ? new SharedHandler(this) : new DisabledSharedHandler()\n ) as SharedHandler;\n this.remoteHandler = (\n USE_REMOTE ? new RemoteHandler(this) : new DisabledRemoteHandler()\n ) as RemoteHandler;\n this.shareScopeMap = this.sharedHandler.shareScopeMap;\n this.registerPlugins([\n ...defaultOptions.plugins,\n ...(userOptions.plugins || []),\n ]);\n this.options = this.formatOptions(defaultOptions, userOptions);\n }\n\n initOptions(userOptions: UserOptions): Options {\n if (userOptions.name && userOptions.name !== this.options.name) {\n error(getShortErrorMsg(RUNTIME_010, runtimeDescMap));\n }\n this.registerPlugins(userOptions.plugins);\n const options = this.formatOptions(this.options, userOptions);\n\n this.options = options;\n\n return options;\n }\n\n async loadShare<T>(\n pkgName: string,\n extraOptions?: {\n customShareInfo?: Partial<Shared>;\n resolver?: (sharedOptions: ShareInfos[string]) => Shared;\n },\n ): Promise<false | (() => T | undefined)> {\n return this.sharedHandler.loadShare(pkgName, extraOptions);\n }\n\n // The lib function will only be available if the shared set by eager or runtime init is set or the shared is successfully loaded.\n // 1. If the loaded shared already exists globally, then it will be reused\n // 2. If lib exists in local shared, it will be used directly\n // 3. If the local get returns something other than Promise, then it will be used directly\n loadShareSync<T>(\n pkgName: string,\n extraOptions?: {\n customShareInfo?: Partial<Shared>;\n from?: 'build' | 'runtime';\n resolver?: (sharedOptions: ShareInfos[string]) => Shared;\n },\n ): () => T | never {\n return this.sharedHandler.loadShareSync(pkgName, extraOptions);\n }\n\n initializeSharing(\n shareScopeName = DEFAULT_SCOPE,\n extraOptions?: {\n initScope?: InitScope;\n from?: CallFrom;\n strategy?: Shared['strategy'];\n },\n ): Array<Promise<void>> {\n return this.sharedHandler.initializeSharing(shareScopeName, extraOptions);\n }\n\n initRawContainer(\n name: string,\n url: string,\n container: RemoteEntryExports,\n ): Module {\n return this.remoteHandler.initRawContainer(name, url, container);\n }\n\n // eslint-disable-next-line max-lines-per-function\n // eslint-disable-next-line @typescript-eslint/member-ordering\n async loadRemote<T>(\n id: string,\n options?: { loadFactory?: boolean; from: CallFrom },\n ): Promise<T | null> {\n return this.remoteHandler.loadRemote(id, options);\n }\n\n // eslint-disable-next-line @typescript-eslint/member-ordering\n async preloadRemote(preloadOptions: Array<PreloadRemoteArgs>): Promise<void> {\n return this.remoteHandler.preloadRemote(preloadOptions);\n }\n\n initShareScopeMap(\n scopeName: string,\n shareScope: ShareScopeMap[string],\n extraOptions: { hostShareScopeMap?: ShareScopeMap } = {},\n ): void {\n this.sharedHandler.initShareScopeMap(scopeName, shareScope, extraOptions);\n }\n\n formatOptions(globalOptions: Options, userOptions: UserOptions): Options {\n const shared = USE_SHARED\n ? formatShareConfigs(globalOptions, userOptions).allShareInfos\n : {};\n const { userOptions: userOptionsRes, options: globalOptionsRes } =\n this.hooks.lifecycle.beforeInit.emit({\n origin: this,\n userOptions,\n options: globalOptions,\n shareInfo: shared,\n });\n\n const remotes = this.remoteHandler.formatAndRegisterRemote(\n globalOptionsRes,\n userOptionsRes,\n );\n\n const { allShareInfos } = this.sharedHandler.registerShared(\n globalOptionsRes,\n userOptionsRes,\n );\n\n const plugins = [...globalOptionsRes.plugins];\n\n if (userOptionsRes.plugins) {\n userOptionsRes.plugins.forEach((plugin) => {\n if (!plugins.includes(plugin)) {\n plugins.push(plugin);\n }\n });\n }\n\n const optionsRes: Options = {\n ...globalOptions,\n ...userOptions,\n plugins,\n remotes,\n shared: allShareInfos,\n id: userOptionsRes.id || globalOptions.id,\n };\n\n this.hooks.lifecycle.init.emit({\n origin: this,\n options: optionsRes,\n });\n return optionsRes;\n }\n\n registerPlugins(plugins: UserOptions['plugins']) {\n const pluginRes = registerPlugins(plugins, this);\n // Merge plugin\n this.options.plugins = this.options.plugins.reduce((res, plugin) => {\n if (!plugin) return res;\n if (res && !res.find((item) => item.name === plugin.name)) {\n res.push(plugin);\n }\n return res;\n }, pluginRes || []);\n }\n registerRemotes(remotes: Remote[], options?: { force?: boolean }): void {\n return this.remoteHandler.registerRemotes(remotes, options);\n }\n\n registerShared(shared: UserOptions['shared']) {\n this.sharedHandler.registerShared(this.options, {\n ...this.options,\n shared,\n });\n }\n}\n"],"mappings":"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"}
|
package/dist/core.js
CHANGED
|
@@ -3,25 +3,28 @@ import { DEFAULT_SCOPE } from "./constant.js";
|
|
|
3
3
|
import { formatShareConfigs } from "./utils/share.js";
|
|
4
4
|
import { getBuilderId } from "./utils/env.js";
|
|
5
5
|
import { registerPlugins } from "./utils/plugin.js";
|
|
6
|
-
import { getRemoteInfo } from "./utils/load.js";
|
|
7
6
|
import "./utils/index.js";
|
|
8
|
-
import { Module as Module$1 } from "./module/index.js";
|
|
9
7
|
import { SyncHook } from "./utils/hooks/syncHook.js";
|
|
10
8
|
import { AsyncHook } from "./utils/hooks/asyncHook.js";
|
|
11
9
|
import { SyncWaterfallHook } from "./utils/hooks/syncWaterfallHook.js";
|
|
12
10
|
import { AsyncWaterfallHook } from "./utils/hooks/asyncWaterfallHooks.js";
|
|
13
11
|
import { PluginSystem } from "./utils/hooks/pluginSystem.js";
|
|
14
12
|
import "./utils/hooks/index.js";
|
|
13
|
+
import { DisabledRemoteHandler } from "./remote/disabled.js";
|
|
15
14
|
import { snapshotPlugin } from "./plugins/snapshot/index.js";
|
|
16
15
|
import { generatePreloadAssetsPlugin } from "./plugins/generate-preload-assets.js";
|
|
17
16
|
import { SnapshotHandler } from "./plugins/snapshot/SnapshotHandler.js";
|
|
17
|
+
import { DisabledSnapshotHandler } from "./plugins/snapshot/disabled.js";
|
|
18
18
|
import { SharedHandler } from "./shared/index.js";
|
|
19
|
+
import { DisabledSharedHandler } from "./shared/disabled.js";
|
|
19
20
|
import { RemoteHandler } from "./remote/index.js";
|
|
20
21
|
import { isBrowserEnvValue } from "@module-federation/sdk";
|
|
21
22
|
import { RUNTIME_010, getShortErrorMsg, runtimeDescMap } from "@module-federation/error-codes";
|
|
22
23
|
|
|
23
24
|
//#region src/core.ts
|
|
24
25
|
const USE_SNAPSHOT = typeof FEDERATION_OPTIMIZE_NO_SNAPSHOT_PLUGIN === "boolean" ? !FEDERATION_OPTIMIZE_NO_SNAPSHOT_PLUGIN : true;
|
|
26
|
+
const USE_REMOTE = typeof FEDERATION_OPTIMIZE_NO_REMOTE === "boolean" ? !FEDERATION_OPTIMIZE_NO_REMOTE : true;
|
|
27
|
+
const USE_SHARED = typeof FEDERATION_OPTIMIZE_NO_SHARED === "boolean" ? !FEDERATION_OPTIMIZE_NO_SHARED : true;
|
|
25
28
|
var ModuleFederation = class {
|
|
26
29
|
constructor(userOptions) {
|
|
27
30
|
this.hooks = new PluginSystem({
|
|
@@ -30,7 +33,7 @@ var ModuleFederation = class {
|
|
|
30
33
|
beforeInitContainer: new AsyncWaterfallHook("beforeInitContainer"),
|
|
31
34
|
initContainer: new AsyncWaterfallHook("initContainer")
|
|
32
35
|
});
|
|
33
|
-
this.version = "0.0.0-fix-
|
|
36
|
+
this.version = "0.0.0-fix-runtime-core-set-shared-lib-20260819111025";
|
|
34
37
|
this.moduleCache = /* @__PURE__ */ new Map();
|
|
35
38
|
this.loaderHook = new PluginSystem({
|
|
36
39
|
getModuleInfo: new SyncHook(),
|
|
@@ -53,7 +56,7 @@ var ModuleFederation = class {
|
|
|
53
56
|
beforeBridgeDestroy: new SyncHook(),
|
|
54
57
|
afterBridgeDestroy: new SyncHook()
|
|
55
58
|
});
|
|
56
|
-
const plugins = USE_SNAPSHOT ? [snapshotPlugin(), generatePreloadAssetsPlugin()] : [];
|
|
59
|
+
const plugins = USE_REMOTE && USE_SNAPSHOT ? [snapshotPlugin(), generatePreloadAssetsPlugin()] : [];
|
|
57
60
|
const defaultOptions = {
|
|
58
61
|
id: getBuilderId(),
|
|
59
62
|
name: userOptions.name,
|
|
@@ -64,9 +67,9 @@ var ModuleFederation = class {
|
|
|
64
67
|
};
|
|
65
68
|
this.name = userOptions.name;
|
|
66
69
|
this.options = defaultOptions;
|
|
67
|
-
this.snapshotHandler = new SnapshotHandler(this);
|
|
68
|
-
this.sharedHandler = new SharedHandler(this);
|
|
69
|
-
this.remoteHandler = new RemoteHandler(this);
|
|
70
|
+
this.snapshotHandler = USE_REMOTE ? new SnapshotHandler(this) : new DisabledSnapshotHandler();
|
|
71
|
+
this.sharedHandler = USE_SHARED ? new SharedHandler(this) : new DisabledSharedHandler();
|
|
72
|
+
this.remoteHandler = USE_REMOTE ? new RemoteHandler(this) : new DisabledRemoteHandler();
|
|
70
73
|
this.shareScopeMap = this.sharedHandler.shareScopeMap;
|
|
71
74
|
this.registerPlugins([...defaultOptions.plugins, ...userOptions.plugins || []]);
|
|
72
75
|
this.options = this.formatOptions(defaultOptions, userOptions);
|
|
@@ -88,17 +91,7 @@ var ModuleFederation = class {
|
|
|
88
91
|
return this.sharedHandler.initializeSharing(shareScopeName, extraOptions);
|
|
89
92
|
}
|
|
90
93
|
initRawContainer(name, url, container) {
|
|
91
|
-
|
|
92
|
-
name,
|
|
93
|
-
entry: url
|
|
94
|
-
});
|
|
95
|
-
const module = new Module$1({
|
|
96
|
-
host: this,
|
|
97
|
-
remoteInfo
|
|
98
|
-
});
|
|
99
|
-
module.remoteEntryExports = container;
|
|
100
|
-
this.moduleCache.set(name, module);
|
|
101
|
-
return module;
|
|
94
|
+
return this.remoteHandler.initRawContainer(name, url, container);
|
|
102
95
|
}
|
|
103
96
|
async loadRemote(id, options) {
|
|
104
97
|
return this.remoteHandler.loadRemote(id, options);
|
|
@@ -110,7 +103,7 @@ var ModuleFederation = class {
|
|
|
110
103
|
this.sharedHandler.initShareScopeMap(scopeName, shareScope, extraOptions);
|
|
111
104
|
}
|
|
112
105
|
formatOptions(globalOptions, userOptions) {
|
|
113
|
-
const
|
|
106
|
+
const shared = USE_SHARED ? formatShareConfigs(globalOptions, userOptions).allShareInfos : {};
|
|
114
107
|
const { userOptions: userOptionsRes, options: globalOptionsRes } = this.hooks.lifecycle.beforeInit.emit({
|
|
115
108
|
origin: this,
|
|
116
109
|
userOptions,
|
package/dist/core.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"core.js","names":["Module"],"sources":["../src/core.ts"],"sourcesContent":["import { isBrowserEnvValue } from '@module-federation/sdk';\nimport type {\n CreateLinkHookReturnDom,\n CreateScriptHookReturn,\n GlobalModuleInfo,\n ModuleInfo,\n} from '@module-federation/sdk';\nimport {\n Options,\n PreloadRemoteArgs,\n RemoteEntryExports,\n Remote,\n Shared,\n ShareInfos,\n UserOptions,\n RemoteInfo,\n ShareScopeMap,\n InitScope,\n RemoteEntryInitOptions,\n CallFrom,\n ResourceLoadContext,\n} from './type';\nimport { getBuilderId, registerPlugins, getRemoteEntry, error } from './utils';\nimport {\n getShortErrorMsg,\n RUNTIME_010,\n runtimeDescMap,\n} from '@module-federation/error-codes';\nimport { Module, type RemoteModuleFactory } from './module';\nimport {\n AsyncHook,\n AsyncWaterfallHook,\n PluginSystem,\n SyncHook,\n SyncWaterfallHook,\n} from './utils/hooks';\nimport { generatePreloadAssetsPlugin } from './plugins/generate-preload-assets';\nimport { snapshotPlugin } from './plugins/snapshot';\nimport { getRemoteInfo } from './utils/load';\nimport { DEFAULT_SCOPE } from './constant';\nimport { SnapshotHandler } from './plugins/snapshot/SnapshotHandler';\nimport { SharedHandler } from './shared';\nimport { RemoteHandler } from './remote';\nimport { formatShareConfigs } from './utils/share';\n\n// Declare the global constant that will be defined by DefinePlugin\n// Default to true if not defined (e.g., when runtime-core is used outside of webpack)\n// so that snapshot functionality is included by default.\ndeclare const FEDERATION_OPTIMIZE_NO_SNAPSHOT_PLUGIN: boolean;\nconst USE_SNAPSHOT =\n typeof FEDERATION_OPTIMIZE_NO_SNAPSHOT_PLUGIN === 'boolean'\n ? !FEDERATION_OPTIMIZE_NO_SNAPSHOT_PLUGIN\n : true; // Default to true (use snapshot) when not explicitly defined\n\nexport class ModuleFederation {\n options: Options;\n hooks = new PluginSystem({\n beforeInit: new SyncWaterfallHook<{\n userOptions: UserOptions;\n options: Options;\n origin: ModuleFederation;\n /**\n * @deprecated shareInfo will be removed soon, please use userOptions directly!\n */\n shareInfo: ShareInfos;\n }>('beforeInit'),\n init: new SyncHook<\n [\n {\n options: Options;\n origin: ModuleFederation;\n },\n ],\n void\n >(),\n // maybe will change, temporarily for internal use only\n beforeInitContainer: new AsyncWaterfallHook<{\n shareScope: ShareScopeMap[string];\n initScope: InitScope;\n remoteEntryInitOptions: RemoteEntryInitOptions;\n remoteInfo: RemoteInfo;\n origin: ModuleFederation;\n }>('beforeInitContainer'),\n // maybe will change, temporarily for internal use only\n initContainer: new AsyncWaterfallHook<{\n shareScope: ShareScopeMap[string];\n initScope: InitScope;\n remoteEntryInitOptions: RemoteEntryInitOptions;\n remoteInfo: RemoteInfo;\n remoteEntryExports: RemoteEntryExports;\n origin: ModuleFederation;\n id?: string;\n remoteSnapshot?: ModuleInfo;\n }>('initContainer'),\n });\n version: string = __VERSION__;\n name: string;\n moduleCache: Map<string, Module> = new Map();\n snapshotHandler: SnapshotHandler;\n sharedHandler: SharedHandler;\n remoteHandler: RemoteHandler;\n shareScopeMap: ShareScopeMap;\n loaderHook = new PluginSystem({\n // FIXME: may not be suitable , not open to the public yet\n getModuleInfo: new SyncHook<\n [\n {\n target: Record<string, any>;\n key: any;\n },\n ],\n { value: any | undefined; key: string } | void\n >(),\n createScript: new SyncHook<\n [\n {\n url: string;\n attrs?: Record<string, any>;\n /**\n * The producer(remote) info bound to this resource.\n * Only present when the loader is invoked in a remote-related context\n * (e.g. preloadRemote / loading remoteEntry).\n */\n remoteInfo?: RemoteInfo;\n resourceContext?: ResourceLoadContext;\n },\n ],\n CreateScriptHookReturn\n >(),\n createLink: new SyncHook<\n [\n {\n url: string;\n attrs?: Record<string, any>;\n /**\n * The producer(remote) info bound to this resource.\n * Only present when the loader is invoked in a remote-related context\n * (e.g. preloadRemote / loading remoteEntry).\n */\n remoteInfo?: RemoteInfo;\n resourceContext?: ResourceLoadContext;\n },\n ],\n CreateLinkHookReturnDom\n >(),\n fetch: new AsyncHook<\n [string, RequestInit, RemoteInfo?, ResourceLoadContext?],\n Promise<Response> | void | false\n >(),\n loadEntryError: new AsyncHook<\n [\n {\n getRemoteEntry: typeof getRemoteEntry;\n origin: ModuleFederation;\n remoteInfo: RemoteInfo;\n remoteEntryExports?: RemoteEntryExports | undefined;\n globalLoading: Record<\n string,\n Promise<void | RemoteEntryExports> | undefined\n >;\n uniqueKey: string;\n },\n ],\n Promise<Promise<RemoteEntryExports | undefined> | undefined>\n >(),\n afterLoadEntry: new AsyncHook<\n [\n {\n origin: ModuleFederation;\n remoteInfo: RemoteInfo;\n remoteEntryExports?: RemoteEntryExports | false | void;\n error?: unknown;\n recovered?: boolean;\n },\n ],\n void\n >('afterLoadEntry'),\n beforeInitRemote: new AsyncHook<\n [\n {\n id?: string;\n remoteInfo: RemoteInfo;\n remoteSnapshot?: ModuleInfo;\n origin: ModuleFederation;\n },\n ],\n void\n >('beforeInitRemote'),\n afterInitRemote: new AsyncHook<\n [\n {\n id?: string;\n remoteInfo: RemoteInfo;\n remoteSnapshot?: ModuleInfo;\n remoteEntryExports?: RemoteEntryExports;\n error?: unknown;\n cached?: boolean;\n origin: ModuleFederation;\n },\n ],\n void\n >('afterInitRemote'),\n beforeGetExpose: new AsyncHook<\n [\n {\n id: string;\n expose: string;\n moduleInfo: RemoteInfo;\n remoteEntryExports: RemoteEntryExports;\n origin: ModuleFederation;\n },\n ],\n void\n >('beforeGetExpose'),\n afterGetExpose: new AsyncHook<\n [\n {\n id: string;\n expose: string;\n moduleInfo: RemoteInfo;\n remoteEntryExports: RemoteEntryExports;\n moduleFactory?: RemoteModuleFactory;\n error?: unknown;\n origin: ModuleFederation;\n },\n ],\n void\n >('afterGetExpose'),\n beforeExecuteFactory: new AsyncHook<\n [\n {\n id: string;\n expose: string;\n moduleInfo: RemoteInfo;\n loadFactory: boolean;\n origin: ModuleFederation;\n },\n ],\n void\n >('beforeExecuteFactory'),\n afterExecuteFactory: new AsyncHook<\n [\n {\n id: string;\n expose: string;\n moduleInfo: RemoteInfo;\n loadFactory: boolean;\n exposeModule?: unknown;\n error?: unknown;\n origin: ModuleFederation;\n },\n ],\n void\n >('afterExecuteFactory'),\n getModuleFactory: new AsyncHook<\n [\n {\n remoteEntryExports: RemoteEntryExports;\n expose: string;\n moduleInfo: RemoteInfo;\n },\n ],\n RemoteModuleFactory | Promise<RemoteModuleFactory | undefined> | undefined\n >(),\n });\n bridgeHook = new PluginSystem({\n beforeBridgeRender: new SyncHook<\n [Record<string, any>],\n void | Record<string, any>\n >(),\n afterBridgeRender: new SyncHook<\n [Record<string, any>],\n void | Record<string, any>\n >(),\n beforeBridgeDestroy: new SyncHook<\n [Record<string, any>],\n void | Record<string, any>\n >(),\n afterBridgeDestroy: new SyncHook<\n [Record<string, any>],\n void | Record<string, any>\n >(),\n });\n moduleInfo?: GlobalModuleInfo[string];\n\n constructor(userOptions: UserOptions) {\n const plugins = USE_SNAPSHOT\n ? [snapshotPlugin(), generatePreloadAssetsPlugin()]\n : [];\n // TODO: Validate the details of the options\n // Initialize options with default values\n const defaultOptions: Options = {\n id: getBuilderId(),\n name: userOptions.name,\n plugins,\n remotes: [],\n shared: {},\n inBrowser: isBrowserEnvValue,\n };\n\n this.name = userOptions.name;\n this.options = defaultOptions;\n this.snapshotHandler = new SnapshotHandler(this);\n this.sharedHandler = new SharedHandler(this);\n this.remoteHandler = new RemoteHandler(this);\n this.shareScopeMap = this.sharedHandler.shareScopeMap;\n this.registerPlugins([\n ...defaultOptions.plugins,\n ...(userOptions.plugins || []),\n ]);\n this.options = this.formatOptions(defaultOptions, userOptions);\n }\n\n initOptions(userOptions: UserOptions): Options {\n if (userOptions.name && userOptions.name !== this.options.name) {\n error(getShortErrorMsg(RUNTIME_010, runtimeDescMap));\n }\n this.registerPlugins(userOptions.plugins);\n const options = this.formatOptions(this.options, userOptions);\n\n this.options = options;\n\n return options;\n }\n\n async loadShare<T>(\n pkgName: string,\n extraOptions?: {\n customShareInfo?: Partial<Shared>;\n resolver?: (sharedOptions: ShareInfos[string]) => Shared;\n },\n ): Promise<false | (() => T | undefined)> {\n return this.sharedHandler.loadShare(pkgName, extraOptions);\n }\n\n // The lib function will only be available if the shared set by eager or runtime init is set or the shared is successfully loaded.\n // 1. If the loaded shared already exists globally, then it will be reused\n // 2. If lib exists in local shared, it will be used directly\n // 3. If the local get returns something other than Promise, then it will be used directly\n loadShareSync<T>(\n pkgName: string,\n extraOptions?: {\n customShareInfo?: Partial<Shared>;\n from?: 'build' | 'runtime';\n resolver?: (sharedOptions: ShareInfos[string]) => Shared;\n },\n ): () => T | never {\n return this.sharedHandler.loadShareSync(pkgName, extraOptions);\n }\n\n initializeSharing(\n shareScopeName = DEFAULT_SCOPE,\n extraOptions?: {\n initScope?: InitScope;\n from?: CallFrom;\n strategy?: Shared['strategy'];\n },\n ): Array<Promise<void>> {\n return this.sharedHandler.initializeSharing(shareScopeName, extraOptions);\n }\n\n initRawContainer(\n name: string,\n url: string,\n container: RemoteEntryExports,\n ): Module {\n const remoteInfo = getRemoteInfo({ name, entry: url });\n const module = new Module({ host: this, remoteInfo });\n\n module.remoteEntryExports = container;\n this.moduleCache.set(name, module);\n\n return module;\n }\n\n // eslint-disable-next-line max-lines-per-function\n // eslint-disable-next-line @typescript-eslint/member-ordering\n async loadRemote<T>(\n id: string,\n options?: { loadFactory?: boolean; from: CallFrom },\n ): Promise<T | null> {\n return this.remoteHandler.loadRemote(id, options);\n }\n\n // eslint-disable-next-line @typescript-eslint/member-ordering\n async preloadRemote(preloadOptions: Array<PreloadRemoteArgs>): Promise<void> {\n return this.remoteHandler.preloadRemote(preloadOptions);\n }\n\n initShareScopeMap(\n scopeName: string,\n shareScope: ShareScopeMap[string],\n extraOptions: { hostShareScopeMap?: ShareScopeMap } = {},\n ): void {\n this.sharedHandler.initShareScopeMap(scopeName, shareScope, extraOptions);\n }\n\n formatOptions(globalOptions: Options, userOptions: UserOptions): Options {\n const { allShareInfos: shared } = formatShareConfigs(\n globalOptions,\n userOptions,\n );\n const { userOptions: userOptionsRes, options: globalOptionsRes } =\n this.hooks.lifecycle.beforeInit.emit({\n origin: this,\n userOptions,\n options: globalOptions,\n shareInfo: shared,\n });\n\n const remotes = this.remoteHandler.formatAndRegisterRemote(\n globalOptionsRes,\n userOptionsRes,\n );\n\n const { allShareInfos } = this.sharedHandler.registerShared(\n globalOptionsRes,\n userOptionsRes,\n );\n\n const plugins = [...globalOptionsRes.plugins];\n\n if (userOptionsRes.plugins) {\n userOptionsRes.plugins.forEach((plugin) => {\n if (!plugins.includes(plugin)) {\n plugins.push(plugin);\n }\n });\n }\n\n const optionsRes: Options = {\n ...globalOptions,\n ...userOptions,\n plugins,\n remotes,\n shared: allShareInfos,\n id: userOptionsRes.id || globalOptions.id,\n };\n\n this.hooks.lifecycle.init.emit({\n origin: this,\n options: optionsRes,\n });\n return optionsRes;\n }\n\n registerPlugins(plugins: UserOptions['plugins']) {\n const pluginRes = registerPlugins(plugins, this);\n // Merge plugin\n this.options.plugins = this.options.plugins.reduce((res, plugin) => {\n if (!plugin) return res;\n if (res && !res.find((item) => item.name === plugin.name)) {\n res.push(plugin);\n }\n return res;\n }, pluginRes || []);\n }\n registerRemotes(remotes: Remote[], options?: { force?: boolean }): void {\n return this.remoteHandler.registerRemotes(remotes, options);\n }\n\n registerShared(shared: UserOptions['shared']) {\n this.sharedHandler.registerShared(this.options, {\n ...this.options,\n shared,\n });\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"core.js","names":[],"sources":["../src/core.ts"],"sourcesContent":["import { isBrowserEnvValue } from '@module-federation/sdk';\nimport type {\n CreateLinkHookReturnDom,\n CreateScriptHookReturn,\n GlobalModuleInfo,\n ModuleInfo,\n} from '@module-federation/sdk';\nimport {\n Options,\n PreloadRemoteArgs,\n RemoteEntryExports,\n Remote,\n Shared,\n ShareInfos,\n UserOptions,\n RemoteInfo,\n ShareScopeMap,\n InitScope,\n RemoteEntryInitOptions,\n CallFrom,\n ResourceLoadContext,\n} from './type';\nimport { getBuilderId, registerPlugins, getRemoteEntry, error } from './utils';\nimport {\n getShortErrorMsg,\n RUNTIME_010,\n runtimeDescMap,\n} from '@module-federation/error-codes';\nimport type { Module, RemoteModuleFactory } from './module';\nimport {\n AsyncHook,\n AsyncWaterfallHook,\n PluginSystem,\n SyncHook,\n SyncWaterfallHook,\n} from './utils/hooks';\nimport { generatePreloadAssetsPlugin } from './plugins/generate-preload-assets';\nimport { snapshotPlugin } from './plugins/snapshot';\nimport { DEFAULT_SCOPE } from './constant';\nimport { SnapshotHandler } from './plugins/snapshot/SnapshotHandler';\nimport { DisabledSnapshotHandler } from './plugins/snapshot/disabled';\nimport { SharedHandler } from './shared';\nimport { DisabledSharedHandler } from './shared/disabled';\nimport { RemoteHandler } from './remote';\nimport { DisabledRemoteHandler } from './remote/disabled';\nimport { formatShareConfigs } from './utils/share';\n\n// Declare the global constant that will be defined by DefinePlugin\n// Default to true if not defined (e.g., when runtime-core is used outside of webpack)\n// so that snapshot functionality is included by default.\ndeclare const FEDERATION_OPTIMIZE_NO_SNAPSHOT_PLUGIN: boolean;\ndeclare const FEDERATION_OPTIMIZE_NO_REMOTE: boolean;\ndeclare const FEDERATION_OPTIMIZE_NO_SHARED: boolean;\nconst USE_SNAPSHOT =\n typeof FEDERATION_OPTIMIZE_NO_SNAPSHOT_PLUGIN === 'boolean'\n ? !FEDERATION_OPTIMIZE_NO_SNAPSHOT_PLUGIN\n : true; // Default to true (use snapshot) when not explicitly defined\nconst USE_REMOTE =\n typeof FEDERATION_OPTIMIZE_NO_REMOTE === 'boolean'\n ? !FEDERATION_OPTIMIZE_NO_REMOTE\n : true;\nconst USE_SHARED =\n typeof FEDERATION_OPTIMIZE_NO_SHARED === 'boolean'\n ? !FEDERATION_OPTIMIZE_NO_SHARED\n : true;\n\nexport class ModuleFederation {\n options: Options;\n hooks = new PluginSystem({\n beforeInit: new SyncWaterfallHook<{\n userOptions: UserOptions;\n options: Options;\n origin: ModuleFederation;\n /**\n * @deprecated shareInfo will be removed soon, please use userOptions directly!\n */\n shareInfo: ShareInfos;\n }>('beforeInit'),\n init: new SyncHook<\n [\n {\n options: Options;\n origin: ModuleFederation;\n },\n ],\n void\n >(),\n // maybe will change, temporarily for internal use only\n beforeInitContainer: new AsyncWaterfallHook<{\n shareScope: ShareScopeMap[string];\n initScope: InitScope;\n remoteEntryInitOptions: RemoteEntryInitOptions;\n remoteInfo: RemoteInfo;\n origin: ModuleFederation;\n }>('beforeInitContainer'),\n // maybe will change, temporarily for internal use only\n initContainer: new AsyncWaterfallHook<{\n shareScope: ShareScopeMap[string];\n initScope: InitScope;\n remoteEntryInitOptions: RemoteEntryInitOptions;\n remoteInfo: RemoteInfo;\n remoteEntryExports: RemoteEntryExports;\n origin: ModuleFederation;\n id?: string;\n remoteSnapshot?: ModuleInfo;\n }>('initContainer'),\n });\n version: string = __VERSION__;\n name: string;\n moduleCache: Map<string, Module> = new Map();\n snapshotHandler: SnapshotHandler;\n sharedHandler: SharedHandler;\n remoteHandler: RemoteHandler;\n shareScopeMap: ShareScopeMap;\n loaderHook = new PluginSystem({\n // FIXME: may not be suitable , not open to the public yet\n getModuleInfo: new SyncHook<\n [\n {\n target: Record<string, any>;\n key: any;\n },\n ],\n { value: any | undefined; key: string } | void\n >(),\n createScript: new SyncHook<\n [\n {\n url: string;\n attrs?: Record<string, any>;\n /**\n * The producer(remote) info bound to this resource.\n * Only present when the loader is invoked in a remote-related context\n * (e.g. preloadRemote / loading remoteEntry).\n */\n remoteInfo?: RemoteInfo;\n resourceContext?: ResourceLoadContext;\n },\n ],\n CreateScriptHookReturn\n >(),\n createLink: new SyncHook<\n [\n {\n url: string;\n attrs?: Record<string, any>;\n /**\n * The producer(remote) info bound to this resource.\n * Only present when the loader is invoked in a remote-related context\n * (e.g. preloadRemote / loading remoteEntry).\n */\n remoteInfo?: RemoteInfo;\n resourceContext?: ResourceLoadContext;\n },\n ],\n CreateLinkHookReturnDom\n >(),\n fetch: new AsyncHook<\n [string, RequestInit, RemoteInfo?, ResourceLoadContext?],\n Promise<Response> | void | false\n >(),\n loadEntryError: new AsyncHook<\n [\n {\n getRemoteEntry: typeof getRemoteEntry;\n origin: ModuleFederation;\n remoteInfo: RemoteInfo;\n remoteEntryExports?: RemoteEntryExports | undefined;\n globalLoading: Record<\n string,\n Promise<void | RemoteEntryExports> | undefined\n >;\n uniqueKey: string;\n },\n ],\n Promise<Promise<RemoteEntryExports | undefined> | undefined>\n >(),\n afterLoadEntry: new AsyncHook<\n [\n {\n origin: ModuleFederation;\n remoteInfo: RemoteInfo;\n remoteEntryExports?: RemoteEntryExports | false | void;\n error?: unknown;\n recovered?: boolean;\n },\n ],\n void\n >('afterLoadEntry'),\n beforeInitRemote: new AsyncHook<\n [\n {\n id?: string;\n remoteInfo: RemoteInfo;\n remoteSnapshot?: ModuleInfo;\n origin: ModuleFederation;\n },\n ],\n void\n >('beforeInitRemote'),\n afterInitRemote: new AsyncHook<\n [\n {\n id?: string;\n remoteInfo: RemoteInfo;\n remoteSnapshot?: ModuleInfo;\n remoteEntryExports?: RemoteEntryExports;\n error?: unknown;\n cached?: boolean;\n origin: ModuleFederation;\n },\n ],\n void\n >('afterInitRemote'),\n beforeGetExpose: new AsyncHook<\n [\n {\n id: string;\n expose: string;\n moduleInfo: RemoteInfo;\n remoteEntryExports: RemoteEntryExports;\n origin: ModuleFederation;\n },\n ],\n void\n >('beforeGetExpose'),\n afterGetExpose: new AsyncHook<\n [\n {\n id: string;\n expose: string;\n moduleInfo: RemoteInfo;\n remoteEntryExports: RemoteEntryExports;\n moduleFactory?: RemoteModuleFactory;\n error?: unknown;\n origin: ModuleFederation;\n },\n ],\n void\n >('afterGetExpose'),\n beforeExecuteFactory: new AsyncHook<\n [\n {\n id: string;\n expose: string;\n moduleInfo: RemoteInfo;\n loadFactory: boolean;\n origin: ModuleFederation;\n },\n ],\n void\n >('beforeExecuteFactory'),\n afterExecuteFactory: new AsyncHook<\n [\n {\n id: string;\n expose: string;\n moduleInfo: RemoteInfo;\n loadFactory: boolean;\n exposeModule?: unknown;\n error?: unknown;\n origin: ModuleFederation;\n },\n ],\n void\n >('afterExecuteFactory'),\n getModuleFactory: new AsyncHook<\n [\n {\n remoteEntryExports: RemoteEntryExports;\n expose: string;\n moduleInfo: RemoteInfo;\n },\n ],\n RemoteModuleFactory | Promise<RemoteModuleFactory | undefined> | undefined\n >(),\n });\n bridgeHook = new PluginSystem({\n beforeBridgeRender: new SyncHook<\n [Record<string, any>],\n void | Record<string, any>\n >(),\n afterBridgeRender: new SyncHook<\n [Record<string, any>],\n void | Record<string, any>\n >(),\n beforeBridgeDestroy: new SyncHook<\n [Record<string, any>],\n void | Record<string, any>\n >(),\n afterBridgeDestroy: new SyncHook<\n [Record<string, any>],\n void | Record<string, any>\n >(),\n });\n moduleInfo?: GlobalModuleInfo[string];\n\n constructor(userOptions: UserOptions) {\n const plugins =\n USE_REMOTE && USE_SNAPSHOT\n ? [snapshotPlugin(), generatePreloadAssetsPlugin()]\n : [];\n // TODO: Validate the details of the options\n // Initialize options with default values\n const defaultOptions: Options = {\n id: getBuilderId(),\n name: userOptions.name,\n plugins,\n remotes: [],\n shared: {},\n inBrowser: isBrowserEnvValue,\n };\n\n this.name = userOptions.name;\n this.options = defaultOptions;\n this.snapshotHandler = (\n USE_REMOTE ? new SnapshotHandler(this) : new DisabledSnapshotHandler()\n ) as SnapshotHandler;\n this.sharedHandler = (\n USE_SHARED ? new SharedHandler(this) : new DisabledSharedHandler()\n ) as SharedHandler;\n this.remoteHandler = (\n USE_REMOTE ? new RemoteHandler(this) : new DisabledRemoteHandler()\n ) as RemoteHandler;\n this.shareScopeMap = this.sharedHandler.shareScopeMap;\n this.registerPlugins([\n ...defaultOptions.plugins,\n ...(userOptions.plugins || []),\n ]);\n this.options = this.formatOptions(defaultOptions, userOptions);\n }\n\n initOptions(userOptions: UserOptions): Options {\n if (userOptions.name && userOptions.name !== this.options.name) {\n error(getShortErrorMsg(RUNTIME_010, runtimeDescMap));\n }\n this.registerPlugins(userOptions.plugins);\n const options = this.formatOptions(this.options, userOptions);\n\n this.options = options;\n\n return options;\n }\n\n async loadShare<T>(\n pkgName: string,\n extraOptions?: {\n customShareInfo?: Partial<Shared>;\n resolver?: (sharedOptions: ShareInfos[string]) => Shared;\n },\n ): Promise<false | (() => T | undefined)> {\n return this.sharedHandler.loadShare(pkgName, extraOptions);\n }\n\n // The lib function will only be available if the shared set by eager or runtime init is set or the shared is successfully loaded.\n // 1. If the loaded shared already exists globally, then it will be reused\n // 2. If lib exists in local shared, it will be used directly\n // 3. If the local get returns something other than Promise, then it will be used directly\n loadShareSync<T>(\n pkgName: string,\n extraOptions?: {\n customShareInfo?: Partial<Shared>;\n from?: 'build' | 'runtime';\n resolver?: (sharedOptions: ShareInfos[string]) => Shared;\n },\n ): () => T | never {\n return this.sharedHandler.loadShareSync(pkgName, extraOptions);\n }\n\n initializeSharing(\n shareScopeName = DEFAULT_SCOPE,\n extraOptions?: {\n initScope?: InitScope;\n from?: CallFrom;\n strategy?: Shared['strategy'];\n },\n ): Array<Promise<void>> {\n return this.sharedHandler.initializeSharing(shareScopeName, extraOptions);\n }\n\n initRawContainer(\n name: string,\n url: string,\n container: RemoteEntryExports,\n ): Module {\n return this.remoteHandler.initRawContainer(name, url, container);\n }\n\n // eslint-disable-next-line max-lines-per-function\n // eslint-disable-next-line @typescript-eslint/member-ordering\n async loadRemote<T>(\n id: string,\n options?: { loadFactory?: boolean; from: CallFrom },\n ): Promise<T | null> {\n return this.remoteHandler.loadRemote(id, options);\n }\n\n // eslint-disable-next-line @typescript-eslint/member-ordering\n async preloadRemote(preloadOptions: Array<PreloadRemoteArgs>): Promise<void> {\n return this.remoteHandler.preloadRemote(preloadOptions);\n }\n\n initShareScopeMap(\n scopeName: string,\n shareScope: ShareScopeMap[string],\n extraOptions: { hostShareScopeMap?: ShareScopeMap } = {},\n ): void {\n this.sharedHandler.initShareScopeMap(scopeName, shareScope, extraOptions);\n }\n\n formatOptions(globalOptions: Options, userOptions: UserOptions): Options {\n const shared = USE_SHARED\n ? formatShareConfigs(globalOptions, userOptions).allShareInfos\n : {};\n const { userOptions: userOptionsRes, options: globalOptionsRes } =\n this.hooks.lifecycle.beforeInit.emit({\n origin: this,\n userOptions,\n options: globalOptions,\n shareInfo: shared,\n });\n\n const remotes = this.remoteHandler.formatAndRegisterRemote(\n globalOptionsRes,\n userOptionsRes,\n );\n\n const { allShareInfos } = this.sharedHandler.registerShared(\n globalOptionsRes,\n userOptionsRes,\n );\n\n const plugins = [...globalOptionsRes.plugins];\n\n if (userOptionsRes.plugins) {\n userOptionsRes.plugins.forEach((plugin) => {\n if (!plugins.includes(plugin)) {\n plugins.push(plugin);\n }\n });\n }\n\n const optionsRes: Options = {\n ...globalOptions,\n ...userOptions,\n plugins,\n remotes,\n shared: allShareInfos,\n id: userOptionsRes.id || globalOptions.id,\n };\n\n this.hooks.lifecycle.init.emit({\n origin: this,\n options: optionsRes,\n });\n return optionsRes;\n }\n\n registerPlugins(plugins: UserOptions['plugins']) {\n const pluginRes = registerPlugins(plugins, this);\n // Merge plugin\n this.options.plugins = this.options.plugins.reduce((res, plugin) => {\n if (!plugin) return res;\n if (res && !res.find((item) => item.name === plugin.name)) {\n res.push(plugin);\n }\n return res;\n }, pluginRes || []);\n }\n registerRemotes(remotes: Remote[], options?: { force?: boolean }): void {\n return this.remoteHandler.registerRemotes(remotes, options);\n }\n\n registerShared(shared: UserOptions['shared']) {\n this.sharedHandler.registerShared(this.options, {\n ...this.options,\n shared,\n });\n }\n}\n"],"mappings":"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"}
|
package/dist/global.cjs
CHANGED
|
@@ -3,6 +3,7 @@ const require_tool = require('./utils/tool.cjs');
|
|
|
3
3
|
let _module_federation_sdk = require("@module-federation/sdk");
|
|
4
4
|
|
|
5
5
|
//#region src/global.ts
|
|
6
|
+
const MAX_PRELOADED_ASSETS = 2e3;
|
|
6
7
|
const CurrentGlobal = typeof globalThis === "object" ? globalThis : window;
|
|
7
8
|
const nativeGlobal = (() => {
|
|
8
9
|
try {
|
|
@@ -33,7 +34,8 @@ function setGlobalDefaultVal(target) {
|
|
|
33
34
|
moduleInfo: {},
|
|
34
35
|
__SHARE__: {},
|
|
35
36
|
__MANIFEST_LOADING__: {},
|
|
36
|
-
__PRELOADED_MAP__: /* @__PURE__ */ new Map()
|
|
37
|
+
__PRELOADED_MAP__: /* @__PURE__ */ new Map(),
|
|
38
|
+
__PRELOADED_ASSETS__: /* @__PURE__ */ new Set()
|
|
37
39
|
});
|
|
38
40
|
definePropertyGlobalVal(target, "__VMOK__", target.__FEDERATION__);
|
|
39
41
|
}
|
|
@@ -43,6 +45,7 @@ function setGlobalDefaultVal(target) {
|
|
|
43
45
|
target.__FEDERATION__.__SHARE__ ??= {};
|
|
44
46
|
target.__FEDERATION__.__MANIFEST_LOADING__ ??= {};
|
|
45
47
|
target.__FEDERATION__.__PRELOADED_MAP__ ??= /* @__PURE__ */ new Map();
|
|
48
|
+
target.__FEDERATION__.__PRELOADED_ASSETS__ ??= /* @__PURE__ */ new Set();
|
|
46
49
|
}
|
|
47
50
|
setGlobalDefaultVal(CurrentGlobal);
|
|
48
51
|
setGlobalDefaultVal(nativeGlobal);
|
|
@@ -52,6 +55,7 @@ function resetFederationGlobalInfo() {
|
|
|
52
55
|
CurrentGlobal.__FEDERATION__.moduleInfo = {};
|
|
53
56
|
CurrentGlobal.__FEDERATION__.__SHARE__ = {};
|
|
54
57
|
CurrentGlobal.__FEDERATION__.__MANIFEST_LOADING__ = {};
|
|
58
|
+
CurrentGlobal.__FEDERATION__.__PRELOADED_ASSETS__.clear();
|
|
55
59
|
Object.keys(globalLoading).forEach((key) => {
|
|
56
60
|
delete globalLoading[key];
|
|
57
61
|
});
|
|
@@ -65,7 +69,7 @@ function getGlobalFederationConstructor() {
|
|
|
65
69
|
function setGlobalFederationConstructor(FederationConstructor, isDebug = (0, _module_federation_sdk.isDebugMode)()) {
|
|
66
70
|
if (isDebug) {
|
|
67
71
|
CurrentGlobal.__FEDERATION__.__DEBUG_CONSTRUCTOR__ = FederationConstructor;
|
|
68
|
-
CurrentGlobal.__FEDERATION__.__DEBUG_CONSTRUCTOR_VERSION__ = "0.0.0-fix-
|
|
72
|
+
CurrentGlobal.__FEDERATION__.__DEBUG_CONSTRUCTOR_VERSION__ = "0.0.0-fix-runtime-core-set-shared-lib-20260819111025";
|
|
69
73
|
}
|
|
70
74
|
}
|
|
71
75
|
function getInfoWithoutType(target, key) {
|
|
@@ -136,6 +140,15 @@ const registerGlobalPlugins = (plugins) => {
|
|
|
136
140
|
const getGlobalHostPlugins = () => nativeGlobal.__FEDERATION__.__GLOBAL_PLUGIN__;
|
|
137
141
|
const getPreloaded = (id) => CurrentGlobal.__FEDERATION__.__PRELOADED_MAP__.get(id);
|
|
138
142
|
const setPreloaded = (id) => CurrentGlobal.__FEDERATION__.__PRELOADED_MAP__.set(id, true);
|
|
143
|
+
const getPreloadedAsset = (url) => CurrentGlobal.__FEDERATION__.__PRELOADED_ASSETS__.has(url);
|
|
144
|
+
const setPreloadedAsset = (url) => {
|
|
145
|
+
const preloadedAssets = CurrentGlobal.__FEDERATION__.__PRELOADED_ASSETS__;
|
|
146
|
+
preloadedAssets.add(url);
|
|
147
|
+
if (preloadedAssets.size > MAX_PRELOADED_ASSETS) {
|
|
148
|
+
const oldestUrl = preloadedAssets.values().next().value;
|
|
149
|
+
if (oldestUrl !== void 0) preloadedAssets.delete(oldestUrl);
|
|
150
|
+
}
|
|
151
|
+
};
|
|
139
152
|
|
|
140
153
|
//#endregion
|
|
141
154
|
exports.CurrentGlobal = CurrentGlobal;
|
|
@@ -147,6 +160,7 @@ exports.getGlobalSnapshot = getGlobalSnapshot;
|
|
|
147
160
|
exports.getGlobalSnapshotInfoByModuleInfo = getGlobalSnapshotInfoByModuleInfo;
|
|
148
161
|
exports.getInfoWithoutType = getInfoWithoutType;
|
|
149
162
|
exports.getPreloaded = getPreloaded;
|
|
163
|
+
exports.getPreloadedAsset = getPreloadedAsset;
|
|
150
164
|
exports.getRemoteEntryExports = getRemoteEntryExports;
|
|
151
165
|
exports.getTargetSnapshotInfoByModuleInfo = getTargetSnapshotInfoByModuleInfo;
|
|
152
166
|
exports.globalLoading = globalLoading;
|
|
@@ -157,4 +171,5 @@ exports.setGlobalFederationConstructor = setGlobalFederationConstructor;
|
|
|
157
171
|
exports.setGlobalFederationInstance = setGlobalFederationInstance;
|
|
158
172
|
exports.setGlobalSnapshotInfoByModuleInfo = setGlobalSnapshotInfoByModuleInfo;
|
|
159
173
|
exports.setPreloaded = setPreloaded;
|
|
174
|
+
exports.setPreloadedAsset = setPreloadedAsset;
|
|
160
175
|
//# sourceMappingURL=global.cjs.map
|
package/dist/global.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"global.cjs","names":["getFMId"],"sources":["../src/global.ts"],"sourcesContent":["import { ModuleFederation } from './core';\nimport {\n RemoteEntryExports,\n GlobalShareScopeMap,\n Remote,\n Optional,\n} from './type';\nimport { getFMId } from './utils/tool';\nimport {\n GlobalModuleInfo,\n ModuleInfo,\n isDebugMode,\n} from '@module-federation/sdk';\nimport { warn, error } from './utils/logger';\nimport { ModuleFederationRuntimePlugin } from './type/plugin';\n\nexport interface Federation {\n __GLOBAL_PLUGIN__: Array<ModuleFederationRuntimePlugin>;\n __DEBUG_CONSTRUCTOR_VERSION__?: string;\n moduleInfo: GlobalModuleInfo;\n __DEBUG_CONSTRUCTOR__?: typeof ModuleFederation;\n __INSTANCES__: Array<ModuleFederation>;\n __SHARE__: GlobalShareScopeMap;\n __MANIFEST_LOADING__: Record<string, Promise<ModuleInfo>>;\n __PRELOADED_MAP__: Map<string, boolean>;\n}\nexport const CurrentGlobal =\n typeof globalThis === 'object' ? globalThis : window;\nexport const nativeGlobal: typeof global = (() => {\n try {\n // get real window (incase of sandbox)\n return document.defaultView;\n } catch {\n // node env\n return CurrentGlobal;\n }\n})() as typeof global;\n\nexport const Global = nativeGlobal;\n\ndeclare global {\n // eslint-disable-next-line no-var\n var __FEDERATION__: Federation,\n __VMOK__: Federation,\n // eslint-disable-next-line no-var\n __GLOBAL_LOADING_REMOTE_ENTRY__: Record<\n string,\n undefined | Promise<RemoteEntryExports | void>\n >;\n}\n\nfunction definePropertyGlobalVal(\n target: typeof CurrentGlobal,\n key: string,\n val: any,\n) {\n Object.defineProperty(target, key, {\n value: val,\n configurable: false,\n writable: true,\n });\n}\n\nfunction includeOwnProperty(target: typeof CurrentGlobal, key: string) {\n return Object.hasOwnProperty.call(target, key);\n}\n\n// This section is to prevent encapsulation by certain microfrontend frameworks. Due to reuse policies, sandbox escapes.\n// The sandbox in the microfrontend does not replicate the value of 'configurable'.\n// If there is no loading content on the global object, this section defines the loading object.\nif (!includeOwnProperty(CurrentGlobal, '__GLOBAL_LOADING_REMOTE_ENTRY__')) {\n definePropertyGlobalVal(CurrentGlobal, '__GLOBAL_LOADING_REMOTE_ENTRY__', {});\n}\n\nexport const globalLoading = CurrentGlobal.__GLOBAL_LOADING_REMOTE_ENTRY__;\n\nfunction setGlobalDefaultVal(target: typeof CurrentGlobal) {\n if (\n includeOwnProperty(target, '__VMOK__') &&\n !includeOwnProperty(target, '__FEDERATION__')\n ) {\n definePropertyGlobalVal(target, '__FEDERATION__', target.__VMOK__);\n }\n\n if (!includeOwnProperty(target, '__FEDERATION__')) {\n definePropertyGlobalVal(target, '__FEDERATION__', {\n __GLOBAL_PLUGIN__: [],\n __INSTANCES__: [],\n moduleInfo: {},\n __SHARE__: {},\n __MANIFEST_LOADING__: {},\n __PRELOADED_MAP__: new Map(),\n });\n\n definePropertyGlobalVal(target, '__VMOK__', target.__FEDERATION__);\n }\n\n target.__FEDERATION__.__GLOBAL_PLUGIN__ ??= [];\n target.__FEDERATION__.__INSTANCES__ ??= [];\n target.__FEDERATION__.moduleInfo ??= {};\n target.__FEDERATION__.__SHARE__ ??= {};\n target.__FEDERATION__.__MANIFEST_LOADING__ ??= {};\n target.__FEDERATION__.__PRELOADED_MAP__ ??= new Map();\n}\n\nsetGlobalDefaultVal(CurrentGlobal);\nsetGlobalDefaultVal(nativeGlobal);\n\nexport function resetFederationGlobalInfo(): void {\n CurrentGlobal.__FEDERATION__.__GLOBAL_PLUGIN__ = [];\n CurrentGlobal.__FEDERATION__.__INSTANCES__ = [];\n CurrentGlobal.__FEDERATION__.moduleInfo = {};\n CurrentGlobal.__FEDERATION__.__SHARE__ = {};\n CurrentGlobal.__FEDERATION__.__MANIFEST_LOADING__ = {};\n\n Object.keys(globalLoading).forEach((key) => {\n delete globalLoading[key];\n });\n}\n\nexport function setGlobalFederationInstance(\n FederationInstance: ModuleFederation,\n): void {\n CurrentGlobal.__FEDERATION__.__INSTANCES__.push(FederationInstance);\n}\n\nexport function getGlobalFederationConstructor():\n | typeof ModuleFederation\n | undefined {\n return CurrentGlobal.__FEDERATION__.__DEBUG_CONSTRUCTOR__;\n}\n\nexport function setGlobalFederationConstructor(\n FederationConstructor: typeof ModuleFederation | undefined,\n isDebug = isDebugMode(),\n): void {\n if (isDebug) {\n CurrentGlobal.__FEDERATION__.__DEBUG_CONSTRUCTOR__ = FederationConstructor;\n CurrentGlobal.__FEDERATION__.__DEBUG_CONSTRUCTOR_VERSION__ = __VERSION__;\n }\n}\n\nexport function getInfoWithoutType<T extends object>(\n target: T,\n key: keyof T,\n): { value: T[keyof T] | undefined; key: string } {\n if (typeof key === 'string') {\n const keyRes = target[key];\n if (keyRes) {\n return {\n value: target[key],\n key: key as string,\n };\n } else {\n const targetKeys = Object.keys(target);\n for (const targetKey of targetKeys) {\n const [targetTypeOrName, _] = targetKey.split(':');\n const nKey = `${targetTypeOrName}:${key}` as unknown as keyof T;\n const typeWithKeyRes = target[nKey];\n if (typeWithKeyRes) {\n return {\n value: typeWithKeyRes,\n key: nKey as string,\n };\n }\n }\n return {\n value: undefined,\n key: key as string,\n };\n }\n } else {\n error(\n `getInfoWithoutType: \"key\" must be a string, got ${typeof key} (${JSON.stringify(key)}).`,\n );\n }\n}\n\nexport const getGlobalSnapshot = (): GlobalModuleInfo =>\n nativeGlobal.__FEDERATION__.moduleInfo;\n\nexport const getTargetSnapshotInfoByModuleInfo = (\n moduleInfo: Optional<Remote, 'alias'>,\n snapshot: GlobalModuleInfo,\n): GlobalModuleInfo[string] | undefined => {\n // Check if the remote is included in the hostSnapshot\n const moduleKey = getFMId(moduleInfo);\n const getModuleInfo = getInfoWithoutType(snapshot, moduleKey).value;\n\n // The remoteSnapshot might not include a version\n if (\n getModuleInfo &&\n !getModuleInfo.version &&\n 'version' in moduleInfo &&\n moduleInfo['version']\n ) {\n getModuleInfo.version = moduleInfo['version'];\n }\n\n if (getModuleInfo) {\n return getModuleInfo;\n }\n\n // If the remote is not included in the hostSnapshot, deploy a micro app snapshot\n if ('version' in moduleInfo && moduleInfo['version']) {\n const { version, ...resModuleInfo } = moduleInfo;\n const moduleKeyWithoutVersion = getFMId(resModuleInfo);\n const getModuleInfoWithoutVersion = getInfoWithoutType(\n nativeGlobal.__FEDERATION__.moduleInfo,\n moduleKeyWithoutVersion,\n ).value;\n\n if (getModuleInfoWithoutVersion?.version === version) {\n return getModuleInfoWithoutVersion;\n }\n }\n\n return;\n};\n\nexport const getGlobalSnapshotInfoByModuleInfo = (\n moduleInfo: Optional<Remote, 'alias'>,\n): GlobalModuleInfo[string] | undefined =>\n getTargetSnapshotInfoByModuleInfo(\n moduleInfo,\n nativeGlobal.__FEDERATION__.moduleInfo,\n );\n\nexport const setGlobalSnapshotInfoByModuleInfo = (\n remoteInfo: Remote,\n moduleDetailInfo: GlobalModuleInfo[string],\n): GlobalModuleInfo => {\n const moduleKey = getFMId(remoteInfo);\n nativeGlobal.__FEDERATION__.moduleInfo[moduleKey] = moduleDetailInfo;\n return nativeGlobal.__FEDERATION__.moduleInfo;\n};\n\nexport const addGlobalSnapshot = (\n moduleInfos: GlobalModuleInfo,\n): (() => void) => {\n nativeGlobal.__FEDERATION__.moduleInfo = {\n ...nativeGlobal.__FEDERATION__.moduleInfo,\n ...moduleInfos,\n };\n return () => {\n const keys = Object.keys(moduleInfos);\n for (const key of keys) {\n delete nativeGlobal.__FEDERATION__.moduleInfo[key];\n }\n };\n};\n\nexport const getRemoteEntryExports = (\n name: string,\n globalName: string | undefined,\n): {\n remoteEntryKey: string;\n entryExports: RemoteEntryExports | undefined;\n} => {\n const remoteEntryKey = globalName || `__FEDERATION_${name}:custom__`;\n const entryExports = (CurrentGlobal as any)[remoteEntryKey];\n return {\n remoteEntryKey,\n entryExports,\n };\n};\n\n// This function is used to register global plugins.\n// It iterates over the provided plugins and checks if they are already registered.\n// If a plugin is not registered, it is added to the global plugins.\n// If a plugin is already registered, a warning message is logged.\nexport const registerGlobalPlugins = (\n plugins: Array<ModuleFederationRuntimePlugin>,\n): void => {\n const { __GLOBAL_PLUGIN__ } = nativeGlobal.__FEDERATION__;\n\n plugins.forEach((plugin) => {\n if (__GLOBAL_PLUGIN__.findIndex((p) => p.name === plugin.name) === -1) {\n __GLOBAL_PLUGIN__.push(plugin);\n } else {\n warn(`The plugin ${plugin.name} has been registered.`);\n }\n });\n};\n\nexport const getGlobalHostPlugins = (): Array<ModuleFederationRuntimePlugin> =>\n nativeGlobal.__FEDERATION__.__GLOBAL_PLUGIN__;\n\nexport const getPreloaded = (id: string) =>\n CurrentGlobal.__FEDERATION__.__PRELOADED_MAP__.get(id);\n\nexport const setPreloaded = (id: string) =>\n CurrentGlobal.__FEDERATION__.__PRELOADED_MAP__.set(id, true);\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"global.cjs","names":["getFMId"],"sources":["../src/global.ts"],"sourcesContent":["import { ModuleFederation } from './core';\nimport {\n RemoteEntryExports,\n GlobalShareScopeMap,\n Remote,\n Optional,\n} from './type';\nimport { getFMId } from './utils/tool';\nimport {\n GlobalModuleInfo,\n ModuleInfo,\n isDebugMode,\n} from '@module-federation/sdk';\nimport { warn, error } from './utils/logger';\nimport { ModuleFederationRuntimePlugin } from './type/plugin';\n\nexport interface Federation {\n __GLOBAL_PLUGIN__: Array<ModuleFederationRuntimePlugin>;\n __DEBUG_CONSTRUCTOR_VERSION__?: string;\n moduleInfo: GlobalModuleInfo;\n __DEBUG_CONSTRUCTOR__?: typeof ModuleFederation;\n __INSTANCES__: Array<ModuleFederation>;\n __SHARE__: GlobalShareScopeMap;\n __MANIFEST_LOADING__: Record<string, Promise<ModuleInfo>>;\n __PRELOADED_MAP__: Map<string, boolean>;\n __PRELOADED_ASSETS__: Set<string>;\n}\n\nconst MAX_PRELOADED_ASSETS = 2000;\nexport const CurrentGlobal =\n typeof globalThis === 'object' ? globalThis : window;\nexport const nativeGlobal: typeof global = (() => {\n try {\n // get real window (incase of sandbox)\n return document.defaultView;\n } catch {\n // node env\n return CurrentGlobal;\n }\n})() as typeof global;\n\nexport const Global = nativeGlobal;\n\ndeclare global {\n // eslint-disable-next-line no-var\n var __FEDERATION__: Federation,\n __VMOK__: Federation,\n // eslint-disable-next-line no-var\n __GLOBAL_LOADING_REMOTE_ENTRY__: Record<\n string,\n undefined | Promise<RemoteEntryExports | void>\n >;\n}\n\nfunction definePropertyGlobalVal(\n target: typeof CurrentGlobal,\n key: string,\n val: any,\n) {\n Object.defineProperty(target, key, {\n value: val,\n configurable: false,\n writable: true,\n });\n}\n\nfunction includeOwnProperty(target: typeof CurrentGlobal, key: string) {\n return Object.hasOwnProperty.call(target, key);\n}\n\n// This section is to prevent encapsulation by certain microfrontend frameworks. Due to reuse policies, sandbox escapes.\n// The sandbox in the microfrontend does not replicate the value of 'configurable'.\n// If there is no loading content on the global object, this section defines the loading object.\nif (!includeOwnProperty(CurrentGlobal, '__GLOBAL_LOADING_REMOTE_ENTRY__')) {\n definePropertyGlobalVal(CurrentGlobal, '__GLOBAL_LOADING_REMOTE_ENTRY__', {});\n}\n\nexport const globalLoading = CurrentGlobal.__GLOBAL_LOADING_REMOTE_ENTRY__;\n\nfunction setGlobalDefaultVal(target: typeof CurrentGlobal) {\n if (\n includeOwnProperty(target, '__VMOK__') &&\n !includeOwnProperty(target, '__FEDERATION__')\n ) {\n definePropertyGlobalVal(target, '__FEDERATION__', target.__VMOK__);\n }\n\n if (!includeOwnProperty(target, '__FEDERATION__')) {\n definePropertyGlobalVal(target, '__FEDERATION__', {\n __GLOBAL_PLUGIN__: [],\n __INSTANCES__: [],\n moduleInfo: {},\n __SHARE__: {},\n __MANIFEST_LOADING__: {},\n __PRELOADED_MAP__: new Map(),\n __PRELOADED_ASSETS__: new Set(),\n });\n\n definePropertyGlobalVal(target, '__VMOK__', target.__FEDERATION__);\n }\n\n target.__FEDERATION__.__GLOBAL_PLUGIN__ ??= [];\n target.__FEDERATION__.__INSTANCES__ ??= [];\n target.__FEDERATION__.moduleInfo ??= {};\n target.__FEDERATION__.__SHARE__ ??= {};\n target.__FEDERATION__.__MANIFEST_LOADING__ ??= {};\n target.__FEDERATION__.__PRELOADED_MAP__ ??= new Map();\n target.__FEDERATION__.__PRELOADED_ASSETS__ ??= new Set();\n}\n\nsetGlobalDefaultVal(CurrentGlobal);\nsetGlobalDefaultVal(nativeGlobal);\n\nexport function resetFederationGlobalInfo(): void {\n CurrentGlobal.__FEDERATION__.__GLOBAL_PLUGIN__ = [];\n CurrentGlobal.__FEDERATION__.__INSTANCES__ = [];\n CurrentGlobal.__FEDERATION__.moduleInfo = {};\n CurrentGlobal.__FEDERATION__.__SHARE__ = {};\n CurrentGlobal.__FEDERATION__.__MANIFEST_LOADING__ = {};\n CurrentGlobal.__FEDERATION__.__PRELOADED_ASSETS__.clear();\n\n Object.keys(globalLoading).forEach((key) => {\n delete globalLoading[key];\n });\n}\n\nexport function setGlobalFederationInstance(\n FederationInstance: ModuleFederation,\n): void {\n CurrentGlobal.__FEDERATION__.__INSTANCES__.push(FederationInstance);\n}\n\nexport function getGlobalFederationConstructor():\n | typeof ModuleFederation\n | undefined {\n return CurrentGlobal.__FEDERATION__.__DEBUG_CONSTRUCTOR__;\n}\n\nexport function setGlobalFederationConstructor(\n FederationConstructor: typeof ModuleFederation | undefined,\n isDebug = isDebugMode(),\n): void {\n if (isDebug) {\n CurrentGlobal.__FEDERATION__.__DEBUG_CONSTRUCTOR__ = FederationConstructor;\n CurrentGlobal.__FEDERATION__.__DEBUG_CONSTRUCTOR_VERSION__ = __VERSION__;\n }\n}\n\nexport function getInfoWithoutType<T extends object>(\n target: T,\n key: keyof T,\n): { value: T[keyof T] | undefined; key: string } {\n if (typeof key === 'string') {\n const keyRes = target[key];\n if (keyRes) {\n return {\n value: target[key],\n key: key as string,\n };\n } else {\n const targetKeys = Object.keys(target);\n for (const targetKey of targetKeys) {\n const [targetTypeOrName, _] = targetKey.split(':');\n const nKey = `${targetTypeOrName}:${key}` as unknown as keyof T;\n const typeWithKeyRes = target[nKey];\n if (typeWithKeyRes) {\n return {\n value: typeWithKeyRes,\n key: nKey as string,\n };\n }\n }\n return {\n value: undefined,\n key: key as string,\n };\n }\n } else {\n error(\n `getInfoWithoutType: \"key\" must be a string, got ${typeof key} (${JSON.stringify(key)}).`,\n );\n }\n}\n\nexport const getGlobalSnapshot = (): GlobalModuleInfo =>\n nativeGlobal.__FEDERATION__.moduleInfo;\n\nexport const getTargetSnapshotInfoByModuleInfo = (\n moduleInfo: Optional<Remote, 'alias'>,\n snapshot: GlobalModuleInfo,\n): GlobalModuleInfo[string] | undefined => {\n // Check if the remote is included in the hostSnapshot\n const moduleKey = getFMId(moduleInfo);\n const getModuleInfo = getInfoWithoutType(snapshot, moduleKey).value;\n\n // The remoteSnapshot might not include a version\n if (\n getModuleInfo &&\n !getModuleInfo.version &&\n 'version' in moduleInfo &&\n moduleInfo['version']\n ) {\n getModuleInfo.version = moduleInfo['version'];\n }\n\n if (getModuleInfo) {\n return getModuleInfo;\n }\n\n // If the remote is not included in the hostSnapshot, deploy a micro app snapshot\n if ('version' in moduleInfo && moduleInfo['version']) {\n const { version, ...resModuleInfo } = moduleInfo;\n const moduleKeyWithoutVersion = getFMId(resModuleInfo);\n const getModuleInfoWithoutVersion = getInfoWithoutType(\n nativeGlobal.__FEDERATION__.moduleInfo,\n moduleKeyWithoutVersion,\n ).value;\n\n if (getModuleInfoWithoutVersion?.version === version) {\n return getModuleInfoWithoutVersion;\n }\n }\n\n return;\n};\n\nexport const getGlobalSnapshotInfoByModuleInfo = (\n moduleInfo: Optional<Remote, 'alias'>,\n): GlobalModuleInfo[string] | undefined =>\n getTargetSnapshotInfoByModuleInfo(\n moduleInfo,\n nativeGlobal.__FEDERATION__.moduleInfo,\n );\n\nexport const setGlobalSnapshotInfoByModuleInfo = (\n remoteInfo: Remote,\n moduleDetailInfo: GlobalModuleInfo[string],\n): GlobalModuleInfo => {\n const moduleKey = getFMId(remoteInfo);\n nativeGlobal.__FEDERATION__.moduleInfo[moduleKey] = moduleDetailInfo;\n return nativeGlobal.__FEDERATION__.moduleInfo;\n};\n\nexport const addGlobalSnapshot = (\n moduleInfos: GlobalModuleInfo,\n): (() => void) => {\n nativeGlobal.__FEDERATION__.moduleInfo = {\n ...nativeGlobal.__FEDERATION__.moduleInfo,\n ...moduleInfos,\n };\n return () => {\n const keys = Object.keys(moduleInfos);\n for (const key of keys) {\n delete nativeGlobal.__FEDERATION__.moduleInfo[key];\n }\n };\n};\n\nexport const getRemoteEntryExports = (\n name: string,\n globalName: string | undefined,\n): {\n remoteEntryKey: string;\n entryExports: RemoteEntryExports | undefined;\n} => {\n const remoteEntryKey = globalName || `__FEDERATION_${name}:custom__`;\n const entryExports = (CurrentGlobal as any)[remoteEntryKey];\n return {\n remoteEntryKey,\n entryExports,\n };\n};\n\n// This function is used to register global plugins.\n// It iterates over the provided plugins and checks if they are already registered.\n// If a plugin is not registered, it is added to the global plugins.\n// If a plugin is already registered, a warning message is logged.\nexport const registerGlobalPlugins = (\n plugins: Array<ModuleFederationRuntimePlugin>,\n): void => {\n const { __GLOBAL_PLUGIN__ } = nativeGlobal.__FEDERATION__;\n\n plugins.forEach((plugin) => {\n if (__GLOBAL_PLUGIN__.findIndex((p) => p.name === plugin.name) === -1) {\n __GLOBAL_PLUGIN__.push(plugin);\n } else {\n warn(`The plugin ${plugin.name} has been registered.`);\n }\n });\n};\n\nexport const getGlobalHostPlugins = (): Array<ModuleFederationRuntimePlugin> =>\n nativeGlobal.__FEDERATION__.__GLOBAL_PLUGIN__;\n\nexport const getPreloaded = (id: string) =>\n CurrentGlobal.__FEDERATION__.__PRELOADED_MAP__.get(id);\n\nexport const setPreloaded = (id: string) =>\n CurrentGlobal.__FEDERATION__.__PRELOADED_MAP__.set(id, true);\n\nexport const getPreloadedAsset = (url: string) =>\n CurrentGlobal.__FEDERATION__.__PRELOADED_ASSETS__.has(url);\n\nexport const setPreloadedAsset = (url: string): void => {\n const preloadedAssets = CurrentGlobal.__FEDERATION__.__PRELOADED_ASSETS__;\n preloadedAssets.add(url);\n\n if (preloadedAssets.size > MAX_PRELOADED_ASSETS) {\n const oldestUrl = preloadedAssets.values().next().value;\n if (oldestUrl !== undefined) {\n preloadedAssets.delete(oldestUrl);\n }\n }\n};\n"],"mappings":"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"}
|
package/dist/global.d.ts
CHANGED
|
@@ -13,6 +13,7 @@ interface Federation {
|
|
|
13
13
|
__SHARE__: GlobalShareScopeMap;
|
|
14
14
|
__MANIFEST_LOADING__: Record<string, Promise<ModuleInfo>>;
|
|
15
15
|
__PRELOADED_MAP__: Map<string, boolean>;
|
|
16
|
+
__PRELOADED_ASSETS__: Set<string>;
|
|
16
17
|
}
|
|
17
18
|
declare const CurrentGlobal: typeof globalThis;
|
|
18
19
|
declare const Global: typeof globalThis;
|
package/dist/global.js
CHANGED
|
@@ -3,6 +3,7 @@ import { getFMId } from "./utils/tool.js";
|
|
|
3
3
|
import { isDebugMode } from "@module-federation/sdk";
|
|
4
4
|
|
|
5
5
|
//#region src/global.ts
|
|
6
|
+
const MAX_PRELOADED_ASSETS = 2e3;
|
|
6
7
|
const CurrentGlobal = typeof globalThis === "object" ? globalThis : window;
|
|
7
8
|
const nativeGlobal = (() => {
|
|
8
9
|
try {
|
|
@@ -33,7 +34,8 @@ function setGlobalDefaultVal(target) {
|
|
|
33
34
|
moduleInfo: {},
|
|
34
35
|
__SHARE__: {},
|
|
35
36
|
__MANIFEST_LOADING__: {},
|
|
36
|
-
__PRELOADED_MAP__: /* @__PURE__ */ new Map()
|
|
37
|
+
__PRELOADED_MAP__: /* @__PURE__ */ new Map(),
|
|
38
|
+
__PRELOADED_ASSETS__: /* @__PURE__ */ new Set()
|
|
37
39
|
});
|
|
38
40
|
definePropertyGlobalVal(target, "__VMOK__", target.__FEDERATION__);
|
|
39
41
|
}
|
|
@@ -43,6 +45,7 @@ function setGlobalDefaultVal(target) {
|
|
|
43
45
|
target.__FEDERATION__.__SHARE__ ??= {};
|
|
44
46
|
target.__FEDERATION__.__MANIFEST_LOADING__ ??= {};
|
|
45
47
|
target.__FEDERATION__.__PRELOADED_MAP__ ??= /* @__PURE__ */ new Map();
|
|
48
|
+
target.__FEDERATION__.__PRELOADED_ASSETS__ ??= /* @__PURE__ */ new Set();
|
|
46
49
|
}
|
|
47
50
|
setGlobalDefaultVal(CurrentGlobal);
|
|
48
51
|
setGlobalDefaultVal(nativeGlobal);
|
|
@@ -52,6 +55,7 @@ function resetFederationGlobalInfo() {
|
|
|
52
55
|
CurrentGlobal.__FEDERATION__.moduleInfo = {};
|
|
53
56
|
CurrentGlobal.__FEDERATION__.__SHARE__ = {};
|
|
54
57
|
CurrentGlobal.__FEDERATION__.__MANIFEST_LOADING__ = {};
|
|
58
|
+
CurrentGlobal.__FEDERATION__.__PRELOADED_ASSETS__.clear();
|
|
55
59
|
Object.keys(globalLoading).forEach((key) => {
|
|
56
60
|
delete globalLoading[key];
|
|
57
61
|
});
|
|
@@ -65,7 +69,7 @@ function getGlobalFederationConstructor() {
|
|
|
65
69
|
function setGlobalFederationConstructor(FederationConstructor, isDebug = isDebugMode()) {
|
|
66
70
|
if (isDebug) {
|
|
67
71
|
CurrentGlobal.__FEDERATION__.__DEBUG_CONSTRUCTOR__ = FederationConstructor;
|
|
68
|
-
CurrentGlobal.__FEDERATION__.__DEBUG_CONSTRUCTOR_VERSION__ = "0.0.0-fix-
|
|
72
|
+
CurrentGlobal.__FEDERATION__.__DEBUG_CONSTRUCTOR_VERSION__ = "0.0.0-fix-runtime-core-set-shared-lib-20260819111025";
|
|
69
73
|
}
|
|
70
74
|
}
|
|
71
75
|
function getInfoWithoutType(target, key) {
|
|
@@ -136,7 +140,16 @@ const registerGlobalPlugins = (plugins) => {
|
|
|
136
140
|
const getGlobalHostPlugins = () => nativeGlobal.__FEDERATION__.__GLOBAL_PLUGIN__;
|
|
137
141
|
const getPreloaded = (id) => CurrentGlobal.__FEDERATION__.__PRELOADED_MAP__.get(id);
|
|
138
142
|
const setPreloaded = (id) => CurrentGlobal.__FEDERATION__.__PRELOADED_MAP__.set(id, true);
|
|
143
|
+
const getPreloadedAsset = (url) => CurrentGlobal.__FEDERATION__.__PRELOADED_ASSETS__.has(url);
|
|
144
|
+
const setPreloadedAsset = (url) => {
|
|
145
|
+
const preloadedAssets = CurrentGlobal.__FEDERATION__.__PRELOADED_ASSETS__;
|
|
146
|
+
preloadedAssets.add(url);
|
|
147
|
+
if (preloadedAssets.size > MAX_PRELOADED_ASSETS) {
|
|
148
|
+
const oldestUrl = preloadedAssets.values().next().value;
|
|
149
|
+
if (oldestUrl !== void 0) preloadedAssets.delete(oldestUrl);
|
|
150
|
+
}
|
|
151
|
+
};
|
|
139
152
|
|
|
140
153
|
//#endregion
|
|
141
|
-
export { CurrentGlobal, Global, addGlobalSnapshot, getGlobalFederationConstructor, getGlobalHostPlugins, getGlobalSnapshot, getGlobalSnapshotInfoByModuleInfo, getInfoWithoutType, getPreloaded, getRemoteEntryExports, getTargetSnapshotInfoByModuleInfo, globalLoading, nativeGlobal, registerGlobalPlugins, resetFederationGlobalInfo, setGlobalFederationConstructor, setGlobalFederationInstance, setGlobalSnapshotInfoByModuleInfo, setPreloaded };
|
|
154
|
+
export { CurrentGlobal, Global, addGlobalSnapshot, getGlobalFederationConstructor, getGlobalHostPlugins, getGlobalSnapshot, getGlobalSnapshotInfoByModuleInfo, getInfoWithoutType, getPreloaded, getPreloadedAsset, getRemoteEntryExports, getTargetSnapshotInfoByModuleInfo, globalLoading, nativeGlobal, registerGlobalPlugins, resetFederationGlobalInfo, setGlobalFederationConstructor, setGlobalFederationInstance, setGlobalSnapshotInfoByModuleInfo, setPreloaded, setPreloadedAsset };
|
|
142
155
|
//# sourceMappingURL=global.js.map
|