@nx-ddd/firestore 19.2.1 → 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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nx-ddd-firestore.mjs","sources":["../tmp-esm2022/decorators/decorators.js","../tmp-esm2022/adapters/dayjs/dayjs.adatper.js","../tmp-esm2022/adapters/base/base.adapter.js","../tmp-esm2022/converter/converter.js","../tmp-esm2022/dao/firestore.dao.js","../tmp-esm2022/path-builder/path-builder.js","../tmp-esm2022/query/firestore.query.js","../tmp-esm2022/query/v2/query.js","../tmp-esm2022/query/v2/cached-query.js","../tmp-esm2022/repository/repository.js","../tmp-esm2022/nx-ddd-firestore.js"],"sourcesContent":["import { makeDecoratorFactories } from '@nx-ddd/core';\nexport const FIRESTORE_ANNOTATIONS = 'firestore_annotations';\nexport const { createDecorator, createPropsDecorator, createClassDecorator, getAnnotations, } = makeDecoratorFactories((type, fieldName, propName, options) => ({ type, fieldName, propName, childType: options.childType }), FIRESTORE_ANNOTATIONS);\n/** @deprecated use getAnnotations */\nexport function getFirestoreAnnotations(target) {\n return getAnnotations(target);\n}\nexport const ID = createDecorator('id');\nexport const String = createDecorator('string');\nexport const Null = createDecorator('null');\nexport const Geopoint = createDecorator('geopoint');\nexport const Boolean = createDecorator('boolean');\nexport const Timestamp = createDecorator('timestamp');\nexport const Number = createDecorator('number');\nexport const Map = (childType, props) => createDecorator('map', { childType })(props);\nexport const Array = (childType, props) => createDecorator('array', { childType })(props);\nexport const Reference = createDecorator('reference');\nexport function getCollection(target) {\n const annotations = getAnnotations(target);\n const annotation = annotations.find((annotation) => annotation.type === 'collection');\n return annotation.name;\n}\nexport const Firestore = {\n Collection: createClassDecorator('collection'),\n ID: ID,\n String: String,\n Null: Null,\n Geopoint: Geopoint,\n Boolean: Boolean,\n Timestamp: Timestamp,\n Number: Number,\n Map: Map,\n Array: Array,\n Reference: Reference,\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVjb3JhdG9ycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL0BueC1kZGQvZmlyZXN0b3JlL3NyYy9saWIvZGVjb3JhdG9ycy9kZWNvcmF0b3JzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUV0RCxNQUFNLENBQUMsTUFBTSxxQkFBcUIsR0FBRyx1QkFBdUIsQ0FBQztBQVc3RCxNQUFNLENBQUMsTUFBTSxFQUNYLGVBQWUsRUFDZixvQkFBb0IsRUFDcEIsb0JBQW9CLEVBQ3BCLGNBQWMsR0FDZixHQUFHLHNCQUFzQixDQUt4QixDQUFDLElBQUksRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFDLElBQUksRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQUMsU0FBUyxFQUFDLENBQUMsRUFDbkcscUJBQXFCLENBQ3RCLENBQUM7QUFFRixxQ0FBcUM7QUFDckMsTUFBTSxVQUFVLHVCQUF1QixDQUFDLE1BQVc7SUFDakQsT0FBTyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDaEMsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLEVBQUUsR0FBRyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDeEMsTUFBTSxDQUFDLE1BQU0sTUFBTSxHQUFHLGVBQWUsQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUNoRCxNQUFNLENBQUMsTUFBTSxJQUFJLEdBQUcsZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQzVDLE1BQU0sQ0FBQyxNQUFNLFFBQVEsR0FBRyxlQUFlLENBQUMsVUFBVSxDQUFDLENBQUM7QUFDcEQsTUFBTSxDQUFDLE1BQU0sT0FBTyxHQUFHLGVBQWUsQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUNsRCxNQUFNLENBQUMsTUFBTSxTQUFTLEdBQUcsZUFBZSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0FBQ3RELE1BQU0sQ0FBQyxNQUFNLE1BQU0sR0FBRyxlQUFlLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDaEQsTUFBTSxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUMsU0FBcUIsRUFBRSxLQUF1QixFQUFFLEVBQUUsQ0FBQyxlQUFlLENBQUMsS0FBSyxFQUFFLEVBQUMsU0FBUyxFQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNsSCxNQUFNLENBQUMsTUFBTSxLQUFLLEdBQUcsQ0FBQyxTQUFxQixFQUFFLEtBQXVCLEVBQUUsRUFBRSxDQUFDLGVBQWUsQ0FBQyxPQUFPLEVBQUUsRUFBQyxTQUFTLEVBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3RILE1BQU0sQ0FBQyxNQUFNLFNBQVMsR0FBRyxlQUFlLENBQUMsV0FBVyxDQUFDLENBQUM7QUFFdEQsTUFBTSxVQUFVLGFBQWEsQ0FBQyxNQUFXO0lBQ3ZDLE1BQU0sV0FBVyxHQUFHLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUMzQyxNQUFNLFVBQVUsR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsVUFBZSxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsSUFBSSxLQUFLLFlBQVksQ0FBQyxDQUFDO0lBQzNGLE9BQVEsVUFBa0IsQ0FBQyxJQUFJLENBQUM7QUFDbEMsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLFNBQVMsR0FBRztJQUN2QixVQUFVLEVBQUUsb0JBQW9CLENBQW1CLFlBQVksQ0FBQztJQUNoRSxFQUFFLEVBQUUsRUFBRTtJQUNOLE1BQU0sRUFBRSxNQUFNO0lBQ2QsSUFBSSxFQUFFLElBQUk7SUFDVixRQUFRLEVBQUUsUUFBUTtJQUNsQixPQUFPLEVBQUUsT0FBTztJQUNoQixTQUFTLEVBQUUsU0FBUztJQUNwQixNQUFNLEVBQUUsTUFBTTtJQUNkLEdBQUcsRUFBRSxHQUFHO0lBQ1IsS0FBSyxFQUFFLEtBQUs7SUFDWixTQUFTLEVBQUUsU0FBUztDQUNyQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgbWFrZURlY29yYXRvckZhY3RvcmllcyB9IGZyb20gJ0BueC1kZGQvY29yZSc7XG5cbmV4cG9ydCBjb25zdCBGSVJFU1RPUkVfQU5OT1RBVElPTlMgPSAnZmlyZXN0b3JlX2Fubm90YXRpb25zJztcbmV4cG9ydCB0eXBlIEZpcmVzdG9yZUZpZWxkVHlwZSA9ICdpZCcgfCAnYm9vbGVhbicgfCAnbnVtYmVyJyBcbiAgfCAndGltZXN0YW1wJyB8ICdzdHJpbmcnIHwgJ2dlb3BvaW50JyB8ICdudWxsJyBcbiAgfCAnbWFwJyB8ICdhcnJheScgfCAncmVmZXJlbmNlJztcbmV4cG9ydCBpbnRlcmZhY2UgRmlyZXN0b3JlQW5ub3RhdGlvbiB7XG4gIHR5cGU6IEZpcmVzdG9yZUZpZWxkVHlwZTtcbiAgZmllbGROYW1lOiBzdHJpbmc7XG4gIHByb3BOYW1lOiBzdHJpbmc7XG4gIGNoaWxkVHlwZTogYW55O1xufVxuXG5leHBvcnQgY29uc3Qge1xuICBjcmVhdGVEZWNvcmF0b3IsXG4gIGNyZWF0ZVByb3BzRGVjb3JhdG9yLFxuICBjcmVhdGVDbGFzc0RlY29yYXRvcixcbiAgZ2V0QW5ub3RhdGlvbnMsXG59ID0gbWFrZURlY29yYXRvckZhY3RvcmllczxcbiAgRmlyZXN0b3JlRmllbGRUeXBlLFxuICBGaXJlc3RvcmVBbm5vdGF0aW9uLFxuICB7Y2hpbGRUeXBlPzogYW55fVxuPihcbiAgKHR5cGUsIGZpZWxkTmFtZSwgcHJvcE5hbWUsIG9wdGlvbnMpID0+ICh7dHlwZSwgZmllbGROYW1lLCBwcm9wTmFtZSwgY2hpbGRUeXBlOiBvcHRpb25zLmNoaWxkVHlwZX0pLFxuICBGSVJFU1RPUkVfQU5OT1RBVElPTlNcbik7XG5cbi8qKiBAZGVwcmVjYXRlZCB1c2UgZ2V0QW5ub3RhdGlvbnMgKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRGaXJlc3RvcmVBbm5vdGF0aW9ucyh0YXJnZXQ6IGFueSk6IEZpcmVzdG9yZUFubm90YXRpb25bXSB7XG4gIHJldHVybiBnZXRBbm5vdGF0aW9ucyh0YXJnZXQpO1xufVxuXG5leHBvcnQgY29uc3QgSUQgPSBjcmVhdGVEZWNvcmF0b3IoJ2lkJyk7XG5leHBvcnQgY29uc3QgU3RyaW5nID0gY3JlYXRlRGVjb3JhdG9yKCdzdHJpbmcnKTtcbmV4cG9ydCBjb25zdCBOdWxsID0gY3JlYXRlRGVjb3JhdG9yKCdudWxsJyk7XG5leHBvcnQgY29uc3QgR2VvcG9pbnQgPSBjcmVhdGVEZWNvcmF0b3IoJ2dlb3BvaW50Jyk7XG5leHBvcnQgY29uc3QgQm9vbGVhbiA9IGNyZWF0ZURlY29yYXRvcignYm9vbGVhbicpO1xuZXhwb3J0IGNvbnN0IFRpbWVzdGFtcCA9IGNyZWF0ZURlY29yYXRvcigndGltZXN0YW1wJyk7XG5leHBvcnQgY29uc3QgTnVtYmVyID0gY3JlYXRlRGVjb3JhdG9yKCdudW1iZXInKTtcbmV4cG9ydCBjb25zdCBNYXAgPSAoY2hpbGRUeXBlPzogKCkgPT4gYW55LCBwcm9wcz86IHtuYW1lPzogc3RyaW5nfSkgPT4gY3JlYXRlRGVjb3JhdG9yKCdtYXAnLCB7Y2hpbGRUeXBlfSkocHJvcHMpO1xuZXhwb3J0IGNvbnN0IEFycmF5ID0gKGNoaWxkVHlwZT86ICgpID0+IGFueSwgcHJvcHM/OiB7bmFtZT86IHN0cmluZ30pID0+IGNyZWF0ZURlY29yYXRvcignYXJyYXknLCB7Y2hpbGRUeXBlfSkocHJvcHMpO1xuZXhwb3J0IGNvbnN0IFJlZmVyZW5jZSA9IGNyZWF0ZURlY29yYXRvcigncmVmZXJlbmNlJyk7XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDb2xsZWN0aW9uKHRhcmdldDogYW55KTogc3RyaW5nIHtcbiAgY29uc3QgYW5ub3RhdGlvbnMgPSBnZXRBbm5vdGF0aW9ucyh0YXJnZXQpO1xuICBjb25zdCBhbm5vdGF0aW9uID0gYW5ub3RhdGlvbnMuZmluZCgoYW5ub3RhdGlvbjogYW55KSA9PiBhbm5vdGF0aW9uLnR5cGUgPT09ICdjb2xsZWN0aW9uJyk7XG4gIHJldHVybiAoYW5ub3RhdGlvbiBhcyBhbnkpLm5hbWU7XG59XG5cbmV4cG9ydCBjb25zdCBGaXJlc3RvcmUgPSB7XG4gIENvbGxlY3Rpb246IGNyZWF0ZUNsYXNzRGVjb3JhdG9yPHsgbmFtZTogc3RyaW5nIH0+KCdjb2xsZWN0aW9uJyksXG4gIElEOiBJRCxcbiAgU3RyaW5nOiBTdHJpbmcsXG4gIE51bGw6IE51bGwsXG4gIEdlb3BvaW50OiBHZW9wb2ludCxcbiAgQm9vbGVhbjogQm9vbGVhbixcbiAgVGltZXN0YW1wOiBUaW1lc3RhbXAsXG4gIE51bWJlcjogTnVtYmVyLFxuICBNYXA6IE1hcCxcbiAgQXJyYXk6IEFycmF5LFxuICBSZWZlcmVuY2U6IFJlZmVyZW5jZSxcbn07XG4iXX0=","import { Injectable } from '@angular/core';\nimport dayjs from 'dayjs';\nimport * as i0 from \"@angular/core\";\nexport class DateAdapter {\n isDate(value) {\n return value instanceof Date || dayjs.isDayjs(value);\n }\n isValid(value) {\n return this.isDate(value) && !isNaN(value.getTime());\n }\n getJsDate(value) {\n return value;\n }\n convertToDate(value) {\n return value;\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.0.5\", ngImport: i0, type: DateAdapter, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.0.5\", ngImport: i0, type: DateAdapter, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.0.5\", ngImport: i0, type: DateAdapter, decorators: [{\n type: Injectable,\n args: [{ providedIn: 'root' }]\n }] });\nexport class DayjsAdapter {\n constructor(dateAdapter) {\n this.dateAdapter = dateAdapter;\n }\n isDayjs(value) {\n return dayjs.isDayjs(value);\n }\n isValid(value) {\n return this.isDayjs(value) && value.isValid();\n }\n getJsDate(value) {\n return value.toDate();\n }\n convertToDayjs(value) {\n return dayjs(value);\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.0.5\", ngImport: i0, type: DayjsAdapter, deps: [{ token: DateAdapter }], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.0.5\", ngImport: i0, type: DayjsAdapter, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.0.5\", ngImport: i0, type: DayjsAdapter, decorators: [{\n type: Injectable,\n args: [{ providedIn: 'root' }]\n }], ctorParameters: () => [{ type: DateAdapter }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF5anMuYWRhdHBlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL0BueC1kZGQvZmlyZXN0b3JlL3NyYy9saWIvYWRhcHRlcnMvZGF5anMvZGF5anMuYWRhdHBlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sS0FBSyxNQUFNLE9BQU8sQ0FBQzs7QUFHMUIsTUFBTSxPQUFPLFdBQVc7SUFDdEIsTUFBTSxDQUFJLEtBQVU7UUFDbEIsT0FBTyxLQUFLLFlBQVksSUFBSSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDdkQsQ0FBQztJQUVELE9BQU8sQ0FBQyxLQUFVO1FBQ2hCLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztJQUM3RCxDQUFDO0lBRUQsU0FBUyxDQUFJLEtBQVU7UUFDckIsT0FBTyxLQUFVLENBQUM7SUFDcEIsQ0FBQztJQUVELGFBQWEsQ0FBSSxLQUFXO1FBQzFCLE9BQU8sS0FBVSxDQUFDO0lBQ3BCLENBQUM7OEdBZlUsV0FBVztrSEFBWCxXQUFXLGNBREUsTUFBTTs7MkZBQ25CLFdBQVc7a0JBRHZCLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFOztBQW9CbEMsTUFBTSxPQUFPLFlBQVk7SUFDdkIsWUFBNkIsV0FBd0I7UUFBeEIsZ0JBQVcsR0FBWCxXQUFXLENBQWE7SUFBRyxDQUFDO0lBRXpELE9BQU8sQ0FBQyxLQUFVO1FBQ2hCLE9BQU8sS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM5QixDQUFDO0lBRUQsT0FBTyxDQUFDLEtBQVU7UUFDaEIsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUNoRCxDQUFDO0lBRUQsU0FBUyxDQUFDLEtBQWtCO1FBQzFCLE9BQU8sS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDO0lBQ3hCLENBQUM7SUFFRCxjQUFjLENBQUksS0FBVTtRQUMxQixPQUFPLEtBQUssQ0FBQyxLQUFLLENBQU0sQ0FBQztJQUMzQixDQUFDOzhHQWpCVSxZQUFZO2tIQUFaLFlBQVksY0FEQyxNQUFNOzsyRkFDbkIsWUFBWTtrQkFEeEIsVUFBVTttQkFBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgZGF5anMgZnJvbSAnZGF5anMnO1xuXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxuZXhwb3J0IGNsYXNzIERhdGVBZGFwdGVyIHtcbiAgaXNEYXRlPEQ+KHZhbHVlOiBhbnkpOiB2YWx1ZSBpcyBEIHtcbiAgICByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBEYXRlIHx8IGRheWpzLmlzRGF5anModmFsdWUpO1xuICB9XG5cbiAgaXNWYWxpZCh2YWx1ZTogYW55KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaXNEYXRlPERhdGU+KHZhbHVlKSAmJiAhaXNOYU4odmFsdWUuZ2V0VGltZSgpKTtcbiAgfVxuXG4gIGdldEpzRGF0ZTxEPih2YWx1ZTogYW55KTogRCB7XG4gICAgcmV0dXJuIHZhbHVlIGFzIEQ7XG4gIH1cblxuICBjb252ZXJ0VG9EYXRlPEQ+KHZhbHVlOiBEYXRlKTogRCB7XG4gICAgcmV0dXJuIHZhbHVlIGFzIEQ7XG4gIH1cbn1cblxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcbmV4cG9ydCBjbGFzcyBEYXlqc0FkYXB0ZXIge1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IGRhdGVBZGFwdGVyOiBEYXRlQWRhcHRlcikge31cblxuICBpc0RheWpzKHZhbHVlOiBhbnkpOiB2YWx1ZSBpcyBkYXlqcy5EYXlqcyB7XG4gICAgcmV0dXJuIGRheWpzLmlzRGF5anModmFsdWUpO1xuICB9XG5cbiAgaXNWYWxpZCh2YWx1ZTogYW55KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaXNEYXlqcyh2YWx1ZSkgJiYgdmFsdWUuaXNWYWxpZCgpO1xuICB9XG5cbiAgZ2V0SnNEYXRlKHZhbHVlOiBkYXlqcy5EYXlqcyk6IERhdGUge1xuICAgIHJldHVybiB2YWx1ZS50b0RhdGUoKTtcbiAgfVxuXG4gIGNvbnZlcnRUb0RheWpzPEQ+KHZhbHVlOiBhbnkpOiBEIHtcbiAgICByZXR1cm4gZGF5anModmFsdWUpIGFzIEQ7XG4gIH1cbn1cbiJdfQ==","import { inject } from '@angular/core';\nimport { getFirestoreAnnotations } from '../../decorators/decorators';\nimport { walkObj } from '@nx-ddd/core';\nimport { get } from 'lodash-es';\nimport { DateAdapter } from '../dayjs';\nexport class FirestoreAdapter {\n constructor() {\n this.dateAdapter = inject(DateAdapter);\n }\n //** @deprecated */\n toFirestoreData(entity) {\n return Object.entries(entity).reduce((pre, [k, v]) => ({\n ...pre, [k]: this.dateAdapter.isDate(v) ? this.convertDateToTimestamp(v) : v,\n }), {});\n }\n //** @deprecated */\n fromFirestoreData(data) {\n return Object.entries(data).reduce((pre, [k, v]) => ({\n ...pre, [k]: this.isTimestamp(v) ? this.convertTimestampToDate(v) : v,\n }), {});\n }\n toFirestore(obj, Entity) {\n const newObj = {};\n for (const annotation of getFirestoreAnnotations(Entity)) {\n const _value = get(obj, annotation.propName);\n if (_value === null) {\n newObj[annotation.fieldName] = null;\n continue;\n }\n switch (annotation.type) {\n case 'id':\n case 'string':\n case 'number':\n case 'boolean': {\n if (typeof _value === 'undefined')\n break;\n newObj[annotation.fieldName] = _value;\n break;\n }\n case 'timestamp': {\n if (typeof _value === 'undefined')\n break;\n if (!this.dateAdapter.isDate(_value)) {\n console.error('[FirestoreAdapter] _value:', _value);\n throw new Error(`Invalid Date Type: ${_value}`);\n }\n newObj[annotation.fieldName] = this.convertDateToTimestamp(_value);\n break;\n }\n case 'array': {\n if (typeof annotation?.childType === 'undefined') {\n if (_value)\n newObj[annotation.fieldName] = _value;\n }\n else {\n const Type = annotation.childType();\n if (typeof _value === 'undefined')\n break;\n if (!Array.isArray(_value)) {\n newObj[annotation.fieldName] = [];\n break;\n }\n const value = (_value ?? []).map(v => {\n switch (Type) {\n case String:\n case Number:\n return v;\n default:\n return this.toFirestore(v, Type);\n }\n });\n if (value)\n newObj[annotation.fieldName] = value;\n }\n break;\n }\n case 'map': {\n if (typeof _value === 'undefined')\n break;\n if (typeof annotation?.childType === 'undefined') {\n if (_value)\n newObj[annotation.fieldName] = _value;\n }\n else {\n const Type = annotation.childType();\n const value = this.toFirestore(_value, Type);\n if (value)\n newObj[annotation.fieldName] = value;\n }\n break;\n }\n }\n }\n return newObj;\n }\n fromFirestore(data, Entity) {\n const newObj = {};\n for (const annotation of getFirestoreAnnotations(Entity)) {\n const _value = data[annotation.fieldName];\n if (typeof _value === 'undefined')\n continue;\n if (_value === null) {\n newObj[annotation.propName] = null;\n continue;\n }\n switch (annotation.type) {\n case 'id':\n case 'string':\n case 'number':\n case 'boolean': {\n newObj[annotation.propName] = _value;\n break;\n }\n case 'timestamp': {\n try {\n newObj[annotation.propName] = this.convertTimestampToDate(_value);\n }\n catch (e) {\n newObj[annotation.propName] = _value;\n }\n break;\n }\n case 'array': {\n if (typeof annotation?.childType === 'undefined') {\n newObj[annotation.propName] = _value;\n }\n else {\n const Type = annotation.childType();\n const value = _value.map(v => {\n switch (Type) {\n case String:\n case Number:\n return v;\n default:\n return this.fromFirestore(v, Type);\n }\n });\n if (value)\n newObj[annotation.propName] = value;\n }\n break;\n }\n case 'map': {\n if (typeof annotation?.childType === 'undefined') {\n newObj[annotation.propName] = _value;\n }\n else {\n const Type = annotation.childType();\n const value = this.fromFirestore(_value, Type);\n if (value)\n newObj[annotation.propName] = value;\n }\n break;\n }\n }\n }\n return newObj;\n }\n /**\n * @description FirestoreのUpdateは通常のオブジェクトでは孫以下のプロパティが既存データとマージされないので、パスに変換する必要がある。\n */\n flattenForUpdate(obj) {\n const newObj = {};\n walkObj(obj, {\n callback: (paths, value) => newObj[paths.join('.')] = value,\n overwrite: (_, value) => {\n if (Array.isArray(value))\n return [true, value];\n if (this.isTimestamp(value))\n return [true, value];\n if (this.isFieldValue(value))\n return [true, value];\n return [false];\n }\n });\n return newObj;\n }\n convertDateToTimestamp(date) {\n return this.Timestamp.fromDate(date);\n }\n convertTimestampToDate(timestamp) {\n return this.dateAdapter.convertToDate(timestamp.toDate());\n }\n}\nexport function provideFirestoreAdapter(useClass) {\n return { provide: FirestoreAdapter, useClass };\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS5hZGFwdGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvQG54LWRkZC9maXJlc3RvcmUvc3JjL2xpYi9hZGFwdGVycy9iYXNlL2Jhc2UuYWRhcHRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3ZDLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ3RFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDdkMsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQVdoQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBUXZDLE1BQU0sT0FBZ0IsZ0JBQWdCO0lBQXRDO1FBQ1ksZ0JBQVcsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7SUFxTjlDLENBQUM7SUFuS0MsbUJBQW1CO0lBQ25CLGVBQWUsQ0FBUyxNQUFjO1FBQ3BDLE9BQU8sTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDckQsR0FBRyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUUsSUFBSSxDQUFDLHNCQUFzQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ3BGLENBQUMsRUFBRSxFQUFtQyxDQUFDLENBQUM7SUFDM0MsQ0FBQztJQUVELG1CQUFtQjtJQUNuQixpQkFBaUIsQ0FBUyxJQUFtQztRQUMzRCxPQUFPLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFD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LE9BQU8sQ0FBQyxJQUFJLEVBQUUsS0FBWSxDQUFDLENBQUM7Z0JBQ3pELElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUM7b0JBQUUsT0FBTyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztnQkFDbkQsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFBO1lBQ2hCLENBQUM7U0FDRixDQUFDLENBQUM7UUFDSCxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO0lBRUQsc0JBQXNCLENBQUMsSUFBVTtRQUMvQixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7SUFFRCxzQkFBc0IsQ0FBQyxTQUFvQjtRQUN6QyxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFBO0lBQzNELENBQUM7Q0FFRjtBQUVELE1BQU0sVUFBVSx1QkFBdUIsQ0FBQyxRQUFvQztJQUMxRSxPQUFPLEVBQUUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLFFBQVEsRUFBRSxDQUFDO0FBQ2pELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGdldEZpcmVzdG9yZUFubm90YXRpb25zIH0gZnJvbSAnLi4vLi4vZGVjb3JhdG9ycy9kZWNvcmF0b3JzJztcbmltcG9ydCB7IHdhbGtPYmogfSBmcm9tICdAbngtZGRkL2NvcmUnO1xuaW1wb3J0IHsgZ2V0IH0gZnJvbSAnbG9kYXNoLWVzJztcbmltcG9ydCB0eXBlIHtcbiAgQ29sbGVjdGlvblJlZmVyZW5jZSxcbiAgQ29sbGVjdGlvbkdyb3VwLFxuICBEb2N1bWVudFJlZmVyZW5jZSxcbiAgVG9GaXJlc3RvcmVEYXRhLFxuICBUaW1lc3RhbXAsXG4gIFF1ZXJ5LFxuICBGaWVsZFZhbHVlLFxuICBEb2N1bWVudERhdGFcbn0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBEYXRlQWRhcHRlciB9IGZyb20gJy4uL2RheWpzJztcblxuZXhwb3J0IHR5cGUgUXVlcnlGbjxBcHBNb2RlbFR5cGUsIERiTW9kZWxUeXBlLCBSPiA9IChcbiAgY29sbGVjdGlvbj86IGFueVxuKSA9PiBSO1xuZXhwb3J0IHR5cGUgV2hlcmVGaWx0ZXJPcCA9ICc8JyB8ICc8PScgfCAnPT0nIHwgJyE9JyB8ICc+PScgfCAnPicgfCAnYXJyYXktY29udGFpbnMnIHwgJ2luJyB8ICdhcnJheS1jb250YWlucy1hbnknIHwgJ25vdC1pbic7XG5cblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEZpcmVzdG9yZUFkYXB0ZXI8RGF0ZSA9IGFueT4ge1xuICBwcm90ZWN0ZWQgZGF0ZUFkYXB0ZXIgPSBpbmplY3QoRGF0ZUFkYXB0ZXIpO1xuXG4gIHByb3RlY3RlZCBhYnN0cmFjdCBpc1RpbWVzdGFtcCh2OiBhbnkpOiB2IGlzIFRpbWVzdGFtcDtcbiAgcHJvdGVjdGVkIGFic3RyYWN0IGlzRmllbGRWYWx1ZSh2OiBhbnkpOiB2IGlzIEZpZWxkVmFsdWU7XG5cbiAgYWJzdHJhY3QgZ2V0IFRpbWVzdGFtcCgpOiBhbnlcbiAgYWJzdHJhY3QgZ2V0IEZpZWxkVmFsdWUoKTogYW55XG4gIGFic3RyYWN0IGdldCBGaWVsZFBhdGgoKTogYW55XG5cbiAgYWJzdHJhY3QgZG9jPFxuICAgIEFwcE1vZGVsVHlwZSA9IERvY3VtZW50RGF0YSxcbiAgICBEYk1vZGVsVHlwZSBleHRlbmRzIERvY3VtZW50RGF0YSA9IERvY3VtZW50RGF0YSxcbiAgPihwYXRoOiBzdHJpbmcpOiBEb2N1bWVudFJlZmVyZW5jZTxBcHBNb2RlbFR5cGU+O1xuXG4gIGFic3RyYWN0IGNvbGxlY3Rpb248XG4gICAgQXBwTW9kZWxUeXBlID0gRG9jdW1lbnREYXRhLFxuICAgIERiTW9kZWxUeXBlIGV4dGVuZHMgRG9jdW1lbnREYXRhID0gRG9jdW1lbnREYXRhLFxuICA+KHBhdGg6IHN0cmluZyk6IENvbGxlY3Rpb25SZWZlcmVuY2U8QXBwTW9kZWxUeXBlLCBEYk1vZGVsVHlwZT47XG5cbiAgYWJzdHJhY3QgY29sbGVjdGlvbkdyb3VwPFxuICAgIEFwcE1vZGVsVHlwZSA9IERvY3VtZW50RGF0YSxcbiAgICBEYk1vZGVsVHlwZSBleHRlbmRzIERvY3VtZW50RGF0YSA9IERvY3VtZW50RGF0YSxcbiAgPihjb2xsZWN0aW9uSWQ6IHN0cmluZyk6IENvbGxlY3Rpb25Hcm91cDxBcHBNb2RlbFR5cGUsIERiTW9kZWxUeXBlPjtcblxuICBhYnN0cmFjdCBxdWVyeTxcbiAgICBBcHBNb2RlbFR5cGUgPSBEb2N1bWVudERhdGEsXG4gICAgRGJNb2RlbFR5cGUgZXh0ZW5kcyBEb2N1bWVudERhdGEgPSBEb2N1bWVudERhdGEsXG4gID4oXG4gICAgY29sbGVjdGlvbjogQ29sbGVjdGlvblJlZmVyZW5jZTxBcHBNb2RlbFR5cGUsIERiTW9kZWxUeXBlPixcbiAgICAuLi5xdWVyeUZuQXJyYXk6IFF1ZXJ5Rm48QXBwTW9kZWxUeXBlLCBEYk1vZGVsVHlwZSwgYW55PltdXG4gICk6IFF1ZXJ5PEFwcE1vZGVsVHlwZSwgRGJNb2RlbFR5cGU+O1xuXG4gIGFic3RyYWN0IHdoZXJlPFxuICAgIEFwcE1vZGVsVHlwZSA9IERvY3VtZW50RGF0YSxcbiAgICBEYk1vZGVsVHlwZSBleHRlbmRzIERvY3VtZW50RGF0YSA9IERvY3VtZW50RGF0YSxcbiAgPihrZXk6IHN0cmluZywgZXZhbHVhdGlvbjogV2hlcmVGaWx0ZXJPcCwgdmFsdWU6IHVua25vd24pOiBRdWVyeUZuPEFwcE1vZGVsVHlwZSwgRGJNb2RlbFR5cGUsIGFueT47XG5cbiAgYWJzdHJhY3Qgb3JkZXJCeTxcbiAgICBBcHBNb2RlbFR5cGUgPSBEb2N1bWVudERhdGEsXG4gICAgRGJNb2RlbFR5cGUgZXh0ZW5kcyBEb2N1bWVudERhdGEgPSBEb2N1bWVudERhdGEsXG4gID4oa2V5OiBzdHJpbmcsIG9yZGVyOiAnYXNjJyB8ICdkZXNjJyk6IFF1ZXJ5Rm48QXBwTW9kZWxUeXBlLCBEYk1vZGVsVHlwZSwgYW55PjtcblxuICBhYnN0cmFjdCBsaW1pdDxcbiAgICBBcHBNb2RlbFR5cGUgPSBEb2N1bWVudERhdGEsXG4gICAgRGJNb2RlbFR5cGUgZXh0ZW5kcyBEb2N1bWVudERhdGEgPSBEb2N1bWVudERhdGEsXG4gID4objogbnVtYmVyKTogUXVlcnlGbjxBcHBNb2RlbFR5cGUsIERiTW9kZWxUeXBlLCBhbnk+O1xuXG4gIGFic3RyYWN0IHJ1blRyYW5zYWN0aW9uKGZuOiBhbnkpOiBhbnk7XG4gIGFic3RyYWN0IGJhdGNoKCk6IGFueTtcblxuICAvLyoqIEBkZXByZWNhdGVkICovXG4gIHRvRmlyZXN0b3JlRGF0YTxFbnRpdHk+KGVudGl0eTogRW50aXR5KTogVG9GaXJlc3RvcmVEYXRhPEVudGl0eSwgRGF0ZT4ge1xuICAgIHJldHVybiBPYmplY3QuZW50cmllcyhlbnRpdHkpLnJlZHVjZSgocHJlLCBbaywgdl0pID0+ICh7XG4gICAgICAuLi5wcmUsIFtrXTogdGhpcy5kYXRlQWRhcHRlci5pc0RhdGU8RGF0ZT4odikgPyAgdGhpcy5jb252ZXJ0RGF0ZVRvVGltZXN0YW1wKHYpIDogdixcbiAgICB9KSwge30gYXMgVG9GaXJlc3RvcmVEYXRhPEVudGl0eSwgRGF0ZT4pO1xuICB9XG5cbiAgLy8qKiBAZGVwcmVjYXRlZCAqL1xuICBmcm9tRmlyZXN0b3JlRGF0YTxFbnRpdHk+KGRhdGE6IFRvRmlyZXN0b3JlRGF0YTxFbnRpdHksIERhdGU+KTogRW50aXR5IHtcbiAgICByZXR1cm4gT2JqZWN0LmVudHJpZXMoZGF0YSkucmVkdWNlKChwcmUsIFtrLCB2XSkgPT4gKHtcbiAgICAgIC4uLnByZSwgW2tdOiB0aGlzLmlzVGltZXN0YW1wKHYpID8gdGhpcy5jb252ZXJ0VGltZXN0YW1wVG9EYXRlKHYpIDogdixcbiAgICB9KSwge30gYXMgRW50aXR5KTtcbiAgfVxuXG4gIHRvRmlyZXN0b3JlPFQ+KG9iajogb2JqZWN0LCBFbnRpdHk6IG5ldyAoKSA9PiBUKTogb2JqZWN0IHtcbiAgICBjb25zdCBuZXdPYmogPSB7fTtcbiAgICBmb3IgKGNvbnN0IGFubm90YXRpb24gb2YgZ2V0RmlyZXN0b3JlQW5ub3RhdGlvbnMoRW50aXR5KSkge1xuICAgICAgY29uc3QgX3ZhbHVlID0gZ2V0KG9iaiwgYW5ub3RhdGlvbi5wcm9wTmFtZSk7XG4gICAgICBpZiAoX3ZhbHVlID09PSBudWxsKSB7XG4gICAgICAgIG5ld09ialthbm5vdGF0aW9uLmZpZWxkTmFtZV0gPSBudWxsO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIHN3aXRjaChhbm5vdGF0aW9uLnR5cGUpIHtcbiAgICAgICAgY2FzZSAnaWQnOlxuICAgICAgICBjYXNlICdzdHJpbmcnOlxuICAgICAgICBjYXNlICdudW1iZXInOiBcbiAgICAgICAgY2FzZSAnYm9vbGVhbic6IHtcbiAgICAgICAgICBpZiAodHlwZW9mIF92YWx1ZSA9PT0gJ3VuZGVmaW5lZCcpIGJyZWFrO1xuICAgICAgICAgIG5ld09ialthbm5vdGF0aW9uLmZpZWxkTmFtZV0gPSBfdmFsdWU7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAndGltZXN0YW1wJzoge1xuICAgICAgICAgIGlmICh0eXBlb2YgX3ZhbHVlID09PSAndW5kZWZpbmVkJykgYnJlYWs7XG4gICAgICAgICAgaWYgKCF0aGlzLmRhdGVBZGFwdGVyLmlzRGF0ZTxEYXRlPihfdmFsdWUpKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdbRmlyZXN0b3JlQWRhcHRlcl0gX3ZhbHVlOicsIF92YWx1ZSk7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgRGF0ZSBUeXBlOiAke192YWx1ZX1gKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgbmV3T2JqW2Fubm90YXRpb24uZmllbGROYW1lXSA9IHRoaXMuY29udmVydERhdGVUb1RpbWVzdGFtcChfdmFsdWUpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgJ2FycmF5Jzoge1xuICAgICAgICAgIGlmICh0eXBlb2YgYW5ub3RhdGlvbj8uY2hpbGRUeXBlID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgaWYgKF92YWx1ZSkgbmV3T2JqW2Fubm90YXRpb24uZmllbGROYW1lXSA9IF92YWx1ZTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgVHlwZSA9IChhbm5vdGF0aW9uIGFzIGFueSkuY2hpbGRUeXBlKCk7XG4gICAgICAgICAgICBpZiAodHlwZW9mIF92YWx1ZSA9PT0gJ3VuZGVmaW5lZCcpIGJyZWFrO1xuICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KF92YWx1ZSkpIHtcbiAgICAgICAgICAgICAgbmV3T2JqW2Fubm90YXRpb24uZmllbGROYW1lXSA9IFtdO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gKF92YWx1ZSA/PyBbXSkubWFwKHYgPT4ge1xuICAgICAgICAgICAgICBzd2l0Y2ggKFR5cGUpIHtcbiAgICAgICAgICAgICAgICBjYXNlIFN0cmluZzpcbiAgICAgICAgICAgICAgICBjYXNlIE51bWJlcjpcbiAgICAgICAgICAgICAgICAgIHJldHVybiB2XG4gICAgICAgICAgICAgICAgZGVmYXVsdDogXG4gICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy50b0ZpcmVzdG9yZSh2LCBUeXBlKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAodmFsdWUpIG5ld09ialthbm5vdGF0aW9uLmZpZWxkTmFtZV0gPSB2YWx1ZVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlICdtYXAnOiB7XG4gICAgICAgICAgaWYgKHR5cGVvZiBfdmFsdWUgPT09ICd1bmRlZmluZWQnKSBicmVhaztcbiAgICAgICAgICBpZiAodHlwZW9mIChhbm5vdGF0aW9uIGFzIGFueSk/LmNoaWxkVHlwZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIGlmIChfdmFsdWUpIG5ld09ialthbm5vdGF0aW9uLmZpZWxkTmFtZV0gPSBfdmFsdWU7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IFR5cGUgPSAoYW5ub3RhdGlvbiBhcyBhbnkpLmNoaWxkVHlwZSgpO1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLnRvRmlyZXN0b3JlKF92YWx1ZSwgVHlwZSk7XG4gICAgICAgICAgICBpZiAodmFsdWUpIG5ld09ialthbm5vdGF0aW9uLmZpZWxkTmFtZV0gPSB2YWx1ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG5ld09iajtcbiAgfVxuICBcbiAgZnJvbUZpcmVzdG9yZTxUID0gYW55PihkYXRhOiBhbnksIEVudGl0eTogbmV3KCkgPT4gVCk6IFQge1xuICAgIGNvbnN0IG5ld09iaiA9IHt9O1xuICAgIGZvciAoY29uc3QgYW5ub3RhdGlvbiBvZiBnZXRGaXJlc3RvcmVBbm5vdGF0aW9ucyhFbnRpdHkpKSB7XG4gICAgICBjb25zdCBfdmFsdWUgPSBkYXRhW2Fubm90YXRpb24uZmllbGROYW1lXTtcbiAgICAgIGlmICh0eXBlb2YgX3ZhbHVlID09PSAndW5kZWZpbmVkJykgY29udGludWU7XG4gICAgICBpZiAoX3ZhbHVlID09PSBudWxsKSB7XG4gICAgICAgIG5ld09ialthbm5vdGF0aW9uLnByb3BOYW1lXSA9IG51bGw7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBzd2l0Y2goYW5ub3RhdGlvbi50eXBlKSB7XG4gICAgICAgIGNhc2UgJ2lkJzpcbiAgICAgICAgY2FzZSAnc3RyaW5nJzpcbiAgICAgICAgY2FzZSAnbnVtYmVyJzpcbiAgICAgICAgY2FzZSAnYm9vbGVhbic6IHtcbiAgICAgICAgICBuZXdPYmpbYW5ub3RhdGlvbi5wcm9wTmFtZV0gPSBfdmFsdWU7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAndGltZXN0YW1wJzoge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBuZXdPYmpbYW5ub3RhdGlvbi5wcm9wTmFtZV0gPSB0aGlzLmNvbnZlcnRUaW1lc3RhbXBUb0RhdGUoX3ZhbHVlKTtcbiAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBuZXdPYmpbYW5ub3RhdGlvbi5wcm9wTmFtZV0gPSBfdmFsdWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgJ2FycmF5Jzoge1xuICAgICAgICAgIGlmICh0eXBlb2YgYW5ub3RhdGlvbj8uY2hpbGRUeXBlID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgbmV3T2JqW2Fubm90YXRpb24ucHJvcE5hbWVdID0gX3ZhbHVlO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBUeXBlID0gKGFubm90YXRpb24gYXMgYW55KS5jaGlsZFR5cGUoKTtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gX3ZhbHVlLm1hcCh2ID0+IHtcbiAgICAgICAgICAgICAgc3dpdGNoIChUeXBlKSB7XG4gICAgICAgICAgICAgICAgY2FzZSBTdHJpbmc6XG4gICAgICAgICAgICAgICAgY2FzZSBOdW1iZXI6XG4gICAgICAgICAgICAgICAgICByZXR1cm4gdlxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5mcm9tRmlyZXN0b3JlKHYsIFR5cGUpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlmICh2YWx1ZSkgbmV3T2JqW2Fubm90YXRpb24ucHJvcE5hbWVdID0gdmFsdWVcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAnbWFwJzoge1xuICAgICAgICAgIGlmICh0eXBlb2YgYW5ub3RhdGlvbj8uY2hpbGRUeXBlID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgbmV3T2JqW2Fubm90YXRpb24ucHJvcE5hbWVdID0gX3ZhbHVlO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBUeXBlID0gKGFubm90YXRpb24gYXMgYW55KS5jaGlsZFR5cGUoKTtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5mcm9tRmlyZXN0b3JlKF92YWx1ZSwgVHlwZSk7XG4gICAgICAgICAgICBpZiAodmFsdWUpIG5ld09ialthbm5vdGF0aW9uLnByb3BOYW1lXSA9IHZhbHVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbmV3T2JqIGFzIFQ7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEZpcmVzdG9yZeOBrlVwZGF0ZeOBr+mAmuW4uOOBruOCquODluOCuOOCp+OCr+ODiOOBp+OBr+Wtq+S7peS4i+OBruODl+ODreODkeODhuOCo+OBjOaXouWtmOODh+ODvOOCv+OBqOODnuODvOOCuOOBleOCjOOBquOBhOOBruOBp+OAgeODkeOCueOBq+WkieaPm+OBmeOCi+W/heimgeOBjOOBguOCi+OAglxuICAgKi9cbiAgZmxhdHRlbkZvclVwZGF0ZShvYmo6IGFueSk6IGFueSB7XG4gICAgY29uc3QgbmV3T2JqID0ge307XG4gICAgd2Fsa09iaihvYmosIHtcbiAgICAgIGNhbGxiYWNrOiAocGF0aHMsIHZhbHVlKSA9PiBuZXdPYmpbcGF0aHMuam9pbignLicpXSA9IHZhbHVlLFxuICAgICAgb3ZlcndyaXRlOiAoXywgdmFsdWUpID0+IHtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSByZXR1cm4gW3RydWUsIHZhbHVlXTtcbiAgICAgICAgaWYgKHRoaXMuaXNUaW1lc3RhbXAodmFsdWUpKSByZXR1cm4gW3RydWUsIHZhbHVlIGFzIGFueV07XG4gICAgICAgIGlmICh0aGlzLmlzRmllbGRWYWx1ZSh2YWx1ZSkpIHJldHVybiBbdHJ1ZSwgdmFsdWVdO1xuICAgICAgICByZXR1cm4gW2ZhbHNlXVxuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBuZXdPYmo7XG4gIH1cblxuICBjb252ZXJ0RGF0ZVRvVGltZXN0YW1wKGRhdGU6IERhdGUpOiBUaW1lc3RhbXAge1xuICAgIHJldHVybiB0aGlzLlRpbWVzdGFtcC5mcm9tRGF0ZShkYXRlKTtcbiAgfVxuXG4gIGNvbnZlcnRUaW1lc3RhbXBUb0RhdGUodGltZXN0YW1wOiBUaW1lc3RhbXApOiBEYXRlIHtcbiAgICByZXR1cm4gdGhpcy5kYXRlQWRhcHRlci5jb252ZXJ0VG9EYXRlKHRpbWVzdGFtcC50b0RhdGUoKSlcbiAgfVxuICBcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb3ZpZGVGaXJlc3RvcmVBZGFwdGVyKHVzZUNsYXNzOiBuZXcgKCkgPT4gRmlyZXN0b3JlQWRhcHRlcikge1xuICByZXR1cm4geyBwcm92aWRlOiBGaXJlc3RvcmVBZGFwdGVyLCB1c2VDbGFzcyB9O1xufVxuIl19","import { inject } from '@angular/core';\nimport { plainToInstanceWithValid } from '@nx-ddd/core';\nimport { FirestoreAdapter } from '../adapters/base';\nclass FirestoreHelper {\n static fromFirestore(doc, Entity, adapter) {\n const data = adapter.fromFirestore({ ...doc.data(), id: doc.id }, Entity);\n return plainToInstanceWithValid(Entity, data);\n }\n}\nclass BasicConverter {\n constructor(Entity, adapter) {\n this.Entity = Entity;\n this.adapter = adapter;\n }\n fromFirestore(doc) {\n return this.adapter.fromFirestore({\n ...doc.data(),\n id: doc.id\n }, this.Entity);\n }\n fromFirestoreMany(docs) {\n return docs.map(doc => this.fromFirestore(doc));\n }\n toFirestore(entity) {\n return this.adapter.toFirestore(entity, this.Entity);\n }\n}\nexport function getConverter(Entity, adapter = inject(FirestoreAdapter)) {\n return new BasicConverter(Entity, adapter);\n}\nexport function injectConverter(Entity) {\n return getConverter(Entity, inject(FirestoreAdapter));\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udmVydGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvQG54LWRkZC9maXJlc3RvcmUvc3JjL2xpYi9jb252ZXJ0ZXIvY29udmVydGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdkMsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ3hELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBV3BELE1BQU0sZUFBZTtJQUNuQixNQUFNLENBQUMsYUFBYSxDQUF5QixHQUE2QixFQUFFLE1BQW1CLEVBQUUsT0FBeUI7UUFDeEgsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLGFBQWEsQ0FBQyxFQUFDLEdBQUcsR0FBRyxDQUFDLElBQUksRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLENBQUMsRUFBRSxFQUFDLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDeEUsT0FBTyx3QkFBd0IsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDaEQsQ0FBQztDQUNGO0FBRUQsTUFBTSxjQUFjO0lBQ2xCLFlBQ3FCLE1BQW1CLEVBQ25CLE9BQXlCO1FBRHpCLFdBQU0sR0FBTixNQUFNLENBQWE7UUFDbkIsWUFBTyxHQUFQLE9BQU8sQ0FBa0I7SUFDMUMsQ0FBQztJQUVMLGFBQWEsQ0FBQyxHQUEwQjtRQUN0QyxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDO1lBQ2hDLEdBQUcsR0FBRyxDQUFDLElBQUksRUFBRTtZQUNiLEVBQUUsRUFBRSxHQUFHLENBQUMsRUFBRTtTQUNYLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ2xCLENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxJQUE2QjtRQUM3QyxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDbEQsQ0FBQztJQUVELFdBQVcsQ0FBQyxNQUFTO1FBQ25CLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN2RCxDQUFDO0NBQ0Y7QUFFRCxNQUFNLFVBQVUsWUFBWSxDQUMxQixNQUF3QixFQUN4QixVQUE0QixNQUFNLENBQUMsZ0JBQWdCLENBQUM7SUFFcEQsT0FBTyxJQUFJLGNBQWMsQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDN0MsQ0FBQztBQUVELE1BQU0sVUFBVSxlQUFlLENBQThCLE1BQXdCO0lBQ25GLE9BQU8sWUFBWSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDO0FBQ3hELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHBsYWluVG9JbnN0YW5jZVdpdGhWYWxpZCB9IGZyb20gJ0BueC1kZGQvY29yZSc7XG5pbXBvcnQgeyBGaXJlc3RvcmVBZGFwdGVyIH0gZnJvbSAnLi4vYWRhcHRlcnMvYmFzZSc7XG5pbXBvcnQgeyBEb2N1bWVudFNuYXBzaG90IH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUZpcmVzdG9yZUNvbnZlcnRlcjxFIGV4dGVuZHMge2lkOiBzdHJpbmd9PiB7XG4gIGZyb21GaXJlc3RvcmUoZG9jOiBEb2N1bWVudFNuYXBzaG90PG9iamVjdD4pOiBFO1xuICBmcm9tRmlyZXN0b3JlTWFueShkb2NzOiBEb2N1bWVudFNuYXBzaG90PG9iamVjdD5bXSk6IEVbXTtcbiAgdG9GaXJlc3RvcmUoZW50aXR5OiBQYXJ0aWFsPEU+KTogb2JqZWN0O1xuICBmcm9tT2JqZWN0PyhvYmo6IG9iamVjdCk6IEU7XG4gIHRvT2JqZWN0PyhlbnRpdHk6IEUpOiBvYmplY3Q7XG59XG5cbmNsYXNzIEZpcmVzdG9yZUhlbHBlciB7XG4gIHN0YXRpYyBmcm9tRmlyZXN0b3JlPEUgZXh0ZW5kcyB7aWQ6IHN0cmluZ30+KGRvYzogRG9jdW1lbnRTbmFwc2hvdDxvYmplY3Q+LCBFbnRpdHk6IG5ldyAoKSA9PiBFLCBhZGFwdGVyOiBGaXJlc3RvcmVBZGFwdGVyKTogRSB7XG4gICAgY29uc3QgZGF0YSA9IGFkYXB0ZXIuZnJvbUZpcmVzdG9yZSh7Li4uZG9jLmRhdGEoKSwgaWQ6IGRvYy5pZH0sIEVudGl0eSk7XG4gICAgcmV0dXJuIHBsYWluVG9JbnN0YW5jZVdpdGhWYWxpZChFbnRpdHksIGRhdGEpO1xuICB9XG59XG5cbmNsYXNzIEJhc2ljQ29udmVydGVyPEUgZXh0ZW5kcyB7aWQ6IHN0cmluZ30+IHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IEVudGl0eTogbmV3ICgpID0+IEUsXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IGFkYXB0ZXI6IEZpcmVzdG9yZUFkYXB0ZXIsXG4gICkgeyB9XG5cbiAgZnJvbUZpcmVzdG9yZShkb2M6IERvY3VtZW50U25hcHNob3Q8YW55Pik6IEUge1xuICAgIHJldHVybiB0aGlzLmFkYXB0ZXIuZnJvbUZpcmVzdG9yZSh7XG4gICAgICAuLi5kb2MuZGF0YSgpLFxuICAgICAgaWQ6IGRvYy5pZFxuICAgIH0sIHRoaXMuRW50aXR5KTtcbiAgfVxuXG4gIGZyb21GaXJlc3RvcmVNYW55KGRvY3M6IERvY3VtZW50U25hcHNob3Q8YW55PltdKTogRVtdIHtcbiAgICByZXR1cm4gZG9jcy5tYXAoZG9jID0+IHRoaXMuZnJvbUZpcmVzdG9yZShkb2MpKTtcbiAgfVxuXG4gIHRvRmlyZXN0b3JlKGVudGl0eTogRSk6IG9iamVjdCB7XG4gICAgcmV0dXJuIHRoaXMuYWRhcHRlci50b0ZpcmVzdG9yZShlbnRpdHksIHRoaXMuRW50aXR5KTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q29udmVydGVyPEVudGl0eSBleHRlbmRzIHtpZDogc3RyaW5nfT4oXG4gIEVudGl0eTogbmV3ICgpID0+IEVudGl0eSxcbiAgYWRhcHRlcjogRmlyZXN0b3JlQWRhcHRlciA9IGluamVjdChGaXJlc3RvcmVBZGFwdGVyKSxcbik6IElGaXJlc3RvcmVDb252ZXJ0ZXI8RW50aXR5PiB7XG4gIHJldHVybiBuZXcgQmFzaWNDb252ZXJ0ZXIoRW50aXR5LCBhZGFwdGVyKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGluamVjdENvbnZlcnRlcjxFbnRpdHkgZXh0ZW5kcyB7aWQ6IHN0cmluZ30+KEVudGl0eTogbmV3ICgpID0+IEVudGl0eSk6IElGaXJlc3RvcmVDb252ZXJ0ZXI8RW50aXR5PiB7XG4gIHJldHVybiBnZXRDb252ZXJ0ZXIoRW50aXR5LCBpbmplY3QoRmlyZXN0b3JlQWRhcHRlcikpO1xufVxuIl19","export class FirestoreDAO {\n constructor(adapter, pathBuilder) {\n this.adapter = adapter;\n this.pathBuilder = pathBuilder;\n }\n collection(paramMap) {\n const path = this.pathBuilder.collection(paramMap);\n return this.adapter.collection(path);\n }\n collectionGroup() {\n const path = this.pathBuilder.collectionGroup();\n return this.adapter.collectionGroup(path);\n }\n doc(paramMap) {\n const path = this.pathBuilder.doc(paramMap);\n return this.adapter.doc(path);\n }\n getCollection(paramMap) {\n return paramMap ? this.collection(paramMap) : this.collectionGroup();\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlyZXN0b3JlLmRhby5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL0BueC1kZGQvZmlyZXN0b3JlL3NyYy9saWIvZGFvL2ZpcmVzdG9yZS5kYW8udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBTUEsTUFBTSxPQUFPLFlBQVk7SUFLdkIsWUFDWSxPQUF5QixFQUN6QixXQUF5QztRQUR6QyxZQUFPLEdBQVAsT0FBTyxDQUFrQjtRQUN6QixnQkFBVyxHQUFYLFdBQVcsQ0FBOEI7SUFDakQsQ0FBQztJQUVMLFVBQVUsQ0FBQyxRQUEwQjtRQUNuQyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQTtRQUNsRCxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFnQixJQUFJLENBQUMsQ0FBQztJQUN0RCxDQUFDO0lBRUQsZUFBZTtRQUNiLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDaEQsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBZ0IsSUFBSSxDQUFDLENBQUM7SUFDM0QsQ0FBQztJQUVELEdBQUcsQ0FBQyxRQUF3QztRQUMxQyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUM1QyxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFnQixJQUFJLENBQUMsQ0FBQztJQUMvQyxDQUFDO0lBRUQsYUFBYSxDQUFDLFFBQTBCO1FBQ3RDLE9BQU8sUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7SUFDdkUsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGRheWpzIGZyb20gJ2RheWpzJztcbmltcG9ydCB7IEZpcmVzdG9yZUFkYXB0ZXIgfSBmcm9tICcuLi9hZGFwdGVycy9iYXNlJztcbmltcG9ydCB7IENvbGxlY3Rpb25SZWZlcmVuY2UsIENvbGxlY3Rpb25Hcm91cCwgRG9jdW1lbnRSZWZlcmVuY2UsIFRvRmlyZXN0b3JlRGF0YSwgQ29sbGVjdGlvbkxpa2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IEZpcmVzdG9yZVBhdGhCdWlsZGVyIH0gZnJvbSAnLi4vcGF0aC1idWlsZGVyJztcblxuXG5leHBvcnQgY2xhc3MgRmlyZXN0b3JlREFPPFxuICBFbnRpdHkgZXh0ZW5kcyB7aWQ6IHN0cmluZ30sIFxuICBGaXJlc3RvcmVEYXRhID0gVG9GaXJlc3RvcmVEYXRhPEVudGl0eSwgZGF5anMuRGF5anM+LFxuPiB7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJvdGVjdGVkIGFkYXB0ZXI6IEZpcmVzdG9yZUFkYXB0ZXIsXG4gICAgcHJvdGVjdGVkIHBhdGhCdWlsZGVyOiBGaXJlc3RvcmVQYXRoQnVpbGRlcjxFbnRpdHk+LFxuICApIHsgfVxuXG4gIGNvbGxlY3Rpb24ocGFyYW1NYXA/OiBQYXJ0aWFsPEVudGl0eT4pOiBDb2xsZWN0aW9uUmVmZXJlbmNlPEZpcmVzdG9yZURhdGE+IHtcbiAgICBjb25zdCBwYXRoID0gdGhpcy5wYXRoQnVpbGRlci5jb2xsZWN0aW9uKHBhcmFtTWFwKVxuICAgIHJldHVybiB0aGlzLmFkYXB0ZXIuY29sbGVjdGlvbjxGaXJlc3RvcmVEYXRhPihwYXRoKTtcbiAgfVxuXG4gIGNvbGxlY3Rpb25Hcm91cCgpOkNvbGxlY3Rpb25Hcm91cDxGaXJlc3RvcmVEYXRhPiB7XG4gICAgY29uc3QgcGF0aCA9IHRoaXMucGF0aEJ1aWxkZXIuY29sbGVjdGlvbkdyb3VwKCk7XG4gICAgcmV0dXJuIHRoaXMuYWRhcHRlci5jb2xsZWN0aW9uR3JvdXA8RmlyZXN0b3JlRGF0YT4ocGF0aCk7XG4gIH1cblxuICBkb2MocGFyYW1NYXA6IFBhcnRpYWw8RW50aXR5PiAmIHtpZDogc3RyaW5nfSk6IERvY3VtZW50UmVmZXJlbmNlPEZpcmVzdG9yZURhdGE+IHtcbiAgICBjb25zdCBwYXRoID0gdGhpcy5wYXRoQnVpbGRlci5kb2MocGFyYW1NYXApO1xuICAgIHJldHVybiB0aGlzLmFkYXB0ZXIuZG9jPEZpcmVzdG9yZURhdGE+KHBhdGgpO1xuICB9XG5cbiAgZ2V0Q29sbGVjdGlvbihwYXJhbU1hcD86IFBhcnRpYWw8RW50aXR5Pik6IENvbGxlY3Rpb25MaWtlIHtcbiAgICByZXR1cm4gcGFyYW1NYXAgPyB0aGlzLmNvbGxlY3Rpb24ocGFyYW1NYXApIDogdGhpcy5jb2xsZWN0aW9uR3JvdXAoKTtcbiAgfVxufVxuIl19","export class FirestorePathBuilder {\n doc(param) {\n return resolvePaths(param, this.paths);\n }\n collection(param = {}) {\n return resolvePaths(param, this.paths.slice(0, -1));\n }\n collectionGroup() {\n return this.paths[this.paths.length - 2];\n }\n constructor(paths) {\n this.paths = paths;\n }\n}\nexport function pathBuilderFactory(path) {\n const paths = parsePath(path);\n return new FirestorePathBuilder(paths);\n}\nexport function parsePath(path) {\n const paths = path.split('/').filter(p => p.length);\n if (!paths[paths.length - 1].startsWith(':'))\n paths.push(':id');\n return paths;\n}\nexport const resolvePaths = (obj, paths) => {\n return paths.map((path) => path.startsWith(':') ? resolvePath(obj, path.slice(1)) : path).join('/');\n};\nconst resolvePath = (obj, key) => {\n if (!obj?.[key])\n throw new Error(`Invalid key is detected in resolving paths, key: \\`${key}\\`, obj: \\`${JSON.stringify(obj)}\\``);\n return obj?.[key];\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGF0aC1idWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvQG54LWRkZC9maXJlc3RvcmUvc3JjL2xpYi9wYXRoLWJ1aWxkZXIvcGF0aC1idWlsZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQWVBLE1BQU0sT0FBTyxvQkFBb0I7SUFJL0IsR0FBRyxDQUFDLEtBQTBCO1FBQzVCLE9BQU8sWUFBWSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDekMsQ0FBQztJQUVELFVBQVUsQ0FBQyxRQUE4QyxFQUFFO1FBQ3pELE9BQU8sWUFBWSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3RELENBQUM7SUFFRCxlQUFlO1FBQ2IsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3pDLENBQUM7SUFFRCxZQUFvQixLQUFlO1FBQWYsVUFBSyxHQUFMLEtBQUssQ0FBVTtJQUFJLENBQUM7Q0FDekM7QUFFRCxNQUFNLFVBQVUsa0JBQWtCLENBSWhDLElBQVU7SUFFVixNQUFNLEtBQUssR0FBRyxTQUFTLENBQU8sSUFBSSxDQUFDLENBQUM7SUFDcEMsT0FBTyxJQUFJLG9CQUFvQixDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3pDLENBQUM7QUFFRCxNQUFNLFVBQVUsU0FBUyxDQUErQixJQUFVO0lBQ2hFLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3BELElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDO1FBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM5RCxPQUFPLEtBQUssQ0FBQztBQUNmLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxZQUFZLEdBQUcsQ0FBQyxHQUFXLEVBQUUsS0FBZSxFQUFVLEVBQUU7SUFDbkUsT0FBTyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3RHLENBQUMsQ0FBQTtBQUVELE1BQU0sV0FBVyxHQUFHLENBQUMsR0FBVyxFQUFFLEdBQVcsRUFBRSxFQUFFO0lBQy9DLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUM7UUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLHNEQUFzRCxHQUFHLGNBQWMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDakksT0FBTyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNwQixDQUFDLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJ0eXBlIENvbGxlY3Rpb25QYXJhbU1hcDxFbnRpdHkgZXh0ZW5kcyB7aWQ6IHN0cmluZ30+ID0gUGFydGlhbDxFbnRpdHk+O1xudHlwZSBEb2NQYXJhbU1hcDxFbnRpdHkgZXh0ZW5kcyB7aWQ6IHN0cmluZ30+ID0gQ29sbGVjdGlvblBhcmFtTWFwPEVudGl0eT4gJiBQaWNrPEVudGl0eSwgJ2lkJz47XG5cbmV4cG9ydCB0eXBlIEV4dHJhY3RQYXJhbXM8VCBleHRlbmRzIHN0cmluZz4gPSBcbiAgVCBleHRlbmRzIGAke2luZmVyIF9TdGFydH06JHtpbmZlciBQYXJhbX0vJHtpbmZlciBSZXN0fWBcbiAgICA/IHsgW0sgaW4gUGFyYW0gfCBrZXlvZiBFeHRyYWN0UGFyYW1zPFJlc3Q+XTogc3RyaW5nIH1cbiAgICA6IFQgZXh0ZW5kcyBgJHtpbmZlciBfU3RhcnR9OiR7aW5mZXIgUGFyYW19YFxuICAgID8geyBbSyBpbiBQYXJhbV06IHN0cmluZyB9XG4gICAgOiB7fTtcblxudHlwZSBQYXJhbXMgPSBFeHRyYWN0UGFyYW1zPCd1c2Vycy86dXNlcklkL2ltYWdlcy86aWQnPjtcblxuZXhwb3J0IHR5cGUgQ29sUGFyYW08VCBleHRlbmRzIHtyZWFkb25seSBjb2xsZWN0aW9uUGF0aDogc3RyaW5nfT4gPSBPbWl0PEV4dHJhY3RQYXJhbXM8VFsnY29sbGVjdGlvblBhdGgnXT4sICdpZCc+O1xuZXhwb3J0IHR5cGUgRG9jUGFyYW08VCBleHRlbmRzIHtyZWFkb25seSBjb2xsZWN0aW9uUGF0aDogc3RyaW5nfT4gPSBDb2xQYXJhbTxUPiAmIHtpZDogc3RyaW5nfTsgXG5cbmV4cG9ydCBjbGFzcyBGaXJlc3RvcmVQYXRoQnVpbGRlcjxcbiAgRW50aXR5IGV4dGVuZHMgeyBpZDogc3RyaW5nIH0sXG4gIFBhdGggZXh0ZW5kcyBzdHJpbmcgPSBzdHJpbmcsXG4+IHtcbiAgZG9jKHBhcmFtOiBEb2NQYXJhbU1hcDxFbnRpdHk+KSB7XG4gICAgcmV0dXJuIHJlc29sdmVQYXRocyhwYXJhbSwgdGhpcy5wYXRocyk7XG4gIH1cblxuICBjb2xsZWN0aW9uKHBhcmFtOiBPbWl0PEV4dHJhY3RQYXJhbXM8UGF0aD4sICdpZCc+IHwge30gPSB7fSkge1xuICAgIHJldHVybiByZXNvbHZlUGF0aHMocGFyYW0sIHRoaXMucGF0aHMuc2xpY2UoMCwgLTEpKTtcbiAgfVxuXG4gIGNvbGxlY3Rpb25Hcm91cCgpIHtcbiAgICByZXR1cm4gdGhpcy5wYXRoc1t0aGlzLnBhdGhzLmxlbmd0aC0yXTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcGF0aHM6IHN0cmluZ1tdKSB7IH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhdGhCdWlsZGVyRmFjdG9yeTxcbiAgRSBleHRlbmRzIHsgaWQ6IHN0cmluZyB9LFxuICBQYXRoIGV4dGVuZHMgc3RyaW5nID0gc3RyaW5nXG4+KFxuICBwYXRoOiBQYXRoXG4pOiBGaXJlc3RvcmVQYXRoQnVpbGRlcjxFLCBQYXRoPiB7XG4gIGNvbnN0IHBhdGhzID0gcGFyc2VQYXRoPFBhdGg+KHBhdGgpO1xuICByZXR1cm4gbmV3IEZpcmVzdG9yZVBhdGhCdWlsZGVyKHBhdGhzKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlUGF0aDxQYXRoIGV4dGVuZHMgc3RyaW5nID0gc3RyaW5nPihwYXRoOiBQYXRoKTogc3RyaW5nW10ge1xuICBjb25zdCBwYXRocyA9IHBhdGguc3BsaXQoJy8nKS5maWx0ZXIocCA9PiBwLmxlbmd0aCk7XG4gIGlmICghcGF0aHNbcGF0aHMubGVuZ3RoLTFdLnN0YXJ0c1dpdGgoJzonKSkgcGF0aHMucHVzaCgnOmlkJyk7XG4gIHJldHVybiBwYXRocztcbn1cblxuZXhwb3J0IGNvbnN0IHJlc29sdmVQYXRocyA9IChvYmo6IG9iamVjdCwgcGF0aHM6IHN0cmluZ1tdKTogc3RyaW5nID0+IHtcbiAgcmV0dXJuIHBhdGhzLm1hcCgocGF0aCkgPT4gcGF0aC5zdGFydHNXaXRoKCc6JykgPyByZXNvbHZlUGF0aChvYmosIHBhdGguc2xpY2UoMSkpIDogcGF0aCkuam9pbignLycpO1xufVxuXG5jb25zdCByZXNvbHZlUGF0aCA9IChvYmo6IG9iamVjdCwga2V5OiBzdHJpbmcpID0+IHtcbiAgaWYgKCFvYmo/LltrZXldKSB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQga2V5IGlzIGRldGVjdGVkIGluIHJlc29sdmluZyBwYXRocywga2V5OiBcXGAke2tleX1cXGAsIG9iajogXFxgJHtKU09OLnN0cmluZ2lmeShvYmopfVxcYGApO1xuICByZXR1cm4gb2JqPy5ba2V5XTtcbn1cbiJdfQ==","import dayjs from 'dayjs';\nimport { ReplaySubject, lastValueFrom, of, throwError } from 'rxjs';\nimport { catchError, distinctUntilChanged, map, shareReplay, switchMap, take, tap } from 'rxjs/operators';\nimport { FirestoreDAO } from '../dao';\nexport class FirestoreQuery extends FirestoreDAO {\n constructor(adapter, converter, pathBuilder) {\n super(adapter, pathBuilder);\n this.converter = converter;\n this.pathBuilder = pathBuilder;\n this.collection$ = new ReplaySubject(1);\n this.list$ = this.collection$.pipe(switchMap((collection) => this.listChangesByCollectionRef(collection).pipe(catchError(error => throwError(() => error)))), shareReplay(1));\n this.switchCollectionRef();\n }\n /** @deprecated */\n listChanges(paramMap, options = { switch: true }) {\n return of(paramMap).pipe(tap((paramMap) => options?.switch && this.switchCollectionRef(paramMap)), switchMap(() => this.list$));\n }\n listChangesV2(paramMap) {\n return of(paramMap).pipe(tap((paramMap) => paramMap && this.switchCollectionRef(paramMap)), switchMap(() => this.list$));\n }\n listChangesAfter(updatedAt, { limit } = {}) {\n const entitiesMap = new Map();\n const _updatedAt = dayjs.isDayjs(updatedAt) ? this.adapter.convertDateToTimestamp(updatedAt) : updatedAt;\n return this.adapter.query(this.collection(), ...[\n this.adapter.where('updatedAt', '>', _updatedAt),\n this.adapter.orderBy('updatedAt', 'asc'),\n limit ? this.adapter.limit(limit) : undefined,\n ].filter(Boolean)).stateChanges().pipe(\n // bufferTime(1_000),\n // map(zippedActions => zippedActions.flat()),\n tap(actions => actions.forEach(({ type, payload: { doc } }) => {\n if (new Set(['added', 'modified']).has(type)) {\n entitiesMap.set(doc.id, this.converter.fromFirestore(doc));\n }\n else if (type === 'removed') {\n entitiesMap.delete(doc.id);\n }\n })), map(() => [...entitiesMap.values()]));\n }\n changes({ id }) {\n if (!id)\n throw new Error(`Invalid Id. it must be Truthy`);\n return this.list$.pipe(map(entities => entities.find(entity => entity.id === id)), distinctUntilChanged((pre, cur) => JSON.stringify(pre) === JSON.stringify(cur)));\n }\n changesV2(params) {\n const docRef = this.doc(params);\n return docRef.stateChanges().pipe(map((doc) => this.converter.fromFirestore(doc)));\n }\n get({ id }) {\n return lastValueFrom(this.list$.pipe(take(1), map(entities => entities.find(entity => entity.id === id))));\n }\n list(paramMap) {\n this.switchCollectionRef(paramMap);\n return lastValueFrom(this.list$.pipe(take(1)));\n }\n listChangesByCollectionRef(collection) {\n const entitiesMap = new Map();\n return collection.stateChanges().pipe(tap(actions => actions.forEach(({ type, payload: { doc } }) => {\n if (new Set(['added', 'modified']).has(type)) {\n entitiesMap.set(doc.id, this.converter.fromFirestore(doc));\n }\n else if (type === 'removed') {\n entitiesMap.delete(doc.id);\n }\n })), map(() => [...entitiesMap.values()]));\n }\n switchCollectionRef(paramMap) {\n const collection = this.getCollection(paramMap);\n this.switchCollection(collection);\n }\n switchCollection(collection) {\n this.collection$.next(collection);\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlyZXN0b3JlLnF1ZXJ5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvQG54LWRkZC9maXJlc3RvcmUvc3JjL2xpYi9xdWVyeS9maXJlc3RvcmUucXVlcnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBQzFCLE9BQU8sRUFBYyxhQUFhLEVBQUUsYUFBYSxFQUFFLEVBQUUsRUFBRSxVQUFVLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDaEYsT0FBTyxFQUFFLFVBQVUsRUFBRSxvQkFBb0IsRUFBRSxHQUFHLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFHMUcsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUl0QyxNQUFNLE9BQU8sY0FHWCxTQUFRLFlBQW1DO0lBQzNDLFlBQ0UsT0FBeUIsRUFDZixTQUFzQyxFQUN0QyxXQUF5QztRQUVuRCxLQUFLLENBQUMsT0FBTyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBSGxCLGNBQVMsR0FBVCxTQUFTLENBQTZCO1FBQ3RDLGdCQUFXLEdBQVgsV0FBVyxDQUE4QjtRQU1sQyxnQkFBVyxHQUFHLElBQUksYUFBYSxDQUFnQyxDQUFDLENBQUMsQ0FBQztRQUNsRSxVQUFLLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQzlDLFNBQVMsQ0FBQyxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLDBCQUEwQixDQUFDLFVBQVUsQ0FBQyxDQUFDLElBQUksQ0FDeEUsVUFBVSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQzdDLENBQUMsRUFDRixXQUFXLENBQUMsQ0FBQyxDQUFDLENBQ2YsQ0FBQTtRQVRDLElBQUksQ0FBQyxtQkFB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SUFBSSxHQUFHLEVBQWUsQ0FBQztRQUMzQyxPQUFPLFVBQVUsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxJQUFJLENBQ25DLEdBQUcsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBQyxFQUFFLEVBQUU7WUFDeEQsSUFBSSxJQUFJLEdBQUcsQ0FBQyxDQUFDLE9BQU8sRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO2dCQUM3QyxXQUFXLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUUsR0FBVyxDQUFDLENBQUMsQ0FBQztZQUN0RSxDQUFDO2lCQUFNLElBQUksSUFBSSxLQUFLLFNBQVMsRUFBRSxDQUFDO2dCQUM5QixXQUFXLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUM3QixDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUMsRUFDSCxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxHQUFHLFdBQVcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQ3JDLENBQUM7SUFDSixDQUFDO0lBRVMsbUJBQW1CLENBQUMsUUFBMEI7UUFDdEQsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNoRCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDcEMsQ0FBQztJQUVELGdCQUFnQixDQUFDLFVBQStCO1FBQzlDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ3BDLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBkYXlqcyBmcm9tICdkYXlqcyc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBSZXBsYXlTdWJqZWN0LCBsYXN0VmFsdWVGcm9tLCBvZiwgdGhyb3dFcnJvciB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgY2F0Y2hFcnJvciwgZGlzdGluY3RVbnRpbENoYW5nZWQsIG1hcCwgc2hhcmVSZXBsYXksIHN3aXRjaE1hcCwgdGFrZSwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgRmlyZXN0b3JlQWRhcHRlciB9IGZyb20gJy4uL2FkYXB0ZXJzL2Jhc2UnO1xuaW1wb3J0IHsgSUZpcmVzdG9yZUNvbnZlcnRlciB9IGZyb20gJy4uL2NvbnZlcnRlcic7XG5pbXBvcnQgeyBGaXJlc3RvcmVEQU8gfSBmcm9tICcuLi9kYW8nO1xuaW1wb3J0IHsgRmlyZXN0b3JlUGF0aEJ1aWxkZXIgfSBmcm9tICcuLi9wYXRoLWJ1aWxkZXInO1xuaW1wb3J0IHsgRG9jdW1lbnRTbmFwc2hvdCwgQ29sbGVjdGlvblJlZmVyZW5jZSwgIENvbGxlY3Rpb25Hcm91cCwgVG9GaXJlc3RvcmVEYXRhLCBDb2xsZWN0aW9uTGlrZSB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuXG5leHBvcnQgY2xhc3MgRmlyZXN0b3JlUXVlcnk8XG4gIEVudGl0eSBleHRlbmRzIHtpZDogc3RyaW5nfSA9IGFueSwgXG4gIEZpcmVzdG9yZURhdGEgPSBUb0ZpcmVzdG9yZURhdGE8RW50aXR5LCBkYXlqcy5EYXlqcz4sXG4+IGV4dGVuZHMgRmlyZXN0b3JlREFPPEVudGl0eSwgRmlyZXN0b3JlRGF0YT4ge1xuICBjb25zdHJ1Y3RvcihcbiAgICBhZGFwdGVyOiBGaXJlc3RvcmVBZGFwdGVyLFxuICAgIHByb3RlY3RlZCBjb252ZXJ0ZXI6IElGaXJlc3RvcmVDb252ZXJ0ZXI8RW50aXR5PixcbiAgICBwcm90ZWN0ZWQgcGF0aEJ1aWxkZXI6IEZpcmVzdG9yZVBhdGhCdWlsZGVyPEVudGl0eT5cbiAgKSB7XG4gICAgc3VwZXIoYWRhcHRlciwgcGF0aEJ1aWxkZXIpO1xuICAgIHRoaXMuc3dpdGNoQ29sbGVjdGlvblJlZigpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGNvbGxlY3Rpb24kID0gbmV3IFJlcGxheVN1YmplY3Q8Q29sbGVjdGlvbkxpa2U8RmlyZXN0b3JlRGF0YT4+KDEpO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgbGlzdCQgPSB0aGlzLmNvbGxlY3Rpb24kLnBpcGUoXG4gICAgc3dpdGNoTWFwKChjb2xsZWN0aW9uKSA9PiB0aGlzLmxpc3RDaGFuZ2VzQnlDb2xsZWN0aW9uUmVmKGNvbGxlY3Rpb24pLnBpcGUoXG4gICAgICBjYXRjaEVycm9yKGVycm9yID0+IHRocm93RXJyb3IoKCkgPT4gZXJyb3IpKSxcbiAgICApKSxcbiAgICBzaGFyZVJlcGxheSgxKSxcbiAgKVxuXG4gIC8qKiBAZGVwcmVjYXRlZCAqL1xuICBsaXN0Q2hhbmdlcyhwYXJhbU1hcD86IFBhcnRpYWw8RW50aXR5Piwgb3B0aW9uczoge3N3aXRjaD86IGJvb2xlYW59ID0ge3N3aXRjaDogdHJ1ZX0pOiBPYnNlcnZhYmxlPEVudGl0eVtdPiB7XG4gICAgcmV0dXJuIG9mKHBhcmFtTWFwKS5waXBlKFxuICAgICAgdGFwKChwYXJhbU1hcCkgPT4gb3B0aW9ucz8uc3dpdGNoICYmIHRoaXMuc3dpdGNoQ29sbGVjdGlvblJlZihwYXJhbU1hcCkpLFxuICAgICAgc3dpdGNoTWFwKCgpID0+IHRoaXMubGlzdCQpLFxuICAgICk7XG4gIH1cblxuICBsaXN0Q2hhbmdlc1YyKHBhcmFtTWFwPzogUGFydGlhbDxFbnRpdHk+KTogT2JzZXJ2YWJsZTxFbnRpdHlbXT4ge1xuICAgIHJldHVybiBvZihwYXJhbU1hcCkucGlwZShcbiAgICAgIHRhcCgocGFyYW1NYXApID0+IHBhcmFtTWFwICYmIHRoaXMuc3dpdGNoQ29sbGVjdGlvblJlZihwYXJhbU1hcCkpLFxuICAgICAgc3dpdGNoTWFwKCgpID0+IHRoaXMubGlzdCQpLFxuICAgICk7XG4gIH1cblxuICBsaXN0Q2hhbmdlc0FmdGVyKHVwZGF0ZWRBdDogZGF5anMuRGF5anMsIHtsaW1pdH06IHtsaW1pdD86IG51bWJlcn0gPSB7fSkge1xuICAgIGNvbnN0IGVudGl0aWVzTWFwID0gbmV3IE1hcDxzdHJpbmcsIEVudGl0eT4oKTtcbiAgICBjb25zdCBfdXBkYXRlZEF0ID0gZGF5anMuaXNEYXlqcyh1cGRhdGVkQXQpID8gdGhpcy5hZGFwdGVyLmNvbnZlcnREYXRlVG9UaW1lc3RhbXAodXBkYXRlZEF0KSA6IHVwZGF0ZWRBdFxuICAgIHJldHVybiB0aGlzLmFkYXB0ZXIucXVlcnkoXG4gICAgICB0aGlzLmNvbGxlY3Rpb24oKSxcbiAgICAgIC4uLltcbiAgICAgICAgdGhpcy5hZGFwdGVyLndoZXJlKCd1cGRhdGVkQXQnLCAnPicsIF91cGRhdGVkQXQpLFxuICAgICAgICB0aGlzLmFkYXB0ZXIub3JkZXJCeSgndXBkYXRlZEF0JywgJ2FzYycpLFxuICAgICAgICBsaW1pdCA/IHRoaXMuYWRhcHRlci5saW1pdChsaW1pdCkgOiB1bmRlZmluZWQsXG4gICAgICBdLmZpbHRlcihCb29sZWFuKSxcbiAgICApLnN0YXRlQ2hhbmdlcygpLnBpcGUoXG4gICAgICAvLyBidWZmZXJUaW1lKDFfMDAwKSxcbiAgICAgIC8vIG1hcCh6aXBwZWRBY3Rpb25zID0+IHppcHBlZEFjdGlvbnMuZmxhdCgpKSxcbiAgICAgIHRhcChhY3Rpb25zID0+IGFjdGlvbnMuZm9yRWFjaCgoe3R5cGUsIHBheWxvYWQ6IHtkb2N9fSkgPT4ge1xuICAgICAgICBpZiAobmV3IFNldChbJ2FkZGVkJywgJ21vZGlmaWVkJ10pLmhhcyh0eXBlKSkge1xuICAgICAgICAgIGVudGl0aWVzTWFwLnNldChkb2MuaWQsIHRoaXMuY29udmVydGVyLmZyb21GaXJlc3RvcmUoZG9jIGFzIERvY3VtZW50U25hcHNob3Q8YW55PikpO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdyZW1vdmVkJykge1xuICAgICAgICAgIGVudGl0aWVzTWFwLmRlbGV0ZShkb2MuaWQpO1xuICAgICAgICB9XG4gICAgICB9KSksXG4gICAgICBtYXAoKCkgPT4gWy4uLmVudGl0aWVzTWFwLnZhbHVlcygpXSksXG4gICAgKTtcbiAgfVxuXG4gIGNoYW5nZXMoe2lkfTogUGFydGlhbDxFbnRpdHk+KSB7XG4gICAgaWYgKCFpZCkgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIElkLiBpdCBtdXN0IGJlIFRydXRoeWApO1xuICAgIHJldHVybiB0aGlzLmxpc3QkLnBpcGUoXG4gICAgICBtYXAoZW50aXRpZXMgPT4gZW50aXRpZXMuZmluZChlbnRpdHkgPT4gZW50aXR5LmlkID09PSBpZCkpLFxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKHByZSwgY3VyKSA9PiBKU09OLnN0cmluZ2lmeShwcmUpID09PSBKU09OLnN0cmluZ2lmeShjdXIpKSxcbiAgICApO1xuICB9XG5cbiAgY2hhbmdlc1YyKHBhcmFtczogUGFydGlhbDxFbnRpdHk+KTogT2JzZXJ2YWJsZTxFbnRpdHk+IHtcbiAgICBjb25zdCBkb2NSZWYgPSB0aGlzLmRvYyhwYXJhbXMgYXMgYW55KTtcbiAgICByZXR1cm4gZG9jUmVmLnN0YXRlQ2hhbmdlcygpLnBpcGUoXG4gICAgICBtYXAoKGRvYykgPT4gdGhpcy5jb252ZXJ0ZXIuZnJvbUZpcmVzdG9yZSgoZG9jIGFzIGFueSkpKSxcbiAgICApO1xuICB9XG5cbiAgZ2V0KHtpZH06IFBhcnRpYWw8RW50aXR5PiAmIHtpZDogc3RyaW5nfSkge1xuICAgIHJldHVybiBsYXN0VmFsdWVGcm9tKHRoaXMubGlzdCQucGlwZShcbiAgICAgIHRha2UoMSksXG4gICAgICBtYXAoZW50aXRpZXMgPT4gZW50aXRpZXMuZmluZChlbnRpdHkgPT4gZW50aXR5LmlkID09PSBpZCkpLFxuICAgICkpO1xuICB9XG5cbiAgbGlzdChwYXJhbU1hcD86IFBhcnRpYWw8RW50aXR5Pikge1xuICAgIHRoaXMuc3dpdGNoQ29sbGVjdGlvblJlZihwYXJhbU1hcCk7XG4gICAgcmV0dXJuIGxhc3RWYWx1ZUZyb20odGhpcy5saXN0JC5waXBlKHRha2UoMSkpKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBsaXN0Q2hhbmdlc0J5Q29sbGVjdGlvblJlZihcbiAgICBjb2xsZWN0aW9uOiBDb2xsZWN0aW9uUmVmZXJlbmNlPEZpcmVzdG9yZURhdGE+IHwgQ29sbGVjdGlvbkdyb3VwPEZpcmVzdG9yZURhdGE+XG4gICk6IE9ic2VydmFibGU8RW50aXR5W10+IHtcbiAgICBjb25zdCBlbnRpdGllc01hcCA9IG5ldyBNYXA8c3RyaW5nLCBhbnk+KCk7XG4gICAgcmV0dXJuIGNvbGxlY3Rpb24uc3RhdGVDaGFuZ2VzKCkucGlwZShcbiAgICAgIHRhcChhY3Rpb25zID0+IGFjdGlvbnMuZm9yRWFjaCgoe3R5cGUsIHBheWxvYWQ6IHtkb2N9fSkgPT4ge1xuICAgICAgICBpZiAobmV3IFNldChbJ2FkZGVkJywgJ21vZGlmaWVkJ10pLmhhcyh0eXBlKSkge1xuICAgICAgICAgIGVudGl0aWVzTWFwLnNldChkb2MuaWQsIHRoaXMuY29udmVydGVyLmZyb21GaXJlc3RvcmUoKGRvYyBhcyBhbnkpKSk7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ3JlbW92ZWQnKSB7XG4gICAgICAgICAgZW50aXRpZXNNYXAuZGVsZXRlKGRvYy5pZCk7XG4gICAgICAgIH1cbiAgICAgIH0pKSxcbiAgICAgIG1hcCgoKSA9PiBbLi4uZW50aXRpZXNNYXAudmFsdWVzKCldKSxcbiAgICApO1xuICB9XG5cbiAgcHJvdGVjdGVkIHN3aXRjaENvbGxlY3Rpb25SZWYocGFyYW1NYXA/OiBQYXJ0aWFsPEVudGl0eT4pIHtcbiAgICBjb25zdCBjb2xsZWN0aW9uID0gdGhpcy5nZXRDb2xsZWN0aW9uKHBhcmFtTWFwKTtcbiAgICB0aGlzLnN3aXRjaENvbGxlY3Rpb24oY29sbGVjdGlvbik7XG4gIH1cblxuICBzd2l0Y2hDb2xsZWN0aW9uKGNvbGxlY3Rpb246IENvbGxlY3Rpb25MaWtlPGFueT4pIHtcbiAgICB0aGlzLmNvbGxlY3Rpb24kLm5leHQoY29sbGVjdGlvbik7XG4gIH1cbn1cbiJdfQ==","import { inject, Injectable } from '@angular/core';\nimport { FirestoreAdapter } from '../../adapters';\nimport { getConverter } from '../../converter';\nimport { FirestoreDAO } from '../../dao';\nimport { getCollection } from '../../decorators';\nimport { pathBuilderFactory } from '../../path-builder';\nimport { catchError, lastValueFrom, map, NEVER, of, switchMap, take, tap } from 'rxjs';\nimport * as i0 from \"@angular/core\";\nexport class BaseFirestoreQuery {\n count(paramMap) {\n return this.dao.getCollection(paramMap).count();\n }\n changes(params) {\n const docRef = this.dao.doc(params);\n return docRef.stateChanges().pipe(map((doc) => this.converter.fromFirestore(doc)));\n }\n get(paramMap) {\n return lastValueFrom(this.changes(paramMap).pipe(take(1)));\n }\n list(paramMap) {\n return lastValueFrom(this.listChanges(paramMap).pipe(take(1)));\n }\n listChanges(paramMap) {\n return of(paramMap).pipe(map((paramMap) => this.dao.getCollection(paramMap)), switchMap((collection) => {\n return this.getListChanges$ByCollectionLike(collection);\n }));\n }\n getChanges$ByDocument(doc) {\n return doc.stateChanges().pipe(map((doc) => this.converter.fromFirestore(doc)), catchError((error) => {\n console.error(error);\n return NEVER;\n }));\n }\n getListChanges$ByCollectionLike(collection) {\n const entitiesMap = new Map();\n return collection.stateChanges().pipe(tap(actions => actions.forEach(({ type, payload: { doc } }) => {\n if (new Set(['added', 'modified']).has(type)) {\n entitiesMap.set(doc.id, this.converter.fromFirestore(doc));\n }\n else if (type === 'removed') {\n entitiesMap.delete(doc.id);\n }\n })), map(() => [...entitiesMap.values()]), catchError((error) => {\n console.error(error);\n return NEVER;\n }));\n }\n}\nexport class FirestoreQuery extends BaseFirestoreQuery {\n constructor() {\n super(...arguments);\n this.adapter = inject(FirestoreAdapter);\n }\n get pathBuilder() {\n return pathBuilderFactory(this.collectionPath);\n }\n get dao() {\n return new FirestoreDAO(this.adapter, this.pathBuilder);\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.0.5\", ngImport: i0, type: FirestoreQuery, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.0.5\", ngImport: i0, type: FirestoreQuery }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.0.5\", ngImport: i0, type: FirestoreQuery, decorators: [{\n type: Injectable\n }] });\nexport function getFirestoreQuery(entity, adapter = inject(FirestoreAdapter)) {\n class FirestoreQuery extends BaseFirestoreQuery {\n constructor(converter, collectionPath, pathBuilder, adapter, dao) {\n super();\n this.converter = converter;\n this.collectionPath = collectionPath;\n this.pathBuilder = pathBuilder;\n this.adapter = adapter;\n this.dao = dao;\n }\n }\n return new FirestoreQuery(getConverter(entity, adapter), getCollection(entity), pathBuilderFactory(getCollection(entity)), adapter, new FirestoreDAO(adapter, pathBuilderFactory(getCollection(entity))));\n}\nexport function injectFirestoreQuery(entity) {\n return getFirestoreQuery(entity, inject(FirestoreAdapter));\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9AbngtZGRkL2ZpcmVzdG9yZS9zcmMvbGliL3F1ZXJ5L3YyL3F1ZXJ5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxZQUFZLEVBQXVCLE1BQU0saUJBQWlCLENBQUM7QUFDcEUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUN6QyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFakQsT0FBTyxFQUF1QyxrQkFBa0IsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQzdGLE9BQU8sRUFBRSxVQUFVLEVBQUUsYUFBYSxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQWMsRUFBRSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLE1BQU0sTUFBTSxDQUFDOztBQUtuRyxNQUFNLE9BQWdCLGtCQUFrQjtJQU90QyxLQUFLLENBQUMsUUFBeUI7UUFDN0IsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxRQUFlLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUN6RCxDQUFDO0lBRUQsT0FBTyxDQUFDLE1BQXNCO1FBQzVCLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLE1BQWEsQ0FBQyxDQUFDO1FBQzNDLE9BQU8sTUFBTSxDQUFDLFlBQVksRUFBRSxDQUFDLElBQUksQ0FDL0IsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBRSxHQUFXLENBQUMsQ0FBQyxDQUN6RCxDQUFDO0lBQ0osQ0FB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LFdBQVcsQ0FBQyxDQUFDO0lBQ2xFLENBQUM7OEdBWG1CLGNBQWM7a0hBQWQsY0FBYzs7MkZBQWQsY0FBYztrQkFEbkMsVUFBVTs7QUFnQlgsTUFBTSxVQUFVLGlCQUFpQixDQUMvQixNQUF5QixFQUN6QixVQUE0QixNQUFNLENBQUMsZ0JBQWdCLENBQUM7SUFHcEQsTUFBTSxjQUFlLFNBQVEsa0JBQTBCO1FBQ3JELFlBQ3FCLFNBQXNDLEVBQ3pDLGNBQXNCLEVBQy9CLFdBQThDLEVBQ2xDLE9BQXlCLEVBQ3pCLEdBQXlCO1lBQzFDLEtBQUssRUFBRSxDQUFDO1lBTFMsY0FBUyxHQUFULFNBQVMsQ0FBNkI7WUFDekMsbUJBQWMsR0FBZCxjQUFjLENBQVE7WUFDL0IsZ0JBQVcsR0FBWCxXQUFXLENBQW1DO1lBQ2xDLFlBQU8sR0FBUCxPQUFPLENBQWtCO1lBQ3pCLFFBQUcsR0FBSCxHQUFHLENBQXNCO1FBQ2pDLENBQUM7S0FDZjtJQUVELE9BQU8sSUFBSSxjQUFjLENBQ3ZCLFlBQVksQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLEVBQzdCLGFBQWEsQ0FBQyxNQUFNLENBQUMsRUFDckIsa0JBQWtCLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQ3pDLE9BQU8sRUFDUCxJQUFJLFlBQVksQ0FBUyxPQUFPLEVBQUUsa0JBQWtCLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FDN0UsQ0FBQztBQUNKLENBQUM7QUFFRCxNQUFNLFVBQVUsb0JBQW9CLENBQThCLE1BQXlCO0lBQ3pGLE9BQU8saUJBQWlCLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUM7QUFDN0QsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGluamVjdCwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRmlyZXN0b3JlQWRhcHRlciB9IGZyb20gJy4uLy4uL2FkYXB0ZXJzJztcbmltcG9ydCB7IGdldENvbnZlcnRlciwgSUZpcmVzdG9yZUNvbnZlcnRlciB9IGZyb20gJy4uLy4uL2NvbnZlcnRlcic7XG5pbXBvcnQgeyBGaXJlc3RvcmVEQU8gfSBmcm9tICcuLi8uLi9kYW8nO1xuaW1wb3J0IHsgZ2V0Q29sbGVjdGlvbiB9IGZyb20gJy4uLy4uL2RlY29yYXRvcnMnO1xuaW1wb3J0IHsgQ29sbGVjdGlvbkxpa2UsIERvY3VtZW50UmVmZXJlbmNlIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBFeHRyYWN0UGFyYW1zLCBGaXJlc3RvcmVQYXRoQnVpbGRlciwgcGF0aEJ1aWxkZXJGYWN0b3J5IH0gZnJvbSAnLi4vLi4vcGF0aC1idWlsZGVyJztcbmltcG9ydCB7IGNhdGNoRXJyb3IsIGxhc3RWYWx1ZUZyb20sIG1hcCwgTkVWRVIsIE9ic2VydmFibGUsIG9mLCBzd2l0Y2hNYXAsIHRha2UsIHRhcCB9IGZyb20gJ3J4anMnO1xuXG50eXBlIENvbFBhcmFtPFQgZXh0ZW5kcyBCYXNlRmlyZXN0b3JlUXVlcnk8YW55Pj4gPSBPbWl0PEV4dHJhY3RQYXJhbXM8VFsnY29sbGVjdGlvblBhdGgnXT4sICdpZCc+O1xudHlwZSBEb2NQYXJhbTxUIGV4dGVuZHMgQmFzZUZpcmVzdG9yZVF1ZXJ5PGFueT4+ID0gQ29sUGFyYW08VD4gJiB7aWQ6IHN0cmluZ307IFxuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQmFzZUZpcmVzdG9yZVF1ZXJ5PEVudGl0eSBleHRlbmRzIHtpZDogc3RyaW5nfSA9IGFueT4ge1xuICBwcm90ZWN0ZWQgYWJzdHJhY3QgcmVhZG9ubHkgYWRhcHRlcjogRmlyZXN0b3JlQWRhcHRlcjtcbiAgcHJvdGVjdGVkIGFic3RyYWN0IHJlYWRvbmx5IGNvbnZlcnRlcjogSUZpcmVzdG9yZUNvbnZlcnRlcjxFbnRpdHk+O1xuICBhYnN0cmFjdCByZWFkb25seSBjb2xsZWN0aW9uUGF0aDogc3RyaW5nO1xuICBwcm90ZWN0ZWQgYWJzdHJhY3QgcGF0aEJ1aWxkZXI6IEZpcmVzdG9yZVBhdGhCdWlsZGVyPEVudGl0eSwgdHlwZW9mIHRoaXMuY29sbGVjdGlvblBhdGg+O1xuICBwcm90ZWN0ZWQgYWJzdHJhY3QgZGFvOiBGaXJlc3RvcmVEQU88RW50aXR5PjtcblxuICBjb3VudChwYXJhbU1hcD86IENvbFBhcmFtPHRoaXM+KTogUHJvbWlzZTxudW1iZXI+IHtcbiAgICByZXR1cm4gdGhpcy5kYW8uZ2V0Q29sbGVjdGlvbihwYXJhbU1hcCBhcyBhbnkpLmNvdW50KCk7XG4gIH1cblxuICBjaGFuZ2VzKHBhcmFtczogRG9jUGFyYW08dGhpcz4pOiBPYnNlcnZhYmxlPEVudGl0eT4ge1xuICAgIGNvbnN0IGRvY1JlZiA9IHRoaXMuZGFvLmRvYyhwYXJhbXMgYXMgYW55KTtcbiAgICByZXR1cm4gZG9jUmVmLnN0YXRlQ2hhbmdlcygpLnBpcGUoXG4gICAgICBtYXAoKGRvYykgPT4gdGhpcy5jb252ZXJ0ZXIuZnJvbUZpcmVzdG9yZSgoZG9jIGFzIGFueSkpKSxcbiAgICApO1xuICB9XG5cbiAgZ2V0KHBhcmFtTWFwOiBEb2NQYXJhbTx0aGlzPik6IFByb21pc2U8RW50aXR5PiB7XG4gICAgcmV0dXJuIGxhc3RWYWx1ZUZyb20odGhpcy5jaGFuZ2VzKHBhcmFtTWFwKS5waXBlKHRha2UoMSkpKTtcbiAgfVxuXG4gIGxpc3QocGFyYW1NYXA/OiBDb2xQYXJhbTx0aGlzPik6IFByb21pc2U8RW50aXR5W10+IHtcbiAgICByZXR1cm4gbGFzdFZhbHVlRnJvbSh0aGlzLmxpc3RDaGFuZ2VzKHBhcmFtTWFwIGFzIGFueSkucGlwZSh0YWtlKDEpKSk7XG4gIH1cblxuICBsaXN0Q2hhbmdlcyhwYXJhbU1hcD86IENvbFBhcmFtPHRoaXM+KTogT2JzZXJ2YWJsZTxFbnRpdHlbXT4ge1xuICAgIHJldHVybiBvZihwYXJhbU1hcCkucGlwZShcbiAgICAgIG1hcCgocGFyYW1NYXApID0+IHRoaXMuZGFvLmdldENvbGxlY3Rpb24ocGFyYW1NYXAgYXMgYW55KSksXG4gICAgICBzd2l0Y2hNYXAoKGNvbGxlY3Rpb24pID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TGlzdENoYW5nZXMkQnlDb2xsZWN0aW9uTGlrZShjb2xsZWN0aW9uKVxuICAgICAgfSksXG4gICAgKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRDaGFuZ2VzJEJ5RG9jdW1lbnQoXG4gICAgZG9jOiBEb2N1bWVudFJlZmVyZW5jZVxuICApOiBPYnNlcnZhYmxlPEVudGl0eT4ge1xuICAgIHJldHVybiBkb2Muc3RhdGVDaGFuZ2VzKCkucGlwZShcbiAgICAgIG1hcCgoZG9jKSA9PiB0aGlzLmNvbnZlcnRlci5mcm9tRmlyZXN0b3JlKGRvYykpLFxuICAgICAgY2F0Y2hFcnJvcigoZXJyb3IpID0+IHtcbiAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XG4gICAgICAgIHJldHVybiBORVZFUjtcbiAgICAgIH0pLFxuICAgICk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0TGlzdENoYW5nZXMkQnlDb2xsZWN0aW9uTGlrZShcbiAgICBjb2xsZWN0aW9uOiBDb2xsZWN0aW9uTGlrZVxuICApOiBPYnNlcnZhYmxlPEVudGl0eVtdPiB7XG4gICAgY29uc3QgZW50aXRpZXNNYXAgPSBuZXcgTWFwPHN0cmluZywgYW55PigpO1xuICAgIHJldHVybiBjb2xsZWN0aW9uLnN0YXRlQ2hhbmdlcygpLnBpcGUoXG4gICAgICB0YXAoYWN0aW9ucyA9PiBhY3Rpb25zLmZvckVhY2goKHt0eXBlLCBwYXlsb2FkOiB7ZG9jfX0pID0+IHtcbiAgICAgICAgaWYgKG5ldyBTZXQoWydhZGRlZCcsICdtb2RpZmllZCddKS5oYXModHlwZSkpIHtcbiAgICAgICAgICBlbnRpdGllc01hcC5zZXQoZG9jLmlkLCB0aGlzLmNvbnZlcnRlci5mcm9tRmlyZXN0b3JlKChkb2MgYXMgYW55KSkpO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdyZW1vdmVkJykge1xuICAgICAgICAgIGVudGl0aWVzTWFwLmRlbGV0ZShkb2MuaWQpO1xuICAgICAgICB9XG4gICAgICB9KSksXG4gICAgICBtYXAoKCkgPT4gWy4uLmVudGl0aWVzTWFwLnZhbHVlcygpXSksXG4gICAgICBjYXRjaEVycm9yKChlcnJvcikgPT4ge1xuICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcbiAgICAgICAgcmV0dXJuIE5FVkVSO1xuICAgICAgfSksXG4gICAgKTtcbiAgfVxufVxuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgRmlyZXN0b3JlUXVlcnk8RW50aXR5IGV4dGVuZHMge2lkOiBzdHJpbmd9ID0gYW55PiBleHRlbmRzIEJhc2VGaXJlc3RvcmVRdWVyeTxFbnRpdHk+IHtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGFkYXB0ZXIgPSBpbmplY3QoRmlyZXN0b3JlQWRhcHRlcik7XG4gIGFic3RyYWN0IHJlYWRvbmx5IGNvbGxlY3Rpb25QYXRoOiBzdHJpbmc7XG4gIHByb3RlY3RlZCBhYnN0cmFjdCByZWFkb25seSBjb252ZXJ0ZXI6IElGaXJlc3RvcmVDb252ZXJ0ZXI8RW50aXR5PjtcblxuICBnZXQgcGF0aEJ1aWxkZXIoKTogRmlyZXN0b3JlUGF0aEJ1aWxkZXI8RW50aXR5LCB0eXBlb2YgdGhpcy5jb2xsZWN0aW9uUGF0aD4ge1xuICAgIHJldHVybiBwYXRoQnVpbGRlckZhY3RvcnkodGhpcy5jb2xsZWN0aW9uUGF0aCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0IGRhbygpIHtcbiAgICByZXR1cm4gbmV3IEZpcmVzdG9yZURBTzxFbnRpdHk+KHRoaXMuYWRhcHRlciwgdGhpcy5wYXRoQnVpbGRlcik7XG4gIH0gIFxufVxuXG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRGaXJlc3RvcmVRdWVyeTxFbnRpdHkgZXh0ZW5kcyB7aWQ6IHN0cmluZ30+KFxuICBlbnRpdHk6IHsgbmV3KCk6IEVudGl0eSB9LFxuICBhZGFwdGVyOiBGaXJlc3RvcmVBZGFwdGVyID0gaW5qZWN0KEZpcmVzdG9yZUFkYXB0ZXIpLFxuKTogQmFzZUZpcmVzdG9yZVF1ZXJ5PEVudGl0eT4ge1xuXG4gIGNsYXNzIEZpcmVzdG9yZVF1ZXJ5IGV4dGVuZHMgQmFzZUZpcmVzdG9yZVF1ZXJ5PEVudGl0eT4ge1xuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgcHJvdGVjdGVkIHJlYWRvbmx5IGNvbnZlcnRlcjogSUZpcmVzdG9yZUNvbnZlcnRlcjxFbnRpdHk+LFxuICAgICAgcHVibGljIHJlYWRvbmx5IGNvbGxlY3Rpb25QYXRoOiBzdHJpbmcsXG4gICAgICBwdWJsaWMgcGF0aEJ1aWxkZXI6IEZpcmVzdG9yZVBhdGhCdWlsZGVyPEVudGl0eSwgYW55PixcbiAgICAgIHByb3RlY3RlZCByZWFkb25seSBhZGFwdGVyOiBGaXJlc3RvcmVBZGFwdGVyLFxuICAgICAgcHJvdGVjdGVkIHJlYWRvbmx5IGRhbzogRmlyZXN0b3JlREFPPEVudGl0eT4sXG4gICAgKSB7IHN1cGVyKCk7IH1cbiAgfVxuXG4gIHJldHVybiBuZXcgRmlyZXN0b3JlUXVlcnkoXG4gICAgZ2V0Q29udmVydGVyKGVudGl0eSwgYWRhcHRlciksXG4gICAgZ2V0Q29sbGVjdGlvbihlbnRpdHkpLFxuICAgIHBhdGhCdWlsZGVyRmFjdG9yeShnZXRDb2xsZWN0aW9uKGVudGl0eSkpLFxuICAgIGFkYXB0ZXIsXG4gICAgbmV3IEZpcmVzdG9yZURBTzxFbnRpdHk+KGFkYXB0ZXIsIHBhdGhCdWlsZGVyRmFjdG9yeShnZXRDb2xsZWN0aW9uKGVudGl0eSkpKSxcbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGluamVjdEZpcmVzdG9yZVF1ZXJ5PEVudGl0eSBleHRlbmRzIHtpZDogc3RyaW5nfT4oZW50aXR5OiB7IG5ldygpOiBFbnRpdHkgfSk6IEJhc2VGaXJlc3RvcmVRdWVyeTxFbnRpdHk+IHtcbiAgcmV0dXJuIGdldEZpcmVzdG9yZVF1ZXJ5KGVudGl0eSwgaW5qZWN0KEZpcmVzdG9yZUFkYXB0ZXIpKTtcbn1cbiJdfQ==","import { Injectable } from \"@angular/core\";\nimport { FirestoreQuery } from \"./query\";\nimport Dexie, { liveQuery } from 'dexie';\nimport { catchError, combineLatest, distinctUntilChanged, map, NEVER, Observable, of, retry, switchMap, tap, throttleTime } from 'rxjs';\nimport dayjs from \"dayjs\";\nimport * as i0 from \"@angular/core\";\nfunction fromDexie(observable) {\n return new Observable(subscriber => observable.subscribe(subscriber));\n}\nclass DexieAdapter extends Dexie {\n constructor() {\n super('@nx-ddd/firestore/cached-query');\n this.version(3).stores({ entities: '++id' });\n }\n count$() {\n return fromDexie(liveQuery(() => this.entities.count()));\n }\n getLastUpdatedAt$(collectionPath) {\n return of(null).pipe(switchMap((() => fromDexie(liveQuery(() => this.entities.toArray())))), map((entities) => entities.filter(entity => entity.collectionPath === collectionPath)), map(entities => entities.sort((a, b) => {\n if (!a?.updatedAt)\n return -1;\n if (!b?.updatedAt)\n return 1;\n return dayjs(a?.updatedAt).diff(dayjs(b?.updatedAt));\n }).at(-1)), map(entity => entity?.updatedAt ? dayjs(entity?.updatedAt) : dayjs('1970-01-01')), distinctUntilChanged((pre, cur) => pre.isSame(cur)));\n }\n async bulkPut(collectionPath, entities) {\n return this.entities.bulkPut(entities.map(entity => {\n const key = `${entity.id}`;\n return {\n id: key,\n collectionPath,\n value: JSON.stringify(entity),\n updatedAt: entity.updatedAt.toISOString(),\n };\n }));\n }\n listChanges(collectionPath) {\n return of(null).pipe(switchMap(() => fromDexie(liveQuery(() => this.entities.toArray()))), map((entities) => entities.filter(entity => entity.collectionPath === collectionPath)), map((entities) => entities.map(entity => JSON.parse(entity.value))));\n }\n}\nclass FirestoreIndexedDbCached {\n constructor(collectionPath) {\n this.collectionPath = collectionPath;\n this.adapter = new DexieAdapter();\n }\n getLastUpdatedAt$() {\n return this.adapter.getLastUpdatedAt$(this.collectionPath);\n }\n async setMany(entities) {\n return this.adapter.bulkPut(this.collectionPath, entities);\n }\n listChanges() {\n return this.adapter.listChanges(this.collectionPath);\n }\n}\nexport class CachedFirestoreQuery extends FirestoreQuery {\n constructor() {\n super(...arguments);\n this.config = {\n throttleTime: 5_000,\n loadChunkSize: 1_000,\n };\n }\n get cached() {\n return this._cached ??= new FirestoreIndexedDbCached(this.collectionPath);\n }\n listChanges(paramMap) {\n const collection = this.dao.getCollection(paramMap);\n return this.cached.getLastUpdatedAt$().pipe(switchMap((lastUpdatedAt) => this._listChangesAfter(collection, lastUpdatedAt, {\n limit: this.config.loadChunkSize,\n }).pipe(retry(3), tap((updated) => this.cached.setMany(updated)), tap((updated) => console.log('updated:', updated)), catchError((error) => (console.error(error), NEVER)))), switchMap(() => this.cached.listChanges()), map((entities) => entities.map(entity => this.converter.fromObject(entity))), throttleTime(this.config.throttleTime));\n }\n _listChange(paramMap) {\n return of(paramMap).pipe(map((paramMap) => this.dao.getCollection(paramMap)), map((collection) => this.adapter.query(collection, this.adapter.limit(10))), switchMap((collection) => this.getListChanges$ByCollectionLike(collection)));\n }\n _listChangesAfter(collection, updatedAt, { limit } = {}) {\n const updatedAtTs = dayjs.isDayjs(updatedAt) ? this.adapter.convertDateToTimestamp(updatedAt) : updatedAt;\n const query = this.adapter.query(collection, ...[\n this.adapter.where('updatedAt', '>', updatedAtTs),\n this.adapter.orderBy('updatedAt', 'asc'),\n limit ? this.adapter.limit(limit) : undefined,\n ].filter(Boolean));\n return this.getListChanges$ByCollectionLike(query);\n }\n progressChanges() {\n return combineLatest({\n cloud: this.count(),\n local: this.listChanges().pipe(map(items => items.length)),\n });\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.0.5\", ngImport: i0, type: CachedFirestoreQuery, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.0.5\", ngImport: i0, type: CachedFirestoreQuery }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.0.5\", ngImport: i0, type: CachedFirestoreQuery, decorators: [{\n type: Injectable\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FjaGVkLXF1ZXJ5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvQG54LWRkZC9maXJlc3RvcmUvc3JjL2xpYi9xdWVyeS92Mi9jYWNoZWQtcXVlcnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBRXpDLE9BQU8sS0FBSyxFQUFFLEVBQUUsU0FBUyxFQUFpQyxNQUFNLE9BQU8sQ0FBQztBQUN4RSxPQUFPLEVBQUUsVUFBVSxFQUFFLGFBQWEsRUFBRSxvQkFBb0IsRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsWUFBWSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3hJLE9BQU8sS0FBSyxNQUFNLE9BQU8sQ0FBQzs7QUFNMUIsU0FBUyxTQUFTLENBQUksVUFBOEI7SUFDbEQsT0FBTyxJQUFJLFVBQVUsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztBQUN4RSxDQUFDO0FBU0QsTUFBTSxZQUE2RCxTQUFRLEtBQUs7SUFHOUU7UUFDRSxLQUFLLENBQUMsZ0NBQWdDLENBQUMsQ0FBQztRQUN4QyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO0lBQy9DLENBQUM7SUFFRCxNQUFNO1FBQ0osT0FBTyxTQUFTLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQzNELENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxjQUFzQjtR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QyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsc0JBQXNCLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQTtRQUN6RyxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FDOUIsVUFBVSxFQUNWLEdBQUc7WUFDRCxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxXQUFXLEVBQUUsR0FBRyxFQUFFLFdBQVcsQ0FBQztZQUNqRCxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsS0FBSyxDQUFDO1lBQ3hDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVM7U0FDOUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQ2xCLENBQUM7UUFDRixPQUFPLElBQUksQ0FBQywrQkFBK0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNyRCxDQUFDO0lBRUQsZUFBZTtRQUNiLE9BQU8sYUFBYSxDQUFDO1lBQ25CLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFO1lBQ25CLEtBQUssRUFBRSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztTQUMzRCxDQUFDLENBQUM7SUFDTCxDQUFDOzhHQXREbUIsb0JBQW9CO2tIQUFwQixvQkFBb0I7OzJGQUFwQixvQkFBb0I7a0JBRHpDLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IEZpcmVzdG9yZVF1ZXJ5IH0gZnJvbSBcIi4vcXVlcnlcIjtcbmltcG9ydCB7IEV4dHJhY3RQYXJhbXMgfSBmcm9tIFwiLi4vLi4vcGF0aC1idWlsZGVyXCI7XG5pbXBvcnQgRGV4aWUsIHsgbGl2ZVF1ZXJ5LCBPYnNlcnZhYmxlIGFzIERleGllT2JzZXJ2YWJsZSB9IGZyb20gJ2RleGllJztcbmltcG9ydCB7IGNhdGNoRXJyb3IsIGNvbWJpbmVMYXRlc3QsIGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBtYXAsIE5FVkVSLCBPYnNlcnZhYmxlLCBvZiwgcmV0cnksIHN3aXRjaE1hcCwgdGFwLCB0aHJvdHRsZVRpbWUgfSBmcm9tICdyeGpzJztcbmltcG9ydCBkYXlqcyBmcm9tIFwiZGF5anNcIjtcbmltcG9ydCB7IENvbGxlY3Rpb25MaWtlIH0gZnJvbSBcIi4uLy4uL2ludGVyZmFjZXNcIjtcblxudHlwZSBDb2xQYXJhbTxUIGV4dGVuZHMge3JlYWRvbmx5IGNvbGxlY3Rpb25QYXRoOiBzdHJpbmd9PiA9IE9taXQ8RXh0cmFjdFBhcmFtczxUWydjb2xsZWN0aW9uUGF0aCddPiwgJ2lkJz47XG50eXBlIERvY1BhcmFtPFQgZXh0ZW5kcyB7cmVhZG9ubHkgY29sbGVjdGlvblBhdGg6IHN0cmluZ30+ID0gQ29sUGFyYW08VD4gJiB7aWQ6IHN0cmluZ307IFxuXG5mdW5jdGlvbiBmcm9tRGV4aWU8VD4ob2JzZXJ2YWJsZTogRGV4aWVPYnNlcnZhYmxlPFQ+KTogT2JzZXJ2YWJsZTxUPiB7XG4gIHJldHVybiBuZXcgT2JzZXJ2YWJsZShzdWJzY3JpYmVyID0+IG9ic2VydmFibGUuc3Vic2NyaWJlKHN1YnNjcmliZXIpKTtcbn1cblxuaW50ZXJmYWNlIEVudGl0eURhdGEge1xuICBpZDogc3RyaW5nO1xuICB2YWx1ZTogc3RyaW5nO1xuICBjb2xsZWN0aW9uUGF0aDogc3RyaW5nO1xuICB1cGRhdGVkQXQ6IHN0cmluZztcbn1cblxuY2xhc3MgRGV4aWVBZGFwdGVyPEUgZXh0ZW5kcyB7aWQ6IHN0cmluZywgdXBkYXRlZEF0OiBkYXlqcy5EYXlqc30+IGV4dGVuZHMgRGV4aWUge1xuICBlbnRpdGllcyE6IERleGllLlRhYmxlPEVudGl0eURhdGEsIHN0cmluZz47XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoJ0BueC1kZGQvZmlyZXN0b3JlL2NhY2hlZC1xdWVyeScpO1xuICAgIHRoaXMudmVyc2lvbigzKS5zdG9yZXMoeyBlbnRpdGllczogJysraWQnIH0pO1xuICB9XG5cbiAgY291bnQkKCkge1xuICAgIHJldHVybiBmcm9tRGV4aWUobGl2ZVF1ZXJ5KCgpID0+IHRoaXMuZW50aXRpZXMuY291bnQoKSkpO1xuICB9XG5cbiAgZ2V0TGFzdFVwZGF0ZWRBdCQoY29sbGVjdGlvblBhdGg6IHN0cmluZykge1xuICAgIHJldHVybiBvZihudWxsKS5waXBlKFxuICAgICAgc3dpdGNoTWFwKCgoKSA9PiBmcm9tRGV4aWUobGl2ZVF1ZXJ5KCgpID0+IHRoaXMuZW50aXRpZXMudG9BcnJheSgpKSkpKSxcbiAgICAgIG1hcCgoZW50aXRpZXMpID0+IGVudGl0aWVzLmZpbHRlcihlbnRpdHkgPT4gZW50aXR5LmNvbGxlY3Rpb25QYXRoID09PSBjb2xsZWN0aW9uUGF0aCkpLFxuICAgICAgbWFwKGVudGl0aWVzID0+IGVudGl0aWVzLnNvcnQoKGEsIGIpID0+IHtcbiAgICAgICAgaWYgKCFhPy51cGRhdGVkQXQpIHJldHVybiAtMTtcbiAgICAgICAgaWYgKCFiPy51cGRhdGVkQXQpIHJldHVybiAxO1xuICAgICAgICByZXR1cm4gZGF5anMoYT8udXBkYXRlZEF0KS5kaWZmKGRheWpzKGI/LnVwZGF0ZWRBdCkpO1xuICAgICAgfSkuYXQoLTEpKSxcbiAgICAgIG1hcChlbnRpdHkgPT4gZW50aXR5Py51cGRhdGVkQXQgPyBkYXlqcyhlbnRpdHk/LnVwZGF0ZWRBdCkgOiBkYXlqcygnMTk3MC0wMS0wMScpKSxcbiAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKChwcmUsIGN1cikgPT4gcHJlLmlzU2FtZShjdXIpKSxcbiAgICApO1xuICB9XG5cbiAgYXN5bmMgYnVsa1B1dChjb2xsZWN0aW9uUGF0aDogc3RyaW5nLCBlbnRpdGllczogRVtdKSB7XG4gICAgcmV0dXJuIHRoaXMuZW50aXRpZXMuYnVsa1B1dChlbnRpdGllcy5tYXAoZW50aXR5ID0+IHtcbiAgICAgIGNvbnN0IGtleSA9IGAke2VudGl0eS5pZH1gO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaWQ6IGtleSxcbiAgICAgICAgY29sbGVjdGlvblBhdGgsXG4gICAgICAgIHZhbHVlOiBKU09OLnN0cmluZ2lmeShlbnRpdHkpLFxuICAgICAgICB1cGRhdGVkQXQ6IGVudGl0eS51cGRhdGVkQXQudG9JU09TdHJpbmcoKSxcbiAgICAgIH07XG4gICAgfSkpO1xuICB9XG5cbiAgbGlzdENoYW5nZXMoY29sbGVjdGlvblBhdGg6IHN0cmluZyk6IE9ic2VydmFibGU8RVtdPiB7XG4gICAgcmV0dXJuIG9mKG51bGwpLnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoKCkgPT4gZnJvbURleGllKGxpdmVRdWVyeSgoKSA9PiB0aGlzLmVudGl0aWVzLnRvQXJyYXkoKSkpKSxcbiAgICAgIG1hcCgoZW50aXRpZXMpID0+IGVudGl0aWVzLmZpbHRlcihlbnRpdHkgPT4gZW50aXR5LmNvbGxlY3Rpb25QYXRoID09PSBjb2xsZWN0aW9uUGF0aCkpLFxuICAgICAgbWFwKChlbnRpdGllcykgPT4gZW50aXRpZXMubWFwKGVudGl0eSA9PiBKU09OLnBhcnNlKGVudGl0eS52YWx1ZSkgYXMgRSkpLFxuICAgICk7XG4gIH1cbn1cblxuY2xhc3MgRmlyZXN0b3JlSW5kZXhlZERiQ2FjaGVkPEUgZXh0ZW5kcyB7aWQ6IHN0cmluZywgdXBkYXRlZEF0OiBkYXlqcy5EYXlqc30+IHtcbiAgY29uc3RydWN0b3IocHJvdGVjdGVkIGNvbGxlY3Rpb25QYXRoOiBzdHJpbmcpIHsgfVxuXG4gIHJlYWRvbmx5IGFkYXB0ZXIgPSBuZXcgRGV4aWVBZGFwdGVyPEU+KCk7XG5cbiAgZ2V0TGFzdFVwZGF0ZWRBdCQoKSB7XG4gICAgcmV0dXJuIHRoaXMuYWRhcHRlci5nZXRMYXN0VXBkYXRlZEF0JCh0aGlzLmNvbGxlY3Rpb25QYXRoKTtcbiAgfVxuXG4gIGFzeW5jIHNldE1hbnkoZW50aXRpZXM6IEVbXSkge1xuICAgIHJldHVybiB0aGlzLmFkYXB0ZXIuYnVsa1B1dCh0aGlzLmNvbGxlY3Rpb25QYXRoLCBlbnRpdGllcyk7XG4gIH1cblxuICBsaXN0Q2hhbmdlcygpIHtcbiAgICByZXR1cm4gdGhpcy5hZGFwdGVyLmxpc3RDaGFuZ2VzKHRoaXMuY29sbGVjdGlvblBhdGgpO1xuICB9XG59XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBDYWNoZWRGaXJlc3RvcmVRdWVyeTxFIGV4dGVuZHMge2lkOiBzdHJpbmcsIHVwZGF0ZWRBdDogZGF5anMuRGF5anN9ID0gYW55PiBleHRlbmRzIEZpcmVzdG9yZVF1ZXJ5PEU+IHtcbiAgcHJvdGVjdGVkIF9jYWNoZWQ6IEZpcmVzdG9yZUluZGV4ZWREYkNhY2hlZDxFPjtcbiAgcHJvdGVjdGVkIGdldCBjYWNoZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2NhY2hlZCA/Pz0gbmV3IEZpcmVzdG9yZUluZGV4ZWREYkNhY2hlZDxFPih0aGlzLmNvbGxlY3Rpb25QYXRoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCByZWFkb25seSBjb25maWcgPSB7XG4gICAgdGhyb3R0bGVUaW1lOiA1XzAwMCxcbiAgICBsb2FkQ2h1bmtTaXplOiAxXzAwMCxcbiAgfTtcblxuICBvdmVycmlkZSBsaXN0Q2hhbmdlcyhwYXJhbU1hcD86IENvbFBhcmFtPHRoaXM+KTogT2JzZXJ2YWJsZTxFW10+IHtcbiAgICBjb25zdCBjb2xsZWN0aW9uID0gdGhpcy5kYW8uZ2V0Q29sbGVjdGlvbihwYXJhbU1hcCBhcyBhbnkpO1xuICAgIHJldHVybiB0aGlzLmNhY2hlZC5nZXRMYXN0VXBkYXRlZEF0JCgpLnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoKGxhc3RVcGRhdGVkQXQpID0+IHRoaXMuX2xpc3RDaGFuZ2VzQWZ0ZXIoY29sbGVjdGlvbiwgbGFzdFVwZGF0ZWRBdCwge1xuICAgICAgICBsaW1pdDogdGhpcy5jb25maWcubG9hZENodW5rU2l6ZSxcbiAgICAgIH0pLnBpcGUoXG4gICAgICAgIHJldHJ5KDMpLFxuICAgICAgICB0YXAoKHVwZGF0ZWQpID0+IHRoaXMuY2FjaGVkLnNldE1hbnkodXBkYXRlZCkpLFxuICAgICAgICB0YXAoKHVwZGF0ZWQpID0+IGNvbnNvbGUubG9nKCd1cGRhdGVkOicsIHVwZGF0ZWQpKSxcbiAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3IpID0+IChjb25zb2xlLmVycm9yKGVycm9yKSwgTkVWRVIpKSxcbiAgICAgICkpLFxuICAgICAgc3dpdGNoTWFwKCgpID0+IHRoaXMuY2FjaGVkLmxpc3RDaGFuZ2VzKCkpLFxuICAgICAgbWFwKChlbnRpdGllcykgPT4gZW50aXRpZXMubWFwKGVudGl0eSA9PiB0aGlzLmNvbnZlcnRlci5mcm9tT2JqZWN0KGVudGl0eSkpKSxcbiAgICAgIHRocm90dGxlVGltZSh0aGlzLmNvbmZpZy50aHJvdHRsZVRpbWUpLFxuICAgICk7XG4gIH1cblxuICBwcm90ZWN0ZWQgX2xpc3RDaGFuZ2UocGFyYW1NYXA/OiBDb2xQYXJhbTx0aGlzPik6IE9ic2VydmFibGU8RVtdPiB7XG4gICAgcmV0dXJuIG9mKHBhcmFtTWFwKS5waXBlKFxuICAgICAgbWFwKChwYXJhbU1hcCkgPT4gdGhpcy5kYW8uZ2V0Q29sbGVjdGlvbihwYXJhbU1hcCBhcyBhbnkpKSxcbiAgICAgIG1hcCgoY29sbGVjdGlvbikgPT4gdGhpcy5hZGFwdGVyLnF1ZXJ5KGNvbGxlY3Rpb24sIHRoaXMuYWRhcHRlci5saW1pdCgxMCkpKSxcbiAgICAgIHN3aXRjaE1hcCgoY29sbGVjdGlvbikgPT4gdGhpcy5nZXRMaXN0Q2hhbmdlcyRCeUNvbGxlY3Rpb25MaWtlKGNvbGxlY3Rpb24pKSxcbiAgICApO1xuICB9XG5cbiAgcHJvdGVjdGVkIF9saXN0Q2hhbmdlc0FmdGVyKGNvbGxlY3Rpb246IENvbGxlY3Rpb25MaWtlLCB1cGRhdGVkQXQ6IGRheWpzLkRheWpzLCB7bGltaXR9OiB7bGltaXQ/OiBudW1iZXJ9ID0ge30pIHtcbiAgICBjb25zdCB1cGRhdGVkQXRUcyA9IGRheWpzLmlzRGF5anModXBkYXRlZEF0KSA/IHRoaXMuYWRhcHRlci5jb252ZXJ0RGF0ZVRvVGltZXN0YW1wKHVwZGF0ZWRBdCkgOiB1cGRhdGVkQXRcbiAgICBjb25zdCBxdWVyeSA9IHRoaXMuYWRhcHRlci5xdWVyeShcbiAgICAgIGNvbGxlY3Rpb24sXG4gICAgICAuLi5bXG4gICAgICAgIHRoaXMuYWRhcHRlci53aGVyZSgndXBkYXRlZEF0JywgJz4nLCB1cGRhdGVkQXRUcyksXG4gICAgICAgIHRoaXMuYWRhcHRlci5vcmRlckJ5KCd1cGRhdGVkQXQnLCAnYXNjJyksXG4gICAgICAgIGxpbWl0ID8gdGhpcy5hZGFwdGVyLmxpbWl0KGxpbWl0KSA6IHVuZGVmaW5lZCxcbiAgICAgIF0uZmlsdGVyKEJvb2xlYW4pLFxuICAgICk7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TGlzdENoYW5nZXMkQnlDb2xsZWN0aW9uTGlrZShxdWVyeSk7XG4gIH1cblxuICBwcm9ncmVzc0NoYW5nZXMoKSB7XG4gICAgcmV0dXJuIGNvbWJpbmVMYXRlc3Qoe1xuICAgICAgY2xvdWQ6IHRoaXMuY291bnQoKSxcbiAgICAgIGxvY2FsOiB0aGlzLmxpc3RDaGFuZ2VzKCkucGlwZShtYXAoaXRlbXMgPT4gaXRlbXMubGVuZ3RoKSksXG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==","import { inject, Injectable } from '@angular/core';\nimport { Repository } from '@nx-ddd/common/domain';\nimport { toObject } from '@nx-ddd/common';\nimport { generateId } from '@nx-ddd/common';\nimport { FirestoreAdapter } from '../adapters/base';\nimport { getConverter } from '../converter';\nimport { pathBuilderFactory } from '../path-builder';\nimport { getCollection } from '../decorators/decorators';\nimport * as i0 from \"@angular/core\";\nconst toPromise = callback => new Promise((resolve, reject) => {\n try {\n resolve(callback());\n }\n catch (error) {\n reject(error);\n }\n});\nfunction doesExist(doc) {\n if (typeof doc.exists === 'function') {\n return doc.exists();\n }\n return doc.exists;\n}\nexport class BaseFirestoreRepository extends Repository {\n constructor() {\n super(...arguments);\n this.genId = () => generateId();\n }\n async list(paramMap, query = q => q) {\n const collection = paramMap ? this.collection(paramMap) : this.collectionGroup();\n return this._list(query(collection));\n }\n listChanges() {\n throw new Error('Method not implemented.');\n }\n async count(paramMap) {\n return this.collection(paramMap).count();\n }\n async get(paramMap) {\n return this._get(this.doc(paramMap));\n }\n async save(entity) {\n const docRef = this.doc({ ...entity, id: entity?.id || this.genId() });\n return this._save(docRef, entity);\n }\n async saveMany(entities) {\n return this.bulkWrite(entities);\n }\n async create(entity) {\n const obj = toObject(entity);\n const id = obj?.id || this.genId();\n return toPromise(() => this.doc({ ...obj, id })).then(doc => this._create(doc, entity));\n }\n async createMany(entities) {\n return Promise.all(entities.map(entity => this.create(entity)));\n }\n async update(entity) {\n return this.doc(entity).update(this.adapter.flattenForUpdate({\n ...this.converter.toFirestore(entity),\n ...this.buildServerTimestampObject(['updatedAt']),\n })).then(() => { });\n }\n async updateMany(data) {\n return this.bulkUpdate(data);\n }\n delete(paramMap) {\n return this.doc(paramMap).delete();\n }\n async deleteMany(params) {\n return params.reduce((batch, param) => {\n const doc = this.doc(param).__ref;\n return batch.delete(doc);\n }, this.adapter.batch()).commit().then(() => params.length);\n }\n async deleteAll() {\n throw new Error('Method not implemented.');\n }\n async bulkWrite(entities, timestamps = []) {\n return entities.reduce((batch, entity) => {\n const doc = this.doc(entity).__ref;\n return batch.set(doc, {\n ...this.converter.toFirestore(entity),\n ...this.buildServerTimestampObject(timestamps),\n });\n }, this.adapter.batch()).commit();\n }\n async bulkCreate(entities) {\n // TODO(nontangent): add maximum 500 record validation\n return entities.reduce((batch, entity) => {\n const doc = this.doc(entity).__ref;\n return batch.create(doc, {\n ...this.converter.toFirestore(entity),\n ...this.buildServerTimestampObject(['createdAt', 'updatedAt']),\n });\n }, this.adapter.batch()).commit();\n }\n async bulkUpdate(entities) {\n // TODO(nontangent): add maximum 500 record validation\n return entities.reduce((batch, entity) => {\n const doc = this.doc(entity).__ref;\n return batch.update(doc, {\n ...this.converter.toFirestore(entity),\n ...this.buildServerTimestampObject(['updatedAt']),\n });\n }, this.adapter.batch()).commit();\n }\n async bulkDelete(paramMaps) {\n // MEMO(@nontangent): 500件以上の削除は未対応\n return paramMaps.reduce((batch, paramMap) => {\n const doc = this.doc(paramMap).__ref;\n return batch.delete(doc);\n }, this.adapter.batch()).commit();\n }\n collection(paramMap) {\n const path = this.pathBuilder.collection(paramMap);\n return this.adapter.collection(path);\n }\n collectionGroup() {\n const path = this.pathBuilder.collectionGroup();\n return this.adapter.collectionGroup(path);\n }\n doc(paramMap) {\n const path = this.pathBuilder.doc(paramMap);\n return this.adapter.doc(path);\n }\n _list(collection) {\n return collection.get().then(({ docs }) => docs.map(doc => {\n if (!doesExist(doc))\n return null;\n return this.converter.fromFirestore(doc);\n }));\n }\n _get(doc) {\n return doc.get().then((doc => {\n if (!doc.data())\n return null;\n return this.converter.fromFirestore(doc);\n }));\n }\n async _save(doc, entity) {\n const exists = await doc.exists();\n if (exists) {\n return this._set(doc, entity).then(doc => [this.converter.fromFirestore(doc), false]);\n }\n else {\n return this._create(doc, entity).then(entity => [entity, true]);\n }\n }\n async _create(doc, entity) {\n const exists = await doc.exists().catch((error) => {\n // MEMO(@nontangent): bunで実行するときだけこのエラーがでるかもしれない。\n if (`${error}`.startsWith('Error: Did not receive document for'))\n return false;\n throw error;\n });\n if (exists)\n throw new Error('Document already exists');\n return doc.set({\n ...this.converter.toFirestore(entity),\n ...this.buildServerTimestampObject(['createdAt', 'updatedAt']),\n }).then(() => doc.get()).then(doc => this.converter.fromFirestore(doc));\n }\n _set(doc, entity, isUpdate = true) {\n const data = this.converter.toFirestore(entity);\n return doc.set({\n ...this.converter.toFirestore(entity),\n ...this.buildServerTimestampObject(isUpdate ? ['updatedAt'] : []),\n }, { merge: isUpdate }).then(() => doc.get());\n }\n buildServerTimestampObject(keys = ['createdAt', 'updatedAt']) {\n return keys.reduce((m, k) => ({ ...m, [k]: this.adapter.FieldValue.serverTimestamp() }), {});\n }\n}\nexport class FirestoreRepository extends BaseFirestoreRepository {\n constructor() {\n super(...arguments);\n this.adapter = inject(FirestoreAdapter);\n }\n get pathBuilder() {\n return pathBuilderFactory(this.collectionPath);\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.0.5\", ngImport: i0, type: FirestoreRepository, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.0.5\", ngImport: i0, type: FirestoreRepository }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.0.5\", ngImport: i0, type: FirestoreRepository, decorators: [{\n type: Injectable\n }] });\nexport function getFirestoreRepository(entity, adapter = inject(FirestoreAdapter)) {\n class FirestoreRepository extends BaseFirestoreRepository {\n constructor(converter, collectionPath, pathBuilder, adapter) {\n super();\n this.converter = converter;\n this.collectionPath = collectionPath;\n this.pathBuilder = pathBuilder;\n this.adapter = adapter;\n }\n }\n return new FirestoreRepository(getConverter(entity, adapter), getCollection(entity), pathBuilderFactory(getCollection(entity)), adapter);\n}\nexport function injectFirestoreRepository(entity) {\n return getFirestoreRepository(entity, inject(FirestoreAdapter));\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwb3NpdG9yeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL0BueC1kZGQvZmlyZXN0b3JlL3NyYy9saWIvcmVwb3NpdG9yeS9yZXBvc2l0b3J5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNuRCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDMUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzVDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxZQUFZLEVBQXVCLE1BQU0sY0FBYyxDQUFDO0FBQ2pFLE9BQU8sRUFBdUMsa0JBQWtCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUcxRixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7O0FBRXpELE1BQU0sU0FBUyxHQUFHLFFBQVEsQ0FBQyxFQUFFLENBQUMsSUFBSSxPQUFPLENBQThCLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFO0lBQ3pGLElBQUksQ0FBQztRQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO0lBQUMsQ0FBQztJQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7UUFBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7SUFBQyxDQUFDO0FBQy9ELENBQUMsQ0FBQyxDQUFDO0FBRUgsU0FBUyxTQUFTLENBQUMsR0FBcUI7SUFDdEMsSUFBSSxPQUFPLEdBQUcsQ0FBQyxNQUFNLEtBQUssVUFBVSxFQUFFLENBQUM7UUFDckMsT0FBTyxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUM7SUFDdEIsQ0FBQztJQUNELE9BQU8sR0FBRyxDQUFD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QU8sQ0FDUixDQUFDO0FBQ0osQ0FBQztBQUVELE1BQU0sVUFBVSx5QkFBeUIsQ0FBbUQsTUFBeUI7SUFDbkgsT0FBTyxzQkFBc0IsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQztBQUNsRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaW5qZWN0LCBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBSZXBvc2l0b3J5IH0gZnJvbSAnQG54LWRkZC9jb21tb24vZG9tYWluJztcbmltcG9ydCB7IHRvT2JqZWN0IH0gZnJvbSAnQG54LWRkZC9jb21tb24nO1xuaW1wb3J0IHsgZ2VuZXJhdGVJZCB9IGZyb20gJ0BueC1kZGQvY29tbW9uJztcbmltcG9ydCB7IEZpcmVzdG9yZUFkYXB0ZXIgfSBmcm9tICcuLi9hZGFwdGVycy9iYXNlJztcbmltcG9ydCB7IGdldENvbnZlcnRlciwgSUZpcmVzdG9yZUNvbnZlcnRlciB9IGZyb20gJy4uL2NvbnZlcnRlcic7XG5pbXBvcnQgeyBFeHRyYWN0UGFyYW1zLCBGaXJlc3RvcmVQYXRoQnVpbGRlciwgcGF0aEJ1aWxkZXJGYWN0b3J5IH0gZnJvbSAnLi4vcGF0aC1idWlsZGVyJztcbmltcG9ydCB7IENvbGxlY3Rpb25SZWZlcmVuY2UsIENvbGxlY3Rpb25Hcm91cCwgRG9jdW1lbnRSZWZlcmVuY2UsIERvY3VtZW50U25hcHNob3QgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGdldENvbGxlY3Rpb24gfSBmcm9tICcuLi9kZWNvcmF0b3JzL2RlY29yYXRvcnMnO1xuXG5jb25zdCB0b1Byb21pc2UgPSBjYWxsYmFjayA9PiBuZXcgUHJvbWlzZTxSZXR1cm5UeXBlPHR5cGVvZiBjYWxsYmFjaz4+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgdHJ5IHsgcmVzb2x2ZShjYWxsYmFjaygpKTsgfSBjYXRjaCAoZXJyb3IpIHsgcmVqZWN0KGVycm9yKTsgfVxufSk7XG5cbmZ1bmN0aW9uIGRvZXNFeGlzdChkb2M6IERvY3VtZW50U25hcHNob3QpOiBib29sZWFuIHtcbiAgaWYgKHR5cGVvZiBkb2MuZXhpc3RzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIGRvYy5leGlzdHMoKTtcbiAgfVxuICByZXR1cm4gZG9jLmV4aXN0cztcbn1cblxuLy8gRmlyZXN0b3JlUmVwb3NpdG9yeeOBi+OCiUVucmlyeeOCkuWPluW+l+OBmeOCi2luZmVyXG5leHBvcnQgdHlwZSBFeHRyYWN0RW50aXR5PFQgZXh0ZW5kcyBCYXNlRmlyZXN0b3JlUmVwb3NpdG9yeTxhbnksIGFueT4+ID0gVCBleHRlbmRzIEJhc2VGaXJlc3RvcmVSZXBvc2l0b3J5PGluZmVyIEVudGl0eSwgYW55PiA/IEVudGl0eSA6IG5ldmVyO1xudHlwZSBDb2xQYXJhbTxUIGV4dGVuZHMgQmFzZUZpcmVzdG9yZVJlcG9zaXRvcnk8YW55LCBhbnk+PiA9IE9taXQ8RXh0cmFjdFBhcmFtczxUWydjb2xsZWN0aW9uUGF0aCddPiwgJ2lkJz47XG50eXBlIERvY1BhcmFtPFQgZXh0ZW5kcyBCYXNlRmlyZXN0b3JlUmVwb3NpdG9yeTxhbnksIGFueT4sIFRFeHRyYSA9IHt9PiA9IENvbFBhcmFtPFQ+ICYgeyBpZDogc3RyaW5nIH0gJiBURXh0cmE7IFxuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQmFzZUZpcmVzdG9yZVJlcG9zaXRvcnk8RW50aXR5IGV4dGVuZHMgeyBpZDogc3RyaW5nIH0sIFRFeHRyYVBhcmFtcyA9IHt9PiBleHRlbmRzIFJlcG9zaXRvcnk8RW50aXR5PiB7XG4gIGFic3RyYWN0IHJlYWRvbmx5IGNvbGxlY3Rpb25QYXRoOiBzdHJpbmc7XG4gIHByb3RlY3RlZCBhYnN0cmFjdCByZWFkb25seSBhZGFwdGVyOiBGaXJlc3RvcmVBZGFwdGVyO1xuICBwcm90ZWN0ZWQgYWJzdHJhY3QgY29udmVydGVyOiBJRmlyZXN0b3JlQ29udmVydGVyPEVudGl0eT47XG4gIGFic3RyYWN0IHJlYWRvbmx5IHBhdGhCdWlsZGVyOiBGaXJlc3RvcmVQYXRoQnVpbGRlcjxFbnRpdHksIHR5cGVvZiB0aGlzLmNvbGxlY3Rpb25QYXRoPjtcblxuICBhc3luYyBsaXN0KHBhcmFtTWFwPzogQ29sUGFyYW08dGhpcz4sIHF1ZXJ5OiBhbnkgPSBxID0+IHEpOiBQcm9taXNlPEVudGl0eVtdPiB7XG4gICAgY29uc3QgY29sbGVjdGlvbiA9IHBhcmFtTWFwID8gdGhpcy5jb2xsZWN0aW9uKHBhcmFtTWFwKSA6IHRoaXMuY29sbGVjdGlvbkdyb3VwKCk7XG4gICAgcmV0dXJuIHRoaXMuX2xpc3QocXVlcnkoY29sbGVjdGlvbikpO1xuICB9XG5cbiAgbGlzdENoYW5nZXMoKTogT2JzZXJ2YWJsZTxFbnRpdHlbXT4ge1xuICAgIHRocm93IG5ldyBFcnJvcignTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC4nKTtcbiAgfVxuXG4gIGFzeW5jIGNvdW50KHBhcmFtTWFwPzogQ29sUGFyYW08dGhpcz4pOiBQcm9taXNlPG51bWJlcj4ge1xuICAgIHJldHVybiB0aGlzLmNvbGxlY3Rpb24ocGFyYW1NYXApLmNvdW50KCk7XG4gIH1cblxuICBhc3luYyBnZXQocGFyYW1NYXA/OiBEb2NQYXJhbTx0aGlzLCBURXh0cmFQYXJhbXM+KSB7XG4gICAgcmV0dXJuIHRoaXMuX2dldCh0aGlzLmRvYyhwYXJhbU1hcCBhcyBhbnkpKTtcbiAgfVxuXG4gIGFzeW5jIHNhdmUoZW50aXR5OiBEb2NQYXJhbTx0aGlzLCBURXh0cmFQYXJhbXM+ICYgRW50aXR5KTogUHJvbWlzZTxbRW50aXR5LCBib29sZWFuXT4ge1xuICAgIGNvbnN0IGRvY1JlZiA9IHRoaXMuZG9jKHsuLi5lbnRpdHksIGlkOiBlbnRpdHk/LmlkIHx8IHRoaXMuZ2VuSWQoKX0pO1xuICAgIHJldHVybiB0aGlzLl9zYXZlKGRvY1JlZiwgZW50aXR5KTtcbiAgfVxuXG4gIGFzeW5jIHNhdmVNYW55KGVudGl0aWVzOiBFbnRpdHlbXSk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLmJ1bGtXcml0ZShlbnRpdGllcyBhcyBhbnkpO1xuICB9XG5cbiAgYXN5bmMgY3JlYXRlKGVudGl0eTogRG9jUGFyYW08dGhpcywgVEV4dHJhUGFyYW1zPiAmIEVudGl0eSk6IFByb21pc2U8RW50aXR5PiB7XG4gICAgY29uc3Qgb2JqID0gdG9PYmplY3QoZW50aXR5KSBhcyBEb2NQYXJhbTx0aGlzLCBURXh0cmFQYXJhbXM+ICYgRW50aXR5O1xuICAgIGNvbnN0IGlkID0gb2JqPy5pZCB8fCB0aGlzLmdlbklkKCk7XG4gICAgcmV0dXJuIHRvUHJvbWlzZSgoKSA9PiB0aGlzLmRvYyh7Li4ub2JqLCBpZH0pKS50aGVuKGRvYyA9PiB0aGlzLl9jcmVhdGUoZG9jLCBlbnRpdHkpKTtcbiAgfVxuXG4gIGFzeW5jIGNyZWF0ZU1hbnkoZW50aXRpZXM6IChEb2NQYXJhbTx0aGlzLCBURXh0cmFQYXJhbXM+ICYgRW50aXR5KVtdKTogUHJvbWlzZTxFbnRpdHlbXT4ge1xuICAgIHJldHVybiBQcm9taXNlLmFsbChlbnRpdGllcy5tYXAoZW50aXR5ID0+IHRoaXMuY3JlYXRlKGVudGl0eSkpKTtcbiAgfVxuXG4gIGFzeW5jIHVwZGF0ZShlbnRpdHk6IERvY1BhcmFtPHRoaXMsIFRFeHRyYVBhcmFtcz4gJiBQYXJ0aWFsPEVudGl0eT4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5kb2MoZW50aXR5KS51cGRhdGUodGhpcy5hZGFwdGVyLmZsYXR0ZW5Gb3JVcGRhdGUoe1xuICAgICAgLi4udGhpcy5jb252ZXJ0ZXIudG9GaXJlc3RvcmUoZW50aXR5KSxcbiAgICAgIC4uLnRoaXMuYnVpbGRTZXJ2ZXJUaW1lc3RhbXBPYmplY3QoWyd1cGRhdGVkQXQnXSksXG4gICAgfSkpLnRoZW4oKCkgPT4ge30pOyBcbiAgfVxuXG4gIGFzeW5jIHVwZGF0ZU1hbnkoZGF0YTogUGFydGlhbDxFbnRpdHk+W10pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5idWxrVXBkYXRlKGRhdGEgYXMgYW55KTtcbiAgfVxuXG4gIGRlbGV0ZShwYXJhbU1hcDogRG9jUGFyYW08dGhpcywgVEV4dHJhUGFyYW1zPik6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLmRvYyhwYXJhbU1hcCBhcyBhbnkpLmRlbGV0ZSgpO1xuICB9XG5cbiAgYXN5bmMgZGVsZXRlTWFueShwYXJhbXM6IHsgaWQ6IHN0cmluZzsgfVtdKTogUHJvbWlzZTxudW1iZXI+IHtcbiAgICByZXR1cm4gcGFyYW1zLnJlZHVjZSgoYmF0Y2gsIHBhcmFtKSA9PiB7XG4gICAgICBjb25zdCBkb2MgPSB0aGlzLmRvYyhwYXJhbSBhcyBhbnkpLl9fcmVmO1xuICAgICAgcmV0dXJuIGJhdGNoLmRlbGV0ZShkb2MpO1xuICAgIH0sIHRoaXMuYWRhcHRlci5iYXRjaCgpKS5jb21taXQoKS50aGVuKCgpID0+IHBhcmFtcy5sZW5ndGgpO1xuICB9XG5cbiAgYXN5bmMgZGVsZXRlQWxsKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRocm93IG5ldyBFcnJvcignTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC4nKTtcbiAgfVxuXG4gIGFzeW5jIGJ1bGtXcml0ZShlbnRpdGllczogKERvY1BhcmFtPHRoaXMsIFRFeHRyYVBhcmFtcz4gJiBFbnRpdHkpW10sIHRpbWVzdGFtcHM6IHN0cmluZ1tdID0gW10pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gZW50aXRpZXMucmVkdWNlKChiYXRjaCwgZW50aXR5KSA9PiB7XG4gICAgICBjb25zdCBkb2MgPSB0aGlzLmRvYyhlbnRpdHkpLl9fcmVmO1xuICAgICAgcmV0dXJuIGJhdGNoLnNldChkb2MsIHtcbiAgICAgICAgLi4udGhpcy5jb252ZXJ0ZXIudG9GaXJlc3RvcmUoZW50aXR5KSxcbiAgICAgICAgLi4udGhpcy5idWlsZFNlcnZlclRpbWVzdGFtcE9iamVjdCh0aW1lc3RhbXBzKSxcbiAgICAgIH0pO1xuICAgIH0sIHRoaXMuYWRhcHRlci5iYXRjaCgpKS5jb21taXQoKTtcbiAgfVxuXG4gIGFzeW5jIGJ1bGtDcmVhdGUoZW50aXRpZXM6IChEb2NQYXJhbTx0aGlzLCBURXh0cmFQYXJhbXM+ICYgRW50aXR5KVtdKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgLy8gVE9ETyhub250YW5nZW50KTogYWRkIG1heGltdW0gNTAwIHJlY29yZCB2YWxpZGF0aW9uXG4gICAgcmV0dXJuIGVudGl0aWVzLnJlZHVjZSgoYmF0Y2gsIGVudGl0eSkgPT4ge1xuICAgICAgY29uc3QgZG9jID0gdGhpcy5kb2MoZW50aXR5KS5fX3JlZjtcbiAgICAgIHJldHVybiBiYXRjaC5jcmVhdGUoZG9jLCB7XG4gICAgICAgIC4uLnRoaXMuY29udmVydGVyLnRvRmlyZXN0b3JlKGVudGl0eSksXG4gICAgICAgIC4uLnRoaXMuYnVpbGRTZXJ2ZXJUaW1lc3RhbXBPYmplY3QoWydjcmVhdGVkQXQnLCAndXBkYXRlZEF0J10pLFxuICAgICAgfSk7XG4gICAgfSwgdGhpcy5hZGFwdGVyLmJhdGNoKCkpLmNvbW1pdCgpO1xuICB9XG5cbiAgYXN5bmMgYnVsa1VwZGF0ZShlbnRpdGllczogKERvY1BhcmFtPHRoaXMsIFRFeHRyYVBhcmFtcz4gJiBQYXJ0aWFsPEVudGl0eT4pW10pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAvLyBUT0RPKG5vbnRhbmdlbnQpOiBhZGQgbWF4aW11bSA1MDAgcmVjb3JkIHZhbGlkYXRpb25cbiAgICByZXR1cm4gZW50aXRpZXMucmVkdWNlKChiYXRjaCwgZW50aXR5KSA9PiB7XG4gICAgICBjb25zdCBkb2MgPSB0aGlzLmRvYyhlbnRpdHkpLl9fcmVmO1xuICAgICAgcmV0dXJuIGJhdGNoLnVwZGF0ZShkb2MsIHtcbiAgICAgICAgLi4udGhpcy5jb252ZXJ0ZXIudG9GaXJlc3RvcmUoZW50aXR5KSxcbiAgICAgICAgLi4udGhpcy5idWlsZFNlcnZlclRpbWVzdGFtcE9iamVjdChbJ3VwZGF0ZWRBdCddKSxcbiAgICAgIH0pO1xuICAgIH0sIHRoaXMuYWRhcHRlci5iYXRjaCgpKS5jb21taXQoKTtcbiAgfVxuXG4gIGFzeW5jIGJ1bGtEZWxldGUocGFyYW1NYXBzOiBEb2NQYXJhbTx0aGlzLCBURXh0cmFQYXJhbXM+W10pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAvLyBNRU1PKEBub250YW5nZW50KTogNTAw5Lu25Lul5LiK44Gu5YmK6Zmk44Gv5pyq5a++5b+cXG4gICAgcmV0dXJuIHBhcmFtTWFwcy5yZWR1Y2UoKGJhdGNoLCBwYXJhbU1hcCkgPT4ge1xuICAgICAgY29uc3QgZG9jID0gdGhpcy5kb2MocGFyYW1NYXAgYXMgYW55KS5fX3JlZjtcbiAgICAgIHJldHVybiBiYXRjaC5kZWxldGUoZG9jKTtcbiAgICB9LCB0aGlzLmFkYXB0ZXIuYmF0Y2goKSkuY29tbWl0KCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgY29sbGVjdGlvbihwYXJhbU1hcD86IE9taXQ8RXh0cmFjdFBhcmFtczx0eXBlb2YgdGhpcy5jb2xsZWN0aW9uUGF0aD4sICdpZCc+KTogQ29sbGVjdGlvblJlZmVyZW5jZTxvYmplY3Q+IHtcbiAgICBjb25zdCBwYXRoID0gdGhpcy5wYXRoQnVpbGRlci5jb2xsZWN0aW9uKHBhcmFtTWFwKVxuICAgIHJldHVybiB0aGlzLmFkYXB0ZXIuY29sbGVjdGlvbjxvYmplY3Q+KHBhdGgpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGNvbGxlY3Rpb25Hcm91cCgpOiBDb2xsZWN0aW9uR3JvdXA8b2JqZWN0PiB7XG4gICAgY29uc3QgcGF0aCA9IHRoaXMucGF0aEJ1aWxkZXIuY29sbGVjdGlvbkdyb3VwKCk7XG4gICAgcmV0dXJuIHRoaXMuYWRhcHRlci5jb2xsZWN0aW9uR3JvdXA8b2JqZWN0PihwYXRoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBkb2MocGFyYW1NYXA6IERvY1BhcmFtPHRoaXMsIFRFeHRyYVBhcmFtcz4pOiBEb2N1bWVudFJlZmVyZW5jZTxvYmplY3Q+IHtcbiAgICBjb25zdCBwYXRoID0gdGhpcy5wYXRoQnVpbGRlci5kb2MocGFyYW1NYXAgYXMgYW55KTtcbiAgICByZXR1cm4gdGhpcy5hZGFwdGVyLmRvYzxvYmplY3Q+KHBhdGgpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdlbklkID0gKCk6IHN0cmluZyA9PiBnZW5lcmF0ZUlkKCk7XG5cbiAgcHJvdGVjdGVkIF9saXN0KGNvbGxlY3Rpb246IENvbGxlY3Rpb25SZWZlcmVuY2U8b2JqZWN0Pikge1xuICAgIHJldHVybiBjb2xsZWN0aW9uLmdldCgpLnRoZW4oKHtkb2NzfSkgPT4gZG9jcy5tYXAoZG9jID0+IHtcbiAgICAgIGlmICghZG9lc0V4aXN0KGRvYykpIHJldHVybiBudWxsO1xuICAgICAgcmV0dXJuIHRoaXMuY29udmVydGVyLmZyb21GaXJlc3RvcmUoZG9jKTtcbiAgICB9KSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgX2dldChkb2M6IERvY3VtZW50UmVmZXJlbmNlPG9iamVjdD4pIHtcbiAgICByZXR1cm4gZG9jLmdldCgpLnRoZW4oKGRvYyA9PiB7XG4gICAgICBpZiAoIWRvYy5kYXRhKCkpIHJldHVybiBudWxsO1xuICAgICAgcmV0dXJuIHRoaXMuY29udmVydGVyLmZyb21GaXJlc3RvcmUoZG9jKVxuICAgIH0pKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBfc2F2ZShkb2M6IERvY3VtZW50UmVmZXJlbmNlPG9iamVjdD4sIGVudGl0eTogRW50aXR5KTogUHJvbWlzZTxbRW50aXR5LCBib29sZWFuXT4ge1xuICAgIGNvbnN0IGV4aXN0cyA9IGF3YWl0IGRvYy5leGlzdHMoKTtcbiAgICBpZiAoZXhpc3RzKSB7XG4gICAgICByZXR1cm4gdGhpcy5fc2V0KGRvYywgZW50aXR5KS50aGVuKGRvYyA9PiBbdGhpcy5jb252ZXJ0ZXIuZnJvbUZpcmVzdG9yZShkb2MpLCBmYWxzZV0pO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5fY3JlYXRlKGRvYywgZW50aXR5KS50aGVuKGVudGl0eSA9PiBbZW50aXR5LCB0cnVlXSk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIF9jcmVhdGUoZG9jOiBEb2N1bWVudFJlZmVyZW5jZTxvYmplY3Q+LCBlbnRpdHk6IEVudGl0eSk6IFByb21pc2U8RW50aXR5PiB7XG4gICAgY29uc3QgZXhpc3RzID0gYXdhaXQgZG9jLmV4aXN0cygpLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgLy8gTUVNTyhAbm9udGFuZ2VudCk6IGJ1buOBp+Wun+ihjOOBmeOCi+OBqOOBjeOBoOOBkeOBk+OBruOCqOODqeODvOOBjOOBp+OCi+OBi+OCguOBl+OCjOOBquOBhOOAglxuICAgICAgaWYgKGAke2Vycm9yfWAuc3RhcnRzV2l0aCgnRXJyb3I6IERpZCBub3QgcmVjZWl2ZSBkb2N1bWVudCBmb3InKSkgcmV0dXJuIGZhbHNlO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfSk7XG4gICAgaWYgKGV4aXN0cykgdGhyb3cgbmV3IEVycm9yKCdEb2N1bWVudCBhbHJlYWR5IGV4aXN0cycpO1xuICAgIHJldHVybiBkb2Muc2V0KHtcbiAgICAgIC4uLnRoaXMuY29udmVydGVyLnRvRmlyZXN0b3JlKGVudGl0eSksXG4gICAgICAuLi50aGlzLmJ1aWxkU2VydmVyVGltZXN0YW1wT2JqZWN0KFsnY3JlYXRlZEF0JywgJ3VwZGF0ZWRBdCddKSxcbiAgICB9IGFzIGFueSkudGhlbigoKSA9PiBkb2MuZ2V0KCkpLnRoZW4oZG9jID0+IHRoaXMuY29udmVydGVyLmZyb21GaXJlc3RvcmUoZG9jKSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgX3NldChkb2M6IERvY3VtZW50UmVmZXJlbmNlPG9iamVjdD4sIGVudGl0eTogUGFydGlhbDxFbnRpdHk+LCBpc1VwZGF0ZSA9IHRydWUpIHtcbiAgICBjb25zdCBkYXRhID0gdGhpcy5jb252ZXJ0ZXIudG9GaXJlc3RvcmUoZW50aXR5KTtcbiAgICByZXR1cm4gZG9jLnNldCh7XG4gICAgICAuLi50aGlzLmNvbnZlcnRlci50b0ZpcmVzdG9yZShlbnRpdHkpLFxuICAgICAgLi4udGhpcy5idWlsZFNlcnZlclRpbWVzdGFtcE9iamVjdChpc1VwZGF0ZSA/IFsndXBkYXRlZEF0J10gOiBbXSksXG4gICAgfSBhcyBhbnksIHttZXJnZTogaXNVcGRhdGV9KS50aGVuKCgpID0+IGRvYy5nZXQoKSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgYnVpbGRTZXJ2ZXJUaW1lc3RhbXBPYmplY3Qoa2V5czogc3RyaW5nW10gPSBbJ2NyZWF0ZWRBdCcsICd1cGRhdGVkQXQnXSkge1xuICAgIHJldHVybiBrZXlzLnJlZHVjZSgobSwgaykgPT4gKHsuLi5tLCBba106IHRoaXMuYWRhcHRlci5GaWVsZFZhbHVlLnNlcnZlclRpbWVzdGFtcCgpfSksIHt9KTtcbiAgfVxufVxuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgRmlyZXN0b3JlUmVwb3NpdG9yeTxFbnRpdHkgZXh0ZW5kcyB7IGlkOiBzdHJpbmcgfSwgVEV4dHJhUGFyYW1zID0ge30+IGV4dGVuZHMgQmFzZUZpcmVzdG9yZVJlcG9zaXRvcnk8RW50aXR5LCBURXh0cmFQYXJhbXM+IHtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGFkYXB0ZXIgPSBpbmplY3QoRmlyZXN0b3JlQWRhcHRlcik7XG4gIGdldCBwYXRoQnVpbGRlcigpOiBGaXJlc3RvcmVQYXRoQnVpbGRlcjxFbnRpdHksIHR5cGVvZiB0aGlzLmNvbGxlY3Rpb25QYXRoPiB7XG4gICAgcmV0dXJuIHBhdGhCdWlsZGVyRmFjdG9yeSh0aGlzLmNvbGxlY3Rpb25QYXRoKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RmlyZXN0b3JlUmVwb3NpdG9yeTxFbnRpdHkgZXh0ZW5kcyB7IGlkOiBzdHJpbmcgfSwgVEV4dHJhUGFyYW1zID0ge30+KFxuICBlbnRpdHk6IHsgbmV3KCk6IEVudGl0eSB9LFxuICBhZGFwdGVyOiBGaXJlc3RvcmVBZGFwdGVyID0gaW5qZWN0KEZpcmVzdG9yZUFkYXB0ZXIpLFxuKTogQmFzZUZpcmVzdG9yZVJlcG9zaXRvcnk8RW50aXR5LCBURXh0cmFQYXJhbXM+IHtcbiAgY2xhc3MgRmlyZXN0b3JlUmVwb3NpdG9yeSBleHRlbmRzIEJhc2VGaXJlc3RvcmVSZXBvc2l0b3J5PEVudGl0eSwgVEV4dHJhUGFyYW1zPiB7XG4gICAgY29uc3RydWN0b3IoXG4gICAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgY29udmVydGVyOiBJRmlyZXN0b3JlQ29udmVydGVyPEVudGl0eT4sXG4gICAgICBwdWJsaWMgcmVhZG9ubHkgY29sbGVjdGlvblBhdGg6IHN0cmluZyxcbiAgICAgIHB1YmxpYyBwYXRoQnVpbGRlcjogRmlyZXN0b3JlUGF0aEJ1aWxkZXI8RW50aXR5LCBhbnk+LFxuICAgICAgcHJvdGVjdGVkIHJlYWRvbmx5IGFkYXB0ZXI6IEZpcmVzdG9yZUFkYXB0ZXIsXG4gICAgKSB7IHN1cGVyKCk7IH1cbiAgfVxuXG4gIHJldHVybiBuZXcgRmlyZXN0b3JlUmVwb3NpdG9yeShcbiAgICBnZXRDb252ZXJ0ZXIoZW50aXR5LCBhZGFwdGVyKSxcbiAgICBnZXRDb2xsZWN0aW9uKGVudGl0eSksXG4gICAgcGF0aEJ1aWxkZXJGYWN0b3J5KGdldENvbGxlY3Rpb24oZW50aXR5KSksXG4gICAgYWRhcHRlclxuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5qZWN0RmlyZXN0b3JlUmVwb3NpdG9yeTxFbnRpdHkgZXh0ZW5kcyB7IGlkOiBzdHJpbmcgfSwgVEV4dHJhUGFyYW1zID0ge30+KGVudGl0eTogeyBuZXcoKTogRW50aXR5IH0pOiBCYXNlRmlyZXN0b3JlUmVwb3NpdG9yeTxFbnRpdHksIFRFeHRyYVBhcmFtcz4ge1xuICByZXR1cm4gZ2V0RmlyZXN0b3JlUmVwb3NpdG9yeShlbnRpdHksIGluamVjdChGaXJlc3RvcmVBZGFwdGVyKSk7XG59XG4iXX0=","/**\n * Generated bundle index. Do not edit.\n */\nexport * from './index';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibngtZGRkLWZpcmVzdG9yZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL0BueC1kZGQvZmlyZXN0b3JlL3NyYy9saWIvbngtZGRkLWZpcmVzdG9yZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL2luZGV4JztcbiJdfQ=="],"names":["String","Boolean","Number","Map","Array","map","take","switchMap","catchError","tap","distinctUntilChanged"],"mappings":"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"}