@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.
Files changed (93) hide show
  1. package/adapters/admin/index.d.ts +40 -1
  2. package/adapters/firebase/index.d.ts +35 -1
  3. package/{adapters/admin/admin.adapter.js → fesm2022/nx-ddd-firestore-adapters-admin.mjs} +21 -13
  4. package/fesm2022/nx-ddd-firestore-adapters-admin.mjs.map +1 -0
  5. package/{adapters/firebase/firebase.adapter.js → fesm2022/nx-ddd-firestore-adapters-firebase.mjs} +20 -13
  6. package/fesm2022/nx-ddd-firestore-adapters-firebase.mjs.map +1 -0
  7. package/fesm2022/nx-ddd-firestore.mjs +796 -0
  8. package/fesm2022/nx-ddd-firestore.mjs.map +1 -0
  9. package/index.d.ts +424 -7
  10. package/package.json +26 -6
  11. package/README.md +0 -172
  12. package/adapters/admin/admin.adapter.d.ts +0 -36
  13. package/adapters/admin/admin.adapter.js.map +0 -1
  14. package/adapters/admin/index.js +0 -2
  15. package/adapters/admin/index.js.map +0 -1
  16. package/adapters/base/base.adapter.d.ts +0 -35
  17. package/adapters/base/base.adapter.js +0 -189
  18. package/adapters/base/base.adapter.js.map +0 -1
  19. package/adapters/base/index.d.ts +0 -1
  20. package/adapters/base/index.js +0 -2
  21. package/adapters/base/index.js.map +0 -1
  22. package/adapters/dayjs/dayjs.adatper.d.ts +0 -15
  23. package/adapters/dayjs/dayjs.adatper.js +0 -44
  24. package/adapters/dayjs/dayjs.adatper.js.map +0 -1
  25. package/adapters/dayjs/index.d.ts +0 -1
  26. package/adapters/dayjs/index.js +0 -2
  27. package/adapters/dayjs/index.js.map +0 -1
  28. package/adapters/firebase/firebase.adapter.d.ts +0 -32
  29. package/adapters/firebase/firebase.adapter.js.map +0 -1
  30. package/adapters/firebase/index.js +0 -2
  31. package/adapters/firebase/index.js.map +0 -1
  32. package/adapters/index.d.ts +0 -1
  33. package/adapters/index.js +0 -2
  34. package/adapters/index.js.map +0 -1
  35. package/converter/converter.d.ts +0 -17
  36. package/converter/converter.js +0 -31
  37. package/converter/converter.js.map +0 -1
  38. package/converter/index.d.ts +0 -1
  39. package/converter/index.js +0 -2
  40. package/converter/index.js.map +0 -1
  41. package/dao/firestore.dao.d.ts +0 -17
  42. package/dao/firestore.dao.js +0 -22
  43. package/dao/firestore.dao.js.map +0 -1
  44. package/dao/index.d.ts +0 -1
  45. package/dao/index.js +0 -2
  46. package/dao/index.js.map +0 -1
  47. package/decorators/decorators.d.ts +0 -87
  48. package/decorators/decorators.js +0 -36
  49. package/decorators/decorators.js.map +0 -1
  50. package/decorators/index.d.ts +0 -1
  51. package/decorators/index.js +0 -2
  52. package/decorators/index.js.map +0 -1
  53. package/index.js +0 -8
  54. package/index.js.map +0 -1
  55. package/interfaces/index.d.ts +0 -1
  56. package/interfaces/index.js +0 -2
  57. package/interfaces/index.js.map +0 -1
  58. package/interfaces/interfaces.d.ts +0 -63
  59. package/interfaces/interfaces.js +0 -2
  60. package/interfaces/interfaces.js.map +0 -1
  61. package/path-builder/index.d.ts +0 -1
  62. package/path-builder/index.js +0 -2
  63. package/path-builder/index.js.map +0 -1
  64. package/path-builder/path-builder.d.ts +0 -34
  65. package/path-builder/path-builder.js +0 -33
  66. package/path-builder/path-builder.js.map +0 -1
  67. package/query/firestore.query.d.ts +0 -33
  68. package/query/firestore.query.js +0 -75
  69. package/query/firestore.query.js.map +0 -1
  70. package/query/index.d.ts +0 -1
  71. package/query/index.js +0 -2
  72. package/query/index.js.map +0 -1
  73. package/query/v2/cached-query.d.ts +0 -58
  74. package/query/v2/cached-query.js +0 -102
  75. package/query/v2/cached-query.js.map +0 -1
  76. package/query/v2/index.d.ts +0 -2
  77. package/query/v2/index.js +0 -3
  78. package/query/v2/index.js.map +0 -1
  79. package/query/v2/query.d.ts +0 -46
  80. package/query/v2/query.js +0 -81
  81. package/query/v2/query.js.map +0 -1
  82. package/repository/index.d.ts +0 -1
  83. package/repository/index.js +0 -2
  84. package/repository/index.js.map +0 -1
  85. package/repository/repository.d.ts +0 -65
  86. package/repository/repository.js +0 -218
  87. package/repository/repository.js.map +0 -1
  88. package/testing/common.d.ts +0 -7
  89. package/testing/common.js +0 -19
  90. package/testing/common.js.map +0 -1
  91. package/testing/index.d.ts +0 -1
  92. package/testing/index.js +0 -2
  93. package/testing/index.js.map +0 -1
@@ -1 +1,40 @@
1
- export * from './admin.adapter';
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
- export * from './firebase.adapter';
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 { __decorate } from "tslib";
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 _provideFirestoreAdapter } from '../base';
6
- export function wrapCollectionLike(origin) {
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
- export function unwrapCollectionLike(collection) {
24
+ function unwrapCollectionLike(collection) {
24
25
  return collection.__ref;
25
26
  }
26
- let AdminFirestoreAdapter = class AdminFirestoreAdapter extends FirestoreAdapter {
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
- AdminFirestoreAdapter = __decorate([
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
- //# sourceMappingURL=admin.adapter.js.map
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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"}
@@ -1,9 +1,10 @@
1
- import { __decorate, __metadata } from "tslib";
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 { FirestoreAdapter } from '../base';
3
+ import * as i0 from '@angular/core';
5
4
  import { Injectable } from '@angular/core';
6
- export function wrapCollectionLike(origin) {
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
- export function unwrapCollectionLike(collection) {
24
+ function unwrapCollectionLike(collection) {
24
25
  return collection.__ref;
25
26
  }
26
- let FirebaseFirestoreAdapter = class FirebaseFirestoreAdapter extends FirestoreAdapter {
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
- FirebaseFirestoreAdapter = __decorate([
96
- Injectable(),
97
- __metadata("design:paramtypes", [Object])
98
- ], FirebaseFirestoreAdapter);
99
- export { FirebaseFirestoreAdapter };
100
- //# sourceMappingURL=firebase.adapter.js.map
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlyZWJhc2UuYWRhcHRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL0BueC1kZGQvZmlyZXN0b3JlL3NyYy9saWIvYWRhcHRlcnMvZmlyZWJhc2UvZmlyZWJhc2UuYWRhcHRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsR0FBRyxFQUFFLFVBQVUsRUFBRSxlQUFlLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQXNCLE1BQU0sb0JBQW9CLENBQUM7QUFDL08sT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTNDLE9BQU8sRUFDTCxnQkFBZ0IsRUFVakIsTUFBTSxtQkFBbUIsQ0FBQzs7QUEyQzNCLE1BQU0sVUFBVSxrQkFBa0IsQ0FBbUIsTUFBUztJQUM1RCxPQUFPO1FBQ0wsS0FBSyxFQUFFLE1BQU07UUFDYixZQUFZLEVBQUUsR0FBRyxFQUFFO1lBQ2pCLE1BQU0sT0FBTyxHQUFHLElBQUksT0FBTyxFQUErQixDQUFDO1lBQzNELFVBQVUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQ2pGLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSTtnQkFDakIsT0FBTyxFQUFFO29CQUNQLEdBQUcsRUFBRSxNQUFNLENBQUMsR0FBRztpQkFDaEI7YUFDRixDQUFDLENBQUMsQ0FB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UyxFQUFFLFlBQVksQ0FBQyxDQUFDO1FBQzFELE9BQU8sa0JBQWtCLENBQUMsR0FBRyxDQUFtRCxDQUFDO0lBQ25GLENBQUM7SUFFRCxLQUFLLENBSUgsVUFBMEQsRUFDMUQsR0FBRyxZQUF1QjtRQUUxQixNQUFNLEdBQUcsR0FBRyxvQkFBb0IsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUM3QyxPQUFPLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsR0FBRyxZQUFZLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbkYsQ0FBQztJQUVELEtBQUssQ0FHSCxTQUFpQixFQUFFLEtBQW9CLEVBQUUsS0FBYztRQUN2RCxPQUFPLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQzlDLENBQUM7SUFFRCxPQUFPLENBR0wsR0FBVyxFQUFFLFFBQXdCLEtBQUs7UUFDMUMsT0FBTyxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ25DLENBQUM7SUFFRCxLQUFLLENBR0gsQ0FBUztRQUNULE9BQU8sR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3hCLENBQUM7SUFFRCxjQUFjO1FBQ1osTUFBTSxJQUFJLEtBQUssQ0FBQyw0REFBNEQsQ0FBQyxDQUFDO0lBQ2hGLENBQUM7SUFFRCxLQUFLO1FBQ0gsT0FBTyxVQUFVLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ3BDLENBQUM7OEdBcEdVLHdCQUF3QjtrSEFBeEIsd0JBQXdCOzsyRkFBeEIsd0JBQXdCO2tCQURwQyxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZG9jLCBjb2xsZWN0aW9uLCBjb2xsZWN0aW9uR3JvdXAsIEZpZWxkVmFsdWUsIFRpbWVzdGFtcCwgc2V0RG9jLCBnZXREb2MsIGdldERvY3MsIGdldEZpcmVzdG9yZSwgb25TbmFwc2hvdCwgZGVsZXRlRG9jLCB3cml0ZUJhdGNoLCBxdWVyeSwgb3JkZXJCeSwgbGltaXQsIHVwZGF0ZURvYywgd2hlcmUsIEZpZWxkUGF0aCwgZ2V0Q291bnRGcm9tU2VydmVyIH0gZnJvbSAnZmlyZWJhc2UvZmlyZXN0b3JlJztcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB0eXBlIGZpcmVzdG9yZSBmcm9tICdmaXJlYmFzZS9maXJlc3RvcmUnO1xuaW1wb3J0IHtcbiAgRmlyZXN0b3JlQWRhcHRlcixcbiAgUXVlcnlGbiBhcyBfUXVlcnlGbixcbiAgV2hlcmVGaWx0ZXJPcCxcbiAgRG9jdW1lbnRDaGFuZ2VBY3Rpb24sXG4gIERvY3VtZW50U25hcHNob3QsXG4gIENvbGxlY3Rpb25SZWZlcmVuY2UgYXMgX0NvbGxlY3Rpb25SZWZlcmVuY2UsXG4gIENvbGxlY3Rpb25Hcm91cCBhcyBfQ29sbGVjdGlvbkdyb3VwLFxuICBRdWVyeSBhcyBfUXVlcnksXG4gIERvY3VtZW50UmVmZXJlbmNlLFxuICBEb2N1bWVudERhdGFcbn0gZnJvbSAnQG54LWRkZC9maXJlc3RvcmUnO1xuXG50eXBlIENvbGxlY3Rpb25SZWZlcmVuY2U8XG4gIEFwcE1vZGVsVHlwZSA9IERvY3VtZW50RGF0YSxcbiAgRGJNb2RlbFR5cGUgZXh0ZW5kcyBEb2N1bWVudERhdGEgPSBEb2N1bWVudERhdGEsXG4+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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"}