Home > Mobile >  Joi validate one of two schemas
Joi validate one of two schemas

Time:01-05

I have a simple object with few fields that I would like to validate. I wish to allow or a specific validation schema or that all of the properties have empty values

I created the following two schemas:

 const nonEmptyUserInfoValidationSchema = Joi.object({
    url: Joi.string().uri().required(),
    username: Joi.string().required().min(usernameMinLength),
    password: Joi.string().required().min(passwordMinLength),
});

const emptyUserInfoValidationSchema = Joi.object({
    url: Joi.string().empty().required(),
    username: Joi.string().empty().required(),
    password: Joi.string().empty().required(),
});

I wish to create schema that validates if emptyUserInfoValidationSchema or nonEmptyUserInfoValidationSchema is applied but I can't figure out how to do it, any suggestions?

allowed:

{url:"http://some.url", username:"some username", password:"some password"}
{url:"", username:"", password:""}

not allowed:

{url:"http://some.url",  username:"", password:""}

CodePudding user response:

I hope this helps you can use the when condition in Joi

var schema = Joi.object({
  url : Joi.any().when('username',{is: Joi.empty(),
then: Joi.empty().required(),otherwise: Joi.string().required()}),
username: Joi.when('password',{is: Joi.empty(),
then: Joi.empty(),otherwise: Joi.string().required().min(usernameMinLength)})
});

here's a link to when docs Joi When Condtion

CodePudding user response:

Well I finally found what I was looking for joi.alternatives:

export const ansibleInfoValidationSchema = Joi.alternatives(emptyUserInfoValidationSchema , nonEmptyUserInfoValidationSchema );

seems to do the trick

  •  Tags:  
  • Related