0.1.10 • Published 4 months ago

nestjs-events-flow v0.1.10

Weekly downloads
-
License
MIT
Repository
github
Last release
4 months ago

nestjs-events-flow

Una librería de decoradores para NestJS que proporciona una manera sencilla de documentar y visualizar el flujo de eventos en tu aplicación.

Características

  • Decoradores para documentar eventos emitidos y escuchados
  • Generación automática de documentación de eventos en formato JSON
  • Visualización del flujo de eventos con diagramas Mermaid
  • Generación de definiciones de tipos TypeScript para eventos
  • Soporte para patrones comodín (wildcards) en eventos jerárquicos

Instalación

npm install nestjs-events-flow

Requisitos

  • NestJS 9.x o superior
  • @nestjs/event-emitter 2.x o superior
  • reflect-metadata

Desarrollo local

Este proyecto incluye dos opciones para probar el paquete localmente sin necesidad de publicarlo:

Opción 1: Usando referencia local directa (Recomendado)

# Construir el paquete principal
yarn build

# Ir al directorio del proyecto de ejemplo
cd sample

# Instalar dependencias (usará la referencia file:../ configurada en package.json)
yarn install

# Ejecutar el proyecto de ejemplo
yarn start:dev

Opción 2: Usando Yarn/NPM Link

# En el directorio raíz del paquete
yarn build
yarn link

# En el proyecto donde quieras usar el paquete
cd /ruta/a/tu/proyecto
yarn link nestjs-events-flow

Para más detalles, consulta el README del proyecto de ejemplo.

Uso básico

1. Configurar los módulos necesarios

Hay dos formas recomendadas de usar esta biblioteca:

Opción 1: Mantener EventEmitterModule y agregar EventsFlowGlobalModule

import { Module } from "@nestjs/common";
import { EventEmitterModule } from "@nestjs/event-emitter";
import { EventsFlowGlobalModule } from "nestjs-events-flow";
import { AppController } from "./app.controller";
import { AppService } from "./app.service";

@Module({
  imports: [
    // 1. Configura EventEmitterModule normalmente
    EventEmitterModule.forRoot({
      delimiter: ".",
      wildcard: true,
      global: true,
      verboseMemoryLeak: true,
    }),
    // 2. Añade EventsFlowGlobalModule para habilitar autocompletado en toda la app
    EventsFlowGlobalModule,
  ],
  controllers: [AppController],
  providers: [AppService],
})
export class AppModule {}

Opción 2: Proporcionar EventsFlowService en el módulo que lo necesita

import { Module } from "@nestjs/common";
import { EventEmitterModule } from "@nestjs/event-emitter";
import { EventsFlowService } from "nestjs-events-flow";
import { AppController } from "./app.controller";
import { AppService } from "./app.service";

@Module({
  imports: [
    EventEmitterModule.forRoot({...}),
  ],
  controllers: [AppController],
  providers: [
    AppService,
    // Proporcionar EventsFlowService directamente en el módulo
    EventsFlowService,
  ],
  // Exportarlo si es necesario en otros módulos
  exports: [EventsFlowService],
})
export class AppModule {}

Importante: EventsFlowService debe usarse después de configurar EventEmitterModule, ya que depende de su funcionalidad.

2. Usar los decoradores y servicios en tus controladores

import { Controller, Get } from "@nestjs/common";
import { EventsFlowService, Events, OnEvent } from "nestjs-events-flow";

@Controller()
export class AppController {
  // Usar EventsFlowService para obtener autocompletado de eventos
  constructor(private readonly eventService: EventsFlowService) {}

  @Get()
  @Events({
    emit: ["user.created"],
  })
  async createUser() {
    // Ahora tendrás autocompletado en emit
    await this.eventService.emit("user.created", { id: 1, name: "John" });
    return { success: true };
  }

  // Usar OnEvent con autocompletado
  @OnEvent("user.created")
  async handleUserCreated(data: any) {
    console.log("User created:", data);
    // Lógica para manejar el evento
  }

  // También puedes usar el decorador Events para múltiples eventos
  @Events({
    listen: ["user.created", "user.updated"],
  })
  async handleUserEvents(data: any) {
    console.log("User event:", data);
    // Lógica para manejar múltiples eventos
  }
}

3. Generar la documentación de eventos

En tu archivo main.ts:

import { NestFactory } from "@nestjs/core";
import { AppModule } from "./app.module";
import { extractEventsDocumentation } from "nestjs-events-flow";

async function bootstrap() {
  const app = await NestFactory.create(AppModule);

  // Generar documentación de eventos
  await extractEventsDocumentation(app, {
    outputDir: ".", // Directorio de salida
    typeFile: "listen-types.d.ts", // Archivo de definiciones TypeScript
    docFile: "public/event-doc.json", // Documentación JSON
    htmlFile: "public/events-flow.html", // Visualización HTML
    generateTypeFileInPackage: true, // Genera el archivo de tipos en el paquete en lugar del proyecto
  });

  await app.listen(3000);
}
bootstrap();

Visualización de flujo de eventos

Después de ejecutar tu aplicación, se generará un archivo HTML con un diagrama Mermaid que muestra el flujo de eventos entre los diferentes métodos de tus controladores y servicios.

Para ver el diagrama, simplemente abre el archivo public/events-flow.html en tu navegador.

Licencia

MIT

Reproducible Build

0.1.10

4 months ago

0.1.9

4 months ago

0.1.8

4 months ago

0.1.7

4 months ago

0.1.6

5 months ago

0.1.5

5 months ago

0.1.4

5 months ago

0.1.3

5 months ago

0.1.1

5 months ago

0.1.0

5 months ago