(fn: F)
| 16 | } |
| 17 | |
| 18 | export function memoize2<F extends (a1: any, a2: any) => any>(fn: F): F { |
| 19 | const memoize2cache: WeakMap< |
| 20 | Record<string, any>, |
| 21 | WeakMap<Record<string, any>, any> |
| 22 | > = new WeakMap(); |
| 23 | return function memoized(a1: any, a2: any): any { |
| 24 | let cache2 = memoize2cache.get(a1); |
| 25 | if (!cache2) { |
| 26 | cache2 = new WeakMap(); |
| 27 | memoize2cache.set(a1, cache2); |
| 28 | const newValue = fn(a1, a2); |
| 29 | cache2.set(a2, newValue); |
| 30 | return newValue; |
| 31 | } |
| 32 | |
| 33 | const cachedValue = cache2.get(a2); |
| 34 | if (cachedValue === undefined) { |
| 35 | const newValue = fn(a1, a2); |
| 36 | cache2.set(a2, newValue); |
| 37 | return newValue; |
| 38 | } |
| 39 | |
| 40 | return cachedValue; |
| 41 | } as F; |
| 42 | } |
| 43 | |
| 44 | export function memoize3<F extends (a1: any, a2: any, a3: any) => any>(fn: F): F { |
| 45 | const memoize3Cache: WeakMap< |
no test coverage detected
searching dependent graphs…