@hanamura/rcgen
Version:
Generate optimized React container components from configuration
94 lines (93 loc) • 3.37 kB
JavaScript
;
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,
};
}