https://github.com/greguz/mutent-json-schema
JSON Schema validation plugin for Mutent based on Ajv.
https://github.com/greguz/mutent-json-schema
Last synced: 4 months ago
JSON representation
JSON Schema validation plugin for Mutent based on Ajv.
- Host: GitHub
- URL: https://github.com/greguz/mutent-json-schema
- Owner: greguz
- License: mit
- Created: 2021-10-18T21:18:26.000Z (over 4 years ago)
- Default Branch: master
- Last Pushed: 2024-08-21T07:51:23.000Z (almost 2 years ago)
- Last Synced: 2025-08-31T21:56:14.942Z (9 months ago)
- Language: JavaScript
- Homepage:
- Size: 10.7 KB
- Stars: 0
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# mutent-json-schema
[](https://www.npmjs.com/package/mutent-json-schema)
[](https://standardjs.com)
This plugin for [Mutent](https://github.com/greguz/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).
## Install
```
npm i mutent-json-schema
```
## API
### `mutentJsonSchema(options)`
Returns a new Mutent's Plugin that enforces a JSON Schema to all Entities.
- `options` ``
- `[options.ajv]` `` A customized instance of [Ajv](https://ajv.js.org/). Optional.
- `[options.ajvOptions]` `` Custom [options](https://ajv.js.org/options.html) for the Ajv constructor function. Optional defaults are documented below.
- `options.schema` `<*>` The required JSON Schema to enforce. Schemas generated with [`fluent-json-schema`](https://github.com/fastify/fluent-json-schema) are also supported.
- Returns: ``
### Default Ajv 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
})
```
### JSON Schema errors
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.
## Example
```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 } ]
```
## License
Licensed under [MIT](./LICENSE).