NodeJS implementation of clojure.spec
JavaScript
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
docs
examples
lib
specs
test
.bookignore
.eslintrc.json
.gitignore
.travis.yml
CONTRIBUTING.md
LICENSE
README.md
TODO
book.json
index.js
package.json
sonar-project.properties
stryker.conf.js

README.md

Build Status Quality Gate Coverage Status Known Vulnerabilities npm version Join the chat at https://gitter.im/speculaas/Lobby

Speculaas

NodeJS version of clojure.spec

Installation

npm install speculaas

Example

const s = require('speculaas');
const {isString} = s.utils;

const emailRegex = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,63}$/

s.def('emailType', s.and(isString, s => emailRegex.test(s)));
        
s.def('first-name', isString);
s.def('last-name', isString);
s.def('email', 'emailType');
s.def('phone', isString);

// First name, last name and email are required. Phone number is optional
s.def('person', s.keys({req: ['first-name', 'last-name', 'email'], opt: ['phone']}));

s.isValid('::person',
{
    'first-name': 'Elon',
    'last-name': 'Musk',
    'email': 'elon@example.com'
});
// true

Usage

Documentation is in progress.

Tests

Unit tests:

npm test

Test coverage:

npm run cover

Run ESlint:

npm run lint

FAQ

Q: what kind of a silly name is speculaas?

A: nodespec and node-spec were already taken. Speculaas is a kind of a Dutch/Belgium biscuit.

Q: any alternatives for your code?

A: for an alternative look at js.spec

Contributing

If you want to contribute, you are more than welcome!