|
1 |
| -import { isRouteErrorResponse, useRouteError } from "@remix-run/react"; |
| 1 | +import { useRouteError } from "@remix-run/react"; |
2 | 2 | import { ClientOnly } from "../client-only";
|
3 | 3 | import { lazy } from "react";
|
4 |
| -import { z } from "zod"; |
| 4 | +import { parseError } from "./error-parse"; |
5 | 5 |
|
6 | 6 | const ErrorMessage = lazy(async () => {
|
7 | 7 | const { ErrorMessage } = await import("./error-message.client");
|
8 | 8 | return { default: ErrorMessage };
|
9 | 9 | });
|
10 | 10 |
|
11 |
| -const PageError = z.union([ |
12 |
| - z.string().transform((message) => ({ message, description: undefined })), |
13 |
| - z.object({ |
14 |
| - message: z.string(), |
15 |
| - description: z.string().optional(), |
16 |
| - }), |
17 |
| -]); |
18 |
| - |
19 |
| -const parseErrorObject = ( |
20 |
| - error: unknown |
21 |
| -): { |
22 |
| - status: number; |
23 |
| - statusText?: string; |
24 |
| - message: string; |
25 |
| - description?: string; |
26 |
| -} => { |
27 |
| - if (error instanceof Error) { |
28 |
| - return { |
29 |
| - message: error.message, |
30 |
| - status: 500, |
31 |
| - }; |
32 |
| - } |
33 |
| - |
34 |
| - if (isRouteErrorResponse(error)) { |
35 |
| - const parsed = PageError.safeParse(error.data); |
36 |
| - |
37 |
| - if (parsed.success) { |
38 |
| - return { |
39 |
| - message: parsed.data.message, |
40 |
| - description: parsed.data.description, |
41 |
| - status: error.status, |
42 |
| - statusText: error.statusText, |
43 |
| - }; |
44 |
| - } |
45 |
| - |
46 |
| - return { |
47 |
| - message: error.data ? JSON.stringify(error.data) : "unknown error", |
48 |
| - status: error.status, |
49 |
| - statusText: error.statusText, |
50 |
| - }; |
51 |
| - } |
52 |
| - |
53 |
| - const parsed = PageError.safeParse(error); |
54 |
| - if (parsed.success) { |
55 |
| - return { |
56 |
| - message: parsed.data.message, |
57 |
| - description: parsed.data.description, |
58 |
| - status: 1001, |
59 |
| - }; |
60 |
| - } |
61 |
| - |
62 |
| - return { |
63 |
| - message: JSON.stringify(error ?? "unknown error"), |
64 |
| - status: 1001, |
65 |
| - statusText: undefined, |
66 |
| - }; |
67 |
| -}; |
68 |
| - |
69 | 11 | export const ErrorBoundary = () => {
|
70 | 12 | const rawError = useRouteError();
|
71 | 13 |
|
72 |
| - const error = parseErrorObject(rawError); |
| 14 | + const error = parseError(rawError); |
73 | 15 |
|
74 | 16 | return (
|
75 | 17 | <ClientOnly>
|
|
0 commit comments