'use strict' var drain = require('./drain') module.exports = function reduce (reducer, acc, cb ) { if(!cb) cb = acc, acc = null var sink = drain(function (data) { acc = reducer(acc, data) }, function (err) { cb(err, acc) }) if (arguments.length === 2) return function (source) { source(null, function (end, data) { //if ended immediately, and no initial... if(end) return cb(end === true ? null : end) acc = data; sink(source) }) } else return sink }