UNPKG

1.89 kBPlain TextView Raw
1let c = require('ansi-colors');
2let pkg = require('../../package.json');
3const fancyLog = require('fancy-log');
4
5enum LEVEL {
6 INFO,
7 WARN,
8 DEBUG,
9 FATAL, ERROR
10}
11
12export class Logger {
13
14 name;
15 logger;
16 version;
17 silent;
18
19 constructor() {
20 this.name = pkg.name;
21 this.version = pkg.version;
22 this.logger = fancyLog;
23 this.silent = false;
24 }
25
26 setVerbose(level: boolean) {
27 this.silent = level;
28 }
29
30 title(...args) {
31 if(this.silent == false) {
32 this.logger(
33 c.cyan(...args)
34 );
35 }
36 }
37
38 info(...args) {
39 if(this.silent == false) {
40 this.logger(
41 this.format(LEVEL.INFO, ...args)
42 );
43 }
44 }
45
46 warn(...args) {
47 if(this.silent == false) {
48 this.logger(
49 this.format(LEVEL.WARN, ...args)
50 );
51 }
52 }
53
54 error(...args) {
55 if(this.silent == false) {
56 this.logger(
57 this.format(LEVEL.FATAL, ...args)
58 );
59 }
60 }
61
62 fatal(...args) {
63 if(this.silent == false) {
64 this.error(...args);
65 }
66
67 }
68 debug(...args) {
69 if(this.silent == false) {
70 this.logger(
71 this.format(LEVEL.DEBUG, ...args)
72 );
73 }
74 }
75
76 trace(error, file) {
77 this.fatal('Ouch', file);
78 this.fatal('', error);
79 this.warn('ignoring', file);
80 this.warn('see error', '');
81 console.trace(error);
82 }
83
84 private format(level, ...args) {
85
86 let pad = (s, l, c='') => {
87 return s + Array( Math.max(0, l - s.length + 1)).join( c )
88 };
89
90 let msg = args.join(' ');
91 if(args.length > 1) {
92 msg = `${ pad(args.shift(), 13, ' ') }: ${ args.join(' ') }`;
93 }
94
95
96 switch(level) {
97 case LEVEL.INFO:
98 msg = c.green(msg);
99 break;
100
101 case LEVEL.WARN:
102 msg = c.yellow(msg);
103 break;
104
105 case LEVEL.DEBUG:
106 msg = c.gray(msg);
107 break;
108
109 case LEVEL.ERROR:
110 case LEVEL.FATAL:
111 msg = c.red(msg);
112 break;
113 }
114
115 return [
116 msg
117 ].join('');
118 }
119}
120
121export let logger = new Logger();