Awesome
gun-schema
Validate Gun data with JSON-Schema.
Validation is done by is-my-json-valid
Getting started
Browser
Download the js bundle from the releases page and add it to the page. As well as attaching the required methods to Gun, it will create a GunSchema global.
Server
Install from NPM
npm install --save gun-schema
Require the module to have it attach itself to GUN
var Gun = require("gun");
require("gun-schema");
Example
// Get a reference to your schema from wherever
// This one was taken from the is-my-json-valid page
var schema = {
required: true,
type: 'object',
properties: {
hello: {
required: true,
type: 'string'
}
}
};
var gun = Gun();
gun.schema("example", schema);
// This is valid so it'll get put into the graph
gun.save("example", {
hello: "World!"
});
// This will throw an error because `hello` was set as `required`
gun.save("example", {
goodbye: "World!"
});
API
After the plugin has been properly initialized, it adds the following methods on gun instances
gun.schema(name, schema, options)
Adds a new type that will be recognized by gun.save()
name
: The unique name for this type of nodeschema
: The JSON Schema definition to use for validating this typeoptions
: Optional argument which gets passed down to is-my-json-valid
gun.schemas(map, options)
Adds a bunch of schemas in one go.
map
: A map ofname
-schema
pairs that get passed on togun.schema()
options
: Optional argument which gets passed down togun.schema()
to configure is-my-json-valid
gun.save(name, value)
Similar to gun.put()
, but uses the schema associated with name
to ensure that value
is valid.
name
: The name of the schema thatvalue
should matchvalue
: The value that should be validated before beingput()
into the DB.
If name
does not point to a schema name that has been registered, then an error will be thrown. If value
doesn't validate against the schema, then an error will be thrown with a errors
property which contains the list of things that are wrong with value
.
GunSchema(gun)
This is what gets exported by the module in CommonJS and what is added as the GunSchema
global in the bundle. It takes a gun instance and adds schema functionality to it.
gun
The gun instance to attach to. Not, this isn't theGun
constructor, but an actual instance orGun.chain
.
Building
You can build the browser bundle yourself by cloning the repo and executing:
`npm install`
`npm install gun`
`npm run bundle`
You will then have a file called bundle.js
which you can embed in a webpage. The building is facilitated by Browserify