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; |