@@ -53,7 +53,7 @@ import {
53
53
setOnlineComponentProvider
54
54
} from './components' ;
55
55
import { DEFAULT_HOST , DEFAULT_SSL } from '../../../lite/src/api/components' ;
56
- import { DatabaseInfo } from '../../../src/core/database_info' ;
56
+ import { DatabaseId , DatabaseInfo } from '../../../src/core/database_info' ;
57
57
import { AutoId } from '../../../src/util/misc' ;
58
58
import { User } from '../../../src/auth/user' ;
59
59
import { CredentialChangeListener } from '../../../src/api/credentials' ;
@@ -76,14 +76,29 @@ export interface Settings extends LiteSettings {
76
76
cacheSizeBytes ?: number ;
77
77
}
78
78
79
+ // TODO(firestore-compat): This interface exposes internal APIs that the Compat
80
+ // layer implements to interact with the firestore-exp SDL. We can remove this
81
+ // class once we have an actual compat class for FirebaseFirestore.
82
+ export interface FirestoreCompat {
83
+ readonly _initialized : boolean ;
84
+ readonly _terminated : boolean ;
85
+ readonly _databaseId : DatabaseId ;
86
+ readonly _persistenceKey : string ;
87
+ readonly _queue : AsyncQueue ;
88
+ _getSettings ( ) : Settings ;
89
+ _getConfiguration ( ) : Promise < ComponentConfiguration > ;
90
+ _delete ( ) : Promise < void > ;
91
+ _setCredentialChangeListener ( listener : ( user : User ) => void ) : void ;
92
+ }
93
+
79
94
/**
80
95
* The Cloud Firestore service interface.
81
96
*
82
97
* Do not call this constructor directly. Instead, use {@link getFirestore()}.
83
98
*/
84
99
export class FirebaseFirestore
85
100
extends LiteFirestore
86
- implements _FirebaseService {
101
+ implements _FirebaseService , FirestoreCompat {
87
102
readonly _queue = new AsyncQueue ( ) ;
88
103
readonly _persistenceKey : string ;
89
104
readonly _clientId = AutoId . newId ( ) ;
@@ -103,7 +118,10 @@ export class FirebaseFirestore
103
118
super ( app , authProvider ) ;
104
119
this . _persistenceKey = app . name ;
105
120
this . _credentials . setChangeListener ( user => {
106
- this . _user = user ;
121
+ if ( ! this . _user . isEqual ( user ) ) {
122
+ this . _user = user ;
123
+ this . _credentialListener ( user ) ;
124
+ }
107
125
this . _receivedInitialUser . resolve ( ) ;
108
126
} ) ;
109
127
}
@@ -250,7 +268,7 @@ export function getFirestore(app: FirebaseApp): FirebaseFirestore {
250
268
* @return A promise that represents successfully enabling persistent storage.
251
269
*/
252
270
export function enableIndexedDbPersistence (
253
- firestore : FirebaseFirestore ,
271
+ firestore : FirestoreCompat ,
254
272
persistenceSettings ?: PersistenceSettings
255
273
) : Promise < void > {
256
274
verifyNotInitialized ( firestore ) ;
@@ -297,7 +315,7 @@ export function enableIndexedDbPersistence(
297
315
* storage.
298
316
*/
299
317
export function enableMultiTabIndexedDbPersistence (
300
- firestore : FirebaseFirestore
318
+ firestore : FirestoreCompat
301
319
) : Promise < void > {
302
320
verifyNotInitialized ( firestore ) ;
303
321
@@ -326,7 +344,7 @@ export function enableMultiTabIndexedDbPersistence(
326
344
* but the client remains usable.
327
345
*/
328
346
function setPersistenceProviders (
329
- firestore : FirebaseFirestore ,
347
+ firestore : FirestoreCompat ,
330
348
onlineComponentProvider : OnlineComponentProvider ,
331
349
offlineComponentProvider : OfflineComponentProvider
332
350
) : Promise < void > {
@@ -415,7 +433,7 @@ export function canFallbackFromIndexedDbError(
415
433
* cleared. Otherwise, the promise is rejected with an error.
416
434
*/
417
435
export function clearIndexedDbPersistence (
418
- firestore : FirebaseFirestore
436
+ firestore : FirestoreCompat
419
437
) : Promise < void > {
420
438
if ( firestore . _initialized && ! firestore . _terminated ) {
421
439
throw new FirestoreError (
@@ -531,7 +549,7 @@ export function terminate(firestore: FirebaseFirestore): Promise<void> {
531
549
return firestore . _delete ( ) ;
532
550
}
533
551
534
- function verifyNotInitialized ( firestore : FirebaseFirestore ) : void {
552
+ function verifyNotInitialized ( firestore : FirestoreCompat ) : void {
535
553
if ( firestore . _initialized || firestore . _terminated ) {
536
554
throw new FirestoreError (
537
555
Code . FAILED_PRECONDITION ,
0 commit comments