File size: 804 Bytes
6dec997
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
import type { ContractIssue } from "./types.js";

type ZodLikeIssue = {
  path?: Array<string | number>;
  message?: string;
  code?: string;
};

type ZodLikeError = {
  issues: ZodLikeIssue[];
};

export function normalizeIssues(error: unknown): ContractIssue[] {
  if (isZodLikeError(error)) {
    return error.issues.map((issue) => ({
      path: issue.path?.map(String).join(".") ?? "",
      message: issue.message ?? "Invalid value.",
      code: issue.code
    }));
  }

  return [
    {
      path: "",
      message: error instanceof Error ? error.message : "Schema validation failed."
    }
  ];
}

function isZodLikeError(error: unknown): error is ZodLikeError {
  return (
    typeof error === "object" &&
    error !== null &&
    "issues" in error &&
    Array.isArray(error.issues)
  );
}