You've already forked node-redis
mirror of
https://github.com/redis/node-redis.git
synced 2025-08-03 04:01:40 +03:00
* chore: update Redis version from 8.2-RC1-pre to 8.2-rc1 * feat: implement XDELEX command for Redis 8.2 * feat: implement XACKDEL command for Redis 8.2 * refactor: create shared stream deletion types for Redis 8.2 commands * feat: add Redis 8.2 deletion policies to XTRIM command * feat: add Redis 8.2 deletion policies to XADD commands * fix: correct XDELEX command method name and test parameter
63 lines
1.8 KiB
TypeScript
63 lines
1.8 KiB
TypeScript
import { CommandParser } from '../client/parser';
|
|
import { NumberReply, Command, RedisArgument } from '../RESP/types';
|
|
import { StreamDeletionPolicy } from './common-stream.types';
|
|
|
|
/**
|
|
* Options for the XTRIM command
|
|
*
|
|
* @property strategyModifier - Exact ('=') or approximate ('~') trimming
|
|
* @property LIMIT - Maximum number of entries to trim in one call (Redis 6.2+)
|
|
* @property policy - Policy to apply when deleting entries (optional, defaults to KEEPREF)
|
|
*/
|
|
export interface XTrimOptions {
|
|
strategyModifier?: '=' | '~';
|
|
/** added in 6.2 */
|
|
LIMIT?: number;
|
|
/** added in 8.2 */
|
|
policy?: StreamDeletionPolicy;
|
|
}
|
|
|
|
/**
|
|
* Command for trimming a stream to a specified length or minimum ID
|
|
*/
|
|
export default {
|
|
IS_READ_ONLY: false,
|
|
/**
|
|
* Constructs the XTRIM command to trim a stream by length or minimum ID
|
|
*
|
|
* @param parser - The command parser
|
|
* @param key - The stream key
|
|
* @param strategy - Trim by maximum length (MAXLEN) or minimum ID (MINID)
|
|
* @param threshold - Maximum length or minimum ID threshold
|
|
* @param options - Additional options for trimming
|
|
* @returns Number of entries removed from the stream
|
|
* @see https://redis.io/commands/xtrim/
|
|
*/
|
|
parseCommand(
|
|
parser: CommandParser,
|
|
key: RedisArgument,
|
|
strategy: 'MAXLEN' | 'MINID',
|
|
threshold: number,
|
|
options?: XTrimOptions
|
|
) {
|
|
parser.push('XTRIM')
|
|
parser.pushKey(key);
|
|
parser.push(strategy);
|
|
|
|
if (options?.strategyModifier) {
|
|
parser.push(options.strategyModifier);
|
|
}
|
|
|
|
parser.push(threshold.toString());
|
|
|
|
if (options?.LIMIT) {
|
|
parser.push('LIMIT', options.LIMIT.toString());
|
|
}
|
|
|
|
if (options?.policy) {
|
|
parser.push(options.policy);
|
|
}
|
|
},
|
|
transformReply: undefined as unknown as () => NumberReply
|
|
} as const satisfies Command;
|