UNPKG

apiveritas

Version:

Lightweight CLI tool for consumer-driven API contract testing via JSON schema and payload comparisons.

105 lines (104 loc) 3.4 kB
"use strict"; /** * @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;