UNPKG

@dnb/eufemia

Version:

DNB Eufemia Design System UI Library

260 lines (259 loc) 10.3 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.createZodValidator = createZodValidator; exports.isZodSchema = isZodSchema; exports.z = void 0; exports.zodErrorToFormError = zodErrorToFormError; exports.zodErrorsToFormErrors = void 0; exports.zodErrorsToOneFormError = zodErrorsToOneFormError; var z = _interopRequireWildcard(require("zod")); exports.z = z; var _FormError = require("./FormError.js"); function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); } const defaultPatterns = [/^Too small:/, /^Too big:/, /^Invalid input:/, /^Invalid string:/, /^Invalid number: must be a multiple of/]; function isLikelyCustomZodMessage(issue) { var _issue$message; const msg = (_issue$message = issue === null || issue === void 0 ? void 0 : issue.message) !== null && _issue$message !== void 0 ? _issue$message : ''; if (typeof msg !== 'string' || msg.length === 0) { return false; } return !defaultPatterns.some(regex => regex.test(msg)); } function normalizeZodIssueMessage(issue) { if (typeof (issue === null || issue === void 0 ? void 0 : issue.message) === 'string' && /expected int/.test(issue.message)) { return 'NumberField.errorInteger'; } if ((issue === null || issue === void 0 ? void 0 : issue.code) === 'too_small' && issue.origin === 'number' && issue.inclusive === false) { return 'NumberField.errorExclusiveMinimum'; } if ((issue === null || issue === void 0 ? void 0 : issue.code) === 'too_big' && issue.origin === 'number' && issue.inclusive === false) { return 'NumberField.errorExclusiveMaximum'; } if ((issue === null || issue === void 0 ? void 0 : issue.code) === 'too_small' && issue.origin === 'array' && typeof issue.minimum === 'number') { return 'IterateArray.errorMinItems'; } if ((issue === null || issue === void 0 ? void 0 : issue.code) === 'too_big' && issue.origin === 'array' && typeof issue.maximum === 'number') { return 'IterateArray.errorMaxItems'; } if (typeof (issue === null || issue === void 0 ? void 0 : issue.message) === 'string') { if (issue.code === 'too_small' && typeof issue.minimum === 'number') { if (issue.origin === 'number') { return 'NumberField.errorMinimum'; } if (issue.origin === 'string') { return 'StringField.errorMinLength'; } } if (issue.code === 'too_big' && typeof issue.maximum === 'number') { if (issue.origin === 'number') { return 'NumberField.errorMaximum'; } if (issue.origin === 'string') { return 'StringField.errorMaxLength'; } } } if ((issue === null || issue === void 0 ? void 0 : issue.code) === 'not_multiple_of') { return 'NumberField.errorMultipleOf'; } if ((issue === null || issue === void 0 ? void 0 : issue.code) === 'invalid_format' && issue.format === 'regex') { return 'Field.errorPattern'; } return issue === null || issue === void 0 ? void 0 : issue.message; } function isZodSchema(schema) { return !!schema && (typeof (schema === null || schema === void 0 ? void 0 : schema.safeParse) === 'function' || typeof (schema === null || schema === void 0 ? void 0 : schema.parse) === 'function'); } function getMessageValuesFromZodIssue(issue) { const explicitParams = issue === null || issue === void 0 ? void 0 : issue['messageValues']; if (explicitParams && typeof explicitParams === 'object') { const messages = Object.fromEntries(Object.entries(explicitParams).map(([k, v]) => [k, String(v)])); return messages; } const code = issue === null || issue === void 0 ? void 0 : issue.code; if (!code) { return; } const type = issue === null || issue === void 0 ? void 0 : issue['origin']; if (type === 'string') { if (code === 'too_small') { const min = issue.minimum; if (typeof min === 'number') { return { minLength: String(min) }; } } if (code === 'too_big') { const max = issue.maximum; if (typeof max === 'number') { return { maxLength: String(max) }; } } if (code === 'invalid_format' && issue.format === 'regex') { const pattern = issue.pattern; if (typeof pattern === 'string') { return { pattern }; } } } if (type === 'number') { if (code === 'too_small' && type === 'number') { const min = issue.minimum; if (typeof min === 'number') { return { minimum: String(min) }; } } if (code === 'too_big' && type === 'number') { const max = issue.maximum; if (typeof max === 'number') { return { maximum: String(max) }; } } if (code === 'not_multiple_of') { var _multipleOf, _issue$message2; const multipleOf = (_multipleOf = issue === null || issue === void 0 ? void 0 : issue.multipleOf) !== null && _multipleOf !== void 0 ? _multipleOf : issue === null || issue === void 0 ? void 0 : issue.multiple; if (typeof multipleOf === 'number') { return { multipleOf: String(multipleOf) }; } const fallbackMsg = String((_issue$message2 = issue === null || issue === void 0 ? void 0 : issue.message) !== null && _issue$message2 !== void 0 ? _issue$message2 : ''); const m = fallbackMsg.match(/multiple\s*of\s*([0-9]+(?:\.[0-9]+)?)/i); if (m && m[1]) { return { multipleOf: m[1] }; } } } if (type === 'array') { if (code === 'too_small') { const min = issue.minimum; if (typeof min === 'number') { return { minItems: String(min) }; } } if (code === 'too_big') { const max = issue.maximum; if (typeof max === 'number') { return { maxItems: String(max) }; } } } return undefined; } function zodErrorToFormError(zodError) { const issues = zodError.issues || []; if (issues.length === 1) { var _ref; const issue = issues[0]; const normalizedMessage = normalizeZodIssueMessage(issue); const isCustom = isLikelyCustomZodMessage(issue); const messageValues = getMessageValuesFromZodIssue(issue); if (isCustom) { return new _FormError.FormError(issue.message, { messageValues }); } return new _FormError.FormError((_ref = normalizedMessage !== null && normalizedMessage !== void 0 ? normalizedMessage : issue.message) !== null && _ref !== void 0 ? _ref : 'Validation error', { messageValues }); } const errors = issues.map(issue => { var _ref2; const normalizedMessage = normalizeZodIssueMessage(issue); const isCustom = isLikelyCustomZodMessage(issue); const messageValues = getMessageValuesFromZodIssue(issue); if (isCustom) { return new _FormError.FormError(issue.message, { messageValues }); } return new _FormError.FormError((_ref2 = normalizedMessage !== null && normalizedMessage !== void 0 ? normalizedMessage : issue.message) !== null && _ref2 !== void 0 ? _ref2 : 'Validation error', { messageValues }); }); return new _FormError.FormError('Multiple errors', { errors }); } function zodErrorsToOneFormError(zodIssues) { if (zodIssues.length === 1) { var _ref3; const issue = zodIssues[0]; const normalizedMessage = normalizeZodIssueMessage(issue); const isCustom = isLikelyCustomZodMessage(issue); const messageValues = getMessageValuesFromZodIssue(issue); if (isCustom) { return new _FormError.FormError(issue.message, { messageValues }); } return new _FormError.FormError((_ref3 = normalizedMessage !== null && normalizedMessage !== void 0 ? normalizedMessage : issue.message) !== null && _ref3 !== void 0 ? _ref3 : 'Validation error', { messageValues }); } const errors = zodIssues.map(issue => { var _ref4; const normalizedMessage = normalizeZodIssueMessage(issue); const isCustom = isLikelyCustomZodMessage(issue); const messageValues = getMessageValuesFromZodIssue(issue); if (isCustom) { return new _FormError.FormError(issue.message, { messageValues }); } return new _FormError.FormError((_ref4 = normalizedMessage !== null && normalizedMessage !== void 0 ? normalizedMessage : issue.message) !== null && _ref4 !== void 0 ? _ref4 : 'Validation error', { messageValues }); }); return new _FormError.FormError('Multiple errors', { errors }); } const zodErrorsToFormErrors = issues => { return (issues !== null && issues !== void 0 ? issues : []).reduce((acc, issue) => { const path = issue.path.length > 0 ? `/${issue.path.join('/')}` : '/'; const normalizedMessage = normalizeZodIssueMessage(issue); const isCustom = isLikelyCustomZodMessage(issue); const messageValues = getMessageValuesFromZodIssue(issue); if (isCustom) { acc[path] = new _FormError.FormError(issue.message, { messageValues }); } else { var _ref5; acc[path] = new _FormError.FormError((_ref5 = normalizedMessage !== null && normalizedMessage !== void 0 ? normalizedMessage : issue.message) !== null && _ref5 !== void 0 ? _ref5 : 'Validation error', { messageValues, ajvKeyword: normalizedMessage !== null && normalizedMessage !== void 0 ? normalizedMessage : issue.message }); } return acc; }, {}); }; exports.zodErrorsToFormErrors = zodErrorsToFormErrors; function createZodValidator(schema) { return value => { const result = schema.safeParse(value); if (result.success) { return true; } return result.error; }; } //# sourceMappingURL=zod.js.map