import { ZodError, z } from "zod"; import { handleActionError as foundationHandle } from "@/lib/foundation/action"; export type ActionResult> = | { ok: true; data?: T } | { ok: false; error: string; fieldErrors?: Record }; export function actionOk>( data?: T, ): ActionResult { return { ok: true, data: data ?? ({} as T) }; } export function actionError(message: string): ActionResult { return { ok: false, error: message }; } export class ActionError extends Error { constructor(message: string) { super(message); this.name = "ActionError"; } } export function handleActionError(error: unknown): ActionResult { if (error instanceof ZodError) { return { ok: false, error: "Validation failed", fieldErrors: z.flattenError(error).fieldErrors as Record< string, string[] >, }; } if (error instanceof Error && error.name === "ActionError") { return { ok: false, error: error.message }; } return foundationHandle(error) as ActionResult; }