import { hasWebLocks } from "./syncLock.js";
export async function withWriteLock(storeName, fn, timeoutMs = 0) {
if (!hasWebLocks()) {
return fn();
}
const lockName = `miden-db-${storeName || "default"}`;
if (timeoutMs > 0) {
const controller = new AbortController();
const timeoutId = setTimeout(() => controller.abort(), timeoutMs);
try {
return await navigator.locks.request(
lockName,
{ mode: "exclusive", signal: controller.signal },
async () => {
clearTimeout(timeoutId);
return fn();
}
);
} catch (err) {
clearTimeout(timeoutId);
throw err;
}
}
return navigator.locks.request(lockName, { mode: "exclusive" }, async () => {
return fn();
});
}