/
stats.js
104 lines (87 loc) · 2.22 KB
/
stats.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
var fs = require('fs');
var bind = require('bind');
module.exports.onFileContent = function(callback, config, fileObject) {
var lineNb = fileObject.content.split('\n').length;
if(!fileObject.packageFile.stats) {
fileObject.packageFile.stats = [];
}
fileObject.packageFile.stats.push({
path: fileObject.path,
nb: lineNb
});
fileObject.content = '';
callback();
};
function getFileSizes(stats) {
var below10 = 0;
var below100 = 0;
var below500 = 0;
var below1000 = 0;
var above = 0;
for(var i = 0; i < stats.length; i++) {
if(stats[i].nb < 10) {
below10++;
} else if(stats[i].nb < 100) {
below100++;
} else if(stats[i].nb < 500) {
below500++;
} else if(stats[i].nb < 1000) {
below1000++;
} else {
above++;
}
}
return [
{max: 10, nb: below10},
{max: 100, nb: below100},
{max: 500, nb: below500},
{max: 1000, nb: below1000},
{max: Infinity, nb: above},
];
};
function getFileTypes(stats) {
var exts = {};
for(var i = 0; i < stats.length; i++) {
var extPos = stats[i].path.lastIndexOf('.');
var ext = stats[i].path.substring(extPos + 1);
if(!exts[ext]) {
exts[ext] = 0;
}
exts[ext]++;
}
var fileTypes = [];
for(var type in exts) {
fileTypes.push({type: type, nb: exts[type]});
}
return fileTypes;
};
function getDate() {
var now = new Date();
var year = now.getFullYear();
var month = now.getMonth() + 1;
var day = now.getDay();
return '' + day + '-' + month + '-' + year;
}
module.exports.onPackageEnd = function(callback, config, packageFileObject) {
packageFileObject.path = 'Stats-' + getDate() + '.html';
var stats = packageFileObject.stats,
totalLines = 0;
for(var i = 0; i < stats.length; i ++) {
totalLines += stats[i].nb;
}
stats.sort(function(a, b) {
return b.nb - a.nb;
});
bind.toFile(__dirname + '/stats-tpl.html', {
sourceFolder: config.source,
allFileStats: stats,
nbOfFiles: stats.length,
nbOfTotalLines: totalLines,
averageLinesPerFile: Math.round(totalLines / stats.length),
fileSizes: getFileSizes(stats),
fileTypes: getFileTypes(stats)
}, function(html) {
packageFileObject.content = html;
callback();
});
};