codigo0/scripts/diagnostico_errores.md
planetazuzu a313cfe066 fix: Correcciones críticas y mejoras PWA
- Fix: ErrorBoundary movido dentro de BrowserRouter para resolver error de contexto React Router
- Fix: Service Worker actualizado con Promise.allSettled para manejar errores de caché
- Feat: Iconos PWA optimizados (192x192, 512x512, maskable)
- Feat: Scripts de diagnóstico y limpieza de desarrollo
- Feat: Documentación de diagnóstico de errores
- Update: React Router future flags configurados
- Update: Manifest.json con iconos y screenshots configurados
- Clean: Eliminados archivos obsoletos y documentación antigua
- Docs: Actualizado RESUMEN_MANUAL_TES.md y CHECKLIST_PWA_COMPLETA.md
2025-12-23 11:42:44 +01:00

349 lines
7.4 KiB
Markdown

# 🔍 Diagnóstico de Errores - EMERGES TES
Guía de diagnóstico y solución de problemas específicos para el proyecto **EMERGES TES - Guía de Protocolos de Emergencias**.
---
## 🧹 Limpieza Rápida
### Script Automatizado
```bash
./scripts/limpiar_errores_desarrollo.sh
```
Este script:
- ✅ Limpia caché de Vite
- ✅ Elimina builds anteriores
- ✅ Verifica TypeScript
- ✅ Proporciona instrucciones para limpiar almacenamiento
---
## 🔧 Problemas Comunes y Soluciones
### 1. Error: "Cannot destructure property 'basename' of 'React2.useContext(...)' as it is null"
**Causa:** Componente `<Link>` o `<NavLink>` renderizado fuera del contexto de `<BrowserRouter>`
**Solución aplicada:**
-`ErrorBoundary` movido dentro de `<BrowserRouter>` en `src/App.tsx`
- ✅ Eliminado import de `Link` de `ErrorBoundary.tsx` (no se usa)
**Verificación:**
```typescript
// ✅ CORRECTO (ErrorBoundary dentro de BrowserRouter)
<BrowserRouter>
<ErrorBoundary>
{/* ... */}
</ErrorBoundary>
</BrowserRouter>
// ❌ INCORRECTO (ErrorBoundary fuera de BrowserRouter)
<ErrorBoundary>
<BrowserRouter>
{/* ... */}
</BrowserRouter>
</ErrorBoundary>
```
---
### 2. Error: "Failed to execute 'addAll' on 'Cache': Request failed"
**Causa:** Service Worker intenta cachear recursos que no existen o no son accesibles
**Solución aplicada:**
- ✅ Service Worker actualizado para usar `Promise.allSettled` en lugar de `cache.addAll`
- ✅ Manejo de errores individual para cada recurso
- ✅ El Service Worker continúa aunque algunos recursos fallen
**Código aplicado:**
```javascript
// En public/sw.js
return Promise.allSettled(
STATIC_ASSETS.map(url =>
cache.add(url).catch(err => {
console.warn(`[SW] Failed to cache ${url}:`, err);
return null;
})
)
);
```
---
### 3. Error: "Objects are not valid as a React child"
**Causa:** Componente React pasado como objeto en lugar de JSX
**Solución:**
- Verificar que los componentes lazy se rendericen correctamente
- Asegurar que los iconos se pasen como componentes, no como objetos
- Verificar que `Suspense` envuelva correctamente los componentes lazy
**Verificación:**
```typescript
// ✅ CORRECTO
const Icon = tab.icon;
<Icon className="w-4 h-4" />
// ❌ INCORRECTO
{tab.icon} // Si tab.icon es un componente, debe ser <tab.icon />
```
---
### 4. Errores de Almacenamiento Local (localStorage/sessionStorage)
**Síntomas:**
- Favoritos no se guardan
- Historial no funciona
- Errores en consola relacionados con storage
**Solución:**
```javascript
// En la consola del navegador (F12):
// Limpiar solo las claves de esta app
localStorage.removeItem('emerges-tes-favorites');
sessionStorage.removeItem('emerges-tes-search-history');
localStorage.removeItem('pwa-install-dismissed');
// O limpiar todo (cuidado: afecta otras apps)
localStorage.clear();
sessionStorage.clear();
```
**Desde DevTools:**
1. Abre DevTools (F12)
2. Pestaña "Application" → "Storage"
3. Limpia "Local Storage" y "Session Storage" para tu dominio
---
### 2. Service Worker Desactualizado
**Síntomas:**
- La app no carga offline
- Cambios no se reflejan después del deploy
- Errores en consola sobre service worker
**Solución:**
```javascript
// En la consola del navegador:
// 1. Desregistrar service worker
navigator.serviceWorker.getRegistrations().then(registrations => {
registrations.forEach(registration => {
registration.unregister();
console.log('Service Worker desregistrado');
});
});
// 2. Limpiar caché
caches.keys().then(names => {
names.forEach(name => {
caches.delete(name);
console.log('Caché eliminada:', name);
});
});
// 3. Recargar página con Ctrl+Shift+R (hard refresh)
```
---
### 3. Errores de Build
**Síntomas:**
- `npm run build` falla
- Errores de TypeScript
- Errores de módulos no encontrados
**Solución:**
```bash
# 1. Limpiar completamente
rm -rf node_modules dist node_modules/.vite package-lock.json
# 2. Reinstalar dependencias
npm install
# 3. Verificar TypeScript
npx tsc --noEmit
# 4. Rebuild
npm run build
```
---
### 4. Errores de HMR (Hot Module Replacement)
**Síntomas:**
- Cambios no se reflejan en desarrollo
- Errores de recarga en caliente
- Variables duplicadas
**Solución:**
```bash
# 1. Limpiar caché de Vite
rm -rf node_modules/.vite
# 2. Reiniciar servidor de desarrollo
# Ctrl+C para detener
npm run dev
```
---
### 5. Errores de React Router
**Síntomas:**
- Warnings sobre future flags
- Rutas no funcionan correctamente
- Navegación falla
**Solución:**
Ya está configurado en `src/App.tsx`:
```typescript
<BrowserRouter future={{ v7_startTransition: true, v7_relativeSplatPath: true }}>
```
Si persisten warnings, verifica que la versión de react-router-dom sea compatible:
```bash
npm list react-router-dom
```
---
## ✅ Verificación del Proyecto
### Checklist de Diagnóstico
```bash
# 1. Verificar que estás en el proyecto correcto
pwd # Debe ser: /home/planetazuzu/guia-tes
# 2. Verificar Node.js
node -v # Debe ser >= 18
# 3. Verificar build
npm run build # Debe compilar sin errores
# 4. Verificar TypeScript
npx tsc --noEmit # No debe mostrar errores
# 5. Verificar linter
npm run lint # Revisar warnings
# 6. Verificar servidor de desarrollo
npm run dev # Debe iniciar en puerto 8096
```
---
## 🐛 Errores Específicos del Proyecto
### Error: "Cannot find module '@/...'"
**Causa:** Alias de TypeScript no configurado
**Solución:**
Verifica `tsconfig.json` y `vite.config.ts`:
```json
// tsconfig.json debe tener:
{
"compilerOptions": {
"paths": {
"@/*": ["./src/*"]
}
}
}
```
---
### Error: "Markdown files not loading"
**Causa:** Archivos .md no están en `public/manual/`
**Solución:**
```bash
# Verificar que existen los archivos
ls -la public/manual/
# Debe haber 94 archivos .md en subdirectorios
find public/manual -name "*.md" | wc -l
```
---
### Error: "Service Worker registration failed"
**Causa:** `sw.js` no existe o está mal configurado
**Solución:**
```bash
# Verificar que existe
ls -la public/sw.js
# Si no existe, verifica src/main.tsx para el registro
```
---
## 📊 Estado Actual del Proyecto
### Almacenamiento Usado
-`localStorage`: Favoritos (`emerges-tes-favorites`)
-`sessionStorage`: Historial (`emerges-tes-search-history`)
-`localStorage`: Banner PWA (`pwa-install-dismissed`)
-**NO usa IndexedDB ni Dexie**
### Base de Datos
- ❌ Este proyecto **NO usa** bases de datos
-**NO usa** Dexie, IndexedDB, ni ninguna BD
- ✅ Solo usa almacenamiento del navegador (localStorage/sessionStorage)
---
## 🆘 Si Persisten los Errores
1. **Verifica el proyecto correcto**
```bash
pwd
cat package.json | grep name
# Debe mostrar: "vite_react_shadcn_ts"
```
2. **Limpia completamente**
```bash
./scripts/limpiar_errores_desarrollo.sh
rm -rf node_modules dist
npm install
```
3. **Reconstruye**
```bash
npm run build
npm run dev
```
4. **Verifica en el navegador**
- Abre DevTools (F12)
- Revisa la pestaña "Console" para errores
- Revisa la pestaña "Network" para recursos fallidos
---
## 📝 Notas Importantes
- Este proyecto **NO usa Dexie** ni IndexedDB
- Este proyecto **NO tiene** NominaUploader ni pdf-parser
- Este proyecto usa **localStorage/sessionStorage** para persistencia
- El proyecto compila **sin errores** actualmente
---
**Última actualización:** 2025-12-23
**Proyecto:** EMERGES TES - Guía de Protocolos de Emergencias