memorize.js 634 B

1234567891011121314151617181920212223242526272829
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", {
  3. value: true
  4. });
  5. exports.default = void 0;
  6. /**
  7. * @template T
  8. * @param fn {(function(): any) | undefined}
  9. * @returns {function(): T}
  10. */
  11. const memoize = fn => {
  12. let cache = false;
  13. /** @type {T} */
  14. let result;
  15. return () => {
  16. if (cache) {
  17. return result;
  18. }
  19. result = /** @type {function(): any} */fn();
  20. cache = true;
  21. // Allow to clean up memory for fn
  22. // and all dependent resources
  23. // eslint-disable-next-line no-undefined, no-param-reassign
  24. fn = undefined;
  25. return result;
  26. };
  27. };
  28. var _default = exports.default = memoize;