UNPKG

2.59 kBJavaScriptView Raw
1var extractImportUrlAndMedia = require('./extract-import-url-and-media');
2var restoreImport = require('./restore-import');
3var rewriteUrl = require('./rewrite-url');
4
5var Token = require('../tokenizer/token');
6var isImport = require('../utils/is-import');
7
8var SOURCE_MAP_COMMENT_PATTERN = /^\/\*# sourceMappingURL=(\S+) \*\/$/;
9
10function rebase(tokens, rebaseAll, validator, rebaseConfig) {
11 return rebaseAll ?
12 rebaseEverything(tokens, validator, rebaseConfig) :
13 rebaseAtRules(tokens, validator, rebaseConfig);
14}
15
16function rebaseEverything(tokens, validator, rebaseConfig) {
17 var token;
18 var i, l;
19
20 for (i = 0, l = tokens.length; i < l; i++) {
21 token = tokens[i];
22
23 switch (token[0]) {
24 case Token.AT_RULE:
25 rebaseAtRule(token, validator, rebaseConfig);
26 break;
27 case Token.AT_RULE_BLOCK:
28 rebaseProperties(token[2], validator, rebaseConfig);
29 break;
30 case Token.COMMENT:
31 rebaseSourceMapComment(token, rebaseConfig);
32 break;
33 case Token.NESTED_BLOCK:
34 rebaseEverything(token[2], validator, rebaseConfig);
35 break;
36 case Token.RULE:
37 rebaseProperties(token[2], validator, rebaseConfig);
38 break;
39 }
40 }
41
42 return tokens;
43}
44
45function rebaseAtRules(tokens, validator, rebaseConfig) {
46 var token;
47 var i, l;
48
49 for (i = 0, l = tokens.length; i < l; i++) {
50 token = tokens[i];
51
52 switch (token[0]) {
53 case Token.AT_RULE:
54 rebaseAtRule(token, validator, rebaseConfig);
55 break;
56 }
57 }
58
59 return tokens;
60}
61
62function rebaseAtRule(token, validator, rebaseConfig) {
63 if (!isImport(token[1])) {
64 return;
65 }
66
67 var uriAndMediaQuery = extractImportUrlAndMedia(token[1]);
68 var newUrl = rewriteUrl(uriAndMediaQuery[0], rebaseConfig);
69 var mediaQuery = uriAndMediaQuery[1];
70
71 token[1] = restoreImport(newUrl, mediaQuery);
72}
73
74function rebaseSourceMapComment(token, rebaseConfig) {
75 var matches = SOURCE_MAP_COMMENT_PATTERN.exec(token[1]);
76
77 if (matches && matches[1].indexOf('data:') === -1) {
78 token[1] = token[1].replace(matches[1], rewriteUrl(matches[1], rebaseConfig, true));
79 }
80}
81
82function rebaseProperties(properties, validator, rebaseConfig) {
83 var property;
84 var value;
85 var i, l;
86 var j, m;
87
88 for (i = 0, l = properties.length; i < l; i++) {
89 property = properties[i];
90
91 for (j = 2 /* 0 is Token.PROPERTY, 1 is name */, m = property.length; j < m; j++) {
92 value = property[j][1];
93
94 if (validator.isUrl(value)) {
95 property[j][1] = rewriteUrl(value, rebaseConfig);
96 }
97 }
98 }
99}
100
101module.exports = rebase;