Blame view

node_modules/webpack/lib/MultiStats.js 2.12 KB
aaac7fed   liuqimichale   add
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
  /*
  	MIT License http://www.opensource.org/licenses/mit-license.php
  	Author Tobias Koppers @sokra
  */
  "use strict";
  
  const Stats = require("./Stats");
  
  const optionOrFallback = (optionValue, fallbackValue) => optionValue !== undefined ? optionValue : fallbackValue;
  
  class MultiStats {
  	constructor(stats) {
  		this.stats = stats;
  		this.hash = stats.map(stat => stat.hash).join("");
  	}
  
  	hasErrors() {
  		return this.stats.map((stat) => stat.hasErrors()).reduce((a, b) => a || b, false);
  	}
  
  	hasWarnings() {
  		return this.stats.map((stat) => stat.hasWarnings()).reduce((a, b) => a || b, false);
  	}
  
  	toJson(options, forToString) {
  		if(typeof options === "boolean" || typeof options === "string") {
  			options = Stats.presetToOptions(options);
  		} else if(!options) {
  			options = {};
  		}
  		const jsons = this.stats.map((stat, idx) => {
  			const childOptions = Stats.getChildOptions(options, idx);
  			const obj = stat.toJson(childOptions, forToString);
  			obj.name = stat.compilation && stat.compilation.name;
  			return obj;
  		});
  		const showVersion = typeof options.version === "undefined" ? jsons.every(j => j.version) : options.version !== false;
  		const showHash = typeof options.hash === "undefined" ? jsons.every(j => j.hash) : options.hash !== false;
  		jsons.forEach(j => {
  			if(showVersion)
  				delete j.version;
  		});
  		const obj = {
  			errors: jsons.reduce((arr, j) => {
  				return arr.concat(j.errors.map(msg => {
  					return `(${j.name}) ${msg}`;
  				}));
  			}, []),
  			warnings: jsons.reduce((arr, j) => {
  				return arr.concat(j.warnings.map(msg => {
  					return `(${j.name}) ${msg}`;
  				}));
  			}, [])
  		};
  		if(showVersion)
  			obj.version = require("../package.json").version;
  		if(showHash)
  			obj.hash = this.hash;
  		if(options.children !== false)
  			obj.children = jsons;
  		return obj;
  	}
  
  	toString(options) {
  		if(typeof options === "boolean" || typeof options === "string") {
  			options = Stats.presetToOptions(options);
  		} else if(!options) {
  			options = {};
  		}
  
  		const useColors = optionOrFallback(options.colors, false);
  
  		const obj = this.toJson(options, true);
  
  		return Stats.jsonToString(obj, useColors);
  	}
  }
  
  module.exports = MultiStats;