1
0
mirror of https://github.com/redis/node-redis.git synced 2025-08-10 11:43:01 +03:00
Files
node-redis/packages/client/lib/commands/XADD.ts
Bobby I. 20c16e0c2c (docs) add jsdoc comments to command parsers (#2984)
* (docs) bloom: add jsdocs for all commands

* (docs) json: add jsdocs

* (docs) search: add jsdocs for all commands

* (docs) jsdocs for std commands

* (docs) jsdoc comments to time series commands
2025-06-03 14:38:07 +03:00

88 lines
2.5 KiB
TypeScript

import { CommandParser } from '../client/parser';
import { RedisArgument, BlobStringReply, Command } from '../RESP/types';
import { Tail } from './generic-transformers';
/**
* Options for the XADD command
*
* @property TRIM - Optional trimming configuration
* @property TRIM.strategy - Trim strategy: MAXLEN (by length) or MINID (by ID)
* @property TRIM.strategyModifier - Exact ('=') or approximate ('~') trimming
* @property TRIM.threshold - Maximum stream length or minimum ID to retain
* @property TRIM.limit - Maximum number of entries to trim in one call
*/
export interface XAddOptions {
TRIM?: {
strategy?: 'MAXLEN' | 'MINID';
strategyModifier?: '=' | '~';
threshold: number;
limit?: number;
};
}
/**
* Parses arguments for the XADD command
*
* @param optional - Optional command modifier
* @param parser - The command parser
* @param key - The stream key
* @param id - Message ID (* for auto-generation)
* @param message - Key-value pairs representing the message fields
* @param options - Additional options for stream trimming
*/
export function parseXAddArguments(
optional: RedisArgument | undefined,
parser: CommandParser,
key: RedisArgument,
id: RedisArgument,
message: Record<string, RedisArgument>,
options?: XAddOptions
) {
parser.push('XADD');
parser.pushKey(key);
if (optional) {
parser.push(optional);
}
if (options?.TRIM) {
if (options.TRIM.strategy) {
parser.push(options.TRIM.strategy);
}
if (options.TRIM.strategyModifier) {
parser.push(options.TRIM.strategyModifier);
}
parser.push(options.TRIM.threshold.toString());
if (options.TRIM.limit) {
parser.push('LIMIT', options.TRIM.limit.toString());
}
}
parser.push(id);
for (const [key, value] of Object.entries(message)) {
parser.push(key, value);
}
}
export default {
IS_READ_ONLY: false,
/**
* Constructs the XADD command to append a new entry to a stream
*
* @param parser - The command parser
* @param key - The stream key
* @param id - Message ID (* for auto-generation)
* @param message - Key-value pairs representing the message fields
* @param options - Additional options for stream trimming
* @returns The ID of the added entry
* @see https://redis.io/commands/xadd/
*/
parseCommand(...args: Tail<Parameters<typeof parseXAddArguments>>) {
return parseXAddArguments(undefined, ...args);
},
transformReply: undefined as unknown as () => BlobStringReply
} as const satisfies Command;