import { Pathfinder, RouteParams } from '@sigiljs/pathfinder'; import { ClientRequest } from '../index'; import { default as SigilResponsesList } from '../sigil/misc/sigil-responses-list'; import { default as Sigil } from '../sigil/sigil'; import { Internal } from '../types'; import { MergePayloads, ModifierConstructor } from './modifier/modifier'; import { RouteOptions } from './route'; import { default as RouteCore } from './route-core'; type Constructor = (readonly ModifierConstructor[]) | undefined; type NodeSupportedCustomHTTPMethods = "ACL" | "BIND" | "CHECKOUT" | "COPY" | "LINK" | "LOCK" | "M-SEARCH" | "MERGE" | "MKACTIVITY" | "MKCALENDAR" | "MKCOL" | "MOVE" | "NOTIFY" | "PROPFIND" | "PROPPATCH" | "PURGE" | "REBIND" | "REPORT" | "SEARCH" | "SUBSCRIBE" | "UNBIND" | "UNLINK" | "UNLOCK" | "UNSUBSCRIBE"; type THandler | undefined = undefined, Headers extends Record = Record, Query extends Record = Record, M extends Constructor | undefined = undefined> = (request: X, Body, Headers, Query>, M>, responses: SigilResponsesList, app: Sigil | null) => Internal.Requests.HandlerResponse; type X, M extends Constructor> = T & (M extends readonly ModifierConstructor[] ? MergePayloads : {}); /** * Extends RouteCore to provide methods for registering HTTP routes * with optional validation schemas. Automatically derives request types * based on configured schemas. * * @template Modifier tuple of modifier constructors applied to this route. * @template BodySchema shape of the request body schema, if provided. * @template HeadersSchema shape of the request headers schema, if provided. * @template QuerySchema shape of the request query schema, if provided. */ export default class RouteRequests | undefined = undefined, HeadersSchema extends Record = Record, QuerySchema extends Record = Record> extends RouteCore { /** * @param modifiers array of modifier constructors to apply. * @param pathfinder the underlying pathfinder router instance. * @param $options optional router configuration options. */ constructor(modifiers: Modifier, pathfinder: Pathfinder, $options?: RouteOptions); /** * Registers a GET route. * Not available if a body schema was previously applied. * * @param path URL path for the route. * @param handler request handler function. * @returns chainable methods for adding metadata (meta, description). */ get(path: Path, handler: THandler): { /** * Adds metadata to the registered route. * @param payload partial metadata object to merge. */ meta(payload?: Partial | undefined): void; /** * Shortcut to set the route description metadata. * @param payload description text. */ description(payload: string): void; }; /** Registers a POST route. */ post(path: Path, handler: THandler): { /** * Adds metadata to the registered route. * @param payload partial metadata object to merge. */ meta(payload?: Partial | undefined): void; /** * Shortcut to set the route description metadata. * @param payload description text. */ description(payload: string): void; }; /** Registers a PUT route. */ put(path: Path, handler: THandler): { /** * Adds metadata to the registered route. * @param payload partial metadata object to merge. */ meta(payload?: Partial | undefined): void; /** * Shortcut to set the route description metadata. * @param payload description text. */ description(payload: string): void; }; /** Registers a PATCH route. */ patch(path: Path, handler: THandler): { /** * Adds metadata to the registered route. * @param payload partial metadata object to merge. */ meta(payload?: Partial | undefined): void; /** * Shortcut to set the route description metadata. * @param payload description text. */ description(payload: string): void; }; /** Registers a DELETE route. */ delete(path: Path, handler: THandler): { /** * Adds metadata to the registered route. * @param payload partial metadata object to merge. */ meta(payload?: Partial | undefined): void; /** * Shortcut to set the route description metadata. * @param payload description text. */ description(payload: string): void; }; /** Registers an OPTIONS route. */ options(path: Path, handler: THandler): { /** * Adds metadata to the registered route. * @param payload partial metadata object to merge. */ meta(payload?: Partial | undefined): void; /** * Shortcut to set the route description metadata. * @param payload description text. */ description(payload: string): void; }; /** Registers a TRACE route. */ trace(path: Path, handler: THandler): { /** * Adds metadata to the registered route. * @param payload partial metadata object to merge. */ meta(payload?: Partial | undefined): void; /** * Shortcut to set the route description metadata. * @param payload description text. */ description(payload: string): void; }; /** Registers a CONNECT route. */ connect(path: Path, handler: THandler): { /** * Adds metadata to the registered route. * @param payload partial metadata object to merge. */ meta(payload?: Partial | undefined): void; /** * Shortcut to set the route description metadata. * @param payload description text. */ description(payload: string): void; }; /** Registers a HEAD route. */ head(path: Path, handler: THandler): { /** * Adds metadata to the registered route. * @param payload partial metadata object to merge. */ meta(payload?: Partial | undefined): void; /** * Shortcut to set the route description metadata. * @param payload description text. */ description(payload: string): void; }; /** Registers a custom HTTP method route. */ custom(method: NodeSupportedCustomHTTPMethods, path: Path, handler: THandler): { /** * Adds metadata to the registered route. * @param payload partial metadata object to merge. */ meta(payload?: Partial | undefined): void; /** * Shortcut to set the route description metadata. * @param payload description text. */ description(payload: string): void; }; /** * Internal method to register a route with pathfinder. * Validates incoming requests against schemas if provided. * * @param method HTTP method for the route. * @param path URL path for the route. * @param handler request handler function. * @returns chainable methods for adding metadata (meta, description). * @private */ private $request; } export {};