1- import { Provider } from '@nestjs/common' ;
1+ import { Provider , Type } from '@nestjs/common' ;
22import { createClient , RedisClientType } from 'redis' ;
33import { REDIS_CLIENT } from './redis.constants' ;
44import { RedisOptions } from './interfaces' ;
55import { MODULE_OPTIONS_TOKEN } from './redis.module-definition' ;
6+ import { RedisModuleAsyncOptions , RedisModuleOptions } from './interfaces' ;
7+ import { RedisOptionsFactory } from './interfaces/redis-factory.interface' ;
68
79export const createRedisClient = ( ) : Provider => ( {
810 provide : REDIS_CLIENT ,
@@ -13,3 +15,43 @@ export const createRedisClient = (): Provider => ({
1315 } ,
1416 inject : [ MODULE_OPTIONS_TOKEN ]
1517} ) ;
18+
19+ export const createAsyncProviders = ( options : RedisModuleAsyncOptions ) : Provider [ ] => {
20+ if ( options . useClass ) {
21+ return [
22+ {
23+ provide : options . useClass ,
24+ useClass : options . useClass
25+ } ,
26+ createAsyncOptionsProvider ( options )
27+ ] ;
28+ }
29+
30+ if ( options . useExisting || options . useFactory ) return [ createAsyncOptionsProvider ( options ) ] ;
31+
32+ return [ ] ;
33+ } ;
34+
35+ export const createAsyncOptionsProvider = ( options : RedisModuleAsyncOptions ) : Provider => {
36+ if ( options . useFactory ) {
37+ return {
38+ provide : MODULE_OPTIONS_TOKEN ,
39+ useFactory : options . useFactory ,
40+ inject : options . inject || [ ]
41+ } ;
42+ }
43+
44+ const inject : Type < RedisOptionsFactory < RedisModuleOptions > > [ ] = [ ] ;
45+ if ( options . useClass ) {
46+ inject . push ( options . useClass ) ;
47+ } else if ( options . useExisting ) {
48+ inject . push ( options . useExisting ) ;
49+ }
50+
51+ return {
52+ provide : MODULE_OPTIONS_TOKEN ,
53+ useFactory : async ( optionsFactory : RedisOptionsFactory < RedisModuleOptions > ) =>
54+ optionsFactory . createRedisOptions ( ) ,
55+ inject,
56+ } ;
57+ } ;
0 commit comments