mirror of
https://github.com/Pandipipas/scoreko-electron-dev.git
synced 2026-06-05 21:22:07 +00:00
8.0 KiB
8.0 KiB
Roadmap de refactor, limpieza y mejoras (sin romper funcionalidad)
Este documento detalla una propuesta de mejoras para scoreko-electron-dev priorizando cero regresiones. Cada iniciativa incluye objetivo, acciones concretas y estrategia de implementación segura.
1) Arquitectura y organización del código
1.1 Separar main.ts por responsabilidades
- Problema actual:
src/main/main.tsconcentra configuración, UI, lifecycle, gestión de procesos, manejo de errores y utilidades. - Acciones:
- Crear
src/main/config/runtime-config.tspara parseo de env vars. - Crear
src/main/nodecg/process-manager.tsparastart/stop/wait-ready. - Crear
src/main/windows/window-factory.tspara creación de ventanas. - Crear
src/main/errors/error-presenter.tspara logging +dialog.showErrorBox.
- Crear
- Riesgo: bajo, si se conserva API interna por pasos.
- Implementación segura: mover funciones sin cambiar lógica, cubrir con tests unitarios antes de modificar comportamiento.
1.2 Consolidar constantes de runtime
- Problema actual: constantes de URLs y tamaños están dispersas.
- Acciones: agrupar en
src/main/constants.tsy tiparlas conas const. - Beneficio: facilita ajuste de defaults y revisiones.
1.3 Normalizar naming interno
- Mejoras propuestas:
runtimeConfig→appConfig.nodecgPath→nodecgRootPath.RUNTIME_NAME→NODE_RUNTIME_NAME.
- Objetivo: nombres más semánticos para mantenimiento.
2) Robustez de proceso NodeCG
2.1 Endurecer validaciones de instalación
- Mejoras:
- Validar permisos de lectura/escritura en
lib/nodecg. - Validar si el puerto está ocupado antes de lanzar.
- Incluir diagnóstico más accionable en mensajes de error (comando sugerido exacto).
- Validar permisos de lectura/escritura en
- Implementación segura: agregar validaciones opt-in primero con logs, luego convertir a hard-fail.
2.2 Mejorar el check de “ready”
- Problema: readiness actual con
GET /+response.ok || 404puede dar falsos positivos. - Acciones:
- Intentar endpoint más explícito de NodeCG si existe.
- Si no existe, añadir secuencia de checks con retries exponenciales + jitter.
- Compatibilidad: mantener fallback al check actual inicialmente.
2.3 Control del shutdown más determinista
- Acciones:
- Añadir estado explícito (
starting/running/stopping/stopped). - Evitar dobles señales en hooks
before-quit,will-quit,process.exit. - Registrar duración de parada para diagnósticos.
- Añadir estado explícito (
3) Ventanas Electron y UX de carga
3.1 Rework de loading flow
- Mejoras:
- Evitar cargar la ventana principal demasiado pronto si falla dashboard.
- Añadir timeout específico para
mainWindow.loadURL. - Incluir fallback de pantalla de error amigable dentro de Electron.
3.2 Seguridad de navegación
- Acciones:
- Validar que
setWindowOpenHandlerywill-navigatepermitan solo dominio esperado (localhost:PORT). - Rechazar esquemas inseguros (
file:,javascript:).
- Validar que
- Beneficio: hardening del proceso principal.
3.3 Ajustes de resolución
- Mejora: no fijar
minWidth/minHeighta 1920x1080 en todos los escenarios. - Propuesta segura: usar valores por env var con defaults actuales para mantener compatibilidad.
4) Configuración y variables de entorno
4.1 Validación tipada de env vars
- Acciones:
- Introducir esquema (
zodo validación manual centralizada). - Rechazar puertos fuera de rango.
- Marcar strings vacíos inválidos en rutas críticas.
- Introducir esquema (
4.2 Documentación ejecutable
- Acciones:
- Añadir
.env.examplecon todos los defaults. - Script de validación
npm run doctorpara detectar configuración inválida.
- Añadir
4.3 Unificar defaults entre código y README
- Problema: existe posible drift entre doc y runtime.
- Acción: generar bloque de README automáticamente desde una fuente única de config.
5) Build, packaging y distribución
5.1 Revisar iconos por plataforma
- Problema: en
build.mac.iconse usa.ico(no ideal para macOS). - Acciones:
- Usar
.icnsen macOS. - Mantener
.icoen Windows y set icon set correcto para Linux.
- Usar
- Estrategia segura: fallback conservando lo actual hasta tener assets definitivos.
5.2 Pipeline reproducible
- Acciones:
- Asegurar lockfile limpio y versión de Node fijada con
.nvmrc. - Añadir CI mínima (
typecheck, build, smoke test).
- Asegurar lockfile limpio y versión de Node fijada con
5.3 Reducción de tamaño de artefacto
- Acciones:
- Revisar qué se copia en
extraResources. - Excluir archivos no necesarios (logs, tests, cachés) en empaquetado.
- Revisar qué se copia en
6) Calidad de código y testing
6.1 Añadir linting/formatting
- Acciones:
- Configurar ESLint + Prettier.
- Reglas mínimas: imports ordenados, no variables no usadas, complejidad controlada.
6.2 Unit tests para utilidades críticas
- Cobertura objetivo inicial:
parseEnvInt,getEnv,getOptionalEnv.- Resolución de icon path.
- Cálculo de delays y timeouts.
6.3 Integration smoke tests
- Acción: test que verifique arranque controlado de Electron main con mocks (sin UI real).
- Objetivo: detectar regresiones de lifecycle y cierre de NodeCG.
7) Observabilidad y diagnóstico
7.1 Logger estructurado
- Acción: reemplazar
console.logpor logger con niveles (info/warn/error/debug) y contexto. - Beneficio: depuración más rápida en producción.
7.2 Error codes y troubleshooting
- Acciones:
- Estandarizar errores con códigos (
E_NODECG_NOT_FOUND, etc.). - Añadir sección “Troubleshooting” en README con causas/soluciones.
- Estandarizar errores con códigos (
8) Limpieza técnica (deuda)
8.1 Eliminar lógica duplicada de cierre
- Problema: varios handlers llaman
stopNodeCG(). - Acción: centralizar estrategia de parada en un solo coordinador.
8.2 Extraer utilidades de proceso SO
- Acción: separar lógica Windows (
taskkill) y POSIX (process.kill) en módulos específicos.
8.3 Revisar shell: true en spawn
- Motivo: reducir superficie y comportamiento inesperado.
- Plan seguro: introducir feature-flag para comparar comportamiento antes de retirar.
9) Renombrados sugeridos (bajo riesgo)
loadingRoute→loadingDashboardRoute.dashboardRoute→mainDashboardRoute.baseUrl→nodecgBaseUrl.launch()→launchApplication().stopNodeCG()→stopNodecgProcessGracefully().
Aplicar renombrados con cambios atómicos y tests para evitar breakages.
10) Qué crearía nuevo
docs/architecture.md(mapa de módulos y flujo de inicio).docs/troubleshooting.md(errores comunes)..env.example(variables documentadas y defaults).scripts/doctor.mjs(chequeo preflight).tests/main/*.test.ts(suite base de utilidades y lifecycle).
11) Qué eliminaría (si no se usa)
- Configuraciones o scripts redundantes de rebuild nativo cuando no sean necesarios para el bundle actual.
- Referencias legacy de rutas de iconos duplicadas si ya hay estrategia única.
Eliminar solo tras comprobar uso real en CI y build local.
12) Plan de ejecución por fases (sin romper nada)
- Fase 0 – Baseline: typecheck + build + smoke manual.
- Fase 1 – Refactor mecánico: mover código a módulos sin cambiar comportamiento.
- Fase 2 – Tests: cubrir utilidades y lifecycle.
- Fase 3 – Hardening: validación de config, seguridad de navegación y shutdown.
- Fase 4 – Packaging: iconos por plataforma y CI.
- Fase 5 – Limpieza final: renombrados y eliminación de deuda residual.
13) Criterios de aceptación por cambio
npm run typechecken verde.npm run builden verde.- Arranque correcto mostrando loading y luego dashboard.
- Cierre correcto sin procesos huérfanos de NodeCG.
- Sin cambios visibles no intencionales en UX.
14) Priorización recomendada
- Alta: separación de módulos, tests base, hardening de shutdown y readiness.
- Media: validación tipada de env vars, logging estructurado, CI.
- Baja: renombrados cosméticos y optimización de tamaño de paquete.