cache-in-memory.cjs.js 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637
  1. 'use strict';
  2. Object.defineProperty(exports, '__esModule', { value: true });
  3. function createInMemoryCache(options = { serializable: true }) {
  4. // eslint-disable-next-line functional/no-let
  5. let cache = {};
  6. return {
  7. get(key, defaultValue, events = {
  8. miss: () => Promise.resolve(),
  9. }) {
  10. const keyAsString = JSON.stringify(key);
  11. if (keyAsString in cache) {
  12. return Promise.resolve(options.serializable ? JSON.parse(cache[keyAsString]) : cache[keyAsString]);
  13. }
  14. const promise = defaultValue();
  15. const miss = (events && events.miss) || (() => Promise.resolve());
  16. return promise.then((value) => miss(value)).then(() => promise);
  17. },
  18. set(key, value) {
  19. // eslint-disable-next-line functional/immutable-data
  20. cache[JSON.stringify(key)] = options.serializable ? JSON.stringify(value) : value;
  21. return Promise.resolve(value);
  22. },
  23. delete(key) {
  24. // eslint-disable-next-line functional/immutable-data
  25. delete cache[JSON.stringify(key)];
  26. return Promise.resolve();
  27. },
  28. clear() {
  29. cache = {};
  30. return Promise.resolve();
  31. },
  32. };
  33. }
  34. exports.createInMemoryCache = createInMemoryCache;