code-transmute
Version:
Convert any codebase into any language — without changing its brain.
237 lines • 7.96 kB
JavaScript
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
;