diff --git a/package-lock.json b/package-lock.json index 64c580a..0829b9b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@athenna/event", - "version": "5.2.0", + "version": "5.4.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@athenna/event", - "version": "5.2.0", + "version": "5.4.0", "license": "MIT", "devDependencies": { "@athenna/artisan": "^5.10.0", diff --git a/package.json b/package.json index a5808db..2e85ecd 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@athenna/event", - "version": "5.2.0", + "version": "5.4.0", "description": "The Athenna events handler with queue store. Based on Emittery syntax.", "license": "MIT", "author": "João Lenon ", diff --git a/src/annotations/Listener.ts b/src/annotations/Listener.ts index 8af277b..d5065db 100644 --- a/src/annotations/Listener.ts +++ b/src/annotations/Listener.ts @@ -21,6 +21,7 @@ import type { ListenerOptions } from '#src/types' export function Listener(options?: ListenerOptions): ClassDecorator { return (target: any) => { options = Options.create(options, { + camelAlias: target.name, alias: `App/Listeners/${target.name}`, connection: Config.get('queue.default'), type: 'transient' diff --git a/src/events/Listener.ts b/src/events/Listener.ts index a0ea4ce..b4c48b2 100644 --- a/src/events/Listener.ts +++ b/src/events/Listener.ts @@ -22,10 +22,20 @@ export class Listener { this.id = this.createId() } + /** + * Remove the listener. + */ public remove() { Event.removeListenerById(this.id) } + /** + * Run the listener. + */ + public async run(data: any) { + await this.closure(data) + } + private createId() { return createHash('sha256') .update(`${this.event ?? '*'}|${this.closure.toString()}`) diff --git a/src/providers/EventProvider.ts b/src/providers/EventProvider.ts index 0fe353f..e2c5368 100644 --- a/src/providers/EventProvider.ts +++ b/src/providers/EventProvider.ts @@ -54,12 +54,8 @@ export class EventProvider extends ServiceProvider { * Register the events file by importing the file. */ private async registerEvents(path: string) { - // Bust ESM import cache to guarantee the events file re-runs (tests/providers - // may register/shutdown provider multiple times in same process). - const resolvedPath = `${path}?version=${Math.random()}` - if (path.startsWith('#')) { - await Module.resolve(resolvedPath, this.getMeta()) + await Module.resolve(path, this.getMeta()) return } @@ -72,6 +68,6 @@ export class EventProvider extends ServiceProvider { return } - await Module.resolve(`${path}?version=${Math.random()}`, this.getMeta()) + await Module.resolve(path, this.getMeta()) } } diff --git a/tests/fixtures/events/index.ts b/tests/fixtures/events/index.ts index 56026a1..9481ee5 100644 --- a/tests/fixtures/events/index.ts +++ b/tests/fixtures/events/index.ts @@ -11,8 +11,8 @@ import { Event } from '#src' import { constants } from '#tests/fixtures/constants/index' Event.on('annotatedListener', 'annotatedListener') -Event.on('helloListener', 'helloListener') -Event.on('productListener', 'productListener') +Event.on('helloListener', 'HelloListener') +Event.on('productListener', 'ProductListener') Event.on('closureListener', ctx => { constants.RUN_MAP.closureListener = true diff --git a/tests/unit/annotations/ListenerAnnotationTest.ts b/tests/unit/annotations/ListenerAnnotationTest.ts index 872331c..1160965 100644 --- a/tests/unit/annotations/ListenerAnnotationTest.ts +++ b/tests/unit/annotations/ListenerAnnotationTest.ts @@ -24,7 +24,7 @@ export default class ListenerAnnotationTest extends BaseTest { const metadata = Annotation.getMeta(ProductListener) assert.isFalse(metadata.registered) - assert.isUndefined(metadata.camelAlias) + assert.equal(metadata.camelAlias, 'ProductListener') assert.equal(metadata.type, 'transient') assert.equal(metadata.connection, 'memory') assert.equal(metadata.alias, 'App/Listeners/ProductListener') diff --git a/tests/unit/providers/EventProviderTest.ts b/tests/unit/providers/EventProviderTest.ts index 7f60c2f..281b057 100644 --- a/tests/unit/providers/EventProviderTest.ts +++ b/tests/unit/providers/EventProviderTest.ts @@ -84,8 +84,8 @@ export class EventProviderTest { await new EventProvider().register() - assert.isTrue(ioc.has('helloListener')) - assert.isTrue(ioc.has('productListener')) + assert.isTrue(ioc.has('HelloListener')) + assert.isTrue(ioc.has('ProductListener')) assert.isTrue(ioc.has('annotatedListener')) assert.equal(Event.listenerCount('helloListener'), 1)