/** * @typedef {{ * now(): number, * sleep(milliseconds: number, signal?: AbortSignal): Promise * }} ClockPort */ /** @type {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(resolve, milliseconds); signal?.addEventListener( "abort", () => { clearTimeout(timer); reject(signal.reason); }, { once: true }, ); }); }, });