48 lines
1.2 KiB
TypeScript
48 lines
1.2 KiB
TypeScript
import { type Code, ConnectError } from "@connectrpc/connect";
|
|
|
|
export function hasConnectCode(error: unknown, ...codes: Code[]): error is ConnectError {
|
|
return error instanceof ConnectError && codes.includes(error.code);
|
|
}
|
|
|
|
export function getErrorMessage(error: unknown, fallback = "Unknown error"): string {
|
|
if (error instanceof ConnectError) {
|
|
return error.rawMessage || fallback;
|
|
}
|
|
|
|
if (error instanceof Error) {
|
|
return error.message;
|
|
}
|
|
|
|
if (typeof error === "string") {
|
|
return error;
|
|
}
|
|
|
|
if (error && typeof error === "object" && "message" in error) {
|
|
return String(error.message);
|
|
}
|
|
|
|
return fallback;
|
|
}
|
|
|
|
export function handleError(
|
|
error: unknown,
|
|
toast: (message: string) => void,
|
|
options?: {
|
|
context?: string;
|
|
fallbackMessage?: string;
|
|
onError?: (error: unknown) => void;
|
|
},
|
|
): void {
|
|
const contextPrefix = options?.context ? `${options.context}: ` : "";
|
|
const fallback = options?.fallbackMessage;
|
|
|
|
const errorMessage = options?.context ? `${contextPrefix}${getErrorMessage(error, fallback)}` : getErrorMessage(error, fallback);
|
|
|
|
console.error(error);
|
|
toast(errorMessage);
|
|
options?.onError?.(error);
|
|
}
|
|
|
|
export function isError(value: unknown): value is Error {
|
|
return value instanceof Error;
|
|
}
|