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 🙏

© 2025 – Pkg Stats / Ryan Hefner

@signpostmarv/json-schema-typescript-codegen

v0.7.1

Published

JSON Schema TypeScript CodeGen

Readme

Coverage Status Workflow Status

JSON Schema TypeScript CodeGen

From-scratch rewrite of the JSON Schema-based TypeScript Code Generation code originally implemented for Docs.json.ts

FAQ

Why a rewrite?

I felt I could do better.

  • type discovery, data generation, and import/export management were spread over separate areas of the codebase in the original Docs.json.ts implementation (as a consequence of it being developed iteratively as needed).
  • candidate classes now manage both type conversion and data conversion.
  • import/export management is now largely driven by the $ref type support.
    • Yes, $ref technically lies about it's internals, but attempting to retain the overall interface of the candidate classes while having $ref be fully honest about it's internals gave me a headache.

What's it for?

Taking a JSON Schema with corresponding JSON & generating TypeScript bindings for said data.

Why not use the raw JSON once it's passed validation with ajv?

Docs.json.ts is intended to work with JSON files that contain data that wasn't serialised with JSON. Templated Strings in TypeScript also allow one to be less verbose in how one represents known values, e.g. typing something as that passes the regex ^foo.*(?:bar|baz)$ as more specific than just string but less verbose (i.e. foo${string}${'bar'|'baz'}) than 10s/100s/1000s of exact values.

Install

npm install --save-dev @signpostmarv/json-schema-typescript-codegen

Requirements

  • Node >= 24, for RegExp.escape()
    • this allows the pattern support in the rewrite to be considerably more flexible than the original pattern support in Docs.json.ts.
  • Node >= 23, for running TS files without needing to run a compile step.

Notes

  • ~~Currently distributed as a pure typescript package~~ it would be distributed as a pure typescript package, were it not for nodejs/node#57215
  • Inherently tied to Ajv due to the requirement for their custom keywords implementation.
  • Does not currently have a complete implementation of standard JSON keywords