import { PeerId, Primitive, Tid } from "../common.ts"; export class TinyLWW> { values: Partial = {}; lastWriters = new Map(); clock = new Map(); set( key: K, value: V, from: PeerId, at?: Tid, ): boolean { const lastWriter = this.lastWriters.get(key); at ??= lastWriter ? this.clock.get(lastWriter) : undefined; at ??= -1; if (lastWriter !== undefined && (this.clock.get(lastWriter) ?? -1) >= at) return false; if ((this.clock.get(from) ?? -1) >= at) return false; this.values[key] = value; this.clock.set(from, at); this.lastWriters.set(key, from); return true; } get(key: K): Shape[K] | undefined { return this.values[key]; } }