image-asset-manager
Version:
A comprehensive image asset management tool for frontend projects
159 lines • 6.08 kB
JavaScript
;
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