| Server IP : 68.183.124.220 / Your IP : 216.73.217.137 Web Server : Apache/2.4.18 (Ubuntu) System : Linux Sandbox-A 4.4.0-210-generic #242-Ubuntu SMP Fri Apr 16 09:57:56 UTC 2021 x86_64 User : gavin ( 1000) PHP Version : 7.0.33-0ubuntu0.16.04.16 Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority, MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : ON | Sudo : ON | Pkexec : ON Directory : /home/gavin/workspace/happymandarin/node_modules/ware/lib/ |
Upload File : |
/**
* Module Dependencies
*/
var slice = [].slice;
var wrap = require('wrap-fn');
/**
* Expose `Ware`.
*/
module.exports = Ware;
/**
* Throw an error.
*
* @param {Error} error
*/
function fail (err) {
throw err;
}
/**
* Initialize a new `Ware` manager, with optional `fns`.
*
* @param {Function or Array or Ware} fn (optional)
*/
function Ware (fn) {
if (!(this instanceof Ware)) return new Ware(fn);
this.fns = [];
if (fn) this.use(fn);
}
/**
* Use a middleware `fn`.
*
* @param {Function or Array or Ware} fn
* @return {Ware}
*/
Ware.prototype.use = function (fn) {
if (fn instanceof Ware) {
return this.use(fn.fns);
}
if (fn instanceof Array) {
for (var i = 0, f; f = fn[i++];) this.use(f);
return this;
}
this.fns.push(fn);
return this;
};
/**
* Run through the middleware with the given `args` and optional `callback`.
*
* @param {Mixed} args...
* @param {Function} callback (optional)
* @return {Ware}
*/
Ware.prototype.run = function () {
var fns = this.fns;
var ctx = this;
var i = 0;
var last = arguments[arguments.length - 1];
var done = 'function' == typeof last && last;
var args = done
? slice.call(arguments, 0, arguments.length - 1)
: slice.call(arguments);
// next step
function next (err) {
if (err) return (done || fail)(err);
var fn = fns[i++];
var arr = slice.call(args);
if (!fn) {
return done && done.apply(null, [null].concat(args));
}
wrap(fn, next).apply(ctx, arr);
}
next();
return this;
};