| 
									
										
										
										
											2013-01-31 01:49:25 +08:00
										 |  |  | /* | 
					
						
							|  |  |  | 	MIT License http://www.opensource.org/licenses/mit-license.php
 | 
					
						
							|  |  |  | 	Author Tobias Koppers @sokra | 
					
						
							|  |  |  | */ | 
					
						
							| 
									
										
										
										
											2014-03-03 21:56:17 +08:00
										 |  |  | var ConstDependency = require("./ConstDependency"); | 
					
						
							| 
									
										
										
										
											2013-01-31 01:49:25 +08:00
										 |  |  | var CommonJsRequireDependency = require("./CommonJsRequireDependency"); | 
					
						
							|  |  |  | var CommonJsRequireContextDependency = require("./CommonJsRequireContextDependency"); | 
					
						
							|  |  |  | 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"); | 
					
						
							| 
									
										
										
										
											2014-01-24 01:35:56 +08:00
										 |  |  | var RequireHeaderDependency = require("./RequireHeaderDependency"); | 
					
						
							| 
									
										
										
										
											2013-01-31 01:49:25 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | var NullFactory = require("../NullFactory"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var RequireResolveDependencyParserPlugin = require("./RequireResolveDependencyParserPlugin"); | 
					
						
							|  |  |  | var CommonJsRequireDependencyParserPlugin = require("./CommonJsRequireDependencyParserPlugin"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var BasicEvaluatedExpression = require("../BasicEvaluatedExpression"); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-03-11 23:08:22 +08:00
										 |  |  | function CommonJsPlugin(options) { | 
					
						
							|  |  |  | 	this.options = options; | 
					
						
							| 
									
										
										
										
											2013-01-31 01:49:25 +08:00
										 |  |  | } | 
					
						
							|  |  |  | module.exports = CommonJsPlugin; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | CommonJsPlugin.prototype.apply = function(compiler) { | 
					
						
							| 
									
										
										
										
											2014-10-13 22:10:19 +08:00
										 |  |  | 	function setTypeof(expr, value) { | 
					
						
							|  |  |  | 		compiler.parser.plugin("evaluate typeof " + expr, function(expr) { | 
					
						
							|  |  |  | 			return new BasicEvaluatedExpression().setString(value).setRange(expr.range); | 
					
						
							|  |  |  | 		}); | 
					
						
							|  |  |  | 		compiler.parser.plugin("typeof " + expr, function(expr) { | 
					
						
							|  |  |  | 			var dep = new ConstDependency(JSON.stringify(value), expr.range); | 
					
						
							|  |  |  | 			dep.loc = expr.loc; | 
					
						
							|  |  |  | 			this.state.current.addDependency(dep); | 
					
						
							|  |  |  | 			return true; | 
					
						
							|  |  |  | 		}); | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2013-01-31 01:49:25 +08:00
										 |  |  | 	compiler.plugin("compilation", function(compilation, params) { | 
					
						
							|  |  |  | 		var normalModuleFactory = params.normalModuleFactory; | 
					
						
							|  |  |  | 		var contextModuleFactory = params.contextModuleFactory; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		compilation.dependencyFactories.set(CommonJsRequireDependency, normalModuleFactory); | 
					
						
							|  |  |  | 		compilation.dependencyTemplates.set(CommonJsRequireDependency, new CommonJsRequireDependency.Template()); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		compilation.dependencyFactories.set(CommonJsRequireContextDependency, contextModuleFactory); | 
					
						
							|  |  |  | 		compilation.dependencyTemplates.set(CommonJsRequireContextDependency, new CommonJsRequireContextDependency.Template()); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		compilation.dependencyFactories.set(RequireResolveDependency, normalModuleFactory); | 
					
						
							|  |  |  | 		compilation.dependencyTemplates.set(RequireResolveDependency, new RequireResolveDependency.Template()); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-02-21 03:40:40 +08:00
										 |  |  | 		compilation.dependencyFactories.set(RequireResolveContextDependency, contextModuleFactory); | 
					
						
							|  |  |  | 		compilation.dependencyTemplates.set(RequireResolveContextDependency, new RequireResolveContextDependency.Template()); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-01-31 01:49:25 +08:00
										 |  |  | 		compilation.dependencyFactories.set(RequireResolveHeaderDependency, new NullFactory()); | 
					
						
							|  |  |  | 		compilation.dependencyTemplates.set(RequireResolveHeaderDependency, new RequireResolveHeaderDependency.Template()); | 
					
						
							| 
									
										
										
										
											2014-01-24 01:35:56 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | 		compilation.dependencyFactories.set(RequireHeaderDependency, new NullFactory()); | 
					
						
							|  |  |  | 		compilation.dependencyTemplates.set(RequireHeaderDependency, new RequireHeaderDependency.Template()); | 
					
						
							| 
									
										
										
										
											2013-01-31 01:49:25 +08:00
										 |  |  | 	}); | 
					
						
							| 
									
										
										
										
											2014-10-13 22:10:19 +08:00
										 |  |  | 	setTypeof("require", "function"); | 
					
						
							|  |  |  | 	setTypeof("require.resolve", "function"); | 
					
						
							|  |  |  | 	setTypeof("require.resolveWeak", "function"); | 
					
						
							| 
									
										
										
										
											2013-02-08 07:18:47 +08:00
										 |  |  | 	compiler.parser.plugin("evaluate typeof module", function(expr) { | 
					
						
							|  |  |  | 		return new BasicEvaluatedExpression().setString("object").setRange(expr.range); | 
					
						
							|  |  |  | 	}); | 
					
						
							| 
									
										
										
										
											2014-01-31 17:57:28 +08:00
										 |  |  | 	compiler.parser.plugin("assign require", function(expr) { | 
					
						
							| 
									
										
										
										
											2014-03-03 21:56:17 +08:00
										 |  |  | 		// to not leak to global "require", we need to define a local require here.
 | 
					
						
							|  |  |  | 		var dep = new ConstDependency("var require;", 0); | 
					
						
							|  |  |  | 		dep.loc = expr.loc; | 
					
						
							|  |  |  | 		this.state.current.addDependency(dep); | 
					
						
							| 
									
										
										
										
											2014-03-03 22:14:54 +08:00
										 |  |  | 		this.scope.definitions.push("require"); | 
					
						
							| 
									
										
										
										
											2014-01-31 17:57:28 +08:00
										 |  |  | 		return true; | 
					
						
							|  |  |  | 	}); | 
					
						
							| 
									
										
										
										
											2015-04-24 05:55:50 +08:00
										 |  |  | 	compiler.parser.plugin("can-rename require", function() { | 
					
						
							| 
									
										
										
										
											2014-07-03 03:34:29 +08:00
										 |  |  | 		return true; | 
					
						
							|  |  |  | 	}); | 
					
						
							| 
									
										
										
										
											2014-01-31 17:57:28 +08:00
										 |  |  | 	compiler.parser.plugin("rename require", function(expr) { | 
					
						
							| 
									
										
										
										
											2014-07-03 03:34:29 +08:00
										 |  |  | 		// define the require variable. It's still undefined, but not "not defined".
 | 
					
						
							| 
									
										
										
										
											2014-03-03 21:56:17 +08:00
										 |  |  | 		var dep = new ConstDependency("var require;", 0); | 
					
						
							|  |  |  | 		dep.loc = expr.loc; | 
					
						
							|  |  |  | 		this.state.current.addDependency(dep); | 
					
						
							| 
									
										
										
										
											2014-01-31 17:57:28 +08:00
										 |  |  | 		return false; | 
					
						
							|  |  |  | 	}); | 
					
						
							| 
									
										
										
										
											2015-04-24 05:55:50 +08:00
										 |  |  | 	compiler.parser.plugin("typeof module", function() { | 
					
						
							| 
									
										
										
										
											2013-10-14 19:59:52 +08:00
										 |  |  | 		return true; | 
					
						
							|  |  |  | 	}); | 
					
						
							| 
									
										
										
										
											2013-02-08 07:18:47 +08:00
										 |  |  | 	compiler.parser.plugin("evaluate typeof exports", function(expr) { | 
					
						
							|  |  |  | 		return new BasicEvaluatedExpression().setString("object").setRange(expr.range); | 
					
						
							|  |  |  | 	}); | 
					
						
							| 
									
										
										
										
											2013-01-31 01:49:25 +08:00
										 |  |  | 	compiler.parser.apply( | 
					
						
							| 
									
										
										
										
											2014-03-11 23:08:22 +08:00
										 |  |  | 		new CommonJsRequireDependencyParserPlugin(this.options), | 
					
						
							|  |  |  | 		new RequireResolveDependencyParserPlugin(this.options) | 
					
						
							| 
									
										
										
										
											2013-01-31 01:49:25 +08:00
										 |  |  | 	); | 
					
						
							| 
									
										
										
										
											2015-07-08 20:39:02 +08:00
										 |  |  | }; |