https://github.com/spantree/nexus-validate-plugin
Nexus plugin to use yup to validate input.
https://github.com/spantree/nexus-validate-plugin
graphql graphql-nexus graphql-schema nexus typescript yup yup-validation
Last synced: about 2 months ago
JSON representation
Nexus plugin to use yup to validate input.
- Host: GitHub
- URL: https://github.com/spantree/nexus-validate-plugin
- Owner: Spantree
- License: mit
- Created: 2020-09-08T18:26:38.000Z (about 5 years ago)
- Default Branch: main
- Last Pushed: 2021-02-13T22:35:35.000Z (over 4 years ago)
- Last Synced: 2025-08-16T05:27:38.696Z (about 2 months ago)
- Topics: graphql, graphql-nexus, graphql-schema, nexus, typescript, yup, yup-validation
- Language: TypeScript
- Homepage:
- Size: 43 KB
- Stars: 6
- Watchers: 7
- Forks: 0
- Open Issues: 2
-
Metadata Files:
- Readme: README.md
- Contributing: docs/CONTRIBUTING.md
- License: LICENSE
- Code of conduct: docs/CODE_OF_CONDUCT.md
Awesome Lists containing this project
README
## nexus-validate-plugin
A [Nexus](https://nexusjs.org/) plugin to validate user input with
[yup](https://github.com/jquense/yup).### Install
```shell
yarn add nexus-validate-plugin
# or
npm i nexus-validate-plugin
```## API
**nexusPluginValidate** plugin
```ts
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',
},
contextType: {
module: join(__dirname, 'context.ts'),
export: 'Context',
},
})
```**Args**
## Usage
```ts
import { objectType, queryField, intArg, stringArg } from 'nexus'export const User = objectType({
name: 'User',
definition(t) {
t.nonNull.int('id')
t.nonNull.string('email')
t.string('name')
},
})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 fixed 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
},
})
```