@igo2/geo 1.14.2 → 1.14.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 (871) hide show
  1. package/esm2020/igo2-geo.mjs +4 -4
  2. package/esm2020/lib/catalog/catalog-browser/catalog-browser-group.component.mjs +300 -300
  3. package/esm2020/lib/catalog/catalog-browser/catalog-browser-layer.component.mjs +305 -305
  4. package/esm2020/lib/catalog/catalog-browser/catalog-browser.component.mjs +246 -246
  5. package/esm2020/lib/catalog/catalog-browser/catalog-browser.module.mjs +79 -79
  6. package/esm2020/lib/catalog/catalog-library/add-catalog-dialog.component.mjs +208 -208
  7. package/esm2020/lib/catalog/catalog-library/catalog-library-item.component.mjs +78 -78
  8. package/esm2020/lib/catalog/catalog-library/catalog-library.component.mjs +216 -216
  9. package/esm2020/lib/catalog/catalog-library/catalog-library.module.mjs +94 -94
  10. package/esm2020/lib/catalog/catalog.module.mjs +52 -52
  11. package/esm2020/lib/catalog/index.mjs +4 -4
  12. package/esm2020/lib/catalog/shared/catalog.abstract.mjs +94 -94
  13. package/esm2020/lib/catalog/shared/catalog.enum.mjs +15 -15
  14. package/esm2020/lib/catalog/shared/catalog.interface.mjs +1 -1
  15. package/esm2020/lib/catalog/shared/catalog.service.mjs +605 -605
  16. package/esm2020/lib/catalog/shared/index.mjs +4 -4
  17. package/esm2020/lib/datasource/datasource.module.mjs +21 -21
  18. package/esm2020/lib/datasource/index.mjs +2 -2
  19. package/esm2020/lib/datasource/shared/capabilities.service.mjs +430 -430
  20. package/esm2020/lib/datasource/shared/datasource.service.mjs +235 -235
  21. package/esm2020/lib/datasource/shared/datasources/any-datasource.interface.mjs +1 -1
  22. package/esm2020/lib/datasource/shared/datasources/any-datasource.mjs +1 -1
  23. package/esm2020/lib/datasource/shared/datasources/arcgisrest-datasource.interface.mjs +1 -1
  24. package/esm2020/lib/datasource/shared/datasources/arcgisrest-datasource.mjs +144 -144
  25. package/esm2020/lib/datasource/shared/datasources/carto-datasource.interface.mjs +1 -1
  26. package/esm2020/lib/datasource/shared/datasources/carto-datasource.mjs +108 -108
  27. package/esm2020/lib/datasource/shared/datasources/cluster-datasource.interface.mjs +1 -1
  28. package/esm2020/lib/datasource/shared/datasources/cluster-datasource.mjs +14 -14
  29. package/esm2020/lib/datasource/shared/datasources/data.service.mjs +2 -2
  30. package/esm2020/lib/datasource/shared/datasources/datasource.interface.mjs +1 -1
  31. package/esm2020/lib/datasource/shared/datasources/datasource.mjs +28 -28
  32. package/esm2020/lib/datasource/shared/datasources/feature-datasource.interface.mjs +1 -1
  33. package/esm2020/lib/datasource/shared/datasources/feature-datasource.mjs +42 -42
  34. package/esm2020/lib/datasource/shared/datasources/imagearcgisrest-datasource.interface.mjs +1 -1
  35. package/esm2020/lib/datasource/shared/datasources/imagearcgisrest-datasource.mjs +56 -56
  36. package/esm2020/lib/datasource/shared/datasources/index.mjs +35 -35
  37. package/esm2020/lib/datasource/shared/datasources/mvt-datasource.interface.mjs +1 -1
  38. package/esm2020/lib/datasource/shared/datasources/mvt-datasource.mjs +27 -27
  39. package/esm2020/lib/datasource/shared/datasources/osm-datasource.interface.mjs +1 -1
  40. package/esm2020/lib/datasource/shared/datasources/osm-datasource.mjs +11 -11
  41. package/esm2020/lib/datasource/shared/datasources/tilearcgisrest-datasource.interface.mjs +1 -1
  42. package/esm2020/lib/datasource/shared/datasources/tilearcgisrest-datasource.mjs +48 -48
  43. package/esm2020/lib/datasource/shared/datasources/tiledebug-datasource.interface.mjs +1 -1
  44. package/esm2020/lib/datasource/shared/datasources/tiledebug-datasource.mjs +14 -14
  45. package/esm2020/lib/datasource/shared/datasources/websocket-datasource.interface.mjs +1 -1
  46. package/esm2020/lib/datasource/shared/datasources/websocket-datasource.mjs +53 -53
  47. package/esm2020/lib/datasource/shared/datasources/wfs-datasource.interface.mjs +1 -1
  48. package/esm2020/lib/datasource/shared/datasources/wfs-datasource.mjs +71 -71
  49. package/esm2020/lib/datasource/shared/datasources/wfs.service.mjs +151 -151
  50. package/esm2020/lib/datasource/shared/datasources/wms-datasource.interface.mjs +1 -1
  51. package/esm2020/lib/datasource/shared/datasources/wms-datasource.mjs +205 -205
  52. package/esm2020/lib/datasource/shared/datasources/wms-wfs.utils.mjs +206 -206
  53. package/esm2020/lib/datasource/shared/datasources/wmts-datasource.interface.mjs +1 -1
  54. package/esm2020/lib/datasource/shared/datasources/wmts-datasource.mjs +15 -15
  55. package/esm2020/lib/datasource/shared/datasources/xyz-datasource.interface.mjs +1 -1
  56. package/esm2020/lib/datasource/shared/datasources/xyz-datasource.mjs +8 -8
  57. package/esm2020/lib/datasource/shared/index.mjs +4 -4
  58. package/esm2020/lib/datasource/shared/options/index.mjs +4 -4
  59. package/esm2020/lib/datasource/shared/options/options-api.interface.mjs +1 -1
  60. package/esm2020/lib/datasource/shared/options/options-api.providers.mjs +14 -14
  61. package/esm2020/lib/datasource/shared/options/options-api.service.mjs +80 -80
  62. package/esm2020/lib/datasource/shared/options/options.service.mjs +2 -2
  63. package/esm2020/lib/datasource/utils/esri-style-generator.mjs +356 -356
  64. package/esm2020/lib/datasource/utils/index.mjs +2 -2
  65. package/esm2020/lib/datasource/utils/tilegrid.mjs +19 -19
  66. package/esm2020/lib/directions/directions-buttons/directions-buttons.component.mjs +223 -223
  67. package/esm2020/lib/directions/directions-buttons/index.mjs +1 -1
  68. package/esm2020/lib/directions/directions-inputs/directions-inputs.component.mjs +289 -289
  69. package/esm2020/lib/directions/directions-inputs/index.mjs +1 -1
  70. package/esm2020/lib/directions/directions-results/directions-results.component.mjs +195 -195
  71. package/esm2020/lib/directions/directions-results/index.mjs +1 -1
  72. package/esm2020/lib/directions/directions-sources/directions-source.interface.mjs +1 -1
  73. package/esm2020/lib/directions/directions-sources/directions-source.mjs +2 -2
  74. package/esm2020/lib/directions/directions-sources/directions-source.provider.mjs +15 -15
  75. package/esm2020/lib/directions/directions-sources/index.mjs +4 -4
  76. package/esm2020/lib/directions/directions-sources/osrm-directions-source.mjs +98 -98
  77. package/esm2020/lib/directions/directions.component.mjs +310 -310
  78. package/esm2020/lib/directions/directions.module.mjs +101 -101
  79. package/esm2020/lib/directions/index.mjs +6 -6
  80. package/esm2020/lib/directions/shared/directions-source.service.mjs +16 -16
  81. package/esm2020/lib/directions/shared/directions.enum.mjs +27 -27
  82. package/esm2020/lib/directions/shared/directions.interface.mjs +1 -1
  83. package/esm2020/lib/directions/shared/directions.service.mjs +28 -28
  84. package/esm2020/lib/directions/shared/directions.utils.mjs +508 -508
  85. package/esm2020/lib/directions/shared/index.mjs +5 -5
  86. package/esm2020/lib/directions/shared/store.mjs +23 -23
  87. package/esm2020/lib/download/download-button/download-button.component.mjs +60 -60
  88. package/esm2020/lib/download/download-button/index.mjs +1 -1
  89. package/esm2020/lib/download/download.module.mjs +41 -41
  90. package/esm2020/lib/download/index.mjs +2 -2
  91. package/esm2020/lib/download/shared/download.interface.mjs +1 -1
  92. package/esm2020/lib/download/shared/download.service.mjs +64 -64
  93. package/esm2020/lib/download/shared/index.mjs +2 -2
  94. package/esm2020/lib/draw/draw/draw-layer-popup.component.mjs +54 -54
  95. package/esm2020/lib/draw/draw/draw-popup.component.mjs +590 -590
  96. package/esm2020/lib/draw/draw/draw-shorcuts.component.mjs +47 -47
  97. package/esm2020/lib/draw/draw/draw.component.mjs +1298 -1298
  98. package/esm2020/lib/draw/draw/draw.module.mjs +112 -112
  99. package/esm2020/lib/draw/drawingTool.module.mjs +19 -19
  100. package/esm2020/lib/draw/index.mjs +2 -2
  101. package/esm2020/lib/draw/shared/draw-icon.service.mjs +26 -26
  102. package/esm2020/lib/draw/shared/draw-style.service.mjs +189 -189
  103. package/esm2020/lib/draw/shared/draw.enum.mjs +36 -36
  104. package/esm2020/lib/draw/shared/draw.interface.mjs +1 -1
  105. package/esm2020/lib/draw/shared/draw.utils.mjs +121 -121
  106. package/esm2020/lib/draw/shared/index.mjs +5 -5
  107. package/esm2020/lib/feature/feature-details/feature-details.component.mjs +404 -404
  108. package/esm2020/lib/feature/feature-details/feature-details.directive.mjs +53 -53
  109. package/esm2020/lib/feature/feature-details/feature-details.module.mjs +47 -47
  110. package/esm2020/lib/feature/feature-form/feature-form.component.mjs +111 -111
  111. package/esm2020/lib/feature/feature-form/feature-form.module.mjs +33 -33
  112. package/esm2020/lib/feature/feature.module.mjs +27 -27
  113. package/esm2020/lib/feature/index.mjs +3 -3
  114. package/esm2020/lib/feature/shared/feature.enums.mjs +8 -8
  115. package/esm2020/lib/feature/shared/feature.interfaces.mjs +1 -1
  116. package/esm2020/lib/feature/shared/feature.utils.mjs +346 -346
  117. package/esm2020/lib/feature/shared/index.mjs +6 -6
  118. package/esm2020/lib/feature/shared/store.mjs +123 -123
  119. package/esm2020/lib/feature/shared/strategies/in-map-extent.mjs +112 -112
  120. package/esm2020/lib/feature/shared/strategies/in-map-resolution.mjs +93 -93
  121. package/esm2020/lib/feature/shared/strategies/index.mjs +5 -5
  122. package/esm2020/lib/feature/shared/strategies/loading-layer.mjs +103 -103
  123. package/esm2020/lib/feature/shared/strategies/loading.mjs +132 -132
  124. package/esm2020/lib/feature/shared/strategies/selection.mjs +369 -369
  125. package/esm2020/lib/feature/shared/strategies.utils.mjs +36 -36
  126. package/esm2020/lib/filter/filter.module.mjs +288 -288
  127. package/esm2020/lib/filter/index.mjs +15 -15
  128. package/esm2020/lib/filter/ogc-filter-button/index.mjs +1 -1
  129. package/esm2020/lib/filter/ogc-filter-button/ogc-filter-button.component.mjs +139 -139
  130. package/esm2020/lib/filter/ogc-filter-form/index.mjs +1 -1
  131. package/esm2020/lib/filter/ogc-filter-form/ogc-filter-form.component.mjs +644 -644
  132. package/esm2020/lib/filter/ogc-filter-selection/index.mjs +1 -1
  133. package/esm2020/lib/filter/ogc-filter-selection/ogc-filter-selection.component.mjs +1301 -1301
  134. package/esm2020/lib/filter/ogc-filter-time/index.mjs +2 -2
  135. package/esm2020/lib/filter/ogc-filter-time/ogc-filter-time-slider.component.mjs +176 -176
  136. package/esm2020/lib/filter/ogc-filter-time/ogc-filter-time.component.mjs +897 -897
  137. package/esm2020/lib/filter/ogc-filterable-form/index.mjs +1 -1
  138. package/esm2020/lib/filter/ogc-filterable-form/ogc-filterable-form.component.mjs +58 -58
  139. package/esm2020/lib/filter/ogc-filterable-item/index.mjs +1 -1
  140. package/esm2020/lib/filter/ogc-filterable-item/ogc-filterable-item.component.mjs +306 -306
  141. package/esm2020/lib/filter/ogc-filterable-list/index.mjs +2 -2
  142. package/esm2020/lib/filter/ogc-filterable-list/ogc-filterable-list-binding.directive.mjs +30 -30
  143. package/esm2020/lib/filter/ogc-filterable-list/ogc-filterable-list.component.mjs +43 -43
  144. package/esm2020/lib/filter/shared/filterable-datasource.pipe.mjs +54 -54
  145. package/esm2020/lib/filter/shared/index.mjs +11 -11
  146. package/esm2020/lib/filter/shared/ogc-filter-time.service.mjs +71 -71
  147. package/esm2020/lib/filter/shared/ogc-filter.enum.mjs +29 -29
  148. package/esm2020/lib/filter/shared/ogc-filter.interface.mjs +1 -1
  149. package/esm2020/lib/filter/shared/ogc-filter.mjs +691 -691
  150. package/esm2020/lib/filter/shared/ogc-filter.service.mjs +45 -45
  151. package/esm2020/lib/filter/shared/spatial-filter.enum.mjs +22 -22
  152. package/esm2020/lib/filter/shared/spatial-filter.interface.mjs +1 -1
  153. package/esm2020/lib/filter/shared/spatial-filter.service.mjs +268 -268
  154. package/esm2020/lib/filter/shared/time-filter.enum.mjs +12 -12
  155. package/esm2020/lib/filter/shared/time-filter.interface.mjs +1 -1
  156. package/esm2020/lib/filter/shared/time-filter.service.mjs +106 -106
  157. package/esm2020/lib/filter/spatial-filter/spatial-filter-item/index.mjs +1 -1
  158. package/esm2020/lib/filter/spatial-filter/spatial-filter-item/spatial-filter-item.component.mjs +1088 -1088
  159. package/esm2020/lib/filter/spatial-filter/spatial-filter-list/index.mjs +1 -1
  160. package/esm2020/lib/filter/spatial-filter/spatial-filter-list/spatial-filter-list.component.mjs +207 -207
  161. package/esm2020/lib/filter/spatial-filter/spatial-filter-type/index.mjs +1 -1
  162. package/esm2020/lib/filter/spatial-filter/spatial-filter-type/spatial-filter-type.component.mjs +143 -143
  163. package/esm2020/lib/filter/time-filter-button/index.mjs +1 -1
  164. package/esm2020/lib/filter/time-filter-button/time-filter-button.component.mjs +77 -77
  165. package/esm2020/lib/filter/time-filter-form/index.mjs +1 -1
  166. package/esm2020/lib/filter/time-filter-form/time-filter-form.component.mjs +733 -733
  167. package/esm2020/lib/filter/time-filter-item/index.mjs +1 -1
  168. package/esm2020/lib/filter/time-filter-item/time-filter-item.component.mjs +118 -118
  169. package/esm2020/lib/filter/time-filter-list/index.mjs +2 -2
  170. package/esm2020/lib/filter/time-filter-list/time-filter-list-binding.directive.mjs +30 -30
  171. package/esm2020/lib/filter/time-filter-list/time-filter-list.component.mjs +38 -38
  172. package/esm2020/lib/geo.module.mjs +101 -101
  173. package/esm2020/lib/geometry/geometry-form-field/geometry-form-field-input.component.mjs +520 -520
  174. package/esm2020/lib/geometry/geometry-form-field/geometry-form-field.component.mjs +188 -188
  175. package/esm2020/lib/geometry/geometry-form-field/geometry-form-field.module.mjs +63 -63
  176. package/esm2020/lib/geometry/geometry.module.mjs +26 -26
  177. package/esm2020/lib/geometry/index.mjs +3 -3
  178. package/esm2020/lib/geometry/shared/controls/draw.mjs +313 -313
  179. package/esm2020/lib/geometry/shared/controls/index.mjs +3 -3
  180. package/esm2020/lib/geometry/shared/controls/modify.mjs +520 -520
  181. package/esm2020/lib/geometry/shared/controls/slice.mjs +176 -176
  182. package/esm2020/lib/geometry/shared/geometry.errors.mjs +25 -25
  183. package/esm2020/lib/geometry/shared/geometry.interfaces.mjs +1 -1
  184. package/esm2020/lib/geometry/shared/geometry.utils.mjs +121 -121
  185. package/esm2020/lib/geometry/shared/index.mjs +4 -4
  186. package/esm2020/lib/import-export/export-button/export-button.component.mjs +63 -63
  187. package/esm2020/lib/import-export/export-button/index.mjs +1 -1
  188. package/esm2020/lib/import-export/import-export/import-export.component.mjs +1219 -1219
  189. package/esm2020/lib/import-export/import-export/index.mjs +1 -1
  190. package/esm2020/lib/import-export/import-export.module.mjs +95 -95
  191. package/esm2020/lib/import-export/index.mjs +4 -4
  192. package/esm2020/lib/import-export/shared/drop-geo-file.directive.mjs +134 -134
  193. package/esm2020/lib/import-export/shared/export.errors.mjs +14 -14
  194. package/esm2020/lib/import-export/shared/export.interface.mjs +1 -1
  195. package/esm2020/lib/import-export/shared/export.service.mjs +194 -194
  196. package/esm2020/lib/import-export/shared/export.type.mjs +3 -3
  197. package/esm2020/lib/import-export/shared/export.utils.mjs +54 -54
  198. package/esm2020/lib/import-export/shared/import.errors.mjs +38 -38
  199. package/esm2020/lib/import-export/shared/import.interface.mjs +1 -1
  200. package/esm2020/lib/import-export/shared/import.service.mjs +214 -214
  201. package/esm2020/lib/import-export/shared/import.utils.mjs +234 -234
  202. package/esm2020/lib/import-export/shared/index.mjs +10 -10
  203. package/esm2020/lib/import-export/style-list/index.mjs +4 -4
  204. package/esm2020/lib/import-export/style-list/style-list.interface.mjs +1 -1
  205. package/esm2020/lib/import-export/style-list/style-list.module.mjs +22 -22
  206. package/esm2020/lib/import-export/style-list/style-list.provider.mjs +20 -20
  207. package/esm2020/lib/import-export/style-list/style-list.service.mjs +50 -50
  208. package/esm2020/lib/layer/index.mjs +10 -10
  209. package/esm2020/lib/layer/layer-item/index.mjs +1 -1
  210. package/esm2020/lib/layer/layer-item/layer-item.component.mjs +299 -299
  211. package/esm2020/lib/layer/layer-legend/index.mjs +1 -1
  212. package/esm2020/lib/layer/layer-legend/layer-legend.component.mjs +387 -387
  213. package/esm2020/lib/layer/layer-legend-item/index.mjs +1 -1
  214. package/esm2020/lib/layer/layer-legend-item/layer-legend-item.component.mjs +83 -83
  215. package/esm2020/lib/layer/layer-legend-list/index.mjs +2 -2
  216. package/esm2020/lib/layer/layer-legend-list/layer-legend-list-binding.directive.mjs +47 -47
  217. package/esm2020/lib/layer/layer-legend-list/layer-legend-list.component.mjs +194 -194
  218. package/esm2020/lib/layer/layer-list/index.mjs +3 -3
  219. package/esm2020/lib/layer/layer-list/layer-list-binding.directive.mjs +58 -58
  220. package/esm2020/lib/layer/layer-list/layer-list.component.mjs +1008 -1008
  221. package/esm2020/lib/layer/layer-list/layer-list.enum.mjs +18 -18
  222. package/esm2020/lib/layer/layer-list-tool/index.mjs +4 -4
  223. package/esm2020/lib/layer/layer-list-tool/layer-list-tool.component.mjs +164 -164
  224. package/esm2020/lib/layer/layer-list-tool/layer-list-tool.enum.mjs +6 -6
  225. package/esm2020/lib/layer/layer-list-tool/layer-list-tool.interface.mjs +1 -1
  226. package/esm2020/lib/layer/layer-list-tool/layer-list-tool.service.mjs +21 -21
  227. package/esm2020/lib/layer/layer.module.mjs +184 -184
  228. package/esm2020/lib/layer/shared/clusterParam.mjs +1 -1
  229. package/esm2020/lib/layer/shared/index.mjs +6 -6
  230. package/esm2020/lib/layer/shared/layer.enums.mjs +1 -1
  231. package/esm2020/lib/layer/shared/layer.service.mjs +185 -185
  232. package/esm2020/lib/layer/shared/layers/any-layer.interface.mjs +1 -1
  233. package/esm2020/lib/layer/shared/layers/any-layer.mjs +1 -1
  234. package/esm2020/lib/layer/shared/layers/image-layer.interface.mjs +1 -1
  235. package/esm2020/lib/layer/shared/layers/image-layer.mjs +67 -67
  236. package/esm2020/lib/layer/shared/layers/index.mjs +12 -12
  237. package/esm2020/lib/layer/shared/layers/layer.interface.mjs +17 -17
  238. package/esm2020/lib/layer/shared/layers/layer.mjs +163 -163
  239. package/esm2020/lib/layer/shared/layers/tile-layer.interface.mjs +1 -1
  240. package/esm2020/lib/layer/shared/layers/tile-layer.mjs +46 -46
  241. package/esm2020/lib/layer/shared/layers/vector-layer.interface.mjs +1 -1
  242. package/esm2020/lib/layer/shared/layers/vector-layer.mjs +377 -377
  243. package/esm2020/lib/layer/shared/layers/vectortile-layer.interface.mjs +1 -1
  244. package/esm2020/lib/layer/shared/layers/vectortile-layer.mjs +103 -103
  245. package/esm2020/lib/layer/shared/style.service.mjs +355 -355
  246. package/esm2020/lib/layer/shared/vector-style.interface.mjs +1 -1
  247. package/esm2020/lib/layer/style-modal/index.mjs +1 -1
  248. package/esm2020/lib/layer/style-modal/style-modal.component.mjs +287 -287
  249. package/esm2020/lib/layer/track-feature-button/index.mjs +1 -1
  250. package/esm2020/lib/layer/track-feature-button/track-feature-button.component.mjs +58 -58
  251. package/esm2020/lib/layer/utils/image-watcher.mjs +61 -61
  252. package/esm2020/lib/layer/utils/index.mjs +5 -5
  253. package/esm2020/lib/layer/utils/layer.utils.mjs +9 -9
  254. package/esm2020/lib/layer/utils/outputLegend.mjs +26 -26
  255. package/esm2020/lib/layer/utils/tile-watcher.mjs +49 -49
  256. package/esm2020/lib/layer/utils/vector-watcher.mjs +47 -47
  257. package/esm2020/lib/map/baselayers-switcher/baselayers-switcher.animation.mjs +19 -19
  258. package/esm2020/lib/map/baselayers-switcher/baselayers-switcher.component.mjs +96 -96
  259. package/esm2020/lib/map/baselayers-switcher/index.mjs +2 -2
  260. package/esm2020/lib/map/baselayers-switcher/mini-basemap.component.mjs +141 -142
  261. package/esm2020/lib/map/geolocate-button/geolocate-button.component.mjs +78 -78
  262. package/esm2020/lib/map/geolocate-button/index.mjs +1 -1
  263. package/esm2020/lib/map/home-extent-button/home-extent-button.component.mjs +62 -62
  264. package/esm2020/lib/map/home-extent-button/index.mjs +1 -1
  265. package/esm2020/lib/map/index.mjs +13 -13
  266. package/esm2020/lib/map/info-section/index.mjs +1 -1
  267. package/esm2020/lib/map/info-section/info-section.component.mjs +29 -29
  268. package/esm2020/lib/map/map-browser/index.mjs +1 -1
  269. package/esm2020/lib/map/map-browser/map-browser.component.mjs +65 -65
  270. package/esm2020/lib/map/map-center/index.mjs +1 -1
  271. package/esm2020/lib/map/map-center/map-center.component.mjs +49 -49
  272. package/esm2020/lib/map/map.module.mjs +126 -126
  273. package/esm2020/lib/map/menu-button/index.mjs +1 -1
  274. package/esm2020/lib/map/menu-button/menu-button.component.mjs +61 -61
  275. package/esm2020/lib/map/offline-button/index.mjs +1 -1
  276. package/esm2020/lib/map/offline-button/offline-button.component.mjs +75 -75
  277. package/esm2020/lib/map/rotation-button/index.mjs +1 -1
  278. package/esm2020/lib/map/rotation-button/rotation-button.component.mjs +69 -69
  279. package/esm2020/lib/map/shared/controllers/controller.mjs +41 -41
  280. package/esm2020/lib/map/shared/controllers/geolocation.mjs +307 -307
  281. package/esm2020/lib/map/shared/controllers/index.mjs +3 -3
  282. package/esm2020/lib/map/shared/controllers/view.mjs +350 -350
  283. package/esm2020/lib/map/shared/hover-feature.directive.mjs +502 -502
  284. package/esm2020/lib/map/shared/index.mjs +13 -13
  285. package/esm2020/lib/map/shared/linkedLayers.utils.mjs +237 -237
  286. package/esm2020/lib/map/shared/map-pointer-position.directive.mjs +106 -106
  287. package/esm2020/lib/map/shared/map.enums.mjs +5 -5
  288. package/esm2020/lib/map/shared/map.interface.mjs +1 -1
  289. package/esm2020/lib/map/shared/map.mjs +406 -406
  290. package/esm2020/lib/map/shared/map.service.mjs +28 -28
  291. package/esm2020/lib/map/shared/map.utils.mjs +462 -462
  292. package/esm2020/lib/map/shared/mapOffline.directive.mjs +162 -162
  293. package/esm2020/lib/map/shared/projection.interfaces.mjs +1 -1
  294. package/esm2020/lib/map/shared/projection.service.mjs +64 -64
  295. package/esm2020/lib/map/shared/projection.utils.mjs +63 -63
  296. package/esm2020/lib/map/swipe-control/index.mjs +1 -1
  297. package/esm2020/lib/map/swipe-control/swipe-control.component.mjs +192 -192
  298. package/esm2020/lib/map/utils/layer-watcher.mjs +78 -78
  299. package/esm2020/lib/map/wake-lock-button/index.mjs +1 -1
  300. package/esm2020/lib/map/wake-lock-button/wake-lock-button.component.mjs +113 -113
  301. package/esm2020/lib/map/zoom-button/index.mjs +1 -1
  302. package/esm2020/lib/map/zoom-button/zoom-button.component.mjs +39 -39
  303. package/esm2020/lib/measure/index.mjs +3 -3
  304. package/esm2020/lib/measure/measure.module.mjs +19 -19
  305. package/esm2020/lib/measure/measurer/measure-format.pipe.mjs +36 -36
  306. package/esm2020/lib/measure/measurer/measurer-dialog.component.mjs +179 -179
  307. package/esm2020/lib/measure/measurer/measurer-item.component.mjs +139 -139
  308. package/esm2020/lib/measure/measurer/measurer.component.mjs +1041 -1041
  309. package/esm2020/lib/measure/measurer/measurer.module.mjs +93 -93
  310. package/esm2020/lib/measure/shared/index.mjs +3 -3
  311. package/esm2020/lib/measure/shared/measure.enum.mjs +36 -36
  312. package/esm2020/lib/measure/shared/measure.interfaces.mjs +1 -1
  313. package/esm2020/lib/measure/shared/measure.utils.mjs +488 -488
  314. package/esm2020/lib/metadata/index.mjs +2 -2
  315. package/esm2020/lib/metadata/metadata-button/index.mjs +1 -1
  316. package/esm2020/lib/metadata/metadata-button/metadata-button.component.mjs +133 -133
  317. package/esm2020/lib/metadata/metadata.module.mjs +54 -54
  318. package/esm2020/lib/metadata/shared/index.mjs +2 -2
  319. package/esm2020/lib/metadata/shared/metadata.interface.mjs +1 -1
  320. package/esm2020/lib/metadata/shared/metadata.service.mjs +18 -18
  321. package/esm2020/lib/offline/geoDB/configFileToGeoDB.service.mjs +104 -104
  322. package/esm2020/lib/offline/geoDB/geoDB.enums.mjs +5 -5
  323. package/esm2020/lib/offline/geoDB/geoDB.interface.mjs +1 -1
  324. package/esm2020/lib/offline/geoDB/geoDB.service.mjs +166 -166
  325. package/esm2020/lib/offline/geoDB/index.mjs +4 -4
  326. package/esm2020/lib/offline/index.mjs +2 -2
  327. package/esm2020/lib/offline/shared/geo-network.service.mjs +65 -65
  328. package/esm2020/lib/offline/shared/index.mjs +1 -1
  329. package/esm2020/lib/overlay/index.mjs +1 -1
  330. package/esm2020/lib/overlay/overlay.module.mjs +22 -22
  331. package/esm2020/lib/overlay/shared/index.mjs +6 -6
  332. package/esm2020/lib/overlay/shared/overlay-marker-style.utils.mjs +68 -68
  333. package/esm2020/lib/overlay/shared/overlay.directive.mjs +32 -32
  334. package/esm2020/lib/overlay/shared/overlay.enum.mjs +7 -7
  335. package/esm2020/lib/overlay/shared/overlay.mjs +129 -129
  336. package/esm2020/lib/overlay/shared/overlay.service.mjs +26 -26
  337. package/esm2020/lib/overlay/shared/overlay.utils.mjs +102 -102
  338. package/esm2020/lib/print/index.mjs +3 -3
  339. package/esm2020/lib/print/print/print.component.mjs +125 -125
  340. package/esm2020/lib/print/print-form/index.mjs +1 -1
  341. package/esm2020/lib/print/print-form/print-form.component.mjs +427 -427
  342. package/esm2020/lib/print/print.module.mjs +64 -64
  343. package/esm2020/lib/print/shared/geopdf.mjs +57 -57
  344. package/esm2020/lib/print/shared/index.mjs +4 -4
  345. package/esm2020/lib/print/shared/print.interface.mjs +1 -1
  346. package/esm2020/lib/print/shared/print.service.mjs +933 -933
  347. package/esm2020/lib/print/shared/print.type.mjs +29 -29
  348. package/esm2020/lib/query/index.mjs +1 -1
  349. package/esm2020/lib/query/query.module.mjs +28 -28
  350. package/esm2020/lib/query/shared/index.mjs +6 -6
  351. package/esm2020/lib/query/shared/query-search-source.mjs +34 -34
  352. package/esm2020/lib/query/shared/query-search-source.providers.mjs +21 -21
  353. package/esm2020/lib/query/shared/query.directive.mjs +260 -260
  354. package/esm2020/lib/query/shared/query.enums.mjs +29 -29
  355. package/esm2020/lib/query/shared/query.interfaces.mjs +1 -1
  356. package/esm2020/lib/query/shared/query.service.mjs +732 -732
  357. package/esm2020/lib/query/shared/query.utils.mjs +36 -36
  358. package/esm2020/lib/search/index.mjs +11 -11
  359. package/esm2020/lib/search/search-bar/search-bar.component.mjs +511 -511
  360. package/esm2020/lib/search/search-bar/search-bar.module.mjs +74 -74
  361. package/esm2020/lib/search/search-bar/search-url-param.directive.mjs +34 -34
  362. package/esm2020/lib/search/search-results/save-feature-dialog.component.mjs +117 -117
  363. package/esm2020/lib/search/search-results/search-results-add-button.component.mjs +370 -370
  364. package/esm2020/lib/search/search-results/search-results-item.component.mjs +123 -123
  365. package/esm2020/lib/search/search-results/search-results.component.mjs +339 -339
  366. package/esm2020/lib/search/search-results/search-results.module.mjs +103 -103
  367. package/esm2020/lib/search/search-selector/search-selector.component.mjs +122 -122
  368. package/esm2020/lib/search/search-selector/search-selector.module.mjs +55 -55
  369. package/esm2020/lib/search/search-settings/search-settings.component.mjs +441 -441
  370. package/esm2020/lib/search/search-settings/search-settings.module.mjs +59 -59
  371. package/esm2020/lib/search/search.module.mjs +66 -66
  372. package/esm2020/lib/search/shared/index.mjs +8 -8
  373. package/esm2020/lib/search/shared/search-pointer-summary.directive.mjs +321 -321
  374. package/esm2020/lib/search/shared/search-source-service.providers.mjs +19 -19
  375. package/esm2020/lib/search/shared/search-source.service.mjs +46 -46
  376. package/esm2020/lib/search/shared/search.enums.mjs +3 -3
  377. package/esm2020/lib/search/shared/search.interfaces.mjs +1 -1
  378. package/esm2020/lib/search/shared/search.service.mjs +120 -120
  379. package/esm2020/lib/search/shared/search.utils.mjs +90 -90
  380. package/esm2020/lib/search/shared/sources/coordinates.interfaces.mjs +1 -1
  381. package/esm2020/lib/search/shared/sources/coordinates.mjs +152 -152
  382. package/esm2020/lib/search/shared/sources/coordinates.providers.mjs +39 -39
  383. package/esm2020/lib/search/shared/sources/icherche.interfaces.mjs +1 -1
  384. package/esm2020/lib/search/shared/sources/icherche.mjs +766 -766
  385. package/esm2020/lib/search/shared/sources/icherche.providers.mjs +65 -65
  386. package/esm2020/lib/search/shared/sources/ilayer.interfaces.mjs +1 -1
  387. package/esm2020/lib/search/shared/sources/ilayer.mjs +319 -319
  388. package/esm2020/lib/search/shared/sources/ilayer.providers.mjs +39 -39
  389. package/esm2020/lib/search/shared/sources/index.mjs +17 -17
  390. package/esm2020/lib/search/shared/sources/nominatim.interfaces.mjs +1 -1
  391. package/esm2020/lib/search/shared/sources/nominatim.mjs +251 -251
  392. package/esm2020/lib/search/shared/sources/nominatim.providers.mjs +22 -22
  393. package/esm2020/lib/search/shared/sources/source.interfaces.mjs +1 -1
  394. package/esm2020/lib/search/shared/sources/source.mjs +178 -178
  395. package/esm2020/lib/search/shared/sources/storedqueries.interfaces.mjs +1 -1
  396. package/esm2020/lib/search/shared/sources/storedqueries.mjs +424 -424
  397. package/esm2020/lib/search/shared/sources/storedqueries.providers.mjs +40 -40
  398. package/esm2020/lib/toast/index.mjs +1 -1
  399. package/esm2020/lib/toast/toast.component.mjs +112 -112
  400. package/esm2020/lib/toast/toast.module.mjs +44 -44
  401. package/esm2020/lib/utils/commonVectorStyle.interface.mjs +1 -1
  402. package/esm2020/lib/utils/commonVectorStyle.mjs +74 -74
  403. package/esm2020/lib/utils/googleLinks.mjs +12 -12
  404. package/esm2020/lib/utils/id-generator.mjs +109 -109
  405. package/esm2020/lib/utils/index.mjs +5 -5
  406. package/esm2020/lib/utils/osmLinks.mjs +9 -9
  407. package/esm2020/lib/wkt/index.mjs +1 -1
  408. package/esm2020/lib/wkt/shared/index.mjs +1 -1
  409. package/esm2020/lib/wkt/shared/wkt.service.mjs +224 -224
  410. package/esm2020/lib/wkt/wkt.module.mjs +21 -21
  411. package/esm2020/lib/workspace/confirmation-popup/confirmation-popup.component.mjs +47 -47
  412. package/esm2020/lib/workspace/confirmation-popup/confirmation-popup.module.mjs +35 -35
  413. package/esm2020/lib/workspace/confirmation-popup/index.mjs +2 -2
  414. package/esm2020/lib/workspace/index.mjs +7 -7
  415. package/esm2020/lib/workspace/shared/edition-workspace.mjs +279 -279
  416. package/esm2020/lib/workspace/shared/edition-workspace.service.mjs +656 -656
  417. package/esm2020/lib/workspace/shared/feature-workspace.mjs +34 -34
  418. package/esm2020/lib/workspace/shared/feature-workspace.service.mjs +149 -149
  419. package/esm2020/lib/workspace/shared/index.mjs +7 -7
  420. package/esm2020/lib/workspace/shared/wfs-workspace.mjs +34 -34
  421. package/esm2020/lib/workspace/shared/wfs-workspace.service.mjs +149 -149
  422. package/esm2020/lib/workspace/shared/wms-workspace.service.mjs +259 -259
  423. package/esm2020/lib/workspace/shared/workspace.utils.mjs +23 -23
  424. package/esm2020/lib/workspace/widgets/index.mjs +3 -3
  425. package/esm2020/lib/workspace/widgets/ogc-filter/ogc-filter.component.mjs +46 -46
  426. package/esm2020/lib/workspace/widgets/ogc-filter/ogc-filter.module.mjs +35 -35
  427. package/esm2020/lib/workspace/widgets/widgets.mjs +14 -14
  428. package/esm2020/lib/workspace/workspace-selector/workspace-selector.directive.mjs +132 -132
  429. package/esm2020/lib/workspace/workspace-selector/workspace-selector.module.mjs +27 -27
  430. package/esm2020/lib/workspace/workspace-updator/workspace-updator.directive.mjs +112 -112
  431. package/esm2020/lib/workspace/workspace-updator/workspace-updator.module.mjs +27 -27
  432. package/esm2020/lib/workspace/workspace.module.mjs +61 -61
  433. package/esm2020/public_api.mjs +54 -54
  434. package/fesm2015/igo2-geo.mjs +44986 -44986
  435. package/fesm2015/igo2-geo.mjs.map +1 -1
  436. package/fesm2020/igo2-geo.mjs +43029 -43030
  437. package/fesm2020/igo2-geo.mjs.map +1 -1
  438. package/index.d.ts +5 -5
  439. package/lib/catalog/catalog-browser/catalog-browser-group.component.d.ts +126 -126
  440. package/lib/catalog/catalog-browser/catalog-browser-layer.component.d.ts +80 -80
  441. package/lib/catalog/catalog-browser/catalog-browser.component.d.ts +105 -105
  442. package/lib/catalog/catalog-browser/catalog-browser.module.d.ts +22 -22
  443. package/lib/catalog/catalog-library/add-catalog-dialog.component.d.ts +45 -45
  444. package/lib/catalog/catalog-library/catalog-library-item.component.d.ts +25 -25
  445. package/lib/catalog/catalog-library/catalog-library.component.d.ts +65 -65
  446. package/lib/catalog/catalog-library/catalog-library.module.d.ts +26 -26
  447. package/lib/catalog/catalog.module.d.ts +14 -14
  448. package/lib/catalog/index.d.ts +4 -4
  449. package/lib/catalog/shared/catalog.abstract.d.ts +50 -50
  450. package/lib/catalog/shared/catalog.enum.d.ts +14 -14
  451. package/lib/catalog/shared/catalog.interface.d.ts +66 -66
  452. package/lib/catalog/shared/catalog.service.d.ts +36 -36
  453. package/lib/catalog/shared/index.d.ts +4 -4
  454. package/lib/datasource/datasource.module.d.ts +8 -8
  455. package/lib/datasource/index.d.ts +2 -2
  456. package/lib/datasource/shared/capabilities.service.d.ts +37 -37
  457. package/lib/datasource/shared/datasource.service.d.ts +37 -37
  458. package/lib/datasource/shared/datasources/any-datasource.d.ts +16 -16
  459. package/lib/datasource/shared/datasources/any-datasource.interface.d.ts +15 -15
  460. package/lib/datasource/shared/datasources/arcgisrest-datasource.d.ts +14 -14
  461. package/lib/datasource/shared/datasources/arcgisrest-datasource.interface.d.ts +14 -14
  462. package/lib/datasource/shared/datasources/carto-datasource.d.ts +15 -15
  463. package/lib/datasource/shared/datasources/carto-datasource.interface.d.ts +13 -13
  464. package/lib/datasource/shared/datasources/cluster-datasource.d.ts +10 -10
  465. package/lib/datasource/shared/datasources/cluster-datasource.interface.d.ts +11 -11
  466. package/lib/datasource/shared/datasources/data.service.d.ts +3 -3
  467. package/lib/datasource/shared/datasources/datasource.d.ts +20 -20
  468. package/lib/datasource/shared/datasources/datasource.interface.d.ts +100 -100
  469. package/lib/datasource/shared/datasources/feature-datasource.d.ts +12 -12
  470. package/lib/datasource/shared/datasources/feature-datasource.interface.d.ts +18 -18
  471. package/lib/datasource/shared/datasources/imagearcgisrest-datasource.d.ts +15 -15
  472. package/lib/datasource/shared/datasources/imagearcgisrest-datasource.interface.d.ts +15 -15
  473. package/lib/datasource/shared/datasources/index.d.ts +35 -35
  474. package/lib/datasource/shared/datasources/mvt-datasource.d.ts +10 -10
  475. package/lib/datasource/shared/datasources/mvt-datasource.interface.d.ts +13 -13
  476. package/lib/datasource/shared/datasources/osm-datasource.d.ts +9 -9
  477. package/lib/datasource/shared/datasources/osm-datasource.interface.d.ts +7 -7
  478. package/lib/datasource/shared/datasources/tilearcgisrest-datasource.d.ts +15 -15
  479. package/lib/datasource/shared/datasources/tilearcgisrest-datasource.interface.d.ts +14 -14
  480. package/lib/datasource/shared/datasources/tiledebug-datasource.d.ts +9 -9
  481. package/lib/datasource/shared/datasources/tiledebug-datasource.interface.d.ts +9 -9
  482. package/lib/datasource/shared/datasources/websocket-datasource.d.ts +15 -15
  483. package/lib/datasource/shared/datasources/websocket-datasource.interface.d.ts +7 -7
  484. package/lib/datasource/shared/datasources/wfs-datasource.d.ts +20 -20
  485. package/lib/datasource/shared/datasources/wfs-datasource.interface.d.ts +20 -20
  486. package/lib/datasource/shared/datasources/wfs.service.d.ts +17 -17
  487. package/lib/datasource/shared/datasources/wms-datasource.d.ts +31 -31
  488. package/lib/datasource/shared/datasources/wms-datasource.interface.d.ts +32 -32
  489. package/lib/datasource/shared/datasources/wms-wfs.utils.d.ts +41 -41
  490. package/lib/datasource/shared/datasources/wmts-datasource.d.ts +10 -10
  491. package/lib/datasource/shared/datasources/wmts-datasource.interface.d.ts +13 -13
  492. package/lib/datasource/shared/datasources/xyz-datasource.d.ts +9 -9
  493. package/lib/datasource/shared/datasources/xyz-datasource.interface.d.ts +11 -11
  494. package/lib/datasource/shared/index.d.ts +4 -4
  495. package/lib/datasource/shared/options/index.d.ts +4 -4
  496. package/lib/datasource/shared/options/options-api.interface.d.ts +4 -4
  497. package/lib/datasource/shared/options/options-api.providers.d.ts +10 -10
  498. package/lib/datasource/shared/options/options-api.service.d.ts +16 -16
  499. package/lib/datasource/shared/options/options.service.d.ts +6 -6
  500. package/lib/datasource/utils/esri-style-generator.d.ts +21 -21
  501. package/lib/datasource/utils/index.d.ts +2 -2
  502. package/lib/datasource/utils/tilegrid.d.ts +2 -2
  503. package/lib/directions/directions-buttons/directions-buttons.component.d.ts +30 -30
  504. package/lib/directions/directions-buttons/index.d.ts +1 -1
  505. package/lib/directions/directions-inputs/directions-inputs.component.d.ts +45 -45
  506. package/lib/directions/directions-inputs/index.d.ts +1 -1
  507. package/lib/directions/directions-results/directions-results.component.d.ts +30 -30
  508. package/lib/directions/directions-results/index.d.ts +1 -1
  509. package/lib/directions/directions-sources/directions-source.d.ts +7 -7
  510. package/lib/directions/directions-sources/directions-source.interface.d.ts +11 -11
  511. package/lib/directions/directions-sources/directions-source.provider.d.ts +11 -11
  512. package/lib/directions/directions-sources/index.d.ts +4 -4
  513. package/lib/directions/directions-sources/osrm-directions-source.d.ts +23 -23
  514. package/lib/directions/directions.component.d.ts +56 -56
  515. package/lib/directions/directions.module.d.ts +26 -26
  516. package/lib/directions/index.d.ts +6 -6
  517. package/lib/directions/shared/directions-source.service.d.ts +11 -11
  518. package/lib/directions/shared/directions.enum.d.ts +22 -22
  519. package/lib/directions/shared/directions.interface.d.ts +126 -126
  520. package/lib/directions/shared/directions.service.d.ts +13 -13
  521. package/lib/directions/shared/directions.utils.d.ts +42 -42
  522. package/lib/directions/shared/index.d.ts +5 -5
  523. package/lib/directions/shared/store.d.ts +18 -18
  524. package/lib/download/download-button/download-button.component.d.ts +18 -18
  525. package/lib/download/download-button/index.d.ts +1 -1
  526. package/lib/download/download.module.d.ts +14 -14
  527. package/lib/download/index.d.ts +2 -2
  528. package/lib/download/shared/download.interface.d.ts +10 -10
  529. package/lib/download/shared/download.service.d.ts +11 -11
  530. package/lib/download/shared/index.d.ts +2 -2
  531. package/lib/draw/draw/draw-layer-popup.component.d.ts +14 -14
  532. package/lib/draw/draw/draw-popup.component.d.ts +63 -63
  533. package/lib/draw/draw/draw-shorcuts.component.d.ts +5 -5
  534. package/lib/draw/draw/draw.component.d.ts +239 -239
  535. package/lib/draw/draw/draw.module.d.ts +34 -34
  536. package/lib/draw/drawingTool.module.d.ts +7 -7
  537. package/lib/draw/index.d.ts +2 -2
  538. package/lib/draw/shared/draw-icon.service.d.ts +12 -12
  539. package/lib/draw/shared/draw-style.service.d.ts +36 -36
  540. package/lib/draw/shared/draw.enum.d.ts +32 -32
  541. package/lib/draw/shared/draw.interface.d.ts +40 -40
  542. package/lib/draw/shared/draw.utils.d.ts +35 -35
  543. package/lib/draw/shared/index.d.ts +5 -5
  544. package/lib/feature/feature-details/feature-details.component.d.ts +60 -60
  545. package/lib/feature/feature-details/feature-details.directive.d.ts +19 -19
  546. package/lib/feature/feature-details/feature-details.module.d.ts +15 -15
  547. package/lib/feature/feature-form/feature-form.component.d.ts +50 -50
  548. package/lib/feature/feature-form/feature-form.module.d.ts +12 -12
  549. package/lib/feature/feature.module.d.ts +9 -9
  550. package/lib/feature/index.d.ts +3 -3
  551. package/lib/feature/shared/feature.enums.d.ts +7 -7
  552. package/lib/feature/shared/feature.interfaces.d.ts +74 -74
  553. package/lib/feature/shared/feature.utils.d.ts +104 -104
  554. package/lib/feature/shared/index.d.ts +6 -6
  555. package/lib/feature/shared/store.d.ts +71 -71
  556. package/lib/feature/shared/strategies/in-map-extent.d.ts +52 -52
  557. package/lib/feature/shared/strategies/in-map-resolution.d.ts +52 -52
  558. package/lib/feature/shared/strategies/index.d.ts +5 -5
  559. package/lib/feature/shared/strategies/loading-layer.d.ts +59 -59
  560. package/lib/feature/shared/strategies/loading.d.ts +75 -75
  561. package/lib/feature/shared/strategies/selection.d.ts +176 -176
  562. package/lib/feature/shared/strategies.utils.d.ts +17 -17
  563. package/lib/filter/filter.module.d.ts +53 -53
  564. package/lib/filter/index.d.ts +15 -15
  565. package/lib/filter/ogc-filter-button/index.d.ts +1 -1
  566. package/lib/filter/ogc-filter-button/ogc-filter-button.component.d.ts +20 -20
  567. package/lib/filter/ogc-filter-form/index.d.ts +1 -1
  568. package/lib/filter/ogc-filter-form/ogc-filter-form.component.d.ts +65 -65
  569. package/lib/filter/ogc-filter-selection/index.d.ts +1 -1
  570. package/lib/filter/ogc-filter-selection/ogc-filter-selection.component.d.ts +93 -93
  571. package/lib/filter/ogc-filter-time/index.d.ts +2 -2
  572. package/lib/filter/ogc-filter-time/ogc-filter-time-slider.component.d.ts +39 -39
  573. package/lib/filter/ogc-filter-time/ogc-filter-time.component.d.ts +86 -86
  574. package/lib/filter/ogc-filterable-form/index.d.ts +1 -1
  575. package/lib/filter/ogc-filterable-form/ogc-filterable-form.component.d.ts +15 -15
  576. package/lib/filter/ogc-filterable-item/index.d.ts +1 -1
  577. package/lib/filter/ogc-filterable-item/ogc-filterable-item.component.d.ts +41 -41
  578. package/lib/filter/ogc-filterable-list/index.d.ts +2 -2
  579. package/lib/filter/ogc-filterable-list/ogc-filterable-list-binding.directive.d.ts +14 -14
  580. package/lib/filter/ogc-filterable-list/ogc-filterable-list.component.d.ts +10 -10
  581. package/lib/filter/shared/filterable-datasource.pipe.d.ts +10 -10
  582. package/lib/filter/shared/index.d.ts +11 -11
  583. package/lib/filter/shared/ogc-filter-time.service.d.ts +19 -19
  584. package/lib/filter/shared/ogc-filter.d.ts +29 -29
  585. package/lib/filter/shared/ogc-filter.enum.d.ts +27 -27
  586. package/lib/filter/shared/ogc-filter.interface.d.ts +200 -200
  587. package/lib/filter/shared/ogc-filter.service.d.ts +11 -11
  588. package/lib/filter/shared/spatial-filter.enum.d.ts +19 -19
  589. package/lib/filter/shared/spatial-filter.interface.d.ts +10 -10
  590. package/lib/filter/shared/spatial-filter.service.d.ts +37 -37
  591. package/lib/filter/shared/time-filter.enum.d.ts +10 -10
  592. package/lib/filter/shared/time-filter.interface.d.ts +29 -29
  593. package/lib/filter/shared/time-filter.service.d.ts +11 -11
  594. package/lib/filter/spatial-filter/spatial-filter-item/index.d.ts +1 -1
  595. package/lib/filter/spatial-filter/spatial-filter-item/spatial-filter-item.component.d.ts +166 -166
  596. package/lib/filter/spatial-filter/spatial-filter-list/index.d.ts +1 -1
  597. package/lib/filter/spatial-filter/spatial-filter-list/spatial-filter-list.component.d.ts +58 -58
  598. package/lib/filter/spatial-filter/spatial-filter-type/index.d.ts +1 -1
  599. package/lib/filter/spatial-filter/spatial-filter-type/spatial-filter-type.component.d.ts +45 -45
  600. package/lib/filter/time-filter-button/index.d.ts +1 -1
  601. package/lib/filter/time-filter-button/time-filter-button.component.d.ts +20 -20
  602. package/lib/filter/time-filter-form/index.d.ts +1 -1
  603. package/lib/filter/time-filter-form/time-filter-form.component.d.ts +77 -77
  604. package/lib/filter/time-filter-item/index.d.ts +1 -1
  605. package/lib/filter/time-filter-item/time-filter-item.component.d.ts +28 -28
  606. package/lib/filter/time-filter-list/index.d.ts +2 -2
  607. package/lib/filter/time-filter-list/time-filter-list-binding.directive.d.ts +14 -14
  608. package/lib/filter/time-filter-list/time-filter-list.component.d.ts +12 -12
  609. package/lib/geo.module.d.ts +28 -28
  610. package/lib/geometry/geometry-form-field/geometry-form-field-input.component.d.ts +206 -206
  611. package/lib/geometry/geometry-form-field/geometry-form-field.component.d.ts +88 -88
  612. package/lib/geometry/geometry-form-field/geometry-form-field.module.d.ts +19 -19
  613. package/lib/geometry/geometry.module.d.ts +8 -8
  614. package/lib/geometry/index.d.ts +3 -3
  615. package/lib/geometry/shared/controls/draw.d.ts +150 -150
  616. package/lib/geometry/shared/controls/index.d.ts +3 -3
  617. package/lib/geometry/shared/controls/modify.d.ts +228 -228
  618. package/lib/geometry/shared/controls/slice.d.ts +99 -99
  619. package/lib/geometry/shared/geometry.errors.d.ts +11 -11
  620. package/lib/geometry/shared/geometry.interfaces.d.ts +13 -13
  621. package/lib/geometry/shared/geometry.utils.d.ts +45 -45
  622. package/lib/geometry/shared/index.d.ts +4 -4
  623. package/lib/import-export/export-button/export-button.component.d.ts +16 -16
  624. package/lib/import-export/export-button/index.d.ts +1 -1
  625. package/lib/import-export/import-export/import-export.component.d.ts +104 -104
  626. package/lib/import-export/import-export/index.d.ts +1 -1
  627. package/lib/import-export/import-export.module.d.ts +26 -26
  628. package/lib/import-export/index.d.ts +4 -4
  629. package/lib/import-export/shared/drop-geo-file.directive.d.ts +36 -36
  630. package/lib/import-export/shared/export.errors.d.ts +8 -8
  631. package/lib/import-export/shared/export.interface.d.ts +11 -11
  632. package/lib/import-export/shared/export.service.d.ts +30 -30
  633. package/lib/import-export/shared/export.type.d.ts +16 -16
  634. package/lib/import-export/shared/export.utils.d.ts +19 -19
  635. package/lib/import-export/shared/import.errors.d.ts +20 -20
  636. package/lib/import-export/shared/import.interface.d.ts +8 -8
  637. package/lib/import-export/shared/import.service.d.ts +31 -31
  638. package/lib/import-export/shared/import.utils.d.ts +18 -18
  639. package/lib/import-export/shared/index.d.ts +10 -10
  640. package/lib/import-export/style-list/index.d.ts +4 -4
  641. package/lib/import-export/style-list/style-list.interface.d.ts +6 -6
  642. package/lib/import-export/style-list/style-list.module.d.ts +8 -8
  643. package/lib/import-export/style-list/style-list.provider.d.ts +15 -15
  644. package/lib/import-export/style-list/style-list.service.d.ts +18 -18
  645. package/lib/layer/index.d.ts +10 -10
  646. package/lib/layer/layer-item/index.d.ts +1 -1
  647. package/lib/layer/layer-item/layer-item.component.d.ts +62 -62
  648. package/lib/layer/layer-legend/index.d.ts +1 -1
  649. package/lib/layer/layer-legend/layer-legend.component.d.ts +90 -90
  650. package/lib/layer/layer-legend-item/index.d.ts +1 -1
  651. package/lib/layer/layer-legend-item/layer-legend-item.component.d.ts +22 -22
  652. package/lib/layer/layer-legend-list/index.d.ts +2 -2
  653. package/lib/layer/layer-legend-list/layer-legend-list-binding.directive.d.ts +16 -16
  654. package/lib/layer/layer-legend-list/layer-legend-list.component.d.ts +31 -31
  655. package/lib/layer/layer-list/index.d.ts +3 -3
  656. package/lib/layer/layer-list/layer-list-binding.directive.d.ts +19 -19
  657. package/lib/layer/layer-list/layer-list.component.d.ts +127 -127
  658. package/lib/layer/layer-list/layer-list.enum.d.ts +15 -15
  659. package/lib/layer/layer-list-tool/index.d.ts +4 -4
  660. package/lib/layer/layer-list-tool/layer-list-tool.component.d.ts +32 -32
  661. package/lib/layer/layer-list-tool/layer-list-tool.enum.d.ts +5 -5
  662. package/lib/layer/layer-list-tool/layer-list-tool.interface.d.ts +8 -8
  663. package/lib/layer/layer-list-tool/layer-list-tool.service.d.ts +14 -14
  664. package/lib/layer/layer.module.d.ts +36 -36
  665. package/lib/layer/shared/clusterParam.d.ts +13 -13
  666. package/lib/layer/shared/index.d.ts +6 -6
  667. package/lib/layer/shared/layer.enums.d.ts +1 -1
  668. package/lib/layer/shared/layer.service.d.ts +30 -30
  669. package/lib/layer/shared/layers/any-layer.d.ts +6 -6
  670. package/lib/layer/shared/layers/any-layer.interface.d.ts +6 -6
  671. package/lib/layer/shared/layers/image-layer.d.ts +22 -22
  672. package/lib/layer/shared/layers/image-layer.interface.d.ts +19 -19
  673. package/lib/layer/shared/layers/index.d.ts +12 -12
  674. package/lib/layer/shared/layers/layer.d.ts +62 -62
  675. package/lib/layer/shared/layers/layer.interface.d.ts +109 -107
  676. package/lib/layer/shared/layers/tile-layer.d.ts +31 -31
  677. package/lib/layer/shared/layers/tile-layer.interface.d.ts +20 -20
  678. package/lib/layer/shared/layers/vector-layer.d.ts +78 -78
  679. package/lib/layer/shared/layers/vector-layer.interface.d.ts +41 -41
  680. package/lib/layer/shared/layers/vectortile-layer.d.ts +28 -28
  681. package/lib/layer/shared/layers/vectortile-layer.interface.d.ts +18 -18
  682. package/lib/layer/shared/style.service.d.ts +57 -57
  683. package/lib/layer/shared/vector-style.interface.d.ts +38 -38
  684. package/lib/layer/style-modal/index.d.ts +1 -1
  685. package/lib/layer/style-modal/style-modal.component.d.ts +42 -42
  686. package/lib/layer/track-feature-button/index.d.ts +1 -1
  687. package/lib/layer/track-feature-button/track-feature-button.component.d.ts +15 -15
  688. package/lib/layer/utils/image-watcher.d.ts +17 -17
  689. package/lib/layer/utils/index.d.ts +5 -5
  690. package/lib/layer/utils/layer.utils.d.ts +2 -2
  691. package/lib/layer/utils/outputLegend.d.ts +7 -7
  692. package/lib/layer/utils/tile-watcher.d.ts +14 -14
  693. package/lib/layer/utils/vector-watcher.d.ts +13 -13
  694. package/lib/map/baselayers-switcher/baselayers-switcher.animation.d.ts +2 -2
  695. package/lib/map/baselayers-switcher/baselayers-switcher.component.d.ts +21 -21
  696. package/lib/map/baselayers-switcher/index.d.ts +2 -2
  697. package/lib/map/baselayers-switcher/mini-basemap.component.d.ts +29 -29
  698. package/lib/map/geolocate-button/geolocate-button.component.d.ts +22 -22
  699. package/lib/map/geolocate-button/index.d.ts +1 -1
  700. package/lib/map/home-extent-button/home-extent-button.component.d.ts +20 -20
  701. package/lib/map/home-extent-button/index.d.ts +1 -1
  702. package/lib/map/index.d.ts +13 -13
  703. package/lib/map/info-section/index.d.ts +1 -1
  704. package/lib/map/info-section/info-section.component.d.ts +7 -7
  705. package/lib/map/map-browser/index.d.ts +1 -1
  706. package/lib/map/map-browser/map-browser.component.d.ts +25 -25
  707. package/lib/map/map-center/index.d.ts +1 -1
  708. package/lib/map/map-center/map-center.component.d.ts +31 -31
  709. package/lib/map/map.module.d.ts +28 -28
  710. package/lib/map/menu-button/index.d.ts +1 -1
  711. package/lib/map/menu-button/menu-button.component.d.ts +17 -17
  712. package/lib/map/offline-button/index.d.ts +1 -1
  713. package/lib/map/offline-button/offline-button.component.d.ts +23 -23
  714. package/lib/map/rotation-button/index.d.ts +1 -1
  715. package/lib/map/rotation-button/rotation-button.component.d.ts +17 -17
  716. package/lib/map/shared/controllers/controller.d.ts +29 -29
  717. package/lib/map/shared/controllers/geolocation.d.ts +112 -112
  718. package/lib/map/shared/controllers/index.d.ts +3 -3
  719. package/lib/map/shared/controllers/view.d.ts +200 -200
  720. package/lib/map/shared/hover-feature.directive.d.ts +132 -132
  721. package/lib/map/shared/index.d.ts +13 -13
  722. package/lib/map/shared/linkedLayers.utils.d.ts +17 -17
  723. package/lib/map/shared/map-pointer-position.directive.d.ts +71 -71
  724. package/lib/map/shared/map.d.ts +135 -135
  725. package/lib/map/shared/map.enums.d.ts +4 -4
  726. package/lib/map/shared/map.interface.d.ts +57 -57
  727. package/lib/map/shared/map.service.d.ts +19 -19
  728. package/lib/map/shared/map.utils.d.ts +90 -90
  729. package/lib/map/shared/mapOffline.directive.d.ts +21 -21
  730. package/lib/map/shared/projection.interfaces.d.ts +29 -29
  731. package/lib/map/shared/projection.service.d.ts +19 -19
  732. package/lib/map/shared/projection.utils.d.ts +19 -19
  733. package/lib/map/swipe-control/index.d.ts +1 -1
  734. package/lib/map/swipe-control/swipe-control.component.d.ts +97 -97
  735. package/lib/map/utils/layer-watcher.d.ts +20 -20
  736. package/lib/map/wake-lock-button/index.d.ts +1 -1
  737. package/lib/map/wake-lock-button/wake-lock-button.component.d.ts +30 -30
  738. package/lib/map/zoom-button/index.d.ts +1 -1
  739. package/lib/map/zoom-button/zoom-button.component.d.ts +12 -12
  740. package/lib/measure/index.d.ts +3 -3
  741. package/lib/measure/measure.module.d.ts +7 -7
  742. package/lib/measure/measurer/measure-format.pipe.d.ts +15 -15
  743. package/lib/measure/measurer/measurer-dialog.component.d.ts +14 -14
  744. package/lib/measure/measurer/measurer-item.component.d.ts +66 -66
  745. package/lib/measure/measurer/measurer.component.d.ts +405 -405
  746. package/lib/measure/measurer/measurer.module.d.ts +25 -25
  747. package/lib/measure/shared/index.d.ts +3 -3
  748. package/lib/measure/shared/measure.enum.d.ts +33 -33
  749. package/lib/measure/shared/measure.interfaces.d.ts +21 -21
  750. package/lib/measure/shared/measure.utils.d.ts +180 -180
  751. package/lib/metadata/index.d.ts +2 -2
  752. package/lib/metadata/metadata-button/index.d.ts +1 -1
  753. package/lib/metadata/metadata-button/metadata-button.component.d.ts +26 -26
  754. package/lib/metadata/metadata.module.d.ts +15 -15
  755. package/lib/metadata/shared/index.d.ts +2 -2
  756. package/lib/metadata/shared/metadata.interface.d.ts +13 -13
  757. package/lib/metadata/shared/metadata.service.d.ts +8 -8
  758. package/lib/offline/geoDB/configFileToGeoDB.service.d.ts +14 -14
  759. package/lib/offline/geoDB/geoDB.enums.d.ts +4 -4
  760. package/lib/offline/geoDB/geoDB.interface.d.ts +19 -19
  761. package/lib/offline/geoDB/geoDB.service.d.ts +37 -37
  762. package/lib/offline/geoDB/index.d.ts +4 -4
  763. package/lib/offline/index.d.ts +2 -2
  764. package/lib/offline/shared/geo-network.service.d.ts +28 -28
  765. package/lib/offline/shared/index.d.ts +1 -1
  766. package/lib/overlay/index.d.ts +1 -1
  767. package/lib/overlay/overlay.module.d.ts +9 -9
  768. package/lib/overlay/shared/index.d.ts +6 -6
  769. package/lib/overlay/shared/overlay-marker-style.utils.d.ts +11 -11
  770. package/lib/overlay/shared/overlay.d.ts +81 -81
  771. package/lib/overlay/shared/overlay.directive.d.ts +18 -18
  772. package/lib/overlay/shared/overlay.enum.d.ts +6 -6
  773. package/lib/overlay/shared/overlay.service.d.ts +14 -14
  774. package/lib/overlay/shared/overlay.utils.d.ts +17 -17
  775. package/lib/print/index.d.ts +3 -3
  776. package/lib/print/print/print.component.d.ts +35 -35
  777. package/lib/print/print-form/index.d.ts +1 -1
  778. package/lib/print/print-form/print-form.component.d.ts +97 -97
  779. package/lib/print/print.module.d.ts +19 -19
  780. package/lib/print/shared/geopdf.d.ts +1 -1
  781. package/lib/print/shared/index.d.ts +4 -4
  782. package/lib/print/shared/print.interface.d.ts +22 -22
  783. package/lib/print/shared/print.service.d.ts +168 -168
  784. package/lib/print/shared/print.type.d.ts +45 -45
  785. package/lib/query/index.d.ts +1 -1
  786. package/lib/query/query.module.d.ts +11 -11
  787. package/lib/query/shared/index.d.ts +6 -6
  788. package/lib/query/shared/query-search-source.d.ts +17 -17
  789. package/lib/query/shared/query-search-source.providers.d.ts +17 -17
  790. package/lib/query/shared/query.directive.d.ts +105 -105
  791. package/lib/query/shared/query.enums.d.ts +26 -26
  792. package/lib/query/shared/query.interfaces.d.ts +35 -35
  793. package/lib/query/shared/query.service.d.ts +56 -56
  794. package/lib/query/shared/query.utils.d.ts +27 -27
  795. package/lib/search/index.d.ts +11 -11
  796. package/lib/search/search-bar/search-bar.component.d.ts +230 -230
  797. package/lib/search/search-bar/search-bar.module.d.ts +23 -23
  798. package/lib/search/search-bar/search-url-param.directive.d.ts +13 -13
  799. package/lib/search/search-results/save-feature-dialog.component.d.ts +32 -32
  800. package/lib/search/search-results/search-results-add-button.component.d.ts +76 -76
  801. package/lib/search/search-results/search-results-item.component.d.ts +47 -47
  802. package/lib/search/search-results/search-results.component.d.ts +161 -161
  803. package/lib/search/search-results/search-results.module.d.ts +28 -28
  804. package/lib/search/search-selector/search-selector.component.d.ts +58 -58
  805. package/lib/search/search-selector/search-selector.module.d.ts +19 -19
  806. package/lib/search/search-settings/search-settings.component.d.ts +102 -102
  807. package/lib/search/search-settings/search-settings.module.d.ts +20 -20
  808. package/lib/search/search.module.d.ts +14 -14
  809. package/lib/search/shared/index.d.ts +8 -8
  810. package/lib/search/shared/search-pointer-summary.directive.d.ts +133 -133
  811. package/lib/search/shared/search-source-service.providers.d.ts +15 -15
  812. package/lib/search/shared/search-source.service.d.ts +32 -32
  813. package/lib/search/shared/search.enums.d.ts +1 -1
  814. package/lib/search/shared/search.interfaces.d.ts +29 -29
  815. package/lib/search/shared/search.service.d.ts +53 -53
  816. package/lib/search/shared/search.utils.d.ts +39 -39
  817. package/lib/search/shared/sources/coordinates.d.ts +40 -40
  818. package/lib/search/shared/sources/coordinates.interfaces.d.ts +12 -12
  819. package/lib/search/shared/sources/coordinates.providers.d.ts +31 -31
  820. package/lib/search/shared/sources/icherche.d.ts +96 -96
  821. package/lib/search/shared/sources/icherche.interfaces.d.ts +30 -30
  822. package/lib/search/shared/sources/icherche.providers.d.ts +46 -46
  823. package/lib/search/shared/sources/ilayer.d.ts +55 -55
  824. package/lib/search/shared/sources/ilayer.interfaces.d.ts +47 -47
  825. package/lib/search/shared/sources/ilayer.providers.d.ts +31 -31
  826. package/lib/search/shared/sources/index.d.ts +17 -17
  827. package/lib/search/shared/sources/nominatim.d.ts +45 -45
  828. package/lib/search/shared/sources/nominatim.interfaces.d.ts +10 -10
  829. package/lib/search/shared/sources/nominatim.providers.d.ts +18 -18
  830. package/lib/search/shared/sources/source.d.ts +108 -108
  831. package/lib/search/shared/sources/source.interfaces.d.ts +47 -47
  832. package/lib/search/shared/sources/storedqueries.d.ts +73 -73
  833. package/lib/search/shared/sources/storedqueries.interfaces.d.ts +42 -42
  834. package/lib/search/shared/sources/storedqueries.providers.d.ts +32 -32
  835. package/lib/toast/index.d.ts +1 -1
  836. package/lib/toast/toast.component.d.ts +33 -33
  837. package/lib/toast/toast.module.d.ts +14 -14
  838. package/lib/utils/commonVectorStyle.d.ts +14 -14
  839. package/lib/utils/commonVectorStyle.interface.d.ts +16 -16
  840. package/lib/utils/googleLinks.d.ts +5 -5
  841. package/lib/utils/id-generator.d.ts +54 -54
  842. package/lib/utils/index.d.ts +5 -5
  843. package/lib/utils/osmLinks.d.ts +4 -4
  844. package/lib/wkt/index.d.ts +1 -1
  845. package/lib/wkt/shared/index.d.ts +1 -1
  846. package/lib/wkt/shared/wkt.service.d.ts +19 -19
  847. package/lib/wkt/wkt.module.d.ts +8 -8
  848. package/lib/workspace/confirmation-popup/confirmation-popup.component.d.ts +23 -23
  849. package/lib/workspace/confirmation-popup/confirmation-popup.module.d.ts +14 -14
  850. package/lib/workspace/confirmation-popup/index.d.ts +2 -2
  851. package/lib/workspace/index.d.ts +7 -7
  852. package/lib/workspace/shared/edition-workspace.d.ts +82 -82
  853. package/lib/workspace/shared/edition-workspace.service.d.ts +52 -52
  854. package/lib/workspace/shared/feature-workspace.d.ts +18 -18
  855. package/lib/workspace/shared/feature-workspace.service.d.ts +19 -19
  856. package/lib/workspace/shared/index.d.ts +7 -7
  857. package/lib/workspace/shared/wfs-workspace.d.ts +18 -18
  858. package/lib/workspace/shared/wfs-workspace.service.d.ts +19 -19
  859. package/lib/workspace/shared/wms-workspace.service.d.ts +22 -22
  860. package/lib/workspace/shared/workspace.utils.d.ts +10 -10
  861. package/lib/workspace/widgets/index.d.ts +3 -3
  862. package/lib/workspace/widgets/ogc-filter/ogc-filter.component.d.ts +29 -29
  863. package/lib/workspace/widgets/ogc-filter/ogc-filter.module.d.ts +14 -14
  864. package/lib/workspace/widgets/widgets.d.ts +9 -9
  865. package/lib/workspace/workspace-selector/workspace-selector.directive.d.ts +32 -32
  866. package/lib/workspace/workspace-selector/workspace-selector.module.d.ts +11 -11
  867. package/lib/workspace/workspace-updator/workspace-updator.directive.d.ts +26 -26
  868. package/lib/workspace/workspace-updator/workspace-updator.module.d.ts +11 -11
  869. package/lib/workspace/workspace.module.d.ts +14 -14
  870. package/package.json +4 -4
  871. package/public_api.d.ts +51 -51
@@ -1,657 +1,657 @@
1
- import { Injectable } from '@angular/core';
2
- import { HttpHeaders } from '@angular/common/http';
3
- import { ActionStore, EntityStoreFilterCustomFuncStrategy, EntityStoreFilterSelectionStrategy, EntityTableColumnRenderer } from '@igo2/common';
4
- import { catchError, map, skipWhile, take } from 'rxjs/operators';
5
- import { FeatureDataSource } from '../../datasource/shared/datasources/feature-datasource';
6
- import { FeatureMotion, FeatureStore, FeatureStoreInMapExtentStrategy, FeatureStoreInMapResolutionStrategy, FeatureStoreLoadingLayerStrategy, FeatureStoreSelectionStrategy } from '../../feature';
7
- import { LinkedProperties, VectorLayer } from '../../layer';
8
- import { EditionWorkspace } from './edition-workspace';
9
- import WKT from 'ol/format/WKT';
10
- import GeoJSON from 'ol/format/GeoJSON';
11
- import { BehaviorSubject, throwError } from 'rxjs';
12
- import * as i0 from "@angular/core";
13
- import * as i1 from "../../layer";
14
- import * as i2 from "@igo2/core";
15
- import * as i3 from "@angular/common/http";
16
- import * as i4 from "@angular/material/dialog";
17
- import * as i5 from "../../layer/shared/style.service";
18
- import * as i6 from "@igo2/auth";
19
- export class EditionWorkspaceService {
20
- constructor(layerService, storageService, configService, messageService, languageService, http, dialog, styleService, authInterceptor) {
21
- this.layerService = layerService;
22
- this.storageService = storageService;
23
- this.configService = configService;
24
- this.messageService = messageService;
25
- this.languageService = languageService;
26
- this.http = http;
27
- this.dialog = dialog;
28
- this.styleService = styleService;
29
- this.authInterceptor = authInterceptor;
30
- this.ws$ = new BehaviorSubject(undefined);
31
- this.adding$ = new BehaviorSubject(false);
32
- this.relationLayers$ = new BehaviorSubject(undefined);
33
- this.rowsInMapExtentCheckCondition$ = new BehaviorSubject(true);
34
- this.loading = false;
35
- this.wktFormat = new WKT();
36
- this.geoJsonFormat = new GeoJSON();
37
- }
38
- get zoomAuto() {
39
- return this.storageService.get('zoomAuto');
40
- }
41
- createWorkspace(layer, map) {
42
- if (layer.options.workspace?.enabled !== true || layer.dataSource.options.edition.enabled !== true) {
43
- return;
44
- }
45
- let wksConfig;
46
- if (layer.options.workspace) {
47
- wksConfig = layer.options.workspace;
48
- }
49
- else {
50
- wksConfig = {};
51
- }
52
- wksConfig.srcId = layer.id;
53
- wksConfig.workspaceId = layer.id;
54
- wksConfig.enabled = true;
55
- wksConfig.pageSize = layer.options.workspace?.pageSize;
56
- wksConfig.pageSizeOptions = layer.options.workspace?.pageSizeOptions;
57
- const dataSource = layer.dataSource;
58
- const wmsLinkId = layer.id + '.WmsWorkspaceTableSrc';
59
- const wfsLinkId = layer.id + '.WfsWorkspaceTableDest';
60
- if (!layer.options.linkedLayers) {
61
- layer.options.linkedLayers = { linkId: wmsLinkId, links: [] };
62
- }
63
- const linkProperties = {
64
- syncedDelete: true,
65
- linkedIds: [wfsLinkId],
66
- properties: [
67
- LinkedProperties.ZINDEX,
68
- LinkedProperties.VISIBLE
69
- ]
70
- };
71
- if (!layer.options.workspace?.minResolution) {
72
- linkProperties.properties.push(LinkedProperties.MINRESOLUTION);
73
- }
74
- let hasOgcFilters = false;
75
- if (dataSource.options.ogcFilters?.enabled) {
76
- linkProperties.properties.push(LinkedProperties.OGCFILTERS);
77
- hasOgcFilters = true;
78
- }
79
- if (!layer.options.workspace?.maxResolution) {
80
- linkProperties.properties.push(LinkedProperties.MAXRESOLUTION);
81
- }
82
- let clonedLinks = [];
83
- if (layer.options.linkedLayers.links) {
84
- clonedLinks = JSON.parse(JSON.stringify(layer.options.linkedLayers.links));
85
- }
86
- clonedLinks.push(linkProperties);
87
- layer.options.linkedLayers.linkId = layer.options.linkedLayers.linkId ? layer.options.linkedLayers.linkId : wmsLinkId,
88
- layer.options.linkedLayers.links = clonedLinks;
89
- let wks;
90
- this.layerService
91
- .createAsyncLayer({
92
- id: wfsLinkId,
93
- linkedLayers: {
94
- linkId: wfsLinkId
95
- },
96
- workspace: {
97
- srcId: layer.id,
98
- workspaceId: undefined,
99
- enabled: false,
100
- queryOptions: {
101
- mapQueryOnOpenTab: layer.options.workspace?.queryOptions?.mapQueryOnOpenTab,
102
- tabQuery: false
103
- },
104
- pageSize: layer.options.workspace?.pageSize,
105
- pageSizeOptions: layer.options.workspace?.pageSizeOptions
106
- },
107
- showInLayerList: false,
108
- opacity: 0,
109
- title: layer.title,
110
- minResolution: layer.options.workspace?.minResolution || layer.minResolution || 0,
111
- maxResolution: layer.options.workspace?.maxResolution || layer.maxResolution || Infinity,
112
- style: this.styleService.createStyle({
113
- fill: {
114
- "color": "rgba(255, 255, 255, 0.01)"
115
- },
116
- stroke: {
117
- "color": "rgba(255, 255, 255, 0.01)"
118
- },
119
- circle: {
120
- fill: {
121
- color: "rgba(255, 255, 255, 0.01)"
122
- },
123
- stroke: {
124
- color: "rgba(255, 255, 255, 0.01)"
125
- },
126
- radius: 5
127
- }
128
- }),
129
- sourceOptions: {
130
- download: dataSource.options.download,
131
- type: 'wfs',
132
- url: dataSource.options.urlWfs || dataSource.options.url,
133
- queryable: true,
134
- relations: dataSource.options.relations,
135
- queryTitle: dataSource.options.queryTitle,
136
- params: dataSource.options.paramsWFS,
137
- ogcFilters: Object.assign({}, dataSource.ogcFilters, { enabled: hasOgcFilters }),
138
- sourceFields: dataSource.options.sourceFields || undefined,
139
- edition: dataSource.options.edition
140
- }
141
- })
142
- .subscribe((workspaceLayer) => {
143
- map.addLayer(workspaceLayer);
144
- layer.ol.setProperties({ linkedLayers: { linkId: layer.options.linkedLayers.linkId, links: clonedLinks } }, false);
145
- workspaceLayer.dataSource.ol.refresh();
146
- wks = new EditionWorkspace({
147
- id: layer.id,
148
- title: layer.title,
149
- layer: workspaceLayer,
150
- map,
151
- entityStore: this.createFeatureStore(workspaceLayer, map),
152
- actionStore: new ActionStore([]),
153
- meta: {
154
- tableTemplate: undefined
155
- }
156
- }, this, this.dialog, this.configService);
157
- this.createTableTemplate(wks, workspaceLayer);
158
- workspaceLayer.options.workspace.workspaceId = workspaceLayer.id;
159
- layer.options.workspace = Object.assign({}, layer.options.workspace, {
160
- wksConfig
161
- });
162
- delete dataSource.options.download;
163
- return wks;
164
- });
165
- return wks;
166
- }
167
- createFeatureStore(layer, map) {
168
- const store = new FeatureStore([], { map });
169
- store.bindLayer(layer);
170
- const loadingStrategy = new FeatureStoreLoadingLayerStrategy({});
171
- const inMapExtentStrategy = new FeatureStoreInMapExtentStrategy({});
172
- const inMapResolutionStrategy = new FeatureStoreInMapResolutionStrategy({});
173
- const selectedRecordStrategy = new EntityStoreFilterSelectionStrategy({});
174
- const selectionStrategy = new FeatureStoreSelectionStrategy({
175
- layer: new VectorLayer({
176
- zIndex: 300,
177
- source: new FeatureDataSource(),
178
- style: undefined,
179
- showInLayerList: false,
180
- exportable: false,
181
- browsable: false
182
- }),
183
- map,
184
- hitTolerance: 15,
185
- motion: this.zoomAuto ? FeatureMotion.Default : FeatureMotion.None,
186
- many: true,
187
- dragBox: true
188
- });
189
- store.addStrategy(loadingStrategy, true);
190
- store.addStrategy(inMapExtentStrategy, true);
191
- store.addStrategy(inMapResolutionStrategy, true);
192
- store.addStrategy(selectionStrategy, true);
193
- store.addStrategy(selectedRecordStrategy, false);
194
- store.addStrategy(this.createFilterInMapExtentOrResolutionStrategy(), true);
195
- return store;
196
- }
197
- createTableTemplate(workspace, layer) {
198
- const fields = layer.dataSource.options.sourceFields || [];
199
- const relations = layer.dataSource.options.relations || [];
200
- let rendererType = EntityTableColumnRenderer.UnsanitizedHTML;
201
- let buttons = [];
202
- let columns = [];
203
- let relationsColumn = [];
204
- buttons = [{
205
- name: 'edition',
206
- title: undefined,
207
- renderer: EntityTableColumnRenderer.ButtonGroup,
208
- primary: false,
209
- valueAccessor: () => {
210
- return [{
211
- editMode: false,
212
- icon: 'pencil',
213
- color: 'primary',
214
- disabled: layer.dataSource.options.edition.modifyButton === false ? true : false,
215
- click: (feature) => { workspace.editFeature(feature, workspace); }
216
- },
217
- {
218
- editMode: false,
219
- icon: 'delete',
220
- color: 'warn',
221
- disabled: layer.dataSource.options.edition.deleteButton === false ? true : false,
222
- click: (feature) => { workspace.deleteFeature(feature, workspace); }
223
- },
224
- {
225
- editMode: true,
226
- icon: 'check',
227
- color: 'primary',
228
- disabled: this.loading,
229
- click: (feature) => { this.saveFeature(feature, workspace); }
230
- },
231
- {
232
- editMode: true,
233
- icon: 'alpha-x',
234
- color: 'primary',
235
- disabled: this.loading,
236
- click: (feature) => { this.cancelEdit(workspace, feature); }
237
- }];
238
- }
239
- }];
240
- if (fields.length === 0) {
241
- workspace.entityStore.entities$.pipe(skipWhile(val => val.length === 0), take(1)).subscribe(entities => {
242
- const ol = entities[0].ol;
243
- const columnsFromFeatures = ol.getKeys()
244
- .filter(col => !col.startsWith('_') &&
245
- col !== 'geometry' &&
246
- col !== ol.getGeometryName() &&
247
- !col.match(/boundedby/gi))
248
- .map(key => {
249
- return {
250
- name: `properties.${key}`,
251
- title: key,
252
- renderer: rendererType,
253
- };
254
- });
255
- workspace.meta.tableTemplate = {
256
- selection: false,
257
- sort: true,
258
- columns: columnsFromFeatures
259
- };
260
- });
261
- return;
262
- }
263
- columns = fields.map((field) => {
264
- let column = {
265
- name: `properties.${field.name}`,
266
- title: field.alias ? field.alias : field.name,
267
- renderer: rendererType,
268
- valueAccessor: undefined,
269
- cellClassFunc: () => {
270
- const cellClass = {};
271
- if (field.type) {
272
- cellClass[`class_${field.type}`] = true;
273
- return cellClass;
274
- }
275
- },
276
- primary: field.primary === true ? true : false,
277
- visible: field.visible,
278
- validation: field.validation,
279
- linkColumnForce: field.linkColumnForce,
280
- type: field.type,
281
- domainValues: undefined,
282
- relation: undefined,
283
- multiple: field.multiple,
284
- step: field.step,
285
- tooltip: field.tooltip
286
- };
287
- if (field.type === 'list' || field.type === 'autocomplete') {
288
- this.getDomainValues(field.relation).subscribe(result => {
289
- column.domainValues = result;
290
- column.relation = field.relation;
291
- });
292
- }
293
- return column;
294
- });
295
- relationsColumn = relations.map((relation) => {
296
- return {
297
- name: `properties.${relation.name}`,
298
- title: relation.alias ? relation.alias : relation.name,
299
- renderer: EntityTableColumnRenderer.Icon,
300
- icon: relation.icon,
301
- parent: relation.parent,
302
- type: 'relation',
303
- tooltip: relation.tooltip,
304
- onClick: () => {
305
- if (this.adding$.getValue() === false) {
306
- this.ws$.next(relation.title);
307
- }
308
- },
309
- cellClassFunc: () => {
310
- return { 'class_icon': true };
311
- }
312
- };
313
- });
314
- columns.push(...relationsColumn);
315
- columns.push(...buttons);
316
- workspace.meta.tableTemplate = {
317
- selection: false,
318
- sort: true,
319
- columns
320
- };
321
- }
322
- createFilterInMapExtentOrResolutionStrategy() {
323
- const filterClauseFunc = (record) => {
324
- return record.state.inMapExtent === true && record.state.inMapResolution === true;
325
- };
326
- return new EntityStoreFilterCustomFuncStrategy({ filterClauseFunc });
327
- }
328
- saveFeature(feature, workspace) {
329
- if (!this.validateFeature(feature, workspace)) {
330
- return false;
331
- }
332
- this.sanitizeParameter(feature, workspace);
333
- const baseUrl = workspace.layer.dataSource.options.edition.baseUrl;
334
- let url = this.configService.getConfig('edition.url');
335
- if (!url) {
336
- url = baseUrl;
337
- }
338
- else {
339
- url += baseUrl ? baseUrl : '';
340
- }
341
- if (feature.newFeature) {
342
- url += workspace.layer.dataSource.options.edition.addUrl;
343
- const addHeaders = workspace.layer.dataSource.options.edition.addHeaders;
344
- const headers = new HttpHeaders(addHeaders);
345
- this.addFeature(feature, workspace, url, headers);
346
- }
347
- else {
348
- if (workspace.layer.dataSource.options.edition.modifyProtocol !== "post") {
349
- url += '?' + workspace.layer.dataSource.options.edition.modifyUrl + feature.idkey;
350
- }
351
- else {
352
- url += workspace.layer.dataSource.options.edition.modifyUrl;
353
- }
354
- const protocole = workspace.layer.dataSource.options.edition.modifyProtocol;
355
- const modifyHeaders = workspace.layer.dataSource.options.edition.modifyHeaders;
356
- const headers = new HttpHeaders(modifyHeaders);
357
- this.modifyFeature(feature, workspace, url, headers, protocole);
358
- }
359
- }
360
- addFeature(feature, workspace, url, headers) {
361
- if (workspace.layer.dataSource.options.edition.hasGeometry) {
362
- const projDest = workspace.layer.options.sourceOptions.edition.geomDatabaseProj;
363
- feature.properties[workspace.layer.dataSource.options.params.fieldNameGeometry] =
364
- 'SRID=' + projDest.replace("EPSG:", "") + ';' + this.wktFormat.writeGeometry(this.geoJsonFormat.readFeature(feature.geometry).getGeometry().transform('EPSG:4326', projDest), { dataProjection: projDest });
365
- }
366
- for (const property in feature.properties) {
367
- for (const sf of workspace.layer.dataSource.options.sourceFields) {
368
- if ((sf.name === property && sf.validation?.readonly) || (sf.name === property && sf.validation?.send === false)) {
369
- delete feature.properties[property];
370
- }
371
- }
372
- }
373
- this.loading = true;
374
- this.http.post(`${url}`, feature.properties, { headers: headers }).subscribe(() => {
375
- this.loading = false;
376
- workspace.entityStore.stateView.clear();
377
- workspace.deleteDrawings();
378
- workspace.entityStore.delete(feature);
379
- const message = this.languageService.translate.instant('igo.geo.workspace.addSuccess');
380
- this.messageService.success(message);
381
- this.refreshMap(workspace.layer, workspace.layer.map);
382
- this.adding$.next(false);
383
- this.rowsInMapExtentCheckCondition$.next(true);
384
- }, error => {
385
- this.loading = false;
386
- error.error.caught = true;
387
- const genericErrorMessage = this.languageService.translate.instant('igo.geo.workspace.addError');
388
- const messages = workspace.layer.dataSource.options.edition.messages;
389
- if (messages) {
390
- let text;
391
- messages.forEach(message => {
392
- const key = Object.keys(message)[0];
393
- if (error.error.message.includes(key)) {
394
- text = message[key];
395
- this.messageService.error(text);
396
- }
397
- });
398
- if (!text) {
399
- this.messageService.error(genericErrorMessage);
400
- }
401
- }
402
- else {
403
- this.messageService.error(genericErrorMessage);
404
- }
405
- });
406
- }
407
- deleteFeature(workspace, url) {
408
- this.loading = true;
409
- this.http.delete(`${url}`, {}).subscribe(() => {
410
- this.loading = false;
411
- const message = this.languageService.translate.instant('igo.geo.workspace.deleteSuccess');
412
- this.messageService.success(message);
413
- this.refreshMap(workspace.layer, workspace.layer.map);
414
- for (const relation of workspace.layer.options.sourceOptions.relations) {
415
- workspace.map.layers.forEach((layer) => {
416
- if (layer.title === relation.title) {
417
- layer.dataSource.ol.refresh();
418
- }
419
- });
420
- }
421
- }, error => {
422
- this.loading = false;
423
- error.error.caught = true;
424
- const genericErrorMessage = this.languageService.translate.instant('igo.geo.workspace.addError');
425
- const messages = workspace.layer.dataSource.options.edition.messages;
426
- if (messages) {
427
- let text;
428
- messages.forEach(message => {
429
- const key = Object.keys(message)[0];
430
- if (error.error.message.includes(key)) {
431
- text = message[key];
432
- this.messageService.error(text);
433
- }
434
- });
435
- if (!text) {
436
- this.messageService.error(genericErrorMessage);
437
- }
438
- }
439
- else {
440
- this.messageService.error(genericErrorMessage);
441
- }
442
- });
443
- }
444
- modifyFeature(feature, workspace, url, headers, protocole = 'patch') {
445
- if (workspace.layer.dataSource.options.edition.hasGeometry) {
446
- const projDest = workspace.layer.options.sourceOptions.edition.geomDatabaseProj;
447
- // Remove 3e dimension
448
- feature.geometry.coordinates = removeZ(feature.geometry.coordinates);
449
- feature.properties[workspace.layer.dataSource.options.params.fieldNameGeometry] =
450
- 'SRID=' + projDest.replace("EPSG:", "") + ';' + this.wktFormat.writeGeometry(this.geoJsonFormat.readFeature(feature.geometry).getGeometry().transform('EPSG:4326', projDest), { dataProjection: projDest });
451
- }
452
- for (const property in feature.properties) {
453
- for (const sf of workspace.layer.dataSource.options.sourceFields) {
454
- if ((sf.name === property && sf.validation?.readonly) || (sf.name === property && sf.validation?.send === false)
455
- || property === 'boundedBy') {
456
- delete feature.properties[property];
457
- }
458
- }
459
- }
460
- this.loading = true;
461
- this.http[protocole](`${url}`, feature.properties, { headers: headers }).subscribe(() => {
462
- this.loading = false;
463
- this.cancelEdit(workspace, feature, true);
464
- const message = this.languageService.translate.instant('igo.geo.workspace.modifySuccess');
465
- this.messageService.success(message);
466
- this.refreshMap(workspace.layer, workspace.layer.map);
467
- let relationLayers = [];
468
- for (const relation of workspace.layer.options.sourceOptions.relations) {
469
- workspace.map.layers.forEach((layer) => {
470
- if (layer.title === relation.title) {
471
- relationLayers.push(layer);
472
- layer.dataSource.ol.refresh();
473
- }
474
- });
475
- }
476
- this.relationLayers$.next(relationLayers);
477
- }, error => {
478
- this.loading = false;
479
- error.error.caught = true;
480
- const genericErrorMessage = this.languageService.translate.instant('igo.geo.workspace.addError');
481
- const messages = workspace.layer.dataSource.options.edition.messages;
482
- if (messages) {
483
- let text;
484
- messages.forEach(message => {
485
- const key = Object.keys(message)[0];
486
- if (error.error.message.includes(key)) {
487
- text = message[key];
488
- this.messageService.error(text);
489
- }
490
- });
491
- if (!text) {
492
- this.messageService.error(genericErrorMessage);
493
- }
494
- }
495
- else {
496
- this.messageService.error(genericErrorMessage);
497
- }
498
- });
499
- }
500
- cancelEdit(workspace, feature, fromSave = false) {
501
- feature.edition = false;
502
- this.adding$.next(false);
503
- workspace.deleteDrawings();
504
- workspace.entityStore.stateView.clear();
505
- if (feature.newFeature) {
506
- workspace.entityStore.delete(feature);
507
- workspace.deactivateDrawControl();
508
- this.rowsInMapExtentCheckCondition$.next(true);
509
- }
510
- else {
511
- if (!fromSave) {
512
- feature.properties = feature.original_properties;
513
- feature.geometry = feature.original_geometry;
514
- }
515
- delete feature.original_properties;
516
- delete feature.original_geometry;
517
- }
518
- }
519
- getDomainValues(relation) {
520
- let url = relation.url;
521
- if (!url) {
522
- url = this.configService.getConfig('edition.url') ?
523
- this.configService.getConfig('edition.url') + relation.table : relation.table;
524
- }
525
- return this.http.get(url).pipe(map(result => {
526
- return result;
527
- }), catchError((err) => {
528
- err.error.caught = true;
529
- return throwError(err);
530
- }));
531
- }
532
- /*
533
- * Refresh both wms and wfs layer
534
- * A new wfs loader is used to ensure cache is not retrieving old data
535
- * WMS params are updated to ensure layer is correctly refreshed
536
- */
537
- refreshMap(layer, map) {
538
- const wfsOlLayer = layer.dataSource.ol;
539
- const loader = (extent, resolution, proj, success, failure) => {
540
- layer.customWFSLoader(layer.ol.getSource(), layer.options.sourceOptions, this.authInterceptor, extent, resolution, proj, success, failure, true);
541
- };
542
- wfsOlLayer.setLoader(loader);
543
- wfsOlLayer.refresh();
544
- for (const lay of map.layers) {
545
- if (lay.id !== layer.id &&
546
- lay.options.linkedLayers?.linkId.includes(layer.id.substr(0, layer.id.indexOf('.') - 1)) &&
547
- lay.options.linkedLayers?.linkId.includes('WmsWorkspaceTableSrc')) {
548
- const wmsOlLayer = lay.dataSource.ol;
549
- let params = wmsOlLayer.getParams();
550
- params._t = new Date().getTime();
551
- wmsOlLayer.updateParams(params);
552
- }
553
- }
554
- }
555
- validateFeature(feature, workspace) {
556
- const translate = this.languageService.translate;
557
- let message;
558
- let key;
559
- let valid = true;
560
- workspace.meta.tableTemplate.columns.forEach(column => {
561
- if (column.hasOwnProperty('validation') && column.validation) {
562
- key = getColumnKeyWithoutPropertiesTag(column.name);
563
- Object.keys(column.validation).forEach((type) => {
564
- switch (type) {
565
- case 'mandatory': {
566
- if (column.validation[type] && (!feature.properties.hasOwnProperty(key) || !feature.properties[key])) {
567
- valid = false;
568
- message = translate.instant('igo.geo.formValidation.mandatory', {
569
- column: column.title
570
- });
571
- this.messageService.error(message);
572
- }
573
- break;
574
- }
575
- case 'minValue': {
576
- if (feature.properties.hasOwnProperty(key) && feature.properties[key] && feature.properties[key] < column.validation[type]) {
577
- valid = false;
578
- message = translate.instant('igo.geo.formValidation.minValue', {
579
- column: column.title,
580
- value: column.validation[type]
581
- });
582
- this.messageService.error(message);
583
- }
584
- break;
585
- }
586
- case 'maxValue': {
587
- if (feature.properties.hasOwnProperty(key) && feature.properties[key] && feature.properties[key] > column.validation[type]) {
588
- valid = false;
589
- message = translate.instant('igo.geo.formValidation.maxValue', {
590
- column: column.title,
591
- value: column.validation[type]
592
- });
593
- this.messageService.error(message);
594
- }
595
- break;
596
- }
597
- case 'minLength': {
598
- if (feature.properties.hasOwnProperty(key) && feature.properties[key] &&
599
- feature.properties[key].length < column.validation[type]) {
600
- valid = false;
601
- message = translate.instant('igo.geo.formValidation.minLength', {
602
- column: column.title,
603
- value: column.validation[type]
604
- });
605
- this.messageService.error(message);
606
- }
607
- break;
608
- }
609
- case 'maxLength': {
610
- if (feature.properties.hasOwnProperty(key) && feature.properties[key] &&
611
- feature.properties[key].length > column.validation[type]) {
612
- valid = false;
613
- message = translate.instant('igo.geo.formValidation.maxLength', {
614
- column: column.title,
615
- value: column.validation[type]
616
- });
617
- this.messageService.error(message);
618
- }
619
- break;
620
- }
621
- }
622
- });
623
- }
624
- });
625
- return valid;
626
- }
627
- sanitizeParameter(feature, workspace) {
628
- workspace.meta.tableTemplate.columns.forEach(column => {
629
- if (column.type === 'list' && feature.properties[getColumnKeyWithoutPropertiesTag(column.name)]) {
630
- feature.properties[getColumnKeyWithoutPropertiesTag(column.name)] =
631
- feature.properties[getColumnKeyWithoutPropertiesTag(column.name)].toString();
632
- }
633
- });
634
- }
635
- }
636
- EditionWorkspaceService.ɵfac = function EditionWorkspaceService_Factory(t) { return new (t || EditionWorkspaceService)(i0.ɵɵinject(i1.LayerService), i0.ɵɵinject(i2.StorageService), i0.ɵɵinject(i2.ConfigService), i0.ɵɵinject(i2.MessageService), i0.ɵɵinject(i2.LanguageService), i0.ɵɵinject(i3.HttpClient), i0.ɵɵinject(i4.MatDialog), i0.ɵɵinject(i5.StyleService), i0.ɵɵinject(i6.AuthInterceptor)); };
637
- EditionWorkspaceService.ɵprov = /*@__PURE__*/ i0.ɵɵdefineInjectable({ token: EditionWorkspaceService, factory: EditionWorkspaceService.ɵfac, providedIn: 'root' });
638
- (function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(EditionWorkspaceService, [{
639
- type: Injectable,
640
- args: [{
641
- providedIn: 'root'
642
- }]
643
- }], function () { return [{ type: i1.LayerService }, { type: i2.StorageService }, { type: i2.ConfigService }, { type: i2.MessageService }, { type: i2.LanguageService }, { type: i3.HttpClient }, { type: i4.MatDialog }, { type: i5.StyleService }, { type: i6.AuthInterceptor }]; }, null); })();
644
- function getColumnKeyWithoutPropertiesTag(column) {
645
- if (column.includes('properties.')) {
646
- return column.split('.')[1];
647
- }
648
- return column;
649
- }
650
- function removeZ(coords) {
651
- if (coords.length === 0)
652
- return coords;
653
- if (typeof coords[0] === 'number')
654
- return coords.slice(0, 2);
655
- return coords.map(removeZ);
656
- }
1
+ import { Injectable } from '@angular/core';
2
+ import { HttpHeaders } from '@angular/common/http';
3
+ import { ActionStore, EntityStoreFilterCustomFuncStrategy, EntityStoreFilterSelectionStrategy, EntityTableColumnRenderer } from '@igo2/common';
4
+ import { catchError, map, skipWhile, take } from 'rxjs/operators';
5
+ import { FeatureDataSource } from '../../datasource/shared/datasources/feature-datasource';
6
+ import { FeatureMotion, FeatureStore, FeatureStoreInMapExtentStrategy, FeatureStoreInMapResolutionStrategy, FeatureStoreLoadingLayerStrategy, FeatureStoreSelectionStrategy } from '../../feature';
7
+ import { LinkedProperties, VectorLayer } from '../../layer';
8
+ import { EditionWorkspace } from './edition-workspace';
9
+ import WKT from 'ol/format/WKT';
10
+ import GeoJSON from 'ol/format/GeoJSON';
11
+ import { BehaviorSubject, throwError } from 'rxjs';
12
+ import * as i0 from "@angular/core";
13
+ import * as i1 from "../../layer";
14
+ import * as i2 from "@igo2/core";
15
+ import * as i3 from "@angular/common/http";
16
+ import * as i4 from "@angular/material/dialog";
17
+ import * as i5 from "../../layer/shared/style.service";
18
+ import * as i6 from "@igo2/auth";
19
+ export class EditionWorkspaceService {
20
+ constructor(layerService, storageService, configService, messageService, languageService, http, dialog, styleService, authInterceptor) {
21
+ this.layerService = layerService;
22
+ this.storageService = storageService;
23
+ this.configService = configService;
24
+ this.messageService = messageService;
25
+ this.languageService = languageService;
26
+ this.http = http;
27
+ this.dialog = dialog;
28
+ this.styleService = styleService;
29
+ this.authInterceptor = authInterceptor;
30
+ this.ws$ = new BehaviorSubject(undefined);
31
+ this.adding$ = new BehaviorSubject(false);
32
+ this.relationLayers$ = new BehaviorSubject(undefined);
33
+ this.rowsInMapExtentCheckCondition$ = new BehaviorSubject(true);
34
+ this.loading = false;
35
+ this.wktFormat = new WKT();
36
+ this.geoJsonFormat = new GeoJSON();
37
+ }
38
+ get zoomAuto() {
39
+ return this.storageService.get('zoomAuto');
40
+ }
41
+ createWorkspace(layer, map) {
42
+ if (layer.options.workspace?.enabled !== true || layer.dataSource.options.edition.enabled !== true) {
43
+ return;
44
+ }
45
+ let wksConfig;
46
+ if (layer.options.workspace) {
47
+ wksConfig = layer.options.workspace;
48
+ }
49
+ else {
50
+ wksConfig = {};
51
+ }
52
+ wksConfig.srcId = layer.id;
53
+ wksConfig.workspaceId = layer.id;
54
+ wksConfig.enabled = true;
55
+ wksConfig.pageSize = layer.options.workspace?.pageSize;
56
+ wksConfig.pageSizeOptions = layer.options.workspace?.pageSizeOptions;
57
+ const dataSource = layer.dataSource;
58
+ const wmsLinkId = layer.id + '.WmsWorkspaceTableSrc';
59
+ const wfsLinkId = layer.id + '.WfsWorkspaceTableDest';
60
+ if (!layer.options.linkedLayers) {
61
+ layer.options.linkedLayers = { linkId: wmsLinkId, links: [] };
62
+ }
63
+ const linkProperties = {
64
+ syncedDelete: true,
65
+ linkedIds: [wfsLinkId],
66
+ properties: [
67
+ LinkedProperties.ZINDEX,
68
+ LinkedProperties.VISIBLE
69
+ ]
70
+ };
71
+ if (!layer.options.workspace?.minResolution) {
72
+ linkProperties.properties.push(LinkedProperties.MINRESOLUTION);
73
+ }
74
+ let hasOgcFilters = false;
75
+ if (dataSource.options.ogcFilters?.enabled) {
76
+ linkProperties.properties.push(LinkedProperties.OGCFILTERS);
77
+ hasOgcFilters = true;
78
+ }
79
+ if (!layer.options.workspace?.maxResolution) {
80
+ linkProperties.properties.push(LinkedProperties.MAXRESOLUTION);
81
+ }
82
+ let clonedLinks = [];
83
+ if (layer.options.linkedLayers.links) {
84
+ clonedLinks = JSON.parse(JSON.stringify(layer.options.linkedLayers.links));
85
+ }
86
+ clonedLinks.push(linkProperties);
87
+ layer.options.linkedLayers.linkId = layer.options.linkedLayers.linkId ? layer.options.linkedLayers.linkId : wmsLinkId,
88
+ layer.options.linkedLayers.links = clonedLinks;
89
+ let wks;
90
+ this.layerService
91
+ .createAsyncLayer({
92
+ id: wfsLinkId,
93
+ linkedLayers: {
94
+ linkId: wfsLinkId
95
+ },
96
+ workspace: {
97
+ srcId: layer.id,
98
+ workspaceId: undefined,
99
+ enabled: false,
100
+ queryOptions: {
101
+ mapQueryOnOpenTab: layer.options.workspace?.queryOptions?.mapQueryOnOpenTab,
102
+ tabQuery: false
103
+ },
104
+ pageSize: layer.options.workspace?.pageSize,
105
+ pageSizeOptions: layer.options.workspace?.pageSizeOptions
106
+ },
107
+ showInLayerList: false,
108
+ opacity: 0,
109
+ title: layer.title,
110
+ minResolution: layer.options.workspace?.minResolution || layer.minResolution || 0,
111
+ maxResolution: layer.options.workspace?.maxResolution || layer.maxResolution || Infinity,
112
+ style: this.styleService.createStyle({
113
+ fill: {
114
+ "color": "rgba(255, 255, 255, 0.01)"
115
+ },
116
+ stroke: {
117
+ "color": "rgba(255, 255, 255, 0.01)"
118
+ },
119
+ circle: {
120
+ fill: {
121
+ color: "rgba(255, 255, 255, 0.01)"
122
+ },
123
+ stroke: {
124
+ color: "rgba(255, 255, 255, 0.01)"
125
+ },
126
+ radius: 5
127
+ }
128
+ }),
129
+ sourceOptions: {
130
+ download: dataSource.options.download,
131
+ type: 'wfs',
132
+ url: dataSource.options.urlWfs || dataSource.options.url,
133
+ queryable: true,
134
+ relations: dataSource.options.relations,
135
+ queryTitle: dataSource.options.queryTitle,
136
+ params: dataSource.options.paramsWFS,
137
+ ogcFilters: Object.assign({}, dataSource.ogcFilters, { enabled: hasOgcFilters }),
138
+ sourceFields: dataSource.options.sourceFields || undefined,
139
+ edition: dataSource.options.edition
140
+ }
141
+ })
142
+ .subscribe((workspaceLayer) => {
143
+ map.addLayer(workspaceLayer);
144
+ layer.ol.setProperties({ linkedLayers: { linkId: layer.options.linkedLayers.linkId, links: clonedLinks } }, false);
145
+ workspaceLayer.dataSource.ol.refresh();
146
+ wks = new EditionWorkspace({
147
+ id: layer.id,
148
+ title: layer.title,
149
+ layer: workspaceLayer,
150
+ map,
151
+ entityStore: this.createFeatureStore(workspaceLayer, map),
152
+ actionStore: new ActionStore([]),
153
+ meta: {
154
+ tableTemplate: undefined
155
+ }
156
+ }, this, this.dialog, this.configService);
157
+ this.createTableTemplate(wks, workspaceLayer);
158
+ workspaceLayer.options.workspace.workspaceId = workspaceLayer.id;
159
+ layer.options.workspace = Object.assign({}, layer.options.workspace, {
160
+ wksConfig
161
+ });
162
+ delete dataSource.options.download;
163
+ return wks;
164
+ });
165
+ return wks;
166
+ }
167
+ createFeatureStore(layer, map) {
168
+ const store = new FeatureStore([], { map });
169
+ store.bindLayer(layer);
170
+ const loadingStrategy = new FeatureStoreLoadingLayerStrategy({});
171
+ const inMapExtentStrategy = new FeatureStoreInMapExtentStrategy({});
172
+ const inMapResolutionStrategy = new FeatureStoreInMapResolutionStrategy({});
173
+ const selectedRecordStrategy = new EntityStoreFilterSelectionStrategy({});
174
+ const selectionStrategy = new FeatureStoreSelectionStrategy({
175
+ layer: new VectorLayer({
176
+ zIndex: 300,
177
+ source: new FeatureDataSource(),
178
+ style: undefined,
179
+ showInLayerList: false,
180
+ exportable: false,
181
+ browsable: false
182
+ }),
183
+ map,
184
+ hitTolerance: 15,
185
+ motion: this.zoomAuto ? FeatureMotion.Default : FeatureMotion.None,
186
+ many: true,
187
+ dragBox: true
188
+ });
189
+ store.addStrategy(loadingStrategy, true);
190
+ store.addStrategy(inMapExtentStrategy, true);
191
+ store.addStrategy(inMapResolutionStrategy, true);
192
+ store.addStrategy(selectionStrategy, true);
193
+ store.addStrategy(selectedRecordStrategy, false);
194
+ store.addStrategy(this.createFilterInMapExtentOrResolutionStrategy(), true);
195
+ return store;
196
+ }
197
+ createTableTemplate(workspace, layer) {
198
+ const fields = layer.dataSource.options.sourceFields || [];
199
+ const relations = layer.dataSource.options.relations || [];
200
+ let rendererType = EntityTableColumnRenderer.UnsanitizedHTML;
201
+ let buttons = [];
202
+ let columns = [];
203
+ let relationsColumn = [];
204
+ buttons = [{
205
+ name: 'edition',
206
+ title: undefined,
207
+ renderer: EntityTableColumnRenderer.ButtonGroup,
208
+ primary: false,
209
+ valueAccessor: () => {
210
+ return [{
211
+ editMode: false,
212
+ icon: 'pencil',
213
+ color: 'primary',
214
+ disabled: layer.dataSource.options.edition.modifyButton === false ? true : false,
215
+ click: (feature) => { workspace.editFeature(feature, workspace); }
216
+ },
217
+ {
218
+ editMode: false,
219
+ icon: 'delete',
220
+ color: 'warn',
221
+ disabled: layer.dataSource.options.edition.deleteButton === false ? true : false,
222
+ click: (feature) => { workspace.deleteFeature(feature, workspace); }
223
+ },
224
+ {
225
+ editMode: true,
226
+ icon: 'check',
227
+ color: 'primary',
228
+ disabled: this.loading,
229
+ click: (feature) => { this.saveFeature(feature, workspace); }
230
+ },
231
+ {
232
+ editMode: true,
233
+ icon: 'alpha-x',
234
+ color: 'primary',
235
+ disabled: this.loading,
236
+ click: (feature) => { this.cancelEdit(workspace, feature); }
237
+ }];
238
+ }
239
+ }];
240
+ if (fields.length === 0) {
241
+ workspace.entityStore.entities$.pipe(skipWhile(val => val.length === 0), take(1)).subscribe(entities => {
242
+ const ol = entities[0].ol;
243
+ const columnsFromFeatures = ol.getKeys()
244
+ .filter(col => !col.startsWith('_') &&
245
+ col !== 'geometry' &&
246
+ col !== ol.getGeometryName() &&
247
+ !col.match(/boundedby/gi))
248
+ .map(key => {
249
+ return {
250
+ name: `properties.${key}`,
251
+ title: key,
252
+ renderer: rendererType,
253
+ };
254
+ });
255
+ workspace.meta.tableTemplate = {
256
+ selection: false,
257
+ sort: true,
258
+ columns: columnsFromFeatures
259
+ };
260
+ });
261
+ return;
262
+ }
263
+ columns = fields.map((field) => {
264
+ let column = {
265
+ name: `properties.${field.name}`,
266
+ title: field.alias ? field.alias : field.name,
267
+ renderer: rendererType,
268
+ valueAccessor: undefined,
269
+ cellClassFunc: () => {
270
+ const cellClass = {};
271
+ if (field.type) {
272
+ cellClass[`class_${field.type}`] = true;
273
+ return cellClass;
274
+ }
275
+ },
276
+ primary: field.primary === true ? true : false,
277
+ visible: field.visible,
278
+ validation: field.validation,
279
+ linkColumnForce: field.linkColumnForce,
280
+ type: field.type,
281
+ domainValues: undefined,
282
+ relation: undefined,
283
+ multiple: field.multiple,
284
+ step: field.step,
285
+ tooltip: field.tooltip
286
+ };
287
+ if (field.type === 'list' || field.type === 'autocomplete') {
288
+ this.getDomainValues(field.relation).subscribe(result => {
289
+ column.domainValues = result;
290
+ column.relation = field.relation;
291
+ });
292
+ }
293
+ return column;
294
+ });
295
+ relationsColumn = relations.map((relation) => {
296
+ return {
297
+ name: `properties.${relation.name}`,
298
+ title: relation.alias ? relation.alias : relation.name,
299
+ renderer: EntityTableColumnRenderer.Icon,
300
+ icon: relation.icon,
301
+ parent: relation.parent,
302
+ type: 'relation',
303
+ tooltip: relation.tooltip,
304
+ onClick: () => {
305
+ if (this.adding$.getValue() === false) {
306
+ this.ws$.next(relation.title);
307
+ }
308
+ },
309
+ cellClassFunc: () => {
310
+ return { 'class_icon': true };
311
+ }
312
+ };
313
+ });
314
+ columns.push(...relationsColumn);
315
+ columns.push(...buttons);
316
+ workspace.meta.tableTemplate = {
317
+ selection: false,
318
+ sort: true,
319
+ columns
320
+ };
321
+ }
322
+ createFilterInMapExtentOrResolutionStrategy() {
323
+ const filterClauseFunc = (record) => {
324
+ return record.state.inMapExtent === true && record.state.inMapResolution === true;
325
+ };
326
+ return new EntityStoreFilterCustomFuncStrategy({ filterClauseFunc });
327
+ }
328
+ saveFeature(feature, workspace) {
329
+ if (!this.validateFeature(feature, workspace)) {
330
+ return false;
331
+ }
332
+ this.sanitizeParameter(feature, workspace);
333
+ const baseUrl = workspace.layer.dataSource.options.edition.baseUrl;
334
+ let url = this.configService.getConfig('edition.url');
335
+ if (!url) {
336
+ url = baseUrl;
337
+ }
338
+ else {
339
+ url += baseUrl ? baseUrl : '';
340
+ }
341
+ if (feature.newFeature) {
342
+ url += workspace.layer.dataSource.options.edition.addUrl;
343
+ const addHeaders = workspace.layer.dataSource.options.edition.addHeaders;
344
+ const headers = new HttpHeaders(addHeaders);
345
+ this.addFeature(feature, workspace, url, headers);
346
+ }
347
+ else {
348
+ if (workspace.layer.dataSource.options.edition.modifyProtocol !== "post") {
349
+ url += '?' + workspace.layer.dataSource.options.edition.modifyUrl + feature.idkey;
350
+ }
351
+ else {
352
+ url += workspace.layer.dataSource.options.edition.modifyUrl;
353
+ }
354
+ const protocole = workspace.layer.dataSource.options.edition.modifyProtocol;
355
+ const modifyHeaders = workspace.layer.dataSource.options.edition.modifyHeaders;
356
+ const headers = new HttpHeaders(modifyHeaders);
357
+ this.modifyFeature(feature, workspace, url, headers, protocole);
358
+ }
359
+ }
360
+ addFeature(feature, workspace, url, headers) {
361
+ if (workspace.layer.dataSource.options.edition.hasGeometry) {
362
+ const projDest = workspace.layer.options.sourceOptions.edition.geomDatabaseProj;
363
+ feature.properties[workspace.layer.dataSource.options.params.fieldNameGeometry] =
364
+ 'SRID=' + projDest.replace("EPSG:", "") + ';' + this.wktFormat.writeGeometry(this.geoJsonFormat.readFeature(feature.geometry).getGeometry().transform('EPSG:4326', projDest), { dataProjection: projDest });
365
+ }
366
+ for (const property in feature.properties) {
367
+ for (const sf of workspace.layer.dataSource.options.sourceFields) {
368
+ if ((sf.name === property && sf.validation?.readonly) || (sf.name === property && sf.validation?.send === false)) {
369
+ delete feature.properties[property];
370
+ }
371
+ }
372
+ }
373
+ this.loading = true;
374
+ this.http.post(`${url}`, feature.properties, { headers: headers }).subscribe(() => {
375
+ this.loading = false;
376
+ workspace.entityStore.stateView.clear();
377
+ workspace.deleteDrawings();
378
+ workspace.entityStore.delete(feature);
379
+ const message = this.languageService.translate.instant('igo.geo.workspace.addSuccess');
380
+ this.messageService.success(message);
381
+ this.refreshMap(workspace.layer, workspace.layer.map);
382
+ this.adding$.next(false);
383
+ this.rowsInMapExtentCheckCondition$.next(true);
384
+ }, error => {
385
+ this.loading = false;
386
+ error.error.caught = true;
387
+ const genericErrorMessage = this.languageService.translate.instant('igo.geo.workspace.addError');
388
+ const messages = workspace.layer.dataSource.options.edition.messages;
389
+ if (messages) {
390
+ let text;
391
+ messages.forEach(message => {
392
+ const key = Object.keys(message)[0];
393
+ if (error.error.message.includes(key)) {
394
+ text = message[key];
395
+ this.messageService.error(text);
396
+ }
397
+ });
398
+ if (!text) {
399
+ this.messageService.error(genericErrorMessage);
400
+ }
401
+ }
402
+ else {
403
+ this.messageService.error(genericErrorMessage);
404
+ }
405
+ });
406
+ }
407
+ deleteFeature(workspace, url) {
408
+ this.loading = true;
409
+ this.http.delete(`${url}`, {}).subscribe(() => {
410
+ this.loading = false;
411
+ const message = this.languageService.translate.instant('igo.geo.workspace.deleteSuccess');
412
+ this.messageService.success(message);
413
+ this.refreshMap(workspace.layer, workspace.layer.map);
414
+ for (const relation of workspace.layer.options.sourceOptions.relations) {
415
+ workspace.map.layers.forEach((layer) => {
416
+ if (layer.title === relation.title) {
417
+ layer.dataSource.ol.refresh();
418
+ }
419
+ });
420
+ }
421
+ }, error => {
422
+ this.loading = false;
423
+ error.error.caught = true;
424
+ const genericErrorMessage = this.languageService.translate.instant('igo.geo.workspace.addError');
425
+ const messages = workspace.layer.dataSource.options.edition.messages;
426
+ if (messages) {
427
+ let text;
428
+ messages.forEach(message => {
429
+ const key = Object.keys(message)[0];
430
+ if (error.error.message.includes(key)) {
431
+ text = message[key];
432
+ this.messageService.error(text);
433
+ }
434
+ });
435
+ if (!text) {
436
+ this.messageService.error(genericErrorMessage);
437
+ }
438
+ }
439
+ else {
440
+ this.messageService.error(genericErrorMessage);
441
+ }
442
+ });
443
+ }
444
+ modifyFeature(feature, workspace, url, headers, protocole = 'patch') {
445
+ if (workspace.layer.dataSource.options.edition.hasGeometry) {
446
+ const projDest = workspace.layer.options.sourceOptions.edition.geomDatabaseProj;
447
+ // Remove 3e dimension
448
+ feature.geometry.coordinates = removeZ(feature.geometry.coordinates);
449
+ feature.properties[workspace.layer.dataSource.options.params.fieldNameGeometry] =
450
+ 'SRID=' + projDest.replace("EPSG:", "") + ';' + this.wktFormat.writeGeometry(this.geoJsonFormat.readFeature(feature.geometry).getGeometry().transform('EPSG:4326', projDest), { dataProjection: projDest });
451
+ }
452
+ for (const property in feature.properties) {
453
+ for (const sf of workspace.layer.dataSource.options.sourceFields) {
454
+ if ((sf.name === property && sf.validation?.readonly) || (sf.name === property && sf.validation?.send === false)
455
+ || property === 'boundedBy') {
456
+ delete feature.properties[property];
457
+ }
458
+ }
459
+ }
460
+ this.loading = true;
461
+ this.http[protocole](`${url}`, feature.properties, { headers: headers }).subscribe(() => {
462
+ this.loading = false;
463
+ this.cancelEdit(workspace, feature, true);
464
+ const message = this.languageService.translate.instant('igo.geo.workspace.modifySuccess');
465
+ this.messageService.success(message);
466
+ this.refreshMap(workspace.layer, workspace.layer.map);
467
+ let relationLayers = [];
468
+ for (const relation of workspace.layer.options.sourceOptions.relations) {
469
+ workspace.map.layers.forEach((layer) => {
470
+ if (layer.title === relation.title) {
471
+ relationLayers.push(layer);
472
+ layer.dataSource.ol.refresh();
473
+ }
474
+ });
475
+ }
476
+ this.relationLayers$.next(relationLayers);
477
+ }, error => {
478
+ this.loading = false;
479
+ error.error.caught = true;
480
+ const genericErrorMessage = this.languageService.translate.instant('igo.geo.workspace.addError');
481
+ const messages = workspace.layer.dataSource.options.edition.messages;
482
+ if (messages) {
483
+ let text;
484
+ messages.forEach(message => {
485
+ const key = Object.keys(message)[0];
486
+ if (error.error.message.includes(key)) {
487
+ text = message[key];
488
+ this.messageService.error(text);
489
+ }
490
+ });
491
+ if (!text) {
492
+ this.messageService.error(genericErrorMessage);
493
+ }
494
+ }
495
+ else {
496
+ this.messageService.error(genericErrorMessage);
497
+ }
498
+ });
499
+ }
500
+ cancelEdit(workspace, feature, fromSave = false) {
501
+ feature.edition = false;
502
+ this.adding$.next(false);
503
+ workspace.deleteDrawings();
504
+ workspace.entityStore.stateView.clear();
505
+ if (feature.newFeature) {
506
+ workspace.entityStore.delete(feature);
507
+ workspace.deactivateDrawControl();
508
+ this.rowsInMapExtentCheckCondition$.next(true);
509
+ }
510
+ else {
511
+ if (!fromSave) {
512
+ feature.properties = feature.original_properties;
513
+ feature.geometry = feature.original_geometry;
514
+ }
515
+ delete feature.original_properties;
516
+ delete feature.original_geometry;
517
+ }
518
+ }
519
+ getDomainValues(relation) {
520
+ let url = relation.url;
521
+ if (!url) {
522
+ url = this.configService.getConfig('edition.url') ?
523
+ this.configService.getConfig('edition.url') + relation.table : relation.table;
524
+ }
525
+ return this.http.get(url).pipe(map(result => {
526
+ return result;
527
+ }), catchError((err) => {
528
+ err.error.caught = true;
529
+ return throwError(err);
530
+ }));
531
+ }
532
+ /*
533
+ * Refresh both wms and wfs layer
534
+ * A new wfs loader is used to ensure cache is not retrieving old data
535
+ * WMS params are updated to ensure layer is correctly refreshed
536
+ */
537
+ refreshMap(layer, map) {
538
+ const wfsOlLayer = layer.dataSource.ol;
539
+ const loader = (extent, resolution, proj, success, failure) => {
540
+ layer.customWFSLoader(layer.ol.getSource(), layer.options.sourceOptions, this.authInterceptor, extent, resolution, proj, success, failure, true);
541
+ };
542
+ wfsOlLayer.setLoader(loader);
543
+ wfsOlLayer.refresh();
544
+ for (const lay of map.layers) {
545
+ if (lay.id !== layer.id &&
546
+ lay.options.linkedLayers?.linkId.includes(layer.id.substr(0, layer.id.indexOf('.') - 1)) &&
547
+ lay.options.linkedLayers?.linkId.includes('WmsWorkspaceTableSrc')) {
548
+ const wmsOlLayer = lay.dataSource.ol;
549
+ let params = wmsOlLayer.getParams();
550
+ params._t = new Date().getTime();
551
+ wmsOlLayer.updateParams(params);
552
+ }
553
+ }
554
+ }
555
+ validateFeature(feature, workspace) {
556
+ const translate = this.languageService.translate;
557
+ let message;
558
+ let key;
559
+ let valid = true;
560
+ workspace.meta.tableTemplate.columns.forEach(column => {
561
+ if (column.hasOwnProperty('validation') && column.validation) {
562
+ key = getColumnKeyWithoutPropertiesTag(column.name);
563
+ Object.keys(column.validation).forEach((type) => {
564
+ switch (type) {
565
+ case 'mandatory': {
566
+ if (column.validation[type] && (!feature.properties.hasOwnProperty(key) || !feature.properties[key])) {
567
+ valid = false;
568
+ message = translate.instant('igo.geo.formValidation.mandatory', {
569
+ column: column.title
570
+ });
571
+ this.messageService.error(message);
572
+ }
573
+ break;
574
+ }
575
+ case 'minValue': {
576
+ if (feature.properties.hasOwnProperty(key) && feature.properties[key] && feature.properties[key] < column.validation[type]) {
577
+ valid = false;
578
+ message = translate.instant('igo.geo.formValidation.minValue', {
579
+ column: column.title,
580
+ value: column.validation[type]
581
+ });
582
+ this.messageService.error(message);
583
+ }
584
+ break;
585
+ }
586
+ case 'maxValue': {
587
+ if (feature.properties.hasOwnProperty(key) && feature.properties[key] && feature.properties[key] > column.validation[type]) {
588
+ valid = false;
589
+ message = translate.instant('igo.geo.formValidation.maxValue', {
590
+ column: column.title,
591
+ value: column.validation[type]
592
+ });
593
+ this.messageService.error(message);
594
+ }
595
+ break;
596
+ }
597
+ case 'minLength': {
598
+ if (feature.properties.hasOwnProperty(key) && feature.properties[key] &&
599
+ feature.properties[key].length < column.validation[type]) {
600
+ valid = false;
601
+ message = translate.instant('igo.geo.formValidation.minLength', {
602
+ column: column.title,
603
+ value: column.validation[type]
604
+ });
605
+ this.messageService.error(message);
606
+ }
607
+ break;
608
+ }
609
+ case 'maxLength': {
610
+ if (feature.properties.hasOwnProperty(key) && feature.properties[key] &&
611
+ feature.properties[key].length > column.validation[type]) {
612
+ valid = false;
613
+ message = translate.instant('igo.geo.formValidation.maxLength', {
614
+ column: column.title,
615
+ value: column.validation[type]
616
+ });
617
+ this.messageService.error(message);
618
+ }
619
+ break;
620
+ }
621
+ }
622
+ });
623
+ }
624
+ });
625
+ return valid;
626
+ }
627
+ sanitizeParameter(feature, workspace) {
628
+ workspace.meta.tableTemplate.columns.forEach(column => {
629
+ if (column.type === 'list' && feature.properties[getColumnKeyWithoutPropertiesTag(column.name)]) {
630
+ feature.properties[getColumnKeyWithoutPropertiesTag(column.name)] =
631
+ feature.properties[getColumnKeyWithoutPropertiesTag(column.name)].toString();
632
+ }
633
+ });
634
+ }
635
+ }
636
+ EditionWorkspaceService.ɵfac = function EditionWorkspaceService_Factory(t) { return new (t || EditionWorkspaceService)(i0.ɵɵinject(i1.LayerService), i0.ɵɵinject(i2.StorageService), i0.ɵɵinject(i2.ConfigService), i0.ɵɵinject(i2.MessageService), i0.ɵɵinject(i2.LanguageService), i0.ɵɵinject(i3.HttpClient), i0.ɵɵinject(i4.MatDialog), i0.ɵɵinject(i5.StyleService), i0.ɵɵinject(i6.AuthInterceptor)); };
637
+ EditionWorkspaceService.ɵprov = /*@__PURE__*/ i0.ɵɵdefineInjectable({ token: EditionWorkspaceService, factory: EditionWorkspaceService.ɵfac, providedIn: 'root' });
638
+ (function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(EditionWorkspaceService, [{
639
+ type: Injectable,
640
+ args: [{
641
+ providedIn: 'root'
642
+ }]
643
+ }], function () { return [{ type: i1.LayerService }, { type: i2.StorageService }, { type: i2.ConfigService }, { type: i2.MessageService }, { type: i2.LanguageService }, { type: i3.HttpClient }, { type: i4.MatDialog }, { type: i5.StyleService }, { type: i6.AuthInterceptor }]; }, null); })();
644
+ function getColumnKeyWithoutPropertiesTag(column) {
645
+ if (column.includes('properties.')) {
646
+ return column.split('.')[1];
647
+ }
648
+ return column;
649
+ }
650
+ function removeZ(coords) {
651
+ if (coords.length === 0)
652
+ return coords;
653
+ if (typeof coords[0] === 'number')
654
+ return coords.slice(0, 2);
655
+ return coords.map(removeZ);
656
+ }
657
657
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRpdGlvbi13b3Jrc3BhY2Uuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2dlby9zcmMvbGliL3dvcmtzcGFjZS9zaGFyZWQvZWRpdGlvbi13b3Jrc3BhY2Uuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBaUMsV0FBVyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFHbEYsT0FBTyxFQUNMLFdBQVcsRUFFWCxtQ0FBbUMsRUFDbkMsa0NBQWtDLEVBRWxDLHlCQUF5QixFQUVQLE1BQU0sY0FBYyxDQUFDO0FBR3pDLE9BQU8sRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVsRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx3REFBd0QsQ0FBQztBQUUzRixPQUFPLEVBRUwsYUFBYSxFQUNiLFlBQVksRUFDWiwrQkFBK0IsRUFDL0IsbUNBQW1DLEVBQ25DLGdDQUFnQyxFQUNoQyw2QkFBNkIsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUd0RCxPQUFPLEVBQWtELGdCQUFnQixFQUFFLFdBQVcsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUs1RyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUV2RCxPQUFPLEdBQUcsTUFBTSxlQUFlLENBQUM7QUFDaEMsT0FBTyxPQUFPLE1BQU0sbUJBQW1CLENBQUM7QUFJeEMsT0FBTyxFQUFFLGVBQWUsRUFBYyxVQUFVLEVBQUUsTUFBTSxNQUFNLENBQUM7Ozs7Ozs7O0FBSy9ELE1BQU0sT0FBTyx1QkFBdUI7SUFjbEMsWUFDVSxZQUEwQixFQUMxQixjQUE4QixFQUM5QixhQUE0QixFQUM1QixjQUE4QixFQUM5QixlQUFnQyxFQUNoQyxJQUFnQixFQUNoQixN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QUFNLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRTtnQkFDL0YsT0FBTyxDQUFDLFVBQVUsQ0FBQyxnQ0FBZ0MsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7b0JBQy9ELE9BQU8sQ0FBQyxVQUFVLENBQUMsZ0NBQWdDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUM7YUFDaEY7UUFFSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7OzhGQXh0QlUsdUJBQXVCOzZFQUF2Qix1QkFBdUIsV0FBdkIsdUJBQXVCLG1CQUZ0QixNQUFNO3VGQUVQLHVCQUF1QjtjQUhuQyxVQUFVO2VBQUM7Z0JBQ1YsVUFBVSxFQUFFLE1BQU07YUFDbkI7O0FBNnRCRCxTQUFTLGdDQUFnQyxDQUFDLE1BQWM7SUFDdEQsSUFBSSxNQUFNLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxFQUFFO1FBQ2xDLE9BQU8sTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUM3QjtJQUNELE9BQU8sTUFBTSxDQUFDO0FBQ2hCLENBQUM7QUFFRCxTQUFTLE9BQU8sQ0FBQyxNQUFXO0lBQzFCLElBQUksTUFBTSxDQUFDLE1BQU0sS0FBSyxDQUFDO1FBQUUsT0FBTyxNQUFNLENBQUM7SUFDdkMsSUFBSSxPQUFPLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxRQUFRO1FBQUUsT0FBTyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUM3RCxPQUFPLE1BQU0sQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDN0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEh0dHBDbGllbnQsIEh0dHBFcnJvclJlc3BvbnNlLCBIdHRwSGVhZGVycyB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IE1hdERpYWxvZyB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XG5cbmltcG9ydCB7XG4gIEFjdGlvblN0b3JlLFxuICBFbnRpdHlSZWNvcmQsXG4gIEVudGl0eVN0b3JlRmlsdGVyQ3VzdG9tRnVuY1N0cmF0ZWd5LFxuICBFbnRpdHlTdG9yZUZpbHRlclNlbGVjdGlvblN0cmF0ZWd5LFxuICBFbnRpdHlTdG9yZVN0cmF0ZWd5RnVuY09wdGlvbnMsXG4gIEVudGl0eVRhYmxlQ29sdW1uUmVuZGVyZXIsXG4gIEVudGl0eVRhYmxlVGVtcGxhdGUsXG4gIEVudGl0eVRhYmxlQnV0dG9ufSBmcm9tICdAaWdvMi9jb21tb24nO1xuaW1wb3J0IHsgQ29uZmlnU2VydmljZSwgTGFuZ3VhZ2VTZXJ2aWNlLCBNZXNzYWdlU2VydmljZSwgU3RvcmFnZVNlcnZpY2UgfSBmcm9tICdAaWdvMi9jb3JlJztcbmltcG9ydCB7IEF1dGhJbnRlcmNlcHRvciB9IGZyb20gJ0BpZ28yL2F1dGgnO1xuaW1wb3J0IHsgY2F0Y2hFcnJvciwgbWFwLCBza2lwV2hpbGUsIHRha2UgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBSZWxhdGlvbk9wdGlvbnMsIFNvdXJjZUZpZWxkc09wdGlvbnNQYXJhbXMsIFdNU0RhdGFTb3VyY2UgfSBmcm9tICcuLi8uLi9kYXRhc291cmNlJztcbmltcG9ydCB7IEZlYXR1cmVEYXRhU291cmNlIH0gZnJvbSAnLi4vLi4vZGF0YXNvdXJjZS9zaGFyZWQvZGF0YXNvdXJjZXMvZmVhdHVyZS1kYXRhc291cmNlJztcbmltcG9ydCB7IFdGU0RhdGFTb3VyY2VPcHRpb25zIH0gZnJvbSAnLi4vLi4vZGF0YXNvdXJjZS9zaGFyZWQvZGF0YXNvdXJjZXMvd2ZzLWRhdGFzb3VyY2UuaW50ZXJmYWNlJztcbmltcG9ydCB7XG4gIEZlYXR1cmUsXG4gIEZlYXR1cmVNb3Rpb24sXG4gIEZlYXR1cmVTdG9yZSxcbiAgRmVhdHVyZVN0b3JlSW5NYXBFeHRlbnRTdHJhdGVneSxcbiAgRmVhdHVyZVN0b3JlSW5NYXBSZXNvbHV0aW9uU3RyYXRlZ3ksXG4gIEZlYXR1cmVTdG9yZUxvYWRpbmdMYXllclN0cmF0ZWd5LFxuICBGZWF0dXJlU3RvcmVTZWxlY3Rpb25TdHJhdGVneX0gZnJvbSAnLi4vLi4vZmVhdHVyZSc7XG5cbmltcG9ydCB7IE9nY0ZpbHRlcmFibGVEYXRhU291cmNlT3B0aW9ucyB9IGZyb20gJy4uLy4uL2ZpbHRlci9zaGFyZWQvb2djLWZpbHRlci5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgSW1hZ2VMYXllciwgTGF5ZXJTZXJ2aWNlLCBMYXllcnNMaW5rUHJvcGVydGllcywgTGlua2VkUHJvcGVydGllcywgVmVjdG9yTGF5ZXIgfSBmcm9tICcuLi8uLi9sYXllcic7XG5pbXBvcnQgeyBTdHlsZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9sYXllci9zaGFyZWQvc3R5bGUuc2VydmljZSc7XG5pbXBvcnQgeyBHZW9Xb3Jrc3BhY2VPcHRpb25zIH0gZnJvbSAnLi4vLi4vbGF5ZXIvc2hhcmVkL2xheWVycy9sYXllci5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgSWdvTWFwIH0gZnJvbSAnLi4vLi4vbWFwJztcbmltcG9ydCB7IFF1ZXJ5YWJsZURhdGFTb3VyY2VPcHRpb25zIH0gZnJvbSAnLi4vLi4vcXVlcnkvc2hhcmVkL3F1ZXJ5LmludGVyZmFjZXMnO1xuaW1wb3J0IHsgRWRpdGlvbldvcmtzcGFjZSB9IGZyb20gJy4vZWRpdGlvbi13b3Jrc3BhY2UnO1xuXG5pbXBvcnQgV0tUIGZyb20gJ29sL2Zvcm1hdC9XS1QnO1xuaW1wb3J0IEdlb0pTT04gZnJvbSAnb2wvZm9ybWF0L0dlb0pTT04nO1xuaW1wb3J0IG9sRmVhdHVyZSBmcm9tICdvbC9GZWF0dXJlJztcbmltcG9ydCBvbFNvdXJjZUltYWdlV01TIGZyb20gJ29sL3NvdXJjZS9JbWFnZVdNUyc7XG5pbXBvcnQgdHlwZSB7IGRlZmF1bHQgYXMgT2xHZW9tZXRyeSB9IGZyb20gJ29sL2dlb20vR2VvbWV0cnknO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlLCB0aHJvd0Vycm9yIH0gZnJvbSAncnhqcyc7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIEVkaXRpb25Xb3Jrc3BhY2VTZXJ2aWNlIHtcblxuICBwdWJsaWMgd3MkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmc+KHVuZGVmaW5lZCk7XG4gIHB1YmxpYyBhZGRpbmckID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIHB1YmxpYyByZWxhdGlvbkxheWVycyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEltYWdlTGF5ZXJbXSB8IFZlY3RvckxheWVyW10+KHVuZGVmaW5lZCk7XG4gIHB1YmxpYyByb3dzSW5NYXBFeHRlbnRDaGVja0NvbmRpdGlvbiQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KHRydWUpO1xuICBwdWJsaWMgbG9hZGluZyA9IGZhbHNlO1xuICBwdWJsaWMgd2t0Rm9ybWF0ID0gbmV3IFdLVCgpO1xuICBwdWJsaWMgZ2VvSnNvbkZvcm1hdCA9IG5ldyBHZW9KU09OKCk7XG5cbiAgZ2V0IHpvb21BdXRvKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnN0b3JhZ2VTZXJ2aWNlLmdldCgnem9vbUF1dG8nKSBhcyBib29sZWFuO1xuICB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBsYXllclNlcnZpY2U6IExheWVyU2VydmljZSxcbiAgICBwcml2YXRlIHN0b3JhZ2VTZXJ2aWNlOiBTdG9yYWdlU2VydmljZSxcbiAgICBwcml2YXRlIGNvbmZpZ1NlcnZpY2U6IENvbmZpZ1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBtZXNzYWdlU2VydmljZTogTWVzc2FnZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBsYW5ndWFnZVNlcnZpY2U6IExhbmd1YWdlU2VydmljZSxcbiAgICBwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQsXG4gICAgcHJpdmF0ZSBkaWFsb2c6IE1hdERpYWxvZyxcbiAgICBwcml2YXRlIHN0eWxlU2VydmljZTogU3R5bGVTZXJ2aWNlLFxuICAgIHB1YmxpYyBhdXRoSW50ZXJjZXB0b3I/OiBBdXRoSW50ZXJjZXB0b3IpIHsgfVxuXG4gIGNyZWF0ZVdvcmtzcGFjZShsYXllcjogSW1hZ2VMYXllciwgbWFwOiBJZ29NYXApOiBFZGl0aW9uV29ya3NwYWNlIHtcbiAgICBpZiAobGF5ZXIub3B0aW9ucy53b3Jrc3BhY2U/LmVuYWJsZWQgIT09IHRydWUgfHwgbGF5ZXIuZGF0YVNvdXJjZS5vcHRpb25zLmVkaXRpb24uZW5hYmxlZCAhPT0gdHJ1ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBsZXQgd2tzQ29uZmlnO1xuICAgIGlmIChsYXllci5vcHRpb25zLndvcmtzcGFjZSkge1xuICAgICAgd2tzQ29uZmlnID0gbGF5ZXIub3B0aW9ucy53b3Jrc3BhY2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIHdrc0NvbmZpZyA9IHt9O1xuICAgIH1cbiAgICB3a3NDb25maWcuc3JjSWQgPSBsYXllci5pZDtcbiAgICB3a3NDb25maWcud29ya3NwYWNlSWQgPSBsYXllci5pZDtcbiAgICB3a3NDb25maWcuZW5hYmxlZCA9IHRydWU7XG4gICAgd2tzQ29uZmlnLnBhZ2VTaXplID0gbGF5ZXIub3B0aW9ucy53b3Jrc3BhY2U/LnBhZ2VTaXplO1xuICAgIHdrc0NvbmZpZy5wYWdlU2l6ZU9wdGlvbnMgPSBsYXllci5vcHRpb25zLndvcmtzcGFjZT8ucGFnZVNpemVPcHRpb25zO1xuXG4gICAgY29uc3QgZGF0YVNvdXJjZTogV01TRGF0YVNvdXJjZSA9IGxheWVyLmRhdGFTb3VyY2UgYXMgV01TRGF0YVNvdXJjZSA7XG4gICAgY29uc3Qgd21zTGlua0lkID0gbGF5ZXIuaWQgKyAnLldtc1dvcmtzcGFjZVRhYmxlU3JjJztcbiAgICBjb25zdCB3ZnNMaW5rSWQgPSBsYXllci5pZCArICcuV2ZzV29ya3NwYWNlVGFibGVEZXN0JztcbiAgICBpZiAoIWxheWVyLm9wdGlvbnMubGlua2VkTGF5ZXJzKSB7XG4gICAgICBsYXllci5vcHRpb25zLmxpbmtlZExheWVycyA9IHsgbGlua0lkOiB3bXNMaW5rSWQsIGxpbmtzOiBbXSB9O1xuICAgIH1cbiAgICBjb25zdCBsaW5rUHJvcGVydGllcyA9IHtcbiAgICAgIHN5bmNlZERlbGV0ZTogdHJ1ZSxcbiAgICAgIGxpbmtlZElkczogW3dmc0xpbmtJZF0sXG4gICAgICBwcm9wZXJ0aWVzOiBbXG4gICAgICAgIExpbmtlZFByb3BlcnRpZXMuWklOREVYLFxuICAgICAgICBMaW5rZWRQcm9wZXJ0aWVzLlZJU0lCTEVdXG4gICAgfSBhcyBMYXllcnNMaW5rUHJvcGVydGllcztcblxuICAgIGlmICghbGF5ZXIub3B0aW9ucy53b3Jrc3BhY2U/Lm1pblJlc29sdXRpb24pIHtcbiAgICAgICBsaW5rUHJvcGVydGllcy5wcm9wZXJ0aWVzLnB1c2goTGlua2VkUHJvcGVydGllcy5NSU5SRVNPTFVUSU9OKTtcbiAgICB9XG4gICAgbGV0IGhhc09nY0ZpbHRlcnMgPSBmYWxzZTtcbiAgICBpZiAoKGRhdGFTb3VyY2Uub3B0aW9ucyBhcyBPZ2NGaWx0ZXJhYmxlRGF0YVNvdXJjZU9wdGlvbnMpLm9nY0ZpbHRlcnM/LmVuYWJsZWQpIHtcbiAgICAgIGxpbmtQcm9wZXJ0aWVzLnByb3BlcnRpZXMucHVzaChMaW5rZWRQcm9wZXJ0aWVzLk9HQ0ZJTFRFUlMpO1xuICAgICAgaGFzT2djRmlsdGVycyA9IHRydWU7XG4gICAgfVxuICAgIGlmICghbGF5ZXIub3B0aW9ucy53b3Jrc3BhY2U/Lm1heFJlc29sdXRpb24pIHtcbiAgICAgIGxpbmtQcm9wZXJ0aWVzLnByb3BlcnRpZXMucHVzaChMaW5rZWRQcm9wZXJ0aWVzLk1BWFJFU09MVVRJT04pO1xuICAgIH1cblxuICAgIGxldCBjbG9uZWRMaW5rczogTGF5ZXJzTGlua1Byb3BlcnRpZXNbXSA9IFtdO1xuICAgIGlmIChsYXllci5vcHRpb25zLmxpbmtlZExheWVycy5saW5rcykge1xuICAgICAgY2xvbmVkTGlua3MgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGxheWVyLm9wdGlvbnMubGlua2VkTGF5ZXJzLmxpbmtzKSk7XG4gICAgfVxuICAgIGNsb25lZExpbmtzLnB1c2gobGlua1Byb3BlcnRpZXMpO1xuXG4gICAgbGF5ZXIub3B0aW9ucy5saW5rZWRMYXllcnMubGlua0lkID0gbGF5ZXIub3B0aW9ucy5saW5rZWRMYXllcnMubGlua0lkID8gbGF5ZXIub3B0aW9ucy5saW5rZWRMYXllcnMubGlua0lkIDogd21zTGlua0lkLFxuICAgICAgbGF5ZXIub3B0aW9ucy5saW5rZWRMYXllcnMubGlua3MgPSBjbG9uZWRMaW5rcztcbiAgICBpbnRlcmZhY2UgV0ZTb3B0aW9ucyBleHRlbmRzIFdGU0RhdGFTb3VyY2VPcHRpb25zLCBPZ2NGaWx0ZXJhYmxlRGF0YVNvdXJjZU9wdGlvbnMgeyB9XG4gICAgbGV0IHdrcztcbiAgICB0aGlzLmxheWVyU2VydmljZVxuICAgICAgLmNyZWF0ZUFzeW5jTGF5ZXIoe1xuICAgICAgICBpZDogd2ZzTGlua0lkLFxuICAgICAgICBsaW5rZWRMYXllcnM6IHtcbiAgICAgICAgICBsaW5rSWQ6IHdmc0xpbmtJZFxuICAgICAgICB9LFxuICAgICAgICB3b3Jrc3BhY2U6IHtcbiAgICAgICAgICBzcmNJZDogbGF5ZXIuaWQsXG4gICAgICAgICAgd29ya3NwYWNlSWQ6IHVuZGVmaW5lZCxcbiAgICAgICAgICBlbmFibGVkOiBmYWxzZSxcbiAgICAgICAgICBxdWVyeU9wdGlvbnM6IHtcbiAgICAgICAgICAgIG1hcFF1ZXJ5T25PcGVuVGFiOiBsYXllci5vcHRpb25zLndvcmtzcGFjZT8ucXVlcnlPcHRpb25zPy5tYXBRdWVyeU9uT3BlblRhYixcbiAgICAgICAgICAgIHRhYlF1ZXJ5OiBmYWxzZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgcGFnZVNpemU6IGxheWVyLm9wdGlvbnMud29ya3NwYWNlPy5wYWdlU2l6ZSxcbiAgICAgICAgICBwYWdlU2l6ZU9wdGlvbnM6IGxheWVyLm9wdGlvbnMud29ya3NwYWNlPy5wYWdlU2l6ZU9wdGlvbnNcbiAgICAgICAgfSxcbiAgICAgICAgc2hvd0luTGF5ZXJMaXN0OiBmYWxzZSxcbiAgICAgICAgb3BhY2l0eTogMCxcbiAgICAgICAgdGl0bGU6IGxheWVyLnRpdGxlLFxuICAgICAgICBtaW5SZXNvbHV0aW9uOiBsYXllci5vcHRpb25zLndvcmtzcGFjZT8ubWluUmVzb2x1dGlvbiB8fCBsYXllci5taW5SZXNvbHV0aW9uIHx8IDAsXG4gICAgICAgIG1heFJlc29sdXRpb246IGxheWVyLm9wdGlvbnMud29ya3NwYWNlPy5tYXhSZXNvbHV0aW9uIHx8IGxheWVyLm1heFJlc29sdXRpb24gfHwgSW5maW5pdHksXG4gICAgICAgIHN0eWxlOiB0aGlzLnN0eWxlU2VydmljZS5jcmVhdGVTdHlsZShcbiAgICAgICAgICB7XG4gICAgICAgICAgICBmaWxsOiB7XG4gICAgICAgICAgICAgIFwiY29sb3JcIjogXCJyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDEpXCJcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzdHJva2U6IHtcbiAgICAgICAgICAgICAgXCJjb2xvclwiOiBcInJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wMSlcIlxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNpcmNsZToge1xuICAgICAgICAgICAgICBmaWxsOiB7XG4gICAgICAgICAgICAgICAgY29sb3I6IFwicmdiYSgyNTUsIDI1NSwgMjU1LCAwLjAxKVwiXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHN0cm9rZToge1xuICAgICAgICAgICAgICAgIGNvbG9yOiBcInJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wMSlcIlxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICByYWRpdXM6IDVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSxcbiAgICAgICAgICBzb3VyY2VPcHRpb25zOiB7XG4gICAgICAgICAgZG93bmxvYWQ6IGRhdGFTb3VyY2Uub3B0aW9ucy5kb3dubG9hZCxcbiAgICAgICAgICB0eXBlOiAnd2ZzJyxcbiAgICAgICAgICB1cmw6IGRhdGFTb3VyY2Uub3B0aW9ucy51cmxXZnMgfHwgZGF0YVNvdXJjZS5vcHRpb25zLnVybCxcbiAgICAgICAgICBxdWVyeWFibGU6IHRydWUsXG4gICAgICAgICAgcmVsYXRpb25zOiBkYXRhU291cmNlLm9wdGlvbnMucmVsYXRpb25zLFxuICAgICAgICAgIHF1ZXJ5VGl0bGU6IChkYXRhU291cmNlLm9wdGlvbnMgYXMgUXVlcnlhYmxlRGF0YVNvdXJjZU9wdGlvbnMpLnF1ZXJ5VGl0bGUsXG4gICAgICAgICAgcGFyYW1zOiBkYXRhU291cmNlLm9wdGlvbnMucGFyYW1zV0ZTLFxuICAgICAgICAgIG9nY0ZpbHRlcnM6IE9iamVjdC5hc3NpZ24oe30sIGRhdGFTb3VyY2Uub2djRmlsdGVycywge2VuYWJsZWQ6IGhhc09nY0ZpbHRlcnN9KSxcbiAgICAgICAgICBzb3VyY2VGaWVsZHM6IGRhdGFTb3VyY2Uub3B0aW9ucy5zb3VyY2VGaWVsZHMgfHwgdW5kZWZpbmVkLFxuICAgICAgICAgIGVkaXRpb246IGRhdGFTb3VyY2Uub3B0aW9ucy5lZGl0aW9uXG4gICAgICAgIH0gYXMgV0ZTb3B0aW9uc1xuICAgICAgfSlcbiAgICAgIC5zdWJzY3JpYmUoKHdvcmtzcGFjZUxheWVyOiBWZWN0b3JMYXllcikgPT4ge1xuICAgICAgICBtYXAuYWRkTGF5ZXIod29ya3NwYWNlTGF5ZXIpO1xuICAgICAgICBsYXllci5vbC5zZXRQcm9wZXJ0aWVzKHsgbGlua2VkTGF5ZXJzOiB7IGxpbmtJZDogbGF5ZXIub3B0aW9ucy5saW5rZWRMYXllcnMubGlua0lkLCBsaW5rczogY2xvbmVkTGlua3MgfSB9LCBmYWxzZSk7XG4gICAgICAgIHdvcmtzcGFjZUxheWVyLmRhdGFTb3VyY2Uub2wucmVmcmVzaCgpO1xuXG4gICAgICAgIHdrcyA9IG5ldyBFZGl0aW9uV29ya3NwYWNlKHtcbiAgICAgICAgICBpZDogbGF5ZXIuaWQsXG4gICAgICAgICAgdGl0bGU6IGxheWVyLnRpdGxlLFxuICAgICAgICAgIGxheWVyOiB3b3Jrc3BhY2VMYXllcixcbiAgICAgICAgICBtYXAsXG4gICAgICAgICAgZW50aXR5U3RvcmU6IHRoaXMuY3JlYXRlRmVhdHVyZVN0b3JlKHdvcmtzcGFjZUxheWVyLCBtYXApLFxuICAgICAgICAgIGFjdGlvblN0b3JlOiBuZXcgQWN0aW9uU3RvcmUoW10pLFxuICAgICAgICAgIG1ldGE6IHtcbiAgICAgICAgICAgIHRhYmxlVGVtcGxhdGU6IHVuZGVmaW5lZFxuICAgICAgICAgIH1cbiAgICAgICAgfSwgdGhpcywgdGhpcy5kaWFsb2csIHRoaXMuY29uZmlnU2VydmljZSk7XG4gICAgICAgIHRoaXMuY3JlYXRlVGFibGVUZW1wbGF0ZSh3a3MsIHdvcmtzcGFjZUxheWVyKTtcblxuICAgICAgICB3b3Jrc3BhY2VMYXllci5vcHRpb25zLndvcmtzcGFjZS53b3Jrc3BhY2VJZCA9IHdvcmtzcGFjZUxheWVyLmlkO1xuICAgICAgICBsYXllci5vcHRpb25zLndvcmtzcGFjZSA9IE9iamVjdC5hc3NpZ24oe30sIGxheWVyLm9wdGlvbnMud29ya3NwYWNlLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHdrc0NvbmZpZ1xuICAgICAgICAgIH0gYXMgR2VvV29ya3NwYWNlT3B0aW9ucyk7XG5cbiAgICAgICAgZGVsZXRlIGRhdGFTb3VyY2Uub3B0aW9ucy5kb3dubG9hZDtcbiAgICAgICAgcmV0dXJuIHdrcztcblxuICAgICAgfSk7XG5cbiAgICByZXR1cm4gd2tzO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVGZWF0dXJlU3RvcmUobGF5ZXI6IFZlY3RvckxheWVyLCBtYXA6IElnb01hcCk6IEZlYXR1cmVTdG9yZSB7XG4gICAgY29uc3Qgc3RvcmUgPSBuZXcgRmVhdHVyZVN0b3JlKFtdLCB7IG1hcCB9KTtcbiAgICBzdG9yZS5iaW5kTGF5ZXIobGF5ZXIpO1xuXG4gICAgY29uc3QgbG9hZGluZ1N0cmF0ZWd5ID0gbmV3IEZlYXR1cmVTdG9yZUxvYWRpbmdMYXllclN0cmF0ZWd5KHt9KTtcbiAgICBjb25zdCBpbk1hcEV4dGVudFN0cmF0ZWd5ID0gbmV3IEZlYXR1cmVTdG9yZUluTWFwRXh0ZW50U3RyYXRlZ3koe30pO1xuICAgIGNvbnN0IGluTWFwUmVzb2x1dGlvblN0cmF0ZWd5ID0gbmV3IEZlYXR1cmVTdG9yZUluTWFwUmVzb2x1dGlvblN0cmF0ZWd5KHt9KTtcbiAgICBjb25zdCBzZWxlY3RlZFJlY29yZFN0cmF0ZWd5ID0gbmV3IEVudGl0eVN0b3JlRmlsdGVyU2VsZWN0aW9uU3RyYXRlZ3koe30pO1xuICAgIGNvbnN0IHNlbGVjdGlvblN0cmF0ZWd5ID0gbmV3IEZlYXR1cmVTdG9yZVNlbGVjdGlvblN0cmF0ZWd5KHtcbiAgICAgIGxheWVyOiBuZXcgVmVjdG9yTGF5ZXIoe1xuICAgICAgICB6SW5kZXg6IDMwMCxcbiAgICAgICAgc291cmNlOiBuZXcgRmVhdHVyZURhdGFTb3VyY2UoKSxcbiAgICAgICAgc3R5bGU6IHVuZGVmaW5lZCxcbiAgICAgICAgc2hvd0luTGF5ZXJMaXN0OiBmYWxzZSxcbiAgICAgICAgZXhwb3J0YWJsZTogZmFsc2UsXG4gICAgICAgIGJyb3dzYWJsZTogZmFsc2VcbiAgICAgIH0pLFxuICAgICAgbWFwLFxuICAgICAgaGl0VG9sZXJhbmNlOiAxNSxcbiAgICAgIG1vdGlvbjogdGhpcy56b29tQXV0byA/IEZlYXR1cmVNb3Rpb24uRGVmYXVsdCA6IEZlYXR1cmVNb3Rpb24uTm9uZSxcbiAgICAgIG1hbnk6IHRydWUsXG4gICAgICBkcmFnQm94OiB0cnVlXG4gICAgfSk7XG4gICAgc3RvcmUuYWRkU3RyYXRlZ3kobG9hZGluZ1N0cmF0ZWd5LCB0cnVlKTtcbiAgICBzdG9yZS5hZGRTdHJhdGVneShpbk1hcEV4dGVudFN0cmF0ZWd5LCB0cnVlKTtcbiAgICBzdG9yZS5hZGRTdHJhdGVneShpbk1hcFJlc29sdXRpb25TdHJhdGVneSwgdHJ1ZSk7XG4gICAgc3RvcmUuYWRkU3RyYXRlZ3koc2VsZWN0aW9uU3RyYXRlZ3ksIHRydWUpO1xuICAgIHN0b3JlLmFkZFN0cmF0ZWd5KHNlbGVjdGVkUmVjb3JkU3RyYXRlZ3ksIGZhbHNlKTtcbiAgICBzdG9yZS5hZGRTdHJhdGVneSh0aGlzLmNyZWF0ZUZpbHRlckluTWFwRXh0ZW50T3JSZXNvbHV0aW9uU3RyYXRlZ3koKSwgdHJ1ZSk7XG4gICAgcmV0dXJuIHN0b3JlO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVUYWJsZVRlbXBsYXRlKHdvcmtzcGFjZTogRWRpdGlvbldvcmtzcGFjZSwgbGF5ZXI6IFZlY3RvckxheWVyKTogRW50aXR5VGFibGVUZW1wbGF0ZSB7XG4gICAgY29uc3QgZmllbGRzID0gbGF5ZXIuZGF0YVNvdXJjZS5vcHRpb25zLnNvdXJjZUZpZWxkcyB8fCBbXTtcblxuICAgIGNvbnN0IHJlbGF0aW9ucyA9IGxheWVyLmRhdGFTb3VyY2Uub3B0aW9ucy5yZWxhdGlvbnMgfHwgW107XG5cbiAgICBsZXQgcmVuZGVyZXJUeXBlID0gRW50aXR5VGFibGVDb2x1bW5SZW5kZXJlci5VbnNhbml0aXplZEhUTUw7XG4gICAgbGV0IGJ1dHRvbnMgPSBbXTtcbiAgICBsZXQgY29sdW1ucyA9IFtdO1xuICAgIGxldCByZWxhdGlvbnNDb2x1bW4gPSBbXTtcblxuICAgIGJ1dHRvbnMgPSBbe1xuICAgICAgbmFtZTogJ2VkaXRpb24nLFxuICAgICAgdGl0bGU6IHVuZGVmaW5lZCxcbiAgICAgIHJlbmRlcmVyOiBFbnRpdHlUYWJsZUNvbHVtblJlbmRlcmVyLkJ1dHRvbkdyb3VwLFxuICAgICAgcHJpbWFyeTogZmFsc2UsXG4gICAgICB2YWx1ZUFjY2Vzc29yOiAoKSA9PiB7XG4gICAgICAgIHJldHVybiBbe1xuICAgICAgICAgIGVkaXRNb2RlOiBmYWxzZSxcbiAgICAgICAgICBpY29uOiAncGVuY2lsJyxcbiAgICAgICAgICBjb2xvcjogJ3ByaW1hcnknLFxuICAgICAgICAgIGRpc2FibGVkOiBsYXllci5kYXRhU291cmNlLm9wdGlvbnMuZWRpdGlvbi5tb2RpZnlCdXR0b24gPT09IGZhbHNlID8gdHJ1ZSA6IGZhbHNlLFxuICAgICAgICAgIGNsaWNrOiAoZmVhdHVyZSkgPT4geyB3b3Jrc3BhY2UuZWRpdEZlYXR1cmUoZmVhdHVyZSwgd29ya3NwYWNlKTsgfVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgZWRpdE1vZGU6IGZhbHNlLFxuICAgICAgICAgIGljb246ICdkZWxldGUnLFxuICAgICAgICAgIGNvbG9yOiAnd2FybicsXG4gICAgICAgICAgZGlzYWJsZWQ6IGxheWVyLmRhdGFTb3VyY2Uub3B0aW9ucy5lZGl0aW9uLmRlbGV0ZUJ1dHRvbiA9PT0gZmFsc2UgPyB0cnVlIDogZmFsc2UsXG4gICAgICAgICAgY2xpY2s6IChmZWF0dXJlKSA9PiB7IHdvcmtzcGFjZS5kZWxldGVGZWF0dXJlKGZlYXR1cmUsIHdvcmtzcGFjZSk7IH1cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGVkaXRNb2RlOiB0cnVlLFxuICAgICAgICAgIGljb246ICdjaGVjaycsXG4gICAgICAgICAgY29sb3I6ICdwcmltYXJ5JyxcbiAgICAgICAgICBkaXNhYmxlZDogdGhpcy5sb2FkaW5nLFxuICAgICAgICAgIGNsaWNrOiAoZmVhdHVyZSkgPT4geyB0aGlzLnNhdmVGZWF0dXJlKGZlYXR1cmUsIHdvcmtzcGFjZSk7IH1cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGVkaXRNb2RlOiB0cnVlLFxuICAgICAgICAgIGljb246ICdhbHBoYS14JyxcbiAgICAgICAgICBjb2xvcjogJ3ByaW1hcnknLFxuICAgICAgICAgIGRpc2FibGVkOiB0aGlzLmxvYWRpbmcsXG4gICAgICAgICAgY2xpY2s6IChmZWF0dXJlKSA9PiB7IHRoaXMuY2FuY2VsRWRpdCh3b3Jrc3BhY2UsIGZlYXR1cmUpOyB9XG4gICAgICAgIH1dIGFzIEVudGl0eVRhYmxlQnV0dG9uW107XG4gICAgICB9XG4gICAgfV07XG5cblxuICAgIGlmIChmaWVsZHMubGVuZ3RoID09PSAwKSB7XG4gICAgICB3b3Jrc3BhY2UuZW50aXR5U3RvcmUuZW50aXRpZXMkLnBpcGUoXG4gICAgICAgIHNraXBXaGlsZSh2YWwgPT4gdmFsLmxlbmd0aCA9PT0gMCksXG4gICAgICAgIHRha2UoMSlcbiAgICAgICkuc3Vic2NyaWJlKGVudGl0aWVzID0+IHtcbiAgICAgICAgY29uc3Qgb2wgPSAoZW50aXRpZXNbMF0gYXMgRmVhdHVyZSkub2wgYXMgb2xGZWF0dXJlPE9sR2VvbWV0cnk+O1xuICAgICAgICBjb25zdCBjb2x1bW5zRnJvbUZlYXR1cmVzID0gb2wuZ2V0S2V5cygpXG4gICAgICAgICAgLmZpbHRlcihcbiAgICAgICAgICAgIGNvbCA9PiAhY29sLnN0YXJ0c1dpdGgoJ18nKSAmJlxuICAgICAgICAgICAgICBjb2wgIT09ICdnZW9tZXRyeScgJiZcbiAgICAgICAgICAgICAgY29sICE9PSBvbC5nZXRHZW9tZXRyeU5hbWUoKSAmJlxuICAgICAgICAgICAgICAhY29sLm1hdGNoKC9ib3VuZGVkYnkvZ2kpKVxuICAgICAgICAgIC5tYXAoa2V5ID0+IHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIG5hbWU6IGBwcm9wZXJ0aWVzLiR7a2V5fWAsXG4gICAgICAgICAgICAgIHRpdGxlOiBrZXksXG4gICAgICAgICAgICAgIHJlbmRlcmVyOiByZW5kZXJlclR5cGUsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH0pO1xuICAgICAgICB3b3Jrc3BhY2UubWV0YS50YWJsZVRlbXBsYXRlID0ge1xuICAgICAgICAgIHNlbGVjdGlvbjogZmFsc2UsXG4gICAgICAgICAgc29ydDogdHJ1ZSxcbiAgICAgICAgICBjb2x1bW5zOiBjb2x1bW5zRnJvbUZlYXR1cmVzXG4gICAgICAgIH07XG4gICAgICB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb2x1bW5zID0gZmllbGRzLm1hcCgoZmllbGQ6IFNvdXJjZUZpZWxkc09wdGlvbnNQYXJhbXMpID0+IHtcblxuICAgICAgbGV0IGNvbHVtbiA9IHtcbiAgICAgICAgbmFtZTogYHByb3BlcnRpZXMuJHtmaWVsZC5uYW1lfWAsXG4gICAgICAgIHRpdGxlOiBmaWVsZC5hbGlhcyA/IGZpZWxkLmFsaWFzIDogZmllbGQubmFtZSxcbiAgICAgICAgcmVuZGVyZXI6IHJlbmRlcmVyVHlwZSxcbiAgICAgICAgdmFsdWVBY2Nlc3NvcjogdW5kZWZpbmVkLFxuICAgICAgICBjZWxsQ2xhc3NGdW5jOiAoKSA9PiB7XG4gICAgICAgICAgY29uc3QgY2VsbENsYXNzID0ge307XG4gICAgICAgICAgaWYgKGZpZWxkLnR5cGUpIHtcbiAgICAgICAgICAgIGNlbGxDbGFzc1tgY2xhc3NfJHtmaWVsZC50eXBlfWBdID0gdHJ1ZTtcbiAgICAgICAgICAgIHJldHVybiBjZWxsQ2xhc3M7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBwcmltYXJ5OiBmaWVsZC5wcmltYXJ5ID09PSB0cnVlID8gdHJ1ZSA6IGZhbHNlLFxuICAgICAgICB2aXNpYmxlOiBmaWVsZC52aXNpYmxlLFxuICAgICAgICB2YWxpZGF0aW9uOiBmaWVsZC52YWxpZGF0aW9uLFxuICAgICAgICBsaW5rQ29sdW1uRm9yY2U6IGZpZWxkLmxpbmtDb2x1bW5Gb3JjZSxcbiAgICAgICAgdHlwZTogZmllbGQudHlwZSxcbiAgICAgICAgZG9tYWluVmFsdWVzOiB1bmRlZmluZWQsXG4gICAgICAgIHJlbGF0aW9uOiB1bmRlZmluZWQsXG4gICAgICAgIG11bHRpcGxlOiBmaWVsZC5tdWx0aXBsZSxcbiAgICAgICAgc3RlcDogZmllbGQuc3RlcCxcbiAgICAgICAgdG9vbHRpcDogZmllbGQudG9vbHRpcFxuICAgICAgfTtcblxuICAgICAgaWYgKGZpZWxkLnR5cGUgPT09ICdsaXN0JyB8fCBmaWVsZC50eXBlID09PSAnYXV0b2NvbXBsZXRlJykge1xuICAgICAgICB0aGlzLmdldERvbWFpblZhbHVlcyhmaWVsZC5yZWxhdGlvbikuc3Vic2NyaWJlKHJlc3VsdCA9PiB7XG4gICAgICAgICAgY29sdW1uLmRvbWFpblZhbHVlcyA9IHJlc3VsdDtcbiAgICAgICAgICBjb2x1bW4ucmVsYXRpb24gPSBmaWVsZC5yZWxhdGlvbjtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gY29sdW1uO1xuICAgIH0pO1xuXG4gICAgcmVsYXRpb25zQ29sdW1uID0gcmVsYXRpb25zLm1hcCgocmVsYXRpb246IFJlbGF0aW9uT3B0aW9ucykgPT4ge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbmFtZTogYHByb3BlcnRpZXMuJHtyZWxhdGlvbi5uYW1lfWAsXG4gICAgICAgIHRpdGxlOiByZWxhdGlvbi5hbGlhcyA/IHJlbGF0aW9uLmFsaWFzIDogcmVsYXRpb24ubmFtZSxcbiAgICAgICAgcmVuZGVyZXI6IEVudGl0eVRhYmxlQ29sdW1uUmVuZGVyZXIuSWNvbixcbiAgICAgICAgaWNvbjogcmVsYXRpb24uaWNvbixcbiAgICAgICAgcGFyZW50OiByZWxhdGlvbi5wYXJlbnQsXG4gICAgICAgIHR5cGU6ICdyZWxhdGlvbicsXG4gICAgICAgIHRvb2x0aXA6IHJlbGF0aW9uLnRvb2x0aXAsXG4gICAgICAgIG9uQ2xpY2s6ICgpID0+IHtcbiAgICAgICAgICBpZiAodGhpcy5hZGRpbmckLmdldFZhbHVlKCkgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICB0aGlzLndzJC5uZXh0KHJlbGF0aW9uLnRpdGxlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGNlbGxDbGFzc0Z1bmM6ICgpID0+IHtcbiAgICAgICAgICByZXR1cm4geyAnY2xhc3NfaWNvbic6IHRydWUgfTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9KTtcblxuICAgIGNvbHVtbnMucHVzaCguLi5yZWxhdGlvbnNDb2x1bW4pO1xuICAgIGNvbHVtbnMucHVzaCguLi5idXR0b25zKTtcblxuICAgIHdvcmtzcGFjZS5tZXRhLnRhYmxlVGVtcGxhdGUgPSB7XG4gICAgICBzZWxlY3Rpb246IGZhbHNlLFxuICAgICAgc29ydDogdHJ1ZSxcbiAgICAgIGNvbHVtbnNcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVGaWx0ZXJJbk1hcEV4dGVudE9yUmVzb2x1dGlvblN0cmF0ZWd5KCk6IEVudGl0eVN0b3JlRmlsdGVyQ3VzdG9tRnVuY1N0cmF0ZWd5IHtcbiAgICBjb25zdCBmaWx0ZXJDbGF1c2VGdW5jID0gKHJlY29yZDogRW50aXR5UmVjb3JkPG9iamVjdD4pID0+IHtcbiAgICAgIHJldHVybiByZWNvcmQuc3RhdGUuaW5NYXBFeHRlbnQgPT09IHRydWUgJiYgcmVjb3JkLnN0YXRlLmluTWFwUmVzb2x1dGlvbiA9PT0gdHJ1ZTtcbiAgICB9O1xuICAgIHJldHVybiBuZXcgRW50aXR5U3RvcmVGaWx0ZXJDdXN0b21GdW5jU3RyYXRlZ3koe2ZpbHRlckNsYXVzZUZ1bmN9IGFzIEVudGl0eVN0b3JlU3RyYXRlZ3lGdW5jT3B0aW9ucyk7XG4gIH1cblxuICBwdWJsaWMgc2F2ZUZlYXR1cmUoZmVhdHVyZSwgd29ya3NwYWNlOiBFZGl0aW9uV29ya3NwYWNlKSB7XG4gICAgaWYgKCF0aGlzLnZhbGlkYXRlRmVhdHVyZShmZWF0dXJlLCB3b3Jrc3BhY2UpKXtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICB0aGlzLnNhbml0aXplUGFyYW1ldGVyKGZlYXR1cmUsIHdvcmtzcGFjZSk7XG5cbiAgICBjb25zdCBiYXNlVXJsID0gd29ya3NwYWNlLmxheWVyLmRhdGFTb3VyY2Uub3B0aW9ucy5lZGl0aW9uLmJhc2VVcmw7XG4gICAgbGV0IHVybCA9IHRoaXMuY29uZmlnU2VydmljZS5nZXRDb25maWcoJ2VkaXRpb24udXJsJyk7XG5cbiAgICBpZiAoIXVybCkge1xuICAgICAgdXJsID0gYmFzZVVybDtcbiAgICB9IGVsc2Uge1xuICAgICAgdXJsICs9IGJhc2VVcmwgPyBiYXNlVXJsIDogJyc7XG4gICAgfVxuXG4gICAgaWYgKGZlYXR1cmUubmV3RmVhdHVyZSkge1xuICAgICAgdXJsICs9IHdvcmtzcGFjZS5sYXllci5kYXRhU291cmNlLm9wdGlvbnMuZWRpdGlvbi5hZGRVcmw7XG5cbiAgICAgIGNvbnN0IGFkZEhlYWRlcnMgPSB3b3Jrc3BhY2UubGF5ZXIuZGF0YVNvdXJjZS5vcHRpb25zLmVkaXRpb24uYWRkSGVhZGVycztcbiAgICAgIGNvbnN0IGhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoYWRkSGVhZGVycyk7XG5cbiAgICAgIHRoaXMuYWRkRmVhdHVyZShmZWF0dXJlLCB3b3Jrc3BhY2UsIHVybCwgaGVhZGVycyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh3b3Jrc3BhY2UubGF5ZXIuZGF0YVNvdXJjZS5vcHRpb25zLmVkaXRpb24ubW9kaWZ5UHJvdG9jb2wgIT09IFwicG9zdFwiKSB7XG4gICAgICAgIHVybCArPSAnPycgKyB3b3Jrc3BhY2UubGF5ZXIuZGF0YVNvdXJjZS5vcHRpb25zLmVkaXRpb24ubW9kaWZ5VXJsICsgZmVhdHVyZS5pZGtleTtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICB1cmwgKz0gd29ya3NwYWNlLmxheWVyLmRhdGFTb3VyY2Uub3B0aW9ucy5lZGl0aW9uLm1vZGlmeVVybDtcbiAgICAgIH1cblxuICAgICAgY29uc3QgcHJvdG9jb2xlID0gd29ya3NwYWNlLmxheWVyLmRhdGFTb3VyY2Uub3B0aW9ucy5lZGl0aW9uLm1vZGlmeVByb3RvY29sO1xuICAgICAgY29uc3QgbW9kaWZ5SGVhZGVycyA9IHdvcmtzcGFjZS5sYXllci5kYXRhU291cmNlLm9wdGlvbnMuZWRpdGlvbi5tb2RpZnlIZWFkZXJzO1xuICAgICAgY29uc3QgaGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycyhtb2RpZnlIZWFkZXJzKTtcblxuICAgICAgdGhpcy5tb2RpZnlGZWF0dXJlKGZlYXR1cmUsIHdvcmtzcGFjZSwgdXJsLCBoZWFkZXJzLCBwcm90b2NvbGUpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBhZGRGZWF0dXJlKGZlYXR1cmUsIHdvcmtzcGFjZTogRWRpdGlvbldvcmtzcGFjZSwgdXJsOiBzdHJpbmcsIGhlYWRlcnM6IHtba2V5OiBzdHJpbmddOiBhbnl9KSB7XG4gICAgaWYgKHdvcmtzcGFjZS5sYXllci5kYXRhU291cmNlLm9wdGlvbnMuZWRpdGlvbi5oYXNHZW9tZXRyeSkge1xuICAgICAgY29uc3QgcHJvakRlc3QgPSB3b3Jrc3BhY2UubGF5ZXIub3B0aW9ucy5zb3VyY2VPcHRpb25zLmVkaXRpb24uZ2VvbURhdGFiYXNlUHJvajtcbiAgICAgIGZlYXR1cmUucHJvcGVydGllc1t3b3Jrc3BhY2UubGF5ZXIuZGF0YVNvdXJjZS5vcHRpb25zLnBhcmFtcy5maWVsZE5hbWVHZW9tZXRyeV0gPVxuICAgICAgJ1NSSUQ9JyArIHByb2pEZXN0LnJlcGxhY2UoXCJFUFNHOlwiLCBcIlwiKSArICc7JyArIHRoaXMud2t0Rm9ybWF0LndyaXRlR2VvbWV0cnkoXG4gICAgICAgIHRoaXMuZ2VvSnNvbkZvcm1hdC5yZWFkRmVhdHVyZShmZWF0dXJlLmdlb21ldHJ5KS5nZXRHZW9tZXRyeSgpLnRyYW5zZm9ybSgnRVBTRzo0MzI2JywgcHJvakRlc3QpLFxuICAgICAgICB7IGRhdGFQcm9qZWN0aW9uOiBwcm9qRGVzdCB9KTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IHByb3BlcnR5IGluIGZlYXR1cmUucHJvcGVydGllcykge1xuICAgICAgZm9yIChjb25zdCBzZiBvZiB3b3Jrc3BhY2UubGF5ZXIuZGF0YVNvdXJjZS5vcHRpb25zLnNvdXJjZUZpZWxkcykge1xuICAgICAgICBpZiAoKHNmLm5hbWUgPT09IHByb3BlcnR5ICYmIHNmLnZhbGlkYXRpb24/LnJlYWRvbmx5KSB8fCAoc2YubmFtZSA9PT0gcHJvcGVydHkgJiYgc2YudmFsaWRhdGlvbj8uc2VuZCA9PT0gZmFsc2UpKSB7XG4gICAgICAgICAgZGVsZXRlIGZlYXR1cmUucHJvcGVydGllc1twcm9wZXJ0eV07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xuICAgIHRoaXMuaHR0cC5wb3N0KGAke3VybH1gLCBmZWF0dXJlLnByb3BlcnRpZXMsIHsgaGVhZGVyczogaGVhZGVycyB9KS5zdWJzY3JpYmUoXG4gICAgICAoKSA9PiB7XG4gICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgICB3b3Jrc3BhY2UuZW50aXR5U3RvcmUuc3RhdGVWaWV3LmNsZWFyKCk7XG4gICAgICAgIHdvcmtzcGFjZS5kZWxldGVEcmF3aW5ncygpO1xuICAgICAgICB3b3Jrc3BhY2UuZW50aXR5U3RvcmUuZGVsZXRlKGZlYXR1cmUpO1xuXG4gICAgICAgIGNvbnN0IG1lc3NhZ2UgPSB0aGlzLmxhbmd1YWdlU2VydmljZS50cmFuc2xhdGUuaW5zdGFudChcbiAgICAgICAgICAnaWdvLmdlby53b3Jrc3BhY2UuYWRkU3VjY2VzcydcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5zdWNjZXNzKG1lc3NhZ2UpO1xuXG4gICAgICAgIHRoaXMucmVmcmVzaE1hcCh3b3Jrc3BhY2UubGF5ZXIgYXMgVmVjdG9yTGF5ZXIsIHdvcmtzcGFjZS5sYXllci5tYXApO1xuICAgICAgICB0aGlzLmFkZGluZyQubmV4dChmYWxzZSk7XG4gICAgICAgIHRoaXMucm93c0luTWFwRXh0ZW50Q2hlY2tDb25kaXRpb24kLm5leHQodHJ1ZSk7XG4gICAgICB9LFxuICAgICAgZXJyb3IgPT4ge1xuICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgZXJyb3IuZXJyb3IuY2F1Z2h0ID0gdHJ1ZTtcbiAgICAgICAgY29uc3QgZ2VuZXJpY0Vycm9yTWVzc2FnZSA9IHRoaXMubGFuZ3VhZ2VTZXJ2aWNlLnRyYW5zbGF0ZS5pbnN0YW50KFxuICAgICAgICAgICdpZ28uZ2VvLndvcmtzcGFjZS5hZGRFcnJvcidcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgbWVzc2FnZXMgPSB3b3Jrc3BhY2UubGF5ZXIuZGF0YVNvdXJjZS5vcHRpb25zLmVkaXRpb24ubWVzc2FnZXM7XG4gICAgICAgIGlmIChtZXNzYWdlcykge1xuICAgICAgICAgIGxldCB0ZXh0O1xuICAgICAgICAgIG1lc3NhZ2VzLmZvckVhY2gobWVzc2FnZSA9PiB7XG4gICAgICAgICAgICBjb25zdCBrZXkgPSBPYmplY3Qua2V5cyhtZXNzYWdlKVswXTtcbiAgICAgICAgICAgIGlmIChlcnJvci5lcnJvci5tZXNzYWdlLmluY2x1ZGVzKGtleSkpIHtcbiAgICAgICAgICAgICAgdGV4dCA9IG1lc3NhZ2Vba2V5XTtcbiAgICAgICAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5lcnJvcih0ZXh0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgICBpZiAoIXRleHQpIHtcbiAgICAgICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuZXJyb3IoZ2VuZXJpY0Vycm9yTWVzc2FnZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuZXJyb3IoZ2VuZXJpY0Vycm9yTWVzc2FnZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICApO1xuICB9XG5cbiAgcHVibGljIGRlbGV0ZUZlYXR1cmUod29ya3NwYWNlOiBFZGl0aW9uV29ya3NwYWNlLCB1cmw6IHN0cmluZykge1xuICAgIHRoaXMubG9hZGluZyA9IHRydWU7XG4gICAgdGhpcy5odHRwLmRlbGV0ZShgJHt1cmx9YCwge30pLnN1YnNjcmliZShcbiAgICAgICgpID0+IHtcbiAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgICAgIGNvbnN0IG1lc3NhZ2UgPSB0aGlzLmxhbmd1YWdlU2VydmljZS50cmFuc2xhdGUuaW5zdGFudChcbiAgICAgICAgICAnaWdvLmdlby53b3Jrc3BhY2UuZGVsZXRlU3VjY2VzcydcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5zdWNjZXNzKG1lc3NhZ2UpO1xuXG4gICAgICAgIHRoaXMucmVmcmVzaE1hcCh3b3Jrc3BhY2UubGF5ZXIgYXMgVmVjdG9yTGF5ZXIsIHdvcmtzcGFjZS5sYXllci5tYXApO1xuICAgICAgICBmb3IgKGNvbnN0IHJlbGF0aW9uIG9mIHdvcmtzcGFjZS5sYXllci5vcHRpb25zLnNvdXJjZU9wdGlvbnMucmVsYXRpb25zKSB7XG4gICAgICAgICAgd29ya3NwYWNlLm1hcC5sYXllcnMuZm9yRWFjaCgobGF5ZXIpID0+IHtcbiAgICAgICAgICAgIGlmIChsYXllci50aXRsZSA9PT0gcmVsYXRpb24udGl0bGUpIHtcbiAgICAgICAgICAgICAgbGF5ZXIuZGF0YVNvdXJjZS5vbC5yZWZyZXNoKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBlcnJvciA9PiB7XG4gICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgICBlcnJvci5lcnJvci5jYXVnaHQgPSB0cnVlO1xuICAgICAgICAgIGNvbnN0IGdlbmVyaWNFcnJvck1lc3NhZ2UgPSB0aGlzLmxhbmd1YWdlU2VydmljZS50cmFuc2xhdGUuaW5zdGFudChcbiAgICAgICAgICAgICdpZ28uZ2VvLndvcmtzcGFjZS5hZGRFcnJvcidcbiAgICAgICAgICApO1xuICAgICAgICAgIGNvbnN0IG1lc3NhZ2VzID0gd29ya3NwYWNlLmxheWVyLmRhdGFTb3VyY2Uub3B0aW9ucy5lZGl0aW9uLm1lc3NhZ2VzO1xuICAgICAgICAgIGlmIChtZXNzYWdlcykge1xuICAgICAgICAgICAgbGV0IHRleHQ7XG4gICAgICAgICAgICBtZXNzYWdlcy5mb3JFYWNoKG1lc3NhZ2UgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBrZXkgPSBPYmplY3Qua2V5cyhtZXNzYWdlKVswXTtcbiAgICAgICAgICAgICAgaWYgKGVycm9yLmVycm9yLm1lc3NhZ2UuaW5jbHVkZXMoa2V5KSkge1xuICAgICAgICAgICAgICAgIHRleHQgPSBtZXNzYWdlW2tleV07XG4gICAgICAgICAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5lcnJvcih0ZXh0KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAoIXRleHQpIHtcbiAgICAgICAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5lcnJvcihnZW5lcmljRXJyb3JNZXNzYWdlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5lcnJvcihnZW5lcmljRXJyb3JNZXNzYWdlKTtcbiAgICAgICAgICB9XG4gICAgICB9XG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBtb2RpZnlGZWF0dXJlKGZlYXR1cmUsIHdvcmtzcGFjZTogRWRpdGlvbldvcmtzcGFjZSwgdXJsOiBzdHJpbmcsIGhlYWRlcnM6IHtba2V5OiBzdHJpbmddOiBhbnl9LCBwcm90b2NvbGUgPSAncGF0Y2gnICkge1xuICAgIGlmICh3b3Jrc3BhY2UubGF5ZXIuZGF0YVNvdXJjZS5vcHRpb25zLmVkaXRpb24uaGFzR2VvbWV0cnkpIHtcbiAgICAgIGNvbnN0IHByb2pEZXN0ID0gd29ya3NwYWNlLmxheWVyLm9wdGlvbnMuc291cmNlT3B0aW9ucy5lZGl0aW9uLmdlb21EYXRhYmFzZVByb2o7XG4gICAgICAvLyBSZW1vdmUgM2UgZGltZW5zaW9uXG4gICAgICBmZWF0dXJlLmdlb21ldHJ5LmNvb3JkaW5hdGVzID0gcmVtb3ZlWihmZWF0dXJlLmdlb21ldHJ5LmNvb3JkaW5hdGVzKTtcbiAgICAgIGZlYXR1cmUucHJvcGVydGllc1t3b3Jrc3BhY2UubGF5ZXIuZGF0YVNvdXJjZS5vcHRpb25zLnBhcmFtcy5maWVsZE5hbWVHZW9tZXRyeV0gPVxuICAgICAgICAnU1JJRD0nICsgcHJvakRlc3QucmVwbGFjZShcIkVQU0c6XCIsIFwiXCIpICsgJzsnICsgdGhpcy53a3RGb3JtYXQud3JpdGVHZW9tZXRyeShcbiAgICAgICAgICB0aGlzLmdlb0pzb25Gb3JtYXQucmVhZEZlYXR1cmUoZmVhdHVyZS5nZW9tZXRyeSkuZ2V0R2VvbWV0cnkoKS50cmFuc2Zvcm0oJ0VQU0c6NDMyNicsIHByb2pEZXN0KSxcbiAgICAgICAgICB7IGRhdGFQcm9qZWN0aW9uOiBwcm9qRGVzdCB9KTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IHByb3BlcnR5IGluIGZlYXR1cmUucHJvcGVydGllcykge1xuICAgICAgZm9yIChjb25zdCBzZiBvZiB3b3Jrc3BhY2UubGF5ZXIuZGF0YVNvdXJjZS5vcHRpb25zLnNvdXJjZUZpZWxkcykge1xuICAgICAgICBpZiAoKHNmLm5hbWUgPT09IHByb3BlcnR5ICYmIHNmLnZhbGlkYXRpb24/LnJlYWRvbmx5KSB8fCAoc2YubmFtZSA9PT0gcHJvcGVydHkgJiYgc2YudmFsaWRhdGlvbj8uc2VuZCA9PT0gZmFsc2UpXG4gICAgICAgICAgfHwgcHJvcGVydHkgPT09ICdib3VuZGVkQnknKSB7XG4gICAgICAgICAgZGVsZXRlIGZlYXR1cmUucHJvcGVydGllc1twcm9wZXJ0eV07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xuICAgIHRoaXMuaHR0cFtwcm90b2NvbGVdKGAke3VybH1gLCBmZWF0dXJlLnByb3BlcnRpZXMsIHsgaGVhZGVyczogaGVhZGVycyB9KS5zdWJzY3JpYmUoXG4gICAgICAoKSA9PiB7XG4gICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLmNhbmNlbEVkaXQod29ya3NwYWNlLCBmZWF0dXJlLCB0cnVlKTtcblxuICAgICAgICBjb25zdCBtZXNzYWdlID0gdGhpcy5sYW5ndWFnZVNlcnZpY2UudHJhbnNsYXRlLmluc3RhbnQoXG4gICAgICAgICAgJ2lnby5nZW8ud29ya3NwYWNlLm1vZGlmeVN1Y2Nlc3MnXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2Uuc3VjY2VzcyhtZXNzYWdlKTtcblxuICAgICAgICB0aGlzLnJlZnJlc2hNYXAod29ya3NwYWNlLmxheWVyIGFzIFZlY3RvckxheWVyLCB3b3Jrc3BhY2UubGF5ZXIubWFwKTtcblxuICAgICAgICBsZXQgcmVsYXRpb25MYXllcnMgPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCByZWxhdGlvbiBvZiB3b3Jrc3BhY2UubGF5ZXIub3B0aW9ucy5zb3VyY2VPcHRpb25zLnJlbGF0aW9ucykge1xuICAgICAgICAgIHdvcmtzcGFjZS5tYXAubGF5ZXJzLmZvckVhY2goKGxheWVyKSA9PiB7XG4gICAgICAgICAgICBpZiAobGF5ZXIudGl0bGUgPT09IHJlbGF0aW9uLnRpdGxlKSB7XG4gICAgICAgICAgICAgIHJlbGF0aW9uTGF5ZXJzLnB1c2gobGF5ZXIpO1xuICAgICAgICAgICAgICBsYXllci5kYXRhU291cmNlLm9sLnJlZnJlc2goKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnJlbGF0aW9uTGF5ZXJzJC5uZXh0KHJlbGF0aW9uTGF5ZXJzKTtcbiAgICAgIH0sXG4gICAgICBlcnJvciA9PiB7XG4gICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgICBlcnJvci5lcnJvci5jYXVnaHQgPSB0cnVlO1xuICAgICAgICBjb25zdCBnZW5lcmljRXJyb3JNZXNzYWdlID0gdGhpcy5sYW5ndWFnZVNlcnZpY2UudHJhbnNsYXRlLmluc3RhbnQoXG4gICAgICAgICAgJ2lnby5nZW8ud29ya3NwYWNlLmFkZEVycm9yJ1xuICAgICAgICApO1xuICAgICAgICBjb25zdCBtZXNzYWdlcyA9IHdvcmtzcGFjZS5sYXllci5kYXRhU291cmNlLm9wdGlvbnMuZWRpdGlvbi5tZXNzYWdlcztcbiAgICAgICAgaWYgKG1lc3NhZ2VzKSB7XG4gICAgICAgICAgbGV0IHRleHQ7XG4gICAgICAgICAgbWVzc2FnZXMuZm9yRWFjaChtZXNzYWdlID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGtleSA9IE9iamVjdC5rZXlzKG1lc3NhZ2UpWzBdO1xuICAgICAgICAgICAgaWYgKGVycm9yLmVycm9yLm1lc3NhZ2UuaW5jbHVkZXMoa2V5KSkge1xuICAgICAgICAgICAgICB0ZXh0ID0gbWVzc2FnZVtrZXldO1xuICAgICAgICAgICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmVycm9yKHRleHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGlmICghdGV4dCkge1xuICAgICAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5lcnJvcihnZW5lcmljRXJyb3JNZXNzYWdlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5lcnJvcihnZW5lcmljRXJyb3JNZXNzYWdlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICk7XG4gIH1cblxuICBjYW5jZWxFZGl0KHdvcmtzcGFjZTogRWRpdGlvbldvcmtzcGFjZSwgZmVhdHVyZSwgZnJvbVNhdmUgPSBmYWxzZSkge1xuICAgIGZlYXR1cmUuZWRpdGlvbiA9IGZhbHNlO1xuICAgIHRoaXMuYWRkaW5nJC5uZXh0KGZhbHNlKTtcbiAgICB3b3Jrc3BhY2UuZGVsZXRlRHJhd2luZ3MoKTtcbiAgICB3b3Jrc3BhY2UuZW50aXR5U3RvcmUuc3RhdGVWaWV3LmNsZWFyKCk7XG5cbiAgICBpZiAoZmVhdHVyZS5uZXdGZWF0dXJlKSB7XG4gICAgICB3b3Jrc3BhY2UuZW50aXR5U3RvcmUuZGVsZXRlKGZlYXR1cmUpO1xuICAgICAgd29ya3NwYWNlLmRlYWN0aXZhdGVEcmF3Q29udHJvbCgpO1xuXG4gICAgICB0aGlzLnJvd3NJbk1hcEV4dGVudENoZWNrQ29uZGl0aW9uJC5uZXh0KHRydWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoIWZyb21TYXZlKSB7XG4gICAgICAgIGZlYXR1cmUucHJvcGVydGllcyA9IGZlYXR1cmUub3JpZ2luYWxfcHJvcGVydGllcztcbiAgICAgICAgZmVhdHVyZS5nZW9tZXRyeSA9IGZlYXR1cmUub3JpZ2luYWxfZ2VvbWV0cnk7XG4gICAgICB9XG4gICAgICBkZWxldGUgZmVhdHVyZS5vcmlnaW5hbF9wcm9wZXJ0aWVzO1xuICAgICAgZGVsZXRlIGZlYXR1cmUub3JpZ2luYWxfZ2VvbWV0cnk7XG4gICAgfVxuICB9XG5cbiAgZ2V0RG9tYWluVmFsdWVzKHJlbGF0aW9uOiBSZWxhdGlvbk9wdGlvbnMpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGxldCB1cmwgPSByZWxhdGlvbi51cmw7XG4gICAgaWYgKCF1cmwpIHtcbiAgICAgIHVybCA9IHRoaXMuY29uZmlnU2VydmljZS5nZXRDb25maWcoJ2VkaXRpb24udXJsJykgP1xuICAgICAgICB0aGlzLmNvbmZpZ1NlcnZpY2UuZ2V0Q29uZmlnKCdlZGl0aW9uLnVybCcpICsgcmVsYXRpb24udGFibGUgOiByZWxhdGlvbi50YWJsZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxhbnk+KHVybCkucGlwZShcbiAgICAgIG1hcChyZXN1bHQgPT4ge1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfSksXG4gICAgICBjYXRjaEVycm9yKChlcnI6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiB7XG4gICAgICAgIGVyci5lcnJvci5jYXVnaHQgPSB0cnVlO1xuICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihlcnIpO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgLypcbiAgICogUmVmcmVzaCBib3RoIHdtcyBhbmQgd2ZzIGxheWVyXG4gICAqIEEgbmV3IHdmcyBsb2FkZXIgaXMgdXNlZCB0byBlbnN1cmUgY2FjaGUgaXMgbm90IHJldHJpZXZpbmcgb2xkIGRhdGFcbiAgICogV01TIHBhcmFtcyBhcmUgdXBkYXRlZCB0byBlbnN1cmUgbGF5ZXIgaXMgY29ycmVjdGx5IHJlZnJlc2hlZFxuICAgKi9cbiAgcmVmcmVzaE1hcChsYXllcjogVmVjdG9yTGF5ZXIsIG1hcDogSWdvTWFwKSB7XG4gICAgY29uc3Qgd2ZzT2xMYXllciA9IGxheWVyLmRhdGFTb3VyY2Uub2w7XG4gICAgY29uc3QgbG9hZGVyID0gKGV4dGVudCwgcmVzb2x1dGlvbiwgcHJvaiwgc3VjY2VzcywgZmFpbHVyZSkgPT4ge1xuICAgICAgbGF5ZXIuY3VzdG9tV0ZTTG9hZGVyKFxuICAgICAgICBsYXllci5vbC5nZXRTb3VyY2UoKSxcbiAgICAgICAgbGF5ZXIub3B0aW9ucy5zb3VyY2VPcHRpb25zLFxuICAgICAgICB0aGlzLmF1dGhJbnRlcmNlcHRvcixcbiAgICAgICAgZXh0ZW50LFxuICAgICAgICByZXNvbHV0aW9uLFxuICAgICAgICBwcm9qLFxuICAgICAgICBzdWNjZXNzLFxuICAgICAgICBmYWlsdXJlLFxuICAgICAgICB0cnVlXG4gICAgICApO1xuICAgIH07XG4gICAgd2ZzT2xMYXllci5zZXRMb2FkZXIobG9hZGVyKTtcbiAgICB3ZnNPbExheWVyLnJlZnJlc2goKTtcblxuICAgIGZvciAoY29uc3QgbGF5IG9mIG1hcC5sYXllcnMpIHtcbiAgICAgIGlmIChcbiAgICAgICAgbGF5LmlkICE9PSBsYXllci5pZCAmJlxuICAgICAgICBsYXkub3B0aW9ucy5saW5rZWRMYXllcnM/LmxpbmtJZC5pbmNsdWRlcyhsYXllci5pZC5zdWJzdHIoMCwgbGF5ZXIuaWQuaW5kZXhPZignLicpIC0gMSkpICYmXG4gICAgICAgIGxheS5vcHRpb25zLmxpbmtlZExheWVycz8ubGlua0lkLmluY2x1ZGVzKCdXbXNXb3Jrc3BhY2VUYWJsZVNyYycpXG4gICAgICApXG4gICAgICAgIHtcbiAgICAgICAgICBjb25zdCB3bXNPbExheWVyID0gbGF5LmRhdGFTb3VyY2Uub2wgYXMgb2xTb3VyY2VJbWFnZVdNUztcbiAgICAgICAgICBsZXQgcGFyYW1zID0gd21zT2xMYXllci5nZXRQYXJhbXMoKTtcbiAgICAgICAgICBwYXJhbXMuX3QgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcbiAgICAgICAgICB3bXNPbExheWVyLnVwZGF0ZVBhcmFtcyhwYXJhbXMpO1xuICAgICAgICB9XG4gICAgfVxuICB9XG5cbiAgdmFsaWRhdGVGZWF0dXJlKGZlYXR1cmUsIHdvcmtzcGFjZTogRWRpdGlvbldvcmtzcGFjZSkge1xuICAgIGNvbnN0IHRyYW5zbGF0ZSA9IHRoaXMubGFuZ3VhZ2VTZXJ2aWNlLnRyYW5zbGF0ZTtcbiAgICBsZXQgbWVzc2FnZSA7XG4gICAgbGV0IGtleTtcbiAgICBsZXQgdmFsaWQgPSB0cnVlO1xuICAgIHdvcmtzcGFjZS5tZXRhLnRhYmxlVGVtcGxhdGUuY29sdW1ucy5mb3JFYWNoKGNvbHVtbiA9PiB7XG4gICAgICBpZiAoY29sdW1uLmhhc093blByb3BlcnR5KCd2YWxpZGF0aW9uJykgJiYgY29sdW1uLnZhbGlkYXRpb24pIHtcbiAgICAgICAga2V5ID0gZ2V0Q29sdW1uS2V5V2l0aG91dFByb3BlcnRpZXNUYWcoY29sdW1uLm5hbWUpO1xuICAgICAgICBPYmplY3Qua2V5cyggY29sdW1uLnZhbGlkYXRpb24pLmZvckVhY2goKHR5cGUpID0+IHtcbiAgICAgICAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgJ21hbmRhdG9yeSc6IHtcbiAgICAgICAgICAgICAgaWYgKGNvbHVtbi52YWxpZGF0aW9uW3R5cGVdICYmICghZmVhdHVyZS5wcm9wZXJ0aWVzLmhhc093blByb3BlcnR5KGtleSkgfHwgIWZlYXR1cmUucHJvcGVydGllc1trZXldKSkge1xuICAgICAgICAgICAgICAgIHZhbGlkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICBtZXNzYWdlID0gdHJhbnNsYXRlLmluc3RhbnQoJ2lnby5nZW8uZm9ybVZhbGlkYXRpb24ubWFuZGF0b3J5JyxcbiAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgY29sdW1uOiBjb2x1bW4udGl0bGVcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuZXJyb3IobWVzc2FnZSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlICdtaW5WYWx1ZSc6IHtcbiAgICAgICAgICAgICAgaWYgKGZlYXR1cmUucHJvcGVydGllcy5oYXNPd25Qcm9wZXJ0eShrZXkpICYmIGZlYXR1cmUucHJvcGVydGllc1trZXldICYmIGZlYXR1cmUucHJvcGVydGllc1trZXldIDwgY29sdW1uLnZhbGlkYXRpb25bdHlwZV0pIHtcbiAgICAgICAgICAgICAgICB2YWxpZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSB0cmFuc2xhdGUuaW5zdGFudCgnaWdvLmdlby5mb3JtVmFsaWRhdGlvbi5taW5WYWx1ZScsXG4gICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGNvbHVtbjogY29sdW1uLnRpdGxlLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogY29sdW1uLnZhbGlkYXRpb25bdHlwZV1cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuZXJyb3IobWVzc2FnZSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlICdtYXhWYWx1ZSc6IHtcbiAgICAgICAgICAgICAgaWYgKGZlYXR1cmUucHJvcGVydGllcy5oYXNPd25Qcm9wZXJ0eShrZXkpICYmIGZlYXR1cmUucHJvcGVydGllc1trZXldICYmIGZlYXR1cmUucHJvcGVydGllc1trZXldID4gY29sdW1uLnZhbGlkYXRpb25bdHlwZV0pIHtcbiAgICAgICAgICAgICAgICB2YWxpZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSB0cmFuc2xhdGUuaW5zdGFudCgnaWdvLmdlby5mb3JtVmFsaWRhdGlvbi5tYXhWYWx1ZScsXG4gICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGNvbHVtbjogY29sdW1uLnRpdGxlLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogY29sdW1uLnZhbGlkYXRpb25bdHlwZV1cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuZXJyb3IobWVzc2FnZSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlICdtaW5MZW5ndGgnOiB7XG4gICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBmZWF0dXJlLnByb3BlcnRpZXMuaGFzT3duUHJvcGVydHkoa2V5KSAmJiBmZWF0dXJlLnByb3BlcnRpZXNba2V5XSAmJlxuICAgICAgICAgICAgICAgIGZlYXR1cmUucHJvcGVydGllc1trZXldLmxlbmd0aCA8IGNvbHVtbi52YWxpZGF0aW9uW3R5cGVdKVxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdmFsaWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBtZXNzYWdlID0gdHJhbnNsYXRlLmluc3RhbnQoJ2lnby5nZW8uZm9ybVZhbGlkYXRpb24ubWluTGVuZ3RoJyxcbiAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgY29sdW1uOiBjb2x1bW4udGl0bGUsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBjb2x1bW4udmFsaWRhdGlvblt0eXBlXVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5lcnJvcihtZXNzYWdlKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgJ21heExlbmd0aCc6IHtcbiAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIGZlYXR1cmUucHJvcGVydGllcy5oYXNPd25Qcm9wZXJ0eShrZXkpICYmIGZlYXR1cmUucHJvcGVydGllc1trZXldICYmXG4gICAgICAgICAgICAgICAgZmVhdHVyZS5wcm9wZXJ0aWVzW2tleV0ubGVuZ3RoID4gY29sdW1uLnZhbGlkYXRpb25bdHlwZV0pXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB2YWxpZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSB0cmFuc2xhdGUuaW5zdGFudCgnaWdvLmdlby5mb3JtVmFsaWRhdGlvbi5tYXhMZW5ndGgnLFxuICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBjb2x1bW46IGNvbHVtbi50aXRsZSxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGNvbHVtbi52YWxpZGF0aW9uW3R5cGVdXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmVycm9yKG1lc3NhZ2UpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiB2YWxpZDtcbiAgfVxuXG4gIHNhbml0aXplUGFyYW1ldGVyKGZlYXR1cmUsIHdvcmtzcGFjZTogRWRpdGlvbldvcmtzcGFjZSkge1xuICAgIHdvcmtzcGFjZS5tZXRhLnRhYmxlVGVtcGxhdGUuY29sdW1ucy5mb3JFYWNoKGNvbHVtbiA9PiB7XG4gICAgICBpZiAoY29sdW1uLnR5cGUgPT09ICdsaXN0JyAmJiBmZWF0dXJlLnByb3BlcnRpZXNbZ2V0Q29sdW1uS2V5V2l0aG91dFByb3BlcnRpZXNUYWcoY29sdW1uLm5hbWUpXSkge1xuICAgICAgICBmZWF0dXJlLnByb3BlcnRpZXNbZ2V0Q29sdW1uS2V5V2l0aG91dFByb3BlcnRpZXNUYWcoY29sdW1uLm5hbWUpXSA9XG4gICAgICAgICAgZmVhdHVyZS5wcm9wZXJ0aWVzW2dldENvbHVtbktleVdpdGhvdXRQcm9wZXJ0aWVzVGFnKGNvbHVtbi5uYW1lKV0udG9TdHJpbmcoKTtcbiAgICAgIH1cblxuICAgIH0pO1xuICB9XG5cbn1cblxuZnVuY3Rpb24gZ2V0Q29sdW1uS2V5V2l0aG91dFByb3BlcnRpZXNUYWcoY29sdW1uOiBzdHJpbmcpIHtcbiAgaWYgKGNvbHVtbi5pbmNsdWRlcygncHJvcGVydGllcy4nKSkge1xuICAgIHJldHVybiBjb2x1bW4uc3BsaXQoJy4nKVsxXTtcbiAgfVxuICByZXR1cm4gY29sdW1uO1xufVxuXG5mdW5jdGlvbiByZW1vdmVaKGNvb3JkczogYW55KSB7XG4gIGlmIChjb29yZHMubGVuZ3RoID09PSAwKSByZXR1cm4gY29vcmRzO1xuICBpZiAodHlwZW9mIGNvb3Jkc1swXSA9PT0gJ251bWJlcicpIHJldHVybiBjb29yZHMuc2xpY2UoMCwgMik7XG4gIHJldHVybiBjb29yZHMubWFwKHJlbW92ZVopO1xufVxuIl19