@upstash/redis 0.0.0-ci.af91db56 → 0.0.0-ci.b1b216d3-20230414
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 +44 -280
- 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 +26 -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/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 +126 -8
- package/esm/pkg/pipeline.js +172 -6
- package/esm/pkg/redis.js +223 -2
- package/esm/pkg/script.js +77 -0
- package/esm/platforms/cloudflare.js +14 -26
- package/esm/platforms/fastly.js +10 -25
- package/esm/platforms/node_with_fetch.js +30 -26
- package/esm/platforms/nodejs.js +26 -26
- 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/lpos.js +23 -0
- package/script/pkg/commands/mod.js +26 -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/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 +126 -8
- package/script/pkg/pipeline.js +171 -5
- package/script/pkg/redis.js +222 -1
- package/script/pkg/script.js +81 -0
- package/script/platforms/cloudflare.js +14 -26
- package/script/platforms/fastly.js +10 -25
- package/script/platforms/node_with_fetch.js +30 -26
- package/script/platforms/nodejs.js +26 -26
- 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/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 +26 -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/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 +69 -8
- package/types/pkg/pipeline.d.ts +72 -9
- package/types/pkg/redis.d.ts +159 -17
- package/types/pkg/script.d.ts +42 -0
- package/types/pkg/types.d.ts +27 -1
- package/types/platforms/cloudflare.d.ts +9 -4
- package/types/platforms/fastly.d.ts +3 -3
- package/types/platforms/node_with_fetch.d.ts +3 -3
- package/types/platforms/nodejs.d.ts +19 -3
- package/types/version.d.ts +1 -0
package/esm/pkg/http.js
CHANGED
|
@@ -19,31 +19,149 @@ export class HttpClient {
|
|
|
19
19
|
writable: true,
|
|
20
20
|
value: void 0
|
|
21
21
|
});
|
|
22
|
+
Object.defineProperty(this, "retry", {
|
|
23
|
+
enumerable: true,
|
|
24
|
+
configurable: true,
|
|
25
|
+
writable: true,
|
|
26
|
+
value: void 0
|
|
27
|
+
});
|
|
28
|
+
this.options = {
|
|
29
|
+
backend: config.options?.backend,
|
|
30
|
+
agent: config.agent,
|
|
31
|
+
responseEncoding: config.responseEncoding ?? "base64",
|
|
32
|
+
cache: config.cache,
|
|
33
|
+
};
|
|
22
34
|
this.baseUrl = config.baseUrl.replace(/\/$/, "");
|
|
23
|
-
this.headers = {
|
|
24
|
-
|
|
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
|
+
}
|
|
42
|
+
if (typeof config?.retry === "boolean" && config?.retry === false) {
|
|
43
|
+
this.retry = {
|
|
44
|
+
attempts: 1,
|
|
45
|
+
backoff: () => 0,
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
else {
|
|
49
|
+
this.retry = {
|
|
50
|
+
attempts: config?.retry?.retries ?? 5,
|
|
51
|
+
backoff: config?.retry?.backoff ??
|
|
52
|
+
((retryCount) => Math.exp(retryCount) * 50),
|
|
53
|
+
};
|
|
54
|
+
}
|
|
25
55
|
}
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
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;
|
|
29
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
|
+
}
|
|
73
|
+
async request(req) {
|
|
30
74
|
const requestOptions = {
|
|
75
|
+
cache: this.options.cache,
|
|
31
76
|
method: "POST",
|
|
32
77
|
headers: this.headers,
|
|
33
78
|
body: JSON.stringify(req.body),
|
|
34
79
|
keepalive: true,
|
|
80
|
+
agent: this.options?.agent,
|
|
35
81
|
/**
|
|
36
82
|
* Fastly specific
|
|
37
83
|
*/
|
|
38
84
|
backend: this.options?.backend,
|
|
39
85
|
};
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
86
|
+
let res = null;
|
|
87
|
+
let error = null;
|
|
88
|
+
for (let i = 0; i <= this.retry.attempts; i++) {
|
|
89
|
+
try {
|
|
90
|
+
res = await fetch([this.baseUrl, ...(req.path ?? [])].join("/"), requestOptions);
|
|
91
|
+
break;
|
|
92
|
+
}
|
|
93
|
+
catch (err) {
|
|
94
|
+
error = err;
|
|
95
|
+
await new Promise((r) => setTimeout(r, this.retry.backoff(i)));
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
if (!res) {
|
|
99
|
+
throw error ?? new Error("Exhausted all retries");
|
|
100
|
+
}
|
|
43
101
|
const body = (await res.json());
|
|
44
102
|
if (!res.ok) {
|
|
45
103
|
throw new UpstashError(body.error);
|
|
46
104
|
}
|
|
105
|
+
if (this.options?.responseEncoding === "base64") {
|
|
106
|
+
return Array.isArray(body) ? body.map(decode) : decode(body);
|
|
107
|
+
}
|
|
47
108
|
return body;
|
|
48
109
|
}
|
|
49
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, 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(
|
|
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
|
|
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
|
*/
|
|
@@ -475,6 +521,15 @@ export class Pipeline {
|
|
|
475
521
|
writable: true,
|
|
476
522
|
value: (...args) => this.chain(new LPopCommand(args, this.commandOptions))
|
|
477
523
|
});
|
|
524
|
+
/**
|
|
525
|
+
* @see https://redis.io/commands/lpos
|
|
526
|
+
*/
|
|
527
|
+
Object.defineProperty(this, "lpos", {
|
|
528
|
+
enumerable: true,
|
|
529
|
+
configurable: true,
|
|
530
|
+
writable: true,
|
|
531
|
+
value: (...args) => this.chain(new LPosCommand(args, this.commandOptions))
|
|
532
|
+
});
|
|
478
533
|
/**
|
|
479
534
|
* @see https://redis.io/commands/lpush
|
|
480
535
|
*/
|
|
@@ -826,6 +881,15 @@ export class Pipeline {
|
|
|
826
881
|
writable: true,
|
|
827
882
|
value: (...args) => this.chain(new SMembersCommand(args, this.commandOptions))
|
|
828
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
|
+
});
|
|
829
893
|
/**
|
|
830
894
|
* @see https://redis.io/commands/smove
|
|
831
895
|
*/
|
|
@@ -1002,6 +1066,15 @@ export class Pipeline {
|
|
|
1002
1066
|
writable: true,
|
|
1003
1067
|
value: (...args) => this.chain(new ZLexCountCommand(args, this.commandOptions))
|
|
1004
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
|
+
});
|
|
1005
1078
|
/**
|
|
1006
1079
|
* @see https://redis.io/commands/zpopmax
|
|
1007
1080
|
*/
|
|
@@ -1110,9 +1183,10 @@ export class Pipeline {
|
|
|
1110
1183
|
writable: true,
|
|
1111
1184
|
value: (...args) => this.chain(new ZUnionStoreCommand(args, this.commandOptions))
|
|
1112
1185
|
});
|
|
1113
|
-
this.client = client;
|
|
1186
|
+
this.client = opts.client;
|
|
1114
1187
|
this.commands = [];
|
|
1115
|
-
this.commandOptions = commandOptions;
|
|
1188
|
+
this.commandOptions = opts.commandOptions;
|
|
1189
|
+
this.multiExec = opts.multiExec ?? false;
|
|
1116
1190
|
}
|
|
1117
1191
|
/**
|
|
1118
1192
|
* Pushes a command into the pipelien and returns a chainable instance of the
|
|
@@ -1122,4 +1196,96 @@ export class Pipeline {
|
|
|
1122
1196
|
this.commands.push(command);
|
|
1123
1197
|
return this;
|
|
1124
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
|
+
}
|
|
1125
1291
|
}
|