diff --git a/karma.conf.js b/karma.conf.js index 6244a67db..ac8785b84 100644 --- a/karma.conf.js +++ b/karma.conf.js @@ -20,7 +20,7 @@ module.exports = function(config) { 'node_modules/zone.js/dist/async-test.js', 'node_modules/zone.js/dist/fake-async-test.js', - 'node_modules/rxjs/bundles/Rx.{js,map}', + 'node_modules/rxjs/bundles/rxjs.umd.{js,map}', ...getAngularFiles(['core','common','compiler','platform-browser','platform-browser-dynamic']), diff --git a/package.json b/package.json index 75370c6f7..01db8ffde 100644 --- a/package.json +++ b/package.json @@ -29,11 +29,11 @@ }, "homepage": "https://github.com/angular/angularfire2#readme", "dependencies": { - "@angular/common": "^5.0.0", - "@angular/compiler": "^5.0.0", - "@angular/core": "^5.0.0", - "@angular/platform-browser": "^5.0.0", - "@angular/platform-browser-dynamic": "^5.0.0", + "@angular/common": "^6.0.0-rc.5", + "@angular/compiler": "^6.0.0-rc.5", + "@angular/core": "^6.0.0-rc.5", + "@angular/platform-browser": "^6.0.0-rc.5", + "@angular/platform-browser-dynamic": "^6.0.0-rc.5", "@firebase/app": "^0.1.6", "@firebase/app-types": "^0.1.1", "@firebase/auth": "^0.3.2", @@ -47,15 +47,16 @@ "@firebase/storage-types": "^0.1.1", "bufferutil": "^3.0.3", "firebase": "^4.8.2", - "rxjs": "^5.5.4", + "rxjs": "^6.0.0", + "rxjs-compat": "^6.0.0", "utf-8-validate": "^4.0.0", "ws": "^3.3.2", "xmlhttprequest": "^1.8.0", - "zone.js": "^0.8.0" + "zone.js": "~0.8.26" }, "devDependencies": { - "@angular/compiler-cli": "^5.0.0", - "@angular/platform-server": "^5.0.0", + "@angular/compiler-cli": "^6.0.0-rc.5", + "@angular/platform-server": "^6.0.0-rc.5", "@types/jasmine": "^2.5.36", "@types/request": "0.0.30", "concurrently": "^2.2.0", @@ -90,7 +91,7 @@ "systemjs": "^0.19.16", "systemjs-builder": "^0.15.7", "traceur": "0.0.96", - "typescript": ">=2.4.2 <2.5" + "typescript": ">=2.7.2 <2.8.0" }, "typings": "index.d.ts" } diff --git a/src/auth/auth.spec.ts b/src/auth/auth.spec.ts index 26c58d22e..2e3f5fb47 100644 --- a/src/auth/auth.spec.ts +++ b/src/auth/auth.spec.ts @@ -1,12 +1,10 @@ import { User } from '@firebase/auth-types'; import { ReflectiveInjector, Provider } from '@angular/core'; -import { Observable } from 'rxjs/Observable' -import { Subject } from 'rxjs/Subject' -import { Observer } from 'rxjs/Observer'; +import { Observable , Subject , Observer } from 'rxjs' import { TestBed, inject } from '@angular/core/testing'; -import { _do } from 'rxjs/operator/do'; -import { take } from 'rxjs/operator/take'; -import { skip } from 'rxjs/operator/skip'; + + + import { FirebaseApp, FirebaseAppConfig, AngularFireModule, FirebaseAppName } from 'angularfire2'; import { AngularFireAuth, AngularFireAuthModule } from 'angularfire2/auth'; import { COMMON_CONFIG } from './test-config'; diff --git a/src/auth/auth.ts b/src/auth/auth.ts index 08b08e23e..e0987de95 100644 --- a/src/auth/auth.ts +++ b/src/auth/auth.ts @@ -1,14 +1,17 @@ + +import {of as observableOf, from as observableFrom, Observable } from 'rxjs'; + +import {switchMap} from 'rxjs/operators'; import { FirebaseAuth, User } from '@firebase/auth-types'; import { FirebaseOptions } from '@firebase/app-types'; import { Injectable, Inject, Optional, NgZone } from '@angular/core'; -import { Observable } from 'rxjs/Observable'; -import { observeOn } from 'rxjs/operator/observeOn'; + import { FirebaseAppConfig, FirebaseAppName, _firebaseAppFactory, FirebaseZoneScheduler } from 'angularfire2'; -import 'rxjs/add/operator/switchMap'; -import 'rxjs/add/observable/of'; -import 'rxjs/add/observable/fromPromise'; + + + @Injectable() export class AngularFireAuth { @@ -55,9 +58,9 @@ export class AngularFireAuth { return { unsubscribe }; }) ) - ).switchMap((user:User|null) => { - return user ? Observable.fromPromise(user.getIdToken()) : Observable.of(null) - }); + ).pipe(switchMap((user:User) => { + return user ? observableFrom(user.getIdToken()) : observableOf(null) + })); } diff --git a/src/core/angularfire2.spec.ts b/src/core/angularfire2.spec.ts index 4a6752a8b..f59b02394 100644 --- a/src/core/angularfire2.spec.ts +++ b/src/core/angularfire2.spec.ts @@ -3,7 +3,7 @@ import { Reference } from '@firebase/database-types'; import { TestBed, inject, withModule, async } from '@angular/core/testing'; import { ReflectiveInjector, Provider, PlatformRef, NgModule, Compiler, ApplicationRef, CompilerFactory } from '@angular/core'; import { FirebaseApp, FirebaseAppConfig, AngularFireModule } from 'angularfire2'; -import { Subscription } from 'rxjs/Subscription'; +import { Subscription } from 'rxjs'; import { COMMON_CONFIG } from './test-config'; import { BrowserModule } from '@angular/platform-browser'; diff --git a/src/core/angularfire2.ts b/src/core/angularfire2.ts index a6933fb38..5aadfff58 100644 --- a/src/core/angularfire2.ts +++ b/src/core/angularfire2.ts @@ -1,15 +1,15 @@ + +import {first} from 'rxjs/operators'; import { InjectionToken, NgZone } from '@angular/core'; -import { Subscription } from 'rxjs/Subscription'; -import { Observable } from 'rxjs/Observable'; +import { Subscription , Observable , Subscriber } from 'rxjs'; +import { observeOn } from 'rxjs/operators'; import { queue } from 'rxjs/scheduler/queue'; import firebase from '@firebase/app'; import { FirebaseApp, FirebaseOptions } from '@firebase/app-types'; import 'zone.js'; -import 'rxjs/add/operator/first'; -import { Subscriber } from 'rxjs/Subscriber'; -import { observeOn } from 'rxjs/operator/observeOn'; + export const FirebaseAppName = new InjectionToken('angularfire2.appName'); export const FirebaseAppConfig = new InjectionToken('angularfire2.config'); @@ -27,7 +27,7 @@ export class FirebaseZoneScheduler { return new Observable(subscriber => { const noop = () => {}; const task = Zone.current.scheduleMacroTask('firebaseZoneBlock', noop, {}, noop, noop); - obs$.first().subscribe(() => this.zone.runOutsideAngular(() => task.invoke())); + obs$.pipe(first()).subscribe(() => this.zone.runOutsideAngular(() => task.invoke())); return obs$.subscribe(subscriber); }); } @@ -37,6 +37,6 @@ export class FirebaseZoneScheduler { return obs$.subscribe(subscriber); }); }); - return observeOn.call(outsideAngular, this); + return outsideAngular; } } \ No newline at end of file diff --git a/src/database-deprecated/firebase_list_factory.spec.ts b/src/database-deprecated/firebase_list_factory.spec.ts index 2fab28383..7440c37dc 100644 --- a/src/database-deprecated/firebase_list_factory.spec.ts +++ b/src/database-deprecated/firebase_list_factory.spec.ts @@ -1,3 +1,5 @@ + +import {skip, filter} from 'rxjs/operators'; import { DataSnapshot } from '@firebase/database-types'; import { FirebaseApp, FirebaseAppConfig, AngularFireModule} from 'angularfire2'; import { AngularFireDatabase, AngularFireDatabaseModule, FirebaseListObservable, @@ -9,12 +11,12 @@ import * as utils from './utils'; import { Query, AFUnwrappedDataSnapshot } from './interfaces'; import { Subscription, Observable, Subject } from 'rxjs'; import { COMMON_CONFIG } from './test-config'; -import { _do } from 'rxjs/operator/do'; -import { map } from 'rxjs/operator/map'; -import { skip } from 'rxjs/operator/skip'; -import { take } from 'rxjs/operator/take'; -import { toArray } from 'rxjs/operator/toArray'; -import { toPromise } from 'rxjs/operator/toPromise'; + + + + + + const questionsPath = 'questions'; @@ -682,10 +684,10 @@ describe('FirebaseListFactory', () => { }) .run(() => { // Creating a new observable so that the current zone is captured. - subscription = FirebaseListFactory(app.database().ref(`questions`)) - .filter(d => d + subscription = FirebaseListFactory(app.database().ref(`questions`)).pipe( + filter(d => d .map((v: any) => v.$value) - .indexOf('in-the-zone') > -1) + .indexOf('in-the-zone') > -1)) .subscribe(data => { expect(Zone.current.name).toBe('newZone'); done(); @@ -709,8 +711,8 @@ describe('FirebaseListFactory', () => { let keyToRemove: string; afterEach((done: any) => { - subscription = questions - .skip(2) + subscription = questions.pipe( + skip(2)) .take(1) .subscribe((items: any[]) => { expect(items.length).toBe(3); diff --git a/src/database-deprecated/firebase_list_factory.ts b/src/database-deprecated/firebase_list_factory.ts index a2ced0944..69f6edfe6 100644 --- a/src/database-deprecated/firebase_list_factory.ts +++ b/src/database-deprecated/firebase_list_factory.ts @@ -4,12 +4,13 @@ import { FirebaseZoneScheduler } from 'angularfire2'; import * as utils from './utils'; import { AFUnwrappedDataSnapshot } from './interfaces'; import { FirebaseListObservable } from './firebase_list_observable'; -import { Observer } from 'rxjs/Observer'; -import { observeOn } from 'rxjs/operator/observeOn'; +import { Observer } from 'rxjs'; +import { switchMap, map, observeOn } from 'rxjs/operators'; + import { observeQuery } from './query_observable'; import { Query, FirebaseListFactoryOpts, DatabaseReference, DatabaseQuery, DatabaseSnapshot } from './interfaces'; -import { switchMap } from 'rxjs/operator/switchMap'; -import { map } from 'rxjs/operator/map'; + + export function FirebaseListFactory ( ref: DatabaseReference, diff --git a/src/database-deprecated/firebase_list_observable.spec.ts b/src/database-deprecated/firebase_list_observable.spec.ts index 29b32fa48..94aae956a 100644 --- a/src/database-deprecated/firebase_list_observable.spec.ts +++ b/src/database-deprecated/firebase_list_observable.spec.ts @@ -1,7 +1,7 @@ import { FirebaseApp, FirebaseAppConfig, AngularFireModule} from 'angularfire2'; import { AngularFireDatabase, AngularFireDatabaseModule, FirebaseListObservable, FirebaseObjectFactory } from 'angularfire2/database-deprecated'; -import { Observer } from 'rxjs/Observer'; -import { map } from 'rxjs/operator/map'; +import { Observer } from 'rxjs'; + import { FirebaseApp as FBApp } from '@firebase/app-types'; import { DataSnapshot, Reference } from '@firebase/database-types'; import { unwrapMapFn } from './utils'; diff --git a/src/database-deprecated/firebase_list_observable.ts b/src/database-deprecated/firebase_list_observable.ts index 3582e10af..5c3ea0aec 100644 --- a/src/database-deprecated/firebase_list_observable.ts +++ b/src/database-deprecated/firebase_list_observable.ts @@ -1,7 +1,4 @@ -import { Observable } from 'rxjs/Observable'; -import { Operator } from 'rxjs/Operator'; -import { Subscriber } from 'rxjs/Subscriber'; -import { Subscription } from 'rxjs/Subscription'; +import { Observable , Operator , Subscriber , Subscription } from 'rxjs'; import { Reference, DataSnapshot, ThenableReference } from '@firebase/database-types'; import * as utils from './utils'; import { AFUnwrappedDataSnapshot, FirebaseOperationCases, QueryReference, DatabaseSnapshot, DatabaseReference } from './interfaces'; diff --git a/src/database-deprecated/firebase_object_factory.spec.ts b/src/database-deprecated/firebase_object_factory.spec.ts index cf056d688..cc5f25120 100644 --- a/src/database-deprecated/firebase_object_factory.spec.ts +++ b/src/database-deprecated/firebase_object_factory.spec.ts @@ -1,3 +1,5 @@ + +import {filter} from 'rxjs/operators'; import { FirebaseApp as FBApp } from '@firebase/app-types'; import { Reference } from '@firebase/database-types'; import { Subscription } from 'rxjs'; @@ -132,8 +134,8 @@ describe('FirebaseObjectFactory', () => { }) .run(() => { // Creating a new observable so that the current zone is captured. - subscription = FirebaseObjectFactory(app.database().ref(`questions/${i}`)) - .filter(d => d.$value === 'in-the-zone') + subscription = FirebaseObjectFactory(app.database().ref(`questions/${i}`)).pipe( + filter(d => d.$value === 'in-the-zone')) .subscribe(data => { expect(Zone.current.name).toBe('newZone'); done(); diff --git a/src/database-deprecated/firebase_object_factory.ts b/src/database-deprecated/firebase_object_factory.ts index dc2ed304d..0c45e15b4 100644 --- a/src/database-deprecated/firebase_object_factory.ts +++ b/src/database-deprecated/firebase_object_factory.ts @@ -1,8 +1,9 @@ import { NgZone } from '@angular/core'; import { FirebaseObjectObservable } from './firebase_object_observable'; import { FirebaseZoneScheduler } from 'angularfire2'; -import { Observer } from 'rxjs/Observer'; -import { observeOn } from 'rxjs/operator/observeOn'; +import { Observer } from 'rxjs'; +import { observeOn } from 'rxjs/operators'; + import { DataSnapshot } from '@firebase/database-types'; import * as utils from './utils'; import { FirebaseObjectFactoryOpts, DatabaseReference } from './interfaces'; diff --git a/src/database-deprecated/firebase_object_observable.spec.ts b/src/database-deprecated/firebase_object_observable.spec.ts index cd33163ce..017e67783 100644 --- a/src/database-deprecated/firebase_object_observable.spec.ts +++ b/src/database-deprecated/firebase_object_observable.spec.ts @@ -2,8 +2,8 @@ import { TestBed, inject } from '@angular/core/testing'; import { FirebaseApp, FirebaseAppConfig, AngularFireModule } from 'angularfire2'; import { COMMON_CONFIG } from './test-config'; import { AngularFireDatabase, AngularFireDatabaseModule, FirebaseObjectObservable } from 'angularfire2/database-deprecated'; -import { Observer } from 'rxjs/Observer'; -import { map } from 'rxjs/operator/map'; +import { Observer } from 'rxjs'; + import { FirebaseApp as FBApp } from '@firebase/app-types'; import { Reference } from '@firebase/database-types'; diff --git a/src/database-deprecated/firebase_object_observable.ts b/src/database-deprecated/firebase_object_observable.ts index 267eda5af..cbfbe198f 100644 --- a/src/database-deprecated/firebase_object_observable.ts +++ b/src/database-deprecated/firebase_object_observable.ts @@ -1,7 +1,4 @@ -import { Observable } from 'rxjs/Observable'; -import { Operator } from 'rxjs/Operator'; -import { Subscriber } from 'rxjs/Subscriber'; -import { Subscription } from 'rxjs/Subscription'; +import { Observable , Operator , Subscriber , Subscription } from 'rxjs'; import { Reference } from '@firebase/database-types'; export class FirebaseObjectObservable extends Observable { diff --git a/src/database-deprecated/interfaces.ts b/src/database-deprecated/interfaces.ts index 4cc0fd306..ff803a42b 100644 --- a/src/database-deprecated/interfaces.ts +++ b/src/database-deprecated/interfaces.ts @@ -1,4 +1,4 @@ -import { Observable } from 'rxjs/Observable'; +import { Observable } from 'rxjs'; import { Reference, DataSnapshot, Query } from '@firebase/database-types'; export interface FirebaseOperationCases { diff --git a/src/database-deprecated/query_observable.spec.ts b/src/database-deprecated/query_observable.spec.ts index 81389852e..3d395891f 100644 --- a/src/database-deprecated/query_observable.spec.ts +++ b/src/database-deprecated/query_observable.spec.ts @@ -1,6 +1,4 @@ -import { Observable } from 'rxjs/Observable'; -import { Observer } from 'rxjs/Observer'; -import { Subject } from 'rxjs/Subject'; +import { Observable , Observer , Subject } from 'rxjs'; import { Query, ScalarQuery } from './interfaces'; import { getOrderObservables, observeQuery } from 'angularfire2/database-deprecated'; diff --git a/src/database-deprecated/query_observable.ts b/src/database-deprecated/query_observable.ts index 82dfc7ef9..b653ac67b 100644 --- a/src/database-deprecated/query_observable.ts +++ b/src/database-deprecated/query_observable.ts @@ -1,11 +1,7 @@ -import { Observable } from 'rxjs/Observable'; -import { of as observableOf } from 'rxjs/observable/of'; -import { Operator } from 'rxjs/Operator'; -import { Observer } from 'rxjs/Observer'; -import { combineLatest } from 'rxjs/operator/combineLatest'; -import { merge } from 'rxjs/operator/merge'; -import { map } from 'rxjs/operator/map'; -import { auditTime } from 'rxjs/operator/auditTime'; +import { Observable , of as observableOf , Operator , Observer, combineLatest } from 'rxjs'; +import { auditTime, merge, map } from 'rxjs/operators'; + + import { Query, ScalarQuery, OrderByOptions, OrderBySelection, LimitToOptions, LimitToSelection, Primitive } from './interfaces'; import { hasKey, isNil } from './utils'; diff --git a/src/database-deprecated/utils.ts b/src/database-deprecated/utils.ts index 0fdf1cae2..6be13c0cd 100644 --- a/src/database-deprecated/utils.ts +++ b/src/database-deprecated/utils.ts @@ -1,6 +1,5 @@ import { DataSnapshot, FirebaseDatabase } from '@firebase/database-types'; -import { Subscription } from 'rxjs/Subscription'; -import { Scheduler } from 'rxjs/Scheduler'; +import { Subscription , Scheduler } from 'rxjs'; import { queue } from 'rxjs/scheduler/queue'; import { AFUnwrappedDataSnapshot, PathReference, DatabaseReference } from './interfaces'; diff --git a/src/database/interfaces.ts b/src/database/interfaces.ts index cbe8bd4d2..08e1ef0b0 100644 --- a/src/database/interfaces.ts +++ b/src/database/interfaces.ts @@ -1,5 +1,5 @@ import { Reference, DataSnapshot, ThenableReference, Query } from '@firebase/database-types'; -import { Observable } from 'rxjs/Observable'; +import { Observable } from 'rxjs'; export type FirebaseOperation = string | Reference | DataSnapshot; diff --git a/src/database/list/audit-trail.spec.ts b/src/database/list/audit-trail.spec.ts index 1a753f31a..e8c3eda19 100644 --- a/src/database/list/audit-trail.spec.ts +++ b/src/database/list/audit-trail.spec.ts @@ -1,9 +1,11 @@ + +import {skip} from 'rxjs/operators'; import { Reference } from '@firebase/database-types'; import { FirebaseApp, FirebaseAppConfig, AngularFireModule } from 'angularfire2'; import { AngularFireDatabase, AngularFireDatabaseModule, auditTrail, ChildEvent } from 'angularfire2/database'; import { TestBed, inject } from '@angular/core/testing'; import { COMMON_CONFIG } from '../test-config'; -import 'rxjs/add/operator/skip'; + // generate random string to test fidelity of naming const rando = () => (Math.random() + 1).toString(36).substring(7); @@ -47,7 +49,7 @@ describe('auditTrail', () => { aref.set(batch); const changes = auditTrail(aref, events); return { - changes: changes.skip(skip), + changes: changes.pipe(skip(skip)), ref: aref }; } diff --git a/src/database/list/audit-trail.ts b/src/database/list/audit-trail.ts index 56b44dd50..5513745d6 100644 --- a/src/database/list/audit-trail.ts +++ b/src/database/list/audit-trail.ts @@ -1,21 +1,23 @@ + +import {skipWhile, withLatestFrom, scan, map} from 'rxjs/operators'; import { DatabaseQuery, ChildEvent, DatabaseSnapshot, AngularFireAction, SnapshotAction } from '../interfaces'; import { stateChanges } from './state-changes'; -import { Observable } from 'rxjs/Observable'; +import { Observable } from 'rxjs'; import { DataSnapshot } from '@firebase/database-types'; import { fromRef } from '../observable/fromRef'; import { AngularFireDatabase } from '../database'; -import 'rxjs/add/operator/skipWhile'; -import 'rxjs/add/operator/withLatestFrom'; -import 'rxjs/add/operator/map'; + + + export function createAuditTrail(query: DatabaseQuery, afDatabase: AngularFireDatabase) { return (events?: ChildEvent[]) => afDatabase.scheduler.keepUnstableUntilFirst(auditTrail(query, events)); } export function auditTrail(query: DatabaseQuery, events?: ChildEvent[]): Observable { - const auditTrail$ = stateChanges(query, events) - .scan((current, action) => [...current, action], []); + const auditTrail$ = stateChanges(query, events).pipe( + scan((current, action) => [...current, action], [])); return waitForLoaded(query, auditTrail$); } @@ -28,8 +30,8 @@ function loadedData(query: DatabaseQuery): Observable { // Create an observable of loaded values to retrieve the // known dataset. This will allow us to know what key to // emit the "whole" array at when listening for child events. - return fromRef(query, 'value') - .map(data => { + return fromRef(query, 'value').pipe( + map(data => { // Store the last key in the data set let lastKeyToLoad; // Loop through loaded dataset to find the last key @@ -38,27 +40,27 @@ function loadedData(query: DatabaseQuery): Observable { }); // return data set and the current last key loaded return { data, lastKeyToLoad }; - }); + })); } function waitForLoaded(query: DatabaseQuery, action$: Observable) { const loaded$ = loadedData(query); - return loaded$ - .withLatestFrom(action$) + return loaded$.pipe( + withLatestFrom(action$), // Get the latest values from the "loaded" and "child" datasets // We can use both datasets to form an array of the latest values. - .map(([loaded, actions]) => { + map(([loaded, actions]) => { // Store the last key in the data set let lastKeyToLoad = loaded.lastKeyToLoad; // Store all child keys loaded at this point const loadedKeys = actions.map(snap => snap.key); return { actions, lastKeyToLoad, loadedKeys } - }) + }), // This is the magical part, only emit when the last load key // in the dataset has been loaded by a child event. At this point // we can assume the dataset is "whole". - .skipWhile(meta => meta.loadedKeys.indexOf(meta.lastKeyToLoad) === -1) + skipWhile(meta => meta.loadedKeys.indexOf(meta.lastKeyToLoad) === -1), // Pluck off the meta data because the user only cares // to iterate through the snapshots - .map(meta => meta.actions); + map(meta => meta.actions),); } diff --git a/src/database/list/changes.spec.ts b/src/database/list/changes.spec.ts index f5c7426f7..59332f849 100644 --- a/src/database/list/changes.spec.ts +++ b/src/database/list/changes.spec.ts @@ -1,9 +1,11 @@ + +import {skip} from 'rxjs/operators'; import { Reference } from '@firebase/database-types'; import { FirebaseApp, FirebaseAppConfig, AngularFireModule } from 'angularfire2'; import { AngularFireDatabase, AngularFireDatabaseModule, listChanges } from 'angularfire2/database'; import { TestBed, inject } from '@angular/core/testing'; import { COMMON_CONFIG } from '../test-config'; -import 'rxjs/add/operator/skip'; + // generate random string to test fidelity of naming const rando = () => (Math.random() + 1).toString(36).substring(7); @@ -56,7 +58,7 @@ describe('listChanges', () => { it('should process a new child_added event', done => { const aref = ref(rando()); const obs = listChanges(aref, ['child_added']); - const sub = obs.skip(1).take(1).subscribe(changes => { + const sub = obs.pipe(skip(1)).take(1).subscribe(changes => { const data = changes.map(change => change.payload.val()); expect(data[3]).toEqual({ name: 'anotha one' }); }).add(done); @@ -79,7 +81,7 @@ describe('listChanges', () => { it('should stream in order events w/child_added', (done) => { const aref = ref(rando()); const obs = listChanges(aref.orderByChild('name'), ['child_added']); - const sub = obs.skip(1).take(1).subscribe(changes => { + const sub = obs.pipe(skip(1)).take(1).subscribe(changes => { const names = changes.map(change => change.payload.val().name); expect(names[0]).toEqual('anotha one'); expect(names[1]).toEqual('one'); @@ -93,7 +95,7 @@ describe('listChanges', () => { it('should stream events filtering', (done) => { const aref = ref(rando()); const obs = listChanges(aref.orderByChild('name').equalTo('zero'), ['child_added']); - obs.skip(1).take(1).subscribe(changes => { + obs.pipe(skip(1)).take(1).subscribe(changes => { const names = changes.map(change => change.payload.val().name); expect(names[0]).toEqual('zero'); expect(names[1]).toEqual('zero'); @@ -105,7 +107,7 @@ describe('listChanges', () => { it('should process a new child_removed event', done => { const aref = ref(rando()); const obs = listChanges(aref, ['child_added','child_removed']); - const sub = obs.skip(1).take(1).subscribe(changes => { + const sub = obs.pipe(skip(1)).take(1).subscribe(changes => { const data = changes.map(change => change.payload.val()); expect(data.length).toEqual(items.length - 1); }).add(done); @@ -118,7 +120,7 @@ describe('listChanges', () => { it('should process a new child_changed event', (done) => { const aref = ref(rando()); const obs = listChanges(aref, ['child_added','child_changed']) - const sub = obs.skip(1).take(1).subscribe(changes => { + const sub = obs.pipe(skip(1)).take(1).subscribe(changes => { const data = changes.map(change => change.payload.val()); expect(data[1].name).toEqual('lol'); }).add(done); @@ -131,7 +133,7 @@ describe('listChanges', () => { it('should process a new child_moved event', (done) => { const aref = ref(rando()); const obs = listChanges(aref, ['child_added','child_moved']) - const sub = obs.skip(1).take(1).subscribe(changes => { + const sub = obs.pipe(skip(1)).take(1).subscribe(changes => { const data = changes.map(change => change.payload.val()); // We moved the first item to the last item, so we check that // the new result is now the last result diff --git a/src/database/list/changes.ts b/src/database/list/changes.ts index a75c0676c..61d16468c 100644 --- a/src/database/list/changes.ts +++ b/src/database/list/changes.ts @@ -1,23 +1,26 @@ + +import {merge as observableMerge, of as observableOf, Observable } from 'rxjs'; + +import {scan, switchMap, distinctUntilChanged} from 'rxjs/operators'; import { fromRef } from '../observable/fromRef'; -import { Observable } from 'rxjs/Observable'; import { DatabaseQuery, ChildEvent, AngularFireAction, SnapshotAction } from '../interfaces'; import { isNil } from '../utils'; -import 'rxjs/add/operator/scan'; -import 'rxjs/add/observable/merge'; -import 'rxjs/add/observable/of'; -import 'rxjs/add/operator/switchMap'; -import 'rxjs/add/operator/filter'; -import 'rxjs/add/operator/delay'; -import 'rxjs/add/operator/distinctUntilChanged'; + + + + + + + export function listChanges(ref: DatabaseQuery, events: ChildEvent[]): Observable { - return fromRef(ref, 'value', 'once').switchMap(snapshotAction => { - const childEvent$ = [Observable.of(snapshotAction)]; + return fromRef(ref, 'value', 'once').pipe(switchMap(snapshotAction => { + const childEvent$ = [observableOf(snapshotAction)]; events.forEach(event => childEvent$.push(fromRef(ref, event))); - return Observable.merge(...childEvent$).scan(buildView, []) - }) - .distinctUntilChanged(); + return observableMerge(...childEvent$).pipe(scan(buildView, [])) + }), + distinctUntilChanged(),); } function positionFor(changes: SnapshotAction[], key) { diff --git a/src/database/list/create-reference.ts b/src/database/list/create-reference.ts index 878515a44..7e0c65a92 100644 --- a/src/database/list/create-reference.ts +++ b/src/database/list/create-reference.ts @@ -1,3 +1,5 @@ + +import {map} from 'rxjs/operators'; import { DatabaseQuery, AngularFireList, ChildEvent } from '../interfaces'; import { snapshotChanges } from './snapshot-changes'; import { createStateChanges } from './state-changes'; @@ -21,8 +23,8 @@ export function createListReference(query: DatabaseQuery, afDatabase: Angular auditTrail: createAuditTrail(query, afDatabase), valueChanges(events?: ChildEvent[]) { const snapshotChanges$ = snapshotChanges(query, events); - return afDatabase.scheduler.keepUnstableUntilFirst(snapshotChanges$) - .map(actions => actions.map(a => a.payload.val())); + return afDatabase.scheduler.keepUnstableUntilFirst(snapshotChanges$).pipe( + map(actions => actions.map(a => a.payload.val()))); } } } diff --git a/src/database/list/snapshot-changes.spec.ts b/src/database/list/snapshot-changes.spec.ts index 46fcbcc02..b343ac85d 100644 --- a/src/database/list/snapshot-changes.spec.ts +++ b/src/database/list/snapshot-changes.spec.ts @@ -1,10 +1,12 @@ + +import {skip} from 'rxjs/operators'; import { Reference } from '@firebase/database-types'; import { FirebaseApp, FirebaseAppConfig, AngularFireModule } from 'angularfire2'; import { AngularFireDatabase, AngularFireDatabaseModule, snapshotChanges, ChildEvent } from 'angularfire2/database'; import { TestBed, inject } from '@angular/core/testing'; import { COMMON_CONFIG } from '../test-config'; -import 'rxjs/add/operator/skip'; -import { BehaviorSubject } from 'rxjs/BehaviorSubject'; + +import { BehaviorSubject } from 'rxjs'; // generate random string to test fidelity of naming const rando = () => (Math.random() + 1).toString(36).substring(7); @@ -47,7 +49,7 @@ describe('snapshotChanges', () => { const aref = createRef(rando()); const snapChanges = snapshotChanges(aref, events); return { - snapChanges: snapChanges.skip(skip), + snapChanges: snapChanges.pipe(skip(skip)), ref: aref }; } diff --git a/src/database/list/snapshot-changes.ts b/src/database/list/snapshot-changes.ts index 8697e6589..31d58b32c 100644 --- a/src/database/list/snapshot-changes.ts +++ b/src/database/list/snapshot-changes.ts @@ -1,8 +1,8 @@ -import { Observable } from 'rxjs/Observable'; +import { Observable } from 'rxjs'; import { listChanges } from './changes'; import { DatabaseQuery, ChildEvent, SnapshotAction } from '../interfaces'; import { validateEventsArray } from './utils'; -import 'rxjs/add/operator/map'; + export function snapshotChanges(query: DatabaseQuery, events?: ChildEvent[]): Observable { events = validateEventsArray(events); diff --git a/src/database/list/state-changes.spec.ts b/src/database/list/state-changes.spec.ts index 76681ffdd..281a7b10b 100644 --- a/src/database/list/state-changes.spec.ts +++ b/src/database/list/state-changes.spec.ts @@ -1,9 +1,11 @@ + +import {skip} from 'rxjs/operators'; import { Reference } from '@firebase/database-types'; import { FirebaseApp, FirebaseAppConfig, AngularFireModule } from 'angularfire2'; import { AngularFireDatabase, AngularFireDatabaseModule, stateChanges, ChildEvent } from 'angularfire2/database'; import { TestBed, inject } from '@angular/core/testing'; import { COMMON_CONFIG } from '../test-config'; -import 'rxjs/add/operator/skip'; + // generate random string to test fidelity of naming const rando = () => (Math.random() + 1).toString(36).substring(7); @@ -47,7 +49,7 @@ describe('stateChanges', () => { aref.set(batch); const changes = stateChanges(aref, events); return { - changes: changes.skip(skip), + changes: changes.pipe(skip(skip)), ref: aref }; } diff --git a/src/database/list/state-changes.ts b/src/database/list/state-changes.ts index 555b856eb..9d9d38590 100644 --- a/src/database/list/state-changes.ts +++ b/src/database/list/state-changes.ts @@ -1,9 +1,10 @@ + +import {merge as observableMerge, Observable } from 'rxjs'; import { DatabaseQuery, ChildEvent, AngularFireAction, SnapshotAction } from '../interfaces'; import { fromRef } from '../observable/fromRef'; import { validateEventsArray } from './utils'; -import { Observable } from 'rxjs/Observable'; -import 'rxjs/add/observable/merge'; -import 'rxjs/add/operator/scan'; + + import { DataSnapshot } from '@firebase/database-types'; import { AngularFireDatabase } from '../database'; @@ -14,5 +15,5 @@ export function createStateChanges(query: DatabaseQuery, afDatabase: AngularFire export function stateChanges(query: DatabaseQuery, events?: ChildEvent[]) { events = validateEventsArray(events)!; const childEvent$ = events.map(event => fromRef(query, event)); - return Observable.merge(...childEvent$); + return observableMerge(...childEvent$); } diff --git a/src/database/object/create-reference.ts b/src/database/object/create-reference.ts index bc2f2fbd2..12ef8fd04 100644 --- a/src/database/object/create-reference.ts +++ b/src/database/object/create-reference.ts @@ -1,3 +1,5 @@ + +import {map} from 'rxjs/operators'; import { DatabaseQuery, AngularFireObject } from '../interfaces'; import { createObjectSnapshotChanges } from './snapshot-changes'; import { AngularFireDatabase } from '../database'; @@ -14,8 +16,8 @@ export function createObjectReference(query: DatabaseQuery, afDatabase: Angul remove() { return query.ref.remove() as Promise; }, valueChanges() { const snapshotChanges$ = createObjectSnapshotChanges(query)(); - return afDatabase.scheduler.keepUnstableUntilFirst(snapshotChanges$) - .map(action => action.payload.exists() ? action.payload.val() as T : null) + return afDatabase.scheduler.keepUnstableUntilFirst(snapshotChanges$).pipe( + map(action => action.payload.exists() ? action.payload.val() as T : null)) }, } } diff --git a/src/database/object/snapshot-changes.ts b/src/database/object/snapshot-changes.ts index 0dbb6550f..ed5a1ba83 100644 --- a/src/database/object/snapshot-changes.ts +++ b/src/database/object/snapshot-changes.ts @@ -1,4 +1,4 @@ -import { Observable } from 'rxjs/Observable'; +import { Observable } from 'rxjs'; import { fromRef } from '../observable/fromRef'; import { DatabaseQuery, AngularFireAction, SnapshotAction } from '../interfaces'; import { DataSnapshot } from '@firebase/database-types'; diff --git a/src/database/observable/fromRef.ts b/src/database/observable/fromRef.ts index a71335478..3a1765244 100644 --- a/src/database/observable/fromRef.ts +++ b/src/database/observable/fromRef.ts @@ -1,10 +1,12 @@ + +import {share, delay, map} from 'rxjs/operators'; import { DatabaseQuery, DatabaseSnapshot, ListenEvent, AngularFireAction } from '../interfaces'; -import { Observable } from 'rxjs/Observable'; -import { observeOn } from 'rxjs/operator/observeOn'; +import { Observable } from 'rxjs'; + import { FirebaseZoneScheduler } from 'angularfire2'; -import 'rxjs/add/operator/map'; -import 'rxjs/add/operator/delay'; -import 'rxjs/add/operator/share'; + + + interface SnapshotPrevKey { snapshot: DatabaseSnapshot; @@ -27,16 +29,16 @@ export function fromRef(ref: DatabaseQuery, event: ListenEvent, listenType = 'on } else { return { unsubscribe() { } }; } - }) - .map((payload: SnapshotPrevKey) => { + }).pipe( + map((payload: SnapshotPrevKey) => { const { snapshot, prevKey } = payload; let key: string | null = null; if (snapshot.exists()) { key = snapshot.key; } return { type: event, payload: snapshot, prevKey, key }; - }) + }), // Ensures subscribe on observable is async. This handles // a quirk in the SDK where on/once callbacks can happen // synchronously. - .delay(0) - .share(); + delay(0), + share(),); } diff --git a/src/database/utils.ts b/src/database/utils.ts index d0b9daf2a..90831b99f 100644 --- a/src/database/utils.ts +++ b/src/database/utils.ts @@ -1,5 +1,4 @@ -import { Subscription } from 'rxjs/Subscription'; -import { Scheduler } from 'rxjs/Scheduler'; +import { Subscription , Scheduler } from 'rxjs'; import { queue } from 'rxjs/scheduler/queue'; import { PathReference, DatabaseReference, FirebaseOperation, FirebaseOperationCases } from './interfaces'; import { FirebaseDatabase } from '@firebase/database-types'; diff --git a/src/firestore/collection/changes.ts b/src/firestore/collection/changes.ts index 3a41a43b6..0d0c21979 100644 --- a/src/firestore/collection/changes.ts +++ b/src/firestore/collection/changes.ts @@ -1,9 +1,11 @@ + +import {scan, map} from 'rxjs/operators'; import { fromCollectionRef } from '../observable/fromRef'; import { Query, DocumentChangeType, DocumentChange } from '@firebase/firestore-types'; -import { Observable } from 'rxjs/Observable'; -import 'rxjs/add/operator/map'; -import 'rxjs/add/operator/filter'; -import 'rxjs/add/operator/scan'; +import { Observable } from 'rxjs'; + + + import { DocumentChangeAction, Action } from '../interfaces'; @@ -13,10 +15,10 @@ import { DocumentChangeAction, Action } from '../interfaces'; * @param query */ export function docChanges(query: Query): Observable { - return fromCollectionRef(query) - .map(action => + return fromCollectionRef(query).pipe( + map(action => action.payload.docChanges - .map(change => ({ type: change.type, payload: change }))); + .map(change => ({ type: change.type, payload: change })))); } /** @@ -24,10 +26,10 @@ export function docChanges(query: Query): Observable { * @param query */ export function sortedChanges(query: Query, events: DocumentChangeType[]): Observable { - return fromCollectionRef(query) - .map(changes => changes.payload.docChanges) - .scan((current, changes) => combineChanges(current, changes, events), []) - .map(changes => changes.map(c => ({ type: c.type, payload: c }))); + return fromCollectionRef(query).pipe( + map(changes => changes.payload.docChanges), + scan((current, changes) => combineChanges(current, changes, events), []), + map(changes => changes.map(c => ({ type: c.type, payload: c }))),); } /** diff --git a/src/firestore/collection/collection.spec.ts b/src/firestore/collection/collection.spec.ts index 70e8dd3d9..0b6740e57 100644 --- a/src/firestore/collection/collection.spec.ts +++ b/src/firestore/collection/collection.spec.ts @@ -1,3 +1,5 @@ + +import {skip} from 'rxjs/operators'; import { FirebaseApp, FirebaseAppConfig, AngularFireModule } from 'angularfire2'; import { AngularFirestore } from '../firestore'; import { AngularFirestoreModule } from '../firestore.module'; @@ -6,11 +8,8 @@ import { AngularFirestoreCollection } from './collection'; import { QueryFn } from '../interfaces'; import { FirebaseApp as FBApp } from '@firebase/app-types'; -import { Observable } from 'rxjs/Observable'; -import { BehaviorSubject } from 'rxjs/BehaviorSubject'; -import { of } from 'rxjs/observable/of'; -import { Subscription } from 'rxjs/Subscription'; -import 'rxjs/add/operator/skip'; +import { Observable , BehaviorSubject , of , Subscription } from 'rxjs'; + import { TestBed, inject } from '@angular/core/testing'; import { COMMON_CONFIG } from '../test-config'; @@ -214,7 +213,7 @@ describe('AngularFirestoreCollection', () => { const ITEMS = 10; const { randomCollectionName, ref, stocks, names } = await collectionHarness(afs, ITEMS); - const sub = stocks.snapshotChanges(['modified']).skip(1).subscribe(data => { + const sub = stocks.snapshotChanges(['modified']).pipe(skip(1)).subscribe(data => { sub.unsubscribe(); const change = data.filter(x => x.payload.doc.id === names[0])[0]; expect(data.length).toEqual(1); @@ -231,7 +230,7 @@ describe('AngularFirestoreCollection', () => { let { randomCollectionName, ref, stocks, names } = await collectionHarness(afs, ITEMS); const nextId = ref.doc('a').id; - const sub = stocks.snapshotChanges(['added']).skip(1).subscribe(data => { + const sub = stocks.snapshotChanges(['added']).pipe(skip(1)).subscribe(data => { sub.unsubscribe(); const change = data.filter(x => x.payload.doc.id === nextId)[0]; expect(data.length).toEqual(ITEMS + 1); @@ -252,7 +251,7 @@ describe('AngularFirestoreCollection', () => { const nextId = ref.doc('a').id; let count = 0; - const sub = stocks.snapshotChanges(['added', 'modified']).skip(1).take(2).subscribe(data => { + const sub = stocks.snapshotChanges(['added', 'modified']).pipe(skip(1)).take(2).subscribe(data => { count += 1; if (count == 1) { const change = data.filter(x => x.payload.doc.id === nextId)[0]; @@ -279,7 +278,7 @@ describe('AngularFirestoreCollection', () => { const ITEMS = 10; const { randomCollectionName, ref, stocks, names } = await collectionHarness(afs, ITEMS); - const sub = stocks.snapshotChanges(['added', 'removed']).skip(1).subscribe(data => { + const sub = stocks.snapshotChanges(['added', 'removed']).pipe(skip(1)).subscribe(data => { sub.unsubscribe(); const change = data.filter(x => x.payload.doc.id === names[0]); expect(data.length).toEqual(ITEMS - 1); @@ -383,7 +382,7 @@ describe('AngularFirestoreCollection', () => { let count = 0; let { randomCollectionName, ref, stocks, names } = await collectionHarness(afs, ITEMS); - const sub = stocks.stateChanges(['added']).skip(1).subscribe(data => { + const sub = stocks.stateChanges(['added']).pipe(skip(1)).subscribe(data => { sub.unsubscribe(); expect(data.length).toEqual(1); expect(data[0].payload.doc.data().price).toEqual(2); diff --git a/src/firestore/collection/collection.ts b/src/firestore/collection/collection.ts index cba07ee7e..1cfe0ee8e 100644 --- a/src/firestore/collection/collection.ts +++ b/src/firestore/collection/collection.ts @@ -1,9 +1,10 @@ + +import {filter, map, scan} from 'rxjs/operators'; import { DocumentChangeType, CollectionReference, Query, DocumentReference } from '@firebase/firestore-types'; -import { Observable } from 'rxjs/Observable'; -import { Subscriber } from 'rxjs/Subscriber'; +import { Observable , Subscriber } from 'rxjs'; import { fromCollectionRef } from '../observable/fromRef'; -import 'rxjs/add/operator/map'; -import 'rxjs/add/operator/filter'; + + import { Injectable } from '@angular/core'; @@ -12,9 +13,9 @@ import { docChanges, sortedChanges } from './changes'; import { AngularFirestoreDocument } from '../document/document'; import { AngularFirestore } from '../firestore'; -import { observeOn } from 'rxjs/operator/observeOn'; -import 'rxjs/add/observable/of'; + + export function validateEventsArray(events?: DocumentChangeType[]) { if(!events || events!.length === 0) { @@ -72,9 +73,9 @@ export class AngularFirestoreCollection { if(!events || events.length === 0) { return docChanges(this.query); } - return this.afs.scheduler.keepUnstableUntilFirst(docChanges(this.query) - .map(actions => actions.filter(change => events.indexOf(change.type) > -1)) - .filter(changes => changes.length > 0)); + return this.afs.scheduler.keepUnstableUntilFirst(docChanges(this.query).pipe( + map(actions => actions.filter(change => events.indexOf(change.type) > -1)), + filter(changes => changes.length > 0),)); } /** @@ -83,7 +84,7 @@ export class AngularFirestoreCollection { * @param events */ auditTrail(events?: DocumentChangeType[]): Observable { - return this.stateChanges(events).scan((current, action) => [...current, ...action], []); + return this.stateChanges(events).pipe(scan((current, action) => [...current, ...action], [])); } /** @@ -104,8 +105,8 @@ export class AngularFirestoreCollection { valueChanges(): Observable { const fromCollectionRef$ = fromCollectionRef(this.query); const scheduled$ = this.afs.scheduler.runOutsideAngular(fromCollectionRef$); - return this.afs.scheduler.keepUnstableUntilFirst(scheduled$) - .map(actions => actions.payload.docs.map(a => a.data()) as T[]); + return this.afs.scheduler.keepUnstableUntilFirst(scheduled$).pipe( + map(actions => actions.payload.docs.map(a => a.data()) as T[])); } /** diff --git a/src/firestore/document/document.spec.ts b/src/firestore/document/document.spec.ts index 878eedef5..f31d94c24 100644 --- a/src/firestore/document/document.spec.ts +++ b/src/firestore/document/document.spec.ts @@ -4,8 +4,7 @@ import { AngularFirestoreModule } from '../firestore.module'; import { AngularFirestoreDocument } from '../document/document'; import { FirebaseApp as FBApp } from '@firebase/app-types'; -import { Observable } from 'rxjs/Observable'; -import { Subscription } from 'rxjs/Subscription'; +import { Observable , Subscription } from 'rxjs'; import { TestBed, inject } from '@angular/core/testing'; import { COMMON_CONFIG } from '../test-config'; diff --git a/src/firestore/document/document.ts b/src/firestore/document/document.ts index 82f5f8614..3716d2cd3 100644 --- a/src/firestore/document/document.ts +++ b/src/firestore/document/document.ts @@ -1,9 +1,10 @@ + +import {map} from 'rxjs/operators'; import { DocumentReference, SetOptions, DocumentSnapshot } from '@firebase/firestore-types'; -import { Observable } from 'rxjs/Observable'; -import { Subscriber } from 'rxjs/Subscriber'; +import { Observable , Subscriber } from 'rxjs'; import { QueryFn, AssociatedReference, Action } from '../interfaces'; import { fromDocRef } from '../observable/fromRef'; -import 'rxjs/add/operator/map'; + import { Injectable } from '@angular/core'; @@ -90,8 +91,8 @@ export class AngularFirestoreDocument { * Listen to unwrapped snapshot updates from the document. */ valueChanges(): Observable { - return this.snapshotChanges().map(action => { + return this.snapshotChanges().pipe(map(action => { return action.payload.exists ? action.payload.data() as T : null; - }); + })); } } diff --git a/src/firestore/firestore.spec.ts b/src/firestore/firestore.spec.ts index 6964a6f71..f4d058d06 100644 --- a/src/firestore/firestore.spec.ts +++ b/src/firestore/firestore.spec.ts @@ -4,8 +4,7 @@ import { AngularFirestoreModule } from './firestore.module'; import { AngularFirestoreDocument } from './document/document'; import { AngularFirestoreCollection } from './collection/collection'; -import { Observable } from 'rxjs/Observable'; -import { Subscription } from 'rxjs/Subscription'; +import { Observable , Subscription } from 'rxjs'; import { TestBed, inject } from '@angular/core/testing'; import { COMMON_CONFIG } from './test-config'; diff --git a/src/firestore/firestore.ts b/src/firestore/firestore.ts index b89e9eace..b40aed547 100644 --- a/src/firestore/firestore.ts +++ b/src/firestore/firestore.ts @@ -1,12 +1,11 @@ + +import {catchError} from 'rxjs/operators'; import { InjectionToken, NgZone } from '@angular/core'; import { FirebaseFirestore, CollectionReference, DocumentReference } from '@firebase/firestore-types'; -import { Observable } from 'rxjs/Observable'; -import { Subscriber } from 'rxjs/Subscriber'; -import { from } from 'rxjs/observable/from'; -import { of } from 'rxjs/observable/of'; -import 'rxjs/add/operator/map'; -import 'rxjs/add/operator/catch'; +import { Observable , Subscriber , from , of } from 'rxjs'; + + import { FirebaseOptions } from '@firebase/app-types'; import { Injectable, Inject, Optional } from '@angular/core'; @@ -123,8 +122,8 @@ export class AngularFirestore { this.persistenceEnabled$ = zone.runOutsideAngular(() => shouldEnablePersistence ? from(this.firestore.enablePersistence().then(() => true, () => false)) : of(false) - ) - .catch(() => of(false)); // https://github.com/firebase/firebase-js-sdk/issues/608 + ).pipe( + catchError(() => of(false))); // https://github.com/firebase/firebase-js-sdk/issues/608 } /** diff --git a/src/firestore/interfaces.ts b/src/firestore/interfaces.ts index 6e331516c..8b6753c26 100644 --- a/src/firestore/interfaces.ts +++ b/src/firestore/interfaces.ts @@ -1,4 +1,4 @@ -import { Subscriber } from 'rxjs/Subscriber'; +import { Subscriber } from 'rxjs'; import { DocumentChangeType, DocumentChange, CollectionReference, Query } from '@firebase/firestore-types'; export interface DocumentChangeAction { diff --git a/src/firestore/observable/fromRef.ts b/src/firestore/observable/fromRef.ts index 8815e86ac..b5b0ceca3 100644 --- a/src/firestore/observable/fromRef.ts +++ b/src/firestore/observable/fromRef.ts @@ -1,10 +1,11 @@ + +import {map, share} from 'rxjs/operators'; import { DocumentReference, Query, QuerySnapshot, DocumentSnapshot } from '@firebase/firestore-types'; -import { Observable } from 'rxjs/Observable'; -import { Subscriber } from 'rxjs/Subscriber'; +import { Observable , Subscriber } from 'rxjs'; import { Action, Reference } from '../interfaces'; -import 'rxjs/add/operator/map'; -import 'rxjs/add/operator/share'; + + function _fromRef(ref: Reference): Observable { return new Observable(subscriber => { @@ -14,14 +15,14 @@ function _fromRef(ref: Reference): Observable { } export function fromRef(ref: DocumentReference | Query) { - return _fromRef(ref).share(); + return _fromRef(ref).pipe(share()); } export function fromDocRef(ref: DocumentReference): Observable>{ - return fromRef(ref) - .map(payload => ({ payload, type: 'value' })); + return fromRef(ref).pipe( + map(payload => ({ payload, type: 'value' }))); } export function fromCollectionRef(ref: Query): Observable> { - return fromRef(ref).map(payload => ({ payload, type: 'query' })) + return fromRef(ref).pipe(map(payload => ({ payload, type: 'query' }))) } diff --git a/src/storage/observable/fromTask.ts b/src/storage/observable/fromTask.ts index 7c66161fe..d6daef310 100644 --- a/src/storage/observable/fromTask.ts +++ b/src/storage/observable/fromTask.ts @@ -1,5 +1,5 @@ import { UploadTask, UploadTaskSnapshot } from '@firebase/storage-types'; -import { Observable } from 'rxjs/Observable'; +import { Observable } from 'rxjs'; export function fromTask(task: UploadTask) { return new Observable(subscriber => { diff --git a/src/storage/ref.ts b/src/storage/ref.ts index 16a02df9c..825e06a74 100644 --- a/src/storage/ref.ts +++ b/src/storage/ref.ts @@ -1,7 +1,6 @@ import { SettableMetadata, UploadMetadata, Reference, StringFormat } from '@firebase/storage-types'; import { createUploadTask, AngularFireUploadTask } from './task'; -import { Observable } from 'rxjs/Observable'; -import { from } from 'rxjs/observable/from'; +import { Observable , from } from 'rxjs'; import { FirebaseZoneScheduler } from 'angularfire2'; export interface AngularFireStorageReference { diff --git a/src/storage/storage.spec.ts b/src/storage/storage.spec.ts index 10da652e9..2cf9772a4 100644 --- a/src/storage/storage.spec.ts +++ b/src/storage/storage.spec.ts @@ -1,5 +1,4 @@ -import { Observable } from 'rxjs/Observable' -import { forkJoin } from 'rxjs/observable/forkJoin'; +import { Observable , forkJoin } from 'rxjs' import { TestBed, inject } from '@angular/core/testing'; import { FirebaseApp, FirebaseAppConfig, AngularFireModule, FirebaseAppName } from 'angularfire2'; import { AngularFireStorageModule, AngularFireStorage, AngularFireUploadTask, StorageBucket } from 'angularfire2/storage'; diff --git a/src/storage/storage.ts b/src/storage/storage.ts index d482870e0..2daff79c8 100644 --- a/src/storage/storage.ts +++ b/src/storage/storage.ts @@ -2,7 +2,7 @@ import { Injectable, Inject, Optional, InjectionToken, NgZone } from '@angular/c import { FirebaseStorage, UploadMetadata } from '@firebase/storage-types'; import { createStorageRef, AngularFireStorageReference } from './ref'; import { createUploadTask, AngularFireUploadTask } from './task'; -import { Observable } from 'rxjs/Observable'; +import { Observable } from 'rxjs'; import { FirebaseAppConfig, FirebaseAppName, FirebaseZoneScheduler, _firebaseAppFactory } from 'angularfire2'; import { FirebaseOptions } from '@firebase/app-types'; diff --git a/src/storage/task.ts b/src/storage/task.ts index 766255e40..900f09634 100644 --- a/src/storage/task.ts +++ b/src/storage/task.ts @@ -1,8 +1,7 @@ import { UploadTaskSnapshot, UploadTask } from '@firebase/storage-types'; import { fromTask } from './observable/fromTask'; -import { Observable } from 'rxjs/Observable'; +import { Observable , from } from 'rxjs'; import { map, filter } from 'rxjs/operators'; -import { from } from 'rxjs/observable/from'; export interface AngularFireUploadTask { task: UploadTask, diff --git a/tools/build.js b/tools/build.js index 92f01a0fd..971c526a5 100644 --- a/tools/build.js +++ b/tools/build.js @@ -1,6 +1,7 @@ const { rollup } = require('rollup'); const { spawn } = require('child_process'); -const { Observable } = require('rxjs'); +const { Observable, from, forkJoin } = require('rxjs'); +const { switchMap, switchMapTo, tap } = require('rxjs/operators'); const { copy, readFileSync, writeFile, statSync } = require('fs-extra'); const { prettySize } = require('pretty-size'); const gzipSize = require('gzip-size'); @@ -9,50 +10,8 @@ const pkg = require(`${process.cwd()}/package.json`); // Rollup globals const GLOBALS = { - 'rxjs': 'Rx', - 'rxjs/Observable': 'Rx', - 'rxjs/Subject': 'Rx', - 'rxjs/Observer': 'Rx', - 'rxjs/Subscription': 'Rx', - 'rxjs/BehaviorSubject': 'Rx', - 'rxjs/observable/merge': 'Rx.Observable', - 'rxjs/operator/share': 'Rx.Observable.prototype', - 'rxjs/operator/observeOn': 'Rx.Observable.prototype', - 'rxjs/observable/of': 'Rx.Observable.prototype', - 'rxjs/operator/combineLatest': 'Rx.Observable.prototype', - 'rxjs/operator/merge': 'Rx.Observable.prototype', - 'rxjs/operator/map': 'Rx.Observable.prototype', - 'rxjs/operators': 'Rx.operators', - 'rxjs/observable/of': 'Rx.Observable', - 'rxjs/observable/forkJoin': 'Rx.Observable', - 'rxjs/operator/auditTime': 'Rx.Observable.prototype', - 'rxjs/operator/switchMap': 'Rx.Observable.prototype', - 'rxjs/operator/do': 'Rx.Observable.prototype', - 'rxjs/operator/skip': 'Rx.Observable.prototype', - 'rxjs/operator/take': 'Rx.Observable.prototype', - 'rxjs/operator/toArray': 'Rx.Observable.prototype', - 'rxjs/operator/toPromise': 'Rx.Observable.prototype', - 'rxjs/add/operator/catch': 'Rx.Observable.prototype', - 'rxjs/add/operator/first': 'Rx.Observable.prototype', - 'rxjs/add/operator/map': 'Rx.Observable.prototype', - 'rxjs/add/operator/scan': 'Rx.Observable.prototype', - 'rxjs/add/operator/skip': 'Rx.Observable.prototype', - 'rxjs/add/operator/do': 'Rx.Observable.prototype', - 'rxjs/add/operator/distinctUntilChanged': 'Rx.Observable.prototype', - 'rxjs/add/operator/filter': 'Rx.Observable.prototype', - 'rxjs/add/operator/skipUntil': 'Rx.Observable.prototype', - 'rxjs/add/operator/skipWhile': 'Rx.Observable.prototype', - 'rxjs/add/operator/withLatestFrom': 'Rx.Observable.prototype', - 'rxjs/add/operator/switchMap': 'Rx.Observable.prototype', - 'rxjs/add/observable/merge': 'Rx.Observable', - 'rxjs/add/observable/of': 'Rx.Observable.prototype', - 'rxjs/add/observable/fromPromise': 'Rx.Observable.prototype', - 'rxjs/add/operator/delay': 'Rx.Observable', - 'rxjs/add/operator/debounce': 'Rx.Observable', - 'rxjs/add/operator/share': 'Rx.Observable', - 'rxjs/observable/fromEvent': 'Rx.Observable', - 'rxjs/observable/from': 'Rx.Observable', - 'rxjs/operator': 'Rx.Observable.prototype', + 'rxjs': 'rxjs', + 'rxjs/operators': 'rxjs', '@angular/core': 'ng.core', '@angular/compiler': 'ng.compiler', '@angular/platform-browser': 'ng.platformBrowser', @@ -68,7 +27,7 @@ const GLOBALS = { '@firebase/storage': 'firebase', '@firebase/util': 'firebase', '@firebase/webchannel-wrapper': 'firebase', - 'rxjs/scheduler/queue': 'Rx.Scheduler', + 'rxjs/scheduler/queue': 'rxjs.Scheduler', '@angular/core/testing': 'ng.core.testing', 'angularfire2': 'angularfire2', 'angularfire2/auth': 'angularfire2.auth', @@ -180,7 +139,7 @@ function generateBundle(entry, { dest, globals, moduleName }) { function createFirebaseBundles(featurePaths, globals) { return Object.keys(featurePaths).map(feature => { - return generateBundle(featurePaths[feature], { + return generateBundle(featurePaths[feature], { dest: `${process.cwd()}/dist/bundles/${feature}.js`, globals, moduleName: `firebase.${feature}` @@ -323,10 +282,10 @@ function buildModule(name, globals) { const es2015$ = spawnObservable(NGC, TSC_ARGS(name)); const esm$ = spawnObservable(NGC, TSC_ARGS(name, 'esm')); const test$ = spawnObservable(TSC, TSC_ARGS(name, 'test')); - return Observable - .forkJoin(es2015$, esm$, test$) - .switchMap(() => Observable.from(createUmd(name, globals))) - .switchMap(() => replaceVersionsObservable(name, VERSIONS)); + return forkJoin(es2015$, esm$, test$).pipe( + switchMap(() => from(createUmd(name, globals))), + switchMap(() => replaceVersionsObservable(name, VERSIONS)) + ); } /** @@ -340,26 +299,25 @@ function buildModules(globals) { const firestore$ = buildModule('firestore', globals); const storage$ = buildModule('storage', globals); const dbdep$ = buildModule('database-deprecated', globals); - return Observable - .forkJoin(core$, Observable.from(copyRootTest())) - .switchMapTo(auth$) - .switchMapTo(db$) - .switchMapTo(firestore$) - .switchMapTo(storage$) - .switchMapTo(dbdep$); + return forkJoin(core$, from(copyRootTest())).pipe( + switchMapTo(auth$), + switchMapTo(db$), + switchMapTo(firestore$), + switchMapTo(storage$), + switchMapTo(dbdep$) + ); } function buildLibrary(globals) { const modules$ = buildModules(globals); - return Observable - .forkJoin(modules$) - .switchMap(() => Observable.from(createTestUmd(globals))) - .switchMap(() => Observable.from(copyNpmIgnore())) - .switchMap(() => Observable.from(copyReadme())) - .switchMap(() => Observable.from(copyDocs())) - .switchMap(() => Observable.from(copyNodeFixes())) - .switchMap(() => replaceVersionsObservable('firebase-node', VERSIONS)) - .do(() => { + return forkJoin(modules$).pipe( + switchMap(() => from(createTestUmd(globals))), + switchMap(() => from(copyNpmIgnore())), + switchMap(() => from(copyReadme())), + switchMap(() => from(copyDocs())), + switchMap(() => from(copyNodeFixes())), + switchMap(() => replaceVersionsObservable('firebase-node', VERSIONS)), + tap(() => { const coreStats = measure('core'); const authStats = measure('auth'); const dbStats = measure('database'); @@ -375,7 +333,7 @@ function buildLibrary(globals) { database-deprecated.umd.js - ${dbdepStats.size}, ${dbdepStats.gzip} `); verifyVersions(); - }); + })); } buildLibrary(GLOBALS).subscribe( diff --git a/yarn.lock b/yarn.lock index b656034f7..babfd2ac3 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,51 +2,51 @@ # yarn lockfile v1 -"@angular/common@^5.0.0": - version "5.2.9" - resolved "https://registry.yarnpkg.com/@angular/common/-/common-5.2.9.tgz#beb25d4434498abae56bd8dc2c01ade3f6c45e81" +"@angular/common@^6.0.0-rc.5": + version "6.0.0-rc.5" + resolved "https://registry.yarnpkg.com/@angular/common/-/common-6.0.0-rc.5.tgz#eb31379f187b60ea9724595bc29dff7439c0efcc" dependencies: - tslib "^1.7.1" + tslib "^1.9.0" -"@angular/compiler-cli@^5.0.0": - version "5.2.9" - resolved "https://registry.yarnpkg.com/@angular/compiler-cli/-/compiler-cli-5.2.9.tgz#36a069937d50a8a294eda233b5b1b2c71139751f" +"@angular/compiler-cli@^6.0.0-rc.5": + version "6.0.0-rc.5" + resolved "https://registry.yarnpkg.com/@angular/compiler-cli/-/compiler-cli-6.0.0-rc.5.tgz#1ecb3702532def6e15051253ecd7e98467cf5842" dependencies: chokidar "^1.4.2" minimist "^1.2.0" reflect-metadata "^0.1.2" tsickle "^0.27.2" -"@angular/compiler@^5.0.0": - version "5.2.9" - resolved "https://registry.yarnpkg.com/@angular/compiler/-/compiler-5.2.9.tgz#1d03bc1e8b38c259bc58114d691c2140d244f8f5" +"@angular/compiler@^6.0.0-rc.5": + version "6.0.0-rc.5" + resolved "https://registry.yarnpkg.com/@angular/compiler/-/compiler-6.0.0-rc.5.tgz#6d163ff459c2aa3134efd3d2f187cff08a7aeabf" dependencies: - tslib "^1.7.1" + tslib "^1.9.0" -"@angular/core@^5.0.0": - version "5.2.9" - resolved "https://registry.yarnpkg.com/@angular/core/-/core-5.2.9.tgz#3daf13ef9aa754b9954ed21da3eb322e8b20f667" +"@angular/core@^6.0.0-rc.5": + version "6.0.0-rc.5" + resolved "https://registry.yarnpkg.com/@angular/core/-/core-6.0.0-rc.5.tgz#33b1a6b4d0daaf1ec034fe2404a6009607f00cbd" dependencies: - tslib "^1.7.1" + tslib "^1.9.0" -"@angular/platform-browser-dynamic@^5.0.0": - version "5.2.9" - resolved "https://registry.yarnpkg.com/@angular/platform-browser-dynamic/-/platform-browser-dynamic-5.2.9.tgz#86075b7bb694861f722ceda29aae186b045c6b7d" +"@angular/platform-browser-dynamic@^6.0.0-rc.5": + version "6.0.0-rc.5" + resolved "https://registry.yarnpkg.com/@angular/platform-browser-dynamic/-/platform-browser-dynamic-6.0.0-rc.5.tgz#2f7fb42b10f2fd769d209dfed6b50b89590851d8" dependencies: - tslib "^1.7.1" + tslib "^1.9.0" -"@angular/platform-browser@^5.0.0": - version "5.2.9" - resolved "https://registry.yarnpkg.com/@angular/platform-browser/-/platform-browser-5.2.9.tgz#9ee76327b1b3affad68ffa839058661b7704bc2c" +"@angular/platform-browser@^6.0.0-rc.5": + version "6.0.0-rc.5" + resolved "https://registry.yarnpkg.com/@angular/platform-browser/-/platform-browser-6.0.0-rc.5.tgz#492bc951339ff170eb057871626476b34e65227f" dependencies: - tslib "^1.7.1" + tslib "^1.9.0" -"@angular/platform-server@^5.0.0": - version "5.2.9" - resolved "https://registry.yarnpkg.com/@angular/platform-server/-/platform-server-5.2.9.tgz#9905cc152242472da2557bf9fec73685449b92c4" +"@angular/platform-server@^6.0.0-rc.5": + version "6.0.0-rc.5" + resolved "https://registry.yarnpkg.com/@angular/platform-server/-/platform-server-6.0.0-rc.5.tgz#b8910231cc4c9891a9e2ce3ba35ebb7db84c9969" dependencies: - domino "^1.0.29" - tslib "^1.7.1" + domino "^2.0.1" + tslib "^1.9.0" xhr2 "^0.1.4" "@firebase/app-types@0.1.2", "@firebase/app-types@^0.1.1": @@ -1860,9 +1860,9 @@ domain-browser@~1.1.0: version "1.1.7" resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.1.7.tgz#867aa4b093faa05f1de08c06f4d7b21fdf8698bc" -domino@^1.0.29: - version "1.0.30" - resolved "https://registry.yarnpkg.com/domino/-/domino-1.0.30.tgz#54a4154ecae968616680f8feba3cedff355c71f4" +domino@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/domino/-/domino-2.0.2.tgz#fa2da6ace8381cf64089079470ee33c53901010f" dot-prop@^3.0.0: version "3.0.0" @@ -5395,11 +5395,15 @@ rx@2.3.24: version "2.3.24" resolved "https://registry.yarnpkg.com/rx/-/rx-2.3.24.tgz#14f950a4217d7e35daa71bbcbe58eff68ea4b2b7" -rxjs@^5.5.4: - version "5.5.8" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-5.5.8.tgz#b2b0809a57614ad6254c03d7446dea0d83ca3791" +rxjs-compat@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/rxjs-compat/-/rxjs-compat-6.0.0.tgz#2496403f74042d07899faeeac0bd703e4bce6710" + +rxjs@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.0.0.tgz#d647e029b5854617f994c82fe57a4c6747b352da" dependencies: - symbol-observable "1.0.1" + tslib "^1.9.0" safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@~5.1.0, safe-buffer@~5.1.1: version "5.1.1" @@ -5932,10 +5936,6 @@ supports-color@^5.3.0: dependencies: has-flag "^3.0.0" -symbol-observable@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.0.1.tgz#8340fc4702c3122df5d22288f88283f513d3fdd4" - syntax-error@^1.1.1: version "1.4.0" resolved "https://registry.yarnpkg.com/syntax-error/-/syntax-error-1.4.0.tgz#2d9d4ff5c064acb711594a3e3b95054ad51d907c" @@ -6168,7 +6168,7 @@ tsickle@^0.27.2: source-map "^0.6.0" source-map-support "^0.5.0" -tslib@^1.7.1, tslib@^1.9.0: +tslib@^1.9.0: version "1.9.0" resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.9.0.tgz#e37a86fda8cbbaf23a057f473c9f4dc64e5fc2e8" @@ -6215,9 +6215,9 @@ typescript@1.8.10: version "1.8.10" resolved "https://registry.yarnpkg.com/typescript/-/typescript-1.8.10.tgz#b475d6e0dff0bf50f296e5ca6ef9fbb5c7320f1e" -"typescript@>=2.4.2 <2.5": - version "2.4.2" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-2.4.2.tgz#f8395f85d459276067c988aa41837a8f82870844" +"typescript@>=2.7.2 <2.8.0": + version "2.7.2" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-2.7.2.tgz#2d615a1ef4aee4f574425cdff7026edf81919836" uglify-js@^2.6: version "2.8.29" @@ -6620,6 +6620,6 @@ yeast@0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/yeast/-/yeast-0.1.2.tgz#008e06d8094320c372dbc2f8ed76a0ca6c8ac419" -zone.js@^0.8.0: - version "0.8.21" - resolved "https://registry.yarnpkg.com/zone.js/-/zone.js-0.8.21.tgz#8c0e8e361bd326ee1474e4f96e17d5ef99bec4b2" +zone.js@~0.8.26: + version "0.8.26" + resolved "https://registry.yarnpkg.com/zone.js/-/zone.js-0.8.26.tgz#7bdd72f7668c5a7ad6b118148b4ea39c59d08d2d"