gql-validate
v1.2.0
Published
Validate a JS object against a GraphQL schema
Downloads
717
Readme
gql-validate
Validate a JS object against a GraphQL schema using yup for validation.
Status - Developer Preview
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.
Usage
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.
API
gqlValidate(gqlSchema, rootType, data) ⇒ Promise< Array >
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. |
configureGqlValidate(config) => 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. |
Usage
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: "[email protected]" };
const invalidMessage = { from: 'Bob' };
valiadate(schema, rootType, validMessage).then(console.log);
// []
validate(schema, rootType, invalidMessage).then(console.log);
// ["from must be a valid email"]