@igo2/geo 18.0.2 → 18.0.3

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 (203) hide show
  1. package/esm2022/lib/catalog/catalog-browser/catalog-browser-group.component.mjs +3 -3
  2. package/esm2022/lib/catalog/catalog-browser/catalog-browser-layer.component.mjs +3 -3
  3. package/esm2022/lib/catalog/catalog-browser/catalog-browser.component.mjs +3 -3
  4. package/esm2022/lib/catalog/catalog-browser/catalog-browser.module.mjs +4 -4
  5. package/esm2022/lib/catalog/catalog-library/add-catalog-dialog.component.mjs +3 -3
  6. package/esm2022/lib/catalog/catalog-library/catalog-library-item.component.mjs +3 -3
  7. package/esm2022/lib/catalog/catalog-library/catalog-library.component.mjs +3 -3
  8. package/esm2022/lib/catalog/catalog-library/catalog-library.module.mjs +4 -4
  9. package/esm2022/lib/catalog/catalog.module.mjs +4 -4
  10. package/esm2022/lib/catalog/shared/catalog.service.mjs +3 -3
  11. package/esm2022/lib/datasource/shared/capabilities.service.mjs +3 -3
  12. package/esm2022/lib/datasource/shared/datasource.service.mjs +3 -3
  13. package/esm2022/lib/datasource/shared/datasources/wfs.service.mjs +3 -3
  14. package/esm2022/lib/datasource/shared/options/options-api.service.mjs +3 -3
  15. package/esm2022/lib/directions/directions-buttons/directions-buttons.component.mjs +3 -3
  16. package/esm2022/lib/directions/directions-inputs/directions-inputs.component.mjs +3 -3
  17. package/esm2022/lib/directions/directions-results/directions-results.component.mjs +3 -3
  18. package/esm2022/lib/directions/directions-sources/osrm-directions-source.mjs +3 -3
  19. package/esm2022/lib/directions/directions.component.mjs +3 -3
  20. package/esm2022/lib/directions/directions.module.mjs +4 -4
  21. package/esm2022/lib/directions/shared/directions.service.mjs +3 -3
  22. package/esm2022/lib/download/download-button/download-button.component.mjs +3 -3
  23. package/esm2022/lib/download/download.module.mjs +4 -4
  24. package/esm2022/lib/download/shared/download.service.mjs +3 -3
  25. package/esm2022/lib/draw/draw/draw-layer-popup.component.mjs +3 -3
  26. package/esm2022/lib/draw/draw/draw-popup.component.mjs +3 -3
  27. package/esm2022/lib/draw/draw/draw-shorcuts.component.mjs +3 -3
  28. package/esm2022/lib/draw/draw/draw.component.mjs +3 -3
  29. package/esm2022/lib/draw/draw/draw.module.mjs +4 -4
  30. package/esm2022/lib/draw/drawingTool.module.mjs +4 -4
  31. package/esm2022/lib/draw/shared/draw-icon.service.mjs +3 -3
  32. package/esm2022/lib/feature/feature-details/feature-details.component.mjs +3 -3
  33. package/esm2022/lib/feature/feature-details/feature-details.directive.mjs +3 -3
  34. package/esm2022/lib/feature/feature-details/feature-details.module.mjs +4 -4
  35. package/esm2022/lib/feature/feature-form/feature-form.component.mjs +3 -3
  36. package/esm2022/lib/feature/feature-form/feature-form.module.mjs +4 -4
  37. package/esm2022/lib/feature/feature.module.mjs +4 -4
  38. package/esm2022/lib/filter/filter.module.mjs +4 -4
  39. package/esm2022/lib/filter/ogc-filter-button/ogc-filter-button.component.mjs +3 -3
  40. package/esm2022/lib/filter/ogc-filter-form/ogc-filter-form.component.mjs +3 -3
  41. package/esm2022/lib/filter/ogc-filter-selection/ogc-filter-selection.component.mjs +3 -3
  42. package/esm2022/lib/filter/ogc-filter-time/ogc-filter-time-slider.component.mjs +3 -3
  43. package/esm2022/lib/filter/ogc-filter-time/ogc-filter-time.component.mjs +3 -3
  44. package/esm2022/lib/filter/ogc-filterable-form/ogc-filterable-form.component.mjs +3 -3
  45. package/esm2022/lib/filter/ogc-filterable-item/ogc-filterable-item.component.mjs +3 -3
  46. package/esm2022/lib/filter/ogc-filterable-list/ogc-filterable-list-binding.directive.mjs +3 -3
  47. package/esm2022/lib/filter/ogc-filterable-list/ogc-filterable-list.component.mjs +3 -3
  48. package/esm2022/lib/filter/shared/filterable-datasource.pipe.mjs +3 -3
  49. package/esm2022/lib/filter/shared/ogc-filter-time.service.mjs +3 -3
  50. package/esm2022/lib/filter/shared/ogc-filter.service.mjs +3 -3
  51. package/esm2022/lib/filter/shared/spatial-filter.service.mjs +3 -3
  52. package/esm2022/lib/filter/shared/time-filter.service.mjs +3 -3
  53. package/esm2022/lib/filter/spatial-filter/spatial-filter-item/spatial-filter-item.component.mjs +3 -3
  54. package/esm2022/lib/filter/spatial-filter/spatial-filter-list/spatial-filter-list.component.mjs +3 -3
  55. package/esm2022/lib/filter/spatial-filter/spatial-filter-type/spatial-filter-type.component.mjs +3 -3
  56. package/esm2022/lib/filter/time-filter-button/time-filter-button.component.mjs +3 -3
  57. package/esm2022/lib/filter/time-filter-form/time-filter-form.component.mjs +3 -3
  58. package/esm2022/lib/filter/time-filter-item/time-filter-item.component.mjs +3 -3
  59. package/esm2022/lib/filter/time-filter-list/time-filter-list-binding.directive.mjs +3 -3
  60. package/esm2022/lib/filter/time-filter-list/time-filter-list.component.mjs +3 -3
  61. package/esm2022/lib/geo.module.mjs +4 -4
  62. package/esm2022/lib/geometry/geometry-form-field/geometry-form-field-input.component.mjs +3 -3
  63. package/esm2022/lib/geometry/geometry-form-field/geometry-form-field.component.mjs +3 -3
  64. package/esm2022/lib/geometry/geometry-form-field/geometry-form-field.module.mjs +4 -4
  65. package/esm2022/lib/geometry/geometry.module.mjs +4 -4
  66. package/esm2022/lib/import-export/export-button/export-button.component.mjs +3 -3
  67. package/esm2022/lib/import-export/import-export/import-export.component.mjs +3 -3
  68. package/esm2022/lib/import-export/import-export.module.mjs +4 -4
  69. package/esm2022/lib/import-export/shared/drop-geo-file.directive.mjs +3 -3
  70. package/esm2022/lib/import-export/shared/export.service.mjs +3 -3
  71. package/esm2022/lib/import-export/shared/import.service.mjs +3 -3
  72. package/esm2022/lib/import-export/shared/import.utils.mjs +2 -2
  73. package/esm2022/lib/layer/layer-group/layer-group.component.mjs +3 -3
  74. package/esm2022/lib/layer/layer-item/layer-item.component.mjs +3 -3
  75. package/esm2022/lib/layer/layer-legend/layer-legend.component.mjs +3 -3
  76. package/esm2022/lib/layer/layer-legend-item/layer-legend-item.component.mjs +3 -3
  77. package/esm2022/lib/layer/layer-legend-list/layer-legend-list-binding.directive.mjs +3 -3
  78. package/esm2022/lib/layer/layer-legend-list/layer-legend-list.component.mjs +3 -3
  79. package/esm2022/lib/layer/layer-list/layer-list.component.mjs +3 -3
  80. package/esm2022/lib/layer/layer-list-tool/layer-list-tool.component.mjs +3 -3
  81. package/esm2022/lib/layer/layer-list-tool/layer-list-tool.service.mjs +3 -3
  82. package/esm2022/lib/layer/layer-search/layer-search.component.mjs +3 -3
  83. package/esm2022/lib/layer/layer-unavailable/layer-unavailable-list/layer-unavailable-list.component.mjs +3 -3
  84. package/esm2022/lib/layer/layer-unavailable/layer-unavailable.component.mjs +3 -3
  85. package/esm2022/lib/layer/layer-viewer/layer-viewer.component.mjs +3 -3
  86. package/esm2022/lib/layer/layer-viewer-bottom-actions/layer-viewer-bottom-actions.component.mjs +3 -3
  87. package/esm2022/lib/layer/layer-visibility-button/layer-visibility-button.component.mjs +3 -3
  88. package/esm2022/lib/layer/layer.module.mjs +4 -4
  89. package/esm2022/lib/layer/shared/layer.service.mjs +13 -17
  90. package/esm2022/lib/layer/shared/layers/vector-layer.interface.mjs +1 -1
  91. package/esm2022/lib/layer/shared/layers/vector-layer.mjs +127 -217
  92. package/esm2022/lib/layer/track-feature-button/track-feature-button.component.mjs +3 -3
  93. package/esm2022/lib/map/baselayers-switcher/baselayers-switcher.component.mjs +3 -3
  94. package/esm2022/lib/map/baselayers-switcher/mini-basemap.component.mjs +3 -3
  95. package/esm2022/lib/map/geolocate-button/geolocate-button.component.mjs +3 -3
  96. package/esm2022/lib/map/home-extent-button/home-extent-button.component.mjs +3 -3
  97. package/esm2022/lib/map/info-section/info-section.component.mjs +3 -3
  98. package/esm2022/lib/map/map-browser/map-browser.component.mjs +3 -3
  99. package/esm2022/lib/map/map-center/map-center.component.mjs +3 -3
  100. package/esm2022/lib/map/map.module.mjs +4 -4
  101. package/esm2022/lib/map/menu-button/menu-button.component.mjs +3 -3
  102. package/esm2022/lib/map/offline-button/offline-button.component.mjs +3 -3
  103. package/esm2022/lib/map/rotation-button/rotation-button.component.mjs +3 -3
  104. package/esm2022/lib/map/shared/hover-feature.directive.mjs +3 -3
  105. package/esm2022/lib/map/shared/map-pointer-position.directive.mjs +3 -3
  106. package/esm2022/lib/map/shared/map.service.mjs +3 -3
  107. package/esm2022/lib/map/shared/mapOffline.directive.mjs +3 -3
  108. package/esm2022/lib/map/shared/projection.service.mjs +3 -3
  109. package/esm2022/lib/map/swipe-control/swipe-control.component.mjs +3 -3
  110. package/esm2022/lib/map/wake-lock-button/wake-lock-button.component.mjs +3 -3
  111. package/esm2022/lib/map/zoom-button/zoom-button.component.mjs +3 -3
  112. package/esm2022/lib/measure/measure.module.mjs +4 -4
  113. package/esm2022/lib/measure/measurer/measure-format.pipe.mjs +3 -3
  114. package/esm2022/lib/measure/measurer/measurer-dialog.component.mjs +3 -3
  115. package/esm2022/lib/measure/measurer/measurer-item.component.mjs +3 -3
  116. package/esm2022/lib/measure/measurer/measurer.component.mjs +3 -3
  117. package/esm2022/lib/measure/measurer/measurer.module.mjs +4 -4
  118. package/esm2022/lib/metadata/metadata-button/metadata-button.component.mjs +6 -6
  119. package/esm2022/lib/metadata/metadata.module.mjs +4 -4
  120. package/esm2022/lib/metadata/shared/metadata.service.mjs +3 -3
  121. package/esm2022/lib/offline/geoDB/configFileToGeoDB.service.mjs +20 -22
  122. package/esm2022/lib/offline/geoDB/geoDB.mjs +146 -0
  123. package/esm2022/lib/offline/geoDB/index.mjs +2 -2
  124. package/esm2022/lib/offline/layerDB/index.mjs +2 -2
  125. package/esm2022/lib/offline/layerDB/layerDB.mjs +64 -0
  126. package/esm2022/lib/offline/offline.provider.mjs +18 -41
  127. package/esm2022/lib/offline/shared/geo-network.service.mjs +10 -14
  128. package/esm2022/lib/offline/shared/indexed-db.interface.mjs +2 -0
  129. package/esm2022/lib/offline/shared/indexed-db.utils.mjs +20 -0
  130. package/esm2022/lib/print/print/print.component.mjs +3 -3
  131. package/esm2022/lib/print/print-form/print-form.component.mjs +3 -3
  132. package/esm2022/lib/print/print.module.mjs +4 -4
  133. package/esm2022/lib/print/shared/print.service.mjs +3 -3
  134. package/esm2022/lib/query/query.module.mjs +4 -4
  135. package/esm2022/lib/query/shared/query-search-source.mjs +3 -3
  136. package/esm2022/lib/query/shared/query.directive.mjs +3 -3
  137. package/esm2022/lib/query/shared/query.service.mjs +3 -3
  138. package/esm2022/lib/search/search-bar/search-bar.component.mjs +3 -3
  139. package/esm2022/lib/search/search-bar/search-bar.module.mjs +4 -4
  140. package/esm2022/lib/search/search-results/save-feature-dialog.component.mjs +3 -3
  141. package/esm2022/lib/search/search-results/search-results-add-button.component.mjs +3 -3
  142. package/esm2022/lib/search/search-results/search-results-item.component.mjs +3 -3
  143. package/esm2022/lib/search/search-results/search-results.component.mjs +3 -3
  144. package/esm2022/lib/search/search-results/search-results.module.mjs +4 -4
  145. package/esm2022/lib/search/search-selector/search-selector.component.mjs +4 -4
  146. package/esm2022/lib/search/search-selector/search-selector.module.mjs +4 -4
  147. package/esm2022/lib/search/search-settings/search-settings.component.mjs +3 -3
  148. package/esm2022/lib/search/search-settings/search-settings.module.mjs +4 -4
  149. package/esm2022/lib/search/search.module.mjs +4 -4
  150. package/esm2022/lib/search/shared/search-pointer-summary.directive.mjs +3 -3
  151. package/esm2022/lib/search/shared/search.service.mjs +3 -3
  152. package/esm2022/lib/search/shared/sources/cadastre.mjs +3 -3
  153. package/esm2022/lib/search/shared/sources/coordinates.mjs +6 -6
  154. package/esm2022/lib/search/shared/sources/icherche.mjs +9 -9
  155. package/esm2022/lib/search/shared/sources/ilayer.mjs +6 -6
  156. package/esm2022/lib/search/shared/sources/nominatim.mjs +3 -3
  157. package/esm2022/lib/search/shared/sources/storedqueries.mjs +6 -6
  158. package/esm2022/lib/search/shared/sources/workspace.mjs +3 -3
  159. package/esm2022/lib/style/style-list/style-list.module.mjs +4 -4
  160. package/esm2022/lib/style/style-list/style-list.service.mjs +3 -3
  161. package/esm2022/lib/style/style-modal/drawing/style-modal-drawing.component.mjs +3 -3
  162. package/esm2022/lib/style/style-modal/layer/style-modal-layer.component.mjs +3 -3
  163. package/esm2022/lib/style/style-modal/layer-button/style-modal-layer-button.component.mjs +3 -3
  164. package/esm2022/lib/style/style-service/draw-style.service.mjs +3 -3
  165. package/esm2022/lib/style/style-service/style.service.mjs +3 -3
  166. package/esm2022/lib/style/style.module.mjs +4 -4
  167. package/esm2022/lib/toast/toast.component.mjs +3 -3
  168. package/esm2022/lib/toast/toast.module.mjs +4 -4
  169. package/esm2022/lib/utils/propertyTypeDetector/propertyTypeDetector.service.mjs +3 -3
  170. package/esm2022/lib/wkt/shared/wkt.service.mjs +3 -3
  171. package/esm2022/lib/wkt/wkt.module.mjs +4 -4
  172. package/esm2022/lib/workspace/confirmation-popup/confirmation-popup.component.mjs +3 -3
  173. package/esm2022/lib/workspace/confirmation-popup/confirmation-popup.module.mjs +4 -4
  174. package/esm2022/lib/workspace/shared/edition-workspace.service.mjs +6 -6
  175. package/esm2022/lib/workspace/shared/feature-workspace.service.mjs +3 -3
  176. package/esm2022/lib/workspace/shared/wfs-workspace.service.mjs +3 -3
  177. package/esm2022/lib/workspace/shared/wms-workspace.service.mjs +6 -6
  178. package/esm2022/lib/workspace/shared/workspace.utils.mjs +2 -1
  179. package/esm2022/lib/workspace/widgets/ogc-filter/ogc-filter.component.mjs +3 -3
  180. package/esm2022/lib/workspace/widgets/ogc-filter/ogc-filter.module.mjs +4 -4
  181. package/esm2022/lib/workspace/workspace-selector/workspace-selector.directive.mjs +3 -3
  182. package/esm2022/lib/workspace/workspace-selector/workspace-selector.module.mjs +4 -4
  183. package/esm2022/lib/workspace/workspace-updator/workspace-updator.directive.mjs +3 -3
  184. package/esm2022/lib/workspace/workspace-updator/workspace-updator.module.mjs +4 -4
  185. package/esm2022/lib/workspace/workspace.module.mjs +4 -4
  186. package/fesm2022/igo2-geo.mjs +1092 -1234
  187. package/fesm2022/igo2-geo.mjs.map +1 -1
  188. package/lib/layer/shared/layer.service.d.ts +2 -4
  189. package/lib/layer/shared/layers/vector-layer.d.ts +4 -15
  190. package/lib/layer/shared/layers/vector-layer.interface.d.ts +3 -2
  191. package/lib/offline/geoDB/configFileToGeoDB.service.d.ts +2 -4
  192. package/lib/offline/geoDB/geoDB.d.ts +36 -0
  193. package/lib/offline/geoDB/index.d.ts +1 -1
  194. package/lib/offline/layerDB/index.d.ts +1 -1
  195. package/lib/offline/layerDB/{layerDB.service.d.ts → layerDB.d.ts} +9 -11
  196. package/lib/offline/offline.provider.d.ts +2 -0
  197. package/lib/offline/shared/geo-network.service.d.ts +2 -4
  198. package/lib/offline/shared/indexed-db.interface.d.ts +16 -0
  199. package/lib/offline/shared/indexed-db.utils.d.ts +4 -0
  200. package/package.json +6 -6
  201. package/esm2022/lib/offline/geoDB/geoDB.service.mjs +0 -172
  202. package/esm2022/lib/offline/layerDB/layerDB.service.mjs +0 -83
  203. package/lib/offline/geoDB/geoDB.service.d.ts +0 -36
@@ -912,10 +912,10 @@ export class MeasurerComponent {
912
912
  this.activeLengthUnit = distanceUnit ? distanceUnit : this.activeLengthUnit;
913
913
  this.activeAreaUnit = areaUnit ? areaUnit : this.activeAreaUnit;
914
914
  }
915
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MeasurerComponent, deps: [{ token: i1.LanguageService }, { token: i2.MatDialog }, { token: i3.StorageService }, { token: DOCUMENT }], target: i0.ɵɵFactoryTarget.Component });
916
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: MeasurerComponent, isStandalone: true, selector: "igo-measurer", inputs: { map: "map", store: "store", activeMeasureType: "activeMeasureType", minSegmentLength: "minSegmentLength" }, viewQueries: [{ propertyName: "table", first: true, predicate: ["table"], descendants: true, static: true }], ngImport: i0, template: "<div>\n <div class=\"measure-type-toggle mat-typography\">\n <mat-button-toggle-group\n [value]=\"activeMeasureType\"\n (change)=\"onMeasureTypeChange($event.value)\"\n >\n <mat-button-toggle [value]=\"measureType.Length\">\n {{ 'igo.geo.measure.' + measureType.Length | translate }}\n </mat-button-toggle>\n <mat-button-toggle [value]=\"measureType.Area\">\n {{ 'igo.geo.measure.' + measureType.Area | translate }}\n </mat-button-toggle>\n </mat-button-toggle-group>\n </div>\n\n <div class=\"measure-options mat-typography\">\n <mat-slide-toggle\n [disabled]=\"drawControlIsDisabled\"\n [checked]=\"drawControlIsActive\"\n [labelPosition]=\"'before'\"\n (change)=\"onToggleDrawControl($event.checked)\"\n >\n {{ 'igo.geo.measure.toggleActive' | translate }}\n </mat-slide-toggle>\n\n <mat-divider *ngIf=\"hasLine$ | async\"></mat-divider>\n\n <mat-slide-toggle\n *ngIf=\"hasLine$ | async\"\n [checked]=\"displayLines\"\n [labelPosition]=\"'before'\"\n (change)=\"onToggleDisplayLines($event.checked)\"\n >\n {{ 'igo.geo.measure.toggleDisplayLines' | translate }}\n </mat-slide-toggle>\n\n <mat-divider *ngIf=\"(hasLine$ | async) || (hasArea$ | async)\"></mat-divider>\n\n <mat-slide-toggle\n *ngIf=\"hasArea$ | async\"\n [checked]=\"displayDistance\"\n [labelPosition]=\"'before'\"\n (change)=\"onToggleDisplayDistance($event.checked)\"\n >\n {{ 'igo.geo.measure.toggleDisplayDistance' | translate }}\n </mat-slide-toggle>\n\n <mat-slide-toggle\n *ngIf=\"hasArea$ | async\"\n [checked]=\"displayAreas\"\n [labelPosition]=\"'before'\"\n (change)=\"onToggleDisplayAreas($event.checked)\"\n >\n {{ 'igo.geo.measure.toggleDisplayAreas' | translate }}\n </mat-slide-toggle>\n\n <mat-divider *ngIf=\"hasArea$ | async\"></mat-divider>\n\n <mat-slide-toggle\n [checked]=\"measureUnitsAuto\"\n [labelPosition]=\"'before'\"\n (change)=\"onToggleMeasureUnitsAuto($event.checked)\"\n >\n {{ 'igo.geo.measure.toggleAutoUnits' | translate }}\n </mat-slide-toggle>\n </div>\n\n <ng-container *ngIf=\"measure$ | async as measure\">\n <igo-measurer-item\n *ngIf=\"\n activeMeasureType === measureType.Length ||\n activeMeasureType === measureType.Area\n \"\n [measureType]=\"measureType.Length\"\n [measureUnit]=\"activeLengthUnit\"\n [measure]=\"measure.length\"\n [auto]=\"measureUnitsAuto\"\n [placeholder]=\"\n (activeMeasureType === measureType.Area\n ? 'igo.geo.measure.perimeter'\n : 'igo.geo.measure.length'\n ) | translate\n \"\n (measureUnitChange)=\"onLengthUnitChange($any($event))\"\n >\n </igo-measurer-item>\n\n <igo-measurer-item\n *ngIf=\"activeMeasureType === measureType.Area\"\n [measureType]=\"measureType.Area\"\n [measureUnit]=\"activeAreaUnit\"\n [measure]=\"measure.area\"\n [auto]=\"measureUnitsAuto\"\n [placeholder]=\"'igo.geo.measure.area' | translate\"\n (measureUnitChange)=\"onAreaUnitChange($any($event))\"\n >\n </igo-measurer-item>\n </ng-container>\n\n <mat-divider *ngIf=\"(hasLine$ | async) || (hasArea$ | async)\"></mat-divider>\n\n <div class=\"measure-store-buttons\">\n <button\n *ngIf=\"(hasLine$ | async) || (hasArea$ | async)\"\n mat-icon-button\n [matTooltip]=\"'igo.geo.measure.actionbar.calculate.tooltip' | translate\"\n [disabled]=\"(selectedFeatures$ | async).length === 0\"\n color=\"accent\"\n (click)=\"onCalculateClick()\"\n >\n <mat-icon>calculate</mat-icon>\n </button>\n\n <button\n *ngIf=\"(hasLine$ | async) || (hasArea$ | async)\"\n mat-icon-button\n [matTooltip]=\"'igo.geo.measure.actionbar.delete.tooltip' | translate\"\n [disabled]=\"(selectedFeatures$ | async).length === 0\"\n color=\"warn\"\n (click)=\"onDeleteClick()\"\n >\n <mat-icon>delete</mat-icon>\n </button>\n </div>\n\n <igo-entity-table\n #table\n class=\"table-compact\"\n [store]=\"store\"\n [template]=\"tableTemplate\"\n >\n </igo-entity-table>\n</div>\n", styles: [":host .measure-type-toggle{padding:10px;text-align:center}:host .measure-type-toggle mat-button-toggle-group{width:100%}:host .measure-type-toggle mat-button-toggle-group mat-button-toggle{width:50%}:host .measure-options mat-slide-toggle{width:100%;padding:10px}:host .measure-options mat-slide-toggle ::ng-deep .mdc-form-field{width:100%}:host .measure-options mat-slide-toggle ::ng-deep .mdc-label{margin-left:0;width:calc(100% - 60px)}:host .measure-store-buttons{margin-left:-2px}:host .measure-store-buttons button:first-of-type{margin-left:14px}:host .table-compact ::ng-deep .mat-mdc-header-cell.mat-column-selectionCheckbox{width:52px}:host .igo-map-tooltip{position:relative;border-radius:4px;padding:4px 8px;white-space:nowrap}::ng-deep .igo-map-tooltip-hidden,.igo-map-tooltip-measure-by-display{display:none}\n"], dependencies: [{ kind: "ngmodule", type: MatButtonToggleModule }, { kind: "directive", type: i4.MatButtonToggleGroup, selector: "mat-button-toggle-group", inputs: ["appearance", "name", "vertical", "value", "multiple", "disabled", "disabledInteractive", "hideSingleSelectionIndicator", "hideMultipleSelectionIndicator"], outputs: ["valueChange", "change"], exportAs: ["matButtonToggleGroup"] }, { kind: "component", type: i4.MatButtonToggle, selector: "mat-button-toggle", inputs: ["aria-label", "aria-labelledby", "id", "name", "value", "tabIndex", "disableRipple", "appearance", "checked", "disabled", "disabledInteractive"], outputs: ["change"], exportAs: ["matButtonToggle"] }, { kind: "ngmodule", type: MatSlideToggleModule }, { kind: "component", type: i5.MatSlideToggle, selector: "mat-slide-toggle", inputs: ["name", "id", "labelPosition", "aria-label", "aria-labelledby", "aria-describedby", "required", "color", "disabled", "disableRipple", "tabIndex", "checked", "hideIcon", "disabledInteractive"], outputs: ["change", "toggleChange"], exportAs: ["matSlideToggle"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: MatDividerModule }, { kind: "component", type: i6.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { kind: "component", type: MeasurerItemComponent, selector: "igo-measurer-item", inputs: ["measureType", "measureUnit", "measure", "auto", "placeholder"], outputs: ["measureUnitChange"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i7.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i8.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i9.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: EntityTableComponent, selector: "igo-entity-table", inputs: ["store", "paginator", "template", "scrollBehavior", "sortNullsFirst", "withPaginator", "paginatorOptions"], outputs: ["entityClick", "entitySelectChange", "entitySortChange"] }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "ngmodule", type: IgoLanguageModule }, { kind: "pipe", type: i10.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
915
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: MeasurerComponent, deps: [{ token: i1.LanguageService }, { token: i2.MatDialog }, { token: i3.StorageService }, { token: DOCUMENT }], target: i0.ɵɵFactoryTarget.Component });
916
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: MeasurerComponent, isStandalone: true, selector: "igo-measurer", inputs: { map: "map", store: "store", activeMeasureType: "activeMeasureType", minSegmentLength: "minSegmentLength" }, viewQueries: [{ propertyName: "table", first: true, predicate: ["table"], descendants: true, static: true }], ngImport: i0, template: "<div>\n <div class=\"measure-type-toggle mat-typography\">\n <mat-button-toggle-group\n [value]=\"activeMeasureType\"\n (change)=\"onMeasureTypeChange($event.value)\"\n >\n <mat-button-toggle [value]=\"measureType.Length\">\n {{ 'igo.geo.measure.' + measureType.Length | translate }}\n </mat-button-toggle>\n <mat-button-toggle [value]=\"measureType.Area\">\n {{ 'igo.geo.measure.' + measureType.Area | translate }}\n </mat-button-toggle>\n </mat-button-toggle-group>\n </div>\n\n <div class=\"measure-options mat-typography\">\n <mat-slide-toggle\n [disabled]=\"drawControlIsDisabled\"\n [checked]=\"drawControlIsActive\"\n [labelPosition]=\"'before'\"\n (change)=\"onToggleDrawControl($event.checked)\"\n >\n {{ 'igo.geo.measure.toggleActive' | translate }}\n </mat-slide-toggle>\n\n <mat-divider *ngIf=\"hasLine$ | async\"></mat-divider>\n\n <mat-slide-toggle\n *ngIf=\"hasLine$ | async\"\n [checked]=\"displayLines\"\n [labelPosition]=\"'before'\"\n (change)=\"onToggleDisplayLines($event.checked)\"\n >\n {{ 'igo.geo.measure.toggleDisplayLines' | translate }}\n </mat-slide-toggle>\n\n <mat-divider *ngIf=\"(hasLine$ | async) || (hasArea$ | async)\"></mat-divider>\n\n <mat-slide-toggle\n *ngIf=\"hasArea$ | async\"\n [checked]=\"displayDistance\"\n [labelPosition]=\"'before'\"\n (change)=\"onToggleDisplayDistance($event.checked)\"\n >\n {{ 'igo.geo.measure.toggleDisplayDistance' | translate }}\n </mat-slide-toggle>\n\n <mat-slide-toggle\n *ngIf=\"hasArea$ | async\"\n [checked]=\"displayAreas\"\n [labelPosition]=\"'before'\"\n (change)=\"onToggleDisplayAreas($event.checked)\"\n >\n {{ 'igo.geo.measure.toggleDisplayAreas' | translate }}\n </mat-slide-toggle>\n\n <mat-divider *ngIf=\"hasArea$ | async\"></mat-divider>\n\n <mat-slide-toggle\n [checked]=\"measureUnitsAuto\"\n [labelPosition]=\"'before'\"\n (change)=\"onToggleMeasureUnitsAuto($event.checked)\"\n >\n {{ 'igo.geo.measure.toggleAutoUnits' | translate }}\n </mat-slide-toggle>\n </div>\n\n <ng-container *ngIf=\"measure$ | async as measure\">\n <igo-measurer-item\n *ngIf=\"\n activeMeasureType === measureType.Length ||\n activeMeasureType === measureType.Area\n \"\n [measureType]=\"measureType.Length\"\n [measureUnit]=\"activeLengthUnit\"\n [measure]=\"measure.length\"\n [auto]=\"measureUnitsAuto\"\n [placeholder]=\"\n (activeMeasureType === measureType.Area\n ? 'igo.geo.measure.perimeter'\n : 'igo.geo.measure.length'\n ) | translate\n \"\n (measureUnitChange)=\"onLengthUnitChange($any($event))\"\n >\n </igo-measurer-item>\n\n <igo-measurer-item\n *ngIf=\"activeMeasureType === measureType.Area\"\n [measureType]=\"measureType.Area\"\n [measureUnit]=\"activeAreaUnit\"\n [measure]=\"measure.area\"\n [auto]=\"measureUnitsAuto\"\n [placeholder]=\"'igo.geo.measure.area' | translate\"\n (measureUnitChange)=\"onAreaUnitChange($any($event))\"\n >\n </igo-measurer-item>\n </ng-container>\n\n <mat-divider *ngIf=\"(hasLine$ | async) || (hasArea$ | async)\"></mat-divider>\n\n <div class=\"measure-store-buttons\">\n <button\n *ngIf=\"(hasLine$ | async) || (hasArea$ | async)\"\n mat-icon-button\n [matTooltip]=\"'igo.geo.measure.actionbar.calculate.tooltip' | translate\"\n [disabled]=\"(selectedFeatures$ | async).length === 0\"\n color=\"accent\"\n (click)=\"onCalculateClick()\"\n >\n <mat-icon>calculate</mat-icon>\n </button>\n\n <button\n *ngIf=\"(hasLine$ | async) || (hasArea$ | async)\"\n mat-icon-button\n [matTooltip]=\"'igo.geo.measure.actionbar.delete.tooltip' | translate\"\n [disabled]=\"(selectedFeatures$ | async).length === 0\"\n color=\"warn\"\n (click)=\"onDeleteClick()\"\n >\n <mat-icon>delete</mat-icon>\n </button>\n </div>\n\n <igo-entity-table\n #table\n class=\"table-compact\"\n [store]=\"store\"\n [template]=\"tableTemplate\"\n >\n </igo-entity-table>\n</div>\n", styles: [":host .measure-type-toggle{padding:10px;text-align:center}:host .measure-type-toggle mat-button-toggle-group{width:100%}:host .measure-type-toggle mat-button-toggle-group mat-button-toggle{width:50%}:host .measure-options mat-slide-toggle{width:100%;padding:10px}:host .measure-options mat-slide-toggle ::ng-deep .mdc-form-field{width:100%}:host .measure-options mat-slide-toggle ::ng-deep .mdc-label{margin-left:0;width:calc(100% - 60px)}:host .measure-store-buttons{margin-left:-2px}:host .measure-store-buttons button:first-of-type{margin-left:14px}:host .table-compact ::ng-deep .mat-mdc-header-cell.mat-column-selectionCheckbox{width:52px}:host .igo-map-tooltip{position:relative;border-radius:4px;padding:4px 8px;white-space:nowrap}::ng-deep .igo-map-tooltip-hidden,.igo-map-tooltip-measure-by-display{display:none}\n"], dependencies: [{ kind: "ngmodule", type: MatButtonToggleModule }, { kind: "directive", type: i4.MatButtonToggleGroup, selector: "mat-button-toggle-group", inputs: ["appearance", "name", "vertical", "value", "multiple", "disabled", "disabledInteractive", "hideSingleSelectionIndicator", "hideMultipleSelectionIndicator"], outputs: ["valueChange", "change"], exportAs: ["matButtonToggleGroup"] }, { kind: "component", type: i4.MatButtonToggle, selector: "mat-button-toggle", inputs: ["aria-label", "aria-labelledby", "id", "name", "value", "tabIndex", "disableRipple", "appearance", "checked", "disabled", "disabledInteractive"], outputs: ["change"], exportAs: ["matButtonToggle"] }, { kind: "ngmodule", type: MatSlideToggleModule }, { kind: "component", type: i5.MatSlideToggle, selector: "mat-slide-toggle", inputs: ["name", "id", "labelPosition", "aria-label", "aria-labelledby", "aria-describedby", "required", "color", "disabled", "disableRipple", "tabIndex", "checked", "hideIcon", "disabledInteractive"], outputs: ["change", "toggleChange"], exportAs: ["matSlideToggle"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: MatDividerModule }, { kind: "component", type: i6.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { kind: "component", type: MeasurerItemComponent, selector: "igo-measurer-item", inputs: ["measureType", "measureUnit", "measure", "auto", "placeholder"], outputs: ["measureUnitChange"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i7.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i8.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i9.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: EntityTableComponent, selector: "igo-entity-table", inputs: ["store", "paginator", "template", "scrollBehavior", "sortNullsFirst", "withPaginator", "paginatorOptions"], outputs: ["entityClick", "entitySelectChange", "entitySortChange"] }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "ngmodule", type: IgoLanguageModule }, { kind: "pipe", type: i10.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
917
917
  }
918
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MeasurerComponent, decorators: [{
918
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: MeasurerComponent, decorators: [{
919
919
  type: Component,
920
920
  args: [{ selector: 'igo-measurer', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [
921
921
  MatButtonToggleModule,
@@ -6,11 +6,11 @@ import * as i0 from "@angular/core";
6
6
  * @deprecated import the components directly or the MEASURER_DIRECTIVES for the set
7
7
  */
8
8
  export class IgoMeasurerModule {
9
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: IgoMeasurerModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
10
- static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.13", ngImport: i0, type: IgoMeasurerModule, imports: [MeasureFormatPipe, MeasurerComponent], exports: [MeasureFormatPipe, MeasurerComponent] });
11
- static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: IgoMeasurerModule, imports: [MeasurerComponent] });
9
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: IgoMeasurerModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
10
+ static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.14", ngImport: i0, type: IgoMeasurerModule, imports: [MeasureFormatPipe, MeasurerComponent], exports: [MeasureFormatPipe, MeasurerComponent] });
11
+ static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: IgoMeasurerModule, imports: [MeasurerComponent] });
12
12
  }
13
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: IgoMeasurerModule, decorators: [{
13
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: IgoMeasurerModule, decorators: [{
14
14
  type: NgModule,
15
15
  args: [{
16
16
  imports: [MeasureFormatPipe, MeasurerComponent],
@@ -54,10 +54,10 @@ export class MetadataButtonComponent {
54
54
  }
55
55
  return this.layer.options;
56
56
  }
57
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MetadataButtonComponent, deps: [{ token: i1.MetadataService }, { token: i2.MatDialog }], target: i0.ɵɵFactoryTarget.Component });
58
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: MetadataButtonComponent, isStandalone: true, selector: "igo-metadata-button", inputs: { layer: "layer", color: "color" }, ngImport: i0, template: "<button\n *ngIf=\"\n (options && options.metadata && options.metadata.url) ||\n (options && options.metadata && options.metadata.abstract)\n \"\n mat-icon-button\n tooltip-position=\"below\"\n matTooltipShowDelay=\"500\"\n [matTooltip]=\"'igo.geo.metadata.show' | translate\"\n [color]=\"color\"\n (click)=\"openMetadata(options.metadata)\"\n>\n <mat-icon>info</mat-icon>\n</button>\n", styles: [""], dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i3.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i4.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: IgoLanguageModule }, { kind: "pipe", type: i6.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: MatDialogModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
57
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: MetadataButtonComponent, deps: [{ token: i1.MetadataService }, { token: i2.MatDialog }], target: i0.ɵɵFactoryTarget.Component });
58
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: MetadataButtonComponent, isStandalone: true, selector: "igo-metadata-button", inputs: { layer: "layer", color: "color" }, ngImport: i0, template: "<button\n *ngIf=\"\n (options && options.metadata && options.metadata.url) ||\n (options && options.metadata && options.metadata.abstract)\n \"\n mat-icon-button\n tooltip-position=\"below\"\n matTooltipShowDelay=\"500\"\n [matTooltip]=\"'igo.geo.metadata.show' | translate\"\n [color]=\"color\"\n (click)=\"openMetadata(options.metadata)\"\n>\n <mat-icon>info</mat-icon>\n</button>\n", styles: [""], dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i3.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i4.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: IgoLanguageModule }, { kind: "pipe", type: i6.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: MatDialogModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
59
59
  }
60
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MetadataButtonComponent, decorators: [{
60
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: MetadataButtonComponent, decorators: [{
61
61
  type: Component,
62
62
  args: [{ selector: 'igo-metadata-button', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [
63
63
  NgIf,
@@ -77,10 +77,10 @@ export class MetadataAbstractComponent {
77
77
  constructor(data) {
78
78
  this.data = data;
79
79
  }
80
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MetadataAbstractComponent, deps: [{ token: MAT_DIALOG_DATA }], target: i0.ɵɵFactoryTarget.Component });
81
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: MetadataAbstractComponent, isStandalone: true, selector: "igo-metadata-abstract", ngImport: i0, template: "<h2 mat-dialog-title>{{ data.layerTitle }}</h2>\n<button class=\"close-button\" mat-button mat-dialog-close>X</button>\n<mat-dialog-content *ngIf=\"data.type !== 'arcgisrest'\" class=\"mat-typography\">\n <h3>{{ data.abstract }}</h3>\n</mat-dialog-content>\n<mat-dialog-content *ngIf=\"data.type === 'arcgisrest'\" class=\"mat-typography\">\n <h3 [innerHTML]=\"data.abstract\"></h3>\n</mat-dialog-content>\n", styles: [":host{position:relative;display:block}.close-button{top:5px;right:5px;padding:7px;line-height:10px;position:absolute!important;min-width:auto}\n"], dependencies: [{ kind: "directive", type: MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i3.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "directive", type: MatDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["aria-label", "type", "mat-dialog-close", "matDialogClose"], exportAs: ["matDialogClose"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }], encapsulation: i0.ViewEncapsulation.None });
80
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: MetadataAbstractComponent, deps: [{ token: MAT_DIALOG_DATA }], target: i0.ɵɵFactoryTarget.Component });
81
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: MetadataAbstractComponent, isStandalone: true, selector: "igo-metadata-abstract", ngImport: i0, template: "<h2 mat-dialog-title>{{ data.layerTitle }}</h2>\n<button class=\"close-button\" mat-button mat-dialog-close>X</button>\n<mat-dialog-content *ngIf=\"data.type !== 'arcgisrest'\" class=\"mat-typography\">\n <h3>{{ data.abstract }}</h3>\n</mat-dialog-content>\n<mat-dialog-content *ngIf=\"data.type === 'arcgisrest'\" class=\"mat-typography\">\n <h3 [innerHTML]=\"data.abstract\"></h3>\n</mat-dialog-content>\n", styles: [":host{position:relative;display:block}.close-button{top:5px;right:5px;padding:7px;line-height:10px;position:absolute!important;min-width:auto}\n"], dependencies: [{ kind: "directive", type: MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i3.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "directive", type: MatDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["aria-label", "type", "mat-dialog-close", "matDialogClose"], exportAs: ["matDialogClose"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }], encapsulation: i0.ViewEncapsulation.None });
82
82
  }
83
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MetadataAbstractComponent, decorators: [{
83
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: MetadataAbstractComponent, decorators: [{
84
84
  type: Component,
85
85
  args: [{ selector: 'igo-metadata-abstract', encapsulation: ViewEncapsulation.None, standalone: true, imports: [
86
86
  MatDialogTitle,
@@ -15,11 +15,11 @@ export class IgoMetadataModule {
15
15
  providers: []
16
16
  };
17
17
  }
18
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: IgoMetadataModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
19
- static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.13", ngImport: i0, type: IgoMetadataModule, imports: [MetadataButtonComponent, MetadataAbstractComponent], exports: [MetadataButtonComponent, MetadataAbstractComponent] });
20
- static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: IgoMetadataModule, imports: [MetadataButtonComponent, MetadataAbstractComponent] });
18
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: IgoMetadataModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
19
+ static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.14", ngImport: i0, type: IgoMetadataModule, imports: [MetadataButtonComponent, MetadataAbstractComponent], exports: [MetadataButtonComponent, MetadataAbstractComponent] });
20
+ static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: IgoMetadataModule, imports: [MetadataButtonComponent, MetadataAbstractComponent] });
21
21
  }
22
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: IgoMetadataModule, decorators: [{
22
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: IgoMetadataModule, decorators: [{
23
23
  type: NgModule,
24
24
  args: [{
25
25
  imports: [MetadataButtonComponent, MetadataAbstractComponent],
@@ -6,10 +6,10 @@ export class MetadataService {
6
6
  window.open(metadata.url, '_blank');
7
7
  }
8
8
  }
9
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MetadataService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
10
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MetadataService, providedIn: 'root' });
9
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: MetadataService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
10
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: MetadataService, providedIn: 'root' });
11
11
  }
12
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MetadataService, decorators: [{
12
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: MetadataService, decorators: [{
13
13
  type: Injectable,
14
14
  args: [{
15
15
  providedIn: 'root'
@@ -4,27 +4,25 @@ import { MessageService } from '@igo2/core/message';
4
4
  import { default as JSZip } from 'jszip';
5
5
  import { of, zip } from 'rxjs';
6
6
  import { catchError, concatMap } from 'rxjs/operators';
7
+ import { GeoDB } from './geoDB';
7
8
  import { InsertSourceInsertDBEnum } from './geoDB.enums';
8
- import { GeoDBService } from './geoDB.service';
9
9
  import * as i0 from "@angular/core";
10
10
  import * as i1 from "@angular/common/http";
11
- import * as i2 from "./geoDB.service";
12
- import * as i3 from "@igo2/core/message";
11
+ import * as i2 from "@igo2/core/message";
13
12
  export class ConfigFileToGeoDBService {
14
13
  http;
15
- geoDBService;
16
14
  messageService;
17
- constructor(http, geoDBService, messageService) {
15
+ constructor(http, messageService) {
18
16
  this.http = http;
19
- this.geoDBService = geoDBService;
20
17
  this.messageService = messageService;
21
18
  }
22
- load(url) {
19
+ load(urlFile) {
20
+ const geoDB = new GeoDB();
23
21
  let downloadMessage;
24
22
  this.http
25
- .get(url)
23
+ .get(urlFile)
26
24
  .pipe(catchError((error) => {
27
- this.messageService.error(`GeoData file ${url} could not be read`);
25
+ this.messageService.error(`GeoData file ${urlFile} could not be read`);
28
26
  error.error.caught = true;
29
27
  throw error;
30
28
  }), concatMap((datasToIDB) => {
@@ -32,15 +30,15 @@ export class ConfigFileToGeoDBService {
32
30
  let firstDownload = true;
33
31
  if (datasToIDB?.geoDatas) {
34
32
  const currentDate = new Date();
35
- datasToIDB?.geoDatas.map((geoData) => {
33
+ datasToIDB?.geoDatas.forEach((geoData) => {
36
34
  if (typeof geoData.triggerDate === 'string') {
37
35
  geoData.triggerDate = new Date(Date.parse(geoData.triggerDate));
38
36
  }
39
37
  if (currentDate >= geoData.triggerDate) {
40
38
  if (geoData.action === 'update') {
41
39
  const insertEvent = `${geoData.source || InsertSourceInsertDBEnum.System} (${geoData.triggerDate})`;
42
- geoData.urls.map((url) => {
43
- datas$.push(this.geoDBService.getByID(url).pipe(concatMap((res) => {
40
+ geoData.urls.forEach((url) => {
41
+ datas$.push(geoDB.getGeoDBData(url).pipe(concatMap((res) => {
44
42
  if (res?.insertEvent !== insertEvent) {
45
43
  if (firstDownload) {
46
44
  downloadMessage = this.messageService.info('igo.geo.indexedDb.data-download-start', undefined, {
@@ -64,7 +62,7 @@ export class ConfigFileToGeoDBService {
64
62
  }), concatMap((r) => {
65
63
  if (isZip) {
66
64
  const observables$ = [
67
- this.geoDBService.update(url, url, {}, InsertSourceInsertDBEnum.System, insertEvent)
65
+ geoDB.update(url, url, {}, InsertSourceInsertDBEnum.System, insertEvent)
68
66
  ];
69
67
  JSZip.loadAsync(r).then((zipped) => {
70
68
  zipped.forEach((relativePath) => {
@@ -82,14 +80,14 @@ export class ConfigFileToGeoDBService {
82
80
  ? ''
83
81
  : '/') +
84
82
  relativePath;
85
- observables$.push(this.geoDBService.update(zippedUrl, url, geojson, InsertSourceInsertDBEnum.System, insertEvent));
83
+ observables$.push(geoDB.update(zippedUrl, url, geojson, InsertSourceInsertDBEnum.System, insertEvent));
86
84
  });
87
85
  }
88
86
  });
89
87
  });
90
88
  return zip(observables$);
91
89
  }
92
- return this.geoDBService.update(url, url, r, InsertSourceInsertDBEnum.System, insertEvent);
90
+ return geoDB.update(url, url, r, InsertSourceInsertDBEnum.System, insertEvent);
93
91
  }));
94
92
  }
95
93
  else {
@@ -99,8 +97,8 @@ export class ConfigFileToGeoDBService {
99
97
  });
100
98
  }
101
99
  else if (geoData.action === 'delete') {
102
- geoData.urls.map((url) => {
103
- datas$.push(this.geoDBService.deleteByKey(url));
100
+ geoData.urls.forEach((url) => {
101
+ datas$.push(geoDB.delete(url));
104
102
  });
105
103
  }
106
104
  }
@@ -121,10 +119,10 @@ export class ConfigFileToGeoDBService {
121
119
  const regex = /(zip)$/;
122
120
  return typeof value === 'string' && regex.test(value.toLowerCase());
123
121
  }
124
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ConfigFileToGeoDBService, deps: [{ token: i1.HttpClient }, { token: i2.GeoDBService }, { token: i3.MessageService }], target: i0.ɵɵFactoryTarget.Injectable });
125
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ConfigFileToGeoDBService });
122
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ConfigFileToGeoDBService, deps: [{ token: i1.HttpClient }, { token: i2.MessageService }], target: i0.ɵɵFactoryTarget.Injectable });
123
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ConfigFileToGeoDBService });
126
124
  }
127
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ConfigFileToGeoDBService, decorators: [{
125
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ConfigFileToGeoDBService, decorators: [{
128
126
  type: Injectable
129
- }], ctorParameters: () => [{ type: i1.HttpClient }, { type: i2.GeoDBService }, { type: i3.MessageService }] });
130
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnRmlsZVRvR2VvREIuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2dlby9zcmMvbGliL29mZmxpbmUvZ2VvREIvY29uZmlnRmlsZVRvR2VvREIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFxQixNQUFNLHNCQUFzQixDQUFDO0FBQ3JFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFM0MsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRXBELE9BQU8sRUFBRSxPQUFPLElBQUksS0FBSyxFQUFFLE1BQU0sT0FBTyxDQUFDO0FBRXpDLE9BQU8sRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9CLE9BQU8sRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFdkQsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXpELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQzs7Ozs7QUFHL0MsTUFBTSxPQUFPLHdCQUF3QjtJQUV6QjtJQUNBO0lBQ0E7SUFIVixZQUNVLElBQWdCLEVBQ2hCLFlBQTBCLEVBQzFCLGNBQThCO1FBRjlCLFNBQUksR0FBSixJQUFJLENBQVk7UUFDaEIsaUJBQVksR0FBWixZQUFZLENBQWM7UUFDMUIsbUJBQWMsR0FBZCxjQUFjLENBQWdCO0lBQ3JDLENBQUM7SUFFSixJQUFJLENBQUMsR0FBVztRQUNkLElBQUksZUFBaUMsQ0FBQztRQUN0QyxJQUFJLENBQUMsSUFBSTthQUNOLEdBQUcsQ0FBQyxHQUFHLENBQUM7YUFDUixJQUFJLENBQ0gsVUFBVSxDQUFDLENBQUMsS0FBd0IsRUFBRSxFQUFFO1lBQ3RDLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLGdC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QUFLLFFBQVEsSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO0lBQ3RFLENBQUM7d0dBOUpVLHdCQUF3Qjs0R0FBeEIsd0JBQXdCOzs0RkFBeEIsd0JBQXdCO2tCQURwQyxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cENsaWVudCwgSHR0cEVycm9yUmVzcG9uc2UgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IE1lc3NhZ2VTZXJ2aWNlIH0gZnJvbSAnQGlnbzIvY29yZS9tZXNzYWdlJztcblxuaW1wb3J0IHsgZGVmYXVsdCBhcyBKU1ppcCB9IGZyb20gJ2pzemlwJztcbmltcG9ydCB7IEFjdGl2ZVRvYXN0IH0gZnJvbSAnbmd4LXRvYXN0cic7XG5pbXBvcnQgeyBvZiwgemlwIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBjYXRjaEVycm9yLCBjb25jYXRNYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IEluc2VydFNvdXJjZUluc2VydERCRW51bSB9IGZyb20gJy4vZ2VvREIuZW51bXMnO1xuaW1wb3J0IHsgRGF0YXNUb0lEQiwgR2VvREJEYXRhIH0gZnJvbSAnLi9nZW9EQi5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgR2VvREJTZXJ2aWNlIH0gZnJvbSAnLi9nZW9EQi5zZXJ2aWNlJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIENvbmZpZ0ZpbGVUb0dlb0RCU2VydmljZSB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgaHR0cDogSHR0cENsaWVudCxcbiAgICBwcml2YXRlIGdlb0RCU2VydmljZTogR2VvREJTZXJ2aWNlLFxuICAgIHByaXZhdGUgbWVzc2FnZVNlcnZpY2U6IE1lc3NhZ2VTZXJ2aWNlXG4gICkge31cblxuICBsb2FkKHVybDogc3RyaW5nKSB7XG4gICAgbGV0IGRvd25sb2FkTWVzc2FnZTogQWN0aXZlVG9hc3Q8YW55PjtcbiAgICB0aGlzLmh0dHBcbiAgICAgIC5nZXQodXJsKVxuICAgICAgLnBpcGUoXG4gICAgICAgIGNhdGNoRXJyb3IoKGVycm9yOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4ge1xuICAgICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuZXJyb3IoYEdlb0RhdGEgZmlsZSAke3VybH0gY291bGQgbm90IGJlIHJlYWRgKTtcbiAgICAgICAgICBlcnJvci5lcnJvci5jYXVnaHQgPSB0cnVlO1xuICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICB9KSxcbiAgICAgICAgY29uY2F0TWFwKChkYXRhc1RvSURCOiBEYXRhc1RvSURCKSA9PiB7XG4gICAgICAgICAgY29uc3QgZGF0YXMkID0gW107XG4gICAgICAgICAgbGV0IGZpcnN0RG93bmxvYWQgPSB0cnVlO1xuICAgICAgICAgIGlmIChkYXRhc1RvSURCPy5nZW9EYXRhcykge1xuICAgICAgICAgICAgY29uc3QgY3VycmVudERhdGUgPSBuZXcgRGF0ZSgpO1xuICAgICAgICAgICAgZGF0YXNUb0lEQj8uZ2VvRGF0YXMubWFwKChnZW9EYXRhKSA9PiB7XG4gICAgICAgICAgICAgIGlmICh0eXBlb2YgZ2VvRGF0YS50cmlnZ2VyRGF0ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICBnZW9EYXRhLnRyaWdnZXJEYXRlID0gbmV3IERhdGUoRGF0ZS5wYXJzZShnZW9EYXRhLnRyaWdnZXJEYXRlKSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKGN1cnJlbnREYXRlID49IGdlb0RhdGEudHJpZ2dlckRhdGUpIHtcbiAgICAgICAgICAgICAgICBpZiAoZ2VvRGF0YS5hY3Rpb24gPT09ICd1cGRhdGUnKSB7XG4gICAgICAgICAgICAgICAgICBjb25zdCBpbnNlcnRFdmVudCA9IGAke1xuICAgICAgICAgICAgICAgICAgICBnZW9EYXRhLnNvdXJjZSB8fCBJbnNlcnRTb3VyY2VJbnNlcnREQkVudW0uU3lzdGVtXG4gICAgICAgICAgICAgICAgICB9ICgke2dlb0RhdGEudHJpZ2dlckRhdGV9KWA7XG4gICAgICAgICAgICAgICAgICBnZW9EYXRhLnVybHMubWFwKCh1cmwpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgZGF0YXMkLnB1c2goXG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5nZW9EQlNlcnZpY2UuZ2V0QnlJRCh1cmwpLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25jYXRNYXAoKHJlczogR2VvREJEYXRhKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXM/Lmluc2VydEV2ZW50ICE9PSBpbnNlcnRFdmVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmaXJzdERvd25sb2FkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3dubG9hZE1lc3NhZ2UgPSB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmluZm8oXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdpZ28uZ2VvLmluZGV4ZWREYi5kYXRhLWRvd25sb2FkLXN0YXJ0JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZVRpbWVPdXQ6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvZ3Jlc3NCYXI6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsb3NlQnV0dG9uOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcFRvRGlzbWlzczogZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpcnN0RG93bmxvYWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHJlc3BvbnNlVHlwZTogYW55ID0gJ2pzb24nO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGlzWmlwID0gdGhpcy5pc1ppcCh1cmwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc1ppcCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlID0gJ2FycmF5YnVmZmVyJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQodXJsLCB7IHJlc3BvbnNlVHlwZSB9KS5waXBlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3I6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UucmVtb3ZlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvd25sb2FkTWVzc2FnZS50b2FzdElkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuZXJyb3IoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2lnby5nZW8uaW5kZXhlZERiLmRhdGEtZG93bmxvYWQtZmFpbGVkJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyB0aW1lT3V0OiA0MDAwMCB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IuZXJyb3IuY2F1Z2h0ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmNhdE1hcCgocikgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNaaXApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvYnNlcnZhYmxlcyQgPSBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmdlb0RCU2VydmljZS51cGRhdGUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7fSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5zZXJ0U291cmNlSW5zZXJ0REJFbnVtLlN5c3RlbSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0RXZlbnRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTWmlwLmxvYWRBc3luYyhyKS50aGVuKCh6aXBwZWQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHppcHBlZC5mb3JFYWNoKChyZWxhdGl2ZVBhdGgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbGF0aXZlUGF0aFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnRvTG9jYWxlTG93ZXJDYXNlKClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5lbmRzV2l0aCgnLmdlb2pzb24nKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB6aXBwZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5maWxlKHJlbGF0aXZlUGF0aClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5hc3luYygndGV4dCcpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAudGhlbigocikgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnZW9qc29uID0gSlNPTi5wYXJzZShyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3ViVXJsID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZW9EYXRhLnppcHBlZEJhc2VVcmwgfHwgJyc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHppcHBlZFVybCA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ViVXJsICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3ViVXJsLmVuZHNXaXRoKCcvJylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gJydcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJy8nKSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVsYXRpdmVQYXRoO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYnNlcnZhYmxlcyQucHVzaChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmdlb0RCU2VydmljZS51cGRhdGUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB6aXBwZWRVcmwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZW9qc29uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5zZXJ0U291cmNlSW5zZXJ0REJFbnVtLlN5c3RlbSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc2VydEV2ZW50XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB6aXAob2JzZXJ2YWJsZXMkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5nZW9EQlNlcnZpY2UudXBkYXRlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnNlcnRTb3VyY2VJbnNlcnREQkVudW0uU3lzdGVtLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc2VydEV2ZW50XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9mKGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGdlb0RhdGEuYWN0aW9uID09PSAnZGVsZXRlJykge1xuICAgICAgICAgICAgICAgICAgZ2VvRGF0YS51cmxzLm1hcCgodXJsKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGFzJC5wdXNoKHRoaXMuZ2VvREJTZXJ2aWNlLmRlbGV0ZUJ5S2V5KHVybCkpO1xuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHppcCguLi5kYXRhcyQpO1xuICAgICAgICB9KVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIGlmIChkb3dubG9hZE1lc3NhZ2UpIHtcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UucmVtb3ZlKGRvd25sb2FkTWVzc2FnZS50b2FzdElkKTtcbiAgICAgICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2Uuc3VjY2VzcyhcbiAgICAgICAgICAgICAgJ2lnby5nZW8uaW5kZXhlZERiLmRhdGEtZG93bmxvYWQtY29tcGxldGVkJyxcbiAgICAgICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgICAgICB7IHRpbWVPdXQ6IDQwMDAwIH1cbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSwgMjUwMCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBpc1ppcCh2YWx1ZSkge1xuICAgIGNvbnN0IHJlZ2V4ID0gLyh6aXApJC87XG4gICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiYgcmVnZXgudGVzdCh2YWx1ZS50b0xvd2VyQ2FzZSgpKTtcbiAgfVxufVxuIl19
127
+ }], ctorParameters: () => [{ type: i1.HttpClient }, { type: i2.MessageService }] });
128
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnRmlsZVRvR2VvREIuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2dlby9zcmMvbGliL29mZmxpbmUvZ2VvREIvY29uZmlnRmlsZVRvR2VvREIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFxQixNQUFNLHNCQUFzQixDQUFDO0FBQ3JFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFM0MsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRXBELE9BQU8sRUFBRSxPQUFPLElBQUksS0FBSyxFQUFFLE1BQU0sT0FBTyxDQUFDO0FBRXpDLE9BQU8sRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9CLE9BQU8sRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFdkQsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUNoQyxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxlQUFlLENBQUM7Ozs7QUFJekQsTUFBTSxPQUFPLHdCQUF3QjtJQUV6QjtJQUNBO0lBRlYsWUFDVSxJQUFnQixFQUNoQixjQUE4QjtRQUQ5QixTQUFJLEdBQUosSUFBSSxDQUFZO1FBQ2hCLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtJQUNyQyxDQUFDO0lBRUosSUFBSSxDQUFDLE9BQWU7UUFDbEIsTUFBTSxLQUFLLEdBQUcsSUFBSSxLQUFLLEVBQUUsQ0FBQztRQUMxQixJQUFJLGVBQWlDLENBQUM7UUFDdEMsSUFBSSxDQUFDLElBQUk7YUFDTixHQUFHLENBQUMsT0FBTyxDQUFDO2FBQ1osSUFBSSxDQUNILFVBQVUsQ0FBQyxDQUFDLEtBQXdCLEVBQUUsRUFBRTtZQUN0QyxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FDdkIsZ0JBQWdC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QUMsQ0FBQztJQUN0RSxDQUFDO3dHQWhLVSx3QkFBd0I7NEdBQXhCLHdCQUF3Qjs7NEZBQXhCLHdCQUF3QjtrQkFEcEMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBDbGllbnQsIEh0dHBFcnJvclJlc3BvbnNlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBNZXNzYWdlU2VydmljZSB9IGZyb20gJ0BpZ28yL2NvcmUvbWVzc2FnZSc7XG5cbmltcG9ydCB7IGRlZmF1bHQgYXMgSlNaaXAgfSBmcm9tICdqc3ppcCc7XG5pbXBvcnQgeyBBY3RpdmVUb2FzdCB9IGZyb20gJ25neC10b2FzdHInO1xuaW1wb3J0IHsgb2YsIHppcCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgY2F0Y2hFcnJvciwgY29uY2F0TWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBHZW9EQiB9IGZyb20gJy4vZ2VvREInO1xuaW1wb3J0IHsgSW5zZXJ0U291cmNlSW5zZXJ0REJFbnVtIH0gZnJvbSAnLi9nZW9EQi5lbnVtcyc7XG5pbXBvcnQgeyBEYXRhc1RvSURCLCBHZW9EQkRhdGEgfSBmcm9tICcuL2dlb0RCLmludGVyZmFjZSc7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBDb25maWdGaWxlVG9HZW9EQlNlcnZpY2Uge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQsXG4gICAgcHJpdmF0ZSBtZXNzYWdlU2VydmljZTogTWVzc2FnZVNlcnZpY2VcbiAgKSB7fVxuXG4gIGxvYWQodXJsRmlsZTogc3RyaW5nKSB7XG4gICAgY29uc3QgZ2VvREIgPSBuZXcgR2VvREIoKTtcbiAgICBsZXQgZG93bmxvYWRNZXNzYWdlOiBBY3RpdmVUb2FzdDxhbnk+O1xuICAgIHRoaXMuaHR0cFxuICAgICAgLmdldCh1cmxGaWxlKVxuICAgICAgLnBpcGUoXG4gICAgICAgIGNhdGNoRXJyb3IoKGVycm9yOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4ge1xuICAgICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuZXJyb3IoXG4gICAgICAgICAgICBgR2VvRGF0YSBmaWxlICR7dXJsRmlsZX0gY291bGQgbm90IGJlIHJlYWRgXG4gICAgICAgICAgKTtcbiAgICAgICAgICBlcnJvci5lcnJvci5jYXVnaHQgPSB0cnVlO1xuICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICB9KSxcbiAgICAgICAgY29uY2F0TWFwKChkYXRhc1RvSURCOiBEYXRhc1RvSURCKSA9PiB7XG4gICAgICAgICAgY29uc3QgZGF0YXMkID0gW107XG4gICAgICAgICAgbGV0IGZpcnN0RG93bmxvYWQgPSB0cnVlO1xuICAgICAgICAgIGlmIChkYXRhc1RvSURCPy5nZW9EYXRhcykge1xuICAgICAgICAgICAgY29uc3QgY3VycmVudERhdGUgPSBuZXcgRGF0ZSgpO1xuICAgICAgICAgICAgZGF0YXNUb0lEQj8uZ2VvRGF0YXMuZm9yRWFjaCgoZ2VvRGF0YSkgPT4ge1xuICAgICAgICAgICAgICBpZiAodHlwZW9mIGdlb0RhdGEudHJpZ2dlckRhdGUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgZ2VvRGF0YS50cmlnZ2VyRGF0ZSA9IG5ldyBEYXRlKERhdGUucGFyc2UoZ2VvRGF0YS50cmlnZ2VyRGF0ZSkpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmIChjdXJyZW50RGF0ZSA+PSBnZW9EYXRhLnRyaWdnZXJEYXRlKSB7XG4gICAgICAgICAgICAgICAgaWYgKGdlb0RhdGEuYWN0aW9uID09PSAndXBkYXRlJykge1xuICAgICAgICAgICAgICAgICAgY29uc3QgaW5zZXJ0RXZlbnQgPSBgJHtcbiAgICAgICAgICAgICAgICAgICAgZ2VvRGF0YS5zb3VyY2UgfHwgSW5zZXJ0U291cmNlSW5zZXJ0REJFbnVtLlN5c3RlbVxuICAgICAgICAgICAgICAgICAgfSAoJHtnZW9EYXRhLnRyaWdnZXJEYXRlfSlgO1xuICAgICAgICAgICAgICAgICAgZ2VvRGF0YS51cmxzLmZvckVhY2goKHVybCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBkYXRhcyQucHVzaChcbiAgICAgICAgICAgICAgICAgICAgICBnZW9EQi5nZXRHZW9EQkRhdGEodXJsKS5waXBlKFxuICAgICAgICAgICAgICAgICAgICAgICAgY29uY2F0TWFwKChyZXM6IEdlb0RCRGF0YSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzPy5pbnNlcnRFdmVudCAhPT0gaW5zZXJ0RXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmlyc3REb3dubG9hZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG93bmxvYWRNZXNzYWdlID0gdGhpcy5tZXNzYWdlU2VydmljZS5pbmZvKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaWdvLmdlby5pbmRleGVkRGIuZGF0YS1kb3dubG9hZC1zdGFydCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVUaW1lT3V0OiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2dyZXNzQmFyOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbG9zZUJ1dHRvbjogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXBUb0Rpc21pc3M6IGZhbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaXJzdERvd25sb2FkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCByZXNwb25zZVR5cGU6IGFueSA9ICdqc29uJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpc1ppcCA9IHRoaXMuaXNaaXAodXJsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNaaXApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlVHlwZSA9ICdhcnJheWJ1ZmZlcic7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KHVybCwgeyByZXNwb25zZVR5cGUgfSkucGlwZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycm9yOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLnJlbW92ZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3dubG9hZE1lc3NhZ2UudG9hc3RJZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmVycm9yKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdpZ28uZ2VvLmluZGV4ZWREYi5kYXRhLWRvd25sb2FkLWZhaWxlZCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgdGltZU91dDogNDAwMDAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yLmVycm9yLmNhdWdodCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25jYXRNYXAoKHIpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzWmlwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb2JzZXJ2YWJsZXMkID0gW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2VvREIudXBkYXRlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge30sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluc2VydFNvdXJjZUluc2VydERCRW51bS5TeXN0ZW0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc2VydEV2ZW50XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU1ppcC5sb2FkQXN5bmMocikudGhlbigoemlwcGVkKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB6aXBwZWQuZm9yRWFjaCgocmVsYXRpdmVQYXRoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWxhdGl2ZVBhdGhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC50b0xvY2FsZUxvd2VyQ2FzZSgpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZW5kc1dpdGgoJy5nZW9qc29uJylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgemlwcGVkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZmlsZShyZWxhdGl2ZVBhdGgpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuYXN5bmMoJ3RleHQnKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnRoZW4oKHIpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2VvanNvbiA9IEpTT04ucGFyc2Uocik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN1YlVybCA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2VvRGF0YS56aXBwZWRCYXNlVXJsIHx8ICcnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB6aXBwZWRVcmwgPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YlVybCArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN1YlVybC5lbmRzV2l0aCgnLycpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/ICcnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICcvJykgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbGF0aXZlUGF0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JzZXJ2YWJsZXMkLnB1c2goXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2VvREIudXBkYXRlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgemlwcGVkVXJsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2VvanNvbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluc2VydFNvdXJjZUluc2VydERCRW51bS5TeXN0ZW0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnNlcnRFdmVudFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gemlwKG9ic2VydmFibGVzJCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdlb0RCLnVwZGF0ZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5zZXJ0U291cmNlSW5zZXJ0REJFbnVtLlN5c3RlbSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnNlcnRFdmVudFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvZihmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChnZW9EYXRhLmFjdGlvbiA9PT0gJ2RlbGV0ZScpIHtcbiAgICAgICAgICAgICAgICAgIGdlb0RhdGEudXJscy5mb3JFYWNoKCh1cmwpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgZGF0YXMkLnB1c2goZ2VvREIuZGVsZXRlKHVybCkpO1xuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHppcCguLi5kYXRhcyQpO1xuICAgICAgICB9KVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIGlmIChkb3dubG9hZE1lc3NhZ2UpIHtcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UucmVtb3ZlKGRvd25sb2FkTWVzc2FnZS50b2FzdElkKTtcbiAgICAgICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2Uuc3VjY2VzcyhcbiAgICAgICAgICAgICAgJ2lnby5nZW8uaW5kZXhlZERiLmRhdGEtZG93bmxvYWQtY29tcGxldGVkJyxcbiAgICAgICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgICAgICB7IHRpbWVPdXQ6IDQwMDAwIH1cbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSwgMjUwMCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBpc1ppcCh2YWx1ZSkge1xuICAgIGNvbnN0IHJlZ2V4ID0gLyh6aXApJC87XG4gICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiYgcmVnZXgudGVzdCh2YWx1ZS50b0xvd2VyQ2FzZSgpKTtcbiAgfVxufVxuIl19
@@ -0,0 +1,146 @@
1
+ import { Compression } from '@igo2/utils';
2
+ import { concatMap, first, from, map, mergeMap, of, switchMap, zip } from 'rxjs';
3
+ import { createIndexedDb } from '../shared/indexed-db.utils';
4
+ export class GeoDB {
5
+ db$;
6
+ compression = new Compression();
7
+ collisionsMap = new Map();
8
+ _newData = 0;
9
+ revertObservablesSubscription;
10
+ constructor() {
11
+ this.db$ = createIndexedDb();
12
+ }
13
+ /**
14
+ * Only blob can be compressed
15
+ * @param url
16
+ * @param regionID
17
+ * @param object object to handle
18
+ * @param insertSource type of event user or system
19
+ * @param insertEvent Name of the event where the insert has been triggered
20
+ * @returns
21
+ */
22
+ update(url, regionID, object, insertSource, insertEvent) {
23
+ const object$ = object instanceof Blob
24
+ ? this.compression.compressBlob(object)
25
+ : of(object);
26
+ const compress = object instanceof Blob ? true : false;
27
+ let geoDBData;
28
+ const a = this.db$.pipe(switchMap((db) => {
29
+ return object$.pipe(first(), switchMap((object) => {
30
+ geoDBData = {
31
+ url,
32
+ regionID,
33
+ object: object,
34
+ compressed: compress,
35
+ insertSource,
36
+ insertEvent
37
+ };
38
+ return this.getGeoDBData(url);
39
+ }), concatMap((dbObject) => {
40
+ if (!dbObject) {
41
+ this._newData++;
42
+ return from(db.add('geoData', geoDBData)).pipe(map(() => geoDBData));
43
+ }
44
+ else {
45
+ const currentRegionID = dbObject.regionID;
46
+ if (currentRegionID !== regionID) {
47
+ const collisions = this.collisionsMap.get(currentRegionID);
48
+ if (collisions !== undefined) {
49
+ collisions.push(dbObject.url);
50
+ this.collisionsMap.set(currentRegionID, collisions);
51
+ }
52
+ else {
53
+ this.collisionsMap.set(currentRegionID, [dbObject.url]);
54
+ }
55
+ }
56
+ return this.customUpdate(geoDBData);
57
+ }
58
+ }));
59
+ }));
60
+ return a;
61
+ }
62
+ customUpdate(geoDBData) {
63
+ const b = this.delete(geoDBData.url).pipe(mergeMap(() => this.add(geoDBData)));
64
+ return b;
65
+ }
66
+ add(geoDBData) {
67
+ return this.db$.pipe(switchMap((db) => from(db?.add('geoData', geoDBData)).pipe(map(() => geoDBData))));
68
+ }
69
+ put(geoDBData) {
70
+ return this.db$.pipe(switchMap((db) => from(db?.put('geoData', geoDBData)).pipe(map(() => geoDBData))));
71
+ }
72
+ getGeoDBData(url) {
73
+ return this.db$.pipe(switchMap((db) => from(db?.get('geoData', url))));
74
+ }
75
+ get(url) {
76
+ return this.getGeoDBData(url).pipe(mergeMap((data) => {
77
+ const rObj = !data?.compressed
78
+ ? data?.object
79
+ : this.compression.decompressBlob(data?.object);
80
+ return of(rObj);
81
+ }));
82
+ }
83
+ delete(key) {
84
+ return this.db$.pipe(switchMap((db) => from(db?.delete('geoData', key))), map(() => {
85
+ {
86
+ return { key };
87
+ }
88
+ }));
89
+ }
90
+ /** @deprecated Use delete method instead*/
91
+ deleteByKey(key) {
92
+ return this.delete(key);
93
+ }
94
+ getRegionCountByID(id) {
95
+ return this.getRegionByID(id).pipe(switchMap((datas) => {
96
+ return of(datas.length);
97
+ }));
98
+ }
99
+ getRegionByID(id) {
100
+ if (!id) {
101
+ return;
102
+ }
103
+ const IDBKey = IDBKeyRange.only(id);
104
+ return this.db$.pipe(switchMap((db) => from(db?.getAllFromIndex('geoData', 'regionID-idx', IDBKey))));
105
+ }
106
+ deleteByRegionID(id) {
107
+ if (!id) {
108
+ return;
109
+ }
110
+ return this.db$.pipe(switchMap((db) => {
111
+ const tx = db.transaction('geoData', 'readwrite');
112
+ return of(tx);
113
+ }), mergeMap((tx) => this.getRegionByID(id).pipe(concatMap((datas) => {
114
+ const promises = datas.map((data) => tx.store.delete(data.url));
115
+ promises.push(tx.done);
116
+ return from(Promise.all(promises));
117
+ }))));
118
+ }
119
+ resetCounters() {
120
+ this.resetCollisionsMap();
121
+ this._newData = 0;
122
+ }
123
+ resetCollisionsMap() {
124
+ this.collisionsMap = new Map();
125
+ }
126
+ revertCollisions() {
127
+ if (this.revertObservablesSubscription) {
128
+ this.revertObservablesSubscription.unsubscribe();
129
+ }
130
+ const revertObservables = [];
131
+ for (const [regionID, collisions] of this.collisionsMap) {
132
+ for (const url of collisions) {
133
+ revertObservables.push(this.getGeoDBData(url).pipe(first(), concatMap((dbObject) => {
134
+ const updatedObject = dbObject;
135
+ updatedObject.regionID = regionID;
136
+ return this.customUpdate(updatedObject);
137
+ })));
138
+ }
139
+ }
140
+ this.revertObservablesSubscription = zip(...revertObservables).subscribe();
141
+ }
142
+ get newData() {
143
+ return this._newData;
144
+ }
145
+ }
146
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VvREIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9nZW8vc3JjL2xpYi9vZmZsaW5lL2dlb0RCL2dlb0RCLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBa0IsV0FBVyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRzFELE9BQU8sRUFHTCxTQUFTLEVBQ1QsS0FBSyxFQUNMLElBQUksRUFDSixHQUFHLEVBQ0gsUUFBUSxFQUNSLEVBQUUsRUFDRixTQUFTLEVBQ1QsR0FBRyxFQUNKLE1BQU0sTUFBTSxDQUFDO0FBR2QsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBSTdELE1BQU0sT0FBTyxLQUFLO0lBQ1IsR0FBRyxDQUF3QztJQUMzQyxXQUFXLEdBQUcsSUFBSSxXQUFXLEVBQUUsQ0FBQztJQUNqQyxhQUFhLEdBQUcsSUFBSSxHQUFHLEVBQTZCLENBQUM7SUFDckQsUUFBUSxHQUFHLENBQUMsQ0FBQztJQUNaLDZCQUE2QixDQUFlO0lBRXBEO1FBQ0UsSUFBSSxDQUFDLEdBQUcsR0FBRyxlQUFlLEVBQUUsQ0FBQztJQUMvQixDQUFDO0lBRUQ7Ozs7Ozs7O09BUUc7SUFDSCxNQUFNLENBQ0osR0FBVyxFQUNYLFFBQXlCLEVBQ3pCLE1BQXFCLEVBQ3JCLFlBQXNDLEVBQ3RDLFdBQW1CO1FBRW5CLE1BQU0sT0FBTyxHQUNYLE1BQU0sWUFBWSxJQUFJO1lBQ3BCLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUM7WUFDdkMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNqQixNQUFNLFFBQVEsR0FBRyxNQUFNLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztRQUV2RCxJQUFJLFNBQW9CLENBQUM7UUFDekIsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFD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QUMsNkJBQTZCLEdBQUcsR0FBRyxDQUFDLEdBQUcsaUJBQWlCLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUM3RSxDQUFDO0lBRUQsSUFBSSxPQUFPO1FBQ1QsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDO0lBQ3ZCLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXByZXNzZWREYXRhLCBDb21wcmVzc2lvbiB9IGZyb20gJ0BpZ28yL3V0aWxzJztcblxuaW1wb3J0IHsgSURCUERhdGFiYXNlIH0gZnJvbSAnaWRiJztcbmltcG9ydCB7XG4gIE9ic2VydmFibGUsXG4gIFN1YnNjcmlwdGlvbixcbiAgY29uY2F0TWFwLFxuICBmaXJzdCxcbiAgZnJvbSxcbiAgbWFwLFxuICBtZXJnZU1hcCxcbiAgb2YsXG4gIHN3aXRjaE1hcCxcbiAgemlwXG59IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBJZ29EQlNjaGVtYSB9IGZyb20gJy4uL3NoYXJlZC9pbmRleGVkLWRiLmludGVyZmFjZSc7XG5pbXBvcnQgeyBjcmVhdGVJbmRleGVkRGIgfSBmcm9tICcuLi9zaGFyZWQvaW5kZXhlZC1kYi51dGlscyc7XG5pbXBvcnQgeyBJbnNlcnRTb3VyY2VJbnNlcnREQkVudW0gfSBmcm9tICcuL2dlb0RCLmVudW1zJztcbmltcG9ydCB7IEdlb0RCRGF0YSB9IGZyb20gJy4vZ2VvREIuaW50ZXJmYWNlJztcblxuZXhwb3J0IGNsYXNzIEdlb0RCIHtcbiAgcHJpdmF0ZSBkYiQ6IE9ic2VydmFibGU8SURCUERhdGFiYXNlPElnb0RCU2NoZW1hPj47XG4gIHByaXZhdGUgY29tcHJlc3Npb24gPSBuZXcgQ29tcHJlc3Npb24oKTtcbiAgcHVibGljIGNvbGxpc2lvbnNNYXAgPSBuZXcgTWFwPG51bWJlciB8IHN0cmluZywgc3RyaW5nW10+KCk7XG4gIHB1YmxpYyBfbmV3RGF0YSA9IDA7XG4gIHByaXZhdGUgcmV2ZXJ0T2JzZXJ2YWJsZXNTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLmRiJCA9IGNyZWF0ZUluZGV4ZWREYigpO1xuICB9XG5cbiAgLyoqXG4gICAqIE9ubHkgYmxvYiBjYW4gYmUgY29tcHJlc3NlZFxuICAgKiBAcGFyYW0gdXJsXG4gICAqIEBwYXJhbSByZWdpb25JRFxuICAgKiBAcGFyYW0gb2JqZWN0IG9iamVjdCB0byBoYW5kbGVcbiAgICogQHBhcmFtIGluc2VydFNvdXJjZSB0eXBlIG9mIGV2ZW50IHVzZXIgb3Igc3lzdGVtXG4gICAqIEBwYXJhbSBpbnNlcnRFdmVudCBOYW1lIG9mIHRoZSBldmVudCB3aGVyZSB0aGUgaW5zZXJ0IGhhcyBiZWVuIHRyaWdnZXJlZFxuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgdXBkYXRlKFxuICAgIHVybDogc3RyaW5nLFxuICAgIHJlZ2lvbklEOiBudW1iZXIgfCBzdHJpbmcsXG4gICAgb2JqZWN0OiBvYmplY3QgfCBCbG9iLFxuICAgIGluc2VydFNvdXJjZTogSW5zZXJ0U291cmNlSW5zZXJ0REJFbnVtLFxuICAgIGluc2VydEV2ZW50OiBzdHJpbmdcbiAgKTogT2JzZXJ2YWJsZTxHZW9EQkRhdGE+IHtcbiAgICBjb25zdCBvYmplY3QkID1cbiAgICAgIG9iamVjdCBpbnN0YW5jZW9mIEJsb2JcbiAgICAgICAgPyB0aGlzLmNvbXByZXNzaW9uLmNvbXByZXNzQmxvYihvYmplY3QpXG4gICAgICAgIDogb2Yob2JqZWN0KTtcbiAgICBjb25zdCBjb21wcmVzcyA9IG9iamVjdCBpbnN0YW5jZW9mIEJsb2IgPyB0cnVlIDogZmFsc2U7XG5cbiAgICBsZXQgZ2VvREJEYXRhOiBHZW9EQkRhdGE7XG4gICAgY29uc3QgYSA9IHRoaXMuZGIkLnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoKGRiKSA9PiB7XG4gICAgICAgIHJldHVybiBvYmplY3QkLnBpcGUoXG4gICAgICAgICAgZmlyc3QoKSxcbiAgICAgICAgICBzd2l0Y2hNYXAoKG9iamVjdCkgPT4ge1xuICAgICAgICAgICAgZ2VvREJEYXRhID0ge1xuICAgICAgICAgICAgICB1cmwsXG4gICAgICAgICAgICAgIHJlZ2lvbklELFxuICAgICAgICAgICAgICBvYmplY3Q6IG9iamVjdCxcbiAgICAgICAgICAgICAgY29tcHJlc3NlZDogY29tcHJlc3MsXG4gICAgICAgICAgICAgIGluc2VydFNvdXJjZSxcbiAgICAgICAgICAgICAgaW5zZXJ0RXZlbnRcbiAgICAgICAgICAgIH0gc2F0aXNmaWVzIEdlb0RCRGF0YTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldEdlb0RCRGF0YSh1cmwpO1xuICAgICAgICAgIH0pLFxuICAgICAgICAgIGNvbmNhdE1hcCgoZGJPYmplY3Q6IEdlb0RCRGF0YSkgPT4ge1xuICAgICAgICAgICAgaWYgKCFkYk9iamVjdCkge1xuICAgICAgICAgICAgICB0aGlzLl9uZXdEYXRhKys7XG4gICAgICAgICAgICAgIHJldHVybiBmcm9tKGRiLmFkZCgnZ2VvRGF0YScsIGdlb0RCRGF0YSkpLnBpcGUoXG4gICAgICAgICAgICAgICAgbWFwKCgpID0+IGdlb0RCRGF0YSlcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRSZWdpb25JRCA9IGRiT2JqZWN0LnJlZ2lvbklEO1xuICAgICAgICAgICAgICBpZiAoY3VycmVudFJlZ2lvbklEICE9PSByZWdpb25JRCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbGxpc2lvbnMgPSB0aGlzLmNvbGxpc2lvbnNNYXAuZ2V0KGN1cnJlbnRSZWdpb25JRCk7XG4gICAgICAgICAgICAgICAgaWYgKGNvbGxpc2lvbnMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgY29sbGlzaW9ucy5wdXNoKGRiT2JqZWN0LnVybCk7XG4gICAgICAgICAgICAgICAgICB0aGlzLmNvbGxpc2lvbnNNYXAuc2V0KGN1cnJlbnRSZWdpb25JRCwgY29sbGlzaW9ucyk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIHRoaXMuY29sbGlzaW9uc01hcC5zZXQoY3VycmVudFJlZ2lvbklELCBbZGJPYmplY3QudXJsXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJldHVybiB0aGlzLmN1c3RvbVVwZGF0ZShnZW9EQkRhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICB9KVxuICAgICk7XG4gICAgcmV0dXJuIGE7XG4gIH1cblxuICBwcml2YXRlIGN1c3RvbVVwZGF0ZShnZW9EQkRhdGE6IEdlb0RCRGF0YSk6IE9ic2VydmFibGU8R2VvREJEYXRhPiB7XG4gICAgY29uc3QgYiA9IHRoaXMuZGVsZXRlKGdlb0RCRGF0YS51cmwpLnBpcGUoXG4gICAgICBtZXJnZU1hcCgoKSA9PiB0aGlzLmFkZChnZW9EQkRhdGEpKVxuICAgICk7XG4gICAgcmV0dXJuIGI7XG4gIH1cblxuICBhZGQoZ2VvREJEYXRhOiBHZW9EQkRhdGEpOiBPYnNlcnZhYmxlPEdlb0RCRGF0YT4ge1xuICAgIHJldHVybiB0aGlzLmRiJC5waXBlKFxuICAgICAgc3dpdGNoTWFwKChkYikgPT5cbiAgICAgICAgZnJvbShkYj8uYWRkKCdnZW9EYXRhJywgZ2VvREJEYXRhKSkucGlwZShtYXAoKCkgPT4gZ2VvREJEYXRhKSlcbiAgICAgIClcbiAgICApO1xuICB9XG5cbiAgcHV0KGdlb0RCRGF0YTogR2VvREJEYXRhKTogT2JzZXJ2YWJsZTxHZW9EQkRhdGE+IHtcbiAgICByZXR1cm4gdGhpcy5kYiQucGlwZShcbiAgICAgIHN3aXRjaE1hcCgoZGIpID0+XG4gICAgICAgIGZyb20oZGI/LnB1dCgnZ2VvRGF0YScsIGdlb0RCRGF0YSkpLnBpcGUobWFwKCgpID0+IGdlb0RCRGF0YSkpXG4gICAgICApXG4gICAgKTtcbiAgfVxuXG4gIGdldEdlb0RCRGF0YSh1cmw6IHN0cmluZyk6IE9ic2VydmFibGU8R2VvREJEYXRhPiB7XG4gICAgcmV0dXJuIHRoaXMuZGIkLnBpcGUoc3dpdGNoTWFwKChkYikgPT4gZnJvbShkYj8uZ2V0KCdnZW9EYXRhJywgdXJsKSkpKTtcbiAgfVxuXG4gIGdldCh1cmw6IHN0cmluZyk6IE9ic2VydmFibGU8b2JqZWN0IHwgQmxvYj4ge1xuICAgIHJldHVybiB0aGlzLmdldEdlb0RCRGF0YSh1cmwpLnBpcGUoXG4gICAgICBtZXJnZU1hcCgoZGF0YSkgPT4ge1xuICAgICAgICBjb25zdCByT2JqID0gIWRhdGE/LmNvbXByZXNzZWRcbiAgICAgICAgICA/IGRhdGE/Lm9iamVjdFxuICAgICAgICAgIDogdGhpcy5jb21wcmVzc2lvbi5kZWNvbXByZXNzQmxvYihkYXRhPy5vYmplY3QgYXMgQ29tcHJlc3NlZERhdGEpO1xuICAgICAgICByZXR1cm4gb2Yock9iaiBhcyBvYmplY3QgfCBCbG9iKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIGRlbGV0ZShrZXk6IHN0cmluZyk6IE9ic2VydmFibGU8b2JqZWN0PiB7XG4gICAgcmV0dXJuIHRoaXMuZGIkLnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoKGRiKSA9PiBmcm9tKGRiPy5kZWxldGUoJ2dlb0RhdGEnLCBrZXkpKSksXG4gICAgICBtYXAoKCkgPT4ge1xuICAgICAgICB7XG4gICAgICAgICAgcmV0dXJuIHsga2V5IH07XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIC8qKiBAZGVwcmVjYXRlZCBVc2UgZGVsZXRlIG1ldGhvZCBpbnN0ZWFkKi9cbiAgZGVsZXRlQnlLZXkoa2V5OiBzdHJpbmcpOiBPYnNlcnZhYmxlPG9iamVjdD4ge1xuICAgIHJldHVybiB0aGlzLmRlbGV0ZShrZXkpO1xuICB9XG5cbiAgZ2V0UmVnaW9uQ291bnRCeUlEKGlkOiBudW1iZXIpOiBPYnNlcnZhYmxlPG51bWJlcj4ge1xuICAgIHJldHVybiB0aGlzLmdldFJlZ2lvbkJ5SUQoaWQpLnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoKGRhdGFzKSA9PiB7XG4gICAgICAgIHJldHVybiBvZihkYXRhcy5sZW5ndGgpO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgZ2V0UmVnaW9uQnlJRChpZDogbnVtYmVyKTogT2JzZXJ2YWJsZTxHZW9EQkRhdGFbXT4ge1xuICAgIGlmICghaWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgSURCS2V5OiBJREJLZXlSYW5nZSA9IElEQktleVJhbmdlLm9ubHkoaWQpO1xuICAgIHJldHVybiB0aGlzLmRiJC5waXBlKFxuICAgICAgc3dpdGNoTWFwKChkYikgPT5cbiAgICAgICAgZnJvbShkYj8uZ2V0QWxsRnJvbUluZGV4KCdnZW9EYXRhJywgJ3JlZ2lvbklELWlkeCcsIElEQktleSkpXG4gICAgICApXG4gICAgKTtcbiAgfVxuXG4gIGRlbGV0ZUJ5UmVnaW9uSUQoaWQ6IG51bWJlcik6IE9ic2VydmFibGU8dm9pZFtdPiB7XG4gICAgaWYgKCFpZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5kYiQucGlwZShcbiAgICAgIHN3aXRjaE1hcCgoZGIpID0+IHtcbiAgICAgICAgY29uc3QgdHggPSBkYi50cmFuc2FjdGlvbignZ2VvRGF0YScsICdyZWFkd3JpdGUnKTtcbiAgICAgICAgcmV0dXJuIG9mKHR4KTtcbiAgICAgIH0pLFxuICAgICAgbWVyZ2VNYXAoKHR4KSA9PlxuICAgICAgICB0aGlzLmdldFJlZ2lvbkJ5SUQoaWQpLnBpcGUoXG4gICAgICAgICAgY29uY2F0TWFwKChkYXRhcykgPT4ge1xuICAgICAgICAgICAgY29uc3QgcHJvbWlzZXMgPSBkYXRhcy5tYXAoKGRhdGEpID0+IHR4LnN0b3JlLmRlbGV0ZShkYXRhLnVybCkpO1xuICAgICAgICAgICAgcHJvbWlzZXMucHVzaCh0eC5kb25lKTtcbiAgICAgICAgICAgIHJldHVybiBmcm9tKFByb21pc2UuYWxsKHByb21pc2VzKSk7XG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgKVxuICAgICk7XG4gIH1cblxuICByZXNldENvdW50ZXJzKCkge1xuICAgIHRoaXMucmVzZXRDb2xsaXNpb25zTWFwKCk7XG4gICAgdGhpcy5fbmV3RGF0YSA9IDA7XG4gIH1cblxuICByZXNldENvbGxpc2lvbnNNYXAoKSB7XG4gICAgdGhpcy5jb2xsaXNpb25zTWFwID0gbmV3IE1hcCgpO1xuICB9XG5cbiAgcmV2ZXJ0Q29sbGlzaW9ucygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5yZXZlcnRPYnNlcnZhYmxlc1N1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy5yZXZlcnRPYnNlcnZhYmxlc1N1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgICBjb25zdCByZXZlcnRPYnNlcnZhYmxlczogT2JzZXJ2YWJsZTxHZW9EQkRhdGE+W10gPSBbXTtcbiAgICBmb3IgKGNvbnN0IFtyZWdpb25JRCwgY29sbGlzaW9uc10gb2YgdGhpcy5jb2xsaXNpb25zTWFwKSB7XG4gICAgICBmb3IgKGNvbnN0IHVybCBvZiBjb2xsaXNpb25zKSB7XG4gICAgICAgIHJldmVydE9ic2VydmFibGVzLnB1c2goXG4gICAgICAgICAgdGhpcy5nZXRHZW9EQkRhdGEodXJsKS5waXBlKFxuICAgICAgICAgICAgZmlyc3QoKSxcbiAgICAgICAgICAgIGNvbmNhdE1hcCgoZGJPYmplY3Q6IEdlb0RCRGF0YSkgPT4ge1xuICAgICAgICAgICAgICBjb25zdCB1cGRhdGVkT2JqZWN0ID0gZGJPYmplY3Q7XG4gICAgICAgICAgICAgIHVwZGF0ZWRPYmplY3QucmVnaW9uSUQgPSByZWdpb25JRDtcbiAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY3VzdG9tVXBkYXRlKHVwZGF0ZWRPYmplY3QpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMucmV2ZXJ0T2JzZXJ2YWJsZXNTdWJzY3JpcHRpb24gPSB6aXAoLi4ucmV2ZXJ0T2JzZXJ2YWJsZXMpLnN1YnNjcmliZSgpO1xuICB9XG5cbiAgZ2V0IG5ld0RhdGEoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fbmV3RGF0YTtcbiAgfVxufVxuIl19
@@ -1,5 +1,5 @@
1
1
  export * from './geoDB.enums';
2
2
  export * from './geoDB.interface';
3
- export * from './geoDB.service';
3
+ export * from './geoDB';
4
4
  export * from './configFileToGeoDB.service';
5
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9nZW8vc3JjL2xpYi9vZmZsaW5lL2dlb0RCL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsZUFBZSxDQUFDO0FBQzlCLGNBQWMsbUJBQW1CLENBQUM7QUFDbEMsY0FBYyxpQkFBaUIsQ0FBQztBQUNoQyxjQUFjLDZCQUE2QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9nZW9EQi5lbnVtcyc7XG5leHBvcnQgKiBmcm9tICcuL2dlb0RCLmludGVyZmFjZSc7XG5leHBvcnQgKiBmcm9tICcuL2dlb0RCLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9jb25maWdGaWxlVG9HZW9EQi5zZXJ2aWNlJztcbiJdfQ==
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9nZW8vc3JjL2xpYi9vZmZsaW5lL2dlb0RCL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsZUFBZSxDQUFDO0FBQzlCLGNBQWMsbUJBQW1CLENBQUM7QUFDbEMsY0FBYyxTQUFTLENBQUM7QUFDeEIsY0FBYyw2QkFBNkIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vZ2VvREIuZW51bXMnO1xuZXhwb3J0ICogZnJvbSAnLi9nZW9EQi5pbnRlcmZhY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9nZW9EQic7XG5leHBvcnQgKiBmcm9tICcuL2NvbmZpZ0ZpbGVUb0dlb0RCLnNlcnZpY2UnO1xuIl19
@@ -1,3 +1,3 @@
1
1
  export * from './layerDB.interface';
2
- export * from './layerDB.service';
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9nZW8vc3JjL2xpYi9vZmZsaW5lL2xheWVyREIvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxxQkFBcUIsQ0FBQztBQUNwQyxjQUFjLG1CQUFtQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9sYXllckRCLmludGVyZmFjZSc7XG5leHBvcnQgKiBmcm9tICcuL2xheWVyREIuc2VydmljZSc7XG4iXX0=
2
+ export * from './layerDB';
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9nZW8vc3JjL2xpYi9vZmZsaW5lL2xheWVyREIvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxxQkFBcUIsQ0FBQztBQUNwQyxjQUFjLFdBQVcsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vbGF5ZXJEQi5pbnRlcmZhY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9sYXllckRCJztcbiJdfQ==
@@ -0,0 +1,64 @@
1
+ import { from } from 'rxjs';
2
+ import { concatMap, first, map, mergeMap, switchMap } from 'rxjs/operators';
3
+ import { createIndexedDb } from '../shared/indexed-db.utils';
4
+ export class LayerDB {
5
+ db$;
6
+ constructor() {
7
+ this.db$ = createIndexedDb();
8
+ }
9
+ /**
10
+ * This method allow to update the stored layer into the indexeddb (layerData)
11
+ * @param layerDBData
12
+ * @returns
13
+ */
14
+ update(layerDBData) {
15
+ return this.db$.pipe(switchMap((db) => this.getByID(layerDBData.layerId).pipe(first(), concatMap((dbObject) => {
16
+ if (!dbObject) {
17
+ return from(db.add('layerData', layerDBData)).pipe(map(() => layerDBData));
18
+ }
19
+ else {
20
+ return this.customUpdate(layerDBData);
21
+ }
22
+ }))));
23
+ }
24
+ customUpdate(layerDBData) {
25
+ const b = this.delete(layerDBData.layerId).pipe(mergeMap(() => this.add(layerDBData)));
26
+ return b;
27
+ }
28
+ add(layerDBData) {
29
+ return this.db$.pipe(switchMap((db) => from(db?.add('layerData', layerDBData)).pipe(map(() => layerDBData))));
30
+ }
31
+ /**
32
+ * This method retrieve an idb layer definition
33
+ * @param layerId
34
+ * @returns
35
+ */
36
+ getByID(layerId) {
37
+ return this.db$.pipe(switchMap((db) => from(db?.get('layerData', layerId))));
38
+ }
39
+ /**
40
+ * This method delete an idb layer definition
41
+ * @param key
42
+ * @returns
43
+ */
44
+ delete(key) {
45
+ return this.db$.pipe(switchMap((db) => from(db?.delete('layerData', key))), map(() => {
46
+ {
47
+ return { key };
48
+ }
49
+ }));
50
+ }
51
+ /** @deprecated Use delete method instead*/
52
+ deleteByKey(key) {
53
+ return this.delete(key);
54
+ }
55
+ /**
56
+ * This method retrive all idb layer definition
57
+ * @param layerId
58
+ * @returns
59
+ */
60
+ getAll() {
61
+ return this.db$.pipe(switchMap((db) => from(db?.getAll('layerData'))));
62
+ }
63
+ }
64
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGF5ZXJEQi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2dlby9zcmMvbGliL29mZmxpbmUvbGF5ZXJEQi9sYXllckRCLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBYyxJQUFJLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDeEMsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUc1RSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFHN0QsTUFBTSxPQUFPLE9BQU87SUFDVixHQUFHLENBQXdDO0lBRW5EO1FBQ0UsSUFBSSxDQUFDLEdBQUcsR0FBRyxlQUFlLEVBQUUsQ0FBQztJQUMvQixDQUFDO0lBQ0Q7Ozs7T0FJRztJQUNILE1BQU0sQ0FBQyxXQUF3QjtRQUM3QixPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUNsQixTQUFTLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUNmLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FDcEMsS0FBSyxFQUFFLEVBQ1AsU0FBUyxDQUFDLENBQUMsUUFBcUIsRUFBRSxFQUFFO1lBQ2xDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFDZCxPQUFPLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FDaEQsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLFdBQVcsQ0FBQyxDQUN2QixDQUFDO1lBQ0osQ0FBQztpQkFBTSxDQUFDO2dCQUNOLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUN4QyxDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQ0gsQ0FDRixDQUNGLENBQUM7SUFDSixDQUFDO0lBRU8sWUFBWSxDQUFDLFdBQXdCO1FBQzNDLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FDN0MsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FDdEMsQ0FBQztRQUNGLE9BQU8sQ0FBQyxDQUFDO0lBQ1gsQ0FBQztJQUVELEdBQUcsQ0FBQyxXQUF3QjtRQUMxQixPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUNsQixTQUFTLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUNmLElBQUksQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLFdBQVcsRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FDckUsQ0FDRixDQUFDO0lBQ0osQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxPQUFPLENBQUMsT0FBZTtRQUNyQixPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUNsQixTQUFTLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLFdBQVcsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQ3ZELENBQUM7SUFDSixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILE1BQU0sQ0FBQyxHQUFXO1FBQ2hCLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQ2xCLFNBQVMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUMsV0FBVyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFDckQsR0FBRyxDQUFDLEdBQUcsRUFBRTtZQUNQLENBQUM7Z0JBQ0MsT0FBTyxFQUFFLEdBQUcsRUFBRSxDQUFDO1lBQ2pCLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FDSCxDQUFDO0lBQ0osQ0FBQztJQUVELDJDQUEyQztJQUMzQyxXQUFXLENBQUMsR0FBVztRQUNyQixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDMUIsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxNQUFNO1FBQ0osT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3pFLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IElEQlBEYXRhYmFzZSB9IGZyb20gJ2lkYic7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBmcm9tIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBjb25jYXRNYXAsIGZpcnN0LCBtYXAsIG1lcmdlTWFwLCBzd2l0Y2hNYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IElnb0RCU2NoZW1hIH0gZnJvbSAnLi4vc2hhcmVkL2luZGV4ZWQtZGIuaW50ZXJmYWNlJztcbmltcG9ydCB7IGNyZWF0ZUluZGV4ZWREYiB9IGZyb20gJy4uL3NoYXJlZC9pbmRleGVkLWRiLnV0aWxzJztcbmltcG9ydCB7IExheWVyREJEYXRhIH0gZnJvbSAnLi9sYXllckRCLmludGVyZmFjZSc7XG5cbmV4cG9ydCBjbGFzcyBMYXllckRCIHtcbiAgcHJpdmF0ZSBkYiQ6IE9ic2VydmFibGU8SURCUERhdGFiYXNlPElnb0RCU2NoZW1hPj47XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5kYiQgPSBjcmVhdGVJbmRleGVkRGIoKTtcbiAgfVxuICAvKipcbiAgICogVGhpcyBtZXRob2QgYWxsb3cgdG8gdXBkYXRlIHRoZSBzdG9yZWQgbGF5ZXIgaW50byB0aGUgaW5kZXhlZGRiIChsYXllckRhdGEpXG4gICAqIEBwYXJhbSBsYXllckRCRGF0YVxuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgdXBkYXRlKGxheWVyREJEYXRhOiBMYXllckRCRGF0YSk6IE9ic2VydmFibGU8TGF5ZXJEQkRhdGE+IHtcbiAgICByZXR1cm4gdGhpcy5kYiQucGlwZShcbiAgICAgIHN3aXRjaE1hcCgoZGIpID0+XG4gICAgICAgIHRoaXMuZ2V0QnlJRChsYXllckRCRGF0YS5sYXllcklkKS5waXBlKFxuICAgICAgICAgIGZpcnN0KCksXG4gICAgICAgICAgY29uY2F0TWFwKChkYk9iamVjdDogTGF5ZXJEQkRhdGEpID0+IHtcbiAgICAgICAgICAgIGlmICghZGJPYmplY3QpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGZyb20oZGIuYWRkKCdsYXllckRhdGEnLCBsYXllckRCRGF0YSkpLnBpcGUoXG4gICAgICAgICAgICAgICAgbWFwKCgpID0+IGxheWVyREJEYXRhKVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY3VzdG9tVXBkYXRlKGxheWVyREJEYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICApXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgY3VzdG9tVXBkYXRlKGxheWVyREJEYXRhOiBMYXllckRCRGF0YSk6IE9ic2VydmFibGU8TGF5ZXJEQkRhdGE+IHtcbiAgICBjb25zdCBiID0gdGhpcy5kZWxldGUobGF5ZXJEQkRhdGEubGF5ZXJJZCkucGlwZShcbiAgICAgIG1lcmdlTWFwKCgpID0+IHRoaXMuYWRkKGxheWVyREJEYXRhKSlcbiAgICApO1xuICAgIHJldHVybiBiO1xuICB9XG5cbiAgYWRkKGxheWVyREJEYXRhOiBMYXllckRCRGF0YSk6IE9ic2VydmFibGU8TGF5ZXJEQkRhdGE+IHtcbiAgICByZXR1cm4gdGhpcy5kYiQucGlwZShcbiAgICAgIHN3aXRjaE1hcCgoZGIpID0+XG4gICAgICAgIGZyb20oZGI/LmFkZCgnbGF5ZXJEYXRhJywgbGF5ZXJEQkRhdGEpKS5waXBlKG1hcCgoKSA9PiBsYXllckRCRGF0YSkpXG4gICAgICApXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIG1ldGhvZCByZXRyaWV2ZSBhbiBpZGIgbGF5ZXIgZGVmaW5pdGlvblxuICAgKiBAcGFyYW0gbGF5ZXJJZFxuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgZ2V0QnlJRChsYXllcklkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPExheWVyREJEYXRhPiB7XG4gICAgcmV0dXJuIHRoaXMuZGIkLnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoKGRiKSA9PiBmcm9tKGRiPy5nZXQoJ2xheWVyRGF0YScsIGxheWVySWQpKSlcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgbWV0aG9kIGRlbGV0ZSBhbiBpZGIgbGF5ZXIgZGVmaW5pdGlvblxuICAgKiBAcGFyYW0ga2V5XG4gICAqIEByZXR1cm5zXG4gICAqL1xuICBkZWxldGUoa2V5OiBzdHJpbmcpOiBPYnNlcnZhYmxlPG9iamVjdD4ge1xuICAgIHJldHVybiB0aGlzLmRiJC5waXBlKFxuICAgICAgc3dpdGNoTWFwKChkYikgPT4gZnJvbShkYj8uZGVsZXRlKCdsYXllckRhdGEnLCBrZXkpKSksXG4gICAgICBtYXAoKCkgPT4ge1xuICAgICAgICB7XG4gICAgICAgICAgcmV0dXJuIHsga2V5IH07XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIC8qKiBAZGVwcmVjYXRlZCBVc2UgZGVsZXRlIG1ldGhvZCBpbnN0ZWFkKi9cbiAgZGVsZXRlQnlLZXkoa2V5OiBzdHJpbmcpOiBPYnNlcnZhYmxlPG9iamVjdD4ge1xuICAgIHJldHVybiB0aGlzLmRlbGV0ZShrZXkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgbWV0aG9kIHJldHJpdmUgYWxsIGlkYiBsYXllciBkZWZpbml0aW9uXG4gICAqIEBwYXJhbSBsYXllcklkXG4gICAqIEByZXR1cm5zXG4gICAqL1xuICBnZXRBbGwoKTogT2JzZXJ2YWJsZTxMYXllckRCRGF0YVtdPiB7XG4gICAgcmV0dXJuIHRoaXMuZGIkLnBpcGUoc3dpdGNoTWFwKChkYikgPT4gZnJvbShkYj8uZ2V0QWxsKCdsYXllckRhdGEnKSkpKTtcbiAgfVxufVxuIl19