import type { Clock } from '../src/server/clock.js'; export class ManualClock implements Clock { time = Date.now(); id = 0; timers = new Map void }>(); now = () => this.time; setTimeout = (callback: () => void, delay: number) => { const id = ++this.id; this.timers.set(id, { at: this.time + delay, callback }); return id; }; clearTimeout = (id: any) => { this.timers.delete(id); }; async advance(ms: number) { const target = this.time + ms; for (;;) { const next = [...this.timers.entries()].filter(([, t]) => t.at <= target).sort((a, b) => a[1].at - b[1].at)[0]; if (!next) break; this.time = next[1].at; this.timers.delete(next[0]); next[1].callback(); await new Promise(r => setTimeout(r, 20)); } this.time = target; await new Promise(r => setTimeout(r, 20)); } }