Revert "firestore: minor refactor of listener registration of "versio… · firebase/firebase-js-sdk@9771bff (original) (raw)
`@@ -19,10 +19,9 @@ import { getGlobal, getUA, isIndexedDBAvailable } from '@firebase/util';
`
19
19
``
20
20
`import { debugAssert } from '../util/assert';
`
21
21
`import { Code, FirestoreError } from '../util/error';
`
22
``
`-
import { logDebug, logError, logWarn } from '../util/log';
`
``
22
`+
import { logDebug, logError } from '../util/log';
`
23
23
`import { Deferred } from '../util/promise';
`
24
24
``
25
``
`-
import { DatabaseDeletedListener } from './persistence';
`
26
25
`import { PersistencePromise } from './persistence_promise';
`
27
26
``
28
27
`` // References to indexedDB are guarded by SimpleDb.isAvailable() and getGlobal()
``
`@@ -159,7 +158,8 @@ export class SimpleDbTransaction {
`
159
158
` */
`
160
159
`export class SimpleDb {
`
161
160
`private db?: IDBDatabase;
`
162
``
`-
private databaseDeletedListener?: DatabaseDeletedListener;
`
``
161
`+
private lastClosedDbVersion: number | null = null;
`
``
162
`+
private versionchangelistener?: (event: IDBVersionChangeEvent) => void;
`
163
163
``
164
164
`/** Deletes the specified database. */
`
165
165
`static delete(name: string): Promise {
`
`@@ -365,35 +365,22 @@ export class SimpleDb {
`
365
365
`});
`
366
366
`}
`
367
367
``
368
``
`-
this.db.addEventListener(
`
369
``
`-
'versionchange',
`
370
``
`-
event => {
`
371
``
`-
// Notify the listener if another tab attempted to delete the IndexedDb
`
372
``
`-
// database, such as by calling clearIndexedDbPersistence().
`
373
``
`-
if (event.newVersion === null) {
`
374
``
`-
logWarn(
`
375
``
`` -
Received "versionchange" event with newVersion===null; +
``
376
``
`-
'notifying the registered DatabaseDeletedListener, if any'
`
377
``
`-
);
`
378
``
`-
this.databaseDeletedListener?.();
`
379
``
`-
}
`
380
``
`-
},
`
381
``
`-
{ passive: true }
`
382
``
`-
);
`
``
368
`+
if (this.versionchangelistener) {
`
``
369
`+
this.db.onversionchange = event => this.versionchangelistener!(event);
`
``
370
`+
}
`
383
371
``
384
372
`return this.db;
`
385
373
`}
`
386
374
``
387
``
`-
setDatabaseDeletedListener(
`
388
``
`-
databaseDeletedListener: DatabaseDeletedListener
`
``
375
`+
setVersionChangeListener(
`
``
376
`+
versionChangeListener: (event: IDBVersionChangeEvent) => void
`
389
377
`): void {
`
390
``
`-
if (this.databaseDeletedListener) {
`
391
``
`-
throw new Error(
`
392
``
`-
'setDatabaseDeletedListener() may only be called once, ' +
`
393
``
`-
'and it has already been called'
`
394
``
`-
);
`
``
378
`+
this.versionchangelistener = versionChangeListener;
`
``
379
`+
if (this.db) {
`
``
380
`+
this.db.onversionchange = (event: IDBVersionChangeEvent) => {
`
``
381
`+
return versionChangeListener(event);
`
``
382
`+
};
`
395
383
`}
`
396
``
`-
this.databaseDeletedListener = databaseDeletedListener;
`
397
384
`}
`
398
385
``
399
386
`async runTransaction(
`