argx
v4.0.4
Published
Parse function arguments. Useful to implement variadic functions.
Downloads
22,358
Maintainers
Readme
argx
Parse function arguments. Useful to implement variadic functions.
Installation
npm install argx --save
Usage
Pass the arguments
object to .argx()
inside your function.
/**
* This is an example to declare an variadic functions.
*/
'use strict'
const argx = require('argx')
function doSomething (values, options, callback) {
let args = argx(arguments)
callback = args.pop('function') || function noop () {} // Consume last argument if it's a function.
options = args.pop('object') || {} // Consume last argument if it's an object.
values = args.remain() // Get remaining arguments as array.
/* ... */
}
doSomething('foo', 'bar')
doSomething('foo', 'bar', { verbose: true })
doSomething('foo', 'bar', (err) => {})
doSomething('foo', 'bar', { verbose: true }, (err) => {})
API Guide
API guide for Argx instance, which is returned by argx(arguments)
.
| Signature | Description | Example | ----- | ----- | --- | | .pop() | Pop an argument value from last. | args.pop() | | .pop(count) | Pop multiple values from last. Orders are preserved. | args.pop(1) | | .pop(type) | Pop only if the last value conform the type. | args.pop("number") args.pop("number|string") args.pop(CustomObj) | | .pop(count, type) | Pop values while conforming the type. | args.pop(2, "number") args.pop(1, CustomObj) | | .shift() | Shift an argument value from top. | args.shift() | | .shift(count) | Shift multiple values from top. | args.shift(2) | | .shift(type) | Shift only if the top value conform the type. | args.shift("string") args.pop("object|string") args.shift(CustomObj) | | .shift(count, type) | Shift values while conforming the type. | args.shift(2, "string") args.shift(4, CustomObj) | | .remain() | Shift all remained values. Always returns an array. | args.remain() |
Tips
Detecting Custom Types.
Type which .pop()
/.shift()
accept is string, a custom object or a custom constructor.
function MyConstructor(){/*...*/};
args.pop(MyConstructor); // Pop only if the last argument is instantiate by `new MyConstructor()`
var MyObj = {/*...*/};
args.pop(MyObj); // Pop only if the last argument is create by `Object.create(MyObj)`
Specify Multiple Types
There are two ways to specify 'or' condition for types.
- Passing string joined by "|" (eg:
args.pop('string|number');
) - Passing array as type (eg:
args.pop(['string', MyCustomObj]);
)
Want Array Always
Note that .pop()
/.shift()
methods returns values as array only when multiple entries hit.
If you want to make sure to keep values as array, use [].concat()
.
var args = argx(arguments);
var values = [].concat(args.pop(2, 'string') || []); // Always array.
License
This software is released under the MIT License.