@nx-ddd/firestore 19.2.0 → 19.3.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/adapters/admin/index.d.ts +40 -1
- package/adapters/firebase/index.d.ts +35 -1
- package/{adapters/admin/admin.adapter.js → fesm2022/nx-ddd-firestore-adapters-admin.mjs} +21 -13
- package/fesm2022/nx-ddd-firestore-adapters-admin.mjs.map +1 -0
- package/{adapters/firebase/firebase.adapter.js → fesm2022/nx-ddd-firestore-adapters-firebase.mjs} +20 -13
- package/fesm2022/nx-ddd-firestore-adapters-firebase.mjs.map +1 -0
- package/fesm2022/nx-ddd-firestore.mjs +796 -0
- package/fesm2022/nx-ddd-firestore.mjs.map +1 -0
- package/index.d.ts +424 -7
- package/package.json +26 -6
- package/README.md +0 -172
- package/adapters/admin/admin.adapter.d.ts +0 -36
- package/adapters/admin/admin.adapter.js.map +0 -1
- package/adapters/admin/index.js +0 -2
- package/adapters/admin/index.js.map +0 -1
- package/adapters/base/base.adapter.d.ts +0 -35
- package/adapters/base/base.adapter.js +0 -189
- package/adapters/base/base.adapter.js.map +0 -1
- package/adapters/base/index.d.ts +0 -1
- package/adapters/base/index.js +0 -2
- package/adapters/base/index.js.map +0 -1
- package/adapters/dayjs/dayjs.adatper.d.ts +0 -15
- package/adapters/dayjs/dayjs.adatper.js +0 -44
- package/adapters/dayjs/dayjs.adatper.js.map +0 -1
- package/adapters/dayjs/index.d.ts +0 -1
- package/adapters/dayjs/index.js +0 -2
- package/adapters/dayjs/index.js.map +0 -1
- package/adapters/firebase/firebase.adapter.d.ts +0 -32
- package/adapters/firebase/firebase.adapter.js.map +0 -1
- package/adapters/firebase/index.js +0 -2
- package/adapters/firebase/index.js.map +0 -1
- package/adapters/index.d.ts +0 -1
- package/adapters/index.js +0 -2
- package/adapters/index.js.map +0 -1
- package/converter/converter.d.ts +0 -17
- package/converter/converter.js +0 -31
- package/converter/converter.js.map +0 -1
- package/converter/index.d.ts +0 -1
- package/converter/index.js +0 -2
- package/converter/index.js.map +0 -1
- package/dao/firestore.dao.d.ts +0 -17
- package/dao/firestore.dao.js +0 -22
- package/dao/firestore.dao.js.map +0 -1
- package/dao/index.d.ts +0 -1
- package/dao/index.js +0 -2
- package/dao/index.js.map +0 -1
- package/decorators/decorators.d.ts +0 -87
- package/decorators/decorators.js +0 -36
- package/decorators/decorators.js.map +0 -1
- package/decorators/index.d.ts +0 -1
- package/decorators/index.js +0 -2
- package/decorators/index.js.map +0 -1
- package/index.js +0 -8
- package/index.js.map +0 -1
- package/interfaces/index.d.ts +0 -1
- package/interfaces/index.js +0 -2
- package/interfaces/index.js.map +0 -1
- package/interfaces/interfaces.d.ts +0 -63
- package/interfaces/interfaces.js +0 -2
- package/interfaces/interfaces.js.map +0 -1
- package/path-builder/index.d.ts +0 -1
- package/path-builder/index.js +0 -2
- package/path-builder/index.js.map +0 -1
- package/path-builder/path-builder.d.ts +0 -34
- package/path-builder/path-builder.js +0 -33
- package/path-builder/path-builder.js.map +0 -1
- package/query/firestore.query.d.ts +0 -33
- package/query/firestore.query.js +0 -75
- package/query/firestore.query.js.map +0 -1
- package/query/index.d.ts +0 -1
- package/query/index.js +0 -2
- package/query/index.js.map +0 -1
- package/query/v2/cached-query.d.ts +0 -58
- package/query/v2/cached-query.js +0 -102
- package/query/v2/cached-query.js.map +0 -1
- package/query/v2/index.d.ts +0 -2
- package/query/v2/index.js +0 -3
- package/query/v2/index.js.map +0 -1
- package/query/v2/query.d.ts +0 -46
- package/query/v2/query.js +0 -81
- package/query/v2/query.js.map +0 -1
- package/repository/index.d.ts +0 -1
- package/repository/index.js +0 -2
- package/repository/index.js.map +0 -1
- package/repository/repository.d.ts +0 -65
- package/repository/repository.js +0 -218
- package/repository/repository.js.map +0 -1
- package/testing/common.d.ts +0 -7
- package/testing/common.js +0 -19
- package/testing/common.js.map +0 -1
- package/testing/index.d.ts +0 -1
- package/testing/index.js +0 -2
- package/testing/index.js.map +0 -1
|
@@ -1 +1,40 @@
|
|
|
1
|
-
|
|
1
|
+
import admin from 'firebase-admin';
|
|
2
|
+
import { DocumentData, Transaction } from 'firebase-admin/firestore';
|
|
3
|
+
import { CollectionReference as CollectionReference$1, CollectionGroup as CollectionGroup$1, Query as Query$1, FirestoreAdapter, DocumentReference, QueryFn as QueryFn$1, WhereFilterOp } from '@nx-ddd/firestore';
|
|
4
|
+
import * as i0 from '@angular/core';
|
|
5
|
+
|
|
6
|
+
type CollectionReference<AppModelType = DocumentData, DbModelType extends DocumentData = DocumentData> = CollectionReference$1<AppModelType, DbModelType, admin.firestore.CollectionReference<AppModelType, DbModelType>>;
|
|
7
|
+
type CollectionGroup<AppModelType = DocumentData, DbModelType extends DocumentData = DocumentData> = CollectionGroup$1<AppModelType, DbModelType, admin.firestore.CollectionGroup<AppModelType, DbModelType>>;
|
|
8
|
+
type Query<AppModelType = DocumentData, DbModelType extends DocumentData = DocumentData> = Query$1<AppModelType, DbModelType, admin.firestore.Query<AppModelType, DbModelType>>;
|
|
9
|
+
type QueryFn<AppModelType = DocumentData, DbModelType extends DocumentData = DocumentData> = QueryFn$1<AppModelType, DbModelType, admin.firestore.Query>;
|
|
10
|
+
type Origin<AppModelType = DocumentData, DbModelType extends DocumentData = DocumentData> = admin.firestore.CollectionReference<AppModelType, DbModelType> | admin.firestore.CollectionGroup<AppModelType, DbModelType> | admin.firestore.Query<AppModelType, DbModelType>;
|
|
11
|
+
type CollectionLike<AppModelType = DocumentData, DbModelType extends DocumentData = DocumentData> = CollectionReference<AppModelType, DbModelType> | CollectionGroup<AppModelType, DbModelType> | Query<AppModelType, DbModelType>;
|
|
12
|
+
type InferCollectionLike<O extends Origin> = O extends admin.firestore.CollectionReference<infer A, infer B> ? CollectionReference<A, B> : O extends admin.firestore.CollectionGroup<infer A, infer B> ? CollectionGroup<A, B> : O extends admin.firestore.Query<infer A, infer B> ? Query<A, B> : never;
|
|
13
|
+
declare function wrapCollectionLike<O extends Origin>(origin: O): InferCollectionLike<O>;
|
|
14
|
+
declare function unwrapCollectionLike<AppModelType = DocumentData, DbModelType extends DocumentData = DocumentData>(collection: CollectionLike<AppModelType, DbModelType>): Origin<AppModelType, DbModelType>;
|
|
15
|
+
declare class AdminFirestoreAdapter<Date> extends FirestoreAdapter<Date> {
|
|
16
|
+
protected firestore: admin.firestore.Firestore;
|
|
17
|
+
get FieldValue(): typeof admin.firestore.FieldValue;
|
|
18
|
+
get Timestamp(): typeof admin.firestore.Timestamp;
|
|
19
|
+
get FieldPath(): typeof admin.firestore.FieldPath;
|
|
20
|
+
protected isTimestamp(v: any): v is admin.firestore.Timestamp;
|
|
21
|
+
protected isFieldValue(v: any): v is admin.firestore.FieldValue;
|
|
22
|
+
convertDateToTimestamp(date: Date): admin.firestore.Timestamp;
|
|
23
|
+
doc(path: string): DocumentReference<any, admin.firestore.DocumentReference>;
|
|
24
|
+
collection<AppModelType = DocumentData, DbModelType extends DocumentData = DocumentData>(path: string): CollectionReference<AppModelType, DbModelType>;
|
|
25
|
+
collectionGroup<AppModelType = DocumentData, DbModelType extends DocumentData = DocumentData>(collectionId: string): CollectionGroup<AppModelType, DbModelType>;
|
|
26
|
+
runTransaction<T>(updateFunction: (transaction: Transaction) => Promise<T>): Promise<T>;
|
|
27
|
+
query<AppModelType = DocumentData, DbModelType extends DocumentData = DocumentData>(collection: CollectionLike<AppModelType, DbModelType>, ...queryFnArray: QueryFn<AppModelType, DbModelType>[]): Query<AppModelType, DbModelType>;
|
|
28
|
+
where<AppModelType = DocumentData, DbModelType extends DocumentData = DocumentData>(key: string, evaluation: WhereFilterOp, value: unknown): QueryFn<AppModelType, DbModelType>;
|
|
29
|
+
orderBy<AppModelType = DocumentData, DbModelType extends DocumentData = DocumentData>(key: string, order?: 'asc' | 'desc'): QueryFn<AppModelType, DbModelType>;
|
|
30
|
+
limit<AppModelType = DocumentData, DbModelType extends DocumentData = DocumentData>(n: number): QueryFn<AppModelType, DbModelType>;
|
|
31
|
+
batch(): admin.firestore.WriteBatch;
|
|
32
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<AdminFirestoreAdapter<any>, never>;
|
|
33
|
+
static ɵprov: i0.ɵɵInjectableDeclaration<AdminFirestoreAdapter<any>>;
|
|
34
|
+
}
|
|
35
|
+
declare function provideFirestoreAdapter(): {
|
|
36
|
+
provide: typeof FirestoreAdapter;
|
|
37
|
+
useClass: new () => FirestoreAdapter;
|
|
38
|
+
};
|
|
39
|
+
|
|
40
|
+
export { AdminFirestoreAdapter, provideFirestoreAdapter, unwrapCollectionLike, wrapCollectionLike };
|
|
@@ -1 +1,35 @@
|
|
|
1
|
-
|
|
1
|
+
import firestore, { FieldValue, Timestamp, FieldPath } from 'firebase/firestore';
|
|
2
|
+
import { DocumentData, CollectionReference as CollectionReference$1, CollectionGroup as CollectionGroup$1, Query as Query$1, FirestoreAdapter, DocumentReference, QueryFn as QueryFn$1, WhereFilterOp } from '@nx-ddd/firestore';
|
|
3
|
+
import * as i0 from '@angular/core';
|
|
4
|
+
|
|
5
|
+
type CollectionReference<AppModelType = DocumentData, DbModelType extends DocumentData = DocumentData> = CollectionReference$1<AppModelType, DbModelType, firestore.CollectionReference<AppModelType, DbModelType>>;
|
|
6
|
+
type CollectionGroup<AppModelType = DocumentData, DbModelType extends DocumentData = DocumentData> = CollectionGroup$1<AppModelType, DbModelType, firestore.Query<AppModelType, DbModelType>>;
|
|
7
|
+
type Query<AppModelType = DocumentData, DbModelType extends DocumentData = DocumentData> = Query$1<AppModelType, DbModelType, firestore.Query<AppModelType, DbModelType>>;
|
|
8
|
+
type QueryFn<AppModelType = DocumentData, DbModelType extends DocumentData = DocumentData> = QueryFn$1<AppModelType, DbModelType, firestore.QueryConstraint>;
|
|
9
|
+
type Origin<AppModelType = DocumentData, DbModelType extends DocumentData = DocumentData> = firestore.CollectionReference<AppModelType, DbModelType> | firestore.Query<AppModelType, DbModelType> | firestore.Query<AppModelType, DbModelType>;
|
|
10
|
+
type CollectionLike<AppModelType = DocumentData, DbModelType extends DocumentData = DocumentData> = CollectionReference<AppModelType, DbModelType> | CollectionGroup<AppModelType, DbModelType> | Query<AppModelType, DbModelType>;
|
|
11
|
+
type InferCollectionLike<O extends Origin> = O extends firestore.CollectionReference<infer A, infer B> ? CollectionReference<A, B> : O extends firestore.Query<infer A, infer B> ? CollectionGroup<A, B> : O extends firestore.Query<infer A, infer B> ? Query<A, B> : never;
|
|
12
|
+
declare function wrapCollectionLike<O extends Origin>(origin: O): InferCollectionLike<O>;
|
|
13
|
+
declare function unwrapCollectionLike<AppModelType = DocumentData, DbModelType extends DocumentData = DocumentData>(collection: CollectionLike<AppModelType, DbModelType>): Origin<AppModelType, DbModelType>;
|
|
14
|
+
declare class FirebaseFirestoreAdapter<D> extends FirestoreAdapter<D> {
|
|
15
|
+
firestore: firestore.Firestore;
|
|
16
|
+
constructor(firestore?: firestore.Firestore);
|
|
17
|
+
get FieldValue(): typeof FieldValue;
|
|
18
|
+
get Timestamp(): typeof Timestamp;
|
|
19
|
+
get FieldPath(): FieldPath;
|
|
20
|
+
protected isTimestamp(v: any): v is Timestamp;
|
|
21
|
+
protected isFieldValue(v: any): v is FieldValue;
|
|
22
|
+
doc(path: string): DocumentReference<any>;
|
|
23
|
+
collection<AppModelType = DocumentData, DbModelType extends DocumentData = DocumentData>(path: string): CollectionReference<AppModelType, DbModelType>;
|
|
24
|
+
collectionGroup<AppModelType = DocumentData, DbModelType extends DocumentData = DocumentData>(collectionId: string): CollectionGroup<AppModelType, DbModelType>;
|
|
25
|
+
query<AppModelType = DocumentData, DbModelType extends DocumentData = DocumentData>(collection: CollectionReference<AppModelType, DbModelType>, ...queryFnArray: QueryFn[]): Query<AppModelType, DbModelType>;
|
|
26
|
+
where<AppModelType = DocumentData, DbModelType extends DocumentData = DocumentData>(fieldPath: string, opStr: WhereFilterOp, value: unknown): QueryFn;
|
|
27
|
+
orderBy<AppModelType = DocumentData, DbModelType extends DocumentData = DocumentData>(key: string, order?: 'asc' | 'desc'): QueryFn;
|
|
28
|
+
limit<AppModelType = DocumentData, DbModelType extends DocumentData = DocumentData>(n: number): QueryFn;
|
|
29
|
+
runTransaction(): void;
|
|
30
|
+
batch(): firestore.WriteBatch;
|
|
31
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<FirebaseFirestoreAdapter<any>, never>;
|
|
32
|
+
static ɵprov: i0.ɵɵInjectableDeclaration<FirebaseFirestoreAdapter<any>>;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
export { FirebaseFirestoreAdapter, unwrapCollectionLike, wrapCollectionLike };
|
|
@@ -1,9 +1,10 @@
|
|
|
1
|
-
import
|
|
1
|
+
import * as i0 from '@angular/core';
|
|
2
2
|
import { Injectable } from '@angular/core';
|
|
3
3
|
import admin from 'firebase-admin';
|
|
4
4
|
import { Subject } from 'rxjs';
|
|
5
|
-
import { FirestoreAdapter, provideFirestoreAdapter as
|
|
6
|
-
|
|
5
|
+
import { FirestoreAdapter, provideFirestoreAdapter as provideFirestoreAdapter$1 } from '@nx-ddd/firestore';
|
|
6
|
+
|
|
7
|
+
function wrapCollectionLike(origin) {
|
|
7
8
|
return {
|
|
8
9
|
__ref: origin,
|
|
9
10
|
stateChanges: () => {
|
|
@@ -20,10 +21,10 @@ export function wrapCollectionLike(origin) {
|
|
|
20
21
|
count: () => origin.get().then(snapshot => snapshot.size),
|
|
21
22
|
};
|
|
22
23
|
}
|
|
23
|
-
|
|
24
|
+
function unwrapCollectionLike(collection) {
|
|
24
25
|
return collection.__ref;
|
|
25
26
|
}
|
|
26
|
-
|
|
27
|
+
class AdminFirestoreAdapter extends FirestoreAdapter {
|
|
27
28
|
constructor() {
|
|
28
29
|
super(...arguments);
|
|
29
30
|
this.firestore = admin.firestore();
|
|
@@ -88,12 +89,19 @@ let AdminFirestoreAdapter = class AdminFirestoreAdapter extends FirestoreAdapter
|
|
|
88
89
|
batch() {
|
|
89
90
|
return this.firestore.batch();
|
|
90
91
|
}
|
|
91
|
-
};
|
|
92
|
-
|
|
93
|
-
Injectable()
|
|
94
|
-
], AdminFirestoreAdapter);
|
|
95
|
-
export { AdminFirestoreAdapter };
|
|
96
|
-
export function provideFirestoreAdapter() {
|
|
97
|
-
return _provideFirestoreAdapter(AdminFirestoreAdapter);
|
|
92
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.5", ngImport: i0, type: AdminFirestoreAdapter, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
93
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.0.5", ngImport: i0, type: AdminFirestoreAdapter }); }
|
|
98
94
|
}
|
|
99
|
-
|
|
95
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.5", ngImport: i0, type: AdminFirestoreAdapter, decorators: [{
|
|
96
|
+
type: Injectable
|
|
97
|
+
}] });
|
|
98
|
+
function provideFirestoreAdapter() {
|
|
99
|
+
return provideFirestoreAdapter$1(AdminFirestoreAdapter);
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
/**
|
|
103
|
+
* Generated bundle index. Do not edit.
|
|
104
|
+
*/
|
|
105
|
+
|
|
106
|
+
export { AdminFirestoreAdapter, provideFirestoreAdapter, unwrapCollectionLike, wrapCollectionLike };
|
|
107
|
+
//# sourceMappingURL=nx-ddd-firestore-adapters-admin.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nx-ddd-firestore-adapters-admin.mjs","sources":["../tmp-esm2022/adapters/admin/admin.adapter.js","../tmp-esm2022/adapters/admin/nx-ddd-firestore-adapters-admin.js"],"sourcesContent":["import { Injectable } from '@angular/core';\nimport admin from 'firebase-admin';\nimport { Subject } from 'rxjs';\nimport { FirestoreAdapter, provideFirestoreAdapter as _provideFirestoreAdapter } from '@nx-ddd/firestore';\nimport * as i0 from \"@angular/core\";\nexport function wrapCollectionLike(origin) {\n return {\n __ref: origin,\n stateChanges: () => {\n const subject = new Subject();\n origin.onSnapshot(snapshot => {\n const actions = snapshot.docChanges().map(change => ({\n type: change.type, payload: { doc: change.doc },\n }));\n subject.next(actions);\n });\n return subject.asObservable();\n },\n get: () => origin.get(),\n count: () => origin.get().then(snapshot => snapshot.size),\n };\n}\nexport function unwrapCollectionLike(collection) {\n return collection.__ref;\n}\nexport class AdminFirestoreAdapter extends FirestoreAdapter {\n constructor() {\n super(...arguments);\n this.firestore = admin.firestore();\n }\n get FieldValue() {\n return admin.firestore.FieldValue;\n }\n get Timestamp() {\n return admin.firestore.Timestamp;\n }\n get FieldPath() {\n return admin.firestore.FieldPath;\n }\n isTimestamp(v) {\n return v instanceof this.Timestamp;\n }\n isFieldValue(v) {\n return v instanceof this.FieldValue;\n }\n convertDateToTimestamp(date) {\n if (this.dateAdapter.isDate(date) && this.dateAdapter.isValid(date)) {\n return admin.firestore.Timestamp.fromDate(this.dateAdapter.getJsDate(date));\n }\n throw new Error(`Invalid date: ${date}`);\n }\n doc(path) {\n const docRef = this.firestore.doc(path);\n return {\n __ref: docRef,\n exists: () => docRef.get().then(snapshot => snapshot.exists),\n set: (data, options) => docRef.set(data, options),\n get: () => docRef.get(),\n update: (data) => docRef.update(data),\n delete: () => docRef.delete(),\n };\n }\n collection(path) {\n const collectionRef = this.firestore.collection(path);\n return wrapCollectionLike(collectionRef);\n }\n collectionGroup(collectionId) {\n const collectionRef = this.firestore.collectionGroup(collectionId);\n return wrapCollectionLike(collectionRef);\n }\n runTransaction(updateFunction) {\n return this.firestore.runTransaction(updateFunction);\n }\n query(collection, ...queryFnArray) {\n const ref = unwrapCollectionLike(collection);\n const query = queryFnArray.reduce((_ref, queryFn) => queryFn(_ref), ref);\n return wrapCollectionLike(query);\n }\n where(key, evaluation, value) {\n return (collection) => collection.where(key, evaluation, value);\n }\n orderBy(key, order = 'asc') {\n return (collection) => collection.orderBy(key, order);\n }\n limit(n) {\n return (collection) => collection.limit(n);\n }\n batch() {\n return this.firestore.batch();\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.0.5\", ngImport: i0, type: AdminFirestoreAdapter, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.0.5\", ngImport: i0, type: AdminFirestoreAdapter }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.0.5\", ngImport: i0, type: AdminFirestoreAdapter, decorators: [{\n type: Injectable\n }] });\nexport function provideFirestoreAdapter() {\n return _provideFirestoreAdapter(AdminFirestoreAdapter);\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRtaW4uYWRhcHRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL0BueC1kZGQvZmlyZXN0b3JlL3NyYy9saWIvYWRhcHRlcnMvYWRtaW4vYWRtaW4uYWRhcHRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sS0FBSyxNQUFNLGdCQUFnQixDQUFDO0FBQ25DLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFRL0IsT0FBTyxFQUFFLGdCQUFnQixFQUFzQyx1QkFBdUIsSUFBSSx3QkFBd0IsRUFBRSxNQUFNLG1CQUFtQixDQUFDOztBQTJDOUksTUFBTSxVQUFVLGtCQUFrQixDQUFtQixNQUFTO0lBQzVELE9BQU87UUFDTCxLQUFLLEVBQUUsTUFBTTtRQUNiLFlBQVksRUFBRSxHQUFHLEVBQUU7WUFDakIsTUFBTSxPQUFPLEdBQUcsSUFBSSxPQUFPLEVBQStCLENBQUM7WUFDM0QsTUFBTSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsRUFBRTtnQkFDM0IsTUFBTSxPQUFPLEdBQUcsUUFBUSxDQUFDLFVBQVUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7b0JBQ25ELElBQUksRUFBRSxNQUFNLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxFQUFDLEdBQUcsRUFBRSxNQUFNLENBQUMsR0FBRyxFQUFDO2lCQUM5QyxDQUFDLENBQUMsQ0FBQztnQkFDSixPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ3hCLENBQUMsQ0FBQyxDQUFDO1lBQ0gsT0FBTyxPQUFPLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDaEMsQ0FBQztRQUNELEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFO1FBQ3ZCLEtBQUssRUFBRSxH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SCxVQUFxRCxFQUNyRCxHQUFHLFlBQWtEO1FBRXJELE1BQU0sR0FBRyxHQUFHLG9CQUFvQixDQUE0QixVQUFVLENBQUMsQ0FBQztRQUN4RSxNQUFNLEtBQUssR0FBRyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ3pFLE9BQU8sa0JBQWtCLENBQUMsS0FBSyxDQUFxQyxDQUFDO0lBQ3ZFLENBQUM7SUFFRCxLQUFLLENBR0gsR0FBVyxFQUFFLFVBQXlCLEVBQUUsS0FBYztRQUN0RCxPQUFPLENBQUMsVUFBNkMsRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsVUFBVSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ3JHLENBQUM7SUFFRCxPQUFPLENBR0wsR0FBVyxFQUFFLFFBQXdCLEtBQUs7UUFDMUMsT0FBTyxDQUFDLFVBQTZDLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQzNGLENBQUM7SUFFRCxLQUFLLENBR0gsQ0FBUztRQUNULE9BQU8sQ0FBQyxVQUE2QyxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2hGLENBQUM7SUFFRCxLQUFLO1FBQ0gsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ2hDLENBQUM7OEdBakdVLHFCQUFxQjtrSEFBckIscUJBQXFCOzsyRkFBckIscUJBQXFCO2tCQURqQyxVQUFVOztBQXFHWCxNQUFNLFVBQVUsdUJBQXVCO0lBQ3JDLE9BQU8sd0JBQXdCLENBQUMscUJBQXFCLENBQUMsQ0FBQztBQUN6RCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IGFkbWluIGZyb20gJ2ZpcmViYXNlLWFkbWluJztcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IERvY3VtZW50RGF0YSwgVHJhbnNhY3Rpb24gfSBmcm9tICdmaXJlYmFzZS1hZG1pbi9maXJlc3RvcmUnO1xuaW1wb3J0IHtcbiAgRG9jdW1lbnRDaGFuZ2VBY3Rpb24sXG4gIERvY3VtZW50UmVmZXJlbmNlLFxuICBDb2xsZWN0aW9uUmVmZXJlbmNlIGFzIF9Db2xsZWN0aW9uUmVmZXJlbmNlLFxuICBDb2xsZWN0aW9uR3JvdXAgYXMgX0NvbGxlY3Rpb25Hcm91cCxcbiAgUXVlcnkgYXMgX1F1ZXJ5IH0gZnJvbSAnQG54LWRkZC9maXJlc3RvcmUnO1xuaW1wb3J0IHsgRmlyZXN0b3JlQWRhcHRlciwgUXVlcnlGbiBhcyBfUXVlcnlGbiwgV2hlcmVGaWx0ZXJPcCwgcHJvdmlkZUZpcmVzdG9yZUFkYXB0ZXIgYXMgX3Byb3ZpZGVGaXJlc3RvcmVBZGFwdGVyIH0gZnJvbSAnQG54LWRkZC9maXJlc3RvcmUnO1xuXG50eXBlIENvbGxlY3Rpb25SZWZlcmVuY2U8XG4gIEFwcE1vZGVsVHlwZSA9IERvY3VtZW50RGF0YSxcbiAgRGJNb2RlbFR5cGUgZXh0ZW5kcyBEb2N1bWVudERhdGEgPSBEb2N1bWVudERhdGEsXG4+ID0gX0NvbGxlY3Rpb25SZWZlcmVuY2U8QXBwTW9kZWxUeXBlLCBEYk1vZGVsVHlwZSwgYWRtaW4uZmlyZXN0b3JlLkNvbGxlY3Rpb25SZWZlcmVuY2U8QXBwTW9kZWxUeXBlLCBEYk1vZGVsVHlwZT4+O1xuXG50eXBlIENvbGxlY3Rpb25Hcm91cDxcbiAgQXBwTW9kZWxUeXBlID0gRG9jdW1lbnREYXRhLFxuICBEYk1vZGVsVHlwZSBleHRlbmRzIERvY3VtZW50RGF0YSA9IERvY3VtZW50RGF0YVxuPiA9IF9Db2xsZWN0aW9uR3JvdXA8QXBwTW9kZWxUeXBlLCBEYk1vZGVsVHlwZSwgYWRtaW4uZmlyZXN0b3JlLkNvbGxlY3Rpb25Hcm91cDxBcHBNb2RlbFR5cGUsIERiTW9kZWxUeXBlPj47XG5cbnR5cGUgUXVlcnk8XG4gIEFwcE1vZGVsVHlwZSA9IERvY3VtZW50RGF0YSxcbiAgRGJNb2RlbFR5cGUgZXh0ZW5kcyBEb2N1bWVudERhdGEgPSBEb2N1bWVudERhdGFcbj4gPSBfUXVlcnk8QXBwTW9kZWxUeXBlLCBEYk1vZGVsVHlwZSwgYWRtaW4uZmlyZXN0b3JlLlF1ZXJ5PEFwcE1vZGVsVHlwZSwgRGJNb2RlbFR5cGU+PjtcblxudHlwZSBRdWVyeUZuPFxuICBBcHBNb2RlbFR5cGUgPSBEb2N1bWVudERhdGEsXG4gIERiTW9kZWxUeXBlIGV4dGVuZHMgRG9jdW1lbnREYXRhID0gRG9jdW1lbnREYXRhXG4+ID0gX1F1ZXJ5Rm48QXBwTW9kZWxUeXBlLCBEYk1vZGVsVHlwZSwgYWRtaW4uZmlyZXN0b3JlLlF1ZXJ5PlxuXG50eXBlIE9yaWdpbjxcbiAgQXBwTW9kZWxUeXBlID0gRG9jdW1lbnREYXRhLFxuICBEYk1vZGVsVHlwZSBleHRlbmRzIERvY3VtZW50RGF0YSA9IERvY3VtZW50RGF0YSxcbj4gPSBhZG1pbi5maXJlc3RvcmUuQ29sbGVjdGlvblJlZmVyZW5jZTxBcHBNb2RlbFR5cGUsIERiTW9kZWxUeXBlPlxuICB8IGFkbWluLmZpcmVzdG9yZS5Db2xsZWN0aW9uR3JvdXA8QXBwTW9kZWxUeXBlLCBEYk1vZGVsVHlwZT5cbiAgfCBhZG1pbi5maXJlc3RvcmUuUXVlcnk8QXBwTW9kZWxUeXBlLCBEYk1vZGVsVHlwZT47XG5cbnR5cGUgQ29sbGVjdGlvbkxpa2U8XG4gIEFwcE1vZGVsVHlwZSA9IERvY3VtZW50RGF0YSxcbiAgRGJNb2RlbFR5cGUgZXh0ZW5kcyBEb2N1bWVudERhdGEgPSBEb2N1bWVudERhdGEsXG4+ID0gQ29sbGVjdGlvblJlZmVyZW5jZTxBcHBNb2RlbFR5cGUsIERiTW9kZWxUeXBlPiBcbiAgfCBDb2xsZWN0aW9uR3JvdXA8QXBwTW9kZWxUeXBlLCBEYk1vZGVsVHlwZT5cbiAgfCBRdWVyeTxBcHBNb2RlbFR5cGUsIERiTW9kZWxUeXBlPjtcblxuLy8gVXRpbGl0eSB0eXBlIHRvIG1hcCBPcmlnaW4gdG8gQ29sbGVjdGlvbkxpa2VcbnR5cGUgSW5mZXJDb2xsZWN0aW9uTGlrZTxPIGV4dGVuZHMgT3JpZ2luPiA9IFxuICBPIGV4dGVuZHMgYWRtaW4uZmlyZXN0b3JlLkNvbGxlY3Rpb25SZWZlcmVuY2U8aW5mZXIgQSwgaW5mZXIgQj4gPyBDb2xsZWN0aW9uUmVmZXJlbmNlPEEsIEI+IDpcbiAgTyBleHRlbmRzIGFkbWluLmZpcmVzdG9yZS5Db2xsZWN0aW9uR3JvdXA8aW5mZXIgQSwgaW5mZXIgQj4gPyBDb2xsZWN0aW9uR3JvdXA8QSwgQj4gOlxuICBPIGV4dGVuZHMgYWRtaW4uZmlyZXN0b3JlLlF1ZXJ5PGluZmVyIEEsIGluZmVyIEI+ID8gUXVlcnk8QSwgQj4gOlxuICBuZXZlcjtcblxuZXhwb3J0IGZ1bmN0aW9uIHdyYXBDb2xsZWN0aW9uTGlrZTxPIGV4dGVuZHMgT3JpZ2luPihvcmlnaW46IE8pOiBJbmZlckNvbGxlY3Rpb25MaWtlPE8+IHtcbiAgcmV0dXJuIHtcbiAgICBfX3JlZjogb3JpZ2luLFxuICAgIHN0YXRlQ2hhbmdlczogKCkgPT4ge1xuICAgICAgY29uc3Qgc3ViamVjdCA9IG5ldyBTdWJqZWN0PERvY3VtZW50Q2hhbmdlQWN0aW9uPGFueT5bXT4oKTtcbiAgICAgIG9yaWdpbi5vblNuYXBzaG90KHNuYXBzaG90ID0+IHtcbiAgICAgICAgY29uc3QgYWN0aW9ucyA9IHNuYXBzaG90LmRvY0NoYW5nZXMoKS5tYXAoY2hhbmdlID0+ICh7XG4gICAgICAgICAgdHlwZTogY2hhbmdlLnR5cGUsIHBheWxvYWQ6IHtkb2M6IGNoYW5nZS5kb2N9LFxuICAgICAgICB9KSk7XG4gICAgICAgIHN1YmplY3QubmV4dChhY3Rpb25zKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG4gICAgfSxcbiAgICBnZXQ6ICgpID0+IG9yaWdpbi5nZXQoKSxcbiAgICBjb3VudDogKCkgPT4gb3JpZ2luLmdldCgpLnRoZW4oc25hcHNob3QgPT4gc25hcHNob3Quc2l6ZSksXG4gIH0gYXMgbmV2ZXIgYXMgSW5mZXJDb2xsZWN0aW9uTGlrZTxPPjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVud3JhcENvbGxlY3Rpb25MaWtlPFxuICBBcHBNb2RlbFR5cGUgPSBEb2N1bWVudERhdGEsXG4gIERiTW9kZWxUeXBlIGV4dGVuZHMgRG9jdW1lbnREYXRhID0gRG9jdW1lbnREYXRhXG4+KFxuICBjb2xsZWN0aW9uOiBDb2xsZWN0aW9uTGlrZTxBcHBNb2RlbFR5cGUsIERiTW9kZWxUeXBlPlxuKTogT3JpZ2luPEFwcE1vZGVsVHlwZSwgRGJNb2RlbFR5cGU+IHtcbiAgcmV0dXJuIGNvbGxlY3Rpb24uX19yZWY7XG59XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBBZG1pbkZpcmVzdG9yZUFkYXB0ZXI8RGF0ZT4gZXh0ZW5kcyBGaXJlc3RvcmVBZGFwdGVyPERhdGU+IHtcbiAgcHJvdGVjdGVkIGZpcmVzdG9yZSA9IGFkbWluLmZpcmVzdG9yZSgpO1xuXG4gIGdldCBGaWVsZFZhbHVlKCk6IHR5cGVvZiBhZG1pbi5maXJlc3RvcmUuRmllbGRWYWx1ZSB7XG4gICAgcmV0dXJuIGFkbWluLmZpcmVzdG9yZS5GaWVsZFZhbHVlOyAgXG4gIH1cblxuICBnZXQgVGltZXN0YW1wKCk6IHR5cGVvZiBhZG1pbi5maXJlc3RvcmUuVGltZXN0YW1wIHtcbiAgICByZXR1cm4gYWRtaW4uZmlyZXN0b3JlLlRpbWVzdGFtcDsgIFxuICB9XG5cbiAgZ2V0IEZpZWxkUGF0aCgpOiB0eXBlb2YgYWRtaW4uZmlyZXN0b3JlLkZpZWxkUGF0aCB7XG4gICAgcmV0dXJuIGFkbWluLmZpcmVzdG9yZS5GaWVsZFBhdGg7XG4gIH1cblxuICBwcm90ZWN0ZWQgaXNUaW1lc3RhbXAodjogYW55KTogdiBpcyBhZG1pbi5maXJlc3RvcmUuVGltZXN0YW1wIHtcbiAgICByZXR1cm4gdiBpbnN0YW5jZW9mIHRoaXMuVGltZXN0YW1wO1xuICB9XG5cbiAgcHJvdGVjdGVkIGlzRmllbGRWYWx1ZSh2OiBhbnkpOiB2IGlzIGFkbWluLmZpcmVzdG9yZS5GaWVsZFZhbHVlIHtcbiAgICByZXR1cm4gdiBpbnN0YW5jZW9mIHRoaXMuRmllbGRWYWx1ZTtcbiAgfVxuXG4gIGNvbnZlcnREYXRlVG9UaW1lc3RhbXAoZGF0ZTogRGF0ZSk6IGFkbWluLmZpcmVzdG9yZS5UaW1lc3RhbXAge1xuICAgIGlmICh0aGlzLmRhdGVBZGFwdGVyLmlzRGF0ZShkYXRlKSAmJiB0aGlzLmRhdGVBZGFwdGVyLmlzVmFsaWQoZGF0ZSkpIHtcbiAgICAgIHJldHVybiBhZG1pbi5maXJlc3RvcmUuVGltZXN0YW1wLmZyb21EYXRlKHRoaXMuZGF0ZUFkYXB0ZXIuZ2V0SnNEYXRlKGRhdGUpKTtcbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGRhdGU6ICR7ZGF0ZX1gKTtcbiAgfVxuXG4gIGRvYyhwYXRoOiBzdHJpbmcpOiBEb2N1bWVudFJlZmVyZW5jZTxhbnksIGFkbWluLmZpcmVzdG9yZS5Eb2N1bWVudFJlZmVyZW5jZT4ge1xuICAgIGNvbnN0IGRvY1JlZiA9IHRoaXMuZmlyZXN0b3JlLmRvYyhwYXRoKTtcbiAgICByZXR1cm4ge1xuICAgICAgX19yZWY6IGRvY1JlZixcbiAgICAgIGV4aXN0czogKCkgPT4gZG9jUmVmLmdldCgpLnRoZW4oc25hcHNob3QgPT4gc25hcHNob3QuZXhpc3RzKSxcbiAgICAgIHNldDogKGRhdGEsIG9wdGlvbnM/KSA9PiBkb2NSZWYuc2V0KGRhdGEsIG9wdGlvbnMpLFxuICAgICAgZ2V0OiAoKSA9PiBkb2NSZWYuZ2V0KCksXG4gICAgICB1cGRhdGU6IChkYXRhKSA9PiBkb2NSZWYudXBkYXRlKGRhdGEpLFxuICAgICAgZGVsZXRlOiAoKSA9PiBkb2NSZWYuZGVsZXRlKCksXG4gICAgfTtcbiAgfVxuXG4gIGNvbGxlY3Rpb248XG4gICAgQXBwTW9kZWxUeXBlID0gRG9jdW1lbnREYXRhLFxuICAgIERiTW9kZWxUeXBlIGV4dGVuZHMgRG9jdW1lbnREYXRhID0gRG9jdW1lbnREYXRhLFxuICA+KHBhdGg6IHN0cmluZyk6IENvbGxlY3Rpb25SZWZlcmVuY2U8QXBwTW9kZWxUeXBlLCBEYk1vZGVsVHlwZT4ge1xuICAgIGNvbnN0IGNvbGxlY3Rpb25SZWYgPSB0aGlzLmZpcmVzdG9yZS5jb2xsZWN0aW9uKHBhdGgpO1xuICAgIHJldHVybiB3cmFwQ29sbGVjdGlvbkxpa2UoY29sbGVjdGlvblJlZikgYXMgQ29sbGVjdGlvblJlZmVyZW5jZTxBcHBNb2RlbFR5cGUsIERiTW9kZWxUeXBlPjtcbiAgfVxuXG4gIGNvbGxlY3Rpb25Hcm91cDxcbiAgICBBcHBNb2RlbFR5cGUgPSBEb2N1bWVudERhdGEsXG4gICAgRGJNb2RlbFR5cGUgZXh0ZW5kcyBEb2N1bWVudERhdGEgPSBEb2N1bWVudERhdGEsXG4gID4oY29sbGVjdGlvbklkOiBzdHJpbmcpOiBDb2xsZWN0aW9uR3JvdXA8QXBwTW9kZWxUeXBlLCBEYk1vZGVsVHlwZT4ge1xuICAgIGNvbnN0IGNvbGxlY3Rpb25SZWYgPSB0aGlzLmZpcmVzdG9yZS5jb2xsZWN0aW9uR3JvdXAoY29sbGVjdGlvbklkKTtcbiAgICByZXR1cm4gd3JhcENvbGxlY3Rpb25MaWtlKGNvbGxlY3Rpb25SZWYpIGFzIENvbGxlY3Rpb25Hcm91cDxBcHBNb2RlbFR5cGUsIERiTW9kZWxUeXBlPjtcbiAgfVxuICBcbiAgcnVuVHJhbnNhY3Rpb248VD4odXBkYXRlRnVuY3Rpb246ICh0cmFuc2FjdGlvbjogVHJhbnNhY3Rpb24pID0+IFByb21pc2U8VD4pIHtcbiAgICByZXR1cm4gdGhpcy5maXJlc3RvcmUucnVuVHJhbnNhY3Rpb24odXBkYXRlRnVuY3Rpb24pO1xuICB9XG5cbiAgcXVlcnk8XG4gICAgQXBwTW9kZWxUeXBlID0gRG9jdW1lbnREYXRhLFxuICAgIERiTW9kZWxUeXBlIGV4dGVuZHMgRG9jdW1lbnREYXRhID0gRG9jdW1lbnREYXRhLFxuICA+KFxuICAgIGNvbGxlY3Rpb246IENvbGxlY3Rpb25MaWtlPEFwcE1vZGVsVHlwZSwgRGJNb2RlbFR5cGU+LFxuICAgIC4uLnF1ZXJ5Rm5BcnJheTogUXVlcnlGbjxBcHBNb2RlbFR5cGUsIERiTW9kZWxUeXBlPltdXG4gICk6IFF1ZXJ5PEFwcE1vZGVsVHlwZSwgRGJNb2RlbFR5cGU+IHtcbiAgICBjb25zdCByZWYgPSB1bndyYXBDb2xsZWN0aW9uTGlrZTxBcHBNb2RlbFR5cGUsIERiTW9kZWxUeXBlPihjb2xsZWN0aW9uKTtcbiAgICBjb25zdCBxdWVyeSA9IHF1ZXJ5Rm5BcnJheS5yZWR1Y2UoKF9yZWYsIHF1ZXJ5Rm4pID0+IHF1ZXJ5Rm4oX3JlZiksIHJlZik7XG4gICAgcmV0dXJuIHdyYXBDb2xsZWN0aW9uTGlrZShxdWVyeSkgYXMgUXVlcnk8QXBwTW9kZWxUeXBlLCBEYk1vZGVsVHlwZT47XG4gIH1cblxuICB3aGVyZTxcbiAgICBBcHBNb2RlbFR5cGUgPSBEb2N1bWVudERhdGEsXG4gICAgRGJNb2RlbFR5cGUgZXh0ZW5kcyBEb2N1bWVudERhdGEgPSBEb2N1bWVudERhdGEsXG4gID4oa2V5OiBzdHJpbmcsIGV2YWx1YXRpb246IFdoZXJlRmlsdGVyT3AsIHZhbHVlOiB1bmtub3duKTogUXVlcnlGbjxBcHBNb2RlbFR5cGUsIERiTW9kZWxUeXBlPiB7XG4gICAgcmV0dXJuIChjb2xsZWN0aW9uOiBPcmlnaW48QXBwTW9kZWxUeXBlLCBEYk1vZGVsVHlwZT4pID0+IGNvbGxlY3Rpb24ud2hlcmUoa2V5LCBldmFsdWF0aW9uLCB2YWx1ZSk7ICBcbiAgfVxuXG4gIG9yZGVyQnk8XG4gICAgQXBwTW9kZWxUeXBlID0gRG9jdW1lbnREYXRhLFxuICAgIERiTW9kZWxUeXBlIGV4dGVuZHMgRG9jdW1lbnREYXRhID0gRG9jdW1lbnREYXRhLFxuICA+KGtleTogc3RyaW5nLCBvcmRlcjogJ2FzYycgfCAnZGVzYycgPSAnYXNjJyk6IFF1ZXJ5Rm48QXBwTW9kZWxUeXBlLCBEYk1vZGVsVHlwZT4ge1xuICAgIHJldHVybiAoY29sbGVjdGlvbjogT3JpZ2luPEFwcE1vZGVsVHlwZSwgRGJNb2RlbFR5cGU+KSA9PiBjb2xsZWN0aW9uLm9yZGVyQnkoa2V5LCBvcmRlcik7XG4gIH1cblxuICBsaW1pdDxcbiAgICBBcHBNb2RlbFR5cGUgPSBEb2N1bWVudERhdGEsXG4gICAgRGJNb2RlbFR5cGUgZXh0ZW5kcyBEb2N1bWVudERhdGEgPSBEb2N1bWVudERhdGEsXG4gID4objogbnVtYmVyKTogUXVlcnlGbjxBcHBNb2RlbFR5cGUsIERiTW9kZWxUeXBlPiB7XG4gICAgcmV0dXJuIChjb2xsZWN0aW9uOiBPcmlnaW48QXBwTW9kZWxUeXBlLCBEYk1vZGVsVHlwZT4pID0+IGNvbGxlY3Rpb24ubGltaXQobik7XG4gIH1cblxuICBiYXRjaCgpIHtcbiAgICByZXR1cm4gdGhpcy5maXJlc3RvcmUuYmF0Y2goKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvdmlkZUZpcmVzdG9yZUFkYXB0ZXIoKSB7XG4gIHJldHVybiBfcHJvdmlkZUZpcmVzdG9yZUFkYXB0ZXIoQWRtaW5GaXJlc3RvcmVBZGFwdGVyKTtcbn1cbiJdfQ==","/**\n * Generated bundle index. Do not edit.\n */\nexport * from './index';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibngtZGRkLWZpcmVzdG9yZS1hZGFwdGVycy1hZG1pbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL0BueC1kZGQvZmlyZXN0b3JlL3NyYy9saWIvYWRhcHRlcnMvYWRtaW4vbngtZGRkLWZpcmVzdG9yZS1hZGFwdGVycy1hZG1pbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL2luZGV4JztcbiJdfQ=="],"names":["_provideFirestoreAdapter"],"mappings":"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"}
|
package/{adapters/firebase/firebase.adapter.js → fesm2022/nx-ddd-firestore-adapters-firebase.mjs}
RENAMED
|
@@ -1,9 +1,10 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { doc, collection, collectionGroup, FieldValue, Timestamp, setDoc, getDoc, getDocs, getFirestore, onSnapshot, deleteDoc, writeBatch, query, orderBy, limit, updateDoc, where, FieldPath } from 'firebase/firestore';
|
|
1
|
+
import { getDocs, onSnapshot, getFirestore, FieldValue, Timestamp, FieldPath, doc, deleteDoc, updateDoc, getDoc, setDoc, collection, collectionGroup, query, where, orderBy, limit, writeBatch } from 'firebase/firestore';
|
|
3
2
|
import { Subject } from 'rxjs';
|
|
4
|
-
import
|
|
3
|
+
import * as i0 from '@angular/core';
|
|
5
4
|
import { Injectable } from '@angular/core';
|
|
6
|
-
|
|
5
|
+
import { FirestoreAdapter } from '@nx-ddd/firestore';
|
|
6
|
+
|
|
7
|
+
function wrapCollectionLike(origin) {
|
|
7
8
|
return {
|
|
8
9
|
__ref: origin,
|
|
9
10
|
stateChanges: () => {
|
|
@@ -20,10 +21,10 @@ export function wrapCollectionLike(origin) {
|
|
|
20
21
|
count: () => getDocs(origin).then(snapshot => snapshot.size),
|
|
21
22
|
};
|
|
22
23
|
}
|
|
23
|
-
|
|
24
|
+
function unwrapCollectionLike(collection) {
|
|
24
25
|
return collection.__ref;
|
|
25
26
|
}
|
|
26
|
-
|
|
27
|
+
class FirebaseFirestoreAdapter extends FirestoreAdapter {
|
|
27
28
|
constructor(firestore = getFirestore()) {
|
|
28
29
|
super();
|
|
29
30
|
this.firestore = firestore;
|
|
@@ -91,10 +92,16 @@ let FirebaseFirestoreAdapter = class FirebaseFirestoreAdapter extends FirestoreA
|
|
|
91
92
|
batch() {
|
|
92
93
|
return writeBatch(this.firestore);
|
|
93
94
|
}
|
|
94
|
-
};
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
95
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.5", ngImport: i0, type: FirebaseFirestoreAdapter, deps: "invalid", target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
96
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.0.5", ngImport: i0, type: FirebaseFirestoreAdapter }); }
|
|
97
|
+
}
|
|
98
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.5", ngImport: i0, type: FirebaseFirestoreAdapter, decorators: [{
|
|
99
|
+
type: Injectable
|
|
100
|
+
}], ctorParameters: () => [{ type: undefined }] });
|
|
101
|
+
|
|
102
|
+
/**
|
|
103
|
+
* Generated bundle index. Do not edit.
|
|
104
|
+
*/
|
|
105
|
+
|
|
106
|
+
export { FirebaseFirestoreAdapter, unwrapCollectionLike, wrapCollectionLike };
|
|
107
|
+
//# sourceMappingURL=nx-ddd-firestore-adapters-firebase.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nx-ddd-firestore-adapters-firebase.mjs","sources":["../tmp-esm2022/adapters/firebase/firebase.adapter.js","../tmp-esm2022/adapters/firebase/nx-ddd-firestore-adapters-firebase.js"],"sourcesContent":["import { doc, collection, collectionGroup, FieldValue, Timestamp, setDoc, getDoc, getDocs, getFirestore, onSnapshot, deleteDoc, writeBatch, query, orderBy, limit, updateDoc, where, FieldPath } from 'firebase/firestore';\nimport { Subject } from 'rxjs';\nimport { Injectable } from '@angular/core';\nimport { FirestoreAdapter } from '@nx-ddd/firestore';\nimport * as i0 from \"@angular/core\";\nexport function wrapCollectionLike(origin) {\n return {\n __ref: origin,\n stateChanges: () => {\n const subject = new Subject();\n onSnapshot(origin, (snapshot) => subject.next(snapshot.docChanges().map(change => ({\n type: change.type,\n payload: {\n doc: change.doc\n },\n }))));\n return subject.asObservable();\n },\n get: () => getDocs(origin),\n count: () => getDocs(origin).then(snapshot => snapshot.size),\n };\n}\nexport function unwrapCollectionLike(collection) {\n return collection.__ref;\n}\nexport class FirebaseFirestoreAdapter extends FirestoreAdapter {\n constructor(firestore = getFirestore()) {\n super();\n this.firestore = firestore;\n }\n get FieldValue() {\n return FieldValue;\n }\n get Timestamp() {\n return Timestamp;\n }\n get FieldPath() {\n return new FieldPath();\n }\n isTimestamp(v) {\n return v instanceof Timestamp;\n }\n isFieldValue(v) {\n return v instanceof this.FieldValue;\n }\n doc(path) {\n const docRef = doc(this.firestore, path);\n return {\n __ref: docRef,\n exists: () => getDoc(docRef).then(doc => doc.exists()),\n set: (data) => setDoc(docRef, data),\n get: () => getDoc(docRef),\n update: (data) => updateDoc(docRef, data),\n delete: () => deleteDoc(docRef),\n stateChanges: () => {\n const subject = new Subject();\n onSnapshot(docRef, (doc) => subject.next({\n id: doc.id,\n ref: doc.ref,\n data: () => doc.data(),\n get: (fieldPath) => doc.get(fieldPath),\n }));\n return subject.asObservable();\n },\n };\n }\n collection(path) {\n const ref = collection(this.firestore, path);\n return wrapCollectionLike(ref);\n }\n collectionGroup(collectionId) {\n const ref = collectionGroup(this.firestore, collectionId);\n return wrapCollectionLike(ref);\n }\n query(collection, ...queryFnArray) {\n const ref = unwrapCollectionLike(collection);\n return wrapCollectionLike(query(ref, ...queryFnArray.map(queryFn => queryFn())));\n }\n where(fieldPath, opStr, value) {\n return () => where(fieldPath, opStr, value);\n }\n orderBy(key, order = 'asc') {\n return () => orderBy(key, order);\n }\n limit(n) {\n return () => limit(n);\n }\n runTransaction() {\n throw new Error('FirebaseFirestoreAdapter#runTransaction is not implemented');\n }\n batch() {\n return writeBatch(this.firestore);\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.0.5\", ngImport: i0, type: FirebaseFirestoreAdapter, deps: \"invalid\", target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.0.5\", ngImport: i0, type: FirebaseFirestoreAdapter }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.0.5\", ngImport: i0, type: FirebaseFirestoreAdapter, decorators: [{\n type: Injectable\n }], ctorParameters: () => [{ type: undefined }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlyZWJhc2UuYWRhcHRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL0BueC1kZGQvZmlyZXN0b3JlL3NyYy9saWIvYWRhcHRlcnMvZmlyZWJhc2UvZmlyZWJhc2UuYWRhcHRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsR0FBRyxFQUFFLFVBQVUsRUFBRSxlQUFlLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQXNCLE1BQU0sb0JBQW9CLENBQUM7QUFDL08sT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTNDLE9BQU8sRUFDTCxnQkFBZ0IsRUFVakIsTUFBTSxtQkFBbUIsQ0FBQzs7QUEyQzNCLE1BQU0sVUFBVSxrQkFBa0IsQ0FBbUIsTUFBUztJQUM1RCxPQUFPO1FBQ0wsS0FBSyxFQUFFLE1BQU07UUFDYixZQUFZLEVBQUUsR0FBRyxFQUFFO1lBQ2pCLE1BQU0sT0FBTyxHQUFHLElBQUksT0FBTyxFQUErQixDQUFDO1lBQzNELFVBQVUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQ2pGLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSTtnQkFDakIsT0FBTyxFQUFFO29CQUNQLEdBQUcsRUFBRSxNQUFNLENBQUMsR0FBRztpQkFDaEI7YUFDRixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDTixPQUFPLE9BQU8sQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUNoQyxDQUFDO1FBQ0QsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUM7UUFDMUIsS0FBSyxFQUFFLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDO0tBQzFCLENBQUM7QUFDdkMsQ0FBQztBQUVELE1BQU0sVUFBVSxvQkFBb0IsQ0FJbEMsVUFBcUQ7SUFFckQsT0FBTyxVQUFVLENBQUMsS0FBSyxDQUFDO0FBQzFCLENBQUM7QUFHRCxNQUFNLE9BQU8sd0JBQTRCLFNBQVEsZ0JBQW1CO0lBRWxFLFlBQW1CLFlBQVksWUFBWSxFQUFFO1FBQUksS0FBSyxFQUFFLENBQUE7UUFBckMsY0FBUyxHQUFULFNBQVMsQ0FBaUI7SUFBWSxDQUFDO0lBRTFELElBQUksVUFBVTtRQUNaLE9BQU8sVUFBVSxDQUFDO0lBQ3BCLENBQUM7SUFFRCxJQUFJLFNBQVM7UUFDWCxPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDO0lBRUQsSUFBSSxTQUFTO1FBQ1gsT0FBTyxJQUFJLFNBQVMsRUFBRSxDQUFDO0lBQ3pCLENBQUM7SUFFUyxXQUFXLENBQUMsQ0FBTTtRQUMxQixPQUFPLENBQUMsWUFBWSxTQUFTLENBQUM7SUFDaEMsQ0FBQztJQUVTLFlBQVksQ0FBQyxDQUFNO1FBQzNCLE9BQU8sQ0FBQyxZQUFZLElBQUksQ0FBQyxVQUFVLENBQUM7SUFDdEMsQ0FBQztJQUVELEdBQUcsQ0FBQyxJQUFZO1FBQ2QsTUFBTSxNQUFNLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDekMsT0FBTztZQUNMLEtBQUssRUFBRSxNQUFNO1lBQ2IsTUFBTSxFQUFFLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDdEQsR0FBRyxFQUFFLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQztZQUNuQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQztZQUN6QixNQUFNLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDO1lBQ3pDLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDO1lBQy9CLFlBQVksRUFBRSxHQUFHLEVBQUU7Z0JBQ2pCLE1BQU0sT0FBTyxHQUFHLElBQUksT0FBTyxFQUF5QixDQUFDO2dCQUNyRCxVQUFVLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDO29CQUN2QyxFQUFFLEVBQUUsR0FBRyxDQUFDLEVBQUU7b0JBQ1YsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHO29CQUNaLElBQUksRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFO29CQUN0QixHQUFHLEVBQUUsQ0FBQyxTQUFpQixFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQztpQkFDL0MsQ0FBQyxDQUFDLENBQUM7Z0JBQ0osT0FBTyxPQUFPLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDaEMsQ0FBQztTQUNGLENBQUE7SUFDSCxDQUFDO0lBRUQsVUFBVSxDQUdSLElBQVk7UUFDWixNQUFNLEdBQUcsR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUM3QyxPQUFPLGtCQUFrQixDQUFDLEdBQUcsQ0FBbUQsQ0FBQztJQUNuRixDQUFDO0lBRUQsZUFBZSxDQUdiLFlBQW9CO1FBQ3BCLE1BQU0sR0FBRyxHQUFHLGVBQWUsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLFlBQVksQ0FBQyxDQUFDO1FBQzFELE9BQU8sa0JBQWtCLENBQUMsR0FBRyxDQUFtRCxDQUFDO0lBQ25GLENBQUM7SUFFRCxLQUFLLENBSUgsVUFBMEQsRUFDMUQsR0FBRyxZQUF1QjtRQUUxQixNQUFNLEdBQUcsR0FBRyxvQkFBb0IsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUM3QyxPQUFPLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsR0FBRyxZQUFZLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbkYsQ0FBQztJQUVELEtBQUssQ0FHSCxTQUFpQixFQUFFLEtBQW9CLEVBQUUsS0FBYztRQUN2RCxPQUFPLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQzlDLENBQUM7SUFFRCxPQUFPLENBR0wsR0FBVyxFQUFFLFFBQXdCLEtBQUs7UUFDMUMsT0FBTyxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ25DLENBQUM7SUFFRCxLQUFLLENBR0gsQ0FBUztRQUNULE9BQU8sR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3hCLENBQUM7SUFFRCxjQUFjO1FBQ1osTUFBTSxJQUFJLEtBQUssQ0FBQyw0REFBNEQsQ0FBQyxDQUFDO0lBQ2hGLENBQUM7SUFFRCxLQUFLO1FBQ0gsT0FBTyxVQUFVLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ3BDLENBQUM7OEdBcEdVLHdCQUF3QjtrSEFBeEIsd0JBQXdCOzsyRkFBeEIsd0JBQXdCO2tCQURwQyxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZG9jLCBjb2xsZWN0aW9uLCBjb2xsZWN0aW9uR3JvdXAsIEZpZWxkVmFsdWUsIFRpbWVzdGFtcCwgc2V0RG9jLCBnZXREb2MsIGdldERvY3MsIGdldEZpcmVzdG9yZSwgb25TbmFwc2hvdCwgZGVsZXRlRG9jLCB3cml0ZUJhdGNoLCBxdWVyeSwgb3JkZXJCeSwgbGltaXQsIHVwZGF0ZURvYywgd2hlcmUsIEZpZWxkUGF0aCwgZ2V0Q291bnRGcm9tU2VydmVyIH0gZnJvbSAnZmlyZWJhc2UvZmlyZXN0b3JlJztcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB0eXBlIGZpcmVzdG9yZSBmcm9tICdmaXJlYmFzZS9maXJlc3RvcmUnO1xuaW1wb3J0IHtcbiAgRmlyZXN0b3JlQWRhcHRlcixcbiAgUXVlcnlGbiBhcyBfUXVlcnlGbixcbiAgV2hlcmVGaWx0ZXJPcCxcbiAgRG9jdW1lbnRDaGFuZ2VBY3Rpb24sXG4gIERvY3VtZW50U25hcHNob3QsXG4gIENvbGxlY3Rpb25SZWZlcmVuY2UgYXMgX0NvbGxlY3Rpb25SZWZlcmVuY2UsXG4gIENvbGxlY3Rpb25Hcm91cCBhcyBfQ29sbGVjdGlvbkdyb3VwLFxuICBRdWVyeSBhcyBfUXVlcnksXG4gIERvY3VtZW50UmVmZXJlbmNlLFxuICBEb2N1bWVudERhdGFcbn0gZnJvbSAnQG54LWRkZC9maXJlc3RvcmUnO1xuXG50eXBlIENvbGxlY3Rpb25SZWZlcmVuY2U8XG4gIEFwcE1vZGVsVHlwZSA9IERvY3VtZW50RGF0YSxcbiAgRGJNb2RlbFR5cGUgZXh0ZW5kcyBEb2N1bWVudERhdGEgPSBEb2N1bWVudERhdGEsXG4+ID0gX0NvbGxlY3Rpb25SZWZlcmVuY2U8QXBwTW9kZWxUeXBlLCBEYk1vZGVsVHlwZSwgZmlyZXN0b3JlLkNvbGxlY3Rpb25SZWZlcmVuY2U8QXBwTW9kZWxUeXBlLCBEYk1vZGVsVHlwZT4+O1xuXG50eXBlIENvbGxlY3Rpb25Hcm91cDxcbiAgQXBwTW9kZWxUeXBlID0gRG9jdW1lbnREYXRhLFxuICBEYk1vZGVsVHlwZSBleHRlbmRzIERvY3VtZW50RGF0YSA9IERvY3VtZW50RGF0YVxuPiA9IF9Db2xsZWN0aW9uR3JvdXA8QXBwTW9kZWxUeXBlLCBEYk1vZGVsVHlwZSwgZmlyZXN0b3JlLlF1ZXJ5PEFwcE1vZGVsVHlwZSwgRGJNb2RlbFR5cGU+PjtcblxudHlwZSBRdWVyeTxcbiAgQXBwTW9kZWxUeXBlID0gRG9jdW1lbnREYXRhLFxuICBEYk1vZGVsVHlwZSBleHRlbmRzIERvY3VtZW50RGF0YSA9IERvY3VtZW50RGF0YVxuPiA9IF9RdWVyeTxBcHBNb2RlbFR5cGUsIERiTW9kZWxUeXBlLCBmaXJlc3RvcmUuUXVlcnk8QXBwTW9kZWxUeXBlLCBEYk1vZGVsVHlwZT4+O1xuXG50eXBlIFF1ZXJ5Rm48XG4gIEFwcE1vZGVsVHlwZSA9IERvY3VtZW50RGF0YSxcbiAgRGJNb2RlbFR5cGUgZXh0ZW5kcyBEb2N1bWVudERhdGEgPSBEb2N1bWVudERhdGFcbj4gPSBfUXVlcnlGbjxBcHBNb2RlbFR5cGUsIERiTW9kZWxUeXBlLCBmaXJlc3RvcmUuUXVlcnlDb25zdHJhaW50PlxuXG50eXBlIE9yaWdpbjxcbiAgQXBwTW9kZWxUeXBlID0gRG9jdW1lbnREYXRhLFxuICBEYk1vZGVsVHlwZSBleHRlbmRzIERvY3VtZW50RGF0YSA9IERvY3VtZW50RGF0YSxcbj4gPSBmaXJlc3RvcmUuQ29sbGVjdGlvblJlZmVyZW5jZTxBcHBNb2RlbFR5cGUsIERiTW9kZWxUeXBlPlxuICB8IGZpcmVzdG9yZS5RdWVyeTxBcHBNb2RlbFR5cGUsIERiTW9kZWxUeXBlPlxuICB8IGZpcmVzdG9yZS5RdWVyeTxBcHBNb2RlbFR5cGUsIERiTW9kZWxUeXBlPjtcblxudHlwZSBDb2xsZWN0aW9uTGlrZTxcbiAgQXBwTW9kZWxUeXBlID0gRG9jdW1lbnREYXRhLFxuICBEYk1vZGVsVHlwZSBleHRlbmRzIERvY3VtZW50RGF0YSA9IERvY3VtZW50RGF0YSxcbj4gPSBDb2xsZWN0aW9uUmVmZXJlbmNlPEFwcE1vZGVsVHlwZSwgRGJNb2RlbFR5cGU+IFxuICB8IENvbGxlY3Rpb25Hcm91cDxBcHBNb2RlbFR5cGUsIERiTW9kZWxUeXBlPlxuICB8IFF1ZXJ5PEFwcE1vZGVsVHlwZSwgRGJNb2RlbFR5cGU+O1xuXG4vLyBVdGlsaXR5IHR5cGUgdG8gbWFwIE9yaWdpbiB0byBDb2xsZWN0aW9uTGlrZVxudHlwZSBJbmZlckNvbGxlY3Rpb25MaWtlPE8gZXh0ZW5kcyBPcmlnaW4+ID0gXG4gIE8gZXh0ZW5kcyBmaXJlc3RvcmUuQ29sbGVjdGlvblJlZmVyZW5jZTxpbmZlciBBLCBpbmZlciBCPiA/IENvbGxlY3Rpb25SZWZlcmVuY2U8QSwgQj4gOlxuICBPIGV4dGVuZHMgZmlyZXN0b3JlLlF1ZXJ5PGluZmVyIEEsIGluZmVyIEI+ID8gQ29sbGVjdGlvbkdyb3VwPEEsIEI+IDpcbiAgTyBleHRlbmRzIGZpcmVzdG9yZS5RdWVyeTxpbmZlciBBLCBpbmZlciBCPiA/IFF1ZXJ5PEEsIEI+IDpcbiAgbmV2ZXI7XG5cbmV4cG9ydCBmdW5jdGlvbiB3cmFwQ29sbGVjdGlvbkxpa2U8TyBleHRlbmRzIE9yaWdpbj4ob3JpZ2luOiBPKTogSW5mZXJDb2xsZWN0aW9uTGlrZTxPPiB7XG4gIHJldHVybiB7XG4gICAgX19yZWY6IG9yaWdpbixcbiAgICBzdGF0ZUNoYW5nZXM6ICgpID0+IHtcbiAgICAgIGNvbnN0IHN1YmplY3QgPSBuZXcgU3ViamVjdDxEb2N1bWVudENoYW5nZUFjdGlvbjxhbnk+W10+KCk7XG4gICAgICBvblNuYXBzaG90KG9yaWdpbiwgKHNuYXBzaG90KSA9PiBzdWJqZWN0Lm5leHQoc25hcHNob3QuZG9jQ2hhbmdlcygpLm1hcChjaGFuZ2UgPT4gKHtcbiAgICAgICAgdHlwZTogY2hhbmdlLnR5cGUsXG4gICAgICAgIHBheWxvYWQ6IHtcbiAgICAgICAgICBkb2M6IGNoYW5nZS5kb2NcbiAgICAgICAgfSxcbiAgICAgIH0pKSkpO1xuICAgICAgcmV0dXJuIHN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG4gICAgfSxcbiAgICBnZXQ6ICgpID0+IGdldERvY3Mob3JpZ2luKSxcbiAgICBjb3VudDogKCkgPT4gZ2V0RG9jcyhvcmlnaW4pLnRoZW4oc25hcHNob3QgPT4gc25hcHNob3Quc2l6ZSksXG4gIH0gYXMgbmV2ZXIgYXMgSW5mZXJDb2xsZWN0aW9uTGlrZTxPPjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVud3JhcENvbGxlY3Rpb25MaWtlPFxuICBBcHBNb2RlbFR5cGUgPSBEb2N1bWVudERhdGEsXG4gIERiTW9kZWxUeXBlIGV4dGVuZHMgRG9jdW1lbnREYXRhID0gRG9jdW1lbnREYXRhXG4+KFxuICBjb2xsZWN0aW9uOiBDb2xsZWN0aW9uTGlrZTxBcHBNb2RlbFR5cGUsIERiTW9kZWxUeXBlPlxuKTogT3JpZ2luPEFwcE1vZGVsVHlwZSwgRGJNb2RlbFR5cGU+IHtcbiAgcmV0dXJuIGNvbGxlY3Rpb24uX19yZWY7XG59XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBGaXJlYmFzZUZpcmVzdG9yZUFkYXB0ZXI8RD4gZXh0ZW5kcyBGaXJlc3RvcmVBZGFwdGVyPEQ+IHtcblxuICBjb25zdHJ1Y3RvcihwdWJsaWMgZmlyZXN0b3JlID0gZ2V0RmlyZXN0b3JlKCkpIHsgc3VwZXIoKSB9XG5cbiAgZ2V0IEZpZWxkVmFsdWUoKTogdHlwZW9mIEZpZWxkVmFsdWUge1xuICAgIHJldHVybiBGaWVsZFZhbHVlOyAgXG4gIH1cblxuICBnZXQgVGltZXN0YW1wKCk6IHR5cGVvZiBUaW1lc3RhbXAge1xuICAgIHJldHVybiBUaW1lc3RhbXA7ICBcbiAgfVxuXG4gIGdldCBGaWVsZFBhdGgoKTogRmllbGRQYXRoIHtcbiAgICByZXR1cm4gbmV3IEZpZWxkUGF0aCgpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGlzVGltZXN0YW1wKHY6IGFueSk6IHYgaXMgVGltZXN0YW1wIHtcbiAgICByZXR1cm4gdiBpbnN0YW5jZW9mIFRpbWVzdGFtcDtcbiAgfVxuXG4gIHByb3RlY3RlZCBpc0ZpZWxkVmFsdWUodjogYW55KTogdiBpcyBGaWVsZFZhbHVlIHtcbiAgICByZXR1cm4gdiBpbnN0YW5jZW9mIHRoaXMuRmllbGRWYWx1ZTtcbiAgfVxuXG4gIGRvYyhwYXRoOiBzdHJpbmcpOiBEb2N1bWVudFJlZmVyZW5jZTxhbnk+IHtcbiAgICBjb25zdCBkb2NSZWYgPSBkb2ModGhpcy5maXJlc3RvcmUsIHBhdGgpO1xuICAgIHJldHVybiB7XG4gICAgICBfX3JlZjogZG9jUmVmLFxuICAgICAgZXhpc3RzOiAoKSA9PiBnZXREb2MoZG9jUmVmKS50aGVuKGRvYyA9PiBkb2MuZXhpc3RzKCkpLFxuICAgICAgc2V0OiAoZGF0YSkgPT4gc2V0RG9jKGRvY1JlZiwgZGF0YSksXG4gICAgICBnZXQ6ICgpID0+IGdldERvYyhkb2NSZWYpLFxuICAgICAgdXBkYXRlOiAoZGF0YSkgPT4gdXBkYXRlRG9jKGRvY1JlZiwgZGF0YSksXG4gICAgICBkZWxldGU6ICgpID0+IGRlbGV0ZURvYyhkb2NSZWYpLFxuICAgICAgc3RhdGVDaGFuZ2VzOiAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHN1YmplY3QgPSBuZXcgU3ViamVjdDxEb2N1bWVudFNuYXBzaG90PGFueT4+KCk7XG4gICAgICAgIG9uU25hcHNob3QoZG9jUmVmLCAoZG9jKSA9PiBzdWJqZWN0Lm5leHQoe1xuICAgICAgICAgIGlkOiBkb2MuaWQsXG4gICAgICAgICAgcmVmOiBkb2MucmVmLFxuICAgICAgICAgIGRhdGE6ICgpID0+IGRvYy5kYXRhKCksXG4gICAgICAgICAgZ2V0OiAoZmllbGRQYXRoOiBzdHJpbmcpID0+IGRvYy5nZXQoZmllbGRQYXRoKSxcbiAgICAgICAgfSkpO1xuICAgICAgICByZXR1cm4gc3ViamVjdC5hc09ic2VydmFibGUoKTtcbiAgICAgIH0sXG4gICAgfVxuICB9XG5cbiAgY29sbGVjdGlvbjxcbiAgICBBcHBNb2RlbFR5cGUgPSBEb2N1bWVudERhdGEsXG4gICAgRGJNb2RlbFR5cGUgZXh0ZW5kcyBEb2N1bWVudERhdGEgPSBEb2N1bWVudERhdGEsXG4gID4ocGF0aDogc3RyaW5nKTogQ29sbGVjdGlvblJlZmVyZW5jZTxBcHBNb2RlbFR5cGUsIERiTW9kZWxUeXBlPiB7XG4gICAgY29uc3QgcmVmID0gY29sbGVjdGlvbih0aGlzLmZpcmVzdG9yZSwgcGF0aCk7XG4gICAgcmV0dXJuIHdyYXBDb2xsZWN0aW9uTGlrZShyZWYpIGFzIENvbGxlY3Rpb25SZWZlcmVuY2U8QXBwTW9kZWxUeXBlLCBEYk1vZGVsVHlwZT47XG4gIH1cblxuICBjb2xsZWN0aW9uR3JvdXA8XG4gICAgQXBwTW9kZWxUeXBlID0gRG9jdW1lbnREYXRhLFxuICAgIERiTW9kZWxUeXBlIGV4dGVuZHMgRG9jdW1lbnREYXRhID0gRG9jdW1lbnREYXRhLFxuICA+KGNvbGxlY3Rpb25JZDogc3RyaW5nKTogQ29sbGVjdGlvbkdyb3VwPEFwcE1vZGVsVHlwZSwgRGJNb2RlbFR5cGU+IHtcbiAgICBjb25zdCByZWYgPSBjb2xsZWN0aW9uR3JvdXAodGhpcy5maXJlc3RvcmUsIGNvbGxlY3Rpb25JZCk7XG4gICAgcmV0dXJuIHdyYXBDb2xsZWN0aW9uTGlrZShyZWYpIGFzIENvbGxlY3Rpb25SZWZlcmVuY2U8QXBwTW9kZWxUeXBlLCBEYk1vZGVsVHlwZT47XG4gIH1cblxuICBxdWVyeTxcbiAgICBBcHBNb2RlbFR5cGUgPSBEb2N1bWVudERhdGEsXG4gICAgRGJNb2RlbFR5cGUgZXh0ZW5kcyBEb2N1bWVudERhdGEgPSBEb2N1bWVudERhdGEsXG4gID4oXG4gICAgY29sbGVjdGlvbjogQ29sbGVjdGlvblJlZmVyZW5jZTxBcHBNb2RlbFR5cGUsIERiTW9kZWxUeXBlPixcbiAgICAuLi5xdWVyeUZuQXJyYXk6IFF1ZXJ5Rm5bXVxuICApOiBRdWVyeTxBcHBNb2RlbFR5cGUsIERiTW9kZWxUeXBlPiB7XG4gICAgY29uc3QgcmVmID0gdW53cmFwQ29sbGVjdGlvbkxpa2UoY29sbGVjdGlvbik7XG4gICAgcmV0dXJuIHdyYXBDb2xsZWN0aW9uTGlrZShxdWVyeShyZWYsIC4uLnF1ZXJ5Rm5BcnJheS5tYXAocXVlcnlGbiA9PiBxdWVyeUZuKCkpKSk7XG4gIH1cblxuICB3aGVyZTxcbiAgICBBcHBNb2RlbFR5cGUgPSBEb2N1bWVudERhdGEsXG4gICAgRGJNb2RlbFR5cGUgZXh0ZW5kcyBEb2N1bWVudERhdGEgPSBEb2N1bWVudERhdGEsXG4gID4oZmllbGRQYXRoOiBzdHJpbmcsIG9wU3RyOiBXaGVyZUZpbHRlck9wLCB2YWx1ZTogdW5rbm93bik6IFF1ZXJ5Rm4ge1xuICAgIHJldHVybiAoKSA9PiB3aGVyZShmaWVsZFBhdGgsIG9wU3RyLCB2YWx1ZSk7XG4gIH1cblxuICBvcmRlckJ5PFxuICAgIEFwcE1vZGVsVHlwZSA9IERvY3VtZW50RGF0YSxcbiAgICBEYk1vZGVsVHlwZSBleHRlbmRzIERvY3VtZW50RGF0YSA9IERvY3VtZW50RGF0YSxcbiAgPihrZXk6IHN0cmluZywgb3JkZXI6ICdhc2MnIHwgJ2Rlc2MnID0gJ2FzYycpOiBRdWVyeUZuIHtcbiAgICByZXR1cm4gKCkgPT4gb3JkZXJCeShrZXksIG9yZGVyKTtcbiAgfVxuXG4gIGxpbWl0PFxuICAgIEFwcE1vZGVsVHlwZSA9IERvY3VtZW50RGF0YSxcbiAgICBEYk1vZGVsVHlwZSBleHRlbmRzIERvY3VtZW50RGF0YSA9IERvY3VtZW50RGF0YSxcbiAgPihuOiBudW1iZXIpOiBRdWVyeUZuIHtcbiAgICByZXR1cm4gKCkgPT4gbGltaXQobik7XG4gIH1cblxuICBydW5UcmFuc2FjdGlvbigpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZpcmViYXNlRmlyZXN0b3JlQWRhcHRlciNydW5UcmFuc2FjdGlvbiBpcyBub3QgaW1wbGVtZW50ZWQnKTtcbiAgfVxuXG4gIGJhdGNoKCkge1xuICAgIHJldHVybiB3cml0ZUJhdGNoKHRoaXMuZmlyZXN0b3JlKTtcbiAgfVxufSJdfQ==","/**\n * Generated bundle index. Do not edit.\n */\nexport * from './index';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibngtZGRkLWZpcmVzdG9yZS1hZGFwdGVycy1maXJlYmFzZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL0BueC1kZGQvZmlyZXN0b3JlL3NyYy9saWIvYWRhcHRlcnMvZmlyZWJhc2UvbngtZGRkLWZpcmVzdG9yZS1hZGFwdGVycy1maXJlYmFzZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL2luZGV4JztcbiJdfQ=="],"names":[],"mappings":"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"}
|