@dialexa/pleco-joi
v0.2.2
Published
# Pleco Joi
Downloads
3
Readme
Pleco Joi
Table of Contents
Overview
The Joi validation schemas provide additional protection around what the user inputs.
Joi Validation Schemas
Provided Exports
filterQuerySchema
: a function that returns the schema pertaining to the IFilterQuery
typescript type or the FilterQuery_*
GraphQL type.
The rules for filters are:
- each filter query can contain nested AND or OR
- each filter object can have multiple operators
- each filter can only have the keys specified in the schema
- the filter can be empty
Usage
import { filterQuerySchema } from '@dialexa/pleco-joi';
import Joi from 'joi';
const vehicleFilterSchema = Joi.object().keys({
AND: Joi.array().items(Joi.lazy(() => vehicleFilterSchema)),
OR: Joi.array().items(Joi.lazy(() => vehicleFilterSchema)),
make: filterQuerySchema('String', Joi.string()),
model: filterQuerySchema('String', Joi.string()),
// We can define any Joi schema
numberOfUsers: filterQuerySchema('Int', Joi.number().integer().min(0)),
highwayMPG: filterQuerySchema('Int', Joi.number().integer().min(0)),
cityMPG: filterQuerySchema('Int', Joi.number().integer().min(0)),
userSurveyRating: filterQUerySchema('Float', Joi.number().min(0).max(100)),
});
sortDirectionSchema
: validates that the argument to a sort operation is 'ASC' or 'DESC' (case insensitive).
Validating against this schema will also automatically convert the input to uppercase.
Usage
import { sortDirectionSchema } from '@dialexa/pleco-joi';
import Joi from 'joi';
const vehicleSortSchemaKeys = {
numberOfUsers: sortDirectionSchema,
userSurveyRating: sortDirectionSchema,
};
const vehicleSortSchema = Joi.object().keys(vehicleSortSchemaKeys).oxor(Object.keys(vehicleSortSchemaKeys));
limitOffsetPageSchema
: validates that an object containing optional limit
and offset
are non-negative integers