@upstash/redis 1.3.1 → 1.3.2-alpha.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +98 -48
- package/esm/package.json +3 -0
- package/esm/pkg/commands/append.js +9 -0
- package/esm/pkg/commands/bitcount.js +16 -0
- package/esm/pkg/commands/bitop.js +9 -0
- package/esm/pkg/commands/bitpos.js +9 -0
- package/esm/pkg/commands/command.js +46 -0
- package/esm/pkg/commands/dbsize.js +9 -0
- package/esm/pkg/commands/decr.js +9 -0
- package/esm/pkg/commands/decrby.js +9 -0
- package/esm/pkg/commands/del.js +9 -0
- package/esm/pkg/commands/echo.js +9 -0
- package/esm/pkg/commands/eval.js +9 -0
- package/esm/pkg/commands/evalsha.js +9 -0
- package/esm/pkg/commands/exists.js +9 -0
- package/esm/pkg/commands/expire.js +9 -0
- package/esm/pkg/commands/expireat.js +9 -0
- package/esm/pkg/commands/flushall.js +13 -0
- package/esm/pkg/commands/flushdb.js +13 -0
- package/esm/pkg/commands/get.js +9 -0
- package/esm/pkg/commands/getbit.js +9 -0
- package/esm/pkg/commands/getrange.js +9 -0
- package/esm/pkg/commands/getset.js +9 -0
- package/esm/pkg/commands/hdel.js +9 -0
- package/esm/pkg/commands/hexists.js +9 -0
- package/esm/pkg/commands/hget.js +9 -0
- package/esm/pkg/commands/hgetall.js +30 -0
- package/esm/pkg/commands/hincrby.js +9 -0
- package/esm/pkg/commands/hincrbyfloat.js +9 -0
- package/esm/pkg/commands/hkeys.js +9 -0
- package/esm/pkg/commands/hlen.js +9 -0
- package/esm/pkg/commands/hmget.js +32 -0
- package/esm/pkg/commands/hmset.js +13 -0
- package/esm/pkg/commands/hscan.js +16 -0
- package/esm/pkg/commands/hset.js +13 -0
- package/esm/pkg/commands/hsetnx.js +9 -0
- package/esm/pkg/commands/hstrlen.js +9 -0
- package/esm/pkg/commands/hvals.js +9 -0
- package/esm/pkg/commands/incr.js +9 -0
- package/esm/pkg/commands/incrby.js +9 -0
- package/esm/pkg/commands/incrbyfloat.js +9 -0
- package/esm/pkg/commands/keys.js +9 -0
- package/esm/pkg/commands/lindex.js +6 -0
- package/esm/pkg/commands/linsert.js +6 -0
- package/esm/pkg/commands/llen.js +9 -0
- package/esm/pkg/commands/lpop.js +9 -0
- package/esm/pkg/commands/lpush.js +9 -0
- package/esm/pkg/commands/lpushx.js +9 -0
- package/esm/pkg/commands/lrange.js +6 -0
- package/esm/pkg/commands/lrem.js +6 -0
- package/esm/pkg/commands/lset.js +6 -0
- package/esm/pkg/commands/ltrim.js +6 -0
- package/esm/pkg/commands/mget.js +9 -0
- package/esm/pkg/commands/mod.js +114 -0
- package/esm/pkg/commands/mset.js +12 -0
- package/esm/pkg/commands/msetnx.js +9 -0
- package/esm/pkg/commands/persist.js +9 -0
- package/esm/pkg/commands/pexpire.js +9 -0
- package/esm/pkg/commands/pexpireat.js +9 -0
- package/esm/pkg/commands/ping.js +13 -0
- package/esm/pkg/commands/psetex.js +9 -0
- package/esm/pkg/commands/pttl.js +9 -0
- package/esm/pkg/commands/publish.js +9 -0
- package/esm/pkg/commands/randomkey.js +9 -0
- package/esm/pkg/commands/rename.js +9 -0
- package/esm/pkg/commands/renamenx.js +9 -0
- package/esm/pkg/commands/rpop.js +9 -0
- package/esm/pkg/commands/rpush.js +9 -0
- package/esm/pkg/commands/rpushx.js +9 -0
- package/esm/pkg/commands/sadd.js +9 -0
- package/esm/pkg/commands/scan.js +16 -0
- package/esm/pkg/commands/scard.js +9 -0
- package/esm/pkg/commands/script_exists.js +20 -0
- package/esm/pkg/commands/script_flush.js +16 -0
- package/esm/pkg/commands/script_load.js +9 -0
- package/esm/pkg/commands/sdiff.js +9 -0
- package/esm/pkg/commands/sdiffstore.js +9 -0
- package/esm/pkg/commands/set.js +24 -0
- package/esm/pkg/commands/setbit.js +9 -0
- package/esm/pkg/commands/setex.js +9 -0
- package/esm/pkg/commands/setnx.js +9 -0
- package/esm/pkg/commands/setrange.js +9 -0
- package/esm/pkg/commands/sinter.js +9 -0
- package/esm/pkg/commands/sinterstore.js +9 -0
- package/esm/pkg/commands/sismember.js +9 -0
- package/esm/pkg/commands/smembers.js +9 -0
- package/esm/pkg/commands/smove.js +9 -0
- package/esm/pkg/commands/spop.js +13 -0
- package/esm/pkg/commands/srandmember.js +13 -0
- package/esm/pkg/commands/srem.js +9 -0
- package/esm/pkg/commands/sscan.js +16 -0
- package/esm/pkg/commands/strlen.js +9 -0
- package/esm/pkg/commands/sunion.js +9 -0
- package/esm/pkg/commands/sunionstore.js +9 -0
- package/esm/pkg/commands/time.js +9 -0
- package/esm/pkg/commands/touch.js +9 -0
- package/esm/pkg/commands/ttl.js +9 -0
- package/esm/pkg/commands/type.js +9 -0
- package/esm/pkg/commands/unlink.js +9 -0
- package/esm/pkg/commands/zadd.js +26 -0
- package/esm/pkg/commands/zcard.js +9 -0
- package/esm/pkg/commands/zcount.js +9 -0
- package/esm/pkg/commands/zincrby.js +9 -0
- package/esm/pkg/commands/zinterstore.js +27 -0
- package/esm/pkg/commands/zlexcount.js +9 -0
- package/esm/pkg/commands/zpopmax.js +13 -0
- package/esm/pkg/commands/zpopmin.js +13 -0
- package/esm/pkg/commands/zrange.js +20 -0
- package/esm/pkg/commands/zrank.js +9 -0
- package/esm/pkg/commands/zrem.js +9 -0
- package/esm/pkg/commands/zremrangebylex.js +9 -0
- package/esm/pkg/commands/zremrangebyrank.js +9 -0
- package/esm/pkg/commands/zremrangebyscore.js +9 -0
- package/esm/pkg/commands/zrevrank.js +9 -0
- package/esm/pkg/commands/zscan.js +16 -0
- package/esm/pkg/commands/zscore.js +9 -0
- package/esm/pkg/commands/zunionstore.js +27 -0
- package/esm/pkg/error.js +9 -0
- package/esm/pkg/http.js +49 -0
- package/esm/pkg/pipeline.js +1118 -0
- package/esm/pkg/redis.js +1061 -0
- package/esm/pkg/types.js +1 -0
- package/esm/pkg/util.js +31 -0
- package/esm/platforms/cloudflare.js +70 -0
- package/esm/platforms/fastly.js +49 -0
- package/esm/platforms/nodejs.js +69 -0
- package/package.json +86 -1
- package/script/package.json +3 -0
- package/script/pkg/commands/append.js +13 -0
- package/script/pkg/commands/bitcount.js +20 -0
- package/script/pkg/commands/bitop.js +13 -0
- package/script/pkg/commands/bitpos.js +13 -0
- package/script/pkg/commands/command.js +50 -0
- package/script/pkg/commands/dbsize.js +13 -0
- package/script/pkg/commands/decr.js +13 -0
- package/script/pkg/commands/decrby.js +13 -0
- package/script/pkg/commands/del.js +13 -0
- package/script/pkg/commands/echo.js +13 -0
- package/script/pkg/commands/eval.js +13 -0
- package/script/pkg/commands/evalsha.js +13 -0
- package/script/pkg/commands/exists.js +13 -0
- package/script/pkg/commands/expire.js +13 -0
- package/script/pkg/commands/expireat.js +13 -0
- package/script/pkg/commands/flushall.js +17 -0
- package/script/pkg/commands/flushdb.js +17 -0
- package/script/pkg/commands/get.js +13 -0
- package/script/pkg/commands/getbit.js +13 -0
- package/script/pkg/commands/getrange.js +13 -0
- package/script/pkg/commands/getset.js +13 -0
- package/script/pkg/commands/hdel.js +13 -0
- package/script/pkg/commands/hexists.js +13 -0
- package/script/pkg/commands/hget.js +13 -0
- package/script/pkg/commands/hgetall.js +34 -0
- package/script/pkg/commands/hincrby.js +13 -0
- package/script/pkg/commands/hincrbyfloat.js +13 -0
- package/script/pkg/commands/hkeys.js +13 -0
- package/script/pkg/commands/hlen.js +13 -0
- package/script/pkg/commands/hmget.js +36 -0
- package/script/pkg/commands/hmset.js +17 -0
- package/script/pkg/commands/hscan.js +20 -0
- package/script/pkg/commands/hset.js +17 -0
- package/script/pkg/commands/hsetnx.js +13 -0
- package/script/pkg/commands/hstrlen.js +13 -0
- package/script/pkg/commands/hvals.js +13 -0
- package/script/pkg/commands/incr.js +13 -0
- package/script/pkg/commands/incrby.js +13 -0
- package/script/pkg/commands/incrbyfloat.js +13 -0
- package/script/pkg/commands/keys.js +13 -0
- package/script/pkg/commands/lindex.js +10 -0
- package/script/pkg/commands/linsert.js +10 -0
- package/script/pkg/commands/llen.js +13 -0
- package/script/pkg/commands/lpop.js +13 -0
- package/script/pkg/commands/lpush.js +13 -0
- package/script/pkg/commands/lpushx.js +13 -0
- package/script/pkg/commands/lrange.js +10 -0
- package/script/pkg/commands/lrem.js +10 -0
- package/script/pkg/commands/lset.js +10 -0
- package/script/pkg/commands/ltrim.js +10 -0
- package/script/pkg/commands/mget.js +13 -0
- package/script/pkg/commands/mod.js +130 -0
- package/script/pkg/commands/mset.js +16 -0
- package/script/pkg/commands/msetnx.js +13 -0
- package/script/pkg/commands/persist.js +13 -0
- package/script/pkg/commands/pexpire.js +13 -0
- package/script/pkg/commands/pexpireat.js +13 -0
- package/script/pkg/commands/ping.js +17 -0
- package/script/pkg/commands/psetex.js +13 -0
- package/script/pkg/commands/pttl.js +13 -0
- package/script/pkg/commands/publish.js +13 -0
- package/script/pkg/commands/randomkey.js +13 -0
- package/script/pkg/commands/rename.js +13 -0
- package/script/pkg/commands/renamenx.js +13 -0
- package/script/pkg/commands/rpop.js +13 -0
- package/script/pkg/commands/rpush.js +13 -0
- package/script/pkg/commands/rpushx.js +13 -0
- package/script/pkg/commands/sadd.js +13 -0
- package/script/pkg/commands/scan.js +20 -0
- package/script/pkg/commands/scard.js +13 -0
- package/script/pkg/commands/script_exists.js +24 -0
- package/script/pkg/commands/script_flush.js +20 -0
- package/script/pkg/commands/script_load.js +13 -0
- package/script/pkg/commands/sdiff.js +13 -0
- package/script/pkg/commands/sdiffstore.js +13 -0
- package/script/pkg/commands/set.js +28 -0
- package/script/pkg/commands/setbit.js +13 -0
- package/script/pkg/commands/setex.js +13 -0
- package/script/pkg/commands/setnx.js +13 -0
- package/script/pkg/commands/setrange.js +13 -0
- package/script/pkg/commands/sinter.js +13 -0
- package/script/pkg/commands/sinterstore.js +13 -0
- package/script/pkg/commands/sismember.js +13 -0
- package/script/pkg/commands/smembers.js +13 -0
- package/script/pkg/commands/smove.js +13 -0
- package/script/pkg/commands/spop.js +17 -0
- package/script/pkg/commands/srandmember.js +17 -0
- package/script/pkg/commands/srem.js +13 -0
- package/script/pkg/commands/sscan.js +20 -0
- package/script/pkg/commands/strlen.js +13 -0
- package/script/pkg/commands/sunion.js +13 -0
- package/script/pkg/commands/sunionstore.js +13 -0
- package/script/pkg/commands/time.js +13 -0
- package/script/pkg/commands/touch.js +13 -0
- package/script/pkg/commands/ttl.js +13 -0
- package/script/pkg/commands/type.js +13 -0
- package/script/pkg/commands/unlink.js +13 -0
- package/script/pkg/commands/zadd.js +30 -0
- package/script/pkg/commands/zcard.js +13 -0
- package/script/pkg/commands/zcount.js +13 -0
- package/script/pkg/commands/zincrby.js +13 -0
- package/script/pkg/commands/zinterstore.js +31 -0
- package/script/pkg/commands/zlexcount.js +13 -0
- package/script/pkg/commands/zpopmax.js +17 -0
- package/script/pkg/commands/zpopmin.js +17 -0
- package/script/pkg/commands/zrange.js +24 -0
- package/script/pkg/commands/zrank.js +13 -0
- package/script/pkg/commands/zrem.js +13 -0
- package/script/pkg/commands/zremrangebylex.js +13 -0
- package/script/pkg/commands/zremrangebyrank.js +13 -0
- package/script/pkg/commands/zremrangebyscore.js +13 -0
- package/script/pkg/commands/zrevrank.js +13 -0
- package/script/pkg/commands/zscan.js +20 -0
- package/script/pkg/commands/zscore.js +13 -0
- package/script/pkg/commands/zunionstore.js +31 -0
- package/script/pkg/error.js +13 -0
- package/script/pkg/http.js +53 -0
- package/script/pkg/pipeline.js +1122 -0
- package/script/pkg/redis.js +1065 -0
- package/script/pkg/types.js +2 -0
- package/script/pkg/util.js +35 -0
- package/script/platforms/cloudflare.js +97 -0
- package/script/platforms/fastly.js +76 -0
- package/script/platforms/nodejs.js +96 -0
- package/types/pkg/commands/append.d.ts +7 -0
- package/types/pkg/commands/bitcount.d.ts +8 -0
- package/types/pkg/commands/bitop.d.ts +8 -0
- package/types/pkg/commands/bitpos.d.ts +7 -0
- package/types/pkg/commands/command.d.ts +23 -0
- package/types/pkg/commands/dbsize.d.ts +7 -0
- package/types/pkg/commands/decr.d.ts +7 -0
- package/types/pkg/commands/decrby.d.ts +7 -0
- package/types/pkg/commands/del.d.ts +8 -0
- package/types/pkg/commands/echo.d.ts +7 -0
- package/types/pkg/commands/eval.d.ts +7 -0
- package/types/pkg/commands/evalsha.d.ts +7 -0
- package/types/pkg/commands/exists.d.ts +8 -0
- package/types/pkg/commands/expire.d.ts +7 -0
- package/types/pkg/commands/expireat.d.ts +7 -0
- package/types/pkg/commands/flushall.d.ts +9 -0
- package/types/pkg/commands/flushdb.d.ts +9 -0
- package/types/pkg/commands/get.d.ts +7 -0
- package/types/pkg/commands/getbit.d.ts +7 -0
- package/types/pkg/commands/getrange.d.ts +7 -0
- package/types/pkg/commands/getset.d.ts +7 -0
- package/types/pkg/commands/hdel.d.ts +7 -0
- package/types/pkg/commands/hexists.d.ts +7 -0
- package/types/pkg/commands/hget.d.ts +7 -0
- package/types/pkg/commands/hgetall.d.ts +7 -0
- package/types/pkg/commands/hincrby.d.ts +7 -0
- package/types/pkg/commands/hincrbyfloat.d.ts +7 -0
- package/types/pkg/commands/hkeys.d.ts +7 -0
- package/types/pkg/commands/hlen.d.ts +7 -0
- package/types/pkg/commands/hmget.d.ts +15 -0
- package/types/pkg/commands/hmset.d.ts +9 -0
- package/types/pkg/commands/hscan.d.ts +14 -0
- package/types/pkg/commands/hset.d.ts +9 -0
- package/types/pkg/commands/hsetnx.d.ts +7 -0
- package/types/pkg/commands/hstrlen.d.ts +7 -0
- package/types/pkg/commands/hvals.d.ts +7 -0
- package/types/pkg/commands/incr.d.ts +7 -0
- package/types/pkg/commands/incrby.d.ts +7 -0
- package/types/pkg/commands/incrbyfloat.d.ts +7 -0
- package/types/pkg/commands/keys.d.ts +7 -0
- package/types/pkg/commands/lindex.d.ts +4 -0
- package/types/pkg/commands/linsert.d.ts +4 -0
- package/types/pkg/commands/llen.d.ts +7 -0
- package/types/pkg/commands/lpop.d.ts +7 -0
- package/types/pkg/commands/lpush.d.ts +8 -0
- package/types/pkg/commands/lpushx.d.ts +8 -0
- package/types/pkg/commands/lrange.d.ts +4 -0
- package/types/pkg/commands/lrem.d.ts +4 -0
- package/types/pkg/commands/lset.d.ts +4 -0
- package/types/pkg/commands/ltrim.d.ts +4 -0
- package/types/pkg/commands/mget.d.ts +7 -0
- package/types/pkg/commands/mod.d.ts +114 -0
- package/types/pkg/commands/mset.d.ts +9 -0
- package/types/pkg/commands/msetnx.d.ts +9 -0
- package/types/pkg/commands/persist.d.ts +7 -0
- package/types/pkg/commands/pexpire.d.ts +7 -0
- package/types/pkg/commands/pexpireat.d.ts +7 -0
- package/types/pkg/commands/ping.d.ts +7 -0
- package/types/pkg/commands/psetex.d.ts +7 -0
- package/types/pkg/commands/pttl.d.ts +7 -0
- package/types/pkg/commands/publish.d.ts +7 -0
- package/types/pkg/commands/randomkey.d.ts +7 -0
- package/types/pkg/commands/rename.d.ts +7 -0
- package/types/pkg/commands/renamenx.d.ts +7 -0
- package/types/pkg/commands/rpop.d.ts +7 -0
- package/types/pkg/commands/rpush.d.ts +8 -0
- package/types/pkg/commands/rpushx.d.ts +8 -0
- package/types/pkg/commands/sadd.d.ts +8 -0
- package/types/pkg/commands/scan.d.ts +11 -0
- package/types/pkg/commands/scard.d.ts +7 -0
- package/types/pkg/commands/script_exists.d.ts +12 -0
- package/types/pkg/commands/script_flush.d.ts +14 -0
- package/types/pkg/commands/script_load.d.ts +7 -0
- package/types/pkg/commands/sdiff.d.ts +7 -0
- package/types/pkg/commands/sdiffstore.d.ts +8 -0
- package/types/pkg/commands/set.d.ts +26 -0
- package/types/pkg/commands/setbit.d.ts +7 -0
- package/types/pkg/commands/setex.d.ts +7 -0
- package/types/pkg/commands/setnx.d.ts +7 -0
- package/types/pkg/commands/setrange.d.ts +7 -0
- package/types/pkg/commands/sinter.d.ts +7 -0
- package/types/pkg/commands/sinterstore.d.ts +7 -0
- package/types/pkg/commands/sismember.d.ts +7 -0
- package/types/pkg/commands/smembers.d.ts +7 -0
- package/types/pkg/commands/smove.d.ts +7 -0
- package/types/pkg/commands/spop.d.ts +7 -0
- package/types/pkg/commands/srandmember.d.ts +7 -0
- package/types/pkg/commands/srem.d.ts +8 -0
- package/types/pkg/commands/sscan.d.ts +14 -0
- package/types/pkg/commands/strlen.d.ts +7 -0
- package/types/pkg/commands/sunion.d.ts +7 -0
- package/types/pkg/commands/sunionstore.d.ts +7 -0
- package/types/pkg/commands/time.d.ts +7 -0
- package/types/pkg/commands/touch.d.ts +8 -0
- package/types/pkg/commands/ttl.d.ts +7 -0
- package/types/pkg/commands/type.d.ts +8 -0
- package/types/pkg/commands/unlink.d.ts +7 -0
- package/types/pkg/commands/zadd.d.ts +27 -0
- package/types/pkg/commands/zcard.d.ts +7 -0
- package/types/pkg/commands/zcount.d.ts +7 -0
- package/types/pkg/commands/zincrby.d.ts +7 -0
- package/types/pkg/commands/zinterstore.d.ts +20 -0
- package/types/pkg/commands/zlexcount.d.ts +7 -0
- package/types/pkg/commands/zpopmax.d.ts +7 -0
- package/types/pkg/commands/zpopmin.d.ts +7 -0
- package/types/pkg/commands/zrange.d.ts +25 -0
- package/types/pkg/commands/zrank.d.ts +7 -0
- package/types/pkg/commands/zrem.d.ts +8 -0
- package/types/pkg/commands/zremrangebylex.d.ts +7 -0
- package/types/pkg/commands/zremrangebyrank.d.ts +7 -0
- package/types/pkg/commands/zremrangebyscore.d.ts +7 -0
- package/types/pkg/commands/zrevrank.d.ts +7 -0
- package/types/pkg/commands/zscan.d.ts +14 -0
- package/types/pkg/commands/zscore.d.ts +7 -0
- package/types/pkg/commands/zunionstore.d.ts +20 -0
- package/types/pkg/error.d.ts +6 -0
- package/{http.d.ts → types/pkg/http.d.ts} +7 -13
- package/types/pkg/pipeline.d.ts +543 -0
- package/types/pkg/redis.d.ts +509 -0
- package/types/pkg/types.d.ts +2 -0
- package/types/pkg/util.d.ts +1 -0
- package/types/platforms/cloudflare.d.ts +38 -0
- package/types/platforms/fastly.d.ts +41 -0
- package/{nodejs.d.ts → types/platforms/nodejs.d.ts} +25 -12
- package/chunk-5LZNFEHI.mjs +0 -34
- package/chunk-7YUZYRJS.mjs +0 -29
- package/chunk-CTSQDNTV.mjs +0 -393
- package/chunk-K2UC7PHG.mjs +0 -1140
- package/chunk-WRHUFPCZ.mjs +0 -55
- package/cloudflare.d.ts +0 -43
- package/cloudflare.js +0 -1395
- package/cloudflare.mjs +0 -34
- package/commands.d.ts +0 -761
- package/commands.js +0 -1287
- package/commands.mjs +0 -233
- package/fastly.d.ts +0 -46
- package/fastly.js +0 -1384
- package/fastly.mjs +0 -23
- package/http.js +0 -81
- package/http.mjs +0 -7
- package/index.d.ts +0 -15
- package/index.js +0 -1424
- package/index.mjs +0 -13
- package/nodejs.js +0 -1422
- package/nodejs.mjs +0 -10
- package/redis-338577a3.d.ts +0 -1056
- package/zunionstore-633a2e7a.d.ts +0 -187
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
The MIT License (MIT)
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2021 Upstash, Inc.
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
CHANGED
|
@@ -19,35 +19,50 @@ It is the only connectionless (HTTP based) Redis client and designed for:
|
|
|
19
19
|
- WebAssembly
|
|
20
20
|
- and other environments where HTTP is preferred over TCP.
|
|
21
21
|
|
|
22
|
-
See
|
|
22
|
+
See
|
|
23
|
+
[the list of APIs](https://docs.upstash.com/features/restapi#rest---redis-api-compatibility)
|
|
24
|
+
supported.
|
|
23
25
|
|
|
24
26
|
## Upgrading from v0.2.0?
|
|
25
27
|
|
|
26
|
-
Please read the
|
|
27
|
-
|
|
28
|
+
Please read the
|
|
29
|
+
[migration guide](https://github.com/upstash/upstash-redis#migrating-to-v1). For
|
|
30
|
+
further explanation we wrote a
|
|
31
|
+
[blog post](https://blog.upstash.com/upstash-redis-sdk-v1).
|
|
28
32
|
|
|
29
33
|
## Quick Start
|
|
30
34
|
|
|
31
35
|
### Install
|
|
32
36
|
|
|
37
|
+
#### npm
|
|
38
|
+
|
|
33
39
|
```bash
|
|
34
40
|
npm install @upstash/redis
|
|
35
41
|
```
|
|
36
42
|
|
|
43
|
+
#### Deno
|
|
44
|
+
|
|
45
|
+
```ts
|
|
46
|
+
import { Redis } from "https://deno.land/x/upstash_redis/mod.ts";
|
|
47
|
+
```
|
|
48
|
+
|
|
37
49
|
### Create database
|
|
38
50
|
|
|
39
51
|
Create a new redis database on [upstash](https://console.upstash.com/)
|
|
40
52
|
|
|
41
53
|
### Environments
|
|
42
54
|
|
|
43
|
-
We support various platforms, such as nodejs, cloudflare and fastly.
|
|
44
|
-
|
|
55
|
+
We support various platforms, such as nodejs, cloudflare and fastly. Platforms
|
|
56
|
+
differ slightly when it comes to environment variables and their `fetch` api.
|
|
57
|
+
Please use the correct import when deploying to special platforms.
|
|
45
58
|
|
|
46
59
|
#### Node.js
|
|
47
60
|
|
|
48
61
|
Examples: Vercel, Netlify, AWS Lambda
|
|
49
62
|
|
|
50
|
-
If you are running on nodejs you can set `UPSTASH_REDIS_REST_URL` and
|
|
63
|
+
If you are running on nodejs you can set `UPSTASH_REDIS_REST_URL` and
|
|
64
|
+
`UPSTASH_REDIS_REST_TOKEN` as environment variable and create a redis instance
|
|
65
|
+
like this:
|
|
51
66
|
|
|
52
67
|
```ts
|
|
53
68
|
import { Redis } from "@upstash/redis"
|
|
@@ -65,8 +80,9 @@ const redis = Redis.fromEnv()
|
|
|
65
80
|
|
|
66
81
|
#### Cloudflare Workers
|
|
67
82
|
|
|
68
|
-
Cloudflare handles environment variables differently than nodejs.
|
|
69
|
-
|
|
83
|
+
Cloudflare handles environment variables differently than nodejs. Please add
|
|
84
|
+
`UPSTASH_REDIS_REST_URL` and `UPSTASH_REDIS_REST_TOKEN` using
|
|
85
|
+
`wrangler secret put ...` or in the cloudflare dashboard.
|
|
70
86
|
|
|
71
87
|
Afterwards you can create a redis instance:
|
|
72
88
|
|
|
@@ -92,7 +108,6 @@ export default {
|
|
|
92
108
|
// ...
|
|
93
109
|
}
|
|
94
110
|
}
|
|
95
|
-
|
|
96
111
|
```
|
|
97
112
|
|
|
98
113
|
- [Code example service worker](https://github.com/upstash/upstash-redis/tree/main/examples/cloudflare-workers)
|
|
@@ -101,7 +116,10 @@ export default {
|
|
|
101
116
|
|
|
102
117
|
#### Fastly
|
|
103
118
|
|
|
104
|
-
Fastly introduces a concept called
|
|
119
|
+
Fastly introduces a concept called
|
|
120
|
+
[backend](https://developer.fastly.com/reference/api/services/backend/). You
|
|
121
|
+
need to configure a backend in your `fastly.toml`. An example can be found
|
|
122
|
+
[here](https://github.com/upstash/upstash-redis/blob/main/examples/fastly/fastly.toml).
|
|
105
123
|
Until the fastly api stabilizes we recommend creating an instance manually:
|
|
106
124
|
|
|
107
125
|
```ts
|
|
@@ -117,12 +135,30 @@ const redis = new Redis({
|
|
|
117
135
|
- [Code example](https://github.com/upstash/upstash-redis/tree/main/examples/fastly)
|
|
118
136
|
- [Documentation](https://blog.upstash.com/fastly-compute-edge-with-redi)
|
|
119
137
|
|
|
138
|
+
#### Deno
|
|
139
|
+
|
|
140
|
+
Examples: [Deno Deploy](https://deno.com/deploy),
|
|
141
|
+
[Netlify Edge](https://www.netlify.com/products/edge/)
|
|
142
|
+
|
|
143
|
+
```ts
|
|
144
|
+
import { Redis } from "https://deno.land/x/upstash_redis/mod.ts"
|
|
145
|
+
|
|
146
|
+
const redis = new Redis({
|
|
147
|
+
url: <UPSTASH_REDIS_REST_URL>,
|
|
148
|
+
token: <UPSTASH_REDIS_REST_TOKEN>,
|
|
149
|
+
})
|
|
150
|
+
|
|
151
|
+
// or
|
|
152
|
+
const redis = Redis.fromEnv();
|
|
153
|
+
```
|
|
154
|
+
|
|
120
155
|
### Working with types
|
|
121
156
|
|
|
122
|
-
Most commands allow you to provide a type to make working with typescript
|
|
157
|
+
Most commands allow you to provide a type to make working with typescript
|
|
158
|
+
easier.
|
|
123
159
|
|
|
124
160
|
```ts
|
|
125
|
-
const data = await redis.get<MyCustomType>("key")
|
|
161
|
+
const data = await redis.get<MyCustomType>("key");
|
|
126
162
|
// data is typed as `MyCustomType`
|
|
127
163
|
```
|
|
128
164
|
|
|
@@ -130,8 +166,8 @@ const data = await redis.get<MyCustomType>("key")
|
|
|
130
166
|
|
|
131
167
|
### Explicit authentication
|
|
132
168
|
|
|
133
|
-
The library is no longer automatically trying to load connection secrets from
|
|
134
|
-
You must either supply them yourself:
|
|
169
|
+
The library is no longer automatically trying to load connection secrets from
|
|
170
|
+
environment variables. You must either supply them yourself:
|
|
135
171
|
|
|
136
172
|
```ts
|
|
137
173
|
import { Redis } from "@upstash/redis"
|
|
@@ -146,14 +182,14 @@ Or use one of the static constructors to load from environment variables:
|
|
|
146
182
|
|
|
147
183
|
```ts
|
|
148
184
|
// Nodejs
|
|
149
|
-
import { Redis } from "@upstash/redis"
|
|
150
|
-
const redis = Redis.fromEnv()
|
|
185
|
+
import { Redis } from "@upstash/redis";
|
|
186
|
+
const redis = Redis.fromEnv();
|
|
151
187
|
```
|
|
152
188
|
|
|
153
189
|
```ts
|
|
154
190
|
// or when deploying to cloudflare workers
|
|
155
|
-
import { Redis } from "@upstash/redis/cloudflare"
|
|
156
|
-
const redis = Redis.fromEnv()
|
|
191
|
+
import { Redis } from "@upstash/redis/cloudflare";
|
|
192
|
+
const redis = Redis.fromEnv();
|
|
157
193
|
```
|
|
158
194
|
|
|
159
195
|
### Error handling
|
|
@@ -162,50 +198,56 @@ Errors are now thrown automatically instead of being returned to you.
|
|
|
162
198
|
|
|
163
199
|
```ts
|
|
164
200
|
// old
|
|
165
|
-
const { data, error } = await set("key", "value")
|
|
201
|
+
const { data, error } = await set("key", "value");
|
|
166
202
|
if (error) {
|
|
167
|
-
throw new Error(error)
|
|
203
|
+
throw new Error(error);
|
|
168
204
|
}
|
|
169
205
|
|
|
170
206
|
// new
|
|
171
|
-
const data = await redis.set("key", "value") // error is thrown automatically
|
|
207
|
+
const data = await redis.set("key", "value"); // error is thrown automatically
|
|
172
208
|
```
|
|
173
209
|
|
|
174
210
|
## Pipeline
|
|
175
211
|
|
|
176
|
-
`v1.0.0` introduces redis pipelines.
|
|
177
|
-
|
|
212
|
+
`v1.0.0` introduces redis pipelines. Pipelining commands allows you to send a
|
|
213
|
+
single http request with multiple commands.
|
|
178
214
|
|
|
179
215
|
```ts
|
|
180
|
-
import { Redis } from "@upstash/redis"
|
|
216
|
+
import { Redis } from "@upstash/redis";
|
|
181
217
|
|
|
182
218
|
const redis = new Redis({
|
|
183
219
|
/* auth */
|
|
184
|
-
})
|
|
220
|
+
});
|
|
185
221
|
|
|
186
|
-
const p = redis.pipeline()
|
|
222
|
+
const p = redis.pipeline();
|
|
187
223
|
|
|
188
224
|
// Now you can chain multiple commands to create your pipeline:
|
|
189
225
|
|
|
190
|
-
p.set("key", 2)
|
|
191
|
-
p.incr("key")
|
|
226
|
+
p.set("key", 2);
|
|
227
|
+
p.incr("key");
|
|
192
228
|
|
|
193
229
|
// or inline:
|
|
194
|
-
p.hset("key2", "field", { hello: "world" }).hvals("key2")
|
|
230
|
+
p.hset("key2", "field", { hello: "world" }).hvals("key2");
|
|
195
231
|
|
|
196
232
|
// Execute the pipeline once you are done building it:
|
|
197
233
|
// `exec` returns an array where each element represents the response of a command in the pipeline.
|
|
198
234
|
// You can optionally provide a type like this to get a typed response.
|
|
199
|
-
const res = await p.exec<[Type1, Type2, Type3]>()
|
|
235
|
+
const res = await p.exec<[Type1, Type2, Type3]>();
|
|
200
236
|
```
|
|
201
237
|
|
|
202
|
-
For more information about pipelines using REST see
|
|
238
|
+
For more information about pipelines using REST see
|
|
239
|
+
[here](https://blog.upstash.com/pipeline).
|
|
203
240
|
|
|
204
241
|
### Advanced
|
|
205
242
|
|
|
206
|
-
A low level `Command` class can be imported from `@upstash/redis` in case you
|
|
243
|
+
A low level `Command` class can be imported from `@upstash/redis` in case you
|
|
244
|
+
need more control about types and or (de)serialization.
|
|
207
245
|
|
|
208
|
-
By default all objects you are storing in redis are serialized using
|
|
246
|
+
By default all objects you are storing in redis are serialized using
|
|
247
|
+
`JSON.stringify` and recursively deserialized as well. Here's an example how you
|
|
248
|
+
could customize that behaviour. Keep in mind that you need to provide a `fetch`
|
|
249
|
+
polyfill if you are running on nodejs. We recommend
|
|
250
|
+
[isomorphic-fetch](https://www.npmjs.com/package/isomorphic-fetch).
|
|
209
251
|
|
|
210
252
|
```ts
|
|
211
253
|
import { Command } from "@upstash/redis/commands"
|
|
@@ -232,46 +274,53 @@ const client = new HttpClient({
|
|
|
232
274
|
})
|
|
233
275
|
|
|
234
276
|
const res = new CustomGetCommand("key").exec(client)
|
|
235
|
-
|
|
236
277
|
```
|
|
237
278
|
|
|
238
279
|
### Additional information
|
|
239
280
|
|
|
240
281
|
#### `keepalive`
|
|
241
282
|
|
|
242
|
-
`@upstash/redis` is
|
|
243
|
-
|
|
244
|
-
|
|
283
|
+
`@upstash/redis` is capable of reusing connections where possible to minimize
|
|
284
|
+
latency. Connections can be reused if the client is stored in memory and not
|
|
285
|
+
initialized with every new function invocation. The easiest way to achieve this
|
|
286
|
+
is by creating the client outside of your handler and adding an https agent:
|
|
245
287
|
|
|
246
288
|
```ts
|
|
247
289
|
// Nextjs api route
|
|
248
|
-
import { Redis } from "@upstash/redis"
|
|
290
|
+
import { Redis } from "@upstash/redis";
|
|
291
|
+
import https from "https";
|
|
249
292
|
|
|
250
|
-
const redis = Redis.fromEnv(
|
|
293
|
+
const redis = Redis.fromEnv({
|
|
294
|
+
agent: new https.Agent({ keepAlive: true }),
|
|
295
|
+
});
|
|
251
296
|
|
|
252
297
|
export default async function (req, res) {
|
|
253
298
|
// use redis here
|
|
254
299
|
}
|
|
255
300
|
```
|
|
256
301
|
|
|
257
|
-
Whenever your hot lambda receives a new request the client is already
|
|
302
|
+
Whenever your hot lambda receives a new request the client is already
|
|
303
|
+
initialized and the previously established connection to upstash is reused.
|
|
258
304
|
|
|
259
305
|
#### Javascript MAX_SAFE_INTEGER
|
|
260
306
|
|
|
261
|
-
Javascript can not handle numbers larger than `2^53 -1` safely and would return
|
|
262
|
-
|
|
307
|
+
Javascript can not handle numbers larger than `2^53 -1` safely and would return
|
|
308
|
+
wrong results when trying to deserialize them. In these cases the default
|
|
309
|
+
deserializer will return them as string instead. This might cause a mismatch
|
|
310
|
+
with your custom types.
|
|
263
311
|
|
|
264
312
|
```ts
|
|
265
|
-
await redis.set("key", "101600000000150081467")
|
|
266
|
-
const res = await redis<number>("get")
|
|
313
|
+
await redis.set("key", "101600000000150081467");
|
|
314
|
+
const res = await redis<number>("get");
|
|
267
315
|
```
|
|
268
316
|
|
|
269
|
-
In this example `res` will still be a string despite the type annotation.
|
|
270
|
-
|
|
317
|
+
In this example `res` will still be a string despite the type annotation. Please
|
|
318
|
+
keep that in mind and adjust accordingly.
|
|
271
319
|
|
|
272
320
|
## Docs
|
|
273
321
|
|
|
274
|
-
See [the documentation](https://docs.upstash.com/features/javascriptsdk) for
|
|
322
|
+
See [the documentation](https://docs.upstash.com/features/javascriptsdk) for
|
|
323
|
+
details.
|
|
275
324
|
|
|
276
325
|
## Contributing
|
|
277
326
|
|
|
@@ -283,7 +332,8 @@ pnpm install
|
|
|
283
332
|
|
|
284
333
|
### Database
|
|
285
334
|
|
|
286
|
-
Create a new redis database on [upstash](https://console.upstash.com/) and copy
|
|
335
|
+
Create a new redis database on [upstash](https://console.upstash.com/) and copy
|
|
336
|
+
the url and token to `.env` (See `.env.example` for reference)
|
|
287
337
|
|
|
288
338
|
### Running tests
|
|
289
339
|
|
package/esm/package.json
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { Command } from "./command.js";
|
|
2
|
+
/**
|
|
3
|
+
* @see https://redis.io/commands/bitcount
|
|
4
|
+
*/
|
|
5
|
+
export class BitCountCommand extends Command {
|
|
6
|
+
constructor(key, start, end) {
|
|
7
|
+
const command = ["bitcount", key];
|
|
8
|
+
if (typeof start === "number") {
|
|
9
|
+
command.push(start);
|
|
10
|
+
}
|
|
11
|
+
if (typeof end === "number") {
|
|
12
|
+
command.push(end);
|
|
13
|
+
}
|
|
14
|
+
super(command);
|
|
15
|
+
}
|
|
16
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { Command } from "./command.js";
|
|
2
|
+
/**
|
|
3
|
+
* @see https://redis.io/commands/bitop
|
|
4
|
+
*/
|
|
5
|
+
export class BitOpCommand extends Command {
|
|
6
|
+
constructor(op, destinationKey, sourceKey, ...sourceKeys) {
|
|
7
|
+
super(["bitop", op, destinationKey, sourceKey, ...sourceKeys]);
|
|
8
|
+
}
|
|
9
|
+
}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { UpstashError } from "../error.js";
|
|
2
|
+
import { parseResponse } from "../util.js";
|
|
3
|
+
/**
|
|
4
|
+
* Command offers default (de)serialization and the exec method to all commands.
|
|
5
|
+
*
|
|
6
|
+
* TData represents what the user will enter or receive,
|
|
7
|
+
* TResult is the raw data returned from upstash, which may need to be transformed or parsed.
|
|
8
|
+
*/
|
|
9
|
+
export class Command {
|
|
10
|
+
/**
|
|
11
|
+
* Create a new command instance.
|
|
12
|
+
*
|
|
13
|
+
* You can define a custom `deserialize` function. By default we try to deserialize as json.
|
|
14
|
+
*/
|
|
15
|
+
constructor(command, opts) {
|
|
16
|
+
Object.defineProperty(this, "command", {
|
|
17
|
+
enumerable: true,
|
|
18
|
+
configurable: true,
|
|
19
|
+
writable: true,
|
|
20
|
+
value: void 0
|
|
21
|
+
});
|
|
22
|
+
Object.defineProperty(this, "deserialize", {
|
|
23
|
+
enumerable: true,
|
|
24
|
+
configurable: true,
|
|
25
|
+
writable: true,
|
|
26
|
+
value: void 0
|
|
27
|
+
});
|
|
28
|
+
this.command = command.map((c) => typeof c === "string" ? c : JSON.stringify(c));
|
|
29
|
+
this.deserialize = opts?.deserialize ?? parseResponse;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Execute the command using a client.
|
|
33
|
+
*/
|
|
34
|
+
async exec(client) {
|
|
35
|
+
const { result, error } = await client.request({
|
|
36
|
+
body: this.command,
|
|
37
|
+
});
|
|
38
|
+
if (error) {
|
|
39
|
+
throw new UpstashError(error);
|
|
40
|
+
}
|
|
41
|
+
if (typeof result === "undefined") {
|
|
42
|
+
throw new Error(`Request did not return a result`);
|
|
43
|
+
}
|
|
44
|
+
return this.deserialize(result);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { Command } from "./command.js";
|
|
2
|
+
/**
|
|
3
|
+
* @see https://redis.io/commands/flushall
|
|
4
|
+
*/
|
|
5
|
+
export class FlushAllCommand extends Command {
|
|
6
|
+
constructor(opts) {
|
|
7
|
+
const command = ["flushall"];
|
|
8
|
+
if (opts?.async) {
|
|
9
|
+
command.push("async");
|
|
10
|
+
}
|
|
11
|
+
super(command);
|
|
12
|
+
}
|
|
13
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { Command } from "./command.js";
|
|
2
|
+
/**
|
|
3
|
+
* @see https://redis.io/commands/flushdb
|
|
4
|
+
*/
|
|
5
|
+
export class FlushDBCommand extends Command {
|
|
6
|
+
constructor(opts) {
|
|
7
|
+
const command = ["flushdb"];
|
|
8
|
+
if (opts?.async) {
|
|
9
|
+
command.push("async");
|
|
10
|
+
}
|
|
11
|
+
super(command);
|
|
12
|
+
}
|
|
13
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { Command } from "./command.js";
|
|
2
|
+
/**
|
|
3
|
+
* @param result De
|
|
4
|
+
* @returns
|
|
5
|
+
*/
|
|
6
|
+
function deserialize(result) {
|
|
7
|
+
if (result.length === 0) {
|
|
8
|
+
return null;
|
|
9
|
+
}
|
|
10
|
+
const obj = {};
|
|
11
|
+
while (result.length >= 2) {
|
|
12
|
+
const key = result.shift();
|
|
13
|
+
const value = result.shift();
|
|
14
|
+
try {
|
|
15
|
+
obj[key] = JSON.parse(value);
|
|
16
|
+
}
|
|
17
|
+
catch {
|
|
18
|
+
obj[key] = value;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
return obj;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* @see https://redis.io/commands/hgetall
|
|
25
|
+
*/
|
|
26
|
+
export class HGetAllCommand extends Command {
|
|
27
|
+
constructor(key) {
|
|
28
|
+
super(["hgetall", key], { deserialize: (result) => deserialize(result) });
|
|
29
|
+
}
|
|
30
|
+
}
|