file-routing-expressjs
Version:
A dependency-free, flexible, system-based file routing for Express.
58 lines (55 loc) • 1.98 kB
text/typescript
import { Express, RequestHandler, ErrorRequestHandler } from 'express';
type ExpressMethod = "get" | "post" | "delete" | "put" | "patch" | "all";
type PartialExpressMethodRecord<T> = Partial<Record<ExpressMethod, T>>;
type FileBasedRoutingOptions = {
app: Express;
target?: string;
};
type RouteConfig = Partial<{
pattern: RegExp | string | PartialExpressMethodRecord<RegExp | string>;
}>;
type DirRouteConfig = Partial<{
pattern: RegExp | string;
}>;
type FilesHandlerConfig = {
route: string;
name: string;
basename: string;
target: string;
isParam: boolean;
};
type DirsHandlerConfig = FilesHandlerConfig & {
parent: string;
};
type MapRoutesParams = {
target: string;
route: string;
parentConfig?: {
route: string;
};
};
type RouterRequestHandlersMap = Record<ExpressMethod, RequestHandler | undefined>;
type ErrorHandler = ErrorRequestHandler;
type RouterDirMiddleware = RequestHandler | RequestHandler[];
type RouterFileMiddleware = RouterDirMiddleware | PartialExpressMethodRecord<RouterDirMiddleware>;
type RouterFileError = ErrorHandler | PartialExpressMethodRecord<ErrorHandler | undefined> | undefined;
type DirRouteContext = {
config: RouteConfig;
middlewares: RequestHandler[];
errorHandler: ErrorHandler | undefined;
};
type FileRouteContext = {
config: RouteConfig;
middlewares: RouterFileMiddleware;
errorHandler: RouterFileError;
};
type RouterEndpoint = {
depth: number;
name: string;
endpoint: string;
method: string;
middlewares: string[];
errorHandler: string;
};
type RouterEndpoints = RouterEndpoint[];
export type { DirRouteConfig, DirRouteContext, DirsHandlerConfig, ErrorHandler, ExpressMethod, FileBasedRoutingOptions, FileRouteContext, FilesHandlerConfig, MapRoutesParams, PartialExpressMethodRecord, RouteConfig, RouterDirMiddleware, RouterEndpoint, RouterEndpoints, RouterFileError, RouterFileMiddleware, RouterRequestHandlersMap };