UNPKG

accounts

Version:

Tempo Accounts SDK

53 lines 2.27 kB
/** * Returns true if the given value is a Zod-thrown error. Covers both * `zod` (classic) and `zod/mini`, which use different `name` values. */ export function isError(value) { const name = value?.name; return name === 'ZodError' || name === '$ZodError'; } /** * Flattens a Zod issue tree into a list of `{ path, message }` entries with * human-readable messages. Union mismatches are folded by collecting the * accepted literal values across all branches. */ export function flattenIssues(issues) { const result = []; for (const issue of issues) { if (issue.code === 'invalid_union' && issue.errors?.length) { // Collect literal values across all union branches: e.g. ['buy', 'sell']. const values = []; let onlyLiterals = true; for (const branch of issue.errors) for (const sub of branch) { if (sub.code === 'invalid_value' && sub.values) values.push(...sub.values); else onlyLiterals = false; } if (onlyLiterals && values.length > 0) { result.push({ path: issue.path.map(String).join('.'), message: `expected one of: ${values.map((v) => JSON.stringify(v)).join(', ')}`, }); continue; } // Fall back to the shortest branch. const best = issue.errors.reduce((a, b) => (a.length <= b.length ? a : b)); for (const nested of flattenIssues(best)) result.push({ path: [...issue.path.map(String), nested.path].filter(Boolean).join('.'), message: nested.message, }); continue; } let message = issue.message; if (issue.code === 'invalid_type' && issue.expected) message = `expected ${issue.expected}`; else if (issue.code === 'invalid_value' && issue.values?.length) message = `expected one of: ${issue.values.map((v) => JSON.stringify(v)).join(', ')}`; result.push({ path: issue.path.map(String).join('.'), message }); } return result; } //# sourceMappingURL=zod.js.map