ts-prime
Version:
A utility library for JavaScript and Typescript.
47 lines (46 loc) • 1.54 kB
JavaScript
;
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;