Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/okunishinishi/node-argx
Node.js module to parse function arguments.
https://github.com/okunishinishi/node-argx
Last synced: 2 months ago
JSON representation
Node.js module to parse function arguments.
- Host: GitHub
- URL: https://github.com/okunishinishi/node-argx
- Owner: okunishinishi
- License: mit
- Created: 2015-07-12T23:00:04.000Z (over 9 years ago)
- Default Branch: master
- Last Pushed: 2023-03-04T03:11:03.000Z (almost 2 years ago)
- Last Synced: 2024-11-08T08:49:30.670Z (2 months ago)
- Language: JavaScript
- Homepage: https://www.npmjs.com/package/argx
- Size: 324 KB
- Stars: 9
- Watchers: 2
- Forks: 1
- Open Issues: 2
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
argx
==========[![Build Status][bd_travis_shield_url]][bd_travis_url]
[![npm Version][bd_npm_shield_url]][bd_npm_url]
[![JS Standard][bd_standard_shield_url]][bd_standard_url][bd_repo_url]: https://github.com/okunishinishi/node-argx
[bd_travis_url]: http://travis-ci.org/okunishinishi/node-argx
[bd_travis_shield_url]: http://img.shields.io/travis/okunishinishi/node-argx.svg?style=flat
[bd_travis_com_url]: http://travis-ci.com/okunishinishi/node-argx
[bd_travis_com_shield_url]: https://api.travis-ci.com/okunishinishi/node-argx.svg?token=
[bd_license_url]: https://github.com/okunishinishi/node-argx/blob/master/LICENSE
[bd_codeclimate_url]: http://codeclimate.com/github/okunishinishi/node-argx
[bd_codeclimate_shield_url]: http://img.shields.io/codeclimate/github/okunishinishi/node-argx.svg?style=flat
[bd_codeclimate_coverage_shield_url]: http://img.shields.io/codeclimate/coverage/github/okunishinishi/node-argx.svg?style=flat
[bd_gemnasium_url]: https://gemnasium.com/okunishinishi/node-argx
[bd_gemnasium_shield_url]: https://gemnasium.com/okunishinishi/node-argx.svg
[bd_npm_url]: http://www.npmjs.org/package/argx
[bd_npm_shield_url]: http://img.shields.io/npm/v/argx.svg?style=flat
[bd_standard_url]: http://standardjs.com/
[bd_standard_shield_url]: https://img.shields.io/badge/code%20style-standard-brightgreen.svgParse function arguments. Useful to implement variadic functions.
Installation
-----```bash
npm install argx --save
```Usage
-----Pass the `arguments` object to `.argx()` inside your function.
```javascript
/**
* 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.
```javascript
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.
1. Passing string joined by "|" (eg: `args.pop('string|number');` )
2. 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()`.```javascript
var args = argx(arguments);
var values = [].concat(args.pop(2, 'string') || []); // Always array.
```License
-------
This software is released under the [MIT License](https://github.com/okunishinishi/node-argx/blob/master/LICENSE).