UNPKG

ts-prime

Version:

A utility library for JavaScript and Typescript.

47 lines (46 loc) 1.54 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var hash_1 = require("./hash"); function cache(fn, options) { var defaultCache = function () { var cache = {}; return { get: function (key) { return cache[key]; }, set: function (key, data) { cache[key] = data; }, }; }; var defaultCacheFn = function () { var args = []; for (var _i = 0; _i < arguments.length; _i++) { args[_i] = arguments[_i]; } return hash_1.hash(JSON.stringify(args)); }; var cacheFnF = (options === null || options === void 0 ? void 0 : options.cacheKeyFn) || defaultCacheFn; var cacheMechanism = (options === null || options === void 0 ? void 0 : options.cacheMechanism) || defaultCache(); return function () { var args = []; for (var _i = 0; _i < arguments.length; _i++) { args[_i] = arguments[_i]; } var cacheId = cacheFnF.apply(void 0, args); var cached = cacheMechanism.get(cacheId); if (cached == null) { var result = fn.apply(void 0, args); if (result instanceof Promise) { return result.then(function (r) { cacheMechanism.set(cacheId, r); return r; }); } cacheMechanism.set(cacheId, result); return result; } return cached; }; } exports.cache = cache;