Description
Hi there 👋. Awesome repo you've got here!
We at the stryker mutation testing team have been looking into validation with ajv. We've come to the same conclusion, error messages directly from AJV are not really designed for humans. We're thinking of using better-ajv-errors.
However, we're also thinking of filtering out what I call 'shadowing' errors.
A shadowing error is an error that results logically from another error. Some examples:
[
{ // This is a useless error for a human
keyword: 'type',
dataPath: '.mutator',
params: { type: 'string' },
// [...]
},
{ // => This is the most specific error. This is for humans!
keyword: 'required',
dataPath: '.mutator',
params: { missingProperty: 'name' },
// [...]
},
{ // This is a useless error for a human
keyword: 'oneOf',
dataPath: '.mutator',
params: { passingSchemas: null },
[...]
}
]
Or:
[
{ // This is a useless error for a human
keyword: 'type',
dataPath: '.logLevel',
params: { type: 'string' },
// [...]
},
{ // => This is the most specific error. This is for humans!
keyword: 'enum',
dataPath: '.logLevel',
params: { allowedValues: ['info', 'warn'] },
// [...]
},
]
A first draft of the filtering is created here:
Do you think this filtering is useful for other projects as well? Should it be added to better-ajv-errors? Maybe as an option? Or do you want to keep it separate?
I would be willing to prepare it in a PR if you agree that this is a feature useful for all humans, nut just mutant-killing humans 😉.