You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
49 lines
1.2 KiB
49 lines
1.2 KiB
'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 |
|
}
|
|
|