Skip to content

Commit 0a9a533

Browse files
Split out 'ASTValidationContext' (#1446)
Splited from #1438
1 parent de34ff8 commit 0a9a533

31 files changed

+71
-58
lines changed

src/utilities/isValidLiteralValue.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ import { visit, visitWithTypeInfo } from '../language/visitor';
1515
import type { GraphQLInputType } from '../type/definition';
1616
import { GraphQLSchema } from '../type/schema';
1717
import { ValuesOfCorrectType } from '../validation/rules/ValuesOfCorrectType';
18-
import ValidationContext from '../validation/ValidationContext';
18+
import { ValidationContext } from '../validation/ValidationContext';
1919

2020
/**
2121
* Utility which determines if a value literal node is valid for an input type.

src/validation/ValidationContext.js

Lines changed: 24 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -42,11 +42,31 @@ type VariableUsage = {|
4242
* allowing access to commonly useful contextual information from within a
4343
* validation rule.
4444
*/
45-
export default class ValidationContext {
46-
_schema: GraphQLSchema;
45+
export class ASTValidationContext {
4746
_ast: DocumentNode;
48-
_typeInfo: TypeInfo;
4947
_errors: Array<GraphQLError>;
48+
49+
constructor(ast: DocumentNode): void {
50+
this._ast = ast;
51+
this._errors = [];
52+
}
53+
54+
reportError(error: GraphQLError): void {
55+
this._errors.push(error);
56+
}
57+
58+
getErrors(): $ReadOnlyArray<GraphQLError> {
59+
return this._errors;
60+
}
61+
62+
getDocument(): DocumentNode {
63+
return this._ast;
64+
}
65+
}
66+
67+
export class ValidationContext extends ASTValidationContext {
68+
_schema: GraphQLSchema;
69+
_typeInfo: TypeInfo;
5070
_fragments: ObjMap<FragmentDefinitionNode>;
5171
_fragmentSpreads: Map<SelectionSetNode, $ReadOnlyArray<FragmentSpreadNode>>;
5272
_recursivelyReferencedFragments: Map<
@@ -64,32 +84,19 @@ export default class ValidationContext {
6484
ast: DocumentNode,
6585
typeInfo: TypeInfo,
6686
): void {
87+
super(ast);
6788
this._schema = schema;
68-
this._ast = ast;
6989
this._typeInfo = typeInfo;
70-
this._errors = [];
7190
this._fragmentSpreads = new Map();
7291
this._recursivelyReferencedFragments = new Map();
7392
this._variableUsages = new Map();
7493
this._recursiveVariableUsages = new Map();
7594
}
7695

77-
reportError(error: GraphQLError): void {
78-
this._errors.push(error);
79-
}
80-
81-
getErrors(): $ReadOnlyArray<GraphQLError> {
82-
return this._errors;
83-
}
84-
8596
getSchema(): GraphQLSchema {
8697
return this._schema;
8798
}
8899

89-
getDocument(): DocumentNode {
90-
return this._ast;
91-
}
92-
93100
getFragment(name: string): ?FragmentDefinitionNode {
94101
let fragments = this._fragments;
95102
if (!fragments) {

src/validation/index.js

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,7 @@
99

1010
export { validate } from './validate';
1111

12-
// https://github.com/tc39/proposal-export-default-from
13-
import ValidationContext from './ValidationContext';
14-
export { ValidationContext };
12+
export { ValidationContext } from './ValidationContext';
1513

1614
export { specifiedRules } from './specifiedRules';
1715

src/validation/rules/ExecutableDefinitions.js

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
* @flow strict
88
*/
99

10-
import type ValidationContext from '../ValidationContext';
10+
import type { ASTValidationContext } from '../ValidationContext';
1111
import { GraphQLError } from '../../error';
1212
import { Kind } from '../../language/kinds';
1313
import type { ASTVisitor } from '../../language/visitor';
@@ -22,7 +22,9 @@ export function nonExecutableDefinitionMessage(defName: string): string {
2222
* A GraphQL document is only valid for execution if all definitions are either
2323
* operation or fragment definitions.
2424
*/
25-
export function ExecutableDefinitions(context: ValidationContext): ASTVisitor {
25+
export function ExecutableDefinitions(
26+
context: ASTValidationContext,
27+
): ASTVisitor {
2628
return {
2729
Document(node) {
2830
for (const definition of node.definitions) {

src/validation/rules/FieldsOnCorrectType.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
* @flow strict
88
*/
99

10-
import type ValidationContext from '../ValidationContext';
10+
import type { ValidationContext } from '../ValidationContext';
1111
import { GraphQLError } from '../../error';
1212
import suggestionList from '../../jsutils/suggestionList';
1313
import quotedOrList from '../../jsutils/quotedOrList';

src/validation/rules/FragmentsOnCompositeTypes.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
* @flow strict
88
*/
99

10-
import type ValidationContext from '../ValidationContext';
10+
import type { ValidationContext } from '../ValidationContext';
1111
import { GraphQLError } from '../../error';
1212
import { print } from '../../language/printer';
1313
import type { ASTVisitor } from '../../language/visitor';

src/validation/rules/KnownArgumentNames.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
* @flow strict
88
*/
99

10-
import type ValidationContext from '../ValidationContext';
10+
import type { ValidationContext } from '../ValidationContext';
1111
import { GraphQLError } from '../../error';
1212
import type { ASTVisitor } from '../../language/visitor';
1313
import suggestionList from '../../jsutils/suggestionList';

src/validation/rules/KnownDirectives.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
* @flow strict
88
*/
99

10-
import type ValidationContext from '../ValidationContext';
10+
import type { ValidationContext } from '../ValidationContext';
1111
import { GraphQLError } from '../../error';
1212
import find from '../../jsutils/find';
1313
import { Kind } from '../../language/kinds';

src/validation/rules/KnownFragmentNames.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
* @flow strict
88
*/
99

10-
import type ValidationContext from '../ValidationContext';
10+
import type { ValidationContext } from '../ValidationContext';
1111
import { GraphQLError } from '../../error';
1212
import type { ASTVisitor } from '../../language/visitor';
1313

src/validation/rules/KnownTypeNames.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
* @flow strict
88
*/
99

10-
import type ValidationContext from '../ValidationContext';
10+
import type { ValidationContext } from '../ValidationContext';
1111
import { GraphQLError } from '../../error';
1212
import suggestionList from '../../jsutils/suggestionList';
1313
import quotedOrList from '../../jsutils/quotedOrList';

src/validation/rules/LoneAnonymousOperation.js

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
* @flow strict
88
*/
99

10-
import type ValidationContext from '../ValidationContext';
10+
import type { ASTValidationContext } from '../ValidationContext';
1111
import { GraphQLError } from '../../error';
1212
import { Kind } from '../../language/kinds';
1313
import type { ASTVisitor } from '../../language/visitor';
@@ -22,7 +22,9 @@ export function anonOperationNotAloneMessage(): string {
2222
* A GraphQL document is only valid if when it contains an anonymous operation
2323
* (the query short-hand) that it contains only that one operation definition.
2424
*/
25-
export function LoneAnonymousOperation(context: ValidationContext): ASTVisitor {
25+
export function LoneAnonymousOperation(
26+
context: ASTValidationContext,
27+
): ASTVisitor {
2628
let operationCount = 0;
2729
return {
2830
Document(node) {

src/validation/rules/NoFragmentCycles.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
* @flow strict
88
*/
99

10-
import type ValidationContext from '../ValidationContext';
10+
import type { ValidationContext } from '../ValidationContext';
1111
import { GraphQLError } from '../../error';
1212
import type { FragmentDefinitionNode } from '../../language/ast';
1313
import type { ASTVisitor } from '../../language/visitor';

src/validation/rules/NoUndefinedVariables.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
* @flow strict
88
*/
99

10-
import type ValidationContext from '../ValidationContext';
10+
import type { ValidationContext } from '../ValidationContext';
1111
import { GraphQLError } from '../../error';
1212
import type { ASTVisitor } from '../../language/visitor';
1313

src/validation/rules/NoUnusedFragments.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
* @flow strict
88
*/
99

10-
import type ValidationContext from '../ValidationContext';
10+
import type { ValidationContext } from '../ValidationContext';
1111
import { GraphQLError } from '../../error';
1212
import type { ASTVisitor } from '../../language/visitor';
1313

src/validation/rules/NoUnusedVariables.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
* @flow strict
88
*/
99

10-
import type ValidationContext from '../ValidationContext';
10+
import type { ValidationContext } from '../ValidationContext';
1111
import { GraphQLError } from '../../error';
1212
import type { ASTVisitor } from '../../language/visitor';
1313

src/validation/rules/OverlappingFieldsCanBeMerged.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
* @flow strict
88
*/
99

10-
import type ValidationContext from '../ValidationContext';
10+
import type { ValidationContext } from '../ValidationContext';
1111
import { GraphQLError } from '../../error';
1212
import inspect from '../../jsutils/inspect';
1313
import find from '../../jsutils/find';

src/validation/rules/PossibleFragmentSpreads.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
*/
99

1010
import inspect from '../../jsutils/inspect';
11-
import type ValidationContext from '../ValidationContext';
11+
import type { ValidationContext } from '../ValidationContext';
1212
import { GraphQLError } from '../../error';
1313
import type { ASTVisitor } from '../../language/visitor';
1414
import { doTypesOverlap } from '../../utilities/typeComparators';

src/validation/rules/ProvidedRequiredArguments.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
* @flow strict
88
*/
99

10-
import type ValidationContext from '../ValidationContext';
10+
import type { ValidationContext } from '../ValidationContext';
1111
import { GraphQLError } from '../../error';
1212
import inspect from '../../jsutils/inspect';
1313
import keyMap from '../../jsutils/keyMap';

src/validation/rules/ScalarLeafs.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
*/
99

1010
import inspect from '../../jsutils/inspect';
11-
import type ValidationContext from '../ValidationContext';
11+
import type { ValidationContext } from '../ValidationContext';
1212
import { GraphQLError } from '../../error';
1313
import type { FieldNode } from '../../language/ast';
1414
import { getNamedType, isLeafType } from '../../type/definition';

src/validation/rules/SingleFieldSubscriptions.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
* @flow strict
88
*/
99

10-
import type ValidationContext from '../ValidationContext';
10+
import type { ASTValidationContext } from '../ValidationContext';
1111
import { GraphQLError } from '../../error';
1212
import type { OperationDefinitionNode } from '../../language/ast';
1313
import type { ASTVisitor } from '../../language/visitor';
@@ -25,7 +25,7 @@ export function singleFieldOnlyMessage(name: ?string): string {
2525
* A GraphQL subscription is valid only if it contains a single root field.
2626
*/
2727
export function SingleFieldSubscriptions(
28-
context: ValidationContext,
28+
context: ASTValidationContext,
2929
): ASTVisitor {
3030
return {
3131
OperationDefinition(node: OperationDefinitionNode) {

src/validation/rules/UniqueArgumentNames.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
* @flow strict
88
*/
99

10-
import type ValidationContext from '../ValidationContext';
10+
import type { ASTValidationContext } from '../ValidationContext';
1111
import { GraphQLError } from '../../error';
1212
import type { ASTVisitor } from '../../language/visitor';
1313

@@ -21,7 +21,7 @@ export function duplicateArgMessage(argName: string): string {
2121
* A GraphQL field or directive is only valid if all supplied arguments are
2222
* uniquely named.
2323
*/
24-
export function UniqueArgumentNames(context: ValidationContext): ASTVisitor {
24+
export function UniqueArgumentNames(context: ASTValidationContext): ASTVisitor {
2525
let knownArgNames = Object.create(null);
2626
return {
2727
Field() {

src/validation/rules/UniqueDirectivesPerLocation.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
* @flow strict
88
*/
99

10-
import type ValidationContext from '../ValidationContext';
10+
import type { ASTValidationContext } from '../ValidationContext';
1111
import { GraphQLError } from '../../error';
1212
import type { DirectiveNode } from '../../language/ast';
1313
import type { ASTVisitor } from '../../language/visitor';
@@ -26,7 +26,7 @@ export function duplicateDirectiveMessage(directiveName: string): string {
2626
* are uniquely named.
2727
*/
2828
export function UniqueDirectivesPerLocation(
29-
context: ValidationContext,
29+
context: ASTValidationContext,
3030
): ASTVisitor {
3131
return {
3232
// Many different AST nodes may contain directives. Rather than listing

src/validation/rules/UniqueFragmentNames.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
* @flow strict
88
*/
99

10-
import type ValidationContext from '../ValidationContext';
10+
import type { ASTValidationContext } from '../ValidationContext';
1111
import { GraphQLError } from '../../error';
1212
import type { ASTVisitor } from '../../language/visitor';
1313

@@ -20,7 +20,7 @@ export function duplicateFragmentNameMessage(fragName: string): string {
2020
*
2121
* A GraphQL document is only valid if all defined fragments have unique names.
2222
*/
23-
export function UniqueFragmentNames(context: ValidationContext): ASTVisitor {
23+
export function UniqueFragmentNames(context: ASTValidationContext): ASTVisitor {
2424
const knownFragmentNames = Object.create(null);
2525
return {
2626
OperationDefinition: () => false,

src/validation/rules/UniqueInputFieldNames.js

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
* @flow strict
88
*/
99

10-
import type ValidationContext from '../ValidationContext';
10+
import type { ASTValidationContext } from '../ValidationContext';
1111
import { GraphQLError } from '../../error';
1212
import type { ASTVisitor } from '../../language/visitor';
1313

@@ -21,7 +21,9 @@ export function duplicateInputFieldMessage(fieldName: string): string {
2121
* A GraphQL input object value is only valid if all supplied fields are
2222
* uniquely named.
2323
*/
24-
export function UniqueInputFieldNames(context: ValidationContext): ASTVisitor {
24+
export function UniqueInputFieldNames(
25+
context: ASTValidationContext,
26+
): ASTVisitor {
2527
const knownNameStack = [];
2628
let knownNames = Object.create(null);
2729

src/validation/rules/UniqueOperationNames.js

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
* @flow strict
88
*/
99

10-
import type ValidationContext from '../ValidationContext';
10+
import type { ASTValidationContext } from '../ValidationContext';
1111
import { GraphQLError } from '../../error';
1212
import type { ASTVisitor } from '../../language/visitor';
1313

@@ -20,7 +20,9 @@ export function duplicateOperationNameMessage(operationName: string): string {
2020
*
2121
* A GraphQL document is only valid if all defined operations have unique names.
2222
*/
23-
export function UniqueOperationNames(context: ValidationContext): ASTVisitor {
23+
export function UniqueOperationNames(
24+
context: ASTValidationContext,
25+
): ASTVisitor {
2426
const knownOperationNames = Object.create(null);
2527
return {
2628
OperationDefinition(node) {

src/validation/rules/UniqueVariableNames.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
* @flow strict
88
*/
99

10-
import type ValidationContext from '../ValidationContext';
10+
import type { ASTValidationContext } from '../ValidationContext';
1111
import type { VariableDefinitionNode } from '../../language/ast';
1212
import { GraphQLError } from '../../error';
1313
import type { ASTVisitor } from '../../language/visitor';
@@ -21,7 +21,7 @@ export function duplicateVariableMessage(variableName: string): string {
2121
*
2222
* A GraphQL operation is only valid if all its variables are uniquely named.
2323
*/
24-
export function UniqueVariableNames(context: ValidationContext): ASTVisitor {
24+
export function UniqueVariableNames(context: ASTValidationContext): ASTVisitor {
2525
let knownVariableNames = Object.create(null);
2626
return {
2727
OperationDefinition() {

src/validation/rules/ValuesOfCorrectType.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
* @flow strict
88
*/
99

10-
import type ValidationContext from '../ValidationContext';
10+
import type { ValidationContext } from '../ValidationContext';
1111
import { GraphQLError } from '../../error';
1212
import type { ValueNode } from '../../language/ast';
1313
import { print } from '../../language/printer';

0 commit comments

Comments
 (0)