Skip to content

Commit 1f97332

Browse files
committed
refactor resolve function
1 parent e2d54ef commit 1f97332

File tree

3 files changed

+55
-14
lines changed

3 files changed

+55
-14
lines changed

lib/createResolver.js

+51
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
function startsWith(string, searchString) {
2+
var stringLength = string.length;
3+
var searchLength = searchString.length;
4+
5+
// early out if the search length is greater than the search string
6+
if(searchLength > stringLength) {
7+
return false;
8+
}
9+
var index = -1;
10+
while(++index < searchLength) {
11+
if(string.charCodeAt(index) !== searchString.charCodeAt(index)) {
12+
return false;
13+
}
14+
}
15+
return true;
16+
}
17+
18+
module.exports = function createResolver(alias) {
19+
if(typeof alias !== "object" || Array.isArray(alias)) {
20+
return function(url) { return url };
21+
}
22+
23+
alias = Object.keys(alias).map(function(key) {
24+
var onlyModule = false;
25+
var obj = alias[key];
26+
if(/\$$/.test(key)) {
27+
onlyModule = true;
28+
key = key.substr(0, key.length - 1);
29+
}
30+
if(typeof obj === "string") {
31+
obj = {
32+
alias: obj
33+
};
34+
}
35+
obj = Object.assign({
36+
name: key,
37+
onlyModule: onlyModule
38+
}, obj);
39+
return obj;
40+
});
41+
42+
return function(url) {
43+
alias.forEach(function(obj) {
44+
var name = obj.name;
45+
if(url === name || (!obj.onlyModule && startsWith(url, name + "/"))) {
46+
url = obj.alias + url.substr(name.length);
47+
}
48+
});
49+
return url;
50+
}
51+
}

lib/loader.js

+3-13
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ var loaderUtils = require("loader-utils");
66
var processCss = require("./processCss");
77
var getImportPrefix = require("./getImportPrefix");
88
var compileExports = require("./compile-exports");
9+
var createResolver = require("./createResolver");
910

1011

1112
module.exports = function(content, map) {
@@ -15,6 +16,7 @@ module.exports = function(content, map) {
1516
var root = query.root;
1617
var moduleMode = query.modules || query.module;
1718
var camelCaseKeys = query.camelCase || query.camelcase;
19+
var resolve = createResolver(query.alias);
1820

1921
if(map !== null && typeof map !== "string") {
2022
map = JSON.stringify(map);
@@ -69,19 +71,7 @@ module.exports = function(content, map) {
6971
var match = result.urlItemRegExp.exec(item);
7072
var idx = +match[1];
7173
var urlItem = result.urlItems[idx];
72-
var url = urlItem.url;
73-
var loaderOptions = this.options.cssLoader;
74-
if (loaderOptions && loaderOptions.alias) {
75-
var alias = loaderOptions.alias;
76-
Object.keys(alias).forEach(function(aliasName) {
77-
var aliasValue = alias[aliasName];
78-
var onlyModule = /\$$/.test(aliasName);
79-
if (onlyModule) aliasName = aliasName.substr(0, aliasName.length - 1);
80-
if ((!onlyModule && url.indexOf(aliasName + "/") === 0) || url === aliasName) {
81-
url = aliasValue + url.substr(aliasName.length);
82-
}
83-
});
84-
}
74+
var url = resolve(urlItem.url);
8575
idx = url.indexOf("?#");
8676
if(idx < 0) idx = url.indexOf("#");
8777
var urlRequest;

test/aliasTest.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ describe("alias", function() {
2020
};
2121

2222
function aliasOptions(alias) {
23-
return { options: { context: "", cssLoader: { alias: alias }}}
23+
return { query: { alias: alias }}
2424
}
2525

2626
test("without", css, exports.without);

0 commit comments

Comments
 (0)