Files
oh-my-pi/packages/coding-agent/src/utils/event-bus.ts
T
can1357 a5d9bbb4ca chore(coding-agent): migrated console logging to structured logger and updated import styles
- Migrated console.error() calls to structured logger.warn() and logger.error() throughout codebase.
- Updated os.tmpdir() import style in browser tool from destructured to namespace import.
2026-02-10 11:26:42 +01:00

34 lines
836 B
TypeScript

import { logger } from "@oh-my-pi/pi-utils";
export class EventBus {
readonly #listeners = new Map<string, Set<(data: unknown) => void>>();
emit(channel: string, data: unknown): void {
const handlers = this.#listeners.get(channel);
if (handlers) {
for (const handler of handlers) {
handler(data);
}
}
}
on(channel: string, handler: (data: unknown) => void): () => void {
if (!this.#listeners.has(channel)) {
this.#listeners.set(channel, new Set());
}
const safeHandler = async (data: unknown) => {
try {
await handler(data);
} catch (err) {
logger.error("Event handler error", { channel, error: String(err) });
}
};
this.#listeners.get(channel)!.add(safeHandler);
return () => this.#listeners.get(channel)?.delete(safeHandler);
}
clear(): void {
this.#listeners.clear();
}
}