UNPKG

3.84 kBJavaScriptView Raw
1'use strict';
2
3Object.defineProperty(exports, "__esModule", {
4 value: true
5});
6exports.printStats = exports.formatRequest = exports.parseRequst = exports.renderBar = exports.colorize = exports.BULLET = undefined;
7
8var _path = require('path');
9
10var _path2 = _interopRequireDefault(_path);
11
12var _chalk = require('chalk');
13
14var _chalk2 = _interopRequireDefault(_chalk);
15
16var _lodash = require('lodash');
17
18var _lodash2 = _interopRequireDefault(_lodash);
19
20var _figures = require('figures');
21
22var _figures2 = _interopRequireDefault(_figures);
23
24var _table = require('table');
25
26var _prettyTime = require('pretty-time');
27
28var _prettyTime2 = _interopRequireDefault(_prettyTime);
29
30var _description = require('./description');
31
32var _description2 = _interopRequireDefault(_description);
33
34function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
35
36const BAR_LENGTH = 25;
37const IS_WINDOWS = /^win/.test(process.platform);
38const BLOCK_CHAR = IS_WINDOWS ? ' ' : '█';
39const BLOCK_CHAR2 = IS_WINDOWS ? '=' : '█';
40const BAR_BEFORE = IS_WINDOWS ? '[' : '';
41const BAR_AFTER = IS_WINDOWS ? ']' : '';
42const NEXT = _chalk2.default.blue((0, _figures2.default)(' › '));
43
44const BULLET = exports.BULLET = (0, _figures2.default)('●');
45
46const colorize = exports.colorize = color => {
47 if (color[0] === '#') {
48 return _chalk2.default.hex(color);
49 }
50
51 return _chalk2.default.keyword(color);
52};
53
54const renderBar = exports.renderBar = (progress, color) => {
55 const w = progress * (BAR_LENGTH / 100);
56 const bg = _chalk2.default.white(BLOCK_CHAR);
57 const fg = colorize(color)(BLOCK_CHAR2);
58
59 return BAR_BEFORE + _lodash2.default.range(BAR_LENGTH).map(i => i < w ? fg : bg).join('') + BAR_AFTER;
60};
61
62const hasValue = s => s && s.length;
63
64const nodeModules = `${_path2.default.delimiter}node_modules${_path2.default.delimiter}`;
65const removeAfter = (delimiter, str) => _lodash2.default.first(str.split(delimiter));
66const removeBefore = (delimiter, str) => _lodash2.default.last(str.split(delimiter));
67
68const firstMatch = (regex, str) => {
69 const m = regex.exec(str);
70 return m ? m[0] : null;
71};
72
73const parseRequst = exports.parseRequst = requestStr => {
74 const parts = (requestStr || '').split('!');
75
76 const file = _path2.default.relative(process.cwd(), removeAfter('?', removeBefore(nodeModules, parts.pop())));
77
78 const loaders = _lodash2.default.uniq(parts.map(part => firstMatch(/[a-z]+-loader/, part)).filter(hasValue));
79
80 return {
81 file: hasValue(file) ? file : null,
82 loaders
83 };
84};
85
86const formatRequest = exports.formatRequest = request => {
87 const loaders = request.loaders.join(NEXT);
88 const format = _chalk2.default.grey;
89
90 if (!loaders.length) {
91 return format(request.file || '');
92 }
93
94 return format(`${loaders}${NEXT}${request.file}`);
95};
96
97const printStats = exports.printStats = allStats => {
98 Object.keys(allStats).forEach(category => {
99 const stats = allStats[category];
100
101 process.stderr.write(`\nStats by ${_chalk2.default.bold(_lodash2.default.startCase(category))}\n`);
102
103 let totalRequests = 0;
104 const totalTime = [0, 0];
105
106 const data = [[_lodash2.default.startCase(category), 'Requests', 'Time', 'Time/Request', 'Description']];
107
108 Object.keys(stats).forEach(item => {
109 const stat = stats[item];
110
111 totalRequests += stat.count || 0;
112
113 const description = (0, _description2.default)(category, item);
114
115 totalTime[0] += stat.time[0];
116 totalTime[1] += stat.time[1];
117
118 const avgTime = [stat.time[0] / stat.count, stat.time[1] / stat.count];
119
120 data.push([item, stat.count || '-', (0, _prettyTime2.default)(stat.time), (0, _prettyTime2.default)(avgTime), description]);
121 });
122
123 data.push(['Total', totalRequests, (0, _prettyTime2.default)(totalTime), '', '']);
124
125 process.stderr.write(`\n${(0, _table.table)(data)}\n`);
126 });
127};
\No newline at end of file