import { AsyncOperation, SyncOperation } from "../operations/operation"; import { MinusOne, LastIndex } from "./util-types"; export interface InputFunction { (input: T): O; } type InputOperation = AsyncOperation | SyncOperation | InputFunction; export type InputOperationsArray = [InputOperation, ...InputOperation[]]; type OperationReturnType = V extends Iterable ? Z extends Promise ? K : Z : V extends AsyncIterable ? Z : never; export type DirectOperationsArray = O extends InputOperationsArray ? O : never; export type TypedOperationsArray = O & ({ [P in keyof O]: P extends 0 ? O[P] : P extends number ? SyncOperation]>, OperationReturnType> | AsyncOperation]>, OperationReturnType> : O[P]; }[keyof O]); export type OperationsInputType = [ Operations[0] ] extends DirectOperationsArray<[Operations[0]], infer T> ? T : (AsyncIterable | Iterable); export interface IterablePromise extends Iterable, AsyncIterable { then: PromiseLike>["then"]; } export interface IterableEngineAbortSignal { aborted: boolean; } export interface IterableEngineContext { operation?: OIndex extends number ? DirectOperationsArray[OIndex] : never; index?: OIndex; signal?: IterableEngineAbortSignal; operations: Operations; concat(...operations: unknown[]): IterableEngineContext; asyncIterable(input: OperationsInputType): AsyncIterable]>>; iterable(input: OperationsInputType): Iterable]>>; contexts(): Iterable>; instance(input: OperationsInputType): IterablePromise]>; } export declare function createIterableEngineContext, Operations extends InputOperationsArray>(...operations: Operations): IterableEngineContext; export declare function getNextIterableEngineContext>(context: C): IterableEngineContext; declare class IterableError extends Error { } export declare class UnknownReturnedIterableError extends IterableError { value?: unknown; constructor(value?: unknown); } export declare function iterateAsync>(context: IterableEngineContext | CallableIterableEngineContext, input: AsyncIterable | Iterable): AsyncIterable]>>; export declare function iterate>(context: IterableEngineContext, input: AsyncIterable | Iterable): Iterable]>>; type CallableIterableEngineContext = IterableEngineContext<[InputFunction | Iterable>, ...InputFunction | Iterable>[]], number>; export declare function isIterableEngineContext(context: unknown): context is IterableEngineContext; export {};