declare const brand: unique symbol; // branded typing export type Brand = T & { [brand]: TBrand; }; export type Player = Brand; export type CardId = Brand; export type FactionId = Brand; export interface Game { [index: number]: any; seed: number; log: string[]; undo: Game[]; turn: number; year: number; active: Player | null; state: string | null; bag_of_glory: Record; blank_markers: number[][]; bonuses: number[]; cards_in_play: Record; current_events: CardId[]; engine: EngineNode[]; fronts: { a: number; m: number; n: number; s: number; }; hands: Record; hero_points: Record; initiative: FactionId; medaillons: Array; tableaus: Record; tracks: number[]; result?: string; victory?: string; location?: string; selected?: string; state_data: any; // played_card: CardId // turn: Turn } export interface View { engine: Game['engine']; log: number | string[]; active?: string | null; prompt: string | null; actions?: any; victory?: string; location?: string; selected?: string; selected_card: CardId | null; bonuses: Game['bonuses']; current_events: CardId[]; fronts: Game['fronts']; hand: CardId[]; medaillons: Game['medaillons']; tracks: number[]; } export type States = { [key: string]: any; }; export type EngineNode = FunctionNode | LeafNode | SeqNode; export interface FunctionNode { t: 'f'; f: string; // function to be triggered a?: any; // args r?: 0 | 1; // 1 if resolved } export interface SeqNode { t: 's'; // Type c: EngineNode[]; } export interface LeafNode { t: 'l'; s: string; // State p: FactionId; // Player a?: any; // args r?: 0 | 1; // 1 if resolved }