import Joi from '@hapi/joi'; export default class ParametersValidate { static input (data, parameters, param) { // data to validate, parameters from template, param: 'new', 'change', 'null'(null values are allowed) let joiObject = {}; parameters.forEach(parameter => { if (parameter.range.hasOwnProperty('values')) { // append right validation method according to parameter joiObject[parameter.name] = Joi.alternatives() .try(Joi.string().max(128), Joi.number(), Joi.boolean()) .valid(...parameter.range.values); } else if (parameter.range.hasOwnProperty('min') && parameter.range.hasOwnProperty('max')) { joiObject[parameter.name] = Joi.number() .min(parameter.range.min) .max(parameter.range.max); } else if (parameter.range.hasOwnProperty('min')) { joiObject[parameter.name] = Joi.number() .min(parameter.range.min); } else if (parameter.range.hasOwnProperty('max')) { joiObject[parameter.name] = Joi.number() .max(parameter.range.max); } else if (parameter.range.hasOwnProperty('type')) { switch (parameter.range.type) { case 'array': joiObject[parameter.name] = Joi.array(); break; default: joiObject[parameter.name] = Joi.string().max(128); break; } } else { joiObject[parameter.name] = Joi.alternatives() .try(Joi.string().max(128), Joi.number(), Joi.boolean()); } if (param === 'new') { joiObject[parameter.name] = joiObject[parameter.name].required() } else if (param === 'null') { joiObject[parameter.name] = joiObject[parameter.name].allow(null) } }); return Joi.object(joiObject).validate(data); } }