graphql 15.3.0 → 15.5.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.
Files changed (337) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +10 -0
  3. package/error/GraphQLError.js +8 -8
  4. package/error/GraphQLError.js.flow +2 -3
  5. package/error/GraphQLError.mjs +2 -2
  6. package/error/formatError.js +1 -1
  7. package/error/formatError.js.flow +0 -1
  8. package/error/index.js +4 -4
  9. package/error/index.js.flow +0 -1
  10. package/error/locatedError.d.ts +2 -2
  11. package/error/locatedError.js +10 -5
  12. package/error/locatedError.js.flow +10 -4
  13. package/error/locatedError.mjs +6 -4
  14. package/error/syntaxError.js +1 -1
  15. package/error/syntaxError.js.flow +0 -1
  16. package/execution/execute.d.ts +0 -15
  17. package/execution/execute.js +104 -104
  18. package/execution/execute.js.flow +119 -133
  19. package/execution/execute.mjs +86 -82
  20. package/execution/index.js +3 -3
  21. package/execution/index.js.flow +0 -1
  22. package/execution/values.js +11 -11
  23. package/execution/values.js.flow +0 -1
  24. package/graphql.js +5 -5
  25. package/graphql.js.flow +0 -1
  26. package/index.d.ts +1 -0
  27. package/index.js +9 -9
  28. package/index.js.flow +0 -1
  29. package/jsutils/ObjMap.js.flow +0 -1
  30. package/jsutils/Path.js.flow +0 -1
  31. package/jsutils/PromiseOrValue.js.flow +0 -1
  32. package/jsutils/defineInspect.js +2 -2
  33. package/jsutils/defineInspect.js.flow +0 -1
  34. package/jsutils/devAssert.js.flow +0 -1
  35. package/jsutils/didYouMean.js.flow +0 -1
  36. package/jsutils/identityFunc.js.flow +0 -1
  37. package/jsutils/inspect.js +1 -2
  38. package/jsutils/inspect.js.flow +10 -8
  39. package/jsutils/inspect.mjs +1 -1
  40. package/jsutils/instanceOf.js +15 -9
  41. package/jsutils/instanceOf.js.flow +13 -7
  42. package/jsutils/instanceOf.mjs +13 -5
  43. package/jsutils/invariant.js.flow +0 -1
  44. package/jsutils/isAsyncIterable.js +13 -0
  45. package/jsutils/isAsyncIterable.js.flow +14 -0
  46. package/jsutils/isAsyncIterable.mjs +10 -0
  47. package/jsutils/isObjectLike.js.flow +0 -1
  48. package/jsutils/isPromise.js.flow +0 -1
  49. package/jsutils/keyMap.js.flow +0 -1
  50. package/jsutils/keyValMap.js.flow +0 -1
  51. package/jsutils/mapValue.js +1 -1
  52. package/jsutils/mapValue.js.flow +0 -1
  53. package/jsutils/memoize3.js +2 -5
  54. package/jsutils/memoize3.js.flow +2 -5
  55. package/jsutils/memoize3.mjs +2 -5
  56. package/jsutils/naturalCompare.js +69 -0
  57. package/jsutils/naturalCompare.js.flow +59 -0
  58. package/jsutils/naturalCompare.mjs +61 -0
  59. package/jsutils/nodejsCustomInspectSymbol.js.flow +0 -1
  60. package/jsutils/printPathArray.js.flow +0 -1
  61. package/jsutils/promiseForObject.js.flow +0 -1
  62. package/jsutils/promiseReduce.js +1 -1
  63. package/jsutils/promiseReduce.js.flow +0 -1
  64. package/jsutils/safeArrayFrom.js +73 -0
  65. package/jsutils/safeArrayFrom.js.flow +59 -0
  66. package/jsutils/safeArrayFrom.mjs +66 -0
  67. package/jsutils/suggestionList.js +5 -1
  68. package/jsutils/suggestionList.js.flow +3 -2
  69. package/jsutils/suggestionList.mjs +3 -1
  70. package/jsutils/toObjMap.js +1 -1
  71. package/jsutils/toObjMap.js.flow +0 -1
  72. package/language/ast.js +1 -1
  73. package/language/ast.js.flow +0 -1
  74. package/language/blockString.d.ts +1 -1
  75. package/language/blockString.js +53 -32
  76. package/language/blockString.js.flow +51 -36
  77. package/language/blockString.mjs +54 -33
  78. package/language/directiveLocation.js.flow +0 -1
  79. package/language/experimentalOnlineParser/grammar.d.ts +1006 -0
  80. package/language/experimentalOnlineParser/grammar.js +987 -0
  81. package/language/experimentalOnlineParser/grammar.js.flow +1000 -0
  82. package/language/experimentalOnlineParser/grammar.mjs +980 -0
  83. package/language/experimentalOnlineParser/index.d.ts +6 -0
  84. package/language/experimentalOnlineParser/index.js +31 -0
  85. package/language/experimentalOnlineParser/index.js.flow +7 -0
  86. package/language/experimentalOnlineParser/index.mjs +1 -0
  87. package/language/experimentalOnlineParser/onlineParser.d.ts +125 -0
  88. package/language/experimentalOnlineParser/onlineParser.js +604 -0
  89. package/language/experimentalOnlineParser/onlineParser.js.flow +723 -0
  90. package/language/experimentalOnlineParser/onlineParser.mjs +587 -0
  91. package/language/index.js +12 -12
  92. package/language/index.js.flow +0 -1
  93. package/language/kinds.js.flow +0 -1
  94. package/language/lexer.js +242 -183
  95. package/language/lexer.js.flow +188 -184
  96. package/language/lexer.mjs +238 -179
  97. package/language/location.js.flow +0 -1
  98. package/language/parser.js +73 -68
  99. package/language/parser.js.flow +62 -57
  100. package/language/parser.mjs +64 -60
  101. package/language/predicates.js +1 -1
  102. package/language/predicates.js.flow +0 -1
  103. package/language/printLocation.js +1 -1
  104. package/language/printLocation.js.flow +0 -1
  105. package/language/printer.js +20 -13
  106. package/language/printer.js.flow +26 -25
  107. package/language/printer.mjs +18 -11
  108. package/language/source.d.ts +7 -0
  109. package/language/source.js +20 -3
  110. package/language/source.js.flow +21 -3
  111. package/language/source.mjs +14 -1
  112. package/language/tokenKind.js.flow +0 -1
  113. package/language/visitor.js +2 -2
  114. package/language/visitor.js.flow +0 -1
  115. package/package.json +2 -3
  116. package/polyfills/arrayFrom.js +2 -2
  117. package/polyfills/arrayFrom.js.flow +1 -2
  118. package/polyfills/arrayFrom.mjs +1 -1
  119. package/polyfills/find.js +1 -1
  120. package/polyfills/find.js.flow +1 -2
  121. package/polyfills/find.mjs +1 -1
  122. package/polyfills/isFinite.js +1 -1
  123. package/polyfills/isFinite.js.flow +1 -2
  124. package/polyfills/isFinite.mjs +1 -1
  125. package/polyfills/isInteger.js +1 -1
  126. package/polyfills/isInteger.js.flow +1 -2
  127. package/polyfills/isInteger.mjs +1 -1
  128. package/polyfills/objectEntries.js +1 -1
  129. package/polyfills/objectEntries.js.flow +1 -2
  130. package/polyfills/objectEntries.mjs +1 -1
  131. package/polyfills/objectValues.js +1 -1
  132. package/polyfills/objectValues.js.flow +1 -2
  133. package/polyfills/objectValues.mjs +1 -1
  134. package/polyfills/symbols.js +3 -5
  135. package/polyfills/symbols.js.flow +9 -6
  136. package/polyfills/symbols.mjs +3 -5
  137. package/subscription/index.js +1 -1
  138. package/subscription/index.js.flow +0 -1
  139. package/subscription/mapAsyncIterator.js +2 -2
  140. package/subscription/mapAsyncIterator.js.flow +8 -9
  141. package/subscription/mapAsyncIterator.mjs +1 -1
  142. package/subscription/subscribe.js +61 -73
  143. package/subscription/subscribe.js.flow +71 -85
  144. package/subscription/subscribe.mjs +53 -65
  145. package/type/definition.d.ts +16 -6
  146. package/type/definition.js +37 -32
  147. package/type/definition.js.flow +93 -63
  148. package/type/definition.mjs +19 -14
  149. package/type/directives.js +17 -16
  150. package/type/directives.js.flow +20 -13
  151. package/type/directives.mjs +6 -5
  152. package/type/index.js +6 -6
  153. package/type/index.js.flow +0 -1
  154. package/type/introspection.js +86 -65
  155. package/type/introspection.js.flow +75 -43
  156. package/type/introspection.mjs +79 -58
  157. package/type/scalars.js +9 -9
  158. package/type/scalars.js.flow +1 -2
  159. package/type/scalars.mjs +1 -1
  160. package/type/schema.js +13 -13
  161. package/type/schema.js.flow +2 -3
  162. package/type/schema.mjs +1 -1
  163. package/type/validate.js +52 -19
  164. package/type/validate.js.flow +54 -8
  165. package/type/validate.mjs +43 -9
  166. package/utilities/TypeInfo.js +7 -7
  167. package/utilities/TypeInfo.js.flow +1 -2
  168. package/utilities/assertValidName.js +2 -2
  169. package/utilities/assertValidName.js.flow +0 -1
  170. package/utilities/astFromValue.js +14 -16
  171. package/utilities/astFromValue.js.flow +6 -7
  172. package/utilities/astFromValue.mjs +6 -7
  173. package/utilities/buildASTSchema.js +17 -27
  174. package/utilities/buildASTSchema.js.flow +5 -21
  175. package/utilities/buildASTSchema.mjs +11 -21
  176. package/utilities/buildClientSchema.js +16 -15
  177. package/utilities/buildClientSchema.js.flow +28 -12
  178. package/utilities/buildClientSchema.mjs +5 -4
  179. package/utilities/coerceInputValue.js +17 -18
  180. package/utilities/coerceInputValue.js.flow +12 -10
  181. package/utilities/coerceInputValue.mjs +7 -7
  182. package/utilities/concatAST.js +9 -8
  183. package/utilities/concatAST.js.flow +8 -8
  184. package/utilities/concatAST.mjs +9 -6
  185. package/utilities/extendSchema.js +26 -19
  186. package/utilities/extendSchema.js.flow +19 -7
  187. package/utilities/extendSchema.mjs +8 -1
  188. package/utilities/findBreakingChanges.js +15 -11
  189. package/utilities/findBreakingChanges.js.flow +6 -3
  190. package/utilities/findBreakingChanges.mjs +5 -2
  191. package/utilities/findDeprecatedUsages.js +2 -2
  192. package/utilities/findDeprecatedUsages.js.flow +0 -1
  193. package/utilities/getIntrospectionQuery.d.ts +6 -0
  194. package/utilities/getIntrospectionQuery.js +8 -2
  195. package/utilities/getIntrospectionQuery.js.flow +17 -5
  196. package/utilities/getIntrospectionQuery.mjs +8 -2
  197. package/utilities/getOperationAST.js +1 -1
  198. package/utilities/getOperationAST.js.flow +0 -1
  199. package/utilities/getOperationRootType.js +1 -1
  200. package/utilities/getOperationRootType.js.flow +0 -1
  201. package/utilities/index.d.ts +3 -0
  202. package/utilities/index.js +22 -22
  203. package/utilities/index.js.flow +0 -1
  204. package/utilities/introspectionFromSchema.js +7 -5
  205. package/utilities/introspectionFromSchema.js.flow +2 -1
  206. package/utilities/introspectionFromSchema.mjs +3 -1
  207. package/utilities/lexicographicSortSchema.js +13 -9
  208. package/utilities/lexicographicSortSchema.js.flow +21 -13
  209. package/utilities/lexicographicSortSchema.mjs +5 -2
  210. package/utilities/printSchema.js +15 -16
  211. package/utilities/printSchema.js.flow +23 -16
  212. package/utilities/printSchema.mjs +5 -6
  213. package/utilities/separateOperations.js +46 -42
  214. package/utilities/separateOperations.js.flow +46 -37
  215. package/utilities/separateOperations.mjs +44 -40
  216. package/utilities/stripIgnoredCharacters.js +6 -16
  217. package/utilities/stripIgnoredCharacters.js.flow +4 -13
  218. package/utilities/stripIgnoredCharacters.mjs +3 -10
  219. package/utilities/typeComparators.js +1 -1
  220. package/utilities/typeComparators.js.flow +0 -1
  221. package/utilities/typeFromAST.js +6 -6
  222. package/utilities/typeFromAST.js.flow +2 -3
  223. package/utilities/typeFromAST.mjs +2 -2
  224. package/utilities/typedQueryDocumentNode.d.ts +20 -0
  225. package/utilities/valueFromAST.js +6 -6
  226. package/utilities/valueFromAST.js.flow +4 -2
  227. package/utilities/valueFromASTUntyped.js +4 -4
  228. package/utilities/valueFromASTUntyped.js.flow +0 -1
  229. package/validation/ValidationContext.js +3 -3
  230. package/validation/ValidationContext.js.flow +3 -4
  231. package/validation/index.js +38 -38
  232. package/validation/index.js.flow +0 -1
  233. package/validation/rules/ExecutableDefinitions.js +1 -1
  234. package/validation/rules/ExecutableDefinitions.js.flow +0 -1
  235. package/validation/rules/ExecutableDefinitionsRule.js +3 -3
  236. package/validation/rules/ExecutableDefinitionsRule.js.flow +0 -1
  237. package/validation/rules/FieldsOnCorrectTypeRule.js +8 -6
  238. package/validation/rules/FieldsOnCorrectTypeRule.js.flow +2 -2
  239. package/validation/rules/FieldsOnCorrectTypeRule.mjs +2 -1
  240. package/validation/rules/FragmentsOnCompositeTypesRule.js +4 -4
  241. package/validation/rules/FragmentsOnCompositeTypesRule.js.flow +0 -1
  242. package/validation/rules/KnownArgumentNamesRule.js +5 -5
  243. package/validation/rules/KnownArgumentNamesRule.js.flow +1 -1
  244. package/validation/rules/KnownDirectivesRule.js +6 -6
  245. package/validation/rules/KnownDirectivesRule.js.flow +4 -3
  246. package/validation/rules/KnownFragmentNamesRule.js +1 -1
  247. package/validation/rules/KnownFragmentNamesRule.js.flow +0 -1
  248. package/validation/rules/KnownTypeNamesRule.js +6 -6
  249. package/validation/rules/KnownTypeNamesRule.js.flow +1 -2
  250. package/validation/rules/LoneAnonymousOperationRule.js +2 -2
  251. package/validation/rules/LoneAnonymousOperationRule.js.flow +0 -1
  252. package/validation/rules/LoneSchemaDefinition.js +1 -1
  253. package/validation/rules/LoneSchemaDefinition.js.flow +0 -1
  254. package/validation/rules/LoneSchemaDefinitionRule.js +1 -1
  255. package/validation/rules/LoneSchemaDefinitionRule.js.flow +0 -1
  256. package/validation/rules/NoFragmentCyclesRule.js +1 -1
  257. package/validation/rules/NoFragmentCyclesRule.js.flow +1 -2
  258. package/validation/rules/NoUndefinedVariablesRule.js +1 -1
  259. package/validation/rules/NoUndefinedVariablesRule.js.flow +0 -1
  260. package/validation/rules/NoUnusedFragmentsRule.js +1 -1
  261. package/validation/rules/NoUnusedFragmentsRule.js.flow +0 -1
  262. package/validation/rules/NoUnusedVariablesRule.js +1 -1
  263. package/validation/rules/NoUnusedVariablesRule.js.flow +0 -1
  264. package/validation/rules/OverlappingFieldsCanBeMergedRule.js +20 -20
  265. package/validation/rules/OverlappingFieldsCanBeMergedRule.js.flow +14 -14
  266. package/validation/rules/OverlappingFieldsCanBeMergedRule.mjs +12 -12
  267. package/validation/rules/PossibleFragmentSpreadsRule.js +5 -5
  268. package/validation/rules/PossibleFragmentSpreadsRule.js.flow +5 -2
  269. package/validation/rules/PossibleTypeExtensions.js +1 -1
  270. package/validation/rules/PossibleTypeExtensions.js.flow +0 -1
  271. package/validation/rules/PossibleTypeExtensionsRule.js +8 -8
  272. package/validation/rules/PossibleTypeExtensionsRule.js.flow +6 -4
  273. package/validation/rules/ProvidedRequiredArgumentsRule.js +7 -7
  274. package/validation/rules/ProvidedRequiredArgumentsRule.js.flow +4 -3
  275. package/validation/rules/ScalarLeafsRule.js +3 -3
  276. package/validation/rules/ScalarLeafsRule.js.flow +0 -1
  277. package/validation/rules/SingleFieldSubscriptionsRule.js +1 -1
  278. package/validation/rules/SingleFieldSubscriptionsRule.js.flow +0 -1
  279. package/validation/rules/UniqueArgumentNamesRule.js +1 -1
  280. package/validation/rules/UniqueArgumentNamesRule.js.flow +0 -1
  281. package/validation/rules/UniqueDirectiveNames.js +1 -1
  282. package/validation/rules/UniqueDirectiveNames.js.flow +0 -1
  283. package/validation/rules/UniqueDirectiveNamesRule.js +2 -2
  284. package/validation/rules/UniqueDirectiveNamesRule.js.flow +0 -1
  285. package/validation/rules/UniqueDirectiveNamesRule.mjs +1 -1
  286. package/validation/rules/UniqueDirectivesPerLocationRule.js +4 -4
  287. package/validation/rules/UniqueDirectivesPerLocationRule.js.flow +0 -1
  288. package/validation/rules/UniqueEnumValueNames.js +1 -1
  289. package/validation/rules/UniqueEnumValueNames.js.flow +0 -1
  290. package/validation/rules/UniqueEnumValueNamesRule.js +2 -2
  291. package/validation/rules/UniqueEnumValueNamesRule.js.flow +7 -2
  292. package/validation/rules/UniqueFieldDefinitionNames.js +1 -1
  293. package/validation/rules/UniqueFieldDefinitionNames.js.flow +0 -1
  294. package/validation/rules/UniqueFieldDefinitionNamesRule.js +3 -3
  295. package/validation/rules/UniqueFieldDefinitionNamesRule.js.flow +13 -4
  296. package/validation/rules/UniqueFieldDefinitionNamesRule.mjs +1 -1
  297. package/validation/rules/UniqueFragmentNamesRule.js +1 -1
  298. package/validation/rules/UniqueFragmentNamesRule.js.flow +0 -1
  299. package/validation/rules/UniqueInputFieldNamesRule.js +1 -1
  300. package/validation/rules/UniqueInputFieldNamesRule.js.flow +0 -1
  301. package/validation/rules/UniqueOperationNamesRule.js +1 -1
  302. package/validation/rules/UniqueOperationNamesRule.js.flow +0 -1
  303. package/validation/rules/UniqueOperationTypes.js +1 -1
  304. package/validation/rules/UniqueOperationTypes.js.flow +0 -1
  305. package/validation/rules/UniqueOperationTypesRule.js +1 -1
  306. package/validation/rules/UniqueOperationTypesRule.js.flow +7 -2
  307. package/validation/rules/UniqueTypeNames.js +1 -1
  308. package/validation/rules/UniqueTypeNames.js.flow +0 -1
  309. package/validation/rules/UniqueTypeNamesRule.js +2 -2
  310. package/validation/rules/UniqueTypeNamesRule.js.flow +0 -1
  311. package/validation/rules/UniqueTypeNamesRule.mjs +1 -1
  312. package/validation/rules/UniqueVariableNamesRule.js +1 -1
  313. package/validation/rules/UniqueVariableNamesRule.js.flow +0 -1
  314. package/validation/rules/ValuesOfCorrectTypeRule.js +8 -8
  315. package/validation/rules/ValuesOfCorrectTypeRule.js.flow +0 -1
  316. package/validation/rules/VariablesAreInputTypesRule.js +4 -4
  317. package/validation/rules/VariablesAreInputTypesRule.js.flow +0 -1
  318. package/validation/rules/VariablesInAllowedPositionRule.js +6 -6
  319. package/validation/rules/VariablesInAllowedPositionRule.js.flow +0 -1
  320. package/validation/rules/custom/NoDeprecatedCustomRule.js +47 -9
  321. package/validation/rules/custom/NoDeprecatedCustomRule.js.flow +56 -13
  322. package/validation/rules/custom/NoDeprecatedCustomRule.mjs +43 -8
  323. package/validation/rules/custom/NoSchemaIntrospectionCustomRule.js +3 -3
  324. package/validation/rules/custom/NoSchemaIntrospectionCustomRule.js.flow +0 -1
  325. package/validation/specifiedRules.js +33 -33
  326. package/validation/specifiedRules.js.flow +0 -1
  327. package/validation/validate.js +7 -7
  328. package/validation/validate.js.flow +4 -5
  329. package/version.js +3 -3
  330. package/version.js.flow +3 -4
  331. package/version.mjs +3 -3
  332. package/jsutils/isCollection.js +0 -47
  333. package/jsutils/isCollection.js.flow +0 -39
  334. package/jsutils/isCollection.mjs +0 -40
  335. package/polyfills/flatMap.js +0 -30
  336. package/polyfills/flatMap.js.flow +0 -28
  337. package/polyfills/flatMap.mjs +0 -23
@@ -0,0 +1,1000 @@
1
+ // @flow strict
2
+ export type GraphQLGrammarType = {|
3
+ [name: string]: GraphQLGrammarRule,
4
+ |};
5
+ export type GraphQLGrammarRuleName = string;
6
+ export type GraphQLGrammarRuleConstraint =
7
+ | GraphQLGrammarTokenConstraint
8
+ | GraphQLGrammarOfTypeConstraint
9
+ | GraphQLGrammarListOfTypeConstraint
10
+ | GraphQLGrammarPeekConstraint;
11
+ export type GraphQLGrammarConstraintsSet = Array<
12
+ GraphQLGrammarRuleName | GraphQLGrammarRuleConstraint,
13
+ >;
14
+ export type GraphQLGrammarRule =
15
+ | GraphQLGrammarRuleName
16
+ | GraphQLGrammarRuleConstraint
17
+ | GraphQLGrammarConstraintsSet;
18
+ export interface GraphQLGrammarBaseRuleConstraint {
19
+ butNot?:
20
+ | ?GraphQLGrammarTokenConstraint
21
+ | ?Array<GraphQLGrammarTokenConstraint>;
22
+ optional?: boolean;
23
+ eatNextOnFail?: boolean;
24
+ }
25
+ export interface GraphQLGrammarTokenConstraint
26
+ extends GraphQLGrammarBaseRuleConstraint {
27
+ token:
28
+ | '!'
29
+ | '$'
30
+ | '&'
31
+ | '('
32
+ | ')'
33
+ | '...'
34
+ | ':'
35
+ | '='
36
+ | '@'
37
+ | '['
38
+ | ']'
39
+ | '{'
40
+ | '}'
41
+ | '|'
42
+ | 'Name'
43
+ | 'Int'
44
+ | 'Float'
45
+ | 'String'
46
+ | 'BlockString'
47
+ | 'Comment';
48
+ ofValue?: ?string;
49
+ oneOf?: ?Array<string>;
50
+ tokenName?: string;
51
+ definitionName?: boolean;
52
+ typeName?: boolean;
53
+ }
54
+ export interface GraphQLGrammarOfTypeConstraint
55
+ extends GraphQLGrammarBaseRuleConstraint {
56
+ ofType: GraphQLGrammarRule;
57
+ tokenName?: string;
58
+ }
59
+ export interface GraphQLGrammarListOfTypeConstraint
60
+ extends GraphQLGrammarBaseRuleConstraint {
61
+ listOfType: GraphQLGrammarRuleName;
62
+ }
63
+ export interface GraphQLGrammarPeekConstraint
64
+ extends GraphQLGrammarBaseRuleConstraint {
65
+ peek: Array<GraphQLGrammarPeekConstraintCondition>;
66
+ }
67
+ export interface GraphQLGrammarPeekConstraintCondition {
68
+ ifCondition: GraphQLGrammarTokenConstraint;
69
+ expect: GraphQLGrammarRule;
70
+ end?: boolean;
71
+ }
72
+
73
+ const grammar: GraphQLGrammarType = ({
74
+ Name: { token: 'Name' },
75
+ String: { token: 'String' },
76
+ BlockString: { token: 'BlockString' },
77
+
78
+ Document: { listOfType: 'Definition' },
79
+ Definition: {
80
+ peek: [
81
+ {
82
+ ifCondition: {
83
+ token: 'Name',
84
+ oneOf: ['query', 'mutation', 'subscription'],
85
+ },
86
+ expect: 'OperationDefinition',
87
+ },
88
+ {
89
+ ifCondition: { token: 'Name', ofValue: 'fragment' },
90
+ expect: 'FragmentDefinition',
91
+ },
92
+ {
93
+ ifCondition: {
94
+ token: 'Name',
95
+ oneOf: [
96
+ 'schema',
97
+ 'scalar',
98
+ 'type',
99
+ 'interface',
100
+ 'union',
101
+ 'enum',
102
+ 'input',
103
+ 'directive',
104
+ ],
105
+ },
106
+ expect: 'TypeSystemDefinition',
107
+ },
108
+ {
109
+ ifCondition: { token: 'Name', ofValue: 'extend' },
110
+ expect: 'TypeSystemExtension',
111
+ },
112
+ {
113
+ ifCondition: { token: '{' },
114
+ expect: 'OperationDefinition',
115
+ },
116
+ {
117
+ ifCondition: 'String',
118
+ expect: 'TypeSystemDefinition',
119
+ },
120
+ {
121
+ ifCondition: 'BlockString',
122
+ expect: 'TypeSystemDefinition',
123
+ },
124
+ ],
125
+ },
126
+
127
+ OperationDefinition: {
128
+ peek: [
129
+ {
130
+ ifCondition: { token: '{' },
131
+ expect: 'SelectionSet',
132
+ },
133
+ {
134
+ ifCondition: {
135
+ token: 'Name',
136
+ oneOf: ['query', 'mutation', 'subscription'],
137
+ },
138
+ expect: [
139
+ 'OperationType',
140
+ {
141
+ token: 'Name',
142
+ optional: true,
143
+ tokenName: 'OperationName',
144
+ definitionName: true,
145
+ },
146
+ { ofType: 'VariableDefinitions', optional: true },
147
+ { ofType: 'Directives', optional: true },
148
+ 'SelectionSet',
149
+ ],
150
+ },
151
+ ],
152
+ },
153
+ OperationType: {
154
+ ofType: 'OperationTypeName',
155
+ },
156
+ OperationTypeName: {
157
+ token: 'Name',
158
+ oneOf: ['query', 'mutation', 'subscription'],
159
+ definitionName: true,
160
+ },
161
+ SelectionSet: [{ token: '{' }, { listOfType: 'Selection' }, { token: '}' }],
162
+ Selection: {
163
+ peek: [
164
+ {
165
+ ifCondition: { token: '...' },
166
+ expect: 'Fragment',
167
+ },
168
+ {
169
+ ifCondition: { token: 'Name' },
170
+ expect: 'Field',
171
+ },
172
+ ],
173
+ },
174
+
175
+ Field: [
176
+ {
177
+ ofType: 'Alias',
178
+ optional: true,
179
+ eatNextOnFail: true,
180
+ definitionName: true,
181
+ },
182
+ { token: 'Name', tokenName: 'FieldName', definitionName: true },
183
+ { ofType: 'Arguments', optional: true },
184
+ { ofType: 'Directives', optional: true },
185
+ { ofType: 'SelectionSet', optional: true },
186
+ ],
187
+
188
+ Arguments: [{ token: '(' }, { listOfType: 'Argument' }, { token: ')' }],
189
+ Argument: [
190
+ { token: 'Name', tokenName: 'ArgumentName', definitionName: true },
191
+ { token: ':' },
192
+ 'Value',
193
+ ],
194
+
195
+ Alias: [
196
+ { token: 'Name', tokenName: 'AliasName', definitionName: true },
197
+ { token: ':' },
198
+ ],
199
+
200
+ Fragment: [
201
+ { token: '...' },
202
+ {
203
+ peek: [
204
+ {
205
+ ifCondition: 'FragmentName',
206
+ expect: 'FragmentSpread',
207
+ },
208
+ {
209
+ ifCondition: { token: 'Name', ofValue: 'on' },
210
+ expect: 'InlineFragment',
211
+ },
212
+ {
213
+ ifCondition: { token: '@' },
214
+ expect: 'InlineFragment',
215
+ },
216
+ {
217
+ ifCondition: { token: '{' },
218
+ expect: 'InlineFragment',
219
+ },
220
+ ],
221
+ },
222
+ ],
223
+
224
+ FragmentSpread: ['FragmentName', { ofType: 'Directives', optional: true }],
225
+ FragmentDefinition: [
226
+ {
227
+ token: 'Name',
228
+ ofValue: 'fragment',
229
+ tokenName: 'FragmentDefinitionKeyword',
230
+ },
231
+ 'FragmentName',
232
+ 'TypeCondition',
233
+ { ofType: 'Directives', optional: true },
234
+ 'SelectionSet',
235
+ ],
236
+ FragmentName: {
237
+ token: 'Name',
238
+ butNot: { token: 'Name', ofValue: 'on' },
239
+ definitionName: true,
240
+ },
241
+
242
+ TypeCondition: [
243
+ { token: 'Name', ofValue: 'on', tokenName: 'OnKeyword' },
244
+ 'TypeName',
245
+ ],
246
+
247
+ InlineFragment: [
248
+ { ofType: 'TypeCondition', optional: true },
249
+ { ofType: 'Directives', optional: true },
250
+ 'SelectionSet',
251
+ ],
252
+
253
+ Value: {
254
+ peek: [
255
+ {
256
+ ifCondition: { token: '$' },
257
+ expect: 'Variable',
258
+ },
259
+ {
260
+ ifCondition: 'IntValue',
261
+ expect: { ofType: 'IntValue', tokenName: 'NumberValue' },
262
+ },
263
+ {
264
+ ifCondition: 'FloatValue',
265
+ expect: { ofType: 'FloatValue', tokenName: 'NumberValue' },
266
+ },
267
+ {
268
+ ifCondition: 'BooleanValue',
269
+ expect: { ofType: 'BooleanValue', tokenName: 'BooleanValue' },
270
+ },
271
+ {
272
+ ifCondition: 'EnumValue',
273
+ expect: { ofType: 'EnumValue', tokenName: 'EnumValue' },
274
+ },
275
+ {
276
+ ifCondition: 'String',
277
+ expect: { ofType: 'String', tokenName: 'StringValue' },
278
+ },
279
+ {
280
+ ifCondition: 'BlockString',
281
+ expect: { ofType: 'BlockString', tokenName: 'StringValue' },
282
+ },
283
+ {
284
+ ifCondition: 'NullValue',
285
+ expect: { ofType: 'NullValue', tokenName: 'NullValue' },
286
+ },
287
+ {
288
+ ifCondition: { token: '[' },
289
+ expect: 'ListValue',
290
+ },
291
+ {
292
+ ifCondition: { token: '{' },
293
+ expect: 'ObjectValue',
294
+ },
295
+ ],
296
+ },
297
+
298
+ ConstValue: {
299
+ peek: [
300
+ {
301
+ ifCondition: 'IntValue',
302
+ expect: { ofType: 'IntValue' },
303
+ },
304
+ {
305
+ ifCondition: 'FloatValue',
306
+ expect: { ofType: 'FloatValue' },
307
+ },
308
+ {
309
+ ifCondition: 'BooleanValue',
310
+ expect: 'BooleanValue',
311
+ },
312
+ {
313
+ ifCondition: 'EnumValue',
314
+ expect: 'EnumValue',
315
+ },
316
+ {
317
+ ifCondition: 'String',
318
+ expect: { ofType: 'String', tokenName: 'StringValue' },
319
+ },
320
+ {
321
+ ifCondition: 'BlockString',
322
+ expect: { token: 'BlockString', tokenName: 'StringValue' },
323
+ },
324
+ {
325
+ ifCondition: 'NullValue',
326
+ expect: 'NullValue',
327
+ },
328
+ {
329
+ ifCondition: { token: '[' },
330
+ expect: 'ConstListValue',
331
+ },
332
+ {
333
+ ifCondition: { token: '{' },
334
+ expect: 'ObjectValue',
335
+ },
336
+ ],
337
+ },
338
+
339
+ IntValue: { token: 'Int' },
340
+
341
+ FloatValue: { token: 'Float' },
342
+
343
+ StringValue: {
344
+ peek: [
345
+ {
346
+ ifCondition: { token: 'String' },
347
+ expect: { token: 'String', tokenName: 'StringValue' },
348
+ },
349
+ {
350
+ ifCondition: { token: 'BlockString' },
351
+ expect: { token: 'BlockString', tokenName: 'StringValue' },
352
+ },
353
+ ],
354
+ },
355
+
356
+ BooleanValue: {
357
+ token: 'Name',
358
+ oneOf: ['true', 'false'],
359
+ tokenName: 'BooleanValue',
360
+ },
361
+
362
+ NullValue: {
363
+ token: 'Name',
364
+ ofValue: 'null',
365
+ tokenName: 'NullValue',
366
+ },
367
+
368
+ EnumValue: {
369
+ token: 'Name',
370
+ butNot: { token: 'Name', oneOf: ['null', 'true', 'false'] },
371
+ tokenName: 'EnumValue',
372
+ },
373
+
374
+ ListValue: [
375
+ { token: '[' },
376
+ { listOfType: 'Value', optional: true },
377
+ { token: ']' },
378
+ ],
379
+
380
+ ConstListValue: [
381
+ { token: '[' },
382
+ { listOfType: 'ConstValue', optional: true },
383
+ { token: ']' },
384
+ ],
385
+
386
+ ObjectValue: [
387
+ { token: '{' },
388
+ { listOfType: 'ObjectField', optional: true },
389
+ { token: '}' },
390
+ ],
391
+ ObjectField: [
392
+ { token: 'Name', tokenName: 'ObjectFieldName' },
393
+ { token: ':' },
394
+ { ofType: 'ConstValue' },
395
+ ],
396
+
397
+ Variable: [
398
+ { token: '$', tokenName: 'VariableName' },
399
+ { token: 'Name', tokenName: 'VariableName' },
400
+ ],
401
+ VariableDefinitions: [
402
+ { token: '(' },
403
+ { listOfType: 'VariableDefinition' },
404
+ { token: ')' },
405
+ ],
406
+ VariableDefinition: [
407
+ 'Variable',
408
+ { token: ':' },
409
+ 'Type',
410
+ { ofType: 'DefaultValue', optional: true },
411
+ ],
412
+ DefaultValue: [{ token: '=' }, 'ConstValue'],
413
+
414
+ TypeName: { token: 'Name', tokenName: 'TypeName', typeName: true },
415
+
416
+ Type: {
417
+ peek: [
418
+ {
419
+ ifCondition: { token: 'Name' },
420
+ expect: ['TypeName', { token: '!', optional: true }],
421
+ },
422
+ {
423
+ ifCondition: { token: '[' },
424
+ expect: 'ListType',
425
+ },
426
+ ],
427
+ },
428
+ ListType: [
429
+ { token: '[' },
430
+ { listOfType: 'Type' },
431
+ { token: ']' },
432
+ { token: '!', optional: true },
433
+ ],
434
+
435
+ Directives: { listOfType: 'Directive' },
436
+ Directive: [
437
+ { token: '@', tokenName: 'DirectiveName' },
438
+ { token: 'Name', tokenName: 'DirectiveName' },
439
+ { ofType: 'Arguments', optional: true },
440
+ ],
441
+
442
+ TypeSystemDefinition: [
443
+ { ofType: 'Description', optional: true },
444
+ {
445
+ peek: [
446
+ {
447
+ ifCondition: {
448
+ target: 'Name',
449
+ ofValue: 'schema',
450
+ },
451
+ expect: 'SchemaDefinition',
452
+ },
453
+ {
454
+ ifCondition: {
455
+ target: 'Name',
456
+ ofValue: 'scalar',
457
+ },
458
+ expect: 'ScalarTypeDefinition',
459
+ },
460
+ {
461
+ ifCondition: {
462
+ target: 'Name',
463
+ ofValue: 'type',
464
+ },
465
+ expect: 'ObjectTypeDefinition',
466
+ },
467
+ {
468
+ ifCondition: {
469
+ target: 'Name',
470
+ ofValue: 'interface',
471
+ },
472
+ expect: 'InterfaceTypeDefinition',
473
+ },
474
+ {
475
+ ifCondition: {
476
+ target: 'Name',
477
+ ofValue: 'union',
478
+ },
479
+ expect: 'UnionTypeDefinition',
480
+ },
481
+ {
482
+ ifCondition: {
483
+ target: 'Name',
484
+ ofValue: 'enum',
485
+ },
486
+ expect: 'EnumTypeDefinition',
487
+ },
488
+ {
489
+ ifCondition: {
490
+ target: 'Name',
491
+ ofValue: 'input',
492
+ },
493
+ expect: 'InputObjectTypeDefinition',
494
+ },
495
+ {
496
+ ifCondition: {
497
+ target: 'Name',
498
+ ofValue: 'directive',
499
+ },
500
+ expect: 'DirectiveDefinition',
501
+ },
502
+ ],
503
+ },
504
+ ],
505
+
506
+ TypeSystemExtension: {
507
+ peek: [
508
+ {
509
+ ifCondition: {
510
+ target: 'Name',
511
+ ofValue: 'schema',
512
+ },
513
+ expect: 'SchemaExtension',
514
+ },
515
+ {
516
+ ifCondition: {
517
+ target: 'Name',
518
+ ofValue: 'scalar',
519
+ },
520
+ expect: 'ScalarTypeExtension',
521
+ },
522
+ {
523
+ ifCondition: {
524
+ target: 'Name',
525
+ ofValue: 'type',
526
+ },
527
+ expect: 'ObjectTypeExtension',
528
+ },
529
+ {
530
+ ifCondition: {
531
+ target: 'Name',
532
+ ofValue: 'interface',
533
+ },
534
+ expect: 'InterfaceTypeExtension',
535
+ },
536
+ {
537
+ ifCondition: {
538
+ target: 'Name',
539
+ ofValue: 'union',
540
+ },
541
+ expect: 'UnionTypeExtension',
542
+ },
543
+ {
544
+ ifCondition: {
545
+ target: 'Name',
546
+ ofValue: 'enum',
547
+ },
548
+ expect: 'EnumTypeExtension',
549
+ },
550
+ {
551
+ ifCondition: {
552
+ target: 'Name',
553
+ ofValue: 'input',
554
+ },
555
+ expect: 'InputObjectTypeExtension',
556
+ },
557
+ ],
558
+ },
559
+
560
+ SchemaDefinition: [
561
+ {
562
+ token: 'Name',
563
+ ofValue: 'schema',
564
+ tokenName: 'SchemaDefinitionKeyword',
565
+ },
566
+ { ofType: 'Directives', optional: true },
567
+ { token: '{' },
568
+ { listOfType: 'RootOperationTypeDefinition' },
569
+ { token: '}' },
570
+ ],
571
+ RootOperationTypeDefinition: [
572
+ 'OperationType',
573
+ { token: ':' },
574
+ { token: 'Name', tokenName: 'OperationTypeDefinitionName' },
575
+ ],
576
+
577
+ SchemaExtension: [
578
+ { token: 'Name', ofValue: 'extend' },
579
+ { token: 'Name', ofValue: 'schema' },
580
+ 'Name',
581
+ {
582
+ peek: [
583
+ {
584
+ ifCondition: { token: '@' },
585
+ expect: [
586
+ 'Directives',
587
+ {
588
+ ofType: [
589
+ { token: '{' },
590
+ { listOfType: 'RootOperationTypeDefinition' },
591
+ { token: '}' },
592
+ ],
593
+ optional: true,
594
+ },
595
+ ],
596
+ },
597
+ {
598
+ ifCondition: { token: '{' },
599
+ expect: [
600
+ { token: '{' },
601
+ { listOfType: 'RootOperationTypeDefinition' },
602
+ { token: '}' },
603
+ ],
604
+ },
605
+ ],
606
+ },
607
+ ],
608
+
609
+ Description: 'StringValue',
610
+
611
+ ScalarTypeDefinition: [
612
+ { ofType: 'Description', optional: true },
613
+ {
614
+ token: 'Name',
615
+ ofValue: 'scalar',
616
+ tokenName: 'ScalarDefinitionKeyword',
617
+ },
618
+ 'TypeName',
619
+ { ofType: 'Directives', optional: true },
620
+ ],
621
+
622
+ ScalarTypeExtension: [
623
+ {
624
+ token: 'Name',
625
+ ofValue: 'extend',
626
+ tokenName: 'ExtendDefinitionKeyword',
627
+ },
628
+ {
629
+ token: 'Name',
630
+ ofValue: 'scalar',
631
+ tokenName: 'ScalarDefinitionKeyword',
632
+ },
633
+ 'TypeName',
634
+ 'Directives',
635
+ ],
636
+
637
+ ObjectTypeDefinition: [
638
+ { ofType: 'Description', optional: true },
639
+ {
640
+ token: 'Name',
641
+ ofValue: 'type',
642
+ tokenName: 'TypeDefinitionKeyword',
643
+ },
644
+ 'TypeName',
645
+ { ofType: 'ImplementsInterfaces', optional: true },
646
+ { ofType: 'Directives', optional: true },
647
+ { ofType: 'FieldsDefinition', optional: true },
648
+ ],
649
+ ImplementsInterfaces: [
650
+ {
651
+ token: 'Name',
652
+ ofValue: 'implements',
653
+ tokenName: 'ImplementsKeyword',
654
+ },
655
+ { token: '&', optional: true },
656
+ 'TypeName',
657
+ {
658
+ listOfType: 'ImplementsAdditionalInterfaceName',
659
+ optional: true,
660
+ },
661
+ ],
662
+ ImplementsAdditionalInterfaceName: [{ token: '&' }, 'TypeName'],
663
+ FieldsDefinition: [
664
+ { token: '{' },
665
+ { listOfType: 'FieldDefinition' },
666
+ { token: '}' },
667
+ ],
668
+ FieldDefinition: [
669
+ { ofType: 'Description', optional: true },
670
+ { token: 'Name', tokenName: 'AliasName', definitionName: true },
671
+ { ofType: 'ArgumentsDefinition', optional: true },
672
+ { token: ':' },
673
+ 'Type',
674
+ { ofType: 'Directives', optional: true },
675
+ ],
676
+
677
+ ArgumentsDefinition: [
678
+ { token: '(' },
679
+ { listOfType: 'InputValueDefinition' },
680
+ { token: ')' },
681
+ ],
682
+ InputValueDefinition: [
683
+ { ofType: 'Description', optional: true },
684
+ { token: 'Name', tokenName: 'ArgumentName' },
685
+ { token: ':' },
686
+ 'Type',
687
+ { ofType: 'DefaultValue', optional: true },
688
+ { ofType: 'Directives', optional: true },
689
+ ],
690
+
691
+ ObjectTypeExtension: [
692
+ {
693
+ token: 'Name',
694
+ ofValue: 'extend',
695
+ tokenName: 'ExtendDefinitionKeyword',
696
+ },
697
+ {
698
+ token: 'Name',
699
+ ofValue: 'type',
700
+ tokenName: 'TypeDefinitionKeyword',
701
+ },
702
+ 'TypeName',
703
+ {
704
+ peek: [
705
+ {
706
+ ifCondition: { token: 'Name', ofValue: 'interface' },
707
+ expect: [
708
+ 'ImplementsInterfaces',
709
+ {
710
+ peek: [
711
+ {
712
+ ifCondition: { token: '@' },
713
+ expect: [
714
+ 'Directives',
715
+ { ofType: 'FieldsDefinition', optional: true },
716
+ ],
717
+ },
718
+ {
719
+ ifCondition: { token: '{' },
720
+ expect: 'FieldsDefinition',
721
+ },
722
+ ],
723
+ optional: true,
724
+ },
725
+ ],
726
+ },
727
+ {
728
+ ifCondition: { token: '@' },
729
+ expect: [
730
+ 'Directives',
731
+ { ofType: 'FieldsDefinition', optional: true },
732
+ ],
733
+ },
734
+ {
735
+ ifCondition: { token: '{' },
736
+ expect: 'FieldsDefinition',
737
+ },
738
+ ],
739
+ },
740
+ ],
741
+
742
+ InterfaceTypeDefinition: [
743
+ { ofType: 'Description', optional: true },
744
+ {
745
+ token: 'Name',
746
+ ofValue: 'interface',
747
+ tokenName: 'InterfaceDefinitionKeyword',
748
+ },
749
+ 'TypeName',
750
+ { ofType: 'Directives', optional: true },
751
+ { ofType: 'FieldsDefinition', optional: true },
752
+ ],
753
+
754
+ InterfaceTypeExtension: [
755
+ {
756
+ token: 'Name',
757
+ ofValue: 'extend',
758
+ tokenName: 'ExtendDefinitionKeyword',
759
+ },
760
+ {
761
+ token: 'Name',
762
+ ofValue: 'interface',
763
+ tokenName: 'InterfaceDefinitionKeyword',
764
+ },
765
+ 'TypeName',
766
+ {
767
+ peek: [
768
+ {
769
+ ifCondition: { token: '@' },
770
+ expect: [
771
+ 'Directives',
772
+ { ofType: 'FieldsDefinition', optional: true },
773
+ ],
774
+ },
775
+ {
776
+ ifCondition: { token: '{' },
777
+ expect: 'FieldsDefinition',
778
+ },
779
+ ],
780
+ },
781
+ ],
782
+
783
+ UnionTypeDefinition: [
784
+ { ofType: 'Description', optional: true },
785
+ {
786
+ token: 'Name',
787
+ ofValue: 'union',
788
+ tokenName: 'UnionDefinitionKeyword',
789
+ },
790
+ 'TypeName',
791
+ { ofType: 'Directives', optional: true },
792
+ { ofType: 'UnionMemberTypes', optional: true },
793
+ ],
794
+
795
+ UnionMemberTypes: [
796
+ { token: '=' },
797
+ { token: '|', optional: true },
798
+ 'Name',
799
+ {
800
+ listOfType: 'UnionMemberAdditionalTypeName',
801
+ optional: true,
802
+ },
803
+ ],
804
+
805
+ UnionMemberAdditionalTypeName: [{ token: '|' }, 'TypeName'],
806
+
807
+ UnionTypeExtension: [
808
+ {
809
+ token: 'Name',
810
+ ofValue: 'extend',
811
+ tokenName: 'ExtendDefinitionKeyword',
812
+ },
813
+ {
814
+ token: 'Name',
815
+ ofValue: 'union',
816
+ tokenName: 'UnionDefinitionKeyword',
817
+ },
818
+ 'TypeName',
819
+ {
820
+ peek: [
821
+ {
822
+ ifCondition: { token: '@' },
823
+ expect: [
824
+ 'Directives',
825
+ { ofType: 'UnionMemberTypes', optional: true },
826
+ ],
827
+ },
828
+ {
829
+ ifCondition: { token: '=' },
830
+ expect: 'UnionMemberTypes',
831
+ },
832
+ ],
833
+ },
834
+ ],
835
+
836
+ EnumTypeDefinition: [
837
+ { ofType: 'Description', optional: true },
838
+ {
839
+ token: 'Name',
840
+ ofValue: 'enum',
841
+ tokenName: 'EnumDefinitionKeyword',
842
+ },
843
+ 'TypeName',
844
+ { ofType: 'Directives', optional: true },
845
+ { ofType: 'EnumValuesDefinition', optional: true },
846
+ ],
847
+ EnumValuesDefinition: [
848
+ { token: '{' },
849
+ { listOfType: 'EnumValueDefinition' },
850
+ { token: '}' },
851
+ ],
852
+ EnumValueDefinition: [
853
+ { ofType: 'Description', optional: true },
854
+ 'EnumValue',
855
+ { ofType: 'Directives', optional: true },
856
+ ],
857
+
858
+ EnumTypeExtension: [
859
+ {
860
+ token: 'Name',
861
+ ofValue: 'extend',
862
+ tokenName: 'ExtendDefinitionKeyword',
863
+ },
864
+ {
865
+ token: 'Name',
866
+ ofValue: 'enum',
867
+ tokenName: 'EnumDefinitionKeyword',
868
+ },
869
+ 'TypeName',
870
+ {
871
+ peek: [
872
+ {
873
+ ifCondition: { token: '@' },
874
+ expect: [
875
+ 'Directives',
876
+ { ofType: 'EnumValuesDefinition', optional: true },
877
+ ],
878
+ },
879
+ {
880
+ ifCondition: { token: '{' },
881
+ expect: 'EnumValuesDefinition',
882
+ },
883
+ ],
884
+ },
885
+ ],
886
+
887
+ InputObjectTypeDefinition: [
888
+ { ofType: 'Description', optional: true },
889
+ {
890
+ token: 'Name',
891
+ ofValue: 'input',
892
+ tokenName: 'InputDefinitionKeyword',
893
+ },
894
+ 'TypeName',
895
+ { ofType: 'Directives', optional: true },
896
+ { ofType: 'InputFieldsDefinition', optional: true },
897
+ ],
898
+ InputFieldsDefinition: [
899
+ { token: '{' },
900
+ { listOfType: 'InputValueDefinition' },
901
+ { token: '}' },
902
+ ],
903
+
904
+ InputObjectTypeExtension: [
905
+ {
906
+ token: 'Name',
907
+ ofValue: 'extend',
908
+ tokenName: 'ExtendDefinitionKeyword',
909
+ },
910
+ {
911
+ token: 'Name',
912
+ ofValue: 'input',
913
+ tokenName: 'InputDefinitionKeyword',
914
+ },
915
+ 'TypeName',
916
+ {
917
+ peek: [
918
+ {
919
+ ifCondition: { token: '@' },
920
+ expect: [
921
+ 'Directives',
922
+ { ofType: 'InputFieldsDefinition', optional: true },
923
+ ],
924
+ },
925
+ {
926
+ ifCondition: { token: '{' },
927
+ expect: 'InputFieldsDefinition',
928
+ },
929
+ ],
930
+ },
931
+ ],
932
+
933
+ DirectiveDefinition: [
934
+ { ofType: 'Description', optional: true },
935
+ {
936
+ token: 'Name',
937
+ ofValue: 'directive',
938
+ tokenName: 'DirectiveDefinitionKeyword',
939
+ },
940
+ { token: '@', tokenName: 'DirectiveName' },
941
+ { token: 'Name', tokenName: 'DirectiveName' },
942
+ { ofType: 'ArgumentsDefinition', optional: true },
943
+ { token: 'Name', ofValue: 'on', tokenName: 'OnKeyword' },
944
+ 'DirectiveLocations',
945
+ ],
946
+ DirectiveLocations: [
947
+ { token: '|', optional: true },
948
+ 'DirectiveLocation',
949
+ {
950
+ listOfType: 'DirectiveLocationAdditionalName',
951
+ optional: true,
952
+ },
953
+ ],
954
+ DirectiveLocationAdditionalName: [{ token: '|' }, 'DirectiveLocation'],
955
+ DirectiveLocation: {
956
+ peek: [
957
+ {
958
+ ifCondition: 'ExecutableDirectiveLocation',
959
+ expect: 'ExecutableDirectiveLocation',
960
+ },
961
+ {
962
+ ifCondition: 'TypeSystemDirectiveLocation',
963
+ expect: 'TypeSystemDirectiveLocation',
964
+ },
965
+ ],
966
+ },
967
+ ExecutableDirectiveLocation: {
968
+ token: 'Name',
969
+ oneOf: [
970
+ 'QUERY',
971
+ 'MUTATION',
972
+ 'SUBSCRIPTION',
973
+ 'FIELD',
974
+ 'FRAGMENT_DEFINITION',
975
+ 'FRAGMENT_SPREAD',
976
+ 'INLINE_FRAGMENT',
977
+ ],
978
+ tokenName: 'EnumValue',
979
+ },
980
+ TypeSystemDirectiveLocation: {
981
+ token: 'Name',
982
+ oneOf: [
983
+ 'SCHEMA',
984
+ 'SCALAR',
985
+ 'OBJECT',
986
+ 'FIELD_DEFINITION',
987
+ 'ARGUMENT_DEFINITION',
988
+ 'INTERFACE',
989
+ 'UNION',
990
+ 'ENUM',
991
+ 'ENUM_VALUE',
992
+ 'INPUT_OBJECT',
993
+ 'INPUT_FIELD_DEFINITION',
994
+ ],
995
+ tokenName: 'EnumValue',
996
+ },
997
+ // FIXME: enforce proper typing
998
+ }: any);
999
+
1000
+ export default grammar;