All files index.ts

100% Statements 26/26
100% Branches 2/2
100% Functions 8/8
100% Lines 19/19

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67  1x                           1x         2x 2x     1x 2x 2x   2x 34x 8x 1x 1x     26x 1x 1x         2x               1x                   1x         1x  
import { Express, Request, Response, NextFunction } from 'express'
import methods, { Method } from './methods'
 
interface LooseObject {
  [key: string]: any
}
 
declare global {
  namespace Express {
    interface Response {
      formatter: LooseObject
    }
  }
}
 
const responseEnhancer = () => (
  req: Request,
  res: Response,
  next: NextFunction,
): void => {
  res.formatter = _generateFormatters(res)
  next()
}
 
const _generateFormatters = (res: Response) => {
  const formatter: LooseObject = {}
  let responseBody = {}
 
  methods.map((method: Method) => {
    if (method.isSuccess) {
      formatter[method.name] = (data: any, meta: any) => {
        responseBody = _generateSuccessResponse({ data, meta })
        res.status(parseInt(method.code)).json(responseBody)
      }
    } else {
      formatter[method.name] = (error: any, meta: any) => {
        responseBody = _generateErrorResponse({ error, meta })
        res.status(parseInt(method.code)).json(responseBody)
      }
    }
  })
 
  return formatter
}
 
interface SuccessInput {
  data: any
  meta: any
}
 
const _generateSuccessResponse = ({ data, meta }: SuccessInput) => ({
  data,
  meta,
})
 
interface ErrorsInput {
  error: any
  meta: any
}
 
const _generateErrorResponse = ({ error, meta }: ErrorsInput) => ({
  error,
  meta,
})
 
export { responseEnhancer }