Skip to content

Commit

Permalink
fix: should use userOptions.shared to apply hooks (#2476)
Browse files Browse the repository at this point in the history
  • Loading branch information
2heal1 authored May 11, 2024
1 parent d259a37 commit 08740a0
Show file tree
Hide file tree
Showing 4 changed files with 50 additions and 41 deletions.
5 changes: 5 additions & 0 deletions .changeset/forty-olives-hammer.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'@module-federation/runtime': patch
---

fix: should use userOptions.shared to apply hooks
13 changes: 7 additions & 6 deletions packages/runtime/src/core.ts
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ import { DEFAULT_SCOPE } from './constant';
import { SnapshotHandler } from './plugins/snapshot/SnapshotHandler';
import { SharedHandler } from './shared';
import { RemoteHandler } from './remote';
import { formatShareConfigs } from './utils/share';

export class FederationHost {
options: Options;
Expand Down Expand Up @@ -210,10 +211,7 @@ export class FederationHost {
globalOptions: Options,
userOptions: UserOptions,
): Options {
const { shared, shareInfos } = this.sharedHandler.formatShareConfigs(
globalOptions,
userOptions,
);
const { shared } = formatShareConfigs(globalOptions, userOptions);
const { userOptions: userOptionsRes, options: globalOptionsRes } =
this.hooks.lifecycle.beforeInit.emit({
origin: this,
Expand All @@ -227,7 +225,10 @@ export class FederationHost {
userOptionsRes,
);

this.sharedHandler.registerShared(shareInfos, userOptions);
const { shared: handledShared } = this.sharedHandler.registerShared(
globalOptionsRes,
userOptionsRes,
);

const plugins = [...globalOptionsRes.plugins];

Expand All @@ -244,7 +245,7 @@ export class FederationHost {
...userOptions,
plugins,
remotes,
shared,
shared: handledShared,
};

this.hooks.lifecycle.init.emit({
Expand Down
38 changes: 10 additions & 28 deletions packages/runtime/src/shared/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -59,36 +59,13 @@ export class SharedHandler {
this._setGlobalShareScopeMap(host.options);
}

formatShareConfigs(globalOptions: Options, userOptions: UserOptions) {
const shareInfos = formatShareConfigs(
userOptions.shared || {},
userOptions.name,
// register shared in shareScopeMap
registerShared(globalOptions: Options, userOptions: UserOptions) {
const { shareInfos, shared } = formatShareConfigs(
globalOptions,
userOptions,
);

const shared = {
...globalOptions.shared,
};

Object.keys(shareInfos).forEach((shareKey) => {
if (!shared[shareKey]) {
shared[shareKey] = shareInfos[shareKey];
} else {
shareInfos[shareKey].forEach((newUserSharedOptions) => {
const isSameVersion = shared[shareKey].find(
(sharedVal) => sharedVal.version === newUserSharedOptions.version,
);
if (!isSameVersion) {
shared[shareKey].push(newUserSharedOptions);
}
});
}
});

return { shared, shareInfos };
}

// register shared in shareScopeMap
registerShared(shareInfos: ShareInfos, userOptions: UserOptions) {
const sharedKeys = Object.keys(shareInfos);
sharedKeys.forEach((sharedKey) => {
const sharedVals = shareInfos[sharedKey];
Expand All @@ -111,6 +88,11 @@ export class SharedHandler {
}
});
});

return {
shareInfos,
shared,
};
}

async loadShare<T>(
Expand Down
35 changes: 28 additions & 7 deletions packages/runtime/src/utils/share.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import {
ShareScopeMap,
LoadShareExtraOptions,
UserOptions,
Options,
} from '../type';
import { warn, error } from './logger';
import { satisfy } from './semver';
Expand Down Expand Up @@ -55,20 +56,40 @@ export function formatShare(
}

export function formatShareConfigs(
shareArgs: UserOptions['shared'],
from: string,
): ShareInfos {
if (!shareArgs) {
return {};
}
return Object.keys(shareArgs).reduce((res, pkgName) => {
globalOptions: Options,
userOptions: UserOptions,
) {
const shareArgs = userOptions.shared || {};
const from = userOptions.name;

const shareInfos = Object.keys(shareArgs).reduce((res, pkgName) => {
const arrayShareArgs = arrayOptions(shareArgs[pkgName]);
res[pkgName] = res[pkgName] || [];
arrayShareArgs.forEach((shareConfig) => {
res[pkgName].push(formatShare(shareConfig, from, pkgName));
});
return res;
}, {} as ShareInfos);

const shared = {
...globalOptions.shared,
};

Object.keys(shareInfos).forEach((shareKey) => {
if (!shared[shareKey]) {
shared[shareKey] = shareInfos[shareKey];
} else {
shareInfos[shareKey].forEach((newUserSharedOptions) => {
const isSameVersion = shared[shareKey].find(
(sharedVal) => sharedVal.version === newUserSharedOptions.version,
);
if (!isSameVersion) {
shared[shareKey].push(newUserSharedOptions);
}
});
}
});
return { shared, shareInfos };
}

export function versionLt(a: string, b: string): boolean {
Expand Down

0 comments on commit 08740a0

Please sign in to comment.