UNPKG

bunshine

Version:

A Bun HTTP & WebSocket server that is a little ray of sunshine.

50 lines (46 loc) 1.1 kB
import Context from '../Context/Context'; import { Handler, NextFunction, SingleHandler } from '../HttpRouter/HttpRouter'; export type FallbackHandler = (c: Context) => Response | Promise<Response>; export type RunShape = { context: Context; handlers: Handler; on404?: FallbackHandler; on500?: FallbackHandler; }; export default function runHandlers({ context, handlers, on404, on500, }: RunShape) { const toRun = (Array.isArray(handlers) ? handlers : [handlers]).flat(9); let i = 0; const next: NextFunction = async () => { const handler = toRun[i++] as SingleHandler; if (!handler) { if (on404) { return on404(context); } else { throw new Error('UNHANDLED'); } } try { let result = await handler(context, next); if (result instanceof Response) { return result; } else { return next(); } } catch (e) { if (e instanceof Response) { return e; } if (on500) { return on500(context); } else { throw e; } } }; return next(); }