00001 var apply = require('./_apply'),
00002 arrayMap = require('./_arrayMap'),
00003 baseFlatten = require('./_baseFlatten'),
00004 baseIteratee = require('./_baseIteratee'),
00005 baseRest = require('./_baseRest'),
00006 baseUnary = require('./_baseUnary'),
00007 castRest = require('./_castRest'),
00008 isArray = require('./isArray');
00009
00010
00011 var nativeMin = Math.min;
00012
00044 var overArgs = castRest(function(func, transforms) {
00045 transforms = (transforms.length == 1 && isArray(transforms[0]))
00046 ? arrayMap(transforms[0], baseUnary(baseIteratee))
00047 : arrayMap(baseFlatten(transforms, 1), baseUnary(baseIteratee));
00048
00049 var funcsLength = transforms.length;
00050 return baseRest(function(args) {
00051 var index = -1,
00052 length = nativeMin(args.length, funcsLength);
00053
00054 while (++index < length) {
00055 args[index] = transforms[index].call(this, args[index]);
00056 }
00057 return apply(func, this, args);
00058 });
00059 });
00060
00061 module.exports = overArgs;