sflow
Version:
sflow is a powerful and highly-extensible library designed for processing and manipulating streams of data effortlessly. Inspired by the functional programming paradigm, it provides a rich set of utilities for transforming streams, including chunking, fil
21 lines (18 loc) • 652 B
text/typescript
import type { AsyncOrSync } from "ts-essentials";
/** unwrap promises of readable stream */
export function unpromises<T>(
promise: AsyncOrSync<ReadableStream<T>>,
): ReadableStream<T> {
const tr = new TransformStream<T, T>();
(async () => {
const s = await promise;
await s.pipeTo(tr.writable);
})().catch((error) => tr.writable.abort(error).catch(() => {}));
return tr.readable;
}
/** unwrap promises of readable stream */
export function unpromisesFn<Args extends unknown[], T>(
fn: (...args: Args) => Promise<ReadableStream<T>>,
): (...args: Args) => ReadableStream<T> {
return (...args: Args) => unpromises(fn(...args));
}