Тема
Плагины
Плагины Query Layer — дополнительные entry points. Они не нужны для обычного HTTP-запроса и не включаются автоматически.
ts
import { persistQueryRuntime } from "@dubium/query-layer/persist"
import { setupBroadcastSync } from "@dubium/query-layer/sync"
import { OfflineMutationQueue } from "@dubium/query-layer/offline"Основной пакет продолжает работать без этих импортов.
Три разные задачи
| Плагин | Что сохраняет/передаёт | Когда нужен |
|---|---|---|
| Persistence | Успешный query cache между reload | После перезагрузки можно показать разрешённые cached data |
| Cross-tab sync | События query между открытыми вкладками | Изменение в одной вкладке должно обновить другую |
| Offline queue | Команды mutation до восстановления сети | Пользователь должен продолжить действие offline |
Это не взаимозаменяемые механизмы.
Что плагины не делают
- не создают API-функции;
- не разрешают UI вызывать Axios напрямую;
- не заменяют MobX stores;
- не определяют, какие данные безопасны;
- не шифруют localStorage;
- не гарантируют idempotency backend;
- не загружают Module Federation remote.
Общая предпосылка
Плагины работают с root QueryRuntime:
ts
const runtime = createQueryRuntime({
mode: "application",
identity: {
applicationId: "portal",
version: "1.0.0",
},
})Контроллеры создаются на composition root приложения, а не внутри React компонента и не внутри каждой feature.
Opt-in вместо «сохранить всё»
Query помечается metadata:
ts
meta: {
persist: true,
broadcast: true,
}Затем host policy решает, разрешён ли key. Метка — запрос feature, а не безусловное разрешение.
Ownership
| Ресурс | Кто создаёт | Кто освобождает |
|---|---|---|
| Persistence controller | application bootstrap/host | application shutdown/logout |
| Broadcast sync controller | application bootstrap/host | application shutdown/logout |
| Offline queue | application data layer | снимает mount listener и отменяет replay |
| Query stores | feature/domain layer | feature lifecycle или participant scope |
Выбор страницы
- Persistence — localStorage, sessionStorage, IndexedDB, migrations и data policy.
- Cross-tab sync — invalidate/hydrate через BroadcastChannel.
- Offline queue — отложенные mutations, idempotency и dead-letter.
- Совместное использование — порядок событий и lifecycle при включении нескольких плагинов.