UNPKG

graphql

Version:

A Query Language and Runtime which can target any service.

1 lines 1.34 kB
{"version":3,"file":"memoize2.js","sourceRoot":"","sources":["../../src/jsutils/memoize2.ts"],"names":[],"mappings":"AAKA,MAAM,UAAU,QAAQ,CACtB,EAAyB;IAEzB,IAAI,MAAmC,CAAC;IAExC,OAAO,SAAS,QAAQ,CAAC,EAAE,EAAE,EAAE;QAC7B,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAEzB,IAAI,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC5B,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YACzB,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;YACvB,MAAM,CAAC,GAAG,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;QACzB,CAAC;QAED,IAAI,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC9B,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;YAC3B,QAAQ,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YACtB,MAAM,CAAC,GAAG,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;QAC3B,CAAC;QAED,OAAO,QAAQ,CAAC;IAClB,CAAC,CAAC;AACJ,CAAC","sourcesContent":["/**\n * Memoizes the provided two-argument function.\n *\n * @internal\n */\nexport function memoize2<A1 extends object, A2 extends object, R>(\n fn: (a1: A1, a2: A2) => R,\n): (a1: A1, a2: A2) => R {\n let cache0: WeakMap<A1, WeakMap<A2, R>>;\n\n return function memoized(a1, a2) {\n cache0 ??= new WeakMap();\n\n let cache1 = cache0.get(a1);\n if (cache1 === undefined) {\n cache1 = new WeakMap();\n cache0.set(a1, cache1);\n }\n\n let fnResult = cache1.get(a2);\n if (fnResult === undefined) {\n fnResult = fn(a1, a2);\n cache1.set(a2, fnResult);\n }\n\n return fnResult;\n };\n}\n"]}