Skip to content
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

Sync validation TS definitions with flow #2119

Merged
merged 2 commits into from Aug 23, 2019
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.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
35 changes: 22 additions & 13 deletions tstypes/validation/ValidationContext.d.ts
@@ -1,5 +1,6 @@
import Maybe from '../tsutils/Maybe';
import { GraphQLError } from '../error';
import { ASTVisitor } from '../language/visitor';
import {
DocumentNode,
OperationDefinitionNode,
Expand All @@ -9,16 +10,15 @@ import {
FragmentDefinitionNode,
} from '../language/ast';
import { GraphQLSchema } from '../type/schema';
import { GraphQLDirective } from '../type/directives';
import {
GraphQLInputType,
GraphQLOutputType,
GraphQLCompositeType,
GraphQLField,
GraphQLArgument,
} from '../type/definition';
import { GraphQLDirective } from '../type/directives';
import { TypeInfo } from '../utilities/TypeInfo';
import { ASTVisitor } from '../language/visitor';

type NodeWithSelectionSet = OperationDefinitionNode | FragmentDefinitionNode;
type VariableUsage = {
Expand All @@ -40,35 +40,44 @@ export class ASTValidationContext {
getErrors(): ReadonlyArray<GraphQLError>;

getDocument(): DocumentNode;

getFragment(name: string): Maybe<FragmentDefinitionNode>;

getFragmentSpreads(node: SelectionSetNode): ReadonlyArray<FragmentSpreadNode>;

getRecursivelyReferencedFragments(
operation: OperationDefinitionNode,
): ReadonlyArray<FragmentDefinitionNode>;
}

export class SDLValidationContext extends ASTValidationContext {
constructor(ast: DocumentNode, schema?: Maybe<GraphQLSchema>);
constructor(
ast: DocumentNode,
schema: Maybe<GraphQLSchema>,
onError?: (err: GraphQLError) => void,
);

getSchema(): Maybe<GraphQLSchema>;
}

export type SDLValidationRule = (context: SDLValidationContext) => ASTVisitor;

export class ValidationContext extends ASTValidationContext {
constructor(schema: GraphQLSchema, ast: DocumentNode, typeInfo: TypeInfo);
constructor(
schema: GraphQLSchema,
ast: DocumentNode,
typeInfo: TypeInfo,
onError?: (err: GraphQLError) => void,
);

getSchema(): GraphQLSchema;

getFragment(name: string): Maybe<FragmentDefinitionNode>;

getFragmentSpreads(node: SelectionSetNode): ReadonlyArray<FragmentSpreadNode>;
getVariableUsages(node: NodeWithSelectionSet): ReadonlyArray<VariableUsage>;

getRecursivelyReferencedFragments(
operation: OperationDefinitionNode,
): ReadonlyArray<FragmentDefinitionNode>;

getVariableUsages(node: NodeWithSelectionSet): ReadonlyArray<VariableUsage>;

getRecursiveVariableUsages(
operation: OperationDefinitionNode,
): ReadonlyArray<VariableUsage>;

getType(): Maybe<GraphQLOutputType>;

getParentType(): Maybe<GraphQLCompositeType>;
Expand Down
2 changes: 1 addition & 1 deletion tstypes/validation/index.d.ts
@@ -1,6 +1,6 @@
export { validate } from './validate';

export { ValidationContext } from './ValidationContext';
export { ValidationContext, ValidationRule } from './ValidationContext';

export { specifiedRules } from './specifiedRules';

Expand Down
2 changes: 1 addition & 1 deletion tstypes/validation/rules/ExecutableDefinitions.d.ts
@@ -1,5 +1,5 @@
import { ASTValidationContext } from '../ValidationContext';
import { ASTVisitor } from '../../language/visitor';
import { ASTValidationContext } from '../ValidationContext';

export function nonExecutableDefinitionMessage(defName: string): string;

Expand Down
9 changes: 8 additions & 1 deletion tstypes/validation/rules/FieldsOnCorrectType.d.ts
@@ -1,5 +1,12 @@
import { ValidationContext } from '../ValidationContext';
import { ASTVisitor } from '../../language/visitor';
import { ValidationContext } from '../ValidationContext';

export function undefinedFieldMessage(
fieldName: string,
type: string,
suggestedTypeNames: ReadonlyArray<string>,
suggestedFieldNames: ReadonlyArray<string>,
): string;

/**
* Fields on correct type
Expand Down
2 changes: 1 addition & 1 deletion tstypes/validation/rules/FragmentsOnCompositeTypes.d.ts
@@ -1,5 +1,5 @@
import { ValidationContext } from '../ValidationContext';
import { ASTVisitor } from '../../language/visitor';
import { ValidationContext } from '../ValidationContext';

export function inlineFragmentOnNonCompositeErrorMessage(type: string): string;

Expand Down
4 changes: 2 additions & 2 deletions tstypes/validation/rules/KnownArgumentNames.d.ts
Expand Up @@ -5,13 +5,13 @@ export function unknownArgMessage(
argName: string,
fieldName: string,
typeName: string,
suggestedArgs: Array<string>,
suggestedArgs: ReadonlyArray<string>,
): string;

export function unknownDirectiveArgMessage(
argName: string,
directiveName: string,
suggestedArgs: Array<string>,
suggestedArgs: ReadonlyArray<string>,
): string;

/**
Expand Down
2 changes: 1 addition & 1 deletion tstypes/validation/rules/KnownDirectives.d.ts
@@ -1,5 +1,5 @@
import { ValidationContext, SDLValidationContext } from '../ValidationContext';
import { ASTVisitor } from '../../language/visitor';
import { ValidationContext, SDLValidationContext } from '../ValidationContext';

export function unknownDirectiveMessage(directiveName: string): string;

Expand Down
2 changes: 1 addition & 1 deletion tstypes/validation/rules/KnownFragmentNames.d.ts
@@ -1,5 +1,5 @@
import { ValidationContext } from '../ValidationContext';
import { ASTVisitor } from '../../language/visitor';
import { ValidationContext } from '../ValidationContext';

export function unknownFragmentMessage(fragName: string): string;

Expand Down
2 changes: 1 addition & 1 deletion tstypes/validation/rules/KnownTypeNames.d.ts
@@ -1,5 +1,5 @@
import { ValidationContext } from '../ValidationContext';
import { ASTVisitor } from '../../language/visitor';
import { ValidationContext } from '../ValidationContext';

export function unknownTypeMessage(
typeName: string,
Expand Down
2 changes: 1 addition & 1 deletion tstypes/validation/rules/LoneAnonymousOperation.d.ts
@@ -1,5 +1,5 @@
import { ASTValidationContext } from '../ValidationContext';
import { ASTVisitor } from '../../language/visitor';
import { ASTValidationContext } from '../ValidationContext';

export function anonOperationNotAloneMessage(): string;

Expand Down
2 changes: 1 addition & 1 deletion tstypes/validation/rules/LoneSchemaDefinition.d.ts
@@ -1,5 +1,5 @@
import { SDLValidationContext } from '../ValidationContext';
import { ASTVisitor } from '../../language/visitor';
import { SDLValidationContext } from '../ValidationContext';

export function schemaDefinitionNotAloneMessage(): string;

Expand Down
4 changes: 2 additions & 2 deletions tstypes/validation/rules/NoFragmentCycles.d.ts
@@ -1,9 +1,9 @@
import { ValidationContext } from '../ValidationContext';
import { ASTVisitor } from '../../language/visitor';
import { ValidationContext } from '../ValidationContext';

export function cycleErrorMessage(
fragName: string,
spreadNames: Array<string>,
spreadNames: ReadonlyArray<string>,
): string;

export function NoFragmentCycles(context: ValidationContext): ASTVisitor;
2 changes: 1 addition & 1 deletion tstypes/validation/rules/NoUndefinedVariables.d.ts
@@ -1,6 +1,6 @@
import Maybe from '../../tsutils/Maybe';
import { ValidationContext } from '../ValidationContext';
import { ASTVisitor } from '../../language/visitor';
import { ValidationContext } from '../ValidationContext';

export function undefinedVarMessage(
varName: string,
Expand Down
2 changes: 1 addition & 1 deletion tstypes/validation/rules/NoUnusedFragments.d.ts
@@ -1,5 +1,5 @@
import { ValidationContext } from '../ValidationContext';
import { ASTVisitor } from '../../language/visitor';
import { ValidationContext } from '../ValidationContext';

export function unusedFragMessage(fragName: string): string;

Expand Down
2 changes: 1 addition & 1 deletion tstypes/validation/rules/NoUnusedVariables.d.ts
@@ -1,6 +1,6 @@
import Maybe from '../../tsutils/Maybe';
import { ValidationContext } from '../ValidationContext';
import { ASTVisitor } from '../../language/visitor';
import { ValidationContext } from '../ValidationContext';

export function unusedVariableMessage(
varName: string,
Expand Down
2 changes: 1 addition & 1 deletion tstypes/validation/rules/OverlappingFieldsCanBeMerged.d.ts
@@ -1,5 +1,5 @@
import { ValidationContext } from '../ValidationContext';
import { ASTVisitor } from '../../language/visitor';
import { ValidationContext } from '../ValidationContext';

export function fieldsConflictMessage(
responseName: string,
Expand Down
2 changes: 1 addition & 1 deletion tstypes/validation/rules/PossibleFragmentSpreads.d.ts
@@ -1,5 +1,5 @@
import { ValidationContext } from '../ValidationContext';
import { ASTVisitor } from '../../language/visitor';
import { ValidationContext } from '../ValidationContext';

export function typeIncompatibleSpreadMessage(
fragName: string,
Expand Down
21 changes: 21 additions & 0 deletions tstypes/validation/rules/PossibleTypeExtensions.d.ts
@@ -0,0 +1,21 @@
import { ASTVisitor } from '../../language/visitor';
import { SDLValidationContext } from '../ValidationContext';

export function extendingUnknownTypeMessage(
typeName: string,
suggestedTypes: $ReadOnlyArray<string>,
): string;

export function extendingDifferentTypeKindMessage(
typeName: string,
kind: string,
): string;

/**
* Possible type extension
*
* A type extension is only valid if the type is defined and has the same kind.
*/
export function PossibleTypeExtensions(
context: SDLValidationContext,
): ASTVisitor;
2 changes: 1 addition & 1 deletion tstypes/validation/rules/ProvidedRequiredArguments.d.ts
@@ -1,5 +1,5 @@
import { ValidationContext, SDLValidationContext } from '../ValidationContext';
import { ASTVisitor } from '../../language/visitor';
import { ValidationContext, SDLValidationContext } from '../ValidationContext';

export function missingFieldArgMessage(
fieldName: string,
Expand Down
2 changes: 1 addition & 1 deletion tstypes/validation/rules/ScalarLeafs.d.ts
@@ -1,5 +1,5 @@
import { ValidationContext } from '../ValidationContext';
import { ASTVisitor } from '../../language/visitor';
import { ValidationContext } from '../ValidationContext';

export function noSubselectionAllowedMessage(
fieldName: string,
Expand Down
2 changes: 1 addition & 1 deletion tstypes/validation/rules/SingleFieldSubscriptions.d.ts
@@ -1,6 +1,6 @@
import Maybe from '../../tsutils/Maybe';
import { ASTValidationContext } from '../ValidationContext';
import { ASTVisitor } from '../../language/visitor';
import { ASTValidationContext } from '../ValidationContext';

export function singleFieldOnlyMessage(name: Maybe<string>): string;

Expand Down
2 changes: 1 addition & 1 deletion tstypes/validation/rules/UniqueArgumentNames.d.ts
@@ -1,5 +1,5 @@
import { ASTValidationContext } from '../ValidationContext';
import { ASTVisitor } from '../../language/visitor';
import { ASTValidationContext } from '../ValidationContext';

export function duplicateArgMessage(argName: string): string;

Expand Down
13 changes: 13 additions & 0 deletions tstypes/validation/rules/UniqueDirectiveNames.d.ts
@@ -0,0 +1,13 @@
import { ASTVisitor } from '../../language/visitor';
import { ASTValidationContext } from '../ValidationContext';

export function duplicateDirectiveNameMessage(directiveName: string): string;

export function existedDirectiveNameMessage(directiveName: string): string;

/**
* Unique directive names
*
* A GraphQL document is only valid if all defined directives have unique names.
*/
export function UniqueDirectiveNames(context: SDLValidationContext): ASTVisitor;
2 changes: 1 addition & 1 deletion tstypes/validation/rules/UniqueDirectivesPerLocation.d.ts
@@ -1,5 +1,5 @@
import { ASTValidationContext } from '../ValidationContext';
import { ASTVisitor } from '../../language/visitor';
import { ASTValidationContext } from '../ValidationContext';

export function duplicateDirectiveMessage(directiveName: string): string;

Expand Down
19 changes: 19 additions & 0 deletions tstypes/validation/rules/UniqueEnumValueNames.d.ts
@@ -0,0 +1,19 @@
import { ASTVisitor } from '../../language/visitor';
import { SDLValidationContext } from '../ValidationContext';

export function duplicateEnumValueNameMessage(
typeName: string,
valueName: string,
): string;

export function existedEnumValueNameMessage(
typeName: string,
valueName: string,
): string;

/**
* Unique enum value names
*
* A GraphQL enum type is only valid if all its values are uniquely named.
*/
export function UniqueEnumValueNames(context: SDLValidationContext): ASTVisitor;
21 changes: 21 additions & 0 deletions tstypes/validation/rules/UniqueFieldDefinitionNames.d.ts
@@ -0,0 +1,21 @@
import { ASTVisitor } from '../../language/visitor';
import { SDLValidationContext } from '../ValidationContext';

export function duplicateFieldDefinitionNameMessage(
typeName: string,
fieldName: string,
): string;

export function existedFieldDefinitionNameMessage(
typeName: string,
fieldName: string,
): string;

/**
* Unique field definition names
*
* A GraphQL complex type is only valid if all its fields are uniquely named.
*/
export function UniqueFieldDefinitionNames(
context: SDLValidationContext,
): ASTVisitor;
2 changes: 1 addition & 1 deletion tstypes/validation/rules/UniqueFragmentNames.d.ts
@@ -1,5 +1,5 @@
import { ASTValidationContext } from '../ValidationContext';
import { ASTVisitor } from '../../language/visitor';
import { ASTValidationContext } from '../ValidationContext';

export function duplicateFragmentNameMessage(fragName: string): string;

Expand Down
2 changes: 1 addition & 1 deletion tstypes/validation/rules/UniqueInputFieldNames.d.ts
@@ -1,5 +1,5 @@
import { ASTValidationContext } from '../ValidationContext';
import { ASTVisitor } from '../../language/visitor';
import { ASTValidationContext } from '../ValidationContext';

export function duplicateInputFieldMessage(fieldName: string): string;

Expand Down
2 changes: 1 addition & 1 deletion tstypes/validation/rules/UniqueOperationNames.d.ts
@@ -1,5 +1,5 @@
import { ASTValidationContext } from '../ValidationContext';
import { ASTVisitor } from '../../language/visitor';
import { ASTValidationContext } from '../ValidationContext';

export function duplicateOperationNameMessage(operationName: string): string;

Expand Down
13 changes: 13 additions & 0 deletions tstypes/validation/rules/UniqueOperationTypes.d.ts
@@ -0,0 +1,13 @@
import { ASTVisitor } from '../../language/visitor';
import { SDLValidationContext } from '../ValidationContext';

export function duplicateOperationTypeMessage(operation: string): string;

export function existedOperationTypeMessage(operation: string): string;

/**
* Unique operation types
*
* A GraphQL document is only valid if it has only one type per operation.
*/
export function UniqueOperationTypes(context: SDLValidationContext): ASTVisitor;
13 changes: 13 additions & 0 deletions tstypes/validation/rules/UniqueTypeNames.d.ts
@@ -0,0 +1,13 @@
import { ASTVisitor } from '../../language/visitor';
import { SDLValidationContext } from '../ValidationContext';

export function duplicateTypeNameMessage(typeName: string): string;

export function existedTypeNameMessage(typeName: string): string;

/**
* Unique type names
*
* A GraphQL document is only valid if all defined types have unique names.
*/
export function UniqueTypeNames(context: SDLValidationContext): ASTVisitor;
2 changes: 1 addition & 1 deletion tstypes/validation/rules/UniqueVariableNames.d.ts
@@ -1,5 +1,5 @@
import { ASTValidationContext } from '../ValidationContext';
import { ASTVisitor } from '../../language/visitor';
import { ASTValidationContext } from '../ValidationContext';

export function duplicateVariableMessage(variableName: string): string;

Expand Down