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