UNPKG

willow-cli

Version:

CLI for installing Willow Design System components

98 lines (97 loc) 4.42 kB
import { Command } from 'commander'; import { Logger } from '../utils/logger.js'; import { detectProjectType } from '../utils/projectDetection.js'; import { validateWillowSetup, validateComponentImports, validateEssentials } from '../utils/validationChecker.js'; export const validateCommand = new Command('validate') .description('Validate Willow Design System setup') .option('--quick', 'Run quick validation (essential files only)') .option('--components', 'Validate component imports only') .option('--verbose', 'Show detailed validation results') .action(async (options) => { Logger.title('Validating Willow Design System Setup'); try { // Detect project type const projectType = await detectProjectType(); if (options.quick) { // Quick validation Logger.info('Running quick validation...'); const isValid = await validateEssentials(projectType); if (isValid) { Logger.success('✅ Quick validation passed - essential files are present'); } else { Logger.error('❌ Quick validation failed - missing essential files'); process.exit(1); } return; } if (options.components) { // Component imports validation only Logger.info('Validating component imports...'); const result = await validateComponentImports(); if (result.isValid) { Logger.success('✅ Component imports validation passed'); Logger.info(`Verified ${result.checkedFiles.length} files`); } else { Logger.error('❌ Component imports validation failed'); result.errors.forEach(error => Logger.error(` ${error}`)); process.exit(1); } return; } // Full validation Logger.info('Running comprehensive validation...'); const [setupValidation, importValidation] = await Promise.all([ validateWillowSetup(projectType), validateComponentImports() ]); const allErrors = [...setupValidation.errors, ...importValidation.errors]; const allWarnings = [...setupValidation.warnings, ...importValidation.warnings]; const totalFiles = setupValidation.checkedFiles.length + importValidation.checkedFiles.length; // Display results Logger.spacer(); if (allErrors.length === 0) { Logger.success('🎉 All validation checks passed!'); Logger.info(`📁 Verified ${totalFiles} files`); if (allWarnings.length > 0) { Logger.spacer(); Logger.warning('⚠️ Validation warnings:'); allWarnings.forEach(warning => Logger.warning(` ${warning}`)); } } else { Logger.error('❌ Validation failed'); Logger.error(`Found ${allErrors.length} errors and ${allWarnings.length} warnings`); Logger.spacer(); Logger.error('Errors:'); allErrors.forEach(error => Logger.error(` ${error}`)); if (allWarnings.length > 0) { Logger.spacer(); Logger.warning('Warnings:'); allWarnings.forEach(warning => Logger.warning(` ${warning}`)); } Logger.spacer(); Logger.info('💡 To fix these issues, try running:'); Logger.info(' npx willow-cli init --yes'); process.exit(1); } if (options.verbose) { Logger.spacer(); Logger.info('📋 Validation Summary:'); Logger.info(` Setup files: ${setupValidation.checkedFiles.length}`); Logger.info(` Component files: ${importValidation.checkedFiles.length}`); Logger.info(` Total verified: ${totalFiles}`); if (setupValidation.checkedFiles.length > 0) { Logger.info(' Verified files:'); [...setupValidation.checkedFiles, ...importValidation.checkedFiles] .forEach(file => Logger.info(` ✓ ${file}`)); } } } catch (error) { Logger.error('Validation failed with error:'); Logger.error(error instanceof Error ? error.message : 'Unknown error'); process.exit(1); } });