| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374 |
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- exports.parseBlockOption = exports.parseSecondsArgument = void 0;
- /**
- * Parses a command parameter to a number.
- * @param arg - The command parameter to parse (number, string, or Buffer)
- * @returns The parsed number, or undefined if parsing fails or arg is undefined
- */
- const parseNumberArgument = (arg) => {
- if (typeof arg === "number") {
- return arg;
- }
- if (Buffer.isBuffer(arg)) {
- return parseNumberArgument(arg.toString());
- }
- if (typeof arg === "string") {
- const value = Number(arg);
- return Number.isFinite(value) ? value : undefined;
- }
- return undefined;
- };
- /**
- * Parses a command parameter to a string.
- * @param arg - The command parameter to parse (string or Buffer)
- * @returns The parsed string, or undefined if arg is not a string/Buffer or is undefined
- */
- const parseStringArgument = (arg) => {
- if (typeof arg === "string") {
- return arg;
- }
- if (Buffer.isBuffer(arg)) {
- return arg.toString();
- }
- return undefined;
- };
- /**
- * Parses a command parameter as seconds and converts to milliseconds.
- * @param arg - The command parameter representing seconds
- * @returns The value in milliseconds, 0 if value is <= 0, or undefined if parsing fails
- */
- const parseSecondsArgument = (arg) => {
- const value = parseNumberArgument(arg);
- if (value === undefined) {
- return undefined;
- }
- if (value <= 0) {
- return 0;
- }
- return value * 1000;
- };
- exports.parseSecondsArgument = parseSecondsArgument;
- /**
- * Parses the BLOCK option from Redis command arguments (e.g., XREAD, XREADGROUP).
- * @param args - Array of command parameters to search for the BLOCK option
- * @returns The block duration in milliseconds, 0 if duration is <= 0,
- * null if BLOCK option is not found, or undefined if BLOCK is found but duration is invalid
- */
- const parseBlockOption = (args) => {
- for (let i = 0; i < args.length; i++) {
- const token = parseStringArgument(args[i]);
- if (token && token.toLowerCase() === "block") {
- const duration = parseNumberArgument(args[i + 1]);
- if (duration === undefined) {
- return undefined;
- }
- if (duration <= 0) {
- return 0;
- }
- return duration;
- }
- }
- return null;
- };
- exports.parseBlockOption = parseBlockOption;
|