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.
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)
console.log(fixture(1, 2, 3, 4).callback)
console.log(fixture(1, 2, cb).arguments)
console.log(fixture(1, 2, cb).callback)
console.log(fixture(1, 2, noop).arguments)
console.log(fixture(1, 2, noop).callback)
function fn () {
return handle(arguments, ['foo', 'noop'])
}
console.log(fn(1, 2, 3, noop).arguments)
console.log(fn(1, 2, 3, noop).callback)
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.