| 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
 | | const LEVELS = [ |  |   'debug', |  |   'info', |  |   'warn', |  |   'error', |  |   'silent' |  | ]; |  |   |  | const LEVEL_TO_CONSOLE_METHOD = new Map([ |  |   ['debug', 'log'], |  |   ['info', 'log'], |  |   ['warn', 'log'] |  | ]); |  |   |  | class Logger { |  |   |  |   static levels = LEVELS; |  |   static defaultLevel = 'info'; |  |   |  |   constructor(level = Logger.defaultLevel) { |  |     this.activeLevels = new Set(); |  |     this.setLogLevel(level); |  |   } |  |   |  |   setLogLevel(level) { |  |     const levelIndex = LEVELS.indexOf(level); |  |   |  |     if (levelIndex === -1) throw new Error(`Invalid log level "${level}". Use one of these: ${LEVELS.join(', ')}`); |  |   |  |     this.activeLevels.clear(); |  |   |  |     for (const [i, level] of LEVELS.entries()) { |  |       if (i >= levelIndex) this.activeLevels.add(level); |  |     } |  |   } |  |   |  |   _log(level, ...args) { |  |     console[LEVEL_TO_CONSOLE_METHOD.get(level) || level](...args); |  |   } |  |   |  | }; |  |   |  | LEVELS.forEach(level => { |  |   if (level === 'silent') return; |  |   |  |   Logger.prototype[level] = function (...args) { |  |     if (this.activeLevels.has(level)) this._log(level, ...args); |  |   }; |  | }); |  |   |  | module.exports = Logger; | 
 |