import { emptySpeedProbeObservations, sameSpeedMeasurement, type SpeedMeasurementParameters, type SpeedProbeRead } from "@mmapp/contracts" type Observations = Pick type Pair = { id: string } & SpeedMeasurementParameters /** Publish confirmed configuration while preserving the latest snapshot only for the same measurement parameters. */ export function publishSpeedProbeSnapshots>(previous: readonly T[], next: readonly T[]) { const byId = new Map(previous.map(row => [row.id, row])) return next.map(row => { const old = byId.get(row.id) if (!old || !sameSpeedMeasurement(old, row)) { return { ...row, ...emptySpeedProbeObservations } } const observations = Object.fromEntries(Object.keys(emptySpeedProbeObservations).map(key => [key, old[key as keyof Observations] ?? null])) as Observations return { ...row, ...observations } }) }