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
56 lines (51 loc) • 1.56 kB
text/typescript
import { it, expect } from "bun:test";
import { portals } from "./portals";
import { sflow } from "./sflow";
it("portals with no arg returns passthrough", async () => {
const ts = portals<number>();
const writer = ts.writable.getWriter();
writer.write(1);
writer.write(2);
writer.close();
const result = await sflow(ts.readable).toArray();
expect(result).toEqual([1, 2]);
});
it("portals with TransformStream pipes through it", async () => {
const doubler = new TransformStream<number, number>({
transform(chunk, ctrl) {
ctrl.enqueue(chunk * 2);
},
});
const ts = portals(doubler);
const writer = ts.writable.getWriter();
writer.write(3);
writer.write(4);
writer.close();
const result = await sflow(ts.readable).toArray();
expect(result).toEqual([6, 8]);
});
it("portals with function applies it to the readable", async () => {
const ts = portals<number>((s) => {
const t = new TransformStream<number, number>({
transform(chunk, ctrl) {
ctrl.enqueue(chunk + 10);
},
});
return s.pipeThrough(t);
});
const writer = ts.writable.getWriter();
writer.write(1);
writer.write(2);
writer.close();
const result = await sflow(ts.readable).toArray();
expect(result).toEqual([11, 12]);
});
it("works via sflow portal method", async () => {
const doubler = new TransformStream<number, number>({
transform(chunk, ctrl) {
ctrl.enqueue(chunk * 3);
},
});
const result = await sflow([1, 2, 3]).portal(doubler).toArray();
expect(result).toEqual([3, 6, 9]);
});