graphql 17.0.0-rc.0 → 17.0.0

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 (230) hide show
  1. package/README.md +3 -5
  2. package/diagnostics.d.mts +67 -38
  3. package/diagnostics.d.ts +67 -38
  4. package/diagnostics.js.map +1 -1
  5. package/diagnostics.mjs.map +1 -1
  6. package/error/locatedError.d.mts +1 -3
  7. package/error/locatedError.d.ts +1 -3
  8. package/error/locatedError.js.map +1 -1
  9. package/error/locatedError.mjs.map +1 -1
  10. package/execution/Executor.d.mts +2 -2
  11. package/execution/Executor.d.ts +2 -2
  12. package/execution/Executor.js.map +1 -1
  13. package/execution/Executor.mjs.map +1 -1
  14. package/execution/execute.d.mts +65 -44
  15. package/execution/execute.d.ts +65 -44
  16. package/execution/execute.js +11 -2
  17. package/execution/execute.js.map +1 -1
  18. package/execution/execute.mjs +11 -2
  19. package/execution/execute.mjs.map +1 -1
  20. package/execution/values.d.mts +17 -17
  21. package/execution/values.d.ts +17 -17
  22. package/execution/values.js.map +1 -1
  23. package/execution/values.mjs.map +1 -1
  24. package/language/parser.d.mts +20 -30
  25. package/language/parser.d.ts +20 -30
  26. package/language/parser.js +3 -9
  27. package/language/parser.js.map +1 -1
  28. package/language/parser.mjs +3 -9
  29. package/language/parser.mjs.map +1 -1
  30. package/language/predicates.d.mts +5 -1
  31. package/language/predicates.d.ts +5 -1
  32. package/language/predicates.js.map +1 -1
  33. package/language/predicates.mjs.map +1 -1
  34. package/language/source.d.mts +4 -5
  35. package/language/source.d.ts +4 -5
  36. package/language/source.js.map +1 -1
  37. package/language/source.mjs.map +1 -1
  38. package/language/visitor.d.mts +10 -2
  39. package/language/visitor.d.ts +10 -2
  40. package/language/visitor.js.map +1 -1
  41. package/language/visitor.mjs.map +1 -1
  42. package/package.json +2 -2
  43. package/type/definition.d.mts +96 -64
  44. package/type/definition.d.ts +96 -64
  45. package/type/definition.js.map +1 -1
  46. package/type/definition.mjs.map +1 -1
  47. package/type/directives.d.mts +3 -3
  48. package/type/directives.d.ts +3 -3
  49. package/type/directives.js.map +1 -1
  50. package/type/directives.mjs.map +1 -1
  51. package/type/schema.d.mts +4 -8
  52. package/type/schema.d.ts +4 -8
  53. package/type/schema.js.map +1 -1
  54. package/type/schema.mjs.map +1 -1
  55. package/type/validate.js +101 -30
  56. package/type/validate.js.map +1 -1
  57. package/type/validate.mjs +101 -30
  58. package/type/validate.mjs.map +1 -1
  59. package/utilities/TypeInfo.d.mts +1 -1
  60. package/utilities/TypeInfo.d.ts +1 -1
  61. package/utilities/TypeInfo.js.map +1 -1
  62. package/utilities/TypeInfo.mjs.map +1 -1
  63. package/utilities/buildASTSchema.d.mts +0 -1
  64. package/utilities/buildASTSchema.d.ts +0 -1
  65. package/utilities/buildASTSchema.js +0 -1
  66. package/utilities/buildASTSchema.js.map +1 -1
  67. package/utilities/buildASTSchema.mjs +0 -1
  68. package/utilities/buildASTSchema.mjs.map +1 -1
  69. package/utilities/buildClientSchema.d.mts +5 -1
  70. package/utilities/buildClientSchema.d.ts +5 -1
  71. package/utilities/buildClientSchema.js.map +1 -1
  72. package/utilities/buildClientSchema.mjs.map +1 -1
  73. package/utilities/coerceInputValue.d.mts +7 -6
  74. package/utilities/coerceInputValue.d.ts +7 -6
  75. package/utilities/coerceInputValue.js.map +1 -1
  76. package/utilities/coerceInputValue.mjs.map +1 -1
  77. package/utilities/concatAST.d.mts +4 -1
  78. package/utilities/concatAST.d.ts +4 -1
  79. package/utilities/concatAST.js.map +1 -1
  80. package/utilities/concatAST.mjs.map +1 -1
  81. package/utilities/extendSchema.d.mts +3 -3
  82. package/utilities/extendSchema.d.ts +3 -3
  83. package/utilities/extendSchema.js +5 -1
  84. package/utilities/extendSchema.js.map +1 -1
  85. package/utilities/extendSchema.mjs +5 -1
  86. package/utilities/extendSchema.mjs.map +1 -1
  87. package/utilities/introspectionFromSchema.d.mts +6 -2
  88. package/utilities/introspectionFromSchema.d.ts +6 -2
  89. package/utilities/introspectionFromSchema.js.map +1 -1
  90. package/utilities/introspectionFromSchema.mjs.map +1 -1
  91. package/utilities/lexicographicSortSchema.d.mts +5 -1
  92. package/utilities/lexicographicSortSchema.d.ts +5 -1
  93. package/utilities/lexicographicSortSchema.js.map +1 -1
  94. package/utilities/lexicographicSortSchema.mjs.map +1 -1
  95. package/utilities/printSchema.d.mts +5 -1
  96. package/utilities/printSchema.d.ts +5 -1
  97. package/utilities/printSchema.js.map +1 -1
  98. package/utilities/printSchema.mjs.map +1 -1
  99. package/utilities/replaceVariables.d.mts +4 -8
  100. package/utilities/replaceVariables.d.ts +4 -8
  101. package/utilities/replaceVariables.js.map +1 -1
  102. package/utilities/replaceVariables.mjs.map +1 -1
  103. package/utilities/stripIgnoredCharacters.d.mts +2 -2
  104. package/utilities/stripIgnoredCharacters.d.ts +2 -2
  105. package/utilities/stripIgnoredCharacters.js.map +1 -1
  106. package/utilities/stripIgnoredCharacters.mjs.map +1 -1
  107. package/utilities/typeComparators.d.mts +1 -5
  108. package/utilities/typeComparators.d.ts +1 -5
  109. package/utilities/typeComparators.js.map +1 -1
  110. package/utilities/typeComparators.mjs.map +1 -1
  111. package/utilities/validateInputValue.d.mts +10 -8
  112. package/utilities/validateInputValue.d.ts +10 -8
  113. package/utilities/validateInputValue.js.map +1 -1
  114. package/utilities/validateInputValue.mjs.map +1 -1
  115. package/validation/rules/DeferStreamDirectiveOnRootFieldRule.d.mts +4 -1
  116. package/validation/rules/DeferStreamDirectiveOnRootFieldRule.d.ts +4 -1
  117. package/validation/rules/DeferStreamDirectiveOnRootFieldRule.js.map +1 -1
  118. package/validation/rules/DeferStreamDirectiveOnRootFieldRule.mjs.map +1 -1
  119. package/validation/rules/ExecutableDefinitionsRule.d.mts +6 -2
  120. package/validation/rules/ExecutableDefinitionsRule.d.ts +6 -2
  121. package/validation/rules/ExecutableDefinitionsRule.js.map +1 -1
  122. package/validation/rules/ExecutableDefinitionsRule.mjs.map +1 -1
  123. package/validation/rules/FieldsOnCorrectTypeRule.d.mts +3 -1
  124. package/validation/rules/FieldsOnCorrectTypeRule.d.ts +3 -1
  125. package/validation/rules/FieldsOnCorrectTypeRule.js.map +1 -1
  126. package/validation/rules/FieldsOnCorrectTypeRule.mjs.map +1 -1
  127. package/validation/rules/FragmentsOnCompositeTypesRule.d.mts +6 -2
  128. package/validation/rules/FragmentsOnCompositeTypesRule.d.ts +6 -2
  129. package/validation/rules/FragmentsOnCompositeTypesRule.js.map +1 -1
  130. package/validation/rules/FragmentsOnCompositeTypesRule.mjs.map +1 -1
  131. package/validation/rules/KnownArgumentNamesRule.d.mts +3 -1
  132. package/validation/rules/KnownArgumentNamesRule.d.ts +3 -1
  133. package/validation/rules/KnownArgumentNamesRule.js.map +1 -1
  134. package/validation/rules/KnownArgumentNamesRule.mjs.map +1 -1
  135. package/validation/rules/KnownDirectivesRule.js +2 -1
  136. package/validation/rules/KnownDirectivesRule.js.map +1 -1
  137. package/validation/rules/KnownDirectivesRule.mjs +2 -1
  138. package/validation/rules/KnownDirectivesRule.mjs.map +1 -1
  139. package/validation/rules/KnownFragmentNamesRule.d.mts +3 -1
  140. package/validation/rules/KnownFragmentNamesRule.d.ts +3 -1
  141. package/validation/rules/KnownFragmentNamesRule.js.map +1 -1
  142. package/validation/rules/KnownFragmentNamesRule.mjs.map +1 -1
  143. package/validation/rules/LoneAnonymousOperationRule.d.mts +6 -2
  144. package/validation/rules/LoneAnonymousOperationRule.d.ts +6 -2
  145. package/validation/rules/LoneAnonymousOperationRule.js.map +1 -1
  146. package/validation/rules/LoneAnonymousOperationRule.mjs.map +1 -1
  147. package/validation/rules/MaxIntrospectionDepthRule.d.mts +6 -2
  148. package/validation/rules/MaxIntrospectionDepthRule.d.ts +6 -2
  149. package/validation/rules/MaxIntrospectionDepthRule.js.map +1 -1
  150. package/validation/rules/MaxIntrospectionDepthRule.mjs.map +1 -1
  151. package/validation/rules/NoUndefinedVariablesRule.d.mts +3 -1
  152. package/validation/rules/NoUndefinedVariablesRule.d.ts +3 -1
  153. package/validation/rules/NoUndefinedVariablesRule.js.map +1 -1
  154. package/validation/rules/NoUndefinedVariablesRule.mjs.map +1 -1
  155. package/validation/rules/NoUnusedFragmentsRule.d.mts +3 -1
  156. package/validation/rules/NoUnusedFragmentsRule.d.ts +3 -1
  157. package/validation/rules/NoUnusedFragmentsRule.js.map +1 -1
  158. package/validation/rules/NoUnusedFragmentsRule.mjs.map +1 -1
  159. package/validation/rules/NoUnusedVariablesRule.d.mts +3 -1
  160. package/validation/rules/NoUnusedVariablesRule.d.ts +3 -1
  161. package/validation/rules/NoUnusedVariablesRule.js.map +1 -1
  162. package/validation/rules/NoUnusedVariablesRule.mjs.map +1 -1
  163. package/validation/rules/OverlappingFieldsCanBeMergedRule.d.mts +6 -2
  164. package/validation/rules/OverlappingFieldsCanBeMergedRule.d.ts +6 -2
  165. package/validation/rules/OverlappingFieldsCanBeMergedRule.js.map +1 -1
  166. package/validation/rules/OverlappingFieldsCanBeMergedRule.mjs.map +1 -1
  167. package/validation/rules/PossibleFragmentSpreadsRule.d.mts +6 -2
  168. package/validation/rules/PossibleFragmentSpreadsRule.d.ts +6 -2
  169. package/validation/rules/PossibleFragmentSpreadsRule.js.map +1 -1
  170. package/validation/rules/PossibleFragmentSpreadsRule.mjs.map +1 -1
  171. package/validation/rules/ProvidedRequiredArgumentsRule.d.mts +6 -2
  172. package/validation/rules/ProvidedRequiredArgumentsRule.d.ts +6 -2
  173. package/validation/rules/ProvidedRequiredArgumentsRule.js.map +1 -1
  174. package/validation/rules/ProvidedRequiredArgumentsRule.mjs.map +1 -1
  175. package/validation/rules/SingleFieldSubscriptionsRule.d.mts +6 -2
  176. package/validation/rules/SingleFieldSubscriptionsRule.d.ts +6 -2
  177. package/validation/rules/SingleFieldSubscriptionsRule.js.map +1 -1
  178. package/validation/rules/SingleFieldSubscriptionsRule.mjs.map +1 -1
  179. package/validation/rules/UniqueArgumentNamesRule.d.mts +3 -1
  180. package/validation/rules/UniqueArgumentNamesRule.d.ts +3 -1
  181. package/validation/rules/UniqueArgumentNamesRule.js.map +1 -1
  182. package/validation/rules/UniqueArgumentNamesRule.mjs.map +1 -1
  183. package/validation/rules/UniqueDirectivesPerLocationRule.d.mts +6 -2
  184. package/validation/rules/UniqueDirectivesPerLocationRule.d.ts +6 -2
  185. package/validation/rules/UniqueDirectivesPerLocationRule.js.map +1 -1
  186. package/validation/rules/UniqueDirectivesPerLocationRule.mjs.map +1 -1
  187. package/validation/rules/UniqueFragmentNamesRule.d.mts +3 -1
  188. package/validation/rules/UniqueFragmentNamesRule.d.ts +3 -1
  189. package/validation/rules/UniqueFragmentNamesRule.js.map +1 -1
  190. package/validation/rules/UniqueFragmentNamesRule.mjs.map +1 -1
  191. package/validation/rules/UniqueInputFieldNamesRule.d.mts +6 -2
  192. package/validation/rules/UniqueInputFieldNamesRule.d.ts +6 -2
  193. package/validation/rules/UniqueInputFieldNamesRule.js.map +1 -1
  194. package/validation/rules/UniqueInputFieldNamesRule.mjs.map +1 -1
  195. package/validation/rules/UniqueOperationNamesRule.d.mts +3 -1
  196. package/validation/rules/UniqueOperationNamesRule.d.ts +3 -1
  197. package/validation/rules/UniqueOperationNamesRule.js.map +1 -1
  198. package/validation/rules/UniqueOperationNamesRule.mjs.map +1 -1
  199. package/validation/rules/UniqueVariableNamesRule.d.mts +3 -1
  200. package/validation/rules/UniqueVariableNamesRule.d.ts +3 -1
  201. package/validation/rules/UniqueVariableNamesRule.js.map +1 -1
  202. package/validation/rules/UniqueVariableNamesRule.mjs.map +1 -1
  203. package/validation/rules/ValuesOfCorrectTypeRule.d.mts +3 -1
  204. package/validation/rules/ValuesOfCorrectTypeRule.d.ts +3 -1
  205. package/validation/rules/ValuesOfCorrectTypeRule.js.map +1 -1
  206. package/validation/rules/ValuesOfCorrectTypeRule.mjs.map +1 -1
  207. package/validation/rules/VariablesAreInputTypesRule.d.mts +6 -2
  208. package/validation/rules/VariablesAreInputTypesRule.d.ts +6 -2
  209. package/validation/rules/VariablesAreInputTypesRule.js.map +1 -1
  210. package/validation/rules/VariablesAreInputTypesRule.mjs.map +1 -1
  211. package/validation/rules/VariablesInAllowedPositionRule.d.mts +6 -2
  212. package/validation/rules/VariablesInAllowedPositionRule.d.ts +6 -2
  213. package/validation/rules/VariablesInAllowedPositionRule.js.map +1 -1
  214. package/validation/rules/VariablesInAllowedPositionRule.mjs.map +1 -1
  215. package/validation/rules/custom/NoDeprecatedCustomRule.d.mts +3 -1
  216. package/validation/rules/custom/NoDeprecatedCustomRule.d.ts +3 -1
  217. package/validation/rules/custom/NoDeprecatedCustomRule.js.map +1 -1
  218. package/validation/rules/custom/NoDeprecatedCustomRule.mjs.map +1 -1
  219. package/validation/rules/custom/NoSchemaIntrospectionCustomRule.d.mts +6 -2
  220. package/validation/rules/custom/NoSchemaIntrospectionCustomRule.d.ts +6 -2
  221. package/validation/rules/custom/NoSchemaIntrospectionCustomRule.js.map +1 -1
  222. package/validation/rules/custom/NoSchemaIntrospectionCustomRule.mjs.map +1 -1
  223. package/validation/validate.d.mts +3 -6
  224. package/validation/validate.d.ts +3 -6
  225. package/validation/validate.js.map +1 -1
  226. package/validation/validate.mjs.map +1 -1
  227. package/version.js +2 -2
  228. package/version.js.map +1 -1
  229. package/version.mjs +2 -2
  230. package/version.mjs.map +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"Executor.js","sourceRoot":"","sources":["../../src/execution/Executor.ts"],"names":[],"mappings":"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","sourcesContent":["/** @category Execution */\n\nimport { inspect } from '../jsutils/inspect.ts';\nimport { invariant } from '../jsutils/invariant.ts';\nimport { isAsyncIterable } from '../jsutils/isAsyncIterable.ts';\nimport { isIterableObject } from '../jsutils/isIterableObject.ts';\nimport { isPromise, isPromiseLike } from '../jsutils/isPromise.ts';\nimport { memoize2 } from '../jsutils/memoize2.ts';\nimport { memoize3 } from '../jsutils/memoize3.ts';\nimport type { ObjMap } from '../jsutils/ObjMap.ts';\nimport type { Path } from '../jsutils/Path.ts';\nimport { addPath, pathToArray } from '../jsutils/Path.ts';\nimport { promiseForObject } from '../jsutils/promiseForObject.ts';\nimport type { PromiseOrValue } from '../jsutils/PromiseOrValue.ts';\nimport { promiseReduce } from '../jsutils/promiseReduce.ts';\n\nimport { ensureGraphQLError } from '../error/ensureGraphQLError.ts';\nimport type { GraphQLFormattedError } from '../error/GraphQLError.ts';\nimport { GraphQLError } from '../error/GraphQLError.ts';\nimport { locatedError } from '../error/locatedError.ts';\n\nimport type { FieldNode } from '../language/ast.ts';\nimport { OperationTypeNode } from '../language/ast.ts';\n\nimport type {\n GraphQLAbstractType,\n GraphQLLeafType,\n GraphQLList,\n GraphQLObjectType,\n GraphQLOutputType,\n GraphQLResolveInfo,\n GraphQLResolveInfoHelpers,\n} from '../type/definition.ts';\nimport {\n isAbstractType,\n isLeafType,\n isListType,\n isNonNullType,\n isObjectType,\n} from '../type/definition.ts';\nimport type { GraphQLSchema } from '../type/schema.ts';\n\nimport type {\n GraphQLExecuteRootSelectionSetContext,\n GraphQLResolveContext,\n MinimalTracingChannel,\n} from '../diagnostics.ts';\nimport {\n executeRootSelectionSetChannel,\n resolveChannel,\n shouldTrace,\n traceMixed,\n} from '../diagnostics.ts';\n\nimport { AbortedGraphQLExecutionError } from './AbortedGraphQLExecutionError.ts';\nimport { buildResolveInfo } from './buildResolveInfo.ts';\nimport { withCancellation } from './cancellablePromise.ts';\nimport type {\n DeferUsage,\n FieldDetailsList,\n GroupedFieldSet,\n} from './collectFields.ts';\nimport {\n collectFields,\n collectSubfields as _collectSubfields,\n} from './collectFields.ts';\nimport { collectIteratorPromises } from './collectIteratorPromises.ts';\nimport type { SharedExecutionContext } from './createSharedExecutionContext.ts';\nimport { createSharedExecutionContext } from './createSharedExecutionContext.ts';\nimport type { ValidatedExecutionArgs } from './ExecutionArgs.ts';\nimport type { StreamUsage } from './getStreamUsage.ts';\nimport { getStreamUsage as _getStreamUsage } from './getStreamUsage.ts';\nimport { runAsyncWorkFinishedHook } from './hooks.ts';\nimport { returnIteratorCatchingErrors } from './returnIteratorCatchingErrors.ts';\nimport { getArgumentValues } from './values.ts';\n\n/* eslint-disable max-params */\n// This file contains a lot of such errors but we plan to refactor it anyway\n// so just disable it for entire file.\n\n/**\n * Terminology\n *\n * \"Definitions\" are the generic name for top-level statements in the document.\n * Examples of this include:\n * 1) Operations (such as a query)\n * 2) Fragments\n *\n * \"Operations\" are a generic name for requests in the document.\n * Examples of this include:\n * 1) query,\n * 2) mutation\n *\n * \"Selections\" are the definitions that can appear legally and at\n * single level of the query. These include:\n * 1) field references e.g `a`\n * 2) fragment \"spreads\" e.g. `...c`\n * 3) inline fragment \"spreads\" e.g. `...on Type { a }`\n *\n * @internal\n */\n\n/**\n * A memoized collection of relevant subfields with regard to the return\n * type. Memoizing ensures the subfields are not repeatedly calculated, which\n * saves overhead when resolving lists of values.\n *\n * @internal\n */\nexport const collectSubfields: (\n validatedExecutionArgs: ValidatedExecutionArgs,\n returnType: GraphQLObjectType,\n fieldDetailsList: FieldDetailsList,\n) => ReturnType<typeof _collectSubfields> = memoize3(\n (\n validatedExecutionArgs: ValidatedExecutionArgs,\n returnType: GraphQLObjectType,\n fieldDetailsList: FieldDetailsList,\n ) => {\n const { schema, fragments, variableValues, hideSuggestions } =\n validatedExecutionArgs;\n return _collectSubfields(\n schema,\n fragments,\n variableValues,\n returnType,\n fieldDetailsList,\n hideSuggestions,\n );\n },\n);\n\n/** @internal */\nexport const getStreamUsage: typeof _getStreamUsage = memoize2(\n (\n validatedExecutionArgs: ValidatedExecutionArgs,\n fieldDetailsList: FieldDetailsList,\n ) => _getStreamUsage(validatedExecutionArgs, fieldDetailsList),\n);\n\nclass CollectedErrors {\n private _errorPositions: Set<Path | undefined>;\n private _errors: Array<GraphQLError>;\n constructor() {\n this._errorPositions = new Set<Path | undefined>();\n this._errors = [];\n }\n\n get errors(): ReadonlyArray<GraphQLError> {\n return this._errors;\n }\n\n add(error: GraphQLError, path: Path | undefined): void {\n // Do not modify errors list if the execution position for this error or\n // any of its ancestors has already been nulled via error propagation.\n // This check should be unnecessary for implementations able to implement\n // actual cancellation.\n if (this.hasNulledPosition(path)) {\n return;\n }\n this._errorPositions.add(path);\n this._errors.push(error);\n }\n\n hasNulledPosition(startPath: Path | undefined): boolean {\n let path = startPath;\n while (path !== undefined) {\n if (this._errorPositions.has(path)) {\n return true;\n }\n path = path.prev;\n }\n return this._errorPositions.has(undefined);\n }\n}\n\n/**\n * Represents the response produced by executing a GraphQL operation.\n * @typeParam TData - Shape of the execution data payload.\n * @typeParam TExtensions - Shape of the extensions payload.\n */\nexport interface ExecutionResult<\n TData = ObjMap<unknown>,\n TExtensions = ObjMap<unknown>,\n> {\n /** Errors raised while parsing, validating, or executing the operation. */\n errors?: ReadonlyArray<GraphQLError>;\n /** Data returned by execution, or null when execution could not produce data. */\n data?: TData | null;\n /** Additional non-standard metadata included in the execution result. */\n extensions?: TExtensions;\n}\n\n/**\n * A JSON-serializable GraphQL execution result.\n * @typeParam TData - Shape of the formatted data payload.\n * @typeParam TExtensions - Shape of the formatted extensions payload.\n */\nexport interface FormattedExecutionResult<\n TData = ObjMap<unknown>,\n TExtensions = ObjMap<unknown>,\n> {\n /** Errors raised while parsing, validating, or executing the operation. */\n errors?: ReadonlyArray<GraphQLFormattedError>;\n /** Data returned by execution, or null when execution could not produce data. */\n data?: TData | null;\n /** Additional non-standard metadata included in the formatted result. */\n extensions?: TExtensions;\n}\n\nconst defaultAbortReason = new Error('This operation was aborted');\n\n/** @internal */\nexport class Executor<\n TPositionContext = undefined, // No position context by default\n TAlternativeInitialResponse = ExecutionResult, // No alternative by default\n> {\n validatedExecutionArgs: ValidatedExecutionArgs;\n aborted: boolean;\n abortReason: unknown;\n sharedExecutionContext: SharedExecutionContext;\n collectedErrors: CollectedErrors;\n abortResultPromise: (() => void) | undefined;\n resolverAbortController: AbortController | undefined;\n getAbortSignal: () => AbortSignal | undefined;\n getAsyncHelpers: () => GraphQLResolveInfoHelpers;\n promiseAll: <T>(\n values: ReadonlyArray<PromiseOrValue<T>>,\n ) => Promise<Array<T>>;\n\n constructor(\n validatedExecutionArgs: ValidatedExecutionArgs,\n sharedExecutionContext?: SharedExecutionContext,\n ) {\n this.validatedExecutionArgs = validatedExecutionArgs;\n this.aborted = false;\n this.abortReason = defaultAbortReason;\n this.collectedErrors = new CollectedErrors();\n\n if (sharedExecutionContext === undefined) {\n this.resolverAbortController = new AbortController();\n this.sharedExecutionContext = createSharedExecutionContext(\n this.resolverAbortController.signal,\n );\n } else {\n this.sharedExecutionContext = sharedExecutionContext;\n }\n const { getAbortSignal, getAsyncHelpers, promiseAll } =\n this.sharedExecutionContext;\n this.getAbortSignal = getAbortSignal;\n this.getAsyncHelpers = getAsyncHelpers;\n this.promiseAll = promiseAll;\n }\n\n executeRootSelectionSet(\n serially?: boolean,\n ): PromiseOrValue<ExecutionResult | TAlternativeInitialResponse> {\n if (!shouldTrace(executeRootSelectionSetChannel)) {\n return this.executeRootSelectionSetImpl(serially);\n }\n return traceMixed(\n executeRootSelectionSetChannel,\n this.buildExecuteContextFromValidatedArgs(this.validatedExecutionArgs),\n () => this.executeRootSelectionSetImpl(serially),\n );\n }\n\n /**\n * Build an operation-scoped diagnostics context from ValidatedExecutionArgs.\n * Used after the operation has already been resolved during argument\n * validation.\n * @internal\n */\n buildExecuteContextFromValidatedArgs(\n args: ValidatedExecutionArgs,\n ): GraphQLExecuteRootSelectionSetContext {\n return {\n schema: args.schema,\n document: args.document,\n operation: args.operation,\n rawVariableValues: args.rawVariableValues,\n operationName: args.operation.name?.value,\n operationType: args.operation.operation,\n };\n }\n\n executeRootSelectionSetImpl(\n serially?: boolean,\n ): PromiseOrValue<ExecutionResult | TAlternativeInitialResponse> {\n const externalAbortSignal = this.validatedExecutionArgs.externalAbortSignal;\n let removeExternalAbortListener: (() => void) | undefined;\n if (externalAbortSignal) {\n externalAbortSignal.throwIfAborted();\n const onExternalAbort = () => {\n this.abort(externalAbortSignal.reason);\n };\n removeExternalAbortListener = () =>\n externalAbortSignal.removeEventListener('abort', onExternalAbort);\n externalAbortSignal.addEventListener('abort', onExternalAbort);\n }\n\n const maybeRemoveExternalAbortListener = () => {\n removeExternalAbortListener?.();\n };\n\n let result: PromiseOrValue<ObjMap<unknown>>;\n try {\n const {\n schema,\n fragments,\n rootValue,\n operation,\n variableValues,\n hideSuggestions,\n } = this.validatedExecutionArgs;\n\n const { operation: operationType, selectionSet } = operation;\n\n const rootType = schema.getRootType(operationType);\n if (rootType == null) {\n throw new GraphQLError(\n `Schema is not configured to execute ${operationType} operation.`,\n { nodes: operation },\n );\n }\n\n const { groupedFieldSet, newDeferUsages } = collectFields(\n schema,\n fragments,\n variableValues,\n rootType,\n selectionSet,\n hideSuggestions,\n );\n\n result = this.executeCollectedRootFields(\n rootType,\n rootValue,\n groupedFieldSet,\n serially ?? operationType === OperationTypeNode.MUTATION,\n newDeferUsages,\n );\n\n if (isPromise(result)) {\n const promise = result.then(\n (data) => {\n maybeRemoveExternalAbortListener();\n return this.buildResponse(data);\n },\n (error: unknown) => {\n maybeRemoveExternalAbortListener();\n this.collectedErrors.add(ensureGraphQLError(error), undefined);\n return this.buildResponse(null);\n },\n );\n this.sharedExecutionContext.asyncWorkTracker.add(promise);\n const { promise: cancellablePromise, abort: abortResultPromise } =\n withCancellation(promise.then((resolved) => this.finish(resolved)));\n this.abortResultPromise = () => {\n abortResultPromise(this.createAbortedExecutionError(promise));\n };\n if (this.aborted) {\n this.abortResultPromise();\n }\n return cancellablePromise;\n }\n maybeRemoveExternalAbortListener();\n } catch (error) {\n maybeRemoveExternalAbortListener();\n this.collectedErrors.add(ensureGraphQLError(error), undefined);\n return this.finish(this.buildResponse(null));\n }\n return this.finish(this.buildResponse(result));\n }\n\n abort(reason?: unknown): void {\n if (this.aborted) {\n return;\n }\n this.aborted = true;\n if (reason !== undefined) {\n this.abortReason = reason;\n }\n this.abortResultPromise?.();\n this.resolverAbortController?.abort(this.abortReason);\n }\n\n finish<T>(result: T): T {\n if (this.aborted) {\n throw this.createAbortedExecutionError(result);\n }\n this.aborted = true;\n return result;\n }\n\n createAbortedExecutionError<T>(\n result: PromiseOrValue<T>,\n ): AbortedGraphQLExecutionError<T> {\n return new AbortedGraphQLExecutionError(this.abortReason, result);\n }\n\n getFinishSharedExecution(): () => void {\n const resolverAbortController = this.resolverAbortController;\n const asyncWorkFinishedHook =\n this.validatedExecutionArgs.hooks?.asyncWorkFinished;\n if (asyncWorkFinishedHook === undefined) {\n return () => resolverAbortController?.abort();\n }\n\n const validatedExecutionArgs = this.validatedExecutionArgs;\n const sharedExecutionContext = this.sharedExecutionContext;\n return () => {\n resolverAbortController?.abort();\n runAsyncWorkFinishedHook(\n validatedExecutionArgs,\n sharedExecutionContext,\n asyncWorkFinishedHook,\n );\n };\n }\n\n /**\n * Given a completed execution context and data, build the `{ errors, data }`\n * response defined by the \"Response\" section of the GraphQL specification.\n *\n * @internal\n */\n buildResponse(\n data: ObjMap<unknown> | null,\n ): ExecutionResult | TAlternativeInitialResponse {\n this.getFinishSharedExecution()();\n const errors = this.collectedErrors.errors;\n return errors.length ? { errors, data } : { data };\n }\n\n executeCollectedRootFields(\n rootType: GraphQLObjectType,\n rootValue: unknown,\n originalGroupedFieldSet: GroupedFieldSet,\n serially: boolean,\n _newDeferUsages: ReadonlyArray<DeferUsage>,\n ): PromiseOrValue<ObjMap<unknown>> {\n return this.executeRootGroupedFieldSet(\n rootType,\n rootValue,\n originalGroupedFieldSet,\n serially,\n undefined,\n );\n }\n\n executeRootGroupedFieldSet(\n rootType: GraphQLObjectType,\n rootValue: unknown,\n groupedFieldSet: GroupedFieldSet,\n serially: boolean,\n positionContext?: TPositionContext,\n ): PromiseOrValue<ObjMap<unknown>> {\n return serially\n ? this.executeFieldsSerially(\n rootType,\n rootValue,\n undefined,\n groupedFieldSet,\n positionContext,\n )\n : this.executeFields(\n rootType,\n rootValue,\n undefined,\n groupedFieldSet,\n positionContext,\n );\n }\n\n /**\n * Implements the \"Executing selection sets\" section of the spec\n * for fields that must be executed serially.\n *\n * @internal\n */\n executeFieldsSerially(\n parentType: GraphQLObjectType,\n sourceValue: unknown,\n path: Path | undefined,\n groupedFieldSet: GroupedFieldSet,\n positionContext: TPositionContext | undefined,\n ): PromiseOrValue<ObjMap<unknown>> {\n let tracingChannel = shouldTrace(resolveChannel)\n ? resolveChannel\n : undefined;\n\n return promiseReduce(\n groupedFieldSet,\n (results, [responseName, fieldDetailsList]) => {\n if (this.aborted) {\n throw new Error('Aborted!');\n }\n const fieldPath = addPath(path, responseName, parentType.name);\n const result = this.executeField(\n parentType,\n sourceValue,\n fieldDetailsList,\n fieldPath,\n positionContext,\n tracingChannel,\n );\n if (result === undefined) {\n return results;\n }\n if (isPromise(result)) {\n return result.then((resolved) => {\n results[responseName] = resolved;\n tracingChannel = shouldTrace(resolveChannel)\n ? resolveChannel\n : undefined;\n return results;\n });\n }\n results[responseName] = result;\n return results;\n },\n Object.create(null),\n );\n }\n\n /**\n * Implements the \"Executing selection sets\" section of the spec\n * for fields that may be executed in parallel.\n *\n * @internal\n */\n executeFields(\n parentType: GraphQLObjectType,\n sourceValue: unknown,\n path: Path | undefined,\n groupedFieldSet: GroupedFieldSet,\n positionContext: TPositionContext | undefined,\n ): PromiseOrValue<ObjMap<unknown>> {\n const results = Object.create(null);\n let containsPromise = false;\n const tracingChannel = shouldTrace(resolveChannel)\n ? resolveChannel\n : undefined;\n\n try {\n for (const [responseName, fieldDetailsList] of groupedFieldSet) {\n const fieldPath = addPath(path, responseName, parentType.name);\n const result = this.executeField(\n parentType,\n sourceValue,\n fieldDetailsList,\n fieldPath,\n positionContext,\n tracingChannel,\n );\n\n if (result !== undefined) {\n results[responseName] = result;\n if (isPromise(result)) {\n containsPromise = true;\n }\n }\n }\n } catch (error) {\n if (containsPromise) {\n this.sharedExecutionContext.asyncWorkTracker.addValues(\n Object.values(results),\n );\n }\n throw error;\n }\n\n // If there are no promises, we can just return the object and any incrementalDataRecords\n if (!containsPromise) {\n return results;\n }\n\n // Otherwise, results is a map from field name to the result of resolving that\n // field, which is possibly a promise. Return a promise that will return this\n // same map, but with any promises replaced with the values they resolved to.\n return promiseForObject(results, this.promiseAll);\n }\n\n /**\n * Implements the \"Executing fields\" section of the spec\n * In particular, this function figures out the value that the field returns by\n * calling its resolve function, then calls completeValue to complete promises,\n * coercing scalars, or execute the sub-selection-set for objects.\n *\n * @internal\n */\n executeField(\n parentType: GraphQLObjectType,\n source: unknown,\n fieldDetailsList: FieldDetailsList,\n path: Path,\n positionContext: TPositionContext | undefined,\n tracingChannel: MinimalTracingChannel<GraphQLResolveContext> | undefined,\n ): PromiseOrValue<unknown> {\n const validatedExecutionArgs = this.validatedExecutionArgs;\n const { schema, contextValue, variableValues, hideSuggestions } =\n validatedExecutionArgs;\n const firstFieldDetails = fieldDetailsList[0];\n const firstNode = firstFieldDetails.node;\n const fieldName = firstNode.name.value;\n const fieldDef = schema.getField(parentType, fieldName);\n if (!fieldDef) {\n return;\n }\n\n const returnType = fieldDef.type;\n let resolveFn = fieldDef.resolve ?? validatedExecutionArgs.fieldResolver;\n\n if (tracingChannel !== undefined) {\n const originalResolveFn = resolveFn;\n resolveFn = (s, args, c, info) =>\n traceMixed(\n tracingChannel,\n this.buildResolveContext(args, info, fieldDef.resolve === undefined),\n () => originalResolveFn(s, args, c, info),\n );\n }\n\n const info = buildResolveInfo(\n validatedExecutionArgs,\n fieldDef,\n toNodes(fieldDetailsList),\n parentType,\n path,\n this.getAbortSignal,\n this.getAsyncHelpers,\n );\n\n // Get the resolve function, regardless of if its result is normal or abrupt (error).\n try {\n // Build a JS object of arguments from the field.arguments AST, using the\n // variables scope to fulfill any variable references.\n // TODO: find a way to memoize, in case this field is within a List type.\n const args = getArgumentValues(\n fieldDef,\n firstNode,\n variableValues,\n firstFieldDetails.fragmentVariableValues,\n hideSuggestions,\n );\n\n // The resolve function's optional third argument is a context value that\n // is provided to every resolve function within an execution. It is commonly\n // used to represent an authenticated user, or request-specific caches.\n const result = resolveFn(source, args, contextValue, info);\n\n if (isPromiseLike(result)) {\n return this.completePromisedValue(\n returnType,\n fieldDetailsList,\n info,\n path,\n result,\n positionContext,\n );\n }\n\n const completed = this.completeValue(\n returnType,\n fieldDetailsList,\n info,\n path,\n result,\n positionContext,\n );\n\n if (isPromise(completed)) {\n // Note: we don't rely on a `catch` method, but we do expect \"thenable\"\n // to take a second callback for the error case.\n return completed.then(undefined, (rawError: unknown) => {\n this.handleFieldError(rawError, returnType, fieldDetailsList, path);\n return null;\n });\n }\n return completed;\n } catch (rawError) {\n this.handleFieldError(rawError, returnType, fieldDetailsList, path);\n return null;\n }\n }\n\n /**\n * Build a graphql:resolve channel context for a single field invocation.\n *\n * `fieldPath` is exposed as a lazy getter because serializing the response\n * path is O(depth) and APMs that depth-filter or skip default resolvers\n * often never read it. `args` is passed through by reference.\n * @internal\n */\n buildResolveContext(\n args: ObjMap<unknown>,\n info: GraphQLResolveInfo,\n isDefaultResolver: boolean,\n ): GraphQLResolveContext {\n let cachedFieldPath: string | undefined;\n return {\n fieldName: info.fieldName,\n alias: String(info.path.key),\n parentType: info.parentType.name,\n fieldType: String(info.returnType),\n args,\n isDefaultResolver,\n get fieldPath() {\n cachedFieldPath ??= pathToArray(info.path).join('.');\n return cachedFieldPath;\n },\n };\n }\n\n handleFieldError(\n rawError: unknown,\n returnType: GraphQLOutputType,\n fieldDetailsList: FieldDetailsList,\n path: Path,\n ): void {\n const error = locatedError(\n rawError,\n toNodes(fieldDetailsList),\n pathToArray(path),\n );\n\n // If the field type is non-nullable, then it is resolved without any\n // protection from errors, however it still properly locates the error.\n if (\n this.validatedExecutionArgs.errorPropagation &&\n isNonNullType(returnType)\n ) {\n throw error;\n }\n\n // Otherwise, error protection is applied, logging the error and resolving\n // a null value for this field if one is encountered.\n this.collectedErrors.add(error, path);\n }\n\n /**\n * Implements the instructions for completeValue as defined in the\n * \"Value Completion\" section of the spec.\n *\n * If the field type is Non-Null, then this recursively completes the value\n * for the inner type. It throws a field error if that completion returns null,\n * as per the \"Nullability\" section of the spec.\n *\n * If the field type is a List, then this recursively completes the value\n * for the inner type on each item in the list.\n *\n * If the field type is a Scalar or Enum, ensures the completed value is a legal\n * value of the type by calling the `coerceOutputValue` method of GraphQL type\n * definition.\n *\n * If the field is an abstract type, determine the runtime type of the value\n * and then complete based on that type\n *\n * Otherwise, the field type expects a sub-selection set, and will complete the\n * value by executing all sub-selections.\n *\n * @internal\n */\n completeValue(\n returnType: GraphQLOutputType,\n fieldDetailsList: FieldDetailsList,\n info: GraphQLResolveInfo,\n path: Path,\n result: unknown,\n positionContext: TPositionContext | undefined,\n ): PromiseOrValue<unknown> {\n // If result is an Error, throw a located error.\n if (result instanceof Error) {\n throw result;\n }\n\n // If field type is NonNull, complete for inner type, and throw field error\n // if result is null.\n if (isNonNullType(returnType)) {\n const completed = this.completeValue(\n returnType.ofType,\n fieldDetailsList,\n info,\n path,\n result,\n positionContext,\n );\n if (completed === null) {\n throw new Error(\n `Cannot return null for non-nullable field ${info.parentType}.${info.fieldName}.`,\n );\n }\n return completed;\n }\n\n // If result value is null or undefined then return null.\n if (result == null) {\n return null;\n }\n\n // If field type is List, complete each item in the list with the inner type\n if (isListType(returnType)) {\n return this.completeListValue(\n returnType,\n fieldDetailsList,\n info,\n path,\n result,\n positionContext,\n );\n }\n\n // If field type is a leaf type, Scalar or Enum, coerce to a valid value,\n // returning null if coercion is not possible.\n if (isLeafType(returnType)) {\n return this.completeLeafValue(returnType, result);\n }\n\n // If field type is an abstract type, Interface or Union, determine the\n // runtime Object type and complete for that type.\n if (isAbstractType(returnType)) {\n return this.completeAbstractValue(\n returnType,\n fieldDetailsList,\n info,\n path,\n result,\n positionContext,\n );\n }\n\n // If field type is Object, execute and complete all sub-selections.\n if (isObjectType(returnType)) {\n return this.completeObjectValue(\n returnType,\n fieldDetailsList,\n info,\n path,\n result,\n positionContext,\n );\n /* node:coverage ignore next 7 */\n }\n // Not reachable, all possible output types have been considered.\n invariant(\n false,\n 'Cannot complete value of unexpected output type: ' + inspect(returnType),\n );\n }\n\n async completePromisedValue(\n returnType: GraphQLOutputType,\n fieldDetailsList: FieldDetailsList,\n info: GraphQLResolveInfo,\n path: Path,\n result: PromiseLike<unknown>,\n positionContext: TPositionContext | undefined,\n ): Promise<unknown> {\n try {\n const resolved = await result;\n if (this.aborted) {\n throw new Error('Aborted!');\n }\n let completed = this.completeValue(\n returnType,\n fieldDetailsList,\n info,\n path,\n resolved,\n positionContext,\n );\n\n if (isPromise(completed)) {\n completed = await completed;\n }\n return completed;\n } catch (rawError) {\n this.handleFieldError(rawError, returnType, fieldDetailsList, path);\n return null;\n }\n }\n\n /**\n * Complete a async iterator value by completing the result and calling\n * recursively until all the results are completed.\n *\n * @internal\n */\n async completeAsyncIterableValue(\n itemType: GraphQLOutputType,\n fieldDetailsList: FieldDetailsList,\n info: GraphQLResolveInfo,\n path: Path,\n items: AsyncIterable<unknown>,\n positionContext: TPositionContext | undefined,\n ): Promise<ReadonlyArray<unknown>> {\n // do not stream inner lists of multi-dimensional lists\n const streamUsage =\n typeof path.key === 'number'\n ? undefined\n : getStreamUsage(this.validatedExecutionArgs, fieldDetailsList);\n\n let containsPromise = false;\n const completedResults: Array<unknown> = [];\n const asyncIterator = items[Symbol.asyncIterator]();\n let index = 0;\n let iteration;\n try {\n while (true) {\n if (\n streamUsage?.initialCount === index &&\n this.handleStream(\n index,\n path,\n { handle: asyncIterator, isAsync: true },\n streamUsage,\n info,\n itemType,\n )\n ) {\n break;\n }\n const itemPath = addPath(path, index, undefined);\n try {\n // eslint-disable-next-line no-await-in-loop\n iteration = await asyncIterator.next();\n } catch (rawError) {\n throw locatedError(\n rawError,\n toNodes(fieldDetailsList),\n pathToArray(path),\n );\n }\n if (this.aborted || iteration.done) {\n break;\n }\n const item = iteration.value;\n if (\n this.completeMaybePromisedListItemValue(\n item,\n completedResults,\n itemType,\n fieldDetailsList,\n info,\n itemPath,\n positionContext,\n )\n ) {\n containsPromise = true;\n }\n index++;\n }\n } catch (error) {\n this.sharedExecutionContext.asyncWorkTracker.add(\n returnIteratorCatchingErrors(asyncIterator),\n );\n if (containsPromise) {\n this.sharedExecutionContext.asyncWorkTracker.addValues(\n completedResults,\n );\n }\n throw error;\n }\n\n // Throwing on completion outside of the loop may allow engines to better optimize\n if (this.aborted) {\n if (!iteration?.done) {\n this.sharedExecutionContext.asyncWorkTracker.add(\n returnIteratorCatchingErrors(asyncIterator),\n );\n }\n throw new Error('Aborted!');\n }\n\n return containsPromise\n ? this.promiseAll(completedResults)\n : completedResults;\n }\n\n /* node:coverage ignore next 12 */\n handleStream(\n _index: number,\n _path: Path,\n _iterator:\n | { handle: Iterator<unknown>; isAsync?: never }\n | { handle: AsyncIterator<unknown>; isAsync: true },\n _streamUsage: StreamUsage,\n _info: GraphQLResolveInfo,\n _itemType: GraphQLOutputType,\n ): boolean {\n return false;\n }\n\n /**\n * Complete a list value by completing each item in the list with the\n * inner type\n *\n * @internal\n */\n completeListValue(\n returnType: GraphQLList<GraphQLOutputType>,\n fieldDetailsList: FieldDetailsList,\n info: GraphQLResolveInfo,\n path: Path,\n result: unknown,\n positionContext: TPositionContext | undefined,\n ): PromiseOrValue<ReadonlyArray<unknown>> {\n const itemType = returnType.ofType;\n\n if (isAsyncIterable(result)) {\n return this.completeAsyncIterableValue(\n itemType,\n fieldDetailsList,\n info,\n path,\n result,\n positionContext,\n );\n }\n\n if (!isIterableObject(result)) {\n throw new GraphQLError(\n `Expected Iterable, but did not find one for field \"${info.parentType}.${info.fieldName}\".`,\n );\n }\n\n return this.completeIterableValue(\n itemType,\n fieldDetailsList,\n info,\n path,\n result,\n positionContext,\n );\n }\n\n completeIterableValue(\n itemType: GraphQLOutputType,\n fieldDetailsList: FieldDetailsList,\n info: GraphQLResolveInfo,\n path: Path,\n items: Iterable<unknown>,\n positionContext: TPositionContext | undefined,\n ): PromiseOrValue<ReadonlyArray<unknown>> {\n // do not stream inner lists of multi-dimensional lists\n const streamUsage =\n typeof path.key === 'number'\n ? undefined\n : getStreamUsage(this.validatedExecutionArgs, fieldDetailsList);\n\n // This is specified as a simple map, however we're optimizing the path\n // where the list contains no Promises by avoiding creating another Promise.\n let containsPromise = false;\n const completedResults: Array<unknown> = [];\n let index = 0;\n const iterator = items[Symbol.iterator]();\n try {\n while (true) {\n if (\n streamUsage?.initialCount === index &&\n this.handleStream(\n index,\n path,\n { handle: iterator },\n streamUsage,\n info,\n itemType,\n )\n ) {\n break;\n }\n const iteration = iterator.next();\n if (iteration.done) {\n break;\n }\n\n const item = iteration.value;\n\n // No need to modify the info object containing the path,\n // since from here on it is not ever accessed by resolver functions.\n const itemPath = addPath(path, index, undefined);\n\n if (\n this.completeMaybePromisedListItemValue(\n item,\n completedResults,\n itemType,\n fieldDetailsList,\n info,\n itemPath,\n positionContext,\n )\n ) {\n containsPromise = true;\n }\n\n index++;\n }\n } catch (error) {\n const asyncWorkTracker = this.sharedExecutionContext.asyncWorkTracker;\n if (containsPromise) {\n asyncWorkTracker.addValues(completedResults);\n }\n asyncWorkTracker.addValues(collectIteratorPromises(iterator));\n throw error;\n }\n\n return containsPromise\n ? this.promiseAll(completedResults)\n : completedResults;\n }\n\n completeMaybePromisedListItemValue(\n item: unknown,\n completedResults: Array<unknown>,\n itemType: GraphQLOutputType,\n fieldDetailsList: FieldDetailsList,\n info: GraphQLResolveInfo,\n itemPath: Path,\n positionContext: TPositionContext | undefined,\n ): boolean {\n if (isPromiseLike(item)) {\n completedResults.push(\n this.completePromisedListItemValue(\n item,\n itemType,\n fieldDetailsList,\n info,\n itemPath,\n positionContext,\n ),\n );\n return true;\n } else if (\n this.completeListItemValue(\n item,\n completedResults,\n itemType,\n fieldDetailsList,\n info,\n itemPath,\n positionContext,\n )\n ) {\n return true;\n }\n return false;\n }\n\n /**\n * Complete a list item value by adding it to the completed results.\n *\n * Returns true if the value is a Promise.\n *\n * @internal\n */\n completeListItemValue(\n item: unknown,\n completedResults: Array<unknown>,\n itemType: GraphQLOutputType,\n fieldDetailsList: FieldDetailsList,\n info: GraphQLResolveInfo,\n itemPath: Path,\n positionContext: TPositionContext | undefined,\n ): boolean {\n try {\n const completedItem = this.completeValue(\n itemType,\n fieldDetailsList,\n info,\n itemPath,\n item,\n positionContext,\n );\n\n if (isPromise(completedItem)) {\n // Note: we don't rely on a `catch` method, but we do expect \"thenable\"\n // to take a second callback for the error case.\n completedResults.push(\n completedItem.then(undefined, (rawError: unknown) => {\n this.handleFieldError(\n rawError,\n itemType,\n fieldDetailsList,\n itemPath,\n );\n return null;\n }),\n );\n return true;\n }\n\n completedResults.push(completedItem);\n } catch (rawError) {\n this.handleFieldError(rawError, itemType, fieldDetailsList, itemPath);\n completedResults.push(null);\n }\n return false;\n }\n\n async completePromisedListItemValue(\n item: PromiseLike<unknown>,\n itemType: GraphQLOutputType,\n fieldDetailsList: FieldDetailsList,\n info: GraphQLResolveInfo,\n itemPath: Path,\n positionContext: TPositionContext | undefined,\n ): Promise<unknown> {\n try {\n const resolved = await item;\n if (this.aborted) {\n throw new Error('Aborted!');\n }\n let completed = this.completeValue(\n itemType,\n fieldDetailsList,\n info,\n itemPath,\n resolved,\n positionContext,\n );\n if (isPromise(completed)) {\n completed = await completed;\n }\n return completed;\n } catch (rawError) {\n this.handleFieldError(rawError, itemType, fieldDetailsList, itemPath);\n return null;\n }\n }\n\n /**\n * Complete a Scalar or Enum by serializing to a valid value, returning\n * null if serialization is not possible.\n *\n * @internal\n */\n completeLeafValue(returnType: GraphQLLeafType, result: unknown): unknown {\n const coerced = returnType.coerceOutputValue(result);\n if (coerced == null) {\n throw new Error(\n `Expected \\`${inspect(returnType)}.coerceOutputValue(${inspect(result)})\\` to ` +\n `return non-nullable value, returned: ${inspect(coerced)}`,\n );\n }\n return coerced;\n }\n\n /**\n * Complete a value of an abstract type by determining the runtime object type\n * of that value, then complete the value for that type.\n *\n * @internal\n */\n completeAbstractValue(\n returnType: GraphQLAbstractType,\n fieldDetailsList: FieldDetailsList,\n info: GraphQLResolveInfo,\n path: Path,\n result: unknown,\n positionContext: TPositionContext | undefined,\n ): PromiseOrValue<ObjMap<unknown>> {\n const validatedExecutionArgs = this.validatedExecutionArgs;\n const { schema, contextValue } = validatedExecutionArgs;\n const resolveTypeFn =\n returnType.resolveType ?? validatedExecutionArgs.typeResolver;\n const runtimeType = resolveTypeFn(result, contextValue, info, returnType);\n\n if (isPromiseLike(runtimeType)) {\n return runtimeType.then((resolvedRuntimeType) => {\n if (this.aborted) {\n throw new Error('Aborted!');\n }\n return this.completeObjectValue(\n this.ensureValidRuntimeType(\n resolvedRuntimeType,\n schema,\n returnType,\n fieldDetailsList,\n info,\n result,\n ),\n fieldDetailsList,\n info,\n path,\n result,\n positionContext,\n );\n });\n }\n\n return this.completeObjectValue(\n this.ensureValidRuntimeType(\n runtimeType,\n schema,\n returnType,\n fieldDetailsList,\n info,\n result,\n ),\n fieldDetailsList,\n info,\n path,\n result,\n positionContext,\n );\n }\n\n ensureValidRuntimeType(\n runtimeTypeName: unknown,\n schema: GraphQLSchema,\n returnType: GraphQLAbstractType,\n fieldDetailsList: FieldDetailsList,\n info: GraphQLResolveInfo,\n result: unknown,\n ): GraphQLObjectType {\n if (runtimeTypeName == null) {\n throw new GraphQLError(\n `Abstract type \"${returnType}\" must resolve to an Object type at runtime for field \"${info.parentType}.${info.fieldName}\". Either the \"${returnType}\" type should provide a \"resolveType\" function or each possible type should provide an \"isTypeOf\" function.`,\n { nodes: toNodes(fieldDetailsList) },\n );\n }\n\n if (typeof runtimeTypeName !== 'string') {\n throw new GraphQLError(\n `Abstract type \"${returnType}\" must resolve to an Object type at runtime for field \"${info.parentType}.${info.fieldName}\" with ` +\n `value ${inspect(result)}, received \"${inspect(\n runtimeTypeName,\n )}\", which is not a valid Object type name.`,\n );\n }\n\n const runtimeType = schema.getType(runtimeTypeName);\n if (runtimeType == null) {\n throw new GraphQLError(\n `Abstract type \"${returnType}\" was resolved to a type \"${runtimeTypeName}\" that does not exist inside the schema.`,\n { nodes: toNodes(fieldDetailsList) },\n );\n }\n\n if (!isObjectType(runtimeType)) {\n throw new GraphQLError(\n `Abstract type \"${returnType}\" was resolved to a non-object type \"${runtimeTypeName}\".`,\n { nodes: toNodes(fieldDetailsList) },\n );\n }\n\n if (!schema.isSubType(returnType, runtimeType)) {\n throw new GraphQLError(\n `Runtime Object type \"${runtimeType}\" is not a possible type for \"${returnType}\".`,\n { nodes: toNodes(fieldDetailsList) },\n );\n }\n\n return runtimeType;\n }\n\n /**\n * Complete an Object value by executing all sub-selections.\n *\n * @internal\n */\n completeObjectValue(\n returnType: GraphQLObjectType,\n fieldDetailsList: FieldDetailsList,\n info: GraphQLResolveInfo,\n path: Path,\n result: unknown,\n positionContext: TPositionContext | undefined,\n ): PromiseOrValue<ObjMap<unknown>> {\n // If there is an isTypeOf predicate function, call it with the\n // current result. If isTypeOf returns false, then raise an error rather\n // than continuing execution.\n if (returnType.isTypeOf) {\n const isTypeOf = returnType.isTypeOf(\n result,\n this.validatedExecutionArgs.contextValue,\n info,\n );\n\n if (isPromiseLike(isTypeOf)) {\n return isTypeOf.then((resolvedIsTypeOf) => {\n if (this.aborted) {\n throw new Error('Aborted!');\n }\n if (!resolvedIsTypeOf) {\n throw this.invalidReturnTypeError(\n returnType,\n result,\n fieldDetailsList,\n );\n }\n return this.collectAndExecuteSubfields(\n returnType,\n fieldDetailsList,\n path,\n result,\n positionContext,\n );\n });\n }\n\n if (!isTypeOf) {\n throw this.invalidReturnTypeError(returnType, result, fieldDetailsList);\n }\n }\n\n return this.collectAndExecuteSubfields(\n returnType,\n fieldDetailsList,\n path,\n result,\n positionContext,\n );\n }\n\n invalidReturnTypeError(\n returnType: GraphQLObjectType,\n result: unknown,\n fieldDetailsList: FieldDetailsList,\n ): GraphQLError {\n return new GraphQLError(\n `Expected value of type \"${returnType}\" but got: ${inspect(result)}.`,\n { nodes: toNodes(fieldDetailsList) },\n );\n }\n\n collectAndExecuteSubfields(\n returnType: GraphQLObjectType,\n fieldDetailsList: FieldDetailsList,\n path: Path,\n result: unknown,\n positionContext: TPositionContext | undefined,\n ): PromiseOrValue<ObjMap<unknown>> {\n // Collect sub-fields to execute to complete this value.\n const { groupedFieldSet, newDeferUsages } = collectSubfields(\n this.validatedExecutionArgs,\n returnType,\n fieldDetailsList,\n );\n\n return this.executeCollectedSubfields(\n returnType,\n result,\n path,\n groupedFieldSet,\n newDeferUsages,\n positionContext,\n );\n }\n\n executeCollectedSubfields(\n parentType: GraphQLObjectType,\n sourceValue: unknown,\n path: Path | undefined,\n originalGroupedFieldSet: GroupedFieldSet,\n _newDeferUsages: ReadonlyArray<DeferUsage>,\n _positionContext: TPositionContext | undefined,\n ): PromiseOrValue<ObjMap<unknown>> {\n return this.executeFields(\n parentType,\n sourceValue,\n path,\n originalGroupedFieldSet,\n undefined,\n );\n }\n}\n\nfunction toNodes(fieldDetailsList: FieldDetailsList): ReadonlyArray<FieldNode> {\n return fieldDetailsList.map((fieldDetails) => fieldDetails.node);\n}\n"]}
1
+ {"version":3,"file":"Executor.js","sourceRoot":"","sources":["../../src/execution/Executor.ts"],"names":[],"mappings":"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","sourcesContent":["/** @category Execution */\n\nimport { inspect } from '../jsutils/inspect.ts';\nimport { invariant } from '../jsutils/invariant.ts';\nimport { isAsyncIterable } from '../jsutils/isAsyncIterable.ts';\nimport { isIterableObject } from '../jsutils/isIterableObject.ts';\nimport { isPromise, isPromiseLike } from '../jsutils/isPromise.ts';\nimport { memoize2 } from '../jsutils/memoize2.ts';\nimport { memoize3 } from '../jsutils/memoize3.ts';\nimport type { ObjMap } from '../jsutils/ObjMap.ts';\nimport type { Path } from '../jsutils/Path.ts';\nimport { addPath, pathToArray } from '../jsutils/Path.ts';\nimport { promiseForObject } from '../jsutils/promiseForObject.ts';\nimport type { PromiseOrValue } from '../jsutils/PromiseOrValue.ts';\nimport { promiseReduce } from '../jsutils/promiseReduce.ts';\n\nimport { ensureGraphQLError } from '../error/ensureGraphQLError.ts';\nimport type { GraphQLFormattedError } from '../error/GraphQLError.ts';\nimport { GraphQLError } from '../error/GraphQLError.ts';\nimport { locatedError } from '../error/locatedError.ts';\n\nimport type { FieldNode } from '../language/ast.ts';\nimport { OperationTypeNode } from '../language/ast.ts';\n\nimport type {\n GraphQLAbstractType,\n GraphQLLeafType,\n GraphQLList,\n GraphQLObjectType,\n GraphQLOutputType,\n GraphQLResolveInfo,\n GraphQLResolveInfoHelpers,\n} from '../type/definition.ts';\nimport {\n isAbstractType,\n isLeafType,\n isListType,\n isNonNullType,\n isObjectType,\n} from '../type/definition.ts';\nimport type { GraphQLSchema } from '../type/schema.ts';\n\nimport type {\n GraphQLExecuteRootSelectionSetContext,\n GraphQLResolveContext,\n MinimalTracingChannel,\n} from '../diagnostics.ts';\nimport {\n executeRootSelectionSetChannel,\n resolveChannel,\n shouldTrace,\n traceMixed,\n} from '../diagnostics.ts';\n\nimport { AbortedGraphQLExecutionError } from './AbortedGraphQLExecutionError.ts';\nimport { buildResolveInfo } from './buildResolveInfo.ts';\nimport { withCancellation } from './cancellablePromise.ts';\nimport type {\n DeferUsage,\n FieldDetailsList,\n GroupedFieldSet,\n} from './collectFields.ts';\nimport {\n collectFields,\n collectSubfields as _collectSubfields,\n} from './collectFields.ts';\nimport { collectIteratorPromises } from './collectIteratorPromises.ts';\nimport type { SharedExecutionContext } from './createSharedExecutionContext.ts';\nimport { createSharedExecutionContext } from './createSharedExecutionContext.ts';\nimport type { ValidatedExecutionArgs } from './ExecutionArgs.ts';\nimport type { StreamUsage } from './getStreamUsage.ts';\nimport { getStreamUsage as _getStreamUsage } from './getStreamUsage.ts';\nimport { runAsyncWorkFinishedHook } from './hooks.ts';\nimport { returnIteratorCatchingErrors } from './returnIteratorCatchingErrors.ts';\nimport { getArgumentValues } from './values.ts';\n\n/* eslint-disable max-params */\n// This file contains a lot of such errors but we plan to refactor it anyway\n// so just disable it for entire file.\n\n/**\n * Terminology\n *\n * \"Definitions\" are the generic name for top-level statements in the document.\n * Examples of this include:\n * 1) Operations (such as a query)\n * 2) Fragments\n *\n * \"Operations\" are a generic name for requests in the document.\n * Examples of this include:\n * 1) query,\n * 2) mutation\n *\n * \"Selections\" are the definitions that can appear legally and at\n * single level of the query. These include:\n * 1) field references e.g `a`\n * 2) fragment \"spreads\" e.g. `...c`\n * 3) inline fragment \"spreads\" e.g. `...on Type { a }`\n *\n * @internal\n */\n\n/**\n * A memoized collection of relevant subfields with regard to the return\n * type. Memoizing ensures the subfields are not repeatedly calculated, which\n * saves overhead when resolving lists of values.\n *\n * @internal\n */\nexport const collectSubfields: (\n validatedExecutionArgs: ValidatedExecutionArgs,\n returnType: GraphQLObjectType,\n fieldDetailsList: FieldDetailsList,\n) => ReturnType<typeof _collectSubfields> = memoize3(\n (\n validatedExecutionArgs: ValidatedExecutionArgs,\n returnType: GraphQLObjectType,\n fieldDetailsList: FieldDetailsList,\n ) => {\n const { schema, fragments, variableValues, hideSuggestions } =\n validatedExecutionArgs;\n return _collectSubfields(\n schema,\n fragments,\n variableValues,\n returnType,\n fieldDetailsList,\n hideSuggestions,\n );\n },\n);\n\n/** @internal */\nexport const getStreamUsage: typeof _getStreamUsage = memoize2(\n (\n validatedExecutionArgs: ValidatedExecutionArgs,\n fieldDetailsList: FieldDetailsList,\n ) => _getStreamUsage(validatedExecutionArgs, fieldDetailsList),\n);\n\nclass CollectedErrors {\n private _errorPositions: Set<Path | undefined>;\n private _errors: Array<GraphQLError>;\n constructor() {\n this._errorPositions = new Set<Path | undefined>();\n this._errors = [];\n }\n\n get errors(): ReadonlyArray<GraphQLError> {\n return this._errors;\n }\n\n add(error: GraphQLError, path: Path | undefined): void {\n // Do not modify errors list if the execution position for this error or\n // any of its ancestors has already been nulled via error propagation.\n // This check should be unnecessary for implementations able to implement\n // actual cancellation.\n if (this.hasNulledPosition(path)) {\n return;\n }\n this._errorPositions.add(path);\n this._errors.push(error);\n }\n\n hasNulledPosition(startPath: Path | undefined): boolean {\n let path = startPath;\n while (path !== undefined) {\n if (this._errorPositions.has(path)) {\n return true;\n }\n path = path.prev;\n }\n return this._errorPositions.has(undefined);\n }\n}\n\n/**\n * Represents the response produced by executing a GraphQL operation.\n * @typeParam TData - Shape of the execution data payload.\n * @typeParam TExtensions - Shape of the extensions payload.\n */\nexport interface ExecutionResult<\n TData = ObjMap<unknown>,\n TExtensions = ObjMap<unknown>,\n> {\n /** Errors raised while parsing, validating, or executing the operation. */\n errors?: ReadonlyArray<GraphQLError>;\n /** Data returned by execution, or null when execution could not produce data. */\n data?: TData | null;\n /** Additional non-standard metadata included in the execution result. */\n extensions?: TExtensions;\n}\n\n/**\n * A JSON-serializable GraphQL execution result.\n * @typeParam TData - Shape of the formatted data payload.\n * @typeParam TExtensions - Shape of the formatted extensions payload.\n */\nexport interface FormattedExecutionResult<\n TData = ObjMap<unknown>,\n TExtensions = ObjMap<unknown>,\n> {\n /** Errors raised while parsing, validating, or executing the operation. */\n errors?: ReadonlyArray<GraphQLFormattedError>;\n /** Data returned by execution, or null when execution could not produce data. */\n data?: TData | null;\n /** Additional non-standard metadata included in the formatted result. */\n extensions?: TExtensions;\n}\n\nconst defaultAbortReason = new Error('This operation was aborted');\n\n/** @internal */\nexport class Executor<\n TPositionContext = undefined, // No position context by default\n TAlternativeInitialResponse = ExecutionResult, // No alternative by default\n> {\n validatedExecutionArgs: ValidatedExecutionArgs;\n aborted: boolean;\n abortReason: unknown;\n sharedExecutionContext: SharedExecutionContext;\n collectedErrors: CollectedErrors;\n abortResultPromise: (() => void) | undefined;\n resolverAbortController: AbortController | undefined;\n getAbortSignal: () => AbortSignal | undefined;\n getAsyncHelpers: () => GraphQLResolveInfoHelpers;\n promiseAll: <T>(\n values: ReadonlyArray<PromiseOrValue<T>>,\n ) => Promise<Array<T>>;\n\n constructor(\n validatedExecutionArgs: ValidatedExecutionArgs,\n sharedExecutionContext?: SharedExecutionContext,\n ) {\n this.validatedExecutionArgs = validatedExecutionArgs;\n this.aborted = false;\n this.abortReason = defaultAbortReason;\n this.collectedErrors = new CollectedErrors();\n\n if (sharedExecutionContext === undefined) {\n this.resolverAbortController = new AbortController();\n this.sharedExecutionContext = createSharedExecutionContext(\n this.resolverAbortController.signal,\n );\n } else {\n this.sharedExecutionContext = sharedExecutionContext;\n }\n const { getAbortSignal, getAsyncHelpers, promiseAll } =\n this.sharedExecutionContext;\n this.getAbortSignal = getAbortSignal;\n this.getAsyncHelpers = getAsyncHelpers;\n this.promiseAll = promiseAll;\n }\n\n executeRootSelectionSet(\n serially?: boolean,\n ): PromiseOrValue<ExecutionResult | TAlternativeInitialResponse> {\n if (!shouldTrace(executeRootSelectionSetChannel)) {\n return this.executeRootSelectionSetImpl(serially);\n }\n return traceMixed(\n executeRootSelectionSetChannel,\n this.buildExecuteContextFromValidatedArgs(this.validatedExecutionArgs),\n () => this.executeRootSelectionSetImpl(serially),\n );\n }\n\n /**\n * Build a root-selection-set tracing context from validated execution\n * arguments. The operation has already been selected during argument\n * validation.\n * @internal\n */\n buildExecuteContextFromValidatedArgs(\n args: ValidatedExecutionArgs,\n ): GraphQLExecuteRootSelectionSetContext {\n return {\n schema: args.schema,\n document: args.document,\n operation: args.operation,\n rawVariableValues: args.rawVariableValues,\n operationName: args.operation.name?.value,\n operationType: args.operation.operation,\n };\n }\n\n executeRootSelectionSetImpl(\n serially?: boolean,\n ): PromiseOrValue<ExecutionResult | TAlternativeInitialResponse> {\n const externalAbortSignal = this.validatedExecutionArgs.externalAbortSignal;\n let removeExternalAbortListener: (() => void) | undefined;\n if (externalAbortSignal) {\n externalAbortSignal.throwIfAborted();\n const onExternalAbort = () => {\n this.abort(externalAbortSignal.reason);\n };\n removeExternalAbortListener = () =>\n externalAbortSignal.removeEventListener('abort', onExternalAbort);\n externalAbortSignal.addEventListener('abort', onExternalAbort);\n }\n\n const maybeRemoveExternalAbortListener = () => {\n removeExternalAbortListener?.();\n };\n\n let result: PromiseOrValue<ObjMap<unknown>>;\n try {\n const {\n schema,\n fragments,\n rootValue,\n operation,\n variableValues,\n hideSuggestions,\n } = this.validatedExecutionArgs;\n\n const { operation: operationType, selectionSet } = operation;\n\n const rootType = schema.getRootType(operationType);\n if (rootType == null) {\n throw new GraphQLError(\n `Schema is not configured to execute ${operationType} operation.`,\n { nodes: operation },\n );\n }\n\n const { groupedFieldSet, newDeferUsages } = collectFields(\n schema,\n fragments,\n variableValues,\n rootType,\n selectionSet,\n hideSuggestions,\n );\n\n result = this.executeCollectedRootFields(\n rootType,\n rootValue,\n groupedFieldSet,\n serially ?? operationType === OperationTypeNode.MUTATION,\n newDeferUsages,\n );\n\n if (isPromise(result)) {\n const promise = result.then(\n (data) => {\n maybeRemoveExternalAbortListener();\n return this.buildResponse(data);\n },\n (error: unknown) => {\n maybeRemoveExternalAbortListener();\n this.collectedErrors.add(ensureGraphQLError(error), undefined);\n return this.buildResponse(null);\n },\n );\n this.sharedExecutionContext.asyncWorkTracker.add(promise);\n const { promise: cancellablePromise, abort: abortResultPromise } =\n withCancellation(promise.then((resolved) => this.finish(resolved)));\n this.abortResultPromise = () => {\n abortResultPromise(this.createAbortedExecutionError(promise));\n };\n if (this.aborted) {\n this.abortResultPromise();\n }\n return cancellablePromise;\n }\n maybeRemoveExternalAbortListener();\n } catch (error) {\n maybeRemoveExternalAbortListener();\n this.collectedErrors.add(ensureGraphQLError(error), undefined);\n return this.finish(this.buildResponse(null));\n }\n return this.finish(this.buildResponse(result));\n }\n\n abort(reason?: unknown): void {\n if (this.aborted) {\n return;\n }\n this.aborted = true;\n if (reason !== undefined) {\n this.abortReason = reason;\n }\n this.abortResultPromise?.();\n this.resolverAbortController?.abort(this.abortReason);\n }\n\n finish<T>(result: T): T {\n if (this.aborted) {\n throw this.createAbortedExecutionError(result);\n }\n this.aborted = true;\n return result;\n }\n\n createAbortedExecutionError<T>(\n result: PromiseOrValue<T>,\n ): AbortedGraphQLExecutionError<T> {\n return new AbortedGraphQLExecutionError(this.abortReason, result);\n }\n\n getFinishSharedExecution(): () => void {\n const resolverAbortController = this.resolverAbortController;\n const asyncWorkFinishedHook =\n this.validatedExecutionArgs.hooks?.asyncWorkFinished;\n if (asyncWorkFinishedHook === undefined) {\n return () => resolverAbortController?.abort();\n }\n\n const validatedExecutionArgs = this.validatedExecutionArgs;\n const sharedExecutionContext = this.sharedExecutionContext;\n return () => {\n resolverAbortController?.abort();\n runAsyncWorkFinishedHook(\n validatedExecutionArgs,\n sharedExecutionContext,\n asyncWorkFinishedHook,\n );\n };\n }\n\n /**\n * Given a completed execution context and data, build the `{ errors, data }`\n * response defined by the \"Response\" section of the GraphQL specification.\n *\n * @internal\n */\n buildResponse(\n data: ObjMap<unknown> | null,\n ): ExecutionResult | TAlternativeInitialResponse {\n this.getFinishSharedExecution()();\n const errors = this.collectedErrors.errors;\n return errors.length ? { errors, data } : { data };\n }\n\n executeCollectedRootFields(\n rootType: GraphQLObjectType,\n rootValue: unknown,\n originalGroupedFieldSet: GroupedFieldSet,\n serially: boolean,\n _newDeferUsages: ReadonlyArray<DeferUsage>,\n ): PromiseOrValue<ObjMap<unknown>> {\n return this.executeRootGroupedFieldSet(\n rootType,\n rootValue,\n originalGroupedFieldSet,\n serially,\n undefined,\n );\n }\n\n executeRootGroupedFieldSet(\n rootType: GraphQLObjectType,\n rootValue: unknown,\n groupedFieldSet: GroupedFieldSet,\n serially: boolean,\n positionContext?: TPositionContext,\n ): PromiseOrValue<ObjMap<unknown>> {\n return serially\n ? this.executeFieldsSerially(\n rootType,\n rootValue,\n undefined,\n groupedFieldSet,\n positionContext,\n )\n : this.executeFields(\n rootType,\n rootValue,\n undefined,\n groupedFieldSet,\n positionContext,\n );\n }\n\n /**\n * Implements the \"Executing selection sets\" section of the spec\n * for fields that must be executed serially.\n *\n * @internal\n */\n executeFieldsSerially(\n parentType: GraphQLObjectType,\n sourceValue: unknown,\n path: Path | undefined,\n groupedFieldSet: GroupedFieldSet,\n positionContext: TPositionContext | undefined,\n ): PromiseOrValue<ObjMap<unknown>> {\n let tracingChannel = shouldTrace(resolveChannel)\n ? resolveChannel\n : undefined;\n\n return promiseReduce(\n groupedFieldSet,\n (results, [responseName, fieldDetailsList]) => {\n if (this.aborted) {\n throw new Error('Aborted!');\n }\n const fieldPath = addPath(path, responseName, parentType.name);\n const result = this.executeField(\n parentType,\n sourceValue,\n fieldDetailsList,\n fieldPath,\n positionContext,\n tracingChannel,\n );\n if (result === undefined) {\n return results;\n }\n if (isPromise(result)) {\n return result.then((resolved) => {\n results[responseName] = resolved;\n tracingChannel = shouldTrace(resolveChannel)\n ? resolveChannel\n : undefined;\n return results;\n });\n }\n results[responseName] = result;\n return results;\n },\n Object.create(null),\n );\n }\n\n /**\n * Implements the \"Executing selection sets\" section of the spec\n * for fields that may be executed in parallel.\n *\n * @internal\n */\n executeFields(\n parentType: GraphQLObjectType,\n sourceValue: unknown,\n path: Path | undefined,\n groupedFieldSet: GroupedFieldSet,\n positionContext: TPositionContext | undefined,\n ): PromiseOrValue<ObjMap<unknown>> {\n const results = Object.create(null);\n let containsPromise = false;\n const tracingChannel = shouldTrace(resolveChannel)\n ? resolveChannel\n : undefined;\n\n try {\n for (const [responseName, fieldDetailsList] of groupedFieldSet) {\n const fieldPath = addPath(path, responseName, parentType.name);\n const result = this.executeField(\n parentType,\n sourceValue,\n fieldDetailsList,\n fieldPath,\n positionContext,\n tracingChannel,\n );\n\n if (result !== undefined) {\n results[responseName] = result;\n if (isPromise(result)) {\n containsPromise = true;\n }\n }\n }\n } catch (error) {\n if (containsPromise) {\n this.sharedExecutionContext.asyncWorkTracker.addValues(\n Object.values(results),\n );\n }\n throw error;\n }\n\n // If there are no promises, we can just return the object and any incrementalDataRecords\n if (!containsPromise) {\n return results;\n }\n\n // Otherwise, results is a map from field name to the result of resolving that\n // field, which is possibly a promise. Return a promise that will return this\n // same map, but with any promises replaced with the values they resolved to.\n return promiseForObject(results, this.promiseAll);\n }\n\n /**\n * Implements the \"Executing fields\" section of the spec\n * In particular, this function figures out the value that the field returns by\n * calling its resolve function, then calls completeValue to complete promises,\n * coercing scalars, or execute the sub-selection-set for objects.\n *\n * @internal\n */\n executeField(\n parentType: GraphQLObjectType,\n source: unknown,\n fieldDetailsList: FieldDetailsList,\n path: Path,\n positionContext: TPositionContext | undefined,\n tracingChannel: MinimalTracingChannel<GraphQLResolveContext> | undefined,\n ): PromiseOrValue<unknown> {\n const validatedExecutionArgs = this.validatedExecutionArgs;\n const { schema, contextValue, variableValues, hideSuggestions } =\n validatedExecutionArgs;\n const firstFieldDetails = fieldDetailsList[0];\n const firstNode = firstFieldDetails.node;\n const fieldName = firstNode.name.value;\n const fieldDef = schema.getField(parentType, fieldName);\n if (!fieldDef) {\n return;\n }\n\n const returnType = fieldDef.type;\n let resolveFn = fieldDef.resolve ?? validatedExecutionArgs.fieldResolver;\n\n if (tracingChannel !== undefined) {\n const originalResolveFn = resolveFn;\n resolveFn = (s, args, c, info) =>\n traceMixed(\n tracingChannel,\n this.buildResolveContext(args, info, fieldDef.resolve === undefined),\n () => originalResolveFn(s, args, c, info),\n );\n }\n\n const info = buildResolveInfo(\n validatedExecutionArgs,\n fieldDef,\n toNodes(fieldDetailsList),\n parentType,\n path,\n this.getAbortSignal,\n this.getAsyncHelpers,\n );\n\n // Get the resolve function, regardless of if its result is normal or abrupt (error).\n try {\n // Build a JS object of arguments from the field.arguments AST, using the\n // variables scope to fulfill any variable references.\n // TODO: find a way to memoize, in case this field is within a List type.\n const args = getArgumentValues(\n fieldDef,\n firstNode,\n variableValues,\n firstFieldDetails.fragmentVariableValues,\n hideSuggestions,\n );\n\n // The resolve function's optional third argument is a context value that\n // is provided to every resolve function within an execution. It is commonly\n // used to represent an authenticated user, or request-specific caches.\n const result = resolveFn(source, args, contextValue, info);\n\n if (isPromiseLike(result)) {\n return this.completePromisedValue(\n returnType,\n fieldDetailsList,\n info,\n path,\n result,\n positionContext,\n );\n }\n\n const completed = this.completeValue(\n returnType,\n fieldDetailsList,\n info,\n path,\n result,\n positionContext,\n );\n\n if (isPromise(completed)) {\n // Note: we don't rely on a `catch` method, but we do expect \"thenable\"\n // to take a second callback for the error case.\n return completed.then(undefined, (rawError: unknown) => {\n this.handleFieldError(rawError, returnType, fieldDetailsList, path);\n return null;\n });\n }\n return completed;\n } catch (rawError) {\n this.handleFieldError(rawError, returnType, fieldDetailsList, path);\n return null;\n }\n }\n\n /**\n * Build a graphql:resolve channel context for a single field invocation.\n *\n * `fieldPath` is exposed as a lazy getter because serializing the response\n * path is O(depth) and APMs that depth-filter or skip default resolvers\n * often never read it. `args` is passed through by reference.\n * @internal\n */\n buildResolveContext(\n args: ObjMap<unknown>,\n info: GraphQLResolveInfo,\n isDefaultResolver: boolean,\n ): GraphQLResolveContext {\n let cachedFieldPath: string | undefined;\n return {\n fieldName: info.fieldName,\n alias: String(info.path.key),\n parentType: info.parentType.name,\n fieldType: String(info.returnType),\n args,\n isDefaultResolver,\n get fieldPath() {\n cachedFieldPath ??= pathToArray(info.path).join('.');\n return cachedFieldPath;\n },\n };\n }\n\n handleFieldError(\n rawError: unknown,\n returnType: GraphQLOutputType,\n fieldDetailsList: FieldDetailsList,\n path: Path,\n ): void {\n const error = locatedError(\n rawError,\n toNodes(fieldDetailsList),\n pathToArray(path),\n );\n\n // If the field type is non-nullable, then it is resolved without any\n // protection from errors, however it still properly locates the error.\n if (\n this.validatedExecutionArgs.errorPropagation &&\n isNonNullType(returnType)\n ) {\n throw error;\n }\n\n // Otherwise, error protection is applied, logging the error and resolving\n // a null value for this field if one is encountered.\n this.collectedErrors.add(error, path);\n }\n\n /**\n * Implements the instructions for completeValue as defined in the\n * \"Value Completion\" section of the spec.\n *\n * If the field type is Non-Null, then this recursively completes the value\n * for the inner type. It throws a field error if that completion returns null,\n * as per the \"Nullability\" section of the spec.\n *\n * If the field type is a List, then this recursively completes the value\n * for the inner type on each item in the list.\n *\n * If the field type is a Scalar or Enum, ensures the completed value is a legal\n * value of the type by calling the `coerceOutputValue` method of GraphQL type\n * definition.\n *\n * If the field is an abstract type, determine the runtime type of the value\n * and then complete based on that type\n *\n * Otherwise, the field type expects a sub-selection set, and will complete the\n * value by executing all sub-selections.\n *\n * @internal\n */\n completeValue(\n returnType: GraphQLOutputType,\n fieldDetailsList: FieldDetailsList,\n info: GraphQLResolveInfo,\n path: Path,\n result: unknown,\n positionContext: TPositionContext | undefined,\n ): PromiseOrValue<unknown> {\n // If result is an Error, throw a located error.\n if (result instanceof Error) {\n throw result;\n }\n\n // If field type is NonNull, complete for inner type, and throw field error\n // if result is null.\n if (isNonNullType(returnType)) {\n const completed = this.completeValue(\n returnType.ofType,\n fieldDetailsList,\n info,\n path,\n result,\n positionContext,\n );\n if (completed === null) {\n throw new Error(\n `Cannot return null for non-nullable field ${info.parentType}.${info.fieldName}.`,\n );\n }\n return completed;\n }\n\n // If result value is null or undefined then return null.\n if (result == null) {\n return null;\n }\n\n // If field type is List, complete each item in the list with the inner type\n if (isListType(returnType)) {\n return this.completeListValue(\n returnType,\n fieldDetailsList,\n info,\n path,\n result,\n positionContext,\n );\n }\n\n // If field type is a leaf type, Scalar or Enum, coerce to a valid value,\n // returning null if coercion is not possible.\n if (isLeafType(returnType)) {\n return this.completeLeafValue(returnType, result);\n }\n\n // If field type is an abstract type, Interface or Union, determine the\n // runtime Object type and complete for that type.\n if (isAbstractType(returnType)) {\n return this.completeAbstractValue(\n returnType,\n fieldDetailsList,\n info,\n path,\n result,\n positionContext,\n );\n }\n\n // If field type is Object, execute and complete all sub-selections.\n if (isObjectType(returnType)) {\n return this.completeObjectValue(\n returnType,\n fieldDetailsList,\n info,\n path,\n result,\n positionContext,\n );\n /* node:coverage ignore next 7 */\n }\n // Not reachable, all possible output types have been considered.\n invariant(\n false,\n 'Cannot complete value of unexpected output type: ' + inspect(returnType),\n );\n }\n\n async completePromisedValue(\n returnType: GraphQLOutputType,\n fieldDetailsList: FieldDetailsList,\n info: GraphQLResolveInfo,\n path: Path,\n result: PromiseLike<unknown>,\n positionContext: TPositionContext | undefined,\n ): Promise<unknown> {\n try {\n const resolved = await result;\n if (this.aborted) {\n throw new Error('Aborted!');\n }\n let completed = this.completeValue(\n returnType,\n fieldDetailsList,\n info,\n path,\n resolved,\n positionContext,\n );\n\n if (isPromise(completed)) {\n completed = await completed;\n }\n return completed;\n } catch (rawError) {\n this.handleFieldError(rawError, returnType, fieldDetailsList, path);\n return null;\n }\n }\n\n /**\n * Complete a async iterator value by completing the result and calling\n * recursively until all the results are completed.\n *\n * @internal\n */\n async completeAsyncIterableValue(\n itemType: GraphQLOutputType,\n fieldDetailsList: FieldDetailsList,\n info: GraphQLResolveInfo,\n path: Path,\n items: AsyncIterable<unknown>,\n positionContext: TPositionContext | undefined,\n ): Promise<ReadonlyArray<unknown>> {\n // do not stream inner lists of multi-dimensional lists\n const streamUsage =\n typeof path.key === 'number'\n ? undefined\n : getStreamUsage(this.validatedExecutionArgs, fieldDetailsList);\n\n let containsPromise = false;\n const completedResults: Array<unknown> = [];\n const asyncIterator = items[Symbol.asyncIterator]();\n let index = 0;\n let iteration;\n try {\n while (true) {\n if (\n streamUsage?.initialCount === index &&\n this.handleStream(\n index,\n path,\n { handle: asyncIterator, isAsync: true },\n streamUsage,\n info,\n itemType,\n )\n ) {\n break;\n }\n const itemPath = addPath(path, index, undefined);\n try {\n // eslint-disable-next-line no-await-in-loop\n iteration = await asyncIterator.next();\n } catch (rawError) {\n throw locatedError(\n rawError,\n toNodes(fieldDetailsList),\n pathToArray(path),\n );\n }\n if (this.aborted || iteration.done) {\n break;\n }\n const item = iteration.value;\n if (\n this.completeMaybePromisedListItemValue(\n item,\n completedResults,\n itemType,\n fieldDetailsList,\n info,\n itemPath,\n positionContext,\n )\n ) {\n containsPromise = true;\n }\n index++;\n }\n } catch (error) {\n this.sharedExecutionContext.asyncWorkTracker.add(\n returnIteratorCatchingErrors(asyncIterator),\n );\n if (containsPromise) {\n this.sharedExecutionContext.asyncWorkTracker.addValues(\n completedResults,\n );\n }\n throw error;\n }\n\n // Throwing on completion outside of the loop may allow engines to better optimize\n if (this.aborted) {\n if (!iteration?.done) {\n this.sharedExecutionContext.asyncWorkTracker.add(\n returnIteratorCatchingErrors(asyncIterator),\n );\n }\n throw new Error('Aborted!');\n }\n\n return containsPromise\n ? this.promiseAll(completedResults)\n : completedResults;\n }\n\n /* node:coverage ignore next 12 */\n handleStream(\n _index: number,\n _path: Path,\n _iterator:\n | { handle: Iterator<unknown>; isAsync?: never }\n | { handle: AsyncIterator<unknown>; isAsync: true },\n _streamUsage: StreamUsage,\n _info: GraphQLResolveInfo,\n _itemType: GraphQLOutputType,\n ): boolean {\n return false;\n }\n\n /**\n * Complete a list value by completing each item in the list with the\n * inner type\n *\n * @internal\n */\n completeListValue(\n returnType: GraphQLList<GraphQLOutputType>,\n fieldDetailsList: FieldDetailsList,\n info: GraphQLResolveInfo,\n path: Path,\n result: unknown,\n positionContext: TPositionContext | undefined,\n ): PromiseOrValue<ReadonlyArray<unknown>> {\n const itemType = returnType.ofType;\n\n if (isAsyncIterable(result)) {\n return this.completeAsyncIterableValue(\n itemType,\n fieldDetailsList,\n info,\n path,\n result,\n positionContext,\n );\n }\n\n if (!isIterableObject(result)) {\n throw new GraphQLError(\n `Expected Iterable, but did not find one for field \"${info.parentType}.${info.fieldName}\".`,\n );\n }\n\n return this.completeIterableValue(\n itemType,\n fieldDetailsList,\n info,\n path,\n result,\n positionContext,\n );\n }\n\n completeIterableValue(\n itemType: GraphQLOutputType,\n fieldDetailsList: FieldDetailsList,\n info: GraphQLResolveInfo,\n path: Path,\n items: Iterable<unknown>,\n positionContext: TPositionContext | undefined,\n ): PromiseOrValue<ReadonlyArray<unknown>> {\n // do not stream inner lists of multi-dimensional lists\n const streamUsage =\n typeof path.key === 'number'\n ? undefined\n : getStreamUsage(this.validatedExecutionArgs, fieldDetailsList);\n\n // This is specified as a simple map, however we're optimizing the path\n // where the list contains no Promises by avoiding creating another Promise.\n let containsPromise = false;\n const completedResults: Array<unknown> = [];\n let index = 0;\n const iterator = items[Symbol.iterator]();\n try {\n while (true) {\n if (\n streamUsage?.initialCount === index &&\n this.handleStream(\n index,\n path,\n { handle: iterator },\n streamUsage,\n info,\n itemType,\n )\n ) {\n break;\n }\n const iteration = iterator.next();\n if (iteration.done) {\n break;\n }\n\n const item = iteration.value;\n\n // No need to modify the info object containing the path,\n // since from here on it is not ever accessed by resolver functions.\n const itemPath = addPath(path, index, undefined);\n\n if (\n this.completeMaybePromisedListItemValue(\n item,\n completedResults,\n itemType,\n fieldDetailsList,\n info,\n itemPath,\n positionContext,\n )\n ) {\n containsPromise = true;\n }\n\n index++;\n }\n } catch (error) {\n const asyncWorkTracker = this.sharedExecutionContext.asyncWorkTracker;\n if (containsPromise) {\n asyncWorkTracker.addValues(completedResults);\n }\n asyncWorkTracker.addValues(collectIteratorPromises(iterator));\n throw error;\n }\n\n return containsPromise\n ? this.promiseAll(completedResults)\n : completedResults;\n }\n\n completeMaybePromisedListItemValue(\n item: unknown,\n completedResults: Array<unknown>,\n itemType: GraphQLOutputType,\n fieldDetailsList: FieldDetailsList,\n info: GraphQLResolveInfo,\n itemPath: Path,\n positionContext: TPositionContext | undefined,\n ): boolean {\n if (isPromiseLike(item)) {\n completedResults.push(\n this.completePromisedListItemValue(\n item,\n itemType,\n fieldDetailsList,\n info,\n itemPath,\n positionContext,\n ),\n );\n return true;\n } else if (\n this.completeListItemValue(\n item,\n completedResults,\n itemType,\n fieldDetailsList,\n info,\n itemPath,\n positionContext,\n )\n ) {\n return true;\n }\n return false;\n }\n\n /**\n * Complete a list item value by adding it to the completed results.\n *\n * Returns true if the value is a Promise.\n *\n * @internal\n */\n completeListItemValue(\n item: unknown,\n completedResults: Array<unknown>,\n itemType: GraphQLOutputType,\n fieldDetailsList: FieldDetailsList,\n info: GraphQLResolveInfo,\n itemPath: Path,\n positionContext: TPositionContext | undefined,\n ): boolean {\n try {\n const completedItem = this.completeValue(\n itemType,\n fieldDetailsList,\n info,\n itemPath,\n item,\n positionContext,\n );\n\n if (isPromise(completedItem)) {\n // Note: we don't rely on a `catch` method, but we do expect \"thenable\"\n // to take a second callback for the error case.\n completedResults.push(\n completedItem.then(undefined, (rawError: unknown) => {\n this.handleFieldError(\n rawError,\n itemType,\n fieldDetailsList,\n itemPath,\n );\n return null;\n }),\n );\n return true;\n }\n\n completedResults.push(completedItem);\n } catch (rawError) {\n this.handleFieldError(rawError, itemType, fieldDetailsList, itemPath);\n completedResults.push(null);\n }\n return false;\n }\n\n async completePromisedListItemValue(\n item: PromiseLike<unknown>,\n itemType: GraphQLOutputType,\n fieldDetailsList: FieldDetailsList,\n info: GraphQLResolveInfo,\n itemPath: Path,\n positionContext: TPositionContext | undefined,\n ): Promise<unknown> {\n try {\n const resolved = await item;\n if (this.aborted) {\n throw new Error('Aborted!');\n }\n let completed = this.completeValue(\n itemType,\n fieldDetailsList,\n info,\n itemPath,\n resolved,\n positionContext,\n );\n if (isPromise(completed)) {\n completed = await completed;\n }\n return completed;\n } catch (rawError) {\n this.handleFieldError(rawError, itemType, fieldDetailsList, itemPath);\n return null;\n }\n }\n\n /**\n * Complete a Scalar or Enum by serializing to a valid value, returning\n * null if serialization is not possible.\n *\n * @internal\n */\n completeLeafValue(returnType: GraphQLLeafType, result: unknown): unknown {\n const coerced = returnType.coerceOutputValue(result);\n if (coerced == null) {\n throw new Error(\n `Expected \\`${inspect(returnType)}.coerceOutputValue(${inspect(result)})\\` to ` +\n `return non-nullable value, returned: ${inspect(coerced)}`,\n );\n }\n return coerced;\n }\n\n /**\n * Complete a value of an abstract type by determining the runtime object type\n * of that value, then complete the value for that type.\n *\n * @internal\n */\n completeAbstractValue(\n returnType: GraphQLAbstractType,\n fieldDetailsList: FieldDetailsList,\n info: GraphQLResolveInfo,\n path: Path,\n result: unknown,\n positionContext: TPositionContext | undefined,\n ): PromiseOrValue<ObjMap<unknown>> {\n const validatedExecutionArgs = this.validatedExecutionArgs;\n const { schema, contextValue } = validatedExecutionArgs;\n const resolveTypeFn =\n returnType.resolveType ?? validatedExecutionArgs.typeResolver;\n const runtimeType = resolveTypeFn(result, contextValue, info, returnType);\n\n if (isPromiseLike(runtimeType)) {\n return runtimeType.then((resolvedRuntimeType) => {\n if (this.aborted) {\n throw new Error('Aborted!');\n }\n return this.completeObjectValue(\n this.ensureValidRuntimeType(\n resolvedRuntimeType,\n schema,\n returnType,\n fieldDetailsList,\n info,\n result,\n ),\n fieldDetailsList,\n info,\n path,\n result,\n positionContext,\n );\n });\n }\n\n return this.completeObjectValue(\n this.ensureValidRuntimeType(\n runtimeType,\n schema,\n returnType,\n fieldDetailsList,\n info,\n result,\n ),\n fieldDetailsList,\n info,\n path,\n result,\n positionContext,\n );\n }\n\n ensureValidRuntimeType(\n runtimeTypeName: unknown,\n schema: GraphQLSchema,\n returnType: GraphQLAbstractType,\n fieldDetailsList: FieldDetailsList,\n info: GraphQLResolveInfo,\n result: unknown,\n ): GraphQLObjectType {\n if (runtimeTypeName == null) {\n throw new GraphQLError(\n `Abstract type \"${returnType}\" must resolve to an Object type at runtime for field \"${info.parentType}.${info.fieldName}\". Either the \"${returnType}\" type should provide a \"resolveType\" function or each possible type should provide an \"isTypeOf\" function.`,\n { nodes: toNodes(fieldDetailsList) },\n );\n }\n\n if (typeof runtimeTypeName !== 'string') {\n throw new GraphQLError(\n `Abstract type \"${returnType}\" must resolve to an Object type at runtime for field \"${info.parentType}.${info.fieldName}\" with ` +\n `value ${inspect(result)}, received \"${inspect(\n runtimeTypeName,\n )}\", which is not a valid Object type name.`,\n );\n }\n\n const runtimeType = schema.getType(runtimeTypeName);\n if (runtimeType == null) {\n throw new GraphQLError(\n `Abstract type \"${returnType}\" was resolved to a type \"${runtimeTypeName}\" that does not exist inside the schema.`,\n { nodes: toNodes(fieldDetailsList) },\n );\n }\n\n if (!isObjectType(runtimeType)) {\n throw new GraphQLError(\n `Abstract type \"${returnType}\" was resolved to a non-object type \"${runtimeTypeName}\".`,\n { nodes: toNodes(fieldDetailsList) },\n );\n }\n\n if (!schema.isSubType(returnType, runtimeType)) {\n throw new GraphQLError(\n `Runtime Object type \"${runtimeType}\" is not a possible type for \"${returnType}\".`,\n { nodes: toNodes(fieldDetailsList) },\n );\n }\n\n return runtimeType;\n }\n\n /**\n * Complete an Object value by executing all sub-selections.\n *\n * @internal\n */\n completeObjectValue(\n returnType: GraphQLObjectType,\n fieldDetailsList: FieldDetailsList,\n info: GraphQLResolveInfo,\n path: Path,\n result: unknown,\n positionContext: TPositionContext | undefined,\n ): PromiseOrValue<ObjMap<unknown>> {\n // If there is an isTypeOf predicate function, call it with the\n // current result. If isTypeOf returns false, then raise an error rather\n // than continuing execution.\n if (returnType.isTypeOf) {\n const isTypeOf = returnType.isTypeOf(\n result,\n this.validatedExecutionArgs.contextValue,\n info,\n );\n\n if (isPromiseLike(isTypeOf)) {\n return isTypeOf.then((resolvedIsTypeOf) => {\n if (this.aborted) {\n throw new Error('Aborted!');\n }\n if (!resolvedIsTypeOf) {\n throw this.invalidReturnTypeError(\n returnType,\n result,\n fieldDetailsList,\n );\n }\n return this.collectAndExecuteSubfields(\n returnType,\n fieldDetailsList,\n path,\n result,\n positionContext,\n );\n });\n }\n\n if (!isTypeOf) {\n throw this.invalidReturnTypeError(returnType, result, fieldDetailsList);\n }\n }\n\n return this.collectAndExecuteSubfields(\n returnType,\n fieldDetailsList,\n path,\n result,\n positionContext,\n );\n }\n\n invalidReturnTypeError(\n returnType: GraphQLObjectType,\n result: unknown,\n fieldDetailsList: FieldDetailsList,\n ): GraphQLError {\n return new GraphQLError(\n `Expected value of type \"${returnType}\" but got: ${inspect(result)}.`,\n { nodes: toNodes(fieldDetailsList) },\n );\n }\n\n collectAndExecuteSubfields(\n returnType: GraphQLObjectType,\n fieldDetailsList: FieldDetailsList,\n path: Path,\n result: unknown,\n positionContext: TPositionContext | undefined,\n ): PromiseOrValue<ObjMap<unknown>> {\n // Collect sub-fields to execute to complete this value.\n const { groupedFieldSet, newDeferUsages } = collectSubfields(\n this.validatedExecutionArgs,\n returnType,\n fieldDetailsList,\n );\n\n return this.executeCollectedSubfields(\n returnType,\n result,\n path,\n groupedFieldSet,\n newDeferUsages,\n positionContext,\n );\n }\n\n executeCollectedSubfields(\n parentType: GraphQLObjectType,\n sourceValue: unknown,\n path: Path | undefined,\n originalGroupedFieldSet: GroupedFieldSet,\n _newDeferUsages: ReadonlyArray<DeferUsage>,\n _positionContext: TPositionContext | undefined,\n ): PromiseOrValue<ObjMap<unknown>> {\n return this.executeFields(\n parentType,\n sourceValue,\n path,\n originalGroupedFieldSet,\n undefined,\n );\n }\n}\n\nfunction toNodes(fieldDetailsList: FieldDetailsList): ReadonlyArray<FieldNode> {\n return fieldDetailsList.map((fieldDetails) => fieldDetails.node);\n}\n"]}
@@ -14,8 +14,9 @@ export type RootSelectionSetExecutor = (validatedExecutionArgs: ValidatedSubscri
14
14
  * are synchronous), or a Promise of an ExecutionResult that will eventually be
15
15
  * resolved and never rejected.
16
16
  *
17
- * If the arguments to this function do not result in a legal execution context,
18
- * a GraphQLError will be thrown immediately explaining the invalid input.
17
+ * If the schema is invalid, an error will be thrown immediately. GraphQL
18
+ * request errors, including missing operations and variable coercion errors,
19
+ * are returned in an errors-only ExecutionResult.
19
20
  *
20
21
  * Field errors are collected into the response instead of rejecting the
21
22
  * returned promise. Only the field that produced the error and its descendants
@@ -62,8 +63,9 @@ export declare function execute(args: ExecutionArgs): PromiseOrValue<ExecutionRe
62
63
  * ExperimentalIncrementalExecutionResults object containing an `initialResult`
63
64
  * and a stream of `subsequentResults`.
64
65
  *
65
- * If the arguments to this function do not result in a legal execution context,
66
- * a GraphQLError will be thrown immediately explaining the invalid input.
66
+ * If the schema is invalid, an error will be thrown immediately. GraphQL
67
+ * request errors, including missing operations and variable coercion errors,
68
+ * are returned in an errors-only ExecutionResult.
67
69
  * @param args - Execution arguments for the GraphQL operation.
68
70
  * @returns A single execution result or incremental execution results.
69
71
  * @example
@@ -94,17 +96,18 @@ export declare function executeIgnoringIncremental(args: ExecutionArgs): Promise
94
96
  /**
95
97
  * Implements the "Executing operations" section of the spec.
96
98
  *
97
- * Returns a Promise that will eventually resolve to the data described by
98
- * The "Response" section of the GraphQL specification.
99
+ * Returns either a synchronous ExecutionResult, or a Promise for an
100
+ * ExecutionResult, described by the "Response" section of the GraphQL
101
+ * specification.
99
102
  *
100
- * If errors are encountered while executing a GraphQL field, only that
101
- * field and its descendants will be omitted, and sibling fields will still
102
- * be executed. An execution which encounters errors will still result in a
103
- * resolved Promise.
103
+ * If errors are encountered while executing a GraphQL field, only that field
104
+ * and its descendants will be omitted, and sibling fields will still be
105
+ * executed. These field errors are collected into the returned result instead
106
+ * of being thrown or rejecting the returned promise.
104
107
  *
105
- * Errors from sub-fields of a NonNull type may propagate to the top level,
106
- * at which point we still log the error and null the parent field, which
107
- * in this case is the entire response.
108
+ * Errors from sub-fields of a NonNull type may propagate to the top level, at
109
+ * which point we still collect the error and null the parent field, which in
110
+ * this case is the entire response.
108
111
  * @param validatedExecutionArgs - Validated execution arguments.
109
112
  * @returns Execution result for the operation root selection set.
110
113
  * @example
@@ -112,7 +115,10 @@ export declare function executeIgnoringIncremental(args: ExecutionArgs): Promise
112
115
  * import assert from 'node:assert';
113
116
  * import { parse } from 'graphql/language';
114
117
  * import { buildSchema } from 'graphql/utilities';
115
- * import { executeRootSelectionSet, validateExecutionArgs } from 'graphql/execution';
118
+ * import {
119
+ * executeRootSelectionSet,
120
+ * validateExecutionArgs,
121
+ * } from 'graphql/execution';
116
122
  *
117
123
  * const schema = buildSchema('type Query { greeting: String }');
118
124
  * const validatedArgs = validateExecutionArgs({
@@ -185,6 +191,9 @@ export declare function executeRootSelectionSetIgnoringIncremental(validatedExec
185
191
  export declare function executeSync(args: ExecutionArgs): ExecutionResult;
186
192
  /**
187
193
  * Executes a subscription operation once for a single source event.
194
+ *
195
+ * Field errors are collected into the returned result instead of being thrown
196
+ * or rejecting the returned promise.
188
197
  * @param validatedExecutionArgs - Validated subscription execution arguments.
189
198
  * @returns Execution result for the subscription event.
190
199
  * @example
@@ -192,7 +201,10 @@ export declare function executeSync(args: ExecutionArgs): ExecutionResult;
192
201
  * import assert from 'node:assert';
193
202
  * import { parse } from 'graphql/language';
194
203
  * import { buildSchema } from 'graphql/utilities';
195
- * import { executeSubscriptionEvent, validateSubscriptionArgs } from 'graphql/execution';
204
+ * import {
205
+ * executeSubscriptionEvent,
206
+ * validateSubscriptionArgs,
207
+ * } from 'graphql/execution';
196
208
  *
197
209
  * const schema = buildSchema(`
198
210
  * type Query {
@@ -219,21 +231,22 @@ export declare function executeSubscriptionEvent(validatedExecutionArgs: Validat
219
231
  /**
220
232
  * Implements the "Subscribe" algorithm described in the GraphQL specification.
221
233
  *
222
- * Returns a Promise that resolves to either an AsyncIterator (if successful)
223
- * or an ExecutionResult (error). The promise will be rejected if the schema or
224
- * other arguments to this function are invalid, or if the resolved event stream
225
- * is not an async iterable.
234
+ * Returns either an AsyncGenerator (if successful), an ExecutionResult (error),
235
+ * or a Promise for one of those results. The call will throw immediately if
236
+ * the schema is invalid or the selected operation is not a subscription.
226
237
  *
227
- * If the client-provided arguments to this function do not result in a
228
- * compliant subscription, a GraphQL Response (ExecutionResult) with descriptive
229
- * errors and no data will be returned.
238
+ * GraphQL request errors, including missing operations and variable coercion
239
+ * errors, return or resolve to a GraphQL Response (ExecutionResult) with
240
+ * descriptive errors and no data.
230
241
  *
231
242
  * If the source stream could not be created due to faulty subscription resolver
232
- * logic or underlying systems, the promise will resolve to a single
233
- * ExecutionResult containing `errors` and no `data`.
243
+ * logic, a non-async-iterable resolver result, or a system error, the
244
+ * function will return or resolve to a single ExecutionResult containing
245
+ * `errors` and no `data`.
234
246
  *
235
- * If the operation succeeded, the promise resolves to an AsyncIterator, which
236
- * yields a stream of ExecutionResults representing the response stream.
247
+ * If the operation succeeded, the function returns or resolves to an
248
+ * AsyncGenerator, which yields a stream of ExecutionResults representing the
249
+ * response stream.
237
250
  *
238
251
  * This function does not support incremental delivery (`@defer` and `@stream`).
239
252
  * If an operation which would defer or stream data is executed with this
@@ -335,21 +348,20 @@ export declare function subscribe(args: ExecutionArgs): PromiseOrValue<AsyncGene
335
348
  * GraphQL specification, resolving the subscription source event stream for a
336
349
  * previously validated subscription request.
337
350
  *
338
- * Returns a Promise that resolves to either an AsyncIterable (if successful)
339
- * or an ExecutionResult (error). The promise will be rejected if the validated
340
- * execution arguments are invalid, or if the resolved event stream is not an
341
- * async iterable.
351
+ * Returns either an AsyncIterable (if successful), an ExecutionResult (error),
352
+ * or a Promise for one of those results. The call will throw immediately if
353
+ * it is not passed validated execution arguments.
342
354
  *
343
- * If the client-provided arguments to this function do not result in a
344
- * compliant subscription, a GraphQL Response (ExecutionResult) with
345
- * descriptive errors and no data will be returned.
355
+ * If the validated arguments do not result in a compliant subscription, a
356
+ * GraphQL Response (ExecutionResult) with descriptive errors and no data will
357
+ * be returned.
346
358
  *
347
359
  * If the source stream could not be created due to faulty subscription
348
- * resolver logic or underlying systems, the promise will resolve to a single
349
- * ExecutionResult containing `errors` and no `data`.
360
+ * resolver logic or a system error, the function will return or
361
+ * resolve to a single ExecutionResult containing `errors` and no `data`.
350
362
  *
351
- * If the operation succeeded, the promise resolves to the AsyncIterable for the
352
- * event stream returned by the resolver.
363
+ * If the operation succeeded, the function returns or resolves to the
364
+ * AsyncIterable for the event stream returned by the resolver.
353
365
  *
354
366
  * A Source Event Stream represents a sequence of events, each of which triggers
355
367
  * a GraphQL execution for that event.
@@ -365,7 +377,10 @@ export declare function subscribe(args: ExecutionArgs): PromiseOrValue<AsyncGene
365
377
  * import assert from 'node:assert';
366
378
  * import { parse } from 'graphql/language';
367
379
  * import { buildSchema } from 'graphql/utilities';
368
- * import { createSourceEventStream, validateSubscriptionArgs } from 'graphql/execution';
380
+ * import {
381
+ * createSourceEventStream,
382
+ * validateSubscriptionArgs,
383
+ * } from 'graphql/execution';
369
384
  *
370
385
  * async function* greetings() {
371
386
  * yield { greeting: 'Hello' };
@@ -394,12 +409,11 @@ export declare function subscribe(args: ExecutionArgs): PromiseOrValue<AsyncGene
394
409
  */
395
410
  export declare function createSourceEventStream(validatedExecutionArgs: ValidatedSubscriptionArgs): PromiseOrValue<AsyncIterable<unknown> | ExecutionResult>;
396
411
  /**
397
- * Constructs a ExecutionContext object from the arguments passed to
398
- * execute, which we will pass throughout the other execution methods.
399
- *
400
- * Throws a GraphQLError if a valid execution context cannot be created.
412
+ * Validates the arguments passed to execute, subscribe, and their lower-level
413
+ * helpers.
401
414
  *
402
- * TODO: consider no longer exporting this function
415
+ * Throws if the schema is invalid. GraphQL request errors, including variable
416
+ * coercion errors, are returned as a GraphQLError array.
403
417
  * @param args - Execution arguments to validate.
404
418
  * @returns Validated execution arguments, or validation errors.
405
419
  * @example
@@ -454,6 +468,10 @@ export declare function createSourceEventStream(validatedExecutionArgs: Validate
454
468
  export declare function validateExecutionArgs(args: ExecutionArgs): ReadonlyArray<GraphQLError> | ValidatedExecutionArgs;
455
469
  /**
456
470
  * Validates execution arguments for a subscription operation.
471
+ *
472
+ * Throws if the schema is invalid or the selected operation is not a
473
+ * subscription. GraphQL request errors, including variable coercion errors, are
474
+ * returned as a GraphQLError array.
457
475
  * @param args - Execution arguments to validate.
458
476
  * @returns Validated subscription execution arguments, or validation errors.
459
477
  * @example
@@ -514,7 +532,10 @@ export declare const defaultFieldResolver: GraphQLFieldResolver<unknown, unknown
514
532
  * import assert from 'node:assert';
515
533
  * import { parse } from 'graphql/language';
516
534
  * import { buildSchema } from 'graphql/utilities';
517
- * import { mapSourceToResponseEvent, validateSubscriptionArgs } from 'graphql/execution';
535
+ * import {
536
+ * mapSourceToResponseEvent,
537
+ * validateSubscriptionArgs,
538
+ * } from 'graphql/execution';
518
539
  *
519
540
  * async function* events() {
520
541
  * yield { greeting: 'Hello' };