UNPKG

@akala/core

Version:
68 lines 2.38 kB
import * as debugImport from "debug"; import { LogLevels } from "../shared.js"; // Polyfill for debug import (browser vs non browser) const debug = debugImport.default ?? debugImport.debug; /** * Debug-based implementation of ILoggerAdapter using debug package * @implements ILogger */ // @logger.service('debug') export class DebugLogger { debugInstance; currentLevel = LogLevels.info; levelLoggers = new Map(); constructor(namespace) { this.debugInstance = debug(namespace); this.initializeLevelLoggers(namespace); } initializeLevelLoggers(namespace) { Object.values(LogLevels).forEach(level => { if (typeof level === 'number') { const levelName = LogLevels[level]; this.levelLoggers.set(level, this.debugInstance.extend(levelName)); } }); } make(level) { return new Proxy(this.levelLoggers.get(level), { get: (target, prop) => { if (prop === 'isEnabled') { return this.isEnabled(level) && this.levelLoggers.get(level).enabled; } return target[prop]; } }); } get error() { return this.make(LogLevels.error); } get warn() { return this.make(LogLevels.warn); } get help() { return this.make(LogLevels.help); } get data() { return this.make(LogLevels.data); } get info() { return this.make(LogLevels.info); } get debug() { return this.make(LogLevels.debug); } get prompt() { return this.make(LogLevels.prompt); } get verbose() { return this.make(LogLevels.verbose); } get input() { return this.make(LogLevels.input); } get silly() { return this.make(LogLevels.silly); } isEnabled(level) { return level >= this.currentLevel; } setLevel(level) { this.currentLevel = level; this.updateDebugNamespaces(); } getLevel() { return this.currentLevel; } updateDebugNamespaces() { const namespaces = []; Object.keys(LogLevels).forEach(key => { if (!isNaN(Number(key))) return; if (LogLevels[key] <= this.currentLevel) { namespaces.push(key + ':' + this.debugInstance.namespace); } }); debug.enable(namespaces.join(',')); } } //# sourceMappingURL=debug.js.map