Skip to content

Get separately non-callback arguments in `.arguments` and the last argument if it `is-callback-function` in `.callback` property. It also works like `sliced`, but returns object with `.arguments` and `.callback` properties.

License

Notifications You must be signed in to change notification settings

hybridables/handle-arguments

Repository files navigation

Get separately non-callback arguments in .arguments and the last argument if it is-callback-function in .callback. It also works like sliced, but returns object with .arguments and .callback properties.

code climate standard code style travis build status coverage status dependency status

Install

npm i handle-arguments --save

Usage

For more use-cases see the tests

const handleArguments = require('handle-arguments')

Get separately non-callback arguments in .arguments, and the last function if it is-callback-function in .callback. Signature is like sliced, it works almost the same way, but returns object with .arguments and .callback properties.

Params

  • argz {Array|Arguments}: Arguments object or array to eat.
  • names {Array|Number}: If array directly passed to is-callback-function, otherwise to sliced.
  • index {Number}: Passed directly to sliced if number.
  • returns {Object}

Example

var handle = require('handle-arguments')

function fixture () {
  return handle(arguments)
}

function cb () {}
function noop () {}

console.log(fixture(1, 2, 3, 4).arguments) // => [1, 2, 3, 4]
console.log(fixture(1, 2, 3, 4).callback) // => false

console.log(fixture(1, 2, cb).arguments) // => [1, 2]
console.log(fixture(1, 2, cb).callback) // => [Function: cb]

console.log(fixture(1, 2, noop).arguments) // => [1, 2, noop]
console.log(fixture(1, 2, noop).callback) // => false

// treat functions named `noop` or `foo` as callback
function fn () {
  return handle(arguments, ['foo', 'noop'])
}

console.log(fn(1, 2, 3, noop).arguments) // => [1, 2, 3]
console.log(fn(1, 2, 3, noop).callback) // => [Function: noop]

Instead of commonly used and wrong pattern

It is part of "Optiomization Killers" and needed very much, so we need correct pattern to reuse.

function fixture () {
  var args = [].slice.call(arguments)
  var len = args.length
  var callback = args[len - 1]

  if (typeof callback === 'function') {
    args = args.slice(0, -1)
    callback.apply(null, [null].concat(args))
  }
  return args
}

Related

Contributing

Pull requests and stars are always welcome. For bugs and feature requests, please create an issue.
But before doing anything, please read the CONTRIBUTING.md guidelines.

tunnckoCore.tk keybase tunnckoCore tunnckoCore npm tunnckoCore twitter tunnckoCore github

About

Get separately non-callback arguments in `.arguments` and the last argument if it `is-callback-function` in `.callback` property. It also works like `sliced`, but returns object with `.arguments` and `.callback` properties.

Resources

License

Stars

Watchers

Forks

Packages

No packages published