@upstash/redis 0.0.0-ci.ce266dce → 0.0.0-ci.cfa9c86e-20230504
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/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 +92 -2
- 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 +10 -2
- package/esm/platforms/fastly.js +6 -0
- package/esm/platforms/node_with_fetch.js +26 -1
- package/esm/platforms/nodejs.js +24 -1
- package/esm/version.js +1 -0
- package/package.json +41 -54
- package/script/deps/deno.land/x/base64@v0.2.1/base.js +104 -0
- package/script/deps/deno.land/x/base64@v0.2.1/base64url.js +13 -0
- package/script/deps/deno.land/x/sha1@v1.0.3/deps.js +6 -0
- package/script/deps/deno.land/x/sha1@v1.0.3/mod.js +196 -0
- package/script/deps/denopkg.com/chiefbiiko/std-encoding@v1.0.0/mod.js +55 -0
- package/script/pkg/commands/command.js +12 -3
- package/script/pkg/commands/getdel.js +13 -0
- package/script/pkg/commands/hgetall.js +0 -4
- package/script/pkg/commands/hrandfield.js +43 -0
- package/script/pkg/commands/json_arrappend.js +13 -0
- package/script/pkg/commands/json_arrindex.js +13 -0
- package/script/pkg/commands/json_arrinsert.js +13 -0
- package/script/pkg/commands/json_arrlen.js +13 -0
- package/script/pkg/commands/json_arrpop.js +13 -0
- package/script/pkg/commands/json_arrtrim.js +16 -0
- package/script/pkg/commands/json_clear.js +13 -0
- package/script/pkg/commands/json_del.js +13 -0
- package/script/pkg/commands/json_forget.js +13 -0
- package/script/pkg/commands/json_get.js +34 -0
- package/script/pkg/commands/json_mget.js +13 -0
- package/script/pkg/commands/json_numincrby.js +13 -0
- package/script/pkg/commands/json_nummultby.js +13 -0
- package/script/pkg/commands/json_objkeys.js +13 -0
- package/script/pkg/commands/json_objlen.js +13 -0
- package/script/pkg/commands/json_resp.js +13 -0
- package/script/pkg/commands/json_set.js +22 -0
- package/script/pkg/commands/json_strappend.js +13 -0
- package/script/pkg/commands/json_strlen.js +13 -0
- package/script/pkg/commands/json_toggle.js +13 -0
- package/script/pkg/commands/json_type.js +13 -0
- package/script/pkg/commands/lmove.js +13 -0
- package/script/pkg/commands/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 +92 -2
- 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 +10 -2
- package/script/platforms/fastly.js +6 -0
- package/script/platforms/node_with_fetch.js +26 -1
- package/script/platforms/nodejs.js +24 -1
- package/script/version.js +4 -0
- package/types/deps/deno.land/x/base64@v0.2.1/base.d.ts +5 -0
- package/types/deps/deno.land/x/base64@v0.2.1/base64url.d.ts +1 -0
- package/types/deps/deno.land/x/sha1@v1.0.3/deps.d.ts +1 -0
- package/types/deps/deno.land/x/sha1@v1.0.3/mod.d.ts +26 -0
- package/types/deps/denopkg.com/chiefbiiko/std-encoding@v1.0.0/mod.d.ts +3 -0
- package/types/pkg/commands/bitop.d.ts +0 -1
- package/types/pkg/commands/bitpos.d.ts +1 -1
- package/types/pkg/commands/command.d.ts +5 -5
- package/types/pkg/commands/getdel.d.ts +7 -0
- package/types/pkg/commands/hdel.d.ts +1 -1
- package/types/pkg/commands/hrandfield.d.ts +9 -0
- package/types/pkg/commands/json_arrappend.d.ts +7 -0
- package/types/pkg/commands/json_arrindex.d.ts +13 -0
- package/types/pkg/commands/json_arrinsert.d.ts +7 -0
- package/types/pkg/commands/json_arrlen.d.ts +7 -0
- package/types/pkg/commands/json_arrpop.d.ts +7 -0
- package/types/pkg/commands/json_arrtrim.d.ts +7 -0
- package/types/pkg/commands/json_clear.d.ts +7 -0
- package/types/pkg/commands/json_del.d.ts +7 -0
- package/types/pkg/commands/json_forget.d.ts +7 -0
- package/types/pkg/commands/json_get.d.ts +15 -0
- package/types/pkg/commands/json_mget.d.ts +7 -0
- package/types/pkg/commands/json_numincrby.d.ts +7 -0
- package/types/pkg/commands/json_nummultby.d.ts +7 -0
- package/types/pkg/commands/json_objkeys.d.ts +7 -0
- package/types/pkg/commands/json_objlen.d.ts +7 -0
- package/types/pkg/commands/json_resp.d.ts +7 -0
- package/types/pkg/commands/json_set.d.ts +18 -0
- package/types/pkg/commands/json_strappend.d.ts +7 -0
- package/types/pkg/commands/json_strlen.d.ts +7 -0
- package/types/pkg/commands/json_toggle.d.ts +7 -0
- package/types/pkg/commands/json_type.d.ts +7 -0
- package/types/pkg/commands/lmove.d.ts +12 -0
- package/types/pkg/commands/lpop.d.ts +1 -1
- package/types/pkg/commands/lpos.d.ts +15 -0
- package/types/pkg/commands/mget.d.ts +1 -1
- package/types/pkg/commands/mod.d.ts +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 +44 -7
- package/types/pkg/pipeline.d.ts +73 -10
- package/types/pkg/redis.d.ts +161 -18
- 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, 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
|
}
|
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, 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, 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,45 @@ 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
|
+
});
|
|
40
|
+
/**
|
|
41
|
+
* Wrap a new middleware around the HTTP client.
|
|
42
|
+
*/
|
|
43
|
+
Object.defineProperty(this, "use", {
|
|
44
|
+
enumerable: true,
|
|
45
|
+
configurable: true,
|
|
46
|
+
writable: true,
|
|
47
|
+
value: (middleware) => {
|
|
48
|
+
const makeRequest = this.client.request.bind(this.client);
|
|
49
|
+
this.client.request = (req) => middleware(req, makeRequest);
|
|
50
|
+
}
|
|
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
|
+
});
|
|
31
73
|
/**
|
|
32
74
|
* Create a new pipeline that allows you to send requests in bulk.
|
|
33
75
|
*
|
|
@@ -37,7 +79,30 @@ export class Redis {
|
|
|
37
79
|
enumerable: true,
|
|
38
80
|
configurable: true,
|
|
39
81
|
writable: true,
|
|
40
|
-
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
|
+
})
|
|
41
106
|
});
|
|
42
107
|
/**
|
|
43
108
|
* @see https://redis.io/commands/append
|
|
@@ -201,6 +266,15 @@ export class Redis {
|
|
|
201
266
|
writable: true,
|
|
202
267
|
value: (...args) => new GetBitCommand(args, this.opts).exec(this.client)
|
|
203
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
|
+
});
|
|
204
278
|
/**
|
|
205
279
|
* @see https://redis.io/commands/getrange
|
|
206
280
|
*/
|
|
@@ -309,6 +383,16 @@ export class Redis {
|
|
|
309
383
|
writable: true,
|
|
310
384
|
value: (key, kv) => new HMSetCommand([key, kv], this.opts).exec(this.client)
|
|
311
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
|
+
});
|
|
312
396
|
/**
|
|
313
397
|
* @see https://redis.io/commands/hscan
|
|
314
398
|
*/
|
|
@@ -417,6 +501,15 @@ export class Redis {
|
|
|
417
501
|
writable: true,
|
|
418
502
|
value: (...args) => new LLenCommand(args, this.opts).exec(this.client)
|
|
419
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
|
+
});
|
|
420
513
|
/**
|
|
421
514
|
* @see https://redis.io/commands/lpop
|
|
422
515
|
*/
|
|
@@ -426,6 +519,15 @@ export class Redis {
|
|
|
426
519
|
writable: true,
|
|
427
520
|
value: (...args) => new LPopCommand(args, this.opts).exec(this.client)
|
|
428
521
|
});
|
|
522
|
+
/**
|
|
523
|
+
* @see https://redis.io/commands/lpos
|
|
524
|
+
*/
|
|
525
|
+
Object.defineProperty(this, "lpos", {
|
|
526
|
+
enumerable: true,
|
|
527
|
+
configurable: true,
|
|
528
|
+
writable: true,
|
|
529
|
+
value: (...args) => new LPosCommand(args, this.opts).exec(this.client)
|
|
530
|
+
});
|
|
429
531
|
/**
|
|
430
532
|
* @see https://redis.io/commands/lpush
|
|
431
533
|
*/
|
|
@@ -768,6 +870,15 @@ export class Redis {
|
|
|
768
870
|
writable: true,
|
|
769
871
|
value: (key, member) => new SIsMemberCommand([key, member], this.opts).exec(this.client)
|
|
770
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
|
+
});
|
|
771
882
|
/**
|
|
772
883
|
* @see https://redis.io/commands/smembers
|
|
773
884
|
*/
|
|
@@ -926,6 +1037,15 @@ export class Redis {
|
|
|
926
1037
|
writable: true,
|
|
927
1038
|
value: (...args) => new ZCountCommand(args, this.opts).exec(this.client)
|
|
928
1039
|
});
|
|
1040
|
+
/**
|
|
1041
|
+
* @see https://redis.io/commands/zdiffstore
|
|
1042
|
+
*/
|
|
1043
|
+
Object.defineProperty(this, "zdiffstore", {
|
|
1044
|
+
enumerable: true,
|
|
1045
|
+
configurable: true,
|
|
1046
|
+
writable: true,
|
|
1047
|
+
value: (...args) => new ZDiffStoreCommand(args, this.opts).exec(this.client)
|
|
1048
|
+
});
|
|
929
1049
|
/**
|
|
930
1050
|
* @see https://redis.io/commands/zincrby
|
|
931
1051
|
*/
|
|
@@ -953,6 +1073,15 @@ export class Redis {
|
|
|
953
1073
|
writable: true,
|
|
954
1074
|
value: (...args) => new ZLexCountCommand(args, this.opts).exec(this.client)
|
|
955
1075
|
});
|
|
1076
|
+
/**
|
|
1077
|
+
* @see https://redis.io/commands/zmscore
|
|
1078
|
+
*/
|
|
1079
|
+
Object.defineProperty(this, "zmscore", {
|
|
1080
|
+
enumerable: true,
|
|
1081
|
+
configurable: true,
|
|
1082
|
+
writable: true,
|
|
1083
|
+
value: (...args) => new ZMScoreCommand(args, this.opts).exec(this.client)
|
|
1084
|
+
});
|
|
956
1085
|
/**
|
|
957
1086
|
* @see https://redis.io/commands/zpopmax
|
|
958
1087
|
*/
|
|
@@ -1063,5 +1192,97 @@ export class Redis {
|
|
|
1063
1192
|
});
|
|
1064
1193
|
this.client = client;
|
|
1065
1194
|
this.opts = opts;
|
|
1195
|
+
this.enableTelemetry = opts?.enableTelemetry ?? true;
|
|
1196
|
+
}
|
|
1197
|
+
get json() {
|
|
1198
|
+
return {
|
|
1199
|
+
/**
|
|
1200
|
+
* @see https://redis.io/commands/json.arrappend
|
|
1201
|
+
*/
|
|
1202
|
+
arrappend: (...args) => new JsonArrAppendCommand(args, this.opts).exec(this.client),
|
|
1203
|
+
/**
|
|
1204
|
+
* @see https://redis.io/commands/json.arrindex
|
|
1205
|
+
*/
|
|
1206
|
+
arrindex: (...args) => new JsonArrIndexCommand(args, this.opts).exec(this.client),
|
|
1207
|
+
/**
|
|
1208
|
+
* @see https://redis.io/commands/json.arrinsert
|
|
1209
|
+
*/
|
|
1210
|
+
arrinsert: (...args) => new JsonArrInsertCommand(args, this.opts).exec(this.client),
|
|
1211
|
+
/**
|
|
1212
|
+
* @see https://redis.io/commands/json.arrlen
|
|
1213
|
+
*/
|
|
1214
|
+
arrlen: (...args) => new JsonArrLenCommand(args, this.opts).exec(this.client),
|
|
1215
|
+
/**
|
|
1216
|
+
* @see https://redis.io/commands/json.arrpop
|
|
1217
|
+
*/
|
|
1218
|
+
arrpop: (...args) => new JsonArrPopCommand(args, this.opts).exec(this.client),
|
|
1219
|
+
/**
|
|
1220
|
+
* @see https://redis.io/commands/json.arrtrim
|
|
1221
|
+
*/
|
|
1222
|
+
arrtrim: (...args) => new JsonArrTrimCommand(args, this.opts).exec(this.client),
|
|
1223
|
+
/**
|
|
1224
|
+
* @see https://redis.io/commands/json.clear
|
|
1225
|
+
*/
|
|
1226
|
+
clear: (...args) => new JsonClearCommand(args, this.opts).exec(this.client),
|
|
1227
|
+
/**
|
|
1228
|
+
* @see https://redis.io/commands/json.del
|
|
1229
|
+
*/
|
|
1230
|
+
del: (...args) => new JsonDelCommand(args, this.opts).exec(this.client),
|
|
1231
|
+
/**
|
|
1232
|
+
* @see https://redis.io/commands/json.forget
|
|
1233
|
+
*/
|
|
1234
|
+
forget: (...args) => new JsonForgetCommand(args, this.opts).exec(this.client),
|
|
1235
|
+
/**
|
|
1236
|
+
* @see https://redis.io/commands/json.get
|
|
1237
|
+
*/
|
|
1238
|
+
get: (...args) => new JsonGetCommand(args, this.opts).exec(this.client),
|
|
1239
|
+
/**
|
|
1240
|
+
* @see https://redis.io/commands/json.mget
|
|
1241
|
+
*/
|
|
1242
|
+
mget: (...args) => new JsonMGetCommand(args, this.opts).exec(this.client),
|
|
1243
|
+
/**
|
|
1244
|
+
* @see https://redis.io/commands/json.numincrby
|
|
1245
|
+
*/
|
|
1246
|
+
numincrby: (...args) => new JsonNumIncrByCommand(args, this.opts).exec(this.client),
|
|
1247
|
+
/**
|
|
1248
|
+
* @see https://redis.io/commands/json.nummultby
|
|
1249
|
+
*/
|
|
1250
|
+
nummultby: (...args) => new JsonNumMultByCommand(args, this.opts).exec(this.client),
|
|
1251
|
+
/**
|
|
1252
|
+
* @see https://redis.io/commands/json.objkeys
|
|
1253
|
+
*/
|
|
1254
|
+
objkeys: (...args) => new JsonObjKeysCommand(args, this.opts).exec(this.client),
|
|
1255
|
+
/**
|
|
1256
|
+
* @see https://redis.io/commands/json.objlen
|
|
1257
|
+
*/
|
|
1258
|
+
objlen: (...args) => new JsonObjLenCommand(args, this.opts).exec(this.client),
|
|
1259
|
+
/**
|
|
1260
|
+
* @see https://redis.io/commands/json.resp
|
|
1261
|
+
*/
|
|
1262
|
+
resp: (...args) => new JsonRespCommand(args, this.opts).exec(this.client),
|
|
1263
|
+
/**
|
|
1264
|
+
* @see https://redis.io/commands/json.set
|
|
1265
|
+
*/
|
|
1266
|
+
set: (...args) => new JsonSetCommand(args, this.opts).exec(this.client),
|
|
1267
|
+
/**
|
|
1268
|
+
* @see https://redis.io/commands/json.strappend
|
|
1269
|
+
*/
|
|
1270
|
+
strappend: (...args) => new JsonStrAppendCommand(args, this.opts).exec(this.client),
|
|
1271
|
+
/**
|
|
1272
|
+
* @see https://redis.io/commands/json.strlen
|
|
1273
|
+
*/
|
|
1274
|
+
strlen: (...args) => new JsonStrLenCommand(args, this.opts).exec(this.client),
|
|
1275
|
+
/**
|
|
1276
|
+
* @see https://redis.io/commands/json.toggle
|
|
1277
|
+
*/
|
|
1278
|
+
toggle: (...args) => new JsonToggleCommand(args, this.opts).exec(this.client),
|
|
1279
|
+
/**
|
|
1280
|
+
* @see https://redis.io/commands/json.type
|
|
1281
|
+
*/
|
|
1282
|
+
type: (...args) => new JsonTypeCommand(args, this.opts).exec(this.client),
|
|
1283
|
+
};
|
|
1284
|
+
}
|
|
1285
|
+
createScript(script) {
|
|
1286
|
+
return new Script(this, script);
|
|
1066
1287
|
}
|
|
1067
1288
|
}
|
|
@@ -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
|
+
}
|