a334bf98c7aa60343197f4846e4e7c3b1619a6459177aae24e67fce5109868d2fa31428e18e85983e64d5dc16efa585efa418d4354afddf31a8a0babbcda4e 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. 'use strict';
  2. /* eslint-disable
  3. no-param-reassign,
  4. space-before-function-paren
  5. */
  6. const MethodFactory = require('./MethodFactory');
  7. const defaults = {
  8. name (options) {
  9. return options.logger.name;
  10. },
  11. time () {
  12. return new Date().toTimeString().split(' ')[0];
  13. },
  14. level (options) {
  15. return `[${options.level}]`;
  16. },
  17. template: '{{time}} {{level}} '
  18. };
  19. class PrefixFactory extends MethodFactory {
  20. constructor(logger, options) {
  21. super(logger);
  22. this.options = Object.assign({}, defaults, options);
  23. }
  24. interpolate(level) {
  25. return this.options.template.replace(/{{([^{}]*)}}/g, (stache, prop) => {
  26. const fn = this.options[prop];
  27. if (fn) {
  28. return fn({ level, logger: this.logger });
  29. }
  30. return stache;
  31. });
  32. }
  33. make(method) {
  34. const og = super.make(method);
  35. return (...args) => {
  36. const [first] = args;
  37. const output = this.interpolate(method);
  38. if (typeof first === 'string') {
  39. args[0] = output + first;
  40. } else {
  41. args.unshift(output);
  42. }
  43. og(...args);
  44. };
  45. }
  46. }
  47. module.exports = PrefixFactory;