1
0
mirror of https://github.com/redis/node-redis.git synced 2025-08-06 02:15:48 +03:00
This commit is contained in:
Leibale
2023-07-06 11:07:52 -04:00
parent 9e1ec97a55
commit 6ca420f15e
9 changed files with 45 additions and 44 deletions

View File

@@ -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]>` - `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] - `HEXISTS`: `boolean` -> `number` [^boolean-to-number]
- `HRANDFIELD_COUNT_WITHVALUES`: `Record<BlobString, BlobString>` -> `Array<{ field: BlobString; value: BlobString; }>` (it can return duplicates). - `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] - `HSETNX`: `boolean` -> `number` [^boolean-to-number]
- `ZINTER`: instead of `client.ZINTER('key', { WEIGHTS: [1] })` use `client.ZINTER({ key: 'key', weight: 1 }])` - `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 }])` - `ZINTER_WITHSCORES`: instead of `client.ZINTER_WITHSCORES('key', { WEIGHTS: [1] })` use `client.ZINTER_WITHSCORES({ key: 'key', weight: 1 }])`

View File

@@ -6,14 +6,14 @@ describe('HSCAN', () => {
describe('transformArguments', () => { describe('transformArguments', () => {
it('cusror only', () => { it('cusror only', () => {
assert.deepEqual( assert.deepEqual(
HSCAN.transformArguments('key', 0), HSCAN.transformArguments('key', '0'),
['HSCAN', 'key', '0'] ['HSCAN', 'key', '0']
); );
}); });
it('with MATCH', () => { it('with MATCH', () => {
assert.deepEqual( assert.deepEqual(
HSCAN.transformArguments('key', 0, { HSCAN.transformArguments('key', '0', {
MATCH: 'pattern' MATCH: 'pattern'
}), }),
['HSCAN', 'key', '0', 'MATCH', 'pattern'] ['HSCAN', 'key', '0', 'MATCH', 'pattern']
@@ -22,7 +22,7 @@ describe('HSCAN', () => {
it('with COUNT', () => { it('with COUNT', () => {
assert.deepEqual( assert.deepEqual(
HSCAN.transformArguments('key', 0, { HSCAN.transformArguments('key', '0', {
COUNT: 1 COUNT: 1
}), }),
['HSCAN', 'key', '0', 'COUNT', '1'] ['HSCAN', 'key', '0', 'COUNT', '1']
@@ -31,7 +31,7 @@ describe('HSCAN', () => {
it('with MATCH & COUNT', () => { it('with MATCH & COUNT', () => {
assert.deepEqual( assert.deepEqual(
HSCAN.transformArguments('key', 0, { HSCAN.transformArguments('key', '0', {
MATCH: 'pattern', MATCH: 'pattern',
COUNT: 1 COUNT: 1
}), }),
@@ -41,16 +41,17 @@ describe('HSCAN', () => {
}); });
testUtils.testWithClient('client.hScan', async client => { testUtils.testWithClient('client.hScan', async client => {
await client.hSet('key', 'field', 'value'); const [, reply] = await Promise.all([
assert.deepEqual( client.hSet('key', 'field', 'value'),
await client.hScan('key', 0), client.hScan('key', '0')
{ ]);
cursor: 0,
entries: [{ assert.deepEqual(reply, {
field: 'field', cursor: '0',
value: 'value' entries: [{
}] field: 'field',
} value: 'value'
); }]
});
}, GLOBAL.SERVERS.OPEN); }, GLOBAL.SERVERS.OPEN);
}); });

View File

@@ -11,7 +11,7 @@ export default {
IS_READ_ONLY: true, IS_READ_ONLY: true,
transformArguments( transformArguments(
key: RedisArgument, key: RedisArgument,
cursor: number, cursor: RedisArgument,
options?: ScanCommonOptions options?: ScanCommonOptions
) { ) {
return pushScanArguments(['HSCAN', key], cursor, options); return pushScanArguments(['HSCAN', key], cursor, options);
@@ -27,7 +27,7 @@ export default {
} }
return { return {
cursor: Number(cursor), cursor,
entries entries
}; };
} }

View File

@@ -6,14 +6,14 @@ describe('SCAN', () => {
describe('transformArguments', () => { describe('transformArguments', () => {
it('cusror only', () => { it('cusror only', () => {
assert.deepEqual( assert.deepEqual(
SCAN.transformArguments(0), SCAN.transformArguments('0'),
['SCAN', '0'] ['SCAN', '0']
); );
}); });
it('with MATCH', () => { it('with MATCH', () => {
assert.deepEqual( assert.deepEqual(
SCAN.transformArguments(0, { SCAN.transformArguments('0', {
MATCH: 'pattern' MATCH: 'pattern'
}), }),
['SCAN', '0', 'MATCH', 'pattern'] ['SCAN', '0', 'MATCH', 'pattern']
@@ -22,7 +22,7 @@ describe('SCAN', () => {
it('with COUNT', () => { it('with COUNT', () => {
assert.deepEqual( assert.deepEqual(
SCAN.transformArguments(0, { SCAN.transformArguments('0', {
COUNT: 1 COUNT: 1
}), }),
['SCAN', '0', 'COUNT', '1'] ['SCAN', '0', 'COUNT', '1']
@@ -31,7 +31,7 @@ describe('SCAN', () => {
it('with TYPE', () => { it('with TYPE', () => {
assert.deepEqual( assert.deepEqual(
SCAN.transformArguments(0, { SCAN.transformArguments('0', {
TYPE: 'stream' TYPE: 'stream'
}), }),
['SCAN', '0', 'TYPE', 'stream'] ['SCAN', '0', 'TYPE', 'stream']
@@ -40,7 +40,7 @@ describe('SCAN', () => {
it('with MATCH & COUNT & TYPE', () => { it('with MATCH & COUNT & TYPE', () => {
assert.deepEqual( assert.deepEqual(
SCAN.transformArguments(0, { SCAN.transformArguments('0', {
MATCH: 'pattern', MATCH: 'pattern',
COUNT: 1, COUNT: 1,
TYPE: 'stream' TYPE: 'stream'
@@ -52,9 +52,9 @@ describe('SCAN', () => {
testUtils.testAll('scan', async client => { testUtils.testAll('scan', async client => {
assert.deepEqual( assert.deepEqual(
await client.scan(0), await client.scan('0'),
{ {
cursor: 0, cursor: '0',
keys: [] keys: []
} }
); );

View File

@@ -7,7 +7,7 @@ export interface ScanCommonOptions {
export function pushScanArguments( export function pushScanArguments(
args: CommandArguments, args: CommandArguments,
cursor: number, cursor: RedisArgument,
options?: ScanOptions options?: ScanOptions
): CommandArguments { ): CommandArguments {
args.push(cursor.toString()); args.push(cursor.toString());
@@ -30,7 +30,7 @@ export interface ScanOptions extends ScanCommonOptions {
export default { export default {
FIRST_KEY_INDEX: undefined, FIRST_KEY_INDEX: undefined,
IS_READ_ONLY: true, IS_READ_ONLY: true,
transformArguments(cursor: number, options?: ScanOptions) { transformArguments(cursor: string, options?: ScanOptions) {
const args = pushScanArguments(['SCAN'], cursor, options); const args = pushScanArguments(['SCAN'], cursor, options);
if (options?.TYPE) { if (options?.TYPE) {
@@ -41,7 +41,7 @@ export default {
}, },
transformReply([cursor, keys]: [BlobStringReply, ArrayReply<BlobStringReply>]) { transformReply([cursor, keys]: [BlobStringReply, ArrayReply<BlobStringReply>]) {
return { return {
cursor: Number(cursor), cursor,
keys keys
}; };
} }

View File

@@ -6,14 +6,14 @@ describe('SSCAN', () => {
describe('transformArguments', () => { describe('transformArguments', () => {
it('cusror only', () => { it('cusror only', () => {
assert.deepEqual( assert.deepEqual(
SSCAN.transformArguments('key', 0), SSCAN.transformArguments('key', '0'),
['SSCAN', 'key', '0'] ['SSCAN', 'key', '0']
); );
}); });
it('with MATCH', () => { it('with MATCH', () => {
assert.deepEqual( assert.deepEqual(
SSCAN.transformArguments('key', 0, { SSCAN.transformArguments('key', '0', {
MATCH: 'pattern' MATCH: 'pattern'
}), }),
['SSCAN', 'key', '0', 'MATCH', 'pattern'] ['SSCAN', 'key', '0', 'MATCH', 'pattern']
@@ -22,7 +22,7 @@ describe('SSCAN', () => {
it('with COUNT', () => { it('with COUNT', () => {
assert.deepEqual( assert.deepEqual(
SSCAN.transformArguments('key', 0, { SSCAN.transformArguments('key', '0', {
COUNT: 1 COUNT: 1
}), }),
['SSCAN', 'key', '0', 'COUNT', '1'] ['SSCAN', 'key', '0', 'COUNT', '1']
@@ -31,7 +31,7 @@ describe('SSCAN', () => {
it('with MATCH & COUNT', () => { it('with MATCH & COUNT', () => {
assert.deepEqual( assert.deepEqual(
SSCAN.transformArguments('key', 0, { SSCAN.transformArguments('key', '0', {
MATCH: 'pattern', MATCH: 'pattern',
COUNT: 1 COUNT: 1
}), }),
@@ -42,9 +42,9 @@ describe('SSCAN', () => {
testUtils.testAll('sScan', async client => { testUtils.testAll('sScan', async client => {
assert.deepEqual( assert.deepEqual(
await client.sScan('key', 0), await client.sScan('key', '0'),
{ {
cursor: 0, cursor: '0',
members: [] members: []
} }
); );

View File

@@ -6,14 +6,14 @@ export default {
IS_READ_ONLY: true, IS_READ_ONLY: true,
transformArguments( transformArguments(
key: RedisArgument, key: RedisArgument,
cursor: number, cursor: RedisArgument,
options?: ScanCommonOptions options?: ScanCommonOptions
) { ) {
return pushScanArguments(['SSCAN', key], cursor, options); return pushScanArguments(['SSCAN', key], cursor, options);
}, },
transformReply([cursor, members]: [BlobStringReply, Array<BlobStringReply>]) { transformReply([cursor, members]: [BlobStringReply, Array<BlobStringReply>]) {
return { return {
cursor: Number(cursor), cursor,
members members
}; };
} }

View File

@@ -6,14 +6,14 @@ describe('ZSCAN', () => {
describe('transformArguments', () => { describe('transformArguments', () => {
it('cusror only', () => { it('cusror only', () => {
assert.deepEqual( assert.deepEqual(
ZSCAN.transformArguments('key', 0), ZSCAN.transformArguments('key', '0'),
['ZSCAN', 'key', '0'] ['ZSCAN', 'key', '0']
); );
}); });
it('with MATCH', () => { it('with MATCH', () => {
assert.deepEqual( assert.deepEqual(
ZSCAN.transformArguments('key', 0, { ZSCAN.transformArguments('key', '0', {
MATCH: 'pattern' MATCH: 'pattern'
}), }),
['ZSCAN', 'key', '0', 'MATCH', 'pattern'] ['ZSCAN', 'key', '0', 'MATCH', 'pattern']
@@ -22,7 +22,7 @@ describe('ZSCAN', () => {
it('with COUNT', () => { it('with COUNT', () => {
assert.deepEqual( assert.deepEqual(
ZSCAN.transformArguments('key', 0, { ZSCAN.transformArguments('key', '0', {
COUNT: 1 COUNT: 1
}), }),
['ZSCAN', 'key', '0', 'COUNT', '1'] ['ZSCAN', 'key', '0', 'COUNT', '1']
@@ -31,7 +31,7 @@ describe('ZSCAN', () => {
it('with MATCH & COUNT', () => { it('with MATCH & COUNT', () => {
assert.deepEqual( assert.deepEqual(
ZSCAN.transformArguments('key', 0, { ZSCAN.transformArguments('key', '0', {
MATCH: 'pattern', MATCH: 'pattern',
COUNT: 1 COUNT: 1
}), }),
@@ -42,9 +42,9 @@ describe('ZSCAN', () => {
testUtils.testWithClient('zScan', async client => { testUtils.testWithClient('zScan', async client => {
assert.deepEqual( assert.deepEqual(
await client.zScan('key', 0), await client.zScan('key', '0'),
{ {
cursor: 0, cursor: '0',
members: [] members: []
} }
); );

View File

@@ -12,14 +12,14 @@ export default {
IS_READ_ONLY: true, IS_READ_ONLY: true,
transformArguments( transformArguments(
key: RedisArgument, key: RedisArgument,
cursor: number, cursor: RedisArgument,
options?: ScanCommonOptions options?: ScanCommonOptions
) { ) {
return pushScanArguments(['ZSCAN', key], cursor, options); return pushScanArguments(['ZSCAN', key], cursor, options);
}, },
transformReply([cursor, rawMembers]: [BlobStringReply, ArrayReply<BlobStringReply>]) { transformReply([cursor, rawMembers]: [BlobStringReply, ArrayReply<BlobStringReply>]) {
return { return {
cursor: Number(cursor), cursor,
members: transformSortedSetReply[2](rawMembers) members: transformSortedSetReply[2](rawMembers)
}; };
} }