/** * Memoizes the provided three-argument function. */ export default function memoize3(fn) { var cache0; function memoized(a1, a2, a3) { if (!cache0) { cache0 = new WeakMap(); } var cache1 = cache0.get(a1); var cache2; if (cache1) { cache2 = cache1.get(a2); if (cache2) { var cachedValue = cache2.get(a3); if (cachedValue !== undefined) { return cachedValue; } } } else { cache1 = new WeakMap(); cache0.set(a1, cache1); } if (!cache2) { cache2 = new WeakMap(); cache1.set(a2, cache2); } var newValue = fn(a1, a2, a3); cache2.set(a3, newValue); return newValue; } return memoized; }