BigStarter
Database

Multi-ORM & Generator

Mengganti ORM aktif dengan database:switch, dan meng-generate project baru dengan stack pilihan via database:generate.

Multi-ORM & Generator

BigStarter mendukung Drizzle dan Prisma sebagai ORM resmi — satu aktif per project, dipilih saat pembuatan/konfigurasi project (build-time source selection, bukan runtime branching). Database dan datanya tidak berubah selama engine/koneksi sama.

Mengganti ORM Aktif (database:switch)

npm run database:switch -- --orm=prisma    # atau drizzle | supabase (legacy)
npm run database:switch -- --orm=prisma --dry-run

Yang dilakukan CLI:

  1. Validasi stack (engine/host saat ini + ORM tujuan).
  2. Menulis ulang satu baris import binding di modules/<m>/server/queries/index.ts untuk semua modul terdaftar di catalog.
  3. Memperbarui nilai orm: di config/database.ts.
  4. Menulis state .bigstarter/database.json (stack, modul terikat, timestamp).

CLI hanya menyentuh modul yang terdaftar di tooling/modules/catalog.ts — modul custom milikmu tidak pernah diubah. Beralih ke Prisma membutuhkan npm run db:prisma:generate sekali (setelah perubahan schema).

Untuk Modul Custom

Modul custom cukup mengimplementasikan ORM yang sedang aktif — tidak wajib menyediakan semua variant. Pertahankan pola queries/index.ts satu-baris-binding milikmu sendiri supaya bisa mengikuti pola switch secara manual bila suatu saat diperlukan.

Meng-generate Project Baru (database:generate)

Untuk menjadikan BigStarter sebagai basis project baru dengan stack pilihan:

npm run database:generate -- --orm=drizzle --engine=postgresql --host=supabase \
  --output=../project-baru --modules=tasks,billing

Generator menyusun kontribusi semua modul yang diminta:

  • Runtime — file variant query, contract, dan binding dari source resmi modul.
  • Schema — aset schema per-ORM (mis. billing.prisma untuk Prisma).
  • Migrasi SQL kanonik yang dibutuhkan modul (webhook idempotency, ledger kredit, billing accounts, dsb.).
  • Dependency & scripts — deps runtime/dev didedup, script db:* disesuaikan ORM, .env.example ditambah variabel yang dibutuhkan.

Benturan file antar modul dideteksi sebelum penulisan; implementasi ORM yang tidak dipilih dibersihkan otomatis berdasarkan manifest masing-masing modul.

Varian Supabase (Legacy)

Client Supabase untuk data tetap tersedia sebagai varian legacy ("supabase" di DATABASE_ORMS) demi project lama — tetapi seluruh modul official BigStarter kini berjalan di Drizzle/Prisma, dan Supabase client hanya dipakai untuk Auth, Storage, dan Realtime.

Tooling Migrasi: Pisah Per Konteks

KonteksAlat
Repo distribusi BigStarter (project ini)tooling/supabase/migrations/ + supabase db push
Project hasil generate (Drizzle)drizzle-kit generate / migrate
Project hasil generate (Prisma)prisma migrate dev / deploy

Jangan pernah mencampur dua alat migrasi pada database yang sama.