UNPKG

1.28 kBJavaScriptView Raw
1//-------------------------------------
2//-- Reporter
3//-------------------------------------
4'use strict';
5
6const chalk = require('chalk');
7const __ = require('@absolunet/private-registry');
8
9
10const addReport = (self, report) => {
11 const { reports } = __(self).get();
12 let { successes, failures } = __(self).get();
13
14 reports.push(report);
15
16 if (report.success) {
17 ++successes;
18 } else {
19 ++failures;
20 }
21
22 __(self).set({ reports, successes, failures });
23};
24
25
26
27
28
29
30class Reporter {
31
32 constructor() {
33 __(this).set({
34 reports: [],
35 successes: 0,
36 failures: 0
37 });
38 }
39
40
41 add(data) {
42 if (Array.isArray(data)) {
43 const results = {};
44
45 data.forEach((item) => {
46 addReport(this, item);
47 results[item.type] = item.success;
48 });
49
50 return results;
51 }
52
53 addReport(this, data);
54
55 return data.success;
56 }
57
58
59 get last() {
60 return this.list[this.list.length - 1];
61 }
62
63
64 get list() {
65 return __(this).get('reports');
66 }
67
68
69 get summary() {
70 const { reports, successes, failures } = __(this).get();
71
72 return {
73 success: failures === 0,
74 nb: {
75 success: successes,
76 failure: failures,
77 total: reports.length
78 }
79 };
80 }
81
82
83 static get theme() {
84 return {
85 title: chalk.cyan,
86 comment: chalk.blue
87 };
88 }
89
90}
91
92module.exports = Reporter;