@schema-hub/zod-error-formatter
Version:
Simple and easy-to-understand zod error messages
45 lines • 1.69 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 least', 'more than');
}
return formatInclusivePredicate(issue, 'greater than or equal to', 'greater than');
}
function formatCollectionBoundary(issue) {
const singularSuffix = issue.origin === 'string' ? 'character' : 'element';
const suffix = issue.minimum === 1 ? singularSuffix : `${singularSuffix}s`;
return `${issue.minimum} ${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.minimum}`;
}
function formatDate(issue) {
const predicate = formatPredicate(issue);
return `${issue.origin} must be ${predicate} ${new Date(Number(issue.minimum)).toUTCString()}`;
}
export function formatTooSmallIssueMessage(issue) {
if (collectionTypes.has(issue.origin)) {
return formatCollection(issue);
}
if (numericTypes.has(issue.origin)) {
return formatNumeric(issue);
}
return formatDate(issue);
}
//# sourceMappingURL=too-small.js.map