massively improves the jspg validator by removing mathmatical functions like allOf, anyOf, ref, etc to effectively use discriminators and OOP with types to determine valid pathing an nno intersections, unions, or guesswork; added cases to replace the former conditionals

This commit is contained in:
2026-04-08 13:08:24 -04:00
parent e4286ac6a9
commit 7c8df22709
30 changed files with 2526 additions and 4816 deletions

File diff suppressed because it is too large Load Diff

View File

@ -42,19 +42,21 @@ fn test_library_api() {
"types": [
{
"name": "source_schema",
"variations": ["source_schema"],
"hierarchy": ["source_schema", "entity"],
"schemas": [{
"$id": "source_schema",
"type": "object",
"properties": {
"name": { "type": "string" },
"target": { "$ref": "target_schema" }
"target": { "type": "target_schema" }
},
"required": ["name"]
}]
},
{
"name": "target_schema",
"variations": ["target_schema"],
"hierarchy": ["target_schema", "entity"],
"schemas": [{
"$id": "target_schema",
@ -89,7 +91,7 @@ fn test_library_api() {
"properties": {
"name": { "type": "string" },
"target": {
"$ref": "target_schema",
"type": "target_schema",
"compiledProperties": ["value"]
}
},
@ -115,7 +117,7 @@ fn test_library_api() {
);
// 4. Validate Happy Path
let happy_drop = jspg_validate("source_schema", JsonB(json!({"name": "Neo"})));
let happy_drop = jspg_validate("source_schema", JsonB(json!({"type": "source_schema", "name": "Neo"})));
assert_eq!(
happy_drop.0,
json!({
@ -125,7 +127,7 @@ fn test_library_api() {
);
// 5. Validate Unhappy Path
let unhappy_drop = jspg_validate("source_schema", JsonB(json!({"wrong": "data"})));
let unhappy_drop = jspg_validate("source_schema", JsonB(json!({"type": "source_schema", "wrong": "data"})));
assert_eq!(
unhappy_drop.0,
json!({

View File

@ -19,6 +19,16 @@ impl Expect {
.map(|e| serde_json::to_value(e).unwrap())
.collect();
if expected_errors.len() != actual_values.len() {
return Err(format!(
"Expected {} errors, but got {}.\nExpected subset: {:?}\nActual full errors: {:?}",
expected_errors.len(),
actual_values.len(),
expected_errors,
drop.errors
));
}
for (i, expected_val) in expected_errors.iter().enumerate() {
let mut matched = false;