baja-lite 1.8.14 → 1.8.16
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/event.d.ts +8 -2
- package/event.js +35 -6
- package/package.json +1 -1
package/event.d.ts
CHANGED
|
@@ -53,7 +53,8 @@ export declare function on(event: string, listener: (...args: any[]) => void, op
|
|
|
53
53
|
/**
|
|
54
54
|
* 移除事件监听器。
|
|
55
55
|
*
|
|
56
|
-
*
|
|
56
|
+
* - 传入 `listener` → 移除指定监听器(必须与注册时引用一致)
|
|
57
|
+
* - 不传 `listener` → 移除该事件下的全部监听器
|
|
57
58
|
*
|
|
58
59
|
* @example
|
|
59
60
|
* ```ts
|
|
@@ -61,10 +62,15 @@ export declare function on(event: string, listener: (...args: any[]) => void, op
|
|
|
61
62
|
*
|
|
62
63
|
* const handler = (uid: string) => console.log(uid);
|
|
63
64
|
* on('user-login', handler);
|
|
65
|
+
*
|
|
66
|
+
* // 移除指定监听器
|
|
64
67
|
* off('user-login', handler);
|
|
68
|
+
*
|
|
69
|
+
* // 移除该事件下所有监听器
|
|
70
|
+
* off('user-login');
|
|
65
71
|
* ```
|
|
66
72
|
*/
|
|
67
|
-
export declare function off(event: string, listener
|
|
73
|
+
export declare function off(event: string, listener?: (...args: any[]) => void): void;
|
|
68
74
|
/**
|
|
69
75
|
* 触发事件。
|
|
70
76
|
*
|
package/event.js
CHANGED
|
@@ -78,23 +78,28 @@ function packPayload(args) {
|
|
|
78
78
|
*/
|
|
79
79
|
export function on(event, listener, opts) {
|
|
80
80
|
const bus = getEventBus();
|
|
81
|
-
if (opts?.unique && bus.listenerCount(event) > 0)
|
|
81
|
+
if (opts?.unique && bus.listenerCount(event) > 0) {
|
|
82
|
+
eventLog(`event ${event} already has listener, skip register`);
|
|
82
83
|
return;
|
|
84
|
+
}
|
|
83
85
|
if (opts?.once) {
|
|
84
86
|
const wrapper = (...args) => {
|
|
85
87
|
bus.off(event, wrapper);
|
|
86
88
|
listener(...args);
|
|
87
89
|
};
|
|
88
90
|
bus.on(event, wrapper);
|
|
91
|
+
eventLog(`event ${event} registered as once`);
|
|
89
92
|
}
|
|
90
93
|
else {
|
|
91
94
|
bus.on(event, listener);
|
|
95
|
+
eventLog(`event ${event} registered`);
|
|
92
96
|
}
|
|
93
97
|
}
|
|
94
98
|
/**
|
|
95
99
|
* 移除事件监听器。
|
|
96
100
|
*
|
|
97
|
-
*
|
|
101
|
+
* - 传入 `listener` → 移除指定监听器(必须与注册时引用一致)
|
|
102
|
+
* - 不传 `listener` → 移除该事件下的全部监听器
|
|
98
103
|
*
|
|
99
104
|
* @example
|
|
100
105
|
* ```ts
|
|
@@ -102,11 +107,24 @@ export function on(event, listener, opts) {
|
|
|
102
107
|
*
|
|
103
108
|
* const handler = (uid: string) => console.log(uid);
|
|
104
109
|
* on('user-login', handler);
|
|
110
|
+
*
|
|
111
|
+
* // 移除指定监听器
|
|
105
112
|
* off('user-login', handler);
|
|
113
|
+
*
|
|
114
|
+
* // 移除该事件下所有监听器
|
|
115
|
+
* off('user-login');
|
|
106
116
|
* ```
|
|
107
117
|
*/
|
|
108
118
|
export function off(event, listener) {
|
|
109
|
-
getEventBus()
|
|
119
|
+
const bus = getEventBus();
|
|
120
|
+
if (listener) {
|
|
121
|
+
bus.off(event, listener);
|
|
122
|
+
eventLog(`event ${event} listener removed`);
|
|
123
|
+
}
|
|
124
|
+
else {
|
|
125
|
+
bus.removeAllListeners(event);
|
|
126
|
+
eventLog(`event ${event} all listeners removed`);
|
|
127
|
+
}
|
|
110
128
|
}
|
|
111
129
|
/**
|
|
112
130
|
* 触发事件。
|
|
@@ -151,9 +169,14 @@ export function trigger(event, args, opts) {
|
|
|
151
169
|
redis.publish(`${CHANNEL_PREFIX}${event}`, packPayload(a)).catch((err) => {
|
|
152
170
|
getLogger()?.warn?.(`event publish "${event}" failed: ${err?.message ?? err}`);
|
|
153
171
|
});
|
|
172
|
+
eventLog(`event ${event} published to remote`);
|
|
173
|
+
}
|
|
174
|
+
else {
|
|
175
|
+
eventLog(`event ${event} can't publish because redis is not configured`);
|
|
154
176
|
}
|
|
155
177
|
}
|
|
156
178
|
if (local) {
|
|
179
|
+
eventLog(`event ${event} emitted to local`);
|
|
157
180
|
return getEventBus().emit(event, ...a);
|
|
158
181
|
}
|
|
159
182
|
return false;
|
|
@@ -185,7 +208,7 @@ export async function initEventSubscriber() {
|
|
|
185
208
|
_subscriberReady = true;
|
|
186
209
|
const redis = getRedis();
|
|
187
210
|
if (!redis) {
|
|
188
|
-
getLogger()?.
|
|
211
|
+
getLogger()?.error?.('event subscriber: Redis not configured, skip');
|
|
189
212
|
return;
|
|
190
213
|
}
|
|
191
214
|
try {
|
|
@@ -208,10 +231,16 @@ export async function initEventSubscriber() {
|
|
|
208
231
|
}
|
|
209
232
|
});
|
|
210
233
|
await sub.psubscribe(SUBSCRIBE_PATTERN);
|
|
211
|
-
getLogger()?.
|
|
234
|
+
getLogger()?.info?.('event subscriber: Redis bridge ready');
|
|
212
235
|
}
|
|
213
236
|
catch (err) {
|
|
214
|
-
getLogger()?.
|
|
237
|
+
getLogger()?.error?.(`event subscriber init failed: ${err?.message ?? err}`);
|
|
215
238
|
_subscriberReady = false; // 允许重试
|
|
216
239
|
}
|
|
217
240
|
}
|
|
241
|
+
/** @internal 输出缓存分类日志(仅当 setLogLevels 包含 'cache' 时生效) */
|
|
242
|
+
function eventLog(message, ...params) {
|
|
243
|
+
const logger = globalThis[_LoggerService];
|
|
244
|
+
// pino-pretty 的 messageFormat 会根据 level=24 自动添加 [CACHE] 前缀
|
|
245
|
+
logger.debugCategory?.('event', message, ...params);
|
|
246
|
+
}
|