UNPKG

image-asset-manager

Version:

A comprehensive image asset management tool for frontend projects

159 lines 6.08 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.CLIValidator = void 0; exports.displayValidationResult = displayValidationResult; class CLIValidator { constructor(configManager) { this.configManager = configManager; } validateScanOptions(options, scanOptions) { const result = { valid: true, errors: [], warnings: [], }; // 验证项目路径 if (!options.projectPath) { result.errors.push("Project path is required"); result.valid = false; } // 验证包含和排除模式 if (!options.include || options.include.length === 0) { result.warnings.push("No include patterns specified, using defaults"); } if (!options.exclude || options.exclude.length === 0) { result.warnings.push("No exclude patterns specified, using defaults"); } // 验证输出格式 if (scanOptions?.outputFormat && !["table", "json", "csv"].includes(scanOptions.outputFormat)) { result.errors.push("Invalid output format. Must be one of: table, json, csv"); result.valid = false; } return result; } validateServeOptions(options, serveOptions) { const result = { valid: true, errors: [], warnings: [], }; // 验证端口 if (options.port < 1 || options.port > 65535) { result.errors.push("Port must be between 1 and 65535"); result.valid = false; } // 验证主机 if (serveOptions?.host && typeof serveOptions.host !== "string") { result.errors.push("Host must be a string"); result.valid = false; } // 验证SSL配置 if (serveOptions?.ssl) { if (!serveOptions.ssl.cert || !serveOptions.ssl.key) { result.errors.push("SSL requires both cert and key files"); result.valid = false; } } return result; } validateOptimizeOptions(options, optimizeOptions) { const result = { valid: true, errors: [], warnings: [], }; // 验证质量参数 if (optimizeOptions?.quality && (optimizeOptions.quality < 1 || optimizeOptions.quality > 100)) { result.errors.push("Quality must be between 1 and 100"); result.valid = false; } if (optimizeOptions?.pngQuality && (optimizeOptions.pngQuality < 1 || optimizeOptions.pngQuality > 100)) { result.errors.push("PNG quality must be between 1 and 100"); result.valid = false; } if (optimizeOptions?.jpgQuality && (optimizeOptions.jpgQuality < 1 || optimizeOptions.jpgQuality > 100)) { result.errors.push("JPG quality must be between 1 and 100"); result.valid = false; } if (optimizeOptions?.webpQuality && (optimizeOptions.webpQuality < 1 || optimizeOptions.webpQuality > 100)) { result.errors.push("WebP quality must be between 1 and 100"); result.valid = false; } // 验证并行处理数量 if (optimizeOptions?.parallel && optimizeOptions.parallel < 1) { result.errors.push("Parallel count must be at least 1"); result.valid = false; } // 验证批处理大小 if (optimizeOptions?.batchSize && optimizeOptions.batchSize < 1) { result.errors.push("Batch size must be at least 1"); result.valid = false; } return result; } validateGenerateOptions(options, generateOptions) { const result = { valid: true, errors: [], warnings: [], }; // 验证框架 const supportedFrameworks = ["react", "vue", "angular", "svelte", "html"]; if (generateOptions?.framework && !supportedFrameworks.includes(generateOptions.framework)) { result.errors.push(`Unsupported framework. Must be one of: ${supportedFrameworks.join(", ")}`); result.valid = false; } // 验证输出目录 if (generateOptions?.outputDir && typeof generateOptions.outputDir !== "string") { result.errors.push("Output directory must be a string"); result.valid = false; } // 验证组件前缀 if (generateOptions?.componentPrefix && typeof generateOptions.componentPrefix !== "string") { result.errors.push("Component prefix must be a string"); result.valid = false; } return result; } validateAllOptions(command, options, commandOptions) { switch (command) { case "scan": return this.validateScanOptions(options, commandOptions); case "serve": return this.validateServeOptions(options, commandOptions); case "optimize": return this.validateOptimizeOptions(options, commandOptions); case "generate": return this.validateGenerateOptions(options, commandOptions); default: return { valid: false, errors: [`Unknown command: ${command}`], warnings: [], }; } } } exports.CLIValidator = CLIValidator; function displayValidationResult(result, silent = false) { if (!silent) { if (result.errors.length > 0) { console.error("❌ Validation errors:"); result.errors.forEach((error) => console.error(` • ${error}`)); } if (result.warnings.length > 0) { console.warn("⚠️ Warnings:"); result.warnings.forEach((warning) => console.warn(` • ${warning}`)); } } return result.valid; } //# sourceMappingURL=cli-validator.js.map