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

@douglaskadlec/json-verify

v1.0.0

Published

A rule-based JSON validation tool for structured datasets.

Readme

JSON Verify

JSON Verify is a rule-based JSON validation tool built for clarity, extensibility, and predictable behavior.

It is designed to validate structured JSON datasets against a set of explicit rules, producing a list of human-readable issues. The engine is intentionally minimal: it loads data, loads rules, runs validation, and reports results. All domain-specific logic lives in the rules themselves.

This project is written in vanilla Node.js (ESM) and favors simplicity and explicit control over abstraction or configuration-heavy frameworks.


Core Concepts

Subjects

A subject is a self-contained validation target. Each subject defines:

  • A single JSON data file (data.json)
  • Zero or more row rules
  • Zero or more collection rules

The included "example" subject is provided only as a reference and is not part of the validation engine.


Rules

Rules are plain JavaScript modules that export a default object with the following shape:

{
  name: string,
  check: function
}

There are two kinds of rules:

Row Rules

  • Run once per record
  • Receive (index, record)
  • Used for validating individual rows

Collection Rules

  • Run once per dataset
  • Receive (allRecords)
  • Used for cross-record validation (e.g. uniqueness)

Rules may be synchronous or asynchronous.


Rule Return Contract

A rule's check function must return:

  • Array — one or more issues
  • null — no issues

Any other return value is considered an error and will stop execution.

Each rule is responsible for:

  • Catching its own errors (if desired)
  • Returning issues, logging warnings, or throwing
  • Deciding how strict or permissive it should be

The engine does not interfere with rule logic.


Issues

Issues are plain objects. The engine does not enforce a schema, but a typical issue looks like:

{
  rule: 'validDuration',
  message: 'Invalid format (expected MM:SS)',
  row: 3,
  id: '010'
}

Issues are collected and displayed at the end of execution.


Project Structure

root/
├── index.js                 # CLI entry point
├── engine/                  # Validation engine (stable)
│   ├── loadData.js
│   ├── loadRules.js
│   ├── verify.js
│   └── report.js
└── subjects/                # User-defined validation targets
    └── <subject>/
        ├── data/
        │   └── data.json
        └── rules/
            ├── row/
            │   └── *.js
            └── collection/
                └── *.js

Running the Tool

From the project root:

npx @douglaskadlec/json-verify <subject>

Exit Codes

  • 0 — validation passed, no issues found
  • 1 — validation failed or execution error occurred

This makes JSON Verify suitable for CI pipelines or scripted workflows.


Error Handling Philosophy

JSON Verify follows a strict and predictable error model:

  • Engine code throws descriptive errors when it cannot proceed
  • Malformed or invalid rules stop execution
  • Rules control their own behavior
  • The CLI is the single failure boundary

All errors ultimately bubble to index.js, where they are logged and cause a non-zero exit.

This keeps responsibility clear and avoids silent failures.


Design Goals

  • Explicit behavior over configuration
  • Clear ownership of logic
  • Minimal abstraction
  • Predictable execution
  • Easy rule authoring

This tool is not meant to be a general-purpose validation framework. It is meant to be understood quickly, extended safely, and trusted in real workflows.


License

MIT