You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
37 lines
1.3 KiB
37 lines
1.3 KiB
'use strict'; |
|
|
|
Object.defineProperty(exports, '__esModule', { value: true }); |
|
|
|
function createInMemoryCache(options = { serializable: true }) { |
|
// eslint-disable-next-line functional/no-let |
|
let cache = {}; |
|
return { |
|
get(key, defaultValue, events = { |
|
miss: () => Promise.resolve(), |
|
}) { |
|
const keyAsString = JSON.stringify(key); |
|
if (keyAsString in cache) { |
|
return Promise.resolve(options.serializable ? JSON.parse(cache[keyAsString]) : cache[keyAsString]); |
|
} |
|
const promise = defaultValue(); |
|
const miss = (events && events.miss) || (() => Promise.resolve()); |
|
return promise.then((value) => miss(value)).then(() => promise); |
|
}, |
|
set(key, value) { |
|
// eslint-disable-next-line functional/immutable-data |
|
cache[JSON.stringify(key)] = options.serializable ? JSON.stringify(value) : value; |
|
return Promise.resolve(value); |
|
}, |
|
delete(key) { |
|
// eslint-disable-next-line functional/immutable-data |
|
delete cache[JSON.stringify(key)]; |
|
return Promise.resolve(); |
|
}, |
|
clear() { |
|
cache = {}; |
|
return Promise.resolve(); |
|
}, |
|
}; |
|
} |
|
|
|
exports.createInMemoryCache = createInMemoryCache;
|
|
|