Skip to content

Latest commit

 

History

History
78 lines (50 loc) · 2.01 KB

README.md

File metadata and controls

78 lines (50 loc) · 2.01 KB

getargs

Simple utility for parsing/processing variable length argument lists for Javascript functions; also verifies argument types and argument list length.

Install

Bower - bower install getargs; NPM - npm install getargs.

Usage

var getArgs = require('getargs')

function ajax(/* url:string|array, [options]:object, callback:function */){
  var args = getArgs('url:string|array, [options]:object, callback:function', arguments)

  console.log('url is', args.url)
  console.log('options is optionally', args.options)
  console.log('callback', args.callback)
}

Argument Spec Syntax

The argument spec is a comma delimited string of individual specs, which look like

argname:type

You can specify multiple types by using |

argname:type|type|type
  • argname is the name of the argument, and can be called anything
  • type is an optional basic Javascript type. Currently these are supported
    • string
    • boolean
    • number
    • object
    • function
    • array

Optional Arguments

To denote optional arguments, you'd surround argname with square brackets [].

Type Verification

getArgs will throw if the arguments have the wrong types

var args = getArgs('url:string', [1])
// Error: Expected url(pos 0) to be a string

Argument List Length Verification

getArgs will throw if there are too many or too few arguments

> getArgs('a,b', [1])
Error: Not enough arguments, expected 2, got 1
> getArgs('a,b', [1,1])
{ a: 1, b: 1 }
> getArgs('a,b', [1,1,1])
Error: Too many arguments, expected 2, got 3

Spread Operator

You can mimick ES6's spread operator

var args = getArgs('first,...rest', [1,2,3,4])
console.log(args.first) // 1
console.log(args.rest)  // [2,3,4]

Set properties on an object

If you pass an object as its third argument, it will set the arguments as properties on that object.

getArgs('a,b,c', arguments, this)
// Now you can access the arguments by
// this.a, this.b, and this.c