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

65 lines (62 loc) 1.78 kB
import Keyv from "keyv"; import { cacheSkips } from "./cacheSkips"; import { sflow } from "./sf"; it("works", async () => { const kv = new Keyv<any>({ ttl: 10e3 }); expect(await sflow([4, 3, 2, 1]).by(cacheSkips(kv, "test")).toArray()).toEqual([ 4, 3, 2, 1, ]); expect( await sflow([5, 4, 3, 2, 1]).by(cacheSkips(kv, "test")).toArray() ).toEqual([5]); }); it("works on obj", async () => { const kv = new Keyv<any>({ ttl: 10e3 }); expect( await sflow([4, 3, 2, 1]) .map((e) => ({ e })) .by(cacheSkips(kv, "test")) .map(({ e }) => e) .toArray() ).toEqual([4, 3, 2, 1]); expect( await sflow([5, 4, 3, 2, 1]) .map((e) => ({ e })) .by(cacheSkips(kv, "test")) .map(({ e }) => e) .toArray() ).toEqual([5]); expect( await sflow([6, 5, 4, 3, 2, 1]) .map((e) => ({ e })) .by(cacheSkips(kv, "test")) .map(({ e }) => e) .toArray() ).toEqual([6]); }); it("works on Date", async () => { const kv = new Keyv<any>({ ttl: 10e3 }); expect( await sflow([4, 3, 2, 1]) .map((e) => ({ date: new Date(e) })) .by(cacheSkips(kv, "test")) .map(({ date }) => +date) .toArray() ).toEqual([4, 3, 2, 1]); expect(await kv.get("test")).toEqual([{ date: new Date(4).toISOString() }]); expect( await sflow([6, 5, 4, 3, 2, 1]) .map((e) => ({ date: new Date(e) })) .by(cacheSkips(kv, "test")) .map(({ date }) => +date) .toArray() ).toEqual([6, 5]); expect(await kv.get("test")).toEqual([{ date: new Date(6).toISOString() }]); expect( await sflow([8, 7, 6, 5, 4, 3, 2, 1]) .map((e) => ({ date: new Date(e) })) .by(cacheSkips(kv, "test")) .map(({ date }) => +date) .toArray() ).toEqual([8, 7]); });