zhangnaisong
2023-08-05 24d66c8d82b628a06e93dbb1abfea2049b3d45ab
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
52
53
54
55
56
57
58
59
60
'use strict';
 
/* eslint-disable
  no-param-reassign,
  space-before-function-paren
*/
const MethodFactory = require('./MethodFactory');
 
const defaults = {
  name (options) {
    return options.logger.name;
  },
  time () {
    return new Date().toTimeString().split(' ')[0];
  },
  level (options) {
    return `[${options.level}]`;
  },
  template: '{{time}} {{level}} '
};
 
class PrefixFactory extends MethodFactory {
  constructor(logger, options) {
    super(logger);
 
    this.options = Object.assign({}, defaults, options);
  }
 
  interpolate(level) {
    return this.options.template.replace(/{{([^{}]*)}}/g, (stache, prop) => {
      const fn = this.options[prop];
 
      if (fn) {
        return fn({ level, logger: this.logger });
      }
 
      return stache;
    });
  }
 
  make(method) {
    const og = super.make(method);
 
    return (...args) => {
      const [first] = args;
 
      const output = this.interpolate(method);
 
      if (typeof first === 'string') {
        args[0] = output + first;
      } else {
        args.unshift(output);
      }
 
      og(...args);
    };
  }
}
 
module.exports = PrefixFactory;