@@ -280,24 +280,18 @@ class FirestoreSettings {
280
280
}
281
281
}
282
282
283
- class FirestoreConfig {
284
- databaseId : DatabaseId ;
285
- persistenceKey : string ;
286
- credentials : CredentialsProvider ;
287
- firebaseApp : FirebaseApp ;
288
- settings : FirestoreSettings ;
289
- persistence : boolean ;
290
- }
291
-
292
283
/**
293
284
* The root reference to the database.
294
285
*/
295
286
export class Firestore implements firestore . FirebaseFirestore , FirebaseService {
296
287
// The objects that are a part of this API are exposed to third-parties as
297
288
// compiled javascript so we want to flag our private members with a leading
298
289
// underscore to discourage their use.
299
- private readonly _config : FirestoreConfig ;
300
290
readonly _databaseId : DatabaseId ;
291
+ private readonly _persistenceKey : string ;
292
+ private _credentials : CredentialsProvider ;
293
+ private readonly _firebaseApp : FirebaseApp | null = null ;
294
+ private _settings : FirestoreSettings ;
301
295
302
296
// The firestore client instance. This will be available as soon as
303
297
// configureClient is called, but any calls against it will block until
@@ -311,18 +305,17 @@ export class Firestore implements firestore.FirebaseFirestore, FirebaseService {
311
305
// TODO(mikelehen): Use modularized initialization instead.
312
306
readonly _queue = new AsyncQueue ( ) ;
313
307
314
- _dataConverter : UserDataConverter ;
308
+ readonly _dataConverter : UserDataConverter ;
315
309
316
310
constructor ( databaseIdOrApp : FirestoreDatabase | FirebaseApp ) {
317
- const config = new FirestoreConfig ( ) ;
318
311
if ( typeof ( databaseIdOrApp as FirebaseApp ) . options === 'object' ) {
319
312
// This is very likely a Firebase app object
320
313
// TODO(b/34177605): Can we somehow use instanceof?
321
314
const app = databaseIdOrApp as FirebaseApp ;
322
- config . firebaseApp = app ;
323
- config . databaseId = Firestore . databaseIdFromApp ( app ) ;
324
- config . persistenceKey = config . firebaseApp . name ;
325
- config . credentials = new FirebaseCredentialsProvider ( app ) ;
315
+ this . _firebaseApp = app ;
316
+ this . _databaseId = Firestore . databaseIdFromApp ( app ) ;
317
+ this . _persistenceKey = app . name ;
318
+ this . _credentials = new FirebaseCredentialsProvider ( app ) ;
326
319
} else {
327
320
const external = databaseIdOrApp as FirestoreDatabase ;
328
321
if ( ! external . projectId ) {
@@ -332,15 +325,14 @@ export class Firestore implements firestore.FirebaseFirestore, FirebaseService {
332
325
) ;
333
326
}
334
327
335
- config . databaseId = new DatabaseId ( external . projectId , external . database ) ;
328
+ this . _databaseId = new DatabaseId ( external . projectId , external . database ) ;
336
329
// Use a default persistenceKey that lines up with FirebaseApp.
337
- config . persistenceKey = '[DEFAULT]' ;
338
- config . credentials = new EmptyCredentialsProvider ( ) ;
330
+ this . _persistenceKey = '[DEFAULT]' ;
331
+ this . _credentials = new EmptyCredentialsProvider ( ) ;
339
332
}
340
333
341
- config . settings = new FirestoreSettings ( { } ) ;
342
- this . _config = config ;
343
- this . _databaseId = config . databaseId ;
334
+ this . _settings = new FirestoreSettings ( { } ) ;
335
+ this . _dataConverter = this . createDataConverter ( this . _databaseId ) ;
344
336
}
345
337
346
338
settings ( settingsLiteral : firestore . Settings ) : void {
@@ -358,7 +350,7 @@ export class Firestore implements firestore.FirebaseFirestore, FirebaseService {
358
350
}
359
351
360
352
const newSettings = new FirestoreSettings ( settingsLiteral ) ;
361
- if ( this . _firestoreClient && ! this . _config . settings . isEqual ( newSettings ) ) {
353
+ if ( this . _firestoreClient && ! this . _settings . isEqual ( newSettings ) ) {
362
354
throw new FirestoreError (
363
355
Code . FAILED_PRECONDITION ,
364
356
'Firestore has already been started and its settings can no longer ' +
@@ -367,11 +359,9 @@ export class Firestore implements firestore.FirebaseFirestore, FirebaseService {
367
359
) ;
368
360
}
369
361
370
- this . _config . settings = newSettings ;
362
+ this . _settings = newSettings ;
371
363
if ( newSettings . credentials !== undefined ) {
372
- this . _config . credentials = makeCredentialsProvider (
373
- newSettings . credentials
374
- ) ;
364
+ this . _credentials = makeCredentialsProvider ( newSettings . credentials ) ;
375
365
}
376
366
}
377
367
@@ -416,7 +406,7 @@ export class Firestore implements firestore.FirebaseFirestore, FirebaseService {
416
406
417
407
return this . configureClient (
418
408
new IndexedDbPersistenceSettings (
419
- this . _config . settings . cacheSizeBytes ,
409
+ this . _settings . cacheSizeBytes ,
420
410
synchronizeTabs
421
411
)
422
412
) ;
@@ -489,30 +479,38 @@ export class Firestore implements firestore.FirebaseFirestore, FirebaseService {
489
479
490
480
private makeDatabaseInfo ( ) : DatabaseInfo {
491
481
return new DatabaseInfo (
492
- this . _config . databaseId ,
493
- this . _config . persistenceKey ,
494
- this . _config . settings . host ,
495
- this . _config . settings . ssl ,
496
- this . _config . settings . forceLongPolling
482
+ this . _databaseId ,
483
+ this . _persistenceKey ,
484
+ this . _settings . host ,
485
+ this . _settings . ssl ,
486
+ this . _settings . forceLongPolling
497
487
) ;
498
488
}
499
489
500
490
private configureClient (
501
491
persistenceSettings : InternalPersistenceSettings
502
492
) : Promise < void > {
503
- assert (
504
- ! ! this . _config . settings . host ,
505
- 'FirestoreSettings.host cannot be falsey'
506
- ) ;
493
+ assert ( ! ! this . _settings . host , 'FirestoreSettings.host is not set' ) ;
507
494
508
495
assert ( ! this . _firestoreClient , 'configureClient() called multiple times' ) ;
509
496
510
497
const databaseInfo = this . makeDatabaseInfo ( ) ;
511
498
499
+ this . _firestoreClient = new FirestoreClient (
500
+ PlatformSupport . getPlatform ( ) ,
501
+ databaseInfo ,
502
+ this . _credentials ,
503
+ this . _queue
504
+ ) ;
505
+
506
+ return this . _firestoreClient . start ( persistenceSettings ) ;
507
+ }
508
+
509
+ private createDataConverter ( databaseId : DatabaseId ) : UserDataConverter {
512
510
const preConverter = ( value : unknown ) : unknown => {
513
511
if ( value instanceof DocumentReference ) {
514
- const thisDb = this . _config . databaseId ;
515
- const otherDb = value . firestore . _config . databaseId ;
512
+ const thisDb = databaseId ;
513
+ const otherDb = value . firestore . _databaseId ;
516
514
if ( ! otherDb . isEqual ( thisDb ) ) {
517
515
throw new FirestoreError (
518
516
Code . INVALID_ARGUMENT ,
@@ -521,21 +519,12 @@ export class Firestore implements firestore.FirebaseFirestore, FirebaseService {
521
519
`for database ${ thisDb . projectId } /${ thisDb . database } `
522
520
) ;
523
521
}
524
- return new DocumentKeyReference ( this . _config . databaseId , value . _key ) ;
522
+ return new DocumentKeyReference ( databaseId , value . _key ) ;
525
523
} else {
526
524
return value ;
527
525
}
528
526
} ;
529
- this . _dataConverter = new UserDataConverter ( preConverter ) ;
530
-
531
- this . _firestoreClient = new FirestoreClient (
532
- PlatformSupport . getPlatform ( ) ,
533
- databaseInfo ,
534
- this . _config . credentials ,
535
- this . _queue
536
- ) ;
537
-
538
- return this . _firestoreClient . start ( persistenceSettings ) ;
527
+ return new UserDataConverter ( preConverter ) ;
539
528
}
540
529
541
530
private static databaseIdFromApp ( app : FirebaseApp ) : DatabaseId {
@@ -558,14 +547,14 @@ export class Firestore implements firestore.FirebaseFirestore, FirebaseService {
558
547
}
559
548
560
549
get app ( ) : FirebaseApp {
561
- if ( ! this . _config . firebaseApp ) {
550
+ if ( ! this . _firebaseApp ) {
562
551
throw new FirestoreError (
563
552
Code . FAILED_PRECONDITION ,
564
553
"Firestore was not initialized using the Firebase SDK. 'app' is " +
565
554
'not available'
566
555
) ;
567
556
}
568
- return this . _config . firebaseApp ;
557
+ return this . _firebaseApp ;
569
558
}
570
559
571
560
INTERNAL = {
@@ -668,7 +657,7 @@ export class Firestore implements firestore.FirebaseFirestore, FirebaseService {
668
657
// Note: this is not a property because the minifier can't work correctly with
669
658
// the way TypeScript compiler outputs properties.
670
659
_areTimestampsInSnapshotsEnabled ( ) : boolean {
671
- return this . _config . settings . timestampsInSnapshots ;
660
+ return this . _settings . timestampsInSnapshots ;
672
661
}
673
662
}
674
663
0 commit comments