import { CommandParser } from '../client/parser'; import { RedisArgument, TuplesToMapReply, BlobStringReply, ArrayReply, NumberReply, UnwrapReply, Resp2Reply, Command, TuplesReply } from '../RESP/types'; import LCS from './LCS'; export interface LcsIdxOptions { MINMATCHLEN?: number; } export type LcsIdxRange = TuplesReply<[ start: NumberReply, end: NumberReply ]>; export type LcsIdxMatches = ArrayReply< TuplesReply<[ key1: LcsIdxRange, key2: LcsIdxRange ]> >; export type LcsIdxReply = TuplesToMapReply<[ [BlobStringReply<'matches'>, LcsIdxMatches], [BlobStringReply<'len'>, NumberReply] ]>; export default { IS_READ_ONLY: LCS.IS_READ_ONLY, parseCommand( parser: CommandParser, key1: RedisArgument, key2: RedisArgument, options?: LcsIdxOptions ) { LCS.parseCommand(parser, key1, key2); parser.push('IDX'); if (options?.MINMATCHLEN) { parser.push('MINMATCHLEN', options.MINMATCHLEN.toString()); } }, transformReply: { 2: (reply: UnwrapReply>) => ({ matches: reply[1], len: reply[3] }), 3: undefined as unknown as () => LcsIdxReply } } as const satisfies Command;