summaryrefslogtreecommitdiff
path: root/node_modules/wrangler/templates/middleware/middleware-miniflare3-json-error.ts
blob: 9377781079605055faad435e5398c30332250f78 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
import type { Middleware } from "./common";

interface JsonError {
	message?: string;
	name?: string;
	stack?: string;
	cause?: JsonError;
}

function reduceError(e: any): JsonError {
	return {
		name: e?.name,
		message: e?.message ?? String(e),
		stack: e?.stack,
		cause: e?.cause === undefined ? undefined : reduceError(e.cause),
	};
}

// See comment in `bundle.ts` for details on why this is needed
const jsonError: Middleware = async (request, env, _ctx, middlewareCtx) => {
	try {
		return await middlewareCtx.next(request, env);
	} catch (e: any) {
		const error = reduceError(e);
		return Response.json(error, {
			status: 500,
			headers: { "MF-Experimental-Error-Stack": "true" },
		});
	}
};

export default jsonError;
export const wrap = undefined;