sequelize-validate-subfields-flow-runtime
v1.0.2
Published
use flow-runtime to validate JSON attributes of Sequelize models
Downloads
7
Readme
sequelize-validate-subfields-flow-runtime
use flow-runtime to validate JSON attributes of Sequelize models
Installation
npm install --save flow-runtime sequelize-validate-subfields-flow-runtime
Example
Using reify
below requires babel-plugin-flow-runtime
to be configured!
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<UserInfo>)
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<FieldValidation>
Yields {path: Array<string | number>, 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.