@schema-hub/zod-error-formatter
Version:
Simple and easy-to-understand zod error messages
48 lines • 1.82 kB
JavaScript
const collectionTypes = new Set(['string', 'array', 'set']);
const numericTypes = new Set(['bigint', 'number']);
function formatInclusivePredicate(issue, inclusiveVariant, nonInclusiveVariant) {
if (issue.inclusive === true) {
return inclusiveVariant;
}
return nonInclusiveVariant;
}
function formatPredicate(issue) {
if (issue.exact === true) {
return 'exactly';
}
if (collectionTypes.has(issue.origin)) {
return formatInclusivePredicate(issue, 'at most', 'less than');
}
if (numericTypes.has(issue.origin)) {
return formatInclusivePredicate(issue, 'less than or equal to', 'less than');
}
return formatInclusivePredicate(issue, 'smaller than or equal to', 'smaller than');
}
function formatCollectionBoundary(issue) {
const singularSuffix = issue.origin === 'string' ? 'character' : 'element';
const suffix = issue.maximum === 1 ? singularSuffix : `${singularSuffix}s`;
return `${issue.maximum} ${suffix}`;
}
function formatCollection(issue) {
const predicate = formatPredicate(issue);
const boundary = formatCollectionBoundary(issue);
return `${issue.origin} must contain ${predicate} ${boundary}`;
}
function formatNumeric(issue) {
const predicate = formatPredicate(issue);
return `${issue.origin} must be ${predicate} ${issue.maximum}`;
}
function formatDate(issue) {
const predicate = formatPredicate(issue);
return `${issue.origin} must be ${predicate} ${new Date(Number(issue.maximum)).toUTCString()}`;
}
export function formatTooBigIssueMessage(issue) {
if (collectionTypes.has(issue.origin)) {
return formatCollection(issue);
}
if (numericTypes.has(issue.origin)) {
return formatNumeric(issue);
}
return formatDate(issue);
}
//# sourceMappingURL=too-big.js.map