UNPKG

@module-federation/enhanced

Version:

This package provides enhanced features for module federation.

60 lines (57 loc) 3.86 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_ContainerEntryModule = require('../container/ContainerEntryModule.js'); const require_lib_startup_StartupHelpers = require('./StartupHelpers.js'); let _module_federation_sdk_normalize_webpack_path = require("@module-federation/sdk/normalize-webpack-path"); //#region src/lib/startup/MfStartupChunkDependenciesPlugin.ts const { RuntimeGlobals } = require((0, _module_federation_sdk_normalize_webpack_path.normalizeWebpackPath)("webpack")); const StartupEntrypointRuntimeModule = require((0, _module_federation_sdk_normalize_webpack_path.normalizeWebpackPath)("webpack/lib/runtime/StartupEntrypointRuntimeModule")); var StartupChunkDependenciesPlugin = class { constructor(options) { this.asyncChunkLoading = options.asyncChunkLoading ?? true; } isEnabledForChunk(chunk, compilation) { if (chunk.id === "build time chunk") return false; const [finalEntry] = Array.from(compilation.chunkGraph.getChunkEntryModulesIterable(chunk)).reverse() || []; return !(finalEntry instanceof require_lib_container_ContainerEntryModule.default); } apply(compiler) { compiler.hooks.thisCompilation.tap("MfStartupChunkDependenciesPlugin", (compilation) => { compilation.hooks.additionalTreeRuntimeRequirements.tap("StartupChunkDependenciesPlugin", (chunk, set, { chunkGraph }) => { if (!this.isEnabledForChunk(chunk, compilation)) return; if (chunk.hasRuntime()) { set.add(RuntimeGlobals.startupEntrypoint); set.add(RuntimeGlobals.ensureChunk); set.add(RuntimeGlobals.ensureChunkIncludeEntries); } }); compilation.hooks.additionalChunkRuntimeRequirements.tap("MfStartupChunkDependenciesPlugin", (chunk, set, { chunkGraph }) => { if (!this.isEnabledForChunk(chunk, compilation)) return; if (chunkGraph.getNumberOfEntryModules(chunk) === 0) return; set.add(require_lib_startup_StartupHelpers.federationStartup); }); compilation.hooks.runtimeRequirementInTree.for(RuntimeGlobals.startupEntrypoint).tap("StartupChunkDependenciesPlugin", (chunk, set, { chunkGraph }) => { if (!this.isEnabledForChunk(chunk, compilation)) return; set.add(RuntimeGlobals.require); set.add(RuntimeGlobals.ensureChunk); set.add(RuntimeGlobals.ensureChunkIncludeEntries); compilation.addRuntimeModule(chunk, new StartupEntrypointRuntimeModule(this.asyncChunkLoading)); }); const { renderStartup } = compiler.webpack.javascript.JavascriptModulesPlugin.getCompilationHooks(compilation); renderStartup.tap("MfStartupChunkDependenciesPlugin", (startupSource, lastInlinedModule, renderContext) => { const { chunk, chunkGraph, runtimeTemplate } = renderContext; if (!this.isEnabledForChunk(chunk, compilation)) return startupSource; if (chunkGraph.getNumberOfEntryModules(chunk) === 0) return startupSource; const treeRuntimeRequirements = chunkGraph.getTreeRuntimeRequirements(chunk); if (!(chunkGraph.getChunkRuntimeRequirements(chunk).has(require_lib_startup_StartupHelpers.federationStartup) || treeRuntimeRequirements.has(require_lib_startup_StartupHelpers.federationStartup))) return startupSource; const entryModules = Array.from(chunkGraph.getChunkEntryModulesWithChunkGroupIterable(chunk)); const entryGeneration = runtimeTemplate.outputOptions.module ? require_lib_startup_StartupHelpers.generateESMEntryStartup : require_lib_startup_StartupHelpers.generateEntryStartup; return new compiler.webpack.sources.ConcatSource(entryGeneration(compilation, chunkGraph, runtimeTemplate, entryModules, chunk, false)); }); }); } }; //#endregion exports.default = StartupChunkDependenciesPlugin; //# sourceMappingURL=MfStartupChunkDependenciesPlugin.js.map