Skip to content

Концепция реестров

Extension point в artiroute — это слот в Map-реестре с идентификатором (registryId, key).

Регистрация

В setup() расширения:

ts
import { defineExtension, getExtensionRegistry } from '@artiroute/extension-sdk/extension';

export default defineExtension(() => {
  getExtensionRegistry('app.sidebar').register(
    'my-key', // key — уникален в пределах registryId
    { label: '…' }, // payload — тип зависит от реестра
    50 // order (опционально)
  );
});

Альтернатива через context:

ts
ctx.registerRegistryEntry({
  registryId: 'app.sidebar',
  key: 'my-key',
  value: { label: '…' },
  order: 50,
});

Декларация в manifest

Каждый используемый key обязан быть в contributes.ext.extendsRegistries:

js
extendsRegistries: [{ registryId: 'app.sidebar', keys: ['my-key'] }];

Это нужно для:

  • валидации конфликтов ключей между расширениями
  • implied dependencies при расширении чужих реестров
  • документирования surface area расширения

Два типа реестров

ТипRegistry IDКак потребляется
Итерируемыеapp.sidebar, app.widgets, …Хост перебирает .entries() и рендерит список
UI-слотыapp.uiSlotsХост монтирует <ExtensionSlotHost region="…" />

Чтение из хоста

Хост и мосты используют:

ts
getExtensionRegistry('app.widgets').entries();
resolveRegistrySlot('app.widgets', 'my-key');
subscribeRegistriesRevision(() => {
  /* re-render */
});

SDK types

Типы payload экспортируются из @artiroute/extension-sdk/extension:

  • ExtensionRouteItem, ExtensionWidgetItem
  • ExtensionDashboardWidgetItem, ExtensionTabItem
  • ExtensionSettingsTabItem, ExtensionUiSlotItem
  • и др.

Каталоги

Пример: registry-test

Расширение @artiroute/registry-test регистрирует placeholder во всех точках — удобно для smoke-test после изменений в хосте.

См. registry-test.

AI workspace для командных материалов и знаний