1
1
import { InjectionToken , NgZone , NgModule } from '@angular/core' ;
2
2
3
- import { FirebaseAppConfig , FirebaseAppName } from './angularfire2' ;
3
+ import { FirebaseOptionsToken , FirebaseAppNameToken , FirebaseAppConfigToken } from './angularfire2' ;
4
4
5
5
import 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' ;
7
7
import { FirebaseAuth } from '@firebase/auth-types' ;
8
8
import { FirebaseDatabase } from '@firebase/database-types' ;
9
9
import { FirebaseMessaging } from '@firebase/messaging-types' ;
@@ -22,29 +22,36 @@ export class FirebaseApp implements _FirebaseApp {
22
22
firestore : ( ) => FirebaseFirestore ;
23
23
}
24
24
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 ;
29
33
}
30
34
31
35
const FirebaseAppProvider = {
32
36
provide : FirebaseApp ,
33
37
useFactory : _firebaseAppFactory ,
34
- deps : [ FirebaseAppConfig , FirebaseAppName ]
38
+ deps : [ FirebaseOptionsToken , FirebaseAppNameToken , FirebaseAppConfigToken ]
35
39
} ;
36
40
37
41
@NgModule ( {
38
42
providers : [ FirebaseAppProvider ] ,
39
43
} )
40
44
export 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
42
48
return {
43
49
ngModule : AngularFireModule ,
44
50
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 }
47
54
]
48
55
}
49
56
}
50
- }
57
+ }
0 commit comments