@@ -31,7 +31,7 @@ import {
3131 OfflineComponentProvider ,
3232 OnlineComponentProvider
3333} from '../core/component_provider' ;
34- import { DatabaseId } from '../core/database_info' ;
34+ import { DatabaseId , DEFAULT_DATABASE_NAME } from '../core/database_info' ;
3535import {
3636 FirestoreClient ,
3737 firestoreClientDisableNetwork ,
@@ -103,17 +103,18 @@ export class Firestore extends LiteFirestore {
103103
104104 /** @hideconstructor */
105105 constructor (
106- databaseIdOrApp : DatabaseId | FirebaseApp ,
107106 authCredentialsProvider : CredentialsProvider < User > ,
108- appCheckCredentialsProvider : CredentialsProvider < string >
107+ appCheckCredentialsProvider : CredentialsProvider < string > ,
108+ databaseId : DatabaseId ,
109+ app ?: FirebaseApp
109110 ) {
110111 super (
111- databaseIdOrApp ,
112112 authCredentialsProvider ,
113- appCheckCredentialsProvider
113+ appCheckCredentialsProvider ,
114+ databaseId ,
115+ app
114116 ) ;
115- this . _persistenceKey =
116- 'name' in databaseIdOrApp ? databaseIdOrApp . name : '[DEFAULT]' ;
117+ this . _persistenceKey = app ?. name || '[DEFAULT]' ;
117118 }
118119
119120 _terminate ( ) : Promise < void > {
@@ -135,17 +136,26 @@ export class Firestore extends LiteFirestore {
135136 * @param app - The {@link @firebase/app#FirebaseApp } with which the {@link Firestore} instance will
136137 * be associated.
137138 * @param settings - A settings object to configure the {@link Firestore} instance.
139+ * @param databaseId - The name of database.
138140 * @returns A newly initialized {@link Firestore} instance.
139141 */
140142export function initializeFirestore (
141143 app : FirebaseApp ,
142- settings : FirestoreSettings
144+ settings : FirestoreSettings ,
145+ databaseId ?: string
143146) : Firestore {
147+ if ( ! databaseId ) {
148+ databaseId = DEFAULT_DATABASE_NAME ;
149+ }
144150 const provider = _getProvider ( app , 'firestore' ) ;
145151
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 ;
149159 if ( deepEqual ( initialSettings , settings ) ) {
150160 return existingInstance ;
151161 } else {
@@ -170,20 +180,63 @@ export function initializeFirestore(
170180 ) ;
171181 }
172182
173- return provider . initialize ( { options : settings } ) ;
183+ return provider . initialize ( {
184+ options : settings ,
185+ instanceIdentifier : databaseId
186+ } ) ;
174187}
175188
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+ */
215+ export function getFirestore ( databaseId : string ) : Firestore ;
176216/**
177217 * Returns the existing {@link Firestore} instance that is associated with the
178218 * provided {@link @firebase/app#FirebaseApp }. If no instance exists, initializes a new
179219 * instance with default settings.
180220 *
181221 * @param app - The {@link @firebase/app#FirebaseApp } instance that the returned {@link Firestore}
182222 * instance is associated with.
223+ * @param databaseId - The name of database.
183224 * @returns The {@link Firestore} instance of the provided app.
184225 */
185- export function getFirestore ( app : FirebaseApp = getApp ( ) ) : Firestore {
186- return _getProvider ( app , 'firestore' ) . getImmediate ( ) as Firestore ;
226+ export function getFirestore ( app : FirebaseApp , databaseId : string ) : Firestore ;
227+ export function getFirestore (
228+ appOrDatabaseId ?: FirebaseApp | string ,
229+ optionalDatabaseId ?: string
230+ ) : Firestore {
231+ const app : FirebaseApp =
232+ typeof appOrDatabaseId === 'object' ? appOrDatabaseId : getApp ( ) ;
233+ const databaseId =
234+ typeof appOrDatabaseId === 'string'
235+ ? appOrDatabaseId
236+ : optionalDatabaseId || DEFAULT_DATABASE_NAME ;
237+ return _getProvider ( app , 'firestore' ) . getImmediate ( {
238+ identifier : databaseId
239+ } ) as Firestore ;
187240}
188241
189242/**
@@ -498,7 +551,11 @@ export function disableNetwork(firestore: Firestore): Promise<void> {
498551 * terminated.
499552 */
500553export function terminate ( firestore : Firestore ) : Promise < void > {
501- _removeServiceInstance ( firestore . app , 'firestore' ) ;
554+ _removeServiceInstance (
555+ firestore . app ,
556+ 'firestore' ,
557+ firestore . _databaseId . database
558+ ) ;
502559 return firestore . _delete ( ) ;
503560}
504561
0 commit comments