Validate a JS object against a GraphQL schema using yup for validation.
Currently, this checks that required properties are present, handles the GraphQL primitives and supports custom types. You have to implement nested objects as custom types. See custom-types-test.js
for examples.
import { gqlValidate } from 'gql-validate';
const rootType = 'Person';
const schema = `
type ${rootType} {
name: String!
knowsJS: Boolean!
age: Int
height: Float
}
`;
const validPerson = {
name: 'Alice',
knowsJS: true,
age: 42
};
const invalidPerson = {
knowsJS: "Yes"
age: 10.5,
};
gqlValidate(schema, rootType, validPerson).then(console.log);
// []
gqlValidate(schema, rootType)(invalidPerson).then(console.log);
// [
// "'name' is required",
// "'knowsJS' must be of type boolean, received string",
// "'age' must be of type integer, received float"
// ]
By default validate
understands the native GraphQL scalars. By default ID is just a string, so there is no validation for uniqueness. See configureGqlValidate
for supporting custom types or to change the validation of existing types.
Validate a JavaScript object against a GraphQL schema. This function is curried.
Supported features: GraphQL scalars and required.
Returns: Promise< Array >
- A promise with an array of errors.
Param | Type | Description |
---|---|---|
gqlSchema | string |
A GraphQL schema. |
rootType | string |
The root type of the data object to validate. |
data | object |
The object to validate. |
Configure the validation methods for the default and custom types for the validate
function.
Returns: validate
- The validate function.
Param | Type | Description |
---|---|---|
config | object |
The keys of the validation object represent the GraphQL type. The values must be yup objects. |
import configureGqlValidate from 'gql-validate';
const Email = yup.string().strict().email();
const config = { Email };
const validate = configureGqlValidate(config);
const rootType = 'Message';
const schema = `
type ${rootType} {
from: Email!
}
`;
const validMessage = { from: "foo@example.com" };
const invalidMessage = { from: 'Bob' };
valiadate(schema, rootType, validMessage).then(console.log);
// []
validate(schema, rootType, invalidMessage).then(console.log);
// ["from must be a valid email"]