Spaces:
Sleeping
Sleeping
import { v } from 'convex/values'; | |
const IdShortCodes = { agents: 'a', conversations: 'c', players: 'p', operations: 'o' }; | |
export type IdTypes = keyof typeof IdShortCodes; | |
export type GameId<T extends IdTypes> = string & { __type: T }; | |
export function parseGameId<T extends IdTypes>(idType: T, gameId: string): GameId<T> { | |
const type = gameId[0]; | |
const match = Object.entries(IdShortCodes).find(([_, value]) => value === type); | |
if (!match || match[0] !== idType) { | |
throw new Error(`Invalid game ID type: ${type}`); | |
} | |
const number = parseInt(gameId.slice(2), 10); | |
if (isNaN(number) || !Number.isInteger(number) || number < 0) { | |
throw new Error(`Invalid game ID number: ${gameId}`); | |
} | |
return gameId as GameId<T>; | |
} | |
export function allocGameId<T extends IdTypes>(idType: T, idNumber: number): GameId<T> { | |
const type = IdShortCodes[idType]; | |
if (!type) { | |
throw new Error(`Invalid game ID type: ${idType}`); | |
} | |
return `${type}:${idNumber}` as GameId<T>; | |
} | |
export const conversationId = v.string(); | |
export const playerId = v.string(); | |
export const agentId = v.string(); | |
export const operationId = v.string(); | |