import { CommandParser } from '../client/parser'; import { RedisArgument, TuplesToMapReply, BlobStringReply, ArrayReply, NullReply, SetReply, UnwrapReply, Resp2Reply, Command } from '../RESP/types'; export interface FunctionListOptions { LIBRARYNAME?: RedisArgument; } export type FunctionListReplyItem = [ [BlobStringReply<'library_name'>, BlobStringReply | NullReply], [BlobStringReply<'engine'>, BlobStringReply], [BlobStringReply<'functions'>, ArrayReply, BlobStringReply], [BlobStringReply<'description'>, BlobStringReply | NullReply], [BlobStringReply<'flags'>, SetReply], ]>>] ]; export type FunctionListReply = ArrayReply>; export default { NOT_KEYED_COMMAND: true, IS_READ_ONLY: false, parseCommand(parser: CommandParser, options?: FunctionListOptions) { parser.push('FUNCTION', 'LIST'); if (options?.LIBRARYNAME) { parser.push('LIBRARYNAME', options.LIBRARYNAME); } }, transformReply: { 2: (reply: UnwrapReply>) => { return reply.map(library => { const unwrapped = library as unknown as UnwrapReply; return { library_name: unwrapped[1], engine: unwrapped[3], functions: (unwrapped[5] as unknown as UnwrapReply).map(fn => { const unwrapped = fn as unknown as UnwrapReply; return { name: unwrapped[1], description: unwrapped[3], flags: unwrapped[5] }; }) }; }); }, 3: undefined as unknown as () => FunctionListReply } } as const satisfies Command;