@ssbc/ssb-schema-validation

1.0.1 • Public • Published

ssb-schema-validation

Returns a function that takes an ssb message and will check first against version, search for a matching schema, then validate against the correct schema and return truthy or falsey with an errorset.

Here's how to use it:

Organise your schemas in version directories, and draw each set together with an index.js that returns an object which contains all the schemas stores by their name as key e.g. 'post'

Ensure our message declares a verision, else we'll get an error.

{
  type: 'post',
  version: '1.0.0',
  body: 'tra-lala-lala-lala'
}

And export a schema for each version.

Example project structure could look like this...

├── index.js
├── package.json
├── package-lock.json
├── README.md
├── schemas
│   ├── index.js
│   ├── v1
│   │   ├── index.js
│   │   ├── post.js
│   │   └── version.js
│   └── v2
│       ├── index.js
│       ├── post.js
│       └── version.js
└── validators
    ├── isPost.js
    └── index.js

Make sure we export the relevant schemas in index.js.

// schemas/v1/index.js

module.exports = {
  post: require('./post')
}

// schemas/v2/index.js

module.exports = {
  post: require('./post')
}

Draw all schemas together with their versions and export from schemas/index.js

// schemas/index.js
module.exports = {
  "1.0.0": require('./v1'),
  "2.0.0": require('./v2')
}

Then create a new validator which passes the schemas to the validator along with the name of the schema. This will return your validator that takes an ssb message and options, and returns a boolean.

// isPost.js
const schemas = require('./schemas')
const validate = require('ssb-schema-validation')

// Returns a function that takes an obj and opts.
module.exports = validate(schemas).with('post')

The result being when used...

const isPost = require('./isPost')
var valid = isPost(msg, { attachErrors: true })
if (valid) {
  render(msg)
} else {
  render(msg.errors)
}

Readme

Keywords

none

Package Sidebar

Install

npm i @ssbc/ssb-schema-validation

Weekly Downloads

0

Version

1.0.1

License

ISC

Unpacked Size

4.74 kB

Total Files

4

Last publish

Collaborators

  • powersource
  • arj03
  • staltz
  • mixmix
  • cel