You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
96 lines
2.5 KiB
96 lines
2.5 KiB
declare namespace mem { |
|
interface CacheStorage<KeyType extends unknown, ValueType extends unknown> { |
|
has(key: KeyType): boolean; |
|
get(key: KeyType): ValueType | undefined; |
|
set(key: KeyType, value: ValueType): void; |
|
delete(key: KeyType): void; |
|
clear?: () => void; |
|
} |
|
|
|
interface Options< |
|
ArgumentsType extends unknown[], |
|
CacheKeyType extends unknown, |
|
ReturnType extends unknown |
|
> { |
|
/** |
|
Milliseconds until the cache expires. |
|
|
|
@default Infinity |
|
*/ |
|
readonly maxAge?: number; |
|
|
|
/** |
|
Determines the cache key for storing the result based on the function arguments. By default, if there's only one argument and it's a [primitive](https://developer.mozilla.org/en-US/docs/Glossary/Primitive), it's used directly as a key, otherwise it's all the function arguments JSON stringified as an array. |
|
|
|
You could for example change it to only cache on the first argument `x => JSON.stringify(x)`. |
|
*/ |
|
readonly cacheKey?: (...arguments: ArgumentsType) => CacheKeyType; |
|
|
|
/** |
|
Use a different cache storage. You could for example use a `WeakMap` instead or [`quick-lru`](https://github.com/sindresorhus/quick-lru) for a LRU cache. |
|
|
|
@default new Map() |
|
*/ |
|
readonly cache?: CacheStorage<CacheKeyType, {data: ReturnType; maxAge: number}>; |
|
|
|
/** |
|
Cache rejected promises. |
|
|
|
@default false |
|
*/ |
|
readonly cachePromiseRejection?: boolean; |
|
} |
|
} |
|
|
|
declare const mem: { |
|
/** |
|
[Memoize](https://en.wikipedia.org/wiki/Memoization) functions - An optimization used to speed up consecutive function calls by caching the result of calls with identical input. |
|
|
|
@param fn - Function to be memoized. |
|
|
|
@example |
|
``` |
|
import mem = require('mem'); |
|
|
|
let i = 0; |
|
const counter = () => ++i; |
|
const memoized = mem(counter); |
|
|
|
memoized('foo'); |
|
//=> 1 |
|
|
|
// Cached as it's the same arguments |
|
memoized('foo'); |
|
//=> 1 |
|
|
|
// Not cached anymore as the arguments changed |
|
memoized('bar'); |
|
//=> 2 |
|
|
|
memoized('bar'); |
|
//=> 2 |
|
``` |
|
*/ |
|
< |
|
ArgumentsType extends unknown[], |
|
ReturnType extends unknown, |
|
CacheKeyType extends unknown |
|
>( |
|
fn: (...arguments: ArgumentsType) => ReturnType, |
|
options?: mem.Options<ArgumentsType, CacheKeyType, ReturnType> |
|
): (...arguments: ArgumentsType) => ReturnType; |
|
|
|
/** |
|
Clear all cached data of a memoized function. |
|
|
|
@param fn - Memoized function. |
|
*/ |
|
clear<ArgumentsType extends unknown[], ReturnType extends unknown>( |
|
fn: (...arguments: ArgumentsType) => ReturnType |
|
): void; |
|
|
|
// TODO: Remove this for the next major release |
|
default: typeof mem; |
|
}; |
|
|
|
export = mem;
|
|
|