Skip to content

Commit b5c8f64

Browse files
committed
Introduce memoize2of5 and fix memoize2of4
1 parent 85659bc commit b5c8f64

File tree

2 files changed

+29
-1
lines changed

2 files changed

+29
-1
lines changed

.changeset/sweet-socks-clap.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'@graphql-tools/utils': patch
3+
---
4+
5+
Do not use a global `WeakMap` for `memoize2of4`, and introduce `memoize2of5`

packages/utils/src/memoize.ts

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -178,8 +178,8 @@ export function memoize5<F extends (a1: any, a2: any, a3: any, a4: any, a5: any)
178178
} as F;
179179
}
180180

181-
const memoize2of4cache: WeakMap<Record<string, any>, WeakMap<Record<string, any>, any>> = new WeakMap();
182181
export function memoize2of4<F extends (a1: any, a2: any, a3: any, a4: any) => any>(fn: F): F {
182+
const memoize2of4cache: WeakMap<Record<string, any>, WeakMap<Record<string, any>, any>> = new WeakMap();
183183
return function memoized(a1: any, a2: any, a3: any, a4: any): any {
184184
let cache2 = memoize2of4cache.get(a1);
185185
if (!cache2) {
@@ -200,3 +200,26 @@ export function memoize2of4<F extends (a1: any, a2: any, a3: any, a4: any) => an
200200
return cachedValue;
201201
} as F;
202202
}
203+
204+
export function memoize2of5<F extends (a1: any, a2: any, a3: any, a4: any, a5: any) => any>(fn: F): F {
205+
const memoize2of4cache: WeakMap<Record<string, any>, WeakMap<Record<string, any>, any>> = new WeakMap();
206+
return function memoized(a1: any, a2: any, a3: any, a4: any, a5: any): any {
207+
let cache2 = memoize2of4cache.get(a1);
208+
if (!cache2) {
209+
cache2 = new WeakMap();
210+
memoize2of4cache.set(a1, cache2);
211+
const newValue = fn(a1, a2, a3, a4, a5);
212+
cache2.set(a2, newValue);
213+
return newValue;
214+
}
215+
216+
const cachedValue = cache2.get(a2);
217+
if (cachedValue === undefined) {
218+
const newValue = fn(a1, a2, a3, a4, a5);
219+
cache2.set(a2, newValue);
220+
return newValue;
221+
}
222+
223+
return cachedValue;
224+
} as F;
225+
}

0 commit comments

Comments
 (0)