@@ -31,7 +31,7 @@ import {
31
31
OfflineComponentProvider ,
32
32
OnlineComponentProvider
33
33
} from '../core/component_provider' ;
34
- import { DatabaseId } from '../core/database_info' ;
34
+ import { DatabaseId , DEFAULT_DATABASE_NAME } from '../core/database_info' ;
35
35
import {
36
36
FirestoreClient ,
37
37
firestoreClientDisableNetwork ,
@@ -103,17 +103,18 @@ export class Firestore extends LiteFirestore {
103
103
104
104
/** @hideconstructor */
105
105
constructor (
106
- databaseIdOrApp : DatabaseId | FirebaseApp ,
107
106
authCredentialsProvider : CredentialsProvider < User > ,
108
- appCheckCredentialsProvider : CredentialsProvider < string >
107
+ appCheckCredentialsProvider : CredentialsProvider < string > ,
108
+ databaseId : DatabaseId ,
109
+ app ?: FirebaseApp
109
110
) {
110
111
super (
111
- databaseIdOrApp ,
112
112
authCredentialsProvider ,
113
- appCheckCredentialsProvider
113
+ appCheckCredentialsProvider ,
114
+ databaseId ,
115
+ app
114
116
) ;
115
- this . _persistenceKey =
116
- 'name' in databaseIdOrApp ? databaseIdOrApp . name : '[DEFAULT]' ;
117
+ this . _persistenceKey = app ?. name || '[DEFAULT]' ;
117
118
}
118
119
119
120
_terminate ( ) : Promise < void > {
@@ -135,17 +136,26 @@ export class Firestore extends LiteFirestore {
135
136
* @param app - The {@link @firebase/app#FirebaseApp } with which the {@link Firestore} instance will
136
137
* be associated.
137
138
* @param settings - A settings object to configure the {@link Firestore} instance.
139
+ * @param databaseId - The name of database.
138
140
* @returns A newly initialized {@link Firestore} instance.
139
141
*/
140
142
export function initializeFirestore (
141
143
app : FirebaseApp ,
142
- settings : FirestoreSettings
144
+ settings : FirestoreSettings ,
145
+ databaseId ?: string
143
146
) : Firestore {
147
+ if ( ! databaseId ) {
148
+ databaseId = DEFAULT_DATABASE_NAME ;
149
+ }
144
150
const provider = _getProvider ( app , 'firestore' ) ;
145
151
146
- if ( provider . isInitialized ( ) ) {
147
- const existingInstance = provider . getImmediate ( ) ;
148
- const initialSettings = provider . getOptions ( ) as FirestoreSettings ;
152
+ if ( provider . isInitialized ( databaseId ) ) {
153
+ const existingInstance = provider . getImmediate ( {
154
+ identifier : databaseId
155
+ } ) ;
156
+ const initialSettings = provider . getOptions (
157
+ databaseId
158
+ ) as FirestoreSettings ;
149
159
if ( deepEqual ( initialSettings , settings ) ) {
150
160
return existingInstance ;
151
161
} else {
@@ -170,20 +180,65 @@ export function initializeFirestore(
170
180
) ;
171
181
}
172
182
173
- return provider . initialize ( { options : settings } ) ;
183
+ return provider . initialize ( {
184
+ options : settings ,
185
+ instanceIdentifier : databaseId
186
+ } ) ;
174
187
}
175
188
189
+ /**
190
+ * Returns the existing default {@link Firestore} instance that is associated with the
191
+ * default {@link @firebase/app#FirebaseApp }. If no instance exists, initializes a new
192
+ * instance with default settings.
193
+ *
194
+ * @returns The {@link Firestore} instance of the provided app.
195
+ */
196
+ export function getFirestore ( ) : Firestore ;
197
+ /**
198
+ * Returns the existing default {@link Firestore} instance that is associated with the
199
+ * provided {@link @firebase/app#FirebaseApp }. If no instance exists, initializes a new
200
+ * instance with default settings.
201
+ *
202
+ * @param app - The {@link @firebase/app#FirebaseApp } instance that the returned {@link Firestore}
203
+ * instance is associated with.
204
+ * @returns The {@link Firestore} instance of the provided app.
205
+ */
206
+ export function getFirestore ( app : FirebaseApp ) : Firestore ;
207
+ /**
208
+ * Returns the existing {@link Firestore} instance that is associated with the
209
+ * default {@link @firebase/app#FirebaseApp }. If no instance exists, initializes a new
210
+ * instance with default settings.
211
+ *
212
+ * @param databaseId - The name of database.
213
+ * @returns The {@link Firestore} instance of the provided app.
214
+ * @internal
215
+ */
216
+ export function getFirestore ( databaseId : string ) : Firestore ;
176
217
/**
177
218
* Returns the existing {@link Firestore} instance that is associated with the
178
219
* provided {@link @firebase/app#FirebaseApp }. If no instance exists, initializes a new
179
220
* instance with default settings.
180
221
*
181
222
* @param app - The {@link @firebase/app#FirebaseApp } instance that the returned {@link Firestore}
182
223
* instance is associated with.
224
+ * @param databaseId - The name of database.
183
225
* @returns The {@link Firestore} instance of the provided app.
226
+ * @internal
184
227
*/
185
- export function getFirestore ( app : FirebaseApp = getApp ( ) ) : Firestore {
186
- return _getProvider ( app , 'firestore' ) . getImmediate ( ) as Firestore ;
228
+ export function getFirestore ( app : FirebaseApp , databaseId : string ) : Firestore ;
229
+ export function getFirestore (
230
+ appOrDatabaseId ?: FirebaseApp | string ,
231
+ optionalDatabaseId ?: string
232
+ ) : Firestore {
233
+ const app : FirebaseApp =
234
+ typeof appOrDatabaseId === 'object' ? appOrDatabaseId : getApp ( ) ;
235
+ const databaseId =
236
+ typeof appOrDatabaseId === 'string'
237
+ ? appOrDatabaseId
238
+ : optionalDatabaseId || DEFAULT_DATABASE_NAME ;
239
+ return _getProvider ( app , 'firestore' ) . getImmediate ( {
240
+ identifier : databaseId
241
+ } ) as Firestore ;
187
242
}
188
243
189
244
/**
@@ -498,7 +553,11 @@ export function disableNetwork(firestore: Firestore): Promise<void> {
498
553
* terminated.
499
554
*/
500
555
export function terminate ( firestore : Firestore ) : Promise < void > {
501
- _removeServiceInstance ( firestore . app , 'firestore' ) ;
556
+ _removeServiceInstance (
557
+ firestore . app ,
558
+ 'firestore' ,
559
+ firestore . _databaseId . database
560
+ ) ;
502
561
return firestore . _delete ( ) ;
503
562
}
504
563
0 commit comments