UNPKG

@quiltjs/quilt

Version:

Lightweight, type-safe handler and router abstraction for Node HTTP servers.

59 lines 3.49 kB
/// <reference types="node" resolution-mode="require"/> import { type IncomingMessage, type ServerResponse } from 'node:http'; import type { HttpContext, ServerEngineAdapter } from '../Quilt.js'; import { type Handler, type HandlerOutputs } from '../Handler.js'; export type NodeHttpRequest = IncomingMessage & { params: Record<string, string | undefined>; query: Record<string, string | undefined>; body: unknown; /** * Optional per-request metadata bag. * * This is an escape hatch intended for infrastructure concerns like * logging and tracing (for example, attaching a requestId). Business * data should generally flow through handlers and their dependencies * instead of being stored here. */ locals?: Record<string, unknown>; }; type NodeHttpRouteHandler = (req: NodeHttpRequest, res: ServerResponse) => Promise<void>; /** * Minimal adapter that implements the ServerEngineAdapter interface using * Node's built-in `http` module. * * It provides basic routing with support for: * - Static paths, e.g. `/status` * - Parameterized paths, e.g. `/users/:id/orders/:orderId` * - JSON request bodies (when `content-type` includes `application/json`) */ export declare class NodeHttpEngineAdapter implements ServerEngineAdapter<NodeHttpRequest, ServerResponse> { private routes; private server; private port; get(path: string, handler: NodeHttpRouteHandler): void; post(path: string, handler: NodeHttpRouteHandler): void; put(path: string, handler: NodeHttpRouteHandler): void; patch(path: string, handler: NodeHttpRouteHandler): void; delete(path: string, handler: NodeHttpRouteHandler): void; options(path: string, handler: NodeHttpRouteHandler): void; head(path: string, handler: NodeHttpRouteHandler): void; listen(port: number, callback?: () => void): void; getPort(): number | undefined; close(): Promise<void>; private findRoute; private matchPath; private readBody; } export type NodeHttpContext = HttpContext<NodeHttpRequest, ServerResponse>; export type NodeHttpHandlerContext<Params extends Record<string, string | undefined> = Record<string, string | undefined>, Query extends Record<string, string | undefined> = Record<string, string | undefined>, Body = any> = HttpContext<NodeHttpRequest & { params: Params; query: Query; body: Body; }, ServerResponse>; export type NodeHttpHandler<O = any, Params extends Record<string, string | undefined> = Record<string, string | undefined>, Query extends Record<string, string | undefined> = Record<string, string | undefined>, Body = any, D extends Record<string, Handler<any, NodeHttpHandlerContext<Params, Query, Body>, any>> = Record<string, Handler<any, NodeHttpHandlerContext<Params, Query, Body>, any>>> = Handler<O, NodeHttpHandlerContext<Params, Query, Body>, D>; export declare function createNodeHttpRouteHandler<O = any, Params extends Record<string, string | undefined> = Record<string, string | undefined>, Query extends Record<string, string | undefined> = Record<string, string | undefined>, Body = any, D extends Record<string, Handler<any, NodeHttpContext, any>> = Record<string, Handler<any, NodeHttpContext, any>>>({ execute, dependencies, }: { execute: (ctx: NodeHttpHandlerContext<Params, Query, Body>, deps: HandlerOutputs<D>) => Promise<O> | O; dependencies?: D; }): Handler<O, NodeHttpContext, D>; export {}; //# sourceMappingURL=NodeHttpEngineAdapter.d.ts.map