Как реализовать EventBus для платформы CLI на основе TypeScript (climonad.js)?Javascript

Форум по Javascript
Ответить Пред. темаСлед. тема
Anonymous
 Как реализовать EventBus для платформы CLI на основе TypeScript (climonad.js)?

Сообщение Anonymous »

В настоящее время я разрабатываю инфраструктуру CLI под названием climonad.js, написанную на TypeScript, и мне хотелось бы представить механизм шины событий для обработки и отправки различных событий (например, ошибок, уведомлений жизненного цикла команд, отслеживания использования). ). Моя цель — отделить эти проблемы, чтобы другие модули могли прослушивать события и реагировать на них, не полагаясь на специальные модули Node.js (например, встроенный пакет «events»).
Ниже приведена краткая концепция того типа EventBus, о котором я думал:

Код: Выделить всё

export class EventBus {
private listeners: Record> = {}

/**
* Register an event listener for a specified event.
*/
public on(event: string, listener: (...args: unknown[]) => void): void {
if (!this.listeners[event]) {
this.listeners[event] = []
}
this.listeners[event].push(listener)
}

/**
* Unregister an event listener.
*/
public off(event: string, listener: (...args: unknown[]) => void): void {
if (this.listeners[event]) {
this.listeners[event] = this.listeners[event].filter(l => l !== listener)
}
}

/**
* Emit an event to all registered listeners.
*/
public emit(event: string, ...args: unknown[]): void {
if (this.listeners[event]) {
for (const listener of this.listeners[event]) {
listener(...args)
}
}
}
}
Пример использования может выглядеть так:

Код: Выделить всё

import { EventBus } from "./EventBus"

const bus = new EventBus()

// Subscribe to an "error" event
bus.on("error", (err: unknown) => {
console.error("[climonad.js] Error:", err)
})

// Emit the error somewhere else in the code
try {
// Some CLI-specific action...
} catch (e) {
bus.emit("error", e)
}
Я надеюсь получить отзывы по следующим вопросам:
  • Существует ли более идиоматический или рекомендуемый подход к реализацию архитектуры pub/sub или архитектуры на основе событий в проекте TypeScript CLI?
  • Вы видите какие-либо подводные камни в этом упрощенном дизайне (например, потенциальные утечки памяти или проблемы с производительностью), если CLI становится большим или запускается часто?
  • Предлагаете ли вы ввести какую-либо обработку приоритетов или асинхронную обработку событий для более сложных задач CLI?
  • Существуют ли известные шаблоны для объединения выбросов событий между различными модулями (например, использование отслеживание, регистрация ошибок) в контексте CLI, на который мне следует обратить внимание?
Я хотел бы услышать ваши предложения, лучшие практики или потенциальные улучшения. Заранее спасибо!
Соответствующая проблема: https://github.com/supitsdu/climonad.js/issues/23

Подробнее здесь: https://stackoverflow.com/questions/793 ... limonad-js
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Обновление данных, передаваемых через EventBus
    Anonymous » » в форуме Android
    0 Ответы
    14 Просмотры
    Последнее сообщение Anonymous
  • EventBus — класс подписчика и его суперклассы не имеют общедоступных методов с аннотацией @subscribe.
    Anonymous » » в форуме Android
    0 Ответы
    23 Просмотры
    Последнее сообщение Anonymous
  • EventBus с отменой развертывания
    Anonymous » » в форуме JAVA
    0 Ответы
    8 Просмотры
    Последнее сообщение Anonymous
  • Guava EventBus: как вернуть результат из обработчика событий
    Anonymous » » в форуме JAVA
    0 Ответы
    6 Просмотры
    Последнее сообщение Anonymous
  • Человек в цикле для работы как в Langgraph Studio, так и в CLI на основе CLI
    Anonymous » » в форуме Python
    0 Ответы
    6 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Javascript»