memo/readme.md
James Brumond 5eaa11f842
All checks were successful
Build and test / build-and-test (18.x) (push) Successful in 12s
Build and test / build-and-test (20.x) (push) Successful in 14s
cleanup
2023-08-26 16:02:56 -07:00

85 lines
1.2 KiB
Markdown

In-memory caching/memoization utilities
---
## Install
```bash
npm install --save @js/memo
```
## Usage
```ts
import { memo } from '@js/memo';
function get_data_from_slow_source(name: string) : string {
// ....
}
const get_data_cached = memo({
func: get_data_from_slow_source,
ttl: 30_000,
});
```
### Custom cache key generation
```ts
import { memo } from '@js/memo';
interface SomeObject {
id: string;
foo: string;
bar: number;
baz: {
qux: string;
};
}
function get_data_from_slow_source(obj: SomeObject) : string {
// ....
}
const get_data_cached = memo({
func: get_data_from_slow_source,
ttl: 30_000,
// Pull just the `id` field from the first parameter to use
// as the cache key
key([ obj ]) {
return obj.id;
},
});
```
### Simple functions with no params
```ts
import { memo_simple } from '@js/memo';
function get_data_from_slow_source() : string {
// ....
}
const get_data_cached = memo_simple(30_000, get_data_from_slow_source);
```
### Full async example
```ts
import { memo_async } from '@js/memo';
async function get_data_from_slow_source(name: string) : Promise<string> {
// ....
}
const get_data_cached = memo_async({
func: get_data_from_slow_source,
ttl: 30_000,
stale_ttl: 5_000,
promise_ttl: 5_000,
});
```