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

very-simple-schema

v1.0.0-rc1

Published

An alternative SimpleSchema implementation

Downloads

1,710

Readme

very-simple-schema

Bundle size: ~22.5 kB, ~5.5 kB gzipped

Build Status

Like SimpleSchema but even simpler

This package implements an essential subset of SimpleSchema. Unlike the original version it does not provide validation of Mongo selectors, nor does it allow you to define default and auto values. Despite the limited functionality it may still be an interesting alternative for solving problems like:

  • form validation - it integrates nicely with redux-form
  • function parameters validation, e.g. in remote api calls

Instllation

npm install --save very-simple-schema

Basic usage

import { Schema } from 'very-simple-schema';

const Book = new Schema({
  author:    { type: String, nonEmpty: true }, // must be present and non-empty
  title:     { type: String, optional: true, nonEmpty: true }, // can be missing, but if present then must be non-empty
  abstract:  { type: String, optional: true }, // can be missing
  signature: { type: String }, // must be present, if present can be empty
});

Gotchas

Unlkie in SimpleSchema, empty strings are accepted even if a property is required. The reason SimpleSchema treats them differently is that clean method is being called on an object before it's validated. To emulate the original behavior you can create a custom Schema class with different default behavior:

import { createSchema, presetDefault } from 'very-simple-schema';

const Schema = createSchema({
  plugins: [
    ...presetDefault,
  ],
  emptyStringsAreMissingValues: true,
});

Examples

import { Schema } from 'very-simple-schema';

// a number between 0 and 10
new Schema(Number, { min: 0, max: 10 });

// array with at least element
Schema.arrayOf(Schema.any(), { minCount: 1 });

// object that contains anything
Schema.blackbox();
Schema.objectOf(Schema.any());

// either Yes or No
Schema.enum(['Yes', 'No']);

// can be one of the specified types
const Id = Schema.oneOf([String, Number]);

const User = new Schema({
  name: { type: String },
  email: { type: String, regEx: Schema.RegEx.Email, optional: true },
}, {
  // custom typeName can improve some error messages
  typeName: 'User',
});

const Book = new Schema({
  id: { type: Id },
  // type can reference another schema
  author: { type: User },
  // strings can be requested to be non empty
  title: { type: String, nonEmpty: true },
  abstract: { type: String },
  // array can be constructed with [] shortcut, maxCount refers to array lenght, max refers to string length
  chapters: { type: [String], '$.max': 128, maxCount: 10 },
}, { typeName: 'Book' });

const Library = new Schema({
  books: { type: [Book], maxCount: 1000 },
}, {
  typeName: 'Library',
});