UNPKG

spirit

Version:

extensible web library for building applications & frameworks

39 lines (32 loc) 877 B
"use strict"; /* * 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 };