import { EventEmitter } from "events"; import { ModelBase } from "../../models/ModelBase"; import { Logger } from "../../utils/Logger"; import { GameState } from '../gamestate/GameState'; import { EventMap } from "../../constants/events"; export type EmitterContext = EventEmitter; export interface DiffOptions { previously?: GameState; added?: GameState; } export declare abstract class DifferBase { protected previously: GameState | null; protected added: GameState | null; protected abstract logger: Logger | Console; constructor(previously?: GameState, added?: GameState); emitWithContext(emitter: EventEmitter, eventName: keyof EventMap, ...data: EventMap[typeof eventName]): void; /** * 🔥 Safely obtains a field from `curr`, or if it doesn't exist, from `fallback`. * @param {string} path E.g.: 'player.state.hp' * @param {Object} curr Current snapshot * @param {Object} fallback Fallback snapshot (added or previously) * @returns {any} Value found or null */ getFieldSafe(path: string, curr: GameState, fallback: GameState | null): any; abstract diff(previousState: GameState, currentState: GameState, emitterContext: EmitterContext, options: DiffOptions): any; }