Openstatus
www.openstatus.dev
1import type { ZodIssue } from "zod";
2
3import type { ErrorCode } from "./error-code";
4
5export function statusToCode(status: number): ErrorCode {
6 switch (status) {
7 case 400:
8 return "BAD_REQUEST";
9 case 401:
10 return "UNAUTHORIZED";
11 case 402:
12 return "PAYMENT_REQUIRED";
13 case 403:
14 return "FORBIDDEN";
15 case 404:
16 return "NOT_FOUND";
17 case 405:
18 return "METHOD_NOT_ALLOWED";
19 case 409:
20 return "CONFLICT";
21 case 422:
22 return "UNPROCESSABLE_ENTITY";
23 case 500:
24 return "INTERNAL_SERVER_ERROR";
25 default:
26 return "INTERNAL_SERVER_ERROR";
27 }
28}
29
30export function codeToStatus(code: ErrorCode) {
31 switch (code) {
32 case "BAD_REQUEST":
33 return 400;
34 case "UNAUTHORIZED":
35 return 401;
36 case "PAYMENT_REQUIRED":
37 return 402;
38 case "FORBIDDEN":
39 return 403;
40 case "NOT_FOUND":
41 return 404;
42 case "METHOD_NOT_ALLOWED":
43 return 405;
44 case "CONFLICT":
45 return 409;
46 case "UNPROCESSABLE_ENTITY":
47 return 422;
48 case "INTERNAL_SERVER_ERROR":
49 return 500;
50 default:
51 return 500;
52 }
53}
54
55// Props to cal.com: https://github.com/calcom/cal.com/blob/5d325495a9c30c5a9d89fc2adfa620b8fde9346e/packages/lib/server/getServerErrorFromUnknown.ts#L17
56export function parseZodErrorIssues(issues: ZodIssue[]): string {
57 return issues
58 .map((i) =>
59 i.code === "invalid_union"
60 ? i.errors.map((ue) => parseZodErrorIssues(ue)).join("; ")
61 : i.code === "unrecognized_keys"
62 ? i.message
63 : `${i.path.length ? `${i.code} in '${i.path}': ` : ""}${i.message}`,
64 )
65 .join("; ");
66}
67
68export function redactError<TError extends Error | unknown>(err: TError) {
69 if (!(err instanceof Error)) return err;
70 console.error(`Type of Error: ${err.constructor}`);
71}