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

Package Sidebar

Install

npm i nest-event

Weekly Downloads

316

Version

1.0.8

License

MIT

Unpacked Size

406 kB

Total Files

33

Last publish

Collaborators

  • yak0