UNPKG

@module-federation/enhanced

Version:

This package provides enhanced features for module federation.

75 lines (73 loc) 4.52 kB
Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: 'Module' } }); const require_runtime = require('../../_virtual/_rolldown/runtime.js'); const require_lib_container_options = require('./options.js'); const require_lib_container_runtime_FederationModulesPlugin = require('./runtime/FederationModulesPlugin.js'); const require_lib_container_runtime_FederationRuntimePlugin = require('./runtime/FederationRuntimePlugin.js'); const require_lib_container_FallbackDependency = require('./FallbackDependency.js'); const require_lib_container_FallbackItemDependency = require('./FallbackItemDependency.js'); const require_lib_container_FallbackModuleFactory = require('./FallbackModuleFactory.js'); const require_lib_container_RemoteToExternalDependency = require('./RemoteToExternalDependency.js'); const require_lib_container_RemoteModule = require('./RemoteModule.js'); const require_lib_container_RemoteRuntimeModule = require('./RemoteRuntimeModule.js'); let _module_federation_sdk_normalize_webpack_path = require("@module-federation/sdk/normalize-webpack-path"); //#region src/lib/container/ContainerReferencePlugin.ts const { ExternalsPlugin } = require((0, _module_federation_sdk_normalize_webpack_path.normalizeWebpackPath)("webpack")); const slashCode = "/".charCodeAt(0); var ContainerReferencePlugin = class { constructor(options) { this._remoteType = options.remoteType; this._remotes = require_lib_container_options.parseOptions(options.remotes, (item) => ({ external: Array.isArray(item) ? item : [item], shareScope: options.shareScope || "default" }), (item) => ({ external: Array.isArray(item.external) ? item.external : [item.external], shareScope: item.shareScope || options.shareScope || "default" })); } /** * Apply the plugin * @param {Compiler} compiler the compiler instance * @returns {void} */ apply(compiler) { const { _remotes: remotes, _remoteType: remoteType } = this; new require_lib_container_runtime_FederationRuntimePlugin.default().apply(compiler); /** @type {Record<string, string>} */ const remoteExternals = {}; for (const [key, config] of remotes) { let i = 0; for (const external of config.external) { if (typeof external === "string" && external.startsWith("internal ")) continue; remoteExternals[`webpack/container/reference/${key}${i ? `/fallback-${i}` : ""}`] = external; i++; } } new (compiler.webpack.ExternalsPlugin || ExternalsPlugin)(remoteType, remoteExternals).apply(compiler); compiler.hooks.compilation.tap("ContainerReferencePlugin", (compilation, { normalModuleFactory }) => { compilation.dependencyFactories.set(require_lib_container_RemoteToExternalDependency.default, normalModuleFactory); compilation.dependencyFactories.set(require_lib_container_FallbackItemDependency.default, normalModuleFactory); compilation.dependencyFactories.set(require_lib_container_FallbackDependency.default, new require_lib_container_FallbackModuleFactory.default()); const hooks = require_lib_container_runtime_FederationModulesPlugin.default.getCompilationHooks(compilation); normalModuleFactory.hooks.factorize.tap("ContainerReferencePlugin", (data) => { if (!data.request.includes("!")) { for (const [key, config] of remotes) if (data.request.startsWith(`${key}`) && (data.request.length === key.length || data.request.charCodeAt(key.length) === slashCode)) { const remoteModule = new require_lib_container_RemoteModule.default(data.request, config.external.map((external, i) => external.startsWith("internal ") ? external.slice(9) : `webpack/container/reference/${key}${i ? `/fallback-${i}` : ""}`), `.${data.request.slice(key.length)}`, config.shareScope); hooks.addRemoteDependency.call(remoteModule); return remoteModule; } } }); compilation.hooks.runtimeRequirementInTree.for(compiler.webpack.RuntimeGlobals.ensureChunkHandlers).tap("ContainerReferencePlugin", (chunk, set) => { set.add(compiler.webpack.RuntimeGlobals.module); set.add(compiler.webpack.RuntimeGlobals.moduleFactoriesAddOnly); set.add(compiler.webpack.RuntimeGlobals.hasOwnProperty); set.add(compiler.webpack.RuntimeGlobals.initializeSharing); set.add(compiler.webpack.RuntimeGlobals.shareScopeMap); compilation.addRuntimeModule(chunk, new require_lib_container_RemoteRuntimeModule.default()); }); }); } }; //#endregion exports.default = ContainerReferencePlugin; //# sourceMappingURL=ContainerReferencePlugin.js.map