import * as z from "zod"; type ZodIssue = z.ZodIssue; type DecodeErrorConstructorArgs = { input: TInput; errors: ZodIssue[]; }; function formatZodErrors(errors: ZodIssue[]): string[] { return errors.map((err) => { const path = err.path.length > 0 ? ` at ${err.path.join(".")}` : ""; return `${err.message}${path}`; }); } export class DecodeError extends Error { name = "DecodeError"; input: TInput; errors: string[]; constructor(args: DecodeErrorConstructorArgs) { const formattedErrors = formatZodErrors(args.errors); super(formattedErrors.join(", ")); this.input = args.input; this.errors = formattedErrors; } }