Skip to content

Commit acd18f2

Browse files
committed
HSCAN VALUES support (v5)
1 parent f925235 commit acd18f2

File tree

3 files changed

+77
-0
lines changed

3 files changed

+77
-0
lines changed
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
import { strict as assert } from 'node:assert';
2+
import testUtils, { GLOBAL } from '../test-utils';
3+
import HSCAN_VALUES from './HSCAN_VALUES';
4+
5+
describe('HSCAN_VALUES', () => {
6+
describe('transformArguments', () => {
7+
it('cusror only', () => {
8+
assert.deepEqual(
9+
HSCAN_VALUES.transformArguments('key', '0'),
10+
['HSCAN', 'key', '0', 'VALUES']
11+
);
12+
});
13+
14+
it('with MATCH', () => {
15+
assert.deepEqual(
16+
HSCAN_VALUES.transformArguments('key', '0', {
17+
MATCH: 'pattern'
18+
}),
19+
['HSCAN', 'key', '0', 'MATCH', 'pattern', 'VALUES']
20+
);
21+
});
22+
23+
it('with COUNT', () => {
24+
assert.deepEqual(
25+
HSCAN_VALUES.transformArguments('key', '0', {
26+
COUNT: 1
27+
}),
28+
['HSCAN', 'key', '0', 'COUNT', '1', 'VALUES']
29+
);
30+
});
31+
32+
it('with MATCH & COUNT', () => {
33+
assert.deepEqual(
34+
HSCAN_VALUES.transformArguments('key', '0', {
35+
MATCH: 'pattern',
36+
COUNT: 1
37+
}),
38+
['HSCAN', 'key', '0', 'MATCH', 'pattern', 'COUNT', '1', 'VALUES']
39+
);
40+
});
41+
});
42+
43+
testUtils.testWithClient('client.hScanValues', async client => {
44+
const [, reply] = await Promise.all([
45+
client.hSet('key', 'field', 'value'),
46+
client.hScanValues('key', '0')
47+
]);
48+
49+
assert.deepEqual(reply, {
50+
cursor: '0',
51+
entries: [
52+
'field',
53+
]
54+
});
55+
}, GLOBAL.SERVERS.OPEN);
56+
});
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
import { RedisArgument, BlobStringReply, Command } from '../RESP/types';
2+
import { ScanCommonOptions, pushScanArguments } from './SCAN';
3+
4+
export default {
5+
FIRST_KEY_INDEX: 1,
6+
IS_READ_ONLY: true,
7+
transformArguments(
8+
key: RedisArgument,
9+
cursor: RedisArgument,
10+
options?: ScanCommonOptions
11+
) {
12+
const args = pushScanArguments(['HSCAN', key], cursor, options);
13+
args.push('VALUES');
14+
15+
return args;
16+
},
17+
transformReply: undefined as unknown as () => [BlobStringReply, Array<BlobStringReply>]
18+
} as const satisfies Command;

packages/client/lib/commands/index.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -144,6 +144,7 @@ import HRANDFIELD_COUNT_WITHVALUES from './HRANDFIELD_COUNT_WITHVALUES';
144144
import HRANDFIELD_COUNT from './HRANDFIELD_COUNT';
145145
import HRANDFIELD from './HRANDFIELD';
146146
import HSCAN from './HSCAN';
147+
import HSCAN_VALUES from './HSCAN_VALUES';
147148
import HSET from './HSET';
148149
import HSETNX from './HSETNX';
149150
import HSTRLEN from './HSTRLEN';
@@ -623,6 +624,8 @@ export default {
623624
hRandField: HRANDFIELD,
624625
HSCAN,
625626
hScan: HSCAN,
627+
HSCAN_VALUES,
628+
hScanValues: HSCAN_VALUES,
626629
HSET,
627630
hSet: HSET,
628631
HSETNX,

0 commit comments

Comments
 (0)