Pembuat Modul Baru Otomatis Sekali Ketik
Perintah khusus bagi pengembang untuk membuat halaman baru lengkap (tabel, formulir, izin akses, dan database) hanya dalam hitungan detik.
Perintah khusus bagi pengembang untuk membuat halaman baru lengkap (tabel, formulir, izin akses, dan database) hanya dalam hitungan detik.
Tantangan & Kebutuhan Pengguna
Saat sebuah boilerplate enterprise berkembang dan dikerjakan oleh banyak engineer atau agen AI, konsistensi kode sering kali menurun pada fitur-fitur berikutnya. Ada developer yang lupa memasang `requirePermission` pada Server Action, ada yang menulis style input form sendiri-sendiri, atau menaruh kueri database langsung di dalam folder routing `app/`. Menyalin dan memodifikasi 8–10 file secara manual untuk setiap modul baru juga memakan waktu dan rawan salah ketik.
Standar arsitektur terbaik adalah standar yang paling mudah diikuti karena seluruh kerangka kodenya sudah diotomatisasi sejak baris pertama.
Solusi & Cara Kerja
Script `scripts/make-feature.mjs` (`npm run make:feature <key> "<Label>" [plural_slug] [--with-image]`) men-generate seluruh lapisan modul secara deterministik di dalam `modules/dashboard/<key>/` beserta pembungkus rute tipis di `app/(dashboard)/dashboard/<plural_slug>/page.tsx`. Setiap modul yang dihasilkan otomatis mewarisi pemisahan `server-only` pada `.service.ts` dan `.queries.ts`, pembungkus `handleAction` + `requirePermission` pada `.actions.ts`, integrasi cache TanStack Query pada `.hooks.ts`, serta komponen UI yang memakai `form-styles.ts`, `Modal.tsx`, dan `Pagination.tsx`. Selain membuat file, generator ini juga otomatis menyuntikkan model ke `prisma/schema.prisma`, mendaftarkan feature ke `rbac.constant.ts`, dan menambah menu di `navigation.constant.ts`.
Detail & Hal yang Diperhatikan
- Dukungan Upload Gambar Terlokalisasi (`--with-image`): Jika flag `--with-image` diberikan, generator otomatis menambahkan validasi MIME type, batas ukuran 2 MB, fungsi `save<Feature>Image` di service modul terkait, serta komponen `<Feature>ImageField.tsx` tanpa mengotori folder `common/`.
- Injeksi AST/Regex Aman ke Konstanta & Prisma: Script memeriksa terlebih dahulu apakah model Prisma atau feature key sudah terdaftar sebelum menyisipkan entri baru ke `prisma/schema.prisma`, `common/constants/rbac.constant.ts`, dan `common/constants/navigation.constant.ts`.
- Kepatuhan Penuh pada Nonce CSP & Suspense: Seluruh komponen yang dihasilkan bebas dari atribut `style={{ ... }}` inline dan halaman pembungkus di `app/` otomatis dilengkapi `export const instant = false` beserta boundary `<Suspense fallback={<DashboardPageSkeleton />}>`.