graphql 14.4.2 → 14.5.3

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 (343) hide show
  1. package/README.md +5 -10
  2. package/error/GraphQLError.d.ts +87 -0
  3. package/error/GraphQLError.js +7 -45
  4. package/error/GraphQLError.js.flow +1 -0
  5. package/error/GraphQLError.mjs +7 -45
  6. package/error/formatError.d.ts +39 -0
  7. package/error/formatError.js +5 -2
  8. package/error/formatError.js.flow +27 -3
  9. package/error/formatError.mjs +5 -2
  10. package/error/index.d.ts +4 -0
  11. package/error/locatedError.d.ts +13 -0
  12. package/error/locatedError.js.flow +2 -1
  13. package/error/locatedError.mjs +1 -1
  14. package/error/syntaxError.d.ts +12 -0
  15. package/error/syntaxError.js.flow +1 -0
  16. package/execution/execute.d.ts +190 -0
  17. package/execution/execute.js +55 -89
  18. package/execution/execute.js.flow +95 -133
  19. package/execution/execute.mjs +75 -80
  20. package/execution/index.d.ts +11 -0
  21. package/execution/index.js +8 -6
  22. package/execution/index.js.flow +3 -6
  23. package/execution/index.mjs +2 -1
  24. package/execution/values.d.ts +68 -0
  25. package/execution/values.js +119 -128
  26. package/execution/values.js.flow +150 -127
  27. package/execution/values.mjs +117 -125
  28. package/graphql.d.ts +88 -0
  29. package/graphql.js +5 -5
  30. package/graphql.js.flow +9 -5
  31. package/graphql.mjs +41 -1
  32. package/index.d.ts +446 -0
  33. package/index.js +6 -0
  34. package/index.js.flow +3 -1
  35. package/index.mjs +2 -1
  36. package/jsutils/ObjMap.js.flow +6 -0
  37. package/jsutils/Path.d.ts +14 -0
  38. package/jsutils/Path.js +33 -0
  39. package/jsutils/Path.js.flow +26 -0
  40. package/jsutils/Path.mjs +24 -0
  41. package/jsutils/PromiseOrValue.d.ts +1 -0
  42. package/jsutils/dedent.js +6 -24
  43. package/jsutils/dedent.mjs +6 -24
  44. package/jsutils/defineToStringTag.js.flow +1 -1
  45. package/jsutils/devAssert.js +14 -0
  46. package/jsutils/devAssert.js.flow +8 -0
  47. package/jsutils/devAssert.mjs +7 -0
  48. package/jsutils/inspect.js +1 -1
  49. package/jsutils/inspect.js.flow +1 -1
  50. package/jsutils/inspect.mjs +1 -1
  51. package/jsutils/invariant.js +1 -2
  52. package/jsutils/invariant.js.flow +2 -3
  53. package/jsutils/invariant.mjs +1 -2
  54. package/jsutils/mapValue.js +6 -24
  55. package/jsutils/mapValue.js.flow +2 -1
  56. package/jsutils/mapValue.mjs +6 -24
  57. package/jsutils/printPathArray.js +15 -0
  58. package/jsutils/printPathArray.js.flow +14 -0
  59. package/jsutils/printPathArray.mjs +8 -0
  60. package/jsutils/suggestionList.js +14 -34
  61. package/jsutils/suggestionList.js.flow +4 -6
  62. package/jsutils/suggestionList.mjs +14 -34
  63. package/jsutils/toObjMap.js +28 -0
  64. package/jsutils/toObjMap.js.flow +26 -0
  65. package/jsutils/toObjMap.mjs +18 -0
  66. package/language/ast.d.ts +573 -0
  67. package/language/blockString.d.ts +21 -0
  68. package/language/directiveLocation.d.ts +35 -0
  69. package/language/index.d.ts +96 -0
  70. package/language/kinds.d.ts +77 -0
  71. package/language/lexer.d.ts +60 -0
  72. package/language/lexer.js +2 -12
  73. package/language/lexer.js.flow +6 -12
  74. package/language/lexer.mjs +1 -9
  75. package/language/location.d.ts +15 -0
  76. package/language/parser.d.ts +89 -0
  77. package/language/parser.js +1329 -1302
  78. package/language/parser.js.flow +1289 -1298
  79. package/language/parser.mjs +1326 -1297
  80. package/language/predicates.d.ts +36 -0
  81. package/language/predicates.js.flow +1 -1
  82. package/language/printLocation.d.ts +16 -0
  83. package/language/printLocation.js.flow +1 -1
  84. package/language/printer.d.ts +7 -0
  85. package/language/printer.js.flow +1 -1
  86. package/language/source.d.ts +19 -0
  87. package/language/source.js +3 -3
  88. package/language/source.js.flow +3 -3
  89. package/language/source.mjs +3 -3
  90. package/language/tokenKind.d.ts +35 -0
  91. package/language/visitor.d.ts +264 -0
  92. package/language/visitor.js +2 -2
  93. package/language/visitor.js.flow +3 -1
  94. package/language/visitor.mjs +2 -2
  95. package/package.json +1 -1
  96. package/polyfills/find.js +2 -2
  97. package/polyfills/find.js.flow +1 -2
  98. package/polyfills/find.mjs +2 -2
  99. package/polyfills/flatMap.js +3 -3
  100. package/polyfills/flatMap.js.flow +2 -3
  101. package/polyfills/flatMap.mjs +3 -3
  102. package/subscription/asyncIteratorReject.d.ts +6 -0
  103. package/subscription/index.d.ts +5 -0
  104. package/subscription/mapAsyncIterator.d.ts +9 -0
  105. package/subscription/mapAsyncIterator.js.flow +1 -0
  106. package/subscription/subscribe.d.ts +86 -0
  107. package/subscription/subscribe.js +29 -10
  108. package/subscription/subscribe.js.flow +45 -24
  109. package/subscription/subscribe.mjs +27 -9
  110. package/tsutils/Maybe.d.ts +4 -0
  111. package/type/definition.d.ts +805 -0
  112. package/type/definition.js +154 -70
  113. package/type/definition.js.flow +217 -160
  114. package/type/definition.mjs +149 -66
  115. package/type/directives.d.ts +72 -0
  116. package/type/directives.js +20 -12
  117. package/type/directives.js.flow +34 -19
  118. package/type/directives.mjs +17 -10
  119. package/type/index.d.ts +155 -0
  120. package/type/index.js.flow +2 -2
  121. package/type/introspection.d.ts +40 -0
  122. package/type/introspection.js +24 -10
  123. package/type/introspection.js.flow +29 -8
  124. package/type/introspection.mjs +23 -10
  125. package/type/scalars.d.ts +11 -0
  126. package/type/scalars.js +2 -2
  127. package/type/scalars.js.flow +4 -1
  128. package/type/scalars.mjs +2 -2
  129. package/type/schema.d.ts +108 -0
  130. package/type/schema.js +74 -151
  131. package/type/schema.js.flow +75 -73
  132. package/type/schema.mjs +75 -149
  133. package/type/validate.d.ts +19 -0
  134. package/type/validate.js +227 -486
  135. package/type/validate.js.flow +13 -8
  136. package/type/validate.mjs +218 -477
  137. package/utilities/TypeInfo.d.ts +49 -0
  138. package/utilities/TypeInfo.js.flow +9 -6
  139. package/utilities/assertValidName.d.ts +15 -0
  140. package/utilities/assertValidName.js +3 -3
  141. package/utilities/assertValidName.js.flow +3 -2
  142. package/utilities/assertValidName.mjs +2 -2
  143. package/utilities/astFromValue.d.ts +25 -0
  144. package/utilities/astFromValue.js +22 -38
  145. package/utilities/astFromValue.js.flow +7 -4
  146. package/utilities/astFromValue.mjs +19 -36
  147. package/utilities/buildASTSchema.d.ts +114 -0
  148. package/utilities/buildASTSchema.js +37 -68
  149. package/utilities/buildASTSchema.js.flow +32 -30
  150. package/utilities/buildASTSchema.mjs +32 -64
  151. package/utilities/buildClientSchema.d.ts +21 -0
  152. package/utilities/buildClientSchema.js +23 -15
  153. package/utilities/buildClientSchema.js.flow +17 -16
  154. package/utilities/buildClientSchema.mjs +20 -12
  155. package/utilities/coerceInputValue.d.ts +17 -0
  156. package/utilities/coerceInputValue.js +161 -0
  157. package/utilities/coerceInputValue.js.flow +214 -0
  158. package/utilities/coerceInputValue.mjs +142 -0
  159. package/utilities/coerceValue.d.ts +23 -0
  160. package/utilities/coerceValue.js +21 -199
  161. package/utilities/coerceValue.js.flow +31 -223
  162. package/utilities/coerceValue.mjs +20 -195
  163. package/utilities/concatAST.d.ts +8 -0
  164. package/utilities/concatAST.js.flow +1 -0
  165. package/utilities/extendSchema.d.ts +45 -0
  166. package/utilities/extendSchema.js +64 -131
  167. package/utilities/extendSchema.js.flow +27 -24
  168. package/utilities/extendSchema.mjs +61 -129
  169. package/utilities/findBreakingChanges.d.ts +64 -0
  170. package/utilities/findBreakingChanges.js +194 -619
  171. package/utilities/findBreakingChanges.js.flow +8 -5
  172. package/utilities/findBreakingChanges.mjs +194 -619
  173. package/utilities/findDeprecatedUsages.d.ts +13 -0
  174. package/utilities/findDeprecatedUsages.js.flow +4 -1
  175. package/utilities/getOperationAST.d.ts +12 -0
  176. package/utilities/getOperationAST.js +13 -31
  177. package/utilities/getOperationAST.mjs +13 -31
  178. package/utilities/getOperationRootType.d.ts +14 -0
  179. package/utilities/getOperationRootType.js.flow +2 -0
  180. package/utilities/index.d.ts +127 -0
  181. package/utilities/index.js +8 -0
  182. package/utilities/index.js.flow +4 -1
  183. package/utilities/index.mjs +3 -1
  184. package/utilities/introspectionFromSchema.d.ts +16 -0
  185. package/utilities/introspectionFromSchema.js +5 -3
  186. package/utilities/introspectionFromSchema.js.flow +4 -2
  187. package/utilities/introspectionFromSchema.mjs +4 -2
  188. package/utilities/introspectionQuery.d.ts +177 -0
  189. package/utilities/isValidJSValue.d.ts +8 -0
  190. package/utilities/isValidJSValue.js +1 -1
  191. package/utilities/isValidJSValue.js.flow +3 -2
  192. package/utilities/isValidJSValue.mjs +2 -2
  193. package/utilities/isValidLiteralValue.d.ts +15 -0
  194. package/utilities/isValidLiteralValue.js +4 -4
  195. package/utilities/isValidLiteralValue.js.flow +8 -4
  196. package/utilities/isValidLiteralValue.mjs +2 -2
  197. package/utilities/lexicographicSortSchema.d.ts +6 -0
  198. package/utilities/lexicographicSortSchema.js +11 -8
  199. package/utilities/lexicographicSortSchema.js.flow +5 -3
  200. package/utilities/lexicographicSortSchema.mjs +9 -7
  201. package/utilities/schemaPrinter.d.ts +30 -0
  202. package/utilities/schemaPrinter.js +15 -32
  203. package/utilities/schemaPrinter.js.flow +14 -10
  204. package/utilities/schemaPrinter.mjs +14 -32
  205. package/utilities/separateOperations.d.ts +11 -0
  206. package/utilities/separateOperations.js +6 -6
  207. package/utilities/separateOperations.js.flow +2 -1
  208. package/utilities/separateOperations.mjs +6 -6
  209. package/utilities/stripIgnoredCharacters.d.ts +55 -0
  210. package/utilities/stripIgnoredCharacters.js.flow +1 -0
  211. package/utilities/typeComparators.d.ts +32 -0
  212. package/utilities/typeComparators.js.flow +1 -1
  213. package/utilities/typeComparators.mjs +1 -1
  214. package/utilities/typeFromAST.d.ts +29 -0
  215. package/utilities/typeFromAST.js +5 -3
  216. package/utilities/typeFromAST.js.flow +5 -3
  217. package/utilities/typeFromAST.mjs +14 -3
  218. package/utilities/valueFromAST.d.ts +29 -0
  219. package/utilities/valueFromAST.js +40 -74
  220. package/utilities/valueFromAST.js.flow +7 -4
  221. package/utilities/valueFromAST.mjs +39 -74
  222. package/utilities/valueFromASTUntyped.d.ts +23 -0
  223. package/utilities/valueFromASTUntyped.js +4 -3
  224. package/utilities/valueFromASTUntyped.js.flow +3 -2
  225. package/utilities/valueFromASTUntyped.mjs +3 -3
  226. package/validation/ValidationContext.d.ts +96 -0
  227. package/validation/ValidationContext.js +38 -86
  228. package/validation/ValidationContext.js.flow +22 -7
  229. package/validation/ValidationContext.mjs +37 -85
  230. package/validation/index.d.ts +126 -0
  231. package/validation/rules/ExecutableDefinitions.d.ts +14 -0
  232. package/validation/rules/ExecutableDefinitions.js +4 -23
  233. package/validation/rules/ExecutableDefinitions.js.flow +4 -2
  234. package/validation/rules/ExecutableDefinitions.mjs +4 -23
  235. package/validation/rules/FieldsOnCorrectType.d.ts +17 -0
  236. package/validation/rules/FieldsOnCorrectType.js +21 -57
  237. package/validation/rules/FieldsOnCorrectType.js.flow +7 -3
  238. package/validation/rules/FieldsOnCorrectType.mjs +21 -57
  239. package/validation/rules/FragmentsOnCompositeTypes.d.ts +20 -0
  240. package/validation/rules/FragmentsOnCompositeTypes.js.flow +5 -1
  241. package/validation/rules/KnownArgumentNames.d.ts +28 -0
  242. package/validation/rules/KnownArgumentNames.js +26 -79
  243. package/validation/rules/KnownArgumentNames.js.flow +10 -6
  244. package/validation/rules/KnownArgumentNames.mjs +22 -75
  245. package/validation/rules/KnownDirectives.d.ts +19 -0
  246. package/validation/rules/KnownDirectives.js +12 -48
  247. package/validation/rules/KnownDirectives.js.flow +8 -5
  248. package/validation/rules/KnownDirectives.mjs +12 -48
  249. package/validation/rules/KnownFragmentNames.d.ts +12 -0
  250. package/validation/rules/KnownFragmentNames.js.flow +2 -1
  251. package/validation/rules/KnownTypeNames.d.ts +15 -0
  252. package/validation/rules/KnownTypeNames.js +6 -24
  253. package/validation/rules/KnownTypeNames.js.flow +10 -6
  254. package/validation/rules/KnownTypeNames.mjs +6 -24
  255. package/validation/rules/LoneAnonymousOperation.d.ts +14 -0
  256. package/validation/rules/LoneAnonymousOperation.js.flow +3 -1
  257. package/validation/rules/LoneSchemaDefinition.d.ts +13 -0
  258. package/validation/rules/LoneSchemaDefinition.js.flow +2 -1
  259. package/validation/rules/NoFragmentCycles.d.ts +9 -0
  260. package/validation/rules/NoFragmentCycles.js +17 -35
  261. package/validation/rules/NoFragmentCycles.js.flow +4 -2
  262. package/validation/rules/NoFragmentCycles.mjs +17 -35
  263. package/validation/rules/NoUndefinedVariables.d.ts +16 -0
  264. package/validation/rules/NoUndefinedVariables.js +6 -24
  265. package/validation/rules/NoUndefinedVariables.js.flow +2 -1
  266. package/validation/rules/NoUndefinedVariables.mjs +6 -24
  267. package/validation/rules/NoUnusedFragments.d.ts +12 -0
  268. package/validation/rules/NoUnusedFragments.js +7 -25
  269. package/validation/rules/NoUnusedFragments.js.flow +2 -1
  270. package/validation/rules/NoUnusedFragments.mjs +7 -25
  271. package/validation/rules/NoUnusedVariables.d.ts +16 -0
  272. package/validation/rules/NoUnusedVariables.js +6 -24
  273. package/validation/rules/NoUnusedVariables.js.flow +2 -1
  274. package/validation/rules/NoUnusedVariables.mjs +6 -24
  275. package/validation/rules/OverlappingFieldsCanBeMerged.d.ts +24 -0
  276. package/validation/rules/OverlappingFieldsCanBeMerged.js +27 -46
  277. package/validation/rules/OverlappingFieldsCanBeMerged.js.flow +17 -8
  278. package/validation/rules/OverlappingFieldsCanBeMerged.mjs +25 -44
  279. package/validation/rules/PossibleFragmentSpreads.d.ts +22 -0
  280. package/validation/rules/PossibleFragmentSpreads.js +2 -2
  281. package/validation/rules/PossibleFragmentSpreads.js.flow +8 -3
  282. package/validation/rules/PossibleFragmentSpreads.mjs +2 -2
  283. package/validation/rules/PossibleTypeExtensions.d.ts +21 -0
  284. package/validation/rules/PossibleTypeExtensions.js +4 -22
  285. package/validation/rules/PossibleTypeExtensions.js.flow +6 -2
  286. package/validation/rules/PossibleTypeExtensions.mjs +4 -22
  287. package/validation/rules/ProvidedRequiredArguments.d.ts +29 -0
  288. package/validation/rules/ProvidedRequiredArguments.js +27 -79
  289. package/validation/rules/ProvidedRequiredArguments.js.flow +12 -8
  290. package/validation/rules/ProvidedRequiredArguments.mjs +25 -77
  291. package/validation/rules/ScalarLeafs.d.ts +20 -0
  292. package/validation/rules/ScalarLeafs.js.flow +6 -2
  293. package/validation/rules/SingleFieldSubscriptions.d.ts +14 -0
  294. package/validation/rules/SingleFieldSubscriptions.js.flow +4 -2
  295. package/validation/rules/UniqueArgumentNames.d.ts +12 -0
  296. package/validation/rules/UniqueArgumentNames.js.flow +2 -1
  297. package/validation/rules/UniqueDirectiveNames.d.ts +13 -0
  298. package/validation/rules/UniqueDirectiveNames.js.flow +2 -1
  299. package/validation/rules/UniqueDirectivesPerLocation.d.ts +14 -0
  300. package/validation/rules/UniqueDirectivesPerLocation.js +15 -69
  301. package/validation/rules/UniqueDirectivesPerLocation.js.flow +7 -4
  302. package/validation/rules/UniqueDirectivesPerLocation.mjs +15 -69
  303. package/validation/rules/UniqueEnumValueNames.d.ts +19 -0
  304. package/validation/rules/UniqueEnumValueNames.js +10 -28
  305. package/validation/rules/UniqueEnumValueNames.js.flow +2 -1
  306. package/validation/rules/UniqueEnumValueNames.mjs +10 -28
  307. package/validation/rules/UniqueFieldDefinitionNames.d.ts +21 -0
  308. package/validation/rules/UniqueFieldDefinitionNames.js +9 -27
  309. package/validation/rules/UniqueFieldDefinitionNames.js.flow +2 -1
  310. package/validation/rules/UniqueFieldDefinitionNames.mjs +9 -27
  311. package/validation/rules/UniqueFragmentNames.d.ts +11 -0
  312. package/validation/rules/UniqueFragmentNames.js.flow +2 -1
  313. package/validation/rules/UniqueInputFieldNames.d.ts +14 -0
  314. package/validation/rules/UniqueInputFieldNames.js.flow +2 -1
  315. package/validation/rules/UniqueOperationNames.d.ts +11 -0
  316. package/validation/rules/UniqueOperationNames.js.flow +2 -1
  317. package/validation/rules/UniqueOperationTypes.d.ts +13 -0
  318. package/validation/rules/UniqueOperationTypes.js +11 -30
  319. package/validation/rules/UniqueOperationTypes.js.flow +2 -1
  320. package/validation/rules/UniqueOperationTypes.mjs +10 -29
  321. package/validation/rules/UniqueTypeNames.d.ts +13 -0
  322. package/validation/rules/UniqueTypeNames.js.flow +3 -1
  323. package/validation/rules/UniqueVariableNames.d.ts +11 -0
  324. package/validation/rules/UniqueVariableNames.js.flow +4 -2
  325. package/validation/rules/ValuesOfCorrectType.d.ts +34 -0
  326. package/validation/rules/ValuesOfCorrectType.js +16 -34
  327. package/validation/rules/ValuesOfCorrectType.js.flow +11 -6
  328. package/validation/rules/ValuesOfCorrectType.mjs +12 -30
  329. package/validation/rules/VariablesAreInputTypes.d.ts +15 -0
  330. package/validation/rules/VariablesAreInputTypes.js.flow +6 -2
  331. package/validation/rules/VariablesInAllowedPosition.d.ts +15 -0
  332. package/validation/rules/VariablesInAllowedPosition.js +22 -40
  333. package/validation/rules/VariablesInAllowedPosition.js.flow +8 -3
  334. package/validation/rules/VariablesInAllowedPosition.mjs +18 -36
  335. package/validation/specifiedRules.d.ts +98 -0
  336. package/validation/validate.d.ts +56 -0
  337. package/validation/validate.js +35 -7
  338. package/validation/validate.js.flow +51 -9
  339. package/validation/validate.mjs +30 -7
  340. package/version.d.ts +14 -0
  341. package/version.js +3 -3
  342. package/version.js.flow +3 -3
  343. package/version.mjs +3 -3
@@ -1,28 +1,46 @@
1
1
  // @flow strict
2
2
 
3
3
  import { forEach, isCollection } from 'iterall';
4
- import { GraphQLError } from '../error/GraphQLError';
5
- import { locatedError } from '../error/locatedError';
4
+
6
5
  import inspect from '../jsutils/inspect';
6
+ import memoize3 from '../jsutils/memoize3';
7
7
  import invariant from '../jsutils/invariant';
8
+ import devAssert from '../jsutils/devAssert';
8
9
  import isInvalid from '../jsutils/isInvalid';
9
10
  import isNullish from '../jsutils/isNullish';
10
11
  import isPromise from '../jsutils/isPromise';
12
+ import { type ObjMap } from '../jsutils/ObjMap';
11
13
  import isObjectLike from '../jsutils/isObjectLike';
12
- import memoize3 from '../jsutils/memoize3';
13
- import promiseForObject from '../jsutils/promiseForObject';
14
14
  import promiseReduce from '../jsutils/promiseReduce';
15
- import { type ObjMap } from '../jsutils/ObjMap';
15
+ import promiseForObject from '../jsutils/promiseForObject';
16
16
  import { type PromiseOrValue } from '../jsutils/PromiseOrValue';
17
+ import { type Path, addPath, pathToArray } from '../jsutils/Path';
18
+
19
+ import { GraphQLError } from '../error/GraphQLError';
20
+ import { locatedError } from '../error/locatedError';
17
21
 
18
- import { getOperationRootType } from '../utilities/getOperationRootType';
19
- import { typeFromAST } from '../utilities/typeFromAST';
20
22
  import { Kind } from '../language/kinds';
21
23
  import {
22
- getVariableValues,
23
- getArgumentValues,
24
- getDirectiveValues,
25
- } from './values';
24
+ type DocumentNode,
25
+ type OperationDefinitionNode,
26
+ type SelectionSetNode,
27
+ type FieldNode,
28
+ type FragmentSpreadNode,
29
+ type InlineFragmentNode,
30
+ type FragmentDefinitionNode,
31
+ } from '../language/ast';
32
+
33
+ import { assertValidSchema } from '../type/validate';
34
+ import { type GraphQLSchema } from '../type/schema';
35
+ import {
36
+ SchemaMetaFieldDef,
37
+ TypeMetaFieldDef,
38
+ TypeNameMetaFieldDef,
39
+ } from '../type/introspection';
40
+ import {
41
+ GraphQLIncludeDirective,
42
+ GraphQLSkipDirective,
43
+ } from '../type/directives';
26
44
  import {
27
45
  type GraphQLObjectType,
28
46
  type GraphQLOutputType,
@@ -32,7 +50,6 @@ import {
32
50
  type GraphQLFieldResolver,
33
51
  type GraphQLResolveInfo,
34
52
  type GraphQLTypeResolver,
35
- type ResponsePath,
36
53
  type GraphQLList,
37
54
  isObjectType,
38
55
  isAbstractType,
@@ -40,26 +57,15 @@ import {
40
57
  isListType,
41
58
  isNonNullType,
42
59
  } from '../type/definition';
43
- import { type GraphQLSchema } from '../type/schema';
44
- import {
45
- SchemaMetaFieldDef,
46
- TypeMetaFieldDef,
47
- TypeNameMetaFieldDef,
48
- } from '../type/introspection';
49
- import {
50
- GraphQLIncludeDirective,
51
- GraphQLSkipDirective,
52
- } from '../type/directives';
53
- import { assertValidSchema } from '../type/validate';
60
+
61
+ import { typeFromAST } from '../utilities/typeFromAST';
62
+ import { getOperationRootType } from '../utilities/getOperationRootType';
63
+
54
64
  import {
55
- type DocumentNode,
56
- type OperationDefinitionNode,
57
- type SelectionSetNode,
58
- type FieldNode,
59
- type FragmentSpreadNode,
60
- type InlineFragmentNode,
61
- type FragmentDefinitionNode,
62
- } from '../language/ast';
65
+ getVariableValues,
66
+ getArgumentValues,
67
+ getDirectiveValues,
68
+ } from './values';
63
69
 
64
70
  /**
65
71
  * Terminology
@@ -235,30 +241,6 @@ function buildResponse(
235
241
  : { errors: exeContext.errors, data };
236
242
  }
237
243
 
238
- /**
239
- * Given a ResponsePath (found in the `path` entry in the information provided
240
- * as the last argument to a field resolver), return an Array of the path keys.
241
- */
242
- export function responsePathAsArray(
243
- path: ResponsePath,
244
- ): $ReadOnlyArray<string | number> {
245
- const flattened = [];
246
- let curr = path;
247
- while (curr) {
248
- flattened.push(curr.key);
249
- curr = curr.prev;
250
- }
251
- return flattened.reverse();
252
- }
253
-
254
- /**
255
- * Given a ResponsePath and a key, return a new ResponsePath containing the
256
- * new key.
257
- */
258
- export function addPath(prev: ResponsePath | void, key: string | number) {
259
- return { prev, key };
260
- }
261
-
262
244
  /**
263
245
  * Essential assertions before executing to provide developer feedback for
264
246
  * improper use of the GraphQL library.
@@ -268,13 +250,13 @@ export function assertValidExecutionArguments(
268
250
  document: DocumentNode,
269
251
  rawVariableValues: ?{ +[variable: string]: mixed, ... },
270
252
  ): void {
271
- invariant(document, 'Must provide document');
253
+ devAssert(document, 'Must provide document');
272
254
 
273
255
  // If the schema used for execution is invalid, throw an error.
274
256
  assertValidSchema(schema);
275
257
 
276
258
  // Variables, if provided, must be an object.
277
- invariant(
259
+ devAssert(
278
260
  rawVariableValues == null || isObjectLike(rawVariableValues),
279
261
  'Variables must be provided as an Object where each property is a variable value. Perhaps look to see if an unparsed JSON string was provided.',
280
262
  );
@@ -293,15 +275,13 @@ export function buildExecutionContext(
293
275
  contextValue: mixed,
294
276
  rawVariableValues: ?{ +[variable: string]: mixed, ... },
295
277
  operationName: ?string,
296
- fieldResolver: ?GraphQLFieldResolver<any, any>,
297
- typeResolver?: ?GraphQLTypeResolver<any, any>,
278
+ fieldResolver: ?GraphQLFieldResolver<mixed, mixed>,
279
+ typeResolver?: ?GraphQLTypeResolver<mixed, mixed>,
298
280
  ): $ReadOnlyArray<GraphQLError> | ExecutionContext {
299
- const errors: Array<GraphQLError> = [];
300
281
  let operation: OperationDefinitionNode | void;
301
282
  let hasMultipleAssumedOperations = false;
302
283
  const fragments: ObjMap<FragmentDefinitionNode> = Object.create(null);
303
- for (let i = 0; i < document.definitions.length; i++) {
304
- const definition = document.definitions[i];
284
+ for (const definition of document.definitions) {
305
285
  switch (definition.kind) {
306
286
  case Kind.OPERATION_DEFINITION:
307
287
  if (!operationName && operation) {
@@ -321,52 +301,40 @@ export function buildExecutionContext(
321
301
 
322
302
  if (!operation) {
323
303
  if (operationName) {
324
- errors.push(
325
- new GraphQLError(`Unknown operation named "${operationName}".`),
326
- );
327
- } else {
328
- errors.push(new GraphQLError('Must provide an operation.'));
304
+ return [new GraphQLError(`Unknown operation named "${operationName}".`)];
329
305
  }
330
- } else if (hasMultipleAssumedOperations) {
331
- errors.push(
306
+ return [new GraphQLError('Must provide an operation.')];
307
+ }
308
+
309
+ if (hasMultipleAssumedOperations) {
310
+ return [
332
311
  new GraphQLError(
333
312
  'Must provide operation name if query contains multiple operations.',
334
313
  ),
335
- );
314
+ ];
336
315
  }
337
316
 
338
- let variableValues;
339
- if (operation) {
340
- const coercedVariableValues = getVariableValues(
341
- schema,
342
- operation.variableDefinitions || [],
343
- rawVariableValues || {},
344
- );
345
-
346
- if (coercedVariableValues.errors) {
347
- errors.push(...coercedVariableValues.errors);
348
- } else {
349
- variableValues = coercedVariableValues.coerced;
350
- }
351
- }
317
+ const coercedVariableValues = getVariableValues(
318
+ schema,
319
+ operation.variableDefinitions || [],
320
+ rawVariableValues || {},
321
+ { maxErrors: 50 },
322
+ );
352
323
 
353
- if (errors.length !== 0) {
354
- return errors;
324
+ if (coercedVariableValues.errors) {
325
+ return coercedVariableValues.errors;
355
326
  }
356
327
 
357
- invariant(operation, 'Has operation if no errors.');
358
- invariant(variableValues, 'Has variables if no errors.');
359
-
360
328
  return {
361
329
  schema,
362
330
  fragments,
363
331
  rootValue,
364
332
  contextValue,
365
333
  operation,
366
- variableValues,
334
+ variableValues: coercedVariableValues.coerced,
367
335
  fieldResolver: fieldResolver || defaultFieldResolver,
368
336
  typeResolver: typeResolver || defaultTypeResolver,
369
- errors,
337
+ errors: [],
370
338
  };
371
339
  }
372
340
 
@@ -420,7 +388,7 @@ function executeFieldsSerially(
420
388
  exeContext: ExecutionContext,
421
389
  parentType: GraphQLObjectType,
422
390
  sourceValue: mixed,
423
- path: ResponsePath | void,
391
+ path: Path | void,
424
392
  fields: ObjMap<Array<FieldNode>>,
425
393
  ): PromiseOrValue<ObjMap<mixed>> {
426
394
  return promiseReduce(
@@ -459,14 +427,13 @@ function executeFields(
459
427
  exeContext: ExecutionContext,
460
428
  parentType: GraphQLObjectType,
461
429
  sourceValue: mixed,
462
- path: ResponsePath | void,
430
+ path: Path | void,
463
431
  fields: ObjMap<Array<FieldNode>>,
464
432
  ): PromiseOrValue<ObjMap<mixed>> {
465
433
  const results = Object.create(null);
466
434
  let containsPromise = false;
467
435
 
468
- for (let i = 0, keys = Object.keys(fields); i < keys.length; ++i) {
469
- const responseName = keys[i];
436
+ for (const responseName of Object.keys(fields)) {
470
437
  const fieldNodes = fields[responseName];
471
438
  const fieldPath = addPath(path, responseName);
472
439
  const result = resolveField(
@@ -511,8 +478,7 @@ export function collectFields(
511
478
  fields: ObjMap<Array<FieldNode>>,
512
479
  visitedFragmentNames: ObjMap<boolean>,
513
480
  ): ObjMap<Array<FieldNode>> {
514
- for (let i = 0; i < selectionSet.selections.length; i++) {
515
- const selection = selectionSet.selections[i];
481
+ for (const selection of selectionSet.selections) {
516
482
  switch (selection.kind) {
517
483
  case Kind.FIELD: {
518
484
  if (!shouldIncludeNode(exeContext, selection)) {
@@ -639,7 +605,7 @@ function resolveField(
639
605
  parentType: GraphQLObjectType,
640
606
  source: mixed,
641
607
  fieldNodes: $ReadOnlyArray<FieldNode>,
642
- path: ResponsePath,
608
+ path: Path,
643
609
  ): PromiseOrValue<mixed> {
644
610
  const fieldNode = fieldNodes[0];
645
611
  const fieldName = fieldNode.name.value;
@@ -682,10 +648,10 @@ function resolveField(
682
648
 
683
649
  export function buildResolveInfo(
684
650
  exeContext: ExecutionContext,
685
- fieldDef: GraphQLField<*, *>,
651
+ fieldDef: GraphQLField<mixed, mixed>,
686
652
  fieldNodes: $ReadOnlyArray<FieldNode>,
687
653
  parentType: GraphQLObjectType,
688
- path: ResponsePath,
654
+ path: Path,
689
655
  ): GraphQLResolveInfo {
690
656
  // The resolve function's optional fourth argument is a collection of
691
657
  // information about the current execution state.
@@ -705,12 +671,12 @@ export function buildResolveInfo(
705
671
 
706
672
  // Isolates the "ReturnOrAbrupt" behavior to not de-opt the `resolveField`
707
673
  // function. Returns the result of resolveFn or the abrupt-return Error object.
708
- export function resolveFieldValueOrError<TSource>(
674
+ export function resolveFieldValueOrError(
709
675
  exeContext: ExecutionContext,
710
- fieldDef: GraphQLField<TSource, *>,
676
+ fieldDef: GraphQLField<mixed, mixed>,
711
677
  fieldNodes: $ReadOnlyArray<FieldNode>,
712
- resolveFn: GraphQLFieldResolver<TSource, *>,
713
- source: TSource,
678
+ resolveFn: GraphQLFieldResolver<mixed, mixed>,
679
+ source: mixed,
714
680
  info: GraphQLResolveInfo,
715
681
  ): Error | mixed {
716
682
  try {
@@ -751,7 +717,7 @@ function completeValueCatchingError(
751
717
  returnType: GraphQLOutputType,
752
718
  fieldNodes: $ReadOnlyArray<FieldNode>,
753
719
  info: GraphQLResolveInfo,
754
- path: ResponsePath,
720
+ path: Path,
755
721
  result: mixed,
756
722
  ): PromiseOrValue<mixed> {
757
723
  try {
@@ -788,7 +754,7 @@ function handleFieldError(rawError, fieldNodes, path, returnType, exeContext) {
788
754
  const error = locatedError(
789
755
  asErrorInstance(rawError),
790
756
  fieldNodes,
791
- responsePathAsArray(path),
757
+ pathToArray(path),
792
758
  );
793
759
 
794
760
  // If the field type is non-nullable, then it is resolved without any
@@ -829,7 +795,7 @@ function completeValue(
829
795
  returnType: GraphQLOutputType,
830
796
  fieldNodes: $ReadOnlyArray<FieldNode>,
831
797
  info: GraphQLResolveInfo,
832
- path: ResponsePath,
798
+ path: Path,
833
799
  result: mixed,
834
800
  ): PromiseOrValue<mixed> {
835
801
  // If result is an Error, throw a located error.
@@ -905,11 +871,10 @@ function completeValue(
905
871
  }
906
872
 
907
873
  // Not reachable. All possible output types have been considered.
908
- /* istanbul ignore next */
909
- throw new Error(
910
- `Cannot complete value of unexpected output type: "${inspect(
911
- (returnType: empty),
912
- )}".`,
874
+ invariant(
875
+ false,
876
+ 'Cannot complete value of unexpected output type: ' +
877
+ inspect((returnType: empty)),
913
878
  );
914
879
  }
915
880
 
@@ -922,13 +887,14 @@ function completeListValue(
922
887
  returnType: GraphQLList<GraphQLOutputType>,
923
888
  fieldNodes: $ReadOnlyArray<FieldNode>,
924
889
  info: GraphQLResolveInfo,
925
- path: ResponsePath,
890
+ path: Path,
926
891
  result: mixed,
927
892
  ): PromiseOrValue<$ReadOnlyArray<mixed>> {
928
- invariant(
929
- isCollection(result),
930
- `Expected Iterable, but did not find one for field ${info.parentType.name}.${info.fieldName}.`,
931
- );
893
+ if (!isCollection(result)) {
894
+ throw new GraphQLError(
895
+ `Expected Iterable, but did not find one for field ${info.parentType.name}.${info.fieldName}.`,
896
+ );
897
+ }
932
898
 
933
899
  // This is specified as a simple map, however we're optimizing the path
934
900
  // where the list contains no Promises by avoiding creating another Promise.
@@ -962,7 +928,6 @@ function completeListValue(
962
928
  * null if serialization is not possible.
963
929
  */
964
930
  function completeLeafValue(returnType: GraphQLLeafType, result: mixed): mixed {
965
- invariant(returnType.serialize, 'Missing serialize method on type');
966
931
  const serializedResult = returnType.serialize(result);
967
932
  if (isInvalid(serializedResult)) {
968
933
  throw new Error(
@@ -982,7 +947,7 @@ function completeAbstractValue(
982
947
  returnType: GraphQLAbstractType,
983
948
  fieldNodes: $ReadOnlyArray<FieldNode>,
984
949
  info: GraphQLResolveInfo,
985
- path: ResponsePath,
950
+ path: Path,
986
951
  result: mixed,
987
952
  ): PromiseOrValue<ObjMap<mixed>> {
988
953
  const resolveTypeFn = returnType.resolveType || exeContext.typeResolver;
@@ -1066,7 +1031,7 @@ function completeObjectValue(
1066
1031
  returnType: GraphQLObjectType,
1067
1032
  fieldNodes: $ReadOnlyArray<FieldNode>,
1068
1033
  info: GraphQLResolveInfo,
1069
- path: ResponsePath,
1034
+ path: Path,
1070
1035
  result: mixed,
1071
1036
  ): PromiseOrValue<ObjMap<mixed>> {
1072
1037
  // If there is an isTypeOf predicate function, call it with the
@@ -1119,7 +1084,7 @@ function collectAndExecuteSubfields(
1119
1084
  exeContext: ExecutionContext,
1120
1085
  returnType: GraphQLObjectType,
1121
1086
  fieldNodes: $ReadOnlyArray<FieldNode>,
1122
- path: ResponsePath,
1087
+ path: Path,
1123
1088
  result: mixed,
1124
1089
  ): PromiseOrValue<ObjMap<mixed>> {
1125
1090
  // Collect sub-fields to execute to complete this value.
@@ -1140,13 +1105,12 @@ function _collectSubfields(
1140
1105
  ): ObjMap<Array<FieldNode>> {
1141
1106
  let subFieldNodes = Object.create(null);
1142
1107
  const visitedFragmentNames = Object.create(null);
1143
- for (let i = 0; i < fieldNodes.length; i++) {
1144
- const selectionSet = fieldNodes[i].selectionSet;
1145
- if (selectionSet) {
1108
+ for (const node of fieldNodes) {
1109
+ if (node.selectionSet) {
1146
1110
  subFieldNodes = collectFields(
1147
1111
  exeContext,
1148
1112
  returnType,
1149
- selectionSet,
1113
+ node.selectionSet,
1150
1114
  subFieldNodes,
1151
1115
  visitedFragmentNames,
1152
1116
  );
@@ -1165,7 +1129,7 @@ function _collectSubfields(
1165
1129
  * Otherwise, test each possible type for the abstract type by calling
1166
1130
  * isTypeOf for the object being coerced, returning the first type that matches.
1167
1131
  */
1168
- export const defaultTypeResolver: GraphQLTypeResolver<any, *> = function(
1132
+ export const defaultTypeResolver: GraphQLTypeResolver<mixed, mixed> = function(
1169
1133
  value,
1170
1134
  contextValue,
1171
1135
  info,
@@ -1211,12 +1175,10 @@ export const defaultTypeResolver: GraphQLTypeResolver<any, *> = function(
1211
1175
  * and returns it as the result, or if it's a function, returns the result
1212
1176
  * of calling that function while passing along args and context value.
1213
1177
  */
1214
- export const defaultFieldResolver: GraphQLFieldResolver<any, *> = function(
1215
- source,
1216
- args,
1217
- contextValue,
1218
- info,
1219
- ) {
1178
+ export const defaultFieldResolver: GraphQLFieldResolver<
1179
+ mixed,
1180
+ mixed,
1181
+ > = function(source: any, args, contextValue, info) {
1220
1182
  // ensure source is a value for which property access is acceptable.
1221
1183
  if (isObjectLike(source) || typeof source === 'function') {
1222
1184
  const property = source[info.fieldName];
@@ -1240,7 +1202,7 @@ export function getFieldDef(
1240
1202
  schema: GraphQLSchema,
1241
1203
  parentType: GraphQLObjectType,
1242
1204
  fieldName: string,
1243
- ): ?GraphQLField<*, *> {
1205
+ ): ?GraphQLField<mixed, mixed> {
1244
1206
  if (
1245
1207
  fieldName === SchemaMetaFieldDef.name &&
1246
1208
  schema.getQueryType() === parentType