@upstash/redis 0.0.0-ci.df9c9bb7 → 0.0.0-ci.e0fa2b9d-20230419

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 (149) 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/mod.js +25 -0
  34. package/esm/pkg/commands/scan.js +3 -0
  35. package/esm/pkg/commands/set.js +16 -4
  36. package/esm/pkg/commands/smismember.js +9 -0
  37. package/esm/pkg/commands/zdiffstore.js +9 -0
  38. package/esm/pkg/commands/zmscore.js +10 -0
  39. package/esm/pkg/http.js +92 -2
  40. package/esm/pkg/pipeline.js +163 -6
  41. package/esm/pkg/redis.js +202 -2
  42. package/esm/pkg/script.js +77 -0
  43. package/esm/platforms/cloudflare.js +10 -2
  44. package/esm/platforms/fastly.js +6 -0
  45. package/esm/platforms/node_with_fetch.js +26 -1
  46. package/esm/platforms/nodejs.js +22 -1
  47. package/esm/version.js +1 -0
  48. package/package.json +41 -54
  49. package/script/deps/deno.land/x/base64@v0.2.1/base.js +104 -0
  50. package/script/deps/deno.land/x/base64@v0.2.1/base64url.js +13 -0
  51. package/script/deps/deno.land/x/sha1@v1.0.3/deps.js +6 -0
  52. package/script/deps/deno.land/x/sha1@v1.0.3/mod.js +196 -0
  53. package/script/deps/denopkg.com/chiefbiiko/std-encoding@v1.0.0/mod.js +55 -0
  54. package/script/pkg/commands/command.js +12 -3
  55. package/script/pkg/commands/getdel.js +13 -0
  56. package/script/pkg/commands/hgetall.js +0 -4
  57. package/script/pkg/commands/hrandfield.js +43 -0
  58. package/script/pkg/commands/json_arrappend.js +13 -0
  59. package/script/pkg/commands/json_arrindex.js +13 -0
  60. package/script/pkg/commands/json_arrinsert.js +13 -0
  61. package/script/pkg/commands/json_arrlen.js +13 -0
  62. package/script/pkg/commands/json_arrpop.js +13 -0
  63. package/script/pkg/commands/json_arrtrim.js +16 -0
  64. package/script/pkg/commands/json_clear.js +13 -0
  65. package/script/pkg/commands/json_del.js +13 -0
  66. package/script/pkg/commands/json_forget.js +13 -0
  67. package/script/pkg/commands/json_get.js +34 -0
  68. package/script/pkg/commands/json_mget.js +13 -0
  69. package/script/pkg/commands/json_numincrby.js +13 -0
  70. package/script/pkg/commands/json_nummultby.js +13 -0
  71. package/script/pkg/commands/json_objkeys.js +13 -0
  72. package/script/pkg/commands/json_objlen.js +13 -0
  73. package/script/pkg/commands/json_resp.js +13 -0
  74. package/script/pkg/commands/json_set.js +22 -0
  75. package/script/pkg/commands/json_strappend.js +13 -0
  76. package/script/pkg/commands/json_strlen.js +13 -0
  77. package/script/pkg/commands/json_toggle.js +13 -0
  78. package/script/pkg/commands/json_type.js +13 -0
  79. package/script/pkg/commands/lmove.js +13 -0
  80. package/script/pkg/commands/mod.js +25 -0
  81. package/script/pkg/commands/scan.js +3 -0
  82. package/script/pkg/commands/set.js +16 -4
  83. package/script/pkg/commands/smismember.js +13 -0
  84. package/script/pkg/commands/zdiffstore.js +13 -0
  85. package/script/pkg/commands/zmscore.js +14 -0
  86. package/script/pkg/http.js +92 -2
  87. package/script/pkg/pipeline.js +162 -5
  88. package/script/pkg/redis.js +201 -1
  89. package/script/pkg/script.js +81 -0
  90. package/script/platforms/cloudflare.js +10 -2
  91. package/script/platforms/fastly.js +6 -0
  92. package/script/platforms/node_with_fetch.js +26 -1
  93. package/script/platforms/nodejs.js +22 -1
  94. package/script/version.js +4 -0
  95. package/types/deps/deno.land/x/base64@v0.2.1/base.d.ts +5 -0
  96. package/types/deps/deno.land/x/base64@v0.2.1/base64url.d.ts +1 -0
  97. package/types/deps/deno.land/x/sha1@v1.0.3/deps.d.ts +1 -0
  98. package/types/deps/deno.land/x/sha1@v1.0.3/mod.d.ts +26 -0
  99. package/types/deps/denopkg.com/chiefbiiko/std-encoding@v1.0.0/mod.d.ts +3 -0
  100. package/types/pkg/commands/bitop.d.ts +0 -1
  101. package/types/pkg/commands/command.d.ts +5 -5
  102. package/types/pkg/commands/getdel.d.ts +7 -0
  103. package/types/pkg/commands/hrandfield.d.ts +9 -0
  104. package/types/pkg/commands/json_arrappend.d.ts +7 -0
  105. package/types/pkg/commands/json_arrindex.d.ts +13 -0
  106. package/types/pkg/commands/json_arrinsert.d.ts +7 -0
  107. package/types/pkg/commands/json_arrlen.d.ts +7 -0
  108. package/types/pkg/commands/json_arrpop.d.ts +7 -0
  109. package/types/pkg/commands/json_arrtrim.d.ts +7 -0
  110. package/types/pkg/commands/json_clear.d.ts +7 -0
  111. package/types/pkg/commands/json_del.d.ts +7 -0
  112. package/types/pkg/commands/json_forget.d.ts +7 -0
  113. package/types/pkg/commands/json_get.d.ts +15 -0
  114. package/types/pkg/commands/json_mget.d.ts +7 -0
  115. package/types/pkg/commands/json_numincrby.d.ts +7 -0
  116. package/types/pkg/commands/json_nummultby.d.ts +7 -0
  117. package/types/pkg/commands/json_objkeys.d.ts +7 -0
  118. package/types/pkg/commands/json_objlen.d.ts +7 -0
  119. package/types/pkg/commands/json_resp.d.ts +7 -0
  120. package/types/pkg/commands/json_set.d.ts +18 -0
  121. package/types/pkg/commands/json_strappend.d.ts +7 -0
  122. package/types/pkg/commands/json_strlen.d.ts +7 -0
  123. package/types/pkg/commands/json_toggle.d.ts +7 -0
  124. package/types/pkg/commands/json_type.d.ts +7 -0
  125. package/types/pkg/commands/lmove.d.ts +12 -0
  126. package/types/pkg/commands/mget.d.ts +1 -1
  127. package/types/pkg/commands/mod.d.ts +25 -0
  128. package/types/pkg/commands/scan.d.ts +2 -1
  129. package/types/pkg/commands/script_flush.d.ts +1 -1
  130. package/types/pkg/commands/set.d.ts +31 -2
  131. package/types/pkg/commands/smembers.d.ts +2 -2
  132. package/types/pkg/commands/smismember.d.ts +7 -0
  133. package/types/pkg/commands/type.d.ts +1 -1
  134. package/types/pkg/commands/zadd.d.ts +4 -4
  135. package/types/pkg/commands/zdiffstore.d.ts +7 -0
  136. package/types/pkg/commands/zinterstore.d.ts +1 -1
  137. package/types/pkg/commands/zmscore.d.ts +7 -0
  138. package/types/pkg/commands/zrange.d.ts +1 -1
  139. package/types/pkg/commands/zunionstore.d.ts +1 -1
  140. package/types/pkg/http.d.ts +44 -7
  141. package/types/pkg/pipeline.d.ts +61 -6
  142. package/types/pkg/redis.d.ts +143 -12
  143. package/types/pkg/script.d.ts +42 -0
  144. package/types/pkg/types.d.ts +27 -1
  145. package/types/platforms/cloudflare.d.ts +9 -8
  146. package/types/platforms/fastly.d.ts +3 -7
  147. package/types/platforms/node_with_fetch.d.ts +3 -22
  148. package/types/platforms/nodejs.d.ts +4 -7
  149. package/types/version.d.ts +1 -0
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, 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(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
+ })
53
106
  });
54
107
  /**
55
108
  * @see https://redis.io/commands/append
@@ -213,6 +266,15 @@ export class Redis {
213
266
  writable: true,
214
267
  value: (...args) => new GetBitCommand(args, this.opts).exec(this.client)
215
268
  });
269
+ /**
270
+ * @see https://redis.io/commands/getdel
271
+ */
272
+ Object.defineProperty(this, "getdel", {
273
+ enumerable: true,
274
+ configurable: true,
275
+ writable: true,
276
+ value: (...args) => new GetDelCommand(args, this.opts).exec(this.client)
277
+ });
216
278
  /**
217
279
  * @see https://redis.io/commands/getrange
218
280
  */
@@ -321,6 +383,16 @@ export class Redis {
321
383
  writable: true,
322
384
  value: (key, kv) => new HMSetCommand([key, kv], this.opts).exec(this.client)
323
385
  });
386
+ /**
387
+ * @see https://redis.io/commands/hrandfield
388
+ */
389
+ Object.defineProperty(this, "hrandfield", {
390
+ enumerable: true,
391
+ configurable: true,
392
+ writable: true,
393
+ value: (key, count, withValues) => new HRandFieldCommand([key, count, withValues], this.opts)
394
+ .exec(this.client)
395
+ });
324
396
  /**
325
397
  * @see https://redis.io/commands/hscan
326
398
  */
@@ -429,6 +501,15 @@ export class Redis {
429
501
  writable: true,
430
502
  value: (...args) => new LLenCommand(args, this.opts).exec(this.client)
431
503
  });
504
+ /**
505
+ * @see https://redis.io/commands/lmove
506
+ */
507
+ Object.defineProperty(this, "lmove", {
508
+ enumerable: true,
509
+ configurable: true,
510
+ writable: true,
511
+ value: (...args) => new LMoveCommand(args, this.opts).exec(this.client)
512
+ });
432
513
  /**
433
514
  * @see https://redis.io/commands/lpop
434
515
  */
@@ -789,6 +870,15 @@ export class Redis {
789
870
  writable: true,
790
871
  value: (key, member) => new SIsMemberCommand([key, member], this.opts).exec(this.client)
791
872
  });
873
+ /**
874
+ * @see https://redis.io/commands/smismember
875
+ */
876
+ Object.defineProperty(this, "smismember", {
877
+ enumerable: true,
878
+ configurable: true,
879
+ writable: true,
880
+ value: (key, members) => new SMIsMemberCommand([key, members], this.opts).exec(this.client)
881
+ });
792
882
  /**
793
883
  * @see https://redis.io/commands/smembers
794
884
  */
@@ -947,6 +1037,15 @@ export class Redis {
947
1037
  writable: true,
948
1038
  value: (...args) => new ZCountCommand(args, this.opts).exec(this.client)
949
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
+ });
950
1049
  /**
951
1050
  * @see https://redis.io/commands/zincrby
952
1051
  */
@@ -974,6 +1073,15 @@ export class Redis {
974
1073
  writable: true,
975
1074
  value: (...args) => new ZLexCountCommand(args, this.opts).exec(this.client)
976
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
+ });
977
1085
  /**
978
1086
  * @see https://redis.io/commands/zpopmax
979
1087
  */
@@ -1084,5 +1192,97 @@ export class Redis {
1084
1192
  });
1085
1193
  this.client = client;
1086
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);
1087
1287
  }
1088
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
+ }
@@ -1,5 +1,6 @@
1
1
  import * as core from "../pkg/redis.js";
2
2
  import { HttpClient } from "../pkg/http.js";
3
+ import { VERSION } from "../version.js";
3
4
  /**
4
5
  * Serverless redis client for upstash.
5
6
  */
@@ -15,7 +16,7 @@ export class Redis extends core.Redis {
15
16
  * });
16
17
  * ```
17
18
  */
18
- constructor(config) {
19
+ constructor(config, env) {
19
20
  if (config.url.startsWith(" ") ||
20
21
  config.url.endsWith(" ") ||
21
22
  /\r|\n/.test(config.url)) {
@@ -30,10 +31,17 @@ export class Redis extends core.Redis {
30
31
  retry: config.retry,
31
32
  baseUrl: config.url,
32
33
  headers: { authorization: `Bearer ${config.token}` },
34
+ responseEncoding: config.responseEncoding,
33
35
  });
34
36
  super(client, {
37
+ enableTelemetry: !env?.UPSTASH_DISABLE_TELEMETRY,
35
38
  automaticDeserialization: config.automaticDeserialization,
36
39
  });
40
+ // This is only added of the user has not disabled telemetry
41
+ this.addTelemetry({
42
+ platform: "cloudflare",
43
+ sdk: `@upstash/redis@${VERSION}`,
44
+ });
37
45
  }
38
46
  /*
39
47
  * Create a new Upstash Redis instance from environment variables on cloudflare.
@@ -57,6 +65,6 @@ export class Redis extends core.Redis {
57
65
  if (!token) {
58
66
  throw new Error("Unable to find environment variable: `UPSTASH_REDIS_REST_TOKEN`. Please add it via `wrangler secret put UPSTASH_REDIS_REST_TOKEN`");
59
67
  }
60
- return new Redis({ ...opts, url, token });
68
+ return new Redis({ ...opts, url, token }, env);
61
69
  }
62
70
  }
@@ -1,5 +1,6 @@
1
1
  import * as core from "../pkg/redis.js";
2
2
  import { HttpClient } from "../pkg/http.js";
3
+ import { VERSION } from "../version.js";
3
4
  /**
4
5
  * Serverless redis client for upstash.
5
6
  */
@@ -32,9 +33,14 @@ export class Redis extends core.Redis {
32
33
  retry: config.retry,
33
34
  headers: { authorization: `Bearer ${config.token}` },
34
35
  options: { backend: config.backend },
36
+ responseEncoding: config.responseEncoding,
35
37
  });
36
38
  super(client, {
37
39
  automaticDeserialization: config.automaticDeserialization,
38
40
  });
41
+ this.addTelemetry({
42
+ sdk: `@upstash/redis@${VERSION}`,
43
+ platform: "fastly",
44
+ });
39
45
  }
40
46
  }
@@ -1,7 +1,21 @@
1
1
  // deno-lint-ignore-file
2
2
  import * as core from "../pkg/redis.js";
3
3
  import { HttpClient, } from "../pkg/http.js";
4
+ import { VERSION } from "../version.js";
4
5
  import "isomorphic-fetch";
6
+ // @ts-ignore Deno can't compile
7
+ // import https from "https";
8
+ // @ts-ignore Deno can't compile
9
+ // import http from "http";
10
+ // import "isomorphic-fetch";
11
+ /**
12
+ * Workaround for nodejs 14, where atob is not included in the standardlib
13
+ */
14
+ if (typeof atob === "undefined") {
15
+ global.atob = function (b64) {
16
+ return Buffer.from(b64, "base64").toString("utf-8");
17
+ };
18
+ }
5
19
  /**
6
20
  * Serverless redis client for upstash.
7
21
  */
@@ -25,10 +39,21 @@ export class Redis extends core.Redis {
25
39
  baseUrl: configOrRequester.url,
26
40
  retry: configOrRequester.retry,
27
41
  headers: { authorization: `Bearer ${configOrRequester.token}` },
28
- // agent: configOrRequester.agent,
42
+ // agent: configOrRequester.agent,
43
+ responseEncoding: configOrRequester.responseEncoding,
29
44
  });
30
45
  super(client, {
31
46
  automaticDeserialization: configOrRequester.automaticDeserialization,
47
+ enableTelemetry: !process.env.UPSTASH_DISABLE_TELEMETRY,
48
+ });
49
+ this.addTelemetry({
50
+ runtime: `node@${process.version}`,
51
+ platform: process.env.VERCEL
52
+ ? "vercel"
53
+ : process.env.AWS_REGION
54
+ ? "aws"
55
+ : "unknown",
56
+ sdk: `@upstash/redis@${VERSION}`,
32
57
  });
33
58
  }
34
59
  /**
@@ -1,6 +1,15 @@
1
1
  // deno-lint-ignore-file
2
2
  import * as core from "../pkg/redis.js";
3
3
  import { HttpClient, } from "../pkg/http.js";
4
+ import { VERSION } from "../version.js";
5
+ /**
6
+ * Workaround for nodejs 14, where atob is not included in the standardlib
7
+ */
8
+ if (typeof atob === "undefined") {
9
+ global.atob = function (b64) {
10
+ return Buffer.from(b64, "base64").toString("utf-8");
11
+ };
12
+ }
4
13
  /**
5
14
  * Serverless redis client for upstash.
6
15
  */
@@ -24,10 +33,22 @@ export class Redis extends core.Redis {
24
33
  baseUrl: configOrRequester.url,
25
34
  retry: configOrRequester.retry,
26
35
  headers: { authorization: `Bearer ${configOrRequester.token}` },
27
- // agent: configOrRequester.agent,
36
+ agent: configOrRequester.agent,
37
+ responseEncoding: configOrRequester.responseEncoding,
38
+ cache: "no-store",
28
39
  });
29
40
  super(client, {
30
41
  automaticDeserialization: configOrRequester.automaticDeserialization,
42
+ enableTelemetry: !process.env.UPSTASH_DISABLE_TELEMETRY,
43
+ });
44
+ this.addTelemetry({
45
+ runtime: `node@${process.version}`,
46
+ platform: process.env.VERCEL
47
+ ? "vercel"
48
+ : process.env.AWS_REGION
49
+ ? "aws"
50
+ : "unknown",
51
+ sdk: `@upstash/redis@${VERSION}`,
31
52
  });
32
53
  }
33
54
  /**
package/esm/version.js ADDED
@@ -0,0 +1 @@
1
+ export const VERSION = "v0.0.0-ci.e0fa2b9d-20230419";
package/package.json CHANGED
@@ -3,7 +3,7 @@
3
3
  "main": "./script/platforms/nodejs.js",
4
4
  "types": "./types/platforms/nodejs.d.ts",
5
5
  "name": "@upstash/redis",
6
- "version": "v0.0.0-ci.df9c9bb7",
6
+ "version": "v0.0.0-ci.e0fa2b9d-20230419",
7
7
  "description": "An HTTP/REST based Redis client built on top of Upstash REST API.",
8
8
  "repository": {
9
9
  "type": "git",
@@ -22,10 +22,6 @@
22
22
  "url": "https://github.com/upstash/upstash-redis/issues"
23
23
  },
24
24
  "homepage": "https://github.com/upstash/upstash-redis#readme",
25
- "devDependencies": {
26
- "@size-limit/preset-small-lib": "latest",
27
- "size-limit": "latest"
28
- },
29
25
  "dependencies": {
30
26
  "isomorphic-fetch": "^3.0.0"
31
27
  },
@@ -37,65 +33,56 @@
37
33
  "with-fetch": "./types/platforms/node_with_fetch.d.ts"
38
34
  }
39
35
  },
40
- "size-limit": [
41
- {
42
- "path": "esm/platforms/nodejs.js",
43
- "limit": "6 KB"
44
- },
45
- {
46
- "path": "esm/platforms/fastly.js",
47
- "limit": "6 KB"
48
- },
49
- {
50
- "path": "esm/platforms/cloudflare.js",
51
- "limit": "6 KB"
52
- },
53
- {
54
- "path": "esm/platforms/node_with_fetch.js",
55
- "limit": "15 KB"
56
- },
57
- {
58
- "path": "script/platforms/nodejs.js",
59
- "limit": "10 KB"
60
- },
61
- {
62
- "path": "script/platforms/fastly.js",
63
- "limit": "10 KB"
64
- },
65
- {
66
- "path": "script/platforms/cloudflare.js",
67
- "limit": "10 KB"
68
- },
69
- {
70
- "path": "script/platforms/node_with_fetch.js",
71
- "limit": "15 KB"
72
- }
73
- ],
74
36
  "exports": {
75
37
  ".": {
76
- "import": "./esm/platforms/nodejs.js",
77
- "require": "./script/platforms/nodejs.js",
78
- "types": "./types/platforms/nodejs.d.ts"
38
+ "import": {
39
+ "types": "./types/platforms/nodejs.d.ts",
40
+ "default": "./esm/platforms/nodejs.js"
41
+ },
42
+ "require": {
43
+ "types": "./types/platforms/nodejs.d.ts",
44
+ "default": "./script/platforms/nodejs.js"
45
+ }
79
46
  },
80
47
  "./nodejs": {
81
- "import": "./esm/platforms/nodejs.js",
82
- "require": "./script/platforms/nodejs.js",
83
- "types": "./types/platforms/nodejs.d.ts"
48
+ "import": {
49
+ "types": "./types/platforms/nodejs.d.ts",
50
+ "default": "./esm/platforms/nodejs.js"
51
+ },
52
+ "require": {
53
+ "types": "./types/platforms/nodejs.d.ts",
54
+ "default": "./script/platforms/nodejs.js"
55
+ }
84
56
  },
85
57
  "./cloudflare": {
86
- "import": "./esm/platforms/cloudflare.js",
87
- "require": "./script/platforms/cloudflare.js",
88
- "types": "./types/platforms/cloudflare.d.ts"
58
+ "import": {
59
+ "types": "./types/platforms/cloudflare.d.ts",
60
+ "default": "./esm/platforms/cloudflare.js"
61
+ },
62
+ "require": {
63
+ "types": "./types/platforms/cloudflare.d.ts",
64
+ "default": "./script/platforms/cloudflare.js"
65
+ }
89
66
  },
90
67
  "./fastly": {
91
- "import": "./esm/platforms/fastly.js",
92
- "require": "./script/platforms/fastly.js",
93
- "types": "./types/platforms/fastly.d.ts"
68
+ "import": {
69
+ "types": "./types/platforms/fastly.d.ts",
70
+ "default": "./esm/platforms/fastly.js"
71
+ },
72
+ "require": {
73
+ "types": "./types/platforms/fastly.d.ts",
74
+ "default": "./script/platforms/fastly.js"
75
+ }
94
76
  },
95
77
  "./with-fetch": {
96
- "import": "./esm/platforms/node_with_fetch.js",
97
- "require": "./script/platforms/node_with_fetch.js",
98
- "types": "./types/platforms/node_with_fetch.d.ts"
78
+ "import": {
79
+ "types": "./types/platforms/node_with_fetch.d.ts",
80
+ "default": "./esm/platforms/node_with_fetch.js"
81
+ },
82
+ "require": {
83
+ "types": "./types/platforms/node_with_fetch.d.ts",
84
+ "default": "./script/platforms/node_with_fetch.js"
85
+ }
99
86
  }
100
87
  }
101
88
  }