-
Notifications
You must be signed in to change notification settings - Fork 2.2k
Expand file tree
/
Copy pathfirestore.module.ts
More file actions
82 lines (74 loc) · 2.49 KB
/
firestore.module.ts
File metadata and controls
82 lines (74 loc) · 2.49 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
import {
EnvironmentProviders,
InjectionToken,
Injector,
NgModule,
NgZone,
Optional,
makeEnvironmentProviders,
} from '@angular/core';
import { VERSION, ɵAngularFireSchedulers, ɵgetDefaultInstanceOf } from '@angular/fire';
import { FirebaseApp, FirebaseApps } from '@angular/fire/app';
import { AppCheckInstances } from '@angular/fire/app-check';
import { AuthInstances } from '@angular/fire/auth';
import { registerVersion } from 'firebase/app';
import { Firestore as FirebaseFirestore } from 'firebase/firestore';
import { FIRESTORE_PROVIDER_NAME, Firestore, FirestoreInstances } from './firestore';
export const PROVIDED_FIRESTORE_INSTANCES = new InjectionToken<Firestore[]>('angularfire2.firestore-instances');
export function defaultFirestoreInstanceFactory(provided: FirebaseFirestore[]|undefined, defaultApp: FirebaseApp) {
const defaultFirestore = ɵgetDefaultInstanceOf<FirebaseFirestore>(FIRESTORE_PROVIDER_NAME, provided, defaultApp);
return defaultFirestore && new Firestore(defaultFirestore);
}
export function firestoreInstanceFactory(fn: (injector: Injector) => FirebaseFirestore) {
return (zone: NgZone, injector: Injector) => {
const firestore = zone.runOutsideAngular(() => fn(injector));
return new Firestore(firestore);
};
}
const FIRESTORE_INSTANCES_PROVIDER = {
provide: FirestoreInstances,
deps: [
[new Optional(), PROVIDED_FIRESTORE_INSTANCES ],
]
};
const DEFAULT_FIRESTORE_INSTANCE_PROVIDER = {
provide: Firestore,
useFactory: defaultFirestoreInstanceFactory,
deps: [
[new Optional(), PROVIDED_FIRESTORE_INSTANCES ],
FirebaseApp,
]
};
@NgModule({
providers: [
DEFAULT_FIRESTORE_INSTANCE_PROVIDER,
FIRESTORE_INSTANCES_PROVIDER,
]
})
export class FirestoreModule {
constructor() {
registerVersion('angularfire', VERSION.full, 'fst');
}
}
export function provideFirestore(fn: (injector: Injector) => FirebaseFirestore, ...deps: any[]): EnvironmentProviders {
registerVersion('angularfire', VERSION.full, 'fst');
return makeEnvironmentProviders([
DEFAULT_FIRESTORE_INSTANCE_PROVIDER,
FIRESTORE_INSTANCES_PROVIDER,
{
provide: PROVIDED_FIRESTORE_INSTANCES,
useFactory: firestoreInstanceFactory(fn),
multi: true,
deps: [
NgZone,
Injector,
ɵAngularFireSchedulers,
FirebaseApps,
// Firestore+Auth work better if Auth is loaded first
[new Optional(), AuthInstances ],
[new Optional(), AppCheckInstances ],
...deps,
]
}
]);
}