@upstash/redis 0.0.0-ci.efcbdd79 → 0.0.0-ci.f0c37f55-20231010
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 +27 -0
- package/esm/pkg/commands/scan.js +3 -0
- package/esm/pkg/commands/set.js +16 -4
- package/esm/pkg/commands/smismember.js +9 -0
- package/esm/pkg/commands/xadd.js +26 -0
- package/esm/pkg/commands/xrange.js +36 -0
- package/esm/pkg/commands/zdiffstore.js +9 -0
- package/esm/pkg/commands/zmscore.js +10 -0
- package/esm/pkg/http.js +100 -3
- package/esm/pkg/pipeline.js +170 -12
- package/esm/pkg/redis.js +220 -2
- package/esm/pkg/script.js +77 -0
- package/esm/platforms/cloudflare.js +10 -2
- package/esm/platforms/fastly.js +6 -0
- package/esm/platforms/node_with_fetch.js +26 -1
- package/esm/platforms/nodejs.js +24 -1
- package/esm/version.js +1 -0
- package/package.json +53 -58
- package/script/deps/deno.land/x/base64@v0.2.1/base.js +104 -0
- package/script/deps/deno.land/x/base64@v0.2.1/base64url.js +13 -0
- package/script/deps/deno.land/x/sha1@v1.0.3/deps.js +6 -0
- package/script/deps/deno.land/x/sha1@v1.0.3/mod.js +196 -0
- package/script/deps/denopkg.com/chiefbiiko/std-encoding@v1.0.0/mod.js +55 -0
- package/script/pkg/commands/command.js +12 -3
- package/script/pkg/commands/getdel.js +13 -0
- package/script/pkg/commands/hgetall.js +0 -4
- package/script/pkg/commands/hrandfield.js +43 -0
- package/script/pkg/commands/json_arrappend.js +13 -0
- package/script/pkg/commands/json_arrindex.js +13 -0
- package/script/pkg/commands/json_arrinsert.js +13 -0
- package/script/pkg/commands/json_arrlen.js +13 -0
- package/script/pkg/commands/json_arrpop.js +13 -0
- package/script/pkg/commands/json_arrtrim.js +16 -0
- package/script/pkg/commands/json_clear.js +13 -0
- package/script/pkg/commands/json_del.js +13 -0
- package/script/pkg/commands/json_forget.js +13 -0
- package/script/pkg/commands/json_get.js +34 -0
- package/script/pkg/commands/json_mget.js +13 -0
- package/script/pkg/commands/json_numincrby.js +13 -0
- package/script/pkg/commands/json_nummultby.js +13 -0
- package/script/pkg/commands/json_objkeys.js +13 -0
- package/script/pkg/commands/json_objlen.js +13 -0
- package/script/pkg/commands/json_resp.js +13 -0
- package/script/pkg/commands/json_set.js +22 -0
- package/script/pkg/commands/json_strappend.js +13 -0
- package/script/pkg/commands/json_strlen.js +13 -0
- package/script/pkg/commands/json_toggle.js +13 -0
- package/script/pkg/commands/json_type.js +13 -0
- package/script/pkg/commands/lmove.js +13 -0
- package/script/pkg/commands/mod.js +27 -0
- package/script/pkg/commands/scan.js +3 -0
- package/script/pkg/commands/set.js +16 -4
- package/script/pkg/commands/smismember.js +13 -0
- package/script/pkg/commands/xadd.js +30 -0
- package/script/pkg/commands/xrange.js +40 -0
- package/script/pkg/commands/zdiffstore.js +13 -0
- package/script/pkg/commands/zmscore.js +14 -0
- package/script/pkg/http.js +100 -3
- package/script/pkg/pipeline.js +169 -11
- package/script/pkg/redis.js +219 -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 +27 -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 +31 -2
- 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/xadd.d.ts +31 -0
- package/types/pkg/commands/xrange.d.ts +9 -0
- 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 +48 -7
- package/types/pkg/pipeline.d.ts +255 -125
- package/types/pkg/redis.d.ts +169 -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
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
|
}
|
package/esm/pkg/redis.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, HRandFieldCommand, 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, XAddCommand, XRangeCommand, 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 { Pipeline } from "./pipeline.js";
|
|
3
|
+
import { Script } from "./script.js";
|
|
4
|
+
import { ZMScoreCommand } from "./commands/zmscore.js";
|
|
5
|
+
import { ZDiffStoreCommand } from "./commands/zdiffstore.js";
|
|
3
6
|
/**
|
|
4
7
|
* Serverless redis client for upstash.
|
|
5
8
|
*/
|
|
@@ -28,6 +31,12 @@ export class Redis {
|
|
|
28
31
|
writable: true,
|
|
29
32
|
value: void 0
|
|
30
33
|
});
|
|
34
|
+
Object.defineProperty(this, "enableTelemetry", {
|
|
35
|
+
enumerable: true,
|
|
36
|
+
configurable: true,
|
|
37
|
+
writable: true,
|
|
38
|
+
value: void 0
|
|
39
|
+
});
|
|
31
40
|
/**
|
|
32
41
|
* Wrap a new middleware around the HTTP client.
|
|
33
42
|
*/
|
|
@@ -40,6 +49,27 @@ export class Redis {
|
|
|
40
49
|
this.client.request = (req) => middleware(req, makeRequest);
|
|
41
50
|
}
|
|
42
51
|
});
|
|
52
|
+
/**
|
|
53
|
+
* Technically this is not private, we can hide it from intellisense by doing this
|
|
54
|
+
*/
|
|
55
|
+
Object.defineProperty(this, "addTelemetry", {
|
|
56
|
+
enumerable: true,
|
|
57
|
+
configurable: true,
|
|
58
|
+
writable: true,
|
|
59
|
+
value: (telemetry) => {
|
|
60
|
+
if (!this.enableTelemetry) {
|
|
61
|
+
return;
|
|
62
|
+
}
|
|
63
|
+
try {
|
|
64
|
+
// @ts-ignore - The `Requester` interface does not know about this method but it will be there
|
|
65
|
+
// as long as the user uses the standard HttpClient
|
|
66
|
+
this.client.mergeTelemetry(telemetry);
|
|
67
|
+
}
|
|
68
|
+
catch {
|
|
69
|
+
// ignore
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
});
|
|
43
73
|
/**
|
|
44
74
|
* Create a new pipeline that allows you to send requests in bulk.
|
|
45
75
|
*
|
|
@@ -49,7 +79,30 @@ export class Redis {
|
|
|
49
79
|
enumerable: true,
|
|
50
80
|
configurable: true,
|
|
51
81
|
writable: true,
|
|
52
|
-
value: () => new Pipeline(
|
|
82
|
+
value: () => new Pipeline({
|
|
83
|
+
client: this.client,
|
|
84
|
+
commandOptions: this.opts,
|
|
85
|
+
multiExec: false,
|
|
86
|
+
})
|
|
87
|
+
});
|
|
88
|
+
/**
|
|
89
|
+
* Create a new transaction to allow executing multiple steps atomically.
|
|
90
|
+
*
|
|
91
|
+
* All the commands in a transaction are serialized and executed sequentially. A request sent by
|
|
92
|
+
* another client will never be served in the middle of the execution of a Redis Transaction. This
|
|
93
|
+
* guarantees that the commands are executed as a single isolated operation.
|
|
94
|
+
*
|
|
95
|
+
* @see {@link Pipeline}
|
|
96
|
+
*/
|
|
97
|
+
Object.defineProperty(this, "multi", {
|
|
98
|
+
enumerable: true,
|
|
99
|
+
configurable: true,
|
|
100
|
+
writable: true,
|
|
101
|
+
value: () => new Pipeline({
|
|
102
|
+
client: this.client,
|
|
103
|
+
commandOptions: this.opts,
|
|
104
|
+
multiExec: true,
|
|
105
|
+
})
|
|
53
106
|
});
|
|
54
107
|
/**
|
|
55
108
|
* @see https://redis.io/commands/append
|
|
@@ -213,6 +266,15 @@ export class Redis {
|
|
|
213
266
|
writable: true,
|
|
214
267
|
value: (...args) => new GetBitCommand(args, this.opts).exec(this.client)
|
|
215
268
|
});
|
|
269
|
+
/**
|
|
270
|
+
* @see https://redis.io/commands/getdel
|
|
271
|
+
*/
|
|
272
|
+
Object.defineProperty(this, "getdel", {
|
|
273
|
+
enumerable: true,
|
|
274
|
+
configurable: true,
|
|
275
|
+
writable: true,
|
|
276
|
+
value: (...args) => new GetDelCommand(args, this.opts).exec(this.client)
|
|
277
|
+
});
|
|
216
278
|
/**
|
|
217
279
|
* @see https://redis.io/commands/getrange
|
|
218
280
|
*/
|
|
@@ -321,6 +383,16 @@ export class Redis {
|
|
|
321
383
|
writable: true,
|
|
322
384
|
value: (key, kv) => new HMSetCommand([key, kv], this.opts).exec(this.client)
|
|
323
385
|
});
|
|
386
|
+
/**
|
|
387
|
+
* @see https://redis.io/commands/hrandfield
|
|
388
|
+
*/
|
|
389
|
+
Object.defineProperty(this, "hrandfield", {
|
|
390
|
+
enumerable: true,
|
|
391
|
+
configurable: true,
|
|
392
|
+
writable: true,
|
|
393
|
+
value: (key, count, withValues) => new HRandFieldCommand([key, count, withValues], this.opts)
|
|
394
|
+
.exec(this.client)
|
|
395
|
+
});
|
|
324
396
|
/**
|
|
325
397
|
* @see https://redis.io/commands/hscan
|
|
326
398
|
*/
|
|
@@ -429,6 +501,15 @@ export class Redis {
|
|
|
429
501
|
writable: true,
|
|
430
502
|
value: (...args) => new LLenCommand(args, this.opts).exec(this.client)
|
|
431
503
|
});
|
|
504
|
+
/**
|
|
505
|
+
* @see https://redis.io/commands/lmove
|
|
506
|
+
*/
|
|
507
|
+
Object.defineProperty(this, "lmove", {
|
|
508
|
+
enumerable: true,
|
|
509
|
+
configurable: true,
|
|
510
|
+
writable: true,
|
|
511
|
+
value: (...args) => new LMoveCommand(args, this.opts).exec(this.client)
|
|
512
|
+
});
|
|
432
513
|
/**
|
|
433
514
|
* @see https://redis.io/commands/lpop
|
|
434
515
|
*/
|
|
@@ -789,6 +870,15 @@ export class Redis {
|
|
|
789
870
|
writable: true,
|
|
790
871
|
value: (key, member) => new SIsMemberCommand([key, member], this.opts).exec(this.client)
|
|
791
872
|
});
|
|
873
|
+
/**
|
|
874
|
+
* @see https://redis.io/commands/smismember
|
|
875
|
+
*/
|
|
876
|
+
Object.defineProperty(this, "smismember", {
|
|
877
|
+
enumerable: true,
|
|
878
|
+
configurable: true,
|
|
879
|
+
writable: true,
|
|
880
|
+
value: (key, members) => new SMIsMemberCommand([key, members], this.opts).exec(this.client)
|
|
881
|
+
});
|
|
792
882
|
/**
|
|
793
883
|
* @see https://redis.io/commands/smembers
|
|
794
884
|
*/
|
|
@@ -915,6 +1005,24 @@ export class Redis {
|
|
|
915
1005
|
writable: true,
|
|
916
1006
|
value: (...args) => new UnlinkCommand(args, this.opts).exec(this.client)
|
|
917
1007
|
});
|
|
1008
|
+
/**
|
|
1009
|
+
* @see https://redis.io/commands/xadd
|
|
1010
|
+
*/
|
|
1011
|
+
Object.defineProperty(this, "xadd", {
|
|
1012
|
+
enumerable: true,
|
|
1013
|
+
configurable: true,
|
|
1014
|
+
writable: true,
|
|
1015
|
+
value: (...args) => new XAddCommand(args, this.opts).exec(this.client)
|
|
1016
|
+
});
|
|
1017
|
+
/**
|
|
1018
|
+
* @see https://redis.io/commands/xrange
|
|
1019
|
+
*/
|
|
1020
|
+
Object.defineProperty(this, "xrange", {
|
|
1021
|
+
enumerable: true,
|
|
1022
|
+
configurable: true,
|
|
1023
|
+
writable: true,
|
|
1024
|
+
value: (...args) => new XRangeCommand(args, this.opts).exec(this.client)
|
|
1025
|
+
});
|
|
918
1026
|
/**
|
|
919
1027
|
* @see https://redis.io/commands/zadd
|
|
920
1028
|
*/
|
|
@@ -947,6 +1055,15 @@ export class Redis {
|
|
|
947
1055
|
writable: true,
|
|
948
1056
|
value: (...args) => new ZCountCommand(args, this.opts).exec(this.client)
|
|
949
1057
|
});
|
|
1058
|
+
/**
|
|
1059
|
+
* @see https://redis.io/commands/zdiffstore
|
|
1060
|
+
*/
|
|
1061
|
+
Object.defineProperty(this, "zdiffstore", {
|
|
1062
|
+
enumerable: true,
|
|
1063
|
+
configurable: true,
|
|
1064
|
+
writable: true,
|
|
1065
|
+
value: (...args) => new ZDiffStoreCommand(args, this.opts).exec(this.client)
|
|
1066
|
+
});
|
|
950
1067
|
/**
|
|
951
1068
|
* @see https://redis.io/commands/zincrby
|
|
952
1069
|
*/
|
|
@@ -974,6 +1091,15 @@ export class Redis {
|
|
|
974
1091
|
writable: true,
|
|
975
1092
|
value: (...args) => new ZLexCountCommand(args, this.opts).exec(this.client)
|
|
976
1093
|
});
|
|
1094
|
+
/**
|
|
1095
|
+
* @see https://redis.io/commands/zmscore
|
|
1096
|
+
*/
|
|
1097
|
+
Object.defineProperty(this, "zmscore", {
|
|
1098
|
+
enumerable: true,
|
|
1099
|
+
configurable: true,
|
|
1100
|
+
writable: true,
|
|
1101
|
+
value: (...args) => new ZMScoreCommand(args, this.opts).exec(this.client)
|
|
1102
|
+
});
|
|
977
1103
|
/**
|
|
978
1104
|
* @see https://redis.io/commands/zpopmax
|
|
979
1105
|
*/
|
|
@@ -1084,5 +1210,97 @@ export class Redis {
|
|
|
1084
1210
|
});
|
|
1085
1211
|
this.client = client;
|
|
1086
1212
|
this.opts = opts;
|
|
1213
|
+
this.enableTelemetry = opts?.enableTelemetry ?? true;
|
|
1214
|
+
}
|
|
1215
|
+
get json() {
|
|
1216
|
+
return {
|
|
1217
|
+
/**
|
|
1218
|
+
* @see https://redis.io/commands/json.arrappend
|
|
1219
|
+
*/
|
|
1220
|
+
arrappend: (...args) => new JsonArrAppendCommand(args, this.opts).exec(this.client),
|
|
1221
|
+
/**
|
|
1222
|
+
* @see https://redis.io/commands/json.arrindex
|
|
1223
|
+
*/
|
|
1224
|
+
arrindex: (...args) => new JsonArrIndexCommand(args, this.opts).exec(this.client),
|
|
1225
|
+
/**
|
|
1226
|
+
* @see https://redis.io/commands/json.arrinsert
|
|
1227
|
+
*/
|
|
1228
|
+
arrinsert: (...args) => new JsonArrInsertCommand(args, this.opts).exec(this.client),
|
|
1229
|
+
/**
|
|
1230
|
+
* @see https://redis.io/commands/json.arrlen
|
|
1231
|
+
*/
|
|
1232
|
+
arrlen: (...args) => new JsonArrLenCommand(args, this.opts).exec(this.client),
|
|
1233
|
+
/**
|
|
1234
|
+
* @see https://redis.io/commands/json.arrpop
|
|
1235
|
+
*/
|
|
1236
|
+
arrpop: (...args) => new JsonArrPopCommand(args, this.opts).exec(this.client),
|
|
1237
|
+
/**
|
|
1238
|
+
* @see https://redis.io/commands/json.arrtrim
|
|
1239
|
+
*/
|
|
1240
|
+
arrtrim: (...args) => new JsonArrTrimCommand(args, this.opts).exec(this.client),
|
|
1241
|
+
/**
|
|
1242
|
+
* @see https://redis.io/commands/json.clear
|
|
1243
|
+
*/
|
|
1244
|
+
clear: (...args) => new JsonClearCommand(args, this.opts).exec(this.client),
|
|
1245
|
+
/**
|
|
1246
|
+
* @see https://redis.io/commands/json.del
|
|
1247
|
+
*/
|
|
1248
|
+
del: (...args) => new JsonDelCommand(args, this.opts).exec(this.client),
|
|
1249
|
+
/**
|
|
1250
|
+
* @see https://redis.io/commands/json.forget
|
|
1251
|
+
*/
|
|
1252
|
+
forget: (...args) => new JsonForgetCommand(args, this.opts).exec(this.client),
|
|
1253
|
+
/**
|
|
1254
|
+
* @see https://redis.io/commands/json.get
|
|
1255
|
+
*/
|
|
1256
|
+
get: (...args) => new JsonGetCommand(args, this.opts).exec(this.client),
|
|
1257
|
+
/**
|
|
1258
|
+
* @see https://redis.io/commands/json.mget
|
|
1259
|
+
*/
|
|
1260
|
+
mget: (...args) => new JsonMGetCommand(args, this.opts).exec(this.client),
|
|
1261
|
+
/**
|
|
1262
|
+
* @see https://redis.io/commands/json.numincrby
|
|
1263
|
+
*/
|
|
1264
|
+
numincrby: (...args) => new JsonNumIncrByCommand(args, this.opts).exec(this.client),
|
|
1265
|
+
/**
|
|
1266
|
+
* @see https://redis.io/commands/json.nummultby
|
|
1267
|
+
*/
|
|
1268
|
+
nummultby: (...args) => new JsonNumMultByCommand(args, this.opts).exec(this.client),
|
|
1269
|
+
/**
|
|
1270
|
+
* @see https://redis.io/commands/json.objkeys
|
|
1271
|
+
*/
|
|
1272
|
+
objkeys: (...args) => new JsonObjKeysCommand(args, this.opts).exec(this.client),
|
|
1273
|
+
/**
|
|
1274
|
+
* @see https://redis.io/commands/json.objlen
|
|
1275
|
+
*/
|
|
1276
|
+
objlen: (...args) => new JsonObjLenCommand(args, this.opts).exec(this.client),
|
|
1277
|
+
/**
|
|
1278
|
+
* @see https://redis.io/commands/json.resp
|
|
1279
|
+
*/
|
|
1280
|
+
resp: (...args) => new JsonRespCommand(args, this.opts).exec(this.client),
|
|
1281
|
+
/**
|
|
1282
|
+
* @see https://redis.io/commands/json.set
|
|
1283
|
+
*/
|
|
1284
|
+
set: (...args) => new JsonSetCommand(args, this.opts).exec(this.client),
|
|
1285
|
+
/**
|
|
1286
|
+
* @see https://redis.io/commands/json.strappend
|
|
1287
|
+
*/
|
|
1288
|
+
strappend: (...args) => new JsonStrAppendCommand(args, this.opts).exec(this.client),
|
|
1289
|
+
/**
|
|
1290
|
+
* @see https://redis.io/commands/json.strlen
|
|
1291
|
+
*/
|
|
1292
|
+
strlen: (...args) => new JsonStrLenCommand(args, this.opts).exec(this.client),
|
|
1293
|
+
/**
|
|
1294
|
+
* @see https://redis.io/commands/json.toggle
|
|
1295
|
+
*/
|
|
1296
|
+
toggle: (...args) => new JsonToggleCommand(args, this.opts).exec(this.client),
|
|
1297
|
+
/**
|
|
1298
|
+
* @see https://redis.io/commands/json.type
|
|
1299
|
+
*/
|
|
1300
|
+
type: (...args) => new JsonTypeCommand(args, this.opts).exec(this.client),
|
|
1301
|
+
};
|
|
1302
|
+
}
|
|
1303
|
+
createScript(script) {
|
|
1304
|
+
return new Script(this, script);
|
|
1087
1305
|
}
|
|
1088
1306
|
}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import { sha1 as digest } from "../deps/deno.land/x/sha1@v1.0.3/mod.js";
|
|
2
|
+
/**
|
|
3
|
+
* Creates a new script.
|
|
4
|
+
*
|
|
5
|
+
* Scripts offer the ability to optimistically try to execute a script without having to send the
|
|
6
|
+
* entire script to the server. If the script is loaded on the server, it tries again by sending
|
|
7
|
+
* the entire script. Afterwards, the script is cached on the server.
|
|
8
|
+
*
|
|
9
|
+
* @example
|
|
10
|
+
* ```ts
|
|
11
|
+
* const redis = new Redis({...})
|
|
12
|
+
*
|
|
13
|
+
* const script = redis.createScript<string>("return ARGV[1];")
|
|
14
|
+
* const arg1 = await script.eval([], ["Hello World"])
|
|
15
|
+
* assertEquals(arg1, "Hello World")
|
|
16
|
+
* ```
|
|
17
|
+
*/
|
|
18
|
+
export class Script {
|
|
19
|
+
constructor(redis, script) {
|
|
20
|
+
Object.defineProperty(this, "script", {
|
|
21
|
+
enumerable: true,
|
|
22
|
+
configurable: true,
|
|
23
|
+
writable: true,
|
|
24
|
+
value: void 0
|
|
25
|
+
});
|
|
26
|
+
Object.defineProperty(this, "sha1", {
|
|
27
|
+
enumerable: true,
|
|
28
|
+
configurable: true,
|
|
29
|
+
writable: true,
|
|
30
|
+
value: void 0
|
|
31
|
+
});
|
|
32
|
+
Object.defineProperty(this, "redis", {
|
|
33
|
+
enumerable: true,
|
|
34
|
+
configurable: true,
|
|
35
|
+
writable: true,
|
|
36
|
+
value: void 0
|
|
37
|
+
});
|
|
38
|
+
this.redis = redis;
|
|
39
|
+
this.sha1 = this.digest(script);
|
|
40
|
+
this.script = script;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Send an `EVAL` command to redis.
|
|
44
|
+
*/
|
|
45
|
+
async eval(keys, args) {
|
|
46
|
+
return await this.redis.eval(this.script, keys, args);
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Calculates the sha1 hash of the script and then calls `EVALSHA`.
|
|
50
|
+
*/
|
|
51
|
+
async evalsha(keys, args) {
|
|
52
|
+
return await this.redis.evalsha(this.sha1, keys, args);
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Optimistically try to run `EVALSHA` first.
|
|
56
|
+
* If the script is not loaded in redis, it will fall back and try again with `EVAL`.
|
|
57
|
+
*
|
|
58
|
+
* Following calls will be able to use the cached script
|
|
59
|
+
*/
|
|
60
|
+
async exec(keys, args) {
|
|
61
|
+
const res = await this.redis.evalsha(this.sha1, keys, args).catch(async (err) => {
|
|
62
|
+
if (err instanceof Error &&
|
|
63
|
+
err.message.toLowerCase().includes("noscript")) {
|
|
64
|
+
return await this.redis.eval(this.script, keys, args);
|
|
65
|
+
}
|
|
66
|
+
throw err;
|
|
67
|
+
});
|
|
68
|
+
return res;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Compute the sha1 hash of the script and return its hex representation.
|
|
72
|
+
*/
|
|
73
|
+
digest(s) {
|
|
74
|
+
const hash = digest(s, "utf8", "hex");
|
|
75
|
+
return typeof hash === "string" ? hash : new TextDecoder().decode(hash);
|
|
76
|
+
}
|
|
77
|
+
}
|