import type { DocumentNode, ExecutionResult } from 'graphql'; import type { GraphQLOperation, KeyValueCache, Logger, MeshFetch, MeshHandler, MeshMerger, MeshPlugin, MeshPubSub, MeshTransform, YamlConfig } from '@graphql-mesh/types'; import type { TerminateHandler } from '@graphql-mesh/utils'; import type { IResolvers, MaybeAsyncIterable, MaybePromise, Source } from '@graphql-tools/utils'; import type { MESH_CONTEXT_SYMBOL } from './constants.cjs'; import type { MeshInstance } from './get-mesh.cjs'; export type GetMeshOptions = { sources: MeshResolvedSource[]; transforms?: MeshTransform[]; additionalTypeDefs?: DocumentNode[]; additionalResolvers?: IResolvers | IResolvers[]; cache: KeyValueCache; pubsub?: MeshPubSub; merger: MeshMerger; logger?: Logger; additionalEnvelopPlugins?: MeshPlugin[]; documents?: Source[]; fetchFn?: MeshFetch; }; export type MeshResolvedSource = { name: string; handler: MeshHandler; transforms?: MeshTransform[]; }; export type ExecuteMeshFn = (document: GraphQLOperation, variables?: TVariables, context?: TContext, rootValue?: TRootValue, operationName?: string) => MaybePromise>; export type SubscribeMeshFn = (document: GraphQLOperation, variables?: TVariables, context?: TContext, rootValue?: TRootValue, operationName?: string) => MaybePromise>>; export type MeshContext = { [MESH_CONTEXT_SYMBOL]: true; } & { pubsub: MeshPubSub; cache: KeyValueCache; logger: Logger; fetch: MeshFetch; }; export interface ServeMeshOptions { baseDir: string; getBuiltMesh: () => Promise; logger: Logger; rawServeConfig: YamlConfig.Config['serve']; argsPort?: number; playgroundTitle?: string; registerTerminateHandler(handler: TerminateHandler): void; } export type MeshExecutor = (documentOrSDL: GraphQLOperation, variables?: TVariables, context?: TContext, rootValue?: TRootValue, operationName?: string) => Promise>;