fix(schemav2validator): conditionally strip @context/@type based on schema properties

Previously, @context and @type were always stripped from domain data before
validation. This caused failures when a schema explicitly declares these as
required properties, resulting in "missing required field" errors. The fix
checks whether each field is declared in the schema's properties before
deciding to strip it.
This commit is contained in:
Mayuresh
2026-04-07 12:29:15 +05:30
parent 83d8a1acfc
commit 2f1bfa23a7

View File

@@ -383,12 +383,22 @@ func (c *schemaCache) validateReferencedObject(
return fmt.Errorf("at %s: %w", obj.Path, err)
}
// Strip JSON-LD metadata before validation
domainData := make(map[string]interface{}, len(obj.Data)-2)
// Strip @context and @type only if the schema does not declare them as properties.
// Some schemas explicitly require these fields; stripping them in that case
// would cause a "missing required field" validation error.
schemaProps := schema.Value.Properties
_, contextInSchema := schemaProps["@context"]
_, typeInSchema := schemaProps["@type"]
domainData := make(map[string]interface{}, len(obj.Data))
for k, v := range obj.Data {
if k != "@context" && k != "@type" {
domainData[k] = v
if k == "@context" && !contextInSchema {
continue
}
if k == "@type" && !typeInSchema {
continue
}
domainData[k] = v
}
// Validate domain-specific data against schema