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