Migraciones
Sistema de migraciones basado en Drizzle Kit, integrado con @iskra-bun/db-kit.
Configuracion
Sección titulada «Configuracion»1. Crear el schema
Sección titulada «1. Crear el schema»import { sqliteTable, text, integer } from 'drizzle-orm/sqlite-core';
export const users = sqliteTable('users', { id: integer('id').primaryKey({ autoIncrement: true }), name: text('name').notNull(), email: text('email').notNull().unique(), createdAt: text('created_at').default('CURRENT_TIMESTAMP'),});
export const posts = sqliteTable('posts', { id: integer('id').primaryKey({ autoIncrement: true }), title: text('title').notNull(), content: text('content'), authorId: integer('author_id').references(() => users.id),});2. Crear drizzle.config.ts
Sección titulada «2. Crear drizzle.config.ts»Usa el helper de @iskra-bun/db-kit:
import { createDrizzleConfig } from '@iskra-bun/db-kit';
export default createDrizzleConfig({ dialect: 'sqlite', dbUrl: process.env.DATABASE_URL || 'app.db', schemaPath: './src/db/schema.ts', migrationsDir: './drizzle',});Comandos
Sección titulada «Comandos»Via CLI
Sección titulada «Via CLI»# Generar migraciones a partir de cambios en el schemabun run packages/db-kit/src/cli.ts generate mi-migracion
# Aplicar migraciones pendientesbun run packages/db-kit/src/cli.ts migrate
# Empujar schema directo a la DB (sin archivos de migracion, ideal para dev)bun run packages/db-kit/src/cli.ts push
# Eliminar un archivo de migracion generado (no toca la base de datos)bun run packages/db-kit/src/cli.ts dropVia bunx (directo con drizzle-kit)
Sección titulada «Via bunx (directo con drizzle-kit)»bunx drizzle-kit generate --name mi-migracionbunx drizzle-kit migratebunx drizzle-kit pushbunx drizzle-kit studio # UI web para explorar la DBProgramatico
Sección titulada «Programatico»Desde tu aplicacion:
import { DbDriver } from '@iskra-bun/db-kit';
const db = new DbDriver();app.register(db);await app.start();
// Aplicar las migraciones pendientes de ./drizzle (generadas con `generate`)// sobre la conexion activa. El primer argumento (schema) no se usa para aplicar.await db.runMigrations(undefined, './drizzle');O usando MigrationHelper directamente:
import { MigrationHelper } from '@iskra-bun/db-kit';
const helper = new MigrationHelper({ dialect: 'sqlite', dbUrl: 'app.db', schemaPath: './src/db/schema.ts', migrationsDir: './drizzle',});
await helper.generate('agregar-tabla-posts');await helper.migrate();Flujo de Trabajo Recomendado
Sección titulada «Flujo de Trabajo Recomendado»- Desarrollo: Usa
pushpara iterar rapido sin generar archivos - Pre-deploy: Genera migraciones con
generatey commiteá los archivos - Deploy: Ejecuta
migrateen el startup de la app o en el CI/CD
Modificar schema.ts → generate → commit → deploy → migrateEstructura de Archivos
Sección titulada «Estructura de Archivos»mi-proyecto/├── src/│ └── db/│ └── schema.ts # Definicion de tablas├── drizzle/│ ├── 0000_initial.sql # Migracion generada│ ├── 0001_add-posts.sql # Otra migracion│ └── meta/ # Metadata de drizzle-kit├── drizzle.config.ts # Config de drizzle-kit└── app.config.ts # Config de la appErrores
Sección titulada «Errores»Si una migracion falla, se tira MigrationError con el detalle del error:
import { MigrationError } from '@iskra-bun/db-kit';
try { await helper.migrate();} catch (err) { if (err instanceof MigrationError) { console.error(err.code); // 'MIGRATION_ERROR' console.error(err.context); // { operation: 'migrate', exitCode: 1, stderr: '...' } }}