| 
									
										
										
										
											2013-01-31 01:49:25 +08:00
										 |  |  | var path = require("path"); | 
					
						
							| 
									
										
										
										
											2013-02-23 00:01:54 +08:00
										 |  |  | var fs = require("fs"); | 
					
						
							| 
									
										
										
										
											2013-03-11 19:16:10 +08:00
										 |  |  | fs.existsSync = fs.existsSync || path.existsSync; | 
					
						
							| 
									
										
										
										
											2015-05-10 20:18:12 +08:00
										 |  |  | var interpret = require("interpret"); | 
					
						
							| 
									
										
										
										
											2013-01-31 01:49:25 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-10-30 20:35:05 +08:00
										 |  |  | module.exports = function(yargs, argv, convertOptions) { | 
					
						
							| 
									
										
										
										
											2013-01-31 01:49:25 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-09-19 02:08:01 +08:00
										 |  |  | 	var options = []; | 
					
						
							| 
									
										
										
										
											2013-01-31 01:49:25 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-03-26 23:54:41 +08:00
										 |  |  | 	// Shortcuts
 | 
					
						
							|  |  |  | 	if(argv.d) { | 
					
						
							|  |  |  | 		argv.debug = true; | 
					
						
							|  |  |  | 		argv["output-pathinfo"] = true; | 
					
						
							| 
									
										
										
										
											2014-06-04 03:03:21 +08:00
										 |  |  | 		if(!argv.devtool) { | 
					
						
							| 
									
										
										
										
											2015-11-17 06:11:15 +08:00
										 |  |  | 			argv.devtool = "eval-cheap-module-source-map"; | 
					
						
							| 
									
										
										
										
											2014-06-04 03:03:21 +08:00
										 |  |  | 		} | 
					
						
							| 
									
										
										
										
											2013-03-26 23:54:41 +08:00
										 |  |  | 	} | 
					
						
							|  |  |  | 	if(argv.p) { | 
					
						
							|  |  |  | 		argv["optimize-minimize"] = true; | 
					
						
							| 
									
										
										
										
											2015-11-21 02:57:47 +08:00
										 |  |  | 		argv["define"] = [].concat(argv["define"] || []).concat("process.env.NODE_ENV=\"production\""); | 
					
						
							| 
									
										
										
										
											2013-03-26 23:54:41 +08:00
										 |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-03-06 05:21:47 +08:00
										 |  |  | 	var configFileLoaded = false; | 
					
						
							| 
									
										
										
										
											2016-09-19 02:08:01 +08:00
										 |  |  | 	var configFiles = []; | 
					
						
							| 
									
										
										
										
											2015-08-09 18:37:38 +08:00
										 |  |  | 	var extensions = Object.keys(interpret.extensions).sort(function(a, b) { | 
					
						
							| 
									
										
										
										
											2016-12-30 00:10:41 +08:00
										 |  |  | 		return a === ".js" ? -1 : b === ".js" ? 1 : a.length - b.length; | 
					
						
							| 
									
										
										
										
											2015-06-11 14:03:31 +08:00
										 |  |  | 	}); | 
					
						
							| 
									
										
										
										
											2016-09-18 13:42:56 +08:00
										 |  |  | 	var defaultConfigFiles = ["webpack.config", "webpackfile"].map(function(filename) { | 
					
						
							| 
									
										
										
										
											2015-11-17 05:16:47 +08:00
										 |  |  | 		return extensions.map(function(ext) { | 
					
						
							|  |  |  | 			return { | 
					
						
							|  |  |  | 				path: path.resolve(filename + ext), | 
					
						
							|  |  |  | 				ext: ext | 
					
						
							|  |  |  | 			}; | 
					
						
							|  |  |  | 		}); | 
					
						
							| 
									
										
										
										
											2015-11-17 06:11:15 +08:00
										 |  |  | 	}).reduce(function(a, i) { | 
					
						
							|  |  |  | 		return a.concat(i); | 
					
						
							|  |  |  | 	}, []); | 
					
						
							| 
									
										
										
										
											2015-06-11 14:03:31 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-01-19 08:52:28 +08:00
										 |  |  | 	var i; | 
					
						
							| 
									
										
										
										
											2015-08-09 18:37:38 +08:00
										 |  |  | 	if(argv.config) { | 
					
						
							| 
									
										
										
										
											2016-10-29 21:57:58 +08:00
										 |  |  | 		var getConfigExtension = function getConfigExtension(configPath) { | 
					
						
							| 
									
										
										
										
											2016-09-18 13:42:56 +08:00
										 |  |  | 			for(i = extensions.length - 1; i >= 0; i--) { | 
					
						
							|  |  |  | 				var tmpExt = extensions[i]; | 
					
						
							|  |  |  | 				if(configPath.indexOf(tmpExt, configPath.length - tmpExt.length) > -1) { | 
					
						
							|  |  |  | 					return tmpExt; | 
					
						
							|  |  |  | 				} | 
					
						
							| 
									
										
										
										
											2015-06-11 14:03:31 +08:00
										 |  |  | 			} | 
					
						
							| 
									
										
										
										
											2016-09-18 13:42:56 +08:00
										 |  |  | 			return path.extname(configPath); | 
					
						
							| 
									
										
										
										
											2017-01-11 17:51:58 +08:00
										 |  |  | 		}; | 
					
						
							| 
									
										
										
										
											2016-09-19 02:08:01 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-10-29 21:57:58 +08:00
										 |  |  | 		var mapConfigArg = function mapConfigArg(configArg) { | 
					
						
							| 
									
										
										
										
											2016-09-19 02:08:01 +08:00
										 |  |  | 			var resolvedPath = path.resolve(configArg); | 
					
						
							|  |  |  | 			var extension = getConfigExtension(resolvedPath); | 
					
						
							|  |  |  | 			return { | 
					
						
							|  |  |  | 				path: resolvedPath, | 
					
						
							|  |  |  | 				ext: extension | 
					
						
							|  |  |  | 			}; | 
					
						
							| 
									
										
										
										
											2017-01-11 17:51:58 +08:00
										 |  |  | 		}; | 
					
						
							| 
									
										
										
										
											2016-09-19 02:08:01 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 		var configArgList = Array.isArray(argv.config) ? argv.config : [argv.config]; | 
					
						
							|  |  |  | 		configFiles = configArgList.map(mapConfigArg); | 
					
						
							| 
									
										
										
										
											2014-06-12 04:26:50 +08:00
										 |  |  | 	} else { | 
					
						
							| 
									
										
										
										
											2016-09-18 13:42:56 +08:00
										 |  |  | 		for(i = 0; i < defaultConfigFiles.length; i++) { | 
					
						
							|  |  |  | 			var webpackConfig = defaultConfigFiles[i].path; | 
					
						
							| 
									
										
										
										
											2015-04-10 16:21:38 +08:00
										 |  |  | 			if(fs.existsSync(webpackConfig)) { | 
					
						
							| 
									
										
										
										
											2016-09-19 02:08:01 +08:00
										 |  |  | 				configFiles.push({ | 
					
						
							|  |  |  | 					path: webpackConfig, | 
					
						
							|  |  |  | 					ext: defaultConfigFiles[i].ext | 
					
						
							|  |  |  | 				}); | 
					
						
							| 
									
										
										
										
											2015-04-10 16:21:38 +08:00
										 |  |  | 				break; | 
					
						
							|  |  |  | 			} | 
					
						
							| 
									
										
										
										
											2013-01-31 01:49:25 +08:00
										 |  |  | 		} | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2015-03-06 05:22:22 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-09-19 02:08:01 +08:00
										 |  |  | 	if(configFiles.length > 0) { | 
					
						
							| 
									
										
										
										
											2016-10-29 21:57:58 +08:00
										 |  |  | 		var registerCompiler = function registerCompiler(moduleDescriptor) { | 
					
						
							| 
									
										
										
										
											2015-08-09 18:37:38 +08:00
										 |  |  | 			if(moduleDescriptor) { | 
					
						
							|  |  |  | 				if(typeof moduleDescriptor === "string") { | 
					
						
							| 
									
										
										
										
											2015-07-23 18:31:56 +08:00
										 |  |  | 					require(moduleDescriptor); | 
					
						
							|  |  |  | 				} else if(!Array.isArray(moduleDescriptor)) { | 
					
						
							|  |  |  | 					moduleDescriptor.register(require(moduleDescriptor.module)); | 
					
						
							|  |  |  | 				} else { | 
					
						
							|  |  |  | 					for(var i = 0; i < moduleDescriptor.length; i++) { | 
					
						
							|  |  |  | 						try { | 
					
						
							|  |  |  | 							registerCompiler(moduleDescriptor[i]); | 
					
						
							|  |  |  | 							break; | 
					
						
							|  |  |  | 						} catch(e) { | 
					
						
							|  |  |  | 							// do nothing
 | 
					
						
							|  |  |  | 						} | 
					
						
							|  |  |  | 					} | 
					
						
							|  |  |  | 				} | 
					
						
							| 
									
										
										
										
											2015-04-10 16:21:38 +08:00
										 |  |  | 			} | 
					
						
							| 
									
										
										
										
											2017-01-11 17:51:58 +08:00
										 |  |  | 		}; | 
					
						
							| 
									
										
										
										
											2015-07-23 18:31:56 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-10-29 21:57:58 +08:00
										 |  |  | 		var requireConfig = function requireConfig(configPath) { | 
					
						
							| 
									
										
										
										
											2016-09-18 13:42:56 +08:00
										 |  |  | 			var options = require(configPath); | 
					
						
							|  |  |  | 			var isES6DefaultExportedFunc = ( | 
					
						
							|  |  |  | 				typeof options === "object" && options !== null && typeof options.default === "function" | 
					
						
							|  |  |  | 			); | 
					
						
							|  |  |  | 			if(typeof options === "function" || isES6DefaultExportedFunc) { | 
					
						
							|  |  |  | 				options = isES6DefaultExportedFunc ? options.default : options; | 
					
						
							|  |  |  | 				options = options(argv.env, argv); | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 			return options; | 
					
						
							| 
									
										
										
										
											2017-01-11 17:51:58 +08:00
										 |  |  | 		}; | 
					
						
							| 
									
										
										
										
											2016-03-01 18:44:30 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-09-19 02:08:01 +08:00
										 |  |  | 		configFiles.forEach(function(file) { | 
					
						
							|  |  |  | 			registerCompiler(interpret.extensions[file.ext]); | 
					
						
							|  |  |  | 			options.push(requireConfig(file.path)); | 
					
						
							|  |  |  | 		}); | 
					
						
							| 
									
										
										
										
											2015-04-15 02:09:29 +08:00
										 |  |  | 		configFileLoaded = true; | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2016-02-29 17:07:14 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-09-19 02:08:01 +08:00
										 |  |  | 	if(!configFileLoaded) { | 
					
						
							|  |  |  | 		return processConfiguredOptions({}); | 
					
						
							|  |  |  | 	} else if(options.length === 1) { | 
					
						
							|  |  |  | 		return processConfiguredOptions(options[0]); | 
					
						
							|  |  |  | 	} else { | 
					
						
							|  |  |  | 		return processConfiguredOptions(options); | 
					
						
							| 
									
										
										
										
											2015-03-06 05:22:22 +08:00
										 |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-11-14 22:34:45 +08:00
										 |  |  | 	function processConfiguredOptions(options) { | 
					
						
							| 
									
										
										
										
											2016-03-01 18:44:30 +08:00
										 |  |  | 		if(options === null || typeof options !== "object") { | 
					
						
							| 
									
										
										
										
											2016-01-15 02:40:04 +08:00
										 |  |  | 			console.error("Config did not export an object or a function returning an object."); | 
					
						
							| 
									
										
										
										
											2015-11-14 22:34:45 +08:00
										 |  |  | 			process.exit(-1); // eslint-disable-line
 | 
					
						
							|  |  |  | 		} | 
					
						
							| 
									
										
										
										
											2013-02-04 17:30:49 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-11-14 22:34:45 +08:00
										 |  |  | 		// process Promise
 | 
					
						
							|  |  |  | 		if(typeof options.then === "function") { | 
					
						
							|  |  |  | 			return options.then(processConfiguredOptions); | 
					
						
							|  |  |  | 		} | 
					
						
							| 
									
										
										
										
											2014-03-21 23:08:35 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-11-14 22:34:45 +08:00
										 |  |  | 		// process ES6 default
 | 
					
						
							| 
									
										
										
										
											2016-03-03 18:12:06 +08:00
										 |  |  | 		if(typeof options === "object" && typeof options.default === "object") { | 
					
						
							|  |  |  | 			return processConfiguredOptions(options.default); | 
					
						
							| 
									
										
										
										
											2015-05-13 01:58:12 +08:00
										 |  |  | 		} | 
					
						
							| 
									
										
										
										
											2015-11-14 22:34:45 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 		if(Array.isArray(options)) { | 
					
						
							|  |  |  | 			options.forEach(processOptions); | 
					
						
							|  |  |  | 		} else { | 
					
						
							|  |  |  | 			processOptions(options); | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		if(argv.context) { | 
					
						
							|  |  |  | 			options.context = path.resolve(argv.context); | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 		if(!options.context) { | 
					
						
							|  |  |  | 			options.context = process.cwd(); | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		if(argv.watch) { | 
					
						
							|  |  |  | 			options.watch = true; | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		if(argv["watch-aggregate-timeout"]) { | 
					
						
							|  |  |  | 			options.watchOptions = options.watchOptions || {}; | 
					
						
							|  |  |  | 			options.watchOptions.aggregateTimeout = +argv["watch-aggregate-timeout"]; | 
					
						
							|  |  |  | 		} | 
					
						
							| 
									
										
										
										
											2014-09-03 19:15:35 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-11-14 22:34:45 +08:00
										 |  |  | 		if(argv["watch-poll"]) { | 
					
						
							|  |  |  | 			options.watchOptions = options.watchOptions || {}; | 
					
						
							|  |  |  | 			if(typeof argv["watch-poll"] !== "boolean") | 
					
						
							|  |  |  | 				options.watchOptions.poll = +argv["watch-poll"]; | 
					
						
							|  |  |  | 			else | 
					
						
							|  |  |  | 				options.watchOptions.poll = true; | 
					
						
							|  |  |  | 		} | 
					
						
							| 
									
										
										
										
											2015-05-10 22:41:55 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-11-14 22:34:45 +08:00
										 |  |  | 		if(argv["watch-stdin"]) { | 
					
						
							|  |  |  | 			options.watchOptions = options.watchOptions || {}; | 
					
						
							|  |  |  | 			options.watchOptions.stdin = true; | 
					
						
							|  |  |  | 			options.watch = true; | 
					
						
							|  |  |  | 		} | 
					
						
							| 
									
										
										
										
											2014-09-03 19:15:35 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-11-14 22:34:45 +08:00
										 |  |  | 		return options; | 
					
						
							| 
									
										
										
										
											2015-07-29 09:14:15 +08:00
										 |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-06-12 04:26:50 +08:00
										 |  |  | 	function processOptions(options) { | 
					
						
							| 
									
										
										
										
											2016-01-20 02:35:05 +08:00
										 |  |  | 		var noOutputFilenameDefined = !options.output || !options.output.filename; | 
					
						
							| 
									
										
										
										
											2016-01-15 02:40:04 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-06-12 04:26:50 +08:00
										 |  |  | 		function ifArg(name, fn, init, finalize) { | 
					
						
							|  |  |  | 			if(Array.isArray(argv[name])) { | 
					
						
							|  |  |  | 				if(init) { | 
					
						
							|  |  |  | 					init(); | 
					
						
							|  |  |  | 				} | 
					
						
							|  |  |  | 				argv[name].forEach(fn); | 
					
						
							|  |  |  | 				if(finalize) { | 
					
						
							|  |  |  | 					finalize(); | 
					
						
							|  |  |  | 				} | 
					
						
							| 
									
										
										
										
											2016-12-05 06:47:19 +08:00
										 |  |  | 			} else if(typeof argv[name] !== "undefined" && argv[name] !== null) { | 
					
						
							| 
									
										
										
										
											2014-06-12 04:26:50 +08:00
										 |  |  | 				if(init) { | 
					
						
							|  |  |  | 					init(); | 
					
						
							|  |  |  | 				} | 
					
						
							|  |  |  | 				fn(argv[name], -1); | 
					
						
							|  |  |  | 				if(finalize) { | 
					
						
							|  |  |  | 					finalize(); | 
					
						
							|  |  |  | 				} | 
					
						
							| 
									
										
										
										
											2014-06-04 03:03:21 +08:00
										 |  |  | 			} | 
					
						
							| 
									
										
										
										
											2014-06-12 04:26:50 +08:00
										 |  |  | 		} | 
					
						
							| 
									
										
										
										
											2013-01-31 01:49:25 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-06-12 04:26:50 +08:00
										 |  |  | 		function ifArgPair(name, fn, init, finalize) { | 
					
						
							|  |  |  | 			ifArg(name, function(content, idx) { | 
					
						
							|  |  |  | 				var i = content.indexOf("="); | 
					
						
							|  |  |  | 				if(i < 0) { | 
					
						
							|  |  |  | 					return fn(null, content, idx); | 
					
						
							|  |  |  | 				} else { | 
					
						
							| 
									
										
										
										
											2015-05-10 20:18:12 +08:00
										 |  |  | 					return fn(content.substr(0, i), content.substr(i + 1), idx); | 
					
						
							| 
									
										
										
										
											2014-06-12 04:26:50 +08:00
										 |  |  | 				} | 
					
						
							|  |  |  | 			}, init, finalize); | 
					
						
							|  |  |  | 		} | 
					
						
							| 
									
										
										
										
											2013-01-31 01:49:25 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-06-12 04:26:50 +08:00
										 |  |  | 		function ifBooleanArg(name, fn) { | 
					
						
							|  |  |  | 			ifArg(name, function(bool) { | 
					
						
							|  |  |  | 				if(bool) { | 
					
						
							|  |  |  | 					fn(); | 
					
						
							|  |  |  | 				} | 
					
						
							|  |  |  | 			}); | 
					
						
							| 
									
										
										
										
											2013-01-31 01:49:25 +08:00
										 |  |  | 		} | 
					
						
							| 
									
										
										
										
											2014-06-12 04:26:50 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 		function mapArgToBoolean(name, optionName) { | 
					
						
							|  |  |  | 			ifArg(name, function(bool) { | 
					
						
							| 
									
										
										
										
											2016-12-05 06:47:19 +08:00
										 |  |  | 				if(bool === true) | 
					
						
							|  |  |  | 					options[optionName || name] = true; | 
					
						
							|  |  |  | 				else if(bool === false) | 
					
						
							| 
									
										
										
										
											2014-06-12 04:26:50 +08:00
										 |  |  | 					options[optionName || name] = false; | 
					
						
							|  |  |  | 			}); | 
					
						
							| 
									
										
										
										
											2013-01-31 01:49:25 +08:00
										 |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-06-12 04:26:50 +08:00
										 |  |  | 		function loadPlugin(name) { | 
					
						
							| 
									
										
										
										
											2015-08-05 23:03:52 +08:00
										 |  |  | 			var loadUtils = require("loader-utils"); | 
					
						
							| 
									
										
										
										
											2017-01-11 01:49:26 +08:00
										 |  |  | 			var args; | 
					
						
							| 
									
										
										
										
											2015-08-05 23:03:52 +08:00
										 |  |  | 			try { | 
					
						
							|  |  |  | 				var p = name && name.indexOf("?"); | 
					
						
							| 
									
										
										
										
											2015-08-09 18:37:38 +08:00
										 |  |  | 				if(p > -1) { | 
					
						
							| 
									
										
										
										
											2015-08-05 23:03:52 +08:00
										 |  |  | 					args = loadUtils.parseQuery(name.substring(p)); | 
					
						
							|  |  |  | 					name = name.substring(0, p); | 
					
						
							|  |  |  | 				} | 
					
						
							|  |  |  | 			} catch(e) { | 
					
						
							| 
									
										
										
										
											2015-08-09 18:23:59 +08:00
										 |  |  | 				console.log("Invalid plugin arguments " + name + " (" + e + ")."); | 
					
						
							| 
									
										
										
										
											2015-11-14 22:34:45 +08:00
										 |  |  | 				process.exit(-1); // eslint-disable-line
 | 
					
						
							| 
									
										
										
										
											2015-08-05 23:03:52 +08:00
										 |  |  | 			} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-06-12 04:26:50 +08:00
										 |  |  | 			var path; | 
					
						
							|  |  |  | 			try { | 
					
						
							| 
									
										
										
										
											2016-12-05 06:47:19 +08:00
										 |  |  | 				var resolve = require("enhanced-resolve"); | 
					
						
							| 
									
										
										
										
											2014-06-12 04:26:50 +08:00
										 |  |  | 				path = resolve.sync(process.cwd(), name); | 
					
						
							|  |  |  | 			} catch(e) { | 
					
						
							|  |  |  | 				console.log("Cannot resolve plugin " + name + "."); | 
					
						
							| 
									
										
										
										
											2015-11-14 22:34:45 +08:00
										 |  |  | 				process.exit(-1); // eslint-disable-line
 | 
					
						
							| 
									
										
										
										
											2014-06-12 04:26:50 +08:00
										 |  |  | 			} | 
					
						
							|  |  |  | 			var Plugin; | 
					
						
							|  |  |  | 			try { | 
					
						
							|  |  |  | 				Plugin = require(path); | 
					
						
							|  |  |  | 			} catch(e) { | 
					
						
							|  |  |  | 				console.log("Cannot load plugin " + name + ". (" + path + ")"); | 
					
						
							|  |  |  | 				throw e; | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 			try { | 
					
						
							| 
									
										
										
										
											2015-08-05 23:03:52 +08:00
										 |  |  | 				return new Plugin(args); | 
					
						
							| 
									
										
										
										
											2014-06-12 04:26:50 +08:00
										 |  |  | 			} catch(e) { | 
					
						
							|  |  |  | 				console.log("Cannot instantiate plugin " + name + ". (" + path + ")"); | 
					
						
							|  |  |  | 				throw e; | 
					
						
							|  |  |  | 			} | 
					
						
							| 
									
										
										
										
											2014-06-04 03:03:21 +08:00
										 |  |  | 		} | 
					
						
							| 
									
										
										
										
											2013-01-31 01:49:25 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-06-12 04:26:50 +08:00
										 |  |  | 		function ensureObject(parent, name) { | 
					
						
							|  |  |  | 			if(typeof parent[name] !== "object" || parent[name] === null) { | 
					
						
							|  |  |  | 				parent[name] = {}; | 
					
						
							|  |  |  | 			} | 
					
						
							| 
									
										
										
										
											2014-06-04 03:03:21 +08:00
										 |  |  | 		} | 
					
						
							| 
									
										
										
										
											2013-01-31 01:49:25 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-06-12 04:26:50 +08:00
										 |  |  | 		function ensureArray(parent, name) { | 
					
						
							|  |  |  | 			if(!Array.isArray(parent[name])) { | 
					
						
							|  |  |  | 				parent[name] = []; | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 		} | 
					
						
							| 
									
										
										
										
											2013-01-31 01:49:25 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-06-12 04:26:50 +08:00
										 |  |  | 		ifArgPair("entry", function(name, entry) { | 
					
						
							| 
									
										
										
										
											2017-02-21 02:37:22 +08:00
										 |  |  | 			if(typeof options.entry[name] !== "undefined" && options.entry[name] !== null) { | 
					
						
							|  |  |  | 				options.entry[name] = [].concat(options.entry[name]).concat(entry); | 
					
						
							|  |  |  | 			} else { | 
					
						
							|  |  |  | 				options.entry[name] = entry; | 
					
						
							|  |  |  | 			} | 
					
						
							| 
									
										
										
										
											2014-06-12 04:26:50 +08:00
										 |  |  | 		}, function() { | 
					
						
							|  |  |  | 			ensureObject(options, "entry"); | 
					
						
							|  |  |  | 		}); | 
					
						
							| 
									
										
										
										
											2013-01-31 01:49:25 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-06-25 00:53:32 +08:00
										 |  |  | 		function bindLoaders(arg, collection) { | 
					
						
							|  |  |  | 			ifArgPair(arg, function(name, binding) { | 
					
						
							|  |  |  | 				if(name === null) { | 
					
						
							|  |  |  | 					name = binding; | 
					
						
							| 
									
										
										
										
											2016-11-15 07:29:38 +08:00
										 |  |  | 					binding += "-loader"; | 
					
						
							| 
									
										
										
										
											2014-06-25 00:53:32 +08:00
										 |  |  | 				} | 
					
						
							|  |  |  | 				options.module[collection].push({ | 
					
						
							|  |  |  | 					test: new RegExp("\\." + name.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&") + "$"), | 
					
						
							|  |  |  | 					loader: binding | 
					
						
							|  |  |  | 				}); | 
					
						
							|  |  |  | 			}, function() { | 
					
						
							|  |  |  | 				ensureObject(options, "module"); | 
					
						
							|  |  |  | 				ensureArray(options.module, collection); | 
					
						
							| 
									
										
										
										
											2014-06-12 04:26:50 +08:00
										 |  |  | 			}); | 
					
						
							| 
									
										
										
										
											2014-06-25 00:53:32 +08:00
										 |  |  | 		} | 
					
						
							|  |  |  | 		bindLoaders("module-bind", "loaders"); | 
					
						
							|  |  |  | 		bindLoaders("module-bind-pre", "preLoaders"); | 
					
						
							|  |  |  | 		bindLoaders("module-bind-post", "postLoaders"); | 
					
						
							| 
									
										
										
										
											2014-06-12 04:26:50 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 		var defineObject; | 
					
						
							|  |  |  | 		ifArgPair("define", function(name, value) { | 
					
						
							|  |  |  | 			if(name === null) { | 
					
						
							|  |  |  | 				name = value; | 
					
						
							|  |  |  | 				value = true; | 
					
						
							| 
									
										
										
										
											2014-06-04 03:03:21 +08:00
										 |  |  | 			} | 
					
						
							| 
									
										
										
										
											2014-06-12 04:26:50 +08:00
										 |  |  | 			defineObject[name] = value; | 
					
						
							|  |  |  | 		}, function() { | 
					
						
							|  |  |  | 			defineObject = {}; | 
					
						
							|  |  |  | 		}, function() { | 
					
						
							|  |  |  | 			ensureArray(options, "plugins"); | 
					
						
							|  |  |  | 			var DefinePlugin = require("../lib/DefinePlugin"); | 
					
						
							|  |  |  | 			options.plugins.push(new DefinePlugin(defineObject)); | 
					
						
							|  |  |  | 		}); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		ifArg("output-path", function(value) { | 
					
						
							|  |  |  | 			ensureObject(options, "output"); | 
					
						
							| 
									
										
										
										
											2017-02-10 06:24:23 +08:00
										 |  |  | 			options.output.path = path.resolve(value); | 
					
						
							| 
									
										
										
										
											2014-06-12 04:26:50 +08:00
										 |  |  | 		}); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-06-30 10:03:46 +08:00
										 |  |  | 		ifArg("output-filename", function(value) { | 
					
						
							| 
									
										
										
										
											2014-06-12 04:26:50 +08:00
										 |  |  | 			ensureObject(options, "output"); | 
					
						
							|  |  |  | 			options.output.filename = value; | 
					
						
							| 
									
										
										
										
											2016-07-13 18:56:36 +08:00
										 |  |  | 			noOutputFilenameDefined = false; | 
					
						
							| 
									
										
										
										
											2014-06-12 04:26:50 +08:00
										 |  |  | 		}); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-01-15 02:40:04 +08:00
										 |  |  | 		ifArg("output-chunk-filename", function(value) { | 
					
						
							| 
									
										
										
										
											2014-06-12 04:26:50 +08:00
										 |  |  | 			ensureObject(options, "output"); | 
					
						
							|  |  |  | 			options.output.chunkFilename = value; | 
					
						
							|  |  |  | 		}); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-01-15 02:40:04 +08:00
										 |  |  | 		ifArg("output-source-map-filename", function(value) { | 
					
						
							| 
									
										
										
										
											2014-06-12 04:26:50 +08:00
										 |  |  | 			ensureObject(options, "output"); | 
					
						
							|  |  |  | 			options.output.sourceMapFilename = value; | 
					
						
							|  |  |  | 		}); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		ifArg("output-public-path", function(value) { | 
					
						
							|  |  |  | 			ensureObject(options, "output"); | 
					
						
							|  |  |  | 			options.output.publicPath = value; | 
					
						
							|  |  |  | 		}); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		ifArg("output-jsonp-function", function(value) { | 
					
						
							|  |  |  | 			ensureObject(options, "output"); | 
					
						
							|  |  |  | 			options.output.jsonpFunction = value; | 
					
						
							|  |  |  | 		}); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		ifBooleanArg("output-pathinfo", function() { | 
					
						
							|  |  |  | 			ensureObject(options, "output"); | 
					
						
							|  |  |  | 			options.output.pathinfo = true; | 
					
						
							|  |  |  | 		}); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		ifArg("output-library", function(value) { | 
					
						
							|  |  |  | 			ensureObject(options, "output"); | 
					
						
							|  |  |  | 			options.output.library = value; | 
					
						
							|  |  |  | 		}); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		ifArg("output-library-target", function(value) { | 
					
						
							|  |  |  | 			ensureObject(options, "output"); | 
					
						
							|  |  |  | 			options.output.libraryTarget = value; | 
					
						
							|  |  |  | 		}); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		ifArg("records-input-path", function(value) { | 
					
						
							|  |  |  | 			options.recordsInputPath = path.resolve(value); | 
					
						
							|  |  |  | 		}); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		ifArg("records-output-path", function(value) { | 
					
						
							|  |  |  | 			options.recordsOutputPath = path.resolve(value); | 
					
						
							|  |  |  | 		}); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		ifArg("records-path", function(value) { | 
					
						
							|  |  |  | 			options.recordsPath = path.resolve(value); | 
					
						
							|  |  |  | 		}); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		ifArg("target", function(value) { | 
					
						
							|  |  |  | 			options.target = value; | 
					
						
							|  |  |  | 		}); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-12-05 06:47:19 +08:00
										 |  |  | 		mapArgToBoolean("cache"); | 
					
						
							| 
									
										
										
										
											2014-06-12 04:26:50 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 		ifBooleanArg("hot", function() { | 
					
						
							|  |  |  | 			ensureArray(options, "plugins"); | 
					
						
							|  |  |  | 			var HotModuleReplacementPlugin = require("../lib/HotModuleReplacementPlugin"); | 
					
						
							| 
									
										
										
										
											2016-05-05 23:11:20 +08:00
										 |  |  | 			options.plugins.push(new HotModuleReplacementPlugin()); | 
					
						
							| 
									
										
										
										
											2014-06-12 04:26:50 +08:00
										 |  |  | 		}); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-11-17 06:11:15 +08:00
										 |  |  | 		ifBooleanArg("debug", function() { | 
					
						
							|  |  |  | 			ensureArray(options, "plugins"); | 
					
						
							|  |  |  | 			var LoaderOptionsPlugin = require("../lib/LoaderOptionsPlugin"); | 
					
						
							|  |  |  | 			options.plugins.push(new LoaderOptionsPlugin({ | 
					
						
							|  |  |  | 				debug: true | 
					
						
							|  |  |  | 			})); | 
					
						
							|  |  |  | 		}); | 
					
						
							| 
									
										
										
										
											2014-06-12 04:26:50 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 		ifArg("devtool", function(value) { | 
					
						
							|  |  |  | 			options.devtool = value; | 
					
						
							|  |  |  | 		}); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-06-25 00:53:32 +08:00
										 |  |  | 		function processResolveAlias(arg, key) { | 
					
						
							|  |  |  | 			ifArgPair(arg, function(name, value) { | 
					
						
							|  |  |  | 				if(!name) { | 
					
						
							|  |  |  | 					throw new Error("--" + arg + " <string>=<string>"); | 
					
						
							|  |  |  | 				} | 
					
						
							|  |  |  | 				ensureObject(options, key); | 
					
						
							|  |  |  | 				ensureObject(options[key], "alias"); | 
					
						
							|  |  |  | 				options[key].alias[name] = value; | 
					
						
							|  |  |  | 			}); | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 		processResolveAlias("resolve-alias", "resolve"); | 
					
						
							|  |  |  | 		processResolveAlias("resolve-loader-alias", "resolveLoader"); | 
					
						
							| 
									
										
										
										
											2013-01-31 01:49:25 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-29 01:09:38 +08:00
										 |  |  | 		ifArg("resolve-extensions", function(value) { | 
					
						
							|  |  |  | 			ensureObject(options, "resolve"); | 
					
						
							|  |  |  | 			if(Array.isArray(value)) { | 
					
						
							|  |  |  | 				options.resolve.extensions = value; | 
					
						
							|  |  |  | 			} else { | 
					
						
							|  |  |  | 				options.resolve.extensions = value.split(/,\s*/); | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 		}); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-06-12 04:26:50 +08:00
										 |  |  | 		ifArg("optimize-max-chunks", function(value) { | 
					
						
							|  |  |  | 			ensureArray(options, "plugins"); | 
					
						
							|  |  |  | 			var LimitChunkCountPlugin = require("../lib/optimize/LimitChunkCountPlugin"); | 
					
						
							|  |  |  | 			options.plugins.push(new LimitChunkCountPlugin({ | 
					
						
							|  |  |  | 				maxChunks: parseInt(value, 10) | 
					
						
							|  |  |  | 			})); | 
					
						
							|  |  |  | 		}); | 
					
						
							| 
									
										
										
										
											2013-01-31 01:49:25 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-06-12 04:26:50 +08:00
										 |  |  | 		ifArg("optimize-min-chunk-size", function(value) { | 
					
						
							|  |  |  | 			ensureArray(options, "plugins"); | 
					
						
							| 
									
										
										
										
											2015-06-01 11:42:49 +08:00
										 |  |  | 			var MinChunkSizePlugin = require("../lib/optimize/MinChunkSizePlugin"); | 
					
						
							|  |  |  | 			options.plugins.push(new MinChunkSizePlugin({ | 
					
						
							|  |  |  | 				minChunkSize: parseInt(value, 10) | 
					
						
							|  |  |  | 			})); | 
					
						
							| 
									
										
										
										
											2014-06-12 04:26:50 +08:00
										 |  |  | 		}); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		ifBooleanArg("optimize-minimize", function() { | 
					
						
							|  |  |  | 			ensureArray(options, "plugins"); | 
					
						
							|  |  |  | 			var UglifyJsPlugin = require("../lib/optimize/UglifyJsPlugin"); | 
					
						
							| 
									
										
										
										
											2015-11-17 06:11:15 +08:00
										 |  |  | 			var LoaderOptionsPlugin = require("../lib/LoaderOptionsPlugin"); | 
					
						
							| 
									
										
										
										
											2016-06-04 18:16:33 +08:00
										 |  |  | 			options.plugins.push(new UglifyJsPlugin({ | 
					
						
							|  |  |  | 				sourceMap: options.devtool && (options.devtool.indexOf("sourcemap") >= 0 || options.devtool.indexOf("source-map") >= 0) | 
					
						
							|  |  |  | 			})); | 
					
						
							| 
									
										
										
										
											2015-11-17 06:11:15 +08:00
										 |  |  | 			options.plugins.push(new LoaderOptionsPlugin({ | 
					
						
							|  |  |  | 				minimize: true | 
					
						
							|  |  |  | 			})); | 
					
						
							| 
									
										
										
										
											2014-06-12 04:26:50 +08:00
										 |  |  | 		}); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		ifArg("prefetch", function(request) { | 
					
						
							|  |  |  | 			ensureArray(options, "plugins"); | 
					
						
							|  |  |  | 			var PrefetchPlugin = require("../lib/PrefetchPlugin"); | 
					
						
							|  |  |  | 			options.plugins.push(new PrefetchPlugin(request)); | 
					
						
							|  |  |  | 		}); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		ifArg("provide", function(value) { | 
					
						
							|  |  |  | 			ensureArray(options, "plugins"); | 
					
						
							|  |  |  | 			var idx = value.indexOf("="); | 
					
						
							|  |  |  | 			var name; | 
					
						
							|  |  |  | 			if(idx >= 0) { | 
					
						
							|  |  |  | 				name = value.substr(0, idx); | 
					
						
							|  |  |  | 				value = value.substr(idx + 1); | 
					
						
							| 
									
										
										
										
											2013-01-31 08:44:39 +08:00
										 |  |  | 			} else { | 
					
						
							| 
									
										
										
										
											2014-06-12 04:26:50 +08:00
										 |  |  | 				name = value; | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 			var ProvidePlugin = require("../lib/ProvidePlugin"); | 
					
						
							|  |  |  | 			options.plugins.push(new ProvidePlugin(name, value)); | 
					
						
							|  |  |  | 		}); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		ifArg("plugin", function(value) { | 
					
						
							|  |  |  | 			ensureArray(options, "plugins"); | 
					
						
							|  |  |  | 			options.plugins.push(loadPlugin(value)); | 
					
						
							|  |  |  | 		}); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		mapArgToBoolean("bail"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		mapArgToBoolean("profile"); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-01-20 02:35:05 +08:00
										 |  |  | 		if(noOutputFilenameDefined) { | 
					
						
							| 
									
										
										
										
											2014-06-12 04:26:50 +08:00
										 |  |  | 			ensureObject(options, "output"); | 
					
						
							|  |  |  | 			if(convertOptions && convertOptions.outputFilename) { | 
					
						
							| 
									
										
										
										
											2017-02-10 06:24:23 +08:00
										 |  |  | 				options.output.path = path.resolve(path.dirname(convertOptions.outputFilename)); | 
					
						
							| 
									
										
										
										
											2014-06-12 04:26:50 +08:00
										 |  |  | 				options.output.filename = path.basename(convertOptions.outputFilename); | 
					
						
							|  |  |  | 			} else if(argv._.length > 0) { | 
					
						
							|  |  |  | 				options.output.filename = argv._.pop(); | 
					
						
							| 
									
										
										
										
											2017-02-10 06:24:23 +08:00
										 |  |  | 				options.output.path = path.resolve(path.dirname(options.output.filename)); | 
					
						
							| 
									
										
										
										
											2014-06-12 04:26:50 +08:00
										 |  |  | 				options.output.filename = path.basename(options.output.filename); | 
					
						
							| 
									
										
										
										
											2015-03-06 05:21:47 +08:00
										 |  |  | 			} else if(configFileLoaded) { | 
					
						
							| 
									
										
										
										
											2016-01-15 02:40:04 +08:00
										 |  |  | 				throw new Error("'output.filename' is required, either in config file or as --output-filename"); | 
					
						
							| 
									
										
										
										
											2014-06-12 04:26:50 +08:00
										 |  |  | 			} else { | 
					
						
							| 
									
										
										
										
											2016-01-15 02:40:04 +08:00
										 |  |  | 				console.error("No configuration file found and no output filename configured via CLI option."); | 
					
						
							|  |  |  | 				console.error("A configuration file could be named 'webpack.config.js' in the current directory."); | 
					
						
							|  |  |  | 				console.error("Use --help to display the CLI options."); | 
					
						
							| 
									
										
										
										
											2015-11-14 22:34:45 +08:00
										 |  |  | 				process.exit(-1); // eslint-disable-line
 | 
					
						
							| 
									
										
										
										
											2013-01-31 08:44:39 +08:00
										 |  |  | 			} | 
					
						
							|  |  |  | 		} | 
					
						
							| 
									
										
										
										
											2014-06-12 04:26:50 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 		if(argv._.length > 0) { | 
					
						
							| 
									
										
										
										
											2015-05-27 16:34:21 +08:00
										 |  |  | 			if(Array.isArray(options.entry) || typeof options.entry === "string") { | 
					
						
							|  |  |  | 				options.entry = { | 
					
						
							|  |  |  | 					main: options.entry | 
					
						
							|  |  |  | 				}; | 
					
						
							|  |  |  | 			} | 
					
						
							| 
									
										
										
										
											2014-06-12 04:26:50 +08:00
										 |  |  | 			ensureObject(options, "entry"); | 
					
						
							| 
									
										
										
										
											2015-08-09 18:37:38 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-10-29 21:57:58 +08:00
										 |  |  | 			var addTo = function addTo(name, entry) { | 
					
						
							| 
									
										
										
										
											2014-06-12 04:26:50 +08:00
										 |  |  | 				if(options.entry[name]) { | 
					
						
							|  |  |  | 					if(!Array.isArray(options.entry[name])) { | 
					
						
							|  |  |  | 						options.entry[name] = [options.entry[name]]; | 
					
						
							|  |  |  | 					} | 
					
						
							|  |  |  | 					options.entry[name].push(entry); | 
					
						
							| 
									
										
										
										
											2014-06-04 03:03:21 +08:00
										 |  |  | 				} else { | 
					
						
							| 
									
										
										
										
											2014-06-12 04:26:50 +08:00
										 |  |  | 					options.entry[name] = entry; | 
					
						
							| 
									
										
										
										
											2014-06-04 03:03:21 +08:00
										 |  |  | 				} | 
					
						
							| 
									
										
										
										
											2017-01-11 17:51:58 +08:00
										 |  |  | 			}; | 
					
						
							| 
									
										
										
										
											2014-06-12 04:26:50 +08:00
										 |  |  | 			argv._.forEach(function(content) { | 
					
						
							|  |  |  | 				var i = content.indexOf("="); | 
					
						
							|  |  |  | 				var j = content.indexOf("?"); | 
					
						
							|  |  |  | 				if(i < 0 || (j >= 0 && j < i)) { | 
					
						
							|  |  |  | 					var resolved = path.resolve(content); | 
					
						
							|  |  |  | 					if(fs.existsSync(resolved)) { | 
					
						
							|  |  |  | 						addTo("main", resolved); | 
					
						
							|  |  |  | 					} else { | 
					
						
							|  |  |  | 						addTo("main", content); | 
					
						
							|  |  |  | 					} | 
					
						
							|  |  |  | 				} else { | 
					
						
							| 
									
										
										
										
											2015-05-10 20:18:12 +08:00
										 |  |  | 					addTo(content.substr(0, i), content.substr(i + 1)); | 
					
						
							| 
									
										
										
										
											2014-06-12 04:26:50 +08:00
										 |  |  | 				} | 
					
						
							|  |  |  | 			}); | 
					
						
							|  |  |  | 		} | 
					
						
							| 
									
										
										
										
											2016-01-15 02:40:04 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 		if(!options.entry) { | 
					
						
							| 
									
										
										
										
											2016-09-19 02:08:01 +08:00
										 |  |  | 			if(configFileLoaded) { | 
					
						
							| 
									
										
										
										
											2016-01-15 02:40:04 +08:00
										 |  |  | 				console.error("Configuration file found but no entry configured."); | 
					
						
							|  |  |  | 			} else { | 
					
						
							|  |  |  | 				console.error("No configuration file found and no entry configured via CLI option."); | 
					
						
							|  |  |  | 				console.error("When using the CLI you need to provide at least two arguments: entry and output."); | 
					
						
							|  |  |  | 				console.error("A configuration file could be named 'webpack.config.js' in the current directory."); | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 			console.error("Use --help to display the CLI options."); | 
					
						
							|  |  |  | 			process.exit(-1); // eslint-disable-line
 | 
					
						
							|  |  |  | 		} | 
					
						
							| 
									
										
										
										
											2013-01-31 01:49:25 +08:00
										 |  |  | 	} | 
					
						
							| 
									
										
										
										
											2015-02-05 06:20:36 +08:00
										 |  |  | }; |