@upstash/redis 1.0.0-alpha.2 → 1.0.0-alpha.7
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/README.md +256 -0
- package/{dist/chunk-7YUZYRJS.mjs → chunk-7YUZYRJS.mjs} +0 -0
- package/{dist/chunk-FJSI5EBJ.mjs → chunk-AHCVU33N.mjs} +2 -2
- package/{dist/chunk-ZIB6XPPC.mjs → chunk-HGM7M7CJ.mjs} +9 -4
- package/{dist/chunk-U7OXAQMQ.mjs → chunk-HIDCSH5S.mjs} +0 -1
- package/{dist/chunk-Y5TC4HX2.mjs → chunk-T66TTHSV.mjs} +5 -5
- package/{dist/cloudflare.d.ts → cloudflare.d.ts} +2 -2
- package/{dist/cloudflare.js → cloudflare.js} +12 -9
- package/{dist/cloudflare.mjs → cloudflare.mjs} +3 -3
- package/{dist/commands.d.ts → commands.d.ts} +5 -3
- package/{dist/commands.js → commands.js} +10 -4
- package/{dist/commands.mjs → commands.mjs} +3 -1
- package/{dist/fastly.d.ts → fastly.d.ts} +2 -2
- package/{dist/fastly.js → fastly.js} +12 -9
- package/{dist/fastly.mjs → fastly.mjs} +3 -3
- package/{dist/http.d.ts → http.d.ts} +0 -0
- package/{dist/http.js → http.js} +0 -1
- package/{dist/http.mjs → http.mjs} +1 -1
- package/{dist/index.d.ts → index.d.ts} +2 -2
- package/{dist/index.js → index.js} +13 -10
- package/index.mjs +13 -0
- package/{dist/nodejs.d.ts → nodejs.d.ts} +2 -2
- package/{dist/nodejs.js → nodejs.js} +13 -10
- package/nodejs.mjs +10 -0
- package/package.json +1 -1
- package/{dist/redis-dd052782.d.ts → redis-71fa1ee6.d.ts} +7 -3
- package/{dist/zunionstore-dffa797d.d.ts → zunionstore-b38007ba.d.ts} +1 -1
- package/.eslintrc.js +0 -49
- package/.prettierrc.js +0 -7
- package/LICENSE +0 -21
- package/dist/index.mjs +0 -13
- package/dist/nodejs.mjs +0 -10
- 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
|
@@ -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
|
-
})
|
package/pkg/commands/smove.ts
DELETED
|
@@ -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
|
-
})
|
package/pkg/commands/spop.ts
DELETED
|
@@ -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
|
-
})
|
package/pkg/commands/srem.ts
DELETED
|
@@ -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
|
-
}
|
|
@@ -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 { SAddCommand } from "./sadd"
|
|
5
|
-
import { SScanCommand } from "./sscan"
|
|
6
|
-
const client = newHttpClient()
|
|
7
|
-
|
|
8
|
-
const { newKey, cleanup } = keygen()
|
|
9
|
-
afterAll(cleanup)
|
|
10
|
-
describe("without options", () => {
|
|
11
|
-
it("returns cursor and members", async () => {
|
|
12
|
-
const key = newKey()
|
|
13
|
-
const member = randomUUID()
|
|
14
|
-
await new SAddCommand(key, member).exec(client)
|
|
15
|
-
const res = await new SScanCommand(key, 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 members", async () => {
|
|
26
|
-
const key = newKey()
|
|
27
|
-
const member = randomUUID()
|
|
28
|
-
await new SAddCommand(key, member).exec(client)
|
|
29
|
-
const res = await new SScanCommand(key, 0, { match: member }).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 members", async () => {
|
|
40
|
-
const key = newKey()
|
|
41
|
-
const member = randomUUID()
|
|
42
|
-
await new SAddCommand(key, member).exec(client)
|
|
43
|
-
const res = await new SScanCommand(key, 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/sscan.ts
DELETED
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
import { ScanCommandOptions } from "./scan"
|
|
2
|
-
import { Command } from "../command"
|
|
3
|
-
|
|
4
|
-
/**
|
|
5
|
-
* @see https://redis.io/commands/sscan
|
|
6
|
-
*/
|
|
7
|
-
export class SScanCommand extends Command<
|
|
8
|
-
[number, (string | number)[]],
|
|
9
|
-
[number, (string | number)[]]
|
|
10
|
-
> {
|
|
11
|
-
constructor(key: string, cursor: number, opts?: ScanCommandOptions) {
|
|
12
|
-
const command = ["sscan", key, 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
|
-
|
|
20
|
-
super(command)
|
|
21
|
-
}
|
|
22
|
-
}
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import { keygen, newHttpClient } from "../test-utils"
|
|
2
|
-
import { it, expect, afterAll } from "@jest/globals"
|
|
3
|
-
import { SetCommand } from "./set"
|
|
4
|
-
import { StrLenCommand } from "./strlen"
|
|
5
|
-
const client = newHttpClient()
|
|
6
|
-
|
|
7
|
-
const { newKey, cleanup } = keygen()
|
|
8
|
-
afterAll(cleanup)
|
|
9
|
-
|
|
10
|
-
it("returns the correct length", async () => {
|
|
11
|
-
const key = newKey()
|
|
12
|
-
const value = "abcd"
|
|
13
|
-
await new SetCommand(key, value).exec(client)
|
|
14
|
-
const res = await new StrLenCommand(key).exec(client)
|
|
15
|
-
expect(res).toBe(value.length)
|
|
16
|
-
})
|
package/pkg/commands/strlen.ts
DELETED
|
@@ -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 { SUnionCommand } from "./sunion"
|
|
6
|
-
const client = newHttpClient()
|
|
7
|
-
|
|
8
|
-
const { newKey, cleanup } = keygen()
|
|
9
|
-
afterAll(cleanup)
|
|
10
|
-
|
|
11
|
-
it("returns the union", async () => {
|
|
12
|
-
const key1 = newKey()
|
|
13
|
-
const key2 = newKey()
|
|
14
|
-
|
|
15
|
-
const member1 = randomUUID()
|
|
16
|
-
const member2 = randomUUID()
|
|
17
|
-
|
|
18
|
-
await new SAddCommand(key1, member1).exec(client)
|
|
19
|
-
await new SAddCommand(key2, member2).exec(client)
|
|
20
|
-
const res = await new SUnionCommand(key1, key2).exec(client)
|
|
21
|
-
expect(res?.sort()).toEqual([member1, member2].sort())
|
|
22
|
-
})
|
package/pkg/commands/sunion.ts
DELETED
|
@@ -1,29 +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 { SUnionStoreCommand } from "./sunionstore"
|
|
6
|
-
import { SMembersCommand } from "./smembers"
|
|
7
|
-
const client = newHttpClient()
|
|
8
|
-
|
|
9
|
-
const { newKey, cleanup } = keygen()
|
|
10
|
-
afterAll(cleanup)
|
|
11
|
-
|
|
12
|
-
it("writes the union to destination", async () => {
|
|
13
|
-
const key1 = newKey()
|
|
14
|
-
const key2 = newKey()
|
|
15
|
-
const dest = newKey()
|
|
16
|
-
|
|
17
|
-
const member1 = randomUUID()
|
|
18
|
-
const member2 = randomUUID()
|
|
19
|
-
|
|
20
|
-
await new SAddCommand(key1, member1).exec(client)
|
|
21
|
-
await new SAddCommand(key2, member2).exec(client)
|
|
22
|
-
const res = await new SUnionStoreCommand(dest, key1, key2).exec(client)
|
|
23
|
-
expect(res).toBe(2)
|
|
24
|
-
|
|
25
|
-
const res2 = await new SMembersCommand(dest).exec(client)
|
|
26
|
-
|
|
27
|
-
expect(res2).toBeDefined()
|
|
28
|
-
expect(res2!.sort()).toEqual([member1, member2].sort())
|
|
29
|
-
})
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
import { Command } from "../command"
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* @see https://redis.io/commands/sunionstore
|
|
5
|
-
*/
|
|
6
|
-
export class SUnionStoreCommand extends Command<number, number> {
|
|
7
|
-
constructor(destination: string, key: string, ...keys: string[]) {
|
|
8
|
-
super(["sunionstore", destination, key, ...keys])
|
|
9
|
-
}
|
|
10
|
-
}
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import { newHttpClient } from "../test-utils"
|
|
2
|
-
import { it, expect } from "@jest/globals"
|
|
3
|
-
import { TimeCommand } from "./time"
|
|
4
|
-
const client = newHttpClient()
|
|
5
|
-
|
|
6
|
-
it("returns the time", async () => {
|
|
7
|
-
const res = await new TimeCommand().exec(client)
|
|
8
|
-
expect(res).toBeDefined()
|
|
9
|
-
expect(typeof res[0]).toBe("number")
|
|
10
|
-
expect(typeof res[1]).toBe("number")
|
|
11
|
-
})
|
package/pkg/commands/time.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 { MSetCommand } from "./mset"
|
|
5
|
-
import { TouchCommand } from "./touch"
|
|
6
|
-
const client = newHttpClient()
|
|
7
|
-
|
|
8
|
-
const { newKey, cleanup } = keygen()
|
|
9
|
-
afterAll(cleanup)
|
|
10
|
-
|
|
11
|
-
it("returns the number of touched keys", async () => {
|
|
12
|
-
const key1 = newKey()
|
|
13
|
-
const key2 = newKey()
|
|
14
|
-
const kv: Record<string, string> = {}
|
|
15
|
-
kv[key1] = randomUUID()
|
|
16
|
-
kv[key2] = randomUUID()
|
|
17
|
-
await new MSetCommand(kv).exec(client)
|
|
18
|
-
const res = await new TouchCommand(key1, key2).exec(client)
|
|
19
|
-
expect(res).toBe(2)
|
|
20
|
-
})
|
package/pkg/commands/touch.ts
DELETED
package/pkg/commands/ttl.test.ts
DELETED
|
@@ -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 { TtlCommand } from "./ttl"
|
|
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 TtlCommand(key).exec(client)
|
|
16
|
-
expect(res).toBeLessThanOrEqual(ttl)
|
|
17
|
-
})
|
package/pkg/commands/ttl.ts
DELETED
|
@@ -1,72 +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 { TypeCommand } from "./type"
|
|
6
|
-
import { LPushCommand } from "./lpush"
|
|
7
|
-
import { HSetCommand } from "./hset"
|
|
8
|
-
import { SAddCommand } from "./sadd"
|
|
9
|
-
import { ZAddCommand } from "./zadd"
|
|
10
|
-
const client = newHttpClient()
|
|
11
|
-
|
|
12
|
-
const { newKey, cleanup } = keygen()
|
|
13
|
-
afterAll(cleanup)
|
|
14
|
-
|
|
15
|
-
describe("string", () => {
|
|
16
|
-
it("returns the correct type", async () => {
|
|
17
|
-
const key = newKey()
|
|
18
|
-
const value = randomUUID()
|
|
19
|
-
await new SetCommand(key, value).exec(client)
|
|
20
|
-
const res = await new TypeCommand(key).exec(client)
|
|
21
|
-
expect(res).toEqual("string")
|
|
22
|
-
})
|
|
23
|
-
})
|
|
24
|
-
|
|
25
|
-
describe("list", () => {
|
|
26
|
-
it("returns the correct type", async () => {
|
|
27
|
-
const key = newKey()
|
|
28
|
-
const value = randomUUID()
|
|
29
|
-
await new LPushCommand(key, value).exec(client)
|
|
30
|
-
const res = await new TypeCommand(key).exec(client)
|
|
31
|
-
expect(res).toEqual("list")
|
|
32
|
-
})
|
|
33
|
-
})
|
|
34
|
-
|
|
35
|
-
describe("set", () => {
|
|
36
|
-
it("returns the correct type", async () => {
|
|
37
|
-
const key = newKey()
|
|
38
|
-
const value = randomUUID()
|
|
39
|
-
await new SAddCommand(key, value).exec(client)
|
|
40
|
-
const res = await new TypeCommand(key).exec(client)
|
|
41
|
-
expect(res).toEqual("set")
|
|
42
|
-
})
|
|
43
|
-
})
|
|
44
|
-
|
|
45
|
-
describe("hash", () => {
|
|
46
|
-
it("returns the correct type", async () => {
|
|
47
|
-
const key = newKey()
|
|
48
|
-
const field = randomUUID()
|
|
49
|
-
const value = randomUUID()
|
|
50
|
-
await new HSetCommand(key, field, value).exec(client)
|
|
51
|
-
const res = await new TypeCommand(key).exec(client)
|
|
52
|
-
expect(res).toEqual("hash")
|
|
53
|
-
})
|
|
54
|
-
})
|
|
55
|
-
|
|
56
|
-
describe("zset", () => {
|
|
57
|
-
it("returns the correct type", async () => {
|
|
58
|
-
const key = newKey()
|
|
59
|
-
const member = randomUUID()
|
|
60
|
-
await new ZAddCommand(key, { score: 0, member }).exec(client)
|
|
61
|
-
const res = await new TypeCommand(key).exec(client)
|
|
62
|
-
expect(res).toEqual("zset")
|
|
63
|
-
})
|
|
64
|
-
})
|
|
65
|
-
|
|
66
|
-
describe("none", () => {
|
|
67
|
-
it("returns the correct type", async () => {
|
|
68
|
-
const key = newKey()
|
|
69
|
-
const res = await new TypeCommand(key).exec(client)
|
|
70
|
-
expect(res).toEqual("none")
|
|
71
|
-
})
|
|
72
|
-
})
|
package/pkg/commands/type.ts
DELETED
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import { Command } from "../command"
|
|
2
|
-
|
|
3
|
-
export type Type = "string" | "list" | "set" | "zset" | "hash" | "none"
|
|
4
|
-
/**
|
|
5
|
-
* @see https://redis.io/commands/type
|
|
6
|
-
*/
|
|
7
|
-
export class TypeCommand extends Command<Type, Type> {
|
|
8
|
-
constructor(key: string) {
|
|
9
|
-
super(["type", key])
|
|
10
|
-
}
|
|
11
|
-
}
|
|
@@ -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 { MSetCommand } from "./mset"
|
|
5
|
-
import { UnlinkCommand } from "./unlink"
|
|
6
|
-
const client = newHttpClient()
|
|
7
|
-
|
|
8
|
-
const { newKey, cleanup } = keygen()
|
|
9
|
-
afterAll(cleanup)
|
|
10
|
-
|
|
11
|
-
it("unlinks the keys", async () => {
|
|
12
|
-
const key1 = newKey()
|
|
13
|
-
const key2 = newKey()
|
|
14
|
-
const key3 = newKey()
|
|
15
|
-
const kv: Record<string, string> = {}
|
|
16
|
-
kv[key1] = randomUUID()
|
|
17
|
-
kv[key2] = randomUUID()
|
|
18
|
-
await new MSetCommand(kv).exec(client)
|
|
19
|
-
const res = await new UnlinkCommand(key1, key2, key3).exec(client)
|
|
20
|
-
expect(res).toEqual(2)
|
|
21
|
-
})
|
package/pkg/commands/unlink.ts
DELETED