| 
									
										
										
										
											2013-03-26 23:54:41 +08:00
										 |  |  | /* | 
					
						
							|  |  |  | 	MIT License http://www.opensource.org/licenses/mit-license.php
 | 
					
						
							|  |  |  | 	Author Tobias Koppers @sokra | 
					
						
							|  |  |  | */ | 
					
						
							| 
									
										
										
										
											2017-01-13 04:38:38 +08:00
										 |  |  | "use strict"; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | const ConcatSource = require("webpack-sources").ConcatSource; | 
					
						
							|  |  |  | const OriginalSource = require("webpack-sources").OriginalSource; | 
					
						
							|  |  |  | const PrefixSource = require("webpack-sources").PrefixSource; | 
					
						
							|  |  |  | const Template = require("./Template"); | 
					
						
							| 
									
										
										
										
											2017-12-07 16:42:33 +08:00
										 |  |  | const Tapable = require("tapable").Tapable; | 
					
						
							| 
									
										
										
										
											2017-11-29 01:43:01 +08:00
										 |  |  | const SyncWaterfallHook = require("tapable").SyncWaterfallHook; | 
					
						
							|  |  |  | const SyncHook = require("tapable").SyncHook; | 
					
						
							|  |  |  | const SyncBailHook = require("tapable").SyncBailHook; | 
					
						
							| 
									
										
										
										
											2013-03-26 23:54:41 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-09-07 20:57:53 +08:00
										 |  |  | // require function shortcuts:
 | 
					
						
							|  |  |  | // __webpack_require__.s = the module id of the entry point
 | 
					
						
							|  |  |  | // __webpack_require__.c = the module cache
 | 
					
						
							|  |  |  | // __webpack_require__.m = the module functions
 | 
					
						
							|  |  |  | // __webpack_require__.p = the bundle public path
 | 
					
						
							|  |  |  | // __webpack_require__.i = the identity function used for harmony imports
 | 
					
						
							|  |  |  | // __webpack_require__.e = the chunk ensure function
 | 
					
						
							|  |  |  | // __webpack_require__.d = the exported propery define getter function
 | 
					
						
							|  |  |  | // __webpack_require__.o = Object.prototype.hasOwnProperty.call
 | 
					
						
							| 
									
										
										
										
											2017-11-21 17:41:01 +08:00
										 |  |  | // __webpack_require__.r = define compatibility on export
 | 
					
						
							| 
									
										
										
										
											2016-09-07 20:57:53 +08:00
										 |  |  | // __webpack_require__.n = compatibility get default export
 | 
					
						
							|  |  |  | // __webpack_require__.h = the webpack hash
 | 
					
						
							| 
									
										
										
										
											2017-10-30 20:56:57 +08:00
										 |  |  | // __webpack_require__.w = an object containing all installed WebAssembly.Modules keys by module id
 | 
					
						
							| 
									
										
										
										
											2016-09-07 20:57:53 +08:00
										 |  |  | // __webpack_require__.oe = the uncatched error handler for the webpack runtime
 | 
					
						
							| 
									
										
										
										
											2016-08-30 02:49:11 +08:00
										 |  |  | // __webpack_require__.nc = the script nonce
 | 
					
						
							| 
									
										
										
										
											2015-06-13 17:45:28 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-12-07 16:42:33 +08:00
										 |  |  | module.exports = class MainTemplate extends Tapable { | 
					
						
							| 
									
										
										
										
											2017-01-13 04:38:38 +08:00
										 |  |  | 	constructor(outputOptions) { | 
					
						
							| 
									
										
										
										
											2017-12-07 16:42:33 +08:00
										 |  |  | 		super(); | 
					
						
							|  |  |  | 		this.outputOptions = outputOptions || {}; | 
					
						
							| 
									
										
										
										
											2017-11-29 01:43:01 +08:00
										 |  |  | 		this.hooks = { | 
					
						
							|  |  |  | 			modules: new SyncWaterfallHook(["modules", "chunk", "hash", "moduleTemplate", "dependencyTemplates"]), | 
					
						
							|  |  |  | 			moduleObj: new SyncWaterfallHook(["source", "chunk", "hash", "moduleIdExpression"]), | 
					
						
							|  |  |  | 			requireEnsure: new SyncWaterfallHook(["source", "chunk", "hash", "chunkIdExpression"]), | 
					
						
							|  |  |  | 			bootstrap: new SyncWaterfallHook(["source", "chunk", "hash", "moduleTemplate", "dependencyTemplates"]), | 
					
						
							|  |  |  | 			localVars: new SyncWaterfallHook(["source", "chunk", "hash"]), | 
					
						
							|  |  |  | 			require: new SyncWaterfallHook(["source", "chunk", "hash"]), | 
					
						
							|  |  |  | 			requireExtensions: new SyncWaterfallHook(["source", "chunk", "hash"]), | 
					
						
							|  |  |  | 			startup: new SyncWaterfallHook(["source", "chunk", "hash"]), | 
					
						
							|  |  |  | 			render: new SyncWaterfallHook(["source", "chunk", "hash", "moduleTemplate", "dependencyTemplates"]), | 
					
						
							|  |  |  | 			renderWithEntry: new SyncWaterfallHook(["source", "chunk", "hash"]), | 
					
						
							|  |  |  | 			moduleRequire: new SyncWaterfallHook(["source", "chunk", "hash", "moduleIdExpression"]), | 
					
						
							|  |  |  | 			addModule: new SyncWaterfallHook(["source", "chunk", "hash", "moduleIdExpression", "moduleExpression"]), | 
					
						
							|  |  |  | 			currentHash: new SyncWaterfallHook(["source", "requestedLength"]), | 
					
						
							|  |  |  | 			assetPath: new SyncWaterfallHook(["path", "options"]), | 
					
						
							|  |  |  | 			hash: new SyncHook(["hash"]), | 
					
						
							|  |  |  | 			hashForChunk: new SyncHook(["hash", "chunk"]), | 
					
						
							|  |  |  | 			globalHashPaths: new SyncWaterfallHook(["paths"]), | 
					
						
							|  |  |  | 			globalHash: new SyncBailHook(["chunk", "paths"]), | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			// TODO this should be moved somewhere else
 | 
					
						
							|  |  |  | 			// It's weird here
 | 
					
						
							|  |  |  | 			hotBootstrap: new SyncWaterfallHook(["source", "chunk", "hash"]) | 
					
						
							|  |  |  | 		}; | 
					
						
							| 
									
										
										
										
											2017-12-14 04:35:39 +08:00
										 |  |  | 		this.hooks.startup.tap("MainTemplate", (source, chunk, hash) => { | 
					
						
							| 
									
										
										
										
											2017-02-05 07:30:52 +08:00
										 |  |  | 			const buf = []; | 
					
						
							| 
									
										
										
										
											2017-01-13 04:38:38 +08:00
										 |  |  | 			if(chunk.entryModule) { | 
					
						
							|  |  |  | 				buf.push("// Load entry module and return exports"); | 
					
						
							| 
									
										
										
										
											2017-03-06 04:00:43 +08:00
										 |  |  | 				buf.push(`return ${this.renderRequireFunctionForModule(hash, chunk, JSON.stringify(chunk.entryModule.id))}(${this.requireFn}.s = ${JSON.stringify(chunk.entryModule.id)});`); | 
					
						
							| 
									
										
										
										
											2017-01-13 04:38:38 +08:00
										 |  |  | 			} | 
					
						
							| 
									
										
										
										
											2017-12-07 16:42:33 +08:00
										 |  |  | 			return Template.asString(buf); | 
					
						
							| 
									
										
										
										
											2017-01-13 04:38:38 +08:00
										 |  |  | 		}); | 
					
						
							| 
									
										
										
										
											2017-12-14 04:35:39 +08:00
										 |  |  | 		this.hooks.render.tap("MainTemplate", (bootstrapSource, chunk, hash, moduleTemplate, dependencyTemplates) => { | 
					
						
							| 
									
										
										
										
											2017-02-05 07:30:52 +08:00
										 |  |  | 			const source = new ConcatSource(); | 
					
						
							| 
									
										
										
										
											2017-01-13 04:38:38 +08:00
										 |  |  | 			source.add("/******/ (function(modules) { // webpackBootstrap\n"); | 
					
						
							|  |  |  | 			source.add(new PrefixSource("/******/", bootstrapSource)); | 
					
						
							|  |  |  | 			source.add("/******/ })\n"); | 
					
						
							|  |  |  | 			source.add("/************************************************************************/\n"); | 
					
						
							|  |  |  | 			source.add("/******/ ("); | 
					
						
							| 
									
										
										
										
											2017-12-07 16:42:33 +08:00
										 |  |  | 			const modules = Template.renderChunkModules(chunk, () => true, moduleTemplate, dependencyTemplates, "/******/ "); | 
					
						
							| 
									
										
										
										
											2017-11-29 01:43:01 +08:00
										 |  |  | 			source.add(this.hooks.modules.call(modules, chunk, hash, moduleTemplate, dependencyTemplates)); | 
					
						
							| 
									
										
										
										
											2017-01-13 04:38:38 +08:00
										 |  |  | 			source.add(")"); | 
					
						
							|  |  |  | 			return source; | 
					
						
							|  |  |  | 		}); | 
					
						
							| 
									
										
										
										
											2017-12-14 04:35:39 +08:00
										 |  |  | 		this.hooks.localVars.tap("MainTemplate", (source, chunk, hash) => { | 
					
						
							| 
									
										
										
										
											2017-12-07 16:42:33 +08:00
										 |  |  | 			return Template.asString([ | 
					
						
							| 
									
										
										
										
											2017-01-13 04:38:38 +08:00
										 |  |  | 				source, | 
					
						
							|  |  |  | 				"// The module cache", | 
					
						
							|  |  |  | 				"var installedModules = {};" | 
					
						
							|  |  |  | 			]); | 
					
						
							|  |  |  | 		}); | 
					
						
							| 
									
										
										
										
											2017-12-14 04:35:39 +08:00
										 |  |  | 		this.hooks.require.tap("MainTemplate", (source, chunk, hash) => { | 
					
						
							| 
									
										
										
										
											2017-12-07 16:42:33 +08:00
										 |  |  | 			return Template.asString([ | 
					
						
							| 
									
										
										
										
											2017-01-13 04:38:38 +08:00
										 |  |  | 				source, | 
					
						
							|  |  |  | 				"// Check if module is in cache", | 
					
						
							| 
									
										
										
										
											2017-03-31 21:07:39 +08:00
										 |  |  | 				"if(installedModules[moduleId]) {", | 
					
						
							| 
									
										
										
										
											2017-12-07 16:42:33 +08:00
										 |  |  | 				Template.indent("return installedModules[moduleId].exports;"), | 
					
						
							| 
									
										
										
										
											2017-03-31 21:07:39 +08:00
										 |  |  | 				"}", | 
					
						
							| 
									
										
										
										
											2017-01-13 04:38:38 +08:00
										 |  |  | 				"// Create a new module (and put it into the cache)", | 
					
						
							|  |  |  | 				"var module = installedModules[moduleId] = {", | 
					
						
							| 
									
										
										
										
											2017-12-07 16:42:33 +08:00
										 |  |  | 				Template.indent(this.hooks.moduleObj.call("", chunk, hash, "moduleId")), | 
					
						
							| 
									
										
										
										
											2017-01-13 04:38:38 +08:00
										 |  |  | 				"};", | 
					
						
							|  |  |  | 				"", | 
					
						
							| 
									
										
										
										
											2017-12-07 16:42:33 +08:00
										 |  |  | 				Template.asString(outputOptions.strictModuleExceptionHandling ? [ | 
					
						
							| 
									
										
										
										
											2017-01-13 04:38:38 +08:00
										 |  |  | 					"// Execute the module function", | 
					
						
							|  |  |  | 					"var threw = true;", | 
					
						
							|  |  |  | 					"try {", | 
					
						
							| 
									
										
										
										
											2017-12-07 16:42:33 +08:00
										 |  |  | 					Template.indent([ | 
					
						
							| 
									
										
										
										
											2017-03-14 10:30:01 +08:00
										 |  |  | 						`modules[moduleId].call(module.exports, module, module.exports, ${this.renderRequireFunctionForModule(hash, chunk, "moduleId")});`, | 
					
						
							| 
									
										
										
										
											2017-01-13 04:38:38 +08:00
										 |  |  | 						"threw = false;" | 
					
						
							|  |  |  | 					]), | 
					
						
							|  |  |  | 					"} finally {", | 
					
						
							| 
									
										
										
										
											2017-12-07 16:42:33 +08:00
										 |  |  | 					Template.indent([ | 
					
						
							| 
									
										
										
										
											2017-01-13 04:38:38 +08:00
										 |  |  | 						"if(threw) delete installedModules[moduleId];" | 
					
						
							|  |  |  | 					]), | 
					
						
							|  |  |  | 					"}" | 
					
						
							|  |  |  | 				] : [ | 
					
						
							|  |  |  | 					"// Execute the module function", | 
					
						
							| 
									
										
										
										
											2017-02-11 03:08:08 +08:00
										 |  |  | 					`modules[moduleId].call(module.exports, module, module.exports, ${this.renderRequireFunctionForModule(hash, chunk, "moduleId")});`, | 
					
						
							| 
									
										
										
										
											2016-11-10 15:52:00 +08:00
										 |  |  | 				]), | 
					
						
							| 
									
										
										
										
											2017-01-13 04:38:38 +08:00
										 |  |  | 				"", | 
					
						
							|  |  |  | 				"// Flag the module as loaded", | 
					
						
							|  |  |  | 				"module.l = true;", | 
					
						
							|  |  |  | 				"", | 
					
						
							|  |  |  | 				"// Return the exports of the module", | 
					
						
							|  |  |  | 				"return module.exports;" | 
					
						
							|  |  |  | 			]); | 
					
						
							|  |  |  | 		}); | 
					
						
							| 
									
										
										
										
											2017-12-14 04:35:39 +08:00
										 |  |  | 		this.hooks.moduleObj.tap("MainTemplate", (source, chunk, hash, varModuleId) => { | 
					
						
							| 
									
										
										
										
											2017-12-07 16:42:33 +08:00
										 |  |  | 			return Template.asString([ | 
					
						
							| 
									
										
										
										
											2017-01-13 04:38:38 +08:00
										 |  |  | 				"i: moduleId,", | 
					
						
							|  |  |  | 				"l: false,", | 
					
						
							|  |  |  | 				"exports: {}" | 
					
						
							|  |  |  | 			]); | 
					
						
							|  |  |  | 		}); | 
					
						
							| 
									
										
										
										
											2017-12-14 04:35:39 +08:00
										 |  |  | 		this.hooks.requireExtensions.tap("MainTemplate", (source, chunk, hash) => { | 
					
						
							| 
									
										
										
										
											2017-02-05 07:30:52 +08:00
										 |  |  | 			const buf = []; | 
					
						
							| 
									
										
										
										
											2017-09-22 20:07:28 +08:00
										 |  |  | 			if(chunk.getNumberOfChunks() > 0) { | 
					
						
							| 
									
										
										
										
											2017-01-13 04:38:38 +08:00
										 |  |  | 				buf.push("// This file contains only the entry chunk."); | 
					
						
							|  |  |  | 				buf.push("// The chunk loading function for additional chunks"); | 
					
						
							| 
									
										
										
										
											2017-02-11 03:08:08 +08:00
										 |  |  | 				buf.push(`${this.requireFn}.e = function requireEnsure(chunkId) {`); | 
					
						
							| 
									
										
										
										
											2017-12-07 16:42:33 +08:00
										 |  |  | 				buf.push(Template.indent("var promises = [];")); | 
					
						
							|  |  |  | 				buf.push(Template.indent(this.hooks.requireEnsure.call("", chunk, hash, "chunkId"))); | 
					
						
							|  |  |  | 				buf.push(Template.indent("return Promise.all(promises);")); | 
					
						
							| 
									
										
										
										
											2017-01-13 04:38:38 +08:00
										 |  |  | 				buf.push("};"); | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 			buf.push(""); | 
					
						
							|  |  |  | 			buf.push("// expose the modules object (__webpack_modules__)"); | 
					
						
							| 
									
										
										
										
											2017-02-11 03:08:08 +08:00
										 |  |  | 			buf.push(`${this.requireFn}.m = modules;`); | 
					
						
							| 
									
										
										
										
											2017-01-13 04:38:38 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 			buf.push(""); | 
					
						
							|  |  |  | 			buf.push("// expose the module cache"); | 
					
						
							| 
									
										
										
										
											2017-02-11 03:08:08 +08:00
										 |  |  | 			buf.push(`${this.requireFn}.c = installedModules;`); | 
					
						
							| 
									
										
										
										
											2017-01-13 04:38:38 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 			buf.push(""); | 
					
						
							|  |  |  | 			buf.push("// define getter function for harmony exports"); | 
					
						
							| 
									
										
										
										
											2017-02-11 03:08:08 +08:00
										 |  |  | 			buf.push(`${this.requireFn}.d = function(exports, name, getter) {`); | 
					
						
							| 
									
										
										
										
											2017-12-07 16:42:33 +08:00
										 |  |  | 			buf.push(Template.indent([ | 
					
						
							| 
									
										
										
										
											2017-02-11 03:08:08 +08:00
										 |  |  | 				`if(!${this.requireFn}.o(exports, name)) {`, | 
					
						
							| 
									
										
										
										
											2017-12-07 16:42:33 +08:00
										 |  |  | 				Template.indent([ | 
					
						
							| 
									
										
										
										
											2017-01-13 04:38:38 +08:00
										 |  |  | 					"Object.defineProperty(exports, name, {", | 
					
						
							| 
									
										
										
										
											2017-12-07 16:42:33 +08:00
										 |  |  | 					Template.indent([ | 
					
						
							| 
									
										
										
										
											2017-01-13 04:38:38 +08:00
										 |  |  | 						"configurable: false,", | 
					
						
							|  |  |  | 						"enumerable: true,", | 
					
						
							|  |  |  | 						"get: getter" | 
					
						
							|  |  |  | 					]), | 
					
						
							|  |  |  | 					"});" | 
					
						
							| 
									
										
										
										
											2016-11-10 15:52:00 +08:00
										 |  |  | 				]), | 
					
						
							|  |  |  | 				"}" | 
					
						
							| 
									
										
										
										
											2017-01-13 04:38:38 +08:00
										 |  |  | 			])); | 
					
						
							| 
									
										
										
										
											2014-06-03 03:23:53 +08:00
										 |  |  | 			buf.push("};"); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-11-21 17:41:01 +08:00
										 |  |  | 			buf.push(""); | 
					
						
							|  |  |  | 			buf.push("// define __esModule on exports"); | 
					
						
							|  |  |  | 			buf.push(`${this.requireFn}.r = function(exports) {`); | 
					
						
							| 
									
										
										
										
											2017-12-07 16:42:33 +08:00
										 |  |  | 			buf.push(Template.indent([ | 
					
						
							| 
									
										
										
										
											2017-11-21 17:41:01 +08:00
										 |  |  | 				"Object.defineProperty(exports, '__esModule', { value: true });" | 
					
						
							|  |  |  | 			])); | 
					
						
							|  |  |  | 			buf.push("};"); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-01-13 04:38:38 +08:00
										 |  |  | 			buf.push(""); | 
					
						
							|  |  |  | 			buf.push("// getDefaultExport function for compatibility with non-harmony modules"); | 
					
						
							|  |  |  | 			buf.push(this.requireFn + ".n = function(module) {"); | 
					
						
							| 
									
										
										
										
											2017-12-07 16:42:33 +08:00
										 |  |  | 			buf.push(Template.indent([ | 
					
						
							| 
									
										
										
										
											2017-01-13 04:38:38 +08:00
										 |  |  | 				"var getter = module && module.__esModule ?", | 
					
						
							| 
									
										
										
										
											2017-12-07 16:42:33 +08:00
										 |  |  | 				Template.indent([ | 
					
						
							| 
									
										
										
										
											2017-01-13 04:38:38 +08:00
										 |  |  | 					"function getDefault() { return module['default']; } :", | 
					
						
							|  |  |  | 					"function getModuleExports() { return module; };" | 
					
						
							| 
									
										
										
										
											2016-12-05 06:16:33 +08:00
										 |  |  | 				]), | 
					
						
							| 
									
										
										
										
											2017-02-11 03:08:08 +08:00
										 |  |  | 				`${this.requireFn}.d(getter, 'a', getter);`, | 
					
						
							| 
									
										
										
										
											2017-01-13 04:38:38 +08:00
										 |  |  | 				"return getter;" | 
					
						
							|  |  |  | 			])); | 
					
						
							|  |  |  | 			buf.push("};"); | 
					
						
							| 
									
										
										
										
											2016-06-08 06:10:30 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-01-13 04:38:38 +08:00
										 |  |  | 			buf.push(""); | 
					
						
							|  |  |  | 			buf.push("// Object.prototype.hasOwnProperty.call"); | 
					
						
							| 
									
										
										
										
											2017-02-11 03:08:08 +08:00
										 |  |  | 			buf.push(`${this.requireFn}.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };`); | 
					
						
							| 
									
										
										
										
											2017-01-13 04:38:38 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-02-05 07:30:52 +08:00
										 |  |  | 			const publicPath = this.getPublicPath({ | 
					
						
							| 
									
										
										
										
											2017-01-13 04:38:38 +08:00
										 |  |  | 				hash: hash | 
					
						
							|  |  |  | 			}); | 
					
						
							|  |  |  | 			buf.push(""); | 
					
						
							|  |  |  | 			buf.push("// __webpack_public_path__"); | 
					
						
							| 
									
										
										
										
											2017-02-11 03:08:08 +08:00
										 |  |  | 			buf.push(`${this.requireFn}.p = ${JSON.stringify(publicPath)};`); | 
					
						
							| 
									
										
										
										
											2017-12-07 16:42:33 +08:00
										 |  |  | 			return Template.asString(buf); | 
					
						
							| 
									
										
										
										
											2017-01-13 04:38:38 +08:00
										 |  |  | 		}); | 
					
						
							| 
									
										
										
										
											2016-07-20 22:20:09 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-01-13 04:38:38 +08:00
										 |  |  | 		this.requireFn = "__webpack_require__"; | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2016-06-08 06:10:30 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-10-30 20:56:57 +08:00
										 |  |  | 	getRenderManifest(options) { | 
					
						
							|  |  |  | 		const chunk = options.chunk; | 
					
						
							|  |  |  | 		const hash = options.hash; | 
					
						
							|  |  |  | 		const fullHash = options.fullHash; | 
					
						
							|  |  |  | 		const outputOptions = options.outputOptions; | 
					
						
							|  |  |  | 		const moduleTemplates = options.moduleTemplates; | 
					
						
							|  |  |  | 		const dependencyTemplates = options.dependencyTemplates; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		const result = []; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		let filenameTemplate; | 
					
						
							|  |  |  | 		if(chunk.filenameTemplate) | 
					
						
							|  |  |  | 			filenameTemplate = chunk.filenameTemplate; | 
					
						
							|  |  |  | 		else if(chunk.isInitial()) | 
					
						
							|  |  |  | 			filenameTemplate = outputOptions.filename; | 
					
						
							|  |  |  | 		else { | 
					
						
							|  |  |  | 			filenameTemplate = outputOptions.chunkFilename; | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		const useChunkHash = this.useChunkHash(chunk); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		result.push({ | 
					
						
							|  |  |  | 			render: () => this.render(hash, chunk, moduleTemplates.javascript, dependencyTemplates), | 
					
						
							|  |  |  | 			filenameTemplate, | 
					
						
							|  |  |  | 			pathOptions: { | 
					
						
							|  |  |  | 				noChunkHash: !useChunkHash, | 
					
						
							|  |  |  | 				chunk | 
					
						
							|  |  |  | 			}, | 
					
						
							|  |  |  | 			identifier: `chunk${chunk.id}`, | 
					
						
							|  |  |  | 			hash: useChunkHash ? chunk.hash : fullHash | 
					
						
							|  |  |  | 		}); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		return result; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-01-13 04:38:38 +08:00
										 |  |  | 	render(hash, chunk, moduleTemplate, dependencyTemplates) { | 
					
						
							| 
									
										
										
										
											2017-02-05 07:30:52 +08:00
										 |  |  | 		const buf = []; | 
					
						
							| 
									
										
										
										
											2017-11-29 01:43:01 +08:00
										 |  |  | 		buf.push(this.hooks.bootstrap.call("", chunk, hash, moduleTemplate, dependencyTemplates)); | 
					
						
							|  |  |  | 		buf.push(this.hooks.localVars.call("", chunk, hash)); | 
					
						
							| 
									
										
										
										
											2017-01-13 04:38:38 +08:00
										 |  |  | 		buf.push(""); | 
					
						
							|  |  |  | 		buf.push("// The require function"); | 
					
						
							| 
									
										
										
										
											2017-02-11 03:08:08 +08:00
										 |  |  | 		buf.push(`function ${this.requireFn}(moduleId) {`); | 
					
						
							| 
									
										
										
										
											2017-12-07 16:42:33 +08:00
										 |  |  | 		buf.push(Template.indent(this.hooks.require.call("", chunk, hash))); | 
					
						
							| 
									
										
										
										
											2017-01-13 04:38:38 +08:00
										 |  |  | 		buf.push("}"); | 
					
						
							|  |  |  | 		buf.push(""); | 
					
						
							| 
									
										
										
										
											2017-12-07 16:42:33 +08:00
										 |  |  | 		buf.push(Template.asString(this.hooks.requireExtensions.call("", chunk, hash))); | 
					
						
							| 
									
										
										
										
											2014-06-03 03:23:53 +08:00
										 |  |  | 		buf.push(""); | 
					
						
							| 
									
										
										
										
											2017-12-07 16:42:33 +08:00
										 |  |  | 		buf.push(Template.asString(this.hooks.startup.call("", chunk, hash))); | 
					
						
							| 
									
										
										
										
											2017-12-08 15:45:55 +08:00
										 |  |  | 		let source = this.hooks.render.call(new OriginalSource(Template.prefix(buf, " \t") + "\n", "webpack/bootstrap"), chunk, hash, moduleTemplate, dependencyTemplates); | 
					
						
							| 
									
										
										
										
											2017-01-13 04:38:38 +08:00
										 |  |  | 		if(chunk.hasEntryModule()) { | 
					
						
							| 
									
										
										
										
											2017-11-29 01:43:01 +08:00
										 |  |  | 			source = this.hooks.renderWithEntry.call(source, chunk, hash); | 
					
						
							| 
									
										
										
										
											2017-01-13 04:38:38 +08:00
										 |  |  | 		} | 
					
						
							|  |  |  | 		if(!source) throw new Error("Compiler error: MainTemplate plugin 'render' should return something"); | 
					
						
							|  |  |  | 		chunk.rendered = true; | 
					
						
							|  |  |  | 		return new ConcatSource(source, ";"); | 
					
						
							| 
									
										
										
										
											2014-12-22 23:10:23 +08:00
										 |  |  | 	} | 
					
						
							| 
									
										
										
										
											2013-06-12 22:16:06 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-01-13 04:38:38 +08:00
										 |  |  | 	renderRequireFunctionForModule(hash, chunk, varModuleId) { | 
					
						
							| 
									
										
										
										
											2017-11-29 01:43:01 +08:00
										 |  |  | 		return this.hooks.moduleRequire.call(this.requireFn, chunk, hash, varModuleId); | 
					
						
							| 
									
										
										
										
											2017-01-13 04:38:38 +08:00
										 |  |  | 	} | 
					
						
							| 
									
										
										
										
											2013-03-26 23:54:41 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-01-13 04:38:38 +08:00
										 |  |  | 	renderAddModule(hash, chunk, varModuleId, varModule) { | 
					
						
							| 
									
										
										
										
											2017-11-29 01:43:01 +08:00
										 |  |  | 		return this.hooks.addModule.call(`modules[${varModuleId}] = ${varModule};`, chunk, hash, varModuleId, varModule); | 
					
						
							| 
									
										
										
										
											2017-01-13 04:38:38 +08:00
										 |  |  | 	} | 
					
						
							| 
									
										
										
										
											2013-06-12 22:16:06 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-01-13 04:38:38 +08:00
										 |  |  | 	renderCurrentHashCode(hash, length) { | 
					
						
							|  |  |  | 		length = length || Infinity; | 
					
						
							| 
									
										
										
										
											2017-11-29 01:43:01 +08:00
										 |  |  | 		return this.hooks.currentHash.call(JSON.stringify(hash.substr(0, length)), length); | 
					
						
							| 
									
										
										
										
											2017-01-13 04:38:38 +08:00
										 |  |  | 	} | 
					
						
							| 
									
										
										
										
											2013-12-17 07:56:43 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-01-13 04:38:38 +08:00
										 |  |  | 	entryPointInChildren(chunk) { | 
					
						
							| 
									
										
										
										
											2017-02-05 07:30:52 +08:00
										 |  |  | 		const checkChildren = (chunk, alreadyCheckedChunks) => { | 
					
						
							| 
									
										
										
										
											2017-09-22 20:07:28 +08:00
										 |  |  | 			for(const child of chunk.chunksIterable) { | 
					
						
							| 
									
										
										
										
											2017-06-24 09:12:54 +08:00
										 |  |  | 				if(!alreadyCheckedChunks.has(child)) { | 
					
						
							|  |  |  | 					alreadyCheckedChunks.add(child); | 
					
						
							|  |  |  | 					if(child.hasEntryModule() || checkChildren(child, alreadyCheckedChunks)) { | 
					
						
							|  |  |  | 						return true; | 
					
						
							|  |  |  | 					} | 
					
						
							|  |  |  | 				} | 
					
						
							|  |  |  | 			} | 
					
						
							| 
									
										
										
										
											2017-01-13 04:38:38 +08:00
										 |  |  | 		}; | 
					
						
							| 
									
										
										
										
											2017-06-24 09:12:54 +08:00
										 |  |  | 		return checkChildren(chunk, new Set()) === true; | 
					
						
							| 
									
										
										
										
											2015-07-16 06:39:56 +08:00
										 |  |  | 	} | 
					
						
							| 
									
										
										
										
											2014-01-31 20:12:51 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-01-13 04:38:38 +08:00
										 |  |  | 	getPublicPath(options) { | 
					
						
							| 
									
										
										
										
											2017-11-29 01:43:01 +08:00
										 |  |  | 		return this.hooks.assetPath.call(this.outputOptions.publicPath || "", options); | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	getAssetPath(path, options) { | 
					
						
							|  |  |  | 		return this.hooks.assetPath.call(path, options); | 
					
						
							| 
									
										
										
										
											2017-01-13 04:38:38 +08:00
										 |  |  | 	} | 
					
						
							| 
									
										
										
										
											2015-04-17 16:17:10 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-01-13 04:38:38 +08:00
										 |  |  | 	updateHash(hash) { | 
					
						
							|  |  |  | 		hash.update("maintemplate"); | 
					
						
							|  |  |  | 		hash.update("3"); | 
					
						
							|  |  |  | 		hash.update(this.outputOptions.publicPath + ""); | 
					
						
							| 
									
										
										
										
											2017-11-29 01:43:01 +08:00
										 |  |  | 		this.hooks.hash.call(hash); | 
					
						
							| 
									
										
										
										
											2017-01-13 04:38:38 +08:00
										 |  |  | 	} | 
					
						
							| 
									
										
										
										
											2014-04-20 03:35:01 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-01-13 04:38:38 +08:00
										 |  |  | 	updateHashForChunk(hash, chunk) { | 
					
						
							|  |  |  | 		this.updateHash(hash); | 
					
						
							| 
									
										
										
										
											2017-11-29 01:43:01 +08:00
										 |  |  | 		this.hooks.hashForChunk.call(hash, chunk); | 
					
						
							| 
									
										
										
										
											2017-01-13 04:38:38 +08:00
										 |  |  | 	} | 
					
						
							| 
									
										
										
										
											2015-06-25 05:17:12 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-01-13 04:38:38 +08:00
										 |  |  | 	useChunkHash(chunk) { | 
					
						
							| 
									
										
										
										
											2017-11-29 01:43:01 +08:00
										 |  |  | 		const paths = this.hooks.globalHashPaths.call([]); | 
					
						
							|  |  |  | 		return !this.hooks.globalHash.call(chunk, paths); | 
					
						
							| 
									
										
										
										
											2017-01-13 04:38:38 +08:00
										 |  |  | 	} | 
					
						
							| 
									
										
										
										
											2014-08-22 19:51:24 +08:00
										 |  |  | }; |