mirror of
https://github.com/johndoe6345789/metabuilder.git
synced 2026-04-25 14:25:02 +00:00
144 lines
4.8 KiB
Lua
144 lines
4.8 KiB
Lua
local validate_metadata = require("validate_metadata")
|
|
local validate_components = require("validate_components")
|
|
local validate_package_structure = require("validate_package_structure")
|
|
local validate_script_exports = require("validate_script_exports")
|
|
local validate_styles = require("validate_styles")
|
|
local format_results = require("format_results")
|
|
|
|
--- Validates a complete package
|
|
---@param package_path string Path to the package
|
|
---@param options? ValidationOptions Validation options
|
|
---@return ValidationResult results Validation results
|
|
local function validate_package(package_path, options)
|
|
options = options or {}
|
|
local results = {
|
|
valid = true,
|
|
errors = {},
|
|
warnings = {}
|
|
}
|
|
|
|
-- Load and validate metadata.json
|
|
local metadata_path = package_path .. "/metadata.json"
|
|
local metadata_file = io.open(metadata_path, "r")
|
|
|
|
if not metadata_file then
|
|
table.insert(results.errors, "Failed to load metadata.json")
|
|
results.valid = false
|
|
return results
|
|
end
|
|
|
|
local metadata_content = metadata_file:read("*a")
|
|
metadata_file:close()
|
|
|
|
-- Parse JSON (using global parse_json if available)
|
|
local metadata = parse_json and parse_json(metadata_content) or nil
|
|
if not metadata then
|
|
table.insert(results.errors, "Failed to parse metadata.json")
|
|
results.valid = false
|
|
return results
|
|
end
|
|
|
|
-- 1. Validate metadata schema
|
|
local metadata_valid, metadata_errors = validate_metadata(metadata)
|
|
if not metadata_valid then
|
|
for _, err in ipairs(metadata_errors) do
|
|
table.insert(results.errors, "metadata.json: " .. err)
|
|
end
|
|
results.valid = false
|
|
end
|
|
|
|
-- 2. Validate components.json
|
|
local components_path = package_path .. "/components.json"
|
|
local components_file = io.open(components_path, "r")
|
|
|
|
if components_file then
|
|
local components_content = components_file:read("*a")
|
|
components_file:close()
|
|
local components = parse_json and parse_json(components_content) or nil
|
|
if components then
|
|
local components_valid, component_errors = validate_components(components)
|
|
if not components_valid then
|
|
for _, err in ipairs(component_errors) do
|
|
table.insert(results.errors, "components.json: " .. err)
|
|
end
|
|
results.valid = false
|
|
end
|
|
else
|
|
table.insert(results.errors, "Failed to parse components.json")
|
|
results.valid = false
|
|
end
|
|
else
|
|
table.insert(results.warnings, "components.json not found (optional)")
|
|
end
|
|
|
|
-- 3. Validate folder structure
|
|
if not options.skipStructure then
|
|
local structure_results = validate_package_structure(package_path, metadata)
|
|
if not structure_results.valid then
|
|
results.valid = false
|
|
end
|
|
for _, err in ipairs(structure_results.errors) do
|
|
table.insert(results.errors, "Structure: " .. err)
|
|
end
|
|
for _, warn in ipairs(structure_results.warnings) do
|
|
table.insert(results.warnings, "Structure: " .. warn)
|
|
end
|
|
end
|
|
|
|
-- 4. Validate Lua script exports
|
|
if not options.skipLua and metadata.exports and metadata.exports.scripts then
|
|
local script_errors, script_warnings = validate_script_exports(package_path, metadata)
|
|
for _, err in ipairs(script_errors) do
|
|
table.insert(results.errors, "Lua: " .. err)
|
|
results.valid = false
|
|
end
|
|
for _, warn in ipairs(script_warnings) do
|
|
table.insert(results.warnings, "Lua: " .. warn)
|
|
end
|
|
end
|
|
|
|
-- 5. Validate styles.json (optional)
|
|
if not options.skipStyles then
|
|
local styles_result = validate_styles(package_path)
|
|
if not styles_result.success then
|
|
results.valid = false
|
|
end
|
|
for _, msg in ipairs(styles_result.messages or {}) do
|
|
if styles_result.success then
|
|
table.insert(results.warnings, "Styles: " .. msg)
|
|
else
|
|
table.insert(results.errors, "Styles: " .. msg)
|
|
end
|
|
end
|
|
for _, warn in ipairs(styles_result.warnings or {}) do
|
|
table.insert(results.warnings, "Styles: " .. warn)
|
|
end
|
|
end
|
|
|
|
return results
|
|
end
|
|
|
|
--- Validates just metadata
|
|
---@param metadata Metadata Metadata to validate
|
|
---@return boolean valid Whether metadata is valid
|
|
---@return string[] errors List of errors
|
|
local function validate_metadata_only(metadata)
|
|
return validate_metadata(metadata)
|
|
end
|
|
|
|
--- Validates just components
|
|
---@param components Component[] Components to validate
|
|
---@return boolean valid Whether components are valid
|
|
---@return string[] errors List of errors
|
|
local function validate_components_only(components)
|
|
return validate_components(components)
|
|
end
|
|
|
|
-- Return module with all functions
|
|
return {
|
|
validate_package = validate_package,
|
|
validate_metadata_only = validate_metadata_only,
|
|
validate_components_only = validate_components_only,
|
|
format_results = format_results
|
|
}
|