js-redis-server 0.0.1 → 0.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (470) hide show
  1. package/README.md +235 -30
  2. package/dist/cli.d.ts +1 -0
  3. package/dist/cli.d.ts.map +1 -1
  4. package/dist/cli.js +191 -0
  5. package/dist/cli.js.map +1 -0
  6. package/dist/cluster.d.ts +30 -0
  7. package/dist/cluster.d.ts.map +1 -0
  8. package/dist/cluster.js +131 -0
  9. package/dist/cluster.js.map +1 -0
  10. package/dist/commands/cluster.d.ts +8 -0
  11. package/dist/commands/cluster.d.ts.map +1 -0
  12. package/dist/commands/cluster.js +190 -0
  13. package/dist/commands/cluster.js.map +1 -0
  14. package/dist/commands/command.d.ts +6 -0
  15. package/dist/commands/command.d.ts.map +1 -0
  16. package/dist/commands/command.js +381 -0
  17. package/dist/commands/command.js.map +1 -0
  18. package/dist/commands/connection.d.ts +24 -0
  19. package/dist/commands/connection.d.ts.map +1 -0
  20. package/dist/commands/connection.js +406 -0
  21. package/dist/commands/connection.js.map +1 -0
  22. package/dist/commands/hashes.d.ts +64 -0
  23. package/dist/commands/hashes.d.ts.map +1 -0
  24. package/dist/commands/hashes.js +276 -0
  25. package/dist/commands/hashes.js.map +1 -0
  26. package/dist/commands/helpers.d.ts +16 -0
  27. package/dist/commands/helpers.d.ts.map +1 -0
  28. package/dist/commands/helpers.js +77 -0
  29. package/dist/commands/helpers.js.map +1 -0
  30. package/dist/commands/index.d.ts +23 -0
  31. package/dist/commands/index.d.ts.map +1 -0
  32. package/dist/commands/index.js +177 -0
  33. package/dist/commands/index.js.map +1 -0
  34. package/dist/commands/introspection.d.ts +17 -0
  35. package/dist/commands/introspection.d.ts.map +1 -0
  36. package/dist/commands/introspection.js +54 -0
  37. package/dist/commands/introspection.js.map +1 -0
  38. package/dist/commands/keys.d.ts +47 -0
  39. package/dist/commands/keys.d.ts.map +1 -0
  40. package/dist/commands/keys.js +238 -0
  41. package/dist/commands/keys.js.map +1 -0
  42. package/dist/commands/lists.d.ts +60 -0
  43. package/dist/commands/lists.d.ts.map +1 -0
  44. package/dist/commands/lists.js +333 -0
  45. package/dist/commands/lists.js.map +1 -0
  46. package/dist/commands/scan.d.ts +24 -0
  47. package/dist/commands/scan.d.ts.map +1 -0
  48. package/dist/commands/scan.js +316 -0
  49. package/dist/commands/scan.js.map +1 -0
  50. package/dist/commands/scripts.d.ts +22 -0
  51. package/dist/commands/scripts.d.ts.map +1 -0
  52. package/dist/commands/scripts.js +195 -0
  53. package/dist/commands/scripts.js.map +1 -0
  54. package/dist/commands/sets.d.ts +61 -0
  55. package/dist/commands/sets.d.ts.map +1 -0
  56. package/dist/commands/sets.js +411 -0
  57. package/dist/commands/sets.js.map +1 -0
  58. package/dist/commands/strings.d.ts +91 -0
  59. package/dist/commands/strings.d.ts.map +1 -0
  60. package/dist/commands/strings.js +537 -0
  61. package/dist/commands/strings.js.map +1 -0
  62. package/dist/commands/transactions.d.ts +9 -0
  63. package/dist/commands/transactions.d.ts.map +1 -0
  64. package/dist/commands/transactions.js +89 -0
  65. package/dist/commands/transactions.js.map +1 -0
  66. package/dist/commands/zsets.d.ts +72 -0
  67. package/dist/commands/zsets.d.ts.map +1 -0
  68. package/dist/commands/zsets.js +360 -0
  69. package/dist/commands/zsets.js.map +1 -0
  70. package/dist/core/client-session.d.ts +60 -0
  71. package/dist/core/client-session.d.ts.map +1 -0
  72. package/dist/core/client-session.js +210 -0
  73. package/dist/core/client-session.js.map +1 -0
  74. package/dist/core/command-definition.d.ts +64 -0
  75. package/dist/core/command-definition.d.ts.map +1 -0
  76. package/dist/core/command-definition.js +10 -0
  77. package/dist/core/command-definition.js.map +1 -0
  78. package/dist/core/command-executor.d.ts +24 -0
  79. package/dist/core/command-executor.d.ts.map +1 -0
  80. package/dist/core/command-executor.js +168 -0
  81. package/dist/core/command-executor.js.map +1 -0
  82. package/dist/core/command-registry.d.ts +16 -0
  83. package/dist/core/command-registry.d.ts.map +1 -0
  84. package/dist/core/command-registry.js +35 -0
  85. package/dist/core/command-registry.js.map +1 -0
  86. package/dist/core/command-schema.d.ts +40 -0
  87. package/dist/core/command-schema.d.ts.map +1 -0
  88. package/dist/core/command-schema.js +188 -0
  89. package/dist/core/command-schema.js.map +1 -0
  90. package/dist/core/execution-policies/cluster-policy.d.ts +8 -0
  91. package/dist/core/execution-policies/cluster-policy.d.ts.map +1 -0
  92. package/dist/core/execution-policies/cluster-policy.js +61 -0
  93. package/dist/core/execution-policies/cluster-policy.js.map +1 -0
  94. package/dist/core/execution-policies/index.d.ts +16 -0
  95. package/dist/core/execution-policies/index.d.ts.map +1 -0
  96. package/dist/core/execution-policies/index.js +8 -0
  97. package/dist/core/execution-policies/index.js.map +1 -0
  98. package/dist/core/execution-policies/transaction-policy.d.ts +3 -0
  99. package/dist/core/execution-policies/transaction-policy.d.ts.map +1 -0
  100. package/dist/core/execution-policies/transaction-policy.js +25 -0
  101. package/dist/core/execution-policies/transaction-policy.js.map +1 -0
  102. package/dist/core/lua-runtime.d.ts +15 -0
  103. package/dist/core/lua-runtime.d.ts.map +1 -0
  104. package/dist/core/lua-runtime.js +173 -0
  105. package/dist/core/lua-runtime.js.map +1 -0
  106. package/dist/core/redis-context.d.ts +41 -0
  107. package/dist/core/redis-context.d.ts.map +1 -0
  108. package/dist/core/redis-context.js +46 -0
  109. package/dist/core/redis-context.js.map +1 -0
  110. package/dist/core/redis-error.d.ts +83 -0
  111. package/dist/core/redis-error.d.ts.map +1 -0
  112. package/dist/core/redis-error.js +186 -0
  113. package/dist/core/redis-error.js.map +1 -0
  114. package/dist/core/redis-result.d.ts +15 -0
  115. package/dist/core/redis-result.d.ts.map +1 -0
  116. package/dist/core/redis-result.js +26 -0
  117. package/dist/core/redis-result.js.map +1 -0
  118. package/dist/core/redis-value.d.ts +61 -0
  119. package/dist/core/redis-value.d.ts.map +1 -0
  120. package/dist/core/redis-value.js +41 -0
  121. package/dist/core/redis-value.js.map +1 -0
  122. package/dist/core/resp-encoder.d.ts +9 -0
  123. package/dist/core/resp-encoder.d.ts.map +1 -0
  124. package/dist/core/resp-encoder.js +159 -0
  125. package/dist/core/resp-encoder.js.map +1 -0
  126. package/dist/core/response-stream.d.ts +17 -0
  127. package/dist/core/response-stream.d.ts.map +1 -0
  128. package/dist/core/response-stream.js +10 -0
  129. package/dist/core/response-stream.js.map +1 -0
  130. package/dist/core/transports/connection-transport.d.ts +12 -0
  131. package/dist/core/transports/connection-transport.d.ts.map +1 -0
  132. package/dist/core/transports/connection-transport.js +3 -0
  133. package/dist/core/transports/connection-transport.js.map +1 -0
  134. package/dist/core/transports/in-memory-connection-transport.d.ts +28 -0
  135. package/dist/core/transports/in-memory-connection-transport.d.ts.map +1 -0
  136. package/dist/core/transports/in-memory-connection-transport.js +111 -0
  137. package/dist/core/transports/in-memory-connection-transport.js.map +1 -0
  138. package/dist/core/transports/resp2/decoder.d.ts +15 -0
  139. package/dist/core/transports/resp2/decoder.d.ts.map +1 -0
  140. package/dist/core/transports/resp2/decoder.js +209 -0
  141. package/dist/core/transports/resp2/decoder.js.map +1 -0
  142. package/dist/core/transports/resp2/index.d.ts +2 -12
  143. package/dist/core/transports/resp2/index.d.ts.map +1 -1
  144. package/dist/core/transports/resp2/index.js +9 -0
  145. package/dist/core/transports/resp2/index.js.map +1 -0
  146. package/dist/core/transports/resp2/server.d.ts +26 -0
  147. package/dist/core/transports/resp2/server.d.ts.map +1 -0
  148. package/dist/core/transports/resp2/server.js +83 -0
  149. package/dist/core/transports/resp2/server.js.map +1 -0
  150. package/dist/core/transports/resp2/session-adapter.d.ts +24 -0
  151. package/dist/core/transports/resp2/session-adapter.d.ts.map +1 -0
  152. package/dist/core/transports/resp2/session-adapter.js +86 -0
  153. package/dist/core/transports/resp2/session-adapter.js.map +1 -0
  154. package/dist/core/transports/socket-connection-transport.d.ts +20 -0
  155. package/dist/core/transports/socket-connection-transport.d.ts.map +1 -0
  156. package/dist/core/transports/socket-connection-transport.js +64 -0
  157. package/dist/core/transports/socket-connection-transport.js.map +1 -0
  158. package/dist/core/turn-queue.d.ts +15 -0
  159. package/dist/core/turn-queue.d.ts.map +1 -0
  160. package/dist/core/turn-queue.js +51 -0
  161. package/dist/core/turn-queue.js.map +1 -0
  162. package/dist/index.d.ts +35 -347
  163. package/dist/index.d.ts.map +1 -1
  164. package/dist/index.js +141 -0
  165. package/dist/index.js.map +1 -0
  166. package/dist/logger.d.ts +6 -0
  167. package/dist/logger.d.ts.map +1 -0
  168. package/dist/logger.js +3 -0
  169. package/dist/logger.js.map +1 -0
  170. package/dist/state/cluster-topology.d.ts +30 -0
  171. package/dist/state/cluster-topology.d.ts.map +1 -0
  172. package/dist/state/cluster-topology.js +88 -0
  173. package/dist/state/cluster-topology.js.map +1 -0
  174. package/dist/state/data-types.d.ts +40 -0
  175. package/dist/state/data-types.d.ts.map +1 -0
  176. package/dist/state/data-types.js +67 -0
  177. package/dist/state/data-types.js.map +1 -0
  178. package/dist/state/database.d.ts +44 -0
  179. package/dist/state/database.d.ts.map +1 -0
  180. package/dist/state/database.js +116 -0
  181. package/dist/state/database.js.map +1 -0
  182. package/dist/state/index.d.ts +14 -0
  183. package/dist/state/index.d.ts.map +1 -0
  184. package/dist/state/index.js +27 -0
  185. package/dist/state/index.js.map +1 -0
  186. package/dist/state/keyspace.d.ts +45 -0
  187. package/dist/state/keyspace.d.ts.map +1 -0
  188. package/dist/state/keyspace.js +180 -0
  189. package/dist/state/keyspace.js.map +1 -0
  190. package/dist/state/mutation-events.d.ts +37 -0
  191. package/dist/state/mutation-events.d.ts.map +1 -0
  192. package/dist/state/mutation-events.js +74 -0
  193. package/dist/state/mutation-events.js.map +1 -0
  194. package/dist/state/pubsub-broker.d.ts +4 -0
  195. package/dist/state/pubsub-broker.d.ts.map +1 -0
  196. package/dist/state/pubsub-broker.js +10 -0
  197. package/dist/state/pubsub-broker.js.map +1 -0
  198. package/dist/state/script-cache.d.ts +10 -0
  199. package/dist/state/script-cache.d.ts.map +1 -0
  200. package/dist/state/script-cache.js +33 -0
  201. package/dist/state/script-cache.js.map +1 -0
  202. package/dist/state/server-state.d.ts +24 -0
  203. package/dist/state/server-state.d.ts.map +1 -0
  204. package/dist/state/server-state.js +42 -0
  205. package/dist/state/server-state.js.map +1 -0
  206. package/package.json +18 -22
  207. package/dist/cli.mjs +0 -5923
  208. package/dist/cli.mjs.map +0 -1
  209. package/dist/commanders/custom/base-commander.d.ts +0 -19
  210. package/dist/commanders/custom/base-commander.d.ts.map +0 -1
  211. package/dist/commanders/custom/cluster-router.d.ts +0 -57
  212. package/dist/commanders/custom/cluster-router.d.ts.map +0 -1
  213. package/dist/commanders/custom/clusterCommander.d.ts +0 -39
  214. package/dist/commanders/custom/clusterCommander.d.ts.map +0 -1
  215. package/dist/commanders/custom/commander.d.ts +0 -12
  216. package/dist/commanders/custom/commander.d.ts.map +0 -1
  217. package/dist/commanders/custom/commands/metadata.d.ts +0 -101
  218. package/dist/commanders/custom/commands/metadata.d.ts.map +0 -1
  219. package/dist/commanders/custom/commands/redis/client/clientSetName.d.ts +0 -8
  220. package/dist/commanders/custom/commands/redis/client/clientSetName.d.ts.map +0 -1
  221. package/dist/commanders/custom/commands/redis/client/index.d.ts +0 -9
  222. package/dist/commanders/custom/commands/redis/client/index.d.ts.map +0 -1
  223. package/dist/commanders/custom/commands/redis/cluster/clusterInfo.d.ts +0 -7
  224. package/dist/commanders/custom/commands/redis/cluster/clusterInfo.d.ts.map +0 -1
  225. package/dist/commanders/custom/commands/redis/cluster/clusterNodes.d.ts +0 -7
  226. package/dist/commanders/custom/commands/redis/cluster/clusterNodes.d.ts.map +0 -1
  227. package/dist/commanders/custom/commands/redis/cluster/clusterShards.d.ts +0 -7
  228. package/dist/commanders/custom/commands/redis/cluster/clusterShards.d.ts.map +0 -1
  229. package/dist/commanders/custom/commands/redis/cluster/clusterSlots.d.ts +0 -7
  230. package/dist/commanders/custom/commands/redis/cluster/clusterSlots.d.ts.map +0 -1
  231. package/dist/commanders/custom/commands/redis/cluster/index.d.ts +0 -8
  232. package/dist/commanders/custom/commands/redis/cluster/index.d.ts.map +0 -1
  233. package/dist/commanders/custom/commands/redis/command/index.d.ts +0 -6
  234. package/dist/commanders/custom/commands/redis/command/index.d.ts.map +0 -1
  235. package/dist/commanders/custom/commands/redis/data/hashes/hdel.d.ts +0 -9
  236. package/dist/commanders/custom/commands/redis/data/hashes/hdel.d.ts.map +0 -1
  237. package/dist/commanders/custom/commands/redis/data/hashes/hexists.d.ts +0 -8
  238. package/dist/commanders/custom/commands/redis/data/hashes/hexists.d.ts.map +0 -1
  239. package/dist/commanders/custom/commands/redis/data/hashes/hget.d.ts +0 -8
  240. package/dist/commanders/custom/commands/redis/data/hashes/hget.d.ts.map +0 -1
  241. package/dist/commanders/custom/commands/redis/data/hashes/hgetall.d.ts +0 -5
  242. package/dist/commanders/custom/commands/redis/data/hashes/hgetall.d.ts.map +0 -1
  243. package/dist/commanders/custom/commands/redis/data/hashes/hincrby.d.ts +0 -9
  244. package/dist/commanders/custom/commands/redis/data/hashes/hincrby.d.ts.map +0 -1
  245. package/dist/commanders/custom/commands/redis/data/hashes/hincrbyfloat.d.ts +0 -9
  246. package/dist/commanders/custom/commands/redis/data/hashes/hincrbyfloat.d.ts.map +0 -1
  247. package/dist/commanders/custom/commands/redis/data/hashes/hkeys.d.ts +0 -5
  248. package/dist/commanders/custom/commands/redis/data/hashes/hkeys.d.ts.map +0 -1
  249. package/dist/commanders/custom/commands/redis/data/hashes/hlen.d.ts +0 -5
  250. package/dist/commanders/custom/commands/redis/data/hashes/hlen.d.ts.map +0 -1
  251. package/dist/commanders/custom/commands/redis/data/hashes/hmget.d.ts +0 -9
  252. package/dist/commanders/custom/commands/redis/data/hashes/hmget.d.ts.map +0 -1
  253. package/dist/commanders/custom/commands/redis/data/hashes/hmset.d.ts +0 -10
  254. package/dist/commanders/custom/commands/redis/data/hashes/hmset.d.ts.map +0 -1
  255. package/dist/commanders/custom/commands/redis/data/hashes/hset.d.ts +0 -10
  256. package/dist/commanders/custom/commands/redis/data/hashes/hset.d.ts.map +0 -1
  257. package/dist/commanders/custom/commands/redis/data/hashes/hvals.d.ts +0 -5
  258. package/dist/commanders/custom/commands/redis/data/hashes/hvals.d.ts.map +0 -1
  259. package/dist/commanders/custom/commands/redis/data/hashes/index.d.ts +0 -13
  260. package/dist/commanders/custom/commands/redis/data/hashes/index.d.ts.map +0 -1
  261. package/dist/commanders/custom/commands/redis/data/index.d.ts +0 -7
  262. package/dist/commanders/custom/commands/redis/data/index.d.ts.map +0 -1
  263. package/dist/commanders/custom/commands/redis/data/keys/dbsize.d.ts +0 -5
  264. package/dist/commanders/custom/commands/redis/data/keys/dbsize.d.ts.map +0 -1
  265. package/dist/commanders/custom/commands/redis/data/keys/del.d.ts +0 -8
  266. package/dist/commanders/custom/commands/redis/data/keys/del.d.ts.map +0 -1
  267. package/dist/commanders/custom/commands/redis/data/keys/exists.d.ts +0 -8
  268. package/dist/commanders/custom/commands/redis/data/keys/exists.d.ts.map +0 -1
  269. package/dist/commanders/custom/commands/redis/data/keys/expire.d.ts +0 -8
  270. package/dist/commanders/custom/commands/redis/data/keys/expire.d.ts.map +0 -1
  271. package/dist/commanders/custom/commands/redis/data/keys/expireat.d.ts +0 -8
  272. package/dist/commanders/custom/commands/redis/data/keys/expireat.d.ts.map +0 -1
  273. package/dist/commanders/custom/commands/redis/data/keys/flushall.d.ts +0 -5
  274. package/dist/commanders/custom/commands/redis/data/keys/flushall.d.ts.map +0 -1
  275. package/dist/commanders/custom/commands/redis/data/keys/flushdb.d.ts +0 -5
  276. package/dist/commanders/custom/commands/redis/data/keys/flushdb.d.ts.map +0 -1
  277. package/dist/commanders/custom/commands/redis/data/keys/index.d.ts +0 -11
  278. package/dist/commanders/custom/commands/redis/data/keys/index.d.ts.map +0 -1
  279. package/dist/commanders/custom/commands/redis/data/keys/pttl.d.ts +0 -5
  280. package/dist/commanders/custom/commands/redis/data/keys/pttl.d.ts.map +0 -1
  281. package/dist/commanders/custom/commands/redis/data/keys/ttl.d.ts +0 -5
  282. package/dist/commanders/custom/commands/redis/data/keys/ttl.d.ts.map +0 -1
  283. package/dist/commanders/custom/commands/redis/data/keys/type.d.ts +0 -5
  284. package/dist/commanders/custom/commands/redis/data/keys/type.d.ts.map +0 -1
  285. package/dist/commanders/custom/commands/redis/data/lists/index.d.ts +0 -11
  286. package/dist/commanders/custom/commands/redis/data/lists/index.d.ts.map +0 -1
  287. package/dist/commanders/custom/commands/redis/data/lists/lindex.d.ts +0 -8
  288. package/dist/commanders/custom/commands/redis/data/lists/lindex.d.ts.map +0 -1
  289. package/dist/commanders/custom/commands/redis/data/lists/llen.d.ts +0 -5
  290. package/dist/commanders/custom/commands/redis/data/lists/llen.d.ts.map +0 -1
  291. package/dist/commanders/custom/commands/redis/data/lists/lpop.d.ts +0 -5
  292. package/dist/commanders/custom/commands/redis/data/lists/lpop.d.ts.map +0 -1
  293. package/dist/commanders/custom/commands/redis/data/lists/lpush.d.ts +0 -9
  294. package/dist/commanders/custom/commands/redis/data/lists/lpush.d.ts.map +0 -1
  295. package/dist/commanders/custom/commands/redis/data/lists/lrange.d.ts +0 -9
  296. package/dist/commanders/custom/commands/redis/data/lists/lrange.d.ts.map +0 -1
  297. package/dist/commanders/custom/commands/redis/data/lists/lrem.d.ts +0 -9
  298. package/dist/commanders/custom/commands/redis/data/lists/lrem.d.ts.map +0 -1
  299. package/dist/commanders/custom/commands/redis/data/lists/lset.d.ts +0 -9
  300. package/dist/commanders/custom/commands/redis/data/lists/lset.d.ts.map +0 -1
  301. package/dist/commanders/custom/commands/redis/data/lists/ltrim.d.ts +0 -9
  302. package/dist/commanders/custom/commands/redis/data/lists/ltrim.d.ts.map +0 -1
  303. package/dist/commanders/custom/commands/redis/data/lists/rpop.d.ts +0 -5
  304. package/dist/commanders/custom/commands/redis/data/lists/rpop.d.ts.map +0 -1
  305. package/dist/commanders/custom/commands/redis/data/lists/rpush.d.ts +0 -9
  306. package/dist/commanders/custom/commands/redis/data/lists/rpush.d.ts.map +0 -1
  307. package/dist/commanders/custom/commands/redis/data/sets/index.d.ts +0 -12
  308. package/dist/commanders/custom/commands/redis/data/sets/index.d.ts.map +0 -1
  309. package/dist/commanders/custom/commands/redis/data/sets/sadd.d.ts +0 -9
  310. package/dist/commanders/custom/commands/redis/data/sets/sadd.d.ts.map +0 -1
  311. package/dist/commanders/custom/commands/redis/data/sets/scard.d.ts +0 -5
  312. package/dist/commanders/custom/commands/redis/data/sets/scard.d.ts.map +0 -1
  313. package/dist/commanders/custom/commands/redis/data/sets/sdiff.d.ts +0 -8
  314. package/dist/commanders/custom/commands/redis/data/sets/sdiff.d.ts.map +0 -1
  315. package/dist/commanders/custom/commands/redis/data/sets/sinter.d.ts +0 -8
  316. package/dist/commanders/custom/commands/redis/data/sets/sinter.d.ts.map +0 -1
  317. package/dist/commanders/custom/commands/redis/data/sets/sismember.d.ts +0 -8
  318. package/dist/commanders/custom/commands/redis/data/sets/sismember.d.ts.map +0 -1
  319. package/dist/commanders/custom/commands/redis/data/sets/smembers.d.ts +0 -5
  320. package/dist/commanders/custom/commands/redis/data/sets/smembers.d.ts.map +0 -1
  321. package/dist/commanders/custom/commands/redis/data/sets/smove.d.ts +0 -9
  322. package/dist/commanders/custom/commands/redis/data/sets/smove.d.ts.map +0 -1
  323. package/dist/commanders/custom/commands/redis/data/sets/spop.d.ts +0 -5
  324. package/dist/commanders/custom/commands/redis/data/sets/spop.d.ts.map +0 -1
  325. package/dist/commanders/custom/commands/redis/data/sets/srandmember.d.ts +0 -8
  326. package/dist/commanders/custom/commands/redis/data/sets/srandmember.d.ts.map +0 -1
  327. package/dist/commanders/custom/commands/redis/data/sets/srem.d.ts +0 -9
  328. package/dist/commanders/custom/commands/redis/data/sets/srem.d.ts.map +0 -1
  329. package/dist/commanders/custom/commands/redis/data/sets/sunion.d.ts +0 -8
  330. package/dist/commanders/custom/commands/redis/data/sets/sunion.d.ts.map +0 -1
  331. package/dist/commanders/custom/commands/redis/data/strings/append.d.ts +0 -8
  332. package/dist/commanders/custom/commands/redis/data/strings/append.d.ts.map +0 -1
  333. package/dist/commanders/custom/commands/redis/data/strings/decr.d.ts +0 -5
  334. package/dist/commanders/custom/commands/redis/data/strings/decr.d.ts.map +0 -1
  335. package/dist/commanders/custom/commands/redis/data/strings/decrby.d.ts +0 -8
  336. package/dist/commanders/custom/commands/redis/data/strings/decrby.d.ts.map +0 -1
  337. package/dist/commanders/custom/commands/redis/data/strings/get.d.ts +0 -5
  338. package/dist/commanders/custom/commands/redis/data/strings/get.d.ts.map +0 -1
  339. package/dist/commanders/custom/commands/redis/data/strings/getset.d.ts +0 -8
  340. package/dist/commanders/custom/commands/redis/data/strings/getset.d.ts.map +0 -1
  341. package/dist/commanders/custom/commands/redis/data/strings/incr.d.ts +0 -5
  342. package/dist/commanders/custom/commands/redis/data/strings/incr.d.ts.map +0 -1
  343. package/dist/commanders/custom/commands/redis/data/strings/incrby.d.ts +0 -8
  344. package/dist/commanders/custom/commands/redis/data/strings/incrby.d.ts.map +0 -1
  345. package/dist/commanders/custom/commands/redis/data/strings/incrbyfloat.d.ts +0 -8
  346. package/dist/commanders/custom/commands/redis/data/strings/incrbyfloat.d.ts.map +0 -1
  347. package/dist/commanders/custom/commands/redis/data/strings/index.d.ts +0 -14
  348. package/dist/commanders/custom/commands/redis/data/strings/index.d.ts.map +0 -1
  349. package/dist/commanders/custom/commands/redis/data/strings/mget.d.ts +0 -8
  350. package/dist/commanders/custom/commands/redis/data/strings/mget.d.ts.map +0 -1
  351. package/dist/commanders/custom/commands/redis/data/strings/mset.d.ts +0 -9
  352. package/dist/commanders/custom/commands/redis/data/strings/mset.d.ts.map +0 -1
  353. package/dist/commanders/custom/commands/redis/data/strings/msetnx.d.ts +0 -9
  354. package/dist/commanders/custom/commands/redis/data/strings/msetnx.d.ts.map +0 -1
  355. package/dist/commanders/custom/commands/redis/data/strings/set.d.ts +0 -29
  356. package/dist/commanders/custom/commands/redis/data/strings/set.d.ts.map +0 -1
  357. package/dist/commanders/custom/commands/redis/data/strings/strlen.d.ts +0 -5
  358. package/dist/commanders/custom/commands/redis/data/strings/strlen.d.ts.map +0 -1
  359. package/dist/commanders/custom/commands/redis/data/zsets/index.d.ts +0 -12
  360. package/dist/commanders/custom/commands/redis/data/zsets/index.d.ts.map +0 -1
  361. package/dist/commanders/custom/commands/redis/data/zsets/zadd.d.ts +0 -10
  362. package/dist/commanders/custom/commands/redis/data/zsets/zadd.d.ts.map +0 -1
  363. package/dist/commanders/custom/commands/redis/data/zsets/zcard.d.ts +0 -5
  364. package/dist/commanders/custom/commands/redis/data/zsets/zcard.d.ts.map +0 -1
  365. package/dist/commanders/custom/commands/redis/data/zsets/zincrby.d.ts +0 -9
  366. package/dist/commanders/custom/commands/redis/data/zsets/zincrby.d.ts.map +0 -1
  367. package/dist/commanders/custom/commands/redis/data/zsets/zrange.d.ts +0 -10
  368. package/dist/commanders/custom/commands/redis/data/zsets/zrange.d.ts.map +0 -1
  369. package/dist/commanders/custom/commands/redis/data/zsets/zrangebyscore.d.ts +0 -9
  370. package/dist/commanders/custom/commands/redis/data/zsets/zrangebyscore.d.ts.map +0 -1
  371. package/dist/commanders/custom/commands/redis/data/zsets/zrank.d.ts +0 -8
  372. package/dist/commanders/custom/commands/redis/data/zsets/zrank.d.ts.map +0 -1
  373. package/dist/commanders/custom/commands/redis/data/zsets/zrem.d.ts +0 -9
  374. package/dist/commanders/custom/commands/redis/data/zsets/zrem.d.ts.map +0 -1
  375. package/dist/commanders/custom/commands/redis/data/zsets/zremrangebyscore.d.ts +0 -9
  376. package/dist/commanders/custom/commands/redis/data/zsets/zremrangebyscore.d.ts.map +0 -1
  377. package/dist/commanders/custom/commands/redis/data/zsets/zrevrange.d.ts +0 -10
  378. package/dist/commanders/custom/commands/redis/data/zsets/zrevrange.d.ts.map +0 -1
  379. package/dist/commanders/custom/commands/redis/data/zsets/zrevrank.d.ts +0 -8
  380. package/dist/commanders/custom/commands/redis/data/zsets/zrevrank.d.ts.map +0 -1
  381. package/dist/commanders/custom/commands/redis/data/zsets/zscore.d.ts +0 -8
  382. package/dist/commanders/custom/commands/redis/data/zsets/zscore.d.ts.map +0 -1
  383. package/dist/commanders/custom/commands/redis/index.d.ts +0 -39
  384. package/dist/commanders/custom/commands/redis/index.d.ts.map +0 -1
  385. package/dist/commanders/custom/commands/redis/info.d.ts +0 -7
  386. package/dist/commanders/custom/commands/redis/info.d.ts.map +0 -1
  387. package/dist/commanders/custom/commands/redis/monitor.d.ts +0 -5
  388. package/dist/commanders/custom/commands/redis/monitor.d.ts.map +0 -1
  389. package/dist/commanders/custom/commands/redis/ping.d.ts +0 -7
  390. package/dist/commanders/custom/commands/redis/ping.d.ts.map +0 -1
  391. package/dist/commanders/custom/commands/redis/quit.d.ts +0 -5
  392. package/dist/commanders/custom/commands/redis/quit.d.ts.map +0 -1
  393. package/dist/commanders/custom/commands/redis/script/debug.d.ts +0 -7
  394. package/dist/commanders/custom/commands/redis/script/debug.d.ts.map +0 -1
  395. package/dist/commanders/custom/commands/redis/script/eval.d.ts +0 -7
  396. package/dist/commanders/custom/commands/redis/script/eval.d.ts.map +0 -1
  397. package/dist/commanders/custom/commands/redis/script/evalsha.d.ts +0 -7
  398. package/dist/commanders/custom/commands/redis/script/evalsha.d.ts.map +0 -1
  399. package/dist/commanders/custom/commands/redis/script/exists.d.ts +0 -8
  400. package/dist/commanders/custom/commands/redis/script/exists.d.ts.map +0 -1
  401. package/dist/commanders/custom/commands/redis/script/flush.d.ts +0 -7
  402. package/dist/commanders/custom/commands/redis/script/flush.d.ts.map +0 -1
  403. package/dist/commanders/custom/commands/redis/script/help.d.ts +0 -5
  404. package/dist/commanders/custom/commands/redis/script/help.d.ts.map +0 -1
  405. package/dist/commanders/custom/commands/redis/script/index.d.ts +0 -8
  406. package/dist/commanders/custom/commands/redis/script/index.d.ts.map +0 -1
  407. package/dist/commanders/custom/commands/redis/script/kill.d.ts +0 -5
  408. package/dist/commanders/custom/commands/redis/script/kill.d.ts.map +0 -1
  409. package/dist/commanders/custom/commands/redis/script/load.d.ts +0 -5
  410. package/dist/commanders/custom/commands/redis/script/load.d.ts.map +0 -1
  411. package/dist/commanders/custom/commands/redis/script/lua-reply.d.ts +0 -8
  412. package/dist/commanders/custom/commands/redis/script/lua-reply.d.ts.map +0 -1
  413. package/dist/commanders/custom/commands/registry.d.ts +0 -84
  414. package/dist/commanders/custom/commands/registry.d.ts.map +0 -1
  415. package/dist/commanders/custom/data-structures/hash.d.ts +0 -16
  416. package/dist/commanders/custom/data-structures/hash.d.ts.map +0 -1
  417. package/dist/commanders/custom/data-structures/list.d.ts +0 -15
  418. package/dist/commanders/custom/data-structures/list.d.ts.map +0 -1
  419. package/dist/commanders/custom/data-structures/set.d.ts +0 -16
  420. package/dist/commanders/custom/data-structures/set.d.ts.map +0 -1
  421. package/dist/commanders/custom/data-structures/stream.d.ts +0 -3
  422. package/dist/commanders/custom/data-structures/stream.d.ts.map +0 -1
  423. package/dist/commanders/custom/data-structures/string.d.ts +0 -5
  424. package/dist/commanders/custom/data-structures/string.d.ts.map +0 -1
  425. package/dist/commanders/custom/data-structures/zset.d.ts +0 -17
  426. package/dist/commanders/custom/data-structures/zset.d.ts.map +0 -1
  427. package/dist/commanders/custom/db.d.ts +0 -67
  428. package/dist/commanders/custom/db.d.ts.map +0 -1
  429. package/dist/commanders/custom/execution-context.d.ts +0 -12
  430. package/dist/commanders/custom/execution-context.d.ts.map +0 -1
  431. package/dist/commanders/custom/lua-runtime.d.ts +0 -16
  432. package/dist/commanders/custom/lua-runtime.d.ts.map +0 -1
  433. package/dist/commanders/custom/redis-kernel.d.ts +0 -46
  434. package/dist/commanders/custom/redis-kernel.d.ts.map +0 -1
  435. package/dist/commanders/custom/schema/builder.d.ts +0 -24
  436. package/dist/commanders/custom/schema/builder.d.ts.map +0 -1
  437. package/dist/commanders/custom/schema/command-adapter.d.ts +0 -25
  438. package/dist/commanders/custom/schema/command-adapter.d.ts.map +0 -1
  439. package/dist/commanders/custom/schema/index.d.ts +0 -7
  440. package/dist/commanders/custom/schema/index.d.ts.map +0 -1
  441. package/dist/commanders/custom/schema/input-mapper.d.ts +0 -28
  442. package/dist/commanders/custom/schema/input-mapper.d.ts.map +0 -1
  443. package/dist/commanders/custom/schema/registry.d.ts +0 -13
  444. package/dist/commanders/custom/schema/registry.d.ts.map +0 -1
  445. package/dist/commanders/custom/schema/resp-input-mapper.d.ts +0 -20
  446. package/dist/commanders/custom/schema/resp-input-mapper.d.ts.map +0 -1
  447. package/dist/commanders/custom/schema/types.d.ts +0 -43
  448. package/dist/commanders/custom/schema/types.d.ts.map +0 -1
  449. package/dist/core/cluster/network.d.ts +0 -24
  450. package/dist/core/cluster/network.d.ts.map +0 -1
  451. package/dist/core/errors.d.ts +0 -87
  452. package/dist/core/errors.d.ts.map +0 -1
  453. package/dist/core/transports/buffered-transport.d.ts +0 -14
  454. package/dist/core/transports/buffered-transport.d.ts.map +0 -1
  455. package/dist/core/transports/capturing-transport.d.ts +0 -19
  456. package/dist/core/transports/capturing-transport.d.ts.map +0 -1
  457. package/dist/core/transports/command-validator.d.ts +0 -12
  458. package/dist/core/transports/command-validator.d.ts.map +0 -1
  459. package/dist/core/transports/resp2/adapter.d.ts +0 -32
  460. package/dist/core/transports/resp2/adapter.d.ts.map +0 -1
  461. package/dist/core/transports/session-state.d.ts +0 -76
  462. package/dist/core/transports/session-state.d.ts.map +0 -1
  463. package/dist/core/transports/session.d.ts +0 -36
  464. package/dist/core/transports/session.d.ts.map +0 -1
  465. package/dist/index.cjs +0 -5759
  466. package/dist/index.cjs.map +0 -1
  467. package/dist/index.mjs +0 -5749
  468. package/dist/index.mjs.map +0 -1
  469. package/dist/types.d.ts +0 -54
  470. package/dist/types.d.ts.map +0 -1
package/README.md CHANGED
@@ -8,13 +8,34 @@
8
8
 
9
9
  In-memory Redis-compatible server implementation in JavaScript. Useful for testing and development without requiring a real Redis instance.
10
10
 
11
+ ## Table of Contents
12
+
13
+ - [Features](#features)
14
+ - [Installation](#installation)
15
+ - [Quick Start](#quick-start)
16
+ - [As a Library](#as-a-library)
17
+ - [As a CLI](#as-a-cli)
18
+ - [CLI Options](#cli-options)
19
+ - [Connecting Clients](#connecting-clients)
20
+ - [Protocol Version (RESP2 / RESP3)](#protocol-version-resp2--resp3)
21
+ - [Connecting with ioredis](#connecting-with-ioredis)
22
+ - [Connecting with node-redis](#connecting-with-node-redis)
23
+ - [Using in Unit Tests](#using-in-unit-tests)
24
+ - [Cluster Mode](#cluster-mode)
25
+ - [API Reference](#api-reference)
26
+ - [Supported Commands](#supported-commands)
27
+ - [Requirements](#requirements)
28
+ - [Development](#development)
29
+ - [Contributing](#contributing)
30
+ - [License](#license)
31
+
11
32
  ## Features
12
33
 
13
- - **Redis-compatible protocol** - Works with any Redis client (ioredis, node-redis, etc.)
34
+ - **RESP2 and RESP3 protocols** - Per-session version negotiation via `HELLO`
14
35
  - **Standalone and Cluster modes** - Run a single server or a full cluster
15
36
  - **Lua scripting support** - Execute Redis Lua scripts via WebAssembly
16
37
  - **No external dependencies** - Pure JavaScript, no Redis installation needed
17
- - **Dual package** - Supports both ESM and CommonJS
38
+ - **TypeScript support** - Ships with full type definitions
18
39
 
19
40
  ## Installation
20
41
 
@@ -27,22 +48,27 @@ npm install js-redis-server
27
48
  ### As a Library
28
49
 
29
50
  ```typescript
30
- import { createCustomCommander, Resp2Transport } from 'js-redis-server'
51
+ import {
52
+ RedisServerState,
53
+ createRedisCommandExecutor,
54
+ Resp2Server,
55
+ } from 'js-redis-server'
31
56
 
32
57
  const logger = {
33
58
  info: console.log,
34
59
  error: console.error,
60
+ debug: console.debug,
35
61
  }
36
62
 
37
- const factory = await createCustomCommander(logger)
38
- const transport = new Resp2Transport(logger, factory.createCommander())
63
+ const state = new RedisServerState()
64
+ const executor = createRedisCommandExecutor()
65
+ const server = new Resp2Server({ server: state, executor, logger })
39
66
 
40
- await transport.listen(6379)
41
- console.log('Redis server listening on port 6379')
67
+ await server.listen(6379)
68
+ console.log(`Redis server listening at ${server.getAddress()}`)
42
69
 
43
70
  // Cleanup
44
- await transport.close()
45
- await factory.shutdown()
71
+ await server.close()
46
72
  ```
47
73
 
48
74
  ### As a CLI
@@ -78,66 +104,227 @@ Cluster options:
78
104
  --base-port <number> Starting port for cluster nodes (default 30000)
79
105
 
80
106
  General:
107
+ -d, --debug Enable debug logging
81
108
  -h, --help Show help
82
109
  ```
83
110
 
84
111
  ## Cluster Mode
85
112
 
86
113
  ```typescript
87
- import { ClusterNetwork } from 'js-redis-server'
114
+ import { buildRedisCluster } from 'js-redis-server'
88
115
 
89
- const logger = { info: console.log, error: console.error }
90
- const cluster = new ClusterNetwork(logger)
116
+ const logger = {
117
+ info: console.log,
118
+ error: console.error,
119
+ debug: console.debug,
120
+ }
91
121
 
92
- await cluster.init({
122
+ const cluster = buildRedisCluster({
93
123
  masters: 3,
94
- slaves: 1,
124
+ replicasPerMaster: 1,
95
125
  basePort: 30000,
126
+ logger,
96
127
  })
97
128
 
129
+ await cluster.listen()
130
+
98
131
  // Get all node addresses
99
- const nodes = cluster.getAll()
100
- console.log(nodes.map(n => `${n.host}:${n.port}`))
132
+ console.log(cluster.nodes.map(n => `${n.host}:${n.port}`))
101
133
 
102
134
  // Cleanup
103
- await cluster.shutdown()
135
+ await cluster.close()
136
+ ```
137
+
138
+ ## Connecting Clients
139
+
140
+ You can connect to `js-redis-server` using any standard Redis client.
141
+
142
+ ### Protocol Version (RESP2 / RESP3)
143
+
144
+ Each connection starts on RESP2 and can switch to RESP3 by sending `HELLO 3`
145
+ (handled per-session, no server restart needed). Clients that support RESP3
146
+ negotiate this automatically:
147
+
148
+ ```typescript
149
+ import { createClient } from 'redis'
150
+
151
+ // node-redis negotiates RESP3 via the `RESP` option
152
+ const client = createClient({
153
+ url: 'redis://127.0.0.1:6379',
154
+ RESP: 3,
155
+ })
156
+ await client.connect()
157
+ ```
158
+
159
+ ### Connecting with ioredis
160
+
161
+ ```typescript
162
+ import Redis from 'ioredis'
163
+
164
+ // Single Node
165
+ const redis = new Redis(6379, '127.0.0.1')
166
+
167
+ // Cluster Node
168
+ const cluster = new Redis.Cluster([
169
+ { host: '127.0.0.1', port: 30000 },
170
+ { host: '127.0.0.1', port: 30001 },
171
+ { host: '127.0.0.1', port: 30002 },
172
+ ])
173
+ ```
174
+
175
+ ### Connecting with node-redis
176
+
177
+ ```typescript
178
+ import { createClient, createCluster } from 'redis'
179
+
180
+ // Single Node
181
+ const client = createClient({
182
+ url: 'redis://127.0.0.1:6379'
183
+ })
184
+ await client.connect()
185
+
186
+ // Cluster Node
187
+ const cluster = createCluster({
188
+ rootNodes: [
189
+ { url: 'redis://127.0.0.1:30000' },
190
+ { url: 'redis://127.0.0.1:30001' },
191
+ { url: 'redis://127.0.0.1:30002' },
192
+ ]
193
+ })
194
+ await cluster.connect()
195
+ ```
196
+
197
+ ### Using in Unit Tests
198
+
199
+ Since `js-redis-server` starts instantly, it is perfect for isolated integration testing in Node.js test frameworks (like Mocha, Jest, or Node's test runner):
200
+
201
+ ```typescript
202
+ import { test, before, after } from 'node:test'
203
+ import assert from 'node:assert'
204
+ import Redis from 'ioredis'
205
+ import { RedisServerState, createRedisCommandExecutor, Resp2Server } from 'js-redis-server'
206
+
207
+ let server: Resp2Server
208
+ let client: Redis
209
+
210
+ before(async () => {
211
+ const state = new RedisServerState()
212
+ const executor = createRedisCommandExecutor()
213
+ server = new Resp2Server({ server: state, executor })
214
+
215
+ await server.listen(6379)
216
+ client = new Redis(6379, '127.0.0.1')
217
+ })
218
+
219
+ after(async () => {
220
+ await client.quit()
221
+ await server.close()
222
+ })
223
+
224
+ test('basic set/get operations', async () => {
225
+ await client.set('foo', 'bar')
226
+ const val = await client.get('foo')
227
+ assert.strictEqual(val, 'bar')
228
+ })
229
+ ```
230
+
231
+ ## API Reference
232
+
233
+ ### `Resp2Server`
234
+
235
+ Creates a TCP server running the RESP2 protocol.
236
+
237
+ ```typescript
238
+ new Resp2Server(options: Resp2ServerOptions)
104
239
  ```
105
240
 
241
+ **Options (`Resp2ServerOptions`)**:
242
+
243
+ | Parameter | Type | Required | Description |
244
+ | :--- | :--- | :--- | :--- |
245
+ | `server` | `RedisServerState` | Yes | The database server state containing database instances. |
246
+ | `executor` | `CommandExecutor` | Yes | The command executor handling pipeline and execution policies. |
247
+ | `logger` | `Pick<Logger, 'error'>` | No | Optional logger for error logging. |
248
+ | `encoder` | `RespEncodeOptions` | No | Custom RESP protocol encoding options. |
249
+
250
+ ---
251
+
252
+ ### `RedisServerState`
253
+
254
+ Holds the database and keyspace state for the server.
255
+
256
+ ```typescript
257
+ new RedisServerState(options?: RedisServerStateOptions)
258
+ ```
259
+
260
+ **Options (`RedisServerStateOptions`)**:
261
+
262
+ | Parameter | Type | Default | Description |
263
+ | :--- | :--- | :--- | :--- |
264
+ | `databaseCount` | `number` | `1` | Number of databases to initialize. |
265
+ | `clusterTopology` | `RedisClusterTopology` | `undefined` | Optional cluster topology for slot routing. |
266
+ | `pubsubBroker` | `RedisPubSubBroker` | `undefined` | Optional broker for pub/sub operations. |
267
+ | `scriptCache` | `RedisScriptCache` | `undefined` | Optional cache for Lua scripts. |
268
+
269
+ ---
270
+
271
+ ### `buildRedisCluster`
272
+
273
+ Utility function to build and configure a complete Redis cluster in-memory.
274
+
275
+ ```typescript
276
+ buildRedisCluster(options: RedisClusterOptions): RedisCluster
277
+ ```
278
+
279
+ **Options (`RedisClusterOptions`)**:
280
+
281
+ | Parameter | Type | Default | Description |
282
+ | :--- | :--- | :--- | :--- |
283
+ | `masters` | `number` | **Required** | Number of master nodes in the cluster. |
284
+ | `replicasPerMaster` | `number` | `0` | Replicas per master node. |
285
+ | `basePort` | `number` | **Required** | Base port range. If `0`, random OS ports are assigned. |
286
+ | `host` | `string` | `'127.0.0.1'` | Host address to bind to. |
287
+ | `databasesPerNode` | `number` | `1` | Number of databases per cluster node. |
288
+ | `logger` | `Pick<Logger, 'error'>` | `undefined` | Optional logger. |
289
+
106
290
  ## Supported Commands
107
291
 
108
292
  ### Strings
109
- `GET`, `SET`, `MGET`, `MSET`, `MSETNX`, `APPEND`, `STRLEN`, `GETSET`, `INCR`, `INCRBY`, `INCRBYFLOAT`, `DECR`, `DECRBY`
293
+ `APPEND`, `DECR`, `DECRBY`, `GET`, `GETDEL`, `GETEX`, `GETRANGE`, `GETSET`, `INCR`, `INCRBY`, `INCRBYFLOAT`, `MGET`, `MSET`, `MSETNX`, `PSETEX`, `SET`, `SETEX`, `SETNX`, `SETRANGE`, `STRLEN`
110
294
 
111
295
  ### Hashes
112
- `HGET`, `HSET`, `HMGET`, `HMSET`, `HDEL`, `HEXISTS`, `HGETALL`, `HINCRBY`, `HINCRBYFLOAT`, `HKEYS`, `HLEN`, `HVALS`
296
+ `HDEL`, `HEXISTS`, `HGET`, `HGETALL`, `HINCRBY`, `HINCRBYFLOAT`, `HKEYS`, `HLEN`, `HMGET`, `HMSET`, `HSCAN`, `HSET`, `HSETNX`, `HSTRLEN`, `HVALS`
113
297
 
114
298
  ### Lists
115
- `LPUSH`, `RPUSH`, `LPOP`, `RPOP`, `LLEN`, `LRANGE`, `LINDEX`, `LSET`, `LREM`, `LTRIM`
299
+ `LINDEX`, `LLEN`, `LPOP`, `LPUSH`, `LPUSHX`, `LRANGE`, `LREM`, `LSET`, `LTRIM`, `RPOP`, `RPOPLPUSH`, `RPUSH`, `RPUSHX`
116
300
 
117
301
  ### Sets
118
- `SADD`, `SREM`, `SMEMBERS`, `SISMEMBER`, `SCARD`, `SPOP`, `SRANDMEMBER`, `SMOVE`, `SDIFF`, `SINTER`, `SUNION`
302
+ `SADD`, `SCARD`, `SDIFF`, `SDIFFSTORE`, `SINTER`, `SINTERSTORE`, `SISMEMBER`, `SMEMBERS`, `SMOVE`, `SPOP`, `SRANDMEMBER`, `SREM`, `SSCAN`, `SUNION`, `SUNIONSTORE`
119
303
 
120
304
  ### Sorted Sets
121
- `ZADD`, `ZREM`, `ZSCORE`, `ZRANK`, `ZREVRANK`, `ZCARD`, `ZRANGE`, `ZREVRANGE`, `ZRANGEBYSCORE`, `ZREMRANGEBYSCORE`, `ZINCRBY`
305
+ `ZADD`, `ZCARD`, `ZCOUNT`, `ZINCRBY`, `ZPOPMAX`, `ZPOPMIN`, `ZRANGE`, `ZRANGEBYSCORE`, `ZRANK`, `ZREM`, `ZREMRANGEBYSCORE`, `ZREVRANGE`, `ZREVRANK`, `ZSCAN`, `ZSCORE`
122
306
 
123
307
  ### Keys
124
- `DEL`, `EXISTS`, `EXPIRE`, `EXPIREAT`, `TTL`, `PTTL`, `TYPE`
308
+ `DEL`, `EXISTS`, `EXPIRE`, `EXPIREAT`, `KEYS`, `PERSIST`, `PEXPIRE`, `PEXPIREAT`, `PTTL`, `RENAME`, `RENAMENX`, `SCAN`, `TTL`, `TYPE`
125
309
 
126
310
  ### Server
127
- `PING`, `QUIT`, `INFO`, `DBSIZE`, `FLUSHDB`, `FLUSHALL`
311
+ `DBSIZE`, `FLUSHALL`, `FLUSHDB`, `INFO`, `PING`, `QUIT`
128
312
 
129
- ### Cluster
130
- `CLUSTER INFO`, `CLUSTER NODES`, `CLUSTER SLOTS`, `CLUSTER SHARDS`
313
+ ### Transactions
314
+ `MULTI`, `EXEC`, `DISCARD`, `WATCH`, `UNWATCH`
131
315
 
132
316
  ### Scripting
133
- `EVAL`, `EVALSHA`, `SCRIPT LOAD`
317
+ `EVAL`, `EVALSHA`, `SCRIPT LOAD`, `SCRIPT EXISTS`, `SCRIPT FLUSH`
318
+
319
+ ### Cluster
320
+ `CLUSTER INFO`, `CLUSTER MYID`, `CLUSTER NODES`, `CLUSTER SHARDS`, `CLUSTER SLOTS`
134
321
 
135
- ### Client
136
- `CLIENT SETNAME`
322
+ ### Connection
323
+ `AUTH`, `CLIENT`, `HELLO`, `RESET`, `SELECT`
137
324
 
138
325
  ## Requirements
139
326
 
140
- - Node.js >= 22
327
+ - Node.js >= 24
141
328
 
142
329
  ## Development
143
330
 
@@ -151,16 +338,34 @@ npm run build
151
338
  # Run tests
152
339
  npm test
153
340
 
341
+ # Lint and format
342
+ npm run lint
343
+ npm run format
344
+
154
345
  # Run integration tests (mock backend)
155
346
  npm run test:integration:mock
156
347
 
157
348
  # Run integration tests (real Redis)
349
+ # Requires a Redis cluster — start one with docker-compose.test.yml first:
350
+ # docker compose -f docker-compose.test.yml up -d --wait
158
351
  npm run test:integration:real
159
352
 
160
353
  # Run all tests
161
354
  npm run test:all
162
355
  ```
163
356
 
357
+ > **CI** runs four jobs on every push and pull request: lint + format check,
358
+ > unit tests, mock-backend integration tests, and real-backend integration
359
+ > tests against a Redis cluster spun up via `docker-compose.test.yml`.
360
+
361
+ ## Further Documentation
362
+
363
+ For more details on the architecture, testing infrastructure, and command support, see:
364
+
365
+ - [Architecture](docs/ARCHITECTURE.md) — layers, command pipeline, execution policies, cluster routing, RESP2/RESP3, and diagrams
366
+ - [Detailed Command Implementation Status](docs/COMMANDS.md)
367
+ - [Integration Testing Infrastructure](docs/TEST-INTEGRATION.md)
368
+
164
369
  ## Contributing
165
370
 
166
371
  Contributions are welcome! Please read the [contributing guidelines](CONTRIBUTING.md) before submitting a pull request.
package/dist/cli.d.ts CHANGED
@@ -6,6 +6,7 @@ export type CliOptions = {
6
6
  slaves: number;
7
7
  basePort: number;
8
8
  help: boolean;
9
+ debug: boolean;
9
10
  };
10
11
  export declare function parseArgs(args: string[]): CliOptions;
11
12
  export declare function main(argv?: string[]): Promise<void>;
package/dist/cli.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAKA,KAAK,IAAI,GAAG,QAAQ,GAAG,SAAS,CAAA;AAEhC,MAAM,MAAM,UAAU,GAAG;IACvB,IAAI,EAAE,IAAI,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,CAAA;IACf,MAAM,EAAE,MAAM,CAAA;IACd,QAAQ,EAAE,MAAM,CAAA;IAChB,IAAI,EAAE,OAAO,CAAA;CACd,CAAA;AAWD,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,UAAU,CAsDpD;AAkHD,wBAAsB,IAAI,CAAC,IAAI,WAAwB,iBActD"}
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAMA,KAAK,IAAI,GAAG,QAAQ,GAAG,SAAS,CAAA;AAEhC,MAAM,MAAM,UAAU,GAAG;IACvB,IAAI,EAAE,IAAI,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,CAAA;IACf,MAAM,EAAE,MAAM,CAAA;IACd,QAAQ,EAAE,MAAM,CAAA;IAChB,IAAI,EAAE,OAAO,CAAA;IACb,KAAK,EAAE,OAAO,CAAA;CACf,CAAA;AAYD,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,UAAU,CA2DpD;AAqHD,wBAAsB,IAAI,CAAC,IAAI,WAAwB,iBActD"}
package/dist/cli.js ADDED
@@ -0,0 +1,191 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.parseArgs = parseArgs;
5
+ exports.main = main;
6
+ const commands_1 = require("./commands");
7
+ const server_1 = require("./core/transports/resp2/server");
8
+ const cluster_1 = require("./cluster");
9
+ const state_1 = require("./state");
10
+ const defaultOptions = {
11
+ mode: 'single',
12
+ port: 6379,
13
+ masters: 3,
14
+ slaves: 0,
15
+ basePort: 30000,
16
+ help: false,
17
+ debug: false,
18
+ };
19
+ function parseArgs(args) {
20
+ const options = { ...defaultOptions };
21
+ for (let i = 0; i < args.length; i++) {
22
+ const arg = args[i];
23
+ if (arg === '--help' || arg === '-h') {
24
+ options.help = true;
25
+ continue;
26
+ }
27
+ if (arg === '--debug' || arg === '-d') {
28
+ options.debug = true;
29
+ continue;
30
+ }
31
+ if (arg === '--cluster') {
32
+ options.mode = 'cluster';
33
+ continue;
34
+ }
35
+ if (arg === '--single') {
36
+ options.mode = 'single';
37
+ continue;
38
+ }
39
+ if (arg === '--mode') {
40
+ const value = args[++i];
41
+ if (value !== 'single' && value !== 'cluster') {
42
+ throw new Error(`Invalid mode "${value}"`);
43
+ }
44
+ options.mode = value;
45
+ continue;
46
+ }
47
+ if (arg === '--port') {
48
+ options.port = parseInteger(args[++i], '--port');
49
+ continue;
50
+ }
51
+ if (arg === '--base-port') {
52
+ options.basePort = parseInteger(args[++i], '--base-port');
53
+ continue;
54
+ }
55
+ if (arg === '--masters') {
56
+ options.masters = parseInteger(args[++i], '--masters');
57
+ continue;
58
+ }
59
+ if (arg === '--slaves') {
60
+ options.slaves = parseInteger(args[++i], '--slaves');
61
+ continue;
62
+ }
63
+ throw new Error(`Unknown argument "${arg}"`);
64
+ }
65
+ return options;
66
+ }
67
+ function parseInteger(value, name) {
68
+ if (!value) {
69
+ throw new Error(`Missing value for ${name}`);
70
+ }
71
+ const parsed = Number(value);
72
+ if (!Number.isInteger(parsed)) {
73
+ throw new Error(`Invalid value for ${name}: ${value}`);
74
+ }
75
+ return parsed;
76
+ }
77
+ function validatePort(port, name) {
78
+ if (!Number.isInteger(port) || port < 0 || port > 65535) {
79
+ throw new Error(`Invalid ${name} ${port}`);
80
+ }
81
+ }
82
+ function createLogger(debug = false) {
83
+ return {
84
+ info: (msg, metadata) => {
85
+ if (metadata) {
86
+ console.log(msg, metadata);
87
+ }
88
+ else {
89
+ console.log(msg);
90
+ }
91
+ },
92
+ error: (msg, metadata) => {
93
+ if (metadata) {
94
+ console.error(msg, metadata);
95
+ }
96
+ else {
97
+ console.error(msg);
98
+ }
99
+ },
100
+ debug: (msg, metadata) => {
101
+ if (debug) {
102
+ if (metadata) {
103
+ console.debug(msg, metadata);
104
+ }
105
+ else {
106
+ console.debug(msg);
107
+ }
108
+ }
109
+ },
110
+ };
111
+ }
112
+ function printHelp() {
113
+ console.log(`Usage: js-redis-server [options]
114
+
115
+ Modes:
116
+ --single Run a single Redis server (default)
117
+ --cluster Run a Redis cluster
118
+ --mode <single|cluster>
119
+
120
+ Single server options:
121
+ --port <number> Port to listen on (default 6379)
122
+
123
+ Cluster options:
124
+ --masters <number> Number of masters (default 3)
125
+ --slaves <number> Number of replicas per master (default 0)
126
+ --base-port <number> Starting port for cluster nodes (default 30000)
127
+
128
+ General:
129
+ -d, --debug Enable debug logging
130
+ -h, --help Show help
131
+ `);
132
+ }
133
+ async function runSingle(options, logger) {
134
+ validatePort(options.port, 'port');
135
+ logger.debug('Starting single server mode', { port: options.port });
136
+ const state = new state_1.RedisServerState();
137
+ const executor = (0, commands_1.createRedisCommandExecutor)();
138
+ const server = new server_1.Resp2Server({ server: state, executor, logger });
139
+ await server.listen(options.port);
140
+ logger.info(`Single Redis server listening at ${server.getAddress()}`);
141
+ const shutdown = async () => {
142
+ await server.close();
143
+ };
144
+ process.once('SIGINT', shutdown);
145
+ process.once('SIGTERM', shutdown);
146
+ }
147
+ async function runCluster(options, logger) {
148
+ validatePort(options.basePort, 'base-port');
149
+ logger.debug('Starting cluster mode', {
150
+ masters: options.masters,
151
+ slaves: options.slaves,
152
+ basePort: options.basePort,
153
+ });
154
+ const cluster = (0, cluster_1.buildRedisCluster)({
155
+ masters: options.masters,
156
+ replicasPerMaster: options.slaves,
157
+ basePort: options.basePort,
158
+ logger,
159
+ });
160
+ await cluster.listen();
161
+ const nodes = cluster.nodes.map(n => `${n.id} ${n.host}:${n.port}`).join(', ');
162
+ logger.info(`Cluster nodes: ${nodes}`);
163
+ const shutdown = async () => {
164
+ await cluster.close();
165
+ };
166
+ process.once('SIGINT', shutdown);
167
+ process.once('SIGTERM', shutdown);
168
+ }
169
+ async function main(argv = process.argv.slice(2)) {
170
+ const options = parseArgs(argv);
171
+ if (options.help) {
172
+ printHelp();
173
+ return;
174
+ }
175
+ const logger = createLogger(options.debug);
176
+ if (options.mode === 'cluster') {
177
+ await runCluster(options, logger);
178
+ }
179
+ else {
180
+ await runSingle(options, logger);
181
+ }
182
+ }
183
+ // Run when executed directly as CLI. Node resolves bin symlinks to realpath,
184
+ // so require.main === module works for `npm link` / global installs too.
185
+ if (require.main === module) {
186
+ main().catch(err => {
187
+ console.error(err);
188
+ process.exitCode = 1;
189
+ });
190
+ }
191
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ import { Resp2Server } from './core/transports/resp2/server';
2
+ import { RedisClusterTopology, RedisServerState } from './state';
3
+ import type { Logger } from './logger';
4
+ export type RedisClusterOptions = {
5
+ masters: number;
6
+ replicasPerMaster?: number;
7
+ basePort: number;
8
+ host?: string;
9
+ databasesPerNode?: number;
10
+ logger?: Pick<Logger, 'error'>;
11
+ };
12
+ export type RedisClusterNodeHandle = {
13
+ id: string;
14
+ role: 'master' | 'replica';
15
+ host: string;
16
+ port: number;
17
+ server: RedisServerState;
18
+ };
19
+ export declare class RedisCluster {
20
+ readonly topology: RedisClusterTopology;
21
+ readonly nodes: readonly RedisClusterNodeHandle[];
22
+ private readonly servers;
23
+ constructor(topology: RedisClusterTopology, nodes: readonly RedisClusterNodeHandle[], servers: readonly Resp2Server[]);
24
+ listen(): Promise<void>;
25
+ close(): Promise<void>;
26
+ getAddresses(): string[];
27
+ }
28
+ export declare function buildRedisCluster(options: RedisClusterOptions): RedisCluster;
29
+ export declare function computeSlotRange(masterIndex: number, masters: number): [number, number];
30
+ //# sourceMappingURL=cluster.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cluster.d.ts","sourceRoot":"","sources":["../src/cluster.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAA;AAC5D,OAAO,EAEL,oBAAoB,EACpB,gBAAgB,EAEjB,MAAM,SAAS,CAAA;AAChB,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;AAEtC,MAAM,MAAM,mBAAmB,GAAG;IAChC,OAAO,EAAE,MAAM,CAAA;IACf,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,QAAQ,EAAE,MAAM,CAAA;IAChB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,MAAM,CAAC,EAAE,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAC/B,CAAA;AAED,MAAM,MAAM,sBAAsB,GAAG;IACnC,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,QAAQ,GAAG,SAAS,CAAA;IAC1B,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,gBAAgB,CAAA;CACzB,CAAA;AAED,qBAAa,YAAY;IACvB,QAAQ,CAAC,QAAQ,EAAE,oBAAoB,CAAA;IACvC,QAAQ,CAAC,KAAK,EAAE,SAAS,sBAAsB,EAAE,CAAA;IAEjD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAe;gBAGrC,QAAQ,EAAE,oBAAoB,EAC9B,KAAK,EAAE,SAAS,sBAAsB,EAAE,EACxC,OAAO,EAAE,SAAS,WAAW,EAAE;IAO3B,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAevB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAI5B,YAAY,IAAI,MAAM,EAAE;CAGzB;AAED,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,mBAAmB,GAAG,YAAY,CA2E5E;AAED,wBAAgB,gBAAgB,CAC9B,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM,GACd,CAAC,MAAM,EAAE,MAAM,CAAC,CAgBlB"}