Skip to content

Instantly share code, notes, and snippets.

@kimmobrunfeldt
Last active December 13, 2017 17:40
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save kimmobrunfeldt/0ca212db366236c2af743783a040868a to your computer and use it in GitHub Desktop.
Save kimmobrunfeldt/0ca212db366236c2af743783a040868a to your computer and use it in GitHub Desktop.
joi prob
const Joi = require('joi');
const payload = [{
type: 'book',
author: 'Herman Melville',
},
{
type: 'periodical',
volume: 1,
}, {
type: 'music',
genre: 'jazz',
}];
const bookSchema = Joi.object({
type: Joi.string().valid('book'),
author: Joi.string(),
});
const periodicalSchema = Joi.object({
type: Joi.string().valid('periodical'),
volume: Joi.number().integer(),
});
const musicSchema = Joi.object({
type: Joi.string().valid('music'),
genre: Joi.string(),
});
const payloadSchema = Joi.array().items(
Joi.alternatives()
.when(Joi.object({ type: Joi.string().valid('book').required() }).unknown().required(), { then: bookSchema })
.when(Joi.object({ type: Joi.string().valid('periodical').required() }).unknown().required(), { then: periodicalSchema })
.when(Joi.object({ type: Joi.string().valid('music').required() }).unknown().required(), { then: musicSchema })
.when(Joi.any(), { then: musicSchema }),
);
const result = Joi.validate(payload, payloadSchema);
console.log(result);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment