@sigiljs/sigil
Version:
TypeScript-first Node.js HTTP framework offering schema-driven routing, modifier-based middleware, plugin extensibility, and flexible response templating
166 lines (165 loc) • 8.01 kB
TypeScript
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<any, any>[]) | undefined;
type THandler<Path extends string, Body extends Record<string, any> | undefined = undefined, Headers extends Record<string, string | undefined> = Record<string, string | undefined>, Query extends Record<string, string | undefined> = Record<string, string | undefined>, M extends Constructor | undefined = undefined> = (request: X<Internal.Requests.ClientRequest<RouteParams<Path>, Body, Headers, Query>, M>, responses: SigilResponsesList, app: Sigil | null) => Internal.Requests.HandlerResponse;
type X<T extends ClientRequest<any>, M extends Constructor> = T & (M extends readonly ModifierConstructor<any, any>[] ? MergePayloads<M> : {});
/**
* 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<Modifier extends Constructor, BodySchema extends Record<string, any> | undefined = undefined, HeadersSchema extends Record<string, string | undefined> = Record<string, string | undefined>, QuerySchema extends Record<string, string | undefined> = Record<string, string | undefined>> extends RouteCore<Modifier> {
/**
* @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<Modifier>);
/**
* 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 extends string>(path: Path, handler: THandler<Path, BodySchema, HeadersSchema, QuerySchema, Modifier>): {
/**
* Adds metadata to the registered route.
* @param payload partial metadata object to merge.
*/
meta(payload?: Partial<Internal.Route.RequestMetadataDescriptor> | undefined): void;
/**
* Shortcut to set the route description metadata.
* @param payload description text.
*/
description(payload: string): void;
};
/** Registers a POST route. */
post<Path extends string>(path: Path, handler: THandler<Path, BodySchema, HeadersSchema, QuerySchema, Modifier>): {
/**
* Adds metadata to the registered route.
* @param payload partial metadata object to merge.
*/
meta(payload?: Partial<Internal.Route.RequestMetadataDescriptor> | undefined): void;
/**
* Shortcut to set the route description metadata.
* @param payload description text.
*/
description(payload: string): void;
};
/** Registers a PUT route. */
put<Path extends string>(path: Path, handler: THandler<Path, BodySchema, HeadersSchema, QuerySchema, Modifier>): {
/**
* Adds metadata to the registered route.
* @param payload partial metadata object to merge.
*/
meta(payload?: Partial<Internal.Route.RequestMetadataDescriptor> | undefined): void;
/**
* Shortcut to set the route description metadata.
* @param payload description text.
*/
description(payload: string): void;
};
/** Registers a PATCH route. */
patch<Path extends string>(path: Path, handler: THandler<Path, BodySchema, HeadersSchema, QuerySchema, Modifier>): {
/**
* Adds metadata to the registered route.
* @param payload partial metadata object to merge.
*/
meta(payload?: Partial<Internal.Route.RequestMetadataDescriptor> | undefined): void;
/**
* Shortcut to set the route description metadata.
* @param payload description text.
*/
description(payload: string): void;
};
/** Registers a DELETE route. */
delete<Path extends string>(path: Path, handler: THandler<Path, BodySchema, HeadersSchema, QuerySchema, Modifier>): {
/**
* Adds metadata to the registered route.
* @param payload partial metadata object to merge.
*/
meta(payload?: Partial<Internal.Route.RequestMetadataDescriptor> | undefined): void;
/**
* Shortcut to set the route description metadata.
* @param payload description text.
*/
description(payload: string): void;
};
/** Registers an OPTIONS route. */
options<Path extends string>(path: Path, handler: THandler<Path, BodySchema, HeadersSchema, QuerySchema, Modifier>): {
/**
* Adds metadata to the registered route.
* @param payload partial metadata object to merge.
*/
meta(payload?: Partial<Internal.Route.RequestMetadataDescriptor> | undefined): void;
/**
* Shortcut to set the route description metadata.
* @param payload description text.
*/
description(payload: string): void;
};
/** Registers a TRACE route. */
trace<Path extends string>(path: Path, handler: THandler<Path, BodySchema, HeadersSchema, QuerySchema, Modifier>): {
/**
* Adds metadata to the registered route.
* @param payload partial metadata object to merge.
*/
meta(payload?: Partial<Internal.Route.RequestMetadataDescriptor> | undefined): void;
/**
* Shortcut to set the route description metadata.
* @param payload description text.
*/
description(payload: string): void;
};
/** Registers a CONNECT route. */
connect<Path extends string>(path: Path, handler: THandler<Path, BodySchema, HeadersSchema, QuerySchema, Modifier>): {
/**
* Adds metadata to the registered route.
* @param payload partial metadata object to merge.
*/
meta(payload?: Partial<Internal.Route.RequestMetadataDescriptor> | undefined): void;
/**
* Shortcut to set the route description metadata.
* @param payload description text.
*/
description(payload: string): void;
};
/** Registers a HEAD route. */
head<Path extends string>(path: Path, handler: THandler<Path, BodySchema, HeadersSchema, QuerySchema, Modifier>): {
/**
* Adds metadata to the registered route.
* @param payload partial metadata object to merge.
*/
meta(payload?: Partial<Internal.Route.RequestMetadataDescriptor> | 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 {};