Skip to content

Commit

Permalink
fix(event-emitter): use $onInit/$onReady instead $afterListen
Browse files Browse the repository at this point in the history
  • Loading branch information
Romakita committed May 21, 2023
1 parent 9e0d8ae commit 243f304
Show file tree
Hide file tree
Showing 2 changed files with 30 additions and 19 deletions.
2 changes: 1 addition & 1 deletion packages/third-parties/event-emitter/jest.config.js
Expand Up @@ -7,7 +7,7 @@ module.exports = {
coverageThreshold: {
global: {
statements: 100,
branches: 89.28,
branches: 90.62,
functions: 100,
lines: 100
}
Expand Down
47 changes: 29 additions & 18 deletions packages/third-parties/event-emitter/src/EventEmitterModule.ts
Expand Up @@ -7,7 +7,7 @@ import {EventEmitterService} from "./services/EventEmitterFactory";
@Module()
export class EventEmitterModule {
@Constant("eventEmitter.disableSummary", false)
disableSummary: boolean;
private disableSummary: boolean;

@Inject()
protected logger: Logger;
Expand All @@ -21,10 +21,15 @@ export class EventEmitterModule {
@Constant("eventEmitter.enabled", false)
private loadEventEmitter: boolean;

async $afterListen(): Promise<any> {
$onInit() {
if (this.loadEventEmitter) {
const providers = this.injector.getProviders();
providers.forEach((provider) => this.bindEventListeners(provider));
}
}

async $onReady(): Promise<any> {
if (this.loadEventEmitter) {
const providers = this.getProviders();
providers.forEach((provider) => this.addEventListenerForProvider(provider));
if (!this.disableSummary) {
this.printEvents();
}
Expand All @@ -37,6 +42,7 @@ export class EventEmitterModule {
public printEvents() {
const list = this.eventEmitter.eventNames().map((eventName) => {
const listenerCount = this.eventEmitter.listenerCount(eventName).toString();

return {
eventName,
listenerCount
Expand All @@ -56,28 +62,33 @@ export class EventEmitterModule {
this.logger.info("\n" + str.trim());
}

protected getProviders(): Provider<any>[] {
return Array.from(this.injector.getProviders());
private bindEventListeners(provider: Provider<any>) {
this.bindOn(provider);
this.bindOnAny(provider);
}

private addEventListenerForProvider(provider: Provider<any>) {
const store = provider.store.get<EventEmitterStore | undefined>("eventEmitter");
private getListener(provider: Provider<any>, propertyKey: string) {
const instance = this.injector.get(provider.token);
return instance[propertyKey].bind(instance) as ListenerFn;
}

const eventListenerDefinitions = Object.entries(store?.onEvent || {});
private bindOn(provider: Provider) {
const store = provider.store.get<EventEmitterStore | undefined>("eventEmitter");

for (const [propertyKey, {event, options}] of eventListenerDefinitions) {
const instance = this.injector.get(provider.token);
Object.entries(store?.onEvent || {}).forEach(([propertyKey, {event, options}]) => {
const listenerFn = this.getListener(provider, propertyKey);

const listenerFn: ListenerFn = instance[propertyKey].bind(instance) as ListenerFn;
this.eventEmitter.on(event, listenerFn, options);
}
});
}

const anyEventListenerDefinitions = Object.keys(store?.onAny || {});
for (const propertyKey of anyEventListenerDefinitions) {
const instance = this.injector.get(provider.token);
private bindOnAny(provider: Provider) {
const store = provider.store.get<EventEmitterStore | undefined>("eventEmitter");

Object.keys(store?.onAny || {}).forEach((propertyKey) => {
const listenerFn = this.getListener(provider, propertyKey);

const listenerFn: ListenerFn = instance[propertyKey].bind(instance) as ListenerFn;
this.eventEmitter.onAny(listenerFn);
}
});
}
}

0 comments on commit 243f304

Please sign in to comment.