@upstash/redis 0.0.0-ci.fcd85d60 → 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 (165) hide show
  1. package/README.md +44 -280
  2. package/esm/deps/deno.land/x/base64@v0.2.1/base.js +100 -0
  3. package/esm/deps/deno.land/x/base64@v0.2.1/base64url.js +9 -0
  4. package/esm/deps/deno.land/x/sha1@v1.0.3/deps.js +1 -0
  5. package/esm/deps/deno.land/x/sha1@v1.0.3/mod.js +191 -0
  6. package/esm/deps/denopkg.com/chiefbiiko/std-encoding@v1.0.0/mod.js +50 -0
  7. package/esm/pkg/commands/command.js +12 -3
  8. package/esm/pkg/commands/getdel.js +9 -0
  9. package/esm/pkg/commands/hgetall.js +0 -4
  10. package/esm/pkg/commands/hrandfield.js +39 -0
  11. package/esm/pkg/commands/json_arrappend.js +9 -0
  12. package/esm/pkg/commands/json_arrindex.js +9 -0
  13. package/esm/pkg/commands/json_arrinsert.js +9 -0
  14. package/esm/pkg/commands/json_arrlen.js +9 -0
  15. package/esm/pkg/commands/json_arrpop.js +9 -0
  16. package/esm/pkg/commands/json_arrtrim.js +12 -0
  17. package/esm/pkg/commands/json_clear.js +9 -0
  18. package/esm/pkg/commands/json_del.js +9 -0
  19. package/esm/pkg/commands/json_forget.js +9 -0
  20. package/esm/pkg/commands/json_get.js +30 -0
  21. package/esm/pkg/commands/json_mget.js +9 -0
  22. package/esm/pkg/commands/json_numincrby.js +9 -0
  23. package/esm/pkg/commands/json_nummultby.js +9 -0
  24. package/esm/pkg/commands/json_objkeys.js +9 -0
  25. package/esm/pkg/commands/json_objlen.js +9 -0
  26. package/esm/pkg/commands/json_resp.js +9 -0
  27. package/esm/pkg/commands/json_set.js +18 -0
  28. package/esm/pkg/commands/json_strappend.js +9 -0
  29. package/esm/pkg/commands/json_strlen.js +9 -0
  30. package/esm/pkg/commands/json_toggle.js +9 -0
  31. package/esm/pkg/commands/json_type.js +9 -0
  32. package/esm/pkg/commands/lmove.js +9 -0
  33. package/esm/pkg/commands/lpos.js +19 -0
  34. package/esm/pkg/commands/mod.js +27 -0
  35. package/esm/pkg/commands/scan.js +3 -0
  36. package/esm/pkg/commands/sdiffstore.js +1 -1
  37. package/esm/pkg/commands/set.js +16 -4
  38. package/esm/pkg/commands/smismember.js +9 -0
  39. package/esm/pkg/commands/xadd.js +26 -0
  40. package/esm/pkg/commands/zdiffstore.js +9 -0
  41. package/esm/pkg/commands/zmscore.js +10 -0
  42. package/esm/pkg/commands/zrange.js +6 -0
  43. package/esm/pkg/http.js +134 -9
  44. package/esm/pkg/pipeline.js +180 -12
  45. package/esm/pkg/redis.js +227 -2
  46. package/esm/pkg/script.js +77 -0
  47. package/esm/platforms/cloudflare.js +14 -26
  48. package/esm/platforms/fastly.js +10 -25
  49. package/esm/platforms/node_with_fetch.js +30 -26
  50. package/esm/platforms/nodejs.js +28 -26
  51. package/esm/version.js +1 -0
  52. package/package.json +53 -58
  53. package/script/deps/deno.land/x/base64@v0.2.1/base.js +104 -0
  54. package/script/deps/deno.land/x/base64@v0.2.1/base64url.js +13 -0
  55. package/script/deps/deno.land/x/sha1@v1.0.3/deps.js +6 -0
  56. package/script/deps/deno.land/x/sha1@v1.0.3/mod.js +196 -0
  57. package/script/deps/denopkg.com/chiefbiiko/std-encoding@v1.0.0/mod.js +55 -0
  58. package/script/pkg/commands/command.js +12 -3
  59. package/script/pkg/commands/getdel.js +13 -0
  60. package/script/pkg/commands/hgetall.js +0 -4
  61. package/script/pkg/commands/hrandfield.js +43 -0
  62. package/script/pkg/commands/json_arrappend.js +13 -0
  63. package/script/pkg/commands/json_arrindex.js +13 -0
  64. package/script/pkg/commands/json_arrinsert.js +13 -0
  65. package/script/pkg/commands/json_arrlen.js +13 -0
  66. package/script/pkg/commands/json_arrpop.js +13 -0
  67. package/script/pkg/commands/json_arrtrim.js +16 -0
  68. package/script/pkg/commands/json_clear.js +13 -0
  69. package/script/pkg/commands/json_del.js +13 -0
  70. package/script/pkg/commands/json_forget.js +13 -0
  71. package/script/pkg/commands/json_get.js +34 -0
  72. package/script/pkg/commands/json_mget.js +13 -0
  73. package/script/pkg/commands/json_numincrby.js +13 -0
  74. package/script/pkg/commands/json_nummultby.js +13 -0
  75. package/script/pkg/commands/json_objkeys.js +13 -0
  76. package/script/pkg/commands/json_objlen.js +13 -0
  77. package/script/pkg/commands/json_resp.js +13 -0
  78. package/script/pkg/commands/json_set.js +22 -0
  79. package/script/pkg/commands/json_strappend.js +13 -0
  80. package/script/pkg/commands/json_strlen.js +13 -0
  81. package/script/pkg/commands/json_toggle.js +13 -0
  82. package/script/pkg/commands/json_type.js +13 -0
  83. package/script/pkg/commands/lmove.js +13 -0
  84. package/script/pkg/commands/lpos.js +23 -0
  85. package/script/pkg/commands/mod.js +27 -0
  86. package/script/pkg/commands/scan.js +3 -0
  87. package/script/pkg/commands/sdiffstore.js +1 -1
  88. package/script/pkg/commands/set.js +16 -4
  89. package/script/pkg/commands/smismember.js +13 -0
  90. package/script/pkg/commands/xadd.js +30 -0
  91. package/script/pkg/commands/zdiffstore.js +13 -0
  92. package/script/pkg/commands/zmscore.js +14 -0
  93. package/script/pkg/commands/zrange.js +6 -0
  94. package/script/pkg/http.js +134 -9
  95. package/script/pkg/pipeline.js +179 -11
  96. package/script/pkg/redis.js +226 -1
  97. package/script/pkg/script.js +81 -0
  98. package/script/platforms/cloudflare.js +14 -26
  99. package/script/platforms/fastly.js +10 -25
  100. package/script/platforms/node_with_fetch.js +30 -26
  101. package/script/platforms/nodejs.js +28 -26
  102. package/script/version.js +4 -0
  103. package/types/deps/deno.land/x/base64@v0.2.1/base.d.ts +5 -0
  104. package/types/deps/deno.land/x/base64@v0.2.1/base64url.d.ts +1 -0
  105. package/types/deps/deno.land/x/sha1@v1.0.3/deps.d.ts +1 -0
  106. package/types/deps/deno.land/x/sha1@v1.0.3/mod.d.ts +26 -0
  107. package/types/deps/denopkg.com/chiefbiiko/std-encoding@v1.0.0/mod.d.ts +3 -0
  108. package/types/pkg/commands/bitop.d.ts +0 -1
  109. package/types/pkg/commands/bitpos.d.ts +1 -1
  110. package/types/pkg/commands/command.d.ts +5 -5
  111. package/types/pkg/commands/getdel.d.ts +7 -0
  112. package/types/pkg/commands/hdel.d.ts +1 -1
  113. package/types/pkg/commands/hrandfield.d.ts +9 -0
  114. package/types/pkg/commands/json_arrappend.d.ts +7 -0
  115. package/types/pkg/commands/json_arrindex.d.ts +13 -0
  116. package/types/pkg/commands/json_arrinsert.d.ts +7 -0
  117. package/types/pkg/commands/json_arrlen.d.ts +7 -0
  118. package/types/pkg/commands/json_arrpop.d.ts +7 -0
  119. package/types/pkg/commands/json_arrtrim.d.ts +7 -0
  120. package/types/pkg/commands/json_clear.d.ts +7 -0
  121. package/types/pkg/commands/json_del.d.ts +7 -0
  122. package/types/pkg/commands/json_forget.d.ts +7 -0
  123. package/types/pkg/commands/json_get.d.ts +15 -0
  124. package/types/pkg/commands/json_mget.d.ts +7 -0
  125. package/types/pkg/commands/json_numincrby.d.ts +7 -0
  126. package/types/pkg/commands/json_nummultby.d.ts +7 -0
  127. package/types/pkg/commands/json_objkeys.d.ts +7 -0
  128. package/types/pkg/commands/json_objlen.d.ts +7 -0
  129. package/types/pkg/commands/json_resp.d.ts +7 -0
  130. package/types/pkg/commands/json_set.d.ts +18 -0
  131. package/types/pkg/commands/json_strappend.d.ts +7 -0
  132. package/types/pkg/commands/json_strlen.d.ts +7 -0
  133. package/types/pkg/commands/json_toggle.d.ts +7 -0
  134. package/types/pkg/commands/json_type.d.ts +7 -0
  135. package/types/pkg/commands/lmove.d.ts +12 -0
  136. package/types/pkg/commands/lpop.d.ts +1 -1
  137. package/types/pkg/commands/lpos.d.ts +15 -0
  138. package/types/pkg/commands/mget.d.ts +1 -1
  139. package/types/pkg/commands/mod.d.ts +27 -0
  140. package/types/pkg/commands/rpop.d.ts +2 -2
  141. package/types/pkg/commands/scan.d.ts +2 -1
  142. package/types/pkg/commands/script_flush.d.ts +1 -1
  143. package/types/pkg/commands/sdiffstore.d.ts +1 -1
  144. package/types/pkg/commands/set.d.ts +31 -2
  145. package/types/pkg/commands/smembers.d.ts +2 -2
  146. package/types/pkg/commands/smismember.d.ts +7 -0
  147. package/types/pkg/commands/spop.d.ts +2 -2
  148. package/types/pkg/commands/type.d.ts +1 -1
  149. package/types/pkg/commands/xadd.d.ts +31 -0
  150. package/types/pkg/commands/zadd.d.ts +4 -4
  151. package/types/pkg/commands/zdiffstore.d.ts +7 -0
  152. package/types/pkg/commands/zinterstore.d.ts +1 -1
  153. package/types/pkg/commands/zmscore.d.ts +7 -0
  154. package/types/pkg/commands/zrange.d.ts +8 -1
  155. package/types/pkg/commands/zunionstore.d.ts +1 -1
  156. package/types/pkg/http.d.ts +73 -8
  157. package/types/pkg/pipeline.d.ts +262 -124
  158. package/types/pkg/redis.d.ts +162 -19
  159. package/types/pkg/script.d.ts +42 -0
  160. package/types/pkg/types.d.ts +27 -1
  161. package/types/platforms/cloudflare.d.ts +9 -4
  162. package/types/platforms/fastly.d.ts +3 -3
  163. package/types/platforms/node_with_fetch.d.ts +3 -3
  164. package/types/platforms/nodejs.d.ts +19 -3
  165. package/types/version.d.ts +1 -0
@@ -0,0 +1,50 @@
1
+ import { toUint8Array, fromUint8Array } from "../../../deno.land/x/base64@v0.2.1/base64url.js";
2
+ const decoder = new TextDecoder();
3
+ const encoder = new TextEncoder();
4
+ /** Serializes a Uint8Array to a hexadecimal string. */
5
+ function toHexString(buf) {
6
+ return buf.reduce((hex, byte) => `${hex}${byte < 16 ? "0" : ""}${byte.toString(16)}`, "");
7
+ }
8
+ /** Deserializes a Uint8Array from a hexadecimal string. */
9
+ function fromHexString(hex) {
10
+ const len = hex.length;
11
+ if (len % 2 || !/^[0-9a-fA-F]+$/.test(hex)) {
12
+ throw new TypeError("Invalid hex string.");
13
+ }
14
+ hex = hex.toLowerCase();
15
+ const buf = new Uint8Array(Math.floor(len / 2));
16
+ const end = len / 2;
17
+ for (let i = 0; i < end; ++i) {
18
+ buf[i] = parseInt(hex.substr(i * 2, 2), 16);
19
+ }
20
+ return buf;
21
+ }
22
+ /** Decodes a Uint8Array to utf8-, base64-, or hex-encoded string. */
23
+ export function decode(buf, encoding = "utf8") {
24
+ if (/^utf-?8$/i.test(encoding)) {
25
+ return decoder.decode(buf);
26
+ }
27
+ else if (/^base64$/i.test(encoding)) {
28
+ return fromUint8Array(buf);
29
+ }
30
+ else if (/^hex(?:adecimal)?$/i.test(encoding)) {
31
+ return toHexString(buf);
32
+ }
33
+ else {
34
+ throw new TypeError("Unsupported string encoding.");
35
+ }
36
+ }
37
+ export function encode(str, encoding = "utf8") {
38
+ if (/^utf-?8$/i.test(encoding)) {
39
+ return encoder.encode(str);
40
+ }
41
+ else if (/^base64$/i.test(encoding)) {
42
+ return toUint8Array(str);
43
+ }
44
+ else if (/^hex(?:adecimal)?$/i.test(encoding)) {
45
+ return fromHexString(str);
46
+ }
47
+ else {
48
+ throw new TypeError("Unsupported string encoding.");
49
+ }
50
+ }
@@ -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
+ }
@@ -0,0 +1,19 @@
1
+ import { Command } from "./command.js";
2
+ /**
3
+ * @see https://redis.io/commands/lpos
4
+ */
5
+ export class LPosCommand extends Command {
6
+ constructor(cmd, opts) {
7
+ const args = ["lpos", cmd[0], cmd[1]];
8
+ if (typeof cmd[2]?.rank === "number") {
9
+ args.push("rank", cmd[2].rank);
10
+ }
11
+ if (typeof cmd[2]?.count === "number") {
12
+ args.push("count", cmd[2].count);
13
+ }
14
+ if (typeof cmd[2]?.maxLen === "number") {
15
+ args.push("maxLen", cmd[2].maxLen);
16
+ }
17
+ super(args, opts);
18
+ }
19
+ }
@@ -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,11 +39,34 @@ 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";
69
+ export * from "./lpos.js";
45
70
  export * from "./lpush.js";
46
71
  export * from "./lpushx.js";
47
72
  export * from "./lrange.js";
@@ -81,6 +106,7 @@ export * from "./sinter.js";
81
106
  export * from "./sinterstore.js";
82
107
  export * from "./sismember.js";
83
108
  export * from "./smembers.js";
109
+ export * from "./smismember.js";
84
110
  export * from "./smove.js";
85
111
  export * from "./spop.js";
86
112
  export * from "./srandmember.js";
@@ -94,6 +120,7 @@ export * from "./touch.js";
94
120
  export * from "./ttl.js";
95
121
  export * from "./type.js";
96
122
  export * from "./unlink.js";
123
+ export * from "./xadd.js";
97
124
  export * from "./zadd.js";
98
125
  export * from "./zcard.js";
99
126
  export * from "./zcount.js";
@@ -11,6 +11,9 @@ export class ScanCommand extends Command {
11
11
  if (typeof opts?.count === "number") {
12
12
  command.push("count", opts.count);
13
13
  }
14
+ if (opts?.type && opts.type.length > 0) {
15
+ command.push("type", opts.type);
16
+ }
14
17
  super(command, cmdOpts);
15
18
  }
16
19
  }
@@ -1,6 +1,6 @@
1
1
  import { Command } from "./command.js";
2
2
  /**
3
- * @see https://redis.io/commands/sdiffstpre
3
+ * @see https://redis.io/commands/sdiffstore
4
4
  */
5
5
  export class SDiffStoreCommand extends Command {
6
6
  constructor(cmd, opts) {
@@ -6,17 +6,29 @@ export class SetCommand extends Command {
6
6
  constructor([key, value, opts], cmdOpts) {
7
7
  const command = ["set", key, value];
8
8
  if (opts) {
9
+ if ("nx" in opts && opts.nx) {
10
+ command.push("nx");
11
+ }
12
+ else if ("xx" in opts && opts.xx) {
13
+ command.push("xx");
14
+ }
15
+ if ("get" in opts && opts.get) {
16
+ command.push("get");
17
+ }
9
18
  if ("ex" in opts && typeof opts.ex === "number") {
10
19
  command.push("ex", opts.ex);
11
20
  }
12
21
  else if ("px" in opts && typeof opts.px === "number") {
13
22
  command.push("px", opts.px);
14
23
  }
15
- if ("nx" in opts && opts.nx) {
16
- command.push("nx");
24
+ else if ("exat" in opts && typeof opts.exat === "number") {
25
+ command.push("exat", opts.exat);
17
26
  }
18
- else if ("xx" in opts && opts.xx) {
19
- command.push("xx");
27
+ else if ("pxat" in opts && typeof opts.pxat === "number") {
28
+ command.push("pxat", opts.pxat);
29
+ }
30
+ else if ("keepTtl" in opts && opts.keepTtl) {
31
+ command.push("keepTtl");
20
32
  }
21
33
  }
22
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
+ }
@@ -0,0 +1,10 @@
1
+ import { Command } from "./command.js";
2
+ /**
3
+ * @see https://redis.io/commands/zmscore
4
+ */
5
+ export class ZMScoreCommand extends Command {
6
+ constructor(cmd, opts) {
7
+ const [key, members] = cmd;
8
+ super(["zmscore", key, ...members], opts);
9
+ }
10
+ }
@@ -12,6 +12,12 @@ export class ZRangeCommand extends Command {
12
12
  if (opts?.byLex) {
13
13
  command.push("bylex");
14
14
  }
15
+ if (opts?.rev) {
16
+ command.push("rev");
17
+ }
18
+ if (typeof opts?.count !== "undefined" && typeof opts?.offset !== "undefined") {
19
+ command.push("limit", opts.offset, opts.count);
20
+ }
15
21
  if (opts?.withScores) {
16
22
  command.push("withscores");
17
23
  }