Files
everforest-resources/scripts/validate.mjs
Ismo Vuorinen 11baabe545 feat: initial scaffold and generator
- Complete project structure with directories for all target platforms
- Template system for CLI tools with color placeholder replacement
- Working generator that processes templates for 6 theme variants
- GitHub workflows for build, snapshots, commitlint, and cli-verify
- Installer and verifier scripts for CLI tool deployment
- Comprehensive documentation and specifications
- Biome 2.x linting and formatting setup
- Husky git hooks for pre-commit validation
2025-09-05 23:06:12 +03:00

120 lines
3.1 KiB
JavaScript
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/usr/bin/env node
/**
* Everforest Resources Validation Script
*
* Validates that all generated files are consistent and follow the spec.
* Ensures no raw hex values in CLI configs (ANSI only).
* Validates that all required variants are present.
*/
import fs from 'node:fs/promises';
import path from 'node:path';
import { fileURLToPath } from 'node:url';
const __filename = fileURLToPath(import.meta.url);
const __dirname = path.dirname(__filename);
const rootDir = path.resolve(__dirname, '..');
class EverforestValidator {
constructor() {
this.errors = [];
this.warnings = [];
}
async validate() {
console.log('🔍 Starting Everforest validation...');
await this.validatePalette();
await this.validateFileStructure();
await this.validateNoRawHex();
await this.validateVariants();
this.reportResults();
}
async validatePalette() {
try {
const paletteData = await fs.readFile(
path.join(rootDir, 'palettes/everforest.json'),
'utf-8'
);
const palette = JSON.parse(paletteData);
// Validate structure
if (!palette.variants || !palette.accents || !palette.grays) {
this.errors.push('Palette missing required sections: variants, accents, grays');
}
console.log('✅ Palette structure valid');
} catch (error) {
this.errors.push(`Palette validation failed: ${error.message}`);
}
}
async validateFileStructure() {
// Validate that required directories exist
const requiredDirs = [
'palettes',
'scripts',
'terminals',
'cli',
'editors',
'web',
'docs',
'verify',
];
for (const dir of requiredDirs) {
try {
await fs.access(path.join(rootDir, dir));
console.log(`✅ Directory ${dir} exists`);
} catch (_error) {
this.warnings.push(`Directory ${dir} missing - will be created during generation`);
}
}
}
async validateNoRawHex() {
// This will be implemented to scan CLI configs for raw hex values
console.log('🔍 Checking for raw hex values in CLI configs...');
// Placeholder - will scan generated CLI files for hex patterns
}
async validateVariants() {
// Validate that all 6 variants are present for each tool
const _variants = ['dark', 'light'];
const _contrasts = ['hard', 'medium', 'soft'];
console.log('🔍 Validating theme variants...');
// Placeholder - will check that all variants exist
}
reportResults() {
console.log('\n📊 Validation Results:');
if (this.errors.length > 0) {
console.log('\n❌ Errors:');
this.errors.forEach(error => console.log(` - ${error}`));
}
if (this.warnings.length > 0) {
console.log('\n⚠ Warnings:');
this.warnings.forEach(warning => console.log(` - ${warning}`));
}
if (this.errors.length === 0) {
console.log('\n✅ Validation passed!');
} else {
console.log('\n❌ Validation failed!');
process.exit(1);
}
}
}
// Main execution
if (import.meta.url === `file://${process.argv[1]}`) {
const validator = new EverforestValidator();
await validator.validate();
}