-
Notifications
You must be signed in to change notification settings - Fork 6
/
index.js
86 lines (76 loc) · 2.92 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
import postcss from 'postcss';
import pretty from 'pretty-hrtime';
import reporter from 'postcss-reporter';
import convert from 'convert-hrtime';
import isPromise from 'is-promise';
import {hrtimeAdd} from 'jsprim';
import formatter, {formatSummaryResults} from './lib/formatter';
const updateSummary = (summary, {plugin, rawTime}, {precise}) => {
const summaryForPlugin = summary[plugin] || {rawTime: [0, 0]};
const newRawTime = hrtimeAdd(summaryForPlugin.rawTime, rawTime);
const formatted = pretty(newRawTime, {precise});
const text = 'Completed in ' + pretty(newRawTime, {precise});
const time = convert(newRawTime);
return {
...summary,
[plugin]: {rawTime: newRawTime, formatted, text, time},
};
};
function getMessage (plugin, completed, precise) {
const formatted = pretty(completed, {precise});
return {
plugin,
formatted,
text: `Completed in ${formatted}`,
time: convert(completed),
rawTime: completed,
_devtools: true,
};
}
export default postcss.plugin('postcss-devtools', (opts) => {
const {precise, silent} = {
precise: false,
silent: false,
...opts,
};
let summaryResults = {};
const devtools = (css, result) => {
result.processor.plugins = result.processor.plugins.map(proc => {
if (proc.postcssPlugin === 'postcss-devtools') {
return proc;
}
let wrappedPlugin = (styles, res) => {
let completed;
return new Promise(resolve => {
const timer = process.hrtime();
const p = proc(styles, res);
if (isPromise(p)) {
p.then(() => {
completed = process.hrtime(timer);
const message = getMessage(proc.postcssPlugin, completed, precise);
res.messages.push(message);
summaryResults = updateSummary(summaryResults, message, {precise, silent});
resolve();
});
} else {
completed = process.hrtime(timer);
const message = getMessage(proc.postcssPlugin, completed, precise);
res.messages.push(message);
summaryResults = updateSummary(summaryResults, message, {precise, silent});
resolve();
}
});
};
wrappedPlugin.postcssPlugin = proc.postcssPlugin;
wrappedPlugin.postcssVersion = proc.postcssVersion;
return wrappedPlugin;
});
if (!silent) {
result.processor.use(reporter({formatter: formatter}));
}
};
devtools.printSummary = () => {
console.log(formatSummaryResults(summaryResults));
};
return devtools;
});