@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.
- package/{dist/chunk-7YUZYRJS.mjs → chunk-7YUZYRJS.mjs} +0 -0
- package/{dist/chunk-FJSI5EBJ.mjs → chunk-FJSI5EBJ.mjs} +0 -0
- package/{dist/chunk-U7OXAQMQ.mjs → chunk-U7OXAQMQ.mjs} +0 -0
- package/{dist/chunk-Y5TC4HX2.mjs → chunk-Y5TC4HX2.mjs} +0 -0
- package/{dist/chunk-ZIB6XPPC.mjs → chunk-ZIB6XPPC.mjs} +0 -0
- package/{dist/cloudflare.d.ts → cloudflare.d.ts} +0 -0
- package/{dist/cloudflare.js → cloudflare.js} +0 -0
- package/{dist/cloudflare.mjs → cloudflare.mjs} +0 -0
- package/{dist/commands.d.ts → commands.d.ts} +0 -0
- package/{dist/commands.js → commands.js} +0 -0
- package/{dist/commands.mjs → commands.mjs} +0 -0
- package/{dist/fastly.d.ts → fastly.d.ts} +0 -0
- package/{dist/fastly.js → fastly.js} +0 -0
- package/{dist/fastly.mjs → fastly.mjs} +0 -0
- package/{dist/http.d.ts → http.d.ts} +0 -0
- package/{dist/http.js → http.js} +0 -0
- package/{dist/http.mjs → http.mjs} +0 -0
- package/{dist/index.d.ts → index.d.ts} +0 -0
- package/{dist/index.js → index.js} +0 -0
- package/{dist/index.mjs → index.mjs} +0 -0
- package/{dist/nodejs.d.ts → nodejs.d.ts} +0 -0
- package/{dist/nodejs.js → nodejs.js} +0 -0
- package/{dist/nodejs.mjs → nodejs.mjs} +0 -0
- package/package.json +1 -1
- package/{dist/redis-dd052782.d.ts → redis-dd052782.d.ts} +0 -0
- package/{dist/zunionstore-dffa797d.d.ts → zunionstore-dffa797d.d.ts} +0 -0
- package/.eslintrc.js +0 -49
- package/.prettierrc.js +0 -7
- package/LICENSE +0 -21
- package/dist/package.json +0 -1
- package/jest.config.js +0 -195
- package/pkg/cloudflare.ts +0 -77
- package/pkg/command.ts +0 -40
- package/pkg/commands/append.test.ts +0 -28
- package/pkg/commands/append.ts +0 -10
- package/pkg/commands/bitcount.test.ts +0 -36
- package/pkg/commands/bitcount.ts +0 -19
- package/pkg/commands/bitop.test.ts +0 -44
- package/pkg/commands/bitop.ts +0 -22
- package/pkg/commands/bitpos.test.ts +0 -26
- package/pkg/commands/bitpos.ts +0 -10
- package/pkg/commands/dbsize.test.ts +0 -17
- package/pkg/commands/dbsize.ts +0 -10
- package/pkg/commands/decr.test.ts +0 -22
- package/pkg/commands/decr.ts +0 -10
- package/pkg/commands/decrby.test.ts +0 -23
- package/pkg/commands/decrby.ts +0 -10
- package/pkg/commands/del.test.ts +0 -38
- package/pkg/commands/del.ts +0 -11
- package/pkg/commands/echo.test.ts +0 -11
- package/pkg/commands/echo.ts +0 -10
- package/pkg/commands/exists.test.ts +0 -37
- package/pkg/commands/exists.ts +0 -11
- package/pkg/commands/expire.test.ts +0 -22
- package/pkg/commands/expire.ts +0 -10
- package/pkg/commands/expireat.test.ts +0 -24
- package/pkg/commands/expireat.ts +0 -10
- package/pkg/commands/flushall.test.ts +0 -17
- package/pkg/commands/flushall.ts +0 -13
- package/pkg/commands/flushdb.test.ts +0 -17
- package/pkg/commands/flushdb.ts +0 -13
- package/pkg/commands/get.test.ts +0 -34
- package/pkg/commands/get.ts +0 -10
- package/pkg/commands/getbit.test.ts +0 -16
- package/pkg/commands/getbit.ts +0 -10
- package/pkg/commands/getrange.test.ts +0 -25
- package/pkg/commands/getrange.ts +0 -10
- package/pkg/commands/getset.test.ts +0 -33
- package/pkg/commands/getset.ts +0 -10
- package/pkg/commands/hdel.test.ts +0 -30
- package/pkg/commands/hdel.ts +0 -10
- package/pkg/commands/hexists.test.ts +0 -31
- package/pkg/commands/hexists.ts +0 -10
- package/pkg/commands/hget.test.ts +0 -47
- package/pkg/commands/hget.ts +0 -10
- package/pkg/commands/hgetall.test.ts +0 -32
- package/pkg/commands/hgetall.ts +0 -35
- package/pkg/commands/hincrby.test.ts +0 -27
- package/pkg/commands/hincrby.ts +0 -10
- package/pkg/commands/hincrbyfloat.test.ts +0 -25
- package/pkg/commands/hincrbyfloat.ts +0 -10
- package/pkg/commands/hkeys.test.ts +0 -22
- package/pkg/commands/hkeys.ts +0 -10
- package/pkg/commands/hlen.test.ts +0 -24
- package/pkg/commands/hlen.ts +0 -10
- package/pkg/commands/hmget.test.ts +0 -48
- package/pkg/commands/hmget.ts +0 -41
- package/pkg/commands/hmset.test.ts +0 -24
- package/pkg/commands/hmset.ts +0 -10
- package/pkg/commands/hscan.test.ts +0 -46
- package/pkg/commands/hscan.ts +0 -22
- package/pkg/commands/hset.test.ts +0 -21
- package/pkg/commands/hset.ts +0 -10
- package/pkg/commands/hsetnx.test.ts +0 -37
- package/pkg/commands/hsetnx.ts +0 -10
- package/pkg/commands/hstrlen.test.ts +0 -24
- package/pkg/commands/hstrlen.ts +0 -10
- package/pkg/commands/hvals.test.ts +0 -23
- package/pkg/commands/hvals.ts +0 -10
- package/pkg/commands/incr.test.ts +0 -23
- package/pkg/commands/incr.ts +0 -10
- package/pkg/commands/incrby.test.ts +0 -23
- package/pkg/commands/incrby.ts +0 -10
- package/pkg/commands/incrbyfloat.test.ts +0 -24
- package/pkg/commands/incrbyfloat.ts +0 -10
- package/pkg/commands/index.ts +0 -107
- package/pkg/commands/keys.test.ts +0 -17
- package/pkg/commands/keys.ts +0 -10
- package/pkg/commands/lindex.test.ts +0 -33
- package/pkg/commands/lindex.ts +0 -7
- package/pkg/commands/linsert.test.ts +0 -19
- package/pkg/commands/linsert.ts +0 -6
- package/pkg/commands/llen.test.ts +0 -26
- package/pkg/commands/llen.ts +0 -10
- package/pkg/commands/lpop.test.ts +0 -27
- package/pkg/commands/lpop.ts +0 -10
- package/pkg/commands/lpush.test.ts +0 -17
- package/pkg/commands/lpush.ts +0 -11
- package/pkg/commands/lpushx.test.ts +0 -29
- package/pkg/commands/lpushx.ts +0 -11
- package/pkg/commands/lrange.test.ts +0 -22
- package/pkg/commands/lrange.ts +0 -7
- package/pkg/commands/lrem.test.ts +0 -19
- package/pkg/commands/lrem.ts +0 -6
- package/pkg/commands/lset.test.ts +0 -40
- package/pkg/commands/lset.ts +0 -7
- package/pkg/commands/ltrim.test.ts +0 -29
- package/pkg/commands/ltrim.ts +0 -7
- package/pkg/commands/mget.test.ts +0 -44
- package/pkg/commands/mget.ts +0 -9
- package/pkg/commands/mset.test.ts +0 -24
- package/pkg/commands/mset.ts +0 -10
- package/pkg/commands/msetnx.test.ts +0 -46
- package/pkg/commands/msetnx.ts +0 -10
- package/pkg/commands/persist.test.ts +0 -22
- package/pkg/commands/persist.ts +0 -10
- package/pkg/commands/pexpire.test.ts +0 -24
- package/pkg/commands/pexpire.ts +0 -10
- package/pkg/commands/pexpireat.test.ts +0 -24
- package/pkg/commands/pexpireat.ts +0 -10
- package/pkg/commands/ping.test.ts +0 -19
- package/pkg/commands/ping.ts +0 -13
- package/pkg/commands/psetex.test.ts +0 -23
- package/pkg/commands/psetex.ts +0 -10
- package/pkg/commands/pttl.test.ts +0 -17
- package/pkg/commands/pttl.ts +0 -10
- package/pkg/commands/randomkey.test.ts +0 -17
- package/pkg/commands/randomkey.ts +0 -10
- package/pkg/commands/rename.test.ts +0 -18
- package/pkg/commands/rename.ts +0 -10
- package/pkg/commands/renamenx.test.ts +0 -32
- package/pkg/commands/renamenx.ts +0 -10
- package/pkg/commands/rpop.test.ts +0 -27
- package/pkg/commands/rpop.ts +0 -10
- package/pkg/commands/rpush.test.ts +0 -17
- package/pkg/commands/rpush.ts +0 -11
- package/pkg/commands/rpushx.test.ts +0 -29
- package/pkg/commands/rpushx.ts +0 -11
- package/pkg/commands/sadd.test.ts +0 -16
- package/pkg/commands/sadd.ts +0 -11
- package/pkg/commands/scan.test.ts +0 -50
- package/pkg/commands/scan.ts +0 -21
- package/pkg/commands/scard.test.ts +0 -15
- package/pkg/commands/scard.ts +0 -9
- package/pkg/commands/sdiff.test.ts +0 -20
- package/pkg/commands/sdiff.ts +0 -9
- package/pkg/commands/sdiffstore.test.ts +0 -21
- package/pkg/commands/sdiffstore.ts +0 -10
- package/pkg/commands/set.test.ts +0 -112
- package/pkg/commands/set.ts +0 -53
- package/pkg/commands/setbit.test.ts +0 -16
- package/pkg/commands/setbit.ts +0 -10
- package/pkg/commands/setex.test.ts +0 -22
- package/pkg/commands/setex.ts +0 -10
- package/pkg/commands/setnx.test.ts +0 -27
- package/pkg/commands/setnx.ts +0 -10
- package/pkg/commands/setrange.test.ts +0 -25
- package/pkg/commands/setrange.ts +0 -10
- package/pkg/commands/sinter.test.ts +0 -36
- package/pkg/commands/sinter.ts +0 -9
- package/pkg/commands/sinterstore.test.ts +0 -21
- package/pkg/commands/sinterstore.ts +0 -9
- package/pkg/commands/sismember.test.ts +0 -30
- package/pkg/commands/sismember.ts +0 -9
- package/pkg/commands/smembers.test.ts +0 -22
- package/pkg/commands/smembers.ts +0 -10
- package/pkg/commands/smove.test.ts +0 -18
- package/pkg/commands/smove.ts +0 -9
- package/pkg/commands/spop.test.ts +0 -35
- package/pkg/commands/spop.ts +0 -13
- package/pkg/commands/srandmember.test.ts +0 -32
- package/pkg/commands/srandmember.ts +0 -13
- package/pkg/commands/srem.test.ts +0 -18
- package/pkg/commands/srem.ts +0 -10
- package/pkg/commands/sscan.test.ts +0 -50
- package/pkg/commands/sscan.ts +0 -22
- package/pkg/commands/strlen.test.ts +0 -16
- package/pkg/commands/strlen.ts +0 -10
- package/pkg/commands/sunion.test.ts +0 -22
- package/pkg/commands/sunion.ts +0 -10
- package/pkg/commands/sunionstore.test.ts +0 -29
- package/pkg/commands/sunionstore.ts +0 -10
- package/pkg/commands/time.test.ts +0 -11
- package/pkg/commands/time.ts +0 -9
- package/pkg/commands/touch.test.ts +0 -20
- package/pkg/commands/touch.ts +0 -10
- package/pkg/commands/ttl.test.ts +0 -17
- package/pkg/commands/ttl.ts +0 -10
- package/pkg/commands/type.test.ts +0 -72
- package/pkg/commands/type.ts +0 -11
- package/pkg/commands/unlink.test.ts +0 -21
- package/pkg/commands/unlink.ts +0 -10
- package/pkg/commands/zadd.test.ts +0 -177
- package/pkg/commands/zadd.ts +0 -64
- package/pkg/commands/zcard.test.ts +0 -15
- package/pkg/commands/zcard.ts +0 -10
- package/pkg/commands/zcount.test.ts +0 -15
- package/pkg/commands/zcount.ts +0 -9
- package/pkg/commands/zincrby.test.ts +0 -20
- package/pkg/commands/zincrby.ts +0 -9
- package/pkg/commands/zinterstore.test.ts +0 -239
- package/pkg/commands/zinterstore.ts +0 -55
- package/pkg/commands/zlexcount.test.ts +0 -22
- package/pkg/commands/zlexcount.ts +0 -9
- package/pkg/commands/zpopmax.test.ts +0 -45
- package/pkg/commands/zpopmax.ts +0 -13
- package/pkg/commands/zpopmin.test.ts +0 -49
- package/pkg/commands/zpopmin.ts +0 -13
- package/pkg/commands/zrange.test.ts +0 -52
- package/pkg/commands/zrange.ts +0 -22
- package/pkg/commands/zrank.test.ts +0 -22
- package/pkg/commands/zrank.ts +0 -10
- package/pkg/commands/zrem.test.ts +0 -20
- package/pkg/commands/zrem.ts +0 -10
- package/pkg/commands/zremrangebylex.test.ts +0 -26
- package/pkg/commands/zremrangebylex.ts +0 -9
- package/pkg/commands/zremrangebyrank.test.ts +0 -27
- package/pkg/commands/zremrangebyrank.ts +0 -9
- package/pkg/commands/zremrangebyscore.test.ts +0 -24
- package/pkg/commands/zremrangebyscore.ts +0 -9
- package/pkg/commands/zrevrank.test.ts +0 -22
- package/pkg/commands/zrevrank.ts +0 -10
- package/pkg/commands/zscan.test.ts +0 -50
- package/pkg/commands/zscan.ts +0 -22
- package/pkg/commands/zscore.test.ts +0 -18
- package/pkg/commands/zscore.ts +0 -10
- package/pkg/commands/zunionstore.test.ts +0 -215
- package/pkg/commands/zunionstore.ts +0 -55
- package/pkg/commands/zz.ts +0 -1
- package/pkg/error.ts +0 -9
- package/pkg/fastly.ts +0 -54
- package/pkg/http.test.ts +0 -34
- package/pkg/http.ts +0 -62
- package/pkg/index.ts +0 -2
- package/pkg/nodejs.ts +0 -83
- package/pkg/pipeline.test.ts +0 -177
- package/pkg/pipeline.ts +0 -999
- package/pkg/redis.ts +0 -930
- package/pkg/test-utils.ts +0 -41
- package/pkg/types.ts +0 -4
- package/pkg/util.ts +0 -22
- package/pnpm-lock.yaml +0 -3940
- package/tsconfig.json +0 -100
- package/tsconfig.module.json +0 -8
- package/tsup.config.ts +0 -16
package/pkg/commands/mset.ts
DELETED
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
import { Command } from "../command"
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* @see https://redis.io/commands/mset
|
|
5
|
-
*/
|
|
6
|
-
export class MSetCommand<TData> extends Command<"OK", "OK"> {
|
|
7
|
-
constructor(kv: { [key: string]: TData }) {
|
|
8
|
-
super(["mset", ...Object.entries(kv).flatMap(([key, value]) => [key, value])])
|
|
9
|
-
}
|
|
10
|
-
}
|
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
import { keygen, newHttpClient } from "../test-utils"
|
|
2
|
-
import { randomUUID } from "crypto"
|
|
3
|
-
import { it, expect, afterAll } from "@jest/globals"
|
|
4
|
-
import { MGetCommand } from "./mget"
|
|
5
|
-
import { SetCommand } from "./set"
|
|
6
|
-
import { GetCommand } from "./get"
|
|
7
|
-
import { MSetNXCommand } from "./msetnx"
|
|
8
|
-
const client = newHttpClient()
|
|
9
|
-
|
|
10
|
-
const { newKey, cleanup } = keygen()
|
|
11
|
-
afterAll(cleanup)
|
|
12
|
-
|
|
13
|
-
it("sets values", async () => {
|
|
14
|
-
const key1 = newKey()
|
|
15
|
-
const value1 = randomUUID()
|
|
16
|
-
const key2 = newKey()
|
|
17
|
-
const value2 = randomUUID()
|
|
18
|
-
|
|
19
|
-
const kv: Record<string, string> = {}
|
|
20
|
-
kv[key1] = value1
|
|
21
|
-
kv[key2] = value2
|
|
22
|
-
const res = await new MSetNXCommand(kv).exec(client)
|
|
23
|
-
|
|
24
|
-
expect(res).toEqual(1)
|
|
25
|
-
const res2 = await new MGetCommand<[string, string]>(key1, key2).exec(client)
|
|
26
|
-
|
|
27
|
-
expect(res2).toEqual([value1, value2])
|
|
28
|
-
})
|
|
29
|
-
|
|
30
|
-
it("does not set values if one key already exists", async () => {
|
|
31
|
-
const key1 = newKey()
|
|
32
|
-
const value1 = randomUUID()
|
|
33
|
-
const key2 = newKey()
|
|
34
|
-
const value2 = randomUUID()
|
|
35
|
-
await new SetCommand(key1, value1).exec(client)
|
|
36
|
-
const kv: Record<string, string> = {}
|
|
37
|
-
kv[key1] = value1
|
|
38
|
-
kv[key2] = value2
|
|
39
|
-
const res = await new MSetNXCommand(kv).exec(client)
|
|
40
|
-
|
|
41
|
-
expect(res).toEqual(0)
|
|
42
|
-
|
|
43
|
-
const res2 = await new GetCommand(key2).exec(client)
|
|
44
|
-
|
|
45
|
-
expect(res2).toBeNull()
|
|
46
|
-
})
|
package/pkg/commands/msetnx.ts
DELETED
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
import { Command } from "../command"
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* @see https://redis.io/commands/msetnx
|
|
5
|
-
*/
|
|
6
|
-
export class MSetNXCommand<TData = string> extends Command<number, number> {
|
|
7
|
-
constructor(kv: { [key: string]: TData }) {
|
|
8
|
-
super(["msetnx", ...Object.entries(kv).flatMap((_) => _)])
|
|
9
|
-
}
|
|
10
|
-
}
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
import { keygen, newHttpClient } from "../test-utils"
|
|
2
|
-
import { randomUUID } from "crypto"
|
|
3
|
-
import { SetCommand } from "./set"
|
|
4
|
-
import { it, expect, afterAll } from "@jest/globals"
|
|
5
|
-
import { PersistCommand } from "./persist"
|
|
6
|
-
import { GetCommand } from "./get"
|
|
7
|
-
const client = newHttpClient()
|
|
8
|
-
|
|
9
|
-
const { newKey, cleanup } = keygen()
|
|
10
|
-
afterAll(cleanup)
|
|
11
|
-
|
|
12
|
-
it("persists the key", async () => {
|
|
13
|
-
const key = newKey()
|
|
14
|
-
const value = randomUUID()
|
|
15
|
-
await new SetCommand(key, value, { ex: 2 }).exec(client)
|
|
16
|
-
const res = await new PersistCommand(key).exec(client)
|
|
17
|
-
expect(res).toBe(1)
|
|
18
|
-
await new Promise((resolve) => setTimeout(resolve, 2000))
|
|
19
|
-
const res2 = await new GetCommand(key).exec(client)
|
|
20
|
-
|
|
21
|
-
expect(res2).toEqual(value)
|
|
22
|
-
})
|
package/pkg/commands/persist.ts
DELETED
|
@@ -1,24 +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 { SetCommand } from "./set"
|
|
5
|
-
import { PExpireCommand } from "./pexpire"
|
|
6
|
-
import { GetCommand } from "./get"
|
|
7
|
-
const client = newHttpClient()
|
|
8
|
-
|
|
9
|
-
const { newKey, cleanup } = keygen()
|
|
10
|
-
afterAll(cleanup)
|
|
11
|
-
|
|
12
|
-
describe("without options", () => {
|
|
13
|
-
it("expires a key correctly", async () => {
|
|
14
|
-
const key = newKey()
|
|
15
|
-
const value = randomUUID()
|
|
16
|
-
await new SetCommand(key, value).exec(client)
|
|
17
|
-
const res = await new PExpireCommand(key, 1000).exec(client)
|
|
18
|
-
expect(res).toEqual(1)
|
|
19
|
-
await new Promise((res) => setTimeout(res, 2000))
|
|
20
|
-
const res2 = await new GetCommand(key).exec(client)
|
|
21
|
-
|
|
22
|
-
expect(res2).toBeNull()
|
|
23
|
-
})
|
|
24
|
-
})
|
package/pkg/commands/pexpire.ts
DELETED
|
@@ -1,24 +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 { SetCommand } from "./set"
|
|
5
|
-
import { GetCommand } from "./get"
|
|
6
|
-
import { PExpireAtCommand } from "./pexpireat"
|
|
7
|
-
const client = newHttpClient()
|
|
8
|
-
|
|
9
|
-
const { newKey, cleanup } = keygen()
|
|
10
|
-
afterAll(cleanup)
|
|
11
|
-
|
|
12
|
-
describe("without options", () => {
|
|
13
|
-
it("expires the key", async () => {
|
|
14
|
-
const key = newKey()
|
|
15
|
-
const value = randomUUID()
|
|
16
|
-
await new SetCommand(key, value).exec(client)
|
|
17
|
-
|
|
18
|
-
const res = await new PExpireAtCommand(key, 1000).exec(client)
|
|
19
|
-
expect(res).toEqual(1)
|
|
20
|
-
await new Promise((res) => setTimeout(res, 2000))
|
|
21
|
-
const res2 = await new GetCommand(key).exec(client)
|
|
22
|
-
expect(res2).toBeNull
|
|
23
|
-
})
|
|
24
|
-
})
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import { newHttpClient } from "../test-utils"
|
|
2
|
-
import { randomUUID } from "crypto"
|
|
3
|
-
import { describe, it, expect } from "@jest/globals"
|
|
4
|
-
import { PingCommand } from "./ping"
|
|
5
|
-
const client = newHttpClient()
|
|
6
|
-
|
|
7
|
-
describe("with message", () => {
|
|
8
|
-
it("returns the message", async () => {
|
|
9
|
-
const message = randomUUID()
|
|
10
|
-
const res = await new PingCommand(message).exec(client)
|
|
11
|
-
expect(res).toBe(message)
|
|
12
|
-
})
|
|
13
|
-
})
|
|
14
|
-
describe("without message", () => {
|
|
15
|
-
it("returns pong", async () => {
|
|
16
|
-
const res = await new PingCommand().exec(client)
|
|
17
|
-
expect(res).toBe("PONG")
|
|
18
|
-
})
|
|
19
|
-
})
|
package/pkg/commands/ping.ts
DELETED
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import { Command } from "../command"
|
|
2
|
-
/**
|
|
3
|
-
* @see https://redis.io/commands/ping
|
|
4
|
-
*/
|
|
5
|
-
export class PingCommand extends Command<string | "PONG", string | "PONG"> {
|
|
6
|
-
constructor(message?: string) {
|
|
7
|
-
const command: string[] = ["ping"]
|
|
8
|
-
if (typeof message !== "undefined") {
|
|
9
|
-
command.push(message)
|
|
10
|
-
}
|
|
11
|
-
super(command)
|
|
12
|
-
}
|
|
13
|
-
}
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
import { keygen, newHttpClient } from "../test-utils"
|
|
2
|
-
import { randomUUID } from "crypto"
|
|
3
|
-
import { it, expect, afterAll } from "@jest/globals"
|
|
4
|
-
|
|
5
|
-
import { PSetEXCommand } from "./psetex"
|
|
6
|
-
import { GetCommand } from "./get"
|
|
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 = randomUUID()
|
|
15
|
-
|
|
16
|
-
const res = await new PSetEXCommand(key, 1000, value).exec(client)
|
|
17
|
-
|
|
18
|
-
expect(res).toEqual("OK")
|
|
19
|
-
await new Promise((res) => setTimeout(res, 2000))
|
|
20
|
-
const res2 = await new GetCommand(key).exec(client)
|
|
21
|
-
|
|
22
|
-
expect(res2).toBeNull()
|
|
23
|
-
})
|
package/pkg/commands/psetex.ts
DELETED
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
import { Command } from "../command"
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* @see https://redis.io/commands/psetex
|
|
5
|
-
*/
|
|
6
|
-
export class PSetEXCommand<TData = string> extends Command<string, string> {
|
|
7
|
-
constructor(key: string, ttl: number, value: TData) {
|
|
8
|
-
super(["psetex", key, ttl, value])
|
|
9
|
-
}
|
|
10
|
-
}
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
import { keygen, newHttpClient } from "../test-utils"
|
|
2
|
-
|
|
3
|
-
import { it, expect, afterAll } from "@jest/globals"
|
|
4
|
-
import { SetExCommand } from "./setex"
|
|
5
|
-
import { PTtlCommand } from "./pttl"
|
|
6
|
-
const client = newHttpClient()
|
|
7
|
-
|
|
8
|
-
const { newKey, cleanup } = keygen()
|
|
9
|
-
afterAll(cleanup)
|
|
10
|
-
|
|
11
|
-
it("returns the ttl on a key", async () => {
|
|
12
|
-
const key = newKey()
|
|
13
|
-
const ttl = 60
|
|
14
|
-
await new SetExCommand(key, ttl, "value").exec(client)
|
|
15
|
-
const res = await new PTtlCommand(key).exec(client)
|
|
16
|
-
expect(res).toBeLessThanOrEqual(ttl * 1000)
|
|
17
|
-
})
|
package/pkg/commands/pttl.ts
DELETED
|
@@ -1,17 +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 { RandomKeyCommand } from "./randomkey"
|
|
6
|
-
const client = newHttpClient()
|
|
7
|
-
|
|
8
|
-
const { newKey, cleanup } = keygen()
|
|
9
|
-
afterAll(cleanup)
|
|
10
|
-
|
|
11
|
-
it("returns a random key", async () => {
|
|
12
|
-
const key = newKey()
|
|
13
|
-
await new SetCommand(key, randomUUID()).exec(client)
|
|
14
|
-
const res = await new RandomKeyCommand().exec(client)
|
|
15
|
-
expect(res).toBeDefined()
|
|
16
|
-
expect(typeof res).toBe("string")
|
|
17
|
-
})
|
|
@@ -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 { SetCommand } from "./set"
|
|
5
|
-
import { RenameCommand } from "./rename"
|
|
6
|
-
const client = newHttpClient()
|
|
7
|
-
|
|
8
|
-
const { newKey, cleanup } = keygen()
|
|
9
|
-
afterAll(cleanup)
|
|
10
|
-
|
|
11
|
-
it("renames the key", async () => {
|
|
12
|
-
const source = newKey()
|
|
13
|
-
const destination = newKey()
|
|
14
|
-
const value = randomUUID()
|
|
15
|
-
await new SetCommand(source, value).exec(client)
|
|
16
|
-
const res = await new RenameCommand(source, destination).exec(client)
|
|
17
|
-
expect(res).toBe("OK")
|
|
18
|
-
})
|
package/pkg/commands/rename.ts
DELETED
|
@@ -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 { SetCommand } from "./set"
|
|
5
|
-
import { RenameNXCommand } from "./renamenx"
|
|
6
|
-
const client = newHttpClient()
|
|
7
|
-
|
|
8
|
-
const { newKey, cleanup } = keygen()
|
|
9
|
-
afterAll(cleanup)
|
|
10
|
-
|
|
11
|
-
describe("when the key exists", () => {
|
|
12
|
-
it("does nothing", async () => {
|
|
13
|
-
const source = newKey()
|
|
14
|
-
const destination = newKey()
|
|
15
|
-
const sourceValue = randomUUID()
|
|
16
|
-
const destinationValue = randomUUID()
|
|
17
|
-
await new SetCommand(source, sourceValue).exec(client)
|
|
18
|
-
await new SetCommand(destination, destinationValue).exec(client)
|
|
19
|
-
const res = await new RenameNXCommand(source, destination).exec(client)
|
|
20
|
-
expect(res).toBe(0)
|
|
21
|
-
})
|
|
22
|
-
})
|
|
23
|
-
describe("when the key does not exist", () => {
|
|
24
|
-
it("renames the key", async () => {
|
|
25
|
-
const source = newKey()
|
|
26
|
-
const destination = newKey()
|
|
27
|
-
const value = randomUUID()
|
|
28
|
-
await new SetCommand(source, value).exec(client)
|
|
29
|
-
const res = await new RenameNXCommand(source, destination).exec(client)
|
|
30
|
-
expect(res).toBe(1)
|
|
31
|
-
})
|
|
32
|
-
})
|
package/pkg/commands/renamenx.ts
DELETED
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
import { Command } from "../command"
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* @see https://redis.io/commands/renamenx
|
|
5
|
-
*/
|
|
6
|
-
export class RenameNXCommand extends Command<0 | 1, "0" | "1"> {
|
|
7
|
-
constructor(source: string, destination: string) {
|
|
8
|
-
super(["renamenx", source, destination])
|
|
9
|
-
}
|
|
10
|
-
}
|
|
@@ -1,27 +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 { RPopCommand } from "./rpop"
|
|
5
|
-
import { LPushCommand } from "./lpush"
|
|
6
|
-
const client = newHttpClient()
|
|
7
|
-
|
|
8
|
-
const { newKey, cleanup } = keygen()
|
|
9
|
-
afterAll(cleanup)
|
|
10
|
-
|
|
11
|
-
describe("when list exists", () => {
|
|
12
|
-
it("returns the first element", async () => {
|
|
13
|
-
const key = newKey()
|
|
14
|
-
const value = randomUUID()
|
|
15
|
-
await new LPushCommand(key, value).exec(client)
|
|
16
|
-
const res = await new RPopCommand(key).exec(client)
|
|
17
|
-
expect(res).toEqual(value)
|
|
18
|
-
})
|
|
19
|
-
})
|
|
20
|
-
|
|
21
|
-
describe("when list does not exist", () => {
|
|
22
|
-
it("returns null", async () => {
|
|
23
|
-
const key = newKey()
|
|
24
|
-
const res = await new RPopCommand(key).exec(client)
|
|
25
|
-
expect(res).toBeNull()
|
|
26
|
-
})
|
|
27
|
-
})
|
package/pkg/commands/rpop.ts
DELETED
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
import { keygen, newHttpClient } from "../test-utils"
|
|
2
|
-
import { randomUUID } from "crypto"
|
|
3
|
-
import { it, expect, afterAll } from "@jest/globals"
|
|
4
|
-
import { RPushCommand } from "./rpush"
|
|
5
|
-
const client = newHttpClient()
|
|
6
|
-
|
|
7
|
-
const { newKey, cleanup } = keygen()
|
|
8
|
-
afterAll(cleanup)
|
|
9
|
-
|
|
10
|
-
it("returns the length after command", async () => {
|
|
11
|
-
const key = newKey()
|
|
12
|
-
const res = await new RPushCommand(key, randomUUID()).exec(client)
|
|
13
|
-
expect(res).toEqual(1)
|
|
14
|
-
const res2 = await new RPushCommand(key, randomUUID(), randomUUID()).exec(client)
|
|
15
|
-
|
|
16
|
-
expect(res2).toEqual(3)
|
|
17
|
-
})
|
package/pkg/commands/rpush.ts
DELETED
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import { NonEmptyArray } from "../types"
|
|
2
|
-
import { Command } from "../command"
|
|
3
|
-
|
|
4
|
-
/**
|
|
5
|
-
* @see https://redis.io/commands/rpush
|
|
6
|
-
*/
|
|
7
|
-
export class RPushCommand<TData = string> extends Command<number, number> {
|
|
8
|
-
constructor(key: string, ...elements: NonEmptyArray<TData>) {
|
|
9
|
-
super(["rpush", key, ...elements])
|
|
10
|
-
}
|
|
11
|
-
}
|
|
@@ -1,29 +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 { RPushXCommand } from "./rpushx"
|
|
5
|
-
import { LPushCommand } from "./lpush"
|
|
6
|
-
const client = newHttpClient()
|
|
7
|
-
|
|
8
|
-
const { newKey, cleanup } = keygen()
|
|
9
|
-
afterAll(cleanup)
|
|
10
|
-
|
|
11
|
-
describe("when list exists", () => {
|
|
12
|
-
it("returns the length after command", async () => {
|
|
13
|
-
const key = newKey()
|
|
14
|
-
await new LPushCommand(key, randomUUID()).exec(client)
|
|
15
|
-
const res = await new RPushXCommand(key, randomUUID()).exec(client)
|
|
16
|
-
expect(res).toEqual(2)
|
|
17
|
-
const res2 = await new RPushXCommand(key, randomUUID(), randomUUID()).exec(client)
|
|
18
|
-
|
|
19
|
-
expect(res2).toEqual(4)
|
|
20
|
-
})
|
|
21
|
-
})
|
|
22
|
-
|
|
23
|
-
describe("when list does not exist", () => {
|
|
24
|
-
it("does nothing", async () => {
|
|
25
|
-
const key = newKey()
|
|
26
|
-
const res = await new RPushXCommand(key, randomUUID()).exec(client)
|
|
27
|
-
expect(res).toEqual(0)
|
|
28
|
-
})
|
|
29
|
-
})
|
package/pkg/commands/rpushx.ts
DELETED
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import { NonEmptyArray } from "../types"
|
|
2
|
-
import { Command } from "../command"
|
|
3
|
-
|
|
4
|
-
/**
|
|
5
|
-
* @see https://redis.io/commands/rpushx
|
|
6
|
-
*/
|
|
7
|
-
export class RPushXCommand<TData = string> extends Command<number, number> {
|
|
8
|
-
constructor(key: string, ...elements: NonEmptyArray<TData>) {
|
|
9
|
-
super(["rpushx", key, ...elements])
|
|
10
|
-
}
|
|
11
|
-
}
|
|
@@ -1,16 +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
|
-
const client = newHttpClient()
|
|
6
|
-
|
|
7
|
-
const { newKey, cleanup } = keygen()
|
|
8
|
-
afterAll(cleanup)
|
|
9
|
-
|
|
10
|
-
it("returns the number of added members", async () => {
|
|
11
|
-
const key = newKey()
|
|
12
|
-
const value1 = randomUUID()
|
|
13
|
-
const value2 = randomUUID()
|
|
14
|
-
const res = await new SAddCommand(key, value1, value2).exec(client)
|
|
15
|
-
expect(res).toBe(2)
|
|
16
|
-
})
|
package/pkg/commands/sadd.ts
DELETED
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import { NonEmptyArray } from "../types"
|
|
2
|
-
import { Command } from "../command"
|
|
3
|
-
|
|
4
|
-
/**
|
|
5
|
-
* @see https://redis.io/commands/sadd
|
|
6
|
-
*/
|
|
7
|
-
export class SAddCommand<TData = string> extends Command<number, number> {
|
|
8
|
-
constructor(key: string, ...members: NonEmptyArray<TData>) {
|
|
9
|
-
super(["sadd", key, ...members])
|
|
10
|
-
}
|
|
11
|
-
}
|
|
@@ -1,50 +0,0 @@
|
|
|
1
|
-
import { keygen, newHttpClient } from "../test-utils"
|
|
2
|
-
import { randomUUID } from "crypto"
|
|
3
|
-
import { it, describe, expect, afterAll } from "@jest/globals"
|
|
4
|
-
import { SetCommand } from "./set"
|
|
5
|
-
import { ScanCommand } from "./scan"
|
|
6
|
-
const client = newHttpClient()
|
|
7
|
-
|
|
8
|
-
const { newKey, cleanup } = keygen()
|
|
9
|
-
afterAll(cleanup)
|
|
10
|
-
describe("without options", () => {
|
|
11
|
-
it("returns cursor and keys", async () => {
|
|
12
|
-
const key = newKey()
|
|
13
|
-
const value = randomUUID()
|
|
14
|
-
await new SetCommand(key, value).exec(client)
|
|
15
|
-
const res = await new ScanCommand(0).exec(client)
|
|
16
|
-
|
|
17
|
-
expect(res).toBeDefined()
|
|
18
|
-
expect(res.length).toBe(2)
|
|
19
|
-
expect(typeof res[0]).toBe("number")
|
|
20
|
-
expect(res![1].length).toBeGreaterThan(0)
|
|
21
|
-
})
|
|
22
|
-
})
|
|
23
|
-
|
|
24
|
-
describe("with match", () => {
|
|
25
|
-
it("returns cursor and keys", async () => {
|
|
26
|
-
const key = newKey()
|
|
27
|
-
const value = randomUUID()
|
|
28
|
-
await new SetCommand(key, value).exec(client)
|
|
29
|
-
const res = await new ScanCommand(0, { match: key }).exec(client)
|
|
30
|
-
|
|
31
|
-
expect(res).toBeDefined()
|
|
32
|
-
expect(res.length).toBe(2)
|
|
33
|
-
expect(typeof res[0]).toBe("number")
|
|
34
|
-
expect(res![1].length).toBeGreaterThan(0)
|
|
35
|
-
})
|
|
36
|
-
})
|
|
37
|
-
|
|
38
|
-
describe("with count", () => {
|
|
39
|
-
it("returns cursor and keys", async () => {
|
|
40
|
-
const key = newKey()
|
|
41
|
-
const value = randomUUID()
|
|
42
|
-
await new SetCommand(key, value).exec(client)
|
|
43
|
-
const res = await new ScanCommand(0, { count: 1 }).exec(client)
|
|
44
|
-
|
|
45
|
-
expect(res).toBeDefined()
|
|
46
|
-
expect(res.length).toBe(2)
|
|
47
|
-
expect(typeof res[0]).toBe("number")
|
|
48
|
-
expect(res![1].length).toBeGreaterThan(0)
|
|
49
|
-
})
|
|
50
|
-
})
|
package/pkg/commands/scan.ts
DELETED
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
import { Command } from "../command"
|
|
2
|
-
|
|
3
|
-
export type ScanCommandOptions = {
|
|
4
|
-
match?: string
|
|
5
|
-
count?: number
|
|
6
|
-
}
|
|
7
|
-
/**
|
|
8
|
-
* @see https://redis.io/commands/scan
|
|
9
|
-
*/
|
|
10
|
-
export class ScanCommand extends Command<[number, string[]], [number, string[]]> {
|
|
11
|
-
constructor(cursor: number, opts?: ScanCommandOptions) {
|
|
12
|
-
const command = ["scan", cursor]
|
|
13
|
-
if (opts?.match) {
|
|
14
|
-
command.push("match", opts.match)
|
|
15
|
-
}
|
|
16
|
-
if (typeof opts?.count === "number") {
|
|
17
|
-
command.push("count", opts.count)
|
|
18
|
-
}
|
|
19
|
-
super(command)
|
|
20
|
-
}
|
|
21
|
-
}
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import { keygen, newHttpClient } from "../test-utils"
|
|
2
|
-
import { it, expect, afterAll } from "@jest/globals"
|
|
3
|
-
import { SAddCommand } from "./sadd"
|
|
4
|
-
import { SCardCommand } from "./scard"
|
|
5
|
-
const client = newHttpClient()
|
|
6
|
-
|
|
7
|
-
const { newKey, cleanup } = keygen()
|
|
8
|
-
afterAll(cleanup)
|
|
9
|
-
|
|
10
|
-
it("returns the cardinality", async () => {
|
|
11
|
-
const key = newKey()
|
|
12
|
-
await new SAddCommand(key, "member1").exec(client)
|
|
13
|
-
const res = await new SCardCommand(key).exec(client)
|
|
14
|
-
expect(res).toBe(1)
|
|
15
|
-
})
|
package/pkg/commands/scard.ts
DELETED
|
@@ -1,20 +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 { SDiffCommand } from "./sdiff"
|
|
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
|
-
await new SAddCommand(key1, member1).exec(client)
|
|
17
|
-
await new SAddCommand(key2, member2).exec(client)
|
|
18
|
-
const res = await new SDiffCommand(key1, key2).exec(client)
|
|
19
|
-
expect(res).toEqual([member1])
|
|
20
|
-
})
|
package/pkg/commands/sdiff.ts
DELETED