@upstash/redis 0.0.0-ci.e3757170 → 0.0.0-ci.e5c2b594-20231017
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +42 -278
- package/esm/deps/deno.land/x/base64@v0.2.1/base.js +100 -0
- package/esm/deps/deno.land/x/base64@v0.2.1/base64url.js +9 -0
- package/esm/deps/deno.land/x/sha1@v1.0.3/deps.js +1 -0
- package/esm/deps/deno.land/x/sha1@v1.0.3/mod.js +191 -0
- package/esm/deps/denopkg.com/chiefbiiko/std-encoding@v1.0.0/mod.js +50 -0
- package/esm/pkg/commands/command.js +12 -3
- package/esm/pkg/commands/getdel.js +9 -0
- package/esm/pkg/commands/hgetall.js +0 -4
- package/esm/pkg/commands/hrandfield.js +39 -0
- package/esm/pkg/commands/json_arrappend.js +9 -0
- package/esm/pkg/commands/json_arrindex.js +9 -0
- package/esm/pkg/commands/json_arrinsert.js +9 -0
- package/esm/pkg/commands/json_arrlen.js +9 -0
- package/esm/pkg/commands/json_arrpop.js +9 -0
- package/esm/pkg/commands/json_arrtrim.js +12 -0
- package/esm/pkg/commands/json_clear.js +9 -0
- package/esm/pkg/commands/json_del.js +9 -0
- package/esm/pkg/commands/json_forget.js +9 -0
- package/esm/pkg/commands/json_get.js +30 -0
- package/esm/pkg/commands/json_mget.js +9 -0
- package/esm/pkg/commands/json_numincrby.js +9 -0
- package/esm/pkg/commands/json_nummultby.js +9 -0
- package/esm/pkg/commands/json_objkeys.js +9 -0
- package/esm/pkg/commands/json_objlen.js +9 -0
- package/esm/pkg/commands/json_resp.js +9 -0
- package/esm/pkg/commands/json_set.js +18 -0
- package/esm/pkg/commands/json_strappend.js +9 -0
- package/esm/pkg/commands/json_strlen.js +9 -0
- package/esm/pkg/commands/json_toggle.js +9 -0
- package/esm/pkg/commands/json_type.js +9 -0
- package/esm/pkg/commands/lmove.js +9 -0
- package/esm/pkg/commands/lpos.js +19 -0
- package/esm/pkg/commands/mod.js +28 -0
- package/esm/pkg/commands/scan.js +3 -0
- package/esm/pkg/commands/sdiffstore.js +1 -1
- package/esm/pkg/commands/set.js +16 -4
- package/esm/pkg/commands/smismember.js +9 -0
- package/esm/pkg/commands/xadd.js +26 -0
- package/esm/pkg/commands/xrange.js +36 -0
- package/esm/pkg/commands/zdiffstore.js +9 -0
- package/esm/pkg/commands/zmscore.js +10 -0
- package/esm/pkg/commands/zrange.js +6 -0
- package/esm/pkg/http.js +100 -3
- package/esm/pkg/pipeline.js +179 -12
- package/esm/pkg/redis.js +241 -2
- package/esm/pkg/script.js +77 -0
- package/esm/platforms/cloudflare.js +10 -2
- package/esm/platforms/fastly.js +6 -0
- package/esm/platforms/node_with_fetch.js +26 -1
- package/esm/platforms/nodejs.js +24 -1
- package/esm/version.js +1 -0
- package/package.json +53 -58
- package/script/deps/deno.land/x/base64@v0.2.1/base.js +104 -0
- package/script/deps/deno.land/x/base64@v0.2.1/base64url.js +13 -0
- package/script/deps/deno.land/x/sha1@v1.0.3/deps.js +6 -0
- package/script/deps/deno.land/x/sha1@v1.0.3/mod.js +196 -0
- package/script/deps/denopkg.com/chiefbiiko/std-encoding@v1.0.0/mod.js +55 -0
- package/script/pkg/commands/command.js +12 -3
- package/script/pkg/commands/getdel.js +13 -0
- package/script/pkg/commands/hgetall.js +0 -4
- package/script/pkg/commands/hrandfield.js +43 -0
- package/script/pkg/commands/json_arrappend.js +13 -0
- package/script/pkg/commands/json_arrindex.js +13 -0
- package/script/pkg/commands/json_arrinsert.js +13 -0
- package/script/pkg/commands/json_arrlen.js +13 -0
- package/script/pkg/commands/json_arrpop.js +13 -0
- package/script/pkg/commands/json_arrtrim.js +16 -0
- package/script/pkg/commands/json_clear.js +13 -0
- package/script/pkg/commands/json_del.js +13 -0
- package/script/pkg/commands/json_forget.js +13 -0
- package/script/pkg/commands/json_get.js +34 -0
- package/script/pkg/commands/json_mget.js +13 -0
- package/script/pkg/commands/json_numincrby.js +13 -0
- package/script/pkg/commands/json_nummultby.js +13 -0
- package/script/pkg/commands/json_objkeys.js +13 -0
- package/script/pkg/commands/json_objlen.js +13 -0
- package/script/pkg/commands/json_resp.js +13 -0
- package/script/pkg/commands/json_set.js +22 -0
- package/script/pkg/commands/json_strappend.js +13 -0
- package/script/pkg/commands/json_strlen.js +13 -0
- package/script/pkg/commands/json_toggle.js +13 -0
- package/script/pkg/commands/json_type.js +13 -0
- package/script/pkg/commands/lmove.js +13 -0
- package/script/pkg/commands/lpos.js +23 -0
- package/script/pkg/commands/mod.js +28 -0
- package/script/pkg/commands/scan.js +3 -0
- package/script/pkg/commands/sdiffstore.js +1 -1
- package/script/pkg/commands/set.js +16 -4
- package/script/pkg/commands/smismember.js +13 -0
- package/script/pkg/commands/xadd.js +30 -0
- package/script/pkg/commands/xrange.js +40 -0
- package/script/pkg/commands/zdiffstore.js +13 -0
- package/script/pkg/commands/zmscore.js +14 -0
- package/script/pkg/commands/zrange.js +6 -0
- package/script/pkg/http.js +100 -3
- package/script/pkg/pipeline.js +178 -11
- package/script/pkg/redis.js +240 -1
- package/script/pkg/script.js +81 -0
- package/script/platforms/cloudflare.js +10 -2
- package/script/platforms/fastly.js +6 -0
- package/script/platforms/node_with_fetch.js +26 -1
- package/script/platforms/nodejs.js +24 -1
- package/script/version.js +4 -0
- package/types/deps/deno.land/x/base64@v0.2.1/base.d.ts +5 -0
- package/types/deps/deno.land/x/base64@v0.2.1/base64url.d.ts +1 -0
- package/types/deps/deno.land/x/sha1@v1.0.3/deps.d.ts +1 -0
- package/types/deps/deno.land/x/sha1@v1.0.3/mod.d.ts +26 -0
- package/types/deps/denopkg.com/chiefbiiko/std-encoding@v1.0.0/mod.d.ts +3 -0
- package/types/pkg/commands/bitop.d.ts +0 -1
- package/types/pkg/commands/bitpos.d.ts +1 -1
- package/types/pkg/commands/command.d.ts +5 -5
- package/types/pkg/commands/getdel.d.ts +7 -0
- package/types/pkg/commands/hdel.d.ts +1 -1
- package/types/pkg/commands/hrandfield.d.ts +9 -0
- package/types/pkg/commands/json_arrappend.d.ts +7 -0
- package/types/pkg/commands/json_arrindex.d.ts +13 -0
- package/types/pkg/commands/json_arrinsert.d.ts +7 -0
- package/types/pkg/commands/json_arrlen.d.ts +7 -0
- package/types/pkg/commands/json_arrpop.d.ts +7 -0
- package/types/pkg/commands/json_arrtrim.d.ts +7 -0
- package/types/pkg/commands/json_clear.d.ts +7 -0
- package/types/pkg/commands/json_del.d.ts +7 -0
- package/types/pkg/commands/json_forget.d.ts +7 -0
- package/types/pkg/commands/json_get.d.ts +15 -0
- package/types/pkg/commands/json_mget.d.ts +7 -0
- package/types/pkg/commands/json_numincrby.d.ts +7 -0
- package/types/pkg/commands/json_nummultby.d.ts +7 -0
- package/types/pkg/commands/json_objkeys.d.ts +7 -0
- package/types/pkg/commands/json_objlen.d.ts +7 -0
- package/types/pkg/commands/json_resp.d.ts +7 -0
- package/types/pkg/commands/json_set.d.ts +18 -0
- package/types/pkg/commands/json_strappend.d.ts +7 -0
- package/types/pkg/commands/json_strlen.d.ts +7 -0
- package/types/pkg/commands/json_toggle.d.ts +7 -0
- package/types/pkg/commands/json_type.d.ts +7 -0
- package/types/pkg/commands/lmove.d.ts +12 -0
- package/types/pkg/commands/lpop.d.ts +1 -1
- package/types/pkg/commands/lpos.d.ts +15 -0
- package/types/pkg/commands/mget.d.ts +1 -1
- package/types/pkg/commands/mod.d.ts +28 -0
- package/types/pkg/commands/rpop.d.ts +2 -2
- package/types/pkg/commands/scan.d.ts +2 -1
- package/types/pkg/commands/script_flush.d.ts +1 -1
- package/types/pkg/commands/sdiffstore.d.ts +1 -1
- package/types/pkg/commands/set.d.ts +31 -2
- package/types/pkg/commands/smembers.d.ts +2 -2
- package/types/pkg/commands/smismember.d.ts +7 -0
- package/types/pkg/commands/spop.d.ts +2 -2
- package/types/pkg/commands/type.d.ts +1 -1
- package/types/pkg/commands/xadd.d.ts +31 -0
- package/types/pkg/commands/xrange.d.ts +9 -0
- package/types/pkg/commands/zadd.d.ts +4 -4
- package/types/pkg/commands/zdiffstore.d.ts +7 -0
- package/types/pkg/commands/zinterstore.d.ts +1 -1
- package/types/pkg/commands/zmscore.d.ts +7 -0
- package/types/pkg/commands/zrange.d.ts +8 -1
- package/types/pkg/commands/zunionstore.d.ts +1 -1
- package/types/pkg/http.d.ts +48 -7
- package/types/pkg/pipeline.d.ts +262 -124
- package/types/pkg/redis.d.ts +187 -19
- package/types/pkg/script.d.ts +42 -0
- package/types/pkg/types.d.ts +27 -1
- package/types/platforms/cloudflare.d.ts +9 -8
- package/types/platforms/fastly.d.ts +3 -7
- package/types/platforms/node_with_fetch.d.ts +3 -22
- package/types/platforms/nodejs.d.ts +4 -7
- package/types/version.d.ts +1 -0
|
@@ -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
|
}
|
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 = {
|
|
30
|
-
|
|
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
|
*/
|
|
@@ -70,8 +100,75 @@ export class HttpClient {
|
|
|
70
100
|
}
|
|
71
101
|
const body = (await res.json());
|
|
72
102
|
if (!res.ok) {
|
|
73
|
-
throw new UpstashError(body.error);
|
|
103
|
+
throw new UpstashError(`${body.error}, command was: ${JSON.stringify(req.body)}`);
|
|
104
|
+
}
|
|
105
|
+
if (this.options?.responseEncoding === "base64") {
|
|
106
|
+
if (Array.isArray(body)) {
|
|
107
|
+
return body.map(({ result, error }) => ({
|
|
108
|
+
result: decode(result),
|
|
109
|
+
error,
|
|
110
|
+
}));
|
|
111
|
+
}
|
|
112
|
+
const result = decode(body.result);
|
|
113
|
+
return { result, error: body.error };
|
|
74
114
|
}
|
|
75
115
|
return body;
|
|
76
116
|
}
|
|
77
117
|
}
|
|
118
|
+
function base64decode(b64) {
|
|
119
|
+
let dec = "";
|
|
120
|
+
try {
|
|
121
|
+
/**
|
|
122
|
+
* Using only atob() is not enough because it doesn't work with unicode characters
|
|
123
|
+
*/
|
|
124
|
+
const binString = atob(b64);
|
|
125
|
+
const size = binString.length;
|
|
126
|
+
const bytes = new Uint8Array(size);
|
|
127
|
+
for (let i = 0; i < size; i++) {
|
|
128
|
+
bytes[i] = binString.charCodeAt(i);
|
|
129
|
+
}
|
|
130
|
+
dec = new TextDecoder().decode(bytes);
|
|
131
|
+
}
|
|
132
|
+
catch {
|
|
133
|
+
dec = b64;
|
|
134
|
+
}
|
|
135
|
+
return dec;
|
|
136
|
+
// try {
|
|
137
|
+
// return decodeURIComponent(dec);
|
|
138
|
+
// } catch {
|
|
139
|
+
// return dec;
|
|
140
|
+
// }
|
|
141
|
+
}
|
|
142
|
+
function decode(raw) {
|
|
143
|
+
let result = undefined;
|
|
144
|
+
switch (typeof raw) {
|
|
145
|
+
case "undefined":
|
|
146
|
+
return raw;
|
|
147
|
+
case "number": {
|
|
148
|
+
result = raw;
|
|
149
|
+
break;
|
|
150
|
+
}
|
|
151
|
+
case "object": {
|
|
152
|
+
if (Array.isArray(raw)) {
|
|
153
|
+
result = raw.map((v) => typeof v === "string"
|
|
154
|
+
? base64decode(v)
|
|
155
|
+
: Array.isArray(v)
|
|
156
|
+
? v.map(decode)
|
|
157
|
+
: v);
|
|
158
|
+
}
|
|
159
|
+
else {
|
|
160
|
+
// If it's not an array it must be null
|
|
161
|
+
// Apparently null is an object in javascript
|
|
162
|
+
result = null;
|
|
163
|
+
}
|
|
164
|
+
break;
|
|
165
|
+
}
|
|
166
|
+
case "string": {
|
|
167
|
+
result = raw === "OK" ? "OK" : base64decode(raw);
|
|
168
|
+
break;
|
|
169
|
+
}
|
|
170
|
+
default:
|
|
171
|
+
break;
|
|
172
|
+
}
|
|
173
|
+
return result;
|
|
174
|
+
}
|
package/esm/pkg/pipeline.js
CHANGED
|
@@ -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, 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()
|
|
@@ -28,7 +31,7 @@ import { UpstashError } from "./error.js";
|
|
|
28
31
|
* const res = await p.set("key","value").get("key").exec()
|
|
29
32
|
* ```
|
|
30
33
|
*
|
|
31
|
-
*
|
|
34
|
+
* Return types are inferred if all commands are chained, but you can still
|
|
32
35
|
* override the response type manually:
|
|
33
36
|
* ```ts
|
|
34
37
|
* redis.pipeline()
|
|
@@ -39,7 +42,7 @@ import { UpstashError } from "./error.js";
|
|
|
39
42
|
* ```
|
|
40
43
|
*/
|
|
41
44
|
export class Pipeline {
|
|
42
|
-
constructor(
|
|
45
|
+
constructor(opts) {
|
|
43
46
|
Object.defineProperty(this, "client", {
|
|
44
47
|
enumerable: true,
|
|
45
48
|
configurable: true,
|
|
@@ -58,14 +61,22 @@ 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
|
*
|
|
64
73
|
* Returns an array with the results of all pipelined commands.
|
|
65
74
|
*
|
|
66
|
-
* You can define a return type manually
|
|
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:
|
|
67
76
|
* ```ts
|
|
68
|
-
* redis.pipeline()
|
|
77
|
+
* const p = redis.pipeline()
|
|
78
|
+
* p.get("key")
|
|
79
|
+
* const result = p.exec<[{ greeting: string }]>()
|
|
69
80
|
* ```
|
|
70
81
|
*/
|
|
71
82
|
Object.defineProperty(this, "exec", {
|
|
@@ -76,8 +87,9 @@ export class Pipeline {
|
|
|
76
87
|
if (this.commands.length === 0) {
|
|
77
88
|
throw new Error("Pipeline is empty");
|
|
78
89
|
}
|
|
90
|
+
const path = this.multiExec ? ["multi-exec"] : ["pipeline"];
|
|
79
91
|
const res = (await this.client.request({
|
|
80
|
-
path
|
|
92
|
+
path,
|
|
81
93
|
body: Object.values(this.commands).map((c) => c.command),
|
|
82
94
|
}));
|
|
83
95
|
return res.map(({ error, result }, i) => {
|
|
@@ -124,6 +136,15 @@ export class Pipeline {
|
|
|
124
136
|
writable: true,
|
|
125
137
|
value: (...args) => this.chain(new BitPosCommand(args, this.commandOptions))
|
|
126
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
|
+
});
|
|
127
148
|
/**
|
|
128
149
|
* @see https://redis.io/commands/dbsize
|
|
129
150
|
*/
|
|
@@ -250,6 +271,15 @@ export class Pipeline {
|
|
|
250
271
|
writable: true,
|
|
251
272
|
value: (...args) => this.chain(new GetBitCommand(args, this.commandOptions))
|
|
252
273
|
});
|
|
274
|
+
/**
|
|
275
|
+
* @see https://redis.io/commands/getdel
|
|
276
|
+
*/
|
|
277
|
+
Object.defineProperty(this, "getdel", {
|
|
278
|
+
enumerable: true,
|
|
279
|
+
configurable: true,
|
|
280
|
+
writable: true,
|
|
281
|
+
value: (...args) => this.chain(new GetDelCommand(args, this.commandOptions))
|
|
282
|
+
});
|
|
253
283
|
/**
|
|
254
284
|
* @see https://redis.io/commands/getrange
|
|
255
285
|
*/
|
|
@@ -358,6 +388,15 @@ export class Pipeline {
|
|
|
358
388
|
writable: true,
|
|
359
389
|
value: (key, kv) => this.chain(new HMSetCommand([key, kv], this.commandOptions))
|
|
360
390
|
});
|
|
391
|
+
/**
|
|
392
|
+
* @see https://redis.io/commands/hrandfield
|
|
393
|
+
*/
|
|
394
|
+
Object.defineProperty(this, "hrandfield", {
|
|
395
|
+
enumerable: true,
|
|
396
|
+
configurable: true,
|
|
397
|
+
writable: true,
|
|
398
|
+
value: (key, count, withValues) => this.chain(new HRandFieldCommand([key, count, withValues], this.commandOptions))
|
|
399
|
+
});
|
|
361
400
|
/**
|
|
362
401
|
* @see https://redis.io/commands/hscan
|
|
363
402
|
*/
|
|
@@ -466,6 +505,15 @@ export class Pipeline {
|
|
|
466
505
|
writable: true,
|
|
467
506
|
value: (...args) => this.chain(new LLenCommand(args, this.commandOptions))
|
|
468
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
|
+
});
|
|
469
517
|
/**
|
|
470
518
|
* @see https://redis.io/commands/lpop
|
|
471
519
|
*/
|
|
@@ -475,6 +523,15 @@ export class Pipeline {
|
|
|
475
523
|
writable: true,
|
|
476
524
|
value: (...args) => this.chain(new LPopCommand(args, this.commandOptions))
|
|
477
525
|
});
|
|
526
|
+
/**
|
|
527
|
+
* @see https://redis.io/commands/lpos
|
|
528
|
+
*/
|
|
529
|
+
Object.defineProperty(this, "lpos", {
|
|
530
|
+
enumerable: true,
|
|
531
|
+
configurable: true,
|
|
532
|
+
writable: true,
|
|
533
|
+
value: (...args) => this.chain(new LPosCommand(args, this.commandOptions))
|
|
534
|
+
});
|
|
478
535
|
/**
|
|
479
536
|
* @see https://redis.io/commands/lpush
|
|
480
537
|
*/
|
|
@@ -826,6 +883,15 @@ export class Pipeline {
|
|
|
826
883
|
writable: true,
|
|
827
884
|
value: (...args) => this.chain(new SMembersCommand(args, this.commandOptions))
|
|
828
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
|
+
});
|
|
829
895
|
/**
|
|
830
896
|
* @see https://redis.io/commands/smove
|
|
831
897
|
*/
|
|
@@ -1002,6 +1068,15 @@ export class Pipeline {
|
|
|
1002
1068
|
writable: true,
|
|
1003
1069
|
value: (...args) => this.chain(new ZLexCountCommand(args, this.commandOptions))
|
|
1004
1070
|
});
|
|
1071
|
+
/**
|
|
1072
|
+
* @see https://redis.io/commands/zmscore
|
|
1073
|
+
*/
|
|
1074
|
+
Object.defineProperty(this, "zmscore", {
|
|
1075
|
+
enumerable: true,
|
|
1076
|
+
configurable: true,
|
|
1077
|
+
writable: true,
|
|
1078
|
+
value: (...args) => this.chain(new ZMScoreCommand(args, this.commandOptions))
|
|
1079
|
+
});
|
|
1005
1080
|
/**
|
|
1006
1081
|
* @see https://redis.io/commands/zpopmax
|
|
1007
1082
|
*/
|
|
@@ -1110,16 +1185,108 @@ export class Pipeline {
|
|
|
1110
1185
|
writable: true,
|
|
1111
1186
|
value: (...args) => this.chain(new ZUnionStoreCommand(args, this.commandOptions))
|
|
1112
1187
|
});
|
|
1113
|
-
this.client = client;
|
|
1114
|
-
this.commands = [];
|
|
1115
|
-
this.commandOptions = commandOptions;
|
|
1188
|
+
this.client = opts.client;
|
|
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
|
|
1190
|
+
this.commandOptions = opts.commandOptions;
|
|
1191
|
+
this.multiExec = opts.multiExec ?? false;
|
|
1116
1192
|
}
|
|
1117
1193
|
/**
|
|
1118
|
-
* Pushes a command into the
|
|
1194
|
+
* Pushes a command into the pipeline and returns a chainable instance of the
|
|
1119
1195
|
* pipeline
|
|
1120
1196
|
*/
|
|
1121
1197
|
chain(command) {
|
|
1122
1198
|
this.commands.push(command);
|
|
1123
|
-
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
|
+
};
|
|
1124
1291
|
}
|
|
1125
1292
|
}
|