UNPKG

@naturalcycles/js-lib

Version:

Standard library for universal (browser + Node.js) javascript

86 lines (85 loc) 2.81 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.commonLoggerNoop = exports.commonLogLevelNumber = void 0; exports.commonLoggerMinLevel = commonLoggerMinLevel; exports.commonLoggerPipe = commonLoggerPipe; exports.commonLoggerPrefix = commonLoggerPrefix; exports.commonLoggerCreate = commonLoggerCreate; // copy-pasted to avoid weird circular dependency const _noop = (..._args) => undefined; exports.commonLogLevelNumber = { log: 10, warn: 20, error: 30, }; /** * SimpleLogger that does nothing (noop). * * @experimental */ exports.commonLoggerNoop = { log: _noop, warn: _noop, error: _noop, }; /** * Creates a "child" logger that is "limited" to the specified CommonLogLevel. */ function commonLoggerMinLevel(logger, minLevel, mutate = false) { const level = exports.commonLogLevelNumber[minLevel]; if (mutate) { if (level > exports.commonLogLevelNumber['log']) { logger.log = _noop; if (level > exports.commonLogLevelNumber['warn']) { logger.warn = _noop; if (level > exports.commonLogLevelNumber['error']) { logger.error = _noop; } } } return logger; } if (level <= exports.commonLogLevelNumber['log']) { // All levels are kept return logger; } if (level > exports.commonLogLevelNumber['error']) { // "Log nothing" logger return exports.commonLoggerNoop; } return { log: _noop, // otherwise it is "log everything" logger (same logger as input) warn: level <= exports.commonLogLevelNumber['warn'] ? logger.warn.bind(logger) : _noop, error: logger.error.bind(logger), // otherwise it's "log nothing" logger (same as noopLogger) }; } /** * Creates a "proxy" CommonLogger that pipes log messages to all provided sub-loggers. */ function commonLoggerPipe(loggers) { return { log: (...args) => loggers.forEach(logger => logger.log(...args)), warn: (...args) => loggers.forEach(logger => logger.warn(...args)), error: (...args) => loggers.forEach(logger => logger.error(...args)), }; } /** * Creates a "child" CommonLogger with prefix (one or multiple). */ function commonLoggerPrefix(logger, ...prefixes) { return { log: (...args) => logger.log(...prefixes, ...args), warn: (...args) => logger.warn(...prefixes, ...args), error: (...args) => logger.error(...prefixes, ...args), }; } /** * Creates a CommonLogger from a single function that takes `level` and `args`. */ function commonLoggerCreate(fn) { return { log: (...args) => fn('log', args), warn: (...args) => fn('warn', args), error: (...args) => fn('error', args), }; }