{"version":3,"sources":["../src/memoize.ts"],"sourcesContent":["import memoize from \"lodash.memoize\";\n\ntype Fn = (...args: any[]) => any;\n\ntype Args2<T> = T extends (a: infer A, b: infer B) => infer R\n  ? {\n      0: A;\n      1: B;\n      return: R;\n    }\n  : never;\ntype Args3<T> = T extends (a: infer A, b: infer B, c: infer C) => infer R\n  ? {\n      0: A;\n      1: B;\n      2: C;\n      return: R;\n    }\n  : never;\ntype Args4<T> = T extends (\n  a: infer A,\n  b: infer B,\n  c: infer C,\n  d: infer D\n) => infer R\n  ? {\n      0: A;\n      1: B;\n      2: C;\n      3: D;\n      return: R;\n    }\n  : never;\n\nfunction uncurry2<A, B, R>(fn: (a: A) => (b: B) => R) {\n  return (a: A, b: B) => fn(a)(b);\n}\n\nfunction uncurry3<A, B, C, R>(fn: (a: A) => (b: B) => (c: C) => R) {\n  return (a: A, b: B, c: C) => fn(a)(b)(c);\n}\n\nfunction uncurry4<A, B, C, D, R>(\n  fn: (a: A) => (b: B) => (c: C) => (d: D) => R\n) {\n  return (a: A, b: B, c: C, d: D) => fn(a)(b)(c)(d);\n}\n\nexport function memoize2<T extends Fn>(fn: T): T {\n  type A = Args2<T>[0];\n  type B = Args2<T>[1];\n\n  return uncurry2(memoize((a: A) => memoize((b: B) => fn(a, b)))) as T;\n}\n\nexport function memoize3<T extends Fn>(fn: T): T {\n  type A = Args3<T>[0];\n  type B = Args3<T>[1];\n  type C = Args3<T>[2];\n\n  return uncurry3(\n    memoize((a: A) => memoize((b: B) => memoize((c: C) => fn(a, b, c))))\n  ) as T;\n}\n\nexport function memoize4<T extends Fn>(fn: T): T {\n  type A = Args4<T>[0];\n  type B = Args4<T>[1];\n  type C = Args4<T>[2];\n  type D = Args4<T>[3];\n\n  return uncurry4(\n    memoize((a: A) =>\n      memoize((b: B) => memoize((c: C) => memoize((d: D) => fn(a, b, c, d))))\n    )\n  ) as T;\n}\n"],"mappings":"AAAA,OAAO,aAAa;AAkCpB,SAAS,SAAkB,IAA2B;AACpD,SAAO,CAAC,GAAM,MAAS,GAAG,CAAC,EAAE,CAAC;AAChC;AAEA,SAAS,SAAqB,IAAqC;AACjE,SAAO,CAAC,GAAM,GAAM,MAAS,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;AACzC;AAEA,SAAS,SACP,IACA;AACA,SAAO,CAAC,GAAM,GAAM,GAAM,MAAS,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;AAClD;AAEO,SAAS,SAAuB,IAAU;AAI/C,SAAO,SAAS,QAAQ,CAAC,MAAS,QAAQ,CAAC,MAAS,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;AAChE;AAEO,SAAS,SAAuB,IAAU;AAK/C,SAAO;AAAA,IACL,QAAQ,CAAC,MAAS,QAAQ,CAAC,MAAS,QAAQ,CAAC,MAAS,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;AAAA,EACrE;AACF;AAEO,SAAS,SAAuB,IAAU;AAM/C,SAAO;AAAA,IACL;AAAA,MAAQ,CAAC,MACP,QAAQ,CAAC,MAAS,QAAQ,CAAC,MAAS,QAAQ,CAAC,MAAS,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;AAAA,IACxE;AAAA,EACF;AACF;","names":[]}