forked from webpack/webpack
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathformatOutput.js
More file actions
118 lines (116 loc) · 5.12 KB
/
formatOutput.js
File metadata and controls
118 lines (116 loc) · 5.12 KB
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
105
106
107
108
109
110
111
112
113
114
115
116
117
118
/*
MIT License http://www.opensource.org/licenses/mit-license.php
Author Tobias Koppers @sokra
*/
var sprintf = require("sprintf").sprintf;
var createFilenameShortener = require("./createFilenameShortener");
var path = require("path");
module.exports = function(stats, options) {
var buf = [];
function c(str) {
return options.colors ? str : "";
}
buf.push("Hash: "+c("\033[1m") + stats.hash + c("\033[22m"));
buf.push("Compile Time: "+c("\033[1m") + Math.round(stats.time) + "ms" + c("\033[22m"));
buf.push("Chunks: "+c("\033[1m") + stats.chunkCount + c("\033[22m"));
buf.push("Modules: "+c("\033[1m") + stats.modulesCount + c("\033[22m"));
buf.push("Modules including duplicates: "+c("\033[1m") + stats.modulesIncludingDuplicates + c("\033[22m"));
buf.push("Modules first chunk: "+c("\033[1m") + stats.modulesFirstChunk + c("\033[22m"));
if(stats.fileSizes) {
var maxLenFilename = 0;
var maxLenChunkname = 0;
Object.keys(stats.fileSizes).forEach(function(file) {
if(file.length > maxLenFilename) maxLenFilename = file.length;
});
var fileChunkNames = {};
Object.keys(stats.chunkNameFiles).forEach(function(name) {
var filename = stats.chunkNameFiles[name];
if(!fileChunkNames[filename])
fileChunkNames[filename] = [];
fileChunkNames[filename].push(name);
var length = fileChunkNames[filename].join(" ").length;
if(length > maxLenChunkname) maxLenChunkname = length;
});
Object.keys(stats.fileSizes).forEach(function(file) {
var name = fileChunkNames[file] && fileChunkNames[file].join(" ") || "";
var fileLine = sprintf("%" + maxLenChunkname + "s", name) + c("\033[1m") + sprintf("%" + (3 + maxLenFilename) + "s", file) + c("\033[22m")+": "+c("\033[1m") + sprintf("%8d", stats.fileSizes[file]) + c("\033[22m") + " chars/bytes";
buf.push(fileLine);
});
}
var compressFilename = options.context ? createFilenameShortener(options.context) : function(f) { return f };
if(stats.fileModules) {
buf.push("");
buf.push(" <id> <size> <filename>");
if(options.verbose)
buf.push(" <reason> from <filename>");
var maxTime = 0;
Object.keys(stats.fileModules).forEach(function(file) {
stats.fileModules[file].forEach(function(module) {
if(!module.profile) return;
var time = module.profile.time - module.profile.timeChildren;
if(maxTime < time) maxTime = time;
});
});
var middleTime = maxTime * 0.7;
maxTime *= 0.9;
Object.keys(stats.fileModules).forEach(function(file) {
buf.push(c("\033[1m\033[32m") + file + c("\033[39m\033[22m"));
var modules = stats.fileModules[file];
if(options["by-size"]) {
modules.sort(function(a, b) {
return b.size - a.size;
});
}
modules.forEach(function(module) {
var moduleLine = " "+(module.fromCache?"":c("\033[1m")) + sprintf("%3s", module.id+"") + " " + (typeof module.size === "number" ? sprintf("%9s", Math.round(module.size)+"") : " ") + " " +
(compressFilename(module.request) ||
(module.dirname && ("[context] " + compressFilename(module.dirname))) ||
"[unknown]") + (module.fromCache?"":c("\033[22m"))
if(module.fromCache) moduleLine += c("\033[1m\033[32m") + " [from cache]" + c("\033[39m\033[22m");
else if(module.toCache) moduleLine += c("\033[1m\033[33m") + " [caching]" + c("\033[39m\033[22m");
if(module.separate) moduleLine += " [separate]";
if(module.profile) {
var valueTime = module.profile.time - module.profile.timeChildren;
if(valueTime > maxTime) moduleLine += c("\033[1m\033[31m");
else if(valueTime > middleTime) moduleLine += c("\033[1m\033[33m");
moduleLine += " [" + module.profile.time + "ms: " + (module.profile.timeResolve + module.profile.timeResolvePrePostLoaders) + "ms resolving, " + module.profile.timeBuildWaiting + "ms waiting" + ", " + module.profile.timeBuildModule + "ms build" + ", " + module.profile.timeChildren + "ms children]";
if(valueTime > middleTime) moduleLine += c("\033[39m\033[22m");
}
buf.push(moduleLine);
if(options.verbose) {
module.reasons.forEach(function(reason) {
switch(reason.type) {
case "require":
buf.push(" "+c("\033[36m")+(reason.async?"async ":"")+"require (" + reason.count + "x) from " + compressFilename(reason.filename) + c("\033[39m"));
break;
case "context":
buf.push(" "+c("\033[90m")+(reason.async?"async ":"")+"context from " + compressFilename(reason.filename) + c("\033[39m"));
break;
default:
buf.push(" "+c("\033[31m") + reason.type + c("\033[39m"));
}
});
}
});
});
}
if(stats.subStats.length > 0) {
buf.push("Embedded Stats");
stats.subStats.forEach(function(stats) {
buf.push(" "+c("\033[1m") + compressFilename(stats.request) + c("\033[22m"));
var subFormat = module.exports(stats, options).split(/\n/g).join("\n ");
buf.push(" "+subFormat);
});
}
if(stats.warnings) {
stats.warnings.forEach(function(warning) {
buf.push(c("\033[1m\033[33m")+"WARNING: " + warning + c("\033[39m\033[22m"));
});
}
if(stats.errors) {
stats.errors.forEach(function(error) {
buf.push(c("\033[1m\033[31m")+"ERROR: " + error + c("\033[39m\033[22m"));
});
}
return buf.join("\n");
};