import { ReadableStream, ReadableStreamDefaultReader, WritableStream, TransformStream, IChunkReadResult } from "./std"; export function readAllChunks({ readable, writable }: TransformStream): Promise; export function readAllChunks(readable: ReadableStream): Promise; export function readAllChunks(value: any): Promise { let readable: ReadableStream = (>value).readable || value as ReadableStream; return new Promise((resolve, reject) => { const result = []; readable.pipeTo(new WritableStream({ write(chunk) { result.push(chunk); } })).then(resolve.bind(this, result)).catch(reject); }); } export function readOneChunk({ readable, writable }: TransformStream): Promise>; export function readOneChunk(readable: ReadableStream): Promise>; export async function readOneChunk(value: any): Promise> { let readable: ReadableStream = (>value).readable || value as ReadableStream; return await readable.getReader().read(); } /** * await pump(stream, this.onChunk) */ export const pump = async (reader: ReadableStreamDefaultReader, each: (value: any) => any, eachError?: (error: any) => boolean|void) => { if (!eachError) { eachError = () => false } let value, done; return new Promise((resolve, reject) => { const next = () => { reader.read().then(({ value, done }) => { if (done) { resolve(); } else { each(value); next(); } }, (error) => { if (eachError(error) === false) return reject(error); next(); }); }; next(); }) }