.
This commit is contained in:
		
							
								
								
									
										92
									
								
								qwen/nodejs/node_modules/lodash/_createHybrid.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										92
									
								
								qwen/nodejs/node_modules/lodash/_createHybrid.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,92 @@
 | 
			
		||||
var composeArgs = require('./_composeArgs'),
 | 
			
		||||
    composeArgsRight = require('./_composeArgsRight'),
 | 
			
		||||
    countHolders = require('./_countHolders'),
 | 
			
		||||
    createCtor = require('./_createCtor'),
 | 
			
		||||
    createRecurry = require('./_createRecurry'),
 | 
			
		||||
    getHolder = require('./_getHolder'),
 | 
			
		||||
    reorder = require('./_reorder'),
 | 
			
		||||
    replaceHolders = require('./_replaceHolders'),
 | 
			
		||||
    root = require('./_root');
 | 
			
		||||
 | 
			
		||||
/** Used to compose bitmasks for function metadata. */
 | 
			
		||||
var WRAP_BIND_FLAG = 1,
 | 
			
		||||
    WRAP_BIND_KEY_FLAG = 2,
 | 
			
		||||
    WRAP_CURRY_FLAG = 8,
 | 
			
		||||
    WRAP_CURRY_RIGHT_FLAG = 16,
 | 
			
		||||
    WRAP_ARY_FLAG = 128,
 | 
			
		||||
    WRAP_FLIP_FLAG = 512;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Creates a function that wraps `func` to invoke it with optional `this`
 | 
			
		||||
 * binding of `thisArg`, partial application, and currying.
 | 
			
		||||
 *
 | 
			
		||||
 * @private
 | 
			
		||||
 * @param {Function|string} func The function or method name to wrap.
 | 
			
		||||
 * @param {number} bitmask The bitmask flags. See `createWrap` for more details.
 | 
			
		||||
 * @param {*} [thisArg] The `this` binding of `func`.
 | 
			
		||||
 * @param {Array} [partials] The arguments to prepend to those provided to
 | 
			
		||||
 *  the new function.
 | 
			
		||||
 * @param {Array} [holders] The `partials` placeholder indexes.
 | 
			
		||||
 * @param {Array} [partialsRight] The arguments to append to those provided
 | 
			
		||||
 *  to the new function.
 | 
			
		||||
 * @param {Array} [holdersRight] The `partialsRight` placeholder indexes.
 | 
			
		||||
 * @param {Array} [argPos] The argument positions of the new function.
 | 
			
		||||
 * @param {number} [ary] The arity cap of `func`.
 | 
			
		||||
 * @param {number} [arity] The arity of `func`.
 | 
			
		||||
 * @returns {Function} Returns the new wrapped function.
 | 
			
		||||
 */
 | 
			
		||||
function createHybrid(func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, argPos, ary, arity) {
 | 
			
		||||
  var isAry = bitmask & WRAP_ARY_FLAG,
 | 
			
		||||
      isBind = bitmask & WRAP_BIND_FLAG,
 | 
			
		||||
      isBindKey = bitmask & WRAP_BIND_KEY_FLAG,
 | 
			
		||||
      isCurried = bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG),
 | 
			
		||||
      isFlip = bitmask & WRAP_FLIP_FLAG,
 | 
			
		||||
      Ctor = isBindKey ? undefined : createCtor(func);
 | 
			
		||||
 | 
			
		||||
  function wrapper() {
 | 
			
		||||
    var length = arguments.length,
 | 
			
		||||
        args = Array(length),
 | 
			
		||||
        index = length;
 | 
			
		||||
 | 
			
		||||
    while (index--) {
 | 
			
		||||
      args[index] = arguments[index];
 | 
			
		||||
    }
 | 
			
		||||
    if (isCurried) {
 | 
			
		||||
      var placeholder = getHolder(wrapper),
 | 
			
		||||
          holdersCount = countHolders(args, placeholder);
 | 
			
		||||
    }
 | 
			
		||||
    if (partials) {
 | 
			
		||||
      args = composeArgs(args, partials, holders, isCurried);
 | 
			
		||||
    }
 | 
			
		||||
    if (partialsRight) {
 | 
			
		||||
      args = composeArgsRight(args, partialsRight, holdersRight, isCurried);
 | 
			
		||||
    }
 | 
			
		||||
    length -= holdersCount;
 | 
			
		||||
    if (isCurried && length < arity) {
 | 
			
		||||
      var newHolders = replaceHolders(args, placeholder);
 | 
			
		||||
      return createRecurry(
 | 
			
		||||
        func, bitmask, createHybrid, wrapper.placeholder, thisArg,
 | 
			
		||||
        args, newHolders, argPos, ary, arity - length
 | 
			
		||||
      );
 | 
			
		||||
    }
 | 
			
		||||
    var thisBinding = isBind ? thisArg : this,
 | 
			
		||||
        fn = isBindKey ? thisBinding[func] : func;
 | 
			
		||||
 | 
			
		||||
    length = args.length;
 | 
			
		||||
    if (argPos) {
 | 
			
		||||
      args = reorder(args, argPos);
 | 
			
		||||
    } else if (isFlip && length > 1) {
 | 
			
		||||
      args.reverse();
 | 
			
		||||
    }
 | 
			
		||||
    if (isAry && ary < length) {
 | 
			
		||||
      args.length = ary;
 | 
			
		||||
    }
 | 
			
		||||
    if (this && this !== root && this instanceof wrapper) {
 | 
			
		||||
      fn = Ctor || createCtor(fn);
 | 
			
		||||
    }
 | 
			
		||||
    return fn.apply(thisBinding, args);
 | 
			
		||||
  }
 | 
			
		||||
  return wrapper;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
module.exports = createHybrid;
 | 
			
		||||
		Reference in New Issue
	
	Block a user