diff --git a/packages/client/lib/client/multi-command.ts b/packages/client/lib/client/multi-command.ts index 2c0d8a2acd..937b6147da 100644 --- a/packages/client/lib/client/multi-command.ts +++ b/packages/client/lib/client/multi-command.ts @@ -13,7 +13,7 @@ type CommandSignature< S extends RedisScripts, RESP extends RespVersions, TYPE_MAPPING extends TypeMapping -> = (...args: Tail>) => InternalRedisClientMultiCommandType< +> = (...args: Tail>) => RedisClientMultiCommandTyped< [...REPLIES, ReplyWithTypeMapping, TYPE_MAPPING>], M, F, @@ -70,7 +70,7 @@ type WithScripts< [P in keyof S]: CommandSignature; }; -type InternalRedisClientMultiCommandType< +export type RedisClientMultiCommandTyped< REPLIES extends Array, M extends RedisModules, F extends RedisFunctions, @@ -96,7 +96,7 @@ export type RedisClientMultiCommandType< S extends RedisScripts, RESP extends RespVersions, TYPE_MAPPING extends TypeMapping -> = TypedOrAny>; +> = TypedOrAny>; type ExecuteMulti = (commands: Array, selectedDB?: number) => Promise>; diff --git a/packages/redis/index.ts b/packages/redis/index.ts index f4341bbf48..d519e31cac 100644 --- a/packages/redis/index.ts +++ b/packages/redis/index.ts @@ -35,99 +35,113 @@ const modules = { ts: RedisTimeSeries }; -export type RedisDefaultModules = typeof modules; +type RedisStackModules = typeof modules; +export interface RedisDefaultModules extends RedisStackModules {} +export type RedisDefaultFunctions = {}; +export type RedisDefaultScripts = {}; +export type RedisDefaultRESP = 2; +export type RedisDefaultTypeMapping = {}; +export type RedisDefaultClientType = RedisClientType<{}, RedisDefaultFunctions, RedisDefaultScripts, RedisDefaultRESP, RedisDefaultTypeMapping>; export type RedisClientType< - M extends RedisModules = RedisDefaultModules, + M extends RedisModules = {}, F extends RedisFunctions = {}, S extends RedisScripts = {}, RESP extends RespVersions = 2, TYPE_MAPPING extends TypeMapping = {} -> = GenericRedisClientType; +> = GenericRedisClientType; export function createClient< - M extends RedisModules, - F extends RedisFunctions, - S extends RedisScripts, - RESP extends RespVersions, - TYPE_MAPPING extends TypeMapping + M extends RedisModules = {}, + F extends RedisFunctions = {}, + S extends RedisScripts = {}, + RESP extends RespVersions = 2, + TYPE_MAPPING extends TypeMapping = {} >( options?: RedisClientOptions -): GenericRedisClientType { - return genericCreateClient({ +): RedisClientType { + return (genericCreateClient as any)({ ...options, modules: { ...modules, ...(options?.modules as M) } - }); + }) as RedisClientType; } export function createClientPool< - M extends RedisModules, - F extends RedisFunctions, - S extends RedisScripts, - RESP extends RespVersions, + M extends RedisModules = {}, + F extends RedisFunctions = {}, + S extends RedisScripts = {}, + RESP extends RespVersions = 2, TYPE_MAPPING extends TypeMapping = {} >(clientOptions?: Omit, "clientSideCache">, - options?: Partial): GenericRedisClientPoolType { - return genericCreateClientPool({ + options?: Partial): RedisClientPoolType { + return (genericCreateClientPool as any)({ ...clientOptions, modules: { ...modules, ...(clientOptions?.modules as M) } - }, options); + }, options) as RedisClientPoolType; } +export type RedisClientPoolType< + M extends RedisModules = {}, + F extends RedisFunctions = {}, + S extends RedisScripts = {}, + RESP extends RespVersions = 2, + TYPE_MAPPING extends TypeMapping = {} +> = GenericRedisClientPoolType; + export type RedisClusterType< - M extends RedisModules = RedisDefaultModules, + M extends RedisModules = {}, F extends RedisFunctions = {}, S extends RedisScripts = {}, RESP extends RespVersions = 2, TYPE_MAPPING extends TypeMapping = {} -> = genericRedisClusterType; +> = genericRedisClusterType; export function createCluster< - M extends RedisModules, - F extends RedisFunctions, - S extends RedisScripts, - RESP extends RespVersions, - TYPE_MAPPING extends TypeMapping + M extends RedisModules = {}, + F extends RedisFunctions = {}, + S extends RedisScripts = {}, + RESP extends RespVersions = 2, + TYPE_MAPPING extends TypeMapping = {} >( options: RedisClusterOptions -): RedisClusterType { - return genericCreateCluster({ +): RedisClusterType { + return (genericCreateCluster as any)({ ...options, modules: { ...modules, ...(options?.modules as M) } - }); + }) as RedisClusterType; } export type RedisSentinelType< - M extends RedisModules = RedisDefaultModules, + M extends RedisModules = {}, F extends RedisFunctions = {}, S extends RedisScripts = {}, RESP extends RespVersions = 2, TYPE_MAPPING extends TypeMapping = {} -> = genericRedisSentinelType; +> = genericRedisSentinelType; export function createSentinel< - M extends RedisModules, - F extends RedisFunctions, - S extends RedisScripts, - RESP extends RespVersions, - TYPE_MAPPING extends TypeMapping + M extends RedisModules = {}, + F extends RedisFunctions = {}, + S extends RedisScripts = {}, + RESP extends RespVersions = 2, + TYPE_MAPPING extends TypeMapping = {} >( options: RedisSentinelOptions -): RedisSentinelType { - return genericCreateSentinel({ +): RedisSentinelType { + return (genericCreateSentinel as any)({ ...options, modules: { ...modules, ...(options?.modules as M) } - }); + }) as RedisSentinelType; }