Каталог как данные
Помимо типов, пакет экспортирует каталог как рантайм-данные: JSON Schema документ и таблицы проводки. Панели devtools, инспекторы и валидаторы читают именно их.
Субпаты
Заголовок раздела «Субпаты»| Субпат | Экспортирует | Для чего |
|---|---|---|
/schema |
eventsSchema, catalogue |
Полный JSON Schema документ с $defs |
/catalogue |
catalogue, stubs |
Проводка и заготовки props без тяжёлого $defs |
import { catalogue, eventsSchema } from "@vkma.dev/bridge-schema/schema";
catalogue.props.VKWebAppInit; // "VKWebAppInitProps" — имя определения в $defscatalogue.events.VKWebAppGetAuthToken; // { result: "VKWebAppAccessTokenReceived", failed: "VKWebAppAccessTokenFailed" }eventsSchema.$defs.UserInfo; // JSON Schema узел полезной нагрузкиФорма документа
Заголовок раздела «Форма документа»eventsSchema — JSON Schema draft 2020-12:
$defs— 270 определений полезных нагрузок (обычные объекты, enum’ы,anyOf-ветки);x-vkma-catalogue— три таблицы проводки:props(96 отправляемых методов),receive(115 принимаемых имён),events(94 метода с проводкойResult/Failed).
Записи таблиц ссылаются на $defs по имени. Типы TypeScript в корневом entrypoint сгенерированы из этого же документа — данные и типы не расходятся.
import type { EventsCatalogue, EventsSchemaDocument } from "@vkma.dev/bridge-schema/schema";
const wiring: EventsCatalogue["events"] = catalogue.events;const doc: EventsSchemaDocument = eventsSchema;Валидация
Заголовок раздела «Валидация»$defs — обычный JSON Schema документ. Если данные приходят извне (запись из логов, чужой коллектор), проверяй их своим валидатором:
import { eventsSchema } from "@vkma.dev/bridge-schema/schema";import { Ajv2020 } from "ajv/dist/2020.js";
const ajv = new Ajv2020();const validateUserInfo = ajv.compile(eventsSchema.$defs.UserInfo);
if (validateUserInfo(data)) { // data соответствует каталогу для VKWebAppGetUserInfo}Заготовки props
Заголовок раздела «Заготовки props»stubs из /catalogue — метод → минимальный объект из обязательных props, прекомпьютировано из $defs при генерации (только обязательные ключи, с лимитом глубины, первая ветка anyOf; всё невыводимое просто отсутствует):
import { stubs } from "@vkma.dev/bridge-schema/catalogue";
stubs.VKWebAppStorageGet; // { keys: [] }stubs.VKWebAppShowWallPostBox; // { attachments: "" }Применение — панель с формой «выбери метод, получи заготовку props»: devtools execute и инспектор так предзаполняют поля, не таща весь $defs в бандл.
Аугментация declare module на данные не влияет — extending расширяет только типы.