@wiicamp/graphql-validation
is a GraphQL middleware that wraps validator.js validator functions.
- Based on validator.js
- Validate both args & input types
- Easy to use
- Easy to modularizing
- Pure javascript
yarn add @wiicamp/graphql-validation
or
npm i --save @wiicamp/graphql-validation
const { validator, validate } = require('@wiicamp/graphql-validation'); // Import module
const resolver = {
Mutation: {
createPost: validator([ // <--- Validate start here
validate('id').isMongoId(),
validate('title') // <--- Validate title
.isLength({ msg: 'Title is invalid' options: { min: 3, max: 20 } })
.contains({ msg: 'Title must contains "hi"', options: 'hi' })
.not().isEmpty({ msg: 'Title is required' }),
validate('content') // <--- Validate content
.isLength({ options: { min: 10, max: 20 } }),
], (parent, args, context, info) => {
if (context.validationErrors) {
// Validate failed
console.log(context.validationErrors); // Do anything with this errors
return;
}
// Validate successfully, time to create new post
}),
},
};
Input: { id: 'hellomongo', title: '', content: 'Hi!' };
// console.log(context.validationErrors);
Output: [
{
param: 'id',
msg: 'MongoId is invalid',
},
{
param: 'title',
msg: 'Title is invalid',
},
{
param: 'title',
msg: 'Title must contains \"hi\"',
},
{
param: 'title',
msg: 'Title is required',
},
{
param: 'content',
msg: 'Invalid value',
}
];
const { validator, validate } = require('@wiicamp/graphql-validation'); // Import module
const resolver = {
Mutation: {
createPost: validator([
validate('title', 'data') // <--- Validate input types
.not().isEmpty({ msg: 'Title is required' }),
validate('content') // <--- Just validate args
.isLength({ options: { min: 10, max: 20 } }),
], (parent, args, context, info) => {
if (context.validationErrors) {
// Validate failed
console.log(context.validationErrors); // Do anything with this errors
return;
}
// Validate successfully, time to create new post
}),
},
};
Input: { data: { title: '' }, content: 'Hi!' };
// console.log(context.validationErrors);
Output: [
{ param: 'title', msg: 'Title is required' },
{ param: 'content', msg: 'Invalid value' },
];
To get started with
@wiicamp/graphql-validation
, you can refer to this example.
Args | Type | Default | Description |
---|---|---|---|
rules |
Array |
undefined |
List of validation's rules. Required. |
controller |
Function |
undefined |
Controller of mutation's field. Required. |
Args | Type | Default | Description |
---|---|---|---|
param |
String |
undefined |
Name of param. Required. |
input |
String |
undefined |
Name of input. Options. |
Args | Type | Default | Description |
---|---|---|---|
config |
Object { msg: string, options: any } |
{ msg: 'Invalid value' } |
msg : Custom error message, options : options of validator functions. |
Contribution are always welcome and recommended! Here is how:
- Fork the repository (here is the guide).
- Clone to your machine
git clone https://github.com/YOUR_USERNAME/graphql-validation.git
- Make your changes
- Create a pull request
@wiicamp/graphql-validation
is released under the MIT license. See LICENSE for details.
Any question or support will welcome.