JSON Schema validation plugin for Mutent based on Ajv.
npm install mutent-json-schema

This plugin for Mutent will inject a set of Hooks that will validate that all Entities match with the desired JSON Schema.
The validation will be performed when any Entity is loaded (onEntity hook) and before any Adapter's write op (beforeCreate and beforeUpdate hooks).
```
npm i mutent-json-schema
Returns a new Mutent's Plugin that enforces a JSON Schema to all Entities.
- options
Those are the default options used to create the internal Ajv instance.
`javascript`
new Ajv({
allErrors: process.env.NODE_ENV !== 'production',
coerceTypes: true,
removeAdditional: true,
useDefaults: true,
...pluginOptions.ajvOptions
})
When an Entity with an invalid schema is detected, an error will be thrown. The error is an instance of MutentError with the "EMUT_INVALID_ENTITY" code.
You can access the raw Ajv-generated errors, and the Entity that has generated those errors, from the .info.errors and .info.data properties respectively.
`javascript
import { MutentError, Store } from 'mutent'
import ArrayAdapter from 'mutent-array'
import mutentJsonSchema from 'mutent-json-schema'
const store = new Store({
adapter: new ArrayAdapter(),
plugins: [
mutentJsonSchema({
schema: {
type: 'object',
additionalProperties: false,
properties: {
id: {
type: 'string'
},
value: {
type: 'integer'
}
},
required: ['id', 'value']
}
})
]
})
try {
await store.create({ value: 7 }).unwrap()
} catch (err) {
// Handle mutent-json-schema error
if (err instanceof MutentError && err.code === 'EMUT_INVALID_ENTITY') {
// Invalid data: { value: 7 }
console.error('Invalid data:', err.info.data)
// Schema errors: [
// {
// instancePath: '',
// schemaPath: '#/required',
// keyword: 'required',
// params: { missingProperty: 'id' },
// message: "must have required property 'id'"
// }
// ]
console.error('Schema errors:', err.info.errors)
} else {
throw err
}
}
await store.create({ id: 'my_entity', value: 42 }).unwrap()
console.log(store.raw) // [ { id: 'my_entity', value: 42 } ]
``
Licensed under MIT.