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
package/utilities/TypeInfo.js
CHANGED
|
@@ -18,12 +18,82 @@ var _introspection = require('../type/introspection.js');
|
|
|
18
18
|
|
|
19
19
|
var _typeFromAST = require('./typeFromAST.js');
|
|
20
20
|
|
|
21
|
+
/** @category Type Info */
|
|
22
|
+
|
|
21
23
|
/**
|
|
22
24
|
* TypeInfo is a utility class which, given a GraphQL schema, can keep track
|
|
23
25
|
* of the current field and type definitions at any point in a GraphQL document
|
|
24
26
|
* AST during a recursive descent by calling `enter(node)` and `leave(node)`.
|
|
25
27
|
*/
|
|
26
28
|
class TypeInfo {
|
|
29
|
+
/**
|
|
30
|
+
* Creates a TypeInfo instance.
|
|
31
|
+
* @param schema - Schema used for type lookups.
|
|
32
|
+
* @param initialType - Optional type to use at the start of traversal.
|
|
33
|
+
* @param getFieldDefFn - Optional field definition lookup override.
|
|
34
|
+
* @example
|
|
35
|
+
* ```ts
|
|
36
|
+
* // Track field types during a visitWithTypeInfo traversal.
|
|
37
|
+
* import { parse, visit } from 'graphql/language';
|
|
38
|
+
* import { buildSchema } from 'graphql/utilities';
|
|
39
|
+
* import { TypeInfo, visitWithTypeInfo } from 'graphql/utilities';
|
|
40
|
+
*
|
|
41
|
+
* const schema = buildSchema(`
|
|
42
|
+
* type Query {
|
|
43
|
+
* greeting: String
|
|
44
|
+
* }
|
|
45
|
+
* `);
|
|
46
|
+
* const typeInfo = new TypeInfo(schema);
|
|
47
|
+
* const seenTypes = [];
|
|
48
|
+
*
|
|
49
|
+
* visit(
|
|
50
|
+
* parse('{ greeting }'),
|
|
51
|
+
* visitWithTypeInfo(typeInfo, {
|
|
52
|
+
* Field: () => {
|
|
53
|
+
* seenTypes.push(String(typeInfo.getType()));
|
|
54
|
+
* },
|
|
55
|
+
* }),
|
|
56
|
+
* );
|
|
57
|
+
*
|
|
58
|
+
* seenTypes; // => ['String']
|
|
59
|
+
* ```
|
|
60
|
+
* @example
|
|
61
|
+
* ```ts
|
|
62
|
+
* // This variant starts from an initial type and supplies a field definition resolver.
|
|
63
|
+
* import { Kind } from 'graphql/language';
|
|
64
|
+
* import { GraphQLString } from 'graphql/type';
|
|
65
|
+
* import { buildSchema, TypeInfo } from 'graphql/utilities';
|
|
66
|
+
*
|
|
67
|
+
* const schema = buildSchema(`
|
|
68
|
+
* type Query {
|
|
69
|
+
* greeting: String
|
|
70
|
+
* }
|
|
71
|
+
* `);
|
|
72
|
+
* const typeInfo = new TypeInfo(schema, schema.getQueryType(), () => ({
|
|
73
|
+
* name: 'virtualGreeting',
|
|
74
|
+
* description: undefined,
|
|
75
|
+
* type: GraphQLString,
|
|
76
|
+
* args: [],
|
|
77
|
+
* resolve: undefined,
|
|
78
|
+
* subscribe: undefined,
|
|
79
|
+
* deprecationReason: undefined,
|
|
80
|
+
* extensions: Object.create(null),
|
|
81
|
+
* astNode: undefined,
|
|
82
|
+
* }));
|
|
83
|
+
*
|
|
84
|
+
* typeInfo.enter({
|
|
85
|
+
* kind: Kind.SELECTION_SET,
|
|
86
|
+
* selections: [],
|
|
87
|
+
* });
|
|
88
|
+
* typeInfo.enter({
|
|
89
|
+
* kind: Kind.FIELD,
|
|
90
|
+
* name: { kind: Kind.NAME, value: 'ignored' },
|
|
91
|
+
* });
|
|
92
|
+
*
|
|
93
|
+
* typeInfo.getFieldDef()?.name; // => 'virtualGreeting'
|
|
94
|
+
* String(typeInfo.getType()); // => 'String'
|
|
95
|
+
* ```
|
|
96
|
+
*/
|
|
27
97
|
constructor(
|
|
28
98
|
schema,
|
|
29
99
|
/**
|
|
@@ -31,7 +101,11 @@ class TypeInfo {
|
|
|
31
101
|
* beginning somewhere other than documents.
|
|
32
102
|
*/
|
|
33
103
|
initialType,
|
|
34
|
-
/**
|
|
104
|
+
/**
|
|
105
|
+
* Deprecated field definition lookup override. Use TypeInfo's built-in
|
|
106
|
+
* field definition lookup instead because this hook will be removed in v17.
|
|
107
|
+
* @deprecated will be removed in 17.0.0
|
|
108
|
+
*/
|
|
35
109
|
getFieldDefFn,
|
|
36
110
|
) {
|
|
37
111
|
this._schema = schema;
|
|
@@ -62,58 +136,365 @@ class TypeInfo {
|
|
|
62
136
|
}
|
|
63
137
|
}
|
|
64
138
|
}
|
|
139
|
+
/**
|
|
140
|
+
* Returns the value used by `Object.prototype.toString`.
|
|
141
|
+
* @returns The built-in string tag for this object.
|
|
142
|
+
*/
|
|
65
143
|
|
|
66
144
|
get [Symbol.toStringTag]() {
|
|
67
145
|
return 'TypeInfo';
|
|
68
146
|
}
|
|
147
|
+
/**
|
|
148
|
+
* Returns the current output type at this point in traversal.
|
|
149
|
+
* @returns The current output type, if known.
|
|
150
|
+
* @example
|
|
151
|
+
* ```ts
|
|
152
|
+
* import { parse, visit } from 'graphql/language';
|
|
153
|
+
* import { buildSchema, TypeInfo, visitWithTypeInfo } from 'graphql/utilities';
|
|
154
|
+
*
|
|
155
|
+
* const schema = buildSchema(`
|
|
156
|
+
* type Query {
|
|
157
|
+
* viewer: User
|
|
158
|
+
* }
|
|
159
|
+
*
|
|
160
|
+
* type User {
|
|
161
|
+
* name: String
|
|
162
|
+
* }
|
|
163
|
+
* `);
|
|
164
|
+
* const typeInfo = new TypeInfo(schema);
|
|
165
|
+
* const fieldTypes = {};
|
|
166
|
+
*
|
|
167
|
+
* visit(
|
|
168
|
+
* parse('{ viewer { name } }'),
|
|
169
|
+
* visitWithTypeInfo(typeInfo, {
|
|
170
|
+
* Field: (node) => {
|
|
171
|
+
* fieldTypes[node.name.value] = String(typeInfo.getType());
|
|
172
|
+
* },
|
|
173
|
+
* }),
|
|
174
|
+
* );
|
|
175
|
+
*
|
|
176
|
+
* fieldTypes; // => { viewer: 'User', name: 'String' }
|
|
177
|
+
* ```
|
|
178
|
+
*/
|
|
69
179
|
|
|
70
180
|
getType() {
|
|
71
181
|
if (this._typeStack.length > 0) {
|
|
72
182
|
return this._typeStack[this._typeStack.length - 1];
|
|
73
183
|
}
|
|
74
184
|
}
|
|
185
|
+
/**
|
|
186
|
+
* Returns the current parent composite type.
|
|
187
|
+
* @returns The current parent composite type, if known.
|
|
188
|
+
* @example
|
|
189
|
+
* ```ts
|
|
190
|
+
* import { parse, visit } from 'graphql/language';
|
|
191
|
+
* import { buildSchema, TypeInfo, visitWithTypeInfo } from 'graphql/utilities';
|
|
192
|
+
*
|
|
193
|
+
* const schema = buildSchema(`
|
|
194
|
+
* type Query {
|
|
195
|
+
* viewer: User
|
|
196
|
+
* }
|
|
197
|
+
*
|
|
198
|
+
* type User {
|
|
199
|
+
* name: String
|
|
200
|
+
* }
|
|
201
|
+
* `);
|
|
202
|
+
* const typeInfo = new TypeInfo(schema);
|
|
203
|
+
* const parentTypes = {};
|
|
204
|
+
*
|
|
205
|
+
* visit(
|
|
206
|
+
* parse('{ viewer { name } }'),
|
|
207
|
+
* visitWithTypeInfo(typeInfo, {
|
|
208
|
+
* Field: (node) => {
|
|
209
|
+
* parentTypes[node.name.value] = String(typeInfo.getParentType());
|
|
210
|
+
* },
|
|
211
|
+
* }),
|
|
212
|
+
* );
|
|
213
|
+
*
|
|
214
|
+
* parentTypes; // => { viewer: 'Query', name: 'User' }
|
|
215
|
+
* ```
|
|
216
|
+
*/
|
|
75
217
|
|
|
76
218
|
getParentType() {
|
|
77
219
|
if (this._parentTypeStack.length > 0) {
|
|
78
220
|
return this._parentTypeStack[this._parentTypeStack.length - 1];
|
|
79
221
|
}
|
|
80
222
|
}
|
|
223
|
+
/**
|
|
224
|
+
* Returns the current input type at this point in traversal.
|
|
225
|
+
* @returns The current input type, if known.
|
|
226
|
+
* @example
|
|
227
|
+
* ```ts
|
|
228
|
+
* import { parse, visit } from 'graphql/language';
|
|
229
|
+
* import { buildSchema, TypeInfo, visitWithTypeInfo } from 'graphql/utilities';
|
|
230
|
+
*
|
|
231
|
+
* const schema = buildSchema(`
|
|
232
|
+
* type Query {
|
|
233
|
+
* reviews(stars: Int!, sort: Sort = NEWEST): [String]
|
|
234
|
+
* }
|
|
235
|
+
*
|
|
236
|
+
* enum Sort {
|
|
237
|
+
* NEWEST
|
|
238
|
+
* OLDEST
|
|
239
|
+
* }
|
|
240
|
+
* `);
|
|
241
|
+
* const typeInfo = new TypeInfo(schema);
|
|
242
|
+
* const inputTypes = {};
|
|
243
|
+
*
|
|
244
|
+
* visit(
|
|
245
|
+
* parse('{ reviews(stars: 5, sort: OLDEST) }'),
|
|
246
|
+
* visitWithTypeInfo(typeInfo, {
|
|
247
|
+
* Argument: (node) => {
|
|
248
|
+
* inputTypes[node.name.value] = String(typeInfo.getInputType());
|
|
249
|
+
* },
|
|
250
|
+
* }),
|
|
251
|
+
* );
|
|
252
|
+
*
|
|
253
|
+
* inputTypes; // => { stars: 'Int!', sort: 'Sort' }
|
|
254
|
+
* ```
|
|
255
|
+
*/
|
|
81
256
|
|
|
82
257
|
getInputType() {
|
|
83
258
|
if (this._inputTypeStack.length > 0) {
|
|
84
259
|
return this._inputTypeStack[this._inputTypeStack.length - 1];
|
|
85
260
|
}
|
|
86
261
|
}
|
|
262
|
+
/**
|
|
263
|
+
* Returns the parent input type for the current input position.
|
|
264
|
+
* @returns The parent input type, if known.
|
|
265
|
+
* @example
|
|
266
|
+
* ```ts
|
|
267
|
+
* import { parse, visit } from 'graphql/language';
|
|
268
|
+
* import { buildSchema, TypeInfo, visitWithTypeInfo } from 'graphql/utilities';
|
|
269
|
+
*
|
|
270
|
+
* const schema = buildSchema(`
|
|
271
|
+
* input ReviewFilter {
|
|
272
|
+
* stars: Int!
|
|
273
|
+
* }
|
|
274
|
+
*
|
|
275
|
+
* type Query {
|
|
276
|
+
* reviews(filter: ReviewFilter): [String]
|
|
277
|
+
* }
|
|
278
|
+
* `);
|
|
279
|
+
* const typeInfo = new TypeInfo(schema);
|
|
280
|
+
* const parentInputTypes = {};
|
|
281
|
+
*
|
|
282
|
+
* visit(
|
|
283
|
+
* parse('{ reviews(filter: { stars: 5 }) }'),
|
|
284
|
+
* visitWithTypeInfo(typeInfo, {
|
|
285
|
+
* ObjectField: (node) => {
|
|
286
|
+
* parentInputTypes[node.name.value] = String(typeInfo.getParentInputType());
|
|
287
|
+
* },
|
|
288
|
+
* }),
|
|
289
|
+
* );
|
|
290
|
+
*
|
|
291
|
+
* parentInputTypes; // => { stars: 'ReviewFilter' }
|
|
292
|
+
* ```
|
|
293
|
+
*/
|
|
87
294
|
|
|
88
295
|
getParentInputType() {
|
|
89
296
|
if (this._inputTypeStack.length > 1) {
|
|
90
297
|
return this._inputTypeStack[this._inputTypeStack.length - 2];
|
|
91
298
|
}
|
|
92
299
|
}
|
|
300
|
+
/**
|
|
301
|
+
* Returns the current field definition.
|
|
302
|
+
* @returns The current field definition, if known.
|
|
303
|
+
* @example
|
|
304
|
+
* ```ts
|
|
305
|
+
* import { parse, visit } from 'graphql/language';
|
|
306
|
+
* import { buildSchema, TypeInfo, visitWithTypeInfo } from 'graphql/utilities';
|
|
307
|
+
*
|
|
308
|
+
* const schema = buildSchema(`
|
|
309
|
+
* type Query {
|
|
310
|
+
* greeting: String
|
|
311
|
+
* }
|
|
312
|
+
* `);
|
|
313
|
+
* const typeInfo = new TypeInfo(schema);
|
|
314
|
+
* let fieldName;
|
|
315
|
+
*
|
|
316
|
+
* visit(
|
|
317
|
+
* parse('{ greeting }'),
|
|
318
|
+
* visitWithTypeInfo(typeInfo, {
|
|
319
|
+
* Field: () => {
|
|
320
|
+
* fieldName = typeInfo.getFieldDef()?.name;
|
|
321
|
+
* },
|
|
322
|
+
* }),
|
|
323
|
+
* );
|
|
324
|
+
*
|
|
325
|
+
* fieldName; // => 'greeting'
|
|
326
|
+
* ```
|
|
327
|
+
*/
|
|
93
328
|
|
|
94
329
|
getFieldDef() {
|
|
95
330
|
if (this._fieldDefStack.length > 0) {
|
|
96
331
|
return this._fieldDefStack[this._fieldDefStack.length - 1];
|
|
97
332
|
}
|
|
98
333
|
}
|
|
334
|
+
/**
|
|
335
|
+
* Returns the default value for the current input position.
|
|
336
|
+
* @returns The current default value, if one is available.
|
|
337
|
+
* @example
|
|
338
|
+
* ```ts
|
|
339
|
+
* import { parse, visit } from 'graphql/language';
|
|
340
|
+
* import { buildSchema, TypeInfo, visitWithTypeInfo } from 'graphql/utilities';
|
|
341
|
+
*
|
|
342
|
+
* const schema = buildSchema(`
|
|
343
|
+
* type Query {
|
|
344
|
+
* reviews(limit: Int = 10): [String]
|
|
345
|
+
* }
|
|
346
|
+
* `);
|
|
347
|
+
* const typeInfo = new TypeInfo(schema);
|
|
348
|
+
* let defaultLimit;
|
|
349
|
+
*
|
|
350
|
+
* visit(
|
|
351
|
+
* parse('{ reviews(limit: 5) }'),
|
|
352
|
+
* visitWithTypeInfo(typeInfo, {
|
|
353
|
+
* Argument: () => {
|
|
354
|
+
* defaultLimit = typeInfo.getDefaultValue();
|
|
355
|
+
* },
|
|
356
|
+
* }),
|
|
357
|
+
* );
|
|
358
|
+
*
|
|
359
|
+
* defaultLimit; // => 10
|
|
360
|
+
* ```
|
|
361
|
+
*/
|
|
99
362
|
|
|
100
363
|
getDefaultValue() {
|
|
101
364
|
if (this._defaultValueStack.length > 0) {
|
|
102
365
|
return this._defaultValueStack[this._defaultValueStack.length - 1];
|
|
103
366
|
}
|
|
104
367
|
}
|
|
368
|
+
/**
|
|
369
|
+
* Returns the current directive definition.
|
|
370
|
+
* @returns The current directive definition, if known.
|
|
371
|
+
* @example
|
|
372
|
+
* ```ts
|
|
373
|
+
* import { parse, visit } from 'graphql/language';
|
|
374
|
+
* import { buildSchema, TypeInfo, visitWithTypeInfo } from 'graphql/utilities';
|
|
375
|
+
*
|
|
376
|
+
* const schema = buildSchema(`
|
|
377
|
+
* type Query {
|
|
378
|
+
* greeting: String
|
|
379
|
+
* }
|
|
380
|
+
* `);
|
|
381
|
+
* const typeInfo = new TypeInfo(schema);
|
|
382
|
+
* let directiveName;
|
|
383
|
+
*
|
|
384
|
+
* visit(
|
|
385
|
+
* parse('{ greeting @include(if: true) }'),
|
|
386
|
+
* visitWithTypeInfo(typeInfo, {
|
|
387
|
+
* Directive: () => {
|
|
388
|
+
* directiveName = typeInfo.getDirective()?.name;
|
|
389
|
+
* },
|
|
390
|
+
* }),
|
|
391
|
+
* );
|
|
392
|
+
*
|
|
393
|
+
* directiveName; // => 'include'
|
|
394
|
+
* ```
|
|
395
|
+
*/
|
|
105
396
|
|
|
106
397
|
getDirective() {
|
|
107
398
|
return this._directive;
|
|
108
399
|
}
|
|
400
|
+
/**
|
|
401
|
+
* Returns the current argument definition.
|
|
402
|
+
* @returns The current argument definition, if known.
|
|
403
|
+
* @example
|
|
404
|
+
* ```ts
|
|
405
|
+
* import { parse, visit } from 'graphql/language';
|
|
406
|
+
* import { buildSchema, TypeInfo, visitWithTypeInfo } from 'graphql/utilities';
|
|
407
|
+
*
|
|
408
|
+
* const schema = buildSchema(`
|
|
409
|
+
* type Query {
|
|
410
|
+
* reviews(limit: Int = 10): [String]
|
|
411
|
+
* }
|
|
412
|
+
* `);
|
|
413
|
+
* const typeInfo = new TypeInfo(schema);
|
|
414
|
+
* let argumentName;
|
|
415
|
+
*
|
|
416
|
+
* visit(
|
|
417
|
+
* parse('{ reviews(limit: 5) }'),
|
|
418
|
+
* visitWithTypeInfo(typeInfo, {
|
|
419
|
+
* Argument: () => {
|
|
420
|
+
* argumentName = typeInfo.getArgument()?.name;
|
|
421
|
+
* },
|
|
422
|
+
* }),
|
|
423
|
+
* );
|
|
424
|
+
*
|
|
425
|
+
* argumentName; // => 'limit'
|
|
426
|
+
* ```
|
|
427
|
+
*/
|
|
109
428
|
|
|
110
429
|
getArgument() {
|
|
111
430
|
return this._argument;
|
|
112
431
|
}
|
|
432
|
+
/**
|
|
433
|
+
* Returns the current enum value definition.
|
|
434
|
+
* @returns The current enum value definition, if known.
|
|
435
|
+
* @example
|
|
436
|
+
* ```ts
|
|
437
|
+
* import { parse, visit } from 'graphql/language';
|
|
438
|
+
* import { buildSchema, TypeInfo, visitWithTypeInfo } from 'graphql/utilities';
|
|
439
|
+
*
|
|
440
|
+
* const schema = buildSchema(`
|
|
441
|
+
* enum Sort {
|
|
442
|
+
* NEWEST
|
|
443
|
+
* OLDEST
|
|
444
|
+
* }
|
|
445
|
+
*
|
|
446
|
+
* type Query {
|
|
447
|
+
* reviews(sort: Sort = NEWEST): [String]
|
|
448
|
+
* }
|
|
449
|
+
* `);
|
|
450
|
+
* const typeInfo = new TypeInfo(schema);
|
|
451
|
+
* let enumValueName;
|
|
452
|
+
*
|
|
453
|
+
* visit(
|
|
454
|
+
* parse('{ reviews(sort: OLDEST) }'),
|
|
455
|
+
* visitWithTypeInfo(typeInfo, {
|
|
456
|
+
* EnumValue: () => {
|
|
457
|
+
* enumValueName = typeInfo.getEnumValue()?.name;
|
|
458
|
+
* },
|
|
459
|
+
* }),
|
|
460
|
+
* );
|
|
461
|
+
*
|
|
462
|
+
* enumValueName; // => 'OLDEST'
|
|
463
|
+
* ```
|
|
464
|
+
*/
|
|
113
465
|
|
|
114
466
|
getEnumValue() {
|
|
115
467
|
return this._enumValue;
|
|
116
468
|
}
|
|
469
|
+
/**
|
|
470
|
+
* Updates this TypeInfo instance for an entered AST node.
|
|
471
|
+
* @param node - AST node being entered.
|
|
472
|
+
* @returns Nothing.
|
|
473
|
+
* @example
|
|
474
|
+
* ```ts
|
|
475
|
+
* import { Kind, parse } from 'graphql/language';
|
|
476
|
+
* import { buildSchema, TypeInfo } from 'graphql/utilities';
|
|
477
|
+
*
|
|
478
|
+
* const schema = buildSchema(`
|
|
479
|
+
* type Query {
|
|
480
|
+
* greeting: String
|
|
481
|
+
* }
|
|
482
|
+
* `);
|
|
483
|
+
* const document = parse('{ greeting }');
|
|
484
|
+
* const operation = document.definitions[0];
|
|
485
|
+
* const selectionSet = operation.selectionSet;
|
|
486
|
+
* const field = selectionSet.selections[0];
|
|
487
|
+
* const typeInfo = new TypeInfo(schema);
|
|
488
|
+
*
|
|
489
|
+
* typeInfo.enter(operation);
|
|
490
|
+
* typeInfo.enter(selectionSet);
|
|
491
|
+
* typeInfo.enter(field);
|
|
492
|
+
*
|
|
493
|
+
* field.kind; // => Kind.FIELD
|
|
494
|
+
* typeInfo.getParentType()?.name; // => 'Query'
|
|
495
|
+
* String(typeInfo.getType()); // => 'String'
|
|
496
|
+
* ```
|
|
497
|
+
*/
|
|
117
498
|
|
|
118
499
|
enter(node) {
|
|
119
500
|
const schema = this._schema; // Note: many of the types below are explicitly typed as "unknown" to drop
|
|
@@ -280,6 +661,35 @@ class TypeInfo {
|
|
|
280
661
|
default: // Ignore other nodes
|
|
281
662
|
}
|
|
282
663
|
}
|
|
664
|
+
/**
|
|
665
|
+
* Updates this TypeInfo instance for a left AST node.
|
|
666
|
+
* @param node - AST node being entered.
|
|
667
|
+
* @returns Nothing.
|
|
668
|
+
* @example
|
|
669
|
+
* ```ts
|
|
670
|
+
* import { parse } from 'graphql/language';
|
|
671
|
+
* import { buildSchema, TypeInfo } from 'graphql/utilities';
|
|
672
|
+
*
|
|
673
|
+
* const schema = buildSchema(`
|
|
674
|
+
* type Query {
|
|
675
|
+
* greeting: String
|
|
676
|
+
* }
|
|
677
|
+
* `);
|
|
678
|
+
* const document = parse('{ greeting }');
|
|
679
|
+
* const operation = document.definitions[0];
|
|
680
|
+
* const selectionSet = operation.selectionSet;
|
|
681
|
+
* const field = selectionSet.selections[0];
|
|
682
|
+
* const typeInfo = new TypeInfo(schema);
|
|
683
|
+
*
|
|
684
|
+
* typeInfo.enter(operation);
|
|
685
|
+
* typeInfo.enter(selectionSet);
|
|
686
|
+
* typeInfo.enter(field);
|
|
687
|
+
* String(typeInfo.getType()); // => 'String'
|
|
688
|
+
*
|
|
689
|
+
* typeInfo.leave(field);
|
|
690
|
+
* typeInfo.getType(); // => undefined
|
|
691
|
+
* ```
|
|
692
|
+
*/
|
|
283
693
|
|
|
284
694
|
leave(node) {
|
|
285
695
|
switch (node.kind) {
|
|
@@ -343,6 +753,8 @@ exports.TypeInfo = TypeInfo;
|
|
|
343
753
|
* Not exactly the same as the executor's definition of getFieldDef, in this
|
|
344
754
|
* statically evaluated environment we do not always have an Object type,
|
|
345
755
|
* and need to handle Interface and Union types.
|
|
756
|
+
*
|
|
757
|
+
* @internal
|
|
346
758
|
*/
|
|
347
759
|
function getFieldDef(schema, parentType, fieldNode) {
|
|
348
760
|
const name = fieldNode.name.value;
|
|
@@ -378,6 +790,37 @@ function getFieldDef(schema, parentType, fieldNode) {
|
|
|
378
790
|
/**
|
|
379
791
|
* Creates a new visitor instance which maintains a provided TypeInfo instance
|
|
380
792
|
* along with visiting visitor.
|
|
793
|
+
* @param typeInfo - TypeInfo instance to update during traversal.
|
|
794
|
+
* @param visitor - Visitor callbacks to wrap with TypeInfo updates.
|
|
795
|
+
* @returns A visitor that keeps TypeInfo in sync while delegating callbacks.
|
|
796
|
+
* @example
|
|
797
|
+
* ```ts
|
|
798
|
+
* import { parse, visit } from 'graphql/language';
|
|
799
|
+
* import { buildSchema, TypeInfo, visitWithTypeInfo } from 'graphql/utilities';
|
|
800
|
+
*
|
|
801
|
+
* const schema = buildSchema(`
|
|
802
|
+
* type Query {
|
|
803
|
+
* greeting: String
|
|
804
|
+
* }
|
|
805
|
+
* `);
|
|
806
|
+
* const typeInfo = new TypeInfo(schema);
|
|
807
|
+
* const fields = [];
|
|
808
|
+
*
|
|
809
|
+
* visit(
|
|
810
|
+
* parse('{ greeting }'),
|
|
811
|
+
* visitWithTypeInfo(typeInfo, {
|
|
812
|
+
* Field: (node) => {
|
|
813
|
+
* fields.push({
|
|
814
|
+
* name: node.name.value,
|
|
815
|
+
* parentType: String(typeInfo.getParentType()),
|
|
816
|
+
* type: String(typeInfo.getType()),
|
|
817
|
+
* });
|
|
818
|
+
* },
|
|
819
|
+
* }),
|
|
820
|
+
* );
|
|
821
|
+
*
|
|
822
|
+
* fields; // => [{ name: 'greeting', parentType: 'Query', type: 'String' }]
|
|
823
|
+
* ```
|
|
381
824
|
*/
|
|
382
825
|
|
|
383
826
|
function visitWithTypeInfo(typeInfo, visitor) {
|