UNPKG

1.02 kBJavaScriptView Raw
1// Copyright 2017-2022 @polkadot/util authors & contributors
2// SPDX-License-Identifier: Apache-2.0
3import { isUndefined } from "./is/undefined.js";
4import { stringify } from "./stringify.js";
5
6function defaultGetId() {
7 return 'none';
8} // eslint-disable-next-line @typescript-eslint/no-explicit-any
9
10
11export function memoize(fn, {
12 getInstanceId = defaultGetId
13} = {}) {
14 const cache = {};
15
16 const memoized = (...args) => {
17 const stringParams = stringify(args);
18 const instanceId = getInstanceId();
19
20 if (!cache[instanceId]) {
21 cache[instanceId] = {};
22 }
23
24 if (isUndefined(cache[instanceId][stringParams])) {
25 cache[instanceId][stringParams] = fn(...args);
26 }
27
28 return cache[instanceId][stringParams];
29 };
30
31 memoized.unmemoize = (...args) => {
32 const stringParams = stringify(args);
33 const instanceId = getInstanceId();
34
35 if (cache[instanceId] && !isUndefined(cache[instanceId][stringParams])) {
36 delete cache[instanceId][stringParams];
37 }
38 };
39
40 return memoized;
41}
\No newline at end of file