@chriscdn/memoize
v1.0.2
Published
Memoize a synchronous or asynchronous function.
Downloads
208
Readme
@chriscdn/memoize
Memoize a synchronous or asynchronous function.
Installing
Using npm:
npm install @chriscdn/memoize
Using yarn:
yarn add @chriscdn/memoize
Usage
The package comes with two functions: Memoize
and MemoizeAsync
.
import { Memoize, MemoizeAsync } from "@chriscdn/memoize";
The Memoize
function can be used to memoize a synchronous function. The MemoizeAsync
function can be used to memoize an asynchronous function. The cache is based quick-lru.
Each call to Memoize
or MemoizeAsync
will create a new cache instance.
The MemoizeAsync
function prevents duplicate evaluations by ensuring multiple calls with an identical cache key is only processed once.
By default, the cache key is generated by calling JSON.stringify()
on the function arguments. This can be customized (see below).
Example (synchronous)
To memoize a function:
const _add = (x: number, y: number) => x + y;
const add = Memoize(_add);
The add
function has the same interface as _add
:
const result = add(5, 7);
// 12
Example (asynchronous)
The asynchronous case is similar:
const _add = async (x: number, y: number) => x + y;
const add = MemoizeAsync(_add);
const result = await add(5, 7);
// 12
Options
The Memoize
and MemoizeAsync
functions accept an Options
parameter to control the behaviour of the cache.
const add = MemoizeAsync(_add, options);
The available options are as follows, with their defaults:
const options = {
// maximum number of items in the cache
maxSize: 1000,
// maximum number of milliseconds an item is to remain in the cache, undefined implies forever
maxAge: undefined,
// a synchronous function for generating a cache key (must return a String)
resolver: (...args) => JSON.stringify(args),
};
Tests
yarn test