UNPKG

@module-federation/enhanced

Version:

This package provides enhanced features for module federation.

180 lines (178 loc) 6.4 kB
Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: 'Module' } }); const require_runtime = require('../../_virtual/_rolldown/runtime.js'); const require_lib_Constants = require('../Constants.js'); const require_lib_sharing_ProvideForSharedDependency = require('./ProvideForSharedDependency.js'); let _module_federation_sdk_normalize_webpack_path = require("@module-federation/sdk/normalize-webpack-path"); //#region src/lib/sharing/ProvideSharedModule.ts const { AsyncDependenciesBlock, Module, RuntimeGlobals } = require((0, _module_federation_sdk_normalize_webpack_path.normalizeWebpackPath)("webpack")); const makeSerializable = require((0, _module_federation_sdk_normalize_webpack_path.normalizeWebpackPath)("webpack/lib/util/makeSerializable")); const TYPES = new Set(["share-init"]); /** * @class * @extends {Module} */ var ProvideSharedModule = class ProvideSharedModule extends Module { /** * @constructor * @param {string|string[]} shareScope shared scope name * @param {string} name shared key * @param {string | false} version version * @param {string} request request to the provided module * @param {boolean} eager include the module in sync way * @param {boolean} requiredVersion version requirement * @param {boolean} strictVersion don't use shared version even if version isn't valid * @param {boolean} singleton use single global version * @param {string} [layer] layer information */ constructor(shareScope, name, version, request, eager, requiredVersion, strictVersion, singleton, layer, treeShakingMode) { super(require_lib_Constants.WEBPACK_MODULE_TYPE_PROVIDE, void 0, layer); this._shareScope = shareScope; this._name = name; this._version = version; this._request = request; this._eager = eager; this._requiredVersion = requiredVersion; this._strictVersion = strictVersion; this._singleton = singleton; this._treeShakingMode = treeShakingMode; } /** * @returns {string} a unique identifier of the module */ identifier() { return `provide module (${this._shareScope})${this.layer ? ` (${this.layer})` : ""} ${this._name}@${this._version} = ${this._request}`; } /** * @param {RequestShortener} requestShortener the request shortener * @returns {string} a user readable identifier of the module */ readableIdentifier(requestShortener) { return `provide shared module (${this._shareScope})${this.layer ? ` (${this.layer})` : ""} ${this._name}@${this._version} = ${requestShortener.shorten(this._request)}`; } /** * @param {LibIdentOptions} options options * @returns {string | null} an identifier for library inclusion */ libIdent(options) { return `${this.layer ? `(${this.layer})/` : ""}webpack/sharing/provide/${this._shareScope}/${this._name}`; } /** * @param {NeedBuildContext} context context info * @param {function((WebpackError | null)=, boolean=): void} callback callback function, returns true, if the module needs a rebuild * @returns {void} */ needBuild(context, callback) { callback(null, !this.buildInfo); } /** * @param {WebpackOptions} options webpack options * @param {Compilation} compilation the compilation * @param {ResolverWithOptions} resolver the resolver * @param {InputFileSystem} fs the file system * @param {function(WebpackError=): void} callback callback function * @returns {void} */ build(options, compilation, resolver, fs, callback) { this.buildMeta = {}; this.buildInfo = { strict: true }; this.clearDependenciesAndBlocks(); const dep = new require_lib_sharing_ProvideForSharedDependency.default(this._request); if (this._eager) this.addDependency(dep); else { const block = new AsyncDependenciesBlock({}); block.addDependency(dep); this.addBlock(block); } callback(); } /** * @param {string=} type the source type for which the size should be estimated * @returns {number} the estimated size of the module (must be non-zero) */ size(type) { return 42; } /** * @returns {Set<string>} types available (do not mutate) */ getSourceTypes() { return TYPES; } /** * @param {CodeGenerationContext} context context for code generation * @returns {CodeGenerationResult} result */ codeGeneration({ runtimeTemplate, moduleGraph, chunkGraph }) { const runtimeRequirements = new Set([RuntimeGlobals.initializeSharing]); const moduleGetter = this._eager ? runtimeTemplate.syncModuleFactory({ dependency: this.dependencies[0], chunkGraph, request: this._request, runtimeRequirements }) : runtimeTemplate.asyncModuleFactory({ block: this.blocks[0], chunkGraph, request: this._request, runtimeRequirements }); const code = `register(${JSON.stringify(this._name)}, ${JSON.stringify(this._version || "0")}, ${moduleGetter}${this._eager ? ", 1" : ""});`; const sources = /* @__PURE__ */ new Map(); const data = /* @__PURE__ */ new Map(); data.set("share-init", [{ shareScope: this._shareScope, initStage: 10, init: code }]); data.set("share-init-option", { name: this._name, version: JSON.stringify(this._version || "0"), request: this._request, getter: moduleGetter, shareScope: this._shareScope, shareConfig: { eager: this._eager, requiredVersion: this._requiredVersion, strictVersion: this._strictVersion, singleton: this._singleton, layer: this.layer }, treeShakingMode: this._treeShakingMode }); return { sources, data, runtimeRequirements }; } /** * @param {ObjectSerializerContext} context context */ serialize(context) { const { write } = context; write(this._shareScope); write(this._name); write(this._version); write(this._request); write(this._eager); write(this._requiredVersion); write(this._strictVersion); write(this._singleton); write(this.layer); write(this._treeShakingMode); super.serialize(context); } /** * @param {ObjectDeserializerContext} context context * @returns {ProvideSharedModule} deserialize fallback dependency */ static deserialize(context) { const { read } = context; const obj = new ProvideSharedModule(read(), read(), read(), read(), read(), read(), read(), read(), read(), read()); obj.deserialize(context); return obj; } }; makeSerializable(ProvideSharedModule, "enhanced/lib/sharing/ProvideSharedModule"); //#endregion exports.default = ProvideSharedModule; //# sourceMappingURL=ProvideSharedModule.js.map