| 
									
										
										
										
											2013-03-26 23:54:41 +08:00
										 |  |  | /* | 
					
						
							|  |  |  | 	MIT License http://www.opensource.org/licenses/mit-license.php
 | 
					
						
							|  |  |  | 	Author Tobias Koppers @sokra | 
					
						
							|  |  |  | */ | 
					
						
							| 
									
										
										
										
											2017-04-06 20:46:40 +08:00
										 |  |  | "use strict"; | 
					
						
							| 
									
										
										
										
											2013-03-26 23:54:41 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-04-06 20:46:40 +08:00
										 |  |  | const path = require("path"); | 
					
						
							| 
									
										
										
										
											2018-03-22 19:05:58 +08:00
										 |  |  | const { ConcatSource, RawSource } = require("webpack-sources"); | 
					
						
							| 
									
										
										
										
											2017-04-06 20:46:40 +08:00
										 |  |  | const ModuleFilenameHelpers = require("./ModuleFilenameHelpers"); | 
					
						
							|  |  |  | const SourceMapDevToolModuleOptionsPlugin = require("./SourceMapDevToolModuleOptionsPlugin"); | 
					
						
							| 
									
										
										
										
											2017-11-23 17:59:29 +08:00
										 |  |  | const createHash = require("./util/createHash"); | 
					
						
							| 
									
										
										
										
											2017-04-06 20:46:40 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-10-29 17:19:28 +08:00
										 |  |  | const validateOptions = require("schema-utils"); | 
					
						
							| 
									
										
										
										
											2017-11-11 20:05:55 +08:00
										 |  |  | const schema = require("../schemas/plugins/SourceMapDevToolPlugin.json"); | 
					
						
							| 
									
										
										
										
											2017-10-28 05:23:38 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-05-19 20:02:31 +08:00
										 |  |  | const assetsCache = new WeakMap(); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-11-08 18:32:05 +08:00
										 |  |  | const getTaskForFile = (file, chunk, options, compilation) => { | 
					
						
							| 
									
										
										
										
											2017-07-17 13:15:42 +08:00
										 |  |  | 	const asset = compilation.assets[file]; | 
					
						
							| 
									
										
										
										
											2018-05-19 20:02:31 +08:00
										 |  |  | 	const cache = assetsCache.get(asset); | 
					
						
							|  |  |  | 	if (cache && cache.file === file) { | 
					
						
							|  |  |  | 		for (const cachedFile in cache.assets) { | 
					
						
							|  |  |  | 			compilation.assets[cachedFile] = cache.assets[cachedFile]; | 
					
						
							| 
									
										
										
										
											2018-02-25 09:00:20 +08:00
										 |  |  | 			if (cachedFile !== file) chunk.files.push(cachedFile); | 
					
						
							| 
									
										
										
										
											2017-07-17 13:15:42 +08:00
										 |  |  | 		} | 
					
						
							|  |  |  | 		return; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	let source, sourceMap; | 
					
						
							| 
									
										
										
										
											2018-02-25 09:00:20 +08:00
										 |  |  | 	if (asset.sourceAndMap) { | 
					
						
							| 
									
										
										
										
											2017-07-17 13:15:42 +08:00
										 |  |  | 		const sourceAndMap = asset.sourceAndMap(options); | 
					
						
							|  |  |  | 		sourceMap = sourceAndMap.map; | 
					
						
							|  |  |  | 		source = sourceAndMap.source; | 
					
						
							|  |  |  | 	} else { | 
					
						
							|  |  |  | 		sourceMap = asset.map(options); | 
					
						
							|  |  |  | 		source = asset.source(); | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2018-02-25 09:00:20 +08:00
										 |  |  | 	if (sourceMap) { | 
					
						
							| 
									
										
										
										
											2017-07-17 13:15:42 +08:00
										 |  |  | 		return { | 
					
						
							|  |  |  | 			chunk, | 
					
						
							|  |  |  | 			file, | 
					
						
							|  |  |  | 			asset, | 
					
						
							|  |  |  | 			source, | 
					
						
							| 
									
										
										
										
											2017-07-18 20:28:12 +08:00
										 |  |  | 			sourceMap, | 
					
						
							|  |  |  | 			modules: undefined | 
					
						
							| 
									
										
										
										
											2017-07-17 13:15:42 +08:00
										 |  |  | 		}; | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2017-11-08 18:32:05 +08:00
										 |  |  | }; | 
					
						
							| 
									
										
										
										
											2017-07-17 13:15:42 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-04-06 20:46:40 +08:00
										 |  |  | class SourceMapDevToolPlugin { | 
					
						
							| 
									
										
										
										
											2018-07-06 17:19:30 +08:00
										 |  |  | 	constructor(options = {}) { | 
					
						
							|  |  |  | 		validateOptions(schema, options, "SourceMap DevTool Plugin"); | 
					
						
							| 
									
										
										
										
											2017-10-28 05:23:38 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-04-06 20:46:40 +08:00
										 |  |  | 		this.sourceMapFilename = options.filename; | 
					
						
							| 
									
										
										
										
											2018-02-25 09:00:20 +08:00
										 |  |  | 		this.sourceMappingURLComment = | 
					
						
							|  |  |  | 			options.append === false | 
					
						
							|  |  |  | 				? false | 
					
						
							|  |  |  | 				: options.append || "\n//# sourceMappingURL=[url]"; | 
					
						
							|  |  |  | 		this.moduleFilenameTemplate = | 
					
						
							|  |  |  | 			options.moduleFilenameTemplate || "webpack://[namespace]/[resourcePath]"; | 
					
						
							|  |  |  | 		this.fallbackModuleFilenameTemplate = | 
					
						
							|  |  |  | 			options.fallbackModuleFilenameTemplate || | 
					
						
							|  |  |  | 			"webpack://[namespace]/[resourcePath]?[hash]"; | 
					
						
							| 
									
										
										
										
											2017-10-20 04:23:28 +08:00
										 |  |  | 		this.namespace = options.namespace || ""; | 
					
						
							| 
									
										
										
										
											2017-04-06 20:46:40 +08:00
										 |  |  | 		this.options = options; | 
					
						
							| 
									
										
										
										
											2015-02-19 08:11:29 +08:00
										 |  |  | 	} | 
					
						
							| 
									
										
										
										
											2017-04-06 20:46:40 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	apply(compiler) { | 
					
						
							|  |  |  | 		const sourceMapFilename = this.sourceMapFilename; | 
					
						
							|  |  |  | 		const sourceMappingURLComment = this.sourceMappingURLComment; | 
					
						
							|  |  |  | 		const moduleFilenameTemplate = this.moduleFilenameTemplate; | 
					
						
							| 
									
										
										
										
											2017-10-20 04:23:28 +08:00
										 |  |  | 		const namespace = this.namespace; | 
					
						
							| 
									
										
										
										
											2017-04-06 20:46:40 +08:00
										 |  |  | 		const fallbackModuleFilenameTemplate = this.fallbackModuleFilenameTemplate; | 
					
						
							| 
									
										
										
										
											2017-12-01 17:44:22 +08:00
										 |  |  | 		const requestShortener = compiler.requestShortener; | 
					
						
							| 
									
										
										
										
											2017-04-06 20:46:40 +08:00
										 |  |  | 		const options = this.options; | 
					
						
							|  |  |  | 		options.test = options.test || /\.(js|css)($|\?)/i; | 
					
						
							| 
									
										
										
										
											2017-07-17 13:15:42 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-25 09:00:20 +08:00
										 |  |  | 		const matchObject = ModuleFilenameHelpers.matchObject.bind( | 
					
						
							|  |  |  | 			undefined, | 
					
						
							|  |  |  | 			options | 
					
						
							|  |  |  | 		); | 
					
						
							| 
									
										
										
										
											2017-07-17 13:15:42 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-25 09:00:20 +08:00
										 |  |  | 		compiler.hooks.compilation.tap("SourceMapDevToolPlugin", compilation => { | 
					
						
							| 
									
										
										
										
											2017-04-06 20:46:40 +08:00
										 |  |  | 			new SourceMapDevToolModuleOptionsPlugin(options).apply(compilation); | 
					
						
							| 
									
										
										
										
											2017-07-17 13:15:42 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-25 09:00:20 +08:00
										 |  |  | 			compilation.hooks.afterOptimizeChunkAssets.tap( | 
					
						
							|  |  |  | 				{ | 
					
						
							|  |  |  | 					name: "SourceMapDevToolPlugin", | 
					
						
							|  |  |  | 					context: true | 
					
						
							|  |  |  | 				}, | 
					
						
							|  |  |  | 				(context, chunks) => { | 
					
						
							|  |  |  | 					const moduleToSourceNameMapping = new Map(); | 
					
						
							|  |  |  | 					const reportProgress = | 
					
						
							|  |  |  | 						context && context.reportProgress | 
					
						
							|  |  |  | 							? context.reportProgress | 
					
						
							|  |  |  | 							: () => {}; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 					const files = []; | 
					
						
							|  |  |  | 					for (const chunk of chunks) { | 
					
						
							|  |  |  | 						for (const file of chunk.files) { | 
					
						
							|  |  |  | 							if (matchObject(file)) { | 
					
						
							|  |  |  | 								files.push({ | 
					
						
							|  |  |  | 									file, | 
					
						
							|  |  |  | 									chunk | 
					
						
							|  |  |  | 								}); | 
					
						
							|  |  |  | 							} | 
					
						
							| 
									
										
										
										
											2017-07-07 18:51:55 +08:00
										 |  |  | 						} | 
					
						
							| 
									
										
										
										
											2018-01-22 20:52:43 +08:00
										 |  |  | 					} | 
					
						
							| 
									
										
										
										
											2017-07-17 13:15:42 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-25 09:00:20 +08:00
										 |  |  | 					reportProgress(0.0); | 
					
						
							|  |  |  | 					const tasks = []; | 
					
						
							|  |  |  | 					files.forEach(({ file, chunk }, idx) => { | 
					
						
							|  |  |  | 						reportProgress( | 
					
						
							| 
									
										
										
										
											2018-05-29 22:14:16 +08:00
										 |  |  | 							(0.5 * idx) / files.length, | 
					
						
							| 
									
										
										
										
											2018-02-25 09:00:20 +08:00
										 |  |  | 							file, | 
					
						
							|  |  |  | 							"generate SourceMap" | 
					
						
							|  |  |  | 						); | 
					
						
							|  |  |  | 						const task = getTaskForFile(file, chunk, options, compilation); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 						if (task) { | 
					
						
							|  |  |  | 							const modules = task.sourceMap.sources.map(source => { | 
					
						
							|  |  |  | 								const module = compilation.findModule(source); | 
					
						
							|  |  |  | 								return module || source; | 
					
						
							|  |  |  | 							}); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 							for (let idx = 0; idx < modules.length; idx++) { | 
					
						
							|  |  |  | 								const module = modules[idx]; | 
					
						
							|  |  |  | 								if (!moduleToSourceNameMapping.get(module)) { | 
					
						
							|  |  |  | 									moduleToSourceNameMapping.set( | 
					
						
							|  |  |  | 										module, | 
					
						
							|  |  |  | 										ModuleFilenameHelpers.createFilename( | 
					
						
							|  |  |  | 											module, | 
					
						
							|  |  |  | 											{ | 
					
						
							|  |  |  | 												moduleFilenameTemplate: moduleFilenameTemplate, | 
					
						
							|  |  |  | 												namespace: namespace | 
					
						
							|  |  |  | 											}, | 
					
						
							|  |  |  | 											requestShortener | 
					
						
							|  |  |  | 										) | 
					
						
							|  |  |  | 									); | 
					
						
							|  |  |  | 								} | 
					
						
							| 
									
										
										
										
											2018-01-04 22:41:26 +08:00
										 |  |  | 							} | 
					
						
							| 
									
										
										
										
											2018-02-25 09:00:20 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 							task.modules = modules; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 							tasks.push(task); | 
					
						
							| 
									
										
										
										
											2018-01-04 22:41:26 +08:00
										 |  |  | 						} | 
					
						
							| 
									
										
										
										
											2018-02-25 09:00:20 +08:00
										 |  |  | 					}); | 
					
						
							| 
									
										
										
										
											2018-01-04 22:41:26 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-25 09:00:20 +08:00
										 |  |  | 					reportProgress(0.5, "resolve sources"); | 
					
						
							|  |  |  | 					const usedNamesSet = new Set(moduleToSourceNameMapping.values()); | 
					
						
							|  |  |  | 					const conflictDetectionSet = new Set(); | 
					
						
							| 
									
										
										
										
											2018-01-04 22:41:26 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-25 09:00:20 +08:00
										 |  |  | 					// all modules in defined order (longest identifier first)
 | 
					
						
							|  |  |  | 					const allModules = Array.from(moduleToSourceNameMapping.keys()).sort( | 
					
						
							|  |  |  | 						(a, b) => { | 
					
						
							|  |  |  | 							const ai = typeof a === "string" ? a : a.identifier(); | 
					
						
							|  |  |  | 							const bi = typeof b === "string" ? b : b.identifier(); | 
					
						
							|  |  |  | 							return ai.length - bi.length; | 
					
						
							|  |  |  | 						} | 
					
						
							|  |  |  | 					); | 
					
						
							| 
									
										
										
										
											2018-01-04 22:41:26 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-25 09:00:20 +08:00
										 |  |  | 					// find modules with conflicting source names
 | 
					
						
							|  |  |  | 					for (let idx = 0; idx < allModules.length; idx++) { | 
					
						
							|  |  |  | 						const module = allModules[idx]; | 
					
						
							|  |  |  | 						let sourceName = moduleToSourceNameMapping.get(module); | 
					
						
							|  |  |  | 						let hasName = conflictDetectionSet.has(sourceName); | 
					
						
							|  |  |  | 						if (!hasName) { | 
					
						
							|  |  |  | 							conflictDetectionSet.add(sourceName); | 
					
						
							|  |  |  | 							continue; | 
					
						
							|  |  |  | 						} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 						// try the fallback name first
 | 
					
						
							|  |  |  | 						sourceName = ModuleFilenameHelpers.createFilename( | 
					
						
							|  |  |  | 							module, | 
					
						
							|  |  |  | 							{ | 
					
						
							|  |  |  | 								moduleFilenameTemplate: fallbackModuleFilenameTemplate, | 
					
						
							|  |  |  | 								namespace: namespace | 
					
						
							|  |  |  | 							}, | 
					
						
							|  |  |  | 							requestShortener | 
					
						
							|  |  |  | 						); | 
					
						
							|  |  |  | 						hasName = usedNamesSet.has(sourceName); | 
					
						
							|  |  |  | 						if (!hasName) { | 
					
						
							|  |  |  | 							moduleToSourceNameMapping.set(module, sourceName); | 
					
						
							|  |  |  | 							usedNamesSet.add(sourceName); | 
					
						
							|  |  |  | 							continue; | 
					
						
							|  |  |  | 						} | 
					
						
							| 
									
										
										
										
											2017-07-07 18:51:55 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-25 09:00:20 +08:00
										 |  |  | 						// elsewise just append stars until we have a valid name
 | 
					
						
							|  |  |  | 						while (hasName) { | 
					
						
							|  |  |  | 							sourceName += "*"; | 
					
						
							|  |  |  | 							hasName = usedNamesSet.has(sourceName); | 
					
						
							|  |  |  | 						} | 
					
						
							| 
									
										
										
										
											2017-07-07 18:51:55 +08:00
										 |  |  | 						moduleToSourceNameMapping.set(module, sourceName); | 
					
						
							|  |  |  | 						usedNamesSet.add(sourceName); | 
					
						
							| 
									
										
										
										
											2017-07-08 18:25:52 +08:00
										 |  |  | 					} | 
					
						
							| 
									
										
										
										
											2018-02-25 09:00:20 +08:00
										 |  |  | 					tasks.forEach((task, index) => { | 
					
						
							|  |  |  | 						reportProgress( | 
					
						
							| 
									
										
										
										
											2018-05-29 22:14:16 +08:00
										 |  |  | 							0.5 + (0.5 * index) / tasks.length, | 
					
						
							| 
									
										
										
										
											2018-02-25 09:00:20 +08:00
										 |  |  | 							task.file, | 
					
						
							|  |  |  | 							"attach SourceMap" | 
					
						
							|  |  |  | 						); | 
					
						
							| 
									
										
										
										
											2018-05-19 20:02:31 +08:00
										 |  |  | 						const assets = Object.create(null); | 
					
						
							| 
									
										
										
										
											2018-02-25 09:00:20 +08:00
										 |  |  | 						const chunk = task.chunk; | 
					
						
							|  |  |  | 						const file = task.file; | 
					
						
							|  |  |  | 						const asset = task.asset; | 
					
						
							|  |  |  | 						const sourceMap = task.sourceMap; | 
					
						
							|  |  |  | 						const source = task.source; | 
					
						
							|  |  |  | 						const modules = task.modules; | 
					
						
							|  |  |  | 						const moduleFilenames = modules.map(m => | 
					
						
							|  |  |  | 							moduleToSourceNameMapping.get(m) | 
					
						
							|  |  |  | 						); | 
					
						
							|  |  |  | 						sourceMap.sources = moduleFilenames; | 
					
						
							|  |  |  | 						if (options.noSources) { | 
					
						
							|  |  |  | 							sourceMap.sourcesContent = undefined; | 
					
						
							| 
									
										
										
										
											2017-04-06 20:46:40 +08:00
										 |  |  | 						} | 
					
						
							| 
									
										
										
										
											2018-02-25 09:00:20 +08:00
										 |  |  | 						sourceMap.sourceRoot = options.sourceRoot || ""; | 
					
						
							|  |  |  | 						sourceMap.file = file; | 
					
						
							| 
									
										
										
										
											2018-05-19 20:02:31 +08:00
										 |  |  | 						assetsCache.set(asset, { file, assets }); | 
					
						
							| 
									
										
										
										
											2018-02-25 09:00:20 +08:00
										 |  |  | 						let currentSourceMappingURLComment = sourceMappingURLComment; | 
					
						
							|  |  |  | 						if ( | 
					
						
							|  |  |  | 							currentSourceMappingURLComment !== false && | 
					
						
							|  |  |  | 							/\.css($|\?)/i.test(file) | 
					
						
							|  |  |  | 						) { | 
					
						
							|  |  |  | 							currentSourceMappingURLComment = currentSourceMappingURLComment.replace( | 
					
						
							|  |  |  | 								/^\n\/\/(.*)$/, | 
					
						
							|  |  |  | 								"\n/*$1*/" | 
					
						
							|  |  |  | 							); | 
					
						
							| 
									
										
										
										
											2017-06-03 00:05:25 +08:00
										 |  |  | 						} | 
					
						
							| 
									
										
										
										
											2018-02-25 09:00:20 +08:00
										 |  |  | 						const sourceMapString = JSON.stringify(sourceMap); | 
					
						
							|  |  |  | 						if (sourceMapFilename) { | 
					
						
							|  |  |  | 							let filename = file; | 
					
						
							|  |  |  | 							let query = ""; | 
					
						
							|  |  |  | 							const idx = filename.indexOf("?"); | 
					
						
							|  |  |  | 							if (idx >= 0) { | 
					
						
							|  |  |  | 								query = filename.substr(idx); | 
					
						
							|  |  |  | 								filename = filename.substr(0, idx); | 
					
						
							|  |  |  | 							} | 
					
						
							|  |  |  | 							let sourceMapFile = compilation.getPath(sourceMapFilename, { | 
					
						
							|  |  |  | 								chunk, | 
					
						
							|  |  |  | 								filename: options.fileContext | 
					
						
							|  |  |  | 									? path.relative(options.fileContext, filename) | 
					
						
							|  |  |  | 									: filename, | 
					
						
							|  |  |  | 								query, | 
					
						
							| 
									
										
										
										
											2018-07-06 17:20:01 +08:00
										 |  |  | 								basename: path.basename(filename), | 
					
						
							| 
									
										
										
										
											2018-03-23 02:52:11 +08:00
										 |  |  | 								contentHash: createHash("md4") | 
					
						
							|  |  |  | 									.update(sourceMapString) | 
					
						
							|  |  |  | 									.digest("hex") | 
					
						
							| 
									
										
										
										
											2018-02-25 09:00:20 +08:00
										 |  |  | 							}); | 
					
						
							|  |  |  | 							const sourceMapUrl = options.publicPath | 
					
						
							|  |  |  | 								? options.publicPath + sourceMapFile.replace(/\\/g, "/") | 
					
						
							|  |  |  | 								: path | 
					
						
							|  |  |  | 										.relative(path.dirname(file), sourceMapFile) | 
					
						
							|  |  |  | 										.replace(/\\/g, "/"); | 
					
						
							|  |  |  | 							if (currentSourceMappingURLComment !== false) { | 
					
						
							| 
									
										
										
										
											2018-05-19 20:02:31 +08:00
										 |  |  | 								assets[file] = compilation.assets[file] = new ConcatSource( | 
					
						
							| 
									
										
										
										
											2018-02-25 09:00:20 +08:00
										 |  |  | 									new RawSource(source), | 
					
						
							|  |  |  | 									currentSourceMappingURLComment.replace( | 
					
						
							|  |  |  | 										/\[url\]/g, | 
					
						
							|  |  |  | 										sourceMapUrl | 
					
						
							|  |  |  | 									) | 
					
						
							|  |  |  | 								); | 
					
						
							|  |  |  | 							} | 
					
						
							| 
									
										
										
										
											2018-05-19 20:02:31 +08:00
										 |  |  | 							assets[sourceMapFile] = compilation.assets[ | 
					
						
							| 
									
										
										
										
											2018-02-25 09:00:20 +08:00
										 |  |  | 								sourceMapFile | 
					
						
							|  |  |  | 							] = new RawSource(sourceMapString); | 
					
						
							|  |  |  | 							chunk.files.push(sourceMapFile); | 
					
						
							|  |  |  | 						} else { | 
					
						
							| 
									
										
										
										
											2018-05-19 20:02:31 +08:00
										 |  |  | 							assets[file] = compilation.assets[file] = new ConcatSource( | 
					
						
							| 
									
										
										
										
											2018-02-25 09:00:20 +08:00
										 |  |  | 								new RawSource(source), | 
					
						
							|  |  |  | 								currentSourceMappingURLComment | 
					
						
							|  |  |  | 									.replace(/\[map\]/g, () => sourceMapString) | 
					
						
							|  |  |  | 									.replace( | 
					
						
							|  |  |  | 										/\[url\]/g, | 
					
						
							|  |  |  | 										() => | 
					
						
							|  |  |  | 											`data:application/json;charset=utf-8;base64,${Buffer.from( | 
					
						
							|  |  |  | 												sourceMapString, | 
					
						
							|  |  |  | 												"utf-8" | 
					
						
							|  |  |  | 											).toString("base64")}`
 | 
					
						
							|  |  |  | 									) | 
					
						
							|  |  |  | 							); | 
					
						
							| 
									
										
										
										
											2017-04-06 20:46:40 +08:00
										 |  |  | 						} | 
					
						
							| 
									
										
										
										
											2018-02-25 09:00:20 +08:00
										 |  |  | 					}); | 
					
						
							|  |  |  | 					reportProgress(1.0); | 
					
						
							|  |  |  | 				} | 
					
						
							|  |  |  | 			); | 
					
						
							| 
									
										
										
										
											2013-03-26 23:54:41 +08:00
										 |  |  | 		}); | 
					
						
							| 
									
										
										
										
											2017-04-06 20:46:40 +08:00
										 |  |  | 	} | 
					
						
							| 
									
										
										
										
											2014-06-17 22:35:31 +08:00
										 |  |  | } | 
					
						
							| 
									
										
										
										
											2017-04-06 20:46:40 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | module.exports = SourceMapDevToolPlugin; |