@stream-toolbox/tunnel
Version:
Forward data bidirectionally between two duplexes, like `a.pipe(b).pipe(a)`, but with better handling for various cases.
18 lines (17 loc) • 796 B
TypeScript
/// <reference types="node" />
import { Duplex, Readable, Writable } from "stream";
interface TunnelError extends Error {
readonly causedBy: Duplex | Readable | Writable;
}
type DuplexLike = {
rs: Readable;
ws: Writable;
allowHalfOpen?: boolean;
allowPipeHalfOpen?: boolean;
};
type callback = (err: TunnelError | null, time: number) => void;
declare function tunnel(a: Duplex | DuplexLike, b: Duplex | DuplexLike): Promise<number>;
declare function tunnel(a: Duplex | DuplexLike, b: Duplex | DuplexLike, condition: number): Promise<number>;
declare function tunnel(a: Duplex | DuplexLike, b: Duplex | DuplexLike, callback: callback): void;
declare function tunnel(a: Duplex | DuplexLike, b: Duplex | DuplexLike, condition: number, callback: callback): void;
export = tunnel;