Package Exports
- check-types
This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (check-types) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.
Readme
check-types.js
A tiny JavaScript library for asserting types and values.
- Why would I want that?
- How tiny is it?
- How do I install it?
- How do I use it?
- Where can I use it?
- What changed from 1.x to 2.x?
- What changed from 0.x to 1.x?
- How do I set up the build environment?
- What license is it released under?
Why would I want that?
Writing explicit conditions in your functions to check arguments and throw exceptions is a task that swiftly becomes tiresome and adds complexity to your codebase.
The purpose of check-types.js is to remove this burden from JavaScript application developers in an efficient and robust manner, abstracted by a simple API.
How tiny is it?
13 kb unminified with comments, 3.3 kb minified, 1.2 kb minified + gzipped.
How do I install it?
If you're using npm:
npm install check-types --save
Or if you just want the git repo:
git clone git@github.com:philbooth/check-types.js.git
If you're into other package managers, it is also available from Bower, Component and Jam.
How do I use it?
Loading the library
If you are running in
Node.js,
Browserify
or another CommonJS-style
environment,
you can require
check-types.js like so:
var check = require('check-types');
It also the supports the AMD-style format preferred by Require.js.
If you are
including check-types.js
with an HTML <script>
tag,
or neither of the above environments
are detected,
it will export the interface globally as check
.
Calling the exported functions
Once you have loaded the library in your application, a whole bunch of functions are available to call.
For the most part, the exported functions are broadly split into four types.
check.xxx(thing)
: These functions are predicates, returning true or false depending on the type and value ofthing
.check.maybe.xxx(thing)
: The maybe modifier returnstrue
ifthing
isnull
orundefined
, otherwise it returns the result of the equivalent predicate.check.not.xxx(thing)
: The not modifier negates a predicate, returningtrue
if the predicate returnsfalse
andfalse
if the predicate returnstrue
.check.assert.xxx(thing, message)
: The assert modifier calls the equivalent predicate and throws anError
if the result isfalse
. It can also be applied to maybe and not modifiers using the formcheck.assert.maybe.xxx(thing, message)
orcheck.assert.not.xxx(thing, message)
respectively.
Additionally, there are some batch operations
that allow you to apply predicates
across multiple values
inside arrays or objects.
These are implemented by
check.apply
,
check.map
,
check.any
and
check.every
.
String functions
check.string(thing)
: Returnstrue
ifthing
is a string,false
otherwise.check.unemptyString(thing)
: Returnstrue
ifthing
is a non-empty string,false
otherwise.check.webUrl(thing)
: Returnstrue
ifthing
is an HTTP or HTTPS URL,false
otherwise.check.length(thing, value)
: Returnstrue
ifthing
has a length property that equalsvalue
,false
otherwise. Ifvalue
is undefined, an exception is thrown.
Number functions
check.number(thing)
: Returnstrue
ifthing
is a number,false
otherwise. Note thatNaN
,Number.POSITIVE_INFINITY
andNumber.NEGATIVE_INFINITY
are not considered numbers here.check.positive(thing)
: Returnstrue
ifthing
is a number greater than zero,false
otherwise.check.negative(thing)
: Returnstrue
ifthing
is a number less than zero,false
otherwise.check.odd(thing)
: Returnstrue
ifthing
is an odd number,false
otherwise.check.even(thing)
: Returnstrue
ifthing
is an even number,false
otherwise.check.integer(thing)
: Returnstrue
ifthing
is an integer,false
otherwise.
Function functions
check.function(thing)
: Returnstrue
ifthing
is a function,false
otherwise.
Array functions
check.array(thing)
: Returnstrue
ifthing
is an array,false
otherwise.check.length(thing, value)
: Returnstrue
ifthing
has a length property that equalsvalue
,false
otherwise. Ifvalue
is undefined, an exception is thrown.
Date functions
check.date(thing)
: Returnstrue
ifthing
is a date,false
otherwise.
Object functions
check.object(thing)
: Returnstrue
ifthing
is a plain-old JavaScript object,false
otherwise.check.emptyObject(thing)
: Returnstrue
ifthing
is an empty object,false
otherwise.check.instance(thing, prototype)
: Returnstrue
ifthing
is an instance ofprototype
,false
otherwise.check.like(thing, duck)
: Duck-typing checker. Returnstrue
ifthing
has all of the properties ofduck
,false
otherwise. If either argument is not an object, an exception is thrown.check.null(thing)
: Returnstrue
ifthing
isnull
,false
otherwise.check.undefined(thing)
: Returnstrue
ifthing
isundefined
,false
otherwise.check.assigned(thing)
: Returnstrue
ifthing
is notnull
orundefined
,false
otherwise.
Boolean functions
check.boolean(thing)
: Returnstrue
ifthing
is a boolean,false
otherwise.
Modifiers
check.not.xxx(...)
: Returns the negation of the predicate.check.maybe.xxx(...)
: Returnstrue
ifthing
isnull
orundefined
, otherwise it propagates the return value from its predicate.check.assert.xxx(...)
/check.assert.maybe.xxx(...)
: Throws anError
if the predicate returns false. The last argument is an optional message to be set on theError
instance.
Batch operations
check.apply(things, predicates)
: Applies each value from the array of things to the corresponding predicate and returns the array of results. Passing a single predicate instead of an array of them applies all of the values to that predicate.check.map(things, predicates)
: Maps each value from the data to the corresponding predicate and returns a results object. Supports nested objects.check.all(results)
: Returnstrue
if all the result values are true in an array (returned fromapply
) or object (returned frommap
).check.any(predicateResults)
: Returnstrue
if any result value is true in an array (returned fromapply
) or object (returned frommap
).
Some examples
check.even(3);
// Returns false
check.maybe.even(null);
// Returns true
check.not.even(3);
// Returns true
check.assert.like({ foo: 'bar' }, { baz: 'qux' }, 'Invalid object');
// Throws new Error('Invalid object')
check.assert.maybe.like(undefined, { foo: 'bar' }, 'Invalid object');
// Doesn't throw
check.assert.not.like({ foo: 'bar' }, { baz: 'qux' }, 'Invalid object');
// Doesn't throw
check.apply([ 'foo', 'bar', '' ], check.unemptyString);
// Returns false
check.map({
foo: 2,
bar: { baz: 'qux' }
}, {
foo: check.odd,
bar: { baz: check.unemptyString }
});
// Returns { foo: false, bar: { baz: true } }
check.all(
check.map(
{ foo: 0, bar: '' },
{ foo: check.number, bar: check.string }
);
);
// Returns true
check.any(
check.apply(
[ 1, 2, 3, '' ],
check.string
)
);
// Returns true
Where can I use it?
As of version 2.0, this library no longer supports ES3. That means you can't use it in IE 7 or 8.
Everywhere else should be fine.
If those versions of IE are important to you, there is hope! The 1.x versions all support old IE and any future 1.x versions will adhere to that.
See the releases for more information.
What changed from 1.x to 2.x?
Breaking changes were made to the API in version 2.0.0.
Specifically:
- Support for ES3 was dropped
- The predicates
gitUrl
,email
andfloatNumber
were removed. verify
was renamed toassert
.nulled
was renamed tonull
.oddNumber
was renamed toodd
.evenNumber
was renamed toeven
.positiveNumber
was renamed topositive
.negativeNumber
was renamed tonegative
.intNumber
was renamed tointeger
.bool
was renamed toboolean
.defined
was swapped to becomeundefined
.webUrl
was tightened to reject more cases.- The
assigned
predicate and theapply
batch operation were added.
See the history for more details.
What changed from 0.x to 1.x?
Breaking changes were made to the API in version 1.0.0.
Specifically,
all of the predicates
were renamed
from check.isXxxx
to check.xxx
and
all of the verifiers
were renamed
from check.verifyXxxx
to check.verify.xxx
.
See the history for more details.
How do I set up the build environment?
The build environment relies on
Node.js,
NPM,
JSHint,
Mocha,
Chai and
UglifyJS.
Assuming that you already have Node.js and NPM set up,
you just need to run npm install
to
install all of the dependencies as listed in package.json
.
The unit tests are in test/check-types.js
.
You can run them with the command npm test
.
To run the tests in a web browser,
open test/check-types.html
.