|
15 | 15 | * limitations under the License. |
16 | 16 | */ |
17 | 17 |
|
18 | | -import {getGlobal, getUA, isIndexedDBAvailable} from '@firebase/util'; |
| 18 | +import { getGlobal, getUA, isIndexedDBAvailable } from '@firebase/util'; |
19 | 19 |
|
20 | | -import {debugAssert} from '../util/assert'; |
21 | | -import {Code, FirestoreError} from '../util/error'; |
22 | | -import {logDebug, logError, logWarn} from '../util/log'; |
23 | | -import {Deferred} from '../util/promise'; |
| 20 | +import { debugAssert } from '../util/assert'; |
| 21 | +import { Code, FirestoreError } from '../util/error'; |
| 22 | +import { logDebug, logError, logWarn } from '../util/log'; |
| 23 | +import { Deferred } from '../util/promise'; |
24 | 24 |
|
25 | | -import {PersistencePromise} from './persistence_promise'; |
26 | | -import {type DatabaseDeletedListener} from './persistence'; |
| 25 | +import { PersistencePromise } from './persistence_promise'; |
| 26 | +import { type DatabaseDeletedListener } from './persistence'; |
27 | 27 |
|
28 | 28 | // References to `indexedDB` are guarded by SimpleDb.isAvailable() and getGlobal() |
29 | 29 | /* eslint-disable no-restricted-globals */ |
@@ -355,30 +355,31 @@ export class SimpleDb { |
355 | 355 | ) { |
356 | 356 | logWarn( |
357 | 357 | `IndexedDB onupgradeneeded indicates that the ` + |
358 | | - `database contents may have been cleared, such as by clicking ` + |
359 | | - `the "clear site data" button in a browser. This _could_ cause ` + |
360 | | - `corruption of the IndexeDB database data if the clear ` + |
361 | | - `operation happened in the middle of Firestore operations. (` + |
362 | | - `db.name=${db.name}, ` + |
363 | | - `db.version=${db.version}, ` + |
364 | | - `lastClosedDbVersion=${this.lastClosedDbVersion}, ` + |
365 | | - `event.oldVersion=${event.oldVersion}, ` + |
366 | | - `event.newVersion=${event.newVersion}` + |
367 | | - `)` |
| 358 | + `database contents may have been cleared, such as by clicking ` + |
| 359 | + `the "clear site data" button in a browser. This _could_ cause ` + |
| 360 | + `corruption of the IndexeDB database data if the clear ` + |
| 361 | + `operation happened in the middle of Firestore operations. (` + |
| 362 | + `db.name=${db.name}, ` + |
| 363 | + `db.version=${db.version}, ` + |
| 364 | + `lastClosedDbVersion=${this.lastClosedDbVersion}, ` + |
| 365 | + `event.oldVersion=${event.oldVersion}, ` + |
| 366 | + `event.newVersion=${event.newVersion}` + |
| 367 | + `)` |
368 | 368 | ); |
369 | 369 | if (this.databaseDeletedListener) { |
370 | | - const listenerResult = this.databaseDeletedListener("site data cleared"); |
371 | | - if (listenerResult.type !== "continue") { |
| 370 | + const listenerResult = |
| 371 | + this.databaseDeletedListener('site data cleared'); |
| 372 | + if (listenerResult.type !== 'continue') { |
372 | 373 | throw new Error( |
373 | 374 | `Refusing to open IndexedDB database after having been ` + |
374 | | - `cleared, such as by clicking the "clear site data" button ` + |
375 | | - `in a web browser: ${listenerResult.abortReason} (` + |
376 | | - `db.name=${db.name}, ` + |
377 | | - `db.version=${db.version}, ` + |
378 | | - `lastClosedDbVersion=${this.lastClosedDbVersion}, ` + |
379 | | - `event.oldVersion=${event.oldVersion}, ` + |
380 | | - `event.newVersion=${event.newVersion}` + |
381 | | - `)` |
| 375 | + `cleared, such as by clicking the "clear site data" button ` + |
| 376 | + `in a web browser: ${listenerResult.abortReason} (` + |
| 377 | + `db.name=${db.name}, ` + |
| 378 | + `db.version=${db.version}, ` + |
| 379 | + `lastClosedDbVersion=${this.lastClosedDbVersion}, ` + |
| 380 | + `event.oldVersion=${event.oldVersion}, ` + |
| 381 | + `event.newVersion=${event.newVersion}` + |
| 382 | + `)` |
382 | 383 | ); |
383 | 384 | } |
384 | 385 | } |
@@ -406,52 +407,60 @@ export class SimpleDb { |
406 | 407 | this.lastClosedDbVersion = db.version; |
407 | 408 | logWarn( |
408 | 409 | `IndexedDB "close" event received, indicating abnormal database ` + |
409 | | - `closure. The database contents may have been cleared, such as ` + |
410 | | - `by clicking the "clear site data" button in a browser. ` + |
411 | | - `Re-opening the IndexedDB database may fail to avoid IndexedDB ` + |
412 | | - `database data corruption (` + |
413 | | - `db.name=${db.name}, ` + |
414 | | - `db.version=${db.version}` + |
415 | | - `)` |
| 410 | + `closure. The database contents may have been cleared, such as ` + |
| 411 | + `by clicking the "clear site data" button in a browser. ` + |
| 412 | + `Re-opening the IndexedDB database may fail to avoid IndexedDB ` + |
| 413 | + `database data corruption (` + |
| 414 | + `db.name=${db.name}, ` + |
| 415 | + `db.version=${db.version}` + |
| 416 | + `)` |
416 | 417 | ); |
417 | 418 | }, |
418 | 419 | { passive: true } |
419 | 420 | ); |
420 | 421 | } |
421 | 422 |
|
422 | | - this.db.addEventListener("versionchange", event => { |
423 | | - const db = event.target as IDBDatabase; |
424 | | - if (event.newVersion !== null) { |
425 | | - return; |
426 | | - } |
| 423 | + this.db.addEventListener( |
| 424 | + 'versionchange', |
| 425 | + event => { |
| 426 | + const db = event.target as IDBDatabase; |
| 427 | + if (event.newVersion !== null) { |
| 428 | + return; |
| 429 | + } |
427 | 430 |
|
428 | | - logDebug( |
429 | | - `IndexedDB "versionchange" event with newVersion===null received; ` + |
430 | | - `this is likely because clearIndexedDbPersistence() was called, ` + |
431 | | - `possibly in another tab if multi-tab persistence is enabled.` |
432 | | - ); |
433 | | - if (this.databaseDeletedListener) { |
434 | | - const listenerResult = this.databaseDeletedListener("persistence cleared"); |
435 | | - if (listenerResult.type !== "continue") { |
436 | | - logWarn( |
437 | | - `Closing IndexedDB database "${db.name}" in response to ` + |
438 | | - `"versionchange" event with newVersion===null: ` + |
439 | | - `${listenerResult.abortReason}` |
| 431 | + logDebug( |
| 432 | + `IndexedDB "versionchange" event with newVersion===null received; ` + |
| 433 | + `this is likely because clearIndexedDbPersistence() was called, ` + |
| 434 | + `possibly in another tab if multi-tab persistence is enabled.` |
| 435 | + ); |
| 436 | + if (this.databaseDeletedListener) { |
| 437 | + const listenerResult = this.databaseDeletedListener( |
| 438 | + 'persistence cleared' |
440 | 439 | ); |
441 | | - db.close(); |
442 | | - if (db === this.db) { |
443 | | - this.db = undefined; |
| 440 | + if (listenerResult.type !== 'continue') { |
| 441 | + logWarn( |
| 442 | + `Closing IndexedDB database "${db.name}" in response to ` + |
| 443 | + `"versionchange" event with newVersion===null: ` + |
| 444 | + `${listenerResult.abortReason}` |
| 445 | + ); |
| 446 | + db.close(); |
| 447 | + if (db === this.db) { |
| 448 | + this.db = undefined; |
| 449 | + } |
444 | 450 | } |
445 | 451 | } |
446 | | - } |
447 | | - }, {passive:true}); |
| 452 | + }, |
| 453 | + { passive: true } |
| 454 | + ); |
448 | 455 |
|
449 | 456 | return this.db; |
450 | 457 | } |
451 | 458 |
|
452 | | - setDatabaseDeletedListener(databaseDeletedListener: DatabaseDeletedListener): void { |
| 459 | + setDatabaseDeletedListener( |
| 460 | + databaseDeletedListener: DatabaseDeletedListener |
| 461 | + ): void { |
453 | 462 | if (this.databaseDeletedListener) { |
454 | | - throw new Error("setOnDatabaseDeletedListener() has already been called"); |
| 463 | + throw new Error('setOnDatabaseDeletedListener() has already been called'); |
455 | 464 | } |
456 | 465 | this.databaseDeletedListener = databaseDeletedListener; |
457 | 466 | } |
|
0 commit comments