// A vendored copy of the one helper this module uses from core's // `client/src/lib/format.js`. // // **Vendored rather than added to the kit, and trimmed rather than copied // whole.** The kit is curated and closed (MODULE_API.md §3.4): every member // added to it is a minor version bump core can never take back, and a date // formatter is not the kind of thing a module should be unable to write. Copying // all six of core's helpers to get one would leave five with no consumer here // and a standing question about which copy is authoritative. // // The vendoring line, from the server half of the extraction (slice 1): **pure // leaf helpers may be copied, security controls may not.** This is a pure leaf. // Core's HTML sanitiser sits two files away and stays exactly where it is. // // The two copies will drift, and that is correct — core's is core's to change. // Nothing here reads a shared format. function parse(value) { if (!value) return null const d = new Date(value) return isNaN(d.getTime()) ? null : d } /** "3m ago". Coarse on purpose: the live feed's timestamps are approximate. */ export function ago(value) { const d = parse(value) if (!d) return '' const secs = Math.max(1, Math.floor((Date.now() - d.getTime()) / 1000)) if (secs < 60) return `${secs}s ago` const mins = Math.floor(secs / 60) if (mins < 60) return `${mins}m ago` const hrs = Math.floor(mins / 60) if (hrs < 24) return `${hrs}h ago` const days = Math.floor(hrs / 24) return `${days}d ago` }