Files
relspecgo/pkg/writers/typeorm
Hein ee88c07989
All checks were successful
CI / Test (1.24) (push) Successful in -26m1s
CI / Test (1.25) (push) Successful in -25m59s
CI / Build (push) Successful in -29m11s
CI / Lint (push) Successful in -28m32s
Integration Tests / Integration Tests (push) Successful in -29m16s
Release / Build and Release (push) Successful in -26m36s
style(report, writers, graphql, prisma, typeorm): replace sb.WriteString with fmt.Fprintf for consistency
2026-02-28 17:08:12 +02:00
..
2025-12-28 10:34:20 +02:00

TypeORM Writer

Generates TypeScript files with TypeORM entity definitions from database schema information.

Overview

The TypeORM Writer converts RelSpec's internal database model representation into TypeScript source code with TypeORM entity classes, including proper decorators, relationships, and column configurations.

Features

  • Generates TypeORM-compatible TypeScript entities
  • Creates proper decorator usage (@Entity, @Column, etc.)
  • Adds relationship decorators (@OneToMany, @ManyToOne, @JoinColumn)
  • Handles column types and options
  • Supports constraints and indexes
  • Outputs formatted TypeScript code

Usage

Basic Example

package main

import (
    "git.warky.dev/wdevs/relspecgo/pkg/models"
    "git.warky.dev/wdevs/relspecgo/pkg/writers"
    "git.warky.dev/wdevs/relspecgo/pkg/writers/typeorm"
)

func main() {
    options := &writers.WriterOptions{
        OutputPath: "entities/",
    }

    writer := typeorm.NewWriter(options)
    err := writer.WriteDatabase(db)
    if err != nil {
        panic(err)
    }
}

CLI Examples

# Generate TypeORM entities from PostgreSQL database
relspec --input pgsql \
  --conn "postgres://localhost/mydb" \
  --output typeorm \
  --out-file entities/

# Convert GORM models to TypeORM
relspec --input gorm --in-file models.go --output typeorm --out-file src/entities/

# Convert JSON to TypeORM entities
relspec --input json --in-file schema.json --output typeorm --out-file entities/

Generated Code Example

import {
  Entity,
  PrimaryGeneratedColumn,
  Column,
  CreateDateColumn,
  OneToMany,
  ManyToOne,
  JoinColumn,
  Index,
} from 'typeorm';
import { Post } from './Post';

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

  @Column({ type: 'varchar', length: 50, unique: true })
  @Index()
  username: string;

  @Column({ type: 'varchar', length: 100 })
  email: string;

  @Column({ type: 'text', nullable: true })
  bio: string | null;

  @CreateDateColumn({ name: 'created_at' })
  createdAt: Date;

  @OneToMany(() => Post, (post) => post.user)
  posts: Post[];
}

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

  @Column({ name: 'user_id' })
  userId: number;

  @Column({ type: 'varchar', length: 200 })
  title: string;

  @Column({ type: 'text', nullable: true })
  content: string | null;

  @ManyToOne(() => User, (user) => user.posts, { onDelete: 'CASCADE' })
  @JoinColumn({ name: 'user_id' })
  user: User;
}

Supported TypeORM Decorators

Entity Decorators

  • @Entity() - Define entity/table
  • @PrimaryGeneratedColumn() - Auto-increment primary key
  • @PrimaryColumn() - Primary key
  • @Column() - Column definition
  • @CreateDateColumn() - Auto-set creation timestamp
  • @UpdateDateColumn() - Auto-update timestamp

Relationship Decorators

  • @OneToMany() - One-to-many relationship
  • @ManyToOne() - Many-to-one relationship
  • @JoinColumn() - Foreign key column specification

Constraint Decorators

  • @Index() - Create index
  • @Unique() - Unique constraint

Column Options

@Column({
  type: 'varchar',      // Column type
  length: 255,          // Length for varchar/char
  nullable: true,       // Allow NULL
  unique: true,         // Unique constraint
  default: 'value',     // Default value
  name: 'column_name',  // Database column name
})

Type Mapping

SQL Type TypeScript Type TypeORM Type
bigint number 'bigint'
integer number 'int'
varchar string 'varchar'
text string 'text'
boolean boolean 'boolean'
timestamp Date 'timestamp'
json object 'json'
uuid string 'uuid'

Notes

  • Entity class names are PascalCase
  • One file per entity (named after the entity)
  • Relationship imports are auto-generated
  • Nullable columns use TypeScript union with null
  • Foreign key actions (CASCADE, etc.) are included
  • Schema names can be specified in @Entity() decorator