@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
|
-
#
|
|
1
|
+
# @NxDDD/FirestoreAngularAdapter
|
|
2
|
+
`@nx-ddd/firestore-angular-adapter` is an Angular plugin for @nx-ddd/firestore.
|
|
2
3
|
|
|
3
|
-
|
|
4
|
+
## Install
|
|
5
|
+
```sh
|
|
6
|
+
$ npm i @nx-ddd/firestore-angular-adapter
|
|
7
|
+
```
|
|
4
8
|
|
|
5
|
-
##
|
|
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
|
-
|
|
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
|
|
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(
|
|
15
|
-
super();
|
|
16
|
-
this.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 =
|
|
85
|
-
|
|
86
|
-
|
|
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:
|
|
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
|
-
}]
|
|
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5ndWxhci1maXJlc3RvcmUuYWRhcHRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL0BueC1kZGQvZmlyZXN0b3JlLWFuZ3VsYXItYWRhcHRlci9zcmMvbGliL2FuZ3VsYXItZmlyZXN0b3JlLmFkYXB0ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQVksTUFBTSxlQUFlLENBQUM7QUFDN0QsT0FBTyxFQUNMLEdBQUcsRUFBRSxVQUFVLEVBQUUsZUFBZSxFQUNoQyxTQUFTLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUM3QyxVQUFVLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxjQUFjLEVBQUUsVUFBVSxFQUM1RCxLQUFLLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQTRCLFVBQVUsRUFBRSxVQUFVLEVBQUUsZUFBZSxFQUMvRixrQkFBa0IsRUFDbkIsTUFBTSx5QkFBeUIsQ0FBQztBQUNqQyxPQUFPLEVBQ0wsZ0JBQWdCLEVBR2hCLHVCQUF1QixJQUFJLHdCQUF3QixHQUNwRCxNQUFNLGlDQUFpQyxDQUFDO0FBU3pDLE9BQU8sS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUMxQixPQUFPLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBRSxNQUFNLE1BQU0sQ0FBQzs7QUEyQ3ZDLFNBQVMsWUFBWSxDQUNuQixHQUFxQyxFQUNyQyxXQUE4QjtJQUU5QixPQUFPLElBQUksVUFBVSxDQUFtQixDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsV0FBVyxDQUMvRCxHQUFHLEVBQ0gsQ0FBQyxLQUFVLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQ3BDLENBQUMsS0FBVSxFQUFFLEVBQUUsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxFQUNyQyxHQUFHLEVB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RUFBRSxnQkFBZ0IsRUFBRSxRQUFRLEVBQUUsdUJBQXVCLEVBQUUsQ0FBQztBQUMxRSxDQUFDO0FBRUQsTUFBTSxVQUFVLHVCQUF1QjtJQUNyQyxPQUFPLHdCQUF3QixDQUFDLHVCQUF1QixDQUFDLENBQUM7QUFDM0QsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGluamVjdCwgSW5qZWN0YWJsZSwgUHJvdmlkZXIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFxuICBkb2MsIGNvbGxlY3Rpb24sIGNvbGxlY3Rpb25Hcm91cCxcbiAgVGltZXN0YW1wLCBzZXREb2MsIGdldERvYywgZGVsZXRlRG9jLCBnZXREb2NzLCBcbiAgb25TbmFwc2hvdCwgdXBkYXRlRG9jLCBGaXJlc3RvcmUsIHJ1blRyYW5zYWN0aW9uLCB3cml0ZUJhdGNoLFxuICBsaW1pdCwgb3JkZXJCeSwgcXVlcnksIHdoZXJlLCBRdWVyeVNuYXBzaG90LCBGaWVsZFBhdGgsIGRvY3VtZW50SWQsIEZpZWxkVmFsdWUsIHNlcnZlclRpbWVzdGFtcCxcbiAgZ2V0Q291bnRGcm9tU2VydmVyXG59IGZyb20gJ0Bhbmd1bGFyL2ZpcmUvZmlyZXN0b3JlJztcbmltcG9ydCB7XG4gIEZpcmVzdG9yZUFkYXB0ZXIsXG4gIFF1ZXJ5Rm4gYXMgX1F1ZXJ5Rm4sXG4gIFdoZXJlRmlsdGVyT3AsXG4gIHByb3ZpZGVGaXJlc3RvcmVBZGFwdGVyIGFzIF9wcm92aWRlRmlyZXN0b3JlQWRhcHRlcixcbn0gZnJvbSAnQG54LWRkZC9maXJlc3RvcmUvYWRhcHRlcnMvYmFzZSc7XG5pbXBvcnQge1xuICBEb2N1bWVudFNuYXBzaG90LFxuICBDb2xsZWN0aW9uUmVmZXJlbmNlIGFzIF9Db2xsZWN0aW9uUmVmZXJlbmNlLFxuICBDb2xsZWN0aW9uR3JvdXAgYXMgX0NvbGxlY3Rpb25Hcm91cCxcbiAgUXVlcnkgYXMgX1F1ZXJ5LFxuICBEb2N1bWVudERhdGEsXG4gIERvY3VtZW50UmVmZXJlbmNlLFxufSBmcm9tICdAbngtZGRkL2ZpcmVzdG9yZS9pbnRlcmZhY2VzJztcbmltcG9ydCBkYXlqcyBmcm9tICdkYXlqcyc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBtYXAgfSBmcm9tICdyeGpzJztcbmltcG9ydCB0eXBlIGZpcmVzdG9yZSBmcm9tICdmaXJlYmFzZS9maXJlc3RvcmUnO1xuXG50eXBlIENvbGxlY3Rpb25SZWZlcmVuY2U8XG4gIEFwcE1vZGVsVHlwZSA9IERvY3VtZW50RGF0YSxcbiAgRGJNb2RlbFR5cGUgZXh0ZW5kcyBEb2N1bWVudERhdGEgPSBEb2N1bWVudERhdGEsXG4+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 {
|
|
3
|
-
import
|
|
4
|
-
import {
|
|
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
|
-
|
|
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(
|
|
15
|
-
super();
|
|
16
|
-
this.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 =
|
|
85
|
-
|
|
86
|
-
|
|
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:
|
|
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
|
-
}]
|
|
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,
|
|
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":";;;;;;;;AAmBA,SAAS,YAAY,CACnB,GAAqC,EACrC,WAA8B,EAAA;IAE9B,OAAO,IAAI,UAAU,CAAmB,CAAC,QAAQ,KAAK,WAAW,CAC/D,GAAG,EACH,CAAC,KAAU,KAAK,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,EACpC,CAAC,KAAU,KAAK,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,EACrC,MAAM,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAC3B,CAAC;AACJ,CAAC;MAEY,gBAAgB,GAAG,IAAI,cAAc,CAA0B,2BAA2B,EAAE;AAGnG,MAAO,uBAAwB,SAAQ,gBAA6B,CAAA;AAExE,IAAA,WAAA,CAAmB,SAAoB,EAAA;AAAI,QAAA,KAAK,EAAE,CAAA;QAA/B,IAAS,CAAA,SAAA,GAAT,SAAS,CAAW;KAAa;AAEpD,IAAA,IAAI,UAAU,GAAA;QACZ,OAAO,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,EAAC,eAAe,EAAC,CAAC,CAAC;KACrD;AAED,IAAA,IAAI,SAAS,GAAA;AACX,QAAA,OAAO,SAAS,CAAC;KAClB;AAED,IAAA,IAAI,SAAS,GAAA;QACX,OAAO;AACL,YAAA,UAAU,EAAE,MAAM,UAAU,EAAE;SAC/B,CAAC;KACH;AAES,IAAA,WAAW,CAAC,CAAM,EAAA;QAC1B,OAAO,CAAC,YAAY,SAAS,CAAC;KAC/B;AAES,IAAA,YAAY,CAAC,CAAM,EAAA;AAC3B,QAAA,OAAO,CAAC,YAAY,IAAI,CAAC,UAAU,CAAC;KACrC;AAES,IAAA,MAAM,CAAC,CAAM,EAAA;AACrB,QAAA,OAAO,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;KACzB;AAED,IAAA,sBAAsB,CAAC,IAAiB,EAAA;QACtC,OAAO,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;KAC1C;AAED,IAAA,sBAAsB,CAAC,SAAoB,EAAA;AACzC,QAAA,OAAO,KAAK,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC;KAClC;AAED,IAAA,GAAG,CAAC,IAAY,EAAA;QACd,MAAM,MAAM,GAAG,GAAG,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;QACzC,OAAO;AACL,YAAA,KAAK,EAAE,MAAM;AACb,YAAA,MAAM,EAAE,MAAM,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,MAAM,EAAE,CAAC;YAChE,GAAG,EAAE,CAAC,IAAI,KAAK,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC;AACnC,YAAA,GAAG,EAAE,MAAM,MAAM,CAAC,MAAM,CAAC;YACzB,MAAM,EAAE,CAAC,IAAI,KAAK,SAAS,CAAC,MAAM,EAAE,IAAI,CAAC;AACzC,YAAA,MAAM,EAAE,MAAM,SAAS,CAAC,MAAM,CAAC;YAC/B,YAAY,EAAE,MAAK;AACjB,gBAAA,OAAO,IAAI,UAAU,CAAwB,CAAC,QAAQ,KAAI;AACxD,oBAAA,OAAO,UAAU,CAAC,MAAM,EAAE,KAAK,IAAI,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,KAAK,IAAI,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,MAAM,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAC;AACtH,iBAAC,CAAC,CAAC,IAAI,CACL,GAAG,CAAC,CAAC,QAAQ,MAAM,EAAC,EAAE,EAAE,QAAQ,CAAC,EAAE,EAAE,GAAG,EAAE,QAAQ,CAAC,GAAG,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC,IAAI,EAAE,EAAC,CAAC,CAAC,CACvF,CAAC;aACH;SACF,CAAA;KACF;AAED,IAAA,UAAU,CAAC,IAAY,EAAA;QACrB,MAAM,GAAG,GAAG,UAAU,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;QAC7C,OAAO;AACL,YAAA,KAAK,EAAE,GAAG;AACV,YAAA,YAAY,EAAE,MAAM,YAAY,CAAU,GAAG,EAAE,UAAU,CAAC,CAAC,IAAI,CAC7D,GAAG,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC,UAAU,EAAE,CAAC,GAAG,CAAC,MAAM,KAAK;AACrD,gBAAA,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,OAAO,EAAE,EAAC,GAAG,EAAE,MAAM,CAAC,GAAG,EAAC;aAC9C,CAAC,CAAC,CAAC,CACL;AACD,YAAA,GAAG,EAAE,MAAM,OAAO,CAAC,GAAG,CAAC;SACxB,CAAA;KACF;AAED,IAAA,eAAe,CAAC,YAAoB,EAAA;QAClC,MAAM,GAAG,GAAG,eAAe,CAAC,IAAI,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;QAC1D,OAAQ;AACN,YAAA,KAAK,EAAE,GAAG;AACV,YAAA,YAAY,EAAE,MAAM,YAAY,CAAU,GAAG,EAAE,UAAU,CAAC,CAAC,IAAI,CAC7D,GAAG,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC,UAAU,EAAE,CAAC,GAAG,CAAC,MAAM,KAAK;AACrD,gBAAA,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,OAAO,EAAE,EAAC,GAAG,EAAE,MAAM,CAAC,GAAG,EAAC;aAC9C,CAAC,CAAC,CAAC,CACL;AACD,YAAA,GAAG,EAAE,MAAM,OAAO,CAAC,GAAG,CAAC;SACxB,CAAA;KACF;AAED,IAAA,cAAc,CAAC,EAAwC,EAAA;QACrD,OAAO,cAAc,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;KAC3C;AAED,IAAA,KAAK,CAAO,UAAqC,EAAE,GAAG,YAA6B,EAAA;QACjF,MAAM,GAAG,GAAG,KAAK,CAAC,UAAU,CAAC,KAAK,EAAE,GAAG,YAAY,CAAC,GAAG,CAAC,OAAO,IAAI,OAAO,EAAE,CAAC,CAAC,CAAC;QAC/E,OAAQ;AACN,YAAA,KAAK,EAAE,GAAG;AACV,YAAA,YAAY,EAAE,MAAM,YAAY,CAAU,GAAG,EAAE,UAAU,CAAC,CAAC,IAAI,CAC7D,GAAG,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC,UAAU,EAAE,CAAC,GAAG,CAAC,MAAM,KAAK;AACrD,gBAAA,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,OAAO,EAAE,EAAC,GAAG,EAAE,MAAM,CAAC,GAAG,EAAC;aAC9C,CAAC,CAAC,CAAC,CACL;AACD,YAAA,GAAG,EAAE,MAAM,OAAO,CAAC,GAAG,CAAC;SACxB,CAAA;KACF;AAED,IAAA,KAAK,CAAO,SAAiB,EAAE,KAAoB,EAAE,KAAc,EAAA;QACjE,OAAO,MAAM,KAAK,CAAC,SAAS,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;KAC7C;AAED,IAAA,OAAO,CAAO,GAAW,EAAE,KAAA,GAAwB,KAAK,EAAA;QACtD,OAAO,MAAM,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;KAClC;AAED,IAAA,KAAK,CAAO,CAAS,EAAA;AACnB,QAAA,OAAO,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC;KACvB;IAED,KAAK,GAAA;AACH,QAAA,OAAO,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;KACnC;8GAlHU,uBAAuB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,SAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA,EAAA;kHAAvB,uBAAuB,EAAA,CAAA,CAAA,EAAA;;2FAAvB,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBADnC,UAAU;;SAsHK,8BAA8B,GAAA;IAC5C,OAAO,EAAE,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAE,uBAAuB,EAAE,CAAC;AAC1E;;ACzJA;;AAEG;;;;"}
|
|
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 {
|
|
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
|
|
6
|
+
import type firestore from 'firebase/firestore';
|
|
7
7
|
import * as i0 from "@angular/core";
|
|
8
|
-
|
|
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):
|
|
25
|
-
collection(path: string):
|
|
26
|
-
collectionGroup(collectionId: string):
|
|
27
|
-
|
|
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
|
-
|
|
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.
|
|
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.
|
|
12
|
+
"@nx-ddd/firestore": "17.2.0",
|
|
13
13
|
"dayjs": "1.11.10",
|
|
14
14
|
"rxjs": "^7.0.0"
|
|
15
15
|
},
|