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
27 lines (24 loc) • 713 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.readable.cancel(error).catch(() => {
throw error;
});
})
.then();
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));
}