Skip to content

Commit 664c2d6

Browse files
committed
fix(): Switching over to firebase from @firebase/*
1 parent bb1938f commit 664c2d6

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

57 files changed

+224
-319
lines changed

karma.conf.js

+6-1
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,12 @@ module.exports = function(config) {
2525
...getAngularFiles(['core','common','compiler','platform-browser','platform-browser-dynamic']),
2626

2727
'karma-test-shim.js',
28-
'node_modules/firebase/firebase.js',
28+
'node_modules/firebase/firebase-app.js',
29+
'node_modules/firebase/firebase-auth.js',
30+
'node_modules/firebase/firebase-database.js',
31+
'node_modules/firebase/firebase-firestore.js',
32+
'node_modules/firebase/firebase-functions.js',
33+
'node_modules/firebase/firebase-storage.js',
2934
'dist/packages-dist/bundles/core.umd.{js,map}',
3035
'dist/packages-dist/bundles/auth.umd.{js,map}',
3136
'dist/packages-dist/bundles/database.umd.{js,map}',

package.json

+1-14
Original file line numberDiff line numberDiff line change
@@ -34,19 +34,7 @@
3434
"@angular/core": "^6.0.0",
3535
"@angular/platform-browser": "^6.0.0",
3636
"@angular/platform-browser-dynamic": "^6.0.0",
37-
"@firebase/app": "^0.3.1",
38-
"@firebase/app-types": "^0.3.1",
39-
"@firebase/auth": "^0.5.2",
40-
"@firebase/auth-types": "^0.3.2",
41-
"@firebase/database": "^0.3.1",
42-
"@firebase/database-types": "^0.3.1",
43-
"@firebase/firestore": "^0.5.2",
44-
"@firebase/firestore-types": "^0.4.1",
45-
"@firebase/functions": "^0.2.2",
46-
"@firebase/functions-types": "^0.1.2",
47-
"@firebase/messaging-types": "^0.2.2",
48-
"@firebase/storage": "^0.2.2",
49-
"@firebase/storage-types": "^0.2.2",
37+
"firebase": "^5.0.3",
5038
"bufferutil": "^3.0.3",
5139
"rxjs": "^6.0.0",
5240
"utf-8-validate": "^4.0.0",
@@ -63,7 +51,6 @@
6351
"conventional-changelog-cli": "^1.2.0",
6452
"es6-module-loader": "^0.17.10",
6553
"es6-shim": "^0.35.0",
66-
"firebase": "^5.0.2",
6754
"fs-extra": "^4.0.0",
6855
"gulp": "^3.9.0",
6956
"gulp-jasmine": "^2.2.1",

src/auth/auth.module.ts

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import { NgModule } from '@angular/core';
22
import { AngularFireAuth } from './auth';
3-
import '@firebase/auth';
3+
4+
import 'firebase/auth';
45

56
@NgModule({
67
providers: [ AngularFireAuth ]

src/auth/auth.spec.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { User } from '@firebase/auth-types';
1+
import { User } from 'firebase/app';
22
import { ReflectiveInjector, Provider } from '@angular/core';
33
import { Observable, Subject } from 'rxjs'
44
import { TestBed, inject } from '@angular/core/testing';

src/auth/auth.ts

+4-4
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
1-
import { FirebaseAuth, User, IdTokenResult } from '@firebase/auth-types';
2-
import { FirebaseOptions, FirebaseAppConfig } from '@firebase/app-types';
31
import { Injectable, Inject, Optional, NgZone, PLATFORM_ID } from '@angular/core';
42
import { Observable, of, from } from 'rxjs';
53
import { switchMap } from 'rxjs/operators';
4+
import { FirebaseAppConfig, FirebaseOptions } from 'angularfire2';
65

7-
import { FirebaseOptionsToken, FirebaseNameOrConfigToken, _firebaseAppFactory, FirebaseZoneScheduler } from 'angularfire2';
6+
import { User, auth } from 'firebase/app';
87

8+
import { FirebaseAuth, FirebaseOptionsToken, FirebaseNameOrConfigToken, _firebaseAppFactory, FirebaseZoneScheduler } from 'angularfire2';
99

1010
@Injectable()
1111
export class AngularFireAuth {
@@ -35,7 +35,7 @@ export class AngularFireAuth {
3535
* helper properties for getting different data associated with the token as well as all the decoded payload claims
3636
* (or null).
3737
*/
38-
public readonly idTokenResult: Observable<IdTokenResult|null>;
38+
public readonly idTokenResult: Observable<auth.IdTokenResult|null>;
3939

4040
constructor(
4141
@Inject(FirebaseOptionsToken) options:FirebaseOptions,

src/auth/package.json

+1-2
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,7 @@
2222
"@angular/core": "ANGULAR_VERSION",
2323
"@angular/platform-browser": "ANGULAR_VERSION",
2424
"@angular/platform-browser-dynamic": "ANGULAR_VERSION",
25-
"@firebase/app": "FIREBASE_APP_VERSION",
26-
"@firebase/auth": "FIREBASE_AUTH_VERSION",
25+
"firebase": "FIREBASE_VERSION",
2726
"rxjs": "RXJS_VERSION",
2827
"zone.js": "ZONEJS_VERSION"
2928
},

src/core/angularfire2.spec.ts

+4-4
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,18 @@
11

2-
import { Reference } from '@firebase/database-types';
32
import { TestBed, inject, withModule, async } from '@angular/core/testing';
43
import { ReflectiveInjector, Provider, PlatformRef, NgModule, Compiler, ApplicationRef, CompilerFactory } from '@angular/core';
54
import { FirebaseApp, AngularFireModule } from 'angularfire2';
65
import { Subscription } from 'rxjs';
76
import { COMMON_CONFIG } from './test-config';
87
import { BrowserModule } from '@angular/platform-browser';
8+
import { database } from 'firebase/app';
99

1010
describe('angularfire', () => {
1111
let subscription:Subscription;
1212
let app: FirebaseApp;
13-
let rootRef: Reference;
14-
let questionsRef: Reference;
15-
let listOfQuestionsRef: Reference;
13+
let rootRef: database.Reference;
14+
let questionsRef: database.Reference;
15+
let listOfQuestionsRef: database.Reference;
1616
let defaultPlatform: PlatformRef;
1717

1818
const APP_NAME = 'super-awesome-test-firebase-app-name';

src/core/angularfire2.ts

-6
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,6 @@ import { isPlatformServer } from '@angular/common';
33
import { Observable, Subscription, queueScheduler as queue } from 'rxjs';
44
import { first } from 'rxjs/operators';
55

6-
import { firebase } from '@firebase/app';
7-
import { FirebaseApp, FirebaseOptions, FirebaseAppConfig } from '@firebase/app-types';
8-
9-
export const FirebaseOptionsToken = new InjectionToken<FirebaseOptions>('angularfire2.app.options');
10-
export const FirebaseNameOrConfigToken = new InjectionToken<string|FirebaseAppConfig|undefined>('angularfire2.app.nameOrConfig')
11-
126
// Put in database.ts when we drop database-depreciated
137
export const RealtimeDatabaseURL = new InjectionToken<string>('angularfire2.realtimeDatabaseURL');
148

src/core/firebase.app.module.ts

+20-13
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,28 @@
11
import { InjectionToken, NgZone, NgModule, Optional } from '@angular/core';
2+
import { app, auth, apps, database, firestore, functions, initializeApp, messaging, storage } from 'firebase/app';
23

3-
import { FirebaseOptionsToken, FirebaseNameOrConfigToken } from './angularfire2';
4+
// Public types don't expose FirebaseOptions or FirebaseAppConfig
5+
export type FirebaseOptions = {[key:string]: any};
6+
export type FirebaseAppConfig = {[key:string]: any};
47

5-
import firebase from '@firebase/app';
6-
import { FirebaseApp as _FirebaseApp, FirebaseOptions, FirebaseAppConfig } from '@firebase/app-types';
7-
import { FirebaseAuth } from '@firebase/auth-types';
8-
import { FirebaseDatabase } from '@firebase/database-types';
9-
import { FirebaseMessaging } from '@firebase/messaging-types';
10-
import { FirebaseStorage } from '@firebase/storage-types';
11-
import { FirebaseFirestore } from '@firebase/firestore-types';
12-
import { FirebaseFunctions } from '@firebase/functions-types';
8+
export const FirebaseOptionsToken = new InjectionToken<FirebaseOptions>('angularfire2.app.options');
9+
export const FirebaseNameOrConfigToken = new InjectionToken<string|FirebaseAppConfig|undefined>('angularfire2.app.nameOrConfig')
1310

14-
export class FirebaseApp implements _FirebaseApp {
11+
export type FirebaseDatabase = database.Database;
12+
export type FirebaseAuth = auth.Auth;
13+
export type FirebaseMessaging = messaging.Messaging;
14+
export type FirebaseStorage = storage.Storage;
15+
export type FirebaseFirestore = firestore.Firestore;
16+
export type FirebaseFunctions = functions.Functions;
17+
18+
export class FirebaseApp implements app.App {
1519
name: string;
16-
automaticDataCollectionEnabled: boolean;
1720
options: {};
1821
auth: () => FirebaseAuth;
22+
// app.App database() doesn't take a databaseURL arg in the public types?
1923
database: (databaseURL?: string) => FirebaseDatabase;
24+
// automaticDataCollectionEnabled is now private? _automaticDataCollectionEnabled?
25+
// automaticDataCollectionEnabled: true,
2026
messaging: () => FirebaseMessaging;
2127
storage: (storageBucket?: string) => FirebaseStorage;
2228
delete: () => Promise<void>;
@@ -28,8 +34,9 @@ export function _firebaseAppFactory(options: FirebaseOptions, nameOrConfig?: str
2834
const name = typeof nameOrConfig === 'string' && nameOrConfig || '[DEFAULT]';
2935
const config = typeof nameOrConfig === 'object' && nameOrConfig || {};
3036
config.name = config.name || name;
31-
const existingApp = firebase.apps.filter(app => app.name === config.name)[0];
32-
return (existingApp || firebase.initializeApp(options, config)) as FirebaseApp;
37+
const existingApp = apps.filter(app => app && app.name === config.name)[0];
38+
// We support FirebaseConfig, initializeApp's public type only accepts string; need to cast as any
39+
return (existingApp || (initializeApp as any)(options, config)) as FirebaseApp;
3340
}
3441

3542
const FirebaseAppProvider = {

src/core/package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
"@angular/core": "ANGULAR_VERSION",
2222
"@angular/platform-browser": "ANGULAR_VERSION",
2323
"@angular/platform-browser-dynamic": "ANGULAR_VERSION",
24-
"@firebase/app": "FIREBASE_APP_VERSION",
24+
"firebase": "FIREBASE_VERSION",
2525
"rxjs": "RXJS_VERSION",
2626
"zone.js": "ZONEJS_VERSION"
2727
},

src/database-deprecated/database.module.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { NgModule } from '@angular/core';
22
import { AngularFireDatabase } from './database';
3-
import '@firebase/database';
3+
import 'firebase/database';
44

55
@NgModule({
66
providers: [ AngularFireDatabase ]

src/database-deprecated/database.ts

+1-3
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,11 @@
1-
import { FirebaseDatabase } from '@firebase/database-types';
21
import { Inject, Injectable, Optional, NgZone } from '@angular/core';
32
import { FirebaseListFactory } from './firebase_list_factory';
43
import { FirebaseListObservable } from './firebase_list_observable';
54
import { FirebaseListFactoryOpts, FirebaseObjectFactoryOpts, PathReference } from './interfaces';
65
import { FirebaseObjectFactory } from './firebase_object_factory';
76
import { FirebaseObjectObservable } from './firebase_object_observable';
87
import * as utils from './utils';
9-
import { FirebaseOptions, FirebaseAppConfig } from '@firebase/app-types';
10-
import { FirebaseOptionsToken, FirebaseNameOrConfigToken, RealtimeDatabaseURL, _firebaseAppFactory } from 'angularfire2';
8+
import { FirebaseDatabase, FirebaseOptions, FirebaseAppConfig, FirebaseOptionsToken, FirebaseNameOrConfigToken, RealtimeDatabaseURL, _firebaseAppFactory } from 'angularfire2';
119

1210
@Injectable()
1311
export class AngularFireDatabase {

src/database-deprecated/firebase_list_factory.ts

+3-4
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,12 @@
11
import { NgZone } from '@angular/core';
2-
import * as database from '@firebase/database-types';
32
import { FirebaseZoneScheduler } from 'angularfire2';
43
import * as utils from './utils';
54
import { AFUnwrappedDataSnapshot } from './interfaces';
65
import { FirebaseListObservable } from './firebase_list_observable';
76
import { Observer } from 'rxjs';
87
import { observeOn, switchMap, map } from 'rxjs/operators';
98
import { observeQuery } from './query_observable';
10-
import { Query, FirebaseListFactoryOpts, DatabaseReference, DatabaseQuery, DatabaseSnapshot } from './interfaces';
9+
import { Reference, Query, FirebaseListFactoryOpts, DatabaseReference, DatabaseQuery, DatabaseSnapshot } from './interfaces';
1110

1211
export function FirebaseListFactory (
1312
ref: DatabaseReference,
@@ -90,7 +89,7 @@ export function FirebaseListFactory (
9089
}
9190

9291
return queried;
93-
}), (queryRef: database.Reference, ix: number) => {
92+
}), (queryRef: Reference, ix: number) => {
9493
return firebaseListObservable(queryRef, { preserveSnapshot });
9594
})
9695
.subscribe(subscriber);
@@ -106,7 +105,7 @@ export function FirebaseListFactory (
106105
* asynchonous. It creates a initial array from a promise of ref.once('value'), and then starts
107106
* listening to child events. When the initial array is loaded, the observable starts emitting values.
108107
*/
109-
function firebaseListObservable(ref: database.Reference | DatabaseQuery, {preserveSnapshot}: FirebaseListFactoryOpts = {}): FirebaseListObservable<any> {
108+
function firebaseListObservable(ref: Reference | DatabaseQuery, {preserveSnapshot}: FirebaseListFactoryOpts = {}): FirebaseListObservable<any> {
110109

111110
const toValue = preserveSnapshot ? (snapshot => snapshot) : utils.unwrapMapFn;
112111
const toKey = preserveSnapshot ? (value => value.key) : (value => value.$key);

src/database-deprecated/firebase_list_observable.spec.ts

+5-6
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,17 @@
11
import { FirebaseApp, FirebaseAppConfig, AngularFireModule} from 'angularfire2';
22
import { AngularFireDatabase, AngularFireDatabaseModule, FirebaseListObservable, FirebaseObjectFactory } from 'angularfire2/database-deprecated';
3-
import { Observer } from 'rxjs/Observer';
4-
import { map } from 'rxjs/operator/map';
5-
import { FirebaseApp as FBApp } from '@firebase/app-types';
6-
import { DataSnapshot, Reference } from '@firebase/database-types';
3+
import { Observer } from 'rxjs';
4+
import { map } from 'rxjs/operators';
75
import { unwrapMapFn } from './utils';
6+
import { DataSnapshot, Reference } from './interfaces';
87

98
import { TestBed, inject } from '@angular/core/testing';
109
import { COMMON_CONFIG } from './test-config';
1110

1211
describe('FirebaseListObservable', () => {
1312
let O: FirebaseListObservable<any>;
1413
let ref: Reference;
15-
let app: FBApp;
14+
let app: FirebaseApp;
1615
let db: AngularFireDatabase;
1716

1817
beforeEach(() => {
@@ -22,7 +21,7 @@ describe('FirebaseListObservable', () => {
2221
AngularFireDatabaseModule
2322
]
2423
});
25-
inject([FirebaseApp, AngularFireDatabase], (_app: FBApp, _db: AngularFireDatabase) => {
24+
inject([FirebaseApp, AngularFireDatabase], (_app: FirebaseApp, _db: AngularFireDatabase) => {
2625
app = _app;
2726
db = _db;
2827
ref = app.database().ref();

src/database-deprecated/firebase_list_observable.ts

+1-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
import { Observable, Operator, Subscriber, Subscription } from 'rxjs';
2-
import { Reference, DataSnapshot, ThenableReference } from '@firebase/database-types';
32
import * as utils from './utils';
4-
import { AFUnwrappedDataSnapshot, FirebaseOperationCases, QueryReference, DatabaseSnapshot, DatabaseReference } from './interfaces';
3+
import { Reference, DataSnapshot, ThenableReference, AFUnwrappedDataSnapshot, FirebaseOperationCases, QueryReference, DatabaseSnapshot, DatabaseReference } from './interfaces';
54

65
export type FirebaseOperation = string | Reference | DataSnapshot | AFUnwrappedDataSnapshot;
76

src/database-deprecated/firebase_object_factory.spec.ts

+2-3
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,17 @@
1-
import { FirebaseApp as FBApp } from '@firebase/app-types';
2-
import { Reference } from '@firebase/database-types';
31
import { Subscription } from 'rxjs';
42
import { FirebaseApp, FirebaseAppConfig, AngularFireModule } from 'angularfire2';
53
import { AngularFireDatabase, AngularFireDatabaseModule, FirebaseObjectObservable, FirebaseObjectFactory } from 'angularfire2/database-deprecated';
64
import { TestBed, inject } from '@angular/core/testing';
75
import { COMMON_CONFIG } from './test-config';
6+
import { Reference } from './interfaces'
87

98
describe('FirebaseObjectFactory', () => {
109
let i = 0;
1110
let ref: Reference;
1211
let observable: FirebaseObjectObservable<any>;
1312
let subscription: Subscription;
1413
let nextSpy: jasmine.Spy;
15-
let app: FBApp;
14+
let app: FirebaseApp;
1615
let db: AngularFireDatabase;
1716

1817
beforeEach(() => {

src/database-deprecated/firebase_object_factory.ts

+1-2
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,8 @@ import { FirebaseObjectObservable } from './firebase_object_observable';
33
import { FirebaseZoneScheduler } from 'angularfire2';
44
import { Observer } from 'rxjs';
55
import { observeOn } from 'rxjs/operators';
6-
import { DataSnapshot } from '@firebase/database-types';
76
import * as utils from './utils';
8-
import { FirebaseObjectFactoryOpts, DatabaseReference } from './interfaces';
7+
import { DataSnapshot, FirebaseObjectFactoryOpts, DatabaseReference } from './interfaces';
98

109
export function FirebaseObjectFactory (
1110
ref: DatabaseReference,

src/database-deprecated/firebase_object_observable.spec.ts

+5-6
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,15 @@ import { TestBed, inject } from '@angular/core/testing';
22
import { FirebaseApp, FirebaseAppConfig, AngularFireModule } from 'angularfire2';
33
import { COMMON_CONFIG } from './test-config';
44
import { AngularFireDatabase, AngularFireDatabaseModule, FirebaseObjectObservable } from 'angularfire2/database-deprecated';
5-
import { Observer } from 'rxjs/Observer';
6-
import { map } from 'rxjs/operator/map';
7-
import { FirebaseApp as FBApp } from '@firebase/app-types';
8-
import { Reference } from '@firebase/database-types';
5+
import { Observer } from 'rxjs';
6+
import { map } from 'rxjs/operators';
7+
import { Reference } from './interfaces';
98

109
describe('FirebaseObjectObservable', () => {
1110

1211
let O: FirebaseObjectObservable<any>;
1312
let ref: Reference;
14-
let app: FBApp;
13+
let app: FirebaseApp;
1514
let db: AngularFireDatabase;
1615

1716
beforeEach(() => {
@@ -21,7 +20,7 @@ describe('FirebaseObjectObservable', () => {
2120
AngularFireDatabaseModule
2221
]
2322
});
24-
inject([FirebaseApp, AngularFireDatabase], (_app: FBApp, _db: AngularFireDatabase) => {
23+
inject([FirebaseApp, AngularFireDatabase], (_app: FirebaseApp, _db: AngularFireDatabase) => {
2524
app = _app;
2625
db = _db;
2726
ref = app.database().ref();

src/database-deprecated/firebase_object_observable.ts

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import { Observable, Operator, Subscriber, Subscription } from 'rxjs';
2-
import { Reference } from '@firebase/database-types';
2+
import { Reference } from './interfaces';
3+
import { database } from 'firebase/app';
34

45
export class FirebaseObjectObservable<T> extends Observable<T> {
56
constructor(subscribe?: <R>(subscriber: Subscriber<R>) => Subscription | Function | void, public $ref?:Reference) {

src/database-deprecated/interfaces.ts

+6-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
import { Observable } from 'rxjs';
2-
import { Reference, DataSnapshot, Query } from '@firebase/database-types';
2+
import { database } from 'firebase/app';
3+
4+
export type Reference = database.Reference;
5+
export type DataSnapshot = database.DataSnapshot;
6+
export type ThenableReference = database.ThenableReference;
37

48
export interface FirebaseOperationCases {
59
stringCase: () => Promise<void>;
@@ -83,6 +87,6 @@ export type Primitive = number | string | boolean;
8387

8488
export type DatabaseSnapshot = DataSnapshot;
8589
export type DatabaseReference = Reference;
86-
export type DatabaseQuery = Query;
90+
export type DatabaseQuery = database.Query;
8791
export type QueryReference = DatabaseReference | DatabaseQuery;
8892
export type PathReference = QueryReference | string;

src/database-deprecated/package.json

+1-2
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,7 @@
2222
"@angular/core": "ANGULAR_VERSION",
2323
"@angular/platform-browser": "ANGULAR_VERSION",
2424
"@angular/platform-browser-dynamic": "ANGULAR_VERSION",
25-
"@firebase/app": "FIREBASE_APP_VERSION",
26-
"@firebase/database": "FIREBASE_DATABASE_VERSION",
25+
"firebase": "FIREBASE_VERSION",
2726
"rxjs": "RXJS_VERSION",
2827
"zone.js": "ZONEJS_VERSION"
2928
},

src/database-deprecated/utils.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
import { DataSnapshot, FirebaseDatabase } from '@firebase/database-types';
21
import { Subscription, Scheduler, queueScheduler as queue } from 'rxjs';
3-
import { AFUnwrappedDataSnapshot, PathReference, DatabaseReference } from './interfaces';
2+
import { DataSnapshot, AFUnwrappedDataSnapshot, PathReference, DatabaseReference } from './interfaces';
3+
import { FirebaseDatabase } from 'angularfire2';
44

55
const REGEX_ABSOLUTE_URL = /^[a-z]+:\/\/.*/;
66

0 commit comments

Comments
 (0)