Simplify _createFlow.

This commit is contained in:
John-David Dalton
2017-01-09 18:32:48 -08:00
parent 627bfe6bfa
commit 1392d37ca2

View File

@@ -1,18 +1,6 @@
import LodashWrapper from './_LodashWrapper.js';
import getData from './_getData.js';
import getFuncName from './_getFuncName.js';
import isArray from './isArray.js';
import isLaziable from './_isLaziable.js';
/** Error message constants. */ /** Error message constants. */
const FUNC_ERROR_TEXT = 'Expected a function'; const FUNC_ERROR_TEXT = 'Expected a function';
/** Used to compose bitmasks for function metadata. */
const WRAP_CURRY_FLAG = 8;
const WRAP_PARTIAL_FLAG = 32;
const WRAP_ARY_FLAG = 128;
const WRAP_REARG_FLAG = 256;
/** /**
* Creates a `flow` or `flowRight` function. * Creates a `flow` or `flowRight` function.
* *
@@ -23,7 +11,6 @@ const WRAP_REARG_FLAG = 256;
function createFlow(fromRight) { function createFlow(fromRight) {
return (...funcs) => { return (...funcs) => {
const length = funcs.length; const length = funcs.length;
const prereq = LodashWrapper.prototype.thru;
let func; let func;
let wrapper; let wrapper;
@@ -37,36 +24,11 @@ function createFlow(fromRight) {
if (typeof func != 'function') { if (typeof func != 'function') {
throw new TypeError(FUNC_ERROR_TEXT); throw new TypeError(FUNC_ERROR_TEXT);
} }
if (prereq && !wrapper && getFuncName(func) == 'wrapper') {
wrapper = new LodashWrapper([], true);
}
} }
index = wrapper ? index : length; return function(...args) {
while (++index < length) {
func = funcs[index];
const funcName = getFuncName(func);
const data = funcName == 'wrapper' ? getData(func) : undefined;
if (data && isLaziable(data[0]) &&
data[1] == (WRAP_ARY_FLAG | WRAP_CURRY_FLAG | WRAP_PARTIAL_FLAG | WRAP_REARG_FLAG) &&
!data[4].length && data[9] == 1
) {
wrapper = wrapper[getFuncName(data[0])](...data[3]);
} else {
wrapper = (func.length == 1 && isLaziable(func))
? wrapper[funcName]()
: wrapper.thru(func);
}
}
return function() {
const args = arguments;
const value = args[0]; const value = args[0];
let index = 0;
if (wrapper && args.length == 1 && isArray(value)) { let result = length ? funcs[index].apply(this, args) : value;
return wrapper.plant(value).value();
}
let index = 0, result = length ? funcs[index].apply(this, args) : value;
while (++index < length) { while (++index < length) {
result = funcs[index].call(this, result); result = funcs[index].call(this, result);