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