UNPKG

log-rank

Version:

A priority-based console logger for Node.js and browser environments. Log messages with custom priorities and control the order they appear — ideal for debugging complex flows, batching logs, or building clean dev tools.

101 lines (100 loc) 3.93 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.Console = void 0; var logMessagesType; (function (logMessagesType) { logMessagesType["ERROR"] = "error"; logMessagesType["WARN"] = "warn"; logMessagesType["LOG"] = "log"; logMessagesType["SUCCESS"] = "success"; logMessagesType["FAILURE"] = "failure"; })(logMessagesType || (logMessagesType = {})); class Console { messagesToBeLogged; totalConsoleMessagesCount; maximumConsoleAllowed; isConsoleDisable; reversePriority; timeFormat; showTimestamps; constructor({ isConsoleDisable = false, maximumConsoleAllowed, reversePriority = false, timeFormat = "ISO", showTimestamps = false, }) { this.maximumConsoleAllowed = maximumConsoleAllowed; this.isConsoleDisable = isConsoleDisable; this.reversePriority = reversePriority; this.timeFormat = timeFormat; this.showTimestamps = showTimestamps; this.messagesToBeLogged = {}; this.totalConsoleMessagesCount = 0; } getFormattedTimestamp() { return this.timeFormat === "ISO" ? new Date().toISOString() : new Date().toLocaleString(); } print() { if (this.isConsoleDisable) return; console.clear(); const sortedMessages = Object.entries(this.messagesToBeLogged).sort((a, b) => this.reversePriority ? Number(a[0]) - Number(b[0]) : Number(b[0]) - Number(a[0])); sortedMessages.forEach(([, messages]) => { messages.forEach(({ type, message, emoji, timestamp }) => { const prefix = timestamp ? `${emoji} ${timestamp}:` : `${emoji}`; switch (type) { case logMessagesType.ERROR: console.error(`${prefix} ${message}`); break; case logMessagesType.WARN: console.warn(`${prefix} ${message}`); break; case logMessagesType.LOG: case logMessagesType.SUCCESS: case logMessagesType.FAILURE: console.log(`${prefix}`); console.log(message); break; } }); }); } addMessage(type, consoleMessage, emoji, { priority = 1, showTimestamp }) { if (this.isConsoleDisable || this.totalConsoleMessagesCount >= this.maximumConsoleAllowed) return; const shouldShowTimestamp = showTimestamp !== undefined ? showTimestamp : this.showTimestamps; const timestamp = shouldShowTimestamp ? this.getFormattedTimestamp() : ""; const message = { type, message: consoleMessage, emoji, timestamp, }; if (!this.messagesToBeLogged[priority]) { this.messagesToBeLogged[priority] = []; } this.messagesToBeLogged[priority].push(message); this.totalConsoleMessagesCount++; this.print(); } log(consoleMessage, options = {}) { this.addMessage(logMessagesType.LOG, consoleMessage, "", options); } error(consoleMessage, options = {}) { this.addMessage(logMessagesType.ERROR, consoleMessage, "", options); } warn(consoleMessage, options = {}) { this.addMessage(logMessagesType.WARN, consoleMessage, "", options); } success(consoleMessage, successIcon = "✅️", options = {}) { this.addMessage(logMessagesType.SUCCESS, consoleMessage, successIcon, options); } failure(consoleMessage, failureIcon = "❌", options = {}) { this.addMessage(logMessagesType.FAILURE, consoleMessage, failureIcon, options); } flush() { this.messagesToBeLogged = {}; this.totalConsoleMessagesCount = 0; } } exports.Console = Console;