42 lines
1.7 KiB
TypeScript
42 lines
1.7 KiB
TypeScript
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);
|
|
}
|
|
} |