UNPKG

dbaas

Version:

Database as a service. Expose db to REST and GraphQL.

30 lines (29 loc) 2.87 kB
import type { ErrorRequestHandler, RequestHandler } from "express"; import type { RouteParameters } from "express-serve-static-core"; import type { ParsedQs } from "qs"; type VoidReqHandler<Route extends string, ReqBody = unknown, ResBody = unknown, Locals extends Record<string, unknown> = Record<string, unknown>> = RequestHandler<RouteParameters<Route>, ResBody, ReqBody, ParsedQs, Locals>; export type AsyncReqHandler<Route extends string, ReqBody = unknown, ResBody = unknown, Locals extends Record<string, unknown> = Record<string, unknown>> = (...args: Parameters<RequestHandler<RouteParameters<Route>, ResBody, ReqBody, ParsedQs, Locals>>) => Promise<ReturnType<RequestHandler<RouteParameters<Route>, ResBody, ReqBody, ParsedQs, Locals>>>; type ReqHandler<Route extends string, ReqBody = unknown, ResBody = unknown, Locals extends Record<string, unknown> = Record<string, unknown>> = VoidReqHandler<Route, ReqBody, ResBody, Locals> | AsyncReqHandler<Route, ReqBody, ResBody, Locals>; type VoidErrHandler<Route extends string, ReqBody = unknown, ResBody = unknown, Locals extends Record<string, unknown> = Record<string, unknown>> = ErrorRequestHandler<RouteParameters<Route>, ResBody, ReqBody, ParsedQs, Locals>; type AsyncErrHandler<Route extends string, ReqBody = unknown, ResBody = unknown, Locals extends Record<string, unknown> = Record<string, unknown>> = (...args: Parameters<ErrorRequestHandler<RouteParameters<Route>, ResBody, ReqBody, ParsedQs, Locals>>) => Promise<ReturnType<ErrorRequestHandler<RouteParameters<Route>, ResBody, ReqBody, ParsedQs, Locals>>>; type ErrHandler<Route extends string, ReqBody = unknown, ResBody = unknown, Locals extends Record<string, unknown> = Record<string, unknown>> = VoidErrHandler<Route, ReqBody, ResBody, Locals> | AsyncErrHandler<Route, ReqBody, ResBody, Locals>; /** * Handles promises in express app or router middleware. * * ### Usage: * * ```js * router.get( * "/:provider/:override?", * // eslint-disable-next-line @typescript-eslint/no-misused-promises * asyncHandler<"/:provider/:override?">(async (req, res, next) => { * // req.params.provider and req.params.override will be typed here * }), * ) * ``` * @param handler express middleware in async/await * @returns Wrapped express middleware to be added into express app/router */ declare function asyncHandler<Route extends string, ReqBody = unknown, ResBody = unknown, Locals extends Record<string, unknown> = Record<string, unknown>>(handler: ReqHandler<Route, ReqBody, ResBody, Locals>): VoidReqHandler<Route, ReqBody, ResBody, Locals>; declare function asyncHandler<Route extends string, ReqBody = unknown, ResBody = unknown, Locals extends Record<string, unknown> = Record<string, unknown>>(handler: ErrHandler<Route, ReqBody, ResBody, Locals>): VoidErrHandler<Route, ReqBody, ResBody, Locals>; export default asyncHandler;