import { CommandParser } from '@redis/client/dist/lib/client/parser'; import { RedisArgument, SimpleStringReply, Command } from '@redis/client/dist/lib/RESP/types'; interface BfMergeSketch { name: RedisArgument; weight: number; } export type BfMergeSketches = Array | Array; export default { IS_READ_ONLY: false, parseCommand( parser: CommandParser, destination: RedisArgument, source: BfMergeSketches ) { parser.push('CMS.MERGE'); parser.pushKey(destination); parser.push(source.length.toString()); if (isPlainSketches(source)) { parser.pushVariadic(source); } else { for (let i = 0; i < source.length; i++) { parser.push(source[i].name); } parser.push('WEIGHTS'); for (let i = 0; i < source.length; i++) { parser.push(source[i].weight.toString()) } } }, transformReply: undefined as unknown as () => SimpleStringReply<'OK'> } as const satisfies Command; function isPlainSketches(src: BfMergeSketches): src is Array { return typeof src[0] === 'string' || src[0] instanceof Buffer; }