Skip to content

wiicamp/graphql-validation

Repository files navigation

@wiicamp/graphql-validation

NPM version Minified size License: MIT Dependency Status

@wiicamp/graphql-validation is a GraphQL middleware that wraps validator.js validator functions.

Table of Contents

Features

  • Based on validator.js
  • Validate both args & input types
  • Easy to use
  • Easy to modularizing
  • Pure javascript

Install

yarn add @wiicamp/graphql-validation

or

npm i --save @wiicamp/graphql-validation

Usage

Basic

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',
  }
];

Validate Input types

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.

API

validator(rules: array, controller: function)

Args Type Default Description
rules Array undefined List of validation's rules. Required.
controller Function undefined Controller of mutation's field. Required.

validate(param: string, input: string)

Args Type Default Description
param String undefined Name of param. Required.
input String undefined Name of input. Options.

Validator functions

Args Type Default Description
config Object { msg: string, options: any } { msg: 'Invalid value' } msg: Custom error message, options: options of validator functions.

Contribution

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

License

@wiicamp/graphql-validation is released under the MIT license. See LICENSE for details.

Any question or support will welcome.

About

An GraphQL middleware for validator.js.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published