| 
									
										
										
										
											2014-06-03 14:45:26 +08:00
										 |  |  | /* | 
					
						
							|  |  |  | 	MIT License http://www.opensource.org/licenses/mit-license.php
 | 
					
						
							|  |  |  | 	Author Tobias Koppers @sokra | 
					
						
							|  |  |  | */ | 
					
						
							| 
									
										
										
										
											2017-01-24 20:19:36 +08:00
										 |  |  | "use strict"; | 
					
						
							| 
									
										
										
										
											2014-06-03 14:45:26 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-01-24 20:19:36 +08:00
										 |  |  | const RawSource = require("webpack-sources").RawSource; | 
					
						
							|  |  |  | const ModuleFilenameHelpers = require("./ModuleFilenameHelpers"); | 
					
						
							| 
									
										
										
										
											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) { | 
					
						
							|  |  |  | 		this.sourceUrlComment = options.sourceUrlComment || "\n//# sourceURL=[url]"; | 
					
						
							|  |  |  | 		this.moduleFilenameTemplate = options.moduleFilenameTemplate || "webpack://[namespace]/[resourcePath]?[loaders]"; | 
					
						
							|  |  |  | 		this.namespace = options.namespace || ""; | 
					
						
							| 
									
										
										
										
											2017-01-24 20:19:36 +08:00
										 |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	apply(moduleTemplate) { | 
					
						
							| 
									
										
										
										
											2017-12-14 04:35:39 +08:00
										 |  |  | 		moduleTemplate.hooks.module.tap("EvalDevToolModuleTemplatePlugin", (source, module) => { | 
					
						
							| 
									
										
										
										
											2017-12-01 16:47:06 +08:00
										 |  |  | 			const cacheEntry = cache.get(source); | 
					
						
							|  |  |  | 			if(cacheEntry !== undefined) return cacheEntry; | 
					
						
							| 
									
										
										
										
											2017-01-24 20:19:36 +08:00
										 |  |  | 			const content = source.source(); | 
					
						
							| 
									
										
										
										
											2017-10-19 06:24:59 +08:00
										 |  |  | 			const str = ModuleFilenameHelpers.createFilename(module, { | 
					
						
							|  |  |  | 				moduleFilenameTemplate: this.moduleFilenameTemplate, | 
					
						
							|  |  |  | 				namespace: this.namespace | 
					
						
							| 
									
										
										
										
											2017-12-07 17:31:00 +08:00
										 |  |  | 			}, moduleTemplate.runtimeTemplate.requestShortener); | 
					
						
							| 
									
										
										
										
											2017-01-24 20:19:36 +08:00
										 |  |  | 			const footer = ["\n", | 
					
						
							| 
									
										
										
										
											2017-12-07 17:31:00 +08:00
										 |  |  | 				ModuleFilenameHelpers.createFooter(module, moduleTemplate.runtimeTemplate.requestShortener), | 
					
						
							| 
									
										
										
										
											2017-02-08 16:15:28 +08:00
										 |  |  | 				this.sourceUrlComment.replace(/\[url\]/g, encodeURI(str).replace(/%2F/g, "/").replace(/%20/g, "_").replace(/%5E/g, "^").replace(/%5C/g, "\\").replace(/^\//, "")) | 
					
						
							| 
									
										
										
										
											2017-01-24 20:19:36 +08:00
										 |  |  | 			].join("\n"); | 
					
						
							| 
									
										
										
										
											2017-12-01 16:47:06 +08:00
										 |  |  | 			const result = new RawSource(`eval(${JSON.stringify(content + footer)});`); | 
					
						
							|  |  |  | 			cache.set(source, result); | 
					
						
							|  |  |  | 			return result; | 
					
						
							| 
									
										
										
										
											2017-01-24 20:19:36 +08:00
										 |  |  | 		}); | 
					
						
							| 
									
										
										
										
											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; |