{"version":3,"sources":["../../../../src/cache/types/in-memory.ts"],"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"],"mappings":"AAAA,OAAS,YAAAA,MAAgB,iBACzB,OAAS,SAAAC,MAAa,UAOf,MAAMC,UAAsBD,CAAM,CACvB,MAAQ,IAAI,IAE7B,aAAc,CACb,MAAM,EACN,IAAIE,EACJH,EAAS,GACR,QACA,SAAY,CACXG,EAAW,YAAY,IAAM,CAC5B,MAAMC,EAAM,KAAK,IAAI,EACrB,SAAW,CAACC,EAAKC,CAAM,IAAK,KAAK,MAAM,QAAQ,EAC1CA,EAAO,WAAaA,EAAO,WAAaF,GAAK,KAAK,MAAM,OAAOC,CAAG,CAExE,EAAG,GAAI,CACR,EACA,CACD,EACAL,EAAS,GAAG,QAAS,SAAY,cAAcG,CAAQ,EAAG,CAAC,CAC5D,CAEQ,aAAaE,EAAqB,CACzC,OAAOL,EAAS,IAAI,EAAE,cAAcK,EAAK,GAAG,CAC7C,CAEA,MAAM,OAAOA,EAAa,CACzB,KAAK,MAAM,OAAO,KAAK,aAAaA,CAAG,CAAC,CACzC,CAEA,MAAM,IAAIA,EAAa,CACtB,MAAMC,EAAS,KAAK,MAAM,IAAI,KAAK,aAAaD,CAAG,CAAC,EACpD,OAAIC,IAAWA,EAAO,YAAc,QAAaA,EAAO,UAAY,KAAK,IAAI,GAAWA,EAAO,KACxF,IACR,CAEA,MAAM,IAAID,EAAaE,EAAcC,EAAoB,CACxD,KAAK,MAAM,IAAI,KAAK,aAAaH,CAAG,EAAG,CAAE,KAAAE,EAAM,UAAWC,EAAY,KAAK,IAAI,EAAIA,EAAY,IAAO,MAAU,CAAC,CAClH,CAEA,MAAM,SAAYH,EAAaI,EAAsBD,EAAgC,CACpF,MAAME,EAAS,MAAM,KAAK,IAAIL,CAAG,EACjC,GAAIK,EAAQ,OAAO,KAAK,MAAMA,CAAM,EAEpC,MAAMC,EAAS,MAAMF,EAAG,EACxB,aAAM,KAAK,IAAIJ,EAAK,KAAK,UAAUM,CAAM,EAAGH,CAAS,EAC9CG,CACR,CACD","names":["Instance","Cache","InMemoryCache","interval","now","key","record","data","ttlInSecs","fn","cached","result"]}