From 17fdb8c66714292ae398d1919d142e1628730833 Mon Sep 17 00:00:00 2001 From: Pavel Pashov <60297174+PavelPashov@users.noreply.github.com> Date: Wed, 1 Oct 2025 16:33:22 +0300 Subject: [PATCH 1/8] fix: add typed/untyped mode support for multi-commands (#3084) --- packages/client/lib/client/index.ts | 6 +++--- packages/client/lib/client/multi-command.ts | 19 ++++++++++++++++--- packages/client/lib/client/pool.ts | 6 ++++-- packages/client/lib/multi-command.ts | 7 +++++++ 4 files changed, 30 insertions(+), 8 deletions(-) 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; From 4fd4ed1f247eb4a8e163f9970f9114a51dd5e363 Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Thu, 2 Oct 2025 12:13:56 +0000 Subject: [PATCH 2/8] Release client@5.8.3 --- package-lock.json | 14 +++++++++++++- packages/client/package.json | 2 +- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/package-lock.json b/package-lock.json index 736abe70a46..6b2ef007b39 100644 --- a/package-lock.json +++ b/package-lock.json @@ -7351,7 +7351,7 @@ }, "packages/client": { "name": "@redis/client", - "version": "5.8.2", + "version": "5.8.3", "license": "MIT", "dependencies": { "cluster-key-slot": "1.1.2" @@ -7449,6 +7449,18 @@ "node": ">= 18" } }, + "packages/redis/node_modules/@redis/client": { + "version": "5.8.2", + "resolved": "https://registry.npmjs.org/@redis/client/-/client-5.8.2.tgz", + "integrity": "sha512-WtMScno3+eBpTac1Uav2zugXEoXqaU23YznwvFgkPwBQVwEHTDgOG7uEAObtZ/Nyn8SmAMbqkEubJaMOvnqdsQ==", + "license": "MIT", + "dependencies": { + "cluster-key-slot": "1.1.2" + }, + "engines": { + "node": ">= 18" + } + }, "packages/search": { "name": "@redis/search", "version": "5.8.2", 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", From 33b463d4ce15d7904a23cbb83b6b7088d1cca2c7 Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Thu, 2 Oct 2025 12:14:02 +0000 Subject: [PATCH 3/8] Release bloom@5.8.3 --- package-lock.json | 16 ++++++++++++++-- packages/bloom/package.json | 4 ++-- 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index 6b2ef007b39..7c8c7fd37ad 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,7 +7346,7 @@ "node": ">= 18" }, "peerDependencies": { - "@redis/client": "^5.8.2" + "@redis/client": "^5.8.3" } }, "packages/client": { @@ -7449,6 +7449,18 @@ "node": ">= 18" } }, + "packages/redis/node_modules/@redis/bloom": { + "version": "5.8.2", + "resolved": "https://registry.npmjs.org/@redis/bloom/-/bloom-5.8.2.tgz", + "integrity": "sha512-855DR0ChetZLarblio5eM0yLwxA9Dqq50t8StXKp5bAtLT0G+rZ+eRzzqxl37sPqQKjUudSYypz55o6nNhbz0A==", + "license": "MIT", + "engines": { + "node": ">= 18" + }, + "peerDependencies": { + "@redis/client": "^5.8.2" + } + }, "packages/redis/node_modules/@redis/client": { "version": "5.8.2", "resolved": "https://registry.npmjs.org/@redis/client/-/client-5.8.2.tgz", 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": "*" From 2bd2aed7c6e4bc3d511c28990432fed3f78766ec Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Thu, 2 Oct 2025 12:14:08 +0000 Subject: [PATCH 4/8] Release json@5.8.3 --- package-lock.json | 16 ++++++++++++++-- packages/json/package.json | 4 ++-- 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index 7c8c7fd37ad..137b52cd41b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -7423,7 +7423,7 @@ }, "packages/json": { "name": "@redis/json", - "version": "5.8.2", + "version": "5.8.3", "license": "MIT", "devDependencies": { "@redis/test-utils": "*" @@ -7432,7 +7432,7 @@ "node": ">= 18" }, "peerDependencies": { - "@redis/client": "^5.8.2" + "@redis/client": "^5.8.3" } }, "packages/redis": { @@ -7473,6 +7473,18 @@ "node": ">= 18" } }, + "packages/redis/node_modules/@redis/json": { + "version": "5.8.2", + "resolved": "https://registry.npmjs.org/@redis/json/-/json-5.8.2.tgz", + "integrity": "sha512-uxpVfas3I0LccBX9rIfDgJ0dBrUa3+0Gc8sEwmQQH0vHi7C1Rx1Qn8Nv1QWz5bohoeIXMICFZRcyDONvum2l/w==", + "license": "MIT", + "engines": { + "node": ">= 18" + }, + "peerDependencies": { + "@redis/client": "^5.8.2" + } + }, "packages/search": { "name": "@redis/search", "version": "5.8.2", 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": "*" From ba0e62f80321524827a6b95c55ef645d3005800e Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Thu, 2 Oct 2025 12:14:14 +0000 Subject: [PATCH 5/8] Release search@5.8.3 --- package-lock.json | 16 ++++++++++++++-- packages/search/package.json | 4 ++-- 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index 137b52cd41b..de977de6909 100644 --- a/package-lock.json +++ b/package-lock.json @@ -7485,9 +7485,21 @@ "@redis/client": "^5.8.2" } }, + "packages/redis/node_modules/@redis/search": { + "version": "5.8.2", + "resolved": "https://registry.npmjs.org/@redis/search/-/search-5.8.2.tgz", + "integrity": "sha512-cNv7HlgayavCBXqPXgaS97DRPVWFznuzsAmmuemi2TMCx5scwLiP50TeZvUS06h/MG96YNPe6A0Zt57yayfxwA==", + "license": "MIT", + "engines": { + "node": ">= 18" + }, + "peerDependencies": { + "@redis/client": "^5.8.2" + } + }, "packages/search": { "name": "@redis/search", - "version": "5.8.2", + "version": "5.8.3", "license": "MIT", "devDependencies": { "@redis/test-utils": "*" @@ -7496,7 +7508,7 @@ "node": ">= 18" }, "peerDependencies": { - "@redis/client": "^5.8.2" + "@redis/client": "^5.8.3" } }, "packages/test-utils": { 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": "*" From 1d78b3cfc2004a240e662af502fc3cb15d68c0bc Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Thu, 2 Oct 2025 12:14:20 +0000 Subject: [PATCH 6/8] Release time-series@5.8.3 --- package-lock.json | 16 ++++++++++++++-- packages/time-series/package.json | 4 ++-- 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index de977de6909..9b16a00c1a1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -7497,6 +7497,18 @@ "@redis/client": "^5.8.2" } }, + "packages/redis/node_modules/@redis/time-series": { + "version": "5.8.2", + "resolved": "https://registry.npmjs.org/@redis/time-series/-/time-series-5.8.2.tgz", + "integrity": "sha512-g2NlHM07fK8H4k+613NBsk3y70R2JIM2dPMSkhIjl2Z17SYvaYKdusz85d7VYOrZBWtDrHV/WD2E3vGu+zni8A==", + "license": "MIT", + "engines": { + "node": ">= 18" + }, + "peerDependencies": { + "@redis/client": "^5.8.2" + } + }, "packages/search": { "name": "@redis/search", "version": "5.8.3", @@ -7577,7 +7589,7 @@ }, "packages/time-series": { "name": "@redis/time-series", - "version": "5.8.2", + "version": "5.8.3", "license": "MIT", "devDependencies": { "@redis/test-utils": "*" @@ -7586,7 +7598,7 @@ "node": ">= 18" }, "peerDependencies": { - "@redis/client": "^5.8.2" + "@redis/client": "^5.8.3" } } } 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": "*" From 435caf9ea8a5d40f6e9e4f8f6843a3acdf6e98d9 Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Thu, 2 Oct 2025 12:14:26 +0000 Subject: [PATCH 7/8] Release entraid@5.8.3 --- package-lock.json | 4 ++-- packages/entraid/package.json | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index 9b16a00c1a1..cfb79bab2c9 100644 --- a/package-lock.json +++ b/package-lock.json @@ -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": { 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", From 9d0215fd5e01f188fd71c2e6a7b58bb360b9fe64 Mon Sep 17 00:00:00 2001 From: GitHub Action Date: Thu, 2 Oct 2025 12:14:31 +0000 Subject: [PATCH 8/8] Release redis@5.8.3 --- package-lock.json | 72 ++++--------------------------------- packages/redis/package.json | 12 +++---- 2 files changed, 12 insertions(+), 72 deletions(-) diff --git a/package-lock.json b/package-lock.json index cfb79bab2c9..fb7ec21ee6b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -7436,79 +7436,19 @@ } }, "packages/redis": { - "version": "5.8.2", - "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" - }, - "engines": { - "node": ">= 18" - } - }, - "packages/redis/node_modules/@redis/bloom": { - "version": "5.8.2", - "resolved": "https://registry.npmjs.org/@redis/bloom/-/bloom-5.8.2.tgz", - "integrity": "sha512-855DR0ChetZLarblio5eM0yLwxA9Dqq50t8StXKp5bAtLT0G+rZ+eRzzqxl37sPqQKjUudSYypz55o6nNhbz0A==", - "license": "MIT", - "engines": { - "node": ">= 18" - }, - "peerDependencies": { - "@redis/client": "^5.8.2" - } - }, - "packages/redis/node_modules/@redis/client": { - "version": "5.8.2", - "resolved": "https://registry.npmjs.org/@redis/client/-/client-5.8.2.tgz", - "integrity": "sha512-WtMScno3+eBpTac1Uav2zugXEoXqaU23YznwvFgkPwBQVwEHTDgOG7uEAObtZ/Nyn8SmAMbqkEubJaMOvnqdsQ==", + "version": "5.8.3", "license": "MIT", "dependencies": { - "cluster-key-slot": "1.1.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" } }, - "packages/redis/node_modules/@redis/json": { - "version": "5.8.2", - "resolved": "https://registry.npmjs.org/@redis/json/-/json-5.8.2.tgz", - "integrity": "sha512-uxpVfas3I0LccBX9rIfDgJ0dBrUa3+0Gc8sEwmQQH0vHi7C1Rx1Qn8Nv1QWz5bohoeIXMICFZRcyDONvum2l/w==", - "license": "MIT", - "engines": { - "node": ">= 18" - }, - "peerDependencies": { - "@redis/client": "^5.8.2" - } - }, - "packages/redis/node_modules/@redis/search": { - "version": "5.8.2", - "resolved": "https://registry.npmjs.org/@redis/search/-/search-5.8.2.tgz", - "integrity": "sha512-cNv7HlgayavCBXqPXgaS97DRPVWFznuzsAmmuemi2TMCx5scwLiP50TeZvUS06h/MG96YNPe6A0Zt57yayfxwA==", - "license": "MIT", - "engines": { - "node": ">= 18" - }, - "peerDependencies": { - "@redis/client": "^5.8.2" - } - }, - "packages/redis/node_modules/@redis/time-series": { - "version": "5.8.2", - "resolved": "https://registry.npmjs.org/@redis/time-series/-/time-series-5.8.2.tgz", - "integrity": "sha512-g2NlHM07fK8H4k+613NBsk3y70R2JIM2dPMSkhIjl2Z17SYvaYKdusz85d7VYOrZBWtDrHV/WD2E3vGu+zni8A==", - "license": "MIT", - "engines": { - "node": ">= 18" - }, - "peerDependencies": { - "@redis/client": "^5.8.2" - } - }, "packages/search": { "name": "@redis/search", "version": "5.8.3", 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"