{"version":3,"sources":["../../../../src/cache/types/redis.ts"],"sourcesContent":["import { Cluster, Redis, type RedisOptions } from 'ioredis'\n\nimport { EquippedError } from '../../errors'\nimport { Instance } from '../../instance'\nimport { Cache } from '../base'\nimport { type RedisConfig } from '../pipes'\n\nexport class RedisCache extends Cache {\n\tclient: Redis | Cluster\n\n\tconstructor(settings: RedisConfig, extraConfig?: Partial<RedisOptions>) {\n\t\tsuper()\n\t\tconst node = {\n\t\t\t...(settings.host ? { host: settings.host } : {}),\n\t\t\t...(settings.port ? { port: settings.port } : {}),\n\t\t}\n\t\tconst common = {\n\t\t\t...extraConfig,\n\t\t\t...(settings.password ? { password: settings.password } : {}),\n\t\t\t...(settings.username ? { username: settings.username } : {}),\n\t\t\t...(settings.tls ? { tls: {} } : {}),\n\t\t\tlazyConnect: true,\n\t\t}\n\t\tthis.client = settings.cluster\n\t\t\t? new Cluster([node], {\n\t\t\t\t\t...extraConfig,\n\t\t\t\t\tredisOptions: common,\n\t\t\t\t\tlazyConnect: true,\n\t\t\t\t})\n\t\t\t: new Redis({ ...common, ...node })\n\t\tthis.client.on('error', async (error) => {\n\t\t\tInstance.crash(new EquippedError(`Redis failed with error`, {}, error))\n\t\t})\n\t\tif (!extraConfig) Instance.on('start', async () => this.client.connect(), 1)\n\t\tInstance.on('close', async () => this.client.quit(), 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\tawait this.client.del(this.getScopedKey(key))\n\t}\n\n\tasync get(key: string) {\n\t\treturn await this.client.get(this.getScopedKey(key))\n\t}\n\n\tasync set(key: string, data: string, ttlInSecs?: number) {\n\t\tif (ttlInSecs) await this.client.setex(this.getScopedKey(key), ttlInSecs, data)\n\t\telse this.client.set(this.getScopedKey(key), data)\n\t}\n\n\tasync getOrSet<T>(key: string, fn: () => Promise<T>, ttlInSecs?: number) {\n\t\tconst cached = await this.get(this.getScopedKey(key))\n\t\tif (cached) return JSON.parse(cached)\n\n\t\tconst result = await fn()\n\t\tawait this.set(this.getScopedKey(key), JSON.stringify(result), ttlInSecs)\n\t}\n}\n"],"mappings":"AAAA,OAAS,WAAAA,EAAS,SAAAC,MAAgC,UAElD,OAAS,iBAAAC,MAAqB,eAC9B,OAAS,YAAAC,MAAgB,iBACzB,OAAS,SAAAC,MAAa,UACtB,MAAiC,WAE1B,MAAMC,UAAmBD,CAAM,CACrC,OAEA,YAAYE,EAAuBC,EAAqC,CACvE,MAAM,EACN,MAAMC,EAAO,CACZ,GAAIF,EAAS,KAAO,CAAE,KAAMA,EAAS,IAAK,EAAI,CAAC,EAC/C,GAAIA,EAAS,KAAO,CAAE,KAAMA,EAAS,IAAK,EAAI,CAAC,CAChD,EACMG,EAAS,CACd,GAAGF,EACH,GAAID,EAAS,SAAW,CAAE,SAAUA,EAAS,QAAS,EAAI,CAAC,EAC3D,GAAIA,EAAS,SAAW,CAAE,SAAUA,EAAS,QAAS,EAAI,CAAC,EAC3D,GAAIA,EAAS,IAAM,CAAE,IAAK,CAAC,CAAE,EAAI,CAAC,EAClC,YAAa,EACd,EACA,KAAK,OAASA,EAAS,QACpB,IAAIN,EAAQ,CAACQ,CAAI,EAAG,CACpB,GAAGD,EACH,aAAcE,EACd,YAAa,EACd,CAAC,EACA,IAAIR,EAAM,CAAE,GAAGQ,EAAQ,GAAGD,CAAK,CAAC,EACnC,KAAK,OAAO,GAAG,QAAS,MAAOE,GAAU,CACxCP,EAAS,MAAM,IAAID,EAAc,0BAA2B,CAAC,EAAGQ,CAAK,CAAC,CACvE,CAAC,EACIH,GAAaJ,EAAS,GAAG,QAAS,SAAY,KAAK,OAAO,QAAQ,EAAG,CAAC,EAC3EA,EAAS,GAAG,QAAS,SAAY,KAAK,OAAO,KAAK,EAAG,CAAC,CACvD,CAEQ,aAAaQ,EAAqB,CACzC,OAAOR,EAAS,IAAI,EAAE,cAAcQ,EAAK,GAAG,CAC7C,CAEA,MAAM,OAAOA,EAAa,CACzB,MAAM,KAAK,OAAO,IAAI,KAAK,aAAaA,CAAG,CAAC,CAC7C,CAEA,MAAM,IAAIA,EAAa,CACtB,OAAO,MAAM,KAAK,OAAO,IAAI,KAAK,aAAaA,CAAG,CAAC,CACpD,CAEA,MAAM,IAAIA,EAAaC,EAAcC,EAAoB,CACpDA,EAAW,MAAM,KAAK,OAAO,MAAM,KAAK,aAAaF,CAAG,EAAGE,EAAWD,CAAI,EACzE,KAAK,OAAO,IAAI,KAAK,aAAaD,CAAG,EAAGC,CAAI,CAClD,CAEA,MAAM,SAAYD,EAAaG,EAAsBD,EAAoB,CACxE,MAAME,EAAS,MAAM,KAAK,IAAI,KAAK,aAAaJ,CAAG,CAAC,EACpD,GAAII,EAAQ,OAAO,KAAK,MAAMA,CAAM,EAEpC,MAAMC,EAAS,MAAMF,EAAG,EACxB,MAAM,KAAK,IAAI,KAAK,aAAaH,CAAG,EAAG,KAAK,UAAUK,CAAM,EAAGH,CAAS,CACzE,CACD","names":["Cluster","Redis","EquippedError","Instance","Cache","RedisCache","settings","extraConfig","node","common","error","key","data","ttlInSecs","fn","cached","result"]}