@module-federation/runtime-core 2.8.2 → 2.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/core.cjs +4 -8
- package/dist/core.cjs.map +1 -1
- package/dist/core.d.ts +16 -14
- package/dist/core.js +4 -8
- 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.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.js.map +1 -1
- package/dist/module/index.cjs +11 -9
- package/dist/module/index.cjs.map +1 -1
- package/dist/module/index.d.ts +3 -2
- package/dist/module/index.js +11 -9
- package/dist/module/index.js.map +1 -1
- package/dist/plugins/snapshot/SnapshotHandler.cjs +48 -5
- package/dist/plugins/snapshot/SnapshotHandler.cjs.map +1 -1
- package/dist/plugins/snapshot/SnapshotHandler.d.ts +23 -0
- package/dist/plugins/snapshot/SnapshotHandler.js +48 -5
- package/dist/plugins/snapshot/SnapshotHandler.js.map +1 -1
- 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/index.cjs +1 -1
- package/dist/remote/index.cjs.map +1 -1
- package/dist/remote/index.d.ts +1 -0
- package/dist/remote/index.js +1 -1
- package/dist/remote/index.js.map +1 -1
- package/dist/shared/index.cjs +86 -27
- package/dist/shared/index.cjs.map +1 -1
- package/dist/shared/index.d.ts +19 -10
- package/dist/shared/index.js +86 -27
- package/dist/shared/index.js.map +1 -1
- package/dist/type/config.d.ts +9 -1
- package/dist/type/index.d.ts +3 -3
- package/dist/type/plugin.d.ts +4 -3
- package/dist/type/preload.d.ts +7 -1
- package/dist/types.d.ts +3 -3
- package/dist/utils/hooks/pluginSystem.cjs +6 -5
- package/dist/utils/hooks/pluginSystem.cjs.map +1 -1
- package/dist/utils/hooks/pluginSystem.d.ts +2 -5
- package/dist/utils/hooks/pluginSystem.js +6 -5
- package/dist/utils/hooks/pluginSystem.js.map +1 -1
- package/dist/utils/load.cjs +48 -14
- package/dist/utils/load.cjs.map +1 -1
- package/dist/utils/load.js +48 -14
- package/dist/utils/load.js.map +1 -1
- package/dist/utils/plugin.cjs +30 -7
- package/dist/utils/plugin.cjs.map +1 -1
- package/dist/utils/plugin.js +30 -7
- package/dist/utils/plugin.js.map +1 -1
- package/dist/utils/preload.cjs +21 -10
- package/dist/utils/preload.cjs.map +1 -1
- package/dist/utils/preload.d.ts +1 -1
- package/dist/utils/preload.js +21 -10
- package/dist/utils/preload.js.map +1 -1
- package/dist/utils/share.cjs +3 -2
- package/dist/utils/share.cjs.map +1 -1
- package/dist/utils/share.d.ts +3 -2
- package/dist/utils/share.js +3 -2
- package/dist/utils/share.js.map +1 -1
- package/package.json +3 -3
- package/dist/utils/hooks/index.d.ts +0 -5
package/dist/shared/index.d.ts
CHANGED
|
@@ -6,7 +6,7 @@ import { PluginSystem } from "../utils/hooks/pluginSystem.js";
|
|
|
6
6
|
import { Federation } from "../global.js";
|
|
7
7
|
import { LoadRemoteMatch } from "../remote/index.js";
|
|
8
8
|
import { ModuleFederation } from "../core.js";
|
|
9
|
-
import { CallFrom, InitScope, InitTokens, Options, ShareInfos, ShareScopeMap, ShareStrategy, Shared, UserOptions } from "../type/config.js";
|
|
9
|
+
import { CallFrom, InitScope, InitTokens, LoadShareExtraOptions, Options, ShareInfos, ShareScopeMap, ShareStrategy, Shared, SharedLoadContext, SharedLoadTrigger, UserOptions } from "../type/config.js";
|
|
10
10
|
//#region src/shared/index.d.ts
|
|
11
11
|
declare class SharedHandler {
|
|
12
12
|
host: ModuleFederation;
|
|
@@ -17,12 +17,23 @@ declare class SharedHandler {
|
|
|
17
17
|
shared: Shared;
|
|
18
18
|
origin: ModuleFederation;
|
|
19
19
|
}>;
|
|
20
|
+
afterRegisterShare: SyncHook<[{
|
|
21
|
+
pkgName: string;
|
|
22
|
+
scope: string;
|
|
23
|
+
shared: Shared;
|
|
24
|
+
previousShared?: Shared;
|
|
25
|
+
registeredShared?: Shared;
|
|
26
|
+
shareScopeMap: ShareScopeMap;
|
|
27
|
+
trigger: SharedLoadTrigger;
|
|
28
|
+
origin: ModuleFederation;
|
|
29
|
+
}], void>;
|
|
20
30
|
afterResolve: AsyncWaterfallHook<LoadRemoteMatch>;
|
|
21
31
|
beforeLoadShare: AsyncWaterfallHook<{
|
|
22
32
|
pkgName: string;
|
|
23
33
|
shareInfo?: Shared;
|
|
24
34
|
shared: Options["shared"];
|
|
25
35
|
origin: ModuleFederation;
|
|
36
|
+
loadContext?: SharedLoadContext;
|
|
26
37
|
}>;
|
|
27
38
|
loadShare: AsyncHook<[ModuleFederation, string, ShareInfos], false | void | Promise<false | void>>;
|
|
28
39
|
afterLoadShare: SyncHook<[{
|
|
@@ -32,6 +43,7 @@ declare class SharedHandler {
|
|
|
32
43
|
shared: Options["shared"];
|
|
33
44
|
shareScopeMap: ShareScopeMap;
|
|
34
45
|
lifecycle: "loadShare" | "loadShareSync";
|
|
46
|
+
loadContext?: SharedLoadContext;
|
|
35
47
|
origin: ModuleFederation;
|
|
36
48
|
}], void>;
|
|
37
49
|
errorLoadShare: SyncHook<[{
|
|
@@ -43,6 +55,7 @@ declare class SharedHandler {
|
|
|
43
55
|
origin: ModuleFederation;
|
|
44
56
|
error?: unknown;
|
|
45
57
|
recovered?: boolean;
|
|
58
|
+
loadContext?: SharedLoadContext;
|
|
46
59
|
}], void>;
|
|
47
60
|
resolveShare: SyncWaterfallHook<{
|
|
48
61
|
shareScopeMap: ShareScopeMap;
|
|
@@ -55,6 +68,7 @@ declare class SharedHandler {
|
|
|
55
68
|
shared: Shared;
|
|
56
69
|
useTreesShaking: boolean;
|
|
57
70
|
} | undefined;
|
|
71
|
+
loadContext?: SharedLoadContext;
|
|
58
72
|
}>;
|
|
59
73
|
initContainerShareScopeMap: SyncWaterfallHook<{
|
|
60
74
|
shareScope: ShareScopeMap[string];
|
|
@@ -66,6 +80,7 @@ declare class SharedHandler {
|
|
|
66
80
|
}>;
|
|
67
81
|
initTokens: InitTokens;
|
|
68
82
|
constructor(host: ModuleFederation);
|
|
83
|
+
private emitAfterRegisterShare;
|
|
69
84
|
private emitAfterLoadShare;
|
|
70
85
|
private emitErrorLoadShare;
|
|
71
86
|
registerShared(globalOptions: Options, userOptions: UserOptions): {
|
|
@@ -74,10 +89,7 @@ declare class SharedHandler {
|
|
|
74
89
|
[pkgName: string]: Shared[];
|
|
75
90
|
};
|
|
76
91
|
};
|
|
77
|
-
loadShare<T>(pkgName: string, extraOptions?:
|
|
78
|
-
customShareInfo?: Partial<Shared>;
|
|
79
|
-
resolver?: (sharedOptions: ShareInfos[string]) => Shared;
|
|
80
|
-
}): Promise<false | (() => T | undefined)>;
|
|
92
|
+
loadShare<T>(pkgName: string, extraOptions?: LoadShareExtraOptions): Promise<false | (() => T | undefined)>;
|
|
81
93
|
/**
|
|
82
94
|
* This function initializes the sharing sequence (executed only once per share scope).
|
|
83
95
|
* It accepts one argument, the name of the share scope.
|
|
@@ -87,12 +99,9 @@ declare class SharedHandler {
|
|
|
87
99
|
initScope?: InitScope;
|
|
88
100
|
from?: CallFrom;
|
|
89
101
|
strategy?: ShareStrategy;
|
|
102
|
+
context?: SharedLoadContext;
|
|
90
103
|
}): Array<Promise<void>>;
|
|
91
|
-
loadShareSync<T>(pkgName: string, extraOptions?:
|
|
92
|
-
from?: 'build' | 'runtime';
|
|
93
|
-
customShareInfo?: Partial<Shared>;
|
|
94
|
-
resolver?: (sharedOptions: ShareInfos[string]) => Shared;
|
|
95
|
-
}): () => T | never;
|
|
104
|
+
loadShareSync<T>(pkgName: string, extraOptions?: LoadShareExtraOptions): () => T | never;
|
|
96
105
|
initShareScopeMap(scopeName: string, shareScope: ShareScopeMap[string], extraOptions?: {
|
|
97
106
|
hostShareScopeMap?: ShareScopeMap;
|
|
98
107
|
}): void;
|
package/dist/shared/index.js
CHANGED
|
@@ -16,6 +16,7 @@ var SharedHandler = class {
|
|
|
16
16
|
constructor(host) {
|
|
17
17
|
this.hooks = new PluginSystem({
|
|
18
18
|
beforeRegisterShare: new SyncWaterfallHook("beforeRegisterShare"),
|
|
19
|
+
afterRegisterShare: new SyncHook("afterRegisterShare"),
|
|
19
20
|
afterResolve: new AsyncWaterfallHook("afterResolve"),
|
|
20
21
|
beforeLoadShare: new AsyncWaterfallHook("beforeLoadShare"),
|
|
21
22
|
loadShare: new AsyncHook(),
|
|
@@ -29,7 +30,15 @@ var SharedHandler = class {
|
|
|
29
30
|
this.initTokens = {};
|
|
30
31
|
this._setGlobalShareScopeMap(host.options);
|
|
31
32
|
}
|
|
32
|
-
|
|
33
|
+
emitAfterRegisterShare(pkgName, input) {
|
|
34
|
+
this.hooks.lifecycle.afterRegisterShare.emit({
|
|
35
|
+
pkgName,
|
|
36
|
+
...input,
|
|
37
|
+
shareScopeMap: this.shareScopeMap,
|
|
38
|
+
origin: this.host
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
emitAfterLoadShare({ lifecycle, pkgName, shareInfo, selectedShared, loadContext }) {
|
|
33
42
|
try {
|
|
34
43
|
this.hooks.lifecycle.afterLoadShare.emit({
|
|
35
44
|
pkgName,
|
|
@@ -38,13 +47,14 @@ var SharedHandler = class {
|
|
|
38
47
|
shared: this.host.options.shared,
|
|
39
48
|
shareScopeMap: this.shareScopeMap,
|
|
40
49
|
lifecycle,
|
|
50
|
+
loadContext,
|
|
41
51
|
origin: this.host
|
|
42
52
|
});
|
|
43
53
|
} catch (error) {
|
|
44
54
|
warn(error);
|
|
45
55
|
}
|
|
46
56
|
}
|
|
47
|
-
emitErrorLoadShare({ lifecycle, pkgName, shareInfo, error, recovered }) {
|
|
57
|
+
emitErrorLoadShare({ lifecycle, pkgName, shareInfo, error, recovered, loadContext }) {
|
|
48
58
|
try {
|
|
49
59
|
this.hooks.lifecycle.errorLoadShare.emit({
|
|
50
60
|
pkgName,
|
|
@@ -54,7 +64,8 @@ var SharedHandler = class {
|
|
|
54
64
|
lifecycle,
|
|
55
65
|
origin: this.host,
|
|
56
66
|
error,
|
|
57
|
-
recovered
|
|
67
|
+
recovered,
|
|
68
|
+
loadContext
|
|
58
69
|
});
|
|
59
70
|
} catch (hookError) {
|
|
60
71
|
warn(hookError);
|
|
@@ -70,7 +81,9 @@ var SharedHandler = class {
|
|
|
70
81
|
pkgName: sharedKey,
|
|
71
82
|
shared: sharedVal
|
|
72
83
|
});
|
|
73
|
-
|
|
84
|
+
const registeredShared = this.shareScopeMap[sc]?.[sharedKey];
|
|
85
|
+
const previousAtVersion = registeredShared?.[sharedVal.version];
|
|
86
|
+
if (!registeredShared) this.setShared({
|
|
74
87
|
pkgName: sharedKey,
|
|
75
88
|
lib: sharedVal.lib,
|
|
76
89
|
get: sharedVal.get,
|
|
@@ -78,6 +91,13 @@ var SharedHandler = class {
|
|
|
78
91
|
shared: sharedVal,
|
|
79
92
|
from: userOptions.name
|
|
80
93
|
});
|
|
94
|
+
this.emitAfterRegisterShare(sharedKey, {
|
|
95
|
+
scope: sc,
|
|
96
|
+
shared: sharedVal,
|
|
97
|
+
previousShared: previousAtVersion,
|
|
98
|
+
registeredShared: this.shareScopeMap[sc]?.[sharedKey]?.[sharedVal.version],
|
|
99
|
+
trigger: "runtime"
|
|
100
|
+
});
|
|
81
101
|
});
|
|
82
102
|
});
|
|
83
103
|
});
|
|
@@ -88,6 +108,7 @@ var SharedHandler = class {
|
|
|
88
108
|
}
|
|
89
109
|
async loadShare(pkgName, extraOptions) {
|
|
90
110
|
const { host } = this;
|
|
111
|
+
let loadContext = extraOptions?.context;
|
|
91
112
|
const shareOptions = getTargetSharedOptions({
|
|
92
113
|
pkgName,
|
|
93
114
|
extraOptions,
|
|
@@ -96,17 +117,23 @@ var SharedHandler = class {
|
|
|
96
117
|
let shareOptionsRes = shareOptions;
|
|
97
118
|
try {
|
|
98
119
|
if (shareOptions?.scope) await Promise.all(shareOptions.scope.map(async (shareScope) => {
|
|
99
|
-
await Promise.all(this.initializeSharing(shareScope, {
|
|
120
|
+
await Promise.all(this.initializeSharing(shareScope, {
|
|
121
|
+
strategy: shareOptions.strategy,
|
|
122
|
+
context: loadContext
|
|
123
|
+
}));
|
|
100
124
|
}));
|
|
101
|
-
|
|
125
|
+
const loadShareRes = await this.hooks.lifecycle.beforeLoadShare.emit({
|
|
102
126
|
pkgName,
|
|
103
127
|
shareInfo: shareOptions,
|
|
104
128
|
shared: host.options.shared,
|
|
105
|
-
origin: host
|
|
106
|
-
|
|
129
|
+
origin: host,
|
|
130
|
+
loadContext
|
|
131
|
+
});
|
|
132
|
+
shareOptionsRes = loadShareRes.shareInfo;
|
|
133
|
+
loadContext = loadShareRes.loadContext || loadContext;
|
|
107
134
|
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
135
|
const resolvedShareOptions = shareOptionsRes;
|
|
109
|
-
const { shared: registeredShared, useTreesShaking } = getRegisteredShare(this.shareScopeMap, pkgName, shareOptionsRes, this.hooks.lifecycle.resolveShare) || {};
|
|
136
|
+
const { shared: registeredShared, useTreesShaking } = getRegisteredShare(this.shareScopeMap, pkgName, shareOptionsRes, this.hooks.lifecycle.resolveShare, loadContext) || {};
|
|
110
137
|
if (registeredShared) {
|
|
111
138
|
const targetShared = directShare(registeredShared, useTreesShaking);
|
|
112
139
|
if (targetShared.lib) {
|
|
@@ -115,7 +142,8 @@ var SharedHandler = class {
|
|
|
115
142
|
lifecycle: "loadShare",
|
|
116
143
|
pkgName,
|
|
117
144
|
shareInfo: resolvedShareOptions,
|
|
118
|
-
selectedShared: registeredShared
|
|
145
|
+
selectedShared: registeredShared,
|
|
146
|
+
loadContext
|
|
119
147
|
});
|
|
120
148
|
return targetShared.lib;
|
|
121
149
|
} else if (targetShared.loading && !targetShared.loaded) {
|
|
@@ -127,7 +155,8 @@ var SharedHandler = class {
|
|
|
127
155
|
lifecycle: "loadShare",
|
|
128
156
|
pkgName,
|
|
129
157
|
shareInfo: resolvedShareOptions,
|
|
130
|
-
selectedShared: registeredShared
|
|
158
|
+
selectedShared: registeredShared,
|
|
159
|
+
loadContext
|
|
131
160
|
});
|
|
132
161
|
return factory;
|
|
133
162
|
} else {
|
|
@@ -153,7 +182,8 @@ var SharedHandler = class {
|
|
|
153
182
|
lifecycle: "loadShare",
|
|
154
183
|
pkgName,
|
|
155
184
|
shareInfo: resolvedShareOptions,
|
|
156
|
-
selectedShared: registeredShared
|
|
185
|
+
selectedShared: registeredShared,
|
|
186
|
+
loadContext
|
|
157
187
|
});
|
|
158
188
|
return factory;
|
|
159
189
|
}
|
|
@@ -163,7 +193,8 @@ var SharedHandler = class {
|
|
|
163
193
|
lifecycle: "loadShare",
|
|
164
194
|
pkgName,
|
|
165
195
|
shareInfo: resolvedShareOptions,
|
|
166
|
-
recovered: true
|
|
196
|
+
recovered: true,
|
|
197
|
+
loadContext
|
|
167
198
|
});
|
|
168
199
|
return false;
|
|
169
200
|
}
|
|
@@ -174,7 +205,7 @@ var SharedHandler = class {
|
|
|
174
205
|
targetShared.lib = factory;
|
|
175
206
|
targetShared.loaded = true;
|
|
176
207
|
addUseIn(targetShared, host.options.name);
|
|
177
|
-
const { shared: gShared, useTreesShaking: gUseTreeShaking } = getRegisteredShare(this.shareScopeMap, pkgName, resolvedShareOptions, this.hooks.lifecycle.resolveShare) || {};
|
|
208
|
+
const { shared: gShared, useTreesShaking: gUseTreeShaking } = getRegisteredShare(this.shareScopeMap, pkgName, resolvedShareOptions, this.hooks.lifecycle.resolveShare, loadContext) || {};
|
|
178
209
|
if (gShared) {
|
|
179
210
|
const targetGShared = directShare(gShared, gUseTreeShaking);
|
|
180
211
|
targetGShared.lib = factory;
|
|
@@ -198,7 +229,8 @@ var SharedHandler = class {
|
|
|
198
229
|
lifecycle: "loadShare",
|
|
199
230
|
pkgName,
|
|
200
231
|
shareInfo: resolvedShareOptions,
|
|
201
|
-
selectedShared: resolvedShareOptions
|
|
232
|
+
selectedShared: resolvedShareOptions,
|
|
233
|
+
loadContext
|
|
202
234
|
});
|
|
203
235
|
return factory;
|
|
204
236
|
}
|
|
@@ -207,7 +239,8 @@ var SharedHandler = class {
|
|
|
207
239
|
lifecycle: "loadShare",
|
|
208
240
|
pkgName,
|
|
209
241
|
shareInfo: shareOptionsRes,
|
|
210
|
-
error: shareError
|
|
242
|
+
error: shareError,
|
|
243
|
+
loadContext
|
|
211
244
|
});
|
|
212
245
|
throw shareError;
|
|
213
246
|
}
|
|
@@ -221,6 +254,7 @@ var SharedHandler = class {
|
|
|
221
254
|
const { host } = this;
|
|
222
255
|
const from = extraOptions?.from;
|
|
223
256
|
const strategy = extraOptions?.strategy;
|
|
257
|
+
const trigger = extraOptions?.context?.trigger || from || "runtime";
|
|
224
258
|
let initScope = extraOptions?.initScope;
|
|
225
259
|
const promises = [];
|
|
226
260
|
if (from !== "build") {
|
|
@@ -239,15 +273,29 @@ var SharedHandler = class {
|
|
|
239
273
|
const { version, eager } = shared;
|
|
240
274
|
scope[name] = scope[name] || {};
|
|
241
275
|
const versions = scope[name];
|
|
242
|
-
const
|
|
276
|
+
const existingShared = versions[version];
|
|
277
|
+
const activeVersion = existingShared && directShare(existingShared);
|
|
243
278
|
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;
|
|
279
|
+
if (Boolean(!activeVersion || activeVersion.strategy !== "loaded-first" && !activeVersion.loaded && (Boolean(!eager) !== !activeVersionEager ? eager : hostName > versions[version].from))) versions[version] = shared;
|
|
280
|
+
this.emitAfterRegisterShare(name, {
|
|
281
|
+
scope: shareScopeName,
|
|
282
|
+
shared,
|
|
283
|
+
previousShared: existingShared,
|
|
284
|
+
registeredShared: versions[version],
|
|
285
|
+
trigger
|
|
286
|
+
});
|
|
245
287
|
};
|
|
246
288
|
const initRemoteModule = async (key) => {
|
|
247
289
|
const { module } = await host.remoteHandler.getRemoteModuleAndOptions({ id: key });
|
|
248
290
|
let remoteEntryExports = void 0;
|
|
291
|
+
const resourceContext = {
|
|
292
|
+
initiator: "loadShare",
|
|
293
|
+
id: key,
|
|
294
|
+
resourceType: "remoteEntry",
|
|
295
|
+
url: module.remoteInfo.entry
|
|
296
|
+
};
|
|
249
297
|
try {
|
|
250
|
-
remoteEntryExports = await module.getEntry();
|
|
298
|
+
remoteEntryExports = await module.getEntry(void 0, resourceContext);
|
|
251
299
|
} catch (error) {
|
|
252
300
|
remoteEntryExports = await host.remoteHandler.hooks.lifecycle.errorLoadRemote.emit({
|
|
253
301
|
id: key,
|
|
@@ -261,7 +309,7 @@ var SharedHandler = class {
|
|
|
261
309
|
} finally {
|
|
262
310
|
if (remoteEntryExports?.init && !module.initing) {
|
|
263
311
|
module.remoteEntryExports = remoteEntryExports;
|
|
264
|
-
await module.init(void 0, void 0, initScope);
|
|
312
|
+
await module.init(void 0, void 0, initScope, void 0, resourceContext);
|
|
265
313
|
}
|
|
266
314
|
}
|
|
267
315
|
};
|
|
@@ -277,6 +325,7 @@ var SharedHandler = class {
|
|
|
277
325
|
}
|
|
278
326
|
loadShareSync(pkgName, extraOptions) {
|
|
279
327
|
const { host } = this;
|
|
328
|
+
const loadContext = extraOptions?.context;
|
|
280
329
|
const shareOptions = getTargetSharedOptions({
|
|
281
330
|
pkgName,
|
|
282
331
|
extraOptions,
|
|
@@ -284,9 +333,13 @@ var SharedHandler = class {
|
|
|
284
333
|
});
|
|
285
334
|
try {
|
|
286
335
|
if (shareOptions?.scope) shareOptions.scope.forEach((shareScope) => {
|
|
287
|
-
this.initializeSharing(shareScope, {
|
|
336
|
+
this.initializeSharing(shareScope, {
|
|
337
|
+
strategy: shareOptions.strategy,
|
|
338
|
+
from: extraOptions?.from,
|
|
339
|
+
context: loadContext
|
|
340
|
+
});
|
|
288
341
|
});
|
|
289
|
-
const { shared: registeredShared } = getRegisteredShare(this.shareScopeMap, pkgName, shareOptions, this.hooks.lifecycle.resolveShare) || {};
|
|
342
|
+
const { shared: registeredShared } = getRegisteredShare(this.shareScopeMap, pkgName, shareOptions, this.hooks.lifecycle.resolveShare, loadContext) || {};
|
|
290
343
|
if (registeredShared) {
|
|
291
344
|
if (typeof registeredShared.lib === "function") {
|
|
292
345
|
addUseIn(registeredShared, host.options.name);
|
|
@@ -298,7 +351,8 @@ var SharedHandler = class {
|
|
|
298
351
|
lifecycle: "loadShareSync",
|
|
299
352
|
pkgName,
|
|
300
353
|
shareInfo: shareOptions,
|
|
301
|
-
selectedShared: registeredShared
|
|
354
|
+
selectedShared: registeredShared,
|
|
355
|
+
loadContext
|
|
302
356
|
});
|
|
303
357
|
return registeredShared.lib;
|
|
304
358
|
}
|
|
@@ -317,7 +371,8 @@ var SharedHandler = class {
|
|
|
317
371
|
lifecycle: "loadShareSync",
|
|
318
372
|
pkgName,
|
|
319
373
|
shareInfo: shareOptions,
|
|
320
|
-
selectedShared: registeredShared
|
|
374
|
+
selectedShared: registeredShared,
|
|
375
|
+
loadContext
|
|
321
376
|
});
|
|
322
377
|
return module;
|
|
323
378
|
}
|
|
@@ -329,7 +384,8 @@ var SharedHandler = class {
|
|
|
329
384
|
lifecycle: "loadShareSync",
|
|
330
385
|
pkgName,
|
|
331
386
|
shareInfo: shareOptions,
|
|
332
|
-
selectedShared: shareOptions
|
|
387
|
+
selectedShared: shareOptions,
|
|
388
|
+
loadContext
|
|
333
389
|
});
|
|
334
390
|
return shareOptions.lib;
|
|
335
391
|
}
|
|
@@ -351,7 +407,8 @@ var SharedHandler = class {
|
|
|
351
407
|
lifecycle: "loadShareSync",
|
|
352
408
|
pkgName,
|
|
353
409
|
shareInfo: shareOptions,
|
|
354
|
-
selectedShared: shareOptions
|
|
410
|
+
selectedShared: shareOptions,
|
|
411
|
+
loadContext
|
|
355
412
|
});
|
|
356
413
|
return shareOptions.lib;
|
|
357
414
|
}
|
|
@@ -364,7 +421,8 @@ var SharedHandler = class {
|
|
|
364
421
|
lifecycle: "loadShareSync",
|
|
365
422
|
pkgName,
|
|
366
423
|
shareInfo: shareOptions,
|
|
367
|
-
error: shareError
|
|
424
|
+
error: shareError,
|
|
425
|
+
loadContext
|
|
368
426
|
});
|
|
369
427
|
throw shareError;
|
|
370
428
|
}
|
|
@@ -391,6 +449,7 @@ var SharedHandler = class {
|
|
|
391
449
|
merge(targetShared, "loaded", loaded);
|
|
392
450
|
merge(targetShared, "loading", loading);
|
|
393
451
|
merge(targetShared, "get", get);
|
|
452
|
+
merge(targetShared, "lib", lib);
|
|
394
453
|
};
|
|
395
454
|
scopes.forEach((sc) => {
|
|
396
455
|
if (!this.shareScopeMap[sc]) this.shareScopeMap[sc] = {};
|
package/dist/shared/index.js.map
CHANGED
|
@@ -1 +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 type { 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":"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"}
|
|
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 LoadShareExtraOptions,\n SharedLoadContext,\n SharedLoadTrigger,\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 type { 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 afterRegisterShare: new SyncHook<\n [\n {\n pkgName: string;\n scope: string;\n shared: Shared;\n previousShared?: Shared;\n registeredShared?: Shared;\n shareScopeMap: ShareScopeMap;\n trigger: SharedLoadTrigger;\n origin: ModuleFederation;\n },\n ],\n void\n >('afterRegisterShare'),\n afterResolve: new AsyncWaterfallHook<LoadRemoteMatch>('afterResolve'),\n beforeLoadShare: new AsyncWaterfallHook<{\n pkgName: string;\n shareInfo?: Shared;\n shared: Options['shared'];\n origin: ModuleFederation;\n loadContext?: SharedLoadContext;\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 loadContext?: SharedLoadContext;\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 loadContext?: SharedLoadContext;\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 loadContext?: SharedLoadContext;\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 emitAfterRegisterShare(\n pkgName: string,\n input: {\n scope: string;\n shared: Shared;\n previousShared?: Shared;\n registeredShared?: Shared;\n trigger: SharedLoadTrigger;\n },\n ): void {\n this.hooks.lifecycle.afterRegisterShare.emit({\n pkgName,\n ...input,\n shareScopeMap: this.shareScopeMap,\n origin: this.host,\n });\n }\n\n private emitAfterLoadShare({\n lifecycle,\n pkgName,\n shareInfo,\n selectedShared,\n loadContext,\n }: {\n lifecycle: 'loadShare' | 'loadShareSync';\n pkgName: string;\n shareInfo?: Partial<Shared>;\n selectedShared?: Partial<Shared>;\n loadContext?: SharedLoadContext;\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 loadContext,\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 loadContext,\n }: {\n lifecycle: 'loadShare' | 'loadShareSync';\n pkgName: string;\n shareInfo?: Partial<Shared>;\n error?: unknown;\n recovered?: boolean;\n loadContext?: SharedLoadContext;\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 loadContext,\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 const previousAtVersion = registeredShared?.[sharedVal.version];\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 this.emitAfterRegisterShare(sharedKey, {\n scope: sc,\n shared: sharedVal,\n previousShared: previousAtVersion,\n registeredShared:\n this.shareScopeMap[sc]?.[sharedKey]?.[sharedVal.version],\n trigger: 'runtime',\n });\n });\n });\n });\n\n return {\n newShareInfos,\n allShareInfos,\n };\n }\n\n async loadShare<T>(\n pkgName: string,\n extraOptions?: LoadShareExtraOptions,\n ): Promise<false | (() => T | undefined)> {\n const { host } = this;\n let loadContext = extraOptions?.context;\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 context: loadContext,\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 loadContext,\n });\n\n shareOptionsRes = loadShareRes.shareInfo;\n loadContext = loadShareRes.loadContext || loadContext;\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 loadContext,\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 loadContext,\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 loadContext,\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 loadContext,\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 loadContext,\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 loadContext,\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 loadContext,\n });\n return factory;\n }\n } catch (shareError) {\n this.emitErrorLoadShare({\n lifecycle: 'loadShare',\n pkgName,\n shareInfo: shareOptionsRes,\n error: shareError,\n loadContext,\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 context?: SharedLoadContext;\n },\n ): Array<Promise<void>> {\n const { host } = this;\n const from = extraOptions?.from;\n const strategy = extraOptions?.strategy;\n const trigger: SharedLoadTrigger =\n extraOptions?.context?.trigger || from || 'runtime';\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 existingShared = versions[version];\n const activeVersion: Shared =\n existingShared && (directShare(existingShared) as Shared);\n const activeVersionEager = Boolean(\n activeVersion &&\n (('eager' in activeVersion && activeVersion.eager) ||\n ('shareConfig' in activeVersion && activeVersion.shareConfig?.eager)),\n );\n const shouldReplace = Boolean(\n !activeVersion ||\n (activeVersion.strategy !== 'loaded-first' &&\n !activeVersion.loaded &&\n (Boolean(!eager) !== !activeVersionEager\n ? eager\n : hostName > versions[version].from)),\n );\n if (shouldReplace) {\n versions[version] = shared;\n }\n this.emitAfterRegisterShare(name, {\n scope: shareScopeName,\n shared,\n previousShared: existingShared,\n registeredShared: versions[version],\n trigger,\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 const resourceContext = {\n initiator: 'loadShare' as const,\n id: key,\n resourceType: 'remoteEntry' as const,\n url: module.remoteInfo.entry,\n };\n try {\n remoteEntryExports = await module.getEntry(undefined, resourceContext);\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(\n undefined,\n undefined,\n initScope,\n undefined,\n resourceContext,\n );\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?: LoadShareExtraOptions,\n ): () => T | never {\n const { host } = this;\n const loadContext = extraOptions?.context;\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 from: extraOptions?.from,\n context: loadContext,\n });\n });\n }\n const { shared: registeredShared } =\n getRegisteredShare(\n this.shareScopeMap,\n pkgName,\n shareOptions,\n this.hooks.lifecycle.resolveShare,\n loadContext,\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 loadContext,\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 loadContext,\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 loadContext,\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 loadContext,\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 loadContext,\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 merge(targetShared, 'lib', lib);\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":"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"}
|
package/dist/type/config.d.ts
CHANGED
|
@@ -16,9 +16,17 @@ type RemoteInfoOptionalVersion = {
|
|
|
16
16
|
} & RemoteInfoCommon;
|
|
17
17
|
type Remote = (RemoteWithEntry | RemoteWithVersion) & RemoteInfoCommon;
|
|
18
18
|
type LoadShareExtraOptions = {
|
|
19
|
+
from?: CallFrom;
|
|
19
20
|
customShareInfo?: Partial<Shared>;
|
|
20
21
|
resolver?: (sharedOptions: ShareInfos[string]) => Shared;
|
|
22
|
+
context?: SharedLoadContext;
|
|
21
23
|
};
|
|
24
|
+
type SharedLoadTrigger = CallFrom | 'container-init';
|
|
25
|
+
interface SharedLoadContext {
|
|
26
|
+
trigger?: SharedLoadTrigger;
|
|
27
|
+
moduleId?: string | number;
|
|
28
|
+
chunkId?: string | number;
|
|
29
|
+
}
|
|
22
30
|
interface RemoteInfo {
|
|
23
31
|
alias?: string;
|
|
24
32
|
name: string;
|
|
@@ -126,5 +134,5 @@ type RemoteEntryExports = {
|
|
|
126
134
|
init: (shareScope: ShareScopeMap[string], initScope?: InitScope, remoteEntryInitOPtions?: RemoteEntryInitOptions) => void | Promise<void>;
|
|
127
135
|
};
|
|
128
136
|
//#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 };
|
|
137
|
+
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, SharedLoadContext, SharedLoadTrigger, TreeShakingArgs, UserOptions };
|
|
130
138
|
//# sourceMappingURL=config.d.ts.map
|
package/dist/type/index.d.ts
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
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";
|
|
1
|
+
import { ModuleFederationRuntimePlugin, RuntimePluginHooks } 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, SharedLoadContext, SharedLoadTrigger, TreeShakingArgs, UserOptions } from "./config.js";
|
|
3
3
|
import { EntryAssets, PreloadAssetResult, PreloadAssetStatus, PreloadAssets, PreloadConfig, PreloadOptions, PreloadRemoteArgs, PreloadRemoteResult, ResourceLoadContext, ResourceLoadInitiator, ResourceLoadType, depsPreloadArg } from "./preload.js";
|
|
4
4
|
|
|
5
5
|
//#region src/type/index.d.ts
|
|
6
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 };
|
|
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, RuntimePluginHooks, ShareArgs, ShareInfos, ShareScopeMap, ShareStrategy, Shared, SharedConfig, SharedGetter, SharedLoadContext, SharedLoadTrigger, TreeShakingArgs, UserOptions, depsPreloadArg };
|
|
8
8
|
}
|
|
9
9
|
//#endregion
|
|
10
10
|
export { index_d_exports };
|
package/dist/type/plugin.d.ts
CHANGED
|
@@ -17,11 +17,12 @@ type SharedLifeCycle = SharedHandler['hooks']['lifecycle'];
|
|
|
17
17
|
type SharedLifeCycleCyclePartial = Partial<{ [k in keyof SharedLifeCycle]: Parameters<SharedLifeCycle[k]['on']>[0] }>;
|
|
18
18
|
type RemoteLifeCycle = RemoteHandler['hooks']['lifecycle'];
|
|
19
19
|
type RemoteLifeCycleCyclePartial = Partial<{ [k in keyof RemoteLifeCycle]: Parameters<RemoteLifeCycle[k]['on']>[0] }>;
|
|
20
|
-
type
|
|
20
|
+
type RuntimePluginHooks = CoreLifeCyclePartial & SnapshotLifeCycleCyclePartial & SharedLifeCycleCyclePartial & RemoteLifeCycleCyclePartial & ModuleLifeCycleCyclePartial & ModuleBridgeLifeCycleCyclePartial;
|
|
21
|
+
type ModuleFederationRuntimePlugin = RuntimePluginHooks & {
|
|
21
22
|
name: string;
|
|
22
23
|
version?: string;
|
|
23
|
-
apply?: (instance: ModuleFederation) => void;
|
|
24
|
+
apply?: (instance: ModuleFederation) => void | RuntimePluginHooks;
|
|
24
25
|
};
|
|
25
26
|
//#endregion
|
|
26
|
-
export { ModuleFederationRuntimePlugin };
|
|
27
|
+
export { ModuleFederationRuntimePlugin, RuntimePluginHooks };
|
|
27
28
|
//# sourceMappingURL=plugin.d.ts.map
|
package/dist/type/preload.d.ts
CHANGED
|
@@ -9,19 +9,25 @@ interface PreloadRemoteArgs {
|
|
|
9
9
|
share?: boolean;
|
|
10
10
|
depsRemote?: boolean | Array<depsPreloadArg>;
|
|
11
11
|
filter?: (assetUrl: string) => boolean;
|
|
12
|
+
/**
|
|
13
|
+
* Record preloaded JS and CSS URLs to skip duplicate resource loading.
|
|
14
|
+
* @default true
|
|
15
|
+
*/
|
|
16
|
+
recordPreloadedAssets?: boolean;
|
|
12
17
|
}
|
|
13
18
|
type PreloadConfig = PreloadRemoteArgs;
|
|
14
19
|
type PreloadOptions = Array<{
|
|
15
20
|
remote: Remote;
|
|
16
21
|
preloadConfig: PreloadConfig;
|
|
17
22
|
}>;
|
|
18
|
-
type ResourceLoadInitiator = 'loadRemote' | 'preloadRemote';
|
|
23
|
+
type ResourceLoadInitiator = 'loadRemote' | 'preloadRemote' | 'loadShare';
|
|
19
24
|
type ResourceLoadType = 'manifest' | 'remoteEntry' | 'js' | 'css';
|
|
20
25
|
interface ResourceLoadContext {
|
|
21
26
|
initiator: ResourceLoadInitiator;
|
|
22
27
|
id: string;
|
|
23
28
|
resourceType: ResourceLoadType;
|
|
24
29
|
url?: string;
|
|
30
|
+
expose?: string;
|
|
25
31
|
}
|
|
26
32
|
type PreloadAssetStatus = 'success' | 'error' | 'timeout' | 'cached';
|
|
27
33
|
interface PreloadAssetResult {
|
package/dist/types.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { ModuleFederationRuntimePlugin } from "./type/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 "./type/config.js";
|
|
1
|
+
import { ModuleFederationRuntimePlugin, RuntimePluginHooks } from "./type/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, SharedLoadContext, SharedLoadTrigger, TreeShakingArgs, UserOptions } from "./type/config.js";
|
|
3
3
|
import { EntryAssets, PreloadAssetResult, PreloadAssetStatus, PreloadAssets, PreloadConfig, PreloadOptions, PreloadRemoteArgs, PreloadRemoteResult, ResourceLoadContext, ResourceLoadInitiator, ResourceLoadType, depsPreloadArg } from "./type/preload.js";
|
|
4
|
-
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 };
|
|
4
|
+
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, RuntimePluginHooks, ShareArgs, ShareInfos, ShareScopeMap, ShareStrategy, Shared, SharedConfig, SharedGetter, SharedLoadContext, SharedLoadTrigger, TreeShakingArgs, UserOptions, depsPreloadArg };
|