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
|
@@ -14,10 +14,14 @@ var _visitor = require('../language/visitor.js');
|
|
|
14
14
|
|
|
15
15
|
var _TypeInfo = require('../utilities/TypeInfo.js');
|
|
16
16
|
|
|
17
|
+
/** @category Validation Context */
|
|
18
|
+
|
|
17
19
|
/**
|
|
18
20
|
* An instance of this class is passed as the "this" context to all validators,
|
|
19
21
|
* allowing access to commonly useful contextual information from within a
|
|
20
22
|
* validation rule.
|
|
23
|
+
*
|
|
24
|
+
* @internal
|
|
21
25
|
*/
|
|
22
26
|
class ASTValidationContext {
|
|
23
27
|
constructor(ast, onError) {
|
|
@@ -115,9 +119,11 @@ class ASTValidationContext {
|
|
|
115
119
|
return fragments;
|
|
116
120
|
}
|
|
117
121
|
}
|
|
122
|
+
/** @internal */
|
|
118
123
|
|
|
119
124
|
exports.ASTValidationContext = ASTValidationContext;
|
|
120
125
|
|
|
126
|
+
/** @internal */
|
|
121
127
|
class SDLValidationContext extends ASTValidationContext {
|
|
122
128
|
constructor(ast, schema, onError) {
|
|
123
129
|
super(ast, onError);
|
|
@@ -132,10 +138,45 @@ class SDLValidationContext extends ASTValidationContext {
|
|
|
132
138
|
return this._schema;
|
|
133
139
|
}
|
|
134
140
|
}
|
|
141
|
+
/** @internal */
|
|
135
142
|
|
|
136
143
|
exports.SDLValidationContext = SDLValidationContext;
|
|
137
144
|
|
|
145
|
+
/** Validation context passed to query validation rules. */
|
|
138
146
|
class ValidationContext extends ASTValidationContext {
|
|
147
|
+
/**
|
|
148
|
+
* Creates a ValidationContext instance.
|
|
149
|
+
* @param schema - Schema used to validate the document.
|
|
150
|
+
* @param ast - Document AST being validated.
|
|
151
|
+
* @param typeInfo - TypeInfo instance used to track traversal state.
|
|
152
|
+
* @param onError - Callback invoked for each validation error.
|
|
153
|
+
* @example
|
|
154
|
+
* ```ts
|
|
155
|
+
* import { parse } from 'graphql/language';
|
|
156
|
+
* import { GraphQLError } from 'graphql/error';
|
|
157
|
+
* import { buildSchema, TypeInfo } from 'graphql/utilities';
|
|
158
|
+
* import { ValidationContext } from 'graphql/validation';
|
|
159
|
+
*
|
|
160
|
+
* const schema = buildSchema(`
|
|
161
|
+
* type Query {
|
|
162
|
+
* greeting: String
|
|
163
|
+
* }
|
|
164
|
+
* `);
|
|
165
|
+
* const document = parse('{ greeting }');
|
|
166
|
+
* const errors = [];
|
|
167
|
+
* const context = new ValidationContext(
|
|
168
|
+
* schema,
|
|
169
|
+
* document,
|
|
170
|
+
* new TypeInfo(schema),
|
|
171
|
+
* (error) => errors.push(error),
|
|
172
|
+
* );
|
|
173
|
+
*
|
|
174
|
+
* context.reportError(new GraphQLError('Example validation error.'));
|
|
175
|
+
*
|
|
176
|
+
* context.getSchema(); // => schema
|
|
177
|
+
* errors[0].message; // => 'Example validation error.'
|
|
178
|
+
* ```
|
|
179
|
+
*/
|
|
139
180
|
constructor(schema, ast, typeInfo, onError) {
|
|
140
181
|
super(ast, onError);
|
|
141
182
|
this._schema = schema;
|
|
@@ -143,14 +184,72 @@ class ValidationContext extends ASTValidationContext {
|
|
|
143
184
|
this._variableUsages = new Map();
|
|
144
185
|
this._recursiveVariableUsages = new Map();
|
|
145
186
|
}
|
|
187
|
+
/**
|
|
188
|
+
* Returns the value used by `Object.prototype.toString`.
|
|
189
|
+
* @returns The built-in string tag for this object.
|
|
190
|
+
*/
|
|
146
191
|
|
|
147
192
|
get [Symbol.toStringTag]() {
|
|
148
193
|
return 'ValidationContext';
|
|
149
194
|
}
|
|
195
|
+
/**
|
|
196
|
+
* Returns the schema being used by this validation context.
|
|
197
|
+
* @returns The schema being validated against.
|
|
198
|
+
* @example
|
|
199
|
+
* ```ts
|
|
200
|
+
* import { parse } from 'graphql/language';
|
|
201
|
+
* import { buildSchema, TypeInfo } from 'graphql/utilities';
|
|
202
|
+
* import { ValidationContext } from 'graphql/validation';
|
|
203
|
+
*
|
|
204
|
+
* const schema = buildSchema(`
|
|
205
|
+
* type Query {
|
|
206
|
+
* greeting: String
|
|
207
|
+
* }
|
|
208
|
+
* `);
|
|
209
|
+
* const context = new ValidationContext(
|
|
210
|
+
* schema,
|
|
211
|
+
* parse('{ greeting }'),
|
|
212
|
+
* new TypeInfo(schema),
|
|
213
|
+
* () => {},
|
|
214
|
+
* );
|
|
215
|
+
*
|
|
216
|
+
* context.getSchema().getQueryType()?.name; // => 'Query'
|
|
217
|
+
* ```
|
|
218
|
+
*/
|
|
150
219
|
|
|
151
220
|
getSchema() {
|
|
152
221
|
return this._schema;
|
|
153
222
|
}
|
|
223
|
+
/**
|
|
224
|
+
* Returns variable usages found directly within this node.
|
|
225
|
+
* @param node - The AST node to inspect or visit.
|
|
226
|
+
* @returns Variable usages found directly within this node.
|
|
227
|
+
* @example
|
|
228
|
+
* ```ts
|
|
229
|
+
* import { parse } from 'graphql/language';
|
|
230
|
+
* import { buildSchema, TypeInfo } from 'graphql/utilities';
|
|
231
|
+
* import { ValidationContext } from 'graphql/validation';
|
|
232
|
+
*
|
|
233
|
+
* const schema = buildSchema(`
|
|
234
|
+
* type Query {
|
|
235
|
+
* greeting(name: String): String
|
|
236
|
+
* }
|
|
237
|
+
* `);
|
|
238
|
+
* const document = parse('query ($name: String) { greeting(name: $name) }');
|
|
239
|
+
* const operation = document.definitions[0];
|
|
240
|
+
* const context = new ValidationContext(
|
|
241
|
+
* schema,
|
|
242
|
+
* document,
|
|
243
|
+
* new TypeInfo(schema),
|
|
244
|
+
* () => {},
|
|
245
|
+
* );
|
|
246
|
+
*
|
|
247
|
+
* const usages = context.getVariableUsages(operation);
|
|
248
|
+
*
|
|
249
|
+
* usages[0].node.name.value; // => 'name'
|
|
250
|
+
* String(usages[0].type); // => 'String'
|
|
251
|
+
* ```
|
|
252
|
+
*/
|
|
154
253
|
|
|
155
254
|
getVariableUsages(node) {
|
|
156
255
|
let usages = this._variableUsages.get(node);
|
|
@@ -180,6 +279,49 @@ class ValidationContext extends ASTValidationContext {
|
|
|
180
279
|
|
|
181
280
|
return usages;
|
|
182
281
|
}
|
|
282
|
+
/**
|
|
283
|
+
* Returns variable usages for an operation, including variables used by referenced fragments.
|
|
284
|
+
* @param operation - Operation definition to inspect.
|
|
285
|
+
* @returns Variable usages reachable from the operation.
|
|
286
|
+
* @example
|
|
287
|
+
* ```ts
|
|
288
|
+
* import { parse } from 'graphql/language';
|
|
289
|
+
* import { buildSchema, TypeInfo } from 'graphql/utilities';
|
|
290
|
+
* import { ValidationContext } from 'graphql/validation';
|
|
291
|
+
*
|
|
292
|
+
* const schema = buildSchema(`
|
|
293
|
+
* type Query {
|
|
294
|
+
* viewer: User
|
|
295
|
+
* }
|
|
296
|
+
*
|
|
297
|
+
* type User {
|
|
298
|
+
* name(prefix: String): String
|
|
299
|
+
* }
|
|
300
|
+
* `);
|
|
301
|
+
* const document = parse(`
|
|
302
|
+
* query ($prefix: String) {
|
|
303
|
+
* viewer {
|
|
304
|
+
* ...UserName
|
|
305
|
+
* }
|
|
306
|
+
* }
|
|
307
|
+
*
|
|
308
|
+
* fragment UserName on User {
|
|
309
|
+
* name(prefix: $prefix)
|
|
310
|
+
* }
|
|
311
|
+
* `);
|
|
312
|
+
* const operation = document.definitions[0];
|
|
313
|
+
* const context = new ValidationContext(
|
|
314
|
+
* schema,
|
|
315
|
+
* document,
|
|
316
|
+
* new TypeInfo(schema),
|
|
317
|
+
* () => {},
|
|
318
|
+
* );
|
|
319
|
+
*
|
|
320
|
+
* const usages = context.getRecursiveVariableUsages(operation);
|
|
321
|
+
*
|
|
322
|
+
* usages.map((usage) => usage.node.name.value); // => ['prefix']
|
|
323
|
+
* ```
|
|
324
|
+
*/
|
|
183
325
|
|
|
184
326
|
getRecursiveVariableUsages(operation) {
|
|
185
327
|
let usages = this._recursiveVariableUsages.get(operation);
|
|
@@ -196,38 +338,296 @@ class ValidationContext extends ASTValidationContext {
|
|
|
196
338
|
|
|
197
339
|
return usages;
|
|
198
340
|
}
|
|
341
|
+
/**
|
|
342
|
+
* Returns the current output type at this point in traversal.
|
|
343
|
+
* @returns The current output type, if known.
|
|
344
|
+
* @example
|
|
345
|
+
* ```ts
|
|
346
|
+
* import { parse, visit } from 'graphql/language';
|
|
347
|
+
* import { buildSchema, TypeInfo, visitWithTypeInfo } from 'graphql/utilities';
|
|
348
|
+
* import { ValidationContext } from 'graphql/validation';
|
|
349
|
+
*
|
|
350
|
+
* const schema = buildSchema(`
|
|
351
|
+
* type Query {
|
|
352
|
+
* greeting: String
|
|
353
|
+
* }
|
|
354
|
+
* `);
|
|
355
|
+
* const document = parse('{ greeting }');
|
|
356
|
+
* const typeInfo = new TypeInfo(schema);
|
|
357
|
+
* const context = new ValidationContext(schema, document, typeInfo, () => {});
|
|
358
|
+
* let typeName;
|
|
359
|
+
*
|
|
360
|
+
* visit(
|
|
361
|
+
* document,
|
|
362
|
+
* visitWithTypeInfo(typeInfo, {
|
|
363
|
+
* Field: () => {
|
|
364
|
+
* typeName = String(context.getType());
|
|
365
|
+
* },
|
|
366
|
+
* }),
|
|
367
|
+
* );
|
|
368
|
+
*
|
|
369
|
+
* typeName; // => 'String'
|
|
370
|
+
* ```
|
|
371
|
+
*/
|
|
199
372
|
|
|
200
373
|
getType() {
|
|
201
374
|
return this._typeInfo.getType();
|
|
202
375
|
}
|
|
376
|
+
/**
|
|
377
|
+
* Returns the current parent composite type.
|
|
378
|
+
* @returns The current parent composite type, if known.
|
|
379
|
+
* @example
|
|
380
|
+
* ```ts
|
|
381
|
+
* import { parse, visit } from 'graphql/language';
|
|
382
|
+
* import { buildSchema, TypeInfo, visitWithTypeInfo } from 'graphql/utilities';
|
|
383
|
+
* import { ValidationContext } from 'graphql/validation';
|
|
384
|
+
*
|
|
385
|
+
* const schema = buildSchema(`
|
|
386
|
+
* type Query {
|
|
387
|
+
* greeting: String
|
|
388
|
+
* }
|
|
389
|
+
* `);
|
|
390
|
+
* const document = parse('{ greeting }');
|
|
391
|
+
* const typeInfo = new TypeInfo(schema);
|
|
392
|
+
* const context = new ValidationContext(schema, document, typeInfo, () => {});
|
|
393
|
+
* let parentTypeName;
|
|
394
|
+
*
|
|
395
|
+
* visit(
|
|
396
|
+
* document,
|
|
397
|
+
* visitWithTypeInfo(typeInfo, {
|
|
398
|
+
* Field: () => {
|
|
399
|
+
* parentTypeName = context.getParentType()?.name;
|
|
400
|
+
* },
|
|
401
|
+
* }),
|
|
402
|
+
* );
|
|
403
|
+
*
|
|
404
|
+
* parentTypeName; // => 'Query'
|
|
405
|
+
* ```
|
|
406
|
+
*/
|
|
203
407
|
|
|
204
408
|
getParentType() {
|
|
205
409
|
return this._typeInfo.getParentType();
|
|
206
410
|
}
|
|
411
|
+
/**
|
|
412
|
+
* Returns the current input type at this point in traversal.
|
|
413
|
+
* @returns The current input type, if known.
|
|
414
|
+
* @example
|
|
415
|
+
* ```ts
|
|
416
|
+
* import { parse, visit } from 'graphql/language';
|
|
417
|
+
* import { buildSchema, TypeInfo, visitWithTypeInfo } from 'graphql/utilities';
|
|
418
|
+
* import { ValidationContext } from 'graphql/validation';
|
|
419
|
+
*
|
|
420
|
+
* const schema = buildSchema(`
|
|
421
|
+
* type Query {
|
|
422
|
+
* reviews(limit: Int): [String]
|
|
423
|
+
* }
|
|
424
|
+
* `);
|
|
425
|
+
* const document = parse('{ reviews(limit: 5) }');
|
|
426
|
+
* const typeInfo = new TypeInfo(schema);
|
|
427
|
+
* const context = new ValidationContext(schema, document, typeInfo, () => {});
|
|
428
|
+
* let inputTypeName;
|
|
429
|
+
*
|
|
430
|
+
* visit(
|
|
431
|
+
* document,
|
|
432
|
+
* visitWithTypeInfo(typeInfo, {
|
|
433
|
+
* Argument: () => {
|
|
434
|
+
* inputTypeName = String(context.getInputType());
|
|
435
|
+
* },
|
|
436
|
+
* }),
|
|
437
|
+
* );
|
|
438
|
+
*
|
|
439
|
+
* inputTypeName; // => 'Int'
|
|
440
|
+
* ```
|
|
441
|
+
*/
|
|
207
442
|
|
|
208
443
|
getInputType() {
|
|
209
444
|
return this._typeInfo.getInputType();
|
|
210
445
|
}
|
|
446
|
+
/**
|
|
447
|
+
* Returns the parent input type for the current input position.
|
|
448
|
+
* @returns The parent input type, if known.
|
|
449
|
+
* @example
|
|
450
|
+
* ```ts
|
|
451
|
+
* import { parse, visit } from 'graphql/language';
|
|
452
|
+
* import { buildSchema, TypeInfo, visitWithTypeInfo } from 'graphql/utilities';
|
|
453
|
+
* import { ValidationContext } from 'graphql/validation';
|
|
454
|
+
*
|
|
455
|
+
* const schema = buildSchema(`
|
|
456
|
+
* input ReviewFilter {
|
|
457
|
+
* stars: Int
|
|
458
|
+
* }
|
|
459
|
+
*
|
|
460
|
+
* type Query {
|
|
461
|
+
* reviews(filter: ReviewFilter): [String]
|
|
462
|
+
* }
|
|
463
|
+
* `);
|
|
464
|
+
* const document = parse('{ reviews(filter: { stars: 5 }) }');
|
|
465
|
+
* const typeInfo = new TypeInfo(schema);
|
|
466
|
+
* const context = new ValidationContext(schema, document, typeInfo, () => {});
|
|
467
|
+
* let parentInputTypeName;
|
|
468
|
+
*
|
|
469
|
+
* visit(
|
|
470
|
+
* document,
|
|
471
|
+
* visitWithTypeInfo(typeInfo, {
|
|
472
|
+
* ObjectField: () => {
|
|
473
|
+
* parentInputTypeName = String(context.getParentInputType());
|
|
474
|
+
* },
|
|
475
|
+
* }),
|
|
476
|
+
* );
|
|
477
|
+
*
|
|
478
|
+
* parentInputTypeName; // => 'ReviewFilter'
|
|
479
|
+
* ```
|
|
480
|
+
*/
|
|
211
481
|
|
|
212
482
|
getParentInputType() {
|
|
213
483
|
return this._typeInfo.getParentInputType();
|
|
214
484
|
}
|
|
485
|
+
/**
|
|
486
|
+
* Returns the current field definition.
|
|
487
|
+
* @returns The current field definition, if known.
|
|
488
|
+
* @example
|
|
489
|
+
* ```ts
|
|
490
|
+
* import { parse, visit } from 'graphql/language';
|
|
491
|
+
* import { buildSchema, TypeInfo, visitWithTypeInfo } from 'graphql/utilities';
|
|
492
|
+
* import { ValidationContext } from 'graphql/validation';
|
|
493
|
+
*
|
|
494
|
+
* const schema = buildSchema(`
|
|
495
|
+
* type Query {
|
|
496
|
+
* greeting: String
|
|
497
|
+
* }
|
|
498
|
+
* `);
|
|
499
|
+
* const document = parse('{ greeting }');
|
|
500
|
+
* const typeInfo = new TypeInfo(schema);
|
|
501
|
+
* const context = new ValidationContext(schema, document, typeInfo, () => {});
|
|
502
|
+
* let fieldName;
|
|
503
|
+
*
|
|
504
|
+
* visit(
|
|
505
|
+
* document,
|
|
506
|
+
* visitWithTypeInfo(typeInfo, {
|
|
507
|
+
* Field: () => {
|
|
508
|
+
* fieldName = context.getFieldDef()?.name;
|
|
509
|
+
* },
|
|
510
|
+
* }),
|
|
511
|
+
* );
|
|
512
|
+
*
|
|
513
|
+
* fieldName; // => 'greeting'
|
|
514
|
+
* ```
|
|
515
|
+
*/
|
|
215
516
|
|
|
216
517
|
getFieldDef() {
|
|
217
518
|
return this._typeInfo.getFieldDef();
|
|
218
519
|
}
|
|
520
|
+
/**
|
|
521
|
+
* Returns the current directive definition.
|
|
522
|
+
* @returns The current directive definition, if known.
|
|
523
|
+
* @example
|
|
524
|
+
* ```ts
|
|
525
|
+
* import { parse, visit } from 'graphql/language';
|
|
526
|
+
* import { buildSchema, TypeInfo, visitWithTypeInfo } from 'graphql/utilities';
|
|
527
|
+
* import { ValidationContext } from 'graphql/validation';
|
|
528
|
+
*
|
|
529
|
+
* const schema = buildSchema(`
|
|
530
|
+
* type Query {
|
|
531
|
+
* greeting: String
|
|
532
|
+
* }
|
|
533
|
+
* `);
|
|
534
|
+
* const document = parse('{ greeting @include(if: true) }');
|
|
535
|
+
* const typeInfo = new TypeInfo(schema);
|
|
536
|
+
* const context = new ValidationContext(schema, document, typeInfo, () => {});
|
|
537
|
+
* let directiveName;
|
|
538
|
+
*
|
|
539
|
+
* visit(
|
|
540
|
+
* document,
|
|
541
|
+
* visitWithTypeInfo(typeInfo, {
|
|
542
|
+
* Directive: () => {
|
|
543
|
+
* directiveName = context.getDirective()?.name;
|
|
544
|
+
* },
|
|
545
|
+
* }),
|
|
546
|
+
* );
|
|
547
|
+
*
|
|
548
|
+
* directiveName; // => 'include'
|
|
549
|
+
* ```
|
|
550
|
+
*/
|
|
219
551
|
|
|
220
552
|
getDirective() {
|
|
221
553
|
return this._typeInfo.getDirective();
|
|
222
554
|
}
|
|
555
|
+
/**
|
|
556
|
+
* Returns the current argument definition.
|
|
557
|
+
* @returns The current argument definition, if known.
|
|
558
|
+
* @example
|
|
559
|
+
* ```ts
|
|
560
|
+
* import { parse, visit } from 'graphql/language';
|
|
561
|
+
* import { buildSchema, TypeInfo, visitWithTypeInfo } from 'graphql/utilities';
|
|
562
|
+
* import { ValidationContext } from 'graphql/validation';
|
|
563
|
+
*
|
|
564
|
+
* const schema = buildSchema(`
|
|
565
|
+
* type Query {
|
|
566
|
+
* reviews(limit: Int): [String]
|
|
567
|
+
* }
|
|
568
|
+
* `);
|
|
569
|
+
* const document = parse('{ reviews(limit: 5) }');
|
|
570
|
+
* const typeInfo = new TypeInfo(schema);
|
|
571
|
+
* const context = new ValidationContext(schema, document, typeInfo, () => {});
|
|
572
|
+
* let argumentName;
|
|
573
|
+
*
|
|
574
|
+
* visit(
|
|
575
|
+
* document,
|
|
576
|
+
* visitWithTypeInfo(typeInfo, {
|
|
577
|
+
* Argument: () => {
|
|
578
|
+
* argumentName = context.getArgument()?.name;
|
|
579
|
+
* },
|
|
580
|
+
* }),
|
|
581
|
+
* );
|
|
582
|
+
*
|
|
583
|
+
* argumentName; // => 'limit'
|
|
584
|
+
* ```
|
|
585
|
+
*/
|
|
223
586
|
|
|
224
587
|
getArgument() {
|
|
225
588
|
return this._typeInfo.getArgument();
|
|
226
589
|
}
|
|
590
|
+
/**
|
|
591
|
+
* Returns the current enum value definition.
|
|
592
|
+
* @returns The current enum value definition, if known.
|
|
593
|
+
* @example
|
|
594
|
+
* ```ts
|
|
595
|
+
* import { parse, visit } from 'graphql/language';
|
|
596
|
+
* import { buildSchema, TypeInfo, visitWithTypeInfo } from 'graphql/utilities';
|
|
597
|
+
* import { ValidationContext } from 'graphql/validation';
|
|
598
|
+
*
|
|
599
|
+
* const schema = buildSchema(`
|
|
600
|
+
* enum Sort {
|
|
601
|
+
* NEWEST
|
|
602
|
+
* OLDEST
|
|
603
|
+
* }
|
|
604
|
+
*
|
|
605
|
+
* type Query {
|
|
606
|
+
* reviews(sort: Sort): [String]
|
|
607
|
+
* }
|
|
608
|
+
* `);
|
|
609
|
+
* const document = parse('{ reviews(sort: OLDEST) }');
|
|
610
|
+
* const typeInfo = new TypeInfo(schema);
|
|
611
|
+
* const context = new ValidationContext(schema, document, typeInfo, () => {});
|
|
612
|
+
* let enumValueName;
|
|
613
|
+
*
|
|
614
|
+
* visit(
|
|
615
|
+
* document,
|
|
616
|
+
* visitWithTypeInfo(typeInfo, {
|
|
617
|
+
* EnumValue: () => {
|
|
618
|
+
* enumValueName = context.getEnumValue()?.name;
|
|
619
|
+
* },
|
|
620
|
+
* }),
|
|
621
|
+
* );
|
|
622
|
+
*
|
|
623
|
+
* enumValueName; // => 'OLDEST'
|
|
624
|
+
* ```
|
|
625
|
+
*/
|
|
227
626
|
|
|
228
627
|
getEnumValue() {
|
|
229
628
|
return this._typeInfo.getEnumValue();
|
|
230
629
|
}
|
|
231
630
|
}
|
|
631
|
+
/** A function that creates an AST visitor for validating a GraphQL document. */
|
|
232
632
|
|
|
233
633
|
exports.ValidationContext = ValidationContext;
|