Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/onhate/nest-events
It's the same as @nestjs/event-emitter but allowing you to implement your own emitter, like AWS SNS, RabbitMQ.
https://github.com/onhate/nest-events
eventbridge eventemitter2 events lambda module nestjs pubsub sns sqs
Last synced: 8 days ago
JSON representation
It's the same as @nestjs/event-emitter but allowing you to implement your own emitter, like AWS SNS, RabbitMQ.
- Host: GitHub
- URL: https://github.com/onhate/nest-events
- Owner: onhate
- License: mit
- Created: 2023-08-13T20:38:15.000Z (about 1 year ago)
- Default Branch: main
- Last Pushed: 2023-12-14T19:02:31.000Z (11 months ago)
- Last Synced: 2024-10-12T01:09:38.688Z (24 days ago)
- Topics: eventbridge, eventemitter2, events, lambda, module, nestjs, pubsub, sns, sqs
- Language: TypeScript
- Homepage:
- Size: 206 KB
- Stars: 7
- Watchers: 3
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Nest Events @Emitter
Welcome to the Nest Events library! This library provides event handling and emitting capabilities for
your [NestJS](https://nestjs.com/) applications. With Nest Events, you can easily manage and trigger events within your
application, making it simpler to implement various communication patterns and workflows.It's the same as `@nestjs/event-emitter` but allowing you to implement your own emitter, like AWS SNS, RabbitMQ, etc.
A default emitter is already provided by default using [EventEmitter2](https://github.com/EventEmitter2/EventEmitter2).## Installation
To get started with Nest Events, you need to install the library using [npm](https://www.npmjs.com/)
or [yarn](https://yarnpkg.com/). Open your terminal and run the following command:```bash
npm install nest-events
```or
```bash
yarn add nest-events
```## Usage
### Importing the Module
To start using the Nest Events library, you need to import the `EventBusModule` into your NestJS application. In your
module file (e.g., `app.module.ts`), import the module like this:```typescript
import { Module } from '@nestjs/common';
import { EventBusModule } from 'nest-events';@Module({
imports: [EventBusModule.forRoot()],
})
export class AppModule {}
```### Emitting Events
You can emit events using the `EventBus` service provided by the library. Here's how you can emit an event:
```typescript
import { Injectable } from '@nestjs/common';
import { EventBus } from 'nest-events';@Injectable()
export class MyService {
constructor(private readonly eventBus: EventBus) {
}async doSomething() {
// ... your logic// Emit an event
await this.eventBus.emitAsync('myEvent', eventData);
}
}
```### Handling Events
To handle events, you can use decorators provided by the library. Here's an example of how to use the `@On` decorator to
handle an event:```typescript
import { Injectable } from '@nestjs/common';
import { On } from 'nest-events';@Injectable()
export class MyEventHandler {
@On('myEvent')
handleMyEvent(eventData: any) {
// Handle the event
console.log('Event received:', eventData);
}
}
```### Custom Emitters
Nest Events allows you to work with multiple emitters for different scenarios. You can define custom emitters and use
them accordingly.```typescript
import { DefaultEventEmitter, Emitter, EventBus, On } from 'nest-events';@Emitter('cloud')
export class CloudEmitter extends DefaultEventEmitter {
private sns: SNS;constructor() {
super();
this.sns = new SNS();
}async emitAsync(event: string, message: any): Promise {
try {
const params = {
Message: JSON.stringify(message),
TopicArn: 'arn:aws:sns:us-east-1:123456789012:MyTopic'
};
await this.sns.publish(params).promise();
return true;
} catch (error) {
console.error('Error emitting event:', error);
return false;
}
}
}@Injectable()
export class MyService {
constructor(private readonly eventBus: EventBus) {
}async doSomething() {
// ... your logic// Emit an event using the custom emitter
await this.eventBus.emitter('cloud').emitAsync('myEvent', eventData);
}
}@Injectable()
export class MyListener {
@On('myEvent')
handleCustomEvent(eventData: any) {
// Handle the event from the custom emitter
console.log('Custom event received:', eventData);
}
}
```## Configuration
The `EventBusModule.forRoot()` method accepts an optional configuration object.
See [EventEmitter2](https://github.com/EventEmitter2/EventEmitter2) for more configuration options details.
Here's an example of how to use it:```typescript
import { Module } from '@nestjs/common';
import { EventBusModule } from 'nest-events';@Module({
imports: [
EventBusModule.forRoot({
global: true // Set to "true" (default) to register as a global module
/* Additional configuration options from eventemitter2 can be added here */
})
]
})
export class AppModule {}
```## Contributing
We welcome contributions to the Nest Events library! If you find a bug, have a feature request, or want to improve the
documentation, please [open an issue](https://github.com/onhate/nest-events)
or [submit a pull request](https://github.com/onhate/nest-events).## License
This library is released under the [MIT License](https://opensource.org/licenses/MIT).
---
Happy event handling with Nest Events! 🎉