js13k-online
Version:
A simple client SDK for the JS13K Online Challenge Series that abstracts away the WebSocket connection and state management
77 lines • 2.77 kB
TypeScript
//#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