mirror of
https://github.com/imezx/Warp.git
synced 2025-04-24 15:10:03 +00:00
61 lines
1.8 KiB
JavaScript
61 lines
1.8 KiB
JavaScript
'use strict';
|
|
|
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
|
|
// @todo Add logger on options to debug when caches go wrong.
|
|
function createFallbackableCache(options) {
|
|
const caches = [...options.caches];
|
|
const current = caches.shift(); // eslint-disable-line functional/immutable-data
|
|
if (current === undefined) {
|
|
return createNullCache();
|
|
}
|
|
return {
|
|
get(key, defaultValue, events = {
|
|
miss: () => Promise.resolve(),
|
|
}) {
|
|
return current.get(key, defaultValue, events).catch(() => {
|
|
return createFallbackableCache({ caches }).get(key, defaultValue, events);
|
|
});
|
|
},
|
|
set(key, value) {
|
|
return current.set(key, value).catch(() => {
|
|
return createFallbackableCache({ caches }).set(key, value);
|
|
});
|
|
},
|
|
delete(key) {
|
|
return current.delete(key).catch(() => {
|
|
return createFallbackableCache({ caches }).delete(key);
|
|
});
|
|
},
|
|
clear() {
|
|
return current.clear().catch(() => {
|
|
return createFallbackableCache({ caches }).clear();
|
|
});
|
|
},
|
|
};
|
|
}
|
|
|
|
function createNullCache() {
|
|
return {
|
|
get(_key, defaultValue, events = {
|
|
miss: () => Promise.resolve(),
|
|
}) {
|
|
const value = defaultValue();
|
|
return value
|
|
.then(result => Promise.all([result, events.miss(result)]))
|
|
.then(([result]) => result);
|
|
},
|
|
set(_key, value) {
|
|
return Promise.resolve(value);
|
|
},
|
|
delete(_key) {
|
|
return Promise.resolve();
|
|
},
|
|
clear() {
|
|
return Promise.resolve();
|
|
},
|
|
};
|
|
}
|
|
|
|
exports.createFallbackableCache = createFallbackableCache;
|
|
exports.createNullCache = createNullCache;
|