Files
directus/api/src/utils/async-handler.ts
rijkvanzanten 801e868554 Fix remaining eslint errors
h/t @paescuj
2021-04-29 15:55:12 -04:00

23 lines
871 B
TypeScript

import { ErrorRequestHandler, RequestHandler } from 'express';
/**
* Handles promises in routes.
*/
function asyncHandler(handler: RequestHandler): RequestHandler;
function asyncHandler(handler: ErrorRequestHandler): ErrorRequestHandler;
function asyncHandler(handler: RequestHandler | ErrorRequestHandler): RequestHandler | ErrorRequestHandler {
if (handler.length === 2 || handler.length === 3) {
const scoped: RequestHandler = (req, res, next) =>
Promise.resolve((handler as RequestHandler)(req, res, next)).catch(next);
return scoped;
} else if (handler.length === 4) {
const scoped: ErrorRequestHandler = (err, req, res, next) =>
Promise.resolve((handler as ErrorRequestHandler)(err, req, res, next)).catch(next);
return scoped;
} else {
throw new Error(`Failed to asyncHandle() function "${handler.name}"`);
}
}
export default asyncHandler;