0bb760fde8a1fa62c7ab5617163441d8e7172ebb
[yaffs-website] / node_modules / grunt-legacy-util / node_modules / lodash / overArgs.js
1 var apply = require('./_apply'),
2     arrayMap = require('./_arrayMap'),
3     baseFlatten = require('./_baseFlatten'),
4     baseIteratee = require('./_baseIteratee'),
5     rest = require('./rest');
6
7 /* Built-in method references for those with the same name as other `lodash` methods. */
8 var nativeMin = Math.min;
9
10 /**
11  * Creates a function that invokes `func` with arguments transformed by
12  * corresponding `transforms`.
13  *
14  * @static
15  * @memberOf _
16  * @category Function
17  * @param {Function} func The function to wrap.
18  * @param {...(Function|Function[])} [transforms] The functions to transform
19  * arguments, specified individually or in arrays.
20  * @returns {Function} Returns the new function.
21  * @example
22  *
23  * function doubled(n) {
24  *   return n * 2;
25  * }
26  *
27  * function square(n) {
28  *   return n * n;
29  * }
30  *
31  * var func = _.overArgs(function(x, y) {
32  *   return [x, y];
33  * }, square, doubled);
34  *
35  * func(9, 3);
36  * // => [81, 6]
37  *
38  * func(10, 5);
39  * // => [100, 10]
40  */
41 var overArgs = rest(function(func, transforms) {
42   transforms = arrayMap(baseFlatten(transforms), baseIteratee);
43
44   var funcsLength = transforms.length;
45   return rest(function(args) {
46     var index = -1,
47         length = nativeMin(args.length, funcsLength);
48
49     while (++index < length) {
50       args[index] = transforms[index].call(this, args[index]);
51     }
52     return apply(func, this, args);
53   });
54 });
55
56 module.exports = overArgs;