UNPKG

nsgm-cli

Version:

A CLI tool to run Next/Style-components and Graphql/Mysql fullstack project

149 lines (148 loc) 4.59 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.Console = void 0; const chalk_1 = __importDefault(require("chalk")); /** * 控制台输出工具类 */ class Console { /** * 成功消息 */ static success(message) { console.log(chalk_1.default.green('✅ ') + chalk_1.default.white(message)); } /** * 错误消息 */ static error(message) { console.log(chalk_1.default.red('❌ ') + chalk_1.default.white(message)); } /** * 警告消息 */ static warning(message) { console.log(chalk_1.default.yellow('⚠️ ') + chalk_1.default.white(message)); } /** * 信息消息 */ static info(message) { console.log(chalk_1.default.blue('ℹ️ ') + chalk_1.default.white(message)); } /** * 调试消息 */ static debug(message) { console.log(chalk_1.default.gray('🐛 ') + chalk_1.default.gray(message)); } /** * 标题 */ static title(message) { console.log(chalk_1.default.bold.blue(message)); } /** * 副标题 */ static subtitle(message) { console.log(chalk_1.default.cyan(message)); } /** * 突出显示 */ static highlight(message) { console.log(chalk_1.default.bold.yellow(message)); } /** * 分隔线 */ static separator() { console.log(chalk_1.default.gray('─'.repeat(50))); } /** * 空行 */ static newLine(count = 1) { console.log('\n'.repeat(count - 1)); } /** * 简单的加载动画 */ static spinner(text, color = 'cyan') { let spinnerInterval = null; const frames = ['⠋', '⠙', '⠹', '⠸', '⠼', '⠴', '⠦', '⠧', '⠇', '⠏']; let currentFrame = 0; return { start() { process.stdout.write(chalk_1.default[color](`${frames[0]} ${text}`)); spinnerInterval = setInterval(() => { currentFrame = (currentFrame + 1) % frames.length; process.stdout.write(`\r${chalk_1.default[color](`${frames[currentFrame]} ${text}`)}`); }, 100); }, stop() { if (spinnerInterval) { clearInterval(spinnerInterval); spinnerInterval = null; process.stdout.write(`\r${' '.repeat(text.length + 2)}\r`); } }, succeed(message) { this.stop(); Console.success(message || text); }, fail(message) { this.stop(); Console.error(message || text); }, }; } /** * 带边框的消息 */ static box(message, type = 'info') { const colors = { success: chalk_1.default.green, error: chalk_1.default.red, warning: chalk_1.default.yellow, info: chalk_1.default.blue, }; const icons = { success: '✅', error: '❌', warning: '⚠️', info: 'ℹ️', }; const color = colors[type]; const icon = icons[type]; const lines = message.split('\n'); const maxLength = Math.max(...lines.map((line) => line.length)); const border = '─'.repeat(maxLength + 4); console.log(color(`┌${border}┐`)); console.log(color(`│ ${icon} ${' '.repeat(maxLength - 1)} │`)); lines.forEach((line) => { const padding = ' '.repeat(maxLength - line.length); console.log(color(`│ ${line}${padding} │`)); }); console.log(color(`└${border}┘`)); } /** * 进度条(简单版本) */ static progress(current, total, description = '') { const percentage = Math.round((current / total) * 100); const completed = Math.round((current / total) * 20); const remaining = 20 - completed; const progressBar = chalk_1.default.green('█'.repeat(completed)) + chalk_1.default.gray('░'.repeat(remaining)); const text = description ? ` ${description}` : ''; process.stdout.write(`\r[${progressBar}] ${percentage}%${text}`); if (current === total) { console.log(); // 换行 } } } exports.Console = Console;