export interface Deferred { promise: Promise; resolve: (value: T) => void; reject: (error: unknown) => void; } export function deferred(): Deferred { let resolve!: (value: T) => void; let reject!: (error: unknown) => void; const promise = new Promise((promiseResolve, promiseReject) => { resolve = promiseResolve; reject = promiseReject; }); return { promise, resolve, reject }; } export async function waitForAsyncWork(assertion: () => void): Promise { for (let attempt = 0; attempt < 50; attempt += 1) { try { assertion(); return; } catch { await Promise.resolve(); } } assertion(); }