{"version":3,"file":"memoize3.js","sourceRoot":"","sources":["../../src/jsutils/memoize3.ts"],"names":[],"mappings":"AAKA,MAAM,UAAU,QAAQ,CAKtB,EAAiC;IACjC,IAAI,MAAgD,CAAC;IAErD,OAAO,SAAS,QAAQ,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE;QACjC,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,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,EAAE,EAAE,CAAC,CAAC;YAC1B,MAAM,CAAC,GAAG,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;QAC3B,CAAC;QACD,OAAO,QAAQ,CAAC;IAClB,CAAC,CAAC;AACJ,CAAC","sourcesContent":["/**\n * Memoizes the provided three-argument function.\n *\n * @internal\n */\nexport function memoize3<\n  A1 extends object,\n  A2 extends object,\n  A3 extends object,\n  R,\n>(fn: (a1: A1, a2: A2, a3: A3) => R): (a1: A1, a2: A2, a3: A3) => R {\n  let cache0: WeakMap<A1, WeakMap<A2, WeakMap<A3, R>>>;\n\n  return function memoized(a1, a2, a3) {\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 cache2 = cache1.get(a2);\n    if (cache2 === undefined) {\n      cache2 = new WeakMap();\n      cache1.set(a2, cache2);\n    }\n\n    let fnResult = cache2.get(a3);\n    if (fnResult === undefined) {\n      fnResult = fn(a1, a2, a3);\n      cache2.set(a3, fnResult);\n    }\n    return fnResult;\n  };\n}\n"]}