@upstash/redis 0.0.0-ci.bafaa360-20230119 → 0.0.0-ci.bc4f4560-20231018

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 (124) hide show
  1. package/README.md +1 -1
  2. package/esm/pkg/commands/command.js +12 -3
  3. package/esm/pkg/commands/geo_add.js +27 -0
  4. package/esm/pkg/commands/geo_hash.js +14 -0
  5. package/esm/pkg/commands/hgetall.js +9 -1
  6. package/esm/pkg/commands/json_arrappend.js +9 -0
  7. package/esm/pkg/commands/json_arrindex.js +9 -0
  8. package/esm/pkg/commands/json_arrinsert.js +9 -0
  9. package/esm/pkg/commands/json_arrlen.js +9 -0
  10. package/esm/pkg/commands/json_arrpop.js +9 -0
  11. package/esm/pkg/commands/json_arrtrim.js +12 -0
  12. package/esm/pkg/commands/json_clear.js +9 -0
  13. package/esm/pkg/commands/json_del.js +9 -0
  14. package/esm/pkg/commands/json_forget.js +9 -0
  15. package/esm/pkg/commands/json_get.js +30 -0
  16. package/esm/pkg/commands/json_mget.js +9 -0
  17. package/esm/pkg/commands/json_numincrby.js +9 -0
  18. package/esm/pkg/commands/json_nummultby.js +9 -0
  19. package/esm/pkg/commands/json_objkeys.js +9 -0
  20. package/esm/pkg/commands/json_objlen.js +9 -0
  21. package/esm/pkg/commands/json_resp.js +9 -0
  22. package/esm/pkg/commands/json_set.js +18 -0
  23. package/esm/pkg/commands/json_strappend.js +9 -0
  24. package/esm/pkg/commands/json_strlen.js +9 -0
  25. package/esm/pkg/commands/json_toggle.js +9 -0
  26. package/esm/pkg/commands/json_type.js +9 -0
  27. package/esm/pkg/commands/mod.js +27 -1
  28. package/esm/pkg/commands/set.js +1 -1
  29. package/esm/pkg/commands/xadd.js +26 -0
  30. package/esm/pkg/commands/xrange.js +36 -0
  31. package/esm/pkg/commands/zunion.js +30 -0
  32. package/esm/pkg/http.js +19 -19
  33. package/esm/pkg/pipeline.js +119 -7
  34. package/esm/pkg/redis.js +135 -1
  35. package/esm/platforms/cloudflare.js +6 -6
  36. package/esm/platforms/fastly.js +5 -0
  37. package/esm/platforms/node_with_fetch.js +10 -11
  38. package/esm/platforms/nodejs.js +13 -11
  39. package/esm/version.js +1 -1
  40. package/package.json +53 -20
  41. package/script/pkg/commands/command.js +12 -3
  42. package/script/pkg/commands/geo_add.js +31 -0
  43. package/script/pkg/commands/geo_hash.js +18 -0
  44. package/script/pkg/commands/hgetall.js +9 -1
  45. package/script/pkg/commands/json_arrappend.js +13 -0
  46. package/script/pkg/commands/json_arrindex.js +13 -0
  47. package/script/pkg/commands/json_arrinsert.js +13 -0
  48. package/script/pkg/commands/json_arrlen.js +13 -0
  49. package/script/pkg/commands/json_arrpop.js +13 -0
  50. package/script/pkg/commands/json_arrtrim.js +16 -0
  51. package/script/pkg/commands/json_clear.js +13 -0
  52. package/script/pkg/commands/json_del.js +13 -0
  53. package/script/pkg/commands/json_forget.js +13 -0
  54. package/script/pkg/commands/json_get.js +34 -0
  55. package/script/pkg/commands/json_mget.js +13 -0
  56. package/script/pkg/commands/json_numincrby.js +13 -0
  57. package/script/pkg/commands/json_nummultby.js +13 -0
  58. package/script/pkg/commands/json_objkeys.js +13 -0
  59. package/script/pkg/commands/json_objlen.js +13 -0
  60. package/script/pkg/commands/json_resp.js +13 -0
  61. package/script/pkg/commands/json_set.js +22 -0
  62. package/script/pkg/commands/json_strappend.js +13 -0
  63. package/script/pkg/commands/json_strlen.js +13 -0
  64. package/script/pkg/commands/json_toggle.js +13 -0
  65. package/script/pkg/commands/json_type.js +13 -0
  66. package/script/pkg/commands/mod.js +27 -1
  67. package/script/pkg/commands/set.js +1 -1
  68. package/script/pkg/commands/xadd.js +30 -0
  69. package/script/pkg/commands/xrange.js +40 -0
  70. package/script/pkg/commands/zunion.js +34 -0
  71. package/script/pkg/http.js +19 -19
  72. package/script/pkg/pipeline.js +118 -6
  73. package/script/pkg/redis.js +134 -0
  74. package/script/platforms/cloudflare.js +6 -6
  75. package/script/platforms/fastly.js +5 -0
  76. package/script/platforms/node_with_fetch.js +10 -11
  77. package/script/platforms/nodejs.js +13 -11
  78. package/script/version.js +1 -1
  79. package/types/pkg/commands/command.d.ts +5 -5
  80. package/types/pkg/commands/geo_add.d.ts +25 -0
  81. package/types/pkg/commands/geo_hash.d.ts +7 -0
  82. package/types/pkg/commands/hdel.d.ts +1 -1
  83. package/types/pkg/commands/json_arrappend.d.ts +7 -0
  84. package/types/pkg/commands/json_arrindex.d.ts +13 -0
  85. package/types/pkg/commands/json_arrinsert.d.ts +7 -0
  86. package/types/pkg/commands/json_arrlen.d.ts +7 -0
  87. package/types/pkg/commands/json_arrpop.d.ts +7 -0
  88. package/types/pkg/commands/json_arrtrim.d.ts +7 -0
  89. package/types/pkg/commands/json_clear.d.ts +7 -0
  90. package/types/pkg/commands/json_del.d.ts +7 -0
  91. package/types/pkg/commands/json_forget.d.ts +7 -0
  92. package/types/pkg/commands/json_get.d.ts +15 -0
  93. package/types/pkg/commands/json_mget.d.ts +7 -0
  94. package/types/pkg/commands/json_numincrby.d.ts +7 -0
  95. package/types/pkg/commands/json_nummultby.d.ts +7 -0
  96. package/types/pkg/commands/json_objkeys.d.ts +7 -0
  97. package/types/pkg/commands/json_objlen.d.ts +7 -0
  98. package/types/pkg/commands/json_resp.d.ts +7 -0
  99. package/types/pkg/commands/json_set.d.ts +18 -0
  100. package/types/pkg/commands/json_strappend.d.ts +7 -0
  101. package/types/pkg/commands/json_strlen.d.ts +7 -0
  102. package/types/pkg/commands/json_toggle.d.ts +7 -0
  103. package/types/pkg/commands/json_type.d.ts +7 -0
  104. package/types/pkg/commands/mod.d.ts +27 -1
  105. package/types/pkg/commands/scan.d.ts +1 -1
  106. package/types/pkg/commands/script_flush.d.ts +1 -1
  107. package/types/pkg/commands/set.d.ts +3 -3
  108. package/types/pkg/commands/type.d.ts +1 -1
  109. package/types/pkg/commands/xadd.d.ts +31 -0
  110. package/types/pkg/commands/xrange.d.ts +9 -0
  111. package/types/pkg/commands/zadd.d.ts +3 -3
  112. package/types/pkg/commands/zinterstore.d.ts +1 -1
  113. package/types/pkg/commands/zrange.d.ts +1 -1
  114. package/types/pkg/commands/zunion.d.ts +29 -0
  115. package/types/pkg/commands/zunionstore.d.ts +1 -1
  116. package/types/pkg/http.d.ts +14 -7
  117. package/types/pkg/pipeline.d.ts +242 -129
  118. package/types/pkg/redis.d.ts +138 -13
  119. package/types/pkg/types.d.ts +11 -2
  120. package/types/platforms/cloudflare.d.ts +2 -2
  121. package/types/platforms/fastly.d.ts +1 -1
  122. package/types/platforms/node_with_fetch.d.ts +1 -1
  123. package/types/platforms/nodejs.d.ts +1 -1
  124. package/types/version.d.ts +1 -1
@@ -1,4 +1,4 @@
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, 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";
1
+ import { AppendCommand, BitCountCommand, BitOpCommand, BitPosCommand, DBSizeCommand, DecrByCommand, DecrCommand, DelCommand, EchoCommand, EvalCommand, EvalshaCommand, ExistsCommand, ExpireAtCommand, ExpireCommand, FlushAllCommand, FlushDBCommand, GeoHashCommand, 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, ZUnionCommand, ZUnionStoreCommand, } from "./commands/mod.js";
2
2
  import { UpstashError } from "./error.js";
3
3
  import { ZMScoreCommand } from "./commands/zmscore.js";
4
4
  import { HRandFieldCommand } from "./commands/hrandfield.js";
@@ -31,7 +31,7 @@ import { ZDiffStoreCommand } from "./commands/zdiffstore.js";
31
31
  * const res = await p.set("key","value").get("key").exec()
32
32
  * ```
33
33
  *
34
- * It's not possible to infer correct types with a dynamic pipeline, so you can
34
+ * Return types are inferred if all commands are chained, but you can still
35
35
  * override the response type manually:
36
36
  * ```ts
37
37
  * redis.pipeline()
@@ -72,9 +72,11 @@ export class Pipeline {
72
72
  *
73
73
  * Returns an array with the results of all pipelined commands.
74
74
  *
75
- * You can define a return type manually to make working in typescript easier
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:
76
76
  * ```ts
77
- * redis.pipeline().get("key").exec<[{ greeting: string }]>()
77
+ * const p = redis.pipeline()
78
+ * p.get("key")
79
+ * const result = p.exec<[{ greeting: string }]>()
78
80
  * ```
79
81
  */
80
82
  Object.defineProperty(this, "exec", {
@@ -1183,17 +1185,127 @@ export class Pipeline {
1183
1185
  writable: true,
1184
1186
  value: (...args) => this.chain(new ZUnionStoreCommand(args, this.commandOptions))
1185
1187
  });
1188
+ /**
1189
+ * @see https://redis.io/commands/zunion
1190
+ */
1191
+ Object.defineProperty(this, "zunion", {
1192
+ enumerable: true,
1193
+ configurable: true,
1194
+ writable: true,
1195
+ value: (...args) => this.chain(new ZUnionCommand(args, this.commandOptions))
1196
+ });
1186
1197
  this.client = opts.client;
1187
- this.commands = [];
1198
+ 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
1188
1199
  this.commandOptions = opts.commandOptions;
1189
1200
  this.multiExec = opts.multiExec ?? false;
1190
1201
  }
1191
1202
  /**
1192
- * Pushes a command into the pipelien and returns a chainable instance of the
1203
+ * Returns the length of pipeline before the execution
1204
+ */
1205
+ length() {
1206
+ return this.commands.length;
1207
+ }
1208
+ /**
1209
+ * Pushes a command into the pipeline and returns a chainable instance of the
1193
1210
  * pipeline
1194
1211
  */
1195
1212
  chain(command) {
1196
1213
  this.commands.push(command);
1197
- return this;
1214
+ return this; // TS thinks we're returning Pipeline<[]> here, because we're not creating a new instance of the class, hence the cast
1215
+ }
1216
+ /**
1217
+ * @see https://redis.io/commands/?group=json
1218
+ */
1219
+ get json() {
1220
+ return {
1221
+ /**
1222
+ * @see https://redis.io/commands/json.arrappend
1223
+ */
1224
+ arrappend: (...args) => this.chain(new JsonArrAppendCommand(args, this.commandOptions)),
1225
+ /**
1226
+ * @see https://redis.io/commands/json.arrindex
1227
+ */
1228
+ arrindex: (...args) => this.chain(new JsonArrIndexCommand(args, this.commandOptions)),
1229
+ /**
1230
+ * @see https://redis.io/commands/json.arrinsert
1231
+ */
1232
+ arrinsert: (...args) => this.chain(new JsonArrInsertCommand(args, this.commandOptions)),
1233
+ /**
1234
+ * @see https://redis.io/commands/json.arrlen
1235
+ */
1236
+ arrlen: (...args) => this.chain(new JsonArrLenCommand(args, this.commandOptions)),
1237
+ /**
1238
+ * @see https://redis.io/commands/json.arrpop
1239
+ */
1240
+ arrpop: (...args) => this.chain(new JsonArrPopCommand(args, this.commandOptions)),
1241
+ /**
1242
+ * @see https://redis.io/commands/json.arrtrim
1243
+ */
1244
+ arrtrim: (...args) => this.chain(new JsonArrTrimCommand(args, this.commandOptions)),
1245
+ /**
1246
+ * @see https://redis.io/commands/json.clear
1247
+ */
1248
+ clear: (...args) => this.chain(new JsonClearCommand(args, this.commandOptions)),
1249
+ /**
1250
+ * @see https://redis.io/commands/json.del
1251
+ */
1252
+ del: (...args) => this.chain(new JsonDelCommand(args, this.commandOptions)),
1253
+ /**
1254
+ * @see https://redis.io/commands/json.forget
1255
+ */
1256
+ forget: (...args) => this.chain(new JsonForgetCommand(args, this.commandOptions)),
1257
+ /**
1258
+ * @see https://redis.io/commands/geohash
1259
+ */
1260
+ geohash: (...args) => new GeoHashCommand(args, this.commandOptions).exec(this.client),
1261
+ /**
1262
+ * @see https://redis.io/commands/json.get
1263
+ */
1264
+ get: (...args) => this.chain(new JsonGetCommand(args, this.commandOptions)),
1265
+ /**
1266
+ * @see https://redis.io/commands/json.mget
1267
+ */
1268
+ mget: (...args) => this.chain(new JsonMGetCommand(args, this.commandOptions)),
1269
+ /**
1270
+ * @see https://redis.io/commands/json.numincrby
1271
+ */
1272
+ numincrby: (...args) => this.chain(new JsonNumIncrByCommand(args, this.commandOptions)),
1273
+ /**
1274
+ * @see https://redis.io/commands/json.nummultby
1275
+ */
1276
+ nummultby: (...args) => this.chain(new JsonNumMultByCommand(args, this.commandOptions)),
1277
+ /**
1278
+ * @see https://redis.io/commands/json.objkeys
1279
+ */
1280
+ objkeys: (...args) => this.chain(new JsonObjKeysCommand(args, this.commandOptions)),
1281
+ /**
1282
+ * @see https://redis.io/commands/json.objlen
1283
+ */
1284
+ objlen: (...args) => this.chain(new JsonObjLenCommand(args, this.commandOptions)),
1285
+ /**
1286
+ * @see https://redis.io/commands/json.resp
1287
+ */
1288
+ resp: (...args) => this.chain(new JsonRespCommand(args, this.commandOptions)),
1289
+ /**
1290
+ * @see https://redis.io/commands/json.set
1291
+ */
1292
+ set: (...args) => this.chain(new JsonSetCommand(args, this.commandOptions)),
1293
+ /**
1294
+ * @see https://redis.io/commands/json.strappend
1295
+ */
1296
+ strappend: (...args) => this.chain(new JsonStrAppendCommand(args, this.commandOptions)),
1297
+ /**
1298
+ * @see https://redis.io/commands/json.strlen
1299
+ */
1300
+ strlen: (...args) => this.chain(new JsonStrLenCommand(args, this.commandOptions)),
1301
+ /**
1302
+ * @see https://redis.io/commands/json.toggle
1303
+ */
1304
+ toggle: (...args) => this.chain(new JsonToggleCommand(args, this.commandOptions)),
1305
+ /**
1306
+ * @see https://redis.io/commands/json.type
1307
+ */
1308
+ type: (...args) => this.chain(new JsonTypeCommand(args, this.commandOptions)),
1309
+ };
1198
1310
  }
1199
1311
  }
package/esm/pkg/redis.js CHANGED
@@ -1,8 +1,9 @@
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, 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";
1
+ import { AppendCommand, BitCountCommand, BitOpCommand, BitPosCommand, DBSizeCommand, DecrByCommand, DecrCommand, DelCommand, EchoCommand, EvalCommand, EvalshaCommand, ExistsCommand, ExpireAtCommand, ExpireCommand, FlushAllCommand, FlushDBCommand, GeoAddCommand, 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, ZUnionCommand, ZUnionStoreCommand, } from "./commands/mod.js";
2
2
  import { Pipeline } from "./pipeline.js";
3
3
  import { Script } from "./script.js";
4
4
  import { ZMScoreCommand } from "./commands/zmscore.js";
5
5
  import { ZDiffStoreCommand } from "./commands/zdiffstore.js";
6
+ import { GeoHashCommand } from "./commands/geo_hash.js";
6
7
  /**
7
8
  * Serverless redis client for upstash.
8
9
  */
@@ -31,6 +32,12 @@ export class Redis {
31
32
  writable: true,
32
33
  value: void 0
33
34
  });
35
+ Object.defineProperty(this, "enableTelemetry", {
36
+ enumerable: true,
37
+ configurable: true,
38
+ writable: true,
39
+ value: void 0
40
+ });
34
41
  /**
35
42
  * Wrap a new middleware around the HTTP client.
36
43
  */
@@ -51,6 +58,9 @@ export class Redis {
51
58
  configurable: true,
52
59
  writable: true,
53
60
  value: (telemetry) => {
61
+ if (!this.enableTelemetry) {
62
+ return;
63
+ }
54
64
  try {
55
65
  // @ts-ignore - The `Requester` interface does not know about this method but it will be there
56
66
  // as long as the user uses the standard HttpClient
@@ -996,6 +1006,24 @@ export class Redis {
996
1006
  writable: true,
997
1007
  value: (...args) => new UnlinkCommand(args, this.opts).exec(this.client)
998
1008
  });
1009
+ /**
1010
+ * @see https://redis.io/commands/xadd
1011
+ */
1012
+ Object.defineProperty(this, "xadd", {
1013
+ enumerable: true,
1014
+ configurable: true,
1015
+ writable: true,
1016
+ value: (...args) => new XAddCommand(args, this.opts).exec(this.client)
1017
+ });
1018
+ /**
1019
+ * @see https://redis.io/commands/xrange
1020
+ */
1021
+ Object.defineProperty(this, "xrange", {
1022
+ enumerable: true,
1023
+ configurable: true,
1024
+ writable: true,
1025
+ value: (...args) => new XRangeCommand(args, this.opts).exec(this.client)
1026
+ });
999
1027
  /**
1000
1028
  * @see https://redis.io/commands/zadd
1001
1029
  */
@@ -1172,6 +1200,15 @@ export class Redis {
1172
1200
  writable: true,
1173
1201
  value: (key, member) => new ZScoreCommand([key, member], this.opts).exec(this.client)
1174
1202
  });
1203
+ /**
1204
+ * @see https://redis.io/commands/zunion
1205
+ */
1206
+ Object.defineProperty(this, "zunion", {
1207
+ enumerable: true,
1208
+ configurable: true,
1209
+ writable: true,
1210
+ value: (...args) => new ZUnionCommand(args, this.opts).exec(this.client)
1211
+ });
1175
1212
  /**
1176
1213
  * @see https://redis.io/commands/zunionstore
1177
1214
  */
@@ -1183,6 +1220,103 @@ export class Redis {
1183
1220
  });
1184
1221
  this.client = client;
1185
1222
  this.opts = opts;
1223
+ this.enableTelemetry = opts?.enableTelemetry ?? true;
1224
+ }
1225
+ get json() {
1226
+ return {
1227
+ /**
1228
+ * @see https://redis.io/commands/json.arrappend
1229
+ */
1230
+ arrappend: (...args) => new JsonArrAppendCommand(args, this.opts).exec(this.client),
1231
+ /**
1232
+ * @see https://redis.io/commands/json.arrindex
1233
+ */
1234
+ arrindex: (...args) => new JsonArrIndexCommand(args, this.opts).exec(this.client),
1235
+ /**
1236
+ * @see https://redis.io/commands/json.arrinsert
1237
+ */
1238
+ arrinsert: (...args) => new JsonArrInsertCommand(args, this.opts).exec(this.client),
1239
+ /**
1240
+ * @see https://redis.io/commands/json.arrlen
1241
+ */
1242
+ arrlen: (...args) => new JsonArrLenCommand(args, this.opts).exec(this.client),
1243
+ /**
1244
+ * @see https://redis.io/commands/json.arrpop
1245
+ */
1246
+ arrpop: (...args) => new JsonArrPopCommand(args, this.opts).exec(this.client),
1247
+ /**
1248
+ * @see https://redis.io/commands/json.arrtrim
1249
+ */
1250
+ arrtrim: (...args) => new JsonArrTrimCommand(args, this.opts).exec(this.client),
1251
+ /**
1252
+ * @see https://redis.io/commands/json.clear
1253
+ */
1254
+ clear: (...args) => new JsonClearCommand(args, this.opts).exec(this.client),
1255
+ /**
1256
+ * @see https://redis.io/commands/json.del
1257
+ */
1258
+ del: (...args) => new JsonDelCommand(args, this.opts).exec(this.client),
1259
+ /**
1260
+ * @see https://redis.io/commands/json.forget
1261
+ */
1262
+ forget: (...args) => new JsonForgetCommand(args, this.opts).exec(this.client),
1263
+ /**
1264
+ * @see https://redis.io/commands/geoadd
1265
+ */
1266
+ geoadd: (...args) => new GeoAddCommand(args, this.opts).exec(this.client),
1267
+ /**
1268
+ * @see https://redis.io/commands/geohash
1269
+ */
1270
+ geohash: (...args) => new GeoHashCommand(args, this.opts).exec(this.client),
1271
+ /**
1272
+ * @see https://redis.io/commands/json.get
1273
+ */
1274
+ get: (...args) => new JsonGetCommand(args, this.opts).exec(this.client),
1275
+ /**
1276
+ * @see https://redis.io/commands/json.mget
1277
+ */
1278
+ mget: (...args) => new JsonMGetCommand(args, this.opts).exec(this.client),
1279
+ /**
1280
+ * @see https://redis.io/commands/json.numincrby
1281
+ */
1282
+ numincrby: (...args) => new JsonNumIncrByCommand(args, this.opts).exec(this.client),
1283
+ /**
1284
+ * @see https://redis.io/commands/json.nummultby
1285
+ */
1286
+ nummultby: (...args) => new JsonNumMultByCommand(args, this.opts).exec(this.client),
1287
+ /**
1288
+ * @see https://redis.io/commands/json.objkeys
1289
+ */
1290
+ objkeys: (...args) => new JsonObjKeysCommand(args, this.opts).exec(this.client),
1291
+ /**
1292
+ * @see https://redis.io/commands/json.objlen
1293
+ */
1294
+ objlen: (...args) => new JsonObjLenCommand(args, this.opts).exec(this.client),
1295
+ /**
1296
+ * @see https://redis.io/commands/json.resp
1297
+ */
1298
+ resp: (...args) => new JsonRespCommand(args, this.opts).exec(this.client),
1299
+ /**
1300
+ * @see https://redis.io/commands/json.set
1301
+ */
1302
+ set: (...args) => new JsonSetCommand(args, this.opts).exec(this.client),
1303
+ /**
1304
+ * @see https://redis.io/commands/json.strappend
1305
+ */
1306
+ strappend: (...args) => new JsonStrAppendCommand(args, this.opts).exec(this.client),
1307
+ /**
1308
+ * @see https://redis.io/commands/json.strlen
1309
+ */
1310
+ strlen: (...args) => new JsonStrLenCommand(args, this.opts).exec(this.client),
1311
+ /**
1312
+ * @see https://redis.io/commands/json.toggle
1313
+ */
1314
+ toggle: (...args) => new JsonToggleCommand(args, this.opts).exec(this.client),
1315
+ /**
1316
+ * @see https://redis.io/commands/json.type
1317
+ */
1318
+ type: (...args) => new JsonTypeCommand(args, this.opts).exec(this.client),
1319
+ };
1186
1320
  }
1187
1321
  createScript(script) {
1188
1322
  return new Script(this, script);
@@ -27,21 +27,21 @@ export class Redis extends core.Redis {
27
27
  /\r|\n/.test(config.token)) {
28
28
  console.warn("The redis token contains whitespace or newline, which can cause errors!");
29
29
  }
30
- const telemetry = {};
31
- if (!env?.UPSTASH_DISABLE_TELEMETRY) {
32
- telemetry.platform = "cloudflare";
33
- telemetry.sdk = `@upstash/redis@${VERSION}`;
34
- }
35
30
  const client = new HttpClient({
36
31
  retry: config.retry,
37
32
  baseUrl: config.url,
38
33
  headers: { authorization: `Bearer ${config.token}` },
39
34
  responseEncoding: config.responseEncoding,
40
- telemetry,
41
35
  });
42
36
  super(client, {
37
+ enableTelemetry: !env?.UPSTASH_DISABLE_TELEMETRY,
43
38
  automaticDeserialization: config.automaticDeserialization,
44
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
+ });
45
45
  }
46
46
  /*
47
47
  * Create a new Upstash Redis instance from environment variables on cloudflare.
@@ -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
  */
@@ -37,5 +38,9 @@ export class Redis extends core.Redis {
37
38
  super(client, {
38
39
  automaticDeserialization: config.automaticDeserialization,
39
40
  });
41
+ this.addTelemetry({
42
+ sdk: `@upstash/redis@${VERSION}`,
43
+ platform: "fastly",
44
+ });
40
45
  }
41
46
  }
@@ -35,26 +35,25 @@ export class Redis extends core.Redis {
35
35
  /\r|\n/.test(configOrRequester.token)) {
36
36
  console.warn("The redis token contains whitespace or newline, which can cause errors!");
37
37
  }
38
- const telemetry = {};
39
- if (!process.env.UPSTASH_DISABLE_TELEMETRY) {
40
- telemetry.runtime = `node@${process.version}`;
41
- telemetry.platform = process.env.VERCEL
42
- ? "vercel"
43
- : process.env.AWS_REGION
44
- ? "aws"
45
- : "unknown";
46
- telemetry.sdk = `@upstash/redis@${VERSION}`;
47
- }
48
38
  const client = new HttpClient({
49
39
  baseUrl: configOrRequester.url,
50
40
  retry: configOrRequester.retry,
51
41
  headers: { authorization: `Bearer ${configOrRequester.token}` },
52
42
  // agent: configOrRequester.agent,
53
43
  responseEncoding: configOrRequester.responseEncoding,
54
- telemetry,
55
44
  });
56
45
  super(client, {
57
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}`,
58
57
  });
59
58
  }
60
59
  /**
@@ -29,26 +29,28 @@ export class Redis extends core.Redis {
29
29
  /\r|\n/.test(configOrRequester.token)) {
30
30
  console.warn("The redis token contains whitespace or newline, which can cause errors!");
31
31
  }
32
- const telemetry = {};
33
- if (!process.env.UPSTASH_DISABLE_TELEMETRY) {
34
- telemetry.runtime = `node@${process.version}`;
35
- telemetry.platform = process.env.VERCEL
36
- ? "vercel"
37
- : process.env.AWS_REGION
38
- ? "aws"
39
- : "unknown";
40
- telemetry.sdk = `@upstash/redis@${VERSION}`;
41
- }
42
32
  const client = new HttpClient({
43
33
  baseUrl: configOrRequester.url,
44
34
  retry: configOrRequester.retry,
45
35
  headers: { authorization: `Bearer ${configOrRequester.token}` },
46
36
  agent: configOrRequester.agent,
47
37
  responseEncoding: configOrRequester.responseEncoding,
48
- telemetry,
38
+ cache: configOrRequester.cache || "no-store",
49
39
  });
50
40
  super(client, {
51
41
  automaticDeserialization: configOrRequester.automaticDeserialization,
42
+ enableTelemetry: !process.env.UPSTASH_DISABLE_TELEMETRY,
43
+ });
44
+ this.addTelemetry({
45
+ runtime: typeof EdgeRuntime === "string"
46
+ ? "edge-light"
47
+ : `node@${process.version}`,
48
+ platform: process.env.VERCEL
49
+ ? "vercel"
50
+ : process.env.AWS_REGION
51
+ ? "aws"
52
+ : "unknown",
53
+ sdk: `@upstash/redis@${VERSION}`,
52
54
  });
53
55
  }
54
56
  /**
package/esm/version.js CHANGED
@@ -1 +1 @@
1
- export const VERSION = "v0.0.0-ci.bafaa360-20230119";
1
+ export const VERSION = "v0.0.0-ci.bc4f4560-20231018";
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.bafaa360-20230119",
6
+ "version": "v0.0.0-ci.bc4f4560-20231018",
7
7
  "description": "An HTTP/REST based Redis client built on top of Upstash REST API.",
8
8
  "repository": {
9
9
  "type": "git",
@@ -27,37 +27,70 @@
27
27
  },
28
28
  "typesVersions": {
29
29
  "*": {
30
- "nodejs": "./types/platforms/nodejs.d.ts",
31
- "cloudflare": "./types/platforms/cloudflare.d.ts",
32
- "fastly": "./types/platforms/fastly.d.ts",
33
- "with-fetch": "./types/platforms/node_with_fetch.d.ts"
30
+ "nodejs": [
31
+ "./types/platforms/nodejs.d.ts"
32
+ ],
33
+ "cloudflare": [
34
+ "./types/platforms/cloudflare.d.ts"
35
+ ],
36
+ "fastly": [
37
+ "./types/platforms/fastly.d.ts"
38
+ ],
39
+ "with-fetch": [
40
+ "./types/platforms/node_with_fetch.d.ts"
41
+ ]
34
42
  }
35
43
  },
36
44
  "exports": {
37
45
  ".": {
38
- "import": "./esm/platforms/nodejs.js",
39
- "require": "./script/platforms/nodejs.js",
40
- "types": "./types/platforms/nodejs.d.ts"
46
+ "import": {
47
+ "types": "./types/platforms/nodejs.d.ts",
48
+ "default": "./esm/platforms/nodejs.js"
49
+ },
50
+ "require": {
51
+ "types": "./types/platforms/nodejs.d.ts",
52
+ "default": "./script/platforms/nodejs.js"
53
+ }
41
54
  },
42
55
  "./nodejs": {
43
- "import": "./esm/platforms/nodejs.js",
44
- "require": "./script/platforms/nodejs.js",
45
- "types": "./types/platforms/nodejs.d.ts"
56
+ "import": {
57
+ "types": "./types/platforms/nodejs.d.ts",
58
+ "default": "./esm/platforms/nodejs.js"
59
+ },
60
+ "require": {
61
+ "types": "./types/platforms/nodejs.d.ts",
62
+ "default": "./script/platforms/nodejs.js"
63
+ }
46
64
  },
47
65
  "./cloudflare": {
48
- "import": "./esm/platforms/cloudflare.js",
49
- "require": "./script/platforms/cloudflare.js",
50
- "types": "./types/platforms/cloudflare.d.ts"
66
+ "import": {
67
+ "types": "./types/platforms/cloudflare.d.ts",
68
+ "default": "./esm/platforms/cloudflare.js"
69
+ },
70
+ "require": {
71
+ "types": "./types/platforms/cloudflare.d.ts",
72
+ "default": "./script/platforms/cloudflare.js"
73
+ }
51
74
  },
52
75
  "./fastly": {
53
- "import": "./esm/platforms/fastly.js",
54
- "require": "./script/platforms/fastly.js",
55
- "types": "./types/platforms/fastly.d.ts"
76
+ "import": {
77
+ "types": "./types/platforms/fastly.d.ts",
78
+ "default": "./esm/platforms/fastly.js"
79
+ },
80
+ "require": {
81
+ "types": "./types/platforms/fastly.d.ts",
82
+ "default": "./script/platforms/fastly.js"
83
+ }
56
84
  },
57
85
  "./with-fetch": {
58
- "import": "./esm/platforms/node_with_fetch.js",
59
- "require": "./script/platforms/node_with_fetch.js",
60
- "types": "./types/platforms/node_with_fetch.d.ts"
86
+ "import": {
87
+ "types": "./types/platforms/node_with_fetch.d.ts",
88
+ "default": "./esm/platforms/node_with_fetch.js"
89
+ },
90
+ "require": {
91
+ "types": "./types/platforms/node_with_fetch.d.ts",
92
+ "default": "./script/platforms/node_with_fetch.js"
93
+ }
61
94
  }
62
95
  }
63
96
  }
@@ -3,7 +3,16 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.Command = void 0;
4
4
  const error_js_1 = require("../error.js");
5
5
  const util_js_1 = require("../util.js");
6
- const defaultSerializer = (c) => typeof c === "string" ? c : JSON.stringify(c);
6
+ const defaultSerializer = (c) => {
7
+ switch (typeof c) {
8
+ case "string":
9
+ case "number":
10
+ case "boolean":
11
+ return c;
12
+ default:
13
+ return JSON.stringify(c);
14
+ }
15
+ };
7
16
  /**
8
17
  * Command offers default (de)serialization and the exec method to all commands.
9
18
  *
@@ -40,7 +49,7 @@ class Command {
40
49
  opts.automaticDeserialization
41
50
  ? opts?.deserialize ?? util_js_1.parseResponse
42
51
  : (x) => x;
43
- this.command = command.map(this.serialize);
52
+ this.command = command.map((c) => this.serialize(c));
44
53
  }
45
54
  /**
46
55
  * Execute the command using a client.
@@ -53,7 +62,7 @@ class Command {
53
62
  throw new error_js_1.UpstashError(error);
54
63
  }
55
64
  if (typeof result === "undefined") {
56
- throw new Error(`Request did not return a result`);
65
+ throw new Error("Request did not return a result");
57
66
  }
58
67
  return this.deserialize(result);
59
68
  }
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.GeoAddCommand = void 0;
4
+ const command_js_1 = require("./command.js");
5
+ /**
6
+ * @see https://redis.io/commands/geoadd
7
+ */
8
+ class GeoAddCommand extends command_js_1.Command {
9
+ constructor([key, arg1, ...arg2], opts) {
10
+ const command = ["geoadd", key];
11
+ if ("nx" in arg1 && arg1.nx) {
12
+ command.push("nx");
13
+ }
14
+ else if ("xx" in arg1 && arg1.xx) {
15
+ command.push("xx");
16
+ }
17
+ if ("ch" in arg1 && arg1.ch) {
18
+ command.push("ch");
19
+ }
20
+ if ("latitude" in arg1 && arg1.latitude) {
21
+ command.push(arg1.longitude, arg1.latitude, arg1.member);
22
+ }
23
+ command.push(...arg2.flatMap(({ latitude, longitude, member }) => [
24
+ longitude,
25
+ latitude,
26
+ member,
27
+ ]));
28
+ super(command, opts);
29
+ }
30
+ }
31
+ exports.GeoAddCommand = GeoAddCommand;
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.GeoHashCommand = void 0;
4
+ const command_js_1 = require("./command.js");
5
+ /**
6
+ * @see https://redis.io/commands/geohash
7
+ */
8
+ class GeoHashCommand extends command_js_1.Command {
9
+ constructor(cmd, opts) {
10
+ const [key] = cmd;
11
+ // Check if the second argument is an array of strings (members).
12
+ // If it is, use it directly; if not, it means the members were passed individually,
13
+ // so we slice the cmd from the second element onwards to get the members.
14
+ const members = Array.isArray(cmd[1]) ? cmd[1] : cmd.slice(1);
15
+ super(["GEOHASH", key, ...members], opts);
16
+ }
17
+ }
18
+ exports.GeoHashCommand = GeoHashCommand;