Learn more  » Push, build, and install  RubyGems npm packages Python packages Maven artifacts PHP packages Go Modules Bower components Debian packages RPM packages NuGet packages

skava / chain-able-deps   js

Repository URL to install this package:

Version: 6.0.4 

/ src / fp / arity.ts

/* eslint complexity: "OFF" */
/* eslint consistent-return: "OFF" */
/* eslint max-len: "OFF" */
/* eslint no-unused-vars: "OFF" */

/* istanbul ignore next: metadata, one is covered, all are covered */
/* prettier-ignore */
/**
 * @desc just for `.length` of a function, to know how many args
 * @memberOf fp
 *
 * @since 5.0.0
 * @param n number of arguments
 * @param fn function to wrap
 * @return function with params
 *
 * @tests fp/arity
 *
 * {@link https://github.com/blakeembrey/nary nary}
 * {@link https://www.npmjs.com/package/util-arity util-arity}
 * {@link https://docs.microsoft.com/en-us/scripting/javascript/reference/length-property-function-javascript microsoft-func-length}
 * {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/arity mozilla-func-arity}
 * @see {@link mozilla-func-arity}
 * @see {@link microsoft-func-length}
 * @see {@link util-arity}
 * @see {@link nary}
 *
 * @NOTE keeping this means uglify `keep_func_args: false`
 *
 * @example
 *
 *  const wan = one => console.log(one)
 *  arity(1, wan)
 *  => function(one => wan(one))
 *
 *  const five = ($1, $2, $3, $4, $5) => console.log.apply(console, arguments)
 *  arity(5, five).length
 *  //=> 5
 *
 */
export default function _arity(n: 1 | 2 | 3 | 4 | 5 | number, fn: Function) {
  // if (n === 0 || n > 5)
  if (n === 1) return function(this: any, $0?: any) { return fn.apply(this, arguments) }
  else if (n === 2) return function(this: any, $0?: any, $1?: any) { return fn.apply(this, arguments) }
  else if (n === 3) return function(this: any, $0?: any, $1?: any, $2?: any) { return fn.apply(this, arguments) }
  else if (n === 4) return function(this: any, $0?: any, $1?: any, $2?: any, $3?: any) { return fn.apply(this, arguments) }
  else if (n === 5) return function(this: any, $0?: any, $1?: any, $2?: any, $3?: any, $4?: any) { return fn.apply(this, arguments) }
  else return function(this: any) { return fn.apply(this, arguments) }

  // @NOTE ignoring
  // else if (n === 6) return function(a0, a1, a2, a3, a4, a5) { return fn.apply(this, arguments) }
  // else if (n === 7) return function(a0, a1, a2, a3, a4, a5, a6) { return fn.apply(this, arguments) }
  // else if (n === 8) return function(a0, a1, a2, a3, a4, a5, a6, a7) { return fn.apply(this, arguments) }
  // else if (n === 9) return function(a0, a1, a2, a3, a4, a5, a6, a7, a8) { return fn.apply(this, arguments) }
  // else if (n === 10) return function(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9) { return fn.apply(this, arguments) }
}