aboutsummaryrefslogtreecommitdiffstats
path: root/async.ts
diff options
context:
space:
mode:
Diffstat (limited to 'async.ts')
-rw-r--r--async.ts26
1 files changed, 26 insertions, 0 deletions
diff --git a/async.ts b/async.ts
new file mode 100644
index 0000000..c88aceb
--- /dev/null
+++ b/async.ts
@@ -0,0 +1,26 @@
+import type { Request, Response, NextFunction, RequestHandler } from "express";
+import type { ParamsDictionary, Query } from "express-serve-static-core";
+
+export interface AsyncRequestHandler<
+ P = ParamsDictionary,
+ ResBody = any,
+ ReqBody = any,
+ ReqQuery = Query,
+ Locals extends Record<string, any> = Record<string, any>
+> {
+ (
+ req: Request<P, ResBody, ReqBody, ReqQuery, Locals>,
+ res: Response<ResBody, Locals>,
+ next: NextFunction,
+ ): Promise<Response>;
+}
+
+export const wrap = <
+ P = ParamsDictionary,
+ ResBody = any,
+ ReqBody = any,
+ ReqQuery = Query,
+ Locals extends Record<string, any> = Record<string, any>
+>(handler: AsyncRequestHandler<P, ResBody, ReqBody, ReqQuery, Locals>): RequestHandler<P, ResBody, ReqBody, ReqQuery, Locals> => {
+ return (req, res, next) => handler(req, res, next).catch((err) => next(err));
+};