/** @internal */ export interface ObservableKeyedStore { set(key: string, value: T): void; delete(key: string): void; get(key: string): T | undefined; has(key: string): boolean; subscribe(listener: () => void): () => void; /** Notified only when membership changes (a key is added, deleted, or hydrated) — value updates on an existing key do not fire. Pair with {@link keysSnapshot}. */ subscribeMembership(listener: () => void): () => void; /** An owned copy of the store's entries — mutating the returned map never reaches the store. Stable identity until the next write, like {@link arraySnapshot}. */ mapSnapshot(): ReadonlyMap; arraySnapshot(): readonly T[]; /** Stable-identity list of keys; identity changes only when membership changes, so a per-frame `set` on an existing key does not churn it. */ keysSnapshot(): readonly string[]; /** Serializable `[key, value]` entries — the transport counterpart of {@link hydrate} for host→client mirroring. */ snapshot(): readonly (readonly [string, T])[]; /** Replace all entries with `data` (clears keys absent from it), emitting once. */ hydrate(data: readonly (readonly [string, T])[]): void; } /** @internal */ export declare function createObservableKeyedStore(areEqual?: (previous: T, next: T) => boolean, beforeNotify?: (key: string | undefined, membershipChanged: boolean) => void): ObservableKeyedStore;