@igo2/geo 1.12.1 → 1.13.0-alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (963) hide show
  1. package/assets/icons/cross_black_18px.svg +88 -88
  2. package/assets/icons/place_blue_36px.svg +55 -55
  3. package/assets/icons/place_green_36px.svg +55 -55
  4. package/assets/icons/place_red_36px.svg +55 -55
  5. package/assets/icons/place_yellow_36px.svg +55 -55
  6. package/{esm2015/igo2-geo.js → esm2020/igo2-geo.mjs} +0 -0
  7. package/esm2020/lib/catalog/catalog-browser/catalog-browser-group.component.mjs +299 -0
  8. package/esm2020/lib/catalog/catalog-browser/catalog-browser-layer.component.mjs +268 -0
  9. package/esm2020/lib/catalog/catalog-browser/catalog-browser.component.mjs +244 -0
  10. package/esm2020/lib/catalog/catalog-browser/catalog-browser.module.mjs +80 -0
  11. package/esm2020/lib/catalog/catalog-library/add-catalog-dialog.component.mjs +209 -0
  12. package/esm2020/lib/catalog/catalog-library/catalog-library-item.component.mjs +79 -0
  13. package/esm2020/lib/catalog/catalog-library/catalog-library.component.mjs +217 -0
  14. package/esm2020/lib/catalog/catalog-library/catalog-library.module.mjs +95 -0
  15. package/esm2020/lib/catalog/catalog.module.mjs +53 -0
  16. package/esm2020/lib/catalog/index.mjs +5 -0
  17. package/esm2020/lib/catalog/shared/catalog.abstract.mjs +95 -0
  18. package/esm2020/lib/catalog/shared/catalog.enum.mjs +16 -0
  19. package/esm2020/lib/catalog/shared/catalog.interface.mjs +2 -0
  20. package/esm2020/lib/catalog/shared/catalog.service.mjs +606 -0
  21. package/esm2020/lib/catalog/shared/index.mjs +5 -0
  22. package/esm2020/lib/datasource/datasource.module.mjs +22 -0
  23. package/esm2020/lib/datasource/index.mjs +3 -0
  24. package/esm2020/lib/datasource/shared/capabilities.service.mjs +426 -0
  25. package/esm2020/lib/datasource/shared/datasource.service.mjs +236 -0
  26. package/esm2020/lib/datasource/shared/datasources/any-datasource.interface.mjs +2 -0
  27. package/esm2020/lib/datasource/shared/datasources/any-datasource.mjs +2 -0
  28. package/esm2020/lib/datasource/shared/datasources/arcgisrest-datasource.interface.mjs +2 -0
  29. package/esm2020/lib/datasource/shared/datasources/arcgisrest-datasource.mjs +145 -0
  30. package/esm2020/lib/datasource/shared/datasources/carto-datasource.interface.mjs +2 -0
  31. package/esm2020/lib/datasource/shared/datasources/carto-datasource.mjs +109 -0
  32. package/esm2020/lib/datasource/shared/datasources/cluster-datasource.interface.mjs +2 -0
  33. package/esm2020/lib/datasource/shared/datasources/cluster-datasource.mjs +15 -0
  34. package/esm2020/lib/datasource/shared/datasources/data.service.mjs +3 -0
  35. package/esm2020/lib/datasource/shared/datasources/datasource.interface.mjs +2 -0
  36. package/esm2020/lib/datasource/shared/datasources/datasource.mjs +29 -0
  37. package/esm2020/lib/datasource/shared/datasources/feature-datasource.interface.mjs +2 -0
  38. package/esm2020/lib/datasource/shared/datasources/feature-datasource.mjs +43 -0
  39. package/esm2020/lib/datasource/shared/datasources/imagearcgisrest-datasource.interface.mjs +2 -0
  40. package/esm2020/lib/datasource/shared/datasources/imagearcgisrest-datasource.mjs +57 -0
  41. package/esm2020/lib/datasource/shared/datasources/index.mjs +36 -0
  42. package/esm2020/lib/datasource/shared/datasources/mvt-datasource.interface.mjs +2 -0
  43. package/esm2020/lib/datasource/shared/datasources/mvt-datasource.mjs +28 -0
  44. package/esm2020/lib/datasource/shared/datasources/osm-datasource.interface.mjs +2 -0
  45. package/esm2020/lib/datasource/shared/datasources/osm-datasource.mjs +12 -0
  46. package/esm2020/lib/datasource/shared/datasources/tilearcgisrest-datasource.interface.mjs +2 -0
  47. package/esm2020/lib/datasource/shared/datasources/tilearcgisrest-datasource.mjs +49 -0
  48. package/esm2020/lib/datasource/shared/datasources/tiledebug-datasource.interface.mjs +2 -0
  49. package/esm2020/lib/datasource/shared/datasources/tiledebug-datasource.mjs +15 -0
  50. package/esm2020/lib/datasource/shared/datasources/websocket-datasource.interface.mjs +2 -0
  51. package/esm2020/lib/datasource/shared/datasources/websocket-datasource.mjs +54 -0
  52. package/esm2020/lib/datasource/shared/datasources/wfs-datasource.interface.mjs +2 -0
  53. package/esm2020/lib/datasource/shared/datasources/wfs-datasource.mjs +74 -0
  54. package/esm2020/lib/datasource/shared/datasources/wfs.service.mjs +152 -0
  55. package/esm2020/lib/datasource/shared/datasources/wms-datasource.interface.mjs +2 -0
  56. package/esm2020/lib/datasource/shared/datasources/wms-datasource.mjs +205 -0
  57. package/esm2020/lib/datasource/shared/datasources/wms-wfs.utils.mjs +207 -0
  58. package/esm2020/lib/datasource/shared/datasources/wmts-datasource.interface.mjs +2 -0
  59. package/esm2020/lib/datasource/shared/datasources/wmts-datasource.mjs +16 -0
  60. package/esm2020/lib/datasource/shared/datasources/xyz-datasource.interface.mjs +2 -0
  61. package/esm2020/lib/datasource/shared/datasources/xyz-datasource.mjs +9 -0
  62. package/esm2020/lib/datasource/shared/index.mjs +5 -0
  63. package/esm2020/lib/datasource/shared/options/index.mjs +5 -0
  64. package/esm2020/lib/datasource/shared/options/options-api.interface.mjs +2 -0
  65. package/esm2020/lib/datasource/shared/options/options-api.providers.mjs +15 -0
  66. package/esm2020/lib/datasource/shared/options/options-api.service.mjs +81 -0
  67. package/esm2020/lib/datasource/shared/options/options.service.mjs +3 -0
  68. package/esm2020/lib/datasource/utils/esri-style-generator.mjs +357 -0
  69. package/esm2020/lib/datasource/utils/index.mjs +3 -0
  70. package/esm2020/lib/datasource/utils/tilegrid.mjs +20 -0
  71. package/esm2020/lib/directions/directions-buttons/directions-buttons.component.mjs +224 -0
  72. package/esm2020/lib/directions/directions-buttons/index.mjs +2 -0
  73. package/esm2020/lib/directions/directions-inputs/directions-inputs.component.mjs +290 -0
  74. package/esm2020/lib/directions/directions-inputs/index.mjs +2 -0
  75. package/esm2020/lib/directions/directions-results/directions-results.component.mjs +196 -0
  76. package/esm2020/lib/directions/directions-results/index.mjs +2 -0
  77. package/esm2020/lib/directions/directions-sources/directions-source.interface.mjs +2 -0
  78. package/esm2020/lib/directions/directions-sources/directions-source.mjs +3 -0
  79. package/esm2020/lib/directions/directions-sources/directions-source.provider.mjs +16 -0
  80. package/esm2020/lib/directions/directions-sources/index.mjs +5 -0
  81. package/esm2020/lib/directions/directions-sources/osrm-directions-source.mjs +99 -0
  82. package/esm2020/lib/directions/directions.component.mjs +311 -0
  83. package/esm2020/lib/directions/directions.module.mjs +102 -0
  84. package/esm2020/lib/directions/index.mjs +7 -0
  85. package/esm2020/lib/directions/shared/directions-source.service.mjs +17 -0
  86. package/esm2020/lib/directions/shared/directions.enum.mjs +28 -0
  87. package/esm2020/lib/directions/shared/directions.interface.mjs +2 -0
  88. package/esm2020/lib/directions/shared/directions.service.mjs +29 -0
  89. package/esm2020/lib/directions/shared/directions.utils.mjs +510 -0
  90. package/esm2020/lib/directions/shared/index.mjs +6 -0
  91. package/esm2020/lib/directions/shared/store.mjs +24 -0
  92. package/esm2020/lib/download/download-button/download-button.component.mjs +61 -0
  93. package/esm2020/lib/download/download-button/index.mjs +2 -0
  94. package/esm2020/lib/download/download.module.mjs +42 -0
  95. package/esm2020/lib/download/index.mjs +3 -0
  96. package/esm2020/lib/download/shared/download.interface.mjs +2 -0
  97. package/esm2020/lib/download/shared/download.service.mjs +65 -0
  98. package/esm2020/lib/download/shared/index.mjs +3 -0
  99. package/esm2020/lib/draw/draw/draw-popup.component.mjs +61 -0
  100. package/esm2020/lib/draw/draw/draw-shorcuts.component.mjs +48 -0
  101. package/esm2020/lib/draw/draw/draw.component.mjs +714 -0
  102. package/esm2020/lib/draw/draw/draw.module.mjs +100 -0
  103. package/esm2020/lib/draw/drawingTool.module.mjs +20 -0
  104. package/esm2020/lib/draw/index.mjs +3 -0
  105. package/esm2020/lib/draw/shared/draw-icon.service.mjs +27 -0
  106. package/esm2020/lib/draw/shared/draw-style.service.mjs +173 -0
  107. package/esm2020/lib/draw/shared/draw.enum.mjs +24 -0
  108. package/esm2020/lib/draw/shared/draw.interface.mjs +2 -0
  109. package/esm2020/lib/draw/shared/draw.utils.mjs +104 -0
  110. package/esm2020/lib/draw/shared/index.mjs +6 -0
  111. package/esm2020/lib/feature/feature-details/feature-details.component.mjs +377 -0
  112. package/esm2020/lib/feature/feature-details/feature-details.directive.mjs +54 -0
  113. package/esm2020/lib/feature/feature-details/feature-details.module.mjs +48 -0
  114. package/esm2020/lib/feature/feature-form/feature-form.component.mjs +112 -0
  115. package/esm2020/lib/feature/feature-form/feature-form.module.mjs +34 -0
  116. package/esm2020/lib/feature/feature.module.mjs +28 -0
  117. package/esm2020/lib/feature/index.mjs +4 -0
  118. package/esm2020/lib/feature/shared/feature.enums.mjs +9 -0
  119. package/esm2020/lib/feature/shared/feature.interfaces.mjs +2 -0
  120. package/esm2020/lib/feature/shared/feature.utils.mjs +348 -0
  121. package/esm2020/lib/feature/shared/index.mjs +7 -0
  122. package/esm2020/lib/feature/shared/store.mjs +112 -0
  123. package/esm2020/lib/feature/shared/strategies/in-map-extent.mjs +113 -0
  124. package/esm2020/lib/feature/shared/strategies/in-map-resolution.mjs +94 -0
  125. package/esm2020/lib/feature/shared/strategies/index.mjs +6 -0
  126. package/esm2020/lib/feature/shared/strategies/loading-layer.mjs +104 -0
  127. package/esm2020/lib/feature/shared/strategies/loading.mjs +133 -0
  128. package/esm2020/lib/feature/shared/strategies/selection.mjs +370 -0
  129. package/esm2020/lib/feature/shared/strategies.utils.mjs +37 -0
  130. package/esm2020/lib/filter/filter.module.mjs +289 -0
  131. package/esm2020/lib/filter/index.mjs +16 -0
  132. package/esm2020/lib/filter/ogc-filter-button/index.mjs +2 -0
  133. package/esm2020/lib/filter/ogc-filter-button/ogc-filter-button.component.mjs +140 -0
  134. package/esm2020/lib/filter/ogc-filter-form/index.mjs +2 -0
  135. package/esm2020/lib/filter/ogc-filter-form/ogc-filter-form.component.mjs +645 -0
  136. package/esm2020/lib/filter/ogc-filter-selection/index.mjs +2 -0
  137. package/esm2020/lib/filter/ogc-filter-selection/ogc-filter-selection.component.mjs +1302 -0
  138. package/esm2020/lib/filter/ogc-filter-time/index.mjs +3 -0
  139. package/esm2020/lib/filter/ogc-filter-time/ogc-filter-time-slider.component.mjs +177 -0
  140. package/esm2020/lib/filter/ogc-filter-time/ogc-filter-time.component.mjs +871 -0
  141. package/esm2020/lib/filter/ogc-filterable-form/index.mjs +2 -0
  142. package/esm2020/lib/filter/ogc-filterable-form/ogc-filterable-form.component.mjs +59 -0
  143. package/esm2020/lib/filter/ogc-filterable-item/index.mjs +2 -0
  144. package/esm2020/lib/filter/ogc-filterable-item/ogc-filterable-item.component.mjs +302 -0
  145. package/esm2020/lib/filter/ogc-filterable-list/index.mjs +3 -0
  146. package/esm2020/lib/filter/ogc-filterable-list/ogc-filterable-list-binding.directive.mjs +31 -0
  147. package/esm2020/lib/filter/ogc-filterable-list/ogc-filterable-list.component.mjs +31 -0
  148. package/esm2020/lib/filter/shared/filterable-datasource.pipe.mjs +55 -0
  149. package/esm2020/lib/filter/shared/index.mjs +12 -0
  150. package/esm2020/lib/filter/shared/ogc-filter-time.service.mjs +72 -0
  151. package/esm2020/lib/filter/shared/ogc-filter.enum.mjs +30 -0
  152. package/esm2020/lib/filter/shared/ogc-filter.interface.mjs +2 -0
  153. package/esm2020/lib/filter/shared/ogc-filter.mjs +692 -0
  154. package/esm2020/lib/filter/shared/ogc-filter.service.mjs +46 -0
  155. package/esm2020/lib/filter/shared/spatial-filter.enum.mjs +23 -0
  156. package/esm2020/lib/filter/shared/spatial-filter.interface.mjs +2 -0
  157. package/esm2020/lib/filter/shared/spatial-filter.service.mjs +269 -0
  158. package/esm2020/lib/filter/shared/time-filter.enum.mjs +13 -0
  159. package/esm2020/lib/filter/shared/time-filter.interface.mjs +2 -0
  160. package/esm2020/lib/filter/shared/time-filter.service.mjs +107 -0
  161. package/esm2020/lib/filter/spatial-filter/spatial-filter-item/index.mjs +2 -0
  162. package/esm2020/lib/filter/spatial-filter/spatial-filter-item/spatial-filter-item.component.mjs +1076 -0
  163. package/esm2020/lib/filter/spatial-filter/spatial-filter-list/index.mjs +2 -0
  164. package/esm2020/lib/filter/spatial-filter/spatial-filter-list/spatial-filter-list.component.mjs +208 -0
  165. package/esm2020/lib/filter/spatial-filter/spatial-filter-type/index.mjs +2 -0
  166. package/esm2020/lib/filter/spatial-filter/spatial-filter-type/spatial-filter-type.component.mjs +144 -0
  167. package/esm2020/lib/filter/time-filter-button/index.mjs +2 -0
  168. package/esm2020/lib/filter/time-filter-button/time-filter-button.component.mjs +78 -0
  169. package/esm2020/lib/filter/time-filter-form/index.mjs +2 -0
  170. package/esm2020/lib/filter/time-filter-form/time-filter-form.component.mjs +734 -0
  171. package/esm2020/lib/filter/time-filter-item/index.mjs +2 -0
  172. package/esm2020/lib/filter/time-filter-item/time-filter-item.component.mjs +119 -0
  173. package/esm2020/lib/filter/time-filter-list/index.mjs +3 -0
  174. package/esm2020/lib/filter/time-filter-list/time-filter-list-binding.directive.mjs +31 -0
  175. package/esm2020/lib/filter/time-filter-list/time-filter-list.component.mjs +39 -0
  176. package/esm2020/lib/geo.module.mjs +102 -0
  177. package/esm2020/lib/geometry/geometry-form-field/geometry-form-field-input.component.mjs +511 -0
  178. package/esm2020/lib/geometry/geometry-form-field/geometry-form-field.component.mjs +189 -0
  179. package/esm2020/lib/geometry/geometry-form-field/geometry-form-field.module.mjs +64 -0
  180. package/esm2020/lib/geometry/geometry.module.mjs +27 -0
  181. package/esm2020/lib/geometry/index.mjs +4 -0
  182. package/esm2020/lib/geometry/shared/controls/draw.mjs +271 -0
  183. package/esm2020/lib/geometry/shared/controls/index.mjs +4 -0
  184. package/esm2020/lib/geometry/shared/controls/modify.mjs +521 -0
  185. package/esm2020/lib/geometry/shared/controls/slice.mjs +177 -0
  186. package/esm2020/lib/geometry/shared/geometry.errors.mjs +26 -0
  187. package/esm2020/lib/geometry/shared/geometry.interfaces.mjs +2 -0
  188. package/esm2020/lib/geometry/shared/geometry.utils.mjs +122 -0
  189. package/esm2020/lib/geometry/shared/index.mjs +5 -0
  190. package/esm2020/lib/import-export/export-button/export-button.component.mjs +64 -0
  191. package/esm2020/lib/import-export/export-button/index.mjs +2 -0
  192. package/esm2020/lib/import-export/import-export/import-export.component.mjs +1190 -0
  193. package/esm2020/lib/import-export/import-export/index.mjs +2 -0
  194. package/esm2020/lib/import-export/import-export.module.mjs +93 -0
  195. package/esm2020/lib/import-export/index.mjs +5 -0
  196. package/esm2020/lib/import-export/shared/drop-geo-file.directive.mjs +135 -0
  197. package/esm2020/lib/import-export/shared/export.errors.mjs +15 -0
  198. package/esm2020/lib/import-export/shared/export.interface.mjs +2 -0
  199. package/esm2020/lib/import-export/shared/export.service.mjs +195 -0
  200. package/esm2020/lib/import-export/shared/export.type.mjs +4 -0
  201. package/esm2020/lib/import-export/shared/export.utils.mjs +55 -0
  202. package/esm2020/lib/import-export/shared/import.errors.mjs +39 -0
  203. package/esm2020/lib/import-export/shared/import.interface.mjs +2 -0
  204. package/esm2020/lib/import-export/shared/import.service.mjs +195 -0
  205. package/esm2020/lib/import-export/shared/import.utils.mjs +234 -0
  206. package/esm2020/lib/import-export/shared/index.mjs +11 -0
  207. package/esm2020/lib/import-export/style-list/index.mjs +5 -0
  208. package/esm2020/lib/import-export/style-list/style-list.interface.mjs +2 -0
  209. package/esm2020/lib/import-export/style-list/style-list.module.mjs +23 -0
  210. package/esm2020/lib/import-export/style-list/style-list.provider.mjs +21 -0
  211. package/esm2020/lib/import-export/style-list/style-list.service.mjs +51 -0
  212. package/esm2020/lib/layer/index.mjs +10 -0
  213. package/esm2020/lib/layer/layer-item/index.mjs +2 -0
  214. package/esm2020/lib/layer/layer-item/layer-item.component.mjs +300 -0
  215. package/esm2020/lib/layer/layer-legend/index.mjs +2 -0
  216. package/esm2020/lib/layer/layer-legend/layer-legend.component.mjs +382 -0
  217. package/esm2020/lib/layer/layer-legend-item/index.mjs +2 -0
  218. package/esm2020/lib/layer/layer-legend-item/layer-legend-item.component.mjs +84 -0
  219. package/esm2020/lib/layer/layer-legend-list/index.mjs +3 -0
  220. package/esm2020/lib/layer/layer-legend-list/layer-legend-list-binding.directive.mjs +48 -0
  221. package/esm2020/lib/layer/layer-legend-list/layer-legend-list.component.mjs +195 -0
  222. package/esm2020/lib/layer/layer-list/index.mjs +4 -0
  223. package/esm2020/lib/layer/layer-list/layer-list-binding.directive.mjs +59 -0
  224. package/esm2020/lib/layer/layer-list/layer-list.component.mjs +1024 -0
  225. package/esm2020/lib/layer/layer-list/layer-list.enum.mjs +19 -0
  226. package/esm2020/lib/layer/layer-list-tool/index.mjs +5 -0
  227. package/esm2020/lib/layer/layer-list-tool/layer-list-tool.component.mjs +165 -0
  228. package/esm2020/lib/layer/layer-list-tool/layer-list-tool.enum.mjs +7 -0
  229. package/esm2020/lib/layer/layer-list-tool/layer-list-tool.interface.mjs +2 -0
  230. package/esm2020/lib/layer/layer-list-tool/layer-list-tool.service.mjs +22 -0
  231. package/esm2020/lib/layer/layer.module.mjs +173 -0
  232. package/esm2020/lib/layer/shared/clusterParam.mjs +2 -0
  233. package/esm2020/lib/layer/shared/index.mjs +7 -0
  234. package/esm2020/lib/layer/shared/layer.enums.mjs +2 -0
  235. package/esm2020/lib/layer/shared/layer.service.mjs +186 -0
  236. package/esm2020/lib/layer/shared/layers/any-layer.interface.mjs +2 -0
  237. package/esm2020/lib/layer/shared/layers/any-layer.mjs +2 -0
  238. package/esm2020/lib/layer/shared/layers/image-layer.interface.mjs +2 -0
  239. package/esm2020/lib/layer/shared/layers/image-layer.mjs +68 -0
  240. package/esm2020/lib/layer/shared/layers/index.mjs +13 -0
  241. package/esm2020/lib/layer/shared/layers/layer.interface.mjs +17 -0
  242. package/esm2020/lib/layer/shared/layers/layer.mjs +170 -0
  243. package/esm2020/lib/layer/shared/layers/tile-layer.interface.mjs +2 -0
  244. package/esm2020/lib/layer/shared/layers/tile-layer.mjs +47 -0
  245. package/esm2020/lib/layer/shared/layers/vector-layer.interface.mjs +2 -0
  246. package/esm2020/lib/layer/shared/layers/vector-layer.mjs +376 -0
  247. package/esm2020/lib/layer/shared/layers/vectortile-layer.interface.mjs +2 -0
  248. package/esm2020/lib/layer/shared/layers/vectortile-layer.mjs +104 -0
  249. package/esm2020/lib/layer/shared/style.service.mjs +356 -0
  250. package/esm2020/lib/layer/shared/vector-style.interface.mjs +2 -0
  251. package/esm2020/lib/layer/track-feature-button/index.mjs +2 -0
  252. package/esm2020/lib/layer/track-feature-button/track-feature-button.component.mjs +59 -0
  253. package/esm2020/lib/layer/utils/image-watcher.mjs +62 -0
  254. package/esm2020/lib/layer/utils/index.mjs +7 -0
  255. package/esm2020/lib/layer/utils/layer.utils.mjs +10 -0
  256. package/esm2020/lib/layer/utils/layerSync-watcher.mjs +242 -0
  257. package/esm2020/lib/layer/utils/outputLegend.mjs +27 -0
  258. package/esm2020/lib/layer/utils/tile-watcher.mjs +50 -0
  259. package/esm2020/lib/layer/utils/vector-watcher.mjs +48 -0
  260. package/esm2020/lib/map/baselayers-switcher/baselayers-switcher.animation.mjs +20 -0
  261. package/esm2020/lib/map/baselayers-switcher/baselayers-switcher.component.mjs +97 -0
  262. package/esm2020/lib/map/baselayers-switcher/index.mjs +3 -0
  263. package/esm2020/lib/map/baselayers-switcher/mini-basemap.component.mjs +133 -0
  264. package/esm2020/lib/map/geolocate-button/geolocate-button.component.mjs +76 -0
  265. package/esm2020/lib/map/geolocate-button/index.mjs +2 -0
  266. package/esm2020/lib/map/home-extent-button/home-extent-button.component.mjs +63 -0
  267. package/{esm2015/lib/map/home-extent-button/index.js → esm2020/lib/map/home-extent-button/index.mjs} +0 -0
  268. package/esm2020/lib/map/index.mjs +14 -0
  269. package/esm2020/lib/map/info-section/index.mjs +2 -0
  270. package/esm2020/lib/map/info-section/info-section.component.mjs +30 -0
  271. package/esm2020/lib/map/map-browser/index.mjs +2 -0
  272. package/esm2020/lib/map/map-browser/map-browser.component.mjs +66 -0
  273. package/esm2020/lib/map/map-center/index.mjs +2 -0
  274. package/esm2020/lib/map/map-center/map-center.component.mjs +50 -0
  275. package/esm2020/lib/map/map.module.mjs +127 -0
  276. package/esm2020/lib/map/menu-button/index.mjs +2 -0
  277. package/esm2020/lib/map/menu-button/menu-button.component.mjs +62 -0
  278. package/esm2020/lib/map/offline-button/index.mjs +2 -0
  279. package/esm2020/lib/map/offline-button/offline-button.component.mjs +76 -0
  280. package/esm2020/lib/map/rotation-button/index.mjs +2 -0
  281. package/esm2020/lib/map/rotation-button/rotation-button.component.mjs +91 -0
  282. package/esm2020/lib/map/shared/controllers/controller.mjs +42 -0
  283. package/esm2020/lib/map/shared/controllers/geolocation.mjs +308 -0
  284. package/esm2020/lib/map/shared/controllers/index.mjs +4 -0
  285. package/esm2020/lib/map/shared/controllers/view.mjs +342 -0
  286. package/esm2020/lib/map/shared/hover-feature.directive.mjs +506 -0
  287. package/esm2020/lib/map/shared/index.mjs +13 -0
  288. package/esm2020/lib/map/shared/map-pointer-position.directive.mjs +107 -0
  289. package/esm2020/lib/map/shared/map.enums.mjs +6 -0
  290. package/esm2020/lib/map/shared/map.interface.mjs +2 -0
  291. package/esm2020/lib/map/shared/map.mjs +417 -0
  292. package/esm2020/lib/map/shared/map.service.mjs +29 -0
  293. package/esm2020/lib/map/shared/map.utils.mjs +459 -0
  294. package/esm2020/lib/map/shared/mapOffline.directive.mjs +163 -0
  295. package/esm2020/lib/map/shared/projection.interfaces.mjs +2 -0
  296. package/esm2020/lib/map/shared/projection.service.mjs +65 -0
  297. package/esm2020/lib/map/shared/projection.utils.mjs +64 -0
  298. package/esm2020/lib/map/swipe-control/index.mjs +2 -0
  299. package/esm2020/lib/map/swipe-control/swipe-control.component.mjs +193 -0
  300. package/esm2020/lib/map/utils/layer-watcher.mjs +58 -0
  301. package/esm2020/lib/map/wake-lock-button/index.mjs +2 -0
  302. package/esm2020/lib/map/wake-lock-button/wake-lock-button.component.mjs +114 -0
  303. package/esm2020/lib/map/zoom-button/index.mjs +2 -0
  304. package/esm2020/lib/map/zoom-button/zoom-button.component.mjs +40 -0
  305. package/esm2020/lib/measure/index.mjs +4 -0
  306. package/esm2020/lib/measure/measure.module.mjs +20 -0
  307. package/esm2020/lib/measure/measurer/measure-format.pipe.mjs +37 -0
  308. package/esm2020/lib/measure/measurer/measurer-dialog.component.mjs +180 -0
  309. package/esm2020/lib/measure/measurer/measurer-item.component.mjs +140 -0
  310. package/esm2020/lib/measure/measurer/measurer.component.mjs +1042 -0
  311. package/esm2020/lib/measure/measurer/measurer.module.mjs +94 -0
  312. package/esm2020/lib/measure/shared/index.mjs +4 -0
  313. package/esm2020/lib/measure/shared/measure.enum.mjs +37 -0
  314. package/esm2020/lib/measure/shared/measure.interfaces.mjs +2 -0
  315. package/esm2020/lib/measure/shared/measure.utils.mjs +489 -0
  316. package/esm2020/lib/metadata/index.mjs +3 -0
  317. package/esm2020/lib/metadata/metadata-button/index.mjs +2 -0
  318. package/esm2020/lib/metadata/metadata-button/metadata-button.component.mjs +134 -0
  319. package/esm2020/lib/metadata/metadata.module.mjs +55 -0
  320. package/esm2020/lib/metadata/shared/index.mjs +3 -0
  321. package/esm2020/lib/metadata/shared/metadata.interface.mjs +2 -0
  322. package/esm2020/lib/metadata/shared/metadata.service.mjs +19 -0
  323. package/esm2020/lib/offline/geoDB/geoDB.enums.mjs +6 -0
  324. package/esm2020/lib/offline/geoDB/geoDB.interface.mjs +2 -0
  325. package/esm2020/lib/offline/geoDB/geoDB.service.mjs +161 -0
  326. package/esm2020/lib/offline/geoDB/index.mjs +4 -0
  327. package/esm2020/lib/offline/index.mjs +3 -0
  328. package/esm2020/lib/offline/shared/geo-network.service.mjs +66 -0
  329. package/esm2020/lib/offline/shared/index.mjs +2 -0
  330. package/esm2020/lib/overlay/index.mjs +2 -0
  331. package/esm2020/lib/overlay/overlay.module.mjs +23 -0
  332. package/esm2020/lib/overlay/shared/index.mjs +7 -0
  333. package/esm2020/lib/overlay/shared/overlay-marker-style.utils.mjs +69 -0
  334. package/esm2020/lib/overlay/shared/overlay.directive.mjs +33 -0
  335. package/esm2020/lib/overlay/shared/overlay.enum.mjs +8 -0
  336. package/esm2020/lib/overlay/shared/overlay.mjs +130 -0
  337. package/esm2020/lib/overlay/shared/overlay.service.mjs +27 -0
  338. package/esm2020/lib/overlay/shared/overlay.utils.mjs +103 -0
  339. package/esm2020/lib/print/index.mjs +4 -0
  340. package/esm2020/lib/print/print/print.component.mjs +123 -0
  341. package/esm2020/lib/print/print-form/index.mjs +2 -0
  342. package/esm2020/lib/print/print-form/print-form.component.mjs +405 -0
  343. package/esm2020/lib/print/print.module.mjs +65 -0
  344. package/esm2020/lib/print/shared/index.mjs +4 -0
  345. package/esm2020/lib/print/shared/print.interface.mjs +2 -0
  346. package/esm2020/lib/print/shared/print.service.mjs +807 -0
  347. package/esm2020/lib/print/shared/print.type.mjs +30 -0
  348. package/esm2020/lib/query/index.mjs +2 -0
  349. package/esm2020/lib/query/query.module.mjs +29 -0
  350. package/esm2020/lib/query/shared/index.mjs +7 -0
  351. package/esm2020/lib/query/shared/query-search-source.mjs +35 -0
  352. package/esm2020/lib/query/shared/query-search-source.providers.mjs +22 -0
  353. package/esm2020/lib/query/shared/query.directive.mjs +261 -0
  354. package/esm2020/lib/query/shared/query.enums.mjs +30 -0
  355. package/esm2020/lib/query/shared/query.interfaces.mjs +2 -0
  356. package/esm2020/lib/query/shared/query.service.mjs +613 -0
  357. package/esm2020/lib/query/shared/query.utils.mjs +37 -0
  358. package/esm2020/lib/search/index.mjs +12 -0
  359. package/esm2020/lib/search/search-bar/search-bar.component.mjs +489 -0
  360. package/esm2020/lib/search/search-bar/search-bar.module.mjs +75 -0
  361. package/esm2020/lib/search/search-bar/search-url-param.directive.mjs +35 -0
  362. package/esm2020/lib/search/search-results/search-results-add-button.component.mjs +193 -0
  363. package/esm2020/lib/search/search-results/search-results-item.component.mjs +124 -0
  364. package/esm2020/lib/search/search-results/search-results.component.mjs +331 -0
  365. package/esm2020/lib/search/search-results/search-results.module.mjs +77 -0
  366. package/esm2020/lib/search/search-selector/search-selector.component.mjs +123 -0
  367. package/esm2020/lib/search/search-selector/search-selector.module.mjs +56 -0
  368. package/esm2020/lib/search/search-settings/search-settings.component.mjs +418 -0
  369. package/esm2020/lib/search/search-settings/search-settings.module.mjs +60 -0
  370. package/esm2020/lib/search/search.module.mjs +67 -0
  371. package/esm2020/lib/search/shared/index.mjs +9 -0
  372. package/esm2020/lib/search/shared/search-pointer-summary.directive.mjs +322 -0
  373. package/esm2020/lib/search/shared/search-source-service.providers.mjs +20 -0
  374. package/esm2020/lib/search/shared/search-source.service.mjs +47 -0
  375. package/esm2020/lib/search/shared/search.enums.mjs +4 -0
  376. package/esm2020/lib/search/shared/search.interfaces.mjs +2 -0
  377. package/esm2020/lib/search/shared/search.service.mjs +118 -0
  378. package/esm2020/lib/search/shared/search.utils.mjs +78 -0
  379. package/esm2020/lib/search/shared/sources/cadastre.mjs +126 -0
  380. package/esm2020/lib/search/shared/sources/cadastre.providers.mjs +23 -0
  381. package/esm2020/lib/search/shared/sources/coordinates.interfaces.mjs +2 -0
  382. package/esm2020/lib/search/shared/sources/coordinates.mjs +147 -0
  383. package/esm2020/lib/search/shared/sources/coordinates.providers.mjs +40 -0
  384. package/esm2020/lib/search/shared/sources/icherche.interfaces.mjs +2 -0
  385. package/esm2020/lib/search/shared/sources/icherche.mjs +755 -0
  386. package/esm2020/lib/search/shared/sources/icherche.providers.mjs +66 -0
  387. package/esm2020/lib/search/shared/sources/ilayer.interfaces.mjs +2 -0
  388. package/esm2020/lib/search/shared/sources/ilayer.mjs +320 -0
  389. package/esm2020/lib/search/shared/sources/ilayer.providers.mjs +40 -0
  390. package/esm2020/lib/search/shared/sources/index.mjs +20 -0
  391. package/esm2020/lib/search/shared/sources/nominatim.interfaces.mjs +2 -0
  392. package/esm2020/lib/search/shared/sources/nominatim.mjs +253 -0
  393. package/esm2020/lib/search/shared/sources/nominatim.providers.mjs +23 -0
  394. package/esm2020/lib/search/shared/sources/source.interfaces.mjs +2 -0
  395. package/esm2020/lib/search/shared/sources/source.mjs +179 -0
  396. package/esm2020/lib/search/shared/sources/storedqueries.interfaces.mjs +2 -0
  397. package/esm2020/lib/search/shared/sources/storedqueries.mjs +425 -0
  398. package/esm2020/lib/search/shared/sources/storedqueries.providers.mjs +41 -0
  399. package/esm2020/lib/toast/index.mjs +2 -0
  400. package/esm2020/lib/toast/toast.component.mjs +113 -0
  401. package/esm2020/lib/toast/toast.module.mjs +45 -0
  402. package/esm2020/lib/utils/commonVectorStyle.interface.mjs +2 -0
  403. package/esm2020/lib/utils/commonVectorStyle.mjs +75 -0
  404. package/esm2020/lib/utils/googleLinks.mjs +13 -0
  405. package/esm2020/lib/utils/id-generator.mjs +110 -0
  406. package/esm2020/lib/utils/index.mjs +6 -0
  407. package/esm2020/lib/utils/osmLinks.mjs +10 -0
  408. package/esm2020/lib/wkt/index.mjs +2 -0
  409. package/esm2020/lib/wkt/shared/index.mjs +2 -0
  410. package/esm2020/lib/wkt/shared/wkt.service.mjs +239 -0
  411. package/esm2020/lib/wkt/wkt.module.mjs +22 -0
  412. package/esm2020/lib/workspace/confirmation-popup/confirmation-popup.component.mjs +48 -0
  413. package/esm2020/lib/workspace/confirmation-popup/confirmation-popup.module.mjs +36 -0
  414. package/esm2020/lib/workspace/confirmation-popup/index.mjs +3 -0
  415. package/esm2020/lib/workspace/index.mjs +8 -0
  416. package/esm2020/lib/workspace/shared/edition-workspace.mjs +278 -0
  417. package/esm2020/lib/workspace/shared/edition-workspace.service.mjs +642 -0
  418. package/esm2020/lib/workspace/shared/feature-workspace.mjs +35 -0
  419. package/esm2020/lib/workspace/shared/feature-workspace.service.mjs +150 -0
  420. package/esm2020/lib/workspace/shared/index.mjs +8 -0
  421. package/esm2020/lib/workspace/shared/wfs-workspace.mjs +35 -0
  422. package/esm2020/lib/workspace/shared/wfs-workspace.service.mjs +150 -0
  423. package/esm2020/lib/workspace/shared/wms-workspace.service.mjs +261 -0
  424. package/esm2020/lib/workspace/shared/workspace.utils.mjs +24 -0
  425. package/esm2020/lib/workspace/widgets/index.mjs +4 -0
  426. package/esm2020/lib/workspace/widgets/ogc-filter/ogc-filter.component.mjs +47 -0
  427. package/esm2020/lib/workspace/widgets/ogc-filter/ogc-filter.module.mjs +36 -0
  428. package/esm2020/lib/workspace/widgets/widgets.mjs +15 -0
  429. package/esm2020/lib/workspace/workspace-selector/workspace-selector.directive.mjs +133 -0
  430. package/esm2020/lib/workspace/workspace-selector/workspace-selector.module.mjs +28 -0
  431. package/esm2020/lib/workspace/workspace-updator/workspace-updator.directive.mjs +113 -0
  432. package/esm2020/lib/workspace/workspace-updator/workspace-updator.module.mjs +28 -0
  433. package/esm2020/lib/workspace/workspace.module.mjs +62 -0
  434. package/esm2020/public_api.mjs +55 -0
  435. package/fesm2015/igo2-geo.mjs +42904 -0
  436. package/fesm2015/igo2-geo.mjs.map +1 -0
  437. package/fesm2020/igo2-geo.mjs +41183 -0
  438. package/fesm2020/igo2-geo.mjs.map +1 -0
  439. package/{igo2-geo.d.ts → index.d.ts} +0 -0
  440. package/lib/catalog/catalog-browser/catalog-browser-group.component.d.ts +1 -1
  441. package/lib/catalog/catalog-browser/catalog-browser-layer.component.d.ts +1 -1
  442. package/lib/catalog/catalog-browser/catalog-browser.component.d.ts +1 -1
  443. package/lib/catalog/catalog-library/add-catalog-dialog.component.d.ts +4 -4
  444. package/lib/catalog/catalog-library/catalog-library-item.component.d.ts +1 -1
  445. package/lib/catalog/catalog-library/catalog-library.component.d.ts +1 -1
  446. package/lib/directions/directions-buttons/directions-buttons.component.d.ts +1 -1
  447. package/lib/directions/directions-inputs/directions-inputs.component.d.ts +1 -1
  448. package/lib/directions/directions-results/directions-results.component.d.ts +1 -1
  449. package/lib/directions/directions.component.d.ts +1 -1
  450. package/lib/download/download-button/download-button.component.d.ts +1 -1
  451. package/lib/draw/draw/draw-popup.component.d.ts +1 -1
  452. package/lib/draw/draw/draw-shorcuts.component.d.ts +1 -1
  453. package/lib/draw/draw/draw.component.d.ts +4 -4
  454. package/lib/feature/feature-details/feature-details.component.d.ts +1 -1
  455. package/lib/feature/feature-details/feature-details.directive.d.ts +1 -1
  456. package/lib/feature/feature-form/feature-form.component.d.ts +1 -1
  457. package/lib/feature/shared/feature.interfaces.d.ts +2 -2
  458. package/lib/filter/ogc-filter-button/ogc-filter-button.component.d.ts +1 -1
  459. package/lib/filter/ogc-filter-form/ogc-filter-form.component.d.ts +1 -1
  460. package/lib/filter/ogc-filter-selection/ogc-filter-selection.component.d.ts +4 -4
  461. package/lib/filter/ogc-filter-time/ogc-filter-time-slider.component.d.ts +1 -1
  462. package/lib/filter/ogc-filter-time/ogc-filter-time.component.d.ts +6 -6
  463. package/lib/filter/ogc-filterable-form/ogc-filterable-form.component.d.ts +1 -1
  464. package/lib/filter/ogc-filterable-item/ogc-filterable-item.component.d.ts +1 -1
  465. package/lib/filter/ogc-filterable-list/ogc-filterable-list-binding.directive.d.ts +1 -1
  466. package/lib/filter/ogc-filterable-list/ogc-filterable-list.component.d.ts +1 -1
  467. package/lib/filter/shared/filterable-datasource.pipe.d.ts +1 -1
  468. package/lib/filter/spatial-filter/spatial-filter-item/spatial-filter-item.component.d.ts +5 -5
  469. package/lib/filter/spatial-filter/spatial-filter-list/spatial-filter-list.component.d.ts +4 -4
  470. package/lib/filter/spatial-filter/spatial-filter-type/spatial-filter-type.component.d.ts +3 -3
  471. package/lib/filter/time-filter-button/time-filter-button.component.d.ts +1 -1
  472. package/lib/filter/time-filter-form/time-filter-form.component.d.ts +1 -1
  473. package/lib/filter/time-filter-item/time-filter-item.component.d.ts +1 -1
  474. package/lib/filter/time-filter-list/time-filter-list-binding.directive.d.ts +1 -1
  475. package/lib/filter/time-filter-list/time-filter-list.component.d.ts +1 -1
  476. package/lib/geometry/geometry-form-field/geometry-form-field-input.component.d.ts +1 -1
  477. package/lib/geometry/geometry-form-field/geometry-form-field.component.d.ts +3 -3
  478. package/lib/import-export/export-button/export-button.component.d.ts +1 -1
  479. package/lib/import-export/import-export/import-export.component.d.ts +5 -5
  480. package/lib/import-export/shared/drop-geo-file.directive.d.ts +1 -1
  481. package/lib/layer/layer-item/layer-item.component.d.ts +1 -1
  482. package/lib/layer/layer-legend/layer-legend.component.d.ts +1 -1
  483. package/lib/layer/layer-legend-item/layer-legend-item.component.d.ts +1 -1
  484. package/lib/layer/layer-legend-list/layer-legend-list-binding.directive.d.ts +1 -1
  485. package/lib/layer/layer-legend-list/layer-legend-list.component.d.ts +1 -1
  486. package/lib/layer/layer-list/layer-list-binding.directive.d.ts +1 -1
  487. package/lib/layer/layer-list/layer-list.component.d.ts +1 -1
  488. package/lib/layer/layer-list-tool/layer-list-tool.component.d.ts +1 -1
  489. package/lib/layer/track-feature-button/track-feature-button.component.d.ts +1 -1
  490. package/lib/map/baselayers-switcher/baselayers-switcher.component.d.ts +1 -1
  491. package/lib/map/baselayers-switcher/mini-basemap.component.d.ts +1 -1
  492. package/lib/map/geolocate-button/geolocate-button.component.d.ts +1 -1
  493. package/lib/map/home-extent-button/home-extent-button.component.d.ts +1 -1
  494. package/lib/map/info-section/info-section.component.d.ts +1 -1
  495. package/lib/map/map-browser/map-browser.component.d.ts +1 -1
  496. package/lib/map/map-center/map-center.component.d.ts +1 -1
  497. package/lib/map/menu-button/menu-button.component.d.ts +1 -1
  498. package/lib/map/offline-button/offline-button.component.d.ts +1 -1
  499. package/lib/map/rotation-button/rotation-button.component.d.ts +1 -1
  500. package/lib/map/shared/hover-feature.directive.d.ts +1 -1
  501. package/lib/map/shared/map-pointer-position.directive.d.ts +1 -1
  502. package/lib/map/shared/mapOffline.directive.d.ts +1 -1
  503. package/lib/map/swipe-control/swipe-control.component.d.ts +1 -1
  504. package/lib/map/wake-lock-button/wake-lock-button.component.d.ts +1 -1
  505. package/lib/map/zoom-button/zoom-button.component.d.ts +1 -1
  506. package/lib/measure/measurer/measure-format.pipe.d.ts +1 -1
  507. package/lib/measure/measurer/measurer-dialog.component.d.ts +1 -1
  508. package/lib/measure/measurer/measurer-item.component.d.ts +1 -1
  509. package/lib/measure/measurer/measurer.component.d.ts +1 -1
  510. package/lib/metadata/metadata-button/metadata-button.component.d.ts +2 -2
  511. package/lib/overlay/shared/overlay.directive.d.ts +1 -1
  512. package/lib/print/print/print.component.d.ts +1 -1
  513. package/lib/print/print-form/print-form.component.d.ts +17 -17
  514. package/lib/print/shared/print.service.d.ts +6 -1
  515. package/lib/query/shared/query.directive.d.ts +1 -1
  516. package/lib/search/search-bar/search-bar.component.d.ts +1 -1
  517. package/lib/search/search-bar/search-url-param.directive.d.ts +1 -1
  518. package/lib/search/search-results/search-results-add-button.component.d.ts +1 -1
  519. package/lib/search/search-results/search-results-item.component.d.ts +1 -1
  520. package/lib/search/search-results/search-results.component.d.ts +1 -1
  521. package/lib/search/search-selector/search-selector.component.d.ts +1 -1
  522. package/lib/search/search-settings/search-settings.component.d.ts +1 -1
  523. package/lib/search/shared/search-pointer-summary.directive.d.ts +1 -1
  524. package/lib/toast/toast.component.d.ts +1 -1
  525. package/lib/wkt/shared/wkt.service.d.ts +1 -1
  526. package/lib/workspace/confirmation-popup/confirmation-popup.component.d.ts +1 -1
  527. package/lib/workspace/widgets/ogc-filter/ogc-filter.component.d.ts +1 -1
  528. package/lib/workspace/workspace-selector/workspace-selector.directive.d.ts +1 -1
  529. package/lib/workspace/workspace-updator/workspace-updator.directive.d.ts +1 -1
  530. package/ngcc.config.js +3 -3
  531. package/package.json +32 -19
  532. package/style/geo.theming.scss +12 -12
  533. package/bundles/igo2-geo.umd.js +0 -47639
  534. package/bundles/igo2-geo.umd.js.map +0 -1
  535. package/esm2015/lib/catalog/catalog-browser/catalog-browser-group.component.js +0 -305
  536. package/esm2015/lib/catalog/catalog-browser/catalog-browser-layer.component.js +0 -274
  537. package/esm2015/lib/catalog/catalog-browser/catalog-browser.component.js +0 -248
  538. package/esm2015/lib/catalog/catalog-browser/catalog-browser.module.js +0 -82
  539. package/esm2015/lib/catalog/catalog-library/add-catalog-dialog.component.js +0 -235
  540. package/esm2015/lib/catalog/catalog-library/catalog-library-item.component.js +0 -85
  541. package/esm2015/lib/catalog/catalog-library/catalog-library.component.js +0 -224
  542. package/esm2015/lib/catalog/catalog-library/catalog-library.module.js +0 -97
  543. package/esm2015/lib/catalog/catalog.module.js +0 -55
  544. package/esm2015/lib/catalog/index.js +0 -5
  545. package/esm2015/lib/catalog/shared/catalog.abstract.js +0 -95
  546. package/esm2015/lib/catalog/shared/catalog.enum.js +0 -16
  547. package/esm2015/lib/catalog/shared/catalog.interface.js +0 -2
  548. package/esm2015/lib/catalog/shared/catalog.service.js +0 -606
  549. package/esm2015/lib/catalog/shared/index.js +0 -5
  550. package/esm2015/lib/datasource/datasource.module.js +0 -22
  551. package/esm2015/lib/datasource/index.js +0 -3
  552. package/esm2015/lib/datasource/shared/capabilities.service.js +0 -427
  553. package/esm2015/lib/datasource/shared/datasource.service.js +0 -236
  554. package/esm2015/lib/datasource/shared/datasources/any-datasource.interface.js +0 -2
  555. package/esm2015/lib/datasource/shared/datasources/any-datasource.js +0 -2
  556. package/esm2015/lib/datasource/shared/datasources/arcgisrest-datasource.interface.js +0 -2
  557. package/esm2015/lib/datasource/shared/datasources/arcgisrest-datasource.js +0 -145
  558. package/esm2015/lib/datasource/shared/datasources/carto-datasource.interface.js +0 -2
  559. package/esm2015/lib/datasource/shared/datasources/carto-datasource.js +0 -109
  560. package/esm2015/lib/datasource/shared/datasources/cluster-datasource.interface.js +0 -2
  561. package/esm2015/lib/datasource/shared/datasources/cluster-datasource.js +0 -15
  562. package/esm2015/lib/datasource/shared/datasources/data.service.js +0 -3
  563. package/esm2015/lib/datasource/shared/datasources/datasource.interface.js +0 -2
  564. package/esm2015/lib/datasource/shared/datasources/datasource.js +0 -29
  565. package/esm2015/lib/datasource/shared/datasources/feature-datasource.interface.js +0 -2
  566. package/esm2015/lib/datasource/shared/datasources/feature-datasource.js +0 -43
  567. package/esm2015/lib/datasource/shared/datasources/imagearcgisrest-datasource.interface.js +0 -2
  568. package/esm2015/lib/datasource/shared/datasources/imagearcgisrest-datasource.js +0 -57
  569. package/esm2015/lib/datasource/shared/datasources/index.js +0 -36
  570. package/esm2015/lib/datasource/shared/datasources/mvt-datasource.interface.js +0 -2
  571. package/esm2015/lib/datasource/shared/datasources/mvt-datasource.js +0 -28
  572. package/esm2015/lib/datasource/shared/datasources/osm-datasource.interface.js +0 -2
  573. package/esm2015/lib/datasource/shared/datasources/osm-datasource.js +0 -12
  574. package/esm2015/lib/datasource/shared/datasources/tilearcgisrest-datasource.interface.js +0 -2
  575. package/esm2015/lib/datasource/shared/datasources/tilearcgisrest-datasource.js +0 -49
  576. package/esm2015/lib/datasource/shared/datasources/tiledebug-datasource.interface.js +0 -2
  577. package/esm2015/lib/datasource/shared/datasources/tiledebug-datasource.js +0 -15
  578. package/esm2015/lib/datasource/shared/datasources/websocket-datasource.interface.js +0 -2
  579. package/esm2015/lib/datasource/shared/datasources/websocket-datasource.js +0 -54
  580. package/esm2015/lib/datasource/shared/datasources/wfs-datasource.interface.js +0 -2
  581. package/esm2015/lib/datasource/shared/datasources/wfs-datasource.js +0 -74
  582. package/esm2015/lib/datasource/shared/datasources/wfs.service.js +0 -153
  583. package/esm2015/lib/datasource/shared/datasources/wms-datasource.interface.js +0 -2
  584. package/esm2015/lib/datasource/shared/datasources/wms-datasource.js +0 -205
  585. package/esm2015/lib/datasource/shared/datasources/wms-wfs.utils.js +0 -207
  586. package/esm2015/lib/datasource/shared/datasources/wmts-datasource.interface.js +0 -2
  587. package/esm2015/lib/datasource/shared/datasources/wmts-datasource.js +0 -16
  588. package/esm2015/lib/datasource/shared/datasources/xyz-datasource.interface.js +0 -2
  589. package/esm2015/lib/datasource/shared/datasources/xyz-datasource.js +0 -9
  590. package/esm2015/lib/datasource/shared/index.js +0 -5
  591. package/esm2015/lib/datasource/shared/options/index.js +0 -5
  592. package/esm2015/lib/datasource/shared/options/options-api.interface.js +0 -2
  593. package/esm2015/lib/datasource/shared/options/options-api.providers.js +0 -15
  594. package/esm2015/lib/datasource/shared/options/options-api.service.js +0 -81
  595. package/esm2015/lib/datasource/shared/options/options.service.js +0 -3
  596. package/esm2015/lib/datasource/utils/esri-style-generator.js +0 -357
  597. package/esm2015/lib/datasource/utils/index.js +0 -3
  598. package/esm2015/lib/datasource/utils/tilegrid.js +0 -20
  599. package/esm2015/lib/directions/directions-buttons/directions-buttons.component.js +0 -229
  600. package/esm2015/lib/directions/directions-buttons/index.js +0 -2
  601. package/esm2015/lib/directions/directions-inputs/directions-inputs.component.js +0 -300
  602. package/esm2015/lib/directions/directions-inputs/index.js +0 -2
  603. package/esm2015/lib/directions/directions-results/directions-results.component.js +0 -204
  604. package/esm2015/lib/directions/directions-results/index.js +0 -2
  605. package/esm2015/lib/directions/directions-sources/directions-source.interface.js +0 -2
  606. package/esm2015/lib/directions/directions-sources/directions-source.js +0 -3
  607. package/esm2015/lib/directions/directions-sources/directions-source.provider.js +0 -16
  608. package/esm2015/lib/directions/directions-sources/index.js +0 -5
  609. package/esm2015/lib/directions/directions-sources/osrm-directions-source.js +0 -99
  610. package/esm2015/lib/directions/directions.component.js +0 -316
  611. package/esm2015/lib/directions/directions.module.js +0 -104
  612. package/esm2015/lib/directions/index.js +0 -7
  613. package/esm2015/lib/directions/shared/directions-source.service.js +0 -17
  614. package/esm2015/lib/directions/shared/directions.enum.js +0 -28
  615. package/esm2015/lib/directions/shared/directions.interface.js +0 -2
  616. package/esm2015/lib/directions/shared/directions.service.js +0 -29
  617. package/esm2015/lib/directions/shared/directions.utils.js +0 -510
  618. package/esm2015/lib/directions/shared/index.js +0 -6
  619. package/esm2015/lib/directions/shared/store.js +0 -24
  620. package/esm2015/lib/download/download-button/download-button.component.js +0 -66
  621. package/esm2015/lib/download/download-button/index.js +0 -2
  622. package/esm2015/lib/download/download.module.js +0 -44
  623. package/esm2015/lib/download/index.js +0 -3
  624. package/esm2015/lib/download/shared/download.interface.js +0 -2
  625. package/esm2015/lib/download/shared/download.service.js +0 -65
  626. package/esm2015/lib/download/shared/index.js +0 -3
  627. package/esm2015/lib/draw/draw/draw-popup.component.js +0 -69
  628. package/esm2015/lib/draw/draw/draw-shorcuts.component.js +0 -64
  629. package/esm2015/lib/draw/draw/draw.component.js +0 -745
  630. package/esm2015/lib/draw/draw/draw.module.js +0 -102
  631. package/esm2015/lib/draw/drawingTool.module.js +0 -20
  632. package/esm2015/lib/draw/index.js +0 -3
  633. package/esm2015/lib/draw/shared/draw-icon.service.js +0 -27
  634. package/esm2015/lib/draw/shared/draw-style.service.js +0 -173
  635. package/esm2015/lib/draw/shared/draw.enum.js +0 -24
  636. package/esm2015/lib/draw/shared/draw.interface.js +0 -2
  637. package/esm2015/lib/draw/shared/draw.utils.js +0 -104
  638. package/esm2015/lib/draw/shared/index.js +0 -6
  639. package/esm2015/lib/feature/feature-details/feature-details.component.js +0 -393
  640. package/esm2015/lib/feature/feature-details/feature-details.directive.js +0 -54
  641. package/esm2015/lib/feature/feature-details/feature-details.module.js +0 -50
  642. package/esm2015/lib/feature/feature-form/feature-form.component.js +0 -117
  643. package/esm2015/lib/feature/feature-form/feature-form.module.js +0 -36
  644. package/esm2015/lib/feature/feature.module.js +0 -30
  645. package/esm2015/lib/feature/index.js +0 -4
  646. package/esm2015/lib/feature/shared/feature.enums.js +0 -9
  647. package/esm2015/lib/feature/shared/feature.interfaces.js +0 -2
  648. package/esm2015/lib/feature/shared/feature.utils.js +0 -348
  649. package/esm2015/lib/feature/shared/index.js +0 -7
  650. package/esm2015/lib/feature/shared/store.js +0 -112
  651. package/esm2015/lib/feature/shared/strategies/in-map-extent.js +0 -114
  652. package/esm2015/lib/feature/shared/strategies/in-map-resolution.js +0 -94
  653. package/esm2015/lib/feature/shared/strategies/index.js +0 -6
  654. package/esm2015/lib/feature/shared/strategies/loading-layer.js +0 -104
  655. package/esm2015/lib/feature/shared/strategies/loading.js +0 -133
  656. package/esm2015/lib/feature/shared/strategies/selection.js +0 -370
  657. package/esm2015/lib/feature/shared/strategies.utils.js +0 -37
  658. package/esm2015/lib/filter/filter.module.js +0 -290
  659. package/esm2015/lib/filter/index.js +0 -16
  660. package/esm2015/lib/filter/ogc-filter-button/index.js +0 -2
  661. package/esm2015/lib/filter/ogc-filter-button/ogc-filter-button.component.js +0 -161
  662. package/esm2015/lib/filter/ogc-filter-form/index.js +0 -2
  663. package/esm2015/lib/filter/ogc-filter-form/ogc-filter-form.component.js +0 -657
  664. package/esm2015/lib/filter/ogc-filter-selection/index.js +0 -2
  665. package/esm2015/lib/filter/ogc-filter-selection/ogc-filter-selection.component.js +0 -1355
  666. package/esm2015/lib/filter/ogc-filter-time/index.js +0 -3
  667. package/esm2015/lib/filter/ogc-filter-time/ogc-filter-time-slider.component.js +0 -185
  668. package/esm2015/lib/filter/ogc-filter-time/ogc-filter-time.component.js +0 -898
  669. package/esm2015/lib/filter/ogc-filterable-form/index.js +0 -2
  670. package/esm2015/lib/filter/ogc-filterable-form/ogc-filterable-form.component.js +0 -62
  671. package/esm2015/lib/filter/ogc-filterable-item/index.js +0 -2
  672. package/esm2015/lib/filter/ogc-filterable-item/ogc-filterable-item.component.js +0 -307
  673. package/esm2015/lib/filter/ogc-filterable-list/index.js +0 -3
  674. package/esm2015/lib/filter/ogc-filterable-list/ogc-filterable-list-binding.directive.js +0 -31
  675. package/esm2015/lib/filter/ogc-filterable-list/ogc-filterable-list.component.js +0 -35
  676. package/esm2015/lib/filter/shared/filterable-datasource.pipe.js +0 -55
  677. package/esm2015/lib/filter/shared/index.js +0 -12
  678. package/esm2015/lib/filter/shared/ogc-filter-time.service.js +0 -73
  679. package/esm2015/lib/filter/shared/ogc-filter.enum.js +0 -30
  680. package/esm2015/lib/filter/shared/ogc-filter.interface.js +0 -2
  681. package/esm2015/lib/filter/shared/ogc-filter.js +0 -693
  682. package/esm2015/lib/filter/shared/ogc-filter.service.js +0 -46
  683. package/esm2015/lib/filter/shared/spatial-filter.enum.js +0 -23
  684. package/esm2015/lib/filter/shared/spatial-filter.interface.js +0 -2
  685. package/esm2015/lib/filter/shared/spatial-filter.service.js +0 -269
  686. package/esm2015/lib/filter/shared/time-filter.enum.js +0 -13
  687. package/esm2015/lib/filter/shared/time-filter.interface.js +0 -2
  688. package/esm2015/lib/filter/shared/time-filter.service.js +0 -107
  689. package/esm2015/lib/filter/spatial-filter/spatial-filter-item/index.js +0 -2
  690. package/esm2015/lib/filter/spatial-filter/spatial-filter-item/spatial-filter-item.component.js +0 -1108
  691. package/esm2015/lib/filter/spatial-filter/spatial-filter-list/index.js +0 -2
  692. package/esm2015/lib/filter/spatial-filter/spatial-filter-list/spatial-filter-list.component.js +0 -224
  693. package/esm2015/lib/filter/spatial-filter/spatial-filter-type/index.js +0 -2
  694. package/esm2015/lib/filter/spatial-filter/spatial-filter-type/spatial-filter-type.component.js +0 -157
  695. package/esm2015/lib/filter/time-filter-button/index.js +0 -2
  696. package/esm2015/lib/filter/time-filter-button/time-filter-button.component.js +0 -83
  697. package/esm2015/lib/filter/time-filter-form/index.js +0 -2
  698. package/esm2015/lib/filter/time-filter-form/time-filter-form.component.js +0 -772
  699. package/esm2015/lib/filter/time-filter-item/index.js +0 -2
  700. package/esm2015/lib/filter/time-filter-item/time-filter-item.component.js +0 -126
  701. package/esm2015/lib/filter/time-filter-list/index.js +0 -3
  702. package/esm2015/lib/filter/time-filter-list/time-filter-list-binding.directive.js +0 -31
  703. package/esm2015/lib/filter/time-filter-list/time-filter-list.component.js +0 -43
  704. package/esm2015/lib/geo.module.js +0 -102
  705. package/esm2015/lib/geometry/geometry-form-field/geometry-form-field-input.component.js +0 -515
  706. package/esm2015/lib/geometry/geometry-form-field/geometry-form-field.component.js +0 -199
  707. package/esm2015/lib/geometry/geometry-form-field/geometry-form-field.module.js +0 -66
  708. package/esm2015/lib/geometry/geometry.module.js +0 -29
  709. package/esm2015/lib/geometry/index.js +0 -4
  710. package/esm2015/lib/geometry/shared/controls/draw.js +0 -271
  711. package/esm2015/lib/geometry/shared/controls/index.js +0 -4
  712. package/esm2015/lib/geometry/shared/controls/modify.js +0 -521
  713. package/esm2015/lib/geometry/shared/controls/slice.js +0 -177
  714. package/esm2015/lib/geometry/shared/geometry.errors.js +0 -26
  715. package/esm2015/lib/geometry/shared/geometry.interfaces.js +0 -2
  716. package/esm2015/lib/geometry/shared/geometry.utils.js +0 -122
  717. package/esm2015/lib/geometry/shared/index.js +0 -5
  718. package/esm2015/lib/import-export/export-button/export-button.component.js +0 -70
  719. package/esm2015/lib/import-export/export-button/index.js +0 -2
  720. package/esm2015/lib/import-export/import-export/import-export.component.js +0 -1238
  721. package/esm2015/lib/import-export/import-export/index.js +0 -2
  722. package/esm2015/lib/import-export/import-export.module.js +0 -95
  723. package/esm2015/lib/import-export/index.js +0 -5
  724. package/esm2015/lib/import-export/shared/drop-geo-file.directive.js +0 -136
  725. package/esm2015/lib/import-export/shared/export.errors.js +0 -15
  726. package/esm2015/lib/import-export/shared/export.interface.js +0 -2
  727. package/esm2015/lib/import-export/shared/export.service.js +0 -195
  728. package/esm2015/lib/import-export/shared/export.type.js +0 -4
  729. package/esm2015/lib/import-export/shared/export.utils.js +0 -55
  730. package/esm2015/lib/import-export/shared/import.errors.js +0 -39
  731. package/esm2015/lib/import-export/shared/import.interface.js +0 -2
  732. package/esm2015/lib/import-export/shared/import.service.js +0 -195
  733. package/esm2015/lib/import-export/shared/import.utils.js +0 -234
  734. package/esm2015/lib/import-export/shared/index.js +0 -11
  735. package/esm2015/lib/import-export/style-list/index.js +0 -5
  736. package/esm2015/lib/import-export/style-list/style-list.interface.js +0 -2
  737. package/esm2015/lib/import-export/style-list/style-list.module.js +0 -23
  738. package/esm2015/lib/import-export/style-list/style-list.provider.js +0 -21
  739. package/esm2015/lib/import-export/style-list/style-list.service.js +0 -51
  740. package/esm2015/lib/layer/index.js +0 -10
  741. package/esm2015/lib/layer/layer-item/index.js +0 -2
  742. package/esm2015/lib/layer/layer-item/layer-item.component.js +0 -305
  743. package/esm2015/lib/layer/layer-legend/index.js +0 -2
  744. package/esm2015/lib/layer/layer-legend/layer-legend.component.js +0 -395
  745. package/esm2015/lib/layer/layer-legend-item/index.js +0 -2
  746. package/esm2015/lib/layer/layer-legend-item/layer-legend-item.component.js +0 -91
  747. package/esm2015/lib/layer/layer-legend-list/index.js +0 -3
  748. package/esm2015/lib/layer/layer-legend-list/layer-legend-list-binding.directive.js +0 -48
  749. package/esm2015/lib/layer/layer-legend-list/layer-legend-list.component.js +0 -200
  750. package/esm2015/lib/layer/layer-list/index.js +0 -4
  751. package/esm2015/lib/layer/layer-list/layer-list-binding.directive.js +0 -59
  752. package/esm2015/lib/layer/layer-list/layer-list.component.js +0 -1043
  753. package/esm2015/lib/layer/layer-list/layer-list.enum.js +0 -19
  754. package/esm2015/lib/layer/layer-list-tool/index.js +0 -5
  755. package/esm2015/lib/layer/layer-list-tool/layer-list-tool.component.js +0 -176
  756. package/esm2015/lib/layer/layer-list-tool/layer-list-tool.enum.js +0 -7
  757. package/esm2015/lib/layer/layer-list-tool/layer-list-tool.interface.js +0 -2
  758. package/esm2015/lib/layer/layer-list-tool/layer-list-tool.service.js +0 -22
  759. package/esm2015/lib/layer/layer.module.js +0 -174
  760. package/esm2015/lib/layer/shared/clusterParam.js +0 -2
  761. package/esm2015/lib/layer/shared/index.js +0 -7
  762. package/esm2015/lib/layer/shared/layer.enums.js +0 -2
  763. package/esm2015/lib/layer/shared/layer.service.js +0 -186
  764. package/esm2015/lib/layer/shared/layers/any-layer.interface.js +0 -2
  765. package/esm2015/lib/layer/shared/layers/any-layer.js +0 -2
  766. package/esm2015/lib/layer/shared/layers/image-layer.interface.js +0 -2
  767. package/esm2015/lib/layer/shared/layers/image-layer.js +0 -68
  768. package/esm2015/lib/layer/shared/layers/index.js +0 -13
  769. package/esm2015/lib/layer/shared/layers/layer.interface.js +0 -17
  770. package/esm2015/lib/layer/shared/layers/layer.js +0 -169
  771. package/esm2015/lib/layer/shared/layers/tile-layer.interface.js +0 -2
  772. package/esm2015/lib/layer/shared/layers/tile-layer.js +0 -47
  773. package/esm2015/lib/layer/shared/layers/vector-layer.interface.js +0 -2
  774. package/esm2015/lib/layer/shared/layers/vector-layer.js +0 -376
  775. package/esm2015/lib/layer/shared/layers/vectortile-layer.interface.js +0 -2
  776. package/esm2015/lib/layer/shared/layers/vectortile-layer.js +0 -104
  777. package/esm2015/lib/layer/shared/style.service.js +0 -358
  778. package/esm2015/lib/layer/shared/vector-style.interface.js +0 -2
  779. package/esm2015/lib/layer/track-feature-button/index.js +0 -2
  780. package/esm2015/lib/layer/track-feature-button/track-feature-button.component.js +0 -64
  781. package/esm2015/lib/layer/utils/image-watcher.js +0 -62
  782. package/esm2015/lib/layer/utils/index.js +0 -7
  783. package/esm2015/lib/layer/utils/layer.utils.js +0 -11
  784. package/esm2015/lib/layer/utils/layerSync-watcher.js +0 -249
  785. package/esm2015/lib/layer/utils/outputLegend.js +0 -27
  786. package/esm2015/lib/layer/utils/tile-watcher.js +0 -50
  787. package/esm2015/lib/layer/utils/vector-watcher.js +0 -48
  788. package/esm2015/lib/map/baselayers-switcher/baselayers-switcher.animation.js +0 -20
  789. package/esm2015/lib/map/baselayers-switcher/baselayers-switcher.component.js +0 -105
  790. package/esm2015/lib/map/baselayers-switcher/index.js +0 -3
  791. package/esm2015/lib/map/baselayers-switcher/mini-basemap.component.js +0 -137
  792. package/esm2015/lib/map/geolocate-button/geolocate-button.component.js +0 -82
  793. package/esm2015/lib/map/geolocate-button/index.js +0 -2
  794. package/esm2015/lib/map/home-extent-button/home-extent-button.component.js +0 -69
  795. package/esm2015/lib/map/index.js +0 -14
  796. package/esm2015/lib/map/info-section/index.js +0 -2
  797. package/esm2015/lib/map/info-section/info-section.component.js +0 -36
  798. package/esm2015/lib/map/map-browser/index.js +0 -2
  799. package/esm2015/lib/map/map-browser/map-browser.component.js +0 -70
  800. package/esm2015/lib/map/map-center/index.js +0 -2
  801. package/esm2015/lib/map/map-center/map-center.component.js +0 -55
  802. package/esm2015/lib/map/map.module.js +0 -129
  803. package/esm2015/lib/map/menu-button/index.js +0 -2
  804. package/esm2015/lib/map/menu-button/menu-button.component.js +0 -66
  805. package/esm2015/lib/map/offline-button/index.js +0 -2
  806. package/esm2015/lib/map/offline-button/offline-button.component.js +0 -84
  807. package/esm2015/lib/map/rotation-button/index.js +0 -2
  808. package/esm2015/lib/map/rotation-button/rotation-button.component.js +0 -97
  809. package/esm2015/lib/map/shared/controllers/controller.js +0 -42
  810. package/esm2015/lib/map/shared/controllers/geolocation.js +0 -310
  811. package/esm2015/lib/map/shared/controllers/index.js +0 -4
  812. package/esm2015/lib/map/shared/controllers/view.js +0 -342
  813. package/esm2015/lib/map/shared/hover-feature.directive.js +0 -509
  814. package/esm2015/lib/map/shared/index.js +0 -13
  815. package/esm2015/lib/map/shared/map-pointer-position.directive.js +0 -107
  816. package/esm2015/lib/map/shared/map.enums.js +0 -6
  817. package/esm2015/lib/map/shared/map.interface.js +0 -2
  818. package/esm2015/lib/map/shared/map.js +0 -418
  819. package/esm2015/lib/map/shared/map.service.js +0 -29
  820. package/esm2015/lib/map/shared/map.utils.js +0 -459
  821. package/esm2015/lib/map/shared/mapOffline.directive.js +0 -163
  822. package/esm2015/lib/map/shared/projection.interfaces.js +0 -2
  823. package/esm2015/lib/map/shared/projection.service.js +0 -65
  824. package/esm2015/lib/map/shared/projection.utils.js +0 -64
  825. package/esm2015/lib/map/swipe-control/index.js +0 -2
  826. package/esm2015/lib/map/swipe-control/swipe-control.component.js +0 -199
  827. package/esm2015/lib/map/utils/layer-watcher.js +0 -58
  828. package/esm2015/lib/map/wake-lock-button/index.js +0 -2
  829. package/esm2015/lib/map/wake-lock-button/wake-lock-button.component.js +0 -122
  830. package/esm2015/lib/map/zoom-button/index.js +0 -2
  831. package/esm2015/lib/map/zoom-button/zoom-button.component.js +0 -46
  832. package/esm2015/lib/measure/index.js +0 -4
  833. package/esm2015/lib/measure/measure.module.js +0 -20
  834. package/esm2015/lib/measure/measurer/measure-format.pipe.js +0 -37
  835. package/esm2015/lib/measure/measurer/measurer-dialog.component.js +0 -220
  836. package/esm2015/lib/measure/measurer/measurer-item.component.js +0 -148
  837. package/esm2015/lib/measure/measurer/measurer.component.js +0 -1053
  838. package/esm2015/lib/measure/measurer/measurer.module.js +0 -96
  839. package/esm2015/lib/measure/shared/index.js +0 -4
  840. package/esm2015/lib/measure/shared/measure.enum.js +0 -37
  841. package/esm2015/lib/measure/shared/measure.interfaces.js +0 -2
  842. package/esm2015/lib/measure/shared/measure.utils.js +0 -489
  843. package/esm2015/lib/metadata/index.js +0 -3
  844. package/esm2015/lib/metadata/metadata-button/index.js +0 -2
  845. package/esm2015/lib/metadata/metadata-button/metadata-button.component.js +0 -146
  846. package/esm2015/lib/metadata/metadata.module.js +0 -57
  847. package/esm2015/lib/metadata/shared/index.js +0 -3
  848. package/esm2015/lib/metadata/shared/metadata.interface.js +0 -2
  849. package/esm2015/lib/metadata/shared/metadata.service.js +0 -19
  850. package/esm2015/lib/offline/geoDB/geoDB.enums.js +0 -6
  851. package/esm2015/lib/offline/geoDB/geoDB.interface.js +0 -2
  852. package/esm2015/lib/offline/geoDB/geoDB.service.js +0 -161
  853. package/esm2015/lib/offline/geoDB/index.js +0 -4
  854. package/esm2015/lib/offline/index.js +0 -3
  855. package/esm2015/lib/offline/shared/geo-network.service.js +0 -66
  856. package/esm2015/lib/offline/shared/index.js +0 -2
  857. package/esm2015/lib/overlay/index.js +0 -2
  858. package/esm2015/lib/overlay/overlay.module.js +0 -23
  859. package/esm2015/lib/overlay/shared/index.js +0 -7
  860. package/esm2015/lib/overlay/shared/overlay-marker-style.utils.js +0 -69
  861. package/esm2015/lib/overlay/shared/overlay.directive.js +0 -33
  862. package/esm2015/lib/overlay/shared/overlay.enum.js +0 -8
  863. package/esm2015/lib/overlay/shared/overlay.js +0 -130
  864. package/esm2015/lib/overlay/shared/overlay.service.js +0 -27
  865. package/esm2015/lib/overlay/shared/overlay.utils.js +0 -103
  866. package/esm2015/lib/print/index.js +0 -4
  867. package/esm2015/lib/print/print/print.component.js +0 -126
  868. package/esm2015/lib/print/print-form/index.js +0 -2
  869. package/esm2015/lib/print/print-form/print-form.component.js +0 -447
  870. package/esm2015/lib/print/print.module.js +0 -67
  871. package/esm2015/lib/print/shared/index.js +0 -4
  872. package/esm2015/lib/print/shared/print.interface.js +0 -2
  873. package/esm2015/lib/print/shared/print.service.js +0 -820
  874. package/esm2015/lib/print/shared/print.type.js +0 -30
  875. package/esm2015/lib/query/index.js +0 -2
  876. package/esm2015/lib/query/query.module.js +0 -29
  877. package/esm2015/lib/query/shared/index.js +0 -7
  878. package/esm2015/lib/query/shared/query-search-source.js +0 -35
  879. package/esm2015/lib/query/shared/query-search-source.providers.js +0 -22
  880. package/esm2015/lib/query/shared/query.directive.js +0 -261
  881. package/esm2015/lib/query/shared/query.enums.js +0 -30
  882. package/esm2015/lib/query/shared/query.interfaces.js +0 -2
  883. package/esm2015/lib/query/shared/query.service.js +0 -619
  884. package/esm2015/lib/query/shared/query.utils.js +0 -37
  885. package/esm2015/lib/search/index.js +0 -12
  886. package/esm2015/lib/search/search-bar/search-bar.component.js +0 -496
  887. package/esm2015/lib/search/search-bar/search-bar.module.js +0 -77
  888. package/esm2015/lib/search/search-bar/search-url-param.directive.js +0 -35
  889. package/esm2015/lib/search/search-results/search-results-add-button.component.js +0 -198
  890. package/esm2015/lib/search/search-results/search-results-item.component.js +0 -129
  891. package/esm2015/lib/search/search-results/search-results.component.js +0 -337
  892. package/esm2015/lib/search/search-results/search-results.module.js +0 -79
  893. package/esm2015/lib/search/search-selector/search-selector.component.js +0 -132
  894. package/esm2015/lib/search/search-selector/search-selector.module.js +0 -58
  895. package/esm2015/lib/search/search-settings/search-settings.component.js +0 -435
  896. package/esm2015/lib/search/search-settings/search-settings.module.js +0 -62
  897. package/esm2015/lib/search/search.module.js +0 -69
  898. package/esm2015/lib/search/shared/index.js +0 -9
  899. package/esm2015/lib/search/shared/search-pointer-summary.directive.js +0 -322
  900. package/esm2015/lib/search/shared/search-source-service.providers.js +0 -20
  901. package/esm2015/lib/search/shared/search-source.service.js +0 -47
  902. package/esm2015/lib/search/shared/search.enums.js +0 -4
  903. package/esm2015/lib/search/shared/search.interfaces.js +0 -2
  904. package/esm2015/lib/search/shared/search.service.js +0 -118
  905. package/esm2015/lib/search/shared/search.utils.js +0 -78
  906. package/esm2015/lib/search/shared/sources/cadastre.js +0 -126
  907. package/esm2015/lib/search/shared/sources/cadastre.providers.js +0 -23
  908. package/esm2015/lib/search/shared/sources/coordinates.interfaces.js +0 -2
  909. package/esm2015/lib/search/shared/sources/coordinates.js +0 -147
  910. package/esm2015/lib/search/shared/sources/coordinates.providers.js +0 -40
  911. package/esm2015/lib/search/shared/sources/icherche.interfaces.js +0 -2
  912. package/esm2015/lib/search/shared/sources/icherche.js +0 -756
  913. package/esm2015/lib/search/shared/sources/icherche.providers.js +0 -66
  914. package/esm2015/lib/search/shared/sources/ilayer.interfaces.js +0 -2
  915. package/esm2015/lib/search/shared/sources/ilayer.js +0 -320
  916. package/esm2015/lib/search/shared/sources/ilayer.providers.js +0 -40
  917. package/esm2015/lib/search/shared/sources/index.js +0 -20
  918. package/esm2015/lib/search/shared/sources/nominatim.interfaces.js +0 -2
  919. package/esm2015/lib/search/shared/sources/nominatim.js +0 -253
  920. package/esm2015/lib/search/shared/sources/nominatim.providers.js +0 -23
  921. package/esm2015/lib/search/shared/sources/source.interfaces.js +0 -2
  922. package/esm2015/lib/search/shared/sources/source.js +0 -179
  923. package/esm2015/lib/search/shared/sources/storedqueries.interfaces.js +0 -2
  924. package/esm2015/lib/search/shared/sources/storedqueries.js +0 -425
  925. package/esm2015/lib/search/shared/sources/storedqueries.providers.js +0 -41
  926. package/esm2015/lib/toast/index.js +0 -2
  927. package/esm2015/lib/toast/toast.component.js +0 -119
  928. package/esm2015/lib/toast/toast.module.js +0 -47
  929. package/esm2015/lib/utils/commonVectorStyle.interface.js +0 -2
  930. package/esm2015/lib/utils/commonVectorStyle.js +0 -75
  931. package/esm2015/lib/utils/googleLinks.js +0 -13
  932. package/esm2015/lib/utils/id-generator.js +0 -110
  933. package/esm2015/lib/utils/index.js +0 -6
  934. package/esm2015/lib/utils/osmLinks.js +0 -10
  935. package/esm2015/lib/wkt/index.js +0 -2
  936. package/esm2015/lib/wkt/shared/index.js +0 -2
  937. package/esm2015/lib/wkt/shared/wkt.service.js +0 -239
  938. package/esm2015/lib/wkt/wkt.module.js +0 -22
  939. package/esm2015/lib/workspace/confirmation-popup/confirmation-popup.component.js +0 -56
  940. package/esm2015/lib/workspace/confirmation-popup/confirmation-popup.module.js +0 -38
  941. package/esm2015/lib/workspace/confirmation-popup/index.js +0 -3
  942. package/esm2015/lib/workspace/index.js +0 -8
  943. package/esm2015/lib/workspace/shared/edition-workspace.js +0 -279
  944. package/esm2015/lib/workspace/shared/edition-workspace.service.js +0 -646
  945. package/esm2015/lib/workspace/shared/feature-workspace.js +0 -37
  946. package/esm2015/lib/workspace/shared/feature-workspace.service.js +0 -151
  947. package/esm2015/lib/workspace/shared/index.js +0 -8
  948. package/esm2015/lib/workspace/shared/wfs-workspace.js +0 -37
  949. package/esm2015/lib/workspace/shared/wfs-workspace.service.js +0 -151
  950. package/esm2015/lib/workspace/shared/wms-workspace.service.js +0 -263
  951. package/esm2015/lib/workspace/shared/workspace.utils.js +0 -24
  952. package/esm2015/lib/workspace/widgets/index.js +0 -4
  953. package/esm2015/lib/workspace/widgets/ogc-filter/ogc-filter.component.js +0 -52
  954. package/esm2015/lib/workspace/widgets/ogc-filter/ogc-filter.module.js +0 -38
  955. package/esm2015/lib/workspace/widgets/widgets.js +0 -15
  956. package/esm2015/lib/workspace/workspace-selector/workspace-selector.directive.js +0 -135
  957. package/esm2015/lib/workspace/workspace-selector/workspace-selector.module.js +0 -30
  958. package/esm2015/lib/workspace/workspace-updator/workspace-updator.directive.js +0 -116
  959. package/esm2015/lib/workspace/workspace-updator/workspace-updator.module.js +0 -30
  960. package/esm2015/lib/workspace/workspace.module.js +0 -64
  961. package/esm2015/public_api.js +0 -55
  962. package/fesm2015/igo2-geo.js +0 -42102
  963. package/fesm2015/igo2-geo.js.map +0 -1
@@ -1,619 +0,0 @@
1
- import { Injectable } from '@angular/core';
2
- import { of } from 'rxjs';
3
- import { map, mergeMap } from 'rxjs/operators';
4
- import * as striptags_ from 'striptags';
5
- import * as olformat from 'ol/format';
6
- import * as olextent from 'ol/extent';
7
- import olFormatGML2 from 'ol/format/GML2';
8
- import olFormatGML3 from 'ol/format/GML3';
9
- import olFormatEsriJSON from 'ol/format/EsriJSON';
10
- import * as olgeom from 'ol/geom';
11
- import { uuid } from '@igo2/utils';
12
- import { FEATURE } from '../../feature/shared/feature.enums';
13
- import { WMSDataSource, CartoDataSource, TileArcGISRestDataSource, ImageArcGISRestDataSource } from '../../datasource';
14
- import { QueryFormat, QueryFormatMimeType, QueryHtmlTarget } from './query.enums';
15
- import * as i0 from "@angular/core";
16
- import * as i1 from "@angular/common/http";
17
- import * as i2 from "@igo2/core";
18
- export class QueryService {
19
- constructor(http, messageService, languageService) {
20
- this.http = http;
21
- this.messageService = messageService;
22
- this.languageService = languageService;
23
- this.queryEnabled = true;
24
- this.defaultFeatureCount = 20; // default feature count
25
- this.featureCount = 20; // feature count
26
- this.previousMessageIds = [];
27
- }
28
- query(layers, options) {
29
- if (this.previousMessageIds.length) {
30
- this.previousMessageIds.forEach(id => {
31
- this.messageService.remove(id);
32
- });
33
- }
34
- return layers
35
- .filter((layer) => layer.visible && layer.isInResolutionsRange)
36
- .map((layer) => this.queryLayer(layer, options));
37
- }
38
- queryLayer(layer, options) {
39
- const url = this.getQueryUrl(layer.dataSource, options, false, layer.map.viewController.getExtent());
40
- if (!url) {
41
- return of([]);
42
- }
43
- if (layer.dataSource.options.queryFormat ===
44
- QueryFormat.HTMLGML2) {
45
- const urlGml = this.getQueryUrl(layer.dataSource, options, true);
46
- return this.http.get(urlGml, { responseType: 'text' }).pipe(mergeMap(gmlRes => {
47
- const mergedGML = this.mergeGML(gmlRes, url, layer);
48
- const imposedGeom = mergedGML[0];
49
- const imposedProperties = mergedGML[1];
50
- return this.http
51
- .get(url, { responseType: 'text' })
52
- .pipe(map(res => this.extractData(res, layer, options, url, imposedGeom, imposedProperties)));
53
- }));
54
- }
55
- const request = this.http.get(url, { responseType: 'text' });
56
- return request.pipe(map(res => this.extractData(res, layer, options, url)));
57
- }
58
- mergeGML(gmlRes, url, layer) {
59
- var _a, _b;
60
- const parser = new olFormatGML2();
61
- let features = parser.readFeatures(gmlRes);
62
- // Handle non standard GML output (MapServer)
63
- if (features.length === 0) {
64
- const wmsParser = new olformat.WMSGetFeatureInfo();
65
- features = wmsParser.readFeatures(gmlRes);
66
- }
67
- const olmline = new olgeom.MultiLineString([]);
68
- let pts;
69
- const ptsArray = [];
70
- let olmpoly = new olgeom.MultiPolygon([]);
71
- let firstFeatureType;
72
- const nbFeatures = features.length;
73
- // Check if geometry intersect bbox
74
- // for geoserver getfeatureinfo response in data projection, not call projection
75
- const searchParams = this.getQueryParams(url.toLowerCase());
76
- const bboxRaw = searchParams.bbox;
77
- const bbox = bboxRaw.split(',');
78
- const bboxExtent = olextent.createEmpty();
79
- olextent.extend(bboxExtent, bbox);
80
- const outBboxExtent = false;
81
- let titleContent;
82
- let queryTileField;
83
- if ((_b = (_a = layer.options) === null || _a === void 0 ? void 0 : _a.source) === null || _b === void 0 ? void 0 : _b.options) {
84
- const dataSourceOptions = layer.options.source
85
- .options;
86
- if (dataSourceOptions.queryTitle) {
87
- queryTileField = dataSourceOptions.queryTitle;
88
- }
89
- }
90
- features.map(feature => {
91
- if (queryTileField) {
92
- let queryTitleContent = feature.getProperties()[queryTileField];
93
- if (queryTitleContent) {
94
- titleContent = !titleContent ? queryTitleContent : `${titleContent},${queryTitleContent}`;
95
- }
96
- }
97
- /* if (!feature.getGeometry().simplify(100).intersectsExtent(bboxExtent)) {
98
- outBboxExtent = true;
99
- // TODO: Check to project the geometry?
100
- }*/
101
- const featureGeometryCoordinates = feature.getGeometry().getCoordinates();
102
- const featureGeometryType = feature.getGeometry().getType();
103
- if (!firstFeatureType && !outBboxExtent) {
104
- firstFeatureType = featureGeometryType;
105
- }
106
- if (!outBboxExtent) {
107
- switch (featureGeometryType) {
108
- case 'Point':
109
- if (nbFeatures === 1) {
110
- pts = new olgeom.Point(featureGeometryCoordinates, 'XY');
111
- }
112
- else {
113
- ptsArray.push(featureGeometryCoordinates);
114
- }
115
- break;
116
- case 'LineString':
117
- olmline.appendLineString(new olgeom.LineString(featureGeometryCoordinates, 'XY'));
118
- break;
119
- case 'Polygon':
120
- olmpoly.appendPolygon(new olgeom.Polygon(featureGeometryCoordinates, 'XY'));
121
- break;
122
- case 'MultiPolygon':
123
- olmpoly = new olgeom.MultiPolygon(featureGeometryCoordinates, 'XY');
124
- break;
125
- default:
126
- return;
127
- }
128
- }
129
- });
130
- let olmpts;
131
- if (ptsArray.length === 0 && pts) {
132
- olmpts = {
133
- type: pts.getType(),
134
- coordinates: pts.getCoordinates()
135
- };
136
- }
137
- else {
138
- olmpts = {
139
- type: 'Polygon',
140
- coordinates: [this.convexHull(ptsArray)]
141
- };
142
- }
143
- let returnGeometry;
144
- switch (firstFeatureType) {
145
- case 'LineString':
146
- returnGeometry = {
147
- type: olmline.getType(),
148
- coordinates: olmline.getCoordinates()
149
- };
150
- case 'Point':
151
- returnGeometry = olmpts;
152
- case 'Polygon':
153
- returnGeometry = {
154
- type: olmpoly.getType(),
155
- coordinates: olmpoly.getCoordinates()
156
- };
157
- case 'MultiPolygon':
158
- returnGeometry = {
159
- type: olmpoly.getType(),
160
- coordinates: olmpoly.getCoordinates()
161
- };
162
- }
163
- const imposedProperties = {};
164
- if (queryTileField) {
165
- imposedProperties[queryTileField] = titleContent;
166
- }
167
- return [returnGeometry, imposedProperties];
168
- }
169
- cross(a, b, o) {
170
- return (a[0] - o[0]) * (b[1] - o[1]) - (a[1] - o[1]) * (b[0] - o[0]);
171
- }
172
- /**
173
- * @param points An array of [X, Y] coordinates
174
- * This method is use instead of turf.js convexHull because Turf needs at least 3 point to make a hull.
175
- * https://en.wikibooks.org/wiki/Algorithm_Implementation/Geometry/Convex_hull/Monotone_chain#JavaScript
176
- */
177
- convexHull(points) {
178
- points.sort((a, b) => {
179
- return a[0] === b[0] ? a[1] - b[1] : a[0] - b[0];
180
- });
181
- const lower = [];
182
- for (const point of points) {
183
- while (lower.length >= 2 &&
184
- this.cross(lower[lower.length - 2], lower[lower.length - 1], point) <= 0) {
185
- lower.pop();
186
- }
187
- lower.push(point);
188
- }
189
- const upper = [];
190
- for (let i = points.length - 1; i >= 0; i--) {
191
- while (upper.length >= 2 &&
192
- this.cross(upper[upper.length - 2], upper[upper.length - 1], points[i]) <= 0) {
193
- upper.pop();
194
- }
195
- upper.push(points[i]);
196
- }
197
- upper.pop();
198
- lower.pop();
199
- return lower.concat(upper);
200
- }
201
- extractData(res, layer, options, url, imposedGeometry, imposedProperties) {
202
- var _a, _b, _c;
203
- const queryDataSource = layer.dataSource;
204
- const allowedFieldsAndAlias = this.getAllowedFieldsAndAlias(layer);
205
- let features = [];
206
- switch (queryDataSource.options.queryFormat) {
207
- case QueryFormat.GML3:
208
- features = this.extractGML3Data(res, layer.zIndex, allowedFieldsAndAlias);
209
- break;
210
- case QueryFormat.JSON:
211
- case QueryFormat.GEOJSON:
212
- case QueryFormat.GEOJSON2:
213
- features = this.extractGeoJSONData(res, layer.zIndex, allowedFieldsAndAlias);
214
- break;
215
- case QueryFormat.ESRIJSON:
216
- features = this.extractEsriJSONData(res, layer.zIndex, allowedFieldsAndAlias);
217
- break;
218
- case QueryFormat.TEXT:
219
- features = this.extractTextData(res);
220
- break;
221
- case QueryFormat.HTML:
222
- features = this.extractHtmlData(res, queryDataSource.queryHtmlTarget, url);
223
- break;
224
- case QueryFormat.HTMLGML2:
225
- features = this.extractHtmlData(res, queryDataSource.queryHtmlTarget, url, imposedGeometry, imposedProperties);
226
- break;
227
- case QueryFormat.GML2:
228
- default:
229
- features = this.extractGML2Data(res, layer, allowedFieldsAndAlias);
230
- break;
231
- }
232
- if (features.length > 0 && features[0].geometry === null) {
233
- const geomToAdd = this.createGeometryFromUrlClick(url);
234
- for (const feature of features) {
235
- feature.geometry = geomToAdd;
236
- }
237
- }
238
- const wmsDatasource = layer.dataSource;
239
- const featureCount = ((_a = wmsDatasource.params) === null || _a === void 0 ? void 0 : _a.FEATURE_COUNT) ?
240
- new RegExp('FEATURE_COUNT=' + this.featureCount) :
241
- new RegExp('FEATURE_COUNT=' + this.defaultFeatureCount);
242
- if (featureCount.test(url) &&
243
- ((((_b = wmsDatasource.params) === null || _b === void 0 ? void 0 : _b.FEATURE_COUNT) && features.length === this.featureCount) ||
244
- (!((_c = wmsDatasource.params) === null || _c === void 0 ? void 0 : _c.FEATURE_COUNT) && features.length === this.defaultFeatureCount))) {
245
- this.languageService.translate.get('igo.geo.query.featureCountMax', { value: layer.title }).subscribe(message => {
246
- const messageObj = this.messageService.info(message);
247
- this.previousMessageIds.push(messageObj.toastId);
248
- });
249
- }
250
- return features.map((feature, index) => {
251
- var _a;
252
- const mapLabel = feature.properties[queryDataSource.mapLabel];
253
- let exclude;
254
- if (((_a = layer.options.sourceOptions) === null || _a === void 0 ? void 0 : _a.type) === 'wms') {
255
- const sourceOptions = layer.options
256
- .sourceOptions;
257
- exclude = sourceOptions ? sourceOptions.excludeAttribute : undefined;
258
- }
259
- let title = this.getQueryTitle(feature, layer);
260
- if (!title && features.length > 1) {
261
- title = `${layer.title} (${index + 1})`;
262
- }
263
- else if (!title) {
264
- title = layer.title;
265
- }
266
- const meta = Object.assign({}, feature.meta || {}, {
267
- id: uuid(),
268
- title,
269
- mapTitle: mapLabel,
270
- sourceTitle: layer.title,
271
- order: 1000 - layer.zIndex,
272
- excludeAttribute: exclude
273
- });
274
- return Object.assign(feature, {
275
- meta,
276
- projection: queryDataSource.options.type === 'carto'
277
- ? 'EPSG:4326'
278
- : options.projection
279
- });
280
- });
281
- }
282
- createGeometryFromUrlClick(url) {
283
- const searchParams = this.getQueryParams(url.toLowerCase());
284
- const bboxRaw = searchParams.bbox;
285
- const width = parseInt(searchParams.width, 10);
286
- const height = parseInt(searchParams.height, 10);
287
- const xPosition = parseInt(searchParams.i || searchParams.x, 10);
288
- const yPosition = parseInt(searchParams.j || searchParams.y, 10);
289
- const bbox = bboxRaw.split(',');
290
- let threshold = (Math.abs(parseFloat(bbox[0])) - Math.abs(parseFloat(bbox[2]))) * 0.05;
291
- // for context in degree (EPSG:4326,4269...)
292
- if (Math.abs(parseFloat(bbox[0])) < 180) {
293
- threshold = 0.045;
294
- }
295
- const clickx = parseFloat(bbox[0]) +
296
- (Math.abs(parseFloat(bbox[0]) - parseFloat(bbox[2])) * xPosition) /
297
- width -
298
- threshold;
299
- const clicky = parseFloat(bbox[1]) +
300
- (Math.abs(parseFloat(bbox[1]) - parseFloat(bbox[3])) * yPosition) /
301
- height -
302
- threshold;
303
- const clickx1 = clickx + threshold * 2;
304
- const clicky1 = clicky + threshold * 2;
305
- const wktPoly = 'POLYGON((' +
306
- clickx +
307
- ' ' +
308
- clicky +
309
- ', ' +
310
- clickx +
311
- ' ' +
312
- clicky1 +
313
- ', ' +
314
- clickx1 +
315
- ' ' +
316
- clicky1 +
317
- ', ' +
318
- clickx1 +
319
- ' ' +
320
- clicky +
321
- ', ' +
322
- clickx +
323
- ' ' +
324
- clicky +
325
- '))';
326
- const format = new olformat.WKT();
327
- const tenPercentWidthGeom = format.readFeature(wktPoly);
328
- const f = tenPercentWidthGeom.getGeometry();
329
- const newGeom = {
330
- type: f.getType(),
331
- coordinates: f.getCoordinates()
332
- };
333
- return newGeom;
334
- }
335
- extractGML2Data(res, zIndex, allowedFieldsAndAlias) {
336
- const parser = new olFormatGML2();
337
- let features = parser.readFeatures(res);
338
- // Handle non standard GML output (MapServer)
339
- if (features.length === 0) {
340
- const wmsParser = new olformat.WMSGetFeatureInfo();
341
- try {
342
- features = wmsParser.readFeatures(res);
343
- }
344
- catch (e) {
345
- console.warn('query.service: Multipolygons are badly managed in mapserver in GML2. Use another format.');
346
- }
347
- }
348
- return features.map(feature => this.featureToResult(feature, zIndex, allowedFieldsAndAlias));
349
- }
350
- extractGML3Data(res, zIndex, allowedFieldsAndAlias) {
351
- const parser = new olFormatGML3();
352
- let features = [];
353
- try {
354
- features = parser.readFeatures(res);
355
- }
356
- catch (e) {
357
- console.warn('query.service: GML3 is not well supported');
358
- }
359
- return features.map(feature => this.featureToResult(feature, zIndex, allowedFieldsAndAlias));
360
- }
361
- extractGeoJSONData(res, zIndex, allowedFieldsAndAlias) {
362
- let features = [];
363
- try {
364
- features = JSON.parse(res.replace(/(\r|\n)/g, ' ')).features;
365
- }
366
- catch (e) {
367
- console.warn('query.service: Unable to parse geojson', '\n', res);
368
- }
369
- features.map(feature => feature.meta = {
370
- id: uuid(),
371
- order: 1000 - zIndex,
372
- alias: allowedFieldsAndAlias
373
- });
374
- return features;
375
- }
376
- extractEsriJSONData(res, zIndex, allowedFieldsAndAlias) {
377
- if (res) {
378
- try {
379
- if (JSON.parse(res).error) {
380
- return [];
381
- }
382
- }
383
- catch (e) { }
384
- }
385
- const parser = new olFormatEsriJSON();
386
- const features = parser.readFeatures(res);
387
- return features.map(feature => this.featureToResult(feature, zIndex, allowedFieldsAndAlias));
388
- }
389
- extractTextData(res) {
390
- // TODO
391
- return [];
392
- }
393
- extractHtmlData(res, htmlTarget, url, imposedGeometry, imposedProperties) {
394
- const searchParams = this.getQueryParams(url.toLowerCase());
395
- const projection = searchParams.crs || searchParams.srs || 'EPSG:3857';
396
- const geomToAdd = this.createGeometryFromUrlClick(url);
397
- if (htmlTarget !== QueryHtmlTarget.BLANK &&
398
- htmlTarget !== QueryHtmlTarget.IFRAME) {
399
- htmlTarget = QueryHtmlTarget.IFRAME;
400
- }
401
- const bodyTagStart = res.toLowerCase().indexOf('<body>');
402
- const bodyTagEnd = res.toLowerCase().lastIndexOf('</body>') + 7;
403
- // replace \r \n and ' ' with '' to validate if the body is really empty. Clear all the html tags from body
404
- const striptags = striptags_;
405
- const body = striptags(res.slice(bodyTagStart, bodyTagEnd).replace(/(\r|\n|\s)/g, ''));
406
- if (body === '' || res === '') {
407
- return [];
408
- }
409
- return [
410
- {
411
- type: FEATURE,
412
- projection,
413
- properties: Object.assign({ target: htmlTarget, body: res, url }, imposedProperties),
414
- geometry: imposedGeometry || geomToAdd
415
- }
416
- ];
417
- }
418
- getQueryParams(url) {
419
- const queryString = url.split('?');
420
- if (!queryString[1]) {
421
- return;
422
- }
423
- const pairs = queryString[1].split('&');
424
- const result = {};
425
- pairs.forEach(pair => {
426
- pair = pair.split('=');
427
- result[pair[0]] = decodeURIComponent(pair[1] || '');
428
- });
429
- return result;
430
- }
431
- featureToResult(featureOL, zIndex, allowedFieldsAndAlias) {
432
- const featureGeometry = featureOL.getGeometry();
433
- const properties = Object.assign({}, featureOL.getProperties());
434
- delete properties.geometry;
435
- delete properties.GEOMETRIE;
436
- delete properties.boundedBy;
437
- delete properties.shape;
438
- delete properties.SHAPE;
439
- delete properties.the_geom;
440
- delete properties.geom;
441
- let geometry;
442
- if (featureGeometry) {
443
- geometry = {
444
- type: featureGeometry.getType(),
445
- coordinates: featureGeometry.getCoordinates()
446
- };
447
- }
448
- return {
449
- type: FEATURE,
450
- projection: undefined,
451
- properties,
452
- geometry,
453
- meta: {
454
- id: uuid(),
455
- order: 1000 - zIndex,
456
- alias: allowedFieldsAndAlias
457
- }
458
- };
459
- }
460
- getQueryUrl(datasource, options, forceGML2 = false, mapExtent) {
461
- let url;
462
- if (datasource.options.queryUrl) {
463
- return this.getCustomQueryUrl(datasource, options, mapExtent);
464
- }
465
- switch (datasource.constructor) {
466
- case WMSDataSource:
467
- const wmsDatasource = datasource;
468
- const WMSGetFeatureInfoOptions = {
469
- INFO_FORMAT: wmsDatasource.params.INFO_FORMAT ||
470
- this.getMimeInfoFormat(datasource.options.queryFormat),
471
- QUERY_LAYERS: wmsDatasource.params.LAYERS,
472
- FEATURE_COUNT: wmsDatasource.params.FEATURE_COUNT || this.defaultFeatureCount
473
- };
474
- if (wmsDatasource.params.FEATURE_COUNT) {
475
- this.featureCount = wmsDatasource.params.FEATURE_COUNT;
476
- }
477
- if (forceGML2) {
478
- WMSGetFeatureInfoOptions.INFO_FORMAT = this.getMimeInfoFormat(QueryFormat.GML2);
479
- }
480
- url = wmsDatasource.ol.getFeatureInfoUrl(options.coordinates, options.resolution, options.projection, WMSGetFeatureInfoOptions);
481
- // const wmsVersion =
482
- // wmsDatasource.params.VERSION ||
483
- // wmsDatasource.params.version ||
484
- // '1.3.0';
485
- // if (wmsVersion !== '1.3.0') {
486
- // url = url.replace('&I=', '&X=');
487
- // url = url.replace('&J=', '&Y=');
488
- // }
489
- break;
490
- case CartoDataSource:
491
- const cartoDatasource = datasource;
492
- const baseUrl = 'https://' +
493
- cartoDatasource.options.account +
494
- '.carto.com/api/v2/sql?';
495
- const format = 'format=GeoJSON';
496
- const sql = '&q=' + cartoDatasource.options.config.layers[0].options.sql;
497
- const clause = ' WHERE ST_Intersects(the_geom_webmercator,ST_BUFFER(ST_SetSRID(ST_POINT(';
498
- const meters = cartoDatasource.options.queryPrecision
499
- ? cartoDatasource.options.queryPrecision
500
- : '1000';
501
- const coordinates = options.coordinates[0] +
502
- ',' +
503
- options.coordinates[1] +
504
- '),3857),' +
505
- meters +
506
- '))';
507
- url = `${baseUrl}${format}${sql}${clause}${coordinates}`;
508
- break;
509
- case ImageArcGISRestDataSource:
510
- case TileArcGISRestDataSource:
511
- const tileArcGISRestDatasource = datasource;
512
- const deltaX = Math.abs(mapExtent[0] - mapExtent[2]);
513
- const deltaY = Math.abs(mapExtent[1] - mapExtent[3]);
514
- const maxDelta = deltaX > deltaY ? deltaX : deltaY;
515
- const clickBuffer = maxDelta * 0.005;
516
- const threshold = tileArcGISRestDatasource.options.queryPrecision ? tileArcGISRestDatasource.options.queryPrecision : clickBuffer;
517
- const extent = olextent.buffer(olextent.boundingExtent([options.coordinates]), threshold);
518
- const serviceUrl = tileArcGISRestDatasource.options.url +
519
- '/' +
520
- tileArcGISRestDatasource.options.layer +
521
- '/query/';
522
- const geometry = encodeURIComponent('{"xmin":' +
523
- extent[0] +
524
- ',"ymin":' +
525
- extent[1] +
526
- ',"xmax":' +
527
- extent[2] +
528
- ',"ymax":' +
529
- extent[3] +
530
- ',"spatialReference":{"wkid":102100}}');
531
- const params = [
532
- 'f=json',
533
- `geometry=${geometry}`,
534
- 'geometryType=esriGeometryEnvelope',
535
- 'inSR=102100',
536
- 'spatialRel=esriSpatialRelIntersects',
537
- 'outFields=*',
538
- 'returnGeometry=true',
539
- 'outSR=102100'
540
- ];
541
- url = `${serviceUrl}?${params.join('&')}`;
542
- break;
543
- default:
544
- break;
545
- }
546
- return url;
547
- }
548
- getMimeInfoFormat(queryFormat) {
549
- let mime = 'application/vnd.ogc.gml';
550
- const keyEnum = Object.keys(QueryFormat).find(key => QueryFormat[key] === queryFormat);
551
- if (keyEnum) {
552
- mime = QueryFormatMimeType[keyEnum];
553
- }
554
- return mime;
555
- }
556
- getAllowedFieldsAndAlias(layer) {
557
- var _a, _b, _c;
558
- let allowedFieldsAndAlias;
559
- if (((_c = (_b = (_a = layer.options) === null || _a === void 0 ? void 0 : _a.source) === null || _b === void 0 ? void 0 : _b.options) === null || _c === void 0 ? void 0 : _c.sourceFields) &&
560
- layer.options.source.options.sourceFields.length >= 1) {
561
- allowedFieldsAndAlias = {};
562
- layer.options.source.options.sourceFields.forEach(sourceField => {
563
- const alias = sourceField.alias ? sourceField.alias : sourceField.name;
564
- allowedFieldsAndAlias[sourceField.name] = alias;
565
- });
566
- }
567
- return allowedFieldsAndAlias;
568
- }
569
- getQueryTitle(feature, layer) {
570
- var _a, _b;
571
- let title;
572
- if ((_b = (_a = layer.options) === null || _a === void 0 ? void 0 : _a.source) === null || _b === void 0 ? void 0 : _b.options) {
573
- const dataSourceOptions = layer.options.source
574
- .options;
575
- if (dataSourceOptions.queryTitle) {
576
- title = this.getLabelMatch(feature, dataSourceOptions.queryTitle);
577
- }
578
- }
579
- return title;
580
- }
581
- getLabelMatch(feature, labelMatch) {
582
- let label = labelMatch;
583
- const labelToGet = Array.from(labelMatch.matchAll(/\$\{([^\{\}]+)\}/g));
584
- labelToGet.forEach(v => {
585
- label = label.replace(v[0], feature.properties[v[1]]);
586
- });
587
- // Nothing done? check feature's attribute
588
- if (labelToGet.length === 0 && label === labelMatch) {
589
- label = feature.properties[labelMatch] || labelMatch;
590
- }
591
- return label;
592
- }
593
- /**
594
- * @param datasource QueryableDataSource
595
- * @param options QueryOptions
596
- * @mapExtent extent of the map when click event
597
- *
598
- */
599
- getCustomQueryUrl(datasource, options, mapExtent) {
600
- let url = datasource.options.queryUrl.replace(/\{xmin\}/g, mapExtent[0].toString())
601
- .replace(/\{ymin\}/g, mapExtent[1].toString())
602
- .replace(/\{xmax\}/g, mapExtent[2].toString())
603
- .replace(/\{ymax\}/g, mapExtent[3].toString())
604
- .replace(/\{x\}/g, options.coordinates[0].toString())
605
- .replace(/\{y\}/g, options.coordinates[1].toString())
606
- .replace(/\{resolution\}/g, options.resolution.toString())
607
- .replace(/\{srid\}/g, options.projection.replace('EPSG:', ''));
608
- return url;
609
- }
610
- }
611
- QueryService.ɵfac = function QueryService_Factory(t) { return new (t || QueryService)(i0.ɵɵinject(i1.HttpClient), i0.ɵɵinject(i2.MessageService), i0.ɵɵinject(i2.LanguageService)); };
612
- QueryService.ɵprov = /*@__PURE__*/ i0.ɵɵdefineInjectable({ token: QueryService, factory: QueryService.ɵfac, providedIn: 'root' });
613
- (function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(QueryService, [{
614
- type: Injectable,
615
- args: [{
616
- providedIn: 'root'
617
- }]
618
- }], function () { return [{ type: i1.HttpClient }, { type: i2.MessageService }, { type: i2.LanguageService }]; }, null); })();
619
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnkuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2dlby9zcmMvbGliL3F1ZXJ5L3NoYXJlZC9xdWVyeS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFM0MsT0FBTyxFQUFjLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN0QyxPQUFPLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRS9DLE9BQU8sS0FBSyxVQUFVLE1BQU0sV0FBVyxDQUFDO0FBRXhDLE9BQU8sS0FBSyxRQUFRLE1BQU0sV0FBVyxDQUFDO0FBQ3RDLE9BQU8sS0FBSyxRQUFRLE1BQU0sV0FBVyxDQUFDO0FBQ3RDLE9BQU8sWUFBWSxNQUFNLGdCQUFnQixDQUFDO0FBQzFDLE9BQU8sWUFBWSxNQUFNLGdCQUFnQixDQUFDO0FBQzFDLE9BQU8sZ0JBQWdCLE1BQU0sb0JBQW9CLENBQUM7QUFFbEQsT0FBTyxLQUFLLE1BQU0sTUFBTSxTQUFTLENBQUM7QUFHbEMsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUVuQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFFN0QsT0FBTyxFQUNMLGFBQWEsRUFDYixlQUFlLEVBQ2Ysd0JBQXdCLEVBRXhCLHlCQUF5QixFQUMxQixNQUFNLGtCQUFrQixDQUFDO0FBRTFCLE9BQU8sRUFDTCxXQUFXLEVBQ1gsbUJBQW1CLEVBQ25CLGVBQWUsRUFDaEIsTUFBTSxlQUFlLENBQUM7Ozs7QUFXdkIsTUFBTSxPQUFPLFlBQVk7SUFPdkIsWUFDVSxJQUFnQixFQUNoQixjQUE4QixFQUM5QixlQUFnQztRQUZoQyxTQUFJLEdBQUosSUFBSSxDQUFZO1FBQ2hCLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUM5QixvQkFBZSxH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Q0FBQztJQUNmLENBQUM7SUFFRDs7Ozs7T0FLRztJQUVILGlCQUFpQixDQUNmLFVBQStCLEVBQy9CLE9BQXFCLEVBQ3JCLFNBQXFCO1FBRW5CLElBQUksR0FBRyxHQUFHLFVBQVUsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDO2FBQ2xGLE9BQU8sQ0FBQyxXQUFXLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDO2FBQzdDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDO2FBQzdDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDO2FBQzdDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQzthQUNwRCxPQUFPLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUM7YUFDcEQsT0FBTyxDQUFDLGlCQUFpQixFQUFFLE9BQU8sQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFLENBQUM7YUFDekQsT0FBTyxDQUFDLFdBQVcsRUFBRSxPQUFPLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUU5RCxPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUM7O3dFQTl1QlEsWUFBWTtrRUFBWixZQUFZLFdBQVosWUFBWSxtQkFGWCxNQUFNO3VGQUVQLFlBQVk7Y0FIeEIsVUFBVTtlQUFDO2dCQUNWLFVBQVUsRUFBRSxNQUFNO2FBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IE9ic2VydmFibGUsIG9mIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBtYXAsIG1lcmdlTWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgKiBhcyBzdHJpcHRhZ3NfIGZyb20gJ3N0cmlwdGFncyc7XG5cbmltcG9ydCAqIGFzIG9sZm9ybWF0IGZyb20gJ29sL2Zvcm1hdCc7XG5pbXBvcnQgKiBhcyBvbGV4dGVudCBmcm9tICdvbC9leHRlbnQnO1xuaW1wb3J0IG9sRm9ybWF0R01MMiBmcm9tICdvbC9mb3JtYXQvR01MMic7XG5pbXBvcnQgb2xGb3JtYXRHTUwzIGZyb20gJ29sL2Zvcm1hdC9HTUwzJztcbmltcG9ydCBvbEZvcm1hdEVzcmlKU09OIGZyb20gJ29sL2Zvcm1hdC9Fc3JpSlNPTic7XG5pbXBvcnQgb2xGZWF0dXJlIGZyb20gJ29sL0ZlYXR1cmUnO1xuaW1wb3J0ICogYXMgb2xnZW9tIGZyb20gJ29sL2dlb20nO1xuXG5pbXBvcnQgeyBMYW5ndWFnZVNlcnZpY2UsIE1lc3NhZ2VTZXJ2aWNlIH0gZnJvbSAnQGlnbzIvY29yZSc7XG5pbXBvcnQgeyB1dWlkIH0gZnJvbSAnQGlnbzIvdXRpbHMnO1xuaW1wb3J0IHsgRmVhdHVyZSwgRmVhdHVyZUdlb21ldHJ5IH0gZnJvbSAnLi4vLi4vZmVhdHVyZS9zaGFyZWQvZmVhdHVyZS5pbnRlcmZhY2VzJztcbmltcG9ydCB7IEZFQVRVUkUgfSBmcm9tICcuLi8uLi9mZWF0dXJlL3NoYXJlZC9mZWF0dXJlLmVudW1zJztcbmltcG9ydCB7IExheWVyIH0gZnJvbSAnLi4vLi4vbGF5ZXIvc2hhcmVkL2xheWVycy9sYXllcic7XG5pbXBvcnQge1xuICBXTVNEYXRhU291cmNlLFxuICBDYXJ0b0RhdGFTb3VyY2UsXG4gIFRpbGVBcmNHSVNSZXN0RGF0YVNvdXJjZSxcbiAgV01TRGF0YVNvdXJjZU9wdGlvbnMsXG4gIEltYWdlQXJjR0lTUmVzdERhdGFTb3VyY2Vcbn0gZnJvbSAnLi4vLi4vZGF0YXNvdXJjZSc7XG5cbmltcG9ydCB7XG4gIFF1ZXJ5Rm9ybWF0LFxuICBRdWVyeUZvcm1hdE1pbWVUeXBlLFxuICBRdWVyeUh0bWxUYXJnZXRcbn0gZnJvbSAnLi9xdWVyeS5lbnVtcyc7XG5pbXBvcnQge1xuICBRdWVyeU9wdGlvbnMsXG4gIFF1ZXJ5YWJsZURhdGFTb3VyY2UsXG4gIFF1ZXJ5YWJsZURhdGFTb3VyY2VPcHRpb25zXG59IGZyb20gJy4vcXVlcnkuaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBNYXBFeHRlbnQgfSBmcm9tICcuLi8uLi9tYXAvc2hhcmVkL21hcC5pbnRlcmZhY2UnO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBRdWVyeVNlcnZpY2Uge1xuICBwdWJsaWMgcXVlcnlFbmFibGVkID0gdHJ1ZTtcbiAgcHVibGljIGRlZmF1bHRGZWF0dXJlQ291bnQgPSAyMDsgLy8gZGVmYXVsdCBmZWF0dXJlIGNvdW50XG4gIHB1YmxpYyBmZWF0dXJlQ291bnQgPSAyMDsgLy8gZmVhdHVyZSBjb3VudFxuXG4gIHByaXZhdGUgcHJldmlvdXNNZXNzYWdlSWRzID0gW107XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50LFxuICAgIHByaXZhdGUgbWVzc2FnZVNlcnZpY2U6IE1lc3NhZ2VTZXJ2aWNlLFxuICAgIHByaXZhdGUgbGFuZ3VhZ2VTZXJ2aWNlOiBMYW5ndWFnZVNlcnZpY2UpIHt9XG5cbiAgcXVlcnkobGF5ZXJzOiBMYXllcltdLCBvcHRpb25zOiBRdWVyeU9wdGlvbnMpOiBPYnNlcnZhYmxlPEZlYXR1cmVbXT5bXSB7XG4gICAgaWYgKHRoaXMucHJldmlvdXNNZXNzYWdlSWRzLmxlbmd0aCkge1xuICAgICAgdGhpcy5wcmV2aW91c01lc3NhZ2VJZHMuZm9yRWFjaChpZCA9PiB7XG4gICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UucmVtb3ZlKGlkKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gbGF5ZXJzXG4gICAgICAuZmlsdGVyKChsYXllcjogTGF5ZXIpID0+IGxheWVyLnZpc2libGUgJiYgbGF5ZXIuaXNJblJlc29sdXRpb25zUmFuZ2UpXG4gICAgICAubWFwKChsYXllcjogTGF5ZXIpID0+IHRoaXMucXVlcnlMYXllcihsYXllciwgb3B0aW9ucykpO1xuICB9XG5cbiAgcXVlcnlMYXllcihsYXllcjogTGF5ZXIsIG9wdGlvbnM6IFF1ZXJ5T3B0aW9ucyk6IE9ic2VydmFibGU8RmVhdHVyZVtdPiB7XG4gICAgY29uc3QgdXJsID0gdGhpcy5nZXRRdWVyeVVybChsYXllci5kYXRhU291cmNlLCBvcHRpb25zLCBmYWxzZSwgbGF5ZXIubWFwLnZpZXdDb250cm9sbGVyLmdldEV4dGVudCgpKTtcbiAgICBpZiAoIXVybCkge1xuICAgICAgcmV0dXJuIG9mKFtdKTtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICAobGF5ZXIuZGF0YVNvdXJjZSBhcyBRdWVyeWFibGVEYXRhU291cmNlKS5vcHRpb25zLnF1ZXJ5Rm9ybWF0ID09PVxuICAgICAgUXVlcnlGb3JtYXQuSFRNTEdNTDJcbiAgICApIHtcbiAgICAgIGNvbnN0IHVybEdtbCA9IHRoaXMuZ2V0UXVlcnlVcmwobGF5ZXIuZGF0YVNvdXJjZSwgb3B0aW9ucywgdHJ1ZSk7XG4gICAgICByZXR1cm4gdGhpcy5odHRwLmdldCh1cmxHbWwsIHsgcmVzcG9uc2VUeXBlOiAndGV4dCcgfSkucGlwZShcbiAgICAgICAgbWVyZ2VNYXAoZ21sUmVzID0+IHtcbiAgICAgICAgICBjb25zdCBtZXJnZWRHTUwgPSB0aGlzLm1lcmdlR01MKGdtbFJlcywgdXJsLCBsYXllcik7XG4gICAgICAgICAgY29uc3QgaW1wb3NlZEdlb20gPSBtZXJnZWRHTUxbMF07XG4gICAgICAgICAgY29uc3QgaW1wb3NlZFByb3BlcnRpZXMgPSBtZXJnZWRHTUxbMV07XG4gICAgICAgICAgcmV0dXJuIHRoaXMuaHR0cFxuICAgICAgICAgICAgLmdldCh1cmwsIHsgcmVzcG9uc2VUeXBlOiAndGV4dCcgfSlcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICBtYXAocmVzID0+XG4gICAgICAgICAgICAgICAgdGhpcy5leHRyYWN0RGF0YShyZXMsIGxheWVyLCBvcHRpb25zLCB1cmwsIGltcG9zZWRHZW9tLCBpbXBvc2VkUHJvcGVydGllcylcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3QgcmVxdWVzdCA9IHRoaXMuaHR0cC5nZXQodXJsLCB7IHJlc3BvbnNlVHlwZTogJ3RleHQnIH0pO1xuICAgIHJldHVybiByZXF1ZXN0LnBpcGUobWFwKHJlcyA9PiB0aGlzLmV4dHJhY3REYXRhKHJlcywgbGF5ZXIsIG9wdGlvbnMsIHVybCkpKTtcbiAgfVxuXG4gIHByaXZhdGUgbWVyZ2VHTUwoZ21sUmVzLCB1cmwsIGxheWVyOiBMYXllcik6IFtGZWF0dXJlR2VvbWV0cnksIHsgW2tleTogc3RyaW5nXTogYW55IH1dIHtcbiAgICBjb25zdCBwYXJzZXIgPSBuZXcgb2xGb3JtYXRHTUwyKCk7XG4gICAgbGV0IGZlYXR1cmVzID0gcGFyc2VyLnJlYWRGZWF0dXJlcyhnbWxSZXMpO1xuICAgIC8vIEhhbmRsZSBub24gc3RhbmRhcmQgR01MIG91dHB1dCAoTWFwU2VydmVyKVxuICAgIGlmIChmZWF0dXJlcy5sZW5ndGggPT09IDApIHtcbiAgICAgIGNvbnN0IHdtc1BhcnNlciA9IG5ldyBvbGZvcm1hdC5XTVNHZXRGZWF0dXJlSW5mbygpO1xuICAgICAgZmVhdHVyZXMgPSB3bXNQYXJzZXIucmVhZEZlYXR1cmVzKGdtbFJlcyk7XG4gICAgfVxuICAgIGNvbnN0IG9sbWxpbmUgPSBuZXcgb2xnZW9tLk11bHRpTGluZVN0cmluZyhbXSk7XG4gICAgbGV0IHB0cztcbiAgICBjb25zdCBwdHNBcnJheSA9IFtdO1xuICAgIGxldCBvbG1wb2x5ID0gbmV3IG9sZ2VvbS5NdWx0aVBvbHlnb24oW10pO1xuICAgIGxldCBmaXJzdEZlYXR1cmVUeXBlO1xuICAgIGNvbnN0IG5iRmVhdHVyZXMgPSBmZWF0dXJlcy5sZW5ndGg7XG5cbiAgICAvLyBDaGVjayBpZiBnZW9tZXRyeSBpbnRlcnNlY3QgYmJveFxuICAgIC8vIGZvciBnZW9zZXJ2ZXIgZ2V0ZmVhdHVyZWluZm8gcmVzcG9uc2UgaW4gZGF0YSBwcm9qZWN0aW9uLCBub3QgY2FsbCBwcm9qZWN0aW9uXG4gICAgY29uc3Qgc2VhcmNoUGFyYW1zOiBhbnkgPSB0aGlzLmdldFF1ZXJ5UGFyYW1zKHVybC50b0xvd2VyQ2FzZSgpKTtcbiAgICBjb25zdCBiYm94UmF3ID0gc2VhcmNoUGFyYW1zLmJib3g7XG4gICAgY29uc3QgYmJveCA9IGJib3hSYXcuc3BsaXQoJywnKTtcbiAgICBjb25zdCBiYm94RXh0ZW50ID0gb2xleHRlbnQuY3JlYXRlRW1wdHkoKTtcbiAgICBvbGV4dGVudC5leHRlbmQoYmJveEV4dGVudCwgYmJveCk7XG4gICAgY29uc3Qgb3V0QmJveEV4dGVudCA9IGZhbHNlO1xuICAgIGxldCB0aXRsZUNvbnRlbnQ7XG4gICAgbGV0IHF1ZXJ5VGlsZUZpZWxkO1xuICAgIGlmIChsYXllci5vcHRpb25zPy5zb3VyY2U/Lm9wdGlvbnMpIHtcbiAgICAgIGNvbnN0IGRhdGFTb3VyY2VPcHRpb25zID0gbGF5ZXIub3B0aW9ucy5zb3VyY2VcbiAgICAgICAgLm9wdGlvbnMgYXMgUXVlcnlhYmxlRGF0YVNvdXJjZU9wdGlvbnM7XG4gICAgICBpZiAoZGF0YVNvdXJjZU9wdGlvbnMucXVlcnlUaXRsZSkge1xuICAgICAgICBxdWVyeVRpbGVGaWVsZCA9IGRhdGFTb3VyY2VPcHRpb25zLnF1ZXJ5VGl0bGU7XG4gICAgICB9XG4gICAgfVxuICAgIGZlYXR1cmVzLm1hcChmZWF0dXJlID0+IHtcblxuICAgICAgaWYgKHF1ZXJ5VGlsZUZpZWxkKSB7XG4gICAgICAgIGxldCBxdWVyeVRpdGxlQ29udGVudCA9IGZlYXR1cmUuZ2V0UHJvcGVydGllcygpW3F1ZXJ5VGlsZUZpZWxkXTtcbiAgICAgICAgaWYgKHF1ZXJ5VGl0bGVDb250ZW50KSB7XG4gICAgICAgICAgdGl0bGVDb250ZW50ID0gIXRpdGxlQ29udGVudCA/IHF1ZXJ5VGl0bGVDb250ZW50IDogYCR7dGl0bGVDb250ZW50fSwke3F1ZXJ5VGl0bGVDb250ZW50fWA7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC8qICBpZiAoIWZlYXR1cmUuZ2V0R2VvbWV0cnkoKS5zaW1wbGlmeSgxMDApLmludGVyc2VjdHNFeHRlbnQoYmJveEV4dGVudCkpIHtcbiAgICAgICAgb3V0QmJveEV4dGVudCA9IHRydWU7XG4gICAgICAgIC8vIFRPRE86IENoZWNrIHRvIHByb2plY3QgdGhlIGdlb21ldHJ5P1xuICAgICAgfSovXG4gICAgICBjb25zdCBmZWF0dXJlR2VvbWV0cnlDb29yZGluYXRlcyA9IGZlYXR1cmUuZ2V0R2VvbWV0cnkoKS5nZXRDb29yZGluYXRlcygpO1xuICAgICAgY29uc3QgZmVhdHVyZUdlb21ldHJ5VHlwZSA9IGZlYXR1cmUuZ2V0R2VvbWV0cnkoKS5nZXRUeXBlKCk7XG5cbiAgICAgIGlmICghZmlyc3RGZWF0dXJlVHlwZSAmJiAhb3V0QmJveEV4dGVudCkge1xuICAgICAgICBmaXJzdEZlYXR1cmVUeXBlID0gZmVhdHVyZUdlb21ldHJ5VHlwZTtcbiAgICAgIH1cbiAgICAgIGlmICghb3V0QmJveEV4dGVudCkge1xuICAgICAgICBzd2l0Y2ggKGZlYXR1cmVHZW9tZXRyeVR5cGUpIHtcbiAgICAgICAgICBjYXNlICdQb2ludCc6XG4gICAgICAgICAgICBpZiAobmJGZWF0dXJlcyA9PT0gMSkge1xuICAgICAgICAgICAgICBwdHMgPSBuZXcgb2xnZW9tLlBvaW50KGZlYXR1cmVHZW9tZXRyeUNvb3JkaW5hdGVzLCAnWFknKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHB0c0FycmF5LnB1c2goZmVhdHVyZUdlb21ldHJ5Q29vcmRpbmF0ZXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAnTGluZVN0cmluZyc6XG4gICAgICAgICAgICBvbG1saW5lLmFwcGVuZExpbmVTdHJpbmcoXG4gICAgICAgICAgICAgIG5ldyBvbGdlb20uTGluZVN0cmluZyhmZWF0dXJlR2VvbWV0cnlDb29yZGluYXRlcywgJ1hZJylcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlICdQb2x5Z29uJzpcbiAgICAgICAgICAgIG9sbXBvbHkuYXBwZW5kUG9seWdvbihcbiAgICAgICAgICAgICAgbmV3IG9sZ2VvbS5Qb2x5Z29uKGZlYXR1cmVHZW9tZXRyeUNvb3JkaW5hdGVzLCAnWFknKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ011bHRpUG9seWdvbic6XG4gICAgICAgICAgICBvbG1wb2x5ID0gbmV3IG9sZ2VvbS5NdWx0aVBvbHlnb24oZmVhdHVyZUdlb21ldHJ5Q29vcmRpbmF0ZXMsICdYWScpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgbGV0IG9sbXB0cztcbiAgICBpZiAocHRzQXJyYXkubGVuZ3RoID09PSAwICYmIHB0cykge1xuICAgICAgb2xtcHRzID0ge1xuICAgICAgICB0eXBlOiBwdHMuZ2V0VHlwZSgpLFxuICAgICAgICBjb29yZGluYXRlczogcHRzLmdldENvb3JkaW5hdGVzKClcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIG9sbXB0cyA9IHtcbiAgICAgICAgdHlwZTogJ1BvbHlnb24nLFxuICAgICAgICBjb29yZGluYXRlczogW3RoaXMuY29udmV4SHVsbChwdHNBcnJheSldXG4gICAgICB9O1xuICAgIH1cblxuICAgIGxldCByZXR1cm5HZW9tZXRyeTtcbiAgICBzd2l0Y2ggKGZpcnN0RmVhdHVyZVR5cGUpIHtcbiAgICAgIGNhc2UgJ0xpbmVTdHJpbmcnOlxuICAgICAgICByZXR1cm5HZW9tZXRyeSA9IHtcbiAgICAgICAgICB0eXBlOiBvbG1saW5lLmdldFR5cGUoKSxcbiAgICAgICAgICBjb29yZGluYXRlczogb2xtbGluZS5nZXRDb29yZGluYXRlcygpXG4gICAgICAgIH07XG4gICAgICBjYXNlICdQb2ludCc6XG4gICAgICAgIHJldHVybkdlb21ldHJ5ID0gb2xtcHRzO1xuICAgICAgY2FzZSAnUG9seWdvbic6XG4gICAgICAgIHJldHVybkdlb21ldHJ5ID0ge1xuICAgICAgICAgIHR5cGU6IG9sbXBvbHkuZ2V0VHlwZSgpLFxuICAgICAgICAgIGNvb3JkaW5hdGVzOiBvbG1wb2x5LmdldENvb3JkaW5hdGVzKClcbiAgICAgICAgfTtcbiAgICAgIGNhc2UgJ011bHRpUG9seWdvbic6XG4gICAgICAgIHJldHVybkdlb21ldHJ5ID0ge1xuICAgICAgICAgIHR5cGU6IG9sbXBvbHkuZ2V0VHlwZSgpLFxuICAgICAgICAgIGNvb3JkaW5hdGVzOiBvbG1wb2x5LmdldENvb3JkaW5hdGVzKClcbiAgICAgICAgfTtcbiAgICB9XG4gICAgY29uc3QgaW1wb3NlZFByb3BlcnRpZXMgPSB7fTtcblxuICAgIGlmIChxdWVyeVRpbGVGaWVsZCkge1xuICAgICAgaW1wb3NlZFByb3BlcnRpZXNbcXVlcnlUaWxlRmllbGRdID0gdGl0bGVDb250ZW50O1xuICAgIH1cblxuICAgIHJldHVybiBbIHJldHVybkdlb21ldHJ5LCBpbXBvc2VkUHJvcGVydGllc107XG5cblxuICB9XG5cbiAgY3Jvc3MoYSwgYiwgbykge1xuICAgIHJldHVybiAoYVswXSAtIG9bMF0pICogKGJbMV0gLSBvWzFdKSAtIChhWzFdIC0gb1sxXSkgKiAoYlswXSAtIG9bMF0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSBwb2ludHMgQW4gYXJyYXkgb2YgW1gsIFldIGNvb3JkaW5hdGVzXG4gICAqIFRoaXMgbWV0aG9kIGlzIHVzZSBpbnN0ZWFkIG9mIHR1cmYuanMgY29udmV4SHVsbCBiZWNhdXNlIFR1cmYgbmVlZHMgYXQgbGVhc3QgMyBwb2ludCB0byBtYWtlIGEgaHVsbC5cbiAgICogaHR0cHM6Ly9lbi53aWtpYm9va3Mub3JnL3dpa2kvQWxnb3JpdGhtX0ltcGxlbWVudGF0aW9uL0dlb21ldHJ5L0NvbnZleF9odWxsL01vbm90b25lX2NoYWluI0phdmFTY3JpcHRcbiAgICovXG4gIGNvbnZleEh1bGwocG9pbnRzKSB7XG4gICAgcG9pbnRzLnNvcnQoKGEsIGIpID0+IHtcbiAgICAgIHJldHVybiBhWzBdID09PSBiWzBdID8gYVsxXSAtIGJbMV0gOiBhWzBdIC0gYlswXTtcbiAgICB9KTtcblxuICAgIGNvbnN0IGxvd2VyID0gW107XG4gICAgZm9yIChjb25zdCBwb2ludCBvZiBwb2ludHMpIHtcbiAgICAgIHdoaWxlIChcbiAgICAgICAgbG93ZXIubGVuZ3RoID49IDIgJiZcbiAgICAgICAgdGhpcy5jcm9zcyhsb3dlcltsb3dlci5sZW5ndGggLSAyXSwgbG93ZXJbbG93ZXIubGVuZ3RoIC0gMV0sIHBvaW50KSA8PSAwXG4gICAgICApIHtcbiAgICAgICAgbG93ZXIucG9wKCk7XG4gICAgICB9XG4gICAgICBsb3dlci5wdXNoKHBvaW50KTtcbiAgICB9XG5cbiAgICBjb25zdCB1cHBlciA9IFtdO1xuICAgIGZvciAobGV0IGkgPSBwb2ludHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIHdoaWxlIChcbiAgICAgICAgdXBwZXIubGVuZ3RoID49IDIgJiZcbiAgICAgICAgdGhpcy5jcm9zcyhcbiAgICAgICAgICB1cHBlclt1cHBlci5sZW5ndGggLSAyXSxcbiAgICAgICAgICB1cHBlclt1cHBlci5sZW5ndGggLSAxXSxcbiAgICAgICAgICBwb2ludHNbaV1cbiAgICAgICAgKSA8PSAwXG4gICAgICApIHtcbiAgICAgICAgdXBwZXIucG9wKCk7XG4gICAgICB9XG4gICAgICB1cHBlci5wdXNoKHBvaW50c1tpXSk7XG4gICAgfVxuXG4gICAgdXBwZXIucG9wKCk7XG4gICAgbG93ZXIucG9wKCk7XG4gICAgcmV0dXJuIGxvd2VyLmNvbmNhdCh1cHBlcik7XG4gIH1cblxuICBwcml2YXRlIGV4dHJhY3REYXRhKFxuICAgIHJlcyxcbiAgICBsYXllcjogTGF5ZXIsXG4gICAgb3B0aW9uczogUXVlcnlPcHRpb25zLFxuICAgIHVybDogc3RyaW5nLFxuICAgIGltcG9zZWRHZW9tZXRyeT8sXG4gICAgaW1wb3NlZFByb3BlcnRpZXM/OiB7IFtrZXk6IHN0cmluZ106IGFueSB9XG4gICk6IEZlYXR1cmVbXSB7XG4gICAgY29uc3QgcXVlcnlEYXRhU291cmNlID0gbGF5ZXIuZGF0YVNvdXJjZSBhcyBRdWVyeWFibGVEYXRhU291cmNlO1xuXG4gICAgY29uc3QgYWxsb3dlZEZpZWxkc0FuZEFsaWFzID0gdGhpcy5nZXRBbGxvd2VkRmllbGRzQW5kQWxpYXMobGF5ZXIpO1xuICAgIGxldCBmZWF0dXJlcyA9IFtdO1xuICAgIHN3aXRjaCAocXVlcnlEYXRhU291cmNlLm9wdGlvbnMucXVlcnlGb3JtYXQpIHtcbiAgICAgIGNhc2UgUXVlcnlGb3JtYXQuR01MMzpcbiAgICAgICAgZmVhdHVyZXMgPSB0aGlzLmV4dHJhY3RHTUwzRGF0YShcbiAgICAgICAgICByZXMsXG4gICAgICAgICAgbGF5ZXIuekluZGV4LFxuICAgICAgICAgIGFsbG93ZWRGaWVsZHNBbmRBbGlhc1xuICAgICAgICApO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgUXVlcnlGb3JtYXQuSlNPTjpcbiAgICAgIGNhc2UgUXVlcnlGb3JtYXQuR0VPSlNPTjpcbiAgICAgIGNhc2UgUXVlcnlGb3JtYXQuR0VPSlNPTjI6XG4gICAgICAgIGZlYXR1cmVzID0gdGhpcy5leHRyYWN0R2VvSlNPTkRhdGEocmVzLCBsYXllci56SW5kZXgsIGFsbG93ZWRGaWVsZHNBbmRBbGlhcyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBRdWVyeUZvcm1hdC5FU1JJSlNPTjpcbiAgICAgICAgZmVhdHVyZXMgPSB0aGlzLmV4dHJhY3RFc3JpSlNPTkRhdGEocmVzLCBsYXllci56SW5kZXgsIGFsbG93ZWRGaWVsZHNBbmRBbGlhcyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBRdWVyeUZvcm1hdC5URVhUOlxuICAgICAgICBmZWF0dXJlcyA9IHRoaXMuZXh0cmFjdFRleHREYXRhKHJlcyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBRdWVyeUZvcm1hdC5IVE1MOlxuICAgICAgICBmZWF0dXJlcyA9IHRoaXMuZXh0cmFjdEh0bWxEYXRhKFxuICAgICAgICAgIHJlcyxcbiAgICAgICAgICBxdWVyeURhdGFTb3VyY2UucXVlcnlIdG1sVGFyZ2V0LFxuICAgICAgICAgIHVybFxuICAgICAgICApO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgUXVlcnlGb3JtYXQuSFRNTEdNTDI6XG4gICAgICAgIGZlYXR1cmVzID0gdGhpcy5leHRyYWN0SHRtbERhdGEoXG4gICAgICAgICAgcmVzLFxuICAgICAgICAgIHF1ZXJ5RGF0YVNvdXJjZS5xdWVyeUh0bWxUYXJnZXQsXG4gICAgICAgICAgdXJsLFxuICAgICAgICAgIGltcG9zZWRHZW9tZXRyeSxcbiAgICAgICAgICBpbXBvc2VkUHJvcGVydGllc1xuICAgICAgICApO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgUXVlcnlGb3JtYXQuR01MMjpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGZlYXR1cmVzID0gdGhpcy5leHRyYWN0R01MMkRhdGEocmVzLCBsYXllciwgYWxsb3dlZEZpZWxkc0FuZEFsaWFzKTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgaWYgKGZlYXR1cmVzLmxlbmd0aCA+IDAgJiYgZmVhdHVyZXNbMF0uZ2VvbWV0cnkgPT09IG51bGwpIHtcbiAgICAgIGNvbnN0IGdlb21Ub0FkZCA9IHRoaXMuY3JlYXRlR2VvbWV0cnlGcm9tVXJsQ2xpY2sodXJsKTtcblxuICAgICAgZm9yIChjb25zdCBmZWF0dXJlIG9mIGZlYXR1cmVzKSB7XG4gICAgICAgIGZlYXR1cmUuZ2VvbWV0cnkgPSBnZW9tVG9BZGQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3Qgd21zRGF0YXNvdXJjZSA9IGxheWVyLmRhdGFTb3VyY2UgYXMgV01TRGF0YVNvdXJjZTtcbiAgICBjb25zdCBmZWF0dXJlQ291bnQgPSB3bXNEYXRhc291cmNlLnBhcmFtcz8uRkVBVFVSRV9DT1VOVCA/XG4gICAgICBuZXcgUmVnRXhwKCdGRUFUVVJFX0NPVU5UPScgKyB0aGlzLmZlYXR1cmVDb3VudCkgOlxuICAgICAgbmV3IFJlZ0V4cCgnRkVBVFVSRV9DT1VOVD0nICsgdGhpcy5kZWZhdWx0RmVhdHVyZUNvdW50KTtcblxuICAgIGlmIChcbiAgICAgIGZlYXR1cmVDb3VudC50ZXN0KHVybCkgJiZcbiAgICAgICgod21zRGF0YXNvdXJjZS5wYXJhbXM/LkZFQVRVUkVfQ09VTlQgJiYgZmVhdHVyZXMubGVuZ3RoID09PSB0aGlzLmZlYXR1cmVDb3VudCkgfHxcbiAgICAgICghd21zRGF0YXNvdXJjZS5wYXJhbXM/LkZFQVRVUkVfQ09VTlQgJiYgZmVhdHVyZXMubGVuZ3RoID09PSB0aGlzLmRlZmF1bHRGZWF0dXJlQ291bnQpKSkge1xuICAgICAgdGhpcy5sYW5ndWFnZVNlcnZpY2UudHJhbnNsYXRlLmdldCgnaWdvLmdlby5xdWVyeS5mZWF0dXJlQ291bnRNYXgnLCB7dmFsdWU6IGxheWVyLnRpdGxlfSkuc3Vic2NyaWJlKG1lc3NhZ2UgPT4ge1xuICAgICAgICBjb25zdCBtZXNzYWdlT2JqID0gdGhpcy5tZXNzYWdlU2VydmljZS5pbmZvKG1lc3NhZ2UpO1xuICAgICAgICB0aGlzLnByZXZpb3VzTWVzc2FnZUlkcy5wdXNoKG1lc3NhZ2VPYmoudG9hc3RJZCk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmVhdHVyZXMubWFwKChmZWF0dXJlOiBGZWF0dXJlLCBpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICBjb25zdCBtYXBMYWJlbCA9IGZlYXR1cmUucHJvcGVydGllc1txdWVyeURhdGFTb3VyY2UubWFwTGFiZWxdO1xuXG4gICAgICBsZXQgZXhjbHVkZTtcbiAgICAgIGlmIChsYXllci5vcHRpb25zLnNvdXJjZU9wdGlvbnM/LnR5cGUgPT09ICd3bXMnKSB7XG4gICAgICAgIGNvbnN0IHNvdXJjZU9wdGlvbnMgPSBsYXllci5vcHRpb25zXG4gICAgICAgICAgLnNvdXJjZU9wdGlvbnMgYXMgV01TRGF0YVNvdXJjZU9wdGlvbnM7XG4gICAgICAgIGV4Y2x1ZGUgPSBzb3VyY2VPcHRpb25zID8gc291cmNlT3B0aW9ucy5leGNsdWRlQXR0cmlidXRlIDogdW5kZWZpbmVkO1xuICAgICAgfVxuXG4gICAgICBsZXQgdGl0bGUgPSB0aGlzLmdldFF1ZXJ5VGl0bGUoZmVhdHVyZSwgbGF5ZXIpO1xuICAgICAgaWYgKCF0aXRsZSAmJiBmZWF0dXJlcy5sZW5ndGggPiAxKSB7XG4gICAgICAgIHRpdGxlID0gYCR7bGF5ZXIudGl0bGV9ICgke2luZGV4ICsgMX0pYDtcbiAgICAgIH0gZWxzZSBpZiAoIXRpdGxlKSB7XG4gICAgICAgIHRpdGxlID0gbGF5ZXIudGl0bGU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG1ldGEgPSBPYmplY3QuYXNzaWduKHt9LCBmZWF0dXJlLm1ldGEgfHwge30sIHtcbiAgICAgICAgaWQ6IHV1aWQoKSxcbiAgICAgICAgdGl0bGUsXG4gICAgICAgIG1hcFRpdGxlOiBtYXBMYWJlbCxcbiAgICAgICAgc291cmNlVGl0bGU6IGxheWVyLnRpdGxlLFxuICAgICAgICBvcmRlcjogMTAwMCAtIGxheWVyLnpJbmRleCxcbiAgICAgICAgZXhjbHVkZUF0dHJpYnV0ZTogZXhjbHVkZVxuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKGZlYXR1cmUsIHtcbiAgICAgICAgbWV0YSxcbiAgICAgICAgcHJvamVjdGlvbjpcbiAgICAgICAgICBxdWVyeURhdGFTb3VyY2Uub3B0aW9ucy50eXBlID09PSAnY2FydG8nXG4gICAgICAgICAgICA/ICdFUFNHOjQzMjYnXG4gICAgICAgICAgICA6IG9wdGlvbnMucHJvamVjdGlvblxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZUdlb21ldHJ5RnJvbVVybENsaWNrKHVybCkge1xuICAgIGNvbnN0IHNlYXJjaFBhcmFtczogYW55ID0gdGhpcy5nZXRRdWVyeVBhcmFtcyh1cmwudG9Mb3dlckNhc2UoKSk7XG4gICAgY29uc3QgYmJveFJhdyA9IHNlYXJjaFBhcmFtcy5iYm94O1xuICAgIGNvbnN0IHdpZHRoID0gcGFyc2VJbnQoc2VhcmNoUGFyYW1zLndpZHRoLCAxMCk7XG4gICAgY29uc3QgaGVpZ2h0ID0gcGFyc2VJbnQoc2VhcmNoUGFyYW1zLmhlaWdodCwgMTApO1xuICAgIGNvbnN0IHhQb3NpdGlvbiA9IHBhcnNlSW50KHNlYXJjaFBhcmFtcy5pIHx8IHNlYXJjaFBhcmFtcy54LCAxMCk7XG4gICAgY29uc3QgeVBvc2l0aW9uID0gcGFyc2VJbnQoc2VhcmNoUGFyYW1zLmogfHwgc2VhcmNoUGFyYW1zLnksIDEwKTtcblxuICAgIGNvbnN0IGJib3ggPSBiYm94UmF3LnNwbGl0KCcsJyk7XG4gICAgbGV0IHRocmVzaG9sZCA9XG4gICAgICAoTWF0aC5hYnMocGFyc2VGbG9hdChiYm94WzBdKSkgLSBNYXRoLmFicyhwYXJzZUZsb2F0KGJib3hbMl0pKSkgKiAwLjA1O1xuXG4gICAgLy8gZm9yIGNvbnRleHQgaW4gZGVncmVlIChFUFNHOjQzMjYsNDI2OS4uLilcbiAgICBpZiAoTWF0aC5hYnMocGFyc2VGbG9hdChiYm94WzBdKSkgPCAxODApIHtcbiAgICAgIHRocmVzaG9sZCA9IDAuMDQ1O1xuICAgIH1cbiAgICBjb25zdCBjbGlja3ggPVxuICAgICAgcGFyc2VGbG9hdChiYm94WzBdKSArXG4gICAgICAoTWF0aC5hYnMocGFyc2VGbG9hdChiYm94WzBdKSAtIHBhcnNlRmxvYXQoYmJveFsyXSkpICogeFBvc2l0aW9uKSAvXG4gICAgICAgIHdpZHRoIC1cbiAgICAgIHRocmVzaG9sZDtcbiAgICBjb25zdCBjbGlja3kgPVxuICAgICAgcGFyc2VGbG9hdChiYm94WzFdKSArXG4gICAgICAoTWF0aC5hYnMocGFyc2VGbG9hdChiYm94WzFdKSAtIHBhcnNlRmxvYXQoYmJveFszXSkpICogeVBvc2l0aW9uKSAvXG4gICAgICAgIGhlaWdodCAtXG4gICAgICB0aHJlc2hvbGQ7XG4gICAgY29uc3QgY2xpY2t4MSA9IGNsaWNreCArIHRocmVzaG9sZCAqIDI7XG4gICAgY29uc3QgY2xpY2t5MSA9IGNsaWNreSArIHRocmVzaG9sZCAqIDI7XG5cbiAgICBjb25zdCB3a3RQb2x5ID1cbiAgICAgICdQT0xZR09OKCgnICtcbiAgICAgIGNsaWNreCArXG4gICAgICAnICcgK1xuICAgICAgY2xpY2t5ICtcbiAgICAgICcsICcgK1xuICAgICAgY2xpY2t4ICtcbiAgICAgICcgJyArXG4gICAgICBjbGlja3kxICtcbiAgICAgICcsICcgK1xuICAgICAgY2xpY2t4MSArXG4gICAgICAnICcgK1xuICAgICAgY2xpY2t5MSArXG4gICAgICAnLCAnICtcbiAgICAgIGNsaWNreDEgK1xuICAgICAgJyAnICtcbiAgICAgIGNsaWNreSArXG4gICAgICAnLCAnICtcbiAgICAgIGNsaWNreCArXG4gICAgICAnICcgK1xuICAgICAgY2xpY2t5ICtcbiAgICAgICcpKSc7XG5cbiAgICBjb25zdCBmb3JtYXQgPSBuZXcgb2xmb3JtYXQuV0tUKCk7XG4gICAgY29uc3QgdGVuUGVyY2VudFdpZHRoR2VvbSA9IGZvcm1hdC5yZWFkRmVhdHVyZSh3a3RQb2x5KTtcbiAgICBjb25zdCBmID0gdGVuUGVyY2VudFdpZHRoR2VvbS5nZXRHZW9tZXRyeSgpIGFzIGFueTtcblxuICAgIGNvbnN0IG5ld0dlb20gPSB7XG4gICAgICB0eXBlOiBmLmdldFR5cGUoKSxcbiAgICAgIGNvb3JkaW5hdGVzOiBmLmdldENvb3JkaW5hdGVzKClcbiAgICB9O1xuXG4gICAgcmV0dXJuIG5ld0dlb207XG4gIH1cblxuICBwcml2YXRlIGV4dHJhY3RHTUwyRGF0YShyZXMsIHpJbmRleCwgYWxsb3dlZEZpZWxkc0FuZEFsaWFzPykge1xuICAgIGNvbnN0IHBhcnNlciA9IG5ldyBvbEZvcm1hdEdNTDIoKTtcbiAgICBsZXQgZmVhdHVyZXMgPSBwYXJzZXIucmVhZEZlYXR1cmVzKHJlcyk7XG4gICAgLy8gSGFuZGxlIG5vbiBzdGFuZGFyZCBHTUwgb3V0cHV0IChNYXBTZXJ2ZXIpXG4gICAgaWYgKGZlYXR1cmVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgY29uc3Qgd21zUGFyc2VyID0gbmV3IG9sZm9ybWF0LldNU0dldEZlYXR1cmVJbmZvKCk7XG4gICAgICB0cnkge1xuICAgICAgICBmZWF0dXJlcyA9IHdtc1BhcnNlci5yZWFkRmVhdHVyZXMocmVzKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgICdxdWVyeS5zZXJ2aWNlOiBNdWx0aXBvbHlnb25zIGFyZSBiYWRseSBtYW5hZ2VkIGluIG1hcHNlcnZlciBpbiBHTUwyLiBVc2UgYW5vdGhlciBmb3JtYXQuJ1xuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmZWF0dXJlcy5tYXAoZmVhdHVyZSA9PlxuICAgICAgdGhpcy5mZWF0dXJlVG9SZXN1bHQoZmVhdHVyZSwgekluZGV4LCBhbGxvd2VkRmllbGRzQW5kQWxpYXMpXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgZXh0cmFjdEdNTDNEYXRhKHJlcywgekluZGV4LCBhbGxvd2VkRmllbGRzQW5kQWxpYXM/KSB7XG4gICAgY29uc3QgcGFyc2VyID0gbmV3IG9sRm9ybWF0R01MMygpO1xuICAgIGxldCBmZWF0dXJlcyA9IFtdO1xuICAgIHRyeSB7XG4gICAgICBmZWF0dXJlcyA9IHBhcnNlci5yZWFkRmVhdHVyZXMocmVzKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ3F1ZXJ5LnNlcnZpY2U6IEdNTDMgaXMgbm90IHdlbGwgc3VwcG9ydGVkJyk7XG4gICAgfVxuICAgIHJldHVybiBmZWF0dXJlcy5tYXAoZmVhdHVyZSA9PlxuICAgICAgdGhpcy5mZWF0dXJlVG9SZXN1bHQoZmVhdHVyZSwgekluZGV4LCBhbGxvd2VkRmllbGRzQW5kQWxpYXMpXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgZXh0cmFjdEdlb0pTT05EYXRhKHJlcywgekluZGV4LCBhbGxvd2VkRmllbGRzQW5kQWxpYXM/KSB7XG4gICAgbGV0IGZlYXR1cmVzID0gW107XG4gICAgdHJ5IHtcbiAgICAgIGZlYXR1cmVzID0gSlNPTi5wYXJzZShyZXMucmVwbGFjZSgvKFxccnxcXG4pL2csICcgJykpLmZlYXR1cmVzO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGNvbnNvbGUud2FybigncXVlcnkuc2VydmljZTogVW5hYmxlIHRvIHBhcnNlIGdlb2pzb24nLCAnXFxuJywgcmVzKTtcbiAgICB9XG4gICAgZmVhdHVyZXMubWFwKGZlYXR1cmUgPT4gZmVhdHVyZS5tZXRhID0ge1xuICAgICAgaWQ6IHV1aWQoKSxcbiAgICAgIG9yZGVyOiAxMDAwIC0gekluZGV4LFxuICAgICAgYWxpYXM6IGFsbG93ZWRGaWVsZHNBbmRBbGlhc1xuICAgIH0pO1xuICAgIHJldHVybiBmZWF0dXJlcztcbiAgfVxuXG4gIHByaXZhdGUgZXh0cmFjdEVzcmlKU09ORGF0YShyZXMsIHpJbmRleCwgYWxsb3dlZEZpZWxkc0FuZEFsaWFzKSB7XG4gICAgaWYgKHJlcykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKEpTT04ucGFyc2UocmVzKS5lcnJvcikge1xuICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZSkge31cbiAgICB9XG4gICAgY29uc3QgcGFyc2VyID0gbmV3IG9sRm9ybWF0RXNyaUpTT04oKTtcbiAgICBjb25zdCBmZWF0dXJlcyA9IHBhcnNlci5yZWFkRmVhdHVyZXMocmVzKTtcblxuICAgIHJldHVybiBmZWF0dXJlcy5tYXAoZmVhdHVyZSA9PiB0aGlzLmZlYXR1cmVUb1Jlc3VsdChmZWF0dXJlLCB6SW5kZXgsIGFsbG93ZWRGaWVsZHNBbmRBbGlhcykpO1xuICB9XG5cbiAgcHJpdmF0ZSBleHRyYWN0VGV4dERhdGEocmVzKSB7XG4gICAgLy8gVE9ET1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIHByaXZhdGUgZXh0cmFjdEh0bWxEYXRhKFxuICAgIHJlcyxcbiAgICBodG1sVGFyZ2V0OiBRdWVyeUh0bWxUYXJnZXQsXG4gICAgdXJsLFxuICAgIGltcG9zZWRHZW9tZXRyeT8sXG4gICAgaW1wb3NlZFByb3BlcnRpZXM/OiB7IFtrZXk6IHN0cmluZ106IGFueSB9XG4gICkge1xuICAgIGNvbnN0IHNlYXJjaFBhcmFtczogYW55ID0gdGhpcy5nZXRRdWVyeVBhcmFtcyh1cmwudG9Mb3dlckNhc2UoKSk7XG4gICAgY29uc3QgcHJvamVjdGlvbiA9IHNlYXJjaFBhcmFtcy5jcnMgfHwgc2VhcmNoUGFyYW1zLnNycyB8fCAnRVBTRzozODU3JztcbiAgICBjb25zdCBnZW9tVG9BZGQgPSB0aGlzLmNyZWF0ZUdlb21ldHJ5RnJvbVVybENsaWNrKHVybCk7XG5cbiAgICBpZiAoXG4gICAgICBodG1sVGFyZ2V0ICE9PSBRdWVyeUh0bWxUYXJnZXQuQkxBTksgJiZcbiAgICAgIGh0bWxUYXJnZXQgIT09IFF1ZXJ5SHRtbFRhcmdldC5JRlJBTUVcbiAgICApIHtcbiAgICAgIGh0bWxUYXJnZXQgPSBRdWVyeUh0bWxUYXJnZXQuSUZSQU1FO1xuICAgIH1cblxuICAgIGNvbnN0IGJvZHlUYWdTdGFydCA9IHJlcy50b0xvd2VyQ2FzZSgpLmluZGV4T2YoJzxib2R5PicpO1xuICAgIGNvbnN0IGJvZHlUYWdFbmQgPSByZXMudG9Mb3dlckNhc2UoKS5sYXN0SW5kZXhPZignPC9ib2R5PicpICsgNztcbiAgICAvLyByZXBsYWNlIFxcciBcXG4gIGFuZCAnICcgd2l0aCAnJyB0byB2YWxpZGF0ZSBpZiB0aGUgYm9keSBpcyByZWFsbHkgZW1wdHkuIENsZWFyIGFsbCB0aGUgaHRtbCB0YWdzIGZyb20gYm9keVxuICAgIGNvbnN0IHN0cmlwdGFncyA9IHN0cmlwdGFnc187XG4gICAgY29uc3QgYm9keSA9IHN0cmlwdGFncyhyZXMuc2xpY2UoYm9keVRhZ1N0YXJ0LCBib2R5VGFnRW5kKS5yZXBsYWNlKC8oXFxyfFxcbnxcXHMpL2csICcnKSk7XG4gICAgaWYgKGJvZHkgPT09ICcnIHx8IHJlcyA9PT0gJycpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICByZXR1cm4gW1xuICAgICAge1xuICAgICAgICB0eXBlOiBGRUFUVVJFLFxuICAgICAgICBwcm9qZWN0aW9uLFxuICAgICAgICBwcm9wZXJ0aWVzOiBPYmplY3QuYXNzaWduKHsgdGFyZ2V0OiBodG1sVGFyZ2V0LCBib2R5OiByZXMsIHVybCB9LCBpbXBvc2VkUHJvcGVydGllcyksXG4gICAgICAgIGdlb21ldHJ5OiBpbXBvc2VkR2VvbWV0cnkgfHwgZ2VvbVRvQWRkXG4gICAgICB9XG4gICAgXTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0UXVlcnlQYXJhbXModXJsKSB7XG4gICAgY29uc3QgcXVlcnlTdHJpbmcgPSB1cmwuc3BsaXQoJz8nKTtcbiAgICBpZiAoIXF1ZXJ5U3RyaW5nWzFdKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHBhaXJzID0gcXVlcnlTdHJpbmdbMV0uc3BsaXQoJyYnKTtcblxuICAgIGNvbnN0IHJlc3VsdCA9IHt9O1xuICAgIHBhaXJzLmZvckVhY2gocGFpciA9PiB7XG4gICAgICBwYWlyID0gcGFpci5zcGxpdCgnPScpO1xuICAgICAgcmVzdWx0W3BhaXJbMF1dID0gZGVjb2RlVVJJQ29tcG9uZW50KHBhaXJbMV0gfHwgJycpO1xuICAgIH0pO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBwdWJsaWMgZmVhdHVyZVRvUmVzdWx0KFxuICAgIGZlYXR1cmVPTDogb2xGZWF0dXJlPG9sZ2VvbS5HZW9tZXRyeT4sXG4gICAgekluZGV4OiBudW1iZXIsXG4gICAgYWxsb3dlZEZpZWxkc0FuZEFsaWFzP1xuICApOiBGZWF0dXJlIHtcbiAgICBjb25zdCBmZWF0dXJlR2VvbWV0cnkgPSBmZWF0dXJlT0wuZ2V0R2VvbWV0cnkoKSBhcyBhbnk7XG4gICAgY29uc3QgcHJvcGVydGllczogYW55ID0gT2JqZWN0LmFzc2lnbih7fSwgZmVhdHVyZU9MLmdldFByb3BlcnRpZXMoKSk7XG4gICAgZGVsZXRlIHByb3BlcnRpZXMuZ2VvbWV0cnk7XG4gICAgZGVsZXRlIHByb3BlcnRpZXMuR0VPTUVUUklFO1xuICAgIGRlbGV0ZSBwcm9wZXJ0aWVzLmJvdW5kZWRCeTtcbiAgICBkZWxldGUgcHJvcGVydGllcy5zaGFwZTtcbiAgICBkZWxldGUgcHJvcGVydGllcy5TSEFQRTtcbiAgICBkZWxldGUgcHJvcGVydGllcy50aGVfZ2VvbTtcbiAgICBkZWxldGUgcHJvcGVydGllcy5nZW9tO1xuXG4gICAgbGV0IGdlb21ldHJ5O1xuICAgIGlmIChmZWF0dXJlR2VvbWV0cnkpIHtcbiAgICAgIGdlb21ldHJ5ID0ge1xuICAgICAgICB0eXBlOiBmZWF0dXJlR2VvbWV0cnkuZ2V0VHlwZSgpLFxuICAgICAgICBjb29yZGluYXRlczogZmVhdHVyZUdlb21ldHJ5LmdldENvb3JkaW5hdGVzKClcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IEZFQVRVUkUsXG4gICAgICBwcm9qZWN0aW9uOiB1bmRlZmluZWQsXG4gICAgICBwcm9wZXJ0aWVzLFxuICAgICAgZ2VvbWV0cnksXG4gICAgICBtZXRhOiB7XG4gICAgICAgIGlkOiB1dWlkKCksXG4gICAgICAgIG9yZGVyOiAxMDAwIC0gekluZGV4LFxuICAgICAgICBhbGlhczogYWxsb3dlZEZpZWxkc0FuZEFsaWFzXG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0UXVlcnlVcmwoXG4gICAgZGF0YXNvdXJjZTogUXVlcnlhYmxlRGF0YVNvdXJjZSxcbiAgICBvcHRpb25zOiBRdWVyeU9wdGlvbnMsXG4gICAgZm9yY2VHTUwyID0gZmFsc2UsXG4gICAgbWFwRXh0ZW50PzogTWFwRXh0ZW50XG4gICk6IHN0cmluZyB7XG4gICAgbGV0IHVybDtcblxuICAgIGlmIChkYXRhc291cmNlLm9wdGlvbnMucXVlcnlVcmwpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldEN1c3RvbVF1ZXJ5VXJsKGRhdGFzb3VyY2UsIG9wdGlvbnMsIG1hcEV4dGVudCk7XG4gICAgfVxuXG4gICAgc3dpdGNoIChkYXRhc291cmNlLmNvbnN0cnVjdG9yKSB7XG4gICAgICBjYXNlIFdNU0RhdGFTb3VyY2U6XG4gICAgICAgIGNvbnN0IHdtc0RhdGFzb3VyY2UgPSBkYXRhc291cmNlIGFzIFdNU0RhdGFTb3VyY2U7XG5cbiAgICAgICAgY29uc3QgV01TR2V0RmVhdHVyZUluZm9PcHRpb25zID0ge1xuICAgICAgICAgIElORk9fRk9STUFUOlxuICAgICAgICAgICAgd21zRGF0YXNvdXJjZS5wYXJhbXMuSU5GT19GT1JNQVQgfHxcbiAgICAgICAgICAgIHRoaXMuZ2V0TWltZUluZm9Gb3JtYXQoZGF0YXNvdXJjZS5vcHRpb25zLnF1ZXJ5Rm9ybWF0KSxcbiAgICAgICAgICBRVUVSWV9MQVlFUlM6IHdtc0RhdGFzb3VyY2UucGFyYW1zLkxBWUVSUyxcbiAgICAgICAgICBGRUFUVVJFX0NPVU5UOiB3bXNEYXRhc291cmNlLnBhcmFtcy5GRUFUVVJFX0NPVU5UIHx8IHRoaXMuZGVmYXVsdEZlYXR1cmVDb3VudFxuICAgICAgICB9O1xuXG4gICAgICAgIGlmICh3bXNEYXRhc291cmNlLnBhcmFtcy5GRUFUVVJFX0NPVU5UKSB7XG4gICAgICAgICAgdGhpcy5mZWF0dXJlQ291bnQgPSB3bXNEYXRhc291cmNlLnBhcmFtcy5GRUFUVVJFX0NPVU5UO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGZvcmNlR01MMikge1xuICAgICAgICAgIFdNU0dldEZlYXR1cmVJbmZvT3B0aW9ucy5JTkZPX0ZPUk1BVCA9IHRoaXMuZ2V0TWltZUluZm9Gb3JtYXQoXG4gICAgICAgICAgICBRdWVyeUZvcm1hdC5HTUwyXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHVybCA9IHdtc0RhdGFzb3VyY2Uub2wuZ2V0RmVhdHVyZUluZm9VcmwoXG4gICAgICAgICAgb3B0aW9ucy5jb29yZGluYXRlcyxcbiAgICAgICAgICBvcHRpb25zLnJlc29sdXRpb24sXG4gICAgICAgICAgb3B0aW9ucy5wcm9qZWN0aW9uLFxuICAgICAgICAgIFdNU0dldEZlYXR1cmVJbmZvT3B0aW9uc1xuICAgICAgICApO1xuICAgICAgICAvLyBjb25zdCB3bXNWZXJzaW9uID1cbiAgICAgICAgLy8gICB3bXNEYXRhc291cmNlLnBhcmFtcy5WRVJTSU9OIHx8XG4gICAgICAgIC8vICAgd21zRGF0YXNvdXJjZS5wYXJhbXMudmVyc2lvbiB8fFxuICAgICAgICAvLyAgICcxLjMuMCc7XG4gICAgICAgIC8vIGlmICh3bXNWZXJzaW9uICE9PSAnMS4zLjAnKSB7XG4gICAgICAgIC8vICAgdXJsID0gdXJsLnJlcGxhY2UoJyZJPScsICcmWD0nKTtcbiAgICAgICAgLy8gICB1cmwgPSB1cmwucmVwbGFjZSgnJko9JywgJyZZPScpO1xuICAgICAgICAvLyB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBDYXJ0b0RhdGFTb3VyY2U6XG4gICAgICAgIGNvbnN0IGNhcnRvRGF0YXNvdXJjZSA9IGRhdGFzb3VyY2UgYXMgQ2FydG9EYXRhU291cmNlO1xuICAgICAgICBjb25zdCBiYXNlVXJsID1cbiAgICAgICAgICAnaHR0cHM6Ly8nICtcbiAgICAgICAgICBjYXJ0b0RhdGFzb3VyY2Uub3B0aW9ucy5hY2NvdW50ICtcbiAgICAgICAgICAnLmNhcnRvLmNvbS9hcGkvdjIvc3FsPyc7XG4gICAgICAgIGNvbnN0IGZvcm1hdCA9ICdmb3JtYXQ9R2VvSlNPTic7XG4gICAgICAgIGNvbnN0IHNxbCA9XG4gICAgICAgICAgJyZxPScgKyBjYXJ0b0RhdGFzb3VyY2Uub3B0aW9ucy5jb25maWcubGF5ZXJzWzBdLm9wdGlvbnMuc3FsO1xuICAgICAgICBjb25zdCBjbGF1c2UgPVxuICAgICAgICAgICcgV0hFUkUgU1RfSW50ZXJzZWN0cyh0aGVfZ2VvbV93ZWJtZXJjYXRvcixTVF9CVUZGRVIoU1RfU2V0U1JJRChTVF9QT0lOVCgnO1xuICAgICAgICBjb25zdCBtZXRlcnMgPSBjYXJ0b0RhdGFzb3VyY2Uub3B0aW9ucy5xdWVyeVByZWNpc2lvblxuICAgICAgICAgID8gY2FydG9EYXRhc291cmNlLm9wdGlvbnMucXVlcnlQcmVjaXNpb25cbiAgICAgICAgICA6ICcxMDAwJztcbiAgICAgICAgY29uc3QgY29vcmRpbmF0ZXMgPVxuICAgICAgICAgIG9wdGlvbnMuY29vcmRpbmF0ZXNbMF0gK1xuICAgICAgICAgICcsJyArXG4gICAgICAgICAgb3B0aW9ucy5jb29yZGluYXRlc1sxXSArXG4gICAgICAgICAgJyksMzg1NyksJyArXG4gICAgICAgICAgbWV0ZXJzICtcbiAgICAgICAgICAnKSknO1xuXG4gICAgICAgIHVybCA9IGAke2Jhc2VVcmx9JHtmb3JtYXR9JHtzcWx9JHtjbGF1c2V9JHtjb29yZGluYXRlc31gO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgSW1hZ2VBcmNHSVNSZXN0RGF0YVNvdXJjZTpcbiAgICAgIGNhc2UgVGlsZUFyY0dJU1Jlc3REYXRhU291cmNlOlxuICAgICAgICBjb25zdCB0aWxlQXJjR0lTUmVzdERhdGFzb3VyY2UgPSBkYXRhc291cmNlIGFzIFRpbGVBcmNHSVNSZXN0RGF0YVNvdXJjZTtcbiAgICAgICAgY29uc3QgZGVsdGFYID0gTWF0aC5hYnMobWFwRXh0ZW50WzBdIC0gbWFwRXh0ZW50WzJdKTtcbiAgICAgICAgY29uc3QgZGVsdGFZID0gTWF0aC5hYnMobWFwRXh0ZW50WzFdIC0gbWFwRXh0ZW50WzNdKTtcbiAgICAgICAgY29uc3QgbWF4RGVsdGEgPSBkZWx0YVggPiBkZWx0YVkgPyBkZWx0YVggOiBkZWx0YVk7XG4gICAgICAgIGNvbnN0IGNsaWNrQnVmZmVyID0gbWF4RGVsdGEgKiAwLjAwNTtcbiAgICAgICAgY29uc3QgdGhyZXNob2xkID0gdGlsZUFyY0dJU1Jlc3REYXRhc291cmNlLm9wdGlvbnMucXVlcnlQcmVjaXNpb24gPyB0aWxlQXJjR0lTUmVzdERhdGFzb3VyY2Uub3B0aW9ucy5xdWVyeVByZWNpc2lvbiA6IGNsaWNrQnVmZmVyO1xuICAgICAgICBjb25zdCBleHRlbnQgPSBvbGV4dGVudC5idWZmZXIoXG4gICAgICAgICAgb2xleHRlbnQuYm91bmRpbmdFeHRlbnQoW29wdGlvbnMuY29vcmRpbmF0ZXNdKSxcbiAgICAgICAgICB0aHJlc2hvbGRcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3Qgc2VydmljZVVybCA9XG4gICAgICAgICAgdGlsZUFyY0dJU1Jlc3REYXRhc291cmNlLm9wdGlvbnMudXJsICtcbiAgICAgICAgICAnLycgK1xuICAgICAgICAgIHRpbGVBcmNHSVNSZXN0RGF0YXNvdXJjZS5vcHRpb25zLmxheWVyICtcbiAgICAgICAgICAnL3F1ZXJ5Lyc7XG4gICAgICAgIGNvbnN0IGdlb21ldHJ5ID0gZW5jb2RlVVJJQ29tcG9uZW50KFxuICAgICAgICAgICd7XCJ4bWluXCI6JyArXG4gICAgICAgICAgICBleHRlbnRbMF0gK1xuICAgICAgICAgICAgJyxcInltaW5cIjonICtcbiAgICAgICAgICAgIGV4dGVudFsxXSArXG4gICAgICAgICAgICAnLFwieG1heFwiOicgK1xuICAgICAgICAgICAgZXh0ZW50WzJdICtcbiAgICAgICAgICAgICcsXCJ5bWF4XCI6JyArXG4gICAgICAgICAgICBleHRlbnRbM10gK1xuICAgICAgICAgICAgJyxcInNwYXRpYWxSZWZlcmVuY2VcIjp7XCJ3a2lkXCI6MTAyMTAwfX0nXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IHBhcmFtcyA9IFtcbiAgICAgICAgICAnZj1qc29uJyxcbiAgICAgICAgICBgZ2VvbWV0cnk9JHtnZW9tZXRyeX1gLFxuICAgICAgICAgICdnZW9tZXRyeVR5cGU9ZXNyaUdlb21ldHJ5RW52ZWxvcGUnLFxuICAgICAgICAgICdpblNSPTEwMjEwMCcsXG4gICAgICAgICAgJ3NwYXRpYWxSZWw9ZXNyaVNwYXRpYWxSZWxJbnRlcnNlY3RzJyxcbiAgICAgICAgICAnb3V0RmllbGRzPSonLFxuICAgICAgICAgICdyZXR1cm5HZW9tZXRyeT10cnVlJyxcbiAgICAgICAgICAnb3V0U1I9MTAyMTAwJ1xuICAgICAgICBdO1xuICAgICAgICB1cmwgPSBgJHtzZXJ2aWNlVXJsfT8ke3BhcmFtcy5qb2luKCcmJyl9YDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICByZXR1cm4gdXJsO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRNaW1lSW5mb0Zvcm1hdChxdWVyeUZvcm1hdDogc3RyaW5nKSB7XG4gICAgbGV0IG1pbWUgPSAnYXBwbGljYXRpb24vdm5kLm9nYy5nbWwnO1xuICAgIGNvbnN0IGtleUVudW0gPSBPYmplY3Qua2V5cyhRdWVyeUZvcm1hdCkuZmluZChcbiAgICAgIGtleSA9PiBRdWVyeUZvcm1hdFtrZXldID09PSBxdWVyeUZvcm1hdFxuICAgICk7XG4gICAgaWYgKGtleUVudW0pIHtcbiAgICAgIG1pbWUgPSBRdWVyeUZvcm1hdE1pbWVUeXBlW2tleUVudW1dO1xuICAgIH1cblxuICAgIHJldHVybiBtaW1lO1xuICB9XG5cbiAgZ2V0QWxsb3dlZEZpZWxkc0FuZEFsaWFzKGxheWVyOiBhbnkpIHtcbiAgICBsZXQgYWxsb3dlZEZpZWxkc0FuZEFsaWFzO1xuICAgIGlmIChcbiAgICAgIGxheWVyLm9wdGlvbnM/LnNvdXJjZT8ub3B0aW9ucz8uc291cmNlRmllbGRzICYmXG4gICAgICBsYXllci5vcHRpb25zLnNvdXJjZS5vcHRpb25zLnNvdXJjZUZpZWxkcy5sZW5ndGggPj0gMVxuICAgICkge1xuICAgICAgYWxsb3dlZEZpZWxkc0FuZEFsaWFzID0ge307XG4gICAgICBsYXllci5vcHRpb25zLnNvdXJjZS5vcHRpb25zLnNvdXJjZUZpZWxkcy5mb3JFYWNoKHNvdXJjZUZpZWxkID0+IHtcbiAgICAgICAgY29uc3QgYWxpYXMgPSBzb3VyY2VGaWVsZC5hbGlhcyA/IHNvdXJjZUZpZWxkLmFsaWFzIDogc291cmNlRmllbGQubmFtZTtcbiAgICAgICAgYWxsb3dlZEZpZWxkc0FuZEFsaWFzW3NvdXJjZUZpZWxkLm5hbWVdID0gYWxpYXM7XG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGFsbG93ZWRGaWVsZHNBbmRBbGlhcztcbiAgfVxuXG4gIGdldFF1ZXJ5VGl0bGUoZmVhdHVyZTogRmVhdHVyZSwgbGF5ZXI6IExheWVyKTogc3RyaW5nIHtcbiAgICBsZXQgdGl0bGU7XG4gICAgaWYgKGxheWVyLm9wdGlvbnM/LnNvdXJjZT8ub3B0aW9ucykge1xuICAgICAgY29uc3QgZGF0YVNvdXJjZU9wdGlvbnMgPSBsYXllci5vcHRpb25zLnNvdXJjZVxuICAgICAgICAub3B0aW9ucyBhcyBRdWVyeWFibGVEYXRhU291cmNlT3B0aW9ucztcbiAgICAgIGlmIChkYXRhU291cmNlT3B0aW9ucy5xdWVyeVRpdGxlKSB7XG4gICAgICAgIHRpdGxlID0gdGhpcy5nZXRMYWJlbE1hdGNoKGZlYXR1cmUsIGRhdGFTb3VyY2VPcHRpb25zLnF1ZXJ5VGl0bGUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0aXRsZTtcbiAgfVxuXG4gIGdldExhYmVsTWF0Y2goZmVhdHVyZTogRmVhdHVyZSwgbGFiZWxNYXRjaCk6IHN0cmluZyB7XG4gICAgbGV0IGxhYmVsID0gbGFiZWxNYXRjaDtcbiAgICBjb25zdCBsYWJlbFRvR2V0ID0gQXJyYXkuZnJvbShsYWJlbE1hdGNoLm1hdGNoQWxsKC9cXCRcXHsoW15cXHtcXH1dKylcXH0vZykpO1xuXG4gICAgbGFiZWxUb0dldC5mb3JFYWNoKHYgPT4ge1xuICAgICAgbGFiZWwgPSBsYWJlbC5yZXBsYWNlKHZbMF0sIGZlYXR1cmUucHJvcGVydGllc1t2WzFdXSk7XG4gICAgfSk7XG5cbiAgICAvLyBOb3RoaW5nIGRvbmU/IGNoZWNrIGZlYXR1cmUncyBhdHRyaWJ1dGVcbiAgICBpZiAobGFiZWxUb0dldC5sZW5ndGggPT09IDAgJiYgbGFiZWwgPT09IGxhYmVsTWF0Y2gpIHtcbiAgICAgIGxhYmVsID0gZmVhdHVyZS5wcm9wZXJ0aWVzW2xhYmVsTWF0Y2hdIHx8IGxhYmVsTWF0Y2g7XG4gICAgfVxuXG4gICAgcmV0dXJuIGxhYmVsO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSBkYXRhc291cmNlIFF1ZXJ5YWJsZURhdGFTb3VyY2VcbiAgICogQHBhcmFtIG9wdGlvbnMgUXVlcnlPcHRpb25zXG4gICAqIEBtYXBFeHRlbnQgZXh0ZW50IG9mIHRoZSBtYXAgd2hlbiBjbGljayBldmVudFxuICAgKlxuICAgKi9cblxuICBnZXRDdXN0b21RdWVyeVVybChcbiAgICBkYXRhc291cmNlOiBRdWVyeWFibGVEYXRhU291cmNlLFxuICAgIG9wdGlvbnM6IFF1ZXJ5T3B0aW9ucyxcbiAgICBtYXBFeHRlbnQ/OiBNYXBFeHRlbnQpOiBzdHJpbmcge1xuXG4gICAgICBsZXQgdXJsID0gZGF0YXNvdXJjZS5vcHRpb25zLnF1ZXJ5VXJsLnJlcGxhY2UoL1xce3htaW5cXH0vZywgbWFwRXh0ZW50WzBdLnRvU3RyaW5nKCkpXG4gICAgICAucmVwbGFjZSgvXFx7eW1pblxcfS9nLCBtYXBFeHRlbnRbMV0udG9TdHJpbmcoKSlcbiAgICAgIC5yZXBsYWNlKC9cXHt4bWF4XFx9L2csIG1hcEV4dGVudFsyXS50b1N0cmluZygpKVxuICAgICAgLnJlcGxhY2UoL1xce3ltYXhcXH0vZywgbWFwRXh0ZW50WzNdLnRvU3RyaW5nKCkpXG4gICAgICAucmVwbGFjZSgvXFx7eFxcfS9nLCBvcHRpb25zLmNvb3JkaW5hdGVzWzBdLnRvU3RyaW5nKCkpXG4gICAgICAucmVwbGFjZSgvXFx7eVxcfS9nLCBvcHRpb25zLmNvb3JkaW5hdGVzWzFdLnRvU3RyaW5nKCkpXG4gICAgICAucmVwbGFjZSgvXFx7cmVzb2x1dGlvblxcfS9nLCBvcHRpb25zLnJlc29sdXRpb24udG9TdHJpbmcoKSlcbiAgICAgIC5yZXBsYWNlKC9cXHtzcmlkXFx9L2csIG9wdGlvbnMucHJvamVjdGlvbi5yZXBsYWNlKCdFUFNHOicsJycpKTtcblxuICAgICAgcmV0dXJuIHVybDtcbiAgICB9XG59XG4iXX0=