graphql 14.1.1 → 14.3.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/LICENSE +1 -1
- package/README.md +1 -1
- package/error/GraphQLError.js +12 -10
- package/error/GraphQLError.js.flow +11 -6
- package/error/GraphQLError.mjs +20 -3
- package/error/formatError.js +2 -2
- package/error/formatError.js.flow +3 -3
- package/error/formatError.mjs +2 -2
- package/error/index.js +1 -1
- package/error/index.js.flow +5 -2
- package/error/index.mjs +2 -2
- package/error/locatedError.js +2 -2
- package/error/locatedError.js.flow +2 -2
- package/error/locatedError.mjs +2 -2
- package/error/printError.js +2 -2
- package/error/printError.js.flow +4 -5
- package/error/printError.mjs +2 -2
- package/error/syntaxError.js +2 -2
- package/error/syntaxError.js.flow +2 -2
- package/error/syntaxError.mjs +2 -2
- package/execution/execute.js +52 -37
- package/execution/execute.js.flow +66 -51
- package/execution/execute.mjs +50 -38
- package/execution/index.js +7 -1
- package/execution/index.js.flow +9 -4
- package/execution/index.mjs +3 -3
- package/execution/values.js +11 -11
- package/execution/values.js.flow +23 -19
- package/execution/values.mjs +11 -11
- package/graphql.js +13 -9
- package/graphql.js.flow +28 -10
- package/graphql.mjs +10 -9
- package/index.js +83 -53
- package/index.js.flow +60 -47
- package/index.mjs +26 -23
- package/jsutils/ObjMap.js +1 -1
- package/jsutils/ObjMap.js.flow +1 -1
- package/jsutils/ObjMap.mjs +1 -0
- package/jsutils/PromiseOrValue.js +1 -0
- package/jsutils/{MaybePromise.js.flow → PromiseOrValue.js.flow} +2 -2
- package/jsutils/PromiseOrValue.mjs +1 -0
- package/jsutils/dedent.js +2 -2
- package/jsutils/dedent.js.flow +1 -1
- package/jsutils/dedent.mjs +2 -2
- package/jsutils/defineToJSON.js +2 -2
- package/jsutils/defineToJSON.js.flow +1 -1
- package/jsutils/defineToJSON.mjs +2 -2
- package/jsutils/defineToStringTag.js +2 -2
- package/jsutils/defineToStringTag.js.flow +1 -1
- package/jsutils/defineToStringTag.mjs +2 -2
- package/jsutils/inspect.js +94 -19
- package/jsutils/inspect.js.flow +98 -20
- package/jsutils/inspect.mjs +94 -20
- package/jsutils/instanceOf.js +2 -2
- package/jsutils/instanceOf.js.flow +1 -1
- package/jsutils/instanceOf.mjs +2 -2
- package/jsutils/invariant.js +5 -3
- package/jsutils/invariant.js.flow +3 -2
- package/jsutils/invariant.mjs +5 -3
- package/jsutils/isInvalid.js +2 -2
- package/jsutils/isInvalid.js.flow +1 -1
- package/jsutils/isInvalid.mjs +2 -2
- package/jsutils/isNullish.js +2 -2
- package/jsutils/isNullish.js.flow +1 -1
- package/jsutils/isNullish.mjs +2 -2
- package/jsutils/isPromise.js +2 -2
- package/jsutils/isPromise.js.flow +1 -1
- package/jsutils/isPromise.mjs +2 -2
- package/jsutils/keyMap.js +4 -3
- package/jsutils/keyMap.js.flow +6 -6
- package/jsutils/keyMap.mjs +4 -3
- package/jsutils/keyValMap.js +4 -3
- package/jsutils/keyValMap.js.flow +6 -6
- package/jsutils/keyValMap.mjs +4 -3
- package/jsutils/mapValue.js +2 -2
- package/jsutils/mapValue.js.flow +2 -2
- package/jsutils/mapValue.mjs +2 -2
- package/jsutils/memoize3.js +3 -3
- package/jsutils/memoize3.js.flow +2 -2
- package/jsutils/memoize3.mjs +3 -3
- package/jsutils/nodejsCustomInspectSymbol.js +2 -2
- package/jsutils/nodejsCustomInspectSymbol.js.flow +1 -1
- package/jsutils/nodejsCustomInspectSymbol.mjs +2 -2
- package/jsutils/orList.js +2 -2
- package/jsutils/orList.js.flow +1 -1
- package/jsutils/orList.mjs +2 -2
- package/jsutils/promiseForObject.js +2 -2
- package/jsutils/promiseForObject.js.flow +2 -2
- package/jsutils/promiseForObject.mjs +2 -2
- package/jsutils/promiseReduce.js +2 -2
- package/jsutils/promiseReduce.js.flow +5 -5
- package/jsutils/promiseReduce.mjs +2 -2
- package/jsutils/quotedOrList.js +2 -2
- package/jsutils/quotedOrList.js.flow +1 -1
- package/jsutils/quotedOrList.mjs +2 -2
- package/jsutils/suggestionList.js +2 -2
- package/jsutils/suggestionList.js.flow +1 -1
- package/jsutils/suggestionList.mjs +2 -2
- package/language/ast.js +1 -1
- package/language/ast.js.flow +3 -3
- package/language/ast.mjs +1 -0
- package/language/blockString.js +114 -0
- package/language/blockString.js.flow +102 -0
- package/language/blockString.mjs +104 -0
- package/language/directiveLocation.js +2 -2
- package/language/directiveLocation.js.flow +1 -1
- package/language/directiveLocation.mjs +2 -2
- package/language/index.js +9 -9
- package/language/index.js.flow +10 -5
- package/language/index.mjs +3 -3
- package/language/kinds.js +2 -2
- package/language/kinds.js.flow +1 -1
- package/language/kinds.mjs +2 -2
- package/language/lexer.js +52 -44
- package/language/lexer.js.flow +65 -54
- package/language/lexer.mjs +49 -43
- package/language/location.js +2 -2
- package/language/location.js.flow +2 -2
- package/language/location.mjs +2 -2
- package/language/parser.js +75 -67
- package/language/parser.js.flow +138 -127
- package/language/parser.mjs +76 -68
- package/language/predicates.js +2 -2
- package/language/predicates.js.flow +2 -2
- package/language/predicates.mjs +2 -2
- package/language/printer.js +6 -14
- package/language/printer.js.flow +8 -17
- package/language/printer.mjs +5 -14
- package/language/source.js +2 -2
- package/language/source.js.flow +1 -1
- package/language/source.mjs +2 -2
- package/language/visitor.js +4 -6
- package/language/visitor.js.flow +3 -3
- package/language/visitor.mjs +4 -6
- package/package.json +1 -1
- package/polyfills/find.js +2 -2
- package/polyfills/find.js.flow +1 -1
- package/polyfills/find.mjs +2 -2
- package/polyfills/flatMap.js +38 -0
- package/polyfills/flatMap.js.flow +34 -0
- package/polyfills/flatMap.mjs +30 -0
- package/polyfills/isFinite.js +2 -2
- package/polyfills/isFinite.js.flow +1 -1
- package/polyfills/isFinite.mjs +2 -2
- package/polyfills/isInteger.js +2 -2
- package/polyfills/isInteger.js.flow +1 -1
- package/polyfills/isInteger.mjs +2 -2
- package/polyfills/objectEntries.js +2 -2
- package/polyfills/objectEntries.js.flow +2 -2
- package/polyfills/objectEntries.mjs +2 -2
- package/polyfills/objectValues.js +2 -2
- package/polyfills/objectValues.js.flow +2 -2
- package/polyfills/objectValues.mjs +2 -2
- package/subscription/asyncIteratorReject.js +1 -1
- package/subscription/asyncIteratorReject.js.flow +1 -1
- package/subscription/asyncIteratorReject.mjs +2 -2
- package/subscription/index.js +1 -1
- package/subscription/index.js.flow +1 -1
- package/subscription/index.mjs +2 -2
- package/subscription/mapAsyncIterator.js +1 -1
- package/subscription/mapAsyncIterator.js.flow +5 -5
- package/subscription/mapAsyncIterator.mjs +2 -2
- package/subscription/subscribe.js +2 -2
- package/subscription/subscribe.js.flow +6 -6
- package/subscription/subscribe.mjs +2 -2
- package/type/definition.js +138 -22
- package/type/definition.js.flow +184 -36
- package/type/definition.mjs +136 -23
- package/type/directives.js +14 -3
- package/type/directives.js.flow +24 -11
- package/type/directives.mjs +16 -5
- package/type/index.js +7 -7
- package/type/index.js.flow +8 -4
- package/type/index.mjs +10 -6
- package/type/introspection.js +14 -9
- package/type/introspection.js.flow +12 -18
- package/type/introspection.mjs +14 -9
- package/type/scalars.js +5 -4
- package/type/scalars.js.flow +4 -10
- package/type/scalars.mjs +7 -6
- package/type/schema.js +55 -3
- package/type/schema.js.flow +73 -17
- package/type/schema.mjs +56 -4
- package/type/validate.js +19 -47
- package/type/validate.js.flow +17 -29
- package/type/validate.mjs +18 -47
- package/utilities/TypeInfo.js +93 -73
- package/utilities/TypeInfo.js.flow +30 -23
- package/utilities/TypeInfo.mjs +93 -73
- package/utilities/assertValidName.js +2 -2
- package/utilities/assertValidName.js.flow +2 -2
- package/utilities/assertValidName.mjs +2 -2
- package/utilities/astFromValue.js +5 -4
- package/utilities/astFromValue.js.flow +8 -7
- package/utilities/astFromValue.mjs +7 -6
- package/utilities/buildASTSchema.js +63 -62
- package/utilities/buildASTSchema.js.flow +92 -108
- package/utilities/buildASTSchema.mjs +61 -62
- package/utilities/buildClientSchema.js +38 -45
- package/utilities/buildClientSchema.js.flow +66 -79
- package/utilities/buildClientSchema.mjs +37 -44
- package/utilities/coerceValue.js +6 -7
- package/utilities/coerceValue.js.flow +5 -4
- package/utilities/coerceValue.mjs +7 -8
- package/utilities/concatAST.js +9 -13
- package/utilities/concatAST.js.flow +4 -10
- package/utilities/concatAST.mjs +6 -13
- package/utilities/extendSchema.js +219 -511
- package/utilities/extendSchema.js.flow +195 -304
- package/utilities/extendSchema.mjs +218 -512
- package/utilities/findBreakingChanges.js +54 -95
- package/utilities/findBreakingChanges.js.flow +49 -47
- package/utilities/findBreakingChanges.mjs +80 -95
- package/utilities/findDeprecatedUsages.js +4 -4
- package/utilities/findDeprecatedUsages.js.flow +5 -5
- package/utilities/findDeprecatedUsages.mjs +4 -4
- package/utilities/getOperationAST.js +2 -2
- package/utilities/getOperationAST.js.flow +5 -2
- package/utilities/getOperationAST.mjs +2 -2
- package/utilities/getOperationRootType.js +24 -24
- package/utilities/getOperationRootType.js.flow +40 -35
- package/utilities/getOperationRootType.mjs +24 -24
- package/utilities/index.js +9 -1
- package/utilities/index.js.flow +13 -6
- package/utilities/index.mjs +13 -8
- package/utilities/introspectionFromSchema.js +6 -4
- package/utilities/introspectionFromSchema.js.flow +8 -7
- package/utilities/introspectionFromSchema.mjs +6 -5
- package/utilities/introspectionQuery.js +2 -2
- package/utilities/introspectionQuery.js.flow +2 -2
- package/utilities/introspectionQuery.mjs +2 -2
- package/utilities/isValidJSValue.js +4 -2
- package/utilities/isValidJSValue.js.flow +3 -2
- package/utilities/isValidJSValue.mjs +4 -2
- package/utilities/isValidLiteralValue.js +2 -2
- package/utilities/isValidLiteralValue.js.flow +4 -4
- package/utilities/isValidLiteralValue.mjs +2 -2
- package/utilities/lexicographicSortSchema.js +84 -123
- package/utilities/lexicographicSortSchema.js.flow +68 -96
- package/utilities/lexicographicSortSchema.mjs +84 -123
- package/utilities/schemaPrinter.js +47 -73
- package/utilities/schemaPrinter.js.flow +69 -120
- package/utilities/schemaPrinter.mjs +45 -72
- package/utilities/separateOperations.js +8 -12
- package/utilities/separateOperations.js.flow +6 -3
- package/utilities/separateOperations.mjs +8 -12
- package/utilities/stripIgnoredCharacters.js +140 -0
- package/utilities/stripIgnoredCharacters.js.flow +129 -0
- package/utilities/stripIgnoredCharacters.mjs +127 -0
- package/utilities/typeComparators.js +2 -2
- package/utilities/typeComparators.js.flow +4 -3
- package/utilities/typeComparators.mjs +2 -2
- package/utilities/typeFromAST.js +9 -4
- package/utilities/typeFromAST.js.flow +15 -9
- package/utilities/typeFromAST.mjs +6 -4
- package/utilities/valueFromAST.js +7 -4
- package/utilities/valueFromAST.js.flow +7 -5
- package/utilities/valueFromAST.mjs +6 -4
- package/utilities/valueFromASTUntyped.js +11 -6
- package/utilities/valueFromASTUntyped.js.flow +9 -5
- package/utilities/valueFromASTUntyped.mjs +10 -6
- package/validation/ValidationContext.js +1 -1
- package/validation/ValidationContext.js.flow +19 -20
- package/validation/ValidationContext.mjs +2 -2
- package/validation/index.js +1 -1
- package/validation/index.js.flow +2 -1
- package/validation/index.mjs +3 -2
- package/validation/rules/ExecutableDefinitions.js +3 -3
- package/validation/rules/ExecutableDefinitions.js.flow +4 -4
- package/validation/rules/ExecutableDefinitions.mjs +3 -3
- package/validation/rules/FieldsOnCorrectType.js +3 -3
- package/validation/rules/FieldsOnCorrectType.js.flow +7 -7
- package/validation/rules/FieldsOnCorrectType.mjs +3 -3
- package/validation/rules/FragmentsOnCompositeTypes.js +4 -4
- package/validation/rules/FragmentsOnCompositeTypes.js.flow +5 -5
- package/validation/rules/FragmentsOnCompositeTypes.mjs +4 -4
- package/validation/rules/KnownArgumentNames.js +1 -1
- package/validation/rules/KnownArgumentNames.js.flow +5 -5
- package/validation/rules/KnownArgumentNames.mjs +2 -2
- package/validation/rules/KnownDirectives.js +8 -6
- package/validation/rules/KnownDirectives.js.flow +11 -9
- package/validation/rules/KnownDirectives.mjs +8 -6
- package/validation/rules/KnownFragmentNames.js +3 -3
- package/validation/rules/KnownFragmentNames.js.flow +4 -4
- package/validation/rules/KnownFragmentNames.mjs +3 -3
- package/validation/rules/KnownTypeNames.js +2 -2
- package/validation/rules/KnownTypeNames.js.flow +6 -6
- package/validation/rules/KnownTypeNames.mjs +2 -2
- package/validation/rules/LoneAnonymousOperation.js +3 -3
- package/validation/rules/LoneAnonymousOperation.js.flow +4 -4
- package/validation/rules/LoneAnonymousOperation.mjs +3 -3
- package/validation/rules/LoneSchemaDefinition.js +2 -2
- package/validation/rules/LoneSchemaDefinition.js.flow +3 -3
- package/validation/rules/LoneSchemaDefinition.mjs +2 -2
- package/validation/rules/NoFragmentCycles.js +2 -2
- package/validation/rules/NoFragmentCycles.js.flow +4 -4
- package/validation/rules/NoFragmentCycles.mjs +2 -2
- package/validation/rules/NoUndefinedVariables.js +2 -2
- package/validation/rules/NoUndefinedVariables.js.flow +3 -3
- package/validation/rules/NoUndefinedVariables.mjs +2 -2
- package/validation/rules/NoUnusedFragments.js +7 -7
- package/validation/rules/NoUnusedFragments.js.flow +4 -4
- package/validation/rules/NoUnusedFragments.mjs +7 -7
- package/validation/rules/NoUnusedVariables.js +5 -5
- package/validation/rules/NoUnusedVariables.js.flow +6 -5
- package/validation/rules/NoUnusedVariables.mjs +5 -5
- package/validation/rules/OverlappingFieldsCanBeMerged.js +26 -23
- package/validation/rules/OverlappingFieldsCanBeMerged.js.flow +17 -17
- package/validation/rules/OverlappingFieldsCanBeMerged.mjs +26 -23
- package/validation/rules/PossibleFragmentSpreads.js +4 -4
- package/validation/rules/PossibleFragmentSpreads.js.flow +5 -5
- package/validation/rules/PossibleFragmentSpreads.mjs +4 -4
- package/validation/rules/PossibleTypeExtensions.js +3 -3
- package/validation/rules/PossibleTypeExtensions.js.flow +5 -5
- package/validation/rules/PossibleTypeExtensions.mjs +4 -4
- package/validation/rules/ProvidedRequiredArguments.js +6 -8
- package/validation/rules/ProvidedRequiredArguments.js.flow +8 -8
- package/validation/rules/ProvidedRequiredArguments.mjs +7 -9
- package/validation/rules/ScalarLeafs.js +4 -4
- package/validation/rules/ScalarLeafs.js.flow +6 -6
- package/validation/rules/ScalarLeafs.mjs +4 -4
- package/validation/rules/SingleFieldSubscriptions.js +2 -2
- package/validation/rules/SingleFieldSubscriptions.js.flow +4 -4
- package/validation/rules/SingleFieldSubscriptions.mjs +2 -2
- package/validation/rules/UniqueArgumentNames.js +2 -2
- package/validation/rules/UniqueArgumentNames.js.flow +3 -3
- package/validation/rules/UniqueArgumentNames.mjs +2 -2
- package/validation/rules/UniqueDirectiveNames.js +2 -2
- package/validation/rules/UniqueDirectiveNames.js.flow +3 -3
- package/validation/rules/UniqueDirectiveNames.mjs +2 -2
- package/validation/rules/UniqueDirectivesPerLocation.js +3 -2
- package/validation/rules/UniqueDirectivesPerLocation.js.flow +4 -4
- package/validation/rules/UniqueDirectivesPerLocation.mjs +3 -2
- package/validation/rules/UniqueEnumValueNames.js +4 -8
- package/validation/rules/UniqueEnumValueNames.js.flow +6 -8
- package/validation/rules/UniqueEnumValueNames.mjs +4 -8
- package/validation/rules/UniqueFieldDefinitionNames.js +4 -8
- package/validation/rules/UniqueFieldDefinitionNames.js.flow +6 -8
- package/validation/rules/UniqueFieldDefinitionNames.mjs +4 -8
- package/validation/rules/UniqueFragmentNames.js +2 -2
- package/validation/rules/UniqueFragmentNames.js.flow +3 -3
- package/validation/rules/UniqueFragmentNames.mjs +2 -2
- package/validation/rules/UniqueInputFieldNames.js +2 -4
- package/validation/rules/UniqueInputFieldNames.js.flow +3 -4
- package/validation/rules/UniqueInputFieldNames.mjs +2 -4
- package/validation/rules/UniqueOperationNames.js +2 -2
- package/validation/rules/UniqueOperationNames.js.flow +3 -3
- package/validation/rules/UniqueOperationNames.mjs +2 -2
- package/validation/rules/UniqueOperationTypes.js +2 -2
- package/validation/rules/UniqueOperationTypes.js.flow +3 -3
- package/validation/rules/UniqueOperationTypes.mjs +2 -2
- package/validation/rules/UniqueTypeNames.js +2 -2
- package/validation/rules/UniqueTypeNames.js.flow +4 -4
- package/validation/rules/UniqueTypeNames.mjs +2 -2
- package/validation/rules/UniqueVariableNames.js +2 -2
- package/validation/rules/UniqueVariableNames.js.flow +4 -4
- package/validation/rules/UniqueVariableNames.mjs +2 -2
- package/validation/rules/ValuesOfCorrectType.js +2 -2
- package/validation/rules/ValuesOfCorrectType.js.flow +5 -5
- package/validation/rules/ValuesOfCorrectType.mjs +2 -2
- package/validation/rules/VariablesAreInputTypes.js +3 -3
- package/validation/rules/VariablesAreInputTypes.js.flow +5 -5
- package/validation/rules/VariablesAreInputTypes.mjs +3 -3
- package/validation/rules/VariablesInAllowedPosition.js +3 -3
- package/validation/rules/VariablesInAllowedPosition.js.flow +7 -8
- package/validation/rules/VariablesInAllowedPosition.mjs +3 -3
- package/validation/specifiedRules.js +2 -2
- package/validation/specifiedRules.js.flow +13 -6
- package/validation/specifiedRules.mjs +7 -7
- package/validation/validate.js +2 -2
- package/validation/validate.js.flow +10 -6
- package/validation/validate.mjs +2 -2
- package/jsutils/MaybePromise.js +0 -1
- package/jsutils/MaybePromise.mjs +0 -0
- package/language/blockStringValue.js +0 -73
- package/language/blockStringValue.js.flow +0 -64
- package/language/blockStringValue.mjs +0 -66
package/language/parser.js.flow
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Copyright (c)
|
|
2
|
+
* Copyright (c) Facebook, Inc. and its affiliates.
|
|
3
3
|
*
|
|
4
4
|
* This source code is licensed under the MIT license found in the
|
|
5
5
|
* LICENSE file in the root directory of this source tree.
|
|
@@ -10,59 +10,63 @@
|
|
|
10
10
|
import inspect from '../jsutils/inspect';
|
|
11
11
|
import defineToJSON from '../jsutils/defineToJSON';
|
|
12
12
|
import { Source } from './source';
|
|
13
|
-
import { syntaxError } from '../error';
|
|
14
|
-
import
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
13
|
+
import { type GraphQLError, syntaxError } from '../error';
|
|
14
|
+
import {
|
|
15
|
+
type Lexer,
|
|
16
|
+
type TokenKindEnum,
|
|
17
|
+
TokenKind,
|
|
18
|
+
getTokenDesc,
|
|
19
|
+
createLexer,
|
|
20
|
+
} from './lexer';
|
|
21
|
+
import {
|
|
22
|
+
type Location,
|
|
23
|
+
type Token,
|
|
24
|
+
type NameNode,
|
|
25
|
+
type VariableNode,
|
|
26
|
+
type DocumentNode,
|
|
27
|
+
type DefinitionNode,
|
|
28
|
+
type ExecutableDefinitionNode,
|
|
29
|
+
type OperationDefinitionNode,
|
|
30
|
+
type OperationTypeNode,
|
|
31
|
+
type VariableDefinitionNode,
|
|
32
|
+
type SelectionSetNode,
|
|
33
|
+
type SelectionNode,
|
|
34
|
+
type FieldNode,
|
|
35
|
+
type ArgumentNode,
|
|
36
|
+
type FragmentSpreadNode,
|
|
37
|
+
type InlineFragmentNode,
|
|
38
|
+
type FragmentDefinitionNode,
|
|
39
|
+
type ValueNode,
|
|
40
|
+
type StringValueNode,
|
|
41
|
+
type ListValueNode,
|
|
42
|
+
type ObjectValueNode,
|
|
43
|
+
type ObjectFieldNode,
|
|
44
|
+
type DirectiveNode,
|
|
45
|
+
type TypeNode,
|
|
46
|
+
type NamedTypeNode,
|
|
47
|
+
type ListTypeNode,
|
|
48
|
+
type NonNullTypeNode,
|
|
49
|
+
type TypeSystemDefinitionNode,
|
|
50
|
+
type SchemaDefinitionNode,
|
|
51
|
+
type OperationTypeDefinitionNode,
|
|
52
|
+
type ScalarTypeDefinitionNode,
|
|
53
|
+
type ObjectTypeDefinitionNode,
|
|
54
|
+
type FieldDefinitionNode,
|
|
55
|
+
type InputValueDefinitionNode,
|
|
56
|
+
type InterfaceTypeDefinitionNode,
|
|
57
|
+
type UnionTypeDefinitionNode,
|
|
58
|
+
type EnumTypeDefinitionNode,
|
|
59
|
+
type EnumValueDefinitionNode,
|
|
60
|
+
type InputObjectTypeDefinitionNode,
|
|
61
|
+
type DirectiveDefinitionNode,
|
|
62
|
+
type TypeSystemExtensionNode,
|
|
63
|
+
type SchemaExtensionNode,
|
|
64
|
+
type ScalarTypeExtensionNode,
|
|
65
|
+
type ObjectTypeExtensionNode,
|
|
66
|
+
type InterfaceTypeExtensionNode,
|
|
67
|
+
type UnionTypeExtensionNode,
|
|
68
|
+
type EnumTypeExtensionNode,
|
|
69
|
+
type InputObjectTypeExtensionNode,
|
|
66
70
|
} from './ast';
|
|
67
71
|
|
|
68
72
|
import { Kind } from './kinds';
|
|
@@ -150,9 +154,9 @@ export function parseValue(
|
|
|
150
154
|
): ValueNode {
|
|
151
155
|
const sourceObj = typeof source === 'string' ? new Source(source) : source;
|
|
152
156
|
const lexer = createLexer(sourceObj, options || {});
|
|
153
|
-
|
|
157
|
+
expectToken(lexer, TokenKind.SOF);
|
|
154
158
|
const value = parseValueLiteral(lexer, false);
|
|
155
|
-
|
|
159
|
+
expectToken(lexer, TokenKind.EOF);
|
|
156
160
|
return value;
|
|
157
161
|
}
|
|
158
162
|
|
|
@@ -172,9 +176,9 @@ export function parseType(
|
|
|
172
176
|
): TypeNode {
|
|
173
177
|
const sourceObj = typeof source === 'string' ? new Source(source) : source;
|
|
174
178
|
const lexer = createLexer(sourceObj, options || {});
|
|
175
|
-
|
|
179
|
+
expectToken(lexer, TokenKind.SOF);
|
|
176
180
|
const type = parseTypeReference(lexer);
|
|
177
|
-
|
|
181
|
+
expectToken(lexer, TokenKind.EOF);
|
|
178
182
|
return type;
|
|
179
183
|
}
|
|
180
184
|
|
|
@@ -182,7 +186,7 @@ export function parseType(
|
|
|
182
186
|
* Converts a name lex token into a name parse node.
|
|
183
187
|
*/
|
|
184
188
|
function parseName(lexer: Lexer<*>): NameNode {
|
|
185
|
-
const token =
|
|
189
|
+
const token = expectToken(lexer, TokenKind.NAME);
|
|
186
190
|
return {
|
|
187
191
|
kind: Kind.NAME,
|
|
188
192
|
value: ((token.value: any): string),
|
|
@@ -302,7 +306,7 @@ function parseOperationDefinition(lexer: Lexer<*>): OperationDefinitionNode {
|
|
|
302
306
|
* OperationType : one of query mutation subscription
|
|
303
307
|
*/
|
|
304
308
|
function parseOperationType(lexer: Lexer<*>): OperationTypeNode {
|
|
305
|
-
const operationToken =
|
|
309
|
+
const operationToken = expectToken(lexer, TokenKind.NAME);
|
|
306
310
|
switch (operationToken.value) {
|
|
307
311
|
case 'query':
|
|
308
312
|
return 'query';
|
|
@@ -334,8 +338,8 @@ function parseVariableDefinition(lexer: Lexer<*>): VariableDefinitionNode {
|
|
|
334
338
|
return {
|
|
335
339
|
kind: Kind.VARIABLE_DEFINITION,
|
|
336
340
|
variable: parseVariable(lexer),
|
|
337
|
-
type: (
|
|
338
|
-
defaultValue:
|
|
341
|
+
type: (expectToken(lexer, TokenKind.COLON), parseTypeReference(lexer)),
|
|
342
|
+
defaultValue: expectOptionalToken(lexer, TokenKind.EQUALS)
|
|
339
343
|
? parseValueLiteral(lexer, true)
|
|
340
344
|
: undefined,
|
|
341
345
|
directives: parseDirectives(lexer, true),
|
|
@@ -348,7 +352,7 @@ function parseVariableDefinition(lexer: Lexer<*>): VariableDefinitionNode {
|
|
|
348
352
|
*/
|
|
349
353
|
function parseVariable(lexer: Lexer<*>): VariableNode {
|
|
350
354
|
const start = lexer.token;
|
|
351
|
-
|
|
355
|
+
expectToken(lexer, TokenKind.DOLLAR);
|
|
352
356
|
return {
|
|
353
357
|
kind: Kind.VARIABLE,
|
|
354
358
|
name: parseName(lexer),
|
|
@@ -396,7 +400,7 @@ function parseField(lexer: Lexer<*>): FieldNode {
|
|
|
396
400
|
const nameOrAlias = parseName(lexer);
|
|
397
401
|
let alias;
|
|
398
402
|
let name;
|
|
399
|
-
if (
|
|
403
|
+
if (expectOptionalToken(lexer, TokenKind.COLON)) {
|
|
400
404
|
alias = nameOrAlias;
|
|
401
405
|
name = parseName(lexer);
|
|
402
406
|
} else {
|
|
@@ -434,10 +438,13 @@ function parseArguments(
|
|
|
434
438
|
*/
|
|
435
439
|
function parseArgument(lexer: Lexer<*>): ArgumentNode {
|
|
436
440
|
const start = lexer.token;
|
|
441
|
+
const name = parseName(lexer);
|
|
442
|
+
|
|
443
|
+
expectToken(lexer, TokenKind.COLON);
|
|
437
444
|
return {
|
|
438
445
|
kind: Kind.ARGUMENT,
|
|
439
|
-
name
|
|
440
|
-
value:
|
|
446
|
+
name,
|
|
447
|
+
value: parseValueLiteral(lexer, false),
|
|
441
448
|
loc: loc(lexer, start),
|
|
442
449
|
};
|
|
443
450
|
}
|
|
@@ -447,7 +454,7 @@ function parseConstArgument(lexer: Lexer<*>): ArgumentNode {
|
|
|
447
454
|
return {
|
|
448
455
|
kind: Kind.ARGUMENT,
|
|
449
456
|
name: parseName(lexer),
|
|
450
|
-
value: (
|
|
457
|
+
value: (expectToken(lexer, TokenKind.COLON), parseConstValue(lexer)),
|
|
451
458
|
loc: loc(lexer, start),
|
|
452
459
|
};
|
|
453
460
|
}
|
|
@@ -465,9 +472,9 @@ function parseFragment(
|
|
|
465
472
|
lexer: Lexer<*>,
|
|
466
473
|
): FragmentSpreadNode | InlineFragmentNode {
|
|
467
474
|
const start = lexer.token;
|
|
468
|
-
|
|
475
|
+
expectToken(lexer, TokenKind.SPREAD);
|
|
469
476
|
|
|
470
|
-
const hasTypeCondition =
|
|
477
|
+
const hasTypeCondition = expectOptionalKeyword(lexer, 'on');
|
|
471
478
|
if (!hasTypeCondition && peek(lexer, TokenKind.NAME)) {
|
|
472
479
|
return {
|
|
473
480
|
kind: Kind.FRAGMENT_SPREAD,
|
|
@@ -643,14 +650,10 @@ function parseList(lexer: Lexer<*>, isConst: boolean): ListValueNode {
|
|
|
643
650
|
*/
|
|
644
651
|
function parseObject(lexer: Lexer<*>, isConst: boolean): ObjectValueNode {
|
|
645
652
|
const start = lexer.token;
|
|
646
|
-
|
|
647
|
-
const fields = [];
|
|
648
|
-
while (!skip(lexer, TokenKind.BRACE_R)) {
|
|
649
|
-
fields.push(parseObjectField(lexer, isConst));
|
|
650
|
-
}
|
|
653
|
+
const item = () => parseObjectField(lexer, isConst);
|
|
651
654
|
return {
|
|
652
655
|
kind: Kind.OBJECT,
|
|
653
|
-
fields,
|
|
656
|
+
fields: any(lexer, TokenKind.BRACE_L, item, TokenKind.BRACE_R),
|
|
654
657
|
loc: loc(lexer, start),
|
|
655
658
|
};
|
|
656
659
|
}
|
|
@@ -660,10 +663,13 @@ function parseObject(lexer: Lexer<*>, isConst: boolean): ObjectValueNode {
|
|
|
660
663
|
*/
|
|
661
664
|
function parseObjectField(lexer: Lexer<*>, isConst: boolean): ObjectFieldNode {
|
|
662
665
|
const start = lexer.token;
|
|
666
|
+
const name = parseName(lexer);
|
|
667
|
+
expectToken(lexer, TokenKind.COLON);
|
|
668
|
+
|
|
663
669
|
return {
|
|
664
670
|
kind: Kind.OBJECT_FIELD,
|
|
665
|
-
name
|
|
666
|
-
value:
|
|
671
|
+
name,
|
|
672
|
+
value: parseValueLiteral(lexer, isConst),
|
|
667
673
|
loc: loc(lexer, start),
|
|
668
674
|
};
|
|
669
675
|
}
|
|
@@ -689,7 +695,7 @@ function parseDirectives(
|
|
|
689
695
|
*/
|
|
690
696
|
function parseDirective(lexer: Lexer<*>, isConst: boolean): DirectiveNode {
|
|
691
697
|
const start = lexer.token;
|
|
692
|
-
|
|
698
|
+
expectToken(lexer, TokenKind.AT);
|
|
693
699
|
return {
|
|
694
700
|
kind: Kind.DIRECTIVE,
|
|
695
701
|
name: parseName(lexer),
|
|
@@ -709,9 +715,9 @@ function parseDirective(lexer: Lexer<*>, isConst: boolean): DirectiveNode {
|
|
|
709
715
|
export function parseTypeReference(lexer: Lexer<*>): TypeNode {
|
|
710
716
|
const start = lexer.token;
|
|
711
717
|
let type;
|
|
712
|
-
if (
|
|
718
|
+
if (expectOptionalToken(lexer, TokenKind.BRACKET_L)) {
|
|
713
719
|
type = parseTypeReference(lexer);
|
|
714
|
-
|
|
720
|
+
expectToken(lexer, TokenKind.BRACKET_R);
|
|
715
721
|
type = ({
|
|
716
722
|
kind: Kind.LIST_TYPE,
|
|
717
723
|
type,
|
|
@@ -720,7 +726,7 @@ export function parseTypeReference(lexer: Lexer<*>): TypeNode {
|
|
|
720
726
|
} else {
|
|
721
727
|
type = parseNamedType(lexer);
|
|
722
728
|
}
|
|
723
|
-
if (
|
|
729
|
+
if (expectOptionalToken(lexer, TokenKind.BANG)) {
|
|
724
730
|
return ({
|
|
725
731
|
kind: Kind.NON_NULL_TYPE,
|
|
726
732
|
type,
|
|
@@ -828,7 +834,7 @@ function parseOperationTypeDefinition(
|
|
|
828
834
|
): OperationTypeDefinitionNode {
|
|
829
835
|
const start = lexer.token;
|
|
830
836
|
const operation = parseOperationType(lexer);
|
|
831
|
-
|
|
837
|
+
expectToken(lexer, TokenKind.COLON);
|
|
832
838
|
const type = parseNamedType(lexer);
|
|
833
839
|
return {
|
|
834
840
|
kind: Kind.OPERATION_TYPE_DEFINITION,
|
|
@@ -887,13 +893,13 @@ function parseObjectTypeDefinition(lexer: Lexer<*>): ObjectTypeDefinitionNode {
|
|
|
887
893
|
*/
|
|
888
894
|
function parseImplementsInterfaces(lexer: Lexer<*>): Array<NamedTypeNode> {
|
|
889
895
|
const types = [];
|
|
890
|
-
if (
|
|
896
|
+
if (expectOptionalKeyword(lexer, 'implements')) {
|
|
891
897
|
// Optional leading ampersand
|
|
892
|
-
|
|
898
|
+
expectOptionalToken(lexer, TokenKind.AMP);
|
|
893
899
|
do {
|
|
894
900
|
types.push(parseNamedType(lexer));
|
|
895
901
|
} while (
|
|
896
|
-
|
|
902
|
+
expectOptionalToken(lexer, TokenKind.AMP) ||
|
|
897
903
|
// Legacy support for the SDL?
|
|
898
904
|
(lexer.options.allowLegacySDLImplementsInterfaces &&
|
|
899
905
|
peek(lexer, TokenKind.NAME))
|
|
@@ -930,7 +936,7 @@ function parseFieldDefinition(lexer: Lexer<*>): FieldDefinitionNode {
|
|
|
930
936
|
const description = parseDescription(lexer);
|
|
931
937
|
const name = parseName(lexer);
|
|
932
938
|
const args = parseArgumentDefs(lexer);
|
|
933
|
-
|
|
939
|
+
expectToken(lexer, TokenKind.COLON);
|
|
934
940
|
const type = parseTypeReference(lexer);
|
|
935
941
|
const directives = parseDirectives(lexer, true);
|
|
936
942
|
return {
|
|
@@ -962,10 +968,10 @@ function parseInputValueDef(lexer: Lexer<*>): InputValueDefinitionNode {
|
|
|
962
968
|
const start = lexer.token;
|
|
963
969
|
const description = parseDescription(lexer);
|
|
964
970
|
const name = parseName(lexer);
|
|
965
|
-
|
|
971
|
+
expectToken(lexer, TokenKind.COLON);
|
|
966
972
|
const type = parseTypeReference(lexer);
|
|
967
973
|
let defaultValue;
|
|
968
|
-
if (
|
|
974
|
+
if (expectOptionalToken(lexer, TokenKind.EQUALS)) {
|
|
969
975
|
defaultValue = parseConstValue(lexer);
|
|
970
976
|
}
|
|
971
977
|
const directives = parseDirectives(lexer, true);
|
|
@@ -1031,12 +1037,12 @@ function parseUnionTypeDefinition(lexer: Lexer<*>): UnionTypeDefinitionNode {
|
|
|
1031
1037
|
*/
|
|
1032
1038
|
function parseUnionMemberTypes(lexer: Lexer<*>): Array<NamedTypeNode> {
|
|
1033
1039
|
const types = [];
|
|
1034
|
-
if (
|
|
1040
|
+
if (expectOptionalToken(lexer, TokenKind.EQUALS)) {
|
|
1035
1041
|
// Optional leading pipe
|
|
1036
|
-
|
|
1042
|
+
expectOptionalToken(lexer, TokenKind.PIPE);
|
|
1037
1043
|
do {
|
|
1038
1044
|
types.push(parseNamedType(lexer));
|
|
1039
|
-
} while (
|
|
1045
|
+
} while (expectOptionalToken(lexer, TokenKind.PIPE));
|
|
1040
1046
|
}
|
|
1041
1047
|
return types;
|
|
1042
1048
|
}
|
|
@@ -1358,7 +1364,7 @@ function parseDirectiveDefinition(lexer: Lexer<*>): DirectiveDefinitionNode {
|
|
|
1358
1364
|
const start = lexer.token;
|
|
1359
1365
|
const description = parseDescription(lexer);
|
|
1360
1366
|
expectKeyword(lexer, 'directive');
|
|
1361
|
-
|
|
1367
|
+
expectToken(lexer, TokenKind.AT);
|
|
1362
1368
|
const name = parseName(lexer);
|
|
1363
1369
|
const args = parseArgumentDefs(lexer);
|
|
1364
1370
|
expectKeyword(lexer, 'on');
|
|
@@ -1380,11 +1386,11 @@ function parseDirectiveDefinition(lexer: Lexer<*>): DirectiveDefinitionNode {
|
|
|
1380
1386
|
*/
|
|
1381
1387
|
function parseDirectiveLocations(lexer: Lexer<*>): Array<NameNode> {
|
|
1382
1388
|
// Optional leading pipe
|
|
1383
|
-
|
|
1389
|
+
expectOptionalToken(lexer, TokenKind.PIPE);
|
|
1384
1390
|
const locations = [];
|
|
1385
1391
|
do {
|
|
1386
1392
|
locations.push(parseDirectiveLocation(lexer));
|
|
1387
|
-
} while (
|
|
1393
|
+
} while (expectOptionalToken(lexer, TokenKind.PIPE));
|
|
1388
1394
|
return locations;
|
|
1389
1395
|
}
|
|
1390
1396
|
|
|
@@ -1418,7 +1424,7 @@ function parseDirectiveLocations(lexer: Lexer<*>): Array<NameNode> {
|
|
|
1418
1424
|
function parseDirectiveLocation(lexer: Lexer<*>): NameNode {
|
|
1419
1425
|
const start = lexer.token;
|
|
1420
1426
|
const name = parseName(lexer);
|
|
1421
|
-
if (DirectiveLocation
|
|
1427
|
+
if (DirectiveLocation[name.value] !== undefined) {
|
|
1422
1428
|
return name;
|
|
1423
1429
|
}
|
|
1424
1430
|
throw unexpected(lexer, start);
|
|
@@ -1456,28 +1462,17 @@ function peek(lexer: Lexer<*>, kind: TokenKindEnum): boolean {
|
|
|
1456
1462
|
return lexer.token.kind === kind;
|
|
1457
1463
|
}
|
|
1458
1464
|
|
|
1459
|
-
/**
|
|
1460
|
-
* If the next token is of the given kind, return true after advancing
|
|
1461
|
-
* the lexer. Otherwise, do not change the parser state and return false.
|
|
1462
|
-
*/
|
|
1463
|
-
function skip(lexer: Lexer<*>, kind: TokenKindEnum): boolean {
|
|
1464
|
-
if (lexer.token.kind === kind) {
|
|
1465
|
-
lexer.advance();
|
|
1466
|
-
return true;
|
|
1467
|
-
}
|
|
1468
|
-
return false;
|
|
1469
|
-
}
|
|
1470
|
-
|
|
1471
1465
|
/**
|
|
1472
1466
|
* If the next token is of the given kind, return that token after advancing
|
|
1473
1467
|
* the lexer. Otherwise, do not change the parser state and throw an error.
|
|
1474
1468
|
*/
|
|
1475
|
-
function
|
|
1469
|
+
function expectToken(lexer: Lexer<*>, kind: TokenKindEnum): Token {
|
|
1476
1470
|
const token = lexer.token;
|
|
1477
1471
|
if (token.kind === kind) {
|
|
1478
1472
|
lexer.advance();
|
|
1479
1473
|
return token;
|
|
1480
1474
|
}
|
|
1475
|
+
|
|
1481
1476
|
throw syntaxError(
|
|
1482
1477
|
lexer.source,
|
|
1483
1478
|
token.start,
|
|
@@ -1486,31 +1481,47 @@ function expect(lexer: Lexer<*>, kind: TokenKindEnum): Token {
|
|
|
1486
1481
|
}
|
|
1487
1482
|
|
|
1488
1483
|
/**
|
|
1489
|
-
* If the next token is
|
|
1490
|
-
* the lexer. Otherwise, do not change the parser state and return
|
|
1484
|
+
* If the next token is of the given kind, return that token after advancing
|
|
1485
|
+
* the lexer. Otherwise, do not change the parser state and return undefined.
|
|
1491
1486
|
*/
|
|
1492
|
-
function
|
|
1487
|
+
function expectOptionalToken(lexer: Lexer<*>, kind: TokenKindEnum): ?Token {
|
|
1488
|
+
const token = lexer.token;
|
|
1489
|
+
if (token.kind === kind) {
|
|
1490
|
+
lexer.advance();
|
|
1491
|
+
return token;
|
|
1492
|
+
}
|
|
1493
|
+
return undefined;
|
|
1494
|
+
}
|
|
1495
|
+
|
|
1496
|
+
/**
|
|
1497
|
+
* If the next token is a given keyword, return that token after advancing
|
|
1498
|
+
* the lexer. Otherwise, do not change the parser state and throw an error.
|
|
1499
|
+
*/
|
|
1500
|
+
function expectKeyword(lexer: Lexer<*>, value: string): Token {
|
|
1493
1501
|
const token = lexer.token;
|
|
1494
1502
|
if (token.kind === TokenKind.NAME && token.value === value) {
|
|
1495
1503
|
lexer.advance();
|
|
1496
|
-
return
|
|
1504
|
+
return token;
|
|
1497
1505
|
}
|
|
1498
|
-
|
|
1506
|
+
|
|
1507
|
+
throw syntaxError(
|
|
1508
|
+
lexer.source,
|
|
1509
|
+
token.start,
|
|
1510
|
+
`Expected "${value}", found ${getTokenDesc(token)}`,
|
|
1511
|
+
);
|
|
1499
1512
|
}
|
|
1500
1513
|
|
|
1501
1514
|
/**
|
|
1502
|
-
* If the next token is a
|
|
1503
|
-
*
|
|
1504
|
-
* an error.
|
|
1515
|
+
* If the next token is a given keyword, return that token after advancing
|
|
1516
|
+
* the lexer. Otherwise, do not change the parser state and return undefined.
|
|
1505
1517
|
*/
|
|
1506
|
-
function
|
|
1507
|
-
|
|
1508
|
-
|
|
1509
|
-
|
|
1510
|
-
|
|
1511
|
-
`Expected "${value}", found ${getTokenDesc(lexer.token)}`,
|
|
1512
|
-
);
|
|
1518
|
+
function expectOptionalKeyword(lexer: Lexer<*>, value: string): ?Token {
|
|
1519
|
+
const token = lexer.token;
|
|
1520
|
+
if (token.kind === TokenKind.NAME && token.value === value) {
|
|
1521
|
+
lexer.advance();
|
|
1522
|
+
return token;
|
|
1513
1523
|
}
|
|
1524
|
+
return undefined;
|
|
1514
1525
|
}
|
|
1515
1526
|
|
|
1516
1527
|
/**
|
|
@@ -1538,9 +1549,9 @@ function any<T>(
|
|
|
1538
1549
|
parseFn: (lexer: Lexer<*>) => T,
|
|
1539
1550
|
closeKind: TokenKindEnum,
|
|
1540
1551
|
): Array<T> {
|
|
1541
|
-
|
|
1552
|
+
expectToken(lexer, openKind);
|
|
1542
1553
|
const nodes = [];
|
|
1543
|
-
while (!
|
|
1554
|
+
while (!expectOptionalToken(lexer, closeKind)) {
|
|
1544
1555
|
nodes.push(parseFn(lexer));
|
|
1545
1556
|
}
|
|
1546
1557
|
return nodes;
|
|
@@ -1558,9 +1569,9 @@ function many<T>(
|
|
|
1558
1569
|
parseFn: (lexer: Lexer<*>) => T,
|
|
1559
1570
|
closeKind: TokenKindEnum,
|
|
1560
1571
|
): Array<T> {
|
|
1561
|
-
|
|
1572
|
+
expectToken(lexer, openKind);
|
|
1562
1573
|
const nodes = [parseFn(lexer)];
|
|
1563
|
-
while (!
|
|
1574
|
+
while (!expectOptionalToken(lexer, closeKind)) {
|
|
1564
1575
|
nodes.push(parseFn(lexer));
|
|
1565
1576
|
}
|
|
1566
1577
|
return nodes;
|