UNPKG

@aquaori/deplens

Version:

A precise dependency analysis tool for npm and pnpm projects

308 lines 12.2 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.progressBarManager = exports.LogCategory = exports.LogLevel = exports.APP_INFO = exports.DEPLENS_BANNER = void 0; exports.formatLog = formatLog; exports.log = log; exports.logDebug = logDebug; exports.logInfo = logInfo; exports.logWarning = logWarning; exports.logError = logError; exports.showBanner = showBanner; exports.createProgressBar = createProgressBar; exports.showProgress = showProgress; exports.clearProgress = clearProgress; exports.debug = debug; exports.info = info; exports.warn = warn; exports.error = error; const chalk_1 = __importDefault(require("chalk")); const readline_1 = __importDefault(require("readline")); /** * Deplens 应用的 ASCII 艺术 Banner * 使用不同颜色显示应用名称 */ exports.DEPLENS_BANNER = ` ${chalk_1.default.blueBright('██████╗ ')}${chalk_1.default.greenBright('███████╗')}${chalk_1.default.yellowBright('██████╗ ')}${chalk_1.default.redBright('██╗ ')}${chalk_1.default.cyanBright('███████╗')}${chalk_1.default.magentaBright('███╗ ██╗')}${chalk_1.default.cyanBright('███████╗')} ${chalk_1.default.blueBright('██╔══██╗')}${chalk_1.default.greenBright('██╔════╝')}${chalk_1.default.yellowBright('██╔══██╗')}${chalk_1.default.redBright('██║ ')}${chalk_1.default.cyanBright('██╔════╝')}${chalk_1.default.magentaBright('████╗ ██║')}${chalk_1.default.cyanBright('██╔════╝')} ${chalk_1.default.blueBright('██║ ██║')}${chalk_1.default.greenBright('█████╗ ')}${chalk_1.default.yellowBright('██████╔╝')}${chalk_1.default.redBright('██║ ')}${chalk_1.default.cyanBright('█████╗ ')}${chalk_1.default.magentaBright('██╔██╗ ██║')}${chalk_1.default.cyanBright('███████╗')} ${chalk_1.default.blueBright('██║ ██║')}${chalk_1.default.greenBright('██╔══╝ ')}${chalk_1.default.yellowBright('██╔═══╝ ')}${chalk_1.default.redBright('██║ ')}${chalk_1.default.cyanBright('██╔══╝ ')}${chalk_1.default.magentaBright('██║╚██╗██║')}${chalk_1.default.cyanBright('╚════██║')} ${chalk_1.default.blueBright('██████╔╝')}${chalk_1.default.greenBright('███████╗')}${chalk_1.default.yellowBright('██║ ')}${chalk_1.default.redBright('███████╗')}${chalk_1.default.cyanBright('███████╗')}${chalk_1.default.magentaBright('██║ ╚████║')}${chalk_1.default.cyanBright('███████║')} ${chalk_1.default.blueBright('╚═════╝ ')}${chalk_1.default.greenBright('╚══════╝')}${chalk_1.default.yellowBright('╚═╝ ')}${chalk_1.default.redBright('╚══════╝')}${chalk_1.default.cyanBright('╚══════╝')}${chalk_1.default.magentaBright('╚═╝ ╚═══╝')}${chalk_1.default.cyanBright('╚══════╝')} `; /** * 应用信息配置对象 * 包含版本号、描述和作者信息 */ exports.APP_INFO = { version: '1.0.3', description: 'A precise dependency analysis tool for npm and pnpm projects', author: 'Deplens Team' }; /** * 日志级别枚举 * 定义了四种日志级别:DEBUG, INFO, WARN, ERROR */ var LogLevel; (function (LogLevel) { LogLevel["DEBUG"] = "DEBUG"; LogLevel["INFO"] = "INFO"; LogLevel["WARN"] = "WARN"; LogLevel["ERROR"] = "ERROR"; })(LogLevel || (exports.LogLevel = LogLevel = {})); /** * 日志分类枚举 * 定义了不同的日志分类:通用、文件系统、网络、分析、依赖、配置 */ var LogCategory; (function (LogCategory) { LogCategory["GENERAL"] = "GENERAL"; LogCategory["FILE_SYSTEM"] = "FILE_SYSTEM"; LogCategory["NETWORK"] = "NETWORK"; LogCategory["ANALYSIS"] = "ANALYSIS"; LogCategory["DEPENDENCY"] = "DEPENDENCY"; LogCategory["CONFIG"] = "CONFIG"; })(LogCategory || (exports.LogCategory = LogCategory = {})); /** * 不同日志级别的颜色映射 */ const logColors = { [LogLevel.DEBUG]: chalk_1.default.gray, [LogLevel.INFO]: chalk_1.default.blue, [LogLevel.WARN]: chalk_1.default.yellow, [LogLevel.ERROR]: chalk_1.default.red }; /** * 不同日志级别的表情符号映射 */ const logEmojis = { [LogLevel.DEBUG]: '🐛', [LogLevel.INFO]: 'ℹ️', [LogLevel.WARN]: '⚠️', [LogLevel.ERROR]: '❌' }; /** * 格式化日志消息 * @param level 日志级别 * @param message 日志消息内容 * @param category 日志分类(默认为 GENERAL) * @returns 格式化后的日志字符串 */ function formatLog(level, message, category = LogCategory.GENERAL) { const timestamp = new Date().toISOString(); const color = logColors[level]; const emoji = logEmojis[level]; const categoryTag = category !== LogCategory.GENERAL ? `[${category}] ` : ''; return `${chalk_1.default.gray(timestamp)} ${color(level.padEnd(5))} ${emoji} ${categoryTag}${color(message)}`; } /** * 输出日志到控制台 * @param level 日志级别 * @param message 日志消息内容 * @param category 日志分类(默认为 GENERAL) */ function log(level, message, category = LogCategory.GENERAL) { const formattedMessage = formatLog(level, message, category); switch (level) { case LogLevel.ERROR: console.error(formattedMessage); break; case LogLevel.WARN: console.warn(formattedMessage); break; default: console.log(formattedMessage); } } /** * 输出 DEBUG 级别日志 * @param message 日志消息内容 * @param category 日志分类(默认为 GENERAL) */ function logDebug(message, category = LogCategory.GENERAL) { log(LogLevel.DEBUG, message, category); } /** * 输出 INFO 级别日志 * @param message 日志消息内容 * @param category 日志分类(默认为 GENERAL) */ function logInfo(message, category = LogCategory.GENERAL) { log(LogLevel.INFO, message, category); } /** * 输出 WARN 级别日志 * @param message 日志消息内容 * @param category 日志分类(默认为 GENERAL) */ function logWarning(message, category = LogCategory.GENERAL) { log(LogLevel.WARN, message, category); } /** * 输出 ERROR 级别日志 * @param message 日志消息内容 * @param category 日志分类(默认为 GENERAL) */ function logError(message, category = LogCategory.GENERAL) { log(LogLevel.ERROR, message, category); } /** * 显示应用 Banner 和基本信息 */ function showBanner() { console.log(exports.DEPLENS_BANNER); console.log(chalk_1.default.bold.cyan(`\n Version: ${exports.APP_INFO.version}`)); console.log(chalk_1.default.bold.cyan(` Description: ${exports.APP_INFO.description}\n`)); } /** * 创建进度条字符串 * @param current 当前进度值 * @param total 总进度值 * @param width 进度条宽度(默认为 30) * @returns 格式化后的进度条字符串 */ function createProgressBar(current, total, width = 30) { const percentage = Math.round((current / total) * 100); const filledWidth = Math.round((current / total) * width); const emptyWidth = width - filledWidth; const filledBar = chalk_1.default.greenBright('█'.repeat(filledWidth)); const emptyBar = chalk_1.default.gray('░'.repeat(emptyWidth)); return `${filledBar}${emptyBar} ${chalk_1.default.yellowBright(percentage + '%')}`; } /** * 显示进度信息 * @param message 进度消息 * @param current 当前进度值 * @param total 总进度值 */ function showProgress(message, current, total) { const progressBar = createProgressBar(current, total); process.stdout.write(`\r${chalk_1.default.blue('→')} ${message} ${progressBar}`); } /** * 清除进度显示 */ function clearProgress() { process.stdout.write('\r\x1b[K'); } /** * 进度条管理器类 * 用于创建和管理多个进度条 */ class ProgressBarManager { constructor() { this.progressBars = new Map(); } /** * 创建一个新的进度条 * @param name 进度条名称 * @param totalSteps 总步骤数 * @param message 进度消息 * @param width 进度条宽度(默认为 30) */ create(name, totalSteps, message, width = 30) { this.progressBars.set(name, { name, totalSteps, currentStep: 0, message, width }); } /** * 推进进度条 * @param name 进度条名称 * @param steps 前进步骤数(默认为 1) */ advance(name, steps = 1) { const progressBar = this.progressBars.get(name); if (!progressBar) { throw new Error(`Progress bar '${name}' not found`); } progressBar.currentStep = Math.min(progressBar.currentStep + steps, progressBar.totalSteps); this.display(name); } /** * 显示进度条 * @param name 进度条名称 */ display(name) { const progressBar = this.progressBars.get(name); if (!progressBar) { throw new Error(`Progress bar '${name}' not found`); } const percentage = Math.round((progressBar.currentStep / progressBar.totalSteps) * 100); const filledWidth = Math.round((progressBar.currentStep / progressBar.totalSteps) * (progressBar.width || 30)); const emptyWidth = (progressBar.width || 30) - filledWidth; const filledBar = chalk_1.default.greenBright('█'.repeat(filledWidth)); const emptyBar = chalk_1.default.gray('░'.repeat(emptyWidth)); const progressBarText = `${chalk_1.default.blue('→')} ${progressBar.message} ${filledBar}${emptyBar} ${chalk_1.default.yellowBright(percentage + '%')}`; readline_1.default.cursorTo(process.stdout, 0); readline_1.default.clearLine(process.stdout, 0); process.stdout.write(progressBarText); } /** * 清除进度条 * @param name 进度条名称 */ clear(name) { const progressBar = this.progressBars.get(name); if (!progressBar) { throw new Error(`Progress bar '${name}' not found`); } readline_1.default.cursorTo(process.stdout, 0); readline_1.default.clearLine(process.stdout, 0); this.progressBars.delete(name); } /** * 获取进度百分比 * @param name 进度条名称 * @returns 进度百分比 */ getProgress(name) { const progressBar = this.progressBars.get(name); if (!progressBar) { throw new Error(`Progress bar '${name}' not found`); } return Math.round((progressBar.currentStep / progressBar.totalSteps) * 100); } } /** * 全局进度条管理器实例 */ exports.progressBarManager = new ProgressBarManager(); /** * 输出 DEBUG 级别日志的便捷函数 * @param message 日志消息内容 * @param category 日志分类(默认为 GENERAL) */ function debug(message, category = LogCategory.GENERAL) { logDebug(message, category); } /** * 输出 INFO 级别日志的便捷函数 * @param message 日志消息内容 * @param category 日志分类(默认为 GENERAL) */ function info(message, category = LogCategory.GENERAL) { logInfo(message, category); } /** * 输出 WARN 级别日志的便捷函数 * @param message 日志消息内容 * @param category 日志分类(默认为 GENERAL) */ function warn(message, category = LogCategory.GENERAL) { logWarning(message, category); } /** * 输出 ERROR 级别日志的便捷函数 * @param message 日志消息内容 * @param category 日志分类(默认为 GENERAL) */ function error(message, category = LogCategory.GENERAL) { logError(message, category); } //# sourceMappingURL=cli-utils.js.map