#!/usr/bin/env node
import fs from 'fs';
import path from 'path';
import Ajv from 'ajv';
import addFormats from 'ajv-formats';
// Initialize AJV with formats
const ajv = new Ajv({ allErrors: true });
addFormats(ajv);
// Load schemas
const designTokenSchema = JSON.parse(fs.readFileSync('src/schemas/design-token.schema.json', 'utf8'));
const componentSchema = JSON.parse(fs.readFileSync('src/schemas/component.schema.json', 'utf8'));
const guidelineSchema = JSON.parse(fs.readFileSync('src/schemas/guideline.schema.json', 'utf8'));
// Compile validators
const validateDesignToken = ajv.compile(designTokenSchema);
const validateComponent = ajv.compile(componentSchema);
const validateGuideline = ajv.compile(guidelineSchema);
// Load data files
const designTokens = JSON.parse(fs.readFileSync('data/design-tokens.json', 'utf8'));
const components = JSON.parse(fs.readFileSync('data/components.json', 'utf8'));
const guidelines = JSON.parse(fs.readFileSync('data/guidelines.json', 'utf8'));
let hasErrors = false;
// Validate design tokens
console.log('π Validating Design Tokens...');
designTokens.forEach((token, index) => {
if (!validateDesignToken(token)) {
console.error(`β Design Token ${index} (${token.name || 'unnamed'}) validation failed:`);
console.error(validateDesignToken.errors);
hasErrors = true;
}
});
console.log(`β
${designTokens.length} design tokens validated`);
// Validate components
console.log('\nπ Validating Components...');
components.forEach((component, index) => {
if (!validateComponent(component)) {
console.error(`β Component ${index} (${component.name || 'unnamed'}) validation failed:`);
console.error(validateComponent.errors);
hasErrors = true;
}
});
console.log(`β
${components.length} components validated`);
// Validate guidelines
console.log('\nπ Validating Guidelines...');
guidelines.forEach((guideline, index) => {
if (!validateGuideline(guideline)) {
console.error(`β Guideline ${index} (${guideline.id || 'unnamed'}) validation failed:`);
console.error(validateGuideline.errors);
hasErrors = true;
}
});
console.log(`β
${guidelines.length} guidelines validated`);
if (hasErrors) {
console.error('\nβ Validation failed with errors');
process.exit(1);
} else {
console.log('\nπ All sample data validated successfully!');
console.log('\nπ Summary:');
console.log(` β’ ${designTokens.length} design tokens`);
console.log(` β’ ${components.length} components`);
console.log(` β’ ${guidelines.length} guidelines`);
// Show some statistics
const tokenCategories = [...new Set(designTokens.map(t => t.category))];
const componentCategories = [...new Set(components.map(c => c.category))];
const guidelineCategories = [...new Set(guidelines.map(g => g.category))];
console.log('\nπ·οΈ Categories:');
console.log(` β’ Token categories: ${tokenCategories.join(', ')}`);
console.log(` β’ Component categories: ${componentCategories.join(', ')}`);
console.log(` β’ Guideline categories: ${guidelineCategories.join(', ')}`);
}