Arquitectura Lógica
La arquitectura de la CLI de Lynx se basa en la división estricta entre la definición de los argumentos en la interfaz y la ejecución lógica de bajo nivel de los comandos.
Estructura Core
Sección titulada «Estructura Core»El punto de anclaje principal para el binario se ubica en el orquestador central:
cli/lynx.ts: Actúa como el enrutador maestro. Captura la entrada de la terminal, parsea las opciones y delega la ejecución al comando correspondiente.utils/load-env.ts: Un mecanismo crítico y de alto rendimiento que evalúa, valida (con Zod) y carga en la sesión actual las variables de entorno necesarias antes de que la aplicación empiece a correr.
Flujo de un Comando
Sección titulada «Flujo de un Comando»El ciclo de vida de un comando, desde que el usuario presiona “Enter” hasta su resolución, es predecible:
graph TD
A[lynx <comando>] --> B{Parseo de Argumentos}
B --> C(Carga de Entorno: load-env)
C --> D[Ejecutor del Comando]
D --> E(Sistema de Archivos)
D --> F(Sincronización de Secretos)
E --> G[Salida Clack Prompts]
F --> G
style A fill:#000000,stroke:#333,stroke-width:2px,color:#fff
Sistema de Archivos y Dependencias Nativas
Sección titulada «Sistema de Archivos y Dependencias Nativas»A diferencia del resto de los paquetes en Lynx que son en su mayoría agnósticos al sistema, @lynx/cli interactúa pesadamente con el sistema operativo:
- Búsqueda por Patrones (Globbing): Se utiliza
micromatchpara localizar patrones complejos de rutas en el monorepo (por ejemplo, encontrar todos los*.module.tsen NestJS). - Escucha Activa (Watching): Se integra
chokidarpara los comandos que requieren escuchar alteraciones en los archivos de configuración y disparar reinicios o regeneraciones.
Creación de Comandos
Sección titulada «Creación de Comandos»Para extender las capacidades operativas del monorepo añadiendo un nuevo comando a la CLI:
- Definir el Parseador: Crear la lógica de definición de argumentos (por ejemplo, opciones como
--forceo--path). - Crear el Runner: Implementar la función de negocio (ej.
runMyCommand(opciones)). Aísla esta función puramente para que pueda ser evaluada y probada sin necesidad de invocarprocess.exit(). - Estilizar el Output: Utilizar las herramientas de
@clack/prompts(intro,spinner,outro) para comunicar en tiempo real el progreso de la acción al ingeniero de software.