Files
directus/src/utils/generate-joi.ts
2020-07-15 15:01:09 -04:00

45 lines
1.1 KiB
TypeScript

import { Filter } from '../types';
import Joi, { AnySchema } from '@hapi/joi';
export default function generateJoi(filter: Filter) {
const schema: Record<string, AnySchema> = {};
for (const [key, value] of Object.entries(filter)) {
const isField = key.startsWith('_') === false;
if (isField) {
const operator = Object.keys(value)[0];
/** @TODO
* - Extend with all operators
*/
if (operator === '_eq') {
schema[key] = Joi.any().equal(Object.values(value)[0]);
}
if (operator === '_neq') {
schema[key] = Joi.any().not(Object.values(value)[0]);
}
if (operator === '_in') {
schema[key] = Joi.any().equal(...(Object.values(value)[0] as (string | number)[]));
}
if (operator === '_nin') {
schema[key] = Joi.any().not(...(Object.values(value)[0] as (string | number)[]));
}
if (operator === '_gt') {
schema[key] = Joi.number().greater(Number(Object.values(value)[0]));
}
if (operator === '_lt') {
schema[key] = Joi.number().less(Number(Object.values(value)[0]));
}
}
}
return Joi.object(schema).unknown();
}