UNPKG

@mountainpass/hooked-cli

Version:
70 lines (69 loc) 1.67 kB
import { grey, red, yellow } from '../colour.js'; import { isString } from '../types.js'; export const isLogLevel = (level) => { return ['error', 'warn', 'info', 'debug'].includes(level); }; let logLevel = 'info'; const logError = () => ['debug', 'info', 'warn', 'error'].includes(logLevel); const logWarn = () => ['debug', 'info', 'warn'].includes(logLevel); const logInfo = () => ['debug', 'info'].includes(logLevel); const logDebug = () => ['debug'].includes(logLevel); const setLogLevel = (level) => { if (isLogLevel(level)) { logLevel = level; } else if (isString(level)) { throw new Error(`Invalid log level: ${level}`); } }; // Level = E W I D // error Y - - - // warn Y Y - - // info Y Y Y - // debug Y Y Y Y const error = (str) => { if (logError()) { if (isString(str)) { console.error(red(str)); } else { if (isString(str.stack)) { console.error(red(str.stack)); } else { console.error(red(str.message)); } } } }; const warn = (str) => { if (logWarn()) console.error(yellow(str)); }; const info = (str) => { if (logInfo()) console.log(str); }; const writeInfo = (str) => { if (logDebug()) process.stdout.write(str); }; const debug = (str) => { if (logDebug()) console.error(grey(str)); }; const writeDebug = (str) => { if (logDebug()) process.stderr.write(grey(str)); }; const logger = { error, warn, debug, log: info, info, writeDebug, writeInfo, setLogLevel }; export default logger;