dop-stick
Version:
Source control tooling for versionable-upgradeable smart contracts
197 lines • 8.44 kB
JavaScript
;
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