UNPKG

1.55 kBPlain TextView Raw
1let log = require('fancy-log');
2let c = require('chalk');
3
4enum LEVEL {
5 INFO,
6 DEBUG,
7 ERROR,
8 WARN
9}
10
11class Logger {
12 public logger;
13 public silent;
14
15 constructor() {
16 this.logger = log;
17 this.silent = true;
18 }
19
20 public info(...args) {
21 if (!this.silent) {
22 return;
23 }
24 this.logger(this.format(LEVEL.INFO, ...args));
25 }
26
27 public error(...args) {
28 this.logger(this.format(LEVEL.ERROR, ...args));
29 }
30
31 public warn(...args) {
32 if (!this.silent) {
33 return;
34 }
35 this.logger(this.format(LEVEL.WARN, ...args));
36 }
37
38 public debug(...args) {
39 if (!this.silent) {
40 return;
41 }
42 this.logger(this.format(LEVEL.DEBUG, ...args));
43 }
44
45 private format(level, ...args) {
46 let pad = (s, l, z = '') => {
47 return s + Array(Math.max(0, l - s.length + 1)).join(z);
48 };
49
50 let msg = args.join(' ');
51 if (args.length > 1) {
52 msg = `${pad(args.shift(), 15, ' ')}: ${args.join(' ')}`;
53 }
54
55 switch (level) {
56 case LEVEL.INFO:
57 msg = c.green(msg);
58 break;
59
60 case LEVEL.DEBUG:
61 msg = c.cyan(msg);
62 break;
63
64 case LEVEL.WARN:
65 msg = c.yellow(msg);
66 break;
67
68 case LEVEL.ERROR:
69 msg = c.red(msg);
70 break;
71 }
72
73 return [msg].join('');
74 }
75}
76
77export let logger = new Logger();