| 
									
										
										
										
											2015-01-13 00:45:30 +08:00
										 |  |  | /* | 
					
						
							|  |  |  | 	MIT License http://www.opensource.org/licenses/mit-license.php
 | 
					
						
							|  |  |  | 	Author Tobias Koppers @sokra | 
					
						
							|  |  |  | */ | 
					
						
							|  |  |  | var AbstractPlugin = require("../AbstractPlugin"); | 
					
						
							|  |  |  | var HarmonyImportDependency = require("./HarmonyImportDependency"); | 
					
						
							|  |  |  | var HarmonyImportSpecifierDependency = require("./HarmonyImportSpecifierDependency"); | 
					
						
							| 
									
										
										
										
											2015-11-02 06:27:53 +08:00
										 |  |  | var HarmonyAcceptImportDependency = require("./HarmonyAcceptImportDependency"); | 
					
						
							|  |  |  | var HarmonyAcceptDependency = require("./HarmonyAcceptDependency"); | 
					
						
							| 
									
										
										
										
											2015-01-13 00:45:30 +08:00
										 |  |  | var HarmonyModulesHelpers = require("./HarmonyModulesHelpers"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | module.exports = AbstractPlugin.create({ | 
					
						
							|  |  |  | 	"import": function(statement, source) { | 
					
						
							|  |  |  | 		var dep = new HarmonyImportDependency(source, HarmonyModulesHelpers.getNewModuleVar(this.state, source), statement.range); | 
					
						
							|  |  |  | 		dep.loc = statement.loc; | 
					
						
							|  |  |  | 		this.state.current.addDependency(dep); | 
					
						
							| 
									
										
										
										
											2015-10-22 03:05:01 +08:00
										 |  |  | 		this.state.lastHarmonyImport = dep; | 
					
						
							| 
									
										
										
										
											2016-05-06 16:44:31 +08:00
										 |  |  | 		this.state.module.strict = true; | 
					
						
							| 
									
										
										
										
											2015-01-13 00:45:30 +08:00
										 |  |  | 		return true; | 
					
						
							|  |  |  | 	}, | 
					
						
							|  |  |  | 	"import specifier": function(statement, source, id, name) { | 
					
						
							|  |  |  | 		this.scope.definitions.length--; | 
					
						
							| 
									
										
										
										
											2015-04-28 02:22:13 +08:00
										 |  |  | 		this.scope.renames["$" + name] = "imported var"; | 
					
						
							| 
									
										
										
										
											2015-01-13 00:45:30 +08:00
										 |  |  | 		if(!this.state.harmonySpecifier) this.state.harmonySpecifier = {}; | 
					
						
							| 
									
										
										
										
											2015-10-22 03:05:01 +08:00
										 |  |  | 		this.state.harmonySpecifier["$" + name] = [this.state.lastHarmonyImport, HarmonyModulesHelpers.getModuleVar(this.state, source), id]; | 
					
						
							| 
									
										
										
										
											2015-01-13 00:45:30 +08:00
										 |  |  | 		return true; | 
					
						
							|  |  |  | 	}, | 
					
						
							|  |  |  | 	"expression imported var": function(expr) { | 
					
						
							|  |  |  | 		var name = expr.name; | 
					
						
							| 
									
										
										
										
											2015-04-28 02:22:13 +08:00
										 |  |  | 		var settings = this.state.harmonySpecifier["$" + name]; | 
					
						
							| 
									
										
										
										
											2015-10-22 03:05:01 +08:00
										 |  |  | 		var dep = new HarmonyImportSpecifierDependency(settings[0], settings[1], settings[2], name, expr.range); | 
					
						
							| 
									
										
										
										
											2016-06-04 21:22:47 +08:00
										 |  |  | 		dep.shorthand = this.scope.inShorthand; | 
					
						
							| 
									
										
										
										
											2015-01-13 00:45:30 +08:00
										 |  |  | 		dep.loc = expr.loc; | 
					
						
							|  |  |  | 		this.state.current.addDependency(dep); | 
					
						
							|  |  |  | 		return true; | 
					
						
							| 
									
										
										
										
											2015-11-02 06:27:53 +08:00
										 |  |  | 	}, | 
					
						
							| 
									
										
										
										
											2016-06-29 07:17:15 +08:00
										 |  |  | 	"expression imported var.*": function(expr) { | 
					
						
							|  |  |  | 		var name = expr.object.name; | 
					
						
							|  |  |  | 		var settings = this.state.harmonySpecifier["$" + name]; | 
					
						
							|  |  |  | 		if(settings[2] !== null) | 
					
						
							|  |  |  | 			return false; | 
					
						
							|  |  |  | 		var dep = new HarmonyImportSpecifierDependency(settings[0], settings[1], expr.property.name, name, expr.range); | 
					
						
							|  |  |  | 		dep.shorthand = this.scope.inShorthand; | 
					
						
							|  |  |  | 		dep.loc = expr.loc; | 
					
						
							|  |  |  | 		this.state.current.addDependency(dep); | 
					
						
							|  |  |  | 		return true; | 
					
						
							|  |  |  | 	}, | 
					
						
							| 
									
										
										
										
											2016-02-13 17:00:47 +08:00
										 |  |  | 	"call imported var": function(expr) { | 
					
						
							| 
									
										
										
										
											2016-02-22 22:18:13 +08:00
										 |  |  | 		var args = expr.arguments; | 
					
						
							| 
									
										
										
										
											2016-05-14 20:33:04 +08:00
										 |  |  | 		var fullExpr = expr; | 
					
						
							| 
									
										
										
										
											2016-02-13 17:00:47 +08:00
										 |  |  | 		expr = expr.callee; | 
					
						
							|  |  |  | 		var name = expr.name; | 
					
						
							|  |  |  | 		var settings = this.state.harmonySpecifier["$" + name]; | 
					
						
							|  |  |  | 		var dep = new HarmonyImportSpecifierDependency(settings[0], settings[1], settings[2], name, expr.range); | 
					
						
							| 
									
										
										
										
											2016-05-14 20:33:04 +08:00
										 |  |  | 		dep.callArgs = args; | 
					
						
							|  |  |  | 		dep.call = fullExpr; | 
					
						
							| 
									
										
										
										
											2016-02-13 17:00:47 +08:00
										 |  |  | 		dep.loc = expr.loc; | 
					
						
							|  |  |  | 		this.state.current.addDependency(dep); | 
					
						
							| 
									
										
										
										
											2016-02-22 22:18:13 +08:00
										 |  |  | 		if(args) | 
					
						
							|  |  |  | 			this.walkExpressions(args); | 
					
						
							| 
									
										
										
										
											2016-02-13 17:00:47 +08:00
										 |  |  | 		return true; | 
					
						
							|  |  |  | 	}, | 
					
						
							| 
									
										
										
										
											2015-11-02 06:27:53 +08:00
										 |  |  | 	"hot accept callback": function(expr, requests) { | 
					
						
							|  |  |  | 		var dependencies = requests.filter(function(request) { | 
					
						
							|  |  |  | 			return HarmonyModulesHelpers.checkModuleVar(this.state, request); | 
					
						
							|  |  |  | 		}, this).map(function(request) { | 
					
						
							|  |  |  | 			var dep = new HarmonyAcceptImportDependency(request, HarmonyModulesHelpers.getModuleVar(this.state, request), expr.range); | 
					
						
							|  |  |  | 			dep.loc = expr.loc; | 
					
						
							|  |  |  | 			this.state.current.addDependency(dep); | 
					
						
							|  |  |  | 			return dep; | 
					
						
							|  |  |  | 		}, this); | 
					
						
							|  |  |  | 		if(dependencies.length > 0) { | 
					
						
							| 
									
										
										
										
											2016-06-04 23:31:03 +08:00
										 |  |  | 			var dep = new HarmonyAcceptDependency(expr.range, dependencies, true); | 
					
						
							|  |  |  | 			dep.loc = expr.loc; | 
					
						
							|  |  |  | 			this.state.current.addDependency(dep); | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	}, | 
					
						
							|  |  |  | 	"hot accept without callback": function(expr, requests) { | 
					
						
							|  |  |  | 		var dependencies = requests.filter(function(request) { | 
					
						
							|  |  |  | 			return HarmonyModulesHelpers.checkModuleVar(this.state, request); | 
					
						
							|  |  |  | 		}, this).map(function(request) { | 
					
						
							|  |  |  | 			var dep = new HarmonyAcceptImportDependency(request, HarmonyModulesHelpers.getModuleVar(this.state, request), expr.range); | 
					
						
							|  |  |  | 			dep.loc = expr.loc; | 
					
						
							|  |  |  | 			this.state.current.addDependency(dep); | 
					
						
							|  |  |  | 			return dep; | 
					
						
							|  |  |  | 		}, this); | 
					
						
							|  |  |  | 		if(dependencies.length > 0) { | 
					
						
							|  |  |  | 			var dep = new HarmonyAcceptDependency(expr.range, dependencies, false); | 
					
						
							| 
									
										
										
										
											2015-11-02 06:27:53 +08:00
										 |  |  | 			dep.loc = expr.loc; | 
					
						
							|  |  |  | 			this.state.current.addDependency(dep); | 
					
						
							|  |  |  | 		} | 
					
						
							| 
									
										
										
										
											2015-01-13 00:45:30 +08:00
										 |  |  | 	} | 
					
						
							|  |  |  | }); |