@upstash/redis 0.0.0-ci.df9c9bb7 → 0.0.0-ci.e0fa2b9d-20230419

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 (149) hide show
  1. package/README.md +20 -18
  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/mod.js +25 -0
  34. package/esm/pkg/commands/scan.js +3 -0
  35. package/esm/pkg/commands/set.js +16 -4
  36. package/esm/pkg/commands/smismember.js +9 -0
  37. package/esm/pkg/commands/zdiffstore.js +9 -0
  38. package/esm/pkg/commands/zmscore.js +10 -0
  39. package/esm/pkg/http.js +92 -2
  40. package/esm/pkg/pipeline.js +163 -6
  41. package/esm/pkg/redis.js +202 -2
  42. package/esm/pkg/script.js +77 -0
  43. package/esm/platforms/cloudflare.js +10 -2
  44. package/esm/platforms/fastly.js +6 -0
  45. package/esm/platforms/node_with_fetch.js +26 -1
  46. package/esm/platforms/nodejs.js +22 -1
  47. package/esm/version.js +1 -0
  48. package/package.json +41 -54
  49. package/script/deps/deno.land/x/base64@v0.2.1/base.js +104 -0
  50. package/script/deps/deno.land/x/base64@v0.2.1/base64url.js +13 -0
  51. package/script/deps/deno.land/x/sha1@v1.0.3/deps.js +6 -0
  52. package/script/deps/deno.land/x/sha1@v1.0.3/mod.js +196 -0
  53. package/script/deps/denopkg.com/chiefbiiko/std-encoding@v1.0.0/mod.js +55 -0
  54. package/script/pkg/commands/command.js +12 -3
  55. package/script/pkg/commands/getdel.js +13 -0
  56. package/script/pkg/commands/hgetall.js +0 -4
  57. package/script/pkg/commands/hrandfield.js +43 -0
  58. package/script/pkg/commands/json_arrappend.js +13 -0
  59. package/script/pkg/commands/json_arrindex.js +13 -0
  60. package/script/pkg/commands/json_arrinsert.js +13 -0
  61. package/script/pkg/commands/json_arrlen.js +13 -0
  62. package/script/pkg/commands/json_arrpop.js +13 -0
  63. package/script/pkg/commands/json_arrtrim.js +16 -0
  64. package/script/pkg/commands/json_clear.js +13 -0
  65. package/script/pkg/commands/json_del.js +13 -0
  66. package/script/pkg/commands/json_forget.js +13 -0
  67. package/script/pkg/commands/json_get.js +34 -0
  68. package/script/pkg/commands/json_mget.js +13 -0
  69. package/script/pkg/commands/json_numincrby.js +13 -0
  70. package/script/pkg/commands/json_nummultby.js +13 -0
  71. package/script/pkg/commands/json_objkeys.js +13 -0
  72. package/script/pkg/commands/json_objlen.js +13 -0
  73. package/script/pkg/commands/json_resp.js +13 -0
  74. package/script/pkg/commands/json_set.js +22 -0
  75. package/script/pkg/commands/json_strappend.js +13 -0
  76. package/script/pkg/commands/json_strlen.js +13 -0
  77. package/script/pkg/commands/json_toggle.js +13 -0
  78. package/script/pkg/commands/json_type.js +13 -0
  79. package/script/pkg/commands/lmove.js +13 -0
  80. package/script/pkg/commands/mod.js +25 -0
  81. package/script/pkg/commands/scan.js +3 -0
  82. package/script/pkg/commands/set.js +16 -4
  83. package/script/pkg/commands/smismember.js +13 -0
  84. package/script/pkg/commands/zdiffstore.js +13 -0
  85. package/script/pkg/commands/zmscore.js +14 -0
  86. package/script/pkg/http.js +92 -2
  87. package/script/pkg/pipeline.js +162 -5
  88. package/script/pkg/redis.js +201 -1
  89. package/script/pkg/script.js +81 -0
  90. package/script/platforms/cloudflare.js +10 -2
  91. package/script/platforms/fastly.js +6 -0
  92. package/script/platforms/node_with_fetch.js +26 -1
  93. package/script/platforms/nodejs.js +22 -1
  94. package/script/version.js +4 -0
  95. package/types/deps/deno.land/x/base64@v0.2.1/base.d.ts +5 -0
  96. package/types/deps/deno.land/x/base64@v0.2.1/base64url.d.ts +1 -0
  97. package/types/deps/deno.land/x/sha1@v1.0.3/deps.d.ts +1 -0
  98. package/types/deps/deno.land/x/sha1@v1.0.3/mod.d.ts +26 -0
  99. package/types/deps/denopkg.com/chiefbiiko/std-encoding@v1.0.0/mod.d.ts +3 -0
  100. package/types/pkg/commands/bitop.d.ts +0 -1
  101. package/types/pkg/commands/command.d.ts +5 -5
  102. package/types/pkg/commands/getdel.d.ts +7 -0
  103. package/types/pkg/commands/hrandfield.d.ts +9 -0
  104. package/types/pkg/commands/json_arrappend.d.ts +7 -0
  105. package/types/pkg/commands/json_arrindex.d.ts +13 -0
  106. package/types/pkg/commands/json_arrinsert.d.ts +7 -0
  107. package/types/pkg/commands/json_arrlen.d.ts +7 -0
  108. package/types/pkg/commands/json_arrpop.d.ts +7 -0
  109. package/types/pkg/commands/json_arrtrim.d.ts +7 -0
  110. package/types/pkg/commands/json_clear.d.ts +7 -0
  111. package/types/pkg/commands/json_del.d.ts +7 -0
  112. package/types/pkg/commands/json_forget.d.ts +7 -0
  113. package/types/pkg/commands/json_get.d.ts +15 -0
  114. package/types/pkg/commands/json_mget.d.ts +7 -0
  115. package/types/pkg/commands/json_numincrby.d.ts +7 -0
  116. package/types/pkg/commands/json_nummultby.d.ts +7 -0
  117. package/types/pkg/commands/json_objkeys.d.ts +7 -0
  118. package/types/pkg/commands/json_objlen.d.ts +7 -0
  119. package/types/pkg/commands/json_resp.d.ts +7 -0
  120. package/types/pkg/commands/json_set.d.ts +18 -0
  121. package/types/pkg/commands/json_strappend.d.ts +7 -0
  122. package/types/pkg/commands/json_strlen.d.ts +7 -0
  123. package/types/pkg/commands/json_toggle.d.ts +7 -0
  124. package/types/pkg/commands/json_type.d.ts +7 -0
  125. package/types/pkg/commands/lmove.d.ts +12 -0
  126. package/types/pkg/commands/mget.d.ts +1 -1
  127. package/types/pkg/commands/mod.d.ts +25 -0
  128. package/types/pkg/commands/scan.d.ts +2 -1
  129. package/types/pkg/commands/script_flush.d.ts +1 -1
  130. package/types/pkg/commands/set.d.ts +31 -2
  131. package/types/pkg/commands/smembers.d.ts +2 -2
  132. package/types/pkg/commands/smismember.d.ts +7 -0
  133. package/types/pkg/commands/type.d.ts +1 -1
  134. package/types/pkg/commands/zadd.d.ts +4 -4
  135. package/types/pkg/commands/zdiffstore.d.ts +7 -0
  136. package/types/pkg/commands/zinterstore.d.ts +1 -1
  137. package/types/pkg/commands/zmscore.d.ts +7 -0
  138. package/types/pkg/commands/zrange.d.ts +1 -1
  139. package/types/pkg/commands/zunionstore.d.ts +1 -1
  140. package/types/pkg/http.d.ts +44 -7
  141. package/types/pkg/pipeline.d.ts +61 -6
  142. package/types/pkg/redis.d.ts +143 -12
  143. package/types/pkg/script.d.ts +42 -0
  144. package/types/pkg/types.d.ts +27 -1
  145. package/types/platforms/cloudflare.d.ts +9 -8
  146. package/types/platforms/fastly.d.ts +3 -7
  147. package/types/platforms/node_with_fetch.d.ts +3 -22
  148. package/types/platforms/nodejs.d.ts +4 -7
  149. package/types/version.d.ts +1 -0
@@ -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";
@@ -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
  }
@@ -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", opts.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,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
+ }
package/esm/pkg/http.js CHANGED
@@ -25,9 +25,20 @@ export class HttpClient {
25
25
  writable: true,
26
26
  value: void 0
27
27
  });
28
+ this.options = {
29
+ backend: config.options?.backend,
30
+ agent: config.agent,
31
+ responseEncoding: config.responseEncoding ?? "base64",
32
+ cache: config.cache,
33
+ };
28
34
  this.baseUrl = config.baseUrl.replace(/\/$/, "");
29
- this.headers = { "Content-Type": "application/json", ...config.headers };
30
- this.options = { backend: config.options?.backend };
35
+ this.headers = {
36
+ "Content-Type": "application/json",
37
+ ...config.headers,
38
+ };
39
+ if (this.options.responseEncoding === "base64") {
40
+ this.headers["Upstash-Encoding"] = "base64";
41
+ }
31
42
  if (typeof config?.retry === "boolean" && config?.retry === false) {
32
43
  this.retry = {
33
44
  attempts: 1,
@@ -42,12 +53,31 @@ export class HttpClient {
42
53
  };
43
54
  }
44
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
+ }
45
73
  async request(req) {
46
74
  const requestOptions = {
75
+ cache: this.options.cache,
47
76
  method: "POST",
48
77
  headers: this.headers,
49
78
  body: JSON.stringify(req.body),
50
79
  keepalive: true,
80
+ agent: this.options?.agent,
51
81
  /**
52
82
  * Fastly specific
53
83
  */
@@ -72,6 +102,66 @@ export class HttpClient {
72
102
  if (!res.ok) {
73
103
  throw new UpstashError(body.error);
74
104
  }
105
+ if (this.options?.responseEncoding === "base64") {
106
+ return Array.isArray(body) ? body.map(decode) : decode(body);
107
+ }
75
108
  return body;
76
109
  }
77
110
  }
111
+ function base64decode(b64) {
112
+ let dec = "";
113
+ try {
114
+ /**
115
+ * Using only atob() is not enough because it doesn't work with unicode characters
116
+ */
117
+ const binString = atob(b64);
118
+ const size = binString.length;
119
+ const bytes = new Uint8Array(size);
120
+ for (let i = 0; i < size; i++) {
121
+ bytes[i] = binString.charCodeAt(i);
122
+ }
123
+ dec = new TextDecoder().decode(bytes);
124
+ }
125
+ catch {
126
+ dec = b64;
127
+ }
128
+ return dec;
129
+ // try {
130
+ // return decodeURIComponent(dec);
131
+ // } catch {
132
+ // return dec;
133
+ // }
134
+ }
135
+ function decode(raw) {
136
+ let result = undefined;
137
+ switch (typeof raw.result) {
138
+ case "undefined":
139
+ return raw;
140
+ case "number": {
141
+ result = raw.result;
142
+ break;
143
+ }
144
+ case "object": {
145
+ if (Array.isArray(raw.result)) {
146
+ result = raw.result.map((v) => typeof v === "string"
147
+ ? base64decode(v)
148
+ : Array.isArray(v)
149
+ ? v.map(base64decode)
150
+ : v);
151
+ }
152
+ else {
153
+ // If it's not an array it must be null
154
+ // Apparently null is an object in javascript
155
+ result = null;
156
+ }
157
+ break;
158
+ }
159
+ case "string": {
160
+ result = raw.result === "OK" ? "OK" : base64decode(raw.result);
161
+ break;
162
+ }
163
+ default:
164
+ break;
165
+ }
166
+ return { result, error: raw.error };
167
+ }
@@ -1,5 +1,8 @@
1
- import { AppendCommand, BitCountCommand, BitOpCommand, BitPosCommand, DBSizeCommand, DecrByCommand, DecrCommand, DelCommand, EchoCommand, EvalCommand, EvalshaCommand, ExistsCommand, ExpireAtCommand, ExpireCommand, FlushAllCommand, FlushDBCommand, GetBitCommand, GetCommand, 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
+ import { ZMScoreCommand } from "./commands/zmscore.js";
4
+ import { HRandFieldCommand } from "./commands/hrandfield.js";
5
+ import { ZDiffStoreCommand } from "./commands/zdiffstore.js";
3
6
  /**
4
7
  * Upstash REST API supports command pipelining to send multiple commands in
5
8
  * batch, instead of sending each command one by one and waiting for a response.
@@ -16,7 +19,7 @@ import { UpstashError } from "./error.js";
16
19
  * **Examples:**
17
20
  *
18
21
  * ```ts
19
- * const p = redis.pipeline()
22
+ * const p = redis.pipeline() // or redis.multi()
20
23
  * p.set("key","value")
21
24
  * p.get("key")
22
25
  * const res = await p.exec()
@@ -39,7 +42,7 @@ import { UpstashError } from "./error.js";
39
42
  * ```
40
43
  */
41
44
  export class Pipeline {
42
- constructor(client, commandOptions) {
45
+ constructor(opts) {
43
46
  Object.defineProperty(this, "client", {
44
47
  enumerable: true,
45
48
  configurable: true,
@@ -58,6 +61,12 @@ export class Pipeline {
58
61
  writable: true,
59
62
  value: void 0
60
63
  });
64
+ Object.defineProperty(this, "multiExec", {
65
+ enumerable: true,
66
+ configurable: true,
67
+ writable: true,
68
+ value: void 0
69
+ });
61
70
  /**
62
71
  * Send the pipeline request to upstash.
63
72
  *
@@ -76,8 +85,9 @@ export class Pipeline {
76
85
  if (this.commands.length === 0) {
77
86
  throw new Error("Pipeline is empty");
78
87
  }
88
+ const path = this.multiExec ? ["multi-exec"] : ["pipeline"];
79
89
  const res = (await this.client.request({
80
- path: ["pipeline"],
90
+ path,
81
91
  body: Object.values(this.commands).map((c) => c.command),
82
92
  }));
83
93
  return res.map(({ error, result }, i) => {
@@ -124,6 +134,15 @@ export class Pipeline {
124
134
  writable: true,
125
135
  value: (...args) => this.chain(new BitPosCommand(args, this.commandOptions))
126
136
  });
137
+ /**
138
+ * @see https://redis.io/commands/zdiffstore
139
+ */
140
+ Object.defineProperty(this, "zdiffstore", {
141
+ enumerable: true,
142
+ configurable: true,
143
+ writable: true,
144
+ value: (...args) => this.chain(new ZDiffStoreCommand(args, this.commandOptions))
145
+ });
127
146
  /**
128
147
  * @see https://redis.io/commands/dbsize
129
148
  */
@@ -250,6 +269,15 @@ export class Pipeline {
250
269
  writable: true,
251
270
  value: (...args) => this.chain(new GetBitCommand(args, this.commandOptions))
252
271
  });
272
+ /**
273
+ * @see https://redis.io/commands/getdel
274
+ */
275
+ Object.defineProperty(this, "getdel", {
276
+ enumerable: true,
277
+ configurable: true,
278
+ writable: true,
279
+ value: (...args) => this.chain(new GetDelCommand(args, this.commandOptions))
280
+ });
253
281
  /**
254
282
  * @see https://redis.io/commands/getrange
255
283
  */
@@ -358,6 +386,15 @@ export class Pipeline {
358
386
  writable: true,
359
387
  value: (key, kv) => this.chain(new HMSetCommand([key, kv], this.commandOptions))
360
388
  });
389
+ /**
390
+ * @see https://redis.io/commands/hrandfield
391
+ */
392
+ Object.defineProperty(this, "hrandfield", {
393
+ enumerable: true,
394
+ configurable: true,
395
+ writable: true,
396
+ value: (key, count, withValues) => this.chain(new HRandFieldCommand([key, count, withValues], this.commandOptions))
397
+ });
361
398
  /**
362
399
  * @see https://redis.io/commands/hscan
363
400
  */
@@ -466,6 +503,15 @@ export class Pipeline {
466
503
  writable: true,
467
504
  value: (...args) => this.chain(new LLenCommand(args, this.commandOptions))
468
505
  });
506
+ /**
507
+ * @see https://redis.io/commands/lmove
508
+ */
509
+ Object.defineProperty(this, "lmove", {
510
+ enumerable: true,
511
+ configurable: true,
512
+ writable: true,
513
+ value: (...args) => this.chain(new LMoveCommand(args, this.commandOptions))
514
+ });
469
515
  /**
470
516
  * @see https://redis.io/commands/lpop
471
517
  */
@@ -835,6 +881,15 @@ export class Pipeline {
835
881
  writable: true,
836
882
  value: (...args) => this.chain(new SMembersCommand(args, this.commandOptions))
837
883
  });
884
+ /**
885
+ * @see https://redis.io/commands/smismember
886
+ */
887
+ Object.defineProperty(this, "smismember", {
888
+ enumerable: true,
889
+ configurable: true,
890
+ writable: true,
891
+ value: (key, members) => this.chain(new SMIsMemberCommand([key, members], this.commandOptions))
892
+ });
838
893
  /**
839
894
  * @see https://redis.io/commands/smove
840
895
  */
@@ -1011,6 +1066,15 @@ export class Pipeline {
1011
1066
  writable: true,
1012
1067
  value: (...args) => this.chain(new ZLexCountCommand(args, this.commandOptions))
1013
1068
  });
1069
+ /**
1070
+ * @see https://redis.io/commands/zmscore
1071
+ */
1072
+ Object.defineProperty(this, "zmscore", {
1073
+ enumerable: true,
1074
+ configurable: true,
1075
+ writable: true,
1076
+ value: (...args) => this.chain(new ZMScoreCommand(args, this.commandOptions))
1077
+ });
1014
1078
  /**
1015
1079
  * @see https://redis.io/commands/zpopmax
1016
1080
  */
@@ -1119,9 +1183,10 @@ export class Pipeline {
1119
1183
  writable: true,
1120
1184
  value: (...args) => this.chain(new ZUnionStoreCommand(args, this.commandOptions))
1121
1185
  });
1122
- this.client = client;
1186
+ this.client = opts.client;
1123
1187
  this.commands = [];
1124
- this.commandOptions = commandOptions;
1188
+ this.commandOptions = opts.commandOptions;
1189
+ this.multiExec = opts.multiExec ?? false;
1125
1190
  }
1126
1191
  /**
1127
1192
  * Pushes a command into the pipelien and returns a chainable instance of the
@@ -1131,4 +1196,96 @@ export class Pipeline {
1131
1196
  this.commands.push(command);
1132
1197
  return this;
1133
1198
  }
1199
+ /**
1200
+ * @see https://redis.io/commands/?group=json
1201
+ */
1202
+ get json() {
1203
+ // For some reason we needed to define the types manually, otherwise Deno wouldn't build it
1204
+ return {
1205
+ /**
1206
+ * @see https://redis.io/commands/json.arrappend
1207
+ */
1208
+ arrappend: (...args) => this.chain(new JsonArrAppendCommand(args, this.commandOptions)),
1209
+ /**
1210
+ * @see https://redis.io/commands/json.arrindex
1211
+ */
1212
+ arrindex: (...args) => this.chain(new JsonArrIndexCommand(args, this.commandOptions)),
1213
+ /**
1214
+ * @see https://redis.io/commands/json.arrinsert
1215
+ */
1216
+ arrinsert: (...args) => this.chain(new JsonArrInsertCommand(args, this.commandOptions)),
1217
+ /**
1218
+ * @see https://redis.io/commands/json.arrlen
1219
+ */
1220
+ arrlen: (...args) => this.chain(new JsonArrLenCommand(args, this.commandOptions)),
1221
+ /**
1222
+ * @see https://redis.io/commands/json.arrpop
1223
+ */
1224
+ arrpop: (...args) => this.chain(new JsonArrPopCommand(args, this.commandOptions)),
1225
+ /**
1226
+ * @see https://redis.io/commands/json.arrtrim
1227
+ */
1228
+ arrtrim: (...args) => this.chain(new JsonArrTrimCommand(args, this.commandOptions)),
1229
+ /**
1230
+ * @see https://redis.io/commands/json.clear
1231
+ */
1232
+ clear: (...args) => this.chain(new JsonClearCommand(args, this.commandOptions)),
1233
+ /**
1234
+ * @see https://redis.io/commands/json.del
1235
+ */
1236
+ del: (...args) => this.chain(new JsonDelCommand(args, this.commandOptions)),
1237
+ /**
1238
+ * @see https://redis.io/commands/json.forget
1239
+ */
1240
+ forget: (...args) => this.chain(new JsonForgetCommand(args, this.commandOptions)),
1241
+ /**
1242
+ * @see https://redis.io/commands/json.get
1243
+ */
1244
+ get: (...args) => this.chain(new JsonGetCommand(args, this.commandOptions)),
1245
+ /**
1246
+ * @see https://redis.io/commands/json.mget
1247
+ */
1248
+ mget: (...args) => this.chain(new JsonMGetCommand(args, this.commandOptions)),
1249
+ /**
1250
+ * @see https://redis.io/commands/json.numincrby
1251
+ */
1252
+ numincrby: (...args) => this.chain(new JsonNumIncrByCommand(args, this.commandOptions)),
1253
+ /**
1254
+ * @see https://redis.io/commands/json.nummultby
1255
+ */
1256
+ nummultby: (...args) => this.chain(new JsonNumMultByCommand(args, this.commandOptions)),
1257
+ /**
1258
+ * @see https://redis.io/commands/json.objkeys
1259
+ */
1260
+ objkeys: (...args) => this.chain(new JsonObjKeysCommand(args, this.commandOptions)),
1261
+ /**
1262
+ * @see https://redis.io/commands/json.objlen
1263
+ */
1264
+ objlen: (...args) => this.chain(new JsonObjLenCommand(args, this.commandOptions)),
1265
+ /**
1266
+ * @see https://redis.io/commands/json.resp
1267
+ */
1268
+ resp: (...args) => this.chain(new JsonRespCommand(args, this.commandOptions)),
1269
+ /**
1270
+ * @see https://redis.io/commands/json.set
1271
+ */
1272
+ set: (...args) => this.chain(new JsonSetCommand(args, this.commandOptions)),
1273
+ /**
1274
+ * @see https://redis.io/commands/json.strappend
1275
+ */
1276
+ strappend: (...args) => this.chain(new JsonStrAppendCommand(args, this.commandOptions)),
1277
+ /**
1278
+ * @see https://redis.io/commands/json.strlen
1279
+ */
1280
+ strlen: (...args) => this.chain(new JsonStrLenCommand(args, this.commandOptions)),
1281
+ /**
1282
+ * @see https://redis.io/commands/json.toggle
1283
+ */
1284
+ toggle: (...args) => this.chain(new JsonToggleCommand(args, this.commandOptions)),
1285
+ /**
1286
+ * @see https://redis.io/commands/json.type
1287
+ */
1288
+ type: (...args) => this.chain(new JsonTypeCommand(args, this.commandOptions)),
1289
+ };
1290
+ }
1134
1291
  }