@nx-ddd/firestore-angular-adapter 17.1.0 → 17.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,7 +1,53 @@
1
- # firestore-angular-adapter
1
+ # @NxDDD/FirestoreAngularAdapter
2
+ `@nx-ddd/firestore-angular-adapter` is an Angular plugin for @nx-ddd/firestore.
2
3
 
3
- This library was generated with [Nx](https://nx.dev).
4
+ ## Install
5
+ ```sh
6
+ $ npm i @nx-ddd/firestore-angular-adapter
7
+ ```
4
8
 
5
- ## Running unit tests
9
+ ## Usage
10
+ ```ts
11
+ // apps/app/src/app/main.ts
12
+ import 'reflect-metadata';
13
+ import '@angular/compiler';
14
+ import { provideFirestoreAdapter } from '@nx-ddd/firestore/adapters/firebase';
15
+ import { UserRepository } from 'libs/common/infrastructure/repositories/user.repository';
16
+ import { initializeApp, provideFirebaseApp } from '@angular/fire/app';
17
+ import { getFirestore, provideFirestore } from '@angular/fire/firestore';
18
+ import dayjs from 'dayjs';
6
19
 
7
- Run `nx test firestore-angular-adapter` to execute the unit tests.
20
+ const app = initializeApp({...});
21
+
22
+ export const appConfig: ApplicationConfig = {
23
+ providers: [
24
+ importProvidersFrom(
25
+ provideFirebaseApp(() => initializeApp(environment.firebase)),
26
+ provideFirestore(() => getFirestore()),
27
+ BrowserModule,
28
+ HttpClientModule,
29
+ provideFirestoreAdapter(),
30
+ ),
31
+ ]
32
+ };
33
+
34
+ @Component({
35
+ selector: 'app'
36
+ })
37
+ export class App {
38
+ repository = injector.get(UserRepository);
39
+
40
+ await repository.create({
41
+ id: '0001',
42
+ name: 'test',
43
+ createdAt: dayjs('2022-01-01'),
44
+ updatedAt: dayjs('2022-01-01'),
45
+ });
46
+ const user = await repository.get({id: '0001'});
47
+ console.debug('user:', user);
48
+ }
49
+
50
+ bootstrapApplication(App, appConfig).catch((err) =>
51
+ console.error(err)
52
+ );
53
+ ```
@@ -1,19 +1,49 @@
1
- import { Injectable } from '@angular/core';
2
- import { doc, collection, collectionGroup, Timestamp, setDoc, getDoc, deleteDoc, getDocs, onSnapshot, updateDoc, Firestore, runTransaction, writeBatch, limit, orderBy, query, where, documentId, FieldValue, serverTimestamp } from '@angular/fire/firestore';
3
- import { FirestoreAdapter } from '@nx-ddd/firestore/adapters/base';
1
+ import { inject, Injectable } from '@angular/core';
2
+ import { doc, collection, collectionGroup, Timestamp, setDoc, getDoc, deleteDoc, getDocs, onSnapshot, updateDoc, Firestore, runTransaction, writeBatch, limit, orderBy, query, where, documentId, FieldValue, serverTimestamp, getCountFromServer } from '@angular/fire/firestore';
3
+ import { FirestoreAdapter, provideFirestoreAdapter as _provideFirestoreAdapter, } from '@nx-ddd/firestore/adapters/base';
4
4
  import dayjs from 'dayjs';
5
5
  import { Observable, map } from 'rxjs';
6
- import { InjectionToken } from '@angular/core';
7
6
  import * as i0 from "@angular/core";
8
- import * as i1 from "@angular/fire/firestore";
9
7
  function asObservable(ref, _onSnapshot) {
10
8
  return new Observable((observer) => _onSnapshot(ref, (value) => observer.next(value), (error) => observer.error(error), () => observer.complete()));
11
9
  }
12
- export const FIREBASE_ADAPTER = new InjectionToken('ANGULAR_FIRESTORE_ADAPTER');
10
+ export function wrapDocumentReference(origin) {
11
+ return {
12
+ __ref: origin,
13
+ exists: () => getDoc(origin).then(snapshot => snapshot.exists()),
14
+ set: (data) => setDoc(origin, data),
15
+ get: () => getDoc(origin),
16
+ update: (data) => updateDoc(origin, data),
17
+ delete: () => deleteDoc(origin),
18
+ stateChanges: () => {
19
+ return new Observable((observer) => {
20
+ return onSnapshot(origin, value => observer.next(value), error => observer.error(error), () => observer.complete());
21
+ }).pipe(map((snapshot) => ({
22
+ id: snapshot.id,
23
+ ref: snapshot.ref,
24
+ data: () => snapshot.data(),
25
+ get: (fieldPath) => snapshot.get(fieldPath),
26
+ })));
27
+ },
28
+ };
29
+ }
30
+ export function wrapCollectionLike(origin) {
31
+ return {
32
+ __ref: origin,
33
+ stateChanges: () => asObservable(origin, onSnapshot).pipe(map((snapshot) => snapshot.docChanges().map(change => ({
34
+ type: change.type, payload: { doc: change.doc },
35
+ })))),
36
+ get: () => getDocs(origin),
37
+ count: () => getCountFromServer(origin).then(count => count.data().count),
38
+ };
39
+ }
40
+ export function unwrapCollectionLike(collection) {
41
+ return collection.__ref;
42
+ }
13
43
  export class AngularFirestoreAdapter extends FirestoreAdapter {
14
- constructor(firestore) {
15
- super();
16
- this.firestore = firestore;
44
+ constructor() {
45
+ super(...arguments);
46
+ this.firestore = inject(Firestore);
17
47
  }
18
48
  get FieldValue() {
19
49
  return Object.assign(FieldValue, { serverTimestamp });
@@ -43,52 +73,20 @@ export class AngularFirestoreAdapter extends FirestoreAdapter {
43
73
  }
44
74
  doc(path) {
45
75
  const docRef = doc(this.firestore, path);
46
- return {
47
- __ref: docRef,
48
- exists: () => getDoc(docRef).then(snapshot => snapshot.exists()),
49
- set: (data) => setDoc(docRef, data),
50
- get: () => getDoc(docRef),
51
- update: (data) => updateDoc(docRef, data),
52
- delete: () => deleteDoc(docRef),
53
- stateChanges: () => {
54
- return new Observable((observer) => {
55
- return onSnapshot(docRef, value => observer.next(value), error => observer.error(error), () => observer.complete());
56
- }).pipe(map((snapshot) => ({ id: snapshot.id, ref: snapshot.ref, data: () => snapshot.data() })));
57
- },
58
- };
76
+ return wrapDocumentReference(docRef);
59
77
  }
60
78
  collection(path) {
61
79
  const ref = collection(this.firestore, path);
62
- return {
63
- __ref: ref,
64
- stateChanges: () => asObservable(ref, onSnapshot).pipe(map((snapshot) => snapshot.docChanges().map(change => ({
65
- type: change.type, payload: { doc: change.doc },
66
- })))),
67
- get: () => getDocs(ref),
68
- };
80
+ return wrapCollectionLike(ref);
69
81
  }
70
82
  collectionGroup(collectionId) {
71
83
  const ref = collectionGroup(this.firestore, collectionId);
72
- return {
73
- __ref: ref,
74
- stateChanges: () => asObservable(ref, onSnapshot).pipe(map((snapshot) => snapshot.docChanges().map(change => ({
75
- type: change.type, payload: { doc: change.doc },
76
- })))),
77
- get: () => getDocs(ref),
78
- };
79
- }
80
- runTransaction(fn) {
81
- return runTransaction(this.firestore, fn);
84
+ return wrapCollectionLike(ref);
82
85
  }
83
86
  query(collection, ...queryFnArray) {
84
- const ref = query(collection.__ref, ...queryFnArray.map(queryFn => queryFn()));
85
- return {
86
- __ref: ref,
87
- stateChanges: () => asObservable(ref, onSnapshot).pipe(map((snapshot) => snapshot.docChanges().map(change => ({
88
- type: change.type, payload: { doc: change.doc },
89
- })))),
90
- get: () => getDocs(ref),
91
- };
87
+ const ref = unwrapCollectionLike(collection);
88
+ const _query = query(ref, ...queryFnArray.map(queryFn => queryFn()));
89
+ return wrapCollectionLike(_query);
92
90
  }
93
91
  where(fieldPath, opStr, value) {
94
92
  return () => where(fieldPath, opStr, value);
@@ -99,16 +97,23 @@ export class AngularFirestoreAdapter extends FirestoreAdapter {
99
97
  limit(n) {
100
98
  return () => limit(n);
101
99
  }
100
+ runTransaction(fn) {
101
+ return runTransaction(this.firestore, fn);
102
+ }
102
103
  batch() {
103
104
  return writeBatch(this.firestore);
104
105
  }
105
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.2", ngImport: i0, type: AngularFirestoreAdapter, deps: [{ token: i1.Firestore }], target: i0.ɵɵFactoryTarget.Injectable }); }
106
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.2", ngImport: i0, type: AngularFirestoreAdapter, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
106
107
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.2.2", ngImport: i0, type: AngularFirestoreAdapter }); }
107
108
  }
108
109
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.2", ngImport: i0, type: AngularFirestoreAdapter, decorators: [{
109
110
  type: Injectable
110
- }], ctorParameters: () => [{ type: i1.Firestore }] });
111
+ }] });
112
+ /** @deprecated use `provideFirestoreAdapter()` instead. */
111
113
  export function provideAngularFirestoreAdapter() {
112
114
  return { provide: FirestoreAdapter, useClass: AngularFirestoreAdapter };
113
115
  }
114
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5ndWxhci1maXJlc3RvcmUuYWRhcHRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL0BueC1kZGQvZmlyZXN0b3JlLWFuZ3VsYXItYWRhcHRlci9zcmMvbGliL2FuZ3VsYXItZmlyZXN0b3JlLmFkYXB0ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBWSxNQUFNLGVBQWUsQ0FBQztBQUNyRCxPQUFPLEVBQ0wsR0FBRyxFQUFFLFVBQVUsRUFBRSxlQUFlLEVBQ2hDLFNBQVMsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQzdDLFVBQVUsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLGNBQWMsRUFBRSxVQUFVLEVBQzVELEtBQUssRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBNEIsVUFBVSxFQUFFLFVBQVUsRUFBRSxlQUFlLEVBQ2hHLE1BQU0seUJBQXlCLENBQUM7QUFDakMsT0FBTyxFQUFFLGdCQUFnQixFQUEwQixNQUFNLGlDQUFpQyxDQUFDO0FBTzNGLE9BQU8sS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUMxQixPQUFPLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN2QyxPQUFPLEVBQVUsY0FBYyxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7QUFHdkQsU0FBUyxZQUFZLENBQ25CLEdBQXFDLEVBQ3JDLFdBQThCO0lBRTlCLE9BQU8sSUFBSSxVQUFVLENBQW1CLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxXQUFXLENBQy9ELEdBQUcsRUFDSCxDQUFDLEtBQVUsRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFDcEMsQ0FBQyxLQUFVLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEVBQ3JDLEdBQUcsRUFBRSxDQUFD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QUVELEtBQUssQ0FBTyxDQUFTO1FBQ25CLE9BQU8sR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3hCLENBQUM7SUFFRCxLQUFLO1FBQ0gsT0FBTyxVQUFVLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ3BDLENBQUM7OEdBbEhVLHVCQUF1QjtrSEFBdkIsdUJBQXVCOzsyRkFBdkIsdUJBQXVCO2tCQURuQyxVQUFVOztBQXNIWCxNQUFNLFVBQVUsOEJBQThCO0lBQzVDLE9BQU8sRUFBRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsUUFBUSxFQUFFLHVCQUF1QixFQUFFLENBQUM7QUFDMUUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIFByb3ZpZGVyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBcbiAgZG9jLCBjb2xsZWN0aW9uLCBjb2xsZWN0aW9uR3JvdXAsXG4gIFRpbWVzdGFtcCwgc2V0RG9jLCBnZXREb2MsIGRlbGV0ZURvYywgZ2V0RG9jcywgXG4gIG9uU25hcHNob3QsIHVwZGF0ZURvYywgRmlyZXN0b3JlLCBydW5UcmFuc2FjdGlvbiwgd3JpdGVCYXRjaCxcbiAgbGltaXQsIG9yZGVyQnksIHF1ZXJ5LCB3aGVyZSwgUXVlcnlTbmFwc2hvdCwgRmllbGRQYXRoLCBkb2N1bWVudElkLCBGaWVsZFZhbHVlLCBzZXJ2ZXJUaW1lc3RhbXBcbn0gZnJvbSAnQGFuZ3VsYXIvZmlyZS9maXJlc3RvcmUnO1xuaW1wb3J0IHsgRmlyZXN0b3JlQWRhcHRlciwgUXVlcnlGbiwgV2hlcmVGaWx0ZXJPcCB9IGZyb20gJ0BueC1kZGQvZmlyZXN0b3JlL2FkYXB0ZXJzL2Jhc2UnO1xuaW1wb3J0IHtcbiAgRG9jdW1lbnRTbmFwc2hvdCxcbiAgRmlyZXN0b3JlQ29sbGVjdGlvbixcbiAgRmlyZXN0b3JlQ29sbGVjdGlvbkdyb3VwLFxuICBGaXJlc3RvcmVEb2N1bWVudFxufSBmcm9tICdAbngtZGRkL2ZpcmVzdG9yZS9pbnRlcmZhY2VzJztcbmltcG9ydCBkYXlqcyBmcm9tICdkYXlqcyc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBtYXAgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGluamVjdCwgSW5qZWN0aW9uVG9rZW4gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuXG5mdW5jdGlvbiBhc09ic2VydmFibGU8VCA9IHVua25vd24+KFxuICByZWY6IFBhcmFtZXRlcnM8dHlwZW9mIG9uU25hcHNob3Q+WzBdLFxuICBfb25TbmFwc2hvdDogdHlwZW9mIG9uU25hcHNob3QsXG4pOiBPYnNlcnZhYmxlPFF1ZXJ5U25hcHNob3Q8VD4+IHtcbiAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlPFF1ZXJ5U25hcHNob3Q8VD4+KChvYnNlcnZlcikgPT4gX29uU25hcHNob3QoXG4gICAgcmVmLCBcbiAgICAodmFsdWU6IGFueSkgPT4gb2JzZXJ2ZXIubmV4dCh2YWx1ZSksXG4gICAgKGVycm9yOiBhbnkpID0+IG9ic2VydmVyLmVycm9yKGVycm9yKSxcbiAgICAoKSA9PiBvYnNlcnZlci5jb21wbGV0ZSgpKSxcbiAgKTtcbn1cblxuZXhwb3J0IGNvbnN0IEZJUkVCQVNFX0FEQVBURVIgPSBuZXcgSW5qZWN0aW9uVG9rZW48QW5ndWxhckZpcmVzdG9yZUFkYXB0ZXI+KCdBTkdVTEFSX0ZJUkVTVE9SRV9BREFQVEVSJyk7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBBbmd1bGFyRmlyZXN0b3JlQWRhcHRlciBleHRlbmRzIEZpcmVzdG9yZUFkYXB0ZXI8ZGF5anMuRGF5anM+IHtcblxuICBjb25zdHJ1Y3RvcihwdWJsaWMgZmlyZXN0b3JlOiBGaXJlc3RvcmUpIHsgc3VwZXIoKSB9XG5cbiAgZ2V0IEZpZWxkVmFsdWUoKTogdHlwZW9mIEZpZWxkVmFsdWUgJiB7c2VydmVyVGltZXN0YW1wOiAoKSA9PiBGaWVsZFZhbHVlfSB7XG4gICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oRmllbGRWYWx1ZSwge3NlcnZlclRpbWVzdGFtcH0pO1xuICB9XG5cbiAgZ2V0IFRpbWVzdGFtcCgpOiB0eXBlb2YgVGltZXN0YW1wIHtcbiAgICByZXR1cm4gVGltZXN0YW1wOyAgXG4gIH1cblxuICBnZXQgRmllbGRQYXRoKCk6IHtkb2N1bWVudElkOiAoKSA9PiBGaWVsZFBhdGh9IHtcbiAgICByZXR1cm4ge1xuICAgICAgZG9jdW1lbnRJZDogKCkgPT4gZG9jdW1lbnRJZCgpLFxuICAgIH07XG4gIH1cblxuICBwcm90ZWN0ZWQgaXNUaW1lc3RhbXAodjogYW55KTogdiBpcyBUaW1lc3RhbXAge1xuICAgIHJldHVybiB2IGluc3RhbmNlb2YgVGltZXN0YW1wO1xuICB9XG5cbiAgcHJvdGVjdGVkIGlzRmllbGRWYWx1ZSh2OiBhbnkpOiB2IGlzIEZpZWxkVmFsdWUge1xuICAgIHJldHVybiB2IGluc3RhbmNlb2YgdGhpcy5GaWVsZFZhbHVlO1xuICB9XG4gIFxuICBwcm90ZWN0ZWQgaXNEYXRlKHY6IGFueSk6IHYgaXMgZGF5anMuRGF5anMge1xuICAgIHJldHVybiBkYXlqcy5pc0RheWpzKHYpO1xuICB9XG5cbiAgY29udmVydERhdGVUb1RpbWVzdGFtcChkYXRlOiBkYXlqcy5EYXlqcyk6IFRpbWVzdGFtcCB7XG4gICAgcmV0dXJuIFRpbWVzdGFtcC5mcm9tRGF0ZShkYXRlLnRvRGF0ZSgpKTtcbiAgfVxuXG4gIGNvbnZlcnRUaW1lc3RhbXBUb0RhdGUodGltZXN0YW1wOiBUaW1lc3RhbXApOiBkYXlqcy5EYXlqcyB7XG4gICAgcmV0dXJuIGRheWpzKHRpbWVzdGFtcC50b0RhdGUoKSk7XG4gIH1cblxuICBkb2MocGF0aDogc3RyaW5nKTogRmlyZXN0b3JlRG9jdW1lbnQ8YW55PiB7XG4gICAgY29uc3QgZG9jUmVmID0gZG9jKHRoaXMuZmlyZXN0b3JlLCBwYXRoKTtcbiAgICByZXR1cm4ge1xuICAgICAgX19yZWY6IGRvY1JlZixcbiAgICAgIGV4aXN0czogKCkgPT4gZ2V0RG9jKGRvY1JlZikudGhlbihzbmFwc2hvdCA9PiBzbmFwc2hvdC5leGlzdHMoKSksXG4gICAgICBzZXQ6IChkYXRhKSA9PiBzZXREb2MoZG9jUmVmLCBkYXRhKSxcbiAgICAgIGdldDogKCkgPT4gZ2V0RG9jKGRvY1JlZiksXG4gICAgICB1cGRhdGU6IChkYXRhKSA9PiB1cGRhdGVEb2MoZG9jUmVmLCBkYXRhKSxcbiAgICAgIGRlbGV0ZTogKCkgPT4gZGVsZXRlRG9jKGRvY1JlZiksXG4gICAgICBzdGF0ZUNoYW5nZXM6ICgpID0+IHtcbiAgICAgICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlPERvY3VtZW50U25hcHNob3Q8YW55Pj4oKG9ic2VydmVyKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIG9uU25hcHNob3QoZG9jUmVmLCB2YWx1ZSA9PiBvYnNlcnZlci5uZXh0KHZhbHVlKSwgZXJyb3IgPT4gb2JzZXJ2ZXIuZXJyb3IoZXJyb3IpLCAoKSA9PiBvYnNlcnZlci5jb21wbGV0ZSgpKTtcbiAgICAgICAgfSkucGlwZShcbiAgICAgICAgICBtYXAoKHNuYXBzaG90KSA9PiAoe2lkOiBzbmFwc2hvdC5pZCwgcmVmOiBzbmFwc2hvdC5yZWYsIGRhdGE6ICgpID0+IHNuYXBzaG90LmRhdGEoKX0pKSxcbiAgICAgICAgKTtcbiAgICAgIH0sXG4gICAgfVxuICB9XG5cbiAgY29sbGVjdGlvbihwYXRoOiBzdHJpbmcpOiBGaXJlc3RvcmVDb2xsZWN0aW9uPGFueT4ge1xuICAgIGNvbnN0IHJlZiA9IGNvbGxlY3Rpb24odGhpcy5maXJlc3RvcmUsIHBhdGgpO1xuICAgIHJldHVybiB7XG4gICAgICBfX3JlZjogcmVmLFxuICAgICAgc3RhdGVDaGFuZ2VzOiAoKSA9PiBhc09ic2VydmFibGU8dW5rbm93bj4ocmVmLCBvblNuYXBzaG90KS5waXBlKFxuICAgICAgICBtYXAoKHNuYXBzaG90KSA9PiBzbmFwc2hvdC5kb2NDaGFuZ2VzKCkubWFwKGNoYW5nZSA9PiAoe1xuICAgICAgICAgIHR5cGU6IGNoYW5nZS50eXBlLCBwYXlsb2FkOiB7ZG9jOiBjaGFuZ2UuZG9jfSxcbiAgICAgICAgfSkpKSxcbiAgICAgICksXG4gICAgICBnZXQ6ICgpID0+IGdldERvY3MocmVmKSxcbiAgICB9XG4gIH1cblxuICBjb2xsZWN0aW9uR3JvdXAoY29sbGVjdGlvbklkOiBzdHJpbmcpOiBGaXJlc3RvcmVDb2xsZWN0aW9uR3JvdXA8YW55PiB7XG4gICAgY29uc3QgcmVmID0gY29sbGVjdGlvbkdyb3VwKHRoaXMuZmlyZXN0b3JlLCBjb2xsZWN0aW9uSWQpO1xuICAgIHJldHVybiAge1xuICAgICAgX19yZWY6IHJlZixcbiAgICAgIHN0YXRlQ2hhbmdlczogKCkgPT4gYXNPYnNlcnZhYmxlPHVua25vd24+KHJlZiwgb25TbmFwc2hvdCkucGlwZShcbiAgICAgICAgbWFwKChzbmFwc2hvdCkgPT4gc25hcHNob3QuZG9jQ2hhbmdlcygpLm1hcChjaGFuZ2UgPT4gKHtcbiAgICAgICAgICB0eXBlOiBjaGFuZ2UudHlwZSwgcGF5bG9hZDoge2RvYzogY2hhbmdlLmRvY30sXG4gICAgICAgIH0pKSksXG4gICAgICApLFxuICAgICAgZ2V0OiAoKSA9PiBnZXREb2NzKHJlZiksXG4gICAgfVxuICB9XG5cbiAgcnVuVHJhbnNhY3Rpb24oZm46IFBhcmFtZXRlcnM8dHlwZW9mIHJ1blRyYW5zYWN0aW9uPlsxXSkge1xuICAgIHJldHVybiBydW5UcmFuc2FjdGlvbih0aGlzLmZpcmVzdG9yZSwgZm4pO1xuICB9XG5cbiAgcXVlcnk8RGF0YT4oY29sbGVjdGlvbjogRmlyZXN0b3JlQ29sbGVjdGlvbjxEYXRhPiwgLi4ucXVlcnlGbkFycmF5OiBRdWVyeUZuPERhdGE+W10pOiBhbnkge1xuICAgIGNvbnN0IHJlZiA9IHF1ZXJ5KGNvbGxlY3Rpb24uX19yZWYsIC4uLnF1ZXJ5Rm5BcnJheS5tYXAocXVlcnlGbiA9PiBxdWVyeUZuKCkpKTtcbiAgICByZXR1cm4gIHtcbiAgICAgIF9fcmVmOiByZWYsXG4gICAgICBzdGF0ZUNoYW5nZXM6ICgpID0+IGFzT2JzZXJ2YWJsZTx1bmtub3duPihyZWYsIG9uU25hcHNob3QpLnBpcGUoXG4gICAgICAgIG1hcCgoc25hcHNob3QpID0+IHNuYXBzaG90LmRvY0NoYW5nZXMoKS5tYXAoY2hhbmdlID0+ICh7XG4gICAgICAgICAgdHlwZTogY2hhbmdlLnR5cGUsIHBheWxvYWQ6IHtkb2M6IGNoYW5nZS5kb2N9LFxuICAgICAgICB9KSkpLFxuICAgICAgKSxcbiAgICAgIGdldDogKCkgPT4gZ2V0RG9jcyhyZWYpLFxuICAgIH1cbiAgfVxuXG4gIHdoZXJlPERhdGE+KGZpZWxkUGF0aDogc3RyaW5nLCBvcFN0cjogV2hlcmVGaWx0ZXJPcCwgdmFsdWU6IHVua25vd24pOiBRdWVyeUZuPERhdGE+IHtcbiAgICByZXR1cm4gKCkgPT4gd2hlcmUoZmllbGRQYXRoLCBvcFN0ciwgdmFsdWUpO1xuICB9XG5cbiAgb3JkZXJCeTxEYXRhPihrZXk6IHN0cmluZywgb3JkZXI6ICdhc2MnIHwgJ2Rlc2MnID0gJ2FzYycpOiBRdWVyeUZuPERhdGE+IHtcbiAgICByZXR1cm4gKCkgPT4gb3JkZXJCeShrZXksIG9yZGVyKTtcbiAgfVxuXG4gIGxpbWl0PERhdGE+KG46IG51bWJlcik6IFF1ZXJ5Rm48RGF0YT4ge1xuICAgIHJldHVybiAoKSA9PiBsaW1pdChuKTtcbiAgfVxuICBcbiAgYmF0Y2goKSB7XG4gICAgcmV0dXJuIHdyaXRlQmF0Y2godGhpcy5maXJlc3RvcmUpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm92aWRlQW5ndWxhckZpcmVzdG9yZUFkYXB0ZXIoKTogUHJvdmlkZXIge1xuICByZXR1cm4geyBwcm92aWRlOiBGaXJlc3RvcmVBZGFwdGVyLCB1c2VDbGFzczogQW5ndWxhckZpcmVzdG9yZUFkYXB0ZXIgfTtcbn0iXX0=
116
+ export function provideFirestoreAdapter() {
117
+ return _provideFirestoreAdapter(AngularFirestoreAdapter);
118
+ }
119
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5ndWxhci1maXJlc3RvcmUuYWRhcHRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL0BueC1kZGQvZmlyZXN0b3JlLWFuZ3VsYXItYWRhcHRlci9zcmMvbGliL2FuZ3VsYXItZmlyZXN0b3JlLmFkYXB0ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQVksTUFBTSxlQUFlLENBQUM7QUFDN0QsT0FBTyxFQUNMLEdBQUcsRUFBRSxVQUFVLEVBQUUsZUFBZSxFQUNoQyxTQUFTLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUM3QyxVQUFVLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxjQUFjLEVBQUUsVUFBVSxFQUM1RCxLQUFLLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQTRCLFVBQVUsRUFBRSxVQUFVLEVBQUUsZUFBZSxFQUMvRixrQkFBa0IsRUFDbkIsTUFBTSx5QkFBeUIsQ0FBQztBQUNqQyxPQUFPLEVBQ0wsZ0JBQWdCLEVBR2hCLHVCQUF1QixJQUFJLHdCQUF3QixHQUNwRCxNQUFNLGlDQUFpQyxDQUFDO0FBU3pDLE9BQU8sS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUMxQixPQUFPLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBRSxNQUFNLE1BQU0sQ0FBQzs7QUEyQ3ZDLFNBQVMsWUFBWSxDQUNuQixHQUFxQyxFQUNyQyxXQUE4QjtJQUU5QixPQUFPLElBQUksVUFBVSxDQUFtQixDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsV0FBVyxDQUMvRCxHQUFHLEVBQ0gsQ0FBQyxLQUFVLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQ3BDLENBQUMsS0FBVSxFQUFFLEVBQUUsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxFQUNyQyxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FDM0IsQ0FBQztBQUNKLENBQUM7QUFFRCxNQUFNLFVBQVUscUJBQXFCLENBR25DLE1BQThEO0lBQzlELE9BQU87UUFDTCxLQUFLLEVBQUUsTUFBTTtRQUNiLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ2hFLEdBQUcsRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUM7UUFDbkMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUM7UUFDekIsTUFBTSxFQUFFLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFLElBQVcsQ0FBQztRQUNoRCxNQUFNLEVBQUUsR0FBRyxFQUFFLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQztRQUMvQixZQUFZLEVBQUUsR0FBRyxFQUFFO1lBQ2pCLE9BQU8sSUFBSSxVQUFVLENBQXdCLENBQUMsUUFBUSxFQUFFLEVBQUU7Z0JBQ3hELE9BQU8sVUFBVSxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsS0FBSyxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1lBQ3RILENBQUMsQ0FBQyxDQUFDLElBQUksQ0FDTCxHQUFHLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLENBQUM7Z0JBQ2pCLEVBQUUsRUFBRSxRQUFRLENBQUMsRUFBRTtnQkFDZixHQUFHLEVBQUUsUUFBUSxDQUFDLEdBQUc7Z0JBQ2pCLElBQUksRUFBRSxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFO2dCQUMzQixHQUFHLEVBQUUsQ0FBQyxTQUFpQixFQUFFLEVBQUUsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQzthQUNwRCxDQUFDLENBQUMsQ0FDSixDQUFDO1FBQ0osQ0FBQztLQUNGLENBQUE7QUFDSCxDQUFDO0FBRUQsTUFBTSxVQUFVLGtCQUFrQixDQUVoQyxNQUFTO0lBQ1QsT0FBTztRQUNMLEtBQUssRUFBRSxNQUFNO1FBQ2IsWUFBWSxFQUFFLEdBQUcsRUFBRSxDQUFDLFlBQVksQ0FBVSxNQUFNLEVBQUUsVUFBVSxDQUFDLENBQUMsSUFBSSxDQUNoRSxHQUFHLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ3JELElBQUksRUFBRSxNQUFNLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxFQUFDLEdBQUcsRUFBRSxNQUFNLENBQUMsR0FBRyxFQUFDO1NBQzlDLENBQUMsQ0FBQyxDQUFDLENBQ0w7UUFDRCxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQztRQUMxQixLQUFLLEVBQUUsR0FBRyxFQUFFLENBQUMsa0JBQWtCLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLEtBQUssQ0FBQztLQUN2QyxDQUFDO0FBQ3ZDLENBQUM7QUFFRCxNQUFNLFVBQVUsb0JBQW9CLENBSWxDLFVBQXFEO0lBRXJELE9BQU8sVUFBVSxDQUFDLEtBQU0sQ0FBQztBQUMzQixDQUFDO0FBR0QsTUFBTSxPQUFPLHVCQUF3QixTQUFRLGdCQUE2QjtJQUQxRTs7UUFFcUIsY0FBUyxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztLQTJGbEQ7SUF6RkMsSUFBSSxVQUFVO1FBQ1osT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRSxFQUFDLGVBQWUsRUFBQyxDQUFDLENBQUM7SUFDdEQsQ0FBQztJQUVELElBQUksU0FBUztRQUNYLE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7SUFFRCxJQUFJLFNBQVM7UUFDWCxPQUFPO1lBQ0wsVUFBVSxFQUFFLEdBQUcsRUFBRSxDQUFDLFVBQVUsRUFBRTtTQUMvQixDQUFDO0lBQ0osQ0FBQztJQUVTLFdBQVcsQ0FBQyxDQUFNO1FBQzFCLE9BQU8sQ0FBQyxZQUFZLFNBQVMsQ0FBQztJQUNoQyxDQUFDO0lBRVMsWUFBWSxDQUFDLENBQU07UUFDM0IsT0FBTyxDQUFDLFlBQVksSUFBSSxDQUFDLFVBQVUsQ0FBQztJQUN0QyxDQUFDO0lBRVMsTUFBTSxDQUFDLENBQU07UUFDckIsT0FBTyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzFCLENBQUM7SUFFRCxzQkFBc0IsQ0FBQyxJQUFpQjtRQUN0QyxPQUFPLFNBQVMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7SUFDM0MsQ0FBQztJQUVELHNCQUFzQixDQUFDLFNBQW9CO1FBQ3pDLE9BQU8sS0FBSyxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO0lBQ25DLENBQUM7SUFFRCxHQUFHLENBR0QsSUFBWTtRQUNaLE1BQU0sTUFBTSxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ3pDLE9BQU8scUJBQXFCLENBQUMsTUFBTSxDQUFpRCxDQUFDO0lBQ3ZGLENBQUM7SUFFRCxVQUFVLENBR1IsSUFBWTtRQUNaLE1BQU0sR0FBRyxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQzdDLE9BQU8sa0JBQWtCLENBQUMsR0FBRyxDQUFtRCxDQUFDO0lBQ25GLENBQUM7SUFFRCxlQUFlLENBR2IsWUFBb0I7UUFDcEIsTUFBTSxHQUFHLEdBQUcsZUFBZSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsWUFBWSxDQUFDLENBQUM7UUFDMUQsT0FBTyxrQkFBa0IsQ0FBQyxHQUFHLENBQStDLENBQUM7SUFDL0UsQ0FBQztJQUVELEtBQUssQ0FJSCxVQUEwRCxFQUMxRCxHQUFHLFlBQXVCO1FBRTFCLE1BQU0sR0FBRyxHQUFHLG9CQUFvQixDQUFDLFVBQVUsQ0FBK0MsQ0FBQztRQUMzRixNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsR0FBRyxFQUFFLEdBQUcsWUFBWSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNyRSxPQUFPLGtCQUFrQixDQUFDLE1BQU0sQ0FBcUMsQ0FBQztJQUN4RSxDQUFDO0lBRUQsS0FBSyxDQUFPLFNBQWlCLEVBQUUsS0FBb0IsRUFBRSxLQUFjO1FBQ2pFLE9BQU8sR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDOUMsQ0FBQztJQUVELE9BQU8sQ0FBTyxHQUFXLEVBQUUsUUFBd0IsS0FBSztRQUN0RCxPQUFPLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDbkMsQ0FBQztJQUVELEtBQUssQ0FBTyxDQUFTO1FBQ25CLE9BQU8sR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3hCLENBQUM7SUFFRCxjQUFjLENBQUMsRUFBd0M7UUFDckQsT0FBTyxjQUFjLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBRUQsS0FBSztRQUNILE9BQU8sVUFBVSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUNwQyxDQUFDOzhHQTNGVSx1QkFBdUI7a0hBQXZCLHVCQUF1Qjs7MkZBQXZCLHVCQUF1QjtrQkFEbkMsVUFBVTs7QUErRlgsMkRBQTJEO0FBQzNELE1BQU0sVUFBVSw4QkFBOEI7SUFDNUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxRQUFRLEVBQUUsdUJBQXVCLEVBQUUsQ0FBQztBQUMxRSxDQUFDO0FBRUQsTUFBTSxVQUFVLHVCQUF1QjtJQUNyQyxPQUFPLHdCQUF3QixDQUFDLHVCQUF1QixDQUFDLENBQUM7QUFDM0QsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGluamVjdCwgSW5qZWN0YWJsZSwgUHJvdmlkZXIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFxuICBkb2MsIGNvbGxlY3Rpb24sIGNvbGxlY3Rpb25Hcm91cCxcbiAgVGltZXN0YW1wLCBzZXREb2MsIGdldERvYywgZGVsZXRlRG9jLCBnZXREb2NzLCBcbiAgb25TbmFwc2hvdCwgdXBkYXRlRG9jLCBGaXJlc3RvcmUsIHJ1blRyYW5zYWN0aW9uLCB3cml0ZUJhdGNoLFxuICBsaW1pdCwgb3JkZXJCeSwgcXVlcnksIHdoZXJlLCBRdWVyeVNuYXBzaG90LCBGaWVsZFBhdGgsIGRvY3VtZW50SWQsIEZpZWxkVmFsdWUsIHNlcnZlclRpbWVzdGFtcCxcbiAgZ2V0Q291bnRGcm9tU2VydmVyXG59IGZyb20gJ0Bhbmd1bGFyL2ZpcmUvZmlyZXN0b3JlJztcbmltcG9ydCB7XG4gIEZpcmVzdG9yZUFkYXB0ZXIsXG4gIFF1ZXJ5Rm4gYXMgX1F1ZXJ5Rm4sXG4gIFdoZXJlRmlsdGVyT3AsXG4gIHByb3ZpZGVGaXJlc3RvcmVBZGFwdGVyIGFzIF9wcm92aWRlRmlyZXN0b3JlQWRhcHRlcixcbn0gZnJvbSAnQG54LWRkZC9maXJlc3RvcmUvYWRhcHRlcnMvYmFzZSc7XG5pbXBvcnQge1xuICBEb2N1bWVudFNuYXBzaG90LFxuICBDb2xsZWN0aW9uUmVmZXJlbmNlIGFzIF9Db2xsZWN0aW9uUmVmZXJlbmNlLFxuICBDb2xsZWN0aW9uR3JvdXAgYXMgX0NvbGxlY3Rpb25Hcm91cCxcbiAgUXVlcnkgYXMgX1F1ZXJ5LFxuICBEb2N1bWVudERhdGEsXG4gIERvY3VtZW50UmVmZXJlbmNlLFxufSBmcm9tICdAbngtZGRkL2ZpcmVzdG9yZS9pbnRlcmZhY2VzJztcbmltcG9ydCBkYXlqcyBmcm9tICdkYXlqcyc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBtYXAgfSBmcm9tICdyeGpzJztcbmltcG9ydCB0eXBlIGZpcmVzdG9yZSBmcm9tICdmaXJlYmFzZS9maXJlc3RvcmUnO1xuXG50eXBlIENvbGxlY3Rpb25SZWZlcmVuY2U8XG4gIEFwcE1vZGVsVHlwZSA9IERvY3VtZW50RGF0YSxcbiAgRGJNb2RlbFR5cGUgZXh0ZW5kcyBEb2N1bWVudERhdGEgPSBEb2N1bWVudERhdGEsXG4+ID0gX0NvbGxlY3Rpb25SZWZlcmVuY2U8QXBwTW9kZWxUeXBlLCBEYk1vZGVsVHlwZSwgZmlyZXN0b3JlLkNvbGxlY3Rpb25SZWZlcmVuY2U8QXBwTW9kZWxUeXBlLCBEYk1vZGVsVHlwZT4+O1xuXG50eXBlIENvbGxlY3Rpb25Hcm91cDxcbiAgQXBwTW9kZWxUeXBlID0gRG9jdW1lbnREYXRhLFxuICBEYk1vZGVsVHlwZSBleHRlbmRzIERvY3VtZW50RGF0YSA9IERvY3VtZW50RGF0YVxuPiA9IF9Db2xsZWN0aW9uR3JvdXA8QXBwTW9kZWxUeXBlLCBEYk1vZGVsVHlwZSwgZmlyZXN0b3JlLlF1ZXJ5PEFwcE1vZGVsVHlwZSwgRGJNb2RlbFR5cGU+PjtcblxudHlwZSBRdWVyeTxcbiAgQXBwTW9kZWxUeXBlID0gRG9jdW1lbnREYXRhLFxuICBEYk1vZGVsVHlwZSBleHRlbmRzIERvY3VtZW50RGF0YSA9IERvY3VtZW50RGF0YVxuPiA9IF9RdWVyeTxBcHBNb2RlbFR5cGUsIERiTW9kZWxUeXBlLCBmaXJlc3RvcmUuUXVlcnk8QXBwTW9kZWxUeXBlLCBEYk1vZGVsVHlwZT4+O1xuXG50eXBlIFF1ZXJ5Rm48XG4gIEFwcE1vZGVsVHlwZSA9IERvY3VtZW50RGF0YSxcbiAgRGJNb2RlbFR5cGUgZXh0ZW5kcyBEb2N1bWVudERhdGEgPSBEb2N1bWVudERhdGFcbj4gPSBfUXVlcnlGbjxBcHBNb2RlbFR5cGUsIERiTW9kZWxUeXBlLCBmaXJlc3RvcmUuUXVlcnlDb25zdHJhaW50PlxuXG50eXBlIE9yaWdpbjxcbiAgQXBwTW9kZWxUeXBlID0gRG9jdW1lbnREYXRhLFxuICBEYk1vZGVsVHlwZSBleHRlbmRzIERvY3VtZW50RGF0YSA9IERvY3VtZW50RGF0YSxcbj4gPSBmaXJlc3RvcmUuQ29sbGVjdGlvblJlZmVyZW5jZTxBcHBNb2RlbFR5cGUsIERiTW9kZWxUeXBlPlxuICB8IGZpcmVzdG9yZS5RdWVyeTxBcHBNb2RlbFR5cGUsIERiTW9kZWxUeXBlPjtcblxudHlwZSBDb2xsZWN0aW9uTGlrZTxcbiAgQXBwTW9kZWxUeXBlID0gRG9jdW1lbnREYXRhLFxuICBEYk1vZGVsVHlwZSBleHRlbmRzIERvY3VtZW50RGF0YSA9IERvY3VtZW50RGF0YSxcbj4gPSBDb2xsZWN0aW9uUmVmZXJlbmNlPEFwcE1vZGVsVHlwZSwgRGJNb2RlbFR5cGU+IFxuICB8IENvbGxlY3Rpb25Hcm91cDxBcHBNb2RlbFR5cGUsIERiTW9kZWxUeXBlPlxuICB8IFF1ZXJ5PEFwcE1vZGVsVHlwZSwgRGJNb2RlbFR5cGU+O1xuXG4vLyBVdGlsaXR5IHR5cGUgdG8gbWFwIE9yaWdpbiB0byBDb2xsZWN0aW9uTGlrZVxudHlwZSBJbmZlckNvbGxlY3Rpb25MaWtlPE8gZXh0ZW5kcyBPcmlnaW4+ID0gXG4gIE8gZXh0ZW5kcyBmaXJlc3RvcmUuQ29sbGVjdGlvblJlZmVyZW5jZTxpbmZlciBBLCBpbmZlciBCPiA/IENvbGxlY3Rpb25SZWZlcmVuY2U8QSwgQj4gOlxuICBPIGV4dGVuZHMgZmlyZXN0b3JlLlF1ZXJ5PGluZmVyIEEsIGluZmVyIEI+ID8gUXVlcnk8QSwgQj4gOlxuICBuZXZlcjtcblxuXG5mdW5jdGlvbiBhc09ic2VydmFibGU8VCA9IHVua25vd24+KFxuICByZWY6IFBhcmFtZXRlcnM8dHlwZW9mIG9uU25hcHNob3Q+WzBdLFxuICBfb25TbmFwc2hvdDogdHlwZW9mIG9uU25hcHNob3QsXG4pOiBPYnNlcnZhYmxlPFF1ZXJ5U25hcHNob3Q8VD4+IHtcbiAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlPFF1ZXJ5U25hcHNob3Q8VD4+KChvYnNlcnZlcikgPT4gX29uU25hcHNob3QoXG4gICAgcmVmLCBcbiAgICAodmFsdWU6IGFueSkgPT4gb2JzZXJ2ZXIubmV4dCh2YWx1ZSksXG4gICAgKGVycm9yOiBhbnkpID0+IG9ic2VydmVyLmVycm9yKGVycm9yKSxcbiAgICAoKSA9PiBvYnNlcnZlci5jb21wbGV0ZSgpKSxcbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdyYXBEb2N1bWVudFJlZmVyZW5jZTxcbiAgQXBwTW9kZWxUeXBlID0gRG9jdW1lbnREYXRhLFxuICBEYk1vZGVsVHlwZSBleHRlbmRzIERvY3VtZW50RGF0YSA9IERvY3VtZW50RGF0YSxcbj4ob3JpZ2luOiBmaXJlc3RvcmUuRG9jdW1lbnRSZWZlcmVuY2U8QXBwTW9kZWxUeXBlLCBEYk1vZGVsVHlwZT4pOiBEb2N1bWVudFJlZmVyZW5jZTxBcHBNb2RlbFR5cGUsIERiTW9kZWxUeXBlPiB7XG4gIHJldHVybiB7XG4gICAgX19yZWY6IG9yaWdpbixcbiAgICBleGlzdHM6ICgpID0+IGdldERvYyhvcmlnaW4pLnRoZW4oc25hcHNob3QgPT4gc25hcHNob3QuZXhpc3RzKCkpLFxuICAgIHNldDogKGRhdGEpID0+IHNldERvYyhvcmlnaW4sIGRhdGEpLFxuICAgIGdldDogKCkgPT4gZ2V0RG9jKG9yaWdpbiksXG4gICAgdXBkYXRlOiAoZGF0YSkgPT4gdXBkYXRlRG9jKG9yaWdpbiwgZGF0YSBhcyBhbnkpLFxuICAgIGRlbGV0ZTogKCkgPT4gZGVsZXRlRG9jKG9yaWdpbiksXG4gICAgc3RhdGVDaGFuZ2VzOiAoKSA9PiB7XG4gICAgICByZXR1cm4gbmV3IE9ic2VydmFibGU8RG9jdW1lbnRTbmFwc2hvdDxhbnk+Pigob2JzZXJ2ZXIpID0+IHtcbiAgICAgICAgcmV0dXJuIG9uU25hcHNob3Qob3JpZ2luLCB2YWx1ZSA9PiBvYnNlcnZlci5uZXh0KHZhbHVlKSwgZXJyb3IgPT4gb2JzZXJ2ZXIuZXJyb3IoZXJyb3IpLCAoKSA9PiBvYnNlcnZlci5jb21wbGV0ZSgpKTtcbiAgICAgIH0pLnBpcGUoXG4gICAgICAgIG1hcCgoc25hcHNob3QpID0+ICh7XG4gICAgICAgICAgaWQ6IHNuYXBzaG90LmlkLFxuICAgICAgICAgIHJlZjogc25hcHNob3QucmVmLFxuICAgICAgICAgIGRhdGE6ICgpID0+IHNuYXBzaG90LmRhdGEoKSxcbiAgICAgICAgICBnZXQ6IChmaWVsZFBhdGg6IHN0cmluZykgPT4gc25hcHNob3QuZ2V0KGZpZWxkUGF0aCksXG4gICAgICAgIH0pKSxcbiAgICAgICk7XG4gICAgfSxcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gd3JhcENvbGxlY3Rpb25MaWtlPFxuICBPIGV4dGVuZHMgT3JpZ2luLFxuPihvcmlnaW46IE8pOiBJbmZlckNvbGxlY3Rpb25MaWtlPE8+IHtcbiAgcmV0dXJuIHtcbiAgICBfX3JlZjogb3JpZ2luLFxuICAgIHN0YXRlQ2hhbmdlczogKCkgPT4gYXNPYnNlcnZhYmxlPHVua25vd24+KG9yaWdpbiwgb25TbmFwc2hvdCkucGlwZShcbiAgICAgIG1hcCgoc25hcHNob3QpID0+IHNuYXBzaG90LmRvY0NoYW5nZXMoKS5tYXAoY2hhbmdlID0+ICh7XG4gICAgICAgIHR5cGU6IGNoYW5nZS50eXBlLCBwYXlsb2FkOiB7ZG9jOiBjaGFuZ2UuZG9jfSxcbiAgICAgIH0pKSksXG4gICAgKSxcbiAgICBnZXQ6ICgpID0+IGdldERvY3Mob3JpZ2luKSxcbiAgICBjb3VudDogKCkgPT4gZ2V0Q291bnRGcm9tU2VydmVyKG9yaWdpbikudGhlbihjb3VudCA9PiBjb3VudC5kYXRhKCkuY291bnQpLFxuICB9IGFzIG5ldmVyIGFzIEluZmVyQ29sbGVjdGlvbkxpa2U8Tz47XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1bndyYXBDb2xsZWN0aW9uTGlrZTxcbiAgQXBwTW9kZWxUeXBlID0gRG9jdW1lbnREYXRhLFxuICBEYk1vZGVsVHlwZSBleHRlbmRzIERvY3VtZW50RGF0YSA9IERvY3VtZW50RGF0YVxuPihcbiAgY29sbGVjdGlvbjogQ29sbGVjdGlvbkxpa2U8QXBwTW9kZWxUeXBlLCBEYk1vZGVsVHlwZT5cbik6IE9yaWdpbjxBcHBNb2RlbFR5cGUsIERiTW9kZWxUeXBlPiB7XG4gIHJldHVybiBjb2xsZWN0aW9uLl9fcmVmITtcbn1cblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEFuZ3VsYXJGaXJlc3RvcmVBZGFwdGVyIGV4dGVuZHMgRmlyZXN0b3JlQWRhcHRlcjxkYXlqcy5EYXlqcz4ge1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgZmlyZXN0b3JlID0gaW5qZWN0KEZpcmVzdG9yZSk7XG5cbiAgZ2V0IEZpZWxkVmFsdWUoKTogdHlwZW9mIEZpZWxkVmFsdWUgJiB7c2VydmVyVGltZXN0YW1wOiAoKSA9PiBGaWVsZFZhbHVlfSB7XG4gICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oRmllbGRWYWx1ZSwge3NlcnZlclRpbWVzdGFtcH0pO1xuICB9XG5cbiAgZ2V0IFRpbWVzdGFtcCgpOiB0eXBlb2YgVGltZXN0YW1wIHtcbiAgICByZXR1cm4gVGltZXN0YW1wOyAgXG4gIH1cblxuICBnZXQgRmllbGRQYXRoKCk6IHtkb2N1bWVudElkOiAoKSA9PiBGaWVsZFBhdGh9IHtcbiAgICByZXR1cm4ge1xuICAgICAgZG9jdW1lbnRJZDogKCkgPT4gZG9jdW1lbnRJZCgpLFxuICAgIH07XG4gIH1cblxuICBwcm90ZWN0ZWQgaXNUaW1lc3RhbXAodjogYW55KTogdiBpcyBUaW1lc3RhbXAge1xuICAgIHJldHVybiB2IGluc3RhbmNlb2YgVGltZXN0YW1wO1xuICB9XG5cbiAgcHJvdGVjdGVkIGlzRmllbGRWYWx1ZSh2OiBhbnkpOiB2IGlzIEZpZWxkVmFsdWUge1xuICAgIHJldHVybiB2IGluc3RhbmNlb2YgdGhpcy5GaWVsZFZhbHVlO1xuICB9XG4gIFxuICBwcm90ZWN0ZWQgaXNEYXRlKHY6IGFueSk6IHYgaXMgZGF5anMuRGF5anMge1xuICAgIHJldHVybiBkYXlqcy5pc0RheWpzKHYpO1xuICB9XG5cbiAgY29udmVydERhdGVUb1RpbWVzdGFtcChkYXRlOiBkYXlqcy5EYXlqcyk6IFRpbWVzdGFtcCB7XG4gICAgcmV0dXJuIFRpbWVzdGFtcC5mcm9tRGF0ZShkYXRlLnRvRGF0ZSgpKTtcbiAgfVxuXG4gIGNvbnZlcnRUaW1lc3RhbXBUb0RhdGUodGltZXN0YW1wOiBUaW1lc3RhbXApOiBkYXlqcy5EYXlqcyB7XG4gICAgcmV0dXJuIGRheWpzKHRpbWVzdGFtcC50b0RhdGUoKSk7XG4gIH1cblxuICBkb2M8XG4gICAgQXBwTW9kZWxUeXBlID0gRG9jdW1lbnREYXRhLFxuICAgIERiTW9kZWxUeXBlIGV4dGVuZHMgRG9jdW1lbnREYXRhID0gRG9jdW1lbnREYXRhLFxuICA+KHBhdGg6IHN0cmluZyk6IERvY3VtZW50UmVmZXJlbmNlPEFwcE1vZGVsVHlwZSwgRGJNb2RlbFR5cGU+IHtcbiAgICBjb25zdCBkb2NSZWYgPSBkb2ModGhpcy5maXJlc3RvcmUsIHBhdGgpO1xuICAgIHJldHVybiB3cmFwRG9jdW1lbnRSZWZlcmVuY2UoZG9jUmVmKSBhcyBEb2N1bWVudFJlZmVyZW5jZTxBcHBNb2RlbFR5cGUsIERiTW9kZWxUeXBlPjtcbiAgfVxuXG4gIGNvbGxlY3Rpb248XG4gICAgQXBwTW9kZWxUeXBlID0gRG9jdW1lbnREYXRhLFxuICAgIERiTW9kZWxUeXBlIGV4dGVuZHMgRG9jdW1lbnREYXRhID0gRG9jdW1lbnREYXRhLFxuICA+KHBhdGg6IHN0cmluZyk6IENvbGxlY3Rpb25SZWZlcmVuY2U8QXBwTW9kZWxUeXBlLCBEYk1vZGVsVHlwZT4ge1xuICAgIGNvbnN0IHJlZiA9IGNvbGxlY3Rpb24odGhpcy5maXJlc3RvcmUsIHBhdGgpO1xuICAgIHJldHVybiB3cmFwQ29sbGVjdGlvbkxpa2UocmVmKSBhcyBDb2xsZWN0aW9uUmVmZXJlbmNlPEFwcE1vZGVsVHlwZSwgRGJNb2RlbFR5cGU+O1xuICB9XG5cbiAgY29sbGVjdGlvbkdyb3VwPFxuICAgIEFwcE1vZGVsVHlwZSA9IERvY3VtZW50RGF0YSxcbiAgICBEYk1vZGVsVHlwZSBleHRlbmRzIERvY3VtZW50RGF0YSA9IERvY3VtZW50RGF0YSxcbiAgPihjb2xsZWN0aW9uSWQ6IHN0cmluZyk6IENvbGxlY3Rpb25Hcm91cDxBcHBNb2RlbFR5cGUsIERiTW9kZWxUeXBlPiB7XG4gICAgY29uc3QgcmVmID0gY29sbGVjdGlvbkdyb3VwKHRoaXMuZmlyZXN0b3JlLCBjb2xsZWN0aW9uSWQpO1xuICAgIHJldHVybiB3cmFwQ29sbGVjdGlvbkxpa2UocmVmKSBhcyBDb2xsZWN0aW9uR3JvdXA8QXBwTW9kZWxUeXBlLCBEYk1vZGVsVHlwZT47XG4gIH1cblxuICBxdWVyeTxcbiAgICBBcHBNb2RlbFR5cGUgPSBEb2N1bWVudERhdGEsXG4gICAgRGJNb2RlbFR5cGUgZXh0ZW5kcyBEb2N1bWVudERhdGEgPSBEb2N1bWVudERhdGEsXG4gID4oXG4gICAgY29sbGVjdGlvbjogQ29sbGVjdGlvblJlZmVyZW5jZTxBcHBNb2RlbFR5cGUsIERiTW9kZWxUeXBlPixcbiAgICAuLi5xdWVyeUZuQXJyYXk6IFF1ZXJ5Rm5bXVxuICApOiBRdWVyeTxBcHBNb2RlbFR5cGUsIERiTW9kZWxUeXBlPiB7XG4gICAgY29uc3QgcmVmID0gdW53cmFwQ29sbGVjdGlvbkxpa2UoY29sbGVjdGlvbikgYXMgZmlyZXN0b3JlLlF1ZXJ5PERvY3VtZW50RGF0YSwgRGJNb2RlbFR5cGU+O1xuICAgIGNvbnN0IF9xdWVyeSA9IHF1ZXJ5KHJlZiwgLi4ucXVlcnlGbkFycmF5Lm1hcChxdWVyeUZuID0+IHF1ZXJ5Rm4oKSkpO1xuICAgIHJldHVybiB3cmFwQ29sbGVjdGlvbkxpa2UoX3F1ZXJ5KSBhcyBRdWVyeTxBcHBNb2RlbFR5cGUsIERiTW9kZWxUeXBlPjtcbiAgfVxuXG4gIHdoZXJlPERhdGE+KGZpZWxkUGF0aDogc3RyaW5nLCBvcFN0cjogV2hlcmVGaWx0ZXJPcCwgdmFsdWU6IHVua25vd24pOiBRdWVyeUZuPERhdGE+IHtcbiAgICByZXR1cm4gKCkgPT4gd2hlcmUoZmllbGRQYXRoLCBvcFN0ciwgdmFsdWUpO1xuICB9XG5cbiAgb3JkZXJCeTxEYXRhPihrZXk6IHN0cmluZywgb3JkZXI6ICdhc2MnIHwgJ2Rlc2MnID0gJ2FzYycpOiBRdWVyeUZuPERhdGE+IHtcbiAgICByZXR1cm4gKCkgPT4gb3JkZXJCeShrZXksIG9yZGVyKTtcbiAgfVxuXG4gIGxpbWl0PERhdGE+KG46IG51bWJlcik6IFF1ZXJ5Rm48RGF0YT4ge1xuICAgIHJldHVybiAoKSA9PiBsaW1pdChuKTtcbiAgfVxuXG4gIHJ1blRyYW5zYWN0aW9uKGZuOiBQYXJhbWV0ZXJzPHR5cGVvZiBydW5UcmFuc2FjdGlvbj5bMV0pIHtcbiAgICByZXR1cm4gcnVuVHJhbnNhY3Rpb24odGhpcy5maXJlc3RvcmUsIGZuKTtcbiAgfVxuXG4gIGJhdGNoKCkge1xuICAgIHJldHVybiB3cml0ZUJhdGNoKHRoaXMuZmlyZXN0b3JlKTtcbiAgfVxufVxuXG4vKiogQGRlcHJlY2F0ZWQgdXNlIGBwcm92aWRlRmlyZXN0b3JlQWRhcHRlcigpYCBpbnN0ZWFkLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByb3ZpZGVBbmd1bGFyRmlyZXN0b3JlQWRhcHRlcigpOiBQcm92aWRlciB7XG4gIHJldHVybiB7IHByb3ZpZGU6IEZpcmVzdG9yZUFkYXB0ZXIsIHVzZUNsYXNzOiBBbmd1bGFyRmlyZXN0b3JlQWRhcHRlciB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvdmlkZUZpcmVzdG9yZUFkYXB0ZXIoKTogUHJvdmlkZXIge1xuICByZXR1cm4gX3Byb3ZpZGVGaXJlc3RvcmVBZGFwdGVyKEFuZ3VsYXJGaXJlc3RvcmVBZGFwdGVyKTtcbn1cbiJdfQ==
@@ -1,19 +1,50 @@
1
1
  import * as i0 from '@angular/core';
2
- import { InjectionToken, Injectable } from '@angular/core';
3
- import * as i1 from '@angular/fire/firestore';
4
- import { FieldValue, serverTimestamp, Timestamp, documentId, doc, getDoc, setDoc, updateDoc, deleteDoc, onSnapshot, collection, getDocs, collectionGroup, runTransaction, query, where, orderBy, limit, writeBatch } from '@angular/fire/firestore';
5
- import { FirestoreAdapter } from '@nx-ddd/firestore/adapters/base';
2
+ import { inject, Injectable } from '@angular/core';
3
+ import { getDoc, setDoc, updateDoc, deleteDoc, onSnapshot, getDocs, getCountFromServer, Firestore, FieldValue, serverTimestamp, Timestamp, documentId, doc, collection, collectionGroup, query, where, orderBy, limit, runTransaction, writeBatch } from '@angular/fire/firestore';
4
+ import { FirestoreAdapter, provideFirestoreAdapter as provideFirestoreAdapter$1 } from '@nx-ddd/firestore/adapters/base';
6
5
  import dayjs from 'dayjs';
7
6
  import { Observable, map } from 'rxjs';
8
7
 
9
8
  function asObservable(ref, _onSnapshot) {
10
9
  return new Observable((observer) => _onSnapshot(ref, (value) => observer.next(value), (error) => observer.error(error), () => observer.complete()));
11
10
  }
12
- const FIREBASE_ADAPTER = new InjectionToken('ANGULAR_FIRESTORE_ADAPTER');
11
+ function wrapDocumentReference(origin) {
12
+ return {
13
+ __ref: origin,
14
+ exists: () => getDoc(origin).then(snapshot => snapshot.exists()),
15
+ set: (data) => setDoc(origin, data),
16
+ get: () => getDoc(origin),
17
+ update: (data) => updateDoc(origin, data),
18
+ delete: () => deleteDoc(origin),
19
+ stateChanges: () => {
20
+ return new Observable((observer) => {
21
+ return onSnapshot(origin, value => observer.next(value), error => observer.error(error), () => observer.complete());
22
+ }).pipe(map((snapshot) => ({
23
+ id: snapshot.id,
24
+ ref: snapshot.ref,
25
+ data: () => snapshot.data(),
26
+ get: (fieldPath) => snapshot.get(fieldPath),
27
+ })));
28
+ },
29
+ };
30
+ }
31
+ function wrapCollectionLike(origin) {
32
+ return {
33
+ __ref: origin,
34
+ stateChanges: () => asObservable(origin, onSnapshot).pipe(map((snapshot) => snapshot.docChanges().map(change => ({
35
+ type: change.type, payload: { doc: change.doc },
36
+ })))),
37
+ get: () => getDocs(origin),
38
+ count: () => getCountFromServer(origin).then(count => count.data().count),
39
+ };
40
+ }
41
+ function unwrapCollectionLike(collection) {
42
+ return collection.__ref;
43
+ }
13
44
  class AngularFirestoreAdapter extends FirestoreAdapter {
14
- constructor(firestore) {
15
- super();
16
- this.firestore = firestore;
45
+ constructor() {
46
+ super(...arguments);
47
+ this.firestore = inject(Firestore);
17
48
  }
18
49
  get FieldValue() {
19
50
  return Object.assign(FieldValue, { serverTimestamp });
@@ -43,52 +74,20 @@ class AngularFirestoreAdapter extends FirestoreAdapter {
43
74
  }
44
75
  doc(path) {
45
76
  const docRef = doc(this.firestore, path);
46
- return {
47
- __ref: docRef,
48
- exists: () => getDoc(docRef).then(snapshot => snapshot.exists()),
49
- set: (data) => setDoc(docRef, data),
50
- get: () => getDoc(docRef),
51
- update: (data) => updateDoc(docRef, data),
52
- delete: () => deleteDoc(docRef),
53
- stateChanges: () => {
54
- return new Observable((observer) => {
55
- return onSnapshot(docRef, value => observer.next(value), error => observer.error(error), () => observer.complete());
56
- }).pipe(map((snapshot) => ({ id: snapshot.id, ref: snapshot.ref, data: () => snapshot.data() })));
57
- },
58
- };
77
+ return wrapDocumentReference(docRef);
59
78
  }
60
79
  collection(path) {
61
80
  const ref = collection(this.firestore, path);
62
- return {
63
- __ref: ref,
64
- stateChanges: () => asObservable(ref, onSnapshot).pipe(map((snapshot) => snapshot.docChanges().map(change => ({
65
- type: change.type, payload: { doc: change.doc },
66
- })))),
67
- get: () => getDocs(ref),
68
- };
81
+ return wrapCollectionLike(ref);
69
82
  }
70
83
  collectionGroup(collectionId) {
71
84
  const ref = collectionGroup(this.firestore, collectionId);
72
- return {
73
- __ref: ref,
74
- stateChanges: () => asObservable(ref, onSnapshot).pipe(map((snapshot) => snapshot.docChanges().map(change => ({
75
- type: change.type, payload: { doc: change.doc },
76
- })))),
77
- get: () => getDocs(ref),
78
- };
79
- }
80
- runTransaction(fn) {
81
- return runTransaction(this.firestore, fn);
85
+ return wrapCollectionLike(ref);
82
86
  }
83
87
  query(collection, ...queryFnArray) {
84
- const ref = query(collection.__ref, ...queryFnArray.map(queryFn => queryFn()));
85
- return {
86
- __ref: ref,
87
- stateChanges: () => asObservable(ref, onSnapshot).pipe(map((snapshot) => snapshot.docChanges().map(change => ({
88
- type: change.type, payload: { doc: change.doc },
89
- })))),
90
- get: () => getDocs(ref),
91
- };
88
+ const ref = unwrapCollectionLike(collection);
89
+ const _query = query(ref, ...queryFnArray.map(queryFn => queryFn()));
90
+ return wrapCollectionLike(_query);
92
91
  }
93
92
  where(fieldPath, opStr, value) {
94
93
  return () => where(fieldPath, opStr, value);
@@ -99,22 +98,29 @@ class AngularFirestoreAdapter extends FirestoreAdapter {
99
98
  limit(n) {
100
99
  return () => limit(n);
101
100
  }
101
+ runTransaction(fn) {
102
+ return runTransaction(this.firestore, fn);
103
+ }
102
104
  batch() {
103
105
  return writeBatch(this.firestore);
104
106
  }
105
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.2", ngImport: i0, type: AngularFirestoreAdapter, deps: [{ token: i1.Firestore }], target: i0.ɵɵFactoryTarget.Injectable }); }
107
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.2", ngImport: i0, type: AngularFirestoreAdapter, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
106
108
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.2.2", ngImport: i0, type: AngularFirestoreAdapter }); }
107
109
  }
108
110
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.2", ngImport: i0, type: AngularFirestoreAdapter, decorators: [{
109
111
  type: Injectable
110
- }], ctorParameters: () => [{ type: i1.Firestore }] });
112
+ }] });
113
+ /** @deprecated use `provideFirestoreAdapter()` instead. */
111
114
  function provideAngularFirestoreAdapter() {
112
115
  return { provide: FirestoreAdapter, useClass: AngularFirestoreAdapter };
113
116
  }
117
+ function provideFirestoreAdapter() {
118
+ return provideFirestoreAdapter$1(AngularFirestoreAdapter);
119
+ }
114
120
 
115
121
  /**
116
122
  * Generated bundle index. Do not edit.
117
123
  */
118
124
 
119
- export { AngularFirestoreAdapter, FIREBASE_ADAPTER, provideAngularFirestoreAdapter };
125
+ export { AngularFirestoreAdapter, provideAngularFirestoreAdapter, provideFirestoreAdapter, unwrapCollectionLike, wrapCollectionLike, wrapDocumentReference };
120
126
  //# sourceMappingURL=nx-ddd-firestore-angular-adapter.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"nx-ddd-firestore-angular-adapter.mjs","sources":["../../../../../packages/@nx-ddd/firestore-angular-adapter/src/lib/angular-firestore.adapter.ts","../../../../../packages/@nx-ddd/firestore-angular-adapter/src/nx-ddd-firestore-angular-adapter.ts"],"sourcesContent":["import { Injectable, Provider } from '@angular/core';\nimport { \n doc, collection, collectionGroup,\n Timestamp, setDoc, getDoc, deleteDoc, getDocs, \n onSnapshot, updateDoc, Firestore, runTransaction, writeBatch,\n limit, orderBy, query, where, QuerySnapshot, FieldPath, documentId, FieldValue, serverTimestamp\n} from '@angular/fire/firestore';\nimport { FirestoreAdapter, QueryFn, WhereFilterOp } from '@nx-ddd/firestore/adapters/base';\nimport {\n DocumentSnapshot,\n FirestoreCollection,\n FirestoreCollectionGroup,\n FirestoreDocument\n} from '@nx-ddd/firestore/interfaces';\nimport dayjs from 'dayjs';\nimport { Observable, map } from 'rxjs';\nimport { inject, InjectionToken } from '@angular/core';\n\n\nfunction asObservable<T = unknown>(\n ref: Parameters<typeof onSnapshot>[0],\n _onSnapshot: typeof onSnapshot,\n): Observable<QuerySnapshot<T>> {\n return new Observable<QuerySnapshot<T>>((observer) => _onSnapshot(\n ref, \n (value: any) => observer.next(value),\n (error: any) => observer.error(error),\n () => observer.complete()),\n );\n}\n\nexport const FIREBASE_ADAPTER = new InjectionToken<AngularFirestoreAdapter>('ANGULAR_FIRESTORE_ADAPTER');\n\n@Injectable()\nexport class AngularFirestoreAdapter extends FirestoreAdapter<dayjs.Dayjs> {\n\n constructor(public firestore: Firestore) { super() }\n\n get FieldValue(): typeof FieldValue & {serverTimestamp: () => FieldValue} {\n return Object.assign(FieldValue, {serverTimestamp});\n }\n\n get Timestamp(): typeof Timestamp {\n return Timestamp; \n }\n\n get FieldPath(): {documentId: () => FieldPath} {\n return {\n documentId: () => documentId(),\n };\n }\n\n protected isTimestamp(v: any): v is Timestamp {\n return v instanceof Timestamp;\n }\n\n protected isFieldValue(v: any): v is FieldValue {\n return v instanceof this.FieldValue;\n }\n \n protected isDate(v: any): v is dayjs.Dayjs {\n return dayjs.isDayjs(v);\n }\n\n convertDateToTimestamp(date: dayjs.Dayjs): Timestamp {\n return Timestamp.fromDate(date.toDate());\n }\n\n convertTimestampToDate(timestamp: Timestamp): dayjs.Dayjs {\n return dayjs(timestamp.toDate());\n }\n\n doc(path: string): FirestoreDocument<any> {\n const docRef = doc(this.firestore, path);\n return {\n __ref: docRef,\n exists: () => getDoc(docRef).then(snapshot => snapshot.exists()),\n set: (data) => setDoc(docRef, data),\n get: () => getDoc(docRef),\n update: (data) => updateDoc(docRef, data),\n delete: () => deleteDoc(docRef),\n stateChanges: () => {\n return new Observable<DocumentSnapshot<any>>((observer) => {\n return onSnapshot(docRef, value => observer.next(value), error => observer.error(error), () => observer.complete());\n }).pipe(\n map((snapshot) => ({id: snapshot.id, ref: snapshot.ref, data: () => snapshot.data()})),\n );\n },\n }\n }\n\n collection(path: string): FirestoreCollection<any> {\n const ref = collection(this.firestore, path);\n return {\n __ref: ref,\n stateChanges: () => asObservable<unknown>(ref, onSnapshot).pipe(\n map((snapshot) => snapshot.docChanges().map(change => ({\n type: change.type, payload: {doc: change.doc},\n }))),\n ),\n get: () => getDocs(ref),\n }\n }\n\n collectionGroup(collectionId: string): FirestoreCollectionGroup<any> {\n const ref = collectionGroup(this.firestore, collectionId);\n return {\n __ref: ref,\n stateChanges: () => asObservable<unknown>(ref, onSnapshot).pipe(\n map((snapshot) => snapshot.docChanges().map(change => ({\n type: change.type, payload: {doc: change.doc},\n }))),\n ),\n get: () => getDocs(ref),\n }\n }\n\n runTransaction(fn: Parameters<typeof runTransaction>[1]) {\n return runTransaction(this.firestore, fn);\n }\n\n query<Data>(collection: FirestoreCollection<Data>, ...queryFnArray: QueryFn<Data>[]): any {\n const ref = query(collection.__ref, ...queryFnArray.map(queryFn => queryFn()));\n return {\n __ref: ref,\n stateChanges: () => asObservable<unknown>(ref, onSnapshot).pipe(\n map((snapshot) => snapshot.docChanges().map(change => ({\n type: change.type, payload: {doc: change.doc},\n }))),\n ),\n get: () => getDocs(ref),\n }\n }\n\n where<Data>(fieldPath: string, opStr: WhereFilterOp, value: unknown): QueryFn<Data> {\n return () => where(fieldPath, opStr, value);\n }\n\n orderBy<Data>(key: string, order: 'asc' | 'desc' = 'asc'): QueryFn<Data> {\n return () => orderBy(key, order);\n }\n\n limit<Data>(n: number): QueryFn<Data> {\n return () => limit(n);\n }\n \n batch() {\n return writeBatch(this.firestore);\n }\n}\n\nexport function provideAngularFirestoreAdapter(): Provider {\n return { provide: FirestoreAdapter, useClass: AngularFirestoreAdapter };\n}","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"nx-ddd-firestore-angular-adapter.mjs","sources":["../../../../../packages/@nx-ddd/firestore-angular-adapter/src/lib/angular-firestore.adapter.ts","../../../../../packages/@nx-ddd/firestore-angular-adapter/src/nx-ddd-firestore-angular-adapter.ts"],"sourcesContent":["import { inject, Injectable, Provider } from '@angular/core';\nimport { \n doc, collection, collectionGroup,\n Timestamp, setDoc, getDoc, deleteDoc, getDocs, \n onSnapshot, updateDoc, Firestore, runTransaction, writeBatch,\n limit, orderBy, query, where, QuerySnapshot, FieldPath, documentId, FieldValue, serverTimestamp,\n getCountFromServer\n} from '@angular/fire/firestore';\nimport {\n FirestoreAdapter,\n QueryFn as _QueryFn,\n WhereFilterOp,\n provideFirestoreAdapter as _provideFirestoreAdapter,\n} from '@nx-ddd/firestore/adapters/base';\nimport {\n DocumentSnapshot,\n CollectionReference as _CollectionReference,\n CollectionGroup as _CollectionGroup,\n Query as _Query,\n DocumentData,\n DocumentReference,\n} from '@nx-ddd/firestore/interfaces';\nimport dayjs from 'dayjs';\nimport { Observable, map } from 'rxjs';\nimport type firestore from 'firebase/firestore';\n\ntype CollectionReference<\n AppModelType = DocumentData,\n DbModelType extends DocumentData = DocumentData,\n> = _CollectionReference<AppModelType, DbModelType, firestore.CollectionReference<AppModelType, DbModelType>>;\n\ntype CollectionGroup<\n AppModelType = DocumentData,\n DbModelType extends DocumentData = DocumentData\n> = _CollectionGroup<AppModelType, DbModelType, firestore.Query<AppModelType, DbModelType>>;\n\ntype Query<\n AppModelType = DocumentData,\n DbModelType extends DocumentData = DocumentData\n> = _Query<AppModelType, DbModelType, firestore.Query<AppModelType, DbModelType>>;\n\ntype QueryFn<\n AppModelType = DocumentData,\n DbModelType extends DocumentData = DocumentData\n> = _QueryFn<AppModelType, DbModelType, firestore.QueryConstraint>\n\ntype Origin<\n AppModelType = DocumentData,\n DbModelType extends DocumentData = DocumentData,\n> = firestore.CollectionReference<AppModelType, DbModelType>\n | firestore.Query<AppModelType, DbModelType>;\n\ntype CollectionLike<\n AppModelType = DocumentData,\n DbModelType extends DocumentData = DocumentData,\n> = CollectionReference<AppModelType, DbModelType> \n | CollectionGroup<AppModelType, DbModelType>\n | Query<AppModelType, DbModelType>;\n\n// Utility type to map Origin to CollectionLike\ntype InferCollectionLike<O extends Origin> = \n O extends firestore.CollectionReference<infer A, infer B> ? CollectionReference<A, B> :\n O extends firestore.Query<infer A, infer B> ? Query<A, B> :\n never;\n\n\nfunction asObservable<T = unknown>(\n ref: Parameters<typeof onSnapshot>[0],\n _onSnapshot: typeof onSnapshot,\n): Observable<QuerySnapshot<T>> {\n return new Observable<QuerySnapshot<T>>((observer) => _onSnapshot(\n ref, \n (value: any) => observer.next(value),\n (error: any) => observer.error(error),\n () => observer.complete()),\n );\n}\n\nexport function wrapDocumentReference<\n AppModelType = DocumentData,\n DbModelType extends DocumentData = DocumentData,\n>(origin: firestore.DocumentReference<AppModelType, DbModelType>): DocumentReference<AppModelType, DbModelType> {\n return {\n __ref: origin,\n exists: () => getDoc(origin).then(snapshot => snapshot.exists()),\n set: (data) => setDoc(origin, data),\n get: () => getDoc(origin),\n update: (data) => updateDoc(origin, data as any),\n delete: () => deleteDoc(origin),\n stateChanges: () => {\n return new Observable<DocumentSnapshot<any>>((observer) => {\n return onSnapshot(origin, value => observer.next(value), error => observer.error(error), () => observer.complete());\n }).pipe(\n map((snapshot) => ({\n id: snapshot.id,\n ref: snapshot.ref,\n data: () => snapshot.data(),\n get: (fieldPath: string) => snapshot.get(fieldPath),\n })),\n );\n },\n }\n}\n\nexport function wrapCollectionLike<\n O extends Origin,\n>(origin: O): InferCollectionLike<O> {\n return {\n __ref: origin,\n stateChanges: () => asObservable<unknown>(origin, onSnapshot).pipe(\n map((snapshot) => snapshot.docChanges().map(change => ({\n type: change.type, payload: {doc: change.doc},\n }))),\n ),\n get: () => getDocs(origin),\n count: () => getCountFromServer(origin).then(count => count.data().count),\n } as never as InferCollectionLike<O>;\n}\n\nexport function unwrapCollectionLike<\n AppModelType = DocumentData,\n DbModelType extends DocumentData = DocumentData\n>(\n collection: CollectionLike<AppModelType, DbModelType>\n): Origin<AppModelType, DbModelType> {\n return collection.__ref!;\n}\n\n@Injectable()\nexport class AngularFirestoreAdapter extends FirestoreAdapter<dayjs.Dayjs> {\n protected readonly firestore = inject(Firestore);\n\n get FieldValue(): typeof FieldValue & {serverTimestamp: () => FieldValue} {\n return Object.assign(FieldValue, {serverTimestamp});\n }\n\n get Timestamp(): typeof Timestamp {\n return Timestamp; \n }\n\n get FieldPath(): {documentId: () => FieldPath} {\n return {\n documentId: () => documentId(),\n };\n }\n\n protected isTimestamp(v: any): v is Timestamp {\n return v instanceof Timestamp;\n }\n\n protected isFieldValue(v: any): v is FieldValue {\n return v instanceof this.FieldValue;\n }\n \n protected isDate(v: any): v is dayjs.Dayjs {\n return dayjs.isDayjs(v);\n }\n\n convertDateToTimestamp(date: dayjs.Dayjs): Timestamp {\n return Timestamp.fromDate(date.toDate());\n }\n\n convertTimestampToDate(timestamp: Timestamp): dayjs.Dayjs {\n return dayjs(timestamp.toDate());\n }\n\n doc<\n AppModelType = DocumentData,\n DbModelType extends DocumentData = DocumentData,\n >(path: string): DocumentReference<AppModelType, DbModelType> {\n const docRef = doc(this.firestore, path);\n return wrapDocumentReference(docRef) as DocumentReference<AppModelType, DbModelType>;\n }\n\n collection<\n AppModelType = DocumentData,\n DbModelType extends DocumentData = DocumentData,\n >(path: string): CollectionReference<AppModelType, DbModelType> {\n const ref = collection(this.firestore, path);\n return wrapCollectionLike(ref) as CollectionReference<AppModelType, DbModelType>;\n }\n\n collectionGroup<\n AppModelType = DocumentData,\n DbModelType extends DocumentData = DocumentData,\n >(collectionId: string): CollectionGroup<AppModelType, DbModelType> {\n const ref = collectionGroup(this.firestore, collectionId);\n return wrapCollectionLike(ref) as CollectionGroup<AppModelType, DbModelType>;\n }\n\n query<\n AppModelType = DocumentData,\n DbModelType extends DocumentData = DocumentData,\n >(\n collection: CollectionReference<AppModelType, DbModelType>,\n ...queryFnArray: QueryFn[]\n ): Query<AppModelType, DbModelType> {\n const ref = unwrapCollectionLike(collection) as firestore.Query<DocumentData, DbModelType>;\n const _query = query(ref, ...queryFnArray.map(queryFn => queryFn()));\n return wrapCollectionLike(_query) as Query<AppModelType, DbModelType>;\n }\n\n where<Data>(fieldPath: string, opStr: WhereFilterOp, value: unknown): QueryFn<Data> {\n return () => where(fieldPath, opStr, value);\n }\n\n orderBy<Data>(key: string, order: 'asc' | 'desc' = 'asc'): QueryFn<Data> {\n return () => orderBy(key, order);\n }\n\n limit<Data>(n: number): QueryFn<Data> {\n return () => limit(n);\n }\n\n runTransaction(fn: Parameters<typeof runTransaction>[1]) {\n return runTransaction(this.firestore, fn);\n }\n\n batch() {\n return writeBatch(this.firestore);\n }\n}\n\n/** @deprecated use `provideFirestoreAdapter()` instead. */\nexport function provideAngularFirestoreAdapter(): Provider {\n return { provide: FirestoreAdapter, useClass: AngularFirestoreAdapter };\n}\n\nexport function provideFirestoreAdapter(): Provider {\n return _provideFirestoreAdapter(AngularFirestoreAdapter);\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["_provideFirestoreAdapter"],"mappings":"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"}
@@ -1,14 +1,22 @@
1
1
  import { Provider } from '@angular/core';
2
2
  import { Timestamp, Firestore, runTransaction, FieldPath, FieldValue } from '@angular/fire/firestore';
3
- import { FirestoreAdapter, QueryFn, WhereFilterOp } from '@nx-ddd/firestore/adapters/base';
4
- import { FirestoreCollection, FirestoreCollectionGroup, FirestoreDocument } from '@nx-ddd/firestore/interfaces';
3
+ import { FirestoreAdapter, QueryFn as _QueryFn, WhereFilterOp } from '@nx-ddd/firestore/adapters/base';
4
+ import { CollectionReference as _CollectionReference, CollectionGroup as _CollectionGroup, Query as _Query, DocumentData, DocumentReference } from '@nx-ddd/firestore/interfaces';
5
5
  import dayjs from 'dayjs';
6
- import { InjectionToken } from '@angular/core';
6
+ import type firestore from 'firebase/firestore';
7
7
  import * as i0 from "@angular/core";
8
- export declare const FIREBASE_ADAPTER: InjectionToken<AngularFirestoreAdapter>;
8
+ type CollectionReference<AppModelType = DocumentData, DbModelType extends DocumentData = DocumentData> = _CollectionReference<AppModelType, DbModelType, firestore.CollectionReference<AppModelType, DbModelType>>;
9
+ type CollectionGroup<AppModelType = DocumentData, DbModelType extends DocumentData = DocumentData> = _CollectionGroup<AppModelType, DbModelType, firestore.Query<AppModelType, DbModelType>>;
10
+ type Query<AppModelType = DocumentData, DbModelType extends DocumentData = DocumentData> = _Query<AppModelType, DbModelType, firestore.Query<AppModelType, DbModelType>>;
11
+ type QueryFn<AppModelType = DocumentData, DbModelType extends DocumentData = DocumentData> = _QueryFn<AppModelType, DbModelType, firestore.QueryConstraint>;
12
+ type Origin<AppModelType = DocumentData, DbModelType extends DocumentData = DocumentData> = firestore.CollectionReference<AppModelType, DbModelType> | firestore.Query<AppModelType, DbModelType>;
13
+ type CollectionLike<AppModelType = DocumentData, DbModelType extends DocumentData = DocumentData> = CollectionReference<AppModelType, DbModelType> | CollectionGroup<AppModelType, DbModelType> | Query<AppModelType, DbModelType>;
14
+ type InferCollectionLike<O extends Origin> = O extends firestore.CollectionReference<infer A, infer B> ? CollectionReference<A, B> : O extends firestore.Query<infer A, infer B> ? Query<A, B> : never;
15
+ export declare function wrapDocumentReference<AppModelType = DocumentData, DbModelType extends DocumentData = DocumentData>(origin: firestore.DocumentReference<AppModelType, DbModelType>): DocumentReference<AppModelType, DbModelType>;
16
+ export declare function wrapCollectionLike<O extends Origin>(origin: O): InferCollectionLike<O>;
17
+ export declare function unwrapCollectionLike<AppModelType = DocumentData, DbModelType extends DocumentData = DocumentData>(collection: CollectionLike<AppModelType, DbModelType>): Origin<AppModelType, DbModelType>;
9
18
  export declare class AngularFirestoreAdapter extends FirestoreAdapter<dayjs.Dayjs> {
10
- firestore: Firestore;
11
- constructor(firestore: Firestore);
19
+ protected readonly firestore: Firestore;
12
20
  get FieldValue(): typeof FieldValue & {
13
21
  serverTimestamp: () => FieldValue;
14
22
  };
@@ -21,16 +29,19 @@ export declare class AngularFirestoreAdapter extends FirestoreAdapter<dayjs.Dayj
21
29
  protected isDate(v: any): v is dayjs.Dayjs;
22
30
  convertDateToTimestamp(date: dayjs.Dayjs): Timestamp;
23
31
  convertTimestampToDate(timestamp: Timestamp): dayjs.Dayjs;
24
- doc(path: string): FirestoreDocument<any>;
25
- collection(path: string): FirestoreCollection<any>;
26
- collectionGroup(collectionId: string): FirestoreCollectionGroup<any>;
27
- runTransaction(fn: Parameters<typeof runTransaction>[1]): Promise<unknown>;
28
- query<Data>(collection: FirestoreCollection<Data>, ...queryFnArray: QueryFn<Data>[]): any;
32
+ doc<AppModelType = DocumentData, DbModelType extends DocumentData = DocumentData>(path: string): DocumentReference<AppModelType, DbModelType>;
33
+ collection<AppModelType = DocumentData, DbModelType extends DocumentData = DocumentData>(path: string): CollectionReference<AppModelType, DbModelType>;
34
+ collectionGroup<AppModelType = DocumentData, DbModelType extends DocumentData = DocumentData>(collectionId: string): CollectionGroup<AppModelType, DbModelType>;
35
+ query<AppModelType = DocumentData, DbModelType extends DocumentData = DocumentData>(collection: CollectionReference<AppModelType, DbModelType>, ...queryFnArray: QueryFn[]): Query<AppModelType, DbModelType>;
29
36
  where<Data>(fieldPath: string, opStr: WhereFilterOp, value: unknown): QueryFn<Data>;
30
37
  orderBy<Data>(key: string, order?: 'asc' | 'desc'): QueryFn<Data>;
31
38
  limit<Data>(n: number): QueryFn<Data>;
32
- batch(): import("@firebase/firestore").WriteBatch;
39
+ runTransaction(fn: Parameters<typeof runTransaction>[1]): Promise<unknown>;
40
+ batch(): firestore.WriteBatch;
33
41
  static ɵfac: i0.ɵɵFactoryDeclaration<AngularFirestoreAdapter, never>;
34
42
  static ɵprov: i0.ɵɵInjectableDeclaration<AngularFirestoreAdapter>;
35
43
  }
44
+ /** @deprecated use `provideFirestoreAdapter()` instead. */
36
45
  export declare function provideAngularFirestoreAdapter(): Provider;
46
+ export declare function provideFirestoreAdapter(): Provider;
47
+ export {};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nx-ddd/firestore-angular-adapter",
3
- "version": "17.1.0",
3
+ "version": "17.2.0",
4
4
  "homepage": "https://github.com/xx-machina/plaform/tree/main/packages/@nx-ddd/firestore-angular-adapter",
5
5
  "repository": {
6
6
  "type": "git",
@@ -9,7 +9,7 @@
9
9
  "peerDependencies": {
10
10
  "@angular/core": "^17.0.0",
11
11
  "@angular/fire": "^17.0.0",
12
- "@nx-ddd/firestore": "17.1.0",
12
+ "@nx-ddd/firestore": "17.2.0",
13
13
  "dayjs": "1.11.10",
14
14
  "rxjs": "^7.0.0"
15
15
  },