0.0.5 • Published 3 years ago

nexus-validate-plugin v0.0.5

Weekly downloads
5
License
MIT
Repository
github
Last release
3 years ago

nexus-validate-plugin

A Nexus plugin to validate user input with yup.

Install

yarn add nexus-validate-plugin
# or
npm i nexus-validate-plugin

API

nexusPluginValidate plugin

import { makeSchema } from '@nexus/schema'
import { nexusPluginValidate } from 'nexus-validate-plugin'

export const schema = makeSchema({
  types,
  plugins: [nexusPluginValidate], // add our plugin to your nexus schema config here
  outputs: {
    schema: __dirname + '/generated/schema.graphql',
    typegen: __dirname + '/generated/nexus.ts',
  },
  typegenAutoConfig: {
    sources: [
      {
        source: require.resolve('./context'),
        alias: 'Context',
      },
    ],
    contextType: 'Context.Context',
  },
})

Args

import intArg, stringArg, booleanArg, floatArg, idArg, arg from nexus-validate-plugin instead of @nexus/schema to get validate auto complete

import {
  intArg,
  stringArg,
  booleanArg,
  floatArg,
  idArg,
  arg,
} from 'nexus-validate-plugin'

Usage

import { objectType, queryField } from '@nexus/schema'
import { intArg, stringArg } from 'nexus-validate-plugin'

export const User = objectType({
  name: 'User',
  definition(t) {
    t.int('id', { nullable: false })
    t.string('email', { nullable: false })
    t.string('name', { nullable: true })
  },
})

export const Query = queryField('me', {
  type: 'Int',
  validate(root, args, { yup }, info) {
    // return yup schema and plugin will call schema.validateSync(args)
    return yup.object({
      id: yup.number().min(2).max(3),
      name: yup.string().min(2).max(3),
    })
  },
  args: {
    id: intArg({
      validate({ value, yup }) {
        // do validation by your self and when throw error plugin will catch it
        return yup.number().min(2).max(3).validateSync(value)
      },
    }),
    name: stringArg({
      validate({ value, yup }) {
        // return boolean. if false will throw fiexd message "Validation failed on this argument"
        return yup.string().min(2).max(3).isValidSync(value)
      },
    }),
    email: stringArg({
      validate({ value }) {
        // do a custom validation and return error message as string if failure. and do not return anything if success
        if (!value.includes('@')) {
          return 'invalid email'
        }
      },
    }),
  },
  resolve(_root, { id }) {
    return id
  },
})