apiveritas
Version:
Lightweight CLI tool for consumer-driven API contract testing via JSON schema and payload comparisons.
105 lines (104 loc) • 3.4 kB
JavaScript
;
/**
* @file Logger.ts
* @author Mario Galea
* @description
* Provides a simple colored console logger with support for log levels (`debug`, `info`, `warn`, `error`)
* and optional silent mode. Supports boxed messages for emphasis (e.g., headers, summaries).
* Uses `chalk` for styling console output.
*/
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.Logger = void 0;
const chalk_1 = __importDefault(require("chalk"));
/**
* A lightweight, color-coded logger with support for log levels and silent mode.
*/
class Logger {
/**
* Creates a new Logger instance.
*
* @param options - Optional logger configuration.
* - `level`: Minimum log level to display (`debug` < `info` < `warn` < `error`)
* - `silent`: If `true`, disables all logging output
*/
constructor(options = {}) {
this.level = options.level || 'info';
this.silent = options.silent || false;
}
/**
* Determines whether a message of the given level should be logged,
* based on the configured `level` and `silent` flag.
*
* @param level - The severity level of the message.
* @returns `true` if the message should be logged; otherwise `false`.
*/
shouldLog(level) {
const levels = ['debug', 'info', 'warn', 'error'];
return (!this.silent &&
levels.indexOf(level) >= levels.indexOf(this.level));
}
/**
* Logs a plain white message at `info` level.
*
* @param message - The message to log.
*/
info(message) {
if (this.shouldLog('info')) {
console.log(chalk_1.default.white(' ' + message));
}
}
/**
* Logs a yellow warning message at `warn` level.
*
* @param message - The message to log.
*/
warn(message) {
if (this.shouldLog('warn')) {
console.warn(chalk_1.default.yellow(' ' + message));
}
}
/**
* Logs a red error message at `error` level.
*
* @param message - The message to log.
*/
error(message) {
if (this.shouldLog('error')) {
console.error(chalk_1.default.red(' ' + message));
}
}
/**
* Logs a grey debug message at `debug` level.
*
* @param message - The message to log.
*/
debug(message) {
if (this.shouldLog('debug')) {
console.log(chalk_1.default.grey(' ' + message));
}
}
/**
* Logs a boxed and optionally titled message block.
*
* Useful for drawing attention to important output (headers, test results, etc.).
*
* @param message - The multiline message to print.
* @param title - Optional title to show above the box, styled in cyan.
*/
boxed(message, title) {
if (!this.silent) {
const line = '-'.repeat(50);
const boxTitle = title ? chalk_1.default.cyan.bold(title) + '\n' + line + '\n' : '';
// Pad each line of the message
const paddedMessage = message
.split('\n')
.map(line => ' ' + line)
.join('\n');
console.log(`\n${boxTitle}${paddedMessage}\n${line}\n`);
}
}
}
exports.Logger = Logger;