Код Senior Реализация с нуля обновлено

Шина событий с шаблонами

Условие

createBus(): on(pattern, fn), emit(event, payload). Шаблон поддерживает '' как один сегмент и '**' как хвост: 'user:' ловит 'user:login', 'user:**' ловит и 'user:a:b'. Разделитель - двоеточие.

Что проверяют тесты

  • точное совпадение

  • звёздочка - один сегмент

  • двойная звёздочка - хвост

  • имя события передаётся

  • отписка

  • emit возвращает число сработавших

  • отписка во время рассылки не ломает обход

Как подойти

Шаблоны превращают шину из плоского списка имён в иерархию: можно слушать всё, что происходит с пользователем, не перечисляя события. Посегментное сравнение проще и быстрее, чем сборка регулярки. Обход по копии - та же защита, что и в обычном EventEmitter: подписчик вправе отписаться прямо в обработчике.

Подсказки: 3
  1. Сравнивай шаблон и событие посегментно.
  2. '**' завершает проверку успехом, '*' совпадает с любым одним сегментом.
  3. Обходи копию списка подписчиков.

Решите в тренажёре

Редактор с автотестами прямо в браузере. Можно решить спокойно, вслух или под таймером, как на собесе.