/** * A deferred: a `Promise` together with its `resolve` / `reject` functions. * This is `Promise.withResolvers()`, which is not available in all supported * runtimes. */ export function promiseWithResolvers(): { promise: Promise; resolve: (value: T | PromiseLike) => void; reject: (reason?: unknown) => void; } { let resolve!: (value: T | PromiseLike) => void; let reject!: (reason?: unknown) => void; const promise = new Promise((res, rej) => { resolve = res; reject = rej; }); return { promise, resolve, reject }; }