Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/dsys/invar

:nut_and_bolt: Expressive runtime invariants for JavaScript
https://github.com/dsys/invar

Last synced: about 1 month ago
JSON representation

:nut_and_bolt: Expressive runtime invariants for JavaScript

Awesome Lists containing this project

README

        

logo

The reign of poor error messages is over!
Expressive runtime invariants for JavaScript.

TravisCI shield npm shield JavaScript Standard Style

## Installation

$ npm install invar --save

## Usage

```javascript
import invar from 'invar'
```

---

### `invar(message)`

Check for truthiness.

#### Example

```javascript
invar(2 + 2 === 5, "I'm sorry Dave, I'm afraid I can't do that.")
```

#### Throws

Invariant Violation: I'm sorry Dave, I'm afraid I can't do that.

---

### `invar.equal(actual, expected, message)`

Check for shallow equality.

#### Example

```javascript
invar.equal(2 + 2, 5, "Daisy, Daisy, give me your answer do.")
```

#### Throws

Invariant Violation: Daisy, Daisy, give me your answer do.
actual: 4
expected: 5

---

### `invar.notEqual(actual, expected, message)`

Check for shallow unequality.

#### Example

```javascript
invar.notEqual(2 + 2, 4, "I've just picked up a fault in the AE35 unit.")
```

#### Throws

Invariant Violation: I've just picked up a fault in the AE35 unit.
actual: 4
expected: not 4

---

### `invar.req(arg)`

Always fail. Used for mandatory function arguments.

#### Example

```javascript
function myFunction (mandatoryArg = invar.req('mandatoryArg')) {}
myFunction()
```

#### Throws

Invariant Violation: Required argument 'mandatoryArg' not provided.

---

### `invar.fail(message)`

Always fail.

#### Example

```javascript
invar.fail("I'm afraid. I'm afraid, Dave. Dave, my mind is going.")
```

#### Throws

Invariant Violation: I'm afraid. I'm afraid, Dave. Dave, my mind is going.

## Development

Invar uses [JavaScript Standard Style](https://github.com/feross/standard), [Babel](https://babeljs.io/) for ES6+ support, and [Jest](http://facebook.github.io/jest/) for testing.

$ git clone [email protected]:pavlovml/invar.git
$ make test

To run the tests on file changes:

$ env WATCH=true make test

## License

[BSD 3-Clause](https://github.com/pavlovml/invar/blob/master/LICENSE)