@module-federation/runtime-core 0.0.0-perf-devtools-20260107043700 → 0.0.0-perf-website-code-usage-20260914033703

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.
Files changed (221) hide show
  1. package/README.md +1 -1
  2. package/dist/_virtual/_rolldown/runtime.cjs +19 -0
  3. package/dist/_virtual/_rolldown/runtime.js +18 -0
  4. package/dist/constant.cjs +9 -0
  5. package/dist/constant.cjs.map +1 -0
  6. package/dist/constant.js +7 -0
  7. package/dist/constant.js.map +1 -0
  8. package/dist/core.cjs +150 -0
  9. package/dist/core.cjs.map +1 -0
  10. package/dist/core.d.ts +199 -0
  11. package/dist/core.js +150 -0
  12. package/dist/core.js.map +1 -0
  13. package/dist/global.cjs +175 -0
  14. package/dist/global.cjs.map +1 -0
  15. package/dist/global.d.ts +46 -0
  16. package/dist/global.js +155 -0
  17. package/dist/global.js.map +1 -0
  18. package/dist/helpers.cjs +44 -0
  19. package/dist/helpers.cjs.map +1 -0
  20. package/dist/helpers.d.ts +30 -0
  21. package/dist/helpers.js +44 -0
  22. package/dist/helpers.js.map +1 -0
  23. package/dist/index.cjs +62 -0
  24. package/dist/index.cjs.map +1 -0
  25. package/dist/index.d.ts +30 -1
  26. package/dist/index.js +22 -0
  27. package/dist/index.js.map +1 -0
  28. package/dist/module/index.cjs +268 -0
  29. package/dist/module/index.cjs.map +1 -0
  30. package/dist/module/index.d.ts +33 -0
  31. package/dist/module/index.js +268 -0
  32. package/dist/module/index.js.map +1 -0
  33. package/dist/plugins/generate-preload-assets.cjs +182 -0
  34. package/dist/plugins/generate-preload-assets.cjs.map +1 -0
  35. package/dist/plugins/generate-preload-assets.js +182 -0
  36. package/dist/plugins/generate-preload-assets.js.map +1 -0
  37. package/dist/plugins/snapshot/SnapshotHandler.cjs +258 -0
  38. package/dist/plugins/snapshot/SnapshotHandler.cjs.map +1 -0
  39. package/dist/plugins/snapshot/SnapshotHandler.d.ts +92 -0
  40. package/dist/plugins/snapshot/SnapshotHandler.js +257 -0
  41. package/dist/plugins/snapshot/SnapshotHandler.js.map +1 -0
  42. package/dist/plugins/snapshot/disabled.cjs +13 -0
  43. package/dist/plugins/snapshot/disabled.cjs.map +1 -0
  44. package/dist/plugins/snapshot/disabled.js +13 -0
  45. package/dist/plugins/snapshot/disabled.js.map +1 -0
  46. package/dist/plugins/snapshot/index.cjs +77 -0
  47. package/dist/plugins/snapshot/index.cjs.map +1 -0
  48. package/dist/plugins/snapshot/index.js +76 -0
  49. package/dist/plugins/snapshot/index.js.map +1 -0
  50. package/dist/remote/disabled.cjs +38 -0
  51. package/dist/remote/disabled.cjs.map +1 -0
  52. package/dist/remote/disabled.js +37 -0
  53. package/dist/remote/disabled.js.map +1 -0
  54. package/dist/remote/index.cjs +458 -0
  55. package/dist/remote/index.cjs.map +1 -0
  56. package/dist/remote/index.d.ts +147 -0
  57. package/dist/remote/index.js +458 -0
  58. package/dist/remote/index.js.map +1 -0
  59. package/dist/shared/disabled.cjs +33 -0
  60. package/dist/shared/disabled.cjs.map +1 -0
  61. package/dist/shared/disabled.js +33 -0
  62. package/dist/shared/disabled.js.map +1 -0
  63. package/dist/shared/index.cjs +477 -0
  64. package/dist/shared/index.cjs.map +1 -0
  65. package/dist/shared/index.d.ts +113 -0
  66. package/dist/shared/index.js +477 -0
  67. package/dist/shared/index.js.map +1 -0
  68. package/dist/type/config.d.ts +138 -0
  69. package/dist/type/index.cjs +13 -0
  70. package/dist/type/index.cjs.map +1 -0
  71. package/dist/type/index.d.ts +11 -0
  72. package/dist/type/index.js +8 -0
  73. package/dist/type/index.js.map +1 -0
  74. package/dist/type/plugin.d.ts +28 -0
  75. package/dist/type/preload.d.ts +60 -0
  76. package/dist/types.cjs +0 -0
  77. package/dist/types.d.ts +4 -1
  78. package/dist/types.js +1 -0
  79. package/dist/utils/context.cjs +45 -0
  80. package/dist/utils/context.cjs.map +1 -0
  81. package/dist/utils/context.d.ts +1 -0
  82. package/dist/utils/context.js +44 -0
  83. package/dist/utils/context.js.map +1 -0
  84. package/dist/utils/env.cjs +10 -0
  85. package/dist/utils/env.cjs.map +1 -0
  86. package/dist/utils/env.d.ts +1 -0
  87. package/dist/utils/env.js +10 -0
  88. package/dist/utils/env.js.map +1 -0
  89. package/dist/utils/hooks/asyncHook.cjs +26 -0
  90. package/dist/utils/hooks/asyncHook.cjs.map +1 -0
  91. package/dist/utils/hooks/asyncHook.d.ts +10 -0
  92. package/dist/utils/hooks/asyncHook.js +26 -0
  93. package/dist/utils/hooks/asyncHook.js.map +1 -0
  94. package/dist/utils/hooks/asyncWaterfallHooks.cjs +44 -0
  95. package/dist/utils/hooks/asyncWaterfallHooks.cjs.map +1 -0
  96. package/dist/utils/hooks/asyncWaterfallHooks.d.ts +12 -0
  97. package/dist/utils/hooks/asyncWaterfallHooks.js +44 -0
  98. package/dist/utils/hooks/asyncWaterfallHooks.js.map +1 -0
  99. package/dist/utils/hooks/index.cjs +5 -0
  100. package/dist/utils/hooks/index.js +7 -0
  101. package/dist/utils/hooks/pluginSystem.cjs +38 -0
  102. package/dist/utils/hooks/pluginSystem.cjs.map +1 -0
  103. package/dist/utils/hooks/pluginSystem.d.ts +16 -0
  104. package/dist/utils/hooks/pluginSystem.js +38 -0
  105. package/dist/utils/hooks/pluginSystem.js.map +1 -0
  106. package/dist/utils/hooks/syncHook.cjs +37 -0
  107. package/dist/utils/hooks/syncHook.cjs.map +1 -0
  108. package/dist/utils/hooks/syncHook.d.ts +16 -0
  109. package/dist/utils/hooks/syncHook.js +36 -0
  110. package/dist/utils/hooks/syncHook.js.map +1 -0
  111. package/dist/utils/hooks/syncWaterfallHook.cjs +40 -0
  112. package/dist/utils/hooks/syncWaterfallHook.cjs.map +1 -0
  113. package/dist/utils/hooks/syncWaterfallHook.d.ts +11 -0
  114. package/dist/utils/hooks/syncWaterfallHook.js +39 -0
  115. package/dist/utils/hooks/syncWaterfallHook.js.map +1 -0
  116. package/dist/utils/index.cjs +8 -0
  117. package/dist/utils/index.d.ts +4 -0
  118. package/dist/utils/index.js +9 -0
  119. package/dist/utils/load.cjs +280 -0
  120. package/dist/utils/load.cjs.map +1 -0
  121. package/dist/utils/load.d.ts +16 -0
  122. package/dist/utils/load.js +277 -0
  123. package/dist/utils/load.js.map +1 -0
  124. package/dist/utils/logger.cjs +34 -0
  125. package/dist/utils/logger.cjs.map +1 -0
  126. package/dist/utils/logger.d.ts +10 -0
  127. package/dist/utils/logger.js +31 -0
  128. package/dist/utils/logger.js.map +1 -0
  129. package/dist/utils/manifest.cjs +56 -0
  130. package/dist/utils/manifest.cjs.map +1 -0
  131. package/dist/utils/manifest.d.ts +10 -0
  132. package/dist/utils/manifest.js +53 -0
  133. package/dist/utils/manifest.js.map +1 -0
  134. package/dist/utils/plugin.cjs +50 -0
  135. package/dist/utils/plugin.cjs.map +1 -0
  136. package/dist/utils/plugin.d.ts +1 -0
  137. package/dist/utils/plugin.js +50 -0
  138. package/dist/utils/plugin.js.map +1 -0
  139. package/dist/utils/preload.cjs +221 -0
  140. package/dist/utils/preload.cjs.map +1 -0
  141. package/dist/utils/preload.d.ts +8 -0
  142. package/dist/utils/preload.js +218 -0
  143. package/dist/utils/preload.js.map +1 -0
  144. package/dist/utils/semver/compare.cjs +48 -0
  145. package/dist/utils/semver/compare.cjs.map +1 -0
  146. package/dist/utils/semver/compare.js +47 -0
  147. package/dist/utils/semver/compare.js.map +1 -0
  148. package/dist/utils/semver/constants.cjs +41 -0
  149. package/dist/utils/semver/constants.cjs.map +1 -0
  150. package/dist/utils/semver/constants.js +31 -0
  151. package/dist/utils/semver/constants.js.map +1 -0
  152. package/dist/utils/semver/index.cjs +68 -0
  153. package/dist/utils/semver/index.cjs.map +1 -0
  154. package/dist/utils/semver/index.d.ts +5 -0
  155. package/dist/utils/semver/index.js +68 -0
  156. package/dist/utils/semver/index.js.map +1 -0
  157. package/dist/utils/semver/parser.cjs +104 -0
  158. package/dist/utils/semver/parser.cjs.map +1 -0
  159. package/dist/utils/semver/parser.js +96 -0
  160. package/dist/utils/semver/parser.js.map +1 -0
  161. package/dist/utils/semver/utils.cjs +28 -0
  162. package/dist/utils/semver/utils.cjs.map +1 -0
  163. package/dist/utils/semver/utils.js +24 -0
  164. package/dist/utils/semver/utils.js.map +1 -0
  165. package/dist/utils/share.cjs +285 -0
  166. package/dist/utils/share.cjs.map +1 -0
  167. package/dist/utils/share.d.ts +24 -0
  168. package/dist/utils/share.js +279 -0
  169. package/dist/utils/share.js.map +1 -0
  170. package/dist/utils/tool.cjs +82 -0
  171. package/dist/utils/tool.cjs.map +1 -0
  172. package/dist/utils/tool.d.ts +8 -0
  173. package/dist/utils/tool.js +71 -0
  174. package/dist/utils/tool.js.map +1 -0
  175. package/package.json +16 -9
  176. package/dist/index.cjs.cjs +0 -3226
  177. package/dist/index.cjs.cjs.map +0 -1
  178. package/dist/index.cjs.d.ts +0 -1
  179. package/dist/index.esm.js +0 -3202
  180. package/dist/index.esm.js.map +0 -1
  181. package/dist/src/constant.d.ts +0 -2
  182. package/dist/src/core.d.ts +0 -115
  183. package/dist/src/global.d.ts +0 -42
  184. package/dist/src/helpers.d.ts +0 -38
  185. package/dist/src/index.d.ts +0 -14
  186. package/dist/src/module/index.d.ts +0 -22
  187. package/dist/src/plugins/generate-preload-assets.d.ts +0 -8
  188. package/dist/src/plugins/snapshot/SnapshotHandler.d.ts +0 -60
  189. package/dist/src/plugins/snapshot/index.d.ts +0 -5
  190. package/dist/src/remote/index.d.ts +0 -109
  191. package/dist/src/shared/index.d.ts +0 -66
  192. package/dist/src/type/config.d.ts +0 -115
  193. package/dist/src/type/index.d.ts +0 -3
  194. package/dist/src/type/plugin.d.ts +0 -35
  195. package/dist/src/type/preload.d.ts +0 -26
  196. package/dist/src/types.d.ts +0 -1
  197. package/dist/src/utils/env.d.ts +0 -3
  198. package/dist/src/utils/hooks/asyncHook.d.ts +0 -6
  199. package/dist/src/utils/hooks/asyncWaterfallHooks.d.ts +0 -10
  200. package/dist/src/utils/hooks/index.d.ts +0 -6
  201. package/dist/src/utils/hooks/pluginSystem.d.ts +0 -16
  202. package/dist/src/utils/hooks/syncHook.d.ts +0 -12
  203. package/dist/src/utils/hooks/syncWaterfallHook.d.ts +0 -9
  204. package/dist/src/utils/index.d.ts +0 -6
  205. package/dist/src/utils/load.d.ts +0 -11
  206. package/dist/src/utils/logger.d.ts +0 -6
  207. package/dist/src/utils/manifest.d.ts +0 -7
  208. package/dist/src/utils/plugin.d.ts +0 -3
  209. package/dist/src/utils/preload.d.ts +0 -6
  210. package/dist/src/utils/semver/compare.d.ts +0 -9
  211. package/dist/src/utils/semver/constants.d.ts +0 -10
  212. package/dist/src/utils/semver/index.d.ts +0 -2
  213. package/dist/src/utils/semver/parser.d.ts +0 -9
  214. package/dist/src/utils/semver/utils.d.ts +0 -11
  215. package/dist/src/utils/share.d.ts +0 -27
  216. package/dist/src/utils/tool.d.ts +0 -18
  217. package/dist/types.cjs.cjs +0 -3
  218. package/dist/types.cjs.cjs.map +0 -1
  219. package/dist/types.cjs.d.ts +0 -1
  220. package/dist/types.esm.js +0 -2
  221. package/dist/types.esm.js.map +0 -1
@@ -0,0 +1,477 @@
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
+ afterRegisterShare: new SyncHook("afterRegisterShare"),
20
+ afterResolve: new AsyncWaterfallHook("afterResolve"),
21
+ beforeLoadShare: new AsyncWaterfallHook("beforeLoadShare"),
22
+ loadShare: new AsyncHook(),
23
+ afterLoadShare: new SyncHook("afterLoadShare"),
24
+ errorLoadShare: new SyncHook("errorLoadShare"),
25
+ resolveShare: new SyncWaterfallHook("resolveShare"),
26
+ initContainerShareScopeMap: new SyncWaterfallHook("initContainerShareScopeMap")
27
+ });
28
+ this.host = host;
29
+ this.shareScopeMap = {};
30
+ this.initTokens = {};
31
+ this._setGlobalShareScopeMap(host.options);
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 }) {
42
+ try {
43
+ this.hooks.lifecycle.afterLoadShare.emit({
44
+ pkgName,
45
+ shareInfo,
46
+ selectedShared,
47
+ shared: this.host.options.shared,
48
+ shareScopeMap: this.shareScopeMap,
49
+ lifecycle,
50
+ loadContext,
51
+ origin: this.host
52
+ });
53
+ } catch (error) {
54
+ warn(error);
55
+ }
56
+ }
57
+ emitErrorLoadShare({ lifecycle, pkgName, shareInfo, error, recovered, loadContext }) {
58
+ try {
59
+ this.hooks.lifecycle.errorLoadShare.emit({
60
+ pkgName,
61
+ shareInfo,
62
+ shared: this.host.options.shared,
63
+ shareScopeMap: this.shareScopeMap,
64
+ lifecycle,
65
+ origin: this.host,
66
+ error,
67
+ recovered,
68
+ loadContext
69
+ });
70
+ } catch (hookError) {
71
+ warn(hookError);
72
+ }
73
+ }
74
+ registerShared(globalOptions, userOptions) {
75
+ const { newShareInfos, allShareInfos } = formatShareConfigs(globalOptions, userOptions);
76
+ Object.keys(newShareInfos).forEach((sharedKey) => {
77
+ newShareInfos[sharedKey].forEach((sharedVal) => {
78
+ sharedVal.scope.forEach((sc) => {
79
+ this.hooks.lifecycle.beforeRegisterShare.emit({
80
+ origin: this.host,
81
+ pkgName: sharedKey,
82
+ shared: sharedVal
83
+ });
84
+ const registeredShared = this.shareScopeMap[sc]?.[sharedKey];
85
+ const previousAtVersion = registeredShared?.[sharedVal.version];
86
+ if (!registeredShared) this.setShared({
87
+ pkgName: sharedKey,
88
+ lib: sharedVal.lib,
89
+ get: sharedVal.get,
90
+ loaded: sharedVal.loaded || Boolean(sharedVal.lib),
91
+ shared: sharedVal,
92
+ from: userOptions.name
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
+ });
101
+ });
102
+ });
103
+ });
104
+ return {
105
+ newShareInfos,
106
+ allShareInfos
107
+ };
108
+ }
109
+ async loadShare(pkgName, extraOptions) {
110
+ const { host } = this;
111
+ let loadContext = extraOptions?.context;
112
+ const shareOptions = getTargetSharedOptions({
113
+ pkgName,
114
+ extraOptions,
115
+ shareInfos: host.options.shared
116
+ });
117
+ let shareOptionsRes = shareOptions;
118
+ try {
119
+ if (shareOptions?.scope) await Promise.all(shareOptions.scope.map(async (shareScope) => {
120
+ await Promise.all(this.initializeSharing(shareScope, {
121
+ strategy: shareOptions.strategy,
122
+ context: loadContext
123
+ }));
124
+ }));
125
+ const loadShareRes = await this.hooks.lifecycle.beforeLoadShare.emit({
126
+ pkgName,
127
+ shareInfo: shareOptions,
128
+ shared: host.options.shared,
129
+ origin: host,
130
+ loadContext
131
+ });
132
+ shareOptionsRes = loadShareRes.shareInfo;
133
+ loadContext = loadShareRes.loadContext || loadContext;
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.`);
135
+ const resolvedShareOptions = shareOptionsRes;
136
+ const { shared: registeredShared, useTreesShaking } = getRegisteredShare(this.shareScopeMap, pkgName, shareOptionsRes, this.hooks.lifecycle.resolveShare, loadContext) || {};
137
+ if (registeredShared) {
138
+ const targetShared = directShare(registeredShared, useTreesShaking);
139
+ if (targetShared.lib) {
140
+ addUseIn(targetShared, host.options.name);
141
+ this.emitAfterLoadShare({
142
+ lifecycle: "loadShare",
143
+ pkgName,
144
+ shareInfo: resolvedShareOptions,
145
+ selectedShared: registeredShared,
146
+ loadContext
147
+ });
148
+ return targetShared.lib;
149
+ } else if (targetShared.loading && !targetShared.loaded) {
150
+ const factory = await targetShared.loading;
151
+ targetShared.loaded = true;
152
+ if (!targetShared.lib) targetShared.lib = factory;
153
+ addUseIn(targetShared, host.options.name);
154
+ this.emitAfterLoadShare({
155
+ lifecycle: "loadShare",
156
+ pkgName,
157
+ shareInfo: resolvedShareOptions,
158
+ selectedShared: registeredShared,
159
+ loadContext
160
+ });
161
+ return factory;
162
+ } else {
163
+ const asyncLoadProcess = async () => {
164
+ const factory = await targetShared.get();
165
+ addUseIn(targetShared, host.options.name);
166
+ targetShared.loaded = true;
167
+ targetShared.lib = factory;
168
+ return factory;
169
+ };
170
+ const loading = asyncLoadProcess();
171
+ this.setShared({
172
+ pkgName,
173
+ loaded: false,
174
+ shared: registeredShared,
175
+ from: host.options.name,
176
+ lib: null,
177
+ loading,
178
+ treeShaking: useTreesShaking ? targetShared : void 0
179
+ });
180
+ const factory = await loading;
181
+ this.emitAfterLoadShare({
182
+ lifecycle: "loadShare",
183
+ pkgName,
184
+ shareInfo: resolvedShareOptions,
185
+ selectedShared: registeredShared,
186
+ loadContext
187
+ });
188
+ return factory;
189
+ }
190
+ } else {
191
+ if (extraOptions?.customShareInfo) {
192
+ this.emitErrorLoadShare({
193
+ lifecycle: "loadShare",
194
+ pkgName,
195
+ shareInfo: resolvedShareOptions,
196
+ recovered: true,
197
+ loadContext
198
+ });
199
+ return false;
200
+ }
201
+ const _useTreeShaking = shouldUseTreeShaking(resolvedShareOptions.treeShaking);
202
+ const targetShared = directShare(resolvedShareOptions, _useTreeShaking);
203
+ const asyncLoadProcess = async () => {
204
+ const factory = await targetShared.get();
205
+ targetShared.lib = factory;
206
+ targetShared.loaded = true;
207
+ addUseIn(targetShared, host.options.name);
208
+ const { shared: gShared, useTreesShaking: gUseTreeShaking } = getRegisteredShare(this.shareScopeMap, pkgName, resolvedShareOptions, this.hooks.lifecycle.resolveShare, loadContext) || {};
209
+ if (gShared) {
210
+ const targetGShared = directShare(gShared, gUseTreeShaking);
211
+ targetGShared.lib = factory;
212
+ targetGShared.loaded = true;
213
+ gShared.from = resolvedShareOptions.from;
214
+ }
215
+ return factory;
216
+ };
217
+ const loading = asyncLoadProcess();
218
+ this.setShared({
219
+ pkgName,
220
+ loaded: false,
221
+ shared: resolvedShareOptions,
222
+ from: host.options.name,
223
+ lib: null,
224
+ loading,
225
+ treeShaking: _useTreeShaking ? targetShared : void 0
226
+ });
227
+ const factory = await loading;
228
+ this.emitAfterLoadShare({
229
+ lifecycle: "loadShare",
230
+ pkgName,
231
+ shareInfo: resolvedShareOptions,
232
+ selectedShared: resolvedShareOptions,
233
+ loadContext
234
+ });
235
+ return factory;
236
+ }
237
+ } catch (shareError) {
238
+ this.emitErrorLoadShare({
239
+ lifecycle: "loadShare",
240
+ pkgName,
241
+ shareInfo: shareOptionsRes,
242
+ error: shareError,
243
+ loadContext
244
+ });
245
+ throw shareError;
246
+ }
247
+ }
248
+ /**
249
+ * This function initializes the sharing sequence (executed only once per share scope).
250
+ * It accepts one argument, the name of the share scope.
251
+ * If the share scope does not exist, it creates one.
252
+ */
253
+ initializeSharing(shareScopeName = DEFAULT_SCOPE, extraOptions) {
254
+ const { host } = this;
255
+ const from = extraOptions?.from;
256
+ const strategy = extraOptions?.strategy;
257
+ const trigger = extraOptions?.context?.trigger || from || "runtime";
258
+ let initScope = extraOptions?.initScope;
259
+ const promises = [];
260
+ if (from !== "build") {
261
+ const { initTokens } = this;
262
+ if (!initScope) initScope = [];
263
+ let initToken = initTokens[shareScopeName];
264
+ if (!initToken) initToken = initTokens[shareScopeName] = { from: this.host.name };
265
+ if (initScope.indexOf(initToken) >= 0) return promises;
266
+ initScope.push(initToken);
267
+ }
268
+ const shareScope = this.shareScopeMap;
269
+ const hostName = host.options.name;
270
+ if (!shareScope[shareScopeName]) shareScope[shareScopeName] = {};
271
+ const scope = shareScope[shareScopeName];
272
+ const register = (name, shared) => {
273
+ const { version, eager } = shared;
274
+ scope[name] = scope[name] || {};
275
+ const versions = scope[name];
276
+ const existingShared = versions[version];
277
+ const activeVersion = existingShared && directShare(existingShared);
278
+ const activeVersionEager = Boolean(activeVersion && ("eager" in activeVersion && activeVersion.eager || "shareConfig" in activeVersion && activeVersion.shareConfig?.eager));
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
+ });
287
+ };
288
+ const initRemoteModule = async (key) => {
289
+ const { module } = await host.remoteHandler.getRemoteModuleAndOptions({ id: key });
290
+ let remoteEntryExports = void 0;
291
+ const resourceContext = {
292
+ initiator: "loadShare",
293
+ id: key,
294
+ resourceType: "remoteEntry",
295
+ url: module.remoteInfo.entry
296
+ };
297
+ try {
298
+ remoteEntryExports = await module.getEntry(void 0, resourceContext);
299
+ } catch (error) {
300
+ remoteEntryExports = await host.remoteHandler.hooks.lifecycle.errorLoadRemote.emit({
301
+ id: key,
302
+ error,
303
+ from: "runtime",
304
+ lifecycle: "beforeLoadShare",
305
+ remote: module.remoteInfo,
306
+ origin: host
307
+ });
308
+ if (!remoteEntryExports) return;
309
+ } finally {
310
+ if (remoteEntryExports?.init && !module.initing) {
311
+ module.remoteEntryExports = remoteEntryExports;
312
+ await module.init(void 0, void 0, initScope, void 0, resourceContext);
313
+ }
314
+ }
315
+ };
316
+ Object.keys(host.options.shared).forEach((shareName) => {
317
+ host.options.shared[shareName].forEach((shared) => {
318
+ if (shared.scope.includes(shareScopeName)) register(shareName, shared);
319
+ });
320
+ });
321
+ if (host.options.shareStrategy === "version-first" || strategy === "version-first") host.options.remotes.forEach((remote) => {
322
+ if (remote.shareScope === shareScopeName) promises.push(initRemoteModule(remote.name));
323
+ });
324
+ return promises;
325
+ }
326
+ loadShareSync(pkgName, extraOptions) {
327
+ const { host } = this;
328
+ const loadContext = extraOptions?.context;
329
+ const shareOptions = getTargetSharedOptions({
330
+ pkgName,
331
+ extraOptions,
332
+ shareInfos: host.options.shared
333
+ });
334
+ try {
335
+ if (shareOptions?.scope) shareOptions.scope.forEach((shareScope) => {
336
+ this.initializeSharing(shareScope, {
337
+ strategy: shareOptions.strategy,
338
+ from: extraOptions?.from,
339
+ context: loadContext
340
+ });
341
+ });
342
+ const { shared: registeredShared } = getRegisteredShare(this.shareScopeMap, pkgName, shareOptions, this.hooks.lifecycle.resolveShare, loadContext) || {};
343
+ if (registeredShared) {
344
+ if (typeof registeredShared.lib === "function") {
345
+ addUseIn(registeredShared, host.options.name);
346
+ if (!registeredShared.loaded) {
347
+ registeredShared.loaded = true;
348
+ if (registeredShared.from === host.options.name) shareOptions.loaded = true;
349
+ }
350
+ this.emitAfterLoadShare({
351
+ lifecycle: "loadShareSync",
352
+ pkgName,
353
+ shareInfo: shareOptions,
354
+ selectedShared: registeredShared,
355
+ loadContext
356
+ });
357
+ return registeredShared.lib;
358
+ }
359
+ if (typeof registeredShared.get === "function") {
360
+ const module = registeredShared.get();
361
+ if (!(module instanceof Promise)) {
362
+ addUseIn(registeredShared, host.options.name);
363
+ this.setShared({
364
+ pkgName,
365
+ loaded: true,
366
+ from: host.options.name,
367
+ lib: module,
368
+ shared: registeredShared
369
+ });
370
+ this.emitAfterLoadShare({
371
+ lifecycle: "loadShareSync",
372
+ pkgName,
373
+ shareInfo: shareOptions,
374
+ selectedShared: registeredShared,
375
+ loadContext
376
+ });
377
+ return module;
378
+ }
379
+ }
380
+ }
381
+ if (shareOptions.lib) {
382
+ if (!shareOptions.loaded) shareOptions.loaded = true;
383
+ this.emitAfterLoadShare({
384
+ lifecycle: "loadShareSync",
385
+ pkgName,
386
+ shareInfo: shareOptions,
387
+ selectedShared: shareOptions,
388
+ loadContext
389
+ });
390
+ return shareOptions.lib;
391
+ }
392
+ if (shareOptions.get) {
393
+ const module = shareOptions.get();
394
+ if (module instanceof Promise) error(extraOptions?.from === "build" ? RUNTIME_005 : RUNTIME_006, runtimeDescMap, {
395
+ hostName: host.options.name,
396
+ sharedPkgName: pkgName
397
+ }, void 0, optionsToMFContext(host.options));
398
+ shareOptions.lib = module;
399
+ this.setShared({
400
+ pkgName,
401
+ loaded: true,
402
+ from: host.options.name,
403
+ lib: shareOptions.lib,
404
+ shared: shareOptions
405
+ });
406
+ this.emitAfterLoadShare({
407
+ lifecycle: "loadShareSync",
408
+ pkgName,
409
+ shareInfo: shareOptions,
410
+ selectedShared: shareOptions,
411
+ loadContext
412
+ });
413
+ return shareOptions.lib;
414
+ }
415
+ error(RUNTIME_006, runtimeDescMap, {
416
+ hostName: host.options.name,
417
+ sharedPkgName: pkgName
418
+ }, void 0, optionsToMFContext(host.options));
419
+ } catch (shareError) {
420
+ this.emitErrorLoadShare({
421
+ lifecycle: "loadShareSync",
422
+ pkgName,
423
+ shareInfo: shareOptions,
424
+ error: shareError,
425
+ loadContext
426
+ });
427
+ throw shareError;
428
+ }
429
+ }
430
+ initShareScopeMap(scopeName, shareScope, extraOptions = {}) {
431
+ const { host } = this;
432
+ this.shareScopeMap[scopeName] = shareScope;
433
+ this.hooks.lifecycle.initContainerShareScopeMap.emit({
434
+ shareScope,
435
+ options: host.options,
436
+ origin: host,
437
+ scopeName,
438
+ hostShareScopeMap: extraOptions.hostShareScopeMap
439
+ });
440
+ }
441
+ setShared({ pkgName, shared, from, lib, loading, loaded, get, treeShaking }) {
442
+ const { version, scope = "default", ...shareInfo } = shared;
443
+ const scopes = Array.isArray(scope) ? scope : [scope];
444
+ const mergeAttrs = (shared) => {
445
+ const merge = (s, key, val) => {
446
+ if (val && !s[key]) s[key] = val;
447
+ };
448
+ const targetShared = treeShaking ? shared.treeShaking : shared;
449
+ merge(targetShared, "loaded", loaded);
450
+ merge(targetShared, "loading", loading);
451
+ merge(targetShared, "get", get);
452
+ merge(targetShared, "lib", lib);
453
+ };
454
+ scopes.forEach((sc) => {
455
+ if (!this.shareScopeMap[sc]) this.shareScopeMap[sc] = {};
456
+ if (!this.shareScopeMap[sc][pkgName]) this.shareScopeMap[sc][pkgName] = {};
457
+ if (!this.shareScopeMap[sc][pkgName][version]) this.shareScopeMap[sc][pkgName][version] = {
458
+ version,
459
+ scope: [sc],
460
+ ...shareInfo,
461
+ lib
462
+ };
463
+ const registeredShared = this.shareScopeMap[sc][pkgName][version];
464
+ mergeAttrs(registeredShared);
465
+ if (from && registeredShared.from !== from) registeredShared.from = from;
466
+ });
467
+ }
468
+ _setGlobalShareScopeMap(hostOptions) {
469
+ const globalShareScopeMap = getGlobalShareScope();
470
+ const identifier = hostOptions.id || hostOptions.name;
471
+ if (identifier && !globalShareScopeMap[identifier]) globalShareScopeMap[identifier] = this.shareScopeMap;
472
+ }
473
+ };
474
+
475
+ //#endregion
476
+ export { SharedHandler };
477
+ //# 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 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":";;;;;;;;;;;;;;AAkDA,IAAa,gBAAb,MAA2B;CAqFzB,YAAY,MAAwB;eAlF5B,IAAI,aAAa;GACvB,qBAAqB,IAAI,kBAItB,sBAAsB;GACzB,oBAAoB,IAAI,SActB,qBAAqB;GACvB,cAAc,IAAI,mBAAoC,eAAe;GACrE,iBAAiB,IAAI,mBAMlB,kBAAkB;GAErB,WAAW,IAAI,WAAmD;GAClE,gBAAgB,IAAI,SAclB,iBAAiB;GACnB,gBAAgB,IAAI,SAelB,iBAAiB;GACnB,cAAc,IAAI,kBASf,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,uBACN,SACA,OAOM;AACN,OAAK,MAAM,UAAU,mBAAmB,KAAK;GAC3C;GACA,GAAG;GACH,eAAe,KAAK;GACpB,QAAQ,KAAK;GACd,CAAC;;CAGJ,AAAQ,mBAAmB,EACzB,WACA,SACA,WACA,gBACA,eAOO;AACP,MAAI;AACF,QAAK,MAAM,UAAU,eAAe,KAAK;IACvC;IACA;IACA;IACA,QAAQ,KAAK,KAAK,QAAQ;IAC1B,eAAe,KAAK;IACpB;IACA;IACA,QAAQ,KAAK;IACd,CAAC;WACK,OAAO;AACd,QAAK,MAAM;;;CAIf,AAAQ,mBAAmB,EACzB,WACA,SACA,WACA,OACA,WACA,eAQO;AACP,MAAI;AACF,QAAK,MAAM,UAAU,eAAe,KAAK;IACvC;IACA;IACA,QAAQ,KAAK,KAAK,QAAQ;IAC1B,eAAe,KAAK;IACpB;IACA,QAAQ,KAAK;IACb;IACA;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;KACF,MAAM,mBAAmB,KAAK,cAAc,MAAM;KAClD,MAAM,oBAAoB,mBAAmB,UAAU;AACvD,SAAI,CAAC,iBACH,MAAK,UAAU;MACb,SAAS;MACT,KAAK,UAAU;MACf,KAAK,UAAU;MACf,QAAQ,UAAU,UAAU,QAAQ,UAAU,IAAI;MAClD,QAAQ;MACR,MAAM,YAAY;MACnB,CAAC;AAEJ,UAAK,uBAAuB,WAAW;MACrC,OAAO;MACP,QAAQ;MACR,gBAAgB;MAChB,kBACE,KAAK,cAAc,MAAM,aAAa,UAAU;MAClD,SAAS;MACV,CAAC;MACF;KACF;IACF;AAEF,SAAO;GACL;GACA;GACD;;CAGH,MAAM,UACJ,SACA,cACwC;EACxC,MAAM,EAAE,SAAS;EACjB,IAAI,cAAc,cAAc;EAMhC,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;KACjC,UAAU,aAAa;KACvB,SAAS;KACV,CAAC,CACH;KAED,CACH;GAEH,MAAM,eAAe,MAAM,KAAK,MAAM,UAAU,gBAAgB,KAAK;IACnE;IACA,WAAW;IACX,QAAQ,KAAK,QAAQ;IACrB,QAAQ;IACR;IACD,CAAC;AAEF,qBAAkB,aAAa;AAC/B,iBAAc,aAAa,eAAe;AAG1C,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,cACrB,YACD,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;MAChB;MACD,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;MAChB;MACD,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;MAChB;MACD,CAAC;AACF,YAAO;;UAEJ;AACL,QAAI,cAAc,iBAAiB;AACjC,UAAK,mBAAmB;MACtB,WAAW;MACX;MACA,WAAW;MACX,WAAW;MACX;MACD,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,cACrB,YACD,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;KAChB;KACD,CAAC;AACF,WAAO;;WAEF,YAAY;AACnB,QAAK,mBAAmB;IACtB,WAAW;IACX;IACA,WAAW;IACX,OAAO;IACP;IACD,CAAC;AACF,SAAM;;;;;;;;CAUV,kBACE,iBAAiB,eACjB,cAMsB;EACtB,MAAM,EAAE,SAAS;EACjB,MAAM,OAAO,cAAc;EAC3B,MAAM,WAAW,cAAc;EAC/B,MAAM,UACJ,cAAc,SAAS,WAAW,QAAQ;EAC5C,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,iBAAiB,SAAS;GAChC,MAAM,gBACJ,kBAAmB,YAAY,eAAe;GAChD,MAAM,qBAAqB,QACzB,kBACE,WAAW,iBAAiB,cAAc,SACzC,iBAAiB,iBAAiB,cAAc,aAAa,OACjE;AASD,OARsB,QACpB,CAAC,iBACA,cAAc,aAAa,kBAC1B,CAAC,cAAc,WACd,QAAQ,CAAC,MAAM,KAAK,CAAC,qBAClB,QACA,WAAW,SAAS,SAAS,MACpC,CAEC,UAAS,WAAW;AAEtB,QAAK,uBAAuB,MAAM;IAChC,OAAO;IACP;IACA,gBAAgB;IAChB,kBAAkB,SAAS;IAC3B;IACD,CAAC;;EAGJ,MAAM,mBAAmB,OAAO,QAA+B;GAC7D,MAAM,EAAE,WAAW,MAAM,KAAK,cAAc,0BAA0B,EACpE,IAAI,KACL,CAAC;GACF,IAAI,qBAAqD;GACzD,MAAM,kBAAkB;IACtB,WAAW;IACX,IAAI;IACJ,cAAc;IACd,KAAK,OAAO,WAAW;IACxB;AACD,OAAI;AACF,yBAAqB,MAAM,OAAO,SAAS,QAAW,gBAAgB;YAC/D,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,KACX,QACA,QACA,WACA,QACA,gBACD;;;;AAIP,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,cACiB;EACjB,MAAM,EAAE,SAAS;EACjB,MAAM,cAAc,cAAc;EAClC,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;KACjC,UAAU,aAAa;KACvB,MAAM,cAAc;KACpB,SAAS;KACV,CAAC;KACF;GAEJ,MAAM,EAAE,QAAQ,qBACd,mBACE,KAAK,eACL,SACA,cACA,KAAK,MAAM,UAAU,cACrB,YACD,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;MAChB;MACD,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;OAChB;OACD,CAAC;AACF,aAAO;;;;AAKb,OAAI,aAAa,KAAK;AACpB,QAAI,CAAC,aAAa,OAChB,cAAa,SAAS;AAExB,SAAK,mBAAmB;KACtB,WAAW;KACX;KACA,WAAW;KACX,gBAAgB;KAChB;KACD,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;KAChB;KACD,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;IACP;IACD,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;AAC/B,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,138 @@
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
+ from?: CallFrom;
20
+ customShareInfo?: Partial<Shared>;
21
+ resolver?: (sharedOptions: ShareInfos[string]) => Shared;
22
+ context?: SharedLoadContext;
23
+ };
24
+ type SharedLoadTrigger = CallFrom | 'container-init';
25
+ interface SharedLoadContext {
26
+ trigger?: SharedLoadTrigger;
27
+ moduleId?: string | number;
28
+ chunkId?: string | number;
29
+ }
30
+ interface RemoteInfo {
31
+ alias?: string;
32
+ name: string;
33
+ version?: string;
34
+ buildVersion?: string;
35
+ entry: string;
36
+ type: RemoteEntryType;
37
+ entryGlobalName: string;
38
+ shareScope: string | string[];
39
+ }
40
+ type HostInfo = Pick<Options, 'name' | 'version' | 'remotes' | 'version'>;
41
+ interface SharedConfig {
42
+ singleton?: boolean;
43
+ requiredVersion: false | string;
44
+ eager?: boolean;
45
+ strictVersion?: boolean;
46
+ layer?: string | null;
47
+ }
48
+ type TreeShakingArgs = {
49
+ usedExports?: string[];
50
+ get?: SharedGetter;
51
+ lib?: () => Module;
52
+ status?: TreeShakingStatus;
53
+ mode?: 'server-calc' | 'runtime-infer';
54
+ loading?: null | Promise<any>;
55
+ loaded?: boolean;
56
+ useIn?: Array<string>;
57
+ };
58
+ type SharedBaseArgs = {
59
+ version?: string;
60
+ shareConfig?: SharedConfig;
61
+ scope?: string | Array<string>;
62
+ deps?: Array<string>;
63
+ strategy?: 'version-first' | 'loaded-first';
64
+ loaded?: boolean;
65
+ treeShaking?: TreeShakingArgs;
66
+ };
67
+ type SharedGetter = (() => () => Module) | (() => Promise<() => Module>);
68
+ type ShareArgs = (SharedBaseArgs & {
69
+ get: SharedGetter;
70
+ }) | (SharedBaseArgs & {
71
+ lib: () => Module;
72
+ }) | SharedBaseArgs;
73
+ type ShareStrategy = 'version-first' | 'loaded-first';
74
+ type NoMatchedUsedExportsItem = [from: string, usedExports?: string[]];
75
+ type Shared = {
76
+ version: string;
77
+ get: SharedGetter;
78
+ shareConfig: SharedConfig;
79
+ scope: Array<string>;
80
+ useIn: Array<string>;
81
+ from: string;
82
+ deps: Array<string>;
83
+ lib?: () => Module;
84
+ loaded?: boolean;
85
+ loading?: null | Promise<any>;
86
+ eager?: boolean;
87
+ /**
88
+ * @deprecated set in initOptions.shareStrategy instead
89
+ */
90
+ strategy: ShareStrategy;
91
+ treeShaking?: TreeShakingArgs;
92
+ };
93
+ type ShareScopeMap = {
94
+ [scope: string]: {
95
+ [pkgName: string]: {
96
+ [sharedVersion: string]: Shared;
97
+ };
98
+ };
99
+ };
100
+ type GlobalShareScopeMap = {
101
+ [instanceName: string]: ShareScopeMap;
102
+ };
103
+ type ShareInfos = {
104
+ [pkgName: string]: Shared[];
105
+ };
106
+ interface Options {
107
+ id?: string;
108
+ name: string;
109
+ version?: string;
110
+ remotes: Array<Remote>;
111
+ shared: ShareInfos;
112
+ plugins: Array<ModuleFederationRuntimePlugin>;
113
+ inBrowser: boolean;
114
+ shareStrategy?: ShareStrategy;
115
+ }
116
+ type UserOptions = Omit<Optional<Options, 'plugins'>, 'shared' | 'inBrowser'> & {
117
+ shared?: {
118
+ [pkgName: string]: ShareArgs | ShareArgs[];
119
+ };
120
+ };
121
+ type LoadModuleOptions = {
122
+ version?: string;
123
+ };
124
+ type RemoteEntryInitOptions = {
125
+ version: string;
126
+ shareScopeMap?: ShareScopeMap;
127
+ shareScopeKeys: string | string[];
128
+ };
129
+ type InitTokens = Record<string, Record<string, any>>;
130
+ type InitScope = InitTokens[];
131
+ type CallFrom = 'build' | 'runtime';
132
+ type RemoteEntryExports = {
133
+ get: (id: string) => () => Promise<Module>;
134
+ init: (shareScope: ShareScopeMap[string], initScope?: InitScope, remoteEntryInitOPtions?: RemoteEntryInitOptions) => void | Promise<void>;
135
+ };
136
+ //#endregion
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 };
138
+ //# sourceMappingURL=config.d.ts.map