graphql 16.14.0 → 16.14.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/error/GraphQLError.d.ts +151 -15
- package/error/GraphQLError.js +143 -12
- package/error/GraphQLError.mjs +143 -12
- package/error/index.d.ts +6 -0
- package/error/index.mjs +6 -0
- package/error/locatedError.d.ts +20 -0
- package/error/locatedError.js +21 -0
- package/error/locatedError.mjs +20 -0
- package/error/syntaxError.d.ts +15 -0
- package/error/syntaxError.js +16 -0
- package/error/syntaxError.mjs +15 -0
- package/execution/collectFields.js +6 -0
- package/execution/collectFields.mjs +6 -0
- package/execution/execute.d.ts +211 -12
- package/execution/execute.js +214 -23
- package/execution/execute.mjs +213 -23
- package/execution/index.d.ts +6 -0
- package/execution/index.mjs +6 -0
- package/execution/mapAsyncIterator.d.ts +2 -0
- package/execution/mapAsyncIterator.js +2 -0
- package/execution/mapAsyncIterator.mjs +2 -0
- package/execution/subscribe.d.ts +195 -5
- package/execution/subscribe.js +154 -11
- package/execution/subscribe.mjs +153 -11
- package/execution/values.d.ts +167 -10
- package/execution/values.js +149 -5
- package/execution/values.mjs +148 -5
- package/graphql.d.ts +163 -41
- package/graphql.js +126 -4
- package/graphql.mjs +131 -41
- package/index.d.ts +11 -17
- package/index.mjs +13 -19
- package/jsutils/Maybe.d.ts +5 -1
- package/jsutils/ObjMap.d.ts +4 -0
- package/jsutils/Path.d.ts +30 -0
- package/jsutils/Path.js +29 -0
- package/jsutils/Path.mjs +29 -0
- package/jsutils/PromiseOrValue.d.ts +1 -0
- package/jsutils/devAssert.d.ts +1 -0
- package/jsutils/devAssert.js +1 -0
- package/jsutils/devAssert.mjs +1 -0
- package/jsutils/didYouMean.d.ts +4 -1
- package/jsutils/didYouMean.js +4 -1
- package/jsutils/didYouMean.mjs +4 -1
- package/jsutils/groupBy.d.ts +2 -0
- package/jsutils/groupBy.js +2 -0
- package/jsutils/groupBy.mjs +2 -0
- package/jsutils/identityFunc.d.ts +2 -0
- package/jsutils/identityFunc.js +2 -0
- package/jsutils/identityFunc.mjs +2 -0
- package/jsutils/inspect.d.ts +2 -0
- package/jsutils/inspect.js +2 -0
- package/jsutils/inspect.mjs +2 -0
- package/jsutils/instanceOf.d.ts +2 -0
- package/jsutils/instanceOf.js +2 -0
- package/jsutils/instanceOf.mjs +2 -0
- package/jsutils/invariant.d.ts +1 -0
- package/jsutils/invariant.js +1 -0
- package/jsutils/invariant.mjs +1 -0
- package/jsutils/isAsyncIterable.d.ts +2 -0
- package/jsutils/isAsyncIterable.js +2 -0
- package/jsutils/isAsyncIterable.mjs +2 -0
- package/jsutils/isIterableObject.d.ts +6 -5
- package/jsutils/isIterableObject.js +6 -5
- package/jsutils/isIterableObject.mjs +6 -5
- package/jsutils/isObjectLike.d.ts +2 -0
- package/jsutils/isObjectLike.js +2 -0
- package/jsutils/isObjectLike.mjs +2 -0
- package/jsutils/isPromise.d.ts +2 -0
- package/jsutils/isPromise.js +2 -0
- package/jsutils/isPromise.mjs +2 -0
- package/jsutils/keyMap.d.ts +7 -14
- package/jsutils/keyMap.js +7 -14
- package/jsutils/keyMap.mjs +7 -14
- package/jsutils/keyValMap.d.ts +9 -6
- package/jsutils/keyValMap.js +9 -6
- package/jsutils/keyValMap.mjs +9 -6
- package/jsutils/mapValue.d.ts +2 -0
- package/jsutils/mapValue.js +2 -0
- package/jsutils/mapValue.mjs +2 -0
- package/jsutils/memoize3.d.ts +2 -0
- package/jsutils/memoize3.js +2 -0
- package/jsutils/memoize3.mjs +2 -0
- package/jsutils/naturalCompare.d.ts +2 -0
- package/jsutils/naturalCompare.js +2 -0
- package/jsutils/naturalCompare.mjs +2 -0
- package/jsutils/printPathArray.d.ts +2 -0
- package/jsutils/printPathArray.js +2 -0
- package/jsutils/printPathArray.mjs +2 -0
- package/jsutils/promiseForObject.d.ts +2 -0
- package/jsutils/promiseForObject.js +2 -0
- package/jsutils/promiseForObject.mjs +2 -0
- package/jsutils/promiseReduce.d.ts +2 -0
- package/jsutils/promiseReduce.js +2 -0
- package/jsutils/promiseReduce.mjs +2 -0
- package/jsutils/suggestionList.d.ts +2 -0
- package/jsutils/suggestionList.js +4 -0
- package/jsutils/suggestionList.mjs +4 -0
- package/jsutils/toError.d.ts +2 -0
- package/jsutils/toError.js +2 -0
- package/jsutils/toError.mjs +2 -0
- package/jsutils/toObjMap.d.ts +1 -0
- package/jsutils/toObjMap.js +1 -0
- package/jsutils/toObjMap.mjs +1 -0
- package/language/ast.d.ts +412 -54
- package/language/ast.js +95 -38
- package/language/ast.mjs +95 -38
- package/language/blockString.d.ts +1 -3
- package/language/blockString.js +1 -3
- package/language/blockString.mjs +1 -3
- package/language/directiveLocation.d.ts +28 -8
- package/language/directiveLocation.js +9 -6
- package/language/directiveLocation.mjs +9 -6
- package/language/index.d.ts +6 -0
- package/language/index.mjs +6 -0
- package/language/kinds.d.ts +57 -18
- package/language/kinds.js +9 -6
- package/language/kinds.mjs +9 -6
- package/language/lexer.d.ts +47 -14
- package/language/lexer.js +71 -13
- package/language/lexer.mjs +70 -13
- package/language/location.d.ts +16 -3
- package/language/location.js +14 -3
- package/language/location.mjs +14 -3
- package/language/parser.d.ts +236 -13
- package/language/parser.js +224 -0
- package/language/parser.mjs +224 -3
- package/language/predicates.d.ts +169 -0
- package/language/predicates.js +170 -0
- package/language/predicates.mjs +180 -0
- package/language/printLocation.d.ts +28 -0
- package/language/printLocation.js +29 -0
- package/language/printLocation.mjs +28 -0
- package/language/printString.d.ts +2 -0
- package/language/printString.js +5 -1
- package/language/printString.mjs +5 -1
- package/language/printer.d.ts +12 -0
- package/language/printer.js +19 -0
- package/language/printer.mjs +18 -0
- package/language/schemaCoordinateLexer.d.ts +8 -6
- package/language/schemaCoordinateLexer.js +10 -6
- package/language/schemaCoordinateLexer.mjs +10 -6
- package/language/source.d.ts +28 -0
- package/language/source.js +32 -0
- package/language/source.mjs +31 -0
- package/language/tokenKind.d.ts +30 -3
- package/language/tokenKind.js +8 -3
- package/language/tokenKind.mjs +8 -3
- package/language/visitor.d.ts +200 -72
- package/language/visitor.js +122 -50
- package/language/visitor.mjs +122 -54
- package/package.json +1 -1
- package/subscription/index.d.ts +9 -3
- package/subscription/index.mjs +9 -3
- package/type/assertName.d.ts +18 -1
- package/type/assertName.js +19 -1
- package/type/assertName.mjs +18 -1
- package/type/definition.d.ts +2540 -79
- package/type/definition.js +2214 -61
- package/type/definition.mjs +2241 -60
- package/type/directives.d.ts +193 -18
- package/type/directives.js +196 -19
- package/type/directives.mjs +196 -19
- package/type/index.d.ts +6 -0
- package/type/index.mjs +6 -0
- package/type/introspection.d.ts +36 -0
- package/type/introspection.js +33 -0
- package/type/introspection.mjs +41 -0
- package/type/scalars.d.ts +29 -2
- package/type/scalars.js +37 -2
- package/type/scalars.mjs +36 -2
- package/type/schema.d.ts +490 -28
- package/type/schema.js +484 -26
- package/type/schema.mjs +484 -26
- package/type/validate.d.ts +31 -0
- package/type/validate.js +32 -0
- package/type/validate.mjs +31 -0
- package/utilities/TypeInfo.d.ts +441 -1
- package/utilities/TypeInfo.js +444 -1
- package/utilities/TypeInfo.mjs +443 -1
- package/utilities/assertValidName.d.ts +27 -2
- package/utilities/assertValidName.js +28 -2
- package/utilities/assertValidName.mjs +27 -2
- package/utilities/astFromValue.d.ts +33 -3
- package/utilities/astFromValue.js +36 -3
- package/utilities/astFromValue.mjs +35 -3
- package/utilities/buildASTSchema.d.ts +65 -6
- package/utilities/buildASTSchema.js +65 -6
- package/utilities/buildASTSchema.mjs +65 -6
- package/utilities/buildClientSchema.d.ts +15 -0
- package/utilities/buildClientSchema.js +16 -0
- package/utilities/buildClientSchema.mjs +15 -0
- package/utilities/coerceInputValue.d.ts +46 -0
- package/utilities/coerceInputValue.js +47 -0
- package/utilities/coerceInputValue.mjs +46 -0
- package/utilities/concatAST.d.ts +12 -0
- package/utilities/concatAST.js +13 -0
- package/utilities/concatAST.mjs +12 -0
- package/utilities/extendSchema.d.ts +56 -3
- package/utilities/extendSchema.js +63 -3
- package/utilities/extendSchema.mjs +62 -3
- package/utilities/findBreakingChanges.d.ts +95 -0
- package/utilities/findBreakingChanges.js +68 -0
- package/utilities/findBreakingChanges.mjs +70 -0
- package/utilities/getIntrospectionQuery.d.ts +132 -0
- package/utilities/getIntrospectionQuery.js +41 -0
- package/utilities/getIntrospectionQuery.mjs +41 -0
- package/utilities/getOperationAST.d.ts +15 -0
- package/utilities/getOperationAST.js +16 -0
- package/utilities/getOperationAST.mjs +15 -0
- package/utilities/getOperationRootType.d.ts +18 -1
- package/utilities/getOperationRootType.js +19 -1
- package/utilities/getOperationRootType.mjs +18 -1
- package/utilities/index.d.ts +7 -0
- package/utilities/index.mjs +7 -0
- package/utilities/introspectionFromSchema.d.ts +54 -0
- package/utilities/introspectionFromSchema.js +55 -0
- package/utilities/introspectionFromSchema.mjs +54 -0
- package/utilities/lexicographicSortSchema.d.ts +35 -0
- package/utilities/lexicographicSortSchema.js +36 -0
- package/utilities/lexicographicSortSchema.mjs +35 -0
- package/utilities/printSchema.d.ts +63 -0
- package/utilities/printSchema.js +66 -0
- package/utilities/printSchema.mjs +67 -0
- package/utilities/resolveSchemaCoordinate.d.ts +62 -0
- package/utilities/resolveSchemaCoordinate.js +64 -0
- package/utilities/resolveSchemaCoordinate.mjs +63 -0
- package/utilities/separateOperations.d.ts +30 -0
- package/utilities/separateOperations.js +31 -0
- package/utilities/separateOperations.mjs +30 -0
- package/utilities/stripIgnoredCharacters.d.ts +13 -6
- package/utilities/stripIgnoredCharacters.js +16 -6
- package/utilities/stripIgnoredCharacters.mjs +15 -6
- package/utilities/typeComparators.d.ts +84 -0
- package/utilities/typeComparators.js +85 -0
- package/utilities/typeComparators.mjs +84 -0
- package/utilities/typeFromAST.d.ts +86 -0
- package/utilities/typeFromAST.js +3 -0
- package/utilities/typeFromAST.mjs +3 -0
- package/utilities/typedQueryDocumentNode.d.ts +4 -0
- package/utilities/valueFromAST.d.ts +38 -0
- package/utilities/valueFromAST.js +39 -0
- package/utilities/valueFromAST.mjs +38 -0
- package/utilities/valueFromASTUntyped.d.ts +15 -2
- package/utilities/valueFromASTUntyped.js +16 -2
- package/utilities/valueFromASTUntyped.mjs +15 -2
- package/validation/ValidationContext.d.ts +399 -0
- package/validation/ValidationContext.js +400 -0
- package/validation/ValidationContext.mjs +401 -0
- package/validation/index.d.ts +6 -0
- package/validation/index.mjs +6 -0
- package/validation/rules/ExecutableDefinitionsRule.d.ts +28 -0
- package/validation/rules/ExecutableDefinitionsRule.js +29 -0
- package/validation/rules/ExecutableDefinitionsRule.mjs +28 -0
- package/validation/rules/FieldsOnCorrectTypeRule.d.ts +28 -0
- package/validation/rules/FieldsOnCorrectTypeRule.js +33 -0
- package/validation/rules/FieldsOnCorrectTypeRule.mjs +32 -0
- package/validation/rules/FragmentsOnCompositeTypesRule.d.ts +28 -0
- package/validation/rules/FragmentsOnCompositeTypesRule.js +29 -0
- package/validation/rules/FragmentsOnCompositeTypesRule.mjs +28 -0
- package/validation/rules/KnownArgumentNamesRule.d.ts +29 -3
- package/validation/rules/KnownArgumentNamesRule.js +30 -3
- package/validation/rules/KnownArgumentNamesRule.mjs +29 -3
- package/validation/rules/KnownDirectivesRule.d.ts +28 -0
- package/validation/rules/KnownDirectivesRule.js +29 -0
- package/validation/rules/KnownDirectivesRule.mjs +28 -0
- package/validation/rules/KnownFragmentNamesRule.d.ts +28 -0
- package/validation/rules/KnownFragmentNamesRule.js +29 -0
- package/validation/rules/KnownFragmentNamesRule.mjs +28 -0
- package/validation/rules/KnownTypeNamesRule.d.ts +28 -0
- package/validation/rules/KnownTypeNamesRule.js +29 -0
- package/validation/rules/KnownTypeNamesRule.mjs +28 -0
- package/validation/rules/LoneAnonymousOperationRule.d.ts +28 -0
- package/validation/rules/LoneAnonymousOperationRule.js +29 -0
- package/validation/rules/LoneAnonymousOperationRule.mjs +28 -0
- package/validation/rules/LoneSchemaDefinitionRule.d.ts +21 -0
- package/validation/rules/LoneSchemaDefinitionRule.js +22 -0
- package/validation/rules/LoneSchemaDefinitionRule.mjs +21 -0
- package/validation/rules/MaxIntrospectionDepthRule.d.ts +31 -0
- package/validation/rules/MaxIntrospectionDepthRule.js +33 -0
- package/validation/rules/MaxIntrospectionDepthRule.mjs +34 -0
- package/validation/rules/NoFragmentCyclesRule.d.ts +28 -0
- package/validation/rules/NoFragmentCyclesRule.js +29 -0
- package/validation/rules/NoFragmentCyclesRule.mjs +28 -0
- package/validation/rules/NoUndefinedVariablesRule.d.ts +28 -0
- package/validation/rules/NoUndefinedVariablesRule.js +29 -0
- package/validation/rules/NoUndefinedVariablesRule.mjs +28 -0
- package/validation/rules/NoUnusedFragmentsRule.d.ts +28 -0
- package/validation/rules/NoUnusedFragmentsRule.js +29 -0
- package/validation/rules/NoUnusedFragmentsRule.mjs +28 -0
- package/validation/rules/NoUnusedVariablesRule.d.ts +29 -0
- package/validation/rules/NoUnusedVariablesRule.js +30 -0
- package/validation/rules/NoUnusedVariablesRule.mjs +29 -0
- package/validation/rules/OverlappingFieldsCanBeMergedRule.d.ts +33 -0
- package/validation/rules/OverlappingFieldsCanBeMergedRule.js +45 -6
- package/validation/rules/OverlappingFieldsCanBeMergedRule.mjs +45 -6
- package/validation/rules/PossibleFragmentSpreadsRule.d.ts +36 -0
- package/validation/rules/PossibleFragmentSpreadsRule.js +37 -0
- package/validation/rules/PossibleFragmentSpreadsRule.mjs +36 -0
- package/validation/rules/PossibleTypeExtensionsRule.d.ts +21 -0
- package/validation/rules/PossibleTypeExtensionsRule.js +22 -0
- package/validation/rules/PossibleTypeExtensionsRule.mjs +21 -0
- package/validation/rules/ProvidedRequiredArgumentsRule.d.ts +29 -3
- package/validation/rules/ProvidedRequiredArgumentsRule.js +30 -3
- package/validation/rules/ProvidedRequiredArgumentsRule.mjs +29 -3
- package/validation/rules/ScalarLeafsRule.d.ts +28 -0
- package/validation/rules/ScalarLeafsRule.js +29 -0
- package/validation/rules/ScalarLeafsRule.mjs +28 -0
- package/validation/rules/SingleFieldSubscriptionsRule.d.ts +33 -0
- package/validation/rules/SingleFieldSubscriptionsRule.js +34 -0
- package/validation/rules/SingleFieldSubscriptionsRule.mjs +33 -0
- package/validation/rules/UniqueArgumentDefinitionNamesRule.d.ts +21 -0
- package/validation/rules/UniqueArgumentDefinitionNamesRule.js +22 -0
- package/validation/rules/UniqueArgumentDefinitionNamesRule.mjs +21 -0
- package/validation/rules/UniqueArgumentNamesRule.d.ts +28 -0
- package/validation/rules/UniqueArgumentNamesRule.js +29 -0
- package/validation/rules/UniqueArgumentNamesRule.mjs +28 -0
- package/validation/rules/UniqueDirectiveNamesRule.d.ts +21 -0
- package/validation/rules/UniqueDirectiveNamesRule.js +22 -0
- package/validation/rules/UniqueDirectiveNamesRule.mjs +21 -0
- package/validation/rules/UniqueDirectivesPerLocationRule.d.ts +28 -0
- package/validation/rules/UniqueDirectivesPerLocationRule.js +29 -0
- package/validation/rules/UniqueDirectivesPerLocationRule.mjs +28 -0
- package/validation/rules/UniqueEnumValueNamesRule.d.ts +21 -0
- package/validation/rules/UniqueEnumValueNamesRule.js +22 -0
- package/validation/rules/UniqueEnumValueNamesRule.mjs +21 -0
- package/validation/rules/UniqueFieldDefinitionNamesRule.d.ts +21 -0
- package/validation/rules/UniqueFieldDefinitionNamesRule.js +22 -0
- package/validation/rules/UniqueFieldDefinitionNamesRule.mjs +21 -0
- package/validation/rules/UniqueFragmentNamesRule.d.ts +28 -0
- package/validation/rules/UniqueFragmentNamesRule.js +29 -0
- package/validation/rules/UniqueFragmentNamesRule.mjs +28 -0
- package/validation/rules/UniqueInputFieldNamesRule.d.ts +32 -0
- package/validation/rules/UniqueInputFieldNamesRule.js +33 -0
- package/validation/rules/UniqueInputFieldNamesRule.mjs +32 -0
- package/validation/rules/UniqueOperationNamesRule.d.ts +28 -0
- package/validation/rules/UniqueOperationNamesRule.js +29 -0
- package/validation/rules/UniqueOperationNamesRule.mjs +28 -0
- package/validation/rules/UniqueOperationTypesRule.d.ts +21 -0
- package/validation/rules/UniqueOperationTypesRule.js +22 -0
- package/validation/rules/UniqueOperationTypesRule.mjs +21 -0
- package/validation/rules/UniqueTypeNamesRule.d.ts +21 -0
- package/validation/rules/UniqueTypeNamesRule.js +22 -0
- package/validation/rules/UniqueTypeNamesRule.mjs +21 -0
- package/validation/rules/UniqueVariableNamesRule.d.ts +28 -0
- package/validation/rules/UniqueVariableNamesRule.js +29 -0
- package/validation/rules/UniqueVariableNamesRule.mjs +28 -0
- package/validation/rules/ValuesOfCorrectTypeRule.d.ts +28 -0
- package/validation/rules/ValuesOfCorrectTypeRule.js +31 -0
- package/validation/rules/ValuesOfCorrectTypeRule.mjs +30 -0
- package/validation/rules/VariablesAreInputTypesRule.d.ts +32 -0
- package/validation/rules/VariablesAreInputTypesRule.js +33 -0
- package/validation/rules/VariablesAreInputTypesRule.mjs +32 -0
- package/validation/rules/VariablesInAllowedPositionRule.d.ts +28 -0
- package/validation/rules/VariablesInAllowedPositionRule.js +35 -1
- package/validation/rules/VariablesInAllowedPositionRule.mjs +34 -1
- package/validation/rules/custom/NoDeprecatedCustomRule.d.ts +41 -0
- package/validation/rules/custom/NoDeprecatedCustomRule.js +42 -0
- package/validation/rules/custom/NoDeprecatedCustomRule.mjs +41 -0
- package/validation/rules/custom/NoSchemaIntrospectionCustomRule.d.ts +28 -0
- package/validation/rules/custom/NoSchemaIntrospectionCustomRule.js +29 -0
- package/validation/rules/custom/NoSchemaIntrospectionCustomRule.mjs +28 -0
- package/validation/specifiedRules.d.ts +2 -3
- package/validation/specifiedRules.js +2 -3
- package/validation/specifiedRules.mjs +2 -3
- package/validation/validate.d.ts +70 -9
- package/validation/validate.js +63 -7
- package/validation/validate.mjs +63 -7
- package/version.d.ts +3 -6
- package/version.js +6 -8
- package/version.mjs +5 -8
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
/** @category Validation Context */
|
|
1
2
|
import { Kind } from '../language/kinds.mjs';
|
|
2
3
|
import { visit } from '../language/visitor.mjs';
|
|
3
4
|
import { TypeInfo, visitWithTypeInfo } from '../utilities/TypeInfo.mjs';
|
|
@@ -6,6 +7,8 @@ import { TypeInfo, visitWithTypeInfo } from '../utilities/TypeInfo.mjs';
|
|
|
6
7
|
* An instance of this class is passed as the "this" context to all validators,
|
|
7
8
|
* allowing access to commonly useful contextual information from within a
|
|
8
9
|
* validation rule.
|
|
10
|
+
*
|
|
11
|
+
* @internal
|
|
9
12
|
*/
|
|
10
13
|
export class ASTValidationContext {
|
|
11
14
|
constructor(ast, onError) {
|
|
@@ -103,6 +106,9 @@ export class ASTValidationContext {
|
|
|
103
106
|
return fragments;
|
|
104
107
|
}
|
|
105
108
|
}
|
|
109
|
+
/** @internal */
|
|
110
|
+
|
|
111
|
+
/** @internal */
|
|
106
112
|
export class SDLValidationContext extends ASTValidationContext {
|
|
107
113
|
constructor(ast, schema, onError) {
|
|
108
114
|
super(ast, onError);
|
|
@@ -117,7 +123,43 @@ export class SDLValidationContext extends ASTValidationContext {
|
|
|
117
123
|
return this._schema;
|
|
118
124
|
}
|
|
119
125
|
}
|
|
126
|
+
/** @internal */
|
|
127
|
+
|
|
128
|
+
/** Validation context passed to query validation rules. */
|
|
120
129
|
export class ValidationContext extends ASTValidationContext {
|
|
130
|
+
/**
|
|
131
|
+
* Creates a ValidationContext instance.
|
|
132
|
+
* @param schema - Schema used to validate the document.
|
|
133
|
+
* @param ast - Document AST being validated.
|
|
134
|
+
* @param typeInfo - TypeInfo instance used to track traversal state.
|
|
135
|
+
* @param onError - Callback invoked for each validation error.
|
|
136
|
+
* @example
|
|
137
|
+
* ```ts
|
|
138
|
+
* import { parse } from 'graphql/language';
|
|
139
|
+
* import { GraphQLError } from 'graphql/error';
|
|
140
|
+
* import { buildSchema, TypeInfo } from 'graphql/utilities';
|
|
141
|
+
* import { ValidationContext } from 'graphql/validation';
|
|
142
|
+
*
|
|
143
|
+
* const schema = buildSchema(`
|
|
144
|
+
* type Query {
|
|
145
|
+
* greeting: String
|
|
146
|
+
* }
|
|
147
|
+
* `);
|
|
148
|
+
* const document = parse('{ greeting }');
|
|
149
|
+
* const errors = [];
|
|
150
|
+
* const context = new ValidationContext(
|
|
151
|
+
* schema,
|
|
152
|
+
* document,
|
|
153
|
+
* new TypeInfo(schema),
|
|
154
|
+
* (error) => errors.push(error),
|
|
155
|
+
* );
|
|
156
|
+
*
|
|
157
|
+
* context.reportError(new GraphQLError('Example validation error.'));
|
|
158
|
+
*
|
|
159
|
+
* context.getSchema(); // => schema
|
|
160
|
+
* errors[0].message; // => 'Example validation error.'
|
|
161
|
+
* ```
|
|
162
|
+
*/
|
|
121
163
|
constructor(schema, ast, typeInfo, onError) {
|
|
122
164
|
super(ast, onError);
|
|
123
165
|
this._schema = schema;
|
|
@@ -125,14 +167,72 @@ export class ValidationContext extends ASTValidationContext {
|
|
|
125
167
|
this._variableUsages = new Map();
|
|
126
168
|
this._recursiveVariableUsages = new Map();
|
|
127
169
|
}
|
|
170
|
+
/**
|
|
171
|
+
* Returns the value used by `Object.prototype.toString`.
|
|
172
|
+
* @returns The built-in string tag for this object.
|
|
173
|
+
*/
|
|
128
174
|
|
|
129
175
|
get [Symbol.toStringTag]() {
|
|
130
176
|
return 'ValidationContext';
|
|
131
177
|
}
|
|
178
|
+
/**
|
|
179
|
+
* Returns the schema being used by this validation context.
|
|
180
|
+
* @returns The schema being validated against.
|
|
181
|
+
* @example
|
|
182
|
+
* ```ts
|
|
183
|
+
* import { parse } from 'graphql/language';
|
|
184
|
+
* import { buildSchema, TypeInfo } from 'graphql/utilities';
|
|
185
|
+
* import { ValidationContext } from 'graphql/validation';
|
|
186
|
+
*
|
|
187
|
+
* const schema = buildSchema(`
|
|
188
|
+
* type Query {
|
|
189
|
+
* greeting: String
|
|
190
|
+
* }
|
|
191
|
+
* `);
|
|
192
|
+
* const context = new ValidationContext(
|
|
193
|
+
* schema,
|
|
194
|
+
* parse('{ greeting }'),
|
|
195
|
+
* new TypeInfo(schema),
|
|
196
|
+
* () => {},
|
|
197
|
+
* );
|
|
198
|
+
*
|
|
199
|
+
* context.getSchema().getQueryType()?.name; // => 'Query'
|
|
200
|
+
* ```
|
|
201
|
+
*/
|
|
132
202
|
|
|
133
203
|
getSchema() {
|
|
134
204
|
return this._schema;
|
|
135
205
|
}
|
|
206
|
+
/**
|
|
207
|
+
* Returns variable usages found directly within this node.
|
|
208
|
+
* @param node - The AST node to inspect or visit.
|
|
209
|
+
* @returns Variable usages found directly within this node.
|
|
210
|
+
* @example
|
|
211
|
+
* ```ts
|
|
212
|
+
* import { parse } from 'graphql/language';
|
|
213
|
+
* import { buildSchema, TypeInfo } from 'graphql/utilities';
|
|
214
|
+
* import { ValidationContext } from 'graphql/validation';
|
|
215
|
+
*
|
|
216
|
+
* const schema = buildSchema(`
|
|
217
|
+
* type Query {
|
|
218
|
+
* greeting(name: String): String
|
|
219
|
+
* }
|
|
220
|
+
* `);
|
|
221
|
+
* const document = parse('query ($name: String) { greeting(name: $name) }');
|
|
222
|
+
* const operation = document.definitions[0];
|
|
223
|
+
* const context = new ValidationContext(
|
|
224
|
+
* schema,
|
|
225
|
+
* document,
|
|
226
|
+
* new TypeInfo(schema),
|
|
227
|
+
* () => {},
|
|
228
|
+
* );
|
|
229
|
+
*
|
|
230
|
+
* const usages = context.getVariableUsages(operation);
|
|
231
|
+
*
|
|
232
|
+
* usages[0].node.name.value; // => 'name'
|
|
233
|
+
* String(usages[0].type); // => 'String'
|
|
234
|
+
* ```
|
|
235
|
+
*/
|
|
136
236
|
|
|
137
237
|
getVariableUsages(node) {
|
|
138
238
|
let usages = this._variableUsages.get(node);
|
|
@@ -162,6 +262,49 @@ export class ValidationContext extends ASTValidationContext {
|
|
|
162
262
|
|
|
163
263
|
return usages;
|
|
164
264
|
}
|
|
265
|
+
/**
|
|
266
|
+
* Returns variable usages for an operation, including variables used by referenced fragments.
|
|
267
|
+
* @param operation - Operation definition to inspect.
|
|
268
|
+
* @returns Variable usages reachable from the operation.
|
|
269
|
+
* @example
|
|
270
|
+
* ```ts
|
|
271
|
+
* import { parse } from 'graphql/language';
|
|
272
|
+
* import { buildSchema, TypeInfo } from 'graphql/utilities';
|
|
273
|
+
* import { ValidationContext } from 'graphql/validation';
|
|
274
|
+
*
|
|
275
|
+
* const schema = buildSchema(`
|
|
276
|
+
* type Query {
|
|
277
|
+
* viewer: User
|
|
278
|
+
* }
|
|
279
|
+
*
|
|
280
|
+
* type User {
|
|
281
|
+
* name(prefix: String): String
|
|
282
|
+
* }
|
|
283
|
+
* `);
|
|
284
|
+
* const document = parse(`
|
|
285
|
+
* query ($prefix: String) {
|
|
286
|
+
* viewer {
|
|
287
|
+
* ...UserName
|
|
288
|
+
* }
|
|
289
|
+
* }
|
|
290
|
+
*
|
|
291
|
+
* fragment UserName on User {
|
|
292
|
+
* name(prefix: $prefix)
|
|
293
|
+
* }
|
|
294
|
+
* `);
|
|
295
|
+
* const operation = document.definitions[0];
|
|
296
|
+
* const context = new ValidationContext(
|
|
297
|
+
* schema,
|
|
298
|
+
* document,
|
|
299
|
+
* new TypeInfo(schema),
|
|
300
|
+
* () => {},
|
|
301
|
+
* );
|
|
302
|
+
*
|
|
303
|
+
* const usages = context.getRecursiveVariableUsages(operation);
|
|
304
|
+
*
|
|
305
|
+
* usages.map((usage) => usage.node.name.value); // => ['prefix']
|
|
306
|
+
* ```
|
|
307
|
+
*/
|
|
165
308
|
|
|
166
309
|
getRecursiveVariableUsages(operation) {
|
|
167
310
|
let usages = this._recursiveVariableUsages.get(operation);
|
|
@@ -178,36 +321,294 @@ export class ValidationContext extends ASTValidationContext {
|
|
|
178
321
|
|
|
179
322
|
return usages;
|
|
180
323
|
}
|
|
324
|
+
/**
|
|
325
|
+
* Returns the current output type at this point in traversal.
|
|
326
|
+
* @returns The current output type, if known.
|
|
327
|
+
* @example
|
|
328
|
+
* ```ts
|
|
329
|
+
* import { parse, visit } from 'graphql/language';
|
|
330
|
+
* import { buildSchema, TypeInfo, visitWithTypeInfo } from 'graphql/utilities';
|
|
331
|
+
* import { ValidationContext } from 'graphql/validation';
|
|
332
|
+
*
|
|
333
|
+
* const schema = buildSchema(`
|
|
334
|
+
* type Query {
|
|
335
|
+
* greeting: String
|
|
336
|
+
* }
|
|
337
|
+
* `);
|
|
338
|
+
* const document = parse('{ greeting }');
|
|
339
|
+
* const typeInfo = new TypeInfo(schema);
|
|
340
|
+
* const context = new ValidationContext(schema, document, typeInfo, () => {});
|
|
341
|
+
* let typeName;
|
|
342
|
+
*
|
|
343
|
+
* visit(
|
|
344
|
+
* document,
|
|
345
|
+
* visitWithTypeInfo(typeInfo, {
|
|
346
|
+
* Field: () => {
|
|
347
|
+
* typeName = String(context.getType());
|
|
348
|
+
* },
|
|
349
|
+
* }),
|
|
350
|
+
* );
|
|
351
|
+
*
|
|
352
|
+
* typeName; // => 'String'
|
|
353
|
+
* ```
|
|
354
|
+
*/
|
|
181
355
|
|
|
182
356
|
getType() {
|
|
183
357
|
return this._typeInfo.getType();
|
|
184
358
|
}
|
|
359
|
+
/**
|
|
360
|
+
* Returns the current parent composite type.
|
|
361
|
+
* @returns The current parent composite type, if known.
|
|
362
|
+
* @example
|
|
363
|
+
* ```ts
|
|
364
|
+
* import { parse, visit } from 'graphql/language';
|
|
365
|
+
* import { buildSchema, TypeInfo, visitWithTypeInfo } from 'graphql/utilities';
|
|
366
|
+
* import { ValidationContext } from 'graphql/validation';
|
|
367
|
+
*
|
|
368
|
+
* const schema = buildSchema(`
|
|
369
|
+
* type Query {
|
|
370
|
+
* greeting: String
|
|
371
|
+
* }
|
|
372
|
+
* `);
|
|
373
|
+
* const document = parse('{ greeting }');
|
|
374
|
+
* const typeInfo = new TypeInfo(schema);
|
|
375
|
+
* const context = new ValidationContext(schema, document, typeInfo, () => {});
|
|
376
|
+
* let parentTypeName;
|
|
377
|
+
*
|
|
378
|
+
* visit(
|
|
379
|
+
* document,
|
|
380
|
+
* visitWithTypeInfo(typeInfo, {
|
|
381
|
+
* Field: () => {
|
|
382
|
+
* parentTypeName = context.getParentType()?.name;
|
|
383
|
+
* },
|
|
384
|
+
* }),
|
|
385
|
+
* );
|
|
386
|
+
*
|
|
387
|
+
* parentTypeName; // => 'Query'
|
|
388
|
+
* ```
|
|
389
|
+
*/
|
|
185
390
|
|
|
186
391
|
getParentType() {
|
|
187
392
|
return this._typeInfo.getParentType();
|
|
188
393
|
}
|
|
394
|
+
/**
|
|
395
|
+
* Returns the current input type at this point in traversal.
|
|
396
|
+
* @returns The current input type, if known.
|
|
397
|
+
* @example
|
|
398
|
+
* ```ts
|
|
399
|
+
* import { parse, visit } from 'graphql/language';
|
|
400
|
+
* import { buildSchema, TypeInfo, visitWithTypeInfo } from 'graphql/utilities';
|
|
401
|
+
* import { ValidationContext } from 'graphql/validation';
|
|
402
|
+
*
|
|
403
|
+
* const schema = buildSchema(`
|
|
404
|
+
* type Query {
|
|
405
|
+
* reviews(limit: Int): [String]
|
|
406
|
+
* }
|
|
407
|
+
* `);
|
|
408
|
+
* const document = parse('{ reviews(limit: 5) }');
|
|
409
|
+
* const typeInfo = new TypeInfo(schema);
|
|
410
|
+
* const context = new ValidationContext(schema, document, typeInfo, () => {});
|
|
411
|
+
* let inputTypeName;
|
|
412
|
+
*
|
|
413
|
+
* visit(
|
|
414
|
+
* document,
|
|
415
|
+
* visitWithTypeInfo(typeInfo, {
|
|
416
|
+
* Argument: () => {
|
|
417
|
+
* inputTypeName = String(context.getInputType());
|
|
418
|
+
* },
|
|
419
|
+
* }),
|
|
420
|
+
* );
|
|
421
|
+
*
|
|
422
|
+
* inputTypeName; // => 'Int'
|
|
423
|
+
* ```
|
|
424
|
+
*/
|
|
189
425
|
|
|
190
426
|
getInputType() {
|
|
191
427
|
return this._typeInfo.getInputType();
|
|
192
428
|
}
|
|
429
|
+
/**
|
|
430
|
+
* Returns the parent input type for the current input position.
|
|
431
|
+
* @returns The parent input type, if known.
|
|
432
|
+
* @example
|
|
433
|
+
* ```ts
|
|
434
|
+
* import { parse, visit } from 'graphql/language';
|
|
435
|
+
* import { buildSchema, TypeInfo, visitWithTypeInfo } from 'graphql/utilities';
|
|
436
|
+
* import { ValidationContext } from 'graphql/validation';
|
|
437
|
+
*
|
|
438
|
+
* const schema = buildSchema(`
|
|
439
|
+
* input ReviewFilter {
|
|
440
|
+
* stars: Int
|
|
441
|
+
* }
|
|
442
|
+
*
|
|
443
|
+
* type Query {
|
|
444
|
+
* reviews(filter: ReviewFilter): [String]
|
|
445
|
+
* }
|
|
446
|
+
* `);
|
|
447
|
+
* const document = parse('{ reviews(filter: { stars: 5 }) }');
|
|
448
|
+
* const typeInfo = new TypeInfo(schema);
|
|
449
|
+
* const context = new ValidationContext(schema, document, typeInfo, () => {});
|
|
450
|
+
* let parentInputTypeName;
|
|
451
|
+
*
|
|
452
|
+
* visit(
|
|
453
|
+
* document,
|
|
454
|
+
* visitWithTypeInfo(typeInfo, {
|
|
455
|
+
* ObjectField: () => {
|
|
456
|
+
* parentInputTypeName = String(context.getParentInputType());
|
|
457
|
+
* },
|
|
458
|
+
* }),
|
|
459
|
+
* );
|
|
460
|
+
*
|
|
461
|
+
* parentInputTypeName; // => 'ReviewFilter'
|
|
462
|
+
* ```
|
|
463
|
+
*/
|
|
193
464
|
|
|
194
465
|
getParentInputType() {
|
|
195
466
|
return this._typeInfo.getParentInputType();
|
|
196
467
|
}
|
|
468
|
+
/**
|
|
469
|
+
* Returns the current field definition.
|
|
470
|
+
* @returns The current field definition, if known.
|
|
471
|
+
* @example
|
|
472
|
+
* ```ts
|
|
473
|
+
* import { parse, visit } from 'graphql/language';
|
|
474
|
+
* import { buildSchema, TypeInfo, visitWithTypeInfo } from 'graphql/utilities';
|
|
475
|
+
* import { ValidationContext } from 'graphql/validation';
|
|
476
|
+
*
|
|
477
|
+
* const schema = buildSchema(`
|
|
478
|
+
* type Query {
|
|
479
|
+
* greeting: String
|
|
480
|
+
* }
|
|
481
|
+
* `);
|
|
482
|
+
* const document = parse('{ greeting }');
|
|
483
|
+
* const typeInfo = new TypeInfo(schema);
|
|
484
|
+
* const context = new ValidationContext(schema, document, typeInfo, () => {});
|
|
485
|
+
* let fieldName;
|
|
486
|
+
*
|
|
487
|
+
* visit(
|
|
488
|
+
* document,
|
|
489
|
+
* visitWithTypeInfo(typeInfo, {
|
|
490
|
+
* Field: () => {
|
|
491
|
+
* fieldName = context.getFieldDef()?.name;
|
|
492
|
+
* },
|
|
493
|
+
* }),
|
|
494
|
+
* );
|
|
495
|
+
*
|
|
496
|
+
* fieldName; // => 'greeting'
|
|
497
|
+
* ```
|
|
498
|
+
*/
|
|
197
499
|
|
|
198
500
|
getFieldDef() {
|
|
199
501
|
return this._typeInfo.getFieldDef();
|
|
200
502
|
}
|
|
503
|
+
/**
|
|
504
|
+
* Returns the current directive definition.
|
|
505
|
+
* @returns The current directive definition, if known.
|
|
506
|
+
* @example
|
|
507
|
+
* ```ts
|
|
508
|
+
* import { parse, visit } from 'graphql/language';
|
|
509
|
+
* import { buildSchema, TypeInfo, visitWithTypeInfo } from 'graphql/utilities';
|
|
510
|
+
* import { ValidationContext } from 'graphql/validation';
|
|
511
|
+
*
|
|
512
|
+
* const schema = buildSchema(`
|
|
513
|
+
* type Query {
|
|
514
|
+
* greeting: String
|
|
515
|
+
* }
|
|
516
|
+
* `);
|
|
517
|
+
* const document = parse('{ greeting @include(if: true) }');
|
|
518
|
+
* const typeInfo = new TypeInfo(schema);
|
|
519
|
+
* const context = new ValidationContext(schema, document, typeInfo, () => {});
|
|
520
|
+
* let directiveName;
|
|
521
|
+
*
|
|
522
|
+
* visit(
|
|
523
|
+
* document,
|
|
524
|
+
* visitWithTypeInfo(typeInfo, {
|
|
525
|
+
* Directive: () => {
|
|
526
|
+
* directiveName = context.getDirective()?.name;
|
|
527
|
+
* },
|
|
528
|
+
* }),
|
|
529
|
+
* );
|
|
530
|
+
*
|
|
531
|
+
* directiveName; // => 'include'
|
|
532
|
+
* ```
|
|
533
|
+
*/
|
|
201
534
|
|
|
202
535
|
getDirective() {
|
|
203
536
|
return this._typeInfo.getDirective();
|
|
204
537
|
}
|
|
538
|
+
/**
|
|
539
|
+
* Returns the current argument definition.
|
|
540
|
+
* @returns The current argument definition, if known.
|
|
541
|
+
* @example
|
|
542
|
+
* ```ts
|
|
543
|
+
* import { parse, visit } from 'graphql/language';
|
|
544
|
+
* import { buildSchema, TypeInfo, visitWithTypeInfo } from 'graphql/utilities';
|
|
545
|
+
* import { ValidationContext } from 'graphql/validation';
|
|
546
|
+
*
|
|
547
|
+
* const schema = buildSchema(`
|
|
548
|
+
* type Query {
|
|
549
|
+
* reviews(limit: Int): [String]
|
|
550
|
+
* }
|
|
551
|
+
* `);
|
|
552
|
+
* const document = parse('{ reviews(limit: 5) }');
|
|
553
|
+
* const typeInfo = new TypeInfo(schema);
|
|
554
|
+
* const context = new ValidationContext(schema, document, typeInfo, () => {});
|
|
555
|
+
* let argumentName;
|
|
556
|
+
*
|
|
557
|
+
* visit(
|
|
558
|
+
* document,
|
|
559
|
+
* visitWithTypeInfo(typeInfo, {
|
|
560
|
+
* Argument: () => {
|
|
561
|
+
* argumentName = context.getArgument()?.name;
|
|
562
|
+
* },
|
|
563
|
+
* }),
|
|
564
|
+
* );
|
|
565
|
+
*
|
|
566
|
+
* argumentName; // => 'limit'
|
|
567
|
+
* ```
|
|
568
|
+
*/
|
|
205
569
|
|
|
206
570
|
getArgument() {
|
|
207
571
|
return this._typeInfo.getArgument();
|
|
208
572
|
}
|
|
573
|
+
/**
|
|
574
|
+
* Returns the current enum value definition.
|
|
575
|
+
* @returns The current enum value definition, if known.
|
|
576
|
+
* @example
|
|
577
|
+
* ```ts
|
|
578
|
+
* import { parse, visit } from 'graphql/language';
|
|
579
|
+
* import { buildSchema, TypeInfo, visitWithTypeInfo } from 'graphql/utilities';
|
|
580
|
+
* import { ValidationContext } from 'graphql/validation';
|
|
581
|
+
*
|
|
582
|
+
* const schema = buildSchema(`
|
|
583
|
+
* enum Sort {
|
|
584
|
+
* NEWEST
|
|
585
|
+
* OLDEST
|
|
586
|
+
* }
|
|
587
|
+
*
|
|
588
|
+
* type Query {
|
|
589
|
+
* reviews(sort: Sort): [String]
|
|
590
|
+
* }
|
|
591
|
+
* `);
|
|
592
|
+
* const document = parse('{ reviews(sort: OLDEST) }');
|
|
593
|
+
* const typeInfo = new TypeInfo(schema);
|
|
594
|
+
* const context = new ValidationContext(schema, document, typeInfo, () => {});
|
|
595
|
+
* let enumValueName;
|
|
596
|
+
*
|
|
597
|
+
* visit(
|
|
598
|
+
* document,
|
|
599
|
+
* visitWithTypeInfo(typeInfo, {
|
|
600
|
+
* EnumValue: () => {
|
|
601
|
+
* enumValueName = context.getEnumValue()?.name;
|
|
602
|
+
* },
|
|
603
|
+
* }),
|
|
604
|
+
* );
|
|
605
|
+
*
|
|
606
|
+
* enumValueName; // => 'OLDEST'
|
|
607
|
+
* ```
|
|
608
|
+
*/
|
|
209
609
|
|
|
210
610
|
getEnumValue() {
|
|
211
611
|
return this._typeInfo.getEnumValue();
|
|
212
612
|
}
|
|
213
613
|
}
|
|
614
|
+
/** A function that creates an AST visitor for validating a GraphQL document. */
|
package/validation/index.d.ts
CHANGED
|
@@ -1,3 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Validate GraphQL documents and schemas with the specified validation rules.
|
|
3
|
+
*
|
|
4
|
+
* These exports are also available from the root `graphql` package.
|
|
5
|
+
* @packageDocumentation
|
|
6
|
+
*/
|
|
1
7
|
export { validate } from './validate';
|
|
2
8
|
export { ValidationContext } from './ValidationContext';
|
|
3
9
|
export type { ValidationRule } from './ValidationContext';
|
package/validation/index.mjs
CHANGED
|
@@ -1,3 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Validate GraphQL documents and schemas with the specified validation rules.
|
|
3
|
+
*
|
|
4
|
+
* These exports are also available from the root `graphql` package.
|
|
5
|
+
* @packageDocumentation
|
|
6
|
+
*/
|
|
1
7
|
export { validate } from './validate.mjs';
|
|
2
8
|
export { ValidationContext } from './ValidationContext.mjs';
|
|
3
9
|
// All validation rules in the GraphQL Specification.
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
/** @category Validation Rules */
|
|
1
2
|
import type { ASTVisitor } from '../../language/visitor';
|
|
2
3
|
import type { ASTValidationContext } from '../ValidationContext';
|
|
3
4
|
/**
|
|
@@ -7,6 +8,33 @@ import type { ASTValidationContext } from '../ValidationContext';
|
|
|
7
8
|
* operation or fragment definitions.
|
|
8
9
|
*
|
|
9
10
|
* See https://spec.graphql.org/draft/#sec-Executable-Definitions
|
|
11
|
+
* @param context - The validation context used while checking the document.
|
|
12
|
+
* @returns A visitor that reports validation errors for this rule.
|
|
13
|
+
* @example
|
|
14
|
+
* ```ts
|
|
15
|
+
* import { buildSchema, parse, validate } from 'graphql';
|
|
16
|
+
* import { ExecutableDefinitionsRule } from 'graphql/validation';
|
|
17
|
+
*
|
|
18
|
+
* const schema = buildSchema(`
|
|
19
|
+
* type Query {
|
|
20
|
+
* name: String
|
|
21
|
+
* }
|
|
22
|
+
* `);
|
|
23
|
+
*
|
|
24
|
+
* const invalidDocument = parse(`
|
|
25
|
+
* type Extra { field: String }
|
|
26
|
+
* `);
|
|
27
|
+
* const invalidErrors = validate(schema, invalidDocument, [ExecutableDefinitionsRule]);
|
|
28
|
+
*
|
|
29
|
+
* invalidErrors.length; // => 1
|
|
30
|
+
*
|
|
31
|
+
* const validDocument = parse(`
|
|
32
|
+
* { name }
|
|
33
|
+
* `);
|
|
34
|
+
* const validErrors = validate(schema, validDocument, [ExecutableDefinitionsRule]);
|
|
35
|
+
*
|
|
36
|
+
* validErrors; // => []
|
|
37
|
+
* ```
|
|
10
38
|
*/
|
|
11
39
|
export declare function ExecutableDefinitionsRule(
|
|
12
40
|
context: ASTValidationContext,
|
|
@@ -11,6 +11,8 @@ var _kinds = require('../../language/kinds.js');
|
|
|
11
11
|
|
|
12
12
|
var _predicates = require('../../language/predicates.js');
|
|
13
13
|
|
|
14
|
+
/** @category Validation Rules */
|
|
15
|
+
|
|
14
16
|
/**
|
|
15
17
|
* Executable definitions
|
|
16
18
|
*
|
|
@@ -18,6 +20,33 @@ var _predicates = require('../../language/predicates.js');
|
|
|
18
20
|
* operation or fragment definitions.
|
|
19
21
|
*
|
|
20
22
|
* See https://spec.graphql.org/draft/#sec-Executable-Definitions
|
|
23
|
+
* @param context - The validation context used while checking the document.
|
|
24
|
+
* @returns A visitor that reports validation errors for this rule.
|
|
25
|
+
* @example
|
|
26
|
+
* ```ts
|
|
27
|
+
* import { buildSchema, parse, validate } from 'graphql';
|
|
28
|
+
* import { ExecutableDefinitionsRule } from 'graphql/validation';
|
|
29
|
+
*
|
|
30
|
+
* const schema = buildSchema(`
|
|
31
|
+
* type Query {
|
|
32
|
+
* name: String
|
|
33
|
+
* }
|
|
34
|
+
* `);
|
|
35
|
+
*
|
|
36
|
+
* const invalidDocument = parse(`
|
|
37
|
+
* type Extra { field: String }
|
|
38
|
+
* `);
|
|
39
|
+
* const invalidErrors = validate(schema, invalidDocument, [ExecutableDefinitionsRule]);
|
|
40
|
+
*
|
|
41
|
+
* invalidErrors.length; // => 1
|
|
42
|
+
*
|
|
43
|
+
* const validDocument = parse(`
|
|
44
|
+
* { name }
|
|
45
|
+
* `);
|
|
46
|
+
* const validErrors = validate(schema, validDocument, [ExecutableDefinitionsRule]);
|
|
47
|
+
*
|
|
48
|
+
* validErrors; // => []
|
|
49
|
+
* ```
|
|
21
50
|
*/
|
|
22
51
|
function ExecutableDefinitionsRule(context) {
|
|
23
52
|
return {
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
/** @category Validation Rules */
|
|
1
2
|
import { GraphQLError } from '../../error/GraphQLError.mjs';
|
|
2
3
|
import { Kind } from '../../language/kinds.mjs';
|
|
3
4
|
import { isExecutableDefinitionNode } from '../../language/predicates.mjs';
|
|
@@ -9,6 +10,33 @@ import { isExecutableDefinitionNode } from '../../language/predicates.mjs';
|
|
|
9
10
|
* operation or fragment definitions.
|
|
10
11
|
*
|
|
11
12
|
* See https://spec.graphql.org/draft/#sec-Executable-Definitions
|
|
13
|
+
* @param context - The validation context used while checking the document.
|
|
14
|
+
* @returns A visitor that reports validation errors for this rule.
|
|
15
|
+
* @example
|
|
16
|
+
* ```ts
|
|
17
|
+
* import { buildSchema, parse, validate } from 'graphql';
|
|
18
|
+
* import { ExecutableDefinitionsRule } from 'graphql/validation';
|
|
19
|
+
*
|
|
20
|
+
* const schema = buildSchema(`
|
|
21
|
+
* type Query {
|
|
22
|
+
* name: String
|
|
23
|
+
* }
|
|
24
|
+
* `);
|
|
25
|
+
*
|
|
26
|
+
* const invalidDocument = parse(`
|
|
27
|
+
* type Extra { field: String }
|
|
28
|
+
* `);
|
|
29
|
+
* const invalidErrors = validate(schema, invalidDocument, [ExecutableDefinitionsRule]);
|
|
30
|
+
*
|
|
31
|
+
* invalidErrors.length; // => 1
|
|
32
|
+
*
|
|
33
|
+
* const validDocument = parse(`
|
|
34
|
+
* { name }
|
|
35
|
+
* `);
|
|
36
|
+
* const validErrors = validate(schema, validDocument, [ExecutableDefinitionsRule]);
|
|
37
|
+
*
|
|
38
|
+
* validErrors; // => []
|
|
39
|
+
* ```
|
|
12
40
|
*/
|
|
13
41
|
export function ExecutableDefinitionsRule(context) {
|
|
14
42
|
return {
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
/** @category Validation Rules */
|
|
1
2
|
import type { ASTVisitor } from '../../language/visitor';
|
|
2
3
|
import type { ValidationContext } from '../ValidationContext';
|
|
3
4
|
/**
|
|
@@ -7,6 +8,33 @@ import type { ValidationContext } from '../ValidationContext';
|
|
|
7
8
|
* parent type, or are an allowed meta field such as __typename.
|
|
8
9
|
*
|
|
9
10
|
* See https://spec.graphql.org/draft/#sec-Field-Selections
|
|
11
|
+
* @param context - The validation context used while checking the document.
|
|
12
|
+
* @returns A visitor that reports validation errors for this rule.
|
|
13
|
+
* @example
|
|
14
|
+
* ```ts
|
|
15
|
+
* import { buildSchema, parse, validate } from 'graphql';
|
|
16
|
+
* import { FieldsOnCorrectTypeRule } from 'graphql/validation';
|
|
17
|
+
*
|
|
18
|
+
* const schema = buildSchema(`
|
|
19
|
+
* type Query {
|
|
20
|
+
* name: String
|
|
21
|
+
* }
|
|
22
|
+
* `);
|
|
23
|
+
*
|
|
24
|
+
* const invalidDocument = parse(`
|
|
25
|
+
* { missing }
|
|
26
|
+
* `);
|
|
27
|
+
* const invalidErrors = validate(schema, invalidDocument, [FieldsOnCorrectTypeRule]);
|
|
28
|
+
*
|
|
29
|
+
* invalidErrors.length; // => 1
|
|
30
|
+
*
|
|
31
|
+
* const validDocument = parse(`
|
|
32
|
+
* { name }
|
|
33
|
+
* `);
|
|
34
|
+
* const validErrors = validate(schema, validDocument, [FieldsOnCorrectTypeRule]);
|
|
35
|
+
*
|
|
36
|
+
* validErrors; // => []
|
|
37
|
+
* ```
|
|
10
38
|
*/
|
|
11
39
|
export declare function FieldsOnCorrectTypeRule(
|
|
12
40
|
context: ValidationContext,
|