@upstash/redis 0.0.0-ci.fb6b986f-20221006 → 0.0.0

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 (128) hide show
  1. package/README.md +20 -18
  2. package/esm/pkg/commands/command.js +12 -3
  3. package/esm/pkg/commands/getdel.js +9 -0
  4. package/esm/pkg/commands/hgetall.js +0 -4
  5. package/esm/pkg/commands/hrandfield.js +39 -0
  6. package/esm/pkg/commands/json_arrappend.js +9 -0
  7. package/esm/pkg/commands/json_arrindex.js +9 -0
  8. package/esm/pkg/commands/json_arrinsert.js +9 -0
  9. package/esm/pkg/commands/json_arrlen.js +9 -0
  10. package/esm/pkg/commands/json_arrpop.js +9 -0
  11. package/esm/pkg/commands/json_arrtrim.js +12 -0
  12. package/esm/pkg/commands/json_clear.js +9 -0
  13. package/esm/pkg/commands/json_del.js +9 -0
  14. package/esm/pkg/commands/json_forget.js +9 -0
  15. package/esm/pkg/commands/json_get.js +30 -0
  16. package/esm/pkg/commands/json_mget.js +9 -0
  17. package/esm/pkg/commands/json_numincrby.js +9 -0
  18. package/esm/pkg/commands/json_nummultby.js +9 -0
  19. package/esm/pkg/commands/json_objkeys.js +9 -0
  20. package/esm/pkg/commands/json_objlen.js +9 -0
  21. package/esm/pkg/commands/json_resp.js +9 -0
  22. package/esm/pkg/commands/json_set.js +18 -0
  23. package/esm/pkg/commands/json_strappend.js +9 -0
  24. package/esm/pkg/commands/json_strlen.js +9 -0
  25. package/esm/pkg/commands/json_toggle.js +9 -0
  26. package/esm/pkg/commands/json_type.js +9 -0
  27. package/esm/pkg/commands/lmove.js +9 -0
  28. package/esm/pkg/commands/mod.js +26 -0
  29. package/esm/pkg/commands/set.js +1 -1
  30. package/esm/pkg/commands/smismember.js +9 -0
  31. package/esm/pkg/commands/xadd.js +26 -0
  32. package/esm/pkg/commands/zdiffstore.js +9 -0
  33. package/esm/pkg/http.js +71 -25
  34. package/esm/pkg/pipeline.js +161 -12
  35. package/esm/pkg/redis.js +192 -2
  36. package/esm/platforms/cloudflare.js +10 -2
  37. package/esm/platforms/fastly.js +6 -0
  38. package/esm/platforms/node_with_fetch.js +26 -1
  39. package/esm/platforms/nodejs.js +24 -1
  40. package/esm/version.js +1 -0
  41. package/package.json +53 -20
  42. package/script/pkg/commands/command.js +12 -3
  43. package/script/pkg/commands/getdel.js +13 -0
  44. package/script/pkg/commands/hgetall.js +0 -4
  45. package/script/pkg/commands/hrandfield.js +43 -0
  46. package/script/pkg/commands/json_arrappend.js +13 -0
  47. package/script/pkg/commands/json_arrindex.js +13 -0
  48. package/script/pkg/commands/json_arrinsert.js +13 -0
  49. package/script/pkg/commands/json_arrlen.js +13 -0
  50. package/script/pkg/commands/json_arrpop.js +13 -0
  51. package/script/pkg/commands/json_arrtrim.js +16 -0
  52. package/script/pkg/commands/json_clear.js +13 -0
  53. package/script/pkg/commands/json_del.js +13 -0
  54. package/script/pkg/commands/json_forget.js +13 -0
  55. package/script/pkg/commands/json_get.js +34 -0
  56. package/script/pkg/commands/json_mget.js +13 -0
  57. package/script/pkg/commands/json_numincrby.js +13 -0
  58. package/script/pkg/commands/json_nummultby.js +13 -0
  59. package/script/pkg/commands/json_objkeys.js +13 -0
  60. package/script/pkg/commands/json_objlen.js +13 -0
  61. package/script/pkg/commands/json_resp.js +13 -0
  62. package/script/pkg/commands/json_set.js +22 -0
  63. package/script/pkg/commands/json_strappend.js +13 -0
  64. package/script/pkg/commands/json_strlen.js +13 -0
  65. package/script/pkg/commands/json_toggle.js +13 -0
  66. package/script/pkg/commands/json_type.js +13 -0
  67. package/script/pkg/commands/lmove.js +13 -0
  68. package/script/pkg/commands/mod.js +26 -0
  69. package/script/pkg/commands/set.js +1 -1
  70. package/script/pkg/commands/smismember.js +13 -0
  71. package/script/pkg/commands/xadd.js +30 -0
  72. package/script/pkg/commands/zdiffstore.js +13 -0
  73. package/script/pkg/http.js +71 -25
  74. package/script/pkg/pipeline.js +160 -11
  75. package/script/pkg/redis.js +191 -1
  76. package/script/platforms/cloudflare.js +10 -2
  77. package/script/platforms/fastly.js +6 -0
  78. package/script/platforms/node_with_fetch.js +26 -1
  79. package/script/platforms/nodejs.js +24 -1
  80. package/script/version.js +4 -0
  81. package/types/pkg/commands/command.d.ts +5 -5
  82. package/types/pkg/commands/getdel.d.ts +7 -0
  83. package/types/pkg/commands/hdel.d.ts +1 -1
  84. package/types/pkg/commands/hrandfield.d.ts +9 -0
  85. package/types/pkg/commands/json_arrappend.d.ts +7 -0
  86. package/types/pkg/commands/json_arrindex.d.ts +13 -0
  87. package/types/pkg/commands/json_arrinsert.d.ts +7 -0
  88. package/types/pkg/commands/json_arrlen.d.ts +7 -0
  89. package/types/pkg/commands/json_arrpop.d.ts +7 -0
  90. package/types/pkg/commands/json_arrtrim.d.ts +7 -0
  91. package/types/pkg/commands/json_clear.d.ts +7 -0
  92. package/types/pkg/commands/json_del.d.ts +7 -0
  93. package/types/pkg/commands/json_forget.d.ts +7 -0
  94. package/types/pkg/commands/json_get.d.ts +15 -0
  95. package/types/pkg/commands/json_mget.d.ts +7 -0
  96. package/types/pkg/commands/json_numincrby.d.ts +7 -0
  97. package/types/pkg/commands/json_nummultby.d.ts +7 -0
  98. package/types/pkg/commands/json_objkeys.d.ts +7 -0
  99. package/types/pkg/commands/json_objlen.d.ts +7 -0
  100. package/types/pkg/commands/json_resp.d.ts +7 -0
  101. package/types/pkg/commands/json_set.d.ts +18 -0
  102. package/types/pkg/commands/json_strappend.d.ts +7 -0
  103. package/types/pkg/commands/json_strlen.d.ts +7 -0
  104. package/types/pkg/commands/json_toggle.d.ts +7 -0
  105. package/types/pkg/commands/json_type.d.ts +7 -0
  106. package/types/pkg/commands/lmove.d.ts +12 -0
  107. package/types/pkg/commands/mod.d.ts +26 -0
  108. package/types/pkg/commands/scan.d.ts +1 -1
  109. package/types/pkg/commands/script_flush.d.ts +1 -1
  110. package/types/pkg/commands/set.d.ts +3 -3
  111. package/types/pkg/commands/smembers.d.ts +2 -2
  112. package/types/pkg/commands/smismember.d.ts +7 -0
  113. package/types/pkg/commands/type.d.ts +1 -1
  114. package/types/pkg/commands/xadd.d.ts +31 -0
  115. package/types/pkg/commands/zadd.d.ts +3 -3
  116. package/types/pkg/commands/zdiffstore.d.ts +7 -0
  117. package/types/pkg/commands/zinterstore.d.ts +1 -1
  118. package/types/pkg/commands/zrange.d.ts +1 -1
  119. package/types/pkg/commands/zunionstore.d.ts +1 -1
  120. package/types/pkg/http.d.ts +48 -7
  121. package/types/pkg/pipeline.d.ts +252 -126
  122. package/types/pkg/redis.d.ts +137 -12
  123. package/types/pkg/types.d.ts +27 -1
  124. package/types/platforms/cloudflare.d.ts +9 -8
  125. package/types/platforms/fastly.d.ts +3 -7
  126. package/types/platforms/node_with_fetch.d.ts +3 -22
  127. package/types/platforms/nodejs.d.ts +4 -7
  128. package/types/version.d.ts +1 -0
package/README.md CHANGED
@@ -27,7 +27,7 @@ supported.
27
27
 
28
28
  ### Install
29
29
 
30
- #### npm
30
+ #### Node.js
31
31
 
32
32
  ```bash
33
33
  npm install @upstash/redis
@@ -81,23 +81,12 @@ data = await redis.spop('animals', 1)
81
81
  console.log(data)
82
82
  ```
83
83
 
84
- ### Upgrading to v1.4.0 **(ReferenceError: fetch is not defined)**
84
+ ## Troubleshooting
85
85
 
86
- If you are running on nodejs v17 and earlier, `fetch` will not be natively
87
- supported. Platforms like Vercel, Netlify, Deno, Fastly etc. provide a polyfill
88
- for you. But if you are running on bare node, you need to either specify a
89
- polyfill yourself or change the import path to:
90
-
91
- ```typescript
92
- import { Redis } from "@upstash/redis/with-fetch";
93
- ```
94
-
95
- ### Upgrading from v0.2.0?
96
-
97
- Please read the
98
- [migration guide](https://docs.upstash.com/redis/sdks/javascriptsdk/migration).
99
- For further explanation we wrote a
100
- [blog post](https://blog.upstash.com/upstash-redis-sdk-v1).
86
+ We have a
87
+ [dedicated page](https://docs.upstash.com/redis/sdks/javascriptsdk/troubleshooting)
88
+ for common problems. If you can't find a solution, please
89
+ [open an issue](https://github.com/upstash/upstash-redis/issues/new).
101
90
 
102
91
  ## Docs
103
92
 
@@ -119,5 +108,18 @@ the url and token
119
108
  UPSTASH_REDIS_REST_URL=".." UPSTASH_REDIS_REST_TOKEN=".." deno test -A
120
109
  ```
121
110
 
122
- ```
111
+ ### Telemetry
112
+
113
+ This library sends anonymous telemetry data to help us improve your experience.
114
+ We collect the following:
115
+
116
+ - SDK version
117
+ - Platform (Deno, Cloudflare, Vercel)
118
+ - Runtime version (node@18.x)
119
+
120
+ You can opt out by setting the `UPSTASH_DISABLE_TELEMETRY` environment variable
121
+ to any truthy value.
122
+
123
+ ```sh
124
+ UPSTASH_DISABLE_TELEMETRY=1
123
125
  ```
@@ -1,6 +1,15 @@
1
1
  import { UpstashError } from "../error.js";
2
2
  import { parseResponse } from "../util.js";
3
- const defaultSerializer = (c) => typeof c === "string" ? c : JSON.stringify(c);
3
+ const defaultSerializer = (c) => {
4
+ switch (typeof c) {
5
+ case "string":
6
+ case "number":
7
+ case "boolean":
8
+ return c;
9
+ default:
10
+ return JSON.stringify(c);
11
+ }
12
+ };
4
13
  /**
5
14
  * Command offers default (de)serialization and the exec method to all commands.
6
15
  *
@@ -37,7 +46,7 @@ export class Command {
37
46
  opts.automaticDeserialization
38
47
  ? opts?.deserialize ?? parseResponse
39
48
  : (x) => x;
40
- this.command = command.map(this.serialize);
49
+ this.command = command.map((c) => this.serialize(c));
41
50
  }
42
51
  /**
43
52
  * Execute the command using a client.
@@ -50,7 +59,7 @@ export class Command {
50
59
  throw new UpstashError(error);
51
60
  }
52
61
  if (typeof result === "undefined") {
53
- throw new Error(`Request did not return a result`);
62
+ throw new Error("Request did not return a result");
54
63
  }
55
64
  return this.deserialize(result);
56
65
  }
@@ -0,0 +1,9 @@
1
+ import { Command } from "./command.js";
2
+ /**
3
+ * @see https://redis.io/commands/getdel
4
+ */
5
+ export class GetDelCommand extends Command {
6
+ constructor(cmd, opts) {
7
+ super(["getdel", ...cmd], opts);
8
+ }
9
+ }
@@ -1,8 +1,4 @@
1
1
  import { Command } from "./command.js";
2
- /**
3
- * @param result De
4
- * @returns
5
- */
6
2
  function deserialize(result) {
7
3
  if (result.length === 0) {
8
4
  return null;
@@ -0,0 +1,39 @@
1
+ import { Command } from "./command.js";
2
+ function deserialize(result) {
3
+ if (result.length === 0) {
4
+ return null;
5
+ }
6
+ const obj = {};
7
+ while (result.length >= 2) {
8
+ const key = result.shift();
9
+ const value = result.shift();
10
+ try {
11
+ obj[key] = JSON.parse(value);
12
+ }
13
+ catch {
14
+ obj[key] = value;
15
+ }
16
+ }
17
+ return obj;
18
+ }
19
+ /**
20
+ * @see https://redis.io/commands/hrandfield
21
+ */
22
+ export class HRandFieldCommand extends Command {
23
+ constructor(cmd, opts) {
24
+ const command = ["hrandfield", cmd[0]];
25
+ if (typeof cmd[1] === "number") {
26
+ command.push(cmd[1]);
27
+ }
28
+ if (cmd[2]) {
29
+ command.push("WITHVALUES");
30
+ }
31
+ super(command, {
32
+ // @ts-ignore TODO:
33
+ deserialize: cmd[2]
34
+ ? (result) => deserialize(result)
35
+ : opts?.deserialize,
36
+ ...opts,
37
+ });
38
+ }
39
+ }
@@ -0,0 +1,9 @@
1
+ import { Command } from "./command.js";
2
+ /**
3
+ * @see https://redis.io/commands/json.arrappend
4
+ */
5
+ export class JsonArrAppendCommand extends Command {
6
+ constructor(cmd, opts) {
7
+ super(["JSON.ARRAPPEND", ...cmd], opts);
8
+ }
9
+ }
@@ -0,0 +1,9 @@
1
+ import { Command } from "./command.js";
2
+ /**
3
+ * @see https://redis.io/commands/json.arrindex
4
+ */
5
+ export class JsonArrIndexCommand extends Command {
6
+ constructor(cmd, opts) {
7
+ super(["JSON.ARRINDEX", ...cmd], opts);
8
+ }
9
+ }
@@ -0,0 +1,9 @@
1
+ import { Command } from "./command.js";
2
+ /**
3
+ * @see https://redis.io/commands/json.arrinsert
4
+ */
5
+ export class JsonArrInsertCommand extends Command {
6
+ constructor(cmd, opts) {
7
+ super(["JSON.ARRINSERT", ...cmd], opts);
8
+ }
9
+ }
@@ -0,0 +1,9 @@
1
+ import { Command } from "./command.js";
2
+ /**
3
+ * @see https://redis.io/commands/json.arrlen
4
+ */
5
+ export class JsonArrLenCommand extends Command {
6
+ constructor(cmd, opts) {
7
+ super(["JSON.ARRLEN", cmd[0], cmd[1] ?? "$"], opts);
8
+ }
9
+ }
@@ -0,0 +1,9 @@
1
+ import { Command } from "./command.js";
2
+ /**
3
+ * @see https://redis.io/commands/json.arrpop
4
+ */
5
+ export class JsonArrPopCommand extends Command {
6
+ constructor(cmd, opts) {
7
+ super(["JSON.ARRPOP", ...cmd], opts);
8
+ }
9
+ }
@@ -0,0 +1,12 @@
1
+ import { Command } from "./command.js";
2
+ /**
3
+ * @see https://redis.io/commands/json.arrtrim
4
+ */
5
+ export class JsonArrTrimCommand extends Command {
6
+ constructor(cmd, opts) {
7
+ const path = cmd[1] ?? "$";
8
+ const start = cmd[2] ?? 0;
9
+ const stop = cmd[3] ?? 0;
10
+ super(["JSON.ARRTRIM", cmd[0], path, start, stop], opts);
11
+ }
12
+ }
@@ -0,0 +1,9 @@
1
+ import { Command } from "./command.js";
2
+ /**
3
+ * @see https://redis.io/commands/json.clear
4
+ */
5
+ export class JsonClearCommand extends Command {
6
+ constructor(cmd, opts) {
7
+ super(["JSON.CLEAR", ...cmd], opts);
8
+ }
9
+ }
@@ -0,0 +1,9 @@
1
+ import { Command } from "./command.js";
2
+ /**
3
+ * @see https://redis.io/commands/json.del
4
+ */
5
+ export class JsonDelCommand extends Command {
6
+ constructor(cmd, opts) {
7
+ super(["JSON.DEL", ...cmd], opts);
8
+ }
9
+ }
@@ -0,0 +1,9 @@
1
+ import { Command } from "./command.js";
2
+ /**
3
+ * @see https://redis.io/commands/json.forget
4
+ */
5
+ export class JsonForgetCommand extends Command {
6
+ constructor(cmd, opts) {
7
+ super(["JSON.FORGET", ...cmd], opts);
8
+ }
9
+ }
@@ -0,0 +1,30 @@
1
+ import { Command } from "./command.js";
2
+ /**
3
+ * @see https://redis.io/commands/json.get
4
+ */
5
+ export class JsonGetCommand extends Command {
6
+ constructor(cmd, opts) {
7
+ const command = ["JSON.GET"];
8
+ if (typeof cmd[1] === "string") {
9
+ // @ts-ignore - we know this is a string
10
+ command.push(...cmd);
11
+ }
12
+ else {
13
+ command.push(cmd[0]);
14
+ if (cmd[1]) {
15
+ if (cmd[1].indent) {
16
+ command.push("INDENT", cmd[1].indent);
17
+ }
18
+ if (cmd[1].newline) {
19
+ command.push("NEWLINE", cmd[1].newline);
20
+ }
21
+ if (cmd[1].space) {
22
+ command.push("SPACE", cmd[1].space);
23
+ }
24
+ }
25
+ // @ts-ignore - we know this is a string
26
+ command.push(...cmd.slice(2));
27
+ }
28
+ super(command, opts);
29
+ }
30
+ }
@@ -0,0 +1,9 @@
1
+ import { Command } from "./command.js";
2
+ /**
3
+ * @see https://redis.io/commands/json.mget
4
+ */
5
+ export class JsonMGetCommand extends Command {
6
+ constructor(cmd, opts) {
7
+ super(["JSON.MGET", ...cmd[0], cmd[1]], opts);
8
+ }
9
+ }
@@ -0,0 +1,9 @@
1
+ import { Command } from "./command.js";
2
+ /**
3
+ * @see https://redis.io/commands/json.numincrby
4
+ */
5
+ export class JsonNumIncrByCommand extends Command {
6
+ constructor(cmd, opts) {
7
+ super(["JSON.NUMINCRBY", ...cmd], opts);
8
+ }
9
+ }
@@ -0,0 +1,9 @@
1
+ import { Command } from "./command.js";
2
+ /**
3
+ * @see https://redis.io/commands/json.nummultby
4
+ */
5
+ export class JsonNumMultByCommand extends Command {
6
+ constructor(cmd, opts) {
7
+ super(["JSON.NUMMULTBY", ...cmd], opts);
8
+ }
9
+ }
@@ -0,0 +1,9 @@
1
+ import { Command } from "./command.js";
2
+ /**
3
+ * @see https://redis.io/commands/json.objkeys
4
+ */
5
+ export class JsonObjKeysCommand extends Command {
6
+ constructor(cmd, opts) {
7
+ super(["JSON.OBJKEYS", ...cmd], opts);
8
+ }
9
+ }
@@ -0,0 +1,9 @@
1
+ import { Command } from "./command.js";
2
+ /**
3
+ * @see https://redis.io/commands/json.objlen
4
+ */
5
+ export class JsonObjLenCommand extends Command {
6
+ constructor(cmd, opts) {
7
+ super(["JSON.OBJLEN", ...cmd], opts);
8
+ }
9
+ }
@@ -0,0 +1,9 @@
1
+ import { Command } from "./command.js";
2
+ /**
3
+ * @see https://redis.io/commands/json.resp
4
+ */
5
+ export class JsonRespCommand extends Command {
6
+ constructor(cmd, opts) {
7
+ super(["JSON.RESP", ...cmd], opts);
8
+ }
9
+ }
@@ -0,0 +1,18 @@
1
+ import { Command } from "./command.js";
2
+ /**
3
+ * @see https://redis.io/commands/json.set
4
+ */
5
+ export class JsonSetCommand extends Command {
6
+ constructor(cmd, opts) {
7
+ const command = ["JSON.SET", cmd[0], cmd[1], cmd[2]];
8
+ if (cmd[3]) {
9
+ if (cmd[3].nx) {
10
+ command.push("NX");
11
+ }
12
+ else if (cmd[3].xx) {
13
+ command.push("XX");
14
+ }
15
+ }
16
+ super(command, opts);
17
+ }
18
+ }
@@ -0,0 +1,9 @@
1
+ import { Command } from "./command.js";
2
+ /**
3
+ * @see https://redis.io/commands/json.strappend
4
+ */
5
+ export class JsonStrAppendCommand extends Command {
6
+ constructor(cmd, opts) {
7
+ super(["JSON.STRAPPEND", ...cmd], opts);
8
+ }
9
+ }
@@ -0,0 +1,9 @@
1
+ import { Command } from "./command.js";
2
+ /**
3
+ * @see https://redis.io/commands/json.strlen
4
+ */
5
+ export class JsonStrLenCommand extends Command {
6
+ constructor(cmd, opts) {
7
+ super(["JSON.STRLEN", ...cmd], opts);
8
+ }
9
+ }
@@ -0,0 +1,9 @@
1
+ import { Command } from "./command.js";
2
+ /**
3
+ * @see https://redis.io/commands/json.toggle
4
+ */
5
+ export class JsonToggleCommand extends Command {
6
+ constructor(cmd, opts) {
7
+ super(["JSON.TOGGLE", ...cmd], opts);
8
+ }
9
+ }
@@ -0,0 +1,9 @@
1
+ import { Command } from "./command.js";
2
+ /**
3
+ * @see https://redis.io/commands/json.type
4
+ */
5
+ export class JsonTypeCommand extends Command {
6
+ constructor(cmd, opts) {
7
+ super(["JSON.TYPE", ...cmd], opts);
8
+ }
9
+ }
@@ -0,0 +1,9 @@
1
+ import { Command } from "./command.js";
2
+ /**
3
+ * @see https://redis.io/commands/lmove
4
+ */
5
+ export class LMoveCommand extends Command {
6
+ constructor(cmd, opts) {
7
+ super(["lmove", ...cmd], opts);
8
+ }
9
+ }
@@ -17,6 +17,7 @@ export * from "./flushall.js";
17
17
  export * from "./flushdb.js";
18
18
  export * from "./get.js";
19
19
  export * from "./getbit.js";
20
+ export * from "./getdel.js";
20
21
  export * from "./getrange.js";
21
22
  export * from "./getset.js";
22
23
  export * from "./hdel.js";
@@ -29,6 +30,7 @@ export * from "./hkeys.js";
29
30
  export * from "./hlen.js";
30
31
  export * from "./hmget.js";
31
32
  export * from "./hmset.js";
33
+ export * from "./hrandfield.js";
32
34
  export * from "./hscan.js";
33
35
  export * from "./hset.js";
34
36
  export * from "./hsetnx.js";
@@ -37,10 +39,32 @@ export * from "./hvals.js";
37
39
  export * from "./incr.js";
38
40
  export * from "./incrby.js";
39
41
  export * from "./incrbyfloat.js";
42
+ export * from "./json_arrappend.js";
43
+ export * from "./json_arrindex.js";
44
+ export * from "./json_arrinsert.js";
45
+ export * from "./json_arrlen.js";
46
+ export * from "./json_arrpop.js";
47
+ export * from "./json_arrtrim.js";
48
+ export * from "./json_clear.js";
49
+ export * from "./json_del.js";
50
+ export * from "./json_forget.js";
51
+ export * from "./json_get.js";
52
+ export * from "./json_mget.js";
53
+ export * from "./json_numincrby.js";
54
+ export * from "./json_nummultby.js";
55
+ export * from "./json_objkeys.js";
56
+ export * from "./json_objlen.js";
57
+ export * from "./json_resp.js";
58
+ export * from "./json_set.js";
59
+ export * from "./json_strappend.js";
60
+ export * from "./json_strlen.js";
61
+ export * from "./json_toggle.js";
62
+ export * from "./json_type.js";
40
63
  export * from "./keys.js";
41
64
  export * from "./lindex.js";
42
65
  export * from "./linsert.js";
43
66
  export * from "./llen.js";
67
+ export * from "./lmove.js";
44
68
  export * from "./lpop.js";
45
69
  export * from "./lpos.js";
46
70
  export * from "./lpush.js";
@@ -82,6 +106,7 @@ export * from "./sinter.js";
82
106
  export * from "./sinterstore.js";
83
107
  export * from "./sismember.js";
84
108
  export * from "./smembers.js";
109
+ export * from "./smismember.js";
85
110
  export * from "./smove.js";
86
111
  export * from "./spop.js";
87
112
  export * from "./srandmember.js";
@@ -95,6 +120,7 @@ export * from "./touch.js";
95
120
  export * from "./ttl.js";
96
121
  export * from "./type.js";
97
122
  export * from "./unlink.js";
123
+ export * from "./xadd.js";
98
124
  export * from "./zadd.js";
99
125
  export * from "./zcard.js";
100
126
  export * from "./zcount.js";
@@ -28,7 +28,7 @@ export class SetCommand extends Command {
28
28
  command.push("pxat", opts.pxat);
29
29
  }
30
30
  else if ("keepTtl" in opts && opts.keepTtl) {
31
- command.push("keepTtl", opts.keepTtl);
31
+ command.push("keepTtl");
32
32
  }
33
33
  }
34
34
  super(command, cmdOpts);
@@ -0,0 +1,9 @@
1
+ import { Command } from "./command.js";
2
+ /**
3
+ * @see https://redis.io/commands/smismember
4
+ */
5
+ export class SMIsMemberCommand extends Command {
6
+ constructor(cmd, opts) {
7
+ super(["smismember", cmd[0], ...cmd[1]], opts);
8
+ }
9
+ }
@@ -0,0 +1,26 @@
1
+ import { Command } from "./command.js";
2
+ /**
3
+ * @see https://redis.io/commands/xadd
4
+ */
5
+ export class XAddCommand extends Command {
6
+ constructor([key, id, entries, opts], commandOptions) {
7
+ const command = ["XADD", key];
8
+ if (opts) {
9
+ if (opts.nomkStream) {
10
+ command.push("NOMKSTREAM");
11
+ }
12
+ if (opts.trim) {
13
+ command.push(opts.trim.type, opts.trim.comparison, opts.trim.threshold);
14
+ if (typeof opts.trim.limit !== "undefined") {
15
+ command.push("LIMIT", opts.trim.limit);
16
+ }
17
+ }
18
+ }
19
+ command.push(id);
20
+ // entries
21
+ Object.entries(entries).forEach(([k, v]) => {
22
+ command.push(k, v);
23
+ });
24
+ super(command, commandOptions);
25
+ }
26
+ }
@@ -0,0 +1,9 @@
1
+ import { Command } from "./command.js";
2
+ /**
3
+ * @see https://redis.io/commands/zdiffstore
4
+ */
5
+ export class ZDiffStoreCommand extends Command {
6
+ constructor(cmd, opts) {
7
+ super(["zdiffstore", ...cmd], opts);
8
+ }
9
+ }