@@ -37,22 +37,20 @@ import {
37
37
} from '../../../src/core/component_provider' ;
38
38
import {
39
39
FirebaseFirestore as LiteFirestore ,
40
+ FirestoreDatabase ,
41
+ makeDatabaseInfo ,
40
42
Settings as LiteSettings
41
43
} from '../../../lite/src/api/database' ;
42
44
import { Code , FirestoreError } from '../../../src/util/error' ;
43
45
import { Deferred } from '../../../src/util/promise' ;
44
46
import { LRU_MINIMUM_CACHE_SIZE_BYTES } from '../../../src/local/lru_garbage_collector' ;
45
- import {
46
- CACHE_SIZE_UNLIMITED ,
47
- configureFirestore ,
48
- ensureFirestoreConfigured ,
49
- FirestoreCompat
50
- } from '../../../src/api/database' ;
47
+ import { CACHE_SIZE_UNLIMITED } from '../../../src/api/database' ;
51
48
import {
52
49
indexedDbClearPersistence ,
53
50
indexedDbStoragePrefix
54
51
} from '../../../src/local/indexeddb_persistence' ;
55
52
import { PersistenceSettings } from '../../../exp-types' ;
53
+ import { debugAssert } from '../../../src/util/assert' ;
56
54
57
55
/** DOMException error code constants. */
58
56
const DOM_EXCEPTION_INVALID_STATE = 11 ;
@@ -70,18 +68,18 @@ export interface Settings extends LiteSettings {
70
68
*/
71
69
export class FirebaseFirestore
72
70
extends LiteFirestore
73
- implements _FirebaseService , FirestoreCompat {
71
+ implements _FirebaseService {
74
72
readonly _queue = new AsyncQueue ( ) ;
75
73
readonly _persistenceKey : string ;
76
74
77
75
_firestoreClient : FirestoreClient | undefined ;
78
76
79
77
constructor (
80
- app : FirebaseApp ,
78
+ app : FirestoreDatabase | FirebaseApp ,
81
79
authProvider : Provider < FirebaseAuthInternalName >
82
80
) {
83
81
super ( app , authProvider ) ;
84
- this . _persistenceKey = app . name ;
82
+ this . _persistenceKey = 'name' in app ? app . name : '[DEFAULT]' ;
85
83
}
86
84
87
85
_terminate ( ) : Promise < void > {
@@ -94,6 +92,36 @@ export class FirebaseFirestore
94
92
}
95
93
}
96
94
95
+ export function ensureFirestoreConfigured (
96
+ firestore : FirebaseFirestore
97
+ ) : FirestoreClient {
98
+ if ( ! firestore . _firestoreClient ) {
99
+ configureFirestore ( firestore ) ;
100
+ }
101
+ firestore . _firestoreClient ! . verifyNotTerminated ( ) ;
102
+ return firestore . _firestoreClient as FirestoreClient ;
103
+ }
104
+
105
+ export function configureFirestore ( firestore : FirebaseFirestore ) : void {
106
+ const settings = firestore . _freezeSettings ( ) ;
107
+ debugAssert ( ! ! settings . host , 'FirestoreSettings.host is not set' ) ;
108
+ debugAssert (
109
+ ! firestore . _firestoreClient ,
110
+ 'configureFirestore() called multiple times'
111
+ ) ;
112
+
113
+ const databaseInfo = makeDatabaseInfo (
114
+ firestore . _databaseId ,
115
+ firestore . _persistenceKey ,
116
+ settings
117
+ ) ;
118
+ firestore . _firestoreClient = new FirestoreClient (
119
+ firestore . _credentials ,
120
+ firestore . _queue ,
121
+ databaseInfo
122
+ ) ;
123
+ }
124
+
97
125
/**
98
126
* Initializes a new instance of Cloud Firestore with the provided settings.
99
127
* Can only be called before any other function, including
@@ -165,13 +193,13 @@ export function getFirestore(app: FirebaseApp): FirebaseFirestore {
165
193
* @return A promise that represents successfully enabling persistent storage.
166
194
*/
167
195
export function enableIndexedDbPersistence (
168
- firestore : FirestoreCompat ,
196
+ firestore : FirebaseFirestore ,
169
197
persistenceSettings ?: PersistenceSettings
170
198
) : Promise < void > {
171
199
verifyNotInitialized ( firestore ) ;
172
200
173
201
const client = ensureFirestoreConfigured ( firestore ) ;
174
- const settings = firestore . _getSettings ( ) ;
202
+ const settings = firestore . _freezeSettings ( ) ;
175
203
176
204
const onlineComponentProvider = new OnlineComponentProvider ( ) ;
177
205
const offlineComponentProvider = new IndexedDbOfflineComponentProvider (
@@ -209,12 +237,12 @@ export function enableIndexedDbPersistence(
209
237
* storage.
210
238
*/
211
239
export function enableMultiTabIndexedDbPersistence (
212
- firestore : FirestoreCompat
240
+ firestore : FirebaseFirestore
213
241
) : Promise < void > {
214
242
verifyNotInitialized ( firestore ) ;
215
243
216
244
const client = ensureFirestoreConfigured ( firestore ) ;
217
- const settings = firestore . _getSettings ( ) ;
245
+ const settings = firestore . _freezeSettings ( ) ;
218
246
219
247
const onlineComponentProvider = new OnlineComponentProvider ( ) ;
220
248
const offlineComponentProvider = new MultiTabOfflineComponentProvider (
@@ -322,7 +350,7 @@ function canFallbackFromIndexedDbError(
322
350
* cleared. Otherwise, the promise is rejected with an error.
323
351
*/
324
352
export function clearIndexedDbPersistence (
325
- firestore : FirestoreCompat
353
+ firestore : FirebaseFirestore
326
354
) : Promise < void > {
327
355
if ( firestore . _initialized && ! firestore . _terminated ) {
328
356
throw new FirestoreError (
@@ -420,7 +448,7 @@ export function terminate(firestore: FirebaseFirestore): Promise<void> {
420
448
return firestore . _delete ( ) ;
421
449
}
422
450
423
- function verifyNotInitialized ( firestore : FirestoreCompat ) : void {
451
+ function verifyNotInitialized ( firestore : FirebaseFirestore ) : void {
424
452
if ( firestore . _initialized || firestore . _terminated ) {
425
453
throw new FirestoreError (
426
454
Code . FAILED_PRECONDITION ,
0 commit comments