| 
									
										
										
										
											2015-05-13 06:17:06 +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-03-27 05:19:42 +08:00
										 |  |  | "use strict"; | 
					
						
							| 
									
										
										
										
											2015-05-13 06:17:06 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-03-22 19:05:58 +08:00
										 |  |  | const { OriginalSource, RawSource } = require("webpack-sources"); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-27 05:19:42 +08:00
										 |  |  | const Module = require("./Module"); | 
					
						
							| 
									
										
										
										
											2017-07-26 16:12:40 +08:00
										 |  |  | const DelegatedExportsDependency = require("./dependencies/DelegatedExportsDependency"); | 
					
						
							| 
									
										
										
										
											2018-07-30 23:08:51 +08:00
										 |  |  | const DelegatedSourceDependency = require("./dependencies/DelegatedSourceDependency"); | 
					
						
							| 
									
										
										
										
											2017-03-27 05:19:42 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-30 23:08:51 +08:00
										 |  |  | /** @typedef {import("webpack-sources").Source} Source */ | 
					
						
							| 
									
										
										
										
											2018-08-23 23:07:23 +08:00
										 |  |  | /** @typedef {import("./ChunkGraph")} ChunkGraph */ | 
					
						
							| 
									
										
										
										
											2018-07-25 18:12:17 +08:00
										 |  |  | /** @typedef {import("./Compilation")} Compilation */ | 
					
						
							|  |  |  | /** @typedef {import("./DependencyTemplates")} DependencyTemplates */ | 
					
						
							| 
									
										
										
										
											2018-07-20 22:24:35 +08:00
										 |  |  | /** @typedef {import("./Module").LibIdentOptions} LibIdentOptions */ | 
					
						
							| 
									
										
										
										
											2018-09-26 15:14:44 +08:00
										 |  |  | /** @typedef {import("./Module").NeedBuildContext} NeedBuildContext */ | 
					
						
							| 
									
										
										
										
											2018-07-18 00:57:03 +08:00
										 |  |  | /** @typedef {import("./Module").SourceContext} SourceContext */ | 
					
						
							| 
									
										
										
										
											2018-07-30 23:08:51 +08:00
										 |  |  | /** @typedef {import("./RequestShortener")} RequestShortener */ | 
					
						
							| 
									
										
										
										
											2018-07-25 18:12:17 +08:00
										 |  |  | /** @typedef {import("./RuntimeTemplate")} RuntimeTemplate */ | 
					
						
							| 
									
										
										
										
											2018-09-12 00:47:55 +08:00
										 |  |  | /** @typedef {import("./WebpackError")} WebpackError */ | 
					
						
							| 
									
										
										
										
											2018-07-30 23:08:51 +08:00
										 |  |  | /** @typedef {import("./dependencies/ModuleDependency")} ModuleDependency */ | 
					
						
							|  |  |  | /** @typedef {import("./util/createHash").Hash} Hash */ | 
					
						
							| 
									
										
										
										
											2018-05-04 00:57:02 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-27 05:19:42 +08:00
										 |  |  | class DelegatedModule extends Module { | 
					
						
							| 
									
										
										
										
											2017-07-25 19:41:02 +08:00
										 |  |  | 	constructor(sourceRequest, data, type, userRequest, originalRequest) { | 
					
						
							| 
									
										
										
										
											2018-01-31 04:40:44 +08:00
										 |  |  | 		super("javascript/dynamic", null); | 
					
						
							| 
									
										
										
										
											2017-11-06 20:02:35 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 		// Info from Factory
 | 
					
						
							| 
									
										
										
										
											2017-03-27 05:19:42 +08:00
										 |  |  | 		this.sourceRequest = sourceRequest; | 
					
						
							|  |  |  | 		this.request = data.id; | 
					
						
							| 
									
										
										
										
											2018-08-23 22:54:02 +08:00
										 |  |  | 		this.delegationType = type; | 
					
						
							| 
									
										
										
										
											2017-03-27 05:19:42 +08:00
										 |  |  | 		this.userRequest = userRequest; | 
					
						
							| 
									
										
										
										
											2017-11-06 20:02:35 +08:00
										 |  |  | 		this.originalRequest = originalRequest; | 
					
						
							| 
									
										
										
										
											2017-03-27 05:19:42 +08:00
										 |  |  | 		this.delegateData = data; | 
					
						
							| 
									
										
										
										
											2018-05-15 18:20:17 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 		// Build info
 | 
					
						
							|  |  |  | 		this.delegatedSourceDependency = undefined; | 
					
						
							| 
									
										
										
										
											2017-03-27 05:19:42 +08:00
										 |  |  | 	} | 
					
						
							| 
									
										
										
										
											2015-05-13 06:17:06 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-20 22:24:35 +08:00
										 |  |  | 	/** | 
					
						
							|  |  |  | 	 * @param {LibIdentOptions} options options | 
					
						
							|  |  |  | 	 * @returns {string | null} an identifier for library inclusion | 
					
						
							|  |  |  | 	 */ | 
					
						
							| 
									
										
										
										
											2017-05-18 00:49:09 +08:00
										 |  |  | 	libIdent(options) { | 
					
						
							| 
									
										
										
										
											2018-02-25 09:00:20 +08:00
										 |  |  | 		return typeof this.originalRequest === "string" | 
					
						
							|  |  |  | 			? this.originalRequest | 
					
						
							|  |  |  | 			: this.originalRequest.libIdent(options); | 
					
						
							| 
									
										
										
										
											2017-05-18 00:49:09 +08:00
										 |  |  | 	} | 
					
						
							| 
									
										
										
										
											2017-06-09 04:22:58 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-25 18:12:17 +08:00
										 |  |  | 	/** | 
					
						
							|  |  |  | 	 * @returns {string} a unique identifier of the module | 
					
						
							|  |  |  | 	 */ | 
					
						
							| 
									
										
										
										
											2017-03-27 05:19:42 +08:00
										 |  |  | 	identifier() { | 
					
						
							| 
									
										
										
										
											2018-02-25 09:00:20 +08:00
										 |  |  | 		return `delegated ${JSON.stringify(this.request)} from ${ | 
					
						
							|  |  |  | 			this.sourceRequest | 
					
						
							|  |  |  | 		}`;
 | 
					
						
							| 
									
										
										
										
											2017-03-27 05:19:42 +08:00
										 |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-25 18:12:17 +08:00
										 |  |  | 	/** | 
					
						
							|  |  |  | 	 * @param {RequestShortener} requestShortener the request shortener | 
					
						
							|  |  |  | 	 * @returns {string} a user readable identifier of the module | 
					
						
							|  |  |  | 	 */ | 
					
						
							|  |  |  | 	readableIdentifier(requestShortener) { | 
					
						
							| 
									
										
										
										
											2017-03-27 05:19:42 +08:00
										 |  |  | 		return `delegated ${this.userRequest} from ${this.sourceRequest}`; | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2015-05-13 06:17:06 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-25 18:38:34 +08:00
										 |  |  | 	/** | 
					
						
							| 
									
										
										
										
											2018-09-26 15:14:44 +08:00
										 |  |  | 	 * @param {NeedBuildContext} context context info | 
					
						
							|  |  |  | 	 * @param {function(WebpackError=, boolean=): void} callback callback function, returns true, if the module needs a rebuild | 
					
						
							|  |  |  | 	 * @returns {void} | 
					
						
							| 
									
										
										
										
											2018-07-25 18:38:34 +08:00
										 |  |  | 	 */ | 
					
						
							| 
									
										
										
										
											2018-09-26 15:14:44 +08:00
										 |  |  | 	needBuild(context, callback) { | 
					
						
							|  |  |  | 		return callback(null, !this.buildMeta); | 
					
						
							| 
									
										
										
										
											2017-03-27 05:19:42 +08:00
										 |  |  | 	} | 
					
						
							| 
									
										
										
										
											2015-05-13 06:17:06 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-25 18:12:17 +08:00
										 |  |  | 	/** | 
					
						
							|  |  |  | 	 * @param {TODO} options TODO | 
					
						
							|  |  |  | 	 * @param {Compilation} compilation the compilation | 
					
						
							|  |  |  | 	 * @param {TODO} resolver TODO | 
					
						
							|  |  |  | 	 * @param {TODO} fs the file system | 
					
						
							| 
									
										
										
										
											2018-09-12 00:47:55 +08:00
										 |  |  | 	 * @param {function(WebpackError=): void} callback callback function | 
					
						
							| 
									
										
										
										
											2018-07-25 18:12:17 +08:00
										 |  |  | 	 * @returns {void} | 
					
						
							|  |  |  | 	 */ | 
					
						
							| 
									
										
										
										
											2017-03-27 05:19:42 +08:00
										 |  |  | 	build(options, compilation, resolver, fs, callback) { | 
					
						
							| 
									
										
										
										
											2017-12-06 19:09:17 +08:00
										 |  |  | 		this.buildMeta = Object.assign({}, this.delegateData.buildMeta); | 
					
						
							|  |  |  | 		this.buildInfo = {}; | 
					
						
							| 
									
										
										
										
											2018-09-12 00:47:55 +08:00
										 |  |  | 		this.dependencies.length = 0; | 
					
						
							| 
									
										
										
										
											2018-05-15 18:20:17 +08:00
										 |  |  | 		this.delegatedSourceDependency = new DelegatedSourceDependency( | 
					
						
							|  |  |  | 			this.sourceRequest | 
					
						
							|  |  |  | 		); | 
					
						
							|  |  |  | 		this.addDependency(this.delegatedSourceDependency); | 
					
						
							| 
									
										
										
										
											2018-02-25 09:00:20 +08:00
										 |  |  | 		this.addDependency( | 
					
						
							| 
									
										
										
										
											2018-08-07 20:20:53 +08:00
										 |  |  | 			new DelegatedExportsDependency(this.delegateData.exports || true) | 
					
						
							| 
									
										
										
										
											2018-02-25 09:00:20 +08:00
										 |  |  | 		); | 
					
						
							| 
									
										
										
										
											2017-03-27 05:19:42 +08:00
										 |  |  | 		callback(); | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2015-05-13 06:17:06 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-25 18:12:17 +08:00
										 |  |  | 	/** | 
					
						
							| 
									
										
										
										
											2018-07-18 00:57:03 +08:00
										 |  |  | 	 * @param {SourceContext} sourceContext source context | 
					
						
							| 
									
										
										
										
											2018-07-25 18:12:17 +08:00
										 |  |  | 	 * @returns {Source} generated source | 
					
						
							|  |  |  | 	 */ | 
					
						
							| 
									
										
										
										
											2018-08-28 17:50:33 +08:00
										 |  |  | 	source({ runtimeTemplate, moduleGraph, chunkGraph }) { | 
					
						
							| 
									
										
										
										
											2018-06-08 19:20:57 +08:00
										 |  |  | 		const dep = /** @type {DelegatedSourceDependency} */ (this.dependencies[0]); | 
					
						
							| 
									
										
										
										
											2018-07-24 21:30:37 +08:00
										 |  |  | 		const sourceModule = moduleGraph.getModule(dep); | 
					
						
							| 
									
										
										
										
											2017-03-27 05:19:42 +08:00
										 |  |  | 		let str; | 
					
						
							| 
									
										
										
										
											2015-05-13 06:17:06 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-25 09:00:20 +08:00
										 |  |  | 		if (!sourceModule) { | 
					
						
							| 
									
										
										
										
											2018-07-31 03:36:46 +08:00
										 |  |  | 			str = runtimeTemplate.throwMissingModuleErrorBlock({ | 
					
						
							|  |  |  | 				request: this.sourceRequest | 
					
						
							|  |  |  | 			}); | 
					
						
							| 
									
										
										
										
											2017-03-27 05:19:42 +08:00
										 |  |  | 		} else { | 
					
						
							| 
									
										
										
										
											2018-07-25 18:12:17 +08:00
										 |  |  | 			str = `module.exports = (${runtimeTemplate.moduleExports({ | 
					
						
							| 
									
										
										
										
											2017-12-19 22:50:09 +08:00
										 |  |  | 				module: sourceModule, | 
					
						
							| 
									
										
										
										
											2018-08-28 17:50:33 +08:00
										 |  |  | 				chunkGraph, | 
					
						
							| 
									
										
										
										
											2017-12-19 22:50:09 +08:00
										 |  |  | 				request: dep.request | 
					
						
							|  |  |  | 			})})`;
 | 
					
						
							| 
									
										
										
										
											2015-05-13 06:17:06 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-08-23 22:54:02 +08:00
										 |  |  | 			switch (this.delegationType) { | 
					
						
							| 
									
										
										
										
											2017-03-27 05:19:42 +08:00
										 |  |  | 				case "require": | 
					
						
							|  |  |  | 					str += `(${JSON.stringify(this.request)})`; | 
					
						
							|  |  |  | 					break; | 
					
						
							|  |  |  | 				case "object": | 
					
						
							|  |  |  | 					str += `[${JSON.stringify(this.request)}]`; | 
					
						
							|  |  |  | 					break; | 
					
						
							|  |  |  | 			} | 
					
						
							| 
									
										
										
										
											2017-04-21 23:05:00 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 			str += ";"; | 
					
						
							| 
									
										
										
										
											2017-03-27 05:19:42 +08:00
										 |  |  | 		} | 
					
						
							| 
									
										
										
										
											2016-12-05 06:47:19 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-25 09:00:20 +08:00
										 |  |  | 		if (this.useSourceMap) { | 
					
						
							| 
									
										
										
										
											2017-03-27 05:19:42 +08:00
										 |  |  | 			return new OriginalSource(str, this.identifier()); | 
					
						
							|  |  |  | 		} else { | 
					
						
							|  |  |  | 			return new RawSource(str); | 
					
						
							| 
									
										
										
										
											2015-05-13 06:17:06 +08:00
										 |  |  | 		} | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2017-03-27 05:19:42 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-25 18:12:17 +08:00
										 |  |  | 	/** | 
					
						
							|  |  |  | 	 * @returns {number} the estimated size of the module | 
					
						
							|  |  |  | 	 */ | 
					
						
							| 
									
										
										
										
											2017-03-27 05:19:42 +08:00
										 |  |  | 	size() { | 
					
						
							|  |  |  | 		return 42; | 
					
						
							| 
									
										
										
										
											2015-05-13 06:17:06 +08:00
										 |  |  | 	} | 
					
						
							| 
									
										
										
										
											2017-09-16 03:58:59 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-21 00:17:51 +08:00
										 |  |  | 	/** | 
					
						
							|  |  |  | 	 * @param {Hash} hash the hash used to track dependencies | 
					
						
							| 
									
										
										
										
											2018-08-23 23:07:23 +08:00
										 |  |  | 	 * @param {ChunkGraph} chunkGraph the chunk graph | 
					
						
							| 
									
										
										
										
											2018-07-21 00:17:51 +08:00
										 |  |  | 	 * @returns {void} | 
					
						
							|  |  |  | 	 */ | 
					
						
							| 
									
										
										
										
											2018-08-23 23:07:23 +08:00
										 |  |  | 	updateHash(hash, chunkGraph) { | 
					
						
							| 
									
										
										
										
											2018-08-23 22:54:02 +08:00
										 |  |  | 		hash.update(this.delegationType); | 
					
						
							| 
									
										
										
										
											2017-09-18 00:05:38 +08:00
										 |  |  | 		hash.update(JSON.stringify(this.request)); | 
					
						
							| 
									
										
										
										
											2018-08-23 23:07:23 +08:00
										 |  |  | 		super.updateHash(hash, chunkGraph); | 
					
						
							| 
									
										
										
										
											2017-09-16 03:58:59 +08:00
										 |  |  | 	} | 
					
						
							| 
									
										
										
										
											2017-03-27 05:19:42 +08:00
										 |  |  | } | 
					
						
							| 
									
										
										
										
											2015-05-13 06:17:06 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-27 05:19:42 +08:00
										 |  |  | module.exports = DelegatedModule; |