Модель реестров
Идея
Есть именованные реестры (registryId — строка, например core.page или @rynt/chats-calls.message-types).
Внутри реестра — записи по ключу (key + value + метаданные автора).
registryId → Map<key, { value, extensionId, order? }>Кто угодно может:
- Объявить реестр (создать именованную зону) — в манифесте
declaresRegistries, в runtime — первая запись /defineExtensionRegistry/getExtensionRegistry. - Пополнить реестр под своим ключом — в манифесте
extendsRegistries, в runtime —register(key, value)илиctx.registerRegistryEntry.
Автор записи в runtime: extensionId из manifest.id расширения или rynt для кода лаунчера.
Встроенные реестры ядра (core.*)
Объявлены в @rynt/sdk/extension (встроенные core.*).
Кратко — навигация, лоадеры, провайдеры, ~60 визуальных слотов (карточки, деталки, TopBar, Markdown), keyed-реестры accountProvider и inviteHandler.
Полный справочник с use-функциями, props и примерами: Справочник core.*.
registryId | Назначение |
|---|---|
core.page | Экран (маршрут + компонент) |
core.nav | Пункт главного меню |
core.sidebar | Слот сайдбара |
core.shell | Оверлей оболочки |
core.userStrip | Действия у профиля |
core.loader | Лоадер Minecraft |
core.modProvider | Провайдер маркетплейса модов |
core.fileEditor | Редактор файла по расширению |
core.theme | Тема оформления |
core.accountProvider | Провайдер входа (OAuth / offline / …) |
core.inviteHandler | Обработчик инвайта по invite.type |
core.*CardActions, *BeforeContent, … | Визуальные слоты UI — см. справочник |
Записи по умолчанию для loader / modProvider / fileEditor / theme / accountProvider / inviteHandler регистрирует лаунчер при старте (registerBuiltinRegistryEntries, registerBuiltinInviteHandlers).
Реестры расширений
Расширение-владелец задаёт свой registryId (обычно <manifest.id>.<роль>) и объявляет его в declaresRegistries.
Другие расширения пополняют реестр, указывая в манифесте extendsRegistries те же registryId и конкретные keys.
Пример: @rynt/chats-calls объявляет @rynt/chats-calls.message-types; @rynt/chats-message-sample расширяет ключ demo_ping.
Отдельно: launcher entities
registerLauncherEntity — не реестр registryId/key. Это фиксированные ключи UI-виджетов (user_item, build_card, …), реализации которых регистрирует только хост. В маркетплейсе слотов не индексируется.
Expose
defineExpose — публичный объект API между расширениями по manifest.id, не путать с реестром слотов.
Сценарий «слот не заполнен»
- Лаунчер: при отсутствии записи можно показать кнопку установки (см. 06-launcher-ui.md).
- Каталог: ищет расширения, у которых в манифесте есть этот слот в
extendsRegistries(см. 05-marketplace-service.md).