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.
Files changed (377) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +1 -1
  3. package/error/GraphQLError.js +12 -10
  4. package/error/GraphQLError.js.flow +11 -6
  5. package/error/GraphQLError.mjs +20 -3
  6. package/error/formatError.js +2 -2
  7. package/error/formatError.js.flow +3 -3
  8. package/error/formatError.mjs +2 -2
  9. package/error/index.js +1 -1
  10. package/error/index.js.flow +5 -2
  11. package/error/index.mjs +2 -2
  12. package/error/locatedError.js +2 -2
  13. package/error/locatedError.js.flow +2 -2
  14. package/error/locatedError.mjs +2 -2
  15. package/error/printError.js +2 -2
  16. package/error/printError.js.flow +4 -5
  17. package/error/printError.mjs +2 -2
  18. package/error/syntaxError.js +2 -2
  19. package/error/syntaxError.js.flow +2 -2
  20. package/error/syntaxError.mjs +2 -2
  21. package/execution/execute.js +52 -37
  22. package/execution/execute.js.flow +66 -51
  23. package/execution/execute.mjs +50 -38
  24. package/execution/index.js +7 -1
  25. package/execution/index.js.flow +9 -4
  26. package/execution/index.mjs +3 -3
  27. package/execution/values.js +11 -11
  28. package/execution/values.js.flow +23 -19
  29. package/execution/values.mjs +11 -11
  30. package/graphql.js +13 -9
  31. package/graphql.js.flow +28 -10
  32. package/graphql.mjs +10 -9
  33. package/index.js +83 -53
  34. package/index.js.flow +60 -47
  35. package/index.mjs +26 -23
  36. package/jsutils/ObjMap.js +1 -1
  37. package/jsutils/ObjMap.js.flow +1 -1
  38. package/jsutils/ObjMap.mjs +1 -0
  39. package/jsutils/PromiseOrValue.js +1 -0
  40. package/jsutils/{MaybePromise.js.flow → PromiseOrValue.js.flow} +2 -2
  41. package/jsutils/PromiseOrValue.mjs +1 -0
  42. package/jsutils/dedent.js +2 -2
  43. package/jsutils/dedent.js.flow +1 -1
  44. package/jsutils/dedent.mjs +2 -2
  45. package/jsutils/defineToJSON.js +2 -2
  46. package/jsutils/defineToJSON.js.flow +1 -1
  47. package/jsutils/defineToJSON.mjs +2 -2
  48. package/jsutils/defineToStringTag.js +2 -2
  49. package/jsutils/defineToStringTag.js.flow +1 -1
  50. package/jsutils/defineToStringTag.mjs +2 -2
  51. package/jsutils/inspect.js +94 -19
  52. package/jsutils/inspect.js.flow +98 -20
  53. package/jsutils/inspect.mjs +94 -20
  54. package/jsutils/instanceOf.js +2 -2
  55. package/jsutils/instanceOf.js.flow +1 -1
  56. package/jsutils/instanceOf.mjs +2 -2
  57. package/jsutils/invariant.js +5 -3
  58. package/jsutils/invariant.js.flow +3 -2
  59. package/jsutils/invariant.mjs +5 -3
  60. package/jsutils/isInvalid.js +2 -2
  61. package/jsutils/isInvalid.js.flow +1 -1
  62. package/jsutils/isInvalid.mjs +2 -2
  63. package/jsutils/isNullish.js +2 -2
  64. package/jsutils/isNullish.js.flow +1 -1
  65. package/jsutils/isNullish.mjs +2 -2
  66. package/jsutils/isPromise.js +2 -2
  67. package/jsutils/isPromise.js.flow +1 -1
  68. package/jsutils/isPromise.mjs +2 -2
  69. package/jsutils/keyMap.js +4 -3
  70. package/jsutils/keyMap.js.flow +6 -6
  71. package/jsutils/keyMap.mjs +4 -3
  72. package/jsutils/keyValMap.js +4 -3
  73. package/jsutils/keyValMap.js.flow +6 -6
  74. package/jsutils/keyValMap.mjs +4 -3
  75. package/jsutils/mapValue.js +2 -2
  76. package/jsutils/mapValue.js.flow +2 -2
  77. package/jsutils/mapValue.mjs +2 -2
  78. package/jsutils/memoize3.js +3 -3
  79. package/jsutils/memoize3.js.flow +2 -2
  80. package/jsutils/memoize3.mjs +3 -3
  81. package/jsutils/nodejsCustomInspectSymbol.js +2 -2
  82. package/jsutils/nodejsCustomInspectSymbol.js.flow +1 -1
  83. package/jsutils/nodejsCustomInspectSymbol.mjs +2 -2
  84. package/jsutils/orList.js +2 -2
  85. package/jsutils/orList.js.flow +1 -1
  86. package/jsutils/orList.mjs +2 -2
  87. package/jsutils/promiseForObject.js +2 -2
  88. package/jsutils/promiseForObject.js.flow +2 -2
  89. package/jsutils/promiseForObject.mjs +2 -2
  90. package/jsutils/promiseReduce.js +2 -2
  91. package/jsutils/promiseReduce.js.flow +5 -5
  92. package/jsutils/promiseReduce.mjs +2 -2
  93. package/jsutils/quotedOrList.js +2 -2
  94. package/jsutils/quotedOrList.js.flow +1 -1
  95. package/jsutils/quotedOrList.mjs +2 -2
  96. package/jsutils/suggestionList.js +2 -2
  97. package/jsutils/suggestionList.js.flow +1 -1
  98. package/jsutils/suggestionList.mjs +2 -2
  99. package/language/ast.js +1 -1
  100. package/language/ast.js.flow +3 -3
  101. package/language/ast.mjs +1 -0
  102. package/language/blockString.js +114 -0
  103. package/language/blockString.js.flow +102 -0
  104. package/language/blockString.mjs +104 -0
  105. package/language/directiveLocation.js +2 -2
  106. package/language/directiveLocation.js.flow +1 -1
  107. package/language/directiveLocation.mjs +2 -2
  108. package/language/index.js +9 -9
  109. package/language/index.js.flow +10 -5
  110. package/language/index.mjs +3 -3
  111. package/language/kinds.js +2 -2
  112. package/language/kinds.js.flow +1 -1
  113. package/language/kinds.mjs +2 -2
  114. package/language/lexer.js +52 -44
  115. package/language/lexer.js.flow +65 -54
  116. package/language/lexer.mjs +49 -43
  117. package/language/location.js +2 -2
  118. package/language/location.js.flow +2 -2
  119. package/language/location.mjs +2 -2
  120. package/language/parser.js +75 -67
  121. package/language/parser.js.flow +138 -127
  122. package/language/parser.mjs +76 -68
  123. package/language/predicates.js +2 -2
  124. package/language/predicates.js.flow +2 -2
  125. package/language/predicates.mjs +2 -2
  126. package/language/printer.js +6 -14
  127. package/language/printer.js.flow +8 -17
  128. package/language/printer.mjs +5 -14
  129. package/language/source.js +2 -2
  130. package/language/source.js.flow +1 -1
  131. package/language/source.mjs +2 -2
  132. package/language/visitor.js +4 -6
  133. package/language/visitor.js.flow +3 -3
  134. package/language/visitor.mjs +4 -6
  135. package/package.json +1 -1
  136. package/polyfills/find.js +2 -2
  137. package/polyfills/find.js.flow +1 -1
  138. package/polyfills/find.mjs +2 -2
  139. package/polyfills/flatMap.js +38 -0
  140. package/polyfills/flatMap.js.flow +34 -0
  141. package/polyfills/flatMap.mjs +30 -0
  142. package/polyfills/isFinite.js +2 -2
  143. package/polyfills/isFinite.js.flow +1 -1
  144. package/polyfills/isFinite.mjs +2 -2
  145. package/polyfills/isInteger.js +2 -2
  146. package/polyfills/isInteger.js.flow +1 -1
  147. package/polyfills/isInteger.mjs +2 -2
  148. package/polyfills/objectEntries.js +2 -2
  149. package/polyfills/objectEntries.js.flow +2 -2
  150. package/polyfills/objectEntries.mjs +2 -2
  151. package/polyfills/objectValues.js +2 -2
  152. package/polyfills/objectValues.js.flow +2 -2
  153. package/polyfills/objectValues.mjs +2 -2
  154. package/subscription/asyncIteratorReject.js +1 -1
  155. package/subscription/asyncIteratorReject.js.flow +1 -1
  156. package/subscription/asyncIteratorReject.mjs +2 -2
  157. package/subscription/index.js +1 -1
  158. package/subscription/index.js.flow +1 -1
  159. package/subscription/index.mjs +2 -2
  160. package/subscription/mapAsyncIterator.js +1 -1
  161. package/subscription/mapAsyncIterator.js.flow +5 -5
  162. package/subscription/mapAsyncIterator.mjs +2 -2
  163. package/subscription/subscribe.js +2 -2
  164. package/subscription/subscribe.js.flow +6 -6
  165. package/subscription/subscribe.mjs +2 -2
  166. package/type/definition.js +138 -22
  167. package/type/definition.js.flow +184 -36
  168. package/type/definition.mjs +136 -23
  169. package/type/directives.js +14 -3
  170. package/type/directives.js.flow +24 -11
  171. package/type/directives.mjs +16 -5
  172. package/type/index.js +7 -7
  173. package/type/index.js.flow +8 -4
  174. package/type/index.mjs +10 -6
  175. package/type/introspection.js +14 -9
  176. package/type/introspection.js.flow +12 -18
  177. package/type/introspection.mjs +14 -9
  178. package/type/scalars.js +5 -4
  179. package/type/scalars.js.flow +4 -10
  180. package/type/scalars.mjs +7 -6
  181. package/type/schema.js +55 -3
  182. package/type/schema.js.flow +73 -17
  183. package/type/schema.mjs +56 -4
  184. package/type/validate.js +19 -47
  185. package/type/validate.js.flow +17 -29
  186. package/type/validate.mjs +18 -47
  187. package/utilities/TypeInfo.js +93 -73
  188. package/utilities/TypeInfo.js.flow +30 -23
  189. package/utilities/TypeInfo.mjs +93 -73
  190. package/utilities/assertValidName.js +2 -2
  191. package/utilities/assertValidName.js.flow +2 -2
  192. package/utilities/assertValidName.mjs +2 -2
  193. package/utilities/astFromValue.js +5 -4
  194. package/utilities/astFromValue.js.flow +8 -7
  195. package/utilities/astFromValue.mjs +7 -6
  196. package/utilities/buildASTSchema.js +63 -62
  197. package/utilities/buildASTSchema.js.flow +92 -108
  198. package/utilities/buildASTSchema.mjs +61 -62
  199. package/utilities/buildClientSchema.js +38 -45
  200. package/utilities/buildClientSchema.js.flow +66 -79
  201. package/utilities/buildClientSchema.mjs +37 -44
  202. package/utilities/coerceValue.js +6 -7
  203. package/utilities/coerceValue.js.flow +5 -4
  204. package/utilities/coerceValue.mjs +7 -8
  205. package/utilities/concatAST.js +9 -13
  206. package/utilities/concatAST.js.flow +4 -10
  207. package/utilities/concatAST.mjs +6 -13
  208. package/utilities/extendSchema.js +219 -511
  209. package/utilities/extendSchema.js.flow +195 -304
  210. package/utilities/extendSchema.mjs +218 -512
  211. package/utilities/findBreakingChanges.js +54 -95
  212. package/utilities/findBreakingChanges.js.flow +49 -47
  213. package/utilities/findBreakingChanges.mjs +80 -95
  214. package/utilities/findDeprecatedUsages.js +4 -4
  215. package/utilities/findDeprecatedUsages.js.flow +5 -5
  216. package/utilities/findDeprecatedUsages.mjs +4 -4
  217. package/utilities/getOperationAST.js +2 -2
  218. package/utilities/getOperationAST.js.flow +5 -2
  219. package/utilities/getOperationAST.mjs +2 -2
  220. package/utilities/getOperationRootType.js +24 -24
  221. package/utilities/getOperationRootType.js.flow +40 -35
  222. package/utilities/getOperationRootType.mjs +24 -24
  223. package/utilities/index.js +9 -1
  224. package/utilities/index.js.flow +13 -6
  225. package/utilities/index.mjs +13 -8
  226. package/utilities/introspectionFromSchema.js +6 -4
  227. package/utilities/introspectionFromSchema.js.flow +8 -7
  228. package/utilities/introspectionFromSchema.mjs +6 -5
  229. package/utilities/introspectionQuery.js +2 -2
  230. package/utilities/introspectionQuery.js.flow +2 -2
  231. package/utilities/introspectionQuery.mjs +2 -2
  232. package/utilities/isValidJSValue.js +4 -2
  233. package/utilities/isValidJSValue.js.flow +3 -2
  234. package/utilities/isValidJSValue.mjs +4 -2
  235. package/utilities/isValidLiteralValue.js +2 -2
  236. package/utilities/isValidLiteralValue.js.flow +4 -4
  237. package/utilities/isValidLiteralValue.mjs +2 -2
  238. package/utilities/lexicographicSortSchema.js +84 -123
  239. package/utilities/lexicographicSortSchema.js.flow +68 -96
  240. package/utilities/lexicographicSortSchema.mjs +84 -123
  241. package/utilities/schemaPrinter.js +47 -73
  242. package/utilities/schemaPrinter.js.flow +69 -120
  243. package/utilities/schemaPrinter.mjs +45 -72
  244. package/utilities/separateOperations.js +8 -12
  245. package/utilities/separateOperations.js.flow +6 -3
  246. package/utilities/separateOperations.mjs +8 -12
  247. package/utilities/stripIgnoredCharacters.js +140 -0
  248. package/utilities/stripIgnoredCharacters.js.flow +129 -0
  249. package/utilities/stripIgnoredCharacters.mjs +127 -0
  250. package/utilities/typeComparators.js +2 -2
  251. package/utilities/typeComparators.js.flow +4 -3
  252. package/utilities/typeComparators.mjs +2 -2
  253. package/utilities/typeFromAST.js +9 -4
  254. package/utilities/typeFromAST.js.flow +15 -9
  255. package/utilities/typeFromAST.mjs +6 -4
  256. package/utilities/valueFromAST.js +7 -4
  257. package/utilities/valueFromAST.js.flow +7 -5
  258. package/utilities/valueFromAST.mjs +6 -4
  259. package/utilities/valueFromASTUntyped.js +11 -6
  260. package/utilities/valueFromASTUntyped.js.flow +9 -5
  261. package/utilities/valueFromASTUntyped.mjs +10 -6
  262. package/validation/ValidationContext.js +1 -1
  263. package/validation/ValidationContext.js.flow +19 -20
  264. package/validation/ValidationContext.mjs +2 -2
  265. package/validation/index.js +1 -1
  266. package/validation/index.js.flow +2 -1
  267. package/validation/index.mjs +3 -2
  268. package/validation/rules/ExecutableDefinitions.js +3 -3
  269. package/validation/rules/ExecutableDefinitions.js.flow +4 -4
  270. package/validation/rules/ExecutableDefinitions.mjs +3 -3
  271. package/validation/rules/FieldsOnCorrectType.js +3 -3
  272. package/validation/rules/FieldsOnCorrectType.js.flow +7 -7
  273. package/validation/rules/FieldsOnCorrectType.mjs +3 -3
  274. package/validation/rules/FragmentsOnCompositeTypes.js +4 -4
  275. package/validation/rules/FragmentsOnCompositeTypes.js.flow +5 -5
  276. package/validation/rules/FragmentsOnCompositeTypes.mjs +4 -4
  277. package/validation/rules/KnownArgumentNames.js +1 -1
  278. package/validation/rules/KnownArgumentNames.js.flow +5 -5
  279. package/validation/rules/KnownArgumentNames.mjs +2 -2
  280. package/validation/rules/KnownDirectives.js +8 -6
  281. package/validation/rules/KnownDirectives.js.flow +11 -9
  282. package/validation/rules/KnownDirectives.mjs +8 -6
  283. package/validation/rules/KnownFragmentNames.js +3 -3
  284. package/validation/rules/KnownFragmentNames.js.flow +4 -4
  285. package/validation/rules/KnownFragmentNames.mjs +3 -3
  286. package/validation/rules/KnownTypeNames.js +2 -2
  287. package/validation/rules/KnownTypeNames.js.flow +6 -6
  288. package/validation/rules/KnownTypeNames.mjs +2 -2
  289. package/validation/rules/LoneAnonymousOperation.js +3 -3
  290. package/validation/rules/LoneAnonymousOperation.js.flow +4 -4
  291. package/validation/rules/LoneAnonymousOperation.mjs +3 -3
  292. package/validation/rules/LoneSchemaDefinition.js +2 -2
  293. package/validation/rules/LoneSchemaDefinition.js.flow +3 -3
  294. package/validation/rules/LoneSchemaDefinition.mjs +2 -2
  295. package/validation/rules/NoFragmentCycles.js +2 -2
  296. package/validation/rules/NoFragmentCycles.js.flow +4 -4
  297. package/validation/rules/NoFragmentCycles.mjs +2 -2
  298. package/validation/rules/NoUndefinedVariables.js +2 -2
  299. package/validation/rules/NoUndefinedVariables.js.flow +3 -3
  300. package/validation/rules/NoUndefinedVariables.mjs +2 -2
  301. package/validation/rules/NoUnusedFragments.js +7 -7
  302. package/validation/rules/NoUnusedFragments.js.flow +4 -4
  303. package/validation/rules/NoUnusedFragments.mjs +7 -7
  304. package/validation/rules/NoUnusedVariables.js +5 -5
  305. package/validation/rules/NoUnusedVariables.js.flow +6 -5
  306. package/validation/rules/NoUnusedVariables.mjs +5 -5
  307. package/validation/rules/OverlappingFieldsCanBeMerged.js +26 -23
  308. package/validation/rules/OverlappingFieldsCanBeMerged.js.flow +17 -17
  309. package/validation/rules/OverlappingFieldsCanBeMerged.mjs +26 -23
  310. package/validation/rules/PossibleFragmentSpreads.js +4 -4
  311. package/validation/rules/PossibleFragmentSpreads.js.flow +5 -5
  312. package/validation/rules/PossibleFragmentSpreads.mjs +4 -4
  313. package/validation/rules/PossibleTypeExtensions.js +3 -3
  314. package/validation/rules/PossibleTypeExtensions.js.flow +5 -5
  315. package/validation/rules/PossibleTypeExtensions.mjs +4 -4
  316. package/validation/rules/ProvidedRequiredArguments.js +6 -8
  317. package/validation/rules/ProvidedRequiredArguments.js.flow +8 -8
  318. package/validation/rules/ProvidedRequiredArguments.mjs +7 -9
  319. package/validation/rules/ScalarLeafs.js +4 -4
  320. package/validation/rules/ScalarLeafs.js.flow +6 -6
  321. package/validation/rules/ScalarLeafs.mjs +4 -4
  322. package/validation/rules/SingleFieldSubscriptions.js +2 -2
  323. package/validation/rules/SingleFieldSubscriptions.js.flow +4 -4
  324. package/validation/rules/SingleFieldSubscriptions.mjs +2 -2
  325. package/validation/rules/UniqueArgumentNames.js +2 -2
  326. package/validation/rules/UniqueArgumentNames.js.flow +3 -3
  327. package/validation/rules/UniqueArgumentNames.mjs +2 -2
  328. package/validation/rules/UniqueDirectiveNames.js +2 -2
  329. package/validation/rules/UniqueDirectiveNames.js.flow +3 -3
  330. package/validation/rules/UniqueDirectiveNames.mjs +2 -2
  331. package/validation/rules/UniqueDirectivesPerLocation.js +3 -2
  332. package/validation/rules/UniqueDirectivesPerLocation.js.flow +4 -4
  333. package/validation/rules/UniqueDirectivesPerLocation.mjs +3 -2
  334. package/validation/rules/UniqueEnumValueNames.js +4 -8
  335. package/validation/rules/UniqueEnumValueNames.js.flow +6 -8
  336. package/validation/rules/UniqueEnumValueNames.mjs +4 -8
  337. package/validation/rules/UniqueFieldDefinitionNames.js +4 -8
  338. package/validation/rules/UniqueFieldDefinitionNames.js.flow +6 -8
  339. package/validation/rules/UniqueFieldDefinitionNames.mjs +4 -8
  340. package/validation/rules/UniqueFragmentNames.js +2 -2
  341. package/validation/rules/UniqueFragmentNames.js.flow +3 -3
  342. package/validation/rules/UniqueFragmentNames.mjs +2 -2
  343. package/validation/rules/UniqueInputFieldNames.js +2 -4
  344. package/validation/rules/UniqueInputFieldNames.js.flow +3 -4
  345. package/validation/rules/UniqueInputFieldNames.mjs +2 -4
  346. package/validation/rules/UniqueOperationNames.js +2 -2
  347. package/validation/rules/UniqueOperationNames.js.flow +3 -3
  348. package/validation/rules/UniqueOperationNames.mjs +2 -2
  349. package/validation/rules/UniqueOperationTypes.js +2 -2
  350. package/validation/rules/UniqueOperationTypes.js.flow +3 -3
  351. package/validation/rules/UniqueOperationTypes.mjs +2 -2
  352. package/validation/rules/UniqueTypeNames.js +2 -2
  353. package/validation/rules/UniqueTypeNames.js.flow +4 -4
  354. package/validation/rules/UniqueTypeNames.mjs +2 -2
  355. package/validation/rules/UniqueVariableNames.js +2 -2
  356. package/validation/rules/UniqueVariableNames.js.flow +4 -4
  357. package/validation/rules/UniqueVariableNames.mjs +2 -2
  358. package/validation/rules/ValuesOfCorrectType.js +2 -2
  359. package/validation/rules/ValuesOfCorrectType.js.flow +5 -5
  360. package/validation/rules/ValuesOfCorrectType.mjs +2 -2
  361. package/validation/rules/VariablesAreInputTypes.js +3 -3
  362. package/validation/rules/VariablesAreInputTypes.js.flow +5 -5
  363. package/validation/rules/VariablesAreInputTypes.mjs +3 -3
  364. package/validation/rules/VariablesInAllowedPosition.js +3 -3
  365. package/validation/rules/VariablesInAllowedPosition.js.flow +7 -8
  366. package/validation/rules/VariablesInAllowedPosition.mjs +3 -3
  367. package/validation/specifiedRules.js +2 -2
  368. package/validation/specifiedRules.js.flow +13 -6
  369. package/validation/specifiedRules.mjs +7 -7
  370. package/validation/validate.js +2 -2
  371. package/validation/validate.js.flow +10 -6
  372. package/validation/validate.mjs +2 -2
  373. package/jsutils/MaybePromise.js +0 -1
  374. package/jsutils/MaybePromise.mjs +0 -0
  375. package/language/blockStringValue.js +0 -73
  376. package/language/blockStringValue.js.flow +0 -64
  377. package/language/blockStringValue.mjs +0 -66
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Copyright (c) 2015-present, Facebook, Inc.
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 type { GraphQLError } from '../error';
15
- import { createLexer, TokenKind, getTokenDesc } from './lexer';
16
- import type { Lexer, TokenKindEnum } from './lexer';
17
- import type {
18
- Location,
19
- Token,
20
- NameNode,
21
- VariableNode,
22
- DocumentNode,
23
- DefinitionNode,
24
- ExecutableDefinitionNode,
25
- OperationDefinitionNode,
26
- OperationTypeNode,
27
- VariableDefinitionNode,
28
- SelectionSetNode,
29
- SelectionNode,
30
- FieldNode,
31
- ArgumentNode,
32
- FragmentSpreadNode,
33
- InlineFragmentNode,
34
- FragmentDefinitionNode,
35
- ValueNode,
36
- StringValueNode,
37
- ListValueNode,
38
- ObjectValueNode,
39
- ObjectFieldNode,
40
- DirectiveNode,
41
- TypeNode,
42
- NamedTypeNode,
43
- ListTypeNode,
44
- NonNullTypeNode,
45
- TypeSystemDefinitionNode,
46
- SchemaDefinitionNode,
47
- OperationTypeDefinitionNode,
48
- ScalarTypeDefinitionNode,
49
- ObjectTypeDefinitionNode,
50
- FieldDefinitionNode,
51
- InputValueDefinitionNode,
52
- InterfaceTypeDefinitionNode,
53
- UnionTypeDefinitionNode,
54
- EnumTypeDefinitionNode,
55
- EnumValueDefinitionNode,
56
- InputObjectTypeDefinitionNode,
57
- DirectiveDefinitionNode,
58
- TypeSystemExtensionNode,
59
- SchemaExtensionNode,
60
- ScalarTypeExtensionNode,
61
- ObjectTypeExtensionNode,
62
- InterfaceTypeExtensionNode,
63
- UnionTypeExtensionNode,
64
- EnumTypeExtensionNode,
65
- InputObjectTypeExtensionNode,
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
- expect(lexer, TokenKind.SOF);
157
+ expectToken(lexer, TokenKind.SOF);
154
158
  const value = parseValueLiteral(lexer, false);
155
- expect(lexer, TokenKind.EOF);
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
- expect(lexer, TokenKind.SOF);
179
+ expectToken(lexer, TokenKind.SOF);
176
180
  const type = parseTypeReference(lexer);
177
- expect(lexer, TokenKind.EOF);
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 = expect(lexer, TokenKind.NAME);
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 = expect(lexer, TokenKind.NAME);
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: (expect(lexer, TokenKind.COLON), parseTypeReference(lexer)),
338
- defaultValue: skip(lexer, TokenKind.EQUALS)
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
- expect(lexer, TokenKind.DOLLAR);
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 (skip(lexer, TokenKind.COLON)) {
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: parseName(lexer),
440
- value: (expect(lexer, TokenKind.COLON), parseValueLiteral(lexer, false)),
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: (expect(lexer, TokenKind.COLON), parseConstValue(lexer)),
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
- expect(lexer, TokenKind.SPREAD);
475
+ expectToken(lexer, TokenKind.SPREAD);
469
476
 
470
- const hasTypeCondition = skipKeyword(lexer, 'on');
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
- expect(lexer, TokenKind.BRACE_L);
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: parseName(lexer),
666
- value: (expect(lexer, TokenKind.COLON), parseValueLiteral(lexer, isConst)),
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
- expect(lexer, TokenKind.AT);
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 (skip(lexer, TokenKind.BRACKET_L)) {
718
+ if (expectOptionalToken(lexer, TokenKind.BRACKET_L)) {
713
719
  type = parseTypeReference(lexer);
714
- expect(lexer, TokenKind.BRACKET_R);
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 (skip(lexer, TokenKind.BANG)) {
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
- expect(lexer, TokenKind.COLON);
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 (skipKeyword(lexer, 'implements')) {
896
+ if (expectOptionalKeyword(lexer, 'implements')) {
891
897
  // Optional leading ampersand
892
- skip(lexer, TokenKind.AMP);
898
+ expectOptionalToken(lexer, TokenKind.AMP);
893
899
  do {
894
900
  types.push(parseNamedType(lexer));
895
901
  } while (
896
- skip(lexer, TokenKind.AMP) ||
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
- expect(lexer, TokenKind.COLON);
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
- expect(lexer, TokenKind.COLON);
971
+ expectToken(lexer, TokenKind.COLON);
966
972
  const type = parseTypeReference(lexer);
967
973
  let defaultValue;
968
- if (skip(lexer, TokenKind.EQUALS)) {
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 (skip(lexer, TokenKind.EQUALS)) {
1040
+ if (expectOptionalToken(lexer, TokenKind.EQUALS)) {
1035
1041
  // Optional leading pipe
1036
- skip(lexer, TokenKind.PIPE);
1042
+ expectOptionalToken(lexer, TokenKind.PIPE);
1037
1043
  do {
1038
1044
  types.push(parseNamedType(lexer));
1039
- } while (skip(lexer, TokenKind.PIPE));
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
- expect(lexer, TokenKind.AT);
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
- skip(lexer, TokenKind.PIPE);
1389
+ expectOptionalToken(lexer, TokenKind.PIPE);
1384
1390
  const locations = [];
1385
1391
  do {
1386
1392
  locations.push(parseDirectiveLocation(lexer));
1387
- } while (skip(lexer, TokenKind.PIPE));
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.hasOwnProperty(name.value)) {
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 expect(lexer: Lexer<*>, kind: TokenKindEnum): Token {
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 a keyword with the given value, return true after advancing
1490
- * the lexer. Otherwise, do not change the parser state and return false.
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 skipKeyword(lexer: Lexer<*>, value: string): boolean {
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 true;
1504
+ return token;
1497
1505
  }
1498
- return false;
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 keyword with the given value, return that token after
1503
- * advancing the lexer. Otherwise, do not change the parser state and throw
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 expectKeyword(lexer: Lexer<*>, value: string): void {
1507
- if (!skipKeyword(lexer, value)) {
1508
- throw syntaxError(
1509
- lexer.source,
1510
- lexer.token.start,
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
- expect(lexer, openKind);
1552
+ expectToken(lexer, openKind);
1542
1553
  const nodes = [];
1543
- while (!skip(lexer, closeKind)) {
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
- expect(lexer, openKind);
1572
+ expectToken(lexer, openKind);
1562
1573
  const nodes = [parseFn(lexer)];
1563
- while (!skip(lexer, closeKind)) {
1574
+ while (!expectOptionalToken(lexer, closeKind)) {
1564
1575
  nodes.push(parseFn(lexer));
1565
1576
  }
1566
1577
  return nodes;