| 
									
										
										
										
											2014-01-24 01:35:56 +08:00
										 |  |  | /* | 
					
						
							|  |  |  | 	MIT License http://www.opensource.org/licenses/mit-license.php
 | 
					
						
							|  |  |  | 	Author Tobias Koppers @sokra | 
					
						
							|  |  |  | */ | 
					
						
							|  |  |  | var LocalModule = require("./LocalModule"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var LocalModulesHelpers = exports; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | LocalModulesHelpers.addLocalModule = function(state, name) { | 
					
						
							| 
									
										
										
										
											2015-07-16 06:19:23 +08:00
										 |  |  | 	if(!state.localModules) state.localModules = []; | 
					
						
							| 
									
										
										
										
											2014-01-24 01:35:56 +08:00
										 |  |  | 	var m = new LocalModule(state.module, name, state.localModules.length); | 
					
						
							|  |  |  | 	state.localModules.push(m); | 
					
						
							|  |  |  | 	return m; | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-01-31 14:37:43 +08:00
										 |  |  | LocalModulesHelpers.getLocalModule = function(state, name, namedModule) { | 
					
						
							| 
									
										
										
										
											2015-07-16 06:19:23 +08:00
										 |  |  | 	if(!state.localModules) return null; | 
					
						
							|  |  |  | 	if(namedModule) { | 
					
						
							| 
									
										
										
										
											2015-01-31 14:37:43 +08:00
										 |  |  | 		// resolve dependency name relative to the defining named module
 | 
					
						
							| 
									
										
										
										
											2015-02-02 12:12:33 +08:00
										 |  |  | 		name = lookup(namedModule, name); | 
					
						
							| 
									
										
										
										
											2015-01-31 14:37:43 +08:00
										 |  |  | 	} | 
					
						
							| 
									
										
										
										
											2015-07-16 06:19:23 +08:00
										 |  |  | 	for(var i = 0; i < state.localModules.length; i++) { | 
					
						
							|  |  |  | 		if(state.localModules[i].name === name) | 
					
						
							| 
									
										
										
										
											2014-01-24 01:35:56 +08:00
										 |  |  | 			return state.localModules[i]; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	return null; | 
					
						
							|  |  |  | }; | 
					
						
							| 
									
										
										
										
											2015-01-31 14:37:43 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-02-02 12:12:33 +08:00
										 |  |  | function lookup(parent, mod) { | 
					
						
							| 
									
										
										
										
											2015-07-16 06:19:23 +08:00
										 |  |  | 	if(mod.charAt(0) !== ".") return mod; | 
					
						
							| 
									
										
										
										
											2015-02-02 12:12:33 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-07-13 06:20:09 +08:00
										 |  |  | 	var path = parent.split("/"), | 
					
						
							|  |  |  | 		segs = mod.split("/"); | 
					
						
							| 
									
										
										
										
											2015-02-02 12:12:33 +08:00
										 |  |  | 	path.pop(); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-07-16 06:19:23 +08:00
										 |  |  | 	for(var i = 0; i < segs.length; i++) { | 
					
						
							| 
									
										
										
										
											2015-02-02 12:12:33 +08:00
										 |  |  | 		var seg = segs[i]; | 
					
						
							| 
									
										
										
										
											2015-07-16 06:19:23 +08:00
										 |  |  | 		if(seg === "..") path.pop(); | 
					
						
							|  |  |  | 		else if(seg !== ".") path.push(seg); | 
					
						
							| 
									
										
										
										
											2015-02-02 12:12:33 +08:00
										 |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-04-24 05:55:50 +08:00
										 |  |  | 	return path.join("/"); | 
					
						
							| 
									
										
										
										
											2015-01-31 14:37:43 +08:00
										 |  |  | } |