@upstash/redis 0.0.0-ci.e730ad54-20220901 → 0.0.0-ci.ed40a9ac-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 +20 -18
- 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/smismember.js +9 -0
- package/esm/pkg/commands/zdiffstore.js +9 -0
- package/esm/pkg/commands/zmscore.js +1 -2
- package/esm/pkg/http.js +92 -2
- package/esm/pkg/pipeline.js +153 -6
- package/esm/pkg/redis.js +188 -2
- 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 +22 -1
- package/esm/version.js +1 -0
- package/package.json +41 -16
- 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/smismember.js +13 -0
- package/script/pkg/commands/zdiffstore.js +13 -0
- package/script/pkg/commands/zmscore.js +1 -2
- package/script/pkg/http.js +92 -2
- package/script/pkg/pipeline.js +152 -5
- package/script/pkg/redis.js +187 -1
- 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 +22 -1
- package/script/version.js +4 -0
- 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/mod.d.ts +25 -0
- package/types/pkg/commands/scan.d.ts +1 -1
- package/types/pkg/commands/script_flush.d.ts +1 -1
- package/types/pkg/commands/set.d.ts +1 -1
- 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 +1 -1
- 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 +55 -4
- package/types/pkg/redis.d.ts +134 -10
- 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
package/script/pkg/http.js
CHANGED
|
@@ -28,9 +28,20 @@ class HttpClient {
|
|
|
28
28
|
writable: true,
|
|
29
29
|
value: void 0
|
|
30
30
|
});
|
|
31
|
+
this.options = {
|
|
32
|
+
backend: config.options?.backend,
|
|
33
|
+
agent: config.agent,
|
|
34
|
+
responseEncoding: config.responseEncoding ?? "base64",
|
|
35
|
+
cache: config.cache,
|
|
36
|
+
};
|
|
31
37
|
this.baseUrl = config.baseUrl.replace(/\/$/, "");
|
|
32
|
-
this.headers = {
|
|
33
|
-
|
|
38
|
+
this.headers = {
|
|
39
|
+
"Content-Type": "application/json",
|
|
40
|
+
...config.headers,
|
|
41
|
+
};
|
|
42
|
+
if (this.options.responseEncoding === "base64") {
|
|
43
|
+
this.headers["Upstash-Encoding"] = "base64";
|
|
44
|
+
}
|
|
34
45
|
if (typeof config?.retry === "boolean" && config?.retry === false) {
|
|
35
46
|
this.retry = {
|
|
36
47
|
attempts: 1,
|
|
@@ -45,12 +56,31 @@ class HttpClient {
|
|
|
45
56
|
};
|
|
46
57
|
}
|
|
47
58
|
}
|
|
59
|
+
mergeTelemetry(telemetry) {
|
|
60
|
+
function merge(obj, key, value) {
|
|
61
|
+
if (!value) {
|
|
62
|
+
return obj;
|
|
63
|
+
}
|
|
64
|
+
if (obj[key]) {
|
|
65
|
+
obj[key] = [obj[key], value].join(",");
|
|
66
|
+
}
|
|
67
|
+
else {
|
|
68
|
+
obj[key] = value;
|
|
69
|
+
}
|
|
70
|
+
return obj;
|
|
71
|
+
}
|
|
72
|
+
this.headers = merge(this.headers, "Upstash-Telemetry-Runtime", telemetry.runtime);
|
|
73
|
+
this.headers = merge(this.headers, "Upstash-Telemetry-Platform", telemetry.platform);
|
|
74
|
+
this.headers = merge(this.headers, "Upstash-Telemetry-Sdk", telemetry.sdk);
|
|
75
|
+
}
|
|
48
76
|
async request(req) {
|
|
49
77
|
const requestOptions = {
|
|
78
|
+
cache: this.options.cache,
|
|
50
79
|
method: "POST",
|
|
51
80
|
headers: this.headers,
|
|
52
81
|
body: JSON.stringify(req.body),
|
|
53
82
|
keepalive: true,
|
|
83
|
+
agent: this.options?.agent,
|
|
54
84
|
/**
|
|
55
85
|
* Fastly specific
|
|
56
86
|
*/
|
|
@@ -75,7 +105,67 @@ class HttpClient {
|
|
|
75
105
|
if (!res.ok) {
|
|
76
106
|
throw new error_js_1.UpstashError(body.error);
|
|
77
107
|
}
|
|
108
|
+
if (this.options?.responseEncoding === "base64") {
|
|
109
|
+
return Array.isArray(body) ? body.map(decode) : decode(body);
|
|
110
|
+
}
|
|
78
111
|
return body;
|
|
79
112
|
}
|
|
80
113
|
}
|
|
81
114
|
exports.HttpClient = HttpClient;
|
|
115
|
+
function base64decode(b64) {
|
|
116
|
+
let dec = "";
|
|
117
|
+
try {
|
|
118
|
+
/**
|
|
119
|
+
* Using only atob() is not enough because it doesn't work with unicode characters
|
|
120
|
+
*/
|
|
121
|
+
const binString = atob(b64);
|
|
122
|
+
const size = binString.length;
|
|
123
|
+
const bytes = new Uint8Array(size);
|
|
124
|
+
for (let i = 0; i < size; i++) {
|
|
125
|
+
bytes[i] = binString.charCodeAt(i);
|
|
126
|
+
}
|
|
127
|
+
dec = new TextDecoder().decode(bytes);
|
|
128
|
+
}
|
|
129
|
+
catch {
|
|
130
|
+
dec = b64;
|
|
131
|
+
}
|
|
132
|
+
return dec;
|
|
133
|
+
// try {
|
|
134
|
+
// return decodeURIComponent(dec);
|
|
135
|
+
// } catch {
|
|
136
|
+
// return dec;
|
|
137
|
+
// }
|
|
138
|
+
}
|
|
139
|
+
function decode(raw) {
|
|
140
|
+
let result = undefined;
|
|
141
|
+
switch (typeof raw.result) {
|
|
142
|
+
case "undefined":
|
|
143
|
+
return raw;
|
|
144
|
+
case "number": {
|
|
145
|
+
result = raw.result;
|
|
146
|
+
break;
|
|
147
|
+
}
|
|
148
|
+
case "object": {
|
|
149
|
+
if (Array.isArray(raw.result)) {
|
|
150
|
+
result = raw.result.map((v) => typeof v === "string"
|
|
151
|
+
? base64decode(v)
|
|
152
|
+
: Array.isArray(v)
|
|
153
|
+
? v.map(base64decode)
|
|
154
|
+
: v);
|
|
155
|
+
}
|
|
156
|
+
else {
|
|
157
|
+
// If it's not an array it must be null
|
|
158
|
+
// Apparently null is an object in javascript
|
|
159
|
+
result = null;
|
|
160
|
+
}
|
|
161
|
+
break;
|
|
162
|
+
}
|
|
163
|
+
case "string": {
|
|
164
|
+
result = raw.result === "OK" ? "OK" : base64decode(raw.result);
|
|
165
|
+
break;
|
|
166
|
+
}
|
|
167
|
+
default:
|
|
168
|
+
break;
|
|
169
|
+
}
|
|
170
|
+
return { result, error: raw.error };
|
|
171
|
+
}
|
package/script/pkg/pipeline.js
CHANGED
|
@@ -4,6 +4,8 @@ exports.Pipeline = void 0;
|
|
|
4
4
|
const mod_js_1 = require("./commands/mod.js");
|
|
5
5
|
const error_js_1 = require("./error.js");
|
|
6
6
|
const zmscore_js_1 = require("./commands/zmscore.js");
|
|
7
|
+
const hrandfield_js_1 = require("./commands/hrandfield.js");
|
|
8
|
+
const zdiffstore_js_1 = require("./commands/zdiffstore.js");
|
|
7
9
|
/**
|
|
8
10
|
* Upstash REST API supports command pipelining to send multiple commands in
|
|
9
11
|
* batch, instead of sending each command one by one and waiting for a response.
|
|
@@ -20,7 +22,7 @@ const zmscore_js_1 = require("./commands/zmscore.js");
|
|
|
20
22
|
* **Examples:**
|
|
21
23
|
*
|
|
22
24
|
* ```ts
|
|
23
|
-
* const p = redis.pipeline()
|
|
25
|
+
* const p = redis.pipeline() // or redis.multi()
|
|
24
26
|
* p.set("key","value")
|
|
25
27
|
* p.get("key")
|
|
26
28
|
* const res = await p.exec()
|
|
@@ -43,7 +45,7 @@ const zmscore_js_1 = require("./commands/zmscore.js");
|
|
|
43
45
|
* ```
|
|
44
46
|
*/
|
|
45
47
|
class Pipeline {
|
|
46
|
-
constructor(
|
|
48
|
+
constructor(opts) {
|
|
47
49
|
Object.defineProperty(this, "client", {
|
|
48
50
|
enumerable: true,
|
|
49
51
|
configurable: true,
|
|
@@ -62,6 +64,12 @@ class Pipeline {
|
|
|
62
64
|
writable: true,
|
|
63
65
|
value: void 0
|
|
64
66
|
});
|
|
67
|
+
Object.defineProperty(this, "multiExec", {
|
|
68
|
+
enumerable: true,
|
|
69
|
+
configurable: true,
|
|
70
|
+
writable: true,
|
|
71
|
+
value: void 0
|
|
72
|
+
});
|
|
65
73
|
/**
|
|
66
74
|
* Send the pipeline request to upstash.
|
|
67
75
|
*
|
|
@@ -80,8 +88,9 @@ class Pipeline {
|
|
|
80
88
|
if (this.commands.length === 0) {
|
|
81
89
|
throw new Error("Pipeline is empty");
|
|
82
90
|
}
|
|
91
|
+
const path = this.multiExec ? ["multi-exec"] : ["pipeline"];
|
|
83
92
|
const res = (await this.client.request({
|
|
84
|
-
path
|
|
93
|
+
path,
|
|
85
94
|
body: Object.values(this.commands).map((c) => c.command),
|
|
86
95
|
}));
|
|
87
96
|
return res.map(({ error, result }, i) => {
|
|
@@ -128,6 +137,15 @@ class Pipeline {
|
|
|
128
137
|
writable: true,
|
|
129
138
|
value: (...args) => this.chain(new mod_js_1.BitPosCommand(args, this.commandOptions))
|
|
130
139
|
});
|
|
140
|
+
/**
|
|
141
|
+
* @see https://redis.io/commands/zdiffstore
|
|
142
|
+
*/
|
|
143
|
+
Object.defineProperty(this, "zdiffstore", {
|
|
144
|
+
enumerable: true,
|
|
145
|
+
configurable: true,
|
|
146
|
+
writable: true,
|
|
147
|
+
value: (...args) => this.chain(new zdiffstore_js_1.ZDiffStoreCommand(args, this.commandOptions))
|
|
148
|
+
});
|
|
131
149
|
/**
|
|
132
150
|
* @see https://redis.io/commands/dbsize
|
|
133
151
|
*/
|
|
@@ -254,6 +272,15 @@ class Pipeline {
|
|
|
254
272
|
writable: true,
|
|
255
273
|
value: (...args) => this.chain(new mod_js_1.GetBitCommand(args, this.commandOptions))
|
|
256
274
|
});
|
|
275
|
+
/**
|
|
276
|
+
* @see https://redis.io/commands/getdel
|
|
277
|
+
*/
|
|
278
|
+
Object.defineProperty(this, "getdel", {
|
|
279
|
+
enumerable: true,
|
|
280
|
+
configurable: true,
|
|
281
|
+
writable: true,
|
|
282
|
+
value: (...args) => this.chain(new mod_js_1.GetDelCommand(args, this.commandOptions))
|
|
283
|
+
});
|
|
257
284
|
/**
|
|
258
285
|
* @see https://redis.io/commands/getrange
|
|
259
286
|
*/
|
|
@@ -362,6 +389,15 @@ class Pipeline {
|
|
|
362
389
|
writable: true,
|
|
363
390
|
value: (key, kv) => this.chain(new mod_js_1.HMSetCommand([key, kv], this.commandOptions))
|
|
364
391
|
});
|
|
392
|
+
/**
|
|
393
|
+
* @see https://redis.io/commands/hrandfield
|
|
394
|
+
*/
|
|
395
|
+
Object.defineProperty(this, "hrandfield", {
|
|
396
|
+
enumerable: true,
|
|
397
|
+
configurable: true,
|
|
398
|
+
writable: true,
|
|
399
|
+
value: (key, count, withValues) => this.chain(new hrandfield_js_1.HRandFieldCommand([key, count, withValues], this.commandOptions))
|
|
400
|
+
});
|
|
365
401
|
/**
|
|
366
402
|
* @see https://redis.io/commands/hscan
|
|
367
403
|
*/
|
|
@@ -470,6 +506,15 @@ class Pipeline {
|
|
|
470
506
|
writable: true,
|
|
471
507
|
value: (...args) => this.chain(new mod_js_1.LLenCommand(args, this.commandOptions))
|
|
472
508
|
});
|
|
509
|
+
/**
|
|
510
|
+
* @see https://redis.io/commands/lmove
|
|
511
|
+
*/
|
|
512
|
+
Object.defineProperty(this, "lmove", {
|
|
513
|
+
enumerable: true,
|
|
514
|
+
configurable: true,
|
|
515
|
+
writable: true,
|
|
516
|
+
value: (...args) => this.chain(new mod_js_1.LMoveCommand(args, this.commandOptions))
|
|
517
|
+
});
|
|
473
518
|
/**
|
|
474
519
|
* @see https://redis.io/commands/lpop
|
|
475
520
|
*/
|
|
@@ -839,6 +884,15 @@ class Pipeline {
|
|
|
839
884
|
writable: true,
|
|
840
885
|
value: (...args) => this.chain(new mod_js_1.SMembersCommand(args, this.commandOptions))
|
|
841
886
|
});
|
|
887
|
+
/**
|
|
888
|
+
* @see https://redis.io/commands/smismember
|
|
889
|
+
*/
|
|
890
|
+
Object.defineProperty(this, "smismember", {
|
|
891
|
+
enumerable: true,
|
|
892
|
+
configurable: true,
|
|
893
|
+
writable: true,
|
|
894
|
+
value: (key, members) => this.chain(new mod_js_1.SMIsMemberCommand([key, members], this.commandOptions))
|
|
895
|
+
});
|
|
842
896
|
/**
|
|
843
897
|
* @see https://redis.io/commands/smove
|
|
844
898
|
*/
|
|
@@ -1132,9 +1186,10 @@ class Pipeline {
|
|
|
1132
1186
|
writable: true,
|
|
1133
1187
|
value: (...args) => this.chain(new mod_js_1.ZUnionStoreCommand(args, this.commandOptions))
|
|
1134
1188
|
});
|
|
1135
|
-
this.client = client;
|
|
1189
|
+
this.client = opts.client;
|
|
1136
1190
|
this.commands = [];
|
|
1137
|
-
this.commandOptions = commandOptions;
|
|
1191
|
+
this.commandOptions = opts.commandOptions;
|
|
1192
|
+
this.multiExec = opts.multiExec ?? false;
|
|
1138
1193
|
}
|
|
1139
1194
|
/**
|
|
1140
1195
|
* Pushes a command into the pipelien and returns a chainable instance of the
|
|
@@ -1144,5 +1199,97 @@ class Pipeline {
|
|
|
1144
1199
|
this.commands.push(command);
|
|
1145
1200
|
return this;
|
|
1146
1201
|
}
|
|
1202
|
+
/**
|
|
1203
|
+
* @see https://redis.io/commands/?group=json
|
|
1204
|
+
*/
|
|
1205
|
+
get json() {
|
|
1206
|
+
// For some reason we needed to define the types manually, otherwise Deno wouldn't build it
|
|
1207
|
+
return {
|
|
1208
|
+
/**
|
|
1209
|
+
* @see https://redis.io/commands/json.arrappend
|
|
1210
|
+
*/
|
|
1211
|
+
arrappend: (...args) => this.chain(new mod_js_1.JsonArrAppendCommand(args, this.commandOptions)),
|
|
1212
|
+
/**
|
|
1213
|
+
* @see https://redis.io/commands/json.arrindex
|
|
1214
|
+
*/
|
|
1215
|
+
arrindex: (...args) => this.chain(new mod_js_1.JsonArrIndexCommand(args, this.commandOptions)),
|
|
1216
|
+
/**
|
|
1217
|
+
* @see https://redis.io/commands/json.arrinsert
|
|
1218
|
+
*/
|
|
1219
|
+
arrinsert: (...args) => this.chain(new mod_js_1.JsonArrInsertCommand(args, this.commandOptions)),
|
|
1220
|
+
/**
|
|
1221
|
+
* @see https://redis.io/commands/json.arrlen
|
|
1222
|
+
*/
|
|
1223
|
+
arrlen: (...args) => this.chain(new mod_js_1.JsonArrLenCommand(args, this.commandOptions)),
|
|
1224
|
+
/**
|
|
1225
|
+
* @see https://redis.io/commands/json.arrpop
|
|
1226
|
+
*/
|
|
1227
|
+
arrpop: (...args) => this.chain(new mod_js_1.JsonArrPopCommand(args, this.commandOptions)),
|
|
1228
|
+
/**
|
|
1229
|
+
* @see https://redis.io/commands/json.arrtrim
|
|
1230
|
+
*/
|
|
1231
|
+
arrtrim: (...args) => this.chain(new mod_js_1.JsonArrTrimCommand(args, this.commandOptions)),
|
|
1232
|
+
/**
|
|
1233
|
+
* @see https://redis.io/commands/json.clear
|
|
1234
|
+
*/
|
|
1235
|
+
clear: (...args) => this.chain(new mod_js_1.JsonClearCommand(args, this.commandOptions)),
|
|
1236
|
+
/**
|
|
1237
|
+
* @see https://redis.io/commands/json.del
|
|
1238
|
+
*/
|
|
1239
|
+
del: (...args) => this.chain(new mod_js_1.JsonDelCommand(args, this.commandOptions)),
|
|
1240
|
+
/**
|
|
1241
|
+
* @see https://redis.io/commands/json.forget
|
|
1242
|
+
*/
|
|
1243
|
+
forget: (...args) => this.chain(new mod_js_1.JsonForgetCommand(args, this.commandOptions)),
|
|
1244
|
+
/**
|
|
1245
|
+
* @see https://redis.io/commands/json.get
|
|
1246
|
+
*/
|
|
1247
|
+
get: (...args) => this.chain(new mod_js_1.JsonGetCommand(args, this.commandOptions)),
|
|
1248
|
+
/**
|
|
1249
|
+
* @see https://redis.io/commands/json.mget
|
|
1250
|
+
*/
|
|
1251
|
+
mget: (...args) => this.chain(new mod_js_1.JsonMGetCommand(args, this.commandOptions)),
|
|
1252
|
+
/**
|
|
1253
|
+
* @see https://redis.io/commands/json.numincrby
|
|
1254
|
+
*/
|
|
1255
|
+
numincrby: (...args) => this.chain(new mod_js_1.JsonNumIncrByCommand(args, this.commandOptions)),
|
|
1256
|
+
/**
|
|
1257
|
+
* @see https://redis.io/commands/json.nummultby
|
|
1258
|
+
*/
|
|
1259
|
+
nummultby: (...args) => this.chain(new mod_js_1.JsonNumMultByCommand(args, this.commandOptions)),
|
|
1260
|
+
/**
|
|
1261
|
+
* @see https://redis.io/commands/json.objkeys
|
|
1262
|
+
*/
|
|
1263
|
+
objkeys: (...args) => this.chain(new mod_js_1.JsonObjKeysCommand(args, this.commandOptions)),
|
|
1264
|
+
/**
|
|
1265
|
+
* @see https://redis.io/commands/json.objlen
|
|
1266
|
+
*/
|
|
1267
|
+
objlen: (...args) => this.chain(new mod_js_1.JsonObjLenCommand(args, this.commandOptions)),
|
|
1268
|
+
/**
|
|
1269
|
+
* @see https://redis.io/commands/json.resp
|
|
1270
|
+
*/
|
|
1271
|
+
resp: (...args) => this.chain(new mod_js_1.JsonRespCommand(args, this.commandOptions)),
|
|
1272
|
+
/**
|
|
1273
|
+
* @see https://redis.io/commands/json.set
|
|
1274
|
+
*/
|
|
1275
|
+
set: (...args) => this.chain(new mod_js_1.JsonSetCommand(args, this.commandOptions)),
|
|
1276
|
+
/**
|
|
1277
|
+
* @see https://redis.io/commands/json.strappend
|
|
1278
|
+
*/
|
|
1279
|
+
strappend: (...args) => this.chain(new mod_js_1.JsonStrAppendCommand(args, this.commandOptions)),
|
|
1280
|
+
/**
|
|
1281
|
+
* @see https://redis.io/commands/json.strlen
|
|
1282
|
+
*/
|
|
1283
|
+
strlen: (...args) => this.chain(new mod_js_1.JsonStrLenCommand(args, this.commandOptions)),
|
|
1284
|
+
/**
|
|
1285
|
+
* @see https://redis.io/commands/json.toggle
|
|
1286
|
+
*/
|
|
1287
|
+
toggle: (...args) => this.chain(new mod_js_1.JsonToggleCommand(args, this.commandOptions)),
|
|
1288
|
+
/**
|
|
1289
|
+
* @see https://redis.io/commands/json.type
|
|
1290
|
+
*/
|
|
1291
|
+
type: (...args) => this.chain(new mod_js_1.JsonTypeCommand(args, this.commandOptions)),
|
|
1292
|
+
};
|
|
1293
|
+
}
|
|
1147
1294
|
}
|
|
1148
1295
|
exports.Pipeline = Pipeline;
|
package/script/pkg/redis.js
CHANGED
|
@@ -5,6 +5,7 @@ const mod_js_1 = require("./commands/mod.js");
|
|
|
5
5
|
const pipeline_js_1 = require("./pipeline.js");
|
|
6
6
|
const script_js_1 = require("./script.js");
|
|
7
7
|
const zmscore_js_1 = require("./commands/zmscore.js");
|
|
8
|
+
const zdiffstore_js_1 = require("./commands/zdiffstore.js");
|
|
8
9
|
/**
|
|
9
10
|
* Serverless redis client for upstash.
|
|
10
11
|
*/
|
|
@@ -33,6 +34,12 @@ class Redis {
|
|
|
33
34
|
writable: true,
|
|
34
35
|
value: void 0
|
|
35
36
|
});
|
|
37
|
+
Object.defineProperty(this, "enableTelemetry", {
|
|
38
|
+
enumerable: true,
|
|
39
|
+
configurable: true,
|
|
40
|
+
writable: true,
|
|
41
|
+
value: void 0
|
|
42
|
+
});
|
|
36
43
|
/**
|
|
37
44
|
* Wrap a new middleware around the HTTP client.
|
|
38
45
|
*/
|
|
@@ -45,6 +52,27 @@ class Redis {
|
|
|
45
52
|
this.client.request = (req) => middleware(req, makeRequest);
|
|
46
53
|
}
|
|
47
54
|
});
|
|
55
|
+
/**
|
|
56
|
+
* Technically this is not private, we can hide it from intellisense by doing this
|
|
57
|
+
*/
|
|
58
|
+
Object.defineProperty(this, "addTelemetry", {
|
|
59
|
+
enumerable: true,
|
|
60
|
+
configurable: true,
|
|
61
|
+
writable: true,
|
|
62
|
+
value: (telemetry) => {
|
|
63
|
+
if (!this.enableTelemetry) {
|
|
64
|
+
return;
|
|
65
|
+
}
|
|
66
|
+
try {
|
|
67
|
+
// @ts-ignore - The `Requester` interface does not know about this method but it will be there
|
|
68
|
+
// as long as the user uses the standard HttpClient
|
|
69
|
+
this.client.mergeTelemetry(telemetry);
|
|
70
|
+
}
|
|
71
|
+
catch {
|
|
72
|
+
// ignore
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
});
|
|
48
76
|
/**
|
|
49
77
|
* Create a new pipeline that allows you to send requests in bulk.
|
|
50
78
|
*
|
|
@@ -54,7 +82,30 @@ class Redis {
|
|
|
54
82
|
enumerable: true,
|
|
55
83
|
configurable: true,
|
|
56
84
|
writable: true,
|
|
57
|
-
value: () => new pipeline_js_1.Pipeline(
|
|
85
|
+
value: () => new pipeline_js_1.Pipeline({
|
|
86
|
+
client: this.client,
|
|
87
|
+
commandOptions: this.opts,
|
|
88
|
+
multiExec: false,
|
|
89
|
+
})
|
|
90
|
+
});
|
|
91
|
+
/**
|
|
92
|
+
* Create a new transaction to allow executing multiple steps atomically.
|
|
93
|
+
*
|
|
94
|
+
* All the commands in a transaction are serialized and executed sequentially. A request sent by
|
|
95
|
+
* another client will never be served in the middle of the execution of a Redis Transaction. This
|
|
96
|
+
* guarantees that the commands are executed as a single isolated operation.
|
|
97
|
+
*
|
|
98
|
+
* @see {@link Pipeline}
|
|
99
|
+
*/
|
|
100
|
+
Object.defineProperty(this, "multi", {
|
|
101
|
+
enumerable: true,
|
|
102
|
+
configurable: true,
|
|
103
|
+
writable: true,
|
|
104
|
+
value: () => new pipeline_js_1.Pipeline({
|
|
105
|
+
client: this.client,
|
|
106
|
+
commandOptions: this.opts,
|
|
107
|
+
multiExec: true,
|
|
108
|
+
})
|
|
58
109
|
});
|
|
59
110
|
/**
|
|
60
111
|
* @see https://redis.io/commands/append
|
|
@@ -218,6 +269,15 @@ class Redis {
|
|
|
218
269
|
writable: true,
|
|
219
270
|
value: (...args) => new mod_js_1.GetBitCommand(args, this.opts).exec(this.client)
|
|
220
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) => new mod_js_1.GetDelCommand(args, this.opts).exec(this.client)
|
|
280
|
+
});
|
|
221
281
|
/**
|
|
222
282
|
* @see https://redis.io/commands/getrange
|
|
223
283
|
*/
|
|
@@ -326,6 +386,16 @@ class Redis {
|
|
|
326
386
|
writable: true,
|
|
327
387
|
value: (key, kv) => new mod_js_1.HMSetCommand([key, kv], this.opts).exec(this.client)
|
|
328
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) => new mod_js_1.HRandFieldCommand([key, count, withValues], this.opts)
|
|
397
|
+
.exec(this.client)
|
|
398
|
+
});
|
|
329
399
|
/**
|
|
330
400
|
* @see https://redis.io/commands/hscan
|
|
331
401
|
*/
|
|
@@ -434,6 +504,15 @@ class Redis {
|
|
|
434
504
|
writable: true,
|
|
435
505
|
value: (...args) => new mod_js_1.LLenCommand(args, this.opts).exec(this.client)
|
|
436
506
|
});
|
|
507
|
+
/**
|
|
508
|
+
* @see https://redis.io/commands/lmove
|
|
509
|
+
*/
|
|
510
|
+
Object.defineProperty(this, "lmove", {
|
|
511
|
+
enumerable: true,
|
|
512
|
+
configurable: true,
|
|
513
|
+
writable: true,
|
|
514
|
+
value: (...args) => new mod_js_1.LMoveCommand(args, this.opts).exec(this.client)
|
|
515
|
+
});
|
|
437
516
|
/**
|
|
438
517
|
* @see https://redis.io/commands/lpop
|
|
439
518
|
*/
|
|
@@ -794,6 +873,15 @@ class Redis {
|
|
|
794
873
|
writable: true,
|
|
795
874
|
value: (key, member) => new mod_js_1.SIsMemberCommand([key, member], this.opts).exec(this.client)
|
|
796
875
|
});
|
|
876
|
+
/**
|
|
877
|
+
* @see https://redis.io/commands/smismember
|
|
878
|
+
*/
|
|
879
|
+
Object.defineProperty(this, "smismember", {
|
|
880
|
+
enumerable: true,
|
|
881
|
+
configurable: true,
|
|
882
|
+
writable: true,
|
|
883
|
+
value: (key, members) => new mod_js_1.SMIsMemberCommand([key, members], this.opts).exec(this.client)
|
|
884
|
+
});
|
|
797
885
|
/**
|
|
798
886
|
* @see https://redis.io/commands/smembers
|
|
799
887
|
*/
|
|
@@ -952,6 +1040,15 @@ class Redis {
|
|
|
952
1040
|
writable: true,
|
|
953
1041
|
value: (...args) => new mod_js_1.ZCountCommand(args, this.opts).exec(this.client)
|
|
954
1042
|
});
|
|
1043
|
+
/**
|
|
1044
|
+
* @see https://redis.io/commands/zdiffstore
|
|
1045
|
+
*/
|
|
1046
|
+
Object.defineProperty(this, "zdiffstore", {
|
|
1047
|
+
enumerable: true,
|
|
1048
|
+
configurable: true,
|
|
1049
|
+
writable: true,
|
|
1050
|
+
value: (...args) => new zdiffstore_js_1.ZDiffStoreCommand(args, this.opts).exec(this.client)
|
|
1051
|
+
});
|
|
955
1052
|
/**
|
|
956
1053
|
* @see https://redis.io/commands/zincrby
|
|
957
1054
|
*/
|
|
@@ -1098,6 +1195,95 @@ class Redis {
|
|
|
1098
1195
|
});
|
|
1099
1196
|
this.client = client;
|
|
1100
1197
|
this.opts = opts;
|
|
1198
|
+
this.enableTelemetry = opts?.enableTelemetry ?? true;
|
|
1199
|
+
}
|
|
1200
|
+
get json() {
|
|
1201
|
+
return {
|
|
1202
|
+
/**
|
|
1203
|
+
* @see https://redis.io/commands/json.arrappend
|
|
1204
|
+
*/
|
|
1205
|
+
arrappend: (...args) => new mod_js_1.JsonArrAppendCommand(args, this.opts).exec(this.client),
|
|
1206
|
+
/**
|
|
1207
|
+
* @see https://redis.io/commands/json.arrindex
|
|
1208
|
+
*/
|
|
1209
|
+
arrindex: (...args) => new mod_js_1.JsonArrIndexCommand(args, this.opts).exec(this.client),
|
|
1210
|
+
/**
|
|
1211
|
+
* @see https://redis.io/commands/json.arrinsert
|
|
1212
|
+
*/
|
|
1213
|
+
arrinsert: (...args) => new mod_js_1.JsonArrInsertCommand(args, this.opts).exec(this.client),
|
|
1214
|
+
/**
|
|
1215
|
+
* @see https://redis.io/commands/json.arrlen
|
|
1216
|
+
*/
|
|
1217
|
+
arrlen: (...args) => new mod_js_1.JsonArrLenCommand(args, this.opts).exec(this.client),
|
|
1218
|
+
/**
|
|
1219
|
+
* @see https://redis.io/commands/json.arrpop
|
|
1220
|
+
*/
|
|
1221
|
+
arrpop: (...args) => new mod_js_1.JsonArrPopCommand(args, this.opts).exec(this.client),
|
|
1222
|
+
/**
|
|
1223
|
+
* @see https://redis.io/commands/json.arrtrim
|
|
1224
|
+
*/
|
|
1225
|
+
arrtrim: (...args) => new mod_js_1.JsonArrTrimCommand(args, this.opts).exec(this.client),
|
|
1226
|
+
/**
|
|
1227
|
+
* @see https://redis.io/commands/json.clear
|
|
1228
|
+
*/
|
|
1229
|
+
clear: (...args) => new mod_js_1.JsonClearCommand(args, this.opts).exec(this.client),
|
|
1230
|
+
/**
|
|
1231
|
+
* @see https://redis.io/commands/json.del
|
|
1232
|
+
*/
|
|
1233
|
+
del: (...args) => new mod_js_1.JsonDelCommand(args, this.opts).exec(this.client),
|
|
1234
|
+
/**
|
|
1235
|
+
* @see https://redis.io/commands/json.forget
|
|
1236
|
+
*/
|
|
1237
|
+
forget: (...args) => new mod_js_1.JsonForgetCommand(args, this.opts).exec(this.client),
|
|
1238
|
+
/**
|
|
1239
|
+
* @see https://redis.io/commands/json.get
|
|
1240
|
+
*/
|
|
1241
|
+
get: (...args) => new mod_js_1.JsonGetCommand(args, this.opts).exec(this.client),
|
|
1242
|
+
/**
|
|
1243
|
+
* @see https://redis.io/commands/json.mget
|
|
1244
|
+
*/
|
|
1245
|
+
mget: (...args) => new mod_js_1.JsonMGetCommand(args, this.opts).exec(this.client),
|
|
1246
|
+
/**
|
|
1247
|
+
* @see https://redis.io/commands/json.numincrby
|
|
1248
|
+
*/
|
|
1249
|
+
numincrby: (...args) => new mod_js_1.JsonNumIncrByCommand(args, this.opts).exec(this.client),
|
|
1250
|
+
/**
|
|
1251
|
+
* @see https://redis.io/commands/json.nummultby
|
|
1252
|
+
*/
|
|
1253
|
+
nummultby: (...args) => new mod_js_1.JsonNumMultByCommand(args, this.opts).exec(this.client),
|
|
1254
|
+
/**
|
|
1255
|
+
* @see https://redis.io/commands/json.objkeys
|
|
1256
|
+
*/
|
|
1257
|
+
objkeys: (...args) => new mod_js_1.JsonObjKeysCommand(args, this.opts).exec(this.client),
|
|
1258
|
+
/**
|
|
1259
|
+
* @see https://redis.io/commands/json.objlen
|
|
1260
|
+
*/
|
|
1261
|
+
objlen: (...args) => new mod_js_1.JsonObjLenCommand(args, this.opts).exec(this.client),
|
|
1262
|
+
/**
|
|
1263
|
+
* @see https://redis.io/commands/json.resp
|
|
1264
|
+
*/
|
|
1265
|
+
resp: (...args) => new mod_js_1.JsonRespCommand(args, this.opts).exec(this.client),
|
|
1266
|
+
/**
|
|
1267
|
+
* @see https://redis.io/commands/json.set
|
|
1268
|
+
*/
|
|
1269
|
+
set: (...args) => new mod_js_1.JsonSetCommand(args, this.opts).exec(this.client),
|
|
1270
|
+
/**
|
|
1271
|
+
* @see https://redis.io/commands/json.strappend
|
|
1272
|
+
*/
|
|
1273
|
+
strappend: (...args) => new mod_js_1.JsonStrAppendCommand(args, this.opts).exec(this.client),
|
|
1274
|
+
/**
|
|
1275
|
+
* @see https://redis.io/commands/json.strlen
|
|
1276
|
+
*/
|
|
1277
|
+
strlen: (...args) => new mod_js_1.JsonStrLenCommand(args, this.opts).exec(this.client),
|
|
1278
|
+
/**
|
|
1279
|
+
* @see https://redis.io/commands/json.toggle
|
|
1280
|
+
*/
|
|
1281
|
+
toggle: (...args) => new mod_js_1.JsonToggleCommand(args, this.opts).exec(this.client),
|
|
1282
|
+
/**
|
|
1283
|
+
* @see https://redis.io/commands/json.type
|
|
1284
|
+
*/
|
|
1285
|
+
type: (...args) => new mod_js_1.JsonTypeCommand(args, this.opts).exec(this.client),
|
|
1286
|
+
};
|
|
1101
1287
|
}
|
|
1102
1288
|
createScript(script) {
|
|
1103
1289
|
return new script_js_1.Script(this, script);
|
|
@@ -26,6 +26,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
26
26
|
exports.Redis = void 0;
|
|
27
27
|
const core = __importStar(require("../pkg/redis.js"));
|
|
28
28
|
const http_js_1 = require("../pkg/http.js");
|
|
29
|
+
const version_js_1 = require("../version.js");
|
|
29
30
|
/**
|
|
30
31
|
* Serverless redis client for upstash.
|
|
31
32
|
*/
|
|
@@ -41,7 +42,7 @@ class Redis extends core.Redis {
|
|
|
41
42
|
* });
|
|
42
43
|
* ```
|
|
43
44
|
*/
|
|
44
|
-
constructor(config) {
|
|
45
|
+
constructor(config, env) {
|
|
45
46
|
if (config.url.startsWith(" ") ||
|
|
46
47
|
config.url.endsWith(" ") ||
|
|
47
48
|
/\r|\n/.test(config.url)) {
|
|
@@ -56,10 +57,17 @@ class Redis extends core.Redis {
|
|
|
56
57
|
retry: config.retry,
|
|
57
58
|
baseUrl: config.url,
|
|
58
59
|
headers: { authorization: `Bearer ${config.token}` },
|
|
60
|
+
responseEncoding: config.responseEncoding,
|
|
59
61
|
});
|
|
60
62
|
super(client, {
|
|
63
|
+
enableTelemetry: !env?.UPSTASH_DISABLE_TELEMETRY,
|
|
61
64
|
automaticDeserialization: config.automaticDeserialization,
|
|
62
65
|
});
|
|
66
|
+
// This is only added of the user has not disabled telemetry
|
|
67
|
+
this.addTelemetry({
|
|
68
|
+
platform: "cloudflare",
|
|
69
|
+
sdk: `@upstash/redis@${version_js_1.VERSION}`,
|
|
70
|
+
});
|
|
63
71
|
}
|
|
64
72
|
/*
|
|
65
73
|
* Create a new Upstash Redis instance from environment variables on cloudflare.
|
|
@@ -83,7 +91,7 @@ class Redis extends core.Redis {
|
|
|
83
91
|
if (!token) {
|
|
84
92
|
throw new Error("Unable to find environment variable: `UPSTASH_REDIS_REST_TOKEN`. Please add it via `wrangler secret put UPSTASH_REDIS_REST_TOKEN`");
|
|
85
93
|
}
|
|
86
|
-
return new Redis({ ...opts, url, token });
|
|
94
|
+
return new Redis({ ...opts, url, token }, env);
|
|
87
95
|
}
|
|
88
96
|
}
|
|
89
97
|
exports.Redis = Redis;
|
|
@@ -26,6 +26,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
26
26
|
exports.Redis = void 0;
|
|
27
27
|
const core = __importStar(require("../pkg/redis.js"));
|
|
28
28
|
const http_js_1 = require("../pkg/http.js");
|
|
29
|
+
const version_js_1 = require("../version.js");
|
|
29
30
|
/**
|
|
30
31
|
* Serverless redis client for upstash.
|
|
31
32
|
*/
|
|
@@ -58,10 +59,15 @@ class Redis extends core.Redis {
|
|
|
58
59
|
retry: config.retry,
|
|
59
60
|
headers: { authorization: `Bearer ${config.token}` },
|
|
60
61
|
options: { backend: config.backend },
|
|
62
|
+
responseEncoding: config.responseEncoding,
|
|
61
63
|
});
|
|
62
64
|
super(client, {
|
|
63
65
|
automaticDeserialization: config.automaticDeserialization,
|
|
64
66
|
});
|
|
67
|
+
this.addTelemetry({
|
|
68
|
+
sdk: `@upstash/redis@${version_js_1.VERSION}`,
|
|
69
|
+
platform: "fastly",
|
|
70
|
+
});
|
|
65
71
|
}
|
|
66
72
|
}
|
|
67
73
|
exports.Redis = Redis;
|