spirit
Version:
extensible web library for building applications & frameworks
39 lines (32 loc) • 877 B
JavaScript
;
/*
* main spirit file
*/
var p_utils = require("./promise_utils");
/**
* A reducer function, for reducing over a handler
* and middlewares
*
* All functions are expected to return a Promise
* It is wrapped to ensure a Promise is returned
*
* @param {function} handler - a handler function
* @param {array} middleware - an array of middleware function
* @return {function} returns a function that takes a input and returns a output as a (promise)
*/
var compose = function compose(handler, middleware) {
// wrap `fn` to always returns a promise
var wrap = function wrap(fn) {
return function () {
return p_utils.callp(fn, arguments);
};
};
var accum = wrap(handler);
for (var i = middleware.length - 1; i >= 0; i--) {
accum = wrap(middleware[i](accum));
}
return accum;
};
module.exports = {
compose: compose
};