From 78936ac50c43ceb74654501a5da4b2994efe1217 Mon Sep 17 00:00:00 2001 From: Vissarut Tantiwattanarom Date: Mon, 3 Feb 2020 21:53:56 +0400 Subject: [PATCH] feat(parser): update to latest Redis parser & errors (#1470) * Update redis errors and redis parser * Fix lint errors * Add node 12 to travis ci * Add appveyor node 12 * Fix some of existing errors This drops support for hiredis. --- .travis.yml | 1 + appveyor.yml | 1 + benchmarks/diff_multi_bench_output.js | 2 +- examples/streams.js | 74 +++++++++++++-------------- index.js | 7 +-- lib/customErrors.js | 3 +- package.json | 3 +- test/node_redis.spec.js | 2 +- test/rename.spec.js | 4 +- 9 files changed, 50 insertions(+), 47 deletions(-) diff --git a/.travis.yml b/.travis.yml index f2422e979b..09398ddac0 100644 --- a/.travis.yml +++ b/.travis.yml @@ -14,6 +14,7 @@ node_js: - "4" - "6" - "8" + - "12" after_success: npm run coveralls before_script: # Add an IPv6 config - see the corresponding Travis issue diff --git a/appveyor.yml b/appveyor.yml index 7930f05f8a..e3d2c2a940 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -8,6 +8,7 @@ environment: - nodejs_version: "4" - nodejs_version: "6" - nodejs_version: "8" + - nodejs_version: "12" pull_requests: do_not_increment_build_number: true diff --git a/benchmarks/diff_multi_bench_output.js b/benchmarks/diff_multi_bench_output.js index dc0d3c227d..c3ed47a5fb 100755 --- a/benchmarks/diff_multi_bench_output.js +++ b/benchmarks/diff_multi_bench_output.js @@ -2,7 +2,7 @@ var fs = require('fs'); var metrics = require('metrics'); - // `node diff_multi_bench_output.js beforeBench.txt afterBench.txt` +// `node diff_multi_bench_output.js beforeBench.txt afterBench.txt` var file1 = process.argv[2]; var file2 = process.argv[3]; diff --git a/examples/streams.js b/examples/streams.js index 2fda1293ce..726e4adf92 100644 --- a/examples/streams.js +++ b/examples/streams.js @@ -5,43 +5,43 @@ var client1 = redis.createClient(); var client2 = redis.createClient(); var client3 = redis.createClient(); -client1.xadd('mystream', '*', 'field1', 'm1', function (err) { - if(err){ - return console.error(err); - } - client1.xgroup('CREATE', 'mystream', 'mygroup', '$', function (err) { - if(err){ - return console.error(err); - } - }); - - client2.xreadgroup('GROUP', 'mygroup', 'consumer', 'Block', 1000, 'NOACK', - 'STREAMS', 'mystream', '>', function (err, stream) { - if(err){ - return console.error(err); - } - console.log('client2 ' + stream); - }); - - client3.xreadgroup('GROUP', 'mygroup', 'consumer', 'Block', 1000, 'NOACK', - 'STREAMS', 'mystream', '>', function (err, stream) { - if(err){ - return console.error(err); - } - console.log('client3 ' + stream); - }); +client1.xadd('mystream', '*', 'field1', 'm1', function (err) { + if (err) { + return console.error(err); + } + client1.xgroup('CREATE', 'mystream', 'mygroup', '$', function (err) { + if (err) { + return console.error(err); + } + }); - - client1.xadd('mystream', '*', 'field1', 'm2', function (err) { - if(err){ - return console.error(err); - } - }); - - client1.xadd('mystream', '*', 'field1', 'm3', function (err) { - if(err){ - return console.error(err); - } - }); + client2.xreadgroup('GROUP', 'mygroup', 'consumer', 'Block', 1000, 'NOACK', + 'STREAMS', 'mystream', '>', function (err, stream) { + if (err) { + return console.error(err); + } + console.log('client2 ' + stream); + }); + + client3.xreadgroup('GROUP', 'mygroup', 'consumer', 'Block', 1000, 'NOACK', + 'STREAMS', 'mystream', '>', function (err, stream) { + if (err) { + return console.error(err); + } + console.log('client3 ' + stream); + }); + + + client1.xadd('mystream', '*', 'field1', 'm2', function (err) { + if (err) { + return console.error(err); + } + }); + + client1.xadd('mystream', '*', 'field1', 'm3', function (err) { + if (err) { + return console.error(err); + } + }); }); diff --git a/index.js b/index.js index c43203a7f6..402b9b1e47 100644 --- a/index.js +++ b/index.js @@ -9,6 +9,7 @@ var Queue = require('denque'); var errorClasses = require('./lib/customErrors'); var EventEmitter = require('events'); var Parser = require('redis-parser'); +var RedisErrors = require('redis-errors'); var commands = require('redis-commands'); var debug = require('./lib/debug'); var unifyOptions = require('./lib/createClient'); @@ -1090,9 +1091,9 @@ exports.RedisClient = RedisClient; exports.print = utils.print; exports.Multi = require('./lib/multi'); exports.AbortError = errorClasses.AbortError; -exports.RedisError = Parser.RedisError; -exports.ParserError = Parser.ParserError; -exports.ReplyError = Parser.ReplyError; +exports.RedisError = RedisErrors.RedisError; +exports.ParserError = RedisErrors.ParserError; +exports.ReplyError = RedisErrors.ReplyError; exports.AggregateError = errorClasses.AggregateError; // Add all redis commands / node_redis api to the client diff --git a/lib/customErrors.js b/lib/customErrors.js index d9b34421a7..2483db0d8d 100644 --- a/lib/customErrors.js +++ b/lib/customErrors.js @@ -2,14 +2,13 @@ var util = require('util'); var assert = require('assert'); -var RedisError = require('redis-parser').RedisError; +var RedisError = require('redis-errors').RedisError; var ADD_STACKTRACE = false; function AbortError (obj, stack) { assert(obj, 'The options argument is required'); assert.strictEqual(typeof obj, 'object', 'The options argument has to be of type object'); - RedisError.call(this, obj.message, ADD_STACKTRACE); Object.defineProperty(this, 'message', { value: obj.message || '', configurable: true, diff --git a/package.json b/package.json index 4ec213335e..d294765fc9 100644 --- a/package.json +++ b/package.json @@ -27,7 +27,8 @@ "dependencies": { "denque": "^1.2.3", "redis-commands": "^1.4.0", - "redis-parser": "^2.6.0" + "redis-errors": "^1.2.0", + "redis-parser": "^3.0.0" }, "engines": { "node": ">=0.10.0" diff --git a/test/node_redis.spec.js b/test/node_redis.spec.js index e553f8521e..82b3e4e09f 100644 --- a/test/node_redis.spec.js +++ b/test/node_redis.spec.js @@ -359,7 +359,7 @@ describe('The node_redis client', function () { it('send_command with callback as args', function (done) { client.send_command('abcdef', function (err, res) { - assert.strictEqual(err.message, "ERR unknown command 'abcdef'"); + assert.strictEqual(err.message, 'ERR unknown command `abcdef`, with args beginning with: '); done(); }); }); diff --git a/test/rename.spec.js b/test/rename.spec.js index b98661e9f5..b8f7c65d0d 100644 --- a/test/rename.spec.js +++ b/test/rename.spec.js @@ -50,7 +50,7 @@ describe('rename commands', function () { }); client.get('key', function (err, reply) { - assert.strictEqual(err.message, "ERR unknown command 'get'"); + assert.strictEqual(err.message, 'ERR unknown command `get`, with args beginning with: `key`, '); assert.strictEqual(err.command, 'GET'); assert.strictEqual(reply, undefined); }); @@ -108,7 +108,7 @@ describe('rename commands', function () { multi.exec(function (err, res) { assert(err); assert.strictEqual(err.message, 'EXECABORT Transaction discarded because of previous errors.'); - assert.strictEqual(err.errors[0].message, "ERR unknown command 'get'"); + assert.strictEqual(err.errors[0].message, 'ERR unknown command `get`, with args beginning with: `key`, '); assert.strictEqual(err.errors[0].command, 'GET'); assert.strictEqual(err.code, 'EXECABORT'); assert.strictEqual(err.errors[0].code, 'ERR');