diff --git a/package-lock.json b/package-lock.json index 736abe70a46..fb7ec21ee6b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -7337,7 +7337,7 @@ }, "packages/bloom": { "name": "@redis/bloom", - "version": "5.8.2", + "version": "5.8.3", "license": "MIT", "devDependencies": { "@redis/test-utils": "*" @@ -7346,12 +7346,12 @@ "node": ">= 18" }, "peerDependencies": { - "@redis/client": "^5.8.2" + "@redis/client": "^5.8.3" } }, "packages/client": { "name": "@redis/client", - "version": "5.8.2", + "version": "5.8.3", "license": "MIT", "dependencies": { "cluster-key-slot": "1.1.2" @@ -7367,7 +7367,7 @@ }, "packages/entraid": { "name": "@redis/entraid", - "version": "5.8.2", + "version": "5.8.3", "license": "MIT", "dependencies": { "@azure/identity": "^4.7.0", @@ -7386,7 +7386,7 @@ "node": ">= 18" }, "peerDependencies": { - "@redis/client": "^5.8.2" + "@redis/client": "^5.8.3" } }, "packages/entraid/node_modules/@types/node": { @@ -7423,7 +7423,7 @@ }, "packages/json": { "name": "@redis/json", - "version": "5.8.2", + "version": "5.8.3", "license": "MIT", "devDependencies": { "@redis/test-utils": "*" @@ -7432,18 +7432,18 @@ "node": ">= 18" }, "peerDependencies": { - "@redis/client": "^5.8.2" + "@redis/client": "^5.8.3" } }, "packages/redis": { - "version": "5.8.2", + "version": "5.8.3", "license": "MIT", "dependencies": { - "@redis/bloom": "5.8.2", - "@redis/client": "5.8.2", - "@redis/json": "5.8.2", - "@redis/search": "5.8.2", - "@redis/time-series": "5.8.2" + "@redis/bloom": "5.8.3", + "@redis/client": "5.8.3", + "@redis/json": "5.8.3", + "@redis/search": "5.8.3", + "@redis/time-series": "5.8.3" }, "engines": { "node": ">= 18" @@ -7451,7 +7451,7 @@ }, "packages/search": { "name": "@redis/search", - "version": "5.8.2", + "version": "5.8.3", "license": "MIT", "devDependencies": { "@redis/test-utils": "*" @@ -7460,7 +7460,7 @@ "node": ">= 18" }, "peerDependencies": { - "@redis/client": "^5.8.2" + "@redis/client": "^5.8.3" } }, "packages/test-utils": { @@ -7529,7 +7529,7 @@ }, "packages/time-series": { "name": "@redis/time-series", - "version": "5.8.2", + "version": "5.8.3", "license": "MIT", "devDependencies": { "@redis/test-utils": "*" @@ -7538,7 +7538,7 @@ "node": ">= 18" }, "peerDependencies": { - "@redis/client": "^5.8.2" + "@redis/client": "^5.8.3" } } } diff --git a/packages/bloom/package.json b/packages/bloom/package.json index e2ff5a8b42d..75fd1ed042e 100644 --- a/packages/bloom/package.json +++ b/packages/bloom/package.json @@ -1,6 +1,6 @@ { "name": "@redis/bloom", - "version": "5.8.2", + "version": "5.8.3", "license": "MIT", "main": "./dist/lib/index.js", "types": "./dist/lib/index.d.ts", @@ -13,7 +13,7 @@ "release": "release-it" }, "peerDependencies": { - "@redis/client": "^5.8.2" + "@redis/client": "^5.8.3" }, "devDependencies": { "@redis/test-utils": "*" diff --git a/packages/client/lib/client/index.ts b/packages/client/lib/client/index.ts index 1a27ea88986..2dcc149cfcc 100644 --- a/packages/client/lib/client/index.ts +++ b/packages/client/lib/client/index.ts @@ -10,7 +10,7 @@ import { TcpSocketConnectOpts } from 'node:net'; import { PUBSUB_TYPE, PubSubType, PubSubListener, PubSubTypeListeners, ChannelListeners } from './pub-sub'; import { Command, CommandSignature, TypeMapping, CommanderConfig, RedisFunction, RedisFunctions, RedisModules, RedisScript, RedisScripts, ReplyUnion, RespVersions, RedisArgument, ReplyWithTypeMapping, SimpleStringReply, TransformReply, CommandArguments } from '../RESP/types'; import RedisClientMultiCommand, { RedisClientMultiCommandType } from './multi-command'; -import { RedisMultiQueuedCommand } from '../multi-command'; +import { MULTI_MODE, MultiMode, RedisMultiQueuedCommand } from '../multi-command'; import HELLO, { HelloOptions } from '../commands/HELLO'; import { ScanOptions, ScanCommonOptions } from '../commands/SCAN'; import { RedisLegacyClient, RedisLegacyClientType } from './legacy-mode'; @@ -1187,8 +1187,8 @@ export default class RedisClient< return execResult as Array; } - MULTI() { - type Multi = new (...args: ConstructorParameters) => RedisClientMultiCommandType<[], M, F, S, RESP, TYPE_MAPPING>; + MULTI() { + type Multi = new (...args: ConstructorParameters) => RedisClientMultiCommandType; return new ((this as any).Multi as Multi)( this._executeMulti.bind(this), this._executePipeline.bind(this), diff --git a/packages/client/lib/client/multi-command.ts b/packages/client/lib/client/multi-command.ts index a687655b60a..fdb958b8033 100644 --- a/packages/client/lib/client/multi-command.ts +++ b/packages/client/lib/client/multi-command.ts @@ -1,5 +1,5 @@ import COMMANDS from '../commands'; -import RedisMultiCommand, { MULTI_REPLY, MultiReply, MultiReplyType, RedisMultiQueuedCommand } from '../multi-command'; +import RedisMultiCommand, { MULTI_MODE, MULTI_REPLY, MultiMode, MultiReply, MultiReplyType, RedisMultiQueuedCommand } from '../multi-command'; import { ReplyWithTypeMapping, CommandReply, Command, CommandArguments, CommanderConfig, RedisFunctions, RedisModules, RedisScripts, RespVersions, TransformReply, RedisScript, RedisFunction, TypeMapping } from '../RESP/types'; import { attachConfig, functionArgumentsPrefix, getTransformReply } from '../commander'; import { BasicCommandParser } from './parser'; @@ -13,7 +13,7 @@ type CommandSignature< S extends RedisScripts, RESP extends RespVersions, TYPE_MAPPING extends TypeMapping -> = (...args: Tail>) => RedisClientMultiCommandType< +> = (...args: Tail>) => InternalRedisClientMultiCommandType< [...REPLIES, ReplyWithTypeMapping, TYPE_MAPPING>], M, F, @@ -70,7 +70,7 @@ type WithScripts< [P in keyof S]: CommandSignature; }; -export type RedisClientMultiCommandType< +type InternalRedisClientMultiCommandType< REPLIES extends Array, M extends RedisModules, F extends RedisFunctions, @@ -85,6 +85,19 @@ export type RedisClientMultiCommandType< WithScripts ); +type TypedOrAny = + [Flag] extends [MULTI_MODE['TYPED']] ? T : any; + +export type RedisClientMultiCommandType< + isTyped extends MultiMode, + REPLIES extends Array, + M extends RedisModules, + F extends RedisFunctions, + S extends RedisScripts, + RESP extends RespVersions, + TYPE_MAPPING extends TypeMapping +> = TypedOrAny>; + type ExecuteMulti = (commands: Array, selectedDB?: number) => Promise>; export default class RedisClientMultiCommand { diff --git a/packages/client/lib/client/pool.ts b/packages/client/lib/client/pool.ts index b53bb2c7e61..75aca57a9f5 100644 --- a/packages/client/lib/client/pool.ts +++ b/packages/client/lib/client/pool.ts @@ -10,6 +10,7 @@ import RedisClientMultiCommand, { RedisClientMultiCommandType } from './multi-co import { BasicPooledClientSideCache, ClientSideCacheConfig, PooledClientSideCacheProvider } from './cache'; import { BasicCommandParser } from './parser'; import SingleEntryCache from '../single-entry-cache'; +import { MULTI_MODE, MultiMode } from '../multi-command'; export interface RedisPoolOptions { /** @@ -486,8 +487,9 @@ export class RedisClientPool< return this.execute(client => client.sendCommand(args, options)); } - MULTI() { - type Multi = new (...args: ConstructorParameters) => RedisClientMultiCommandType<[], M, F, S, RESP, TYPE_MAPPING>; + + MULTI() { + type Multi = new (...args: ConstructorParameters) => RedisClientMultiCommandType; return new ((this as any).Multi as Multi)( (commands, selectedDB) => this.execute(client => client._executeMulti(commands, selectedDB)), commands => this.execute(client => client._executePipeline(commands)), diff --git a/packages/client/lib/multi-command.ts b/packages/client/lib/multi-command.ts index 3d45a02fb4d..bb30fddc29e 100644 --- a/packages/client/lib/multi-command.ts +++ b/packages/client/lib/multi-command.ts @@ -6,6 +6,13 @@ export type MULTI_REPLY = { TYPED: 'typed'; }; +export type MULTI_MODE = { + TYPED: 'typed'; + UNTYPED: 'untyped'; +}; + +export type MultiMode = MULTI_MODE[keyof MULTI_MODE]; + export type MultiReply = MULTI_REPLY[keyof MULTI_REPLY]; export type MultiReplyType = T extends MULTI_REPLY['TYPED'] ? REPLIES : Array; diff --git a/packages/client/package.json b/packages/client/package.json index 1332083bf18..3607e489ea2 100644 --- a/packages/client/package.json +++ b/packages/client/package.json @@ -1,6 +1,6 @@ { "name": "@redis/client", - "version": "5.8.2", + "version": "5.8.3", "license": "MIT", "main": "./dist/index.js", "types": "./dist/index.d.ts", diff --git a/packages/entraid/package.json b/packages/entraid/package.json index 9991fa3fb89..1e4fe63f81b 100644 --- a/packages/entraid/package.json +++ b/packages/entraid/package.json @@ -1,6 +1,6 @@ { "name": "@redis/entraid", - "version": "5.8.2", + "version": "5.8.3", "license": "MIT", "main": "./dist/index.js", "types": "./dist/index.d.ts", @@ -22,7 +22,7 @@ "@azure/msal-node": "^2.16.1" }, "peerDependencies": { - "@redis/client": "^5.8.2" + "@redis/client": "^5.8.3" }, "devDependencies": { "@types/express": "^4.17.21", diff --git a/packages/json/package.json b/packages/json/package.json index ff689dd17ee..c8baa48e01b 100644 --- a/packages/json/package.json +++ b/packages/json/package.json @@ -1,6 +1,6 @@ { "name": "@redis/json", - "version": "5.8.2", + "version": "5.8.3", "license": "MIT", "main": "./dist/lib/index.js", "types": "./dist/lib/index.d.ts", @@ -13,7 +13,7 @@ "release": "release-it" }, "peerDependencies": { - "@redis/client": "^5.8.2" + "@redis/client": "^5.8.3" }, "devDependencies": { "@redis/test-utils": "*" diff --git a/packages/redis/package.json b/packages/redis/package.json index 583a6606817..8b289243019 100644 --- a/packages/redis/package.json +++ b/packages/redis/package.json @@ -1,7 +1,7 @@ { "name": "redis", "description": "A modern, high performance Redis client", - "version": "5.8.2", + "version": "5.8.3", "license": "MIT", "main": "./dist/index.js", "types": "./dist/index.d.ts", @@ -13,11 +13,11 @@ "release": "release-it" }, "dependencies": { - "@redis/bloom": "5.8.2", - "@redis/client": "5.8.2", - "@redis/json": "5.8.2", - "@redis/search": "5.8.2", - "@redis/time-series": "5.8.2" + "@redis/bloom": "5.8.3", + "@redis/client": "5.8.3", + "@redis/json": "5.8.3", + "@redis/search": "5.8.3", + "@redis/time-series": "5.8.3" }, "engines": { "node": ">= 18" diff --git a/packages/search/package.json b/packages/search/package.json index 40238080e8b..bf0489d0556 100644 --- a/packages/search/package.json +++ b/packages/search/package.json @@ -1,6 +1,6 @@ { "name": "@redis/search", - "version": "5.8.2", + "version": "5.8.3", "license": "MIT", "main": "./dist/lib/index.js", "types": "./dist/lib/index.d.ts", @@ -14,7 +14,7 @@ "release": "release-it" }, "peerDependencies": { - "@redis/client": "^5.8.2" + "@redis/client": "^5.8.3" }, "devDependencies": { "@redis/test-utils": "*" diff --git a/packages/time-series/package.json b/packages/time-series/package.json index 46ea5b16fef..c77d1d9dea9 100644 --- a/packages/time-series/package.json +++ b/packages/time-series/package.json @@ -1,6 +1,6 @@ { "name": "@redis/time-series", - "version": "5.8.2", + "version": "5.8.3", "license": "MIT", "main": "./dist/lib/index.js", "types": "./dist/lib/index.d.ts", @@ -13,7 +13,7 @@ "release": "release-it" }, "peerDependencies": { - "@redis/client": "^5.8.2" + "@redis/client": "^5.8.3" }, "devDependencies": { "@redis/test-utils": "*"