49 lines
1.8 KiB
TypeScript
49 lines
1.8 KiB
TypeScript
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);
|
|
}
|
|
} |