
Product
Announcing Socket Fix 2.0
Socket Fix 2.0 brings targeted CVE remediation, smarter upgrade planning, and broader ecosystem support to help developers get to zero alerts.
Credible is a library for validating objects in node.js or the browser. While it provides several validators out of the box, credible is very unopinionated; mostly, credible simply provides a framework for object validation.
Credible has one dependency: An A+ promise library, i.e. bluebird or when.js.
$ npm install credible --save
Node takes care of the dependency automatically.
<script src="/bluebird.js"></script>
<script src="/credible.min.js"></script>
By default, Credible uses bluebird; to use a different implementation, set Credible.Promise to the correct library.
var rules = {
name: {
presence: true
},
email: {
email: true
}
}
var obj = {
name: 'Noah Portes Chaikin',
email: 'noah.porteschaikin@carrotcreative.com'
}
var credible = new Credible(rules)
.run(obj)
.catch(function (errors) {
console.log(errors.toJSON());
})
See examples.
Every method in a Credible instance returns the instance except credible.run(), which returns a promise.
new Credible(arguments..)The main Credible constructor optionally accepts the same arguments as credible.rule() (see below).
credible.rule(arguments..)Used to set new rules. credible.rule() is a variadic function; it accepts any of the following sets of arguments:
credible
.rule(properties, validator, options)
.rule(properties, { validator1: options, validator2: options })
.rule(validator, options)
validator is either an available validator or a function. To use an available validator, simply pass the validator's name as a string or an object key:
credible
.rule('name', 'presence', true)
.rule('name', { length: { greaterThan: 5 } })
.rule(['firstName', 'lastName'], { length: { greaterThan: 5 } })
.rule({ name: { presence: true }, email: { email: { if: function (obj) { return obj.email; } } } })
On validation, a validator function is passed the object, the property key (if provided), and options. Validator functions can return promises for asynchronous validation. This is an example validator:
var emailValidator = function (object, property, options) {
if ( /^[a-z0-9._%+\-]+@[a-z0-9.\-]+\.[a-z]{2,6}$/i.test(object[property])) {
throw property + ' is an invalid e-mail address';
}
}
Validators can be sent any number of settings in the options object; the following options are made available to every validator and are handled by the credible object:
| Key | Description |
|---|---|
if: fn | Only validate if fn returns true. fn is a function; the object being validated is passed to fn as an argument. |
unless: fn | Only validate if fn returns false. fn is a function; the object being validated is passed to fn as an argument. |
invalid: fn | fn is a function to handle a failed validation; the object being validated is passed to fn as an argument. |
credible.if([properties], fn)Only run validator if fn (a function) returns true. fn is passed the object being validated. Optionally, passing properties will only execute the test on validators executed on the specified properties.
credible
.if(function (object) {
return object.foo == 'bar';
});
credible
.if('name', function (object) {
return object.foo == 'bar';
});
credible
.if(['firstName', 'lastName'], function (object) {
return object.foo == 'bar';
});
credible.unless([property], fn)Only run validator if fn (a function) returns false. fn is passed the object being validated. Optionally, passing properties will only execute the test on validators executed on the specified properties.
credible
.unless(function (object) {
return object.foo == 'bar';
});
credible
.unless('name', function (object) {
return object.foo == 'bar';
});
credible
.unless(['firstName', 'lastName'], function (object) {
return object.foo == 'bar';
});
credible.invalid([property], fn)Pass fn, a function, for handling a failed validation. fn is passed the object being validated. Optionally, passing properties will only execute the function for failed validations executed on the specified properties.
credible
.invalid(function (object) {
throw 'This object is invalid.';
});
credible
.invalid('name', function (object) {
throw 'This name is invalid.';
});
credible
.invalid(['firstName', 'lastName'], function (object) {
throw 'This name is invalid.';
});
credible.run(object)Run validations on object; returns a promise.
credible
.run(obj)
.then(function () {
console.log('It\'s valid!');
})
.catch(function (errors) {
console.log(errors.toJSON());
})
alphaProperty must contain only letters.
alphaNumericProperty must contain only letters and numbers.
alphaNumericDashProperty must contain only letters, numbers and dashes.
alphaNumericUnderscoreProperty must contain only letters, numbers and underscores.
arrayProperty must be an array.
booleanProperty must be a boolean (true or false only).
containsProperty must contain the string specified in the second argument.
dateProperty must be a date (Date object).
emailProperty must be a valid e-mail address.
existsProperty must exist (not be undefined).
fnProperty must be a function.
inProperty must be in specified array.
credible
.rule( { state: { in: ['approved', 'pending'] } } );
integerProperty must be an integer.
jsonProperty must be a valid JSON string.
lengthProperty must have a length matching specifications set in options.
| Key | Description |
|---|---|
greaterThan: number | Property must have a length greater than number |
lessThan: number | Property must have a length less than number |
greaterThanOrEqualTo: number | Property must have a length greater than or equal to number |
lessThanOrEqualTo: number | Property must have a length less than or equal to number |
equalTo: number | Property must have a length equal to number |
lowercaseProperty must contain all lowercase letters.
luhnProperty must be a valid credit card number.
matchesProperty must match RegExp object specified in second argument.
naturalProperty must be a positive number.
naturalNonZeroProperty must be a positive number greater than zero.
NaNProperty must not be a number (isNaN(value) returns false).
numberProperty must be a number.
presenceProperty must be defined and not empty.
objectProperty must be an object.
operatorCompare property to a number or another property set in options.
| Key | Description |
|---|---|
greaterThan: numberOrProperty | Property must have a length greater than numberOrProperty |
lessThan: numberOrProperty | Property must have a length less than numberOrProperty |
greaterThanOrEqualTo: numberOrProperty | Property must have a length greater than or equal to numberOrProperty |
lessThanOrEqualTo: numberOrProperty | Property must have a length less than or equal to numberOrProperty |
equalTo: numberOrProperty | Property must have a length equal to numberOrProperty |
regexpProperty must be a regular expression (RegExp object).
stringProperty must be a string.
uppercaseProperty must contain all uppercase letters.
urlProperty must be a valid URL.
FAQs
Unopinionated validation framework for node and the browser.
The npm package credible receives a total of 2 weekly downloads. As such, credible popularity was classified as not popular.
We found that credible demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Product
Socket Fix 2.0 brings targeted CVE remediation, smarter upgrade planning, and broader ecosystem support to help developers get to zero alerts.

Security News
Socket CEO Feross Aboukhadijeh joins Risky Business Weekly to unpack recent npm phishing attacks, their limited impact, and the risks if attackers get smarter.

Product
Socket’s new Tier 1 Reachability filters out up to 80% of irrelevant CVEs, so security teams can focus on the vulnerabilities that matter.