@hazeljs/event-emitter 0.2.0-alpha.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +192 -0
- package/README.md +117 -0
- package/dist/event-emitter.module.d.ts +68 -0
- package/dist/event-emitter.module.d.ts.map +1 -0
- package/dist/event-emitter.module.js +144 -0
- package/dist/event-emitter.module.test.d.ts +2 -0
- package/dist/event-emitter.module.test.d.ts.map +1 -0
- package/dist/event-emitter.module.test.js +280 -0
- package/dist/event-emitter.service.d.ts +33 -0
- package/dist/event-emitter.service.d.ts.map +1 -0
- package/dist/event-emitter.service.js +58 -0
- package/dist/event-emitter.service.test.d.ts +2 -0
- package/dist/event-emitter.service.test.d.ts.map +1 -0
- package/dist/event-emitter.service.test.js +61 -0
- package/dist/event-emitter.types.d.ts +61 -0
- package/dist/event-emitter.types.d.ts.map +1 -0
- package/dist/event-emitter.types.js +2 -0
- package/dist/index.d.ts +12 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +16 -0
- package/dist/on-event.decorator.d.ts +36 -0
- package/dist/on-event.decorator.d.ts.map +1 -0
- package/dist/on-event.decorator.js +49 -0
- package/dist/on-event.decorator.test.d.ts +2 -0
- package/dist/on-event.decorator.test.d.ts.map +1 -0
- package/dist/on-event.decorator.test.js +136 -0
- package/package.json +54 -0
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
require("reflect-metadata");
|
|
13
|
+
const on_event_decorator_1 = require("./on-event.decorator");
|
|
14
|
+
describe('OnEvent decorator', () => {
|
|
15
|
+
it('should define ON_EVENT_METADATA_KEY', () => {
|
|
16
|
+
expect(typeof on_event_decorator_1.ON_EVENT_METADATA_KEY).toBe('symbol');
|
|
17
|
+
});
|
|
18
|
+
it('should add metadata for single event', () => {
|
|
19
|
+
class TestHandler {
|
|
20
|
+
handleOrderCreated(_payload) { }
|
|
21
|
+
}
|
|
22
|
+
__decorate([
|
|
23
|
+
(0, on_event_decorator_1.OnEvent)('order.created'),
|
|
24
|
+
__metadata("design:type", Function),
|
|
25
|
+
__metadata("design:paramtypes", [Object]),
|
|
26
|
+
__metadata("design:returntype", void 0)
|
|
27
|
+
], TestHandler.prototype, "handleOrderCreated", null);
|
|
28
|
+
const metadata = (0, on_event_decorator_1.getOnEventMetadata)(new TestHandler());
|
|
29
|
+
expect(metadata).toHaveLength(1);
|
|
30
|
+
expect(metadata[0].event).toBe('order.created');
|
|
31
|
+
expect(metadata[0].methodName).toBe('handleOrderCreated');
|
|
32
|
+
expect(metadata[0].options).toEqual({ suppressErrors: true });
|
|
33
|
+
});
|
|
34
|
+
it('should add metadata for multiple events on same class', () => {
|
|
35
|
+
class TestHandler {
|
|
36
|
+
handleCreated(_payload) { }
|
|
37
|
+
handleUpdated(_payload) { }
|
|
38
|
+
}
|
|
39
|
+
__decorate([
|
|
40
|
+
(0, on_event_decorator_1.OnEvent)('order.created'),
|
|
41
|
+
__metadata("design:type", Function),
|
|
42
|
+
__metadata("design:paramtypes", [Object]),
|
|
43
|
+
__metadata("design:returntype", void 0)
|
|
44
|
+
], TestHandler.prototype, "handleCreated", null);
|
|
45
|
+
__decorate([
|
|
46
|
+
(0, on_event_decorator_1.OnEvent)('order.updated'),
|
|
47
|
+
__metadata("design:type", Function),
|
|
48
|
+
__metadata("design:paramtypes", [Object]),
|
|
49
|
+
__metadata("design:returntype", void 0)
|
|
50
|
+
], TestHandler.prototype, "handleUpdated", null);
|
|
51
|
+
const metadata = (0, on_event_decorator_1.getOnEventMetadata)(new TestHandler());
|
|
52
|
+
expect(metadata).toHaveLength(2);
|
|
53
|
+
expect(metadata[0].event).toBe('order.created');
|
|
54
|
+
expect(metadata[0].methodName).toBe('handleCreated');
|
|
55
|
+
expect(metadata[1].event).toBe('order.updated');
|
|
56
|
+
expect(metadata[1].methodName).toBe('handleUpdated');
|
|
57
|
+
});
|
|
58
|
+
it('should merge custom options with defaults', () => {
|
|
59
|
+
class TestHandler {
|
|
60
|
+
handleEvent(_payload) { }
|
|
61
|
+
}
|
|
62
|
+
__decorate([
|
|
63
|
+
(0, on_event_decorator_1.OnEvent)('test.event', { async: true, suppressErrors: false }),
|
|
64
|
+
__metadata("design:type", Function),
|
|
65
|
+
__metadata("design:paramtypes", [Object]),
|
|
66
|
+
__metadata("design:returntype", void 0)
|
|
67
|
+
], TestHandler.prototype, "handleEvent", null);
|
|
68
|
+
const metadata = (0, on_event_decorator_1.getOnEventMetadata)(new TestHandler());
|
|
69
|
+
expect(metadata[0].options).toEqual({
|
|
70
|
+
async: true,
|
|
71
|
+
suppressErrors: false,
|
|
72
|
+
});
|
|
73
|
+
});
|
|
74
|
+
it('should support array of events', () => {
|
|
75
|
+
class TestHandler {
|
|
76
|
+
handleMultiple(_payload) { }
|
|
77
|
+
}
|
|
78
|
+
__decorate([
|
|
79
|
+
(0, on_event_decorator_1.OnEvent)(['event.a', 'event.b']),
|
|
80
|
+
__metadata("design:type", Function),
|
|
81
|
+
__metadata("design:paramtypes", [Object]),
|
|
82
|
+
__metadata("design:returntype", void 0)
|
|
83
|
+
], TestHandler.prototype, "handleMultiple", null);
|
|
84
|
+
const metadata = (0, on_event_decorator_1.getOnEventMetadata)(new TestHandler());
|
|
85
|
+
expect(metadata[0].event).toEqual(['event.a', 'event.b']);
|
|
86
|
+
});
|
|
87
|
+
it('should support symbol as event', () => {
|
|
88
|
+
const sym = Symbol('custom-event');
|
|
89
|
+
class TestHandler {
|
|
90
|
+
handleSymbol(_payload) { }
|
|
91
|
+
}
|
|
92
|
+
__decorate([
|
|
93
|
+
(0, on_event_decorator_1.OnEvent)(sym),
|
|
94
|
+
__metadata("design:type", Function),
|
|
95
|
+
__metadata("design:paramtypes", [Object]),
|
|
96
|
+
__metadata("design:returntype", void 0)
|
|
97
|
+
], TestHandler.prototype, "handleSymbol", null);
|
|
98
|
+
const metadata = (0, on_event_decorator_1.getOnEventMetadata)(new TestHandler());
|
|
99
|
+
expect(metadata[0].event).toBe(sym);
|
|
100
|
+
});
|
|
101
|
+
it('should default suppressErrors to true when not provided', () => {
|
|
102
|
+
class TestHandler {
|
|
103
|
+
handleEvent(_payload) { }
|
|
104
|
+
}
|
|
105
|
+
__decorate([
|
|
106
|
+
(0, on_event_decorator_1.OnEvent)('test.event', { async: true }),
|
|
107
|
+
__metadata("design:type", Function),
|
|
108
|
+
__metadata("design:paramtypes", [Object]),
|
|
109
|
+
__metadata("design:returntype", void 0)
|
|
110
|
+
], TestHandler.prototype, "handleEvent", null);
|
|
111
|
+
const metadata = (0, on_event_decorator_1.getOnEventMetadata)(new TestHandler());
|
|
112
|
+
expect(metadata[0].options?.suppressErrors).toBe(true);
|
|
113
|
+
});
|
|
114
|
+
});
|
|
115
|
+
describe('getOnEventMetadata', () => {
|
|
116
|
+
it('should return empty array for class without @OnEvent decorators', () => {
|
|
117
|
+
class PlainClass {
|
|
118
|
+
}
|
|
119
|
+
const metadata = (0, on_event_decorator_1.getOnEventMetadata)(new PlainClass());
|
|
120
|
+
expect(metadata).toEqual([]);
|
|
121
|
+
});
|
|
122
|
+
it('should return metadata from class constructor', () => {
|
|
123
|
+
class TestHandler {
|
|
124
|
+
handle() { }
|
|
125
|
+
}
|
|
126
|
+
__decorate([
|
|
127
|
+
(0, on_event_decorator_1.OnEvent)('test'),
|
|
128
|
+
__metadata("design:type", Function),
|
|
129
|
+
__metadata("design:paramtypes", []),
|
|
130
|
+
__metadata("design:returntype", void 0)
|
|
131
|
+
], TestHandler.prototype, "handle", null);
|
|
132
|
+
const instance = new TestHandler();
|
|
133
|
+
const metadata = (0, on_event_decorator_1.getOnEventMetadata)(instance);
|
|
134
|
+
expect(metadata).toHaveLength(1);
|
|
135
|
+
});
|
|
136
|
+
});
|
package/package.json
ADDED
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@hazeljs/event-emitter",
|
|
3
|
+
"version": "0.2.0-alpha.1",
|
|
4
|
+
"description": "Event emitter module for HazelJS framework - event-driven architecture with decorators",
|
|
5
|
+
"main": "dist/index.js",
|
|
6
|
+
"types": "dist/index.d.ts",
|
|
7
|
+
"files": [
|
|
8
|
+
"dist"
|
|
9
|
+
],
|
|
10
|
+
"scripts": {
|
|
11
|
+
"build": "tsc",
|
|
12
|
+
"test": "jest --coverage --passWithNoTests",
|
|
13
|
+
"lint": "eslint \"src/**/*.ts\"",
|
|
14
|
+
"lint:fix": "eslint \"src/**/*.ts\" --fix",
|
|
15
|
+
"clean": "rm -rf dist"
|
|
16
|
+
},
|
|
17
|
+
"dependencies": {
|
|
18
|
+
"eventemitter2": "^6.4.9"
|
|
19
|
+
},
|
|
20
|
+
"devDependencies": {
|
|
21
|
+
"@types/node": "^20.17.50",
|
|
22
|
+
"@typescript-eslint/eslint-plugin": "^8.18.2",
|
|
23
|
+
"@typescript-eslint/parser": "^8.18.2",
|
|
24
|
+
"eslint": "^8.56.0",
|
|
25
|
+
"jest": "^29.7.0",
|
|
26
|
+
"ts-jest": "^29.1.2",
|
|
27
|
+
"typescript": "^5.3.3"
|
|
28
|
+
},
|
|
29
|
+
"peerDependencies": {
|
|
30
|
+
"@hazeljs/core": ">=0.2.0-beta.0"
|
|
31
|
+
},
|
|
32
|
+
"publishConfig": {
|
|
33
|
+
"access": "public"
|
|
34
|
+
},
|
|
35
|
+
"repository": {
|
|
36
|
+
"type": "git",
|
|
37
|
+
"url": "git+https://github.com/hazel-js/hazeljs.git",
|
|
38
|
+
"directory": "packages/event-emitter"
|
|
39
|
+
},
|
|
40
|
+
"keywords": [
|
|
41
|
+
"hazeljs",
|
|
42
|
+
"events",
|
|
43
|
+
"event-emitter",
|
|
44
|
+
"event-driven",
|
|
45
|
+
"decorators"
|
|
46
|
+
],
|
|
47
|
+
"author": "Muhammad Arslan <muhammad.arslan@hazeljs.com>",
|
|
48
|
+
"license": "Apache-2.0",
|
|
49
|
+
"bugs": {
|
|
50
|
+
"url": "https://github.com/hazeljs/hazel-js/issues"
|
|
51
|
+
},
|
|
52
|
+
"homepage": "https://hazeljs.com",
|
|
53
|
+
"gitHead": "cbc5ee2c12ced28fd0576faf13c5f078c1e8421e"
|
|
54
|
+
}
|