UNPKG

2.85 kBJavaScriptView Raw
1"use strict";
2Object.defineProperty(exports, "__esModule", { value: true });
3exports.MethodFactory = exports.MethodFactoryLevels = void 0;
4const noop = () => { };
5const levels = Symbol('log-levels');
6const instance = Symbol('log-instance');
7exports.MethodFactoryLevels = {
8 TRACE: 0,
9 DEBUG: 1,
10 INFO: 2,
11 WARN: 3,
12 ERROR: 4,
13 SILENT: 5
14};
15class MethodFactory {
16 constructor(logger) {
17 this[instance] = logger;
18 this[levels] = exports.MethodFactoryLevels;
19 }
20 get levels() {
21 return this[levels];
22 }
23 get logger() {
24 return this[instance];
25 }
26 set logger(logger) {
27 this[instance] = logger;
28 }
29 get methods() {
30 return Object.keys(this.levels)
31 .map((key) => key.toLowerCase())
32 .filter((key) => key !== 'silent');
33 }
34 bindMethod(obj, methodName) {
35 const method = obj[methodName];
36 if (typeof method.bind === 'function') {
37 return method.bind(obj);
38 }
39 try {
40 return Function.prototype.bind.call(method, obj);
41 }
42 catch (e) {
43 return function result() {
44 return Function.prototype.apply.apply(method, [obj, arguments]);
45 };
46 }
47 }
48 distillLevel(level) {
49 let result = level;
50 if (typeof result === 'string' && typeof this.levels[result.toUpperCase()] !== 'undefined') {
51 result = this.levels[result.toUpperCase()];
52 }
53 if (this.levelValid(result)) {
54 return result;
55 }
56 return null;
57 }
58 levelValid(level) {
59 if (typeof level === 'number' && level >= 0 && level <= this.levels.SILENT) {
60 return true;
61 }
62 return false;
63 }
64 make(methodName) {
65 const target = console;
66 if (typeof target[methodName] !== 'undefined') {
67 return this.bindMethod(target, methodName);
68 }
69 else if (typeof console.log !== 'undefined') {
70 return this.bindMethod(target, 'log');
71 }
72 return noop;
73 }
74 replaceMethods(logLevel) {
75 const level = this.distillLevel(logLevel);
76 if (level === null) {
77 throw new Error(`loglevelnext: replaceMethods() called with invalid level: ${logLevel}`);
78 }
79 if (!this.logger || this.logger.type !== 'LogLevel') {
80 throw new TypeError('loglevelnext: Logger is undefined or invalid. Please specify a valid Logger instance.');
81 }
82 this.methods.forEach((methodName) => {
83 const { [methodName.toUpperCase()]: methodLevel } = this.levels;
84 this.logger[methodName] = methodLevel < level ? noop : this.make(methodName);
85 });
86 this.logger.log = this.logger.debug;
87 }
88}
89exports.MethodFactory = MethodFactory;
90//# sourceMappingURL=MethodFactory.js.map
\No newline at end of file