From a53cec3fed933848f7c1368a1549c693f41cc31f Mon Sep 17 00:00:00 2001 From: Federico Brigante Date: Tue, 21 May 2019 20:56:34 +0800 Subject: [PATCH 1/4] Cleanup - avoid repeating `options.` - inline `setData` function - avoid `mapAgeCleaner` wrapper --- index.js | 45 +++++++++++++++++++-------------------------- 1 file changed, 19 insertions(+), 26 deletions(-) diff --git a/index.js b/index.js index e4d5c97..94fe869 100644 --- a/index.js +++ b/index.js @@ -22,41 +22,34 @@ const defaultCacheKey = (...arguments_) => { return JSON.stringify(arguments_); }; -const mem = (fn, options) => { - options = { - cacheKey: defaultCacheKey, - cache: new Map(), - cachePromiseRejection: true, - ...options - }; - - if (typeof options.maxAge === 'number') { - mapAgeCleaner(options.cache); +const mem = (fn, options = {}) => { + const { + cacheKey = defaultCacheKey, + cache = new Map(), + cachePromiseRejection = true, + maxAge + } = options; + + if (typeof maxAge === 'number') { + mapAgeCleaner(cache); } - const {cache} = options; - options.maxAge = options.maxAge || 0; - - const setData = (key, data) => { - cache.set(key, { - data, - maxAge: Date.now() + options.maxAge - }); - }; - const memoized = function (...arguments_) { - const key = options.cacheKey(...arguments_); + const key = cacheKey(...arguments_); if (cache.has(key)) { - return cache.get(key).data; + return maxAge ? cache.get(key).data : cache.get(key); } const cacheItem = fn.call(this, ...arguments_); - setData(key, cacheItem); + cache.set(key, maxAge ? { + data: cacheItem, + maxAge: Date.now() + maxAge + } : cacheItem); - if (isPromise(cacheItem) && options.cachePromiseRejection === false) { - // Remove rejected promises from cache unless `cachePromiseRejection` is set to `true` + if (isPromise(cacheItem) && cachePromiseRejection === false) { + // Remove rejected promises from cache if `cachePromiseRejection` is set to `false` cacheItem.catch(() => cache.delete(key)); } @@ -69,7 +62,7 @@ const mem = (fn, options) => { mimicFn(memoized, fn); } catch (_) {} - cacheStore.set(memoized, options.cache); + cacheStore.set(memoized, cache); return memoized; }; From 79c7dfe2bab5569da4be6c6b5d570057b9b663a2 Mon Sep 17 00:00:00 2001 From: Federico Brigante Date: Tue, 21 May 2019 21:21:50 +0800 Subject: [PATCH 2/4] Drop redundant comment --- index.js | 1 - 1 file changed, 1 deletion(-) diff --git a/index.js b/index.js index 94fe869..b9f88b0 100644 --- a/index.js +++ b/index.js @@ -49,7 +49,6 @@ const mem = (fn, options = {}) => { } : cacheItem); if (isPromise(cacheItem) && cachePromiseRejection === false) { - // Remove rejected promises from cache if `cachePromiseRejection` is set to `false` cacheItem.catch(() => cache.delete(key)); } From 91be0e78abdd7a75362bde3ca520b41c6f193709 Mon Sep 17 00:00:00 2001 From: Federico Brigante Date: Tue, 21 May 2019 21:27:02 +0800 Subject: [PATCH 3/4] Replace .call+... with .apply --- index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/index.js b/index.js index b9f88b0..a01619e 100644 --- a/index.js +++ b/index.js @@ -41,7 +41,7 @@ const mem = (fn, options = {}) => { return maxAge ? cache.get(key).data : cache.get(key); } - const cacheItem = fn.call(this, ...arguments_); + const cacheItem = fn.apply(this, arguments_); cache.set(key, maxAge ? { data: cacheItem, From e4964e8c97e6ff3a76aabaf2fef811b8e6559c7b Mon Sep 17 00:00:00 2001 From: Federico Brigante Date: Mon, 27 May 2019 19:21:33 +0800 Subject: [PATCH 4/4] Move options destructuring in function parameters --- index.js | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/index.js b/index.js index a01619e..87bb72b 100644 --- a/index.js +++ b/index.js @@ -22,14 +22,12 @@ const defaultCacheKey = (...arguments_) => { return JSON.stringify(arguments_); }; -const mem = (fn, options = {}) => { - const { - cacheKey = defaultCacheKey, - cache = new Map(), - cachePromiseRejection = true, - maxAge - } = options; - +const mem = (fn, { + cacheKey = defaultCacheKey, + cache = new Map(), + cachePromiseRejection = true, + maxAge +} = {}) => { if (typeof maxAge === 'number') { mapAgeCleaner(cache); }