| 
									
										
										
										
											2014-06-03 14:45:26 +08:00
										 |  |  | /* | 
					
						
							|  |  |  | 	MIT License http://www.opensource.org/licenses/mit-license.php
 | 
					
						
							|  |  |  | 	Author Tobias Koppers @sokra | 
					
						
							|  |  |  | */ | 
					
						
							| 
									
										
										
										
											2017-02-22 18:27:02 +08:00
										 |  |  | "use strict"; | 
					
						
							| 
									
										
										
										
											2014-06-03 14:45:26 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-02-22 18:27:02 +08:00
										 |  |  | const RawSource = require("webpack-sources").RawSource; | 
					
						
							|  |  |  | const ModuleFilenameHelpers = require("./ModuleFilenameHelpers"); | 
					
						
							| 
									
										
										
										
											2014-06-03 14:45:26 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-02-22 18:27:02 +08:00
										 |  |  | class EvalSourceMapDevToolModuleTemplatePlugin { | 
					
						
							|  |  |  | 	constructor(compilation, options) { | 
					
						
							|  |  |  | 		this.compilation = compilation; | 
					
						
							|  |  |  | 		this.sourceMapComment = options.append || "//# sourceMappingURL=[url]"; | 
					
						
							|  |  |  | 		this.moduleFilenameTemplate = options.moduleFilenameTemplate || "webpack:///[resource-path]?[hash]"; | 
					
						
							|  |  |  | 		this.options = options; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	apply(moduleTemplate) { | 
					
						
							|  |  |  | 		const self = this; | 
					
						
							|  |  |  | 		const options = this.options; | 
					
						
							|  |  |  | 		moduleTemplate.plugin("module", function(source, module) { | 
					
						
							|  |  |  | 			if(source.__EvalSourceMapDevToolData) | 
					
						
							|  |  |  | 				return source.__EvalSourceMapDevToolData; | 
					
						
							|  |  |  | 			let sourceMap; | 
					
						
							|  |  |  | 			let content; | 
					
						
							|  |  |  | 			if(source.sourceAndMap) { | 
					
						
							|  |  |  | 				const sourceAndMap = source.sourceAndMap(options); | 
					
						
							|  |  |  | 				sourceMap = sourceAndMap.map; | 
					
						
							|  |  |  | 				content = sourceAndMap.source; | 
					
						
							|  |  |  | 			} else { | 
					
						
							|  |  |  | 				sourceMap = source.map(options); | 
					
						
							|  |  |  | 				content = source.source(); | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 			if(!sourceMap) { | 
					
						
							|  |  |  | 				return source; | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			// Clone (flat) the sourcemap to ensure that the mutations below do not persist.
 | 
					
						
							|  |  |  | 			sourceMap = Object.keys(sourceMap).reduce(function(obj, key) { | 
					
						
							|  |  |  | 				obj[key] = sourceMap[key]; | 
					
						
							|  |  |  | 				return obj; | 
					
						
							|  |  |  | 			}, {}); | 
					
						
							|  |  |  | 			const modules = sourceMap.sources.map(function(source) { | 
					
						
							|  |  |  | 				const module = self.compilation.findModule(source); | 
					
						
							|  |  |  | 				return module || source; | 
					
						
							|  |  |  | 			}); | 
					
						
							|  |  |  | 			let moduleFilenames = modules.map(function(module) { | 
					
						
							|  |  |  | 				return ModuleFilenameHelpers.createFilename(module, self.moduleFilenameTemplate, this.requestShortener); | 
					
						
							|  |  |  | 			}, this); | 
					
						
							|  |  |  | 			moduleFilenames = ModuleFilenameHelpers.replaceDuplicates(moduleFilenames, function(filename, i, n) { | 
					
						
							|  |  |  | 				for(let j = 0; j < n; j++) | 
					
						
							|  |  |  | 					filename += "*"; | 
					
						
							|  |  |  | 				return filename; | 
					
						
							|  |  |  | 			}); | 
					
						
							|  |  |  | 			sourceMap.sources = moduleFilenames; | 
					
						
							|  |  |  | 			if(sourceMap.sourcesContent) { | 
					
						
							|  |  |  | 				sourceMap.sourcesContent = sourceMap.sourcesContent.map(function(content, i) { | 
					
						
							|  |  |  | 					return `${content}\n\n\n${ModuleFilenameHelpers.createFooter(modules[i], this.requestShortener)}`; | 
					
						
							|  |  |  | 				}, this); | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 			sourceMap.sourceRoot = options.sourceRoot || ""; | 
					
						
							|  |  |  | 			sourceMap.file = `${module.id}.js`; | 
					
						
							| 
									
										
										
										
											2015-01-18 06:43:25 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-02-22 18:27:02 +08:00
										 |  |  | 			const footer = self.sourceMapComment.replace(/\[url\]/g, `data:application/json;charset=utf-8;base64,${new Buffer(JSON.stringify(sourceMap), "utf8").toString("base64")}`); //eslint-disable-line
 | 
					
						
							|  |  |  | 			source.__EvalSourceMapDevToolData = new RawSource(`eval(${JSON.stringify(content + footer)});`); | 
					
						
							|  |  |  | 			return source.__EvalSourceMapDevToolData; | 
					
						
							| 
									
										
										
										
											2014-07-18 19:31:50 +08:00
										 |  |  | 		}); | 
					
						
							| 
									
										
										
										
											2017-02-22 18:27:02 +08:00
										 |  |  | 		moduleTemplate.plugin("hash", function(hash) { | 
					
						
							|  |  |  | 			hash.update("eval-source-map"); | 
					
						
							|  |  |  | 			hash.update("1"); | 
					
						
							| 
									
										
										
										
											2014-07-18 19:31:50 +08:00
										 |  |  | 		}); | 
					
						
							| 
									
										
										
										
											2017-02-22 18:27:02 +08:00
										 |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | module.exports = EvalSourceMapDevToolModuleTemplatePlugin; |