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
text/typescript
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]);
});