27 lines
628 B
JavaScript
27 lines
628 B
JavaScript
export default function (callback, options = {}) {
|
|
let { bench, name } = options;
|
|
let cache = new Map();
|
|
|
|
return (...args) => {
|
|
// Only supports single-arg functions for now.
|
|
if (args.filter(Boolean).length > 1) {
|
|
bench?.get(`(count) ${name} Not valid for memoize`).incrementCount();
|
|
return callback(...args);
|
|
}
|
|
|
|
let [cacheKey] = args;
|
|
|
|
if (!cache.has(cacheKey)) {
|
|
cache.set(cacheKey, callback(...args));
|
|
|
|
bench?.get(`(count) ${name} memoize miss`).incrementCount();
|
|
|
|
return cache.get(cacheKey);
|
|
}
|
|
|
|
bench?.get(`(count) ${name} memoize hit`).incrementCount();
|
|
|
|
return cache.get(cacheKey);
|
|
};
|
|
}
|