Skip to content

Commit b4196fa

Browse files
committed
wip
1 parent d59254e commit b4196fa

12 files changed

+242
-137
lines changed

packages/client/lib/commands/ZADD.spec.ts

Lines changed: 3 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -115,30 +115,17 @@ describe('ZADD', () => {
115115
);
116116
});
117117

118-
it('with INCR', () => {
119-
assert.deepEqual(
120-
ZADD.transformArguments('key', {
121-
value: '1',
122-
score: 1
123-
}, {
124-
INCR: true
125-
}),
126-
['ZADD', 'key', 'INCR', '1', '1']
127-
);
128-
});
129-
130-
it('with condition, comparison, CH, INCR', () => {
118+
it('with condition, comparison, CH', () => {
131119
assert.deepEqual(
132120
ZADD.transformArguments('key', {
133121
value: '1',
134122
score: 1
135123
}, {
136124
condition: 'XX',
137125
comparison: 'LT',
138-
CH: true,
139-
INCR: true
126+
CH: true
140127
}),
141-
['ZADD', 'key', 'XX', 'LT', 'CH', 'INCR', '1', '1']
128+
['ZADD', 'key', 'XX', 'LT', 'CH', '1', '1']
142129
);
143130
});
144131
});

packages/client/lib/commands/ZADD.ts

Lines changed: 16 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { RedisArgument, NumberReply, DoubleReply, Command } from '../RESP/types';
1+
import { RedisArgument, NumberReply, DoubleReply, Command, CommandArguments } from '../RESP/types';
22
import { ZMember, transformDoubleArgument, transformDoubleReply } from './generic-transformers';
33

44
export interface ZAddOptions {
@@ -21,7 +21,6 @@ export interface ZAddOptions {
2121
*/
2222
GT?: boolean;
2323
CH?: boolean;
24-
INCR?: boolean;
2524
}
2625

2726
export default {
@@ -53,26 +52,29 @@ export default {
5352
args.push('CH');
5453
}
5554

56-
if (options?.INCR) {
57-
args.push('INCR');
58-
}
59-
60-
if (Array.isArray(members)) {
61-
for (const member of members) {
62-
pushMember(args, member);
63-
}
64-
} else {
65-
pushMember(args, members);
66-
}
55+
pushMembers(args, members);
6756

6857
return args;
6958
},
7059
transformReply: {
7160
2: transformDoubleReply,
72-
3: undefined as unknown as () => NumberReply | DoubleReply
61+
3: undefined as unknown as () => NumberReply
7362
}
7463
} as const satisfies Command;
7564

65+
export function pushMembers(
66+
args: CommandArguments,
67+
members: ZMember | Array<ZMember>
68+
) {
69+
if (Array.isArray(members)) {
70+
for (const member of members) {
71+
pushMember(args, member);
72+
}
73+
} else {
74+
pushMember(args, members);
75+
}
76+
}
77+
7678
function pushMember(args: Array<RedisArgument>, member: ZMember) {
7779
args.push(
7880
transformDoubleArgument(member.score),
Lines changed: 93 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,93 @@
1+
import { strict as assert } from 'assert';
2+
import testUtils, { GLOBAL } from '../test-utils';
3+
import ZADD_INCR from './ZADD_INCR';
4+
5+
describe('ZADD INCR', () => {
6+
describe('transformArguments', () => {
7+
it('single member', () => {
8+
assert.deepEqual(
9+
ZADD_INCR.transformArguments('key', {
10+
value: '1',
11+
score: 1
12+
}),
13+
['ZADD', 'key', 'INCR', '1', '1']
14+
);
15+
});
16+
17+
it('multiple members', () => {
18+
assert.deepEqual(
19+
ZADD_INCR.transformArguments('key', [{
20+
value: '1',
21+
score: 1
22+
}, {
23+
value: '2',
24+
score: 2
25+
}]),
26+
['ZADD', 'key', 'INCR', '1', '1', '2', '2']
27+
);
28+
});
29+
30+
it('with condition', () => {
31+
assert.deepEqual(
32+
ZADD_INCR.transformArguments('key', {
33+
value: '1',
34+
score: 1
35+
}, {
36+
condition: 'NX'
37+
}),
38+
['ZADD', 'key', 'NX', 'INCR', '1', '1']
39+
);
40+
});
41+
42+
it('with comparison', () => {
43+
assert.deepEqual(
44+
ZADD_INCR.transformArguments('key', {
45+
value: '1',
46+
score: 1
47+
}, {
48+
comparison: 'LT'
49+
}),
50+
['ZADD', 'key', 'LT', 'INCR', '1', '1']
51+
);
52+
});
53+
54+
it('with CH', () => {
55+
assert.deepEqual(
56+
ZADD_INCR.transformArguments('key', {
57+
value: '1',
58+
score: 1
59+
}, {
60+
CH: true
61+
}),
62+
['ZADD', 'key', 'CH', 'INCR', '1', '1']
63+
);
64+
});
65+
66+
it('with condition, comparison, CH', () => {
67+
assert.deepEqual(
68+
ZADD_INCR.transformArguments('key', {
69+
value: '1',
70+
score: 1
71+
}, {
72+
condition: 'XX',
73+
comparison: 'LT',
74+
CH: true
75+
}),
76+
['ZADD', 'key', 'XX', 'LT', 'CH', 'INCR', '1', '1']
77+
);
78+
});
79+
});
80+
81+
testUtils.testAll('zAddIncr', async client => {
82+
assert.equal(
83+
await client.zAddIncr('key', {
84+
value: '1',
85+
score: 1
86+
}),
87+
1
88+
);
89+
}, {
90+
client: GLOBAL.SERVERS.OPEN,
91+
cluster: GLOBAL.CLUSTERS.OPEN
92+
});
93+
});
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
import { RedisArgument, DoubleReply, NullReply, Command } from '../RESP/types';
2+
import { pushMembers } from './ZADD';
3+
import { ZMember, transformDoubleArgument, transformNullableDoubleReply } from './generic-transformers';
4+
5+
export interface ZAddOptions {
6+
condition?: 'NX' | 'XX';
7+
comparison?: 'LT' | 'GT';
8+
CH?: boolean;
9+
}
10+
11+
export default {
12+
FIRST_KEY_INDEX: 1,
13+
transformArguments(
14+
key: RedisArgument,
15+
members: ZMember | Array<ZMember>,
16+
options?: ZAddOptions
17+
) {
18+
const args = ['ZADD', key];
19+
20+
if (options?.condition) {
21+
args.push(options.condition);
22+
}
23+
24+
if (options?.comparison) {
25+
args.push(options.comparison);
26+
}
27+
28+
if (options?.CH) {
29+
args.push('CH');
30+
}
31+
32+
args.push('INCR');
33+
34+
pushMembers(args, members);
35+
36+
return args;
37+
},
38+
transformReply: {
39+
2: transformNullableDoubleReply,
40+
3: undefined as unknown as () => DoubleReply | NullReply
41+
}
42+
} as const satisfies Command;
Lines changed: 9 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,14 @@
1-
import { ArrayReply, BlobStringReply, Command, NumberReply } from '../RESP/types';
1+
import { Command } from '../RESP/types';
22
import ZDIFF from './ZDIFF';
3-
import { transformSortedSetWithScoresReply } from './generic-transformers';
3+
import { transformSortedSetReply } from './generic-transformers';
44

55
export default {
6-
FIRST_KEY_INDEX: 2,
7-
IS_READ_ONLY: true,
8-
transformArguments(keys: Parameters<typeof ZDIFF.transformArguments>[0]) {
9-
const args = ZDIFF.transformArguments(keys);
10-
args.push('WITHSCORES');
11-
return args;
6+
FIRST_KEY_INDEX: ZDIFF.FIRST_KEY_INDEX,
7+
IS_READ_ONLY: ZDIFF.IS_READ_ONLY,
8+
transformArguments(...args: Parameters<typeof ZDIFF.transformArguments>) {
9+
const redisArgs = ZDIFF.transformArguments(...args);
10+
redisArgs.push('WITHSCORES');
11+
return redisArgs;
1212
},
13-
transformReply: {
14-
2: transformSortedSetWithScoresReply,
15-
3: (reply: ArrayReply<[BlobStringReply, NumberReply]>) => {
16-
return reply.map(([value, score]) => ({ value, score }));
17-
}
18-
}
13+
transformReply: transformSortedSetReply
1914
} as const satisfies Command;

packages/client/lib/commands/ZINTERSTORE.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
11

22
import { RedisArgument, NumberReply, Command } from '../RESP/types';
3-
import { pushZInterArguments, ZInterKeyAndWeight, ZInterKeys, ZInterOptions } from './ZINTER';
3+
import { pushZInterArguments, ZInterOptions } from './ZINTER';
4+
import { ZKeys } from './generic-transformers';
45

56
export default {
67
FIRST_KEY_INDEX: 1,
78
transformArguments(
89
destination: RedisArgument,
9-
keys: ZInterKeys<RedisArgument> | ZInterKeys<ZInterKeyAndWeight>,
10+
keys: ZKeys,
1011
options?: ZInterOptions
1112
) {
1213
return pushZInterArguments(['ZINTERSTORE', destination], keys, options);
Lines changed: 3 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,6 @@
1-
// import { RedisCommandArguments } from '.';
2-
// import { transformArguments as transformZInterArguments } from './ZINTER';
3-
4-
// export { FIRST_KEY_INDEX, IS_READ_ONLY } from './ZINTER';
5-
6-
// export function transformArguments(...args: Parameters<typeof transformZInterArguments>): RedisCommandArguments {
7-
// return [
8-
// ...transformZInterArguments(...args),
9-
// 'WITHSCORES'
10-
// ];
11-
// }
12-
13-
14-
15-
// // transformSortedSetWithScoresReply
16-
17-
import { ArrayReply, BlobStringReply, Command, DoubleReply } from '../RESP/types';
1+
import { Command } from '../RESP/types';
182
import ZINTER from './ZINTER';
19-
import { transformSortedSetWithScoresReply } from './generic-transformers';
3+
import { transformSortedSetReply } from './generic-transformers';
204

215
export default {
226
FIRST_KEY_INDEX: ZINTER.FIRST_KEY_INDEX,
@@ -26,13 +10,5 @@ export default {
2610
redisArgs.push('WITHSCORES');
2711
return redisArgs;
2812
},
29-
transformReply: {
30-
2: transformSortedSetWithScoresReply,
31-
3: (reply: ArrayReply<[BlobStringReply, DoubleReply]>) => {
32-
return reply.map(([member, score]) => ({
33-
member,
34-
score
35-
}));
36-
}
37-
}
13+
transformReply: transformSortedSetReply
3814
} as const satisfies Command;
Lines changed: 33 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1,33 +1,36 @@
1-
// import { strict as assert } from 'assert';
2-
// import testUtils, { GLOBAL } from '../test-utils';
3-
// import { transformArguments } from './ZRANGEBYSCORE_WITHSCORES';
1+
import { strict as assert } from 'assert';
2+
import testUtils, { GLOBAL } from '../test-utils';
3+
import ZRANGEBYSCORE_WITHSCORES from './ZRANGEBYSCORE_WITHSCORES';
44

5-
// describe('ZRANGEBYSCORE WITHSCORES', () => {
6-
// describe('transformArguments', () => {
7-
// it('simple', () => {
8-
// assert.deepEqual(
9-
// transformArguments('src', 0, 1),
10-
// ['ZRANGEBYSCORE', 'src', '0', '1', 'WITHSCORES']
11-
// );
12-
// });
5+
describe('ZRANGEBYSCORE WITHSCORES', () => {
6+
describe('transformArguments', () => {
7+
it('simple', () => {
8+
assert.deepEqual(
9+
ZRANGEBYSCORE_WITHSCORES.transformArguments('src', 0, 1),
10+
['ZRANGEBYSCORE', 'src', '0', '1', 'WITHSCORES']
11+
);
12+
});
1313

14-
// it('with LIMIT', () => {
15-
// assert.deepEqual(
16-
// transformArguments('src', 0, 1, {
17-
// LIMIT: {
18-
// offset: 0,
19-
// count: 1
20-
// }
21-
// }),
22-
// ['ZRANGEBYSCORE', 'src', '0', '1', 'LIMIT', '0', '1', 'WITHSCORES']
23-
// );
24-
// });
25-
// });
14+
it('with LIMIT', () => {
15+
assert.deepEqual(
16+
ZRANGEBYSCORE_WITHSCORES.transformArguments('src', 0, 1, {
17+
LIMIT: {
18+
offset: 0,
19+
count: 1
20+
}
21+
}),
22+
['ZRANGEBYSCORE', 'src', '0', '1', 'LIMIT', '0', '1', 'WITHSCORES']
23+
);
24+
});
25+
});
2626

27-
// testUtils.testWithClient('client.zRangeByScoreWithScores', async client => {
28-
// assert.deepEqual(
29-
// await client.zRangeByScoreWithScores('src', 0, 1),
30-
// []
31-
// );
32-
// }, GLOBAL.SERVERS.OPEN);
33-
// });
27+
testUtils.testAll('zRangeByScoreWithScores', async client => {
28+
assert.deepEqual(
29+
await client.zRangeByScoreWithScores('src', 0, 1),
30+
[]
31+
);
32+
}, {
33+
client: GLOBAL.SERVERS.OPEN,
34+
cluster: GLOBAL.CLUSTERS.OPEN
35+
});
36+
});

0 commit comments

Comments
 (0)