schm
Composable, parseable and validatable schemas for JavaScript and Node.js
Last updated 2 years ago by diegohaz .
MIT · Repository · Original npm · Tarball · package.json
$ cnpm install schm 
SYNC missed versions from official npm registry.

schm

NPM version

Install

$ npm install --save schm

Usage

const schema = require('schm')

const userSchema = schema({
  name: String,
  age: Number,
  height: Number,
  skills: [RegExp],
})

const user = userSchema.parse({ 
  name: 'Haz', 
  age: '27', 
  height: '1.88', 
  skills: ['code', 'design', 'astronomy'],
})

Output:

{
  name: 'Haz',
  age: 27,
  height: 1.88,
  skills: [/code/i, /design/i, /astronomy/i],
}

The way you declare the schema object is very similar to mongoose Schemas. So, refer to their docs to learn more.

Extending schemas

You can extend the functionality of schemas by composing them. That way, you can add custom parsers and validators or modify the behavior of parse and validate methods themselves. See other packages's source code to learn more. Here's a simple example:

const schema = require('schm')

const userSchema = schema({
  name: String,
  age: {
    type: Number,
    adult: true,
  },
}, previous => previous.merge({
  validators: {
    adult: value => ({
      valid: value >= 18,
      message: 'Not adult',
    }),
  },
}))

userSchema.validate({ name: 'John', age: 17 }) // error

API

Table of Contents

schema

Creates a schema by composing groups of parameters.

Parameters

Examples

const schema = require('schm')

const userSchema = schema({
  id: String,
  name: String,
}, {
  age: Number
})

// nested schema
const teamSchema = schema({
  users: [userSchema],
})

Returns Schema

parse

Parses a schema based on given values.

Parameters

Examples

const { parse } = require('schm')

parse(
  { foo: 1, bar: '1' },
  { foo: String, bar: Number },
)
// -> { foo: '1', bar: 1 }

// can also be used directly from schema
schema({ foo: String, bar: Number }).parse({ foo: 1, bar: '1' })

Returns Object

validate

Validates a schema based on given values.

Parameters

Examples

const schema = require('schm')
const { validate } = schema

const userSchema = schema({
  name: {
    type: String,
    required: true,
  },
  age: {
    type: Number,
    min: [18, 'Too young'],
  }
})

validate({ name: 'John', age: 17 }, userSchema)
  .then((parsedValues) => {
    console.log('Yaay!', parsedValues)
  })
  .catch((errors) => {
    console.log('Oops!', errors)
  })

// Output:
// Oops! [{
//   param: 'age',
//   value: 17,
//   validator: 'min',
//   min: 18,
//   message: 'Too young',
// }]

Returns Promise<Array<ValidationError>>

group

A simple group of parameters. It's used internally when you pass literal objects to schema.

Parameters

  • params Object (optional, default {})

Examples

const schema = require('schm')
const { group } = schema

const userSchema = schema(
  group({
    id: String,
    name: String,
  }),
  group({
    age: Number,
  })
)

Returns SchemaGroup

Types

Schema

Type: {params: Object, parsers: {}, validators: {}, parse: function (values: Object): Object, validate: function (values: Object): Promise<Array<ValidationError>>, merge: function (): Schema}

Properties

SchemaGroup

Type: function (previous: Schema): Schema

ValidationError

Type: {param: string, value: any?, validator: string, message: string?}

Properties

License

MIT © Diego Haz

Current Tags

  • 0.4.1                                ...           latest (2 years ago)

22 Versions

  • 0.4.1                                ...           2 years ago
  • 0.4.0                                ...           2 years ago
  • 0.3.10                                ...           2 years ago
  • 0.3.9                                ...           2 years ago
  • 0.3.7                                ...           2 years ago
  • 0.3.6                                ...           2 years ago
  • 0.3.5                                ...           2 years ago
  • 0.3.4                                ...           2 years ago
  • 0.3.3                                ...           2 years ago
  • 0.3.2                                ...           2 years ago
  • 0.3.1                                ...           2 years ago
  • 0.3.0                                ...           2 years ago
  • 0.2.0                                ...           2 years ago
  • 0.1.1                                ...           2 years ago
  • 0.1.0                                ...           2 years ago
  • 0.0.8                                ...           3 years ago
  • 0.0.7                                ...           3 years ago
  • 0.0.6                                ...           3 years ago
  • 0.0.5                                ...           3 years ago
  • 0.0.4                                ...           3 years ago
  • 0.0.3                                ...           3 years ago
  • 0.0.2                                ...           3 years ago
Maintainers (1)
Downloads
Today 0
This Week 0
This Month 0
Last Day 0
Last Week 1
Last Month 5
Dependencies (1)
Dev Dependencies (10)

Copyright 2014 - 2016 © taobao.org |