sequelize-validate-subfields-flow-runtime

1.0.2 • Public • Published

sequelize-validate-subfields-flow-runtime

CircleCI Coverage Status semantic-release Commitizen friendly npm version

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.

Readme

Keywords

Package Sidebar

Install

npm i sequelize-validate-subfields-flow-runtime

Weekly Downloads

11

Version

1.0.2

License

MIT

Unpacked Size

400 kB

Total Files

9

Last publish

Collaborators

  • jedwards1211