import { eachSeries } from 'async' ; import { NextFunction , Request , RequestHandler , Response } from 'express' ; import { ValidationChain } from 'express-validator' ; import { ExpressPromiseHandler } from '@server/types/express-handler' ; import { retryTransactionWrapper } from '../helpers/database-utils' ; export type RequestPromiseHandler = ValidationChain | ExpressPromiseHandler ; function asyncMiddleware ( fun ) { return ( req , res , next ) => { if ( Array . isArray ( fun ) === true ) { return eachSeries ( fun as RequestHandler [ ] , ( f , cb ) => { Promise . resolve ( f ( req , res , err => cb ( err ) ) ) . catch ( err => next ( err ) ) ; } , next ) ; } return Promise . resolve ( ( fun as RequestHandler ) ( req , res , next ) ) . catch ( err => next ( err ) ) ; } ; } function asyncRetryTransactionMiddleware ( fun ) { return ( req , res , next ) => { return Promise . resolve ( retryTransactionWrapper ( fun , req , res , next ) ) . catch ( err => next ( err ) ) ; } ; } export { asyncMiddleware , asyncRetryTransactionMiddleware } ;