mirror of https://github.com/webpack/webpack.git
				
				
				
			
		
			
				
	
	
		
			61 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
			
		
		
	
	
			61 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
| /*
 | |
| 	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 {string} childType TODO
 | |
| 	 * @param {string} runtimeFunction TODO
 | |
| 	 * @param {Object} chunkMap map from chunk to
 | |
| 	 * @param {boolean} afterChunkLoad true: start after chunk has been loaded, false: start after chunk loading has started
 | |
| 	 */
 | |
| 	constructor(childType, runtimeFunction, chunkMap, afterChunkLoad) {
 | |
| 		super(`chunk ${childType} trigger`, 20);
 | |
| 		this.childType = childType;
 | |
| 		this.runtimeFunction = runtimeFunction;
 | |
| 		this.chunkMap = chunkMap;
 | |
| 		this.afterChunkLoad = afterChunkLoad;
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
| 	 * @returns {string} runtime code
 | |
| 	 */
 | |
| 	generate() {
 | |
| 		const { childType, runtimeFunction, chunkMap, afterChunkLoad } = this;
 | |
| 		const { runtimeTemplate } = this.compilation;
 | |
| 		const body = [
 | |
| 			"var chunks = chunkToChildrenMap[chunkId];",
 | |
| 			"for (var i = 0; Array.isArray(chunks) && i < chunks.length; i++) {",
 | |
| 			Template.indent(`${runtimeFunction}(chunks[i]);`),
 | |
| 			"}"
 | |
| 		];
 | |
| 		return Template.asString([
 | |
| 			chunkMap
 | |
| 				? Template.asString([
 | |
| 						`var chunkToChildrenMap = ${JSON.stringify(chunkMap, null, "\t")};`,
 | |
| 						`${RuntimeGlobals.ensureChunkHandlers}.${childType} = ${
 | |
| 							afterChunkLoad
 | |
| 								? runtimeTemplate.basicFunction("chunkId, promises", [
 | |
| 										`Promise.all(promises).then(${runtimeTemplate.basicFunction(
 | |
| 											"",
 | |
| 											body
 | |
| 										)});`
 | |
| 								  ])
 | |
| 								: runtimeTemplate.basicFunction("chunkId", body)
 | |
| 						};`
 | |
| 				  ])
 | |
| 				: `// no chunks to automatically ${childType} specified in graph`
 | |
| 		]);
 | |
| 	}
 | |
| }
 | |
| 
 | |
| module.exports = ChunkPrefetchTriggerRuntimeModule;
 |