/
index.js
108 lines (91 loc) · 2.82 KB
/
index.js
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
/**
* @file edp-provider-rider
* @author junmer[junmer@foxmail.com],
* Firede[firede@firede.us]
*/
var stylus = require('stylus');
var rider = require('rider');
var postcss = require('postcss');
var mqpacker = require('css-mqpacker');
var ap = require('autoprefixer-core');
var husl = require('husl');
/**
* 后处理器
*
* @param {Object} options 选项
* @param {Array|boolean=} options.autoprefixer Autoprefixer支持
* @param {boolean=} options.mqpacker mqpacker启用状态
* @param {Function} callback callback
* @return {Function} autoprefixer function
*/
function postprocessor(options, callback) {
var defaultBrowsers = ['Android >= 2.3', 'iOS >= 6', 'ExplorerMobile >= 10'];
return function (err, css) {
if (err) {
callback(err);
}
var processors = [];
if (options.autoprefixer !== false) {
processors.push(
ap({browsers: options.autoprefixer || defaultBrowsers})
);
}
if (options.mqpacker !== false) {
processors.push(mqpacker);
}
if (processors.length > 0) {
return postcss(processors).process(css).css;
}
return css;
};
}
/**
* 编译
*
* @param {Object} options options
* @param {boolean=} options.implicit 引入rider
* @param {Array|boolean=} options.autoprefixer autoprefixer支持
* @param {boolean=} options.husl husl支持
* @param {boolean=} options.resolveUrl resolve url
* @param {Function=} options.use use
* @param {Function=} callback provider callback
*/
function plugin(options, callback) {
options = options || {};
return function (style) {
if (options.resolveUrl !== false) {
style.define('url', stylus.resolver());
}
style.use(
rider({
implicit: options.implicit
})
);
style.on('end', postprocessor(options, callback));
if (options.husl) {
// define husl & huslp
style.define('husl', function (H, S, L, A) {
var rgb = husl._rgbPrepare(husl._conv.husl.rgb([H.val, S.val, L.val]));
var a = (A !== undefined ? A.val : 1);
return new stylus.nodes.RGBA(rgb[0], rgb[1], rgb[2], a);
});
style.define('huslp', function (H, S, L, A) {
var rgb = husl._rgbPrepare(husl._conv.huslp.rgb([H.val, S.val, L.val]));
var a = (A !== undefined ? A.val : 1);
return new stylus.nodes.RGBA(rgb[0], rgb[1], rgb[2], a);
});
}
if (options.use) {
style.use(options.use);
}
};
}
module.exports = exports = {
stylus: stylus,
rider: rider,
autoprefixer: ap,
husl: husl,
plugin: plugin,
postcss: postcss,
mqpacker: mqpacker
};