UNPKG

bananas-commerce-admin

Version:

What's this, an admin for apes?

65 lines 2.29 kB
export class ValidationError extends Error { fieldErrors; formErrors; constructor(message, errors) { super(message); this.name = "ValidationError"; this.fieldErrors = errors.fieldErrors; this.formErrors = errors.formErrors; } } /** * Extract form and field level errors from a 400 response, if present. */ export async function getFormErrors(response) { if (response.status < 400 || response.status >= 500) { return null; } const fieldErrors = {}; const formErrors = []; try { const payload = await response.clone().json(); const detail = payload?.detail ?? payload; const appendFormError = (message) => { if (message == null) return; formErrors.push(String(message)); }; const setFieldError = (field, message) => { if (!field || field === "__root__") { appendFormError(message ?? "Invalid input"); return; } if (fieldErrors[field] == null && message != null) { fieldErrors[field] = String(message); } }; if (typeof detail === "string") { appendFormError(detail); } else if (Array.isArray(detail)) { for (const error of detail) { const loc = Array.isArray(error?.loc) ? error.loc : []; const message = error?.msg ?? error?.message ?? error?.detail ?? (typeof error === "string" ? error : "Invalid input"); const field = loc.filter((part) => part !== "body").pop(); setFieldError(typeof field === "string" ? field : undefined, message); } } else if (detail && typeof detail === "object") { for (const [field, message] of Object.entries(detail)) { setFieldError(field, message); } } } catch (error) { console.error("[FORM_VALIDATION] Failed to parse form errors", error); } if (Object.keys(fieldErrors).length === 0 && formErrors.length === 0) { return null; } return { fieldErrors, formErrors }; } //# sourceMappingURL=form_validation.js.map