🪨
damian
CLI

generate

Create TypeScript types from migrations

What it does

Reads all migration files, applies them to an in-memory database, produces:

OutputPurpose
./damian/.generated/tables.tsTypeScript table definitions for queries
./damian/.generated/typings.tsWraps custom typings from ./damian/typings.ts
./damian/.generated/db.sqlSQL dump of current schema (for version control)

tables.ts follows output from damian.config.ts:

  • output.kind: "damian" imports from @damiandb/pg
  • output.kind: "drizzle" imports from drizzle-orm/pg-core

For Drizzle output, output.casing controls generated property names:

  • "preserve" keeps database column names as-is
  • "camel" converts generated property names to camelCase
  • "snake" converts generated property names to snake_case

Default: output: { kind: "damian", casing: "preserve" }


Run

npx damian generate
pnpm damian generate
yarn damian generate

Skip migrations from dump

Use devDumpIgnore in damian.config.ts to exclude specific files from generated db.sql while including them in type generation. Useful for cleaning up schema dumps by omitting seed data:

damian.config.ts
import { config } from 'damian'

export default config({
    driver: 'postgres',
    output: {
        kind: 'damian',
        casing: 'preserve'
    },
    url: process.env.DATABASE_URL,
    devDumpIgnore: ['20240101000000_seed_dev_data.sql']
})

Generate Drizzle tables

damian.config.ts
import { config } from 'damian'

export default config({
    driver: 'postgres',
    output: {
        kind: 'drizzle',
        casing: 'preserve',
        isoTimestamp: true,
    },
    url: process.env.DATABASE_URL
})

On this page