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

40 lines (37 loc) 1.43 kB
import type { Awaitable } from "./Awaitable"; export type ChunkTransformer<T> = ( chunks: T[], ctrl: TransformStreamDefaultController<T>, ) => Awaitable<T[]>; /** * Creates a TransformStream that processes chunks using provided transformers. * * @template T - The type of chunk that the TransformStream will process. * * @param {Object} options - The options object containing transformer functions. * @param {ChunkTransformer<T>} [options.start] - The transformer function to run when the stream is started. * @param {ChunkTransformer<T>} [options.transform] - The transformer function to run for each chunk, current chunk will be the last element. * @param {ChunkTransformer<T>} [options.flush] - The transformer function to run when the stream is flushed. * * @returns A new TransformStream that applies the provided transformers. */ export function chunkTransforms<T>(options: { start?: ChunkTransformer<T>; transform?: ChunkTransformer<T>; flush?: ChunkTransformer<T>; }) { let chunks: T[] = []; const { start, transform, flush } = options; return new TransformStream<T, T>({ start: async (ctrl) => { if (start) chunks = await start(chunks, ctrl); }, transform: async (chunk, ctrl) => { chunks.push(chunk); if (transform) chunks = await transform(chunks, ctrl); }, flush: async (ctrl) => { if (flush) chunks = await flush(chunks, ctrl); }, }); }