You've already forked node-redis
mirror of
https://github.com/redis/node-redis.git
synced 2025-08-06 02:15:48 +03:00
fix #2561
This commit is contained in:
@@ -131,7 +131,7 @@ Some command arguments/replies have changed to align more closely to data types
|
||||
- `LCS IDX`: `length` has been changed to `len`, `matches` has been changed from `Array<{ key1: RangeReply; key2: RangeReply; }>` to `Array<[key1: RangeReply, key2: RangeReply]>`
|
||||
- `HEXISTS`: `boolean` -> `number` [^boolean-to-number]
|
||||
- `HRANDFIELD_COUNT_WITHVALUES`: `Record<BlobString, BlobString>` -> `Array<{ field: BlobString; value: BlobString; }>` (it can return duplicates).
|
||||
- `SCAN`, `HSCAN`, `SSCAN`, and `ZSCAN`: cursor type is `string` instead of `number`?
|
||||
- `SCAN`, `HSCAN`, `SSCAN`, and `ZSCAN`: `cursor` type is `string | Buffer` instead of `number`
|
||||
- `HSETNX`: `boolean` -> `number` [^boolean-to-number]
|
||||
- `ZINTER`: instead of `client.ZINTER('key', { WEIGHTS: [1] })` use `client.ZINTER({ key: 'key', weight: 1 }])`
|
||||
- `ZINTER_WITHSCORES`: instead of `client.ZINTER_WITHSCORES('key', { WEIGHTS: [1] })` use `client.ZINTER_WITHSCORES({ key: 'key', weight: 1 }])`
|
||||
|
@@ -6,14 +6,14 @@ describe('HSCAN', () => {
|
||||
describe('transformArguments', () => {
|
||||
it('cusror only', () => {
|
||||
assert.deepEqual(
|
||||
HSCAN.transformArguments('key', 0),
|
||||
HSCAN.transformArguments('key', '0'),
|
||||
['HSCAN', 'key', '0']
|
||||
);
|
||||
});
|
||||
|
||||
it('with MATCH', () => {
|
||||
assert.deepEqual(
|
||||
HSCAN.transformArguments('key', 0, {
|
||||
HSCAN.transformArguments('key', '0', {
|
||||
MATCH: 'pattern'
|
||||
}),
|
||||
['HSCAN', 'key', '0', 'MATCH', 'pattern']
|
||||
@@ -22,7 +22,7 @@ describe('HSCAN', () => {
|
||||
|
||||
it('with COUNT', () => {
|
||||
assert.deepEqual(
|
||||
HSCAN.transformArguments('key', 0, {
|
||||
HSCAN.transformArguments('key', '0', {
|
||||
COUNT: 1
|
||||
}),
|
||||
['HSCAN', 'key', '0', 'COUNT', '1']
|
||||
@@ -31,7 +31,7 @@ describe('HSCAN', () => {
|
||||
|
||||
it('with MATCH & COUNT', () => {
|
||||
assert.deepEqual(
|
||||
HSCAN.transformArguments('key', 0, {
|
||||
HSCAN.transformArguments('key', '0', {
|
||||
MATCH: 'pattern',
|
||||
COUNT: 1
|
||||
}),
|
||||
@@ -41,16 +41,17 @@ describe('HSCAN', () => {
|
||||
});
|
||||
|
||||
testUtils.testWithClient('client.hScan', async client => {
|
||||
await client.hSet('key', 'field', 'value');
|
||||
assert.deepEqual(
|
||||
await client.hScan('key', 0),
|
||||
{
|
||||
cursor: 0,
|
||||
const [, reply] = await Promise.all([
|
||||
client.hSet('key', 'field', 'value'),
|
||||
client.hScan('key', '0')
|
||||
]);
|
||||
|
||||
assert.deepEqual(reply, {
|
||||
cursor: '0',
|
||||
entries: [{
|
||||
field: 'field',
|
||||
value: 'value'
|
||||
}]
|
||||
}
|
||||
);
|
||||
});
|
||||
}, GLOBAL.SERVERS.OPEN);
|
||||
});
|
||||
|
@@ -11,7 +11,7 @@ export default {
|
||||
IS_READ_ONLY: true,
|
||||
transformArguments(
|
||||
key: RedisArgument,
|
||||
cursor: number,
|
||||
cursor: RedisArgument,
|
||||
options?: ScanCommonOptions
|
||||
) {
|
||||
return pushScanArguments(['HSCAN', key], cursor, options);
|
||||
@@ -27,7 +27,7 @@ export default {
|
||||
}
|
||||
|
||||
return {
|
||||
cursor: Number(cursor),
|
||||
cursor,
|
||||
entries
|
||||
};
|
||||
}
|
||||
|
@@ -6,14 +6,14 @@ describe('SCAN', () => {
|
||||
describe('transformArguments', () => {
|
||||
it('cusror only', () => {
|
||||
assert.deepEqual(
|
||||
SCAN.transformArguments(0),
|
||||
SCAN.transformArguments('0'),
|
||||
['SCAN', '0']
|
||||
);
|
||||
});
|
||||
|
||||
it('with MATCH', () => {
|
||||
assert.deepEqual(
|
||||
SCAN.transformArguments(0, {
|
||||
SCAN.transformArguments('0', {
|
||||
MATCH: 'pattern'
|
||||
}),
|
||||
['SCAN', '0', 'MATCH', 'pattern']
|
||||
@@ -22,7 +22,7 @@ describe('SCAN', () => {
|
||||
|
||||
it('with COUNT', () => {
|
||||
assert.deepEqual(
|
||||
SCAN.transformArguments(0, {
|
||||
SCAN.transformArguments('0', {
|
||||
COUNT: 1
|
||||
}),
|
||||
['SCAN', '0', 'COUNT', '1']
|
||||
@@ -31,7 +31,7 @@ describe('SCAN', () => {
|
||||
|
||||
it('with TYPE', () => {
|
||||
assert.deepEqual(
|
||||
SCAN.transformArguments(0, {
|
||||
SCAN.transformArguments('0', {
|
||||
TYPE: 'stream'
|
||||
}),
|
||||
['SCAN', '0', 'TYPE', 'stream']
|
||||
@@ -40,7 +40,7 @@ describe('SCAN', () => {
|
||||
|
||||
it('with MATCH & COUNT & TYPE', () => {
|
||||
assert.deepEqual(
|
||||
SCAN.transformArguments(0, {
|
||||
SCAN.transformArguments('0', {
|
||||
MATCH: 'pattern',
|
||||
COUNT: 1,
|
||||
TYPE: 'stream'
|
||||
@@ -52,9 +52,9 @@ describe('SCAN', () => {
|
||||
|
||||
testUtils.testAll('scan', async client => {
|
||||
assert.deepEqual(
|
||||
await client.scan(0),
|
||||
await client.scan('0'),
|
||||
{
|
||||
cursor: 0,
|
||||
cursor: '0',
|
||||
keys: []
|
||||
}
|
||||
);
|
||||
|
@@ -7,7 +7,7 @@ export interface ScanCommonOptions {
|
||||
|
||||
export function pushScanArguments(
|
||||
args: CommandArguments,
|
||||
cursor: number,
|
||||
cursor: RedisArgument,
|
||||
options?: ScanOptions
|
||||
): CommandArguments {
|
||||
args.push(cursor.toString());
|
||||
@@ -30,7 +30,7 @@ export interface ScanOptions extends ScanCommonOptions {
|
||||
export default {
|
||||
FIRST_KEY_INDEX: undefined,
|
||||
IS_READ_ONLY: true,
|
||||
transformArguments(cursor: number, options?: ScanOptions) {
|
||||
transformArguments(cursor: string, options?: ScanOptions) {
|
||||
const args = pushScanArguments(['SCAN'], cursor, options);
|
||||
|
||||
if (options?.TYPE) {
|
||||
@@ -41,7 +41,7 @@ export default {
|
||||
},
|
||||
transformReply([cursor, keys]: [BlobStringReply, ArrayReply<BlobStringReply>]) {
|
||||
return {
|
||||
cursor: Number(cursor),
|
||||
cursor,
|
||||
keys
|
||||
};
|
||||
}
|
||||
|
@@ -6,14 +6,14 @@ describe('SSCAN', () => {
|
||||
describe('transformArguments', () => {
|
||||
it('cusror only', () => {
|
||||
assert.deepEqual(
|
||||
SSCAN.transformArguments('key', 0),
|
||||
SSCAN.transformArguments('key', '0'),
|
||||
['SSCAN', 'key', '0']
|
||||
);
|
||||
});
|
||||
|
||||
it('with MATCH', () => {
|
||||
assert.deepEqual(
|
||||
SSCAN.transformArguments('key', 0, {
|
||||
SSCAN.transformArguments('key', '0', {
|
||||
MATCH: 'pattern'
|
||||
}),
|
||||
['SSCAN', 'key', '0', 'MATCH', 'pattern']
|
||||
@@ -22,7 +22,7 @@ describe('SSCAN', () => {
|
||||
|
||||
it('with COUNT', () => {
|
||||
assert.deepEqual(
|
||||
SSCAN.transformArguments('key', 0, {
|
||||
SSCAN.transformArguments('key', '0', {
|
||||
COUNT: 1
|
||||
}),
|
||||
['SSCAN', 'key', '0', 'COUNT', '1']
|
||||
@@ -31,7 +31,7 @@ describe('SSCAN', () => {
|
||||
|
||||
it('with MATCH & COUNT', () => {
|
||||
assert.deepEqual(
|
||||
SSCAN.transformArguments('key', 0, {
|
||||
SSCAN.transformArguments('key', '0', {
|
||||
MATCH: 'pattern',
|
||||
COUNT: 1
|
||||
}),
|
||||
@@ -42,9 +42,9 @@ describe('SSCAN', () => {
|
||||
|
||||
testUtils.testAll('sScan', async client => {
|
||||
assert.deepEqual(
|
||||
await client.sScan('key', 0),
|
||||
await client.sScan('key', '0'),
|
||||
{
|
||||
cursor: 0,
|
||||
cursor: '0',
|
||||
members: []
|
||||
}
|
||||
);
|
||||
|
@@ -6,14 +6,14 @@ export default {
|
||||
IS_READ_ONLY: true,
|
||||
transformArguments(
|
||||
key: RedisArgument,
|
||||
cursor: number,
|
||||
cursor: RedisArgument,
|
||||
options?: ScanCommonOptions
|
||||
) {
|
||||
return pushScanArguments(['SSCAN', key], cursor, options);
|
||||
},
|
||||
transformReply([cursor, members]: [BlobStringReply, Array<BlobStringReply>]) {
|
||||
return {
|
||||
cursor: Number(cursor),
|
||||
cursor,
|
||||
members
|
||||
};
|
||||
}
|
||||
|
@@ -6,14 +6,14 @@ describe('ZSCAN', () => {
|
||||
describe('transformArguments', () => {
|
||||
it('cusror only', () => {
|
||||
assert.deepEqual(
|
||||
ZSCAN.transformArguments('key', 0),
|
||||
ZSCAN.transformArguments('key', '0'),
|
||||
['ZSCAN', 'key', '0']
|
||||
);
|
||||
});
|
||||
|
||||
it('with MATCH', () => {
|
||||
assert.deepEqual(
|
||||
ZSCAN.transformArguments('key', 0, {
|
||||
ZSCAN.transformArguments('key', '0', {
|
||||
MATCH: 'pattern'
|
||||
}),
|
||||
['ZSCAN', 'key', '0', 'MATCH', 'pattern']
|
||||
@@ -22,7 +22,7 @@ describe('ZSCAN', () => {
|
||||
|
||||
it('with COUNT', () => {
|
||||
assert.deepEqual(
|
||||
ZSCAN.transformArguments('key', 0, {
|
||||
ZSCAN.transformArguments('key', '0', {
|
||||
COUNT: 1
|
||||
}),
|
||||
['ZSCAN', 'key', '0', 'COUNT', '1']
|
||||
@@ -31,7 +31,7 @@ describe('ZSCAN', () => {
|
||||
|
||||
it('with MATCH & COUNT', () => {
|
||||
assert.deepEqual(
|
||||
ZSCAN.transformArguments('key', 0, {
|
||||
ZSCAN.transformArguments('key', '0', {
|
||||
MATCH: 'pattern',
|
||||
COUNT: 1
|
||||
}),
|
||||
@@ -42,9 +42,9 @@ describe('ZSCAN', () => {
|
||||
|
||||
testUtils.testWithClient('zScan', async client => {
|
||||
assert.deepEqual(
|
||||
await client.zScan('key', 0),
|
||||
await client.zScan('key', '0'),
|
||||
{
|
||||
cursor: 0,
|
||||
cursor: '0',
|
||||
members: []
|
||||
}
|
||||
);
|
||||
|
@@ -12,14 +12,14 @@ export default {
|
||||
IS_READ_ONLY: true,
|
||||
transformArguments(
|
||||
key: RedisArgument,
|
||||
cursor: number,
|
||||
cursor: RedisArgument,
|
||||
options?: ScanCommonOptions
|
||||
) {
|
||||
return pushScanArguments(['ZSCAN', key], cursor, options);
|
||||
},
|
||||
transformReply([cursor, rawMembers]: [BlobStringReply, ArrayReply<BlobStringReply>]) {
|
||||
return {
|
||||
cursor: Number(cursor),
|
||||
cursor,
|
||||
members: transformSortedSetReply[2](rawMembers)
|
||||
};
|
||||
}
|
||||
|
Reference in New Issue
Block a user