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

typeorm-to-dbml

v0.1.1

Published

Convert a TypeScript project using TypeORM decorators to a DBML diagram.

Downloads

218

Readme

typeorm-to-dbml

Convert a TypeScript project using TypeORM decorators to a DBML diagram.

Installation

npm install
npm build

Usage

npm start <sourceGlob> [outputPath]

Parameters

  • sourceGlob (required): Glob pattern to match TypeORM entity files (e.g., "src/entities/**/*.ts")
  • outputPath (optional): Path to output DBML file (default: ./schema.dbml)

Example

npm start "examples/entities/**/*.ts" "./schema.dbml"

Features

The tool supports the following TypeORM decorators:

  • @Entity: Converts to a DBML table. The table name is derived from the class name or the argument passed to the decorator.

  • @PrimaryColumn: Defines a primary key column.

    • You can specify the column type using the type option (e.g., { type: 'uuid' }).
  • @PrimaryGeneratedColumn: Defines the primary key column.

    • By default, it creates an integer column with [pk, increment].
    • If the 'uuid' strategy is used, it generates a varchar [pk] column.
  • @Column: Defines a regular table column.

    • Type Inference: If no type is specified, it maps TypeScript types to DBML types (e.g., string to varchar).
    • Options:
      • type: Explicitly sets the column type (e.g., { type: 'jsonb' }).
      • nullable: Marks the column as nullable (e.g., { nullable: true }).
      • default: Sets a default value for the column (e.g., { default: true }).
  • @ManyToOne: Extracts the target entity to create a foreign key relationship.

  • @OneToOne: Extracts the target entity to create a one-to-one relationship.

  • @JoinColumn: Used with @ManyToOne to specify the foreign key column name via the name option.

  • @CreatedDateColumn: Creates a timestamp column for creation date.

  • @UpdateDateColumn: Creates a timestamp column for last update date.

  • @DeleteDateColumn: Creates a nullable timestamp column for soft delete date.

Type Mapping (When type is not explicitly specified)

| TypeScript Type | DBML Type | | --------------- | ----------- | | string | varchar | | number | integer | | boolean | boolean | | Date | timestamp | | any | text |

Example Output

Given TypeORM entities like:

@Entity()
export class User {
  @PrimaryGeneratedColumn()
  id: number;

  @Column()
  name: string;

  @Column({ nullable: true })
  bio: string;

  @Column({ type: "boolean", default: true })
  isActive: boolean;

  @Column({ type: "jsonb" })
  customFields: object;
}

@Entity("posts")
export class Post {
  @PrimaryGeneratedColumn()
  id: number;

  @Column()
  title: string;

  @ManyToOne(() => User)
  author: User;
}

The tool generates:

Table user {
  id integer [pk, increment]
  name varchar
  bio varchar [null]
  is_active boolean [default: true]
  custom_fields jsonb
}

Table posts {
  id integer [pk, increment]
  title varchar
}

// relationships
Ref: posts.author_id > user.id

License

See LICENSE file.