@arikajs/events 0.0.4 โ 0.0.5
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/README.md +61 -18
- package/dist/EventManager.d.ts +9 -2
- package/dist/EventManager.d.ts.map +1 -1
- package/dist/EventManager.js +66 -18
- package/dist/EventManager.js.map +1 -1
- package/dist/ListenerResolver.d.ts.map +1 -1
- package/dist/ListenerResolver.js +11 -6
- package/dist/ListenerResolver.js.map +1 -1
- package/dist/index.d.ts +4 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +11 -2
- package/dist/index.js.map +1 -1
- package/package.json +45 -43
package/README.md
CHANGED
|
@@ -110,6 +110,25 @@ export default {
|
|
|
110
110
|
|
|
111
111
|
## ๐ API Reference
|
|
112
112
|
|
|
113
|
+
### ๐ข Listener Priorities
|
|
114
|
+
|
|
115
|
+
You can control the order in which listeners execute by passing a priority (higher numbers run first).
|
|
116
|
+
|
|
117
|
+
```ts
|
|
118
|
+
Event.listen(OrderPlaced, ProcessPayment, 100);
|
|
119
|
+
Event.listen(OrderPlaced, SendEmail, 0); // Runs after payment
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
### ๐ Wildcard Events
|
|
123
|
+
|
|
124
|
+
Listen to a group of events using the `*` wildcard.
|
|
125
|
+
|
|
126
|
+
```ts
|
|
127
|
+
Event.listen('user.*', (event) => {
|
|
128
|
+
// Handled for 'user.login', 'user.registered', etc.
|
|
129
|
+
});
|
|
130
|
+
```
|
|
131
|
+
|
|
113
132
|
### `Event.dispatch(event)`
|
|
114
133
|
|
|
115
134
|
Dispatch an event instance.
|
|
@@ -134,26 +153,43 @@ Remove all listeners for an event.
|
|
|
134
153
|
Event.forget(OrderPlaced);
|
|
135
154
|
```
|
|
136
155
|
|
|
137
|
-
|
|
156
|
+
### ๐ Event Subscribers
|
|
138
157
|
|
|
139
|
-
|
|
158
|
+
Subscribers are classes that can subscribe to multiple events from within a single class.
|
|
140
159
|
|
|
160
|
+
```ts
|
|
161
|
+
class UserEventSubscriber {
|
|
162
|
+
subscribe(events) {
|
|
163
|
+
events.listen('user.login', this.onUserLogin);
|
|
164
|
+
events.listen('user.logout', this.onUserLogout);
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
onUserLogin(event) { /* ... */ }
|
|
168
|
+
onUserLogout(event) { /* ... */ }
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
Event.subscribe(UserEventSubscriber);
|
|
141
172
|
```
|
|
173
|
+
|
|
174
|
+
---
|
|
175
|
+
|
|
176
|
+
## ๐ Architecture
|
|
177
|
+
|
|
178
|
+
```text
|
|
142
179
|
events/
|
|
143
180
|
โโโ src/
|
|
144
|
-
โ โโโ
|
|
145
|
-
โ โโโ ListenerResolver.ts โ Resolves listeners via DI
|
|
146
|
-
โ โโโ Dispatcher.ts โ Executes listeners
|
|
147
|
-
โ โโโ Contracts/
|
|
181
|
+
โ โโโ Contracts
|
|
148
182
|
โ โ โโโ Listener.ts
|
|
149
|
-
โ โโโ Exceptions
|
|
183
|
+
โ โโโ Exceptions
|
|
150
184
|
โ โ โโโ EventException.ts
|
|
151
|
-
โ
|
|
185
|
+
โ โโโ Dispatcher.ts
|
|
186
|
+
โ โโโ EventManager.ts
|
|
187
|
+
โ โโโ index.ts
|
|
188
|
+
โ โโโ ListenerResolver.ts
|
|
152
189
|
โโโ tests/
|
|
153
190
|
โโโ package.json
|
|
154
191
|
โโโ tsconfig.json
|
|
155
|
-
|
|
156
|
-
โโโ LICENSE
|
|
192
|
+
โโโ README.md
|
|
157
193
|
```
|
|
158
194
|
|
|
159
195
|
---
|
|
@@ -171,22 +207,29 @@ events/
|
|
|
171
207
|
|
|
172
208
|
## ๐งช Testing
|
|
173
209
|
|
|
174
|
-
|
|
210
|
+
The Arika event system provides powerful testing helpers to mock event dispatching.
|
|
175
211
|
|
|
176
212
|
```ts
|
|
177
|
-
|
|
178
|
-
Event.
|
|
179
|
-
```
|
|
213
|
+
it('dispatches the order event', async () => {
|
|
214
|
+
Event.fake();
|
|
180
215
|
|
|
181
|
-
(
|
|
216
|
+
await someBusinessLogic();
|
|
217
|
+
|
|
218
|
+
Event.assertDispatched(OrderPlaced);
|
|
219
|
+
// Use a callback for custom assertions
|
|
220
|
+
Event.assertDispatched(OrderPlaced, (event) => {
|
|
221
|
+
return event.id === 123;
|
|
222
|
+
});
|
|
223
|
+
});
|
|
224
|
+
```
|
|
182
225
|
|
|
183
226
|
---
|
|
184
227
|
|
|
185
228
|
## ๐ฃ Roadmap
|
|
186
229
|
|
|
187
|
-
- [
|
|
188
|
-
- [
|
|
189
|
-
- [
|
|
230
|
+
- [x] Event subscribers
|
|
231
|
+
- [x] Wildcard events
|
|
232
|
+
- [x] Listener priorities
|
|
190
233
|
- [ ] Event discovery
|
|
191
234
|
- [ ] Event caching
|
|
192
235
|
|
package/dist/EventManager.d.ts
CHANGED
|
@@ -1,13 +1,20 @@
|
|
|
1
1
|
import { ListenerResolver } from './ListenerResolver';
|
|
2
2
|
export declare class EventManager {
|
|
3
3
|
private listeners;
|
|
4
|
+
private wildcards;
|
|
4
5
|
private dispatcher;
|
|
5
6
|
private resolver;
|
|
7
|
+
private dispatched;
|
|
8
|
+
private isFaking;
|
|
6
9
|
constructor(resolver?: ListenerResolver);
|
|
7
|
-
listen(event: any, listener: any): this;
|
|
10
|
+
listen(event: any, listener: any, priority?: number): this;
|
|
11
|
+
private setupWildcard;
|
|
12
|
+
subscribe(subscriber: any): void;
|
|
8
13
|
forget(event: any): this;
|
|
9
14
|
dispatch(event: any): Promise<void>;
|
|
15
|
+
private getSortedListeners;
|
|
16
|
+
private matchWildcard;
|
|
10
17
|
fake(): void;
|
|
11
|
-
assertDispatched(event: any): void;
|
|
18
|
+
assertDispatched(event: any, callback?: (event: any) => boolean): void;
|
|
12
19
|
}
|
|
13
20
|
//# sourceMappingURL=EventManager.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EventManager.d.ts","sourceRoot":"","sources":["../src/EventManager.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAGtD,qBAAa,YAAY;IACrB,OAAO,CAAC,SAAS,
|
|
1
|
+
{"version":3,"file":"EventManager.d.ts","sourceRoot":"","sources":["../src/EventManager.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAGtD,qBAAa,YAAY;IACrB,OAAO,CAAC,SAAS,CAA8D;IAC/E,OAAO,CAAC,SAAS,CAAiE;IAClF,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,QAAQ,CAAmB;IACnC,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,QAAQ,CAAkB;gBAEtB,QAAQ,CAAC,EAAE,gBAAgB;IAKhC,MAAM,CAAC,KAAK,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,QAAQ,GAAE,MAAU;IAY7D,OAAO,CAAC,aAAa;IAOd,SAAS,CAAC,UAAU,EAAE,GAAG;IAOzB,MAAM,CAAC,KAAK,EAAE,GAAG;IAMX,QAAQ,CAAC,KAAK,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC;IAahD,OAAO,CAAC,kBAAkB;IAyB1B,OAAO,CAAC,aAAa;IAMd,IAAI;IAIJ,gBAAgB,CAAC,KAAK,EAAE,GAAG,EAAE,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,KAAK,OAAO;CAazE"}
|
package/dist/EventManager.js
CHANGED
|
@@ -6,43 +6,91 @@ const ListenerResolver_1 = require("./ListenerResolver");
|
|
|
6
6
|
class EventManager {
|
|
7
7
|
constructor(resolver) {
|
|
8
8
|
this.listeners = new Map();
|
|
9
|
+
this.wildcards = new Map();
|
|
10
|
+
this.dispatched = [];
|
|
11
|
+
this.isFaking = false;
|
|
9
12
|
this.resolver = resolver || new ListenerResolver_1.ListenerResolver();
|
|
10
13
|
this.dispatcher = new Dispatcher_1.Dispatcher((ln) => this.resolver.resolve(ln));
|
|
11
14
|
}
|
|
12
|
-
listen(event, listener) {
|
|
13
|
-
if (
|
|
14
|
-
this.
|
|
15
|
+
listen(event, listener, priority = 0) {
|
|
16
|
+
if (typeof event === 'string' && event.includes('*')) {
|
|
17
|
+
this.setupWildcard(event, listener, priority);
|
|
18
|
+
}
|
|
19
|
+
else {
|
|
20
|
+
if (!this.listeners.has(event)) {
|
|
21
|
+
this.listeners.set(event, []);
|
|
22
|
+
}
|
|
23
|
+
this.listeners.get(event)?.push({ listener, priority });
|
|
15
24
|
}
|
|
16
|
-
this.listeners.get(event)?.push(listener);
|
|
17
25
|
return this;
|
|
18
26
|
}
|
|
27
|
+
setupWildcard(event, listener, priority) {
|
|
28
|
+
if (!this.wildcards.has(event)) {
|
|
29
|
+
this.wildcards.set(event, []);
|
|
30
|
+
}
|
|
31
|
+
this.wildcards.get(event)?.push({ listener, priority });
|
|
32
|
+
}
|
|
33
|
+
subscribe(subscriber) {
|
|
34
|
+
const subscriberInstance = typeof subscriber === 'function' ? new subscriber() : subscriber;
|
|
35
|
+
if (typeof subscriberInstance.subscribe === 'function') {
|
|
36
|
+
subscriberInstance.subscribe(this);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
19
39
|
forget(event) {
|
|
20
40
|
this.listeners.delete(event);
|
|
41
|
+
this.wildcards.delete(event);
|
|
21
42
|
return this;
|
|
22
43
|
}
|
|
23
44
|
async dispatch(event) {
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
let eventKey = event.constructor;
|
|
28
|
-
if (this.listeners.has(eventKey)) {
|
|
29
|
-
listeners = this.listeners.get(eventKey);
|
|
30
|
-
}
|
|
31
|
-
// Also check if we dispatched a class directly (rare but possible in some patterns)
|
|
32
|
-
if (typeof event === 'function' && this.listeners.has(event)) {
|
|
33
|
-
listeners = listeners.concat(this.listeners.get(event));
|
|
45
|
+
if (this.isFaking) {
|
|
46
|
+
this.dispatched.push(event);
|
|
47
|
+
return;
|
|
34
48
|
}
|
|
35
|
-
|
|
49
|
+
const listeners = this.getSortedListeners(event);
|
|
36
50
|
if (listeners.length > 0) {
|
|
37
51
|
await this.dispatcher.dispatch(event, listeners);
|
|
38
52
|
}
|
|
39
53
|
}
|
|
54
|
+
getSortedListeners(event) {
|
|
55
|
+
let listeners = [];
|
|
56
|
+
// 1. Get exact listeners
|
|
57
|
+
const eventKey = typeof event === 'object' ? event.constructor : event;
|
|
58
|
+
if (this.listeners.has(eventKey)) {
|
|
59
|
+
listeners = [...this.listeners.get(eventKey)];
|
|
60
|
+
}
|
|
61
|
+
// 2. Get wildcard listeners
|
|
62
|
+
if (typeof event === 'string' || (typeof event === 'object' && event.constructor.name)) {
|
|
63
|
+
const eventName = typeof event === 'string' ? event : event.constructor.name;
|
|
64
|
+
for (const [pattern, wildcardListeners] of this.wildcards.entries()) {
|
|
65
|
+
if (this.matchWildcard(pattern, eventName)) {
|
|
66
|
+
listeners = listeners.concat(wildcardListeners);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
// 3. Sort by priority (descending)
|
|
71
|
+
return listeners
|
|
72
|
+
.sort((a, b) => b.priority - a.priority)
|
|
73
|
+
.map(l => l.listener);
|
|
74
|
+
}
|
|
75
|
+
matchWildcard(pattern, eventName) {
|
|
76
|
+
const regex = new RegExp('^' + pattern.replace(/\./g, '\\.').replace(/\*/g, '.*') + '$');
|
|
77
|
+
return regex.test(eventName);
|
|
78
|
+
}
|
|
40
79
|
// Testing helpers
|
|
41
80
|
fake() {
|
|
42
|
-
|
|
81
|
+
this.isFaking = true;
|
|
43
82
|
}
|
|
44
|
-
assertDispatched(event) {
|
|
45
|
-
|
|
83
|
+
assertDispatched(event, callback) {
|
|
84
|
+
const found = this.dispatched.some(e => {
|
|
85
|
+
const matches = e instanceof event || e.constructor === event || e === event;
|
|
86
|
+
if (matches && callback) {
|
|
87
|
+
return callback(e);
|
|
88
|
+
}
|
|
89
|
+
return matches;
|
|
90
|
+
});
|
|
91
|
+
if (!found) {
|
|
92
|
+
throw new Error(`Event [${event.name || event}] was not dispatched.`);
|
|
93
|
+
}
|
|
46
94
|
}
|
|
47
95
|
}
|
|
48
96
|
exports.EventManager = EventManager;
|
package/dist/EventManager.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EventManager.js","sourceRoot":"","sources":["../src/EventManager.ts"],"names":[],"mappings":";;;AACA,6CAA0C;AAC1C,yDAAsD;AAGtD,MAAa,YAAY;
|
|
1
|
+
{"version":3,"file":"EventManager.js","sourceRoot":"","sources":["../src/EventManager.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ListenerResolver.d.ts","sourceRoot":"","sources":["../src/ListenerResolver.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAGhD,qBAAa,gBAAgB;IAGnB,OAAO,CAAC,QAAQ,EAAE,GAAG,GAAG,OAAO,CAAC,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"ListenerResolver.d.ts","sourceRoot":"","sources":["../src/ListenerResolver.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAGhD,qBAAa,gBAAgB;IAGnB,OAAO,CAAC,QAAQ,EAAE,GAAG,GAAG,OAAO,CAAC,QAAQ,CAAC;CAkBlD"}
|
package/dist/ListenerResolver.js
CHANGED
|
@@ -7,13 +7,18 @@ class ListenerResolver {
|
|
|
7
7
|
// For now we do a simple instantiation
|
|
8
8
|
async resolve(listener) {
|
|
9
9
|
if (typeof listener === 'function') {
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
10
|
+
const isClass = /^\s*class\s+/.test(listener.toString()) ||
|
|
11
|
+
(listener.prototype && typeof listener.prototype.handle === 'function');
|
|
12
|
+
if (isClass) {
|
|
13
|
+
try {
|
|
14
|
+
return new listener();
|
|
15
|
+
}
|
|
16
|
+
catch (e) {
|
|
17
|
+
throw new EventException_1.EventException(`Resolver failed to instantiate listener: ${e.message}`);
|
|
18
|
+
}
|
|
16
19
|
}
|
|
20
|
+
// It's a closure/function, wrap it in a listener object
|
|
21
|
+
return { handle: listener };
|
|
17
22
|
}
|
|
18
23
|
return listener;
|
|
19
24
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ListenerResolver.js","sourceRoot":"","sources":["../src/ListenerResolver.ts"],"names":[],"mappings":";;;AAGA,gEAA6D;AAE7D,MAAa,gBAAgB;IACzB,4DAA4D;IAC5D,uCAAuC;IACvC,KAAK,CAAC,OAAO,CAAC,QAAa;QACvB,IAAI,OAAO,QAAQ,KAAK,UAAU,EAAE,CAAC;YACjC,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"ListenerResolver.js","sourceRoot":"","sources":["../src/ListenerResolver.ts"],"names":[],"mappings":";;;AAGA,gEAA6D;AAE7D,MAAa,gBAAgB;IACzB,4DAA4D;IAC5D,uCAAuC;IACvC,KAAK,CAAC,OAAO,CAAC,QAAa;QACvB,IAAI,OAAO,QAAQ,KAAK,UAAU,EAAE,CAAC;YACjC,MAAM,OAAO,GAAG,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC;gBACpD,CAAC,QAAQ,CAAC,SAAS,IAAI,OAAO,QAAQ,CAAC,SAAS,CAAC,MAAM,KAAK,UAAU,CAAC,CAAC;YAE5E,IAAI,OAAO,EAAE,CAAC;gBACV,IAAI,CAAC;oBACD,OAAO,IAAI,QAAQ,EAAE,CAAC;gBAC1B,CAAC;gBAAC,OAAO,CAAM,EAAE,CAAC;oBACd,MAAM,IAAI,+BAAc,CAAC,4CAA4C,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;gBACtF,CAAC;YACL,CAAC;YAED,wDAAwD;YACxD,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;QAChC,CAAC;QACD,OAAO,QAAQ,CAAC;IACpB,CAAC;CACJ;AArBD,4CAqBC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -4,10 +4,13 @@ import { EventException } from './Exceptions/EventException';
|
|
|
4
4
|
export declare class Event {
|
|
5
5
|
private static instance;
|
|
6
6
|
static dispatch(event: any): Promise<void>;
|
|
7
|
-
static listen(event: any, listener: any): EventManager;
|
|
7
|
+
static listen(event: any, listener: any, priority?: number): EventManager;
|
|
8
8
|
static forget(event: any): EventManager;
|
|
9
9
|
static fake(): void;
|
|
10
|
+
static assertDispatched(event: any, callback?: (event: any) => boolean): any;
|
|
11
|
+
static subscribe(subscriber: any): void;
|
|
10
12
|
static setManager(manager: EventManager): void;
|
|
13
|
+
static getManager(): EventManager;
|
|
11
14
|
}
|
|
12
15
|
export { EventManager, Listener, EventException };
|
|
13
16
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAE7D,qBAAa,KAAK;IACd,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAoC;WAE7C,QAAQ,CAAC,KAAK,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC;WAInC,MAAM,CAAC,KAAK,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAE7D,qBAAa,KAAK;IACd,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAoC;WAE7C,QAAQ,CAAC,KAAK,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC;WAInC,MAAM,CAAC,KAAK,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,QAAQ,GAAE,MAAU;WAItD,MAAM,CAAC,KAAK,EAAE,GAAG;WAIjB,IAAI;WAIJ,gBAAgB,CAAC,KAAK,EAAE,GAAG,EAAE,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,KAAK,OAAO;WAI/D,SAAS,CAAC,UAAU,EAAE,GAAG;WAKzB,UAAU,CAAC,OAAO,EAAE,YAAY;WAIhC,UAAU,IAAI,YAAY;CAG3C;AAED,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,cAAc,EAAE,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -9,8 +9,8 @@ class Event {
|
|
|
9
9
|
static dispatch(event) {
|
|
10
10
|
return this.instance.dispatch(event);
|
|
11
11
|
}
|
|
12
|
-
static listen(event, listener) {
|
|
13
|
-
return this.instance.listen(event, listener);
|
|
12
|
+
static listen(event, listener, priority = 0) {
|
|
13
|
+
return this.instance.listen(event, listener, priority);
|
|
14
14
|
}
|
|
15
15
|
static forget(event) {
|
|
16
16
|
return this.instance.forget(event);
|
|
@@ -18,10 +18,19 @@ class Event {
|
|
|
18
18
|
static fake() {
|
|
19
19
|
return this.instance.fake();
|
|
20
20
|
}
|
|
21
|
+
static assertDispatched(event, callback) {
|
|
22
|
+
return this.instance.assertDispatched(event, callback);
|
|
23
|
+
}
|
|
24
|
+
static subscribe(subscriber) {
|
|
25
|
+
return this.instance.subscribe(subscriber);
|
|
26
|
+
}
|
|
21
27
|
// Facade helper to set a custom manager
|
|
22
28
|
static setManager(manager) {
|
|
23
29
|
this.instance = manager;
|
|
24
30
|
}
|
|
31
|
+
static getManager() {
|
|
32
|
+
return this.instance;
|
|
33
|
+
}
|
|
25
34
|
}
|
|
26
35
|
exports.Event = Event;
|
|
27
36
|
Event.instance = new EventManager_1.EventManager();
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AACA,iDAA8C;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AACA,iDAA8C;AAyCrC,6FAzCA,2BAAY,OAyCA;AAvCrB,gEAA6D;AAuC5B,+FAvCxB,+BAAc,OAuCwB;AArC/C,MAAa,KAAK;IAGP,MAAM,CAAC,QAAQ,CAAC,KAAU;QAC7B,OAAO,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IACzC,CAAC;IAEM,MAAM,CAAC,MAAM,CAAC,KAAU,EAAE,QAAa,EAAE,WAAmB,CAAC;QAChE,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAC3D,CAAC;IAEM,MAAM,CAAC,MAAM,CAAC,KAAU;QAC3B,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACvC,CAAC;IAEM,MAAM,CAAC,IAAI;QACd,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;IAChC,CAAC;IAEM,MAAM,CAAC,gBAAgB,CAAC,KAAU,EAAE,QAAkC;QACzE,OAAQ,IAAI,CAAC,QAAgB,CAAC,gBAAgB,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;IACpE,CAAC;IAEM,MAAM,CAAC,SAAS,CAAC,UAAe;QACnC,OAAO,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;IAC/C,CAAC;IAED,wCAAwC;IACjC,MAAM,CAAC,UAAU,CAAC,OAAqB;QAC1C,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;IAC5B,CAAC;IAEM,MAAM,CAAC,UAAU;QACpB,OAAO,IAAI,CAAC,QAAQ,CAAC;IACzB,CAAC;;AAlCL,sBAmCC;AAlCkB,cAAQ,GAAiB,IAAI,2BAAY,EAAE,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,45 +1,47 @@
|
|
|
1
1
|
{
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
"
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
"
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
"
|
|
2
|
+
"name": "@arikajs/events",
|
|
3
|
+
"version": "0.0.5",
|
|
4
|
+
"description": "Event dispatching and listener system for the ArikaJS framework.",
|
|
5
|
+
"license": "MIT",
|
|
6
|
+
"main": "dist/index.js",
|
|
7
|
+
"types": "dist/index.d.ts",
|
|
8
|
+
"scripts": {
|
|
9
|
+
"build": "tsc -p tsconfig.json",
|
|
10
|
+
"build:tests": "tsc -p tsconfig.test.json",
|
|
11
|
+
"clean": "rm -rf dist",
|
|
12
|
+
"prepare": "echo skip",
|
|
13
|
+
"test": "npx tsx --test tests/**/*.test.ts",
|
|
14
|
+
"test:watch": "npx tsx --test --watch tests/**/*.test.ts",
|
|
15
|
+
"dev": "tsc -p tsconfig.json --watch"
|
|
16
|
+
},
|
|
17
|
+
"files": [
|
|
18
|
+
"dist"
|
|
19
|
+
],
|
|
20
|
+
"keywords": [
|
|
21
|
+
"arika",
|
|
22
|
+
"arika-js",
|
|
23
|
+
"framework",
|
|
24
|
+
"events",
|
|
25
|
+
"listener",
|
|
26
|
+
"dispatcher",
|
|
27
|
+
"observer"
|
|
28
|
+
],
|
|
29
|
+
"engines": {
|
|
30
|
+
"node": ">=20.0.0"
|
|
31
|
+
},
|
|
32
|
+
"repository": {
|
|
33
|
+
"type": "git",
|
|
34
|
+
"url": "git+https://github.com/ArikaJs/arikajs.git",
|
|
35
|
+
"directory": "packages/events"
|
|
36
|
+
},
|
|
37
|
+
"bugs": {
|
|
38
|
+
"url": "https://github.com/ArikaJs/arikajs/issues"
|
|
39
|
+
},
|
|
40
|
+
"homepage": "https://github.com/ArikaJs/arikajs/tree/main/packages/events#readme",
|
|
41
|
+
"dependencies": {},
|
|
42
|
+
"devDependencies": {
|
|
43
|
+
"@types/node": "^20.11.24",
|
|
44
|
+
"typescript": "^5.3.3"
|
|
45
|
+
},
|
|
46
|
+
"author": "Prakash Tank"
|
|
45
47
|
}
|