UNPKG

1.75 kBJavaScriptView Raw
1'use strict';
2
3Object.defineProperty(exports, "__esModule", {
4 value: true
5});
6
7var _path = require('path');
8
9var _path2 = _interopRequireDefault(_path);
10
11function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
12
13class Profile {
14 constructor(name) {
15 this.name = name;
16 this.requests = [];
17 }
18
19 onRequest(request) {
20 // Measure time for last request
21 if (this.requests.length) {
22 const lastReq = this.requests[this.requests.length - 1];
23 if (lastReq.start) {
24 lastReq.time = process.hrtime(lastReq.start);
25 delete lastReq.start;
26 }
27 }
28
29 // Ignore requests without any file or loaders
30 if (!request.file || !request.loaders.length) {
31 return;
32 }
33
34 this.requests.push({
35 request,
36 start: process.hrtime()
37 });
38 }
39
40 getStats() {
41 const loaderStats = {};
42 const extStats = {};
43
44 const getStat = (stats, name) => {
45 if (!stats[name]) {
46 // eslint-disable-next-line no-param-reassign
47 stats[name] = {
48 count: 0,
49 time: [0, 0]
50 };
51 }
52 return stats[name];
53 };
54
55 const addToStat = (stats, name, count, time) => {
56 const stat = getStat(stats, name);
57 stat.count += count;
58 stat.time[0] += time[0];
59 stat.time[1] += time[1];
60 };
61
62 this.requests.forEach(({ request, time = [0, 0] }) => {
63 request.loaders.forEach(loader => {
64 addToStat(loaderStats, loader, 1, time);
65 });
66
67 const ext = request.file && _path2.default.extname(request.file).substr(1);
68 addToStat(extStats, ext && ext.length ? ext : 'unknown', 1, time);
69 });
70
71 return {
72 ext: extStats,
73 loader: loaderStats
74 };
75 }
76}
77exports.default = Profile;
\No newline at end of file