Skip to content

Improve typings for validation functions #1439

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Jul 31, 2018
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 9 additions & 9 deletions src/validation/__tests__/harness.js
Original file line number Diff line number Diff line change
Expand Up @@ -421,30 +421,30 @@ export const testSchema = new GraphQLSchema({
],
});

function expectValid(schema, rules, queryString) {
const errors = validate(schema, parse(queryString), rules);
function expectValid(schema, rule, queryString) {
const errors = validate(schema, parse(queryString), [rule]);
expect(errors).to.deep.equal([], 'Should validate');
}

function expectInvalid(schema, rules, queryString, expectedErrors) {
const errors = validate(schema, parse(queryString), rules);
function expectInvalid(schema, rule, queryString, expectedErrors) {
const errors = validate(schema, parse(queryString), [rule]);
expect(errors).to.have.length.of.at.least(1, 'Should not validate');
expect(errors).to.deep.equal(expectedErrors);
return errors;
}

export function expectPassesRule(rule, queryString) {
return expectValid(testSchema, [rule], queryString);
return expectValid(testSchema, rule, queryString);
}

export function expectFailsRule(rule, queryString, errors) {
return expectInvalid(testSchema, [rule], queryString, errors);
return expectInvalid(testSchema, rule, queryString, errors);
}

export function expectPassesRuleWithSchema(schema, rule, queryString, errors) {
return expectValid(schema, [rule], queryString, errors);
export function expectPassesRuleWithSchema(schema, rule, queryString) {
return expectValid(schema, rule, queryString);
}

export function expectFailsRuleWithSchema(schema, rule, queryString, errors) {
return expectInvalid(schema, [rule], queryString, errors);
return expectInvalid(schema, rule, queryString, errors);
}
7 changes: 4 additions & 3 deletions src/validation/specifiedRules.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,9 @@
* @flow strict
*/

import type { ASTVisitor } from '../language/visitor';
import type ValidationContext from './ValidationContext';

// Spec Section: "Executable Definitions"
import { ExecutableDefinitions } from './rules/ExecutableDefinitions';

Expand Down Expand Up @@ -85,15 +88,13 @@ import { OverlappingFieldsCanBeMerged } from './rules/OverlappingFieldsCanBeMerg
// Spec Section: "Input Object Field Uniqueness"
import { UniqueInputFieldNames } from './rules/UniqueInputFieldNames';

import type ValidationContext from './ValidationContext';

/**
* This set includes all validation rules defined by the GraphQL spec.
*
* The order of the rules in this list has been adjusted to lead to the
* most clear output when encountering multiple validation errors.
*/
export const specifiedRules: Array<(context: ValidationContext) => any> = [
export const specifiedRules: Array<(ValidationContext) => ASTVisitor> = [
ExecutableDefinitions,
UniqueOperationNames,
LoneAnonymousOperation,
Expand Down
3 changes: 2 additions & 1 deletion src/validation/validate.js
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@

import invariant from '../jsutils/invariant';
import type { GraphQLError } from '../error';
import type { ASTVisitor } from '../language/visitor';
import { visit, visitInParallel, visitWithTypeInfo } from '../language/visitor';
import type { DocumentNode } from '../language/ast';
import type { GraphQLSchema } from '../type/schema';
Expand Down Expand Up @@ -36,7 +37,7 @@ import ValidationContext from './ValidationContext';
export function validate(
schema: GraphQLSchema,
documentAST: DocumentNode,
rules?: $ReadOnlyArray<any> = specifiedRules,
rules?: $ReadOnlyArray<(ValidationContext) => ASTVisitor> = specifiedRules,
typeInfo?: TypeInfo = new TypeInfo(schema),
): $ReadOnlyArray<GraphQLError> {
invariant(documentAST, 'Must provide document');
Expand Down