保誠-保戶業務員媒合平台
Tomas
2022-05-19 957a1f10a06fdbb76f1a0ba94fe44126c613fee3
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
/*
    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 =
            options.version === undefined
                ? jsons.every(j => j.version)
                : options.version !== false;
        const showHash =
            options.hash === undefined
                ? jsons.every(j => j.hash)
                : options.hash !== false;
        if (showVersion) {
            for (const j of jsons) {
                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;