util.js
2.02 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
const gulp = require("gulp");
const isFunction = o => {
return {}.toString.call(o) === "[object Function]";
}
module.exports = {
_task: (defrels = []) => {
return (taskName, rels, cb) => {
if(isFunction(rels)) {
cb = rels;
rels = defrels;
} else {
rels = defrels.concat(rels || []);
}
return gulp.task(taskName, rels, cb);
}
},
getMd5: md5path => {
let md5 = md5path.replace(/[\s\S]*-([a-zA-Z0-9]{10})\.?[\s\S]*/g, "$1");
return md5;
},
args: function (key) {
const args = process.argv.slice(2);
let value = "";
key = `--${key}`;
args.every(arg => {
let arr = arg.split("=");
if (arr[0] != key) return true;
value = arr[1];
return false;
});
return value;
},
scopeCss: function (css, parent) {
if (!css) return css;
if (!parent) return css;
var replace = function (css, replacer) {
//strip block comments
css = css.replace(/\/\*([\s\S]*?)\*\//g, '');
return css.replace(/([^\r\n,{}]+)(,(?=[^}]*{)|\s*{)/g, replacer);
};
css = replace(css, parent + ' $1$2');
//regexp.escape
var parentRe = parent.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&');
//replace self-selectors
css = css.replace(new RegExp('(' + parentRe + ')\\s*\\1(?=[\\s\\r\\n,{])', 'g'), '$1');
//replace `:host` with parent
css = css.replace(new RegExp('(' + parentRe + ')\\s*:host', 'g'), '$1');
//revoke wrongly replaced @ statements, like @supports, @import, @media etc.
css = css.replace(new RegExp('(' + parentRe + ')\\s*@', 'g'), '@');
css = css.replace(new RegExp('(' + parentRe + ')\\s*(body|html)\\s*{', 'g'), '$1{');
//revoke wrongly replaced :root blocks
css = css.replace(new RegExp('(' + parentRe + ')\\s*:root', 'g'), ':root');
return css;
},
}