Introduction
A Lean Framework for Enterprise Scalability.
GamanJS adalah framework HTTP ringan dan cepat yang dibangun di atas Bun runtime. Dirancang untuk membangun REST API yang terstruktur dengan arsitektur Controller-Service-Middleware yang bersih dan mudah di-maintain.
β¨ Fitur Utama
Section titled ββ¨ Fitur Utamaβ- β‘ Blazing Fast β Dibangun di atas Bun
Bun.serve()untuk performa maksimal - ποΈ Arsitektur Terstruktur β Pola Controller / Service / Middleware bawaan
- π¦ API Response Fluent β Penanganan response yang bersih dan konsisten via
ctx.send() - π Router Deklaratif β Definisi route yang bersih dengan
composeRouter - π§© Type-Safe DI β Dependency injection sederhana via destrukturisasi dan TypeScript
- π‘οΈ Exception Handling β Global & per-route exception handler
- π― Middleware Priority β Kontrol urutan middleware eksekusi
π Daftar Isi
Section titled βπ Daftar Isiβ| Halaman | Deskripsi |
|---|---|
| Memulai | Instalasi & membuat project baru |
| Bootstrap | defineBootstrap & konfigurasi server |
| Router | Definisi route, grouping, & method |
| Controller | Membuat controller dengan composeController |
| Service | Business logic dengan composeService |
| Middleware | Middleware & priority system |
| Response | Penanganan response fluent dengan ctx.send |
| Context | Request context (ctx) secara detail |
| Exception Handler | Error handling global & per-route |
π Quick Start
Section titled βπ Quick Startβbun create gaman@latestStruktur Project Default
Section titled βStruktur Project DefaultβGamanJS mengadopsi filosofi Feature-Based Modularity. Untuk skalabilitas yang lebih baik, kami merekomendasikan penempatan route, controller, dan service di dalam modul fitur:
src/βββ index.ts # The Orchestrator (Entry Point)βββ modules/ βββ app/ # Modul Utama Aplikasi βββ controllers/ β βββ AppController.ts βββ services/ β βββ AppService.ts βββ middlewares/ β βββ AppMiddleware.ts βββ AppRoutes.ts # Route untuk modul iniEnterprise Project Architecture
Section titled βEnterprise Project ArchitectureβUntuk aplikasi skala produksi yang besar, kamu bisa menambahkan lebih banyak modul fitur:
src/βββ index.ts # The Orchestrator (Entry Point)βββ database/ # Konfigurasi Databaseβββ modules/ # Pusat Logika Aplikasi βββ app/ # Modul Infrastruktur (Global/Shared) β βββ controllers/ # Handler untuk Request Global (Health, Index) β β βββ AppController.ts β βββ services/ # Utility Shared & System Services β β βββ AppService.ts β βββ AppRoutes.ts # Middleware Global & Base Routing β βββ user/ # Modul Fitur (Contoh: User Management) βββ controllers/ # Request Handlers (Login, Register, Profile) β βββ UserController.ts βββ services/ # Business Logic (Auth Logic, User CRUD) β βββ UserService.ts βββ models/ # Data Access Layer (Didukung @gaman/orm) β βββ UserModel.ts βββ UserRoutes.ts # Scoped Routes & Feature Middlewaresrc/index.ts
Section titled βsrc/index.tsβimport { defineBootstrap } from 'gaman';import AppRoutes from './modules/app/AppRoutes';
defineBootstrap(async (app) => { app.mount(AppRoutes); app.mountServer({ http: 3431 });});src/modules/app/AppRoutes.ts
Section titled βsrc/modules/app/AppRoutes.tsβimport { composeRouter } from 'gaman/compose';import { AppService } from './services/AppService';import AppController from './controllers/AppController';
export default composeRouter((r) => { // Inject service r.mountService({ appService: AppService(), });
r.get('/', [AppController, 'HelloWorld']);});src/modules/app/controllers/AppController.ts
Section titled βsrc/modules/app/controllers/AppController.tsβimport { composeController } from 'gaman/compose';import { AppService } from '../services/AppService';
export type Deps = { appService: AppService;};
export default composeController(({ appService }: Deps) => ({ HelloWorld(ctx) { return ctx.send(appService.WelcomeMessage()).ok(); },}));src/modules/app/services/AppService.ts
Section titled βsrc/modules/app/services/AppService.tsβimport { composeService } from 'gaman/compose';import type { RT } from 'gaman/types';
export const AppService = composeService(() => ({ WelcomeMessage() { return 'β€οΈ Welcome to GamanJS'; },}));
export type AppService = RT<typeof AppService>;src/modules/app/middlewares/AppMiddleware.ts
Section titled βsrc/modules/app/middlewares/AppMiddleware.tsβimport { composeMiddleware } from 'gaman/compose';
export default composeMiddleware(async (ctx, next) => { console.log(`[${ctx.request.method}] ${ctx.path}`); return next();});π Lisensi
Section titled βπ LisensiβMIT Β© Angga7Togk