/** Whether `next` is an older version than `held` (unversioned records are never called older). */ export const olderThan = (next: { meta?: { versionId?: string } }, held: { meta?: { versionId?: string } } | undefined): boolean => { if (!next.meta?.versionId || !held?.meta?.versionId) return false; const a = Number(next.meta.versionId); const b = Number(held.meta.versionId); return Number.isFinite(a) && Number.isFinite(b) && a < b; }; /** `list` with `next` in place of its record (or added), unless the list already holds a newer version of it. */ export const withNewer = (list: T[], next: T): T[] => { const held = list.find((entry) => entry.id === next.id); if (held && olderThan(next, held)) return list; return held ? list.map((entry) => (entry.id === next.id ? next : entry)) : [...list, next]; };