'use strict' module.exports = function pull (a) { var length = arguments.length if (typeof a === 'function' && a.length === 1) { var args = new Array(length) for(var i = 0; i < length; i++) args[i] = arguments[i] return function (read) { if (args == null) { throw new TypeError("partial sink should only be called once!") } // Grab the reference after the check, because it's always an array now // (engines like that kind of consistency). var ref = args args = null // Prioritize common case of small number of pulls. switch (length) { case 1: return pull(read, ref[0]) case 2: return pull(read, ref[0], ref[1]) case 3: return pull(read, ref[0], ref[1], ref[2]) case 4: return pull(read, ref[0], ref[1], ref[2], ref[3]) default: ref.unshift(read) return pull.apply(null, ref) } } } var read = a if (read && typeof read.source === 'function') { read = read.source } for (var i = 1; i < length; i++) { var s = arguments[i] if (typeof s === 'function') { read = s(read) } else if (s && typeof s === 'object') { s.sink(read) read = s.source } } return read }