{"version":3,"sources":["../src/utils/pMemoize.ts"],"sourcesContent":["type SkipCacheFn<F extends (...args: readonly any[]) => Promise<any>> = (\n  args: Parameters<F>,\n  value: Awaited<ReturnType<F>>,\n) => Promise<boolean>\n\nexport function pMemoize<F extends (...args: readonly any[]) => Promise<any>>(\n  options: {\n    cacheKey: (args: Parameters<F>) => string\n    skipCache?: boolean | SkipCacheFn<F>\n  },\n  fn: F,\n): F {\n  type CachedValue = Promise<Awaited<ReturnType<F>>> | Awaited<ReturnType<F>>\n  const cache = new Map<string, CachedValue>()\n\n  const skipCache: SkipCacheFn<F> =\n    options.skipCache == null\n      ? async () => false\n      : typeof options.skipCache === \"function\"\n        ? options.skipCache\n        : async () => options.skipCache as boolean\n\n  return async function (...args: Parameters<F>) {\n    const key = options.cacheKey(args)\n\n    if (cache.has(key)) {\n      return cache.get(key)!\n    }\n\n    const promise = (async () => {\n      const cleanCache = (): void => {\n        queueMicrotask(() => {\n          if (cache.get(key) === promise) {\n            cache.delete(key)\n          }\n        })\n      }\n\n      try {\n        const result = await fn(...args)\n        if (await skipCache(args, result)) {\n          cleanCache()\n        }\n        return result\n      } catch (e) {\n        cleanCache()\n        throw e\n      }\n    })()\n    cache.set(key, promise)\n    return promise\n  } as any\n}\n"],"mappings":";AAKO,SAAS,SACd,SAIA,IACG;AAEH,QAAM,QAAQ,oBAAI,IAAyB;AAE3C,QAAM,YACJ,QAAQ,aAAa,OACjB,YAAY,QACZ,OAAO,QAAQ,cAAc,aAC3B,QAAQ,YACR,YAAY,QAAQ;AAE5B,SAAO,kBAAmB,MAAqB;AAC7C,UAAM,MAAM,QAAQ,SAAS,IAAI;AAEjC,QAAI,MAAM,IAAI,GAAG,GAAG;AAClB,aAAO,MAAM,IAAI,GAAG;AAAA,IACtB;AAEA,UAAM,WAAW,YAAY;AAC3B,YAAM,aAAa,MAAY;AAC7B,uBAAe,MAAM;AACnB,cAAI,MAAM,IAAI,GAAG,MAAM,SAAS;AAC9B,kBAAM,OAAO,GAAG;AAAA,UAClB;AAAA,QACF,CAAC;AAAA,MACH;AAEA,UAAI;AACF,cAAM,SAAS,MAAM,GAAG,GAAG,IAAI;AAC/B,YAAI,MAAM,UAAU,MAAM,MAAM,GAAG;AACjC,qBAAW;AAAA,QACb;AACA,eAAO;AAAA,MACT,SAAS,GAAG;AACV,mBAAW;AACX,cAAM;AAAA,MACR;AAAA,IACF,GAAG;AACH,UAAM,IAAI,KAAK,OAAO;AACtB,WAAO;AAAA,EACT;AACF;","names":[]}