diff --git a/lib/client.ts b/lib/client.ts index 008fdad624..6444db4d64 100644 --- a/lib/client.ts +++ b/lib/client.ts @@ -6,9 +6,8 @@ import RedisMultiCommand, { MultiQueuedCommand, RedisMultiCommandType } from './ import EventEmitter from 'events'; import { CommandOptions, commandOptions, isCommandOptions } from './command-options'; import { RedisLuaScript, RedisLuaScripts } from './lua-script'; -import { ScanOptions } from './commands/generic-transformers'; +import { ScanOptions, ZMember } from './commands/generic-transformers'; import { ScanCommandOptions } from './commands/SCAN'; -import { ZMember } from './commands/ZADD'; export interface RedisClientOptions { socket?: RedisSocketOptions; diff --git a/lib/commands/BZPOPMAX.ts b/lib/commands/BZPOPMAX.ts index 46a422ee45..4895efc517 100644 --- a/lib/commands/BZPOPMAX.ts +++ b/lib/commands/BZPOPMAX.ts @@ -1,5 +1,4 @@ -import { transformReplyNumberInfinity } from './generic-transformers'; -import { ZMember } from './ZADD'; +import { transformReplyNumberInfinity, ZMember } from './generic-transformers'; export const FIRST_KEY_INDEX = 1; diff --git a/lib/commands/BZPOPMIN.ts b/lib/commands/BZPOPMIN.ts index ec25e8a5c0..c729a7625c 100644 --- a/lib/commands/BZPOPMIN.ts +++ b/lib/commands/BZPOPMIN.ts @@ -1,5 +1,4 @@ -import { transformReplyNumberInfinity } from './generic-transformers'; -import { ZMember } from './ZADD'; +import { transformReplyNumberInfinity, ZMember } from './generic-transformers'; export const FIRST_KEY_INDEX = 1; diff --git a/lib/commands/HRANDFIELD.spec.ts b/lib/commands/HRANDFIELD.spec.ts index a7ca8204c2..6203b507b1 100644 --- a/lib/commands/HRANDFIELD.spec.ts +++ b/lib/commands/HRANDFIELD.spec.ts @@ -3,27 +3,11 @@ import { TestRedisServers, itWithClient } from '../test-utils'; import { transformArguments } from './HRANDFIELD'; describe('HRANDFIELD', () => { - describe('transformArguments', () => { - it('simple', () => { - assert.deepEqual( - transformArguments('key'), - ['HRANDFIELD', 'key'] - ); - }); - - it('with count', () => { - assert.deepEqual( - transformArguments('key', 1), - ['HRANDFIELD', 'key', '1'] - ); - }); - - it('with count & values', () => { - assert.deepEqual( - transformArguments('key', 1, true), - ['HRANDFIELD', 'key', '1', 'WITHVALUES'] - ); - }); + it('transformArguments', () => { + assert.deepEqual( + transformArguments('key'), + ['HRANDFIELD', 'key'] + ); }); itWithClient(TestRedisServers.OPEN, 'client.hRandField', async client => { diff --git a/lib/commands/HRANDFIELD.ts b/lib/commands/HRANDFIELD.ts index 8d7ef21fdd..558fb7e1fb 100644 --- a/lib/commands/HRANDFIELD.ts +++ b/lib/commands/HRANDFIELD.ts @@ -1,21 +1,9 @@ -import { transformReplyStringArray } from './generic-transformers'; +import { transformReplyString } from './generic-transformers'; export const FIRST_KEY_INDEX = 1; -export function transformArguments(key: string, count?: number, withValues?: boolean): Array { - const args = ['HRANDFIELD', key]; - if (count) { - args.push(count.toString()); - - if (withValues) { - args.push('WITHVALUES'); - } - } - - return args; +export function transformArguments(key: string): Array { + return ['HRANDFIELD', key]; } -export function transformReply(reply: null | string | Array): null | string | Array { - // TODO: convert to object when `withValues`? - return reply; -}; +export const transformReply = transformReplyString; \ No newline at end of file diff --git a/lib/commands/HRANDFIELD_COUNT.spec.ts b/lib/commands/HRANDFIELD_COUNT.spec.ts new file mode 100644 index 0000000000..a971143524 --- /dev/null +++ b/lib/commands/HRANDFIELD_COUNT.spec.ts @@ -0,0 +1,19 @@ +import { strict as assert } from 'assert'; +import { TestRedisServers, itWithClient } from '../test-utils'; +import { transformArguments } from './HRANDFIELD_COUNT'; + +describe('HRANDFIELD COUNT', () => { + it('transformArguments', () => { + assert.deepEqual( + transformArguments('key', 1), + ['HRANDFIELD', 'key', '1'] + ); + }); + + itWithClient(TestRedisServers.OPEN, 'client.hRandFieldCount', async client => { + assert.equal( + await client.hRandFieldCount('key', 1), + null + ); + }); +}); diff --git a/lib/commands/HRANDFIELD_COUNT.ts b/lib/commands/HRANDFIELD_COUNT.ts new file mode 100644 index 0000000000..095435b99a --- /dev/null +++ b/lib/commands/HRANDFIELD_COUNT.ts @@ -0,0 +1,14 @@ +import { transformArguments as transformHRandFieldArguments } from './HRANDFIELD'; + +export { FIRST_KEY_INDEX } from './HRANDFIELD'; + +export function transformArguments(key: string, count: number): Array { + return [ + ...transformHRandFieldArguments(key), + count.toString() + ]; +} + +export function transformReply(reply: Array | null): Array | null { + return reply; +} diff --git a/lib/commands/HRANDFIELD_COUNT_WITHVALUES.spec.ts b/lib/commands/HRANDFIELD_COUNT_WITHVALUES.spec.ts new file mode 100644 index 0000000000..47145dc30e --- /dev/null +++ b/lib/commands/HRANDFIELD_COUNT_WITHVALUES.spec.ts @@ -0,0 +1,19 @@ +import { strict as assert } from 'assert'; +import { TestRedisServers, itWithClient } from '../test-utils'; +import { transformArguments } from './HRANDFIELD_COUNT_WITHVALUES'; + +describe('HRANDFIELD COUNT WITHVALUES', () => { + it('transformArguments', () => { + assert.deepEqual( + transformArguments('key', 1), + ['HRANDFIELD', 'key', '1', 'WITHVALUES'] + ); + }); + + itWithClient(TestRedisServers.OPEN, 'client.hRandFieldCountWithValues', async client => { + assert.equal( + await client.hRandFieldCountWithValues('key', 1), + null + ); + }); +}); diff --git a/lib/commands/HRANDFIELD_COUNT_WITHVALUES.ts b/lib/commands/HRANDFIELD_COUNT_WITHVALUES.ts new file mode 100644 index 0000000000..ac299d2a1f --- /dev/null +++ b/lib/commands/HRANDFIELD_COUNT_WITHVALUES.ts @@ -0,0 +1,17 @@ +import { transformReplyTupels, TupelsObject } from './generic-transformers'; +import { transformArguments as transformHRandFieldCountArguments } from './HRANDFIELD_COUNT'; + +export { FIRST_KEY_INDEX } from './HRANDFIELD_COUNT'; + +export function transformArguments(key: string, count: number): Array { + return [ + ...transformHRandFieldCountArguments(key, count), + 'WITHVALUES' + ]; +} + +export function transformReply(reply: Array | null): TupelsObject | null { + if (reply === null) return null; + + return transformReplyTupels(reply); +} diff --git a/lib/commands/SRANDMEMBER.spec.ts b/lib/commands/SRANDMEMBER.spec.ts index fa61d437a0..5c359f73f9 100644 --- a/lib/commands/SRANDMEMBER.spec.ts +++ b/lib/commands/SRANDMEMBER.spec.ts @@ -3,20 +3,11 @@ import { TestRedisServers, itWithClient } from '../test-utils'; import { transformArguments } from './SRANDMEMBER'; describe('SRANDMEMBER', () => { - describe('transformArguments', () => { - it('simple', () => { - assert.deepEqual( - transformArguments('key'), - ['SRANDMEMBER', 'key'] - ); - }); - - it('with count', () => { - assert.deepEqual( - transformArguments('key', 2), - ['SRANDMEMBER', 'key', '2'] - ); - }); + it('transformArguments', () => { + assert.deepEqual( + transformArguments('key'), + ['SRANDMEMBER', 'key'] + ); }); itWithClient(TestRedisServers.OPEN, 'client.sRandMember', async client => { diff --git a/lib/commands/SRANDMEMBER.ts b/lib/commands/SRANDMEMBER.ts index e93bbfe414..2e8cd53927 100644 --- a/lib/commands/SRANDMEMBER.ts +++ b/lib/commands/SRANDMEMBER.ts @@ -1,16 +1,9 @@ -import { transformReplyStringArray } from './generic-transformers'; +import { transformReplyStringNull } from './generic-transformers'; export const FIRST_KEY_INDEX = 1; -export function transformArguments(key: string, count?: number): Array { - const args = ['SRANDMEMBER', key]; - - if (typeof count === 'number') { - args.push(count.toString()); - } - - return args; +export function transformArguments(key: string): Array { + return ['SRANDMEMBER', key]; } -// TODO: without `count` it'll return "bulk string" and not "array" -export const transformReply = transformReplyStringArray; +export const transformReply = transformReplyStringNull; diff --git a/lib/commands/SRANDMEMBER_COUNT.spec.ts b/lib/commands/SRANDMEMBER_COUNT.spec.ts new file mode 100644 index 0000000000..81a4fd45f3 --- /dev/null +++ b/lib/commands/SRANDMEMBER_COUNT.spec.ts @@ -0,0 +1,19 @@ +import { strict as assert } from 'assert'; +import { TestRedisServers, itWithClient } from '../test-utils'; +import { transformArguments } from './SRANDMEMBER_COUNT'; + +describe('SRANDMEMBER COUNT', () => { + it('transformArguments', () => { + assert.deepEqual( + transformArguments('key', 1), + ['SRANDMEMBER', 'key', '1'] + ); + }); + + itWithClient(TestRedisServers.OPEN, 'client.sRandMemberCount', async client => { + assert.deepEqual( + await client.sRandMemberCount('key', 1), + [] + ); + }); +}); diff --git a/lib/commands/SRANDMEMBER_COUNT.ts b/lib/commands/SRANDMEMBER_COUNT.ts new file mode 100644 index 0000000000..b7fa8ebeb3 --- /dev/null +++ b/lib/commands/SRANDMEMBER_COUNT.ts @@ -0,0 +1,13 @@ +import { transformReplyStringArray } from './generic-transformers'; +import { transformArguments as transformSRandMemberArguments } from './SRANDMEMBER'; + +export { FIRST_KEY_INDEX } from './SRANDMEMBER'; + +export function transformArguments(key: string, count: number): Array { + return [ + ...transformSRandMemberArguments(key), + count.toString() + ]; +} + +export const transformReply = transformReplyStringArray; diff --git a/lib/commands/XADD.ts b/lib/commands/XADD.ts index 5e11069e68..e6bacd2355 100644 --- a/lib/commands/XADD.ts +++ b/lib/commands/XADD.ts @@ -1,4 +1,4 @@ -import { StreamMessage, transformReplyString } from './generic-transformers'; +import { TupelsObject, transformReplyString } from './generic-transformers'; export const FIRST_KEY_INDEX = 1; @@ -13,7 +13,7 @@ interface XAddOptions { } } -export function transformArguments(key: string, id: string, message: StreamMessage, options?: XAddOptions): Array { +export function transformArguments(key: string, id: string, message: TupelsObject, options?: XAddOptions): Array { const args = ['XADD', key]; if (options?.NOMKSTREAM) { diff --git a/lib/commands/XINFO_STREAM.ts b/lib/commands/XINFO_STREAM.ts index 274329c4c6..d28c00bd6e 100644 --- a/lib/commands/XINFO_STREAM.ts +++ b/lib/commands/XINFO_STREAM.ts @@ -1,4 +1,4 @@ -import { StreamMessageReply, transformReplyStreamMessage } from './generic-transformers'; +import { StreamMessageReply, transformReplyTupels } from './generic-transformers'; export const FIRST_KEY_INDEX = 2; @@ -27,11 +27,11 @@ export function transformReply(reply: Array): XInfoStreamReply { groups: reply[9], firstEntry: reply[11] ? { id: reply[11][0] ?? null, - message: transformReplyStreamMessage(reply[11][1]) + message: transformReplyTupels(reply[11][1]) } : null, lastEntry: reply[13] ? { id: reply[13][0], - message: transformReplyStreamMessage(reply[13][1]) + message: transformReplyTupels(reply[13][1]) } : null }; } diff --git a/lib/commands/ZADD.ts b/lib/commands/ZADD.ts index ea54efea64..0e43ecaf50 100644 --- a/lib/commands/ZADD.ts +++ b/lib/commands/ZADD.ts @@ -1,4 +1,4 @@ -import { transformArgumentNumberInfinity, transformReplyNumberInfinity } from './generic-transformers'; +import { transformArgumentNumberInfinity, transformReplyNumberInfinity, ZMember } from './generic-transformers'; export const FIRST_KEY_INDEX = 1; @@ -28,11 +28,6 @@ interface INCR { type ZAddOptions = (NX | (XX & LT & GT)) & CH & INCR; -export interface ZMember { - score: number; - value: string; -} - export function transformArguments(key: string, members: ZMember | Array, options?: ZAddOptions): Array { const args = ['ZADD', key]; diff --git a/lib/commands/ZDIFF.spec.ts b/lib/commands/ZDIFF.spec.ts index ae3fef70b5..14b0c780c4 100644 --- a/lib/commands/ZDIFF.spec.ts +++ b/lib/commands/ZDIFF.spec.ts @@ -17,15 +17,6 @@ describe('ZDIFF', () => { ['ZDIFF', '2', '1', '2'] ); }); - - it('WITHSCORES', () => { - assert.deepEqual( - transformArguments('key', { - WITHSCORES: true - }), - ['ZDIFF', '1', 'key', 'WITHSCORES'] - ); - }); }); itWithClient(TestRedisServers.OPEN, 'client.zDiff', async client => { diff --git a/lib/commands/ZDIFF.ts b/lib/commands/ZDIFF.ts index e2637e6054..5086a92e25 100644 --- a/lib/commands/ZDIFF.ts +++ b/lib/commands/ZDIFF.ts @@ -4,11 +4,7 @@ export const FIRST_KEY_INDEX = 2; export const IS_READ_ONLY = true; -interface ZDiffOptions { - WITHSCORES?: true; -} - -export function transformArguments(keys: Array | string, options?: ZDiffOptions): Array { +export function transformArguments(keys: Array | string): Array { const args = ['ZDIFF']; if (typeof keys === 'string') { @@ -17,12 +13,7 @@ export function transformArguments(keys: Array | string, options?: ZDiff args.push(keys.length.toString(), ...keys); } - if (options?.WITHSCORES) { - args.push('WITHSCORES'); - } - return args; } -// TODO: convert to `Array` when "WITHSCORES" export const transformReply = transformReplyStringArray; diff --git a/lib/commands/ZDIFF_WITHSCORES.spec.ts b/lib/commands/ZDIFF_WITHSCORES.spec.ts new file mode 100644 index 0000000000..febb71e4d9 --- /dev/null +++ b/lib/commands/ZDIFF_WITHSCORES.spec.ts @@ -0,0 +1,28 @@ +import { strict as assert } from 'assert'; +import { TestRedisServers, itWithClient } from '../test-utils'; +import { transformArguments } from './ZDIFF_WITHSCORES'; + +describe('ZDIFF WITHSCORES', () => { + describe('transformArguments', () => { + it('string', () => { + assert.deepEqual( + transformArguments('key'), + ['ZDIFF', '1', 'key', 'WITHSCORES'] + ); + }); + + it('array', () => { + assert.deepEqual( + transformArguments(['1', '2']), + ['ZDIFF', '2', '1', '2', 'WITHSCORES'] + ); + }); + }); + + itWithClient(TestRedisServers.OPEN, 'client.zDiffWithScores', async client => { + assert.deepEqual( + await client.zDiffWithScores('key'), + [] + ); + }); +}); diff --git a/lib/commands/ZDIFF_WITHSCORES.ts b/lib/commands/ZDIFF_WITHSCORES.ts new file mode 100644 index 0000000000..26effab718 --- /dev/null +++ b/lib/commands/ZDIFF_WITHSCORES.ts @@ -0,0 +1,13 @@ +import { transformReplySortedSetWithScores } from './generic-transformers'; +import { transformArguments as transformZDiffArguments } from './ZDIFF'; + +export { FIRST_KEY_INDEX, IS_READ_ONLY } from './ZDIFF'; + +export function transformArguments(...args: Parameters): Array { + return [ + ...transformZDiffArguments(...args), + 'WITHSCORES' + ]; +} + +export const transformReply = transformReplySortedSetWithScores; diff --git a/lib/commands/ZINTER.spec.ts b/lib/commands/ZINTER.spec.ts index 0def87cf91..82940cff4f 100644 --- a/lib/commands/ZINTER.spec.ts +++ b/lib/commands/ZINTER.spec.ts @@ -36,23 +36,13 @@ describe('ZINTER', () => { ); }); - it('with WITHSCORES', () => { - assert.deepEqual( - transformArguments('key', { - WITHSCORES: true - }), - ['ZINTER', '1', 'key', 'WITHSCORES'] - ); - }); - - it('with WEIGHTS, AGGREGATE, WITHSCORES', () => { + it('with WEIGHTS, AGGREGATE', () => { assert.deepEqual( transformArguments('key', { WEIGHTS: [1], - AGGREGATE: 'SUM', - WITHSCORES: true + AGGREGATE: 'SUM' }), - ['ZINTER', '1', 'key', 'WEIGHTS', '1', 'AGGREGATE', 'SUM', 'WITHSCORES'] + ['ZINTER', '1', 'key', 'WEIGHTS', '1', 'AGGREGATE', 'SUM'] ); }); }); diff --git a/lib/commands/ZINTER.ts b/lib/commands/ZINTER.ts index 1e56b6d225..a780ec443d 100644 --- a/lib/commands/ZINTER.ts +++ b/lib/commands/ZINTER.ts @@ -7,7 +7,6 @@ export const IS_READ_ONLY = true; interface ZInterOptions { WEIGHTS?: Array; AGGREGATE?: 'SUM' | 'MIN' | 'MAX'; - WITHSCORES?: true; } export function transformArguments(keys: Array | string, options?: ZInterOptions): Array { @@ -30,12 +29,7 @@ export function transformArguments(keys: Array | string, options?: ZInte args.push('AGGREGATE', options?.AGGREGATE); } - if (options?.WITHSCORES) { - args.push('WITHSCORES'); - } - return args; } -// TODO: convert to `Array` when "WITHSCORES" export const transformReply = transformReplyStringArray; diff --git a/lib/commands/ZINTER_WITHSCORES.spec.ts b/lib/commands/ZINTER_WITHSCORES.spec.ts new file mode 100644 index 0000000000..1dbeda9fd3 --- /dev/null +++ b/lib/commands/ZINTER_WITHSCORES.spec.ts @@ -0,0 +1,56 @@ +import { strict as assert } from 'assert'; +import { TestRedisServers, itWithClient } from '../test-utils'; +import { transformArguments } from './ZINTER_WITHSCORES'; + +describe('ZINTER WITHSCORES', () => { + describe('transformArguments', () => { + it('key (string)', () => { + assert.deepEqual( + transformArguments('key'), + ['ZINTER', '1', 'key', 'WITHSCORES'] + ); + }); + + it('keys (array)', () => { + assert.deepEqual( + transformArguments(['1', '2']), + ['ZINTER', '2', '1', '2', 'WITHSCORES'] + ); + }); + + it('with WEIGHTS', () => { + assert.deepEqual( + transformArguments('key', { + WEIGHTS: [1] + }), + ['ZINTER', '1', 'key', 'WEIGHTS', '1', 'WITHSCORES'] + ); + }); + + it('with AGGREGATE', () => { + assert.deepEqual( + transformArguments('key', { + AGGREGATE: 'SUM' + }), + ['ZINTER', '1', 'key', 'AGGREGATE', 'SUM', 'WITHSCORES'] + ); + }); + + it('with WEIGHTS, AGGREGATE', () => { + assert.deepEqual( + transformArguments('key', { + WEIGHTS: [1], + AGGREGATE: 'SUM' + }), + ['ZINTER', '1', 'key', 'WEIGHTS', '1', 'AGGREGATE', 'SUM', 'WITHSCORES'] + ); + }); + }); + + itWithClient(TestRedisServers.OPEN, 'client.zInterWithScores', async client => { + assert.deepEqual( + await client.zInterWithScores('key'), + [] + ); + }); +}); diff --git a/lib/commands/ZINTER_WITHSCORES.ts b/lib/commands/ZINTER_WITHSCORES.ts new file mode 100644 index 0000000000..0a82228fce --- /dev/null +++ b/lib/commands/ZINTER_WITHSCORES.ts @@ -0,0 +1,13 @@ +import { transformReplySortedSetWithScores } from './generic-transformers'; +import { transformArguments as transformZInterArguments } from './ZINTER'; + +export { FIRST_KEY_INDEX, IS_READ_ONLY } from './ZINTER'; + +export function transformArguments(...args: Parameters): Array { + return [ + ...transformZInterArguments(...args), + 'WITHSCORES' + ]; +} + +export const transformReply = transformReplySortedSetWithScores; diff --git a/lib/commands/ZPOPMAX.spec.ts b/lib/commands/ZPOPMAX.spec.ts index aa09858b82..a5986f5da9 100644 --- a/lib/commands/ZPOPMAX.spec.ts +++ b/lib/commands/ZPOPMAX.spec.ts @@ -3,20 +3,11 @@ import { TestRedisServers, itWithClient } from '../test-utils'; import { transformArguments } from './ZPOPMAX'; describe('ZPOPMAX', () => { - describe('transformArguments', () => { - it('simple', () => { - assert.deepEqual( - transformArguments('key'), - ['ZPOPMAX', 'key'] - ); - }); - - it('with count', () => { - assert.deepEqual( - transformArguments('key', 1), - ['ZPOPMAX', 'key', '1'] - ); - }); + it('transformArguments', () => { + assert.deepEqual( + transformArguments('key'), + ['ZPOPMAX', 'key'] + ); }); itWithClient(TestRedisServers.OPEN, 'client.zPopMax', async client => { diff --git a/lib/commands/ZPOPMAX.ts b/lib/commands/ZPOPMAX.ts index d579f21ac3..755c1f4a59 100644 --- a/lib/commands/ZPOPMAX.ts +++ b/lib/commands/ZPOPMAX.ts @@ -1,5 +1,4 @@ -import { transformReplyNumberInfinity } from './generic-transformers'; -import { ZMember } from './ZADD'; +import { transformReplyNumberInfinity, ZMember } from './generic-transformers'; export const FIRST_KEY_INDEX = 1; @@ -16,7 +15,6 @@ export function transformArguments(key: string, count?: number): Array { return args; } -// TODO return type should be `ZMember` when count is 1 or undefined export function transformReply(reply: [string, string] | []): ZMember | null { if (!reply.length) return null; diff --git a/lib/commands/ZPOPMAX_COUNT.spec.ts b/lib/commands/ZPOPMAX_COUNT.spec.ts new file mode 100644 index 0000000000..c0e71977ee --- /dev/null +++ b/lib/commands/ZPOPMAX_COUNT.spec.ts @@ -0,0 +1,19 @@ +import { strict as assert } from 'assert'; +import { TestRedisServers, itWithClient } from '../test-utils'; +import { transformArguments } from './ZPOPMAX_COUNT'; + +describe('ZPOPMAX COUNT', () => { + it('transformArguments', () => { + assert.deepEqual( + transformArguments('key', 1), + ['ZPOPMAX', 'key', '1'] + ); + }); + + itWithClient(TestRedisServers.OPEN, 'client.zPopMaxCount', async client => { + assert.deepEqual( + await client.zPopMaxCount('key', 1), + [] + ); + }); +}); diff --git a/lib/commands/ZPOPMAX_COUNT.ts b/lib/commands/ZPOPMAX_COUNT.ts new file mode 100644 index 0000000000..61ab3213ae --- /dev/null +++ b/lib/commands/ZPOPMAX_COUNT.ts @@ -0,0 +1,14 @@ +import { deepEqual } from 'assert/strict'; +import { transformReplySortedSetWithScores } from './generic-transformers'; +import { transformArguments as transformZPopMaxArguments } from './ZPOPMAX'; + +export { FIRST_KEY_INDEX } from './ZPOPMAX'; + +export function transformArguments(key: string, count: number): Array { + return [ + ...transformZPopMaxArguments(key), + count.toString() + ]; +} + +export const transformReply = transformReplySortedSetWithScores; diff --git a/lib/commands/ZPOPMIN.spec.ts b/lib/commands/ZPOPMIN.spec.ts index 28560c6831..b39f81776f 100644 --- a/lib/commands/ZPOPMIN.spec.ts +++ b/lib/commands/ZPOPMIN.spec.ts @@ -3,20 +3,11 @@ import { TestRedisServers, itWithClient } from '../test-utils'; import { transformArguments } from './ZPOPMIN'; describe('ZPOPMIN', () => { - describe('transformArguments', () => { - it('simple', () => { - assert.deepEqual( - transformArguments('key'), - ['ZPOPMIN', 'key'] - ); - }); - - it('with count', () => { - assert.deepEqual( - transformArguments('key', 1), - ['ZPOPMIN', 'key', '1'] - ); - }); + it('transformArguments', () => { + assert.deepEqual( + transformArguments('key'), + ['ZPOPMIN', 'key'] + ); }); itWithClient(TestRedisServers.OPEN, 'client.zPopMin', async client => { diff --git a/lib/commands/ZPOPMIN.ts b/lib/commands/ZPOPMIN.ts index 5529522882..9e1a7bdfa3 100644 --- a/lib/commands/ZPOPMIN.ts +++ b/lib/commands/ZPOPMIN.ts @@ -1,22 +1,14 @@ -import { transformReplyNumberInfinity } from './generic-transformers'; -import { ZMember } from './ZADD'; +import { transformReplyNumberInfinity, ZMember } from './generic-transformers'; export const FIRST_KEY_INDEX = 1; -export function transformArguments(key: string, count?: number): Array { - const args = [ +export function transformArguments(key: string): Array { + return [ 'ZPOPMIN', key ]; - - if (typeof count === 'number') { - args.push(count.toString()); - } - - return args; } -// TODO return type should be `ZMember` when count is 1 or undefined export function transformReply(reply: [string, string] | []): ZMember | null { if (!reply.length) return null; diff --git a/lib/commands/ZPOPMIN_COUNT.spec.ts b/lib/commands/ZPOPMIN_COUNT.spec.ts new file mode 100644 index 0000000000..1c2745a0fd --- /dev/null +++ b/lib/commands/ZPOPMIN_COUNT.spec.ts @@ -0,0 +1,19 @@ +import { strict as assert } from 'assert'; +import { TestRedisServers, itWithClient } from '../test-utils'; +import { transformArguments } from './ZPOPMIN_COUNT'; + +describe('ZPOPMIN COUNT', () => { + it('transformArguments', () => { + assert.deepEqual( + transformArguments('key', 1), + ['ZPOPMIN', 'key', '1'] + ); + }); + + itWithClient(TestRedisServers.OPEN, 'client.zPopMinCount', async client => { + assert.deepEqual( + await client.zPopMinCount('key', 1), + [] + ); + }); +}); diff --git a/lib/commands/ZPOPMIN_COUNT.ts b/lib/commands/ZPOPMIN_COUNT.ts new file mode 100644 index 0000000000..e313b32dc8 --- /dev/null +++ b/lib/commands/ZPOPMIN_COUNT.ts @@ -0,0 +1,13 @@ +import { transformReplySortedSetWithScores } from './generic-transformers'; +import { transformArguments as transformZPopMinArguments } from './ZPOPMIN'; + +export { FIRST_KEY_INDEX } from './ZPOPMIN'; + +export function transformArguments(key: string, count: number): Array { + return [ + ...transformZPopMinArguments(key), + count.toString() + ]; +} + +export const transformReply = transformReplySortedSetWithScores; diff --git a/lib/commands/ZRANDMEMBER.spec.ts b/lib/commands/ZRANDMEMBER.spec.ts index 631628afdf..406aa4d113 100644 --- a/lib/commands/ZRANDMEMBER.spec.ts +++ b/lib/commands/ZRANDMEMBER.spec.ts @@ -3,27 +3,11 @@ import { TestRedisServers, itWithClient } from '../test-utils'; import { transformArguments } from './ZRANDMEMBER'; describe('ZRANDMEMBER', () => { - describe('transformArguments', () => { - it('simple', () => { - assert.deepEqual( - transformArguments('key'), - ['ZRANDMEMBER', 'key'] - ); - }); - - it('with count', () => { - assert.deepEqual( - transformArguments('key', 1), - ['ZRANDMEMBER', 'key', '1'] - ); - }); - - it('with count, WITHSCORES', () => { - assert.deepEqual( - transformArguments('key', 1, true), - ['ZRANDMEMBER', 'key', '1', 'WITHSCORES'] - ); - }); + it('transformArguments', () => { + assert.deepEqual( + transformArguments('key'), + ['ZRANDMEMBER', 'key'] + ); }); itWithClient(TestRedisServers.OPEN, 'client.zRandMember', async client => { diff --git a/lib/commands/ZRANDMEMBER.ts b/lib/commands/ZRANDMEMBER.ts index 63cdd83956..27bb7cefa5 100644 --- a/lib/commands/ZRANDMEMBER.ts +++ b/lib/commands/ZRANDMEMBER.ts @@ -1,22 +1,11 @@ +import { transformReplyStringNull } from './generic-transformers'; + +export const FIRST_KEY_INDEX = 1; + export const IS_READ_ONLY = true; -export function transformArguments(key: string, count?: number, WITHSCORES?: true): Array { - const args = ['ZRANDMEMBER', key]; - - if (typeof count === 'number') { - args.push(count.toString()); - - if (WITHSCORES) { - args.push('WITHSCORES'); - } - } - - return args; +export function transformArguments(key: string): Array { + return ['ZRANDMEMBER', key]; } -// TODO: string when count is 1 or undefined, array when count is > 1, object when WITHSCORES -type ZRandMemberReply = string | Array | null - -export function transformReply(reply: ZRandMemberReply): ZRandMemberReply { - return reply; -} +export const transformReply = transformReplyStringNull; diff --git a/lib/commands/ZRANDMEMBER_COUNT.spec.ts b/lib/commands/ZRANDMEMBER_COUNT.spec.ts new file mode 100644 index 0000000000..96c68ffd85 --- /dev/null +++ b/lib/commands/ZRANDMEMBER_COUNT.spec.ts @@ -0,0 +1,19 @@ +import { strict as assert } from 'assert'; +import { TestRedisServers, itWithClient } from '../test-utils'; +import { transformArguments } from './ZRANDMEMBER_COUNT'; + +describe('ZRANDMEMBER COUNT', () => { + it('transformArguments', () => { + assert.deepEqual( + transformArguments('key', 1), + ['ZRANDMEMBER', 'key', '1'] + ); + }); + + itWithClient(TestRedisServers.OPEN, 'client.zRandMemberCount', async client => { + assert.equal( + await client.zRandMemberCount('key', 1), + null + ); + }); +}); diff --git a/lib/commands/ZRANDMEMBER_COUNT.ts b/lib/commands/ZRANDMEMBER_COUNT.ts new file mode 100644 index 0000000000..a03356e0e7 --- /dev/null +++ b/lib/commands/ZRANDMEMBER_COUNT.ts @@ -0,0 +1,14 @@ +import { transformArguments as transformZRandMemberArguments } from './ZRANDMEMBER'; + +export { FIRST_KEY_INDEX, IS_READ_ONLY } from './ZRANDMEMBER'; + +export function transformArguments(key: string, count: number): Array { + return [ + ...transformZRandMemberArguments(key), + count.toString() + ]; +} + +export function transformReply(reply: Array | null): Array | null { + return reply; +} diff --git a/lib/commands/ZRANDMEMBER_COUNT_WITHSCORES.spec.ts b/lib/commands/ZRANDMEMBER_COUNT_WITHSCORES.spec.ts new file mode 100644 index 0000000000..9c41ab3e37 --- /dev/null +++ b/lib/commands/ZRANDMEMBER_COUNT_WITHSCORES.spec.ts @@ -0,0 +1,19 @@ +import { strict as assert } from 'assert'; +import { TestRedisServers, itWithClient } from '../test-utils'; +import { transformArguments } from './ZRANDMEMBER_COUNT_WITHSCORES'; + +describe('ZRANDMEMBER COUNT WITHSCORES', () => { + it('transformArguments', () => { + assert.deepEqual( + transformArguments('key', 1), + ['ZRANDMEMBER', 'key', '1', 'WITHSCORES'] + ); + }); + + itWithClient(TestRedisServers.OPEN, 'client.zRandMemberCountWithScores', async client => { + assert.equal( + await client.zRandMemberCountWithScores('key', 1), + null + ); + }); +}); diff --git a/lib/commands/ZRANDMEMBER_COUNT_WITHSCORES.ts b/lib/commands/ZRANDMEMBER_COUNT_WITHSCORES.ts new file mode 100644 index 0000000000..c520b18499 --- /dev/null +++ b/lib/commands/ZRANDMEMBER_COUNT_WITHSCORES.ts @@ -0,0 +1,17 @@ +import { transformReplySortedSetWithScores, ZMember } from './generic-transformers'; +import { transformArguments as transformZRandMemberCountArguments } from './ZRANDMEMBER_COUNT'; + +export { FIRST_KEY_INDEX, IS_READ_ONLY } from './ZRANDMEMBER_COUNT'; + +export function transformArguments(...args: Parameters): Array { + return [ + ...transformZRandMemberCountArguments(...args), + 'WITHSCORES' + ]; +} + +export function transformReply(reply: Array | null): Array | null { + if (reply === null) return null; + + return transformReplySortedSetWithScores(reply); +} diff --git a/lib/commands/ZRANGE.spec.ts b/lib/commands/ZRANGE.spec.ts index a8a3a549c4..d004781cc4 100644 --- a/lib/commands/ZRANGE.spec.ts +++ b/lib/commands/ZRANGE.spec.ts @@ -41,18 +41,6 @@ describe('ZRANGE', () => { ); }); - it('with WITHSCORES', () => { - assert.deepEqual( - transformArguments('src', 0, 1, { - LIMIT: { - offset: 0, - count: 1 - }, - }), - ['ZRANGE', 'src', '0', '1', 'LIMIT', '0', '1'] - ); - }); - it('with BY & REV & LIMIT', () => { assert.deepEqual( transformArguments('src', 0, 1, { diff --git a/lib/commands/ZRANGE.ts b/lib/commands/ZRANGE.ts index 15ff3e2dbe..49d54fc73f 100644 --- a/lib/commands/ZRANGE.ts +++ b/lib/commands/ZRANGE.ts @@ -1,4 +1,4 @@ -import { transformArgumentNumberInfinity, transformReplyNumber, transformReplyStringArray } from './generic-transformers'; +import { transformReplyStringArray } from './generic-transformers'; export const FIRST_KEY_INDEX = 1; @@ -11,15 +11,14 @@ interface ZRangeOptions { offset: number; count: number; }; - WITHSCORES?: true; } -export function transformArguments(src: string, min: number, max: number, options?: ZRangeOptions): Array { +export function transformArguments(src: string, min: string | number, max: string | number, options?: ZRangeOptions): Array { const args = [ 'ZRANGE', src, - transformArgumentNumberInfinity(min), - transformArgumentNumberInfinity(max) + typeof min === 'string' ? min : min.toString(), + typeof max === 'string' ? max : max.toString() ]; switch (options?.BY) { @@ -40,12 +39,7 @@ export function transformArguments(src: string, min: number, max: number, option args.push('LIMIT', options.LIMIT.offset.toString(), options.LIMIT.count.toString()); } - if (options?.WITHSCORES) { - args.push('WITHSCORES'); - } - return args; } -// TODO: convert to `ZMember` when "WITHSCORES" export const transformReply = transformReplyStringArray; diff --git a/lib/commands/ZRANGE_WITHSCORES.spec.ts b/lib/commands/ZRANGE_WITHSCORES.spec.ts new file mode 100644 index 0000000000..4c739b3d3b --- /dev/null +++ b/lib/commands/ZRANGE_WITHSCORES.spec.ts @@ -0,0 +1,65 @@ +import { strict as assert } from 'assert'; +import { TestRedisServers, itWithClient } from '../test-utils'; +import { transformArguments } from './ZRANGE_WITHSCORES'; + +describe('ZRANGE WITHSCORES', () => { + describe('transformArguments', () => { + it('simple', () => { + assert.deepEqual( + transformArguments('src', 0, 1), + ['ZRANGE', 'src', '0', '1', 'WITHSCORES'] + ); + }); + + it('with BY', () => { + assert.deepEqual( + transformArguments('src', 0, 1, { + BY: 'SCORE' + }), + ['ZRANGE', 'src', '0', '1', 'BYSCORE', 'WITHSCORES'] + ); + }); + + it('with REV', () => { + assert.deepEqual( + transformArguments('src', 0, 1, { + REV: true + }), + ['ZRANGE', 'src', '0', '1', 'REV', 'WITHSCORES'] + ); + }); + + it('with LIMIT', () => { + assert.deepEqual( + transformArguments('src', 0, 1, { + LIMIT: { + offset: 0, + count: 1 + } + }), + ['ZRANGE', 'src', '0', '1', 'LIMIT', '0', '1', 'WITHSCORES'] + ); + }); + + it('with BY & REV & LIMIT', () => { + assert.deepEqual( + transformArguments('src', 0, 1, { + BY: 'SCORE', + REV: true, + LIMIT: { + offset: 0, + count: 1 + } + }), + ['ZRANGE', 'src', '0', '1', 'BYSCORE', 'REV', 'LIMIT', '0', '1', 'WITHSCORES'] + ); + }); + }); + + itWithClient(TestRedisServers.OPEN, 'client.zRangeWithScores', async client => { + assert.deepEqual( + await client.zRangeWithScores('src', 0, 1), + [] + ); + }); +}); diff --git a/lib/commands/ZRANGE_WITHSCORES.ts b/lib/commands/ZRANGE_WITHSCORES.ts new file mode 100644 index 0000000000..0f777132f2 --- /dev/null +++ b/lib/commands/ZRANGE_WITHSCORES.ts @@ -0,0 +1,13 @@ +import { transformReplySortedSetWithScores } from './generic-transformers'; +import { transformArguments as transformZRangeArguments } from './ZRANGE'; + +export { FIRST_KEY_INDEX, IS_READ_ONLY } from './ZRANGE'; + +export function transformArguments(...args: Parameters): Array { + return [ + ...transformZRangeArguments(...args), + 'WITHSCORES' + ]; +} + +export const transformReply = transformReplySortedSetWithScores; diff --git a/lib/commands/ZSCAN.ts b/lib/commands/ZSCAN.ts index e27e278acb..2f0bebf10c 100644 --- a/lib/commands/ZSCAN.ts +++ b/lib/commands/ZSCAN.ts @@ -1,5 +1,4 @@ -import { ScanOptions, transformReplyNumberInfinity, transformScanArguments } from './generic-transformers'; -import { ZMember } from './ZADD'; +import { ScanOptions, transformReplyNumberInfinity, transformScanArguments, ZMember } from './generic-transformers'; export const FIRST_KEY_INDEX = 1; diff --git a/lib/commands/ZUNION.spec.ts b/lib/commands/ZUNION.spec.ts index ad9875f661..728d81bbd8 100644 --- a/lib/commands/ZUNION.spec.ts +++ b/lib/commands/ZUNION.spec.ts @@ -35,15 +35,6 @@ describe('ZUNION', () => { ['ZUNION', '1', 'key', 'AGGREGATE', 'SUM'] ); }); - - it('with WITHSCORES', () => { - assert.deepEqual( - transformArguments('key', { - WITHSCORES: true - }), - ['ZUNION', '1', 'key', 'WITHSCORES'] - ); - }); }); itWithClient(TestRedisServers.OPEN, 'client.zUnion', async client => { diff --git a/lib/commands/ZUNION.ts b/lib/commands/ZUNION.ts index 6b0063cb6b..b4bb9cf5e0 100644 --- a/lib/commands/ZUNION.ts +++ b/lib/commands/ZUNION.ts @@ -7,7 +7,6 @@ export const IS_READ_ONLY = true; interface ZUnionOptions { WEIGHTS?: Array; AGGREGATE?: 'SUM' | 'MIN' | 'MAX'; - WITHSCORES?: true; } export function transformArguments(keys: Array | string, options?: ZUnionOptions): Array { @@ -27,12 +26,7 @@ export function transformArguments(keys: Array | string, options?: ZUnio args.push('AGGREGATE', options.AGGREGATE); } - if (options?.WITHSCORES) { - args.push('WITHSCORES'); - } - return args; } -// TODO: convert to `Array` when "WITHSCORES" export const transformReply = transformReplyStringArray; diff --git a/lib/commands/ZUNION_WITHSCORES.spec.ts b/lib/commands/ZUNION_WITHSCORES.spec.ts new file mode 100644 index 0000000000..b20bd85b49 --- /dev/null +++ b/lib/commands/ZUNION_WITHSCORES.spec.ts @@ -0,0 +1,46 @@ +import { strict as assert } from 'assert'; +import { TestRedisServers, itWithClient } from '../test-utils'; +import { transformArguments } from './ZUNION_WITHSCORES'; + +describe('ZUNION WITHSCORES', () => { + describe('transformArguments', () => { + it('key (string)', () => { + assert.deepEqual( + transformArguments('key'), + ['ZUNION', '1', 'key', 'WITHSCORES'] + ); + }); + + it('keys (array)', () => { + assert.deepEqual( + transformArguments(['1', '2']), + ['ZUNION', '2', '1', '2', 'WITHSCORES'] + ); + }); + + it('with WEIGHTS', () => { + assert.deepEqual( + transformArguments('key', { + WEIGHTS: [1] + }), + ['ZUNION', '1', 'key', 'WEIGHTS', '1', 'WITHSCORES'] + ); + }); + + it('with AGGREGATE', () => { + assert.deepEqual( + transformArguments('key', { + AGGREGATE: 'SUM' + }), + ['ZUNION', '1', 'key', 'AGGREGATE', 'SUM', 'WITHSCORES'] + ); + }); + }); + + itWithClient(TestRedisServers.OPEN, 'client.zUnionWithScores', async client => { + assert.deepEqual( + await client.zUnionWithScores('key'), + [] + ); + }); +}); diff --git a/lib/commands/ZUNION_WITHSCORES.ts b/lib/commands/ZUNION_WITHSCORES.ts new file mode 100644 index 0000000000..d0cef45cfb --- /dev/null +++ b/lib/commands/ZUNION_WITHSCORES.ts @@ -0,0 +1,13 @@ +import { transformReplySortedSetWithScores } from './generic-transformers'; +import { transformArguments as transformZUnionArguments } from './ZUNION'; + +export { FIRST_KEY_INDEX, IS_READ_ONLY } from './ZUNION'; + +export function transformArguments(...args: Parameters): Array { + return [ + ...transformZUnionArguments(...args), + 'WITHSCORES' + ]; +} + +export const transformReply = transformReplySortedSetWithScores; diff --git a/lib/commands/generic-transformers.ts b/lib/commands/generic-transformers.ts index 48367c87a1..76e76e0151 100644 --- a/lib/commands/generic-transformers.ts +++ b/lib/commands/generic-transformers.ts @@ -6,6 +6,10 @@ export function transformReplyString(reply: string): string { return reply; } +export function transformReplyStringNull(reply: string | null): string | null { + return reply; +} + export function transformReplyStringArray(reply: Array): Array { return reply; } @@ -89,11 +93,11 @@ export function transformArgumentNumberInfinity(num: number): string { } } -export interface StreamMessage { +export interface TupelsObject { [field: string]: string; } -export function transformReplyStreamMessage(reply: Array): StreamMessage { +export function transformReplyTupels(reply: Array): TupelsObject { const message = Object.create(null); for (let i = 0; i < reply.length; i += 2) { @@ -105,7 +109,7 @@ export function transformReplyStreamMessage(reply: Array): StreamMessage export interface StreamMessageReply { id: string; - message: StreamMessage; + message: TupelsObject; } export type StreamMessagesReply = Array; @@ -116,7 +120,7 @@ export function transformReplyStreamMessages(reply: Array): StreamMessagesR for (let i = 0; i < reply.length; i += 2) { messages.push({ id: reply[i], - message: transformReplyStreamMessage(reply[i + 1]) + message: transformReplyTupels(reply[i + 1]) }); } @@ -138,7 +142,7 @@ export function transformReplyStreamsMessages(reply: Array): StreamsMessage }); } - return streams + return streams; } export function transformReplyStreamsMessagesNull(reply: Array | null): StreamsMessagesReply | null { @@ -146,3 +150,21 @@ export function transformReplyStreamsMessagesNull(reply: Array | null): Str return transformReplyStreamsMessages(reply); } + +export interface ZMember { + score: number; + value: string; +} + +export function transformReplySortedSetWithScores(reply: Array): Array { + const members = []; + + for (let i = 0; i < reply.length; i += 2) { + members.push({ + value: reply[i], + score: transformReplyNumberInfinity(reply[i + 1]) + }); + } + + return members; +} diff --git a/lib/commands/index.ts b/lib/commands/index.ts index b1b3a34223..5b8d145e4d 100644 --- a/lib/commands/index.ts +++ b/lib/commands/index.ts @@ -26,6 +26,8 @@ import * as HINCRBYFLOAT from './HINCRBYFLOAT'; import * as HKEYS from './HKEYS'; import * as HLEN from './HLEN'; import * as HMGET from './HMGET'; +import * as HRANDFIELD_COUNT_WITHVALUES from './HRANDFIELD_COUNT_WITHVALUES'; +import * as HRANDFIELD_COUNT from './HRANDFIELD_COUNT'; import * as HRANDFIELD from './HRANDFIELD'; import * as HSET from './HSET'; import * as HSETNX from './HSETNX'; @@ -63,6 +65,7 @@ import * as SMISMEMBER from './SMISMEMBER'; import * as SMOVE from './SMOVE'; import * as SORT from './SORT'; import * as SPOP from './SPOP'; +import * as SRANDMEMBER_COUNT from './SRANDMEMBER_COUNT'; import * as SRANDMEMBER from './SRANDMEMBER'; import * as SREM from './SREM'; import * as SSCAN from './SSCAN'; @@ -97,16 +100,23 @@ import * as XTRIM from './XTRIM'; import * as ZADD from './ZADD'; import * as ZCARD from './ZCARD'; import * as ZCOUNT from './ZCOUNT'; +import * as ZDIFF_WITHSCORES from './ZDIFF_WITHSCORES'; import * as ZDIFF from './ZDIFF'; import * as ZDIFFSTORE from './ZDIFFSTORE'; import * as ZINCRBY from './ZINCRBY'; +import * as ZINTER_WITHSCORES from './ZINTER_WITHSCORES'; import * as ZINTER from './ZINTER'; import * as ZINTERSTORE from './ZINTERSTORE'; import * as ZLEXCOUNT from './ZLEXCOUNT'; import * as ZMSCORE from './ZMSCORE'; +import * as ZPOPMAX_COUNT from './ZPOPMAX_COUNT'; import * as ZPOPMAX from './ZPOPMAX'; +import * as ZPOPMIN_COUNT from './ZPOPMIN_COUNT'; import * as ZPOPMIN from './ZPOPMIN'; +import * as ZRANDMEMBER_COUNT_WITHSCORES from './ZRANDMEMBER_COUNT_WITHSCORES'; +import * as ZRANDMEMBER_COUNT from './ZRANDMEMBER_COUNT'; import * as ZRANDMEMBER from './ZRANDMEMBER'; +import * as ZRANGE_WITHSCORES from './ZRANGE_WITHSCORES'; import * as ZRANGE from './ZRANGE'; import * as ZRANGESTORE from './ZRANGESTORE'; import * as ZRANK from './ZRANK'; @@ -117,6 +127,7 @@ import * as ZREMRANGEBYSCORE from './ZREMRANGEBYSCORE'; import * as ZREVRANK from './ZREVRANK'; import * as ZSCAN from './ZSCAN'; import * as ZSCORE from './ZSCORE'; +import * as ZUNION_WITHSCORES from './ZUNION_WITHSCORES'; import * as ZUNION from './ZUNION'; import * as ZUNIONSTORE from './ZUNIONSTORE'; @@ -177,6 +188,10 @@ export default { hLen: HLEN, HMGET, hmGet: HMGET, + HRANDFIELD_COUNT_WITHVALUES, + hRandFieldCountWithValues: HRANDFIELD_COUNT_WITHVALUES, + HRANDFIELD_COUNT, + hRandFieldCount: HRANDFIELD_COUNT, HRANDFIELD, hRandField: HRANDFIELD, HSET, @@ -251,6 +266,8 @@ export default { sort: SORT, SPOP, sPop: SPOP, + SRANDMEMBER_COUNT, + sRandMemberCount: SRANDMEMBER_COUNT, SRANDMEMBER, sRandMember: SRANDMEMBER, SREM, @@ -319,12 +336,16 @@ export default { zCard: ZCARD, ZCOUNT, zCount: ZCOUNT, + ZDIFF_WITHSCORES, + zDiffWithScores: ZDIFF_WITHSCORES, ZDIFF, zDiff: ZDIFF, ZDIFFSTORE, zDiffStore: ZDIFFSTORE, ZINCRBY, zIncrBy: ZINCRBY, + ZINTER_WITHSCORES, + zInterWithScores: ZINTER_WITHSCORES, ZINTER, zInter: ZINTER, ZINTERSTORE, @@ -333,12 +354,22 @@ export default { zLexCount: ZLEXCOUNT, ZMSCORE, zmScore: ZMSCORE, + ZPOPMAX_COUNT, + zPopMaxCount: ZPOPMAX_COUNT, ZPOPMAX, zPopMax: ZPOPMAX, + ZPOPMIN_COUNT, + zPopMinCount: ZPOPMIN_COUNT, ZPOPMIN, zPopMin: ZPOPMIN, + ZRANDMEMBER_COUNT_WITHSCORES, + zRandMemberCountWithScores: ZRANDMEMBER_COUNT_WITHSCORES, + ZRANDMEMBER_COUNT, + zRandMemberCount: ZRANDMEMBER_COUNT, ZRANDMEMBER, zRandMember: ZRANDMEMBER, + ZRANGE_WITHSCORES, + zRangeWithScores: ZRANGE_WITHSCORES, ZRANGE, zRange: ZRANGE, ZRANGESTORE, @@ -359,6 +390,8 @@ export default { zScan: ZSCAN, ZSCORE, zScore: ZSCORE, + ZUNION_WITHSCORES, + zUnionWithScores: ZUNION_WITHSCORES, ZUNION, zUnion: ZUNION, ZUNIONSTORE,