From 23991f7a0bcbe062659a9eaade2d8cee5396a998 Mon Sep 17 00:00:00 2001 From: Leibale Eidelman Date: Tue, 15 Feb 2022 14:22:34 -0500 Subject: [PATCH] fix #1865 - enhance "all in one" types (#1984) --- index.ts | 48 +++++++++++++++++++++++++++++++++++++----------- 1 file changed, 37 insertions(+), 11 deletions(-) diff --git a/index.ts b/index.ts index 63f21c582e..c948e5eac3 100644 --- a/index.ts +++ b/index.ts @@ -1,5 +1,13 @@ -import { createClient as _createClient, createCluster as _createCluster, RedisClientOptions, RedisClientType, RedisClusterOptions, RedisClusterType } from '@node-redis/client'; -import { RedisScripts } from '@node-redis/client/dist/lib/commands'; +import { + RedisModules, + RedisScripts, + createClient as _createClient, + RedisClientOptions, + RedisClientType as _RedisClientType, + createCluster as _createCluster, + RedisClusterOptions, + RedisClusterType as _RedisClusterType +} from '@node-redis/client'; import RedisBloomModules from '@node-redis/bloom'; import RedisGraph from '@node-redis/graph'; import RedisJSON from '@node-redis/json'; @@ -13,7 +21,7 @@ export * from '@node-redis/json'; export * from '@node-redis/search'; export * from '@node-redis/time-series'; -const modules = { +const modules = { ...RedisBloomModules, graph: RedisGraph, json: RedisJSON, @@ -21,20 +29,38 @@ const modules = { ts: RedisTimeSeries }; -export function createClient( - options?: Omit, 'modules'> -): RedisClientType { +export type RedisDefaultModules = typeof modules; + +export type RedisClientType< + M extends RedisModules = RedisDefaultModules, + S extends RedisScripts = Record +> = _RedisClientType; + +export function createClient( + options?: RedisClientOptions +): _RedisClientType { return _createClient({ ...options, - modules + modules: { + ...modules, + ...(options?.modules as M) + } }); } -export function createCluster( - options: Omit, 'modules'> -): RedisClusterType { +export type RedisClusterType< + M extends RedisModules = RedisDefaultModules, + S extends RedisScripts = Record +> = _RedisClusterType; + +export function createCluster( + options: RedisClusterOptions +): RedisClusterType { return _createCluster({ ...options, - modules + modules: { + ...modules, + ...(options?.modules as M) + } }); }