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

paradise

v1.0.3

Published

A declarative and effective approach to thorough validation.

Readme

Paradise

A declarative and effective approach to thorough validation.

Built-in rules:

AllRule

✓ ignores when no rules are specified
✓ ignores when all rules are ignored
✓ rejects when any rule is rejected
✓ accepts when any rule is accepted and none are rejected

AnyRule

✓ ignores when no rules are specified
✓ ignores when all rules are ignored
✓ rejects when any rule is rejected and none are accepted
✓ accepts when any rule is accepted

RequiredRule

✓ rejects missing values
✓ accepts present values

ArrayRule

✓ ignores missing values
✓ rejects values that are not arrays
✓ rejects when any contained items are rejected
✓ accepts when an array and no contained items are rejected

ObjectRule

✓ ignores missing values
✓ rejects values that are not objects
✓ accepts when value is an object

RecognisedFieldsRule

✓ ignores missing values
✓ ignores values that are not objects
✓ rejects if object contains unspecified fields
✓ accepts if all fields have been specified

MandatoryFieldsRule

✓ ignores missing values
✓ ignores values that are not objects
✓ rejects if any fields are missing
✓ rejects if any fields are rejected
✓ accepts when no fields are rejected

OptionalFieldsRule

✓ ignores missing values
✓ ignores values that are not objects
✓ ignores missing fields
✓ rejects if any fields are rejected
✓ accepts when no fields are rejected

BooleanRule

✓ ignores missing values
✓ rejects non-boolean values
✓ accepts boolean values  

NumberRule

✓ ignores missing values
✓ rejects non-numeric values
✓ accepts numeric values

MultipleRule

✓ ignore missing values
✓ ignores non-numeric values
✓ rejects values that are not a multiple of target
✓ accepts values that are a multiple of target

DateRule

✓ ignores missing values
✓ rejects values that are not dates
✓ accepts values that are dates

StringRule

✓ ignores missing values
✓ rejects non-string values
✓ accepts string values

EmailRule

✓ ignores missing values
✓ ignores non-string values
✓ rejects values that are not valid email addresses
✓ accepts values that are valid email addresses

RegexRule

✓ ignores missing values
✓ ignores non-string values
✓ rejects values that do not satisfy pattern
✓ accepts values that satisfy pattern

CurrencyRule

✓ ignores missing values
✓ ignores non-string values
✓ rejects values that are not valid currency codes
✓ accepts values that are valid currency codes

CountryRule

✓ ignores missing values
✓ ignores non-string values
✓ rejects values that are not country names
✓ accepts values that are valid country names

CountryCodeRule

✓ ignores missing values
✓ ignores non-string values
✓ rejects values that are not valid two digit country codes
✓ accepts values that are valid two digit country codes

ValueRule

✓ ignores missing values
✓ rejects values that are not one of the target values
✓ accepts values that are one of the target values

NotValueRule

✓ ignores missing values
✓ accepts values that are not one of the target values
✓ rejects values that are one of the target values

SizeRule

✓ ignores missing values
✓ ignores values that are neither number, string or array
✓ accepts values that satisfy specified targets

✓ rejects numbers that are not above target.above
✓ rejects numbers that are not minimum target.min
✓ rejects numbers that are not exactly target.exactly
✓ rejects numbers that are not maximum target.max
✓ rejects numbers that are not below target.below

✓ rejects strings whose lengths are not above target.above
✓ rejects strings whose lengths are not minimum target.min
✓ rejects strings whose lengths are not exactly target.exactly
✓ rejects strings whose lengths are not maximum target.max
✓ rejects strings whose lengths are not below target.below

✓ rejects arrays whose lengths are not above target.above
✓ rejects arrays whose lengths are not minimum target.min
✓ rejects arrays whose lengths are not exactly target.exactly
✓ rejects arrays whose lengths are not maximum target.max
✓ rejects arrays whose lengths are not below target.below