@polkadot/util
Version:
A collection of useful utilities for @polkadot
34 lines (33 loc) • 1.09 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.memoize = memoize;
const stringify_js_1 = require("./stringify.js");
function defaultGetId() {
return 'none';
}
/**
* @name memoize
* @description Memomize the function with a specific instanceId
*/
function memoize(fn, { getInstanceId = defaultGetId } = {}) {
const cache = {};
const memoized = (...args) => {
const stringParams = (0, stringify_js_1.stringify)(args);
const instanceId = getInstanceId();
if (!cache[instanceId]) {
cache[instanceId] = {};
}
if (cache[instanceId][stringParams] === undefined) {
cache[instanceId][stringParams] = fn(...args);
}
return cache[instanceId][stringParams];
};
memoized.unmemoize = (...args) => {
const stringParams = (0, stringify_js_1.stringify)(args);
const instanceId = getInstanceId();
if (cache[instanceId]?.[stringParams] !== undefined) {
delete cache[instanceId][stringParams];
}
};
return memoized;
}
;