diff --git a/packages/client/lib/client/commands.ts b/packages/client/lib/client/commands.ts index 029a5e60f6..0d9f63b003 100644 --- a/packages/client/lib/client/commands.ts +++ b/packages/client/lib/client/commands.ts @@ -33,6 +33,7 @@ import * as CLUSTER_SLOTS from '../commands/CLUSTER_SLOTS'; import * as COMMAND_COUNT from '../commands/COMMAND_COUNT'; import * as COMMAND_GETKEYS from '../commands/COMMAND_GETKEYS'; import * as COMMAND_INFO from '../commands/COMMAND_INFO'; +import * as COMMAND_LIST from '../commands/COMMAND_LIST'; import * as COMMAND from '../commands/COMMAND'; import * as CONFIG_GET from '../commands/CONFIG_GET'; import * as CONFIG_RESETASTAT from '../commands/CONFIG_RESETSTAT'; @@ -151,6 +152,8 @@ export default { commandGetKeys: COMMAND_GETKEYS, COMMAND_INFO, commandInfo: COMMAND_INFO, + COMMAND_LIST, + commandList: COMMAND_LIST, COMMAND, command: COMMAND, CONFIG_GET, diff --git a/packages/client/lib/commands/COMMAND_LIST.spec.ts b/packages/client/lib/commands/COMMAND_LIST.spec.ts new file mode 100644 index 0000000000..ac4fee20c7 --- /dev/null +++ b/packages/client/lib/commands/COMMAND_LIST.spec.ts @@ -0,0 +1,56 @@ +import { strict as assert } from 'assert'; +import testUtils, { GLOBAL } from '../test-utils'; +import { transformArguments, FilterBy } from './COMMAND_LIST'; + +describe('COMMAND LIST', () => { + testUtils.isVersionGreaterThanHook([7, 0]); + + describe('transformArguments', () => { + it('simple', () => { + assert.deepEqual( + transformArguments(), + ['COMMAND', 'LIST'] + ); + }); + + describe('with FILTERBY', () => { + it('MODULE', () => { + assert.deepEqual( + transformArguments({ + filterBy: FilterBy.MODULE, + value: 'json' + }), + ['COMMAND', 'LIST', 'FILTERBY', 'MODULE', 'json'] + ); + }); + + it('ACLCAT', () => { + assert.deepEqual( + transformArguments({ + filterBy: FilterBy.ACLCAT, + value: 'admin' + }), + ['COMMAND', 'LIST', 'FILTERBY', 'ACLCAT', 'admin'] + ); + }); + + it('PATTERN', () => { + assert.deepEqual( + transformArguments({ + filterBy: FilterBy.PATTERN, + value: 'a*' + }), + ['COMMAND', 'LIST', 'FILTERBY', 'PATTERN', 'a*'] + ); + }); + }); + }); + + testUtils.testWithClient('client.commandList', async client => { + const commandList = await client.commandList(); + assert.ok(Array.isArray(commandList)); + for (const command of commandList) { + assert.ok(typeof command === 'string'); + } + }, GLOBAL.SERVERS.OPEN); +}); diff --git a/packages/client/lib/commands/COMMAND_LIST.ts b/packages/client/lib/commands/COMMAND_LIST.ts new file mode 100644 index 0000000000..a197bd1a4c --- /dev/null +++ b/packages/client/lib/commands/COMMAND_LIST.ts @@ -0,0 +1,31 @@ +import { RedisCommandArguments } from '.'; + +export const IS_READ_ONLY = true; + +export enum FilterBy { + MODULE = 'MODULE', + ACLCAT = 'ACLCAT', + PATTERN = 'PATTERN' +} + +interface Filter { + filterBy: FilterBy; + value: string; +} + + +export function transformArguments(filter?: Filter): RedisCommandArguments { + const args = ['COMMAND', 'LIST']; + + if (filter) { + args.push( + 'FILTERBY', + filter.filterBy, + filter.value + ); + } + + return args; +} + +export declare function transformReply(): Array;