UNPKG

@byloth/exceptions

Version:

Handle exceptions with ease, create better stacktraces and manage everything in the right place. ❌

68 lines (56 loc) 2.16 kB
import type { Constructor } from "@byloth/core"; import { HandlerBuilder } from "./models/index.js"; import type { ErrorHandler } from "./types.js"; export function expect<T, E extends Error, R = void, D = void>( error: T, errorType: Constructor<E>, errorHandler: ErrorHandler<E, R>, defaultHandler?: ErrorHandler<unknown, D>): R | D | void; export function expect<T, E extends Error, R = void, D = void>( error: T, errorTypes: Constructor<E>[], errorHandler: ErrorHandler<E, R>, defaultHandler?: ErrorHandler<unknown, D>): R | D | void; export function expect<T, E extends Error, R = void, D = void>( error: T, errorTypes: Constructor<E> | Constructor<E>[], errorHandler: ErrorHandler<E, R>, defaultHandler?: ErrorHandler<unknown, D>): R | D | void; export function expect<T, E extends Error, R = void, D = void>( error: T, errorTypes: Constructor<E> | Constructor<E>[], errorHandler: ErrorHandler<E, R>, defaultHandler?: ErrorHandler<unknown, D>): R | D | void { const builder = new HandlerBuilder<R, D>(); if (!(errorHandler)) { errorHandler = ((exc: E): void => { /* ... */ }) as ErrorHandler<E, R>; } builder.on(errorTypes, errorHandler); if (defaultHandler) { builder.default(defaultHandler); } return builder.handle(error); } /** * expect(error).toBe(MyError) * .then(() => { }) * .catch(() => { }); */ export function ignore<T, E extends Error, R = void, D = void>(error: T, errorType: Constructor<E>) : R | D | void; export function ignore<T, E extends Error, R = void, D = void>(error: T, errorTypes: Constructor<E>[]) : R | D | void; export function ignore<T, E extends Error, R = void, D = void>(error: T, errorTypes: Constructor<E> | Constructor<E>[]) : R | D | void; export function ignore<T, E extends Error, R = void, D = void>(error: T, errorTypes: Constructor<E> | Constructor<E>[]) : R | D | void { const builder = new HandlerBuilder<R, D>(); builder.ignore(errorTypes); return builder.handle(error); } /** * ignore(error).toBe(MyError) * .then(() => { }) * .catch(() => { }); */