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.
Files changed (3) hide show
  1. package/event.d.ts +8 -2
  2. package/event.js +35 -6
  3. 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
- * @param listener - 必须与注册时的引用完全一致
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: (...args: any[]) => void): void;
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
- * @param listener - 必须与注册时的引用完全一致
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().off(event, listener);
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()?.debug?.('event subscriber: Redis not configured, skip');
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()?.debug?.('event subscriber: Redis bridge ready');
234
+ getLogger()?.info?.('event subscriber: Redis bridge ready');
212
235
  }
213
236
  catch (err) {
214
- getLogger()?.warn?.(`event subscriber init failed: ${err?.message ?? err}`);
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
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "baja-lite",
3
- "version": "1.8.14",
3
+ "version": "1.8.16",
4
4
  "description": "some util for self",
5
5
  "homepage": "https://github.com/void-soul/baja-lite",
6
6
  "repository": {