mirror of
https://github.com/Instadapp/Swap-Aggregator-Subgraph.git
synced 2024-07-29 21:57:12 +00:00
50 lines
1.2 KiB
JavaScript
50 lines
1.2 KiB
JavaScript
'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
|
|
}
|