Skip to content

Commit 4761ba1

Browse files
authored
feat(database): Add Database
1 parent ac07108 commit 4761ba1

File tree

10 files changed

+29
-33
lines changed

10 files changed

+29
-33
lines changed

src/database/database.spec.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ import { AngularFireDatabase, AngularFireDatabaseModule, URL } from '@angular/fi
33
import { TestBed } from '@angular/core/testing';
44
import { COMMON_CONFIG } from '../test-config';
55
import { NgZone } from '@angular/core';
6-
import 'firebase/database';
76
import { rando } from '../firestore/utils.spec';
87

98
describe('AngularFireDatabase', () => {

src/database/database.ts

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -15,22 +15,22 @@ import {
1515
import { Observable } from 'rxjs';
1616
import 'firebase/database';
1717
import { USE_EMULATOR as USE_AUTH_EMULATOR } from '@angular/fire/auth';
18-
import firebase from 'firebase/app';
18+
import { Database } from 'firebase/database';
1919
import { ɵfetchInstance, ɵlogAuthEmulatorError } from '@angular/fire';
2020

2121
export const URL = new InjectionToken<string>('angularfire2.realtimeDatabaseURL');
2222

2323
// SEMVER(7): use Parameters to detirmine the useEmulator arguments
24-
// TODO(jamesdaniels): don't hardcode, but having tyepscript issues with firebase.database.Database
25-
// type UseEmulatorArguments = Parameters<typeof firebase.database.Database.prototype.useEmulator>;
24+
// TODO(jamesdaniels): don't hardcode, but having tyepscript issues with Database
25+
// type UseEmulatorArguments = Parameters<typeof Database.prototype.useEmulator>;
2626
type UseEmulatorArguments = [string, number];
2727
export const USE_EMULATOR = new InjectionToken<UseEmulatorArguments>('angularfire2.database.use-emulator');
2828

2929
@Injectable({
3030
providedIn: 'any'
3131
})
3232
export class AngularFireDatabase {
33-
public readonly database: firebase.database.Database;
33+
public readonly database: Database;
3434

3535
public readonly schedulers: ɵAngularFireSchedulers;
3636
public readonly keepUnstableUntilFirst: <T>(obs$: Observable<T>) => Observable<T>;
@@ -51,9 +51,11 @@ export class AngularFireDatabase {
5151
const useEmulator: UseEmulatorArguments | null = _useEmulator;
5252
const app = ɵfirebaseAppFactory(options, zone, nameOrConfig);
5353

54-
if (!firebase.auth && useAuthEmulator) {
55-
ɵlogAuthEmulatorError();
56-
}
54+
// TODO(team): Figure out how to get detect potential Authentication instance
55+
// in vNext world
56+
// if (!firebase.auth && useAuthEmulator) {
57+
// ɵlogAuthEmulatorError();
58+
// }
5759

5860
this.database = ɵfetchInstance(`${app.name}.database.${databaseURL}`, 'AngularFireDatabase', app, () => {
5961
const database = zone.runOutsideAngular(() => app.database(databaseURL || undefined));

src/database/interfaces.ts

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { Observable } from 'rxjs';
2-
import firebase from 'firebase/app';
2+
import { Reference, ThenableReference, Query, DataSnapshot } from 'firebase/database';
33

4-
export type FirebaseOperation = string | firebase.database.Reference | firebase.database.DataSnapshot;
4+
export type FirebaseOperation = string | Reference | DataSnapshot;
55

66
export interface AngularFireList<T> {
77
query: DatabaseQuery;
@@ -12,7 +12,7 @@ export interface AngularFireList<T> {
1212
auditTrail(events?: ChildEvent[]): Observable<SnapshotAction<T>[]>;
1313
update(item: FirebaseOperation, data: Partial<T>): Promise<void>;
1414
set(item: FirebaseOperation, data: T): Promise<void>;
15-
push(data: T): firebase.database.ThenableReference;
15+
push(data: T): ThenableReference;
1616
remove(item?: FirebaseOperation): Promise<void>;
1717
}
1818

@@ -50,22 +50,22 @@ export type SnapshotAction<T> = AngularFireAction<DatabaseSnapshot<T>>;
5050

5151
export type Primitive = number | string | boolean;
5252

53-
export interface DatabaseSnapshotExists<T> extends firebase.database.DataSnapshot {
53+
export interface DatabaseSnapshotExists<T> extends DataSnapshot {
5454
exists(): true;
5555
val(): T;
5656
forEach(action: (a: DatabaseSnapshot<T>) => boolean): boolean;
5757
}
5858

59-
export interface DatabaseSnapshotDoesNotExist<T> extends firebase.database.DataSnapshot {
59+
export interface DatabaseSnapshotDoesNotExist<T> extends DataSnapshot {
6060
exists(): false;
6161
val(): null;
6262
forEach(action: (a: DatabaseSnapshot<T>) => boolean): boolean;
6363
}
6464

6565
export type DatabaseSnapshot<T> = DatabaseSnapshotExists<T> | DatabaseSnapshotDoesNotExist<T>;
6666

67-
export type DatabaseReference = firebase.database.Reference;
68-
export type DatabaseQuery = firebase.database.Query;
69-
export type DataSnapshot = firebase.database.DataSnapshot;
67+
export type DatabaseReference = Reference;
68+
export type DatabaseQuery = Query;
69+
export { DataSnapshot };
7070
export type QueryReference = DatabaseReference | DatabaseQuery;
7171
export type PathReference = QueryReference | string;

src/database/list/audit-trail.spec.ts

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,13 @@ import { AngularFireDatabase, AngularFireDatabaseModule, auditTrail, ChildEvent,
33
import { TestBed } from '@angular/core/testing';
44
import { COMMON_CONFIG } from '../../test-config';
55
import { skip } from 'rxjs/operators';
6-
import 'firebase/database';
7-
import firebase from 'firebase/app';
6+
import { Reference } from 'firebase/database';
87
import { rando } from '../../firestore/utils.spec';
98

109
describe('auditTrail', () => {
1110
let app: FirebaseApp;
1211
let db: AngularFireDatabase;
13-
let createRef: (path: string) => firebase.database.Reference;
12+
let createRef: (path: string) => Reference;
1413
let batch = {};
1514
const items = [{ name: 'zero' }, { name: 'one' }, { name: 'two' }].map((item, i) => ({ key: i.toString(), ...item }));
1615
Object.keys(items).forEach((key, i) => {

src/database/list/changes.spec.ts

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,15 @@
1-
import firebase from 'firebase/app';
21
import { AngularFireModule, FirebaseApp } from '@angular/fire';
32
import { AngularFireDatabase, AngularFireDatabaseModule, listChanges, URL } from '@angular/fire/database';
43
import { TestBed } from '@angular/core/testing';
54
import { COMMON_CONFIG } from '../../test-config';
65
import { skip, take } from 'rxjs/operators';
7-
import 'firebase/database';
6+
import { Reference } from 'firebase/database';
87
import { rando } from '../../firestore/utils.spec';
98

109
describe('listChanges', () => {
1110
let app: FirebaseApp;
1211
let db: AngularFireDatabase;
13-
let ref: (path: string) => firebase.database.Reference;
12+
let ref: (path: string) => Reference;
1413
let batch = {};
1514
const items = [{ name: 'zero' }, { name: 'one' }, { name: 'two' }].map((item, i) => ({ key: i.toString(), ...item }));
1615
Object.keys(items).forEach((key, i) => {

src/database/list/remove.ts

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
import { DatabaseReference, DatabaseSnapshot, FirebaseOperation } from '../interfaces';
22
import { checkOperationCases } from '../utils';
33

4-
// TODO(davideast): Find out why TS thinks this returns firebase.Primise
5-
// instead of Promise.
64
export function createRemoveMethod<T>(ref: DatabaseReference) {
75
return function remove(item?: FirebaseOperation): any {
86
if (!item) { return ref.remove(); }

src/database/list/snapshot-changes.spec.ts

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,16 @@
1-
import firebase from 'firebase/app';
21
import { AngularFireModule, FirebaseApp } from '@angular/fire';
32
import { AngularFireDatabase, AngularFireDatabaseModule, ChildEvent, snapshotChanges, URL } from '@angular/fire/database';
43
import { TestBed } from '@angular/core/testing';
54
import { COMMON_CONFIG } from '../../test-config';
65
import { BehaviorSubject } from 'rxjs';
76
import { skip, switchMap, take } from 'rxjs/operators';
8-
import 'firebase/database';
7+
import { Reference } from 'firebase/database';
98
import { rando } from '../../firestore/utils.spec';
109

1110
describe('snapshotChanges', () => {
1211
let app: FirebaseApp;
1312
let db: AngularFireDatabase;
14-
let createRef: (path: string) => firebase.database.Reference;
13+
let createRef: (path: string) => Reference;
1514
let batch = {};
1615
const items = [{ name: 'zero' }, { name: 'one' }, { name: 'two' }].map((item, i) => ({ key: i.toString(), ...item }));
1716
Object.keys(items).forEach((key, i) => {

src/database/list/state-changes.spec.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,13 @@ import { AngularFireDatabase, AngularFireDatabaseModule, ChildEvent, stateChange
44
import { TestBed } from '@angular/core/testing';
55
import { COMMON_CONFIG } from '../../test-config';
66
import { skip } from 'rxjs/operators';
7-
import 'firebase/database';
7+
import { Reference } from 'firebase/database';
88
import { rando } from '../../firestore/utils.spec';
99

1010
describe('stateChanges', () => {
1111
let app: FirebaseApp;
1212
let db: AngularFireDatabase;
13-
let createRef: (path: string) => firebase.database.Reference;
13+
let createRef: (path: string) => Reference;
1414
let batch = {};
1515
const items = [{ name: 'zero' }, { name: 'one' }, { name: 'two' }].map((item, i) => ({ key: i.toString(), ...item }));
1616
Object.keys(items).forEach((key, i) => {

src/database/observable/fromRef.spec.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,12 @@ import { COMMON_CONFIG } from '../../test-config';
55
import { take } from 'rxjs/operators';
66
import { TestScheduler } from 'rxjs/testing';
77
import { rando } from '../../firestore/utils.spec';
8-
import firebase from 'firebase/app';
8+
import { Reference } from 'firebase/database';
99

1010
describe('fromRef', () => {
1111
let app: FirebaseApp;
1212
let db: AngularFireDatabase;
13-
let ref: (path: string) => firebase.database.Reference;
13+
let ref: (path: string) => Reference;
1414
let batch = {};
1515
const items = [{ name: 'one' }, { name: 'two' }, { name: 'three' }].map(item => ({ key: rando(), ...item }));
1616
Object.keys(items).forEach((key) => {

src/database/utils.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { DatabaseReference, FirebaseOperation, FirebaseOperationCases, PathReference } from './interfaces';
2-
import firebase from 'firebase/app';
2+
import { Database } from 'firebase/database';
33

44
export function isString(value: any): boolean {
55
return typeof value === 'string';
@@ -23,7 +23,7 @@ export function isFirebaseRef(value: any): boolean {
2323
* @param database - Firebase Database
2424
* @param pathRef - Database path, relative or absolute
2525
*/
26-
export function getRef(database: firebase.database.Database, pathRef: PathReference): DatabaseReference {
26+
export function getRef(database: Database, pathRef: PathReference): DatabaseReference {
2727
// if a db ref was passed in, just return it
2828
return isFirebaseRef(pathRef) ? pathRef as DatabaseReference
2929
: database.ref(pathRef as string);

0 commit comments

Comments
 (0)