Arquitectura del Sistema

La base de código de Glastor ReadmeGen está organizada modularmente bajo el directorio src/, separando claramente la capa de interfaz (CLI), análisis de proyecto, generadores de contenido y utilidades de bajo nivel.


📂 Organización del Proyecto

src/
├── main.ts               # Punto de entrada de la CLI (Cliffy)
├── mod.ts                # API programática principal (generateReadme)
│
├── project/              # Orquestador del análisis de proyecto
│   └── analyze.ts        # Recopila y coordina todos los parsers y generadores
│
├── parsers/              # Módulos de introspección estática
│   ├── deno_json.ts      # Lee y valida deno.json / deno.jsonc
│   ├── import_map.ts     # Lee import_map.json
│   ├── imports.ts        # Analiza importaciones externas y locales
│   ├── project_files.ts  # Detecta archivos clave (LICENSE, Dockerfile, etc.)
│   ├── source_code.ts    # Extractor de exportaciones y símbolos
│   ├── source_code_ast.ts# Analizador léxico y AST de TypeScript
│   ├── tests.ts          # Detecta frameworks y archivos de test
│   └── workflows.ts      # Lee y parsea GitHub Actions en .github/workflows/
│
├── generators/           # Generadores de secciones en Markdown
│   ├── api.ts            # Formatea la documentación de funciones y tipos
│   ├── badges.ts         # Construye URLs de badges (shields.io)
│   ├── examples.ts       # Genera snippets de código de ejemplo
│   └── toc.ts            # Construye la tabla de contenidos interactiva
│
├── templates/            # Motor y archivos de plantillas
│   ├── minimal.md        # Plantilla compacta
│   ├── modern.md         # Plantilla estándar moderna
│   ├── detailed.md       # Plantilla exhaustiva con todas las secciones
│   ├── load.ts           # Cargador de plantillas locales
│   └── render.ts         # Motor de renderizado y reemplazo {{placeholders}}
│
└── utils/                # Utilidades auxiliares
    ├── file_system.ts    # Verificaciones de escritura y permisos
    ├── init_wizard.ts    # Asistente interactivo por consola
    ├── logger.ts         # Mensajes con formato, colores y estados
    ├── readme_infer.ts   # Inferencia de descripciones desde READMEs existentes
    └── user_config.ts    # Carga y validación de .readmegen.json

🧩 Responsabilidad de los Componentes

1. Interfaz de Línea de Comandos (src/main.ts)

Construida con @cliffy/command, gestiona los parámetros del usuario:

  • --template: Selecciona el estilo de plantilla a aplicar.
  • --output: Define la ruta del archivo de destino.
  • --force: Permite sobrescribir archivos protegidos.
  • Subcomando init: Lanza el asistente guiado para crear .readmegen.json.

2. Coordinador de Análisis (src/project/analyze.ts)

Es el cerebro del análisis. Ejecuta en paralelo (Promise.all) la lectura de todos los aspectos del repositorio:

  • Extrae la versión de Deno y scripts de tareas de deno.json.
  • Detecta si existen suites de pruebas automáticas.
  • Analiza los workflows de GitHub Actions para asociar las insignias de build correspondientes.
  • Consolida todos los datos en una estructura unificada TemplateData.

3. Sistema de Sanitización (src/mod.ts)

Para evitar que código TypeScript de depuración o comentarios de desarrollo terminen en el archivo Markdown final, sanitizeGeneratedMarkdown aplica filtros mediante expresiones regulares que eliminan:

  • Caracteres invisibles y Byte Order Marks (BOM: \uFEFF, \u200B).
  • Líneas residuales de código fuente (export type, import ...).
  • Espaciado redundante y saltos de línea consecutivos.