Something went wrong. Try again.
fork of prime agent with changes i want but are not upstreamable probqbly (and some fixes)
Something went wrong. Try again.
1.1 kB · 37 lines
TypeScript
at main
1234567891011121314151617181920212223242526272829303132333435363738/** Counts in-flight mutating commands so update-restart preparation can wait for them to drain. */export class MutationDrainLatch { private active = 0; private readonly waiters = new Set<() => void>();
begin(): void { this.active++; }
end(): void { this.active--; for (const resolve of this.waiters) resolve(); this.waiters.clear(); }
async waitForDrain(remaining: number, signal: AbortSignal, abortMessage: string): Promise<void> { if (signal.aborted) throw new Error(abortMessage); while (this.active > remaining) { await new Promise<void>((resolve, reject) => { let settled = false; const settle = (error?: Error) => { if (settled) return; settled = true; this.waiters.delete(onDrained); signal.removeEventListener("abort", onAbort); if (error) reject(error); else resolve(); }; const onDrained = () => settle(); const onAbort = () => settle(new Error(abortMessage)); this.waiters.add(onDrained); signal.addEventListener("abort", onAbort, { once: true }); }); if (signal.aborted) throw new Error(abortMessage); } }}