UNPKG

@module-federation/enhanced

Version:

This package provides enhanced features for module federation.

84 lines (81 loc) 4.07 kB
'use strict'; 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