Ctrl K
ComunidadGuías…

src/state_machines/snapshot_store.ts

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
/** Reference-stable external store for immutable machine snapshots. */
export class SnapshotStore<State> {
  private readonly listeners = new Set<() => void>();
  private disposed = false;

  constructor(private state: State) {}

  getSnapshot = (): State => this.state;

  /** Read-only listener count for owner-level quiescence policies. */
  subscriberCount(): number {
    return this.listeners.size;
  }

  setState(nextState: State, beforeNotify?: () => void): boolean {
    if (this.disposed || nextState === this.state) return false;
    this.state = nextState;
    beforeNotify?.();
    for (const listener of this.listeners) listener();
    return true;
  }

  subscribe = (listener: () => void): (() => void) => {
    if (this.disposed) return () => undefined;
    this.listeners.add(listener);
    return () => this.listeners.delete(listener);
  };

  dispose(): void {
    if (this.disposed) return;
    this.disposed = true;
    this.listeners.clear();
  }
}