Builds message validators for ssb based on JSON-schema. Specifically designed for handling multiple different versions of a schema for a particular message type
(e.g. when you add new requirements, or change the encoding of a particular field and publish a new version of the schema)
NOTE - this requires schemas which have both type
and version
fields.
Here's an example message that could validate as truthy...
{
type: 'reply',
version: '1.0.0'
}
We inject all the relevant schemas into the validator. Any message passed will be validated based on the type and the version as determined by your schema.
var Validator = require('ssb-schema-validation')
var replySchemas = [
require('./schemas/reply/v1')
require('./schemas/reply/v2')
]
var isReply = Validator(replySchemas)
isReply(msg)
// => true / false
console.log(isReply.errors)
// => some errors
For a live example see e.g. ssb-dark-crystal-schema
Validator(schemas) => fn
Takes argument
schemas
- an array of JSON-schema. These schemas must require messages to have type
and version
fieldsReturns a function validator
based on those schemas.
validator(msg, opts) => Bool
Takes arguments:
msg
- a full ssb message, or the content
field of such a message. Supporting both means you can use this validator to easily validate content either before writing to the database, or for reading from the database.opts
(optional) - an object of form { attachErrors: Boolean }
, settings attachErrors: true mutates the original message by attaching any errors found during in validation. This option is false
by default i.e. disabled.Returns a Boolean: true/ false
Note - if the validator returns false
, then details about why the message didn't pass validation can be found under validator.errors
. This is reset after each message is passed in.