11import { InjectionToken , NgZone , NgModule } from '@angular/core' ;
22
3- import { FirebaseAppConfig , FirebaseAppName } from './angularfire2' ;
3+ import { FirebaseOptionsToken , FirebaseAppNameToken , FirebaseAppConfigToken } from './angularfire2' ;
44
55import firebase from '@firebase/app' ;
6- import { FirebaseApp as _FirebaseApp , FirebaseOptions } from '@firebase/app-types' ;
6+ import { FirebaseApp as _FirebaseApp , FirebaseOptions , FirebaseAppConfig } from '@firebase/app-types' ;
77import { FirebaseAuth } from '@firebase/auth-types' ;
88import { FirebaseDatabase } from '@firebase/database-types' ;
99import { FirebaseMessaging } from '@firebase/messaging-types' ;
@@ -22,29 +22,36 @@ export class FirebaseApp implements _FirebaseApp {
2222 firestore : ( ) => FirebaseFirestore ;
2323}
2424
25- export function _firebaseAppFactory ( config : FirebaseOptions , name ?: string ) : FirebaseApp {
26- const appName = name || '[DEFAULT]' ;
27- const existingApp = firebase . apps . filter ( app => app . name == appName ) [ 0 ] as FirebaseApp ;
28- return existingApp || firebase . initializeApp ( config , appName ) as FirebaseApp ;
25+ export function _firebaseAppFactory ( options : FirebaseOptions , name ?: string , appConfig ?: FirebaseAppConfig ) : FirebaseApp {
26+ const config = appConfig || { } ;
27+ if ( name && config . name && config . name !== name ) {
28+ console . warn ( 'FirebaseAppNameToken and FirebaseAppConfigToken.name don\'t match, FirebaseAppNameToken takes precedence.' ) ;
29+ }
30+ config . name = name || config . name || '[DEFAULT]' ;
31+ const existingApp = firebase . apps . filter ( app => app . name === config . name ) [ 0 ] ;
32+ return ( existingApp || firebase . initializeApp ( options , config ) ) as FirebaseApp ;
2933}
3034
3135const FirebaseAppProvider = {
3236 provide : FirebaseApp ,
3337 useFactory : _firebaseAppFactory ,
34- deps : [ FirebaseAppConfig , FirebaseAppName ]
38+ deps : [ FirebaseOptionsToken , FirebaseAppNameToken , FirebaseAppConfigToken ]
3539} ;
3640
3741@NgModule ( {
3842 providers : [ FirebaseAppProvider ] ,
3943} )
4044export class AngularFireModule {
41- static initializeApp ( config : FirebaseOptions , appName ?: string ) {
45+ static initializeApp ( options : FirebaseOptions , appNameOrConfig ?: string | FirebaseAppConfig ) {
46+ const name = typeof appNameOrConfig === 'string' && appNameOrConfig || undefined
47+ const config = typeof appNameOrConfig === 'object' && appNameOrConfig || undefined
4248 return {
4349 ngModule : AngularFireModule ,
4450 providers : [
45- { provide : FirebaseAppConfig , useValue : config } ,
46- { provide : FirebaseAppName , useValue : appName }
51+ { provide : FirebaseOptionsToken , useValue : options } ,
52+ { provide : FirebaseAppNameToken , useValue : name } ,
53+ { provide : FirebaseAppConfigToken , useValue : config }
4754 ]
4855 }
4956 }
50- }
57+ }
0 commit comments