Server Core

Context

Deep dive ke dalam object Context (c). 📦

✨ Context (c)

Object Context (biasa disingkat c) adalah abstraksi utama di BlizzardTS. Object ini dibuat baru untuk setiap request dan berisi semua yang kamu butuhkan untuk memproses request dan mengirim response.

Request Helpers (c.req)

Mengakses data dari HTTP Request yang masuk.

Property/MethodDeskripsiTipe Return
c.req.json<T>()Parse body sebagai JSON.Promise<T>
c.req.formData()Parse multipart/form-data atau x-www-form-urlencoded.Promise<FormData>
c.req.text()Parse body sebagai Text.Promise<string>
c.req.paramsObject path parameters.Record<string, string>
c.req.query(key?)Ambil query parameters. Jika key diberikan, return string value.string
c.req.headersObject headers.Headers
c.req.methodHTTP Method.string
c.req.pathURL Path.string
c.req.urlFull URL.string

Contoh Penggunaan

app.post("/users/:id", async (c) => {
  // 1. Ambil Params
  const { id } = c.req.params;
  
  // 2. Ambil Query
  const role = c.req.query("role") || "member";
  
  // 3. Ambil Body (Type-safe!)
  interface UserBody {
    name: string;
    email: string;
  }
  const body = await c.req.json<UserBody>();
  
  // 4. Ambil Form Data (jika upload file)
  // const formData = await c.req.formData();
  
  return c.json({ 
    status: "created",
    id,
    role,
    data: body 
  });
});

c.req.input(key)

Unified input helper. Retrieves data from JSON body, Query parameters, or Route parameters (in that order).

const name = await c.req.input("name");

c.req.file(key)

Retrieves an uploaded file from multipart/form-data requests.

const avatar = await c.req.file("avatar");
if (avatar) {
  console.log(avatar.name, avatar.size);
}

c.session

Access session data (requires session middleware).

// Set data
c.session.set("user_id", 123);

// Get data
const userId = c.session.get("user_id");

// Destroy session
c.session.destroy();

Response Helpers

Method helper untuk membuat HTTP Response dengan cepat.

MethodDeskripsi
c.json(data, status?)Kirim response JSON.
c.text(text, status?)Kirim response plain text.
c.html(html, status?)Kirim response HTML.
c.render(file, props)Render template .blizzard.
c.redirect(url, status?)Redirect ke URL lain.
c.status(code)Set HTTP status code (chainable).

Chaining Status Code

app.get("/not-found", (c) => {
  return c.status(404).json({ error: "Resource hilang!" });
});

Custom Headers (c.res.headers)

Kamu bisa mengatur header response sebelum mengirim response.

app.get("/custom-header", (c) => {
  c.res.headers.set("X-Powered-By", "BlizzardTS");
  c.res.headers.set("Cache-Control", "no-cache");
  
  return c.text("Headers set!");
});

Environment Variables (c.env)

Akses environment variables secara aman dan terstruktur.

app.get("/config", (c) => {
  const dbUrl = c.env.DATABASE_URL;
  const debugMode = c.env.DEBUG === "true";
  
  return c.json({ debug: debugMode });
});

Utilities (c.utils)

---
title: Context
description: Deep dive ke dalam object Context (c). 📦
icon: Box
---

import { Callout } from 'fumadocs-ui/components/callout';

# ✨ Context (`c`)

Object `Context` (biasa disingkat `c`) adalah abstraksi utama di BlizzardTS. Object ini dibuat baru untuk setiap request dan berisi semua yang kamu butuhkan untuk memproses request dan mengirim response.

## Request Helpers (`c.req`)

Mengakses data dari HTTP Request yang masuk.

| Property/Method | Deskripsi | Tipe Return |
|-----------------|-----------|-------------|
| `c.req.json<T>()` | Parse body sebagai JSON. | `Promise<T>` |
| `c.req.formData()` | Parse `multipart/form-data` atau `x-www-form-urlencoded`. | `Promise<FormData>` |
| `c.req.text()` | Parse body sebagai Text. | `Promise<string>` |
| `c.req.params` | Object path parameters. | `Record<string, string>` |
| `c.req.query(key?)` | Ambil query parameters. Jika key diberikan, return string value. | `string` |
| `c.req.headers` | Object headers. | `Headers` |
| `c.req.method` | HTTP Method. | `string` |
| `c.req.path` | URL Path. | `string` |
| `c.req.url` | Full URL. | `string` |

### Contoh Penggunaan

```typescript
app.post("/users/:id", async (c) => {
  // 1. Ambil Params
  const { id } = c.req.params;
  
  // 2. Ambil Query
  const role = c.req.query("role") || "member";
  
  // 3. Ambil Body (Type-safe!)
  interface UserBody {
    name: string;
    email: string;
  }
  const body = await c.req.json<UserBody>();
  
  // 4. Ambil Form Data (jika upload file)
  // const formData = await c.req.formData();
  
  return c.json({ 
    status: "created",
    id,
    role,
    data: body 
  });
});

Response Helpers

Method helper untuk membuat HTTP Response dengan cepat.

MethodDeskripsi
c.json(data, status?)Kirim response JSON.
c.text(text, status?)Kirim response plain text.
c.html(html, status?)Kirim response HTML.
c.render(file, props)Render template .blizzard.
c.redirect(url, status?)Redirect ke URL lain.
c.status(code)Set HTTP status code (chainable).

Chaining Status Code

app.get("/not-found", (c) => {
  return c.status(404).json({ error: "Resource hilang!" });
});

Custom Headers (c.res.headers)

Kamu bisa mengatur header response sebelum mengirim response.

app.get("/custom-header", (c) => {
  c.res.headers.set("X-Powered-By", "BlizzardTS");
  c.res.headers.set("Cache-Control", "no-cache");
  
  return c.text("Headers set!");
});

Environment Variables (c.env)

Akses environment variables secara aman dan terstruktur.

app.get("/config", (c) => {
  const dbUrl = c.env.DATABASE_URL;
  const debugMode = c.env.DEBUG === "true";
  
  return c.json({ debug: debugMode });
});

Utilities (c.utils)

Kumpulan fungsi utilitas bawaan untuk mempercepat development.

  • c.utils.logger: Logging standar BlizzardTS.
  • c.utils.uid(): Generate ID unik (UUID/NanoID).
  • c.utils.wait(ms): Promise based delay.

Tip: Gunakan c.json() untuk API dan c.html() untuk server-side rendering.al agar header Content-Type otomatis diatur dengan benar.