All files / linter printError.ts

56.25% Statements 9/16
57.14% Branches 4/7
50% Functions 2/4
56.25% Lines 9/16

Press n or j to go to the next uncovered block, b, p or k for the previous block.

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 39 40 41 42 43 44 45 46 47 48 49 50 51 52    1x                 1x 2x   4x         1x 1x   1x               3x                   1x                      
import { ZodError } from "zod";
 
import { CLI_FORMAT_RED } from "../tester/cliFormat";
 
export interface LintIssueFromZod {
  message: string;
  path: (string | number)[];
  code?: string;
  value?: unknown;
}
 
export function getLintIssuesFromZodError(e: ZodError): LintIssueFromZod[] {
  return e.issues
    .map((issue) => {
      if (
        issue.code === "invalid_union" &&
        issue.path.length === 0 &&
        issue.unionErrors.length > 0
      ) {
        const lastUnionError = issue.unionErrors[issue.unionErrors.length - 1];
        const nestedIssue = lastUnionError.issues[0];
 
        return {
          message: nestedIssue.message,
          path: nestedIssue.path,
          code: nestedIssue.code,
          value: (nestedIssue as any).received,
        };
      }
 
      return {
        message: issue.message,
        path: issue.path,
        code: issue.code,
        value: (issue as any).received,
      };
    })
    .filter(Boolean);
}
 
export function printZodError(e: ZodError) {
  const issues = getLintIssuesFromZodError(e);
  issues.forEach((issue) => {
    console.error(CLI_FORMAT_RED, `  => Error: ${issue.message}`);
    console.error("     Path:", issue.path.join("."));
    Iif (typeof issue.value !== "undefined" && issue.value !== "undefined") {
      console.error("     Value:", issue.value);
    }
    console.error("");
  });
}