| 
						 | 
						- var LodashWrapper = require('./_LodashWrapper'),
 -     flatRest = require('./_flatRest'),
 -     getData = require('./_getData'),
 -     getFuncName = require('./_getFuncName'),
 -     isArray = require('./isArray'),
 -     isLaziable = require('./_isLaziable');
 - 
 - /** Error message constants. */
 - var FUNC_ERROR_TEXT = 'Expected a function';
 - 
 - /** Used to compose bitmasks for function metadata. */
 - var WRAP_CURRY_FLAG = 8,
 -     WRAP_PARTIAL_FLAG = 32,
 -     WRAP_ARY_FLAG = 128,
 -     WRAP_REARG_FLAG = 256;
 - 
 - /**
 -  * Creates a `_.flow` or `_.flowRight` function.
 -  *
 -  * @private
 -  * @param {boolean} [fromRight] Specify iterating from right to left.
 -  * @returns {Function} Returns the new flow function.
 -  */
 - function createFlow(fromRight) {
 -   return flatRest(function(funcs) {
 -     var length = funcs.length,
 -         index = length,
 -         prereq = LodashWrapper.prototype.thru;
 - 
 -     if (fromRight) {
 -       funcs.reverse();
 -     }
 -     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) : 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])].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 index = 0,
 -           result = length ? funcs[index].apply(this, args) : value;
 - 
 -       while (++index < length) {
 -         result = funcs[index].call(this, result);
 -       }
 -       return result;
 -     };
 -   });
 - }
 - 
 - module.exports = createFlow;
 
 
  |