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

@raminy/ajv-ts-schema

v1.1.0

Published

Simplify AJV Schema Validation with TypeScript

Readme

A TypeScript-first approach to defining JSON Schemas for use with AJV.

Overview

AJV is a powerful JSON Schema validator, but creating schemas directly in JavaScript or TypeScript can be verbose and error-prone. This package, @raminy/ajv-ts-schema, bridges the gap by allowing you to define schemas using TypeScript decorators, making your schemas type-safe and reusable.

Features

  • Type-Safe Validation: Leverages TypeScript for safer, cleaner schema definitions.
  • Decorator-Based: Simplifies schema creation with class and property decorators.
  • AJV Integration: Easily compile and validate schemas using AJV.
  • Schema Reusability: Use defined schemas for validation, request processing, and more.

Installation

npm install @raminy/ajv-ts-schema

Or if you use yarn:

yarn add @raminy/ajv-ts-schema

Enable decorators in your tsconfig.json:

{
  "compilerOptions": {
    "experimentalDecorators": true,
    "emitDecoratorMetadata": true
  }
}

If you are a contributor and wnat to clone and run on your local

Make sure Husky will run properly by running these commands from the root of the project:

chmod +x .husky/pre-commit
chmod +x .husky/_/husky.sh

Then run:

yarn
yarn test # or 'yarn test:ui'

Quick Start

Define your schema using decorators:

import { AjvObject, AjvProperty, AjvSchema } from "@raminy/ajv-ts-schema";

@AjvObject()
class MySchema extends AjvSchema {
  @AjvProperty({ type: "number", required: true })
  foo!: number;

  @AjvProperty({ type: "string", nullable: true })
  bar?: string | null;
}

const schema = MySchema.getSchema();

Validate with AJV:

import Ajv from "ajv/dist/2020";
import addFormats from "ajv-formats";
import { AjvSchema, type AjvJsonSchema } from "@raminy/ajv-ts-schema";

const ajv = new Ajv({ useDefaults: true });
addFormats(ajv);
const validate = ajv.compile(schema); // 'schema' comes from 'MySchema.getSchema()'

const myFunction = (input: any) => {
  if (!validate(input)) {
    console.error(validate.errors);
  }

  // 'fromJson' returns and instance of 'MySchema'
  const typedSchema = AjvSchema.fromJson<MySchema>(MySchema, input);
};

// or you can do this instead

const isMySchema = (input: any): input is AjvJsonSchema<MySchema> => {
  return validate(input);
};

const myFunction = (input: any) => {
  if (!isMySchema(input)) {
    console.error(validate.errors);
  }

  // for the rest of the code 'input' is of type 'AjvJsonSchema<MySchema>'
  // which is a JSON object
};

Key Advantages

  • Code Completion: Enhanced development experience with IDE suggestions.
  • Error Prevention: Catch issues at compile-time rather than runtime.
  • Reusability: Convert validated JSON objects into typed instances using fromJson.

Documentation

Contributing

Contributions are welcome! Please submit issues or pull requests on the GitHub Repository.