@upstash/redis 1.0.0-alpha.2 → 1.0.0-alpha.3

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 (265) hide show
  1. package/{dist/chunk-7YUZYRJS.mjs → chunk-7YUZYRJS.mjs} +0 -0
  2. package/{dist/chunk-FJSI5EBJ.mjs → chunk-FJSI5EBJ.mjs} +0 -0
  3. package/{dist/chunk-U7OXAQMQ.mjs → chunk-U7OXAQMQ.mjs} +0 -0
  4. package/{dist/chunk-Y5TC4HX2.mjs → chunk-Y5TC4HX2.mjs} +0 -0
  5. package/{dist/chunk-ZIB6XPPC.mjs → chunk-ZIB6XPPC.mjs} +0 -0
  6. package/{dist/cloudflare.d.ts → cloudflare.d.ts} +0 -0
  7. package/{dist/cloudflare.js → cloudflare.js} +0 -0
  8. package/{dist/cloudflare.mjs → cloudflare.mjs} +0 -0
  9. package/{dist/commands.d.ts → commands.d.ts} +0 -0
  10. package/{dist/commands.js → commands.js} +0 -0
  11. package/{dist/commands.mjs → commands.mjs} +0 -0
  12. package/{dist/fastly.d.ts → fastly.d.ts} +0 -0
  13. package/{dist/fastly.js → fastly.js} +0 -0
  14. package/{dist/fastly.mjs → fastly.mjs} +0 -0
  15. package/{dist/http.d.ts → http.d.ts} +0 -0
  16. package/{dist/http.js → http.js} +0 -0
  17. package/{dist/http.mjs → http.mjs} +0 -0
  18. package/{dist/index.d.ts → index.d.ts} +0 -0
  19. package/{dist/index.js → index.js} +0 -0
  20. package/{dist/index.mjs → index.mjs} +0 -0
  21. package/{dist/nodejs.d.ts → nodejs.d.ts} +0 -0
  22. package/{dist/nodejs.js → nodejs.js} +0 -0
  23. package/{dist/nodejs.mjs → nodejs.mjs} +0 -0
  24. package/package.json +1 -1
  25. package/{dist/redis-dd052782.d.ts → redis-dd052782.d.ts} +0 -0
  26. package/{dist/zunionstore-dffa797d.d.ts → zunionstore-dffa797d.d.ts} +0 -0
  27. package/.eslintrc.js +0 -49
  28. package/.prettierrc.js +0 -7
  29. package/LICENSE +0 -21
  30. package/dist/package.json +0 -1
  31. package/jest.config.js +0 -195
  32. package/pkg/cloudflare.ts +0 -77
  33. package/pkg/command.ts +0 -40
  34. package/pkg/commands/append.test.ts +0 -28
  35. package/pkg/commands/append.ts +0 -10
  36. package/pkg/commands/bitcount.test.ts +0 -36
  37. package/pkg/commands/bitcount.ts +0 -19
  38. package/pkg/commands/bitop.test.ts +0 -44
  39. package/pkg/commands/bitop.ts +0 -22
  40. package/pkg/commands/bitpos.test.ts +0 -26
  41. package/pkg/commands/bitpos.ts +0 -10
  42. package/pkg/commands/dbsize.test.ts +0 -17
  43. package/pkg/commands/dbsize.ts +0 -10
  44. package/pkg/commands/decr.test.ts +0 -22
  45. package/pkg/commands/decr.ts +0 -10
  46. package/pkg/commands/decrby.test.ts +0 -23
  47. package/pkg/commands/decrby.ts +0 -10
  48. package/pkg/commands/del.test.ts +0 -38
  49. package/pkg/commands/del.ts +0 -11
  50. package/pkg/commands/echo.test.ts +0 -11
  51. package/pkg/commands/echo.ts +0 -10
  52. package/pkg/commands/exists.test.ts +0 -37
  53. package/pkg/commands/exists.ts +0 -11
  54. package/pkg/commands/expire.test.ts +0 -22
  55. package/pkg/commands/expire.ts +0 -10
  56. package/pkg/commands/expireat.test.ts +0 -24
  57. package/pkg/commands/expireat.ts +0 -10
  58. package/pkg/commands/flushall.test.ts +0 -17
  59. package/pkg/commands/flushall.ts +0 -13
  60. package/pkg/commands/flushdb.test.ts +0 -17
  61. package/pkg/commands/flushdb.ts +0 -13
  62. package/pkg/commands/get.test.ts +0 -34
  63. package/pkg/commands/get.ts +0 -10
  64. package/pkg/commands/getbit.test.ts +0 -16
  65. package/pkg/commands/getbit.ts +0 -10
  66. package/pkg/commands/getrange.test.ts +0 -25
  67. package/pkg/commands/getrange.ts +0 -10
  68. package/pkg/commands/getset.test.ts +0 -33
  69. package/pkg/commands/getset.ts +0 -10
  70. package/pkg/commands/hdel.test.ts +0 -30
  71. package/pkg/commands/hdel.ts +0 -10
  72. package/pkg/commands/hexists.test.ts +0 -31
  73. package/pkg/commands/hexists.ts +0 -10
  74. package/pkg/commands/hget.test.ts +0 -47
  75. package/pkg/commands/hget.ts +0 -10
  76. package/pkg/commands/hgetall.test.ts +0 -32
  77. package/pkg/commands/hgetall.ts +0 -35
  78. package/pkg/commands/hincrby.test.ts +0 -27
  79. package/pkg/commands/hincrby.ts +0 -10
  80. package/pkg/commands/hincrbyfloat.test.ts +0 -25
  81. package/pkg/commands/hincrbyfloat.ts +0 -10
  82. package/pkg/commands/hkeys.test.ts +0 -22
  83. package/pkg/commands/hkeys.ts +0 -10
  84. package/pkg/commands/hlen.test.ts +0 -24
  85. package/pkg/commands/hlen.ts +0 -10
  86. package/pkg/commands/hmget.test.ts +0 -48
  87. package/pkg/commands/hmget.ts +0 -41
  88. package/pkg/commands/hmset.test.ts +0 -24
  89. package/pkg/commands/hmset.ts +0 -10
  90. package/pkg/commands/hscan.test.ts +0 -46
  91. package/pkg/commands/hscan.ts +0 -22
  92. package/pkg/commands/hset.test.ts +0 -21
  93. package/pkg/commands/hset.ts +0 -10
  94. package/pkg/commands/hsetnx.test.ts +0 -37
  95. package/pkg/commands/hsetnx.ts +0 -10
  96. package/pkg/commands/hstrlen.test.ts +0 -24
  97. package/pkg/commands/hstrlen.ts +0 -10
  98. package/pkg/commands/hvals.test.ts +0 -23
  99. package/pkg/commands/hvals.ts +0 -10
  100. package/pkg/commands/incr.test.ts +0 -23
  101. package/pkg/commands/incr.ts +0 -10
  102. package/pkg/commands/incrby.test.ts +0 -23
  103. package/pkg/commands/incrby.ts +0 -10
  104. package/pkg/commands/incrbyfloat.test.ts +0 -24
  105. package/pkg/commands/incrbyfloat.ts +0 -10
  106. package/pkg/commands/index.ts +0 -107
  107. package/pkg/commands/keys.test.ts +0 -17
  108. package/pkg/commands/keys.ts +0 -10
  109. package/pkg/commands/lindex.test.ts +0 -33
  110. package/pkg/commands/lindex.ts +0 -7
  111. package/pkg/commands/linsert.test.ts +0 -19
  112. package/pkg/commands/linsert.ts +0 -6
  113. package/pkg/commands/llen.test.ts +0 -26
  114. package/pkg/commands/llen.ts +0 -10
  115. package/pkg/commands/lpop.test.ts +0 -27
  116. package/pkg/commands/lpop.ts +0 -10
  117. package/pkg/commands/lpush.test.ts +0 -17
  118. package/pkg/commands/lpush.ts +0 -11
  119. package/pkg/commands/lpushx.test.ts +0 -29
  120. package/pkg/commands/lpushx.ts +0 -11
  121. package/pkg/commands/lrange.test.ts +0 -22
  122. package/pkg/commands/lrange.ts +0 -7
  123. package/pkg/commands/lrem.test.ts +0 -19
  124. package/pkg/commands/lrem.ts +0 -6
  125. package/pkg/commands/lset.test.ts +0 -40
  126. package/pkg/commands/lset.ts +0 -7
  127. package/pkg/commands/ltrim.test.ts +0 -29
  128. package/pkg/commands/ltrim.ts +0 -7
  129. package/pkg/commands/mget.test.ts +0 -44
  130. package/pkg/commands/mget.ts +0 -9
  131. package/pkg/commands/mset.test.ts +0 -24
  132. package/pkg/commands/mset.ts +0 -10
  133. package/pkg/commands/msetnx.test.ts +0 -46
  134. package/pkg/commands/msetnx.ts +0 -10
  135. package/pkg/commands/persist.test.ts +0 -22
  136. package/pkg/commands/persist.ts +0 -10
  137. package/pkg/commands/pexpire.test.ts +0 -24
  138. package/pkg/commands/pexpire.ts +0 -10
  139. package/pkg/commands/pexpireat.test.ts +0 -24
  140. package/pkg/commands/pexpireat.ts +0 -10
  141. package/pkg/commands/ping.test.ts +0 -19
  142. package/pkg/commands/ping.ts +0 -13
  143. package/pkg/commands/psetex.test.ts +0 -23
  144. package/pkg/commands/psetex.ts +0 -10
  145. package/pkg/commands/pttl.test.ts +0 -17
  146. package/pkg/commands/pttl.ts +0 -10
  147. package/pkg/commands/randomkey.test.ts +0 -17
  148. package/pkg/commands/randomkey.ts +0 -10
  149. package/pkg/commands/rename.test.ts +0 -18
  150. package/pkg/commands/rename.ts +0 -10
  151. package/pkg/commands/renamenx.test.ts +0 -32
  152. package/pkg/commands/renamenx.ts +0 -10
  153. package/pkg/commands/rpop.test.ts +0 -27
  154. package/pkg/commands/rpop.ts +0 -10
  155. package/pkg/commands/rpush.test.ts +0 -17
  156. package/pkg/commands/rpush.ts +0 -11
  157. package/pkg/commands/rpushx.test.ts +0 -29
  158. package/pkg/commands/rpushx.ts +0 -11
  159. package/pkg/commands/sadd.test.ts +0 -16
  160. package/pkg/commands/sadd.ts +0 -11
  161. package/pkg/commands/scan.test.ts +0 -50
  162. package/pkg/commands/scan.ts +0 -21
  163. package/pkg/commands/scard.test.ts +0 -15
  164. package/pkg/commands/scard.ts +0 -9
  165. package/pkg/commands/sdiff.test.ts +0 -20
  166. package/pkg/commands/sdiff.ts +0 -9
  167. package/pkg/commands/sdiffstore.test.ts +0 -21
  168. package/pkg/commands/sdiffstore.ts +0 -10
  169. package/pkg/commands/set.test.ts +0 -112
  170. package/pkg/commands/set.ts +0 -53
  171. package/pkg/commands/setbit.test.ts +0 -16
  172. package/pkg/commands/setbit.ts +0 -10
  173. package/pkg/commands/setex.test.ts +0 -22
  174. package/pkg/commands/setex.ts +0 -10
  175. package/pkg/commands/setnx.test.ts +0 -27
  176. package/pkg/commands/setnx.ts +0 -10
  177. package/pkg/commands/setrange.test.ts +0 -25
  178. package/pkg/commands/setrange.ts +0 -10
  179. package/pkg/commands/sinter.test.ts +0 -36
  180. package/pkg/commands/sinter.ts +0 -9
  181. package/pkg/commands/sinterstore.test.ts +0 -21
  182. package/pkg/commands/sinterstore.ts +0 -9
  183. package/pkg/commands/sismember.test.ts +0 -30
  184. package/pkg/commands/sismember.ts +0 -9
  185. package/pkg/commands/smembers.test.ts +0 -22
  186. package/pkg/commands/smembers.ts +0 -10
  187. package/pkg/commands/smove.test.ts +0 -18
  188. package/pkg/commands/smove.ts +0 -9
  189. package/pkg/commands/spop.test.ts +0 -35
  190. package/pkg/commands/spop.ts +0 -13
  191. package/pkg/commands/srandmember.test.ts +0 -32
  192. package/pkg/commands/srandmember.ts +0 -13
  193. package/pkg/commands/srem.test.ts +0 -18
  194. package/pkg/commands/srem.ts +0 -10
  195. package/pkg/commands/sscan.test.ts +0 -50
  196. package/pkg/commands/sscan.ts +0 -22
  197. package/pkg/commands/strlen.test.ts +0 -16
  198. package/pkg/commands/strlen.ts +0 -10
  199. package/pkg/commands/sunion.test.ts +0 -22
  200. package/pkg/commands/sunion.ts +0 -10
  201. package/pkg/commands/sunionstore.test.ts +0 -29
  202. package/pkg/commands/sunionstore.ts +0 -10
  203. package/pkg/commands/time.test.ts +0 -11
  204. package/pkg/commands/time.ts +0 -9
  205. package/pkg/commands/touch.test.ts +0 -20
  206. package/pkg/commands/touch.ts +0 -10
  207. package/pkg/commands/ttl.test.ts +0 -17
  208. package/pkg/commands/ttl.ts +0 -10
  209. package/pkg/commands/type.test.ts +0 -72
  210. package/pkg/commands/type.ts +0 -11
  211. package/pkg/commands/unlink.test.ts +0 -21
  212. package/pkg/commands/unlink.ts +0 -10
  213. package/pkg/commands/zadd.test.ts +0 -177
  214. package/pkg/commands/zadd.ts +0 -64
  215. package/pkg/commands/zcard.test.ts +0 -15
  216. package/pkg/commands/zcard.ts +0 -10
  217. package/pkg/commands/zcount.test.ts +0 -15
  218. package/pkg/commands/zcount.ts +0 -9
  219. package/pkg/commands/zincrby.test.ts +0 -20
  220. package/pkg/commands/zincrby.ts +0 -9
  221. package/pkg/commands/zinterstore.test.ts +0 -239
  222. package/pkg/commands/zinterstore.ts +0 -55
  223. package/pkg/commands/zlexcount.test.ts +0 -22
  224. package/pkg/commands/zlexcount.ts +0 -9
  225. package/pkg/commands/zpopmax.test.ts +0 -45
  226. package/pkg/commands/zpopmax.ts +0 -13
  227. package/pkg/commands/zpopmin.test.ts +0 -49
  228. package/pkg/commands/zpopmin.ts +0 -13
  229. package/pkg/commands/zrange.test.ts +0 -52
  230. package/pkg/commands/zrange.ts +0 -22
  231. package/pkg/commands/zrank.test.ts +0 -22
  232. package/pkg/commands/zrank.ts +0 -10
  233. package/pkg/commands/zrem.test.ts +0 -20
  234. package/pkg/commands/zrem.ts +0 -10
  235. package/pkg/commands/zremrangebylex.test.ts +0 -26
  236. package/pkg/commands/zremrangebylex.ts +0 -9
  237. package/pkg/commands/zremrangebyrank.test.ts +0 -27
  238. package/pkg/commands/zremrangebyrank.ts +0 -9
  239. package/pkg/commands/zremrangebyscore.test.ts +0 -24
  240. package/pkg/commands/zremrangebyscore.ts +0 -9
  241. package/pkg/commands/zrevrank.test.ts +0 -22
  242. package/pkg/commands/zrevrank.ts +0 -10
  243. package/pkg/commands/zscan.test.ts +0 -50
  244. package/pkg/commands/zscan.ts +0 -22
  245. package/pkg/commands/zscore.test.ts +0 -18
  246. package/pkg/commands/zscore.ts +0 -10
  247. package/pkg/commands/zunionstore.test.ts +0 -215
  248. package/pkg/commands/zunionstore.ts +0 -55
  249. package/pkg/commands/zz.ts +0 -1
  250. package/pkg/error.ts +0 -9
  251. package/pkg/fastly.ts +0 -54
  252. package/pkg/http.test.ts +0 -34
  253. package/pkg/http.ts +0 -62
  254. package/pkg/index.ts +0 -2
  255. package/pkg/nodejs.ts +0 -83
  256. package/pkg/pipeline.test.ts +0 -177
  257. package/pkg/pipeline.ts +0 -999
  258. package/pkg/redis.ts +0 -930
  259. package/pkg/test-utils.ts +0 -41
  260. package/pkg/types.ts +0 -4
  261. package/pkg/util.ts +0 -22
  262. package/pnpm-lock.yaml +0 -3940
  263. package/tsconfig.json +0 -100
  264. package/tsconfig.module.json +0 -8
  265. package/tsup.config.ts +0 -16
@@ -1,21 +0,0 @@
1
- import { keygen, newHttpClient } from "../test-utils"
2
- import { randomUUID } from "crypto"
3
- import { it, expect, afterAll } from "@jest/globals"
4
- import { SAddCommand } from "./sadd"
5
- import { SDiffStoreCommand } from "./sdiffstore"
6
- const client = newHttpClient()
7
-
8
- const { newKey, cleanup } = keygen()
9
- afterAll(cleanup)
10
-
11
- it("returns the diff", async () => {
12
- const key1 = newKey()
13
- const member1 = randomUUID()
14
- const key2 = newKey()
15
- const member2 = randomUUID()
16
- const destination = newKey()
17
- await new SAddCommand(key1, member1).exec(client)
18
- await new SAddCommand(key2, member2).exec(client)
19
- const res = await new SDiffStoreCommand(destination, key1, key2).exec(client)
20
- expect(res).toEqual(1)
21
- })
@@ -1,10 +0,0 @@
1
- import { NonEmptyArray } from "../types"
2
- import { Command } from "../command"
3
- /**
4
- * @see https://redis.io/commands/sdiffstpre
5
- */
6
- export class SDiffStoreCommand extends Command<number, number> {
7
- constructor(destination: string, ...keys: NonEmptyArray<string>) {
8
- super(["sdiffstore", destination, ...keys])
9
- }
10
- }
@@ -1,112 +0,0 @@
1
- import { keygen, newHttpClient } from "../test-utils"
2
- import { randomUUID } from "crypto"
3
- import { describe, it, expect, afterAll } from "@jest/globals"
4
- import { GetCommand } from "./get"
5
- import { SetCommand } from "./set"
6
-
7
- const client = newHttpClient()
8
-
9
- const { newKey, cleanup } = keygen()
10
- afterAll(cleanup)
11
- describe("without options", () => {
12
- it("sets value", async () => {
13
- const key = newKey()
14
- const value = randomUUID()
15
-
16
- const res = await new SetCommand(key, value).exec(client)
17
- expect(res).toEqual("OK")
18
- const res2 = await new GetCommand(key).exec(client)
19
- expect(res2).toEqual(value)
20
- })
21
- })
22
- describe("ex", () => {
23
- it("sets value", async () => {
24
- const key = newKey()
25
- const value = randomUUID()
26
-
27
- const res = await new SetCommand(key, value, { ex: 1 }).exec(client)
28
- expect(res).toEqual("OK")
29
- const res2 = await new GetCommand(key).exec(client)
30
- expect(res2).toEqual(value)
31
- await new Promise((res) => setTimeout(res, 2000))
32
-
33
- const res3 = await new GetCommand(key).exec(client)
34
- expect(res3).toEqual(null)
35
- })
36
- })
37
- describe("px", () => {
38
- it("sets value", async () => {
39
- const key = newKey()
40
- const value = randomUUID()
41
-
42
- const res = await new SetCommand(key, value, { px: 1000 }).exec(client)
43
- expect(res).toEqual("OK")
44
- const res2 = await new GetCommand(key).exec(client)
45
- expect(res2).toEqual(value)
46
- await new Promise((res) => setTimeout(res, 2000))
47
-
48
- const res3 = await new GetCommand(key).exec(client)
49
-
50
- expect(res3).toBeNull()
51
- })
52
- })
53
- describe("nx", () => {
54
- describe("when key exists", () => {
55
- it("does nothing", async () => {
56
- const key = newKey()
57
- const value = randomUUID()
58
- const newValue = randomUUID()
59
-
60
- await new SetCommand(key, value).exec(client)
61
- const res = await new SetCommand(key, newValue, {
62
- nx: true,
63
- }).exec(client)
64
- expect(res).toBeNull()
65
- const res2 = await new GetCommand(key).exec(client)
66
- expect(res2).toEqual(value)
67
- })
68
- })
69
- describe("when key does not exists", () => {
70
- it("overwrites key", async () => {
71
- const key = newKey()
72
- const value = randomUUID()
73
-
74
- const res = await new SetCommand(key, value, {
75
- nx: true,
76
- }).exec(client)
77
- expect(res).toEqual("OK")
78
- const res2 = await new GetCommand(key).exec(client)
79
- expect(res2).toEqual(value)
80
- })
81
- })
82
- })
83
- describe("xx", () => {
84
- describe("when key exists", () => {
85
- it("overwrites key", async () => {
86
- const key = newKey()
87
- const value = randomUUID()
88
- const newValue = randomUUID()
89
-
90
- await new SetCommand(key, value).exec(client)
91
- const res = await new SetCommand(key, newValue, {
92
- xx: true,
93
- }).exec(client)
94
- expect(res).toEqual("OK")
95
- const res2 = await new GetCommand(key).exec(client)
96
- expect(res2).toEqual(newValue)
97
- })
98
- })
99
- describe("when key does not exists", () => {
100
- it("does nothing", async () => {
101
- const key = newKey()
102
- const value = randomUUID()
103
-
104
- const res = await new SetCommand(key, value, {
105
- xx: true,
106
- }).exec(client)
107
- expect(res).toBeNull()
108
- const res2 = await new GetCommand(key).exec(client)
109
- expect(res2).toBeNull()
110
- })
111
- })
112
- })
@@ -1,53 +0,0 @@
1
- import { Command } from "../command"
2
-
3
- export type SetCommandOptions = (
4
- | {
5
- ex: number
6
- px?: never
7
- }
8
- | {
9
- ex?: never
10
- px: number
11
- }
12
- | {
13
- ex?: never
14
- px?: never
15
- }
16
- ) &
17
- (
18
- | {
19
- nx: true
20
- xx?: never
21
- }
22
- | {
23
- xx: true
24
- nx?: never
25
- }
26
- | {
27
- xx?: never
28
- nx?: never
29
- }
30
- )
31
-
32
- /**
33
- * @see https://redis.io/commands/set
34
- */
35
- export class SetCommand<TData, TResult = "OK"> extends Command<TData, TResult> {
36
- constructor(key: string, value: TData, opts?: SetCommandOptions) {
37
- const command: unknown[] = ["set", key, value]
38
- if (opts) {
39
- if ("ex" in opts && typeof opts.ex === "number") {
40
- command.push("ex", opts.ex)
41
- } else if ("px" in opts && typeof opts.px === "number") {
42
- command.push("px", opts.px)
43
- }
44
-
45
- if ("nx" in opts && opts.nx) {
46
- command.push("nx")
47
- } else if ("xx" in opts && opts.xx) {
48
- command.push("xx")
49
- }
50
- }
51
- super(command)
52
- }
53
- }
@@ -1,16 +0,0 @@
1
- import { keygen, newHttpClient } from "../test-utils"
2
- import { SetBitCommand } from "./setbit"
3
- import { it, expect, afterAll } from "@jest/globals"
4
- const client = newHttpClient()
5
-
6
- const { newKey, cleanup } = keygen()
7
- afterAll(cleanup)
8
-
9
- it("returns the original bit", async () => {
10
- const key = newKey()
11
- const res = await new SetBitCommand(key, 0, 1).exec(client)
12
- expect(res).toBe(0)
13
- const res2 = await new SetBitCommand(key, 0, 1).exec(client)
14
-
15
- expect(res2).toBe(1)
16
- })
@@ -1,10 +0,0 @@
1
- import { Command } from "../command"
2
- /**
3
- * @see https://redis.io/commands/setbit
4
- */
5
-
6
- export class SetBitCommand extends Command<0 | 1, "0" | "1"> {
7
- constructor(key: string, offset: number, value: 0 | 1) {
8
- super(["setbit", key, offset, value])
9
- }
10
- }
@@ -1,22 +0,0 @@
1
- import { keygen, newHttpClient } from "../test-utils"
2
- import { randomUUID } from "crypto"
3
- import { it, expect, afterAll } from "@jest/globals"
4
- import { SetExCommand } from "./setex"
5
- import { GetCommand } from "./get"
6
-
7
- const client = newHttpClient()
8
-
9
- const { newKey, cleanup } = keygen()
10
- afterAll(cleanup)
11
- it("sets value", async () => {
12
- const key = newKey()
13
- const value = randomUUID()
14
-
15
- const res = await new SetExCommand(key, 1, value).exec(client)
16
-
17
- expect(res).toEqual("OK")
18
- await new Promise((res) => setTimeout(res, 2000))
19
- const res2 = await new GetCommand(key).exec(client)
20
-
21
- expect(res2).toBeNull()
22
- })
@@ -1,10 +0,0 @@
1
- import { Command } from "../command"
2
-
3
- /**
4
- * @see https://redis.io/commands/setex
5
- */
6
- export class SetExCommand<TData = string> extends Command<"OK", "OK"> {
7
- constructor(key: string, ttl: number, value: TData) {
8
- super(["setex", key, ttl, value])
9
- }
10
- }
@@ -1,27 +0,0 @@
1
- import { keygen, newHttpClient } from "../test-utils"
2
- import { randomUUID } from "crypto"
3
- import { it, expect, afterAll } from "@jest/globals"
4
- import { SetCommand } from "./set"
5
- import { GetCommand } from "./get"
6
- import { SetNxCommand } from "./setnx"
7
-
8
- const client = newHttpClient()
9
-
10
- const { newKey, cleanup } = keygen()
11
- afterAll(cleanup)
12
-
13
- it("sets value", async () => {
14
- const key = newKey()
15
- const value = randomUUID()
16
- const newValue = randomUUID()
17
-
18
- const res = await new SetCommand(key, value).exec(client)
19
-
20
- expect(res).toEqual("OK")
21
- const res2 = await new SetNxCommand(key, newValue).exec(client)
22
-
23
- expect(res2).toEqual(0)
24
- const res3 = await new GetCommand(key).exec(client)
25
-
26
- expect(res3).toEqual(value)
27
- })
@@ -1,10 +0,0 @@
1
- import { Command } from "../command"
2
-
3
- /**
4
- * @see https://redis.io/commands/setnx
5
- */
6
- export class SetNxCommand<TData = string> extends Command<number, number> {
7
- constructor(key: string, value: TData) {
8
- super(["setnx", key, value])
9
- }
10
- }
@@ -1,25 +0,0 @@
1
- import { keygen, newHttpClient } from "../test-utils"
2
- import { it, expect, afterAll } from "@jest/globals"
3
- import { SetCommand } from "./set"
4
- import { SetRangeCommand } from "./setrange"
5
- import { GetCommand } from "./get"
6
-
7
- const client = newHttpClient()
8
-
9
- const { newKey, cleanup } = keygen()
10
- afterAll(cleanup)
11
-
12
- it("sets value", async () => {
13
- const key = newKey()
14
- const value = "originalValue"
15
-
16
- const res = await new SetCommand(key, value).exec(client)
17
-
18
- expect(res).toEqual("OK")
19
- const res2 = await new SetRangeCommand(key, 4, "helloWorld").exec(client)
20
-
21
- expect(res2).toEqual(14)
22
- const res3 = await new GetCommand(key).exec(client)
23
-
24
- expect(res3).toEqual("orighelloWorld")
25
- })
@@ -1,10 +0,0 @@
1
- import { Command } from "../command"
2
-
3
- /**
4
- * @see https://redis.io/commands/setrange
5
- */
6
- export class SetRangeCommand extends Command<number, number> {
7
- constructor(key: string, offset: number, value: string) {
8
- super(["setrange", key, offset, value])
9
- }
10
- }
@@ -1,36 +0,0 @@
1
- import { keygen, newHttpClient } from "../test-utils"
2
- import { randomUUID } from "crypto"
3
- import { describe, it, expect, afterAll } from "@jest/globals"
4
- import { SAddCommand } from "./sadd"
5
- import { SInterCommand } from "./sinter"
6
- const client = newHttpClient()
7
-
8
- const { newKey, cleanup } = keygen()
9
- afterAll(cleanup)
10
-
11
- describe("with single set", () => {
12
- it("returns the members of the set", async () => {
13
- const key = newKey()
14
- const value1 = { v: randomUUID() }
15
- const value2 = { v: randomUUID() }
16
- await new SAddCommand(key, value1, value2).exec(client)
17
- const res = await new SInterCommand<{ v: string }>(key).exec(client)
18
- expect(res).toHaveLength(2)
19
- expect(res.map(({ v }) => v).includes(value1.v)).toBe(true)
20
- expect(res.map(({ v }) => v).includes(value2.v)).toBe(true)
21
- })
22
- })
23
-
24
- describe("with multiple sets", () => {
25
- it("returns the members of the set", async () => {
26
- const key1 = newKey()
27
- const key2 = newKey()
28
- const value1 = { v: randomUUID() }
29
- const value2 = { v: randomUUID() }
30
- const value3 = { v: randomUUID() }
31
- await new SAddCommand(key1, value1, value2).exec(client)
32
- await new SAddCommand(key2, value2, value3).exec(client)
33
- const res = await new SInterCommand(key1, key2).exec(client)
34
- expect(res).toEqual([value2])
35
- })
36
- })
@@ -1,9 +0,0 @@
1
- import { Command } from "../command"
2
- /**
3
- * @see https://redis.io/commands/sinter
4
- */
5
- export class SInterCommand<TData = string> extends Command<TData[], unknown[]> {
6
- constructor(key: string, ...keys: string[]) {
7
- super(["sinter", key, ...keys])
8
- }
9
- }
@@ -1,21 +0,0 @@
1
- import { keygen, newHttpClient } from "../test-utils"
2
- import { randomUUID } from "crypto"
3
- import { it, expect, afterAll } from "@jest/globals"
4
- import { SAddCommand } from "./sadd"
5
- import { SInterStoreCommand } from "./sinterstore"
6
- const client = newHttpClient()
7
-
8
- const { newKey, cleanup } = keygen()
9
- afterAll(cleanup)
10
-
11
- it("stores the intersection", async () => {
12
- const key1 = newKey()
13
- const member1 = randomUUID()
14
- const key2 = newKey()
15
- const member2 = member1
16
- const destination = newKey()
17
- await new SAddCommand(key1, member1).exec(client)
18
- await new SAddCommand(key2, member2).exec(client)
19
- const res = await new SInterStoreCommand(destination, key1, key2).exec(client)
20
- expect(res).toEqual(1)
21
- })
@@ -1,9 +0,0 @@
1
- import { Command } from "../command"
2
- /**
3
- * @see https://redis.io/commands/sinterstore
4
- */
5
- export class SInterStoreCommand<TData = string> extends Command<TData[], unknown[]> {
6
- constructor(destination: string, key: string, ...keys: string[]) {
7
- super(["sinterstore", destination, key, ...keys])
8
- }
9
- }
@@ -1,30 +0,0 @@
1
- import { keygen, newHttpClient } from "../test-utils"
2
- import { randomUUID } from "crypto"
3
- import { SAddCommand } from "./sadd"
4
- import { SIsMemberCommand } from "./sismember"
5
- import { describe, it, expect, afterAll } from "@jest/globals"
6
- const client = newHttpClient()
7
-
8
- const { newKey, cleanup } = keygen()
9
- afterAll(cleanup)
10
-
11
- describe("when member exists", () => {
12
- it("returns 1", async () => {
13
- const key = newKey()
14
- const value = randomUUID()
15
- await new SAddCommand(key, value).exec(client)
16
- const res = await new SIsMemberCommand(key, value).exec(client)
17
- expect(res).toBe(1)
18
- })
19
- })
20
-
21
- describe("when member exists", () => {
22
- it("returns 1", async () => {
23
- const key = newKey()
24
- const value1 = randomUUID()
25
- const value2 = randomUUID()
26
- await new SAddCommand(key, value1).exec(client)
27
- const res = await new SIsMemberCommand(key, value2).exec(client)
28
- expect(res).toBe(0)
29
- })
30
- })
@@ -1,9 +0,0 @@
1
- import { Command } from "../command"
2
- /**
3
- * @see https://redis.io/commands/sismember
4
- */
5
- export class SIsMemberCommand<TData = string> extends Command<0 | 1, "0" | "1"> {
6
- constructor(key: string, member: TData) {
7
- super(["sismember", key, member])
8
- }
9
- }
@@ -1,22 +0,0 @@
1
- import { keygen, newHttpClient } from "../test-utils"
2
- import { randomUUID } from "crypto"
3
- import { it, expect, afterAll } from "@jest/globals"
4
- import { SAddCommand } from "./sadd"
5
- import { SMembersCommand } from "./smembers"
6
- const client = newHttpClient()
7
-
8
- const { newKey, cleanup } = keygen()
9
- afterAll(cleanup)
10
-
11
- it("returns all members of the set", async () => {
12
- const key = newKey()
13
- const value1 = { v: randomUUID() }
14
- const value2 = { v: randomUUID() }
15
-
16
- await new SAddCommand(key, value1, value2).exec(client)
17
- const res = await new SMembersCommand<{ v: string }>(key).exec(client)
18
- expect(res).toBeDefined()
19
- expect(res!.length).toBe(2)
20
- expect(res!.map(({ v }) => v).includes(value1.v)).toBe(true)
21
- expect(res!.map(({ v }) => v).includes(value2.v)).toBe(true)
22
- })
@@ -1,10 +0,0 @@
1
- import { Command } from "../command"
2
-
3
- /**
4
- * @see https://redis.io/commands/smembers
5
- */
6
- export class SMembersCommand<TData = string> extends Command<TData[], unknown[]> {
7
- constructor(key: string) {
8
- super(["smembers", key])
9
- }
10
- }
@@ -1,18 +0,0 @@
1
- import { keygen, newHttpClient } from "../test-utils"
2
- import { randomUUID } from "crypto"
3
- import { it, expect, afterAll } from "@jest/globals"
4
- import { SAddCommand } from "./sadd"
5
- import { SMoveCommand } from "./smove"
6
- const client = newHttpClient()
7
-
8
- const { newKey, cleanup } = keygen()
9
- afterAll(cleanup)
10
-
11
- it("moves the member", async () => {
12
- const source = newKey()
13
- const destination = newKey()
14
- const member = randomUUID()
15
- await new SAddCommand(source, member).exec(client)
16
- const res = await new SMoveCommand(source, destination, member).exec(client)
17
- expect(res).toBe(1)
18
- })
@@ -1,9 +0,0 @@
1
- import { Command } from "../command"
2
- /**
3
- * @see https://redis.io/commands/smove
4
- */
5
- export class SMoveCommand<TData> extends Command<0 | 1, "0" | "1"> {
6
- constructor(source: string, destination: string, member: TData) {
7
- super(["smove", source, destination, member])
8
- }
9
- }
@@ -1,35 +0,0 @@
1
- import { keygen, newHttpClient } from "../test-utils"
2
- import { randomUUID } from "crypto"
3
- import { describe, it, expect, afterAll } from "@jest/globals"
4
- import { SAddCommand } from "./sadd"
5
- import { SPopCommand } from "./spop"
6
- const client = newHttpClient()
7
-
8
- const { newKey, cleanup } = keygen()
9
- afterAll(cleanup)
10
-
11
- describe("without count", () => {
12
- it("returns the first element", async () => {
13
- const key = newKey()
14
- const member = randomUUID()
15
- await new SAddCommand(key, member).exec(client)
16
- const res = await new SPopCommand(key).exec(client)
17
- expect(res).toBe(member)
18
- })
19
- })
20
-
21
- describe("with count", () => {
22
- it("returns the first n elements", async () => {
23
- const key = newKey()
24
- const member1 = randomUUID()
25
- const member2 = randomUUID()
26
- const member3 = randomUUID()
27
- const member4 = randomUUID()
28
- await new SAddCommand(key, member1, member2, member3, member4).exec(client)
29
- const res = await new SPopCommand<string[]>(key, 2).exec(client)
30
- expect(res).not.toBeNull()
31
- expect(res!).toHaveLength(2)
32
- expect([member1, member2, member3, member4].includes(res![0])).toBe(true)
33
- expect([member1, member2, member3, member4].includes(res![1])).toBe(true)
34
- })
35
- })
@@ -1,13 +0,0 @@
1
- import { Command } from "../command"
2
- /**
3
- * @see https://redis.io/commands/spop
4
- */
5
- export class SPopCommand<TData = number> extends Command<TData | null, string | null> {
6
- constructor(key: string, count?: number) {
7
- const command: unknown[] = ["spop", key]
8
- if (typeof count === "number") {
9
- command.push(count)
10
- }
11
- super(command)
12
- }
13
- }
@@ -1,32 +0,0 @@
1
- import { keygen, newHttpClient } from "../test-utils"
2
- import { randomUUID } from "crypto"
3
- import { describe, it, expect, afterAll } from "@jest/globals"
4
- import { SAddCommand } from "./sadd"
5
- import { SRandMemberCommand } from "./srandmember"
6
- const client = newHttpClient()
7
-
8
- const { newKey, cleanup } = keygen()
9
- afterAll(cleanup)
10
-
11
- describe("without opts", () => {
12
- it("returns a random key", async () => {
13
- const key = newKey()
14
- const member = randomUUID()
15
- await new SAddCommand(key, member).exec(client)
16
- const res = await new SRandMemberCommand(key).exec(client)
17
- expect(res).toBeDefined()
18
- expect(res).toBe(member)
19
- })
20
- })
21
-
22
- describe("with count", () => {
23
- it("returns a random key", async () => {
24
- const key = newKey()
25
- const member1 = randomUUID()
26
- const member2 = randomUUID()
27
- await new SAddCommand(key, member1, member2).exec(client)
28
- const res = await new SRandMemberCommand(key, 2).exec(client)
29
- expect(res).toBeDefined()
30
- expect(res).toHaveLength(2)
31
- })
32
- })
@@ -1,13 +0,0 @@
1
- import { Command } from "../command"
2
- /**
3
- * @see https://redis.io/commands/srandmember
4
- */
5
- export class SRandMemberCommand<TData> extends Command<TData | null, string | null> {
6
- constructor(key: string, count?: number) {
7
- const command: unknown[] = ["srandmember", key]
8
- if (typeof count === "number") {
9
- command.push(count)
10
- }
11
- super(command)
12
- }
13
- }
@@ -1,18 +0,0 @@
1
- import { keygen, newHttpClient } from "../test-utils"
2
- import { randomUUID } from "crypto"
3
- import { SAddCommand } from "./sadd"
4
- import { it, expect, afterAll } from "@jest/globals"
5
- import { SRemCommand } from "./srem"
6
- const client = newHttpClient()
7
-
8
- const { newKey, cleanup } = keygen()
9
- afterAll(cleanup)
10
-
11
- it("returns the number of removed members", async () => {
12
- const key = newKey()
13
- const value1 = randomUUID()
14
- const value2 = randomUUID()
15
- await new SAddCommand(key, value1, value2).exec(client)
16
- const res = await new SRemCommand(key, value1).exec(client)
17
- expect(res).toBe(1)
18
- })
@@ -1,10 +0,0 @@
1
- import { NonEmptyArray } from "../types"
2
- import { Command } from "../command"
3
- /**
4
- * @see https://redis.io/commands/srem
5
- */
6
- export class SRemCommand<TData = string> extends Command<number, number> {
7
- constructor(key: string, ...members: NonEmptyArray<TData>) {
8
- super(["srem", key, ...members])
9
- }
10
- }