Skip to main content
zerotal

Documentation


Documentation / zerotal / index / ExceptionHandler

Abstract Class: ExceptionHandler

Defined in: packages/core/src/application/ExceptionHandler.ts:31

Base class for application-level exception handling.

Register a subclass with app.withExceptionHandler(Handler) in bootstrap/app.ts. The framework calls report() then render() for every unhandled exception thrown by a route handler or middleware.

Example

// app/exceptions/Handler.ts
import { ExceptionHandler } from '@zerotal/core';

export class Handler extends ExceptionHandler {
  override async render(err: unknown, ctx: HttpContext): Promise<Response> {
    if (err instanceof ModelNotFoundError) {
      return Response.json({ message: 'Not found' }, { status: 404 });
    }
    return super.render(err, ctx);
  }
}

Constructors

Constructor

new ExceptionHandler(): ExceptionHandler

Defined in: packages/core/src/application/ExceptionHandler.ts:34

Returns

ExceptionHandler

Properties

dontReport

protected dontReport: (...args) => unknown[] = []

Defined in: packages/core/src/application/ExceptionHandler.ts:36

Parameters

args

...never[]

Returns

unknown

Methods

shouldReport()

protected shouldReport(error): boolean

Defined in: packages/core/src/application/ExceptionHandler.ts:46

Parameters

error

unknown

Returns

boolean


report()

report(error, _ctx?): Promise<void>

Defined in: packages/core/src/application/ExceptionHandler.ts:55

Parameters

error

unknown

_ctx?

HttpContext<Record<string, string>>

Returns

Promise<void>


render()

render(error, ctx): Promise<Response>

Defined in: packages/core/src/application/ExceptionHandler.ts:60

Parameters

error

unknown

ctx

HttpContext

Returns

Promise<Response>


defaultRender()

static defaultRender(error, ctx?): Promise<Response>

Defined in: packages/core/src/application/ExceptionHandler.ts:79

Shared error → Response logic.

Response format depends on what the client accepts:

Browser (Accept: text/html) → styled HTML page (all error classes) Inertia XHR (X-Inertia: true) → JSON (Inertia shows its own modal) API client (Accept: application/json) → JSON

Error-class routing:

  1. ValidationRedirectError → 303 redirect (always, any client)
  2. ValidationJsonError → 422 JSON (always — the errors object IS the response)
  3. ZerotalError 4xx → styled 4xx HTML or JSON depending on client
  4. Everything else → dev stack-trace page or minimal 500

Parameters

error

unknown

ctx?

HttpContext<Record<string, string>>

Returns

Promise<Response>