UNPKG

@zzclub/z-cli

Version:

all-in-one 工具箱,专为提升日常及工作效率而生

55 lines 2.24 kB
import { resolve } from 'node:path'; import { ImageCompressor } from './compressor.js'; import { FileProcessor } from './file-processor.js'; import { ConfigManager } from '../../core/config-manager.js'; import { logger, formatFileSize, formatCompressionRatio } from '../../core/logger.js'; /** * Tiny 命令处理函数 */ export async function tinyCommand(options) { try { const configManager = new ConfigManager(); const config = configManager.getTinyConfig(); // 合并配置和命令行选项 const quality = options.quality ?? config.quality; const recursive = options.recursive ?? config.recursive; const overwrite = options.overwrite ?? config.overwrite; const outputDir = options.output ?? config.outputDir; // 验证输入 if (!options.file) { logger.error('请使用 -f 或 --file 指定要压缩的文件或目录'); process.exit(1); } const inputPath = resolve(process.cwd(), options.file); // 验证质量参数 if (quality < 1 || quality > 100) { logger.error('压缩质量必须在 1-100 之间'); process.exit(1); } // 创建压缩选项 const compressionOptions = { quality, overwrite, outputDir, recursive, }; // 执行压缩 const compressor = new ImageCompressor(); const processor = new FileProcessor(compressor); const stats = await processor.process(inputPath, compressionOptions); // 显示统计信息 logger.box(`压缩完成\n\n` + `总文件数: ${stats.total}\n` + `成功: ${stats.success}\n` + `失败: ${stats.failed}\n` + `总原始大小: ${formatFileSize(stats.totalOriginalSize)}\n` + `总压缩后大小: ${formatFileSize(stats.totalCompressedSize)}\n` + `平均压缩率: ${formatCompressionRatio(stats.averageCompressionRatio)}`); process.exit(0); } catch (error) { logger.error(`执行失败: ${error instanceof Error ? error.message : String(error)}`); process.exit(1); } } //# sourceMappingURL=index.js.map