@@ -171,6 +171,10 @@ export class FirebaseOptions implements IFirebaseOptions {
171171 }
172172}
173173
174+ let firebaseInstance : Firebase ;
175+ let defaultApp : FirebaseApp ;
176+ const firebaseApps = new Map < string , FirebaseApp > ( ) ;
177+
174178export class FirebaseApp {
175179 #native: FIRApp ;
176180 #options: FirebaseOptions ;
@@ -205,6 +209,7 @@ export class FirebaseApp {
205209 return new Promise < void > ( ( resolve , reject ) => {
206210 this . native . deleteApp ( ( done ) => {
207211 if ( done ) {
212+ firebaseApps . delete ( this . native . name ) ;
208213 resolve ( ) ;
209214 } else {
210215 reject ( ) ;
@@ -228,9 +233,6 @@ export class FirebaseApp {
228233 }
229234}
230235
231- let firebaseInstance : Firebase ;
232- let defaultApp : FirebaseApp ;
233-
234236export class Firebase {
235237 constructor ( ) {
236238 if ( firebaseInstance ) {
@@ -241,6 +243,9 @@ export class Firebase {
241243 }
242244 app ( name ?: string ) {
243245 if ( name ) {
246+ if ( firebaseApps . has ( name ) ) {
247+ return firebaseApps . get ( name ) ;
248+ }
244249 return FirebaseApp . fromNative ( FIRApp . appNamed ( name ) ) ;
245250 }
246251 if ( ! defaultApp ) {
@@ -256,7 +261,7 @@ export class Firebase {
256261 nativeOptions = FIROptions . alloc ( ) . initWithGoogleAppIDGCMSenderID ( options . googleAppId , options . gcmSenderId ) ;
257262 }
258263
259- if ( ! nativeOptions && options ) {
264+ if ( ! nativeOptions && options ) {
260265 nativeOptions = FIROptions . defaultOptions ( ) ;
261266 }
262267
@@ -314,13 +319,18 @@ export class Firebase {
314319 FIRApp . configureWithNameOptions ( name , nativeOptions ) ;
315320 app = FIRApp . appNamed ( name ) ;
316321 } else {
322+ if ( defaultApp ) {
323+ return defaultApp ;
324+ }
325+
317326 if ( nativeOptions ) {
318327 FIRApp . configureWithOptions ( nativeOptions ) ;
319328 } else {
320329 FIRApp . configure ( ) ;
321330 }
322331
323332 app = FIRApp . defaultApp ( ) ;
333+ isDefault = true ;
324334 }
325335
326336 if ( app && typeof configOrName === 'object' && typeof configOrName . automaticDataCollectionEnabled === 'boolean' ) {
@@ -333,6 +343,10 @@ export class Firebase {
333343 defaultApp = fbApp ;
334344 }
335345
346+ if ( ! isDefault ) {
347+ firebaseApps . set ( name , fbApp ) ;
348+ }
349+
336350 return fbApp ;
337351 }
338352}
@@ -343,4 +357,4 @@ export function firebase() {
343357 }
344358 firebaseInstance = new Firebase ( ) ;
345359 return firebaseInstance ;
346- }
360+ }
0 commit comments