| 
									
										
										
										
											2014-06-03 14:45:26 +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-24 20:19:36 +08:00
										 |  |  | "use strict"; | 
					
						
							| 
									
										
										
										
											2014-06-03 14:45:26 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-03-22 19:05:58 +08:00
										 |  |  | const { RawSource } = require("webpack-sources"); | 
					
						
							| 
									
										
										
										
											2017-01-24 20:19:36 +08:00
										 |  |  | const ModuleFilenameHelpers = require("./ModuleFilenameHelpers"); | 
					
						
							| 
									
										
										
										
											2018-04-11 05:24:22 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-11-09 05:59:19 +08:00
										 |  |  | /** @typedef {import("webpack-sources").Source} Source */ | 
					
						
							|  |  |  | /** @typedef {import("./ModuleTemplate")} ModuleTemplate */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /** @type {WeakMap<Source, Source>} */ | 
					
						
							| 
									
										
										
										
											2017-12-01 16:47:06 +08:00
										 |  |  | const cache = new WeakMap(); | 
					
						
							| 
									
										
										
										
											2017-01-24 20:19:36 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | class EvalDevToolModuleTemplatePlugin { | 
					
						
							| 
									
										
										
										
											2017-10-20 04:23:28 +08:00
										 |  |  | 	constructor(options) { | 
					
						
							| 
									
										
										
										
											2018-08-28 17:50:33 +08:00
										 |  |  | 		this.compilation = options.compilation; | 
					
						
							| 
									
										
										
										
											2017-10-20 04:23:28 +08:00
										 |  |  | 		this.sourceUrlComment = options.sourceUrlComment || "\n//# sourceURL=[url]"; | 
					
						
							| 
									
										
										
										
											2018-02-25 09:00:20 +08:00
										 |  |  | 		this.moduleFilenameTemplate = | 
					
						
							|  |  |  | 			options.moduleFilenameTemplate || | 
					
						
							|  |  |  | 			"webpack://[namespace]/[resourcePath]?[loaders]"; | 
					
						
							| 
									
										
										
										
											2017-10-20 04:23:28 +08:00
										 |  |  | 		this.namespace = options.namespace || ""; | 
					
						
							| 
									
										
										
										
											2017-01-24 20:19:36 +08:00
										 |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-11-09 05:59:19 +08:00
										 |  |  | 	/** | 
					
						
							|  |  |  | 	 * @param {ModuleTemplate} moduleTemplate the module template | 
					
						
							|  |  |  | 	 * @returns {void} | 
					
						
							|  |  |  | 	 */ | 
					
						
							| 
									
										
										
										
											2017-01-24 20:19:36 +08:00
										 |  |  | 	apply(moduleTemplate) { | 
					
						
							| 
									
										
										
										
											2018-02-25 09:00:20 +08:00
										 |  |  | 		moduleTemplate.hooks.module.tap( | 
					
						
							|  |  |  | 			"EvalDevToolModuleTemplatePlugin", | 
					
						
							|  |  |  | 			(source, module) => { | 
					
						
							|  |  |  | 				const cacheEntry = cache.get(source); | 
					
						
							|  |  |  | 				if (cacheEntry !== undefined) return cacheEntry; | 
					
						
							|  |  |  | 				const content = source.source(); | 
					
						
							|  |  |  | 				const str = ModuleFilenameHelpers.createFilename( | 
					
						
							|  |  |  | 					module, | 
					
						
							|  |  |  | 					{ | 
					
						
							|  |  |  | 						moduleFilenameTemplate: this.moduleFilenameTemplate, | 
					
						
							|  |  |  | 						namespace: this.namespace | 
					
						
							|  |  |  | 					}, | 
					
						
							| 
									
										
										
										
											2018-08-28 17:50:33 +08:00
										 |  |  | 					{ | 
					
						
							|  |  |  | 						requestShortener: moduleTemplate.runtimeTemplate.requestShortener, | 
					
						
							|  |  |  | 						chunkGraph: this.compilation.chunkGraph | 
					
						
							|  |  |  | 					} | 
					
						
							| 
									
										
										
										
											2018-02-25 09:00:20 +08:00
										 |  |  | 				); | 
					
						
							|  |  |  | 				const footer = | 
					
						
							|  |  |  | 					"\n" + | 
					
						
							|  |  |  | 					this.sourceUrlComment.replace( | 
					
						
							|  |  |  | 						/\[url\]/g, | 
					
						
							|  |  |  | 						encodeURI(str) | 
					
						
							|  |  |  | 							.replace(/%2F/g, "/") | 
					
						
							|  |  |  | 							.replace(/%20/g, "_") | 
					
						
							|  |  |  | 							.replace(/%5E/g, "^") | 
					
						
							|  |  |  | 							.replace(/%5C/g, "\\") | 
					
						
							|  |  |  | 							.replace(/^\//, "") | 
					
						
							|  |  |  | 					); | 
					
						
							|  |  |  | 				const result = new RawSource( | 
					
						
							|  |  |  | 					`eval(${JSON.stringify(content + footer)});` | 
					
						
							|  |  |  | 				); | 
					
						
							|  |  |  | 				cache.set(source, result); | 
					
						
							|  |  |  | 				return result; | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 		); | 
					
						
							| 
									
										
										
										
											2017-12-14 04:35:39 +08:00
										 |  |  | 		moduleTemplate.hooks.hash.tap("EvalDevToolModuleTemplatePlugin", hash => { | 
					
						
							| 
									
										
										
										
											2017-01-24 20:19:36 +08:00
										 |  |  | 			hash.update("EvalDevToolModuleTemplatePlugin"); | 
					
						
							|  |  |  | 			hash.update("2"); | 
					
						
							|  |  |  | 		}); | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2014-06-03 14:45:26 +08:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-01-24 20:19:36 +08:00
										 |  |  | module.exports = EvalDevToolModuleTemplatePlugin; |