Miss any of our Open RFC calls?Watch the recordings here! »

sapin

1.0.4 • Public • Published

Build Status js-standard-style Coverage Status Maintainability

sapin

Sapin is a library that allows to easily create a Schema using a declarative style. This schema can then :

  • be be validated with the validate function, will store each error encountered in a new object at the same path as the property that had the error. While it can be used to easily validate forms connected with redux-form, it can validate any structure.
  • be transformed with the transform function, to convert each of the object's property to the right type.

Features

  • Provides functions for most basic field validations (no date validations, use your own formats and libs)
  • Support validation of inner structures
  • Supports the validation of attributes that are arrays of values, array of objects, dictionary of objects, dictionary of values
  • Validations on an object property can be applied to its members, on the whole object or on both
  • Allows to easily add your own custom validator functions

Example

// Load validators functions
import {Schema, validate, required, integer, maxLength, string, arrayOf, isPositive} from 'sapin'
import {isPhone, requiresAtLeastOne} from 'myCustomValidators'
 
// create a Schema
const userSchema = new Schema({
  firstName: string(required),
  lastName: string(required),
  age: integer(isPositive),
  phones: arrayOf(string(isPhone), requiresAtLeastOne),
  address: {
    civicNumber: string(required),
    streetName: string([required, maxLength(50)]),
    city: string
  }
})
 
// validation function that is called when validating your form or object
export const validateUserForm = (values, props) => {
  return validate(values, userSchema, props)
}
 
...
 
// test
const user = {
  firstName: 'Joe',   // pass
                      // no lastName provided
  age: 5.5,           // not an integer
  phones: ['555', '555-555-5555']  // first phone is invalid
  address: {
    civicNumber: '344',
    streetName: '65th street',
    city: 'Québec'
  }
}
 
const error = validateUserForm(user)
 
console.log(error)

Output is :

{
  lastName: {error: 'sapin.required', params: {value: null}},
  age: {error: 'sapin.invalidInteger', params: {value: 5.5}},
  phones {
    '0'{ error: 'myErrors.invalidPhoneNumber', params: {value: '555'}}
  }
}

Documentation

Documentation can be found in the wiki

Installation

Using npm:

$ npm i --save sapin

sapin is released under the MIT license

Why sapin?

While there are many libraries out there that allow to achieve the same goal, Sapin allows to describe complex structures in a really simple manner. You can use the schema to validate and/or transform the data before sending it to a server or database.

Install

npm i sapin

DownloadsWeekly Downloads

19

Version

1.0.4

License

MIT

Unpacked Size

111 kB

Total Files

34

Last publish

Collaborators

  • avatar