| import type { Maybe } from '../jsutils/Maybe'; |
| import type { ObjMap } from '../jsutils/ObjMap'; |
| import type { Path } from '../jsutils/Path'; |
| import type { PromiseOrValue } from '../jsutils/PromiseOrValue'; |
| import type { GraphQLFormattedError } from '../error/GraphQLError'; |
| import { GraphQLError } from '../error/GraphQLError'; |
| import type { |
| DocumentNode, |
| FieldNode, |
| FragmentDefinitionNode, |
| OperationDefinitionNode, |
| } from '../language/ast'; |
| import type { |
| GraphQLField, |
| GraphQLFieldResolver, |
| GraphQLObjectType, |
| GraphQLResolveInfo, |
| GraphQLTypeResolver, |
| } from '../type/definition'; |
| import type { GraphQLSchema } from '../type/schema'; |
| /** |
| * Terminology |
| * |
| * "Definitions" are the generic name for top-level statements in the document. |
| * Examples of this include: |
| * 1) Operations (such as a query) |
| * 2) Fragments |
| * |
| * "Operations" are a generic name for requests in the document. |
| * Examples of this include: |
| * 1) query, |
| * 2) mutation |
| * |
| * "Selections" are the definitions that can appear legally and at |
| * single level of the query. These include: |
| * 1) field references e.g `a` |
| * 2) fragment "spreads" e.g. `...c` |
| * 3) inline fragment "spreads" e.g. `...on Type { a }` |
| */ |
| /** |
| * Data that must be available at all points during query execution. |
| * |
| * Namely, schema of the type system that is currently executing, |
| * and the fragments defined in the query document |
| */ |
| export interface ExecutionContext { |
| schema: GraphQLSchema; |
| fragments: ObjMap<FragmentDefinitionNode>; |
| rootValue: unknown; |
| contextValue: unknown; |
| operation: OperationDefinitionNode; |
| variableValues: { |
| [variable: string]: unknown; |
| }; |
| fieldResolver: GraphQLFieldResolver<any, any>; |
| typeResolver: GraphQLTypeResolver<any, any>; |
| subscribeFieldResolver: GraphQLFieldResolver<any, any>; |
| errors: Array<GraphQLError>; |
| } |
| /** |
| * The result of GraphQL execution. |
| * |
| * - `errors` is included when any errors occurred as a non-empty array. |
| * - `data` is the result of a successful execution of the query. |
| * - `extensions` is reserved for adding non-standard properties. |
| */ |
| export interface ExecutionResult< |
| TData = ObjMap<unknown>, |
| TExtensions = ObjMap<unknown>, |
| > { |
| errors?: ReadonlyArray<GraphQLError>; |
| data?: TData | null; |
| extensions?: TExtensions; |
| } |
| export interface FormattedExecutionResult< |
| TData = ObjMap<unknown>, |
| TExtensions = ObjMap<unknown>, |
| > { |
| errors?: ReadonlyArray<GraphQLFormattedError>; |
| data?: TData | null; |
| extensions?: TExtensions; |
| } |
| export interface ExecutionArgs { |
| schema: GraphQLSchema; |
| document: DocumentNode; |
| rootValue?: unknown; |
| contextValue?: unknown; |
| variableValues?: Maybe<{ |
| readonly [variable: string]: unknown; |
| }>; |
| operationName?: Maybe<string>; |
| fieldResolver?: Maybe<GraphQLFieldResolver<any, any>>; |
| typeResolver?: Maybe<GraphQLTypeResolver<any, any>>; |
| subscribeFieldResolver?: Maybe<GraphQLFieldResolver<any, any>>; |
| } |
| /** |
| * Implements the "Executing requests" section of the GraphQL specification. |
| * |
| * Returns either a synchronous ExecutionResult (if all encountered resolvers |
| * are synchronous), or a Promise of an ExecutionResult that will eventually be |
| * resolved and never rejected. |
| * |
| * If the arguments to this function do not result in a legal execution context, |
| * a GraphQLError will be thrown immediately explaining the invalid input. |
| */ |
| export declare function execute( |
| args: ExecutionArgs, |
| ): PromiseOrValue<ExecutionResult>; |
| /** |
| * Also implements the "Executing requests" section of the GraphQL specification. |
| * However, it guarantees to complete synchronously (or throw an error) assuming |
| * that all field resolvers are also synchronous. |
| */ |
| export declare function executeSync(args: ExecutionArgs): ExecutionResult; |
| /** |
| * Essential assertions before executing to provide developer feedback for |
| * improper use of the GraphQL library. |
| * |
| * @internal |
| */ |
| export declare function assertValidExecutionArguments( |
| schema: GraphQLSchema, |
| document: DocumentNode, |
| rawVariableValues: Maybe<{ |
| readonly [variable: string]: unknown; |
| }>, |
| ): void; |
| /** |
| * Constructs a ExecutionContext object from the arguments passed to |
| * execute, which we will pass throughout the other execution methods. |
| * |
| * Throws a GraphQLError if a valid execution context cannot be created. |
| * |
| * @internal |
| */ |
| export declare function buildExecutionContext( |
| args: ExecutionArgs, |
| ): ReadonlyArray<GraphQLError> | ExecutionContext; |
| /** |
| * @internal |
| */ |
| export declare function buildResolveInfo( |
| exeContext: ExecutionContext, |
| fieldDef: GraphQLField<unknown, unknown>, |
| fieldNodes: ReadonlyArray<FieldNode>, |
| parentType: GraphQLObjectType, |
| path: Path, |
| ): GraphQLResolveInfo; |
| /** |
| * If a resolveType function is not given, then a default resolve behavior is |
| * used which attempts two strategies: |
| * |
| * First, See if the provided value has a `__typename` field defined, if so, use |
| * that value as name of the resolved type. |
| * |
| * Otherwise, test each possible type for the abstract type by calling |
| * isTypeOf for the object being coerced, returning the first type that matches. |
| */ |
| export declare const defaultTypeResolver: GraphQLTypeResolver<unknown, unknown>; |
| /** |
| * If a resolve function is not given, then a default resolve behavior is used |
| * which takes the property of the source object of the same name as the field |
| * and returns it as the result, or if it's a function, returns the result |
| * of calling that function while passing along args and context value. |
| */ |
| export declare const defaultFieldResolver: GraphQLFieldResolver< |
| unknown, |
| unknown |
| >; |
| /** |
| * This method looks up the field on the given type definition. |
| * It has special casing for the three introspection fields, |
| * __schema, __type and __typename. __typename is special because |
| * it can always be queried as a field, even in situations where no |
| * other fields are allowed, like on a Union. __schema and __type |
| * could get automatically added to the query type, but that would |
| * require mutating type definitions, which would cause issues. |
| * |
| * @internal |
| */ |
| export declare function getFieldDef( |
| schema: GraphQLSchema, |
| parentType: GraphQLObjectType, |
| fieldNode: FieldNode, |
| ): Maybe<GraphQLField<unknown, unknown>>; |