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 🙏

© 2026 – Pkg Stats / Ryan Hefner

match-schema

v0.3.0

Published

A package for asserting that an object matches a schema

Readme

match-schema

An npm package for asserting that an object matches a schema

Check for objects matching a schema with ease!

const matcher = require('match-schema')
const {matched, errorKey} = matcher.match(json, schema) // Checks if object json fits schema schema.

if(matched) {             // Matched is a true or false variable which tells whether the object in field json matched the schema provided
  console.log('Matched!');
} else {
  console.log('Failed at', errorKey) // If matched is false, then errorKey will be the property where the problem was. e.g. '.foo.bar'
}

Installation:

npm install match-schema

Syntax:

const matcher = require('match-schema')

const schema = {
  type: 'object', // Makes sure that the object to be matched is an object. MAKE SURE TO DO THIS OR THE SCHEMA WILL ALWAYS MATCH!!!
  
  foo: {          // Makes sure that .foo is a string
    type: 'string'
  },
  bar: {          // Makes sure that .bar is a number
    type: 'number'
  },
  
  thisisanobject: {  // This will make sure that .thisisanobject is an object 
    type: 'object',
    
    aproperty: { // and .thisisanobject.aproperty is a string
      type: 'string'
    }
  },
  
  foobar: {     // Makes sure that .foobar is a number
    type: 'number',
    requires: [  // These are requirements specific to the above type, in this case number.
      'integer'  // Makes sure that .foobar is an integer
    ]
  },
  
  baz: {        // Makes sure that .baz is a nonnegative integer number.
    type: 'number',
    requires: [
      'integer',
      'nonnegative'
    ]
  },
  
  alphabetRestrictedString: {  // Makes sure that alphabetRestrictedString only uses letters from the lowercase alphabet.
    type: 'string',
    alphabet: 'abcdefghijklmnopqrstuvwxyz'
  },
  
  lengthRestrictedString {  // Makes sure that lengthRestrictedString is between 50 and 100 in length.
    type: 'string',
    maxLength 100,
    minLength 50
  },
  
  array: {
    type: 'array',  // Makes sure array is an array
    element: {  // Makes sure every element is a string...
      type: 'string',
      alphabet: 'abcdefghijklmnopqrstuvwxyz'  // ...and only uses letters from the lowercase alphabet.
    }
  }
}

const json = loadUntrustedJsonFileFromSomeFarawayPlace()

const {matched, errorKey} = matcher.match(json, schema) // Checks if object json fits schema schema.

if(matched) {             // Matched is a true or false variable which tells whether the object in field json matched the schema provided
  console.log('Matched!');
} else {
  console.log('Failed at', errorKey) // If matched is false, then errorKey will be the property where the problem was. e.g. '.foo.bar'
}

Available Types and Requirements for Each:

number Possible requirements:

  • integer
  • nonnegative

string No possible requirements, but some additional .alphabet properties outside of .type and .requires:

  • .alphabet - All characters which are legal to exist in the string.
  • .maxLength - Maximum length of the string.
  • .minLength - Minimum length of the string.