@upstash/redis 0.0.0-ci.608697de-20221215 → 0.0.0-ci.62b04fa8-20231019

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 (134) hide show
  1. package/README.md +8 -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_dist.js +9 -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/lmove.js +9 -0
  28. package/esm/pkg/commands/mod.js +28 -0
  29. package/esm/pkg/commands/set.js +1 -1
  30. package/esm/pkg/commands/smismember.js +9 -0
  31. package/esm/pkg/commands/xadd.js +26 -0
  32. package/esm/pkg/commands/xrange.js +36 -0
  33. package/esm/pkg/commands/zdiffstore.js +9 -0
  34. package/esm/pkg/commands/zunion.js +30 -0
  35. package/esm/pkg/http.js +42 -25
  36. package/esm/pkg/pipeline.js +151 -7
  37. package/esm/pkg/redis.js +180 -1
  38. package/esm/platforms/cloudflare.js +6 -6
  39. package/esm/platforms/fastly.js +5 -0
  40. package/esm/platforms/node_with_fetch.js +23 -11
  41. package/esm/platforms/nodejs.js +21 -11
  42. package/esm/version.js +1 -1
  43. package/package.json +53 -20
  44. package/script/pkg/commands/command.js +12 -3
  45. package/script/pkg/commands/geo_add.js +31 -0
  46. package/script/pkg/commands/geo_dist.js +13 -0
  47. package/script/pkg/commands/hgetall.js +9 -1
  48. package/script/pkg/commands/json_arrappend.js +13 -0
  49. package/script/pkg/commands/json_arrindex.js +13 -0
  50. package/script/pkg/commands/json_arrinsert.js +13 -0
  51. package/script/pkg/commands/json_arrlen.js +13 -0
  52. package/script/pkg/commands/json_arrpop.js +13 -0
  53. package/script/pkg/commands/json_arrtrim.js +16 -0
  54. package/script/pkg/commands/json_clear.js +13 -0
  55. package/script/pkg/commands/json_del.js +13 -0
  56. package/script/pkg/commands/json_forget.js +13 -0
  57. package/script/pkg/commands/json_get.js +34 -0
  58. package/script/pkg/commands/json_mget.js +13 -0
  59. package/script/pkg/commands/json_numincrby.js +13 -0
  60. package/script/pkg/commands/json_nummultby.js +13 -0
  61. package/script/pkg/commands/json_objkeys.js +13 -0
  62. package/script/pkg/commands/json_objlen.js +13 -0
  63. package/script/pkg/commands/json_resp.js +13 -0
  64. package/script/pkg/commands/json_set.js +22 -0
  65. package/script/pkg/commands/json_strappend.js +13 -0
  66. package/script/pkg/commands/json_strlen.js +13 -0
  67. package/script/pkg/commands/json_toggle.js +13 -0
  68. package/script/pkg/commands/json_type.js +13 -0
  69. package/script/pkg/commands/lmove.js +13 -0
  70. package/script/pkg/commands/mod.js +28 -0
  71. package/script/pkg/commands/set.js +1 -1
  72. package/script/pkg/commands/smismember.js +13 -0
  73. package/script/pkg/commands/xadd.js +30 -0
  74. package/script/pkg/commands/xrange.js +40 -0
  75. package/script/pkg/commands/zdiffstore.js +13 -0
  76. package/script/pkg/commands/zunion.js +34 -0
  77. package/script/pkg/http.js +42 -25
  78. package/script/pkg/pipeline.js +150 -6
  79. package/script/pkg/redis.js +179 -0
  80. package/script/platforms/cloudflare.js +6 -6
  81. package/script/platforms/fastly.js +5 -0
  82. package/script/platforms/node_with_fetch.js +23 -11
  83. package/script/platforms/nodejs.js +21 -11
  84. package/script/version.js +1 -1
  85. package/types/pkg/commands/command.d.ts +5 -5
  86. package/types/pkg/commands/geo_add.d.ts +25 -0
  87. package/types/pkg/commands/geo_dist.d.ts +12 -0
  88. package/types/pkg/commands/hdel.d.ts +1 -1
  89. package/types/pkg/commands/json_arrappend.d.ts +7 -0
  90. package/types/pkg/commands/json_arrindex.d.ts +13 -0
  91. package/types/pkg/commands/json_arrinsert.d.ts +7 -0
  92. package/types/pkg/commands/json_arrlen.d.ts +7 -0
  93. package/types/pkg/commands/json_arrpop.d.ts +7 -0
  94. package/types/pkg/commands/json_arrtrim.d.ts +7 -0
  95. package/types/pkg/commands/json_clear.d.ts +7 -0
  96. package/types/pkg/commands/json_del.d.ts +7 -0
  97. package/types/pkg/commands/json_forget.d.ts +7 -0
  98. package/types/pkg/commands/json_get.d.ts +15 -0
  99. package/types/pkg/commands/json_mget.d.ts +7 -0
  100. package/types/pkg/commands/json_numincrby.d.ts +7 -0
  101. package/types/pkg/commands/json_nummultby.d.ts +7 -0
  102. package/types/pkg/commands/json_objkeys.d.ts +7 -0
  103. package/types/pkg/commands/json_objlen.d.ts +7 -0
  104. package/types/pkg/commands/json_resp.d.ts +7 -0
  105. package/types/pkg/commands/json_set.d.ts +18 -0
  106. package/types/pkg/commands/json_strappend.d.ts +7 -0
  107. package/types/pkg/commands/json_strlen.d.ts +7 -0
  108. package/types/pkg/commands/json_toggle.d.ts +7 -0
  109. package/types/pkg/commands/json_type.d.ts +7 -0
  110. package/types/pkg/commands/lmove.d.ts +12 -0
  111. package/types/pkg/commands/mod.d.ts +28 -0
  112. package/types/pkg/commands/scan.d.ts +1 -1
  113. package/types/pkg/commands/script_flush.d.ts +1 -1
  114. package/types/pkg/commands/set.d.ts +3 -3
  115. package/types/pkg/commands/smembers.d.ts +2 -2
  116. package/types/pkg/commands/smismember.d.ts +7 -0
  117. package/types/pkg/commands/type.d.ts +1 -1
  118. package/types/pkg/commands/xadd.d.ts +31 -0
  119. package/types/pkg/commands/xrange.d.ts +9 -0
  120. package/types/pkg/commands/zadd.d.ts +3 -3
  121. package/types/pkg/commands/zdiffstore.d.ts +7 -0
  122. package/types/pkg/commands/zinterstore.d.ts +1 -1
  123. package/types/pkg/commands/zrange.d.ts +1 -1
  124. package/types/pkg/commands/zunion.d.ts +29 -0
  125. package/types/pkg/commands/zunionstore.d.ts +1 -1
  126. package/types/pkg/http.d.ts +16 -23
  127. package/types/pkg/pipeline.d.ts +255 -126
  128. package/types/pkg/redis.d.ts +153 -13
  129. package/types/pkg/types.d.ts +27 -1
  130. package/types/platforms/cloudflare.d.ts +2 -2
  131. package/types/platforms/fastly.d.ts +1 -1
  132. package/types/platforms/node_with_fetch.d.ts +1 -1
  133. package/types/platforms/nodejs.d.ts +1 -1
  134. package/types/version.d.ts +1 -1
package/esm/pkg/http.js CHANGED
@@ -28,22 +28,14 @@ export class HttpClient {
28
28
  this.options = {
29
29
  backend: config.options?.backend,
30
30
  agent: config.agent,
31
- responseEncoding: config.responseEncoding ?? "base64", // default to base64
31
+ responseEncoding: config.responseEncoding ?? "base64",
32
+ cache: config.cache,
32
33
  };
33
34
  this.baseUrl = config.baseUrl.replace(/\/$/, "");
34
35
  this.headers = {
35
36
  "Content-Type": "application/json",
36
37
  ...config.headers,
37
38
  };
38
- if (config.telemetry?.runtime) {
39
- this.headers["Upstash-Telemetry-Runtime"] = config.telemetry.runtime;
40
- }
41
- if (config.telemetry?.platform) {
42
- this.headers["Upstash-Telemetry-Platform"] = config.telemetry.platform;
43
- }
44
- if (config.telemetry?.sdk) {
45
- this.headers["Upstash-Telemetry-Sdk"] = config.telemetry.sdk;
46
- }
47
39
  if (this.options.responseEncoding === "base64") {
48
40
  this.headers["Upstash-Encoding"] = "base64";
49
41
  }
@@ -61,8 +53,26 @@ export class HttpClient {
61
53
  };
62
54
  }
63
55
  }
56
+ mergeTelemetry(telemetry) {
57
+ function merge(obj, key, value) {
58
+ if (!value) {
59
+ return obj;
60
+ }
61
+ if (obj[key]) {
62
+ obj[key] = [obj[key], value].join(",");
63
+ }
64
+ else {
65
+ obj[key] = value;
66
+ }
67
+ return obj;
68
+ }
69
+ this.headers = merge(this.headers, "Upstash-Telemetry-Runtime", telemetry.runtime);
70
+ this.headers = merge(this.headers, "Upstash-Telemetry-Platform", telemetry.platform);
71
+ this.headers = merge(this.headers, "Upstash-Telemetry-Sdk", telemetry.sdk);
72
+ }
64
73
  async request(req) {
65
74
  const requestOptions = {
75
+ cache: this.options.cache,
66
76
  method: "POST",
67
77
  headers: this.headers,
68
78
  body: JSON.stringify(req.body),
@@ -90,10 +100,17 @@ export class HttpClient {
90
100
  }
91
101
  const body = (await res.json());
92
102
  if (!res.ok) {
93
- throw new UpstashError(body.error);
103
+ throw new UpstashError(`${body.error}, command was: ${JSON.stringify(req.body)}`);
94
104
  }
95
105
  if (this.options?.responseEncoding === "base64") {
96
- return Array.isArray(body) ? body.map(decode) : decode(body);
106
+ if (Array.isArray(body)) {
107
+ return body.map(({ result, error }) => ({
108
+ result: decode(result),
109
+ error,
110
+ }));
111
+ }
112
+ const result = decode(body.result);
113
+ return { result, error: body.error };
97
114
  }
98
115
  return body;
99
116
  }
@@ -115,28 +132,28 @@ function base64decode(b64) {
115
132
  catch {
116
133
  dec = b64;
117
134
  }
118
- try {
119
- return decodeURIComponent(dec);
120
- }
121
- catch {
122
- return dec;
123
- }
135
+ return dec;
136
+ // try {
137
+ // return decodeURIComponent(dec);
138
+ // } catch {
139
+ // return dec;
140
+ // }
124
141
  }
125
142
  function decode(raw) {
126
143
  let result = undefined;
127
- switch (typeof raw.result) {
144
+ switch (typeof raw) {
128
145
  case "undefined":
129
146
  return raw;
130
147
  case "number": {
131
- result = raw.result;
148
+ result = raw;
132
149
  break;
133
150
  }
134
151
  case "object": {
135
- if (Array.isArray(raw.result)) {
136
- result = raw.result.map((v) => typeof v === "string"
152
+ if (Array.isArray(raw)) {
153
+ result = raw.map((v) => typeof v === "string"
137
154
  ? base64decode(v)
138
155
  : Array.isArray(v)
139
- ? v.map(base64decode)
156
+ ? v.map(decode)
140
157
  : v);
141
158
  }
142
159
  else {
@@ -147,11 +164,11 @@ function decode(raw) {
147
164
  break;
148
165
  }
149
166
  case "string": {
150
- result = raw.result === "OK" ? "OK" : base64decode(raw.result);
167
+ result = raw === "OK" ? "OK" : base64decode(raw);
151
168
  break;
152
169
  }
153
170
  default:
154
171
  break;
155
172
  }
156
- return { result, error: raw.error };
173
+ return result;
157
174
  }
@@ -1,7 +1,8 @@
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, 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, GeoAddCommand, GeoDistCommand, 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";
5
+ import { ZDiffStoreCommand } from "./commands/zdiffstore.js";
5
6
  /**
6
7
  * Upstash REST API supports command pipelining to send multiple commands in
7
8
  * batch, instead of sending each command one by one and waiting for a response.
@@ -30,7 +31,7 @@ import { HRandFieldCommand } from "./commands/hrandfield.js";
30
31
  * const res = await p.set("key","value").get("key").exec()
31
32
  * ```
32
33
  *
33
- * 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
34
35
  * override the response type manually:
35
36
  * ```ts
36
37
  * redis.pipeline()
@@ -71,9 +72,11 @@ export class Pipeline {
71
72
  *
72
73
  * Returns an array with the results of all pipelined commands.
73
74
  *
74
- * 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:
75
76
  * ```ts
76
- * redis.pipeline().get("key").exec<[{ greeting: string }]>()
77
+ * const p = redis.pipeline()
78
+ * p.get("key")
79
+ * const result = p.exec<[{ greeting: string }]>()
77
80
  * ```
78
81
  */
79
82
  Object.defineProperty(this, "exec", {
@@ -133,6 +136,15 @@ export class Pipeline {
133
136
  writable: true,
134
137
  value: (...args) => this.chain(new BitPosCommand(args, this.commandOptions))
135
138
  });
139
+ /**
140
+ * @see https://redis.io/commands/zdiffstore
141
+ */
142
+ Object.defineProperty(this, "zdiffstore", {
143
+ enumerable: true,
144
+ configurable: true,
145
+ writable: true,
146
+ value: (...args) => this.chain(new ZDiffStoreCommand(args, this.commandOptions))
147
+ });
136
148
  /**
137
149
  * @see https://redis.io/commands/dbsize
138
150
  */
@@ -493,6 +505,15 @@ export class Pipeline {
493
505
  writable: true,
494
506
  value: (...args) => this.chain(new LLenCommand(args, this.commandOptions))
495
507
  });
508
+ /**
509
+ * @see https://redis.io/commands/lmove
510
+ */
511
+ Object.defineProperty(this, "lmove", {
512
+ enumerable: true,
513
+ configurable: true,
514
+ writable: true,
515
+ value: (...args) => this.chain(new LMoveCommand(args, this.commandOptions))
516
+ });
496
517
  /**
497
518
  * @see https://redis.io/commands/lpop
498
519
  */
@@ -862,6 +883,15 @@ export class Pipeline {
862
883
  writable: true,
863
884
  value: (...args) => this.chain(new SMembersCommand(args, this.commandOptions))
864
885
  });
886
+ /**
887
+ * @see https://redis.io/commands/smismember
888
+ */
889
+ Object.defineProperty(this, "smismember", {
890
+ enumerable: true,
891
+ configurable: true,
892
+ writable: true,
893
+ value: (key, members) => this.chain(new SMIsMemberCommand([key, members], this.commandOptions))
894
+ });
865
895
  /**
866
896
  * @see https://redis.io/commands/smove
867
897
  */
@@ -1155,17 +1185,131 @@ export class Pipeline {
1155
1185
  writable: true,
1156
1186
  value: (...args) => this.chain(new ZUnionStoreCommand(args, this.commandOptions))
1157
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
+ });
1158
1197
  this.client = opts.client;
1159
- 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
1160
1199
  this.commandOptions = opts.commandOptions;
1161
1200
  this.multiExec = opts.multiExec ?? false;
1162
1201
  }
1163
1202
  /**
1164
- * 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
1165
1210
  * pipeline
1166
1211
  */
1167
1212
  chain(command) {
1168
1213
  this.commands.push(command);
1169
- 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/geoadd
1259
+ */
1260
+ geoadd: (...args) => new GeoAddCommand(args, this.commandOptions).exec(this.client),
1261
+ /**
1262
+ * @see https://redis.io/commands/geodist
1263
+ */
1264
+ geodist: (...args) => new GeoDistCommand(args, this.commandOptions).exec(this.client),
1265
+ /**
1266
+ * @see https://redis.io/commands/json.get
1267
+ */
1268
+ get: (...args) => this.chain(new JsonGetCommand(args, this.commandOptions)),
1269
+ /**
1270
+ * @see https://redis.io/commands/json.mget
1271
+ */
1272
+ mget: (...args) => this.chain(new JsonMGetCommand(args, this.commandOptions)),
1273
+ /**
1274
+ * @see https://redis.io/commands/json.numincrby
1275
+ */
1276
+ numincrby: (...args) => this.chain(new JsonNumIncrByCommand(args, this.commandOptions)),
1277
+ /**
1278
+ * @see https://redis.io/commands/json.nummultby
1279
+ */
1280
+ nummultby: (...args) => this.chain(new JsonNumMultByCommand(args, this.commandOptions)),
1281
+ /**
1282
+ * @see https://redis.io/commands/json.objkeys
1283
+ */
1284
+ objkeys: (...args) => this.chain(new JsonObjKeysCommand(args, this.commandOptions)),
1285
+ /**
1286
+ * @see https://redis.io/commands/json.objlen
1287
+ */
1288
+ objlen: (...args) => this.chain(new JsonObjLenCommand(args, this.commandOptions)),
1289
+ /**
1290
+ * @see https://redis.io/commands/json.resp
1291
+ */
1292
+ resp: (...args) => this.chain(new JsonRespCommand(args, this.commandOptions)),
1293
+ /**
1294
+ * @see https://redis.io/commands/json.set
1295
+ */
1296
+ set: (...args) => this.chain(new JsonSetCommand(args, this.commandOptions)),
1297
+ /**
1298
+ * @see https://redis.io/commands/json.strappend
1299
+ */
1300
+ strappend: (...args) => this.chain(new JsonStrAppendCommand(args, this.commandOptions)),
1301
+ /**
1302
+ * @see https://redis.io/commands/json.strlen
1303
+ */
1304
+ strlen: (...args) => this.chain(new JsonStrLenCommand(args, this.commandOptions)),
1305
+ /**
1306
+ * @see https://redis.io/commands/json.toggle
1307
+ */
1308
+ toggle: (...args) => this.chain(new JsonToggleCommand(args, this.commandOptions)),
1309
+ /**
1310
+ * @see https://redis.io/commands/json.type
1311
+ */
1312
+ type: (...args) => this.chain(new JsonTypeCommand(args, this.commandOptions)),
1313
+ };
1170
1314
  }
1171
1315
  }
package/esm/pkg/redis.js CHANGED
@@ -1,7 +1,8 @@
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, 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, GeoAddCommand, GeoDistCommand, 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
+ import { ZDiffStoreCommand } from "./commands/zdiffstore.js";
5
6
  /**
6
7
  * Serverless redis client for upstash.
7
8
  */
@@ -30,6 +31,12 @@ export class Redis {
30
31
  writable: true,
31
32
  value: void 0
32
33
  });
34
+ Object.defineProperty(this, "enableTelemetry", {
35
+ enumerable: true,
36
+ configurable: true,
37
+ writable: true,
38
+ value: void 0
39
+ });
33
40
  /**
34
41
  * Wrap a new middleware around the HTTP client.
35
42
  */
@@ -42,6 +49,27 @@ export class Redis {
42
49
  this.client.request = (req) => middleware(req, makeRequest);
43
50
  }
44
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
+ });
45
73
  /**
46
74
  * Create a new pipeline that allows you to send requests in bulk.
47
75
  *
@@ -473,6 +501,15 @@ export class Redis {
473
501
  writable: true,
474
502
  value: (...args) => new LLenCommand(args, this.opts).exec(this.client)
475
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
+ });
476
513
  /**
477
514
  * @see https://redis.io/commands/lpop
478
515
  */
@@ -833,6 +870,15 @@ export class Redis {
833
870
  writable: true,
834
871
  value: (key, member) => new SIsMemberCommand([key, member], this.opts).exec(this.client)
835
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
+ });
836
882
  /**
837
883
  * @see https://redis.io/commands/smembers
838
884
  */
@@ -959,6 +1005,24 @@ export class Redis {
959
1005
  writable: true,
960
1006
  value: (...args) => new UnlinkCommand(args, this.opts).exec(this.client)
961
1007
  });
1008
+ /**
1009
+ * @see https://redis.io/commands/xadd
1010
+ */
1011
+ Object.defineProperty(this, "xadd", {
1012
+ enumerable: true,
1013
+ configurable: true,
1014
+ writable: true,
1015
+ value: (...args) => new XAddCommand(args, this.opts).exec(this.client)
1016
+ });
1017
+ /**
1018
+ * @see https://redis.io/commands/xrange
1019
+ */
1020
+ Object.defineProperty(this, "xrange", {
1021
+ enumerable: true,
1022
+ configurable: true,
1023
+ writable: true,
1024
+ value: (...args) => new XRangeCommand(args, this.opts).exec(this.client)
1025
+ });
962
1026
  /**
963
1027
  * @see https://redis.io/commands/zadd
964
1028
  */
@@ -991,6 +1055,15 @@ export class Redis {
991
1055
  writable: true,
992
1056
  value: (...args) => new ZCountCommand(args, this.opts).exec(this.client)
993
1057
  });
1058
+ /**
1059
+ * @see https://redis.io/commands/zdiffstore
1060
+ */
1061
+ Object.defineProperty(this, "zdiffstore", {
1062
+ enumerable: true,
1063
+ configurable: true,
1064
+ writable: true,
1065
+ value: (...args) => new ZDiffStoreCommand(args, this.opts).exec(this.client)
1066
+ });
994
1067
  /**
995
1068
  * @see https://redis.io/commands/zincrby
996
1069
  */
@@ -1126,6 +1199,15 @@ export class Redis {
1126
1199
  writable: true,
1127
1200
  value: (key, member) => new ZScoreCommand([key, member], this.opts).exec(this.client)
1128
1201
  });
1202
+ /**
1203
+ * @see https://redis.io/commands/zunion
1204
+ */
1205
+ Object.defineProperty(this, "zunion", {
1206
+ enumerable: true,
1207
+ configurable: true,
1208
+ writable: true,
1209
+ value: (...args) => new ZUnionCommand(args, this.opts).exec(this.client)
1210
+ });
1129
1211
  /**
1130
1212
  * @see https://redis.io/commands/zunionstore
1131
1213
  */
@@ -1137,6 +1219,103 @@ export class Redis {
1137
1219
  });
1138
1220
  this.client = client;
1139
1221
  this.opts = opts;
1222
+ this.enableTelemetry = opts?.enableTelemetry ?? true;
1223
+ }
1224
+ get json() {
1225
+ return {
1226
+ /**
1227
+ * @see https://redis.io/commands/json.arrappend
1228
+ */
1229
+ arrappend: (...args) => new JsonArrAppendCommand(args, this.opts).exec(this.client),
1230
+ /**
1231
+ * @see https://redis.io/commands/json.arrindex
1232
+ */
1233
+ arrindex: (...args) => new JsonArrIndexCommand(args, this.opts).exec(this.client),
1234
+ /**
1235
+ * @see https://redis.io/commands/json.arrinsert
1236
+ */
1237
+ arrinsert: (...args) => new JsonArrInsertCommand(args, this.opts).exec(this.client),
1238
+ /**
1239
+ * @see https://redis.io/commands/json.arrlen
1240
+ */
1241
+ arrlen: (...args) => new JsonArrLenCommand(args, this.opts).exec(this.client),
1242
+ /**
1243
+ * @see https://redis.io/commands/json.arrpop
1244
+ */
1245
+ arrpop: (...args) => new JsonArrPopCommand(args, this.opts).exec(this.client),
1246
+ /**
1247
+ * @see https://redis.io/commands/json.arrtrim
1248
+ */
1249
+ arrtrim: (...args) => new JsonArrTrimCommand(args, this.opts).exec(this.client),
1250
+ /**
1251
+ * @see https://redis.io/commands/json.clear
1252
+ */
1253
+ clear: (...args) => new JsonClearCommand(args, this.opts).exec(this.client),
1254
+ /**
1255
+ * @see https://redis.io/commands/json.del
1256
+ */
1257
+ del: (...args) => new JsonDelCommand(args, this.opts).exec(this.client),
1258
+ /**
1259
+ * @see https://redis.io/commands/json.forget
1260
+ */
1261
+ forget: (...args) => new JsonForgetCommand(args, this.opts).exec(this.client),
1262
+ /**
1263
+ * @see https://redis.io/commands/geoadd
1264
+ */
1265
+ geoadd: (...args) => new GeoAddCommand(args, this.opts).exec(this.client),
1266
+ /**
1267
+ * @see https://redis.io/commands/geodist
1268
+ */
1269
+ geodist: (...args) => new GeoDistCommand(args, this.opts).exec(this.client),
1270
+ /**
1271
+ * @see https://redis.io/commands/json.get
1272
+ */
1273
+ get: (...args) => new JsonGetCommand(args, this.opts).exec(this.client),
1274
+ /**
1275
+ * @see https://redis.io/commands/json.mget
1276
+ */
1277
+ mget: (...args) => new JsonMGetCommand(args, this.opts).exec(this.client),
1278
+ /**
1279
+ * @see https://redis.io/commands/json.numincrby
1280
+ */
1281
+ numincrby: (...args) => new JsonNumIncrByCommand(args, this.opts).exec(this.client),
1282
+ /**
1283
+ * @see https://redis.io/commands/json.nummultby
1284
+ */
1285
+ nummultby: (...args) => new JsonNumMultByCommand(args, this.opts).exec(this.client),
1286
+ /**
1287
+ * @see https://redis.io/commands/json.objkeys
1288
+ */
1289
+ objkeys: (...args) => new JsonObjKeysCommand(args, this.opts).exec(this.client),
1290
+ /**
1291
+ * @see https://redis.io/commands/json.objlen
1292
+ */
1293
+ objlen: (...args) => new JsonObjLenCommand(args, this.opts).exec(this.client),
1294
+ /**
1295
+ * @see https://redis.io/commands/json.resp
1296
+ */
1297
+ resp: (...args) => new JsonRespCommand(args, this.opts).exec(this.client),
1298
+ /**
1299
+ * @see https://redis.io/commands/json.set
1300
+ */
1301
+ set: (...args) => new JsonSetCommand(args, this.opts).exec(this.client),
1302
+ /**
1303
+ * @see https://redis.io/commands/json.strappend
1304
+ */
1305
+ strappend: (...args) => new JsonStrAppendCommand(args, this.opts).exec(this.client),
1306
+ /**
1307
+ * @see https://redis.io/commands/json.strlen
1308
+ */
1309
+ strlen: (...args) => new JsonStrLenCommand(args, this.opts).exec(this.client),
1310
+ /**
1311
+ * @see https://redis.io/commands/json.toggle
1312
+ */
1313
+ toggle: (...args) => new JsonToggleCommand(args, this.opts).exec(this.client),
1314
+ /**
1315
+ * @see https://redis.io/commands/json.type
1316
+ */
1317
+ type: (...args) => new JsonTypeCommand(args, this.opts).exec(this.client),
1318
+ };
1140
1319
  }
1141
1320
  createScript(script) {
1142
1321
  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
  }