| 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) |
| }) |