@upstash/redis 0.0.0-ci.d5601844-20220803 → 0.0.0-ci.d93ae2f1-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.
- package/README.md +20 -18
- 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/mod.js +25 -0
- package/esm/pkg/commands/scan.js +3 -0
- package/esm/pkg/commands/smismember.js +9 -0
- package/esm/pkg/commands/zdiffstore.js +9 -0
- package/esm/pkg/commands/zmscore.js +10 -0
- package/esm/pkg/http.js +92 -2
- package/esm/pkg/pipeline.js +170 -12
- package/esm/pkg/redis.js +202 -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 +41 -54
- 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/mod.js +25 -0
- package/script/pkg/commands/scan.js +3 -0
- package/script/pkg/commands/smismember.js +13 -0
- package/script/pkg/commands/zdiffstore.js +13 -0
- package/script/pkg/commands/zmscore.js +14 -0
- package/script/pkg/http.js +92 -2
- package/script/pkg/pipeline.js +169 -11
- package/script/pkg/redis.js +201 -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/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/mod.d.ts +25 -0
- package/types/pkg/commands/scan.d.ts +2 -1
- package/types/pkg/commands/script_flush.d.ts +1 -1
- package/types/pkg/commands/set.d.ts +3 -3
- package/types/pkg/commands/smembers.d.ts +2 -2
- package/types/pkg/commands/smismember.d.ts +7 -0
- package/types/pkg/commands/type.d.ts +1 -1
- package/types/pkg/commands/zadd.d.ts +3 -3
- 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 +1 -1
- package/types/pkg/commands/zunionstore.d.ts +1 -1
- package/types/pkg/http.d.ts +44 -7
- package/types/pkg/pipeline.d.ts +255 -125
- package/types/pkg/redis.d.ts +144 -13
- 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
|
@@ -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
|
+
}
|
package/esm/pkg/commands/mod.js
CHANGED
|
@@ -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";
|
package/esm/pkg/commands/scan.js
CHANGED
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
|
*/
|
|
@@ -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
|
+
}
|
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, 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()
|
|
@@ -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
|
*/
|
|
@@ -835,6 +883,15 @@ export class Pipeline {
|
|
|
835
883
|
writable: true,
|
|
836
884
|
value: (...args) => this.chain(new SMembersCommand(args, this.commandOptions))
|
|
837
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
|
+
});
|
|
838
895
|
/**
|
|
839
896
|
* @see https://redis.io/commands/smove
|
|
840
897
|
*/
|
|
@@ -1011,6 +1068,15 @@ export class Pipeline {
|
|
|
1011
1068
|
writable: true,
|
|
1012
1069
|
value: (...args) => this.chain(new ZLexCountCommand(args, this.commandOptions))
|
|
1013
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
|
+
});
|
|
1014
1080
|
/**
|
|
1015
1081
|
* @see https://redis.io/commands/zpopmax
|
|
1016
1082
|
*/
|
|
@@ -1119,16 +1185,108 @@ export class Pipeline {
|
|
|
1119
1185
|
writable: true,
|
|
1120
1186
|
value: (...args) => this.chain(new ZUnionStoreCommand(args, this.commandOptions))
|
|
1121
1187
|
});
|
|
1122
|
-
this.client = client;
|
|
1123
|
-
this.commands = [];
|
|
1124
|
-
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;
|
|
1125
1192
|
}
|
|
1126
1193
|
/**
|
|
1127
|
-
* Pushes a command into the
|
|
1194
|
+
* Pushes a command into the pipeline and returns a chainable instance of the
|
|
1128
1195
|
* pipeline
|
|
1129
1196
|
*/
|
|
1130
1197
|
chain(command) {
|
|
1131
1198
|
this.commands.push(command);
|
|
1132
|
-
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
|
+
};
|
|
1133
1291
|
}
|
|
1134
1292
|
}
|