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
@@ -0,0 +1,86 @@
1
+ import Maybe from '../tsutils/Maybe';
2
+ import { DocumentNode } from '../language/ast';
3
+ import {
4
+ ExecutionResult,
5
+ ExecutionResultDataDefault,
6
+ } from '../execution/execute';
7
+ import { GraphQLSchema } from '../type/schema';
8
+ import { GraphQLFieldResolver } from '../type/definition';
9
+
10
+ export interface SubscriptionArgs {
11
+ schema: GraphQLSchema;
12
+ document: DocumentNode;
13
+ rootValue?: any;
14
+ contextValue?: any;
15
+ variableValues?: Maybe<Record<string, any>>;
16
+ operationName?: Maybe<string>;
17
+ fieldResolver?: Maybe<GraphQLFieldResolver<any, any>>;
18
+ subscribeFieldResolver?: Maybe<GraphQLFieldResolver<any, any>>;
19
+ }
20
+
21
+ /**
22
+ * Implements the "Subscribe" algorithm described in the GraphQL specification.
23
+ *
24
+ * Returns a Promise which resolves to either an AsyncIterator (if successful)
25
+ * or an ExecutionResult (client error). The promise will be rejected if a
26
+ * server error occurs.
27
+ *
28
+ * If the client-provided arguments to this function do not result in a
29
+ * compliant subscription, a GraphQL Response (ExecutionResult) with
30
+ * descriptive errors and no data will be returned.
31
+ *
32
+ * If the the source stream could not be created due to faulty subscription
33
+ * resolver logic or underlying systems, the promise will resolve to a single
34
+ * ExecutionResult containing `errors` and no `data`.
35
+ *
36
+ * If the operation succeeded, the promise resolves to an AsyncIterator, which
37
+ * yields a stream of ExecutionResults representing the response stream.
38
+ *
39
+ * Accepts either an object with named arguments, or individual arguments.
40
+ */
41
+ export function subscribe<TData = ExecutionResultDataDefault>(
42
+ args: SubscriptionArgs,
43
+ ): Promise<
44
+ AsyncIterableIterator<ExecutionResult<TData>> | ExecutionResult<TData>
45
+ >;
46
+
47
+ export function subscribe<TData = ExecutionResultDataDefault>(
48
+ schema: GraphQLSchema,
49
+ document: DocumentNode,
50
+ rootValue?: any,
51
+ contextValue?: any,
52
+ variableValues?: Maybe<{ [key: string]: any }>,
53
+ operationName?: Maybe<string>,
54
+ fieldResolver?: Maybe<GraphQLFieldResolver<any, any>>,
55
+ subscribeFieldResolver?: Maybe<GraphQLFieldResolver<any, any>>,
56
+ ): Promise<
57
+ AsyncIterableIterator<ExecutionResult<TData>> | ExecutionResult<TData>
58
+ >;
59
+
60
+ /**
61
+ * Implements the "CreateSourceEventStream" algorithm described in the
62
+ * GraphQL specification, resolving the subscription source event stream.
63
+ *
64
+ * Returns a Promise<AsyncIterable>.
65
+ *
66
+ * If the client-provided invalid arguments, the source stream could not be
67
+ * created, or the resolver did not return an AsyncIterable, this function will
68
+ * will throw an error, which should be caught and handled by the caller.
69
+ *
70
+ * A Source Event Stream represents a sequence of events, each of which triggers
71
+ * a GraphQL execution for that event.
72
+ *
73
+ * This may be useful when hosting the stateful subscription service in a
74
+ * different process or machine than the stateless GraphQL execution engine,
75
+ * or otherwise separating these two steps. For more on this, see the
76
+ * "Supporting Subscriptions at Scale" information in the GraphQL specification.
77
+ */
78
+ export function createSourceEventStream<TData = ExecutionResultDataDefault>(
79
+ schema: GraphQLSchema,
80
+ document: DocumentNode,
81
+ rootValue?: any,
82
+ contextValue?: any,
83
+ variableValues?: { [key: string]: any },
84
+ operationName?: Maybe<string>,
85
+ fieldResolver?: Maybe<GraphQLFieldResolver<any, any>>,
86
+ ): Promise<AsyncIterable<any> | ExecutionResult<TData>>;
@@ -10,16 +10,18 @@ var _iterall = require("iterall");
10
10
 
11
11
  var _inspect = _interopRequireDefault(require("../jsutils/inspect"));
12
12
 
13
+ var _Path = require("../jsutils/Path");
14
+
13
15
  var _GraphQLError = require("../error/GraphQLError");
14
16
 
15
17
  var _locatedError = require("../error/locatedError");
16
18
 
17
19
  var _execute = require("../execution/execute");
18
20
 
19
- var _mapAsyncIterator = _interopRequireDefault(require("./mapAsyncIterator"));
20
-
21
21
  var _getOperationRootType = require("../utilities/getOperationRootType");
22
22
 
23
+ var _mapAsyncIterator = _interopRequireDefault(require("./mapAsyncIterator"));
24
+
23
25
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
24
26
 
25
27
  function subscribe(argsOrSchema, document, rootValue, contextValue, variableValues, operationName, fieldResolver, subscribeFieldResolver) {
@@ -79,17 +81,27 @@ function subscribeImpl(args) {
79
81
  return (// Note: Flow can't refine isAsyncIterable, so explicit casts are used.
80
82
  (0, _iterall.isAsyncIterable)(resultOrStream) ? (0, _mapAsyncIterator.default)(resultOrStream, mapSourceToResponse, reportGraphQLError) : resultOrStream
81
83
  );
82
- }, reportGraphQLError);
84
+ });
83
85
  }
84
86
  /**
85
87
  * Implements the "CreateSourceEventStream" algorithm described in the
86
88
  * GraphQL specification, resolving the subscription source event stream.
87
89
  *
88
- * Returns a Promise<AsyncIterable>.
90
+ * Returns a Promise which resolves to either an AsyncIterable (if successful)
91
+ * or an ExecutionResult (error). The promise will be rejected if the schema or
92
+ * other arguments to this function are invalid, or if the resolved event stream
93
+ * is not an async iterable.
94
+ *
95
+ * If the client-provided arguments to this function do not result in a
96
+ * compliant subscription, a GraphQL Response (ExecutionResult) with
97
+ * descriptive errors and no data will be returned.
89
98
  *
90
- * If the client-provided invalid arguments, the source stream could not be
91
- * created, or the resolver did not return an AsyncIterable, this function will
92
- * will throw an error, which should be caught and handled by the caller.
99
+ * If the the source stream could not be created due to faulty subscription
100
+ * resolver logic or underlying systems, the promise will resolve to a single
101
+ * ExecutionResult containing `errors` and no `data`.
102
+ *
103
+ * If the operation succeeded, the promise resolves to the AsyncIterable for the
104
+ * event stream returned by the resolver.
93
105
  *
94
106
  * A Source Event Stream represents a sequence of events, each of which triggers
95
107
  * a GraphQL execution for that event.
@@ -133,7 +145,7 @@ function createSourceEventStream(schema, document, rootValue, contextValue, vari
133
145
 
134
146
 
135
147
  var resolveFn = fieldDef.subscribe || exeContext.fieldResolver;
136
- var path = (0, _execute.addPath)(undefined, responseName);
148
+ var path = (0, _Path.addPath)(undefined, responseName);
137
149
  var info = (0, _execute.buildResolveInfo)(exeContext, fieldDef, fieldNodes, type, path); // resolveFieldValueOrError implements the "ResolveFieldEventStream"
138
150
  // algorithm from GraphQL specification. It differs from
139
151
  // "ResolveFieldValue" due to providing a different `resolveFn`.
@@ -143,7 +155,9 @@ function createSourceEventStream(schema, document, rootValue, contextValue, vari
143
155
  return Promise.resolve(result).then(function (eventStream) {
144
156
  // If eventStream is an Error, rethrow a located error.
145
157
  if (eventStream instanceof Error) {
146
- throw (0, _locatedError.locatedError)(eventStream, fieldNodes, (0, _execute.responsePathAsArray)(path));
158
+ return {
159
+ errors: [(0, _locatedError.locatedError)(eventStream, fieldNodes, (0, _Path.pathToArray)(path))]
160
+ };
147
161
  } // Assert field returned an event stream, otherwise yield an error.
148
162
 
149
163
 
@@ -155,6 +169,11 @@ function createSourceEventStream(schema, document, rootValue, contextValue, vari
155
169
  throw new Error('Subscription field must return Async Iterable. Received: ' + (0, _inspect.default)(eventStream));
156
170
  });
157
171
  } catch (error) {
158
- return Promise.reject(error);
172
+ // As with reportGraphQLError above, if the error is a GraphQLError, report
173
+ // it as an ExecutionResult; otherwise treat it as a system-class error and
174
+ // re-throw it.
175
+ return error instanceof _GraphQLError.GraphQLError ? Promise.resolve({
176
+ errors: [error]
177
+ }) : Promise.reject(error);
159
178
  }
160
179
  }
@@ -1,12 +1,17 @@
1
1
  // @flow strict
2
2
 
3
3
  import { isAsyncIterable } from 'iterall';
4
+
4
5
  import inspect from '../jsutils/inspect';
6
+ import { addPath, pathToArray } from '../jsutils/Path';
7
+
5
8
  import { GraphQLError } from '../error/GraphQLError';
6
9
  import { locatedError } from '../error/locatedError';
10
+
11
+ import { type DocumentNode } from '../language/ast';
12
+
7
13
  import {
8
14
  type ExecutionResult,
9
- addPath,
10
15
  assertValidExecutionArguments,
11
16
  buildExecutionContext,
12
17
  buildResolveInfo,
@@ -14,15 +19,15 @@ import {
14
19
  execute,
15
20
  getFieldDef,
16
21
  resolveFieldValueOrError,
17
- responsePathAsArray,
18
22
  } from '../execution/execute';
19
- import { type GraphQLSchema } from '../type/schema';
20
- import mapAsyncIterator from './mapAsyncIterator';
21
23
 
22
- import { type DocumentNode } from '../language/ast';
24
+ import { type GraphQLSchema } from '../type/schema';
23
25
  import { type GraphQLFieldResolver } from '../type/definition';
26
+
24
27
  import { getOperationRootType } from '../utilities/getOperationRootType';
25
28
 
29
+ import mapAsyncIterator from './mapAsyncIterator';
30
+
26
31
  export type SubscriptionArgs = {|
27
32
  schema: GraphQLSchema,
28
33
  document: DocumentNode,
@@ -38,8 +43,9 @@ export type SubscriptionArgs = {|
38
43
  * Implements the "Subscribe" algorithm described in the GraphQL specification.
39
44
  *
40
45
  * Returns a Promise which resolves to either an AsyncIterator (if successful)
41
- * or an ExecutionResult (client error). The promise will be rejected if a
42
- * server error occurs.
46
+ * or an ExecutionResult (error). The promise will be rejected if the schema or
47
+ * other arguments to this function are invalid, or if the resolved event stream
48
+ * is not an async iterable.
43
49
  *
44
50
  * If the client-provided arguments to this function do not result in a
45
51
  * compliant subscription, a GraphQL Response (ExecutionResult) with
@@ -150,17 +156,15 @@ function subscribeImpl(
150
156
 
151
157
  // Resolve the Source Stream, then map every source value to a
152
158
  // ExecutionResult value as described above.
153
- return sourcePromise.then(
154
- resultOrStream =>
155
- // Note: Flow can't refine isAsyncIterable, so explicit casts are used.
156
- isAsyncIterable(resultOrStream)
157
- ? mapAsyncIterator(
158
- ((resultOrStream: any): AsyncIterable<mixed>),
159
- mapSourceToResponse,
160
- reportGraphQLError,
161
- )
162
- : ((resultOrStream: any): ExecutionResult),
163
- reportGraphQLError,
159
+ return sourcePromise.then(resultOrStream =>
160
+ // Note: Flow can't refine isAsyncIterable, so explicit casts are used.
161
+ isAsyncIterable(resultOrStream)
162
+ ? mapAsyncIterator(
163
+ ((resultOrStream: any): AsyncIterable<mixed>),
164
+ mapSourceToResponse,
165
+ reportGraphQLError,
166
+ )
167
+ : ((resultOrStream: any): ExecutionResult),
164
168
  );
165
169
  }
166
170
 
@@ -168,11 +172,21 @@ function subscribeImpl(
168
172
  * Implements the "CreateSourceEventStream" algorithm described in the
169
173
  * GraphQL specification, resolving the subscription source event stream.
170
174
  *
171
- * Returns a Promise<AsyncIterable>.
175
+ * Returns a Promise which resolves to either an AsyncIterable (if successful)
176
+ * or an ExecutionResult (error). The promise will be rejected if the schema or
177
+ * other arguments to this function are invalid, or if the resolved event stream
178
+ * is not an async iterable.
179
+ *
180
+ * If the client-provided arguments to this function do not result in a
181
+ * compliant subscription, a GraphQL Response (ExecutionResult) with
182
+ * descriptive errors and no data will be returned.
183
+ *
184
+ * If the the source stream could not be created due to faulty subscription
185
+ * resolver logic or underlying systems, the promise will resolve to a single
186
+ * ExecutionResult containing `errors` and no `data`.
172
187
  *
173
- * If the client-provided invalid arguments, the source stream could not be
174
- * created, or the resolver did not return an AsyncIterable, this function will
175
- * will throw an error, which should be caught and handled by the caller.
188
+ * If the operation succeeded, the promise resolves to the AsyncIterable for the
189
+ * event stream returned by the resolver.
176
190
  *
177
191
  * A Source Event Stream represents a sequence of events, each of which triggers
178
192
  * a GraphQL execution for that event.
@@ -259,7 +273,9 @@ export function createSourceEventStream(
259
273
  return Promise.resolve(result).then(eventStream => {
260
274
  // If eventStream is an Error, rethrow a located error.
261
275
  if (eventStream instanceof Error) {
262
- throw locatedError(eventStream, fieldNodes, responsePathAsArray(path));
276
+ return {
277
+ errors: [locatedError(eventStream, fieldNodes, pathToArray(path))],
278
+ };
263
279
  }
264
280
 
265
281
  // Assert field returned an event stream, otherwise yield an error.
@@ -273,6 +289,11 @@ export function createSourceEventStream(
273
289
  );
274
290
  });
275
291
  } catch (error) {
276
- return Promise.reject(error);
292
+ // As with reportGraphQLError above, if the error is a GraphQLError, report
293
+ // it as an ExecutionResult; otherwise treat it as a system-class error and
294
+ // re-throw it.
295
+ return error instanceof GraphQLError
296
+ ? Promise.resolve({ errors: [error] })
297
+ : Promise.reject(error);
277
298
  }
278
299
  }
@@ -1,10 +1,11 @@
1
1
  import { isAsyncIterable } from 'iterall';
2
2
  import inspect from '../jsutils/inspect';
3
+ import { addPath, pathToArray } from '../jsutils/Path';
3
4
  import { GraphQLError } from '../error/GraphQLError';
4
5
  import { locatedError } from '../error/locatedError';
5
- import { addPath, assertValidExecutionArguments, buildExecutionContext, buildResolveInfo, collectFields, execute, getFieldDef, resolveFieldValueOrError, responsePathAsArray } from '../execution/execute';
6
- import mapAsyncIterator from './mapAsyncIterator';
6
+ import { assertValidExecutionArguments, buildExecutionContext, buildResolveInfo, collectFields, execute, getFieldDef, resolveFieldValueOrError } from '../execution/execute';
7
7
  import { getOperationRootType } from '../utilities/getOperationRootType';
8
+ import mapAsyncIterator from './mapAsyncIterator';
8
9
  export function subscribe(argsOrSchema, document, rootValue, contextValue, variableValues, operationName, fieldResolver, subscribeFieldResolver) {
9
10
  /* eslint-enable no-redeclare */
10
11
  // Extract arguments from object args if provided.
@@ -61,17 +62,27 @@ function subscribeImpl(args) {
61
62
  return (// Note: Flow can't refine isAsyncIterable, so explicit casts are used.
62
63
  isAsyncIterable(resultOrStream) ? mapAsyncIterator(resultOrStream, mapSourceToResponse, reportGraphQLError) : resultOrStream
63
64
  );
64
- }, reportGraphQLError);
65
+ });
65
66
  }
66
67
  /**
67
68
  * Implements the "CreateSourceEventStream" algorithm described in the
68
69
  * GraphQL specification, resolving the subscription source event stream.
69
70
  *
70
- * Returns a Promise<AsyncIterable>.
71
+ * Returns a Promise which resolves to either an AsyncIterable (if successful)
72
+ * or an ExecutionResult (error). The promise will be rejected if the schema or
73
+ * other arguments to this function are invalid, or if the resolved event stream
74
+ * is not an async iterable.
71
75
  *
72
- * If the client-provided invalid arguments, the source stream could not be
73
- * created, or the resolver did not return an AsyncIterable, this function will
74
- * will throw an error, which should be caught and handled by the caller.
76
+ * If the client-provided arguments to this function do not result in a
77
+ * compliant subscription, a GraphQL Response (ExecutionResult) with
78
+ * descriptive errors and no data will be returned.
79
+ *
80
+ * If the the source stream could not be created due to faulty subscription
81
+ * resolver logic or underlying systems, the promise will resolve to a single
82
+ * ExecutionResult containing `errors` and no `data`.
83
+ *
84
+ * If the operation succeeded, the promise resolves to the AsyncIterable for the
85
+ * event stream returned by the resolver.
75
86
  *
76
87
  * A Source Event Stream represents a sequence of events, each of which triggers
77
88
  * a GraphQL execution for that event.
@@ -125,7 +136,9 @@ export function createSourceEventStream(schema, document, rootValue, contextValu
125
136
  return Promise.resolve(result).then(function (eventStream) {
126
137
  // If eventStream is an Error, rethrow a located error.
127
138
  if (eventStream instanceof Error) {
128
- throw locatedError(eventStream, fieldNodes, responsePathAsArray(path));
139
+ return {
140
+ errors: [locatedError(eventStream, fieldNodes, pathToArray(path))]
141
+ };
129
142
  } // Assert field returned an event stream, otherwise yield an error.
130
143
 
131
144
 
@@ -137,6 +150,11 @@ export function createSourceEventStream(schema, document, rootValue, contextValu
137
150
  throw new Error('Subscription field must return Async Iterable. Received: ' + inspect(eventStream));
138
151
  });
139
152
  } catch (error) {
140
- return Promise.reject(error);
153
+ // As with reportGraphQLError above, if the error is a GraphQLError, report
154
+ // it as an ExecutionResult; otherwise treat it as a system-class error and
155
+ // re-throw it.
156
+ return error instanceof GraphQLError ? Promise.resolve({
157
+ errors: [error]
158
+ }) : Promise.reject(error);
141
159
  }
142
160
  }
@@ -0,0 +1,4 @@
1
+ // Conveniently represents flow's "Maybe" type https://flow.org/en/docs/types/maybe/
2
+ type Maybe<T> = null | undefined | T;
3
+
4
+ export default Maybe;