Skip to content

Commit 0b7bac6

Browse files
committed
wip
1 parent 2405923 commit 0b7bac6

32 files changed

+204
-76
lines changed

packages/client/lib/RESP/types.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { CommandParser } from '../client/parser';
2-
import { ParametersOmitFirst } from '../commands/generic-transformers';
2+
import { Tail } from '../commands/generic-transformers';
33
import { BlobError, SimpleError } from '../errors';
44
import { RedisScriptConfig, SHA1 } from '../lua-script';
55
import { RESP_TYPES } from './decoder';
@@ -354,7 +354,7 @@ export type CommandSignature<
354354
COMMAND extends Command,
355355
RESP extends RespVersions,
356356
TYPE_MAPPING extends TypeMapping
357-
> = (...args: ParametersOmitFirst<Parameters<COMMAND['parseCommand']>>) => Promise<ReplyWithTypeMapping<CommandReply<COMMAND, RESP>, TYPE_MAPPING>>;
357+
> = (...args: Tail<Parameters<COMMAND['parseCommand']>>) => Promise<ReplyWithTypeMapping<CommandReply<COMMAND, RESP>, TYPE_MAPPING>>;
358358

359359
// export type CommandWithPoliciesSignature<
360360
// COMMAND extends Command,

packages/client/lib/client/index.spec.ts

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,15 +9,16 @@ import { MATH_FUNCTION, loadMathFunction } from '../commands/FUNCTION_LOAD.spec'
99
import { RESP_TYPES } from '../RESP/decoder';
1010
import { BlobStringReply, NumberReply } from '../RESP/types';
1111
import { SortedSetMember } from '../commands/generic-transformers';
12+
import { CommandParser } from './parser';
1213

1314
export const SQUARE_SCRIPT = defineScript({
1415
SCRIPT:
1516
`local number = redis.call('GET', KEYS[1])
1617
return number * number`,
1718
NUMBER_OF_KEYS: 1,
1819
FIRST_KEY_INDEX: 0,
19-
transformArguments(key: string) {
20-
return [key];
20+
parseCommand(parser: CommandParser, key: string) {
21+
parser.pushKey(key);
2122
},
2223
transformReply: undefined as unknown as () => NumberReply
2324
});
@@ -317,8 +318,8 @@ describe('Client', () => {
317318

318319
const module = {
319320
echo: {
320-
transformArguments(message: string) {
321-
return ['ECHO', message];
321+
parseCommand(parser: CommandParser, message: string) {
322+
parser.push('ECHO', message);
322323
},
323324
transformReply: undefined as unknown as () => BlobStringReply
324325
}

packages/client/lib/client/multi-command.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import RedisMultiCommand, { MULTI_REPLY, MultiReply, MultiReplyType, RedisMultiQ
33
import { ReplyWithTypeMapping, CommandReply, Command, CommandArguments, CommanderConfig, RedisFunctions, RedisModules, RedisScripts, RespVersions, TransformReply, RedisScript, RedisFunction, TypeMapping } from '../RESP/types';
44
import { attachConfig, functionArgumentsPrefix, getTransformReply, scriptArgumentsPrefix } from '../commander';
55
import { BasicCommandParser } from './parser';
6-
import { ParametersOmitFirst } from '../commands/generic-transformers';
6+
import { Tail } from '../commands/generic-transformers';
77

88
type CommandSignature<
99
REPLIES extends Array<unknown>,
@@ -13,7 +13,7 @@ type CommandSignature<
1313
S extends RedisScripts,
1414
RESP extends RespVersions,
1515
TYPE_MAPPING extends TypeMapping
16-
> = (...args: ParametersOmitFirst<Parameters<C['parseCommand']>>) => RedisClientMultiCommandType<
16+
> = (...args: Tail<Parameters<C['parseCommand']>>) => RedisClientMultiCommandType<
1717
[...REPLIES, ReplyWithTypeMapping<CommandReply<C, RESP>, TYPE_MAPPING>],
1818
M,
1919
F,

packages/client/lib/cluster/index.ts

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import { ErrorReply } from '../errors';
1111
import { RedisTcpSocketOptions } from '../client/socket';
1212
import ASKING from '../commands/ASKING';
1313
import { BasicCommandParser } from '../client/parser';
14-
import { ParametersOmitFirst, parseArgs } from '../commands/generic-transformers';
14+
import { parseArgs, Tail } from '../commands/generic-transformers';
1515
;
1616

1717
interface ClusterCommander<
@@ -149,7 +149,7 @@ export default class RedisCluster<
149149
> extends EventEmitter {
150150
static extractFirstKey<C extends Command>(
151151
command: C,
152-
args: ParametersOmitFirst<Parameters<C['parseCommand']>>,
152+
args: Tail<Parameters<C['parseCommand']>>,
153153
redisArgs: Array<RedisArgument>
154154
) {
155155
let key: RedisArgument | undefined;
@@ -163,11 +163,6 @@ export default class RedisCluster<
163163
break;
164164
}
165165

166-
// TODO: remove once request & response policies are ready
167-
if (key === undefined && !command.IS_FORWARD_COMMAND) {
168-
throw new Error('TODO');
169-
}
170-
171166
return key;
172167
}
173168

packages/client/lib/cluster/multi-command.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import RedisMultiCommand, { MULTI_REPLY, MultiReply, MultiReplyType, RedisMultiQ
33
import { ReplyWithTypeMapping, CommandReply, Command, CommandArguments, CommanderConfig, RedisFunctions, RedisModules, RedisScripts, RespVersions, TransformReply, RedisScript, RedisFunction, TypeMapping, RedisArgument } from '../RESP/types';
44
import { attachConfig, functionArgumentsPrefix, getTransformReply } from '../commander';
55
import { BasicCommandParser } from '../client/parser';
6-
import { ParametersOmitFirst } from '../commands/generic-transformers';
6+
import { Tail } from '../commands/generic-transformers';
77

88
type CommandSignature<
99
REPLIES extends Array<unknown>,
@@ -13,7 +13,7 @@ type CommandSignature<
1313
S extends RedisScripts,
1414
RESP extends RespVersions,
1515
TYPE_MAPPING extends TypeMapping
16-
> = (...args: ParametersOmitFirst<Parameters<C['parseCommand']>>) => RedisClusterMultiCommandType<
16+
> = (...args: Tail<Parameters<C['parseCommand']>>) => RedisClusterMultiCommandType<
1717
[...REPLIES, ReplyWithTypeMapping<CommandReply<C, RESP>, TYPE_MAPPING>],
1818
M,
1919
F,

packages/client/lib/commands/ACL_CAT.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ export default {
55
FIRST_KEY_INDEX: undefined,
66
IS_READ_ONLY: true,
77
parseCommand(parser: CommandParser, categoryName?: RedisArgument) {
8-
parser.pushVariadic(['ACL', 'CAT']);
8+
parser.push('ACL', 'CAT');
99
if (categoryName) {
1010
parser.push(categoryName);
1111
}
Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,13 @@
11
import { Command } from '../RESP/types';
22
import { CommandParser } from '../client/parser';
3-
import ZMPOP, { ZMPopArguments } from './ZMPOP';
3+
import ZMPOP, { parseZMPopArguments, ZMPopArguments } from './ZMPOP';
44

55
export default {
66
FIRST_KEY_INDEX: 3,
77
IS_READ_ONLY: false,
88
parseCommand(parser: CommandParser, timeout: number, ...args: ZMPopArguments) {
9-
parser.pushVariadic(['BZMPOP', timeout.toString()]);
10-
parser.pushKeysLength(args[0]);
11-
parser.push(args[1]);
12-
if (args[2]?.COUNT) {
13-
parser.pushVariadic(['COUNT', args[2].COUNT.toString()]);
14-
}
9+
parser.push('BZMPOP', timeout.toString());
10+
parseZMPopArguments(parser, ...args);
1511
},
1612
transformReply: ZMPOP.transformReply
1713
} as const satisfies Command;

packages/client/lib/commands/EVAL.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,8 @@ export function parseEvalArguments(
2727
export default {
2828
FIRST_KEY_INDEX: (_, options?: EvalOptions) => options?.keys?.[0],
2929
IS_READ_ONLY: false,
30-
parseCommand: parseEvalArguments.bind(undefined, 'EVAL'),
30+
parseCommand(parser: CommandParser, script: RedisArgument, options?: EvalOptions) {
31+
return parseEvalArguments('EVAL', parser, script, options);
32+
},
3133
transformReply: undefined as unknown as () => ReplyUnion
3234
} as const satisfies Command;
Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,12 @@
1-
import { Command } from '../RESP/types';
2-
import EVAL, { parseEvalArguments } from './EVAL';
1+
import { CommandParser } from '../client/parser';
2+
import { Command, RedisArgument } from '../RESP/types';
3+
import EVAL, { EvalOptions, parseEvalArguments } from './EVAL';
34

45
export default {
56
FIRST_KEY_INDEX: EVAL.FIRST_KEY_INDEX,
67
IS_READ_ONLY: false,
7-
parseCommand: parseEvalArguments.bind(undefined, 'EVALSHA'),
8+
parseCommand(parser: CommandParser, script: RedisArgument, options?: EvalOptions) {
9+
return parseEvalArguments('EVALSHA', parser, script, options);
10+
},
811
transformReply: EVAL.transformReply
912
} as const satisfies Command;
Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,12 @@
1-
import { Command } from '../RESP/types';
2-
import EVAL, { parseEvalArguments } from './EVAL';
1+
import { CommandParser } from '../client/parser';
2+
import { Command, RedisArgument } from '../RESP/types';
3+
import EVAL, { EvalOptions, parseEvalArguments } from './EVAL';
34

45
export default {
56
FIRST_KEY_INDEX: EVAL.FIRST_KEY_INDEX,
67
IS_READ_ONLY: true,
7-
parseCommand: parseEvalArguments.bind(undefined, 'EVALSHA_RO'),
8+
parseCommand(parser: CommandParser, script: RedisArgument, options?: EvalOptions) {
9+
return parseEvalArguments('EVALSHA_RO', parser, script, options);
10+
},
811
transformReply: EVAL.transformReply
912
} as const satisfies Command;

0 commit comments

Comments
 (0)