diff --git a/src/errors/errors.ts b/src/errors/errors.ts index f81de1a6..b1784848 100644 --- a/src/errors/errors.ts +++ b/src/errors/errors.ts @@ -514,13 +514,16 @@ function* FromUndefined(schema: TUndefined, references: TSchema[], path: string, } function* FromUnion(schema: TUnion, references: TSchema[], path: string, value: any): IterableIterator { let count = 0 + let deepestError: ValueError | undefined for (const subschema of schema.anyOf) { const errors = [...Visit(subschema, references, path, value)] if (errors.length === 0) return // matched count += errors.length + const pathDepth = (error: ValueError) => error.path.split('/').length + deepestError = errors.reduce((deepestError, error) => (!deepestError || pathDepth(error) > pathDepth(deepestError) ? error : deepestError), deepestError) } if (count > 0) { - yield Create(ValueErrorType.Union, schema, path, value) + yield deepestError || Create(ValueErrorType.Union, schema, path, value) } } function* FromUint8Array(schema: TUint8Array, references: TSchema[], path: string, value: any): IterableIterator {