UNPKG

code-transmute

Version:

Convert any codebase into any language — without changing its brain.

237 lines 7.96 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.logSubHeader = exports.logHeader = exports.logInfo = exports.logWarning = exports.logError = exports.logSuccess = exports.logStep = exports.logProgress = exports.createProgress = exports.ProgressManager = void 0; const chalk_1 = __importDefault(require("chalk")); const ora_1 = __importDefault(require("ora")); class ProgressManager { spinner = null; currentStep = 0; totalSteps = 0; steps = []; constructor(totalSteps, steps) { this.totalSteps = totalSteps || 0; this.steps = steps || []; } start(options) { this.spinner = (0, ora_1.default)({ text: options.text, color: options.color || 'blue', spinner: options.spinner || 'dots', hideCursor: options.hideCursor !== false }).start(); } updateText(text) { if (this.spinner) { this.spinner.text = text; } } updateColor(color) { if (this.spinner) { this.spinner.color = color; } } succeed(text) { if (this.spinner) { this.spinner.succeed(text); } this.spinner = null; } fail(text) { if (this.spinner) { this.spinner.fail(text); } this.spinner = null; } warn(text) { if (this.spinner) { this.spinner.warn(text); } this.spinner = null; } info(text) { if (this.spinner) { this.spinner.info(text); } this.spinner = null; } stop() { if (this.spinner) { this.spinner.stop(); } this.spinner = null; } nextStep(stepText) { this.currentStep++; const stepName = stepText || this.steps[this.currentStep - 1] || `Step ${this.currentStep}`; const progress = `[${this.currentStep}/${this.totalSteps}] ${stepName}`; if (this.spinner) { this.spinner.text = progress; } } setStep(step, stepText) { this.currentStep = step; const stepName = stepText || this.steps[step - 1] || `Step ${step}`; const progress = `[${step}/${this.totalSteps}] ${stepName}`; if (this.spinner) { this.spinner.text = progress; } } getCurrentStep() { return this.currentStep; } getTotalSteps() { return this.totalSteps; } getProgress() { if (this.totalSteps === 0) return 0; return (this.currentStep / this.totalSteps) * 100; } logProgress(message, current, total) { const currentNum = current ?? this.currentStep; const totalNum = total ?? this.totalSteps; if (totalNum > 0) { const percentage = Math.round((currentNum / totalNum) * 100); const progressBar = this.createProgressBar(currentNum, totalNum); console.log(chalk_1.default.blue(`${message} ${progressBar} ${percentage}%`)); } else { console.log(chalk_1.default.blue(message)); } } createProgressBar(current, total, width = 20) { const filled = Math.round((current / total) * width); const empty = width - filled; const filledBar = '█'.repeat(filled); const emptyBar = '░'.repeat(empty); return `[${filledBar}${emptyBar}]`; } logStep(step, status = 'in-progress') { const statusSymbol = { pending: '⏳', 'in-progress': '🔄', completed: '✅', failed: '❌' }[status]; const statusColor = { pending: chalk_1.default.gray, 'in-progress': chalk_1.default.blue, completed: chalk_1.default.green, failed: chalk_1.default.red }[status]; console.log(`${statusSymbol} ${statusColor(step)}`); } logSuccess(message) { console.log(chalk_1.default.green(`✅ ${message}`)); } logError(message) { console.log(chalk_1.default.red(`❌ ${message}`)); } logWarning(message) { console.log(chalk_1.default.yellow(`⚠️ ${message}`)); } logInfo(message) { console.log(chalk_1.default.blue(`ℹ️ ${message}`)); } logHeader(title) { const line = '─'.repeat(title.length + 4); console.log(chalk_1.default.blue.bold(`\n┌${line}┐`)); console.log(chalk_1.default.blue.bold(`│ ${title} │`)); console.log(chalk_1.default.blue.bold(`└${line}┘\n`)); } logSubHeader(title) { console.log(chalk_1.default.cyan.bold(`\n${title}`)); console.log(chalk_1.default.gray('─'.repeat(title.length))); } logTable(headers, rows) { if (rows.length === 0) return; const columnWidths = headers.map((header, index) => { const maxRowWidth = Math.max(...rows.map(row => row[index]?.length || 0)); return Math.max(header.length, maxRowWidth); }); // Header const headerRow = headers.map((header, index) => chalk_1.default.blue.bold(header.padEnd(columnWidths[index]))).join(' │ '); console.log(`\n${headerRow}`); // Separator const separator = columnWidths.map(width => '─'.repeat(width)).join('─┼─'); console.log(chalk_1.default.gray(separator)); // Rows rows.forEach(row => { const rowStr = row.map((cell, index) => (cell || '').padEnd(columnWidths[index])).join(' │ '); console.log(rowStr); }); console.log(); } logSummary(items) { console.log(chalk_1.default.blue.bold('\n📋 Summary')); console.log(chalk_1.default.gray('─'.repeat(50))); items.forEach(item => { const statusColor = { success: chalk_1.default.green, warning: chalk_1.default.yellow, error: chalk_1.default.red }[item.status || 'success']; console.log(`${statusColor(item.label)}: ${chalk_1.default.white(item.value)}`); }); console.log(); } clear() { if (this.spinner) { this.spinner.stop(); this.spinner = null; } } reset() { this.clear(); this.currentStep = 0; } } exports.ProgressManager = ProgressManager; // Export convenience functions const createProgress = (totalSteps, steps) => new ProgressManager(totalSteps, steps); exports.createProgress = createProgress; const logProgress = (message, current, total) => { const progress = new ProgressManager(); progress.logProgress(message, current, total); }; exports.logProgress = logProgress; const logStep = (step, status = 'in-progress') => { const progress = new ProgressManager(); progress.logStep(step, status); }; exports.logStep = logStep; const logSuccess = (message) => { const progress = new ProgressManager(); progress.logSuccess(message); }; exports.logSuccess = logSuccess; const logError = (message) => { const progress = new ProgressManager(); progress.logError(message); }; exports.logError = logError; const logWarning = (message) => { const progress = new ProgressManager(); progress.logWarning(message); }; exports.logWarning = logWarning; const logInfo = (message) => { const progress = new ProgressManager(); progress.logInfo(message); }; exports.logInfo = logInfo; const logHeader = (title) => { const progress = new ProgressManager(); progress.logHeader(title); }; exports.logHeader = logHeader; const logSubHeader = (title) => { const progress = new ProgressManager(); progress.logSubHeader(title); }; exports.logSubHeader = logSubHeader; //# sourceMappingURL=progress.js.map