///
import * as nodeStream from 'stream';
import { Writer } from './writer';
export interface ParallelOptions {
count?: number;
shuffle?: boolean;
}
export interface CompareOptions {
compare?: (v1: T, v2: T) => number;
}
export interface Stoppable {
stop: (arg?: any) => void;
}
export declare class Reader {
parent?: Stoppable;
read: (this: Reader) => T | undefined;
_stop: (this: Reader, arg?: any) => void;
stopped: boolean;
headers: {
[name: string]: string;
};
constructor(read: () => T | undefined, stop?: (arg: any) => void, parent?: Stoppable);
forEach(fn: (value: T, index: number) => void): void;
map(fn: (value: T, index: number) => U): Reader;
every(fn: ((value: T) => boolean) | {}): boolean;
find(fn: ((value: T) => boolean) | {}): T | undefined;
some(fn: ((value: T) => boolean) | {}): boolean;
reduce(fn: (prev: U, value: T) => U, v: U): U;
pipe(writer: Writer): any;
tee(writer: Writer): Reader;
dup(): [Reader, Reader];
concat(...readers: (Reader | Reader[])[]): Reader;
toArray(): T[];
readAll(): string | Buffer | T[] | undefined;
transform(fn: (reader: Reader, writer: Writer) => void): Reader;
filter(fn: ((value: T, index: number) => boolean) | {}): Reader;
until(fn: ((value: T, index: number) => boolean) | {}, stopArg?: any): Reader;
while(fn: ((value: T, index: number) => boolean) | {}, stopArg?: any): Reader;
limit(n: number, stopArg?: any): Reader;
skip(n: number): Reader;
fork(consumers: ((source: any) => Reader)[]): StreamGroup;
parallel(options: ParallelOptions | number, consumer: (source: any) => Reader): Reader;
peekable(): PeekableReader;
buffer(max: number): Reader;
join(streams: Reader[] | Reader): Reader;
nodify(): any;
nodeTransform(duplex: nodeStream.Duplex): Reader;
compare(other: Reader, options?: CompareOptions): number;
stop(arg?: any): void;
[Symbol.iterator](): Iterator;
}
export declare class PeekableReader extends Reader {
buffered: (T | undefined)[];
constructor(parent: Reader);
unread(val: T | undefined): this;
peek(): T | undefined;
}
export declare function create(read: () => T, stop?: (arg: any) => void): Reader;
export declare class StreamGroup implements Stoppable {
readers: (Reader | null)[];
constructor(readers: Reader[]);
stop(arg?: any): void;
dequeue(): Reader;
rr(): Reader;
join(fn: (values: (T | undefined)[]) => T | undefined): Reader;
}