@igo2/geo 18.0.1-next.2 → 18.0.2

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 (512) hide show
  1. package/esm2022/igo2-geo.mjs +5 -0
  2. package/esm2022/lib/catalog/catalog-browser/catalog-browser-group.component.mjs +234 -0
  3. package/esm2022/lib/catalog/catalog-browser/catalog-browser-layer.component.mjs +272 -0
  4. package/esm2022/lib/catalog/catalog-browser/catalog-browser.component.mjs +246 -0
  5. package/esm2022/lib/catalog/catalog-browser/catalog-browser.module.mjs +19 -0
  6. package/esm2022/lib/catalog/catalog-library/add-catalog-dialog.component.mjs +136 -0
  7. package/esm2022/lib/catalog/catalog-library/catalog-library-item.component.mjs +60 -0
  8. package/esm2022/lib/catalog/catalog-library/catalog-library.component.mjs +232 -0
  9. package/esm2022/lib/catalog/catalog-library/catalog-library.module.mjs +24 -0
  10. package/esm2022/lib/catalog/catalog-library/index.mjs +4 -0
  11. package/esm2022/lib/catalog/catalog.module.mjs +26 -0
  12. package/esm2022/lib/catalog/index.mjs +6 -0
  13. package/esm2022/lib/catalog/shared/catalog.abstract.mjs +32 -0
  14. package/esm2022/lib/catalog/shared/catalog.enum.mjs +16 -0
  15. package/esm2022/lib/catalog/shared/catalog.interface.mjs +2 -0
  16. package/esm2022/lib/catalog/shared/catalog.service.mjs +706 -0
  17. package/esm2022/lib/catalog/shared/catalogs.mjs +75 -0
  18. package/esm2022/lib/catalog/shared/index.mjs +5 -0
  19. package/esm2022/lib/datasource/index.mjs +3 -0
  20. package/esm2022/lib/datasource/shared/capabilities.interface.mjs +17 -0
  21. package/esm2022/lib/datasource/shared/capabilities.service.mjs +441 -0
  22. package/esm2022/lib/datasource/shared/datasource.service.mjs +258 -0
  23. package/esm2022/lib/datasource/shared/datasources/any-datasource.interface.mjs +2 -0
  24. package/esm2022/lib/datasource/shared/datasources/any-datasource.mjs +2 -0
  25. package/esm2022/lib/datasource/shared/datasources/arcgisrest-datasource.interface.mjs +2 -0
  26. package/esm2022/lib/datasource/shared/datasources/arcgisrest-datasource.mjs +222 -0
  27. package/esm2022/lib/datasource/shared/datasources/carto-datasource.interface.mjs +2 -0
  28. package/esm2022/lib/datasource/shared/datasources/carto-datasource.mjs +118 -0
  29. package/esm2022/lib/datasource/shared/datasources/cluster-datasource.interface.mjs +2 -0
  30. package/esm2022/lib/datasource/shared/datasources/cluster-datasource.mjs +24 -0
  31. package/esm2022/lib/datasource/shared/datasources/data.service.mjs +3 -0
  32. package/esm2022/lib/datasource/shared/datasources/datasource.interface.mjs +2 -0
  33. package/esm2022/lib/datasource/shared/datasources/datasource.mjs +42 -0
  34. package/esm2022/lib/datasource/shared/datasources/feature-datasource.interface.mjs +2 -0
  35. package/esm2022/lib/datasource/shared/datasources/feature-datasource.mjs +52 -0
  36. package/esm2022/lib/datasource/shared/datasources/imagearcgisrest-datasource.interface.mjs +2 -0
  37. package/esm2022/lib/datasource/shared/datasources/imagearcgisrest-datasource.mjs +70 -0
  38. package/esm2022/lib/datasource/shared/datasources/index.mjs +36 -0
  39. package/esm2022/lib/datasource/shared/datasources/mvt-datasource.interface.mjs +2 -0
  40. package/esm2022/lib/datasource/shared/datasources/mvt-datasource.mjs +33 -0
  41. package/esm2022/lib/datasource/shared/datasources/osm-datasource.interface.mjs +2 -0
  42. package/esm2022/lib/datasource/shared/datasources/osm-datasource.mjs +14 -0
  43. package/esm2022/lib/datasource/shared/datasources/tilearcgisrest-datasource.interface.mjs +2 -0
  44. package/esm2022/lib/datasource/shared/datasources/tilearcgisrest-datasource.mjs +60 -0
  45. package/esm2022/lib/datasource/shared/datasources/tiledebug-datasource.interface.mjs +2 -0
  46. package/esm2022/lib/datasource/shared/datasources/tiledebug-datasource.mjs +17 -0
  47. package/esm2022/lib/datasource/shared/datasources/websocket-datasource.interface.mjs +2 -0
  48. package/esm2022/lib/datasource/shared/datasources/websocket-datasource.mjs +56 -0
  49. package/esm2022/lib/datasource/shared/datasources/wfs-datasource.interface.mjs +2 -0
  50. package/esm2022/lib/datasource/shared/datasources/wfs-datasource.mjs +137 -0
  51. package/esm2022/lib/datasource/shared/datasources/wfs.service.mjs +170 -0
  52. package/esm2022/lib/datasource/shared/datasources/wms-datasource.interface.mjs +2 -0
  53. package/esm2022/lib/datasource/shared/datasources/wms-datasource.mjs +227 -0
  54. package/esm2022/lib/datasource/shared/datasources/wms-wfs.utils.mjs +224 -0
  55. package/esm2022/lib/datasource/shared/datasources/wmts-datasource.interface.mjs +2 -0
  56. package/esm2022/lib/datasource/shared/datasources/wmts-datasource.mjs +18 -0
  57. package/esm2022/lib/datasource/shared/datasources/xyz-datasource.interface.mjs +2 -0
  58. package/esm2022/lib/datasource/shared/datasources/xyz-datasource.mjs +11 -0
  59. package/esm2022/lib/datasource/shared/index.mjs +6 -0
  60. package/esm2022/lib/datasource/shared/options/index.mjs +5 -0
  61. package/esm2022/lib/datasource/shared/options/options-api.interface.mjs +2 -0
  62. package/esm2022/lib/datasource/shared/options/options-api.providers.mjs +15 -0
  63. package/esm2022/lib/datasource/shared/options/options-api.service.mjs +85 -0
  64. package/esm2022/lib/datasource/shared/options/options.service.mjs +3 -0
  65. package/esm2022/lib/datasource/utils/index.mjs +2 -0
  66. package/esm2022/lib/datasource/utils/tilegrid.mjs +20 -0
  67. package/esm2022/lib/directions/directions-buttons/directions-buttons.component.mjs +246 -0
  68. package/esm2022/lib/directions/directions-buttons/index.mjs +2 -0
  69. package/esm2022/lib/directions/directions-inputs/directions-inputs.component.mjs +312 -0
  70. package/esm2022/lib/directions/directions-inputs/index.mjs +2 -0
  71. package/esm2022/lib/directions/directions-results/directions-results.component.mjs +192 -0
  72. package/esm2022/lib/directions/directions-results/index.mjs +2 -0
  73. package/esm2022/lib/directions/directions-sources/directions-source.interface.mjs +5 -0
  74. package/esm2022/lib/directions/directions-sources/directions-source.mjs +3 -0
  75. package/esm2022/lib/directions/directions-sources/directions-source.provider.mjs +23 -0
  76. package/esm2022/lib/directions/directions-sources/index.mjs +5 -0
  77. package/esm2022/lib/directions/directions-sources/osrm-directions-source.mjs +159 -0
  78. package/esm2022/lib/directions/directions.component.mjs +437 -0
  79. package/esm2022/lib/directions/directions.module.mjs +46 -0
  80. package/esm2022/lib/directions/directions.provider.mjs +16 -0
  81. package/esm2022/lib/directions/index.mjs +8 -0
  82. package/esm2022/lib/directions/shared/directions-source.service.mjs +18 -0
  83. package/esm2022/lib/directions/shared/directions.enum.mjs +72 -0
  84. package/esm2022/lib/directions/shared/directions.interface.mjs +2 -0
  85. package/esm2022/lib/directions/shared/directions.service.mjs +239 -0
  86. package/esm2022/lib/directions/shared/directions.utils.mjs +522 -0
  87. package/esm2022/lib/directions/shared/index.mjs +6 -0
  88. package/esm2022/lib/directions/shared/store.mjs +21 -0
  89. package/esm2022/lib/download/download-button/download-button.component.mjs +48 -0
  90. package/esm2022/lib/download/download-button/index.mjs +2 -0
  91. package/esm2022/lib/download/download.module.mjs +24 -0
  92. package/esm2022/lib/download/index.mjs +3 -0
  93. package/esm2022/lib/download/shared/download.interface.mjs +2 -0
  94. package/esm2022/lib/download/shared/download.service.mjs +67 -0
  95. package/esm2022/lib/download/shared/index.mjs +3 -0
  96. package/esm2022/lib/draw/draw/draw-layer-popup.component.mjs +42 -0
  97. package/esm2022/lib/draw/draw/draw-popup.component.mjs +421 -0
  98. package/esm2022/lib/draw/draw/draw-shorcuts.component.mjs +28 -0
  99. package/esm2022/lib/draw/draw/draw.component.mjs +1136 -0
  100. package/esm2022/lib/draw/draw/draw.module.mjs +19 -0
  101. package/esm2022/lib/draw/drawingTool.module.mjs +18 -0
  102. package/esm2022/lib/draw/index.mjs +3 -0
  103. package/esm2022/lib/draw/shared/draw-icon.service.mjs +30 -0
  104. package/esm2022/lib/draw/shared/draw.enum.mjs +21 -0
  105. package/esm2022/lib/draw/shared/draw.interface.mjs +2 -0
  106. package/esm2022/lib/draw/shared/draw.utils.mjs +125 -0
  107. package/esm2022/lib/draw/shared/index.mjs +5 -0
  108. package/esm2022/lib/environment/environment.interface.mjs +2 -0
  109. package/esm2022/lib/environment/index.mjs +2 -0
  110. package/esm2022/lib/feature/feature-details/feature-details.component.mjs +306 -0
  111. package/esm2022/lib/feature/feature-details/feature-details.directive.mjs +56 -0
  112. package/esm2022/lib/feature/feature-details/feature-details.module.mjs +26 -0
  113. package/esm2022/lib/feature/feature-details/index.mjs +4 -0
  114. package/esm2022/lib/feature/feature-form/feature-form.component.mjs +101 -0
  115. package/esm2022/lib/feature/feature-form/feature-form.module.mjs +19 -0
  116. package/esm2022/lib/feature/feature.module.mjs +26 -0
  117. package/esm2022/lib/feature/index.mjs +5 -0
  118. package/esm2022/lib/feature/shared/feature-store.utils.mjs +28 -0
  119. package/esm2022/lib/feature/shared/feature.enums.mjs +9 -0
  120. package/esm2022/lib/feature/shared/feature.interfaces.mjs +2 -0
  121. package/esm2022/lib/feature/shared/feature.utils.mjs +332 -0
  122. package/esm2022/lib/feature/shared/index.mjs +8 -0
  123. package/esm2022/lib/feature/shared/store.mjs +143 -0
  124. package/esm2022/lib/feature/shared/strategies/geo-properties.mjs +216 -0
  125. package/esm2022/lib/feature/shared/strategies/in-map-extent.mjs +119 -0
  126. package/esm2022/lib/feature/shared/strategies/in-map-resolution.mjs +99 -0
  127. package/esm2022/lib/feature/shared/strategies/index.mjs +8 -0
  128. package/esm2022/lib/feature/shared/strategies/loading-layer.mjs +103 -0
  129. package/esm2022/lib/feature/shared/strategies/loading.mjs +136 -0
  130. package/esm2022/lib/feature/shared/strategies/search.mjs +158 -0
  131. package/esm2022/lib/feature/shared/strategies/selection.mjs +385 -0
  132. package/esm2022/lib/feature/shared/strategies.utils.mjs +37 -0
  133. package/esm2022/lib/filter/filter.module.mjs +131 -0
  134. package/esm2022/lib/filter/index.mjs +17 -0
  135. package/esm2022/lib/filter/ogc-filter-button/index.mjs +2 -0
  136. package/esm2022/lib/filter/ogc-filter-button/ogc-filter-button.component.mjs +141 -0
  137. package/esm2022/lib/filter/ogc-filter-form/index.mjs +2 -0
  138. package/esm2022/lib/filter/ogc-filter-form/ogc-filter-form.component.mjs +325 -0
  139. package/esm2022/lib/filter/ogc-filter-selection/index.mjs +2 -0
  140. package/esm2022/lib/filter/ogc-filter-selection/ogc-filter-selection.component.mjs +787 -0
  141. package/esm2022/lib/filter/ogc-filter-time/index.mjs +3 -0
  142. package/esm2022/lib/filter/ogc-filter-time/ogc-filter-time-slider.component.mjs +201 -0
  143. package/esm2022/lib/filter/ogc-filter-time/ogc-filter-time.component.mjs +665 -0
  144. package/esm2022/lib/filter/ogc-filterable-form/index.mjs +2 -0
  145. package/esm2022/lib/filter/ogc-filterable-form/ogc-filterable-form.component.mjs +66 -0
  146. package/esm2022/lib/filter/ogc-filterable-item/index.mjs +2 -0
  147. package/esm2022/lib/filter/ogc-filterable-item/ogc-filterable-item.component.mjs +244 -0
  148. package/esm2022/lib/filter/ogc-filterable-list/index.mjs +3 -0
  149. package/esm2022/lib/filter/ogc-filterable-list/ogc-filterable-list-binding.directive.mjs +39 -0
  150. package/esm2022/lib/filter/ogc-filterable-list/ogc-filterable-list.component.mjs +32 -0
  151. package/esm2022/lib/filter/shared/filterable-datasource.pipe.mjs +63 -0
  152. package/esm2022/lib/filter/shared/index.mjs +12 -0
  153. package/esm2022/lib/filter/shared/ogc-filter-time.service.mjs +72 -0
  154. package/esm2022/lib/filter/shared/ogc-filter.enum.mjs +30 -0
  155. package/esm2022/lib/filter/shared/ogc-filter.interface.mjs +2 -0
  156. package/esm2022/lib/filter/shared/ogc-filter.mjs +756 -0
  157. package/esm2022/lib/filter/shared/ogc-filter.service.mjs +47 -0
  158. package/esm2022/lib/filter/shared/spatial-filter.enum.mjs +23 -0
  159. package/esm2022/lib/filter/shared/spatial-filter.interface.mjs +2 -0
  160. package/esm2022/lib/filter/shared/spatial-filter.service.mjs +282 -0
  161. package/esm2022/lib/filter/shared/time-filter.enum.mjs +13 -0
  162. package/esm2022/lib/filter/shared/time-filter.interface.mjs +2 -0
  163. package/esm2022/lib/filter/shared/time-filter.service.mjs +107 -0
  164. package/esm2022/lib/filter/spatial-filter/spatial-filter-item/index.mjs +2 -0
  165. package/esm2022/lib/filter/spatial-filter/spatial-filter-item/spatial-filter-item.component.mjs +875 -0
  166. package/esm2022/lib/filter/spatial-filter/spatial-filter-list/index.mjs +2 -0
  167. package/esm2022/lib/filter/spatial-filter/spatial-filter-list/spatial-filter-list.component.mjs +191 -0
  168. package/esm2022/lib/filter/spatial-filter/spatial-filter-type/index.mjs +2 -0
  169. package/esm2022/lib/filter/spatial-filter/spatial-filter-type/spatial-filter-type.component.mjs +120 -0
  170. package/esm2022/lib/filter/time-filter-button/index.mjs +2 -0
  171. package/esm2022/lib/filter/time-filter-button/time-filter-button.component.mjs +70 -0
  172. package/esm2022/lib/filter/time-filter-form/index.mjs +2 -0
  173. package/esm2022/lib/filter/time-filter-form/time-filter-form.component.mjs +537 -0
  174. package/esm2022/lib/filter/time-filter-item/index.mjs +2 -0
  175. package/esm2022/lib/filter/time-filter-item/time-filter-item.component.mjs +90 -0
  176. package/esm2022/lib/filter/time-filter-list/index.mjs +3 -0
  177. package/esm2022/lib/filter/time-filter-list/time-filter-list-binding.directive.mjs +39 -0
  178. package/esm2022/lib/filter/time-filter-list/time-filter-list.component.mjs +24 -0
  179. package/esm2022/lib/geo.module.mjs +63 -0
  180. package/esm2022/lib/geometry/geometry-form-field/geometry-form-field-input.component.mjs +559 -0
  181. package/esm2022/lib/geometry/geometry-form-field/geometry-form-field.component.mjs +170 -0
  182. package/esm2022/lib/geometry/geometry-form-field/geometry-form-field.module.mjs +24 -0
  183. package/esm2022/lib/geometry/geometry-form-field/index.mjs +4 -0
  184. package/esm2022/lib/geometry/geometry.module.mjs +18 -0
  185. package/esm2022/lib/geometry/index.mjs +3 -0
  186. package/esm2022/lib/geometry/shared/controls/draw.mjs +340 -0
  187. package/esm2022/lib/geometry/shared/controls/index.mjs +4 -0
  188. package/esm2022/lib/geometry/shared/controls/modify.mjs +538 -0
  189. package/esm2022/lib/geometry/shared/controls/slice.mjs +190 -0
  190. package/esm2022/lib/geometry/shared/geometry.errors.mjs +24 -0
  191. package/esm2022/lib/geometry/shared/geometry.interfaces.mjs +2 -0
  192. package/esm2022/lib/geometry/shared/geometry.utils.mjs +113 -0
  193. package/esm2022/lib/geometry/shared/index.mjs +5 -0
  194. package/esm2022/lib/import-export/export-button/export-button.component.mjs +49 -0
  195. package/esm2022/lib/import-export/export-button/index.mjs +2 -0
  196. package/esm2022/lib/import-export/import-export/import-export.component.mjs +876 -0
  197. package/esm2022/lib/import-export/import-export/index.mjs +2 -0
  198. package/esm2022/lib/import-export/import-export.module.mjs +31 -0
  199. package/esm2022/lib/import-export/index.mjs +5 -0
  200. package/esm2022/lib/import-export/shared/drop-geo-file.directive.mjs +114 -0
  201. package/esm2022/lib/import-export/shared/export.errors.mjs +15 -0
  202. package/esm2022/lib/import-export/shared/export.interface.mjs +2 -0
  203. package/esm2022/lib/import-export/shared/export.service.mjs +378 -0
  204. package/esm2022/lib/import-export/shared/export.type.mjs +13 -0
  205. package/esm2022/lib/import-export/shared/export.utils.mjs +51 -0
  206. package/esm2022/lib/import-export/shared/import.errors.mjs +39 -0
  207. package/esm2022/lib/import-export/shared/import.interface.mjs +2 -0
  208. package/esm2022/lib/import-export/shared/import.service.mjs +221 -0
  209. package/esm2022/lib/import-export/shared/import.utils.mjs +203 -0
  210. package/esm2022/lib/import-export/shared/index.mjs +11 -0
  211. package/esm2022/lib/layer/index.mjs +16 -0
  212. package/esm2022/lib/layer/layer-group/index.mjs +2 -0
  213. package/esm2022/lib/layer/layer-group/layer-group.component.mjs +103 -0
  214. package/esm2022/lib/layer/layer-item/index.mjs +2 -0
  215. package/esm2022/lib/layer/layer-item/layer-item.component.mjs +196 -0
  216. package/esm2022/lib/layer/layer-legend/index.mjs +2 -0
  217. package/esm2022/lib/layer/layer-legend/layer-legend.component.mjs +287 -0
  218. package/esm2022/lib/layer/layer-legend-item/index.mjs +2 -0
  219. package/esm2022/lib/layer/layer-legend-item/layer-legend-item.component.mjs +85 -0
  220. package/esm2022/lib/layer/layer-legend-list/index.mjs +3 -0
  221. package/esm2022/lib/layer/layer-legend-list/layer-legend-list-binding.directive.mjs +54 -0
  222. package/esm2022/lib/layer/layer-legend-list/layer-legend-list.component.mjs +104 -0
  223. package/esm2022/lib/layer/layer-list/index.mjs +2 -0
  224. package/esm2022/lib/layer/layer-list/layer-list.component.mjs +232 -0
  225. package/esm2022/lib/layer/layer-list-tool/index.mjs +4 -0
  226. package/esm2022/lib/layer/layer-list-tool/layer-list-tool.component.mjs +92 -0
  227. package/esm2022/lib/layer/layer-list-tool/layer-list-tool.interface.mjs +7 -0
  228. package/esm2022/lib/layer/layer-list-tool/layer-list-tool.service.mjs +61 -0
  229. package/esm2022/lib/layer/layer-search/index.mjs +2 -0
  230. package/esm2022/lib/layer/layer-search/layer-search.component.mjs +65 -0
  231. package/esm2022/lib/layer/layer-unavailable/index.mjs +3 -0
  232. package/esm2022/lib/layer/layer-unavailable/layer-unavailable-list/layer-unavailable-list.component.mjs +26 -0
  233. package/esm2022/lib/layer/layer-unavailable/layer-unavailable.component.mjs +35 -0
  234. package/esm2022/lib/layer/layer-viewer/index.mjs +3 -0
  235. package/esm2022/lib/layer/layer-viewer/layer-viewer.component.mjs +226 -0
  236. package/esm2022/lib/layer/layer-viewer/layer-viewer.interface.mjs +2 -0
  237. package/esm2022/lib/layer/layer-viewer-bottom-actions/index.mjs +2 -0
  238. package/esm2022/lib/layer/layer-viewer-bottom-actions/layer-viewer-bottom-actions.component.mjs +207 -0
  239. package/esm2022/lib/layer/layer-visibility-button/index.mjs +2 -0
  240. package/esm2022/lib/layer/layer-visibility-button/layer-visibility-button.component.mjs +83 -0
  241. package/esm2022/lib/layer/layer.module.mjs +107 -0
  242. package/esm2022/lib/layer/shared/clusterParam.mjs +2 -0
  243. package/esm2022/lib/layer/shared/index.mjs +6 -0
  244. package/esm2022/lib/layer/shared/layer-controller.mjs +316 -0
  245. package/esm2022/lib/layer/shared/layer-selection.mjs +38 -0
  246. package/esm2022/lib/layer/shared/layer.enums.mjs +2 -0
  247. package/esm2022/lib/layer/shared/layer.service.mjs +315 -0
  248. package/esm2022/lib/layer/shared/layers/any-layer.interface.mjs +2 -0
  249. package/esm2022/lib/layer/shared/layers/any-layer.mjs +2 -0
  250. package/esm2022/lib/layer/shared/layers/image-layer.interface.mjs +2 -0
  251. package/esm2022/lib/layer/shared/layers/image-layer.mjs +75 -0
  252. package/esm2022/lib/layer/shared/layers/index.mjs +18 -0
  253. package/esm2022/lib/layer/shared/layers/layer-base.mjs +199 -0
  254. package/esm2022/lib/layer/shared/layers/layer-group.interface.mjs +2 -0
  255. package/esm2022/lib/layer/shared/layers/layer-group.mjs +120 -0
  256. package/esm2022/lib/layer/shared/layers/layer.interface.mjs +7 -0
  257. package/esm2022/lib/layer/shared/layers/layer.mjs +178 -0
  258. package/esm2022/lib/layer/shared/layers/legend.interface.mjs +2 -0
  259. package/esm2022/lib/layer/shared/layers/linked/index.mjs +4 -0
  260. package/esm2022/lib/layer/shared/layers/linked/linked-layer.interface.mjs +12 -0
  261. package/esm2022/lib/layer/shared/layers/linked/linked-layer.mjs +242 -0
  262. package/esm2022/lib/layer/shared/layers/linked/linked-layer.utils.mjs +70 -0
  263. package/esm2022/lib/layer/shared/layers/tile-layer.interface.mjs +2 -0
  264. package/esm2022/lib/layer/shared/layers/tile-layer.mjs +55 -0
  265. package/esm2022/lib/layer/shared/layers/vector-layer.interface.mjs +2 -0
  266. package/esm2022/lib/layer/shared/layers/vector-layer.mjs +576 -0
  267. package/esm2022/lib/layer/shared/layers/vectortile-layer.interface.mjs +2 -0
  268. package/esm2022/lib/layer/shared/layers/vectortile-layer.mjs +112 -0
  269. package/esm2022/lib/layer/track-feature-button/index.mjs +2 -0
  270. package/esm2022/lib/layer/track-feature-button/track-feature-button.component.mjs +54 -0
  271. package/esm2022/lib/layer/utils/image-watcher.mjs +62 -0
  272. package/esm2022/lib/layer/utils/index.mjs +6 -0
  273. package/esm2022/lib/layer/utils/layer.utils.mjs +57 -0
  274. package/esm2022/lib/layer/utils/outputLegend.mjs +32 -0
  275. package/esm2022/lib/layer/utils/tile-watcher.mjs +52 -0
  276. package/esm2022/lib/layer/utils/vector-watcher.mjs +50 -0
  277. package/esm2022/lib/map/baselayers-switcher/baselayers-switcher.animation.mjs +20 -0
  278. package/esm2022/lib/map/baselayers-switcher/baselayers-switcher.component.mjs +87 -0
  279. package/esm2022/lib/map/baselayers-switcher/index.mjs +3 -0
  280. package/esm2022/lib/map/baselayers-switcher/mini-basemap.component.mjs +122 -0
  281. package/esm2022/lib/map/geolocate-button/geolocate-button.component.mjs +78 -0
  282. package/esm2022/lib/map/geolocate-button/index.mjs +2 -0
  283. package/esm2022/lib/map/home-extent-button/home-extent-button.component.mjs +73 -0
  284. package/esm2022/lib/map/home-extent-button/home-extent-button.interface.mjs +2 -0
  285. package/esm2022/lib/map/home-extent-button/index.mjs +3 -0
  286. package/esm2022/lib/map/index.mjs +14 -0
  287. package/esm2022/lib/map/info-section/index.mjs +2 -0
  288. package/esm2022/lib/map/info-section/info-section.component.mjs +15 -0
  289. package/esm2022/lib/map/map-browser/index.mjs +2 -0
  290. package/esm2022/lib/map/map-browser/map-browser.component.mjs +67 -0
  291. package/esm2022/lib/map/map-center/index.mjs +2 -0
  292. package/esm2022/lib/map/map-center/map-center.component.mjs +56 -0
  293. package/esm2022/lib/map/map.module.mjs +89 -0
  294. package/esm2022/lib/map/menu-button/index.mjs +2 -0
  295. package/esm2022/lib/map/menu-button/menu-button.component.mjs +57 -0
  296. package/esm2022/lib/map/offline-button/index.mjs +2 -0
  297. package/esm2022/lib/map/offline-button/offline-button.component.mjs +53 -0
  298. package/esm2022/lib/map/rotation-button/index.mjs +2 -0
  299. package/esm2022/lib/map/rotation-button/rotation-button.component.mjs +58 -0
  300. package/esm2022/lib/map/shared/controllers/controller.mjs +44 -0
  301. package/esm2022/lib/map/shared/controllers/geolocation.interface.mjs +8 -0
  302. package/esm2022/lib/map/shared/controllers/geolocation.mjs +431 -0
  303. package/esm2022/lib/map/shared/controllers/index.mjs +5 -0
  304. package/esm2022/lib/map/shared/controllers/view.mjs +361 -0
  305. package/esm2022/lib/map/shared/hover-feature.directive.mjs +481 -0
  306. package/esm2022/lib/map/shared/index.mjs +15 -0
  307. package/esm2022/lib/map/shared/linkedLayers.utils.mjs +238 -0
  308. package/esm2022/lib/map/shared/map-pointer-position.directive.mjs +122 -0
  309. package/esm2022/lib/map/shared/map.abstract.mjs +24 -0
  310. package/esm2022/lib/map/shared/map.enums.mjs +6 -0
  311. package/esm2022/lib/map/shared/map.interface.mjs +2 -0
  312. package/esm2022/lib/map/shared/map.mjs +201 -0
  313. package/esm2022/lib/map/shared/map.service.mjs +29 -0
  314. package/esm2022/lib/map/shared/map.utils.mjs +455 -0
  315. package/esm2022/lib/map/shared/mapOffline.directive.mjs +114 -0
  316. package/esm2022/lib/map/shared/projection.interfaces.mjs +2 -0
  317. package/esm2022/lib/map/shared/projection.service.mjs +67 -0
  318. package/esm2022/lib/map/shared/projection.utils.mjs +122 -0
  319. package/esm2022/lib/map/swipe-control/index.mjs +2 -0
  320. package/esm2022/lib/map/swipe-control/swipe-control.component.mjs +211 -0
  321. package/esm2022/lib/map/utils/index.mjs +2 -0
  322. package/esm2022/lib/map/utils/layer-watcher.mjs +112 -0
  323. package/esm2022/lib/map/wake-lock-button/index.mjs +2 -0
  324. package/esm2022/lib/map/wake-lock-button/wake-lock-button.component.mjs +103 -0
  325. package/esm2022/lib/map/zoom-button/index.mjs +2 -0
  326. package/esm2022/lib/map/zoom-button/zoom-button.component.mjs +35 -0
  327. package/esm2022/lib/measure/index.mjs +3 -0
  328. package/esm2022/lib/measure/measure.module.mjs +20 -0
  329. package/esm2022/lib/measure/measurer/index.mjs +6 -0
  330. package/esm2022/lib/measure/measurer/measure-format.pipe.mjs +40 -0
  331. package/esm2022/lib/measure/measurer/measurer-dialog.component.mjs +38 -0
  332. package/esm2022/lib/measure/measurer/measurer-item.component.mjs +143 -0
  333. package/esm2022/lib/measure/measurer/measurer.component.mjs +948 -0
  334. package/esm2022/lib/measure/measurer/measurer.module.mjs +20 -0
  335. package/esm2022/lib/measure/shared/index.mjs +4 -0
  336. package/esm2022/lib/measure/shared/measure.enum.mjs +37 -0
  337. package/esm2022/lib/measure/shared/measure.interfaces.mjs +2 -0
  338. package/esm2022/lib/measure/shared/measure.utils.mjs +497 -0
  339. package/esm2022/lib/metadata/index.mjs +4 -0
  340. package/esm2022/lib/metadata/metadata-button/index.mjs +2 -0
  341. package/esm2022/lib/metadata/metadata-button/metadata-button.component.mjs +96 -0
  342. package/esm2022/lib/metadata/metadata.module.mjs +29 -0
  343. package/esm2022/lib/metadata/shared/index.mjs +3 -0
  344. package/esm2022/lib/metadata/shared/metadata.interface.mjs +2 -0
  345. package/esm2022/lib/metadata/shared/metadata.service.mjs +18 -0
  346. package/esm2022/lib/offline/geoDB/configFileToGeoDB.service.mjs +130 -0
  347. package/esm2022/lib/offline/geoDB/geoDB.enums.mjs +6 -0
  348. package/esm2022/lib/offline/geoDB/geoDB.interface.mjs +2 -0
  349. package/esm2022/lib/offline/geoDB/geoDB.service.mjs +172 -0
  350. package/esm2022/lib/offline/geoDB/index.mjs +5 -0
  351. package/esm2022/lib/offline/index.mjs +6 -0
  352. package/esm2022/lib/offline/layerDB/index.mjs +3 -0
  353. package/esm2022/lib/offline/layerDB/layerDB.interface.mjs +2 -0
  354. package/esm2022/lib/offline/layerDB/layerDB.service.mjs +83 -0
  355. package/esm2022/lib/offline/offline.interface.mjs +2 -0
  356. package/esm2022/lib/offline/offline.provider.mjs +50 -0
  357. package/esm2022/lib/offline/shared/geo-network.service.mjs +79 -0
  358. package/esm2022/lib/offline/shared/index.mjs +2 -0
  359. package/esm2022/lib/overlay/index.mjs +2 -0
  360. package/esm2022/lib/overlay/shared/index.mjs +4 -0
  361. package/esm2022/lib/overlay/shared/overlay.enum.mjs +8 -0
  362. package/esm2022/lib/overlay/shared/overlay.mjs +139 -0
  363. package/esm2022/lib/overlay/shared/overlay.utils.mjs +17 -0
  364. package/esm2022/lib/print/index.mjs +4 -0
  365. package/esm2022/lib/print/print/print.component.mjs +116 -0
  366. package/esm2022/lib/print/print-form/index.mjs +2 -0
  367. package/esm2022/lib/print/print-form/print-form.component.mjs +320 -0
  368. package/esm2022/lib/print/print.module.mjs +20 -0
  369. package/esm2022/lib/print/shared/geopdf.mjs +68 -0
  370. package/esm2022/lib/print/shared/index.mjs +5 -0
  371. package/esm2022/lib/print/shared/print.interface.mjs +2 -0
  372. package/esm2022/lib/print/shared/print.service.mjs +1136 -0
  373. package/esm2022/lib/print/shared/print.type.mjs +30 -0
  374. package/esm2022/lib/query/index.mjs +2 -0
  375. package/esm2022/lib/query/query.module.mjs +27 -0
  376. package/esm2022/lib/query/shared/index.mjs +8 -0
  377. package/esm2022/lib/query/shared/query-search-source.mjs +35 -0
  378. package/esm2022/lib/query/shared/query-search-source.providers.mjs +22 -0
  379. package/esm2022/lib/query/shared/query.directive.mjs +290 -0
  380. package/esm2022/lib/query/shared/query.enums.mjs +32 -0
  381. package/esm2022/lib/query/shared/query.interfaces.mjs +2 -0
  382. package/esm2022/lib/query/shared/query.service.mjs +753 -0
  383. package/esm2022/lib/query/shared/query.utils.mjs +45 -0
  384. package/esm2022/lib/search/index.mjs +10 -0
  385. package/esm2022/lib/search/search-bar/search-bar.component.mjs +483 -0
  386. package/esm2022/lib/search/search-bar/search-bar.module.mjs +19 -0
  387. package/esm2022/lib/search/search-results/index.mjs +5 -0
  388. package/esm2022/lib/search/search-results/save-feature-dialog.component.mjs +101 -0
  389. package/esm2022/lib/search/search-results/search-results-add-button.component.mjs +433 -0
  390. package/esm2022/lib/search/search-results/search-results-item.component.mjs +119 -0
  391. package/esm2022/lib/search/search-results/search-results.component.mjs +297 -0
  392. package/esm2022/lib/search/search-results/search-results.directive.mjs +7 -0
  393. package/esm2022/lib/search/search-results/search-results.module.mjs +20 -0
  394. package/esm2022/lib/search/search-selector/search-selector.component.mjs +118 -0
  395. package/esm2022/lib/search/search-selector/search-selector.module.mjs +19 -0
  396. package/esm2022/lib/search/search-settings/search-settings.component.mjs +264 -0
  397. package/esm2022/lib/search/search-settings/search-settings.module.mjs +19 -0
  398. package/esm2022/lib/search/search.module.mjs +77 -0
  399. package/esm2022/lib/search/shared/index.mjs +10 -0
  400. package/esm2022/lib/search/shared/search-pointer-summary.directive.mjs +328 -0
  401. package/esm2022/lib/search/shared/search-source-service.providers.mjs +20 -0
  402. package/esm2022/lib/search/shared/search-source.service.mjs +56 -0
  403. package/esm2022/lib/search/shared/search.enums.mjs +4 -0
  404. package/esm2022/lib/search/shared/search.interfaces.mjs +2 -0
  405. package/esm2022/lib/search/shared/search.provider.mjs +20 -0
  406. package/esm2022/lib/search/shared/search.service.mjs +149 -0
  407. package/esm2022/lib/search/shared/search.utils.mjs +92 -0
  408. package/esm2022/lib/search/shared/sources/cadastre.mjs +142 -0
  409. package/esm2022/lib/search/shared/sources/cadastre.providers.mjs +32 -0
  410. package/esm2022/lib/search/shared/sources/coordinates.interfaces.mjs +2 -0
  411. package/esm2022/lib/search/shared/sources/coordinates.mjs +168 -0
  412. package/esm2022/lib/search/shared/sources/coordinates.providers.mjs +52 -0
  413. package/esm2022/lib/search/shared/sources/icherche-icons.mjs +32 -0
  414. package/esm2022/lib/search/shared/sources/icherche.interfaces.mjs +2 -0
  415. package/esm2022/lib/search/shared/sources/icherche.mjs +816 -0
  416. package/esm2022/lib/search/shared/sources/icherche.providers.mjs +87 -0
  417. package/esm2022/lib/search/shared/sources/ilayer.interfaces.mjs +2 -0
  418. package/esm2022/lib/search/shared/sources/ilayer.mjs +339 -0
  419. package/esm2022/lib/search/shared/sources/ilayer.providers.mjs +58 -0
  420. package/esm2022/lib/search/shared/sources/index.mjs +23 -0
  421. package/esm2022/lib/search/shared/sources/nominatim.interfaces.mjs +2 -0
  422. package/esm2022/lib/search/shared/sources/nominatim.mjs +263 -0
  423. package/esm2022/lib/search/shared/sources/nominatim.providers.mjs +31 -0
  424. package/esm2022/lib/search/shared/sources/source.interfaces.mjs +13 -0
  425. package/esm2022/lib/search/shared/sources/source.mjs +221 -0
  426. package/esm2022/lib/search/shared/sources/storedqueries.interfaces.mjs +2 -0
  427. package/esm2022/lib/search/shared/sources/storedqueries.mjs +454 -0
  428. package/esm2022/lib/search/shared/sources/storedqueries.providers.mjs +56 -0
  429. package/esm2022/lib/search/shared/sources/workspace.interfaces.mjs +2 -0
  430. package/esm2022/lib/search/shared/sources/workspace.mjs +192 -0
  431. package/esm2022/lib/search/shared/sources/workspace.providers.mjs +31 -0
  432. package/esm2022/lib/style/index.mjs +5 -0
  433. package/esm2022/lib/style/shared/datasource/esri-style-generator.mjs +360 -0
  434. package/esm2022/lib/style/shared/datasource/index.mjs +2 -0
  435. package/esm2022/lib/style/shared/feature/feature-style.mjs +162 -0
  436. package/esm2022/lib/style/shared/feature/index.mjs +2 -0
  437. package/esm2022/lib/style/shared/font.enum.mjs +17 -0
  438. package/esm2022/lib/style/shared/index.mjs +5 -0
  439. package/esm2022/lib/style/shared/overlay/index.mjs +3 -0
  440. package/esm2022/lib/style/shared/overlay/overlay-marker-style.utils.mjs +39 -0
  441. package/esm2022/lib/style/shared/overlay/overlay-style.utils.mjs +88 -0
  442. package/esm2022/lib/style/shared/vector/commonVectorStyle.mjs +78 -0
  443. package/esm2022/lib/style/shared/vector/conversion.utils.mjs +27 -0
  444. package/esm2022/lib/style/shared/vector/index.mjs +4 -0
  445. package/esm2022/lib/style/shared/vector/vector-style.interface.mjs +2 -0
  446. package/esm2022/lib/style/style-list/index.mjs +5 -0
  447. package/esm2022/lib/style/style-list/style-list.interface.mjs +2 -0
  448. package/esm2022/lib/style/style-list/style-list.module.mjs +23 -0
  449. package/esm2022/lib/style/style-list/style-list.provider.mjs +21 -0
  450. package/esm2022/lib/style/style-list/style-list.service.mjs +52 -0
  451. package/esm2022/lib/style/style-modal/drawing/index.mjs +2 -0
  452. package/esm2022/lib/style/style-modal/drawing/style-modal-drawing.component.mjs +193 -0
  453. package/esm2022/lib/style/style-modal/index.mjs +5 -0
  454. package/esm2022/lib/style/style-modal/layer/index.mjs +2 -0
  455. package/esm2022/lib/style/style-modal/layer/style-modal-layer.component.mjs +142 -0
  456. package/esm2022/lib/style/style-modal/layer-button/index.mjs +2 -0
  457. package/esm2022/lib/style/style-modal/layer-button/style-modal-layer-button.component.mjs +44 -0
  458. package/esm2022/lib/style/style-modal/shared/index.mjs +2 -0
  459. package/esm2022/lib/style/style-modal/shared/style-modal.interface.mjs +2 -0
  460. package/esm2022/lib/style/style-service/draw-style.service.mjs +255 -0
  461. package/esm2022/lib/style/style-service/index.mjs +3 -0
  462. package/esm2022/lib/style/style-service/style.service.mjs +393 -0
  463. package/esm2022/lib/style/style.module.mjs +46 -0
  464. package/esm2022/lib/toast/index.mjs +2 -0
  465. package/esm2022/lib/toast/toast.component.mjs +99 -0
  466. package/esm2022/lib/toast/toast.module.mjs +24 -0
  467. package/esm2022/lib/utils/googleLinks.mjs +13 -0
  468. package/esm2022/lib/utils/id-generator.mjs +112 -0
  469. package/esm2022/lib/utils/index.mjs +5 -0
  470. package/esm2022/lib/utils/osmLinks.mjs +9 -0
  471. package/esm2022/lib/utils/propertyTypeDetector/index.mjs +3 -0
  472. package/esm2022/lib/utils/propertyTypeDetector/propertyTypeDetector.interface.mjs +2 -0
  473. package/esm2022/lib/utils/propertyTypeDetector/propertyTypeDetector.service.mjs +64 -0
  474. package/esm2022/lib/wkt/index.mjs +2 -0
  475. package/esm2022/lib/wkt/shared/index.mjs +2 -0
  476. package/esm2022/lib/wkt/shared/wkt.service.mjs +235 -0
  477. package/esm2022/lib/wkt/wkt.module.mjs +25 -0
  478. package/esm2022/lib/workspace/confirmation-popup/confirmation-popup.component.mjs +36 -0
  479. package/esm2022/lib/workspace/confirmation-popup/confirmation-popup.module.mjs +19 -0
  480. package/esm2022/lib/workspace/confirmation-popup/index.mjs +3 -0
  481. package/esm2022/lib/workspace/index.mjs +8 -0
  482. package/esm2022/lib/workspace/shared/edition-workspace.mjs +301 -0
  483. package/esm2022/lib/workspace/shared/edition-workspace.service.mjs +720 -0
  484. package/esm2022/lib/workspace/shared/feature-workspace.mjs +41 -0
  485. package/esm2022/lib/workspace/shared/feature-workspace.service.mjs +113 -0
  486. package/esm2022/lib/workspace/shared/index.mjs +8 -0
  487. package/esm2022/lib/workspace/shared/wfs-workspace.mjs +41 -0
  488. package/esm2022/lib/workspace/shared/wfs-workspace.service.mjs +121 -0
  489. package/esm2022/lib/workspace/shared/wms-workspace.service.mjs +248 -0
  490. package/esm2022/lib/workspace/shared/workspace.utils.mjs +188 -0
  491. package/esm2022/lib/workspace/widgets/index.mjs +4 -0
  492. package/esm2022/lib/workspace/widgets/ogc-filter/ogc-filter.component.mjs +48 -0
  493. package/esm2022/lib/workspace/widgets/ogc-filter/ogc-filter.module.mjs +19 -0
  494. package/esm2022/lib/workspace/widgets/widgets.mjs +15 -0
  495. package/esm2022/lib/workspace/workspace-selector/workspace-selector.directive.mjs +172 -0
  496. package/esm2022/lib/workspace/workspace-selector/workspace-selector.module.mjs +19 -0
  497. package/esm2022/lib/workspace/workspace-updator/workspace-updator.directive.mjs +137 -0
  498. package/esm2022/lib/workspace/workspace-updator/workspace-updator.module.mjs +19 -0
  499. package/esm2022/lib/workspace/workspace.module.mjs +32 -0
  500. package/esm2022/public_api.mjs +56 -0
  501. package/fesm2022/igo2-geo.mjs +717 -691
  502. package/fesm2022/igo2-geo.mjs.map +1 -1
  503. package/lib/datasource/shared/datasources/datasource.d.ts +2 -2
  504. package/lib/directions/shared/directions.service.d.ts +0 -1
  505. package/lib/offline/geoDB/geoDB.service.d.ts +1 -1
  506. package/lib/offline/layerDB/layerDB.service.d.ts +1 -1
  507. package/lib/style/style-list/style-list.provider.d.ts +8 -1
  508. package/lib/style/style-list/style-list.service.d.ts +1 -1
  509. package/package.json +16 -14
  510. package/src/lib/layer/layer-list/layer-list.theme.scss +1 -2
  511. package/src/lib/map/menu-button/menu-button.theming.scss +3 -3
  512. package/src/style/style.scss +1 -1
@@ -0,0 +1,522 @@
1
+ import { NumberUtils, uuid } from '@igo2/utils';
2
+ import olFeature from 'ol/Feature';
3
+ import OlGeoJSON from 'ol/format/GeoJSON';
4
+ import * as olGeom from 'ol/geom';
5
+ import * as olProj from 'ol/proj';
6
+ import * as olStyle from 'ol/style';
7
+ import { FeatureDataSource } from '../../datasource/shared/datasources/feature-datasource';
8
+ import { tryBindStoreLayer } from '../../feature/shared/feature-store.utils';
9
+ import { FEATURE, FeatureMotion } from '../../feature/shared/feature.enums';
10
+ import { tryAddLoadingStrategy } from '../../feature/shared/strategies.utils';
11
+ import { FeatureStoreLoadingStrategy } from '../../feature/shared/strategies/loading';
12
+ import { VectorLayer } from '../../layer/shared/layers/vector-layer';
13
+ import { createOverlayMarkerStyle } from '../../style/shared/overlay/overlay-marker-style.utils';
14
+ import { DirectionRelativePositionType, DirectionsType, ManeuverModifier, ManeuverType } from './directions.enum';
15
+ /**
16
+ * Updates the sorting of the stops in the provided StopsStore based on the specified field and direction.
17
+ *
18
+ * @param {StopsStore} stopsStore - The StopsStore to update the sorting for.
19
+ * @param {'asc' | 'desc'} [direction='asc'] - The direction of sorting ('asc' for ascending, 'desc' for descending).
20
+ * @param {string} [field='position'] - The field to sort the stops by.
21
+ */
22
+ export function updateStoreSorting(stopsStore, direction = 'asc', field = 'position') {
23
+ stopsStore.view.sort({
24
+ direction,
25
+ valueAccessor: (entity) => entity[field]
26
+ });
27
+ }
28
+ /**
29
+ * Computes the relative position of a stop in a list of stops.
30
+ *
31
+ * @param {number} stopIndex - The index of the stop.
32
+ * @param {number} stopListLength - The total number of stops.
33
+ * @return {DirectionRelativePositionType} The relative position of the stop.
34
+ */
35
+ export function computeRelativePosition(stopIndex, stopListLength) {
36
+ let relativePosition = DirectionRelativePositionType.Intermediate;
37
+ if (stopIndex === 0) {
38
+ relativePosition = DirectionRelativePositionType.Start;
39
+ }
40
+ else if (stopIndex === stopListLength) {
41
+ relativePosition = DirectionRelativePositionType.End;
42
+ }
43
+ return relativePosition;
44
+ }
45
+ /**
46
+ * Computes the position and relative position of stops in the given stopsStore.
47
+ *
48
+ * @param {StopsStore} stopsStore - The store containing the stops.
49
+ */
50
+ export function computeStopsPosition(deletedStopIndex, stopsStore) {
51
+ for (const stop of stopsStore.all()) {
52
+ stop.position =
53
+ stop.position > deletedStopIndex ? (stop.position -= 1) : stop.position;
54
+ stop.relativePosition = computeRelativePosition(stop.position, stopsStore.all().length - 1);
55
+ }
56
+ }
57
+ /**
58
+ * Adds a stop to the given stopsStore. The stop is always added as the last stop.
59
+ *
60
+ * @param {StopsStore} stopsStore - The store containing the stops.
61
+ * @return {Stop} The newly added stop.
62
+ */
63
+ export function addStopToStore(stopsStore) {
64
+ const id = uuid();
65
+ const stops = stopsStore.all();
66
+ const insertIndex = stops.length;
67
+ for (const stop of stopsStore.all()) {
68
+ stop.relativePosition = computeRelativePosition(stop.position, stops.length);
69
+ }
70
+ stopsStore.insert({
71
+ id,
72
+ position: insertIndex,
73
+ relativePosition: computeRelativePosition(insertIndex, stops.length)
74
+ });
75
+ updateStoreSorting(stopsStore);
76
+ return stopsStore.get(id);
77
+ }
78
+ /**
79
+ * Removes a stop from the given stopsStore and updates the positions of the remaining stops.
80
+ *
81
+ * @param {StopsStore} stopsStore - The store containing the stops.
82
+ * @param {Stop} stop - The stop to be removed.
83
+ */
84
+ export function removeStopFromStore(stopsStore, stop) {
85
+ stopsStore.delete(stop);
86
+ computeStopsPosition(stop.position, stopsStore);
87
+ }
88
+ /**
89
+ * Create a style for the directions steps, stops and route
90
+ * @param feature OlFeature
91
+ * @returns OL style function
92
+ */
93
+ export function directionsStyle(feature) {
94
+ const stepStyle = [
95
+ new olStyle.Style({
96
+ geometry: feature.getGeometry(),
97
+ image: new olStyle.Circle({
98
+ radius: 7,
99
+ stroke: new olStyle.Stroke({ color: '#FF0000', width: 3 })
100
+ })
101
+ })
102
+ ];
103
+ const stopStyle = createOverlayMarkerStyle({
104
+ text: feature.get('stopText'),
105
+ opacity: feature.get('stopOpacity'),
106
+ markerColor: feature.get('stopColor'),
107
+ markerOutlineColor: [255, 255, 255]
108
+ });
109
+ const routeStyle = [
110
+ new olStyle.Style({
111
+ stroke: new olStyle.Stroke({
112
+ color: `rgba(106, 121, 130, ${feature.get('active') ? 0.75 : 0})`,
113
+ width: 10
114
+ })
115
+ }),
116
+ new olStyle.Style({
117
+ stroke: new olStyle.Stroke({
118
+ color: `rgba(79, 169, 221, ${feature.get('active') ? 0.75 : 0})`,
119
+ width: 6
120
+ })
121
+ })
122
+ ];
123
+ if (feature.get('type') === DirectionsType.Stop) {
124
+ return stopStyle;
125
+ }
126
+ if (feature.get('type') === DirectionsType.Vertex) {
127
+ return stepStyle;
128
+ }
129
+ if (feature.get('type') === DirectionsType.Route) {
130
+ return routeStyle;
131
+ }
132
+ }
133
+ /**
134
+ * Initializes the stops feature store with the provided language service.
135
+ *
136
+ * @param {StopsFeatureStore} stopsFeatureStore - The stops feature store to initialize.
137
+ * @param {LanguageService} languageService - The language service used for translations.
138
+ */
139
+ export function initStopsFeatureStore(stopsFeatureStore, languageService) {
140
+ const loadingStrategy = new FeatureStoreLoadingStrategy({
141
+ motion: FeatureMotion.None
142
+ });
143
+ const stopsLayer = new VectorLayer({
144
+ isIgoInternalLayer: true,
145
+ id: 'igo-direction-stops-layer',
146
+ title: languageService.translate.instant('igo.geo.directions.layer.stops'),
147
+ zIndex: 911,
148
+ source: new FeatureDataSource(),
149
+ showInLayerList: true,
150
+ visible: true,
151
+ workspace: {
152
+ enabled: false
153
+ },
154
+ linkedLayers: {
155
+ linkId: 'igo-direction-stops-layer',
156
+ links: [
157
+ {
158
+ syncedDelete: true,
159
+ linkedIds: ['igo-direction-route-layer'],
160
+ properties: []
161
+ }
162
+ ]
163
+ },
164
+ exportable: true,
165
+ browsable: false,
166
+ style: directionsStyle
167
+ });
168
+ tryBindStoreLayer(stopsFeatureStore, stopsLayer);
169
+ tryAddLoadingStrategy(stopsFeatureStore, loadingStrategy);
170
+ }
171
+ /**
172
+ * Initializes the routes feature store with the provided language service.
173
+ *
174
+ * @param {StopsFeatureStore} routesFeatureStore - The routes feature store to initialize.
175
+ * @param {LanguageService} languageService - The language service used for translations.
176
+ */
177
+ export function initRoutesFeatureStore(routesFeatureStore, languageService) {
178
+ const loadingStrategy = new FeatureStoreLoadingStrategy({
179
+ motion: FeatureMotion.None
180
+ });
181
+ const routeLayer = new VectorLayer({
182
+ isIgoInternalLayer: true,
183
+ id: 'igo-direction-route-layer',
184
+ title: languageService.translate.instant('igo.geo.directions.layer.route'),
185
+ zIndex: 910,
186
+ source: new FeatureDataSource(),
187
+ showInLayerList: true,
188
+ visible: true,
189
+ workspace: {
190
+ enabled: false
191
+ },
192
+ linkedLayers: {
193
+ linkId: 'igo-direction-route-layer'
194
+ },
195
+ exportable: true,
196
+ browsable: false,
197
+ style: directionsStyle
198
+ });
199
+ tryBindStoreLayer(routesFeatureStore, routeLayer);
200
+ tryAddLoadingStrategy(routesFeatureStore, loadingStrategy);
201
+ }
202
+ /**
203
+ * Initializes the routes feature store.
204
+ *
205
+ * @param {StopsFeatureStore} stepsFeatureStore - The steps feature store to initialize.
206
+ */
207
+ export function initStepsFeatureStore(stepsFeatureStore) {
208
+ const loadingStrategy = new FeatureStoreLoadingStrategy({
209
+ motion: FeatureMotion.None
210
+ });
211
+ const stepLayer = new VectorLayer({
212
+ isIgoInternalLayer: true,
213
+ id: 'igo-direction-step-layer',
214
+ title: '',
215
+ zIndex: 910,
216
+ source: new FeatureDataSource(),
217
+ showInLayerList: false,
218
+ visible: true,
219
+ workspace: {
220
+ enabled: false
221
+ },
222
+ linkedLayers: {
223
+ linkId: 'igo-direction-route-layer'
224
+ },
225
+ exportable: false,
226
+ browsable: false,
227
+ style: directionsStyle
228
+ });
229
+ tryBindStoreLayer(stepsFeatureStore, stepLayer);
230
+ tryAddLoadingStrategy(stepsFeatureStore, loadingStrategy);
231
+ }
232
+ /**
233
+ * Adds a stop to the stopsFeatureStore.
234
+ *
235
+ * @param {Stop} stop - The stop to be added.
236
+ * @param {StopsFeatureStore} stopsFeatureStore - The stopsFeatureStore to add the stop to.
237
+ * @param {string} projection - The projection of the stop coordinates.
238
+ * @param {LanguageService} languageService - The language service for translating stop text.
239
+ */
240
+ export function addStopToStopsFeatureStore(stop, stopsFeatureStore, projection, languageService) {
241
+ let stopColor;
242
+ let stopText;
243
+ switch (stop.relativePosition) {
244
+ case DirectionRelativePositionType.Start:
245
+ stopColor = '#008000';
246
+ stopText = languageService.translate.instant('igo.geo.directions.input.start');
247
+ break;
248
+ case DirectionRelativePositionType.End:
249
+ stopColor = '#f64139';
250
+ stopText = languageService.translate.instant('igo.geo.directions.input.end');
251
+ break;
252
+ default:
253
+ stopColor = '#ffd700';
254
+ stopText =
255
+ languageService.translate.instant('igo.geo.directions.input.intermediate') +
256
+ ' #' +
257
+ stop.position;
258
+ break;
259
+ }
260
+ const point = new olGeom.Point(olProj.transform(stop.coordinates, projection, stopsFeatureStore.map.projectionCode));
261
+ const geojsonGeom = new OlGeoJSON().writeGeometryObject(point, {
262
+ featureProjection: stopsFeatureStore.map.projectionCode,
263
+ dataProjection: stopsFeatureStore.map.projectionCode
264
+ });
265
+ const previousStop = stopsFeatureStore.get(stop.id);
266
+ const previousStopRevision = previousStop
267
+ ? previousStop.meta.revision
268
+ : 0;
269
+ const stopFeatureStore = {
270
+ type: FEATURE,
271
+ geometry: geojsonGeom,
272
+ projection: stopsFeatureStore.map.projectionCode,
273
+ properties: {
274
+ id: stop.id,
275
+ type: DirectionsType.Stop,
276
+ stopText,
277
+ stopColor,
278
+ stopOpacity: 1,
279
+ stop
280
+ },
281
+ meta: {
282
+ id: stop.id,
283
+ revision: previousStopRevision + 1
284
+ },
285
+ ol: new olFeature({ point })
286
+ };
287
+ stopsFeatureStore.update(stopFeatureStore);
288
+ }
289
+ /**
290
+ * Adds a route to the routes feature store.
291
+ *
292
+ * @param {RoutesFeatureStore} routesFeatureStore - The routes feature store to add the route to.
293
+ * @param {Directions} directions - The directions object containing the geometry and other information.
294
+ * @param {string} projection - The projection of the geometry coordinates.
295
+ * @param {boolean} [active=false] - Indicates whether the direction is active or not. Default is false.
296
+ */
297
+ export function addRouteToRoutesFeatureStore(routesFeatureStore, directions, projection, active = false) {
298
+ const coordinate = directions.geometry.coordinates;
299
+ const linestring4326 = new olGeom.LineString(coordinate);
300
+ const linestringStore = linestring4326.transform(projection, routesFeatureStore.map.projectionCode);
301
+ const geojsonGeom = new OlGeoJSON().writeGeometryObject(linestringStore, {
302
+ featureProjection: routesFeatureStore.map.projectionCode,
303
+ dataProjection: routesFeatureStore.map.projectionCode
304
+ });
305
+ const previousRoute = routesFeatureStore.get(directions.id);
306
+ const previousRouteRevision = previousRoute
307
+ ? previousRoute.meta.revision
308
+ : 0;
309
+ const routeFeatureStore = {
310
+ type: FEATURE,
311
+ geometry: geojsonGeom,
312
+ projection: routesFeatureStore.map.projectionCode,
313
+ properties: {
314
+ id: directions.id,
315
+ type: DirectionsType.Route,
316
+ active,
317
+ directions
318
+ },
319
+ meta: {
320
+ id: directions.id,
321
+ revision: previousRouteRevision + 1
322
+ },
323
+ ol: new olFeature({ linestringStore })
324
+ };
325
+ routesFeatureStore.update(routeFeatureStore);
326
+ }
327
+ /**
328
+ * Formats the given distance in meters to a human-readable string.
329
+ *
330
+ * @param {number} meters - The distance in meters to be formatted.
331
+ * @return {string | undefined} The formatted distance string.
332
+ */
333
+ export function formatDistance(meters) {
334
+ if (meters === 0) {
335
+ return undefined;
336
+ }
337
+ if (meters < 1000) {
338
+ return `${Math.round(meters)} m`;
339
+ }
340
+ const kilometers = meters / 1000;
341
+ const roundToDecimal = kilometers >= 10 ? 1 : 0;
342
+ return `${NumberUtils.roundToNDecimal(kilometers, roundToDecimal)} km`.replace('.', ',');
343
+ }
344
+ /**
345
+ * Formats the given duration in seconds to a human-readable string.
346
+ *
347
+ * @param {number} seconds - The duration in seconds to be formatted.
348
+ * @return {string} The formatted duration string.
349
+ */
350
+ export function formatDuration(seconds) {
351
+ const hours = Math.floor(seconds / 3600);
352
+ const minutes = Math.floor((seconds % 3600) / 60);
353
+ if (hours) {
354
+ return `${hours} h ${minutes} min`;
355
+ }
356
+ if (minutes) {
357
+ return `${minutes} min`;
358
+ }
359
+ return '< 1 min';
360
+ }
361
+ export function formatStep(step, languageService, lastStep = false) {
362
+ const maneuverType = step.maneuver.type;
363
+ const maneuverModifier = step.maneuver.modifier;
364
+ const name = step.name;
365
+ const maneuverBearingAfter = step.maneuver.bearing_after;
366
+ const translate = languageService.translate;
367
+ const translatedManeuverBearingAfter = translateManeuverBearing(maneuverBearingAfter, languageService);
368
+ const translatedManeuverModifier = translateManeuverModifier(maneuverModifier, languageService);
369
+ let iconName = 'straight'; // arrow point up by default
370
+ let instruction = '';
371
+ if (maneuverType === ManeuverType.Turn) {
372
+ if (maneuverModifier === ManeuverModifier.Uturn ||
373
+ maneuverModifier === ManeuverModifier.Straight) {
374
+ instruction = translate.instant(`igo.geo.directions.results.maneuverType.turn.${maneuverModifier}`, {
375
+ maneuverModifier: translatedManeuverModifier,
376
+ name
377
+ });
378
+ if (maneuverModifier === ManeuverModifier.Uturn) {
379
+ iconName = 'u_turn_left';
380
+ }
381
+ }
382
+ else {
383
+ instruction = translate.instant('igo.geo.directions.results.maneuverType.turn.else', {
384
+ maneuverModifier: translatedManeuverModifier,
385
+ name
386
+ });
387
+ if (maneuverModifier === ManeuverModifier.SlightRight) {
388
+ iconName = 'turn_slight_right';
389
+ }
390
+ else if (maneuverModifier === ManeuverModifier.Right ||
391
+ maneuverModifier === ManeuverModifier.SharpRight) {
392
+ iconName = 'turn_right';
393
+ }
394
+ else if (maneuverModifier === ManeuverModifier.Left ||
395
+ maneuverModifier === ManeuverModifier.SharpLeft) {
396
+ iconName = 'turn_left';
397
+ }
398
+ else if (maneuverModifier === ManeuverModifier.SlightLeft) {
399
+ iconName = 'turn_slight_left';
400
+ }
401
+ }
402
+ }
403
+ else if (maneuverType === ManeuverType.NewName) {
404
+ instruction = translate.instant(`igo.geo.directions.results.maneuverType.new name`, {
405
+ name,
406
+ maneuverBearing: translatedManeuverBearingAfter
407
+ });
408
+ }
409
+ else if (maneuverType === ManeuverType.Depart) {
410
+ iconName = 'directions';
411
+ instruction = translate.instant(`igo.geo.directions.results.maneuverType.depart`, {
412
+ name,
413
+ maneuverBearing: translatedManeuverBearingAfter
414
+ });
415
+ }
416
+ else if (maneuverType === ManeuverType.Arrive) {
417
+ iconName = 'sports_score';
418
+ instruction = translate.instant(`igo.geo.directions.results.maneuverType.arrive.${lastStep ? 'lastStep' : 'intermediate'}`, {
419
+ name
420
+ });
421
+ }
422
+ else if (maneuverType === ManeuverType.Merge) {
423
+ instruction = translate.instant('igo.geo.directions.results.maneuverType.merge', {
424
+ name
425
+ });
426
+ iconName = 'merge';
427
+ }
428
+ else if (maneuverType === ManeuverType.OnRamp ||
429
+ maneuverType === ManeuverType.OffRamp) {
430
+ instruction = translate.instant(`igo.geo.directions.results.maneuverType.${maneuverType}`, {
431
+ maneuverModifier: translatedManeuverModifier
432
+ });
433
+ }
434
+ else if (maneuverType === ManeuverType.Fork) {
435
+ const directionKey = maneuverModifier.search('left') >= 0 ? 'left' : 'right';
436
+ iconName =
437
+ directionKey === 'left' ? 'turn_slight_left' : 'turn_slight_right';
438
+ instruction = translate.instant(`igo.geo.directions.results.maneuverType.fork.${directionKey}`, {
439
+ name
440
+ });
441
+ }
442
+ else if (maneuverType === ManeuverType.EndOfRoad ||
443
+ maneuverType === ManeuverType.UseLane ||
444
+ maneuverType === ManeuverType.Continue) {
445
+ if (maneuverType === ManeuverType.Continue) {
446
+ if (maneuverModifier === ManeuverModifier.Uturn) {
447
+ iconName = 'u_turn_left';
448
+ instruction = translate.instant(`igo.geo.directions.results.maneuverType.turn.${maneuverModifier}`, {
449
+ maneuverModifier: translatedManeuverModifier,
450
+ name
451
+ });
452
+ }
453
+ else {
454
+ instruction = translate.instant(`igo.geo.directions.results.maneuverType.${maneuverType}`, {
455
+ maneuverModifier: translatedManeuverModifier,
456
+ name
457
+ });
458
+ }
459
+ }
460
+ else {
461
+ if (maneuverModifier === ManeuverModifier.SharpRight ||
462
+ maneuverModifier === ManeuverModifier.Right) {
463
+ iconName = 'turn_right';
464
+ }
465
+ else if (maneuverModifier === ManeuverModifier.SharpLeft ||
466
+ maneuverModifier === ManeuverModifier.Left) {
467
+ iconName = 'turn_left';
468
+ }
469
+ else if (maneuverModifier === ManeuverModifier.SlightRight) {
470
+ iconName = 'turn_slight_right';
471
+ }
472
+ else if (maneuverModifier === ManeuverModifier.SlightLeft) {
473
+ iconName = 'turn_slight_left';
474
+ }
475
+ instruction = translate.instant(`igo.geo.directions.results.maneuverType.${maneuverType}`, {
476
+ maneuverModifier: translatedManeuverModifier,
477
+ name
478
+ });
479
+ }
480
+ }
481
+ else if (maneuverType === ManeuverType.Roundabout ||
482
+ maneuverType === ManeuverType.Rotary ||
483
+ maneuverType === ManeuverType.RoundaboutTurn ||
484
+ maneuverType === ManeuverType.ExitRoundabout) {
485
+ const roundaboutKey = maneuverType.replace('roundabout ', '');
486
+ instruction = translate.instant(`igo.geo.directions.results.maneuverType.${roundaboutKey}`, {
487
+ name
488
+ });
489
+ iconName = 'donut_large';
490
+ }
491
+ else if (maneuverType === ManeuverType.Notification) {
492
+ instruction = translate.instant('igo.geo.directions.results.maneuverType.notification');
493
+ }
494
+ return { instruction, iconName };
495
+ }
496
+ /**
497
+ * Translates a maneuver modifier into a human-readable string using the provided language service.
498
+ *
499
+ * @param {ManeuverModifier} maneuverModifier - The maneuver modifier to be translated.
500
+ * @param {LanguageService} languageService - The language service used for translation.
501
+ * @return {string | undefined} The translated maneuver modifier string, or undefined if the modifier is falsy.
502
+ */
503
+ export function translateManeuverModifier(maneuverModifier, languageService) {
504
+ const translate = languageService.translate;
505
+ return maneuverModifier
506
+ ? translate.instant(`igo.geo.directions.results.maneuverModifier.${maneuverModifier}`)
507
+ : undefined;
508
+ }
509
+ /**
510
+ * Translates the given bearing value into a human-readable direction using the provided language service.
511
+ *
512
+ * @param {number} bearing - The bearing value to be translated.
513
+ * @param {LanguageService} languageService - The language service used for translation.
514
+ * @return {string} The translated direction corresponding to the given bearing value.
515
+ */
516
+ export function translateManeuverBearing(bearing, languageService) {
517
+ const translate = languageService.translate;
518
+ const directions = ['n', 'ne', 'e', 'se', 's', 'sw', 'w', 'nw'];
519
+ const directionIndex = Math.round(bearing / 45) % 8;
520
+ return translate.instant(`igo.geo.directions.results.direction.${directions[directionIndex]}`);
521
+ }
522
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlyZWN0aW9ucy51dGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2dlby9zcmMvbGliL2RpcmVjdGlvbnMvc2hhcmVkL2RpcmVjdGlvbnMudXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFaEQsT0FBTyxTQUFTLE1BQU0sWUFBWSxDQUFDO0FBRW5DLE9BQU8sU0FBUyxNQUFNLG1CQUFtQixDQUFDO0FBQzFDLE9BQU8sS0FBSyxNQUFNLE1BQU0sU0FBUyxDQUFDO0FBRWxDLE9BQU8sS0FBSyxNQUFNLE1BQU0sU0FBUyxDQUFDO0FBQ2xDLE9BQU8sS0FBSyxPQUFPLE1BQU0sVUFBVSxDQUFDO0FBSXBDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHdEQUF3RCxDQUFDO0FBQzNGLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQzdFLE9BQU8sRUFBRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFFNUUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDOUUsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFDdEYsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQ3JFLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLHVEQUF1RCxDQUFDO0FBQ2pHLE9BQU8sRUFDTCw2QkFBNkIsRUFDN0IsY0FBYyxFQUNkLGdCQUFnQixFQUNoQixZQUFZLEVBQ2IsTUFBTSxtQkFBbUIsQ0FBQztBQWUzQjs7Ozs7O0dBTUc7QUFDSCxNQUFNLFVBQVUsa0JBQWtCLENBQ2hDLFVBQXNCLEVBQ3RCLFlBQTRCLEtBQUssRUFDakMsS0FBSyxHQUFHLFVBQVU7SUFFbEIsVUFBVSxDQUFDLElB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Q0FDdEMsT0FBZSxFQUNmLGVBQWdDO0lBRWhDLE1BQU0sU0FBUyxHQUFxQixlQUFlLENBQUMsU0FBUyxDQUFDO0lBQzlELE1BQU0sVUFBVSxHQUFhLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBRTFFLE1BQU0sY0FBYyxHQUFXLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUU1RCxPQUFPLFNBQVMsQ0FBQyxPQUFPLENBQ3RCLHdDQUF3QyxVQUFVLENBQUMsY0FBYyxDQUFDLEVBQUUsQ0FDckUsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBMYW5ndWFnZVNlcnZpY2UgfSBmcm9tICdAaWdvMi9jb3JlL2xhbmd1YWdlJztcbmltcG9ydCB7IE51bWJlclV0aWxzLCB1dWlkIH0gZnJvbSAnQGlnbzIvdXRpbHMnO1xuXG5pbXBvcnQgb2xGZWF0dXJlIGZyb20gJ29sL0ZlYXR1cmUnO1xuaW1wb3J0IHsgQ29vcmRpbmF0ZSB9IGZyb20gJ29sL2Nvb3JkaW5hdGUnO1xuaW1wb3J0IE9sR2VvSlNPTiBmcm9tICdvbC9mb3JtYXQvR2VvSlNPTic7XG5pbXBvcnQgKiBhcyBvbEdlb20gZnJvbSAnb2wvZ2VvbSc7XG5pbXBvcnQgdHlwZSB7IGRlZmF1bHQgYXMgT2xHZW9tZXRyeSB9IGZyb20gJ29sL2dlb20vR2VvbWV0cnknO1xuaW1wb3J0ICogYXMgb2xQcm9qIGZyb20gJ29sL3Byb2onO1xuaW1wb3J0ICogYXMgb2xTdHlsZSBmcm9tICdvbC9zdHlsZSc7XG5cbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcblxuaW1wb3J0IHsgRmVhdHVyZURhdGFTb3VyY2UgfSBmcm9tICcuLi8uLi9kYXRhc291cmNlL3NoYXJlZC9kYXRhc291cmNlcy9mZWF0dXJlLWRhdGFzb3VyY2UnO1xuaW1wb3J0IHsgdHJ5QmluZFN0b3JlTGF5ZXIgfSBmcm9tICcuLi8uLi9mZWF0dXJlL3NoYXJlZC9mZWF0dXJlLXN0b3JlLnV0aWxzJztcbmltcG9ydCB7IEZFQVRVUkUsIEZlYXR1cmVNb3Rpb24gfSBmcm9tICcuLi8uLi9mZWF0dXJlL3NoYXJlZC9mZWF0dXJlLmVudW1zJztcbmltcG9ydCB7IEZlYXR1cmVHZW9tZXRyeSB9IGZyb20gJy4uLy4uL2ZlYXR1cmUvc2hhcmVkL2ZlYXR1cmUuaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyB0cnlBZGRMb2FkaW5nU3RyYXRlZ3kgfSBmcm9tICcuLi8uLi9mZWF0dXJlL3NoYXJlZC9zdHJhdGVnaWVzLnV0aWxzJztcbmltcG9ydCB7IEZlYXR1cmVTdG9yZUxvYWRpbmdTdHJhdGVneSB9IGZyb20gJy4uLy4uL2ZlYXR1cmUvc2hhcmVkL3N0cmF0ZWdpZXMvbG9hZGluZyc7XG5pbXBvcnQgeyBWZWN0b3JMYXllciB9IGZyb20gJy4uLy4uL2xheWVyL3NoYXJlZC9sYXllcnMvdmVjdG9yLWxheWVyJztcbmltcG9ydCB7IGNyZWF0ZU92ZXJsYXlNYXJrZXJTdHlsZSB9IGZyb20gJy4uLy4uL3N0eWxlL3NoYXJlZC9vdmVybGF5L292ZXJsYXktbWFya2VyLXN0eWxlLnV0aWxzJztcbmltcG9ydCB7XG4gIERpcmVjdGlvblJlbGF0aXZlUG9zaXRpb25UeXBlLFxuICBEaXJlY3Rpb25zVHlwZSxcbiAgTWFuZXV2ZXJNb2RpZmllcixcbiAgTWFuZXV2ZXJUeXBlXG59IGZyb20gJy4vZGlyZWN0aW9ucy5lbnVtJztcbmltcG9ydCB7XG4gIERpcmVjdGlvbnMsXG4gIEZlYXR1cmVXaXRoRGlyZWN0aW9ucyxcbiAgRmVhdHVyZVdpdGhTdG9wLFxuICBJZ29TdGVwLFxuICBTdG9wXG59IGZyb20gJy4vZGlyZWN0aW9ucy5pbnRlcmZhY2UnO1xuaW1wb3J0IHtcbiAgUm91dGVzRmVhdHVyZVN0b3JlLFxuICBTdGVwc0ZlYXR1cmVTdG9yZSxcbiAgU3RvcHNGZWF0dXJlU3RvcmUsXG4gIFN0b3BzU3RvcmVcbn0gZnJvbSAnLi9zdG9yZSc7XG5cbi8qKlxuICogVXBkYXRlcyB0aGUgc29ydGluZyBvZiB0aGUgc3RvcHMgaW4gdGhlIHByb3ZpZGVkIFN0b3BzU3RvcmUgYmFzZWQgb24gdGhlIHNwZWNpZmllZCBmaWVsZCBhbmQgZGlyZWN0aW9uLlxuICpcbiAqIEBwYXJhbSB7U3RvcHNTdG9yZX0gc3RvcHNTdG9yZSAtIFRoZSBTdG9wc1N0b3JlIHRvIHVwZGF0ZSB0aGUgc29ydGluZyBmb3IuXG4gKiBAcGFyYW0geydhc2MnIHwgJ2Rlc2MnfSBbZGlyZWN0aW9uPSdhc2MnXSAtIFRoZSBkaXJlY3Rpb24gb2Ygc29ydGluZyAoJ2FzYycgZm9yIGFzY2VuZGluZywgJ2Rlc2MnIGZvciBkZXNjZW5kaW5nKS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBbZmllbGQ9J3Bvc2l0aW9uJ10gLSBUaGUgZmllbGQgdG8gc29ydCB0aGUgc3RvcHMgYnkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVTdG9yZVNvcnRpbmcoXG4gIHN0b3BzU3RvcmU6IFN0b3BzU3RvcmUsXG4gIGRpcmVjdGlvbjogJ2FzYycgfCAnZGVzYycgPSAnYXNjJyxcbiAgZmllbGQgPSAncG9zaXRpb24nXG4pOiB2b2lkIHtcbiAgc3RvcHNTdG9yZS52aWV3LnNvcnQoe1xuICAgIGRpcmVjdGlvbixcbiAgICB2YWx1ZUFjY2Vzc29yOiAoZW50aXR5OiBTdG9wKSA9PiBlbnRpdHlbZmllbGRdXG4gIH0pO1xufVxuXG4vKipcbiAqIENvbXB1dGVzIHRoZSByZWxhdGl2ZSBwb3NpdGlvbiBvZiBhIHN0b3AgaW4gYSBsaXN0IG9mIHN0b3BzLlxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSBzdG9wSW5kZXggLSBUaGUgaW5kZXggb2YgdGhlIHN0b3AuXG4gKiBAcGFyYW0ge251bWJlcn0gc3RvcExpc3RMZW5ndGggLSBUaGUgdG90YWwgbnVtYmVyIG9mIHN0b3BzLlxuICogQHJldHVybiB7RGlyZWN0aW9uUmVsYXRpdmVQb3NpdGlvblR5cGV9IFRoZSByZWxhdGl2ZSBwb3NpdGlvbiBvZiB0aGUgc3RvcC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbXB1dGVSZWxhdGl2ZVBvc2l0aW9uKFxuICBzdG9wSW5kZXg6IG51bWJlcixcbiAgc3RvcExpc3RMZW5ndGg6IG51bWJlclxuKTogRGlyZWN0aW9uUmVsYXRpdmVQb3NpdGlvblR5cGUge1xuICBsZXQgcmVsYXRpdmVQb3NpdGlvbjogRGlyZWN0aW9uUmVsYXRpdmVQb3NpdGlvblR5cGUgPVxuICAgIERpcmVjdGlvblJlbGF0aXZlUG9zaXRpb25UeXBlLkludGVybWVkaWF0ZTtcbiAgaWYgKHN0b3BJbmRleCA9PT0gMCkge1xuICAgIHJlbGF0aXZlUG9zaXRpb24gPSBEaXJlY3Rpb25SZWxhdGl2ZVBvc2l0aW9uVHlwZS5TdGFydDtcbiAgfSBlbHNlIGlmIChzdG9wSW5kZXggPT09IHN0b3BMaXN0TGVuZ3RoKSB7XG4gICAgcmVsYXRpdmVQb3NpdGlvbiA9IERpcmVjdGlvblJlbGF0aXZlUG9zaXRpb25UeXBlLkVuZDtcbiAgfVxuICByZXR1cm4gcmVsYXRpdmVQb3NpdGlvbjtcbn1cblxuLyoqXG4gKiBDb21wdXRlcyB0aGUgcG9zaXRpb24gYW5kIHJlbGF0aXZlIHBvc2l0aW9uIG9mIHN0b3BzIGluIHRoZSBnaXZlbiBzdG9wc1N0b3JlLlxuICpcbiAqIEBwYXJhbSB7U3RvcHNTdG9yZX0gc3RvcHNTdG9yZSAtIFRoZSBzdG9yZSBjb250YWluaW5nIHRoZSBzdG9wcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbXB1dGVTdG9wc1Bvc2l0aW9uKFxuICBkZWxldGVkU3RvcEluZGV4OiBudW1iZXIsXG4gIHN0b3BzU3RvcmU6IFN0b3BzU3RvcmVcbik6IHZvaWQge1xuICBmb3IgKGNvbnN0IHN0b3Agb2Ygc3RvcHNTdG9yZS5hbGwoKSkge1xuICAgIHN0b3AucG9zaXRpb24gPVxuICAgICAgc3RvcC5wb3NpdGlvbiA+IGRlbGV0ZWRTdG9wSW5kZXggPyAoc3RvcC5wb3NpdGlvbiAtPSAxKSA6IHN0b3AucG9zaXRpb247XG4gICAgc3RvcC5yZWxhdGl2ZVBvc2l0aW9uID0gY29tcHV0ZVJlbGF0aXZlUG9zaXRpb24oXG4gICAgICBzdG9wLnBvc2l0aW9uLFxuICAgICAgc3RvcHNTdG9yZS5hbGwoKS5sZW5ndGggLSAxXG4gICAgKTtcbiAgfVxufVxuXG4vKipcbiAqIEFkZHMgYSBzdG9wIHRvIHRoZSBnaXZlbiBzdG9wc1N0b3JlLiBUaGUgc3RvcCBpcyBhbHdheXMgYWRkZWQgYXMgdGhlIGxhc3Qgc3RvcC5cbiAqXG4gKiBAcGFyYW0ge1N0b3BzU3RvcmV9IHN0b3BzU3RvcmUgLSBUaGUgc3RvcmUgY29udGFpbmluZyB0aGUgc3RvcHMuXG4gKiBAcmV0dXJuIHtTdG9wfSBUaGUgbmV3bHkgYWRkZWQgc3RvcC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFkZFN0b3BUb1N0b3JlKHN0b3BzU3RvcmU6IFN0b3BzU3RvcmUpOiBTdG9wIHtcbiAgY29uc3QgaWQ6IHN0cmluZyA9IHV1aWQoKTtcbiAgY29uc3Qgc3RvcHM6IFN0b3BbXSA9IHN0b3BzU3RvcmUuYWxsKCk7XG4gIGNvbnN0IGluc2VydEluZGV4ID0gc3RvcHMubGVuZ3RoO1xuXG4gIGZvciAoY29uc3Qgc3RvcCBvZiBzdG9wc1N0b3JlLmFsbCgpKSB7XG4gICAgc3RvcC5yZWxhdGl2ZVBvc2l0aW9uID0gY29tcHV0ZVJlbGF0aXZlUG9zaXRpb24oXG4gICAgICBzdG9wLnBvc2l0aW9uLFxuICAgICAgc3RvcHMubGVuZ3RoXG4gICAgKTtcbiAgfVxuXG4gIHN0b3BzU3RvcmUuaW5zZXJ0KHtcbiAgICBpZCxcbiAgICBwb3NpdGlvbjogaW5zZXJ0SW5kZXgsXG4gICAgcmVsYXRpdmVQb3NpdGlvbjogY29tcHV0ZVJlbGF0aXZlUG9zaXRpb24oaW5zZXJ0SW5kZXgsIHN0b3BzLmxlbmd0aClcbiAgfSk7XG5cbiAgdXBkYXRlU3RvcmVTb3J0aW5nKHN0b3BzU3RvcmUpO1xuICByZXR1cm4gc3RvcHNTdG9yZS5nZXQoaWQpO1xufVxuXG4vKipcbiAqIFJlbW92ZXMgYSBzdG9wIGZyb20gdGhlIGdpdmVuIHN0b3BzU3RvcmUgYW5kIHVwZGF0ZXMgdGhlIHBvc2l0aW9ucyBvZiB0aGUgcmVtYWluaW5nIHN0b3BzLlxuICpcbiAqIEBwYXJhbSB7U3RvcHNTdG9yZX0gc3RvcHNTdG9yZSAtIFRoZSBzdG9yZSBjb250YWluaW5nIHRoZSBzdG9wcy5cbiAqIEBwYXJhbSB7U3RvcH0gc3RvcCAtIFRoZSBzdG9wIHRvIGJlIHJlbW92ZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVTdG9wRnJvbVN0b3JlKHN0b3BzU3RvcmU6IFN0b3BzU3RvcmUsIHN0b3A6IFN0b3ApOiB2b2lkIHtcbiAgc3RvcHNTdG9yZS5kZWxldGUoc3RvcCk7XG4gIGNvbXB1dGVTdG9wc1Bvc2l0aW9uKHN0b3AucG9zaXRpb24sIHN0b3BzU3RvcmUpO1xufVxuXG4vKipcbiAqIENyZWF0ZSBhIHN0eWxlIGZvciB0aGUgZGlyZWN0aW9ucyBzdGVwcywgc3RvcHMgYW5kIHJvdXRlXG4gKiBAcGFyYW0gZmVhdHVyZSBPbEZlYXR1cmVcbiAqIEByZXR1cm5zIE9MIHN0eWxlIGZ1bmN0aW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkaXJlY3Rpb25zU3R5bGUoXG4gIGZlYXR1cmU6IG9sRmVhdHVyZTxPbEdlb21ldHJ5PlxuKTogb2xTdHlsZS5TdHlsZSB8IG9sU3R5bGUuU3R5bGVbXSB7XG4gIGNvbnN0IHN0ZXBTdHlsZSA9IFtcbiAgICBuZXcgb2xTdHlsZS5TdHlsZSh7XG4gICAgICBnZW9tZXRyeTogZmVhdHVyZS5nZXRHZW9tZXRyeSgpLFxuICAgICAgaW1hZ2U6IG5ldyBvbFN0eWxlLkNpcmNsZSh7XG4gICAgICAgIHJhZGl1czogNyxcbiAgICAgICAgc3Ryb2tlOiBuZXcgb2xTdHlsZS5TdHJva2UoeyBjb2xvcjogJyNGRjAwMDAnLCB3aWR0aDogMyB9KVxuICAgICAgfSlcbiAgICB9KVxuICBdO1xuXG4gIGNvbnN0IHN0b3BTdHlsZTogb2xTdHlsZS5TdHlsZSA9IGNyZWF0ZU92ZXJsYXlNYXJrZXJTdHlsZSh7XG4gICAgdGV4dDogZmVhdHVyZS5nZXQoJ3N0b3BUZXh0JyksXG4gICAgb3BhY2l0eTogZmVhdHVyZS5nZXQoJ3N0b3BPcGFjaXR5JyksXG4gICAgbWFya2VyQ29sb3I6IGZlYXR1cmUuZ2V0KCdzdG9wQ29sb3InKSxcbiAgICBtYXJrZXJPdXRsaW5lQ29sb3I6IFsyNTUsIDI1NSwgMjU1XVxuICB9KTtcblxuICBjb25zdCByb3V0ZVN0eWxlOiBvbFN0eWxlLlN0eWxlW10gPSBbXG4gICAgbmV3IG9sU3R5bGUuU3R5bGUoe1xuICAgICAgc3Ryb2tlOiBuZXcgb2xTdHlsZS5TdHJva2Uoe1xuICAgICAgICBjb2xvcjogYHJnYmEoMTA2LCAxMjEsIDEzMCwgJHtmZWF0dXJlLmdldCgnYWN0aXZlJykgPyAwLjc1IDogMH0pYCxcbiAgICAgICAgd2lkdGg6IDEwXG4gICAgICB9KVxuICAgIH0pLFxuICAgIG5ldyBvbFN0eWxlLlN0eWxlKHtcbiAgICAgIHN0cm9rZTogbmV3IG9sU3R5bGUuU3Ryb2tlKHtcbiAgICAgICAgY29sb3I6IGByZ2JhKDc5LCAxNjksIDIyMSwgJHtmZWF0dXJlLmdldCgnYWN0aXZlJykgPyAwLjc1IDogMH0pYCxcbiAgICAgICAgd2lkdGg6IDZcbiAgICAgIH0pXG4gICAgfSlcbiAgXTtcblxuICBpZiAoZmVhdHVyZS5nZXQoJ3R5cGUnKSA9PT0gRGlyZWN0aW9uc1R5cGUuU3RvcCkge1xuICAgIHJldHVybiBzdG9wU3R5bGU7XG4gIH1cbiAgaWYgKGZlYXR1cmUuZ2V0KCd0eXBlJykgPT09IERpcmVjdGlvbnNUeXBlLlZlcnRleCkge1xuICAgIHJldHVybiBzdGVwU3R5bGU7XG4gIH1cbiAgaWYgKGZlYXR1cmUuZ2V0KCd0eXBlJykgPT09IERpcmVjdGlvbnNUeXBlLlJvdXRlKSB7XG4gICAgcmV0dXJuIHJvdXRlU3R5bGU7XG4gIH1cbn1cblxuLyoqXG4gKiBJbml0aWFsaXplcyB0aGUgc3RvcHMgZmVhdHVyZSBzdG9yZSB3aXRoIHRoZSBwcm92aWRlZCBsYW5ndWFnZSBzZXJ2aWNlLlxuICpcbiAqIEBwYXJhbSB7U3RvcHNGZWF0dXJlU3RvcmV9IHN0b3BzRmVhdHVyZVN0b3JlIC0gVGhlIHN0b3BzIGZlYXR1cmUgc3RvcmUgdG8gaW5pdGlhbGl6ZS5cbiAqIEBwYXJhbSB7TGFuZ3VhZ2VTZXJ2aWNlfSBsYW5ndWFnZVNlcnZpY2UgLSBUaGUgbGFuZ3VhZ2Ugc2VydmljZSB1c2VkIGZvciB0cmFuc2xhdGlvbnMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpbml0U3RvcHNGZWF0dXJlU3RvcmUoXG4gIHN0b3BzRmVhdHVyZVN0b3JlOiBTdG9wc0ZlYXR1cmVTdG9yZSxcbiAgbGFuZ3VhZ2VTZXJ2aWNlOiBMYW5ndWFnZVNlcnZpY2Vcbik6IHZvaWQge1xuICBjb25zdCBsb2FkaW5nU3RyYXRlZ3k6IEZlYXR1cmVTdG9yZUxvYWRpbmdTdHJhdGVneSA9XG4gICAgbmV3IEZlYXR1cmVTdG9yZUxvYWRpbmdTdHJhdGVneSh7XG4gICAgICBtb3Rpb246IEZlYXR1cmVNb3Rpb24uTm9uZVxuICAgIH0pO1xuXG4gIGNvbnN0IHN0b3BzTGF5ZXI6IFZlY3RvckxheWVyID0gbmV3IFZlY3RvckxheWVyKHtcbiAgICBpc0lnb0ludGVybmFsTGF5ZXI6IHRydWUsXG4gICAgaWQ6ICdpZ28tZGlyZWN0aW9uLXN0b3BzLWxheWVyJyxcbiAgICB0aXRsZTogbGFuZ3VhZ2VTZXJ2aWNlLnRyYW5zbGF0ZS5pbnN0YW50KCdpZ28uZ2VvLmRpcmVjdGlvbnMubGF5ZXIuc3RvcHMnKSxcbiAgICB6SW5kZXg6IDkxMSxcbiAgICBzb3VyY2U6IG5ldyBGZWF0dXJlRGF0YVNvdXJjZSgpLFxuICAgIHNob3dJbkxheWVyTGlzdDogdHJ1ZSxcbiAgICB2aXNpYmxlOiB0cnVlLFxuICAgIHdvcmtzcGFjZToge1xuICAgICAgZW5hYmxlZDogZmFsc2VcbiAgICB9LFxuICAgIGxpbmtlZExheWVyczoge1xuICAgICAgbGlua0lkOiAnaWdvLWRpcmVjdGlvbi1zdG9wcy1sYXllcicsXG4gICAgICBsaW5rczogW1xuICAgICAgICB7XG4gICAgICAgICAgc3luY2VkRGVsZXRlOiB0cnVlLFxuICAgICAgICAgIGxpbmtlZElkczogWydpZ28tZGlyZWN0aW9uLXJvdXRlLWxheWVyJ10sXG4gICAgICAgICAgcHJvcGVydGllczogW11cbiAgICAgICAgfVxuICAgICAgXVxuICAgIH0sXG4gICAgZXhwb3J0YWJsZTogdHJ1ZSxcbiAgICBicm93c2FibGU6IGZhbHNlLFxuICAgIHN0eWxlOiBkaXJlY3Rpb25zU3R5bGVcbiAgfSk7XG4gIHRyeUJpbmRTdG9yZUxheWVyKHN0b3BzRmVhdHVyZVN0b3JlLCBzdG9wc0xheWVyKTtcbiAgdHJ5QWRkTG9hZGluZ1N0cmF0ZWd5KHN0b3BzRmVhdHVyZVN0b3JlLCBsb2FkaW5nU3RyYXRlZ3kpO1xufVxuXG4vKipcbiAqIEluaXRpYWxpemVzIHRoZSByb3V0ZXMgZmVhdHVyZSBzdG9yZSB3aXRoIHRoZSBwcm92aWRlZCBsYW5ndWFnZSBzZXJ2aWNlLlxuICpcbiAqIEBwYXJhbSB7U3RvcHNGZWF0dXJlU3RvcmV9IHJvdXRlc0ZlYXR1cmVTdG9yZSAtIFRoZSByb3V0ZXMgZmVhdHVyZSBzdG9yZSB0byBpbml0aWFsaXplLlxuICogQHBhcmFtIHtMYW5ndWFnZVNlcnZpY2V9IGxhbmd1YWdlU2VydmljZSAtIFRoZSBsYW5ndWFnZSBzZXJ2aWNlIHVzZWQgZm9yIHRyYW5zbGF0aW9ucy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGluaXRSb3V0ZXNGZWF0dXJlU3RvcmUoXG4gIHJvdXRlc0ZlYXR1cmVTdG9yZTogUm91dGVzRmVhdHVyZVN0b3JlLFxuICBsYW5ndWFnZVNlcnZpY2U6IExhbmd1YWdlU2VydmljZVxuKTogdm9pZCB7XG4gIGNvbnN0IGxvYWRpbmdTdHJhdGVneTogRmVhdHVyZVN0b3JlTG9hZGluZ1N0cmF0ZWd5ID1cbiAgICBuZXcgRmVhdHVyZVN0b3JlTG9hZGluZ1N0cmF0ZWd5KHtcbiAgICAgIG1vdGlvbjogRmVhdHVyZU1vdGlvbi5Ob25lXG4gICAgfSk7XG5cbiAgY29uc3Qgcm91dGVMYXllcjogVmVjdG9yTGF5ZXIgPSBuZXcgVmVjdG9yTGF5ZXIoe1xuICAgIGlzSWdvSW50ZXJuYWxMYXllcjogdHJ1ZSxcbiAgICBpZDogJ2lnby1kaXJlY3Rpb24tcm91dGUtbGF5ZXInLFxuICAgIHRpdGxlOiBsYW5ndWFnZVNlcnZpY2UudHJhbnNsYXRlLmluc3RhbnQoJ2lnby5nZW8uZGlyZWN0aW9ucy5sYXllci5yb3V0ZScpLFxuICAgIHpJbmRleDogOTEwLFxuICAgIHNvdXJjZTogbmV3IEZlYXR1cmVEYXRhU291cmNlKCksXG4gICAgc2hvd0luTGF5ZXJMaXN0OiB0cnVlLFxuICAgIHZpc2libGU6IHRydWUsXG4gICAgd29ya3NwYWNlOiB7XG4gICAgICBlbmFibGVkOiBmYWxzZVxuICAgIH0sXG4gICAgbGlua2VkTGF5ZXJzOiB7XG4gICAgICBsaW5rSWQ6ICdpZ28tZGlyZWN0aW9uLXJvdXRlLWxheWVyJ1xuICAgIH0sXG4gICAgZXhwb3J0YWJsZTogdHJ1ZSxcbiAgICBicm93c2FibGU6IGZhbHNlLFxuICAgIHN0eWxlOiBkaXJlY3Rpb25zU3R5bGVcbiAgfSk7XG4gIHRyeUJpbmRTdG9yZUxheWVyKHJvdXRlc0ZlYXR1cmVTdG9yZSwgcm91dGVMYXllcik7XG4gIHRyeUFkZExvYWRpbmdTdHJhdGVneShyb3V0ZXNGZWF0dXJlU3RvcmUsIGxvYWRpbmdTdHJhdGVneSk7XG59XG5cbi8qKlxuICogSW5pdGlhbGl6ZXMgdGhlIHJvdXRlcyBmZWF0dXJlIHN0b3JlLlxuICpcbiAqIEBwYXJhbSB7U3RvcHNGZWF0dXJlU3RvcmV9IHN0ZXBzRmVhdHVyZVN0b3JlIC0gVGhlIHN0ZXBzIGZlYXR1cmUgc3RvcmUgdG8gaW5pdGlhbGl6ZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGluaXRTdGVwc0ZlYXR1cmVTdG9yZShzdGVwc0ZlYXR1cmVTdG9yZTogU3RlcHNGZWF0dXJlU3RvcmUpIHtcbiAgY29uc3QgbG9hZGluZ1N0cmF0ZWd5OiBGZWF0dXJlU3RvcmVMb2FkaW5nU3RyYXRlZ3kgPVxuICAgIG5ldyBGZWF0dXJlU3RvcmVMb2FkaW5nU3RyYXRlZ3koe1xuICAgICAgbW90aW9uOiBGZWF0dXJlTW90aW9uLk5vbmVcbiAgICB9KTtcblxuICBjb25zdCBzdGVwTGF5ZXI6IFZlY3RvckxheWVyID0gbmV3IFZlY3RvckxheWVyKHtcbiAgICBpc0lnb0ludGVybmFsTGF5ZXI6IHRydWUsXG4gICAgaWQ6ICdpZ28tZGlyZWN0aW9uLXN0ZXAtbGF5ZXInLFxuICAgIHRpdGxlOiAnJyxcbiAgICB6SW5kZXg6IDkxMCxcbiAgICBzb3VyY2U6IG5ldyBGZWF0dXJlRGF0YVNvdXJjZSgpLFxuICAgIHNob3dJbkxheWVyTGlzdDogZmFsc2UsXG4gICAgdmlzaWJsZTogdHJ1ZSxcbiAgICB3b3Jrc3BhY2U6IHtcbiAgICAgIGVuYWJsZWQ6IGZhbHNlXG4gICAgfSxcbiAgICBsaW5rZWRMYXllcnM6IHtcbiAgICAgIGxpbmtJZDogJ2lnby1kaXJlY3Rpb24tcm91dGUtbGF5ZXInXG4gICAgfSxcbiAgICBleHBvcnRhYmxlOiBmYWxzZSxcbiAgICBicm93c2FibGU6IGZhbHNlLFxuICAgIHN0eWxlOiBkaXJlY3Rpb25zU3R5bGVcbiAgfSk7XG4gIHRyeUJpbmRTdG9yZUxheWVyKHN0ZXBzRmVhdHVyZVN0b3JlLCBzdGVwTGF5ZXIpO1xuICB0cnlBZGRMb2FkaW5nU3RyYXRlZ3koc3RlcHNGZWF0dXJlU3RvcmUsIGxvYWRpbmdTdHJhdGVneSk7XG59XG5cbi8qKlxuICogQWRkcyBhIHN0b3AgdG8gdGhlIHN0b3BzRmVhdHVyZVN0b3JlLlxuICpcbiAqIEBwYXJhbSB7U3RvcH0gc3RvcCAtIFRoZSBzdG9wIHRvIGJlIGFkZGVkLlxuICogQHBhcmFtIHtTdG9wc0ZlYXR1cmVTdG9yZX0gc3RvcHNGZWF0dXJlU3RvcmUgLSBUaGUgc3RvcHNGZWF0dXJlU3RvcmUgdG8gYWRkIHRoZSBzdG9wIHRvLlxuICogQHBhcmFtIHtzdHJpbmd9IHByb2plY3Rpb24gLSBUaGUgcHJvamVjdGlvbiBvZiB0aGUgc3RvcCBjb29yZGluYXRlcy5cbiAqIEBwYXJhbSB7TGFuZ3VhZ2VTZXJ2aWNlfSBsYW5ndWFnZVNlcnZpY2UgLSBUaGUgbGFuZ3VhZ2Ugc2VydmljZSBmb3IgdHJhbnNsYXRpbmcgc3RvcCB0ZXh0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gYWRkU3RvcFRvU3RvcHNGZWF0dXJlU3RvcmUoXG4gIHN0b3A6IFN0b3AsXG4gIHN0b3BzRmVhdHVyZVN0b3JlOiBTdG9wc0ZlYXR1cmVTdG9yZSxcbiAgcHJvamVjdGlvbjogc3RyaW5nLFxuICBsYW5ndWFnZVNlcnZpY2U6IExhbmd1YWdlU2VydmljZVxuKTogdm9pZCB7XG4gIGxldCBzdG9wQ29sb3I6IHN0cmluZztcbiAgbGV0IHN0b3BUZXh0OiBzdHJpbmc7XG5cbiAgc3dpdGNoIChzdG9wLnJlbGF0aXZlUG9zaXRpb24pIHtcbiAgICBjYXNlIERpcmVjdGlvblJlbGF0aXZlUG9zaXRpb25UeXBlLlN0YXJ0OlxuICAgICAgc3RvcENvbG9yID0gJyMwMDgwMDAnO1xuICAgICAgc3RvcFRleHQgPSBsYW5ndWFnZVNlcnZpY2UudHJhbnNsYXRlLmluc3RhbnQoXG4gICAgICAgICdpZ28uZ2VvLmRpcmVjdGlvbnMuaW5wdXQuc3RhcnQnXG4gICAgICApO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBEaXJlY3Rpb25SZWxhdGl2ZVBvc2l0aW9uVHlwZS5FbmQ6XG4gICAgICBzdG9wQ29sb3IgPSAnI2Y2NDEzOSc7XG4gICAgICBzdG9wVGV4dCA9IGxhbmd1YWdlU2VydmljZS50cmFuc2xhdGUuaW5zdGFudChcbiAgICAgICAgJ2lnby5nZW8uZGlyZWN0aW9ucy5pbnB1dC5lbmQnXG4gICAgICApO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIHN0b3BDb2xvciA9ICcjZmZkNzAwJztcbiAgICAgIHN0b3BUZXh0ID1cbiAgICAgICAgbGFuZ3VhZ2VTZXJ2aWNlLnRyYW5zbGF0ZS5pbnN0YW50KFxuICAgICAgICAgICdpZ28uZ2VvLmRpcmVjdGlvbnMuaW5wdXQuaW50ZXJtZWRpYXRlJ1xuICAgICAgICApICtcbiAgICAgICAgJyAjJyArXG4gICAgICAgIHN0b3AucG9zaXRpb247XG4gICAgICBicmVhaztcbiAgfVxuXG4gIGNvbnN0IHBvaW50OiBvbEdlb20uUG9pbnQgPSBuZXcgb2xHZW9tLlBvaW50KFxuICAgIG9sUHJvai50cmFuc2Zvcm0oXG4gICAgICBzdG9wLmNvb3JkaW5hdGVzLFxuICAgICAgcHJvamVjdGlvbixcbiAgICAgIHN0b3BzRmVhdHVyZVN0b3JlLm1hcC5wcm9qZWN0aW9uQ29kZVxuICAgIClcbiAgKTtcblxuICBjb25zdCBnZW9qc29uR2VvbTogRmVhdHVyZUdlb21ldHJ5ID0gbmV3IE9sR2VvSlNPTigpLndyaXRlR2VvbWV0cnlPYmplY3QoXG4gICAgcG9pbnQsXG4gICAge1xuICAgICAgZmVhdHVyZVByb2plY3Rpb246IHN0b3BzRmVhdHVyZVN0b3JlLm1hcC5wcm9qZWN0aW9uQ29kZSxcbiAgICAgIGRhdGFQcm9qZWN0aW9uOiBzdG9wc0ZlYXR1cmVTdG9yZS5tYXAucHJvamVjdGlvbkNvZGVcbiAgICB9XG4gICkgYXMgRmVhdHVyZUdlb21ldHJ5O1xuXG4gIGNvbnN0IHByZXZpb3VzU3RvcDogRmVhdHVyZVdpdGhTdG9wID0gc3RvcHNGZWF0dXJlU3RvcmUuZ2V0KHN0b3AuaWQpO1xuICBjb25zdCBwcmV2aW91c1N0b3BSZXZpc2lvbjogbnVtYmVyID0gcHJldmlvdXNTdG9wXG4gICAgPyBwcmV2aW91c1N0b3AubWV0YS5yZXZpc2lvblxuICAgIDogMDtcblxuICBjb25zdCBzdG9wRmVhdHVyZVN0b3JlOiBGZWF0dXJlV2l0aFN0b3AgPSB7XG4gICAgdHlwZTogRkVBVFVSRSxcbiAgICBnZW9tZXRyeTogZ2VvanNvbkdlb20sXG4gICAgcHJvamVjdGlvbjogc3RvcHNGZWF0dXJlU3RvcmUubWFwLnByb2plY3Rpb25Db2RlLFxuICAgIHByb3BlcnRpZXM6IHtcbiAgICAgIGlkOiBzdG9wLmlkLFxuICAgICAgdHlwZTogRGlyZWN0aW9uc1R5cGUuU3RvcCxcbiAgICAgIHN0b3BUZXh0LFxuICAgICAgc3RvcENvbG9yLFxuICAgICAgc3RvcE9wYWNpdHk6IDEsXG4gICAgICBzdG9wXG4gICAgfSxcbiAgICBtZXRhOiB7XG4gICAgICBpZDogc3RvcC5pZCxcbiAgICAgIHJldmlzaW9uOiBwcmV2aW91c1N0b3BSZXZpc2lvbiArIDFcbiAgICB9LFxuICAgIG9sOiBuZXcgb2xGZWF0dXJlKHsgcG9pbnQgfSlcbiAgfTtcbiAgc3RvcHNGZWF0dXJlU3RvcmUudXBkYXRlKHN0b3BGZWF0dXJlU3RvcmUpO1xufVxuXG4vKipcbiAqIEFkZHMgYSByb3V0ZSB0byB0aGUgcm91dGVzIGZlYXR1cmUgc3RvcmUuXG4gKlxuICogQHBhcmFtIHtSb3V0ZXNGZWF0dXJlU3RvcmV9IHJvdXRlc0ZlYXR1cmVTdG9yZSAtIFRoZSByb3V0ZXMgZmVhdHVyZSBzdG9yZSB0byBhZGQgdGhlIHJvdXRlIHRvLlxuICogQHBhcmFtIHtEaXJlY3Rpb25zfSBkaXJlY3Rpb25zIC0gVGhlIGRpcmVjdGlvbnMgb2JqZWN0IGNvbnRhaW5pbmcgdGhlIGdlb21ldHJ5IGFuZCBvdGhlciBpbmZvcm1hdGlvbi5cbiAqIEBwYXJhbSB7c3RyaW5nfSBwcm9qZWN0aW9uIC0gVGhlIHByb2plY3Rpb24gb2YgdGhlIGdlb21ldHJ5IGNvb3JkaW5hdGVzLlxuICogQHBhcmFtIHtib29sZWFufSBbYWN0aXZlPWZhbHNlXSAtIEluZGljYXRlcyB3aGV0aGVyIHRoZSBkaXJlY3Rpb24gaXMgYWN0aXZlIG9yIG5vdC4gRGVmYXVsdCBpcyBmYWxzZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFkZFJvdXRlVG9Sb3V0ZXNGZWF0dXJlU3RvcmUoXG4gIHJvdXRlc0ZlYXR1cmVTdG9yZTogUm91dGVzRmVhdHVyZVN0b3JlLFxuICBkaXJlY3Rpb25zOiBEaXJlY3Rpb25zLFxuICBwcm9qZWN0aW9uOiBzdHJpbmcsXG4gIGFjdGl2ZSA9IGZhbHNlXG4pOiB2b2lkIHtcbiAgY29uc3QgY29vcmRpbmF0ZTogQ29vcmRpbmF0ZSA9IGRpcmVjdGlvbnMuZ2VvbWV0cnkuY29vcmRpbmF0ZXM7XG4gIGNvbnN0IGxpbmVzdHJpbmc0MzI2OiBvbEdlb20uTGluZVN0cmluZyA9IG5ldyBvbEdlb20uTGluZVN0cmluZyhjb29yZGluYXRlKTtcbiAgY29uc3QgbGluZXN0cmluZ1N0b3JlOiBvbEdlb20uTGluZVN0cmluZyA9IGxpbmVzdHJpbmc0MzI2LnRyYW5zZm9ybShcbiAgICBwcm9qZWN0aW9uLFxuICAgIHJvdXRlc0ZlYXR1cmVTdG9yZS5tYXAucHJvamVjdGlvbkNvZGVcbiAgKTtcblxuICBjb25zdCBnZW9qc29uR2VvbTogRmVhdHVyZUdlb21ldHJ5ID0gbmV3IE9sR2VvSlNPTigpLndyaXRlR2VvbWV0cnlPYmplY3QoXG4gICAgbGluZXN0cmluZ1N0b3JlLFxuICAgIHtcbiAgICAgIGZlYXR1cmVQcm9qZWN0aW9uOiByb3V0ZXNGZWF0dXJlU3RvcmUubWFwLnByb2plY3Rpb25Db2RlLFxuICAgICAgZGF0YVByb2plY3Rpb246IHJvdXRlc0ZlYXR1cmVTdG9yZS5tYXAucHJvamVjdGlvbkNvZGVcbiAgICB9XG4gICkgYXMgRmVhdHVyZUdlb21ldHJ5O1xuXG4gIGNvbnN0IHByZXZpb3VzUm91dGU6IEZlYXR1cmVXaXRoRGlyZWN0aW9ucyA9IHJvdXRlc0ZlYXR1cmVTdG9yZS5nZXQoXG4gICAgZGlyZWN0aW9ucy5pZFxuICApO1xuICBjb25zdCBwcmV2aW91c1JvdXRlUmV2aXNpb246IG51bWJlciA9IHByZXZpb3VzUm91dGVcbiAgICA/IHByZXZpb3VzUm91dGUubWV0YS5yZXZpc2lvblxuICAgIDogMDtcblxuICBjb25zdCByb3V0ZUZlYXR1cmVTdG9yZTogRmVhdHVyZVdpdGhEaXJlY3Rpb25zID0ge1xuICAgIHR5cGU6IEZFQVRVUkUsXG4gICAgZ2VvbWV0cnk6IGdlb2pzb25HZW9tLFxuICAgIHByb2plY3Rpb246IHJvdXRlc0ZlYXR1cmVTdG9yZS5tYXAucHJvamVjdGlvbkNvZGUsXG4gICAgcHJvcGVydGllczoge1xuICAgICAgaWQ6IGRpcmVjdGlvbnMuaWQsXG4gICAgICB0eXBlOiBEaXJlY3Rpb25zVHlwZS5Sb3V0ZSxcbiAgICAgIGFjdGl2ZSxcbiAgICAgIGRpcmVjdGlvbnNcbiAgICB9LFxuICAgIG1ldGE6IHtcbiAgICAgIGlkOiBkaXJlY3Rpb25zLmlkLFxuICAgICAgcmV2aXNpb246IHByZXZpb3VzUm91dGVSZXZpc2lvbiArIDFcbiAgICB9LFxuICAgIG9sOiBuZXcgb2xGZWF0dXJlKHsgbGluZXN0cmluZ1N0b3JlIH0pXG4gIH07XG4gIHJvdXRlc0ZlYXR1cmVTdG9yZS51cGRhdGUocm91dGVGZWF0dXJlU3RvcmUpO1xufVxuXG4vKipcbiAqIEZvcm1hdHMgdGhlIGdpdmVuIGRpc3RhbmNlIGluIG1ldGVycyB0byBhIGh1bWFuLXJlYWRhYmxlIHN0cmluZy5cbiAqXG4gKiBAcGFyYW0ge251bWJlcn0gbWV0ZXJzIC0gVGhlIGRpc3RhbmNlIGluIG1ldGVycyB0byBiZSBmb3JtYXR0ZWQuXG4gKiBAcmV0dXJuIHtzdHJpbmcgfCB1bmRlZmluZWR9IFRoZSBmb3JtYXR0ZWQgZGlzdGFuY2Ugc3RyaW5nLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0RGlzdGFuY2UobWV0ZXJzOiBudW1iZXIpOiBzdHJpbmcge1xuICBpZiAobWV0ZXJzID09PSAwKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGlmIChtZXRlcnMgPCAxMDAwKSB7XG4gICAgcmV0dXJuIGAke01hdGgucm91bmQobWV0ZXJzKX0gbWA7XG4gIH1cblxuICBjb25zdCBraWxvbWV0ZXJzOiBudW1iZXIgPSBtZXRlcnMgLyAxMDAwO1xuICBjb25zdCByb3VuZFRvRGVjaW1hbDogMCB8IDEgPSBraWxvbWV0ZXJzID49IDEwID8gMSA6IDA7XG5cbiAgcmV0dXJuIGAke051bWJlclV0aWxzLnJvdW5kVG9ORGVjaW1hbChraWxvbWV0ZXJzLCByb3VuZFRvRGVjaW1hbCl9IGttYC5yZXBsYWNlKFxuICAgICcuJyxcbiAgICAnLCdcbiAgKTtcbn1cblxuLyoqXG4gKiBGb3JtYXRzIHRoZSBnaXZlbiBkdXJhdGlvbiBpbiBzZWNvbmRzIHRvIGEgaHVtYW4tcmVhZGFibGUgc3RyaW5nLlxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSBzZWNvbmRzIC0gVGhlIGR1cmF0aW9uIGluIHNlY29uZHMgdG8gYmUgZm9ybWF0dGVkLlxuICogQHJldHVybiB7c3RyaW5nfSBUaGUgZm9ybWF0dGVkIGR1cmF0aW9uIHN0cmluZy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdER1cmF0aW9uKHNlY29uZHM6IG51bWJlcik6IHN0cmluZyB7XG4gIGNvbnN0IGhvdXJzOiBudW1iZXIgPSBNYXRoLmZsb29yKHNlY29uZHMgLyAzNjAwKTtcbiAgY29uc3QgbWludXRlczogbnVtYmVyID0gTWF0aC5mbG9vcigoc2Vjb25kcyAlIDM2MDApIC8gNjApO1xuXG4gIGlmIChob3Vycykge1xuICAgIHJldHVybiBgJHtob3Vyc30gaCAke21pbnV0ZXN9IG1pbmA7XG4gIH1cblxuICBpZiAobWludXRlcykge1xuICAgIHJldHVybiBgJHttaW51dGVzfSBtaW5gO1xuICB9XG5cbiAgcmV0dXJuICc8IDEgbWluJztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdFN0ZXAoXG4gIHN0ZXA6IElnb1N0ZXAsXG4gIGxhbmd1YWdlU2VydmljZTogTGFuZ3VhZ2VTZXJ2aWNlLFxuICBsYXN0U3RlcCA9IGZhbHNlXG4pIHtcbiAgY29uc3QgbWFuZXV2ZXJUeXBlOiBNYW5ldXZlclR5cGUgPSBzdGVwLm1hbmV1dmVyLnR5cGU7XG4gIGNvbnN0IG1hbmV1dmVyTW9kaWZpZXI6IE1hbmV1dmVyTW9kaWZpZXIgPSBzdGVwLm1hbmV1dmVyLm1vZGlmaWVyO1xuICBjb25zdCBuYW1lOiBzdHJpbmcgPSBzdGVwLm5hbWU7XG4gIGNvbnN0IG1hbmV1dmVyQmVhcmluZ0FmdGVyOiBudW1iZXIgPSBzdGVwLm1hbmV1dmVyLmJlYXJpbmdfYWZ0ZXI7XG5cbiAgY29uc3QgdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlID0gbGFuZ3VhZ2VTZXJ2aWNlLnRyYW5zbGF0ZTtcbiAgY29uc3QgdHJhbnNsYXRlZE1hbmV1dmVyQmVhcmluZ0FmdGVyOiBzdHJpbmcgPSB0cmFuc2xhdGVNYW5ldXZlckJlYXJpbmcoXG4gICAgbWFuZXV2ZXJCZWFyaW5nQWZ0ZXIsXG4gICAgbGFuZ3VhZ2VTZXJ2aWNlXG4gICk7XG4gIGNvbnN0IHRyYW5zbGF0ZWRNYW5ldXZlck1vZGlmaWVyOiBzdHJpbmcgPSB0cmFuc2xhdGVNYW5ldXZlck1vZGlmaWVyKFxuICAgIG1hbmV1dmVyTW9kaWZpZXIsXG4gICAgbGFuZ3VhZ2VTZXJ2aWNlXG4gICk7XG5cbiAgbGV0IGljb25OYW1lID0gJ3N0cmFpZ2h0JzsgLy8gYXJyb3cgcG9pbnQgdXAgYnkgZGVmYXVsdFxuICBsZXQgaW5zdHJ1Y3Rpb24gPSAnJztcblxuICBpZiAobWFuZXV2ZXJUeXBlID09PSBNYW5ldXZlclR5cGUuVHVybikge1xuICAgIGlmIChcbiAgICAgIG1hbmV1dmVyTW9kaWZpZXIgPT09IE1hbmV1dmVyTW9kaWZpZXIuVXR1cm4gfHxcbiAgICAgIG1hbmV1dmVyTW9kaWZpZXIgPT09IE1hbmV1dmVyTW9kaWZpZXIuU3RyYWlnaHRcbiAgICApIHtcbiAgICAgIGluc3RydWN0aW9uID0gdHJhbnNsYXRlLmluc3RhbnQoXG4gICAgICAgIGBpZ28uZ2VvLmRpcmVjdGlvbnMucmVzdWx0cy5tYW5ldXZlclR5cGUudHVybi4ke21hbmV1dmVyTW9kaWZpZXJ9YCxcbiAgICAgICAge1xuICAgICAgICAgIG1hbmV1dmVyTW9kaWZpZXI6IHRyYW5zbGF0ZWRNYW5ldXZlck1vZGlmaWVyLFxuICAgICAgICAgIG5hbWVcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICAgIGlmIChtYW5ldXZlck1vZGlmaWVyID09PSBNYW5ldXZlck1vZGlmaWVyLlV0dXJuKSB7XG4gICAgICAgIGljb25OYW1lID0gJ3VfdHVybl9sZWZ0JztcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaW5zdHJ1Y3Rpb24gPSB0cmFuc2xhdGUuaW5zdGFudChcbiAgICAgICAgJ2lnby5nZW8uZGlyZWN0aW9ucy5yZXN1bHRzLm1hbmV1dmVyVHlwZS50dXJuLmVsc2UnLFxuICAgICAgICB7XG4gICAgICAgICAgbWFuZXV2ZXJNb2RpZmllcjogdHJhbnNsYXRlZE1hbmV1dmVyTW9kaWZpZXIsXG4gICAgICAgICAgbmFtZVxuICAgICAgICB9XG4gICAgICApO1xuXG4gICAgICBpZiAobWFuZXV2ZXJNb2RpZmllciA9PT0gTWFuZXV2ZXJNb2RpZmllci5TbGlnaHRSaWdodCkge1xuICAgICAgICBpY29uTmFtZSA9ICd0dXJuX3NsaWdodF9yaWdodCc7XG4gICAgICB9IGVsc2UgaWYgKFxuICAgICAgICBtYW5ldXZlck1vZGlmaWVyID09PSBNYW5ldXZlck1vZGlmaWVyLlJpZ2h0IHx8XG4gICAgICAgIG1hbmV1dmVyTW9kaWZpZXIgPT09IE1hbmV1dmVyTW9kaWZpZXIuU2hhcnBSaWdodFxuICAgICAgKSB7XG4gICAgICAgIGljb25OYW1lID0gJ3R1cm5fcmlnaHQnO1xuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgbWFuZXV2ZXJNb2RpZmllciA9PT0gTWFuZXV2ZXJNb2RpZmllci5MZWZ0IHx8XG4gICAgICAgIG1hbmV1dmVyTW9kaWZpZXIgPT09IE1hbmV1dmVyTW9kaWZpZXIuU2hhcnBMZWZ0XG4gICAgICApIHtcbiAgICAgICAgaWNvbk5hbWUgPSAndHVybl9sZWZ0JztcbiAgICAgIH0gZWxzZSBpZiAobWFuZXV2ZXJNb2RpZmllciA9PT0gTWFuZXV2ZXJNb2RpZmllci5TbGlnaHRMZWZ0KSB7XG4gICAgICAgIGljb25OYW1lID0gJ3R1cm5fc2xpZ2h0X2xlZnQnO1xuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIGlmIChtYW5ldXZlclR5cGUgPT09IE1hbmV1dmVyVHlwZS5OZXdOYW1lKSB7XG4gICAgaW5zdHJ1Y3Rpb24gPSB0cmFuc2xhdGUuaW5zdGFudChcbiAgICAgIGBpZ28uZ2VvLmRpcmVjdGlvbnMucmVzdWx0cy5tYW5ldXZlclR5cGUubmV3IG5hbWVgLFxuICAgICAge1xuICAgICAgICBuYW1lLFxuICAgICAgICBtYW5ldXZlckJlYXJpbmc6IHRyYW5zbGF0ZWRNYW5ldXZlckJlYXJpbmdBZnRlclxuICAgICAgfVxuICAgICk7XG4gIH0gZWxzZSBpZiAobWFuZXV2ZXJUeXBlID09PSBNYW5ldXZlclR5cGUuRGVwYXJ0KSB7XG4gICAgaWNvbk5hbWUgPSAnZGlyZWN0aW9ucyc7XG4gICAgaW5zdHJ1Y3Rpb24gPSB0cmFuc2xhdGUuaW5zdGFudChcbiAgICAgIGBpZ28uZ2VvLmRpcmVjdGlvbnMucmVzdWx0cy5tYW5ldXZlclR5cGUuZGVwYXJ0YCxcbiAgICAgIHtcbiAgICAgICAgbmFtZSxcbiAgICAgICAgbWFuZXV2ZXJCZWFyaW5nOiB0cmFuc2xhdGVkTWFuZXV2ZXJCZWFyaW5nQWZ0ZXJcbiAgICAgIH1cbiAgICApO1xuICB9IGVsc2UgaWYgKG1hbmV1dmVyVHlwZSA9PT0gTWFuZXV2ZXJUeXBlLkFycml2ZSkge1xuICAgIGljb25OYW1lID0gJ3Nwb3J0c19zY29yZSc7XG4gICAgaW5zdHJ1Y3Rpb24gPSB0cmFuc2xhdGUuaW5zdGFudChcbiAgICAgIGBpZ28uZ2VvLmRpcmVjdGlvbnMucmVzdWx0cy5tYW5ldXZlclR5cGUuYXJyaXZlLiR7bGFzdFN0ZXAgPyAnbGFzdFN0ZXAnIDogJ2ludGVybWVkaWF0ZSd9YCxcbiAgICAgIHtcbiAgICAgICAgbmFtZVxuICAgICAgfVxuICAgICk7XG4gIH0gZWxzZSBpZiAobWFuZXV2ZXJUeXBlID09PSBNYW5ldXZlclR5cGUuTWVyZ2UpIHtcbiAgICBpbnN0cnVjdGlvbiA9IHRyYW5zbGF0ZS5pbnN0YW50KFxuICAgICAgJ2lnby5nZW8uZGlyZWN0aW9ucy5yZXN1bHRzLm1hbmV1dmVyVHlwZS5tZXJnZScsXG4gICAgICB7XG4gICAgICAgIG5hbWVcbiAgICAgIH1cbiAgICApO1xuICAgIGljb25OYW1lID0gJ21lcmdlJztcbiAgfSBlbHNlIGlmIChcbiAgICBtYW5ldXZlclR5cGUgPT09IE1hbmV1dmVyVHlwZS5PblJhbXAgfHxcbiAgICBtYW5ldXZlclR5cGUgPT09IE1hbmV1dmVyVHlwZS5PZmZSYW1wXG4gICkge1xuICAgIGluc3RydWN0aW9uID0gdHJhbnNsYXRlLmluc3RhbnQoXG4gICAgICBgaWdvLmdlby5kaXJlY3Rpb25zLnJlc3VsdHMubWFuZXV2ZXJUeXBlLiR7bWFuZXV2ZXJUeXBlfWAsXG4gICAgICB7XG4gICAgICAgIG1hbmV1dmVyTW9kaWZpZXI6IHRyYW5zbGF0ZWRNYW5ldXZlck1vZGlmaWVyXG4gICAgICB9XG4gICAgKTtcbiAgfSBlbHNlIGlmIChtYW5ldXZlclR5cGUgPT09IE1hbmV1dmVyVHlwZS5Gb3JrKSB7XG4gICAgY29uc3QgZGlyZWN0aW9uS2V5OiBzdHJpbmcgPVxuICAgICAgbWFuZXV2ZXJNb2RpZmllci5zZWFyY2goJ2xlZnQnKSA+PSAwID8gJ2xlZnQnIDogJ3JpZ2h0JztcbiAgICBpY29uTmFtZSA9XG4gICAgICBkaXJlY3Rpb25LZXkgPT09ICdsZWZ0JyA/ICd0dXJuX3NsaWdodF9sZWZ0JyA6ICd0dXJuX3NsaWdodF9yaWdodCc7XG4gICAgaW5zdHJ1Y3Rpb24gPSB0cmFuc2xhdGUuaW5zdGFudChcbiAgICAgIGBpZ28uZ2VvLmRpcmVjdGlvbnMucmVzdWx0cy5tYW5ldXZlclR5cGUuZm9yay4ke2RpcmVjdGlvbktleX1gLFxuICAgICAge1xuICAgICAgICBuYW1lXG4gICAgICB9XG4gICAgKTtcbiAgfSBlbHNlIGlmIChcbiAgICBtYW5ldXZlclR5cGUgPT09IE1hbmV1dmVyVHlwZS5FbmRPZlJvYWQgfHxcbiAgICBtYW5ldXZlclR5cGUgPT09IE1hbmV1dmVyVHlwZS5Vc2VMYW5lIHx8XG4gICAgbWFuZXV2ZXJUeXBlID09PSBNYW5ldXZlclR5cGUuQ29udGludWVcbiAgKSB7XG4gICAgaWYgKG1hbmV1dmVyVHlwZSA9PT0gTWFuZXV2ZXJUeXBlLkNvbnRpbnVlKSB7XG4gICAgICBpZiAobWFuZXV2ZXJNb2RpZmllciA9PT0gTWFuZXV2ZXJNb2RpZmllci5VdHVybikge1xuICAgICAgICBpY29uTmFtZSA9ICd1X3R1cm5fbGVmdCc7XG4gICAgICAgIGluc3RydWN0aW9uID0gdHJhbnNsYXRlLmluc3RhbnQoXG4gICAgICAgICAgYGlnby5nZW8uZGlyZWN0aW9ucy5yZXN1bHRzLm1hbmV1dmVyVHlwZS50dXJuLiR7bWFuZXV2ZXJNb2RpZmllcn1gLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIG1hbmV1dmVyTW9kaWZpZXI6IHRyYW5zbGF0ZWRNYW5ldXZlck1vZGlmaWVyLFxuICAgICAgICAgICAgbmFtZVxuICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGluc3RydWN0aW9uID0gdHJhbnNsYXRlLmluc3RhbnQoXG4gICAgICAgICAgYGlnby5nZW8uZGlyZWN0aW9ucy5yZXN1bHRzLm1hbmV1dmVyVHlwZS4ke21hbmV1dmVyVHlwZX1gLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIG1hbmV1dmVyTW9kaWZpZXI6IHRyYW5zbGF0ZWRNYW5ldXZlck1vZGlmaWVyLFxuICAgICAgICAgICAgbmFtZVxuICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKFxuICAgICAgICBtYW5ldXZlck1vZGlmaWVyID09PSBNYW5ldXZlck1vZGlmaWVyLlNoYXJwUmlnaHQgfHxcbiAgICAgICAgbWFuZXV2ZXJNb2RpZmllciA9PT0gTWFuZXV2ZXJNb2RpZmllci5SaWdodFxuICAgICAgKSB7XG4gICAgICAgIGljb25OYW1lID0gJ3R1cm5fcmlnaHQnO1xuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgbWFuZXV2ZXJNb2RpZmllciA9PT0gTWFuZXV2ZXJNb2RpZmllci5TaGFycExlZnQgfHxcbiAgICAgICAgbWFuZXV2ZXJNb2RpZmllciA9PT0gTWFuZXV2ZXJNb2RpZmllci5MZWZ0XG4gICAgICApIHtcbiAgICAgICAgaWNvbk5hbWUgPSAndHVybl9sZWZ0JztcbiAgICAgIH0gZWxzZSBpZiAobWFuZXV2ZXJNb2RpZmllciA9PT0gTWFuZXV2ZXJNb2RpZmllci5TbGlnaHRSaWdodCkge1xuICAgICAgICBpY29uTmFtZSA9ICd0dXJuX3NsaWdodF9yaWdodCc7XG4gICAgICB9IGVsc2UgaWYgKG1hbmV1dmVyTW9kaWZpZXIgPT09IE1hbmV1dmVyTW9kaWZpZXIuU2xpZ2h0TGVmdCkge1xuICAgICAgICBpY29uTmFtZSA9ICd0dXJuX3NsaWdodF9sZWZ0JztcbiAgICAgIH1cbiAgICAgIGluc3RydWN0aW9uID0gdHJhbnNsYXRlLmluc3RhbnQoXG4gICAgICAgIGBpZ28uZ2VvLmRpcmVjdGlvbnMucmVzdWx0cy5tYW5ldXZlclR5cGUuJHttYW5ldXZlclR5cGV9YCxcbiAgICAgICAge1xuICAgICAgICAgIG1hbmV1dmVyTW9kaWZpZXI6IHRyYW5zbGF0ZWRNYW5ldXZlck1vZGlmaWVyLFxuICAgICAgICAgIG5hbWVcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAoXG4gICAgbWFuZXV2ZXJUeXBlID09PSBNYW5ldXZlclR5cGUuUm91bmRhYm91dCB8fFxuICAgIG1hbmV1dmVyVHlwZSA9PT0gTWFuZXV2ZXJUeXBlLlJvdGFyeSB8fFxuICAgIG1hbmV1dmVyVHlwZSA9PT0gTWFuZXV2ZXJUeXBlLlJvdW5kYWJvdXRUdXJuIHx8XG4gICAgbWFuZXV2ZXJUeXBlID09PSBNYW5ldXZlclR5cGUuRXhpdFJvdW5kYWJvdXRcbiAgKSB7XG4gICAgY29uc3Qgcm91bmRhYm91dEtleSA9IG1hbmV1dmVyVHlwZS5yZXBsYWNlKCdyb3VuZGFib3V0ICcsICcnKTtcbiAgICBpbnN0cnVjdGlvbiA9IHRyYW5zbGF0ZS5pbnN0YW50KFxuICAgICAgYGlnby5nZW8uZGlyZWN0aW9ucy5yZXN1bHRzLm1hbmV1dmVyVHlwZS4ke3JvdW5kYWJvdXRLZXl9YCxcbiAgICAgIHtcbiAgICAgICAgbmFtZVxuICAgICAgfVxuICAgICk7XG4gICAgaWNvbk5hbWUgPSAnZG9udXRfbGFyZ2UnO1xuICB9IGVsc2UgaWYgKG1hbmV1dmVyVHlwZSA9PT0gTWFuZXV2ZXJUeXBlLk5vdGlmaWNhdGlvbikge1xuICAgIGluc3RydWN0aW9uID0gdHJhbnNsYXRlLmluc3RhbnQoXG4gICAgICAnaWdvLmdlby5kaXJlY3Rpb25zLnJlc3VsdHMubWFuZXV2ZXJUeXBlLm5vdGlmaWNhdGlvbidcbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIHsgaW5zdHJ1Y3Rpb24sIGljb25OYW1lIH07XG59XG5cbi8qKlxuICogVHJhbnNsYXRlcyBhIG1hbmV1dmVyIG1vZGlmaWVyIGludG8gYSBodW1hbi1yZWFkYWJsZSBzdHJpbmcgdXNpbmcgdGhlIHByb3ZpZGVkIGxhbmd1YWdlIHNlcnZpY2UuXG4gKlxuICogQHBhcmFtIHtNYW5ldXZlck1vZGlmaWVyfSBtYW5ldXZlck1vZGlmaWVyIC0gVGhlIG1hbmV1dmVyIG1vZGlmaWVyIHRvIGJlIHRyYW5zbGF0ZWQuXG4gKiBAcGFyYW0ge0xhbmd1YWdlU2VydmljZX0gbGFuZ3VhZ2VTZXJ2aWNlIC0gVGhlIGxhbmd1YWdlIHNlcnZpY2UgdXNlZCBmb3IgdHJhbnNsYXRpb24uXG4gKiBAcmV0dXJuIHtzdHJpbmcgfCB1bmRlZmluZWR9IFRoZSB0cmFuc2xhdGVkIG1hbmV1dmVyIG1vZGlmaWVyIHN0cmluZywgb3IgdW5kZWZpbmVkIGlmIHRoZSBtb2RpZmllciBpcyBmYWxzeS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRyYW5zbGF0ZU1hbmV1dmVyTW9kaWZpZXIoXG4gIG1hbmV1dmVyTW9kaWZpZXI6IE1hbmV1dmVyTW9kaWZpZXIsXG4gIGxhbmd1YWdlU2VydmljZTogTGFuZ3VhZ2VTZXJ2aWNlXG4pOiBzdHJpbmcge1xuICBjb25zdCB0cmFuc2xhdGUgPSBsYW5ndWFnZVNlcnZpY2UudHJhbnNsYXRlO1xuICByZXR1cm4gbWFuZXV2ZXJNb2RpZmllclxuICAgID8gdHJhbnNsYXRlLmluc3RhbnQoXG4gICAgICAgIGBpZ28uZ2VvLmRpcmVjdGlvbnMucmVzdWx0cy5tYW5ldXZlck1vZGlmaWVyLiR7bWFuZXV2ZXJNb2RpZmllcn1gXG4gICAgICApXG4gICAgOiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogVHJhbnNsYXRlcyB0aGUgZ2l2ZW4gYmVhcmluZyB2YWx1ZSBpbnRvIGEgaHVtYW4tcmVhZGFibGUgZGlyZWN0aW9uIHVzaW5nIHRoZSBwcm92aWRlZCBsYW5ndWFnZSBzZXJ2aWNlLlxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSBiZWFyaW5nIC0gVGhlIGJlYXJpbmcgdmFsdWUgdG8gYmUgdHJhbnNsYXRlZC5cbiAqIEBwYXJhbSB7TGFuZ3VhZ2VTZXJ2aWNlfSBsYW5ndWFnZVNlcnZpY2UgLSBUaGUgbGFuZ3VhZ2Ugc2VydmljZSB1c2VkIGZvciB0cmFuc2xhdGlvbi5cbiAqIEByZXR1cm4ge3N0cmluZ30gVGhlIHRyYW5zbGF0ZWQgZGlyZWN0aW9uIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGdpdmVuIGJlYXJpbmcgdmFsdWUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0cmFuc2xhdGVNYW5ldXZlckJlYXJpbmcoXG4gIGJlYXJpbmc6IG51bWJlcixcbiAgbGFuZ3VhZ2VTZXJ2aWNlOiBMYW5ndWFnZVNlcnZpY2Vcbik6IHN0cmluZyB7XG4gIGNvbnN0IHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSA9IGxhbmd1YWdlU2VydmljZS50cmFuc2xhdGU7XG4gIGNvbnN0IGRpcmVjdGlvbnM6IHN0cmluZ1tdID0gWyduJywgJ25lJywgJ2UnLCAnc2UnLCAncycsICdzdycsICd3JywgJ253J107XG5cbiAgY29uc3QgZGlyZWN0aW9uSW5kZXg6IG51bWJlciA9IE1hdGgucm91bmQoYmVhcmluZyAvIDQ1KSAlIDg7XG5cbiAgcmV0dXJuIHRyYW5zbGF0ZS5pbnN0YW50KFxuICAgIGBpZ28uZ2VvLmRpcmVjdGlvbnMucmVzdWx0cy5kaXJlY3Rpb24uJHtkaXJlY3Rpb25zW2RpcmVjdGlvbkluZGV4XX1gXG4gICk7XG59XG4iXX0=
@@ -0,0 +1,6 @@
1
+ export * from './directions.service';
2
+ export * from './directions.enum';
3
+ export * from './directions.interface';
4
+ export * from './directions.utils';
5
+ export * from './store';
6
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9nZW8vc3JjL2xpYi9kaXJlY3Rpb25zL3NoYXJlZC9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLHNCQUFzQixDQUFDO0FBQ3JDLGNBQWMsbUJBQW1CLENBQUM7QUFDbEMsY0FBYyx3QkFBd0IsQ0FBQztBQUN2QyxjQUFjLG9CQUFvQixDQUFDO0FBQ25DLGNBQWMsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9kaXJlY3Rpb25zLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9kaXJlY3Rpb25zLmVudW0nO1xuZXhwb3J0ICogZnJvbSAnLi9kaXJlY3Rpb25zLmludGVyZmFjZSc7XG5leHBvcnQgKiBmcm9tICcuL2RpcmVjdGlvbnMudXRpbHMnO1xuZXhwb3J0ICogZnJvbSAnLi9zdG9yZSc7XG4iXX0=
@@ -0,0 +1,21 @@
1
+ import { EntityStore } from '@igo2/common/entity';
2
+ import { BehaviorSubject } from 'rxjs';
3
+ import { FeatureStore } from '../../feature/shared/store';
4
+ /**
5
+ * The class is a specialized version of an EntityStore that stores
6
+ * stops.
7
+ */
8
+ export class StopsStore extends EntityStore {
9
+ storeInitialized$ = new BehaviorSubject(false);
10
+ clearStops() {
11
+ this.storeInitialized$.next(false);
12
+ this.clear();
13
+ }
14
+ }
15
+ export class StopsFeatureStore extends FeatureStore {
16
+ }
17
+ export class RoutesFeatureStore extends FeatureStore {
18
+ }
19
+ export class StepsFeatureStore extends FeatureStore {
20
+ }
21
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvcmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9nZW8vc3JjL2xpYi9kaXJlY3Rpb25zL3NoYXJlZC9zdG9yZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFbEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUV2QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFRMUQ7OztHQUdHO0FBQ0gsTUFBTSxPQUFPLFVBQVcsU0FBUSxXQUFpQjtJQUN4QyxpQkFBaUIsR0FBRyxJQUFJLGVBQWUsQ0FBVSxLQUFLLENBQUMsQ0FBQztJQUV4RCxVQUFVO1FBQ2YsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNuQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDZixDQUFDO0NBQ0Y7QUFFRCxNQUFNLE9BQU8saUJBQWtCLFNBQVEsWUFBNkI7Q0FBRztBQUN2RSxNQUFNLE9BQU8sa0JBQW1CLFNBQVEsWUFBbUM7Q0FBRztBQUM5RSxNQUFNLE9BQU8saUJBQWtCLFNBQVEsWUFBNkI7Q0FBRyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEVudGl0eVN0b3JlIH0gZnJvbSAnQGlnbzIvY29tbW9uL2VudGl0eSc7XG5cbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBGZWF0dXJlU3RvcmUgfSBmcm9tICcuLi8uLi9mZWF0dXJlL3NoYXJlZC9zdG9yZSc7XG5pbXBvcnQge1xuICBGZWF0dXJlV2l0aERpcmVjdGlvbnMsXG4gIEZlYXR1cmVXaXRoU3RlcCxcbiAgRmVhdHVyZVdpdGhTdG9wLFxuICBTdG9wXG59IGZyb20gJy4vZGlyZWN0aW9ucy5pbnRlcmZhY2UnO1xuXG4vKipcbiAqIFRoZSBjbGFzcyBpcyBhIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYW4gRW50aXR5U3RvcmUgdGhhdCBzdG9yZXNcbiAqIHN0b3BzLlxuICovXG5leHBvcnQgY2xhc3MgU3RvcHNTdG9yZSBleHRlbmRzIEVudGl0eVN0b3JlPFN0b3A+IHtcbiAgcHVibGljIHN0b3JlSW5pdGlhbGl6ZWQkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG5cbiAgcHVibGljIGNsZWFyU3RvcHMoKSB7XG4gICAgdGhpcy5zdG9yZUluaXRpYWxpemVkJC5uZXh0KGZhbHNlKTtcbiAgICB0aGlzLmNsZWFyKCk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFN0b3BzRmVhdHVyZVN0b3JlIGV4dGVuZHMgRmVhdHVyZVN0b3JlPEZlYXR1cmVXaXRoU3RvcD4ge31cbmV4cG9ydCBjbGFzcyBSb3V0ZXNGZWF0dXJlU3RvcmUgZXh0ZW5kcyBGZWF0dXJlU3RvcmU8RmVhdHVyZVdpdGhEaXJlY3Rpb25zPiB7fVxuZXhwb3J0IGNsYXNzIFN0ZXBzRmVhdHVyZVN0b3JlIGV4dGVuZHMgRmVhdHVyZVN0b3JlPEZlYXR1cmVXaXRoU3RlcD4ge31cbiJdfQ==