@tableverse/contracts
v0.1.4
Published
TypeScript contracts for the Table Verse game platform
Maintainers
Readme
@tableverse/contracts
TypeScript-контракти, спільні між shell-ом Table Verse та іграми. Пакет містить лише типи та константи — жодної runtime-логіки, доступу до DOM чи сайд-ефектів.
Встановлення
npm install --save-dev @tableverse/contractsПакет призначений як devDependency. Ігри постачаються самодостатніми бандлами,
тому ці типи не повинні потрапляти в runtime-вивід.
Використання
import type {
GameSessionContext,
GameFinishedEvent,
PlatformBridge,
} from '@tableverse/contracts';
import { CONTRACT_VERSION } from '@tableverse/contracts';Інтеграція через Custom Element (на боці гри)
class MyGame extends HTMLElement {
static readonly observedAttributes = ['data-contract-version'];
set sessionContext(ctx: GameSessionContext) {
// зберегти й використати ctx
}
private finish(event: GameFinishedEvent) {
this.dispatchEvent(new CustomEvent('finished', { detail: event }));
}
}
customElements.define('my-game', MyGame);Гра оголошує версію контракту, проти якої її зібрали:
<my-game data-contract-version="0.0.0"></my-game>Робота з platform bridge
const token = window.__PLATFORM__.getToken();
const unsubscribe = window.__PLATFORM__.onTokenChange((newToken) => {
// перепідключити WebSocket із новим токеном
});
// пізніше: unsubscribe();Експорти
| Експорт | Тип | Опис |
| --------------------- | --------- | ----------------------------------------------------- |
| GameSessionContext | interface | Контекст сесії, який shell передає у гру. |
| CurrentUser | interface | Користувач, який грає на цьому клієнті. |
| SessionPlayer | interface | Один гравець у сесії. |
| GameFinishedEvent | union | Discriminated union для події 'finished'. |
| GameFinishedWin | interface | Варіант: хтось переміг. |
| GameFinishedDraw | interface | Варіант: нічия. |
| GameFinishedAborted | interface | Варіант: гру перервано. |
| PlatformBridge | interface | Форма window.__PLATFORM__. |
| CONTRACT_VERSION | constant | Поточна версія контракту (semver-рядок). |
Версіонування
Пакет дотримується Semantic Versioning:
- MAJOR — breaking-зміна в будь-якому експортованому типі.
- MINOR — additive-зміна (нове необов'язкове поле, новий варіант у union).
- PATCH — документація, рефакторинг, без зміни публічного API.
Shell перевіряє сумісність за major-версією через атрибут
data-contract-version перед монтуванням гри.
Ліцензія
MIT
