import { ExecutionRequest, ExecutionResult } from './Interfaces.js'; export type MaybePromise = PromiseLike | T; export type MaybeAsyncIterable = AsyncIterable | T; export type AsyncExecutor, TBaseExtensions = Record> = = Record, TContext extends TBaseContext = TBaseContext, TRoot = any, TExtensions extends TBaseExtensions = TBaseExtensions>(request: ExecutionRequest) => Promise>>; export type SyncExecutor, TBaseExtensions = Record> = = Record, TContext extends TBaseContext = TBaseContext, TRoot = any, TExtensions extends TBaseExtensions = TBaseExtensions>(request: ExecutionRequest) => ExecutionResult; export type Executor, TBaseExtensions = Record> = = Record, TContext extends TBaseContext = TBaseContext, TRoot = any, TExtensions extends TBaseExtensions = TBaseExtensions>(request: ExecutionRequest) => MaybePromise>>; export type DisposableSyncExecutor, TBaseExtensions = Record> = SyncExecutor & { [Symbol.dispose]: () => void; }; export type DisposableAsyncExecutor, TBaseExtensions = Record> = AsyncExecutor & { [Symbol.asyncDispose]: () => PromiseLike; }; export type DisposableExecutor, TBaseExtensions = Record> = DisposableSyncExecutor | DisposableAsyncExecutor;