| 
									
										
										
										
											2013-01-31 01:49:25 +08:00
										 |  |  | /* | 
					
						
							|  |  |  | 	MIT License http://www.opensource.org/licenses/mit-license.php
 | 
					
						
							|  |  |  | 	Author Tobias Koppers @sokra | 
					
						
							|  |  |  | */ | 
					
						
							| 
									
										
										
										
											2017-04-04 05:22:23 +08:00
										 |  |  | "use strict"; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | const DependenciesBlock = require("./DependenciesBlock"); | 
					
						
							|  |  |  | const ModuleReason = require("./ModuleReason"); | 
					
						
							| 
									
										
										
										
											2017-06-18 12:33:07 +08:00
										 |  |  | const SortableSet = require("./util/SortableSet"); | 
					
						
							| 
									
										
										
										
											2017-04-04 05:22:23 +08:00
										 |  |  | const Template = require("./Template"); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-04-21 07:51:40 +08:00
										 |  |  | /** @typedef {import("./Chunk")} Chunk */ | 
					
						
							| 
									
										
										
										
											2018-07-25 18:38:34 +08:00
										 |  |  | /** @typedef {import("./ChunkGroup")} ChunkGroup */ | 
					
						
							| 
									
										
										
										
											2018-07-25 18:12:17 +08:00
										 |  |  | /** @typedef {import("./Compilation")} Compilation */ | 
					
						
							| 
									
										
										
										
											2018-07-25 18:38:34 +08:00
										 |  |  | /** @typedef {import("./Dependency")} Dependency */ | 
					
						
							| 
									
										
										
										
											2018-04-21 07:51:40 +08:00
										 |  |  | /** @typedef {import("./RequestShortener")} RequestShortener */ | 
					
						
							| 
									
										
										
										
											2018-07-25 18:12:17 +08:00
										 |  |  | /** @typedef {import("./DependencyTemplates")} DependencyTemplates */ | 
					
						
							|  |  |  | /** @typedef {import("./RuntimeTemplate")} RuntimeTemplate */ | 
					
						
							| 
									
										
										
										
											2018-05-04 00:57:02 +08:00
										 |  |  | /** @typedef {import("./WebpackError")} WebpackError */ | 
					
						
							| 
									
										
										
										
											2018-07-21 00:17:51 +08:00
										 |  |  | /** @typedef {import("./util/createHash").Hash} Hash */ | 
					
						
							| 
									
										
										
										
											2018-07-25 18:12:17 +08:00
										 |  |  | /** @typedef {import("webpack-sources").Source} Source */ | 
					
						
							| 
									
										
										
										
											2018-04-12 15:18:53 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-11-17 21:26:23 +08:00
										 |  |  | const EMPTY_RESOLVE_OPTIONS = {}; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-04-04 05:22:23 +08:00
										 |  |  | let debugId = 1000; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-06-19 20:13:44 +08:00
										 |  |  | const sortById = (a, b) => { | 
					
						
							|  |  |  | 	return a.id - b.id; | 
					
						
							|  |  |  | }; | 
					
						
							| 
									
										
										
										
											2017-06-18 12:33:07 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-06-19 20:13:44 +08:00
										 |  |  | const sortByDebugId = (a, b) => { | 
					
						
							|  |  |  | 	return a.debugId - b.debugId; | 
					
						
							|  |  |  | }; | 
					
						
							| 
									
										
										
										
											2017-06-18 12:33:07 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-04-12 15:18:53 +08:00
										 |  |  | /** @typedef {(requestShortener: RequestShortener) => string} OptimizationBailoutFunction */ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-06-19 20:13:44 +08:00
										 |  |  | class Module extends DependenciesBlock { | 
					
						
							| 
									
										
										
										
											2018-01-31 04:40:44 +08:00
										 |  |  | 	constructor(type, context = null) { | 
					
						
							| 
									
										
										
										
											2017-04-04 05:22:23 +08:00
										 |  |  | 		super(); | 
					
						
							| 
									
										
										
										
											2018-04-12 15:18:53 +08:00
										 |  |  | 		/** @type {string} */ | 
					
						
							| 
									
										
										
										
											2017-10-30 20:56:57 +08:00
										 |  |  | 		this.type = type; | 
					
						
							| 
									
										
										
										
											2018-04-12 15:18:53 +08:00
										 |  |  | 		/** @type {string} */ | 
					
						
							| 
									
										
										
										
											2018-01-31 04:40:44 +08:00
										 |  |  | 		this.context = context; | 
					
						
							| 
									
										
										
										
											2017-11-06 20:02:35 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 		// Unique Id
 | 
					
						
							| 
									
										
										
										
											2018-04-12 15:18:53 +08:00
										 |  |  | 		/** @type {number} */ | 
					
						
							| 
									
										
										
										
											2017-11-06 20:02:35 +08:00
										 |  |  | 		this.debugId = debugId++; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-12-01 18:07:23 +08:00
										 |  |  | 		// Hash
 | 
					
						
							| 
									
										
										
										
											2018-04-12 15:18:53 +08:00
										 |  |  | 		/** @type {string} */ | 
					
						
							| 
									
										
										
										
											2017-12-01 18:07:23 +08:00
										 |  |  | 		this.hash = undefined; | 
					
						
							| 
									
										
										
										
											2018-04-12 15:18:53 +08:00
										 |  |  | 		/** @type {string} */ | 
					
						
							| 
									
										
										
										
											2017-12-01 18:07:23 +08:00
										 |  |  | 		this.renderedHash = undefined; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-11-06 20:02:35 +08:00
										 |  |  | 		// Info from Factory
 | 
					
						
							| 
									
										
										
										
											2018-05-15 18:20:17 +08:00
										 |  |  | 		/** @type {TODO} */ | 
					
						
							| 
									
										
										
										
											2017-11-17 21:26:23 +08:00
										 |  |  | 		this.resolveOptions = EMPTY_RESOLVE_OPTIONS; | 
					
						
							| 
									
										
										
										
											2018-04-12 15:18:53 +08:00
										 |  |  | 		/** @type {object} */ | 
					
						
							| 
									
										
										
										
											2017-12-06 19:09:17 +08:00
										 |  |  | 		this.factoryMeta = {}; | 
					
						
							| 
									
										
										
										
											2017-11-06 20:02:35 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 		// Info from Build
 | 
					
						
							| 
									
										
										
										
											2018-05-04 00:57:02 +08:00
										 |  |  | 		/** @type {WebpackError[]} */ | 
					
						
							| 
									
										
										
										
											2017-11-06 20:02:35 +08:00
										 |  |  | 		this.warnings = []; | 
					
						
							| 
									
										
										
										
											2018-05-04 00:57:02 +08:00
										 |  |  | 		/** @type {WebpackError[]} */ | 
					
						
							| 
									
										
										
										
											2017-11-06 20:02:35 +08:00
										 |  |  | 		this.errors = []; | 
					
						
							| 
									
										
										
										
											2018-04-12 15:18:53 +08:00
										 |  |  | 		/** @type {object} */ | 
					
						
							| 
									
										
										
										
											2017-12-06 19:09:17 +08:00
										 |  |  | 		this.buildMeta = undefined; | 
					
						
							| 
									
										
										
										
											2018-04-12 15:18:53 +08:00
										 |  |  | 		/** @type {object} */ | 
					
						
							| 
									
										
										
										
											2017-12-06 19:09:17 +08:00
										 |  |  | 		this.buildInfo = undefined; | 
					
						
							| 
									
										
										
										
											2017-11-06 20:02:35 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 		// Graph (per Compilation)
 | 
					
						
							| 
									
										
										
										
											2018-04-12 15:18:53 +08:00
										 |  |  | 		/** @type {ModuleReason[]} */ | 
					
						
							| 
									
										
										
										
											2017-04-04 05:22:23 +08:00
										 |  |  | 		this.reasons = []; | 
					
						
							| 
									
										
										
										
											2018-06-06 12:11:24 +08:00
										 |  |  | 		/** @type {SortableSet<Chunk>} */ | 
					
						
							| 
									
										
										
										
											2017-11-06 20:02:35 +08:00
										 |  |  | 		this._chunks = new SortableSet(undefined, sortById); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		// Info from Compilation (per Compilation)
 | 
					
						
							| 
									
										
										
										
											2018-04-21 07:51:40 +08:00
										 |  |  | 		/** @type {number|string} */ | 
					
						
							| 
									
										
										
										
											2017-04-04 05:22:23 +08:00
										 |  |  | 		this.id = null; | 
					
						
							| 
									
										
										
										
											2018-04-12 15:18:53 +08:00
										 |  |  | 		/** @type {number} */ | 
					
						
							| 
									
										
										
										
											2017-04-04 05:22:23 +08:00
										 |  |  | 		this.index = null; | 
					
						
							| 
									
										
										
										
											2018-04-12 15:18:53 +08:00
										 |  |  | 		/** @type {number} */ | 
					
						
							| 
									
										
										
										
											2017-04-04 05:22:23 +08:00
										 |  |  | 		this.index2 = null; | 
					
						
							| 
									
										
										
										
											2018-04-12 15:18:53 +08:00
										 |  |  | 		/** @type {number} */ | 
					
						
							| 
									
										
										
										
											2017-04-04 05:22:23 +08:00
										 |  |  | 		this.depth = null; | 
					
						
							| 
									
										
										
										
											2018-04-12 15:18:53 +08:00
										 |  |  | 		/** @type {Module} */ | 
					
						
							| 
									
										
										
										
											2017-11-06 20:02:35 +08:00
										 |  |  | 		this.issuer = null; | 
					
						
							| 
									
										
										
										
											2018-04-12 15:18:53 +08:00
										 |  |  | 		/** @type {undefined | object} */ | 
					
						
							| 
									
										
										
										
											2017-11-06 20:02:35 +08:00
										 |  |  | 		this.profile = undefined; | 
					
						
							| 
									
										
										
										
											2018-04-12 15:18:53 +08:00
										 |  |  | 		/** @type {boolean} */ | 
					
						
							| 
									
										
										
										
											2017-11-06 20:02:35 +08:00
										 |  |  | 		this.prefetched = false; | 
					
						
							| 
									
										
										
										
											2018-04-12 15:18:53 +08:00
										 |  |  | 		/** @type {boolean} */ | 
					
						
							| 
									
										
										
										
											2017-11-06 20:02:35 +08:00
										 |  |  | 		this.built = false; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		// Info from Optimization (per Compilation)
 | 
					
						
							| 
									
										
										
										
											2018-04-12 15:18:53 +08:00
										 |  |  | 		/** @type {null | boolean} */ | 
					
						
							| 
									
										
										
										
											2017-04-04 05:22:23 +08:00
										 |  |  | 		this.used = null; | 
					
						
							| 
									
										
										
										
											2018-04-12 15:18:53 +08:00
										 |  |  | 		/** @type {false | true | string[]} */ | 
					
						
							| 
									
										
										
										
											2017-04-04 05:22:23 +08:00
										 |  |  | 		this.usedExports = null; | 
					
						
							| 
									
										
										
										
											2018-04-12 15:18:53 +08:00
										 |  |  | 		/** @type {(string | OptimizationBailoutFunction)[]} */ | 
					
						
							| 
									
										
										
										
											2017-05-28 21:25:07 +08:00
										 |  |  | 		this.optimizationBailout = []; | 
					
						
							| 
									
										
										
										
											2017-11-25 00:22:58 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-04-12 15:18:53 +08:00
										 |  |  | 		/** @type {boolean} */ | 
					
						
							| 
									
										
										
										
											2018-03-28 13:49:10 +08:00
										 |  |  | 		this.useSourceMap = false; | 
					
						
							| 
									
										
										
										
											2016-07-13 17:03:14 +08:00
										 |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-25 18:12:17 +08:00
										 |  |  | 	/** | 
					
						
							|  |  |  | 	 * @deprecated moved to .buildInfo.exportsArgument | 
					
						
							|  |  |  | 	 * @returns {string} name of the exports argument | 
					
						
							|  |  |  | 	 */ | 
					
						
							| 
									
										
										
										
											2017-12-06 19:09:17 +08:00
										 |  |  | 	get exportsArgument() { | 
					
						
							| 
									
										
										
										
											2018-02-25 09:00:20 +08:00
										 |  |  | 		return (this.buildInfo && this.buildInfo.exportsArgument) || "exports"; | 
					
						
							| 
									
										
										
										
											2017-12-06 19:09:17 +08:00
										 |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-25 18:12:17 +08:00
										 |  |  | 	/** | 
					
						
							|  |  |  | 	 * @deprecated moved to .buildInfo.moduleArgument | 
					
						
							|  |  |  | 	 * @returns {string} name of the module argument | 
					
						
							|  |  |  | 	 */ | 
					
						
							| 
									
										
										
										
											2017-12-06 19:09:17 +08:00
										 |  |  | 	get moduleArgument() { | 
					
						
							| 
									
										
										
										
											2018-02-25 09:00:20 +08:00
										 |  |  | 		return (this.buildInfo && this.buildInfo.moduleArgument) || "module"; | 
					
						
							| 
									
										
										
										
											2017-12-06 19:09:17 +08:00
										 |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-25 18:38:34 +08:00
										 |  |  | 	/** | 
					
						
							|  |  |  | 	 * disconnect the module from the graph | 
					
						
							|  |  |  | 	 * @returns {void} | 
					
						
							|  |  |  | 	 */ | 
					
						
							| 
									
										
										
										
											2017-04-04 05:22:23 +08:00
										 |  |  | 	disconnect() { | 
					
						
							| 
									
										
										
										
											2017-12-01 18:07:23 +08:00
										 |  |  | 		this.hash = undefined; | 
					
						
							|  |  |  | 		this.renderedHash = undefined; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-04-04 05:22:23 +08:00
										 |  |  | 		this.reasons.length = 0; | 
					
						
							| 
									
										
										
										
											2017-11-06 20:02:35 +08:00
										 |  |  | 		this._chunks.clear(); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-04-04 05:22:23 +08:00
										 |  |  | 		this.id = null; | 
					
						
							|  |  |  | 		this.index = null; | 
					
						
							|  |  |  | 		this.index2 = null; | 
					
						
							|  |  |  | 		this.depth = null; | 
					
						
							| 
									
										
										
										
											2017-11-06 20:02:35 +08:00
										 |  |  | 		this.issuer = null; | 
					
						
							|  |  |  | 		this.profile = undefined; | 
					
						
							|  |  |  | 		this.prefetched = false; | 
					
						
							|  |  |  | 		this.built = false; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-04-04 05:22:23 +08:00
										 |  |  | 		this.used = null; | 
					
						
							|  |  |  | 		this.usedExports = null; | 
					
						
							| 
									
										
										
										
											2017-08-24 05:16:54 +08:00
										 |  |  | 		this.optimizationBailout.length = 0; | 
					
						
							| 
									
										
										
										
											2017-04-04 05:22:23 +08:00
										 |  |  | 		super.disconnect(); | 
					
						
							| 
									
										
										
										
											2017-02-13 18:26:25 +08:00
										 |  |  | 	} | 
					
						
							| 
									
										
										
										
											2013-01-31 01:49:25 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-25 18:38:34 +08:00
										 |  |  | 	/** | 
					
						
							|  |  |  | 	 * @returns {void} | 
					
						
							|  |  |  | 	 */ | 
					
						
							| 
									
										
										
										
											2017-04-04 05:22:23 +08:00
										 |  |  | 	unseal() { | 
					
						
							|  |  |  | 		this.id = null; | 
					
						
							|  |  |  | 		this.index = null; | 
					
						
							|  |  |  | 		this.index2 = null; | 
					
						
							|  |  |  | 		this.depth = null; | 
					
						
							| 
									
										
										
										
											2017-04-19 04:30:18 +08:00
										 |  |  | 		this._chunks.clear(); | 
					
						
							| 
									
										
										
										
											2017-04-04 05:22:23 +08:00
										 |  |  | 		super.unseal(); | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2013-01-31 01:49:25 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-25 18:38:34 +08:00
										 |  |  | 	/** | 
					
						
							|  |  |  | 	 * Sets the chunks to a new value | 
					
						
							|  |  |  | 	 * @protected | 
					
						
							|  |  |  | 	 * @param {Iterable<Chunk>} chunks the new chunks | 
					
						
							|  |  |  | 	 * @returns {void} | 
					
						
							|  |  |  | 	 */ | 
					
						
							| 
									
										
										
										
											2017-06-20 20:47:38 +08:00
										 |  |  | 	setChunks(chunks) { | 
					
						
							|  |  |  | 		this._chunks = new SortableSet(chunks, sortById); | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-25 18:38:34 +08:00
										 |  |  | 	/** | 
					
						
							|  |  |  | 	 * @param {Chunk} chunk added chunk | 
					
						
							|  |  |  | 	 * @returns {boolean} true, if the chunk could be added | 
					
						
							|  |  |  | 	 */ | 
					
						
							| 
									
										
										
										
											2017-04-04 05:22:23 +08:00
										 |  |  | 	addChunk(chunk) { | 
					
						
							| 
									
										
										
										
											2018-02-25 09:00:20 +08:00
										 |  |  | 		if (this._chunks.has(chunk)) return false; | 
					
						
							| 
									
										
										
										
											2017-04-19 04:30:18 +08:00
										 |  |  | 		this._chunks.add(chunk); | 
					
						
							| 
									
										
										
										
											2018-01-20 00:06:59 +08:00
										 |  |  | 		return true; | 
					
						
							| 
									
										
										
										
											2017-04-04 05:22:23 +08:00
										 |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-25 18:38:34 +08:00
										 |  |  | 	/** | 
					
						
							|  |  |  | 	 * @param {Chunk} chunk removed chunk | 
					
						
							|  |  |  | 	 * @returns {boolean} true, if the chunk could be removed | 
					
						
							|  |  |  | 	 */ | 
					
						
							| 
									
										
										
										
											2017-04-04 05:22:23 +08:00
										 |  |  | 	removeChunk(chunk) { | 
					
						
							| 
									
										
										
										
											2018-02-25 09:00:20 +08:00
										 |  |  | 		if (this._chunks.delete(chunk)) { | 
					
						
							| 
									
										
										
										
											2017-04-04 05:22:23 +08:00
										 |  |  | 			chunk.removeModule(this); | 
					
						
							| 
									
										
										
										
											2014-07-19 20:32:48 +08:00
										 |  |  | 			return true; | 
					
						
							|  |  |  | 		} | 
					
						
							| 
									
										
										
										
											2017-04-04 05:22:23 +08:00
										 |  |  | 		return false; | 
					
						
							| 
									
										
										
										
											2014-07-19 20:32:48 +08:00
										 |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-25 18:38:34 +08:00
										 |  |  | 	/** | 
					
						
							|  |  |  | 	 * @param {Chunk} chunk chunk to be tested | 
					
						
							|  |  |  | 	 * @returns {boolean} true, if the module is in a chunk | 
					
						
							|  |  |  | 	 */ | 
					
						
							| 
									
										
										
										
											2017-04-19 04:30:18 +08:00
										 |  |  | 	isInChunk(chunk) { | 
					
						
							|  |  |  | 		return this._chunks.has(chunk); | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-25 18:38:34 +08:00
										 |  |  | 	/** | 
					
						
							|  |  |  | 	 * @returns {boolean} true, if the module is entry of any chunk | 
					
						
							|  |  |  | 	 */ | 
					
						
							| 
									
										
										
										
											2018-01-20 00:06:59 +08:00
										 |  |  | 	isEntryModule() { | 
					
						
							| 
									
										
										
										
											2018-02-25 09:00:20 +08:00
										 |  |  | 		for (const chunk of this._chunks) { | 
					
						
							|  |  |  | 			if (chunk.entryModule === this) return true; | 
					
						
							| 
									
										
										
										
											2018-01-20 00:06:59 +08:00
										 |  |  | 		} | 
					
						
							|  |  |  | 		return false; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-25 18:38:34 +08:00
										 |  |  | 	/** | 
					
						
							|  |  |  | 	 * @returns {boolean} true, if the module is optional | 
					
						
							|  |  |  | 	 */ | 
					
						
							| 
									
										
										
										
											2017-11-06 20:02:35 +08:00
										 |  |  | 	get optional() { | 
					
						
							| 
									
										
										
										
											2018-02-25 09:00:20 +08:00
										 |  |  | 		return ( | 
					
						
							|  |  |  | 			this.reasons.length > 0 && | 
					
						
							|  |  |  | 			this.reasons.every(r => r.dependency && r.dependency.optional) | 
					
						
							|  |  |  | 		); | 
					
						
							| 
									
										
										
										
											2017-11-06 20:02:35 +08:00
										 |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-02 22:18:49 +08:00
										 |  |  | 	/** | 
					
						
							|  |  |  | 	 * @returns {Chunk[]} all chunks which contain the module | 
					
						
							|  |  |  | 	 */ | 
					
						
							| 
									
										
										
										
											2017-06-15 04:46:26 +08:00
										 |  |  | 	getChunks() { | 
					
						
							|  |  |  | 		return Array.from(this._chunks); | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-25 18:38:34 +08:00
										 |  |  | 	/** | 
					
						
							|  |  |  | 	 * @returns {number} the number of chunk which contain the module | 
					
						
							|  |  |  | 	 */ | 
					
						
							| 
									
										
										
										
											2017-04-19 04:30:18 +08:00
										 |  |  | 	getNumberOfChunks() { | 
					
						
							|  |  |  | 		return this._chunks.size; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-25 18:38:34 +08:00
										 |  |  | 	/** | 
					
						
							|  |  |  | 	 * @returns {Iterable<Chunk>} chunks that contain the module | 
					
						
							|  |  |  | 	 */ | 
					
						
							| 
									
										
										
										
											2017-09-22 20:13:09 +08:00
										 |  |  | 	get chunksIterable() { | 
					
						
							|  |  |  | 		return this._chunks; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-25 18:38:34 +08:00
										 |  |  | 	/** | 
					
						
							|  |  |  | 	 * @param {Module} otherModule some other module | 
					
						
							|  |  |  | 	 * @returns {boolean} true, if modules are in the same chunks | 
					
						
							|  |  |  | 	 */ | 
					
						
							| 
									
										
										
										
											2017-06-15 04:46:26 +08:00
										 |  |  | 	hasEqualsChunks(otherModule) { | 
					
						
							| 
									
										
										
										
											2018-02-25 09:00:20 +08:00
										 |  |  | 		if (this._chunks.size !== otherModule._chunks.size) return false; | 
					
						
							| 
									
										
										
										
											2017-06-19 20:13:44 +08:00
										 |  |  | 		this._chunks.sortWith(sortByDebugId); | 
					
						
							|  |  |  | 		otherModule._chunks.sortWith(sortByDebugId); | 
					
						
							| 
									
										
										
										
											2017-06-15 04:46:26 +08:00
										 |  |  | 		const a = this._chunks[Symbol.iterator](); | 
					
						
							|  |  |  | 		const b = otherModule._chunks[Symbol.iterator](); | 
					
						
							| 
									
										
										
										
											2018-02-25 09:15:37 +08:00
										 |  |  | 		// eslint-disable-next-line no-constant-condition
 | 
					
						
							| 
									
										
										
										
											2018-02-25 09:00:20 +08:00
										 |  |  | 		while (true) { | 
					
						
							| 
									
										
										
										
											2017-06-15 04:46:26 +08:00
										 |  |  | 			const aItem = a.next(); | 
					
						
							|  |  |  | 			const bItem = b.next(); | 
					
						
							| 
									
										
										
										
											2018-02-25 09:00:20 +08:00
										 |  |  | 			if (aItem.done) return true; | 
					
						
							|  |  |  | 			if (aItem.value !== bItem.value) return false; | 
					
						
							| 
									
										
										
										
											2017-06-15 04:46:26 +08:00
										 |  |  | 		} | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-25 18:38:34 +08:00
										 |  |  | 	/** | 
					
						
							|  |  |  | 	 * @param {Module=} module referenced module | 
					
						
							|  |  |  | 	 * @param {Dependency=} dependency referencing dependency | 
					
						
							|  |  |  | 	 * @param {string=} explanation some explanation | 
					
						
							|  |  |  | 	 * @returns {void} | 
					
						
							|  |  |  | 	 */ | 
					
						
							| 
									
										
										
										
											2017-11-22 01:52:35 +08:00
										 |  |  | 	addReason(module, dependency, explanation) { | 
					
						
							|  |  |  | 		this.reasons.push(new ModuleReason(module, dependency, explanation)); | 
					
						
							| 
									
										
										
										
											2014-07-19 20:32:48 +08:00
										 |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-25 18:38:34 +08:00
										 |  |  | 	/** | 
					
						
							|  |  |  | 	 * @param {Module=} module referenced module | 
					
						
							|  |  |  | 	 * @param {Dependency=} dependency referencing dependency | 
					
						
							|  |  |  | 	 * @returns {boolean} true, if the reason could be removed | 
					
						
							|  |  |  | 	 */ | 
					
						
							| 
									
										
										
										
											2017-04-04 05:22:23 +08:00
										 |  |  | 	removeReason(module, dependency) { | 
					
						
							| 
									
										
										
										
											2018-02-25 09:00:20 +08:00
										 |  |  | 		for (let i = 0; i < this.reasons.length; i++) { | 
					
						
							| 
									
										
										
										
											2017-04-04 05:22:23 +08:00
										 |  |  | 			let r = this.reasons[i]; | 
					
						
							| 
									
										
										
										
											2018-02-25 09:00:20 +08:00
										 |  |  | 			if (r.module === module && r.dependency === dependency) { | 
					
						
							| 
									
										
										
										
											2017-04-04 05:22:23 +08:00
										 |  |  | 				this.reasons.splice(i, 1); | 
					
						
							|  |  |  | 				return true; | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 		return false; | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2014-09-08 04:54:38 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-25 18:38:34 +08:00
										 |  |  | 	/** | 
					
						
							|  |  |  | 	 * @param {Chunk} chunk a chunk | 
					
						
							|  |  |  | 	 * @param {Chunk=} ignoreChunk chunk to be ignored | 
					
						
							|  |  |  | 	 * @returns {boolean} true, if the module is accessible from "chunk" when ignoring "ignoreChunk" | 
					
						
							|  |  |  | 	 */ | 
					
						
							| 
									
										
										
										
											2018-01-22 19:34:34 +08:00
										 |  |  | 	isAccessibleInChunk(chunk, ignoreChunk) { | 
					
						
							|  |  |  | 		// Check if module is accessible in ALL chunk groups
 | 
					
						
							|  |  |  | 		for (const chunkGroup of chunk.groupsIterable) { | 
					
						
							|  |  |  | 			if (!this.isAccessibleInChunkGroup(chunkGroup)) return false; | 
					
						
							| 
									
										
										
										
											2014-09-08 04:54:38 +08:00
										 |  |  | 		} | 
					
						
							| 
									
										
										
										
											2018-01-22 19:34:34 +08:00
										 |  |  | 		return true; | 
					
						
							| 
									
										
										
										
											2017-04-04 05:22:23 +08:00
										 |  |  | 	} | 
					
						
							| 
									
										
										
										
											2014-05-17 06:31:52 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-25 18:38:34 +08:00
										 |  |  | 	/** | 
					
						
							|  |  |  | 	 * @param {ChunkGroup} chunkGroup a chunk group | 
					
						
							|  |  |  | 	 * @param {Chunk=} ignoreChunk chunk to be ignored | 
					
						
							|  |  |  | 	 * @returns {boolean} true, if the module is accessible from "chunkGroup" when ignoring "ignoreChunk" | 
					
						
							|  |  |  | 	 */ | 
					
						
							| 
									
										
										
										
											2018-01-22 19:34:34 +08:00
										 |  |  | 	isAccessibleInChunkGroup(chunkGroup, ignoreChunk) { | 
					
						
							|  |  |  | 		const queue = new Set([chunkGroup]); | 
					
						
							| 
									
										
										
										
											2017-11-06 20:02:35 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-01-22 19:34:34 +08:00
										 |  |  | 		// Check if module is accessible from all items of the queue
 | 
					
						
							|  |  |  | 		queueFor: for (const cg of queue) { | 
					
						
							|  |  |  | 			// 1. If module is in one of the chunks of the group we can continue checking the next items
 | 
					
						
							|  |  |  | 			//    because it's accessible.
 | 
					
						
							|  |  |  | 			for (const chunk of cg.chunks) { | 
					
						
							|  |  |  | 				if (chunk !== ignoreChunk && chunk.containsModule(this)) | 
					
						
							|  |  |  | 					continue queueFor; | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 			// 2. If the chunk group is initial, we can break here because it's not accessible.
 | 
					
						
							|  |  |  | 			if (chunkGroup.isInitial()) return false; | 
					
						
							|  |  |  | 			// 3. Enqueue all parents because it must be accessible from ALL parents
 | 
					
						
							|  |  |  | 			for (const parent of chunkGroup.parentsIterable) queue.add(parent); | 
					
						
							| 
									
										
										
										
											2018-05-29 20:50:40 +08:00
										 |  |  | 		} | 
					
						
							| 
									
										
										
										
											2018-01-22 19:34:34 +08:00
										 |  |  | 		// When we processed through the whole list and we didn't bailout, the module is accessible
 | 
					
						
							|  |  |  | 		return true; | 
					
						
							| 
									
										
										
										
											2017-11-25 00:22:58 +08:00
										 |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-25 18:38:34 +08:00
										 |  |  | 	/** | 
					
						
							|  |  |  | 	 * @param {Chunk} chunk a chunk | 
					
						
							|  |  |  | 	 * @returns {boolean} true, if the module has any reason why "chunk" should be included | 
					
						
							|  |  |  | 	 */ | 
					
						
							| 
									
										
										
										
											2018-01-22 19:34:34 +08:00
										 |  |  | 	hasReasonForChunk(chunk) { | 
					
						
							|  |  |  | 		// check for each reason if we need the chunk
 | 
					
						
							|  |  |  | 		for (const reason of this.reasons) { | 
					
						
							|  |  |  | 			const fromModule = reason.module; | 
					
						
							|  |  |  | 			for (const originChunk of fromModule.chunksIterable) { | 
					
						
							|  |  |  | 				// return true if module this is not reachable from originChunk when ignoring cunk
 | 
					
						
							|  |  |  | 				if (!this.isAccessibleInChunk(originChunk, chunk)) return true; | 
					
						
							|  |  |  | 			} | 
					
						
							| 
									
										
										
										
											2017-06-14 00:58:14 +08:00
										 |  |  | 		} | 
					
						
							| 
									
										
										
										
											2018-01-22 19:34:34 +08:00
										 |  |  | 		return false; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-25 18:38:34 +08:00
										 |  |  | 	/** | 
					
						
							|  |  |  | 	 * @returns {boolean} true, if there are references to this module | 
					
						
							|  |  |  | 	 */ | 
					
						
							| 
									
										
										
										
											2018-01-22 19:34:34 +08:00
										 |  |  | 	hasReasons() { | 
					
						
							|  |  |  | 		return this.reasons.length > 0; | 
					
						
							| 
									
										
										
										
											2017-04-04 05:22:23 +08:00
										 |  |  | 	} | 
					
						
							| 
									
										
										
										
											2016-07-13 17:03:14 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-25 18:38:34 +08:00
										 |  |  | 	/** | 
					
						
							|  |  |  | 	 * @param {string=} exportName a name of an export | 
					
						
							|  |  |  | 	 * @returns {string | boolean} true, when no "exportName" is provided and the module is used. | 
					
						
							|  |  |  | 	 *                             false, when module or referenced export is unused. | 
					
						
							|  |  |  | 	 *                             string, the mangled export name when used. | 
					
						
							|  |  |  | 	 */ | 
					
						
							| 
									
										
										
										
											2017-04-04 05:22:23 +08:00
										 |  |  | 	isUsed(exportName) { | 
					
						
							| 
									
										
										
										
											2018-02-25 09:00:20 +08:00
										 |  |  | 		if (!exportName) return this.used !== false; | 
					
						
							|  |  |  | 		if (this.used === null || this.usedExports === null) return exportName; | 
					
						
							|  |  |  | 		if (!this.used) return false; | 
					
						
							|  |  |  | 		if (!this.usedExports) return false; | 
					
						
							|  |  |  | 		if (this.usedExports === true) return exportName; | 
					
						
							| 
									
										
										
										
											2017-04-04 05:22:23 +08:00
										 |  |  | 		let idx = this.usedExports.indexOf(exportName); | 
					
						
							| 
									
										
										
										
											2018-02-25 09:00:20 +08:00
										 |  |  | 		if (idx < 0) return false; | 
					
						
							| 
									
										
										
										
											2017-12-23 01:23:20 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 		// Mangle export name if possible
 | 
					
						
							| 
									
										
										
										
											2018-02-25 09:00:20 +08:00
										 |  |  | 		if (this.isProvided(exportName)) { | 
					
						
							| 
									
										
										
										
											2018-05-29 20:50:40 +08:00
										 |  |  | 			if (this.buildMeta.exportsType === "namespace") { | 
					
						
							| 
									
										
										
										
											2017-12-23 01:23:20 +08:00
										 |  |  | 				return Template.numberToIdentifer(idx); | 
					
						
							| 
									
										
										
										
											2018-05-29 20:50:40 +08:00
										 |  |  | 			} | 
					
						
							|  |  |  | 			if ( | 
					
						
							| 
									
										
										
										
											2018-02-25 09:00:20 +08:00
										 |  |  | 				this.buildMeta.exportsType === "named" && | 
					
						
							|  |  |  | 				!this.usedExports.includes("default") | 
					
						
							| 
									
										
										
										
											2018-05-29 20:50:40 +08:00
										 |  |  | 			) { | 
					
						
							| 
									
										
										
										
											2017-12-23 01:23:20 +08:00
										 |  |  | 				return Template.numberToIdentifer(idx); | 
					
						
							| 
									
										
										
										
											2018-05-29 20:50:40 +08:00
										 |  |  | 			} | 
					
						
							| 
									
										
										
										
											2017-12-23 01:23:20 +08:00
										 |  |  | 		} | 
					
						
							| 
									
										
										
										
											2017-04-04 05:22:23 +08:00
										 |  |  | 		return exportName; | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2016-07-13 17:03:14 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-25 18:38:34 +08:00
										 |  |  | 	/** | 
					
						
							|  |  |  | 	 * @param {string} exportName a name of an export | 
					
						
							|  |  |  | 	 * @returns {boolean | null} true, if the export is provided why the module. | 
					
						
							|  |  |  | 	 *                           null, if it's unknown. | 
					
						
							|  |  |  | 	 *                           false, if it's not provided. | 
					
						
							|  |  |  | 	 */ | 
					
						
							| 
									
										
										
										
											2017-04-04 05:22:23 +08:00
										 |  |  | 	isProvided(exportName) { | 
					
						
							| 
									
										
										
										
											2018-02-25 09:00:20 +08:00
										 |  |  | 		if (!Array.isArray(this.buildMeta.providedExports)) return null; | 
					
						
							| 
									
										
										
										
											2018-01-12 00:58:39 +08:00
										 |  |  | 		return this.buildMeta.providedExports.includes(exportName); | 
					
						
							| 
									
										
										
										
											2017-04-04 05:22:23 +08:00
										 |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-25 18:38:34 +08:00
										 |  |  | 	/** | 
					
						
							|  |  |  | 	 * @returns {string} for debugging | 
					
						
							|  |  |  | 	 */ | 
					
						
							| 
									
										
										
										
											2017-04-04 05:22:23 +08:00
										 |  |  | 	toString() { | 
					
						
							|  |  |  | 		return `Module[${this.id || this.debugId}]`; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-25 18:38:34 +08:00
										 |  |  | 	/** | 
					
						
							|  |  |  | 	 * @param {TODO} fileTimestamps timestamps of files | 
					
						
							|  |  |  | 	 * @param {TODO} contextTimestamps timestamps of directories | 
					
						
							|  |  |  | 	 * @returns {boolean} true, if the module needs a rebuild | 
					
						
							|  |  |  | 	 */ | 
					
						
							| 
									
										
										
										
											2017-04-04 05:22:23 +08:00
										 |  |  | 	needRebuild(fileTimestamps, contextTimestamps) { | 
					
						
							|  |  |  | 		return true; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-21 00:17:51 +08:00
										 |  |  | 	/** | 
					
						
							|  |  |  | 	 * @param {Hash} hash the hash used to track dependencies | 
					
						
							|  |  |  | 	 * @returns {void} | 
					
						
							|  |  |  | 	 */ | 
					
						
							| 
									
										
										
										
											2017-04-04 05:22:23 +08:00
										 |  |  | 	updateHash(hash) { | 
					
						
							| 
									
										
										
										
											2018-01-20 00:06:59 +08:00
										 |  |  | 		hash.update(`${this.id}`); | 
					
						
							| 
									
										
										
										
											2017-04-04 05:22:23 +08:00
										 |  |  | 		hash.update(JSON.stringify(this.usedExports)); | 
					
						
							|  |  |  | 		super.updateHash(hash); | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2016-12-05 06:47:19 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-25 18:38:34 +08:00
										 |  |  | 	/** | 
					
						
							|  |  |  | 	 * Sorts items in this module | 
					
						
							|  |  |  | 	 * @param {boolean=} sortChunks sort the chunks too | 
					
						
							|  |  |  | 	 * @returns {void} | 
					
						
							|  |  |  | 	 */ | 
					
						
							| 
									
										
										
										
											2017-04-19 13:57:21 +08:00
										 |  |  | 	sortItems(sortChunks) { | 
					
						
							| 
									
										
										
										
											2017-04-04 05:22:23 +08:00
										 |  |  | 		super.sortItems(); | 
					
						
							| 
									
										
										
										
											2018-02-25 09:00:20 +08:00
										 |  |  | 		if (sortChunks) this._chunks.sort(); | 
					
						
							| 
									
										
										
										
											2017-11-06 20:02:35 +08:00
										 |  |  | 		this.reasons.sort((a, b) => { | 
					
						
							| 
									
										
										
										
											2018-02-25 09:00:20 +08:00
										 |  |  | 			if (a.module === b.module) return 0; | 
					
						
							|  |  |  | 			if (!a.module) return -1; | 
					
						
							|  |  |  | 			if (!b.module) return 1; | 
					
						
							| 
									
										
										
										
											2017-11-06 20:02:35 +08:00
										 |  |  | 			return sortById(a.module, b.module); | 
					
						
							|  |  |  | 		}); | 
					
						
							| 
									
										
										
										
											2018-02-25 09:00:20 +08:00
										 |  |  | 		if (Array.isArray(this.usedExports)) { | 
					
						
							| 
									
										
										
										
											2017-06-01 20:11:04 +08:00
										 |  |  | 			this.usedExports.sort(); | 
					
						
							|  |  |  | 		} | 
					
						
							| 
									
										
										
										
											2017-04-04 05:22:23 +08:00
										 |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-25 18:38:34 +08:00
										 |  |  | 	/** | 
					
						
							|  |  |  | 	 * @returns {void} | 
					
						
							|  |  |  | 	 */ | 
					
						
							| 
									
										
										
										
											2017-04-04 05:22:23 +08:00
										 |  |  | 	unbuild() { | 
					
						
							| 
									
										
										
										
											2017-12-12 23:44:12 +08:00
										 |  |  | 		this.dependencies.length = 0; | 
					
						
							|  |  |  | 		this.blocks.length = 0; | 
					
						
							|  |  |  | 		this.variables.length = 0; | 
					
						
							| 
									
										
										
										
											2017-12-06 19:09:17 +08:00
										 |  |  | 		this.buildMeta = undefined; | 
					
						
							|  |  |  | 		this.buildInfo = undefined; | 
					
						
							| 
									
										
										
										
											2017-04-04 05:22:23 +08:00
										 |  |  | 		this.disconnect(); | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-25 18:12:17 +08:00
										 |  |  | 	/** | 
					
						
							|  |  |  | 	 * @abstract | 
					
						
							|  |  |  | 	 * @returns {string} a unique identifier of the module | 
					
						
							|  |  |  | 	 */ | 
					
						
							|  |  |  | 	identifier() { | 
					
						
							|  |  |  | 		throw new Error("Module.identifier: Must be overriden"); | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	/** | 
					
						
							|  |  |  | 	 * @abstract | 
					
						
							|  |  |  | 	 * @param {RequestShortener} requestShortener the request shortener | 
					
						
							|  |  |  | 	 * @returns {string} a user readable identifier of the module | 
					
						
							|  |  |  | 	 */ | 
					
						
							|  |  |  | 	readableIdentifier(requestShortener) { | 
					
						
							|  |  |  | 		throw new Error("Module.readableIdentifier: Must be overriden"); | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	/** | 
					
						
							|  |  |  | 	 * @abstract | 
					
						
							|  |  |  | 	 * @param {TODO} options TODO | 
					
						
							|  |  |  | 	 * @param {Compilation} compilation the compilation | 
					
						
							|  |  |  | 	 * @param {TODO} resolver TODO | 
					
						
							|  |  |  | 	 * @param {TODO} fs the file system | 
					
						
							|  |  |  | 	 * @param {function(Error=): void} callback callback function | 
					
						
							|  |  |  | 	 * @returns {void} | 
					
						
							|  |  |  | 	 */ | 
					
						
							|  |  |  | 	build(options, compilation, resolver, fs, callback) { | 
					
						
							|  |  |  | 		throw new Error("Module.build: Must be overriden"); | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	/** | 
					
						
							|  |  |  | 	 * @abstract | 
					
						
							|  |  |  | 	 * @param {DependencyTemplates} dependencyTemplates the dependency templates | 
					
						
							|  |  |  | 	 * @param {RuntimeTemplate} runtimeTemplate the runtime template | 
					
						
							|  |  |  | 	 * @param {string=} type the type of source that should be returned | 
					
						
							|  |  |  | 	 * @returns {Source} generated source | 
					
						
							|  |  |  | 	 */ | 
					
						
							|  |  |  | 	source(dependencyTemplates, runtimeTemplate, type) { | 
					
						
							|  |  |  | 		throw new Error("Module.source: Must be overriden"); | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	/** | 
					
						
							|  |  |  | 	 * @abstract | 
					
						
							|  |  |  | 	 * @returns {number} the estimated size of the module | 
					
						
							|  |  |  | 	 */ | 
					
						
							|  |  |  | 	size() { | 
					
						
							|  |  |  | 		throw new Error("Module.size: Must be overriden"); | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2018-06-06 22:37:23 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-25 18:12:17 +08:00
										 |  |  | 	/** | 
					
						
							|  |  |  | 	 * @returns {string | null} absolute path which should be used for condition matching (usually the resource path) | 
					
						
							|  |  |  | 	 */ | 
					
						
							|  |  |  | 	nameForCondition() { | 
					
						
							|  |  |  | 		return null; | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2018-06-06 22:37:23 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-25 18:12:17 +08:00
										 |  |  | 	/** | 
					
						
							|  |  |  | 	 * @param {Chunk} chunk the chunk which condition should be checked | 
					
						
							|  |  |  | 	 * @returns {boolean} true, if the chunk is ok for the module | 
					
						
							|  |  |  | 	 */ | 
					
						
							|  |  |  | 	chunkCondition(chunk) { | 
					
						
							|  |  |  | 		return true; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	/** | 
					
						
							|  |  |  | 	 * Assuming this module is in the cache. Update the (cached) module with | 
					
						
							|  |  |  | 	 * the fresh module from the factory. Usually updates internal references | 
					
						
							|  |  |  | 	 * and properties. | 
					
						
							|  |  |  | 	 * @param {Module} module fresh module | 
					
						
							|  |  |  | 	 * @returns {void} | 
					
						
							|  |  |  | 	 */ | 
					
						
							|  |  |  | 	updateCacheModule(module) { | 
					
						
							|  |  |  | 		// do nothing
 | 
					
						
							|  |  |  | 		// this method can be overriden
 | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2018-07-25 18:20:35 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	/** | 
					
						
							|  |  |  | 	 * @returns {Source | null} the original source for the module before webpack transformation | 
					
						
							|  |  |  | 	 */ | 
					
						
							|  |  |  | 	originalSource() { | 
					
						
							|  |  |  | 		return null; | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2018-07-25 18:12:17 +08:00
										 |  |  | } | 
					
						
							| 
									
										
										
										
											2017-04-04 05:22:23 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | module.exports = Module; |