| 
									
										
										
										
											2013-03-26 23:54:41 +08:00
										 |  |  | /* | 
					
						
							|  |  |  | 	MIT License http://www.opensource.org/licenses/mit-license.php
 | 
					
						
							|  |  |  | 	Author Tobias Koppers @sokra | 
					
						
							|  |  |  | */ | 
					
						
							| 
									
										
										
										
											2018-07-30 23:08:51 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-01-13 04:38:38 +08:00
										 |  |  | "use strict"; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-30 23:08:51 +08:00
										 |  |  | const { SyncWaterfallHook, SyncHook, SyncBailHook } = require("tapable"); | 
					
						
							| 
									
										
										
										
											2018-03-22 19:05:58 +08:00
										 |  |  | const { | 
					
						
							|  |  |  | 	ConcatSource, | 
					
						
							|  |  |  | 	OriginalSource, | 
					
						
							|  |  |  | 	PrefixSource, | 
					
						
							|  |  |  | 	RawSource | 
					
						
							|  |  |  | } = require("webpack-sources"); | 
					
						
							| 
									
										
										
										
											2017-01-13 04:38:38 +08:00
										 |  |  | const Template = require("./Template"); | 
					
						
							| 
									
										
										
										
											2013-03-26 23:54:41 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-04-21 08:35:02 +08:00
										 |  |  | /** @typedef {import("webpack-sources").ConcatSource} ConcatSource */ | 
					
						
							| 
									
										
										
										
											2018-07-02 22:18:49 +08:00
										 |  |  | /** @typedef {import("webpack-sources").Source} Source */ | 
					
						
							| 
									
										
										
										
											2018-04-24 21:44:50 +08:00
										 |  |  | /** @typedef {import("./ModuleTemplate")} ModuleTemplate */ | 
					
						
							|  |  |  | /** @typedef {import("./Chunk")} Chunk */ | 
					
						
							|  |  |  | /** @typedef {import("./Module")} Module} */ | 
					
						
							| 
									
										
										
										
											2018-06-25 16:44:54 +08:00
										 |  |  | /** @typedef {import("./util/createHash").Hash} Hash} */ | 
					
						
							| 
									
										
										
										
											2018-07-11 19:05:13 +08:00
										 |  |  | /** @typedef {import("./DependencyTemplates")} DependencyTemplates} */ | 
					
						
							| 
									
										
										
										
											2018-08-14 22:40:37 +08:00
										 |  |  | /** @typedef {import("./ModuleTemplate").RenderContext} RenderContext} */ | 
					
						
							|  |  |  | /** @typedef {import("./RuntimeTemplate")} RuntimeTemplate} */ | 
					
						
							|  |  |  | /** @typedef {import("./ModuleGraph")} ModuleGraph} */ | 
					
						
							|  |  |  | /** @typedef {import("./ChunkGraph")} ChunkGraph} */ | 
					
						
							|  |  |  | /** @typedef {import("./Template").RenderManifestOptions} RenderManifestOptions} */ | 
					
						
							|  |  |  | /** @typedef {import("./Template").RenderManifestEntry} RenderManifestEntry} */ | 
					
						
							| 
									
										
										
										
											2018-05-01 23:47:14 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | /** | 
					
						
							| 
									
										
										
										
											2018-08-14 22:40:37 +08:00
										 |  |  |  * @typedef {Object} MainRenderContext | 
					
						
							|  |  |  |  * @property {Chunk} chunk the chunk | 
					
						
							|  |  |  |  * @property {DependencyTemplates} dependencyTemplates the dependency templates | 
					
						
							|  |  |  |  * @property {RuntimeTemplate} runtimeTemplate the runtime template | 
					
						
							|  |  |  |  * @property {ModuleGraph} moduleGraph the module graph | 
					
						
							|  |  |  |  * @property {ChunkGraph} chunkGraph the chunk graph | 
					
						
							|  |  |  |  * @property {string} hash hash to be used for render call | 
					
						
							| 
									
										
										
										
											2018-05-01 23:47:14 +08:00
										 |  |  |  */ | 
					
						
							| 
									
										
										
										
											2018-04-21 08:35:02 +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
 | 
					
						
							| 
									
										
										
										
											2018-02-26 10:40:14 +08:00
										 |  |  | // __webpack_require__.d = the exported property define getter function
 | 
					
						
							| 
									
										
										
										
											2016-09-07 20:57:53 +08:00
										 |  |  | // __webpack_require__.o = Object.prototype.hasOwnProperty.call
 | 
					
						
							| 
									
										
										
										
											2017-11-21 17:41:01 +08:00
										 |  |  | // __webpack_require__.r = define compatibility on export
 | 
					
						
							| 
									
										
										
										
											2018-05-03 00:09:24 +08:00
										 |  |  | // __webpack_require__.t = create a fake namespace object
 | 
					
						
							| 
									
										
										
										
											2016-09-07 20:57:53 +08:00
										 |  |  | // __webpack_require__.n = compatibility get default export
 | 
					
						
							|  |  |  | // __webpack_require__.h = the webpack hash
 | 
					
						
							| 
									
										
										
										
											2018-05-09 22:19:31 +08:00
										 |  |  | // __webpack_require__.w = an object containing all installed WebAssembly.Instance export objects keyed by module id
 | 
					
						
							| 
									
										
										
										
											2018-02-26 10:50:05 +08:00
										 |  |  | // __webpack_require__.oe = the uncaught 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
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-06-26 14:27:44 +08:00
										 |  |  | module.exports = class MainTemplate { | 
					
						
							| 
									
										
										
										
											2018-04-21 08:35:02 +08:00
										 |  |  | 	/** | 
					
						
							|  |  |  | 	 * | 
					
						
							| 
									
										
										
										
											2018-05-08 20:31:51 +08:00
										 |  |  | 	 * @param {TODO=} outputOptions output options for the MainTemplate | 
					
						
							| 
									
										
										
										
											2018-04-21 08:35:02 +08:00
										 |  |  | 	 */ | 
					
						
							| 
									
										
										
										
											2017-01-13 04:38:38 +08:00
										 |  |  | 	constructor(outputOptions) { | 
					
						
							| 
									
										
										
										
											2018-05-08 20:31:51 +08:00
										 |  |  | 		/** @type {TODO?} */ | 
					
						
							| 
									
										
										
										
											2017-12-07 16:42:33 +08:00
										 |  |  | 		this.outputOptions = outputOptions || {}; | 
					
						
							| 
									
										
										
										
											2018-07-30 20:25:40 +08:00
										 |  |  | 		this.hooks = Object.freeze({ | 
					
						
							| 
									
										
										
										
											2018-05-08 20:31:51 +08:00
										 |  |  | 			/** @type {SyncWaterfallHook<TODO[], RenderManifestOptions>} */ | 
					
						
							| 
									
										
										
										
											2018-01-24 16:39:49 +08:00
										 |  |  | 			renderManifest: new SyncWaterfallHook(["result", "options"]), | 
					
						
							| 
									
										
										
										
											2018-08-14 22:40:37 +08:00
										 |  |  | 			/** @type {SyncWaterfallHook<Source, ModuleTemplate, MainRenderContext>} */ | 
					
						
							| 
									
										
										
										
											2018-02-25 09:00:20 +08:00
										 |  |  | 			modules: new SyncWaterfallHook([ | 
					
						
							| 
									
										
										
										
											2018-08-14 22:40:37 +08:00
										 |  |  | 				"source", | 
					
						
							| 
									
										
										
										
											2018-02-25 09:00:20 +08:00
										 |  |  | 				"moduleTemplate", | 
					
						
							| 
									
										
										
										
											2018-08-14 22:40:37 +08:00
										 |  |  | 				"renderContext" | 
					
						
							| 
									
										
										
										
											2018-02-25 09:00:20 +08:00
										 |  |  | 			]), | 
					
						
							| 
									
										
										
										
											2018-08-14 22:40:37 +08:00
										 |  |  | 			/** @type {SyncWaterfallHook<string, string, MainRenderContext>} */ | 
					
						
							| 
									
										
										
										
											2018-02-25 09:00:20 +08:00
										 |  |  | 			moduleObj: new SyncWaterfallHook([ | 
					
						
							|  |  |  | 				"source", | 
					
						
							| 
									
										
										
										
											2018-08-14 22:40:37 +08:00
										 |  |  | 				"moduleIdExpression", | 
					
						
							|  |  |  | 				"renderContext" | 
					
						
							| 
									
										
										
										
											2018-02-25 09:00:20 +08:00
										 |  |  | 			]), | 
					
						
							| 
									
										
										
										
											2018-08-14 22:40:37 +08:00
										 |  |  | 			/** @type {SyncWaterfallHook<string, string, MainRenderContext>} */ | 
					
						
							| 
									
										
										
										
											2018-02-25 09:00:20 +08:00
										 |  |  | 			requireEnsure: new SyncWaterfallHook([ | 
					
						
							|  |  |  | 				"source", | 
					
						
							| 
									
										
										
										
											2018-08-14 22:40:37 +08:00
										 |  |  | 				"chunkIdExpression", | 
					
						
							|  |  |  | 				"renderContext" | 
					
						
							| 
									
										
										
										
											2018-02-25 09:00:20 +08:00
										 |  |  | 			]), | 
					
						
							| 
									
										
										
										
											2018-08-14 22:40:37 +08:00
										 |  |  | 			/** @type {SyncWaterfallHook<string, ModuleTemplate, MainRenderContext>} */ | 
					
						
							| 
									
										
										
										
											2018-02-25 09:00:20 +08:00
										 |  |  | 			bootstrap: new SyncWaterfallHook([ | 
					
						
							|  |  |  | 				"source", | 
					
						
							|  |  |  | 				"moduleTemplate", | 
					
						
							| 
									
										
										
										
											2018-08-14 22:40:37 +08:00
										 |  |  | 				"renderContext" | 
					
						
							| 
									
										
										
										
											2018-02-25 09:00:20 +08:00
										 |  |  | 			]), | 
					
						
							| 
									
										
										
										
											2017-11-29 01:43:01 +08:00
										 |  |  | 			localVars: new SyncWaterfallHook(["source", "chunk", "hash"]), | 
					
						
							| 
									
										
										
										
											2018-08-14 22:40:37 +08:00
										 |  |  | 			/** @type {SyncWaterfallHook<string, MainRenderContext>} */ | 
					
						
							|  |  |  | 			require: new SyncWaterfallHook(["source", "renderContext"]), | 
					
						
							|  |  |  | 			/** @type {SyncWaterfallHook<string, MainRenderContext>} */ | 
					
						
							|  |  |  | 			requireExtensions: new SyncWaterfallHook(["source", "renderContext"]), | 
					
						
							| 
									
										
										
										
											2018-07-02 22:18:49 +08:00
										 |  |  | 			/** @type {SyncWaterfallHook<string, Chunk, string>} */ | 
					
						
							| 
									
										
										
										
											2018-01-20 00:06:59 +08:00
										 |  |  | 			beforeStartup: new SyncWaterfallHook(["source", "chunk", "hash"]), | 
					
						
							| 
									
										
										
										
											2018-08-14 22:40:37 +08:00
										 |  |  | 			/** @type {SyncWaterfallHook<string, MainRenderContext>} */ | 
					
						
							|  |  |  | 			startup: new SyncWaterfallHook(["source", "renderContext"]), | 
					
						
							|  |  |  | 			/** @type {SyncWaterfallHook<Source, ModuleTemplate, MainRenderContext>} */ | 
					
						
							| 
									
										
										
										
											2018-02-25 09:00:20 +08:00
										 |  |  | 			render: new SyncWaterfallHook([ | 
					
						
							|  |  |  | 				"source", | 
					
						
							|  |  |  | 				"moduleTemplate", | 
					
						
							| 
									
										
										
										
											2018-08-14 22:40:37 +08:00
										 |  |  | 				"renderContext" | 
					
						
							| 
									
										
										
										
											2018-02-25 09:00:20 +08:00
										 |  |  | 			]), | 
					
						
							| 
									
										
										
										
											2017-11-29 01:43:01 +08:00
										 |  |  | 			renderWithEntry: new SyncWaterfallHook(["source", "chunk", "hash"]), | 
					
						
							| 
									
										
										
										
											2018-02-25 09:00:20 +08:00
										 |  |  | 			moduleRequire: new SyncWaterfallHook([ | 
					
						
							|  |  |  | 				"source", | 
					
						
							|  |  |  | 				"chunk", | 
					
						
							|  |  |  | 				"hash", | 
					
						
							|  |  |  | 				"moduleIdExpression" | 
					
						
							|  |  |  | 			]), | 
					
						
							| 
									
										
										
										
											2018-08-14 22:40:37 +08:00
										 |  |  | 			/** @type {SyncWaterfallHook<string, {moduleId: string, module: string}, MainRenderContext>} */ | 
					
						
							| 
									
										
										
										
											2018-02-25 09:00:20 +08:00
										 |  |  | 			addModule: new SyncWaterfallHook([ | 
					
						
							|  |  |  | 				"source", | 
					
						
							| 
									
										
										
										
											2018-08-14 22:40:37 +08:00
										 |  |  | 				"expressions", | 
					
						
							|  |  |  | 				"renderContext" | 
					
						
							| 
									
										
										
										
											2018-02-25 09:00:20 +08:00
										 |  |  | 			]), | 
					
						
							| 
									
										
										
										
											2017-11-29 01:43:01 +08:00
										 |  |  | 			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"]) | 
					
						
							| 
									
										
										
										
											2018-07-30 20:25:40 +08:00
										 |  |  | 		}); | 
					
						
							| 
									
										
										
										
											2018-08-14 22:40:37 +08:00
										 |  |  | 		this.hooks.startup.tap( | 
					
						
							|  |  |  | 			"MainTemplate", | 
					
						
							|  |  |  | 			(source, { chunk, hash, chunkGraph }) => { | 
					
						
							|  |  |  | 				/** @type {string[]} */ | 
					
						
							|  |  |  | 				const buf = []; | 
					
						
							|  |  |  | 				if (chunkGraph.getNumberOfEntryModules(chunk) > 0) { | 
					
						
							|  |  |  | 					buf.push("// Load entry module and return exports"); | 
					
						
							|  |  |  | 					let i = chunkGraph.getNumberOfEntryModules(chunk); | 
					
						
							|  |  |  | 					for (const entryModule of chunkGraph.getChunkEntryModulesIterable( | 
					
						
							|  |  |  | 						chunk | 
					
						
							|  |  |  | 					)) { | 
					
						
							|  |  |  | 						const mayReturn = --i === 0 ? "return " : ""; | 
					
						
							|  |  |  | 						buf.push( | 
					
						
							|  |  |  | 							`${mayReturn}${this.renderRequireFunctionForModule( | 
					
						
							|  |  |  | 								hash, | 
					
						
							|  |  |  | 								chunk, | 
					
						
							|  |  |  | 								JSON.stringify(entryModule.id) | 
					
						
							|  |  |  | 							)}(${this.requireFn}.s = ${JSON.stringify(entryModule.id)});`
 | 
					
						
							|  |  |  | 						); | 
					
						
							|  |  |  | 					} | 
					
						
							|  |  |  | 				} | 
					
						
							|  |  |  | 				return Template.asString(buf); | 
					
						
							| 
									
										
										
										
											2017-01-13 04:38:38 +08:00
										 |  |  | 			} | 
					
						
							| 
									
										
										
										
											2018-08-14 22:40:37 +08:00
										 |  |  | 		); | 
					
						
							| 
									
										
										
										
											2018-02-25 09:00:20 +08:00
										 |  |  | 		this.hooks.render.tap( | 
					
						
							|  |  |  | 			"MainTemplate", | 
					
						
							| 
									
										
										
										
											2018-08-14 22:40:37 +08:00
										 |  |  | 			(bootstrapSource, moduleTemplate, renderContext) => { | 
					
						
							| 
									
										
										
										
											2018-02-25 09:00:20 +08:00
										 |  |  | 				const source = new ConcatSource(); | 
					
						
							|  |  |  | 				source.add("/******/ (function(modules) { // webpackBootstrap\n"); | 
					
						
							|  |  |  | 				source.add(new PrefixSource("/******/", bootstrapSource)); | 
					
						
							|  |  |  | 				source.add("/******/ })\n"); | 
					
						
							|  |  |  | 				source.add( | 
					
						
							|  |  |  | 					"/************************************************************************/\n" | 
					
						
							|  |  |  | 				); | 
					
						
							|  |  |  | 				source.add("/******/ ("); | 
					
						
							|  |  |  | 				source.add( | 
					
						
							|  |  |  | 					this.hooks.modules.call( | 
					
						
							|  |  |  | 						new RawSource(""), | 
					
						
							|  |  |  | 						moduleTemplate, | 
					
						
							| 
									
										
										
										
											2018-08-14 22:40:37 +08:00
										 |  |  | 						renderContext | 
					
						
							| 
									
										
										
										
											2018-02-25 09:00:20 +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 = {};" | 
					
						
							|  |  |  | 			]); | 
					
						
							|  |  |  | 		}); | 
					
						
							| 
									
										
										
										
											2018-08-14 22:40:37 +08:00
										 |  |  | 		this.hooks.require.tap("MainTemplate", (source, renderContext) => { | 
					
						
							|  |  |  | 			const { chunk, hash } = renderContext; | 
					
						
							| 
									
										
										
										
											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] = {", | 
					
						
							| 
									
										
										
										
											2018-08-14 22:40:37 +08:00
										 |  |  | 				Template.indent( | 
					
						
							|  |  |  | 					this.hooks.moduleObj.call("", "moduleId", renderContext) | 
					
						
							|  |  |  | 				), | 
					
						
							| 
									
										
										
										
											2017-01-13 04:38:38 +08:00
										 |  |  | 				"};", | 
					
						
							|  |  |  | 				"", | 
					
						
							| 
									
										
										
										
											2018-02-25 09:00:20 +08:00
										 |  |  | 				Template.asString( | 
					
						
							|  |  |  | 					outputOptions.strictModuleExceptionHandling | 
					
						
							|  |  |  | 						? [ | 
					
						
							|  |  |  | 								"// Execute the module function", | 
					
						
							|  |  |  | 								"var threw = true;", | 
					
						
							|  |  |  | 								"try {", | 
					
						
							|  |  |  | 								Template.indent([ | 
					
						
							|  |  |  | 									`modules[moduleId].call(module.exports, module, module.exports, ${this.renderRequireFunctionForModule( | 
					
						
							|  |  |  | 										hash, | 
					
						
							|  |  |  | 										chunk, | 
					
						
							|  |  |  | 										"moduleId" | 
					
						
							|  |  |  | 									)});`,
 | 
					
						
							|  |  |  | 									"threw = false;" | 
					
						
							|  |  |  | 								]), | 
					
						
							|  |  |  | 								"} finally {", | 
					
						
							|  |  |  | 								Template.indent([ | 
					
						
							|  |  |  | 									"if(threw) delete installedModules[moduleId];" | 
					
						
							|  |  |  | 								]), | 
					
						
							|  |  |  | 								"}" | 
					
						
							| 
									
										
										
										
											2018-03-26 22:56:10 +08:00
										 |  |  | 						  ] | 
					
						
							| 
									
										
										
										
											2018-02-25 09:00:20 +08:00
										 |  |  | 						: [ | 
					
						
							|  |  |  | 								"// Execute the module function", | 
					
						
							|  |  |  | 								`modules[moduleId].call(module.exports, module, module.exports, ${this.renderRequireFunctionForModule( | 
					
						
							|  |  |  | 									hash, | 
					
						
							|  |  |  | 									chunk, | 
					
						
							|  |  |  | 									"moduleId" | 
					
						
							|  |  |  | 								)});`
 | 
					
						
							| 
									
										
										
										
											2018-03-26 22:56:10 +08:00
										 |  |  | 						  ] | 
					
						
							| 
									
										
										
										
											2018-02-25 09:00:20 +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;" | 
					
						
							|  |  |  | 			]); | 
					
						
							|  |  |  | 		}); | 
					
						
							| 
									
										
										
										
											2018-08-14 22:40:37 +08:00
										 |  |  | 		this.hooks.moduleObj.tap("MainTemplate", () => { | 
					
						
							|  |  |  | 			return Template.asString(["i: moduleId,", "l: false,", "exports: {}"]); | 
					
						
							|  |  |  | 		}); | 
					
						
							|  |  |  | 		this.hooks.requireExtensions.tap( | 
					
						
							| 
									
										
										
										
											2018-02-25 09:00:20 +08:00
										 |  |  | 			"MainTemplate", | 
					
						
							| 
									
										
										
										
											2018-08-14 22:40:37 +08:00
										 |  |  | 			(source, renderContext) => { | 
					
						
							|  |  |  | 				const { chunk, hash } = renderContext; | 
					
						
							|  |  |  | 				const buf = []; | 
					
						
							|  |  |  | 				const chunkMaps = chunk.getChunkMaps(); | 
					
						
							|  |  |  | 				// Check if there are non initial chunks which need to be imported using require-ensure
 | 
					
						
							|  |  |  | 				if (Object.keys(chunkMaps.hash).length) { | 
					
						
							|  |  |  | 					buf.push("// This file contains only the entry chunk."); | 
					
						
							|  |  |  | 					buf.push("// The chunk loading function for additional chunks"); | 
					
						
							|  |  |  | 					buf.push(`${this.requireFn}.e = function requireEnsure(chunkId) {`); | 
					
						
							|  |  |  | 					buf.push(Template.indent("var promises = [];")); | 
					
						
							|  |  |  | 					buf.push( | 
					
						
							|  |  |  | 						Template.indent( | 
					
						
							|  |  |  | 							this.hooks.requireEnsure.call("", "chunkId", renderContext) | 
					
						
							|  |  |  | 						) | 
					
						
							|  |  |  | 					); | 
					
						
							|  |  |  | 					buf.push(Template.indent("return Promise.all(promises);")); | 
					
						
							|  |  |  | 					buf.push("};"); | 
					
						
							|  |  |  | 				} | 
					
						
							|  |  |  | 				buf.push(""); | 
					
						
							|  |  |  | 				buf.push("// expose the modules object (__webpack_modules__)"); | 
					
						
							|  |  |  | 				buf.push(`${this.requireFn}.m = modules;`); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 				buf.push(""); | 
					
						
							|  |  |  | 				buf.push("// expose the module cache"); | 
					
						
							|  |  |  | 				buf.push(`${this.requireFn}.c = installedModules;`); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 				buf.push(""); | 
					
						
							|  |  |  | 				buf.push("// define getter function for harmony exports"); | 
					
						
							|  |  |  | 				buf.push(`${this.requireFn}.d = function(exports, name, getter) {`); | 
					
						
							| 
									
										
										
										
											2018-02-25 09:00:20 +08:00
										 |  |  | 				buf.push( | 
					
						
							| 
									
										
										
										
											2018-08-14 22:40:37 +08:00
										 |  |  | 					Template.indent([ | 
					
						
							|  |  |  | 						`if(!${this.requireFn}.o(exports, name)) {`, | 
					
						
							|  |  |  | 						Template.indent([ | 
					
						
							|  |  |  | 							"Object.defineProperty(exports, name, { enumerable: true, get: getter });" | 
					
						
							|  |  |  | 						]), | 
					
						
							|  |  |  | 						"}" | 
					
						
							|  |  |  | 					]) | 
					
						
							| 
									
										
										
										
											2018-02-25 09:00:20 +08:00
										 |  |  | 				); | 
					
						
							| 
									
										
										
										
											2017-01-13 04:38:38 +08:00
										 |  |  | 				buf.push("};"); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-08-14 22:40:37 +08:00
										 |  |  | 				buf.push(""); | 
					
						
							|  |  |  | 				buf.push("// define __esModule on exports"); | 
					
						
							|  |  |  | 				buf.push(`${this.requireFn}.r = function(exports) {`); | 
					
						
							|  |  |  | 				buf.push( | 
					
						
							| 
									
										
										
										
											2017-12-07 16:42:33 +08:00
										 |  |  | 					Template.indent([ | 
					
						
							| 
									
										
										
										
											2018-08-14 22:40:37 +08:00
										 |  |  | 						"if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {", | 
					
						
							|  |  |  | 						Template.indent([ | 
					
						
							|  |  |  | 							"Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });" | 
					
						
							|  |  |  | 						]), | 
					
						
							|  |  |  | 						"}", | 
					
						
							|  |  |  | 						"Object.defineProperty(exports, '__esModule', { value: true });" | 
					
						
							|  |  |  | 					]) | 
					
						
							|  |  |  | 				); | 
					
						
							|  |  |  | 				buf.push("};"); | 
					
						
							| 
									
										
										
										
											2014-06-03 03:23:53 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-08-14 22:40:37 +08:00
										 |  |  | 				buf.push(""); | 
					
						
							|  |  |  | 				buf.push("// create a fake namespace object"); | 
					
						
							|  |  |  | 				buf.push("// mode & 1: value is a module id, require it"); | 
					
						
							|  |  |  | 				buf.push("// mode & 2: merge all properties of value into the ns"); | 
					
						
							|  |  |  | 				buf.push("// mode & 4: return value when already ns object"); | 
					
						
							|  |  |  | 				buf.push("// mode & 8|1: behave like require"); | 
					
						
							|  |  |  | 				buf.push(`${this.requireFn}.t = function(value, mode) {`); | 
					
						
							|  |  |  | 				buf.push( | 
					
						
							| 
									
										
										
										
											2018-05-03 00:09:24 +08:00
										 |  |  | 					Template.indent([ | 
					
						
							| 
									
										
										
										
											2018-08-14 22:40:37 +08:00
										 |  |  | 						`if(mode & 1) value = ${this.requireFn}(value);`, | 
					
						
							|  |  |  | 						`if(mode & 8) return value;`, | 
					
						
							|  |  |  | 						"if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;", | 
					
						
							|  |  |  | 						"var ns = Object.create(null);", | 
					
						
							|  |  |  | 						`${this.requireFn}.r(ns);`, | 
					
						
							|  |  |  | 						"Object.defineProperty(ns, 'default', { enumerable: true, value: value });", | 
					
						
							|  |  |  | 						"if(mode & 2 && typeof value != 'string') for(var key in value) " + | 
					
						
							|  |  |  | 							`${this.requireFn}.d(ns, key, function(key) { ` + | 
					
						
							|  |  |  | 							"return value[key]; " + | 
					
						
							|  |  |  | 							"}.bind(null, key));", | 
					
						
							|  |  |  | 						"return ns;" | 
					
						
							|  |  |  | 					]) | 
					
						
							|  |  |  | 				); | 
					
						
							|  |  |  | 				buf.push("};"); | 
					
						
							| 
									
										
										
										
											2018-05-03 00:09:24 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-08-14 22:40:37 +08:00
										 |  |  | 				buf.push(""); | 
					
						
							|  |  |  | 				buf.push( | 
					
						
							|  |  |  | 					"// getDefaultExport function for compatibility with non-harmony modules" | 
					
						
							|  |  |  | 				); | 
					
						
							|  |  |  | 				buf.push(this.requireFn + ".n = function(module) {"); | 
					
						
							|  |  |  | 				buf.push( | 
					
						
							| 
									
										
										
										
											2018-02-25 09:00:20 +08:00
										 |  |  | 					Template.indent([ | 
					
						
							| 
									
										
										
										
											2018-08-14 22:40:37 +08:00
										 |  |  | 						"var getter = module && module.__esModule ?", | 
					
						
							|  |  |  | 						Template.indent([ | 
					
						
							|  |  |  | 							"function getDefault() { return module['default']; } :", | 
					
						
							|  |  |  | 							"function getModuleExports() { return module; };" | 
					
						
							|  |  |  | 						]), | 
					
						
							|  |  |  | 						`${this.requireFn}.d(getter, 'a', getter);`, | 
					
						
							|  |  |  | 						"return getter;" | 
					
						
							|  |  |  | 					]) | 
					
						
							|  |  |  | 				); | 
					
						
							|  |  |  | 				buf.push("};"); | 
					
						
							| 
									
										
										
										
											2016-06-08 06:10:30 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-08-14 22:40:37 +08:00
										 |  |  | 				buf.push(""); | 
					
						
							|  |  |  | 				buf.push("// Object.prototype.hasOwnProperty.call"); | 
					
						
							|  |  |  | 				buf.push( | 
					
						
							|  |  |  | 					`${ | 
					
						
							|  |  |  | 						this.requireFn | 
					
						
							|  |  |  | 					}.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };`
 | 
					
						
							|  |  |  | 				); | 
					
						
							| 
									
										
										
										
											2017-01-13 04:38:38 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-08-14 22:40:37 +08:00
										 |  |  | 				const publicPath = this.getPublicPath({ | 
					
						
							|  |  |  | 					hash: hash | 
					
						
							|  |  |  | 				}); | 
					
						
							|  |  |  | 				buf.push(""); | 
					
						
							|  |  |  | 				buf.push("// __webpack_public_path__"); | 
					
						
							|  |  |  | 				buf.push(`${this.requireFn}.p = ${JSON.stringify(publicPath)};`); | 
					
						
							|  |  |  | 				return Template.asString(buf); | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 		); | 
					
						
							| 
									
										
										
										
											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
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-04-21 08:35:02 +08:00
										 |  |  | 	/** | 
					
						
							|  |  |  | 	 * | 
					
						
							| 
									
										
										
										
											2018-05-01 23:47:14 +08:00
										 |  |  | 	 * @param {RenderManifestOptions} options render manifest options | 
					
						
							| 
									
										
										
										
											2018-08-14 22:40:37 +08:00
										 |  |  | 	 * @returns {RenderManifestEntry[]} returns render manifest | 
					
						
							| 
									
										
										
										
											2018-04-21 08:35:02 +08:00
										 |  |  | 	 */ | 
					
						
							| 
									
										
										
										
											2017-10-30 20:56:57 +08:00
										 |  |  | 	getRenderManifest(options) { | 
					
						
							|  |  |  | 		const result = []; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-01-24 16:39:49 +08:00
										 |  |  | 		this.hooks.renderManifest.call(result, options); | 
					
						
							| 
									
										
										
										
											2017-10-30 20:56:57 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 		return result; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-04-21 08:35:02 +08:00
										 |  |  | 	/** | 
					
						
							| 
									
										
										
										
											2018-04-24 21:44:50 +08:00
										 |  |  | 	 * @param {ModuleTemplate} moduleTemplate ModuleTemplate instance for render | 
					
						
							| 
									
										
										
										
											2018-08-14 22:40:37 +08:00
										 |  |  | 	 * @param {MainRenderContext} renderContext options object | 
					
						
							| 
									
										
										
										
											2018-05-08 20:31:51 +08:00
										 |  |  | 	 * @returns {ConcatSource} the newly generated source from rendering | 
					
						
							| 
									
										
										
										
											2018-04-21 08:35:02 +08:00
										 |  |  | 	 */ | 
					
						
							| 
									
										
										
										
											2018-08-14 22:40:37 +08:00
										 |  |  | 	render(moduleTemplate, renderContext) { | 
					
						
							|  |  |  | 		const { hash, chunk, chunkGraph } = renderContext; | 
					
						
							| 
									
										
										
										
											2017-02-05 07:30:52 +08:00
										 |  |  | 		const buf = []; | 
					
						
							| 
									
										
										
										
											2018-08-14 22:40:37 +08:00
										 |  |  | 		buf.push(this.hooks.bootstrap.call("", moduleTemplate, renderContext)); | 
					
						
							| 
									
										
										
										
											2017-11-29 01:43:01 +08:00
										 |  |  | 		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) {`); | 
					
						
							| 
									
										
										
										
											2018-08-14 22:40:37 +08:00
										 |  |  | 		buf.push(Template.indent(this.hooks.require.call("", renderContext))); | 
					
						
							| 
									
										
										
										
											2017-01-13 04:38:38 +08:00
										 |  |  | 		buf.push("}"); | 
					
						
							|  |  |  | 		buf.push(""); | 
					
						
							| 
									
										
										
										
											2018-02-25 09:00:20 +08:00
										 |  |  | 		buf.push( | 
					
						
							| 
									
										
										
										
											2018-08-14 22:40:37 +08:00
										 |  |  | 			Template.asString(this.hooks.requireExtensions.call("", renderContext)) | 
					
						
							| 
									
										
										
										
											2018-02-25 09:00:20 +08:00
										 |  |  | 		); | 
					
						
							| 
									
										
										
										
											2014-06-03 03:23:53 +08:00
										 |  |  | 		buf.push(""); | 
					
						
							| 
									
										
										
										
											2018-01-20 00:06:59 +08:00
										 |  |  | 		buf.push(Template.asString(this.hooks.beforeStartup.call("", chunk, hash))); | 
					
						
							| 
									
										
										
										
											2018-08-14 22:40:37 +08:00
										 |  |  | 		buf.push(Template.asString(this.hooks.startup.call("", renderContext))); | 
					
						
							| 
									
										
										
										
											2018-02-25 09:00:20 +08:00
										 |  |  | 		let source = this.hooks.render.call( | 
					
						
							|  |  |  | 			new OriginalSource( | 
					
						
							|  |  |  | 				Template.prefix(buf, " \t") + "\n", | 
					
						
							|  |  |  | 				"webpack/bootstrap" | 
					
						
							|  |  |  | 			), | 
					
						
							|  |  |  | 			moduleTemplate, | 
					
						
							| 
									
										
										
										
											2018-08-14 22:40:37 +08:00
										 |  |  | 			renderContext | 
					
						
							| 
									
										
										
										
											2018-02-25 09:00:20 +08:00
										 |  |  | 		); | 
					
						
							| 
									
										
										
										
											2018-08-14 22:40:37 +08:00
										 |  |  | 		if (chunkGraph.getNumberOfEntryModules(chunk) > 0) { | 
					
						
							| 
									
										
										
										
											2017-11-29 01:43:01 +08:00
										 |  |  | 			source = this.hooks.renderWithEntry.call(source, chunk, hash); | 
					
						
							| 
									
										
										
										
											2017-01-13 04:38:38 +08:00
										 |  |  | 		} | 
					
						
							| 
									
										
										
										
											2018-05-29 20:50:40 +08:00
										 |  |  | 		if (!source) { | 
					
						
							| 
									
										
										
										
											2018-02-25 09:00:20 +08:00
										 |  |  | 			throw new Error( | 
					
						
							|  |  |  | 				"Compiler error: MainTemplate plugin 'render' should return something" | 
					
						
							|  |  |  | 			); | 
					
						
							| 
									
										
										
										
											2018-05-29 20:50:40 +08:00
										 |  |  | 		} | 
					
						
							| 
									
										
										
										
											2017-01-13 04:38:38 +08:00
										 |  |  | 		chunk.rendered = true; | 
					
						
							|  |  |  | 		return new ConcatSource(source, ";"); | 
					
						
							| 
									
										
										
										
											2014-12-22 23:10:23 +08:00
										 |  |  | 	} | 
					
						
							| 
									
										
										
										
											2013-06-12 22:16:06 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-04-21 08:35:02 +08:00
										 |  |  | 	/** | 
					
						
							|  |  |  | 	 * | 
					
						
							|  |  |  | 	 * @param {string} hash hash for render fn | 
					
						
							| 
									
										
										
										
											2018-04-24 21:44:50 +08:00
										 |  |  | 	 * @param {Chunk} chunk Chunk instance for require | 
					
						
							| 
									
										
										
										
											2018-04-21 08:35:02 +08:00
										 |  |  | 	 * @param {(number|string)=} varModuleId module id | 
					
						
							| 
									
										
										
										
											2018-05-08 20:31:51 +08:00
										 |  |  | 	 * @returns {TODO} the moduleRequire hook call return signature | 
					
						
							| 
									
										
										
										
											2018-04-21 08:35:02 +08:00
										 |  |  | 	 */ | 
					
						
							| 
									
										
										
										
											2017-01-13 04:38:38 +08:00
										 |  |  | 	renderRequireFunctionForModule(hash, chunk, varModuleId) { | 
					
						
							| 
									
										
										
										
											2018-02-25 09:00:20 +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
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-04-21 08:35:02 +08:00
										 |  |  | 	/** | 
					
						
							|  |  |  | 	 * | 
					
						
							| 
									
										
										
										
											2018-08-14 22:40:37 +08:00
										 |  |  | 	 * @param {string} varModuleId module id | 
					
						
							|  |  |  | 	 * @param {string} varModule Module instance | 
					
						
							|  |  |  | 	 * @param {MainRenderContext} renderContext the render context | 
					
						
							| 
									
										
										
										
											2018-05-08 20:31:51 +08:00
										 |  |  | 	 * @returns {TODO} renderAddModule call | 
					
						
							| 
									
										
										
										
											2018-04-21 08:35:02 +08:00
										 |  |  | 	 */ | 
					
						
							| 
									
										
										
										
											2018-08-14 22:40:37 +08:00
										 |  |  | 	renderAddModule(varModuleId, varModule, renderContext) { | 
					
						
							| 
									
										
										
										
											2018-02-25 09:00:20 +08:00
										 |  |  | 		return this.hooks.addModule.call( | 
					
						
							|  |  |  | 			`modules[${varModuleId}] = ${varModule};`, | 
					
						
							| 
									
										
										
										
											2018-08-14 22:40:37 +08:00
										 |  |  | 			{ | 
					
						
							|  |  |  | 				moduleId: varModuleId, | 
					
						
							|  |  |  | 				module: varModule | 
					
						
							|  |  |  | 			}, | 
					
						
							|  |  |  | 			renderContext | 
					
						
							| 
									
										
										
										
											2018-02-25 09:00:20 +08:00
										 |  |  | 		); | 
					
						
							| 
									
										
										
										
											2017-01-13 04:38:38 +08:00
										 |  |  | 	} | 
					
						
							| 
									
										
										
										
											2013-06-12 22:16:06 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-04-21 08:35:02 +08:00
										 |  |  | 	/** | 
					
						
							|  |  |  | 	 * | 
					
						
							|  |  |  | 	 * @param {string} hash string hash | 
					
						
							| 
									
										
										
										
											2018-07-02 22:18:49 +08:00
										 |  |  | 	 * @param {number=} length length | 
					
						
							| 
									
										
										
										
											2018-05-08 20:31:51 +08:00
										 |  |  | 	 * @returns {string} call hook return | 
					
						
							| 
									
										
										
										
											2018-04-21 08:35:02 +08:00
										 |  |  | 	 */ | 
					
						
							| 
									
										
										
										
											2017-01-13 04:38:38 +08:00
										 |  |  | 	renderCurrentHashCode(hash, length) { | 
					
						
							|  |  |  | 		length = length || Infinity; | 
					
						
							| 
									
										
										
										
											2018-02-25 09:00:20 +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
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-04-21 08:35:02 +08:00
										 |  |  | 	/** | 
					
						
							|  |  |  | 	 * | 
					
						
							|  |  |  | 	 * @param {object} options get public path options | 
					
						
							| 
									
										
										
										
											2018-05-08 20:31:51 +08:00
										 |  |  | 	 * @returns {string} hook call | 
					
						
							| 
									
										
										
										
											2018-04-21 08:35:02 +08:00
										 |  |  | 	 */ | 
					
						
							| 
									
										
										
										
											2017-01-13 04:38:38 +08:00
										 |  |  | 	getPublicPath(options) { | 
					
						
							| 
									
										
										
										
											2018-02-25 09:00:20 +08:00
										 |  |  | 		return this.hooks.assetPath.call( | 
					
						
							|  |  |  | 			this.outputOptions.publicPath || "", | 
					
						
							|  |  |  | 			options | 
					
						
							|  |  |  | 		); | 
					
						
							| 
									
										
										
										
											2017-11-29 01:43:01 +08:00
										 |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	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
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-06-25 16:44:54 +08:00
										 |  |  | 	/** | 
					
						
							|  |  |  | 	 * Updates hash with information from this template | 
					
						
							|  |  |  | 	 * @param {Hash} hash the hash to update | 
					
						
							|  |  |  | 	 * @returns {void} | 
					
						
							|  |  |  | 	 */ | 
					
						
							| 
									
										
										
										
											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
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-06-25 16:44:54 +08:00
										 |  |  | 	/** | 
					
						
							|  |  |  | 	 * Updates hash with chunk-specific information from this template | 
					
						
							|  |  |  | 	 * @param {Hash} hash the hash to update | 
					
						
							|  |  |  | 	 * @param {Chunk} chunk the chunk | 
					
						
							|  |  |  | 	 * @returns {void} | 
					
						
							|  |  |  | 	 */ | 
					
						
							| 
									
										
										
										
											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
										 |  |  | }; |