@upstash/redis 0.0.0-ci.d9ac9623 → 0.0.0-ci.dc584c15-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 +37 -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 +171 -12
- package/esm/pkg/redis.js +219 -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 +41 -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 +170 -11
- package/script/pkg/redis.js +218 -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,10 +87,12 @@ 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
|
}));
|
|
95
|
+
console.log("after req", { res });
|
|
83
96
|
return res.map(({ error, result }, i) => {
|
|
84
97
|
if (error) {
|
|
85
98
|
throw new UpstashError(`Command ${i + 1} [ ${this.commands[i].command[0]} ] failed: ${error}`);
|
|
@@ -124,6 +137,15 @@ export class Pipeline {
|
|
|
124
137
|
writable: true,
|
|
125
138
|
value: (...args) => this.chain(new BitPosCommand(args, this.commandOptions))
|
|
126
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 ZDiffStoreCommand(args, this.commandOptions))
|
|
148
|
+
});
|
|
127
149
|
/**
|
|
128
150
|
* @see https://redis.io/commands/dbsize
|
|
129
151
|
*/
|
|
@@ -250,6 +272,15 @@ export class Pipeline {
|
|
|
250
272
|
writable: true,
|
|
251
273
|
value: (...args) => this.chain(new GetBitCommand(args, this.commandOptions))
|
|
252
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 GetDelCommand(args, this.commandOptions))
|
|
283
|
+
});
|
|
253
284
|
/**
|
|
254
285
|
* @see https://redis.io/commands/getrange
|
|
255
286
|
*/
|
|
@@ -358,6 +389,15 @@ export class Pipeline {
|
|
|
358
389
|
writable: true,
|
|
359
390
|
value: (key, kv) => this.chain(new HMSetCommand([key, kv], this.commandOptions))
|
|
360
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 HRandFieldCommand([key, count, withValues], this.commandOptions))
|
|
400
|
+
});
|
|
361
401
|
/**
|
|
362
402
|
* @see https://redis.io/commands/hscan
|
|
363
403
|
*/
|
|
@@ -466,6 +506,15 @@ export class Pipeline {
|
|
|
466
506
|
writable: true,
|
|
467
507
|
value: (...args) => this.chain(new LLenCommand(args, this.commandOptions))
|
|
468
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 LMoveCommand(args, this.commandOptions))
|
|
517
|
+
});
|
|
469
518
|
/**
|
|
470
519
|
* @see https://redis.io/commands/lpop
|
|
471
520
|
*/
|
|
@@ -835,6 +884,15 @@ export class Pipeline {
|
|
|
835
884
|
writable: true,
|
|
836
885
|
value: (...args) => this.chain(new SMembersCommand(args, this.commandOptions))
|
|
837
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 SMIsMemberCommand([key, members], this.commandOptions))
|
|
895
|
+
});
|
|
838
896
|
/**
|
|
839
897
|
* @see https://redis.io/commands/smove
|
|
840
898
|
*/
|
|
@@ -1011,6 +1069,15 @@ export class Pipeline {
|
|
|
1011
1069
|
writable: true,
|
|
1012
1070
|
value: (...args) => this.chain(new ZLexCountCommand(args, this.commandOptions))
|
|
1013
1071
|
});
|
|
1072
|
+
/**
|
|
1073
|
+
* @see https://redis.io/commands/zmscore
|
|
1074
|
+
*/
|
|
1075
|
+
Object.defineProperty(this, "zmscore", {
|
|
1076
|
+
enumerable: true,
|
|
1077
|
+
configurable: true,
|
|
1078
|
+
writable: true,
|
|
1079
|
+
value: (...args) => this.chain(new ZMScoreCommand(args, this.commandOptions))
|
|
1080
|
+
});
|
|
1014
1081
|
/**
|
|
1015
1082
|
* @see https://redis.io/commands/zpopmax
|
|
1016
1083
|
*/
|
|
@@ -1119,16 +1186,108 @@ export class Pipeline {
|
|
|
1119
1186
|
writable: true,
|
|
1120
1187
|
value: (...args) => this.chain(new ZUnionStoreCommand(args, this.commandOptions))
|
|
1121
1188
|
});
|
|
1122
|
-
this.client = client;
|
|
1123
|
-
this.commands = [];
|
|
1124
|
-
this.commandOptions = commandOptions;
|
|
1189
|
+
this.client = opts.client;
|
|
1190
|
+
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
|
|
1191
|
+
this.commandOptions = opts.commandOptions;
|
|
1192
|
+
this.multiExec = opts.multiExec ?? false;
|
|
1125
1193
|
}
|
|
1126
1194
|
/**
|
|
1127
|
-
* Pushes a command into the
|
|
1195
|
+
* Pushes a command into the pipeline and returns a chainable instance of the
|
|
1128
1196
|
* pipeline
|
|
1129
1197
|
*/
|
|
1130
1198
|
chain(command) {
|
|
1131
1199
|
this.commands.push(command);
|
|
1132
|
-
return this;
|
|
1200
|
+
return this; // TS thinks we're returning Pipeline<[]> here, because we're not creating a new instance of the class, hence the cast
|
|
1201
|
+
}
|
|
1202
|
+
/**
|
|
1203
|
+
* @see https://redis.io/commands/?group=json
|
|
1204
|
+
*/
|
|
1205
|
+
get json() {
|
|
1206
|
+
return {
|
|
1207
|
+
/**
|
|
1208
|
+
* @see https://redis.io/commands/json.arrappend
|
|
1209
|
+
*/
|
|
1210
|
+
arrappend: (...args) => this.chain(new JsonArrAppendCommand(args, this.commandOptions)),
|
|
1211
|
+
/**
|
|
1212
|
+
* @see https://redis.io/commands/json.arrindex
|
|
1213
|
+
*/
|
|
1214
|
+
arrindex: (...args) => this.chain(new JsonArrIndexCommand(args, this.commandOptions)),
|
|
1215
|
+
/**
|
|
1216
|
+
* @see https://redis.io/commands/json.arrinsert
|
|
1217
|
+
*/
|
|
1218
|
+
arrinsert: (...args) => this.chain(new JsonArrInsertCommand(args, this.commandOptions)),
|
|
1219
|
+
/**
|
|
1220
|
+
* @see https://redis.io/commands/json.arrlen
|
|
1221
|
+
*/
|
|
1222
|
+
arrlen: (...args) => this.chain(new JsonArrLenCommand(args, this.commandOptions)),
|
|
1223
|
+
/**
|
|
1224
|
+
* @see https://redis.io/commands/json.arrpop
|
|
1225
|
+
*/
|
|
1226
|
+
arrpop: (...args) => this.chain(new JsonArrPopCommand(args, this.commandOptions)),
|
|
1227
|
+
/**
|
|
1228
|
+
* @see https://redis.io/commands/json.arrtrim
|
|
1229
|
+
*/
|
|
1230
|
+
arrtrim: (...args) => this.chain(new JsonArrTrimCommand(args, this.commandOptions)),
|
|
1231
|
+
/**
|
|
1232
|
+
* @see https://redis.io/commands/json.clear
|
|
1233
|
+
*/
|
|
1234
|
+
clear: (...args) => this.chain(new JsonClearCommand(args, this.commandOptions)),
|
|
1235
|
+
/**
|
|
1236
|
+
* @see https://redis.io/commands/json.del
|
|
1237
|
+
*/
|
|
1238
|
+
del: (...args) => this.chain(new JsonDelCommand(args, this.commandOptions)),
|
|
1239
|
+
/**
|
|
1240
|
+
* @see https://redis.io/commands/json.forget
|
|
1241
|
+
*/
|
|
1242
|
+
forget: (...args) => this.chain(new JsonForgetCommand(args, this.commandOptions)),
|
|
1243
|
+
/**
|
|
1244
|
+
* @see https://redis.io/commands/json.get
|
|
1245
|
+
*/
|
|
1246
|
+
get: (...args) => this.chain(new JsonGetCommand(args, this.commandOptions)),
|
|
1247
|
+
/**
|
|
1248
|
+
* @see https://redis.io/commands/json.mget
|
|
1249
|
+
*/
|
|
1250
|
+
mget: (...args) => this.chain(new JsonMGetCommand(args, this.commandOptions)),
|
|
1251
|
+
/**
|
|
1252
|
+
* @see https://redis.io/commands/json.numincrby
|
|
1253
|
+
*/
|
|
1254
|
+
numincrby: (...args) => this.chain(new JsonNumIncrByCommand(args, this.commandOptions)),
|
|
1255
|
+
/**
|
|
1256
|
+
* @see https://redis.io/commands/json.nummultby
|
|
1257
|
+
*/
|
|
1258
|
+
nummultby: (...args) => this.chain(new JsonNumMultByCommand(args, this.commandOptions)),
|
|
1259
|
+
/**
|
|
1260
|
+
* @see https://redis.io/commands/json.objkeys
|
|
1261
|
+
*/
|
|
1262
|
+
objkeys: (...args) => this.chain(new JsonObjKeysCommand(args, this.commandOptions)),
|
|
1263
|
+
/**
|
|
1264
|
+
* @see https://redis.io/commands/json.objlen
|
|
1265
|
+
*/
|
|
1266
|
+
objlen: (...args) => this.chain(new JsonObjLenCommand(args, this.commandOptions)),
|
|
1267
|
+
/**
|
|
1268
|
+
* @see https://redis.io/commands/json.resp
|
|
1269
|
+
*/
|
|
1270
|
+
resp: (...args) => this.chain(new JsonRespCommand(args, this.commandOptions)),
|
|
1271
|
+
/**
|
|
1272
|
+
* @see https://redis.io/commands/json.set
|
|
1273
|
+
*/
|
|
1274
|
+
set: (...args) => this.chain(new JsonSetCommand(args, this.commandOptions)),
|
|
1275
|
+
/**
|
|
1276
|
+
* @see https://redis.io/commands/json.strappend
|
|
1277
|
+
*/
|
|
1278
|
+
strappend: (...args) => this.chain(new JsonStrAppendCommand(args, this.commandOptions)),
|
|
1279
|
+
/**
|
|
1280
|
+
* @see https://redis.io/commands/json.strlen
|
|
1281
|
+
*/
|
|
1282
|
+
strlen: (...args) => this.chain(new JsonStrLenCommand(args, this.commandOptions)),
|
|
1283
|
+
/**
|
|
1284
|
+
* @see https://redis.io/commands/json.toggle
|
|
1285
|
+
*/
|
|
1286
|
+
toggle: (...args) => this.chain(new JsonToggleCommand(args, this.commandOptions)),
|
|
1287
|
+
/**
|
|
1288
|
+
* @see https://redis.io/commands/json.type
|
|
1289
|
+
*/
|
|
1290
|
+
type: (...args) => this.chain(new JsonTypeCommand(args, this.commandOptions)),
|
|
1291
|
+
};
|
|
1133
1292
|
}
|
|
1134
1293
|
}
|
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,15 @@ 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).exec(this.client)
|
|
394
|
+
});
|
|
324
395
|
/**
|
|
325
396
|
* @see https://redis.io/commands/hscan
|
|
326
397
|
*/
|
|
@@ -429,6 +500,15 @@ export class Redis {
|
|
|
429
500
|
writable: true,
|
|
430
501
|
value: (...args) => new LLenCommand(args, this.opts).exec(this.client)
|
|
431
502
|
});
|
|
503
|
+
/**
|
|
504
|
+
* @see https://redis.io/commands/lmove
|
|
505
|
+
*/
|
|
506
|
+
Object.defineProperty(this, "lmove", {
|
|
507
|
+
enumerable: true,
|
|
508
|
+
configurable: true,
|
|
509
|
+
writable: true,
|
|
510
|
+
value: (...args) => new LMoveCommand(args, this.opts).exec(this.client)
|
|
511
|
+
});
|
|
432
512
|
/**
|
|
433
513
|
* @see https://redis.io/commands/lpop
|
|
434
514
|
*/
|
|
@@ -789,6 +869,15 @@ export class Redis {
|
|
|
789
869
|
writable: true,
|
|
790
870
|
value: (key, member) => new SIsMemberCommand([key, member], this.opts).exec(this.client)
|
|
791
871
|
});
|
|
872
|
+
/**
|
|
873
|
+
* @see https://redis.io/commands/smismember
|
|
874
|
+
*/
|
|
875
|
+
Object.defineProperty(this, "smismember", {
|
|
876
|
+
enumerable: true,
|
|
877
|
+
configurable: true,
|
|
878
|
+
writable: true,
|
|
879
|
+
value: (key, members) => new SMIsMemberCommand([key, members], this.opts).exec(this.client)
|
|
880
|
+
});
|
|
792
881
|
/**
|
|
793
882
|
* @see https://redis.io/commands/smembers
|
|
794
883
|
*/
|
|
@@ -915,6 +1004,24 @@ export class Redis {
|
|
|
915
1004
|
writable: true,
|
|
916
1005
|
value: (...args) => new UnlinkCommand(args, this.opts).exec(this.client)
|
|
917
1006
|
});
|
|
1007
|
+
/**
|
|
1008
|
+
* @see https://redis.io/commands/xadd
|
|
1009
|
+
*/
|
|
1010
|
+
Object.defineProperty(this, "xadd", {
|
|
1011
|
+
enumerable: true,
|
|
1012
|
+
configurable: true,
|
|
1013
|
+
writable: true,
|
|
1014
|
+
value: (...args) => new XAddCommand(args, this.opts).exec(this.client)
|
|
1015
|
+
});
|
|
1016
|
+
/**
|
|
1017
|
+
* @see https://redis.io/commands/xrange
|
|
1018
|
+
*/
|
|
1019
|
+
Object.defineProperty(this, "xrange", {
|
|
1020
|
+
enumerable: true,
|
|
1021
|
+
configurable: true,
|
|
1022
|
+
writable: true,
|
|
1023
|
+
value: (...args) => new XRangeCommand(args, this.opts).exec(this.client)
|
|
1024
|
+
});
|
|
918
1025
|
/**
|
|
919
1026
|
* @see https://redis.io/commands/zadd
|
|
920
1027
|
*/
|
|
@@ -947,6 +1054,15 @@ export class Redis {
|
|
|
947
1054
|
writable: true,
|
|
948
1055
|
value: (...args) => new ZCountCommand(args, this.opts).exec(this.client)
|
|
949
1056
|
});
|
|
1057
|
+
/**
|
|
1058
|
+
* @see https://redis.io/commands/zdiffstore
|
|
1059
|
+
*/
|
|
1060
|
+
Object.defineProperty(this, "zdiffstore", {
|
|
1061
|
+
enumerable: true,
|
|
1062
|
+
configurable: true,
|
|
1063
|
+
writable: true,
|
|
1064
|
+
value: (...args) => new ZDiffStoreCommand(args, this.opts).exec(this.client)
|
|
1065
|
+
});
|
|
950
1066
|
/**
|
|
951
1067
|
* @see https://redis.io/commands/zincrby
|
|
952
1068
|
*/
|
|
@@ -974,6 +1090,15 @@ export class Redis {
|
|
|
974
1090
|
writable: true,
|
|
975
1091
|
value: (...args) => new ZLexCountCommand(args, this.opts).exec(this.client)
|
|
976
1092
|
});
|
|
1093
|
+
/**
|
|
1094
|
+
* @see https://redis.io/commands/zmscore
|
|
1095
|
+
*/
|
|
1096
|
+
Object.defineProperty(this, "zmscore", {
|
|
1097
|
+
enumerable: true,
|
|
1098
|
+
configurable: true,
|
|
1099
|
+
writable: true,
|
|
1100
|
+
value: (...args) => new ZMScoreCommand(args, this.opts).exec(this.client)
|
|
1101
|
+
});
|
|
977
1102
|
/**
|
|
978
1103
|
* @see https://redis.io/commands/zpopmax
|
|
979
1104
|
*/
|
|
@@ -1084,5 +1209,97 @@ export class Redis {
|
|
|
1084
1209
|
});
|
|
1085
1210
|
this.client = client;
|
|
1086
1211
|
this.opts = opts;
|
|
1212
|
+
this.enableTelemetry = opts?.enableTelemetry ?? true;
|
|
1213
|
+
}
|
|
1214
|
+
get json() {
|
|
1215
|
+
return {
|
|
1216
|
+
/**
|
|
1217
|
+
* @see https://redis.io/commands/json.arrappend
|
|
1218
|
+
*/
|
|
1219
|
+
arrappend: (...args) => new JsonArrAppendCommand(args, this.opts).exec(this.client),
|
|
1220
|
+
/**
|
|
1221
|
+
* @see https://redis.io/commands/json.arrindex
|
|
1222
|
+
*/
|
|
1223
|
+
arrindex: (...args) => new JsonArrIndexCommand(args, this.opts).exec(this.client),
|
|
1224
|
+
/**
|
|
1225
|
+
* @see https://redis.io/commands/json.arrinsert
|
|
1226
|
+
*/
|
|
1227
|
+
arrinsert: (...args) => new JsonArrInsertCommand(args, this.opts).exec(this.client),
|
|
1228
|
+
/**
|
|
1229
|
+
* @see https://redis.io/commands/json.arrlen
|
|
1230
|
+
*/
|
|
1231
|
+
arrlen: (...args) => new JsonArrLenCommand(args, this.opts).exec(this.client),
|
|
1232
|
+
/**
|
|
1233
|
+
* @see https://redis.io/commands/json.arrpop
|
|
1234
|
+
*/
|
|
1235
|
+
arrpop: (...args) => new JsonArrPopCommand(args, this.opts).exec(this.client),
|
|
1236
|
+
/**
|
|
1237
|
+
* @see https://redis.io/commands/json.arrtrim
|
|
1238
|
+
*/
|
|
1239
|
+
arrtrim: (...args) => new JsonArrTrimCommand(args, this.opts).exec(this.client),
|
|
1240
|
+
/**
|
|
1241
|
+
* @see https://redis.io/commands/json.clear
|
|
1242
|
+
*/
|
|
1243
|
+
clear: (...args) => new JsonClearCommand(args, this.opts).exec(this.client),
|
|
1244
|
+
/**
|
|
1245
|
+
* @see https://redis.io/commands/json.del
|
|
1246
|
+
*/
|
|
1247
|
+
del: (...args) => new JsonDelCommand(args, this.opts).exec(this.client),
|
|
1248
|
+
/**
|
|
1249
|
+
* @see https://redis.io/commands/json.forget
|
|
1250
|
+
*/
|
|
1251
|
+
forget: (...args) => new JsonForgetCommand(args, this.opts).exec(this.client),
|
|
1252
|
+
/**
|
|
1253
|
+
* @see https://redis.io/commands/json.get
|
|
1254
|
+
*/
|
|
1255
|
+
get: (...args) => new JsonGetCommand(args, this.opts).exec(this.client),
|
|
1256
|
+
/**
|
|
1257
|
+
* @see https://redis.io/commands/json.mget
|
|
1258
|
+
*/
|
|
1259
|
+
mget: (...args) => new JsonMGetCommand(args, this.opts).exec(this.client),
|
|
1260
|
+
/**
|
|
1261
|
+
* @see https://redis.io/commands/json.numincrby
|
|
1262
|
+
*/
|
|
1263
|
+
numincrby: (...args) => new JsonNumIncrByCommand(args, this.opts).exec(this.client),
|
|
1264
|
+
/**
|
|
1265
|
+
* @see https://redis.io/commands/json.nummultby
|
|
1266
|
+
*/
|
|
1267
|
+
nummultby: (...args) => new JsonNumMultByCommand(args, this.opts).exec(this.client),
|
|
1268
|
+
/**
|
|
1269
|
+
* @see https://redis.io/commands/json.objkeys
|
|
1270
|
+
*/
|
|
1271
|
+
objkeys: (...args) => new JsonObjKeysCommand(args, this.opts).exec(this.client),
|
|
1272
|
+
/**
|
|
1273
|
+
* @see https://redis.io/commands/json.objlen
|
|
1274
|
+
*/
|
|
1275
|
+
objlen: (...args) => new JsonObjLenCommand(args, this.opts).exec(this.client),
|
|
1276
|
+
/**
|
|
1277
|
+
* @see https://redis.io/commands/json.resp
|
|
1278
|
+
*/
|
|
1279
|
+
resp: (...args) => new JsonRespCommand(args, this.opts).exec(this.client),
|
|
1280
|
+
/**
|
|
1281
|
+
* @see https://redis.io/commands/json.set
|
|
1282
|
+
*/
|
|
1283
|
+
set: (...args) => new JsonSetCommand(args, this.opts).exec(this.client),
|
|
1284
|
+
/**
|
|
1285
|
+
* @see https://redis.io/commands/json.strappend
|
|
1286
|
+
*/
|
|
1287
|
+
strappend: (...args) => new JsonStrAppendCommand(args, this.opts).exec(this.client),
|
|
1288
|
+
/**
|
|
1289
|
+
* @see https://redis.io/commands/json.strlen
|
|
1290
|
+
*/
|
|
1291
|
+
strlen: (...args) => new JsonStrLenCommand(args, this.opts).exec(this.client),
|
|
1292
|
+
/**
|
|
1293
|
+
* @see https://redis.io/commands/json.toggle
|
|
1294
|
+
*/
|
|
1295
|
+
toggle: (...args) => new JsonToggleCommand(args, this.opts).exec(this.client),
|
|
1296
|
+
/**
|
|
1297
|
+
* @see https://redis.io/commands/json.type
|
|
1298
|
+
*/
|
|
1299
|
+
type: (...args) => new JsonTypeCommand(args, this.opts).exec(this.client),
|
|
1300
|
+
};
|
|
1301
|
+
}
|
|
1302
|
+
createScript(script) {
|
|
1303
|
+
return new Script(this, script);
|
|
1087
1304
|
}
|
|
1088
1305
|
}
|
|
@@ -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
|
+
}
|