UNPKG

@teaui/core

Version:

A high-level terminal UI library for Node

66 lines 1.89 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.interceptConsoleLog = interceptConsoleLog; exports.decorateConsoleLog = decorateConsoleLog; exports.addListener = addListener; exports.removeListener = removeListener; exports.fetchLogs = fetchLogs; exports.flushLogs = flushLogs; const inspect_1 = require("./inspect"); const levels = ['debug', 'error', 'info', 'log', 'warn']; let logs = []; const builtin = {}; levels.forEach(level => { builtin[level] = console[level]; }); function interceptConsoleLog(logListener = appendLog) { levels.forEach(level => { console[level] = function (...args) { logListener(level, args); }; }); process.on('exit', code => { flushLogs(); }); } function decorateConsoleLog() { levels.forEach(level => { const log = console[level]; if (log.isDecorated) { return; } ; log.isDecorated = true; console[level] = function (...args) { log(...args.map(arg => (0, inspect_1.inspect)(arg, true))); }; }); } const logListeners = new Set(); function addListener(listener) { logListeners.add(listener); } function removeListener(listener) { logListeners.delete(listener); } function appendLog(level, args) { logs.push({ level, args: args.map(arg => (0, inspect_1.inspect)(arg, true)) }); for (const listener of logListeners) { listener(); } } function fetchLogs() { const copy = logs.filter(({ level }) => level !== 'debug'); logs = logs.filter(({ level }) => level === 'debug'); return copy; } function flushLogs() { logs.forEach(({ level, args }) => { builtin[level].apply(console, args); }); logs.splice(0, logs.length); levels.forEach(level => { console[level] = builtin[level]; }); } //# sourceMappingURL=log.js.map