import app from '@adonisjs/core/services/app' import { HttpContext, ExceptionHandler } from '@adonisjs/core/http' import { Exception } from '@adonisjs/core/exceptions' export default class HttpExceptionHandler extends ExceptionHandler { /** * In debug mode, the exception handler will display verbose errors * with pretty printed stack traces. */ protected debug = !app.inProduction /** * The method is used for handling errors and returning * response to the client */ async handle(error: unknown, ctx: HttpContext) { if (error instanceof Exception && error.code === 'E_FILE_NAME_MISSING_EXTENSION') { return ctx.response.status(error.status).send({ message: error.message, code: error.code, }) } if (error instanceof Exception && error.code === 'E_ENTRY_NAME_NOT_CHANGED') { return ctx.response.status(error.status).send({ message: error.message, code: error.code, }) } if (error instanceof Exception && error.code === 'E_ENTRY_ALREADY_EXISTS') { return ctx.response.status(error.status).send({ message: error.message, code: error.code, }) } if (error instanceof Exception && error.code === 'E_DIRECTORY_ALREADY_EXISTS') { return ctx.response.status(error.status).send({ message: error.message, code: error.code, }) } if (error instanceof Exception && error.code === 'E_FILE_NOT_FOUND') { return ctx.response.status(error.status).send({ message: error.message, code: error.code, }) } if (error instanceof Exception && error.code === 'E_DIR_NOT_FOUND') { return ctx.response.status(error.status).send({ message: error.message, code: error.code, }) } return super.handle(error, ctx) } /** * The method is used to report error to the logging service or * the third party error monitoring service. * * @note You should not attempt to send a response from this method. */ async report(error: unknown, ctx: HttpContext) { return super.report(error, ctx) } }