import toCamel from 'camelcase-keys' import { isApiError } from '@/lib/api' export type FieldErrors = Partial> export type ValidationError = { message: string fieldErrors: FieldErrors baseErrors: string[] } type RawValidationError = { type?: string message?: string errors?: Record baseErrors?: string[] } export const extractValidationError = (err: unknown) => { if (!(isApiError (err)) || err.response?.status !== 422) return null const rawData = toCamel ((err.response.data ?? { }) as Record, { deep: true }) as RawValidationError const data: RawValidationError = { type: rawData.type as string | undefined, message: rawData.message as string | undefined, errors: rawData.errors as Record | undefined, baseErrors: rawData.baseErrors as string[] | undefined } if (data.type !== 'validation_error' && !(data.errors)) return null return { message: data.message ?? '入力内容を確認してください.', fieldErrors: (data.errors ?? { }) as FieldErrors, baseErrors: data.baseErrors ?? [] } }