snobject2 v0.2.0
snobject2
A promise-based, lightweight object validator that makes use of jsonpointer to use flat-hierarchy access of data (like XPath).
Usage
Note that the validator freezes the validation specification object using Object.freeze
to avoid unwanted side effects.
createValidator = require('snobject2')
var objectToValidate = {
'foo': {
'bar': {
'xyz': 'foobar'
}
},
'paramX': /^my-regex$/,
'paramY': [
1,2,3
]
};
var myValidator = createValidator({
'/foo/bar/xyz': {
required: true,
type: 'String'
},
'/paramX': {
required: false,
type: 'RegExp'
},
'/paramY': {
type: 'Array',
required: true,
validate: function(value, __) {
if (value.indexOf(2) == -1) {
return Promise.reject(__('The entry `2` is not in your array ?path')); //__ will replace ?path with the corresponding name
}
return Promise.resolve();
}
}
});
Fetching all errors in one shot
If you want to fetch all errors, without stopping the validation at the first one that may be encountered, you can pass a second argument to the validate function, as an object with fetchAll
key, set to true
. See the following example.
snobject = require('snobject2')
const validate = snobject({
'/test': {
'type': 'String',
'required': false,
},
'/test2': {
'type': 'Array',
'required': true
}
})
validate({ 'test': true }, { fetchAll: true })
.then( ( result ) => console.log( result.length ) ) // 2
.catch( ( err ) => console.log( err ) )
Variant type check
If you wish to, you can also have a variant check of your type. Useful if you expect different kind of types for a specific key ( example, an Array or an Object ). In order to use this type check you can use the pipe character ( |
) to separate possible type values. See the following example.
const validate = snobject({
'/test': {
'type': 'Array|Object',
'required': false,
},
'/test2': {
'type': 'Array',
'required': true
}
})
await validate({
'test': {}, // can be an Array or an Object
'test2': []
})
.then( () => t.pass() )
.catch( () => t.fail() )