UNPKG

@thisisagile/easy-express

Version:

Straightforward library for building domain-driven microservice architectures

37 lines (36 loc) 1.77 kB
import { isAuthError } from "../chunk-RL5ICAHT.mjs"; // src/express/ErrorHandler.ts import { asString, choose, ctx, HttpStatus, isDoesNotExist, isError, isException, isResponse, isResults, isText, rest, toHttpStatus, toResult, tryTo } from "@thisisagile/easy"; import { toOriginatedError } from "@thisisagile/easy-service"; var toResponse = (status, errors = []) => ({ status, body: rest.toError(status, errors) }); var toBody = ({ origin, options }) => { return choose(origin).type(isAuthError, (ae) => toResponse(toHttpStatus(ae.status), [toResult(ae.message)])).type(isDoesNotExist, (e) => toResponse(options?.onNotFound ?? HttpStatus.NotFound, [toResult(e.reason ?? e.message)])).type(isError, (e) => toResponse(HttpStatus.InternalServerError, [toResult(e.message)])).type(isResults, (r) => toResponse(options?.onError ?? HttpStatus.BadRequest, r.results)).type(isResponse, (r) => toResponse(HttpStatus.InternalServerError, r.body.error?.errors)).type(isException, (e) => toResponse(options?.onError ?? HttpStatus.BadRequest, [toResult(e.reason ?? e.message)])).type(isText, (t) => toResponse(options?.onError ?? HttpStatus.BadRequest, [toResult(asString(t))])).else(() => toResponse(HttpStatus.InternalServerError, [toResult("Unknown error")])); }; var error = (e, req, res, _next) => { let response; tryTo(() => toOriginatedError(e)).map((oe) => toBody(oe)).accept((r) => response = r).accept((r) => ctx.request.lastError = r.status.isServerError ? r.body.error?.errors[0]?.message : void 0).accept((r) => ctx.request.lastErrorStack = r.status.isServerError ? e.stack : void 0).recover(() => response).accept((r) => res.status(r.status.status).json(r.body)); }; export { error }; //# sourceMappingURL=ErrorHandler.mjs.map