-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathfeather-combo.js
More file actions
115 lines (88 loc) · 3.44 KB
/
feather-combo.js
File metadata and controls
115 lines (88 loc) · 3.44 KB
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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
;(function(){
var Helper = require.helper, analyseNeedLoadUrls = define.Module.analyseNeedLoadUrls;
function unique(array){
var obj = {}, ret = [];
Helper.each(array, function(v){
if(obj[v]) return;
obj[v] = true;
ret.push(v);
});
return ret;
}
function dirname(path, onlyDomain){
var reg = /^(?:(?:(?:https?:)?\/\/)?[^\/]+)?\//, match;
match = path.match(reg);
return match ? match[0] : '/';
}
function hasThird(modules){
var r = false;
Helper.each(modules || [], function(module){
if(/(?:^|:)static\/(?:.+?\/)*third\//.test(module)){
r = true;
}
});
return r;
}
define.Module.analyseNeedLoadUrls = function(deps){
var needLoadUrlStores = analyseNeedLoadUrls(deps);
if(!require.config('combo')) return needLoadUrlStores;
var CSSEXP = /\.(?:css|less)(?:\?|$)/, needCombos = {'css': [], 'js': []}, finalNeedLoadUrlStores = [];
var combo = require.config('combo') || {}, maps = require.config('map');
var onlyUnPackFile = combo.onlyUnPackFile, comboMaxUrlLength = combo.maxUrlLength, comboSyntax = combo.syntax;
Helper.each(needLoadUrlStores, function(urlStore){
var url = urlStore.url;
var dir = dirname(url);
var subUrl = url.substring(dir.length - 1);
var map = maps[url] || maps[subUrl];
if(map && (onlyUnPackFile && map.length == 1 || !onlyUnPackFile) && !hasThird(urlStore.modules)){
if(CSSEXP.test(url)){
needCombos.css.push(urlStore);
}else{
needCombos.js.push(urlStore);
}
}else{
finalNeedLoadUrlStores.push(urlStore);
}
});
Helper.each(needCombos, function(combos, type){
var combosDirGroup = {};
Helper.each(combos, function(urlStore){
var url = urlStore.url, dir = dirname(url);
if(!combosDirGroup[dir]){
combosDirGroup[dir] = [];
}
combosDirGroup[dir].push(url);
});
Helper.each(combosDirGroup, function(urls, dir){
urls = unique(urls);
if(urls.length > 1){
var items = [], tUrlStoreModules = [], dirLength = dir.length, len = 0;
Helper.each(urls, function(url){
len += url.length - dirLength;
var part = parseInt(len / comboMaxUrlLength);
if(!items[part]){
items[part] = [];
tUrlStoreModules[part] = [];
}
items[part].push(url.substring(dirLength));
tUrlStoreModules[part] = tUrlStoreModules[part].concat(define.Module.getUrlStore(url).modules);
});
Helper.each(items, function(item, key){
var realUrl;
if(item.length > 1){
realUrl = dir + comboSyntax[0] + item.join(comboSyntax[1]);
}else{
realUrl = dir + item[0];
}
var comboUrlStore = define.Module.getUrlStore(realUrl);
comboUrlStore.modules = tUrlStoreModules[key];
finalNeedLoadUrlStores.push(comboUrlStore);
});
}else if(urls.length == 1){
finalNeedLoadUrlStores.push(define.Module.getUrlStore(urls[0]));
}
});
});
return finalNeedLoadUrlStores;
}
})();