🪨
damian
Fundamentals

Quickstart

Install and run your first migration

Install

npm install -D damian && npm install @damiandb/pg
pnpm add -D damian && pnpm add @damiandb/pg
yarn add -D damian && yarn add @damiandb/pg

Configure

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

export default config({
    driver: "postgres",
    root: "./damian",
    env: ".env",
    url: process.env.DATABASE_URL
})

Create migration

npx damian new create_users_table

Edit the file under ./damian/.migrations/:

./damian/.migrations/20240101000000_create_users_table.sql
-- migrate:up
CREATE TABLE users (
    id SERIAL PRIMARY KEY,
    name TEXT NOT NULL,
    email TEXT UNIQUE NOT NULL,
    created_at TIMESTAMP DEFAULT NOW()
)

-- migrate:down
DROP TABLE users

Apply migration

npx damian migrate

Generate types

npx damian generate

Produces tables.ts, typings.ts, and db.sql.


Setup path alias

tsconfig.json
{
  "compilerOptions": {
    "baseUrl": ".",
    "paths": {
      "tables": ["./damian/.generated/tables.ts"]
    }
  }
}
package.json
{
  "imports": {
    "#tables": "./damian/.generated/tables.js"
  }
}

Create database client

db.ts
import { createDb, createSQL } from '@damiandb/pg'

export const db = await createDb({
    connectionString: process.env.DATABASE_URL as string
})

export const sql = createSQL()

Write a query

index.ts
import { db, sql } from './db'
import { UsersTable } from 'tables'

const { rows } = await db.query(
    sql(UsersTable)`SELECT * FROM ${UsersTable} WHERE ${UsersTable.name} = ${"Alice"}`
)

const user = rows[0]

Update gitignore

.gitignore
./damian/.generated

On this page