From 6bde8446467d2d4a94cc93f3863eda1f4636b451 Mon Sep 17 00:00:00 2001 From: Ivan Goncharov Date: Tue, 31 Jul 2018 16:20:07 +0300 Subject: [PATCH] Improve typings for validation functions Split out from #1438 --- src/validation/__tests__/harness.js | 18 +++++++++--------- src/validation/specifiedRules.js | 7 ++++--- src/validation/validate.js | 3 ++- 3 files changed, 15 insertions(+), 13 deletions(-) diff --git a/src/validation/__tests__/harness.js b/src/validation/__tests__/harness.js index 6d428faa79..1c41be6031 100644 --- a/src/validation/__tests__/harness.js +++ b/src/validation/__tests__/harness.js @@ -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); } diff --git a/src/validation/specifiedRules.js b/src/validation/specifiedRules.js index 77792d6a05..93c115cb3c 100644 --- a/src/validation/specifiedRules.js +++ b/src/validation/specifiedRules.js @@ -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'; @@ -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, diff --git a/src/validation/validate.js b/src/validation/validate.js index d75221e18e..25dac126d4 100644 --- a/src/validation/validate.js +++ b/src/validation/validate.js @@ -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'; @@ -36,7 +37,7 @@ import ValidationContext from './ValidationContext'; export function validate( schema: GraphQLSchema, documentAST: DocumentNode, - rules?: $ReadOnlyArray = specifiedRules, + rules?: $ReadOnlyArray<(ValidationContext) => ASTVisitor> = specifiedRules, typeInfo?: TypeInfo = new TypeInfo(schema), ): $ReadOnlyArray { invariant(documentAST, 'Must provide document');