lapeeh 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (76) hide show
  1. package/.env.example +14 -0
  2. package/LICENSE +21 -0
  3. package/bin/index.js +934 -0
  4. package/doc/en/ARCHITECTURE_GUIDE.md +79 -0
  5. package/doc/en/CHANGELOG.md +203 -0
  6. package/doc/en/CHEATSHEET.md +90 -0
  7. package/doc/en/CLI.md +111 -0
  8. package/doc/en/CONTRIBUTING.md +119 -0
  9. package/doc/en/DEPLOYMENT.md +171 -0
  10. package/doc/en/FAQ.md +69 -0
  11. package/doc/en/FEATURES.md +99 -0
  12. package/doc/en/GETTING_STARTED.md +84 -0
  13. package/doc/en/INTRODUCTION.md +62 -0
  14. package/doc/en/PACKAGES.md +63 -0
  15. package/doc/en/PERFORMANCE.md +98 -0
  16. package/doc/en/ROADMAP.md +104 -0
  17. package/doc/en/SECURITY.md +95 -0
  18. package/doc/en/STRUCTURE.md +79 -0
  19. package/doc/en/TUTORIAL.md +145 -0
  20. package/doc/id/ARCHITECTURE_GUIDE.md +76 -0
  21. package/doc/id/CHANGELOG.md +203 -0
  22. package/doc/id/CHEATSHEET.md +90 -0
  23. package/doc/id/CLI.md +139 -0
  24. package/doc/id/CONTRIBUTING.md +119 -0
  25. package/doc/id/DEPLOYMENT.md +171 -0
  26. package/doc/id/FAQ.md +69 -0
  27. package/doc/id/FEATURES.md +169 -0
  28. package/doc/id/GETTING_STARTED.md +91 -0
  29. package/doc/id/INTRODUCTION.md +62 -0
  30. package/doc/id/PACKAGES.md +63 -0
  31. package/doc/id/PERFORMANCE.md +100 -0
  32. package/doc/id/ROADMAP.md +107 -0
  33. package/doc/id/SECURITY.md +94 -0
  34. package/doc/id/STRUCTURE.md +79 -0
  35. package/doc/id/TUTORIAL.md +145 -0
  36. package/docker-compose.yml +24 -0
  37. package/ecosystem.config.js +17 -0
  38. package/eslint.config.mjs +26 -0
  39. package/gitignore.template +30 -0
  40. package/lib/bootstrap.ts +210 -0
  41. package/lib/core/realtime.ts +34 -0
  42. package/lib/core/redis.ts +139 -0
  43. package/lib/core/serializer.ts +63 -0
  44. package/lib/core/server.ts +70 -0
  45. package/lib/core/store.ts +116 -0
  46. package/lib/middleware/auth.ts +63 -0
  47. package/lib/middleware/error.ts +50 -0
  48. package/lib/middleware/multipart.ts +13 -0
  49. package/lib/middleware/rateLimit.ts +14 -0
  50. package/lib/middleware/requestLogger.ts +27 -0
  51. package/lib/middleware/visitor.ts +178 -0
  52. package/lib/utils/logger.ts +100 -0
  53. package/lib/utils/pagination.ts +56 -0
  54. package/lib/utils/response.ts +88 -0
  55. package/lib/utils/validator.ts +394 -0
  56. package/nodemon.json +6 -0
  57. package/package.json +126 -0
  58. package/readme.md +357 -0
  59. package/scripts/check-update.js +92 -0
  60. package/scripts/config-clear.js +45 -0
  61. package/scripts/generate-jwt-secret.js +38 -0
  62. package/scripts/init-project.js +84 -0
  63. package/scripts/make-module.js +89 -0
  64. package/scripts/release.js +494 -0
  65. package/scripts/seed-json.js +158 -0
  66. package/scripts/verify-rbac-functional.js +187 -0
  67. package/src/config/app.ts +9 -0
  68. package/src/config/cors.ts +5 -0
  69. package/src/modules/Auth/auth.controller.ts +519 -0
  70. package/src/modules/Rbac/rbac.controller.ts +533 -0
  71. package/src/routes/auth.ts +74 -0
  72. package/src/routes/index.ts +7 -0
  73. package/src/routes/rbac.ts +42 -0
  74. package/storage/logs/.gitkeep +0 -0
  75. package/tsconfig.build.json +12 -0
  76. package/tsconfig.json +30 -0
@@ -0,0 +1,203 @@
1
+ # Dokumentasi Perubahan lapeeh Framework
2
+
3
+ File ini mencatat semua perubahan, pembaruan, dan perbaikan yang dilakukan pada framework lapeeh, diurutkan berdasarkan tanggal.
4
+
5
+ ## [2025-12-30] - Selasa, 30 Desember 2025 - Otomatisasi Blog Cerdas (v3.0.8)
6
+
7
+ ### 🤖 Peningkatan Script Rilis
8
+
9
+ - **Smart Blog Generation**: Script `release.js` kini secara cerdas membaca konten dari `CHANGELOG.md` (baik ID maupun EN) untuk membuat postingan blog rilis. Tidak ada lagi konten generik "Routine maintenance"!
10
+ - **Deteksi Versi Fleksibel**: Peningkatan Regex untuk mendeteksi versi dalam format header changelog yang bervariasi.
11
+ - **Dukungan Dwibahasa**: Memastikan rilis notes tersedia dalam Bahasa Indonesia dan Inggris secara akurat.
12
+
13
+ ## [2025-12-30] - Selasa, 30 Desember 2025 - Dokumentasi & CLI (v3.0.7)
14
+
15
+ ### 📚 Dokumentasi
16
+
17
+ - **Panduan Struktur Proyek**: Pembaruan komprehensif pada `STRUCTURE.md` untuk mencerminkan arsitektur No-ORM dan pemisahan folder Core.
18
+ - **Dokumentasi Scripts**: Penjelasan mendalam untuk script otomatisasi `release.js` dan `make-module.js`.
19
+
20
+ ### 🛠️ Perbaikan CLI
21
+
22
+ - **Cleanup**: Peningkatan perintah `init` dan `upgrade` untuk menangani file konfigurasi lama dengan lebih baik.
23
+
24
+ ## [2025-12-30] - Selasa, 30 Desember 2025 - Major Release v3.0.0 (No-ORM)
25
+
26
+ ### ⚠️ Perubahan Besar (Breaking Changes)
27
+
28
+ - **Penghapusan Prisma ORM**: lapeeh Framework kini **tidak lagi menyertakan ORM bawaan**. Kami memberikan kebebasan penuh kepada pengguna untuk memilih stack database mereka sendiri (TypeORM, Drizzle, dll).
29
+ - **Update CLI**:
30
+ - `init`: Tidak lagi menanyakan konfigurasi database.
31
+ - `make:module`: Tidak lagi membuat file `.prisma`.
32
+ - Penghapusan script `compile-schema.js` dan logika terkait split-schema Prisma.
33
+
34
+ ### 🚀 Fitur & Refactor
35
+
36
+ - **In-Memory Mock Data**: Modul bawaan (Auth, RBAC, Pets) kini menggunakan data dummy in-memory untuk demonstrasi tanpa perlu setup database.
37
+ - **Redis Caching**: Implementasi caching Redis pada Pets controller.
38
+ - **Dokumentasi**: Pembaruan menyeluruh pada dokumentasi untuk mencerminkan filosofi agnostik database.
39
+
40
+ ## ⚠️ Versi Usang (Deprecated Versions)
41
+
42
+ Mulai dari rilis v3.0.0, semua versi sebelumnya (v1.x dan v2.x) dianggap **DEPRECATED** (usang). Tidak akan ada lagi pembaruan fitur atau perbaikan bug untuk versi-versi tersebut kecuali untuk masalah keamanan kritis. Pengguna sangat disarankan untuk bermigrasi ke v3.0.0.
43
+
44
+ ## [2025-12-29] - Senin, 29 Desember 2025 - Perbaikan Bug CLI Init (v2.6.7)
45
+
46
+ ### 🛠️ Perbaikan Bug
47
+
48
+ - **Perintah CLI `init`**:
49
+ - **Prisma Client Generation**: Memperbaiki error `MODULE_NOT_FOUND` untuk `.prisma/client/default` saat seeding dengan memaksa eksekusi `npx prisma generate` sebelum proses seed.
50
+ - **Parsing Nama Project**: Memperbaiki bug kritis di mana menjalankan `npx lapeeh init <nama-project>` akan salah menafsirkan `init` sebagai nama proyek.
51
+ - **Manajemen Dependensi**: Mengembalikan versi ke **Prisma v6** (`^6.0.0`) dan menghapus `prisma.config.ts` untuk mengatasi error `PrismaClientConstructorValidationError` ("engine type client") di lingkungan Windows. Ini mengembalikan konfigurasi standar `schema.prisma` dengan `url = env("DATABASE_URL")`.
52
+ - **Peer Dependencies**: Menghapus `peerDependencies` dari project yang digenerate untuk mencegah konflik package manager.
53
+
54
+ ## [2025-12-29] - Senin, 29 Desember 2025 - Perbaikan CLI Upgrade & Dukungan MongoDB (v2.6.6)
55
+
56
+ ### 🚀 Fitur & Perbaikan
57
+
58
+ - **Peningkatan Perintah CLI `upgrade`**:
59
+
60
+ - Perintah `upgrade` sekarang secara cerdas mendeteksi dan mempertahankan dependensi lokal (`file:`) di `package.json`. Ini sangat penting bagi kontributor framework dan pengujian lokal, memastikan proses upgrade tidak menimpa link lokal dengan versi npm.
61
+ - Pengguna standar tetap akan mendapatkan pembaruan versi npm terbaru secara otomatis.
62
+
63
+ - **Kompatibilitas MongoDB & Prisma**:
64
+
65
+ - **Perbaikan BigInt**: Mengatasi masalah serialisasi di mana ID bertipe `BigInt` (umum di SQL) menyebabkan crash di lingkungan MongoDB. Semua ID di controller `auth` dan `rbac` kini dikonversi menjadi `String` sebelum dikirim sebagai respons.
66
+ - **Schema RBAC**: Menambahkan model RBAC yang hilang (`roles`, `permissions`, `user_roles`, `role_permissions`) ke dalam pipeline generasi `prisma/schema.prisma`. Ini memastikan `npx prisma generate` berjalan lancar tanpa perlu penyesuaian schema manual.
67
+
68
+ - **Flag Inisialisasi CLI**:
69
+ - Menambahkan flag baru pada `npx lapeeh init` untuk setup yang lebih cepat:
70
+ - `--full`: Menyiapkan proyek lengkap dengan data dummy (user/role).
71
+ - `--default` (atau `--y`): Melewati pertanyaan interaktif dan menggunakan pengaturan default (PostgreSQL).
72
+
73
+ ## [2025-12-28] - Minggu, 28 Desember 2025 - Multi-Database & Cleanup (v2.4.10)
74
+
75
+ ### 🚀 Fitur & Perbaikan
76
+
77
+ - **Dukungan Multi-Database (CLI)**:
78
+
79
+ - Menambahkan dukungan penuh untuk inisialisasi proyek dengan **MongoDB** dan **MySQL** selain **PostgreSQL**.
80
+ - Memperbaiki logika penggantian provider database pada template `schema.prisma` agar lebih akurat.
81
+ - Menambahkan argumen CLI `--db-type=mongo|pgsql|mysql` untuk otomatisasi instalasi tanpa interaksi.
82
+ - Mengatasi masalah migrasi pada MongoDB dengan menggunakan `prisma db push` secara kondisional.
83
+
84
+ - **Pembersihan Paket (Cleanup)**:
85
+
86
+ - Menghapus file dan folder development yang tidak diperlukan (`test-local-run`, `init`, `framework.md`, dll) dari paket publik NPM.
87
+ - Menambahkan file `LICENSE` (MIT) secara eksplisit ke dalam paket.
88
+ - Memastikan folder `dist` di-generate ulang dengan bersih saat publikasi.
89
+
90
+ - **Dokumentasi & Website**:
91
+ - Menambahkan struktur dasar dashboard admin pada dokumentasi website.
92
+ - Menambahkan skrip simulasi API telemetri lokal untuk pengembangan website.
93
+
94
+ ## [2025-12-28] - Minggu, 28 Desember 2025 - Perbaikan Upgrade & Testing (v2.4.9)
95
+
96
+ ### 🚀 Fitur & Perbaikan
97
+
98
+ - **Smart Upgrade CLI**:
99
+
100
+ - Memperbarui perintah `npx lapeeh upgrade` agar melakukan sinkronisasi penuh (mirroring).
101
+ - File yang dihapus di versi terbaru framework sekarang akan otomatis dihapus juga dari proyek pengguna, menjaga proyek tetap bersih.
102
+ - Menghapus folder `bin` dari proses sinkronisasi ke proyek pengguna karena folder tersebut dikelola oleh paket.
103
+
104
+ - **Dukungan Testing Komprehensif**:
105
+ - Konfigurasi `tsconfig.json` diperbarui untuk mendukung path alias `@lapeeh/*` di dalam folder `tests`.
106
+ - Folder `tests` sekarang dikecualikan dari proses build produksi (via `tsconfig.build.json`), menghasilkan folder `dist/` yang lebih bersih.
107
+ - Dokumentasi dan konfigurasi Jest telah disesuaikan untuk integrasi yang mulus.
108
+
109
+ ## [2025-12-28] - Minggu, 28 Desember 2025 - Perbaikan Kompatibilitas & Automasi
110
+
111
+ ### 🛠️ Perbaikan Bug (Bug Fixes)
112
+
113
+ - **Linux/Mac Path Compatibility (v2.4.1)**:
114
+
115
+ - Memperbaiki masalah `MODULE_NOT_FOUND` pada sistem operasi Linux dan macOS ketika path proyek mengandung spasi (misalnya: `/Folder Saya/Proyek lapeeh`).
116
+ - Mengubah logika escaping argumen pada `nodemon` di `bin/index.js` agar menggunakan _single quotes_ pada sistem berbasis Unix.
117
+
118
+ - **Auto Prisma Generate (v2.4.2)**:
119
+
120
+ - Memperbaiki error `Cannot find module '.prisma/client/default'` yang sering muncul setelah instalasi bersih.
121
+ - Menambahkan eksekusi otomatis `npx prisma generate` saat menjalankan perintah `npm run dev` dan `npm run build`.
122
+ - Memastikan Prisma Client selalu tersedia sebelum server berjalan, meningkatkan pengalaman pengguna baru.
123
+
124
+ - **PM2 Ecosystem Config (v2.4.4)**:
125
+ - Menambahkan file `ecosystem.config.js` secara otomatis ke dalam proyek baru dan proyek yang di-upgrade.
126
+ - File ini berisi konfigurasi siap pakai untuk menjalankan aplikasi dalam mode **Cluster** (load balancing) di production menggunakan PM2.
127
+ - Memperbarui dokumentasi `doc/DEPLOYMENT.md` dengan instruksi penggunaan PM2 yang baru.
128
+
129
+ ## [2025-12-27] - Code Quality & Standardization Update
130
+
131
+ ### 🚀 Fitur & Standarisasi
132
+
133
+ - **Standardized Import Paths**:
134
+ - Implementasi path alias `@/` untuk import yang lebih bersih (e.g., `import { prisma } from "@/core/database"`).
135
+ - Penghapusan penggunaan relative paths yang dalam (`../../../`).
136
+ - Konfigurasi `tsconfig.json` tanpa `baseUrl` (mengikuti standar TypeScript 6.0+).
137
+ - **Strict Linting & Code Quality**:
138
+ - Implementasi aturan **ESLint** ketat untuk mencegah "Dead Code".
139
+ - Error otomatis untuk variabel, parameter, dan import yang tidak digunakan (`no-unused-vars`).
140
+ - Script `npm run lint` dan `npm run lint:fix` untuk pembersihan kode otomatis.
141
+ - **Fastify-Style Standardization**:
142
+ - Penerapan standar respon cepat (`sendFastSuccess`) di seluruh controller (`AuthController`, `RbacController`, `PetController`).
143
+ - Penggunaan **Schema-based Serialization** untuk performa JSON maksimal.
144
+ - Konversi otomatis `BigInt` ke `string` dalam respon JSON.
145
+
146
+ ## [2025-12-27] - High Performance & Scalability Update
147
+
148
+ ### 🚀 Fitur Baru
149
+
150
+ - **High Performance Serialization (Fastify-Style)**:
151
+ - Implementasi `fast-json-stringify` untuk serialisasi JSON super cepat (2x-3x lebih cepat dari `JSON.stringify`).
152
+ - Helper `sendFastSuccess` di `src/utils/response.ts` untuk mem-bypass overhead Express.
153
+ - Caching schema serializer otomatis di `src/core/serializer.ts`.
154
+ - **Scalability & Clustering**:
155
+ - Dukungan **Load Balancing** dengan Nginx.
156
+ - Dukungan **Redis Clustering** untuk Rate Limiter (`rate-limit-redis`).
157
+ - File konfigurasi `docker-compose.cluster.yml` untuk simulasi cluster lokal (1 Nginx + 2 App Instances + 1 Redis).
158
+ - **Smart Error Handling**:
159
+ - Deteksi otomatis port bentrok (`EADDRINUSE`) saat startup.
160
+ - Memberikan saran command _copy-paste_ untuk mematikan process yang memblokir port (support Windows, Mac, Linux).
161
+ - **SEO Optimization**:
162
+ - Update metadata `package.json` dan `README.md` agar framework lebih mudah ditemukan di Google/NPM.
163
+
164
+ ## [2025-12-27] - Pembaruan Struktur & Validasi
165
+
166
+ ### 🚀 Fitur Baru
167
+
168
+ - **Expressive Validator**:
169
+ - Implementasi utility `Validator` baru di `src/utils/validator.ts` dengan gaya validasi yang lebih ekspresif.
170
+ - Mendukung rule string seperti `required|string|min:3|email`.
171
+ - Penambahan rule `unique` untuk pengecekan database otomatis (Prisma).
172
+ - Penambahan rule `mimes`, `image`, `max` (file size) untuk validasi upload file.
173
+ - Penambahan rule `sometimes` untuk field opsional.
174
+ - **Framework Hardening (Keamanan & Stabilitas)**:
175
+ - **Rate Limiting**: Middleware anti-spam/brute-force di `src/middleware/rateLimit.ts`.
176
+ - **Request Logger**: Pencatatan log request masuk di `src/middleware/requestLogger.ts`.
177
+ - **Health Check**: Endpoint `/` kini mengembalikan status kesehatan server.
178
+ - **Graceful Shutdown**: Penanganan penutupan koneksi Database dan Redis yang aman saat server berhenti (`SIGTERM`/`SIGINT`).
179
+ - **Environment Validation**: Validasi variabel `.env` wajib (seperti `DATABASE_URL`, `JWT_SECRET`) saat startup.
180
+ - **Struktur Folder Baru**:
181
+ - Pemisahan konfigurasi inti ke `src/core/` (`server.ts`, `database.ts`, `redis.ts`, `realtime.ts`) agar folder `src` lebih bersih.
182
+ - Sentralisasi route di `src/routes/index.ts` (WIP).
183
+ - **CLI Improvements**:
184
+ - `npx lapeeh <project-name> --full` kini otomatis menjalankan server dev setelah instalasi selesai, sehingga user bisa langsung melihat hasil tanpa mengetik perintah tambahan.
185
+
186
+ ### 🛠️ Perbaikan & Refactoring
187
+
188
+ - **Controller Refactoring**:
189
+ - `AuthController`: Migrasi ke `Validator` baru, termasuk validasi upload avatar.
190
+ - `PetController`: Migrasi ke `Validator` baru.
191
+ - `RbacController`: Migrasi sebagian ke `Validator` baru.
192
+ - **Pembersihan**:
193
+ - Penghapusan folder `src/schema/` (Zod schema lama) karena sudah digantikan oleh `Validator` utility.
194
+ - Penghapusan file duplikat/lama di root `src/` setelah migrasi ke `src/core/`.
195
+
196
+ ### 📝 Catatan Teknis
197
+
198
+ - **Validator Async**: Method `fails()`, `passes()`, dan `validated()` kini bersifat `async` untuk mendukung pengecekan database (`unique`).
199
+ - **Type Safety**: Semua perubahan telah diverifikasi dengan `npm run typecheck`.
200
+
201
+ ---
202
+
203
+ - Alat CLI untuk pengembangan cepat.
@@ -0,0 +1,90 @@
1
+ # lapeeh Framework Cheatsheet
2
+
3
+ Referensi cepat untuk perintah dan kode yang sering digunakan.
4
+
5
+ ## 💻 CLI Commands
6
+
7
+ | Perintah | Fungsi |
8
+ | :----------------------------------- | :------------------------------------------- |
9
+ | **`npm run dev`** | Menjalankan server development (hot-reload). |
10
+ | **`npm run typecheck`** | Cek error TypeScript (tanpa compile). |
11
+ | **`npm run lint`** | Cek kode kotor/variabel tidak terpakai. |
12
+ | **`npm run lint:fix`** | Perbaiki kode kotor otomatis. |
13
+ | **`npm run make:module <Name>`** | Buat Controller, Route, & Model sekaligus. |
14
+ | **`npm run make:controller <Name>`** | Buat Controller saja. |
15
+ | **`npm run db:seed`** | Isi data dummy. |
16
+
17
+ ## 🛡️ Validator Rules (Simple Syntax)
18
+
19
+ Gunakan di `Validator.make(data, rules)`.
20
+
21
+ | Rule | Deskripsi | Contoh |
22
+ | :----------------- | :---------------------- | :---------------------------------- | -------- |
23
+ | `required` | Wajib ada & tidak null. | `"required"` |
24
+ | `string` | Harus text. | `"required | string"` |
25
+ | `number` | Harus angka. | `"required | number"` |
26
+ | `email` | Format email valid. | `"required | email"` |
27
+ | `min:X` | Min panjang/nilai. | `"min:8"` (pass), `"min:18"` (umur) |
28
+ | `max:X` | Max panjang/nilai. | `"max:255"` |
29
+ | `unique:table,col` | Cek unik di DB. | `"unique:users,email"` |
30
+ | `exists:table,col` | Cek exist di DB. | `"exists:roles,id"` |
31
+ | `image` | File harus gambar. | `"required | image"` |
32
+ | `mimes:types` | File extension. | `"mimes:pdf,docx"` |
33
+
34
+ ## 🔑 Authentication
35
+
36
+ **Middleware di Route:**
37
+
38
+ ```typescript
39
+ import { requireAuth, requireAdmin } from "@/middleware/auth";
40
+
41
+ router.get("/profile", requireAuth, getProfile); // Login User
42
+ router.delete("/user", requireAuth, requireAdmin, del); // Admin Only
43
+ ```
44
+
45
+ **Akses User di Controller:**
46
+
47
+ ```typescript
48
+ // (req as any).user tersedia setelah requireAuth
49
+ const userId = (req as any).user.userId;
50
+ const role = (req as any).user.role;
51
+ ```
52
+
53
+ ## ⚡ Fast Response (Serializer)
54
+
55
+ **1. Schema:**
56
+
57
+ ```typescript
58
+ const schema = {
59
+ type: "object",
60
+ properties: {
61
+ id: { type: "string" },
62
+ name: { type: "string" },
63
+ },
64
+ };
65
+ ```
66
+
67
+ **2. Serializer:**
68
+
69
+ ```typescript
70
+ const serializer = getSerializer("key-name", createResponseSchema(schema));
71
+ ```
72
+
73
+ **3. Send:**
74
+
75
+ ```typescript
76
+ sendFastSuccess(res, 200, serializer, { ...data });
77
+ ```
78
+
79
+ ## 📦 Redis (Cache)
80
+
81
+ ```typescript
82
+ import { redis } from "@lapeeh/core/redis";
83
+
84
+ // Set Cache (Key, Value, Mode, Detik)
85
+ await redis.set("profile:1", JSON.stringify(data), "EX", 3600);
86
+
87
+ // Get Cache
88
+ const cached = await redis.get("profile:1");
89
+ if (cached) return JSON.parse(cached);
90
+ ```
package/doc/id/CLI.md ADDED
@@ -0,0 +1,139 @@
1
+ # CLI Tools & Scripts
2
+
3
+ lapeeh Framework dilengkapi dengan berbagai script CLI untuk mempercepat proses development, mulai dari generate code hingga manajemen database.
4
+
5
+ Semua perintah dijalankan menggunakan `npm run <command>`.
6
+
7
+ > **Info:** Di balik layar, script `npm run` ini memanggil CLI internal framework (`lapeeh`). Anda juga bisa menjalankan perintah ini secara langsung menggunakan `npx lapeeh <command>`.
8
+
9
+ ## Core Commands
10
+
11
+ Perintah utama untuk menjalankan aplikasi:
12
+
13
+ ### 1. Inisialisasi Project (`init`)
14
+
15
+ Membuat project baru dari awal.
16
+
17
+ ```bash
18
+ npx lapeeh@latest init <nama-project> [flags]
19
+ ```
20
+
21
+ **Flag Tersedia:**
22
+
23
+ - `--full`: Inisialisasi dengan setup lengkap (termasuk dummy user, role, permission).
24
+ - `--default`: Inisialisasi dengan konfigurasi default (PostgreSQL) melewati prompt interaktif.
25
+ - `--y`: Alias untuk `--default`.
26
+
27
+ **Contoh:**
28
+
29
+ ```bash
30
+ # Mode Interaktif
31
+ npx lapeeh init my-app
32
+
33
+ # Setup Lengkap (Disarankan untuk belajar)
34
+ npx lapeeh init my-app --full
35
+
36
+ # Setup Cepat (Default Postgres)
37
+ npx lapeeh init my-app --y
38
+ ```
39
+
40
+ ### 2. Upgrade Framework (`upgrade`)
41
+
42
+ Memperbarui framework lapeeh ke versi terbaru di project yang sudah ada.
43
+
44
+ ```bash
45
+ npx lapeeh upgrade
46
+ ```
47
+
48
+ **Fitur:**
49
+
50
+ - Secara otomatis memperbarui dependensi `package.json`.
51
+ - Menyinkronkan file inti framework sambil menjaga kode kustom Anda.
52
+ - **Smart Dependency Handling**: Mempertahankan dependensi `file:` lokal jika Anda mengembangkan framework secara lokal, jika tidak akan mengupdate ke versi npm terbaru.
53
+
54
+ ### 3. Development Server (`dev`)
55
+
56
+ Menjalankan server dalam mode development dengan fitur hot-reload.
57
+
58
+ ```bash
59
+ npm run dev
60
+ # atau
61
+ npx lapeeh dev
62
+ ```
63
+
64
+ ### 2. Production Server (`start`)
65
+
66
+ Menjalankan server dalam mode production (pastikan sudah dibuild).
67
+
68
+ ```bash
69
+ npm run start
70
+ # atau
71
+ npx lapeeh start
72
+ ```
73
+
74
+ ### 3. Build Project (`build`)
75
+
76
+ Mengompilasi kode TypeScript ke JavaScript di folder `dist`.
77
+
78
+ ```bash
79
+ npm run build
80
+ # atau
81
+ npx lapeeh build
82
+ ```
83
+
84
+ ## Code Generators
85
+
86
+ Gunakan perintah ini untuk membuat file boilerplate secara otomatis.
87
+
88
+ ### 1. Membuat Module Lengkap (`make:module`)
89
+
90
+ Membuat Controller dan Route sekaligus.
91
+
92
+ ```bash
93
+ npm run make:module <nama-module>
94
+ ```
95
+
96
+ **Contoh:** `npm run make:module Product`
97
+
98
+ Output:
99
+
100
+ - `src/controllers/productController.ts`
101
+ - `src/routes/product.ts`
102
+
103
+ ### 2. Membuat Controller (`make:controller`)
104
+
105
+ Hanya membuat file controller dengan method CRUD dasar.
106
+
107
+ ```bash
108
+ npm run make:controller <nama-controller>
109
+ ```
110
+
111
+ **Contoh:** `npm run make:controller Order` (Akan membuat `src/controllers/orderController.ts`)
112
+
113
+ ## Code Quality & Utilities
114
+
115
+ ### 1. Linting (`lint`)
116
+
117
+ Memeriksa kode dari error, variabel tidak terpakai, dan gaya penulisan.
118
+
119
+ ```bash
120
+ npm run lint
121
+ ```
122
+
123
+ Gunakan `npm run lint:fix` untuk memperbaiki error otomatis.
124
+
125
+ ### 2. Type Check (`typecheck`)
126
+
127
+ Memeriksa error tipe data TypeScript tanpa melakukan compile.
128
+
129
+ ```bash
130
+ npm run typecheck
131
+ ```
132
+
133
+ ### 3. Generate JWT Secret (`generate:jwt`)
134
+
135
+ Membuat random string aman untuk `JWT_SECRET` di file `.env`.
136
+
137
+ ```bash
138
+ npm run generate:jwt
139
+ ```
@@ -0,0 +1,119 @@
1
+ # Panduan Kontribusi (Contributing Guide)
2
+
3
+ Terima kasih atas ketertarikan Anda untuk berkontribusi pada pengembangan **lapeeh Framework**! 🎉
4
+
5
+ Proyek ini bersifat **Open Source** dan kami sangat menghargai setiap bentuk kontribusi, baik itu perbaikan bug, penambahan fitur, dokumentasi, maupun sekadar laporan error (issue).
6
+
7
+ Dokumen ini akan memandu Anda tentang cara berkontribusi dengan benar dan efisien.
8
+
9
+ ## 🚀 Memulai Kontribusi
10
+
11
+ ### 1. Persiapan Lingkungan (Prerequisites)
12
+
13
+ Pastikan Anda sudah menginstal:
14
+
15
+ - **Node.js** (v18 ke atas)
16
+ - **Git**
17
+ - **Code Editor** (VS Code disarankan, dengan ekstensi ESLint & Prettier)
18
+
19
+ ### 2. Fork & Clone Repository
20
+
21
+ 1. **Fork** repository ini ke akun GitHub Anda (tombol "Fork" di pojok kanan atas).
22
+ 2. **Clone** hasil fork ke komputer lokal Anda:
23
+ ```bash
24
+ git clone https://github.com/USERNAME_ANDA/lapeeh.git
25
+ cd lapeeh
26
+ ```
27
+ 3. **Tambahkan Remote Upstream** (agar bisa sinkron dengan repo asli):
28
+ ```bash
29
+ git remote add upstream https://github.com/robyajo/lapeeh.git
30
+ ```
31
+
32
+ ### 3. Instalasi Dependencies
33
+
34
+ ```bash
35
+ npm install
36
+ ```
37
+
38
+ Jangan lupa jalankan setup awal:
39
+
40
+ ```bash
41
+ cp .env.example .env
42
+ # Konfigurasi .env sesuai kebutuhan (terutama bagian Database)
43
+ ```
44
+
45
+ ## 🛠️ Workflow Pengembangan
46
+
47
+ ### 1. Buat Branch Baru
48
+
49
+ Jangan bekerja langsung di branch `main`. Buat branch baru yang deskriptif:
50
+
51
+ ```bash
52
+ git checkout -b feature/tambah-validasi-email
53
+ # atau
54
+ git checkout -b fix/typo-dokumentasi
55
+ ```
56
+
57
+ ### 2. Standar Koding (Coding Standards)
58
+
59
+ Kami menerapkan aturan yang ketat demi menjaga kualitas kode.
60
+
61
+ - **TypeScript**: Gunakan tipe data eksplisit. Hindari `any` sebisa mungkin.
62
+ - **Linter**: Pastikan tidak ada error ESLint. Variabel tidak terpakai harus dihapus atau diberi prefix `_`.
63
+ - **Formatter**: Kode harus rapi.
64
+
65
+ Sebelum commit, **WAJIB** jalankan perintah ini untuk memastikan kode Anda bersih:
66
+
67
+ ```bash
68
+ npm run typecheck # Cek error TypeScript
69
+ npm run lint # Cek error Linter
70
+ ```
71
+
72
+ ### 3. Commit Message Convention
73
+
74
+ Gunakan format **Conventional Commits** agar history mudah dibaca:
75
+
76
+ - `feat: ...` untuk fitur baru.
77
+ - `fix: ...` untuk perbaikan bug.
78
+ - `docs: ...` untuk perubahan dokumentasi.
79
+ - `chore: ...` untuk perubahan kecil (config, script).
80
+ - `refactor: ...` untuk perbaikan struktur kode tanpa mengubah fitur.
81
+
82
+ **Contoh:**
83
+
84
+ ```text
85
+ feat: add email validation rule to validator
86
+ fix: resolve EADDRINUSE error on windows
87
+ docs: update installation guide
88
+ ```
89
+
90
+ ## 📮 Mengirim Pull Request (PR)
91
+
92
+ 1. **Push** branch Anda ke GitHub:
93
+ ```bash
94
+ git push origin feature/nama-fitur
95
+ ```
96
+ 2. Buka repository fork Anda di GitHub, lalu klik **Compare & pull request**.
97
+ 3. Isi judul dan deskripsi PR dengan jelas:
98
+ - Jelaskan apa yang Anda ubah.
99
+ - Sertakan screenshot (jika ada perubahan visual/output).
100
+ - Referensikan Issue jika ada (contoh: `Closes #123`).
101
+ 4. Tunggu review dari maintainer. Kami mungkin akan meminta revisi kecil.
102
+ 5. Setelah disetujui, kode Anda akan di-merge! 🚀
103
+
104
+ ## 🐛 Melaporkan Bug (Issues)
105
+
106
+ Jika Anda menemukan bug tapi belum bisa memperbaikinya, silakan buat **Issue** baru.
107
+
108
+ - Gunakan judul yang jelas.
109
+ - Jelaskan langkah-langkah untuk mereproduksi bug (Steps to Reproduce).
110
+ - Sertakan log error atau screenshot.
111
+ - Sebutkan versi Node.js dan OS yang digunakan.
112
+
113
+ ## 💡 Ide & Diskusi
114
+
115
+ Punya ide fitur baru? Jangan ragu untuk membukanya di **GitHub Discussions** atau buat Issue dengan label `enhancement` sebelum mulai koding, agar kita bisa mendiskusikan desainnya terlebih dahulu.
116
+
117
+ ---
118
+
119
+ Selamat berkontribusi! Kode Anda akan membantu developer lain membangun aplikasi dengan lebih cepat dan menyenangkan. ❤️