Dry up lib/fp/base.js

This commit is contained in:
John-David Dalton
2015-12-12 12:40:38 -08:00
parent ac0a0ea07e
commit 440eb0876c

View File

@@ -56,58 +56,33 @@ function baseConvert(util, name, func) {
};
};
var immutArrayWrap = function(func) {
return function() {
var index = -1,
length = arguments.length,
args = Array(length);
var cloneArray = function(array) {
var length = array ? array.length : 0,
result = Array(length);
while (length--) {
args[length] = arguments[length];
}
var array = args[0];
length = array ? array.length : 0;
while (length--) {
result[length] = array[length];
}
return result;
};
args[0] = Array(length);
while (++index < length) {
args[0][index] = array[index];
}
func.apply(undefined, args);
return args[0];
var createCloner = function(func) {
return function(object) {
return func({}, object);
};
};
var immutObjectWrap = function(func) {
return function() {
var index = -1,
length = arguments.length,
args = Array(length);
while (++index < length) {
args[index] = arguments[index];
}
args[0] = func({}, args[0]);
func.apply(undefined, args);
return args[0];
};
};
var immutSetWrap = function(func) {
return function() {
var index = -1,
length = arguments.length,
args = Array(length);
while (++index < length) {
args[index] = arguments[index];
}
args[0] = cloneDeep(args[0]);
func.apply(undefined, args);
return args[0];
};
var immutWrap = function(func, cloner) {
return overArg(func, cloner, true);
};
var iterateeAry = function(func, n) {
return overArg(func, function(func) {
return baseAry(func, n);
});
};
var overArg = function(func, iteratee, retArg) {
return function() {
var length = arguments.length,
args = Array(length);
@@ -115,8 +90,9 @@ function baseConvert(util, name, func) {
while (length--) {
args[length] = arguments[length];
}
args[0] = baseAry(args[0], n);
return func.apply(undefined, args);
args[0] = iteratee(args[0]);
var result = func.apply(undefined, args);
return retArg ? args[0] : result;
};
};
@@ -172,13 +148,13 @@ function baseConvert(util, name, func) {
return wrapper(func);
}
if (mutateMap.array[name]) {
func = immutArrayWrap(func);
func = immutWrap(func, cloneArray);
}
else if (mutateMap.object[name]) {
func = immutObjectWrap(func);
func = immutWrap(func, createCloner(func));
}
else if (mutateMap.set[name]) {
func = immutSetWrap(func);
func = immutWrap(func, cloneDeep);
}
var result;
each(mapping.caps, function(cap) {