//#region src/types.d.ts
type PartialDeep<T> = { [P in keyof T]?: T[P] extends object ? PartialDeep<T[P]> : T[P] };
type DeltaEvaluator<TState = GameState> = (delta: PartialDeep<TState>, remoteState: PartialDeep<TState>, playerId?: string) => boolean;
type DeltaNormalizer<TState = GameState> = (delta: PartialDeep<TState>) => PartialDeep<TState>;
interface ClientOptions<TState = GameState> {
  host?: string;
  party?: string;
  deltaNormalizer?: DeltaNormalizer<TState>;
  deltaEvaluator?: DeltaEvaluator<TState>;
  throttleMs?: number;
  debug?: boolean;
}
interface MessageData {
  id?: string;
  connect?: string;
  disconnect?: string;
  state?: any;
  delta?: any;
  [key: string]: any;
}
interface GameState {
  _players: Record<string, any>;
  [key: string]: any;
}
type GetPlayerState<TState extends GameState> = TState['_players'][string];
type EventCallback = (data?: any) => void;
//#endregion
//#region src/Js13kClient.d.ts
declare class Js13kClient<TState extends GameState> {
  private room;
  private options;
  private socket;
  private myId;
  private localState;
  private eventListeners;
  private connected;
  private remoteState;
  private pendingUberDelta;
  private throttleTimer;
  private tombstones;
  constructor(room: string, options?: ClientOptions<TState>);
  private log;
  shouldSendDelta(delta: PartialDeep<TState>): boolean;
  connect(): void;
  handleMessage(data: MessageData): void;
  on(event: string, callback: EventCallback): void;
  off(event: string, callback: EventCallback): void;
  emit(event: string, data?: any): void;
  getState(): TState;
  getMyId(): string | null;
  getMyState(copy?: boolean): GetPlayerState<TState> | null;
  getPlayerState(playerId: string, copy?: boolean): GetPlayerState<TState> | null;
  isConnected(): boolean;
  sendDelta(delta: PartialDeep<TState>): void;
  updateState(delta: PartialDeep<TState>): void;
  private addToPendingDelta;
  private addLocalTombstonesFromDelta;
  private processPendingDelta;
  updateMyState(delta: PartialDeep<GetPlayerState<TState>>): void;
  disconnect(): void;
}
//#endregion
//#region src/util.d.ts
declare function deepClone<T>(obj: T): T;
declare function mergeState(target: any, source: any, shouldDeleteOnNull?: boolean): any;
declare function generateUUID(): string;
declare function filterDeltaWithTombstones(delta: any, tombstones: Set<string>): any;
//#endregion
//#region src/index.d.ts
declare global {
  interface Window {
    Js13kClient: typeof Js13kClient;
  }
}
//#endregion
export { ClientOptions, DeltaEvaluator, DeltaNormalizer, EventCallback, GameState, GetPlayerState, Js13kClient, MessageData, PartialDeep, deepClone, Js13kClient as default, filterDeltaWithTombstones, generateUUID, mergeState };
//# sourceMappingURL=index.d.ts.map