///
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;
query: Record;
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;
};
type NodeHttpRouteHandler = (req: NodeHttpRequest, res: ServerResponse) => Promise;
/**
* 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 {
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;
private findRoute;
private matchPath;
private readBody;
}
export type NodeHttpContext = HttpContext;
export type NodeHttpHandlerContext = Record, Query extends Record = Record, Body = any> = HttpContext;
export type NodeHttpHandler = Record, Query extends Record = Record, Body = any, D extends Record, any>> = Record, any>>> = Handler, D>;
export declare function createNodeHttpRouteHandler = Record, Query extends Record = Record, Body = any, D extends Record> = Record>>({ execute, dependencies, }: {
execute: (ctx: NodeHttpHandlerContext, deps: HandlerOutputs) => Promise | O;
dependencies?: D;
}): Handler;
export {};
//# sourceMappingURL=NodeHttpEngineAdapter.d.ts.map