UNPKG

@cere/rob-cli

Version:

CLI tool for deploying and managing rafts and data sources

201 lines 7.61 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.Logger = exports.LogLevel = void 0; const chalk_1 = __importDefault(require("chalk")); var LogLevel; (function (LogLevel) { LogLevel[LogLevel["TRACE"] = -1] = "TRACE"; LogLevel[LogLevel["DEBUG"] = 0] = "DEBUG"; LogLevel[LogLevel["INFO"] = 1] = "INFO"; LogLevel[LogLevel["WARN"] = 2] = "WARN"; LogLevel[LogLevel["ERROR"] = 3] = "ERROR"; LogLevel[LogLevel["NONE"] = 4] = "NONE"; })(LogLevel || (exports.LogLevel = LogLevel = {})); /** * Simple logger with color output */ class Logger { constructor(contextName, options = {}) { this.contextName = contextName; this.level = options.level !== undefined ? options.level : this.getGlobalLogLevel(); this.prefix = options.prefix || ''; } /** * Get the global log level from environment variable or use default INFO level */ getGlobalLogLevel() { var _a; const envLevel = (_a = process.env.ROB_LOG_LEVEL) === null || _a === void 0 ? void 0 : _a.toUpperCase(); if (envLevel) { switch (envLevel) { case 'TRACE': return LogLevel.TRACE; case 'DEBUG': return LogLevel.DEBUG; case 'INFO': return LogLevel.INFO; case 'WARN': return LogLevel.WARN; case 'ERROR': return LogLevel.ERROR; case 'NONE': return LogLevel.NONE; default: return LogLevel.INFO; } } return LogLevel.INFO; } /** * Format log message with timestamp and context */ formatMessage(message) { const timestamp = new Date().toISOString(); return `${this.prefix}[${timestamp}] [${this.contextName}] ${message}`; } /** * Format an object for logging */ formatObject(obj) { try { return JSON.stringify(obj, null, 2); } catch (error) { return `[Object cannot be stringified: ${error instanceof Error ? error.message : 'Unknown error'}]`; } } /** * Log trace message (only if log level is TRACE) */ trace(message) { if (this.level <= LogLevel.TRACE) { const formattedMessage = typeof message === 'string' ? message : this.formatObject(message); console.debug(chalk_1.default.cyan(this.formatMessage(`TRACE: ${formattedMessage}`))); } } /** * Log debug message (only if log level is TRACE or DEBUG) */ debug(message) { if (this.level <= LogLevel.DEBUG) { const formattedMessage = typeof message === 'string' ? message : this.formatObject(message); console.debug(chalk_1.default.gray(this.formatMessage(formattedMessage))); } } /** * Log info message (if log level is TRACE, DEBUG or INFO) */ info(message) { if (this.level <= LogLevel.INFO) { const formattedMessage = typeof message === 'string' ? message : this.formatObject(message); console.info(chalk_1.default.blue(this.formatMessage(formattedMessage))); } } /** * Log success message (if log level is TRACE, DEBUG or INFO) */ success(message) { if (this.level <= LogLevel.INFO) { const formattedMessage = typeof message === 'string' ? message : this.formatObject(message); console.info(chalk_1.default.green(this.formatMessage(formattedMessage))); } } /** * Log warning message (if log level is TRACE, DEBUG, INFO or WARN) */ warn(message) { if (this.level <= LogLevel.WARN) { const formattedMessage = typeof message === 'string' ? message : this.formatObject(message); console.warn(chalk_1.default.yellow(this.formatMessage(formattedMessage))); } } /** * Log error message (if log level is TRACE, DEBUG, INFO, WARN or ERROR) */ error(message) { if (this.level <= LogLevel.ERROR) { const formattedMessage = typeof message === 'string' ? message : this.formatObject(message); console.error(chalk_1.default.red(this.formatMessage(formattedMessage))); } } /** * Log an object as JSON */ json(label, obj) { if (this.level <= LogLevel.DEBUG) { const formattedJson = this.formatObject(obj); console.debug(chalk_1.default.magenta(this.formatMessage(`${label}:`))); console.debug(formattedJson); } } /** * Log HTTP request details */ httpRequest(method, url, headers, body) { if (this.level <= LogLevel.TRACE) { this.trace('HTTP Request:'); this.trace(`${method} ${url}`); this.trace('Headers:'); this.trace(headers); if (body) { this.trace('Body:'); this.trace(body); } } } /** * Log HTTP response details */ httpResponse(status, statusText, headers, body) { if (this.level <= LogLevel.TRACE) { this.trace('HTTP Response:'); this.trace(`${status} ${statusText}`); this.trace('Headers:'); this.trace(headers); if (body) { this.trace('Body:'); this.trace(body); } } } /** * Log a Terraform-style creating message */ creating(resourceType, id) { console.log(`${chalk_1.default.blue('module')}${chalk_1.default.white('.')}${chalk_1.default.cyan(resourceType)}${chalk_1.default.white(':')} Creating...`); } /** * Log a Terraform-style created message */ created(resourceType, id, timeTaken) { console.log(`${chalk_1.default.blue('module')}${chalk_1.default.white('.')}${chalk_1.default.cyan(resourceType)}${chalk_1.default.white(':')} ` + `Creation complete after ${chalk_1.default.yellow(timeTaken + 's')} ${chalk_1.default.white(`[id=${id}]`)}`); } /** * Log a Terraform-style updating message */ updating(resourceType, id) { console.log(`${chalk_1.default.blue('module')}${chalk_1.default.white('.')}${chalk_1.default.cyan(resourceType)}${chalk_1.default.white(':')} Updating...`); } /** * Log a Terraform-style updated message */ updated(resourceType, id, timeTaken) { console.log(`${chalk_1.default.blue('module')}${chalk_1.default.white('.')}${chalk_1.default.cyan(resourceType)}${chalk_1.default.white(':')} ` + `Update complete after ${chalk_1.default.yellow(timeTaken + 's')} ${chalk_1.default.white(`[id=${id}]`)}`); } /** * Log a Terraform-style completion summary */ completionSummary(added, changed, destroyed) { console.log(`${chalk_1.default.green('Apply complete!')} Resources: ` + `${added > 0 ? chalk_1.default.green(added + ' added') : chalk_1.default.white(added + ' added')}, ` + `${changed > 0 ? chalk_1.default.yellow(changed + ' changed') : chalk_1.default.white(changed + ' changed')}, ` + `${destroyed > 0 ? chalk_1.default.red(destroyed + ' destroyed') : chalk_1.default.white(destroyed + ' destroyed')}.`); } } exports.Logger = Logger; //# sourceMappingURL=logger.js.map