import { Server } from "."; import expressMod = require("express"); import yup = require("yup"); export declare class RouterBuilder { server: Server; constructor(server: Server); static yup: typeof yup; static express: typeof expressMod; /** * Wraps request handler in try/catch/next */ static createHandler: (fn: expressMod.RequestHandler) => expressMod.RequestHandler; static appendJsonRoutesFromDict>(router: expressMod.Router, setup: (i: typeof RouteDictHelper) => Dict): void; nextMw: expressMod.RequestHandler; /** * creates a router suited for next.js html/react routes; * we add the common middleware, you set up the routes on the callback; * next.js middleware is always added in the end of the stack. */ createHtmlRouter(callback?: ({ router }: { router: expressMod.Router; }) => Promise, options?: { noNextJs?: boolean; }): Promise; /** * creates a router suited for JSON API routes; * we add the common middleware, you set up the routes on the callback; */ createJsonRouter(callback: ({ router }: { router: expressMod.Router; }) => Promise): Promise; /** * creates a router suited for JSON API routes, from a simplified RPC-ish syntax; * usage: ``` var router = builder.rpcishJsonRouter( setup => { return { '/my-route': setup.route( ... ).handler( ... ) } }) ``` */ rpcishJsonRouter>(setup: (i: typeof RouteDictHelper) => Dict): Promise; jsonErrorHandler(err: any, _req: expressMod.Request, res: expressMod.Response, next: expressMod.NextFunction): import("express-serve-static-core").Response | undefined; route: (opts?: Opts) => { handler: (fn: HandlerType) => RouteOpts; }; } export declare type Omit = Pick>; interface EditedRequestHandler { (req: Omit & Replace, resp: expressMod.Response): Promise>; } export interface RouteOpts { method?: string; middleware?: PriorityRequestHandler[]; validation?: SchemaDict; handler?: Function; withTransaction?: Nextpress.Context; } declare type NeverParams = { body: unknown; query: unknown; params: unknown; }; declare type HandlerType = Opts extends { validation: any; } ? EditedRequestHandler> : EditedRequestHandler; export declare const route: (opts?: Opts) => { handler: (fn: HandlerType) => RouteOpts; }; export interface PriorityRequestHandler extends expressMod.RequestHandler { priority?: number; } export declare const validateRequest: (opts: SchemaDict | undefined) => PriorityRequestHandler; export declare const RouteDictHelper: { route: (opts?: Opts) => { handler: (fn: HandlerType) => RouteOpts; }; yup: typeof yup; }; declare type UnwrapSchema = T extends yup.ObjectSchema ? R : unknown; declare type SchemaDict = { query?: yup.ObjectSchema; body?: yup.ObjectSchema; params?: yup.ObjectSchema; }; declare type UnwrapSchemaDict = { query: UnwrapSchema; body: UnwrapSchema; params: UnwrapSchema; }; export {};