cache-common.cjs.js 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. 'use strict';
  2. Object.defineProperty(exports, '__esModule', { value: true });
  3. // @todo Add logger on options to debug when caches go wrong.
  4. function createFallbackableCache(options) {
  5. const caches = [...options.caches];
  6. const current = caches.shift(); // eslint-disable-line functional/immutable-data
  7. if (current === undefined) {
  8. return createNullCache();
  9. }
  10. return {
  11. get(key, defaultValue, events = {
  12. miss: () => Promise.resolve(),
  13. }) {
  14. return current.get(key, defaultValue, events).catch(() => {
  15. return createFallbackableCache({ caches }).get(key, defaultValue, events);
  16. });
  17. },
  18. set(key, value) {
  19. return current.set(key, value).catch(() => {
  20. return createFallbackableCache({ caches }).set(key, value);
  21. });
  22. },
  23. delete(key) {
  24. return current.delete(key).catch(() => {
  25. return createFallbackableCache({ caches }).delete(key);
  26. });
  27. },
  28. clear() {
  29. return current.clear().catch(() => {
  30. return createFallbackableCache({ caches }).clear();
  31. });
  32. },
  33. };
  34. }
  35. function createNullCache() {
  36. return {
  37. get(_key, defaultValue, events = {
  38. miss: () => Promise.resolve(),
  39. }) {
  40. const value = defaultValue();
  41. return value
  42. .then(result => Promise.all([result, events.miss(result)]))
  43. .then(([result]) => result);
  44. },
  45. set(_key, value) {
  46. return Promise.resolve(value);
  47. },
  48. delete(_key) {
  49. return Promise.resolve();
  50. },
  51. clear() {
  52. return Promise.resolve();
  53. },
  54. };
  55. }
  56. exports.createFallbackableCache = createFallbackableCache;
  57. exports.createNullCache = createNullCache;