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

collimator

v8.1.0

Published

Reflection & Introspection for PostgreSQL Databases

Downloads

50

Readme

Collimator

Reflection & Introspection for PostgreSQL Databases

What is Collimator?

Collimator is a JavaScript library that uses reflection techniques to introspect PostgreSQL databases:

  • Enumerate table names and identify primary keys
  • Generate JSON Schema v4 for a given table
  • Extract table relationship information using foreign key constraints

Design Motivations

Traditionally, programmers have defined their schema by writing model definitions in application code. Some kind of migration tool then transforms this schema into SQL, and applies it against a database.

Collimator allows this pattern to be reversed. The database now becomes the canonical source of your application's schema and relationship metadata.

Installation

Install as a dependency in your application with npm install --save collimator.

Usage

Enumerate table names and primary keys with collimator.tables(db).

Generate JSON Schema with collimator.schema(db, 'tableName').

Extract relationship information with collimator.relationships(db, 'tableName').

The top-level Collimator functions (tables, schema and relationships) accept a pg-promise Database instance as their first argument, and return a promise. For further guidance, please refer to the examples and API Documentation.

Options

collimator.tables() also accepts a second optional options parameter. The following options are supported:

  • looseNumbers - when true, then 'loose number' mode will be enabled. In this mode, numeric column types will be rendered to the JSON Schema document as {oneOf: [{type: 'number'}, {type: 'string', pattern: ...}]}.

    If the column is an integer or similar, then the regular expression ^\d+$ will be used. For decimals, ^[1-9]\d*(\.\d+)?$ will be used.

Changelog

This project adheres to Semantic Versioning. For a list of detailed changes, please refer to CHANGELOG.md.

Contributing

Please see CONTRIBUTING.md.

Prior Art

The approach to schema extraction is inspired by DDL.js. Collimator's implementation is currently not as robust as DDL.js, and only targets PostgreSQL (an intentional design decision, and unlikely to change). However, Collimator supports the extraction of relationship information.

License

collimator is released under the BSD 3-clause “New” License.