var util = require('util') var Promise = require('bluebird') function ValidationError(message, errors) { Error.call(this, message) this.name = 'ValidationError' this.errors = errors Error.captureStackTrace(this, ValidationError) } util.inherits(ValidationError, Error) module.exports.ValidationError = ValidationError module.exports.validate = function(req, rules) { return new Promise(function(resolve, reject) { rules() var errors = req.validationErrors() if (!errors) { resolve() } else { reject(new ValidationError('validation error', errors)) } }) } module.exports.limit = function(limit, handler) { var queue = [] var running = 0 /* eslint no-use-before-define: 0 */ function maybeNext() { while (running < limit && queue.length) { running += 1 handler.apply(null, queue.shift()).finally(done) } } function done() { running -= 1 maybeNext() } return function() { queue.push(arguments) maybeNext() } }