var Promise = require('bluebird');

function pipeline(tasks /* initial arguments */) {
    var args = Array.prototype.slice.call(arguments, 1),

        runTask = function (task, args) {
            runTask = function (task, arg) {
                return task(arg);
            };

            return task.apply(null, args);
        };

    return Promise.all(tasks).reduce(function (arg, task) {
        return Promise.resolve(runTask(task, arg)).then(function (result) {
            return result;
        });
    }, args);
}

module.exports = pipeline;