Blame view

node_modules/enhanced-resolve/lib/AliasPlugin.js 1.71 KB
aaac7fed   liuqimichale   add
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
  /*
  	MIT License http://www.opensource.org/licenses/mit-license.php
  	Author Tobias Koppers @sokra
  */
  var createInnerCallback = require("./createInnerCallback");
  
  function startsWith(string, searchString) {
  	var stringLength = string.length;
  	var searchLength = searchString.length;
  
  	// early out if the search length is greater than the search string
  	if(searchLength > stringLength) {
  		return false;
  	}
  	var index = -1;
  	while(++index < searchLength) {
  		if(string.charCodeAt(index) !== searchString.charCodeAt(index)) {
  			return false;
  		}
  	}
  	return true;
  }
  
  function AliasPlugin(source, options, target) {
  	this.source = source;
  	this.name = options.name;
  	this.alias = options.alias;
  	this.onlyModule = options.onlyModule;
  	this.target = target;
  }
  module.exports = AliasPlugin;
  
  AliasPlugin.prototype.apply = function(resolver) {
  	var target = this.target;
  	var name = this.name;
  	var alias = this.alias;
  	var onlyModule = this.onlyModule;
  	resolver.plugin(this.source, function(request, callback) {
  		var innerRequest = request.request;
  		if(!innerRequest) return callback();
  		if(innerRequest === name || (!onlyModule && startsWith(innerRequest, name + "/"))) {
  			if(innerRequest !== alias && !startsWith(innerRequest, alias + "/")) {
  				var newRequestStr = alias + innerRequest.substr(name.length);
  				var obj = Object.assign({}, request, {
  					request: newRequestStr
  				});
  				return resolver.doResolve(target, obj, "aliased with mapping '" + name + "': '" + alias + "' to '" + newRequestStr + "'", createInnerCallback(function(err, result) {
  					if(arguments.length > 0) return callback(err, result);
  
  					// don't allow other aliasing or raw request
  					callback(null, null);
  				}, callback));
  			}
  		}
  		return callback();
  	});
  };