import Joi from 'joi'; export default class ParametersValidate { // data to validate, parameters from template, param: 'new', 'change', 'null'(null values are allowed) static input (data, parameters, param) { let joiObject = {}; parameters.forEach(parameter => { switch (parameter.range.type) { case 'number': joiObject[parameter.name] = Joi.number(); break; case 'boolean': joiObject[parameter.name] = Joi.boolean(); break; case 'array': joiObject[parameter.name] = Joi.array(); break; case 'string': joiObject[parameter.name] = Joi.string().max(128); break; // min or max implicitly define the value to be a number default: if (parameter.range.hasOwnProperty('min') || parameter.range.hasOwnProperty('max')) { joiObject[parameter.name] = Joi.number(); } else { joiObject[parameter.name] = Joi.string().max(128); } } if (parameter.range.hasOwnProperty('min')) { joiObject[parameter.name] = joiObject[parameter.name].min(parameter.range.min) } if (parameter.range.hasOwnProperty('max')) { joiObject[parameter.name] = joiObject[parameter.name].max(parameter.range.max) } if (parameter.range.hasOwnProperty('values')) { joiObject[parameter.name] = joiObject[parameter.name].valid(...parameter.range.values); } if (parameter.range.hasOwnProperty('required') && parameter.range.required) { joiObject[parameter.name] = joiObject[parameter.name].required(); } if (param === 'null') { joiObject[parameter.name] = joiObject[parameter.name].allow(null) } }); return Joi.object(joiObject).validate(data); } }