11import { buildStorage , canStale } from 'axios-cache-interceptor' ;
22import type { StorageValue } from 'axios-cache-interceptor' ;
3+ // eslint-disable-next-line import/no-extraneous-dependencies
4+ // @ts -ignore
5+ import { createClient } from 'redis' ;
36
47const KEY_PREFIX = 'axios-cache-' ;
58
69const MIN_TTL = 60000 ;
710
8- export default function createRedisStorage ( redisEndpoint : string ) {
9- // eslint-disable-next-line import/no-extraneous-dependencies
10- const Redis = require ( 'ioredis' ) ;
11+ export default function createRedisStorage ( client : ReturnType < typeof createClient > ) {
12+ const connectionPromise : Promise < any > = client . connect ( ) ;
1113
12- const client = new Redis ( redisEndpoint ) ;
14+ const connectIfNeeded = async ( ) => {
15+ if ( client . isReady ) {
16+ return ;
17+ }
18+
19+ await connectionPromise ;
20+ } ;
1321
1422 // source https://axios-cache-interceptor.js.org/guide/storages#node-redis-storage
1523 return buildStorage ( {
1624 async find ( key ) {
25+ await connectIfNeeded ( ) ;
1726 const result = await client . get ( `${ KEY_PREFIX } ${ key } ` ) ;
1827 return result ? ( JSON . parse ( result ) as StorageValue ) : undefined ;
1928 } ,
2029
2130 // eslint-disable-next-line complexity
2231 async set ( key , value , req ) {
32+ await connectIfNeeded ( ) ;
33+
2334 await client . set ( `${ KEY_PREFIX } ${ key } ` , JSON . stringify ( value ) , {
2435 PXAT :
2536 // We don't want to keep indefinitely values in the storage if
@@ -38,6 +49,7 @@ export default function createRedisStorage(redisEndpoint: string) {
3849 } ,
3950
4051 async remove ( key ) {
52+ await connectIfNeeded ( ) ;
4153 await client . del ( `${ KEY_PREFIX } ${ key } ` ) ;
4254 } ,
4355 } ) ;
0 commit comments