@upstash/redis 0.0.0-ci.608697de-20221215 → 0.0.0-ci.6493a578-20230531

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 (115) hide show
  1. package/README.md +8 -1
  2. package/esm/pkg/commands/command.js +12 -3
  3. package/esm/pkg/commands/json_arrappend.js +9 -0
  4. package/esm/pkg/commands/json_arrindex.js +9 -0
  5. package/esm/pkg/commands/json_arrinsert.js +9 -0
  6. package/esm/pkg/commands/json_arrlen.js +9 -0
  7. package/esm/pkg/commands/json_arrpop.js +9 -0
  8. package/esm/pkg/commands/json_arrtrim.js +12 -0
  9. package/esm/pkg/commands/json_clear.js +9 -0
  10. package/esm/pkg/commands/json_del.js +9 -0
  11. package/esm/pkg/commands/json_forget.js +9 -0
  12. package/esm/pkg/commands/json_get.js +30 -0
  13. package/esm/pkg/commands/json_mget.js +9 -0
  14. package/esm/pkg/commands/json_numincrby.js +9 -0
  15. package/esm/pkg/commands/json_nummultby.js +9 -0
  16. package/esm/pkg/commands/json_objkeys.js +9 -0
  17. package/esm/pkg/commands/json_objlen.js +9 -0
  18. package/esm/pkg/commands/json_resp.js +9 -0
  19. package/esm/pkg/commands/json_set.js +18 -0
  20. package/esm/pkg/commands/json_strappend.js +9 -0
  21. package/esm/pkg/commands/json_strlen.js +9 -0
  22. package/esm/pkg/commands/json_toggle.js +9 -0
  23. package/esm/pkg/commands/json_type.js +9 -0
  24. package/esm/pkg/commands/lmove.js +9 -0
  25. package/esm/pkg/commands/mod.js +23 -0
  26. package/esm/pkg/commands/smismember.js +9 -0
  27. package/esm/pkg/commands/zdiffstore.js +9 -0
  28. package/esm/pkg/http.js +26 -16
  29. package/esm/pkg/pipeline.js +128 -7
  30. package/esm/pkg/redis.js +145 -1
  31. package/esm/platforms/cloudflare.js +6 -6
  32. package/esm/platforms/fastly.js +5 -0
  33. package/esm/platforms/node_with_fetch.js +23 -11
  34. package/esm/platforms/nodejs.js +21 -11
  35. package/esm/version.js +1 -1
  36. package/package.json +53 -20
  37. package/script/pkg/commands/command.js +12 -3
  38. package/script/pkg/commands/json_arrappend.js +13 -0
  39. package/script/pkg/commands/json_arrindex.js +13 -0
  40. package/script/pkg/commands/json_arrinsert.js +13 -0
  41. package/script/pkg/commands/json_arrlen.js +13 -0
  42. package/script/pkg/commands/json_arrpop.js +13 -0
  43. package/script/pkg/commands/json_arrtrim.js +16 -0
  44. package/script/pkg/commands/json_clear.js +13 -0
  45. package/script/pkg/commands/json_del.js +13 -0
  46. package/script/pkg/commands/json_forget.js +13 -0
  47. package/script/pkg/commands/json_get.js +34 -0
  48. package/script/pkg/commands/json_mget.js +13 -0
  49. package/script/pkg/commands/json_numincrby.js +13 -0
  50. package/script/pkg/commands/json_nummultby.js +13 -0
  51. package/script/pkg/commands/json_objkeys.js +13 -0
  52. package/script/pkg/commands/json_objlen.js +13 -0
  53. package/script/pkg/commands/json_resp.js +13 -0
  54. package/script/pkg/commands/json_set.js +22 -0
  55. package/script/pkg/commands/json_strappend.js +13 -0
  56. package/script/pkg/commands/json_strlen.js +13 -0
  57. package/script/pkg/commands/json_toggle.js +13 -0
  58. package/script/pkg/commands/json_type.js +13 -0
  59. package/script/pkg/commands/lmove.js +13 -0
  60. package/script/pkg/commands/mod.js +23 -0
  61. package/script/pkg/commands/smismember.js +13 -0
  62. package/script/pkg/commands/zdiffstore.js +13 -0
  63. package/script/pkg/http.js +26 -16
  64. package/script/pkg/pipeline.js +127 -6
  65. package/script/pkg/redis.js +144 -0
  66. package/script/platforms/cloudflare.js +6 -6
  67. package/script/platforms/fastly.js +5 -0
  68. package/script/platforms/node_with_fetch.js +23 -11
  69. package/script/platforms/nodejs.js +21 -11
  70. package/script/version.js +1 -1
  71. package/types/pkg/commands/command.d.ts +5 -5
  72. package/types/pkg/commands/hdel.d.ts +1 -1
  73. package/types/pkg/commands/json_arrappend.d.ts +7 -0
  74. package/types/pkg/commands/json_arrindex.d.ts +13 -0
  75. package/types/pkg/commands/json_arrinsert.d.ts +7 -0
  76. package/types/pkg/commands/json_arrlen.d.ts +7 -0
  77. package/types/pkg/commands/json_arrpop.d.ts +7 -0
  78. package/types/pkg/commands/json_arrtrim.d.ts +7 -0
  79. package/types/pkg/commands/json_clear.d.ts +7 -0
  80. package/types/pkg/commands/json_del.d.ts +7 -0
  81. package/types/pkg/commands/json_forget.d.ts +7 -0
  82. package/types/pkg/commands/json_get.d.ts +15 -0
  83. package/types/pkg/commands/json_mget.d.ts +7 -0
  84. package/types/pkg/commands/json_numincrby.d.ts +7 -0
  85. package/types/pkg/commands/json_nummultby.d.ts +7 -0
  86. package/types/pkg/commands/json_objkeys.d.ts +7 -0
  87. package/types/pkg/commands/json_objlen.d.ts +7 -0
  88. package/types/pkg/commands/json_resp.d.ts +7 -0
  89. package/types/pkg/commands/json_set.d.ts +18 -0
  90. package/types/pkg/commands/json_strappend.d.ts +7 -0
  91. package/types/pkg/commands/json_strlen.d.ts +7 -0
  92. package/types/pkg/commands/json_toggle.d.ts +7 -0
  93. package/types/pkg/commands/json_type.d.ts +7 -0
  94. package/types/pkg/commands/lmove.d.ts +12 -0
  95. package/types/pkg/commands/mod.d.ts +23 -0
  96. package/types/pkg/commands/scan.d.ts +1 -1
  97. package/types/pkg/commands/script_flush.d.ts +1 -1
  98. package/types/pkg/commands/set.d.ts +3 -3
  99. package/types/pkg/commands/smembers.d.ts +2 -2
  100. package/types/pkg/commands/smismember.d.ts +7 -0
  101. package/types/pkg/commands/type.d.ts +1 -1
  102. package/types/pkg/commands/zadd.d.ts +3 -3
  103. package/types/pkg/commands/zdiffstore.d.ts +7 -0
  104. package/types/pkg/commands/zinterstore.d.ts +1 -1
  105. package/types/pkg/commands/zrange.d.ts +1 -1
  106. package/types/pkg/commands/zunionstore.d.ts +1 -1
  107. package/types/pkg/http.d.ts +12 -23
  108. package/types/pkg/pipeline.d.ts +239 -126
  109. package/types/pkg/redis.d.ts +116 -13
  110. package/types/pkg/types.d.ts +27 -1
  111. package/types/platforms/cloudflare.d.ts +2 -2
  112. package/types/platforms/fastly.d.ts +1 -1
  113. package/types/platforms/node_with_fetch.d.ts +1 -1
  114. package/types/platforms/nodejs.d.ts +1 -1
  115. package/types/version.d.ts +1 -1
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,6 +81,13 @@ data = await redis.spop('animals', 1)
81
81
  console.log(data)
82
82
  ```
83
83
 
84
+ ## Troubleshooting
85
+
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).
90
+
84
91
  ## Docs
85
92
 
86
93
  See [the documentation](https://docs.upstash.com/features/javascriptsdk) for
@@ -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/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
+ }
@@ -39,10 +39,32 @@ export * from "./hvals.js";
39
39
  export * from "./incr.js";
40
40
  export * from "./incrby.js";
41
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";
42
63
  export * from "./keys.js";
43
64
  export * from "./lindex.js";
44
65
  export * from "./linsert.js";
45
66
  export * from "./llen.js";
67
+ export * from "./lmove.js";
46
68
  export * from "./lpop.js";
47
69
  export * from "./lpos.js";
48
70
  export * from "./lpush.js";
@@ -84,6 +106,7 @@ export * from "./sinter.js";
84
106
  export * from "./sinterstore.js";
85
107
  export * from "./sismember.js";
86
108
  export * from "./smembers.js";
109
+ export * from "./smismember.js";
87
110
  export * from "./smove.js";
88
111
  export * from "./spop.js";
89
112
  export * from "./srandmember.js";
@@ -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,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
+ }
package/esm/pkg/http.js CHANGED
@@ -28,22 +28,14 @@ export class HttpClient {
28
28
  this.options = {
29
29
  backend: config.options?.backend,
30
30
  agent: config.agent,
31
- responseEncoding: config.responseEncoding ?? "base64", // default to base64
31
+ responseEncoding: config.responseEncoding ?? "base64",
32
+ cache: config.cache,
32
33
  };
33
34
  this.baseUrl = config.baseUrl.replace(/\/$/, "");
34
35
  this.headers = {
35
36
  "Content-Type": "application/json",
36
37
  ...config.headers,
37
38
  };
38
- if (config.telemetry?.runtime) {
39
- this.headers["Upstash-Telemetry-Runtime"] = config.telemetry.runtime;
40
- }
41
- if (config.telemetry?.platform) {
42
- this.headers["Upstash-Telemetry-Platform"] = config.telemetry.platform;
43
- }
44
- if (config.telemetry?.sdk) {
45
- this.headers["Upstash-Telemetry-Sdk"] = config.telemetry.sdk;
46
- }
47
39
  if (this.options.responseEncoding === "base64") {
48
40
  this.headers["Upstash-Encoding"] = "base64";
49
41
  }
@@ -61,8 +53,26 @@ export class HttpClient {
61
53
  };
62
54
  }
63
55
  }
56
+ mergeTelemetry(telemetry) {
57
+ function merge(obj, key, value) {
58
+ if (!value) {
59
+ return obj;
60
+ }
61
+ if (obj[key]) {
62
+ obj[key] = [obj[key], value].join(",");
63
+ }
64
+ else {
65
+ obj[key] = value;
66
+ }
67
+ return obj;
68
+ }
69
+ this.headers = merge(this.headers, "Upstash-Telemetry-Runtime", telemetry.runtime);
70
+ this.headers = merge(this.headers, "Upstash-Telemetry-Platform", telemetry.platform);
71
+ this.headers = merge(this.headers, "Upstash-Telemetry-Sdk", telemetry.sdk);
72
+ }
64
73
  async request(req) {
65
74
  const requestOptions = {
75
+ cache: this.options.cache,
66
76
  method: "POST",
67
77
  headers: this.headers,
68
78
  body: JSON.stringify(req.body),
@@ -115,12 +125,12 @@ function base64decode(b64) {
115
125
  catch {
116
126
  dec = b64;
117
127
  }
118
- try {
119
- return decodeURIComponent(dec);
120
- }
121
- catch {
122
- return dec;
123
- }
128
+ return dec;
129
+ // try {
130
+ // return decodeURIComponent(dec);
131
+ // } catch {
132
+ // return dec;
133
+ // }
124
134
  }
125
135
  function decode(raw) {
126
136
  let result = undefined;
@@ -1,7 +1,8 @@
1
- import { AppendCommand, BitCountCommand, BitOpCommand, BitPosCommand, DBSizeCommand, DecrByCommand, DecrCommand, DelCommand, EchoCommand, EvalCommand, EvalshaCommand, ExistsCommand, ExpireAtCommand, ExpireCommand, FlushAllCommand, FlushDBCommand, GetBitCommand, GetCommand, GetDelCommand, GetRangeCommand, GetSetCommand, HDelCommand, HExistsCommand, HGetAllCommand, HGetCommand, HIncrByCommand, HIncrByFloatCommand, HKeysCommand, HLenCommand, HMGetCommand, HMSetCommand, HScanCommand, HSetCommand, HSetNXCommand, HStrLenCommand, HValsCommand, IncrByCommand, IncrByFloatCommand, IncrCommand, KeysCommand, LIndexCommand, LInsertCommand, LLenCommand, LPopCommand, LPosCommand, LPushCommand, LPushXCommand, LRangeCommand, LRemCommand, LSetCommand, LTrimCommand, MGetCommand, MSetCommand, MSetNXCommand, PersistCommand, PExpireAtCommand, PExpireCommand, PingCommand, PSetEXCommand, PTtlCommand, PublishCommand, RandomKeyCommand, RenameCommand, RenameNXCommand, RPopCommand, RPushCommand, RPushXCommand, SAddCommand, ScanCommand, SCardCommand, ScriptExistsCommand, ScriptFlushCommand, ScriptLoadCommand, SDiffCommand, SDiffStoreCommand, SetBitCommand, SetCommand, SetExCommand, SetNxCommand, SetRangeCommand, SInterCommand, SInterStoreCommand, SIsMemberCommand, SMembersCommand, SMoveCommand, SPopCommand, SRandMemberCommand, SRemCommand, SScanCommand, StrLenCommand, SUnionCommand, SUnionStoreCommand, TimeCommand, TouchCommand, TtlCommand, TypeCommand, UnlinkCommand, ZAddCommand, ZCardCommand, ZCountCommand, ZIncrByCommand, ZInterStoreCommand, ZLexCountCommand, ZPopMaxCommand, ZPopMinCommand, ZRangeCommand, ZRankCommand, ZRemCommand, ZRemRangeByLexCommand, ZRemRangeByRankCommand, ZRemRangeByScoreCommand, ZRevRankCommand, ZScanCommand, ZScoreCommand, ZUnionStoreCommand, } from "./commands/mod.js";
1
+ import { AppendCommand, BitCountCommand, BitOpCommand, BitPosCommand, DBSizeCommand, DecrByCommand, DecrCommand, DelCommand, EchoCommand, EvalCommand, EvalshaCommand, ExistsCommand, ExpireAtCommand, ExpireCommand, FlushAllCommand, FlushDBCommand, GetBitCommand, GetCommand, GetDelCommand, GetRangeCommand, GetSetCommand, HDelCommand, HExistsCommand, HGetAllCommand, HGetCommand, HIncrByCommand, HIncrByFloatCommand, HKeysCommand, HLenCommand, HMGetCommand, HMSetCommand, HScanCommand, HSetCommand, HSetNXCommand, HStrLenCommand, HValsCommand, IncrByCommand, IncrByFloatCommand, IncrCommand, JsonArrAppendCommand, JsonArrIndexCommand, JsonArrInsertCommand, JsonArrLenCommand, JsonArrPopCommand, JsonArrTrimCommand, JsonClearCommand, JsonDelCommand, JsonForgetCommand, JsonGetCommand, JsonMGetCommand, JsonNumIncrByCommand, JsonNumMultByCommand, JsonObjKeysCommand, JsonObjLenCommand, JsonRespCommand, JsonSetCommand, JsonStrAppendCommand, JsonStrLenCommand, JsonToggleCommand, JsonTypeCommand, KeysCommand, LIndexCommand, LInsertCommand, LLenCommand, LMoveCommand, LPopCommand, LPosCommand, LPushCommand, LPushXCommand, LRangeCommand, LRemCommand, LSetCommand, LTrimCommand, MGetCommand, MSetCommand, MSetNXCommand, PersistCommand, PExpireAtCommand, PExpireCommand, PingCommand, PSetEXCommand, PTtlCommand, PublishCommand, RandomKeyCommand, RenameCommand, RenameNXCommand, RPopCommand, RPushCommand, RPushXCommand, SAddCommand, ScanCommand, SCardCommand, ScriptExistsCommand, ScriptFlushCommand, ScriptLoadCommand, SDiffCommand, SDiffStoreCommand, SetBitCommand, SetCommand, SetExCommand, SetNxCommand, SetRangeCommand, SInterCommand, SInterStoreCommand, SIsMemberCommand, SMembersCommand, SMIsMemberCommand, SMoveCommand, SPopCommand, SRandMemberCommand, SRemCommand, SScanCommand, StrLenCommand, SUnionCommand, SUnionStoreCommand, TimeCommand, TouchCommand, TtlCommand, TypeCommand, UnlinkCommand, ZAddCommand, ZCardCommand, ZCountCommand, ZIncrByCommand, ZInterStoreCommand, ZLexCountCommand, ZPopMaxCommand, ZPopMinCommand, ZRangeCommand, ZRankCommand, ZRemCommand, ZRemRangeByLexCommand, ZRemRangeByRankCommand, ZRemRangeByScoreCommand, ZRevRankCommand, ZScanCommand, ZScoreCommand, ZUnionStoreCommand, } from "./commands/mod.js";
2
2
  import { UpstashError } from "./error.js";
3
3
  import { ZMScoreCommand } from "./commands/zmscore.js";
4
4
  import { HRandFieldCommand } from "./commands/hrandfield.js";
5
+ import { ZDiffStoreCommand } from "./commands/zdiffstore.js";
5
6
  /**
6
7
  * Upstash REST API supports command pipelining to send multiple commands in
7
8
  * batch, instead of sending each command one by one and waiting for a response.
@@ -30,7 +31,7 @@ import { HRandFieldCommand } from "./commands/hrandfield.js";
30
31
  * const res = await p.set("key","value").get("key").exec()
31
32
  * ```
32
33
  *
33
- * It's not possible to infer correct types with a dynamic pipeline, so you can
34
+ * Return types are inferred if all commands are chained, but you can still
34
35
  * override the response type manually:
35
36
  * ```ts
36
37
  * redis.pipeline()
@@ -71,9 +72,11 @@ export class Pipeline {
71
72
  *
72
73
  * Returns an array with the results of all pipelined commands.
73
74
  *
74
- * You can define a return type manually to make working in typescript easier
75
+ * If all commands are statically chained from start to finish, types are inferred. You can still define a return type manually if necessary though:
75
76
  * ```ts
76
- * redis.pipeline().get("key").exec<[{ greeting: string }]>()
77
+ * const p = redis.pipeline()
78
+ * p.get("key")
79
+ * const result = p.exec<[{ greeting: string }]>()
77
80
  * ```
78
81
  */
79
82
  Object.defineProperty(this, "exec", {
@@ -133,6 +136,15 @@ export class Pipeline {
133
136
  writable: true,
134
137
  value: (...args) => this.chain(new BitPosCommand(args, this.commandOptions))
135
138
  });
139
+ /**
140
+ * @see https://redis.io/commands/zdiffstore
141
+ */
142
+ Object.defineProperty(this, "zdiffstore", {
143
+ enumerable: true,
144
+ configurable: true,
145
+ writable: true,
146
+ value: (...args) => this.chain(new ZDiffStoreCommand(args, this.commandOptions))
147
+ });
136
148
  /**
137
149
  * @see https://redis.io/commands/dbsize
138
150
  */
@@ -493,6 +505,15 @@ export class Pipeline {
493
505
  writable: true,
494
506
  value: (...args) => this.chain(new LLenCommand(args, this.commandOptions))
495
507
  });
508
+ /**
509
+ * @see https://redis.io/commands/lmove
510
+ */
511
+ Object.defineProperty(this, "lmove", {
512
+ enumerable: true,
513
+ configurable: true,
514
+ writable: true,
515
+ value: (...args) => this.chain(new LMoveCommand(args, this.commandOptions))
516
+ });
496
517
  /**
497
518
  * @see https://redis.io/commands/lpop
498
519
  */
@@ -862,6 +883,15 @@ export class Pipeline {
862
883
  writable: true,
863
884
  value: (...args) => this.chain(new SMembersCommand(args, this.commandOptions))
864
885
  });
886
+ /**
887
+ * @see https://redis.io/commands/smismember
888
+ */
889
+ Object.defineProperty(this, "smismember", {
890
+ enumerable: true,
891
+ configurable: true,
892
+ writable: true,
893
+ value: (key, members) => this.chain(new SMIsMemberCommand([key, members], this.commandOptions))
894
+ });
865
895
  /**
866
896
  * @see https://redis.io/commands/smove
867
897
  */
@@ -1156,16 +1186,107 @@ export class Pipeline {
1156
1186
  value: (...args) => this.chain(new ZUnionStoreCommand(args, this.commandOptions))
1157
1187
  });
1158
1188
  this.client = opts.client;
1159
- this.commands = [];
1189
+ this.commands = []; // the TCommands generic in the class definition is only used for carrying through chained command types and should never be explicitly set when instantiating the class
1160
1190
  this.commandOptions = opts.commandOptions;
1161
1191
  this.multiExec = opts.multiExec ?? false;
1162
1192
  }
1163
1193
  /**
1164
- * Pushes a command into the pipelien and returns a chainable instance of the
1194
+ * Pushes a command into the pipeline and returns a chainable instance of the
1165
1195
  * pipeline
1166
1196
  */
1167
1197
  chain(command) {
1168
1198
  this.commands.push(command);
1169
- return this;
1199
+ return this; // TS thinks we're returning Pipeline<[]> here, because we're not creating a new instance of the class, hence the cast
1200
+ }
1201
+ /**
1202
+ * @see https://redis.io/commands/?group=json
1203
+ */
1204
+ get json() {
1205
+ return {
1206
+ /**
1207
+ * @see https://redis.io/commands/json.arrappend
1208
+ */
1209
+ arrappend: (...args) => this.chain(new JsonArrAppendCommand(args, this.commandOptions)),
1210
+ /**
1211
+ * @see https://redis.io/commands/json.arrindex
1212
+ */
1213
+ arrindex: (...args) => this.chain(new JsonArrIndexCommand(args, this.commandOptions)),
1214
+ /**
1215
+ * @see https://redis.io/commands/json.arrinsert
1216
+ */
1217
+ arrinsert: (...args) => this.chain(new JsonArrInsertCommand(args, this.commandOptions)),
1218
+ /**
1219
+ * @see https://redis.io/commands/json.arrlen
1220
+ */
1221
+ arrlen: (...args) => this.chain(new JsonArrLenCommand(args, this.commandOptions)),
1222
+ /**
1223
+ * @see https://redis.io/commands/json.arrpop
1224
+ */
1225
+ arrpop: (...args) => this.chain(new JsonArrPopCommand(args, this.commandOptions)),
1226
+ /**
1227
+ * @see https://redis.io/commands/json.arrtrim
1228
+ */
1229
+ arrtrim: (...args) => this.chain(new JsonArrTrimCommand(args, this.commandOptions)),
1230
+ /**
1231
+ * @see https://redis.io/commands/json.clear
1232
+ */
1233
+ clear: (...args) => this.chain(new JsonClearCommand(args, this.commandOptions)),
1234
+ /**
1235
+ * @see https://redis.io/commands/json.del
1236
+ */
1237
+ del: (...args) => this.chain(new JsonDelCommand(args, this.commandOptions)),
1238
+ /**
1239
+ * @see https://redis.io/commands/json.forget
1240
+ */
1241
+ forget: (...args) => this.chain(new JsonForgetCommand(args, this.commandOptions)),
1242
+ /**
1243
+ * @see https://redis.io/commands/json.get
1244
+ */
1245
+ get: (...args) => this.chain(new JsonGetCommand(args, this.commandOptions)),
1246
+ /**
1247
+ * @see https://redis.io/commands/json.mget
1248
+ */
1249
+ mget: (...args) => this.chain(new JsonMGetCommand(args, this.commandOptions)),
1250
+ /**
1251
+ * @see https://redis.io/commands/json.numincrby
1252
+ */
1253
+ numincrby: (...args) => this.chain(new JsonNumIncrByCommand(args, this.commandOptions)),
1254
+ /**
1255
+ * @see https://redis.io/commands/json.nummultby
1256
+ */
1257
+ nummultby: (...args) => this.chain(new JsonNumMultByCommand(args, this.commandOptions)),
1258
+ /**
1259
+ * @see https://redis.io/commands/json.objkeys
1260
+ */
1261
+ objkeys: (...args) => this.chain(new JsonObjKeysCommand(args, this.commandOptions)),
1262
+ /**
1263
+ * @see https://redis.io/commands/json.objlen
1264
+ */
1265
+ objlen: (...args) => this.chain(new JsonObjLenCommand(args, this.commandOptions)),
1266
+ /**
1267
+ * @see https://redis.io/commands/json.resp
1268
+ */
1269
+ resp: (...args) => this.chain(new JsonRespCommand(args, this.commandOptions)),
1270
+ /**
1271
+ * @see https://redis.io/commands/json.set
1272
+ */
1273
+ set: (...args) => this.chain(new JsonSetCommand(args, this.commandOptions)),
1274
+ /**
1275
+ * @see https://redis.io/commands/json.strappend
1276
+ */
1277
+ strappend: (...args) => this.chain(new JsonStrAppendCommand(args, this.commandOptions)),
1278
+ /**
1279
+ * @see https://redis.io/commands/json.strlen
1280
+ */
1281
+ strlen: (...args) => this.chain(new JsonStrLenCommand(args, this.commandOptions)),
1282
+ /**
1283
+ * @see https://redis.io/commands/json.toggle
1284
+ */
1285
+ toggle: (...args) => this.chain(new JsonToggleCommand(args, this.commandOptions)),
1286
+ /**
1287
+ * @see https://redis.io/commands/json.type
1288
+ */
1289
+ type: (...args) => this.chain(new JsonTypeCommand(args, this.commandOptions)),
1290
+ };
1170
1291
  }
1171
1292
  }