From fdb668aea3ea7731a888bbf64b716e79842ee7f7 Mon Sep 17 00:00:00 2001 From: Christopher Jeffrey Date: Fri, 30 Jun 2017 15:47:33 -0700 Subject: [PATCH] refactor: use rest args where possible. --- lib/http/base.js | 19 ++------- lib/node/logger.js | 86 ++++++++------------------------------- lib/utils/co.js | 78 ++++++++++++++++------------------- lib/utils/util.js | 12 +----- lib/workers/master.js | 18 ++------ lib/workers/workerpool.js | 7 +--- 6 files changed, 62 insertions(+), 158 deletions(-) diff --git a/lib/http/base.js b/lib/http/base.js index 82a1a054..a454d63e 100644 --- a/lib/http/base.js +++ b/lib/http/base.js @@ -532,23 +532,17 @@ HTTPBase.prototype._initSockets = function _initSockets() { * @param {...Object} args */ -HTTPBase.prototype.to = function to(name) { +HTTPBase.prototype.to = function to(name, ...args) { let list = this.channels.get(name); - let args; if (!list) return; assert(list.size > 0); - args = new Array(arguments.length - 1); - - for (let i = 1; i < arguments.length; i++) - args[i - 1] = arguments[i]; - for (let item = list.head; item; item = item.next) { let socket = item.value; - socket.emit.apply(socket, args); + socket.emit(...args); } }; @@ -1607,16 +1601,11 @@ WebSocket.prototype.emit = function emit() { return this.socket.emit.apply(this.socket, arguments); }; -WebSocket.prototype.call = function call() { +WebSocket.prototype.call = function call(...args) { let socket = this.socket; - let args = new Array(arguments.length); - - for (let i = 0; i < arguments.length; i++) - args[i] = arguments[i]; - return new Promise((resolve, reject) => { args.push(co.wrap(resolve, reject)); - socket.emit.apply(socket, args); + socket.emit(...args); }); }; diff --git a/lib/node/logger.js b/lib/node/logger.js index 6047d1a2..f9c0c4f1 100644 --- a/lib/node/logger.js +++ b/lib/node/logger.js @@ -388,8 +388,8 @@ Logger.prototype.setLevel = function setLevel(name) { * @param {...Object} args */ -Logger.prototype.error = function error(err) { - let args; +Logger.prototype.error = function error(...args) { + let err = args[0]; if (this.level < Logger.levels.ERROR) return; @@ -397,11 +397,6 @@ Logger.prototype.error = function error(err) { if (err instanceof Error) return this.logError(Logger.levels.ERROR, null, err); - args = new Array(arguments.length); - - for (let i = 0; i < args.length; i++) - args[i] = arguments[i]; - this.log(Logger.levels.ERROR, null, args); }; @@ -411,8 +406,8 @@ Logger.prototype.error = function error(err) { * @param {...Object} args */ -Logger.prototype.warning = function warning(err) { - let args; +Logger.prototype.warning = function warning(...args) { + let err = args[0]; if (this.level < Logger.levels.WARNING) return; @@ -420,11 +415,6 @@ Logger.prototype.warning = function warning(err) { if (err instanceof Error) return this.logError(Logger.levels.WARNING, null, err); - args = new Array(arguments.length); - - for (let i = 0; i < args.length; i++) - args[i] = arguments[i]; - this.log(Logger.levels.WARNING, null, args); }; @@ -434,8 +424,8 @@ Logger.prototype.warning = function warning(err) { * @param {...Object} args */ -Logger.prototype.info = function info(err) { - let args; +Logger.prototype.info = function info(...args) { + let err = args[0]; if (this.level < Logger.levels.INFO) return; @@ -443,11 +433,6 @@ Logger.prototype.info = function info(err) { if (err instanceof Error) return this.logError(Logger.levels.INFO, null, err); - args = new Array(arguments.length); - - for (let i = 0; i < args.length; i++) - args[i] = arguments[i]; - this.log(Logger.levels.INFO, null, args); }; @@ -457,8 +442,8 @@ Logger.prototype.info = function info(err) { * @param {...Object} args */ -Logger.prototype.debug = function debug(err) { - let args; +Logger.prototype.debug = function debug(...args) { + let err = args[0]; if (this.level < Logger.levels.DEBUG) return; @@ -466,11 +451,6 @@ Logger.prototype.debug = function debug(err) { if (err instanceof Error) return this.logError(Logger.levels.DEBUG, null, err); - args = new Array(arguments.length); - - for (let i = 0; i < args.length; i++) - args[i] = arguments[i]; - this.log(Logger.levels.DEBUG, null, args); }; @@ -480,8 +460,8 @@ Logger.prototype.debug = function debug(err) { * @param {...Object} args */ -Logger.prototype.spam = function spam(err) { - let args; +Logger.prototype.spam = function spam(...args) { + let err = args[0]; if (this.level < Logger.levels.SPAM) return; @@ -489,11 +469,6 @@ Logger.prototype.spam = function spam(err) { if (err instanceof Error) return this.logError(Logger.levels.SPAM, null, err); - args = new Array(arguments.length); - - for (let i = 0; i < args.length; i++) - args[i] = arguments[i]; - this.log(Logger.levels.SPAM, null, args); }; @@ -744,11 +719,6 @@ LoggerContext.prototype.error = function error(err) { if (err instanceof Error) return this.logError(Logger.levels.ERROR, err); - args = new Array(arguments.length); - - for (let i = 0; i < args.length; i++) - args[i] = arguments[i]; - this.log(Logger.levels.ERROR, args); }; @@ -770,8 +740,8 @@ LoggerContext.prototype.logError = function logError(level, err) { * @param {...Object} args */ -LoggerContext.prototype.warning = function warning(err) { - let args; +LoggerContext.prototype.warning = function warning(...args) { + let err = args[0]; if (this.logger.level < Logger.levels.WARNING) return; @@ -779,11 +749,6 @@ LoggerContext.prototype.warning = function warning(err) { if (err instanceof Error) return this.logError(Logger.levels.WARNING, err); - args = new Array(arguments.length); - - for (let i = 0; i < args.length; i++) - args[i] = arguments[i]; - this.log(Logger.levels.WARNING, args); }; @@ -793,8 +758,8 @@ LoggerContext.prototype.warning = function warning(err) { * @param {...Object} args */ -LoggerContext.prototype.info = function info(err) { - let args; +LoggerContext.prototype.info = function info(...args) { + let err = args[0]; if (this.logger.level < Logger.levels.INFO) return; @@ -802,11 +767,6 @@ LoggerContext.prototype.info = function info(err) { if (err instanceof Error) return this.logError(Logger.levels.INFO, err); - args = new Array(arguments.length); - - for (let i = 0; i < args.length; i++) - args[i] = arguments[i]; - this.log(Logger.levels.INFO, args); }; @@ -816,8 +776,8 @@ LoggerContext.prototype.info = function info(err) { * @param {...Object} args */ -LoggerContext.prototype.debug = function debug(err) { - let args; +LoggerContext.prototype.debug = function debug(...args) { + let err = args[0]; if (this.logger.level < Logger.levels.DEBUG) return; @@ -825,11 +785,6 @@ LoggerContext.prototype.debug = function debug(err) { if (err instanceof Error) return this.logError(Logger.levels.DEBUG, err); - args = new Array(arguments.length); - - for (let i = 0; i < args.length; i++) - args[i] = arguments[i]; - this.log(Logger.levels.DEBUG, args); }; @@ -839,8 +794,8 @@ LoggerContext.prototype.debug = function debug(err) { * @param {...Object} args */ -LoggerContext.prototype.spam = function spam(err) { - let args; +LoggerContext.prototype.spam = function spam(...args) { + let err = args[0]; if (this.logger.level < Logger.levels.SPAM) return; @@ -848,11 +803,6 @@ LoggerContext.prototype.spam = function spam(err) { if (err instanceof Error) return this.logError(Logger.levels.SPAM, err); - args = new Array(arguments.length); - - for (let i = 0; i < args.length; i++) - args[i] = arguments[i]; - this.log(Logger.levels.SPAM, args); }; diff --git a/lib/utils/co.js b/lib/utils/co.js index eee2f1d0..95068ea0 100644 --- a/lib/utils/co.js +++ b/lib/utils/co.js @@ -63,12 +63,12 @@ function exec(gen) { * Execute generator function * with a context and execute. * @param {GeneratorFunction} generator - * @param {Object} ctx + * @param {Object?} self * @returns {Promise} */ -function spawn(generator, ctx) { - let gen = generator.call(ctx); +function spawn(generator, self) { + let gen = generator.call(self); return exec(gen); } @@ -97,37 +97,6 @@ function isPromise(obj) { return obj && typeof obj.then === 'function'; } -/** - * Wrap an async function to be - * executed into a function that - * accepts a node.js style callback. - * @param {AsyncFunction} - * @returns {Function} - */ - -function cob(func) { - return function(_) { - let args, callback; - - if (arguments.length === 0 - || typeof arguments[arguments.length - 1] !== 'function') { - throw new Error((func.name || 'Function') + ' requires a callback.'); - } - - args = new Array(arguments.length - 1); - callback = arguments[arguments.length - 1]; - - for (let i = 0; i < args.length; i++) - args[i] = arguments[i]; - - func.apply(this, args).then((value) => { - setImmediate(() => callback(null, value)); - }, (err) => { - setImmediate(() => callback(err)); - }); - }; -} - /** * Wait for a nextTick with a promise. * @returns {Promise} @@ -170,20 +139,41 @@ function wrap(resolve, reject) { * style callbacks into a function that * returns a promise. * @param {Function} func - * @param {Object?} ctx + * @returns {AsyncFunction} + */ + +function promisify(func) { + return function(...args) { + return new Promise((resolve, reject) => { + args.push(wrap(resolve, reject)); + func.call(this, ...args); + }); + }; +} + +/** + * Wrap a promise-returning function + * into a function that accepts a + * node.js style callback. + * @param {AsyncFunction} func * @returns {Function} */ -function promisify(func, ctx) { - return function() { - let args = new Array(arguments.length); +function callbackify(func) { + return function(...args) { + let callback; - for (let i = 0; i < arguments.length; i++) - args[i] = arguments[i]; + if (args.length === 0 + || typeof args[args.length - 1] !== 'function') { + throw new Error((func.name || 'Function') + ' requires a callback.'); + } - return new Promise((resolve, reject) => { - args.push(wrap(resolve, reject)); - func.apply(ctx || this, args); + callback = args.pop(); + + func.call(this, ...args).then((value) => { + setImmediate(() => callback(null, value)); + }, (err) => { + setImmediate(() => callback(err)); }); }; } @@ -314,11 +304,11 @@ exports = co; exports.exec = exec; exports.spawn = spawn; exports.co = co; -exports.cob = cob; exports.wait = wait; exports.timeout = timeout; exports.wrap = wrap; exports.promisify = promisify; +exports.callbackify = callbackify; exports.every = every; exports.setInterval = startInterval; exports.clearInterval = stopInterval; diff --git a/lib/utils/util.js b/lib/utils/util.js index 692a3a3d..881e694b 100644 --- a/lib/utils/util.js +++ b/lib/utils/util.js @@ -338,13 +338,9 @@ util.format = function format(args, color) { * @param {...String} args */ -util.log = function log() { - let args = new Array(arguments.length); +util.log = function log(...args) { let msg; - for (let i = 0; i < args.length; i++) - args[i] = arguments[i]; - if (!process.stdout) { msg = typeof args[0] !== 'object' ? util.format(args, false) @@ -363,13 +359,9 @@ util.log = function log() { * @param {...String} args */ -util.error = function error() { - let args = new Array(arguments.length); +util.error = function error(...args) { let msg; - for (let i = 0; i < args.length; i++) - args[i] = arguments[i]; - if (!process.stderr) { msg = typeof args[0] !== 'object' ? util.format(args, false) diff --git a/lib/workers/master.js b/lib/workers/master.js index cca98d41..ee643443 100644 --- a/lib/workers/master.js +++ b/lib/workers/master.js @@ -159,12 +159,7 @@ Master.prototype.send = function send(packet) { * @returns {Boolean} */ -Master.prototype.sendEvent = function sendEvent() { - let items = new Array(arguments.length); - - for (let i = 0; i < items.length; i++) - items[i] = arguments[i]; - +Master.prototype.sendEvent = function sendEvent(...items) { return this.send(new packets.EventPacket(items)); }; @@ -184,15 +179,8 @@ Master.prototype.destroy = function destroy() { * @param {...String} args */ -Master.prototype.log = function log() { - let items = new Array(arguments.length); - let text; - - for (let i = 0; i < items.length; i++) - items[i] = arguments[i]; - - text = util.format(items, this.color); - +Master.prototype.log = function log(...items) { + let text = util.format(items, this.color); this.send(new packets.LogPacket(text)); }; diff --git a/lib/workers/workerpool.js b/lib/workers/workerpool.js index e62ce21f..a230b70c 100644 --- a/lib/workers/workerpool.js +++ b/lib/workers/workerpool.js @@ -709,12 +709,7 @@ Worker.prototype.send = function send(packet) { * @returns {Boolean} */ -Worker.prototype.sendEvent = function sendEvent() { - let items = new Array(arguments.length); - - for (let i = 0; i < items.length; i++) - items[i] = arguments[i]; - +Worker.prototype.sendEvent = function sendEvent(...items) { return this.send(new packets.EventPacket(items)); };