Ir al contenido
Ir a Lynx

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.

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.

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

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 micromatch para localizar patrones complejos de rutas en el monorepo (por ejemplo, encontrar todos los *.module.ts en NestJS).
  • Escucha Activa (Watching): Se integra chokidar para los comandos que requieren escuchar alteraciones en los archivos de configuración y disparar reinicios o regeneraciones.

Para extender las capacidades operativas del monorepo añadiendo un nuevo comando a la CLI:

  1. Definir el Parseador: Crear la lógica de definición de argumentos (por ejemplo, opciones como --force o --path).
  2. 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 invocar process.exit().
  3. 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.