/** @type {import("../../application/ports/clock-port.js").ClockPort} */ export const systemClock = Object.freeze({ now: () => Date.now(), sleep(milliseconds, signal) { return new Promise((resolve, reject) => { if (signal?.aborted) { reject(signal.reason); return; } const timer = setTimeout(() => { signal?.removeEventListener("abort", onAbort); resolve(); }, milliseconds); const onAbort = () => { clearTimeout(timer); signal?.removeEventListener("abort", onAbort); reject(signal?.reason); }; signal?.addEventListener("abort", onAbort, { once: true }); }); }, });