From e25bcff293d2b9e2708dc93346eddbce58756a7f Mon Sep 17 00:00:00 2001 From: Leibale Date: Wed, 26 Apr 2023 13:32:10 -0400 Subject: [PATCH] WIP --- md/Redis-todo.md | 1 + md/v4-to-v5.md | 16 + packages/client/lib/client/index.ts | 43 +- packages/client/lib/cluster/index.ts | 2 +- packages/client/lib/commands/BLMPOP.ts | 6 +- packages/client/lib/commands/BLPOP.ts | 6 +- packages/client/lib/commands/BRPOP.ts | 6 +- packages/client/lib/commands/BZMPOP.ts | 54 +- packages/client/lib/commands/BZPOPMAX.ts | 42 +- packages/client/lib/commands/BZPOPMIN.ts | 24 +- .../client/lib/commands/CLIENT_TRACKING.ts | 136 +-- .../lib/commands/CLIENT_TRACKINGINFO.ts | 48 +- packages/client/lib/commands/COMMAND.ts | 18 +- packages/client/lib/commands/COMMAND_COUNT.ts | 12 +- .../client/lib/commands/COMMAND_GETKEYS.ts | 12 +- .../lib/commands/COMMAND_GETKEYSANDFLAGS.ts | 38 +- packages/client/lib/commands/COMMAND_INFO.ts | 18 +- packages/client/lib/commands/COMMAND_LIST.ts | 46 +- packages/client/lib/commands/DEL.ts | 6 +- packages/client/lib/commands/EXISTS.ts | 6 +- .../client/lib/commands/FUNCTION_DELETE.ts | 2 +- packages/client/lib/commands/FUNCTION_DUMP.ts | 2 +- .../client/lib/commands/FUNCTION_FLUSH.ts | 2 +- packages/client/lib/commands/FUNCTION_KILL.ts | 2 +- packages/client/lib/commands/FUNCTION_LIST.ts | 24 +- .../lib/commands/FUNCTION_LIST_WITHCODE.ts | 44 +- packages/client/lib/commands/FUNCTION_LOAD.ts | 32 +- .../client/lib/commands/FUNCTION_RESTORE.ts | 24 +- packages/client/lib/commands/GEOADD.ts | 80 +- packages/client/lib/commands/GEODIST.ts | 27 +- packages/client/lib/commands/GEOHASH.ts | 25 +- packages/client/lib/commands/GEOPOS.ts | 40 +- packages/client/lib/commands/GEORADIUS.ts | 42 +- .../client/lib/commands/GEORADIUSBYMEMBER.ts | 42 +- .../lib/commands/GEORADIUSBYMEMBERSTORE.ts | 44 +- .../lib/commands/GEORADIUSBYMEMBER_RO.ts | 42 +- .../lib/commands/GEORADIUSBYMEMBER_RO_WITH.ts | 48 +- .../lib/commands/GEORADIUSBYMEMBER_WITH.ts | 48 +- .../client/lib/commands/GEORADIUSSTORE.ts | 44 +- packages/client/lib/commands/GEORADIUS_RO.ts | 42 +- .../client/lib/commands/GEORADIUS_RO_WITH.ts | 48 +- .../client/lib/commands/GEORADIUS_WITH.ts | 48 +- packages/client/lib/commands/GEOSEARCH.ts | 26 +- .../client/lib/commands/GEOSEARCHSTORE.ts | 62 +- .../client/lib/commands/GEOSEARCH_WITH.ts | 34 +- packages/client/lib/commands/GETBIT.ts | 20 +- packages/client/lib/commands/HSCAN.ts | 4 +- packages/client/lib/commands/LATENCY_GRAPH.ts | 44 +- packages/client/lib/commands/LMPOP.ts | 6 +- packages/client/lib/commands/LOLWUT.ts | 2 +- packages/client/lib/commands/LPOP_COUNT.ts | 2 +- packages/client/lib/commands/LPUSH.ts | 4 +- packages/client/lib/commands/LPUSHX.ts | 4 +- packages/client/lib/commands/MODULE_LIST.ts | 2 +- packages/client/lib/commands/MODULE_LOAD.ts | 10 +- packages/client/lib/commands/MODULE_UNLOAD.ts | 2 +- packages/client/lib/commands/PFADD.ts | 9 +- packages/client/lib/commands/PFCOUNT.ts | 6 +- packages/client/lib/commands/PFMERGE.ts | 9 +- packages/client/lib/commands/PUBLISH.ts | 2 +- .../client/lib/commands/PUBSUB_CHANNELS.ts | 2 +- packages/client/lib/commands/PUBSUB_NUMPAT.ts | 2 +- packages/client/lib/commands/PUBSUB_NUMSUB.ts | 8 +- .../lib/commands/PUBSUB_SHARDCHANNELS.ts | 2 +- packages/client/lib/commands/READONLY.ts | 2 +- packages/client/lib/commands/READWRITE.ts | 2 +- packages/client/lib/commands/REPLICAOF.ts | 2 +- .../client/lib/commands/RESTORE-ASKING.ts | 2 +- packages/client/lib/commands/ROLE.ts | 2 +- packages/client/lib/commands/SAVE.ts | 2 +- packages/client/lib/commands/SCAN.spec.ts | 128 ++- packages/client/lib/commands/SCAN.ts | 30 +- packages/client/lib/commands/SCRIPT_DEBUG.ts | 2 +- packages/client/lib/commands/SCRIPT_EXISTS.ts | 8 +- packages/client/lib/commands/SCRIPT_FLUSH.ts | 2 +- packages/client/lib/commands/SCRIPT_KILL.ts | 2 +- packages/client/lib/commands/SCRIPT_LOAD.ts | 2 +- packages/client/lib/commands/SETBIT.ts | 2 +- packages/client/lib/commands/SINTERSTORE.ts | 23 +- packages/client/lib/commands/SISMEMBER.ts | 18 +- packages/client/lib/commands/SMISMEMBER.ts | 18 +- packages/client/lib/commands/SMOVE.ts | 20 +- packages/client/lib/commands/SORT.ts | 66 +- packages/client/lib/commands/SORT_RO.ts | 22 +- packages/client/lib/commands/SORT_STORE.ts | 24 +- packages/client/lib/commands/SPOP.ts | 26 +- packages/client/lib/commands/SPUBLISH.ts | 20 +- packages/client/lib/commands/SRANDMEMBER.ts | 15 +- .../client/lib/commands/SRANDMEMBER_COUNT.ts | 26 +- packages/client/lib/commands/SREM.ts | 20 +- packages/client/lib/commands/SSCAN.ts | 4 +- packages/client/lib/commands/SUNION.ts | 20 +- packages/client/lib/commands/SUNIONSTORE.ts | 20 +- packages/client/lib/commands/TOUCH.ts | 19 +- packages/client/lib/commands/UNLINK.ts | 19 +- packages/client/lib/commands/WATCH.ts | 17 +- packages/client/lib/commands/XACK.ts | 22 +- packages/client/lib/commands/XADD.ts | 80 +- packages/client/lib/commands/XAUTOCLAIM.ts | 62 +- .../client/lib/commands/XAUTOCLAIM_JUSTID.ts | 40 +- packages/client/lib/commands/XCLAIM.ts | 78 +- packages/client/lib/commands/XCLAIM_JUSTID.ts | 20 +- packages/client/lib/commands/XDEL.ts | 20 +- packages/client/lib/commands/XGROUP_CREATE.ts | 36 +- .../lib/commands/XGROUP_CREATECONSUMER.ts | 20 +- .../client/lib/commands/XGROUP_DELCONSUMER.ts | 20 +- .../client/lib/commands/XGROUP_DESTROY.ts | 18 +- packages/client/lib/commands/XGROUP_SETID.ts | 20 +- .../client/lib/commands/XINFO_CONSUMERS.ts | 42 +- packages/client/lib/commands/XINFO_GROUPS.ts | 40 +- packages/client/lib/commands/XINFO_STREAM.ts | 102 +-- packages/client/lib/commands/XLEN.ts | 17 +- packages/client/lib/commands/XPENDING.ts | 76 +- .../client/lib/commands/XPENDING_RANGE.ts | 90 +- packages/client/lib/commands/XRANGE.ts | 38 +- packages/client/lib/commands/XREAD.ts | 70 +- packages/client/lib/commands/XREADGROUP.ts | 90 +- packages/client/lib/commands/XREVRANGE.ts | 38 +- packages/client/lib/commands/XSETID.ts | 42 +- packages/client/lib/commands/XTRIM.ts | 46 +- packages/client/lib/commands/ZADD.ts | 6 +- packages/client/lib/commands/ZCOUNT.ts | 6 +- packages/client/lib/commands/ZINCRBY.ts | 6 +- packages/client/lib/commands/ZINTER.ts | 6 +- packages/client/lib/commands/ZMPOP.ts | 103 ++- packages/client/lib/commands/ZPOPMAX.ts | 18 +- packages/client/lib/commands/ZPOPMAX_COUNT.ts | 26 +- packages/client/lib/commands/ZPOPMIN.ts | 18 +- packages/client/lib/commands/ZPOPMIN_COUNT.ts | 26 +- packages/client/lib/commands/ZRANDMEMBER.ts | 17 +- .../client/lib/commands/ZRANDMEMBER_COUNT.ts | 27 +- .../commands/ZRANDMEMBER_COUNT_WITHSCORES.ts | 25 +- packages/client/lib/commands/ZRANGE.ts | 67 +- packages/client/lib/commands/ZRANGEBYLEX.ts | 56 +- packages/client/lib/commands/ZRANGEBYSCORE.ts | 56 +- .../lib/commands/ZRANGEBYSCORE_WITHSCORES.ts | 30 +- packages/client/lib/commands/ZRANGESTORE.ts | 102 +-- .../client/lib/commands/ZRANGE_WITHSCORES.ts | 20 +- packages/client/lib/commands/ZRANK.ts | 20 +- packages/client/lib/commands/ZREM.ts | 23 +- .../client/lib/commands/ZREMRANGEBYLEX.ts | 32 +- .../client/lib/commands/ZREMRANGEBYRANK.ts | 20 +- .../client/lib/commands/ZREMRANGEBYSCORE.ts | 32 +- packages/client/lib/commands/ZREVRANK.ts | 20 +- packages/client/lib/commands/ZSCAN.ts | 7 +- packages/client/lib/commands/ZSCORE.ts | 23 +- packages/client/lib/commands/ZUNION.ts | 44 +- packages/client/lib/commands/ZUNIONSTORE.ts | 44 +- .../client/lib/commands/ZUNION_WITHSCORES.ts | 20 +- .../lib/commands/generic-transformers.ts | 838 +++++++++--------- packages/client/package.json | 2 +- 151 files changed, 2502 insertions(+), 2504 deletions(-) diff --git a/md/Redis-todo.md b/md/Redis-todo.md index 9a61439b52..ec64adf9d2 100644 --- a/md/Redis-todo.md +++ b/md/Redis-todo.md @@ -7,6 +7,7 @@ `String` -> `Double`: - `INCRBYFLOAT` - `HINCRBYFLOAT` +- `GEODIST` `Number` -> `Boolean`: - `HSETNX` (deprecated) diff --git a/md/v4-to-v5.md b/md/v4-to-v5.md index 218141b463..481bd95c69 100644 --- a/md/v4-to-v5.md +++ b/md/v4-to-v5.md @@ -45,6 +45,20 @@ Rather than using `client.quit()`, your code should use `client.close()` or `cli TODO difference between `close` and `disconnect`... +## Scan Iterators + +TODO + +Yields chunks instead of individual items: + +```javascript +for await (const chunk of client.scanIterator()) { + // `chunk` type is `Array` + // will allow multi keys operations + await client.del(chunk); +} +``` + ## Commands Some command arguments/replies have changed to align more closely to data types returned by Redis: @@ -69,6 +83,8 @@ Some command arguments/replies have changed to align more closely to data types - `HSCAN`: `tuples` has been renamed to `entries` - `PFADD`: `boolean` -> `number` [^boolean-to-number] - `SCRIPT EXISTS`: `Array` -> `Array` [^boolean-to-number] +- `SISMEMBER`: `boolean` -> `number` [^boolean-to-number] +- `SMISMEMBER`: `Array` -> `Array` [^boolean-to-number] [^enum-to-constants]: TODO diff --git a/packages/client/lib/client/index.ts b/packages/client/lib/client/index.ts index 7d5e18a4c1..493d32de9d 100644 --- a/packages/client/lib/client/index.ts +++ b/packages/client/lib/client/index.ts @@ -12,13 +12,8 @@ import RedisClientMultiCommand, { RedisClientMultiCommandType } from './multi-co import { RedisMultiQueuedCommand } from '../multi-command'; import HELLO, { HelloOptions } from '../commands/HELLO'; import { Pool, Options as PoolOptions, createPool } from 'generic-pool'; -import { ReplyWithFlags, BlobStringReply } from '../RESP/types'; -import { ScanCommandOptions } from '../commands/SCAN'; -import { HScanEntry } from '../commands/HSCAN'; -import { ScanOptions, ZMember } from '../commands/generic-transformers'; - - - +import { ReplyWithFlags, CommandReply } from '../RESP/types'; +import SCAN, { ScanOptions, ScanCommonOptions } from '../commands/SCAN'; export interface RedisClientOptions< M extends RedisModules = RedisModules, @@ -538,7 +533,7 @@ export default class RedisClient< value: V ) { const proxy = Object.create(this.self); - proxy.commandOptions = Object.create((this as ProxyClient).commandOptions ?? null); + proxy.commandOptions = Object.create((this as unknown as ProxyClient).commandOptions ?? null); proxy.commandOptions[key] = value; return proxy as RedisClientType< M, @@ -840,60 +835,52 @@ export default class RedisClient< async* scanIterator( this: RedisClientType, - options?: ScanCommandOptions & ScanIteratorOptions - ): AsyncIterable> { + options?: ScanOptions & ScanIteratorOptions + ): AsyncIterable['keys'], FLAGS>> { let cursor = options?.cursor ?? 0; do { const reply = await this.scan(cursor, options); cursor = reply.cursor; - for (const key of reply.keys) { - yield key; - } + yield reply.keys; } while (cursor !== 0); } async* hScanIterator( this: RedisClientType, key: RedisArgument, - options?: ScanOptions & ScanIteratorOptions - ): AsyncIterable> { + options?: ScanCommonOptions & ScanIteratorOptions + ) { let cursor = options?.cursor ?? 0; do { const reply = await this.hScan(key, cursor, options); cursor = reply.cursor; - for (const entry of reply.entries) { - yield entry; - } + yield reply.entries; } while (cursor !== 0); } async* sScanIterator( this: RedisClientType, key: RedisArgument, - options?: ScanOptions & ScanIteratorOptions - ): AsyncIterable> { + options?: ScanCommonOptions & ScanIteratorOptions + ) { let cursor = options?.cursor ?? 0; do { const reply = await this.sScan(key, cursor, options); cursor = reply.cursor; - for (const member of reply.members) { - yield member; - } + yield reply.members; } while (cursor !== 0); } async* zScanIterator( this: RedisClientType, key: RedisArgument, - options?: ScanOptions & ScanIteratorOptions - ): AsyncIterable> { + options?: ScanCommonOptions & ScanIteratorOptions + ) { let cursor = options?.cursor ?? 0; do { const reply = await this.zScan(key, cursor, options); cursor = reply.cursor; - for (const member of reply.members) { - yield member; - } + yield reply.members; } while (cursor !== 0); } diff --git a/packages/client/lib/cluster/index.ts b/packages/client/lib/cluster/index.ts index 4e69452f7c..96560fdaf0 100644 --- a/packages/client/lib/cluster/index.ts +++ b/packages/client/lib/cluster/index.ts @@ -326,7 +326,7 @@ export default class RedisCluster< value: V ) { const proxy = Object.create(this); - proxy.commandOptions = Object.create((this as ProxyCluster).commandOptions ?? null); + proxy.commandOptions = Object.create((this as unknown as ProxyCluster).commandOptions ?? null); proxy.commandOptions[key] = value; return proxy as RedisClusterType< M, diff --git a/packages/client/lib/commands/BLMPOP.ts b/packages/client/lib/commands/BLMPOP.ts index 32d249899b..ec9ab56829 100644 --- a/packages/client/lib/commands/BLMPOP.ts +++ b/packages/client/lib/commands/BLMPOP.ts @@ -1,5 +1,5 @@ -import { RedisArgument, Command } from '../RESP/types'; -import { transformLMPopArguments, LMPopOptions, ListSide } from './generic-transformers'; +import { Command } from '../RESP/types'; +import { transformLMPopArguments, LMPopOptions, ListSide, RedisVariadicArgument } from './generic-transformers'; import LMPOP from './LMPOP'; export default { @@ -7,7 +7,7 @@ export default { IS_READ_ONLY: false, transformArguments( timeout: number, - keys: RedisArgument | Array, + keys: RedisVariadicArgument, side: ListSide, options?: LMPopOptions ) { diff --git a/packages/client/lib/commands/BLPOP.ts b/packages/client/lib/commands/BLPOP.ts index feb0fd6512..e96617e21d 100644 --- a/packages/client/lib/commands/BLPOP.ts +++ b/packages/client/lib/commands/BLPOP.ts @@ -1,11 +1,11 @@ -import { RedisArgument, BlobStringReply, NullReply, Command } from '../RESP/types'; -import { pushVariadicArguments } from './generic-transformers'; +import { BlobStringReply, NullReply, Command } from '../RESP/types'; +import { RedisVariadicArgument, pushVariadicArguments } from './generic-transformers'; export default { FIRST_KEY_INDEX: 1, IS_READ_ONLY: true, transformArguments( - key: RedisArgument | Array, + key: RedisVariadicArgument, timeout: number ) { const args = pushVariadicArguments(['BRPOP'], key); diff --git a/packages/client/lib/commands/BRPOP.ts b/packages/client/lib/commands/BRPOP.ts index 64e8ed8404..f9c8aaa503 100644 --- a/packages/client/lib/commands/BRPOP.ts +++ b/packages/client/lib/commands/BRPOP.ts @@ -1,12 +1,12 @@ -import { RedisArgument, BlobStringReply, NullReply, Command } from '../RESP/types'; -import { pushVariadicArguments } from './generic-transformers'; +import { Command } from '../RESP/types'; +import { RedisVariadicArgument, pushVariadicArguments } from './generic-transformers'; import BLPOP from './BLPOP'; export default { FIRST_KEY_INDEX: 1, IS_READ_ONLY: true, transformArguments( - key: RedisArgument | Array, + key: RedisVariadicArgument, timeout: number ) { const args = pushVariadicArguments(['BRPOP'], key); diff --git a/packages/client/lib/commands/BZMPOP.ts b/packages/client/lib/commands/BZMPOP.ts index 936ccf800c..b043d5fcf6 100644 --- a/packages/client/lib/commands/BZMPOP.ts +++ b/packages/client/lib/commands/BZMPOP.ts @@ -1,34 +1,34 @@ -import { RedisCommandArgument, RedisCommandArguments } from '.'; -import { SortedSetSide, transformZMPopArguments, ZMPopOptions } from './generic-transformers'; +// import { RedisCommandArgument, RedisCommandArguments } from '.'; +// import { SortedSetSide, transformZMPopArguments, ZMPopOptions } from './generic-transformers'; -export const FIRST_KEY_INDEX = 3; +// export const FIRST_KEY_INDEX = 3; -export function transformArguments( - timeout: number, - keys: RedisCommandArgument | Array, - side: SortedSetSide, - options?: ZMPopOptions -): RedisCommandArguments { - return transformZMPopArguments( - ['BZMPOP', timeout.toString()], - keys, - side, - options - ); -} +// export function transformArguments( +// timeout: number, +// keys: RedisCommandArgument | Array, +// side: SortedSetSide, +// options?: ZMPopOptions +// ): RedisCommandArguments { +// return transformZMPopArguments( +// ['BZMPOP', timeout.toString()], +// keys, +// side, +// options +// ); +// } -export { transformReply } from './ZMPOP'; +// export { transformReply } from './ZMPOP'; -import { Command } from '../RESP/types'; -import ZMPOP from './ZMPOP'; +// import { Command } from '../RESP/types'; +// import ZMPOP from './ZMPOP'; -export default { - IS_READ_ONLY: false, - FIRST_KEY_INDEX: 3, - transformArguments() { - return ['BZMPOP']; - }, - transformReply: ZMPOP.transformReply -} as const satisfies Command; +// export default { +// FIRST_KEY_INDEX: 3, +// IS_READ_ONLY: false, +// transformArguments() { +// return ['BZMPOP']; +// }, +// transformReply: ZMPOP.transformReply +// } as const satisfies Command; diff --git a/packages/client/lib/commands/BZPOPMAX.ts b/packages/client/lib/commands/BZPOPMAX.ts index be92c194ef..250bc982b4 100644 --- a/packages/client/lib/commands/BZPOPMAX.ts +++ b/packages/client/lib/commands/BZPOPMAX.ts @@ -1,29 +1,29 @@ -import { RedisCommandArgument, RedisCommandArguments } from '.'; -import { pushVariadicArguments, transformNumberInfinityReply, ZMember } from './generic-transformers'; +// import { RedisCommandArgument, RedisCommandArguments } from '.'; +// import { pushVariadicArguments, transformDoubleReply, ZMember } from './generic-transformers'; -export const FIRST_KEY_INDEX = 1; +// export const FIRST_KEY_INDEX = 1; -export function transformArguments( - key: RedisCommandArgument | Array, - timeout: number -): RedisCommandArguments { - const args = pushVariadicArguments(['BZPOPMAX'], key); +// export function transformArguments( +// key: RedisCommandArgument | Array, +// timeout: number +// ): RedisCommandArguments { +// const args = pushVariadicArguments(['BZPOPMAX'], key); - args.push(timeout.toString()); +// args.push(timeout.toString()); - return args; -} +// return args; +// } -type ZMemberRawReply = [key: RedisCommandArgument, value: RedisCommandArgument, score: RedisCommandArgument] | null; +// type ZMemberRawReply = [key: RedisCommandArgument, value: RedisCommandArgument, score: RedisCommandArgument] | null; -type BZPopMaxReply = (ZMember & { key: RedisCommandArgument }) | null; +// type BZPopMaxReply = (ZMember & { key: RedisCommandArgument }) | null; -export function transformReply(reply: ZMemberRawReply): BZPopMaxReply | null { - if (!reply) return null; +// export function transformReply(reply: ZMemberRawReply): BZPopMaxReply | null { +// if (!reply) return null; - return { - key: reply[0], - value: reply[1], - score: transformNumberInfinityReply(reply[2]) - }; -} +// return { +// key: reply[0], +// value: reply[1], +// score: transformDoubleReply(reply[2]) +// }; +// } diff --git a/packages/client/lib/commands/BZPOPMIN.ts b/packages/client/lib/commands/BZPOPMIN.ts index 02d9f9215b..967633697a 100644 --- a/packages/client/lib/commands/BZPOPMIN.ts +++ b/packages/client/lib/commands/BZPOPMIN.ts @@ -1,17 +1,17 @@ -import { RedisCommandArgument, RedisCommandArguments } from '.'; -import { pushVariadicArguments } from './generic-transformers'; +// import { RedisCommandArgument, RedisCommandArguments } from '.'; +// import { pushVariadicArguments } from './generic-transformers'; -export const FIRST_KEY_INDEX = 1; +// export const FIRST_KEY_INDEX = 1; -export function transformArguments( - key: RedisCommandArgument | Array, - timeout: number -): RedisCommandArguments { - const args = pushVariadicArguments(['BZPOPMIN'], key); +// export function transformArguments( +// key: RedisCommandArgument | Array, +// timeout: number +// ): RedisCommandArguments { +// const args = pushVariadicArguments(['BZPOPMIN'], key); - args.push(timeout.toString()); +// args.push(timeout.toString()); - return args; -} +// return args; +// } -export { transformReply } from './BZPOPMAX'; +// export { transformReply } from './BZPOPMAX'; diff --git a/packages/client/lib/commands/CLIENT_TRACKING.ts b/packages/client/lib/commands/CLIENT_TRACKING.ts index c70702706e..03926b5300 100644 --- a/packages/client/lib/commands/CLIENT_TRACKING.ts +++ b/packages/client/lib/commands/CLIENT_TRACKING.ts @@ -1,83 +1,83 @@ -import { RedisCommandArgument, RedisCommandArguments } from '.'; +// import { RedisCommandArgument, RedisCommandArguments } from '.'; -interface CommonOptions { - REDIRECT?: number; - NOLOOP?: boolean; -} +// interface CommonOptions { +// REDIRECT?: number; +// NOLOOP?: boolean; +// } -interface BroadcastOptions { - BCAST?: boolean; - PREFIX?: RedisCommandArgument | Array; -} +// interface BroadcastOptions { +// BCAST?: boolean; +// PREFIX?: RedisCommandArgument | Array; +// } -interface OptInOptions { - OPTIN?: boolean; -} +// interface OptInOptions { +// OPTIN?: boolean; +// } -interface OptOutOptions { - OPTOUT?: boolean; -} +// interface OptOutOptions { +// OPTOUT?: boolean; +// } -type ClientTrackingOptions = CommonOptions & ( - BroadcastOptions | - OptInOptions | - OptOutOptions -); +// type ClientTrackingOptions = CommonOptions & ( +// BroadcastOptions | +// OptInOptions | +// OptOutOptions +// ); -export function transformArguments( - mode: M, - options?: M extends true ? ClientTrackingOptions : undefined -): RedisCommandArguments { - const args: RedisCommandArguments = [ - 'CLIENT', - 'TRACKING', - mode ? 'ON' : 'OFF' - ]; +// export function transformArguments( +// mode: M, +// options?: M extends true ? ClientTrackingOptions : undefined +// ): RedisCommandArguments { +// const args: RedisCommandArguments = [ +// 'CLIENT', +// 'TRACKING', +// mode ? 'ON' : 'OFF' +// ]; - if (mode) { - if (options?.REDIRECT) { - args.push( - 'REDIRECT', - options.REDIRECT.toString() - ); - } +// if (mode) { +// if (options?.REDIRECT) { +// args.push( +// 'REDIRECT', +// options.REDIRECT.toString() +// ); +// } - if (isBroadcast(options)) { - args.push('BCAST'); +// if (isBroadcast(options)) { +// args.push('BCAST'); - if (options?.PREFIX) { - if (Array.isArray(options.PREFIX)) { - for (const prefix of options.PREFIX) { - args.push('PREFIX', prefix); - } - } else { - args.push('PREFIX', options.PREFIX); - } - } - } else if (isOptIn(options)) { - args.push('OPTIN'); - } else if (isOptOut(options)) { - args.push('OPTOUT'); - } +// if (options?.PREFIX) { +// if (Array.isArray(options.PREFIX)) { +// for (const prefix of options.PREFIX) { +// args.push('PREFIX', prefix); +// } +// } else { +// args.push('PREFIX', options.PREFIX); +// } +// } +// } else if (isOptIn(options)) { +// args.push('OPTIN'); +// } else if (isOptOut(options)) { +// args.push('OPTOUT'); +// } - if (options?.NOLOOP) { - args.push('NOLOOP'); - } - } +// if (options?.NOLOOP) { +// args.push('NOLOOP'); +// } +// } - return args; -} +// return args; +// } -function isBroadcast(options?: ClientTrackingOptions): options is BroadcastOptions { - return (options as BroadcastOptions)?.BCAST === true; -} +// function isBroadcast(options?: ClientTrackingOptions): options is BroadcastOptions { +// return (options as BroadcastOptions)?.BCAST === true; +// } -function isOptIn(options?: ClientTrackingOptions): options is OptInOptions { - return (options as OptInOptions)?.OPTIN === true; -} +// function isOptIn(options?: ClientTrackingOptions): options is OptInOptions { +// return (options as OptInOptions)?.OPTIN === true; +// } -function isOptOut(options?: ClientTrackingOptions): options is OptOutOptions { - return (options as OptOutOptions)?.OPTOUT === true; -} +// function isOptOut(options?: ClientTrackingOptions): options is OptOutOptions { +// return (options as OptOutOptions)?.OPTOUT === true; +// } -export declare function transformReply(): 'OK' | Buffer; +// export declare function transformReply(): 'OK' | Buffer; diff --git a/packages/client/lib/commands/CLIENT_TRACKINGINFO.ts b/packages/client/lib/commands/CLIENT_TRACKINGINFO.ts index 7c883fc699..fd897bb67c 100644 --- a/packages/client/lib/commands/CLIENT_TRACKINGINFO.ts +++ b/packages/client/lib/commands/CLIENT_TRACKINGINFO.ts @@ -1,28 +1,28 @@ -import { RedisCommandArguments } from '.'; +// import { RedisCommandArguments } from '.'; -export function transformArguments(): RedisCommandArguments { - return ['CLIENT', 'TRACKINGINFO']; -} +// export function transformArguments(): RedisCommandArguments { +// return ['CLIENT', 'TRACKINGINFO']; +// } -type RawReply = [ - 'flags', - Array, - 'redirect', - number, - 'prefixes', - Array -]; +// type RawReply = [ +// 'flags', +// Array, +// 'redirect', +// number, +// 'prefixes', +// Array +// ]; -interface Reply { - flags: Set; - redirect: number; - prefixes: Array; -} +// interface Reply { +// flags: Set; +// redirect: number; +// prefixes: Array; +// } -export function transformReply(reply: RawReply): Reply { - return { - flags: new Set(reply[1]), - redirect: reply[3], - prefixes: reply[5] - }; -} +// export function transformReply(reply: RawReply): Reply { +// return { +// flags: new Set(reply[1]), +// redirect: reply[3], +// prefixes: reply[5] +// }; +// } diff --git a/packages/client/lib/commands/COMMAND.ts b/packages/client/lib/commands/COMMAND.ts index b6ee50b2f4..a67ae1012d 100644 --- a/packages/client/lib/commands/COMMAND.ts +++ b/packages/client/lib/commands/COMMAND.ts @@ -1,12 +1,12 @@ -import { RedisCommandArguments } from '.'; -import { CommandRawReply, CommandReply, transformCommandReply } from './generic-transformers'; +// import { RedisCommandArguments } from '.'; +// import { CommandRawReply, CommandReply, transformCommandReply } from './generic-transformers'; -export const IS_READ_ONLY = true; +// export const IS_READ_ONLY = true; -export function transformArguments(): RedisCommandArguments { - return ['COMMAND']; -} +// export function transformArguments(): RedisCommandArguments { +// return ['COMMAND']; +// } -export function transformReply(reply: Array): Array { - return reply.map(transformCommandReply); -} +// export function transformReply(reply: Array): Array { +// return reply.map(transformCommandReply); +// } diff --git a/packages/client/lib/commands/COMMAND_COUNT.ts b/packages/client/lib/commands/COMMAND_COUNT.ts index 34c6a088da..f1cd06702e 100644 --- a/packages/client/lib/commands/COMMAND_COUNT.ts +++ b/packages/client/lib/commands/COMMAND_COUNT.ts @@ -1,9 +1,9 @@ -import { RedisCommandArguments } from '.'; +// import { RedisCommandArguments } from '.'; -export const IS_READ_ONLY = true; +// export const IS_READ_ONLY = true; -export function transformArguments(): RedisCommandArguments { - return ['COMMAND', 'COUNT']; -} +// export function transformArguments(): RedisCommandArguments { +// return ['COMMAND', 'COUNT']; +// } -export declare function transformReply(): number; +// export declare function transformReply(): number; diff --git a/packages/client/lib/commands/COMMAND_GETKEYS.ts b/packages/client/lib/commands/COMMAND_GETKEYS.ts index 6762fe4b58..fb43798c1b 100644 --- a/packages/client/lib/commands/COMMAND_GETKEYS.ts +++ b/packages/client/lib/commands/COMMAND_GETKEYS.ts @@ -1,9 +1,9 @@ -import { RedisCommandArgument, RedisCommandArguments } from '.'; +// import { RedisCommandArgument, RedisCommandArguments } from '.'; -export const IS_READ_ONLY = true; +// export const IS_READ_ONLY = true; -export function transformArguments(args: Array): RedisCommandArguments { - return ['COMMAND', 'GETKEYS', ...args]; -} +// export function transformArguments(args: Array): RedisCommandArguments { +// return ['COMMAND', 'GETKEYS', ...args]; +// } -export declare function transformReply(): Array; +// export declare function transformReply(): Array; diff --git a/packages/client/lib/commands/COMMAND_GETKEYSANDFLAGS.ts b/packages/client/lib/commands/COMMAND_GETKEYSANDFLAGS.ts index 96b28186cc..d1232d1999 100644 --- a/packages/client/lib/commands/COMMAND_GETKEYSANDFLAGS.ts +++ b/packages/client/lib/commands/COMMAND_GETKEYSANDFLAGS.ts @@ -1,24 +1,24 @@ -import { RedisCommandArgument, RedisCommandArguments } from '.'; +// import { RedisCommandArgument, RedisCommandArguments } from '.'; -export const IS_READ_ONLY = true; +// export const IS_READ_ONLY = true; -export function transformArguments(args: Array): RedisCommandArguments { - return ['COMMAND', 'GETKEYSANDFLAGS', ...args]; -} +// export function transformArguments(args: Array): RedisCommandArguments { +// return ['COMMAND', 'GETKEYSANDFLAGS', ...args]; +// } -type KeysAndFlagsRawReply = Array<[ - RedisCommandArgument, - RedisCommandArguments -]>; +// type KeysAndFlagsRawReply = Array<[ +// RedisCommandArgument, +// RedisCommandArguments +// ]>; -type KeysAndFlagsReply = Array<{ - key: RedisCommandArgument; - flags: RedisCommandArguments; -}>; +// type KeysAndFlagsReply = Array<{ +// key: RedisCommandArgument; +// flags: RedisCommandArguments; +// }>; -export function transformReply(reply: KeysAndFlagsRawReply): KeysAndFlagsReply { - return reply.map(([key, flags]) => ({ - key, - flags - })); -} +// export function transformReply(reply: KeysAndFlagsRawReply): KeysAndFlagsReply { +// return reply.map(([key, flags]) => ({ +// key, +// flags +// })); +// } diff --git a/packages/client/lib/commands/COMMAND_INFO.ts b/packages/client/lib/commands/COMMAND_INFO.ts index 6f84d0edaf..9de86b3f79 100644 --- a/packages/client/lib/commands/COMMAND_INFO.ts +++ b/packages/client/lib/commands/COMMAND_INFO.ts @@ -1,12 +1,12 @@ -import { RedisCommandArguments } from '.'; -import { CommandRawReply, CommandReply, transformCommandReply } from './generic-transformers'; +// import { RedisCommandArguments } from '.'; +// import { CommandRawReply, CommandReply, transformCommandReply } from './generic-transformers'; -export const IS_READ_ONLY = true; +// export const IS_READ_ONLY = true; -export function transformArguments(commands: Array): RedisCommandArguments { - return ['COMMAND', 'INFO', ...commands]; -} +// export function transformArguments(commands: Array): RedisCommandArguments { +// return ['COMMAND', 'INFO', ...commands]; +// } -export function transformReply(reply: Array): Array { - return reply.map(command => command ? transformCommandReply(command) : null); -} +// export function transformReply(reply: Array): Array { +// return reply.map(command => command ? transformCommandReply(command) : null); +// } diff --git a/packages/client/lib/commands/COMMAND_LIST.ts b/packages/client/lib/commands/COMMAND_LIST.ts index a197bd1a4c..eabf9856dd 100644 --- a/packages/client/lib/commands/COMMAND_LIST.ts +++ b/packages/client/lib/commands/COMMAND_LIST.ts @@ -1,31 +1,31 @@ -import { RedisCommandArguments } from '.'; +// import { RedisCommandArguments } from '.'; -export const IS_READ_ONLY = true; +// export const IS_READ_ONLY = true; -export enum FilterBy { - MODULE = 'MODULE', - ACLCAT = 'ACLCAT', - PATTERN = 'PATTERN' -} +// export enum FilterBy { +// MODULE = 'MODULE', +// ACLCAT = 'ACLCAT', +// PATTERN = 'PATTERN' +// } -interface Filter { - filterBy: FilterBy; - value: string; -} +// interface Filter { +// filterBy: FilterBy; +// value: string; +// } -export function transformArguments(filter?: Filter): RedisCommandArguments { - const args = ['COMMAND', 'LIST']; +// export function transformArguments(filter?: Filter): RedisCommandArguments { +// const args = ['COMMAND', 'LIST']; - if (filter) { - args.push( - 'FILTERBY', - filter.filterBy, - filter.value - ); - } +// if (filter) { +// args.push( +// 'FILTERBY', +// filter.filterBy, +// filter.value +// ); +// } - return args; -} +// return args; +// } -export declare function transformReply(): Array; +// export declare function transformReply(): Array; diff --git a/packages/client/lib/commands/DEL.ts b/packages/client/lib/commands/DEL.ts index faba0712cd..a9b1019427 100644 --- a/packages/client/lib/commands/DEL.ts +++ b/packages/client/lib/commands/DEL.ts @@ -1,9 +1,9 @@ -import { RedisArgument, NumberReply, Command } from '../RESP/types'; -import { pushVariadicArguments } from './generic-transformers'; +import { NumberReply, Command } from '../RESP/types'; +import { RedisVariadicArgument, pushVariadicArguments } from './generic-transformers'; export default { FIRST_KEY_INDEX: 1, - transformArguments(keys: RedisArgument | Array) { + transformArguments(keys: RedisVariadicArgument) { return pushVariadicArguments(['DEL'], keys); }, transformReply: undefined as unknown as () => NumberReply diff --git a/packages/client/lib/commands/EXISTS.ts b/packages/client/lib/commands/EXISTS.ts index 2dfa5963d5..a077943b8d 100644 --- a/packages/client/lib/commands/EXISTS.ts +++ b/packages/client/lib/commands/EXISTS.ts @@ -1,10 +1,10 @@ -import { RedisArgument, NumberReply, Command } from '../RESP/types'; -import { pushVariadicArguments } from './generic-transformers'; +import { NumberReply, Command } from '../RESP/types'; +import { RedisVariadicArgument, pushVariadicArguments } from './generic-transformers'; export default { FIRST_KEY_INDEX: 1, IS_READ_ONLY: true, - transformArguments(keys: RedisArgument | Array) { + transformArguments(keys: RedisVariadicArgument) { return pushVariadicArguments(['EXISTS'], keys); }, transformReply: undefined as unknown as () => NumberReply diff --git a/packages/client/lib/commands/FUNCTION_DELETE.ts b/packages/client/lib/commands/FUNCTION_DELETE.ts index b614c5a9ec..c0f8794d98 100644 --- a/packages/client/lib/commands/FUNCTION_DELETE.ts +++ b/packages/client/lib/commands/FUNCTION_DELETE.ts @@ -1,8 +1,8 @@ import { RedisArgument, SimpleStringReply, Command } from '../RESP/types'; export default { - IS_READ_ONLY: true, FIRST_KEY_INDEX: undefined, + IS_READ_ONLY: true, transformArguments(library: RedisArgument) { return ['FUNCTION', 'DELETE', library]; }, diff --git a/packages/client/lib/commands/FUNCTION_DUMP.ts b/packages/client/lib/commands/FUNCTION_DUMP.ts index cd53312caf..8f6ff047fa 100644 --- a/packages/client/lib/commands/FUNCTION_DUMP.ts +++ b/packages/client/lib/commands/FUNCTION_DUMP.ts @@ -1,8 +1,8 @@ import { BlobStringReply, Command } from '../RESP/types'; export default { - IS_READ_ONLY: true, FIRST_KEY_INDEX: undefined, + IS_READ_ONLY: true, transformArguments() { return ['FUNCTION', 'DUMP']; }, diff --git a/packages/client/lib/commands/FUNCTION_FLUSH.ts b/packages/client/lib/commands/FUNCTION_FLUSH.ts index b421181bf3..ab238a5eb5 100644 --- a/packages/client/lib/commands/FUNCTION_FLUSH.ts +++ b/packages/client/lib/commands/FUNCTION_FLUSH.ts @@ -2,8 +2,8 @@ import { SimpleStringReply, Command } from '../RESP/types'; import { RedisFlushModes } from './FLUSHALL'; export default { - IS_READ_ONLY: true, FIRST_KEY_INDEX: undefined, + IS_READ_ONLY: true, transformArguments(mode?: RedisFlushModes) { const args = ['FUNCTION', 'FLUSH']; diff --git a/packages/client/lib/commands/FUNCTION_KILL.ts b/packages/client/lib/commands/FUNCTION_KILL.ts index 2e89746d59..f452b0b80d 100644 --- a/packages/client/lib/commands/FUNCTION_KILL.ts +++ b/packages/client/lib/commands/FUNCTION_KILL.ts @@ -1,8 +1,8 @@ import { SimpleStringReply, Command } from '../RESP/types'; export default { - IS_READ_ONLY: true, FIRST_KEY_INDEX: undefined, + IS_READ_ONLY: true, transformArguments() { return ['FUNCTION', 'KILL']; }, diff --git a/packages/client/lib/commands/FUNCTION_LIST.ts b/packages/client/lib/commands/FUNCTION_LIST.ts index d6a39dc726..c607513915 100644 --- a/packages/client/lib/commands/FUNCTION_LIST.ts +++ b/packages/client/lib/commands/FUNCTION_LIST.ts @@ -1,16 +1,16 @@ -import { RedisCommandArguments } from '.'; -import { FunctionListItemReply, FunctionListRawItemReply, transformFunctionListItemReply } from './generic-transformers'; +// import { RedisCommandArguments } from '.'; +// import { FunctionListItemReply, FunctionListRawItemReply, transformFunctionListItemReply } from './generic-transformers'; -export function transformArguments(pattern?: string): RedisCommandArguments { - const args = ['FUNCTION', 'LIST']; +// export function transformArguments(pattern?: string): RedisCommandArguments { +// const args = ['FUNCTION', 'LIST']; - if (pattern) { - args.push(pattern); - } +// if (pattern) { +// args.push(pattern); +// } - return args; -} +// return args; +// } -export function transformReply(reply: Array): Array { - return reply.map(transformFunctionListItemReply); -} +// export function transformReply(reply: Array): Array { +// return reply.map(transformFunctionListItemReply); +// } diff --git a/packages/client/lib/commands/FUNCTION_LIST_WITHCODE.ts b/packages/client/lib/commands/FUNCTION_LIST_WITHCODE.ts index 0d763301e8..41fdae90ad 100644 --- a/packages/client/lib/commands/FUNCTION_LIST_WITHCODE.ts +++ b/packages/client/lib/commands/FUNCTION_LIST_WITHCODE.ts @@ -1,26 +1,26 @@ -import { RedisCommandArguments } from '.'; -import { transformArguments as transformFunctionListArguments } from './FUNCTION_LIST'; -import { FunctionListItemReply, FunctionListRawItemReply, transformFunctionListItemReply } from './generic-transformers'; +// import { RedisCommandArguments } from '.'; +// import { transformArguments as transformFunctionListArguments } from './FUNCTION_LIST'; +// import { FunctionListItemReply, FunctionListRawItemReply, transformFunctionListItemReply } from './generic-transformers'; -export function transformArguments(pattern?: string): RedisCommandArguments { - const args = transformFunctionListArguments(pattern); - args.push('WITHCODE'); - return args; -} +// export function transformArguments(pattern?: string): RedisCommandArguments { +// const args = transformFunctionListArguments(pattern); +// args.push('WITHCODE'); +// return args; +// } -type FunctionListWithCodeRawItemReply = [ - ...FunctionListRawItemReply, - 'library_code', - string -]; +// type FunctionListWithCodeRawItemReply = [ +// ...FunctionListRawItemReply, +// 'library_code', +// string +// ]; -interface FunctionListWithCodeItemReply extends FunctionListItemReply { - libraryCode: string; -} +// interface FunctionListWithCodeItemReply extends FunctionListItemReply { +// libraryCode: string; +// } -export function transformReply(reply: Array): Array { - return reply.map(library => ({ - ...transformFunctionListItemReply(library as unknown as FunctionListRawItemReply), - libraryCode: library[7] - })); -} +// export function transformReply(reply: Array): Array { +// return reply.map(library => ({ +// ...transformFunctionListItemReply(library as unknown as FunctionListRawItemReply), +// libraryCode: library[7] +// })); +// } diff --git a/packages/client/lib/commands/FUNCTION_LOAD.ts b/packages/client/lib/commands/FUNCTION_LOAD.ts index 7ab58d5859..c24ee0e9f8 100644 --- a/packages/client/lib/commands/FUNCTION_LOAD.ts +++ b/packages/client/lib/commands/FUNCTION_LOAD.ts @@ -1,22 +1,22 @@ -import { RedisCommandArguments } from '.'; +// import { RedisCommandArguments } from '.'; -interface FunctionLoadOptions { - REPLACE?: boolean; -} +// interface FunctionLoadOptions { +// REPLACE?: boolean; +// } -export function transformArguments( - code: string, - options?: FunctionLoadOptions -): RedisCommandArguments { - const args = ['FUNCTION', 'LOAD']; +// export function transformArguments( +// code: string, +// options?: FunctionLoadOptions +// ): RedisCommandArguments { +// const args = ['FUNCTION', 'LOAD']; - if (options?.REPLACE) { - args.push('REPLACE'); - } +// if (options?.REPLACE) { +// args.push('REPLACE'); +// } - args.push(code); +// args.push(code); - return args; -} +// return args; +// } -export declare function transformReply(): string; +// export declare function transformReply(): string; diff --git a/packages/client/lib/commands/FUNCTION_RESTORE.ts b/packages/client/lib/commands/FUNCTION_RESTORE.ts index bc9c41e262..92f87288c3 100644 --- a/packages/client/lib/commands/FUNCTION_RESTORE.ts +++ b/packages/client/lib/commands/FUNCTION_RESTORE.ts @@ -1,16 +1,16 @@ -import { RedisCommandArgument, RedisCommandArguments } from '.'; +// import { RedisCommandArgument, RedisCommandArguments } from '.'; -export function transformArguments( - dump: RedisCommandArgument, - mode?: 'FLUSH' | 'APPEND' | 'REPLACE' -): RedisCommandArguments { - const args = ['FUNCTION', 'RESTORE', dump]; +// export function transformArguments( +// dump: RedisCommandArgument, +// mode?: 'FLUSH' | 'APPEND' | 'REPLACE' +// ): RedisCommandArguments { +// const args = ['FUNCTION', 'RESTORE', dump]; - if (mode) { - args.push(mode); - } +// if (mode) { +// args.push(mode); +// } - return args; -} +// return args; +// } -export declare function transformReply(): 'OK'; +// export declare function transformReply(): 'OK'; diff --git a/packages/client/lib/commands/GEOADD.ts b/packages/client/lib/commands/GEOADD.ts index daccb0842e..2a34b5d560 100644 --- a/packages/client/lib/commands/GEOADD.ts +++ b/packages/client/lib/commands/GEOADD.ts @@ -1,53 +1,65 @@ -import { RedisCommandArgument, RedisCommandArguments } from '.'; +import { CommandArguments, RedisArgument, NumberReply, Command } from '../RESP/types'; import { GeoCoordinates } from './generic-transformers'; -export const FIRST_KEY_INDEX = 1; - interface GeoMember extends GeoCoordinates { - member: RedisCommandArgument; + member: RedisArgument; } -interface NX { - NX?: true; +interface GeoAddOptions { + condition: 'NX' | 'XX'; + /** + * @deprecated Use `{ condition: 'NX' }` instead. + */ + NX?: boolean; + /** + * @deprecated Use `{ condition: 'XX' }` instead. + */ + XX?: boolean; + CH?: boolean; } -interface XX { - XX?: true; -} - -type SetGuards = NX | XX; - -interface GeoAddCommonOptions { - CH?: true; -} - -type GeoAddOptions = SetGuards & GeoAddCommonOptions; - -export function transformArguments( - key: RedisCommandArgument, toAdd: GeoMember | Array, +export default { + FIRST_KEY_INDEX: 1, + IS_READ_ONLY: false, + transformArguments( + key: RedisArgument, + toAdd: GeoMember | Array, options?: GeoAddOptions -): RedisCommandArguments { + ) { const args = ['GEOADD', key]; - if ((options as NX)?.NX) { - args.push('NX'); - } else if ((options as XX)?.XX) { - args.push('XX'); + if (options?.condition) { + args.push(options.condition); + } else if (options?.NX) { + args.push('NX'); + } else if (options?.XX) { + args.push('XX'); } if (options?.CH) { - args.push('CH'); + args.push('CH'); } - for (const { longitude, latitude, member } of (Array.isArray(toAdd) ? toAdd : [toAdd])) { - args.push( - longitude.toString(), - latitude.toString(), - member - ); + if (Array.isArray(toAdd)) { + for (const member of toAdd) { + pushMember(args, member); + } + } else { + pushMember(args, toAdd); } return args; -} + }, + transformReply: undefined as unknown as () => NumberReply +} as const satisfies Command; -export declare function transformReply(): number; +function pushMember( + args: CommandArguments, + { longitude, latitude, member }: GeoMember +) { + args.push( + longitude.toString(), + latitude.toString(), + member + ); +} diff --git a/packages/client/lib/commands/GEODIST.ts b/packages/client/lib/commands/GEODIST.ts index 5dbf8ece9c..da6dee1b77 100644 --- a/packages/client/lib/commands/GEODIST.ts +++ b/packages/client/lib/commands/GEODIST.ts @@ -1,16 +1,15 @@ -import { RedisCommandArgument, RedisCommandArguments } from '.'; +import { RedisArgument, BlobStringReply, NullReply, Command } from '../RESP/types'; import { GeoUnits } from './generic-transformers'; -export const FIRST_KEY_INDEX = 1; - -export const IS_READ_ONLY = true; - -export function transformArguments( - key: RedisCommandArgument, - member1: RedisCommandArgument, - member2: RedisCommandArgument, +export default { + FIRST_KEY_INDEX: 1, + IS_READ_ONLY: true, + transformArguments( + key: RedisArgument, + member1: RedisArgument, + member2: RedisArgument, unit?: GeoUnits -): RedisCommandArguments { + ) { const args = ['GEODIST', key, member1, member2]; if (unit) { @@ -18,8 +17,8 @@ export function transformArguments( } return args; -} - -export function transformReply(reply: RedisCommandArgument | null): number | null { + }, + transformReply(reply: BlobStringReply | NullReply) { return reply === null ? null : Number(reply); -} + } +} as const satisfies Command; diff --git a/packages/client/lib/commands/GEOHASH.ts b/packages/client/lib/commands/GEOHASH.ts index 12bc9368eb..d8d2732e51 100644 --- a/packages/client/lib/commands/GEOHASH.ts +++ b/packages/client/lib/commands/GEOHASH.ts @@ -1,15 +1,14 @@ -import { RedisCommandArgument, RedisCommandArguments } from '.'; -import { pushVariadicArguments } from './generic-transformers'; +import { RedisArgument, ArrayReply, BlobStringReply, Command } from '../RESP/types'; +import { RedisVariadicArgument, pushVariadicArguments } from './generic-transformers'; -export const FIRST_KEY_INDEX = 1; - -export const IS_READ_ONLY = true; - -export function transformArguments( - key: RedisCommandArgument, - member: RedisCommandArgument | Array -): RedisCommandArguments { +export default { + FIRST_KEY_INDEX: 1, + IS_READ_ONLY: true, + transformArguments( + key: RedisArgument, + member: RedisVariadicArgument + ) { return pushVariadicArguments(['GEOHASH', key], member); -} - -export declare function transformReply(): Array; + }, + transformReply: undefined as unknown as () => ArrayReply +} as const satisfies Command; diff --git a/packages/client/lib/commands/GEOPOS.ts b/packages/client/lib/commands/GEOPOS.ts index c2e0056155..d9fb5d3a25 100644 --- a/packages/client/lib/commands/GEOPOS.ts +++ b/packages/client/lib/commands/GEOPOS.ts @@ -1,27 +1,19 @@ -import { RedisCommandArgument, RedisCommandArguments } from '.'; -import { pushVariadicArguments } from './generic-transformers'; +import { ArrayReply, BlobStringReply, NullReply, Command, RedisArgument } from '../RESP/types'; +import { RedisVariadicArgument, pushVariadicArguments } from './generic-transformers'; -export const FIRST_KEY_INDEX = 1; - -export const IS_READ_ONLY = true; - -export function transformArguments( - key: RedisCommandArgument, - member: RedisCommandArgument | Array -): RedisCommandArguments { +export default { + FIRST_KEY_INDEX: 1, + IS_READ_ONLY: true, + transformArguments( + key: RedisArgument, + member: RedisVariadicArgument + ) { return pushVariadicArguments(['GEOPOS', key], member); -} - -type GeoCoordinatesRawReply = Array<[RedisCommandArgument, RedisCommandArgument] | null>; - -interface GeoCoordinates { - longitude: RedisCommandArgument; - latitude: RedisCommandArgument; -} - -export function transformReply(reply: GeoCoordinatesRawReply): Array { - return reply.map(coordinates => coordinates === null ? null : { - longitude: coordinates[0], - latitude: coordinates[1] + }, + transformReply(reply: ArrayReply<[BlobStringReply, BlobStringReply] | NullReply>) { + return reply.map(item => item === null ? null : { + longitude: item[0], + latitude: item[1] }); -} + } +} as const satisfies Command; diff --git a/packages/client/lib/commands/GEORADIUS.ts b/packages/client/lib/commands/GEORADIUS.ts index f47cf50884..4b5af7a078 100644 --- a/packages/client/lib/commands/GEORADIUS.ts +++ b/packages/client/lib/commands/GEORADIUS.ts @@ -1,25 +1,25 @@ -import { RedisCommandArgument, RedisCommandArguments } from '.'; -import { GeoSearchOptions, GeoCoordinates, pushGeoRadiusArguments, GeoUnits } from './generic-transformers'; +// import { RedisCommandArgument, RedisCommandArguments } from '.'; +// import { GeoSearchOptions, GeoCoordinates, pushGeoRadiusArguments, GeoUnits } from './generic-transformers'; -export const FIRST_KEY_INDEX = 1; +// export const FIRST_KEY_INDEX = 1; -export const IS_READ_ONLY = true; +// export const IS_READ_ONLY = true; -export function transformArguments( - key: RedisCommandArgument, - coordinates: GeoCoordinates, - radius: number, - unit: GeoUnits, - options?: GeoSearchOptions -): RedisCommandArguments { - return pushGeoRadiusArguments( - ['GEORADIUS'], - key, - coordinates, - radius, - unit, - options - ); -} +// export function transformArguments( +// key: RedisCommandArgument, +// coordinates: GeoCoordinates, +// radius: number, +// unit: GeoUnits, +// options?: GeoSearchOptions +// ): RedisCommandArguments { +// return pushGeoRadiusArguments( +// ['GEORADIUS'], +// key, +// coordinates, +// radius, +// unit, +// options +// ); +// } -export declare function transformReply(): Array; +// export declare function transformReply(): Array; diff --git a/packages/client/lib/commands/GEORADIUSBYMEMBER.ts b/packages/client/lib/commands/GEORADIUSBYMEMBER.ts index 96bb622fb8..ab6950ac8d 100644 --- a/packages/client/lib/commands/GEORADIUSBYMEMBER.ts +++ b/packages/client/lib/commands/GEORADIUSBYMEMBER.ts @@ -1,25 +1,25 @@ -import { RedisCommandArgument, RedisCommandArguments } from '.'; -import { GeoSearchOptions, pushGeoRadiusArguments, GeoUnits } from './generic-transformers'; +// import { RedisCommandArgument, RedisCommandArguments } from '.'; +// import { GeoSearchOptions, pushGeoRadiusArguments, GeoUnits } from './generic-transformers'; -export const FIRST_KEY_INDEX = 1; +// export const FIRST_KEY_INDEX = 1; -export const IS_READ_ONLY = true; +// export const IS_READ_ONLY = true; -export function transformArguments( - key: RedisCommandArgument, - member: string, - radius: number, - unit: GeoUnits, - options?: GeoSearchOptions -): RedisCommandArguments { - return pushGeoRadiusArguments( - ['GEORADIUSBYMEMBER'], - key, - member, - radius, - unit, - options - ); -} +// export function transformArguments( +// key: RedisCommandArgument, +// member: string, +// radius: number, +// unit: GeoUnits, +// options?: GeoSearchOptions +// ): RedisCommandArguments { +// return pushGeoRadiusArguments( +// ['GEORADIUSBYMEMBER'], +// key, +// member, +// radius, +// unit, +// options +// ); +// } -export declare function transformReply(): Array; +// export declare function transformReply(): Array; diff --git a/packages/client/lib/commands/GEORADIUSBYMEMBERSTORE.ts b/packages/client/lib/commands/GEORADIUSBYMEMBERSTORE.ts index 28f3c25fac..ea1674cf3f 100644 --- a/packages/client/lib/commands/GEORADIUSBYMEMBERSTORE.ts +++ b/packages/client/lib/commands/GEORADIUSBYMEMBERSTORE.ts @@ -1,25 +1,25 @@ -import { RedisCommandArgument, RedisCommandArguments } from '.'; -import { GeoUnits, GeoRadiusStoreOptions, pushGeoRadiusStoreArguments } from './generic-transformers'; +// import { RedisCommandArgument, RedisCommandArguments } from '.'; +// import { GeoUnits, GeoRadiusStoreOptions, pushGeoRadiusStoreArguments } from './generic-transformers'; -export { FIRST_KEY_INDEX, IS_READ_ONLY } from './GEORADIUSBYMEMBER'; +// export { FIRST_KEY_INDEX, IS_READ_ONLY } from './GEORADIUSBYMEMBER'; -export function transformArguments( - key: RedisCommandArgument, - member: string, - radius: number, - unit: GeoUnits, - destination: RedisCommandArgument, - options?: GeoRadiusStoreOptions, -): RedisCommandArguments { - return pushGeoRadiusStoreArguments( - ['GEORADIUSBYMEMBER'], - key, - member, - radius, - unit, - destination, - options - ); -} +// export function transformArguments( +// key: RedisCommandArgument, +// member: string, +// radius: number, +// unit: GeoUnits, +// destination: RedisCommandArgument, +// options?: GeoRadiusStoreOptions, +// ): RedisCommandArguments { +// return pushGeoRadiusStoreArguments( +// ['GEORADIUSBYMEMBER'], +// key, +// member, +// radius, +// unit, +// destination, +// options +// ); +// } -export declare function transformReply(): number +// export declare function transformReply(): number diff --git a/packages/client/lib/commands/GEORADIUSBYMEMBER_RO.ts b/packages/client/lib/commands/GEORADIUSBYMEMBER_RO.ts index 63f29ae65b..1ad9450ae3 100644 --- a/packages/client/lib/commands/GEORADIUSBYMEMBER_RO.ts +++ b/packages/client/lib/commands/GEORADIUSBYMEMBER_RO.ts @@ -1,25 +1,25 @@ -import { RedisCommandArgument, RedisCommandArguments } from '.'; -import { GeoSearchOptions, pushGeoRadiusArguments, GeoUnits } from './generic-transformers'; +// import { RedisCommandArgument, RedisCommandArguments } from '.'; +// import { GeoSearchOptions, pushGeoRadiusArguments, GeoUnits } from './generic-transformers'; -export const FIRST_KEY_INDEX = 1; +// export const FIRST_KEY_INDEX = 1; -export const IS_READ_ONLY = true; +// export const IS_READ_ONLY = true; -export function transformArguments( - key: RedisCommandArgument, - member: string, - radius: number, - unit: GeoUnits, - options?: GeoSearchOptions -): RedisCommandArguments { - return pushGeoRadiusArguments( - ['GEORADIUSBYMEMBER_RO'], - key, - member, - radius, - unit, - options - ); -} +// export function transformArguments( +// key: RedisCommandArgument, +// member: string, +// radius: number, +// unit: GeoUnits, +// options?: GeoSearchOptions +// ): RedisCommandArguments { +// return pushGeoRadiusArguments( +// ['GEORADIUSBYMEMBER_RO'], +// key, +// member, +// radius, +// unit, +// options +// ); +// } -export declare function transformReply(): Array; +// export declare function transformReply(): Array; diff --git a/packages/client/lib/commands/GEORADIUSBYMEMBER_RO_WITH.ts b/packages/client/lib/commands/GEORADIUSBYMEMBER_RO_WITH.ts index 6061be734b..116bb9200f 100644 --- a/packages/client/lib/commands/GEORADIUSBYMEMBER_RO_WITH.ts +++ b/packages/client/lib/commands/GEORADIUSBYMEMBER_RO_WITH.ts @@ -1,30 +1,30 @@ -import { RedisCommandArgument, RedisCommandArguments } from '.'; -import { GeoReplyWith, GeoSearchOptions, GeoUnits } from './generic-transformers'; -import { transformArguments as geoRadiusTransformArguments } from './GEORADIUSBYMEMBER_RO'; +// import { RedisCommandArgument, RedisCommandArguments } from '.'; +// import { GeoReplyWith, GeoSearchOptions, GeoUnits } from './generic-transformers'; +// import { transformArguments as geoRadiusTransformArguments } from './GEORADIUSBYMEMBER_RO'; -export { FIRST_KEY_INDEX, IS_READ_ONLY } from './GEORADIUSBYMEMBER_RO'; +// export { FIRST_KEY_INDEX, IS_READ_ONLY } from './GEORADIUSBYMEMBER_RO'; -export function transformArguments( - key: RedisCommandArgument, - member: string, - radius: number, - unit: GeoUnits, - replyWith: Array, - options?: GeoSearchOptions -): RedisCommandArguments { - const args: RedisCommandArguments = geoRadiusTransformArguments( - key, - member, - radius, - unit, - options - ); +// export function transformArguments( +// key: RedisCommandArgument, +// member: string, +// radius: number, +// unit: GeoUnits, +// replyWith: Array, +// options?: GeoSearchOptions +// ): RedisCommandArguments { +// const args: RedisCommandArguments = geoRadiusTransformArguments( +// key, +// member, +// radius, +// unit, +// options +// ); - args.push(...replyWith); +// args.push(...replyWith); - args.preserve = replyWith; +// args.preserve = replyWith; - return args; -} +// return args; +// } -export { transformGeoMembersWithReply as transformReply } from './generic-transformers'; +// export { transformGeoMembersWithReply as transformReply } from './generic-transformers'; diff --git a/packages/client/lib/commands/GEORADIUSBYMEMBER_WITH.ts b/packages/client/lib/commands/GEORADIUSBYMEMBER_WITH.ts index 7d7dbe06a5..09bb5bbbb4 100644 --- a/packages/client/lib/commands/GEORADIUSBYMEMBER_WITH.ts +++ b/packages/client/lib/commands/GEORADIUSBYMEMBER_WITH.ts @@ -1,30 +1,30 @@ -import { RedisCommandArgument, RedisCommandArguments } from '.'; -import { GeoReplyWith, GeoSearchOptions, GeoUnits } from './generic-transformers'; -import { transformArguments as transformGeoRadiusArguments } from './GEORADIUSBYMEMBER'; +// import { RedisCommandArgument, RedisCommandArguments } from '.'; +// import { GeoReplyWith, GeoSearchOptions, GeoUnits } from './generic-transformers'; +// import { transformArguments as transformGeoRadiusArguments } from './GEORADIUSBYMEMBER'; -export { FIRST_KEY_INDEX, IS_READ_ONLY } from './GEORADIUSBYMEMBER'; +// export { FIRST_KEY_INDEX, IS_READ_ONLY } from './GEORADIUSBYMEMBER'; -export function transformArguments( - key: RedisCommandArgument, - member: string, - radius: number, - unit: GeoUnits, - replyWith: Array, - options?: GeoSearchOptions -): RedisCommandArguments { - const args: RedisCommandArguments = transformGeoRadiusArguments( - key, - member, - radius, - unit, - options - ); +// export function transformArguments( +// key: RedisCommandArgument, +// member: string, +// radius: number, +// unit: GeoUnits, +// replyWith: Array, +// options?: GeoSearchOptions +// ): RedisCommandArguments { +// const args: RedisCommandArguments = transformGeoRadiusArguments( +// key, +// member, +// radius, +// unit, +// options +// ); - args.push(...replyWith); +// args.push(...replyWith); - args.preserve = replyWith; +// args.preserve = replyWith; - return args; -} +// return args; +// } -export { transformGeoMembersWithReply as transformReply } from './generic-transformers'; +// export { transformGeoMembersWithReply as transformReply } from './generic-transformers'; diff --git a/packages/client/lib/commands/GEORADIUSSTORE.ts b/packages/client/lib/commands/GEORADIUSSTORE.ts index ad2317aa3a..0344525964 100644 --- a/packages/client/lib/commands/GEORADIUSSTORE.ts +++ b/packages/client/lib/commands/GEORADIUSSTORE.ts @@ -1,25 +1,25 @@ -import { RedisCommandArgument, RedisCommandArguments } from '.'; -import { GeoCoordinates, GeoUnits, GeoRadiusStoreOptions, pushGeoRadiusStoreArguments } from './generic-transformers'; +// import { RedisCommandArgument, RedisCommandArguments } from '.'; +// import { GeoCoordinates, GeoUnits, GeoRadiusStoreOptions, pushGeoRadiusStoreArguments } from './generic-transformers'; -export { FIRST_KEY_INDEX, IS_READ_ONLY } from './GEORADIUS'; +// export { FIRST_KEY_INDEX, IS_READ_ONLY } from './GEORADIUS'; -export function transformArguments( - key: RedisCommandArgument, - coordinates: GeoCoordinates, - radius: number, - unit: GeoUnits, - destination: RedisCommandArgument, - options?: GeoRadiusStoreOptions, -): RedisCommandArguments { - return pushGeoRadiusStoreArguments( - ['GEORADIUS'], - key, - coordinates, - radius, - unit, - destination, - options - ); -} +// export function transformArguments( +// key: RedisCommandArgument, +// coordinates: GeoCoordinates, +// radius: number, +// unit: GeoUnits, +// destination: RedisCommandArgument, +// options?: GeoRadiusStoreOptions, +// ): RedisCommandArguments { +// return pushGeoRadiusStoreArguments( +// ['GEORADIUS'], +// key, +// coordinates, +// radius, +// unit, +// destination, +// options +// ); +// } -export declare function transformReply(): number; +// export declare function transformReply(): number; diff --git a/packages/client/lib/commands/GEORADIUS_RO.ts b/packages/client/lib/commands/GEORADIUS_RO.ts index ac378a5150..d9c01007ed 100644 --- a/packages/client/lib/commands/GEORADIUS_RO.ts +++ b/packages/client/lib/commands/GEORADIUS_RO.ts @@ -1,25 +1,25 @@ -import { RedisCommandArgument, RedisCommandArguments } from '.'; -import { GeoSearchOptions, GeoCoordinates, pushGeoRadiusArguments, GeoUnits } from './generic-transformers'; +// import { RedisCommandArgument, RedisCommandArguments } from '.'; +// import { GeoSearchOptions, GeoCoordinates, pushGeoRadiusArguments, GeoUnits } from './generic-transformers'; -export const FIRST_KEY_INDEX = 1; +// export const FIRST_KEY_INDEX = 1; -export const IS_READ_ONLY = true; +// export const IS_READ_ONLY = true; -export function transformArguments( - key: RedisCommandArgument, - coordinates: GeoCoordinates, - radius: number, - unit: GeoUnits, - options?: GeoSearchOptions -): RedisCommandArguments { - return pushGeoRadiusArguments( - ['GEORADIUS_RO'], - key, - coordinates, - radius, - unit, - options - ); -} +// export function transformArguments( +// key: RedisCommandArgument, +// coordinates: GeoCoordinates, +// radius: number, +// unit: GeoUnits, +// options?: GeoSearchOptions +// ): RedisCommandArguments { +// return pushGeoRadiusArguments( +// ['GEORADIUS_RO'], +// key, +// coordinates, +// radius, +// unit, +// options +// ); +// } -export declare function transformReply(): Array; +// export declare function transformReply(): Array; diff --git a/packages/client/lib/commands/GEORADIUS_RO_WITH.ts b/packages/client/lib/commands/GEORADIUS_RO_WITH.ts index 424e5fcd99..156f5cfa9f 100644 --- a/packages/client/lib/commands/GEORADIUS_RO_WITH.ts +++ b/packages/client/lib/commands/GEORADIUS_RO_WITH.ts @@ -1,30 +1,30 @@ -import { RedisCommandArgument, RedisCommandArguments } from '.'; -import { GeoReplyWith, GeoSearchOptions, GeoCoordinates, GeoUnits } from './generic-transformers'; -import { transformArguments as transformGeoRadiusRoArguments } from './GEORADIUS_RO'; +// import { RedisCommandArgument, RedisCommandArguments } from '.'; +// import { GeoReplyWith, GeoSearchOptions, GeoCoordinates, GeoUnits } from './generic-transformers'; +// import { transformArguments as transformGeoRadiusRoArguments } from './GEORADIUS_RO'; -export { FIRST_KEY_INDEX, IS_READ_ONLY } from './GEORADIUS_RO'; +// export { FIRST_KEY_INDEX, IS_READ_ONLY } from './GEORADIUS_RO'; -export function transformArguments( - key: RedisCommandArgument, - coordinates: GeoCoordinates, - radius: number, - unit: GeoUnits, - replyWith: Array, - options?: GeoSearchOptions -): RedisCommandArguments { - const args: RedisCommandArguments = transformGeoRadiusRoArguments( - key, - coordinates, - radius, - unit, - options - ); +// export function transformArguments( +// key: RedisCommandArgument, +// coordinates: GeoCoordinates, +// radius: number, +// unit: GeoUnits, +// replyWith: Array, +// options?: GeoSearchOptions +// ): RedisCommandArguments { +// const args: RedisCommandArguments = transformGeoRadiusRoArguments( +// key, +// coordinates, +// radius, +// unit, +// options +// ); - args.push(...replyWith); +// args.push(...replyWith); - args.preserve = replyWith; +// args.preserve = replyWith; - return args; -} +// return args; +// } -export { transformGeoMembersWithReply as transformReply } from './generic-transformers'; +// export { transformGeoMembersWithReply as transformReply } from './generic-transformers'; diff --git a/packages/client/lib/commands/GEORADIUS_WITH.ts b/packages/client/lib/commands/GEORADIUS_WITH.ts index dc3f4288f0..d41132ce2d 100644 --- a/packages/client/lib/commands/GEORADIUS_WITH.ts +++ b/packages/client/lib/commands/GEORADIUS_WITH.ts @@ -1,30 +1,30 @@ -import { RedisCommandArgument, RedisCommandArguments } from '.'; -import { GeoReplyWith, GeoSearchOptions, GeoCoordinates, GeoUnits } from './generic-transformers'; -import { transformArguments as transformGeoRadiusArguments } from './GEORADIUS'; +// import { RedisCommandArgument, RedisCommandArguments } from '.'; +// import { GeoReplyWith, GeoSearchOptions, GeoCoordinates, GeoUnits } from './generic-transformers'; +// import { transformArguments as transformGeoRadiusArguments } from './GEORADIUS'; -export { FIRST_KEY_INDEX, IS_READ_ONLY } from './GEORADIUS'; +// export { FIRST_KEY_INDEX, IS_READ_ONLY } from './GEORADIUS'; -export function transformArguments( - key: RedisCommandArgument, - coordinates: GeoCoordinates, - radius: number, - unit: GeoUnits, - replyWith: Array, - options?: GeoSearchOptions -): RedisCommandArguments { - const args: RedisCommandArguments = transformGeoRadiusArguments( - key, - coordinates, - radius, - unit, - options - ); +// export function transformArguments( +// key: RedisCommandArgument, +// coordinates: GeoCoordinates, +// radius: number, +// unit: GeoUnits, +// replyWith: Array, +// options?: GeoSearchOptions +// ): RedisCommandArguments { +// const args: RedisCommandArguments = transformGeoRadiusArguments( +// key, +// coordinates, +// radius, +// unit, +// options +// ); - args.push(...replyWith); +// args.push(...replyWith); - args.preserve = replyWith; +// args.preserve = replyWith; - return args; -} +// return args; +// } -export { transformGeoMembersWithReply as transformReply } from './generic-transformers'; +// export { transformGeoMembersWithReply as transformReply } from './generic-transformers'; diff --git a/packages/client/lib/commands/GEOSEARCH.ts b/packages/client/lib/commands/GEOSEARCH.ts index a02a21391f..31a65ee8dc 100644 --- a/packages/client/lib/commands/GEOSEARCH.ts +++ b/packages/client/lib/commands/GEOSEARCH.ts @@ -1,17 +1,17 @@ -import { RedisCommandArgument, RedisCommandArguments } from '.'; -import { GeoSearchFrom, GeoSearchBy, GeoSearchOptions, pushGeoSearchArguments } from './generic-transformers'; +// import { RedisCommandArgument, RedisCommandArguments } from '.'; +// import { GeoSearchFrom, GeoSearchBy, GeoSearchOptions, pushGeoSearchArguments } from './generic-transformers'; -export const FIRST_KEY_INDEX = 1; +// export const FIRST_KEY_INDEX = 1; -export const IS_READ_ONLY = true; +// export const IS_READ_ONLY = true; -export function transformArguments( - key: RedisCommandArgument, - from: GeoSearchFrom, - by: GeoSearchBy, - options?: GeoSearchOptions -): RedisCommandArguments { - return pushGeoSearchArguments(['GEOSEARCH'], key, from, by, options); -} +// export function transformArguments( +// key: RedisCommandArgument, +// from: GeoSearchFrom, +// by: GeoSearchBy, +// options?: GeoSearchOptions +// ): RedisCommandArguments { +// return pushGeoSearchArguments(['GEOSEARCH'], key, from, by, options); +// } -export declare function transformReply(): Array; +// export declare function transformReply(): Array; diff --git a/packages/client/lib/commands/GEOSEARCHSTORE.ts b/packages/client/lib/commands/GEOSEARCHSTORE.ts index 7a91450cd9..a8cdb82d71 100644 --- a/packages/client/lib/commands/GEOSEARCHSTORE.ts +++ b/packages/client/lib/commands/GEOSEARCHSTORE.ts @@ -1,38 +1,38 @@ -import { RedisCommandArgument, RedisCommandArguments } from '.'; -import { GeoSearchFrom, GeoSearchBy, GeoSearchOptions, pushGeoSearchArguments } from './generic-transformers'; +// import { RedisCommandArgument, RedisCommandArguments } from '.'; +// import { GeoSearchFrom, GeoSearchBy, GeoSearchOptions, pushGeoSearchArguments } from './generic-transformers'; -export { FIRST_KEY_INDEX, IS_READ_ONLY } from './GEOSEARCH'; +// export { FIRST_KEY_INDEX, IS_READ_ONLY } from './GEOSEARCH'; -interface GeoSearchStoreOptions extends GeoSearchOptions { - STOREDIST?: true; -} +// interface GeoSearchStoreOptions extends GeoSearchOptions { +// STOREDIST?: true; +// } -export function transformArguments( - destination: RedisCommandArgument, - source: RedisCommandArgument, - from: GeoSearchFrom, - by: GeoSearchBy, - options?: GeoSearchStoreOptions -): RedisCommandArguments { - const args = pushGeoSearchArguments( - ['GEOSEARCHSTORE', destination], - source, - from, - by, - options - ); +// export function transformArguments( +// destination: RedisCommandArgument, +// source: RedisCommandArgument, +// from: GeoSearchFrom, +// by: GeoSearchBy, +// options?: GeoSearchStoreOptions +// ): RedisCommandArguments { +// const args = pushGeoSearchArguments( +// ['GEOSEARCHSTORE', destination], +// source, +// from, +// by, +// options +// ); - if (options?.STOREDIST) { - args.push('STOREDIST'); - } +// if (options?.STOREDIST) { +// args.push('STOREDIST'); +// } - return args; -} +// return args; +// } -export function transformReply(reply: number): number { - if (typeof reply !== 'number') { - throw new TypeError(`https://github.com/redis/redis/issues/9261`); - } +// export function transformReply(reply: number): number { +// if (typeof reply !== 'number') { +// throw new TypeError(`https://github.com/redis/redis/issues/9261`); +// } - return reply; -} +// return reply; +// } diff --git a/packages/client/lib/commands/GEOSEARCH_WITH.ts b/packages/client/lib/commands/GEOSEARCH_WITH.ts index d7a5f456a9..e706b08b9e 100644 --- a/packages/client/lib/commands/GEOSEARCH_WITH.ts +++ b/packages/client/lib/commands/GEOSEARCH_WITH.ts @@ -1,23 +1,23 @@ -import { RedisCommandArgument, RedisCommandArguments } from '.'; -import { GeoSearchFrom, GeoSearchBy, GeoReplyWith, GeoSearchOptions } from './generic-transformers'; -import { transformArguments as geoSearchTransformArguments } from './GEOSEARCH'; +// import { RedisCommandArgument, RedisCommandArguments } from '.'; +// import { GeoSearchFrom, GeoSearchBy, GeoReplyWith, GeoSearchOptions } from './generic-transformers'; +// import { transformArguments as geoSearchTransformArguments } from './GEOSEARCH'; -export { FIRST_KEY_INDEX, IS_READ_ONLY } from './GEOSEARCH'; +// export { FIRST_KEY_INDEX, IS_READ_ONLY } from './GEOSEARCH'; -export function transformArguments( - key: RedisCommandArgument, - from: GeoSearchFrom, - by: GeoSearchBy, - replyWith: Array, - options?: GeoSearchOptions -): RedisCommandArguments { - const args: RedisCommandArguments = geoSearchTransformArguments(key, from, by, options); +// export function transformArguments( +// key: RedisCommandArgument, +// from: GeoSearchFrom, +// by: GeoSearchBy, +// replyWith: Array, +// options?: GeoSearchOptions +// ): RedisCommandArguments { +// const args: RedisCommandArguments = geoSearchTransformArguments(key, from, by, options); - args.push(...replyWith); +// args.push(...replyWith); - args.preserve = replyWith; +// args.preserve = replyWith; - return args; -} +// return args; +// } -export { transformGeoMembersWithReply as transformReply } from './generic-transformers'; +// export { transformGeoMembersWithReply as transformReply } from './generic-transformers'; diff --git a/packages/client/lib/commands/GETBIT.ts b/packages/client/lib/commands/GETBIT.ts index 67f67f39b1..d8ece8f523 100644 --- a/packages/client/lib/commands/GETBIT.ts +++ b/packages/client/lib/commands/GETBIT.ts @@ -1,15 +1,11 @@ -import { RedisCommandArgument, RedisCommandArguments } from '.'; +import { NumberReply, Command, RedisArgument } from '../RESP/types'; import { BitValue } from './generic-transformers'; -export const FIRST_KEY_INDEX = 1; - -export const IS_READ_ONLY = true; - -export function transformArguments( - key: RedisCommandArgument, - offset: number -): RedisCommandArguments { +export default { + FIRST_KEY_INDEX: 1, + IS_READ_ONLY: true, + transformArguments(key: RedisArgument, offset: number) { return ['GETBIT', key, offset.toString()]; -} - -export declare function transformReply(): BitValue; + }, + transformReply: undefined as unknown as () => NumberReply +} as const satisfies Command; diff --git a/packages/client/lib/commands/HSCAN.ts b/packages/client/lib/commands/HSCAN.ts index a23063e34f..2391424eb2 100644 --- a/packages/client/lib/commands/HSCAN.ts +++ b/packages/client/lib/commands/HSCAN.ts @@ -1,5 +1,5 @@ import { RedisArgument, BlobStringReply, Command } from '../RESP/types'; -import { ScanOptions, pushScanArguments } from './generic-transformers'; +import { ScanCommonOptions, pushScanArguments } from './SCAN'; export interface HScanEntry { field: BlobStringReply; @@ -12,7 +12,7 @@ export default { transformArguments( key: RedisArgument, cursor: number, - options?: ScanOptions + options?: ScanCommonOptions ) { return pushScanArguments(['HSCAN', key], cursor, options); }, diff --git a/packages/client/lib/commands/LATENCY_GRAPH.ts b/packages/client/lib/commands/LATENCY_GRAPH.ts index e4e078b90f..a789a79075 100644 --- a/packages/client/lib/commands/LATENCY_GRAPH.ts +++ b/packages/client/lib/commands/LATENCY_GRAPH.ts @@ -1,25 +1,25 @@ -import { RedisCommandArguments } from '.'; +// import { RedisCommandArguments } from '.'; -export type EventType = - 'active-defrag-cycle' - | 'aof-fsync-always' - | 'aof-stat' - | 'aof-rewrite-diff-write' - | 'aof-rename' - | 'aof-write' - | 'aof-write-active-child' - | 'aof-write-alone' - | 'aof-write-pending-fsync' - | 'command' - | 'expire-cycle' - | 'eviction-cycle' - | 'eviction-del' - | 'fast-command' - | 'fork' - | 'rdb-unlink-temp-file'; +// export type EventType = +// 'active-defrag-cycle' +// | 'aof-fsync-always' +// | 'aof-stat' +// | 'aof-rewrite-diff-write' +// | 'aof-rename' +// | 'aof-write' +// | 'aof-write-active-child' +// | 'aof-write-alone' +// | 'aof-write-pending-fsync' +// | 'command' +// | 'expire-cycle' +// | 'eviction-cycle' +// | 'eviction-del' +// | 'fast-command' +// | 'fork' +// | 'rdb-unlink-temp-file'; -export function transformArguments(event: EventType): RedisCommandArguments { - return ['LATENCY', 'GRAPH', event]; -} +// export function transformArguments(event: EventType): RedisCommandArguments { +// return ['LATENCY', 'GRAPH', event]; +// } -export declare function transformReply(): string; +// export declare function transformReply(): string; diff --git a/packages/client/lib/commands/LMPOP.ts b/packages/client/lib/commands/LMPOP.ts index d52245251b..5cefc29630 100644 --- a/packages/client/lib/commands/LMPOP.ts +++ b/packages/client/lib/commands/LMPOP.ts @@ -1,10 +1,10 @@ -import { RedisArgument, NullReply, TuplesReply, BlobStringReply, Command } from '../RESP/types'; -import { transformLMPopArguments, LMPopOptions, ListSide } from './generic-transformers'; +import { NullReply, TuplesReply, BlobStringReply, Command } from '../RESP/types'; +import { transformLMPopArguments, LMPopOptions, ListSide, RedisVariadicArgument } from './generic-transformers'; export default { FIRST_KEY_INDEX: 2, transformArguments( - keys: RedisArgument | Array, + keys: RedisVariadicArgument, side: ListSide, options?: LMPopOptions ) { diff --git a/packages/client/lib/commands/LOLWUT.ts b/packages/client/lib/commands/LOLWUT.ts index 8536711d32..7a6c8329d6 100644 --- a/packages/client/lib/commands/LOLWUT.ts +++ b/packages/client/lib/commands/LOLWUT.ts @@ -1,8 +1,8 @@ import { BlobStringReply, Command } from '../RESP/types'; export default { - IS_READ_ONLY: true, FIRST_KEY_INDEX: undefined, + IS_READ_ONLY: true, transformArguments(version?: number, ...optionalArguments: Array) { const args = ['LOLWUT']; diff --git a/packages/client/lib/commands/LPOP_COUNT.ts b/packages/client/lib/commands/LPOP_COUNT.ts index 6cbc8564ab..a1536e78dc 100644 --- a/packages/client/lib/commands/LPOP_COUNT.ts +++ b/packages/client/lib/commands/LPOP_COUNT.ts @@ -1,8 +1,8 @@ import { RedisArgument, NullReply, ArrayReply, BlobStringReply, Command } from '../RESP/types'; export default { - IS_READ_ONLY: false, FIRST_KEY_INDEX: 2, + IS_READ_ONLY: false, transformArguments(key: RedisArgument, count: number) { return ['LPOP', key, count.toString()]; }, diff --git a/packages/client/lib/commands/LPUSH.ts b/packages/client/lib/commands/LPUSH.ts index 72d4d7b676..714db2ae9a 100644 --- a/packages/client/lib/commands/LPUSH.ts +++ b/packages/client/lib/commands/LPUSH.ts @@ -1,9 +1,9 @@ import { RedisArgument, NumberReply, Command } from '../RESP/types'; -import { pushVariadicArguments } from './generic-transformers'; +import { RedisVariadicArgument, pushVariadicArguments } from './generic-transformers'; export default { FIRST_KEY_INDEX: 1, - transformArguments(key: RedisArgument, elements: RedisArgument | Array) { + transformArguments(key: RedisArgument, elements: RedisVariadicArgument) { return pushVariadicArguments(['LPUSH', key], elements); }, transformReply: undefined as unknown as () => NumberReply diff --git a/packages/client/lib/commands/LPUSHX.ts b/packages/client/lib/commands/LPUSHX.ts index 1265c56a26..d6dceda6d0 100644 --- a/packages/client/lib/commands/LPUSHX.ts +++ b/packages/client/lib/commands/LPUSHX.ts @@ -1,9 +1,9 @@ import { RedisArgument, NumberReply, Command } from '../RESP/types'; -import { pushVariadicArguments } from './generic-transformers'; +import { RedisVariadicArgument, pushVariadicArguments } from './generic-transformers'; export default { FIRST_KEY_INDEX: 1, - transformArguments(key: RedisArgument, elements: RedisArgument | Array) { + transformArguments(key: RedisArgument, elements: RedisVariadicArgument) { return pushVariadicArguments(['LPUSHX', key], elements); }, transformReply: undefined as unknown as () => NumberReply diff --git a/packages/client/lib/commands/MODULE_LIST.ts b/packages/client/lib/commands/MODULE_LIST.ts index 56a6109528..5ab297faec 100644 --- a/packages/client/lib/commands/MODULE_LIST.ts +++ b/packages/client/lib/commands/MODULE_LIST.ts @@ -6,8 +6,8 @@ export type ModuleListReply = ArrayReply>; export default { - IS_READ_ONLY: true, FIRST_KEY_INDEX: undefined, + IS_READ_ONLY: true, transformArguments() { return ['MODULE', 'LIST']; }, diff --git a/packages/client/lib/commands/MODULE_LOAD.ts b/packages/client/lib/commands/MODULE_LOAD.ts index ed0520adf4..3fab206eef 100644 --- a/packages/client/lib/commands/MODULE_LOAD.ts +++ b/packages/client/lib/commands/MODULE_LOAD.ts @@ -2,10 +2,16 @@ import { RedisArgument, SimpleStringReply, Command } from '../RESP/types'; import { pushVariadicArguments } from './generic-transformers'; export default { - IS_READ_ONLY: true, FIRST_KEY_INDEX: undefined, + IS_READ_ONLY: true, transformArguments(path: RedisArgument, moduleArguments?: Array) { - return pushVariadicArguments(['MODULE', 'LOAD', path], moduleArguments); + const args = ['MODULE', 'LOAD', path]; + + if (moduleArguments) { + return args.concat(moduleArguments); + } + + return args; }, transformReply: undefined as unknown as () => SimpleStringReply } as const satisfies Command; diff --git a/packages/client/lib/commands/MODULE_UNLOAD.ts b/packages/client/lib/commands/MODULE_UNLOAD.ts index 4f47abbdea..8d1e64800a 100644 --- a/packages/client/lib/commands/MODULE_UNLOAD.ts +++ b/packages/client/lib/commands/MODULE_UNLOAD.ts @@ -1,8 +1,8 @@ import { RedisArgument, SimpleStringReply, Command } from '../RESP/types'; export default { - IS_READ_ONLY: true, FIRST_KEY_INDEX: undefined, + IS_READ_ONLY: true, transformArguments(name: RedisArgument) { return ['MODULE', 'UNLOAD', name]; }, diff --git a/packages/client/lib/commands/PFADD.ts b/packages/client/lib/commands/PFADD.ts index bdde0648f3..41bf2adfe5 100644 --- a/packages/client/lib/commands/PFADD.ts +++ b/packages/client/lib/commands/PFADD.ts @@ -1,11 +1,14 @@ import { RedisArgument, ArrayReply, BlobStringReply, Command } from '../RESP/types'; -import { pushVariadicArguments } from './generic-transformers'; +import { RedisVariadicArgument, pushVariadicArguments } from './generic-transformers'; export default { FIRST_KEY_INDEX: 1, IS_READ_ONLY: true, - transformArguments(key: RedisArgument, element?: RedisArgument | Array) { - return pushVariadicArguments(['PFADD', key], element); + transformArguments(key: RedisArgument, element?: RedisVariadicArgument) { + const args = ['PFADD', key]; + if (!element) return args; + + return pushVariadicArguments(args, element); }, transformReply: undefined as unknown as () => ArrayReply } as const satisfies Command; diff --git a/packages/client/lib/commands/PFCOUNT.ts b/packages/client/lib/commands/PFCOUNT.ts index d2370d3228..5b46eb00d9 100644 --- a/packages/client/lib/commands/PFCOUNT.ts +++ b/packages/client/lib/commands/PFCOUNT.ts @@ -1,10 +1,10 @@ -import { RedisArgument, NumberReply, Command } from '../RESP/types'; -import { pushVariadicArguments } from './generic-transformers'; +import { NumberReply, Command } from '../RESP/types'; +import { RedisVariadicArgument, pushVariadicArguments } from './generic-transformers'; export default { FIRST_KEY_INDEX: 1, IS_READ_ONLY: true, - transformArguments(key?: RedisArgument | Array) { + transformArguments(key: RedisVariadicArgument) { return pushVariadicArguments(['PFCOUNT'], key); }, transformReply: undefined as unknown as () => NumberReply diff --git a/packages/client/lib/commands/PFMERGE.ts b/packages/client/lib/commands/PFMERGE.ts index 5735e51bba..eeeeb5173d 100644 --- a/packages/client/lib/commands/PFMERGE.ts +++ b/packages/client/lib/commands/PFMERGE.ts @@ -1,13 +1,16 @@ import { RedisArgument, SimpleStringReply, Command } from '../RESP/types'; -import { pushVariadicArguments } from './generic-transformers'; +import { RedisVariadicArgument, pushVariadicArguments } from './generic-transformers'; export default { FIRST_KEY_INDEX: 1, transformArguments( destination: RedisArgument, - source?: RedisArgument | Array + source?: RedisVariadicArgument ) { - return pushVariadicArguments(['PFMERGE', destination], source); + const args = ['PFMERGE', destination]; + if (!source) return args; + + return pushVariadicArguments(args, source); }, transformReply: undefined as unknown as () => SimpleStringReply } as const satisfies Command; diff --git a/packages/client/lib/commands/PUBLISH.ts b/packages/client/lib/commands/PUBLISH.ts index 1038dea52f..1566651d9f 100644 --- a/packages/client/lib/commands/PUBLISH.ts +++ b/packages/client/lib/commands/PUBLISH.ts @@ -1,8 +1,8 @@ import { RedisArgument, NumberReply, Command } from '../RESP/types'; export default { - IS_READ_ONLY: true, FIRST_KEY_INDEX: undefined, + IS_READ_ONLY: true, transformArguments(channel: RedisArgument, message: RedisArgument) { return ['PUBLISH', channel, message]; }, diff --git a/packages/client/lib/commands/PUBSUB_CHANNELS.ts b/packages/client/lib/commands/PUBSUB_CHANNELS.ts index c828ebefce..4bf7abd75d 100644 --- a/packages/client/lib/commands/PUBSUB_CHANNELS.ts +++ b/packages/client/lib/commands/PUBSUB_CHANNELS.ts @@ -1,8 +1,8 @@ import { RedisArgument, ArrayReply, BlobStringReply, Command } from '../RESP/types'; export default { - IS_READ_ONLY: true, FIRST_KEY_INDEX: undefined, + IS_READ_ONLY: true, transformArguments(pattern?: RedisArgument) { const args: Array = ['PUBSUB', 'CHANNELS']; diff --git a/packages/client/lib/commands/PUBSUB_NUMPAT.ts b/packages/client/lib/commands/PUBSUB_NUMPAT.ts index b800b719dc..e8a0738dc7 100644 --- a/packages/client/lib/commands/PUBSUB_NUMPAT.ts +++ b/packages/client/lib/commands/PUBSUB_NUMPAT.ts @@ -1,8 +1,8 @@ import { NumberReply, Command } from '../RESP/types'; export default { - IS_READ_ONLY: true, FIRST_KEY_INDEX: undefined, + IS_READ_ONLY: true, transformArguments() { return ['PUBSUB', 'NUMPAT']; }, diff --git a/packages/client/lib/commands/PUBSUB_NUMSUB.ts b/packages/client/lib/commands/PUBSUB_NUMSUB.ts index f0da89069d..aaa6cf749c 100644 --- a/packages/client/lib/commands/PUBSUB_NUMSUB.ts +++ b/packages/client/lib/commands/PUBSUB_NUMSUB.ts @@ -1,10 +1,10 @@ -import { RedisArgument, ArrayReply, BlobStringReply, NumberReply, Command } from '../RESP/types'; -import { pushVariadicArguments } from './generic-transformers'; +import { ArrayReply, BlobStringReply, NumberReply, Command } from '../RESP/types'; +import { RedisVariadicArgument, pushVariadicArguments } from './generic-transformers'; export default { - IS_READ_ONLY: true, FIRST_KEY_INDEX: undefined, - transformArguments(channels?: RedisArgument | Array) { + IS_READ_ONLY: true, + transformArguments(channels?: RedisVariadicArgument) { const args = ['PUBSUB', 'NUMSUB']; if (channels) return pushVariadicArguments(args, channels); diff --git a/packages/client/lib/commands/PUBSUB_SHARDCHANNELS.ts b/packages/client/lib/commands/PUBSUB_SHARDCHANNELS.ts index 8acf29c15b..1403d67fa2 100644 --- a/packages/client/lib/commands/PUBSUB_SHARDCHANNELS.ts +++ b/packages/client/lib/commands/PUBSUB_SHARDCHANNELS.ts @@ -1,8 +1,8 @@ import { RedisArgument, ArrayReply, BlobStringReply, Command } from '../RESP/types'; export default { - IS_READ_ONLY: true, FIRST_KEY_INDEX: undefined, + IS_READ_ONLY: true, transformArguments(pattern?: RedisArgument) { const args: Array = ['PUBSUB', 'bb']; diff --git a/packages/client/lib/commands/READONLY.ts b/packages/client/lib/commands/READONLY.ts index 094ff1cc02..bb15834550 100644 --- a/packages/client/lib/commands/READONLY.ts +++ b/packages/client/lib/commands/READONLY.ts @@ -1,8 +1,8 @@ import { SimpleStringReply, Command } from '../RESP/types'; export default { - IS_READ_ONLY: true, FIRST_KEY_INDEX: undefined, + IS_READ_ONLY: true, transformArguments() { return ['READONLY']; }, diff --git a/packages/client/lib/commands/READWRITE.ts b/packages/client/lib/commands/READWRITE.ts index b370ec7417..fe70e15d4c 100644 --- a/packages/client/lib/commands/READWRITE.ts +++ b/packages/client/lib/commands/READWRITE.ts @@ -1,8 +1,8 @@ import { SimpleStringReply, Command } from '../RESP/types'; export default { - IS_READ_ONLY: true, FIRST_KEY_INDEX: undefined, + IS_READ_ONLY: true, transformArguments() { return ['READWRITE']; }, diff --git a/packages/client/lib/commands/REPLICAOF.ts b/packages/client/lib/commands/REPLICAOF.ts index 4024e94bc4..4e2f69f726 100644 --- a/packages/client/lib/commands/REPLICAOF.ts +++ b/packages/client/lib/commands/REPLICAOF.ts @@ -1,8 +1,8 @@ import { SimpleStringReply, Command } from '../RESP/types'; export default { - IS_READ_ONLY: true, FIRST_KEY_INDEX: undefined, + IS_READ_ONLY: true, transformArguments(host: string, port: number) { return ['REPLICAOF', host, port.toString()]; }, diff --git a/packages/client/lib/commands/RESTORE-ASKING.ts b/packages/client/lib/commands/RESTORE-ASKING.ts index f9cb75ab3c..14f6dcbeab 100644 --- a/packages/client/lib/commands/RESTORE-ASKING.ts +++ b/packages/client/lib/commands/RESTORE-ASKING.ts @@ -1,8 +1,8 @@ import { SimpleStringReply, Command } from '../RESP/types'; export default { - IS_READ_ONLY: true, FIRST_KEY_INDEX: undefined, + IS_READ_ONLY: true, transformArguments() { return ['RESTORE-ASKING']; }, diff --git a/packages/client/lib/commands/ROLE.ts b/packages/client/lib/commands/ROLE.ts index 49196cb279..2cab0a783e 100644 --- a/packages/client/lib/commands/ROLE.ts +++ b/packages/client/lib/commands/ROLE.ts @@ -22,8 +22,8 @@ type SentinelRole = [ type Role = MasterRole | SlaveRole | SentinelRole; export default { - IS_READ_ONLY: true, FIRST_KEY_INDEX: undefined, + IS_READ_ONLY: true, transformArguments() { return ['ROLE']; }, diff --git a/packages/client/lib/commands/SAVE.ts b/packages/client/lib/commands/SAVE.ts index 53cb248696..ee6cccd35a 100644 --- a/packages/client/lib/commands/SAVE.ts +++ b/packages/client/lib/commands/SAVE.ts @@ -1,8 +1,8 @@ import { SimpleStringReply, Command } from '../RESP/types'; export default { - IS_READ_ONLY: true, FIRST_KEY_INDEX: undefined, + IS_READ_ONLY: true, transformArguments() { return ['SAVE']; }, diff --git a/packages/client/lib/commands/SCAN.spec.ts b/packages/client/lib/commands/SCAN.spec.ts index 7657b744e0..b2c10af0af 100644 --- a/packages/client/lib/commands/SCAN.spec.ts +++ b/packages/client/lib/commands/SCAN.spec.ts @@ -1,84 +1,62 @@ import { strict as assert } from 'assert'; import testUtils, { GLOBAL } from '../test-utils'; -import { transformArguments, transformReply } from './SCAN'; +import SCAN from './SCAN'; describe('SCAN', () => { - describe('transformArguments', () => { - it('cusror only', () => { - assert.deepEqual( - transformArguments(0), - ['SCAN', '0'] - ); - }); - - it('with MATCH', () => { - assert.deepEqual( - transformArguments(0, { - MATCH: 'pattern' - }), - ['SCAN', '0', 'MATCH', 'pattern'] - ); - }); - - it('with COUNT', () => { - assert.deepEqual( - transformArguments(0, { - COUNT: 1 - }), - ['SCAN', '0', 'COUNT', '1'] - ); - }); - - it('with TYPE', () => { - assert.deepEqual( - transformArguments(0, { - TYPE: 'stream' - }), - ['SCAN', '0', 'TYPE', 'stream'] - ); - }); - - it('with MATCH & COUNT & TYPE', () => { - assert.deepEqual( - transformArguments(0, { - MATCH: 'pattern', - COUNT: 1, - TYPE: 'stream' - }), - ['SCAN', '0', 'MATCH', 'pattern', 'COUNT', '1', 'TYPE', 'stream'] - ); - }); + describe('transformArguments', () => { + it('cusror only', () => { + assert.deepEqual( + SCAN.transformArguments(0), + ['SCAN', '0'] + ); }); - describe('transformReply', () => { - it('without keys', () => { - assert.deepEqual( - transformReply(['0', []]), - { - cursor: 0, - keys: [] - } - ); - }); - - it('with keys', () => { - assert.deepEqual( - transformReply(['0', ['key']]), - { - cursor: 0, - keys: ['key'] - } - ); - }); + it('with MATCH', () => { + assert.deepEqual( + SCAN.transformArguments(0, { + MATCH: 'pattern' + }), + ['SCAN', '0', 'MATCH', 'pattern'] + ); }); - testUtils.testWithClient('client.scan', async client => { - assert.deepEqual( - await client.scan(0), - { - cursor: 0, - keys: [] - } - ); - }, GLOBAL.SERVERS.OPEN); + it('with COUNT', () => { + assert.deepEqual( + SCAN.transformArguments(0, { + COUNT: 1 + }), + ['SCAN', '0', 'COUNT', '1'] + ); + }); + + it('with TYPE', () => { + assert.deepEqual( + SCAN.transformArguments(0, { + TYPE: 'stream' + }), + ['SCAN', '0', 'TYPE', 'stream'] + ); + }); + + it('with MATCH & COUNT & TYPE', () => { + assert.deepEqual( + SCAN.transformArguments(0, { + MATCH: 'pattern', + COUNT: 1, + TYPE: 'stream' + }), + ['SCAN', '0', 'MATCH', 'pattern', 'COUNT', '1', 'TYPE', 'stream'] + ); + }); + }); + + testUtils.testWithClient('client.scan', async client => { + assert.deepEqual( + await client.scan(0), + { + cursor: 0, + keys: [] + } + ); + }, GLOBAL.SERVERS.OPEN); }); diff --git a/packages/client/lib/commands/SCAN.ts b/packages/client/lib/commands/SCAN.ts index b1660ddbbc..710a7b09be 100644 --- a/packages/client/lib/commands/SCAN.ts +++ b/packages/client/lib/commands/SCAN.ts @@ -1,13 +1,35 @@ -import { RedisArgument, BlobStringReply, ArrayReply, Command } from '../RESP/types'; -import { ScanOptions, pushScanArguments } from './generic-transformers'; +import { CommandArguments, RedisArgument, BlobStringReply, ArrayReply, Command } from '../RESP/types'; -export interface ScanCommandOptions extends ScanOptions { +export interface ScanCommonOptions { + MATCH?: string; + COUNT?: number; +} + +export function pushScanArguments( + args: CommandArguments, + cursor: number, + options?: ScanOptions +): CommandArguments { + args.push(cursor.toString()); + + if (options?.MATCH) { + args.push('MATCH', options.MATCH); + } + + if (options?.COUNT) { + args.push('COUNT', options.COUNT.toString()); + } + + return args; +} + +export interface ScanOptions extends ScanCommonOptions { TYPE?: RedisArgument; } export default { IS_READ_ONLY: true, - transformArguments(cursor: number, options?: ScanCommandOptions) { + transformArguments(cursor: number, options?: ScanOptions) { const args = pushScanArguments(['SCAN'], cursor, options); if (options?.TYPE) { diff --git a/packages/client/lib/commands/SCRIPT_DEBUG.ts b/packages/client/lib/commands/SCRIPT_DEBUG.ts index 8c0021382d..b4bc1cfa8e 100644 --- a/packages/client/lib/commands/SCRIPT_DEBUG.ts +++ b/packages/client/lib/commands/SCRIPT_DEBUG.ts @@ -1,8 +1,8 @@ import { SimpleStringReply, Command } from '../RESP/types'; export default { - IS_READ_ONLY: true, FIRST_KEY_INDEX: undefined, + IS_READ_ONLY: true, transformArguments(mode: 'YES' | 'SYNC' | 'NO') { return ['SCRIPT', 'DEBUG', mode]; }, diff --git a/packages/client/lib/commands/SCRIPT_EXISTS.ts b/packages/client/lib/commands/SCRIPT_EXISTS.ts index 4233f7dc22..ab0a293d8d 100644 --- a/packages/client/lib/commands/SCRIPT_EXISTS.ts +++ b/packages/client/lib/commands/SCRIPT_EXISTS.ts @@ -1,10 +1,10 @@ -import { RedisArgument, ArrayReply, NumberReply, Command } from '../RESP/types'; -import { pushVariadicArguments } from './generic-transformers'; +import { ArrayReply, NumberReply, Command } from '../RESP/types'; +import { RedisVariadicArgument, pushVariadicArguments } from './generic-transformers'; export default { - IS_READ_ONLY: true, FIRST_KEY_INDEX: undefined, - transformArguments(sha1: RedisArgument | Array) { + IS_READ_ONLY: true, + transformArguments(sha1: RedisVariadicArgument) { return pushVariadicArguments(['SCRIPT', 'EXISTS'], sha1); }, transformReply: undefined as unknown as () => ArrayReply diff --git a/packages/client/lib/commands/SCRIPT_FLUSH.ts b/packages/client/lib/commands/SCRIPT_FLUSH.ts index a6bfe7648c..6a224cdaa8 100644 --- a/packages/client/lib/commands/SCRIPT_FLUSH.ts +++ b/packages/client/lib/commands/SCRIPT_FLUSH.ts @@ -1,8 +1,8 @@ import { SimpleStringReply, Command } from '../RESP/types'; export default { - IS_READ_ONLY: true, FIRST_KEY_INDEX: undefined, + IS_READ_ONLY: true, transformArguments(mode?: 'ASYNC' | 'SYNC') { const args = ['SCRIPT', 'FLUSH']; diff --git a/packages/client/lib/commands/SCRIPT_KILL.ts b/packages/client/lib/commands/SCRIPT_KILL.ts index 96aa119b01..973bf51660 100644 --- a/packages/client/lib/commands/SCRIPT_KILL.ts +++ b/packages/client/lib/commands/SCRIPT_KILL.ts @@ -1,8 +1,8 @@ import { SimpleStringReply, Command } from '../RESP/types'; export default { - IS_READ_ONLY: true, FIRST_KEY_INDEX: undefined, + IS_READ_ONLY: true, transformArguments() { return ['SCRIPT', 'KILL']; }, diff --git a/packages/client/lib/commands/SCRIPT_LOAD.ts b/packages/client/lib/commands/SCRIPT_LOAD.ts index 758a6835ac..90028b13a5 100644 --- a/packages/client/lib/commands/SCRIPT_LOAD.ts +++ b/packages/client/lib/commands/SCRIPT_LOAD.ts @@ -1,8 +1,8 @@ import { BlobStringReply, Command, RedisArgument } from '../RESP/types'; export default { - IS_READ_ONLY: true, FIRST_KEY_INDEX: undefined, + IS_READ_ONLY: true, transformArguments(script: RedisArgument) { return ['SCRIPT', 'LOAD', script]; }, diff --git a/packages/client/lib/commands/SETBIT.ts b/packages/client/lib/commands/SETBIT.ts index 20c69155b0..5b3ec6173d 100644 --- a/packages/client/lib/commands/SETBIT.ts +++ b/packages/client/lib/commands/SETBIT.ts @@ -2,8 +2,8 @@ import { RedisArgument, NumberReply, Command } from '../RESP/types'; import { BitValue } from './generic-transformers'; export default { - IS_READ_ONLY: false, FIRST_KEY_INDEX: 1, + IS_READ_ONLY: false, transformArguments( key: RedisArgument, offset: number, diff --git a/packages/client/lib/commands/SINTERSTORE.ts b/packages/client/lib/commands/SINTERSTORE.ts index 8ab9c0065e..744e0b1845 100644 --- a/packages/client/lib/commands/SINTERSTORE.ts +++ b/packages/client/lib/commands/SINTERSTORE.ts @@ -1,13 +1,14 @@ -import { RedisCommandArgument, RedisCommandArguments } from '.'; -import { pushVariadicArguments } from './generic-transformers'; +import { RedisArgument, NumberReply, Command } from '../RESP/types'; +import { RedisVariadicArgument, pushVariadicArguments } from './generic-transformers'; -export const FIRST_KEY_INDEX = 1; - -export function transformArguments( - destination: RedisCommandArgument, - keys: RedisCommandArgument | Array -): RedisCommandArguments { +export default { + FIRST_KEY_INDEX: 1, + IS_READ_ONLY: false, + transformArguments( + destination: RedisArgument, + keys: RedisVariadicArgument + ) { return pushVariadicArguments(['SINTERSTORE', destination], keys); -} - -export declare function transformReply(): Array; + }, + transformReply: undefined as unknown as () => NumberReply +} as const satisfies Command; diff --git a/packages/client/lib/commands/SISMEMBER.ts b/packages/client/lib/commands/SISMEMBER.ts index 4d40c63250..0687d19de3 100644 --- a/packages/client/lib/commands/SISMEMBER.ts +++ b/packages/client/lib/commands/SISMEMBER.ts @@ -1,12 +1,10 @@ -import { RedisCommandArgument, RedisCommandArguments } from '.'; +import { NumberReply, Command, RedisArgument } from '../RESP/types'; -export const FIRST_KEY_INDEX = 1; - -export function transformArguments( - key: RedisCommandArgument, - member: RedisCommandArgument -): RedisCommandArguments { +export default { + FIRST_KEY_INDEX: 1, + IS_READ_ONLY: true, + transformArguments(key: RedisArgument, member: RedisArgument) { return ['SISMEMBER', key, member]; -} - -export { transformBooleanReply as transformReply } from './generic-transformers'; + }, + transformReply: undefined as unknown as () => NumberReply +} as const satisfies Command; diff --git a/packages/client/lib/commands/SMISMEMBER.ts b/packages/client/lib/commands/SMISMEMBER.ts index 175120bdfb..bdf48d45ab 100644 --- a/packages/client/lib/commands/SMISMEMBER.ts +++ b/packages/client/lib/commands/SMISMEMBER.ts @@ -1,12 +1,10 @@ -import { RedisCommandArgument, RedisCommandArguments } from '.'; +import { RedisArgument, ArrayReply, NumberReply, Command } from '../RESP/types'; -export const FIRST_KEY_INDEX = 1; - -export function transformArguments( - key: RedisCommandArgument, - members: Array -): RedisCommandArguments { +export default { + FIRST_KEY_INDEX: 1, + IS_READ_ONLY: true, + transformArguments(key: RedisArgument, members: Array) { return ['SMISMEMBER', key, ...members]; -} - -export { transformBooleanArrayReply as transformReply } from './generic-transformers'; + }, + transformReply: undefined as unknown as () => ArrayReply +} as const satisfies Command; diff --git a/packages/client/lib/commands/SMOVE.ts b/packages/client/lib/commands/SMOVE.ts index 83c4027dbd..d6759c6212 100644 --- a/packages/client/lib/commands/SMOVE.ts +++ b/packages/client/lib/commands/SMOVE.ts @@ -1,13 +1,13 @@ -import { RedisCommandArgument, RedisCommandArguments } from '.'; +// import { RedisCommandArgument, RedisCommandArguments } from '.'; -export const FIRST_KEY_INDEX = 1; +// export const FIRST_KEY_INDEX = 1; -export function transformArguments( - source: RedisCommandArgument, - destination: RedisCommandArgument, - member: RedisCommandArgument -): RedisCommandArguments { - return ['SMOVE', source, destination, member]; -} +// export function transformArguments( +// source: RedisCommandArgument, +// destination: RedisCommandArgument, +// member: RedisCommandArgument +// ): RedisCommandArguments { +// return ['SMOVE', source, destination, member]; +// } -export { transformBooleanReply as transformReply } from './generic-transformers'; +// export { transformBooleanReply as transformReply } from './generic-transformers'; diff --git a/packages/client/lib/commands/SORT.ts b/packages/client/lib/commands/SORT.ts index 15e95bde67..e04466cdf6 100644 --- a/packages/client/lib/commands/SORT.ts +++ b/packages/client/lib/commands/SORT.ts @@ -1,13 +1,59 @@ -import { RedisCommandArguments } from '.'; -import { pushSortArguments, SortOptions } from './generic-transformers'; +import { RedisArgument, ArrayReply, BlobStringReply, Command } from '../RESP/types'; -export const FIRST_KEY_INDEX = 1; - -export function transformArguments( - key: string, - options?: SortOptions -): RedisCommandArguments { - return pushSortArguments(['SORT', key], options); +export interface SortOptions { + BY?: string; + LIMIT?: { + offset: number; + count: number; + }, + GET?: string | Array; + DIRECTION?: 'ASC' | 'DESC'; + ALPHA?: true; } -export declare function transformReply(): Array; +export function transformSortArguments( + command: RedisArgument, + options?: SortOptions +) { + const args = [command]; + + if (options?.BY) { + args.push('BY', options.BY); + } + + if (options?.LIMIT) { + args.push( + 'LIMIT', + options.LIMIT.offset.toString(), + options.LIMIT.count.toString() + ); + } + + if (options?.GET) { + if (typeof options.GET === 'string') { + args.push('GET', options.GET); + } else { + for (const pattern of options.GET) { + args.push('GET', pattern); + } + } + } + + if (options?.DIRECTION) { + args.push(options.DIRECTION); + } + + if (options?.ALPHA) { + args.push('ALPHA'); + } + + return args; +} + +export default { + FIRST_KEY_INDEX: 1, + IS_READ_ONLY: true, + transformArguments: transformSortArguments.bind(undefined, 'SORT'), + transformReply: undefined as unknown as () => ArrayReply +} as const satisfies Command; + diff --git a/packages/client/lib/commands/SORT_RO.ts b/packages/client/lib/commands/SORT_RO.ts index 4af7acd80d..459a0bbc03 100644 --- a/packages/client/lib/commands/SORT_RO.ts +++ b/packages/client/lib/commands/SORT_RO.ts @@ -1,15 +1,9 @@ -import { RedisCommandArguments } from '.'; -import { pushSortArguments, SortOptions } from "./generic-transformers"; +import { Command } from '../RESP/types'; +import SORT, { transformSortArguments } from './SORT'; -export const FIRST_KEY_INDEX = 1; - -export const IS_READ_ONLY = true; - -export function transformArguments( - key: string, - options?: SortOptions -): RedisCommandArguments { - return pushSortArguments(['SORT_RO', key], options); -} - -export declare function transformReply(): Array; +export default { + FIRST_KEY_INDEX: SORT.FIRST_KEY_INDEX, + IS_READ_ONLY: true, + transformArguments: transformSortArguments.bind(undefined, 'SORT_RO'), + transformReply: SORT.transformReply +} as const satisfies Command; diff --git a/packages/client/lib/commands/SORT_STORE.ts b/packages/client/lib/commands/SORT_STORE.ts index 9acaf02317..5af19d50cb 100644 --- a/packages/client/lib/commands/SORT_STORE.ts +++ b/packages/client/lib/commands/SORT_STORE.ts @@ -1,17 +1,17 @@ -import { RedisCommandArguments } from '.'; -import { SortOptions } from './generic-transformers'; -import { transformArguments as transformSortArguments } from './SORT'; +import { RedisArgument, NumberReply, Command } from '../RESP/types'; +import { SortOptions, transformSortArguments } from './SORT'; -export const FIRST_KEY_INDEX = 1; - -export function transformArguments( - source: string, - destination: string, +export default { + FIRST_KEY_INDEX: 1, + IS_READ_ONLY: false, + transformArguments( + source: RedisArgument, + destination: RedisArgument, options?: SortOptions -): RedisCommandArguments { + ) { const args = transformSortArguments(source, options); args.push('STORE', destination); return args; -} - -export declare function transformReply(): number; + }, + transformReply: undefined as unknown as () => NumberReply +} as const satisfies Command; diff --git a/packages/client/lib/commands/SPOP.ts b/packages/client/lib/commands/SPOP.ts index 38ce8573f3..3566cd13dc 100644 --- a/packages/client/lib/commands/SPOP.ts +++ b/packages/client/lib/commands/SPOP.ts @@ -1,18 +1,18 @@ -import { RedisCommandArgument, RedisCommandArguments } from '.'; +// import { RedisCommandArgument, RedisCommandArguments } from '.'; -export const FIRST_KEY_INDEX = 1; +// export const FIRST_KEY_INDEX = 1; -export function transformArguments( - key: RedisCommandArgument, - count?: number -): RedisCommandArguments { - const args = ['SPOP', key]; +// export function transformArguments( +// key: RedisCommandArgument, +// count?: number +// ): RedisCommandArguments { +// const args = ['SPOP', key]; - if (typeof count === 'number') { - args.push(count.toString()); - } +// if (typeof count === 'number') { +// args.push(count.toString()); +// } - return args; -} +// return args; +// } -export declare function transformReply(): Array; +// export declare function transformReply(): Array; diff --git a/packages/client/lib/commands/SPUBLISH.ts b/packages/client/lib/commands/SPUBLISH.ts index 42a7ab4907..19d84b03c6 100644 --- a/packages/client/lib/commands/SPUBLISH.ts +++ b/packages/client/lib/commands/SPUBLISH.ts @@ -1,14 +1,10 @@ -import { RedisCommandArgument, RedisCommandArguments } from '.'; +import { RedisArgument, NumberReply, Command } from '../RESP/types'; -export const IS_READ_ONLY = true; - -export const FIRST_KEY_INDEX = 1; - -export function transformArguments( - channel: RedisCommandArgument, - message: RedisCommandArgument -): RedisCommandArguments { +export default { + FIRST_KEY_INDEX: 1, + IS_READ_ONLY: true, + transformArguments(channel: RedisArgument, message: RedisArgument) { return ['SPUBLISH', channel, message]; -} - -export declare function transformReply(): number; + }, + transformReply: undefined as unknown as () => NumberReply +} as const satisfies Command; diff --git a/packages/client/lib/commands/SRANDMEMBER.ts b/packages/client/lib/commands/SRANDMEMBER.ts index d84e61993e..6a2373ae92 100644 --- a/packages/client/lib/commands/SRANDMEMBER.ts +++ b/packages/client/lib/commands/SRANDMEMBER.ts @@ -1,9 +1,10 @@ -import { RedisCommandArgument, RedisCommandArguments } from '.'; +import { RedisArgument, BlobStringReply, NullReply, Command } from '../RESP/types'; -export const FIRST_KEY_INDEX = 1; - -export function transformArguments(key: RedisCommandArgument): RedisCommandArguments { +export default { + FIRST_KEY_INDEX: 1, + IS_READ_ONLY: true, + transformArguments(key: RedisArgument) { return ['SRANDMEMBER', key]; -} - -export declare function transformReply(): RedisCommandArgument | null; + }, + transformReply: undefined as unknown as () => BlobStringReply | NullReply +} as const satisfies Command; diff --git a/packages/client/lib/commands/SRANDMEMBER_COUNT.ts b/packages/client/lib/commands/SRANDMEMBER_COUNT.ts index d265d89e9a..54c3e96f23 100644 --- a/packages/client/lib/commands/SRANDMEMBER_COUNT.ts +++ b/packages/client/lib/commands/SRANDMEMBER_COUNT.ts @@ -1,16 +1,16 @@ -import { RedisCommandArgument, RedisCommandArguments } from '.'; -import { transformArguments as transformSRandMemberArguments } from './SRANDMEMBER'; +// import { RedisCommandArgument, RedisCommandArguments } from '.'; +// import { transformArguments as transformSRandMemberArguments } from './SRANDMEMBER'; -export { FIRST_KEY_INDEX } from './SRANDMEMBER'; +// export { FIRST_KEY_INDEX } from './SRANDMEMBER'; -export function transformArguments( - key: RedisCommandArgument, - count: number -): RedisCommandArguments { - return [ - ...transformSRandMemberArguments(key), - count.toString() - ]; -} +// export function transformArguments( +// key: RedisCommandArgument, +// count: number +// ): RedisCommandArguments { +// return [ +// ...transformSRandMemberArguments(key), +// count.toString() +// ]; +// } -export declare function transformReply(): Array; +// export declare function transformReply(): Array; diff --git a/packages/client/lib/commands/SREM.ts b/packages/client/lib/commands/SREM.ts index f08e147dd8..daa95493d0 100644 --- a/packages/client/lib/commands/SREM.ts +++ b/packages/client/lib/commands/SREM.ts @@ -1,13 +1,11 @@ -import { RedisCommandArgument, RedisCommandArguments } from '.'; -import { pushVariadicArguments } from './generic-transformers'; +import { NumberReply, Command, RedisArgument } from '../RESP/types'; +import { RedisVariadicArgument, pushVariadicArguments } from './generic-transformers'; -export const FIRST_KEY_INDEX = 1; - -export function transformArguments( - key: RedisCommandArgument, - members: RedisCommandArgument | Array -): RedisCommandArguments { +export default { + FIRST_KEY_INDEX: 1, + IS_READ_ONLY: false, + transformArguments(key: RedisArgument, members: RedisVariadicArgument) { return pushVariadicArguments(['SREM', key], members); -} - -export declare function transformReply(): number; + }, + transformReply: undefined as unknown as () => NumberReply +} as const satisfies Command; diff --git a/packages/client/lib/commands/SSCAN.ts b/packages/client/lib/commands/SSCAN.ts index fe648bff5e..c36bc52ca1 100644 --- a/packages/client/lib/commands/SSCAN.ts +++ b/packages/client/lib/commands/SSCAN.ts @@ -1,5 +1,5 @@ import { RedisArgument, BlobStringReply, Command } from '../RESP/types'; -import { ScanOptions, pushScanArguments } from './generic-transformers'; +import { ScanCommonOptions, pushScanArguments } from './SCAN'; export default { FIRST_KEY_INDEX: 1, @@ -7,7 +7,7 @@ export default { transformArguments( key: RedisArgument, cursor: number, - options?: ScanOptions + options?: ScanCommonOptions ) { return pushScanArguments(['SSCAN', key], cursor, options); }, diff --git a/packages/client/lib/commands/SUNION.ts b/packages/client/lib/commands/SUNION.ts index 97d8b41d70..f9e7172acb 100644 --- a/packages/client/lib/commands/SUNION.ts +++ b/packages/client/lib/commands/SUNION.ts @@ -1,14 +1,14 @@ -import { RedisCommandArgument, RedisCommandArguments } from '.'; -import { pushVariadicArguments } from './generic-transformers'; +// import { RedisCommandArgument, RedisCommandArguments } from '.'; +// import { pushVariadicArguments } from './generic-transformers'; -export const FIRST_KEY_INDEX = 1; +// export const FIRST_KEY_INDEX = 1; -export const IS_READ_ONLY = true; +// export const IS_READ_ONLY = true; -export function transformArguments( - keys: RedisCommandArgument | Array -): RedisCommandArguments { - return pushVariadicArguments(['SUNION'], keys); -} +// export function transformArguments( +// keys: RedisCommandArgument | Array +// ): RedisCommandArguments { +// return pushVariadicArguments(['SUNION'], keys); +// } -export declare function transformReply(): Array; +// export declare function transformReply(): Array; diff --git a/packages/client/lib/commands/SUNIONSTORE.ts b/packages/client/lib/commands/SUNIONSTORE.ts index 27161ba077..1d5ee097ca 100644 --- a/packages/client/lib/commands/SUNIONSTORE.ts +++ b/packages/client/lib/commands/SUNIONSTORE.ts @@ -1,13 +1,13 @@ -import { RedisCommandArgument, RedisCommandArguments } from '.'; -import { pushVariadicArguments } from './generic-transformers'; +// import { RedisCommandArgument, RedisCommandArguments } from '.'; +// import { pushVariadicArguments } from './generic-transformers'; -export const FIRST_KEY_INDEX = 1; +// export const FIRST_KEY_INDEX = 1; -export function transformArguments( - destination: RedisCommandArgument, - keys: RedisCommandArgument | Array -): RedisCommandArguments { - return pushVariadicArguments(['SUNIONSTORE', destination], keys); -} +// export function transformArguments( +// destination: RedisCommandArgument, +// keys: RedisCommandArgument | Array +// ): RedisCommandArguments { +// return pushVariadicArguments(['SUNIONSTORE', destination], keys); +// } -export declare function transformReply(): number; +// export declare function transformReply(): number; diff --git a/packages/client/lib/commands/TOUCH.ts b/packages/client/lib/commands/TOUCH.ts index c28f7a4629..c1c19402f8 100644 --- a/packages/client/lib/commands/TOUCH.ts +++ b/packages/client/lib/commands/TOUCH.ts @@ -1,12 +1,11 @@ -import { RedisCommandArgument, RedisCommandArguments } from '.'; -import { pushVariadicArguments } from './generic-transformers'; +import { NumberReply, Command } from '../RESP/types'; +import { RedisVariadicArgument, pushVariadicArguments } from './generic-transformers'; -export const FIRST_KEY_INDEX = 1; - -export function transformArguments( - key: RedisCommandArgument | Array -): RedisCommandArguments { +export default { + FIRST_KEY_INDEX: 1, + IS_READ_ONLY: false, + transformArguments(key: RedisVariadicArgument) { return pushVariadicArguments(['TOUCH'], key); -} - -export declare function transformReply(): number; + }, + transformReply: undefined as unknown as () => NumberReply +} as const satisfies Command; diff --git a/packages/client/lib/commands/UNLINK.ts b/packages/client/lib/commands/UNLINK.ts index 4455d42bcf..2346573f39 100644 --- a/packages/client/lib/commands/UNLINK.ts +++ b/packages/client/lib/commands/UNLINK.ts @@ -1,12 +1,11 @@ -import { RedisCommandArgument, RedisCommandArguments } from '.'; -import { pushVariadicArguments } from './generic-transformers'; +import { NumberReply, Command } from '../RESP/types'; +import { RedisVariadicArgument, pushVariadicArguments } from './generic-transformers'; -export const FIRST_KEY_INDEX = 1; - -export function transformArguments( - key: RedisCommandArgument | Array -): RedisCommandArguments { +export default { + FIRST_KEY_INDEX: 1, + IS_READ_ONLY: false, + transformArguments(key: RedisVariadicArgument) { return pushVariadicArguments(['UNLINK'], key); -} - -export declare function transformReply(): number; + }, + transformReply: undefined as unknown as () => NumberReply +} as const satisfies Command; diff --git a/packages/client/lib/commands/WATCH.ts b/packages/client/lib/commands/WATCH.ts index 9a7b16fd74..b4fd86b37a 100644 --- a/packages/client/lib/commands/WATCH.ts +++ b/packages/client/lib/commands/WATCH.ts @@ -1,10 +1,11 @@ -import { RedisCommandArguments } from '.'; -import { pushVariadicArguments } from './generic-transformers'; +import { SimpleStringReply, Command } from '../RESP/types'; +import { RedisVariadicArgument, pushVariadicArguments } from './generic-transformers'; -export const FIRST_KEY_INDEX = 1; - -export function transformArguments(key: string | Array): RedisCommandArguments { +export default { + FIRST_KEY_INDEX: 1, + IS_READ_ONLY: true, + transformArguments(key: RedisVariadicArgument) { return pushVariadicArguments(['WATCH'], key); -} - -export declare function transformReply(): string; + }, + transformReply: undefined as unknown as () => SimpleStringReply +} as const satisfies Command; diff --git a/packages/client/lib/commands/XACK.ts b/packages/client/lib/commands/XACK.ts index 1d35c8d13b..4d54df00d1 100644 --- a/packages/client/lib/commands/XACK.ts +++ b/packages/client/lib/commands/XACK.ts @@ -1,14 +1,14 @@ -import { RedisCommandArgument, RedisCommandArguments } from '.'; -import { pushVariadicArguments } from './generic-transformers'; +// import { RedisCommandArgument, RedisCommandArguments } from '.'; +// import { pushVariadicArguments } from './generic-transformers'; -export const FIRST_KEY_INDEX = 1; +// export const FIRST_KEY_INDEX = 1; -export function transformArguments( - key: RedisCommandArgument, - group: RedisCommandArgument, - id: RedisCommandArgument | Array -): RedisCommandArguments { - return pushVariadicArguments(['XACK', key, group], id); -} +// export function transformArguments( +// key: RedisCommandArgument, +// group: RedisCommandArgument, +// id: RedisCommandArgument | Array +// ): RedisCommandArguments { +// return pushVariadicArguments(['XACK', key, group], id); +// } -export declare function transformReply(): number; +// export declare function transformReply(): number; diff --git a/packages/client/lib/commands/XADD.ts b/packages/client/lib/commands/XADD.ts index e7a1b6804f..16d7286ca7 100644 --- a/packages/client/lib/commands/XADD.ts +++ b/packages/client/lib/commands/XADD.ts @@ -1,52 +1,52 @@ -import { RedisCommandArgument, RedisCommandArguments } from '.'; +// import { RedisCommandArgument, RedisCommandArguments } from '.'; -export const FIRST_KEY_INDEX = 1; +// export const FIRST_KEY_INDEX = 1; -interface XAddOptions { - NOMKSTREAM?: true; - TRIM?: { - strategy?: 'MAXLEN' | 'MINID'; - strategyModifier?: '=' | '~'; - threshold: number; - limit?: number; - }; -} +// interface XAddOptions { +// NOMKSTREAM?: true; +// TRIM?: { +// strategy?: 'MAXLEN' | 'MINID'; +// strategyModifier?: '=' | '~'; +// threshold: number; +// limit?: number; +// }; +// } -export function transformArguments( - key: RedisCommandArgument, - id: RedisCommandArgument, - message: Record, - options?: XAddOptions -): RedisCommandArguments { - const args = ['XADD', key]; +// export function transformArguments( +// key: RedisCommandArgument, +// id: RedisCommandArgument, +// message: Record, +// options?: XAddOptions +// ): RedisCommandArguments { +// const args = ['XADD', key]; - if (options?.NOMKSTREAM) { - args.push('NOMKSTREAM'); - } +// if (options?.NOMKSTREAM) { +// args.push('NOMKSTREAM'); +// } - if (options?.TRIM) { - if (options.TRIM.strategy) { - args.push(options.TRIM.strategy); - } +// if (options?.TRIM) { +// if (options.TRIM.strategy) { +// args.push(options.TRIM.strategy); +// } - if (options.TRIM.strategyModifier) { - args.push(options.TRIM.strategyModifier); - } +// if (options.TRIM.strategyModifier) { +// args.push(options.TRIM.strategyModifier); +// } - args.push(options.TRIM.threshold.toString()); +// args.push(options.TRIM.threshold.toString()); - if (options.TRIM.limit) { - args.push('LIMIT', options.TRIM.limit.toString()); - } - } +// if (options.TRIM.limit) { +// args.push('LIMIT', options.TRIM.limit.toString()); +// } +// } - args.push(id); +// args.push(id); - for (const [key, value] of Object.entries(message)) { - args.push(key, value); - } +// for (const [key, value] of Object.entries(message)) { +// args.push(key, value); +// } - return args; -} +// return args; +// } -export declare function transformReply(): string; +// export declare function transformReply(): string; diff --git a/packages/client/lib/commands/XAUTOCLAIM.ts b/packages/client/lib/commands/XAUTOCLAIM.ts index 4bf46057ba..c32c3baf8d 100644 --- a/packages/client/lib/commands/XAUTOCLAIM.ts +++ b/packages/client/lib/commands/XAUTOCLAIM.ts @@ -1,39 +1,39 @@ -import { RedisCommandArgument, RedisCommandArguments } from '.'; -import { StreamMessagesReply, transformStreamMessagesReply } from './generic-transformers'; +// import { RedisCommandArgument, RedisCommandArguments } from '.'; +// import { StreamMessagesReply, transformStreamMessagesReply } from './generic-transformers'; -export const FIRST_KEY_INDEX = 1; +// export const FIRST_KEY_INDEX = 1; -export interface XAutoClaimOptions { - COUNT?: number; -} +// export interface XAutoClaimOptions { +// COUNT?: number; +// } -export function transformArguments( - key: RedisCommandArgument, - group: RedisCommandArgument, - consumer: RedisCommandArgument, - minIdleTime: number, - start: string, - options?: XAutoClaimOptions -): RedisCommandArguments { - const args = ['XAUTOCLAIM', key, group, consumer, minIdleTime.toString(), start]; +// export function transformArguments( +// key: RedisCommandArgument, +// group: RedisCommandArgument, +// consumer: RedisCommandArgument, +// minIdleTime: number, +// start: string, +// options?: XAutoClaimOptions +// ): RedisCommandArguments { +// const args = ['XAUTOCLAIM', key, group, consumer, minIdleTime.toString(), start]; - if (options?.COUNT) { - args.push('COUNT', options.COUNT.toString()); - } +// if (options?.COUNT) { +// args.push('COUNT', options.COUNT.toString()); +// } - return args; -} +// return args; +// } -type XAutoClaimRawReply = [RedisCommandArgument, Array]; +// type XAutoClaimRawReply = [RedisCommandArgument, Array]; -interface XAutoClaimReply { - nextId: RedisCommandArgument; - messages: StreamMessagesReply; -} +// interface XAutoClaimReply { +// nextId: RedisCommandArgument; +// messages: StreamMessagesReply; +// } -export function transformReply(reply: XAutoClaimRawReply): XAutoClaimReply { - return { - nextId: reply[0], - messages: transformStreamMessagesReply(reply[1]) - }; -} +// export function transformReply(reply: XAutoClaimRawReply): XAutoClaimReply { +// return { +// nextId: reply[0], +// messages: transformStreamMessagesReply(reply[1]) +// }; +// } diff --git a/packages/client/lib/commands/XAUTOCLAIM_JUSTID.ts b/packages/client/lib/commands/XAUTOCLAIM_JUSTID.ts index a30ac1579e..3f6374d985 100644 --- a/packages/client/lib/commands/XAUTOCLAIM_JUSTID.ts +++ b/packages/client/lib/commands/XAUTOCLAIM_JUSTID.ts @@ -1,25 +1,25 @@ -import { RedisCommandArgument, RedisCommandArguments } from '.'; -import { transformArguments as transformXAutoClaimArguments } from './XAUTOCLAIM'; +// import { RedisCommandArgument, RedisCommandArguments } from '.'; +// import { transformArguments as transformXAutoClaimArguments } from './XAUTOCLAIM'; -export { FIRST_KEY_INDEX } from './XAUTOCLAIM'; +// export { FIRST_KEY_INDEX } from './XAUTOCLAIM'; -export function transformArguments(...args: Parameters): RedisCommandArguments { - return [ - ...transformXAutoClaimArguments(...args), - 'JUSTID' - ]; -} +// export function transformArguments(...args: Parameters): RedisCommandArguments { +// return [ +// ...transformXAutoClaimArguments(...args), +// 'JUSTID' +// ]; +// } -type XAutoClaimJustIdRawReply = [RedisCommandArgument, Array]; +// type XAutoClaimJustIdRawReply = [RedisCommandArgument, Array]; -interface XAutoClaimJustIdReply { - nextId: RedisCommandArgument; - messages: Array; -} +// interface XAutoClaimJustIdReply { +// nextId: RedisCommandArgument; +// messages: Array; +// } -export function transformReply(reply: XAutoClaimJustIdRawReply): XAutoClaimJustIdReply { - return { - nextId: reply[0], - messages: reply[1] - }; -} +// export function transformReply(reply: XAutoClaimJustIdRawReply): XAutoClaimJustIdReply { +// return { +// nextId: reply[0], +// messages: reply[1] +// }; +// } diff --git a/packages/client/lib/commands/XCLAIM.ts b/packages/client/lib/commands/XCLAIM.ts index 43ad78cfb6..6c1328441a 100644 --- a/packages/client/lib/commands/XCLAIM.ts +++ b/packages/client/lib/commands/XCLAIM.ts @@ -1,48 +1,48 @@ -import { RedisCommandArgument, RedisCommandArguments } from '.'; -import { pushVariadicArguments } from './generic-transformers'; +// import { RedisCommandArgument, RedisCommandArguments } from '.'; +// import { pushVariadicArguments } from './generic-transformers'; -export const FIRST_KEY_INDEX = 1; +// export const FIRST_KEY_INDEX = 1; -export interface XClaimOptions { - IDLE?: number; - TIME?: number | Date; - RETRYCOUNT?: number; - FORCE?: true; -} +// export interface XClaimOptions { +// IDLE?: number; +// TIME?: number | Date; +// RETRYCOUNT?: number; +// FORCE?: true; +// } -export function transformArguments( - key: RedisCommandArgument, - group: RedisCommandArgument, - consumer: RedisCommandArgument, - minIdleTime: number, - id: RedisCommandArgument | Array, - options?: XClaimOptions -): RedisCommandArguments { - const args = pushVariadicArguments( - ['XCLAIM', key, group, consumer, minIdleTime.toString()], - id - ); +// export function transformArguments( +// key: RedisCommandArgument, +// group: RedisCommandArgument, +// consumer: RedisCommandArgument, +// minIdleTime: number, +// id: RedisCommandArgument | Array, +// options?: XClaimOptions +// ): RedisCommandArguments { +// const args = pushVariadicArguments( +// ['XCLAIM', key, group, consumer, minIdleTime.toString()], +// id +// ); - if (options?.IDLE) { - args.push('IDLE', options.IDLE.toString()); - } +// if (options?.IDLE) { +// args.push('IDLE', options.IDLE.toString()); +// } - if (options?.TIME) { - args.push( - 'TIME', - (typeof options.TIME === 'number' ? options.TIME : options.TIME.getTime()).toString() - ); - } +// if (options?.TIME) { +// args.push( +// 'TIME', +// (typeof options.TIME === 'number' ? options.TIME : options.TIME.getTime()).toString() +// ); +// } - if (options?.RETRYCOUNT) { - args.push('RETRYCOUNT', options.RETRYCOUNT.toString()); - } +// if (options?.RETRYCOUNT) { +// args.push('RETRYCOUNT', options.RETRYCOUNT.toString()); +// } - if (options?.FORCE) { - args.push('FORCE'); - } +// if (options?.FORCE) { +// args.push('FORCE'); +// } - return args; -} +// return args; +// } -export { transformStreamMessagesReply as transformReply } from './generic-transformers'; +// export { transformStreamMessagesReply as transformReply } from './generic-transformers'; diff --git a/packages/client/lib/commands/XCLAIM_JUSTID.ts b/packages/client/lib/commands/XCLAIM_JUSTID.ts index 50d0d5a036..7c011e692f 100644 --- a/packages/client/lib/commands/XCLAIM_JUSTID.ts +++ b/packages/client/lib/commands/XCLAIM_JUSTID.ts @@ -1,13 +1,13 @@ -import { RedisCommandArgument, RedisCommandArguments } from '.'; -import { transformArguments as transformXClaimArguments } from './XCLAIM'; +// import { RedisCommandArgument, RedisCommandArguments } from '.'; +// import { transformArguments as transformXClaimArguments } from './XCLAIM'; -export { FIRST_KEY_INDEX } from './XCLAIM'; +// export { FIRST_KEY_INDEX } from './XCLAIM'; -export function transformArguments(...args: Parameters): RedisCommandArguments { - return [ - ...transformXClaimArguments(...args), - 'JUSTID' - ]; -} +// export function transformArguments(...args: Parameters): RedisCommandArguments { +// return [ +// ...transformXClaimArguments(...args), +// 'JUSTID' +// ]; +// } -export declare function transformReply(): Array; +// export declare function transformReply(): Array; diff --git a/packages/client/lib/commands/XDEL.ts b/packages/client/lib/commands/XDEL.ts index 80b429c4e1..dab033fe57 100644 --- a/packages/client/lib/commands/XDEL.ts +++ b/packages/client/lib/commands/XDEL.ts @@ -1,13 +1,13 @@ -import { RedisCommandArgument, RedisCommandArguments } from '.'; -import { pushVariadicArguments } from './generic-transformers'; +// import { RedisCommandArgument, RedisCommandArguments } from '.'; +// import { pushVariadicArguments } from './generic-transformers'; -export const FIRST_KEY_INDEX = 1; +// export const FIRST_KEY_INDEX = 1; -export function transformArguments( - key: RedisCommandArgument, - id: RedisCommandArgument | Array -): RedisCommandArguments { - return pushVariadicArguments(['XDEL', key], id); -} +// export function transformArguments( +// key: RedisCommandArgument, +// id: RedisCommandArgument | Array +// ): RedisCommandArguments { +// return pushVariadicArguments(['XDEL', key], id); +// } -export declare function transformReply(): number; +// export declare function transformReply(): number; diff --git a/packages/client/lib/commands/XGROUP_CREATE.ts b/packages/client/lib/commands/XGROUP_CREATE.ts index 8cfd4e262e..def2bf39eb 100644 --- a/packages/client/lib/commands/XGROUP_CREATE.ts +++ b/packages/client/lib/commands/XGROUP_CREATE.ts @@ -1,24 +1,24 @@ -import { RedisCommandArgument, RedisCommandArguments } from '.'; +// import { RedisCommandArgument, RedisCommandArguments } from '.'; -export const FIRST_KEY_INDEX = 2; +// export const FIRST_KEY_INDEX = 2; -interface XGroupCreateOptions { - MKSTREAM?: true; -} +// interface XGroupCreateOptions { +// MKSTREAM?: true; +// } -export function transformArguments( - key: RedisCommandArgument, - group: RedisCommandArgument, - id: RedisCommandArgument, - options?: XGroupCreateOptions -): RedisCommandArguments { - const args = ['XGROUP', 'CREATE', key, group, id]; +// export function transformArguments( +// key: RedisCommandArgument, +// group: RedisCommandArgument, +// id: RedisCommandArgument, +// options?: XGroupCreateOptions +// ): RedisCommandArguments { +// const args = ['XGROUP', 'CREATE', key, group, id]; - if (options?.MKSTREAM) { - args.push('MKSTREAM'); - } +// if (options?.MKSTREAM) { +// args.push('MKSTREAM'); +// } - return args; -} +// return args; +// } -export declare function transformReply(): RedisCommandArgument; +// export declare function transformReply(): RedisCommandArgument; diff --git a/packages/client/lib/commands/XGROUP_CREATECONSUMER.ts b/packages/client/lib/commands/XGROUP_CREATECONSUMER.ts index 2b816a6b48..8fb9ad2ad3 100644 --- a/packages/client/lib/commands/XGROUP_CREATECONSUMER.ts +++ b/packages/client/lib/commands/XGROUP_CREATECONSUMER.ts @@ -1,13 +1,13 @@ -import { RedisCommandArgument, RedisCommandArguments } from '.'; +// import { RedisCommandArgument, RedisCommandArguments } from '.'; -export const FIRST_KEY_INDEX = 2; +// export const FIRST_KEY_INDEX = 2; -export function transformArguments( - key: RedisCommandArgument, - group: RedisCommandArgument, - consumer: RedisCommandArgument -): RedisCommandArguments { - return ['XGROUP', 'CREATECONSUMER', key, group, consumer]; -} +// export function transformArguments( +// key: RedisCommandArgument, +// group: RedisCommandArgument, +// consumer: RedisCommandArgument +// ): RedisCommandArguments { +// return ['XGROUP', 'CREATECONSUMER', key, group, consumer]; +// } -export { transformBooleanReply as transformReply } from './generic-transformers'; +// export { transformBooleanReply as transformReply } from './generic-transformers'; diff --git a/packages/client/lib/commands/XGROUP_DELCONSUMER.ts b/packages/client/lib/commands/XGROUP_DELCONSUMER.ts index 4e4fc096d0..ad54beaf9d 100644 --- a/packages/client/lib/commands/XGROUP_DELCONSUMER.ts +++ b/packages/client/lib/commands/XGROUP_DELCONSUMER.ts @@ -1,13 +1,13 @@ -import { RedisCommandArgument, RedisCommandArguments } from '.'; +// import { RedisCommandArgument, RedisCommandArguments } from '.'; -export const FIRST_KEY_INDEX = 2; +// export const FIRST_KEY_INDEX = 2; -export function transformArguments( - key: RedisCommandArgument, - group: RedisCommandArgument, - consumer: RedisCommandArgument -): RedisCommandArguments { - return ['XGROUP', 'DELCONSUMER', key, group, consumer]; -} +// export function transformArguments( +// key: RedisCommandArgument, +// group: RedisCommandArgument, +// consumer: RedisCommandArgument +// ): RedisCommandArguments { +// return ['XGROUP', 'DELCONSUMER', key, group, consumer]; +// } -export declare function transformReply(): number; +// export declare function transformReply(): number; diff --git a/packages/client/lib/commands/XGROUP_DESTROY.ts b/packages/client/lib/commands/XGROUP_DESTROY.ts index 85910c0247..077afba4dc 100644 --- a/packages/client/lib/commands/XGROUP_DESTROY.ts +++ b/packages/client/lib/commands/XGROUP_DESTROY.ts @@ -1,12 +1,12 @@ -import { RedisCommandArgument, RedisCommandArguments } from '.'; +// import { RedisCommandArgument, RedisCommandArguments } from '.'; -export const FIRST_KEY_INDEX = 2; +// export const FIRST_KEY_INDEX = 2; -export function transformArguments( - key: RedisCommandArgument, - group: RedisCommandArgument -): RedisCommandArguments { - return ['XGROUP', 'DESTROY', key, group]; -} +// export function transformArguments( +// key: RedisCommandArgument, +// group: RedisCommandArgument +// ): RedisCommandArguments { +// return ['XGROUP', 'DESTROY', key, group]; +// } -export { transformBooleanReply as transformReply } from './generic-transformers'; +// export { transformBooleanReply as transformReply } from './generic-transformers'; diff --git a/packages/client/lib/commands/XGROUP_SETID.ts b/packages/client/lib/commands/XGROUP_SETID.ts index e732fc8d7b..65e1e257fb 100644 --- a/packages/client/lib/commands/XGROUP_SETID.ts +++ b/packages/client/lib/commands/XGROUP_SETID.ts @@ -1,13 +1,13 @@ -import { RedisCommandArgument, RedisCommandArguments } from '.'; +// import { RedisCommandArgument, RedisCommandArguments } from '.'; -export const FIRST_KEY_INDEX = 2; +// export const FIRST_KEY_INDEX = 2; -export function transformArguments( - key: RedisCommandArgument, - group: RedisCommandArgument, - id: RedisCommandArgument -): RedisCommandArguments { - return ['XGROUP', 'SETID', key, group, id]; -} +// export function transformArguments( +// key: RedisCommandArgument, +// group: RedisCommandArgument, +// id: RedisCommandArgument +// ): RedisCommandArguments { +// return ['XGROUP', 'SETID', key, group, id]; +// } -export declare function transformReply(): RedisCommandArgument; +// export declare function transformReply(): RedisCommandArgument; diff --git a/packages/client/lib/commands/XINFO_CONSUMERS.ts b/packages/client/lib/commands/XINFO_CONSUMERS.ts index 05e3a26b17..a9c5cb75e4 100644 --- a/packages/client/lib/commands/XINFO_CONSUMERS.ts +++ b/packages/client/lib/commands/XINFO_CONSUMERS.ts @@ -1,26 +1,26 @@ -import { RedisCommandArgument, RedisCommandArguments } from '.'; +// import { RedisCommandArgument, RedisCommandArguments } from '.'; -export const FIRST_KEY_INDEX = 2; +// export const FIRST_KEY_INDEX = 2; -export const IS_READ_ONLY = true; +// export const IS_READ_ONLY = true; -export function transformArguments( - key: RedisCommandArgument, - group: RedisCommandArgument -): RedisCommandArguments { - return ['XINFO', 'CONSUMERS', key, group]; -} +// export function transformArguments( +// key: RedisCommandArgument, +// group: RedisCommandArgument +// ): RedisCommandArguments { +// return ['XINFO', 'CONSUMERS', key, group]; +// } -type XInfoConsumersReply = Array<{ - name: RedisCommandArgument; - pending: number; - idle: number; -}>; +// type XInfoConsumersReply = Array<{ +// name: RedisCommandArgument; +// pending: number; +// idle: number; +// }>; -export function transformReply(rawReply: Array): XInfoConsumersReply { - return rawReply.map(consumer => ({ - name: consumer[1], - pending: consumer[3], - idle: consumer[5] - })); -} +// export function transformReply(rawReply: Array): XInfoConsumersReply { +// return rawReply.map(consumer => ({ +// name: consumer[1], +// pending: consumer[3], +// idle: consumer[5] +// })); +// } diff --git a/packages/client/lib/commands/XINFO_GROUPS.ts b/packages/client/lib/commands/XINFO_GROUPS.ts index dcf504c8ce..4dac9eed85 100644 --- a/packages/client/lib/commands/XINFO_GROUPS.ts +++ b/packages/client/lib/commands/XINFO_GROUPS.ts @@ -1,25 +1,25 @@ -import { RedisCommandArgument, RedisCommandArguments } from '.'; +// import { RedisCommandArgument, RedisCommandArguments } from '.'; -export const FIRST_KEY_INDEX = 2; +// export const FIRST_KEY_INDEX = 2; -export const IS_READ_ONLY = true; +// export const IS_READ_ONLY = true; -export function transformArguments(key: RedisCommandArgument): RedisCommandArguments { - return ['XINFO', 'GROUPS', key]; -} +// export function transformArguments(key: RedisCommandArgument): RedisCommandArguments { +// return ['XINFO', 'GROUPS', key]; +// } -type XInfoGroupsReply = Array<{ - name: RedisCommandArgument; - consumers: number; - pending: number; - lastDeliveredId: RedisCommandArgument; -}>; +// type XInfoGroupsReply = Array<{ +// name: RedisCommandArgument; +// consumers: number; +// pending: number; +// lastDeliveredId: RedisCommandArgument; +// }>; -export function transformReply(rawReply: Array): XInfoGroupsReply { - return rawReply.map(group => ({ - name: group[1], - consumers: group[3], - pending: group[5], - lastDeliveredId: group[7] - })); -} +// export function transformReply(rawReply: Array): XInfoGroupsReply { +// return rawReply.map(group => ({ +// name: group[1], +// consumers: group[3], +// pending: group[5], +// lastDeliveredId: group[7] +// })); +// } diff --git a/packages/client/lib/commands/XINFO_STREAM.ts b/packages/client/lib/commands/XINFO_STREAM.ts index e9de25be8c..32fb83fe0a 100644 --- a/packages/client/lib/commands/XINFO_STREAM.ts +++ b/packages/client/lib/commands/XINFO_STREAM.ts @@ -1,64 +1,64 @@ -import { RedisCommandArgument, RedisCommandArguments } from '.'; -import { StreamMessageReply, transformTuplesReply } from './generic-transformers'; +// import { RedisCommandArgument, RedisCommandArguments } from '.'; +// import { StreamMessageReply, transformTuplesReply } from './generic-transformers'; -export const FIRST_KEY_INDEX = 2; +// export const FIRST_KEY_INDEX = 2; -export const IS_READ_ONLY = true; +// export const IS_READ_ONLY = true; -export function transformArguments(key: RedisCommandArgument): RedisCommandArguments { - return ['XINFO', 'STREAM', key]; -} +// export function transformArguments(key: RedisCommandArgument): RedisCommandArguments { +// return ['XINFO', 'STREAM', key]; +// } -interface XInfoStreamReply { - length: number; - radixTreeKeys: number; - radixTreeNodes: number; - groups: number; - lastGeneratedId: RedisCommandArgument; - firstEntry: StreamMessageReply | null; - lastEntry: StreamMessageReply | null; -} +// interface XInfoStreamReply { +// length: number; +// radixTreeKeys: number; +// radixTreeNodes: number; +// groups: number; +// lastGeneratedId: RedisCommandArgument; +// firstEntry: StreamMessageReply | null; +// lastEntry: StreamMessageReply | null; +// } -export function transformReply(rawReply: Array): XInfoStreamReply { - const parsedReply: Partial = {}; +// export function transformReply(rawReply: Array): XInfoStreamReply { +// const parsedReply: Partial = {}; - for (let i = 0; i < rawReply.length; i+= 2) { - switch (rawReply[i]) { - case 'length': - parsedReply.length = rawReply[i + 1]; - break; +// for (let i = 0; i < rawReply.length; i+= 2) { +// switch (rawReply[i]) { +// case 'length': +// parsedReply.length = rawReply[i + 1]; +// break; - case 'radix-tree-keys': - parsedReply.radixTreeKeys = rawReply[i + 1]; - break; +// case 'radix-tree-keys': +// parsedReply.radixTreeKeys = rawReply[i + 1]; +// break; - case 'radix-tree-nodes': - parsedReply.radixTreeNodes = rawReply[i + 1]; - break; +// case 'radix-tree-nodes': +// parsedReply.radixTreeNodes = rawReply[i + 1]; +// break; - case 'groups': - parsedReply.groups = rawReply[i + 1]; - break; +// case 'groups': +// parsedReply.groups = rawReply[i + 1]; +// break; - case 'last-generated-id': - parsedReply.lastGeneratedId = rawReply[i + 1]; - break; +// case 'last-generated-id': +// parsedReply.lastGeneratedId = rawReply[i + 1]; +// break; - case 'first-entry': - parsedReply.firstEntry = rawReply[i + 1] ? { - id: rawReply[i + 1][0], - message: transformTuplesReply(rawReply[i + 1][1]) - } : null; - break; +// case 'first-entry': +// parsedReply.firstEntry = rawReply[i + 1] ? { +// id: rawReply[i + 1][0], +// message: transformTuplesReply(rawReply[i + 1][1]) +// } : null; +// break; - case 'last-entry': - parsedReply.lastEntry = rawReply[i + 1] ? { - id: rawReply[i + 1][0], - message: transformTuplesReply(rawReply[i + 1][1]) - } : null; - break; - } - } +// case 'last-entry': +// parsedReply.lastEntry = rawReply[i + 1] ? { +// id: rawReply[i + 1][0], +// message: transformTuplesReply(rawReply[i + 1][1]) +// } : null; +// break; +// } +// } - return parsedReply as XInfoStreamReply; -} +// return parsedReply as XInfoStreamReply; +// } diff --git a/packages/client/lib/commands/XLEN.ts b/packages/client/lib/commands/XLEN.ts index fda4192c8a..d2ed566a19 100644 --- a/packages/client/lib/commands/XLEN.ts +++ b/packages/client/lib/commands/XLEN.ts @@ -1,11 +1,10 @@ -import { RedisCommandArgument, RedisCommandArguments } from '.'; +import { RedisArgument, NumberReply, Command } from '../RESP/types'; -export const FIRST_KEY_INDEX = 1; - -export const IS_READ_ONLY = true; - -export function transformArguments(key: RedisCommandArgument): RedisCommandArguments { +export default { + FIRST_KEY_INDEX: 1, + IS_READ_ONLY: true, + transformArguments(key: RedisArgument) { return ['XLEN', key]; -} - -export declare function transformReply(): number; + }, + transformReply: undefined as unknown as () => NumberReply +} as const satisfies Command; diff --git a/packages/client/lib/commands/XPENDING.ts b/packages/client/lib/commands/XPENDING.ts index ac56e42941..215295afd2 100644 --- a/packages/client/lib/commands/XPENDING.ts +++ b/packages/client/lib/commands/XPENDING.ts @@ -1,44 +1,44 @@ -import { RedisCommandArgument, RedisCommandArguments } from '.'; +// import { RedisCommandArgument, RedisCommandArguments } from '.'; -export const FIRST_KEY_INDEX = 1; +// export const FIRST_KEY_INDEX = 1; -export const IS_READ_ONLY = true; +// export const IS_READ_ONLY = true; -export function transformArguments( - key: RedisCommandArgument, - group: RedisCommandArgument -): RedisCommandArguments { - return ['XPENDING', key, group]; -} +// export function transformArguments( +// key: RedisCommandArgument, +// group: RedisCommandArgument +// ): RedisCommandArguments { +// return ['XPENDING', key, group]; +// } -type XPendingRawReply = [ - pending: number, - firstId: RedisCommandArgument | null, - lastId: RedisCommandArgument | null, - consumers: Array<[ - name: RedisCommandArgument, - deliveriesCounter: RedisCommandArgument - ]> | null -]; +// type XPendingRawReply = [ +// pending: number, +// firstId: RedisCommandArgument | null, +// lastId: RedisCommandArgument | null, +// consumers: Array<[ +// name: RedisCommandArgument, +// deliveriesCounter: RedisCommandArgument +// ]> | null +// ]; -interface XPendingReply { - pending: number; - firstId: RedisCommandArgument | null; - lastId: RedisCommandArgument | null; - consumers: Array<{ - name: RedisCommandArgument; - deliveriesCounter: number; - }> | null; -} +// interface XPendingReply { +// pending: number; +// firstId: RedisCommandArgument | null; +// lastId: RedisCommandArgument | null; +// consumers: Array<{ +// name: RedisCommandArgument; +// deliveriesCounter: number; +// }> | null; +// } -export function transformReply(reply: XPendingRawReply): XPendingReply { - return { - pending: reply[0], - firstId: reply[1], - lastId: reply[2], - consumers: reply[3] === null ? null : reply[3].map(([name, deliveriesCounter]) => ({ - name, - deliveriesCounter: Number(deliveriesCounter) - })) - }; -} +// export function transformReply(reply: XPendingRawReply): XPendingReply { +// return { +// pending: reply[0], +// firstId: reply[1], +// lastId: reply[2], +// consumers: reply[3] === null ? null : reply[3].map(([name, deliveriesCounter]) => ({ +// name, +// deliveriesCounter: Number(deliveriesCounter) +// })) +// }; +// } diff --git a/packages/client/lib/commands/XPENDING_RANGE.ts b/packages/client/lib/commands/XPENDING_RANGE.ts index 87660de545..37d95efd4f 100644 --- a/packages/client/lib/commands/XPENDING_RANGE.ts +++ b/packages/client/lib/commands/XPENDING_RANGE.ts @@ -1,56 +1,56 @@ -import { RedisCommandArgument, RedisCommandArguments } from '.'; +// import { RedisCommandArgument, RedisCommandArguments } from '.'; -export const FIRST_KEY_INDEX = 1; +// export const FIRST_KEY_INDEX = 1; -export const IS_READ_ONLY = true; +// export const IS_READ_ONLY = true; -interface XPendingRangeOptions { - IDLE?: number; - consumer?: RedisCommandArgument; -} +// interface XPendingRangeOptions { +// IDLE?: number; +// consumer?: RedisCommandArgument; +// } -export function transformArguments( - key: RedisCommandArgument, - group: RedisCommandArgument, - start: string, - end: string, - count: number, - options?: XPendingRangeOptions -): RedisCommandArguments { - const args = ['XPENDING', key, group]; +// export function transformArguments( +// key: RedisCommandArgument, +// group: RedisCommandArgument, +// start: string, +// end: string, +// count: number, +// options?: XPendingRangeOptions +// ): RedisCommandArguments { +// const args = ['XPENDING', key, group]; - if (options?.IDLE) { - args.push('IDLE', options.IDLE.toString()); - } +// if (options?.IDLE) { +// args.push('IDLE', options.IDLE.toString()); +// } - args.push(start, end, count.toString()); +// args.push(start, end, count.toString()); - if (options?.consumer) { - args.push(options.consumer); - } +// if (options?.consumer) { +// args.push(options.consumer); +// } - return args; -} +// return args; +// } -type XPendingRangeRawReply = Array<[ - id: RedisCommandArgument, - consumer: RedisCommandArgument, - millisecondsSinceLastDelivery: number, - deliveriesCounter: number -]>; +// type XPendingRangeRawReply = Array<[ +// id: RedisCommandArgument, +// consumer: RedisCommandArgument, +// millisecondsSinceLastDelivery: number, +// deliveriesCounter: number +// ]>; -type XPendingRangeReply = Array<{ - id: RedisCommandArgument; - owner: RedisCommandArgument; - millisecondsSinceLastDelivery: number; - deliveriesCounter: number; -}>; +// type XPendingRangeReply = Array<{ +// id: RedisCommandArgument; +// owner: RedisCommandArgument; +// millisecondsSinceLastDelivery: number; +// deliveriesCounter: number; +// }>; -export function transformReply(reply: XPendingRangeRawReply): XPendingRangeReply { - return reply.map(([id, owner, millisecondsSinceLastDelivery, deliveriesCounter]) => ({ - id, - owner, - millisecondsSinceLastDelivery, - deliveriesCounter - })); -} +// export function transformReply(reply: XPendingRangeRawReply): XPendingRangeReply { +// return reply.map(([id, owner, millisecondsSinceLastDelivery, deliveriesCounter]) => ({ +// id, +// owner, +// millisecondsSinceLastDelivery, +// deliveriesCounter +// })); +// } diff --git a/packages/client/lib/commands/XRANGE.ts b/packages/client/lib/commands/XRANGE.ts index ae56639f76..1f3cf1d856 100644 --- a/packages/client/lib/commands/XRANGE.ts +++ b/packages/client/lib/commands/XRANGE.ts @@ -1,26 +1,26 @@ -import { RedisCommandArgument, RedisCommandArguments } from '.'; +// import { RedisCommandArgument, RedisCommandArguments } from '.'; -export const FIRST_KEY_INDEX = 1; +// export const FIRST_KEY_INDEX = 1; -export const IS_READ_ONLY = true; +// export const IS_READ_ONLY = true; -interface XRangeOptions { - COUNT?: number; -} +// interface XRangeOptions { +// COUNT?: number; +// } -export function transformArguments( - key: RedisCommandArgument, - start: RedisCommandArgument, - end: RedisCommandArgument, - options?: XRangeOptions -): RedisCommandArguments { - const args = ['XRANGE', key, start, end]; +// export function transformArguments( +// key: RedisCommandArgument, +// start: RedisCommandArgument, +// end: RedisCommandArgument, +// options?: XRangeOptions +// ): RedisCommandArguments { +// const args = ['XRANGE', key, start, end]; - if (options?.COUNT) { - args.push('COUNT', options.COUNT.toString()); - } +// if (options?.COUNT) { +// args.push('COUNT', options.COUNT.toString()); +// } - return args; -} +// return args; +// } -export { transformStreamMessagesReply as transformReply } from './generic-transformers'; +// export { transformStreamMessagesReply as transformReply } from './generic-transformers'; diff --git a/packages/client/lib/commands/XREAD.ts b/packages/client/lib/commands/XREAD.ts index e5f85dbe7f..f58972b1f6 100644 --- a/packages/client/lib/commands/XREAD.ts +++ b/packages/client/lib/commands/XREAD.ts @@ -1,46 +1,46 @@ -import { RedisCommandArgument, RedisCommandArguments } from '.'; +// import { RedisCommandArgument, RedisCommandArguments } from '.'; -export const FIRST_KEY_INDEX = (streams: Array | XReadStream): RedisCommandArgument => { - return Array.isArray(streams) ? streams[0].key : streams.key; -}; +// export const FIRST_KEY_INDEX = (streams: Array | XReadStream): RedisCommandArgument => { +// return Array.isArray(streams) ? streams[0].key : streams.key; +// }; -export const IS_READ_ONLY = true; +// export const IS_READ_ONLY = true; -interface XReadStream { - key: RedisCommandArgument; - id: RedisCommandArgument; -} +// interface XReadStream { +// key: RedisCommandArgument; +// id: RedisCommandArgument; +// } -interface XReadOptions { - COUNT?: number; - BLOCK?: number; -} +// interface XReadOptions { +// COUNT?: number; +// BLOCK?: number; +// } -export function transformArguments( - streams: Array | XReadStream, - options?: XReadOptions -): RedisCommandArguments { - const args: RedisCommandArguments = ['XREAD']; +// export function transformArguments( +// streams: Array | XReadStream, +// options?: XReadOptions +// ): RedisCommandArguments { +// const args: RedisCommandArguments = ['XREAD']; - if (options?.COUNT) { - args.push('COUNT', options.COUNT.toString()); - } +// if (options?.COUNT) { +// args.push('COUNT', options.COUNT.toString()); +// } - if (typeof options?.BLOCK === 'number') { - args.push('BLOCK', options.BLOCK.toString()); - } +// if (typeof options?.BLOCK === 'number') { +// args.push('BLOCK', options.BLOCK.toString()); +// } - args.push('STREAMS'); +// args.push('STREAMS'); - const streamsArray = Array.isArray(streams) ? streams : [streams], - argsLength = args.length; - for (let i = 0; i < streamsArray.length; i++) { - const stream = streamsArray[i]; - args[argsLength + i] = stream.key; - args[argsLength + streamsArray.length + i] = stream.id; - } +// const streamsArray = Array.isArray(streams) ? streams : [streams], +// argsLength = args.length; +// for (let i = 0; i < streamsArray.length; i++) { +// const stream = streamsArray[i]; +// args[argsLength + i] = stream.key; +// args[argsLength + streamsArray.length + i] = stream.id; +// } - return args; -} +// return args; +// } -export { transformStreamsMessagesReply as transformReply } from './generic-transformers'; +// export { transformStreamsMessagesReply as transformReply } from './generic-transformers'; diff --git a/packages/client/lib/commands/XREADGROUP.ts b/packages/client/lib/commands/XREADGROUP.ts index e90e698a2a..40064934cd 100644 --- a/packages/client/lib/commands/XREADGROUP.ts +++ b/packages/client/lib/commands/XREADGROUP.ts @@ -1,57 +1,57 @@ -import { RedisCommandArgument, RedisCommandArguments } from '.'; +// import { RedisCommandArgument, RedisCommandArguments } from '.'; -export interface XReadGroupStream { - key: RedisCommandArgument; - id: RedisCommandArgument; -} +// export interface XReadGroupStream { +// key: RedisCommandArgument; +// id: RedisCommandArgument; +// } -export interface XReadGroupOptions { - COUNT?: number; - BLOCK?: number; - NOACK?: true; -} +// export interface XReadGroupOptions { +// COUNT?: number; +// BLOCK?: number; +// NOACK?: true; +// } -export const FIRST_KEY_INDEX = ( - _group: RedisCommandArgument, - _consumer: RedisCommandArgument, - streams: Array | XReadGroupStream -): RedisCommandArgument => { - return Array.isArray(streams) ? streams[0].key : streams.key; -}; +// export const FIRST_KEY_INDEX = ( +// _group: RedisCommandArgument, +// _consumer: RedisCommandArgument, +// streams: Array | XReadGroupStream +// ): RedisCommandArgument => { +// return Array.isArray(streams) ? streams[0].key : streams.key; +// }; -export const IS_READ_ONLY = true; +// export const IS_READ_ONLY = true; -export function transformArguments( - group: RedisCommandArgument, - consumer: RedisCommandArgument, - streams: Array | XReadGroupStream, - options?: XReadGroupOptions -): RedisCommandArguments { - const args = ['XREADGROUP', 'GROUP', group, consumer]; +// export function transformArguments( +// group: RedisCommandArgument, +// consumer: RedisCommandArgument, +// streams: Array | XReadGroupStream, +// options?: XReadGroupOptions +// ): RedisCommandArguments { +// const args = ['XREADGROUP', 'GROUP', group, consumer]; - if (options?.COUNT) { - args.push('COUNT', options.COUNT.toString()); - } +// if (options?.COUNT) { +// args.push('COUNT', options.COUNT.toString()); +// } - if (typeof options?.BLOCK === 'number') { - args.push('BLOCK', options.BLOCK.toString()); - } +// if (typeof options?.BLOCK === 'number') { +// args.push('BLOCK', options.BLOCK.toString()); +// } - if (options?.NOACK) { - args.push('NOACK'); - } +// if (options?.NOACK) { +// args.push('NOACK'); +// } - args.push('STREAMS'); +// args.push('STREAMS'); - const streamsArray = Array.isArray(streams) ? streams : [streams], - argsLength = args.length; - for (let i = 0; i < streamsArray.length; i++) { - const stream = streamsArray[i]; - args[argsLength + i] = stream.key; - args[argsLength + streamsArray.length + i] = stream.id; - } +// const streamsArray = Array.isArray(streams) ? streams : [streams], +// argsLength = args.length; +// for (let i = 0; i < streamsArray.length; i++) { +// const stream = streamsArray[i]; +// args[argsLength + i] = stream.key; +// args[argsLength + streamsArray.length + i] = stream.id; +// } - return args; -} +// return args; +// } -export { transformStreamsMessagesReply as transformReply } from './generic-transformers'; +// export { transformStreamsMessagesReply as transformReply } from './generic-transformers'; diff --git a/packages/client/lib/commands/XREVRANGE.ts b/packages/client/lib/commands/XREVRANGE.ts index 96bbeba83c..de095dc029 100644 --- a/packages/client/lib/commands/XREVRANGE.ts +++ b/packages/client/lib/commands/XREVRANGE.ts @@ -1,26 +1,26 @@ -import { RedisCommandArgument, RedisCommandArguments } from '.'; +// import { RedisCommandArgument, RedisCommandArguments } from '.'; -export const FIRST_KEY_INDEX = 1; +// export const FIRST_KEY_INDEX = 1; -export const IS_READ_ONLY = true; +// export const IS_READ_ONLY = true; -interface XRangeRevOptions { - COUNT?: number; -} +// interface XRangeRevOptions { +// COUNT?: number; +// } -export function transformArguments( - key: RedisCommandArgument, - start: RedisCommandArgument, - end: RedisCommandArgument, - options?: XRangeRevOptions -): RedisCommandArguments { - const args = ['XREVRANGE', key, start, end]; +// export function transformArguments( +// key: RedisCommandArgument, +// start: RedisCommandArgument, +// end: RedisCommandArgument, +// options?: XRangeRevOptions +// ): RedisCommandArguments { +// const args = ['XREVRANGE', key, start, end]; - if (options?.COUNT) { - args.push('COUNT', options.COUNT.toString()); - } +// if (options?.COUNT) { +// args.push('COUNT', options.COUNT.toString()); +// } - return args; -} +// return args; +// } -export { transformStreamMessagesReply as transformReply } from './generic-transformers'; +// export { transformStreamMessagesReply as transformReply } from './generic-transformers'; diff --git a/packages/client/lib/commands/XSETID.ts b/packages/client/lib/commands/XSETID.ts index 76acc7ebab..df7cc10f90 100644 --- a/packages/client/lib/commands/XSETID.ts +++ b/packages/client/lib/commands/XSETID.ts @@ -1,28 +1,28 @@ -import { RedisCommandArgument, RedisCommandArguments } from '.'; +// import { RedisCommandArgument, RedisCommandArguments } from '.'; -export const FIRST_KEY_INDEX = 1; +// export const FIRST_KEY_INDEX = 1; -interface XSetIdOptions { - ENTRIESADDED?: number; - MAXDELETEDID?: RedisCommandArgument; -} +// interface XSetIdOptions { +// ENTRIESADDED?: number; +// MAXDELETEDID?: RedisCommandArgument; +// } -export function transformArguments( - key: RedisCommandArgument, - lastId: RedisCommandArgument, - options?: XSetIdOptions -): RedisCommandArguments { - const args = ['XSETID', key, lastId]; +// export function transformArguments( +// key: RedisCommandArgument, +// lastId: RedisCommandArgument, +// options?: XSetIdOptions +// ): RedisCommandArguments { +// const args = ['XSETID', key, lastId]; - if (options?.ENTRIESADDED) { - args.push('ENTRIESADDED', options.ENTRIESADDED.toString()); - } +// if (options?.ENTRIESADDED) { +// args.push('ENTRIESADDED', options.ENTRIESADDED.toString()); +// } - if (options?.MAXDELETEDID) { - args.push('MAXDELETEDID', options.MAXDELETEDID); - } +// if (options?.MAXDELETEDID) { +// args.push('MAXDELETEDID', options.MAXDELETEDID); +// } - return args; -} +// return args; +// } -export declare function transformReply(): 'OK'; +// export declare function transformReply(): 'OK'; diff --git a/packages/client/lib/commands/XTRIM.ts b/packages/client/lib/commands/XTRIM.ts index 15b934c56e..780aeb30d7 100644 --- a/packages/client/lib/commands/XTRIM.ts +++ b/packages/client/lib/commands/XTRIM.ts @@ -1,31 +1,31 @@ -import { RedisCommandArgument, RedisCommandArguments } from '.'; +// import { RedisCommandArgument, RedisCommandArguments } from '.'; -export const FIRST_KEY_INDEX = 1; +// export const FIRST_KEY_INDEX = 1; -interface XTrimOptions { - strategyModifier?: '=' | '~'; - LIMIT?: number; -} +// interface XTrimOptions { +// strategyModifier?: '=' | '~'; +// LIMIT?: number; +// } -export function transformArguments( - key: RedisCommandArgument, - strategy: 'MAXLEN' | 'MINID', - threshold: number, - options?: XTrimOptions -): RedisCommandArguments { - const args = ['XTRIM', key, strategy]; +// export function transformArguments( +// key: RedisCommandArgument, +// strategy: 'MAXLEN' | 'MINID', +// threshold: number, +// options?: XTrimOptions +// ): RedisCommandArguments { +// const args = ['XTRIM', key, strategy]; - if (options?.strategyModifier) { - args.push(options.strategyModifier); - } +// if (options?.strategyModifier) { +// args.push(options.strategyModifier); +// } - args.push(threshold.toString()); +// args.push(threshold.toString()); - if (options?.LIMIT) { - args.push('LIMIT', options.LIMIT.toString()); - } +// if (options?.LIMIT) { +// args.push('LIMIT', options.LIMIT.toString()); +// } - return args; -} +// return args; +// } -export declare function transformReply(): number; +// export declare function transformReply(): number; diff --git a/packages/client/lib/commands/ZADD.ts b/packages/client/lib/commands/ZADD.ts index 9372c9217e..0c2a1e105d 100644 --- a/packages/client/lib/commands/ZADD.ts +++ b/packages/client/lib/commands/ZADD.ts @@ -1,5 +1,5 @@ import { RedisArgument, NumberReply, DoubleReply, Command } from '../RESP/types'; -import { ZMember, transformNumberInfinityArgument, transformNumberInfinityReply } from './generic-transformers'; +import { ZMember, transformDoubleArgument, transformDoubleReply } from './generic-transformers'; interface NX { NX?: boolean; @@ -62,7 +62,7 @@ export default { for (const { score, value } of (Array.isArray(members) ? members : [members])) { args.push( - transformNumberInfinityArgument(score), + transformDoubleArgument(score), value ); } @@ -70,7 +70,7 @@ export default { return args; }, transformReply: { - 2: transformNumberInfinityReply, + 2: transformDoubleReply, 3: undefined as unknown as () => NumberReply | DoubleReply } } as const satisfies Command; diff --git a/packages/client/lib/commands/ZCOUNT.ts b/packages/client/lib/commands/ZCOUNT.ts index 06bd4b915a..187a316b15 100644 --- a/packages/client/lib/commands/ZCOUNT.ts +++ b/packages/client/lib/commands/ZCOUNT.ts @@ -1,5 +1,5 @@ import { RedisArgument, NumberReply, Command } from '../RESP/types'; -import { transformStringNumberInfinityArgument } from './generic-transformers'; +import { transformStringDoubleArgument } from './generic-transformers'; export default { FIRST_KEY_INDEX: 1, @@ -12,8 +12,8 @@ export default { return [ 'ZCOUNT', key, - transformStringNumberInfinityArgument(min), - transformStringNumberInfinityArgument(max) + transformStringDoubleArgument(min), + transformStringDoubleArgument(max) ]; }, transformReply: undefined as unknown as () => NumberReply diff --git a/packages/client/lib/commands/ZINCRBY.ts b/packages/client/lib/commands/ZINCRBY.ts index 66b3dfa1f2..c20da15161 100644 --- a/packages/client/lib/commands/ZINCRBY.ts +++ b/packages/client/lib/commands/ZINCRBY.ts @@ -1,5 +1,5 @@ import { RedisArgument, DoubleReply, Command } from '../RESP/types'; -import { transformNumberInfinityArgument, transformNumberInfinityReply } from './generic-transformers'; +import { transformDoubleArgument, transformDoubleReply } from './generic-transformers'; export default { FIRST_KEY_INDEX: 1, @@ -11,12 +11,12 @@ export default { return [ 'ZINCRBY', key, - transformNumberInfinityArgument(increment), + transformDoubleArgument(increment), member ]; }, transformReply: { - 2: transformNumberInfinityReply, + 2: transformDoubleReply, 3: undefined as unknown as () => DoubleReply } } as const satisfies Command; diff --git a/packages/client/lib/commands/ZINTER.ts b/packages/client/lib/commands/ZINTER.ts index 8c185c03c7..a4c0be6deb 100644 --- a/packages/client/lib/commands/ZINTER.ts +++ b/packages/client/lib/commands/ZINTER.ts @@ -1,5 +1,5 @@ import { RedisArgument, ArrayReply, BlobStringReply, Command } from '../RESP/types'; -import { transformNumberInfinityArgument } from './generic-transformers'; +import { transformDoubleArgument } from './generic-transformers'; export type ZInterKeyAndWeight = { key: RedisArgument; @@ -29,7 +29,7 @@ export function pushZInterArguments( for (let i = 0; i < keys.length; i++) { const index = start + i; args[index] = keys[i].key; - args[index + 1 + keys.length] = transformNumberInfinityArgument(keys[i].weight); + args[index + 1 + keys.length] = transformDoubleArgument(keys[i].weight); } } } @@ -42,7 +42,7 @@ export function pushZInterArguments( args.push( keys.key, 'WEIGHTS', - transformNumberInfinityArgument(keys.weight) + transformDoubleArgument(keys.weight) ); } } diff --git a/packages/client/lib/commands/ZMPOP.ts b/packages/client/lib/commands/ZMPOP.ts index d430b1cbc4..ae704ab286 100644 --- a/packages/client/lib/commands/ZMPOP.ts +++ b/packages/client/lib/commands/ZMPOP.ts @@ -1,54 +1,61 @@ -import { NullReply, TuplesReply, BlobStringReply, DoubleReply, ArrayReply, Resp2Reply, Command } from '../RESP/types'; -import { pushVariadicArgument, RedisVariadicArgument, SortedSetSide } from './generic-transformers'; +// import { NullReply, TuplesReply, BlobStringReply, DoubleReply, ArrayReply, Resp2Reply, Command, RedisArgument } from '../RESP/types'; +// import { pushVariadicArgument, RedisVariadicArgument, SortedSetSide } from './generic-transformers'; -export interface ZMPopOptions { - COUNT?: number; -} +// export interface ZMPopOptions { +// COUNT?: number; +// } -export type ZMPopRawReply = NullReply | TuplesReply<[ - key: BlobStringReply, - elements: ArrayReply> -]>; +// export type ZMPopRawReply = NullReply | TuplesReply<[ +// key: BlobStringReply, +// elements: ArrayReply> +// ]>; -export default { - FIRST_KEY_INDEX: 2, - IS_READ_ONLY: false, - transformArguments( - keys: RedisVariadicArgument, - side: SortedSetSide, - options?: ZMPopOptions - ) { - const args = pushVariadicArgument(['ZMPOP'], keys); +// export function pushZMPopArguments( +// args: Array, +// keys: RedisVariadicArgument, +// side: SortedSetSide, +// options: ZMPopOptions +// ) - args.push(side); +// export default { +// FIRST_KEY_INDEX: 2, +// IS_READ_ONLY: false, +// transformArguments( +// keys: RedisVariadicArgument, +// side: SortedSetSide, +// options?: ZMPopOptions +// ) { +// const args = pushVariadicArgument(['ZMPOP'], keys); - if (options?.COUNT) { - args.push('COUNT', options.COUNT.toString()); - } +// args.push(side); - return args; - }, - transformReply: { - 2: (reply: Resp2Reply) => { - return reply === null ? null : { - key: reply[0], - elements: reply[1].map(([member, score]) => ({ - member, - score: Number(score) - })) - }; - }, - 3: (reply: ZMPopRawReply) => { - return reply === null ? null : { - key: reply[0], - elements: reply[1].map(([member, score]) => ({ - member, - score - })) - }; - }, - } -} as const satisfies Command; +// if (options?.COUNT) { +// args.push('COUNT', options.COUNT.toString()); +// } + +// return args; +// }, +// transformReply: { +// 2: (reply: Resp2Reply) => { +// return reply === null ? null : { +// key: reply[0], +// elements: reply[1].map(([member, score]) => ({ +// member, +// score: Number(score) +// })) +// }; +// }, +// 3: (reply: ZMPopRawReply) => { +// return reply === null ? null : { +// key: reply[0], +// elements: reply[1].map(([member, score]) => ({ +// member, +// score +// })) +// }; +// }, +// } +// } as const satisfies Command; diff --git a/packages/client/lib/commands/ZPOPMAX.ts b/packages/client/lib/commands/ZPOPMAX.ts index 811166a690..959c3b927b 100644 --- a/packages/client/lib/commands/ZPOPMAX.ts +++ b/packages/client/lib/commands/ZPOPMAX.ts @@ -1,12 +1,12 @@ -import { RedisCommandArgument, RedisCommandArguments } from '.'; +// import { RedisCommandArgument, RedisCommandArguments } from '.'; -export const FIRST_KEY_INDEX = 1; +// export const FIRST_KEY_INDEX = 1; -export function transformArguments(key: RedisCommandArgument): RedisCommandArguments { - return [ - 'ZPOPMAX', - key - ]; -} +// export function transformArguments(key: RedisCommandArgument): RedisCommandArguments { +// return [ +// 'ZPOPMAX', +// key +// ]; +// } -export { transformSortedSetMemberNullReply as transformReply } from './generic-transformers'; +// export { transformSortedSetMemberNullReply as transformReply } from './generic-transformers'; diff --git a/packages/client/lib/commands/ZPOPMAX_COUNT.ts b/packages/client/lib/commands/ZPOPMAX_COUNT.ts index 875bcfb914..881f5472e6 100644 --- a/packages/client/lib/commands/ZPOPMAX_COUNT.ts +++ b/packages/client/lib/commands/ZPOPMAX_COUNT.ts @@ -1,16 +1,16 @@ -import { RedisCommandArgument, RedisCommandArguments } from '.'; -import { transformArguments as transformZPopMaxArguments } from './ZPOPMAX'; +// import { RedisCommandArgument, RedisCommandArguments } from '.'; +// import { transformArguments as transformZPopMaxArguments } from './ZPOPMAX'; -export { FIRST_KEY_INDEX } from './ZPOPMAX'; +// export { FIRST_KEY_INDEX } from './ZPOPMAX'; -export function transformArguments( - key: RedisCommandArgument, - count: number -): RedisCommandArguments { - return [ - ...transformZPopMaxArguments(key), - count.toString() - ]; -} +// export function transformArguments( +// key: RedisCommandArgument, +// count: number +// ): RedisCommandArguments { +// return [ +// ...transformZPopMaxArguments(key), +// count.toString() +// ]; +// } -export { transformSortedSetWithScoresReply as transformReply } from './generic-transformers'; +// export { transformSortedSetWithScoresReply as transformReply } from './generic-transformers'; diff --git a/packages/client/lib/commands/ZPOPMIN.ts b/packages/client/lib/commands/ZPOPMIN.ts index 053ffd2d2c..dea8948b8b 100644 --- a/packages/client/lib/commands/ZPOPMIN.ts +++ b/packages/client/lib/commands/ZPOPMIN.ts @@ -1,12 +1,12 @@ -import { RedisCommandArgument, RedisCommandArguments } from '.'; +// import { RedisCommandArgument, RedisCommandArguments } from '.'; -export const FIRST_KEY_INDEX = 1; +// export const FIRST_KEY_INDEX = 1; -export function transformArguments(key: RedisCommandArgument): RedisCommandArguments { - return [ - 'ZPOPMIN', - key - ]; -} +// export function transformArguments(key: RedisCommandArgument): RedisCommandArguments { +// return [ +// 'ZPOPMIN', +// key +// ]; +// } -export { transformSortedSetMemberNullReply as transformReply } from './generic-transformers'; +// export { transformSortedSetMemberNullReply as transformReply } from './generic-transformers'; diff --git a/packages/client/lib/commands/ZPOPMIN_COUNT.ts b/packages/client/lib/commands/ZPOPMIN_COUNT.ts index 54125ade0a..385043be65 100644 --- a/packages/client/lib/commands/ZPOPMIN_COUNT.ts +++ b/packages/client/lib/commands/ZPOPMIN_COUNT.ts @@ -1,16 +1,16 @@ -import { RedisCommandArgument, RedisCommandArguments } from '.'; -import { transformArguments as transformZPopMinArguments } from './ZPOPMIN'; +// import { RedisCommandArgument, RedisCommandArguments } from '.'; +// import { transformArguments as transformZPopMinArguments } from './ZPOPMIN'; -export { FIRST_KEY_INDEX } from './ZPOPMIN'; +// export { FIRST_KEY_INDEX } from './ZPOPMIN'; -export function transformArguments( - key: RedisCommandArgument, - count: number -): RedisCommandArguments { - return [ - ...transformZPopMinArguments(key), - count.toString() - ]; -} +// export function transformArguments( +// key: RedisCommandArgument, +// count: number +// ): RedisCommandArguments { +// return [ +// ...transformZPopMinArguments(key), +// count.toString() +// ]; +// } -export { transformSortedSetWithScoresReply as transformReply } from './generic-transformers'; +// export { transformSortedSetWithScoresReply as transformReply } from './generic-transformers'; diff --git a/packages/client/lib/commands/ZRANDMEMBER.ts b/packages/client/lib/commands/ZRANDMEMBER.ts index 00420872c0..449eb281c6 100644 --- a/packages/client/lib/commands/ZRANDMEMBER.ts +++ b/packages/client/lib/commands/ZRANDMEMBER.ts @@ -1,11 +1,10 @@ -import { RedisCommandArgument, RedisCommandArguments } from '.'; +import { RedisArgument, BlobStringReply, NullReply, Command } from '../RESP/types'; -export const FIRST_KEY_INDEX = 1; - -export const IS_READ_ONLY = true; - -export function transformArguments(key: RedisCommandArgument): RedisCommandArguments { +export default { + FIRST_KEY_INDEX: 1, + IS_READ_ONLY: true, + transformArguments(key: RedisArgument) { return ['ZRANDMEMBER', key]; -} - -export declare function transformReply(): RedisCommandArgument | null; + }, + transformReply: undefined as unknown as () => BlobStringReply | NullReply +} as const satisfies Command; diff --git a/packages/client/lib/commands/ZRANDMEMBER_COUNT.ts b/packages/client/lib/commands/ZRANDMEMBER_COUNT.ts index 3aa91902c6..89b921f007 100644 --- a/packages/client/lib/commands/ZRANDMEMBER_COUNT.ts +++ b/packages/client/lib/commands/ZRANDMEMBER_COUNT.ts @@ -1,16 +1,13 @@ -import { RedisCommandArgument, RedisCommandArguments } from '.'; -import { transformArguments as transformZRandMemberArguments } from './ZRANDMEMBER'; +import { RedisArgument, ArrayReply, BlobStringReply, Command } from '../RESP/types'; +import ZRANDMEMBER from './ZRANDMEMBER'; -export { FIRST_KEY_INDEX, IS_READ_ONLY } from './ZRANDMEMBER'; - -export function transformArguments( - key: RedisCommandArgument, - count: number -): RedisCommandArguments { - return [ - ...transformZRandMemberArguments(key), - count.toString() - ]; -} - -export declare function transformReply(): Array; +export default { + FIRST_KEY_INDEX: ZRANDMEMBER.FIRST_KEY_INDEX, + IS_READ_ONLY: ZRANDMEMBER.IS_READ_ONLY, + transformArguments(key: RedisArgument, count: number) { + const args = ZRANDMEMBER.transformArguments(key); + args.push(count.toString()); + return args; + }, + transformReply: undefined as unknown as () => ArrayReply +} as const satisfies Command; diff --git a/packages/client/lib/commands/ZRANDMEMBER_COUNT_WITHSCORES.ts b/packages/client/lib/commands/ZRANDMEMBER_COUNT_WITHSCORES.ts index cc9d2bc26e..14c28d4b6c 100644 --- a/packages/client/lib/commands/ZRANDMEMBER_COUNT_WITHSCORES.ts +++ b/packages/client/lib/commands/ZRANDMEMBER_COUNT_WITHSCORES.ts @@ -1,13 +1,14 @@ -import { RedisCommandArguments } from '.'; -import { transformArguments as transformZRandMemberCountArguments } from './ZRANDMEMBER_COUNT'; +import { Command, RedisArgument } from '../RESP/types'; +import ZRANDMEMBER_COUNT from './ZRANDMEMBER_COUNT'; +import { transformSortedSetReply } from './generic-transformers'; -export { FIRST_KEY_INDEX, IS_READ_ONLY } from './ZRANDMEMBER_COUNT'; - -export function transformArguments(...args: Parameters): RedisCommandArguments { - return [ - ...transformZRandMemberCountArguments(...args), - 'WITHSCORES' - ]; -} - -export { transformSortedSetWithScoresReply as transformReply } from './generic-transformers'; +export default { + FIRST_KEY_INDEX: ZRANDMEMBER_COUNT.FIRST_KEY_INDEX, + IS_READ_ONLY: ZRANDMEMBER_COUNT.IS_READ_ONLY, + transformArguments(key: RedisArgument, count: number) { + const args = ZRANDMEMBER_COUNT.transformArguments(key, count); + args.push('WITHSCORES'); + return args; + }, + transformReply: transformSortedSetReply +} as const satisfies Command; diff --git a/packages/client/lib/commands/ZRANGE.ts b/packages/client/lib/commands/ZRANGE.ts index 83f09aaa1b..9683c09ab5 100644 --- a/packages/client/lib/commands/ZRANGE.ts +++ b/packages/client/lib/commands/ZRANGE.ts @@ -1,51 +1,54 @@ -import { RedisCommandArgument, RedisCommandArguments } from '.'; -import { transformStringNumberInfinityArgument } from './generic-transformers'; - -export const FIRST_KEY_INDEX = 1; - -export const IS_READ_ONLY = true; +import { RedisArgument, ArrayReply, BlobStringReply, Command } from '../RESP/types'; +import { transformStringDoubleArgument } from './generic-transformers'; interface ZRangeOptions { - BY?: 'SCORE' | 'LEX'; - REV?: true; - LIMIT?: { - offset: number; - count: number; - }; + BY?: 'SCORE' | 'LEX'; + REV?: boolean; + LIMIT?: { + offset: number; + count: number; + }; } -export function transformArguments( - key: RedisCommandArgument, - min: RedisCommandArgument | number, - max: RedisCommandArgument | number, +export default { + FIRST_KEY_INDEX: 1, + IS_READ_ONLY: true, + transformArguments( + key: RedisArgument, + min: RedisArgument | number, + max: RedisArgument | number, options?: ZRangeOptions -): RedisCommandArguments { + ) { const args = [ - 'ZRANGE', - key, - transformStringNumberInfinityArgument(min), - transformStringNumberInfinityArgument(max) + 'ZRANGE', + key, + transformStringDoubleArgument(min), + transformStringDoubleArgument(max) ]; switch (options?.BY) { - case 'SCORE': - args.push('BYSCORE'); - break; + case 'SCORE': + args.push('BYSCORE'); + break; - case 'LEX': - args.push('BYLEX'); - break; + case 'LEX': + args.push('BYLEX'); + break; } if (options?.REV) { - args.push('REV'); + args.push('REV'); } if (options?.LIMIT) { - args.push('LIMIT', options.LIMIT.offset.toString(), options.LIMIT.count.toString()); + args.push( + 'LIMIT', + options.LIMIT.offset.toString(), + options.LIMIT.count.toString() + ); } return args; -} - -export declare function transformReply(): Array; + }, + transformReply: undefined as unknown as () => ArrayReply +} as const satisfies Command; diff --git a/packages/client/lib/commands/ZRANGEBYLEX.ts b/packages/client/lib/commands/ZRANGEBYLEX.ts index d6e621a562..d06debb008 100644 --- a/packages/client/lib/commands/ZRANGEBYLEX.ts +++ b/packages/client/lib/commands/ZRANGEBYLEX.ts @@ -1,35 +1,35 @@ -import { RedisCommandArgument, RedisCommandArguments } from '.'; -import { transformStringNumberInfinityArgument } from './generic-transformers'; +// import { RedisCommandArgument, RedisCommandArguments } from '.'; +// import { transformStringDoubleArgument } from './generic-transformers'; -export const FIRST_KEY_INDEX = 1; +// export const FIRST_KEY_INDEX = 1; -export const IS_READ_ONLY = true; +// export const IS_READ_ONLY = true; -export interface ZRangeByLexOptions { - LIMIT?: { - offset: number; - count: number; - }; -} +// export interface ZRangeByLexOptions { +// LIMIT?: { +// offset: number; +// count: number; +// }; +// } -export function transformArguments( - key: RedisCommandArgument, - min: RedisCommandArgument, - max: RedisCommandArgument, - options?: ZRangeByLexOptions -): RedisCommandArguments { - const args = [ - 'ZRANGEBYLEX', - key, - transformStringNumberInfinityArgument(min), - transformStringNumberInfinityArgument(max) - ]; +// export function transformArguments( +// key: RedisCommandArgument, +// min: RedisCommandArgument, +// max: RedisCommandArgument, +// options?: ZRangeByLexOptions +// ): RedisCommandArguments { +// const args = [ +// 'ZRANGEBYLEX', +// key, +// transformStringDoubleArgument(min), +// transformStringDoubleArgument(max) +// ]; - if (options?.LIMIT) { - args.push('LIMIT', options.LIMIT.offset.toString(), options.LIMIT.count.toString()); - } +// if (options?.LIMIT) { +// args.push('LIMIT', options.LIMIT.offset.toString(), options.LIMIT.count.toString()); +// } - return args; -} +// return args; +// } -export declare function transformReply(): Array; +// export declare function transformReply(): Array; diff --git a/packages/client/lib/commands/ZRANGEBYSCORE.ts b/packages/client/lib/commands/ZRANGEBYSCORE.ts index 5ab7d7ac72..562dd6b5d0 100644 --- a/packages/client/lib/commands/ZRANGEBYSCORE.ts +++ b/packages/client/lib/commands/ZRANGEBYSCORE.ts @@ -1,35 +1,35 @@ -import { RedisCommandArgument, RedisCommandArguments } from '.'; -import { transformStringNumberInfinityArgument } from './generic-transformers'; +// import { RedisCommandArgument, RedisCommandArguments } from '.'; +// import { transformStringDoubleArgument } from './generic-transformers'; -export const FIRST_KEY_INDEX = 1; +// export const FIRST_KEY_INDEX = 1; -export const IS_READ_ONLY = true; +// export const IS_READ_ONLY = true; -export interface ZRangeByScoreOptions { - LIMIT?: { - offset: number; - count: number; - }; -} +// export interface ZRangeByScoreOptions { +// LIMIT?: { +// offset: number; +// count: number; +// }; +// } -export function transformArguments( - key: RedisCommandArgument, - min: string | number, - max: string | number, - options?: ZRangeByScoreOptions -): RedisCommandArguments { - const args = [ - 'ZRANGEBYSCORE', - key, - transformStringNumberInfinityArgument(min), - transformStringNumberInfinityArgument(max) - ]; +// export function transformArguments( +// key: RedisCommandArgument, +// min: string | number, +// max: string | number, +// options?: ZRangeByScoreOptions +// ): RedisCommandArguments { +// const args = [ +// 'ZRANGEBYSCORE', +// key, +// transformStringDoubleArgument(min), +// transformStringDoubleArgument(max) +// ]; - if (options?.LIMIT) { - args.push('LIMIT', options.LIMIT.offset.toString(), options.LIMIT.count.toString()); - } +// if (options?.LIMIT) { +// args.push('LIMIT', options.LIMIT.offset.toString(), options.LIMIT.count.toString()); +// } - return args; -} +// return args; +// } -export declare function transformReply(): Array; +// export declare function transformReply(): Array; diff --git a/packages/client/lib/commands/ZRANGEBYSCORE_WITHSCORES.ts b/packages/client/lib/commands/ZRANGEBYSCORE_WITHSCORES.ts index c7266f1c06..1cd2df10f0 100644 --- a/packages/client/lib/commands/ZRANGEBYSCORE_WITHSCORES.ts +++ b/packages/client/lib/commands/ZRANGEBYSCORE_WITHSCORES.ts @@ -1,18 +1,18 @@ -import { RedisCommandArgument, RedisCommandArguments } from '.'; -import { ZRangeByScoreOptions, transformArguments as transformZRangeByScoreArguments } from './ZRANGEBYSCORE'; +// import { RedisCommandArgument, RedisCommandArguments } from '.'; +// import { ZRangeByScoreOptions, transformArguments as transformZRangeByScoreArguments } from './ZRANGEBYSCORE'; -export { FIRST_KEY_INDEX, IS_READ_ONLY } from './ZRANGEBYSCORE'; +// export { FIRST_KEY_INDEX, IS_READ_ONLY } from './ZRANGEBYSCORE'; -export function transformArguments( - key: RedisCommandArgument, - min: string | number, - max: string | number, - options?: ZRangeByScoreOptions -): RedisCommandArguments { - return [ - ...transformZRangeByScoreArguments(key, min, max, options), - 'WITHSCORES' - ]; -} +// export function transformArguments( +// key: RedisCommandArgument, +// min: string | number, +// max: string | number, +// options?: ZRangeByScoreOptions +// ): RedisCommandArguments { +// return [ +// ...transformZRangeByScoreArguments(key, min, max, options), +// 'WITHSCORES' +// ]; +// } -export { transformSortedSetWithScoresReply as transformReply } from './generic-transformers'; +// export { transformSortedSetWithScoresReply as transformReply } from './generic-transformers'; diff --git a/packages/client/lib/commands/ZRANGESTORE.ts b/packages/client/lib/commands/ZRANGESTORE.ts index 28067ceabe..96fd8302de 100644 --- a/packages/client/lib/commands/ZRANGESTORE.ts +++ b/packages/client/lib/commands/ZRANGESTORE.ts @@ -1,62 +1,62 @@ -import { RedisCommandArgument, RedisCommandArguments } from '.'; -import { transformStringNumberInfinityArgument } from './generic-transformers'; +// import { RedisCommandArgument, RedisCommandArguments } from '.'; +// import { transformStringDoubleArgument } from './generic-transformers'; -export const FIRST_KEY_INDEX = 1; +// export const FIRST_KEY_INDEX = 1; -interface ZRangeStoreOptions { - BY?: 'SCORE' | 'LEX'; - REV?: true; - LIMIT?: { - offset: number; - count: number; - }; - WITHSCORES?: true; -} +// interface ZRangeStoreOptions { +// BY?: 'SCORE' | 'LEX'; +// REV?: true; +// LIMIT?: { +// offset: number; +// count: number; +// }; +// WITHSCORES?: true; +// } -export function transformArguments( - dst: RedisCommandArgument, - src: RedisCommandArgument, - min: RedisCommandArgument | number, - max: RedisCommandArgument | number, - options?: ZRangeStoreOptions -): RedisCommandArguments { - const args = [ - 'ZRANGESTORE', - dst, - src, - transformStringNumberInfinityArgument(min), - transformStringNumberInfinityArgument(max) - ]; +// export function transformArguments( +// dst: RedisCommandArgument, +// src: RedisCommandArgument, +// min: RedisCommandArgument | number, +// max: RedisCommandArgument | number, +// options?: ZRangeStoreOptions +// ): RedisCommandArguments { +// const args = [ +// 'ZRANGESTORE', +// dst, +// src, +// transformStringDoubleArgument(min), +// transformStringDoubleArgument(max) +// ]; - switch (options?.BY) { - case 'SCORE': - args.push('BYSCORE'); - break; +// switch (options?.BY) { +// case 'SCORE': +// args.push('BYSCORE'); +// break; - case 'LEX': - args.push('BYLEX'); - break; - } +// case 'LEX': +// args.push('BYLEX'); +// break; +// } - if (options?.REV) { - args.push('REV'); - } +// if (options?.REV) { +// args.push('REV'); +// } - if (options?.LIMIT) { - args.push('LIMIT', options.LIMIT.offset.toString(), options.LIMIT.count.toString()); - } +// if (options?.LIMIT) { +// args.push('LIMIT', options.LIMIT.offset.toString(), options.LIMIT.count.toString()); +// } - if (options?.WITHSCORES) { - args.push('WITHSCORES'); - } +// if (options?.WITHSCORES) { +// args.push('WITHSCORES'); +// } - return args; -} +// return args; +// } -export function transformReply(reply: number): number { - if (typeof reply !== 'number') { - throw new TypeError(`Upgrade to Redis 6.2.5 and up (https://github.com/redis/redis/pull/9089)`); - } +// export function transformReply(reply: number): number { +// if (typeof reply !== 'number') { +// throw new TypeError(`Upgrade to Redis 6.2.5 and up (https://github.com/redis/redis/pull/9089)`); +// } - return reply; -} +// return reply; +// } diff --git a/packages/client/lib/commands/ZRANGE_WITHSCORES.ts b/packages/client/lib/commands/ZRANGE_WITHSCORES.ts index 23ea4d6337..d05b856263 100644 --- a/packages/client/lib/commands/ZRANGE_WITHSCORES.ts +++ b/packages/client/lib/commands/ZRANGE_WITHSCORES.ts @@ -1,13 +1,13 @@ -import { RedisCommandArguments } from '.'; -import { transformArguments as transformZRangeArguments } from './ZRANGE'; +// import { RedisCommandArguments } from '.'; +// import { transformArguments as transformZRangeArguments } from './ZRANGE'; -export { FIRST_KEY_INDEX, IS_READ_ONLY } from './ZRANGE'; +// export { FIRST_KEY_INDEX, IS_READ_ONLY } from './ZRANGE'; -export function transformArguments(...args: Parameters): RedisCommandArguments { - return [ - ...transformZRangeArguments(...args), - 'WITHSCORES' - ]; -} +// export function transformArguments(...args: Parameters): RedisCommandArguments { +// return [ +// ...transformZRangeArguments(...args), +// 'WITHSCORES' +// ]; +// } -export { transformSortedSetWithScoresReply as transformReply } from './generic-transformers'; +// export { transformSortedSetWithScoresReply as transformReply } from './generic-transformers'; diff --git a/packages/client/lib/commands/ZRANK.ts b/packages/client/lib/commands/ZRANK.ts index 33439ea4b5..11184c0a28 100644 --- a/packages/client/lib/commands/ZRANK.ts +++ b/packages/client/lib/commands/ZRANK.ts @@ -1,14 +1,10 @@ -import { RedisCommandArgument, RedisCommandArguments } from '.'; +import { RedisArgument, NumberReply, NullReply, Command } from '../RESP/types'; -export const FIRST_KEY_INDEX = 1; - -export const IS_READ_ONLY = true; - -export function transformArguments( - key: RedisCommandArgument, - member: RedisCommandArgument -): RedisCommandArguments { +export default { + FIRST_KEY_INDEX: 1, + IS_READ_ONLY: true, + transformArguments(key: RedisArgument, member: RedisArgument) { return ['ZRANK', key, member]; -} - -export declare function transformReply(): number | null; + }, + transformReply: undefined as unknown as () => NumberReply | NullReply +} as const satisfies Command; diff --git a/packages/client/lib/commands/ZREM.ts b/packages/client/lib/commands/ZREM.ts index a5e1ff559c..54f55841fc 100644 --- a/packages/client/lib/commands/ZREM.ts +++ b/packages/client/lib/commands/ZREM.ts @@ -1,13 +1,14 @@ -import { RedisCommandArgument, RedisCommandArguments } from '.'; -import { pushVariadicArguments } from './generic-transformers'; +import { RedisArgument, NumberReply, Command } from '../RESP/types'; +import { RedisVariadicArgument, pushVariadicArguments } from './generic-transformers'; -export const FIRST_KEY_INDEX = 1; - -export function transformArguments( - key: RedisCommandArgument, - member: RedisCommandArgument | Array -): RedisCommandArguments { +export default { + FIRST_KEY_INDEX: 1, + IS_READ_ONLY: false, + transformArguments( + key: RedisArgument, + member: RedisVariadicArgument + ) { return pushVariadicArguments(['ZREM', key], member); -} - -export declare function transformReply(): number; + }, + transformReply: undefined as unknown as () => NumberReply +} as const satisfies Command; diff --git a/packages/client/lib/commands/ZREMRANGEBYLEX.ts b/packages/client/lib/commands/ZREMRANGEBYLEX.ts index f1f3908f53..8c7adf0c91 100644 --- a/packages/client/lib/commands/ZREMRANGEBYLEX.ts +++ b/packages/client/lib/commands/ZREMRANGEBYLEX.ts @@ -1,19 +1,19 @@ -import { RedisCommandArgument, RedisCommandArguments } from '.'; -import { transformStringNumberInfinityArgument } from './generic-transformers'; +// import { RedisCommandArgument, RedisCommandArguments } from '.'; +// import { transformStringDoubleArgument } from './generic-transformers'; -export const FIRST_KEY_INDEX = 1; +// export const FIRST_KEY_INDEX = 1; -export function transformArguments( - key: RedisCommandArgument, - min: RedisCommandArgument | number, - max: RedisCommandArgument | number -): RedisCommandArguments { - return [ - 'ZREMRANGEBYLEX', - key, - transformStringNumberInfinityArgument(min), - transformStringNumberInfinityArgument(max) - ]; -} +// export function transformArguments( +// key: RedisCommandArgument, +// min: RedisCommandArgument | number, +// max: RedisCommandArgument | number +// ): RedisCommandArguments { +// return [ +// 'ZREMRANGEBYLEX', +// key, +// transformStringDoubleArgument(min), +// transformStringDoubleArgument(max) +// ]; +// } -export declare function transformReply(): number; +// export declare function transformReply(): number; diff --git a/packages/client/lib/commands/ZREMRANGEBYRANK.ts b/packages/client/lib/commands/ZREMRANGEBYRANK.ts index c50d06e3bf..bfb36cb6cb 100644 --- a/packages/client/lib/commands/ZREMRANGEBYRANK.ts +++ b/packages/client/lib/commands/ZREMRANGEBYRANK.ts @@ -1,13 +1,13 @@ -import { RedisCommandArgument, RedisCommandArguments } from '.'; +// import { RedisCommandArgument, RedisCommandArguments } from '.'; -export const FIRST_KEY_INDEX = 1; +// export const FIRST_KEY_INDEX = 1; -export function transformArguments( - key: RedisCommandArgument, - start: number, - stop: number -): RedisCommandArguments { - return ['ZREMRANGEBYRANK', key, start.toString(), stop.toString()]; -} +// export function transformArguments( +// key: RedisCommandArgument, +// start: number, +// stop: number +// ): RedisCommandArguments { +// return ['ZREMRANGEBYRANK', key, start.toString(), stop.toString()]; +// } -export declare function transformReply(): number; +// export declare function transformReply(): number; diff --git a/packages/client/lib/commands/ZREMRANGEBYSCORE.ts b/packages/client/lib/commands/ZREMRANGEBYSCORE.ts index 12d1eff811..802e42db8d 100644 --- a/packages/client/lib/commands/ZREMRANGEBYSCORE.ts +++ b/packages/client/lib/commands/ZREMRANGEBYSCORE.ts @@ -1,19 +1,19 @@ -import { RedisCommandArgument, RedisCommandArguments } from '.'; -import { transformStringNumberInfinityArgument } from './generic-transformers'; +// import { RedisCommandArgument, RedisCommandArguments } from '.'; +// import { transformStringDoubleArgument } from './generic-transformers'; -export const FIRST_KEY_INDEX = 1; +// export const FIRST_KEY_INDEX = 1; -export function transformArguments( - key: RedisCommandArgument, - min: RedisCommandArgument | number, - max: RedisCommandArgument | number, -): RedisCommandArguments { - return [ - 'ZREMRANGEBYSCORE', - key, - transformStringNumberInfinityArgument(min), - transformStringNumberInfinityArgument(max) - ]; -} +// export function transformArguments( +// key: RedisCommandArgument, +// min: RedisCommandArgument | number, +// max: RedisCommandArgument | number, +// ): RedisCommandArguments { +// return [ +// 'ZREMRANGEBYSCORE', +// key, +// transformStringDoubleArgument(min), +// transformStringDoubleArgument(max) +// ]; +// } -export declare function transformReply(): number; +// export declare function transformReply(): number; diff --git a/packages/client/lib/commands/ZREVRANK.ts b/packages/client/lib/commands/ZREVRANK.ts index b88936c0c9..3bf52d21de 100644 --- a/packages/client/lib/commands/ZREVRANK.ts +++ b/packages/client/lib/commands/ZREVRANK.ts @@ -1,14 +1,10 @@ -import { RedisCommandArgument, RedisCommandArguments } from '.'; +import { NumberReply, NullReply, Command, RedisArgument } from '../RESP/types'; -export const FIRST_KEY_INDEX = 1; - -export const IS_READ_ONLY = true; - -export function transformArguments( - key: RedisCommandArgument, - member: RedisCommandArgument -): RedisCommandArguments { +export default { + FIRST_KEY_INDEX: 1, + IS_READ_ONLY: true, + transformArguments(key: RedisArgument, member: RedisArgument) { return ['ZREVRANK', key, member]; -} - -export declare function transformReply(): number | null; + }, + transformReply: undefined as unknown as () => NumberReply | NullReply +} as const satisfies Command; diff --git a/packages/client/lib/commands/ZSCAN.ts b/packages/client/lib/commands/ZSCAN.ts index 2377b90aac..50c9c5fa9c 100644 --- a/packages/client/lib/commands/ZSCAN.ts +++ b/packages/client/lib/commands/ZSCAN.ts @@ -1,5 +1,6 @@ import { RedisArgument, BlobStringReply, Command } from '../RESP/types'; -import { ScanOptions, ZMember, pushScanArguments, transformNumberInfinityReply } from './generic-transformers'; +import { ScanCommonOptions, pushScanArguments } from './SCAN'; +import { ZMember, transformDoubleReply } from './generic-transformers'; export interface HScanEntry { field: BlobStringReply; @@ -12,7 +13,7 @@ export default { transformArguments( key: RedisArgument, cursor: number, - options?: ScanOptions + options?: ScanCommonOptions ) { return pushScanArguments(['ZSCAN', key], cursor, options); }, @@ -22,7 +23,7 @@ export default { while (i < rawMembers.length) { members.push({ value: rawMembers[i++], - score: transformNumberInfinityReply(rawMembers[i++]) + score: transformDoubleReply(rawMembers[i++]) } satisfies ZMember); } diff --git a/packages/client/lib/commands/ZSCORE.ts b/packages/client/lib/commands/ZSCORE.ts index 118abc1085..b62e6b5305 100644 --- a/packages/client/lib/commands/ZSCORE.ts +++ b/packages/client/lib/commands/ZSCORE.ts @@ -1,14 +1,15 @@ -import { RedisCommandArgument, RedisCommandArguments } from '.'; -export const FIRST_KEY_INDEX = 1; +import { DoubleReply, NullReply, Command, RedisArgument } from '../RESP/types'; +import { transformNullableDoubleReply } from './generic-transformers'; -export const IS_READ_ONLY = true; - -export function transformArguments( - key: RedisCommandArgument, - member: RedisCommandArgument -): RedisCommandArguments { +export default { + FIRST_KEY_INDEX: 1, + IS_READ_ONLY: true, + transformArguments(key: RedisArgument, member: RedisArgument) { return ['ZSCORE', key, member]; -} - -export { transformNumberInfinityNullReply as transformReply } from './generic-transformers'; + }, + transformReply: { + 2: transformNullableDoubleReply, + 3: undefined as unknown as () => DoubleReply | NullReply + } +} as const satisfies Command; diff --git a/packages/client/lib/commands/ZUNION.ts b/packages/client/lib/commands/ZUNION.ts index 3f57c5ba72..537aecc850 100644 --- a/packages/client/lib/commands/ZUNION.ts +++ b/packages/client/lib/commands/ZUNION.ts @@ -1,30 +1,30 @@ -import { RedisCommandArgument, RedisCommandArguments } from '.'; -import { pushVariadicArgument } from './generic-transformers'; +// import { RedisCommandArgument, RedisCommandArguments } from '.'; +// import { pushVariadicArgument } from './generic-transformers'; -export const FIRST_KEY_INDEX = 2; +// export const FIRST_KEY_INDEX = 2; -export const IS_READ_ONLY = true; +// export const IS_READ_ONLY = true; -interface ZUnionOptions { - WEIGHTS?: Array; - AGGREGATE?: 'SUM' | 'MIN' | 'MAX'; -} +// interface ZUnionOptions { +// WEIGHTS?: Array; +// AGGREGATE?: 'SUM' | 'MIN' | 'MAX'; +// } -export function transformArguments( - keys: Array | RedisCommandArgument, - options?: ZUnionOptions -): RedisCommandArguments { - const args = pushVariadicArgument(['ZUNION'], keys); +// export function transformArguments( +// keys: Array | RedisCommandArgument, +// options?: ZUnionOptions +// ): RedisCommandArguments { +// const args = pushVariadicArgument(['ZUNION'], keys); - if (options?.WEIGHTS) { - args.push('WEIGHTS', ...options.WEIGHTS.map(weight => weight.toString())); - } +// if (options?.WEIGHTS) { +// args.push('WEIGHTS', ...options.WEIGHTS.map(weight => weight.toString())); +// } - if (options?.AGGREGATE) { - args.push('AGGREGATE', options.AGGREGATE); - } +// if (options?.AGGREGATE) { +// args.push('AGGREGATE', options.AGGREGATE); +// } - return args; -} +// return args; +// } -export declare function transformReply(): Array; +// export declare function transformReply(): Array; diff --git a/packages/client/lib/commands/ZUNIONSTORE.ts b/packages/client/lib/commands/ZUNIONSTORE.ts index 4795161d00..dab0417fac 100644 --- a/packages/client/lib/commands/ZUNIONSTORE.ts +++ b/packages/client/lib/commands/ZUNIONSTORE.ts @@ -1,29 +1,29 @@ -import { RedisCommandArgument, RedisCommandArguments } from '.'; -import { pushVariadicArgument } from './generic-transformers'; +// import { RedisCommandArgument, RedisCommandArguments } from '.'; +// import { pushVariadicArgument } from './generic-transformers'; -export const FIRST_KEY_INDEX = 1; +// export const FIRST_KEY_INDEX = 1; -interface ZUnionOptions { - WEIGHTS?: Array; - AGGREGATE?: 'SUM' | 'MIN' | 'MAX'; -} +// interface ZUnionOptions { +// WEIGHTS?: Array; +// AGGREGATE?: 'SUM' | 'MIN' | 'MAX'; +// } -export function transformArguments( - destination: RedisCommandArgument, - keys: Array | RedisCommandArgument, - options?: ZUnionOptions -): RedisCommandArguments { - const args = pushVariadicArgument(['ZUNIONSTORE', destination], keys); +// export function transformArguments( +// destination: RedisCommandArgument, +// keys: Array | RedisCommandArgument, +// options?: ZUnionOptions +// ): RedisCommandArguments { +// const args = pushVariadicArgument(['ZUNIONSTORE', destination], keys); - if (options?.WEIGHTS) { - args.push('WEIGHTS', ...options.WEIGHTS.map(weight => weight.toString())); - } +// if (options?.WEIGHTS) { +// args.push('WEIGHTS', ...options.WEIGHTS.map(weight => weight.toString())); +// } - if (options?.AGGREGATE) { - args.push('AGGREGATE', options.AGGREGATE); - } +// if (options?.AGGREGATE) { +// args.push('AGGREGATE', options.AGGREGATE); +// } - return args; -} +// return args; +// } -export declare function transformReply(): number; +// export declare function transformReply(): number; diff --git a/packages/client/lib/commands/ZUNION_WITHSCORES.ts b/packages/client/lib/commands/ZUNION_WITHSCORES.ts index 168cc929ac..54a43da7ec 100644 --- a/packages/client/lib/commands/ZUNION_WITHSCORES.ts +++ b/packages/client/lib/commands/ZUNION_WITHSCORES.ts @@ -1,13 +1,13 @@ -import { RedisCommandArguments } from '.'; -import { transformArguments as transformZUnionArguments } from './ZUNION'; +// import { RedisCommandArguments } from '.'; +// import { transformArguments as transformZUnionArguments } from './ZUNION'; -export { FIRST_KEY_INDEX, IS_READ_ONLY } from './ZUNION'; +// export { FIRST_KEY_INDEX, IS_READ_ONLY } from './ZUNION'; -export function transformArguments(...args: Parameters): RedisCommandArguments { - return [ - ...transformZUnionArguments(...args), - 'WITHSCORES' - ]; -} +// export function transformArguments(...args: Parameters): RedisCommandArguments { +// return [ +// ...transformZUnionArguments(...args), +// 'WITHSCORES' +// ]; +// } -export { transformSortedSetWithScoresReply as transformReply } from './generic-transformers'; +// export { transformSortedSetWithScoresReply as transformReply } from './generic-transformers'; diff --git a/packages/client/lib/commands/generic-transformers.ts b/packages/client/lib/commands/generic-transformers.ts index dd89610718..9a8eef476e 100644 --- a/packages/client/lib/commands/generic-transformers.ts +++ b/packages/client/lib/commands/generic-transformers.ts @@ -1,160 +1,156 @@ -import { RedisCommandArgument, RedisCommandArguments } from '.'; -import { ArrayReply, BlobStringReply, NullReply, RedisArgument } from '../RESP/types'; +import { ArrayReply, BlobStringReply, CommandArguments, DoubleReply, NullReply, RedisArgument, Resp2Reply } from '../RESP/types'; -export function transformBooleanReply(reply: number): boolean { - return reply === 1; -} +// export function transformBooleanReply(reply: number): boolean { +// return reply === 1; +// } -export function transformBooleanArrayReply(reply: Array): Array { - return reply.map(transformBooleanReply); -} +// export function transformBooleanArrayReply(reply: Array): Array { +// return reply.map(transformBooleanReply); +// } export type BitValue = 0 | 1; -export interface ScanOptions { - MATCH?: string; - COUNT?: number; +export function transformDoubleReply(reply: BlobStringReply): number { + switch (reply.toString()) { + case '+inf': + return Infinity; + + case '-inf': + return -Infinity; + + default: + return Number(reply); + } } -export function pushScanArguments( - args: RedisCommandArguments, - cursor: number, - options?: ScanOptions -): RedisCommandArguments { - args.push(cursor.toString()); +export function transformNullableDoubleReply(reply: BlobStringReply | NullReply): number | null { + if (reply === null) return null; - if (options?.MATCH) { - args.push('MATCH', options.MATCH); - } - - if (options?.COUNT) { - args.push('COUNT', options.COUNT.toString()); - } - - return args; + return transformDoubleReply(reply); } -export function transformNumberInfinityReply(reply: BlobStringReply): number { - switch (reply.toString()) { - case '+inf': - return Infinity; - - case '-inf': - return -Infinity; - - default: - return Number(reply); - } +export function transformArrayNullableDoubleReply(reply: Array): Array { + return reply.map(transformNullableDoubleReply); } -export function transformNumberInfinityNullReply(reply: BlobStringReply | NullReply): number | null { - if (reply === null) return null; +export function transformDoubleArgument(num: number): string { + switch (num) { + case Infinity: + return '+inf'; - return transformNumberInfinityReply(reply); + case -Infinity: + return '-inf'; + + default: + return num.toString(); + } } -export function transformNumberInfinityNullArrayReply(reply: Array): Array { - return reply.map(transformNumberInfinityNullReply); -} +export function transformStringDoubleArgument(num: RedisArgument | number): RedisArgument { + if (typeof num !== 'number') return num; -export function transformNumberInfinityArgument(num: number): string { - switch (num) { - case Infinity: - return '+inf'; - - case -Infinity: - return '-inf'; - - default: - return num.toString(); - } -} - -export function transformStringNumberInfinityArgument(num: RedisCommandArgument | number): RedisCommandArgument { - if (typeof num !== 'number') return num; - - return transformNumberInfinityArgument(num); + return transformDoubleArgument(num); } export function transformTuplesReply( - reply: ArrayReply + reply: ArrayReply ): Record { - const message = Object.create(null); + const message = Object.create(null); - for (let i = 0; i < reply.length; i += 2) { - message[reply[i].toString()] = reply[i + 1]; - } + for (let i = 0; i < reply.length; i += 2) { + message[reply[i].toString()] = reply[i + 1]; + } - return message; + return message; } export interface StreamMessageReply { - id: RedisCommandArgument; - message: Record; + id: RedisArgument; + message: Record; } export type StreamMessagesReply = Array; export function transformStreamMessagesReply(reply: Array): StreamMessagesReply { - const messages = []; + const messages = []; - for (const [id, message] of reply) { - messages.push({ - id, - message: transformTuplesReply(message) - }); - } + for (const [id, message] of reply) { + messages.push({ + id, + message: transformTuplesReply(message) + }); + } - return messages; + return messages; } export type StreamsMessagesReply = Array<{ - name: RedisCommandArgument; - messages: StreamMessagesReply; + name: RedisArgument; + messages: StreamMessagesReply; }> | null; export function transformStreamsMessagesReply(reply: Array | null): StreamsMessagesReply | null { - if (reply === null) return null; + if (reply === null) return null; - return reply.map(([name, rawMessages]) => ({ - name, - messages: transformStreamMessagesReply(rawMessages) - })); + return reply.map(([name, rawMessages]) => ({ + name, + messages: transformStreamMessagesReply(rawMessages) + })); } export interface ZMember { - score: number; - value: RedisArgument; + score: number; + value: RedisArgument; } export function transformSortedSetMemberNullReply( - reply: [BlobStringReply, BlobStringReply] | [] + reply: [BlobStringReply, BlobStringReply] | [] ): ZMember | null { - if (!reply.length) return null; + if (!reply.length) return null; - return transformSortedSetMemberReply(reply); + return transformSortedSetMemberReply(reply); } export function transformSortedSetMemberReply( - reply: [BlobStringReply, BlobStringReply] + reply: [BlobStringReply, BlobStringReply] ): ZMember { - return { - value: reply[0], - score: transformNumberInfinityReply(reply[1]) - }; + return { + value: reply[0], + score: transformDoubleReply(reply[1]) + }; } -export function transformSortedSetWithScoresReply(reply: ArrayReply): Array { +export const transformSortedSetReply = { + 2: (reply: ArrayReply) => { const members = []; - for (let i = 0; i < reply.length; i += 2) { - members.push({ - value: reply[i], - score: transformNumberInfinityReply(reply[i + 1]) - }); + members.push({ + value: reply[i], + score: transformDoubleReply(reply[i + 1]) + }); } return members; + }, + 3: (reply: ArrayReply<[BlobStringReply, DoubleReply]>) => { + return reply.map(([value, score]) => ({ + value, + score + })); + } +} + +export function transformSortedSetWithScoresReply(reply: ArrayReply): Array { + const members = []; + + for (let i = 0; i < reply.length; i += 2) { + members.push({ + value: reply[i], + score: transformDoubleReply(reply[i + 1]) + }); + } + + return members; } export type ListSide = 'LEFT' | 'RIGHT'; @@ -162,53 +158,53 @@ export type ListSide = 'LEFT' | 'RIGHT'; export type SortedSetSide = 'MIN' | 'MAX'; export interface LMPopOptions { - COUNT?: number; + COUNT?: number; } export function transformLMPopArguments( - args: RedisCommandArguments, - keys: RedisCommandArgument | Array, - side: ListSide, - options?: LMPopOptions -): RedisCommandArguments { - pushVariadicArgument(args, keys); + args: CommandArguments, + keys: RedisVariadicArgument, + side: ListSide, + options?: LMPopOptions +): CommandArguments { + pushVariadicArgument(args, keys); - args.push(side); + args.push(side); - if (options?.COUNT) { - args.push('COUNT', options.COUNT.toString()); - } + if (options?.COUNT) { + args.push('COUNT', options.COUNT.toString()); + } - return args; + return args; } type GeoCountArgument = number | { - value: number; - ANY?: true + value: number; + ANY?: true }; export function pushGeoCountArgument( - args: RedisCommandArguments, - count: GeoCountArgument | undefined -): RedisCommandArguments { - if (typeof count === 'number') { - args.push('COUNT', count.toString()); - } else if (count) { - args.push('COUNT', count.value.toString()); + args: CommandArguments, + count: GeoCountArgument | undefined +): CommandArguments { + if (typeof count === 'number') { + args.push('COUNT', count.toString()); + } else if (count) { + args.push('COUNT', count.value.toString()); - if (count.ANY) { - args.push('ANY'); - } + if (count.ANY) { + args.push('ANY'); } + } - return args; + return args; } export type GeoUnits = 'm' | 'km' | 'mi' | 'ft'; export interface GeoCoordinates { - longitude: string | number; - latitude: string | number; + longitude: RedisArgument | number; + latitude: RedisArgument | number; } type GeoSearchFromMember = string; @@ -216,456 +212,412 @@ type GeoSearchFromMember = string; export type GeoSearchFrom = GeoSearchFromMember | GeoCoordinates; interface GeoSearchByRadius { - radius: number; - unit: GeoUnits; + radius: number; + unit: GeoUnits; } interface GeoSearchByBox { - width: number; - height: number; - unit: GeoUnits; + width: number; + height: number; + unit: GeoUnits; } export type GeoSearchBy = GeoSearchByRadius | GeoSearchByBox; export interface GeoSearchOptions { - SORT?: 'ASC' | 'DESC'; - COUNT?: GeoCountArgument; + SORT?: 'ASC' | 'DESC'; + COUNT?: GeoCountArgument; } export function pushGeoSearchArguments( - args: RedisCommandArguments, - key: RedisCommandArgument, - from: GeoSearchFrom, - by: GeoSearchBy, - options?: GeoSearchOptions -): RedisCommandArguments { - args.push(key); + args: CommandArguments, + key: RedisArgument, + from: GeoSearchFrom, + by: GeoSearchBy, + options?: GeoSearchOptions +): CommandArguments { + args.push(key); - if (typeof from === 'string') { - args.push('FROMMEMBER', from); - } else { - args.push('FROMLONLAT', from.longitude.toString(), from.latitude.toString()); - } + if (typeof from === 'string') { + args.push('FROMMEMBER', from); + } else { + args.push('FROMLONLAT', from.longitude.toString(), from.latitude.toString()); + } - if ('radius' in by) { - args.push('BYRADIUS', by.radius.toString()); - } else { - args.push('BYBOX', by.width.toString(), by.height.toString()); - } + if ('radius' in by) { + args.push('BYRADIUS', by.radius.toString()); + } else { + args.push('BYBOX', by.width.toString(), by.height.toString()); + } - args.push(by.unit); + args.push(by.unit); - if (options?.SORT) { - args.push(options.SORT); - } + if (options?.SORT) { + args.push(options.SORT); + } - pushGeoCountArgument(args, options?.COUNT); + pushGeoCountArgument(args, options?.COUNT); - return args; + return args; } export function pushGeoRadiusArguments( - args: RedisCommandArguments, - key: RedisCommandArgument, - from: GeoSearchFrom, - radius: number, - unit: GeoUnits, - options?: GeoSearchOptions -): RedisCommandArguments { - args.push(key); - - if (typeof from === 'string') { - args.push(from); - } else { - args.push( - from.longitude.toString(), - from.latitude.toString() - ); - } + args: CommandArguments, + key: RedisArgument, + from: GeoSearchFrom, + radius: number, + unit: GeoUnits, + options?: GeoSearchOptions +): CommandArguments { + args.push(key); + if (typeof from === 'string') { + args.push(from); + } else { args.push( - radius.toString(), - unit + from.longitude.toString(), + from.latitude.toString() ); + } - if (options?.SORT) { - args.push(options.SORT); - } + args.push( + radius.toString(), + unit + ); - pushGeoCountArgument(args, options?.COUNT); + if (options?.SORT) { + args.push(options.SORT); + } - return args; + pushGeoCountArgument(args, options?.COUNT); + + return args; } export interface GeoRadiusStoreOptions extends GeoSearchOptions { - STOREDIST?: boolean; + STOREDIST?: boolean; } export function pushGeoRadiusStoreArguments( - args: RedisCommandArguments, - key: RedisCommandArgument, - from: GeoSearchFrom, - radius: number, - unit: GeoUnits, - destination: RedisCommandArgument, - options?: GeoRadiusStoreOptions -): RedisCommandArguments { - pushGeoRadiusArguments(args, key, from, radius, unit, options); + args: CommandArguments, + key: RedisArgument, + from: GeoSearchFrom, + radius: number, + unit: GeoUnits, + destination: RedisArgument, + options?: GeoRadiusStoreOptions +): CommandArguments { + pushGeoRadiusArguments(args, key, from, radius, unit, options); - if (options?.STOREDIST) { - args.push('STOREDIST', destination); - } else { - args.push('STORE', destination); - } + if (options?.STOREDIST) { + args.push('STOREDIST', destination); + } else { + args.push('STORE', destination); + } - return args; + return args; } export enum GeoReplyWith { - DISTANCE = 'WITHDIST', - HASH = 'WITHHASH', - COORDINATES = 'WITHCOORD' + DISTANCE = 'WITHDIST', + HASH = 'WITHHASH', + COORDINATES = 'WITHCOORD' } export interface GeoReplyWithMember { - member: string; - distance?: number; - hash?: string; - coordinates?: { - longitude: string; - latitude: string; - }; + member: string; + distance?: number; + hash?: string; + coordinates?: { + longitude: string; + latitude: string; + }; } export function transformGeoMembersWithReply(reply: Array>, replyWith: Array): Array { - const replyWithSet = new Set(replyWith); + const replyWithSet = new Set(replyWith); - let index = 0; - const distanceIndex = replyWithSet.has(GeoReplyWith.DISTANCE) && ++index, - hashIndex = replyWithSet.has(GeoReplyWith.HASH) && ++index, - coordinatesIndex = replyWithSet.has(GeoReplyWith.COORDINATES) && ++index; + let index = 0; + const distanceIndex = replyWithSet.has(GeoReplyWith.DISTANCE) && ++index, + hashIndex = replyWithSet.has(GeoReplyWith.HASH) && ++index, + coordinatesIndex = replyWithSet.has(GeoReplyWith.COORDINATES) && ++index; - return reply.map(member => { - const transformedMember: GeoReplyWithMember = { - member: member[0] - }; + return reply.map(member => { + const transformedMember: GeoReplyWithMember = { + member: member[0] + }; - if (distanceIndex) { - transformedMember.distance = member[distanceIndex]; - } + if (distanceIndex) { + transformedMember.distance = member[distanceIndex]; + } - if (hashIndex) { - transformedMember.hash = member[hashIndex]; - } + if (hashIndex) { + transformedMember.hash = member[hashIndex]; + } - if (coordinatesIndex) { - const [longitude, latitude] = member[coordinatesIndex]; - transformedMember.coordinates = { - longitude, - latitude - }; - } + if (coordinatesIndex) { + const [longitude, latitude] = member[coordinatesIndex]; + transformedMember.coordinates = { + longitude, + latitude + }; + } - return transformedMember; - }); + return transformedMember; + }); } export function transformEXAT(EXAT: number | Date): string { - return (typeof EXAT === 'number' ? EXAT : Math.floor(EXAT.getTime() / 1000)).toString(); + return (typeof EXAT === 'number' ? EXAT : Math.floor(EXAT.getTime() / 1000)).toString(); } export function transformPXAT(PXAT: number | Date): string { - return (typeof PXAT === 'number' ? PXAT : PXAT.getTime()).toString(); + return (typeof PXAT === 'number' ? PXAT : PXAT.getTime()).toString(); } export interface EvalOptions { - keys?: Array; - arguments?: Array; + keys?: Array; + arguments?: Array; } export function evalFirstKeyIndex(options?: EvalOptions): string | undefined { - return options?.keys?.[0]; + return options?.keys?.[0]; } export function pushEvalArguments(args: Array, options?: EvalOptions): Array { - if (options?.keys) { - args.push( - options.keys.length.toString(), - ...options.keys - ); - } else { - args.push('0'); - } + if (options?.keys) { + args.push( + options.keys.length.toString(), + ...options.keys + ); + } else { + args.push('0'); + } - if (options?.arguments) { - args.push(...options.arguments); - } + if (options?.arguments) { + args.push(...options.arguments); + } - return args; + return args; } -export function pushVariadicArguments(args: RedisCommandArguments, value: RedisCommandArgument | Array): RedisCommandArguments { - if (Array.isArray(value)) { - // https://github.com/redis/node-redis/pull/2160 - args = args.concat(value); - } else { - args.push(value); - } +export function pushVariadicArguments(args: CommandArguments, value: RedisVariadicArgument): CommandArguments { + if (Array.isArray(value)) { + // https://github.com/redis/node-redis/pull/2160 + args = args.concat(value); + } else { + args.push(value); + } - return args; + return args; } export function pushVariadicNumberArguments( - args: RedisCommandArguments, - value: number | Array -): RedisCommandArguments { - if (Array.isArray(value)) { - for (const item of value) { - args.push(item.toString()); - } - } else { - args.push(value.toString()); + args: CommandArguments, + value: number | Array +): CommandArguments { + if (Array.isArray(value)) { + for (const item of value) { + args.push(item.toString()); } + } else { + args.push(value.toString()); + } - return args; + return args; } export type RedisVariadicArgument = RedisArgument | Array; export function pushVariadicArgument( - args: Array, - value: RedisVariadicArgument -): RedisCommandArguments { - if (Array.isArray(value)) { - args.push(value.length.toString(), ...value); - } else { - args.push('1', value); - } + args: Array, + value: RedisVariadicArgument +): CommandArguments { + if (Array.isArray(value)) { + args.push(value.length.toString(), ...value); + } else { + args.push('1', value); + } - return args; + return args; } export function pushOptionalVariadicArgument( - args: RedisCommandArguments, - name: RedisCommandArgument, - value: undefined | RedisCommandArgument | Array -): RedisCommandArguments { - if (value === undefined) return args; + args: CommandArguments, + name: RedisArgument, + value?: RedisVariadicArgument +): CommandArguments { + if (value === undefined) return args; - args.push(name); + args.push(name); - return pushVariadicArgument(args, value); + return pushVariadicArgument(args, value); } export enum CommandFlags { - WRITE = 'write', // command may result in modifications - READONLY = 'readonly', // command will never modify keys - DENYOOM = 'denyoom', // reject command if currently out of memory - ADMIN = 'admin', // server admin command - PUBSUB = 'pubsub', // pubsub-related command - NOSCRIPT = 'noscript', // deny this command from scripts - RANDOM = 'random', // command has random results, dangerous for scripts - SORT_FOR_SCRIPT = 'sort_for_script', // if called from script, sort output - LOADING = 'loading', // allow command while database is loading - STALE = 'stale', // allow command while replica has stale data - SKIP_MONITOR = 'skip_monitor', // do not show this command in MONITOR - ASKING = 'asking', // cluster related - accept even if importing - FAST = 'fast', // command operates in constant or log(N) time. Used for latency monitoring. - MOVABLEKEYS = 'movablekeys' // keys have no pre-determined position. You must discover keys yourself. + WRITE = 'write', // command may result in modifications + READONLY = 'readonly', // command will never modify keys + DENYOOM = 'denyoom', // reject command if currently out of memory + ADMIN = 'admin', // server admin command + PUBSUB = 'pubsub', // pubsub-related command + NOSCRIPT = 'noscript', // deny this command from scripts + RANDOM = 'random', // command has random results, dangerous for scripts + SORT_FOR_SCRIPT = 'sort_for_script', // if called from script, sort output + LOADING = 'loading', // allow command while database is loading + STALE = 'stale', // allow command while replica has stale data + SKIP_MONITOR = 'skip_monitor', // do not show this command in MONITOR + ASKING = 'asking', // cluster related - accept even if importing + FAST = 'fast', // command operates in constant or log(N) time. Used for latency monitoring. + MOVABLEKEYS = 'movablekeys' // keys have no pre-determined position. You must discover keys yourself. } export enum CommandCategories { - KEYSPACE = '@keyspace', - READ = '@read', - WRITE = '@write', - SET = '@set', - SORTEDSET = '@sortedset', - LIST = '@list', - HASH = '@hash', - STRING = '@string', - BITMAP = '@bitmap', - HYPERLOGLOG = '@hyperloglog', - GEO = '@geo', - STREAM = '@stream', - PUBSUB = '@pubsub', - ADMIN = '@admin', - FAST = '@fast', - SLOW = '@slow', - BLOCKING = '@blocking', - DANGEROUS = '@dangerous', - CONNECTION = '@connection', - TRANSACTION = '@transaction', - SCRIPTING = '@scripting' + KEYSPACE = '@keyspace', + READ = '@read', + WRITE = '@write', + SET = '@set', + SORTEDSET = '@sortedset', + LIST = '@list', + HASH = '@hash', + STRING = '@string', + BITMAP = '@bitmap', + HYPERLOGLOG = '@hyperloglog', + GEO = '@geo', + STREAM = '@stream', + PUBSUB = '@pubsub', + ADMIN = '@admin', + FAST = '@fast', + SLOW = '@slow', + BLOCKING = '@blocking', + DANGEROUS = '@dangerous', + CONNECTION = '@connection', + TRANSACTION = '@transaction', + SCRIPTING = '@scripting' } export type CommandRawReply = [ - name: string, - arity: number, - flags: Array, - firstKeyIndex: number, - lastKeyIndex: number, - step: number, - categories: Array + name: string, + arity: number, + flags: Array, + firstKeyIndex: number, + lastKeyIndex: number, + step: number, + categories: Array ]; export type CommandReply = { - name: string, - arity: number, - flags: Set, - firstKeyIndex: number, - lastKeyIndex: number, - step: number, - categories: Set + name: string, + arity: number, + flags: Set, + firstKeyIndex: number, + lastKeyIndex: number, + step: number, + categories: Set }; export function transformCommandReply( - this: void, - [name, arity, flags, firstKeyIndex, lastKeyIndex, step, categories]: CommandRawReply + this: void, + [name, arity, flags, firstKeyIndex, lastKeyIndex, step, categories]: CommandRawReply ): CommandReply { - return { - name, - arity, - flags: new Set(flags), - firstKeyIndex, - lastKeyIndex, - step, - categories: new Set(categories) - }; + return { + name, + arity, + flags: new Set(flags), + firstKeyIndex, + lastKeyIndex, + step, + categories: new Set(categories) + }; } export enum RedisFunctionFlags { - NO_WRITES = 'no-writes', - ALLOW_OOM = 'allow-oom', - ALLOW_STALE = 'allow-stale', - NO_CLUSTER = 'no-cluster' + NO_WRITES = 'no-writes', + ALLOW_OOM = 'allow-oom', + ALLOW_STALE = 'allow-stale', + NO_CLUSTER = 'no-cluster' } export type FunctionListRawItemReply = [ - 'library_name', + 'library_name', + string, + 'engine', + string, + 'functions', + Array<[ + 'name', string, - 'engine', - string, - 'functions', - Array<[ - 'name', - string, - 'description', - string | null, - 'flags', - Array - ]> + 'description', + string | null, + 'flags', + Array + ]> ]; export interface FunctionListItemReply { - libraryName: string; - engine: string; - functions: Array<{ - name: string; - description: string | null; - flags: Array; - }>; + libraryName: string; + engine: string; + functions: Array<{ + name: string; + description: string | null; + flags: Array; + }>; } export function transformFunctionListItemReply(reply: FunctionListRawItemReply): FunctionListItemReply { - return { - libraryName: reply[1], - engine: reply[3], - functions: reply[5].map(fn => ({ - name: fn[1], - description: fn[3], - flags: fn[5] - })) - }; -} - -export interface SortOptions { - BY?: string; - LIMIT?: { - offset: number; - count: number; - }, - GET?: string | Array; - DIRECTION?: 'ASC' | 'DESC'; - ALPHA?: true; -} - -export function pushSortArguments( - args: RedisCommandArguments, - options?: SortOptions -): RedisCommandArguments { - if (options?.BY) { - args.push('BY', options.BY); - } - - if (options?.LIMIT) { - args.push( - 'LIMIT', - options.LIMIT.offset.toString(), - options.LIMIT.count.toString() - ); - } - - if (options?.GET) { - for (const pattern of (typeof options.GET === 'string' ? [options.GET] : options.GET)) { - args.push('GET', pattern); - } - } - - if (options?.DIRECTION) { - args.push(options.DIRECTION); - } - - if (options?.ALPHA) { - args.push('ALPHA'); - } - - return args; + return { + libraryName: reply[1], + engine: reply[3], + functions: reply[5].map(fn => ({ + name: fn[1], + description: fn[3], + flags: fn[5] + })) + }; } export interface SlotRange { - start: number; - end: number; + start: number; + end: number; } function pushSlotRangeArguments( - args: RedisCommandArguments, - range: SlotRange + args: CommandArguments, + range: SlotRange ): void { - args.push( - range.start.toString(), - range.end.toString() - ); + args.push( + range.start.toString(), + range.end.toString() + ); } export function pushSlotRangesArguments( - args: RedisCommandArguments, - ranges: SlotRange | Array -): RedisCommandArguments { - if (Array.isArray(ranges)) { - for (const range of ranges) { - pushSlotRangeArguments(args, range); - } - } else { - pushSlotRangeArguments(args, ranges); + args: CommandArguments, + ranges: SlotRange | Array +): CommandArguments { + if (Array.isArray(ranges)) { + for (const range of ranges) { + pushSlotRangeArguments(args, range); } + } else { + pushSlotRangeArguments(args, ranges); + } - return args; + return args; } export type RawRangeReply = [ - start: number, - end: number + start: number, + end: number ]; export interface RangeReply { - start: number; - end: number; + start: number; + end: number; } export function transformRangeReply([start, end]: RawRangeReply): RangeReply { - return { - start, - end - }; + return { + start, + end + }; } diff --git a/packages/client/package.json b/packages/client/package.json index 7cd7c758d2..dc311791f9 100644 --- a/packages/client/package.json +++ b/packages/client/package.json @@ -8,7 +8,7 @@ "dist/" ], "scripts": { - "test": "nyc -r text-summary -r lcov mocha -r source-map-support/register -r ts-node/register './lib/commands/PING.spec.ts' './lib/commands/APPEND.spec.ts'", + "test": "nyc -r text-summary -r lcov mocha -r source-map-support/register -r ts-node/register './lib/**/*.spec.ts'", "build": "tsc", "lint": "eslint ./*.ts ./lib/**/*.ts", "documentation": "typedoc"