@module-federation/runtime-core 0.0.0-chore-bump-node-22-20260710161714
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/LICENSE +21 -0
- package/README.md +13 -0
- package/dist/LICENSE +21 -0
- package/dist/_virtual/_rolldown/runtime.cjs +19 -0
- package/dist/_virtual/_rolldown/runtime.js +18 -0
- package/dist/constant.cjs +9 -0
- package/dist/constant.cjs.map +1 -0
- package/dist/constant.js +7 -0
- package/dist/constant.js.map +1 -0
- package/dist/core.cjs +161 -0
- package/dist/core.cjs.map +1 -0
- package/dist/core.d.ts +197 -0
- package/dist/core.js +161 -0
- package/dist/core.js.map +1 -0
- package/dist/global.cjs +160 -0
- package/dist/global.cjs.map +1 -0
- package/dist/global.d.ts +45 -0
- package/dist/global.js +142 -0
- package/dist/global.js.map +1 -0
- package/dist/helpers.cjs +44 -0
- package/dist/helpers.cjs.map +1 -0
- package/dist/helpers.d.ts +30 -0
- package/dist/helpers.js +44 -0
- package/dist/helpers.js.map +1 -0
- package/dist/index.cjs +60 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.ts +29 -0
- package/dist/index.js +20 -0
- package/dist/index.js.map +1 -0
- package/dist/module/index.cjs +266 -0
- package/dist/module/index.cjs.map +1 -0
- package/dist/module/index.d.ts +32 -0
- package/dist/module/index.js +266 -0
- package/dist/module/index.js.map +1 -0
- package/dist/plugins/generate-preload-assets.cjs +182 -0
- package/dist/plugins/generate-preload-assets.cjs.map +1 -0
- package/dist/plugins/generate-preload-assets.js +182 -0
- package/dist/plugins/generate-preload-assets.js.map +1 -0
- package/dist/plugins/snapshot/SnapshotHandler.cjs +215 -0
- package/dist/plugins/snapshot/SnapshotHandler.cjs.map +1 -0
- package/dist/plugins/snapshot/SnapshotHandler.d.ts +69 -0
- package/dist/plugins/snapshot/SnapshotHandler.js +214 -0
- package/dist/plugins/snapshot/SnapshotHandler.js.map +1 -0
- package/dist/plugins/snapshot/index.cjs +67 -0
- package/dist/plugins/snapshot/index.cjs.map +1 -0
- package/dist/plugins/snapshot/index.js +66 -0
- package/dist/plugins/snapshot/index.js.map +1 -0
- package/dist/remote/index.cjs +445 -0
- package/dist/remote/index.cjs.map +1 -0
- package/dist/remote/index.d.ts +145 -0
- package/dist/remote/index.js +445 -0
- package/dist/remote/index.js.map +1 -0
- package/dist/shared/index.cjs +418 -0
- package/dist/shared/index.cjs.map +1 -0
- package/dist/shared/index.d.ts +104 -0
- package/dist/shared/index.js +418 -0
- package/dist/shared/index.js.map +1 -0
- package/dist/type/config.d.ts +130 -0
- package/dist/type/index.cjs +13 -0
- package/dist/type/index.cjs.map +1 -0
- package/dist/type/index.d.ts +11 -0
- package/dist/type/index.js +8 -0
- package/dist/type/index.js.map +1 -0
- package/dist/type/plugin.d.ts +27 -0
- package/dist/type/preload.d.ts +54 -0
- package/dist/types.cjs +0 -0
- package/dist/types.d.ts +4 -0
- package/dist/types.js +1 -0
- package/dist/utils/context.cjs +45 -0
- package/dist/utils/context.cjs.map +1 -0
- package/dist/utils/context.d.ts +1 -0
- package/dist/utils/context.js +44 -0
- package/dist/utils/context.js.map +1 -0
- package/dist/utils/env.cjs +10 -0
- package/dist/utils/env.cjs.map +1 -0
- package/dist/utils/env.d.ts +1 -0
- package/dist/utils/env.js +10 -0
- package/dist/utils/env.js.map +1 -0
- package/dist/utils/hooks/asyncHook.cjs +26 -0
- package/dist/utils/hooks/asyncHook.cjs.map +1 -0
- package/dist/utils/hooks/asyncHook.d.ts +10 -0
- package/dist/utils/hooks/asyncHook.js +26 -0
- package/dist/utils/hooks/asyncHook.js.map +1 -0
- package/dist/utils/hooks/asyncWaterfallHooks.cjs +44 -0
- package/dist/utils/hooks/asyncWaterfallHooks.cjs.map +1 -0
- package/dist/utils/hooks/asyncWaterfallHooks.d.ts +12 -0
- package/dist/utils/hooks/asyncWaterfallHooks.js +44 -0
- package/dist/utils/hooks/asyncWaterfallHooks.js.map +1 -0
- package/dist/utils/hooks/index.cjs +5 -0
- package/dist/utils/hooks/index.d.ts +5 -0
- package/dist/utils/hooks/index.js +7 -0
- package/dist/utils/hooks/pluginSystem.cjs +37 -0
- package/dist/utils/hooks/pluginSystem.cjs.map +1 -0
- package/dist/utils/hooks/pluginSystem.d.ts +19 -0
- package/dist/utils/hooks/pluginSystem.js +37 -0
- package/dist/utils/hooks/pluginSystem.js.map +1 -0
- package/dist/utils/hooks/syncHook.cjs +37 -0
- package/dist/utils/hooks/syncHook.cjs.map +1 -0
- package/dist/utils/hooks/syncHook.d.ts +16 -0
- package/dist/utils/hooks/syncHook.js +36 -0
- package/dist/utils/hooks/syncHook.js.map +1 -0
- package/dist/utils/hooks/syncWaterfallHook.cjs +40 -0
- package/dist/utils/hooks/syncWaterfallHook.cjs.map +1 -0
- package/dist/utils/hooks/syncWaterfallHook.d.ts +11 -0
- package/dist/utils/hooks/syncWaterfallHook.js +39 -0
- package/dist/utils/hooks/syncWaterfallHook.js.map +1 -0
- package/dist/utils/index.cjs +8 -0
- package/dist/utils/index.d.ts +4 -0
- package/dist/utils/index.js +9 -0
- package/dist/utils/load.cjs +214 -0
- package/dist/utils/load.cjs.map +1 -0
- package/dist/utils/load.d.ts +16 -0
- package/dist/utils/load.js +212 -0
- package/dist/utils/load.js.map +1 -0
- package/dist/utils/logger.cjs +34 -0
- package/dist/utils/logger.cjs.map +1 -0
- package/dist/utils/logger.d.ts +10 -0
- package/dist/utils/logger.js +31 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/manifest.cjs +56 -0
- package/dist/utils/manifest.cjs.map +1 -0
- package/dist/utils/manifest.d.ts +10 -0
- package/dist/utils/manifest.js +53 -0
- package/dist/utils/manifest.js.map +1 -0
- package/dist/utils/plugin.cjs +27 -0
- package/dist/utils/plugin.cjs.map +1 -0
- package/dist/utils/plugin.d.ts +1 -0
- package/dist/utils/plugin.js +27 -0
- package/dist/utils/plugin.js.map +1 -0
- package/dist/utils/preload.cjs +212 -0
- package/dist/utils/preload.cjs.map +1 -0
- package/dist/utils/preload.d.ts +8 -0
- package/dist/utils/preload.js +209 -0
- package/dist/utils/preload.js.map +1 -0
- package/dist/utils/semver/compare.cjs +48 -0
- package/dist/utils/semver/compare.cjs.map +1 -0
- package/dist/utils/semver/compare.js +47 -0
- package/dist/utils/semver/compare.js.map +1 -0
- package/dist/utils/semver/constants.cjs +41 -0
- package/dist/utils/semver/constants.cjs.map +1 -0
- package/dist/utils/semver/constants.js +31 -0
- package/dist/utils/semver/constants.js.map +1 -0
- package/dist/utils/semver/index.cjs +68 -0
- package/dist/utils/semver/index.cjs.map +1 -0
- package/dist/utils/semver/index.d.ts +5 -0
- package/dist/utils/semver/index.js +68 -0
- package/dist/utils/semver/index.js.map +1 -0
- package/dist/utils/semver/parser.cjs +104 -0
- package/dist/utils/semver/parser.cjs.map +1 -0
- package/dist/utils/semver/parser.js +96 -0
- package/dist/utils/semver/parser.js.map +1 -0
- package/dist/utils/semver/utils.cjs +28 -0
- package/dist/utils/semver/utils.cjs.map +1 -0
- package/dist/utils/semver/utils.js +24 -0
- package/dist/utils/semver/utils.js.map +1 -0
- package/dist/utils/share.cjs +284 -0
- package/dist/utils/share.cjs.map +1 -0
- package/dist/utils/share.d.ts +23 -0
- package/dist/utils/share.js +278 -0
- package/dist/utils/share.js.map +1 -0
- package/dist/utils/tool.cjs +82 -0
- package/dist/utils/tool.cjs.map +1 -0
- package/dist/utils/tool.d.ts +8 -0
- package/dist/utils/tool.js +71 -0
- package/dist/utils/tool.js.map +1 -0
- package/package.json +65 -0
|
@@ -0,0 +1,418 @@
|
|
|
1
|
+
import { assert, error, warn } from "../utils/logger.js";
|
|
2
|
+
import { DEFAULT_SCOPE } from "../constant.js";
|
|
3
|
+
import { addUseIn, directShare, formatShareConfigs, getGlobalShareScope, getRegisteredShare, getTargetSharedOptions, shouldUseTreeShaking } from "../utils/share.js";
|
|
4
|
+
import { optionsToMFContext } from "../utils/context.js";
|
|
5
|
+
import "../utils/index.js";
|
|
6
|
+
import { SyncHook } from "../utils/hooks/syncHook.js";
|
|
7
|
+
import { AsyncHook } from "../utils/hooks/asyncHook.js";
|
|
8
|
+
import { SyncWaterfallHook } from "../utils/hooks/syncWaterfallHook.js";
|
|
9
|
+
import { AsyncWaterfallHook } from "../utils/hooks/asyncWaterfallHooks.js";
|
|
10
|
+
import { PluginSystem } from "../utils/hooks/pluginSystem.js";
|
|
11
|
+
import "../utils/hooks/index.js";
|
|
12
|
+
import { RUNTIME_005, RUNTIME_006, runtimeDescMap } from "@module-federation/error-codes";
|
|
13
|
+
|
|
14
|
+
//#region src/shared/index.ts
|
|
15
|
+
var SharedHandler = class {
|
|
16
|
+
constructor(host) {
|
|
17
|
+
this.hooks = new PluginSystem({
|
|
18
|
+
beforeRegisterShare: new SyncWaterfallHook("beforeRegisterShare"),
|
|
19
|
+
afterResolve: new AsyncWaterfallHook("afterResolve"),
|
|
20
|
+
beforeLoadShare: new AsyncWaterfallHook("beforeLoadShare"),
|
|
21
|
+
loadShare: new AsyncHook(),
|
|
22
|
+
afterLoadShare: new SyncHook("afterLoadShare"),
|
|
23
|
+
errorLoadShare: new SyncHook("errorLoadShare"),
|
|
24
|
+
resolveShare: new SyncWaterfallHook("resolveShare"),
|
|
25
|
+
initContainerShareScopeMap: new SyncWaterfallHook("initContainerShareScopeMap")
|
|
26
|
+
});
|
|
27
|
+
this.host = host;
|
|
28
|
+
this.shareScopeMap = {};
|
|
29
|
+
this.initTokens = {};
|
|
30
|
+
this._setGlobalShareScopeMap(host.options);
|
|
31
|
+
}
|
|
32
|
+
emitAfterLoadShare({ lifecycle, pkgName, shareInfo, selectedShared }) {
|
|
33
|
+
try {
|
|
34
|
+
this.hooks.lifecycle.afterLoadShare.emit({
|
|
35
|
+
pkgName,
|
|
36
|
+
shareInfo,
|
|
37
|
+
selectedShared,
|
|
38
|
+
shared: this.host.options.shared,
|
|
39
|
+
shareScopeMap: this.shareScopeMap,
|
|
40
|
+
lifecycle,
|
|
41
|
+
origin: this.host
|
|
42
|
+
});
|
|
43
|
+
} catch (error) {
|
|
44
|
+
warn(error);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
emitErrorLoadShare({ lifecycle, pkgName, shareInfo, error, recovered }) {
|
|
48
|
+
try {
|
|
49
|
+
this.hooks.lifecycle.errorLoadShare.emit({
|
|
50
|
+
pkgName,
|
|
51
|
+
shareInfo,
|
|
52
|
+
shared: this.host.options.shared,
|
|
53
|
+
shareScopeMap: this.shareScopeMap,
|
|
54
|
+
lifecycle,
|
|
55
|
+
origin: this.host,
|
|
56
|
+
error,
|
|
57
|
+
recovered
|
|
58
|
+
});
|
|
59
|
+
} catch (hookError) {
|
|
60
|
+
warn(hookError);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
registerShared(globalOptions, userOptions) {
|
|
64
|
+
const { newShareInfos, allShareInfos } = formatShareConfigs(globalOptions, userOptions);
|
|
65
|
+
Object.keys(newShareInfos).forEach((sharedKey) => {
|
|
66
|
+
newShareInfos[sharedKey].forEach((sharedVal) => {
|
|
67
|
+
sharedVal.scope.forEach((sc) => {
|
|
68
|
+
this.hooks.lifecycle.beforeRegisterShare.emit({
|
|
69
|
+
origin: this.host,
|
|
70
|
+
pkgName: sharedKey,
|
|
71
|
+
shared: sharedVal
|
|
72
|
+
});
|
|
73
|
+
if (!this.shareScopeMap[sc]?.[sharedKey]) this.setShared({
|
|
74
|
+
pkgName: sharedKey,
|
|
75
|
+
lib: sharedVal.lib,
|
|
76
|
+
get: sharedVal.get,
|
|
77
|
+
loaded: sharedVal.loaded || Boolean(sharedVal.lib),
|
|
78
|
+
shared: sharedVal,
|
|
79
|
+
from: userOptions.name
|
|
80
|
+
});
|
|
81
|
+
});
|
|
82
|
+
});
|
|
83
|
+
});
|
|
84
|
+
return {
|
|
85
|
+
newShareInfos,
|
|
86
|
+
allShareInfos
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
async loadShare(pkgName, extraOptions) {
|
|
90
|
+
const { host } = this;
|
|
91
|
+
const shareOptions = getTargetSharedOptions({
|
|
92
|
+
pkgName,
|
|
93
|
+
extraOptions,
|
|
94
|
+
shareInfos: host.options.shared
|
|
95
|
+
});
|
|
96
|
+
let shareOptionsRes = shareOptions;
|
|
97
|
+
try {
|
|
98
|
+
if (shareOptions?.scope) await Promise.all(shareOptions.scope.map(async (shareScope) => {
|
|
99
|
+
await Promise.all(this.initializeSharing(shareScope, { strategy: shareOptions.strategy }));
|
|
100
|
+
}));
|
|
101
|
+
shareOptionsRes = (await this.hooks.lifecycle.beforeLoadShare.emit({
|
|
102
|
+
pkgName,
|
|
103
|
+
shareInfo: shareOptions,
|
|
104
|
+
shared: host.options.shared,
|
|
105
|
+
origin: host
|
|
106
|
+
})).shareInfo;
|
|
107
|
+
assert(shareOptionsRes, `Cannot find shared "${pkgName}" in host "${host.options.name}". Ensure the shared config for "${pkgName}" is declared in the federation plugin options and the host has been initialized before loading shares.`);
|
|
108
|
+
const resolvedShareOptions = shareOptionsRes;
|
|
109
|
+
const { shared: registeredShared, useTreesShaking } = getRegisteredShare(this.shareScopeMap, pkgName, shareOptionsRes, this.hooks.lifecycle.resolveShare) || {};
|
|
110
|
+
if (registeredShared) {
|
|
111
|
+
const targetShared = directShare(registeredShared, useTreesShaking);
|
|
112
|
+
if (targetShared.lib) {
|
|
113
|
+
addUseIn(targetShared, host.options.name);
|
|
114
|
+
this.emitAfterLoadShare({
|
|
115
|
+
lifecycle: "loadShare",
|
|
116
|
+
pkgName,
|
|
117
|
+
shareInfo: resolvedShareOptions,
|
|
118
|
+
selectedShared: registeredShared
|
|
119
|
+
});
|
|
120
|
+
return targetShared.lib;
|
|
121
|
+
} else if (targetShared.loading && !targetShared.loaded) {
|
|
122
|
+
const factory = await targetShared.loading;
|
|
123
|
+
targetShared.loaded = true;
|
|
124
|
+
if (!targetShared.lib) targetShared.lib = factory;
|
|
125
|
+
addUseIn(targetShared, host.options.name);
|
|
126
|
+
this.emitAfterLoadShare({
|
|
127
|
+
lifecycle: "loadShare",
|
|
128
|
+
pkgName,
|
|
129
|
+
shareInfo: resolvedShareOptions,
|
|
130
|
+
selectedShared: registeredShared
|
|
131
|
+
});
|
|
132
|
+
return factory;
|
|
133
|
+
} else {
|
|
134
|
+
const asyncLoadProcess = async () => {
|
|
135
|
+
const factory = await targetShared.get();
|
|
136
|
+
addUseIn(targetShared, host.options.name);
|
|
137
|
+
targetShared.loaded = true;
|
|
138
|
+
targetShared.lib = factory;
|
|
139
|
+
return factory;
|
|
140
|
+
};
|
|
141
|
+
const loading = asyncLoadProcess();
|
|
142
|
+
this.setShared({
|
|
143
|
+
pkgName,
|
|
144
|
+
loaded: false,
|
|
145
|
+
shared: registeredShared,
|
|
146
|
+
from: host.options.name,
|
|
147
|
+
lib: null,
|
|
148
|
+
loading,
|
|
149
|
+
treeShaking: useTreesShaking ? targetShared : void 0
|
|
150
|
+
});
|
|
151
|
+
const factory = await loading;
|
|
152
|
+
this.emitAfterLoadShare({
|
|
153
|
+
lifecycle: "loadShare",
|
|
154
|
+
pkgName,
|
|
155
|
+
shareInfo: resolvedShareOptions,
|
|
156
|
+
selectedShared: registeredShared
|
|
157
|
+
});
|
|
158
|
+
return factory;
|
|
159
|
+
}
|
|
160
|
+
} else {
|
|
161
|
+
if (extraOptions?.customShareInfo) {
|
|
162
|
+
this.emitErrorLoadShare({
|
|
163
|
+
lifecycle: "loadShare",
|
|
164
|
+
pkgName,
|
|
165
|
+
shareInfo: resolvedShareOptions,
|
|
166
|
+
recovered: true
|
|
167
|
+
});
|
|
168
|
+
return false;
|
|
169
|
+
}
|
|
170
|
+
const _useTreeShaking = shouldUseTreeShaking(resolvedShareOptions.treeShaking);
|
|
171
|
+
const targetShared = directShare(resolvedShareOptions, _useTreeShaking);
|
|
172
|
+
const asyncLoadProcess = async () => {
|
|
173
|
+
const factory = await targetShared.get();
|
|
174
|
+
targetShared.lib = factory;
|
|
175
|
+
targetShared.loaded = true;
|
|
176
|
+
addUseIn(targetShared, host.options.name);
|
|
177
|
+
const { shared: gShared, useTreesShaking: gUseTreeShaking } = getRegisteredShare(this.shareScopeMap, pkgName, resolvedShareOptions, this.hooks.lifecycle.resolveShare) || {};
|
|
178
|
+
if (gShared) {
|
|
179
|
+
const targetGShared = directShare(gShared, gUseTreeShaking);
|
|
180
|
+
targetGShared.lib = factory;
|
|
181
|
+
targetGShared.loaded = true;
|
|
182
|
+
gShared.from = resolvedShareOptions.from;
|
|
183
|
+
}
|
|
184
|
+
return factory;
|
|
185
|
+
};
|
|
186
|
+
const loading = asyncLoadProcess();
|
|
187
|
+
this.setShared({
|
|
188
|
+
pkgName,
|
|
189
|
+
loaded: false,
|
|
190
|
+
shared: resolvedShareOptions,
|
|
191
|
+
from: host.options.name,
|
|
192
|
+
lib: null,
|
|
193
|
+
loading,
|
|
194
|
+
treeShaking: _useTreeShaking ? targetShared : void 0
|
|
195
|
+
});
|
|
196
|
+
const factory = await loading;
|
|
197
|
+
this.emitAfterLoadShare({
|
|
198
|
+
lifecycle: "loadShare",
|
|
199
|
+
pkgName,
|
|
200
|
+
shareInfo: resolvedShareOptions,
|
|
201
|
+
selectedShared: resolvedShareOptions
|
|
202
|
+
});
|
|
203
|
+
return factory;
|
|
204
|
+
}
|
|
205
|
+
} catch (shareError) {
|
|
206
|
+
this.emitErrorLoadShare({
|
|
207
|
+
lifecycle: "loadShare",
|
|
208
|
+
pkgName,
|
|
209
|
+
shareInfo: shareOptionsRes,
|
|
210
|
+
error: shareError
|
|
211
|
+
});
|
|
212
|
+
throw shareError;
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
/**
|
|
216
|
+
* This function initializes the sharing sequence (executed only once per share scope).
|
|
217
|
+
* It accepts one argument, the name of the share scope.
|
|
218
|
+
* If the share scope does not exist, it creates one.
|
|
219
|
+
*/
|
|
220
|
+
initializeSharing(shareScopeName = DEFAULT_SCOPE, extraOptions) {
|
|
221
|
+
const { host } = this;
|
|
222
|
+
const from = extraOptions?.from;
|
|
223
|
+
const strategy = extraOptions?.strategy;
|
|
224
|
+
let initScope = extraOptions?.initScope;
|
|
225
|
+
const promises = [];
|
|
226
|
+
if (from !== "build") {
|
|
227
|
+
const { initTokens } = this;
|
|
228
|
+
if (!initScope) initScope = [];
|
|
229
|
+
let initToken = initTokens[shareScopeName];
|
|
230
|
+
if (!initToken) initToken = initTokens[shareScopeName] = { from: this.host.name };
|
|
231
|
+
if (initScope.indexOf(initToken) >= 0) return promises;
|
|
232
|
+
initScope.push(initToken);
|
|
233
|
+
}
|
|
234
|
+
const shareScope = this.shareScopeMap;
|
|
235
|
+
const hostName = host.options.name;
|
|
236
|
+
if (!shareScope[shareScopeName]) shareScope[shareScopeName] = {};
|
|
237
|
+
const scope = shareScope[shareScopeName];
|
|
238
|
+
const register = (name, shared) => {
|
|
239
|
+
const { version, eager } = shared;
|
|
240
|
+
scope[name] = scope[name] || {};
|
|
241
|
+
const versions = scope[name];
|
|
242
|
+
const activeVersion = versions[version] && directShare(versions[version]);
|
|
243
|
+
const activeVersionEager = Boolean(activeVersion && ("eager" in activeVersion && activeVersion.eager || "shareConfig" in activeVersion && activeVersion.shareConfig?.eager));
|
|
244
|
+
if (!activeVersion || activeVersion.strategy !== "loaded-first" && !activeVersion.loaded && (Boolean(!eager) !== !activeVersionEager ? eager : hostName > versions[version].from)) versions[version] = shared;
|
|
245
|
+
};
|
|
246
|
+
const initRemoteModule = async (key) => {
|
|
247
|
+
const { module } = await host.remoteHandler.getRemoteModuleAndOptions({ id: key });
|
|
248
|
+
let remoteEntryExports = void 0;
|
|
249
|
+
try {
|
|
250
|
+
remoteEntryExports = await module.getEntry();
|
|
251
|
+
} catch (error) {
|
|
252
|
+
remoteEntryExports = await host.remoteHandler.hooks.lifecycle.errorLoadRemote.emit({
|
|
253
|
+
id: key,
|
|
254
|
+
error,
|
|
255
|
+
from: "runtime",
|
|
256
|
+
lifecycle: "beforeLoadShare",
|
|
257
|
+
remote: module.remoteInfo,
|
|
258
|
+
origin: host
|
|
259
|
+
});
|
|
260
|
+
if (!remoteEntryExports) return;
|
|
261
|
+
} finally {
|
|
262
|
+
if (remoteEntryExports?.init && !module.initing) {
|
|
263
|
+
module.remoteEntryExports = remoteEntryExports;
|
|
264
|
+
await module.init(void 0, void 0, initScope);
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
};
|
|
268
|
+
Object.keys(host.options.shared).forEach((shareName) => {
|
|
269
|
+
host.options.shared[shareName].forEach((shared) => {
|
|
270
|
+
if (shared.scope.includes(shareScopeName)) register(shareName, shared);
|
|
271
|
+
});
|
|
272
|
+
});
|
|
273
|
+
if (host.options.shareStrategy === "version-first" || strategy === "version-first") host.options.remotes.forEach((remote) => {
|
|
274
|
+
if (remote.shareScope === shareScopeName) promises.push(initRemoteModule(remote.name));
|
|
275
|
+
});
|
|
276
|
+
return promises;
|
|
277
|
+
}
|
|
278
|
+
loadShareSync(pkgName, extraOptions) {
|
|
279
|
+
const { host } = this;
|
|
280
|
+
const shareOptions = getTargetSharedOptions({
|
|
281
|
+
pkgName,
|
|
282
|
+
extraOptions,
|
|
283
|
+
shareInfos: host.options.shared
|
|
284
|
+
});
|
|
285
|
+
try {
|
|
286
|
+
if (shareOptions?.scope) shareOptions.scope.forEach((shareScope) => {
|
|
287
|
+
this.initializeSharing(shareScope, { strategy: shareOptions.strategy });
|
|
288
|
+
});
|
|
289
|
+
const { shared: registeredShared } = getRegisteredShare(this.shareScopeMap, pkgName, shareOptions, this.hooks.lifecycle.resolveShare) || {};
|
|
290
|
+
if (registeredShared) {
|
|
291
|
+
if (typeof registeredShared.lib === "function") {
|
|
292
|
+
addUseIn(registeredShared, host.options.name);
|
|
293
|
+
if (!registeredShared.loaded) {
|
|
294
|
+
registeredShared.loaded = true;
|
|
295
|
+
if (registeredShared.from === host.options.name) shareOptions.loaded = true;
|
|
296
|
+
}
|
|
297
|
+
this.emitAfterLoadShare({
|
|
298
|
+
lifecycle: "loadShareSync",
|
|
299
|
+
pkgName,
|
|
300
|
+
shareInfo: shareOptions,
|
|
301
|
+
selectedShared: registeredShared
|
|
302
|
+
});
|
|
303
|
+
return registeredShared.lib;
|
|
304
|
+
}
|
|
305
|
+
if (typeof registeredShared.get === "function") {
|
|
306
|
+
const module = registeredShared.get();
|
|
307
|
+
if (!(module instanceof Promise)) {
|
|
308
|
+
addUseIn(registeredShared, host.options.name);
|
|
309
|
+
this.setShared({
|
|
310
|
+
pkgName,
|
|
311
|
+
loaded: true,
|
|
312
|
+
from: host.options.name,
|
|
313
|
+
lib: module,
|
|
314
|
+
shared: registeredShared
|
|
315
|
+
});
|
|
316
|
+
this.emitAfterLoadShare({
|
|
317
|
+
lifecycle: "loadShareSync",
|
|
318
|
+
pkgName,
|
|
319
|
+
shareInfo: shareOptions,
|
|
320
|
+
selectedShared: registeredShared
|
|
321
|
+
});
|
|
322
|
+
return module;
|
|
323
|
+
}
|
|
324
|
+
}
|
|
325
|
+
}
|
|
326
|
+
if (shareOptions.lib) {
|
|
327
|
+
if (!shareOptions.loaded) shareOptions.loaded = true;
|
|
328
|
+
this.emitAfterLoadShare({
|
|
329
|
+
lifecycle: "loadShareSync",
|
|
330
|
+
pkgName,
|
|
331
|
+
shareInfo: shareOptions,
|
|
332
|
+
selectedShared: shareOptions
|
|
333
|
+
});
|
|
334
|
+
return shareOptions.lib;
|
|
335
|
+
}
|
|
336
|
+
if (shareOptions.get) {
|
|
337
|
+
const module = shareOptions.get();
|
|
338
|
+
if (module instanceof Promise) error(extraOptions?.from === "build" ? RUNTIME_005 : RUNTIME_006, runtimeDescMap, {
|
|
339
|
+
hostName: host.options.name,
|
|
340
|
+
sharedPkgName: pkgName
|
|
341
|
+
}, void 0, optionsToMFContext(host.options));
|
|
342
|
+
shareOptions.lib = module;
|
|
343
|
+
this.setShared({
|
|
344
|
+
pkgName,
|
|
345
|
+
loaded: true,
|
|
346
|
+
from: host.options.name,
|
|
347
|
+
lib: shareOptions.lib,
|
|
348
|
+
shared: shareOptions
|
|
349
|
+
});
|
|
350
|
+
this.emitAfterLoadShare({
|
|
351
|
+
lifecycle: "loadShareSync",
|
|
352
|
+
pkgName,
|
|
353
|
+
shareInfo: shareOptions,
|
|
354
|
+
selectedShared: shareOptions
|
|
355
|
+
});
|
|
356
|
+
return shareOptions.lib;
|
|
357
|
+
}
|
|
358
|
+
error(RUNTIME_006, runtimeDescMap, {
|
|
359
|
+
hostName: host.options.name,
|
|
360
|
+
sharedPkgName: pkgName
|
|
361
|
+
}, void 0, optionsToMFContext(host.options));
|
|
362
|
+
} catch (shareError) {
|
|
363
|
+
this.emitErrorLoadShare({
|
|
364
|
+
lifecycle: "loadShareSync",
|
|
365
|
+
pkgName,
|
|
366
|
+
shareInfo: shareOptions,
|
|
367
|
+
error: shareError
|
|
368
|
+
});
|
|
369
|
+
throw shareError;
|
|
370
|
+
}
|
|
371
|
+
}
|
|
372
|
+
initShareScopeMap(scopeName, shareScope, extraOptions = {}) {
|
|
373
|
+
const { host } = this;
|
|
374
|
+
this.shareScopeMap[scopeName] = shareScope;
|
|
375
|
+
this.hooks.lifecycle.initContainerShareScopeMap.emit({
|
|
376
|
+
shareScope,
|
|
377
|
+
options: host.options,
|
|
378
|
+
origin: host,
|
|
379
|
+
scopeName,
|
|
380
|
+
hostShareScopeMap: extraOptions.hostShareScopeMap
|
|
381
|
+
});
|
|
382
|
+
}
|
|
383
|
+
setShared({ pkgName, shared, from, lib, loading, loaded, get, treeShaking }) {
|
|
384
|
+
const { version, scope = "default", ...shareInfo } = shared;
|
|
385
|
+
const scopes = Array.isArray(scope) ? scope : [scope];
|
|
386
|
+
const mergeAttrs = (shared) => {
|
|
387
|
+
const merge = (s, key, val) => {
|
|
388
|
+
if (val && !s[key]) s[key] = val;
|
|
389
|
+
};
|
|
390
|
+
const targetShared = treeShaking ? shared.treeShaking : shared;
|
|
391
|
+
merge(targetShared, "loaded", loaded);
|
|
392
|
+
merge(targetShared, "loading", loading);
|
|
393
|
+
merge(targetShared, "get", get);
|
|
394
|
+
};
|
|
395
|
+
scopes.forEach((sc) => {
|
|
396
|
+
if (!this.shareScopeMap[sc]) this.shareScopeMap[sc] = {};
|
|
397
|
+
if (!this.shareScopeMap[sc][pkgName]) this.shareScopeMap[sc][pkgName] = {};
|
|
398
|
+
if (!this.shareScopeMap[sc][pkgName][version]) this.shareScopeMap[sc][pkgName][version] = {
|
|
399
|
+
version,
|
|
400
|
+
scope: [sc],
|
|
401
|
+
...shareInfo,
|
|
402
|
+
lib
|
|
403
|
+
};
|
|
404
|
+
const registeredShared = this.shareScopeMap[sc][pkgName][version];
|
|
405
|
+
mergeAttrs(registeredShared);
|
|
406
|
+
if (from && registeredShared.from !== from) registeredShared.from = from;
|
|
407
|
+
});
|
|
408
|
+
}
|
|
409
|
+
_setGlobalShareScopeMap(hostOptions) {
|
|
410
|
+
const globalShareScopeMap = getGlobalShareScope();
|
|
411
|
+
const identifier = hostOptions.id || hostOptions.name;
|
|
412
|
+
if (identifier && !globalShareScopeMap[identifier]) globalShareScopeMap[identifier] = this.shareScopeMap;
|
|
413
|
+
}
|
|
414
|
+
};
|
|
415
|
+
|
|
416
|
+
//#endregion
|
|
417
|
+
export { SharedHandler };
|
|
418
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../../src/shared/index.ts"],"sourcesContent":["import {\n RUNTIME_005,\n RUNTIME_006,\n runtimeDescMap,\n} from '@module-federation/error-codes';\nimport { Federation } from '../global';\nimport {\n Options,\n ShareScopeMap,\n ShareInfos,\n Shared,\n RemoteEntryExports,\n UserOptions,\n ShareStrategy,\n InitScope,\n InitTokens,\n CallFrom,\n TreeShakingArgs,\n} from '../type';\nimport { ModuleFederation } from '../core';\nimport {\n PluginSystem,\n AsyncHook,\n AsyncWaterfallHook,\n SyncWaterfallHook,\n SyncHook,\n} from '../utils/hooks';\nimport {\n formatShareConfigs,\n getRegisteredShare,\n getTargetSharedOptions,\n getGlobalShareScope,\n directShare,\n shouldUseTreeShaking,\n addUseIn,\n} from '../utils/share';\nimport {\n assert,\n error,\n addUniqueItem,\n optionsToMFContext,\n warn,\n} from '../utils';\nimport { DEFAULT_SCOPE } from '../constant';\nimport { LoadRemoteMatch } from '../remote';\nimport { createRemoteEntryInitOptions } from '../module';\n\nexport class SharedHandler {\n host: ModuleFederation;\n shareScopeMap: ShareScopeMap;\n hooks = new PluginSystem({\n beforeRegisterShare: new SyncWaterfallHook<{\n pkgName: string;\n shared: Shared;\n origin: ModuleFederation;\n }>('beforeRegisterShare'),\n afterResolve: new AsyncWaterfallHook<LoadRemoteMatch>('afterResolve'),\n beforeLoadShare: new AsyncWaterfallHook<{\n pkgName: string;\n shareInfo?: Shared;\n shared: Options['shared'];\n origin: ModuleFederation;\n }>('beforeLoadShare'),\n // not used yet\n loadShare: new AsyncHook<[ModuleFederation, string, ShareInfos]>(),\n afterLoadShare: new SyncHook<\n [\n {\n pkgName: string;\n shareInfo?: Partial<Shared>;\n selectedShared?: Partial<Shared>;\n shared: Options['shared'];\n shareScopeMap: ShareScopeMap;\n lifecycle: 'loadShare' | 'loadShareSync';\n origin: ModuleFederation;\n },\n ],\n void\n >('afterLoadShare'),\n errorLoadShare: new SyncHook<\n [\n {\n pkgName: string;\n shareInfo?: Partial<Shared>;\n shared: Options['shared'];\n shareScopeMap: ShareScopeMap;\n lifecycle: 'loadShare' | 'loadShareSync';\n origin: ModuleFederation;\n error?: unknown;\n recovered?: boolean;\n },\n ],\n void\n >('errorLoadShare'),\n resolveShare: new SyncWaterfallHook<{\n shareScopeMap: ShareScopeMap;\n scope: string;\n pkgName: string;\n version: string;\n shareInfo: Shared;\n GlobalFederation: Federation;\n resolver: () => { shared: Shared; useTreesShaking: boolean } | undefined;\n }>('resolveShare'),\n // maybe will change, temporarily for internal use only\n initContainerShareScopeMap: new SyncWaterfallHook<{\n shareScope: ShareScopeMap[string];\n options: Options;\n origin: ModuleFederation;\n scopeName: string;\n hostShareScopeMap?: ShareScopeMap;\n }>('initContainerShareScopeMap'),\n });\n initTokens: InitTokens;\n constructor(host: ModuleFederation) {\n this.host = host;\n this.shareScopeMap = {};\n this.initTokens = {};\n this._setGlobalShareScopeMap(host.options);\n }\n\n private emitAfterLoadShare({\n lifecycle,\n pkgName,\n shareInfo,\n selectedShared,\n }: {\n lifecycle: 'loadShare' | 'loadShareSync';\n pkgName: string;\n shareInfo?: Partial<Shared>;\n selectedShared?: Partial<Shared>;\n }): void {\n try {\n this.hooks.lifecycle.afterLoadShare.emit({\n pkgName,\n shareInfo,\n selectedShared,\n shared: this.host.options.shared,\n shareScopeMap: this.shareScopeMap,\n lifecycle,\n origin: this.host,\n });\n } catch (error) {\n warn(error);\n }\n }\n\n private emitErrorLoadShare({\n lifecycle,\n pkgName,\n shareInfo,\n error,\n recovered,\n }: {\n lifecycle: 'loadShare' | 'loadShareSync';\n pkgName: string;\n shareInfo?: Partial<Shared>;\n error?: unknown;\n recovered?: boolean;\n }): void {\n try {\n this.hooks.lifecycle.errorLoadShare.emit({\n pkgName,\n shareInfo,\n shared: this.host.options.shared,\n shareScopeMap: this.shareScopeMap,\n lifecycle,\n origin: this.host,\n error,\n recovered,\n });\n } catch (hookError) {\n warn(hookError);\n }\n }\n\n // register shared in shareScopeMap\n registerShared(globalOptions: Options, userOptions: UserOptions) {\n const { newShareInfos, allShareInfos } = formatShareConfigs(\n globalOptions,\n userOptions,\n );\n\n const sharedKeys = Object.keys(newShareInfos);\n sharedKeys.forEach((sharedKey) => {\n const sharedVals = newShareInfos[sharedKey];\n sharedVals.forEach((sharedVal) => {\n sharedVal.scope.forEach((sc) => {\n this.hooks.lifecycle.beforeRegisterShare.emit({\n origin: this.host,\n pkgName: sharedKey,\n shared: sharedVal,\n });\n const registeredShared = this.shareScopeMap[sc]?.[sharedKey];\n if (!registeredShared) {\n this.setShared({\n pkgName: sharedKey,\n lib: sharedVal.lib,\n get: sharedVal.get,\n loaded: sharedVal.loaded || Boolean(sharedVal.lib),\n shared: sharedVal,\n from: userOptions.name,\n });\n }\n });\n });\n });\n\n return {\n newShareInfos,\n allShareInfos,\n };\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 const { host } = this;\n // This function performs the following steps:\n // 1. Checks if the currently loaded share already exists, if not, it throws an error\n // 2. Searches globally for a matching share, if found, it uses it directly\n // 3. If not found, it retrieves it from the current share and stores the obtained share globally.\n\n const shareOptions = getTargetSharedOptions({\n pkgName,\n extraOptions,\n shareInfos: host.options.shared,\n });\n let shareOptionsRes: Shared | undefined = shareOptions;\n\n try {\n if (shareOptions?.scope) {\n await Promise.all(\n shareOptions.scope.map(async (shareScope) => {\n await Promise.all(\n this.initializeSharing(shareScope, {\n strategy: shareOptions.strategy,\n }),\n );\n return;\n }),\n );\n }\n const loadShareRes = await this.hooks.lifecycle.beforeLoadShare.emit({\n pkgName,\n shareInfo: shareOptions,\n shared: host.options.shared,\n origin: host,\n });\n\n shareOptionsRes = loadShareRes.shareInfo;\n\n // Assert that shareInfoRes exists, if not, throw an error\n assert(\n shareOptionsRes,\n `Cannot find shared \"${pkgName}\" in host \"${host.options.name}\". Ensure the shared config for \"${pkgName}\" is declared in the federation plugin options and the host has been initialized before loading shares.`,\n );\n const resolvedShareOptions = shareOptionsRes;\n\n const { shared: registeredShared, useTreesShaking } =\n getRegisteredShare(\n this.shareScopeMap,\n pkgName,\n shareOptionsRes,\n this.hooks.lifecycle.resolveShare,\n ) || {};\n\n if (registeredShared) {\n const targetShared = directShare(registeredShared, useTreesShaking);\n if (targetShared.lib) {\n addUseIn(targetShared, host.options.name);\n this.emitAfterLoadShare({\n lifecycle: 'loadShare',\n pkgName,\n shareInfo: resolvedShareOptions,\n selectedShared: registeredShared,\n });\n return targetShared.lib as () => T;\n } else if (targetShared.loading && !targetShared.loaded) {\n const factory = await targetShared.loading;\n targetShared.loaded = true;\n if (!targetShared.lib) {\n targetShared.lib = factory;\n }\n addUseIn(targetShared, host.options.name);\n this.emitAfterLoadShare({\n lifecycle: 'loadShare',\n pkgName,\n shareInfo: resolvedShareOptions,\n selectedShared: registeredShared,\n });\n return factory;\n } else {\n const asyncLoadProcess = async () => {\n const factory = await targetShared.get!();\n addUseIn(targetShared, host.options.name);\n targetShared.loaded = true;\n targetShared.lib = factory;\n return factory as () => T;\n };\n const loading = asyncLoadProcess();\n this.setShared({\n pkgName,\n loaded: false,\n shared: registeredShared,\n from: host.options.name,\n lib: null,\n loading,\n treeShaking: useTreesShaking\n ? (targetShared as TreeShakingArgs)\n : undefined,\n });\n const factory = await loading;\n this.emitAfterLoadShare({\n lifecycle: 'loadShare',\n pkgName,\n shareInfo: resolvedShareOptions,\n selectedShared: registeredShared,\n });\n return factory;\n }\n } else {\n if (extraOptions?.customShareInfo) {\n this.emitErrorLoadShare({\n lifecycle: 'loadShare',\n pkgName,\n shareInfo: resolvedShareOptions,\n recovered: true,\n });\n return false;\n }\n const _useTreeShaking = shouldUseTreeShaking(\n resolvedShareOptions.treeShaking,\n );\n const targetShared = directShare(resolvedShareOptions, _useTreeShaking);\n\n const asyncLoadProcess = async () => {\n const factory = await targetShared.get!();\n targetShared.lib = factory;\n targetShared.loaded = true;\n addUseIn(targetShared, host.options.name);\n const { shared: gShared, useTreesShaking: gUseTreeShaking } =\n getRegisteredShare(\n this.shareScopeMap,\n pkgName,\n resolvedShareOptions,\n this.hooks.lifecycle.resolveShare,\n ) || {};\n if (gShared) {\n const targetGShared = directShare(gShared, gUseTreeShaking);\n targetGShared.lib = factory;\n targetGShared.loaded = true;\n gShared.from = resolvedShareOptions.from;\n }\n return factory as () => T;\n };\n const loading = asyncLoadProcess();\n this.setShared({\n pkgName,\n loaded: false,\n shared: resolvedShareOptions,\n from: host.options.name,\n lib: null,\n loading,\n treeShaking: _useTreeShaking\n ? (targetShared as TreeShakingArgs)\n : undefined,\n });\n const factory = await loading;\n this.emitAfterLoadShare({\n lifecycle: 'loadShare',\n pkgName,\n shareInfo: resolvedShareOptions,\n selectedShared: resolvedShareOptions,\n });\n return factory;\n }\n } catch (shareError) {\n this.emitErrorLoadShare({\n lifecycle: 'loadShare',\n pkgName,\n shareInfo: shareOptionsRes,\n error: shareError,\n });\n throw shareError;\n }\n }\n\n /**\n * This function initializes the sharing sequence (executed only once per share scope).\n * It accepts one argument, the name of the share scope.\n * If the share scope does not exist, it creates one.\n */\n // eslint-disable-next-line @typescript-eslint/member-ordering\n initializeSharing(\n shareScopeName = DEFAULT_SCOPE,\n extraOptions?: {\n initScope?: InitScope;\n from?: CallFrom;\n strategy?: ShareStrategy;\n },\n ): Array<Promise<void>> {\n const { host } = this;\n const from = extraOptions?.from;\n const strategy = extraOptions?.strategy;\n let initScope = extraOptions?.initScope;\n const promises: Promise<any>[] = [];\n if (from !== 'build') {\n const { initTokens } = this;\n if (!initScope) initScope = [];\n let initToken = initTokens[shareScopeName];\n if (!initToken)\n initToken = initTokens[shareScopeName] = { from: this.host.name };\n if (initScope.indexOf(initToken) >= 0) return promises;\n initScope.push(initToken);\n }\n\n const shareScope = this.shareScopeMap;\n const hostName = host.options.name;\n // Creates a new share scope if necessary\n if (!shareScope[shareScopeName]) {\n shareScope[shareScopeName] = {};\n }\n // Executes all initialization snippets from all accessible modules\n const scope = shareScope[shareScopeName];\n const register = (name: string, shared: Shared) => {\n const { version, eager } = shared;\n scope[name] = scope[name] || {};\n const versions = scope[name];\n const activeVersion: Shared =\n versions[version] && (directShare(versions[version]) as Shared);\n const activeVersionEager = Boolean(\n activeVersion &&\n (('eager' in activeVersion && activeVersion.eager) ||\n ('shareConfig' in activeVersion && activeVersion.shareConfig?.eager)),\n );\n if (\n !activeVersion ||\n (activeVersion.strategy !== 'loaded-first' &&\n !activeVersion.loaded &&\n (Boolean(!eager) !== !activeVersionEager\n ? eager\n : hostName > versions[version].from))\n ) {\n versions[version] = shared;\n }\n };\n\n const initRemoteModule = async (key: string): Promise<void> => {\n const { module } = await host.remoteHandler.getRemoteModuleAndOptions({\n id: key,\n });\n let remoteEntryExports: RemoteEntryExports | undefined = undefined;\n try {\n remoteEntryExports = await module.getEntry();\n } catch (error) {\n remoteEntryExports =\n (await host.remoteHandler.hooks.lifecycle.errorLoadRemote.emit({\n id: key,\n error,\n from: 'runtime',\n lifecycle: 'beforeLoadShare',\n remote: module.remoteInfo,\n origin: host,\n })) as RemoteEntryExports;\n if (!remoteEntryExports) {\n return;\n }\n } finally {\n // prevent self load loop: when host load self , the initTokens is not the same\n if (remoteEntryExports?.init && !module.initing) {\n module.remoteEntryExports = remoteEntryExports;\n await module.init(undefined, undefined, initScope);\n }\n }\n };\n Object.keys(host.options.shared).forEach((shareName) => {\n const sharedArr = host.options.shared[shareName];\n sharedArr.forEach((shared) => {\n if (shared.scope.includes(shareScopeName)) {\n register(shareName, shared);\n }\n });\n });\n // TODO: strategy==='version-first' need to be removed in the future\n if (\n host.options.shareStrategy === 'version-first' ||\n strategy === 'version-first'\n ) {\n host.options.remotes.forEach((remote) => {\n if (remote.shareScope === shareScopeName) {\n promises.push(initRemoteModule(remote.name));\n }\n });\n }\n\n return promises;\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 from?: 'build' | 'runtime';\n customShareInfo?: Partial<Shared>;\n resolver?: (sharedOptions: ShareInfos[string]) => Shared;\n },\n ): () => T | never {\n const { host } = this;\n const shareOptions = getTargetSharedOptions({\n pkgName,\n extraOptions,\n shareInfos: host.options.shared,\n });\n\n try {\n if (shareOptions?.scope) {\n shareOptions.scope.forEach((shareScope) => {\n this.initializeSharing(shareScope, {\n strategy: shareOptions.strategy,\n });\n });\n }\n const { shared: registeredShared } =\n getRegisteredShare(\n this.shareScopeMap,\n pkgName,\n shareOptions,\n this.hooks.lifecycle.resolveShare,\n ) || {};\n\n if (registeredShared) {\n if (typeof registeredShared.lib === 'function') {\n addUseIn(registeredShared, host.options.name);\n if (!registeredShared.loaded) {\n registeredShared.loaded = true;\n if (registeredShared.from === host.options.name) {\n shareOptions.loaded = true;\n }\n }\n this.emitAfterLoadShare({\n lifecycle: 'loadShareSync',\n pkgName,\n shareInfo: shareOptions,\n selectedShared: registeredShared,\n });\n return registeredShared.lib as () => T;\n }\n if (typeof registeredShared.get === 'function') {\n const module = registeredShared.get();\n if (!(module instanceof Promise)) {\n addUseIn(registeredShared, host.options.name);\n this.setShared({\n pkgName,\n loaded: true,\n from: host.options.name,\n lib: module,\n shared: registeredShared,\n });\n this.emitAfterLoadShare({\n lifecycle: 'loadShareSync',\n pkgName,\n shareInfo: shareOptions,\n selectedShared: registeredShared,\n });\n return module;\n }\n }\n }\n\n if (shareOptions.lib) {\n if (!shareOptions.loaded) {\n shareOptions.loaded = true;\n }\n this.emitAfterLoadShare({\n lifecycle: 'loadShareSync',\n pkgName,\n shareInfo: shareOptions,\n selectedShared: shareOptions,\n });\n return shareOptions.lib as () => T;\n }\n\n if (shareOptions.get) {\n const module = shareOptions.get();\n\n if (module instanceof Promise) {\n const errorCode =\n extraOptions?.from === 'build' ? RUNTIME_005 : RUNTIME_006;\n error(\n errorCode,\n runtimeDescMap,\n {\n hostName: host.options.name,\n sharedPkgName: pkgName,\n },\n undefined,\n optionsToMFContext(host.options),\n );\n }\n\n shareOptions.lib = module;\n\n this.setShared({\n pkgName,\n loaded: true,\n from: host.options.name,\n lib: shareOptions.lib,\n shared: shareOptions,\n });\n this.emitAfterLoadShare({\n lifecycle: 'loadShareSync',\n pkgName,\n shareInfo: shareOptions,\n selectedShared: shareOptions,\n });\n return shareOptions.lib as () => T;\n }\n\n error(\n RUNTIME_006,\n runtimeDescMap,\n {\n hostName: host.options.name,\n sharedPkgName: pkgName,\n },\n undefined,\n optionsToMFContext(host.options),\n );\n } catch (shareError) {\n this.emitErrorLoadShare({\n lifecycle: 'loadShareSync',\n pkgName,\n shareInfo: shareOptions,\n error: shareError,\n });\n throw shareError;\n }\n }\n\n initShareScopeMap(\n scopeName: string,\n shareScope: ShareScopeMap[string],\n extraOptions: { hostShareScopeMap?: ShareScopeMap } = {},\n ): void {\n const { host } = this;\n this.shareScopeMap[scopeName] = shareScope;\n this.hooks.lifecycle.initContainerShareScopeMap.emit({\n shareScope,\n options: host.options,\n origin: host,\n scopeName,\n hostShareScopeMap: extraOptions.hostShareScopeMap,\n });\n }\n\n private setShared({\n pkgName,\n shared,\n from,\n lib,\n loading,\n loaded,\n get,\n treeShaking,\n }: {\n pkgName: string;\n shared: Shared;\n from: string;\n lib: any;\n loaded?: boolean;\n loading?: Shared['loading'];\n get?: Shared['get'];\n treeShaking?: TreeShakingArgs;\n }): void {\n const { version, scope = 'default', ...shareInfo } = shared;\n const scopes: string[] = Array.isArray(scope) ? scope : [scope];\n\n const mergeAttrs = (shared: Shared) => {\n const merge = <K extends keyof TreeShakingArgs>(\n s: TreeShakingArgs,\n key: K,\n val: TreeShakingArgs[K],\n ): void => {\n if (val && !s[key]) {\n s[key] = val;\n }\n };\n const targetShared = (\n treeShaking ? shared.treeShaking! : shared\n ) as TreeShakingArgs;\n merge(targetShared, 'loaded', loaded);\n merge(targetShared, 'loading', loading);\n merge(targetShared, 'get', get);\n };\n scopes.forEach((sc) => {\n if (!this.shareScopeMap[sc]) {\n this.shareScopeMap[sc] = {};\n }\n if (!this.shareScopeMap[sc][pkgName]) {\n this.shareScopeMap[sc][pkgName] = {};\n }\n\n if (!this.shareScopeMap[sc][pkgName][version]) {\n this.shareScopeMap[sc][pkgName][version] = {\n version,\n scope: [sc],\n ...shareInfo,\n lib,\n };\n }\n\n const registeredShared = this.shareScopeMap[sc][pkgName][version];\n mergeAttrs(registeredShared);\n if (from && registeredShared.from !== from) {\n registeredShared.from = from;\n }\n });\n }\n\n private _setGlobalShareScopeMap(hostOptions: Options): void {\n const globalShareScopeMap = getGlobalShareScope();\n const identifier = hostOptions.id || hostOptions.name;\n if (identifier && !globalShareScopeMap[identifier]) {\n globalShareScopeMap[identifier] = this.shareScopeMap;\n }\n }\n}\n"],"mappings":";;;;;;;;;;;;;;AA+CA,IAAa,gBAAb,MAA2B;CAkEzB,YAAY,MAAwB;eA/D5B,IAAI,aAAa;GACvB,qBAAqB,IAAI,kBAItB,sBAAsB;GACzB,cAAc,IAAI,mBAAoC,eAAe;GACrE,iBAAiB,IAAI,mBAKlB,kBAAkB;GAErB,WAAW,IAAI,WAAmD;GAClE,gBAAgB,IAAI,SAalB,iBAAiB;GACnB,gBAAgB,IAAI,SAclB,iBAAiB;GACnB,cAAc,IAAI,kBAQf,eAAe;GAElB,4BAA4B,IAAI,kBAM7B,6BAA6B;GACjC,CAAC;AAGA,OAAK,OAAO;AACZ,OAAK,gBAAgB,EAAE;AACvB,OAAK,aAAa,EAAE;AACpB,OAAK,wBAAwB,KAAK,QAAQ;;CAG5C,AAAQ,mBAAmB,EACzB,WACA,SACA,WACA,kBAMO;AACP,MAAI;AACF,QAAK,MAAM,UAAU,eAAe,KAAK;IACvC;IACA;IACA;IACA,QAAQ,KAAK,KAAK,QAAQ;IAC1B,eAAe,KAAK;IACpB;IACA,QAAQ,KAAK;IACd,CAAC;WACK,OAAO;AACd,QAAK,MAAM;;;CAIf,AAAQ,mBAAmB,EACzB,WACA,SACA,WACA,OACA,aAOO;AACP,MAAI;AACF,QAAK,MAAM,UAAU,eAAe,KAAK;IACvC;IACA;IACA,QAAQ,KAAK,KAAK,QAAQ;IAC1B,eAAe,KAAK;IACpB;IACA,QAAQ,KAAK;IACb;IACA;IACD,CAAC;WACK,WAAW;AAClB,QAAK,UAAU;;;CAKnB,eAAe,eAAwB,aAA0B;EAC/D,MAAM,EAAE,eAAe,kBAAkB,mBACvC,eACA,YACD;AAGD,EADmB,OAAO,KAAK,cAAc,CAClC,SAAS,cAAc;AAEhC,GADmB,cAAc,WACtB,SAAS,cAAc;AAChC,cAAU,MAAM,SAAS,OAAO;AAC9B,UAAK,MAAM,UAAU,oBAAoB,KAAK;MAC5C,QAAQ,KAAK;MACb,SAAS;MACT,QAAQ;MACT,CAAC;AAEF,SAAI,CADqB,KAAK,cAAc,MAAM,WAEhD,MAAK,UAAU;MACb,SAAS;MACT,KAAK,UAAU;MACf,KAAK,UAAU;MACf,QAAQ,UAAU,UAAU,QAAQ,UAAU,IAAI;MAClD,QAAQ;MACR,MAAM,YAAY;MACnB,CAAC;MAEJ;KACF;IACF;AAEF,SAAO;GACL;GACA;GACD;;CAGH,MAAM,UACJ,SACA,cAIwC;EACxC,MAAM,EAAE,SAAS;EAMjB,MAAM,eAAe,uBAAuB;GAC1C;GACA;GACA,YAAY,KAAK,QAAQ;GAC1B,CAAC;EACF,IAAI,kBAAsC;AAE1C,MAAI;AACF,OAAI,cAAc,MAChB,OAAM,QAAQ,IACZ,aAAa,MAAM,IAAI,OAAO,eAAe;AAC3C,UAAM,QAAQ,IACZ,KAAK,kBAAkB,YAAY,EACjC,UAAU,aAAa,UACxB,CAAC,CACH;KAED,CACH;AASH,sBAPqB,MAAM,KAAK,MAAM,UAAU,gBAAgB,KAAK;IACnE;IACA,WAAW;IACX,QAAQ,KAAK,QAAQ;IACrB,QAAQ;IACT,CAAC,EAE6B;AAG/B,UACE,iBACA,uBAAuB,QAAQ,aAAa,KAAK,QAAQ,KAAK,mCAAmC,QAAQ,yGAC1G;GACD,MAAM,uBAAuB;GAE7B,MAAM,EAAE,QAAQ,kBAAkB,oBAChC,mBACE,KAAK,eACL,SACA,iBACA,KAAK,MAAM,UAAU,aACtB,IAAI,EAAE;AAET,OAAI,kBAAkB;IACpB,MAAM,eAAe,YAAY,kBAAkB,gBAAgB;AACnE,QAAI,aAAa,KAAK;AACpB,cAAS,cAAc,KAAK,QAAQ,KAAK;AACzC,UAAK,mBAAmB;MACtB,WAAW;MACX;MACA,WAAW;MACX,gBAAgB;MACjB,CAAC;AACF,YAAO,aAAa;eACX,aAAa,WAAW,CAAC,aAAa,QAAQ;KACvD,MAAM,UAAU,MAAM,aAAa;AACnC,kBAAa,SAAS;AACtB,SAAI,CAAC,aAAa,IAChB,cAAa,MAAM;AAErB,cAAS,cAAc,KAAK,QAAQ,KAAK;AACzC,UAAK,mBAAmB;MACtB,WAAW;MACX;MACA,WAAW;MACX,gBAAgB;MACjB,CAAC;AACF,YAAO;WACF;KACL,MAAM,mBAAmB,YAAY;MACnC,MAAM,UAAU,MAAM,aAAa,KAAM;AACzC,eAAS,cAAc,KAAK,QAAQ,KAAK;AACzC,mBAAa,SAAS;AACtB,mBAAa,MAAM;AACnB,aAAO;;KAET,MAAM,UAAU,kBAAkB;AAClC,UAAK,UAAU;MACb;MACA,QAAQ;MACR,QAAQ;MACR,MAAM,KAAK,QAAQ;MACnB,KAAK;MACL;MACA,aAAa,kBACR,eACD;MACL,CAAC;KACF,MAAM,UAAU,MAAM;AACtB,UAAK,mBAAmB;MACtB,WAAW;MACX;MACA,WAAW;MACX,gBAAgB;MACjB,CAAC;AACF,YAAO;;UAEJ;AACL,QAAI,cAAc,iBAAiB;AACjC,UAAK,mBAAmB;MACtB,WAAW;MACX;MACA,WAAW;MACX,WAAW;MACZ,CAAC;AACF,YAAO;;IAET,MAAM,kBAAkB,qBACtB,qBAAqB,YACtB;IACD,MAAM,eAAe,YAAY,sBAAsB,gBAAgB;IAEvE,MAAM,mBAAmB,YAAY;KACnC,MAAM,UAAU,MAAM,aAAa,KAAM;AACzC,kBAAa,MAAM;AACnB,kBAAa,SAAS;AACtB,cAAS,cAAc,KAAK,QAAQ,KAAK;KACzC,MAAM,EAAE,QAAQ,SAAS,iBAAiB,oBACxC,mBACE,KAAK,eACL,SACA,sBACA,KAAK,MAAM,UAAU,aACtB,IAAI,EAAE;AACT,SAAI,SAAS;MACX,MAAM,gBAAgB,YAAY,SAAS,gBAAgB;AAC3D,oBAAc,MAAM;AACpB,oBAAc,SAAS;AACvB,cAAQ,OAAO,qBAAqB;;AAEtC,YAAO;;IAET,MAAM,UAAU,kBAAkB;AAClC,SAAK,UAAU;KACb;KACA,QAAQ;KACR,QAAQ;KACR,MAAM,KAAK,QAAQ;KACnB,KAAK;KACL;KACA,aAAa,kBACR,eACD;KACL,CAAC;IACF,MAAM,UAAU,MAAM;AACtB,SAAK,mBAAmB;KACtB,WAAW;KACX;KACA,WAAW;KACX,gBAAgB;KACjB,CAAC;AACF,WAAO;;WAEF,YAAY;AACnB,QAAK,mBAAmB;IACtB,WAAW;IACX;IACA,WAAW;IACX,OAAO;IACR,CAAC;AACF,SAAM;;;;;;;;CAUV,kBACE,iBAAiB,eACjB,cAKsB;EACtB,MAAM,EAAE,SAAS;EACjB,MAAM,OAAO,cAAc;EAC3B,MAAM,WAAW,cAAc;EAC/B,IAAI,YAAY,cAAc;EAC9B,MAAM,WAA2B,EAAE;AACnC,MAAI,SAAS,SAAS;GACpB,MAAM,EAAE,eAAe;AACvB,OAAI,CAAC,UAAW,aAAY,EAAE;GAC9B,IAAI,YAAY,WAAW;AAC3B,OAAI,CAAC,UACH,aAAY,WAAW,kBAAkB,EAAE,MAAM,KAAK,KAAK,MAAM;AACnE,OAAI,UAAU,QAAQ,UAAU,IAAI,EAAG,QAAO;AAC9C,aAAU,KAAK,UAAU;;EAG3B,MAAM,aAAa,KAAK;EACxB,MAAM,WAAW,KAAK,QAAQ;AAE9B,MAAI,CAAC,WAAW,gBACd,YAAW,kBAAkB,EAAE;EAGjC,MAAM,QAAQ,WAAW;EACzB,MAAM,YAAY,MAAc,WAAmB;GACjD,MAAM,EAAE,SAAS,UAAU;AAC3B,SAAM,QAAQ,MAAM,SAAS,EAAE;GAC/B,MAAM,WAAW,MAAM;GACvB,MAAM,gBACJ,SAAS,YAAa,YAAY,SAAS,SAAS;GACtD,MAAM,qBAAqB,QACzB,kBACE,WAAW,iBAAiB,cAAc,SACzC,iBAAiB,iBAAiB,cAAc,aAAa,OACjE;AACD,OACE,CAAC,iBACA,cAAc,aAAa,kBAC1B,CAAC,cAAc,WACd,QAAQ,CAAC,MAAM,KAAK,CAAC,qBAClB,QACA,WAAW,SAAS,SAAS,MAEnC,UAAS,WAAW;;EAIxB,MAAM,mBAAmB,OAAO,QAA+B;GAC7D,MAAM,EAAE,WAAW,MAAM,KAAK,cAAc,0BAA0B,EACpE,IAAI,KACL,CAAC;GACF,IAAI,qBAAqD;AACzD,OAAI;AACF,yBAAqB,MAAM,OAAO,UAAU;YACrC,OAAO;AACd,yBACG,MAAM,KAAK,cAAc,MAAM,UAAU,gBAAgB,KAAK;KAC7D,IAAI;KACJ;KACA,MAAM;KACN,WAAW;KACX,QAAQ,OAAO;KACf,QAAQ;KACT,CAAC;AACJ,QAAI,CAAC,mBACH;aAEM;AAER,QAAI,oBAAoB,QAAQ,CAAC,OAAO,SAAS;AAC/C,YAAO,qBAAqB;AAC5B,WAAM,OAAO,KAAK,QAAW,QAAW,UAAU;;;;AAIxD,SAAO,KAAK,KAAK,QAAQ,OAAO,CAAC,SAAS,cAAc;AAEtD,GADkB,KAAK,QAAQ,OAAO,WAC5B,SAAS,WAAW;AAC5B,QAAI,OAAO,MAAM,SAAS,eAAe,CACvC,UAAS,WAAW,OAAO;KAE7B;IACF;AAEF,MACE,KAAK,QAAQ,kBAAkB,mBAC/B,aAAa,gBAEb,MAAK,QAAQ,QAAQ,SAAS,WAAW;AACvC,OAAI,OAAO,eAAe,eACxB,UAAS,KAAK,iBAAiB,OAAO,KAAK,CAAC;IAE9C;AAGJ,SAAO;;CAOT,cACE,SACA,cAKiB;EACjB,MAAM,EAAE,SAAS;EACjB,MAAM,eAAe,uBAAuB;GAC1C;GACA;GACA,YAAY,KAAK,QAAQ;GAC1B,CAAC;AAEF,MAAI;AACF,OAAI,cAAc,MAChB,cAAa,MAAM,SAAS,eAAe;AACzC,SAAK,kBAAkB,YAAY,EACjC,UAAU,aAAa,UACxB,CAAC;KACF;GAEJ,MAAM,EAAE,QAAQ,qBACd,mBACE,KAAK,eACL,SACA,cACA,KAAK,MAAM,UAAU,aACtB,IAAI,EAAE;AAET,OAAI,kBAAkB;AACpB,QAAI,OAAO,iBAAiB,QAAQ,YAAY;AAC9C,cAAS,kBAAkB,KAAK,QAAQ,KAAK;AAC7C,SAAI,CAAC,iBAAiB,QAAQ;AAC5B,uBAAiB,SAAS;AAC1B,UAAI,iBAAiB,SAAS,KAAK,QAAQ,KACzC,cAAa,SAAS;;AAG1B,UAAK,mBAAmB;MACtB,WAAW;MACX;MACA,WAAW;MACX,gBAAgB;MACjB,CAAC;AACF,YAAO,iBAAiB;;AAE1B,QAAI,OAAO,iBAAiB,QAAQ,YAAY;KAC9C,MAAM,SAAS,iBAAiB,KAAK;AACrC,SAAI,EAAE,kBAAkB,UAAU;AAChC,eAAS,kBAAkB,KAAK,QAAQ,KAAK;AAC7C,WAAK,UAAU;OACb;OACA,QAAQ;OACR,MAAM,KAAK,QAAQ;OACnB,KAAK;OACL,QAAQ;OACT,CAAC;AACF,WAAK,mBAAmB;OACtB,WAAW;OACX;OACA,WAAW;OACX,gBAAgB;OACjB,CAAC;AACF,aAAO;;;;AAKb,OAAI,aAAa,KAAK;AACpB,QAAI,CAAC,aAAa,OAChB,cAAa,SAAS;AAExB,SAAK,mBAAmB;KACtB,WAAW;KACX;KACA,WAAW;KACX,gBAAgB;KACjB,CAAC;AACF,WAAO,aAAa;;AAGtB,OAAI,aAAa,KAAK;IACpB,MAAM,SAAS,aAAa,KAAK;AAEjC,QAAI,kBAAkB,QAGpB,OADE,cAAc,SAAS,UAAU,cAAc,aAG/C,gBACA;KACE,UAAU,KAAK,QAAQ;KACvB,eAAe;KAChB,EACD,QACA,mBAAmB,KAAK,QAAQ,CACjC;AAGH,iBAAa,MAAM;AAEnB,SAAK,UAAU;KACb;KACA,QAAQ;KACR,MAAM,KAAK,QAAQ;KACnB,KAAK,aAAa;KAClB,QAAQ;KACT,CAAC;AACF,SAAK,mBAAmB;KACtB,WAAW;KACX;KACA,WAAW;KACX,gBAAgB;KACjB,CAAC;AACF,WAAO,aAAa;;AAGtB,SACE,aACA,gBACA;IACE,UAAU,KAAK,QAAQ;IACvB,eAAe;IAChB,EACD,QACA,mBAAmB,KAAK,QAAQ,CACjC;WACM,YAAY;AACnB,QAAK,mBAAmB;IACtB,WAAW;IACX;IACA,WAAW;IACX,OAAO;IACR,CAAC;AACF,SAAM;;;CAIV,kBACE,WACA,YACA,eAAsD,EAAE,EAClD;EACN,MAAM,EAAE,SAAS;AACjB,OAAK,cAAc,aAAa;AAChC,OAAK,MAAM,UAAU,2BAA2B,KAAK;GACnD;GACA,SAAS,KAAK;GACd,QAAQ;GACR;GACA,mBAAmB,aAAa;GACjC,CAAC;;CAGJ,AAAQ,UAAU,EAChB,SACA,QACA,MACA,KACA,SACA,QACA,KACA,eAUO;EACP,MAAM,EAAE,SAAS,QAAQ,WAAW,GAAG,cAAc;EACrD,MAAM,SAAmB,MAAM,QAAQ,MAAM,GAAG,QAAQ,CAAC,MAAM;EAE/D,MAAM,cAAc,WAAmB;GACrC,MAAM,SACJ,GACA,KACA,QACS;AACT,QAAI,OAAO,CAAC,EAAE,KACZ,GAAE,OAAO;;GAGb,MAAM,eACJ,cAAc,OAAO,cAAe;AAEtC,SAAM,cAAc,UAAU,OAAO;AACrC,SAAM,cAAc,WAAW,QAAQ;AACvC,SAAM,cAAc,OAAO,IAAI;;AAEjC,SAAO,SAAS,OAAO;AACrB,OAAI,CAAC,KAAK,cAAc,IACtB,MAAK,cAAc,MAAM,EAAE;AAE7B,OAAI,CAAC,KAAK,cAAc,IAAI,SAC1B,MAAK,cAAc,IAAI,WAAW,EAAE;AAGtC,OAAI,CAAC,KAAK,cAAc,IAAI,SAAS,SACnC,MAAK,cAAc,IAAI,SAAS,WAAW;IACzC;IACA,OAAO,CAAC,GAAG;IACX,GAAG;IACH;IACD;GAGH,MAAM,mBAAmB,KAAK,cAAc,IAAI,SAAS;AACzD,cAAW,iBAAiB;AAC5B,OAAI,QAAQ,iBAAiB,SAAS,KACpC,kBAAiB,OAAO;IAE1B;;CAGJ,AAAQ,wBAAwB,aAA4B;EAC1D,MAAM,sBAAsB,qBAAqB;EACjD,MAAM,aAAa,YAAY,MAAM,YAAY;AACjD,MAAI,cAAc,CAAC,oBAAoB,YACrC,qBAAoB,cAAc,KAAK"}
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
import { ModuleFederationRuntimePlugin } from "./plugin.js";
|
|
2
|
+
import { Module, RemoteEntryType, RemoteWithEntry, RemoteWithVersion, TreeShakingStatus } from "@module-federation/sdk";
|
|
3
|
+
|
|
4
|
+
//#region src/type/config.d.ts
|
|
5
|
+
type Optional<T, K extends keyof T> = Omit<T, K> & Partial<T>;
|
|
6
|
+
type PartialOptional<T, K extends keyof T> = Omit<T, K> & { [P in K]-?: T[P] };
|
|
7
|
+
interface RemoteInfoCommon {
|
|
8
|
+
alias?: string;
|
|
9
|
+
shareScope?: string | string[];
|
|
10
|
+
type?: RemoteEntryType;
|
|
11
|
+
entryGlobalName?: string;
|
|
12
|
+
}
|
|
13
|
+
type RemoteInfoOptionalVersion = {
|
|
14
|
+
name: string;
|
|
15
|
+
version?: string;
|
|
16
|
+
} & RemoteInfoCommon;
|
|
17
|
+
type Remote = (RemoteWithEntry | RemoteWithVersion) & RemoteInfoCommon;
|
|
18
|
+
type LoadShareExtraOptions = {
|
|
19
|
+
customShareInfo?: Partial<Shared>;
|
|
20
|
+
resolver?: (sharedOptions: ShareInfos[string]) => Shared;
|
|
21
|
+
};
|
|
22
|
+
interface RemoteInfo {
|
|
23
|
+
alias?: string;
|
|
24
|
+
name: string;
|
|
25
|
+
version?: string;
|
|
26
|
+
buildVersion?: string;
|
|
27
|
+
entry: string;
|
|
28
|
+
type: RemoteEntryType;
|
|
29
|
+
entryGlobalName: string;
|
|
30
|
+
shareScope: string | string[];
|
|
31
|
+
}
|
|
32
|
+
type HostInfo = Pick<Options, 'name' | 'version' | 'remotes' | 'version'>;
|
|
33
|
+
interface SharedConfig {
|
|
34
|
+
singleton?: boolean;
|
|
35
|
+
requiredVersion: false | string;
|
|
36
|
+
eager?: boolean;
|
|
37
|
+
strictVersion?: boolean;
|
|
38
|
+
layer?: string | null;
|
|
39
|
+
}
|
|
40
|
+
type TreeShakingArgs = {
|
|
41
|
+
usedExports?: string[];
|
|
42
|
+
get?: SharedGetter;
|
|
43
|
+
lib?: () => Module;
|
|
44
|
+
status?: TreeShakingStatus;
|
|
45
|
+
mode?: 'server-calc' | 'runtime-infer';
|
|
46
|
+
loading?: null | Promise<any>;
|
|
47
|
+
loaded?: boolean;
|
|
48
|
+
useIn?: Array<string>;
|
|
49
|
+
};
|
|
50
|
+
type SharedBaseArgs = {
|
|
51
|
+
version?: string;
|
|
52
|
+
shareConfig?: SharedConfig;
|
|
53
|
+
scope?: string | Array<string>;
|
|
54
|
+
deps?: Array<string>;
|
|
55
|
+
strategy?: 'version-first' | 'loaded-first';
|
|
56
|
+
loaded?: boolean;
|
|
57
|
+
treeShaking?: TreeShakingArgs;
|
|
58
|
+
};
|
|
59
|
+
type SharedGetter = (() => () => Module) | (() => Promise<() => Module>);
|
|
60
|
+
type ShareArgs = (SharedBaseArgs & {
|
|
61
|
+
get: SharedGetter;
|
|
62
|
+
}) | (SharedBaseArgs & {
|
|
63
|
+
lib: () => Module;
|
|
64
|
+
}) | SharedBaseArgs;
|
|
65
|
+
type ShareStrategy = 'version-first' | 'loaded-first';
|
|
66
|
+
type NoMatchedUsedExportsItem = [from: string, usedExports?: string[]];
|
|
67
|
+
type Shared = {
|
|
68
|
+
version: string;
|
|
69
|
+
get: SharedGetter;
|
|
70
|
+
shareConfig: SharedConfig;
|
|
71
|
+
scope: Array<string>;
|
|
72
|
+
useIn: Array<string>;
|
|
73
|
+
from: string;
|
|
74
|
+
deps: Array<string>;
|
|
75
|
+
lib?: () => Module;
|
|
76
|
+
loaded?: boolean;
|
|
77
|
+
loading?: null | Promise<any>;
|
|
78
|
+
eager?: boolean;
|
|
79
|
+
/**
|
|
80
|
+
* @deprecated set in initOptions.shareStrategy instead
|
|
81
|
+
*/
|
|
82
|
+
strategy: ShareStrategy;
|
|
83
|
+
treeShaking?: TreeShakingArgs;
|
|
84
|
+
};
|
|
85
|
+
type ShareScopeMap = {
|
|
86
|
+
[scope: string]: {
|
|
87
|
+
[pkgName: string]: {
|
|
88
|
+
[sharedVersion: string]: Shared;
|
|
89
|
+
};
|
|
90
|
+
};
|
|
91
|
+
};
|
|
92
|
+
type GlobalShareScopeMap = {
|
|
93
|
+
[instanceName: string]: ShareScopeMap;
|
|
94
|
+
};
|
|
95
|
+
type ShareInfos = {
|
|
96
|
+
[pkgName: string]: Shared[];
|
|
97
|
+
};
|
|
98
|
+
interface Options {
|
|
99
|
+
id?: string;
|
|
100
|
+
name: string;
|
|
101
|
+
version?: string;
|
|
102
|
+
remotes: Array<Remote>;
|
|
103
|
+
shared: ShareInfos;
|
|
104
|
+
plugins: Array<ModuleFederationRuntimePlugin>;
|
|
105
|
+
inBrowser: boolean;
|
|
106
|
+
shareStrategy?: ShareStrategy;
|
|
107
|
+
}
|
|
108
|
+
type UserOptions = Omit<Optional<Options, 'plugins'>, 'shared' | 'inBrowser'> & {
|
|
109
|
+
shared?: {
|
|
110
|
+
[pkgName: string]: ShareArgs | ShareArgs[];
|
|
111
|
+
};
|
|
112
|
+
};
|
|
113
|
+
type LoadModuleOptions = {
|
|
114
|
+
version?: string;
|
|
115
|
+
};
|
|
116
|
+
type RemoteEntryInitOptions = {
|
|
117
|
+
version: string;
|
|
118
|
+
shareScopeMap?: ShareScopeMap;
|
|
119
|
+
shareScopeKeys: string | string[];
|
|
120
|
+
};
|
|
121
|
+
type InitTokens = Record<string, Record<string, any>>;
|
|
122
|
+
type InitScope = InitTokens[];
|
|
123
|
+
type CallFrom = 'build' | 'runtime';
|
|
124
|
+
type RemoteEntryExports = {
|
|
125
|
+
get: (id: string) => () => Promise<Module>;
|
|
126
|
+
init: (shareScope: ShareScopeMap[string], initScope?: InitScope, remoteEntryInitOPtions?: RemoteEntryInitOptions) => void | Promise<void>;
|
|
127
|
+
};
|
|
128
|
+
//#endregion
|
|
129
|
+
export { CallFrom, GlobalShareScopeMap, HostInfo, InitScope, InitTokens, LoadModuleOptions, LoadShareExtraOptions, NoMatchedUsedExportsItem, Optional, Options, PartialOptional, Remote, RemoteEntryExports, RemoteEntryInitOptions, RemoteInfo, RemoteInfoCommon, RemoteInfoOptionalVersion, ShareArgs, ShareInfos, ShareScopeMap, ShareStrategy, Shared, SharedConfig, SharedGetter, TreeShakingArgs, UserOptions };
|
|
130
|
+
//# sourceMappingURL=config.d.ts.map
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
const require_runtime = require('../_virtual/_rolldown/runtime.cjs');
|
|
2
|
+
|
|
3
|
+
//#region src/type/index.ts
|
|
4
|
+
var type_exports = /* @__PURE__ */ require_runtime.__exportAll({});
|
|
5
|
+
|
|
6
|
+
//#endregion
|
|
7
|
+
Object.defineProperty(exports, 'type_exports', {
|
|
8
|
+
enumerable: true,
|
|
9
|
+
get: function () {
|
|
10
|
+
return type_exports;
|
|
11
|
+
}
|
|
12
|
+
});
|
|
13
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.cjs","names":[],"sources":["../../src/type/index.ts"],"sourcesContent":["export * from './config';\nexport * from './plugin';\nexport * from './preload';\n"],"mappings":""}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { ModuleFederationRuntimePlugin } from "./plugin.js";
|
|
2
|
+
import { CallFrom, GlobalShareScopeMap, HostInfo, InitScope, InitTokens, LoadModuleOptions, LoadShareExtraOptions, NoMatchedUsedExportsItem, Optional, Options, PartialOptional, Remote, RemoteEntryExports, RemoteEntryInitOptions, RemoteInfo, RemoteInfoCommon, RemoteInfoOptionalVersion, ShareArgs, ShareInfos, ShareScopeMap, ShareStrategy, Shared, SharedConfig, SharedGetter, TreeShakingArgs, UserOptions } from "./config.js";
|
|
3
|
+
import { EntryAssets, PreloadAssetResult, PreloadAssetStatus, PreloadAssets, PreloadConfig, PreloadOptions, PreloadRemoteArgs, PreloadRemoteResult, ResourceLoadContext, ResourceLoadInitiator, ResourceLoadType, depsPreloadArg } from "./preload.js";
|
|
4
|
+
|
|
5
|
+
//#region src/type/index.d.ts
|
|
6
|
+
declare namespace index_d_exports {
|
|
7
|
+
export { CallFrom, EntryAssets, GlobalShareScopeMap, HostInfo, InitScope, InitTokens, LoadModuleOptions, LoadShareExtraOptions, ModuleFederationRuntimePlugin, NoMatchedUsedExportsItem, Optional, Options, PartialOptional, PreloadAssetResult, PreloadAssetStatus, PreloadAssets, PreloadConfig, PreloadOptions, PreloadRemoteArgs, PreloadRemoteResult, Remote, RemoteEntryExports, RemoteEntryInitOptions, RemoteInfo, RemoteInfoCommon, RemoteInfoOptionalVersion, ResourceLoadContext, ResourceLoadInitiator, ResourceLoadType, ShareArgs, ShareInfos, ShareScopeMap, ShareStrategy, Shared, SharedConfig, SharedGetter, TreeShakingArgs, UserOptions, depsPreloadArg };
|
|
8
|
+
}
|
|
9
|
+
//#endregion
|
|
10
|
+
export { index_d_exports };
|
|
11
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../../src/type/index.ts"],"sourcesContent":["export * from './config';\nexport * from './plugin';\nexport * from './preload';\n"],"mappings":""}
|