mirror of
https://github.com/Pandipipas/scoreko-dev.git
synced 2026-06-06 03:32:06 +00:00
4.0 KiB
4.0 KiB
Architecture Rules
Estas reglas son obligatorias para cualquier refactor posterior. Están pensadas para mantener boundaries claros, reducir acoplamiento y preservar comportamiento durante la migración.
TypeScript
- No usar
any. - Usar
unknownsolo en boundaries. - Normalizar
unknowninmediatamente al entrar al dominio. - No duplicar tipos entre extension y browser.
- Todo replicant nuevo debe tener schema y tipo generado.
- Regenerar tipos siempre desde schemas.
Boundaries NodeCG
- No acceder directamente a replicants fuera de
nodecg/browseronodecg/extension. - No usar
nodecg.sendMessagedirecto en componentes o composables de feature. - No usar
nodecg.Replicantdirecto fuera de la capanodecg. - No depender de
nodecgglobal salvo dentro del boundary correspondiente. - Centralizar nombres de replicants en
replicantNames. - Centralizar nombres de messages en una capa de messages.
Shared y Dominio
shared/domainsolo puede contener funciones puras, tipos, normalizadores y mapping.shared/domainno puede importar Vue.shared/domainno puede importar NodeCG.shared/domainno puede acceder al DOM.- Preferir funciones puras para normalización, parsing, derivación y mapping.
- Validar o normalizar datos externos al cruzar boundaries.
Dashboard
- Los stores mantienen estado de aplicación y sync con replicants.
- Los stores no deben contener UI compleja.
- Las vistas no deben implementar features completos.
- Los componentes deben ser pequeños y orientados a UI.
- Los composables de feature no deben hablar directamente con NodeCG.
- Toda lógica de negocio debe vivir en dominio, services o stores según corresponda.
Extension
extension/modulesdebe contener handlers pequeños registrados desde bootstrap explícito.- No mezclar FS, HTTP, replicants, downloads y parsing en el mismo módulo.
- Todo handler NodeCG debe declarar claramente qué message escucha y qué replicants toca.
- Todo acceso a
nodecg.listenFor,nodecg.Replicant,nodecg.mounty logging debe pasar pornodecg/extension.
Packs
- Pack registry, manifests, downloads y estado instalado deben compartir tipos comunes.
- Todo replicant de packs debe tener schema.
- Mantener nombres y defaults actuales durante la migración.
- Validar manifests en el boundary antes de exponerlos al dominio o UI.
- No mantener estado mutable de módulo opaco para packs instalados.
- No usar
refde Vue dentro de shared.
Integraciones
- Providers como Start.gg y Challonge deben compartir patrón de OAuth, session polling y parsing.
- Cada provider debe tener cliente propio y normalizadores propios.
- El flujo OAuth debe apoyarse en
oauth-server.tscuando aplique. - Todo timer o polling debe tener cleanup.
- Todo listener debe tener cleanup.
Graphics y Overlays
- Los overlays se refactorizan al final.
- Primero preservar píxel y comportamiento; después limpiar internals.
- No cambiar CSS, SVG, posiciones o markup sensible sin baseline visual.
- Extraer view models antes de deduplicar layout.
- Helpers compartidos de flags, score animation y text fitting deben vivir en
graphics/shared.
Side Effects
- No side effects en imports salvo bootstrap explícito.
- No estado mutable de módulo salvo singleton justificado y documentado.
- Todo timer/listener debe registrar cleanup.
- No wrappers vacíos.
- No inventar un patrón si una función simple basta.
Naming
| Elemento | Regla | Ejemplo |
|---|---|---|
| Replicants | camelCase, constantes en replicantNames |
graphicsSettings |
| Messages | Namespaced por dominio | packs:download |
| Stores | use<Feature>Store |
useScoreboardStore |
| Services | create<Domain>Service o create<Provider>Client |
createPackService |
| View models | use<Overlay>ViewModel |
useScoreboardOverlayViewModel |
Compatibilidad
- Mantener comportamiento público durante la migración.
- Mantener nombres públicos hasta completar el refactor.
- No romper overlays sin baseline visual y verificación.
- Priorizar eliminar legacy muerto antes que envolverlo.