package/package.json000644 0000002255 3560116604 011552 0ustar00000000 000000 { "name": "redis-commands", "version": "1.5.0", "description": "Redis commands", "main": "index.js", "scripts": { "pretest": "npm run lint", "test": "mocha", "posttest": "npm run coverage && npm run coverage:check", "coverage": "node ./node_modules/istanbul/lib/cli.js cover --preserve-comments ./node_modules/mocha/bin/_mocha -- -R spec", "coverage:check": "node ./node_modules/istanbul/lib/cli.js check-coverage --branch 100 --statement 100", "build": "node tools/build", "lint": "standard --fix --verbose | snazzy" }, "repository": { "type": "git", "url": "https://github.com/NodeRedis/redis-commands.git" }, "keywords": [ "redis", "commands", "prefix" ], "author": "luin (http://zihua.li)", "license": "MIT", "bugs": { "url": "https://github.com/NodeRedis/redis-commands/issues" }, "homepage": "https://github.com/NodeRedis/redis-commands", "devDependencies": { "chai": "^4.0.1", "codeclimate-test-reporter": "^0.5.1", "ioredis": "^4.9.0", "istanbul": "^0.4.3", "safe-stable-stringify": "^1.0.0", "mocha": "^6.0.0", "snazzy": "^8.0.0", "standard": "^12.0.0" } } package/changelog.md000664 0000002367 3560116604 011543 0ustar00000000 000000 ## v.1.5.0 - 10 May, 2019 Features - Updated the commands list - Added support for `XREAD` and `XREADGROUP` in `.getKeyIndexes()` ## v.1.4.0 - 8 Oct, 2018 Features - Updated the commands list ## v.1.3.5 - 28 Feb, 2018 Bugfix - Rebuild the commands with the latest stable release. In v.1.3.3 the wrong Redis version was used. ## v.1.3.4 - 26 Feb, 2018 Chore - Removed coverage folder from npm ## v.1.3.3 - 24 Feb, 2018 Features - Rebuild the commands ## v.1.3.2 - 24 Feb, 2018 Chore - Updated dependencies - Fixed typos ## v.1.3.1 - 25 Jan, 2017 Bugfix - Fix require for for webpack ## v.1.3.0 - 20 Oct, 2016 Features - Rebuild the commands with the newest Redis unstable release ## v.1.2.0 - 21 Apr, 2016 Features - Added support for `MIGRATE [...] KEYS key1, key2` (Redis >= v.3.0.6) - Added build sanity check for unhandled commands with moveable keys - Rebuild the commands with the newest unstable release - Improved performance of .getKeyIndexes() Bugfix - Fixed command command returning the wrong arity due to a Redis bug - Fixed brpop command returning the wrong keystop due to a Redis bug ## v.1.1.0 - 09 Feb, 2016 Features - Added .exists() to check for command existence - Improved performance of .hasFlag() package/commands.json000644 0000070174 3560116604 011765 0ustar00000000 000000 { "append": { "arity": 3, "flags": [ "write", "denyoom" ], "keyStart": 1, "keyStop": 1, "step": 1 }, "asking": { "arity": 1, "flags": [ "fast" ], "keyStart": 0, "keyStop": 0, "step": 0 }, "auth": { "arity": 2, "flags": [ "noscript", "loading", "stale", "fast" ], "keyStart": 0, "keyStop": 0, "step": 0 }, "bgrewriteaof": { "arity": 1, "flags": [ "admin", "noscript" ], "keyStart": 0, "keyStop": 0, "step": 0 }, "bgsave": { "arity": -1, "flags": [ "admin", "noscript" ], "keyStart": 0, "keyStop": 0, "step": 0 }, "bitcount": { "arity": -2, "flags": [ "readonly" ], "keyStart": 1, "keyStop": 1, "step": 1 }, "bitfield": { "arity": -2, "flags": [ "write", "denyoom" ], "keyStart": 1, "keyStop": 1, "step": 1 }, "bitop": { "arity": -4, "flags": [ "write", "denyoom" ], "keyStart": 2, "keyStop": -1, "step": 1 }, "bitpos": { "arity": -3, "flags": [ "readonly" ], "keyStart": 1, "keyStop": 1, "step": 1 }, "blpop": { "arity": -3, "flags": [ "write", "noscript" ], "keyStart": 1, "keyStop": -2, "step": 1 }, "brpop": { "arity": -3, "flags": [ "write", "noscript" ], "keyStart": 1, "keyStop": -2, "step": 1 }, "brpoplpush": { "arity": 4, "flags": [ "write", "denyoom", "noscript" ], "keyStart": 1, "keyStop": 2, "step": 1 }, "bzpopmax": { "arity": -2, "flags": [ "write", "noscript", "fast" ], "keyStart": 1, "keyStop": -2, "step": 1 }, "bzpopmin": { "arity": -2, "flags": [ "write", "noscript", "fast" ], "keyStart": 1, "keyStop": -2, "step": 1 }, "client": { "arity": -2, "flags": [ "admin", "noscript" ], "keyStart": 0, "keyStop": 0, "step": 0 }, "cluster": { "arity": -2, "flags": [ "admin" ], "keyStart": 0, "keyStop": 0, "step": 0 }, "command": { "arity": 1, "flags": [ "random", "loading", "stale" ], "keyStart": 0, "keyStop": 0, "step": 0 }, "config": { "arity": -2, "flags": [ "admin", "noscript", "loading", "stale" ], "keyStart": 0, "keyStop": 0, "step": 0 }, "dbsize": { "arity": 1, "flags": [ "readonly", "fast" ], "keyStart": 0, "keyStop": 0, "step": 0 }, "debug": { "arity": -2, "flags": [ "admin", "noscript" ], "keyStart": 0, "keyStop": 0, "step": 0 }, "decr": { "arity": 2, "flags": [ "write", "denyoom", "fast" ], "keyStart": 1, "keyStop": 1, "step": 1 }, "decrby": { "arity": 3, "flags": [ "write", "denyoom", "fast" ], "keyStart": 1, "keyStop": 1, "step": 1 }, "del": { "arity": -2, "flags": [ "write" ], "keyStart": 1, "keyStop": -1, "step": 1 }, "discard": { "arity": 1, "flags": [ "noscript", "fast" ], "keyStart": 0, "keyStop": 0, "step": 0 }, "dump": { "arity": 2, "flags": [ "readonly", "random" ], "keyStart": 1, "keyStop": 1, "step": 1 }, "echo": { "arity": 2, "flags": [ "fast" ], "keyStart": 0, "keyStop": 0, "step": 0 }, "eval": { "arity": -3, "flags": [ "noscript", "movablekeys" ], "keyStart": 0, "keyStop": 0, "step": 0 }, "evalsha": { "arity": -3, "flags": [ "noscript", "movablekeys" ], "keyStart": 0, "keyStop": 0, "step": 0 }, "exec": { "arity": 1, "flags": [ "noscript", "skip_monitor" ], "keyStart": 0, "keyStop": 0, "step": 0 }, "exists": { "arity": -2, "flags": [ "readonly", "fast" ], "keyStart": 1, "keyStop": -1, "step": 1 }, "expire": { "arity": 3, "flags": [ "write", "fast" ], "keyStart": 1, "keyStop": 1, "step": 1 }, "expireat": { "arity": 3, "flags": [ "write", "fast" ], "keyStart": 1, "keyStop": 1, "step": 1 }, "flushall": { "arity": -1, "flags": [ "write" ], "keyStart": 0, "keyStop": 0, "step": 0 }, "flushdb": { "arity": -1, "flags": [ "write" ], "keyStart": 0, "keyStop": 0, "step": 0 }, "geoadd": { "arity": -5, "flags": [ "write", "denyoom" ], "keyStart": 1, "keyStop": 1, "step": 1 }, "geodist": { "arity": -4, "flags": [ "readonly" ], "keyStart": 1, "keyStop": 1, "step": 1 }, "geohash": { "arity": -2, "flags": [ "readonly" ], "keyStart": 1, "keyStop": 1, "step": 1 }, "geopos": { "arity": -2, "flags": [ "readonly" ], "keyStart": 1, "keyStop": 1, "step": 1 }, "georadius": { "arity": -6, "flags": [ "write", "movablekeys" ], "keyStart": 1, "keyStop": 1, "step": 1 }, "georadius_ro": { "arity": -6, "flags": [ "readonly", "movablekeys" ], "keyStart": 1, "keyStop": 1, "step": 1 }, "georadiusbymember": { "arity": -5, "flags": [ "write", "movablekeys" ], "keyStart": 1, "keyStop": 1, "step": 1 }, "georadiusbymember_ro": { "arity": -5, "flags": [ "readonly", "movablekeys" ], "keyStart": 1, "keyStop": 1, "step": 1 }, "get": { "arity": 2, "flags": [ "readonly", "fast" ], "keyStart": 1, "keyStop": 1, "step": 1 }, "getbit": { "arity": 3, "flags": [ "readonly", "fast" ], "keyStart": 1, "keyStop": 1, "step": 1 }, "getrange": { "arity": 4, "flags": [ "readonly" ], "keyStart": 1, "keyStop": 1, "step": 1 }, "getset": { "arity": 3, "flags": [ "write", "denyoom" ], "keyStart": 1, "keyStop": 1, "step": 1 }, "hdel": { "arity": -3, "flags": [ "write", "fast" ], "keyStart": 1, "keyStop": 1, "step": 1 }, "hexists": { "arity": 3, "flags": [ "readonly", "fast" ], "keyStart": 1, "keyStop": 1, "step": 1 }, "hget": { "arity": 3, "flags": [ "readonly", "fast" ], "keyStart": 1, "keyStop": 1, "step": 1 }, "hgetall": { "arity": 2, "flags": [ "readonly", "random" ], "keyStart": 1, "keyStop": 1, "step": 1 }, "hincrby": { "arity": 4, "flags": [ "write", "denyoom", "fast" ], "keyStart": 1, "keyStop": 1, "step": 1 }, "hincrbyfloat": { "arity": 4, "flags": [ "write", "denyoom", "fast" ], "keyStart": 1, "keyStop": 1, "step": 1 }, "hkeys": { "arity": 2, "flags": [ "readonly", "sort_for_script" ], "keyStart": 1, "keyStop": 1, "step": 1 }, "hlen": { "arity": 2, "flags": [ "readonly", "fast" ], "keyStart": 1, "keyStop": 1, "step": 1 }, "hmget": { "arity": -3, "flags": [ "readonly", "fast" ], "keyStart": 1, "keyStop": 1, "step": 1 }, "hmset": { "arity": -4, "flags": [ "write", "denyoom", "fast" ], "keyStart": 1, "keyStop": 1, "step": 1 }, "host:": { "arity": -1, "flags": [ "loading", "stale" ], "keyStart": 0, "keyStop": 0, "step": 0 }, "hscan": { "arity": -3, "flags": [ "readonly", "random" ], "keyStart": 1, "keyStop": 1, "step": 1 }, "hset": { "arity": -4, "flags": [ "write", "denyoom", "fast" ], "keyStart": 1, "keyStop": 1, "step": 1 }, "hsetnx": { "arity": 4, "flags": [ "write", "denyoom", "fast" ], "keyStart": 1, "keyStop": 1, "step": 1 }, "hstrlen": { "arity": 3, "flags": [ "readonly", "fast" ], "keyStart": 1, "keyStop": 1, "step": 1 }, "hvals": { "arity": 2, "flags": [ "readonly", "sort_for_script" ], "keyStart": 1, "keyStop": 1, "step": 1 }, "incr": { "arity": 2, "flags": [ "write", "denyoom", "fast" ], "keyStart": 1, "keyStop": 1, "step": 1 }, "incrby": { "arity": 3, "flags": [ "write", "denyoom", "fast" ], "keyStart": 1, "keyStop": 1, "step": 1 }, "incrbyfloat": { "arity": 3, "flags": [ "write", "denyoom", "fast" ], "keyStart": 1, "keyStop": 1, "step": 1 }, "info": { "arity": -1, "flags": [ "random", "loading", "stale" ], "keyStart": 0, "keyStop": 0, "step": 0 }, "keys": { "arity": 2, "flags": [ "readonly", "sort_for_script" ], "keyStart": 0, "keyStop": 0, "step": 0 }, "lastsave": { "arity": 1, "flags": [ "random", "fast" ], "keyStart": 0, "keyStop": 0, "step": 0 }, "latency": { "arity": -2, "flags": [ "admin", "noscript", "loading", "stale" ], "keyStart": 0, "keyStop": 0, "step": 0 }, "lindex": { "arity": 3, "flags": [ "readonly" ], "keyStart": 1, "keyStop": 1, "step": 1 }, "linsert": { "arity": 5, "flags": [ "write", "denyoom" ], "keyStart": 1, "keyStop": 1, "step": 1 }, "llen": { "arity": 2, "flags": [ "readonly", "fast" ], "keyStart": 1, "keyStop": 1, "step": 1 }, "lolwut": { "arity": -1, "flags": [ "readonly" ], "keyStart": 0, "keyStop": 0, "step": 0 }, "lpop": { "arity": 2, "flags": [ "write", "fast" ], "keyStart": 1, "keyStop": 1, "step": 1 }, "lpush": { "arity": -3, "flags": [ "write", "denyoom", "fast" ], "keyStart": 1, "keyStop": 1, "step": 1 }, "lpushx": { "arity": -3, "flags": [ "write", "denyoom", "fast" ], "keyStart": 1, "keyStop": 1, "step": 1 }, "lrange": { "arity": 4, "flags": [ "readonly" ], "keyStart": 1, "keyStop": 1, "step": 1 }, "lrem": { "arity": 4, "flags": [ "write" ], "keyStart": 1, "keyStop": 1, "step": 1 }, "lset": { "arity": 4, "flags": [ "write", "denyoom" ], "keyStart": 1, "keyStop": 1, "step": 1 }, "ltrim": { "arity": 4, "flags": [ "write" ], "keyStart": 1, "keyStop": 1, "step": 1 }, "memory": { "arity": -2, "flags": [ "readonly", "random" ], "keyStart": 0, "keyStop": 0, "step": 0 }, "mget": { "arity": -2, "flags": [ "readonly", "fast" ], "keyStart": 1, "keyStop": -1, "step": 1 }, "migrate": { "arity": -6, "flags": [ "write", "random", "movablekeys" ], "keyStart": 0, "keyStop": 0, "step": 0 }, "module": { "arity": -2, "flags": [ "admin", "noscript" ], "keyStart": 0, "keyStop": 0, "step": 0 }, "monitor": { "arity": 1, "flags": [ "admin", "noscript" ], "keyStart": 0, "keyStop": 0, "step": 0 }, "move": { "arity": 3, "flags": [ "write", "fast" ], "keyStart": 1, "keyStop": 1, "step": 1 }, "mset": { "arity": -3, "flags": [ "write", "denyoom" ], "keyStart": 1, "keyStop": -1, "step": 2 }, "msetnx": { "arity": -3, "flags": [ "write", "denyoom" ], "keyStart": 1, "keyStop": -1, "step": 2 }, "multi": { "arity": 1, "flags": [ "noscript", "fast" ], "keyStart": 0, "keyStop": 0, "step": 0 }, "object": { "arity": -2, "flags": [ "readonly", "random" ], "keyStart": 2, "keyStop": 2, "step": 1 }, "persist": { "arity": 2, "flags": [ "write", "fast" ], "keyStart": 1, "keyStop": 1, "step": 1 }, "pexpire": { "arity": 3, "flags": [ "write", "fast" ], "keyStart": 1, "keyStop": 1, "step": 1 }, "pexpireat": { "arity": 3, "flags": [ "write", "fast" ], "keyStart": 1, "keyStop": 1, "step": 1 }, "pfadd": { "arity": -2, "flags": [ "write", "denyoom", "fast" ], "keyStart": 1, "keyStop": 1, "step": 1 }, "pfcount": { "arity": -2, "flags": [ "readonly" ], "keyStart": 1, "keyStop": -1, "step": 1 }, "pfdebug": { "arity": -3, "flags": [ "write" ], "keyStart": 0, "keyStop": 0, "step": 0 }, "pfmerge": { "arity": -2, "flags": [ "write", "denyoom" ], "keyStart": 1, "keyStop": -1, "step": 1 }, "pfselftest": { "arity": 1, "flags": [ "admin" ], "keyStart": 0, "keyStop": 0, "step": 0 }, "ping": { "arity": -1, "flags": [ "stale", "fast" ], "keyStart": 0, "keyStop": 0, "step": 0 }, "post": { "arity": -1, "flags": [ "loading", "stale" ], "keyStart": 0, "keyStop": 0, "step": 0 }, "psetex": { "arity": 4, "flags": [ "write", "denyoom" ], "keyStart": 1, "keyStop": 1, "step": 1 }, "psubscribe": { "arity": -2, "flags": [ "pubsub", "noscript", "loading", "stale" ], "keyStart": 0, "keyStop": 0, "step": 0 }, "psync": { "arity": 3, "flags": [ "readonly", "admin", "noscript" ], "keyStart": 0, "keyStop": 0, "step": 0 }, "pttl": { "arity": 2, "flags": [ "readonly", "random", "fast" ], "keyStart": 1, "keyStop": 1, "step": 1 }, "publish": { "arity": 3, "flags": [ "pubsub", "loading", "stale", "fast" ], "keyStart": 0, "keyStop": 0, "step": 0 }, "pubsub": { "arity": -2, "flags": [ "pubsub", "random", "loading", "stale" ], "keyStart": 0, "keyStop": 0, "step": 0 }, "punsubscribe": { "arity": -1, "flags": [ "pubsub", "noscript", "loading", "stale" ], "keyStart": 0, "keyStop": 0, "step": 0 }, "quit": { "arity": 1, "flags": [ "loading", "stale", "readonly" ], "keyStart": 0, "keyStop": 0, "step": 0 }, "randomkey": { "arity": 1, "flags": [ "readonly", "random" ], "keyStart": 0, "keyStop": 0, "step": 0 }, "readonly": { "arity": 1, "flags": [ "fast" ], "keyStart": 0, "keyStop": 0, "step": 0 }, "readwrite": { "arity": 1, "flags": [ "fast" ], "keyStart": 0, "keyStop": 0, "step": 0 }, "rename": { "arity": 3, "flags": [ "write" ], "keyStart": 1, "keyStop": 2, "step": 1 }, "renamenx": { "arity": 3, "flags": [ "write", "fast" ], "keyStart": 1, "keyStop": 2, "step": 1 }, "replconf": { "arity": -1, "flags": [ "admin", "noscript", "loading", "stale" ], "keyStart": 0, "keyStop": 0, "step": 0 }, "replicaof": { "arity": 3, "flags": [ "admin", "noscript", "stale" ], "keyStart": 0, "keyStop": 0, "step": 0 }, "restore": { "arity": -4, "flags": [ "write", "denyoom" ], "keyStart": 1, "keyStop": 1, "step": 1 }, "restore-asking": { "arity": -4, "flags": [ "write", "denyoom", "asking" ], "keyStart": 1, "keyStop": 1, "step": 1 }, "role": { "arity": 1, "flags": [ "noscript", "loading", "stale" ], "keyStart": 0, "keyStop": 0, "step": 0 }, "rpop": { "arity": 2, "flags": [ "write", "fast" ], "keyStart": 1, "keyStop": 1, "step": 1 }, "rpoplpush": { "arity": 3, "flags": [ "write", "denyoom" ], "keyStart": 1, "keyStop": 2, "step": 1 }, "rpush": { "arity": -3, "flags": [ "write", "denyoom", "fast" ], "keyStart": 1, "keyStop": 1, "step": 1 }, "rpushx": { "arity": -3, "flags": [ "write", "denyoom", "fast" ], "keyStart": 1, "keyStop": 1, "step": 1 }, "sadd": { "arity": -3, "flags": [ "write", "denyoom", "fast" ], "keyStart": 1, "keyStop": 1, "step": 1 }, "save": { "arity": 1, "flags": [ "admin", "noscript" ], "keyStart": 0, "keyStop": 0, "step": 0 }, "scan": { "arity": -2, "flags": [ "readonly", "random" ], "keyStart": 0, "keyStop": 0, "step": 0 }, "scard": { "arity": 2, "flags": [ "readonly", "fast" ], "keyStart": 1, "keyStop": 1, "step": 1 }, "script": { "arity": -2, "flags": [ "noscript" ], "keyStart": 0, "keyStop": 0, "step": 0 }, "sdiff": { "arity": -2, "flags": [ "readonly", "sort_for_script" ], "keyStart": 1, "keyStop": -1, "step": 1 }, "sdiffstore": { "arity": -3, "flags": [ "write", "denyoom" ], "keyStart": 1, "keyStop": -1, "step": 1 }, "select": { "arity": 2, "flags": [ "loading", "fast" ], "keyStart": 0, "keyStop": 0, "step": 0 }, "set": { "arity": -3, "flags": [ "write", "denyoom" ], "keyStart": 1, "keyStop": 1, "step": 1 }, "setbit": { "arity": 4, "flags": [ "write", "denyoom" ], "keyStart": 1, "keyStop": 1, "step": 1 }, "setex": { "arity": 4, "flags": [ "write", "denyoom" ], "keyStart": 1, "keyStop": 1, "step": 1 }, "setnx": { "arity": 3, "flags": [ "write", "denyoom", "fast" ], "keyStart": 1, "keyStop": 1, "step": 1 }, "setrange": { "arity": 4, "flags": [ "write", "denyoom" ], "keyStart": 1, "keyStop": 1, "step": 1 }, "shutdown": { "arity": -1, "flags": [ "admin", "noscript", "loading", "stale" ], "keyStart": 0, "keyStop": 0, "step": 0 }, "sinter": { "arity": -2, "flags": [ "readonly", "sort_for_script" ], "keyStart": 1, "keyStop": -1, "step": 1 }, "sinterstore": { "arity": -3, "flags": [ "write", "denyoom" ], "keyStart": 1, "keyStop": -1, "step": 1 }, "sismember": { "arity": 3, "flags": [ "readonly", "fast" ], "keyStart": 1, "keyStop": 1, "step": 1 }, "slaveof": { "arity": 3, "flags": [ "admin", "noscript", "stale" ], "keyStart": 0, "keyStop": 0, "step": 0 }, "slowlog": { "arity": -2, "flags": [ "admin", "random" ], "keyStart": 0, "keyStop": 0, "step": 0 }, "smembers": { "arity": 2, "flags": [ "readonly", "sort_for_script" ], "keyStart": 1, "keyStop": 1, "step": 1 }, "smove": { "arity": 4, "flags": [ "write", "fast" ], "keyStart": 1, "keyStop": 2, "step": 1 }, "sort": { "arity": -2, "flags": [ "write", "denyoom", "movablekeys" ], "keyStart": 1, "keyStop": 1, "step": 1 }, "spop": { "arity": -2, "flags": [ "write", "random", "fast" ], "keyStart": 1, "keyStop": 1, "step": 1 }, "srandmember": { "arity": -2, "flags": [ "readonly", "random" ], "keyStart": 1, "keyStop": 1, "step": 1 }, "srem": { "arity": -3, "flags": [ "write", "fast" ], "keyStart": 1, "keyStop": 1, "step": 1 }, "sscan": { "arity": -3, "flags": [ "readonly", "random" ], "keyStart": 1, "keyStop": 1, "step": 1 }, "strlen": { "arity": 2, "flags": [ "readonly", "fast" ], "keyStart": 1, "keyStop": 1, "step": 1 }, "subscribe": { "arity": -2, "flags": [ "pubsub", "noscript", "loading", "stale" ], "keyStart": 0, "keyStop": 0, "step": 0 }, "substr": { "arity": 4, "flags": [ "readonly" ], "keyStart": 1, "keyStop": 1, "step": 1 }, "sunion": { "arity": -2, "flags": [ "readonly", "sort_for_script" ], "keyStart": 1, "keyStop": -1, "step": 1 }, "sunionstore": { "arity": -3, "flags": [ "write", "denyoom" ], "keyStart": 1, "keyStop": -1, "step": 1 }, "swapdb": { "arity": 3, "flags": [ "write", "fast" ], "keyStart": 0, "keyStop": 0, "step": 0 }, "sync": { "arity": 1, "flags": [ "readonly", "admin", "noscript" ], "keyStart": 0, "keyStop": 0, "step": 0 }, "time": { "arity": 1, "flags": [ "random", "fast" ], "keyStart": 0, "keyStop": 0, "step": 0 }, "touch": { "arity": -2, "flags": [ "readonly", "fast" ], "keyStart": 1, "keyStop": 1, "step": 1 }, "ttl": { "arity": 2, "flags": [ "readonly", "random", "fast" ], "keyStart": 1, "keyStop": 1, "step": 1 }, "type": { "arity": 2, "flags": [ "readonly", "fast" ], "keyStart": 1, "keyStop": 1, "step": 1 }, "unlink": { "arity": -2, "flags": [ "write", "fast" ], "keyStart": 1, "keyStop": -1, "step": 1 }, "unsubscribe": { "arity": -1, "flags": [ "pubsub", "noscript", "loading", "stale" ], "keyStart": 0, "keyStop": 0, "step": 0 }, "unwatch": { "arity": 1, "flags": [ "noscript", "fast" ], "keyStart": 0, "keyStop": 0, "step": 0 }, "wait": { "arity": 3, "flags": [ "noscript" ], "keyStart": 0, "keyStop": 0, "step": 0 }, "watch": { "arity": -2, "flags": [ "noscript", "fast" ], "keyStart": 1, "keyStop": -1, "step": 1 }, "xack": { "arity": -4, "flags": [ "write", "fast" ], "keyStart": 1, "keyStop": 1, "step": 1 }, "xadd": { "arity": -5, "flags": [ "write", "denyoom", "random", "fast" ], "keyStart": 1, "keyStop": 1, "step": 1 }, "xclaim": { "arity": -6, "flags": [ "write", "random", "fast" ], "keyStart": 1, "keyStop": 1, "step": 1 }, "xdel": { "arity": -3, "flags": [ "write", "fast" ], "keyStart": 1, "keyStop": 1, "step": 1 }, "xgroup": { "arity": -2, "flags": [ "write", "denyoom" ], "keyStart": 2, "keyStop": 2, "step": 1 }, "xinfo": { "arity": -2, "flags": [ "readonly", "random" ], "keyStart": 2, "keyStop": 2, "step": 1 }, "xlen": { "arity": 2, "flags": [ "readonly", "fast" ], "keyStart": 1, "keyStop": 1, "step": 1 }, "xpending": { "arity": -3, "flags": [ "readonly", "random" ], "keyStart": 1, "keyStop": 1, "step": 1 }, "xrange": { "arity": -4, "flags": [ "readonly" ], "keyStart": 1, "keyStop": 1, "step": 1 }, "xread": { "arity": -4, "flags": [ "readonly", "noscript", "movablekeys" ], "keyStart": 1, "keyStop": 1, "step": 1 }, "xreadgroup": { "arity": -7, "flags": [ "write", "noscript", "movablekeys" ], "keyStart": 1, "keyStop": 1, "step": 1 }, "xrevrange": { "arity": -4, "flags": [ "readonly" ], "keyStart": 1, "keyStop": 1, "step": 1 }, "xsetid": { "arity": 3, "flags": [ "write", "denyoom", "fast" ], "keyStart": 1, "keyStop": 1, "step": 1 }, "xtrim": { "arity": -2, "flags": [ "write", "random", "fast" ], "keyStart": 1, "keyStop": 1, "step": 1 }, "zadd": { "arity": -4, "flags": [ "write", "denyoom", "fast" ], "keyStart": 1, "keyStop": 1, "step": 1 }, "zcard": { "arity": 2, "flags": [ "readonly", "fast" ], "keyStart": 1, "keyStop": 1, "step": 1 }, "zcount": { "arity": 4, "flags": [ "readonly", "fast" ], "keyStart": 1, "keyStop": 1, "step": 1 }, "zincrby": { "arity": 4, "flags": [ "write", "denyoom", "fast" ], "keyStart": 1, "keyStop": 1, "step": 1 }, "zinterstore": { "arity": -4, "flags": [ "write", "denyoom", "movablekeys" ], "keyStart": 0, "keyStop": 0, "step": 0 }, "zlexcount": { "arity": 4, "flags": [ "readonly", "fast" ], "keyStart": 1, "keyStop": 1, "step": 1 }, "zpopmax": { "arity": -2, "flags": [ "write", "fast" ], "keyStart": 1, "keyStop": 1, "step": 1 }, "zpopmin": { "arity": -2, "flags": [ "write", "fast" ], "keyStart": 1, "keyStop": 1, "step": 1 }, "zrange": { "arity": -4, "flags": [ "readonly" ], "keyStart": 1, "keyStop": 1, "step": 1 }, "zrangebylex": { "arity": -4, "flags": [ "readonly" ], "keyStart": 1, "keyStop": 1, "step": 1 }, "zrangebyscore": { "arity": -4, "flags": [ "readonly" ], "keyStart": 1, "keyStop": 1, "step": 1 }, "zrank": { "arity": 3, "flags": [ "readonly", "fast" ], "keyStart": 1, "keyStop": 1, "step": 1 }, "zrem": { "arity": -3, "flags": [ "write", "fast" ], "keyStart": 1, "keyStop": 1, "step": 1 }, "zremrangebylex": { "arity": 4, "flags": [ "write" ], "keyStart": 1, "keyStop": 1, "step": 1 }, "zremrangebyrank": { "arity": 4, "flags": [ "write" ], "keyStart": 1, "keyStop": 1, "step": 1 }, "zremrangebyscore": { "arity": 4, "flags": [ "write" ], "keyStart": 1, "keyStop": 1, "step": 1 }, "zrevrange": { "arity": -4, "flags": [ "readonly" ], "keyStart": 1, "keyStop": 1, "step": 1 }, "zrevrangebylex": { "arity": -4, "flags": [ "readonly" ], "keyStart": 1, "keyStop": 1, "step": 1 }, "zrevrangebyscore": { "arity": -4, "flags": [ "readonly" ], "keyStart": 1, "keyStop": 1, "step": 1 }, "zrevrank": { "arity": 3, "flags": [ "readonly", "fast" ], "keyStart": 1, "keyStop": 1, "step": 1 }, "zscan": { "arity": -3, "flags": [ "readonly", "random" ], "keyStart": 1, "keyStop": 1, "step": 1 }, "zscore": { "arity": 3, "flags": [ "readonly", "fast" ], "keyStart": 1, "keyStop": 1, "step": 1 }, "zunionstore": { "arity": -4, "flags": [ "write", "denyoom", "movablekeys" ], "keyStart": 0, "keyStop": 0, "step": 0 } }package/index.js000644 0000010246 3560116604 010730 0ustar00000000 000000 'use strict' var commands = require('./commands.json') /** * Redis command list * * All commands are lowercased. * * @var {string[]} * @public */ exports.list = Object.keys(commands) var flags = {} exports.list.forEach(function (commandName) { flags[commandName] = commands[commandName].flags.reduce(function (flags, flag) { flags[flag] = true return flags }, {}) }) /** * Check if the command exists * * @param {string} commandName - the command name * @return {boolean} result * @public */ exports.exists = function (commandName) { return Boolean(commands[commandName]) } /** * Check if the command has the flag * * Some of possible flags: readonly, noscript, loading * @param {string} commandName - the command name * @param {string} flag - the flag to check * @return {boolean} result * @public */ exports.hasFlag = function (commandName, flag) { if (!flags[commandName]) { throw new Error('Unknown command ' + commandName) } return Boolean(flags[commandName][flag]) } /** * Get indexes of keys in the command arguments * * @param {string} commandName - the command name * @param {string[]} args - the arguments of the command * @param {object} [options] - options * @param {boolean} [options.parseExternalKey] - parse external keys * @return {number[]} - the list of the index * @public * * @example * ```javascript * getKeyIndexes('set', ['key', 'value']) // [0] * getKeyIndexes('mget', ['key1', 'key2']) // [0, 1] * ``` */ exports.getKeyIndexes = function (commandName, args, options) { var command = commands[commandName] if (!command) { throw new Error('Unknown command ' + commandName) } if (!Array.isArray(args)) { throw new Error('Expect args to be an array') } var keys = [] var i, keyStart, keyStop, parseExternalKey switch (commandName) { case 'zunionstore': case 'zinterstore': keys.push(0) // fall through case 'eval': case 'evalsha': keyStop = Number(args[1]) + 2 for (i = 2; i < keyStop; i++) { keys.push(i) } break case 'sort': parseExternalKey = options && options.parseExternalKey keys.push(0) for (i = 1; i < args.length - 1; i++) { if (typeof args[i] !== 'string') { continue } var directive = args[i].toUpperCase() if (directive === 'GET') { i += 1 if (args[i] !== '#') { if (parseExternalKey) { keys.push([i, getExternalKeyNameLength(args[i])]) } else { keys.push(i) } } } else if (directive === 'BY') { i += 1 if (parseExternalKey) { keys.push([i, getExternalKeyNameLength(args[i])]) } else { keys.push(i) } } else if (directive === 'STORE') { i += 1 keys.push(i) } } break case 'migrate': if (args[2] === '') { for (i = 5; i < args.length - 1; i++) { if (args[i].toUpperCase() === 'KEYS') { for (var j = i + 1; j < args.length; j++) { keys.push(j) } break } } } else { keys.push(2) } break case 'xreadgroup': case 'xread': // Keys are 1st half of the args after STREAMS argument. for (i = commandName === 'xread' ? 0 : 3; i < args.length - 1; i++) { if (String(args[i]).toUpperCase() === 'STREAMS') { for (j = i + 1; j <= i + ((args.length - 1 - i) / 2); j++) { keys.push(j) } break } } break default: // Step has to be at least one in this case, otherwise the command does // not contain a key. if (command.step > 0) { keyStart = command.keyStart - 1 keyStop = command.keyStop > 0 ? command.keyStop : args.length + command.keyStop + 1 for (i = keyStart; i < keyStop; i += command.step) { keys.push(i) } } break } return keys } function getExternalKeyNameLength (key) { if (typeof key !== 'string') { key = String(key) } var hashPos = key.indexOf('->') return hashPos === -1 ? key.length : hashPos } package/LICENSE000664 0000002065 3560116604 010272 0ustar00000000 000000 The MIT License (MIT) Copyright (c) 2015 NodeRedis Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. package/README.md000664 0000002730 3560116604 010543 0ustar00000000 000000 # Redis Commands [![Build Status](https://travis-ci.org/NodeRedis/redis-commands.png?branch=master)](https://travis-ci.org/NodeRedis/redis-commands) [![Code Climate](https://codeclimate.com/github/NodeRedis/redis-commands/badges/gpa.svg)](https://codeclimate.com/github/NodeRedis/redis-commands) [![Test Coverage](https://codeclimate.com/github/NodeRedis/redis-commands/badges/coverage.svg)](https://codeclimate.com/github/NodeRedis/redis-commands/coverage) This module exports all the commands that Redis supports. ## Install ```shell $ npm install redis-commands ``` ## Usage ```javascript var commands = require('redis-commands'); ``` `.list` is an array contains all the lowercased commands: ```javascript commands.list.forEach(function (command) { console.log(command); }); ``` `.exists()` is used to check if the command exists: ```javascript commands.exists('set') // true commands.exists('other-command') // false ``` `.hasFlag()` is used to check if the command has the flag: ```javascript commands.hasFlag('set', 'readonly') // false ``` `.getKeyIndexes()` is used to get the indexes of keys in the command arguments: ```javascript commands.getKeyIndexes('set', ['key', 'value']) // [0] commands.getKeyIndexes('mget', ['key1', 'key2']) // [0, 1] ``` ## Acknowledgment Thank [@Yuan Chuan](https://github.com/yuanchuan) for the package name. The original redis-commands is renamed to [@yuanchuan/redis-commands](https://www.npmjs.com/package/@yuanchuan/redis-commands). package/tools/build.js000644 0000003411 3560116604 012054 0ustar00000000 000000 var fs = require('fs') var path = require('path') var stringify = require('safe-stable-stringify') var commandPath = path.join(__dirname, '..', 'commands.json') var redisCommands = require('../') var Redis = require('ioredis') var redis = new Redis(process.env.REDIS_URI) redis.command().then(function (res) { redis.disconnect() // Find all special handled cases var movableKeys = String(redisCommands.getKeyIndexes).match(/case '[a-z-]+':/g).map(function (entry) { return entry.replace(/^case '|':$/g, '') }) var commands = res.reduce(function (prev, current) { var currentCommandPos = movableKeys.indexOf(current[0]) if (currentCommandPos !== -1 && current[2].indexOf('movablekeys') !== -1) { movableKeys.splice(currentCommandPos, 1) } // https://github.com/antirez/redis/issues/2598 if (current[0] === 'brpop' && current[4] === 1) { current[4] = -2 } prev[current[0]] = { arity: current[1] || 1, // https://github.com/antirez/redis/pull/2986 flags: current[2], keyStart: current[3], keyStop: current[4], step: current[5] } return prev }, {}) // Future proof. Redis might implement this at some point // https://github.com/antirez/redis/pull/2982 if (!commands.quit) { commands.quit = { arity: 1, flags: [ 'loading', 'stale', 'readonly' ], keyStart: 0, keyStop: 0, step: 0 } } if (movableKeys.length !== 0) { throw new Error('Not all commands (\'' + movableKeys.join('\', \'') + '\') with the "movablekeys" flag are handled in the code') } // Use safe-stable-stringify instead fo JSON.stringify // for easier diffing var content = stringify(commands, null, ' ') fs.writeFileSync(commandPath, content) })