@module-federation/enhanced
Version:
This package provides enhanced features for module federation.
84 lines (81 loc) • 4.07 kB
JavaScript
;
Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: 'Module' } });
const require_runtime = require('../../_virtual/_rolldown/runtime.js');
const require_lib_container_runtime_utils = require('../container/runtime/utils.js');
let _module_federation_sdk_normalize_webpack_path = require("@module-federation/sdk/normalize-webpack-path");
//#region src/lib/sharing/ShareRuntimeModule.ts
const { Template, RuntimeGlobals, RuntimeModule } = require((0, _module_federation_sdk_normalize_webpack_path.normalizeWebpackPath)("webpack"));
const { compareModulesByIdentifier } = require((0, _module_federation_sdk_normalize_webpack_path.normalizeWebpackPath)("webpack/lib/util/comparators"));
var ShareRuntimeModule = class extends RuntimeModule {
constructor() {
super("sharing", RuntimeModule.STAGE_NORMAL + 2);
}
/**
* @returns {string | null} runtime code
*/
generate() {
const compilation = this.compilation;
if (!compilation) throw new Error("Compilation is undefined");
const { runtimeTemplate, codeGenerationResults } = compilation;
if (!codeGenerationResults) return null;
const chunkGraph = this.chunkGraph;
if (!chunkGraph) throw new Error("ChunkGraph is undefined");
const initCodePerScope = /* @__PURE__ */ new Map();
const sharedInitOptions = {};
for (const chunk of this.chunk?.getAllReferencedChunks() || []) {
if (!chunk) continue;
const modules = chunkGraph.getOrderedChunkModulesIterableBySourceType(chunk, "share-init", compareModulesByIdentifier);
if (!modules) continue;
for (const m of modules) {
const data = codeGenerationResults.getData(m, chunk.runtime, "share-init");
if (!data) continue;
for (const item of data) {
const { shareScope, initStage, init } = item;
let stages = initCodePerScope.get(shareScope);
if (stages === void 0) initCodePerScope.set(shareScope, stages = /* @__PURE__ */ new Map());
let list = stages.get(initStage || 0);
if (list === void 0) stages.set(initStage || 0, list = /* @__PURE__ */ new Set());
list.add(init);
}
const sharedOption = codeGenerationResults.getData(m, chunk.runtime, "share-init-option");
if (sharedOption) {
sharedInitOptions[sharedOption.name] = sharedInitOptions[sharedOption.name] || [];
if (!sharedInitOptions[sharedOption.name].find((s) => s.version === sharedOption.version && s.shareConfig?.layer === sharedOption.shareConfig?.layer)) sharedInitOptions[sharedOption.name].push(sharedOption);
}
}
}
const sharedInitOptionsStr = Object.keys(sharedInitOptions).reduce((sum, sharedName) => {
const sharedOptions = sharedInitOptions[sharedName];
let str = "";
sharedOptions.forEach((option) => {
str += `{${Template.indent([
`version: ${option.version},`,
`get: ${option.getter},`,
`scope: ${JSON.stringify(Array.isArray(option.shareScope) ? option.shareScope.flat() : [option.shareScope])},`,
`shareConfig: ${JSON.stringify(option.shareConfig)},`,
`${option.treeShakingMode ? `treeShaking: {mode: '${option.treeShakingMode}'},` : ""}`
])}},`;
});
str = `[${str}]`;
sum += `${Template.indent([`"${sharedName}": ${str},`])}`;
return sum;
}, "");
const federationGlobal = require_lib_container_runtime_utils.getFederationGlobalScope(RuntimeGlobals || {});
return Template.asString([
`${require_lib_container_runtime_utils.getFederationGlobalScope(RuntimeGlobals)}.initOptions.shared = {${sharedInitOptionsStr}}`,
`${RuntimeGlobals.shareScopeMap} = {};`,
"var initPromises = {};",
"var initTokens = {};",
`${RuntimeGlobals.initializeSharing} = ${runtimeTemplate.basicFunction("name, initScope", [`return ${federationGlobal}.bundlerRuntime.I({${Template.indent([
`shareScopeName: name,`,
`webpackRequire: ${RuntimeGlobals.require},`,
`initPromises: initPromises,`,
`initTokens: initTokens,`,
`initScope: initScope,`
])}`, "})"])};`
]);
}
};
//#endregion
exports.default = ShareRuntimeModule;
//# sourceMappingURL=ShareRuntimeModule.js.map