Lewati ke konten

Static Serve

@gaman/static adalah middleware resmi untuk melayani static files pada framework GamanJS.
Dengan middleware ini Anda bisa menyajikan file seperti HTML, CSS, JS, gambar, font, manifest dan asset lainnya langsung dari folder tertentu (default: public/).

Middleware ini sudah mendukung:

  • Deteksi otomatis MIME type (dengan opsi kustomisasi).
  • Brotli (.br) dan Gzip (.gz) compression berdasarkan Accept-Encoding.
  • ETag untuk caching efisien (mendukung 304 Not Modified).
  • Opsi fallback ke index.html untuk aplikasi SPA.

Terminal window
npm install @gaman/static

Contoh paling sederhana:

index.ts
import { staticServe } from "@gaman/static"
defineBootstrap((app) => {
app.mount(staticServe())
})

Secara default, middleware akan membaca file dari folder public/.

index.ts
import { staticServe } from "@gaman/static"
defineBootstrap((app) => {
app.mount(
staticServe({
path: "assets", // folder asset
defaultDocument: "home.html", // file default jika akses ke folder
fallbackToIndexHTML: true, // fallback SPA
cacheControl: "public, max-age=86400", // cache 1 hari
rewriteRequestPath: (p) => p.replace(/^\/static/, ""), // hapus prefix
mimes: {
".webmanifest": "application/manifest+json"
},
onFound: (filePath, ctx) => {
Log.log("Serve file:", filePath)
},
onNotFound: (filePath, ctx) => {
Log.log("File tidak ditemukan:", filePath)
}
})
)
})
NamaTipeDefaultDeskripsi
pathstring"public"Root folder untuk asset static.
mimesRecord<string, string>{}Mapping kustom MIME type.
defaultDocumentstring"index.html"File default ketika direktori diakses.
rewriteRequestPath(path: string) => stringundefinedFungsi untuk memodifikasi request path.
onFound(path: string, ctx: any) => voidundefinedCallback ketika file ditemukan.
onNotFound(path: string, ctx: any) => voidundefinedCallback ketika file tidak ditemukan.
cacheControlstring"public, max-age=3600"Header Cache-Control.
fallbackToIndexHTMLbooleanfalseFallback ke index.html untuk aplikasi SPA.
priorityPriority enumPriority.MONITORUrutan eksekusi middleware di pipeline.
includesstring[][]Path yang akan diproteksi middleware.
excludesstring[][]Path yang dikecualikan dari middleware.