Handle blocked upgrades

This commit is contained in:
Jon Staab 2026-08-12 17:37:57 -07:00
parent 620f7593e7
commit d61c0d00fb

View file

@ -22,7 +22,8 @@ export class IDB {
// on who is logged in, so open at whatever version exists and bump it to add missing ones. // on who is logged in, so open at whatever version exists and bump it to add missing ones.
private open = async () => { private open = async () => {
const {name, stores} = this.options const {name, stores} = this.options
const db = await openDB(name) const blocking = () => this.close()
const db = await openDB(name, undefined, {blocking})
const missing = stores.filter(store => !db.objectStoreNames.contains(store.name)) const missing = stores.filter(store => !db.objectStoreNames.contains(store.name))
if (missing.length === 0) { if (missing.length === 0) {
@ -39,8 +40,11 @@ export class IDB {
idbDb.createObjectStore(name, {keyPath}) idbDb.createObjectStore(name, {keyPath})
} }
}, },
blocked() {}, blocked: (currentVersion, blockedVersion) =>
blocking() {}, console.error(
`Upgrade of ${name} from ${currentVersion} to ${blockedVersion} is blocked by another connection`,
),
blocking,
}) })
} }
@ -107,15 +111,19 @@ export class IDB {
await tx.done await tx.done
} }
close = () => { close = async () => {
this.connection?.then(c => c?.close()) const connection = this.connection
this.connection = undefined this.connection = undefined
await connection?.then(c => c?.close())
} }
clear = async () => { clear = async () => {
await this.connection?.then(c => c?.close()) await this.close()
await deleteDB(this.options.name, { await deleteDB(this.options.name, {
blocked() {}, blocked: currentVersion =>
console.error(`Deletion of ${this.options.name} at ${currentVersion} is blocked`),
}) })
} }
} }