/** * Module dependencies. */ var Channel = require('./channel') var async = require('./async') /** * Expose `make`. */ module.exports = make /** * Make a channel. * * @param {Number} bufferSize optional default=0 * @return {Function} * @api public */ function make(bufferSize) { var chan = new Channel(bufferSize) var func = function (a, b) { // yielded if (typeof a === 'function') { return chan.get(a) } // (err, res) if (a === null && typeof b !== 'undefined') { a = b } // value return chan.add(a) } // expose public channel methods func.close = chan.close.bind(chan) func.done = chan.done.bind(chan) // bind async helper func.async = async.bind(null, func) // expose empty value func.empty = chan.empty // cross reference the channel object and function for internal use func.__chan = chan chan.func = func return func }