UNPKG

bare-stream

Version:
238 lines (187 loc) 5.63 kB
import EventEmitter, { EventMap } from 'bare-events' import Buffer, { BufferEncoding } from 'bare-buffer' type StreamEncoding = BufferEncoding | 'buffer' interface StreamCallback { (err: Error | null): void } interface StreamEvents extends EventMap { close: [] error: [err: Error] } interface StreamOptions<S extends Stream = Stream> { eagerOpen?: boolean signal?: AbortSignal open?(this: S, cb: StreamCallback): void predestroy?(this: S): void destroy?(this: S, err: Error | null, cb: StreamCallback): void } interface Stream<M extends StreamEvents = StreamEvents> extends EventEmitter<M> { _open(cb: StreamCallback): void _predestroy(): void _destroy(err: Error | null, cb: StreamCallback): void readonly readable: boolean readonly writable: boolean readonly destroyed: boolean readonly destroying: boolean destroy(err?: Error | null): void } declare class Stream {} interface ReadableEvents extends StreamEvents { data: [data: unknown] end: [] readable: [] piping: [dest: Writable] } interface ReadableOptions<S extends Readable = Readable> extends StreamOptions<S> { encoding?: BufferEncoding highWaterMark?: number read?(this: S, size: number): void } interface Readable<M extends ReadableEvents = ReadableEvents> extends Stream<M>, AsyncIterable<unknown> { _read(size: number): void push(data: unknown | null, encoding?: BufferEncoding): boolean unshift(data: unknown | null, encoding?: BufferEncoding): boolean read(): unknown | null resume(): this pause(): this pipe<S extends Writable>(dest: S, cb?: StreamCallback): S setEncoding(encoding: BufferEncoding): void } declare class Readable< M extends ReadableEvents = ReadableEvents > extends Stream<M> { constructor(opts?: ReadableOptions) static from( data: unknown | unknown[] | AsyncIterable<unknown>, opts?: ReadableOptions ): Readable static isBackpressured(rs: Readable): boolean static isPaused(rs: Readable): boolean } interface WritableEvents extends StreamEvents { drain: [] finish: [] pipe: [src: Readable] } interface WritableOptions<S extends Writable = Writable> extends StreamOptions<S> { write?( this: S, data: unknown, encoding: StreamEncoding, cb: StreamCallback ): void writev?( this: S, batch: { chunk: unknown; encoding: StreamEncoding }[], cb: StreamCallback ): void final?(this: S, cb: StreamCallback): void } interface Writable<M extends WritableEvents = WritableEvents> extends Stream<M> { _write(data: unknown, encoding: StreamEncoding, cb: StreamCallback): void _writev( batch: { chunk: unknown; encoding: StreamEncoding }[], cb: StreamCallback ): void _final(cb: StreamCallback): void readonly destroyed: boolean write(data: unknown, encoding?: BufferEncoding, cb?: StreamCallback): boolean write(data: unknown, cb?: StreamCallback): boolean end(cb?: StreamCallback): this end(data: unknown, encoding?: BufferEncoding, cb?: StreamCallback): this end(data: unknown, cb?: StreamCallback): this cork(): void uncork(): void } declare class Writable< M extends WritableEvents = WritableEvents > extends Stream<M> { constructor(opts?: WritableOptions) static isBackpressured(ws: Writable): boolean static drained(ws: Writable): Promise<boolean> } interface DuplexEvents extends ReadableEvents, WritableEvents {} interface DuplexOptions<S extends Duplex = Duplex> extends ReadableOptions<S>, WritableOptions<S> {} interface Duplex<M extends DuplexEvents = DuplexEvents> extends Readable<M>, Writable<M> {} declare class Duplex<M extends DuplexEvents = DuplexEvents> extends Stream<M> { constructor(opts?: DuplexOptions) } interface TransformEvents extends DuplexEvents {} interface TransformOptions<S extends Transform = Transform> extends DuplexOptions<S> { transform?( this: S, data: unknown, encoding: StreamEncoding, cb: StreamCallback ): void flush?(this: S, cb: StreamCallback): void } interface Transform<M extends TransformEvents = TransformEvents> extends Duplex<M> { _transform(data: unknown, encoding: StreamEncoding, cb: StreamCallback): void _flush(cb: StreamCallback): void } declare class Transform< M extends TransformEvents = TransformEvents > extends Duplex<M> { constructor(opts?: TransformOptions) } type Pipeline<S extends Writable> = [ src: Readable, ...transforms: Duplex[], dest: S ] declare namespace Stream { export { Stream, StreamEvents, StreamOptions, Readable, ReadableEvents, ReadableOptions, Writable, WritableEvents, WritableOptions, Duplex, DuplexEvents, DuplexOptions, Transform, TransformEvents, TransformOptions, Transform as PassThrough } export function pipeline<S extends Writable>( streams: Pipeline<S>, cb?: StreamCallback ): S export function pipeline<S extends Writable>(...args: Pipeline<S>): S export function pipeline<S extends Writable>( ...args: [...Pipeline<S>, cb: StreamCallback] ): S export function finished( stream: Stream, opts: { cleanup?: boolean }, cb: StreamCallback ): () => void export function finished(stream: Stream, cb: StreamCallback): () => void export function isStream(stream: unknown): stream is Stream export function isEnded(stream: Stream): boolean export function isFinished(stream: Stream): boolean export function isDisturbed(stream: Stream): boolean export function getStreamError( stream: Stream, opts?: { all?: boolean } ): Error | null } export = Stream