import type { SchedulerDeps } from "@nanobpm/urban/runtime"; /** A `SchedulerDeps` backed by a virtual clock the test author advances explicitly. */ export interface ManualScheduler extends SchedulerDeps { /** Advance the virtual clock by `ms`, firing every timer due within the interval (in * ascending order) and draining each timer's async follow-on before the next fires. */ advance(ms: number): Promise; /** Fire every timer already due at the current time (no clock movement), draining each * timer's async follow-on. Returns the number of timers fired — a fixpoint signal for * `settle()`: zero means nothing was pending. */ fireDue(): Promise; /** How many timers are currently armed (unfired). */ pending(): number; } /** Create a {@link ManualScheduler} whose virtual clock starts at `epochMs` (default 0). An * optional `signal` is surfaced on the returned seam so {@link schedulerClock} can cancel a * handler parked on `app.wait()` at shutdown (see {@link SchedulerDeps.signal}); the scheduler's * own timer bookkeeping is unaffected by it. */ export declare function createManualScheduler(epochMs?: number, signal?: AbortSignal): ManualScheduler;