Skip to content

Commit 513565a

Browse files
jamesdanielsdavideast
authored andcommitted
fix(): allow initializeApp to be used with AOT (#1654)
1 parent a8414f5 commit 513565a

File tree

14 files changed

+44
-61
lines changed

14 files changed

+44
-61
lines changed

src/auth/auth.spec.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import { User } from '@firebase/auth-types';
22
import { ReflectiveInjector, Provider } from '@angular/core';
33
import { Observable, Subject } from 'rxjs'
44
import { TestBed, inject } from '@angular/core/testing';
5-
import { FirebaseApp, FirebaseOptionsToken, AngularFireModule, FirebaseAppNameToken } from 'angularfire2';
5+
import { FirebaseApp, FirebaseOptionsToken, AngularFireModule, FirebaseNameOrConfigToken } from 'angularfire2';
66
import { AngularFireAuth, AngularFireAuthModule } from 'angularfire2/auth';
77
import { COMMON_CONFIG } from './test-config';
88
import { take, skip } from 'rxjs/operators';
@@ -136,7 +136,7 @@ describe('AngularFireAuth with different app', () => {
136136
AngularFireAuthModule
137137
],
138138
providers: [
139-
{ provide: FirebaseAppNameToken, useValue: FIREBASE_APP_NAME_TOO },
139+
{ provide: FirebaseNameOrConfigToken, useValue: FIREBASE_APP_NAME_TOO },
140140
{ provide: FirebaseOptionsToken, useValue: COMMON_CONFIG }
141141
]
142142
});

src/auth/auth.ts

+3-4
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import { Injectable, Inject, Optional, NgZone, PLATFORM_ID } from '@angular/core
44
import { Observable, of, from } from 'rxjs';
55
import { switchMap } from 'rxjs/operators';
66

7-
import { FirebaseOptionsToken, FirebaseAppConfigToken, FirebaseAppNameToken, _firebaseAppFactory, FirebaseZoneScheduler } from 'angularfire2';
7+
import { FirebaseOptionsToken, FirebaseNameOrConfigToken, _firebaseAppFactory, FirebaseZoneScheduler } from 'angularfire2';
88

99

1010
@Injectable()
@@ -39,14 +39,13 @@ export class AngularFireAuth {
3939

4040
constructor(
4141
@Inject(FirebaseOptionsToken) options:FirebaseOptions,
42-
@Optional() @Inject(FirebaseAppConfigToken) config:FirebaseAppConfig,
43-
@Optional() @Inject(FirebaseAppNameToken) name:string,
42+
@Optional() @Inject(FirebaseNameOrConfigToken) nameOrConfig:string|FirebaseAppConfig|undefined,
4443
@Inject(PLATFORM_ID) platformId: Object,
4544
private zone: NgZone
4645
) {
4746
const scheduler = new FirebaseZoneScheduler(zone, platformId);
4847
this.auth = zone.runOutsideAngular(() => {
49-
const app = _firebaseAppFactory(options, name, config);
48+
const app = _firebaseAppFactory(options, nameOrConfig);
5049
return app.auth();
5150
});
5251

src/core/angularfire2.ts

+1-2
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,8 @@ import { first } from 'rxjs/operators';
66
import firebase from '@firebase/app';
77
import { FirebaseApp, FirebaseOptions, FirebaseAppConfig } from '@firebase/app-types';
88

9-
export const FirebaseAppNameToken = new InjectionToken<string|undefined>('angularfire2.app.name');
109
export const FirebaseOptionsToken = new InjectionToken<FirebaseOptions>('angularfire2.app.options');
11-
export const FirebaseAppConfigToken = new InjectionToken<FirebaseAppConfig|undefined>('angularfire2.app.config');
10+
export const FirebaseNameOrConfigToken = new InjectionToken<string|FirebaseAppConfig|undefined>('angularfire2.app.nameOrConfig')
1211

1312
// Put in database.ts when we drop database-depreciated
1413
export const RealtimeDatabaseURL = new InjectionToken<string>('angularfire2.realtimeDatabaseURL');

src/core/firebase.app.module.ts

+9-15
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { InjectionToken, NgZone, NgModule, Optional } from '@angular/core';
22

3-
import { FirebaseOptionsToken, FirebaseAppNameToken, FirebaseAppConfigToken } from './angularfire2';
3+
import { FirebaseOptionsToken, FirebaseNameOrConfigToken } from './angularfire2';
44

55
import firebase from '@firebase/app';
66
import { FirebaseApp as _FirebaseApp, FirebaseOptions, FirebaseAppConfig } from '@firebase/app-types';
@@ -22,12 +22,10 @@ export class FirebaseApp implements _FirebaseApp {
2222
firestore: () => FirebaseFirestore;
2323
}
2424

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]';
25+
export function _firebaseAppFactory(options: FirebaseOptions, nameOrConfig?: string | FirebaseAppConfig) {
26+
const name = typeof nameOrConfig === 'string' && nameOrConfig || '[DEFAULT]';
27+
const config = typeof nameOrConfig === 'object' && nameOrConfig || {};
28+
config.name = config.name || name;
3129
const existingApp = firebase.apps.filter(app => app.name === config.name)[0];
3230
return (existingApp || firebase.initializeApp(options, config)) as FirebaseApp;
3331
}
@@ -37,24 +35,20 @@ const FirebaseAppProvider = {
3735
useFactory: _firebaseAppFactory,
3836
deps: [
3937
FirebaseOptionsToken,
40-
[new Optional(), FirebaseAppNameToken],
41-
[new Optional(), FirebaseAppConfigToken]
38+
[new Optional(), FirebaseNameOrConfigToken]
4239
]
4340
};
4441

4542
@NgModule({
4643
providers: [ FirebaseAppProvider ],
4744
})
4845
export class AngularFireModule {
49-
static initializeApp(options: FirebaseOptions, appNameOrConfig?: string | FirebaseAppConfig) {
50-
const name = typeof appNameOrConfig === 'string' && appNameOrConfig || undefined
51-
const config = typeof appNameOrConfig === 'object' && appNameOrConfig || undefined
46+
static initializeApp(options: FirebaseOptions, nameOrConfig?: string | FirebaseAppConfig) {
5247
return {
5348
ngModule: AngularFireModule,
5449
providers: [
55-
{ provide: FirebaseOptionsToken, useValue: options },
56-
{ provide: FirebaseAppNameToken, useValue: name },
57-
{ provide: FirebaseAppConfigToken, useValue: config }
50+
{ provide: FirebaseOptionsToken, useValue: options },
51+
{ provide: FirebaseNameOrConfigToken, useValue: nameOrConfig }
5852
]
5953
}
6054
}

src/database-deprecated/database.ts

+3-4
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import { FirebaseObjectFactory } from './firebase_object_factory';
77
import { FirebaseObjectObservable } from './firebase_object_observable';
88
import * as utils from './utils';
99
import { FirebaseOptions, FirebaseAppConfig } from '@firebase/app-types';
10-
import { FirebaseAppConfigToken, FirebaseOptionsToken, FirebaseAppNameToken, RealtimeDatabaseURL, _firebaseAppFactory } from 'angularfire2';
10+
import { FirebaseOptionsToken, FirebaseNameOrConfigToken, RealtimeDatabaseURL, _firebaseAppFactory } from 'angularfire2';
1111

1212
@Injectable()
1313
export class AngularFireDatabase {
@@ -19,13 +19,12 @@ export class AngularFireDatabase {
1919

2020
constructor(
2121
@Inject(FirebaseOptionsToken) options:FirebaseOptions,
22-
@Inject(FirebaseAppConfigToken) config:FirebaseAppConfig,
23-
@Optional() @Inject(FirebaseAppNameToken) name:string,
22+
@Inject(FirebaseNameOrConfigToken) nameOrConfig:string|FirebaseAppConfig|undefined,
2423
@Optional() @Inject(RealtimeDatabaseURL) databaseURL:string,
2524
zone: NgZone
2625
) {
2726
this.database = zone.runOutsideAngular(() => {
28-
const app = _firebaseAppFactory(options, name, config);
27+
const app = _firebaseAppFactory(options, nameOrConfig);
2928
return app.database(databaseURL || undefined);
3029
});
3130
}

src/database/database.spec.ts

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { FirebaseApp, AngularFireModule, FirebaseOptionsToken, FirebaseAppNameToken } from 'angularfire2';
1+
import { FirebaseApp, AngularFireModule, FirebaseOptionsToken, FirebaseNameOrConfigToken } from 'angularfire2';
22
import { AngularFireDatabase, AngularFireDatabaseModule, RealtimeDatabaseURL } from 'angularfire2/database';
33
import { TestBed, inject } from '@angular/core/testing';
44
import { COMMON_CONFIG } from './test-config';
@@ -42,7 +42,7 @@ describe('AngularFireDatabase', () => {
4242
});
4343

4444
it('should accept a Firebase App in the constructor', () => {
45-
const __db = new AngularFireDatabase(app.options, undefined!, app.name, undefined!, {}, zone);
45+
const __db = new AngularFireDatabase(app.options, app.name, undefined!, {}, zone);
4646
expect(__db instanceof AngularFireDatabase).toEqual(true);
4747
});
4848

@@ -69,7 +69,7 @@ describe('AngularFireDatabase w/options', () => {
6969
AngularFireDatabaseModule
7070
],
7171
providers: [
72-
{ provide: FirebaseAppNameToken, useValue: FIREBASE_APP_NAME_TOO },
72+
{ provide: FirebaseNameOrConfigToken, useValue: FIREBASE_APP_NAME_TOO },
7373
{ provide: FirebaseOptionsToken, useValue: COMMON_CONFIG },
7474
{ provide: RealtimeDatabaseURL, useValue: FIREBASE_DB_NAME }
7575
]

src/database/database.ts

+3-4
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import { InjectionToken } from '@angular/core';
66
import { FirebaseOptions, FirebaseAppConfig } from '@firebase/app-types';
77
import { createListReference } from './list/create-reference';
88
import { createObjectReference } from './object/create-reference';
9-
import { FirebaseOptionsToken, FirebaseAppConfigToken, FirebaseAppNameToken, RealtimeDatabaseURL, _firebaseAppFactory, FirebaseZoneScheduler } from 'angularfire2';
9+
import { FirebaseOptionsToken, FirebaseNameOrConfigToken, RealtimeDatabaseURL, _firebaseAppFactory, FirebaseZoneScheduler } from 'angularfire2';
1010

1111
@Injectable()
1212
export class AngularFireDatabase {
@@ -15,15 +15,14 @@ export class AngularFireDatabase {
1515

1616
constructor(
1717
@Inject(FirebaseOptionsToken) options:FirebaseOptions,
18-
@Optional() @Inject(FirebaseAppConfigToken) config:FirebaseAppConfig,
19-
@Optional() @Inject(FirebaseAppNameToken) name:string,
18+
@Optional() @Inject(FirebaseNameOrConfigToken) nameOrConfig:string|FirebaseAppConfig|undefined,
2019
@Optional() @Inject(RealtimeDatabaseURL) databaseURL:string,
2120
@Inject(PLATFORM_ID) platformId: Object,
2221
zone: NgZone
2322
) {
2423
this.scheduler = new FirebaseZoneScheduler(zone, platformId);
2524
this.database = zone.runOutsideAngular(() => {
26-
const app = _firebaseAppFactory(options, name, config);
25+
const app = _firebaseAppFactory(options, nameOrConfig);
2726
return app.database(databaseURL || undefined);
2827
});
2928
}

src/firestore/firestore.spec.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { FirebaseApp, FirebaseOptionsToken, AngularFireModule, FirebaseAppNameToken } from 'angularfire2';
1+
import { FirebaseApp, FirebaseOptionsToken, AngularFireModule, FirebaseNameOrConfigToken } from 'angularfire2';
22
import { AngularFirestore } from './firestore';
33
import { AngularFirestoreModule } from './firestore.module';
44
import { AngularFirestoreDocument } from './document/document';
@@ -105,7 +105,7 @@ describe('AngularFirestore with different app', () => {
105105
AngularFirestoreModule
106106
],
107107
providers: [
108-
{ provide: FirebaseAppNameToken, useValue: FIREBASE_APP_NAME_TOO },
108+
{ provide: FirebaseNameOrConfigToken, useValue: FIREBASE_APP_NAME_TOO },
109109
{ provide: FirebaseOptionsToken, useValue: COMMON_CONFIG }
110110
]
111111
});

src/firestore/firestore.ts

+3-4
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import { QueryFn, AssociatedReference } from './interfaces';
99
import { AngularFirestoreDocument } from './document/document';
1010
import { AngularFirestoreCollection } from './collection/collection';
1111

12-
import { FirebaseAppConfigToken, FirebaseOptionsToken, FirebaseAppNameToken, _firebaseAppFactory, FirebaseZoneScheduler } from 'angularfire2';
12+
import { FirebaseOptionsToken, FirebaseNameOrConfigToken, _firebaseAppFactory, FirebaseZoneScheduler } from 'angularfire2';
1313

1414
/**
1515
* The value of this token determines whether or not the firestore will have persistance enabled
@@ -106,16 +106,15 @@ export class AngularFirestore {
106106
*/
107107
constructor(
108108
@Inject(FirebaseOptionsToken) options:FirebaseOptions,
109-
@Optional() @Inject(FirebaseAppConfigToken) config:FirebaseAppConfig,
110-
@Optional() @Inject(FirebaseAppNameToken) name:string,
109+
@Optional() @Inject(FirebaseNameOrConfigToken) nameOrConfig:string|FirebaseAppConfig|undefined,
111110
@Optional() @Inject(EnablePersistenceToken) shouldEnablePersistence: boolean,
112111
@Optional() @Inject(FirestoreSettingsToken) settings: Settings,
113112
@Inject(PLATFORM_ID) platformId: Object,
114113
zone: NgZone
115114
) {
116115
this.scheduler = new FirebaseZoneScheduler(zone, platformId);
117116
this.firestore = zone.runOutsideAngular(() => {
118-
const app = _firebaseAppFactory(options, name, config);
117+
const app = _firebaseAppFactory(options, nameOrConfig);
119118
const firestore = app.firestore();
120119
firestore.settings(settings || DefaultFirestoreSettings);
121120
return firestore;

src/storage/storage.spec.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { Observable, forkJoin } from 'rxjs'
22
import { map, mergeMap, tap } from 'rxjs/operators';
33
import { TestBed, inject } from '@angular/core/testing';
4-
import { FirebaseApp, FirebaseOptionsToken, AngularFireModule, FirebaseAppNameToken } from 'angularfire2';
4+
import { FirebaseApp, FirebaseOptionsToken, AngularFireModule, FirebaseNameOrConfigToken } from 'angularfire2';
55
import { AngularFireStorageModule, AngularFireStorage, AngularFireUploadTask, StorageBucket } from 'angularfire2/storage';
66
import { COMMON_CONFIG } from './test-config';
77

@@ -140,7 +140,7 @@ describe('AngularFireStorage w/options', () => {
140140
AngularFireStorageModule
141141
],
142142
providers: [
143-
{ provide: FirebaseAppNameToken, useValue: FIREBASE_APP_NAME_TOO },
143+
{ provide: FirebaseNameOrConfigToken, useValue: FIREBASE_APP_NAME_TOO },
144144
{ provide: FirebaseOptionsToken, useValue: COMMON_CONFIG },
145145
{ provide: StorageBucket, useValue: FIREBASE_STORAGE_BUCKET }
146146
]

src/storage/storage.ts

+3-4
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import { FirebaseStorage, UploadMetadata } from '@firebase/storage-types';
33
import { createStorageRef, AngularFireStorageReference } from './ref';
44
import { createUploadTask, AngularFireUploadTask } from './task';
55
import { Observable } from 'rxjs';
6-
import { FirebaseAppConfigToken, FirebaseOptionsToken, FirebaseAppNameToken, FirebaseZoneScheduler, _firebaseAppFactory } from 'angularfire2';
6+
import { FirebaseOptionsToken, FirebaseNameOrConfigToken, FirebaseZoneScheduler, _firebaseAppFactory } from 'angularfire2';
77
import { FirebaseOptions, FirebaseAppConfig } from '@firebase/app-types';
88

99
export const StorageBucket = new InjectionToken<string>('angularfire2.storageBucket');
@@ -22,15 +22,14 @@ export class AngularFireStorage {
2222

2323
constructor(
2424
@Inject(FirebaseOptionsToken) options:FirebaseOptions,
25-
@Optional() @Inject(FirebaseAppConfigToken) config:FirebaseAppConfig,
26-
@Optional() @Inject(FirebaseAppNameToken) name:string,
25+
@Optional() @Inject(FirebaseNameOrConfigToken) nameOrConfig:string|FirebaseAppConfig|undefined,
2726
@Optional() @Inject(StorageBucket) storageBucket:string,
2827
@Inject(PLATFORM_ID) platformId: Object,
2928
zone: NgZone
3029
) {
3130
this.scheduler = new FirebaseZoneScheduler(zone, platformId);
3231
this.storage = zone.runOutsideAngular(() => {
33-
const app = _firebaseAppFactory(options, name, config);
32+
const app = _firebaseAppFactory(options, nameOrConfig);
3433
return app.storage(storageBucket || undefined);
3534
});
3635
}

test/ng-build/ng6/package.json

+3-3
Original file line numberDiff line numberDiff line change
@@ -22,16 +22,16 @@
2222
"@angular/platform-browser": "6.0.1",
2323
"@angular/platform-browser-dynamic": "6.0.1",
2424
"@angular/router": "6.0.1",
25-
"angularfire2": "file:../../../dist/packages-dist",
25+
"angularfire2": "../../../dist/packages-dist",
2626
"core-js": "^2.4.1",
2727
"rxjs": "^6.0.0",
2828
"zone.js": "^0.8.14"
2929
},
3030
"devDependencies": {
31+
"@angular-devkit/build-angular": "~0.6.1",
3132
"@angular/cli": "6.0.1",
3233
"@angular/compiler-cli": "6.0.1",
3334
"@angular/language-service": "6.0.1",
34-
"typescript": ">=2.7.2 <2.8.0",
35-
"@angular-devkit/build-angular": "~0.6.1"
35+
"typescript": ">=2.7.2 <2.8.0"
3636
}
3737
}

test/ng-build/ng6/src/app/app.module.ts

+6-11
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { BrowserModule } from '@angular/platform-browser';
22
import { NgModule } from '@angular/core';
3-
import { FirebaseOptionsToken, AngularFireModule, FirebaseAppNameToken, FirebaseAppConfigToken } from 'angularfire2';
3+
import { FirebaseOptionsToken, AngularFireModule } from 'angularfire2';
44
import { AngularFireDatabaseModule } from 'angularfire2/database';
55
import { AngularFireAuthModule } from 'angularfire2/auth';
66
import { AngularFirestoreModule } from 'angularfire2/firestore';
@@ -13,22 +13,17 @@ import { AppComponent } from './app.component';
1313
],
1414
imports: [
1515
BrowserModule,
16-
AngularFireModule,
17-
AngularFireAuthModule,
18-
AngularFireDatabaseModule,
19-
AngularFirestoreModule
20-
],
21-
providers: [
22-
{ provide: FirebaseOptionsToken, useValue: {
16+
AngularFireModule.initializeApp({
2317
apiKey: "AIzaSyAwRrxjjft7KMdhwfLKPkd8PCBR3JFaLfo",
2418
authDomain: "angularfirestore.firebaseapp.com",
2519
databaseURL: "https://angularfirestore.firebaseio.com",
2620
projectId: "angularfirestore",
2721
storageBucket: "angularfirestore.appspot.com",
2822
messagingSenderId: "1039984584356"
29-
} },
30-
{ provide: FirebaseAppNameToken, useValue: undefined },
31-
{ provide: FirebaseAppConfigToken, useValue: undefined }
23+
}),
24+
AngularFireAuthModule,
25+
AngularFireDatabaseModule,
26+
AngularFirestoreModule
3227
],
3328
bootstrap: [AppComponent]
3429
})

test/ng-build/ng6/yarn.lock

+1-1
Original file line numberDiff line numberDiff line change
@@ -283,7 +283,7 @@ amdefine@>=0.0.4:
283283
version "1.0.1"
284284
resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5"
285285

286-
"angularfire2@file:../../../dist/packages-dist":
286+
angularfire2@../../../dist/packages-dist:
287287
version "5.0.0-rc.8"
288288

289289

0 commit comments

Comments
 (0)