UNPKG

@hanamura/rcgen

Version:

Generate optimized React container components from configuration

94 lines (93 loc) 3.37 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.validateConfig = validateConfig; /** * Validate the configuration */ function validateConfig(config) { const errors = []; // Check if config is an object if (!config || typeof config !== 'object') { return { valid: false, errors: ['Configuration must be a valid JSON object'], }; } // Validate required properties if (!config.queries || !Array.isArray(config.queries)) { errors.push('Config must contain a "queries" array'); } else { // Validate each query config.queries.forEach((query, index) => { if (!query.name) { errors.push(`Query at index ${index} is missing a "name" property`); } if (!query.query) { errors.push(`Query at index ${index} is missing a "query" property`); } // Validate query format if (query.query && typeof query.query === 'string' && !query.query.includes('(') && !query.query.includes(')')) { errors.push(`Query at index ${index} must contain a valid media query with parentheses`); } }); } // Validate spacing if (!config.spacing || !Array.isArray(config.spacing)) { errors.push('Config must contain a "spacing" array'); } else { // Validate each spacing config.spacing.forEach((spacing, index) => { if (!spacing.name) { errors.push(`Spacing at index ${index} is missing a "name" property`); } if (!spacing.value) { errors.push(`Spacing at index ${index} is missing a "value" property`); } // Validate CSS value format if it's a string if (spacing.value && typeof spacing.value === 'string' && !spacing.value.startsWith('var(--') && !spacing.value.match(/^[0-9.]+(rem|em|px|vh|vw|%)$/)) { errors.push(`Spacing value at index ${index} must use valid CSS units or be a CSS variable`); } }); } // Validate containers if (!config.containers || !Array.isArray(config.containers)) { errors.push('Config must contain a "containers" array'); } else { // Check for empty containers array if (config.containers.length === 0) { errors.push('The "containers" array must contain at least one component'); } // Check for invalid container names const validContainers = [ 'Tile', 'Stack', 'Cluster', 'Reel', 'Switcher', 'Panorama', ]; for (const container of config.containers) { if (!validContainers.includes(container)) { errors.push(`Invalid container name: "${container}". Valid names are: ${validContainers.join(', ')}`); } } } // Check for variable prefix if present if (config.variablePrefix !== undefined && typeof config.variablePrefix !== 'string') { errors.push('The "variablePrefix" property must be a string'); } return { valid: errors.length === 0, errors, }; }