feat: InMemoryCache implementation

This commit is contained in:
Bouncey
2018-12-01 11:21:40 +00:00
committed by mrugesh mohapatra
parent 5dc8320dc8
commit 80c3c3ec55
2 changed files with 83 additions and 0 deletions

View File

@ -0,0 +1,34 @@
function isPromiseLike(thing) {
return !!thing && typeof thing.then === 'function';
}
function InMemoryCache(initialValue) {
const cacheKey = Symbol('cacheKey');
const cache = new Map();
if (typeof initialValue !== 'undefined') {
cache.set(cacheKey, initialValue);
}
return {
get() {
const value = cache.get(cacheKey);
return typeof value !== 'undefined' ? value : null;
},
async update(fn) {
const maybePromisedValue = fn();
if (isPromiseLike(maybePromisedValue)) {
return maybePromisedValue.then(value => cache.set(cacheKey, value));
} else {
const value = maybePromisedValue;
cache.set(cacheKey, value);
return null;
}
},
clear() {
return cache.delete(cacheKey);
}
};
}
export default InMemoryCache;