// Manejo uniforme de errores en trabajo asíncrono. // // El port desde JS heredó dos idioms que tragaban fallos en silencio: handlers `async` pasados // directamente a `addEventListener` (nadie consume la promesa, así que un rechazo sólo aparece // como "unhandled rejection" en consola) y llamadas fire-and-forget sin `.catch`. En una // herramienta de diagnóstico eso significa que un fallo de red al guardar o al analizar no le // llega al veterinario. Estos dos helpers hacen que todo rechazo acabe en el toast de error. import { mostrarToast } from './form-inject.js'; function reportarFallo(contexto: string, error: unknown): void { const detalle = error instanceof Error ? error.message : String(error); // console.error (no log) para no filtrar datos de paciente y respetar la regla no-console. console.error(`[${contexto}]`, error); mostrarToast(`${contexto}: ${detalle}`, true); } /** * Envuelve un handler asíncrono para usarlo donde se espera un handler síncrono * (`addEventListener`, `onclick`). Consume la promesa y reporta el rechazo. */ export function manejadorAsync( contexto: string, handler: (evento: E) => Promise, ): (evento: E) => void { return (evento: E): void => { handler(evento).catch((error: unknown) => reportarFallo(contexto, error)); }; } /** * Lanza trabajo asíncrono deliberadamente sin esperarlo, pero con el rechazo reportado. * Usar sólo cuando no hay nada que esperar (arranque, precargas); si el resultado importa, * hacer `await`. */ export function sinEsperar(contexto: string, promesa: Promise): void { promesa.catch((error: unknown) => reportarFallo(contexto, error)); }