|
var apply = require('./_apply'), |
|
arrayMap = require('./_arrayMap'), |
|
baseFlatten = require('./_baseFlatten'), |
|
baseIteratee = require('./_baseIteratee'), |
|
baseRest = require('./_baseRest'), |
|
baseUnary = require('./_baseUnary'), |
|
castRest = require('./_castRest'), |
|
isArray = require('./isArray'); |
|
|
|
|
|
var nativeMin = Math.min; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var overArgs = castRest(function(func, transforms) { |
|
transforms = (transforms.length == 1 && isArray(transforms[0])) |
|
? arrayMap(transforms[0], baseUnary(baseIteratee)) |
|
: arrayMap(baseFlatten(transforms, 1), baseUnary(baseIteratee)); |
|
|
|
var funcsLength = transforms.length; |
|
return baseRest(function(args) { |
|
var index = -1, |
|
length = nativeMin(args.length, funcsLength); |
|
|
|
while (++index < length) { |
|
args[index] = transforms[index].call(this, args[index]); |
|
} |
|
return apply(func, this, args); |
|
}); |
|
}); |
|
|
|
module.exports = overArgs; |
|
|