hapijs / joi

The most powerful data validation library for JS
Other
20.95k stars 1.51k forks source link

Access current key as a parameter of the schema validator to generate dynamically styled labels #2947

Open SimonGodefroid opened 1 year ago

SimonGodefroid commented 1 year ago

I'm trying to achieve the following...

export const myValidationSchema = Joi.object<Whatever>({
  myField: Joi.boolean().required().label('My field'),
  myOtherField: Joi.boolean().required().label('My other field'),
}).unknown(false);

but without having having to specifically write the label by hand. Essentially the naming of our attributes is such that it'd be okay to pass a function accessing to this to the .label method so that we could just return the attribute name but in a human readable way.

I'm suggesting an implementation by giving an example but there must be a way to achieve this that I'm not aware of (maybe with all the $_ properties).

const toTitleCase = (label:string) => _.startCase(label);

export const myValidationSchema = Joi.object<Whatever>({
  myField: Joi.boolean().required().label(toTitleCase),
  myOtherField: Joi.boolean().required().label(toTitleCase),
}).unknown(false);

Which would make my validators spit an error like "My field is required"

Hope you understand what I'm trying to achieve.