@mountainpass/hooked-cli
Version:
A tool for runnable scripts
70 lines (69 loc) • 1.67 kB
JavaScript
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;