feat: flush IndexedDB cache on DATA_VERSION bump
The idempotent upgrade only created missing object stores, so bumping DATA_VERSION no longer reset bad or stale data — it just added stores. This restores a bump as a true global cache flush: the upgrade now clears every existing store before recreating any missing ones, so shipping a version bump forces all clients to refetch fresh on next boot. Gated on oldVersion > 0 so fresh installs skip the flush, and clearing before creating means only pre-existing stores are touched. This is the break-glass lever for the one non-self-healing failure mode (non-empty store holding wrong-shaped data paired with a matching cache key), e.g. after a serializer shape change shipped without a version bump.
This commit is contained in:
@@ -13,7 +13,17 @@ export class DataManager {
|
||||
if (this.db) return this.db;
|
||||
const dbName = `cw-store-${this.accountId}`;
|
||||
this.db = await openDB(dbName, DATA_VERSION, {
|
||||
upgrade(db) {
|
||||
upgrade(db, oldVersion, _newVersion, tx) {
|
||||
// Flush data carried over from a previous schema version so a
|
||||
// DATA_VERSION bump acts as a global cache reset. oldVersion === 0 on
|
||||
// first install, so fresh devices skip this. Clearing before creating
|
||||
// means we only ever clear stores that pre-existed this upgrade.
|
||||
if (oldVersion > 0) {
|
||||
[...db.objectStoreNames].forEach(name =>
|
||||
tx.objectStore(name).clear()
|
||||
);
|
||||
}
|
||||
|
||||
if (!db.objectStoreNames.contains('cache-keys')) {
|
||||
db.createObjectStore('cache-keys');
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user