UNPKG

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

19 lines (17 loc) 818 B
import type { AsyncOrSync } from "ts-essentials"; import { unpromises } from "./unpromises"; export function bys<T>(stream?: TransformStream<T, T>): TransformStream<T, T>; export function bys<T, R>(stream: TransformStream<T, R>): TransformStream<T, R>; export function bys<T, R>( fn: (s: ReadableStream<T>) => AsyncOrSync<ReadableStream<R>>, ): TransformStream<T, R>; export function bys(arg: unknown): ReadableWritablePair<unknown, unknown> { if (!arg) return new TransformStream(); if (typeof arg !== "function") return bys((s) => s.pipeThrough(arg as TransformStream<unknown, unknown>)); const fn = arg as ( s: ReadableStream<unknown>, ) => AsyncOrSync<ReadableStream<unknown>>; const { writable, readable } = new TransformStream(); return { writable, readable: unpromises(fn(readable)) }; }