module.exports = class DBG { /** * @param ${'none'|'warn'|'info'|'debug'|'nitpick'} [level='info'] **/ constructor(level = 'info') { this.setLevel(level); } _levels = ['nitpick', 'debug', 'info', 'warn', 'none']; setLevel(level) { if (this._levels.includes(level)) { this._level = level; } else { throw new Error(`'${level}' is not a valid debug level`); } } /** @param {any} s **/ warn = (s='', ...z) => { if (this._lvl2num('warn') < this._lvl2num(this._level)) return console.log(s, ...z); } /** @param {any} s **/ i = (s='', ...z) => { if (this._lvl2num('info') < this._lvl2num(this._level)) return console.log(s, ...z); } /** @param {any} s **/ d = (s='', ...z) => { if (this._lvl2num('debug') < this._lvl2num(this._level)) return console.log(s, ...z); } /** @param {any} s **/ nit = (s='', ...z) => { if (this._lvl2num('nitpick') < this._lvl2num(this._level)) return console.log(s, ...z); } warnGroup = (s) => { if (this._lvl2num('warn') < this._lvl2num(this._level)) return console.group(s); } infoGroup = (s) => { if (this._lvl2num('info') < this._lvl2num(this._level)) return console.group(s); } debugGroup = (s) => { if (this._lvl2num('debug') < this._lvl2num(this._level)) return console.group(s); } nitGroup = (s) => { if (this._lvl2num('nit') < this._lvl2num(this._level)) return console.group(s); } warnGroupEnd = (s) => { if (this._lvl2num('warn') < this._lvl2num(this._level)) return console.groupEnd(); } infoGroupEnd = (s) => { if (this._lvl2num('info') < this._lvl2num(this._level)) return console.group(); } debugGroupEnd = (s) => { if (this._lvl2num('debug') < this._lvl2num(this._level)) return console.group(); } nitGroupEnd = (s) => { if (this._lvl2num('nit') < this._lvl2num(this._level)) return console.group(); } warnExec = (fn) => { if (this._lvl2num('warn') < this._lvl2num(this._level)) return fn(); } infoExec = (fn) => { if (this._lvl2num('info') < this._lvl2num(this._level)) return fn(); } debugExec = (fn) => { if (this._lvl2num('debug') < this._lvl2num(this._level)) return fn(); } nitExec = (fn) => { if (this._lvl2num('nit') < this._lvl2num(this._level)) return fn(); } _lvl2num(lvl) { return 1 + this._levels.findIndex(l => l === lvl); } } /* TEST const dbg = new DBG('nitpick'); dbg.warnGroup('w'); dbg.warn('warn'); dbg.warnGroupEnd(); dbg.iGroup('i'); dbg.i('info'); dbg.iGroupEnd(); dbg.dGroup('d'); dbg.d('debug'); dbg.dGroupEnd(); dbg.nitGroup('n'); dbg.nit('nitpick'); dbg.nitGroupEnd(); */