Skip to content

Commit feac635

Browse files
committed
getInstance({...}) for manual initialization
1 parent 5a6c4d6 commit feac635

File tree

8 files changed

+42
-7
lines changed

8 files changed

+42
-7
lines changed

src/auth/auth.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,16 @@
11
import { Injectable, Inject, Optional, NgZone, PLATFORM_ID } from '@angular/core';
22
import { Observable, of, from } from 'rxjs';
33
import { switchMap } from 'rxjs/operators';
4-
import { FirebaseAppConfig, FirebaseOptions } from '@angular/fire';
4+
import { FirebaseAppConfig, FirebaseOptions, TypicalDependencyInjection } from '@angular/fire';
55
import { User, auth } from 'firebase/app';
66

77
import { FirebaseAuth, FirebaseOptionsToken, FirebaseNameOrConfigToken, _firebaseAppFactory, FirebaseZoneScheduler } from '@angular/fire';
88

9+
// TODO clean up anys
10+
export const getInstance =
11+
(config: TypicalDependencyInjection) =>
12+
new AngularFireAuth(config.options,( <any>config).appName || (<any>config).appConfig, config.platformId, config.zone);
13+
914
@Injectable()
1015
export class AngularFireAuth {
1116

src/core/firebase.app.module.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,11 @@
1-
import { InjectionToken, NgModule, Optional } from '@angular/core';
1+
import { InjectionToken, NgModule, Optional, NgZone } from '@angular/core';
22
import { auth, database, firestore, functions, messaging, storage } from 'firebase/app';
33
// @ts-ignore (https://github.com/firebase/firebase-js-sdk/pull/1206)
44
import firebase from 'firebase/app'; // once fixed can pull in as "default as firebase" above
55

6+
export type AllowOnlyOneOf<T, Keys extends keyof T = keyof T> = Pick<T, Exclude<keyof T, Keys>> & { [K in Keys]-?: Partial<Record<Exclude<Keys, K>, undefined>> }[Keys]
7+
export type TypicalDependencyInjection = AllowOnlyOneOf<{ options: FirebaseOptions, platformId: Object, zone: NgZone, appName?: string, appConfig?: FirebaseAppConfig }, 'appName'|'appConfig'>;
8+
69
// Public types don't expose FirebaseOptions or FirebaseAppConfig
710
export type FirebaseOptions = {[key:string]: any};
811
export type FirebaseAppConfig = {[key:string]: any};

src/database/database.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,12 @@ import { getRef } from './utils';
44
import { InjectionToken } from '@angular/core';
55
import { createListReference } from './list/create-reference';
66
import { createObjectReference } from './object/create-reference';
7-
import { FirebaseDatabase, FirebaseOptions, FirebaseAppConfig, FirebaseOptionsToken, FirebaseNameOrConfigToken, RealtimeDatabaseURL, _firebaseAppFactory, FirebaseZoneScheduler } from '@angular/fire';
7+
import { FirebaseDatabase, FirebaseOptions, FirebaseAppConfig, FirebaseOptionsToken, FirebaseNameOrConfigToken, RealtimeDatabaseURL, _firebaseAppFactory, FirebaseZoneScheduler, TypicalDependencyInjection } from '@angular/fire';
8+
9+
// TODO clean up anys
10+
export const getInstance =
11+
(config: TypicalDependencyInjection & { databaseURL?: string }) =>
12+
new AngularFireDatabase(config.options,( <any>config).appName || (<any>config).appConfig, config.databaseURL || null, config.platformId, config.zone);
813

914
@Injectable()
1015
export class AngularFireDatabase {

src/firestore/firestore.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import { Settings, PersistenceSettings, CollectionReference, DocumentReference,
66
import { AngularFirestoreDocument } from './document/document';
77
import { AngularFirestoreCollection } from './collection/collection';
88

9-
import { FirebaseFirestore, FirebaseOptions, FirebaseAppConfig, FirebaseOptionsToken, FirebaseNameOrConfigToken, _firebaseAppFactory, FirebaseZoneScheduler } from '@angular/fire';
9+
import { FirebaseFirestore, FirebaseOptions, FirebaseAppConfig, FirebaseOptionsToken, FirebaseNameOrConfigToken, _firebaseAppFactory, FirebaseZoneScheduler, TypicalDependencyInjection } from '@angular/fire';
1010
import { isPlatformServer } from '@angular/common';
1111

1212
import { firestore, SDK_VERSION } from 'firebase/app';
@@ -41,6 +41,11 @@ export function associateQuery(collectionRef: CollectionReference, queryFn = ref
4141
return { query, ref };
4242
}
4343

44+
// TODO clean up anys
45+
export const getInstance =
46+
(config: TypicalDependencyInjection & { enablePersistence?: boolean, settings?: Settings, persistenceSettings?: PersistenceSettings }) =>
47+
new AngularFirestore(config.options,( <any>config).appName || (<any>config).appConfig, config.enablePersistence || null, config.settings || null, config.platformId, config.zone, config.persistenceSettings || null);
48+
4449
/**
4550
* AngularFirestore Service
4651
*

src/functions/functions.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,16 @@
11
import { Injectable, Inject, Optional, NgZone, PLATFORM_ID, InjectionToken } from '@angular/core';
22
import { Observable, from } from 'rxjs';
33
import { map } from 'rxjs/operators';
4-
import { FirebaseOptions, FirebaseAppConfig } from '@angular/fire';
4+
import { FirebaseOptions, FirebaseAppConfig, TypicalDependencyInjection } from '@angular/fire';
55
import { FirebaseFunctions, FirebaseOptionsToken, FirebaseNameOrConfigToken, _firebaseAppFactory, FirebaseZoneScheduler } from '@angular/fire';
66

77
export const FunctionsRegionToken = new InjectionToken<string>('angularfire2.functions.region');
88

9+
// TODO clean up anys
10+
export const getInstance =
11+
(config: TypicalDependencyInjection & { region?: string }) =>
12+
new AngularFireFunctions(config.options,( <any>config).appName || (<any>config).appConfig || undefined, config.platformId, config.zone, config.region || null);
13+
914
@Injectable()
1015
export class AngularFireFunctions {
1116

src/messaging/messaging.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,14 @@ import { isPlatformServer } from '@angular/common';
33
import { messaging } from 'firebase/app';
44
import { Observable, empty, from, of, throwError } from 'rxjs';
55
import { mergeMap, catchError, map, switchMap, concat, defaultIfEmpty } from 'rxjs/operators';
6-
import { FirebaseOptions, FirebaseAppConfig, runOutsideAngular } from '@angular/fire';
6+
import { FirebaseOptions, FirebaseAppConfig, runOutsideAngular, TypicalDependencyInjection } from '@angular/fire';
77
import { FirebaseOptionsToken, FirebaseNameOrConfigToken, _firebaseAppFactory, FirebaseZoneScheduler } from '@angular/fire';
88

9+
// TODO clean up anys
10+
export const getInstance =
11+
(config: TypicalDependencyInjection) =>
12+
new AngularFireMessaging(config.options,( <any>config).appName || (<any>config).appConfig || undefined, config.platformId, config.zone);
13+
914
@Injectable()
1015
export class AngularFireMessaging {
1116
messaging: Observable<messaging.Messaging>;

src/performance/performance.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@ export type TraceOptions = {
1313
metric$?:{[key:string]: Observable<number>}
1414
};
1515

16+
export const getInstance = (options: { automaticallyTraceCoreNgMetrics?: boolean, appRef: ApplicationRef, zone: NgZone }) => new AngularFirePerformance(options.automaticallyTraceCoreNgMetrics || null, options.appRef, options.zone);
17+
1618
@Injectable()
1719
export class AngularFirePerformance {
1820

src/storage/storage.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,17 @@ import { Injectable, Inject, Optional, InjectionToken, NgZone, PLATFORM_ID } fro
22
import { createStorageRef, AngularFireStorageReference } from './ref';
33
import { createUploadTask, AngularFireUploadTask } from './task';
44
import { Observable } from 'rxjs';
5-
import { FirebaseStorage, FirebaseOptions, FirebaseAppConfig, FirebaseOptionsToken, FirebaseNameOrConfigToken, FirebaseZoneScheduler, _firebaseAppFactory } from '@angular/fire';
5+
import { FirebaseStorage, TypicalDependencyInjection, FirebaseOptions, FirebaseAppConfig, FirebaseOptionsToken, FirebaseNameOrConfigToken, FirebaseZoneScheduler, _firebaseAppFactory } from '@angular/fire';
66

77
import { UploadMetadata } from './interfaces';
88

99
export const StorageBucket = new InjectionToken<string>('angularfire2.storageBucket');
1010

11+
// TODO clean up anys
12+
export const getInstance =
13+
(config: TypicalDependencyInjection & { bucket?: string }) =>
14+
new AngularFireStorage(config.options,( <any>config).appName || (<any>config).appConfig, config.bucket || null, config.platformId, config.zone);
15+
1116
/**
1217
* AngularFireStorage Service
1318
*

0 commit comments

Comments
 (0)