From 32ecc2a46bba24f30ba6affe3339e67c078f4e8d Mon Sep 17 00:00:00 2001 From: David East Date: Wed, 22 Jun 2016 15:25:20 -0700 Subject: [PATCH] chore(modules): Organize database --- src/angularfire2.ts | 42 +++++++--- src/database/database.ts | 19 +++-- .../firebase_list_factory.spec.ts | 10 +-- .../firebase_list_factory.ts | 22 ++--- .../firebase_list_observable.spec.ts | 22 +++-- .../firebase_list_observable.ts | 26 ++---- .../firebase_object_factory.spec.ts | 5 +- .../firebase_object_factory.ts | 24 +++--- .../firebase_object_observable.spec.ts | 4 +- .../firebase_object_observable.ts | 8 +- src/database/index.ts | 6 ++ .../query_observable.spec.ts | 12 +-- src/{utils => database}/query_observable.ts | 78 ++++-------------- src/interfaces.ts | 82 +++++++++++++++++++ src/utils/index.ts | 1 + src/utils/utils.ts | 2 +- tsconfig.json | 12 +-- 17 files changed, 219 insertions(+), 156 deletions(-) rename src/{utils => database}/firebase_list_factory.spec.ts (98%) rename src/{utils => database}/firebase_list_factory.ts (91%) rename src/{utils => database}/firebase_list_observable.spec.ts (95%) rename src/{utils => database}/firebase_list_observable.ts (82%) rename src/{utils => database}/firebase_object_factory.spec.ts (95%) rename src/{utils => database}/firebase_object_factory.ts (57%) rename src/{utils => database}/firebase_object_observable.spec.ts (97%) rename src/{utils => database}/firebase_object_observable.ts (84%) create mode 100644 src/database/index.ts rename src/{utils => database}/query_observable.spec.ts (97%) rename src/{utils => database}/query_observable.ts (80%) create mode 100644 src/utils/index.ts diff --git a/src/angularfire2.ts b/src/angularfire2.ts index 6ad032027..e74a416d5 100644 --- a/src/angularfire2.ts +++ b/src/angularfire2.ts @@ -1,24 +1,42 @@ -import {APP_INITIALIZER, Inject, Injectable, OpaqueToken, provide, Provider} from '@angular/core'; -import {AngularFireAuth, firebaseAuthConfig, FirebaseAuth} from './providers/auth'; import { initializeApp } from 'firebase'; -import {FirebaseListObservable} from './utils/firebase_list_observable'; -import {FirebaseObjectObservable} from './utils/firebase_object_observable'; -import {FirebaseListFactory, FirebaseListFactoryOpts} from './utils/firebase_list_factory'; -import { - FirebaseObjectFactoryOpts, - FirebaseObjectFactory -} from './utils/firebase_object_factory'; import * as utils from './utils/utils'; -import { FirebaseConfig, FirebaseApp, WindowLocation } from './tokens'; import { FirebaseAppConfig } from './interfaces'; +import { FirebaseSdkAuthBackend } from './providers/firebase_sdk_auth_backend'; +import { + FirebaseListFactoryOpts, + FirebaseObjectFactoryOpts, +} from './interfaces'; +import { + FirebaseConfig, + FirebaseApp, + WindowLocation +} from './tokens'; +import { + APP_INITIALIZER, + Inject, + Injectable, + OpaqueToken, + provide, + Provider +} from '@angular/core'; +import { + AngularFireAuth, + firebaseAuthConfig, + FirebaseAuth +} from './providers/auth'; +import { + FirebaseListObservable, + FirebaseObjectObservable, + FirebaseListFactory, + FirebaseObjectFactory, + FirebaseDatabase +} from './database/index'; import { AuthBackend, AuthMethods, AuthProviders, FirebaseAuthState } from './providers/auth_backend'; -import {FirebaseSdkAuthBackend} from './providers/firebase_sdk_auth_backend'; -import {FirebaseDatabase} from './database/database'; @Injectable() export class AngularFire { diff --git a/src/database/database.ts b/src/database/database.ts index 4cb983622..a15a01eb0 100644 --- a/src/database/database.ts +++ b/src/database/database.ts @@ -1,11 +1,14 @@ -import {Inject, Injectable} from '@angular/core'; -import {FirebaseConfig} from '../tokens'; -import {FirebaseAppConfig} from '../angularfire2'; -import {FirebaseListObservable} from '../utils/firebase_list_observable'; -import {FirebaseObjectObservable} from '../utils/firebase_object_observable'; -import {FirebaseListFactory, FirebaseListFactoryOpts} from '../utils/firebase_list_factory'; -import {FirebaseObjectFactoryOpts, FirebaseObjectFactory} from '../utils/firebase_object_factory'; -import * as utils from '../utils/utils' +import { Inject, Injectable } from '@angular/core'; +import { FirebaseConfig } from '../tokens'; +import { FirebaseAppConfig } from '../angularfire2'; +import { FirebaseListFactory } from './index'; +import { FirebaseListFactoryOpts, FirebaseObjectFactoryOpts } from '../interfaces'; +import * as utils from '../utils/utils'; +import { + FirebaseListObservable, + FirebaseObjectObservable, + FirebaseObjectFactory +} from './index'; @Injectable() export class FirebaseDatabase { diff --git a/src/utils/firebase_list_factory.spec.ts b/src/database/firebase_list_factory.spec.ts similarity index 98% rename from src/utils/firebase_list_factory.spec.ts rename to src/database/firebase_list_factory.spec.ts index 04bb4d64b..f7cbd6773 100644 --- a/src/utils/firebase_list_factory.spec.ts +++ b/src/database/firebase_list_factory.spec.ts @@ -1,13 +1,13 @@ declare var require: any; import { FirebaseListFactory, + FirebaseListObservable, + FirebaseObjectFactory, onChildAdded, onChildChanged, onChildRemoved, onChildUpdated, -} from './firebase_list_factory'; -import {FirebaseListObservable} from './firebase_list_observable'; -import {FirebaseObjectFactory} from './firebase_object_factory'; +} from './index'; import { FIREBASE_PROVIDERS, defaultFirebase, @@ -25,8 +25,8 @@ import { beforeEachProviders, inject } from '@angular/core/testing'; -import * as utils from './utils'; -import {Query} from './query_observable'; +import * as utils from '../utils/utils'; +import {Query} from '../interfaces'; import {Subscription, Observable, Subject} from 'rxjs'; import 'rxjs/add/operator/do'; import 'rxjs/add/operator/skip'; diff --git a/src/utils/firebase_list_factory.ts b/src/database/firebase_list_factory.ts similarity index 91% rename from src/utils/firebase_list_factory.ts rename to src/database/firebase_list_factory.ts index 4708b28b1..9e7574e3f 100644 --- a/src/utils/firebase_list_factory.ts +++ b/src/database/firebase_list_factory.ts @@ -1,12 +1,19 @@ -import {FirebaseListObservable, AFUnwrappedDataSnapshot} from './firebase_list_observable'; -import {Observer} from 'rxjs/Observer'; +import { AFUnwrappedDataSnapshot } from '../interfaces'; +import { FirebaseListObservable } from './firebase_list_observable'; +import { Observer } from 'rxjs/Observer'; import { database } from 'firebase'; -import * as utils from './utils'; -import {Query, observeQuery} from './query_observable'; +import { observeQuery } from './query_observable'; +import { Query, FirebaseListFactoryOpts } from '../interfaces'; +import * as utils from '../utils/utils'; import 'rxjs/add/operator/mergeMap'; import 'rxjs/add/operator/map'; -export function FirebaseListFactory (absoluteUrlOrDbRef:string | firebase.database.Reference | firebase.database.Query, {preserveSnapshot, query = {}}:FirebaseListFactoryOpts = {}): FirebaseListObservable { +export function FirebaseListFactory ( + absoluteUrlOrDbRef:string | + firebase.database.Reference | + firebase.database.Query, + {preserveSnapshot, query = {}}:FirebaseListFactoryOpts = {}): FirebaseListObservable { + let ref: firebase.database.Reference | firebase.database.Query; utils.checkForUrlOrFirebaseRef(absoluteUrlOrDbRef, { @@ -142,11 +149,6 @@ function firebaseListObservable(ref: firebase.database.Reference | firebase.data return listObs; } -export interface FirebaseListFactoryOpts { - preserveSnapshot?: boolean; - query?: Query; -} - export function onChildAdded(arr:any[], child:any, prevKey:string): any[] { if (!arr.length) { return [child]; diff --git a/src/utils/firebase_list_observable.spec.ts b/src/database/firebase_list_observable.spec.ts similarity index 95% rename from src/utils/firebase_list_observable.spec.ts rename to src/database/firebase_list_observable.spec.ts index 9082260ae..a4eb2ad2f 100644 --- a/src/utils/firebase_list_observable.spec.ts +++ b/src/database/firebase_list_observable.spec.ts @@ -1,5 +1,9 @@ -import {describe,ddescribe,it,iit,beforeEach,beforeEachProviders,inject} from '@angular/core/testing'; -import {FirebaseListObservable} from './firebase_list_observable'; +import { FirebaseListObservable } from './index'; +import { Observer } from 'rxjs/Observer'; +import { Observable } from 'rxjs/Observable'; +import 'rxjs/add/operator/map'; +import { database } from 'firebase'; +import { unwrapMapFn } from '../utils/utils'; import { FIREBASE_PROVIDERS, defaultFirebase, @@ -7,11 +11,15 @@ import { FirebaseAppConfig, AngularFire } from '../angularfire2'; -import {Observer} from 'rxjs/Observer'; -import {Observable} from 'rxjs/Observable'; -import 'rxjs/add/operator/map'; -import { database } from 'firebase'; -import {unwrapMapFn} from './utils'; +import { + describe, + ddescribe, + it, + iit, + beforeEach, + beforeEachProviders, + inject +} from '@angular/core/testing'; export const firebaseConfig: FirebaseAppConfig = { apiKey: "AIzaSyBVSy3YpkVGiKXbbxeK0qBnu3-MNZ9UIjA", diff --git a/src/utils/firebase_list_observable.ts b/src/database/firebase_list_observable.ts similarity index 82% rename from src/utils/firebase_list_observable.ts rename to src/database/firebase_list_observable.ts index c73020131..4ba04460b 100644 --- a/src/utils/firebase_list_observable.ts +++ b/src/database/firebase_list_observable.ts @@ -1,20 +1,12 @@ -import {Observable} from 'rxjs/Observable'; -import {Operator} from 'rxjs/Operator'; -import {Subscriber} from 'rxjs/Subscriber'; -import {Subscription} from 'rxjs/Subscription'; -import * as utils from './utils'; - -export interface FirebaseOperationCases { - stringCase: () => firebase.Promise; - firebaseCase?: () => firebase.Promise; - snapshotCase?: () => firebase.Promise; - unwrappedSnapshotCase?: () => firebase.Promise; -} - -export interface AFUnwrappedDataSnapshot { - $key: string; - $value?: string | number | boolean; -} +import { Observable } from 'rxjs/Observable'; +import { Operator } from 'rxjs/Operator'; +import { Subscriber } from 'rxjs/Subscriber'; +import { Subscription } from 'rxjs/Subscription'; +import * as utils from '../utils/utils'; +import { + AFUnwrappedDataSnapshot, + FirebaseOperationCases +} from '../interfaces'; export type FirebaseOperation = string | firebase.database.Reference | firebase.database.DataSnapshot | AFUnwrappedDataSnapshot; diff --git a/src/utils/firebase_object_factory.spec.ts b/src/database/firebase_object_factory.spec.ts similarity index 95% rename from src/utils/firebase_object_factory.spec.ts rename to src/database/firebase_object_factory.spec.ts index 7dc45f565..9fc537ebd 100644 --- a/src/utils/firebase_object_factory.spec.ts +++ b/src/database/firebase_object_factory.spec.ts @@ -1,5 +1,5 @@ -import {FirebaseObjectFactory} from '../utils/firebase_object_factory'; -import {FirebaseObjectObservable} from '../utils/firebase_object_observable'; +import { Subscription } from 'rxjs'; +import { FirebaseObjectFactory, FirebaseObjectObservable } from './index'; import { beforeEach, it, @@ -17,7 +17,6 @@ import { FirebaseAppConfig, AngularFire } from '../angularfire2'; -import {Subscription} from 'rxjs'; export const firebaseConfig: FirebaseAppConfig = { apiKey: "AIzaSyBVSy3YpkVGiKXbbxeK0qBnu3-MNZ9UIjA", diff --git a/src/utils/firebase_object_factory.ts b/src/database/firebase_object_factory.ts similarity index 57% rename from src/utils/firebase_object_factory.ts rename to src/database/firebase_object_factory.ts index 6c3d2147b..0030d4809 100644 --- a/src/utils/firebase_object_factory.ts +++ b/src/database/firebase_object_factory.ts @@ -1,11 +1,16 @@ -import {FirebaseObjectObservable} from './firebase_object_observable'; -import {Observer} from 'rxjs/Observer'; -import 'rxjs/add/operator/mergeMap'; +import { FirebaseObjectObservable } from './index'; +import { Observer } from 'rxjs/Observer'; import { database } from 'firebase'; -import * as utils from './utils'; -import {Query, observeQuery} from './query_observable'; +import * as utils from '../utils/utils'; +import { Query } from '../interfaces'; +import { observeQuery } from './query_observable'; +import { FirebaseObjectFactoryOpts } from '../interfaces'; +import 'rxjs/add/operator/mergeMap'; -export function FirebaseObjectFactory(absoluteUrlOrDbRef: string | firebase.database.Reference, {preserveSnapshot, query}: FirebaseObjectFactoryOpts = {}): FirebaseObjectObservable { +export function FirebaseObjectFactory ( + absoluteUrlOrDbRef: string | firebase.database.Reference, + { preserveSnapshot, query }: FirebaseObjectFactoryOpts = {}): FirebaseObjectObservable { + let ref: firebase.database.Reference; utils.checkForUrlOrFirebaseRef(absoluteUrlOrDbRef, { @@ -22,9 +27,4 @@ export function FirebaseObjectFactory(absoluteUrlOrDbRef: string | firebase.data return () => ref.off(); }, ref); -} - -export interface FirebaseObjectFactoryOpts { - preserveSnapshot?: boolean; - query?: Query -} +} \ No newline at end of file diff --git a/src/utils/firebase_object_observable.spec.ts b/src/database/firebase_object_observable.spec.ts similarity index 97% rename from src/utils/firebase_object_observable.spec.ts rename to src/database/firebase_object_observable.spec.ts index 3500de2f6..a99ffad33 100644 --- a/src/utils/firebase_object_observable.spec.ts +++ b/src/database/firebase_object_observable.spec.ts @@ -15,8 +15,8 @@ import { FirebaseAppConfig, AngularFire } from '../angularfire2'; -import {FirebaseObjectObservable} from './firebase_object_observable'; -import {Observer} from 'rxjs/Observer'; +import { FirebaseObjectObservable } from './index'; +import { Observer } from 'rxjs/Observer'; import 'rxjs/add/operator/map'; import { database } from 'firebase'; diff --git a/src/utils/firebase_object_observable.ts b/src/database/firebase_object_observable.ts similarity index 84% rename from src/utils/firebase_object_observable.ts rename to src/database/firebase_object_observable.ts index 31bf0e457..776c9c3f8 100644 --- a/src/utils/firebase_object_observable.ts +++ b/src/database/firebase_object_observable.ts @@ -1,7 +1,7 @@ -import {Observable} from 'rxjs/Observable'; -import {Operator} from 'rxjs/Operator'; -import {Subscriber} from 'rxjs/Subscriber'; -import {Subscription} from 'rxjs/Subscription'; +import { Observable } from 'rxjs/Observable'; +import { Operator } from 'rxjs/Operator'; +import { Subscriber } from 'rxjs/Subscriber'; +import { Subscription } from 'rxjs/Subscription'; export class FirebaseObjectObservable extends Observable { constructor(subscribe?: (subscriber: Subscriber) => Subscription | Function | void, private _ref?:firebase.database.Reference) { diff --git a/src/database/index.ts b/src/database/index.ts new file mode 100644 index 000000000..c9ac3ddba --- /dev/null +++ b/src/database/index.ts @@ -0,0 +1,6 @@ +export * from './database'; +export * from './firebase_list_factory'; +export * from './firebase_list_observable'; +export * from './firebase_object_factory'; +export * from './firebase_object_observable'; +export * from './query_observable'; \ No newline at end of file diff --git a/src/utils/query_observable.spec.ts b/src/database/query_observable.spec.ts similarity index 97% rename from src/utils/query_observable.spec.ts rename to src/database/query_observable.spec.ts index 2b6e2dac5..1596c33d7 100644 --- a/src/utils/query_observable.spec.ts +++ b/src/database/query_observable.spec.ts @@ -1,9 +1,9 @@ -import {describe, expect, it, iit} from '@angular/core/testing'; -import {Observable} from 'rxjs/Observable'; -import {Observer} from 'rxjs/Observer'; -import {Subject} from 'rxjs/Subject'; - -import {getOrderObservables, observeQuery, Query} from './query_observable'; +import { describe, expect, it, iit } from '@angular/core/testing'; +import { Observable } from 'rxjs/Observable'; +import { Observer } from 'rxjs/Observer'; +import { Subject } from 'rxjs/Subject'; +import { Query } from '../interfaces'; +import { getOrderObservables, observeQuery } from './index'; function scalarQueryTest(query: Query, done: any) { const queryObservable = observeQuery(query); diff --git a/src/utils/query_observable.ts b/src/database/query_observable.ts similarity index 80% rename from src/utils/query_observable.ts rename to src/database/query_observable.ts index 5f112f88d..6f3261099 100644 --- a/src/utils/query_observable.ts +++ b/src/database/query_observable.ts @@ -1,69 +1,21 @@ -import {Observable} from 'rxjs/Observable'; -import {ScalarObservable} from 'rxjs/observable/ScalarObservable'; -import {Operator} from 'rxjs/Operator'; -import {Observer} from 'rxjs/Observer'; -import {merge} from 'rxjs/operator/merge'; -import {map} from 'rxjs/operator/map'; +import { Observable } from 'rxjs/Observable'; +import { ScalarObservable } from 'rxjs/observable/ScalarObservable'; +import { Operator } from 'rxjs/Operator'; +import { Observer } from 'rxjs/Observer'; +import { merge } from 'rxjs/operator/merge'; +import { map } from 'rxjs/operator/map'; +import { + Query, + ScalarQuery, + OrderByOptions, + OrderBySelection, + LimitToOptions, + LimitToSelection, + Primitive +} from '../interfaces'; import 'rxjs/add/operator/merge'; import 'rxjs/add/operator/combineLatest'; -export interface Query { - [key: string]: any; - orderByKey?: boolean | Observable; - orderByPriority?: boolean | Observable; - orderByChild?: string | Observable; - orderByValue?: boolean | Observable; - equalTo?: any | Observable; - startAt?: any | Observable; - endAt?: any | Observable; - limitToFirst?: number | Observable; - limitToLast?: number | Observable; -} - -export interface ScalarQuery { - [key: string]: any; - orderByKey?: boolean; - orderByPriority?: boolean; - orderByChild?: string; - orderByValue?: boolean; - equalTo?: any; - startAt?: any; - endAt?: any; - limitToFirst?: number; - limitToLast?: number; -} - -export enum OrderByOptions { - Child, - Key, - Value, - Priority -} - -export enum LimitToOptions { - First, - Last -} - -export enum QueryOptions { - EqualTo, - StartAt, - EndAt -} - -export interface OrderBySelection { - key: OrderByOptions; - value: boolean | string; -} - -export interface LimitToSelection { - key: LimitToOptions; - value: number; -} - -export type Primitive = number | string | boolean; - - export function observeQuery(query: Query): Observable { if (!isPresent(query)) { return new ScalarObservable(null); diff --git a/src/interfaces.ts b/src/interfaces.ts index 12ef624f2..cdebc37b4 100644 --- a/src/interfaces.ts +++ b/src/interfaces.ts @@ -1,6 +1,88 @@ +import { Observable } from 'rxjs/Observable'; + export interface FirebaseAppConfig { apiKey: string; authDomain: string; databaseURL: string; storageBucket: string; } + +export interface FirebaseOperationCases { + stringCase: () => firebase.Promise; + firebaseCase?: () => firebase.Promise; + snapshotCase?: () => firebase.Promise; + unwrappedSnapshotCase?: () => firebase.Promise; +} + +export interface AFUnwrappedDataSnapshot { + $key: string; + $value?: string | number | boolean; +} + +export interface Query { + [key: string]: any; + orderByKey?: boolean | Observable; + orderByPriority?: boolean | Observable; + orderByChild?: string | Observable; + orderByValue?: boolean | Observable; + equalTo?: any | Observable; + startAt?: any | Observable; + endAt?: any | Observable; + limitToFirst?: number | Observable; + limitToLast?: number | Observable; +} + +export interface ScalarQuery { + [key: string]: any; + orderByKey?: boolean; + orderByPriority?: boolean; + orderByChild?: string; + orderByValue?: boolean; + equalTo?: any; + startAt?: any; + endAt?: any; + limitToFirst?: number; + limitToLast?: number; +} + +export interface OrderBySelection { + key: OrderByOptions; + value: boolean | string; +} + +export interface LimitToSelection { + key: LimitToOptions; + value: number; +} + +export interface FirebaseListFactoryOpts { + preserveSnapshot?: boolean; + query?: Query; +} + + +export interface FirebaseObjectFactoryOpts { + preserveSnapshot?: boolean; + query?: Query +} + + +export enum OrderByOptions { + Child, + Key, + Value, + Priority +} + +export enum LimitToOptions { + First, + Last +} + +export enum QueryOptions { + EqualTo, + StartAt, + EndAt +} + +export type Primitive = number | string | boolean; \ No newline at end of file diff --git a/src/utils/index.ts b/src/utils/index.ts new file mode 100644 index 000000000..038522d3e --- /dev/null +++ b/src/utils/index.ts @@ -0,0 +1 @@ +export * from './utils'; \ No newline at end of file diff --git a/src/utils/utils.ts b/src/utils/utils.ts index 53c3f798c..5088ff397 100644 --- a/src/utils/utils.ts +++ b/src/utils/utils.ts @@ -1,4 +1,4 @@ -import { AFUnwrappedDataSnapshot} from './firebase_list_observable'; +import { AFUnwrappedDataSnapshot} from '../interfaces'; export function isPresent(obj: any): boolean { return obj !== undefined && obj !== null; diff --git a/tsconfig.json b/tsconfig.json index 14950d440..2f6fbbbce 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -15,12 +15,12 @@ "files": [ "src/angularfire2.ts", "src/angularfire2.spec.ts", - "src/utils/firebase_list_factory.spec.ts", - "src/utils/firebase_object_factory.ts", - "src/utils/firebase_object_factory.spec.ts", - "src/utils/firebase_list_observable.spec.ts", - "src/utils/firebase_object_observable.spec.ts", - "src/utils/query_observable.spec.ts", + "src/database/index.ts", + "src/database/firebase_list_factory.spec.ts", + "src/database/firebase_object_factory.spec.ts", + "src/database/firebase_list_observable.spec.ts", + "src/database/firebase_object_observable.spec.ts", + "src/database/query_observable.spec.ts", "src/providers/auth.spec.ts", "src/providers/auth_backend.spec.ts", "typings/main.d.ts",