// src/main.tsx import React from 'react' import ReactDOM from 'react-dom/client' import App from './App.tsx' import './index.css' // 🔧 IMPORTAR CONFIGURACIÓN PWA PERSONALIZADA import { initializePWA } from './sw-config.ts' // 🔧 IMPORTAR CONFIGURACIÓN DE SISTEMA import { SettingsService } from './services/settingsService.ts' // 🔧 CONFIGURACIÓN DE CONSOLE PARA DESARROLLO if (import.meta.env.DEV) { // Suprimir warnings específicos de Workbox en desarrollo const originalWarn = console.warn; const originalLog = console.log; console.warn = (...args: any[]) => { const message = args.join(' '); // Filtrar warnings de Workbox que son normales en desarrollo if ( message.includes('Precaching did not find a match for') || message.includes('No route found for') || message.includes('Using CacheFirst to respond to') || message.includes('Router is responding to') || message.includes('Found a cached response in') || message.includes('No cached response found') || message.includes('Network request for') || message.includes('Response') && message.includes('will not be cached') ) { return; // Suprimir estos warnings } // Permitir otros warnings importantes originalWarn.apply(console, args); }; console.log = (...args: any[]) => { const message = args.join(' '); // Filtrar logs verbosos de Workbox if ( message.includes('workbox') && ( message.includes('Router is responding to') || message.includes('Using CacheFirst') || message.includes('Found a cached response') || message.includes('No cached response found') ) ) { return; // Suprimir estos logs } // Permitir otros logs importantes originalLog.apply(console, args); }; } // 🔧 RENDERIZAR LA APLICACIÓN ReactDOM.createRoot(document.getElementById('root')!).render( , ) // 🔧 INICIALIZAR PWA INMEDIATAMENTE initializePWA(); // 🔧 INICIALIZAR CONFIGURACIONES DE SISTEMA SettingsService.initializeCache(); // 🔧 REGISTRO DEL SERVICE WORKER DE VITE-PWA // Este se ejecuta automáticamente con la configuración de vite.config.ts // pero lo manejamos manualmente para mejor control // 🔧 HOT MODULE REPLACEMENT EN DESARROLLO if (import.meta.hot) { import.meta.hot.accept(); // En desarrollo, no limpiar service workers agresivamente // para evitar pérdida de estado if ('serviceWorker' in navigator && import.meta.env.DEV) { console.log('🔄 HMR: Modo desarrollo, preservando SW...'); } } // 🔧 MANEJO DE ERRORES GLOBALES window.addEventListener('error', (event) => { // Filtrar errores de SW que no son críticos if ( event.error?.message?.includes('workbox') || event.filename?.includes('workbox') || event.error?.message?.includes('Failed to fetch') ) { console.debug('🔧 Error de SW no crítico filtrado:', event.error?.message); return; } // Log de errores importantes console.error('❌ Error de aplicación:', event.error); }); // 🔧 MANEJO DE PROMESAS RECHAZADAS window.addEventListener('unhandledrejection', (event) => { // Filtrar rechazos de fetch que son normales en PWA if ( event.reason?.message?.includes('Failed to fetch') || event.reason?.message?.includes('NetworkError') || event.reason?.toString().includes('workbox') ) { console.debug('🔧 Rechazo de promesa no crítico filtrado:', event.reason); event.preventDefault(); // Prevenir que aparezca en consola return; } // Log de rechazos importantes console.error('❌ Promesa rechazada:', event.reason); }); // 🔧 DETECTAR CAMBIOS DE CONECTIVIDAD window.addEventListener('online', () => { // console.log('🌐 Conexión restaurada'); // Aquí podrías disparar una sincronización o actualización }); window.addEventListener('offline', () => { // console.log('📱 Modo offline activado'); // Aquí podrías mostrar un indicador de offline }); // 🔧 OPTIMIZACIÓN DE RENDIMIENTO // Lazy loading de módulos no críticos if ('requestIdleCallback' in window) { requestIdleCallback(() => { // Precargar módulos que se usarán posteriormente import('./pages/Home.tsx').catch(() => { console.debug('🔧 Precarga opcional falló'); }); // Precargar stores de persistencia import('./store/persistenceStore.ts').catch(() => { console.debug('🔧 Precarga de persistenceStore falló'); }); }); } // 🔧 INFORMACIÓN DE DEBUG EN DESARROLLO if (import.meta.env.DEV) { // console.log('🚀 Saludly PWA iniciada en modo desarrollo'); // console.log('📱 PWA habilitada:', import.meta.env.VITE_PWA_ENABLED !== 'false'); // console.log('🔧 HMR activo:', !!import.meta.hot); }