Skip to content

Commit 2cfa95a

Browse files
committed
refactor(db): Begin database refactor
1 parent baad6f0 commit 2cfa95a

19 files changed

+431
-0
lines changed

.DS_Store

6 KB
Binary file not shown.

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,3 +9,4 @@ npm-debug.log
99
angularfire2-*.tgz
1010
*.ngfactory.ts
1111
*.ngsummary.json
12+
*.bak

src/.DS_Store

6 KB
Binary file not shown.
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
import { NgModule } from '@angular/core';
2+
import * as firebase from 'firebase/app';
3+
import 'firebase/database';
4+
import { AngularFireModule, FirebaseApp } from 'angularfire2';
5+
import { AngularFireDatabase } from './database';
6+
7+
export function _getAngularFireDatabase(app: FirebaseApp) {
8+
return new AngularFireDatabase(app);
9+
}
10+
11+
export const AngularFireDatabaseProvider = {
12+
provide: AngularFireDatabase,
13+
useFactory: _getAngularFireDatabase,
14+
deps: [ FirebaseApp ]
15+
};
16+
17+
export const DATABASE_PROVIDERS = [
18+
AngularFireDatabaseProvider,
19+
];
20+
21+
@NgModule({
22+
imports: [ AngularFireModule ],
23+
providers: [ DATABASE_PROVIDERS ]
24+
})
25+
export class AngularFireDatabaseModule { }

src/database-new/database.ts

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
import { Injectable } from '@angular/core';
2+
import * as firebase from 'firebase/app';
3+
import 'firebase/database';
4+
import { FirebaseApp } from 'angularfire2';
5+
import { PathReference, DatabaseQuery, DatabaseReference, DatabaseSnapshot, ChildEvent, ListenEvent, SnapshotChange, QueryFn, AngularFireList } from './interfaces';
6+
import * as utils from './utils';
7+
import { Observable } from 'rxjs/Observable';
8+
import { fromRef } from './observable/fromRef';
9+
import { createValueChanges } from './observable/value-changes';
10+
import { createList } from './list/create.list';
11+
12+
@Injectable()
13+
export class AngularFireDatabase {
14+
database: firebase.database.Database;
15+
16+
constructor(public app: FirebaseApp) {
17+
this.database = app.database();
18+
}
19+
20+
list<T>(pathOrRef: PathReference, queryFn?: QueryFn): AngularFireList<T> {
21+
const ref = utils.getRef(this.app, pathOrRef);
22+
let query: DatabaseQuery = ref;
23+
if(queryFn) {
24+
query = queryFn(ref);
25+
}
26+
return createList<T>(query);
27+
}
28+
29+
object<T>(pathOrRef: PathReference) {
30+
31+
}
32+
33+
}
34+

src/database-new/index.spec.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
// import './firebase_list_factory.spec';
2+
// import './firebase_object_factory.spec';
3+
// import './firebase_list_observable.spec';
4+
// import './firebase_object_observable.spec';
5+
// import './query_observable.spec';

src/database-new/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
export * from './public_api';

src/database-new/interfaces.ts

Lines changed: 104 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,104 @@
1+
import * as firebase from 'firebase/app';
2+
import { Observable } from 'rxjs/Observable';
3+
4+
export interface AngularFireList<T> {
5+
query: DatabaseQuery;
6+
valueChanges<T>(events: ChildEvent[]): Observable<T[]>;
7+
//snapshotChanges<T>(): Observable<DatabaseSnapshot>;
8+
//childChanges<T>(events: ChildEvent[]): Observable<DatabaseSnapshot>;
9+
}
10+
11+
export interface FirebaseOperationCases {
12+
stringCase: () => firebase.Promise<void>;
13+
firebaseCase?: () => firebase.Promise<void>;
14+
snapshotCase?: () => firebase.Promise<void>;
15+
unwrappedSnapshotCase?: () => firebase.Promise<void>;
16+
}
17+
18+
export interface AFUnwrappedDataSnapshot {
19+
$key: string;
20+
$value?: string | number | boolean;
21+
$exists: () => boolean;
22+
}
23+
24+
export interface Query {
25+
[key: string]: any;
26+
orderByKey?: boolean | Observable<boolean>;
27+
orderByPriority?: boolean | Observable<boolean>;
28+
orderByChild?: string | Observable<string>;
29+
orderByValue?: boolean | Observable<boolean>;
30+
equalTo?: any | Observable<any>;
31+
startAt?: any | Observable<any>;
32+
endAt?: any | Observable<any>;
33+
limitToFirst?: number | Observable<number>;
34+
limitToLast?: number | Observable<number>;
35+
}
36+
37+
export interface ScalarQuery {
38+
[key: string]: any;
39+
orderByKey?: boolean;
40+
orderByPriority?: boolean;
41+
orderByChild?: string;
42+
orderByValue?: boolean;
43+
equalTo?: any;
44+
startAt?: any;
45+
endAt?: any;
46+
limitToFirst?: number;
47+
limitToLast?: number;
48+
}
49+
50+
export interface OrderBySelection {
51+
key: OrderByOptions;
52+
value: boolean | string;
53+
}
54+
55+
export interface LimitToSelection {
56+
key: LimitToOptions;
57+
value: number;
58+
}
59+
60+
export interface FirebaseListFactoryOpts {
61+
preserveSnapshot?: boolean;
62+
query?: Query;
63+
}
64+
65+
66+
export interface FirebaseObjectFactoryOpts {
67+
preserveSnapshot?: boolean;
68+
}
69+
70+
71+
export enum OrderByOptions {
72+
Child,
73+
Key,
74+
Value,
75+
Priority
76+
}
77+
78+
export enum LimitToOptions {
79+
First,
80+
Last
81+
}
82+
83+
export enum QueryOptions {
84+
EqualTo,
85+
StartAt,
86+
EndAt
87+
}
88+
89+
export type QueryFn = (ref: DatabaseReference) => DatabaseQuery;
90+
export type ChildEvent = 'added' | 'removed' | 'changed' | 'moved';
91+
export type ListenEvent = 'value' | ChildEvent;
92+
93+
export type SnapshotChange = {
94+
event: string;
95+
snapshot: DatabaseSnapshot | null;
96+
}
97+
98+
export type Primitive = number | string | boolean;
99+
100+
export type DatabaseSnapshot = firebase.database.DataSnapshot;
101+
export type DatabaseReference = firebase.database.Reference;
102+
export type DatabaseQuery = firebase.database.Query;
103+
export type QueryReference = DatabaseReference | DatabaseQuery;
104+
export type PathReference = QueryReference | string;

src/database-new/list.factory.ts

Whitespace-only changes.
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
import { DatabaseQuery, AngularFireList } from '../interfaces';
2+
import { createValueChanges } from '../observable/value-changes';
3+
4+
export function createList<T>(query: DatabaseQuery): AngularFireList<T> {
5+
return {
6+
query,
7+
valueChanges: createValueChanges(query)
8+
}
9+
}

0 commit comments

Comments
 (0)