the schema from @kibana/config-schema has too few features
yes, validation supports a custom validation function https://github.com/elastic/kibana/blob/4c49d5d1be0b959be515307131c1a420226c372b/src/core/server/http/http_server.test.ts#L454-L460
Just for our information, which joi feature do you need to use that is not supported by config-schema?
First of all, config-schema is not documented or I couldn't find the documentation.
In practice, I need more specific definitions of the schema of such entities as a string, for example. What string is this? Alphanumeric? Hostname? IP address? Email address?
Joi has a very large set of definitions. I can add Joi to my dependencies, import it, and use Joi.validate inside the route handle. But the code in this case is not so clear.
First of all, config-schema is not documented or I couldn't find the documentation
The documentation for config-schema is available in the package's readme: https://github.com/elastic/kibana/blob/9318862f1967d6fefdfca5e94417ff1617e5ba06/packages/kbn-config-schema/README.md
I need more specific definitions of the schema of such entities as a string, for example. What string is this? Alphanumeric? Hostname? IP address? Email address
We do have specific types for string, ip and uri, but we don't have out-of the box types for email or alphanum for example.
Now, all config-schema types support a custom validate option, that would answer this need:
const alphanum = schema.string({
validate: (value) => {
if(!alphanumRegexp.test(value)) {
return 'my error message';
}
}
})
That being said, if you do want to use another validation lib such as joi, it is possible, as the route validation supports custom validation functions, as @Mikhail_Shustov mentioned
router.post(
{
path: '/',
validate: {
body: (body= {}, { ok, badRequest }) => {
const { value, error } = myJoiSchema.validate(body);
if (error) return badRequest(error.msg, ['body']);
return ok(body);
},
},
},
handler
);
This topic was automatically closed 28 days after the last reply. New replies are no longer allowed.