123456789101112131415161718192021222324252627282930313233 |
- 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();
- },
- };
- }
- export { createInMemoryCache };
|