UNPKG

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