| 
									
										
										
										
											2015-05-13 06:17:06 +08:00
										 |  |  | /* | 
					
						
							|  |  |  | 	MIT License http://www.opensource.org/licenses/mit-license.php
 | 
					
						
							|  |  |  | 	Author Tobias Koppers @sokra | 
					
						
							|  |  |  | */ | 
					
						
							|  |  |  | var DelegatedModule = require("./DelegatedModule"); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-05-18 05:03:21 +08:00
										 |  |  | // options.source
 | 
					
						
							|  |  |  | // options.type
 | 
					
						
							|  |  |  | // options.context
 | 
					
						
							|  |  |  | // options.scope
 | 
					
						
							|  |  |  | // options.content
 | 
					
						
							| 
									
										
										
										
											2015-05-13 06:17:06 +08:00
										 |  |  | function DelegatedModuleFactoryPlugin(options) { | 
					
						
							|  |  |  | 	this.options = options; | 
					
						
							|  |  |  | 	options.type = options.type || "require"; | 
					
						
							| 
									
										
										
										
											2015-05-18 05:03:21 +08:00
										 |  |  | 	options.extensions = options.extensions || ["", ".js"]; | 
					
						
							| 
									
										
										
										
											2015-05-13 06:17:06 +08:00
										 |  |  | } | 
					
						
							|  |  |  | module.exports = DelegatedModuleFactoryPlugin; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | DelegatedModuleFactoryPlugin.prototype.apply = function(normalModuleFactory) { | 
					
						
							| 
									
										
										
										
											2015-05-18 05:03:21 +08:00
										 |  |  | 	var scope = this.options.scope; | 
					
						
							| 
									
										
										
										
											2015-07-16 06:19:23 +08:00
										 |  |  | 	if(scope) { | 
					
						
							| 
									
										
										
										
											2015-05-18 05:03:21 +08:00
										 |  |  | 		normalModuleFactory.plugin("factory", function(factory) { | 
					
						
							|  |  |  | 			return function(data, callback) { | 
					
						
							|  |  |  | 				var dependency = data.dependency; | 
					
						
							|  |  |  | 				var request = dependency.request; | 
					
						
							| 
									
										
										
										
											2015-07-16 06:19:23 +08:00
										 |  |  | 				if(request && request.indexOf(scope + "/") === 0) { | 
					
						
							| 
									
										
										
										
											2015-05-18 05:03:21 +08:00
										 |  |  | 					var innerRequest = "." + request.substr(scope.length); | 
					
						
							| 
									
										
										
										
											2015-07-16 06:19:23 +08:00
										 |  |  | 					for(var i = 0; i < this.options.extensions.length; i++) { | 
					
						
							| 
									
										
										
										
											2015-05-18 05:03:21 +08:00
										 |  |  | 						var requestPlusExt = innerRequest + this.options.extensions[i]; | 
					
						
							| 
									
										
										
										
											2015-07-16 06:19:23 +08:00
										 |  |  | 						if(requestPlusExt in this.options.content) { | 
					
						
							| 
									
										
										
										
											2015-05-18 05:03:21 +08:00
										 |  |  | 							var resolved = this.options.content[requestPlusExt]; | 
					
						
							|  |  |  | 							return callback(null, new DelegatedModule(this.options.source, resolved, this.options.type, requestPlusExt)); | 
					
						
							|  |  |  | 						} | 
					
						
							|  |  |  | 					} | 
					
						
							|  |  |  | 				} | 
					
						
							|  |  |  | 				return factory(data, callback); | 
					
						
							|  |  |  | 			}.bind(this); | 
					
						
							|  |  |  | 		}.bind(this)); | 
					
						
							|  |  |  | 	} else { | 
					
						
							|  |  |  | 		normalModuleFactory.plugin("module", function(module) { | 
					
						
							| 
									
										
										
										
											2015-07-16 06:19:23 +08:00
										 |  |  | 			if(module.libIdent) { | 
					
						
							| 
									
										
										
										
											2015-05-18 05:03:21 +08:00
										 |  |  | 				var request = module.libIdent(this.options); | 
					
						
							| 
									
										
										
										
											2015-07-16 06:19:23 +08:00
										 |  |  | 				if(request && request in this.options.content) { | 
					
						
							| 
									
										
										
										
											2015-05-18 05:03:21 +08:00
										 |  |  | 					var resolved = this.options.content[request]; | 
					
						
							|  |  |  | 					return new DelegatedModule(this.options.source, resolved, this.options.type, request); | 
					
						
							|  |  |  | 				} | 
					
						
							| 
									
										
										
										
											2015-05-17 00:27:59 +08:00
										 |  |  | 			} | 
					
						
							| 
									
										
										
										
											2015-05-18 05:03:21 +08:00
										 |  |  | 			return module; | 
					
						
							|  |  |  | 		}.bind(this)); | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2015-05-13 06:17:06 +08:00
										 |  |  | }; |