@xnlc/types: единый источник типов для всего монорепозитория Xneon Launcher. Все остальные пакеты (@xnlc/core, @xnlc/mods, @xnlc/servers, @xnlc/skins, @xnlc/nbt) и Electron main/renderer импортируют типы отсюда. Это исключает дублирование определений и обеспечивает согласованность между процессами.
Пакет чисто типовой: не содержит runtime-кода, только TypeScript-интерфейсы и type-алиасы. Используется как devDependency или dependency во всех ESM-пакетах проекта.
Установка
Добавьте в проект.npmrc (если еще не добавлен):
Структура типов
Типы организованы по доменам. Основной файлsrc/index.ts реэкспортирует все группы:
Доменные типы (domain-types.ts)
Аккаунты и авторизация
Аккаунты и авторизация
Сборки (builds)
Сборки (builds)
Миры, скриншоты, серверы
Миры, скриншоты, серверы
Java и хранилище
Java и хранилище
Облако
Облако
Статистика
Статистика
Импорт
Импорт
Типы скинов (laby.ts)
Типы модов (mod-types.ts)
Типы запуска (launch-types.ts)
Типы воркера (worker-types.ts)
Воркер запуска находится в
electron/main/minecraft-launch-worker.ts. Он изолирует длительные операции (скачивание, установка) от main-процесса Electron.Типы серверов (server-types.ts)
IPC-контракты (ipc-contracts.ts)
Самая важная часть@xnlc/types для разработки лаунчера. IpcInvokeMap и IpcEventMap являются единственным источником правды для всех каналов IPC между Electron main и renderer.
IpcInvokeMap
Каждый invoke-канал описывает кортеж аргументов и возвращаемый тип:Системные
Системные
Авторизация
Авторизация
Сборки
Сборки
Моды (каталоги)
Моды (каталоги)
Minecraft и запуск
Minecraft и запуск
Серверы
Серверы
XN Connect
XN Connect
Облако
Облако
AI
AI
IpcEventMap
Event-каналы для подписки (ipcRenderer.on):
ElectronAPIExplicit и ElectronAPIExtra
ElectronAPIExplicit содержит типизированные обертки всех invoke-каналов в формате camelCase (launchMinecraft, getMinecraftVersions, modsModrinthSearch и т.д.). ElectronAPIExtra добавляет специфичные для лаунчера методы, которые исторически жили в src/electron.d.ts.
Полный ElectronAPI объединяет explicit + extra + window control (minimize, maximize, close, restore).
Как добавить новый IPC-канал
Чтобы добавить новый канал связи между main и renderer:1
Добавить тип в IpcInvokeMap или IpcEventMap
Откройте
packages/xnlc-types/src/ipc-contracts.ts и добавьте запись в соответствующий интерфейс:2
Обновить ElectronAPIExplicit
Добавьте camelCase метод в
ElectronAPIExplicit:3
Реализовать обработчик в main
Создайте (или дополните) файл в
electron/main/my-domain/:4
Добавить мост в preload
В
electron/preload.ts зарегистрируйте метод:5
Добавить тип в electron.d.ts
В
src/electron.d.ts (или где объявлен window.electronAPI) добавьте:6
Использовать в renderer
Теперь канал доступен через
window.electronAPI:Каналы с префиксом
minecraft: (запуск, остановка, прогресс) обрабатываются воркером electron/main/minecraft-launch-worker.ts. Они изолированы от основного main-процесса для предотвращения блокировки UI при длительных операциях.BuildLoaderRequirementIssue
Специальные типы для проверки совместимости модов с версией загрузчика:mods:check-loader-requirements, который читает declared dependencies прямо из JAR-файлов модов и сравнивает их с установленной версией загрузчика.