{"version":3,"sources":["../../src/functions/memoize/memoize.ts"],"names":[],"mappings":";AAEO,SAAS,QAEd,IACA,kBACW;AACX,QAAM,QAAQ,oBAAI,IAAmC;AAErD,SAAO,SAAS,oBAAoB,MAA6B;AAC/D,UAAM,WAAW,mBAAmB,iBAAiB,GAAG,IAAI,IAAI,KAAK,CAAC;AAEtE,QAAI,MAAM,IAAI,QAAQ,GAAG;AACvB,aAAO,MAAM,IAAI,QAAQ;AAAA,IAC3B;AAEA,UAAM,SAAS,GAAG,GAAG,IAAI;AACzB,UAAM,IAAI,UAAU,MAAM;AAE1B,WAAO;AAAA,EACT;AACF","sourcesContent":["import { AnyFunction } from '../../types/internal';\n\nexport function memoize<TFunction extends AnyFunction>(\n  // eslint-disable-next-line unicorn/prevent-abbreviations -- `function` is a reserved word\n  fn: TFunction,\n  cacheKeyResolver?: (...args: Parameters<TFunction>) => string\n): TFunction {\n  const cache = new Map<string, ReturnType<TFunction>>();\n\n  return function memoizedFunction(...args: Parameters<TFunction>) {\n    const cacheKey = cacheKeyResolver ? cacheKeyResolver(...args) : args[0];\n\n    if (cache.has(cacheKey)) {\n      return cache.get(cacheKey);\n    }\n\n    const result = fn(...args);\n    cache.set(cacheKey, result);\n\n    return result;\n  } as TFunction;\n}\n"]}