@module-federation/webpack-bundler-runtime 2.6.0 → 2.8.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.
Files changed (33) hide show
  1. package/dist/index.cjs +13 -11
  2. package/dist/index.cjs.map +1 -1
  3. package/dist/index.d.ts +5 -27
  4. package/dist/index.js +13 -11
  5. package/dist/index.js.map +1 -1
  6. package/dist/init.cjs +65 -62
  7. package/dist/init.cjs.map +1 -1
  8. package/dist/init.js +65 -62
  9. package/dist/init.js.map +1 -1
  10. package/dist/types.d.ts +1 -1
  11. package/package.json +4 -4
  12. package/dist/runtime-core/dist/core.d.ts +0 -198
  13. package/dist/runtime-core/dist/global.d.ts +0 -24
  14. package/dist/runtime-core/dist/helpers.d.ts +0 -1
  15. package/dist/runtime-core/dist/index.d.ts +0 -6
  16. package/dist/runtime-core/dist/module/index.d.ts +0 -33
  17. package/dist/runtime-core/dist/plugins/snapshot/SnapshotHandler.d.ts +0 -70
  18. package/dist/runtime-core/dist/remote/index.d.ts +0 -146
  19. package/dist/runtime-core/dist/shared/index.d.ts +0 -106
  20. package/dist/runtime-core/dist/type/config.d.ts +0 -117
  21. package/dist/runtime-core/dist/type/index.d.ts +0 -1
  22. package/dist/runtime-core/dist/type/plugin.d.ts +0 -28
  23. package/dist/runtime-core/dist/type/preload.d.ts +0 -55
  24. package/dist/runtime-core/dist/types.d.ts +0 -3
  25. package/dist/runtime-core/dist/utils/hooks/asyncHook.d.ts +0 -11
  26. package/dist/runtime-core/dist/utils/hooks/asyncWaterfallHooks.d.ts +0 -13
  27. package/dist/runtime-core/dist/utils/hooks/pluginSystem.d.ts +0 -20
  28. package/dist/runtime-core/dist/utils/hooks/syncHook.d.ts +0 -17
  29. package/dist/runtime-core/dist/utils/hooks/syncWaterfallHook.d.ts +0 -12
  30. package/dist/runtime-core/dist/utils/load.d.ts +0 -17
  31. package/dist/runtime-core/dist/utils/manifest.d.ts +0 -1
  32. package/dist/runtime-core/dist/utils/preload.d.ts +0 -1
  33. package/dist/runtime-core/dist/utils/share.d.ts +0 -1
package/dist/index.cjs CHANGED
@@ -12,26 +12,28 @@ let _module_federation_runtime = require("@module-federation/runtime");
12
12
  _module_federation_runtime = require_runtime.__toESM(_module_federation_runtime);
13
13
 
14
14
  //#region src/index.ts
15
+ const USE_REMOTE = typeof FEDERATION_OPTIMIZE_NO_REMOTE === "boolean" ? !FEDERATION_OPTIMIZE_NO_REMOTE : true;
16
+ const USE_SHARED = typeof FEDERATION_OPTIMIZE_NO_SHARED === "boolean" ? !FEDERATION_OPTIMIZE_NO_SHARED : true;
17
+ const bundlerRuntime = {
18
+ remotes: USE_REMOTE ? require_remotes.remotes : void 0,
19
+ consumes: USE_SHARED ? require_consumes.consumes : void 0,
20
+ I: USE_SHARED ? require_initializeSharing.initializeSharing : void 0,
21
+ S: {},
22
+ installInitialConsumes: USE_SHARED ? require_installInitialConsumes.installInitialConsumes : void 0,
23
+ initContainerEntry: (typeof FEDERATION_HAS_EXPOSES === "boolean" ? FEDERATION_HAS_EXPOSES : true) ? require_initContainerEntry.initContainerEntry : void 0,
24
+ init: require_init.init,
25
+ getSharedFallbackGetter: USE_SHARED ? require_getSharedFallbackGetter.getSharedFallbackGetter : void 0
26
+ };
15
27
  const federation = {
16
28
  runtime: _module_federation_runtime,
17
29
  instance: void 0,
18
30
  initOptions: void 0,
19
- bundlerRuntime: {
20
- remotes: require_remotes.remotes,
21
- consumes: require_consumes.consumes,
22
- I: require_initializeSharing.initializeSharing,
23
- S: {},
24
- installInitialConsumes: require_installInitialConsumes.installInitialConsumes,
25
- initContainerEntry: require_initContainerEntry.initContainerEntry,
26
- init: require_init.init,
27
- getSharedFallbackGetter: require_getSharedFallbackGetter.getSharedFallbackGetter
28
- },
31
+ bundlerRuntime,
29
32
  attachShareScopeMap: require_attachShareScopeMap.attachShareScopeMap,
30
33
  bundlerRuntimeOptions: {}
31
34
  };
32
35
  const instance = federation.instance;
33
36
  const initOptions = federation.initOptions;
34
- const bundlerRuntime = federation.bundlerRuntime;
35
37
  const bundlerRuntimeOptions = federation.bundlerRuntimeOptions;
36
38
 
37
39
  //#endregion
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","names":["initializeSharing"],"sources":["../src/index.ts"],"sourcesContent":["import * as runtime from '@module-federation/runtime';\nimport { Federation } from './types';\nimport { remotes } from './remotes';\nimport { consumes } from './consumes';\nimport { initializeSharing } from './initializeSharing';\nimport { installInitialConsumes } from './installInitialConsumes';\nimport { attachShareScopeMap } from './attachShareScopeMap';\nimport { initContainerEntry } from './initContainerEntry';\nimport { init } from './init';\nimport { getSharedFallbackGetter } from './getSharedFallbackGetter';\n\nexport * from './types';\n\nconst federation: Federation = {\n runtime,\n instance: undefined,\n initOptions: undefined,\n bundlerRuntime: {\n remotes,\n consumes,\n I: initializeSharing,\n S: {},\n installInitialConsumes,\n initContainerEntry,\n init,\n getSharedFallbackGetter,\n },\n attachShareScopeMap,\n bundlerRuntimeOptions: {},\n};\n\n// Keep CJS interop stable for consumers that iterate required keys directly.\nexport { runtime, attachShareScopeMap };\nexport const instance = federation.instance;\nexport const initOptions = federation.initOptions;\nexport const bundlerRuntime = federation.bundlerRuntime;\nexport const bundlerRuntimeOptions = federation.bundlerRuntimeOptions;\n\nexport default federation;\n"],"mappings":";;;;;;;;;;;;;;AAaA,MAAM,aAAyB;CAC7B;CACA,UAAU;CACV,aAAa;CACb,gBAAgB;EACd;EACA;EACA,GAAGA;EACH,GAAG,EAAE;EACL;EACA;EACA;EACA;EACD;CACD;CACA,uBAAuB,EAAE;CAC1B;AAID,MAAa,WAAW,WAAW;AACnC,MAAa,cAAc,WAAW;AACtC,MAAa,iBAAiB,WAAW;AACzC,MAAa,wBAAwB,WAAW"}
1
+ {"version":3,"file":"index.cjs","names":["remotes","consumes","initializeSharing","installInitialConsumes","initContainerEntry","getSharedFallbackGetter"],"sources":["../src/index.ts"],"sourcesContent":["import * as runtime from '@module-federation/runtime';\nimport { Federation } from './types';\nimport { remotes } from './remotes';\nimport { consumes } from './consumes';\nimport { initializeSharing } from './initializeSharing';\nimport { installInitialConsumes } from './installInitialConsumes';\nimport { attachShareScopeMap } from './attachShareScopeMap';\nimport { initContainerEntry } from './initContainerEntry';\nimport { init } from './init';\nimport { getSharedFallbackGetter } from './getSharedFallbackGetter';\n\ndeclare const FEDERATION_OPTIMIZE_NO_REMOTE: boolean;\ndeclare const FEDERATION_OPTIMIZE_NO_SHARED: boolean;\ndeclare const FEDERATION_HAS_EXPOSES: boolean;\n\nexport * from './types';\n\nconst USE_REMOTE =\n typeof FEDERATION_OPTIMIZE_NO_REMOTE === 'boolean'\n ? !FEDERATION_OPTIMIZE_NO_REMOTE\n : true;\nconst USE_SHARED =\n typeof FEDERATION_OPTIMIZE_NO_SHARED === 'boolean'\n ? !FEDERATION_OPTIMIZE_NO_SHARED\n : true;\nconst USE_EXPOSES =\n typeof FEDERATION_HAS_EXPOSES === 'boolean' ? FEDERATION_HAS_EXPOSES : true;\n\nconst bundlerRuntime = {\n remotes: USE_REMOTE ? remotes : undefined,\n consumes: USE_SHARED ? consumes : undefined,\n I: USE_SHARED ? initializeSharing : undefined,\n S: {},\n installInitialConsumes: USE_SHARED ? installInitialConsumes : undefined,\n initContainerEntry: USE_EXPOSES ? initContainerEntry : undefined,\n init,\n getSharedFallbackGetter: USE_SHARED ? getSharedFallbackGetter : undefined,\n} as NonNullable<Federation['bundlerRuntime']>;\n\nconst federation: Federation = {\n runtime,\n instance: undefined,\n initOptions: undefined,\n bundlerRuntime,\n attachShareScopeMap,\n bundlerRuntimeOptions: {},\n};\n\n// Keep CJS interop stable for consumers that iterate required keys directly.\nexport { runtime, attachShareScopeMap };\nexport const instance = federation.instance;\nexport const initOptions = federation.initOptions;\nexport { bundlerRuntime };\nexport const bundlerRuntimeOptions = federation.bundlerRuntimeOptions;\n\nexport default federation;\n"],"mappings":";;;;;;;;;;;;;;AAiBA,MAAM,aACJ,OAAO,kCAAkC,YACrC,CAAC,gCACD;AACN,MAAM,aACJ,OAAO,kCAAkC,YACrC,CAAC,gCACD;AAIN,MAAM,iBAAiB;CACrB,SAAS,aAAaA,0BAAU;CAChC,UAAU,aAAaC,4BAAW;CAClC,GAAG,aAAaC,8CAAoB;CACpC,GAAG,EAAE;CACL,wBAAwB,aAAaC,wDAAyB;CAC9D,qBARA,OAAO,2BAA2B,YAAY,yBAAyB,QAQrCC,gDAAqB;CACvD;CACA,yBAAyB,aAAaC,0DAA0B;CACjE;AAED,MAAM,aAAyB;CAC7B;CACA,UAAU;CACV,aAAa;CACb;CACA;CACA,uBAAuB,EAAE;CAC1B;AAID,MAAa,WAAW,WAAW;AACnC,MAAa,cAAc,WAAW;AAEtC,MAAa,wBAAwB,WAAW"}
package/dist/index.d.ts CHANGED
@@ -1,41 +1,19 @@
1
- import { Remote, Shared, SharedGetter, UserOptions } from "./runtime-core/dist/type/config.js";
2
1
  import { ExternalsType } from "./sdk/dist/types/plugins/ModuleFederationPlugin.js";
3
- import { initializeSharing } from "./initializeSharing.js";
4
2
  import { attachShareScopeMap } from "./attachShareScopeMap.js";
5
- import { initContainerEntry } from "./initContainerEntry.js";
6
3
  import { ConsumesLoadingData, ConsumesOptions, CoreRemotesOptions, Federation, GetSharedFallbackGetterOptions, HandleInitialConsumesOptions, IdToExternalAndNameMapping, IdToRemoteMap, IdToRemoteMapItem, InitContainerEntryOptions, InitializeSharingData, InitializeSharingOptions, InstallInitialConsumesOptions, ModuleId, ModuleIdToRemoteDataMapping, RemoteChunkMapping, RemoteDataItem, RemoteEntryExports, RemoteInfos, RemotesLoadingData, RemotesOptions, ShareScopeMap, WebpackRequire } from "./types.js";
4
+ import * as _module_federation_runtime_core0 from "@module-federation/runtime-core";
5
+ import * as _module_federation_runtime_core_types0 from "@module-federation/runtime-core/types";
7
6
  import * as runtime from "@module-federation/runtime";
8
7
 
9
8
  //#region src/index.d.ts
9
+ declare const bundlerRuntime: NonNullable<Federation["bundlerRuntime"]>;
10
10
  declare const federation: Federation;
11
11
  declare const instance: runtime.ModuleFederation | undefined;
12
- declare const initOptions: (Omit<UserOptions, "remotes"> & {
13
- remotes: Array<Remote & {
12
+ declare const initOptions: (Omit<_module_federation_runtime_core0.UserOptions, "remotes"> & {
13
+ remotes: Array<_module_federation_runtime_core_types0.Remote & {
14
14
  externalType: ExternalsType;
15
15
  }>;
16
16
  }) | undefined;
17
- declare const bundlerRuntime: {
18
- remotes: (options: RemotesOptions) => void;
19
- consumes: (options: ConsumesOptions) => void;
20
- I: typeof initializeSharing;
21
- S: {
22
- [scope: string]: {
23
- [pkgName: string]: {
24
- [sharedVersion: string]: Shared;
25
- };
26
- };
27
- };
28
- installInitialConsumes: (options: InstallInitialConsumesOptions) => any;
29
- initContainerEntry: typeof initContainerEntry;
30
- init: ({
31
- webpackRequire,
32
- libraryType
33
- }: {
34
- webpackRequire: WebpackRequire;
35
- libraryType: string;
36
- }) => void;
37
- getSharedFallbackGetter: (options: GetSharedFallbackGetterOptions) => SharedGetter;
38
- } | undefined;
39
17
  declare const bundlerRuntimeOptions: {
40
18
  remotes?: Exclude<RemotesOptions, "chunkId" | "promises"> & {
41
19
  remoteInfos?: RemoteInfos;
package/dist/index.js CHANGED
@@ -9,26 +9,28 @@ import { getSharedFallbackGetter } from "./getSharedFallbackGetter.js";
9
9
  import * as runtime from "@module-federation/runtime";
10
10
 
11
11
  //#region src/index.ts
12
+ const USE_REMOTE = typeof FEDERATION_OPTIMIZE_NO_REMOTE === "boolean" ? !FEDERATION_OPTIMIZE_NO_REMOTE : true;
13
+ const USE_SHARED = typeof FEDERATION_OPTIMIZE_NO_SHARED === "boolean" ? !FEDERATION_OPTIMIZE_NO_SHARED : true;
14
+ const bundlerRuntime = {
15
+ remotes: USE_REMOTE ? remotes : void 0,
16
+ consumes: USE_SHARED ? consumes : void 0,
17
+ I: USE_SHARED ? initializeSharing : void 0,
18
+ S: {},
19
+ installInitialConsumes: USE_SHARED ? installInitialConsumes : void 0,
20
+ initContainerEntry: (typeof FEDERATION_HAS_EXPOSES === "boolean" ? FEDERATION_HAS_EXPOSES : true) ? initContainerEntry : void 0,
21
+ init,
22
+ getSharedFallbackGetter: USE_SHARED ? getSharedFallbackGetter : void 0
23
+ };
12
24
  const federation = {
13
25
  runtime,
14
26
  instance: void 0,
15
27
  initOptions: void 0,
16
- bundlerRuntime: {
17
- remotes,
18
- consumes,
19
- I: initializeSharing,
20
- S: {},
21
- installInitialConsumes,
22
- initContainerEntry,
23
- init,
24
- getSharedFallbackGetter
25
- },
28
+ bundlerRuntime,
26
29
  attachShareScopeMap,
27
30
  bundlerRuntimeOptions: {}
28
31
  };
29
32
  const instance = federation.instance;
30
33
  const initOptions = federation.initOptions;
31
- const bundlerRuntime = federation.bundlerRuntime;
32
34
  const bundlerRuntimeOptions = federation.bundlerRuntimeOptions;
33
35
 
34
36
  //#endregion
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../src/index.ts"],"sourcesContent":["import * as runtime from '@module-federation/runtime';\nimport { Federation } from './types';\nimport { remotes } from './remotes';\nimport { consumes } from './consumes';\nimport { initializeSharing } from './initializeSharing';\nimport { installInitialConsumes } from './installInitialConsumes';\nimport { attachShareScopeMap } from './attachShareScopeMap';\nimport { initContainerEntry } from './initContainerEntry';\nimport { init } from './init';\nimport { getSharedFallbackGetter } from './getSharedFallbackGetter';\n\nexport * from './types';\n\nconst federation: Federation = {\n runtime,\n instance: undefined,\n initOptions: undefined,\n bundlerRuntime: {\n remotes,\n consumes,\n I: initializeSharing,\n S: {},\n installInitialConsumes,\n initContainerEntry,\n init,\n getSharedFallbackGetter,\n },\n attachShareScopeMap,\n bundlerRuntimeOptions: {},\n};\n\n// Keep CJS interop stable for consumers that iterate required keys directly.\nexport { runtime, attachShareScopeMap };\nexport const instance = federation.instance;\nexport const initOptions = federation.initOptions;\nexport const bundlerRuntime = federation.bundlerRuntime;\nexport const bundlerRuntimeOptions = federation.bundlerRuntimeOptions;\n\nexport default federation;\n"],"mappings":";;;;;;;;;;;AAaA,MAAM,aAAyB;CAC7B;CACA,UAAU;CACV,aAAa;CACb,gBAAgB;EACd;EACA;EACA,GAAG;EACH,GAAG,EAAE;EACL;EACA;EACA;EACA;EACD;CACD;CACA,uBAAuB,EAAE;CAC1B;AAID,MAAa,WAAW,WAAW;AACnC,MAAa,cAAc,WAAW;AACtC,MAAa,iBAAiB,WAAW;AACzC,MAAa,wBAAwB,WAAW"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../src/index.ts"],"sourcesContent":["import * as runtime from '@module-federation/runtime';\nimport { Federation } from './types';\nimport { remotes } from './remotes';\nimport { consumes } from './consumes';\nimport { initializeSharing } from './initializeSharing';\nimport { installInitialConsumes } from './installInitialConsumes';\nimport { attachShareScopeMap } from './attachShareScopeMap';\nimport { initContainerEntry } from './initContainerEntry';\nimport { init } from './init';\nimport { getSharedFallbackGetter } from './getSharedFallbackGetter';\n\ndeclare const FEDERATION_OPTIMIZE_NO_REMOTE: boolean;\ndeclare const FEDERATION_OPTIMIZE_NO_SHARED: boolean;\ndeclare const FEDERATION_HAS_EXPOSES: boolean;\n\nexport * from './types';\n\nconst USE_REMOTE =\n typeof FEDERATION_OPTIMIZE_NO_REMOTE === 'boolean'\n ? !FEDERATION_OPTIMIZE_NO_REMOTE\n : true;\nconst USE_SHARED =\n typeof FEDERATION_OPTIMIZE_NO_SHARED === 'boolean'\n ? !FEDERATION_OPTIMIZE_NO_SHARED\n : true;\nconst USE_EXPOSES =\n typeof FEDERATION_HAS_EXPOSES === 'boolean' ? FEDERATION_HAS_EXPOSES : true;\n\nconst bundlerRuntime = {\n remotes: USE_REMOTE ? remotes : undefined,\n consumes: USE_SHARED ? consumes : undefined,\n I: USE_SHARED ? initializeSharing : undefined,\n S: {},\n installInitialConsumes: USE_SHARED ? installInitialConsumes : undefined,\n initContainerEntry: USE_EXPOSES ? initContainerEntry : undefined,\n init,\n getSharedFallbackGetter: USE_SHARED ? getSharedFallbackGetter : undefined,\n} as NonNullable<Federation['bundlerRuntime']>;\n\nconst federation: Federation = {\n runtime,\n instance: undefined,\n initOptions: undefined,\n bundlerRuntime,\n attachShareScopeMap,\n bundlerRuntimeOptions: {},\n};\n\n// Keep CJS interop stable for consumers that iterate required keys directly.\nexport { runtime, attachShareScopeMap };\nexport const instance = federation.instance;\nexport const initOptions = federation.initOptions;\nexport { bundlerRuntime };\nexport const bundlerRuntimeOptions = federation.bundlerRuntimeOptions;\n\nexport default federation;\n"],"mappings":";;;;;;;;;;;AAiBA,MAAM,aACJ,OAAO,kCAAkC,YACrC,CAAC,gCACD;AACN,MAAM,aACJ,OAAO,kCAAkC,YACrC,CAAC,gCACD;AAIN,MAAM,iBAAiB;CACrB,SAAS,aAAa,UAAU;CAChC,UAAU,aAAa,WAAW;CAClC,GAAG,aAAa,oBAAoB;CACpC,GAAG,EAAE;CACL,wBAAwB,aAAa,yBAAyB;CAC9D,qBARA,OAAO,2BAA2B,YAAY,yBAAyB,QAQrC,qBAAqB;CACvD;CACA,yBAAyB,aAAa,0BAA0B;CACjE;AAED,MAAM,aAAyB;CAC7B;CACA,UAAU;CACV,aAAa;CACb;CACA;CACA,uBAAuB,EAAE;CAC1B;AAID,MAAa,WAAW,WAAW;AACnC,MAAa,cAAc,WAAW;AAEtC,MAAa,wBAAwB,WAAW"}
package/dist/init.cjs CHANGED
@@ -4,76 +4,79 @@ let _module_federation_runtime_helpers = require("@module-federation/runtime/hel
4
4
  _module_federation_runtime_helpers = require_runtime.__toESM(_module_federation_runtime_helpers);
5
5
 
6
6
  //#region src/init.ts
7
+ const USE_SHARED = typeof FEDERATION_OPTIMIZE_NO_SHARED === "boolean" ? !FEDERATION_OPTIMIZE_NO_SHARED : true;
7
8
  function init({ webpackRequire }) {
8
9
  const { initOptions, runtime, sharedFallback, bundlerRuntime, libraryType } = webpackRequire.federation;
9
10
  if (!initOptions) throw new Error("initOptions is required!");
10
- const treeShakingSharePlugin = function() {
11
- return {
12
- name: "tree-shake-plugin",
13
- beforeInit(args) {
14
- const { userOptions, origin, options: registeredOptions } = args;
15
- const version = userOptions.version || registeredOptions.version;
16
- if (!sharedFallback) return args;
17
- const currentShared = userOptions.shared || {};
18
- const shared = [];
19
- Object.keys(currentShared).forEach((sharedName) => {
20
- (Array.isArray(currentShared[sharedName]) ? currentShared[sharedName] : [currentShared[sharedName]]).forEach((sharedArg) => {
21
- shared.push([sharedName, sharedArg]);
22
- if ("get" in sharedArg) {
23
- sharedArg.treeShaking ||= {};
24
- sharedArg.treeShaking.get = sharedArg.get;
25
- sharedArg.get = bundlerRuntime.getSharedFallbackGetter({
26
- shareKey: sharedName,
27
- factory: sharedArg.get,
28
- webpackRequire,
29
- libraryType,
30
- version: sharedArg.version
31
- });
32
- }
11
+ if (USE_SHARED) {
12
+ const treeShakingSharePlugin = function() {
13
+ return {
14
+ name: "tree-shake-plugin",
15
+ beforeInit(args) {
16
+ const { userOptions, origin, options: registeredOptions } = args;
17
+ const version = userOptions.version || registeredOptions.version;
18
+ if (!sharedFallback) return args;
19
+ const currentShared = userOptions.shared || {};
20
+ const shared = [];
21
+ Object.keys(currentShared).forEach((sharedName) => {
22
+ (Array.isArray(currentShared[sharedName]) ? currentShared[sharedName] : [currentShared[sharedName]]).forEach((sharedArg) => {
23
+ shared.push([sharedName, sharedArg]);
24
+ if ("get" in sharedArg) {
25
+ sharedArg.treeShaking ||= {};
26
+ sharedArg.treeShaking.get = sharedArg.get;
27
+ sharedArg.get = bundlerRuntime.getSharedFallbackGetter({
28
+ shareKey: sharedName,
29
+ factory: sharedArg.get,
30
+ webpackRequire,
31
+ libraryType,
32
+ version: sharedArg.version
33
+ });
34
+ }
35
+ });
33
36
  });
34
- });
35
- const hostGlobalSnapshot = _module_federation_runtime_helpers.default.global.getGlobalSnapshotInfoByModuleInfo({
36
- name: origin.name,
37
- version
38
- });
39
- if (!hostGlobalSnapshot || !("shared" in hostGlobalSnapshot)) return args;
40
- Object.keys(registeredOptions.shared || {}).forEach((pkgName) => {
41
- registeredOptions.shared[pkgName].forEach((sharedArg) => {
42
- shared.push([pkgName, sharedArg]);
37
+ const hostGlobalSnapshot = _module_federation_runtime_helpers.default.global.getGlobalSnapshotInfoByModuleInfo({
38
+ name: origin.name,
39
+ version
43
40
  });
44
- });
45
- const patchShared = (pkgName, shared) => {
46
- const shareSnapshot = hostGlobalSnapshot.shared.find((item) => item.sharedName === pkgName);
47
- if (!shareSnapshot) return;
48
- const { treeShaking } = shared;
49
- if (!treeShaking) return;
50
- const { secondarySharedTreeShakingName, secondarySharedTreeShakingEntry, treeShakingStatus } = shareSnapshot;
51
- if (treeShaking.status === treeShakingStatus) return;
52
- treeShaking.status = treeShakingStatus;
53
- if (secondarySharedTreeShakingEntry && libraryType && secondarySharedTreeShakingName) treeShaking.get = async () => {
54
- const shareEntry = await (0, _module_federation_runtime.getRemoteEntry)({
55
- origin,
56
- remoteInfo: {
57
- name: secondarySharedTreeShakingName,
58
- entry: secondarySharedTreeShakingEntry,
59
- type: libraryType,
60
- entryGlobalName: secondarySharedTreeShakingName,
61
- shareScope: "default"
62
- }
41
+ if (!hostGlobalSnapshot || !("shared" in hostGlobalSnapshot)) return args;
42
+ Object.keys(registeredOptions.shared || {}).forEach((pkgName) => {
43
+ registeredOptions.shared[pkgName].forEach((sharedArg) => {
44
+ shared.push([pkgName, sharedArg]);
63
45
  });
64
- await shareEntry.init(origin, __webpack_require__.federation.bundlerRuntime);
65
- return shareEntry.get();
46
+ });
47
+ const patchShared = (pkgName, shared) => {
48
+ const shareSnapshot = hostGlobalSnapshot.shared.find((item) => item.sharedName === pkgName);
49
+ if (!shareSnapshot) return;
50
+ const { treeShaking } = shared;
51
+ if (!treeShaking) return;
52
+ const { secondarySharedTreeShakingName, secondarySharedTreeShakingEntry, treeShakingStatus } = shareSnapshot;
53
+ if (treeShaking.status === treeShakingStatus) return;
54
+ treeShaking.status = treeShakingStatus;
55
+ if (secondarySharedTreeShakingEntry && libraryType && secondarySharedTreeShakingName) treeShaking.get = async () => {
56
+ const shareEntry = await (0, _module_federation_runtime.getRemoteEntry)({
57
+ origin,
58
+ remoteInfo: {
59
+ name: secondarySharedTreeShakingName,
60
+ entry: secondarySharedTreeShakingEntry,
61
+ type: libraryType,
62
+ entryGlobalName: secondarySharedTreeShakingName,
63
+ shareScope: "default"
64
+ }
65
+ });
66
+ await shareEntry.init(origin, __webpack_require__.federation.bundlerRuntime);
67
+ return shareEntry.get();
68
+ };
66
69
  };
67
- };
68
- shared.forEach(([pkgName, sharedArg]) => {
69
- patchShared(pkgName, sharedArg);
70
- });
71
- return args;
72
- }
70
+ shared.forEach(([pkgName, sharedArg]) => {
71
+ patchShared(pkgName, sharedArg);
72
+ });
73
+ return args;
74
+ }
75
+ };
73
76
  };
74
- };
75
- initOptions.plugins ||= [];
76
- initOptions.plugins.push(treeShakingSharePlugin());
77
+ initOptions.plugins ||= [];
78
+ initOptions.plugins.push(treeShakingSharePlugin());
79
+ }
77
80
  return runtime.init(initOptions);
78
81
  }
79
82
 
package/dist/init.cjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"init.cjs","names":["helpers"],"sources":["../src/init.ts"],"sourcesContent":["import type { WebpackRequire } from './types';\nimport {\n getRemoteEntry,\n type ModuleFederationRuntimePlugin,\n} from '@module-federation/runtime';\nimport { ShareArgs } from '@module-federation/runtime/types';\nimport helpers from '@module-federation/runtime/helpers';\n\nexport function init({ webpackRequire }: { webpackRequire: WebpackRequire }) {\n const { initOptions, runtime, sharedFallback, bundlerRuntime, libraryType } =\n webpackRequire.federation;\n\n if (!initOptions) {\n throw new Error('initOptions is required!');\n }\n\n const treeShakingSharePlugin: () => ModuleFederationRuntimePlugin =\n function () {\n return {\n name: 'tree-shake-plugin',\n beforeInit(args) {\n const { userOptions, origin, options: registeredOptions } = args;\n const version = userOptions.version || registeredOptions.version;\n if (!sharedFallback) {\n return args;\n }\n\n const currentShared = userOptions.shared || {};\n const shared: Array<[pkgName: string, ShareArgs]> = [];\n\n Object.keys(currentShared).forEach((sharedName) => {\n const sharedArgs = Array.isArray(currentShared[sharedName])\n ? currentShared[sharedName]\n : [currentShared[sharedName]];\n sharedArgs.forEach((sharedArg) => {\n shared.push([sharedName, sharedArg]);\n if ('get' in sharedArg) {\n sharedArg.treeShaking ||= {};\n sharedArg.treeShaking.get = sharedArg.get;\n sharedArg.get = bundlerRuntime!.getSharedFallbackGetter({\n shareKey: sharedName,\n factory: sharedArg.get,\n webpackRequire,\n libraryType,\n version: sharedArg.version,\n });\n }\n });\n });\n\n // read snapshot to override re-shake getter\n const hostGlobalSnapshot =\n helpers.global.getGlobalSnapshotInfoByModuleInfo({\n name: origin.name,\n version: version,\n });\n if (!hostGlobalSnapshot || !('shared' in hostGlobalSnapshot)) {\n return args;\n }\n\n Object.keys(registeredOptions.shared || {}).forEach((pkgName) => {\n const sharedInfo = registeredOptions.shared[pkgName];\n sharedInfo.forEach((sharedArg) => {\n shared.push([pkgName, sharedArg]);\n });\n });\n\n const patchShared = (pkgName: string, shared: ShareArgs) => {\n const shareSnapshot = hostGlobalSnapshot.shared.find(\n (item) => item.sharedName === pkgName,\n );\n if (!shareSnapshot) {\n return;\n }\n const { treeShaking } = shared;\n if (!treeShaking) {\n return;\n }\n const {\n secondarySharedTreeShakingName,\n secondarySharedTreeShakingEntry,\n treeShakingStatus,\n } = shareSnapshot;\n if (treeShaking.status === treeShakingStatus) {\n return;\n }\n treeShaking.status = treeShakingStatus;\n if (\n secondarySharedTreeShakingEntry &&\n libraryType &&\n secondarySharedTreeShakingName\n ) {\n treeShaking.get = async () => {\n const shareEntry = await getRemoteEntry({\n origin,\n remoteInfo: {\n name: secondarySharedTreeShakingName,\n entry: secondarySharedTreeShakingEntry,\n type: libraryType,\n entryGlobalName: secondarySharedTreeShakingName,\n // current not used\n shareScope: 'default',\n },\n });\n // TODO: add errorLoad hook ?\n // @ts-ignore\n await shareEntry.init(\n origin,\n // @ts-ignore\n __webpack_require__.federation.bundlerRuntime,\n );\n // @ts-ignore\n const getter = shareEntry.get();\n return getter;\n };\n }\n };\n shared.forEach(([pkgName, sharedArg]) => {\n patchShared(pkgName, sharedArg);\n });\n\n return args;\n },\n };\n };\n\n initOptions.plugins ||= [];\n initOptions.plugins.push(treeShakingSharePlugin());\n return runtime!.init(initOptions);\n}\n"],"mappings":";;;;;;AAQA,SAAgB,KAAK,EAAE,kBAAsD;CAC3E,MAAM,EAAE,aAAa,SAAS,gBAAgB,gBAAgB,gBAC5D,eAAe;AAEjB,KAAI,CAAC,YACH,OAAM,IAAI,MAAM,2BAA2B;CAG7C,MAAM,yBACJ,WAAY;AACV,SAAO;GACL,MAAM;GACN,WAAW,MAAM;IACf,MAAM,EAAE,aAAa,QAAQ,SAAS,sBAAsB;IAC5D,MAAM,UAAU,YAAY,WAAW,kBAAkB;AACzD,QAAI,CAAC,eACH,QAAO;IAGT,MAAM,gBAAgB,YAAY,UAAU,EAAE;IAC9C,MAAM,SAA8C,EAAE;AAEtD,WAAO,KAAK,cAAc,CAAC,SAAS,eAAe;AAIjD,MAHmB,MAAM,QAAQ,cAAc,YAAY,GACvD,cAAc,cACd,CAAC,cAAc,YAAY,EACpB,SAAS,cAAc;AAChC,aAAO,KAAK,CAAC,YAAY,UAAU,CAAC;AACpC,UAAI,SAAS,WAAW;AACtB,iBAAU,gBAAgB,EAAE;AAC5B,iBAAU,YAAY,MAAM,UAAU;AACtC,iBAAU,MAAM,eAAgB,wBAAwB;QACtD,UAAU;QACV,SAAS,UAAU;QACnB;QACA;QACA,SAAS,UAAU;QACpB,CAAC;;OAEJ;MACF;IAGF,MAAM,qBACJA,2CAAQ,OAAO,kCAAkC;KAC/C,MAAM,OAAO;KACJ;KACV,CAAC;AACJ,QAAI,CAAC,sBAAsB,EAAE,YAAY,oBACvC,QAAO;AAGT,WAAO,KAAK,kBAAkB,UAAU,EAAE,CAAC,CAAC,SAAS,YAAY;AAE/D,KADmB,kBAAkB,OAAO,SACjC,SAAS,cAAc;AAChC,aAAO,KAAK,CAAC,SAAS,UAAU,CAAC;OACjC;MACF;IAEF,MAAM,eAAe,SAAiB,WAAsB;KAC1D,MAAM,gBAAgB,mBAAmB,OAAO,MAC7C,SAAS,KAAK,eAAe,QAC/B;AACD,SAAI,CAAC,cACH;KAEF,MAAM,EAAE,gBAAgB;AACxB,SAAI,CAAC,YACH;KAEF,MAAM,EACJ,gCACA,iCACA,sBACE;AACJ,SAAI,YAAY,WAAW,kBACzB;AAEF,iBAAY,SAAS;AACrB,SACE,mCACA,eACA,+BAEA,aAAY,MAAM,YAAY;MAC5B,MAAM,aAAa,qDAAqB;OACtC;OACA,YAAY;QACV,MAAM;QACN,OAAO;QACP,MAAM;QACN,iBAAiB;QAEjB,YAAY;QACb;OACF,CAAC;AAGF,YAAM,WAAW,KACf,QAEA,oBAAoB,WAAW,eAChC;AAGD,aADe,WAAW,KAAK;;;AAKrC,WAAO,SAAS,CAAC,SAAS,eAAe;AACvC,iBAAY,SAAS,UAAU;MAC/B;AAEF,WAAO;;GAEV;;AAGL,aAAY,YAAY,EAAE;AAC1B,aAAY,QAAQ,KAAK,wBAAwB,CAAC;AAClD,QAAO,QAAS,KAAK,YAAY"}
1
+ {"version":3,"file":"init.cjs","names":["helpers"],"sources":["../src/init.ts"],"sourcesContent":["import type { WebpackRequire } from './types';\nimport {\n getRemoteEntry,\n type ModuleFederationRuntimePlugin,\n} from '@module-federation/runtime';\nimport { ShareArgs } from '@module-federation/runtime/types';\nimport helpers from '@module-federation/runtime/helpers';\n\ndeclare const FEDERATION_OPTIMIZE_NO_SHARED: boolean;\n\nconst USE_SHARED =\n typeof FEDERATION_OPTIMIZE_NO_SHARED === 'boolean'\n ? !FEDERATION_OPTIMIZE_NO_SHARED\n : true;\n\nexport function init({ webpackRequire }: { webpackRequire: WebpackRequire }) {\n const { initOptions, runtime, sharedFallback, bundlerRuntime, libraryType } =\n webpackRequire.federation;\n\n if (!initOptions) {\n throw new Error('initOptions is required!');\n }\n\n if (USE_SHARED) {\n const treeShakingSharePlugin: () => ModuleFederationRuntimePlugin =\n function () {\n return {\n name: 'tree-shake-plugin',\n beforeInit(args) {\n const { userOptions, origin, options: registeredOptions } = args;\n const version = userOptions.version || registeredOptions.version;\n if (!sharedFallback) {\n return args;\n }\n\n const currentShared = userOptions.shared || {};\n const shared: Array<[pkgName: string, ShareArgs]> = [];\n\n Object.keys(currentShared).forEach((sharedName) => {\n const sharedArgs = Array.isArray(currentShared[sharedName])\n ? currentShared[sharedName]\n : [currentShared[sharedName]];\n sharedArgs.forEach((sharedArg) => {\n shared.push([sharedName, sharedArg]);\n if ('get' in sharedArg) {\n sharedArg.treeShaking ||= {};\n sharedArg.treeShaking.get = sharedArg.get;\n sharedArg.get = bundlerRuntime!.getSharedFallbackGetter({\n shareKey: sharedName,\n factory: sharedArg.get,\n webpackRequire,\n libraryType,\n version: sharedArg.version,\n });\n }\n });\n });\n\n // read snapshot to override re-shake getter\n const hostGlobalSnapshot =\n helpers.global.getGlobalSnapshotInfoByModuleInfo({\n name: origin.name,\n version: version,\n });\n if (!hostGlobalSnapshot || !('shared' in hostGlobalSnapshot)) {\n return args;\n }\n\n Object.keys(registeredOptions.shared || {}).forEach((pkgName) => {\n const sharedInfo = registeredOptions.shared[pkgName];\n sharedInfo.forEach((sharedArg) => {\n shared.push([pkgName, sharedArg]);\n });\n });\n\n const patchShared = (pkgName: string, shared: ShareArgs) => {\n const shareSnapshot = hostGlobalSnapshot.shared.find(\n (item) => item.sharedName === pkgName,\n );\n if (!shareSnapshot) {\n return;\n }\n const { treeShaking } = shared;\n if (!treeShaking) {\n return;\n }\n const {\n secondarySharedTreeShakingName,\n secondarySharedTreeShakingEntry,\n treeShakingStatus,\n } = shareSnapshot;\n if (treeShaking.status === treeShakingStatus) {\n return;\n }\n treeShaking.status = treeShakingStatus;\n if (\n secondarySharedTreeShakingEntry &&\n libraryType &&\n secondarySharedTreeShakingName\n ) {\n treeShaking.get = async () => {\n const shareEntry = await getRemoteEntry({\n origin,\n remoteInfo: {\n name: secondarySharedTreeShakingName,\n entry: secondarySharedTreeShakingEntry,\n type: libraryType,\n entryGlobalName: secondarySharedTreeShakingName,\n // current not used\n shareScope: 'default',\n },\n });\n // TODO: add errorLoad hook ?\n // @ts-ignore\n await shareEntry.init(\n origin,\n // @ts-ignore\n __webpack_require__.federation.bundlerRuntime,\n );\n // @ts-ignore\n const getter = shareEntry.get();\n return getter;\n };\n }\n };\n shared.forEach(([pkgName, sharedArg]) => {\n patchShared(pkgName, sharedArg);\n });\n\n return args;\n },\n };\n };\n\n initOptions.plugins ||= [];\n initOptions.plugins.push(treeShakingSharePlugin());\n }\n return runtime!.init(initOptions);\n}\n"],"mappings":";;;;;;AAUA,MAAM,aACJ,OAAO,kCAAkC,YACrC,CAAC,gCACD;AAEN,SAAgB,KAAK,EAAE,kBAAsD;CAC3E,MAAM,EAAE,aAAa,SAAS,gBAAgB,gBAAgB,gBAC5D,eAAe;AAEjB,KAAI,CAAC,YACH,OAAM,IAAI,MAAM,2BAA2B;AAG7C,KAAI,YAAY;EACd,MAAM,yBACJ,WAAY;AACV,UAAO;IACL,MAAM;IACN,WAAW,MAAM;KACf,MAAM,EAAE,aAAa,QAAQ,SAAS,sBAAsB;KAC5D,MAAM,UAAU,YAAY,WAAW,kBAAkB;AACzD,SAAI,CAAC,eACH,QAAO;KAGT,MAAM,gBAAgB,YAAY,UAAU,EAAE;KAC9C,MAAM,SAA8C,EAAE;AAEtD,YAAO,KAAK,cAAc,CAAC,SAAS,eAAe;AAIjD,OAHmB,MAAM,QAAQ,cAAc,YAAY,GACvD,cAAc,cACd,CAAC,cAAc,YAAY,EACpB,SAAS,cAAc;AAChC,cAAO,KAAK,CAAC,YAAY,UAAU,CAAC;AACpC,WAAI,SAAS,WAAW;AACtB,kBAAU,gBAAgB,EAAE;AAC5B,kBAAU,YAAY,MAAM,UAAU;AACtC,kBAAU,MAAM,eAAgB,wBAAwB;SACtD,UAAU;SACV,SAAS,UAAU;SACnB;SACA;SACA,SAAS,UAAU;SACpB,CAAC;;QAEJ;OACF;KAGF,MAAM,qBACJA,2CAAQ,OAAO,kCAAkC;MAC/C,MAAM,OAAO;MACJ;MACV,CAAC;AACJ,SAAI,CAAC,sBAAsB,EAAE,YAAY,oBACvC,QAAO;AAGT,YAAO,KAAK,kBAAkB,UAAU,EAAE,CAAC,CAAC,SAAS,YAAY;AAE/D,MADmB,kBAAkB,OAAO,SACjC,SAAS,cAAc;AAChC,cAAO,KAAK,CAAC,SAAS,UAAU,CAAC;QACjC;OACF;KAEF,MAAM,eAAe,SAAiB,WAAsB;MAC1D,MAAM,gBAAgB,mBAAmB,OAAO,MAC7C,SAAS,KAAK,eAAe,QAC/B;AACD,UAAI,CAAC,cACH;MAEF,MAAM,EAAE,gBAAgB;AACxB,UAAI,CAAC,YACH;MAEF,MAAM,EACJ,gCACA,iCACA,sBACE;AACJ,UAAI,YAAY,WAAW,kBACzB;AAEF,kBAAY,SAAS;AACrB,UACE,mCACA,eACA,+BAEA,aAAY,MAAM,YAAY;OAC5B,MAAM,aAAa,qDAAqB;QACtC;QACA,YAAY;SACV,MAAM;SACN,OAAO;SACP,MAAM;SACN,iBAAiB;SAEjB,YAAY;SACb;QACF,CAAC;AAGF,aAAM,WAAW,KACf,QAEA,oBAAoB,WAAW,eAChC;AAGD,cADe,WAAW,KAAK;;;AAKrC,YAAO,SAAS,CAAC,SAAS,eAAe;AACvC,kBAAY,SAAS,UAAU;OAC/B;AAEF,YAAO;;IAEV;;AAGL,cAAY,YAAY,EAAE;AAC1B,cAAY,QAAQ,KAAK,wBAAwB,CAAC;;AAEpD,QAAO,QAAS,KAAK,YAAY"}
package/dist/init.js CHANGED
@@ -2,76 +2,79 @@ import { getRemoteEntry } from "@module-federation/runtime";
2
2
  import helpers from "@module-federation/runtime/helpers";
3
3
 
4
4
  //#region src/init.ts
5
+ const USE_SHARED = typeof FEDERATION_OPTIMIZE_NO_SHARED === "boolean" ? !FEDERATION_OPTIMIZE_NO_SHARED : true;
5
6
  function init({ webpackRequire }) {
6
7
  const { initOptions, runtime, sharedFallback, bundlerRuntime, libraryType } = webpackRequire.federation;
7
8
  if (!initOptions) throw new Error("initOptions is required!");
8
- const treeShakingSharePlugin = function() {
9
- return {
10
- name: "tree-shake-plugin",
11
- beforeInit(args) {
12
- const { userOptions, origin, options: registeredOptions } = args;
13
- const version = userOptions.version || registeredOptions.version;
14
- if (!sharedFallback) return args;
15
- const currentShared = userOptions.shared || {};
16
- const shared = [];
17
- Object.keys(currentShared).forEach((sharedName) => {
18
- (Array.isArray(currentShared[sharedName]) ? currentShared[sharedName] : [currentShared[sharedName]]).forEach((sharedArg) => {
19
- shared.push([sharedName, sharedArg]);
20
- if ("get" in sharedArg) {
21
- sharedArg.treeShaking ||= {};
22
- sharedArg.treeShaking.get = sharedArg.get;
23
- sharedArg.get = bundlerRuntime.getSharedFallbackGetter({
24
- shareKey: sharedName,
25
- factory: sharedArg.get,
26
- webpackRequire,
27
- libraryType,
28
- version: sharedArg.version
29
- });
30
- }
9
+ if (USE_SHARED) {
10
+ const treeShakingSharePlugin = function() {
11
+ return {
12
+ name: "tree-shake-plugin",
13
+ beforeInit(args) {
14
+ const { userOptions, origin, options: registeredOptions } = args;
15
+ const version = userOptions.version || registeredOptions.version;
16
+ if (!sharedFallback) return args;
17
+ const currentShared = userOptions.shared || {};
18
+ const shared = [];
19
+ Object.keys(currentShared).forEach((sharedName) => {
20
+ (Array.isArray(currentShared[sharedName]) ? currentShared[sharedName] : [currentShared[sharedName]]).forEach((sharedArg) => {
21
+ shared.push([sharedName, sharedArg]);
22
+ if ("get" in sharedArg) {
23
+ sharedArg.treeShaking ||= {};
24
+ sharedArg.treeShaking.get = sharedArg.get;
25
+ sharedArg.get = bundlerRuntime.getSharedFallbackGetter({
26
+ shareKey: sharedName,
27
+ factory: sharedArg.get,
28
+ webpackRequire,
29
+ libraryType,
30
+ version: sharedArg.version
31
+ });
32
+ }
33
+ });
31
34
  });
32
- });
33
- const hostGlobalSnapshot = helpers.global.getGlobalSnapshotInfoByModuleInfo({
34
- name: origin.name,
35
- version
36
- });
37
- if (!hostGlobalSnapshot || !("shared" in hostGlobalSnapshot)) return args;
38
- Object.keys(registeredOptions.shared || {}).forEach((pkgName) => {
39
- registeredOptions.shared[pkgName].forEach((sharedArg) => {
40
- shared.push([pkgName, sharedArg]);
35
+ const hostGlobalSnapshot = helpers.global.getGlobalSnapshotInfoByModuleInfo({
36
+ name: origin.name,
37
+ version
41
38
  });
42
- });
43
- const patchShared = (pkgName, shared) => {
44
- const shareSnapshot = hostGlobalSnapshot.shared.find((item) => item.sharedName === pkgName);
45
- if (!shareSnapshot) return;
46
- const { treeShaking } = shared;
47
- if (!treeShaking) return;
48
- const { secondarySharedTreeShakingName, secondarySharedTreeShakingEntry, treeShakingStatus } = shareSnapshot;
49
- if (treeShaking.status === treeShakingStatus) return;
50
- treeShaking.status = treeShakingStatus;
51
- if (secondarySharedTreeShakingEntry && libraryType && secondarySharedTreeShakingName) treeShaking.get = async () => {
52
- const shareEntry = await getRemoteEntry({
53
- origin,
54
- remoteInfo: {
55
- name: secondarySharedTreeShakingName,
56
- entry: secondarySharedTreeShakingEntry,
57
- type: libraryType,
58
- entryGlobalName: secondarySharedTreeShakingName,
59
- shareScope: "default"
60
- }
39
+ if (!hostGlobalSnapshot || !("shared" in hostGlobalSnapshot)) return args;
40
+ Object.keys(registeredOptions.shared || {}).forEach((pkgName) => {
41
+ registeredOptions.shared[pkgName].forEach((sharedArg) => {
42
+ shared.push([pkgName, sharedArg]);
61
43
  });
62
- await shareEntry.init(origin, __webpack_require__.federation.bundlerRuntime);
63
- return shareEntry.get();
44
+ });
45
+ const patchShared = (pkgName, shared) => {
46
+ const shareSnapshot = hostGlobalSnapshot.shared.find((item) => item.sharedName === pkgName);
47
+ if (!shareSnapshot) return;
48
+ const { treeShaking } = shared;
49
+ if (!treeShaking) return;
50
+ const { secondarySharedTreeShakingName, secondarySharedTreeShakingEntry, treeShakingStatus } = shareSnapshot;
51
+ if (treeShaking.status === treeShakingStatus) return;
52
+ treeShaking.status = treeShakingStatus;
53
+ if (secondarySharedTreeShakingEntry && libraryType && secondarySharedTreeShakingName) treeShaking.get = async () => {
54
+ const shareEntry = await getRemoteEntry({
55
+ origin,
56
+ remoteInfo: {
57
+ name: secondarySharedTreeShakingName,
58
+ entry: secondarySharedTreeShakingEntry,
59
+ type: libraryType,
60
+ entryGlobalName: secondarySharedTreeShakingName,
61
+ shareScope: "default"
62
+ }
63
+ });
64
+ await shareEntry.init(origin, __webpack_require__.federation.bundlerRuntime);
65
+ return shareEntry.get();
66
+ };
64
67
  };
65
- };
66
- shared.forEach(([pkgName, sharedArg]) => {
67
- patchShared(pkgName, sharedArg);
68
- });
69
- return args;
70
- }
68
+ shared.forEach(([pkgName, sharedArg]) => {
69
+ patchShared(pkgName, sharedArg);
70
+ });
71
+ return args;
72
+ }
73
+ };
71
74
  };
72
- };
73
- initOptions.plugins ||= [];
74
- initOptions.plugins.push(treeShakingSharePlugin());
75
+ initOptions.plugins ||= [];
76
+ initOptions.plugins.push(treeShakingSharePlugin());
77
+ }
75
78
  return runtime.init(initOptions);
76
79
  }
77
80
 
package/dist/init.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"init.js","names":[],"sources":["../src/init.ts"],"sourcesContent":["import type { WebpackRequire } from './types';\nimport {\n getRemoteEntry,\n type ModuleFederationRuntimePlugin,\n} from '@module-federation/runtime';\nimport { ShareArgs } from '@module-federation/runtime/types';\nimport helpers from '@module-federation/runtime/helpers';\n\nexport function init({ webpackRequire }: { webpackRequire: WebpackRequire }) {\n const { initOptions, runtime, sharedFallback, bundlerRuntime, libraryType } =\n webpackRequire.federation;\n\n if (!initOptions) {\n throw new Error('initOptions is required!');\n }\n\n const treeShakingSharePlugin: () => ModuleFederationRuntimePlugin =\n function () {\n return {\n name: 'tree-shake-plugin',\n beforeInit(args) {\n const { userOptions, origin, options: registeredOptions } = args;\n const version = userOptions.version || registeredOptions.version;\n if (!sharedFallback) {\n return args;\n }\n\n const currentShared = userOptions.shared || {};\n const shared: Array<[pkgName: string, ShareArgs]> = [];\n\n Object.keys(currentShared).forEach((sharedName) => {\n const sharedArgs = Array.isArray(currentShared[sharedName])\n ? currentShared[sharedName]\n : [currentShared[sharedName]];\n sharedArgs.forEach((sharedArg) => {\n shared.push([sharedName, sharedArg]);\n if ('get' in sharedArg) {\n sharedArg.treeShaking ||= {};\n sharedArg.treeShaking.get = sharedArg.get;\n sharedArg.get = bundlerRuntime!.getSharedFallbackGetter({\n shareKey: sharedName,\n factory: sharedArg.get,\n webpackRequire,\n libraryType,\n version: sharedArg.version,\n });\n }\n });\n });\n\n // read snapshot to override re-shake getter\n const hostGlobalSnapshot =\n helpers.global.getGlobalSnapshotInfoByModuleInfo({\n name: origin.name,\n version: version,\n });\n if (!hostGlobalSnapshot || !('shared' in hostGlobalSnapshot)) {\n return args;\n }\n\n Object.keys(registeredOptions.shared || {}).forEach((pkgName) => {\n const sharedInfo = registeredOptions.shared[pkgName];\n sharedInfo.forEach((sharedArg) => {\n shared.push([pkgName, sharedArg]);\n });\n });\n\n const patchShared = (pkgName: string, shared: ShareArgs) => {\n const shareSnapshot = hostGlobalSnapshot.shared.find(\n (item) => item.sharedName === pkgName,\n );\n if (!shareSnapshot) {\n return;\n }\n const { treeShaking } = shared;\n if (!treeShaking) {\n return;\n }\n const {\n secondarySharedTreeShakingName,\n secondarySharedTreeShakingEntry,\n treeShakingStatus,\n } = shareSnapshot;\n if (treeShaking.status === treeShakingStatus) {\n return;\n }\n treeShaking.status = treeShakingStatus;\n if (\n secondarySharedTreeShakingEntry &&\n libraryType &&\n secondarySharedTreeShakingName\n ) {\n treeShaking.get = async () => {\n const shareEntry = await getRemoteEntry({\n origin,\n remoteInfo: {\n name: secondarySharedTreeShakingName,\n entry: secondarySharedTreeShakingEntry,\n type: libraryType,\n entryGlobalName: secondarySharedTreeShakingName,\n // current not used\n shareScope: 'default',\n },\n });\n // TODO: add errorLoad hook ?\n // @ts-ignore\n await shareEntry.init(\n origin,\n // @ts-ignore\n __webpack_require__.federation.bundlerRuntime,\n );\n // @ts-ignore\n const getter = shareEntry.get();\n return getter;\n };\n }\n };\n shared.forEach(([pkgName, sharedArg]) => {\n patchShared(pkgName, sharedArg);\n });\n\n return args;\n },\n };\n };\n\n initOptions.plugins ||= [];\n initOptions.plugins.push(treeShakingSharePlugin());\n return runtime!.init(initOptions);\n}\n"],"mappings":";;;;AAQA,SAAgB,KAAK,EAAE,kBAAsD;CAC3E,MAAM,EAAE,aAAa,SAAS,gBAAgB,gBAAgB,gBAC5D,eAAe;AAEjB,KAAI,CAAC,YACH,OAAM,IAAI,MAAM,2BAA2B;CAG7C,MAAM,yBACJ,WAAY;AACV,SAAO;GACL,MAAM;GACN,WAAW,MAAM;IACf,MAAM,EAAE,aAAa,QAAQ,SAAS,sBAAsB;IAC5D,MAAM,UAAU,YAAY,WAAW,kBAAkB;AACzD,QAAI,CAAC,eACH,QAAO;IAGT,MAAM,gBAAgB,YAAY,UAAU,EAAE;IAC9C,MAAM,SAA8C,EAAE;AAEtD,WAAO,KAAK,cAAc,CAAC,SAAS,eAAe;AAIjD,MAHmB,MAAM,QAAQ,cAAc,YAAY,GACvD,cAAc,cACd,CAAC,cAAc,YAAY,EACpB,SAAS,cAAc;AAChC,aAAO,KAAK,CAAC,YAAY,UAAU,CAAC;AACpC,UAAI,SAAS,WAAW;AACtB,iBAAU,gBAAgB,EAAE;AAC5B,iBAAU,YAAY,MAAM,UAAU;AACtC,iBAAU,MAAM,eAAgB,wBAAwB;QACtD,UAAU;QACV,SAAS,UAAU;QACnB;QACA;QACA,SAAS,UAAU;QACpB,CAAC;;OAEJ;MACF;IAGF,MAAM,qBACJ,QAAQ,OAAO,kCAAkC;KAC/C,MAAM,OAAO;KACJ;KACV,CAAC;AACJ,QAAI,CAAC,sBAAsB,EAAE,YAAY,oBACvC,QAAO;AAGT,WAAO,KAAK,kBAAkB,UAAU,EAAE,CAAC,CAAC,SAAS,YAAY;AAE/D,KADmB,kBAAkB,OAAO,SACjC,SAAS,cAAc;AAChC,aAAO,KAAK,CAAC,SAAS,UAAU,CAAC;OACjC;MACF;IAEF,MAAM,eAAe,SAAiB,WAAsB;KAC1D,MAAM,gBAAgB,mBAAmB,OAAO,MAC7C,SAAS,KAAK,eAAe,QAC/B;AACD,SAAI,CAAC,cACH;KAEF,MAAM,EAAE,gBAAgB;AACxB,SAAI,CAAC,YACH;KAEF,MAAM,EACJ,gCACA,iCACA,sBACE;AACJ,SAAI,YAAY,WAAW,kBACzB;AAEF,iBAAY,SAAS;AACrB,SACE,mCACA,eACA,+BAEA,aAAY,MAAM,YAAY;MAC5B,MAAM,aAAa,MAAM,eAAe;OACtC;OACA,YAAY;QACV,MAAM;QACN,OAAO;QACP,MAAM;QACN,iBAAiB;QAEjB,YAAY;QACb;OACF,CAAC;AAGF,YAAM,WAAW,KACf,QAEA,oBAAoB,WAAW,eAChC;AAGD,aADe,WAAW,KAAK;;;AAKrC,WAAO,SAAS,CAAC,SAAS,eAAe;AACvC,iBAAY,SAAS,UAAU;MAC/B;AAEF,WAAO;;GAEV;;AAGL,aAAY,YAAY,EAAE;AAC1B,aAAY,QAAQ,KAAK,wBAAwB,CAAC;AAClD,QAAO,QAAS,KAAK,YAAY"}
1
+ {"version":3,"file":"init.js","names":[],"sources":["../src/init.ts"],"sourcesContent":["import type { WebpackRequire } from './types';\nimport {\n getRemoteEntry,\n type ModuleFederationRuntimePlugin,\n} from '@module-federation/runtime';\nimport { ShareArgs } from '@module-federation/runtime/types';\nimport helpers from '@module-federation/runtime/helpers';\n\ndeclare const FEDERATION_OPTIMIZE_NO_SHARED: boolean;\n\nconst USE_SHARED =\n typeof FEDERATION_OPTIMIZE_NO_SHARED === 'boolean'\n ? !FEDERATION_OPTIMIZE_NO_SHARED\n : true;\n\nexport function init({ webpackRequire }: { webpackRequire: WebpackRequire }) {\n const { initOptions, runtime, sharedFallback, bundlerRuntime, libraryType } =\n webpackRequire.federation;\n\n if (!initOptions) {\n throw new Error('initOptions is required!');\n }\n\n if (USE_SHARED) {\n const treeShakingSharePlugin: () => ModuleFederationRuntimePlugin =\n function () {\n return {\n name: 'tree-shake-plugin',\n beforeInit(args) {\n const { userOptions, origin, options: registeredOptions } = args;\n const version = userOptions.version || registeredOptions.version;\n if (!sharedFallback) {\n return args;\n }\n\n const currentShared = userOptions.shared || {};\n const shared: Array<[pkgName: string, ShareArgs]> = [];\n\n Object.keys(currentShared).forEach((sharedName) => {\n const sharedArgs = Array.isArray(currentShared[sharedName])\n ? currentShared[sharedName]\n : [currentShared[sharedName]];\n sharedArgs.forEach((sharedArg) => {\n shared.push([sharedName, sharedArg]);\n if ('get' in sharedArg) {\n sharedArg.treeShaking ||= {};\n sharedArg.treeShaking.get = sharedArg.get;\n sharedArg.get = bundlerRuntime!.getSharedFallbackGetter({\n shareKey: sharedName,\n factory: sharedArg.get,\n webpackRequire,\n libraryType,\n version: sharedArg.version,\n });\n }\n });\n });\n\n // read snapshot to override re-shake getter\n const hostGlobalSnapshot =\n helpers.global.getGlobalSnapshotInfoByModuleInfo({\n name: origin.name,\n version: version,\n });\n if (!hostGlobalSnapshot || !('shared' in hostGlobalSnapshot)) {\n return args;\n }\n\n Object.keys(registeredOptions.shared || {}).forEach((pkgName) => {\n const sharedInfo = registeredOptions.shared[pkgName];\n sharedInfo.forEach((sharedArg) => {\n shared.push([pkgName, sharedArg]);\n });\n });\n\n const patchShared = (pkgName: string, shared: ShareArgs) => {\n const shareSnapshot = hostGlobalSnapshot.shared.find(\n (item) => item.sharedName === pkgName,\n );\n if (!shareSnapshot) {\n return;\n }\n const { treeShaking } = shared;\n if (!treeShaking) {\n return;\n }\n const {\n secondarySharedTreeShakingName,\n secondarySharedTreeShakingEntry,\n treeShakingStatus,\n } = shareSnapshot;\n if (treeShaking.status === treeShakingStatus) {\n return;\n }\n treeShaking.status = treeShakingStatus;\n if (\n secondarySharedTreeShakingEntry &&\n libraryType &&\n secondarySharedTreeShakingName\n ) {\n treeShaking.get = async () => {\n const shareEntry = await getRemoteEntry({\n origin,\n remoteInfo: {\n name: secondarySharedTreeShakingName,\n entry: secondarySharedTreeShakingEntry,\n type: libraryType,\n entryGlobalName: secondarySharedTreeShakingName,\n // current not used\n shareScope: 'default',\n },\n });\n // TODO: add errorLoad hook ?\n // @ts-ignore\n await shareEntry.init(\n origin,\n // @ts-ignore\n __webpack_require__.federation.bundlerRuntime,\n );\n // @ts-ignore\n const getter = shareEntry.get();\n return getter;\n };\n }\n };\n shared.forEach(([pkgName, sharedArg]) => {\n patchShared(pkgName, sharedArg);\n });\n\n return args;\n },\n };\n };\n\n initOptions.plugins ||= [];\n initOptions.plugins.push(treeShakingSharePlugin());\n }\n return runtime!.init(initOptions);\n}\n"],"mappings":";;;;AAUA,MAAM,aACJ,OAAO,kCAAkC,YACrC,CAAC,gCACD;AAEN,SAAgB,KAAK,EAAE,kBAAsD;CAC3E,MAAM,EAAE,aAAa,SAAS,gBAAgB,gBAAgB,gBAC5D,eAAe;AAEjB,KAAI,CAAC,YACH,OAAM,IAAI,MAAM,2BAA2B;AAG7C,KAAI,YAAY;EACd,MAAM,yBACJ,WAAY;AACV,UAAO;IACL,MAAM;IACN,WAAW,MAAM;KACf,MAAM,EAAE,aAAa,QAAQ,SAAS,sBAAsB;KAC5D,MAAM,UAAU,YAAY,WAAW,kBAAkB;AACzD,SAAI,CAAC,eACH,QAAO;KAGT,MAAM,gBAAgB,YAAY,UAAU,EAAE;KAC9C,MAAM,SAA8C,EAAE;AAEtD,YAAO,KAAK,cAAc,CAAC,SAAS,eAAe;AAIjD,OAHmB,MAAM,QAAQ,cAAc,YAAY,GACvD,cAAc,cACd,CAAC,cAAc,YAAY,EACpB,SAAS,cAAc;AAChC,cAAO,KAAK,CAAC,YAAY,UAAU,CAAC;AACpC,WAAI,SAAS,WAAW;AACtB,kBAAU,gBAAgB,EAAE;AAC5B,kBAAU,YAAY,MAAM,UAAU;AACtC,kBAAU,MAAM,eAAgB,wBAAwB;SACtD,UAAU;SACV,SAAS,UAAU;SACnB;SACA;SACA,SAAS,UAAU;SACpB,CAAC;;QAEJ;OACF;KAGF,MAAM,qBACJ,QAAQ,OAAO,kCAAkC;MAC/C,MAAM,OAAO;MACJ;MACV,CAAC;AACJ,SAAI,CAAC,sBAAsB,EAAE,YAAY,oBACvC,QAAO;AAGT,YAAO,KAAK,kBAAkB,UAAU,EAAE,CAAC,CAAC,SAAS,YAAY;AAE/D,MADmB,kBAAkB,OAAO,SACjC,SAAS,cAAc;AAChC,cAAO,KAAK,CAAC,SAAS,UAAU,CAAC;QACjC;OACF;KAEF,MAAM,eAAe,SAAiB,WAAsB;MAC1D,MAAM,gBAAgB,mBAAmB,OAAO,MAC7C,SAAS,KAAK,eAAe,QAC/B;AACD,UAAI,CAAC,cACH;MAEF,MAAM,EAAE,gBAAgB;AACxB,UAAI,CAAC,YACH;MAEF,MAAM,EACJ,gCACA,iCACA,sBACE;AACJ,UAAI,YAAY,WAAW,kBACzB;AAEF,kBAAY,SAAS;AACrB,UACE,mCACA,eACA,+BAEA,aAAY,MAAM,YAAY;OAC5B,MAAM,aAAa,MAAM,eAAe;QACtC;QACA,YAAY;SACV,MAAM;SACN,OAAO;SACP,MAAM;SACN,iBAAiB;SAEjB,YAAY;SACb;QACF,CAAC;AAGF,aAAM,WAAW,KACf,QAEA,oBAAoB,WAAW,eAChC;AAGD,cADe,WAAW,KAAK;;;AAKrC,YAAO,SAAS,CAAC,SAAS,eAAe;AACvC,kBAAY,SAAS,UAAU;OAC/B;AAEF,YAAO;;IAEV;;AAGL,cAAY,YAAY,EAAE;AAC1B,cAAY,QAAQ,KAAK,wBAAwB,CAAC;;AAEpD,QAAO,QAAS,KAAK,YAAY"}
package/dist/types.d.ts CHANGED
@@ -1,9 +1,9 @@
1
1
  import { initializeSharing } from "./initializeSharing.js";
2
2
  import { attachShareScopeMap } from "./attachShareScopeMap.js";
3
3
  import { initContainerEntry } from "./initContainerEntry.js";
4
- import { moduleFederationPlugin } from "@module-federation/sdk";
5
4
  import * as runtime from "@module-federation/runtime";
6
5
  import { Remote, RemoteEntryInitOptions, SharedConfig, SharedGetter, TreeShakingArgs } from "@module-federation/runtime/types";
6
+ import { moduleFederationPlugin } from "@module-federation/sdk";
7
7
 
8
8
  //#region src/types.d.ts
9
9
  type ExcludeUndefined<T> = T extends undefined ? never : T;
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "public": true,
3
3
  "name": "@module-federation/webpack-bundler-runtime",
4
- "version": "2.6.0",
4
+ "version": "2.8.0",
5
5
  "type": "module",
6
6
  "license": "MIT",
7
7
  "description": "Module Federation Runtime for webpack",
@@ -26,9 +26,9 @@
26
26
  "module": "./dist/index.js",
27
27
  "types": "./dist/index.d.ts",
28
28
  "dependencies": {
29
- "@module-federation/runtime": "2.6.0",
30
- "@module-federation/sdk": "2.6.0",
31
- "@module-federation/error-codes": "2.6.0"
29
+ "@module-federation/error-codes": "2.8.0",
30
+ "@module-federation/sdk": "2.8.0",
31
+ "@module-federation/runtime": "2.8.0"
32
32
  },
33
33
  "exports": {
34
34
  ".": {