| 
									
										
										
										
											2017-01-09 02:11:26 +08:00
										 |  |  | /* | 
					
						
							|  |  |  | 	MIT License http://www.opensource.org/licenses/mit-license.php
 | 
					
						
							|  |  |  | 	Author Tobias Koppers @sokra | 
					
						
							|  |  |  | */ | 
					
						
							|  |  |  | "use strict"; | 
					
						
							| 
									
										
										
										
											2017-02-24 21:23:24 +08:00
										 |  |  | const path = require("path"); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-01-08 10:52:49 +08:00
										 |  |  | const BasicEvaluatedExpression = require("./BasicEvaluatedExpression"); | 
					
						
							|  |  |  | const ConstDependency = require("./dependencies/ConstDependency"); | 
					
						
							| 
									
										
										
										
											2017-01-08 11:39:06 +08:00
										 |  |  | const UnsupportedFeatureWarning = require("./UnsupportedFeatureWarning"); | 
					
						
							| 
									
										
										
										
											2017-01-08 10:52:49 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-01-09 02:11:26 +08:00
										 |  |  | const ParserHelpers = exports; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-11-08 18:32:05 +08:00
										 |  |  | ParserHelpers.addParsedVariableToModule = (parser, name, expression) => { | 
					
						
							| 
									
										
										
										
											2017-01-09 02:11:26 +08:00
										 |  |  | 	if(!parser.state.current.addVariable) return false; | 
					
						
							|  |  |  | 	var deps = []; | 
					
						
							|  |  |  | 	parser.parse(expression, { | 
					
						
							|  |  |  | 		current: { | 
					
						
							| 
									
										
										
										
											2017-11-08 18:32:05 +08:00
										 |  |  | 			addDependency: dep => { | 
					
						
							| 
									
										
										
										
											2017-01-09 02:11:26 +08:00
										 |  |  | 				dep.userRequest = name; | 
					
						
							|  |  |  | 				deps.push(dep); | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 		}, | 
					
						
							|  |  |  | 		module: parser.state.module | 
					
						
							|  |  |  | 	}); | 
					
						
							|  |  |  | 	parser.state.current.addVariable(name, expression, deps); | 
					
						
							|  |  |  | 	return true; | 
					
						
							|  |  |  | }; | 
					
						
							| 
									
										
										
										
											2017-01-08 10:52:49 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-11-08 18:32:05 +08:00
										 |  |  | ParserHelpers.requireFileAsExpression = (context, pathToModule) => { | 
					
						
							| 
									
										
										
										
											2017-02-24 21:23:24 +08:00
										 |  |  | 	var moduleJsPath = path.relative(context, pathToModule); | 
					
						
							|  |  |  | 	if(!/^[A-Z]:/i.test(moduleJsPath)) { | 
					
						
							|  |  |  | 		moduleJsPath = "./" + moduleJsPath.replace(/\\/g, "/"); | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	return "require(" + JSON.stringify(moduleJsPath) + ")"; | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-12-16 00:08:49 +08:00
										 |  |  | ParserHelpers.toConstantDependency = (parser, value) => { | 
					
						
							| 
									
										
										
										
											2017-01-09 18:04:28 +08:00
										 |  |  | 	return function constDependency(expr) { | 
					
						
							| 
									
										
										
										
											2017-12-13 18:14:00 +08:00
										 |  |  | 		var dep = new ConstDependency(value, expr.range, false); | 
					
						
							|  |  |  | 		dep.loc = expr.loc; | 
					
						
							| 
									
										
										
										
											2017-12-16 00:08:49 +08:00
										 |  |  | 		parser.state.current.addDependency(dep); | 
					
						
							| 
									
										
										
										
											2017-12-13 18:14:00 +08:00
										 |  |  | 		return true; | 
					
						
							|  |  |  | 	}; | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-12-16 00:08:49 +08:00
										 |  |  | ParserHelpers.toConstantDependencyWithWebpackRequire = (parser, value) => { | 
					
						
							| 
									
										
										
										
											2017-12-13 18:14:00 +08:00
										 |  |  | 	return function constDependencyWithWebpackRequire(expr) { | 
					
						
							|  |  |  | 		var dep = new ConstDependency(value, expr.range, true); | 
					
						
							| 
									
										
										
										
											2017-01-08 10:52:49 +08:00
										 |  |  | 		dep.loc = expr.loc; | 
					
						
							| 
									
										
										
										
											2017-12-16 00:08:49 +08:00
										 |  |  | 		parser.state.current.addDependency(dep); | 
					
						
							| 
									
										
										
										
											2017-01-08 10:52:49 +08:00
										 |  |  | 		return true; | 
					
						
							| 
									
										
										
										
											2017-01-08 11:53:14 +08:00
										 |  |  | 	}; | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-11-08 18:32:05 +08:00
										 |  |  | ParserHelpers.evaluateToString = value => { | 
					
						
							| 
									
										
										
										
											2017-01-09 18:04:28 +08:00
										 |  |  | 	return function stringExpression(expr) { | 
					
						
							| 
									
										
										
										
											2017-01-08 11:53:14 +08:00
										 |  |  | 		return new BasicEvaluatedExpression().setString(value).setRange(expr.range); | 
					
						
							|  |  |  | 	}; | 
					
						
							| 
									
										
										
										
											2017-01-08 10:52:49 +08:00
										 |  |  | }; | 
					
						
							| 
									
										
										
										
											2017-01-08 11:39:06 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-11-08 18:32:05 +08:00
										 |  |  | ParserHelpers.evaluateToBoolean = value => { | 
					
						
							| 
									
										
										
										
											2017-01-09 18:04:28 +08:00
										 |  |  | 	return function booleanExpression(expr) { | 
					
						
							| 
									
										
										
										
											2017-01-08 13:57:17 +08:00
										 |  |  | 		return new BasicEvaluatedExpression().setBoolean(value).setRange(expr.range); | 
					
						
							|  |  |  | 	}; | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-11-08 18:32:05 +08:00
										 |  |  | ParserHelpers.evaluateToIdentifier = (identifier, truthy) => { | 
					
						
							| 
									
										
										
										
											2017-06-02 19:24:47 +08:00
										 |  |  | 	return function identifierExpression(expr) { | 
					
						
							|  |  |  | 		let evex = new BasicEvaluatedExpression().setIdentifier(identifier).setRange(expr.range); | 
					
						
							|  |  |  | 		if(truthy === true) evex = evex.setTruthy(); | 
					
						
							|  |  |  | 		else if(truthy === false) evex = evex.setFalsy(); | 
					
						
							|  |  |  | 		return evex; | 
					
						
							|  |  |  | 	}; | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-12-16 00:08:49 +08:00
										 |  |  | ParserHelpers.expressionIsUnsupported = (parser, message) => { | 
					
						
							| 
									
										
										
										
											2017-01-08 11:39:06 +08:00
										 |  |  | 	return function unsupportedExpression(expr) { | 
					
						
							| 
									
										
										
										
											2017-12-13 18:14:00 +08:00
										 |  |  | 		var dep = new ConstDependency("(void 0)", expr.range, false); | 
					
						
							| 
									
										
										
										
											2017-01-08 11:39:06 +08:00
										 |  |  | 		dep.loc = expr.loc; | 
					
						
							| 
									
										
										
										
											2017-12-16 00:08:49 +08:00
										 |  |  | 		parser.state.current.addDependency(dep); | 
					
						
							|  |  |  | 		if(!parser.state.module) return; | 
					
						
							|  |  |  | 		parser.state.module.warnings.push(new UnsupportedFeatureWarning(parser.state.module, message)); | 
					
						
							| 
									
										
										
										
											2017-01-08 11:39:06 +08:00
										 |  |  | 		return true; | 
					
						
							|  |  |  | 	}; | 
					
						
							|  |  |  | }; | 
					
						
							| 
									
										
										
										
											2017-01-09 17:34:47 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-01-11 20:11:06 +08:00
										 |  |  | ParserHelpers.skipTraversal = function skipTraversal() { | 
					
						
							|  |  |  | 	return true; | 
					
						
							| 
									
										
										
										
											2017-01-12 16:39:06 +08:00
										 |  |  | }; | 
					
						
							| 
									
										
										
										
											2017-01-11 20:11:06 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | ParserHelpers.approve = function approve() { | 
					
						
							| 
									
										
										
										
											2017-01-09 17:34:47 +08:00
										 |  |  | 	return true; | 
					
						
							| 
									
										
										
										
											2017-01-12 16:39:06 +08:00
										 |  |  | }; |