diff --git a/packages/bloom/lib/commands/top-k/LIST.ts b/packages/bloom/lib/commands/top-k/LIST.ts index d8c1654559..8837b86f83 100644 --- a/packages/bloom/lib/commands/top-k/LIST.ts +++ b/packages/bloom/lib/commands/top-k/LIST.ts @@ -1,5 +1,7 @@ export const FIRST_KEY_INDEX = 1; +export const IS_READ_ONLY = true; + export function transformArguments(key: string): Array { return ['TOPK.LIST', key]; } diff --git a/packages/bloom/lib/commands/top-k/LIST_WITHCOUNT.spec.ts b/packages/bloom/lib/commands/top-k/LIST_WITHCOUNT.spec.ts new file mode 100644 index 0000000000..1e55239c24 --- /dev/null +++ b/packages/bloom/lib/commands/top-k/LIST_WITHCOUNT.spec.ts @@ -0,0 +1,30 @@ +import { strict as assert } from 'assert'; +import testUtils, { GLOBAL } from '../../test-utils'; +import { transformArguments } from './LIST_WITHCOUNT'; + +describe('TOPK LIST WITHCOUNT', () => { + testUtils.isVersionGreaterThanHook([2, 2, 9]); + + it('transformArguments', () => { + assert.deepEqual( + transformArguments('key'), + ['TOPK.LIST', 'key', 'WITHCOUNT'] + ); + }); + + testUtils.testWithClient('client.topK.listWithCount', async client => { + const [,, list] = await Promise.all([ + client.topK.reserve('key', 3), + client.topK.add('key', 'item'), + client.topK.listWithCount('key') + ]); + + assert.deepEqual( + list, + [{ + item: 'item', + count: 1 + }] + ); + }, GLOBAL.SERVERS.OPEN); +}); diff --git a/packages/bloom/lib/commands/top-k/LIST_WITHCOUNT.ts b/packages/bloom/lib/commands/top-k/LIST_WITHCOUNT.ts new file mode 100644 index 0000000000..47b7d3848e --- /dev/null +++ b/packages/bloom/lib/commands/top-k/LIST_WITHCOUNT.ts @@ -0,0 +1,26 @@ +export const FIRST_KEY_INDEX = 1; + +export const IS_READ_ONLY = true; + +export function transformArguments(key: string): Array { + return ['TOPK.LIST', key, 'WITHCOUNT']; +} + +type ListWithCountRawReply = Array; + +type ListWithCountReply = Array<{ + item: string, + count: number +}>; + +export function transformReply(rawReply: ListWithCountRawReply): ListWithCountReply { + const reply: ListWithCountReply = []; + for (let i = 0; i < rawReply.length; i++) { + reply.push({ + item: rawReply[i] as string, + count: rawReply[++i] as number + }); + } + + return reply; +} \ No newline at end of file diff --git a/packages/bloom/lib/commands/top-k/RESERVE.ts b/packages/bloom/lib/commands/top-k/RESERVE.ts index 6512db51e0..350d4cd833 100644 --- a/packages/bloom/lib/commands/top-k/RESERVE.ts +++ b/packages/bloom/lib/commands/top-k/RESERVE.ts @@ -1,5 +1,7 @@ export const FIRST_KEY_INDEX = 1; +export const IS_READ_ONLY = true; + interface ReserveOptions { width: number; depth: number; diff --git a/packages/bloom/lib/commands/top-k/index.ts b/packages/bloom/lib/commands/top-k/index.ts index 05d6ba87ea..750c91dfa8 100644 --- a/packages/bloom/lib/commands/top-k/index.ts +++ b/packages/bloom/lib/commands/top-k/index.ts @@ -2,6 +2,7 @@ import * as ADD from './ADD'; import * as COUNT from './COUNT'; import * as INCRBY from './INCRBY'; import * as INFO from './INFO'; +import * as LIST_WITHCOUNT from './LIST_WITHCOUNT'; import * as LIST from './LIST'; import * as QUERY from './QUERY'; import * as RESERVE from './RESERVE'; @@ -15,6 +16,8 @@ export default { incrBy: INCRBY, INFO, info: INFO, + LIST_WITHCOUNT, + listWithCount: LIST_WITHCOUNT, LIST, list: LIST, QUERY,