{"version":3,"sources":["../../../../src/cache/types/in-memory.ts"],"names":["interval","now","key","record","Instance","data","ttlInSecs","cached","fn","result"],"mappings":"AAAA,oIACS,6CAQS,MAAY,EAE7B,QAAA,iBAAA,gBAAA,KACC,CAAA,IAAM,IACN,WAEC,CAAA,CAAA,CAAA,KACA,CAAA,gCAAA,CAAA,IAAY,CACXA,CAAAA,qBAAW,CAAA,EAAA,CAAA,OAAA,CAAY,KACtB,CAAA,CAAA,EAAA,CAAA,CAAMC,CAAAA,WAAe,CACrB,CAAA,CAAA,EAAA,CAAA,MAAYC,CAAKC,CAAM,IAAK,CAAA,GAAA,CAAK,CAAA,CAAA,GAAA,CAAM,KAAA,CAAA,CAAA,CAAQ,CAAA,CAC1CA,GAAO,IAAA,CAAA,KAAaA,CAAAA,OAAO,CAAA,CAAA,CAAA,CAAA,CAAaF,SAAU,EAAA,CAAA,CAAA,SAAgB,EAExE,CAAG,EAAA,IAEJ,CACD,KACS,CAAA,MAAG,CAAA,CAAA,CAAS,CAAA,CAAA,GAAA,CAAA,CAAA,CAAA,CAAY,CAAA,CAAA,qBAAA,CAAA,EAAA,CAAA,OAAcD,CAAQ,KAGhD,CAAA,CAAA,EAAA,aACP,CAAA,CAAA,CAAA,CAAA,CAAA,CAAOI,CAAAA,YAAe,CAAA,CAAA,CAAA,CAAA,OAAmB,qBAAA,CAAA,GAG1C,CAAA,CAAA,CAAA,aACC,CAAA,CAAA,CAAA,GAAK,CAAA,CAAA,MAAM,MAAO,CAAA,CAAA,CAAK,CAAA,IAAA,CAAA,KAAA,CAAA,MAGxB,CAAA,IAAM,CAAA,YACCD,CAAAA,CAAS,CAAA,CAAA,CAAA,MAAK,GAAM,CAAA,CAAA,CAAI,CAAA,MAAK,CAAA,CAAA,IAAA,CAAA,KAAgB,CAAC,GACpD,CAAA,IAAA,CAAIA,YAAkB,CAAA,CAAA,CAAA,CAAA,CAAA,OAAc,CAAA,EAAaA,CAAO,CAAA,CAAA,SAAY,GAAA,KAAS,CAAA,EAAWA,CAAAA,CAAO,SAEhG,CAEA,IAAA,CAAA,GAAM,CAAA,CAAID,CAAAA,CAAaG,CAAAA,CAAcC,IACpC,CAAA,IAAK,CAAA,MAAM,GAAI,CAAA,CAAA,CAAA,CAAK,CAAA,CAAA,CAAA,CAAA,IAAA,CAAA,KAAgB,CAAA,GAAK,CAAA,IAAAD,CAAM,YAAuB,CAAA,CAAA,CAAA,CAAA,CAAK,IAAI,CAAA,CAAIC,CAAAA,SAAmB,CAAA,CAAU,CAAC,IAGlH,CAAA,GAAM,CAAA,CAAA,CAAA,CAAA,CAAA,GAAA,CAAYJ,KAAmCI,CAAgC,CACpF,CAAA,CAAA,MAAe,QAAM,CAAA,CAAA,CAAK,CAAA,CAAA,CAAA,CAAIJ,CAAG,MAC7BK,CAAQ,CAAA,MAAO,IAAA,CAAK,GAAA,CAAA,CAAA,CAAMA,CAAM,EAEpC,CAAA,CAAA,CAAA,OAAe,IAAMC,CAAAA,KACrB,CAAA,CAAA,CAAA,CAAA,MAAA,CAAM,CAAA,MAAK,CAAA,CAAIN,CAAAA,CAAK,OAAK,MAAA,IAAgB,CAAGI,GACrCG,CACR,CACD,CAAA,IAAA,CAAA,SAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,0BAAA","file":"/home/runner/work/equipped/equipped/dist/cjs/cache/types/in-memory.min.cjs","sourcesContent":["import { Instance } from '../../instance'\nimport { Cache } from '../base'\n\ntype CacheEntry = {\n\tdata: string\n\texpiredAt?: number\n}\n\nexport class InMemoryCache extends Cache {\n\tprivate readonly cache = new Map<string, CacheEntry>()\n\n\tconstructor() {\n\t\tsuper()\n\t\tlet interval: ReturnType<typeof setInterval> | undefined\n\t\tInstance.on(\n\t\t\t'start',\n\t\t\tasync () => {\n\t\t\t\tinterval = setInterval(() => {\n\t\t\t\t\tconst now = Date.now()\n\t\t\t\t\tfor (const [key, record] of this.cache.entries()) {\n\t\t\t\t\t\tif (record.expiredAt && record.expiredAt <= now) this.cache.delete(key)\n\t\t\t\t\t}\n\t\t\t\t}, 5000)\n\t\t\t},\n\t\t\t1,\n\t\t)\n\t\tInstance.on('close', async () => clearInterval(interval), 1)\n\t}\n\n\tprivate getScopedKey(key: string): string {\n\t\treturn Instance.get().getScopedName(key, ':')\n\t}\n\n\tasync delete(key: string) {\n\t\tthis.cache.delete(this.getScopedKey(key))\n\t}\n\n\tasync get(key: string) {\n\t\tconst record = this.cache.get(this.getScopedKey(key))\n\t\tif (record && (record.expiredAt === undefined || record.expiredAt > Date.now())) return record.data\n\t\treturn null\n\t}\n\n\tasync set(key: string, data: string, ttlInSecs?: number) {\n\t\tthis.cache.set(this.getScopedKey(key), { data, expiredAt: ttlInSecs ? Date.now() + ttlInSecs * 1000 : undefined })\n\t}\n\n\tasync getOrSet<T>(key: string, fn: () => Promise<T>, ttlInSecs?: number): Promise<T> {\n\t\tconst cached = await this.get(key)\n\t\tif (cached) return JSON.parse(cached) as T\n\n\t\tconst result = await fn()\n\t\tawait this.set(key, JSON.stringify(result), ttlInSecs)\n\t\treturn result\n\t}\n}\n"]}