| 1154 | export const defaultFormatter = makeFormatterDefault() |
| 1155 | |
| 1156 | function formatIssue(issue: Issue, path: string): string { |
| 1157 | let message: string |
| 1158 | switch (issue._tag) { |
| 1159 | case "Filter": { |
| 1160 | const annotated = defaultCheckHook(issue) |
| 1161 | if (annotated !== undefined) { |
| 1162 | message = annotated |
| 1163 | } else { |
| 1164 | if (issue.issue._tag !== "InvalidValue") { |
| 1165 | return formatIssue(issue.issue, path) |
| 1166 | } |
| 1167 | const expected = findExpected(issue.issue) |
| 1168 | message = expected === undefined |
| 1169 | ? getExpectedMessage(formatCheck(issue.filter), issue) |
| 1170 | : getExpectedMessage(expected, issue.issue) |
| 1171 | } |
| 1172 | break |
| 1173 | } |
| 1174 | case "Encoding": |
| 1175 | return formatIssue(issue.issue, path) |
| 1176 | case "Pointer": |
| 1177 | return formatIssue(issue.issue, path + formatPath(issue.path)) |
| 1178 | case "Composite": |
| 1179 | case "AnyOf": { |
| 1180 | if (issue._tag === "Composite" || issue.issues.length > 0) { |
| 1181 | return issue.issues.map((issue) => formatIssue(issue, path)).join("\n") |
| 1182 | } |
| 1183 | message = findMessage(issue) ?? getExpectedMessage(InternalAnnotations.getExpected(issue.ast), issue) |
| 1184 | break |
| 1185 | } |
| 1186 | default: |
| 1187 | message = defaultLeafHook(issue) |
| 1188 | break |
| 1189 | } |
| 1190 | return path ? `${message}\n at ${path}` : message |
| 1191 | } |
| 1192 | |
| 1193 | function findMessage(issue: Issue): string | undefined { |
| 1194 | if (issue._tag === "Pointer") return |