import type { AbstractConstructorLike } from "@rickosborne/typical"; export type Optional = { value: T; } | undefined; export type IteratorTransformerMore = () => Optional; /** * Basic queues and statistic tracking for a dual-queued Iterator transformer. */ export declare abstract class IteratorTransformerBase { private _inputCount; private _inputDone; private _maxInputsLength; private _maxOutputsLength; private _outputCount; private _outputDone; private readonly inputQueue; private readonly outputQueue; get inputCount(): number; get inputIsDone(): boolean; get inputQueueLength(): number; protected get inputs(): InputT[]; get maxInputsLength(): number; get maxOutputsLength(): number; get outputCount(): number; get outputIsDone(): boolean; get outputQueueLength(): number; protected pushInput(input: InputT): void; protected pushOutputs(items: OutputT[]): void; protected setInputDone(): void; protected setOutputDone(): void; protected takeInputs(count: number): InputT[]; protected takeOutput(): Optional; } export type SyncIteratorTransformerConstructor = AbstractConstructorLike<[iterator: Iterator], IteratorTransformer>; export interface IteratorTransformerMapResult { inputsProcessed: number; outputs: OutputT[]; } export declare abstract class IteratorTransformer extends IteratorTransformerBase implements IterableIterator { private readonly inputIterator; constructor(iterator: Iterator); protected abstract map(inputs: readonly InputT[], inputDone: boolean): IteratorTransformerMapResult; next(): IteratorResult; private nextInput; [Symbol.iterator](): IterableIterator; } export declare const iteratorTransformer: (map: (inputs: InputT[], inputIsDone: boolean) => IteratorTransformerMapResult) => (it: Iterator | Iterable) => IteratorTransformer; export type AsyncIteratorTransformerConstructor = AbstractConstructorLike<[iterator: AsyncIterator], AsyncIteratorTransformer>; /** * Additional configuration for an asynchronous Iterator transformer. */ export interface AsyncIteratorTransformerOptions { /** * If true, will call `next`, without blocking, on the Input Iterator as its * own `next` sends out an Output. In some cases, this could improve latency between * input and output calls. In cases where there are more outputs than inputs, * this could chew up memory. */ proactive?: boolean; } export declare abstract class AsyncIteratorTransformer extends IteratorTransformerBase implements AsyncIterableIterator { private readonly inputIterator; private nextInputPromise; private readonly proactive; constructor(iterator: AsyncIterator, options?: AsyncIteratorTransformerOptions); protected abstract map(inputs: InputT[], inputDone: boolean): IteratorTransformerMapResult | Promise>; next(): Promise>; private nextInput; [Symbol.asyncIterator](): AsyncIterableIterator; } export declare const asyncIteratorTransformer: (map: (inputs: InputT[], inputIsDone: boolean) => IteratorTransformerMapResult | Promise>, options?: AsyncIteratorTransformerOptions) => (it: AsyncIterator | AsyncIterable | Iterable) => AsyncIteratorTransformer; export type IteratorTransformerConstructor = SyncIteratorTransformerConstructor | AsyncIteratorTransformerConstructor; //# sourceMappingURL=iterator-transformer.d.ts.map