1 | 'use strict';
|
2 |
|
3 | Object.defineProperty(exports, "__esModule", {
|
4 | value: true
|
5 | });
|
6 | exports.printStats = exports.formatRequest = exports.parseRequst = exports.renderBar = exports.colorize = exports.BULLET = undefined;
|
7 |
|
8 | var _path = require('path');
|
9 |
|
10 | var _path2 = _interopRequireDefault(_path);
|
11 |
|
12 | var _chalk = require('chalk');
|
13 |
|
14 | var _chalk2 = _interopRequireDefault(_chalk);
|
15 |
|
16 | var _lodash = require('lodash');
|
17 |
|
18 | var _lodash2 = _interopRequireDefault(_lodash);
|
19 |
|
20 | var _figures = require('figures');
|
21 |
|
22 | var _figures2 = _interopRequireDefault(_figures);
|
23 |
|
24 | var _table = require('table');
|
25 |
|
26 | var _prettyTime = require('pretty-time');
|
27 |
|
28 | var _prettyTime2 = _interopRequireDefault(_prettyTime);
|
29 |
|
30 | var _description = require('./description');
|
31 |
|
32 | var _description2 = _interopRequireDefault(_description);
|
33 |
|
34 | function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
35 |
|
36 | const BAR_LENGTH = 25;
|
37 | const IS_WINDOWS = /^win/.test(process.platform);
|
38 | const BLOCK_CHAR = IS_WINDOWS ? ' ' : '█';
|
39 | const BLOCK_CHAR2 = IS_WINDOWS ? '=' : '█';
|
40 | const BAR_BEFORE = IS_WINDOWS ? '[' : '';
|
41 | const BAR_AFTER = IS_WINDOWS ? ']' : '';
|
42 | const NEXT = _chalk2.default.blue((0, _figures2.default)(' › '));
|
43 |
|
44 | const BULLET = exports.BULLET = (0, _figures2.default)('●');
|
45 |
|
46 | const colorize = exports.colorize = color => {
|
47 | if (color[0] === '#') {
|
48 | return _chalk2.default.hex(color);
|
49 | }
|
50 |
|
51 | return _chalk2.default.keyword(color);
|
52 | };
|
53 |
|
54 | const 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 |
|
62 | const hasValue = s => s && s.length;
|
63 |
|
64 | const nodeModules = `${_path2.default.delimiter}node_modules${_path2.default.delimiter}`;
|
65 | const removeAfter = (delimiter, str) => _lodash2.default.first(str.split(delimiter));
|
66 | const removeBefore = (delimiter, str) => _lodash2.default.last(str.split(delimiter));
|
67 |
|
68 | const firstMatch = (regex, str) => {
|
69 | const m = regex.exec(str);
|
70 | return m ? m[0] : null;
|
71 | };
|
72 |
|
73 | const 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 |
|
86 | const 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 |
|
97 | const 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 |