@@ -3,6 +3,7 @@ import RedisMultiCommand, { MULTI_REPLY, MultiReply, MultiReplyType } from '../m
3
3
import { ReplyWithTypeMapping , CommandReply , Command , CommandArguments , CommanderConfig , RedisFunctions , RedisModules , RedisScripts , RespVersions , TransformReply , RedisScript , RedisFunction , TypeMapping } from '../RESP/types' ;
4
4
import { attachConfig , functionArgumentsPrefix , getTransformReply } from '../commander' ;
5
5
import { RedisSentinelType } from './types' ;
6
+ import { BasicCommandParser } from '../client/parser' ;
6
7
7
8
type CommandSignature <
8
9
REPLIES extends Array < unknown > ,
@@ -87,8 +88,18 @@ export type RedisSentinelMultiCommandType<
87
88
export default class RedisSentinelMultiCommand < REPLIES = [ ] > {
88
89
private static _createCommand ( command : Command , resp : RespVersions ) {
89
90
const transformReply = getTransformReply ( command , resp ) ;
91
+
90
92
return function ( this : RedisSentinelMultiCommand , ...args : Array < unknown > ) {
91
- const redisArgs = command . transformArguments ( ...args ) ;
93
+ let redisArgs : CommandArguments = [ ] ;
94
+ if ( command . parseCommand ) {
95
+ const parser = new BasicCommandParser ( resp ) ;
96
+ command . parseCommand ( parser , ...args ) ;
97
+ redisArgs = parser . redisArgs ;
98
+ redisArgs . preserve = parser . preserve ;
99
+ } else {
100
+ redisArgs = command . transformArguments ( ...args ) ;
101
+ }
102
+
92
103
return this . addCommand (
93
104
command . IS_READ_ONLY ,
94
105
redisArgs ,
@@ -99,8 +110,19 @@ export default class RedisSentinelMultiCommand<REPLIES = []> {
99
110
100
111
private static _createModuleCommand ( command : Command , resp : RespVersions ) {
101
112
const transformReply = getTransformReply ( command , resp ) ;
113
+
102
114
return function ( this : { _self : RedisSentinelMultiCommand } , ...args : Array < unknown > ) {
103
- const redisArgs = command . transformArguments ( ...args ) ;
115
+ let redisArgs : CommandArguments = [ ] ;
116
+
117
+ if ( command . parseCommand ) {
118
+ const parser = new BasicCommandParser ( resp ) ;
119
+ command . parseCommand ( parser , ...args ) ;
120
+ redisArgs = parser . redisArgs ;
121
+ redisArgs . preserve = parser . preserve ;
122
+ } else {
123
+ redisArgs = command . transformArguments ( ...args ) ;
124
+ }
125
+
104
126
return this . _self . addCommand (
105
127
command . IS_READ_ONLY ,
106
128
redisArgs ,
@@ -110,12 +132,24 @@ export default class RedisSentinelMultiCommand<REPLIES = []> {
110
132
}
111
133
112
134
private static _createFunctionCommand ( name : string , fn : RedisFunction , resp : RespVersions ) {
113
- const prefix = functionArgumentsPrefix ( name , fn ) ,
114
- transformReply = getTransformReply ( fn , resp ) ;
135
+ const prefix = functionArgumentsPrefix ( name , fn ) ;
136
+ const transformReply = getTransformReply ( fn , resp ) ;
137
+
115
138
return function ( this : { _self : RedisSentinelMultiCommand } , ...args : Array < unknown > ) {
116
- const fnArgs = fn . transformArguments ( ...args ) ;
139
+ let fnArgs : CommandArguments = [ ] ;
140
+
141
+ if ( fn . parseCommand ) {
142
+ const parser = new BasicCommandParser ( resp ) ;
143
+ fn . parseCommand ( parser , ...args ) ;
144
+ fnArgs = parser . redisArgs ;
145
+ fnArgs . preserve = parser . preserve ;
146
+ } else {
147
+ fnArgs = fn . transformArguments ( ...args ) ;
148
+ }
149
+
117
150
const redisArgs : CommandArguments = prefix . concat ( fnArgs ) ;
118
151
redisArgs . preserve = fnArgs . preserve ;
152
+
119
153
return this . _self . addCommand (
120
154
fn . IS_READ_ONLY ,
121
155
redisArgs ,
@@ -126,8 +160,19 @@ export default class RedisSentinelMultiCommand<REPLIES = []> {
126
160
127
161
private static _createScriptCommand ( script : RedisScript , resp : RespVersions ) {
128
162
const transformReply = getTransformReply ( script , resp ) ;
163
+
129
164
return function ( this : RedisSentinelMultiCommand , ...args : Array < unknown > ) {
130
- const scriptArgs = script . transformArguments ( ...args ) ;
165
+ let scriptArgs : CommandArguments = [ ] ;
166
+
167
+ if ( script . parseCommand ) {
168
+ const parser = new BasicCommandParser ( resp ) ;
169
+ script . parseCommand ( parser , ...args ) ;
170
+ scriptArgs = parser . redisArgs ;
171
+ scriptArgs . preserve = parser . preserve ;
172
+ } else {
173
+ scriptArgs = script . transformArguments ( ...args ) ;
174
+ }
175
+
131
176
this . _setState (
132
177
script . IS_READ_ONLY
133
178
) ;
@@ -136,6 +181,7 @@ export default class RedisSentinelMultiCommand<REPLIES = []> {
136
181
scriptArgs ,
137
182
transformReply
138
183
) ;
184
+
139
185
return this ;
140
186
} ;
141
187
}
0 commit comments