1 var arrayEvery = require('../internal/arrayEvery'),
2 baseFlatten = require('../internal/baseFlatten'),
3 baseIsFunction = require('../internal/baseIsFunction'),
4 restParam = require('./restParam');
6 /** Used as the `TypeError` message for "Functions" methods. */
7 var FUNC_ERROR_TEXT = 'Expected a function';
9 /* Native method references for those with the same name as other `lodash` methods. */
10 var nativeMin = Math.min;
13 * Creates a function that runs each argument through a corresponding
19 * @param {Function} func The function to wrap.
20 * @param {...(Function|Function[])} [transforms] The functions to transform
21 * arguments, specified as individual functions or arrays of functions.
22 * @returns {Function} Returns the new function.
25 * function doubled(n) {
29 * function square(n) {
33 * var modded = _.modArgs(function(x, y) {
35 * }, square, doubled);
43 var modArgs = restParam(function(func, transforms) {
44 transforms = baseFlatten(transforms);
45 if (typeof func != 'function' || !arrayEvery(transforms, baseIsFunction)) {
46 throw new TypeError(FUNC_ERROR_TEXT);
48 var length = transforms.length;
49 return restParam(function(args) {
50 var index = nativeMin(args.length, length);
52 args[index] = transforms[index](args[index]);
54 return func.apply(this, args);
58 module.exports = modArgs;