Guide - 7TogkID/gaman GitHub Wiki

GamanJS Quick Reference Guide

Overview

This guide provides a quick overview of useful shortcuts and features in GamanJS to enhance productivity and code clarity.


1. Route Shortcuts

GamanJS allows you to return simple responses directly from routes without needing to explicitly use Response objects.

JSON Responses

export default defineBlock({
  routes: {
    "/": (ctx) => {
      return { message: "OK!" };
    },
  },
});

This is equivalent to:

export default defineBlock({
  routes: {
    "/": (ctx) => {
      return Response.json({ message: "OK!" });
    },
  },
});

Text Responses

export default defineBlock({
  routes: {
    "/": (ctx) => {
      return "OK!";
    },
  },
});

This is equivalent to:

export default defineBlock({
  routes: {
    "/": (ctx) => {
      return Response.text("OK!");
    },
  },
});

2. Cookies

GamanJS provides easy access to cookies via the ctx.cookies object.

Setting Cookies

export default defineBlock({
  routes: {
    "/": (ctx) => {
      ctx.cookies.set("userToken", "abc123", { httpOnly: true, maxAge: 3600 });
      return "Cookie set!";
    },
  },
});

Getting Cookies

export default defineBlock({
  routes: {
    "/": (ctx) => {
      const userToken = ctx.cookies.get("userToken");
      return { token: userToken };
    },
  },
});

Checking for Cookies

export default defineBlock({
  routes: {
    "/": (ctx) => {
      if (ctx.cookies.has("userToken")) {
        return "User token exists.";
      } else {
        return "No user token found.";
      }
    },
  },
});

3. Locals

The ctx.locals object is a shared context for storing data during a request lifecycle. Middleware can set values in ctx.locals, which can then be accessed in later middleware or route handlers.

Setting and Accessing Locals

export default defineBlock({
  all: (ctx) => {
    // Set locals in middleware
    ctx.locals.userName = "Angga7Togk";
    ctx.locals.userInfo = { id: 123, name: "Angga7Togk" };
  },
  routes: {
    "/": (ctx) => {
      // Access locals in route handler
      const userName = ctx.locals.userName;
      const userInfo = ctx.locals.userInfo;
      return { name: userName, info: userInfo };
    },
  },
});

Best Practices

  1. Use Shortcuts Wisely: Take advantage of response shortcuts (return {} or return "") for cleaner code.
  2. Centralize Cookie Logic: Manage cookie access and updates in a dedicated middleware for consistency.
  3. Leverage Locals for Shared Data: Use ctx.locals to pass data across middlewares and handlers within the same request lifecycle.

Future Enhancements

Stay updated as more features and utilities are added to simplify GamanJS development. Refer to the official documentation for the latest updates and examples.