UNPKG

express-error-toolkit

Version:

A lightweight and developer-friendly toolkit for robust error handling in Express.js applications. Includes ready-to-use custom error classes, an async route error handler wrapper, a global error handler middleware, and a convenient 'not found' route hand

7 lines (6 loc) 4.04 kB
import{getStatusMessage as U,StatusCodes as O}from"http-status-toolkit";import{StatusCodes as L}from"http-status-toolkit";var e=class extends Error{constructor(t,o=L.INTERNAL_SERVER_ERROR,u=null){super(t),this.statusCode=o,this.errorDetails=u,this.name=this.constructor.name,Object.setPrototypeOf(this,new.target.prototype),Error.captureStackTrace&&Error.captureStackTrace(this,this.constructor)}};var c=class extends e{constructor(t,o=null){super(t||U(O.NOT_FOUND),O.NOT_FOUND,o),this.name=this.constructor.name}};import{StatusCodes as j}from"http-status-toolkit";var p=class extends e{constructor(t,o=null){super(t,j.BAD_REQUEST,o),this.name=this.constructor.name}};import{StatusCodes as k}from"http-status-toolkit";var E=class extends e{constructor(t,o=null){super(t,k.UNAUTHORIZED,o),this.name=this.constructor.name}};import{StatusCodes as H}from"http-status-toolkit";var d=class extends e{constructor(t,o=null){super(t,H.CONFLICT,o),this.name=this.constructor.name}};import{StatusCodes as v}from"http-status-toolkit";var f=class extends e{constructor(t,o=null){super(t,v.FORBIDDEN,o),this.name=this.constructor.name}};import{StatusCodes as F}from"http-status-toolkit";var g=class extends e{constructor(t,o=null){super(t,F.UNPROCESSABLE_ENTITY,o),this.name=this.constructor.name}};import{StatusCodes as q}from"http-status-toolkit";var x=class extends e{constructor(t,o=null){super(t,q.TOO_MANY_REQUESTS,o),this.name=this.constructor.name}};function G(r,t,o=null){return new e(r,t,o)}var M=r=>(t,o,u)=>{Promise.resolve(r(t,o,u)).catch(u)};var V=(r,t,o)=>{let u=r.method||"UNKNOWN_METHOD",l=r.originalUrl||"UNKNOWN_URL";o(new c(`Cannot ${u} ${l}`))};function C(r){return r instanceof Error&&"statusCode"in r&&typeof r.statusCode=="number"}import{StatusCodes as y,getStatusMessage as B}from"http-status-toolkit";var s={reset:"\x1B[0m",bold:"\x1B[1m",red:"\x1B[31m",green:"\x1B[32m",yellow:"\x1B[33m",dimGray:"\x1B[2m"};function $(r){return`${s.bold}${s.red}${r}${s.reset}`}function S(r){return`${s.red}${r}${s.reset}`}function A(r){return`${s.bold}${s.yellow}${r}${s.reset}`}function I(r){return`${s.yellow}${r}${s.reset}`}function _(r){return`${s.bold}${s.green}${r}${s.reset}`}function P(r){return`${s.green}${r}${s.reset}`}function D(r){return`${s.bold}${r}${s.reset}`}function T(r){return`${s.dimGray}${r}${s.reset}`}var a={showStack:process.env.SHOW_STACK!=="false"&&process.env.NODE_ENV!=="production",logError:process.env.LOG_ERROR!=="false"&&process.env.NODE_ENV!=="production",autoSuccessLog:process.env.AUTO_SUCCESS_LOG!=="false"&&process.env.NODE_ENV!=="production",introLine:"\u{1F4A5} Even the best code breaks sometimes! Let's debug..."};function Y(r){a={...a,...r}}var K=(r,t,o,u)=>{if(t.originalUrl==="/favicon.ico"){o.status(204).end();return}let l=y.INTERNAL_SERVER_ERROR,m=B(y.INTERNAL_SERVER_ERROR),b,R;if(r instanceof Error){if(C(r)){let i=r;l=i.statusCode||l,m=i.message.trim()||m,b=i.errorDetails}else m=r.message||m;R=r.stack}let n={success:!1,status:l,message:m};if(b&&(n.errorDetails=b),R&&a.showStack&&(n.stack=R.split(` `).map(i=>i.trim())),a.logError&&(a.introLine?console.error(` ${D(`${a.introLine}`)} `):console.error(),console.error(`${$("\u{1F534} Error Status:")} ${S(String(n.status))} `),console.error(`${$("\u{1F534} Error Message:")} ${S(n.message)} `),n.errorDetails&&(console.error(A("\u{1F7E1} Error Details:")),console.error(I(typeof n.errorDetails=="object"?JSON.stringify(n.errorDetails,null,2):n.errorDetails)),console.error()),n.stack)){let i=n.stack,h=i.slice(0,3),N=i.length-h.length;console.error(_("\u{1F7E2} Stack Trace (Preview):")),h.forEach(w=>console.error(P(w))),N>0&&console.error(T(`...and ${N} more lines. \u{1F4A1} See full stack in error response`))}o.status(l).json(n)};export{p as BadRequestError,d as ConflictError,e as CustomAPIError,f as ForbiddenError,c as NotFoundError,x as TooManyRequestsError,E as UnauthenticatedError,g as ValidationError,M as asyncHandler,K as globalErrorHandler,G as httpError,C as isCustomAPIError,V as notFoundHandler,Y as setErrorOptions};