UNPKG

vue-app-sdk

Version:
47 lines (46 loc) 1.8 kB
import LodashWrapper from "./_LodashWrapper.js"; import flatRest from "./_flatRest.js"; import getData from "./_getData.js"; import getFuncName from "./_getFuncName.js"; import isArray from "./isArray.js"; import isLaziable from "./_isLaziable.js"; var FUNC_ERROR_TEXT = "Expected a function"; var WRAP_CURRY_FLAG = 8, WRAP_PARTIAL_FLAG = 32, WRAP_ARY_FLAG = 128, WRAP_REARG_FLAG = 256; function createFlow(fromRight) { return flatRest(function(funcs) { var length = funcs.length, index = length, prereq = LodashWrapper.prototype.thru; while (index--) { var func = funcs[index]; if (typeof func != "function") { throw new TypeError(FUNC_ERROR_TEXT); } if (prereq && !wrapper && getFuncName(func) == "wrapper") { var wrapper = new LodashWrapper([], true); } } index = wrapper ? index : length; while (++index < length) { func = funcs[index]; var funcName = getFuncName(func), data = funcName == "wrapper" ? getData(func) : void 0; 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])].apply(wrapper, data[3]); } else { wrapper = func.length == 1 && isLaziable(func) ? wrapper[funcName]() : wrapper.thru(func); } } return function() { var args = arguments, value = args[0]; if (wrapper && args.length == 1 && isArray(value)) { return wrapper.plant(value).value(); } var index2 = 0, result = length ? funcs[index2].apply(this, args) : value; while (++index2 < length) { result = funcs[index2].call(this, result); } return result; }; }); } export { createFlow as default };