@eggjs/eventbus-decorator 4.0.0-beta.7 → 4.0.0-beta.8

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/dist/index.d.ts CHANGED
@@ -1,6 +1,114 @@
1
- import { Event, Events } from "./Event.js";
2
- import { EventContext, IEventContext } from "./EventContext.js";
3
- import { Arguments } from "./typed-emitter.js";
4
- import { CORK_ID, ContextEventBus, EventBus, EventHandler, EventKeys, EventName, EventWaiter } from "./EventBus.js";
5
- import { EVENT_CONTEXT_INJECT, EVENT_NAME, EventInfoUtil } from "./EventInfoUtil.js";
6
- export { Arguments, CORK_ID, ContextEventBus, EVENT_CONTEXT_INJECT, EVENT_NAME, Event, EventBus, EventContext, EventHandler, EventInfoUtil, EventKeys, EventName, EventWaiter, Events, IEventContext };
1
+ import { EggProtoImplClass } from "@eggjs/tegg-types";
2
+
3
+ //#region src/Event.d.ts
4
+ interface Events$1 {}
5
+ declare function Event<E extends keyof Events$1>(eventName: E): (clazz: new () => EventHandler<E>) => void;
6
+ //#endregion
7
+ //#region src/EventContext.d.ts
8
+ interface IEventContext {
9
+ eventName: keyof Events$1;
10
+ }
11
+ declare function EventContext(): (target: any, propertyKey: PropertyKey, parameterIndex: number) => void;
12
+ //#endregion
13
+ //#region src/typed-emitter.d.ts
14
+ type Arguments<T> = [T] extends [(...args: infer U) => any] ? U : [T] extends [void] ? [] : [T];
15
+ /**
16
+ * Type-safe event emitter.
17
+ *
18
+ * Use it like this:
19
+ *
20
+ * interface MyEvents {
21
+ * error: (error: Error) => void
22
+ * message: (from: string, content: string) => void
23
+ * }
24
+ *
25
+ * const myEmitter = new EventEmitter() as TypedEmitter<MyEvents>
26
+ *
27
+ * myEmitter.on("message", (from, content) => {
28
+ * // ...
29
+ * })
30
+ *
31
+ * myEmitter.emit("error", "x") // <- Will catch this type error
32
+ */
33
+ interface TypedEventEmitter<Events> {
34
+ addListener<E extends keyof Events>(event: E, listener: Events[E]): this;
35
+ on<E extends keyof Events>(event: E, listener: Events[E]): this;
36
+ once<E extends keyof Events>(event: E, listener: Events[E]): this;
37
+ prependListener<E extends keyof Events>(event: E, listener: Events[E]): this;
38
+ prependOnceListener<E extends keyof Events>(event: E, listener: Events[E]): this;
39
+ off<E extends keyof Events>(event: E, listener: Events[E]): this;
40
+ removeAllListeners<E extends keyof Events>(event?: E): this;
41
+ removeListener<E extends keyof Events>(event: E, listener: Events[E]): this;
42
+ emit<E extends keyof Events>(event: E, ...args: Arguments<Events[E]>): boolean;
43
+ eventNames(): (keyof Events | string | symbol)[];
44
+ rawListeners<E extends keyof Events>(event: E): Function[];
45
+ listeners<E extends keyof Events>(event: E): Function[];
46
+ listenerCount<E extends keyof Events>(event: E): number;
47
+ getMaxListeners(): number;
48
+ setMaxListeners(maxListeners: number): this;
49
+ }
50
+ //#endregion
51
+ //#region src/EventBus.d.ts
52
+ type EventName = string | symbol;
53
+ /**
54
+ * use `emit` to emit a event
55
+ */
56
+ interface EventBus extends Pick<TypedEventEmitter<Events$1>, 'emit'> {
57
+ cork(corkId: string): void;
58
+ /**
59
+ * @return true if uncorked
60
+ */
61
+ uncork(corkId: string): boolean;
62
+ }
63
+ declare const CORK_ID: unique symbol;
64
+ interface ContextEventBus extends EventBus {
65
+ cork(): void;
66
+ uncork(): boolean;
67
+ }
68
+ type EventKeys = keyof Events$1;
69
+ /**
70
+ * use to ensure event will happen
71
+ * Can not inject for now, only use for unittest
72
+ */
73
+ interface EventWaiter {
74
+ await<E extends keyof Events$1>(event: E): Promise<Arguments<Events$1[E]>>;
75
+ awaitFirst<E1 extends EventKeys, E2 extends EventKeys>(e1: E1, e2: E2): Promise<{
76
+ event: E1 | E2;
77
+ args: Arguments<Events$1[E1] | Events$1[E2]>;
78
+ }>;
79
+ awaitFirst<E1 extends EventKeys, E2 extends EventKeys, E3 extends EventKeys>(e1: E1, e2: E2, e3: E3): Promise<{
80
+ event: E1 | E2 | E3;
81
+ args: Arguments<Events$1[E1] | Events$1[E2] | Events$1[E3]>;
82
+ }>;
83
+ awaitFirst<E1 extends EventKeys, E2 extends EventKeys, E3 extends EventKeys, E4 extends EventKeys>(e1: E1, e2: E2, e3: E3, e4: E4): Promise<{
84
+ event: E1 | E2 | E3 | E4;
85
+ args: Arguments<Events$1[E1] | Events$1[E2] | Events$1[E3] | Events$1[E4]>;
86
+ }>;
87
+ }
88
+ type EventHandlerWithContext<E extends keyof Events$1> = {
89
+ handle: (ctx: IEventContext, ...args: Arguments<Events$1[E]>) => ReturnType<Events$1[E]>;
90
+ };
91
+ type EventHandler<E extends keyof Events$1> = {
92
+ handle: Events$1[E];
93
+ } | EventHandlerWithContext<E>;
94
+ //#endregion
95
+ //#region src/EventInfoUtil.d.ts
96
+ declare const EVENT_NAME: unique symbol;
97
+ declare const EVENT_CONTEXT_INJECT: unique symbol;
98
+ declare class EventInfoUtil {
99
+ /**
100
+ * @deprecated
101
+ */
102
+ static setEventName(eventName: EventName, clazz: EggProtoImplClass): void;
103
+ static addEventName(eventName: EventName, clazz: EggProtoImplClass): void;
104
+ static getEventNameList(clazz: EggProtoImplClass): EventName[];
105
+ /**
106
+ * @deprecated
107
+ * return the last eventName which is subscribed firstly by Event decorator
108
+ */
109
+ static getEventName(clazz: EggProtoImplClass): EventName | undefined;
110
+ static setEventHandlerContextInject(enable: boolean, clazz: EggProtoImplClass): void;
111
+ static getEventHandlerContextInject(clazz: EggProtoImplClass): boolean;
112
+ }
113
+ //#endregion
114
+ export { type Arguments, CORK_ID, ContextEventBus, EVENT_CONTEXT_INJECT, EVENT_NAME, Event, EventBus, EventContext, EventHandler, EventInfoUtil, EventKeys, EventName, EventWaiter, Events$1 as Events, IEventContext };
package/dist/index.js CHANGED
@@ -1,6 +1,63 @@
1
- import { CORK_ID } from "./EventBus.js";
2
- import { EVENT_CONTEXT_INJECT, EVENT_NAME, EventInfoUtil } from "./EventInfoUtil.js";
3
- import { Event } from "./Event.js";
4
- import { EventContext } from "./EventContext.js";
1
+ import { AccessLevel, MetadataUtil, PrototypeUtil, SingletonProto } from "@eggjs/core-decorator";
2
+ import { StackUtil } from "@eggjs/tegg-common-util";
3
+ import assert from "node:assert";
5
4
 
5
+ //#region src/EventBus.ts
6
+ const CORK_ID = Symbol.for("eventBus#corkId");
7
+
8
+ //#endregion
9
+ //#region src/EventInfoUtil.ts
10
+ const EVENT_NAME = Symbol.for("EggPrototype#eventName");
11
+ const EVENT_CONTEXT_INJECT = Symbol.for("EggPrototype#event#handler#context#inject");
12
+ var EventInfoUtil = class EventInfoUtil {
13
+ /**
14
+ * @deprecated
15
+ */
16
+ static setEventName(eventName, clazz) {
17
+ EventInfoUtil.addEventName(eventName, clazz);
18
+ }
19
+ static addEventName(eventName, clazz) {
20
+ MetadataUtil.initOwnArrayMetaData(EVENT_NAME, clazz, []).push(eventName);
21
+ }
22
+ static getEventNameList(clazz) {
23
+ return MetadataUtil.getArrayMetaData(EVENT_NAME, clazz);
24
+ }
25
+ /**
26
+ * @deprecated
27
+ * return the last eventName which is subscribed firstly by Event decorator
28
+ */
29
+ static getEventName(clazz) {
30
+ const eventNameList = MetadataUtil.initOwnArrayMetaData(EVENT_NAME, clazz, []);
31
+ if (eventNameList.length !== 0) return eventNameList[eventNameList.length - 1];
32
+ }
33
+ static setEventHandlerContextInject(enable, clazz) {
34
+ MetadataUtil.defineMetaData(EVENT_CONTEXT_INJECT, enable, clazz);
35
+ }
36
+ static getEventHandlerContextInject(clazz) {
37
+ return MetadataUtil.getMetaData(EVENT_CONTEXT_INJECT, clazz) ?? false;
38
+ }
39
+ };
40
+
41
+ //#endregion
42
+ //#region src/Event.ts
43
+ function Event(eventName) {
44
+ return function(clazz) {
45
+ EventInfoUtil.addEventName(eventName, clazz);
46
+ SingletonProto({ accessLevel: AccessLevel.PUBLIC })(clazz);
47
+ PrototypeUtil.setFilePath(clazz, StackUtil.getCalleeFromStack(false, 5));
48
+ };
49
+ }
50
+
51
+ //#endregion
52
+ //#region src/EventContext.ts
53
+ function EventContext() {
54
+ return function(target, propertyKey, parameterIndex) {
55
+ assert(propertyKey === "handle", `[eventHandler ${target.name}] expect method name be handle, but now is ${String(propertyKey)}`);
56
+ assert(parameterIndex === 0, `[eventHandler ${target.name}] expect param EventContext be the first param`);
57
+ const clazz = target.constructor;
58
+ EventInfoUtil.setEventHandlerContextInject(true, clazz);
59
+ };
60
+ }
61
+
62
+ //#endregion
6
63
  export { CORK_ID, EVENT_CONTEXT_INJECT, EVENT_NAME, Event, EventContext, EventInfoUtil };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@eggjs/eventbus-decorator",
3
- "version": "4.0.0-beta.7",
3
+ "version": "4.0.0-beta.8",
4
4
  "description": "tegg eventbus decorator",
5
5
  "keywords": [
6
6
  "egg",
@@ -29,9 +29,9 @@
29
29
  "directory": "core/eventbus-decorator"
30
30
  },
31
31
  "dependencies": {
32
- "@eggjs/tegg-types": "4.0.0-beta.7",
33
- "@eggjs/core-decorator": "4.0.0-beta.7",
34
- "@eggjs/tegg-common-util": "4.0.0-beta.7"
32
+ "@eggjs/core-decorator": "4.0.0-beta.8",
33
+ "@eggjs/tegg-common-util": "4.0.0-beta.8",
34
+ "@eggjs/tegg-types": "4.0.0-beta.8"
35
35
  },
36
36
  "devDependencies": {
37
37
  "@types/node": "^22.10.5",
package/dist/Event.d.ts DELETED
@@ -1,7 +0,0 @@
1
- import { EventHandler } from "./EventBus.js";
2
-
3
- //#region src/Event.d.ts
4
- interface Events {}
5
- declare function Event<E extends keyof Events>(eventName: E): (clazz: new () => EventHandler<E>) => void;
6
- //#endregion
7
- export { Event, Events };
package/dist/Event.js DELETED
@@ -1,15 +0,0 @@
1
- import { EventInfoUtil } from "./EventInfoUtil.js";
2
- import { AccessLevel, PrototypeUtil, SingletonProto } from "@eggjs/core-decorator";
3
- import { StackUtil } from "@eggjs/tegg-common-util";
4
-
5
- //#region src/Event.ts
6
- function Event(eventName) {
7
- return function(clazz) {
8
- EventInfoUtil.addEventName(eventName, clazz);
9
- SingletonProto({ accessLevel: AccessLevel.PUBLIC })(clazz);
10
- PrototypeUtil.setFilePath(clazz, StackUtil.getCalleeFromStack(false, 5));
11
- };
12
- }
13
-
14
- //#endregion
15
- export { Event };
@@ -1,49 +0,0 @@
1
- import { Events } from "./Event.js";
2
- import { IEventContext } from "./EventContext.js";
3
- import { Arguments, TypedEventEmitter } from "./typed-emitter.js";
4
-
5
- //#region src/EventBus.d.ts
6
- type EventName = string | symbol;
7
- /**
8
- * use `emit` to emit a event
9
- */
10
- interface EventBus extends Pick<TypedEventEmitter<Events>, 'emit'> {
11
- cork(corkId: string): void;
12
- /**
13
- * @return true if uncorked
14
- */
15
- uncork(corkId: string): boolean;
16
- }
17
- declare const CORK_ID: unique symbol;
18
- interface ContextEventBus extends EventBus {
19
- cork(): void;
20
- uncork(): boolean;
21
- }
22
- type EventKeys = keyof Events;
23
- /**
24
- * use to ensure event will happen
25
- * Can not inject for now, only use for unittest
26
- */
27
- interface EventWaiter {
28
- await<E extends keyof Events>(event: E): Promise<Arguments<Events[E]>>;
29
- awaitFirst<E1 extends EventKeys, E2 extends EventKeys>(e1: E1, e2: E2): Promise<{
30
- event: E1 | E2;
31
- args: Arguments<Events[E1] | Events[E2]>;
32
- }>;
33
- awaitFirst<E1 extends EventKeys, E2 extends EventKeys, E3 extends EventKeys>(e1: E1, e2: E2, e3: E3): Promise<{
34
- event: E1 | E2 | E3;
35
- args: Arguments<Events[E1] | Events[E2] | Events[E3]>;
36
- }>;
37
- awaitFirst<E1 extends EventKeys, E2 extends EventKeys, E3 extends EventKeys, E4 extends EventKeys>(e1: E1, e2: E2, e3: E3, e4: E4): Promise<{
38
- event: E1 | E2 | E3 | E4;
39
- args: Arguments<Events[E1] | Events[E2] | Events[E3] | Events[E4]>;
40
- }>;
41
- }
42
- type EventHandlerWithContext<E extends keyof Events> = {
43
- handle: (ctx: IEventContext, ...args: Arguments<Events[E]>) => ReturnType<Events[E]>;
44
- };
45
- type EventHandler<E extends keyof Events> = {
46
- handle: Events[E];
47
- } | EventHandlerWithContext<E>;
48
- //#endregion
49
- export { CORK_ID, ContextEventBus, EventBus, EventHandler, EventKeys, EventName, EventWaiter };
package/dist/EventBus.js DELETED
@@ -1,5 +0,0 @@
1
- //#region src/EventBus.ts
2
- const CORK_ID = Symbol.for("eventBus#corkId");
3
-
4
- //#endregion
5
- export { CORK_ID };
@@ -1,9 +0,0 @@
1
- import { Events } from "./Event.js";
2
-
3
- //#region src/EventContext.d.ts
4
- interface IEventContext {
5
- eventName: keyof Events;
6
- }
7
- declare function EventContext(): (target: any, propertyKey: PropertyKey, parameterIndex: number) => void;
8
- //#endregion
9
- export { EventContext, IEventContext };
@@ -1,15 +0,0 @@
1
- import { EventInfoUtil } from "./EventInfoUtil.js";
2
- import assert from "node:assert";
3
-
4
- //#region src/EventContext.ts
5
- function EventContext() {
6
- return function(target, propertyKey, parameterIndex) {
7
- assert(propertyKey === "handle", `[eventHandler ${target.name}] expect method name be handle, but now is ${String(propertyKey)}`);
8
- assert(parameterIndex === 0, `[eventHandler ${target.name}] expect param EventContext be the first param`);
9
- const clazz = target.constructor;
10
- EventInfoUtil.setEventHandlerContextInject(true, clazz);
11
- };
12
- }
13
-
14
- //#endregion
15
- export { EventContext };
@@ -1,23 +0,0 @@
1
- import { EventName } from "./EventBus.js";
2
- import { EggProtoImplClass } from "@eggjs/tegg-types";
3
-
4
- //#region src/EventInfoUtil.d.ts
5
- declare const EVENT_NAME: unique symbol;
6
- declare const EVENT_CONTEXT_INJECT: unique symbol;
7
- declare class EventInfoUtil {
8
- /**
9
- * @deprecated
10
- */
11
- static setEventName(eventName: EventName, clazz: EggProtoImplClass): void;
12
- static addEventName(eventName: EventName, clazz: EggProtoImplClass): void;
13
- static getEventNameList(clazz: EggProtoImplClass): EventName[];
14
- /**
15
- * @deprecated
16
- * return the last eventName which is subscribed firstly by Event decorator
17
- */
18
- static getEventName(clazz: EggProtoImplClass): EventName | undefined;
19
- static setEventHandlerContextInject(enable: boolean, clazz: EggProtoImplClass): void;
20
- static getEventHandlerContextInject(clazz: EggProtoImplClass): boolean;
21
- }
22
- //#endregion
23
- export { EVENT_CONTEXT_INJECT, EVENT_NAME, EventInfoUtil };
@@ -1,36 +0,0 @@
1
- import { MetadataUtil } from "@eggjs/core-decorator";
2
-
3
- //#region src/EventInfoUtil.ts
4
- const EVENT_NAME = Symbol.for("EggPrototype#eventName");
5
- const EVENT_CONTEXT_INJECT = Symbol.for("EggPrototype#event#handler#context#inject");
6
- var EventInfoUtil = class EventInfoUtil {
7
- /**
8
- * @deprecated
9
- */
10
- static setEventName(eventName, clazz) {
11
- EventInfoUtil.addEventName(eventName, clazz);
12
- }
13
- static addEventName(eventName, clazz) {
14
- MetadataUtil.initOwnArrayMetaData(EVENT_NAME, clazz, []).push(eventName);
15
- }
16
- static getEventNameList(clazz) {
17
- return MetadataUtil.getArrayMetaData(EVENT_NAME, clazz);
18
- }
19
- /**
20
- * @deprecated
21
- * return the last eventName which is subscribed firstly by Event decorator
22
- */
23
- static getEventName(clazz) {
24
- const eventNameList = MetadataUtil.initOwnArrayMetaData(EVENT_NAME, clazz, []);
25
- if (eventNameList.length !== 0) return eventNameList[eventNameList.length - 1];
26
- }
27
- static setEventHandlerContextInject(enable, clazz) {
28
- MetadataUtil.defineMetaData(EVENT_CONTEXT_INJECT, enable, clazz);
29
- }
30
- static getEventHandlerContextInject(clazz) {
31
- return MetadataUtil.getMetaData(EVENT_CONTEXT_INJECT, clazz) ?? false;
32
- }
33
- };
34
-
35
- //#endregion
36
- export { EVENT_CONTEXT_INJECT, EVENT_NAME, EventInfoUtil };
@@ -1,39 +0,0 @@
1
- //#region src/typed-emitter.d.ts
2
- type Arguments<T> = [T] extends [(...args: infer U) => any] ? U : [T] extends [void] ? [] : [T];
3
- /**
4
- * Type-safe event emitter.
5
- *
6
- * Use it like this:
7
- *
8
- * interface MyEvents {
9
- * error: (error: Error) => void
10
- * message: (from: string, content: string) => void
11
- * }
12
- *
13
- * const myEmitter = new EventEmitter() as TypedEmitter<MyEvents>
14
- *
15
- * myEmitter.on("message", (from, content) => {
16
- * // ...
17
- * })
18
- *
19
- * myEmitter.emit("error", "x") // <- Will catch this type error
20
- */
21
- interface TypedEventEmitter<Events> {
22
- addListener<E extends keyof Events>(event: E, listener: Events[E]): this;
23
- on<E extends keyof Events>(event: E, listener: Events[E]): this;
24
- once<E extends keyof Events>(event: E, listener: Events[E]): this;
25
- prependListener<E extends keyof Events>(event: E, listener: Events[E]): this;
26
- prependOnceListener<E extends keyof Events>(event: E, listener: Events[E]): this;
27
- off<E extends keyof Events>(event: E, listener: Events[E]): this;
28
- removeAllListeners<E extends keyof Events>(event?: E): this;
29
- removeListener<E extends keyof Events>(event: E, listener: Events[E]): this;
30
- emit<E extends keyof Events>(event: E, ...args: Arguments<Events[E]>): boolean;
31
- eventNames(): (keyof Events | string | symbol)[];
32
- rawListeners<E extends keyof Events>(event: E): Function[];
33
- listeners<E extends keyof Events>(event: E): Function[];
34
- listenerCount<E extends keyof Events>(event: E): number;
35
- getMaxListeners(): number;
36
- setMaxListeners(maxListeners: number): this;
37
- }
38
- //#endregion
39
- export { Arguments, TypedEventEmitter };