npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

sapin

v1.0.4

Published

Create Schema validation and transformation using a declarative paradigm

Downloads

14

Readme

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.