@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.
Files changed (162) hide show
  1. package/README.md +20 -18
  2. package/esm/deps/deno.land/x/base64@v0.2.1/base.js +100 -0
  3. package/esm/deps/deno.land/x/base64@v0.2.1/base64url.js +9 -0
  4. package/esm/deps/deno.land/x/sha1@v1.0.3/deps.js +1 -0
  5. package/esm/deps/deno.land/x/sha1@v1.0.3/mod.js +191 -0
  6. package/esm/deps/denopkg.com/chiefbiiko/std-encoding@v1.0.0/mod.js +50 -0
  7. package/esm/pkg/commands/command.js +12 -3
  8. package/esm/pkg/commands/getdel.js +9 -0
  9. package/esm/pkg/commands/hgetall.js +0 -4
  10. package/esm/pkg/commands/hrandfield.js +39 -0
  11. package/esm/pkg/commands/json_arrappend.js +9 -0
  12. package/esm/pkg/commands/json_arrindex.js +9 -0
  13. package/esm/pkg/commands/json_arrinsert.js +9 -0
  14. package/esm/pkg/commands/json_arrlen.js +9 -0
  15. package/esm/pkg/commands/json_arrpop.js +9 -0
  16. package/esm/pkg/commands/json_arrtrim.js +12 -0
  17. package/esm/pkg/commands/json_clear.js +9 -0
  18. package/esm/pkg/commands/json_del.js +9 -0
  19. package/esm/pkg/commands/json_forget.js +9 -0
  20. package/esm/pkg/commands/json_get.js +30 -0
  21. package/esm/pkg/commands/json_mget.js +9 -0
  22. package/esm/pkg/commands/json_numincrby.js +9 -0
  23. package/esm/pkg/commands/json_nummultby.js +9 -0
  24. package/esm/pkg/commands/json_objkeys.js +9 -0
  25. package/esm/pkg/commands/json_objlen.js +9 -0
  26. package/esm/pkg/commands/json_resp.js +9 -0
  27. package/esm/pkg/commands/json_set.js +18 -0
  28. package/esm/pkg/commands/json_strappend.js +9 -0
  29. package/esm/pkg/commands/json_strlen.js +9 -0
  30. package/esm/pkg/commands/json_toggle.js +9 -0
  31. package/esm/pkg/commands/json_type.js +9 -0
  32. package/esm/pkg/commands/lmove.js +9 -0
  33. package/esm/pkg/commands/lpos.js +19 -0
  34. package/esm/pkg/commands/mod.js +26 -0
  35. package/esm/pkg/commands/scan.js +3 -0
  36. package/esm/pkg/commands/sdiffstore.js +1 -1
  37. package/esm/pkg/commands/set.js +16 -4
  38. package/esm/pkg/commands/smismember.js +9 -0
  39. package/esm/pkg/commands/zdiffstore.js +9 -0
  40. package/esm/pkg/commands/zmscore.js +10 -0
  41. package/esm/pkg/commands/zrange.js +6 -0
  42. package/esm/pkg/http.js +92 -2
  43. package/esm/pkg/pipeline.js +172 -6
  44. package/esm/pkg/redis.js +223 -2
  45. package/esm/pkg/script.js +77 -0
  46. package/esm/platforms/cloudflare.js +10 -2
  47. package/esm/platforms/fastly.js +6 -0
  48. package/esm/platforms/node_with_fetch.js +26 -1
  49. package/esm/platforms/nodejs.js +24 -1
  50. package/esm/version.js +1 -0
  51. package/package.json +41 -54
  52. package/script/deps/deno.land/x/base64@v0.2.1/base.js +104 -0
  53. package/script/deps/deno.land/x/base64@v0.2.1/base64url.js +13 -0
  54. package/script/deps/deno.land/x/sha1@v1.0.3/deps.js +6 -0
  55. package/script/deps/deno.land/x/sha1@v1.0.3/mod.js +196 -0
  56. package/script/deps/denopkg.com/chiefbiiko/std-encoding@v1.0.0/mod.js +55 -0
  57. package/script/pkg/commands/command.js +12 -3
  58. package/script/pkg/commands/getdel.js +13 -0
  59. package/script/pkg/commands/hgetall.js +0 -4
  60. package/script/pkg/commands/hrandfield.js +43 -0
  61. package/script/pkg/commands/json_arrappend.js +13 -0
  62. package/script/pkg/commands/json_arrindex.js +13 -0
  63. package/script/pkg/commands/json_arrinsert.js +13 -0
  64. package/script/pkg/commands/json_arrlen.js +13 -0
  65. package/script/pkg/commands/json_arrpop.js +13 -0
  66. package/script/pkg/commands/json_arrtrim.js +16 -0
  67. package/script/pkg/commands/json_clear.js +13 -0
  68. package/script/pkg/commands/json_del.js +13 -0
  69. package/script/pkg/commands/json_forget.js +13 -0
  70. package/script/pkg/commands/json_get.js +34 -0
  71. package/script/pkg/commands/json_mget.js +13 -0
  72. package/script/pkg/commands/json_numincrby.js +13 -0
  73. package/script/pkg/commands/json_nummultby.js +13 -0
  74. package/script/pkg/commands/json_objkeys.js +13 -0
  75. package/script/pkg/commands/json_objlen.js +13 -0
  76. package/script/pkg/commands/json_resp.js +13 -0
  77. package/script/pkg/commands/json_set.js +22 -0
  78. package/script/pkg/commands/json_strappend.js +13 -0
  79. package/script/pkg/commands/json_strlen.js +13 -0
  80. package/script/pkg/commands/json_toggle.js +13 -0
  81. package/script/pkg/commands/json_type.js +13 -0
  82. package/script/pkg/commands/lmove.js +13 -0
  83. package/script/pkg/commands/lpos.js +23 -0
  84. package/script/pkg/commands/mod.js +26 -0
  85. package/script/pkg/commands/scan.js +3 -0
  86. package/script/pkg/commands/sdiffstore.js +1 -1
  87. package/script/pkg/commands/set.js +16 -4
  88. package/script/pkg/commands/smismember.js +13 -0
  89. package/script/pkg/commands/zdiffstore.js +13 -0
  90. package/script/pkg/commands/zmscore.js +14 -0
  91. package/script/pkg/commands/zrange.js +6 -0
  92. package/script/pkg/http.js +92 -2
  93. package/script/pkg/pipeline.js +171 -5
  94. package/script/pkg/redis.js +222 -1
  95. package/script/pkg/script.js +81 -0
  96. package/script/platforms/cloudflare.js +10 -2
  97. package/script/platforms/fastly.js +6 -0
  98. package/script/platforms/node_with_fetch.js +26 -1
  99. package/script/platforms/nodejs.js +24 -1
  100. package/script/version.js +4 -0
  101. package/types/deps/deno.land/x/base64@v0.2.1/base.d.ts +5 -0
  102. package/types/deps/deno.land/x/base64@v0.2.1/base64url.d.ts +1 -0
  103. package/types/deps/deno.land/x/sha1@v1.0.3/deps.d.ts +1 -0
  104. package/types/deps/deno.land/x/sha1@v1.0.3/mod.d.ts +26 -0
  105. package/types/deps/denopkg.com/chiefbiiko/std-encoding@v1.0.0/mod.d.ts +3 -0
  106. package/types/pkg/commands/bitop.d.ts +0 -1
  107. package/types/pkg/commands/bitpos.d.ts +1 -1
  108. package/types/pkg/commands/command.d.ts +5 -5
  109. package/types/pkg/commands/getdel.d.ts +7 -0
  110. package/types/pkg/commands/hdel.d.ts +1 -1
  111. package/types/pkg/commands/hrandfield.d.ts +9 -0
  112. package/types/pkg/commands/json_arrappend.d.ts +7 -0
  113. package/types/pkg/commands/json_arrindex.d.ts +13 -0
  114. package/types/pkg/commands/json_arrinsert.d.ts +7 -0
  115. package/types/pkg/commands/json_arrlen.d.ts +7 -0
  116. package/types/pkg/commands/json_arrpop.d.ts +7 -0
  117. package/types/pkg/commands/json_arrtrim.d.ts +7 -0
  118. package/types/pkg/commands/json_clear.d.ts +7 -0
  119. package/types/pkg/commands/json_del.d.ts +7 -0
  120. package/types/pkg/commands/json_forget.d.ts +7 -0
  121. package/types/pkg/commands/json_get.d.ts +15 -0
  122. package/types/pkg/commands/json_mget.d.ts +7 -0
  123. package/types/pkg/commands/json_numincrby.d.ts +7 -0
  124. package/types/pkg/commands/json_nummultby.d.ts +7 -0
  125. package/types/pkg/commands/json_objkeys.d.ts +7 -0
  126. package/types/pkg/commands/json_objlen.d.ts +7 -0
  127. package/types/pkg/commands/json_resp.d.ts +7 -0
  128. package/types/pkg/commands/json_set.d.ts +18 -0
  129. package/types/pkg/commands/json_strappend.d.ts +7 -0
  130. package/types/pkg/commands/json_strlen.d.ts +7 -0
  131. package/types/pkg/commands/json_toggle.d.ts +7 -0
  132. package/types/pkg/commands/json_type.d.ts +7 -0
  133. package/types/pkg/commands/lmove.d.ts +12 -0
  134. package/types/pkg/commands/lpop.d.ts +1 -1
  135. package/types/pkg/commands/lpos.d.ts +15 -0
  136. package/types/pkg/commands/mget.d.ts +1 -1
  137. package/types/pkg/commands/mod.d.ts +26 -0
  138. package/types/pkg/commands/rpop.d.ts +2 -2
  139. package/types/pkg/commands/scan.d.ts +2 -1
  140. package/types/pkg/commands/script_flush.d.ts +1 -1
  141. package/types/pkg/commands/sdiffstore.d.ts +1 -1
  142. package/types/pkg/commands/set.d.ts +31 -2
  143. package/types/pkg/commands/smembers.d.ts +2 -2
  144. package/types/pkg/commands/smismember.d.ts +7 -0
  145. package/types/pkg/commands/spop.d.ts +2 -2
  146. package/types/pkg/commands/type.d.ts +1 -1
  147. package/types/pkg/commands/zadd.d.ts +4 -4
  148. package/types/pkg/commands/zdiffstore.d.ts +7 -0
  149. package/types/pkg/commands/zinterstore.d.ts +1 -1
  150. package/types/pkg/commands/zmscore.d.ts +7 -0
  151. package/types/pkg/commands/zrange.d.ts +8 -1
  152. package/types/pkg/commands/zunionstore.d.ts +1 -1
  153. package/types/pkg/http.d.ts +44 -7
  154. package/types/pkg/pipeline.d.ts +73 -10
  155. package/types/pkg/redis.d.ts +161 -18
  156. package/types/pkg/script.d.ts +42 -0
  157. package/types/pkg/types.d.ts +27 -1
  158. package/types/platforms/cloudflare.d.ts +9 -8
  159. package/types/platforms/fastly.d.ts +3 -7
  160. package/types/platforms/node_with_fetch.d.ts +3 -22
  161. package/types/platforms/nodejs.d.ts +4 -7
  162. package/types/version.d.ts +1 -0
@@ -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(client, commandOptions) {
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: ["pipeline"],
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(this.client, this.opts)
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
+ }