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.
- package/.env.example +14 -0
- package/LICENSE +21 -0
- package/bin/index.js +934 -0
- package/doc/en/ARCHITECTURE_GUIDE.md +79 -0
- package/doc/en/CHANGELOG.md +203 -0
- package/doc/en/CHEATSHEET.md +90 -0
- package/doc/en/CLI.md +111 -0
- package/doc/en/CONTRIBUTING.md +119 -0
- package/doc/en/DEPLOYMENT.md +171 -0
- package/doc/en/FAQ.md +69 -0
- package/doc/en/FEATURES.md +99 -0
- package/doc/en/GETTING_STARTED.md +84 -0
- package/doc/en/INTRODUCTION.md +62 -0
- package/doc/en/PACKAGES.md +63 -0
- package/doc/en/PERFORMANCE.md +98 -0
- package/doc/en/ROADMAP.md +104 -0
- package/doc/en/SECURITY.md +95 -0
- package/doc/en/STRUCTURE.md +79 -0
- package/doc/en/TUTORIAL.md +145 -0
- package/doc/id/ARCHITECTURE_GUIDE.md +76 -0
- package/doc/id/CHANGELOG.md +203 -0
- package/doc/id/CHEATSHEET.md +90 -0
- package/doc/id/CLI.md +139 -0
- package/doc/id/CONTRIBUTING.md +119 -0
- package/doc/id/DEPLOYMENT.md +171 -0
- package/doc/id/FAQ.md +69 -0
- package/doc/id/FEATURES.md +169 -0
- package/doc/id/GETTING_STARTED.md +91 -0
- package/doc/id/INTRODUCTION.md +62 -0
- package/doc/id/PACKAGES.md +63 -0
- package/doc/id/PERFORMANCE.md +100 -0
- package/doc/id/ROADMAP.md +107 -0
- package/doc/id/SECURITY.md +94 -0
- package/doc/id/STRUCTURE.md +79 -0
- package/doc/id/TUTORIAL.md +145 -0
- package/docker-compose.yml +24 -0
- package/ecosystem.config.js +17 -0
- package/eslint.config.mjs +26 -0
- package/gitignore.template +30 -0
- package/lib/bootstrap.ts +210 -0
- package/lib/core/realtime.ts +34 -0
- package/lib/core/redis.ts +139 -0
- package/lib/core/serializer.ts +63 -0
- package/lib/core/server.ts +70 -0
- package/lib/core/store.ts +116 -0
- package/lib/middleware/auth.ts +63 -0
- package/lib/middleware/error.ts +50 -0
- package/lib/middleware/multipart.ts +13 -0
- package/lib/middleware/rateLimit.ts +14 -0
- package/lib/middleware/requestLogger.ts +27 -0
- package/lib/middleware/visitor.ts +178 -0
- package/lib/utils/logger.ts +100 -0
- package/lib/utils/pagination.ts +56 -0
- package/lib/utils/response.ts +88 -0
- package/lib/utils/validator.ts +394 -0
- package/nodemon.json +6 -0
- package/package.json +126 -0
- package/readme.md +357 -0
- package/scripts/check-update.js +92 -0
- package/scripts/config-clear.js +45 -0
- package/scripts/generate-jwt-secret.js +38 -0
- package/scripts/init-project.js +84 -0
- package/scripts/make-module.js +89 -0
- package/scripts/release.js +494 -0
- package/scripts/seed-json.js +158 -0
- package/scripts/verify-rbac-functional.js +187 -0
- package/src/config/app.ts +9 -0
- package/src/config/cors.ts +5 -0
- package/src/modules/Auth/auth.controller.ts +519 -0
- package/src/modules/Rbac/rbac.controller.ts +533 -0
- package/src/routes/auth.ts +74 -0
- package/src/routes/index.ts +7 -0
- package/src/routes/rbac.ts +42 -0
- package/storage/logs/.gitkeep +0 -0
- package/tsconfig.build.json +12 -0
- 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. ❤️
|