import { ZodError } from 'zod' import { FormDataBoundaryError, validationFieldErrors } from '@/lib/formData' export type CampaignFormErrorState = { fieldErrors?: Record message?: string values?: Values revision?: number } export type MapCampaignFormActionErrorOptions = { error: unknown safeMessages: readonly string[] genericMessage: string values?: Values revision?: number resolveBoundaryMessage?: (error: FormDataBoundaryError) => string } export const mapCampaignFormActionError = ( options: MapCampaignFormActionErrorOptions, ): CampaignFormErrorState => { const { error, safeMessages, genericMessage, values, revision, resolveBoundaryMessage } = options if (error instanceof FormDataBoundaryError) { const message = resolveBoundaryMessage ? resolveBoundaryMessage(error) : error.message return { fieldErrors: { [error.field]: [message] }, values, revision } } if (error instanceof ZodError) { return { fieldErrors: validationFieldErrors(error), values, revision } } if ( error instanceof Error && safeMessages.includes(error.message as (typeof safeMessages)[number]) ) { return { message: error.message, values, revision } } return { message: genericMessage, values, revision } }