8889841cPK‹«[ĄĮŌ‰#ChunkPreloadTriggerRuntimeModule.jsnuW+A„¶/* MIT License http://www.opensource.org/licenses/mit-license.php */ "use strict"; const RuntimeGlobals = require("../RuntimeGlobals"); const RuntimeModule = require("../RuntimeModule"); const Template = require("../Template"); /** @typedef {import("../RuntimeTemplate")} RuntimeTemplate */ class ChunkPreloadTriggerRuntimeModule extends RuntimeModule { /** * @param {Record} chunkMap map from chunk to chunks */ constructor(chunkMap) { super(`chunk preload trigger`, RuntimeModule.STAGE_TRIGGER); this.chunkMap = chunkMap; } /** * @returns {string} runtime code */ generate() { const { chunkMap } = this; const { runtimeTemplate } = this.compilation; const body = [ "var chunks = chunkToChildrenMap[chunkId];", `Array.isArray(chunks) && chunks.map(${RuntimeGlobals.preloadChunk});` ]; return Template.asString([ Template.asString([ `var chunkToChildrenMap = ${JSON.stringify(chunkMap, null, "\t")};`, `${ RuntimeGlobals.ensureChunkHandlers }.preload = ${runtimeTemplate.basicFunction("chunkId", body)};` ]) ]); } } module.exports = ChunkPreloadTriggerRuntimeModule; PK‹«[„†&q$ChunkPrefetchTriggerRuntimeModule.jsnuW+A„¶/* MIT License http://www.opensource.org/licenses/mit-license.php */ "use strict"; const RuntimeGlobals = require("../RuntimeGlobals"); const RuntimeModule = require("../RuntimeModule"); const Template = require("../Template"); /** @typedef {import("../RuntimeTemplate")} RuntimeTemplate */ class ChunkPrefetchTriggerRuntimeModule extends RuntimeModule { /** * @param {Record} chunkMap map from chunk to */ constructor(chunkMap) { super(`chunk prefetch trigger`, RuntimeModule.STAGE_TRIGGER); this.chunkMap = chunkMap; } /** * @returns {string} runtime code */ generate() { const { chunkMap } = this; const { runtimeTemplate } = this.compilation; const body = [ "var chunks = chunkToChildrenMap[chunkId];", `Array.isArray(chunks) && chunks.map(${RuntimeGlobals.prefetchChunk});` ]; return Template.asString([ Template.asString([ `var chunkToChildrenMap = ${JSON.stringify(chunkMap, null, "\t")};`, `${ RuntimeGlobals.ensureChunkHandlers }.prefetch = ${runtimeTemplate.expressionFunction( `Promise.all(promises).then(${runtimeTemplate.basicFunction( "", body )})`, "chunkId, promises" )};` ]) ]); } } module.exports = ChunkPrefetchTriggerRuntimeModule; PK‹«[Q˜ŅY¤¤%ChunkPrefetchFunctionRuntimeModule.jsnuW+A„¶/* MIT License http://www.opensource.org/licenses/mit-license.php */ "use strict"; const RuntimeModule = require("../RuntimeModule"); const Template = require("../Template"); /** @typedef {import("../RuntimeTemplate")} RuntimeTemplate */ class ChunkPrefetchFunctionRuntimeModule extends RuntimeModule { /** * @param {string} childType TODO * @param {string} runtimeFunction TODO * @param {string} runtimeHandlers TODO */ constructor(childType, runtimeFunction, runtimeHandlers) { super(`chunk ${childType} function`); this.childType = childType; this.runtimeFunction = runtimeFunction; this.runtimeHandlers = runtimeHandlers; } /** * @returns {string} runtime code */ generate() { const { runtimeFunction, runtimeHandlers } = this; const { runtimeTemplate } = this.compilation; return Template.asString([ `${runtimeHandlers} = {};`, `${runtimeFunction} = ${runtimeTemplate.basicFunction("chunkId", [ // map is shorter than forEach `Object.keys(${runtimeHandlers}).map(${runtimeTemplate.basicFunction( "key", `${runtimeHandlers}[key](chunkId);` )});` ])}` ]); } } module.exports = ChunkPrefetchFunctionRuntimeModule; PK‹«[‚ć’;ßß$ChunkPrefetchStartupRuntimeModule.jsnuW+A„¶/* MIT License http://www.opensource.org/licenses/mit-license.php */ "use strict"; const RuntimeGlobals = require("../RuntimeGlobals"); const RuntimeModule = require("../RuntimeModule"); const Template = require("../Template"); /** @typedef {import("../Chunk")} Chunk */ /** @typedef {import("../RuntimeTemplate")} RuntimeTemplate */ class ChunkPrefetchStartupRuntimeModule extends RuntimeModule { /** * @param {{ onChunks: Chunk[], chunks: Set }[]} startupChunks chunk ids to trigger when chunks are loaded */ constructor(startupChunks) { super("startup prefetch", RuntimeModule.STAGE_TRIGGER); this.startupChunks = startupChunks; } /** * @returns {string} runtime code */ generate() { const { startupChunks, chunk } = this; const { runtimeTemplate } = this.compilation; return Template.asString( startupChunks.map( ({ onChunks, chunks }) => `${RuntimeGlobals.onChunksLoaded}(0, ${JSON.stringify( // This need to include itself to delay execution after this chunk has been fully loaded onChunks.filter(c => c === chunk).map(c => c.id) )}, ${runtimeTemplate.basicFunction( "", chunks.size < 3 ? Array.from( chunks, c => `${RuntimeGlobals.prefetchChunk}(${JSON.stringify(c.id)});` ) : `${JSON.stringify(Array.from(chunks, c => c.id))}.map(${ RuntimeGlobals.prefetchChunk });` )}, 5);` ) ); } } module.exports = ChunkPrefetchStartupRuntimeModule; PK‹«[–F™Ły y ChunkPrefetchPreloadPlugin.jsnuW+A„¶/* MIT License http://www.opensource.org/licenses/mit-license.php Author Tobias Koppers @sokra */ "use strict"; const RuntimeGlobals = require("../RuntimeGlobals"); const ChunkPrefetchFunctionRuntimeModule = require("./ChunkPrefetchFunctionRuntimeModule"); const ChunkPrefetchStartupRuntimeModule = require("./ChunkPrefetchStartupRuntimeModule"); const ChunkPrefetchTriggerRuntimeModule = require("./ChunkPrefetchTriggerRuntimeModule"); const ChunkPreloadTriggerRuntimeModule = require("./ChunkPreloadTriggerRuntimeModule"); /** @typedef {import("../Compiler")} Compiler */ class ChunkPrefetchPreloadPlugin { /** * @param {Compiler} compiler the compiler * @returns {void} */ apply(compiler) { compiler.hooks.compilation.tap( "ChunkPrefetchPreloadPlugin", compilation => { compilation.hooks.additionalChunkRuntimeRequirements.tap( "ChunkPrefetchPreloadPlugin", (chunk, set, { chunkGraph }) => { if (chunkGraph.getNumberOfEntryModules(chunk) === 0) return; const startupChildChunks = chunk.getChildrenOfTypeInOrder( chunkGraph, "prefetchOrder" ); if (startupChildChunks) { set.add(RuntimeGlobals.prefetchChunk); set.add(RuntimeGlobals.onChunksLoaded); compilation.addRuntimeModule( chunk, new ChunkPrefetchStartupRuntimeModule(startupChildChunks) ); } } ); compilation.hooks.additionalTreeRuntimeRequirements.tap( "ChunkPrefetchPreloadPlugin", (chunk, set, { chunkGraph }) => { const chunkMap = chunk.getChildIdsByOrdersMap(chunkGraph, false); if (chunkMap.prefetch) { set.add(RuntimeGlobals.prefetchChunk); compilation.addRuntimeModule( chunk, new ChunkPrefetchTriggerRuntimeModule(chunkMap.prefetch) ); } if (chunkMap.preload) { set.add(RuntimeGlobals.preloadChunk); compilation.addRuntimeModule( chunk, new ChunkPreloadTriggerRuntimeModule(chunkMap.preload) ); } } ); compilation.hooks.runtimeRequirementInTree .for(RuntimeGlobals.prefetchChunk) .tap("ChunkPrefetchPreloadPlugin", (chunk, set) => { compilation.addRuntimeModule( chunk, new ChunkPrefetchFunctionRuntimeModule( "prefetch", RuntimeGlobals.prefetchChunk, RuntimeGlobals.prefetchChunkHandlers ) ); set.add(RuntimeGlobals.prefetchChunkHandlers); }); compilation.hooks.runtimeRequirementInTree .for(RuntimeGlobals.preloadChunk) .tap("ChunkPrefetchPreloadPlugin", (chunk, set) => { compilation.addRuntimeModule( chunk, new ChunkPrefetchFunctionRuntimeModule( "preload", RuntimeGlobals.preloadChunk, RuntimeGlobals.preloadChunkHandlers ) ); set.add(RuntimeGlobals.preloadChunkHandlers); }); } ); } } module.exports = ChunkPrefetchPreloadPlugin; PK‹«[ĄĮŌ‰#ChunkPreloadTriggerRuntimeModule.jsnuW+A„¶PK‹«[„†&q$āChunkPrefetchTriggerRuntimeModule.jsnuW+A„¶PK‹«[Q˜ŅY¤¤%9 ChunkPrefetchFunctionRuntimeModule.jsnuW+A„¶PK‹«[‚ć’;ßß$2ChunkPrefetchStartupRuntimeModule.jsnuW+A„¶PK‹«[–F™Ły y eChunkPrefetchPreloadPlugin.jsnuW+A„¶PKķ+!