arguguard

2.1.1 • Public • Published

arguguard

Strict argument validation with testable errors

Install

Install with npm

$ npm i arguguard --save-dev

Usage

arguguard takes three arguments.

arguguard(label, [description1, description2, ...], arguments)

  1. A string label such as myFunction() that will be used in error reporting
  2. An array of descriptions. Each description can either be one of 4 things
    1. A lower case string (ex. "number" or "boolean") in which a typeof check will be performed
    2. An upper case string (ex. "Object" or "MyClass") in which a instanceof check will be performed
    3. An [] (ex. "[]number" or "[]MyClass") in which case the top level argument must be an array, and every instance of that array must pass either a typeof or instanceof check
    4. An instance of the Validator class (require('arguguard/lib/Validator'))
  3. The arguments to test.
var arguguard = require('arguguard')
var Validator = require('arguguard/lib/Validator')
var aboveThreeValidator = new Validator('AboveThree', (number) => { return number > 3 })
 
function myFunction(myNumber, myClass, arrayofMyClass, myBigNumber) {
  arguguard('myFunction()', ['number', 'MyClass', '[]MyClass', aboveThreeValidator], arguments)
}
 
myFunction()
>> Arguguard:User:ArgumentsLengthError: myFunction() arguments.length should be "4", received "0"
 
myFunction(1, myClass, [myClass, myClass], 4, callback)
>> Arguguard:User:ArgumentsLengthError: myFunction() arguments.length should be "4", received "5"
 
myFunction('1', myClass, [myClass, myClass], 4)
>> Arguguard:User:ArgumentTypeError: myFunction() arguments[0] type should be "number", received "string"
 
myFunction(1, {}, [myClass, myClass], 4)
>> Arguguard:User:ArgumentInstanceError: myFunction() arguments[1] constructor should be "MyClass", received "Object"
 
myFunction(1, myClass, myClass, 4)
>> Arguguard:User:ArgumentInstanceError: myFunction() arguments[2] constructor should be "Array", received "MyClass"
 
myFunction(1, myClass, [myClass, MyClass], 4)
>> Arguguard:User:ArgumentInstanceError: myFunction() arguments[2][1] constructor should be "MyClass", received "Function"
 
myFunction(1, myClass, [myClass, myClass], 3)
>> Arguguard:User:ValidationError:AboveThree: myFunction() arguments[3] should be "above 3", received "3"
 
myFunction(1, myClass, [myClass, myClass], 4)
>> ✓

Api Errors

The arguguard api is defensively programmed and will throw errors if called with the wrong arguments

arguguard(['number', MyClass, [MyClass]], arguments)
>> Arguguard:Api:ArgumentsLengthError: arguguard() arguments.length should be "3", received "2"
 
arguguard('myFunction()', ['number', MyClass, [MyClass]], arguments)
>> ✓

Settings

Disable (Get a speed boost)

arguguard.options.disabled = true

Allow for Synonymous Constructors (such as when you have two versions of a dependency)

arguguard.options.allowSynonymousConstructors = true

Running tests

Install dev dependencies:

$ npm i -d && npm test

Contributing

Pull requests and stars are always welcome. For bugs and feature requests, please create an issue

Author


License

Copyright © 2017 Licensed under the MIT license.


This file was generated by readme-generator on January 21, 2017.

Readme

Keywords

none

Package Sidebar

Install

npm i arguguard

Weekly Downloads

7

Version

2.1.1

License

MIT

Last publish

Collaborators

  • aakilfernandes