///
import * as http from "http";
import { Promisable } from "type-fest";
import { Parameters, Route, RouteNode, Status, Verb } from "./utils/index.js";
export interface ServerIncomingRequest {
url: URL;
source?: string;
method: Verb;
headers: Parameters;
stream(signal?: AbortSignal): AsyncIterable;
}
export interface ServerOutgoingResponse {
status: Status;
headers: Parameters;
stream?(signal?: AbortSignal): AsyncIterable;
}
export interface ServerContext {
request: ServerIncomingRequest;
response: ServerOutgoingResponse;
}
export interface ServerMiddleware {
(this: ServerBase, route: Route | null, request: ServerIncomingRequest, next: (request: ServerIncomingRequest) => Promisable): Promisable;
}
export interface ServerRouteHandler {
(this: ServerBase, route: Route, request: ServerIncomingRequest): Promise;
}
export interface RequestListenerOptions {
onError?: (error: unknown) => void;
}
export interface ServerOperationMetadata {
requestHeaders: string[];
responseHeaders: string[];
}
export interface ServerOptions {
baseUrl: URL;
signal?: AbortSignal;
}
export declare abstract class ServerBase {
protected baseUrl: URL;
private signal?;
protected abstract rootRouteNode: RouteNode;
protected abstract operations: Record>>;
protected abstract operationsMetadata: Record;
private operationHandlers;
constructor(options: ServerOptions);
registerMiddleware(middleware: ServerMiddleware): void;
asRequestListener(options?: RequestListenerOptions): http.RequestListener;
getRouteVerbs(routeKey: string): string[];
getOperationId(routeKey: string, verb: Verb): string | undefined;
getOperationRequestHeaders(operationId: string): string[];
getOperationResponseHeaders(operationId: string): string[];
protected registerOperationHandler(operation: string, handler: ServerRouteHandler): void;
private receive;
private middleware;
}