0.0.20 • Published 10 months ago

keyv-cached-with v0.0.20

Weekly downloads
-
License
MIT
Repository
github
Last release
10 months ago

keyv-cached-with

HOF(High order function) to cache a function with keyv

Usage

import Keyv from "keyv";
import { KeyvCachedWith } from "keyv-cached-with";

it("works in full-args call", async () => {
  let i = 0;
  const kv = new Keyv();
  const fn1 = KeyvCachedWith(kv, async (a: number) => `${a}/${++i}`) satisfies (
    a: number
  ) => Promise<string>;
  expect(await fn1(1)).toBe("1/1");
  expect(await fn1(5)).toBe("5/2");
  expect(await fn1(1)).toBe("1/1");

  const fn2 = KeyvCachedWith(kv, async (a: number) => `${a}/${++i}`);
  expect(await fn2(1)).toBe("1/1");
  expect(await fn2(5)).toBe("5/2");
  expect(await fn2(1)).toBe("1/1");
});

it("works with curry", async () => {
  const CachedWith = KeyvCachedWith(new Keyv());
  let i = 0;

  const fn2 = CachedWith((a: number) => `${a}/${++i}`) satisfies (
    a: number
  ) => Promise<string>;
  expect(await fn2(2)).toBe("2/1");
  expect(await fn2(5)).toBe("5/2");
  expect(await fn2(2)).toBe("2/1"); // use cache

  // fn3's content is same with fn2
  const fn3 = CachedWith((a: number) => `${a}/${++i}`) satisfies (
    a: number
  ) => Promise<string>;
  expect(await fn3(2)).toBe("2/1"); // use cache
  expect(await fn3(5)).toBe("5/2"); // use cache
  expect(await fn3(6)).toBe("6/3"); // eval

  // fn4's content is different
  const fn4 = CachedWith((a: number) => `${a}/${++i}` + "".trim());
  expect(await fn4(2)).toBe("2/4"); // use cache
  expect(await fn4(5)).toBe("5/5");
  expect(await fn4(2)).toBe("2/4"); // use cache
});
0.0.20

10 months ago

0.0.19

10 months ago

0.0.18

11 months ago

0.0.17

11 months ago

0.0.16

11 months ago

0.0.15

12 months ago

0.0.14

12 months ago

0.0.13

12 months ago

0.0.12

1 year ago

0.0.11

1 year ago

0.0.10

1 year ago

0.0.9

1 year ago

0.0.8

1 year ago

0.0.6

1 year ago

0.0.5

1 year ago

0.0.4

1 year ago

0.0.3

1 year ago

0.0.2

1 year ago