| 
									
										
										
										
											2013-01-31 01:49:25 +08:00
										 |  |  | /* | 
					
						
							|  |  |  | 	MIT License http://www.opensource.org/licenses/mit-license.php
 | 
					
						
							|  |  |  | 	Author Tobias Koppers @sokra | 
					
						
							|  |  |  | */ | 
					
						
							|  |  |  | var RequireResolveDependency = require("./RequireResolveDependency"); | 
					
						
							| 
									
										
										
										
											2013-02-21 03:40:40 +08:00
										 |  |  | var RequireResolveContextDependency = require("./RequireResolveContextDependency"); | 
					
						
							| 
									
										
										
										
											2013-01-31 01:49:25 +08:00
										 |  |  | var RequireResolveHeaderDependency = require("./RequireResolveHeaderDependency"); | 
					
						
							| 
									
										
										
										
											2013-02-21 03:40:40 +08:00
										 |  |  | var ContextDependencyHelpers = require("./ContextDependencyHelpers"); | 
					
						
							| 
									
										
										
										
											2013-01-31 01:49:25 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-03-11 23:08:22 +08:00
										 |  |  | function RequireResolveDependencyParserPlugin(options) { | 
					
						
							|  |  |  | 	this.options = options; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | module.exports = RequireResolveDependencyParserPlugin; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | RequireResolveDependencyParserPlugin.prototype.apply = function(parser) { | 
					
						
							|  |  |  | 	var options = this.options; | 
					
						
							|  |  |  | 	parser.plugin("call require.resolve", function(expr) { | 
					
						
							| 
									
										
										
										
											2015-04-24 05:55:50 +08:00
										 |  |  | 		return this.applyPluginsBailResult("call require.resolve(Weak)", expr, false); | 
					
						
							| 
									
										
										
										
											2014-10-13 22:10:19 +08:00
										 |  |  | 	}); | 
					
						
							|  |  |  | 	parser.plugin("call require.resolveWeak", function(expr) { | 
					
						
							| 
									
										
										
										
											2015-04-24 05:55:50 +08:00
										 |  |  | 		return this.applyPluginsBailResult("call require.resolve(Weak)", expr, true); | 
					
						
							| 
									
										
										
										
											2014-10-13 22:10:19 +08:00
										 |  |  | 	}); | 
					
						
							|  |  |  | 	parser.plugin("call require.resolve(Weak)", function(expr, weak) { | 
					
						
							| 
									
										
										
										
											2015-07-16 06:19:23 +08:00
										 |  |  | 		if(expr.arguments.length !== 1) return; | 
					
						
							| 
									
										
										
										
											2013-01-31 01:49:25 +08:00
										 |  |  | 		var param = this.evaluateExpression(expr.arguments[0]); | 
					
						
							| 
									
										
										
										
											2015-05-11 00:31:58 +08:00
										 |  |  | 		var dep; | 
					
						
							| 
									
										
										
										
											2015-07-16 06:19:23 +08:00
										 |  |  | 		if(param.isConditional()) { | 
					
						
							| 
									
										
										
										
											2013-01-31 01:49:25 +08:00
										 |  |  | 			param.options.forEach(function(option) { | 
					
						
							| 
									
										
										
										
											2014-10-13 22:10:19 +08:00
										 |  |  | 				var result = this.applyPluginsBailResult("call require.resolve(Weak):item", expr, option, weak); | 
					
						
							| 
									
										
										
										
											2015-07-16 06:19:23 +08:00
										 |  |  | 				if(result === undefined) { | 
					
						
							| 
									
										
										
										
											2014-10-13 22:10:19 +08:00
										 |  |  | 					this.applyPluginsBailResult("call require.resolve(Weak):context", expr, option, weak); | 
					
						
							| 
									
										
										
										
											2013-01-31 01:49:25 +08:00
										 |  |  | 				} | 
					
						
							|  |  |  | 			}, this); | 
					
						
							| 
									
										
										
										
											2015-05-11 00:31:58 +08:00
										 |  |  | 			dep = new RequireResolveHeaderDependency(expr.callee.range); | 
					
						
							|  |  |  | 			dep.loc = expr.loc; | 
					
						
							|  |  |  | 			this.state.current.addDependency(dep); | 
					
						
							| 
									
										
										
										
											2013-01-31 01:49:25 +08:00
										 |  |  | 			return true; | 
					
						
							|  |  |  | 		} else { | 
					
						
							| 
									
										
										
										
											2014-10-13 22:10:19 +08:00
										 |  |  | 			var result = this.applyPluginsBailResult("call require.resolve(Weak):item", expr, param, weak); | 
					
						
							| 
									
										
										
										
											2015-07-16 06:19:23 +08:00
										 |  |  | 			if(result === undefined) { | 
					
						
							| 
									
										
										
										
											2014-10-13 22:10:19 +08:00
										 |  |  | 				this.applyPluginsBailResult("call require.resolve(Weak):context", expr, param, weak); | 
					
						
							| 
									
										
										
										
											2013-01-31 01:49:25 +08:00
										 |  |  | 			} | 
					
						
							| 
									
										
										
										
											2015-05-11 00:31:58 +08:00
										 |  |  | 			dep = new RequireResolveHeaderDependency(expr.callee.range); | 
					
						
							|  |  |  | 			dep.loc = expr.loc; | 
					
						
							|  |  |  | 			this.state.current.addDependency(dep); | 
					
						
							| 
									
										
										
										
											2013-01-31 01:49:25 +08:00
										 |  |  | 			return true; | 
					
						
							|  |  |  | 		} | 
					
						
							| 
									
										
										
										
											2014-03-11 23:08:22 +08:00
										 |  |  | 	}); | 
					
						
							| 
									
										
										
										
											2014-10-13 22:10:19 +08:00
										 |  |  | 	parser.plugin("call require.resolve(Weak):item", function(expr, param, weak) { | 
					
						
							| 
									
										
										
										
											2015-07-16 06:19:23 +08:00
										 |  |  | 		if(param.isString()) { | 
					
						
							| 
									
										
										
										
											2013-01-31 01:49:25 +08:00
										 |  |  | 			var dep = new RequireResolveDependency(param.string, param.range); | 
					
						
							|  |  |  | 			dep.loc = expr.loc; | 
					
						
							|  |  |  | 			dep.optional = !!this.scope.inTry; | 
					
						
							| 
									
										
										
										
											2014-10-13 22:10:19 +08:00
										 |  |  | 			dep.weak = weak; | 
					
						
							| 
									
										
										
										
											2013-01-31 01:49:25 +08:00
										 |  |  | 			this.state.current.addDependency(dep); | 
					
						
							|  |  |  | 			return true; | 
					
						
							|  |  |  | 		} | 
					
						
							| 
									
										
										
										
											2014-03-11 23:08:22 +08:00
										 |  |  | 	}); | 
					
						
							| 
									
										
										
										
											2014-10-13 22:10:19 +08:00
										 |  |  | 	parser.plugin("call require.resolve(Weak):context", function(expr, param, weak) { | 
					
						
							| 
									
										
										
										
											2014-03-11 23:08:22 +08:00
										 |  |  | 		var dep = ContextDependencyHelpers.create(RequireResolveContextDependency, param.range, param, expr, options); | 
					
						
							| 
									
										
										
										
											2015-07-16 06:19:23 +08:00
										 |  |  | 		if(!dep) return; | 
					
						
							| 
									
										
										
										
											2013-02-21 03:40:40 +08:00
										 |  |  | 		dep.loc = expr.loc; | 
					
						
							|  |  |  | 		dep.optional = !!this.scope.inTry; | 
					
						
							| 
									
										
										
										
											2014-10-13 22:10:19 +08:00
										 |  |  | 		dep.weak = weak; | 
					
						
							| 
									
										
										
										
											2013-02-21 03:40:40 +08:00
										 |  |  | 		this.state.current.addDependency(dep); | 
					
						
							|  |  |  | 		return true; | 
					
						
							| 
									
										
										
										
											2014-03-11 23:08:22 +08:00
										 |  |  | 	}); | 
					
						
							|  |  |  | }; |