///
import * as nodeStream from 'stream';
import { ParallelOptions, Reader } from './reader';
export declare class Writer {
write: (this: Writer, value?: T) => this;
ended: boolean;
constructor(write: (value: T) => void, stop?: (arg?: any) => void);
writeAll(val: T): this;
stop(arg?: any): Writer;
end(): this;
get pre(): Pre;
nodify(): nodeStream.Writable;
get result(): any;
}
export declare function create(write: (value: T) => Writer, stop?: (arg?: any) => Writer): Writer;
export declare class PreImpl {
writer: Writer;
constructor(writer: Writer);
}
export interface Pre extends PreImpl {
map(fn: (elt: U, index?: number) => T): Writer;
tee(writer: Writer): Writer;
concat(readers: Reader[]): Writer;
transform(fn: (reader: Reader, writer: Writer) => void): Writer;
filter(fn: (elt: T, index?: number) => boolean): Writer;
until(fn: (elt: T, index?: number) => boolean): Writer;
while(fn: (elt: T, index?: number) => boolean): Writer;
limit(n: number, stopArg?: any): Writer;
skip(n: number): Writer;
parallel(options: ParallelOptions | number, consumer: (source: any) => Reader): Writer;
buffer(max: number): Writer;
nodeTransform(duplex: nodeStream.Duplex): Writer;
}