UNPKG

2.81 kBJavaScriptView Raw
1"use strict";
2Object.defineProperty(exports, "__esModule", { value: true });
3exports.MethodFactory = void 0;
4const noop = () => { };
5const levels = Symbol('log-levels');
6const instance = Symbol('log-instance');
7const BaseLevels = {
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] = BaseLevels;
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' &&
51 typeof this.levels[result.toUpperCase()] !== 'undefined') {
52 result = this.levels[result.toUpperCase()];
53 }
54 if (this.levelValid(result)) {
55 return result;
56 }
57 return null;
58 }
59 levelValid(level) {
60 if (typeof level === 'number' && level >= 0 && level <= this.levels.SILENT) {
61 return true;
62 }
63 return false;
64 }
65 make(methodName) {
66 const target = console;
67 if (typeof target[methodName] !== 'undefined') {
68 return this.bindMethod(target, methodName);
69 }
70 else if (typeof console.log !== 'undefined') {
71 return this.bindMethod(target, 'log');
72 }
73 return noop;
74 }
75 replaceMethods(logLevel) {
76 const level = this.distillLevel(logLevel);
77 if (level === null) {
78 throw new Error(`loglevelnext: replaceMethods() called with invalid level: ${logLevel}`);
79 }
80 if (!this.logger || this.logger.type !== 'LogLevel') {
81 throw new TypeError('loglevelnext: Logger is undefined or invalid. Please specify a valid Logger instance.');
82 }
83 this.methods.forEach((methodName) => {
84 const { [methodName.toUpperCase()]: methodLevel } = this.levels;
85 this.logger[methodName] = methodLevel < level ? noop : this.make(methodName);
86 });
87 this.logger.log = this.logger.debug;
88 }
89}
90exports.MethodFactory = MethodFactory;
91//# sourceMappingURL=MethodFactory.js.map
\No newline at end of file