From 90db1ce77b35ceba66fb5720624a29b56d0bdae5 Mon Sep 17 00:00:00 2001 From: Ivan Goncharov Date: Sat, 13 Mar 2021 19:15:30 +0200 Subject: [PATCH] Simplified memoize3 and improve type checking --- src/jsutils/memoize3.js | 29 ++++++++++++++--------------- 1 file changed, 14 insertions(+), 15 deletions(-) diff --git a/src/jsutils/memoize3.js b/src/jsutils/memoize3.js index 406deddc15..c8b1938a63 100644 --- a/src/jsutils/memoize3.js +++ b/src/jsutils/memoize3.js @@ -10,29 +10,28 @@ export function memoize3< let cache0; return function memoized(a1, a2, a3) { - if (!cache0) { + if (cache0 === undefined) { cache0 = new WeakMap(); } + let cache1 = cache0.get(a1); - let cache2; - if (cache1) { - cache2 = cache1.get(a2); - if (cache2) { - const cachedValue = cache2.get(a3); - if (cachedValue !== undefined) { - return cachedValue; - } - } - } else { + if (cache1 === undefined) { cache1 = new WeakMap(); cache0.set(a1, cache1); } - if (!cache2) { + + let cache2 = cache1.get(a2); + if (cache2 === undefined) { cache2 = new WeakMap(); cache1.set(a2, cache2); } - const newValue = fn(a1, a2, a3); - cache2.set(a3, newValue); - return newValue; + + let fnResult = cache2.get(a3); + if (fnResult === undefined) { + fnResult = fn(a1, a2, a3); + cache2.set(a3, fnResult); + } + + return fnResult; }; }