or run

npx @tessl/cli init
Log in

Version

Tile

Overview

Evals

Files

docs

advanced-features.mdcore-framework.mderror-handling.mdevent-handling.mdhandlers-middleware.mdindex.mdrequest-processing.mdresponse-handling.mdruntime-adapters.mdweb-utilities.md
tile.json

core-framework.mddocs/

Core Framework

The H3 core framework provides the main application class and plugin system for creating HTTP servers with routing, middleware, and multi-runtime support.

Capabilities

H3 Application Class

The main application class that handles routing, middleware, and request processing.

/**
 * Main H3 application class for creating HTTP servers
 */
class H3 {
  /**
   * Create a new H3 application instance
   * @param config - Optional configuration for the application
   */
  constructor(config?: H3Config);
  
  /**
   * Fetch-compatible request handler
   * @param request - The incoming server request
   * @returns Response or Promise resolving to Response
   */
  fetch(request: ServerRequest): Response | Promise<Response>;
  
  /**
   * Request handler for various input types
   * @param request - Request object, URL, or string
   * @param options - Optional request initialization options
   * @param context - Optional H3 event context
   * @returns Response or Promise resolving to Response
   */
  request(request: ServerRequest | URL | string, options?: RequestInit, context?: H3EventContext): Response | Promise<Response>;
  
  /**
   * Register an H3 plugin
   * @param plugin - Plugin function to register
   * @returns The H3 instance for chaining
   */
  register(plugin: H3Plugin): this;
  
  /**
   * Mount a sub-application or handler at a base path
   * @param base - Base path for mounting
   * @param input - Handler, object with fetch method, or H3 instance
   * @returns The H3 instance for chaining
   */
  mount(base: string, input: FetchHandler | { fetch: FetchHandler } | H3): this;
  
  /**
   * Register global middleware
   * @param handler - Middleware function
   * @param opts - Optional middleware options
   * @returns The H3 instance for chaining
   */
  use(handler: Middleware, opts?: MiddlewareOptions): this;
  
  /**
   * Register route-specific middleware
   * @param route - Route pattern
   * @param handler - Middleware function
   * @param opts - Optional middleware options
   * @returns The H3 instance for chaining
   */
  use(route: string, handler: Middleware, opts?: MiddlewareOptions): this;
  
  /**
   * Register a route handler for specific HTTP method
   * @param method - HTTP method
   * @param route - Route pattern
   * @param handler - Event handler function
   * @param opts - Optional route options
   * @returns The H3 instance for chaining
   */
  on(method: HTTPMethod, route: string, handler: EventHandler, opts?: RouteOptions): this;
  
  /**
   * Register a handler for all HTTP methods
   * @param route - Route pattern
   * @param handler - Event handler function
   * @param opts - Optional route options
   * @returns The H3 instance for chaining
   */
  all(route: string, handler: EventHandler, opts?: RouteOptions): this;
  
  /**
   * Register a GET route handler
   * @param route - Route pattern
   * @param handler - Event handler function
   * @param opts - Optional route options
   * @returns The H3 instance for chaining
   */
  get(route: string, handler: EventHandler, opts?: RouteOptions): this;
  
  /**
   * Register a POST route handler
   * @param route - Route pattern
   * @param handler - Event handler function
   * @param opts - Optional route options
   * @returns The H3 instance for chaining
   */
  post(route: string, handler: EventHandler, opts?: RouteOptions): this;
  
  /**
   * Register a PUT route handler
   * @param route - Route pattern
   * @param handler - Event handler function
   * @param opts - Optional route options
   * @returns The H3 instance for chaining
   */
  put(route: string, handler: EventHandler, opts?: RouteOptions): this;
  
  /**
   * Register a DELETE route handler
   * @param route - Route pattern
   * @param handler - Event handler function
   * @param opts - Optional route options
   * @returns The H3 instance for chaining
   */
  delete(route: string, handler: EventHandler, opts?: RouteOptions): this;
  
  /**
   * Register a PATCH route handler
   * @param route - Route pattern
   * @param handler - Event handler function
   * @param opts - Optional route options
   * @returns The H3 instance for chaining
   */
  patch(route: string, handler: EventHandler, opts?: RouteOptions): this;
  
  /**
   * Register a HEAD route handler
   * @param route - Route pattern
   * @param handler - Event handler function
   * @param opts - Optional route options
   * @returns The H3 instance for chaining
   */
  head(route: string, handler: EventHandler, opts?: RouteOptions): this;
  
  /**
   * Register an OPTIONS route handler
   * @param route - Route pattern
   * @param handler - Event handler function
   * @param opts - Optional route options
   * @returns The H3 instance for chaining
   */
  options(route: string, handler: EventHandler, opts?: RouteOptions): this;
}

Usage Examples:

import { H3, defineHandler } from "h3";

// Create application
const app = new H3({
  debug: true,
  onError: (error, event) => {
    console.error(`Error on ${event.url}:`, error);
  }
});

// Add routes
app.get("/", defineHandler(() => ({ message: "Hello World" })));
app.post("/users", defineHandler(async (event) => {
  const body = await readBody(event);
  return { user: body, id: Math.random() };
}));

// Add middleware
app.use("/api", defineHandler((event) => {
  console.log(`API request: ${event.method} ${event.url}`);
}));

// Mount sub-app
const apiApp = new H3();
apiApp.get("/status", () => ({ status: "OK" }));
app.mount("/api/v1", apiApp);

H3Core Base Class

Base implementation without routing functionality.

/**
 * Base H3 implementation without routing
 */
class H3Core {
  constructor(config?: H3Config);
  fetch(request: ServerRequest): Response | Promise<Response>;
  register(plugin: H3Plugin): this;
}

Plugin System

Create reusable plugins for H3 applications.

/**
 * Define a reusable H3 plugin
 * @param def - Plugin definition function
 * @returns Plugin function that can be registered
 */
function definePlugin<T>(def: (h3: H3, options: T) => void): H3Plugin;

Usage Examples:

import { definePlugin } from "h3";

// Create a logging plugin
const loggingPlugin = definePlugin<{ prefix?: string }>((h3, options) => {
  const prefix = options?.prefix || "LOG";
  
  h3.use((event) => {
    console.log(`${prefix}: ${event.method} ${event.url}`);
  });
});

// Create a CORS plugin
const corsPlugin = definePlugin<{ origin: string }>((h3, options) => {
  h3.use((event) => {
    event.res.setHeader("Access-Control-Allow-Origin", options.origin);
  });
});

// Use plugins
const app = new H3();
app.register(loggingPlugin({ prefix: "API" }));
app.register(corsPlugin({ origin: "*" }));

Routing Utilities

Define routes as plugins for modular organization.

/**
 * Define a route as a plugin
 * @param def - Route definition object
 * @returns H3 plugin that registers the route
 */
function defineRoute(def: RouteDefinition): H3Plugin;

interface RouteDefinition {
  method?: HTTPMethod | HTTPMethod[];
  path: string;
  handler: EventHandler;
  meta?: H3RouteMeta;
}

Usage Examples:

import { defineRoute } from "h3";

// Define route as plugin
const userRoutes = defineRoute({
  method: "GET",
  path: "/users/:id",
  handler: defineHandler(async (event) => {
    const id = getRouterParam(event, "id");
    return { user: { id, name: "John Doe" } };
  }),
  meta: { auth: true }
});

// Register route plugin
app.register(userRoutes);

Configuration

H3Config Interface

Configuration options for H3 applications.

interface H3Config {
  /**
   * Enable debug mode for additional logging
   */
  debug?: boolean;
  
  /**
   * Global error handler
   * @param error - The HTTP error that occurred
   * @param event - The H3 event context
   * @returns Optional response or void
   */
  onError?: (error: HTTPError, event: H3Event) => MaybePromise<void | unknown>;
  
  /**
   * Global request middleware
   * @param event - The H3 event context
   */
  onRequest?: (event: H3Event) => MaybePromise<void>;
  
  /**
   * Global response middleware
   * @param response - The response object
   * @param event - The H3 event context
   * @returns Modified response or void
   */
  onResponse?: (response: Response, event: H3Event) => MaybePromise<void | Response>;
}

Route and Middleware Options

interface RouteOptions {
  /**
   * Route metadata for additional information
   */
  meta?: H3RouteMeta;
}

interface MiddlewareOptions {
  /**
   * Middleware metadata
   */
  meta?: H3RouteMeta;
}

interface H3RouteMeta {
  [key: string]: any;
}

Types

Core Type Definitions

type HTTPMethod = 'GET' | 'POST' | 'PUT' | 'DELETE' | 'PATCH' | 'HEAD' | 'OPTIONS' | 'CONNECT' | 'TRACE';

type H3Plugin = (h3: H3, options?: any) => void;

type FetchHandler = (request: ServerRequest, context?: H3EventContext) => Response | Promise<Response>;

interface H3Route {
  path: string;
  method: HTTPMethod;
  handler: EventHandler;
  meta?: H3RouteMeta;
}

type PreparedResponse = Response | BodyInit | null | undefined;