/** * Sorted set storage: redis_zsets. Empty zset removes the key (SPEC_B Appendix C). */ import type Database from './driver.ts'; import type { KeysStorage } from './keys.ts'; export interface ZsetRangeOptions { withScores?: boolean; } export interface ZsetScoreRangeOptions { withScores?: boolean; limit?: number; offset?: number; } export declare function createZsetsStorage(db: Database, keys: KeysStorage): { /** * ZADD minimal v1: add/update score-member pairs. Returns count of NEW members added. * @returns number of new members added */ add(key: Buffer, pairs: { score: number; member: Buffer; }[], options?: { updatedAt?: number; }): number; /** * ZREM: remove members. If zset becomes empty, delete key metadata. * @returns number removed */ remove(key: Buffer, members: Buffer[]): number; count(key: Buffer): number; score(key: Buffer, member: Buffer): string | null; /** * Range by rank (0-based). Order: score ASC, member ASC. * @param start 0-based inclusive * @param stop 0-based inclusive * @returns members or [member, score, ...] */ rangeByRank(key: Buffer, start: number, stop: number, options?: ZsetRangeOptions): (Buffer | string)[]; /** * Range by rank in reverse order (ZREVRANGE). Rank 0 = highest score. * Same start/stop semantics as rangeByRank; order is score DESC, member DESC. * @param start 0-based inclusive (0 = highest score) * @param stop 0-based inclusive * @returns members or [member, score, ...] */ rangeByRankReverse(key: Buffer, start: number, stop: number, options?: ZsetRangeOptions): (Buffer | string)[]; /** * Range by score (min/max inclusive). Order: score ASC, member ASC. */ rangeByScore(key: Buffer, min: number, max: number, options?: ZsetScoreRangeOptions): (Buffer | string)[]; /** * Rank of member in reverse order (ZREVRANK). Rank 0 = highest score. * Returns null if key does not exist or member not in set. * @returns 0-based rank or null */ rankReverse(key: Buffer, member: Buffer): number | null; /** * Rank of member in ascending order (ZRANK). Rank 0 = lowest score. * Returns null if key does not exist or member not in set. * @returns 0-based rank or null */ rank(key: Buffer, member: Buffer): number | null; /** * Range by score in reverse order (ZREVRANGEBYSCORE). max/min inclusive, order score DESC, member DESC. */ rangeByScoreReverse(key: Buffer, max: number, min: number, options?: ZsetScoreRangeOptions): (Buffer | string)[]; /** Copy all member/score rows from oldKey to newKey. Caller ensures newKey exists in redis_keys. */ copyKey(oldKey: Buffer, newKey: Buffer): void; countByScore(key: Buffer, min: number, max: number): number; incr(key: Buffer, member: Buffer, increment: number, options?: { updatedAt?: number; }): string; removeRangeByRank(key: Buffer, start: number, stop: number): number; removeRangeByScore(key: Buffer, min: number, max: number): number; }; export type ZsetsStorage = ReturnType;