export type Mutex = { lock: () => Promise; unlock: () => Promise; }; export function createMutex(): Mutex { let promise: Promise | undefined; let resolve: (() => void) | undefined; const lock = async () => { while (promise) { await promise; } promise = new Promise((res) => { resolve = res; }); }; const unlock = async () => { const res = resolve; promise = undefined; resolve = undefined; res?.(); }; return { lock, unlock }; }