Утилиты
@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"по эффекту: кнопки отправки.