nest-event
    TypeScript icon, indicating that this package has built-in type declarations

    1.0.8 • Public • Published

    Nest Event

    NPM Version Package License NPM Downloads Travis

    Event handler for Nest.js framework with decorators

    Features

    • Communicate between modules without import
    • Organize event handlers with decorators
    • Work with multiple Event Emitters

    Installation

    $ npm i --save nest-event

    Usage

    Import NestEventModule into your root module (AppModule)

    // app.module.ts
     
    import { Module } from '@nestjs/common';
    import { AppController } from './app.controller';
    import { AppService } from './app.service';
    import { NestEventModule } from 'nest-event';
    @Module({
      imports: [NestEventModule],
      controllers: [AppController],
      providers: [AppService],
    })
    export class AppModule {}

    Nest Event is coming with an internal event emitter. If you provide one without a name, the module do not create the internal emitter. Also, you can use any instance with extended from EventEmitter

    To provide an emitter use @Emitter decorator.

    import { EventEmitter } from 'events';
    import { Injectable } from '@nestjs/common';
    import { Emitter } from './nest-event';
     
    @Emitter()
    export class MyEventEmitter extends EventEmitter {}

    You can provide multiple emitters with passing a name.

    @Emitter('ws-emitter')
    export class WebsocketClient extends Websocket {}

    Event Handler

    To adding a listener for an event you can use @On decorator.

    import { Injectable } from '@nestjs/common';
    import { On } from './nest-event';
    import { User } from './interfaces';
     
    @Injectable()
    export class EmailService {
     
      @On('user-created')
      onUserCreated(user: User){
        // send verification email
      }
    }

    If you have multiple emitters you can separate the handlers with @From decorator.

      @From('ws-emitter')
      @On('subscribe')
      onSubscribe(channelstring){
        // do something
      }

    Event Emitter

    To access your emitters in different modules, controllers etc. You can use NestEventEmitter

    import { NestEventEmitter } from './nest-event';
     
    @Controller('user')
    export class UserController {
      constructor(
        private readonly nestEventEmitter: NestEventEmitter,
        ) {}
     
      @Post('signup')
      signup() {
        // ...
        this.nestEventEmitter.emit('user-created', user);
      }
    }

    If you provide multiple emitters you can select one with:

     this.nestEventEmitter.emitter('my-emitter').emit('user-created', user);

    Future Goals

    • Add tests;

    Contributing

    You are welcome to contribute to this project, just open a PR.

    License

    Install

    npm i nest-event

    DownloadsWeekly Downloads

    589

    Version

    1.0.8

    License

    MIT

    Unpacked Size

    406 kB

    Total Files

    33

    Last publish

    Collaborators

    • yak0