lila/ui/analyse/src/explorer/interfaces.ts

112 lines
2.1 KiB
TypeScript

export interface Hovering {
fen: Fen;
uci: Uci;
}
export type ExplorerDb = 'lichess' | 'masters' | 'player';
export type ExplorerSpeed = 'bullet' | 'blitz' | 'rapid' | 'classical';
export type ExplorerMode = 'casual' | 'rated';
export interface PlayerOpts {
name: string;
}
export interface ExplorerOpts {
endpoint: string;
endpoint3: string;
tablebaseEndpoint: string;
}
export interface ExplorerData {
fen: Fen;
moves: MoveStats[];
isOpening?: true;
tablebase?: true;
}
export interface OpeningData extends ExplorerData, Partial<OpeningMoveStats> {
moves: OpeningMoveStats[];
topGames?: OpeningGame[];
recentGames?: OpeningGame[];
opening?: Opening;
}
export interface Opening {
eco: string;
name: string;
}
export interface OpeningGame {
id: string;
white: OpeningPlayer;
black: OpeningPlayer;
winner?: Color;
year?: string;
month?: string;
speed?: Speed;
}
interface OpeningPlayer {
name: string;
rating: number;
}
export type TablebaseCategory =
| 'loss'
| 'unknown'
| 'maybe-loss'
| 'blessed-loss'
| 'draw'
| 'cursed-win'
| 'maybe-win'
| 'win';
export interface TablebaseData extends ExplorerData {
moves: TablebaseMoveStats[];
dtz: number | null;
dtm: number | null;
checkmate: boolean;
stalemate: boolean;
variant_win: boolean;
variant_loss: boolean;
insufficient_material: boolean;
category: TablebaseCategory;
}
export interface MoveStats {
uci: Uci;
san: San;
}
export interface OpeningMoveStats extends MoveStats {
white: number;
black: number;
draws: number;
averageRating: number;
}
export interface TablebaseMoveStats extends MoveStats {
dtz: number | null;
dtm: number | null;
checkmate: boolean;
stalemate: boolean;
variant_win: boolean;
variant_loss: boolean;
insufficient_material: boolean;
zeroing: boolean;
category: TablebaseCategory;
}
export function isOpening(m: ExplorerData): m is OpeningData {
return !!m.isOpening;
}
export function isTablebase(m: ExplorerData): m is TablebaseData {
return !!m.tablebase;
}
export interface SimpleTablebaseHit {
fen: Fen;
best?: Uci; // no move if checkmate/stalemate
winner: Color | undefined;
}