12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061 |
- '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;
|