Skip to content
Go to Lynx

Arquitectura Lógica

This content is not available in your language yet.

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.