UNPKG

732 BJavaScriptView Raw
1/**
2 * Memoizes the provided three-argument function.
3 */
4export default function memoize3(fn) {
5 var cache0;
6
7 function memoized(a1, a2, a3) {
8 if (!cache0) {
9 cache0 = new WeakMap();
10 }
11
12 var cache1 = cache0.get(a1);
13 var cache2;
14
15 if (cache1) {
16 cache2 = cache1.get(a2);
17
18 if (cache2) {
19 var cachedValue = cache2.get(a3);
20
21 if (cachedValue !== undefined) {
22 return cachedValue;
23 }
24 }
25 } else {
26 cache1 = new WeakMap();
27 cache0.set(a1, cache1);
28 }
29
30 if (!cache2) {
31 cache2 = new WeakMap();
32 cache1.set(a2, cache2);
33 }
34
35 var newValue = fn(a1, a2, a3);
36 cache2.set(a3, newValue);
37 return newValue;
38 }
39
40 return memoized;
41}