UNPKG

dop-stick

Version:

Source control tooling for versionable-upgradeable smart contracts

197 lines 8.44 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.Logger = void 0; const terminal_1 = require("./terminal"); /** * Enhanced logging utility with rich formatting and terminal support */ class Logger { /** * Displays a prominent banner with title */ static async displayBanner(title) { const width = terminal_1.Terminal.getContentWidth(2); const chars = terminal_1.Terminal.getChars('box'); const padding = chars.horizontal; const banner = [ `${terminal_1.Terminal.colors.cyan}${chars.topLeft}${padding.repeat(width - 2)}${chars.topRight}`, `${chars.vertical}${this.centerText(` 💎 ${title} `, width - 2)}${chars.vertical}`, `${chars.bottomLeft}${padding.repeat(width - 2)}${chars.bottomRight}${terminal_1.Terminal.colors.reset}` ].join('\n'); terminal_1.Terminal.write('\n' + banner + '\n\n'); } /** * Creates a section with title and content */ static section(title, content = '', options = {}) { const color = options.color || 'cyan'; const chars = terminal_1.Terminal.getChars('box'); if (options.style === 'box') { terminal_1.Terminal.write('\n'); terminal_1.Terminal.write(`${terminal_1.Terminal.colors[color]}${chars.topLeft}${chars.horizontal.repeat(2)} ${title}\n`); if (content) { content.split('\n').forEach(line => { terminal_1.Terminal.write(`${terminal_1.Terminal.colors[color]}${chars.vertical} ${line}\n`); }); terminal_1.Terminal.write(`${terminal_1.Terminal.colors[color]}${chars.bottomLeft}${chars.horizontal.repeat(title.length + 3)}${terminal_1.Terminal.colors.reset}\n`); } } else if (options.style === 'line') { terminal_1.Terminal.write('\n'); terminal_1.Terminal.write(`${title}\n`); terminal_1.Terminal.write(`${chars.horizontal.repeat(title.length)}\n`); if (content) { terminal_1.Terminal.write(content + '\n'); } } else { terminal_1.Terminal.write('\n'); terminal_1.Terminal.write(`${terminal_1.Terminal.colors[color]}${title}${terminal_1.Terminal.colors.reset}\n`); if (content) { terminal_1.Terminal.write(content + '\n'); } } } /** * Logs a step in a process */ static step(number, total, title, detail) { const stepNum = `${terminal_1.Terminal.colors.muted}[${number}/${total}]${terminal_1.Terminal.colors.reset}`; const stepTitle = `${terminal_1.Terminal.colors.cyan}${title}${terminal_1.Terminal.colors.reset}`; terminal_1.Terminal.write(` ${stepNum} ${stepTitle}\n`); if (detail) { terminal_1.Terminal.write(` ${terminal_1.Terminal.colors.muted}${detail}${terminal_1.Terminal.colors.reset}\n`); } } /** * Starts a spinner with message */ static startSpinner(message) { if (this.spinnerInterval) { this.stopSpinner(); } const frames = terminal_1.Terminal.getChars('spinner'); this.spinnerFrame = 0; // Initial render terminal_1.Terminal.write(`${terminal_1.Terminal.colors.yellow}${frames[0]}${terminal_1.Terminal.colors.reset} ${message}`); this.spinnerInterval = setInterval(() => { terminal_1.Terminal.eraseLine(); terminal_1.Terminal.cursorTo(0); this.spinnerFrame = (this.spinnerFrame + 1) % frames.length; terminal_1.Terminal.write(`${terminal_1.Terminal.colors.yellow}${frames[this.spinnerFrame]}${terminal_1.Terminal.colors.reset} ${message}`); }, 80); terminal_1.Terminal.cursorHide(); } /** * Stops the active spinner */ static stopSpinner(success = true, message) { if (this.spinnerInterval) { clearInterval(this.spinnerInterval); this.spinnerInterval = null; terminal_1.Terminal.eraseLine(); terminal_1.Terminal.cursorTo(0); if (message) { const icon = success ? '✓' : '✖'; const color = success ? terminal_1.Terminal.colors.success : terminal_1.Terminal.colors.error; terminal_1.Terminal.writeLine(`${color}${icon}${terminal_1.Terminal.colors.reset} ${message}`); } terminal_1.Terminal.cursorShow(); } } /** * Status logging methods with support for multiple arguments */ static success(...messages) { const message = messages.map(m => String(m)).join(' '); terminal_1.Terminal.write(`${terminal_1.Terminal.colors.success}${message}${terminal_1.Terminal.colors.reset}\n`); } static error(...messages) { const message = messages.map(m => String(m)).join(' '); terminal_1.Terminal.write(`${terminal_1.Terminal.colors.error}${message}${terminal_1.Terminal.colors.reset}\n`); } static warning(...messages) { const message = messages.map(m => String(m)).join(' '); terminal_1.Terminal.write(`${terminal_1.Terminal.colors.warning}${message}${terminal_1.Terminal.colors.reset}\n`); } static info(...messages) { const message = messages.map(m => String(m)).join(' '); terminal_1.Terminal.write(`${terminal_1.Terminal.colors.info}${message}${terminal_1.Terminal.colors.reset}\n`); } /** * Warning logging with yellow color (alias for warning) */ static warn(...messages) { const message = messages.map(m => String(m)).join(' '); terminal_1.Terminal.write(`${terminal_1.Terminal.colors.warning}${message}${terminal_1.Terminal.colors.reset}\n`); } /** * Progress bar display */ static progress(current, total, options = {}) { const width = options.width || 30; const chars = terminal_1.Terminal.getChars('progress'); const percentage = Math.round((current / total) * 100); const complete = Math.round((current / total) * width); const incomplete = width - complete; let line = ''; if (options.title) { line += `${options.title} `; } line += `${terminal_1.Terminal.colors.cyan}${chars.complete.repeat(complete)}${chars.incomplete.repeat(incomplete)}${terminal_1.Terminal.colors.reset}`; if (options.showPercentage) { line += ` ${percentage}%`; } terminal_1.Terminal.eraseLine(); terminal_1.Terminal.write(line); } /** * Group logging with indentation */ static group(title, callback) { terminal_1.Terminal.write(`${terminal_1.Terminal.colors.cyan}${terminal_1.Terminal.colors.bold}${title}${terminal_1.Terminal.colors.reset}\n`); console.group(); callback(); console.groupEnd(); } /** * Utility methods */ static centerText(text, width) { const padding = Math.max(0, width - terminal_1.Terminal.stripAnsi(text).length); const leftPad = Math.floor(padding / 2); const rightPad = padding - leftPad; return ' '.repeat(leftPad) + text + ' '.repeat(rightPad); } static write(message) { process.stdout.write(message); } static writeLine(message) { process.stdout.write(message + '\n'); } static clear() { process.stdout.write('\x1Bc'); } /** * Debug logging - only shows when DEBUG environment variable is set */ static debug(message, ...args) { if (process.env.DEBUG) { const debugPrefix = `${terminal_1.Terminal.colors.muted}[DEBUG]${terminal_1.Terminal.colors.reset}`; if (args.length > 0) { // If additional arguments are provided, format them as JSON const formattedArgs = args.map(arg => typeof arg === 'object' ? JSON.stringify(arg, null, 2) : String(arg)).join(' '); terminal_1.Terminal.write(`${debugPrefix} ${message} ${formattedArgs}\n`); } else { terminal_1.Terminal.write(`${debugPrefix} ${message}\n`); } } } } exports.Logger = Logger; Logger.spinnerInterval = null; Logger.spinnerFrame = 0; //# sourceMappingURL=logger.js.map