https://github.com/jcoreio/sequelize-validate-subfields-flow-runtime
use flow-runtime to validate JSON attributes of Sequelize models
https://github.com/jcoreio/sequelize-validate-subfields-flow-runtime
es2015
Last synced: about 1 year ago
JSON representation
use flow-runtime to validate JSON attributes of Sequelize models
- Host: GitHub
- URL: https://github.com/jcoreio/sequelize-validate-subfields-flow-runtime
- Owner: jcoreio
- License: mit
- Created: 2018-01-17T05:19:24.000Z (over 8 years ago)
- Default Branch: master
- Last Pushed: 2023-01-04T01:20:40.000Z (over 3 years ago)
- Last Synced: 2025-03-02T06:04:16.828Z (over 1 year ago)
- Topics: es2015
- Language: JavaScript
- Size: 3.97 MB
- Stars: 0
- Watchers: 4
- Forks: 0
- Open Issues: 22
-
Metadata Files:
- Readme: README.md
- License: LICENSE.md
Awesome Lists containing this project
README
# sequelize-validate-subfields-flow-runtime
[](https://circleci.com/gh/jcoreio/sequelize-validate-subfields-flow-runtime)
[](https://codecov.io/gh/jcoreio/sequelize-validate-subfields-flow-runtime)
[](https://github.com/semantic-release/semantic-release)
[](http://commitizen.github.io/cz-cli/)
[](https://badge.fury.io/js/sequelize-validate-subfields-flow-runtime)
use flow-runtime to validate JSON attributes of Sequelize models
# Installation
```sh
npm install --save flow-runtime sequelize-validate-subfields-flow-runtime
```
# Example
Using `reify` below requires `babel-plugin-flow-runtime` [to be configured](https://codemix.github.io/flow-runtime/#/docs)!
```js
import Sequelize from 'sequelize'
import { reify, validate } from 'flow-runtime'
import type { Type } from 'flow-runtime'
import { validateWithFlowRuntime } from 'sequelize-validate-subfields-flow-runtime'
import { flattenValidationErrors } from 'sequelize-validate-subfields'
import sequelize from './sequelize'
type UserInfo = {
phone: string,
address: {
line1: string,
line2?: string,
postalCode: number,
state: string,
},
}
const UserInfoType = (reify: Type)
const User = Sequelize.define('User', {
username: {
type: Sequelize.STRING,
validate: {
notEmpty: {
msg: 'required',
},
},
},
info: {
type: Sequelize.JSON,
validate: validateWithFlowRuntime(UserInfoType),
},
})
try {
User.create({
username: '',
address: {
line2: 2,
postalCode: '76034',
state: 'TX',
},
})
} catch (error) {
if (error instanceof Sequelize.ValidationError) {
console.error(flattenValidationErrors(error))
} else {
console.error(error)
}
}
```
Output:
```
[
{path: ['username'], message: 'required'},
{path: ['address', 'line1'], message: 'must be a string'},
{path: ['address', 'line2'], message: 'must be a string'},
{path: ['address', 'postalCode'], message: 'must be a number'},
]
```
# API
## `convertValidationErrors(validation, [options])`
### Arguments
#### `validation: Validation`
A `flow-runtime` `Validation` object containing an `errors` array of `[path, message, type]` tuples.
#### `options?: {reduxFormStyle?: boolean}`
If `reduxFormStyle` is true, validation errors on object/array fields will be yielded for the `_error` subpath
under that field.
### Returns: `Iterable`
Yields `{path: Array, message: string}` objects about validation errors, the format defined by
`sequelize-validate-subfields`.
## `validateWithFlowRuntime(typeOrValidator, [options])`
### Arguments
#### `typeOrValidator: Type | ((value: any) => ?Validation)
A reified `flow-runtime` `Type`, or a function taking an attribute value and returning a `flow-runtime` `Validation`
object or `null`. Errors from applying the given function or validating against the given type will be yielded in
`sequelize-validate-subfields` format.
#### `options?: {reduxFormStyle?: boolean}`
If `reduxFormStyle` is true, validation errors on object/array fields will be yielded for the `_error` subpath
under that field.
### Returns: `(value: any) => void`
A Sequelize custom attribute validation function that uses the given `typeOrValidator` to validate attribute values.