ts-prime
Version:
A utility library for JavaScript and Typescript.
44 lines (43 loc) • 1.44 kB
JavaScript
import { hash } from './hash';
export 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(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;
};
}