Skip to content

Утилиты

@virentia/core/utils — готовые операторы для задач, до которых доходит каждое приложение: задержать шумный ввод, показать баннер один раз, сбросить сторы при выходе, вывести статус запроса на кнопку. Поставляются вместе с ядром — устанавливать ничего не нужно:

ts
import { debounce, once, reset, status } from "@virentia/core/utils";

У каждого оператора есть две гарантии — ради них он и существует, а не ради экономии пяти строк:

  • У каждого скоупа — своё. Таймеры, флаги и память привязаны к скоупу, в котором случилось обновление. SSR-запрос, тест и приложение не делят между собой ни окно дебаунса, ни флаг «уже показали». Самодельная версия с let на уровне модуля делит их на всех — и этот баг уезжает в прод незамеченным.
  • Умирает вместе с владельцем. Оператор, созданный внутри владельца, убирается при его dispose: таймеры отменяются, подписки снимаются, после разбора ничего не срабатывает.

Операторы

Время — что пришло на вход, то и на выходе (стор даёт стор с последним устоявшимся значением, событие даёт событие):

  • debounce — дождаться паузы: поиск по мере ввода, автосохранение.
  • throttle — ровный темп без потери последнего значения: скролл, перетаскивание, живые метрики.
  • delay — сдвинуть каждое срабатывание на фиксированное время: тосты, окно «отменить».
  • interval — тикать между start и stop: таймеры, поллинг.

Память:

  • once — пропустить только первое срабатывание: онбординг, аналитика первого использования.
  • previous — значение, которое было до текущего: «откуда пришли», направление анимации.

Запись:

  • reset — вернуть сторы к начальным значениям: выход из аккаунта, «новая запись».

Состояние эффектов:

  • status"initial" | "pending" | "done" | "fail" по эффекту: кнопки отправки.