1.1.0 โข Published 1 year ago
@odg/events v1.1.0
Table of Contents
๐ Benefits
- ๐ Event Pattern for your project
- ๐จ Over 800 rules for pattern, possible errors and errors in Linter
- ๐ Code quality guaranteed
- ๐ข Ioc Container
- ๐งช 100% Test Coverage
๐ Libraries
๐ Dependencies
- Node.js 16 or later
- Yarn Optional/Recommended
- ODG TsConfig Last Version
โฉ Get Started
๐ Use Event Interface
Install in your project using this command
yarn add @odg/events
๐ฐ Usage
๐ Implementation
interface EventType {
"event1": number, // receive number
"userRegister": {
name: string,
age: number
} // receive object,
}
const eventBus = new EventEmitterBus<EventType>();
const callback = (eventMessage: string) => {
console.log(eventMessage);
};
eventBus.subscribe("event1", callback); // Subscribe before dispatch
eventBus.dispatch("event1", 1); // Send 1 to event1
eventBus.dispatch("userRegister", { name: "ODGodinho", age: 18 }); // Send object to userRegister
๐ Ioc
class Example {
public constructor(
private eventBus: EventEmitterBus<EventType>
) {
}
public example(){
// code ...
this.eventBus.dispatch("event1", 1);
// code ...
}
}
๐ Use Event Provider
๐ก Enum Events Types
enum EventName {
Example = "Example",
}
import { type EventObjectType } from "@odg/events";
import { type EventName } from "../app/Enums";
export interface EventExampleParameters {
// anything params
}
export interface EventBaseInterface extends EventObjectType {
[EventName.Example]: EventExampleParameters;
}
// IF the above interface does not have all existing laws in the enum it will report an error
export type EventTypes<T extends Record<EventName, unknown> = EventBaseInterface> = T;
๐ฅฎ Make a provider
import {
EventBusInterface,
EventServiceProvider as EventServiceProviderBase,
type EventListener,
} from "@odg/events";
import {
Container,
inject, injectable,
} from "inversify";
import { type EventTypes } from "../../Interfaces/EventsInterface";
import { ContainerName, EventName } from "../Enums";
import { type HomeEventListeners } from "../Listeners/HomeEventListeners";
@injectable()
export class EventServiceProvider extends EventServiceProviderBase<EventTypes> {
@inject(ContainerName.EventBus)
protected bus!: EventBusInterface<Events>;
/**
* Listeners for events in the application.
*
* @protected
* @type {EventListener<EventTypes>}
* @memberof EventServiceProvider
*/
protected listeners: EventListener<EventTypes> = {
[EventName.Example]: [
{
listener: new HomeEventListeners(), // You can use inversify
options: {},
},
],
};
public async boot(): Promise<void> {
await super.boot();
}
public async shutdown(): Promise<void> {
await super.shutdown();
}
}
๐ฆป Use Event Listeners
import { type EventListenerInterface } from "@odg/events";
import { LoggerInterface } from "@odg/log";
import { inject, injectable } from "inversify";
import { type EventExampleType, type EventTypes } from "../../Interfaces/EventsInterface";
import { ContainerName, type EventName } from "../Enums"; // If use inversify
import { PageFactoryType } from "../Factory/PageFactory";
@injectable()
export class HomeEventListeners implements EventListenerInterface<EventTypes, EventName.Example> {
@inject(ContainerName.Logger) // You can use constructor to inject
public log!: LoggerInterface;
public async handler({ page }: EventExampleType): Promise<void> {
await this.log.debug("HomeEventListeners is sended");
}
}
๐ป Prepare To Develop
Copy .env.example
to .env
and add the values according to your needs.
๐ Start Project
First install dependencies with the following command
yarn install
# or
npm install
๐จ Build and Run
To build the project, you can use the following command
if you change files, you need to run
yarn build
andyarn start
again
yarn build && yarn start
# or
yarn dev
๐งช Teste Code
To Test execute this command
yarn test
# or
yarn test:watch