|
1 | | -exportinterfaceCacheStorage< |
2 | | -KeyTypeextendsunknown, |
3 | | -ValueTypeextendsunknown |
4 | | ->{ |
5 | | -has(key:KeyType):boolean; |
6 | | -get(key:KeyType):ValueType|undefined; |
7 | | -set(key:KeyType,value:ValueType):void; |
8 | | -delete(key:KeyType):void; |
9 | | -clear?:()=>void; |
10 | | -} |
| 1 | +declarenamespacemem{ |
| 2 | +interfaceCacheStorage<KeyTypeextendsunknown,ValueTypeextendsunknown>{ |
| 3 | +has(key:KeyType):boolean; |
| 4 | +get(key:KeyType):ValueType|undefined; |
| 5 | +set(key:KeyType,value:ValueType):void; |
| 6 | +delete(key:KeyType):void; |
| 7 | +clear?:()=>void; |
| 8 | +} |
11 | 9 |
|
12 | | -exportinterfaceOptions< |
13 | | -ArgumentsTypeextendsunknown[], |
14 | | -CacheKeyTypeextendsunknown, |
15 | | -ReturnTypeextendsunknown |
16 | | ->{ |
17 | | -/** |
18 | | - * Milliseconds until the cache expires. |
19 | | - * |
20 | | - *@default Infinity |
21 | | - */ |
22 | | -readonlymaxAge?:number; |
| 10 | +interfaceOptions< |
| 11 | +ArgumentsTypeextendsunknown[], |
| 12 | +CacheKeyTypeextendsunknown, |
| 13 | +ReturnTypeextendsunknown |
| 14 | +>{ |
| 15 | +/** |
| 16 | +Milliseconds until the cache expires. |
23 | 17 |
|
24 | | -/** |
25 | | - * 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. |
26 | | - * |
27 | | - * You could for example change it to only cache on the first argument `x => JSON.stringify(x)`. |
28 | | - */ |
29 | | -readonlycacheKey?:(...arguments:ArgumentsType)=>CacheKeyType; |
| 18 | +@default Infinity |
| 19 | +*/ |
| 20 | +readonlymaxAge?:number; |
30 | 21 |
|
31 | | -/** |
32 | | - * Use a different cache storage. Must implement the following methods: `.has(key)`, `.get(key)`, `.set(key, value)`, `.delete(key)`, and optionally `.clear()`. You could for example use a `WeakMap` instead or [`quick-lru`](https://github.com/sindresorhus/quick-lru) for a LRU cache. |
33 | | - * |
34 | | - *@default new Map() |
35 | | - */ |
36 | | -readonlycache?:CacheStorage<CacheKeyType,{data:ReturnType;maxAge:number}>; |
| 22 | +/** |
| 23 | +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. |
37 | 24 |
|
38 | | -/** |
39 | | - * Cache rejected promises. |
40 | | - * |
41 | | - *@default false |
42 | | - */ |
43 | | -readonlycachePromiseRejection?:boolean; |
| 25 | +You could for example change it to only cache on the first argument `x => JSON.stringify(x)`. |
| 26 | +*/ |
| 27 | +readonlycacheKey?:(...arguments:ArgumentsType)=>CacheKeyType; |
| 28 | + |
| 29 | +/** |
| 30 | +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. |
| 31 | +
|
| 32 | +@default new Map() |
| 33 | +*/ |
| 34 | +readonlycache?:CacheStorage<CacheKeyType,{data:ReturnType;maxAge:number}>; |
| 35 | + |
| 36 | +/** |
| 37 | +Cache rejected promises. |
| 38 | +
|
| 39 | +@default false |
| 40 | +*/ |
| 41 | +readonlycachePromiseRejection?:boolean; |
| 42 | +} |
44 | 43 | } |
45 | 44 |
|
46 | | -/** |
47 | | - * [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. |
48 | | - * |
49 | | - *@param fn - Function to be memoized. |
50 | | - */ |
51 | 45 | declareconstmem:{ |
| 46 | +/** |
| 47 | +[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. |
| 48 | +
|
| 49 | +@param fn - Function to be memoized. |
| 50 | +
|
| 51 | +@example |
| 52 | +``` |
| 53 | +import mem = require('mem'); |
| 54 | +
|
| 55 | +let i = 0; |
| 56 | +const counter = () => ++i; |
| 57 | +const memoized = mem(counter); |
| 58 | +
|
| 59 | +memoized('foo'); |
| 60 | +//=> 1 |
| 61 | +
|
| 62 | +// Cached as it's the same arguments |
| 63 | +memoized('foo'); |
| 64 | +//=> 1 |
| 65 | +
|
| 66 | +// Not cached anymore as the arguments changed |
| 67 | +memoized('bar'); |
| 68 | +//=> 2 |
| 69 | +
|
| 70 | +memoized('bar'); |
| 71 | +//=> 2 |
| 72 | +``` |
| 73 | +*/ |
52 | 74 | < |
53 | 75 | ArgumentsTypeextendsunknown[], |
54 | 76 | ReturnTypeextendsunknown, |
55 | 77 | CacheKeyTypeextendsunknown |
56 | 78 | >( |
57 | 79 | fn:(...arguments:ArgumentsType)=>ReturnType, |
58 | | -options?:Options<ArgumentsType,CacheKeyType,ReturnType> |
| 80 | +options?:mem.Options<ArgumentsType,CacheKeyType,ReturnType> |
59 | 81 | ):(...arguments:ArgumentsType)=>ReturnType; |
60 | 82 |
|
61 | 83 | /** |
62 | | - *Clear all cached data of a memoized function. |
63 | | - * |
64 | | - *@param fn - Memoized function. |
65 | | -*/ |
| 84 | +Clear all cached data of a memoized function. |
| 85 | +
|
| 86 | +@param fn - Memoized function. |
| 87 | +*/ |
66 | 88 | clear<ArgumentsTypeextendsunknown[],ReturnTypeextendsunknown>( |
67 | 89 | fn:(...arguments:ArgumentsType)=>ReturnType |
68 | 90 | ):void; |
| 91 | + |
| 92 | +// TODO: Remove this for the next major release |
| 93 | +default:typeofmem; |
69 | 94 | }; |
70 | 95 |
|
71 | | -exportdefaultmem; |
| 96 | +export=mem; |