graphql 17.0.0-beta.2 → 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.
- package/README.md +3 -5
- package/__dev__/diagnostics.d.mts +1 -0
- package/__dev__/diagnostics.d.ts +1 -0
- package/__dev__/diagnostics.js +3 -0
- package/__dev__/diagnostics.mjs +3 -0
- package/diagnostics.d.mts +307 -0
- package/diagnostics.d.ts +307 -0
- package/diagnostics.js +75 -0
- package/diagnostics.js.map +1 -0
- package/diagnostics.mjs +70 -0
- package/diagnostics.mjs.map +1 -0
- package/error/GraphQLError.d.mts +3 -1
- package/error/GraphQLError.d.ts +3 -1
- package/error/GraphQLError.js +3 -3
- package/error/GraphQLError.js.map +1 -1
- package/error/GraphQLError.mjs +3 -3
- package/error/GraphQLError.mjs.map +1 -1
- package/error/locatedError.d.mts +1 -3
- package/error/locatedError.d.ts +1 -3
- package/error/locatedError.js.map +1 -1
- package/error/locatedError.mjs.map +1 -1
- package/execution/ExecutionArgs.d.mts +6 -0
- package/execution/ExecutionArgs.d.ts +6 -0
- package/execution/ExecutionArgs.js.map +1 -1
- package/execution/ExecutionArgs.mjs.map +1 -1
- package/execution/Executor.d.mts +19 -1
- package/execution/Executor.d.ts +19 -1
- package/execution/Executor.js +49 -4
- package/execution/Executor.js.map +1 -1
- package/execution/Executor.mjs +49 -4
- package/execution/Executor.mjs.map +1 -1
- package/execution/execute.d.mts +65 -44
- package/execution/execute.d.ts +65 -44
- package/execution/execute.js +73 -4
- package/execution/execute.js.map +1 -1
- package/execution/execute.mjs +73 -4
- package/execution/execute.mjs.map +1 -1
- package/execution/values.d.mts +17 -17
- package/execution/values.d.ts +17 -17
- package/execution/values.js.map +1 -1
- package/execution/values.mjs.map +1 -1
- package/index.d.mts +1 -0
- package/index.d.ts +1 -0
- package/index.js.map +1 -1
- package/index.mjs.map +1 -1
- package/language/parser.d.mts +20 -30
- package/language/parser.d.ts +20 -30
- package/language/parser.js +9 -9
- package/language/parser.js.map +1 -1
- package/language/parser.mjs +9 -9
- package/language/parser.mjs.map +1 -1
- package/language/predicates.d.mts +5 -1
- package/language/predicates.d.ts +5 -1
- package/language/predicates.js.map +1 -1
- package/language/predicates.mjs.map +1 -1
- package/language/source.d.mts +4 -5
- package/language/source.d.ts +4 -5
- package/language/source.js.map +1 -1
- package/language/source.mjs.map +1 -1
- package/language/visitor.d.mts +10 -2
- package/language/visitor.d.ts +10 -2
- package/language/visitor.js.map +1 -1
- package/language/visitor.mjs.map +1 -1
- package/package.json +2 -2
- package/type/definition.d.mts +96 -64
- package/type/definition.d.ts +96 -64
- package/type/definition.js.map +1 -1
- package/type/definition.mjs.map +1 -1
- package/type/directives.d.mts +3 -3
- package/type/directives.d.ts +3 -3
- package/type/directives.js.map +1 -1
- package/type/directives.mjs.map +1 -1
- package/type/schema.d.mts +4 -8
- package/type/schema.d.ts +4 -8
- package/type/schema.js.map +1 -1
- package/type/schema.mjs.map +1 -1
- package/type/validate.js +101 -30
- package/type/validate.js.map +1 -1
- package/type/validate.mjs +101 -30
- package/type/validate.mjs.map +1 -1
- package/utilities/TypeInfo.d.mts +1 -1
- package/utilities/TypeInfo.d.ts +1 -1
- package/utilities/TypeInfo.js.map +1 -1
- package/utilities/TypeInfo.mjs.map +1 -1
- package/utilities/buildASTSchema.d.mts +0 -1
- package/utilities/buildASTSchema.d.ts +0 -1
- package/utilities/buildASTSchema.js +0 -1
- package/utilities/buildASTSchema.js.map +1 -1
- package/utilities/buildASTSchema.mjs +0 -1
- package/utilities/buildASTSchema.mjs.map +1 -1
- package/utilities/buildClientSchema.d.mts +5 -1
- package/utilities/buildClientSchema.d.ts +5 -1
- package/utilities/buildClientSchema.js.map +1 -1
- package/utilities/buildClientSchema.mjs.map +1 -1
- package/utilities/coerceInputValue.d.mts +7 -6
- package/utilities/coerceInputValue.d.ts +7 -6
- package/utilities/coerceInputValue.js.map +1 -1
- package/utilities/coerceInputValue.mjs.map +1 -1
- package/utilities/concatAST.d.mts +4 -1
- package/utilities/concatAST.d.ts +4 -1
- package/utilities/concatAST.js.map +1 -1
- package/utilities/concatAST.mjs.map +1 -1
- package/utilities/extendSchema.d.mts +3 -3
- package/utilities/extendSchema.d.ts +3 -3
- package/utilities/extendSchema.js +5 -1
- package/utilities/extendSchema.js.map +1 -1
- package/utilities/extendSchema.mjs +5 -1
- package/utilities/extendSchema.mjs.map +1 -1
- package/utilities/introspectionFromSchema.d.mts +6 -2
- package/utilities/introspectionFromSchema.d.ts +6 -2
- package/utilities/introspectionFromSchema.js.map +1 -1
- package/utilities/introspectionFromSchema.mjs.map +1 -1
- package/utilities/lexicographicSortSchema.d.mts +5 -1
- package/utilities/lexicographicSortSchema.d.ts +5 -1
- package/utilities/lexicographicSortSchema.js.map +1 -1
- package/utilities/lexicographicSortSchema.mjs.map +1 -1
- package/utilities/printSchema.d.mts +5 -1
- package/utilities/printSchema.d.ts +5 -1
- package/utilities/printSchema.js.map +1 -1
- package/utilities/printSchema.mjs.map +1 -1
- package/utilities/replaceVariables.d.mts +4 -8
- package/utilities/replaceVariables.d.ts +4 -8
- package/utilities/replaceVariables.js.map +1 -1
- package/utilities/replaceVariables.mjs.map +1 -1
- package/utilities/stripIgnoredCharacters.d.mts +2 -2
- package/utilities/stripIgnoredCharacters.d.ts +2 -2
- package/utilities/stripIgnoredCharacters.js.map +1 -1
- package/utilities/stripIgnoredCharacters.mjs.map +1 -1
- package/utilities/typeComparators.d.mts +1 -5
- package/utilities/typeComparators.d.ts +1 -5
- package/utilities/typeComparators.js.map +1 -1
- package/utilities/typeComparators.mjs.map +1 -1
- package/utilities/validateInputValue.d.mts +10 -8
- package/utilities/validateInputValue.d.ts +10 -8
- package/utilities/validateInputValue.js.map +1 -1
- package/utilities/validateInputValue.mjs.map +1 -1
- package/validation/rules/DeferStreamDirectiveOnRootFieldRule.d.mts +4 -1
- package/validation/rules/DeferStreamDirectiveOnRootFieldRule.d.ts +4 -1
- package/validation/rules/DeferStreamDirectiveOnRootFieldRule.js +70 -17
- package/validation/rules/DeferStreamDirectiveOnRootFieldRule.js.map +1 -1
- package/validation/rules/DeferStreamDirectiveOnRootFieldRule.mjs +70 -17
- package/validation/rules/DeferStreamDirectiveOnRootFieldRule.mjs.map +1 -1
- package/validation/rules/DeferStreamDirectiveOnValidOperationsRule.d.mts +1 -1
- package/validation/rules/DeferStreamDirectiveOnValidOperationsRule.d.ts +1 -1
- package/validation/rules/DeferStreamDirectiveOnValidOperationsRule.js +90 -21
- package/validation/rules/DeferStreamDirectiveOnValidOperationsRule.js.map +1 -1
- package/validation/rules/DeferStreamDirectiveOnValidOperationsRule.mjs +91 -22
- package/validation/rules/DeferStreamDirectiveOnValidOperationsRule.mjs.map +1 -1
- package/validation/rules/ExecutableDefinitionsRule.d.mts +6 -2
- package/validation/rules/ExecutableDefinitionsRule.d.ts +6 -2
- package/validation/rules/ExecutableDefinitionsRule.js.map +1 -1
- package/validation/rules/ExecutableDefinitionsRule.mjs.map +1 -1
- package/validation/rules/FieldsOnCorrectTypeRule.d.mts +3 -1
- package/validation/rules/FieldsOnCorrectTypeRule.d.ts +3 -1
- package/validation/rules/FieldsOnCorrectTypeRule.js.map +1 -1
- package/validation/rules/FieldsOnCorrectTypeRule.mjs.map +1 -1
- package/validation/rules/FragmentsOnCompositeTypesRule.d.mts +6 -2
- package/validation/rules/FragmentsOnCompositeTypesRule.d.ts +6 -2
- package/validation/rules/FragmentsOnCompositeTypesRule.js.map +1 -1
- package/validation/rules/FragmentsOnCompositeTypesRule.mjs.map +1 -1
- package/validation/rules/KnownArgumentNamesRule.d.mts +3 -1
- package/validation/rules/KnownArgumentNamesRule.d.ts +3 -1
- package/validation/rules/KnownArgumentNamesRule.js.map +1 -1
- package/validation/rules/KnownArgumentNamesRule.mjs.map +1 -1
- package/validation/rules/KnownDirectivesRule.js +2 -1
- package/validation/rules/KnownDirectivesRule.js.map +1 -1
- package/validation/rules/KnownDirectivesRule.mjs +2 -1
- package/validation/rules/KnownDirectivesRule.mjs.map +1 -1
- package/validation/rules/KnownFragmentNamesRule.d.mts +3 -1
- package/validation/rules/KnownFragmentNamesRule.d.ts +3 -1
- package/validation/rules/KnownFragmentNamesRule.js.map +1 -1
- package/validation/rules/KnownFragmentNamesRule.mjs.map +1 -1
- package/validation/rules/LoneAnonymousOperationRule.d.mts +6 -2
- package/validation/rules/LoneAnonymousOperationRule.d.ts +6 -2
- package/validation/rules/LoneAnonymousOperationRule.js.map +1 -1
- package/validation/rules/LoneAnonymousOperationRule.mjs.map +1 -1
- package/validation/rules/MaxIntrospectionDepthRule.d.mts +6 -2
- package/validation/rules/MaxIntrospectionDepthRule.d.ts +6 -2
- package/validation/rules/MaxIntrospectionDepthRule.js.map +1 -1
- package/validation/rules/MaxIntrospectionDepthRule.mjs.map +1 -1
- package/validation/rules/NoUndefinedVariablesRule.d.mts +3 -1
- package/validation/rules/NoUndefinedVariablesRule.d.ts +3 -1
- package/validation/rules/NoUndefinedVariablesRule.js.map +1 -1
- package/validation/rules/NoUndefinedVariablesRule.mjs.map +1 -1
- package/validation/rules/NoUnusedFragmentsRule.d.mts +3 -1
- package/validation/rules/NoUnusedFragmentsRule.d.ts +3 -1
- package/validation/rules/NoUnusedFragmentsRule.js.map +1 -1
- package/validation/rules/NoUnusedFragmentsRule.mjs.map +1 -1
- package/validation/rules/NoUnusedVariablesRule.d.mts +3 -1
- package/validation/rules/NoUnusedVariablesRule.d.ts +3 -1
- package/validation/rules/NoUnusedVariablesRule.js.map +1 -1
- package/validation/rules/NoUnusedVariablesRule.mjs.map +1 -1
- package/validation/rules/OverlappingFieldsCanBeMergedRule.d.mts +6 -2
- package/validation/rules/OverlappingFieldsCanBeMergedRule.d.ts +6 -2
- package/validation/rules/OverlappingFieldsCanBeMergedRule.js.map +1 -1
- package/validation/rules/OverlappingFieldsCanBeMergedRule.mjs.map +1 -1
- package/validation/rules/PossibleFragmentSpreadsRule.d.mts +6 -2
- package/validation/rules/PossibleFragmentSpreadsRule.d.ts +6 -2
- package/validation/rules/PossibleFragmentSpreadsRule.js.map +1 -1
- package/validation/rules/PossibleFragmentSpreadsRule.mjs.map +1 -1
- package/validation/rules/ProvidedRequiredArgumentsRule.d.mts +6 -2
- package/validation/rules/ProvidedRequiredArgumentsRule.d.ts +6 -2
- package/validation/rules/ProvidedRequiredArgumentsRule.js.map +1 -1
- package/validation/rules/ProvidedRequiredArgumentsRule.mjs.map +1 -1
- package/validation/rules/SingleFieldSubscriptionsRule.d.mts +6 -2
- package/validation/rules/SingleFieldSubscriptionsRule.d.ts +6 -2
- package/validation/rules/SingleFieldSubscriptionsRule.js.map +1 -1
- package/validation/rules/SingleFieldSubscriptionsRule.mjs.map +1 -1
- package/validation/rules/UniqueArgumentNamesRule.d.mts +3 -1
- package/validation/rules/UniqueArgumentNamesRule.d.ts +3 -1
- package/validation/rules/UniqueArgumentNamesRule.js.map +1 -1
- package/validation/rules/UniqueArgumentNamesRule.mjs.map +1 -1
- package/validation/rules/UniqueDirectivesPerLocationRule.d.mts +6 -2
- package/validation/rules/UniqueDirectivesPerLocationRule.d.ts +6 -2
- package/validation/rules/UniqueDirectivesPerLocationRule.js.map +1 -1
- package/validation/rules/UniqueDirectivesPerLocationRule.mjs.map +1 -1
- package/validation/rules/UniqueFragmentNamesRule.d.mts +3 -1
- package/validation/rules/UniqueFragmentNamesRule.d.ts +3 -1
- package/validation/rules/UniqueFragmentNamesRule.js.map +1 -1
- package/validation/rules/UniqueFragmentNamesRule.mjs.map +1 -1
- package/validation/rules/UniqueInputFieldNamesRule.d.mts +6 -2
- package/validation/rules/UniqueInputFieldNamesRule.d.ts +6 -2
- package/validation/rules/UniqueInputFieldNamesRule.js.map +1 -1
- package/validation/rules/UniqueInputFieldNamesRule.mjs.map +1 -1
- package/validation/rules/UniqueOperationNamesRule.d.mts +3 -1
- package/validation/rules/UniqueOperationNamesRule.d.ts +3 -1
- package/validation/rules/UniqueOperationNamesRule.js.map +1 -1
- package/validation/rules/UniqueOperationNamesRule.mjs.map +1 -1
- package/validation/rules/UniqueVariableNamesRule.d.mts +3 -1
- package/validation/rules/UniqueVariableNamesRule.d.ts +3 -1
- package/validation/rules/UniqueVariableNamesRule.js.map +1 -1
- package/validation/rules/UniqueVariableNamesRule.mjs.map +1 -1
- package/validation/rules/ValuesOfCorrectTypeRule.d.mts +3 -1
- package/validation/rules/ValuesOfCorrectTypeRule.d.ts +3 -1
- package/validation/rules/ValuesOfCorrectTypeRule.js.map +1 -1
- package/validation/rules/ValuesOfCorrectTypeRule.mjs.map +1 -1
- package/validation/rules/VariablesAreInputTypesRule.d.mts +6 -2
- package/validation/rules/VariablesAreInputTypesRule.d.ts +6 -2
- package/validation/rules/VariablesAreInputTypesRule.js.map +1 -1
- package/validation/rules/VariablesAreInputTypesRule.mjs.map +1 -1
- package/validation/rules/VariablesInAllowedPositionRule.d.mts +6 -2
- package/validation/rules/VariablesInAllowedPositionRule.d.ts +6 -2
- package/validation/rules/VariablesInAllowedPositionRule.js.map +1 -1
- package/validation/rules/VariablesInAllowedPositionRule.mjs.map +1 -1
- package/validation/rules/custom/NoDeprecatedCustomRule.d.mts +3 -1
- package/validation/rules/custom/NoDeprecatedCustomRule.d.ts +3 -1
- package/validation/rules/custom/NoDeprecatedCustomRule.js.map +1 -1
- package/validation/rules/custom/NoDeprecatedCustomRule.mjs.map +1 -1
- package/validation/rules/custom/NoSchemaIntrospectionCustomRule.d.mts +6 -2
- package/validation/rules/custom/NoSchemaIntrospectionCustomRule.d.ts +6 -2
- package/validation/rules/custom/NoSchemaIntrospectionCustomRule.js.map +1 -1
- package/validation/rules/custom/NoSchemaIntrospectionCustomRule.mjs.map +1 -1
- package/validation/validate.d.mts +3 -6
- package/validation/validate.d.ts +3 -6
- package/validation/validate.js +6 -0
- package/validation/validate.js.map +1 -1
- package/validation/validate.mjs +6 -0
- package/validation/validate.mjs.map +1 -1
- package/version.js +2 -2
- package/version.js.map +1 -1
- package/version.mjs +2 -2
- package/version.mjs.map +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ExecutionArgs.js","sourceRoot":"","sources":["../../src/execution/ExecutionArgs.ts"],"names":[],"mappings":"","sourcesContent":["/** @category Execution */\n\nimport type { Maybe } from '../jsutils/Maybe.ts';\nimport type { ObjMap } from '../jsutils/ObjMap.ts';\n\nimport type {\n DocumentNode,\n FragmentDefinitionNode,\n OperationDefinitionNode,\n SubscriptionOperationDefinitionNode,\n} from '../language/ast.ts';\n\nimport type {\n GraphQLFieldResolver,\n GraphQLTypeResolver,\n} from '../type/definition.ts';\nimport type { GraphQLSchema } from '../type/schema.ts';\n\nimport type { FragmentDetails } from './collectFields.ts';\nimport type { VariableValues } from './values.ts';\n\n/** Arguments accepted by execute and executeSync. */\nexport interface ExecutionArgs {\n /** The schema used for validation or execution. */\n schema: GraphQLSchema;\n /** The parsed GraphQL document to execute. */\n document: DocumentNode;\n /** Initial root value passed to the operation. */\n rootValue?: unknown;\n /** Application context value passed to every resolver. */\n contextValue?: unknown;\n /** Runtime variable values keyed by variable name. */\n variableValues?: Maybe<{ readonly [variable: string]: unknown }>;\n /** Name of the operation to execute when the document contains multiple operations. */\n operationName?: Maybe<string>;\n /** Resolver used when a field does not define its own resolver. */\n fieldResolver?: Maybe<GraphQLFieldResolver<any, any>>;\n /** Resolver used when an abstract type does not define its own resolver. */\n typeResolver?: Maybe<GraphQLTypeResolver<any, any>>;\n /** Resolver used for the root subscription field. */\n subscribeFieldResolver?: Maybe<GraphQLFieldResolver<any, any>>;\n /** Whether suggestion text should be omitted from request errors. */\n hideSuggestions?: Maybe<boolean>;\n /** AbortSignal used to cancel execution. */\n abortSignal?: Maybe<AbortSignal>;\n /** Whether incremental execution may begin eligible work early. */\n enableEarlyExecution?: Maybe<boolean>;\n /** Execution hooks invoked during this operation. */\n hooks?: Maybe<ExecutionHooks>;\n /** Additional execution options. */\n options?: {\n /**\n * Set the maximum number of errors allowed for coercing (defaults to 50).\n *\n * @internal\n */\n maxCoercionErrors?: number;\n };\n}\n\n/**\n * Data that must be available at all points during query execution.\n *\n * Namely, schema of the type system that is currently executing,\n * and the fragments defined in the query document\n */\nexport interface ValidatedExecutionArgs {\n /** Schema used for execution. */\n schema: GraphQLSchema;\n // TODO: consider deprecating/removing fragmentDefinitions if/when fragment\n // arguments are officially supported and/or the full fragment details are\n // exposed within GraphQLResolveInfo.\n /** Fragment definitions keyed by fragment name. */\n fragmentDefinitions: ObjMap<FragmentDefinitionNode>;\n /** Fragment details keyed by fragment name. */\n fragments: ObjMap<FragmentDetails>;\n /** Root value passed to the operation. */\n rootValue: unknown;\n /** Application context value passed to every resolver. */\n contextValue: unknown;\n /** Operation definition selected for execution. */\n operation: OperationDefinitionNode;\n /** Operation variable values with source metadata and coerced runtime values. */\n variableValues: VariableValues;\n /** Resolver used for fields without an explicit resolver. */\n fieldResolver: GraphQLFieldResolver<any, any>;\n /** Resolver used for abstract types without an explicit type resolver. */\n typeResolver: GraphQLTypeResolver<any, any>;\n /** Resolver used for subscription fields without an explicit subscribe resolver. */\n subscribeFieldResolver: GraphQLFieldResolver<any, any>;\n /** Whether suggestion text should be omitted from execution errors. */\n hideSuggestions: boolean;\n /** Whether execution should use error propagation. */\n errorPropagation: boolean;\n /** External signal that may abort execution. */\n externalAbortSignal: AbortSignal | undefined;\n /** Whether incremental execution may begin eligible work early. */\n enableEarlyExecution: boolean;\n /** Execution hooks supplied by the caller. */\n hooks: ExecutionHooks | undefined;\n}\n\n/** Validated execution arguments for a subscription operation. */\nexport interface ValidatedSubscriptionArgs extends ValidatedExecutionArgs {\n /** Subscription operation definition selected for execution. */\n operation: SubscriptionOperationDefinitionNode;\n}\n\n/** Information passed to hooks after asynchronous execution work has finished. */\nexport interface AsyncWorkFinishedInfo {\n /** Validated execution arguments for the operation that finished async work. */\n validatedExecutionArgs: ValidatedExecutionArgs;\n}\n\n/** Optional hooks invoked during GraphQL execution. */\nexport interface ExecutionHooks {\n /** Called after all tracked asynchronous execution work has settled. */\n asyncWorkFinished?: (info: AsyncWorkFinishedInfo) => void;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"ExecutionArgs.js","sourceRoot":"","sources":["../../src/execution/ExecutionArgs.ts"],"names":[],"mappings":"","sourcesContent":["/** @category Execution */\n\nimport type { Maybe } from '../jsutils/Maybe.ts';\nimport type { ObjMap } from '../jsutils/ObjMap.ts';\n\nimport type {\n DocumentNode,\n FragmentDefinitionNode,\n OperationDefinitionNode,\n SubscriptionOperationDefinitionNode,\n} from '../language/ast.ts';\n\nimport type {\n GraphQLFieldResolver,\n GraphQLTypeResolver,\n} from '../type/definition.ts';\nimport type { GraphQLSchema } from '../type/schema.ts';\n\nimport type { FragmentDetails } from './collectFields.ts';\nimport type { VariableValues } from './values.ts';\n\n/** Arguments accepted by execute and executeSync. */\nexport interface ExecutionArgs {\n /** The schema used for validation or execution. */\n schema: GraphQLSchema;\n /** The parsed GraphQL document to execute. */\n document: DocumentNode;\n /** Initial root value passed to the operation. */\n rootValue?: unknown;\n /** Application context value passed to every resolver. */\n contextValue?: unknown;\n /** Runtime variable values keyed by variable name. */\n variableValues?: Maybe<{ readonly [variable: string]: unknown }>;\n /** Name of the operation to execute when the document contains multiple operations. */\n operationName?: Maybe<string>;\n /** Resolver used when a field does not define its own resolver. */\n fieldResolver?: Maybe<GraphQLFieldResolver<any, any>>;\n /** Resolver used when an abstract type does not define its own resolver. */\n typeResolver?: Maybe<GraphQLTypeResolver<any, any>>;\n /** Resolver used for the root subscription field. */\n subscribeFieldResolver?: Maybe<GraphQLFieldResolver<any, any>>;\n /** Whether suggestion text should be omitted from request errors. */\n hideSuggestions?: Maybe<boolean>;\n /** AbortSignal used to cancel execution. */\n abortSignal?: Maybe<AbortSignal>;\n /** Whether incremental execution may begin eligible work early. */\n enableEarlyExecution?: Maybe<boolean>;\n /** Execution hooks invoked during this operation. */\n hooks?: Maybe<ExecutionHooks>;\n /** Additional execution options. */\n options?: {\n /**\n * Set the maximum number of errors allowed for coercing (defaults to 50).\n *\n * @internal\n */\n maxCoercionErrors?: number;\n };\n}\n\n/**\n * Data that must be available at all points during query execution.\n *\n * Namely, schema of the type system that is currently executing,\n * and the fragments defined in the query document\n */\nexport interface ValidatedExecutionArgs {\n /** Schema used for execution. */\n schema: GraphQLSchema;\n /** Parsed GraphQL document being executed. */\n document: DocumentNode;\n // TODO: consider deprecating/removing fragmentDefinitions if/when fragment\n // arguments are officially supported and/or the full fragment details are\n // exposed within GraphQLResolveInfo.\n /** Fragment definitions keyed by fragment name. */\n fragmentDefinitions: ObjMap<FragmentDefinitionNode>;\n /** Fragment details keyed by fragment name. */\n fragments: ObjMap<FragmentDetails>;\n /** Root value passed to the operation. */\n rootValue: unknown;\n /** Application context value passed to every resolver. */\n contextValue: unknown;\n /** Operation definition selected for execution. */\n operation: OperationDefinitionNode;\n /** Operation variable values with source metadata and coerced runtime values. */\n variableValues: VariableValues;\n /** Raw variable values provided by the caller before coercion. */\n rawVariableValues: Maybe<{ readonly [variable: string]: unknown }>;\n /** Resolver used for fields without an explicit resolver. */\n fieldResolver: GraphQLFieldResolver<any, any>;\n /** Resolver used for abstract types without an explicit type resolver. */\n typeResolver: GraphQLTypeResolver<any, any>;\n /** Resolver used for subscription fields without an explicit subscribe resolver. */\n subscribeFieldResolver: GraphQLFieldResolver<any, any>;\n /** Whether suggestion text should be omitted from execution errors. */\n hideSuggestions: boolean;\n /** Whether execution should use error propagation. */\n errorPropagation: boolean;\n /** External signal that may abort execution. */\n externalAbortSignal: AbortSignal | undefined;\n /** Whether incremental execution may begin eligible work early. */\n enableEarlyExecution: boolean;\n /** Execution hooks supplied by the caller. */\n hooks: ExecutionHooks | undefined;\n}\n\n/** Validated execution arguments for a subscription operation. */\nexport interface ValidatedSubscriptionArgs extends ValidatedExecutionArgs {\n /** Subscription operation definition selected for execution. */\n operation: SubscriptionOperationDefinitionNode;\n}\n\n/** Information passed to hooks after asynchronous execution work has finished. */\nexport interface AsyncWorkFinishedInfo {\n /** Validated execution arguments for the operation that finished async work. */\n validatedExecutionArgs: ValidatedExecutionArgs;\n}\n\n/** Optional hooks invoked during GraphQL execution. */\nexport interface ExecutionHooks {\n /** Called after all tracked asynchronous execution work has settled. */\n asyncWorkFinished?: (info: AsyncWorkFinishedInfo) => void;\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ExecutionArgs.js","sourceRoot":"","sources":["../../src/execution/ExecutionArgs.ts"],"names":[],"mappings":"","sourcesContent":["/** @category Execution */\n\nimport type { Maybe } from '../jsutils/Maybe.ts';\nimport type { ObjMap } from '../jsutils/ObjMap.ts';\n\nimport type {\n DocumentNode,\n FragmentDefinitionNode,\n OperationDefinitionNode,\n SubscriptionOperationDefinitionNode,\n} from '../language/ast.ts';\n\nimport type {\n GraphQLFieldResolver,\n GraphQLTypeResolver,\n} from '../type/definition.ts';\nimport type { GraphQLSchema } from '../type/schema.ts';\n\nimport type { FragmentDetails } from './collectFields.ts';\nimport type { VariableValues } from './values.ts';\n\n/** Arguments accepted by execute and executeSync. */\nexport interface ExecutionArgs {\n /** The schema used for validation or execution. */\n schema: GraphQLSchema;\n /** The parsed GraphQL document to execute. */\n document: DocumentNode;\n /** Initial root value passed to the operation. */\n rootValue?: unknown;\n /** Application context value passed to every resolver. */\n contextValue?: unknown;\n /** Runtime variable values keyed by variable name. */\n variableValues?: Maybe<{ readonly [variable: string]: unknown }>;\n /** Name of the operation to execute when the document contains multiple operations. */\n operationName?: Maybe<string>;\n /** Resolver used when a field does not define its own resolver. */\n fieldResolver?: Maybe<GraphQLFieldResolver<any, any>>;\n /** Resolver used when an abstract type does not define its own resolver. */\n typeResolver?: Maybe<GraphQLTypeResolver<any, any>>;\n /** Resolver used for the root subscription field. */\n subscribeFieldResolver?: Maybe<GraphQLFieldResolver<any, any>>;\n /** Whether suggestion text should be omitted from request errors. */\n hideSuggestions?: Maybe<boolean>;\n /** AbortSignal used to cancel execution. */\n abortSignal?: Maybe<AbortSignal>;\n /** Whether incremental execution may begin eligible work early. */\n enableEarlyExecution?: Maybe<boolean>;\n /** Execution hooks invoked during this operation. */\n hooks?: Maybe<ExecutionHooks>;\n /** Additional execution options. */\n options?: {\n /**\n * Set the maximum number of errors allowed for coercing (defaults to 50).\n *\n * @internal\n */\n maxCoercionErrors?: number;\n };\n}\n\n/**\n * Data that must be available at all points during query execution.\n *\n * Namely, schema of the type system that is currently executing,\n * and the fragments defined in the query document\n */\nexport interface ValidatedExecutionArgs {\n /** Schema used for execution. */\n schema: GraphQLSchema;\n // TODO: consider deprecating/removing fragmentDefinitions if/when fragment\n // arguments are officially supported and/or the full fragment details are\n // exposed within GraphQLResolveInfo.\n /** Fragment definitions keyed by fragment name. */\n fragmentDefinitions: ObjMap<FragmentDefinitionNode>;\n /** Fragment details keyed by fragment name. */\n fragments: ObjMap<FragmentDetails>;\n /** Root value passed to the operation. */\n rootValue: unknown;\n /** Application context value passed to every resolver. */\n contextValue: unknown;\n /** Operation definition selected for execution. */\n operation: OperationDefinitionNode;\n /** Operation variable values with source metadata and coerced runtime values. */\n variableValues: VariableValues;\n /** Resolver used for fields without an explicit resolver. */\n fieldResolver: GraphQLFieldResolver<any, any>;\n /** Resolver used for abstract types without an explicit type resolver. */\n typeResolver: GraphQLTypeResolver<any, any>;\n /** Resolver used for subscription fields without an explicit subscribe resolver. */\n subscribeFieldResolver: GraphQLFieldResolver<any, any>;\n /** Whether suggestion text should be omitted from execution errors. */\n hideSuggestions: boolean;\n /** Whether execution should use error propagation. */\n errorPropagation: boolean;\n /** External signal that may abort execution. */\n externalAbortSignal: AbortSignal | undefined;\n /** Whether incremental execution may begin eligible work early. */\n enableEarlyExecution: boolean;\n /** Execution hooks supplied by the caller. */\n hooks: ExecutionHooks | undefined;\n}\n\n/** Validated execution arguments for a subscription operation. */\nexport interface ValidatedSubscriptionArgs extends ValidatedExecutionArgs {\n /** Subscription operation definition selected for execution. */\n operation: SubscriptionOperationDefinitionNode;\n}\n\n/** Information passed to hooks after asynchronous execution work has finished. */\nexport interface AsyncWorkFinishedInfo {\n /** Validated execution arguments for the operation that finished async work. */\n validatedExecutionArgs: ValidatedExecutionArgs;\n}\n\n/** Optional hooks invoked during GraphQL execution. */\nexport interface ExecutionHooks {\n /** Called after all tracked asynchronous execution work has settled. */\n asyncWorkFinished?: (info: AsyncWorkFinishedInfo) => void;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"ExecutionArgs.js","sourceRoot":"","sources":["../../src/execution/ExecutionArgs.ts"],"names":[],"mappings":"","sourcesContent":["/** @category Execution */\n\nimport type { Maybe } from '../jsutils/Maybe.ts';\nimport type { ObjMap } from '../jsutils/ObjMap.ts';\n\nimport type {\n DocumentNode,\n FragmentDefinitionNode,\n OperationDefinitionNode,\n SubscriptionOperationDefinitionNode,\n} from '../language/ast.ts';\n\nimport type {\n GraphQLFieldResolver,\n GraphQLTypeResolver,\n} from '../type/definition.ts';\nimport type { GraphQLSchema } from '../type/schema.ts';\n\nimport type { FragmentDetails } from './collectFields.ts';\nimport type { VariableValues } from './values.ts';\n\n/** Arguments accepted by execute and executeSync. */\nexport interface ExecutionArgs {\n /** The schema used for validation or execution. */\n schema: GraphQLSchema;\n /** The parsed GraphQL document to execute. */\n document: DocumentNode;\n /** Initial root value passed to the operation. */\n rootValue?: unknown;\n /** Application context value passed to every resolver. */\n contextValue?: unknown;\n /** Runtime variable values keyed by variable name. */\n variableValues?: Maybe<{ readonly [variable: string]: unknown }>;\n /** Name of the operation to execute when the document contains multiple operations. */\n operationName?: Maybe<string>;\n /** Resolver used when a field does not define its own resolver. */\n fieldResolver?: Maybe<GraphQLFieldResolver<any, any>>;\n /** Resolver used when an abstract type does not define its own resolver. */\n typeResolver?: Maybe<GraphQLTypeResolver<any, any>>;\n /** Resolver used for the root subscription field. */\n subscribeFieldResolver?: Maybe<GraphQLFieldResolver<any, any>>;\n /** Whether suggestion text should be omitted from request errors. */\n hideSuggestions?: Maybe<boolean>;\n /** AbortSignal used to cancel execution. */\n abortSignal?: Maybe<AbortSignal>;\n /** Whether incremental execution may begin eligible work early. */\n enableEarlyExecution?: Maybe<boolean>;\n /** Execution hooks invoked during this operation. */\n hooks?: Maybe<ExecutionHooks>;\n /** Additional execution options. */\n options?: {\n /**\n * Set the maximum number of errors allowed for coercing (defaults to 50).\n *\n * @internal\n */\n maxCoercionErrors?: number;\n };\n}\n\n/**\n * Data that must be available at all points during query execution.\n *\n * Namely, schema of the type system that is currently executing,\n * and the fragments defined in the query document\n */\nexport interface ValidatedExecutionArgs {\n /** Schema used for execution. */\n schema: GraphQLSchema;\n /** Parsed GraphQL document being executed. */\n document: DocumentNode;\n // TODO: consider deprecating/removing fragmentDefinitions if/when fragment\n // arguments are officially supported and/or the full fragment details are\n // exposed within GraphQLResolveInfo.\n /** Fragment definitions keyed by fragment name. */\n fragmentDefinitions: ObjMap<FragmentDefinitionNode>;\n /** Fragment details keyed by fragment name. */\n fragments: ObjMap<FragmentDetails>;\n /** Root value passed to the operation. */\n rootValue: unknown;\n /** Application context value passed to every resolver. */\n contextValue: unknown;\n /** Operation definition selected for execution. */\n operation: OperationDefinitionNode;\n /** Operation variable values with source metadata and coerced runtime values. */\n variableValues: VariableValues;\n /** Raw variable values provided by the caller before coercion. */\n rawVariableValues: Maybe<{ readonly [variable: string]: unknown }>;\n /** Resolver used for fields without an explicit resolver. */\n fieldResolver: GraphQLFieldResolver<any, any>;\n /** Resolver used for abstract types without an explicit type resolver. */\n typeResolver: GraphQLTypeResolver<any, any>;\n /** Resolver used for subscription fields without an explicit subscribe resolver. */\n subscribeFieldResolver: GraphQLFieldResolver<any, any>;\n /** Whether suggestion text should be omitted from execution errors. */\n hideSuggestions: boolean;\n /** Whether execution should use error propagation. */\n errorPropagation: boolean;\n /** External signal that may abort execution. */\n externalAbortSignal: AbortSignal | undefined;\n /** Whether incremental execution may begin eligible work early. */\n enableEarlyExecution: boolean;\n /** Execution hooks supplied by the caller. */\n hooks: ExecutionHooks | undefined;\n}\n\n/** Validated execution arguments for a subscription operation. */\nexport interface ValidatedSubscriptionArgs extends ValidatedExecutionArgs {\n /** Subscription operation definition selected for execution. */\n operation: SubscriptionOperationDefinitionNode;\n}\n\n/** Information passed to hooks after asynchronous execution work has finished. */\nexport interface AsyncWorkFinishedInfo {\n /** Validated execution arguments for the operation that finished async work. */\n validatedExecutionArgs: ValidatedExecutionArgs;\n}\n\n/** Optional hooks invoked during GraphQL execution. */\nexport interface ExecutionHooks {\n /** Called after all tracked asynchronous execution work has settled. */\n asyncWorkFinished?: (info: AsyncWorkFinishedInfo) => void;\n}\n"]}
|
package/execution/Executor.d.mts
CHANGED
|
@@ -6,6 +6,7 @@ import type { GraphQLFormattedError } from "../error/GraphQLError.mjs";
|
|
|
6
6
|
import { GraphQLError } from "../error/GraphQLError.mjs";
|
|
7
7
|
import type { GraphQLAbstractType, GraphQLLeafType, GraphQLList, GraphQLObjectType, GraphQLOutputType, GraphQLResolveInfo, GraphQLResolveInfoHelpers } from "../type/definition.mjs";
|
|
8
8
|
import type { GraphQLSchema } from "../type/schema.mjs";
|
|
9
|
+
import type { GraphQLExecuteRootSelectionSetContext, GraphQLResolveContext, MinimalTracingChannel } from "../diagnostics.mjs";
|
|
9
10
|
import { AbortedGraphQLExecutionError } from "./AbortedGraphQLExecutionError.mjs";
|
|
10
11
|
import type { DeferUsage, FieldDetailsList, GroupedFieldSet } from "./collectFields.mjs";
|
|
11
12
|
import { collectSubfields as _collectSubfields } from "./collectFields.mjs";
|
|
@@ -93,6 +94,14 @@ TAlternativeInitialResponse = ExecutionResult> {
|
|
|
93
94
|
promiseAll: <T>(values: ReadonlyArray<PromiseOrValue<T>>) => Promise<Array<T>>;
|
|
94
95
|
constructor(validatedExecutionArgs: ValidatedExecutionArgs, sharedExecutionContext?: SharedExecutionContext);
|
|
95
96
|
executeRootSelectionSet(serially?: boolean): PromiseOrValue<ExecutionResult | TAlternativeInitialResponse>;
|
|
97
|
+
/**
|
|
98
|
+
* Build a root-selection-set tracing context from validated execution
|
|
99
|
+
* arguments. The operation has already been selected during argument
|
|
100
|
+
* validation.
|
|
101
|
+
* @internal
|
|
102
|
+
*/
|
|
103
|
+
buildExecuteContextFromValidatedArgs(args: ValidatedExecutionArgs): GraphQLExecuteRootSelectionSetContext;
|
|
104
|
+
executeRootSelectionSetImpl(serially?: boolean): PromiseOrValue<ExecutionResult | TAlternativeInitialResponse>;
|
|
96
105
|
abort(reason?: unknown): void;
|
|
97
106
|
finish<T>(result: T): T;
|
|
98
107
|
createAbortedExecutionError<T>(result: PromiseOrValue<T>): AbortedGraphQLExecutionError<T>;
|
|
@@ -128,7 +137,16 @@ TAlternativeInitialResponse = ExecutionResult> {
|
|
|
128
137
|
*
|
|
129
138
|
* @internal
|
|
130
139
|
*/
|
|
131
|
-
executeField(parentType: GraphQLObjectType, source: unknown, fieldDetailsList: FieldDetailsList, path: Path, positionContext: TPositionContext | undefined): PromiseOrValue<unknown>;
|
|
140
|
+
executeField(parentType: GraphQLObjectType, source: unknown, fieldDetailsList: FieldDetailsList, path: Path, positionContext: TPositionContext | undefined, tracingChannel: MinimalTracingChannel<GraphQLResolveContext> | undefined): PromiseOrValue<unknown>;
|
|
141
|
+
/**
|
|
142
|
+
* Build a graphql:resolve channel context for a single field invocation.
|
|
143
|
+
*
|
|
144
|
+
* `fieldPath` is exposed as a lazy getter because serializing the response
|
|
145
|
+
* path is O(depth) and APMs that depth-filter or skip default resolvers
|
|
146
|
+
* often never read it. `args` is passed through by reference.
|
|
147
|
+
* @internal
|
|
148
|
+
*/
|
|
149
|
+
buildResolveContext(args: ObjMap<unknown>, info: GraphQLResolveInfo, isDefaultResolver: boolean): GraphQLResolveContext;
|
|
132
150
|
handleFieldError(rawError: unknown, returnType: GraphQLOutputType, fieldDetailsList: FieldDetailsList, path: Path): void;
|
|
133
151
|
/**
|
|
134
152
|
* Implements the instructions for completeValue as defined in the
|
package/execution/Executor.d.ts
CHANGED
|
@@ -6,6 +6,7 @@ import type { GraphQLFormattedError } from "../error/GraphQLError.js";
|
|
|
6
6
|
import { GraphQLError } from "../error/GraphQLError.js";
|
|
7
7
|
import type { GraphQLAbstractType, GraphQLLeafType, GraphQLList, GraphQLObjectType, GraphQLOutputType, GraphQLResolveInfo, GraphQLResolveInfoHelpers } from "../type/definition.js";
|
|
8
8
|
import type { GraphQLSchema } from "../type/schema.js";
|
|
9
|
+
import type { GraphQLExecuteRootSelectionSetContext, GraphQLResolveContext, MinimalTracingChannel } from "../diagnostics.js";
|
|
9
10
|
import { AbortedGraphQLExecutionError } from "./AbortedGraphQLExecutionError.js";
|
|
10
11
|
import type { DeferUsage, FieldDetailsList, GroupedFieldSet } from "./collectFields.js";
|
|
11
12
|
import { collectSubfields as _collectSubfields } from "./collectFields.js";
|
|
@@ -93,6 +94,14 @@ TAlternativeInitialResponse = ExecutionResult> {
|
|
|
93
94
|
promiseAll: <T>(values: ReadonlyArray<PromiseOrValue<T>>) => Promise<Array<T>>;
|
|
94
95
|
constructor(validatedExecutionArgs: ValidatedExecutionArgs, sharedExecutionContext?: SharedExecutionContext);
|
|
95
96
|
executeRootSelectionSet(serially?: boolean): PromiseOrValue<ExecutionResult | TAlternativeInitialResponse>;
|
|
97
|
+
/**
|
|
98
|
+
* Build a root-selection-set tracing context from validated execution
|
|
99
|
+
* arguments. The operation has already been selected during argument
|
|
100
|
+
* validation.
|
|
101
|
+
* @internal
|
|
102
|
+
*/
|
|
103
|
+
buildExecuteContextFromValidatedArgs(args: ValidatedExecutionArgs): GraphQLExecuteRootSelectionSetContext;
|
|
104
|
+
executeRootSelectionSetImpl(serially?: boolean): PromiseOrValue<ExecutionResult | TAlternativeInitialResponse>;
|
|
96
105
|
abort(reason?: unknown): void;
|
|
97
106
|
finish<T>(result: T): T;
|
|
98
107
|
createAbortedExecutionError<T>(result: PromiseOrValue<T>): AbortedGraphQLExecutionError<T>;
|
|
@@ -128,7 +137,16 @@ TAlternativeInitialResponse = ExecutionResult> {
|
|
|
128
137
|
*
|
|
129
138
|
* @internal
|
|
130
139
|
*/
|
|
131
|
-
executeField(parentType: GraphQLObjectType, source: unknown, fieldDetailsList: FieldDetailsList, path: Path, positionContext: TPositionContext | undefined): PromiseOrValue<unknown>;
|
|
140
|
+
executeField(parentType: GraphQLObjectType, source: unknown, fieldDetailsList: FieldDetailsList, path: Path, positionContext: TPositionContext | undefined, tracingChannel: MinimalTracingChannel<GraphQLResolveContext> | undefined): PromiseOrValue<unknown>;
|
|
141
|
+
/**
|
|
142
|
+
* Build a graphql:resolve channel context for a single field invocation.
|
|
143
|
+
*
|
|
144
|
+
* `fieldPath` is exposed as a lazy getter because serializing the response
|
|
145
|
+
* path is O(depth) and APMs that depth-filter or skip default resolvers
|
|
146
|
+
* often never read it. `args` is passed through by reference.
|
|
147
|
+
* @internal
|
|
148
|
+
*/
|
|
149
|
+
buildResolveContext(args: ObjMap<unknown>, info: GraphQLResolveInfo, isDefaultResolver: boolean): GraphQLResolveContext;
|
|
132
150
|
handleFieldError(rawError: unknown, returnType: GraphQLOutputType, fieldDetailsList: FieldDetailsList, path: Path): void;
|
|
133
151
|
/**
|
|
134
152
|
* Implements the instructions for completeValue as defined in the
|
package/execution/Executor.js
CHANGED
|
@@ -16,6 +16,7 @@ const GraphQLError_ts_1 = require("../error/GraphQLError.js");
|
|
|
16
16
|
const locatedError_ts_1 = require("../error/locatedError.js");
|
|
17
17
|
const ast_ts_1 = require("../language/ast.js");
|
|
18
18
|
const definition_ts_1 = require("../type/definition.js");
|
|
19
|
+
const diagnostics_ts_1 = require("../diagnostics.js");
|
|
19
20
|
const AbortedGraphQLExecutionError_ts_1 = require("./AbortedGraphQLExecutionError.js");
|
|
20
21
|
const buildResolveInfo_ts_1 = require("./buildResolveInfo.js");
|
|
21
22
|
const cancellablePromise_ts_1 = require("./cancellablePromise.js");
|
|
@@ -77,6 +78,22 @@ class Executor {
|
|
|
77
78
|
this.promiseAll = promiseAll;
|
|
78
79
|
}
|
|
79
80
|
executeRootSelectionSet(serially) {
|
|
81
|
+
if (!(0, diagnostics_ts_1.shouldTrace)(diagnostics_ts_1.executeRootSelectionSetChannel)) {
|
|
82
|
+
return this.executeRootSelectionSetImpl(serially);
|
|
83
|
+
}
|
|
84
|
+
return (0, diagnostics_ts_1.traceMixed)(diagnostics_ts_1.executeRootSelectionSetChannel, this.buildExecuteContextFromValidatedArgs(this.validatedExecutionArgs), () => this.executeRootSelectionSetImpl(serially));
|
|
85
|
+
}
|
|
86
|
+
buildExecuteContextFromValidatedArgs(args) {
|
|
87
|
+
return {
|
|
88
|
+
schema: args.schema,
|
|
89
|
+
document: args.document,
|
|
90
|
+
operation: args.operation,
|
|
91
|
+
rawVariableValues: args.rawVariableValues,
|
|
92
|
+
operationName: args.operation.name?.value,
|
|
93
|
+
operationType: args.operation.operation,
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
executeRootSelectionSetImpl(serially) {
|
|
80
97
|
const externalAbortSignal = this.validatedExecutionArgs.externalAbortSignal;
|
|
81
98
|
let removeExternalAbortListener;
|
|
82
99
|
if (externalAbortSignal) {
|
|
@@ -176,18 +193,24 @@ class Executor {
|
|
|
176
193
|
: this.executeFields(rootType, rootValue, undefined, groupedFieldSet, positionContext);
|
|
177
194
|
}
|
|
178
195
|
executeFieldsSerially(parentType, sourceValue, path, groupedFieldSet, positionContext) {
|
|
196
|
+
let tracingChannel = (0, diagnostics_ts_1.shouldTrace)(diagnostics_ts_1.resolveChannel)
|
|
197
|
+
? diagnostics_ts_1.resolveChannel
|
|
198
|
+
: undefined;
|
|
179
199
|
return (0, promiseReduce_ts_1.promiseReduce)(groupedFieldSet, (results, [responseName, fieldDetailsList]) => {
|
|
180
200
|
if (this.aborted) {
|
|
181
201
|
throw new Error('Aborted!');
|
|
182
202
|
}
|
|
183
203
|
const fieldPath = (0, Path_ts_1.addPath)(path, responseName, parentType.name);
|
|
184
|
-
const result = this.executeField(parentType, sourceValue, fieldDetailsList, fieldPath, positionContext);
|
|
204
|
+
const result = this.executeField(parentType, sourceValue, fieldDetailsList, fieldPath, positionContext, tracingChannel);
|
|
185
205
|
if (result === undefined) {
|
|
186
206
|
return results;
|
|
187
207
|
}
|
|
188
208
|
if ((0, isPromise_ts_1.isPromise)(result)) {
|
|
189
209
|
return result.then((resolved) => {
|
|
190
210
|
results[responseName] = resolved;
|
|
211
|
+
tracingChannel = (0, diagnostics_ts_1.shouldTrace)(diagnostics_ts_1.resolveChannel)
|
|
212
|
+
? diagnostics_ts_1.resolveChannel
|
|
213
|
+
: undefined;
|
|
191
214
|
return results;
|
|
192
215
|
});
|
|
193
216
|
}
|
|
@@ -198,10 +221,13 @@ class Executor {
|
|
|
198
221
|
executeFields(parentType, sourceValue, path, groupedFieldSet, positionContext) {
|
|
199
222
|
const results = Object.create(null);
|
|
200
223
|
let containsPromise = false;
|
|
224
|
+
const tracingChannel = (0, diagnostics_ts_1.shouldTrace)(diagnostics_ts_1.resolveChannel)
|
|
225
|
+
? diagnostics_ts_1.resolveChannel
|
|
226
|
+
: undefined;
|
|
201
227
|
try {
|
|
202
228
|
for (const [responseName, fieldDetailsList] of groupedFieldSet) {
|
|
203
229
|
const fieldPath = (0, Path_ts_1.addPath)(path, responseName, parentType.name);
|
|
204
|
-
const result = this.executeField(parentType, sourceValue, fieldDetailsList, fieldPath, positionContext);
|
|
230
|
+
const result = this.executeField(parentType, sourceValue, fieldDetailsList, fieldPath, positionContext, tracingChannel);
|
|
205
231
|
if (result !== undefined) {
|
|
206
232
|
results[responseName] = result;
|
|
207
233
|
if ((0, isPromise_ts_1.isPromise)(result)) {
|
|
@@ -221,7 +247,7 @@ class Executor {
|
|
|
221
247
|
}
|
|
222
248
|
return (0, promiseForObject_ts_1.promiseForObject)(results, this.promiseAll);
|
|
223
249
|
}
|
|
224
|
-
executeField(parentType, source, fieldDetailsList, path, positionContext) {
|
|
250
|
+
executeField(parentType, source, fieldDetailsList, path, positionContext, tracingChannel) {
|
|
225
251
|
const validatedExecutionArgs = this.validatedExecutionArgs;
|
|
226
252
|
const { schema, contextValue, variableValues, hideSuggestions } = validatedExecutionArgs;
|
|
227
253
|
const firstFieldDetails = fieldDetailsList[0];
|
|
@@ -232,7 +258,11 @@ class Executor {
|
|
|
232
258
|
return;
|
|
233
259
|
}
|
|
234
260
|
const returnType = fieldDef.type;
|
|
235
|
-
|
|
261
|
+
let resolveFn = fieldDef.resolve ?? validatedExecutionArgs.fieldResolver;
|
|
262
|
+
if (tracingChannel !== undefined) {
|
|
263
|
+
const originalResolveFn = resolveFn;
|
|
264
|
+
resolveFn = (s, args, c, info) => (0, diagnostics_ts_1.traceMixed)(tracingChannel, this.buildResolveContext(args, info, fieldDef.resolve === undefined), () => originalResolveFn(s, args, c, info));
|
|
265
|
+
}
|
|
236
266
|
const info = (0, buildResolveInfo_ts_1.buildResolveInfo)(validatedExecutionArgs, fieldDef, toNodes(fieldDetailsList), parentType, path, this.getAbortSignal, this.getAsyncHelpers);
|
|
237
267
|
try {
|
|
238
268
|
const args = (0, values_ts_1.getArgumentValues)(fieldDef, firstNode, variableValues, firstFieldDetails.fragmentVariableValues, hideSuggestions);
|
|
@@ -254,6 +284,21 @@ class Executor {
|
|
|
254
284
|
return null;
|
|
255
285
|
}
|
|
256
286
|
}
|
|
287
|
+
buildResolveContext(args, info, isDefaultResolver) {
|
|
288
|
+
let cachedFieldPath;
|
|
289
|
+
return {
|
|
290
|
+
fieldName: info.fieldName,
|
|
291
|
+
alias: String(info.path.key),
|
|
292
|
+
parentType: info.parentType.name,
|
|
293
|
+
fieldType: String(info.returnType),
|
|
294
|
+
args,
|
|
295
|
+
isDefaultResolver,
|
|
296
|
+
get fieldPath() {
|
|
297
|
+
cachedFieldPath ??= (0, Path_ts_1.pathToArray)(info.path).join('.');
|
|
298
|
+
return cachedFieldPath;
|
|
299
|
+
},
|
|
300
|
+
};
|
|
301
|
+
}
|
|
257
302
|
handleFieldError(rawError, returnType, fieldDetailsList, path) {
|
|
258
303
|
const error = (0, locatedError_ts_1.locatedError)(rawError, toNodes(fieldDetailsList), (0, Path_ts_1.pathToArray)(path));
|
|
259
304
|
if (this.validatedExecutionArgs.errorPropagation &&
|
|
@@ -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 { 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 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 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 );\n if (result === undefined) {\n return results;\n }\n if (isPromise(result)) {\n return result.then((resolved) => {\n results[responseName] = resolved;\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\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 );\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 ): 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 const resolveFn = fieldDef.resolve ?? validatedExecutionArgs.fieldResolver;\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 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"]}
|