| 
									
										
										
										
											2014-06-03 14:45:26 +08:00
										 |  |  | /* | 
					
						
							|  |  |  | 	MIT License http://www.opensource.org/licenses/mit-license.php
 | 
					
						
							|  |  |  | 	Author Tobias Koppers @sokra | 
					
						
							|  |  |  | */ | 
					
						
							|  |  |  | var RawSource = require("webpack-core/lib/RawSource"); | 
					
						
							| 
									
										
										
										
											2014-07-18 19:31:50 +08:00
										 |  |  | var ModuleFilenameHelpers = require("./ModuleFilenameHelpers"); | 
					
						
							| 
									
										
										
										
											2014-06-03 14:45:26 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-04-05 07:52:30 +08:00
										 |  |  | function EvalSourceMapDevToolModuleTemplatePlugin(compilation, options, sourceMapComment, moduleFilenameTemplate) { | 
					
						
							| 
									
										
										
										
											2014-06-03 14:45:26 +08:00
										 |  |  | 	this.compilation = compilation; | 
					
						
							|  |  |  | 	this.sourceMapComment = sourceMapComment || "//@ sourceMappingURL=[url]"; | 
					
						
							| 
									
										
										
										
											2014-07-18 19:31:50 +08:00
										 |  |  | 	this.moduleFilenameTemplate = moduleFilenameTemplate || "webpack:///[resource-path]?[hash]"; | 
					
						
							| 
									
										
										
										
											2015-04-05 07:52:30 +08:00
										 |  |  | 	this.options = options; | 
					
						
							| 
									
										
										
										
											2014-06-03 14:45:26 +08:00
										 |  |  | } | 
					
						
							|  |  |  | module.exports = EvalSourceMapDevToolModuleTemplatePlugin; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | EvalSourceMapDevToolModuleTemplatePlugin.prototype.apply = function(moduleTemplate) { | 
					
						
							|  |  |  | 	var self = this; | 
					
						
							| 
									
										
										
										
											2015-04-05 07:52:30 +08:00
										 |  |  | 	var options = this.options; | 
					
						
							| 
									
										
										
										
											2015-04-24 05:55:50 +08:00
										 |  |  | 	moduleTemplate.plugin("module", function(source, module) { | 
					
						
							| 
									
										
										
										
											2015-07-16 06:19:23 +08:00
										 |  |  | 		if(source.__EvalSourceMapDevToolData) | 
					
						
							| 
									
										
										
										
											2015-04-24 05:55:50 +08:00
										 |  |  | 			return source.__EvalSourceMapDevToolData; | 
					
						
							| 
									
										
										
										
											2014-12-29 07:16:58 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-07-16 06:19:23 +08:00
										 |  |  | 		if(source.sourceAndMap) { | 
					
						
							| 
									
										
										
										
											2015-04-05 07:52:30 +08:00
										 |  |  | 			var sourceAndMap = source.sourceAndMap(options); | 
					
						
							| 
									
										
										
										
											2015-04-03 18:38:56 +08:00
										 |  |  | 			var sourceMap = sourceAndMap.map; | 
					
						
							|  |  |  | 			var content = sourceAndMap.source; | 
					
						
							|  |  |  | 		} else { | 
					
						
							| 
									
										
										
										
											2015-04-05 07:52:30 +08:00
										 |  |  | 			var sourceMap = source.map(options); | 
					
						
							| 
									
										
										
										
											2015-04-03 18:38:56 +08:00
										 |  |  | 			var content = source.source(); | 
					
						
							|  |  |  | 		} | 
					
						
							| 
									
										
										
										
											2015-07-16 06:19:23 +08:00
										 |  |  | 		if(!sourceMap) { | 
					
						
							| 
									
										
										
										
											2014-06-03 14:45:26 +08:00
										 |  |  | 			return source; | 
					
						
							|  |  |  | 		} | 
					
						
							| 
									
										
										
										
											2015-01-18 06:43:25 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 		// 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; | 
					
						
							|  |  |  | 		}, {}); | 
					
						
							| 
									
										
										
										
											2014-07-18 19:31:50 +08:00
										 |  |  | 		var modules = sourceMap.sources.map(function(source) { | 
					
						
							|  |  |  | 			var module = self.compilation.findModule(source); | 
					
						
							|  |  |  | 			return module || source; | 
					
						
							|  |  |  | 		}); | 
					
						
							|  |  |  | 		var moduleFilenames = modules.map(function(module) { | 
					
						
							|  |  |  | 			return ModuleFilenameHelpers.createFilename(module, self.moduleFilenameTemplate, this.requestShortener); | 
					
						
							|  |  |  | 		}, this); | 
					
						
							|  |  |  | 		moduleFilenames = ModuleFilenameHelpers.replaceDuplicates(moduleFilenames, function(filename, i, n) { | 
					
						
							| 
									
										
										
										
											2015-07-16 06:19:23 +08:00
										 |  |  | 			for(var j = 0; j < n; j++) | 
					
						
							| 
									
										
										
										
											2014-07-18 19:31:50 +08:00
										 |  |  | 				filename += "*"; | 
					
						
							|  |  |  | 			return filename; | 
					
						
							|  |  |  | 		}); | 
					
						
							|  |  |  | 		sourceMap.sources = moduleFilenames; | 
					
						
							| 
									
										
										
										
											2015-07-16 06:19:23 +08:00
										 |  |  | 		if(sourceMap.sourcesContent) { | 
					
						
							| 
									
										
										
										
											2014-07-18 19:31:50 +08:00
										 |  |  | 			sourceMap.sourcesContent = sourceMap.sourcesContent.map(function(content, i) { | 
					
						
							|  |  |  | 				return content + "\n\n\n" + ModuleFilenameHelpers.createFooter(modules[i], this.requestShortener); | 
					
						
							|  |  |  | 			}, this); | 
					
						
							| 
									
										
										
										
											2014-06-03 14:45:26 +08:00
										 |  |  | 		} | 
					
						
							| 
									
										
										
										
											2014-07-18 19:31:50 +08:00
										 |  |  | 		sourceMap.sourceRoot = ""; | 
					
						
							|  |  |  | 		sourceMap.file = module.id + ".js"; | 
					
						
							| 
									
										
										
										
											2014-06-03 14:45:26 +08:00
										 |  |  | 		var footer = self.sourceMapComment.replace(/\[url\]/g, "data:application/json;base64," + new Buffer(JSON.stringify(sourceMap)).toString("base64")); | 
					
						
							| 
									
										
										
										
											2015-07-13 06:20:09 +08:00
										 |  |  | 		source.__EvalSourceMapDevToolData = new RawSource("eval(" + JSON.stringify(content + footer) + ");"); | 
					
						
							| 
									
										
										
										
											2015-04-24 05:55:50 +08:00
										 |  |  | 		return source.__EvalSourceMapDevToolData; | 
					
						
							| 
									
										
										
										
											2014-06-03 14:45:26 +08:00
										 |  |  | 	}); | 
					
						
							|  |  |  | 	moduleTemplate.plugin("hash", function(hash) { | 
					
						
							|  |  |  | 		hash.update("eval-source-map"); | 
					
						
							|  |  |  | 		hash.update("1"); | 
					
						
							|  |  |  | 	}); | 
					
						
							|  |  |  | }; |