@notjustcoders/ioc-arise
Version:
Arise type-safe IoC containers from your code. Zero overhead, zero coupling.
162 lines • 4.59 kB
JavaScript
;
/**
* Logger utility for CLI output
* Provides consistent, production-ready logging with support for verbose mode and colors
*/
Object.defineProperty(exports, "__esModule", { value: true });
exports.Logger = exports.LogLevel = void 0;
// ANSI color codes for beautiful console output
const colors = {
reset: '\x1b[0m',
bright: '\x1b[1m',
dim: '\x1b[2m',
red: '\x1b[31m',
green: '\x1b[32m',
yellow: '\x1b[33m',
blue: '\x1b[34m',
magenta: '\x1b[35m',
cyan: '\x1b[36m',
white: '\x1b[37m',
gray: '\x1b[90m',
};
var LogLevel;
(function (LogLevel) {
LogLevel[LogLevel["ERROR"] = 0] = "ERROR";
LogLevel[LogLevel["WARN"] = 1] = "WARN";
LogLevel[LogLevel["INFO"] = 2] = "INFO";
LogLevel[LogLevel["SUCCESS"] = 3] = "SUCCESS";
LogLevel[LogLevel["DEBUG"] = 4] = "DEBUG";
})(LogLevel || (exports.LogLevel = LogLevel = {}));
class Logger {
/**
* Initialize logger with options
*/
static initialize(options = {}) {
Logger.verbose = options.verbose ?? false;
Logger.silent = options.silent ?? false;
Logger.colorsEnabled = options.colors ?? true;
}
/**
* Apply color to text
*/
static colorize(text, color) {
if (!Logger.colorsEnabled)
return text;
return `${color}${text}${colors.reset}`;
}
/**
* Log an error message
*/
static error(message, ...args) {
if (Logger.silent)
return;
const coloredMessage = Logger.colorize(`❌ ${message}`, colors.red + colors.bright);
console.error(coloredMessage, ...args);
}
/**
* Log a warning message
*/
static warn(message, ...args) {
if (Logger.silent)
return;
const coloredMessage = Logger.colorize(`⚠️ ${message}`, colors.yellow + colors.bright);
console.warn(coloredMessage, ...args);
}
/**
* Log an info message
*/
static info(message, ...args) {
if (Logger.silent)
return;
const coloredMessage = Logger.colorize(`ℹ️ ${message}`, colors.blue);
console.log(coloredMessage, ...args);
}
/**
* Log a success message
*/
static success(message, ...args) {
if (Logger.silent)
return;
const coloredMessage = Logger.colorize(`✅ ${message}`, colors.green + colors.bright);
console.log(coloredMessage, ...args);
}
/**
* Log a debug message (only shown in verbose mode)
*/
static debug(message, ...args) {
if (Logger.silent || !Logger.verbose)
return;
const coloredMessage = Logger.colorize(`🔍 ${message}`, colors.gray);
console.log(coloredMessage, ...args);
}
/**
* Log a plain message without prefix (for structured output)
*/
static log(message, ...args) {
if (Logger.silent)
return;
console.log(message, ...args);
}
/**
* Log a message with custom emoji/prefix and optional color
*/
static custom(prefix, message, color, ...args) {
if (Logger.silent)
return;
const coloredPrefix = color ? Logger.colorize(prefix, color) : prefix;
const output = `${coloredPrefix} ${message}`;
console.log(output, ...args);
}
/**
* Log a section header
*/
static section(title) {
if (Logger.silent)
return;
const separator = Logger.colorize('─'.repeat(50), colors.cyan);
const coloredTitle = Logger.colorize(title, colors.cyan + colors.bright);
console.log(`\n${separator}`);
console.log(` ${coloredTitle}`);
console.log(`${separator}\n`);
}
/**
* Log a newline
*/
static newline() {
if (Logger.silent)
return;
console.log('');
}
/**
* Format error for display
*/
static formatError(error) {
if (error instanceof Error) {
return error.message;
}
return String(error);
}
/**
* Check if verbose mode is enabled
*/
static isVerbose() {
return Logger.verbose;
}
/**
* Colorize text (public method for advanced usage)
*/
static colorizeText(text, color) {
return Logger.colorize(text, color);
}
/**
* Get color codes (for advanced usage)
*/
static getColors() {
return colors;
}
}
exports.Logger = Logger;
Logger.verbose = false;
Logger.silent = false;
Logger.colorsEnabled = true;
//# sourceMappingURL=logger.js.map