5.6 KiB
Migration Plan
Este plan define el orden de migración. Debe ejecutarse de forma secuencial para reducir riesgo, preservar comportamiento y evitar reescrituras amplias sin baseline.
Principios
- Mantener nombres públicos y comportamiento hasta completar la migración.
- Congelar comportamiento antes de mover responsabilidades.
- Eliminar legacy muerto antes de envolverlo.
- Separar boundaries antes de reescribir módulos complejos.
- Tocar overlays al final y con verificación visual.
Secuencia
| Paso | Objetivo | Tipo |
|---|---|---|
| 1 | Congelar comportamiento con screenshots de overlays, fixtures de replicants, build, typecheck y lint baseline. | Baseline |
| 2 | Quitar example*, regenerar schema types y eliminar .js redundantes en src/shared si no se usan. |
Limpieza |
| 3 | Crear nodecg/browser y nodecg/extension sin cambiar comportamiento. |
Boundary |
| 4 | Añadir schemas para replicants de packs manteniendo nombres y defaults exactos. | Contratos |
| 5 | Extraer tipos/config de packs a shared y ajustar tsconfig.extension para no duplicar. |
Shared |
| 6 | Reescribir controladamente pack-manager. |
Reescritura |
| 7 | Reescribir controladamente usePackRegistry y fighting-characters. |
Reescritura |
| 8 | Dividir useIntegration. |
Modularización |
| 9 | Dividir Players.vue. |
Modularización |
| 10 | Dividir Settings.vue. |
Modularización |
| 11 | Refactor suave de dashboard scoreboard para eliminar duplicación left/right. | Modularización |
| 12 | Extraer view models y helpers de overlays sin tocar CSS/markup al inicio. | Overlays |
| 13 | Añadir tests puros para normalizadores y lógica de dominio. | Tests |
| 14 | Añadir verificación visual Playwright para overlays principales. | Visual QA |
Detalle por Fase
1. Congelar Comportamiento
Crear una baseline antes de refactorizar:
- Screenshots de
scoreboard,scoreboard-2xkoycommentary. - Fixtures representativos de replicants.
- Resultado actual de build y typecheck.
- Resultado actual de lint, incluyendo los 3 errores reales conocidos.
2. Limpiar Dead y Stale Code
Eliminar código que no representa comportamiento productivo:
exampleReplicant.example.ts.ExampleType.- Schema de ejemplo.
- Tipos generados stale.
.jsredundantes ensrc/sharedsi se confirma que no se usan.
3. Crear Boundaries NodeCG
Introducir APIs sin cambiar comportamiento:
src/nodecg/browser/replicants.tssrc/nodecg/browser/messages.tssrc/nodecg/extension/replicants.tssrc/nodecg/extension/messages.tssrc/nodecg/extension/context.ts
El objetivo es centralizar acceso a replicants, messages, logging y NodeCG globals.
4. Centralizar Contratos Realtime
Añadir schemas para:
installedPackspackRegistrydownloadStatesavailableUpdates
Los nombres y defaults deben mantenerse exactamente para no romper dashboard, extensión ni overlays.
5. Extraer Shared de Packs
Mover a shared:
- Tipos de manifest.
- Tipos de registry.
- Tipos de estado de descarga.
- Config derivada común.
- Validación ligera en boundaries.
No duplicar tipos entre extension y browser.
6. Reescritura Controlada de Pack Manager
Separar pack-manager.ts en módulos pequeños:
| Módulo | Responsabilidad |
|---|---|
| Registry client | Fetch y normalización del registry remoto. |
| Downloader | Descargas, progreso y errores. |
| Disk store | Lectura/escritura en disco. |
| Static mount | Exposición HTTP de assets instalados. |
| Handlers | Registro de mensajes NodeCG. |
| Replicant sync | Actualización centralizada de replicants. |
7. Reescritura de Pack Registry Runtime
Rehacer usePackRegistry y fighting-characters para:
- Quitar estado mutable de módulo opaco.
- Evitar
refen shared. - Modelar packs instalados como estado explícito.
- Cargar manifests mediante boundaries claros.
- Eliminar comentarios que contradicen el estado real de assets.
8. Dividir Integraciones
Extraer useIntegration en piezas:
nodecgMessageClientoauthClienttemporaryPlayerstournamentImport
Cada pieza debe tener cleanup explícito para timers/listeners.
9. Dividir Players
Extraer desde Players.vue:
PlayersTablePlayerEditorDialogIntegrationImportCardImportPlayersDialog
La vista debe coordinar el feature, no contener la implementación completa.
10. Dividir Settings
Extraer desde Settings.vue:
LanguageSettingsShortcutSettingsIntegrationSettings
Mantener UI Quasar y comportamiento actual.
11. Refactor Suave de Scoreboard Dashboard
Eliminar duplicación left/right con subcomponentes pequeños, sin cambiar el comportamiento público ni el layout principal.
12. Overlays al Final
Primero extraer sin modificar presentación:
- View models.
- Helpers de flags.
- Helpers de score animation.
- Helpers de text fitting.
Después de verificar baseline visual, deduplicar internals.
13. Tests Puros
Añadir tests para:
- Normalizadores.
- Pack registry.
- Shortcut parsing.
- Country resolving.
- Bracket round formatting.
14. Verificación Visual
Añadir Playwright para overlays principales:
scoreboard.scoreboard-2xko.commentary.
Debe validar screenshots o checks visuales estables antes de tocar CSS sensible.
Clasificación de Trabajo
| Categoría | Incluye |
|---|---|
| Automatizable | Moves/imports, schema generation, lint autofix, snapshots. |
| Reescritura controlada | Packs y registry runtime. |
| División | Players.vue, Settings.vue, overlays. |
| Conservar | Quasar UI, Pinia, schemas, oauth-server, concepto de store-sync, layout visual de overlays. |