UNPKG

winterspec

Version:

Write Winter-CG compatible routes with filesystem routing and tons of features

39 lines (38 loc) 1.32 kB
import kleur from "kleur"; /** * */ export const createWithDefaultExceptionHandling = ({ coloredLogs = true, logWhen = (status) => status >= 500, includeStackTraceInResponse = true, } = {}) => async (req, ctx, next) => { try { return await next(req, ctx); } catch (e) { let response; if ("_isHttpException" in e) { response = Response.json({ message: e.message, stack: includeStackTraceInResponse ? e.stack : undefined, }, { status: e.status, }); } else { response = Response.json({ message: "Internal server error", stack: includeStackTraceInResponse ? e.stack : undefined, }, { status: 500, }); } if (logWhen(response.status, e)) { const logger = ctx.logger ?? console; kleur.enabled = coloredLogs; const { pathname } = new URL(req.url); const routeLog = response.status >= 500 ? kleur.bgRed(`${pathname} threw an error`) : kleur.bgYellow(`${pathname} threw an error`); logger.error(`${routeLog}: ${e instanceof Error ? e.stack : e.toString()}`); } return response; } };