mirror of
https://github.com/johndoe6345789/metabuilder.git
synced 2026-04-26 23:04:57 +00:00
5.5 KiB
5.5 KiB
Styles Validation Documentation
Overview
The package validator now validates both V1 (CSS-syntax) and V2 (abstract system) schema formats for styles.json.
Schema Detection
The validator automatically detects the schema version:
- V2: Has
schema_versionorpackagefield (object format) - V1: Array format (legacy CSS-syntax)
V1 Schema Validation
Required Fields
id(string, unique)type(enum: global, component, utility, animation)css(string, non-empty)
Optional Fields
priority(number)className(string)description(string)category(string)
Checks
- Duplicate ID detection
- Valid type enum values
- CSS content not empty
- Proper field types
V2 Schema Validation
Top-Level Structure
{
schema_version: string (semver),
package: string,
tokens: object,
selectors: array,
effects: array,
appearance: array,
layouts: array,
transitions: array,
rules: array,
environments: array
}
1. Tokens Validation
Validates:
tokens.colorsis objecttokens.spacingis objecttokens.typographyis object
2. Selectors Validation (Selection Layer)
Each selector must have:
id(string, unique)predicate(object)targetType(string, warning if missing)classes(array, optional)states(array, optional)relationship(object, optional)
3. Effects Validation (Value System)
Each effect must have:
id(string, unique)properties(object)
4. Appearance Validation (Paint & Effects Layer)
Each appearance must have:
id(string, unique)layers(array)
Each layer must have:
type(enum: background, foreground, border, shadow, filter)properties(object)
5. Layouts Validation (Constraint Systems)
Each layout must have:
id(string, unique)type(enum: flow, flex, grid, absolute, sticky)constraints(object, warning if missing)
6. Transitions Validation (State Machines)
Each transition must have:
id(string, unique)trigger(object, warning if missing)properties(array, warning if missing)
7. Rules Validation (Cascade Layer)
Each rule must have:
id(string, unique)selector(string reference to selector id)priority(object, warning if missing)importance(string, warning if missing)specificity(object)ids(number)classes(number)types(number)
sourceOrder(number)
enabled(boolean, optional)
8. Environments Validation (Context Simulator)
Each environment must have:
id(string, unique)conditions(object)
Error vs Warning
Errors (fail validation)
- Missing required fields
- Invalid types
- Duplicate IDs
- Invalid enum values
- Malformed JSON
Warnings (pass but flag)
- Missing optional but recommended fields
- Empty CSS content (V1)
- Schema version not semver
- Missing constraints in layouts
- Missing priority in rules
Usage
local validate_styles = require("validate_styles")
-- Validate a package
local result = validate_styles("/path/to/package")
if result.success then
print("Validation passed!")
for _, msg in ipairs(result.messages) do
print(" [INFO] " .. msg)
end
else
print("Validation failed!")
for _, err in ipairs(result.messages) do
print(" [ERROR] " .. err)
end
end
for _, warn in ipairs(result.warnings) do
print(" [WARN] " .. warn)
end
Integration
The styles validator is integrated into the main package validator:
-- In validate_package.lua
local validate_styles = require("validate_styles")
-- 5. Validate styles.json (optional)
if not options.skipStyles then
local styles_result = validate_styles(package_path)
-- ... handle results
end
Example Output
V1 Schema
[INFO] V1 schema: Found 11 style entries
[WARN] Style entry #1 has empty CSS content
V2 Schema
[INFO] V2 schema validated
[WARN] Selector #1 predicate missing targetType
[WARN] Rule #1 priority missing importance
[WARN] Layout #1 missing constraints
Validation Rules Summary
| Section | Required Fields | Validates |
|---|---|---|
| Tokens | - | Structure of color/spacing/typography |
| Selectors | id, predicate | Predicate structure, no duplicates |
| Effects | id, properties | Properties exist, no duplicates |
| Appearance | id, layers | Layer types valid, no duplicates |
| Layouts | id, type | Type enum, constraints structure |
| Transitions | id | Trigger and properties structure |
| Rules | id, selector | Priority and specificity structure |
| Environments | id, conditions | Conditions exist, no duplicates |
Extending Validation
To add new validation rules:
-
Add validation function for new section:
function validate_new_section(section, result) -- validation logic end -
Call from
validate_styles_v2:if styles.new_section then validate_new_section(styles.new_section, result) end -
Update this documentation
Schema Evolution
The validator is designed to handle schema evolution:
- V1 → V2 migration supported
- Future V3 can be added with
elseifbranch - Backward compatibility maintained
- Version detected automatically
This ensures packages can gradually migrate from V1 to V2 without breaking validation.