|
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