export class Mutex { #lockReleasePromise: Promise | null = null; async acquireLock(): Promise { if (this.#lockReleasePromise) { await this.#lockReleasePromise; } const { resolve, reject, promise } = Promise.withResolvers(); this.#lockReleasePromise = promise; return { [Symbol.dispose]: () => { this.#lockReleasePromise = null; resolve!(); }, }; } }