import { RingBuffer } from '../util/ring_buffer'; export declare function streamFromItems(items: T[]): DataStream; export declare function streamFromIncrementing(start: number): DataStream; export declare function streamFromFunction(func: () => IteratorResult | Promise>): DataStream; export declare function streamFromConcatenated(baseStreams: DataStream>): DataStream; export declare function streamFromConcatenatedFunction(streamFunc: () => IteratorResult>, count: number): DataStream; export declare abstract class DataStream { abstract next(): Promise>; collectRemaining(): Promise; resolveFully(): Promise; filter(predicate: (value: T) => boolean): DataStream; map(transform: (value: T) => O): DataStream; forEach(f: (value: T) => void): Promise; batch(batchSize: number, smallLastBatch?: boolean): DataStream; concatenate(stream: DataStream): DataStream; take(count: number): DataStream; skip(count: number): DataStream; prefetch(bufferSize: number): DataStream; shuffle(windowSize: number, seed?: string): DataStream; } export declare abstract class QueueStream extends DataStream { protected outputQueue: RingBuffer; constructor(); protected abstract pump(): Promise; next(): Promise>; } export declare class ChainedStream extends DataStream { private stream; private moreStreams; private lastRead; static create(streams: DataStream>): ChainedStream; next(): Promise>; private readFromChain(lastRead); } export declare class PrefetchStream extends DataStream { protected upstream: DataStream; protected bufferSize: number; protected buffer: RingBuffer>>; total: number; constructor(upstream: DataStream, bufferSize: number); protected refill(): void; next(): Promise>; } export declare class ShuffleStream extends PrefetchStream { protected upstream: DataStream; protected windowSize: number; private random; private upstreamExhausted; constructor(upstream: DataStream, windowSize: number, seed?: string); private randomInt(max); protected chooseIndex(): number; next(): Promise>; }